Cuda GPUDirect到NIC / Harddrive?

时间:2015-04-07 21:41:51

标签: linux cuda driver

我目前正在编写一个CUDA应用程序,并且遇到了一些IO问题“喂养了这个野兽。”

我想知道是否有任何方法可以直接从RAID控制器或NIC读取数据并将数据直接发送到GPU。我想要完成的内容直接显示在以下演示文稿的幻灯片#3中:http://developer.download.nvidia.com/devzone/devcenter/cuda/docs/GPUDirect_Technology_Overview.pdf

话虽如此,显然已经在这里得到了答案:Is it possible to access hard disk directly from gpu?,但是我所附的演示文稿导致相信我所需要的只是在Linux中设置一个环境变量(但它没有提供任何有用的代码片段/示例)。

因此,我想知道是否可以直接从NIC / RAID控制器读取数据到GPU以及需要做什么?我需要为硬件编写自己的驱动程序吗?是否有任何避免某些副本的例子?

提前感谢您的帮助。

1 个答案:

答案 0 :(得分:5)

GPUDirect是一个技术"总称术语",它通常是一个品牌,指的是能够直接向GPU和/或从GPU传输数据的技术,以某种方式绕过不必要的通过主机内存的行程。

GPUDirect v1是一种可与特定infiniband适配器配合使用的技术,可在GPU驱动程序和IB驱动程序之间启用数据缓冲区的共享。这项技术大多被GPUDirect(v3)RDMA取代。此v1技术不支持任何NIC的一般使用。环境变量引用:

  

然而,我所附的演示文稿导致相信我所需要的只是在Linux中设置环境变量

指的是启用GPUDirect v1。它不是通用的NIC启用程序。

GPUDirect v2也称为GPUDirect Peer-to-Peer,它用于在同一PCIE结构上的两个CUDA GPU之间传输数据。它不支持与任何其他类型设备的互操作性。

GPUDirect v3也称为GPUDirect RDMA。

  

因此,我想知道是否可以直接从NIC / RAID控制器读取数据到GPU以及需要做什么?

今天,GPUDirect RDMA的规范用例是使用Mellanox Infiniband(IB)适配器。 (也可以使用Mellanox以太网适配器和RoCE,在Mellanox的帮助下工作。如果这符合您对" NIC"的定义,则可以通过加载适当的软件堆栈来实现,假设您有适当的硬件。 GPU和IB设备需要位于同一PCIE结构上,这意味着它们需要连接到同一PCIE根联合体(实际上,连接到同一CPU插槽)。与Mellanox IB适配器一起使用时,典型用法包括GPUDirect RDMA-aware MPI

如果您有自己未指定的NIC或RAID控制器,并且您还没有GPUDirect RDMA Linux设备驱动程序,那么它就无法使用GPUDirect。 (如果有GPUDirect RDMA驱动程序,请联系制造商或驱动程序提供商寻求帮助。)如果您有权访问驱动程序源代码,并且熟悉编写自己的Linux设备驱动程序,则可以尝试制作自己的GPUDirect驱动程序。所涉及的步骤超出了我的答案范围,但起点是documented here

  

我是否需要为硬件编写自己的驱动程序?

是的,如果您还没有GPUDirect RDMA驱动程序,则需要编写一个。

  

是否有任何避免某些副本的例子?

GPUDirect RDMA MPI link提供了示例并说明了GPUDirect RDMA如何在从GPU到IB适配器传输数据期间避免不必要的设备主机数据副本。通常,数据可以直接(通过PCIE)从GPU设备上的内存传输到IB设备上的内存(反之亦然),而不会通过主机内存(GPUDirect v1没有达到此目的)。