如何使用Infiniband使用GPUDirect RDMA

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

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

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


要使GPUDirect RDMA正常工作,需要安装以下内容:

  • Mellanox OFED安装(从http://www.mellanox.com/page/products_dyn?product_family=26&mtag=linux_sw_drivers)

  • 最近安装了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动词的更多详细信息,请参阅此文档。

    链接地址: http://www.djcxy.com/p/64623.html

    上一篇: How to use GPUDirect RDMA with Infiniband

    下一篇: RDMA CM for Windows