Cuda GPUDirect 到 NIC/Harddrive?

Cuda GPUDirect to NIC/Harddrive?

我目前正在编写一个 CUDA 应用程序并且 运行 遇到了一些 IO 问题 "feeding the beast."

我想知道是否有任何方法可以直接从 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 中设置一个环境变量(但它不提供任何有用的代码 snippets/examples).

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

在此先感谢您的帮助。

GPUDirect 是一项技术 "umbrella term",它通常是指能够从 GPU 直接将数据传输到 and/or 的技术的品牌,以某种方式绕过通过主机内存进行不必要的传输。

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

however the presentation that I've attached leads to believe all I need is to set an environment variable in Linux

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

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

GPUDirect v3 也称为 GPUDirect RDMA。

Therefore, I'm wondering if it is possible to read data directly from a NIC/RAID controller into the GPU and what would be required to do so?

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

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

Would I need to write my own driver for the hardware?

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

Are there any examples where certain copies are avoided?

GPUDirect RDMA MPI link 给出了示例并解释了 GPUDirect RDMA 如何在从 GPU 到 IB 适配器的数据传输过程中避免不必要的设备<->主机数据副本。通常,数据可以直接(通过 PCIE)从 GPU 设备上的内存传输到 IB 设备上的内存(反之亦然),而无需经过主机内存(GPUDirect v1 没有实现这一点。)

更新:NVIDIA 最近宣布了一项名为 GPU Direct Storage 的新 GPU Direct 技术。