问题描述
背景:我是一名3D艺术家(出于业余爱好),最近开始在Windows 7上将Ubuntu 12.04 LTS用作dual-boot。它在运行于带有nVidia GeForce GT 540M GPU(图形卡)的相当新的64位东芝笔记本电脑上运行)。但是,它也有Intel Integrated Graphics(我怀疑Ubuntu一直在使用)。
因此,当我在Windows上将3D场景渲染为图像时,可以在使用CPU或nVidia GPU(更快)之间进行选择。在3D应用程序中,我可以将GPU设置为使用CUDA或OpenCL。在Ubuntu中,没有GPU选项。
在对Linux和nVidia Optimus技术的问题进行了(太多?)研究之后,我有所启迪,但更加困惑。
我一点都不在乎Optimus技术,因为电池寿命对我来说绝对不是问题。
这是我的问题:如何在Ubuntu的nVidia GPU上使用CUDA-utilizing程序(例如Blender)?我需要nVidia驱动程序吗? (我听说它们在Linux上的Optimus设置中不能很好地发挥作用。)至少有一种方法可以在Ubuntu的GPU上使用OpenCL吗?
最佳方法
我刚刚进行了一些实验,可以确认Eric Appleman的说法,即Bumblebee对于CUDA并不是必需的。 (有关Bumblebee的更多信息:Is a NVIDIA GeForce with Optimus Technology supported by Ubuntu?)
但是,当您需要使用OpenGL显示图形示例时,您确实需要诸如Bumblebee for Optimus系统之类的东西,否则,您在显示器上看不到任何东西或得到错误:
ERROR: Support for necessary OpenGL extensions missing.
运行CUDA程序时,需要安装CUDA工具包和nvidia驱动程序。如果打算编译程序,则还需要SDK。可以在http://developer.nvidia.com/cuda-downloads上找到安装程序,在使Optimus笔记本电脑出现故障之前,请阅读以下说明。
安装CUDA
Driver
我建议从Ubuntu的软件包管理器中安装nvidia驱动程序。如果安装Bumblebee,则无需担心驱动程序。否则,在安装后,如https://askubuntu.com/a/107746/6969所述禁用nvidia库。如果不这样做,您将失去3D加速并可能卡在低分辨率上。
Toolkit
基本上,您必须下载安装程序,使其可执行并运行。 -下载安装程序。在撰写本文时,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
当出现询问您在何处安装CUDA的安装消息时,只需按Enter接受默认的/usr/local/cuda
:
......................................
Enter install path (default /usr/local/cuda, '/cuda' will be appended):
安装之后,它将打印一些消息,建议将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
您可以根据需要跳过此步骤,但是稍后必须在运行程序时设置LD_LIBRARY_PATH=/usr/local/cuda/lib64:/usr/local/cuda/lib:$LD_LIBRARY_PATH
。
SDK
如果希望能够编译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
-
在大约271行之后,将
${RENDERCHECKGLLIB}
与${OPENGLLIB}
交换,如下所示:LIB += $(RENDERCHECKGLLIB) ${OPENGLLIB} $(PARAMGLLIB) ${LIB} -ldl -rdynamic
-
再行几(5)行,执行相同操作,但也删除
-lcuda
。 -
再进一步(7)行,与271行中的操作相同。
使用CUDA
CUDA不需要nvidia-driven 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
或者,如果您没有将CUDA添加到默认路径:
LD_LIBRARY_PATH=/usr/local/cuda/lib64:/usr/local/cuda/lib:$LD_LIBRARY_PATH optirun blender
次佳方法
这是完整的答案(基于Alex Falappa和Lekensteyn’s答案):
确实有可能使nVidia Optimus GPU在Ubuntu上运行CUDA。
CUDA不需要大黄蜂。 (有关Bumblebee的更多信息:Is a NVIDIA GeForce with Optimus Technology supported by Ubuntu?)
但是,当您需要使用OpenGL显示图形示例时,您确实需要诸如Bumblebee for Optimus系统之类的东西,否则,您在显示器上看不到任何东西或得到错误:
ERROR: Support for necessary OpenGL extensions missing.
如果您需要使用诸如Blender之类的graphics-intensive程序,Bumblebee当前是一个不错的选择。
如果您不想安装Bumblebee(即不需要OpenGL),请跳至安装CUDA。否则,请继续阅读。
安装大黄蜂
请遵循How well do laptops with Nvidia Optimus work?上的说明
这些目前由Bumblebee开发人员保留为up-to-date。
一旦安装了Bumblebee并重新启动,便可以使用optirun
程序选择启动程序时要使用的图形卡。例如:
optirun blender
要快速测试所有操作是否正常,请使用:
optirun glxspheres
如果一切正常,您将看到一个带有彩色旋转球的程序。
验证终端中的GL供应商字符串是否包含单词nvidia。如果仅运行glxspheres
,则会看到供应商字符串包含Intel卡。
运行CUDA程序时,需要安装CUDA工具包和nvidia驱动程序。如果打算编译程序,则还需要SDK。可以在http://developer.nvidia.com/cuda-downloads上找到安装程序,在使Optimus笔记本电脑出现故障之前,请阅读以下说明。
安装CUDA
Driver
我建议从Ubuntu的软件包管理器中安装nvidia驱动程序。如果安装Bumblebee,则无需担心驱动程序。否则,在安装后,如https://askubuntu.com/a/107746/6969所述禁用nvidia库。如果不这样做,您将失去3D加速度,并可能卡在低分辨率上。
Toolkit
基本上,您必须下载安装程序,使其可执行并运行。 -下载安装程序。截至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
当出现询问您在何处安装CUDA的安装消息时,只需按Enter接受默认的/usr/local/cuda
:
......................................
Enter install path (default /usr/local/cuda, '/cuda' will be appended):
安装之后,它将打印一些消息,建议将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
如果需要,可以跳过此步骤,但是随后必须在运行程序时设置LD_LIBRARY_PATH=/usr/local/cuda/lib64:/usr/local/cuda/lib:$LD_LIBRARY_PATH
。
SDK
如果希望能够编译CUDA应用程序,则可以按照上述类似的方式安装SDK。下载并使其可执行并运行(不是root用户,例如没有sudo
!)
使用CUDA
CUDA不需要nvidia-driven 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
或者,如果您没有将CUDA添加到默认路径:
LD_LIBRARY_PATH=/usr/local/cuda/lib64:/usr/local/cuda/lib:$LD_LIBRARY_PATH optirun blender
安装Blender构建
(使用预编译的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.
如果要使用Blender的GPU渲染功能,则可能需要使用带有预编译CUDA内核的Blender构建。 Blender.org的构建都具有预编译的CUDA内核。 ppa:cheleb /blender-svn构建(more information at this question)不会。
要安装官方的Blender构建,只需遵循this answer中列出的说明即可。
如果已将Blender安装到/usr/lib/blender
,则应该能够从终端运行Blender并通过以下方式使用GPU渲染:
optirun '/usr/lib/blender/blender'