arr*_*ire 10 cuda amd nvidia opencl gpudirect
NVIDIA提供GPUDirect以减少内存传输开销.我想知道AMD/ATI是否有类似的概念?特别:
1)AMD GPU在与网卡连接时是否避免第二次内存传输,如此处所述.如果图形在某些时候丢失,这里描述了GPUDirect对从一台机器上的GPU获取数据以通过网络接口传输的影响:使用GPUDirect,GPU内存进入主机内存,然后直接进入网络接口卡.如果没有GPUDirect,GPU内存将转移到一个地址空间中的主机内存,然后CPU必须进行复制以将内存转移到另一个主机内存地址空间,然后它就可以转到网卡.
2)如果在同一PCIe总线上共享两个GPU,AMD GPU是否允许P2P内存传输,如此处所述.如果图形在某些时候丢失,这里描述了GPUDirect对同一PCIe总线上GPU之间传输数据的影响:使用GPUDirect,数据可以直接在同一PCIe总线上的GPU之间移动,而不会触及主机内存.如果没有GPUDirect,数据总是必须返回到主机才能到达另一个GPU,无论GPU位于何处.
编辑:BTW,我不完全确定GPUDirect有多少是蒸发器,有多少是实际有用的.我从来没有真正听说过GPU程序员将它用于真实的东西.对此的想法也是受欢迎的.
虽然这个问题已经很老了,但我想补充一下我的答案,因为我认为这里的当前信息不完整。
如@Ani 的回答所述,您可以使用 CL_MEM_ALLOC_HOST_PTR 分配主机内存,并且您很可能会获得一个固定的主机内存,该内存可根据实现避免第二个副本。例如,NVidia OpenCL 最佳实践指南指出:
OpenCL 应用程序无法直接控制是否在固定内存中分配内存对象,但它们可以使用 CL_MEM_ALLOC_HOST_PTR 标志创建对象,并且此类对象很可能由驱动程序在固定内存中分配以获得最佳性能
我在之前的答案中发现缺少的是 AMD 提供 DirectGMA 技术的事实。该技术使你到GPU和PCI总线(包括其它GPU)上的任何其它外围设备之间的数据传输直接不用其他不必经过系统存储器。它更类似于 NVidia 的 RDMA(并非在所有平台上都可用)。
为了使用这项技术,您必须:
具有兼容的 AMD GPU(并非所有 GPU 都支持 DirectGMA)。您可以使用 AMD 提供的 OpenCL、DirectX 或 OpenGL 扩展。
让外设驱动程序(网卡、视频采集卡等)公开一个物理地址,GPU DMA 引擎可以从中读取/写入。或者能够对外围 DMA 引擎进行编程,以将数据传输到/从 GPU 暴露的内存中传输。
我使用这项技术将数据直接从视频捕获设备传输到 GPU 内存,再从 GPU 内存传输到专有 FPGA。两种情况都非常有效,并且不涉及任何额外的复制。
我认为您可能正在 clCreateBuffer 中寻找 CL_MEM_ALLOC_HOST_PTR 标志。虽然 OpenCL 规范声明此标志“此标志指定应用程序希望 OpenCL 实现从主机可访问内存中分配内存”,但不确定 AMD 的实现(或其他实现)可能会用它做什么。
这是有关该主题的信息线程http://www.khronos.org/message_boards/viewtopic.php?f=28&t=2440
希望这可以帮助。
编辑:我确实知道 nVidia 的 OpenCL SDK 将其实现为固定/页面锁定内存中的分配。我相当确定这就是 AMD 的 OpenCL SDK 在 GPU 上运行时所做的事情。
归档时间: |
|
查看次数: |
3760 次 |
最近记录: |