使用OpenCL的DMA功能是否可以写入传递给cl程序的主存储器地址?我知道这样做可能会破坏程序,但这里的意图是运行GPU进程,然后覆盖用于运行它的CPU程序的地址空间,因此预计会破坏。
谢谢!
答案 0 :(得分:2)
您定位的是哪个版本的OpenCL API? 在OpenCL 2.0及更高版本中,您可以使用共享虚拟内存(SVM)在支持它的平台中的主机和设备之间共享地址。 您可以在Intel OpenCL SVM overview。
中获取有关它的更多信息如果您使用的是以前的版本,或者您的硬件不支持它,您可以使用带有clCreateBuffer相应标志的固定内存。特别是CL_MEM_USE_HOST_PTR或CL_MEM_ALLOC_HOST_PTR,请参阅clCreateBuffer in Khronos。
注意,使用CL_MEM_USE_HOST_PTR时有一些对齐限制。 通常,在OpenCL中,DMA的使用时间和方式取决于硬件平台,因此您应参阅供应商文档以获取详细信息。