首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >AMD的OpenCL是否提供与CUDA的GPUDirect类似的功能?

AMD的OpenCL是否提供与CUDA的GPUDirect类似的功能?
EN

Stack Overflow用户
提问于 2012-02-15 11:07:05
回答 3查看 4.9K关注 0票数 12

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

1)在与网卡as described here接口时,AMD GPU是否避免了第二次内存传输。如果图形在某一时刻丢失,这里描述了GPUDirect对从一台机器上的图形处理器获取数据并通过网络接口传输的影响:使用GPUDirect,图形处理器内存进入主机内存,然后直接进入网络接口卡。在没有GPUDirect的情况下,GPU内存在一个地址空间中访问主机内存,然后CPU必须复制内存到另一个主机内存地址空间中,然后它才能访问网卡。

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

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

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-02-16 05:08:26

我想您可能正在寻找clCreateBuffer中的CL_MEM_ALLOC_HOST_PTR标志。虽然OpenCL规范声明这个标志“这个标志指定应用程序希望OpenCL实现从主机可访问内存中分配内存”,但它还不确定AMD的实现(或其他实现)可能会对它做什么。

这里有一个关于http://www.khronos.org/message_boards/viewtopic.php?f=28&t=2440主题的信息性帖子

希望这能有所帮助。

编辑:我知道nVidia的OpenCL软件开发工具包在固定/页面锁定的内存中实现了这一点。我相当肯定这就是AMD上运行的OpenCL软件开发工具包所做的事情。

票数 2
EN

Stack Overflow用户

发布于 2019-06-22 18:27:26

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

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

OpenCL应用程序不能直接控制是否在固定内存中分配内存对象,但它们可以使用CL_MEM_ALLOC_HOST_PTR标志创建对象,这样的对象很可能由驱动程序分配在固定内存中以获得最佳性能

我发现之前的答案遗漏了一件事,那就是AMD提供DirectGMA技术。这项技术使您能够之间的图形处理器和任何其他外设之间的PCI总线(包括其他图形处理器)直接,而不必通过系统内存。它更类似于NVidia的RDMA (并非在所有平台上都可用)。

要使用此技术,您必须:

  • 有一个兼容的AMD图形处理器(并不是所有的都支持DirectGMA)。您可以使用AMD提供的OpenCL、DirectX或OpenGL扩展。
  • 具有外设驱动程序(网卡、视频采集卡等),可以暴露GPU DMA引擎可以读/写的物理地址。或者能够对外围直接存储器存取引擎进行编程以将数据传送到GPU显式存储器或从显式存储器传送数据。

我使用这项技术将数据直接从视频捕获设备传输到GPU内存,以及从GPU内存传输到专有FPGA。这两种情况都非常有效,并且不涉及任何额外的复制。

Interfacing OpenCL with PCIe devices

票数 5
EN

Stack Overflow用户

发布于 2012-02-25 06:36:47

正如@ananthonline和@harrism指出的那样,GPUDirect的许多特性在OpenCL中没有直接的等价物。但是,如果您正在尝试减少内存传输开销,如问题第一句中所述,零复制内存可能会有所帮助。通常,当应用程序在GPU上创建缓冲区时,缓冲区的内容将从CPU内存整体复制到GPU内存。对于零拷贝内存,没有前期拷贝;相反,数据在被GPU内核访问时被拷贝。

零拷贝并不适用于所有应用程序。以下是AMD应用程序OpenCL编程指南中关于何时使用它的建议:

当设备以稀疏方式访问主机内存时,或者在多个设备之间共享较大的主机内存缓冲区且副本成本过高时,

零拷贝主机驻留内存对象可以提高性能。选择此选项时,传输成本必须大于较慢访问的额外成本。

《编程指南》的表4.3介绍了为利用零复制( CL_MEM_ALLOC_HOST_PTR或CL_MEM_USE_PERSISTENT_MEM_AMD,取决于您想要的是设备可访问的主机存储器还是主机可访问的设备存储器),需要传递给clCreateBuffer的标志。请注意,零拷贝支持取决于操作系统和硬件;Linux或较早版本的Windows似乎不支持此功能。

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

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9287346

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档