在运行时收到“cl_version.h:CL_TARGET_OPENCL_VERSION未定义。默认为220(OpenCL 2.2)”警告

Foa*_*oad 7 c windows intel cmake opencl

在这篇文章这篇文章之后,我正在这个 GitHub Gistmain.c上编译代码。

运行 CMake 命令find_package(OpenCL REQUIRED)我得到这个:

-- 寻找 CL_VERSION_2_2 - 已找到
-- 找到 OpenCL: C:/Program Files (x86)/IntelSWTools/system_studio_2020/OpenCL/sdk/lib/x86/OpenCL.lib (找到版本“2.2”)

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

cl_version.h:CL_TARGET_OPENCL_VERSION 未定义。默认为 220 (OpenCL 2.2)

我的问题是:

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

PS 是输出cmake .. --debug-find

doq*_*tor 4

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

  • 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
Run Code Online (Sandbox Code Playgroud)

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