私は、人々のグループとコミュニケーションが集中するプログラムに取り組んでいます。私は分散プログラムのデバッグにはあまりよく似ていませんが、あまりにも多くのメッセージを一度にプロセスに送信しているという強い疑いがあります。私は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
変異体の使用を避けたい)