【发布时间】:2014-08-23 17:20:09
【问题描述】:
要优化 MPI 通信,了解整个通信过程的流程很重要。这对于同步通信来说相当简单,但是异步通信呢?据我了解,它以以下两种方式之一工作:
- Rank0 -> Isend -> Rank1 和 Rank1 -> Isend -> Rank0
- Rank0 -> Irecv -> Rank1 和 Rank1 -> Irecv -> Rank0
- Rank0 和 Rank1 进行一些计算
- 消息正在发送到各自的目标位置
- 找到匹配的 Recv 调用! -> 写入给定的接收缓冲区
- Rank0 和 Rank1 完成计算并调用 MPI_Wait 进行发送和接收
- MPI_Wait -> 通信完成
或
- Rank0 -> Isend -> Rank1 和 Rank1 -> Isend -> Rank0
- Rank0 和 Rank1 进行一些计算
- 消息正在发送到各自的目标位置
- 未找到匹配的 Recv 调用! -> 分配自己的临时缓冲区并写入其中
- Rank0 和 Rank1 完成计算并调用 MPI_Recv
- 找到匹配的 MPI_Recv 调用 -> 将临时缓冲区写入recv-buffer
- Rank0 和 Rank1 调用 MPI_Wait
- MPI_Wait -> 通信完成 -> 释放临时缓冲区
这是正确的吗?我是否需要了解在 MPI 后台运行的任何其他进程以优化其使用?
【问题讨论】:
标签: asynchronous mpi