首先:我已经在 ubuntu 15.10 上为我愚蠢的 optimus 笔记本电脑苦苦挣扎了一周。所以,不要仅仅通过谷歌搜索一些关键词而“可能重复”我,而不要阅读整个内容和超链接。
我的笔记本电脑有 nvidia geforce 740M (optimus),安装了 ubuntu 15.10。我按照以下说明安装了带有 nvidia-355 驱动程序的 bumblebee这链接。现在我可以使用 optirun 完美地在显卡之间切换:
$ optirun glxgears
6763 frames in 5.0 seconds = 1352.335 FPS
7156 frames in 5.0 seconds = 1431.125 FPS
7152 frames in 5.0 seconds = 1430.255 FPS
并且可以检查是否正在使用 nvidia 显卡:
cat /proc/acpi/bbswitch
0000:07:00.0 ON
关闭 glxgears 后将更改为:
cat /proc/acpi/bbswitch
0000:07:00.0 OFF
但是,我确实需要在 ubuntu 中使用 CUDA,这似乎是不可能的。“理论上”我应该能够在“make”之后使用 optirun 运行 cuda 示例。但结果是(与使用 sudo 没有区别):
~/NVIDIA_CUDA-7.5_Samples/1_Utilities/deviceQuery$ optirun ./deviceQuery
./deviceQuery Starting...
CUDA Device Query (Runtime API) version (CUDART static linking)
cudaGetDeviceCount returned 30
-> unknown error
Result = FAIL
所以我再次搜索并找到了帖子#4这适用于 Ubuntu 12.04 的页面。其中建议使用:
$ sudo update-alternatives --config x86_64-linux-gnu_gl_conf
There are 3 choices for the alternative x86_64-linux-gnu_gl_conf (providing /etc/ld.so.conf.d/x86_64-linux-gnu_GL.conf).
Selection Path Priority Status
------------------------------------------------------------
0 /usr/lib/nvidia-355/ld.so.conf 8604 auto mode
1 /usr/lib/nvidia-355-prime/ld.so.conf 8603 manual mode
2 /usr/lib/nvidia-355/ld.so.conf 8604 manual mode
* 3 /usr/lib/x86_64-linux-gnu/mesa/ld.so.conf 500 manual mode
Press <enter> to keep the current choice[*], or type selection number:
vadammt 建议选择 nvidia-355-prime(选项 1)。我选择了它,我将能够使用
optirun ./deviceQuery
没问题。但是,运行 deviceQuery 后,bbswitch 将不再自动关闭 nvidia:
$ cat /proc/acpi/bbswitch
0000:07:00.0 ON
我查看了 bumblebee 文档,似乎“nvidia-355-prime”实际上是 nvidia-prime,并且该命令用于从 bumblebee 切换到 nvidia-prime。所以现在的主要问题是:
1)选择“nvidia-355-prime”是否会切换到nvidia-prime?
2) 如果是,那么有没有办法将 CUDA 和 Bumblebee 真正地结合在一起(而不依赖于 nvidia-prime)?只需直接使用“optirun”,而不会出现我提到的未知错误“cudaGetDeviceCount 返回 30”?
3)如果没有,是否可以创建一个脚本来自动执行 bumblebee 和 nvidia prime 之间的切换过程并为其分配命令?
4) 还有其他意见/建议/推荐/忠告/提案吗?
5)谢谢?
编辑:更改为 nvidia-355-prime 也不再起作用 :(