2012-11-12 90 views
1

例如:要对数组执行算法,我们必须使用由数组创建的缓冲区。 但是对于Intel/AMD CPU,它使用像Global Memory这样的系统的DDR。 最后,表格创建两次。有没有办法在没有分配缓冲区的情况下使用已经在内存中的表。内存位置和分配

回答

4

可以的OpenCL通过创建缓冲区时设置CL_MEM_USE_HOST_PTR标志使用原来的内存区域。

如果内核在CPU上运行,则不会发生内存复制。如果OpenCL运行认为这是更适合

如果在GPU上运行的副本可能发生。

3

CPU可以访问机器的内存,但无法访问GPU的内存。同样,GPU可以访问自己的内存,但不能访问主机。这就是你必须在这两者之间传递信息的原因 - 它们是两个完全分离的存储空间。

与gpgpu相反,使用OpenCL,内核可以在CPU上运行,因此不需要复制缓冲区;但OpenCL仍然要求您明确地传输内存,只是它的实现会在主机上运行时忽略它。

+0

因此,这些数据在OpenCL CPU平台上分配了两次,并且有任何技巧可以解决这个问题? 在图像处理中,对性能造成很大的浪费。 –

+1

@AlexPlacet我想我还不够清楚......如果你使用OpenCL并且你的目标设备是CPU,那么数据**不会被分配两次。如果你在GPU上使用完全相同的代码,它会。 – Oak