我已阅读OpenCL 2.x管道API的this description,并通过khronos.org上的Pipe API pages进行了宣传。我觉得有点嫉妒,几乎完全在CUDA工作,这个漂亮的功能仅在OpenCL中可用(并且抱歉CUDA功能未被OpenCL正确包含,但这是一个不同的问题),所以我想我和#39 ;请问"为什么CUDA没有管道机制"。但后来我意识到我甚至都不知道这究竟意味着什么。所以,相反,我会问:
OpenCL管道如何在AMD独立GPU / APU上运行? ...
答案 0 :(得分:5)
OpenCL管道与OpenCL 2.0一起被引入。在GPU上,OpenCL管道就像一个具有受控访问权限的全局内存缓冲区,即您可以限制允许同时写入/读取管道的工作组数量。这种允许我们重用相同的缓冲区或管道,而不必担心来自多个工作组的冲突读取或写入。据我所知,OpenCL管道不使用GPU本地内存。但是,如果您仔细调整管道的大小,则可以增加缓存命中数,从而实现更好的整体性能。关于何时应使用管道,没有一般规则。我使用管道在两个同时运行的内核之间传递数据,这样我的程序可以通过更好的缓存命中率实现更好的整体性能。这与OpenCL管道在CPU中的工作方式相同(它只是一个全局缓冲区,如果它足够小,可能适合系统缓存)。但是在像FPGA这样的设备上,它们以不同的方式工作。管道使用本地内存而不是这些设备中的全局内存,因此使用全局内存缓冲区可以获得相当高的性能。