linux tinydrm vs fbtft 性能对比测试

news/2024/7/7 0:33:28/文章来源:https://www.cnblogs.com/hfwz/p/18280744

linux tinydrm vs fbtft 性能对比测试

本文将通过若干组对照试验,然后根据实验得出的数据,计算在使用fbdev的情况下tinydrm相较于fbtft的提升幅度。

免责声明:本人时间、精力有限,实验中的测试数据量较小,所以不建议将本文中的数据用于比较严谨的场景。

测试环境

开发板 树莓派1代B型号 Raspberrypi Model B
CPU BCM2835 armv6l ARM1176@1GHz 已超频,详细参数见下方config.txt
屏幕 128x160 st7735r 4-wire spi@12MHz

cpuinfo

Architecture:           armv6lByte Order:           Little Endian
CPU(s):                 1On-line CPU(s) list:  0
Vendor ID:              ARMModel name:           ARM1176Model:              7Thread(s) per core: 1Core(s) per socket: 1Socket(s):          1Stepping:           r0p7CPU(s) scaling MHz: 70%CPU max MHz:        1000.0000CPU min MHz:        700.0000BogoMIPS:           697.95Flags:              half thumb fastmult vfp edsp java tls

测试用例

Linux Framebuffer Benchmark : https://github.com/caramelli/fbmark

编译选项 : -g -O2

  • fb_rectangle

  • fb_sierpinski

工具链信息

❯ /opt/cross-pi-gcc/bin/arm-linux-gnueabihf-gcc -v
Using built-in specs.
COLLECT_GCC=/opt/cross-pi-gcc/bin/arm-linux-gnueabihf-gcc
COLLECT_LTO_WRAPPER=/opt/cross-pi-gcc/libexec/gcc/arm-linux-gnueabihf/12.2.0/lto-wrapper
Target: arm-linux-gnueabihf
Configured with: ../gcc-12.2.0/configure --prefix=/opt/cross-pi-gcc --target=arm-linux-gnueabihf --enable-languages=c,c++,fortran --with-arch=armv6 --with-fpu=vfp --with-float=hard --disable-multilib --includedir=/usr/arm-linux-gnueabihf/include
Thread model: posix
Supported LTO compression algorithms: zlib zstd
gcc version 12.2.0 (GCC)

自建工具链方法参考:https://solarianprogrammer.com/2018/05/06/building-gcc-cross-compiler-raspberry-pi/ (此文中的编译选项不针对于树莓派1b。我修改了一些编译选项以及其他参数,方才可以使用,目前正在整理中,尚未发布。)

一般情况下,您不需要自建交叉编译工具链,使用apt或buildroot提供的工具链进行编译即可。

config.txt

# Please note that this is only a sample, we recommend you to change it to fit
# your needs.
# You should override this file using BR2_PACKAGE_RPI_FIRMWARE_CONFIG_FILE.
# See http://buildroot.org/manual.html#rootfs-custom
# and http://elinux.org/RPiconfig for a description of config.txt syntaxstart_file=start.elf
fixup_file=fixup.datkernel=zImage# To use an external initramfs file
#initramfs rootfs.cpio.gz# Disable overscan assuming the display supports displaying the full resolution
# If the text shown on the screen disappears off the edge, comment this out
disable_overscan=1# How much memory in MB to assign to the GPU on Pi models having
# 256, 512 or 1024 MB total memory
gpu_mem_256=100
gpu_mem_512=100
gpu_mem_1024=100enable_uart=1
dtoverlay=i2c1-overlay
arm_freq=1000
core_freq=500
sdram_freq=600
over_voltage=6

成绩对比

echo 1 > /sys/class/graphics/fbcon/cursor_blink

fbtft tinydrm 提升幅度 单位
Rectangle 32x40 8.55 17.54 51.26% MPixels/second
Sierpinski 1024 529.41 1138.67 53.51% Frames/second
Sierpinski 2048 295.23 605.58 51.25% Frames/second
Sierpinski 4096 156.19 314.06 50.27% Frames/second
Sierpinski 8192 80.00 160.37 50.12% Frames/second
Sierpinski 16384 42.86 80.83 46.98% Frames/second
Sierpinski 32768 23.81 41.01 41.95% Frames/second
Sierpinski 65536 14.28 20.76 31.21% Frames/second
Sierpinski 131072 9.53 10.42 8.54% Frames/second
Sierpinski 262144 5.30 5.30 0.00% Frames/second

