我对OpenCL开发的总体情况有点困惑,所以我只是将我当前的理解和问题列为清单。如果我错了,请纠正我。
我知道英特尔,AMD都有SDK(“平台”)(我想在Nvidia SDK中也有OpenCL支持吗?)
其他供应商是否有SDK?
一个供应商的SDK是否支持另一个供应商的设备?例如采用AMD sdk的Nvidia设备?我可以使用AMD SDK在我的Intel CPU上运行程序。
这是一次安装多个平台并在运行时处理它们的方法吗?
谢谢!
答案 0 :(得分:3)
2)是的,来自Apple,ARM等。
3)是的,多亏了OpenCL ICD,您可以在NVIDIA SDK上编译可执行文件并在AMD硬件上运行。但是,您必须小心使用OpenCL版本,使用OpenCL 1.2 SDK进行编译并在1.1上运行会产生一些问题。平台。
4)是的,您可以在运行时查询OpenCL以获取可用平台列表并使用其中一个或全部。我将日常的英特尔OpenCL CPU设备与多个AMD OpenCL GPU设备并排使用。
答案 1 :(得分:2)
这是How to use 2 OpenCL runtimes的副本,已得到答复。简答:SDK只是为您提供标题。已安装的驱动程序提供平台和设备。您可以使用任何已安装的文件。
答案 2 :(得分:0)
英特尔OpenCL SDK支持CPU的OpenCL 1.2,但仅支持英特尔HD的OpenCL 1.1。引用他们的网页“在英特尔®高清显卡上混用OpenCL 1.1的CPU上的OpenCL 1.2”。但是,英特尔HD的驱动程序看起来并不是很好。它崩溃了大多数运行在其他所有代码上的代码。
Nvidia SDK不包含C ++绑定文件cl.hpp。您可以将其从另一个SDK复制或从Khronos Group OpenCL站点获取。
我在使用AMD SDK的非AMD设备上运行OpenCL时遇到问题,因此我使用的是英特尔SDK,它适用于AMD,英特尔和Nvidia。但是,1.1 C ++绑定和1.2 C ++绑定不是100%兼容的。如果您希望您的代码同时适用于Nvidia和AMD GPUS,请仅使用OpenCL 1.1,并定义: #define CL_USE_DEPRECATED_OPENCL_1_1_APIS