MPI_Probe是否会尽快返回?

时间:2015-03-05 14:29:06

标签: mpi

假设我的MPI进程正在等待一条非常大的消息,我正在等待MPI_Probe。假设一旦进程收到来自网络的第一个消息通知(如大小或类似的标题),MPI_Probe调用将返回是否正确?

是的,它会比我等待MPI_Recv的消息更快地返回,因为它不需要接收完整的消息吗?

1 个答案:

答案 0 :(得分:2)

标准在这个问题上相当沉默(MPI-3.0,第3.8.1节),但确实提供了这个:

  

MPI_PROBE和MPI_IPROBE的MPI实现需要保证进度:   如果进程发出了对MPI_PROBE的调用,并且发送了与探测器匹配的发送   已经由某个进程启动,然后调用MPI_PROBE将返回,除非   另一个并发接收操作(由另一个并行执行)接收消息   探究过程中的线程)。

由于MPI_PROBE和MPI_RECV都会参与进度引擎,我怀疑除了内存副本之外,这两个函数之间还有很大差异。通过使用进度引擎,MPI实现可能会(内部)接收消息。在MPI_PROBE中可以避免将其复制到用户缓冲区的最后一步。

如果您担心性能,那么尽可能避免使用MPI_ANY_SOURCE和MPI_ANY_TAG将有助于大多数实现(当然MPICH)采用更快的路径。