如何在Infiniband中使用GPUDirect RDMA

时间:2015-06-25 09:30:40

标签: cuda openmpi infiniband gpudirect

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

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

我想知道我是否可以直接使用驱动程序进行通信。代码示例,教程,任何事情都会很好。另外,如果有人能帮我找到OpenMPI中的代码,我将不胜感激。

1 个答案:

答案 0 :(得分:6)

要使GPUDirect RDMA正常运行,您需要安装以下软件:

应安装上述所有内容(按上面列出的顺序),并加载相关模块。 之后,您应该能够注册在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谓词的更多详细信息,请参阅此document