OpenCL 2.0引入了Shared Virtual Memory (SVM)
,允许在主机和设备之间共享虚拟内存地址。
有许多不同的SVM功能,请参阅cl.h
的摘录:
/* cl_device_svm_capabilities */
#define CL_DEVICE_SVM_COARSE_GRAIN_BUFFER (1 << 0)
#define CL_DEVICE_SVM_FINE_GRAIN_BUFFER (1 << 1)
#define CL_DEVICE_SVM_FINE_GRAIN_SYSTEM (1 << 2)
#define CL_DEVICE_SVM_ATOMICS (1 << 3)
根据英特尔的this article,CL_DEVICE_SVM_FINE_GRAIN_SYSTEM
功能意味着OpenCL设备可以共享操作系统&#39;地址空间,没有为它创建一个SVM缓冲区。
使用CPU设备支持细粒度SVM应该相对简单。我的(第6代,Skylake)系统报告它使用英特尔CL_DEVICE_SVM_FINE_GRAIN_SYSTEM
支持Experimental OpenCL 2.1 CPU Only Platform
。但是,Skylake GPU和CPU使用普通CL_DEVICE_SVM_FINE_GRAIN_SYSTEM
平台 支持Intel(R) OpenCL
。
我可以想象,显卡上的GPU支持细粒度SVM非常困难(如果不是不可能!)。但是,APU上的GPU(例如Intel i7
或AMD A10
)应该可以支持它。
是否有任何GPU支持细粒度系统Shared Virtual Memory
?