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