假设我的MPI进程正在等待一条非常大的消息,我正在等待MPI_Probe
。假设一旦进程收到来自网络的第一个消息通知(如大小或类似的标题),MPI_Probe
调用将返回是否正确?
MPI_Recv
的消息更快地返回,因为它不需要接收完整的消息吗?
答案 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)采用更快的路径。