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。

赞(1)
未经允许不得转载:极客笔记 » OpenCL SVM类型
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址