我正在实施一个集线器/服务器MPI应用程序。每个服务器都可以等待一些数据,然后他们执行MPI发送到集线器。让我的中心等待从ANY_SOURCE做一个Recv对我来说相对简单。集线器可以忙于处理数据。我担心的是从其中一个服务器上跳过数据。这种情况的可能性有多大:
我不需要保证发送的订单是ANY_SOURCE处理它们的顺序(虽然它会很好)但是如果我在实践中新的那么它将接近订单他们被送了,我可以和上面一起去。但是,如果我可能跳过其中一个服务器的数据,我需要实现更复杂的东西。我认为这将是这种模式:
这需要更复杂的代码,我的第一次努力以一种我发现难以调试的方式在Waitany调用中崩溃。我正在使用Python绑定mpi4py - 因此我对使用的缓冲区的控制较少。
答案 0 :(得分:2)
MPI standard保证按照发送顺序(非超车消息)接收消息。另请参阅this answer to a similar question。
但是,从ANY_SOURCE
收到并且有不同的发件人时,有no guarantee of fairness。所以,是的,如果应用程序需要,程序员有责任设计自己的公平系统。