Cuda 如何在Infiniband中使用GPUDirect RDMA

Cuda 如何在Infiniband中使用GPUDirect RDMA,cuda,openmpi,infiniband,gpudirect,Cuda,Openmpi,Infiniband,Gpudirect,我有两台机器。每台机器上都有多张特斯拉卡。每台机器上还有一个InfiniBand卡。我想通过InfiniBand在不同机器上的GPU卡之间进行通信。只要点对点单播就可以了。我当然想使用GPUDirect-RDMA,这样我就不用再进行额外的复制操作了 我知道Mellanox现在有一个InfiniBand卡可用。但它没有提供详细的开发指南。我还知道OpenMPI支持我所要求的功能。但是OpenMPI对于这个简单的任务来说太重了,并且它不支持在单个进程中使用多个GPU 我想知道我是否可以得到任何帮助,

我有两台机器。每台机器上都有多张特斯拉卡。每台机器上还有一个InfiniBand卡。我想通过InfiniBand在不同机器上的GPU卡之间进行通信。只要点对点单播就可以了。我当然想使用GPUDirect-RDMA,这样我就不用再进行额外的复制操作了

我知道Mellanox现在有一个InfiniBand卡可用。但它没有提供详细的开发指南。我还知道OpenMPI支持我所要求的功能。但是OpenMPI对于这个简单的任务来说太重了,并且它不支持在单个进程中使用多个GPU


我想知道我是否可以得到任何帮助,直接使用驱动程序进行通信。代码示例,教程,任何东西都可以。另外,如果有人能帮我在OpenMPI中找到处理此问题的代码,我将不胜感激。

要使GPUDirect RDMA正常工作,您需要安装以下设备:

  • Mellanox OFED已安装(从)

  • 最近安装的NVIDIA CUDA套件

  • Mellanox NVIDIA GPUDirect插件(来自您在上面提供的链接-以来宾身份发布阻止我发布链接:()
应安装上述所有组件(按照上面列出的顺序),并加载相关模块。 之后,您应该能够注册在GPU视频内存上为RDMA事务分配的内存。示例代码如下所示:

void * gpu_buffer;
struct ibv_mr *mr;
const int size = 64*1024;
cudaMalloc(&gpu_buffer,size); // TODO: Check errors
mr = ibv_reg_mr(pd,gpu_buffer,size,IBV_ACCESS_LOCAL_WRITE|IBV_ACCESS_REMOTE_WRITE|IBV_ACCESS_REMOTE_READ);
这将创建(在启用GPUDirect RDMA的系统上)一个内存区域,其中包含一个有效的内存密钥,您可以使用该密钥与我们的HCA进行RDMA事务


有关在代码中使用RDMA和InfiniBand谓词的更多详细信息,请参考此内容。

这听起来像是您应该与Mellanox讨论的内容。所讨论的代码主要位于BTL组件中。查找名称中包含
gdr
的内容,以及使用
CUDA
GRD
以预处理器符号的名义。请注意,对非现场资源(如教程)的请求在此处被视为离题,使您的问题处于离题边缘。您能否使用Mellanox的RDMA从GPU读取/写入服务器的远程内存?