image

结论:在多个测试项目中,tinydrm 对比 fbtft 具有100%的性能提升。

在后面的测试项目中,随着计算复杂度的提升,tinydrm的领先幅度大幅下降,推测瓶颈可能来到cpu这边,暂未进行验证,需要更多数据支持该推测

echo 0 > /sys/class/graphics/fbcon/cursor_blink

fbtft tinydrm 单位
Rectangle 32x40 9.04 17.61 MPixels/second
Sierpinski 1024 586.80 1142.07 Frames/second
Sierpinski 2048 314.59 608.69 Frames/second
Sierpinski 4096 165.51 314.93 Frames/second
Sierpinski 8192 82.88 160.95 Frames/second
Sierpinski 16384 43.46 81.07 Frames/second
Sierpinski 32768 27.63 41.17 Frames/second
Sierpinski 65536 17.76 20.84 Frames/second
Sierpinski 131072 9.23 10.46 Frames/second
Sierpinski 262144 5.31 5.31 Frames/second

结论:该功能对于性能有一定的影响

闪烁的光标将导致驱动程序会对闪烁区域进行多次绘制,提升了工作量,推荐在运行gui程序时将其关闭。

调整spi频率后的成绩对比

暂未完成

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

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

相关文章

七月二日 python完成简单围棋游戏

第二天 最近,数据结构的小学期,这两天主要是完成我自己的课题设计完成围棋游戏。 【题目43】围棋游戏 设计一个简易的围棋游戏。盘面有纵横各十九条等距离、垂直交叉的平行线,共构成361个交叉点(以下简称为"点")。棋子分黑白两色。对局双方各执一色棋子,黑先白…

【vscode】vscode通过端口访问本地html页面(Live Server)

在学习mapbox过程中,发现有的图片,如果直接浏览器路径打开html文件,图片不出来,报错,得用服务的形势来访问!!!相信坚持的力量,日复一日的习惯.

基于VLC可见光通信的室内光通信信道信噪比分析matlab仿真

