Opencl 内存位置和分配

Opencl 内存位置和分配,opencl,gpgpu,Opencl,Gpgpu,要在数组上执行算法,我们必须使用数组创建的缓冲区。 但由于采用了Intel/AMD CPU,它使用了系统的DDR,就像全局内存一样。 最后,该表被创建两次。有没有一种方法可以在不分配缓冲区的情况下使用内存中已有的表。CPU可以访问机器内存,但无法访问GPU内存。同样,GPU可以访问自己的内存,但不能访问主机的。这就是您必须在这两个内存空间之间传输信息的原因——它们是两个完全独立的内存空间 与gpgpu相反,使用OpenCL时,内核可能在CPU本身上运行,因此无需复制缓冲区;但是OpenCL仍然要

要在数组上执行算法,我们必须使用数组创建的缓冲区。 但由于采用了Intel/AMD CPU,它使用了系统的DDR,就像全局内存一样。
最后,该表被创建两次。有没有一种方法可以在不分配缓冲区的情况下使用内存中已有的表。

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


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

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

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

您可以在创建缓冲区时通过设置CL\u MEM\u use\u host\u PTR标志来要求OpenCL使用原始内存区域

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

如果在GPU上运行,如果OpenCL运行时认为它更合适,则可能会发生复制。

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

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


如果在GPU上运行,如果OpenCL运行时认为它更合适,可能会发生拷贝。

那么数据在OpenCL CPU平台上分配了两次,有什么技巧可以解决这个问题吗?在图像处理中,这是对性能的极大浪费。@Alexant我想我还不够清楚。。。如果您使用OpenCL,并且目标设备是CPU,那么数据不会被分配两次。如果你在GPU上使用完全相同的代码,它会。那么数据在OpenCLCPU平台上被分配两次,有什么技巧可以解决这个问题吗?在图像处理中,这是对性能的极大浪费。@Alexant我想我还不够清楚。。。如果您使用OpenCL,并且目标设备是CPU,那么数据不会被分配两次。如果你在GPU上使用完全相同的代码,它会。