RK3568 GPU介绍及使用

一、RK3568简介

  • RK3568四核64位Cortex-A55 处理器,采用全新ARM v8.2-A架构,主频最高可达2.0GHz,效能有大幅提升;采用22nm先进工艺,具有低功耗高性能的特点
  • RK3568集成了双核心架构 GPU,高性能VPU以及高效能 NPU。 GPU:Mail-G52,支持OpenGL ES3.2/2.0/1.1,Vulkan1.1;VPU:可实现4K 60fps H.265/H.264/VP9视频解码和1080P 60fps H.265/H.264视频编码;NPU:0.8Tops算力,支持INT8/INT16混合操作。此外,兼容基于一系列框架的网络模型,如TensorFlow/MXNet/PyTorch/Caffe可轻松转换
  • RK3568支持SATA/PCIE/USB3.0/HDMI/MIPI CSI/MIPI DSI/eDP/LVDS等各类型外围接口
  • RK3568除支持Android及Linux系统外,更可适配多个主流国产OS

二、3568平台GUP

2.1、GPU简介

GPU提供了一个基于开放标准的完整图形加速平台,支持2D/3D图形渲染硬件加速。GPU的作用是为计算机系统提供强大的图形处理和计算能力,能够处理大量的图形数据并进行高效的计算,从而实现各种应用的图形渲染、数据处理和加速等功能。 Rk356x是使用Mali-G52,支持OpenGL ES1.1/2.0/3.0,Vulkan 以及OpenCL。 Rk3588x系列使用Mali-G610,同样支持OpenGL ES 1.1/2.0/3.1/3.2,Vulkan 1.1,1.2以及OpenCL 1.1,1.2,2.0

除了GPU,RK系列板卡上还有一个独立的2D硬件加速器–RGA (Raster Graphic Acceleration Unit),可以不占用CPU资源下, 加速点/线绘制,执行图像缩放、旋转、bitBlt、alpha混合等常见的2D图形操作,用户空间使用通过 librga 库。

Mali其实是ARM的Mali系列IP核,ARM mali gpu目前有四大架构,每一代架构在性能上都有提升和更高效的能耗管理:

  • 第一代微架构Utgard(北欧神话人物:乌特加德),2007年推出,主要系列有:mali-200, mali-400, mali-450, mali-470
  • 第二代微架构Midgard(北欧神话人物:米德加德),主要系列有:mali-t6xx, mali-t7xx, mali-t8xx
  • 第三代微架构Bifrost(北欧神话中连接天宫和大地的:彩虹桥),2016年推出,主要系列有:mali-g31, mali-g51, mali-g71, mali-g52, mali-g72, mali-g76
  • 第四代微架构Valhall,2019年退出,主要系列有:mali-g57, mali-g77

2.2、GPU驱动

Mali GPU 驱动一般分为两部分:一小部分在 Linux 内核中,另外一大部分在 userspace,在 usercapce 的部分向下操作内核中的驱动,向上对应用层提供标准的 OpenGL 接口,这样各种图形显示相关的应用才能通过标准的 OpenGL API 进行图形渲染加速。其 结构图 简单参考如下:

在linux系统上使用OpenGL ES或者OpenCL接口,需要添加libmali库以及头文件, libmali有不同的版本(x11,gbm,wayland),提供了opengles,egl,opencl接口

但是 mali GPU IP 提供商 Arm 公司只开放了内核部分驱动,而且这部分驱动还没有按照 linux kernel 的规范以 Drm 的框架去实现,所以它无法被 linux mainline 接受;usersapce 部分,Arm 没有开源,只是以库的形式提供给购买了 mali GPU 授权的 SOC 厂商,比如 Rockchip,Amlogic。

面对这种状况,很多人为了能够利用 GPU 加速,就只能使用 SOC 原厂提供的内核,和他们定制的系统,这种内核和系统一般都比较老。如果想跑 mainline 的内核,基本就没法使用 GPU 加速了。

但是也有一部分黑客们不满于这种封锁,他们勇于探索,积极尝试,逆向了 Arm 发布的二进制库,然后重写了针对 Arm mali gpu 的开源驱动,最终在 Linux 5.2 发布的时候合并到了 mainline 中:针对 Mali-400/Mali-450 的驱动叫做 lima,针对 Mali-T6xx / Mali-T7xx / Mali-T8xx GPU 和 GXX 系列的叫做 panfrost。Usersacpe 部分的开源库叫做 mesa,对 mali gpu 的支持从 mesa 19.2 开始

