我正在尝试在科学 Linux 中安装 ViennaCL-1.2.1,以便将来进行 GPU 计算。当我尝试调用 make 时,我收到各种错误,大多数错误类似于“对‘clXXXXX’的未定义引用”。我假设这是因为它没有正确找到我的 OpenCL 库。我不知道我是否有足够的库。在 /usr/lib 中我有 libOpenCL.so,并且我已经为我的显卡安装了最新的 NVIDIA 驱动程序。该驱动程序支持 OpenCL,但我是否需要从NVIDIA 网站使用 ViennaCL 库?
编辑:我通过简单地重新运行 cmake 解决了上述 make 问题(我相信)。我认为我第一次运行 cmake 时没有正确安装库,因此在创建 make 文件时出现了无提示错误。然而,这仅仅改变了问题的性质。
现在,每当我运行 ViennaCL 附带的任何教程或基准测试时,我都会收到一个致命错误,即“ViennaCL 遇到了未知的 OpenCL 错误”。它说这可能是由于几个编译错误造成的,但没有进一步说明。唯一没有抛出错误的是“带宽减少”,它来自手册被发现是唯一一个不需要 OpenCL 的。
作为参考,以下是我安装 ViennaCL 和 GPU 驱动程序的过程:
- sftp ViennaCL-1.2.1 to ~/Documents/packageInstall
- cd /usr/include
- sudo mkdir viennacl
- sudo cp -r ~/Documents/packageInstall/ViennaCL-1.2.1/viennacl/* /usr/include/viennacl
- sudo mkdir CL
- sudo cp -r ~/Documents/packageInstall/ViennaCL-1.2.1/CL/* /usr/include/CL
- sftp gpucomputingsdk_4.2.9_linux.run to ~/Documents/packageInstall
- sftp cudatoolkit_4.2.9_linux_64_rhel6.0.run to ~/Documents/packageInstall
- cd ~/Documents/packageInstall
- sudo sh ./cudatoolkit_4.2.9_linux_64_rhel6.0.run
- sudo sh ./gpucomputingsdk_4.2.9_linux.run
- cd ViennaCL-1.2.1/build
- cmake ..
- sudo make
- ./examples/tutorial/blas1 (or any other example)
答案1
你说得对,这听起来很像链接器错误。
请确保链接器标志设置正确,例如-lOpenCL
答案2
在 Karl Rupp 的指导下,我通过将尝试运行程序的用户添加到“视频”组,然后在每次启动时手动启动 nvidia 服务解决了这个问题。需要“视频”组才能允许访问 OpenCL 库,并且必须启动驱动程序才能访问 GPU。