Cuda GPUDirect能够直接访问NIC/硬盘吗?

3
我正在编写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,以及需要做什么?我需要为硬件编写自己的驱动程序吗?是否有某些副本被避免的示例?感谢您的帮助。

2
据我所了解,您需要一个支持GPUdirect的RDMA功能的网卡驱动程序、RAID控制器或SSD驱动程序。自己开发这样的驱动程序可能非常困难。作为第一步,您可以联系您的网卡、RAID控制器或SSD供应商,询问他们是否提供或计划提供支持GPUdirect的驱动程序。除非您的网卡、RAID控制器或SSD具有非常高的吞吐量,或者您对延迟要求非常严格,直接从/向GPU传输数据可能不会带来太多性能提升;I/O本身将是限制因素。 - njuffa
1个回答

7
GPUDirect是一个技术“伞兵”术语,通常是指使数据直接传输到和/或从GPU的技术品牌,以某种方式绕过主机内存的不必要旅程。
GPUDirect v1是一种与特定Infiniband适配器配合使用的技术,它使GPU驱动程序和IB驱动程序之间的数据缓冲区共享成为可能。这项技术大多被GPUDirect(v3)RDMA取代。该v1技术不能与任何NIC一起使用。环境变量参考:
然而,我附加的演示文稿表明我只需要在Linux中设置一个环境变量即可实现。
是指启用GPUDirect v1。它不是通用NIC启用程序。
GPUDirect v2也称为GPUDirect点对点,仅用于两个CUDA GPU在同一PCIE结构上的数据传输。它不支持与任何其他类型的设备互操作。
GPUDirect v3也称为GPUDirect RDMA。
因此,我想知道是否可以直接从NIC / RAID控制器读取数据到GPU,并需要什么来实现?
如今,GPUDirect RDMA的典型用例是与Mellanox Infiniband(IB)适配器一起使用。(也可以通过Mellanox以及RoCE的帮助使其工作)。如果这符合您对“ NIC”的定义,则可以通过加载适当的软件堆栈来实现,假设您拥有适当的硬件。 GPU和IB设备需要在同一个PCIE结构上,这意味着它们需要连接到同一个PCIE根复杂(有效地连接到同一个CPU插座)。 当与Mellanox IB适配器一起使用时,典型用法涉及 GPUDirect RDMA-aware MPI
如果您拥有自己的未指定的NIC或RAID控制器,并且尚未安装GPUDirect RDMA linux设备驱动程序,则无法使用GPUDirect。(如果有适用于它的GPUDirect RDMA驱动程序,请联系制造商或驱动程序提供商寻求帮助。)如果您可以访问驱动程序源代码并熟悉编写自己的linux设备驱动程序,则可以尝试创建自己的GPUDirect驱动程序。涉及的步骤超出了我的回答范围,但起点在这里记录
“是的,如果您没有适用于它的GPUDirect RDMA驱动程序,则需要编写一个。”
“是否存在避免某些副本的示例?”

GPUDirect RDMA MPI 链接提供示例并解释了如何使用GPUDirect RDMA在从GPU到IB适配器的数据传输过程中避免不必要的设备<->主机数据拷贝。通常情况下,数据可以直接从GPU设备上的内存传输(通过PCIE)到IB设备上的内存(反之亦然),而无需经过主机内存(GPUDirect v1未实现此功能)。

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


感谢您澄清了GPUDirect的所有不同版本。在我的研究中,这是我发现非常令人困惑的。 - It'sPete

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接