赞
踩
nvidia显卡对linux系统一直不是很友好。在众多的桌面发行版上,安装nvidia独立显卡驱动后总是出现各种各样的与集成显卡不兼容的问题。为此,查了很多解决方案,都不是很理想。
有一个需求是这样的:为了减少桌面对nvidia独立显卡性能的消耗,我们想使用集成显卡做显示,独立显卡只用来做gpu的加速处理。但是在ubuntu系统上安装了独显驱动后,boise上设置以集成显卡作为主要显示硬件时(boise中显示输出选项中选择IGFX),就会出现界面循环登陆的现象(该问题在网上给到的方案大多是重新安装显卡驱动,boise设置独显为主要显示设备)。
为了这个需求,我查阅的很多解决方案,都没有成功。后来自己将ubuntu系统换成了Lubuntu后,在程序中做了些改动可以得到一个还不算完美的解决方案:
首先Lubuntu是相对于Ubuntu更轻量更稳定和更快速的系统,使用的是xfce桌面系统,性能更好。其次,我在使用Lubuntu后没有出现循环登陆的现象,这个应该和桌面系统有关系,具体原因不详。但其算是解决了循环登陆界面的一个方案吧。接下来,我们需要解决的是怎样在集成显卡作为显示设备的情况下,让独显可以作为gpu加速处理主要设备(使用cuda进行加速计算)呢。
在我们安装完cuda后,为了验证cuda是否可以正常的使用,会编译一下官方给的示例代码,并做运行验证。这里我编译了一下
NVIDIA_CUDA-9.1_Samples\NVIDIA_CUDA-9.1_Samples\0_Simple\asyncAPI目录下的程序,运行成功,并显示了独显设备的相关信息。后来从这个示例中我们可以证明,使用集成显卡做显示,独显做cuda计算时可行的,至少这个demo程序时运行成功的。所以我就查看了下demo程序的源代码:
int devID;
cudaDeviceProp deviceProps;
printf("[%s] - Starting...\n", argv[0]);
// This will pick the best possible CUDA capable device
devID = findCudaDevice(argc, (const char **)argv);
// get device name
checkCudaErrors(cudaGetDeviceProperties(&deviceProps, devID));
printf("CUDA device [%s]\n", deviceProps.name);
上面是它的一段示例代码,发现该程序使用的是findCudaDevice去寻找显卡设备的,并且函数的参数与主程序main函数的参数相同。说面我们可以通过该接口可以找到显卡设备,并让独显专门针对该应用程序做gpu加速计算。但是我在查找这个api接口的时候,发现它并不是cuda内部提供的接口,而是sample示例中提供的。它的引用头文件是:
#include <helper_cuda.h>
通过find命令查找到该头文件的位置在cuda-9.1/samples/common/inc/下,所以在我们的工程中需要引用这个目录,才能编译通过。
通过以上,对显卡设备的初始化可以在自己的程序中使用cuda进行加速,但是如果你的gui使用的是qt的话,执行程序后,终端会显示如下的错误信息:
Xlib: extension “GLX” missing on display “:0.0”.
然后你如果使用qtcreater作为ide编译程序的话,直接输入qtcreater是无法打开的,还是会报如上的信息。需要使用
./qtcreator -noload Welcome
来进行启动才可以。
网上有说使用大黄蜂bumblebee软件对显示设备的使用进行控制,这个需要装一堆软件,所以没有使用过,不过需要的人可以尝试下。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。