mpi4py recv数据上限



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

我和一群学生一直在研究的程序遇到了问题。当负载太大时,它会开始崩溃,但我们不知道问题出在哪里,因为我们都不擅长调试东西。

我问了我学校的一些人,他是否有任何想法,并建议,在我们重新实施演员制度时,我们应该考虑使用阿卡。今年的一名学生表示,可能仍然存在一个问题,一名演员可能会被信息淹没并崩溃。我在这里问过。流模型似乎不是我们想要的(更多细节请参阅我的评论),从那以后,我回顾了mpi4py程序,因为我以前没有考虑过这个问题。

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

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

找到答案:

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

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

最新更新