OpenCL SVM类型

OpenCL 2.0标准中支持三种类型的SVM。

  • 粗粒度缓冲SVM:共享发生的粒度为OpenCL缓冲存储器对象区域。不支持跨设备的原子操作。
  • 细粒度缓冲SVM:SVM由OpenCL API函数(clSVMAlloc)显式地创建。共享发生的粒度为OpenCL缓冲存储器对象中独立的加载和存储。支持跨设备的原子操作,但是该功能是可选的。
  • 细粒度系统SVM:SVM由操作系统函数(如malloc、new或其他函数)创建。共享发生的粒度为主机内存中独立的加载和存储。支持跨设备的原子操作,但是该功能是可选的。

跨设备原子操作或SVM原子操作为原子函数和栅栏(fence)操作,可以用来协调主机和内核同时访问存储器对象。细粒度类型有选择地支持原子操作,粗粒度类型不支持原子操作。

接下来会讲解SVM的特性,不同的SVM类型提供的SVM特性也是不同的。要想SVM能提供越多的特性,相应的硬件、操作系统和设备驱动也越复杂。所以,对于这三种SVM类型,并不要求OpenCL平台和设备都支持。实际上,粗粒度缓冲SVM是OpenCL 2.0平台都支持的,细粒度的类型都是可选的。
对于OpenCL设备支持哪种SVM类型,可以使用函数clGetDeviceInfo查询CL_DEVICE_SVM_CAPABILITIES属性结果:

cl_device_svm_capabilities caps;
cl_int err = clGetDeviceInfo(deviceID,
                                  CL_DEVICE_SVM_CAPABILITIES,
                                  sizeof(cl_device_svm_capabilities),
                                  &caps, 0);

上述代码的结果可以用下表来总结。当下表中第一列表达式为真时,相应的SVM类型在“SVM类型”一列列出。
查询设备支持的SVM类型
在AMD R9 285的GPU设备上,支持粗粒度缓冲SVM和细粒度缓冲SVM。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程