没有显式 PUT/GET 使用基于 MVAPICH2 RDMA 的通信?

MVAPICH2 RDMA-based communication without explicit PUT/GET use?

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

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

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

如果使用正确的选项构建 MVAPICH2,它将在支持的硬件(包括 InfiniBand)上将 RDMA 用于所有 MPI 操作,包括 MPI_SendMPI_Recv。因此,您不需要使用 MPI_Put/Get 来利用 RDMA-capable 硬件。事实上,使用 MPI_Send/Recv 可能会更快,因为它们通常经过更好的优化。

MPI 库使用各种设计将 MPI_Send/Recv 操作转换为 RDMA 语义。 The details can be found in the literature.