GPUDirect RDMA从GPU传输到远程主机

Dao*_*Wen 7 cuda rdma infiniband gpudirect

场景:

我有两台机器,一台客户机和一台服务器,与Infiniband连接.服务器机器有一个NVIDIA Fermi GPU,但客户端机器没有GPU.我有一个在GPU机器上运行的应用程序,它使用GPU进行一些计算.GPU上的结果数据从不被服务器机器使用,而是直接发送到客户端机器而无需任何处理.现在我正在做一个cudaMemcpy从GPU获取数据到服务器的系统内存,然后通过套接字将其发送到客户端.我正在使用SDP为此通信启用RDMA.

题:

在这种情况下,我是否可以利用NVIDIA的GPUDirect技术来摆脱cudaMemcpy呼叫?我相信我已正确安装了GPUDirect驱动程序,但我不知道如何在不先将其复制到主机的情况下启动数据传输.

我的猜测是不可能将SDP与GPUDirect结合使用,但还有其他方法可以启动从服务器机器GPU到客户机的RDMA数据传输吗?

额外:如果somone有一个简单的方法来测试我是否正确安装了GPUDirect依赖项,这也是有帮助的!

har*_*ism 4

是的,通过支持网络硬件是可能的。请参阅GPUDirect RDMA 文档

  • 引用您链接到的页面:“使用直接内存访问(DMA)**在 GPU 和其他 PCIe 设备之间**消除 CPU 带宽和延迟瓶颈......”这让我不清楚 CUDA 驱动程序是否具有RDMA 支持我上面描述的情况,或者仅适用于 P2P 传输。看起来它很容易得到支持,但该页面在此事上似乎并不是很明确。这似乎仍然是一个很好的答案,所以我会接受它。 (2认同)
  • 这里的关键词是“远程”,即不在同一 PCI-e 总线上的对等点。这需要 NVIDIA 合作伙伴的特定 Infiniband 卡制造商的支持。 (2认同)
  • @harrism但是我们可以通过Infiniband-RDMA进行点对点访问,即GPU1-Core可以通过内核<<<>>>函数中的指针访问GPU2-RAM吗?**GPU1-Core <-Infiniband->GPU2-RAM** (2认同)
  • @Alex,不,PC1 的 GPU1 无法通过正常的内存读取操作访问远程 PC2 的 RAM (GPU2-RAM)。RDMA 意味着 PC1 可以使用 infiniband 发出请求,将某些内存从 PC2(或 GPU2-RAM)复制到某些本地内存(PC1 RAM 或 GPU1 RAM),而无需远程 PC2 执行中断或 memcpy。请求明确发布在QP中:http://www.mellanox.com/lated-docs/prod_software/RDMA_Aware_Programming_user_manual.pdf第106页“5.2.7 rdma_post_read...远程内存区域的内容将被读入本地数据缓冲”。仅在此请求完成后,您才可以访问数据的本地副本。 (2认同)