2.3、GPU驱动使用方案

2.3.1、方案一:使用官方闭源的GPU驱动

Graphics User Guide(Rockchip Linux) - 程序员大本营 (pianshen.com)

Graphics - Rockchip open source Document (rock-chips.com)

闭源的驱动可以通过下面途径获取到

(1)通过官方的SDK编译下载,需要在buildroot中使能 rockchip-mali

编译完成后会下载到 sdk/external/libmali 目录下

最后会编译到rootfs中

(2)通过 gitee下载

RockChipMirror/libmali - Gitee.com

libmali的命名规则:gpu型号-软件版本-硬件版本(如果有的话,比如说r1p0区分3288和3288w)-编译选项。

要注意编译选项。

  • 不带后缀。是x11-gbm,注意gbm是配置drm使用的memory机制,如果不是3.10的kernel,不要用fbdev的。
  • gbm。 是给qteglfs这样的程序用的,不依赖x11,wayland。
  • wayland。 wayland-gbm, 给wayaland使用

2.3.2、方案二:使用开源的mesa

这种方案要 利用 linux kernel 的 Panfrost 驱动 + userspace 的 mesa 来解锁 3D 图形加速功能。详细参考:在 RK3399 上运行开源的 mali GPU 驱动-腾讯云开发者社区-腾讯云 (tencent.com)。但是这种方案对内核版本有要求,需要在5.2以上,但是瑞芯微提供的4.19的kernel版本还没有支持Panfrost 驱动,需要使用5.10内核版本的

三、Linux图形显示

2. 野火demo 部署运行 — [野火]嵌入式Qt应用开发实战指南—基于LubanCat-RK开发板 文档 (embedfire.com)

Tina_Linux_图形系统_开发指南_linux图形系统-CSDN博客

Wayland与Weston简介_weston wayland-CSDN博客

GPU的使用是需要结合图形显示系统的,对于不同的图形显示系统,GPU驱动库也有所不同,所以要使用GPU必须先了解Linux下的图形显示方式。

linux是一个基于命令行的操作系统,图形界面是一个应用程序(而windows的图形界面是操作系统的一部分)。 Linux中图形显示所涉及的知识,简单框图如下所示:

下面简单介绍一些图形相关的知识,包括内核驱动、图形API接口、显示管理器、窗口管理器、GUI应用工具,桌面环境等等。

3.1. DRM/KMS

Direct Rendering Manager(DRM)子系统用于linux内核显示、图形和合成子系统的管理。 通常使用该框架来控制显示接口和外部显示器(控制分辨率,频率,多屏显示等)、输出画面到显示面板、硬件渲染画面等。

DRM是在内核空间,用户空间使用,通常通过相应的 libdrm 库函数调用, 也可以直接ioctl访问设备文件或者使用sysfs文件DRM驱动通信, 使用OpenGL或Vulkan等图形API的应用程序可以通过这些设备文件与GPU进行交互,以实现硬件加速渲染等。

3.2. libdrm

libdrm库,为DRM驱动ioctl提供了包装函数,避免了将内核接口直接暴露给应用程序, 通过libdrm对显示资源进行统一访问,libdrm将命令传递到内核最终由DRM驱动接管各应用的请求并处理。

libdrm是一个底层库,通常被其他图形驱动程序调用,例如Mesa、X、libva和类似项目。

3.3. OpenGL

OpenGL是一组专门涉及2D和3D图形的硬件加速渲染的规范, 至于内部具体每个函数是如何实现,将由编写OpenGL库的人自行决定,实际通常是GPU的生产商。 OpenGL API实现通常是C语言,也有其他语言的实现,如Java、Golang和Rust等。

OpenGL ES(OpenGL for Embedded Systems)是适用于嵌入式设备的OpenGL规范,针对Android手机和iPhone等嵌入式设备。

