【问题标题】:Getting "cl_version.h: CL_TARGET_OPENCL_VERSION is not defined. Defaulting to 220 (OpenCL 2.2)" warning during runtime在运行时获取“cl_version.h:CL_TARGET_OPENCL_VERSION 未定义。默认为 220 (OpenCL 2.2)”警告
【发布时间】:2020-06-09 16:00:59
【问题描述】:

thisthis 的帖子之后,我正在编译this GitHub Gist 上的main.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 和 clinfo 获得两个不同版本的 OpenCL?
  2. 我在运行时收到的警告是什么?如何解决?

P.S. Herecmake .. --debug-find 的输出

【问题讨论】:

  • 请将您的CMakeLists.txt 的内容添加到此问题帖子中。在 Stack Overflow 上,我们希望每个问题都是独立的。也就是说,参考您之前的问题是可以的,但作为任何其他参考,它不会取代它需要在问题帖子本身中提供所有重要信息。
  • @Tsyvarev 感谢您的评论。我确实可以复制帖子中的所有内容,但根据我的经验,帖子越长,它们就越令人困惑和分散注意力。简洁确实有助于读者专注于主要问题。如果您仍然认为我应该包含 CMake 文件的内容。请告诉我。
  • 我将CMakeLists.txt 文件添加到 GitHub Gist 以便于复制问题。
  • "如果您仍然认为我应该包含 CMake 文件的内容。请告诉我。" - 是的,您需要在此处添加CMakeLists.txt。它也在How to Ask 中指出。实际上,由于您的问题是关于单行 的输出,因此只需添加这一行:find_package(OpenCL REQUIRED)。 “......但根据我的经验,帖子越长,它们就越令人困惑和分散注意力。” - 如果没有最少的信息,帖子会更加分散注意力。
  • @Tsyvarev 感谢您的支持。我添加了单行。我希望这是令人满意的。

标签: c windows cmake opencl intel


【解决方案1】:

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

  • 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 应该不可用。

【讨论】:

  • 非常感谢。你很有帮助。我希望我们可以通过OpenCL Discord 联系您。
猜你喜欢
  • 2016-03-24
  • 2014-08-27
  • 1970-01-01
  • 2011-01-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多