1

例如:要对数组执行算法,我们必须使用由数组创建的缓冲区。但是对于 Intel/AMD CPU,它使用系统的 DDR,如全局内存。最后,表被创建了两次。有没有办法在不分配缓冲区的情况下使用内存中的表。

4

2 回答 2

4

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

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

如果在 GPU 上运行,如果 OpenCL 运行时认为它更合适,则可能会出现副本。

于 2012-11-12T17:35:54.687 回答
3

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

与 gpgpu 不同,使用 OpenCL,内核可能在 CPU 本身上运行,因此无需复制缓冲区;但是 OpenCL 仍然总是要求您显式传输内存,只是如果它在主机上运行,​​它的实现将忽略它。

于 2012-11-12T13:45:57.970 回答