Ex:要对数组执行算法,我们必须使用用数组创建的缓冲区。 但是使用Intel / AMD CPU,它使用系统的DDR,如Global Memory。 最后,该表创建两次。有没有办法在没有分配缓冲区的情况下使用已经在内存中的表。
答案 0 :(得分:4)
您可以 询问 OpenCL在创建缓冲区时通过设置 CL_MEM_USE_HOST_PTR 标记来使用原始内存区域。
如果内核在CPU上运行,则不会发生内存复制。
如果在GPU上运行,则如果OpenCL运行时认为它更合适,则会发生 的副本。
答案 1 :(得分:3)
CPU可以访问机器的内存,但无法访问GPU的内存。同样,GPU可以访问自己的内存,但不能访问主机。这就是你必须在它们之间传递信息的原因 - 它们是两个完全独立的存储空间。
与gpgpu相反,使用OpenCL,内核可能会在CPU本身上运行,因此无需复制缓冲区;但OpenCL仍然总是要求你明确地传输内存,只是它的实现将忽略它,如果它在主机上运行。