Linux系统中Qt应用程序确保使用集成显卡进行图形渲染

news2024/11/14 19:59:26

背景:有一个Qt开发的应用程序,使用了Qt的OpenGL模块来渲染QImage加载的图片,当应用程序切换到图片渲染界面时,系统CPU占用率立马到了100%多,容易造成程序卡顿,可设备是自带集成显卡的,期望效果是用集成显卡进行图形渲染,以解决软件运行卡顿的问题。

使用QOpenGLWidget(调用GPU)渲染QImage加载的图片

目录

  • 1.排查问题
    • 1.1 查看显示设备信息
    • 1.2 查看设备显卡信息
  • 2.测试Demo
  • 3.解决方法
    • 3.1 确认设备带集显且驱动安装正确
    • 3.2 修改 xorg.conf 配置文件
    • 3.3 升级系统内核

1.排查问题

1.1 查看显示设备信息

lshw -C display

指令"lshw -C display"是用于在Linux系统中查看显示设备信息的命令。具体解释如下:
"lshw"是"list hardware"的缩写,用于列出系统中的硬件信息。
“-C display"是指定了要列出的硬件类别为"display”,即显示设备。
因此,执行该指令后,系统会列出所有显示设备的详细信息,包括显示器、显卡等相关硬件信息

如:

lshw -C display
  *-display               
       description: VGA compatible controller
       product: Intel Corporation
       vendor: Intel Corporation
       physical id: 2
       bus info: pci@0000:00:02.0
       version: 01
       width: 64 bits
       clock: 33MHz
       capabilities: pciexpress msi pm vga_controller bus_master cap_list rom
       configuration: driver=i915 latency=0
       resources: irq:149 memory:80000000-80ffffff memory:70000000-7fffffff ioport:3000(size=64) memory:c0000-dffff

这些信息表示计算机的显示控制器是由英特尔公司制造的,是VGA兼容控制器。它使用PCI总线连接,具有64位宽度和33MHz时钟。它支持PCI Express、MSI、电源管理和VGA控制器功能,并且是总线主控设备。驱动程序为i915,资源包括内存地址、IO端口和ROM。
根据上面的信息,这个显示控制器是由英特尔公司制造的,因此它是集成显卡,而不是独立显卡。
driver=i915 表明系统正在使用 i915 驱动程序来管理 Intel 集成显卡

1.2 查看设备显卡信息

lspci | grep -i vga
00:02.0 VGA compatible controller: Intel Corporation Device 4555 (rev 01)

这个命令会列出系统中所有的显卡设备,如果设备的集成显卡被正确识别,应该能在输出中看到相关的信息,比如本设备的集成显卡型号是Intel Corporation

lspci -k | grep -A 2 -i "VGA"
00:02.0 VGA compatible controller: Intel Corporation Device 4555 (rev 01)
	DeviceName: Onboard - Video
	Subsystem: Intel Corporation Device 7270

上面信息表示当前系统中存在一个由Intel Corporation制造的VGA兼容控制器,设备型号为4555,版本号为01。"DeviceName"和"Subsystem"是设备的附加信息。
这个输出表明当前系统已检测到并识别了集成显卡,并且驱动程序已加载。因此,可以初步判断驱动程序已正确安装。

2.测试Demo

  • 终端运行:glxgears
    在这里插入图片描述

此时再打开一个终端,监控CPU的使用情况:top -Hw
在这里插入图片描述
会发现有个应用程序 llvmpipe 的占用率会立马上升,那就说明该设备图形渲染使用的的CPU而不是显卡。

  • 查看OpenGL渲染器信息:glxinfo | grep "OpenGL renderer"
    PS:如果输入glxinfo | grep "OpenGL renderer"指令后报错:
Error: unable to open display 

需要输入如下指令:

export DISPLAY=:0
glxinfo | grep "OpenGL renderer"

OpenGL renderer string: Gallium 0.4 on llvmpipe (LLVM 4.0, 128 bits)

上面信息表示当前系统当前使用的 OpenGL 渲染器Gallium 0.4 on llvmpipe。这是一个通用的软件渲染器,它不依赖于显卡硬件,而是使用 CPU 来进行图形渲染

3.解决方法

3.1 确认设备带集显且驱动安装正确

如果系统本来应该使用硬件加速的 OpenGL 渲染器,但却显示使用了软件渲染器,那么可能是由于显卡驱动没有正确安装或配置所致。可以尝试更新显卡驱动或重新安装显卡驱动,以解决这个问题。
通过如下方法确认:

lspci -k | grep -A 2 -i "VGA"

