没有显式 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_Reduce
和 MPI_Gatherv
。我知道 MVAPICH2 具有可用于启用 RDMA 的配置参数。如果使用 MPI 的程序有 send/receive 个调用并且启用了 RDMA,MPI 会自动从通道语义转换为内存语义(put/get)还是显式使用 MPI_Put
和 MPI_Get
在 MVAPICH2 中实现 RDMA 的唯一方法?
MPI_Send
需要相应的 MPI_Receive
,无论它们是阻塞还是非阻塞都没有关系,因为发送必须满足接收。 RDMA 没有此要求,而是仅实现 MPI_Put
(写入远程内存)或 MPI_Get
(从远程内存读取)。我试图找出是否在启用 rdma 的同时仍然使用发送和接收,允许 MVAPICH2 以某种方式自动将 send/receives 转换为适当的 rdma 调用。
如果使用正确的选项构建 MVAPICH2,它将在支持的硬件(包括 InfiniBand)上将 RDMA 用于所有 MPI 操作,包括 MPI_Send
和 MPI_Recv
。因此,您不需要使用 MPI_Put/Get
来利用 RDMA-capable 硬件。事实上,使用 MPI_Send/Recv
可能会更快,因为它们通常经过更好的优化。
MPI 库使用各种设计将 MPI_Send/Recv
操作转换为 RDMA 语义。 The details can be found in the literature.
我的集群在 Infiniband FDR 上使用 MVAPICH2,我正在考虑 在我的模拟中使用 RDMA。我知道 MPI_Put 和 MPI_Get 调用显式调用 RDMA 操作,但我想知道这是否是在 MPI 中使用 RDMA 的唯一方法。
我当前的实现涉及用于通信的通道语义 (send/receive),以及 MPI_Reduce
和 MPI_Gatherv
。我知道 MVAPICH2 具有可用于启用 RDMA 的配置参数。如果使用 MPI 的程序有 send/receive 个调用并且启用了 RDMA,MPI 会自动从通道语义转换为内存语义(put/get)还是显式使用 MPI_Put
和 MPI_Get
在 MVAPICH2 中实现 RDMA 的唯一方法?
MPI_Send
需要相应的 MPI_Receive
,无论它们是阻塞还是非阻塞都没有关系,因为发送必须满足接收。 RDMA 没有此要求,而是仅实现 MPI_Put
(写入远程内存)或 MPI_Get
(从远程内存读取)。我试图找出是否在启用 rdma 的同时仍然使用发送和接收,允许 MVAPICH2 以某种方式自动将 send/receives 转换为适当的 rdma 调用。
如果使用正确的选项构建 MVAPICH2,它将在支持的硬件(包括 InfiniBand)上将 RDMA 用于所有 MPI 操作,包括 MPI_Send
和 MPI_Recv
。因此,您不需要使用 MPI_Put/Get
来利用 RDMA-capable 硬件。事实上,使用 MPI_Send/Recv
可能会更快,因为它们通常经过更好的优化。
MPI 库使用各种设计将 MPI_Send/Recv
操作转换为 RDMA 语义。 The details can be found in the literature.