在运行时收到 "cl_version.h: CL_TARGET_OPENCL_VERSION is not defined. Defaulting to 220 (OpenCL 2.2)" 警告

Getting "cl_version.h: CL_TARGET_OPENCL_VERSION is not defined. Defaulting to 220 (OpenCL 2.2)" warning during runtime

关注 and this posts, I'm compiling the main.c code on this GitHub Gist

运行 CMake 命令find_package(OpenCL REQUIRED) 我明白了:

-- Looking for CL_VERSION_2_2 - found
-- Found OpenCL: C:/Program Files (x86)/IntelSWTools/system_studio_2020/OpenCL/sdk/lib/x86/OpenCL.lib (found version "2.2")

表明找到了 OpenCL SDK 版本 2.2。这与我从 clinfo 工具中得到的结果相矛盾,该工具检测到英特尔 SDK/platforms 的 1.2 OpenCL。现在当 运行 我得到的可执行文件时:

cl_version.h: CL_TARGET_OPENCL_VERSION is not defined. Defaulting to 220 (OpenCL 2.2)

我的问题是:

  1. 为什么我从 CMake 和 clinfo 获得了两个不同版本的 OpenCL?
  2. 我在运行时收到的警告是什么以及如何解决?

P.S. Herecmake .. --debug-find

的输出

SDK 中的 OpenCL 版本和 clinfo 报告的版本是 2 个不同的东西:

  • clinfo 报告您的 GPU 支持的 OpenCL 版本
  • SDK OpenCL 版本是 SDK 支持的最高版本

现在,如果您在程序中使用 OpenCL 2.0,并且您的 GPU 支持 OpenCL 1.2,那么我怀疑其中一个 CL 函数会报告错误,或者程序会出现未定义的行为。您可以使用 #define CL_TARGET_OPENCL_VERSION <version> 在您的程序中设置目标 OpenCL 版本,例如

#define CL_TARGET_OPENCL_VERSION 120

然后 API 以上目标版本应该不可用。