OpenCL中gpu之间的数据传输

OpenCL中gpu之间的数据传输,opencl,gpu,Opencl,Gpu,在不同的GPU设备之间传输数据非常耗时,因为这个过程很可能是这样的:GPU1->CPU->GPU2。那么有没有更好的方法在GPU之间传输数据?另外,假设有N个线程,每个线程都必须从全局内存中读取M个元素,如果我想执行联合访问,应该满足哪些条件?有一个函数,它是OpenCL 1.2中新增的 此函数可用于在同一上下文中的设备之间传输内存缓冲区 我自己从来没有尝试过使用它,所以我不知道它是否真的比执行设备->主机->设备复制更便宜(很可能很多实现都会这样做).使用固定缓冲区的概念为CPU中的日期创建缓

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

有一个函数,它是OpenCL 1.2中新增的

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


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

使用固定缓冲区的概念为CPU中的日期创建缓冲区,然后在您希望使用的GPU数量中进行访问。

关于执行合并内存访问的要求,如果不查看代码,很难回答您的问题


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

AFAIK目前所有实现都必须通过主机内存,但区别在于它们可以作为DMA操作序列来执行,而无需CPU和用户代码的额外参与,这应该会加快一点速度。pci-e内部连接不能这样做吗?