内存位置和分配

时间:2012-11-12 12:14:42

标签: opencl gpgpu

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

2 个答案:

答案 0 :(得分:4)

您可以 询问 OpenCL在创建缓冲区时通过设置 CL_MEM_USE_HOST_PTR 标记来使用原始内存区域。

如果内核在CPU上运行,则不会发生内存复制。

如果在GPU上运行,则如果OpenCL运行时认为它更合适,则会发生 的副本。

答案 1 :(得分:3)

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

与gpgpu相反,使用OpenCL,内核可能会在CPU本身上运行,因此无需复制缓冲区;但OpenCL仍然总是要求你明确地传输内存,只是它的实现将忽略它,如果它在主机上运行。