【发布时间】:2020-09-28 00:16:34
【问题描述】:
在this post 之后,我使用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版本:
-- 寻找 CL_VERSION_1_1 - 找到 -- 找到 OpenCL:C:/Program Files/NVIDIA GPU Computing Toolkit/CUDA/v3.2/lib/Win32/OpenCL.lib(找到版本“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 之后,我运行cmake .. --debug-find 命令并得到this log。但仍然不确定是什么问题。
P.S.3. 跟着this Tweet,原来我安装了a very outdated CUDA toolkit。卸载它,现在我得到了
-- 找到 OpenCL:C:/Program Files (x86)/IntelSWTools/system_studio_2020/OpenCL/sdk/lib/x86/OpenCL.lib(找到版本“2.2”)
这是英特尔的 SDK。这基本上是Google search“NVIDIA OpenCL SDK 下载”的第二个结果,首先完全令人困惑。所以我不得不卸载它并从这里安装最新版本。 NVIDIA 至少可以提一下,必须安装 CUDA 工具包才能获得 OpenCL SDK!
【问题讨论】:
-
您在调用
find_package()时是否尝试指定确切的版本?例如:find_package(OpenCL 1.2 EXACT REQUIRED) -
@squareskittles 感谢您的评论。指定 SDK/SPI/Platfrom 的确切版本实际上是一种不好的做法,但是为了调试问题,它添加了上述命令并得到了
Could NOT find OpenCL: Found unsuitable version "1.1", but required is exact version "1.2"错误。 -
我不知道为什么这是不好的做法,尤其是当您在机器上拥有相同软件的多个版本时。您可以查看
find_package()文档的Version Selection 部分,该部分描述了 CMake 如何在不同情况下选择版本。它找到您想要的版本的能力因包而异,并且依赖于存在的版本文件 (opencl-config-version.cmake)。
标签: c windows cmake opencl nvidia