【问题标题】:Getting OpenCL to work on Linux laptop with Optimus technology使用 Optimus 技术让 OpenCL 在 Linux 笔记本电脑上工作
【发布时间】:2013-12-17 09:53:18
【问题描述】:

我在我的笔记本电脑上安装了 Kubuntu 13.10,它有一个 Nvidia GT555m 和 optimus 技术。我在使用 OpenCL 编译 C++ 代码时遇到了一些问题。

我不断收到的错误是Cannot find -lOpenCL。使用 GNU find 实用程序进行快速搜索会得到以下信息:

/usr/lib32/nvidia-319/libOpenCL.so.1
/usr/lib32/nvidia-319/libOpenCL.so
/usr/lib32/nvidia-319/libOpenCL.so.1.0
/usr/lib32/nvidia-319/libOpenCL.so.1.0.0
/usr/lib/x86_64-linux-gnu/libOpenCL.so
/usr/lib/nvidia-319/libOpenCL.so.1
/usr/lib/nvidia-319/libOpenCL.so
/usr/lib/nvidia-319/libOpenCL.so.1.0
/usr/lib/nvidia-319/libOpenCL.so.1.0.0

我安装了以下 OpenCL 开发包:

opencl-headers
nvidia-opencl-dev

我还尝试了实用程序clinfo 来查看是否获得任何信息,但我收到以下错误:

clinfo: error while loading shared libraries: libOpenCL.so.1: cannot open shared object file: No such file or directory

有没有人有在他们的 Optimus 笔记本电脑上使用 OpenCL 设置 Linux 开发环境的经验?

我的印象是我不需要做任何花哨的事情就可以让它工作。

编辑:好吧,看来我无法编译的原因是因为我混淆了头文件和库。使用以下代码可以很好地编译我的代码:

g++ -std=c++11 -I /usr/local/cuda-5.5/include vadd.cpp -L /usr/lib/nvidia-331 -lOpenCL

我现在在运行时遇到另一个错误(但至少我设法编译了!)。错误如下:

ERROR: clGetPlatformIDs
-1001

通过一些研究,这意味着我可能没有安装 nvidias 工具包的 ICD 部分?我无法理解的是 - 在哪里可以找到它!

【问题讨论】:

  • 您是否尝试添加链接目录的路径:-L/usr/lib32/nvidia-319/
  • 是的,我做到了,它有点工作,但编译不好。我无法理解的是我应该选择哪个版本的库。我安装的 libopencl-dev 软件包将 libOpenCL.so 文件放在 /usr/lib/x86_64-linux-gnu 中,并将相应的头文件放在 /usr/include 中。但是,如果我尝试将它添加到我的库路径中,它只会抱怨它找不到 lOpenCL! nvidia-319 路径中的那个似乎不想在我添加一些基本命令后立即为我编译,但至少它不会抱怨它找不到 lOpenCL :/

标签: c++ linux ubuntu opencl


【解决方案1】:

您应该安装Nvidia Cuda SDK。它包含 OpenCL 开发库和包含。

【讨论】:

  • 我从我的包管理器中安装了 cuda 5.0 和相关的开发包(这是大多数 Ubuntu 用户的建议)。但是我仍然遇到同样的错误(找不到 -lOpenCL)
  • @MichaelAquilina 我不知道 ubuntu 包。
【解决方案2】:

您不需要开发包或库,(OpenCL 已经存在并且正在运行,只是给您一个运行时错误,ICD 存在)。您需要的是一个准备好执行 OpenCL 代码的平台,即一个 GPU + 一个驱动程序。

您需要安装 nVIDIA 的专有驱动程序:通过使用 Ubuntu 工具,或通过安装包 nvidia-current

【讨论】:

    【解决方案3】:

    也许你必须安装bublebee。使用 Optimus 技术在 Nvidia 卡上使用 Cuda 的库。

    【讨论】:

      【解决方案4】:

      我没有使用 Kubuntu,但我在 Mageia 版本 6 Linux 下运行它,所以我想它应该非常相似。就我而言,我的笔记本电脑中有英特尔和英伟达(GeForce GTX 980M)显卡。我的意图是只运行 OpenCL 编译的代码,而无需设置任何 Xorg 图形服务器。

      因此,正如 DarkZeros 上面所建议的那样,我只使用了专有的 nvidia 驱动程序(在我的情况下是从 Nvidia 页面下载的)。然后在root用户下:

      ./NVIDIA-Linux-x86_64-375.39.run --no-opengl-files
      

      它问我是否想修改我的 Xorg 配置 - 我说“不”。这提供了 nvidia 内核模块。接下来,我修改了 /etc/modules 让 Linux 知道它应该在系统启动时加载它们(这在 Kubuntu 上可能不同)

      [root@localhost ~]# cat /etc/modules
      nvidia
      nvidia-uvm 
      nvidia-drm
      nvidia-modeset
      

      真的就是这样。重新启动系统并加载模块应该也会自动在 /dev 目录下创建正确的 nvidia 设备文件。

      [root@localhost ~]# ls /dev/nvidia*
      /dev/nvidia0  /dev/nvidiactl  /dev/nvidia-uvm  /dev/nvidia-uvm-tools
      

      我的灵感来自 [ftp://download.nvidia.com/XFree86/Linux-x86/295.59/README/optimus.html][1]

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-08-23
        • 1970-01-01
        • 2018-06-20
        • 1970-01-01
        • 2020-09-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多