4

在不同的GPU设备之间传输数据很耗时,因为这个过程很可能是这样的:GPU1->CPU->GPU2。那么有没有更好的方法在GPU之间传输数据?另外,假设有N个线程,每个线程都要从全局内存中读取M个元素,如果要进行合并访问需要满足什么条件?

4

3 回答 3

4

clEnqueueMigrateMemObjects函数是 OpenCL 1.2 的新功能。

此函数可用于在同一上下文中的设备之间传输内存缓冲区。

我自己从未尝试过使用它,所以我不知道它是否真的比进行设备->主机->设备复制更便宜(很可能很多实现都会这样做)。

于 2013-04-08T03:58:23.877 回答
2

使用固定缓冲区的概念为 CPU 中的日期创建缓冲区,然后访问您想要使用的 GPU 数量...

于 2013-04-08T13:27:37.610 回答
0

关于执行合并内存访问的要求,如果没有看到您的代码,很难回答您。

但是这个想法是,如果线程正在加载内存中连续的数据,您将获得性能。执行它的一个通用想法是使用数组而不是结构。

于 2013-04-09T14:51:00.720 回答