如何为 OpenCL-2.0 设备列出 OpenCL 平台?
How do OpenCL platforms are listed for OpenCL-2.0 devices?
我需要为我的开源项目实现针对版本 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
作为次要版本?
如果有人可以分享 his/hers 经验,我将不胜感激。
目前,项目可以采用 1.2 或 2.0 版本(我安装的 Intel 驱动程序有一个带有错误的实验版本 2.1,所以我通过次要版本检查过滤掉,我不确定 Nvidia 或 Amd 是否可以做类似的或在支持 OpenCL-2.x 的卡中则相反)。我还可以过滤平台名称 "experimental"/"beta" 以消除此类平台,但我不确定是否有多个版本用于相同的 GPU。
我假设 2.0 设备向后兼容 1.2,但我需要任何额外的东西来启用 1.2 规范吗?现在我没有为 1.2 设备做任何额外的事情。也许 2.0 需要一些?
每个平台return都有自己的独立于其他平台的版本号。您可以混合使用,例如 1.2 的 GPU 和 2.0 的 CPU 驱动程序。
如果您只进行 OpenCL 1.2 API 调用,您可以使用其中任何一个。如果您进行 OpenCL 2.0 API 调用,您只能使用 2.0 或更高版本的平台。
同样,平台内的设备可以 return 自己的版本号,但我认为它们不能大于其父平台号。这方面的一个例子是较旧的 GPU,即使平台是 1.2,它也可能只是 OpenCL 1.1。
与此不同的是每个设备支持的 OpenCL 内核语言版本。为了向后兼容,如果您不通过编译选项,您将获得 OpenCL C 1.x。如果您使用的是 2.x 设备,您可以在编译内核时传递一个选项字符串以获得新的语言特性。
我需要为我的开源项目实现针对版本 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
作为次要版本?
如果有人可以分享 his/hers 经验,我将不胜感激。
目前,项目可以采用 1.2 或 2.0 版本(我安装的 Intel 驱动程序有一个带有错误的实验版本 2.1,所以我通过次要版本检查过滤掉,我不确定 Nvidia 或 Amd 是否可以做类似的或在支持 OpenCL-2.x 的卡中则相反)。我还可以过滤平台名称 "experimental"/"beta" 以消除此类平台,但我不确定是否有多个版本用于相同的 GPU。
我假设 2.0 设备向后兼容 1.2,但我需要任何额外的东西来启用 1.2 规范吗?现在我没有为 1.2 设备做任何额外的事情。也许 2.0 需要一些?
每个平台return都有自己的独立于其他平台的版本号。您可以混合使用,例如 1.2 的 GPU 和 2.0 的 CPU 驱动程序。
如果您只进行 OpenCL 1.2 API 调用,您可以使用其中任何一个。如果您进行 OpenCL 2.0 API 调用,您只能使用 2.0 或更高版本的平台。
同样,平台内的设备可以 return 自己的版本号,但我认为它们不能大于其父平台号。这方面的一个例子是较旧的 GPU,即使平台是 1.2,它也可能只是 OpenCL 1.1。
与此不同的是每个设备支持的 OpenCL 内核语言版本。为了向后兼容,如果您不通过编译选项,您将获得 OpenCL C 1.x。如果您使用的是 2.x 设备,您可以在编译内核时传递一个选项字符串以获得新的语言特性。