3.2 修改 xorg.conf 配置文件

  • 1.首先确认/etc/X11/xorg.conf文件存在(PS:如果不存在可以新建一个,按照本方法进行尝试,如果修改后黑屏或者无效,就把该文件删除进行恢复
  • 2.xorg.conf文件解读
Section "Device"
	Identifier "Intel"
	Driver "intel"
#	Option "AccelMethod" "uxa"
EndSection

"AccelMethod" 是 Xorg 配置文件中用于指定 2D 加速方法的选项。在 Intel 集成显卡的配置中,通常会使用 “uxa” 和 “sna” 这两个选项。
"uxa":这代表 “Unified Acceleration Architecture”,是一种较早期的 2D 加速方法。它使用一个统一的架构来处理图形渲染,能够提供一定程度的加速效果。“uxa” 在旧的 Intel 集成显卡上表现良好,但在一些较新的硬件上可能表现不佳。
"sna":这代表 “Sandybridge’s New Acceleration”,是一种更新的 2D 加速方法,专门针对 Intel Sandy Bridge 架构的集成显卡进行了优化。“sna” 采用了一些新的技术和优化,可以在支持的硬件上提供更好的性能和稳定性。

  • 3.修改xorg.conf文件,修改后如下:
Section "Device"
	Identifier "Intel"
	Driver "intel"
	Option "AccelMethod" "sna"
EndSection

在这个修改后的配置中,我们取消了对 “AccelMethod” 选项的注释,并将其设置为 “sna”。这将指示系统使用 Intel 集成显卡的 “sna” 加速方法进行图形渲染。
完成修改后,可以保存配置文件并重新启动 X 服务器,或者注销并重新登录用户,以使更改生效。请确保在进行任何配置更改之前备份重要数据,以避免不必要的问题可以进行恢复。

  • 4.修改完成后,重启设备或者重启桌面管理程序
    如:sudo service lightdm restart

3.3 升级系统内核

查看内核:uname -r

uname -r
5.15.137-rt71

PS:我一开始使用的是Xubuntu16.04的系统,内核版本是4.14-rt,后来升级到了5.15.137-rt71还是不行,于是索性直接升到了Xubuntu22.04系统,内核版本是6.2.0-36-generic,再次使用指令查看,发现解决了。。。

glxinfo | grep "OpenGL version"
OpenGL version string: 3.0 Mesa 17.0.7

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1228851.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

7 Redis的PipeLine

PipeLine的作用是批量执行命令 redis的性能瓶颈基本上是网络 import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import redis.clients.jedis.Jedis; import redis.clients.jedis.JedisPool; import redis.…

牛客::栈的压入、弹出序列

栈的压入、弹出序列 题目 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列&…

ShardingSphere-JDBC 之数据分片详细讲解

文章目录 单一节点存储问题数据分片垂直分片水平分片 ShardingSphere-JDBC 数据分片核心概念表相关概念数据节点分片行表达式分布式主键 ShardingSphere-JDBC 数据分片原理ShardingSphere-JDBC 数据分片实现示例1、数据库表创建2、引入依赖3、配置参数4、代码示例 ShardingSphe…

FPGA实现平衡小车(文末开源!!)

FPGA平衡小车 一. 硬件介绍 底板资源: TB6612电机驱动芯片 * 2 MPU6050陀螺仪 WS2812 RGB彩色灯 * 4 红外接收头 ESP-01S WIFI 核心板 微相 A7_Lite Artix-7 FPGA开发板 电机采用的是平衡小车之家的MG310(GMR编码器)电机。底板上有两个TB6612芯片,可以驱动…

Python运维监控系统之架构设计

说起Python这门编程语言的作用,可以列举很多方面,其实每一门流行的编程语言都可以列举很多方面,但是要说起Python的主要领域,莫过于运维监控方面,在这方面有大量优秀的开源运维系统。 虽然有很多优秀的开源运维监控系统…

基于springboot实现智能热度分析和自媒体推送平台系统项目【项目源码】

基于springboot实现自媒体社区平台系统演示 系统开发平台 在该自媒体分享网站中,Eclipse能给用户提供更多的方便,其特点一是方便学习,方便快捷;二是有非常大的信息储存量,主要功能是用在对数据库中查询和编程。其功能…

《微信小程序开发从入门到实战》学习十九

3.3 开发创建投票页面 3.3.7 wx:for列表渲染 接下来为创建的投票页面添加一个“添加选项”的功能。需要用户输入文字,应该使用input组件。头投票的数量是不确定的,面对不确定数量的组件的情况时,可以使用wx:for属性对组件进行列表渲染。 使…

windows pgsql 数据库 数据目录更改

一.先停止postgres服务 cmd命令 services.msc找到服务停止 二.修改注册表 cmd命令 regedit找到路径 \HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\postgresql-x64-13 将“-D”后的目录名修改为新的数据目录位置即可,如果目录路径中含有…

【C++】泛型编程 ⑦ ( 类模板常用用法 | 类模板声明 | 类模板调用 | 类模板作为函数参数 )

文章目录 一、类模板基础用法1、类模板声明定义2、类模板使用3、类模板做函数参数 二、完整代码示例1、代码示例2、执行结果 一、类模板基础用法 1、类模板声明定义 上一篇博客中 , 【C】泛型编程 ⑥ ( 类模板 | 类模板语法 | 代码示例 ) 讲解了模板类的基础语法 , 模板类声明如…

23 - 如何优化JVM内存分配?

JVM 调优是一个系统而又复杂的过程,但我们知道,在大多数情况下,我们基本不用去调整 JVM 内存分配,因为一些初始化的参数已经可以保证应用服务正常稳定地工作了。 但所有的调优都是有目标性的,JVM 内存分配调优也一样。…

计算机网络的标准化工作及相关组织

一、国际化组织 计算机网络的标准化工作由一些主要的组织来进行管理和推动。以下是几个主要的计算机网络标准化的国际组织及其相关的标准: 1. 国际标准化组织(ISO):国际标准化组织负责制定各种行业的标准,包括计算机…

Linux性能分析——TOP命令详解

我的圈子: 高级工程师聚集地 我是董哥,高级嵌入式软件开发工程师,从事嵌入式Linux驱动开发和系统开发,曾就职于世界500强公司! 创作理念:专注分享高质量嵌入式文章,让大家读有所得! …

网络割接用VRRP替换HSRP

如图3-11所示,C6500作为核心层设备上行连接出口路由器NE40E-X3,下行连接接入层设备CE6800。C6500上配置HSRP实现冗余备份网关,同时在二层网络部署MSTP破除环路。 总体思路 HSRP为CISCO私有协议,CE系列交换机(以CE1280…

基于go标准分层架构项目设计实现

基于go标准分层架构项目设计实现 缘起 个人博客网址 最近主要看了两方面知识,一方面是技术相关的,如何设计一个比较好的后端架构项目代码;一方面是非技术相关的,如何写一篇好的技术文章,能够让他人读懂并有收获。因…

C++ 形参传值和传指针的误解

#include <stdio.h>void swap(int *x, int *y);main(){ int a 5, b 9;int *pp &a;int *kk &b;swap(pp, kk);printf("a%d\nb%d\n", *pp, *kk);return 0; } void swap(int *x, int *y) {int *t;t x;x y;y t; } 会发现&#xff0c;输出结果并没有…

iptables详解:常用模块的基本使用

目录 tcp扩展模块 multiport扩展模块 iprange扩展模块 connlimit模块 limit扩展模块 udp扩展模块 icmp扩展模块 state扩展模块 限制每分钟接收10个ICMP数据报文 允许10个数据报文快速通过&#xff0c;然后限制每分钟接收1个个ICMP数据报文 限制网络传输的带宽不可以…

VMware——WindowServer2012R2环境mysql5.7.14解压版安装主从复制(图解版)

目录 一、服务器信息二、192.168.132.33主服务器上安装mysql&#xff08;主&#xff09;2.1、环境变量配置2.2、安装2.2.1、修改配置文件内容2.2.2、初始化mysql并指定超级用户密码2.2.3、安装mysql服务2.2.4、启动mysql服务2.2.5、登录用户管理及密码修改2.2.6、开启远程访问 …

【论文复现】QuestEval:《QuestEval: Summarization Asks for Fact-based Evaluation》

以下是复现论文《QuestEval: Summarization Asks for Fact-based Evaluation》&#xff08;NAACL 2021&#xff09;代码https://github.com/ThomasScialom/QuestEval/的流程记录&#xff1a; 在服务器上conda创建虚拟环境questeval&#xff08;python版本于readme保持一致&…

Open AI开发者大会:AI“科技春晚”

ChatGPT的亮相即将满一年之时&#xff0c;OpenAI举行了自己的首次开发者大会。OpenAI首席执行官Sam Altman宣布推出最新的大模型GPT-4 Turbo。正如“Turbo”一词的中文含义“涡轮增压器”一样&#xff0c;本次发布会上&#xff0c;OpenAI的这款最新大模型在长文本、知识库、多模…

【计算思维】蓝桥杯STEMA 科技素养考试真题及解析 3

1、下图中&#xff0c;乐乐家的位置用数对&#xff08;4,3&#xff09;表示&#xff0c;学校在乐乐家西南方向。下列选项中&#xff0c;学校的位置不可能是 A、&#xff08;5,4&#xff09; B、&#xff08;2,2&#xff09; C、&#xff08;2,1&#xff09; D、&#xff…