1.算法运行效果图预览2.算法运行软件版本 matlab2022a3.部分核心程序Pr = POW_all.*H; % 接收功率(毫瓦) POW_r = Pr./1000; % 接收功率(瓦) Pr_dbm = 10.*log10(POW_r); % 接收功率(dBm)%信噪比(SNR Ib = 202e-6; % 背景光子通量 No = 2…

JAVA文件IO流

基本的目录、文件操作,常用的IO输入输出流类介绍和使用。一、目录及文件操作Java中File类(文件类)以抽象的方式代表文件名和目录路径名,File对象则代表了磁盘中实际存在的文件和目录。File类不仅仅提供灵活的构造方法,同时还可以用于文件和目录的创建、文件的查找和文件的删…

[JLU] 数据结构与算法上机题解思路分享-第三次上机

这是吉林等通知大学数据结构与算法上机题的题解思路,没有精妙的解法,只是一个记录罢前言 首先,请务必自己尽全力尝试实现题目,直接看成品代码,思维就被拘束了,也很容易被查重。 这里只是思路解析的博客,代码仓库在 JLU_Data_Structures_Record 希望你能在这里找到你想要…

Google 发布了最新的开源大模型 Gemma 2,本地快速部署和体验

Google 重磅发布了最新版大语言模型Gemma 2,其中 90亿 参数版本适合我们个人在笔记本本地部署,老牛同学通过本文和大家一起,通过2种方式快速部署和体验,当然这2种快速部署模型的方式,也同样适用于其他大模型……Gemma 2 是 Google 最新发布的开源大语言模型。它有两种规模…

ros - slam - microros - 两轮差速模型运动学 - 运动学逆解

上一节我们推导并在代码中实现了运动学正解,本节我们来学习下运动学逆解,实现给定线速度和角速度,计算出轮子达到怎样的转速才能达到这个速度。 一、逆解推导我们直接用正解结果进行求逆解即可。 二、编写代码继续在上一节中的代码Kinematics.cpp中完善即可。void Kinematic…

vscode 中code-runner插件 py配置

"code-runner.executorMap": {"javascript": "node","python": "$pythonPath $fullFileName",}本文来自博客园,作者:__username,转载请注明原文链接:https://www.cnblogs.com/code3/p/18280704

vscode code-runner配置

"code-runner.executorMap": {"javascript": "node","python": "$pythonPath $fullFileName",}本文来自博客园,作者:__username,转载请注明原文链接:https://www.cnblogs.com/code3/p/18280704

[IOT2050 question] Unable to listen on http://127.0.0.1:1880/ 端口被占用错误

1. 背景第一次连接node-red的时候,一直出现错误Unable to listen on http://127.0.0.1:1880/。如下:2. 原因分析估计是早前利用iot2050setup小工具把node-red设置为开机自动启动项了,导致1880端口一直被占用。3. 验证首先查看端口是否真的被占用,利用sudo netstat -ltup命令…

实战篇——SQL注入sqli-labs-master靶场实战二

实战篇——SQL注入sqli-labs-master靶场实战(2) SQL注入的高级利用 (1) 宽字节注入 有时后端会对用户输入的特殊字符进行转义处理,这时普通的注入方式就会失效。对于成对的单引号,可以通过十六进制编码的方式绕过转义;而对于单个的单引号,当数据库的编码格式为GBK时,就要用…

代码随想录算法训练营第四十五天 | 打家劫舍

198.打家劫舍 题目链接 文章讲解 视频讲解dp[j]: 表示投到第j家最多能偷dp[j]的钱 递推公式: dp[j] = max(dp[j-2] + nums[j], dp[j-1]) 初始化:dp[0] = nums[0], dp[1] = max(dp[0], dp[1]) 遍历顺序:从小到大 打印dp数组class Solution { public:int rob(vector<int>…

使用开源ntfy消息推送服务发布通知实现全平台接收通知

说明:ntfy源代码:https://github.com/binwiederhier/ntfy.git 官方未编译Windows版本,本人编译最新版本:(链接:https://pan.baidu.com/s/1pMsfqNb5FKHawTLUBTgjQA?pwd=f84u提取码:f84u) 服务部署系统:Windows Server 2019或其他Windows系统简介 ntfy是一个开源的消息…

上海市小区地下室非机动车辆(电动自行车、自行车)坡道设计评级指南 All In One

上海市小区地下室非机动车辆(电动自行车、自行车)坡道设计评级指南 All In One 非机动车辆地下夹层坡道反人类设计 为什么要这么设计? 设计的参考依据是什么? 设计师有去亲身体验自己的设计成果吗? 非机动车(电动自行车、自行车)坡道设计评级指南上海市小区地下室非机动车辆…

【Linux系列】修改ssh端口

#Linux #等保 场景:在CentOS 7.9操作系统上,修改默认的ssh端口。ssh默认22端口,在实际开展业务中的生产环境中,通常会修改为指定端口号,以满足规范。 版本:CentOS 7.9 1.修改sshd_config配置文件 修改命令:vi /etc/ssh/sshd_config 修改内容:Port 100222.重启sshd服务3…

stable diffusion ControlNet使用介绍与进阶技巧

ControlNet是什么?固定构图、定义姿势、描绘轮廓、单凭线稿就能生成一张丰满精致的插画……它几乎无所不能。 有人把它称为AI绘画界的“革命性”突破,但在我看来,它不过是StableDiffusion迈向“工业化”的第一步。 ControlNet扩展与模型下载地址 扩展地址: https://github.…

前端实现根据模版导出word【docxtemplater】

场景 有的时候我们需要根据后端提供的数据,然后结合word模版来生成word。我们可以使用第三方库docxtemplater 效果代码 App.vue <template><div class="app"><el-divider content-position="center">1.基本使用</el-divider><…

Mysql MVCC多版本解析

1.首先各行数据,都有一个trx_id(事务ID)和回滚指针,形成一个链表数据结构的数据。其实这便是undo.log(回滚日志) 2.当select查询数据的时候,还会生成视图数据。 其中包含未提交的最小事务、未提交事务ID数组、应该分配下一个的事务ID、创建视图的事务ID 首先会生成read …

Linux的访问权限详解

题目解读访问权限 rw-r--r--分别代表什么东西 r:代表可读 w:可写 e:可执行 方便起见进行拆分rw- 代表文件所属用户的权限 r-- 代表同组用户的权限 r-- 代表其他用户的权限同时我们可以用2进制来表示: r:4 w:2 e:1 也即是3位二进制数则可以表示 chmod 命令 更改对应的文件的权…