正确检查OpenCL版本兼容性?

Coo*_*der 1 opencl

我的应用程序是OpenCL 1.1兼容的,我想检查每个设备是否有该版本的驱动程序.有两种方法:

  1. clGetDeviceInfo() - > CL_DEVICE_VERSION
  2. clGetPlatformInfo() - > CL_PLATFORM_VERSION

我有以下疑虑:

  • 我不明白为什么方法1提供方法2对我来说似乎是正确的方法?
  • 平台提供的版本是否可能与同一平台上的设备提供的版本不匹配?
  • 什么是clGetDeviceInfo :: CL_DRIVER_VERSION?
  • 从所有这些选项中我应该使用哪个选项来检查设备是否可以运行我的OpenCL 1.1代码?

jpr*_*ice 5

OpenCL中有一些具有硬件要求的功能.这意味着即使特定供应商的OpenCL实现(平台)支持OpenCL版本,设备也可能不支持.因此,从CL_DEVICE_VERSIONCL_PLATFORM_VERSION查询返回的版本完全有可能不同.

当OpenCL 2.0实现开始出现时,这可能会更频繁地发生,因为市场上有大量硬件没有对OpenCL 2.0功能的必要支持.想象一下,有来自两个设备的系统供应商X:一个新的设备A,可以运行的OpenCL 2.0,和更古老的设备B不了的.在这种情况下,平台版本可能是OpenCL 2.0,但设备版本可能是Device A的 OpenCL 2.0 和Device B的 OpenCL 1.2 .

CL_DRIVER_VERSION是获得一个供应商特定版本号的执行情况.该数字可以使用供应商用于跟踪不同软件版本的任何版本编号系统,并且完全独立于OpenCL版本号(尽管一些供应商也可能在此包含OpenCL版本).

因此,为了确保设备和平台都支持您所需的OpenCL版本,您只需要检查即可CL_DEVICE_VERSION.