[英]mpi4py recv data cap?
我正在开发一个与一群人进行密集交流的程序。 我不是特别擅长调试分布式程序,但是我强烈怀疑我一次向一个进程发送太多消息。 我在mpi4py中重新实现了actor模型。 每个进程都有一个“邮箱”作业,当他们完成邮箱时,他们决定进入CHECK_FOR_UPDATES
模式,在CHECK_FOR_UPDATES
模式下,他们是否可以接收新消息。
我遇到了一群学生和我一直在努力的程序问题。 当负载太大时,它将开始崩溃,但是我们无法弄清楚问题出在哪里,因为我们都很不擅长调试东西。
我问我学校的一些人是否有任何想法,并建议在重新实现演员系统时,我们应该考虑使用Akka。 今年的一名学生说,仍然可能存在问题,一个演员可能会被消息淹没和崩溃。 我在这里问过。 流模型似乎不是我们想要的模型(有关更多详细信息,请参见我的评论),此后我回头看了看mpi4py程序,因为我之前没有考虑过这个问题。
在普通的C或Fortran实现中,似乎存在MPI_Recv
的count
参数 。 我注意到comm.recv
没有count
参数,并怀疑当进程进入CHECK_FOR_UPDATES
模式时,它仅消耗大量来自各种来源和管芯的消息。 (从技术上来说,我不确定,但我们怀疑可能是这种情况。)有没有办法限制comm.recv
接受的数据量?
(注意:我想避免使用comm.Recv
变体,因为它限制了用户使用numpy
数组。)
可以向
recv()
和irecv()
方法传递一个缓冲区对象,该缓冲区对象可以重复用于接收消息,从而避免内部内存分配。 缓冲区必须足够大以容纳已传输的消息 。
强调我的。 因此,我必须使用Send
和Recv
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.