如何将 GPUDirect RDMA 与 Infiniband 结合使用

问题描述 投票:0回答:1

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

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

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

cuda openmpi infiniband gpudirect
1个回答
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 动词的更多详细信息,您可以参考此文档

© www.soinside.com 2019 - 2024. All rights reserved.