ubuntu下集显做显示nvidia独显做计算的一种解决方案

15 篇文章 5 订阅

  nvidia显卡对linux系统一直不是很友好。在众多的桌面发行版上,安装nvidia独立显卡驱动后总是出现各种各样的与集成显卡不兼容的问题。为此,查了很多解决方案,都不是很理想。
  有一个需求是这样的:为了减少桌面对nvidia独立显卡性能的消耗,我们想使用集成显卡做显示,独立显卡只用来做gpu的加速处理。但是在ubuntu系统上安装了独显驱动后,boise上设置以集成显卡作为主要显示硬件时(boise中显示输出选项中选择IGFX),就会出现界面循环登陆的现象(该问题在网上给到的方案大多是重新安装显卡驱动,boise设置独显为主要显示设备)。
  为了这个需求,我查阅的很多解决方案,都没有成功。后来自己将ubuntu系统换成了Lubuntu后,在程序中做了些改动可以得到一个还不算完美的解决方案:

1. 切换Ubuntu16.04到Lubuntu16.04

  首先Lubuntu是相对于Ubuntu更轻量更稳定和更快速的系统,使用的是xfce桌面系统,性能更好。其次,我在使用Lubuntu后没有出现循环登陆的现象,这个应该和桌面系统有关系,具体原因不详。但其算是解决了循环登陆界面的一个方案吧。接下来,我们需要解决的是怎样在集成显卡作为显示设备的情况下,让独显可以作为gpu加速处理主要设备(使用cuda进行加速计算)呢。

2. 安装cuda,运行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/下,所以在我们的工程中需要引用这个目录,才能编译通过。

3. 不完美的地方

  通过以上,对显卡设备的初始化可以在自己的程序中使用cuda进行加速,但是如果你的gui使用的是qt的话,执行程序后,终端会显示如下的错误信息:

Xlib: extension “GLX” missing on display “:0.0”.

  然后你如果使用qtcreater作为ide编译程序的话,直接输入qtcreater是无法打开的,还是会报如上的信息。需要使用

./qtcreator -noload Welcome

来进行启动才可以。

4. 其他解决方案

  网上有说使用大黄蜂bumblebee软件对显示设备的使用进行控制,这个需要装一堆软件,所以没有使用过,不过需要的人可以尝试下。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

非正经程序员

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值