EGL 是一个依赖于平台的API, 是渲染 API(如 OpenGL ES)和原生窗口系统之间的接口。通常来说,OpenGL 是一个操作 GPU 的 API,它通过驱动向 GPU 发送相关指令,控制图形渲染管线状态机的运行状态,但是当涉及到与本地窗口系统进行交互时,就需要这么一个中间层,因此 EGL 被设计出来,作为 OpenGL 和原生窗口系统之间的桥梁,且它与平台无关的

3.4. Vulkan

Vulkan 是一个低开销、跨平台的2D和3D图形与计算的应用程序接口(API),能够跨平台高效访问GPU。

Vulkan的设计目标是提供一个更轻量级、更高效的图形API,以取代OpenGL等传统的图形API。 作为业内开放标准的现代GPU API,开发人员能够编写可移植到多个不同平台的应用程序。

3.5. Mesa

Mesa 也称为Mesa3D和Mesa 3D图形库,是OpenGL、Vulkan和其他图形API规范的开源实现。 Mesa将这些API规范转换为特定于供应商的图形硬件驱动程序。

Mesa项目最初是作为OpenGL规范的开源实现而开始。经过多年来发展,具有跨平台支持、高性能、开源和扩展性等特点,并且该项目已经扩展到实现更多的图形API, 包括OpenGL ES、OpenCL、OpenMAX、VDPAU、VA-API、Vulkan和EGL。

3.6. X Window System

大多数基于Linux的发行版都使用 X Window System (X11,或者简称X) , 它是基于客户端-服务器体系结构,可以在远程环境中使用。

X Window系统基于客户端-服务器体系结构,客户端和服务器可以在同一台机器上也可以不在同一台机器上,就需要一个在客户端和服务器之间传递消息的协议。 X11协议就是负责消息传递,当客户端和服务器在同一台机器上时,消息通过UNIX套接字进行交换,不同机器上通过网络(TCP/IP)

3.7. Wayland

Wayland 是一种显示服务协议,不依赖客户端-服务器体系结构,旨在提供一个现代、 安全的的Linux和其他类Unix操作系统窗口系统取代X Window system,而Weston是Wayland开源显示协议的参考实现

3.8. EGLFS

EGLFS是QT自带的一个平台插件,可以在EGL和OpenGL ES之上运行Qt应用程序,而不需要通过X11或Wayland这样的实际窗口系统。 EGLFS还支持软件渲染窗口,如QWidget的内容使用CPU渲染成图像,然后上传到纹理中,并由插件进行合成。

四、GPU使用

4.1、查看GPU是否启用

cat /sys/devices/platform/fde60000.gpu/devfreq/fde60000.gpu/load

@前面的数值表示gpu占用率,如果一直为0,说明gpu没有用起来

performance:GPU会固定工作在其支持的最高频率上,以追求最高性能。
powersave:GPU会固定工作在其支持的最低频率上,以追求最低的功耗。
userspace:早期的管理策略,系统将变频策略的决策交给了用户态应用程序,并提供相应的接口供其使用。
ondemand:userspace 是用户态的检测,效率低,cur_freq 当前频率
governor 当前工作模式查看GPU频率范围
# cat /sys/class/devfreq/ff9a0000.gpu/available_frequencies 
200000000 300000000 400000000 600000000 800000000 查看GPU工作模式
# cat /sys/class/devfreq/ff9a0000.gpu/available_governors 
userspace powersave performance simple_ondemand查看GPU最大频率
# cat /sys/class/devfreq/ff9a0000.gpu/max_freq 
0查看GPU最大频率
# cat /sys/class/devfreq/ff9a0000.gpu/min_freq 
0查看GPU实时工作模式及频率
# cat /sys/class/devfreq/ff9a0000.gpu/trans_stat From  :   To:200000000300000000400000000600000000800000000   time(ms)
*200000000:       0       0       0       0     119     59866300000000:      68       0       0       0      75      6326400000000:      28      95       0       0      65     24126600000000:      14      23     141       0      11     29833800000000:       9      25      47     189       0      9766
Total transition : 909查看当前GPU load情况
# cat /sys/class/devfreq/ff9a0000.gpu/load 
47@200000000Hz注意:
47:当前占用GPU百分比
200000000Hz:当前占用GPU频率
200000000Hz = 200000KHz = 200MHz

4.2、glmark2 跑分

