【发布时间】:2013-04-09 22:51:00
【问题描述】:
在不同GPU设备之间传输数据很耗时,因为这个过程很可能是这样的:GPU1->CPU->GPU2。那么有没有更好的方法在GPU之间传输数据?另外,假设假设有N个线程,每个线程都要从全局内存中读取M个元素,如果要进行合并访问需要满足什么条件?
【问题讨论】:
在不同GPU设备之间传输数据很耗时,因为这个过程很可能是这样的:GPU1->CPU->GPU2。那么有没有更好的方法在GPU之间传输数据?另外,假设假设有N个线程,每个线程都要从全局内存中读取M个元素,如果要进行合并访问需要满足什么条件?
【问题讨论】:
有 clEnqueueMigrateMemObjects 函数,这是 OpenCL 1.2 的新功能。
此函数可用于在同一上下文中的设备之间传输内存缓冲区。
我自己从未尝试过使用它,所以我不知道它是否真的比进行设备->主机->设备复制更便宜(很可能很多实现都会这样做)。
【讨论】:
使用固定缓冲区的概念为 CPU 中的日期创建缓冲区,然后访问您想要使用的 GPU 数量...
【讨论】:
关于执行合并内存访问的要求,如果没有看到您的代码,很难回答您。
但想法是,如果线程正在加载内存中连续的数据,您将获得性能。执行它的一个通用想法是使用数组而不是结构。
【讨论】: