页次: 1
想具体问一下这俩东西以及nvidia模块的具体功能。
目前据我的理解:
1、加载了 nvidia 模块,程序才能使用 N 卡。
2、bbswitch 控制独立显卡的开关。就算没有加载 nvidia,如果不用 bbswitch 关闭独显,独显还是开着的。另一方面,只有用 bbswitch 打开显卡,才能加载 nvidia 模块使用独显:
$ echo "ON" > /proc/acpi/bbswitch
$ modprobe nvidia
$ echo "OFF" > /proc/acpi/bbswitch
$ dmesg | tail -n 1
[24316.529317] pci 0000:01:00.0: Refused to change power state, currently in D0
# nvidia 加载时,不能关闭显卡
$ modprobe -r nvidia
$ echo "OFF" > /proc/acpi/bbswitch
$ dmesg | tail -n 1
[24519.589981] bbswitch: disabling discrete graphics
$ modprobe nvidia
modprobe: ERROR: could not insert 'nvidia': No such device
# bbswitch 关闭显卡时,不能加载 nvidia
3、至于 bumblebee,是用户端的工具,包含守护进程和optirun工具,就是包装一下模块的加载(以及使用 virtualgl 复制图形什么的先忽略……),让用户用起来舒服点。用户调用 optirun 时,bumblebee 就会用 bbswitch 打开显卡并启用 nvidia 模块;调用完 bumblebee 再卸掉 nvidia 模块并用 bbswitch 关闭显卡。
至于和 Windows 的比较,似乎 Linux 下的自动化还是有些问题…… 比方说,Windows 下执行使用 OpenCL/CUDA 计算的程序(比如 BOINC 的 GPU 项目)时,就算不特别设置使用独显,也能启用独显计算。但 Linux 下就必须自己调 optirun 或是加载好模块,然后程序才能用显卡……
上面的理解有什么问题么?主要是我想鼓捣一下 BOINC 的独显计算的问题,毕竟一直开着独显也不是个事儿。
Site: CVHC.CC Twitter: @cuihaoleo Org: LUG@USTC
AD: ~欢迎参与志愿计算~
离线
bbb的wiki我记得说过吧,它其实就是一个工具集而已,和windows的原生驱动完全不能比啊,一个用户空间,一个内核空间。
最近编辑记录 枫叶饭团 (2014-01-19 12:15:26)
离线
今天修改了某个 CUDA 程序,以一种极其丑陋的方式,让它成功开启显卡并进行计算了……
void when_exit (void)
{
system("call_optirun OFF");
}
int main(int argc, char *argv[])
{
system("call_optirun ON");
atexit(when_exit);
......
然后call_optirun是个PATH下的脚本,功能是用optirun启动一个啥都不干的进程,或者关闭这个进程…… 就相当于打开显卡。
用户空间的工具,程序调用起来简直惨不忍睹……
Site: CVHC.CC Twitter: @cuihaoleo Org: LUG@USTC
AD: ~欢迎参与志愿计算~
离线
可以用 constructor 等做一个 .so,用 LD_PRELOAD 加载的喵~
离线
哦,这个 LD_PRELOAD 好像很有意思诶。
找找 cuda 的接口去……
Site: CVHC.CC Twitter: @cuihaoleo Org: LUG@USTC
AD: ~欢迎参与志愿计算~
离线
哦,这个 LD_PRELOAD 好像很有意思诶。
找找 cuda 的接口去……
启动和结束时跑条命令而已,不用找 cuda 的接口啦。
另外,推荐用 fork + execlp 代替 system
离线
bumblebee 还有个我觉得比较坑的地方。
若因为种种原因,optirun 之后没办法卸载模块关闭显卡,那显卡就那样开着了……
好歹也有个守护进程,就不能自己检查一下,没有占用就自己给关了。
Site: CVHC.CC Twitter: @cuihaoleo Org: LUG@USTC
AD: ~欢迎参与志愿计算~
离线
cuihao 说:哦,这个 LD_PRELOAD 好像很有意思诶。
找找 cuda 的接口去……启动和结束时跑条命令而已,不用找 cuda 的接口啦。
另外,推荐用 fork + execlp 代替 system
嗯,查一查~
现在用system只是应付一下…… 自己对UNIX编程不太了解,反正就system最好用。
毕竟system调optirun也挺丑的。想想还是自己modprobe、echo开关显卡吧。
Site: CVHC.CC Twitter: @cuihaoleo Org: LUG@USTC
AD: ~欢迎参与志愿计算~
离线
页次: 1