以下 此职位在这里,我使用了 本说明 来安装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})
复制自 此处检测到错误的OpenCL 1.1版本......--寻找CL_VERSION_1_1--发现--发现OpenCL: C:Program FilesNVIDIA GPU Computing ToolkitCUDAv3.2libWin32OpenCL.lib (发现版本 "1.1")
-- 寻找CL_VERSION_1_1 - 找到-- 找到OpenCL:C:Program FilesNVIDIA GPU Computing ToolkitCUDAv3.2libWin32OpenCL.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. 遵循 此微博,我跑了 cmake .. --debug-find
并得到 此日志. 但还是不知道问题出在哪里。
P.S.3. 以下是 此微博,原来我安装了 一个非常过时的CUDA工具箱. 卸载后,现在我得到
-- 找到OpenCL:C:Program Files (x86)IntelSWToolssystem_studio_2020OpenCLsdklibx86OpenCL.lib (找到版本 "2.2")
也就是英特尔的SDK。基本上是第二个结果,在 谷歌搜索 " 英伟达OpenCL SDK下载",首先是完全搞不懂。所以我不得不卸载它,从这里安装最新版本。NVIDIA至少可以提一下,必须安装CUDA工具包才能得到OpenCL SDK!
NVidia Cuda v3.2
是根据 这个 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)
或如@方块糖所言 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的头中检查 OpenCL
你安装的SDK支持的版本。所以这里可能有差异。在这种情况下,你可能需要安装更新的cuda工具包。