OpenCL无法检测到英特尔平台,尽管据称已安装好所有必要的组件
我正在尝试将我的CPU(Intel i5-7600K)作为一个OpenCL平台。我的操作系统是Devuan GNU/Linux Freia。我已安装以下几个APT软件包:
intel-opencl-icdocl-icd-opencl-dev- 来自 github.com/intel/compute-runtime 的“Intel Compute Runtime”软件包(见发行页面)
……然而,clinfo 工具显示我只有一个平台,即NVIDIA CUDA(与我的显卡相关联)。当我配置并构建一个会探测OpenCL平台的程序时,结果仍然一样:只有一个平台。
顺便说一句,我的构建配置相当简单;使用CMake,我写了如下(摘录):
find_package(OpenCL REQUIRED)
add_executable(my_program main.c)
target_link_libraries(my_program OpenCL::OpenCL)
并且这可以正常构建(使用 OpenCL_LIBRARY:FILEPATH=/usr/lib/x86_64-linux-gnu/libOpenCL.so)。只是缺少Intel CPU平台。
我是不是做错了什么?是不是还有什么“绝招”我还没发现?
注:这个问题也在 @chasep的 这个问题 中提到过。但是——那道问题没有答案。我也不确定他们的系统原因和我的是否相同;而且我在那个系统上也不能帮忙尝试任何东西。所以我决定还是提这个问题。请在你有一个可能同时适用于两个问题的答案时再把它标记为重复。
解决方案
如果你把Intel的 OneAPI APT仓库作为源添加进去,你就可以安装属于他们的“OneAPI”套件中的OpenCL运行时,这个方法确实可行。
下面是一段实现该操作的Shell脚本,你需要以root用户运行它:
curl -fsSL https://apt.repos.intel.com/intel-gpg-keys/GPG-PUB-KEY-INTEL-SW-PRODUCTS.PUB \
| sudo gpg --dearmor --output /etc/apt/keyrings/intel-sw-products.gpg
echo "deb [signed-by=/etc/apt/keyrings/intel-sw-products.gpg] https://apt.repos.intel.com/oneapi all main" \
| sudo tee /etc/apt/sources.list.d/intel-oneapi.list
apt install intel-oneapi-runtime-opencl
完成上述操作后,clinfo 将显示两个平台:
$ clinfo --prop CL_PLATFORM_NAME
CL_PLATFORM_NAME NVIDIA CUDA
CL_PLATFORM_NAME Intel(R) OpenCL
你的程序应该就能将CPU作为目标平台。
Notes:
- 你提到的
intel/compute-runtime仓库可能只与较新的Intel GPU相关。你甚至可以移除你安装的那些软件包,CPU平台仍然可用。 - 这可能不是唯一的解决方案。@DrSnoopy提到你可以使用Portable OpenCL(pocl),并放弃所有Intel的专有软件包。Portable OpenCL的网站。
- 仓库是用密钥进行数字签名的;你没有Intel的密钥,因此脚本会为你获取。你也许会问,为什么要信任从同一个仓库下载的密钥,这个问题留给另一个问题来讨论(在本站点可能不适用)。无论如何,情况就是这样,你要么就需要它,否则就会出现警告/错误。
站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。