glmark2是一个用于评估OpenGL(图形编程接口)性能的基准测试工具。它可以测试图形处理器(GPU)在处理图形渲染任务时的性能表现。glmark2 工具可以通过SDK编译出来,在rootfs的 rockchip_test 目录下,使用方式如下:

  • 显示屏幕跑分:

sh /rockchip_test/gpu/test_glmark2_fullscreen.sh

  • 屏幕不显示跑分:

sh /rockchip_test/gpu/test_glmark2_offscreen.sh

4.3、QT图形显示

Qt for Embedded Linux | Qt 5.15

Qt Embedded:简介与平台插件介绍_eglfs-CSDN博客

QT是一种具体的图形窗口,使用不同的平台插件来支持不同的显示后端,一般使用的平台插件有:eglfs(需要OpenGL/EGL图形栈)、linuxfb(帧缓冲区接口)、 wayland和xcb(x11)。EGLFS、wayland平台插件就需要用到GPU

  • linuxfb插件是linux标准的显示框架,会打开/dev/fb0节点进行绘图和显示,通过Linux的fbdev子系统直接写入帧缓冲区,不支持硬件渲染,显示性能可能会不好
  • eglfs是qt自己实现的一个gui显示插件,eglfs使用opengles/egl进行gpu渲染后,直接送给drm去显示(使用opengles、egl接口,安装gbm或者x11-gbm版的libmali)

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

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

相关文章

GraalVM上的多语言混合开发

上篇文件我们介绍了GraalVM强大的静态编译功能,能够让Java应用程序摆脱虚拟机的束缚,像其它本地编译的应用一样直接运行。那么GraalVM的神奇之处仅限于此吗?今天我们再来看看它的另一个重要特性—多语言混合开发 多语言平台 Java并不是唯一运行在JVM上的语言,这个我们都应…

����: �Ҳ������޷��������� javafx.fxml ԭ��: java.lang.ClassNotFoundException解决方法

如果你出现了这个问题,恭喜你,你应该会花很多时间去找解决方法。别问我怎么知道的... 解决方法: 出现乱码的原因:配置vm时 这些配置看似由有空格,换行,实则没有。所以解决办法就是,重新配置你…

防火墙概述

1、防火墙 防火墙顾名思义就是防止火灾发生时,火势烧到其它区域,使用由防火材料砌的墙。在网络安全中,防火墙的作用就是保护本地网络不受到外部网络或恶意程序的伤害。 防火墙的核心任务是控制和防护,即通过安全策略识别流量并做…

前端面试题17(js快速检索方法详解)

在前端JavaScript中,快速检索数据通常涉及到数组或对象的搜索。这里我会介绍几种常见的快速检索方法,并提供相应的代码示例。 1. 数组的find和findIndex方法 find: 返回数组中满足条件的第一个元素的值。findIndex: 返回数组中满足条件的第一个元素的索…

【mindspore进阶】02-ResNet50迁移学习

Mindspore 应用(2)ResNet50迁移学习 在实际应用场景中,由于训练数据集不足,所以很少有人会从头开始训练整个网络。普遍的做法是,在一个非常大的基础数据集上训练得到一个预训练模型,然后使用该模型来初始化…

张量分解(2)——张量运算(内积、外积、直积、范数)

🍅 写在前面 👨‍🎓 博主介绍:大家好,这里是hyk写算法了吗,一枚致力于学习算法和人工智能领域的小菜鸟。 🔎个人主页:主页链接(欢迎各位大佬光临指导) ⭐️近…

MATLAB贝叶斯线性回归模型案例

采用辛烷值数据集“spectra_data.mat”(任意数据集均可),介绍贝叶斯线性回归模型的构建和使用流程。 运行结果如下: 训练集预测精度指标如下: 训练集数据的R2为: 1 训练集数据的MAE为: 0.00067884 训练集数据的RMSE为: 0.0008893…

STM32点灯闪烁

stm32c8t6引脚图 开发板引脚图 GPIO端口的每个位可以由软件分别配置成 多种模式。 ─ 输入浮空 ─ 输入上拉 ─ 输入下拉 ─ 模拟输入 ─ 开漏输出 ─ 推挽式输出 ─ 推挽式复用功能 ─ 开漏复用功能 配置GPIO端口步骤:开启时钟->使用结构体设置输出模式…

水仙花数算法

