如何让 nVidia CUDA 或 OpenCL 在配备 nVidia 独立显卡/英特尔集成显卡的笔记本电脑上运行?

Pet*_*tta 31 nvidia opencl cuda bumblebee

背景:我是一名 3D 艺术家(作为一种爱好),最近开始使用 Ubuntu 12.04 LTS 作为 Windows 7 的双启动。它运行在我相当新的 64 位 Toshiba 笔记本电脑上,带有 nVidia GeForce GT 540M GPU(显卡)。然而,它也有英特尔集成显卡(我怀疑 Ubuntu 一直在使用)。

因此,当我在 Windows 上将 3D 场景渲染为图像时,我可以在使用 CPU 或 nVidia GPU(更快)之间进行选择。在 3D 应用程序中,我可以将 GPU 设置为使用 CUDA 或 OpenCL。在 Ubuntu 中,没有 GPU 选项。

在对 Linux 和 nVidia Optimus 技术的问题做了(太多?)研究之后,我稍微开悟了一点,但更困惑了。

我一点也不关心 Optimus 技术,因为电池寿命对我来说根本不是问题。

这是我的问题:我该怎么做才能在 Ubuntu 的 nVidia GPU 上使用使用 CUDA 的程序(例如 Blender)?我需要 nVidia 驱动程序吗?(我听说他们在 Linux 上的 Optimus 设置不能很好地发挥作用。)至少有一种方法可以在 Ubuntu 的 GPU 上使用 OpenCL 吗?

Lek*_*eyn 27

我刚刚做了一些实验,可以确认 Eric Appleman 的声明,即 CUDA 不需要 Bumblebee。(有关Bumblebee 的更多信息:Ubuntu 是否支持采用 Optimus 技术的 NVIDIA GeForce?

但是,当您需要使用 OpenGL 显示图形示例时,您确实需要类似 Bumblebee 的 Optimus 系统,否则您要么在显示器上看不到任何内容,要么出现错误:

ERROR: Support for necessary OpenGL extensions missing.
Run Code Online (Sandbox Code Playgroud)

运行 CUDA 程序时,需要安装 CUDA 工具包和 nvidia 驱动程序。如果要编译程序,还需要SDK。安装程序可以在http://developer.nvidia.com/cuda-downloads上找到,请在安装 Optimus 笔记本电脑之前阅读以下说明。

安装 CUDA

司机

我建议从 Ubuntu 的包管理器安装 nvidia 驱动程序。如果安装 Bumblebee,则无需担心驱动程序。否则,安装后,请按照https://askubuntu.com/a/107746/6969 中的说明禁用nvidia 库。如果不这样做,您将失去 3D 加速能力,并可能卡在低分辨率上。

工具包

基本上,您必须下载安装程序,使其可执行并运行它。- 下载安装程序。在撰写本文时,4.2.9 是最新的驱动程序。由于我使用的是 64 位操作系统,因此我使用 64 位 11.04 Ubuntu 软件包(尽管我运行的是 12.04)- 使其可执行并允许安装/usr/local/cuda

chmod +x cudatoolkit_4.2.9_linux_64_ubuntu11.04.run
sudo ./cudatoolkit_4.2.9_linux_64_ubuntu11.04.run
Run Code Online (Sandbox Code Playgroud)

当出现安装消息询问您在哪里安装 CUDA 时,只需按 Enter 接受默认值/usr/local/cuda

......................................
Enter install path (default /usr/local/cuda, '/cuda' will be appended):
Run Code Online (Sandbox Code Playgroud)

安装后,它会打印一些建议将 cuda 库目录放入库搜索路径的消息:

========================================

* Please make sure your PATH includes /tmp/cuda/cuda/bin
* Please make sure your LD_LIBRARY_PATH
*   for 32-bit Linux distributions includes /tmp/cuda/cuda/lib
*   for 64-bit Linux distributions includes /tmp/cuda/cuda/lib64:/tmp/cuda/cuda/lib
* OR
*   for 32-bit Linux distributions add /tmp/cuda/cuda/lib
*   for 64-bit Linux distributions add /tmp/cuda/cuda/lib64 and /tmp/cuda/cuda/lib
* to /etc/ld.so.conf and run ldconfig as root

* Please read the release notes in /tmp/cuda/cuda/doc/

* To uninstall CUDA, remove the CUDA files in /tmp/cuda/cuda
* Installation Complete
Run Code Online (Sandbox Code Playgroud)

如果需要,您可以跳过此步骤,但是您必须LD_LIBRARY_PATH=/usr/local/cuda/lib64:/usr/local/cuda/lib:$LD_LIBRARY_PATH稍后在运行程序时进行设置。

开发工具包

如果您希望能够编译 CUDA 应用程序,您可以按照与上述类似的方式安装 SDK。下载,使其可执行并运行它(不是以 root 身份,例如没有sudo!)。在编译部分内容时,我不得不对以下内容进行一些更改NVIDIA_GPU_Computing_SDK/C/common/common.mk

  • 在大约第 189 行之后OPENGLLIB := -lGL -lGLU -lX11 -lXi -lXmu,添加:

    OPENGLLIB += -L/usr/lib/nvidia-current -L/usr/lib32/nvidia-current
    
    Run Code Online (Sandbox Code Playgroud)
  • 后大约第271行,调剂${RENDERCHECKGLLIB}使用${OPENGLLIB},使得它看起来像:

    LIB += $(RENDERCHECKGLLIB) ${OPENGLLIB} $(PARAMGLLIB) ${LIB} -ldl -rdynamic
    
    Run Code Online (Sandbox Code Playgroud)
  • 再多几 (5) 行,做同样的事情,但也要删除-lcuda
  • 再往前走几 (7) 行,执行与第 271 行相同的操作。

使用 CUDA

CUDA 不需要 nvidia 驱动的 X 服务器即可工作。在这种情况下,您可以运行随机测试程序,例如:

LD_LIBRARY_PATH=/usr/lib/nvidia-current:/usr/lib32/nvidia-current:$LD_LIBRARY_PATH someComputallyIntensiveProgram

如果您尚未将 CUDA 添加到您的库路径中,您将需要:

LD_LIBRARY_PATH=/usr/lib/nvidia-current:/usr/lib32/nvidia-current:/usr/local/cuda/lib64:/usr/local/cuda/lib:$LD_LIBRARY_PATH someComputallyIntensiveProgram

(如果您的程序是 64 位,您可以从中剥离 32 位路径)。

如果 CUDA 程序确实需要使用 OpenGL 显示某些内容,则必须使用 optirun:

 optirun blender
Run Code Online (Sandbox Code Playgroud)

或者,如果您没有将 CUDA 添加到默认路径:

LD_LIBRARY_PATH=/usr/local/cuda/lib64:/usr/local/cuda/lib:$LD_LIBRARY_PATH optirun Blender

  • 不客气,现在我希望时间会以 PRIME 形式的最终解决方案奖励我们,其中包含更新的 xorg+mesa(或 Wayland?)堆栈:) (2认同)

