2

我的集群在 Infiniband FDR 上使用 MVAPICH2,并且我正在考虑使用 RDMA 进行模拟。我知道 MPI_Put 和 MPI_Get 调用显式调用 RDMA 操作,但是我想知道这是否是在 MPI 中使用 RDMA 的唯一方法。

我当前的实现涉及用于通信的通道语义(发送/接收)MPI_Reduce以及MPI_Gatherv. 我知道 MVAPICH2 具有可用于启用 RDMA 的配置参数。如果使用 MPI 的程序具有发送/接收调用并且启用了 RDMA,MPI 是否会自动从通道语义转换为内存语义(put/get),还是在 MVAPICH2 中显式使用MPI_PutMPI_Get唯一实现 RDMA 的方法?

MPI_Send需要相应的MPI_Receive,无论它们是阻塞还是非阻塞都无关紧要,因为发送必须满足接收。RDMA 没有此要求,而是仅实现MPI_Put(写入远程内存)或MPI_Get(从远程内存读取)。我试图找出在仍然使用发送和接收的同时启用 rdma 是否允许 MVAPICH2 以某种方式自动将发送/接收转换为适当的 rdma 调用。

4

1 回答 1

1

如果 MVAPICH2 使用正确的选项构建,它将使用 RDMA 进行所有 MPI 操作,包括MPI_Send支持MPI_Recv的硬件,包括 InfiniBand。因此,您无需使用MPI_Put/Get支持 RDMA 的硬件。事实上,使用MPI_Send/Recv可能会更快,因为它们通常会得到更好的优化。

MPI 库使用各种设计将MPI_Send/Recv操作转换为 RDMA 语义。细节可以在文献中找到

于 2018-03-24T01:46:34.873 回答