我目前正在编写一个CUDA应用程序,并遇到了一些IO问题“喂养野兽”。
我想知道是否有任何方法可以直接从RAID控制器或NIC读取数据,并将数据直接发送到GPU。我想要完成的任务直接显示在以下演示文稿的幻灯片#3上:Overview.pdf。
尽管如此,这显然已经在这里得到了回答:是否可以直接从gpu访问硬盘?,但是我所附的演示文稿让人相信,我所需要的只是在Linux中设置一个环境变量(但它没有提供任何有用的代码片段/示例)。
因此,我想知道是否可以直接将数据从NIC/RAID控制器读取到GPU,这样做需要什么?我需要为硬件编写自己的驱动程序吗?是否有避免某些副本的例子?
提前谢谢你的帮助。
发布于 2015-04-07 22:11:16
GPUDirect是一种技术“伞式术语”,它一般是指允许直接与GPU之间和/或从GPU传输数据的技术,以某种方式绕过了通过主机内存进行不必要的访问。
GPUDirect v1是一种与特定infiniband适配器一起工作的技术,它允许GPU驱动程序和IB驱动程序之间共享数据缓冲区。这种技术大多被GPUDirect (v3) RDMA所取代。这种v1技术不允许与任何NIC一起使用。环境变量引用:
不过,我所附的演示文稿使人相信,我所需要的只是在Linux中设置一个环境变量
指启用GPUDirect v1。这不是一个通用的NIC使能器。
GPUDirect v2也被称为GPUDirect Peer,它只用于在同一个PCIE结构上的两个CUDA GPU之间传输数据。它不支持与任何其他类型的设备的互操作性。
GPUDirect v3也称为GPUDirect RDMA。
因此,我想知道是否可以直接将数据从NIC/RAID控制器读取到GPU,这样做需要什么?
今天,(IB)适配器是GPUDirect RDMA的规范用例。(也可以使用Mellanox以太网适配器和RoCE来工作,也许是在梅拉诺克斯的帮助下)。如果这符合您对"NIC“的定义,那么可以通过加载适当的软件栈来实现,前提是您有适当的硬件。GPU和IB设备需要在同一个PCIE结构上,这意味着它们需要连接到同一个PCIE根复合体(有效地连接到同一个CPU套接字)。当与Mellanox适配器一起使用时,典型的用法将涉及基于GPUDirect RDMA的MPI。
如果您有自己的未指定的NIC或RAID控制器,并且还没有GPUDirect RDMA linux设备驱动程序,那么就不可能使用GPUDirect。(如果有GPUDirect RDMA驱动程序,请与制造商或驱动程序提供程序联系以获得帮助。)如果您能够访问驱动程序源代码,并且熟悉编写自己的linux设备驱动程序,则可以尝试编写自己的GPUDirect驱动程序。所涉及的步骤超出了我的回答范围,但起点是记录在这里。
我需要为硬件编写自己的驱动程序吗?
是的,如果您还没有GPUDirect RDMA驱动程序,就需要编写一个驱动程序。
是否有避免某些副本的例子?
GPUDirect RDMA MPI 链接给出了示例,并解释了在从GPU向IB适配器传输数据时,GPUDirect RDMA如何避免不必要的设备<->主机数据副本。通常,数据可以直接(通过PCIE)从GPU设备上的内存传输到IB设备上的内存(反之亦然),而不需要经过主机内存(GPUDirect v1没有做到这一点)。
更新: NVIDIA最近宣布了一种名为GPU直接存储的新GPU技术。
https://stackoverflow.com/questions/29501853
复制相似问题