如何为OpenCL-2.0设备列出OpenCL平台?

时间:2017-04-08 10:15:25

标签: opencl version platform

我需要为我的开源项目实现针对版本 1.2 的真正有效的平台版本过滤器: https://github.com/tugrul512bit/Cekirdekler

我现在没有150美元购买支持OpenCL2.0的显卡,所以我正在使用纯1.2版系统而不确定其他(新)系统。

问题:当只有opencl 2.0的gpus并且同一系统中存在1.2(max)和2.0(max)兼容的gpus时,平台列表如何?

让我们假设我使用了这个

clGetPlatformIDs()

获取清单。我是否应该假设每个设备只提供单个版本平台,或

例如,GTX-Titan XP(支持opencl 2.0?)可以列出两个平台:

  • OpenCL 1.2
  • OpenCL 2.0

分别用于同一设备?或者它只提供2.0版本?

GTX-TitanXP和GT-640怎么样?

  • OpenCL 1.2(TitanXP + GT-640)
  • OpenCL 2.0(TitanXP)

  • OpenCL 2.0(TitanXP)
  • OpenCL 1.2(GT-640)

哪一个发生?

这可以改变驱动程序吗?

OpenCL 2.3版GPU怎么样?它们在OpenCL API中看起来是2.0还是正确地将3作为次要版本?

如果有人可以分享他/她的经历,我很感激。

目前,项目可以采用1.2或2.0版本(我安装的英特尔驱动程序有一个带有错误的实验版2.1,因此我过滤掉了次要版本检查,我不确定Nvidia或Amd是否可以做类似或与OpenCL-2.x相关的功能相反的事情)。我还可以过滤平台名称" experimental" /" beta"消除这些平台,但我不确定相同的GPU是否有多个版本。

我认为2.0设备具有1.2的向后兼容性,但我是否需要额外的任何东西以启用1.2规范?目前我没有为1.2设备做任何额外的事情。也许2.0需要一些?

1 个答案:

答案 0 :(得分:2)

每个平台独立于其他平台返回自己的版本号。你可以混合使用,例如1.2的GPU和2.0的CPU驱动程序。

如果您只进行OpenCL 1.2 API调用,则可以使用其中任何一个。如果您进行OpenCL 2.0 API调用,则只能使用2.0或更高版本的平台。

同样,平台内的设备可以返回自己的版本号,但我不认为它们可能比其父平台号更大。一个例子是较旧的GPU,即使平台为1.2,也可能只是OpenCL 1.1。

与此不同的是每个设备支持的OpenCL内核语言版本。为了向后兼容,如果您没有通过编译选项,那么您将获得OpenCL C 1.x.如果您使用的是2.x设备,则可以在编译内核时传递选项字符串以获取新的语言功能。