我试图了解 CL_MEM_USE_HOST_PTR 和 CL_MEM_COPY_HOST_PTR 的工作原理。基本上当使用 CL_MEM_USE_HOST_PTR 时,比如说在创建 2D 图像时,这不会将任何内容复制到设备,而是 GPU 将参考主机上的映射内存(clEnqueueMapBuffer 映射它),进行处理,我们可以将结果写入其他位置.
另一方面,如果我使用 CL_MEM_COPY_HOST_PTR,它将创建设备上主机 ptr 指向的数据的副本(我猜它会创建一个单独的副本,而不仅仅是缓存)。现在将对复制到设备的数据进行处理,然后将结果再次复制到主机。我希望我理解正确。
所以我的问题是......只是出于我的好奇心,我想这样做。我将使用 CL_MEM_USE_HOST_PTR 现在即使设备可以访问主机内存,我希望 GPU 内核在设备本身上创建一个单独的副本(不使用 COPY_HOST_PTR,因为这再次在主机本身中完成)然后执行处理这些数据。如何才能做到这一点??