我尝试实现multi-gpu OpenCL代码。在我的模型中,GPU必须进行通信 交换数据。
我发现(我不记得在哪里,已经有一段时间了)一个解决方案就是要处理 子缓冲器。任何人都可以尽可能简单地解释为什么子缓冲区很重要 在OpenCL?据我所知,只使用缓冲区就可以完全相同。
非常感谢, Giorgos
补充问题: 在GPU之间交换数据的最佳方法是什么?
答案 0 :(得分:0)
我不确定(或者我不知道)在处理多个GPU时,子缓冲区如何为您的问题提供解决方案。 AFAIK子缓冲区提供缓冲区视图,即单个缓冲区可以划分为较小缓冲区(子缓冲区)的块,提供一层软件抽象,子缓冲区在相同的情况下是有利的,在这种情况下,您需要保留第一个元素的偏移量为零。
要解决multiGPU或MultiDevice问题,OpenCL 1.2提供了API,您可以使用clEnqueueMigrateMemObjects
OpenCL API调用http://www.khronos.org/registry/cl/sdk/1.2/docs/man/xhtml/clEnqueueMigrateMemObjects.html