一、水仙花的传说 希腊神话故事 传说希腊神话里,美少年纳西索斯(Narcissus)是希腊最俊美的男子,无数的少女对他一见倾心,可他却自负地拒绝了所有的人。这当中包括美丽的山中仙女伊可(Echo)。伊可…

分享一些提升效率的办公、学习神器!

分享一些提升效率的办公、学习神器! 文章目录 分享一些提升效率的办公、学习神器! 一、 ✅ 文件搜索工具 Everything:1.1 Everything 主要功能:1.2 Everything 下载地址: 二、 ✅ 文件压缩解压工具 7 - Zip&#xff1a…

AI免费英语学习在线工具:Pi;gpt;其他大模型AI 英语学习智能体工具

1、pi(强烈推荐:可以安卓下载使用) https://pi.ai/talk (网络国内使用方便) 支持实时聊天与语音对话 2、chatgpt(强烈推荐:可以安卓下载使用) https://chat.openai.com/ (网络国内使用不方便&#xf…

C++初学者指南-4.诊断---valgrind

C初学者指南-4.诊断—Valgrind Valgrind(内存错误检测工具) 检测常见运行时错误 读/写释放的内存或不正确的堆栈区域使用未初始化的值不正确的内存释放,如双重释放滥用内存分配函数内存泄漏–非故意的内存消耗通常与程序逻辑缺陷有关&#xf…

Halcon 背景网格产品刮伤缺陷检测

* 关闭窗口 dev_close_window ()*关闭程序计数器,图形变量更新,窗口图形更新 dev_update_off ()*设置图像路径 Path : lcd/mura_defects_blur_*读取一张图像 read_image (Image, Path 01)*获取图像大小 get_image_size (Image, Width, Height)*创建一个新窗体 dev_open_window…

Apache Seata应用侧启动过程剖析——注册中心与配置中心模块

本文来自 Apache Seata官方文档,欢迎访问官网,查看更多深度文章。 本文来自 Apache Seata官方文档,欢迎访问官网,查看更多深度文章。 Apache Seata应用侧启动过程剖析——注册中心与配置中心模块 前言 在Seata的应用侧&#xf…

强化训练:day13(牛牛冲钻五、最长无重复子数组、重排字符串)

文章目录 前言1. 牛牛冲钻五1.1 题目描述1.2 解题思路1.3 代码实现 2. 最长无重复子数组2.1 题目描述2.2 解题思路2.3 代码实现 3. 重排字符串3.1 题目描述3.2 解题思路3.3 代码实现 总结 前言 1. 牛牛冲钻五   2. 最长无重复子数组   3. 重排字符串 1. 牛牛冲钻五 1.1 题…

llama2阅读: logits是什么?

Logits是一个在深度学习中,几乎一直都有的概念,它意味着模型unnormalized final scores. 然后你可以通过softmax得到模型针对你class的概率分布。 而在llama2的代码中,同样有logits的使用,那么针对llama2,logits的作用…

Sequelize 操作 MySQL 数据库

安装 npm install --save sequelize安装驱动程序: npm install --save mysql2连接到数据库 要连接到数据库,必须创建一个 Sequelize 实例. 这可以通过将连接参数分别传递到 Sequelize 构造函数或通过传递一个连接 URI 来完成: const {Sequelize} re…

Canal架构以及使用规范

Canal架构以及使用规范 一、Canal的作用 相关文档:GitHub - alibaba/canal: 阿里巴巴 MySQL binlog 增量订阅&消费组件 MySQL主备复制原理 MySQL master 将数据变更写入二进制日志( binary log, 其中记录叫做二进制日志事件binary log events,可…

Gitlab代码管理工具安装配置

前言: 没有真正的证书与域名建议使用httpip的方式在内网使用,不建议使用假的域名地址 一、安装前配置 #更改主机域名 hostnamectl set-hostname gitlab.dome.com bash #配置hosts 底部添加下面内容 vim /etc/hosts ############################ ip gi…

Stowaway搭建隧道打CFS内网靶场

目录 渗透带出主机阶段 先把我们的服务端上传到kali ​先把我们的客户端上传到目标机 客户端去连接我们的kali机端口去上线 出现admin,上线成功 detail相当于msf的sessions​ 和msf差不多功能,但是我们用它主要是搞隧道代理 抓发的 ​开启socks…