我尝试实现一个多gpu的OpenCL代码。在我的模型中,GPU必须进行通信交换数据。
我发现(我不记得在哪里,已经有一段时间了)一个解决方案是子缓冲器。有人能尽可能简单地解释为什么子缓冲区很重要吗在OpenCL中?据我所知,只使用缓冲区也可以做同样的事情。
非常感谢,Giorgos
补充问题:在GPU之间交换数据的最佳方式是什么?
我不确定(或者我不知道)在处理多个GPU时,子缓冲区将如何为您的问题提供解决方案。AFAIK子缓冲区提供了一个缓冲区视图,即单个缓冲区可以划分为更小的缓冲区块(子缓冲区),提供了一层软件抽象。在需要保持偏移第一元素为零的相同情况下,子缓冲区是有利的。
为了解决多GPU或多设备问题,OpenCL 1.2提供了API,您可以使用clEnqueueMigrateMemObjects
OpenCL API调用将内存对象从一个GPU直接复制到另一个GPUhttp://www.khronos.org/registry/cl/sdk/1.2/docs/man/xhtml/clEnqueueMigrateMemObjects.html