2017-02-14 9 views
0

私は、人々のグループとコミュニケーションが集中するプログラムに取り組んでいます。私は分散プログラムのデバッグにはあまりよく似ていませんが、あまりにも多くのメッセージを一度にプロセスに送信しているという強い疑いがあります。私はmpi4pyでアクターモデルを再実装しました。各プロセスにはジョブの「メールボックス」があり、メールボックスが終了すると、CHECK_FOR_UPDATESモードに入り、受信できる新しいメッセージがあるかどうかが判断されます。mpi4py recvデータキャップ?

私は、学生グループと私が取り組んでいるプログラムに問題がありました。負荷が大きくなり過ぎるとクラッシュすることになりますが、デバッグの面ではかなり問題があるため、問題がどこにあるのかわかりませんでした。

私は学校に何人かのアイデアがあるかどうか聞いてきましたが、俳優システムを再実装するときには、Akkaの使用を検討するべきだと提案しました。今年の学生は、1人の俳優がメッセージで溢れてクラッシュするかもしれないという問題がまだ残っている可能性があると語った。 I asked about it here.ストリームモデルは私たちが望むものではないようです(詳細は私のコメントを参照してください)。私は以前からこの問題を説明していなかったので、mpi4pyプログラムを振り返りました。

プレーンなCまたはFortranの実装では、count parameter for MPI_Recvがあるようです。私は、comm.recvにはcountのパラメータがなく、プロセスがCHECK_FOR_UPDATESモードになると、さまざまなソースとメッセージから1トンのメッセージしか消費しないと考えられました。 (技術的にはわかりませんが、それが当てはまると思われます)comm.recvが受け入れるデータの量を制限する方法はありますか?

(注:私はそれがnumpyアレイを使用するユーザを制限するようcomm.Recv変異体の使用を避けたい)

答えて

0

Found the answer:

recv()irecv()方法はできるバッファオブジェクトを渡すことができます内部メモリ割り当てを避けるためにメッセージを受け取るために繰り返し使用されます。 バッファは、送信されたメッセージを収容するのに十分な大きさでなければなりません。

強調鉱山。したがって、SendRecvを使用する必要があります。