Pet*_*tta 15

这是完整的答案(基于Alex FalappaLekensteyn 的答案):

确实可以让 nVidia Optimus GPU 在 Ubuntu 上运行 CUDA。

CUDA 不需要 Bumblebee。(有关Bumblebee 的更多信息:Ubuntu 是否支持采用 Optimus 技术的 NVIDIA GeForce?

但是,当您需要使用 OpenGL 显示图形示例时,您确实需要类似 Bumblebee 的 Optimus 系统,否则您要么在显示器上看不到任何内容,要么出现错误:

ERROR: Support for necessary OpenGL extensions missing. 
Run Code Online (Sandbox Code Playgroud)

如果您需要使用诸如 Blender 之类的图形密集型程序,Bumblebee 目前是一个不错的选择。

如果您不想安装 Bumblebee(即如果您不需要 OpenGL),请跳至安装 CUDA
否则,请继续阅读。

安装大黄蜂

按照Nvidia Optimus 笔记本电脑的工作情况如何?

这些目前由 Bumblebee 开发人员保持最新。

安装 Bumblebee 并重新启动后,您将可以使用该optirun程序选择要在启动程序时使用的显卡。
例如:

optirun blender
Run Code Online (Sandbox Code Playgroud)

要快速测试是否一切正常,请使用:

optirun glxspheres
Run Code Online (Sandbox Code Playgroud)

如果一切正常,您将看到一个带有彩色旋转球体的程序。

验证终端中的 GL 供应商字符串是否包含单词nvidia
如果您只运行glxspheres,您将看到供应商字符串包含英特尔卡。

运行 CUDA 程序时,需要安装 CUDA 工具包和 nvidia 驱动程序。如果要编译程序,还需要SDK。安装程序可以在http://developer.nvidia.com/cuda-downloads上找到,请在安装 Optimus 笔记本电脑之前阅读以下说明。

安装 CUDA

司机

我建议从 Ubuntu 的包管理器安装 nvidia 驱动程序。如果安装 Bumblebee,则无需担心驱动程序。否则,安装后,请按照https://askubuntu.com/a/107746/6969 中的说明禁用nvidia 库。如果不这样做,您将失去 3D 加速,并可能陷入低分辨率。

工具包

基本上,您必须下载安装程序,使其可执行并运行它。- 下载安装程序。截至 2013 年 1 月 9 日,5.0.35 是最新的驱动程序。由于我使用的是 64 位操作系统,因此我使用 64 位 11.10 Ubuntu 软件包(尽管我运行的是 12.10) - 使其可执行并允许安装/usr/local/cuda

chmod +x cudatoolkit_5.0.35_linux_64_ubuntu11.10-1.run
sudo ./cudatoolkit_5.0.35_linux_64_ubuntu11.10-1.run
Run Code Online (Sandbox Code Playgroud)

当出现安装消息询问您在哪里安装 CUDA 时,只需按 Enter 接受默认值/usr/local/cuda

......................................
Enter install path (default /usr/local/cuda, '/cuda' will be appended):
Run Code Online (Sandbox Code Playgroud)

安装后,它会打印一些建议将 cuda 库目录放入库搜索路径的消息:

========================================

* Please make sure your PATH includes /tmp/cuda/cuda/bin
* Please make sure your LD_LIBRARY_PATH
*   for 32-bit Linux distributions includes /tmp/cuda/cuda/lib
*   for 64-bit Linux distributions includes /tmp/cuda/cuda/lib64:/tmp/cuda/cuda/lib
* OR
*   for 32-bit Linux distributions add /tmp/cuda/cuda/lib
*   for 64-bit Linux distributions add /tmp/cuda/cuda/lib64 and /tmp/cuda/cuda/lib
* to /etc/ld.so.conf and run ldconfig as root

* Please read the release notes in /tmp/cuda/cuda/doc/

* To uninstall CUDA, remove the CUDA files in /tmp/cuda/cuda
* Installation Complete
Run Code Online (Sandbox Code Playgroud)

如果需要,您可以跳过此步骤,但是您必须LD_LIBRARY_PATH=/usr/local/cuda/lib64:/usr/local/cuda/lib:$LD_LIBRARY_PATH稍后在运行程序时进行设置。

开发工具包

如果您希望能够编译 CUDA 应用程序,您可以按照与上述类似的方式安装 SDK。下载,使其可执行并运行它(不是以 root 身份,例如没有sudo!)。

使用 CUDA

CUDA 不需要 nvidia 驱动的 X 服务器即可工作。在这种情况下,您可以运行随机测试程序,例如:

LD_LIBRARY_PATH=/usr/lib/nvidia-current:/usr/lib32/nvidia-current:$LD_LIBRARY_PATH someComputallyIntensiveProgram

如果您尚未将 CUDA 添加到您的库路径中,您将需要:

LD_LIBRARY_PATH=/usr/lib/nvidia-current:/usr/lib32/nvidia-current:/usr/local/cuda/lib64:/usr/local/cuda/lib:$LD_LIBRARY_PATH someComputallyIntensiveProgram

(如果您的程序是 64 位,您可以从中剥离 32 位路径)。

如果 CUDA 程序确实需要使用 OpenGL 显示某些内容,则必须使用 optirun:

 optirun blender
Run Code Online (Sandbox Code Playgroud)

或者,如果您没有将 CUDA 添加到默认路径:

LD_LIBRARY_PATH=/usr/local/cuda/lib64:/usr/local/cuda/lib:$LD_LIBRARY_PATH optirun Blender

安装 Blender Build

(使用预编译的 CUDA 内核)

当您运行 时optirun blender,您可能会从 Blender 收到一条消息,说 CUDA 内核编译失败,并且在终端中出现类似于以下内容的消息:

Compiling CUDA kernel ...
nvcc warning : Option '--opencc-options (-Xopencc)' is obsolete and ignored, when
targeting compute_20, sm_20, or higher
gcc: error trying to exec 'cc1plus': execvp: No such file or directory
CUDA kernel compilation failed, see console for details.
Run Code Online (Sandbox Code Playgroud)

如果您想使用 Blender 的 GPU 渲染功能,您可能需要一个带有预编译 CUDA 内核的 Blender 版本。来自Blender.org 的构建都具有预编译的 CUDA 内核;ppa:cheleb/blender-svn 构建(在这个问题上有更多信息)没有。

要安装官方 Blender 版本,只需按照此答案中列出的说明进行操作即可。

如果您已将 Blender 安装到/usr/lib/blender,那么您应该能够从终端运行 Blender 并使用 GPU 渲染:

 optirun '/usr/lib/blender/blender'
Run Code Online (Sandbox Code Playgroud)