mpi4py recv 数据上限?

mpi4py recv data cap?

我正在开发一个与一群人交流密集的程序。我不是特别擅长调试分布式程序,但我强烈怀疑我一次向一个进程发送了太多消息。我在 mpi4py 中重新实现了 actor 模型。每个进程都有 "mailbox" 个作业,当他们完成邮箱后,他们决定进入 CHECK_FOR_UPDATES 模式,在该模式下他们查看是否可以接收任何新消息。

我和一群学生一直在研究的程序有问题。当负载变得太大时它就会开始崩溃,但是我们无法找出问题出在哪里,因为我们都不太擅长调试东西。

我问过我学校的一些人,他有没有什么想法,并建议我们在重新实现演员系统时,我们应该考虑使用 Akka。一位今年的学生说,可能还有一个问题,一个演员可能会被消息淹没并崩溃。 I asked about it here. 流模型似乎不是我们想要的(更多细节见我的评论),从那以后我回顾了 mpi4py 程序,因为我以前没有考虑过这个问题。

在普通的 C 或 Fortran 实现中,似乎有一个 count parameter for MPI_Recv。我注意到 comm.recv 没有 count 参数,并怀疑当一个进程进入 CHECK_FOR_UPDATES 模式时,它只会消耗来自各种来源的大量消息并死亡。 (从技术上讲,我不确定,但我们怀疑可能是这种情况。)有没有办法限制 comm.recv 接受的数据量?

(注意:我想避免使用 comm.Recv 变体,因为它限制用户使用 numpy 数组。)

Found the answer:

The recv() and irecv() methods may be passed a buffer object that can be repeatedly used to receive messages avoiding internal memory allocation. The buffer must be sufficiently large to accomodate the transmitted messages.

强调我的。因此,我必须使用 SendRecv.