介绍
我正在尝试让 CUDA 在我的混合显卡笔记本电脑上运行。我使用的是 (l)ubuntu 15.04。
目前,我已按照在线指南中的一些步骤操作,我将在下面进行解释,并且可以optirun glxspheres64
顺利运行。但是,运行时optirun ./deviceQuery
出现以下错误:
/usr/bin/vglrun: 246: exec: ./deviceQuery: Permission denied
网上似乎没有关于此事的任何信息。
细节
我遵循的指南是这里。我没有严格遵循所有步骤,因为这个已经很旧了,而且 Nvidia 已经改变了他们发送文件的格式.run
。
我做了以下事情:(这完全是我的history
命令。)
15 sudo apt-add-repository ppa:bumblebee/stable
16 sudo apt-add-repository ppa:ubuntu-x-swat/x-updates
17 sudo apt-get update
18 sudo apt-get install bumblebee
19 sudo apt-get install bumblebee bumblebee-nvidia
20 sudo reboot
然后登录到tty1,停止x服务器并init 3。
21 cd Downloads/
22 chmod +x cuda_7.5.18_linux.run
23 sudo ./cuda_7.5.18_linux.run
使用所有默认选项安装运行包,还安装图形驱动程序版本 352。
然后设置 PATH 变量。
25 export PATH=/usr/local/bin:$PATH
26 export LD_LIBRARY_PATH=/usr/local/cuda/lib64:$LD_LIBRARY_PATH
27 sudo ldconfig
我跳过了接下来的静态链接步骤。编译示例代码时,我没有收到任何链接器错误(或者至少我认为没有),因此我推测这不是必需的。我也没有在网上的任何其他指南中看到此步骤。也许这就是我出错的地方?
然后一些东西显然需要 OpenGL,所以:
28 sudo apt-get install freeglut3-dev build-essential libx11-dev libxmu-dev libxi-dev libgl1-mesa-glx libglu1-mesa libglu1-mesa-dev
编译示例:
30 cd NVIDIA_CUDA-7.5_Samples/
31 make
然后我尝试运行./deviceQuery
位于 Utilities 目录中的。我得到了一个我以前见过的关于bumblebeed
无法运行的错误。
所以:
34 sudo vim /etc/bumblebee/bumblebee.conf
Driver=
将(原为空白)行更改为Driver=nvidia
,并将 行KernelDriver=nvidia-current
更改为KernelDriver=nvidia
。
此信息可用这里,请参阅(目前)该问题的第二个答案。
它仍然不起作用,所以我尝试按照上面链接问题的第一个答案中给出的信息来安装内核头文件:
48 sudo apt-get install linux-headers-generic
49 sudo reboot
如果我做:
54 sudo service bumblebeed status
我现在得到:
● bumblebeed.service - Bumblebee C Daemon
Loaded: loaded (/lib/systemd/system/bumblebeed.service; enabled; vendor preset: enabled)
Active: active (running) since Sun 2015-10-11 13:15:07 BST; 20min ago
Main PID: 1502 (bumblebeed)
CGroup: /system.slice/bumblebeed.service
└─1502 /usr/sbin/bumblebeed
Oct 11 13:16:20 P151EMx bumblebeed[1502]: [ 163.019954] [WARN][XORG]....
Oct 11 13:16:20 P151EMx bumblebeed[1502]: [ 163.019987] [WARN][XORG]....
Oct 11 13:16:20 P151EMx bumblebeed[1502]: [ 163.020055] [WARN][XORG]....
Oct 11 13:17:11 P151EMx bumblebeed[1502]: rmmod: ERROR: Module nvidia...d
Oct 11 13:17:11 P151EMx bumblebeed[1502]: modprobe: FATAL: Error runn...a
Oct 11 13:17:22 P151EMx bumblebeed[1502]: [ 225.439546] [WARN][XORG]....
Oct 11 13:17:22 P151EMx bumblebeed[1502]: [ 225.439578] [WARN][XORG]....
Oct 11 13:17:22 P151EMx bumblebeed[1502]: [ 225.439606] [WARN][XORG]....
Oct 11 13:17:23 P151EMx bumblebeed[1502]: rmmod: ERROR: Module nvidia...d
Oct 11 13:17:23 P151EMx bumblebeed[1502]: modprobe: FATAL: Error runn...a
Hint: Some lines were ellipsized, use -l to show in full.
但看起来我这里仍然有一些问题……它现在处于“活动”状态,而之前它无法启动,但仍然不是所有东西都正常工作。出于某种原因,我无法获得-l
工作选项来提供更多信息。
当我运行时optirun ./deviceQuery
出现错误:
/usr/bin/vglrun: 246: exec: ./deviceQuery: Permission denied
我现在应该怎么做?
更新:
编辑:对于任何关注此内容的人来说,不执行此步骤可能是一个好主意。也许尝试在 CUDA 之后安装驱动程序以避免此步骤?安装驱动程序版本 352 然后通过执行以下操作恢复到 304 似乎有点没有必要:
我注意到,在链接的问题中,该命令sudo apt-get install -reinstall nvidia-current
是在安装内核头文件后附加的。
我运行了这个命令,我认为我的驱动程序已经回到了 304 版本。重新启动后,现在
sudo service bumblebeed status
输出结果如下:
● bumblebeed.service - Bumblebee C Daemon
Loaded: loaded (/lib/systemd/system/bumblebeed.service; enabled; vendor preset: enabled)
Active: active (running) since Sun 2015-10-11 13:46:53 BST; 38s ago
Main PID: 659 (bumblebeed)
CGroup: /system.slice/bumblebeed.service
└─659 /usr/sbin/bumblebeed
Oct 11 13:46:53 edward-P151EMx systemd[1]: Started Bumblebee C Daemon.
Oct 11 13:46:53 edward-P151EMx systemd[1]: Starting Bumblebee C Daemon...
Oct 11 13:46:53 edward-P151EMx bumblebeed[659]: [ 17.073332] [INFO]/usr/sb...d
Hint: Some lines were ellipsized, use -l to show in full.
看来问题已经解决了。但是仍然无法运行./deviceQuery
,错误相同:
sudo optirun ./deviceQuery
/usr/bin/vglrun: 246: exec: ./deviceQuery: Permission denied
请帮忙。L@l
顺便说一下,glxspheres 仍然有效:
optirun glxspheres64
获得~270 FPS?
答案1
我再次重新启动了计算机,哇哦,它又正常工作了。
optirun ./deviceQuery
返回
./deviceQuery Starting...
CUDA Device Query (Runtime API) version (CUDART static linking)
Detected 1 CUDA Capable device(s)
Device 0: "GeForce GTX 670MX"
CUDA Driver Version / Runtime Version 7.5 / 7.5
CUDA Capability Major/Minor version number: 3.0
Total amount of global memory: 3072 MBytes (3221028864 bytes)
( 5) Multiprocessors, (192) CUDA Cores/MP: 960 CUDA Cores
GPU Max Clock rate: 601 MHz (0.60 GHz)
Memory Clock rate: 1400 Mhz
Memory Bus Width: 192-bit
L2 Cache Size: 393216 bytes
Maximum Texture Dimension Size (x,y,z) 1D=(65536), 2D=(65536, 65536), 3D=(4096, 4096, 4096)
Maximum Layered 1D Texture Size, (num) layers 1D=(16384), 2048 layers
Maximum Layered 2D Texture Size, (num) layers 2D=(16384, 16384), 2048 layers
Total amount of constant memory: 65536 bytes
Total amount of shared memory per block: 49152 bytes
Total number of registers available per block: 65536
Warp size: 32
Maximum number of threads per multiprocessor: 2048
Maximum number of threads per block: 1024
Max dimension size of a thread block (x,y,z): (1024, 1024, 64)
Max dimension size of a grid size (x,y,z): (2147483647, 65535, 65535)
Maximum memory pitch: 2147483647 bytes
Texture alignment: 512 bytes
Concurrent copy and kernel execution: Yes with 1 copy engine(s)
Run time limit on kernels: Yes
Integrated GPU sharing Host Memory: No
Support host page-locked memory mapping: Yes
Alignment requirement for Surfaces: Yes
Device has ECC support: Disabled
Device supports Unified Addressing (UVA): Yes
Device PCI Domain ID / Bus ID / location ID: 0 / 1 / 0
Compute Mode:
< Default (multiple host threads can use ::cudaSetDevice() with device simultaneously) >
deviceQuery, CUDA Driver = CUDART, CUDA Driver Version = 7.5, CUDA Runtime Version = 7.5, NumDevs = 1, Device0 = GeForce GTX 670MX
Result = PASS
顺便说一句,我怀疑我尝试的最后步骤实际上并不是必需的,如果按照上述问题中的信息,请尝试不是执行最后几步:
- 重新安装驱动程序。我认为这不是必要的。这也很烦人,因为它会将您恢复到更旧版本的驱动程序。我很想知道是否有人按照问题中的信息无需执行此步骤即可使 CUDA 正常工作。
我认为问题中的信息对于任何试图安装的人(包括我自己)都非常有用:
- CUDA 7.5(或 CUDA 7)
在 Linux 上,特别是与 ubuntu 相关的发行版上;
- ubuntu、xubuntu、lubuntu、ubuntu mate、kubuntu、
- 也许还有 linux mint 17、linux mint 17.1 和 linux mint 17.2 [但是我之前在尝试安装 CUDA 时遇到了 linux mint 17 和 linux mint 17.2 的问题]
- 也许是 Debian 发行版之一(我认为我们现在使用的是 Debian 8,但也可能使用 Debian 7 或 Debain 6)
我打算用所有这些发行版来测试这个答案,因为网络上很多用于为 Linux 设置 CUDA 的指南要么适用于过时的 Linux 版本,要么适用于过时的 CUDA 版本。
我需要花费一些时间来做这件事,但我会尽快完成。
此外,如果有人愿意做出贡献,我可能会将此答案更改为社区维基。
请继续关注更新。如有任何意见,请在下面评论让我知道。