CMake 检测到错误版本的 OpenCL
CMake detects a wrong version of OpenCL
按照this post, where I have used these instructions 安装 NVIDIA 的 OpenCL SDK。 clinfo
工具正确检测到 1.2 OpenCL 版本。但是,以下 CMakeLists.txt
文件:
cmake_minimum_required(VERSION 3.1)
project(OpenCL_Example)
find_package(OpenCL REQUIRED)
include_directories(${OpenCL_INCLUDE_DIRS})
link_directories(${OpenCL_LIBRARY})
add_executable(main main.c)
target_include_directories(main PUBLIC ${CMAKE_CURRENT_SOURCE_DIR})
target_link_libraries(main ${OpenCL_LIBRARY})
从 here 复制,检测到错误的 OpenCL 1.1 版本:
-- Looking for CL_VERSION_1_1 - found
-- Found OpenCL: C:/Program Files/NVIDIA GPU Computing Toolkit/CUDA/v3.2/lib/Win32/OpenCL.lib (found version "1.1")
如果您能帮助我了解问题所在以及如何解决,我将不胜感激。
P.S.1. 你可以使用下面的虚拟 main.c
C 代码只是为了测试
#include <CL/cl.h>
#include <stdio.h>
int main() {
printf("Hello, World! \n");
return 0;
}
P.S.2. 关注 this Tweet, I ran the cmake .. --debug-find
command and got this log。但是还是不知道是什么问题。
P.S.3. 关注 this Tweet, it turns out that I had installed a very outdated CUDA toolkit。卸载它,现在我得到
-- Found OpenCL: C:/Program Files (x86)/IntelSWTools/system_studio_2020/OpenCL/sdk/lib/x86/OpenCL.lib (found version "2.2")
这是Intel的SDK。它基本上是 Google search“NVIDIA OpenCL SDK 下载”的第二个结果,首先是完全混乱。所以我不得不卸载它并从这里安装最新版本。 NVIDIA 至少可以提到必须安装 CUDA 工具包才能获得 OpenCL SDK!
NVidia Cuda v3.2
根据 this 于 2010 年 11 月发布,OpenCL 1.2
规范于一年后的 2011 年 11 月 15 日发布。所以我怀疑 cmake
正在检测OpenCL 1.1
正确。
如果您安装了另一个 SDK,并且您希望 cmake
检测 OpenCL 1.2
,尽管有另一个支持旧版本的 SDK,您需要在 cmake
中指定该信息。否则它将找到搜索路径上的第一个 OpenCL
并停止。因此,如果您想要确切的版本,则应指定 find_package(OpenCL 1.2 REQUIRED)
或@squareskittles 指出 find_package(OpenCL 1.2 EXACT REQUIRED)
。
然而,您可能需要将其他 SDK 路径添加到 PATH 或在 cmake
中指定它们,以便它有机会检查其他 OpenCL
版本。如果您查看 find
cmake
宏内容,它们包含一些指定的典型搜索路径,如果您在其他非标准路径中安装了 SDK,您必须自己告诉 cmake。在 Windows
上尤其如此,您没有标准的更具体的包含或库安装路径,例如在 Linux
上。在 Windows
上确实有 Program Files
但这太笼统了,cmake 必须递归地搜索它,我不确定是否支持它。
我怀疑您可能仅将 nvidia cuda 3.2 toolkit
路径添加到 PATH,或者您仅在 cmake 中指定了该路径。那么问题就出在这里。添加其他 SDK 路径可能会解决问题。
另外我认为 clinfo
检查运行时 OpenCL
安装意味着它可以是任何供应商 OpenCL.dll
在你的 NVidia GPU 上支持 OpenCL 1.2 并且 cmake
检查 SDK 的头文件您安装的 SDK 支持哪个 OpenCL
版本。所以这可能是差异。在这种情况下,您可能需要安装更新的 cuda 工具包。
按照this post, where I have used these instructions 安装 NVIDIA 的 OpenCL SDK。 clinfo
工具正确检测到 1.2 OpenCL 版本。但是,以下 CMakeLists.txt
文件:
cmake_minimum_required(VERSION 3.1)
project(OpenCL_Example)
find_package(OpenCL REQUIRED)
include_directories(${OpenCL_INCLUDE_DIRS})
link_directories(${OpenCL_LIBRARY})
add_executable(main main.c)
target_include_directories(main PUBLIC ${CMAKE_CURRENT_SOURCE_DIR})
target_link_libraries(main ${OpenCL_LIBRARY})
从 here 复制,检测到错误的 OpenCL 1.1 版本:
-- Looking for CL_VERSION_1_1 - found -- Found OpenCL: C:/Program Files/NVIDIA GPU Computing Toolkit/CUDA/v3.2/lib/Win32/OpenCL.lib (found version "1.1")
如果您能帮助我了解问题所在以及如何解决,我将不胜感激。
P.S.1. 你可以使用下面的虚拟 main.c
C 代码只是为了测试
#include <CL/cl.h>
#include <stdio.h>
int main() {
printf("Hello, World! \n");
return 0;
}
P.S.2. 关注 this Tweet, I ran the cmake .. --debug-find
command and got this log。但是还是不知道是什么问题。
P.S.3. 关注 this Tweet, it turns out that I had installed a very outdated CUDA toolkit。卸载它,现在我得到
-- Found OpenCL: C:/Program Files (x86)/IntelSWTools/system_studio_2020/OpenCL/sdk/lib/x86/OpenCL.lib (found version "2.2")
这是Intel的SDK。它基本上是 Google search“NVIDIA OpenCL SDK 下载”的第二个结果,首先是完全混乱。所以我不得不卸载它并从这里安装最新版本。 NVIDIA 至少可以提到必须安装 CUDA 工具包才能获得 OpenCL SDK!
NVidia Cuda v3.2
根据 this 于 2010 年 11 月发布,OpenCL 1.2
规范于一年后的 2011 年 11 月 15 日发布。所以我怀疑 cmake
正在检测OpenCL 1.1
正确。
如果您安装了另一个 SDK,并且您希望 cmake
检测 OpenCL 1.2
,尽管有另一个支持旧版本的 SDK,您需要在 cmake
中指定该信息。否则它将找到搜索路径上的第一个 OpenCL
并停止。因此,如果您想要确切的版本,则应指定 find_package(OpenCL 1.2 REQUIRED)
或@squareskittles 指出 find_package(OpenCL 1.2 EXACT REQUIRED)
。
然而,您可能需要将其他 SDK 路径添加到 PATH 或在 cmake
中指定它们,以便它有机会检查其他 OpenCL
版本。如果您查看 find
cmake
宏内容,它们包含一些指定的典型搜索路径,如果您在其他非标准路径中安装了 SDK,您必须自己告诉 cmake。在 Windows
上尤其如此,您没有标准的更具体的包含或库安装路径,例如在 Linux
上。在 Windows
上确实有 Program Files
但这太笼统了,cmake 必须递归地搜索它,我不确定是否支持它。
我怀疑您可能仅将 nvidia cuda 3.2 toolkit
路径添加到 PATH,或者您仅在 cmake 中指定了该路径。那么问题就出在这里。添加其他 SDK 路径可能会解决问题。
另外我认为 clinfo
检查运行时 OpenCL
安装意味着它可以是任何供应商 OpenCL.dll
在你的 NVidia GPU 上支持 OpenCL 1.2 并且 cmake
检查 SDK 的头文件您安装的 SDK 支持哪个 OpenCL
版本。所以这可能是差异。在这种情况下,您可能需要安装更新的 cuda 工具包。