我正在研究一个与一群人密切沟通的项目。我并不擅长调试分布式程序,但我强烈怀疑我一次向过程发送太多消息。我已经在mpi4py中重新实现了actor模型。每个进程都有一个作业“邮箱”,当他们完成邮箱时,他们决定进入CHECK_FOR_UPDATES
模式,在那里他们看到是否有任何新邮件可以接收。mpi4py recv数据上限?
我与一群学生和我一直在研究的课程有问题。当负载变得过大时,它会开始崩溃,但我们无法弄清楚问题出在哪里,因为我们在调试东西时都很糟糕。
我问过我学校的一些人是否有任何想法,并建议,因为我们正在重新实施演员系统,所以我们应该考虑使用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
阵列)