AMD的OpenCL是否提供类似于CUDA的GPU的东西?



NVIDIA提供GPUDirect以减少内存传输开销。我想知道AMD/ATI是否也有类似的概念?具体而言:

1) AMD GPU在与网卡接口时是否避免了第二次内存传输,如本文所述。如果图形在某个时刻丢失,以下是GPUDirect对从一台机器上的GPU获取数据以通过网络接口进行传输的影响的描述:使用GPUDdirect,GPU内存进入主机内存,然后直接进入网络接口卡。如果没有GPUDirect,GPU内存将进入一个地址空间中的主机内存,然后CPU必须进行复制,将内存进入另一个主机内存地址空间,然后才能进入网卡。

2) 当两个GPU在同一PCIe总线上共享时,AMD GPU是否允许P2P内存传输,如本文所述。如果图形在某个时刻丢失,以下是GPUDirect对在同一PCIe总线上的GPU之间传输数据的影响的描述:使用GPUDdirect,数据可以在同一PCI总线上的CPU之间直接移动,而无需接触主机内存。如果没有GPUDirect,数据总是必须先返回主机,然后才能到达另一个GPU,无论该GPU位于何处。

编辑:顺便说一句,我不完全确定GPUDirect有多少是蒸汽软件,有多少是真正有用的。我从来没有听说过GPU程序员用它来做一些真实的事情。对此的想法也很受欢迎。

虽然这个问题很老,但我想补充一下我的答案,因为我认为这里的当前信息不完整。

正如@Ani的回答中所说,您可以使用CL_MEM_ALLOC_host_TR分配主机内存,并且您很可能会得到一个固定的主机内存,根据实现情况避免第二次复制。例如,NVidia OpenCL最佳实践指南指出:

OpenCL应用程序不能直接控制内存对象是否是否在固定内存中分配,但他们可以使用CL_MEM_ALLOC_HOST_TR标志和此类对象可能会在由驱动程序固定内存以获得最佳性能

我发现之前的答案中缺少的是AMD提供DirectGMA技术。此技术使您能够在GPU和PCI总线上的任何其他外围设备(包括其他GPU)之间直接传输数据,而无需通过系统内存。它更类似于NVidia的RDMA(并非在所有平台上都可用)。

为了使用这项技术,您必须:

  • 拥有兼容的AMD GPU(并非所有GPU都支持DirectGMA)。您可以使用AMD提供的OpenCL、DirectX或OpenGL扩展。

  • 使外围驱动程序(网卡、视频捕获卡等)暴露GPU DMA引擎可以从其读/写的物理地址。或者能够对外围DMA引擎进行编程以将数据传输到GPU暴露的存储器/从GPU暴露的内存传输数据。

我使用这项技术将数据直接从视频捕获设备传输到GPU存储器,并从GPU存储器传输到专有FPGA。这两个案例都非常有效,没有涉及任何额外的复制。

将OpenCL与PCIe设备接口

我认为您可能正在clCreateBuffer中查找CL_MEM_ALLOC_HOST_TR标志。虽然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应用程序OpenCL编程指南中关于何时使用它的建议:

零拷贝主机驻留内存对象可以在主机设备以稀疏方式访问内存,或者当主机内存缓冲区在多个设备和副本之间共享太贵了。选择此选项时,转移的成本必须大于较慢访问的额外成本。

编程指南的表4.3描述了要传递给clCreateBuffer以利用零拷贝的标志(CL_MEM_ALLOC_HOST_PTR或CL_MEM_USE_PERSISTENT_MEM_AMD,具体取决于您想要的是设备可访问的主机内存还是主机可访问的设备内存)。请注意,零拷贝支持取决于操作系统和硬件;Linux或旧版本的Windows似乎不支持它。

AMD应用程序OpenCL编程指南:http://developer.amd.com/sdks/AMDAPPSDK/assets/AMD_Accelerated_Parallel_Processing_OpenCL_Programming_Guide.pdf

最新更新