RK3568 GPU介绍及使用

news2024/11/29 2:36:02

一、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     59866
 300000000:      68       0       0       0      75      6326
 400000000:      28      95       0       0      65     24126
 600000000:      14      23     141       0      11     29833
 800000000:       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.coloradmin.cn/o/1902706.html

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

相关文章

YOLOv8_obb数据集可视化[旋转目标检测实践篇]

先贴代码,周末再补充解析。 这个篇章主要是对标注好的标签进行可视化,虽然比较简单,但是可以从可视化代码中学习到YOLOv8是如何对标签进行解析的。 import cv2 import numpy as np import os import randomdef read_obb_labels(label_file_path):with open(label_file_path,…

Linux内存管理--系列文章柒——硬件架构

一、引子 之前文章讲解的是系统的虚拟内存,本章讲述这些硬件的架构和系统怎样统一管理这些硬件的。 二、物理内存模型 物理内存模型描述了计算机系统中的物理内存如何由操作系统组织和管理。它定义了物理内存如何划分为单元,如何寻址这些单元以及如何…

yolov8实战——yolov8TensorRT部署(python推理)(保姆教学)

yolov8实战——yolov8TensorRT部署(python推理)(保姆教学) 一 、准备好代码和环境安装TensorRt下载代码和安装环境 部署和推理构建ONNX构建engine无torch推理torch推理 最近用到yolov8,但是寻找了一圈才找到了yolov8最…

Java 自定义集合常量

文章目录 Java 自定义集合常量一、普通方法自定义集合常量信息1、定义 Map 集合信息(1)方法一:使用静态代码块(2)方法二:简单定义 Map 常量 2、定义 List 集合信息3、定义 Set 集合信息 二、通过 Collectio…

Node.js-path 模块

path 模块 path 模块提供了 操作路径 的功能,如下是几个较为常用的几个 API: 代码实例: const path require(path);//获取路径分隔符 console.log(path.sep);//拼接绝对路径 console.log(path.resolve(__dirname, test));//解析路径 let pa…

一文学会 BootStrap

文章目录 认识BootStrap历史优缺点使用注意安装CDN源码引入包管理器 媒体查询屏幕尺寸的分割点(Breakpoints)响应式容器网格系统基本使用底层实现.container.row.col、.col-份数 网格嵌套自动布局列 Auto-layout响应式类 Responsive Class 响应式工具类-…

前端根据目录生成模块化路由routes

根据约定大于配置的逻辑,如果目录结构约定俗成,前端是可以根据目录结构动态生成路由所需要的 route 结构的,这个过程是要在编译时 进行,生成需要的代码,保证运行时的代码正确即可 主流的打包工具都有对应的方法读取文…

Qt(二)弹窗类 颜色对话框 字体对话框 资源文件

文章目录 一、QDebug类和QMessagebox类(一)QDebug类:打印调试类(二)QMessagebox类:弹窗类2. 修改组件图标(1)通过ui界面(2)通过QIcon的方式(3&…

SpringBoot新手快速入门系列教程五:基于JPA的一个Mysql简单读写例子

现在我们来做一个简单的读写Mysql的项目 1,先新建一个项目,我们叫它“HelloJPA”并且添加依赖 2,引入以下依赖: Spring Boot DevTools (可选,但推荐,用于开发时热部署)Lombok(可选&#xff0c…

如何在前端网页实现live2d的动态效果

React如何在前端网页实现live2d的动态效果 业务需求: 因为公司需要做机器人相关的业务,主要是聊天形式的内容,所以需要一个虚拟的卡通形象。而且为了更直观的展示用户和机器人对话的状态,该live2d动画的嘴型需要根据播放的内容来…

aardio —— 今日减bug

打字就减bug 鼠标双击也减bug 看看有多少bug够你减的 使用方法: 1、将资源附件解压缩,里面的文件夹,放到aardio\plugin\plugins 目录 2、aardio 启动插件 → 插件设置 → 选中“今日减bug” → 保存。 3、重启 aardio,等aa…

高效率写文案软件有哪些?5款免费文案生成器值得拥有

在信息洪流奔涌的当下,文案的重要性愈发凸显。对于文案创作者来说,找到能提高效率的软件至关重要,如:市面上有些不错的文案生成器,它们能够为大家自动生成出高质量文案内容,给文案创作者提供了非常大的帮助…

Python和MATLAB微机电健康推导算法和系统模拟优化设计

🎯要点 🎯惯性测量身体活动特征推导健康状态算法 | 🎯卷积网络算法学习惯性测量数据估计六自由度姿态 | 🎯全球导航卫星系统模拟,及惯性测量动态测斜仪算法、动态倾斜算法、融合算法 | 🎯微机电系统加速度…

vb.netcad二开自学笔记2:认识vs编辑器

认识一下宇宙第一编辑器的界面图标含义还是很重要的,否则都不知道面对的是什么还怎么继续? 一、VS编辑器中常见的图标的含义 变量 长方体:变量 局部变量 两个矩形块:枚举 预定义的枚举 紫色立方体:方法 橙色树状结构…

vs2022安装qt vs tool

1 缘由 由于工作的需要,要在vs2022上安装qt插件进行开发。依次安装qt,vs2022,在vs2022的扩展管理中安装qt vs tool。 2 遇到困难 问题来了,在qt vs tool的设置qt version中出现问题,设置msvc_64-bit时出现提示“invali…

理解GCN

一、从CNN到GNN 1、CNN可被视为一类特殊的GNN,相邻节点大小顺序固定的GNN。 2、利用消息传递进行节点分类的例子: 给定上面的图,和少量已经分类的节点(红&绿),对剩余其他节点进行分类,这是…

C语言 do while 循环语句练习 中

练习: 4.编写代码,演示多个字符从两端移动,向中间汇聚 // 编写代码,演示多个字符从两端移动,向中间汇聚 //welcome to china!!! //w ! //we !! //wel !!! //.... //welco…

三、docker配置阿里云镜像仓库并配置docker代理

一、配置阿里云镜像仓库 1. 登录阿里云官网,并登录 https://www.aliyun.com/ 2. 点击产品 - 容器 - 容器与镜像服务ACR - 管理控制台 - 镜像工具 - 镜像加速器 二、配置docker代理 #1. 创建docker相关的systemd文件 mkdir -p /etc/systemd/system/docker.servic…

均匀采样信号的鲁棒Savistky-Golay滤波(MATLAB)

S-G滤波器又称S-G卷积平滑器,它是一种特殊的低通滤波器,用来平滑噪声数据。该滤波器被广泛地运用于信号去噪,采用在时域内基于多项式最小二乘法及窗口移动实现最佳拟合的方法。与通常的滤波器要经过时域-频域-时域变换…

Linux操作系统的引导过程

系统初始化进程与文件、systemd概述、单元类型、切换运行级别、查看系统默认默认运行、永久切换、常见的系统服务(centos)-CSDN博客 centos 7系统升级内核(ELRepo仓库)、小版本升级、自编译内核-CSDN博客 ss命令详细使用讲解文…