mpi4py recv数据上限?

时间:2017-02-14 20:04:37

标签: python mpi4py

我正在开发一个与一群人密切沟通的计划。我不是特别擅长调试分布式程序,但我强烈怀疑我一次向进程发送了太多消息。我在mpi4py中重新实现了actor模型。每个进程都有一个“邮箱”的作业,当他们完成邮箱后,他们决定进入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数组。)

1 个答案:

答案 0 :(得分:0)

Found the answer:

  

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

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