AMD的OpenCL是否提供类似于CUDA的GPUDirect?
NVIDIA提供GPUDirect以减少内存传输开销。 我想知道AMD / ATI是否有类似的概念? 特别:
1)如此处所述,AMD GPU是否在与网卡连接时避免第二次内存传输。 如果图形在某个时候丢失了,下面描述GPUDirect从一台机器上的GPU获取数据以通过网络接口传输的影响:使用GPUDirect,GPU内存转到主机内存然后直接传输到网络接口卡。 如果没有GPUDirect,GPU内存会在一个地址空间中进入主机内存,那么CPU必须执行一次副本才能将内存移入另一个主机内存地址空间,然后才能进入网卡。
2)AMD GPU如果在同一PCIe总线上共享两个GPU,是否允许P2P内存传输,如此处所述。 如果图形在某些时候丢失,下面描述GPUDirect在同一PCIe总线上的GPU之间传输数据的影响:使用GPUDirect,数据可以在同一PCIe总线上的GPU之间直接移动,而不会触及主机内存。 如果没有GPUDirect,无论GPU位于何处,数据总是必须回到主机才能到达另一个GPU。
编辑:顺便说一句,我不完全确定GPUDirect有多少是蒸发器,它有多少实际上是有用的。 我从来没有听说过一个GPU程序员将它用于真实的事情。 对此的想法也是受欢迎的。
我想你可能正在寻找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上运行时所做的。
正如@ananthonline和@harrism所指出的那样,GPUDirect的许多特性在OpenCL中没有直接的等价物。 但是,如果您尝试减少内存传输开销,如问题的第一句中所述,则零拷贝内存可能会有所帮助。 通常,当应用程序在GPU上创建缓冲区时,缓冲区的内容将从CPU内存一并复制到GPU内存。 零复制内存,没有预先复制; 相反,数据会在GPU内核访问时被复制。
零拷贝对所有应用程序都没有意义。 AMD APP OpenCL编程指南提供了何时使用它的建议:
当主机内存以稀疏的方式被设备访问时,或者在多个设备之间共享一个大型主机内存缓冲区并且副本太昂贵时,零副本主机常驻内存对象可以提高性能。 选择此项时,传输成本必须高于较慢访问的额外成本。
编程指南的表4.3描述了哪些标志传递给clCreateBuffer以利用零拷贝(CL_MEM_ALLOC_HOST_PTR或CL_MEM_USE_PERSISTENT_MEM_AMD,取决于您是需要设备可访问的主机内存还是主机可访问的设备内存)。 请注意,零拷贝支持取决于操作系统和硬件; 它在Linux或较旧版本的Windows下似乎不受支持。
AMD APP OpenCL编程指南:http://developer.amd.com/sdks/AMDAPPSDK/assets/AMD_Accelerated_Parallel_Processing_OpenCL_Programming_Guide.pdf
链接地址: http://www.djcxy.com/p/64615.html上一篇: Does AMD's OpenCL offer something similar to CUDA's GPUDirect?