2017-02-14 54 views
0

我正在研究一个与一群人密切沟通的项目。我并不擅长调试分布式程序,但我强烈怀疑我一次向过程发送太多消息。我已经在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阵列)

回答

0

Found the answer:

recv()irecv()方法可以通过一个缓冲器对象,该对象可以是反复用于接收消息,以避免内部内存分配。 缓冲区必须足够大以容纳传输的消息

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