【发布时间】:2015-11-10 18:18:47
【问题描述】:
我知道MPI_SENDRECV 可以解决死锁问题(当我们使用经典的MPI_SEND 和MPI_RECV 函数时)。
我想知道MPI_SENDRECV(sent_to_process_1, receive_from_process_0)是否等同于:
MPI_ISEND(sent_to_process_1, request1)
MPI_IRECV(receive_from_process_0, request2)
MPI_WAIT(request1)
MPI_WAIT(request2)
具有异步 MPI_ISEND 和 MPI_RECV 函数?
据我所知,MPI_ISEND 和 MPI_RECV 创建了一个 fork(即 2 个进程)。所以如果我按照这个逻辑,MPI_ISEND 的第一次调用会生成 2 个进程。一个负责通信,另一个调用 MPI_RECV,它自己分叉 2 个进程。
但是一旦第一个MPI_ISEND的通信结束,第二个进程是否又调用MPI_IRECV?有了这个逻辑,上面的等价物似乎是无效的......
也许我应该改成这样:
MPI_ISEND(sent_to_process_1, request1)
MPI_WAIT(request1)
MPI_IRECV(receive_from_process_0, request2)
MPI_WAIT(request2)
但我认为这也可能造成死锁。
任何人都可以使用MPI_ISEND、MPI_IRECV 和MPI_WAIT 给我另一个解决方案来获得与MPI_SEND_RECV 相同的行为吗?
【问题讨论】:
标签: mpi openmpi inter-process-communicat