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