树莓派4B的测试记录(CPU、FFMPEG)
本文是用来记录树莓派 4B 的一些测试记录。
温度
下面记录中的风扇和大风扇是这样的:

为什么要用大风扇呢?因为小风扇在外壳上,气流通过外壳的珊格会有啸叫,声音不大但是很烦人,大风扇没这个问题,并且同样使用树莓派的 USB 进行供电,而且由于树莓派在大硬盘旁边,还能顺道一起散热。
空载情况
| 情形 | 温度(摄氏度) |
|---|---|
| 无散热片+无风扇 | 41.3 |
| 有散热片+无风扇 | 38.9 |
| 有散热片+有风扇 | 36.5 |
| 有散热片+有大风扇 | 29.7 |
满载情况
| 情形 | 温度(摄氏度) |
|---|---|
| 有散热片+无风扇 | 69.6 |
| 有散热片+有风扇 | 56.9 |
| 有散热片+有大风扇 | 50.6 |
读取速度
树莓派 4B Micro SD 读写速度均为 45 MB/s,跑不满 UHS-I 的约 100MB/s 的速度(Jeff 测试 第五代是可以跑满的)。
CPU性能
使用 Clang 和 ISPC(并行计算)编写的程序来测试 CPU 的一些性能数据。考虑到受写入速度的影响,这里均使用不存储的程序进行测试。
4096x4096 Float64 矩阵计算
如果均拆分 4 块进行并行计算:
| 设备 | 串行 | 并行 |
|---|---|---|
| 树莓派4B(4C4T) | 66.12s | 51.72s |
| (对比组)Mac mini 2018 i5(6C6T) | 17.76s | 6.08s |
进程占用内存约 192.8 MB。可以看到树莓派 4B 使用并行计算加上分割任务带来的提升并没有接近预期的 4 倍。
个人猜测是每次处理的块大大超出每个核心的 32kB data L1 cache 的大小了,那么如果单个块更小一些呢?理论上是在16x16上最快,也就是分成 256 块,因为 32kB 单次可以存放的最大 64 位浮点数矩阵是 22x22,16 刚好小于这个值。
下列每个测试是相同的矩阵:
| 分块(每块大小) | 测试1 | 测试2 | 测试3 | 测试4 |
|---|---|---|---|---|
| 4(1024x1024) | 40s | 39s | 47s | 41s |
| 8(512x512) | 56s | 47s | 55s | 48s |
| 16(256x256) | 37s | 39s | 40s | 46s |
| 32(128x128) | 38s | 49s | 48s | 50s |
| 64(64x64) | 45s | 49s | 45s | 42s |
| 128(32x32) | 41s | 37s | 43s | 40s |
| 256(16x16) | 38s | 38s | 43s | 37s |
可以看到虽然不一定每次都是 16x16 最快,但是在多次测试中可以看到,16x16 一定是第一梯队的。这里按40s的话,也就是达到了串行的 1.653 倍,这个值接近 2 倍了。
优化过的矩阵乘法(测浮点性能)
使用优化过的矩阵和算法,然后再进行分块处理。这个测试在某些能达到 70%~90% 的浮点性能,实际情况还得看设备当时的运行状态和系统以及其他配置。
| 设备 | 浮点性能(GFLOPS) |
|---|---|
| 树莓派4B | 11.91 |
| (对比组)Mac mini 2018 i5 | 200.03 |
这里对比组达到了理论性能的 70%(200/288),树莓派比上面一次测试得出的浮点值高了不少。
排序
| 设备 | 并行计算+分割任务 |
|---|---|
| 树莓派4B(4C4T) | 2.45x |
| (对比组)Mac mini 2018 i5(6C6T) | 5.86x |
进程占用内存约 192.8 MB。可以看到树莓派 4B 使用并行计算加上分割任务带来的提升并没有接近预期的 4 倍,也是在 2 倍左右。
生成 mandelbrot 图
| 设备 | 并行计算+分割任务 |
|---|---|
| 树莓派4B(4C4T) | 8.58x |
| (对比组)Mac mini 2018 i5(6C6T) | 44.03x |
| (对比组)Intel E5-2690 v4 x2(28C58T) | 130.18x |
这里可以看到各个设备的提升均达到了核心数的两倍。
一些想法
证明了 BCM2711 的低缓存(每核心 32kB 数据 + 48kB 指令 L1 cache 和共 1MB L2 cache)导致一旦计算所需的数据稍大一些,那么并行性能就大幅度下降,无法发挥所有核心的性能。
当然我怀疑这也和新系统没有优化完善有关,看看后续会不会好一些。
FFMPEG
有些时候需要对一些视频进行格式转换、转码修复问题等,我用 ffmpeg 比较多,偶尔转换分辨率和裁切有时候用 macOS 自带的也很方便。
这里说明一下测试中的单位x,在使用 ffmpeg 的时候,速度是用类似123x的格式来显示的。这表示当前一秒处理的帧数和视频平均帧数的比值,比如说视频是 24hz 的,那么如果一秒钟处理了48帧,则会显示2x;如果只处理了 12 帧,那么则会显示0.5x。
测试项目:对一个约 950MB 的 FLV 格式的抖音录播进行操作,平均码率约 500K。
转化格式
转换格式最快的办法是直接拷贝流,如下:
$ ffmpeg -i input.mkv -c copy out.mp4
这种格式不会对任何音视频、编码器、码率进行修改,是直接抓流到新的格式里(就是需要注意字幕和音轨的选择)。
树莓派 4 的成绩和对比成绩如下:
| 设备 | 速度 |
|---|---|
| 树莓派 + Micro SD(45MB/s) | 35x |
| 树莓派 + USB NVMe SSD (约 350MB/s) | 617x |
| (对比组)Mac mini 2018 i5(读2400写1200) | 2410x |
可以看到随着硬盘速度的提升,速度有着巨幅提升。
需要说明一下,上面这个USB SSD 的速度是固态硬盘本身的限制,因为使用的是 BG4,没有内存作为缓冲,那么由于单闪存颗粒加上 TLC 导致使用 USB 外接的时候 IOPS 性能不光难以达到内接(内接会用系统内存作为缓冲),也比不过带内存颗粒缓冲或者多闪存颗粒的其他 SSD。
IOPS 是每秒可读写数,会影响系统的响应速度。
转码
这里模拟平时最简单的命令,码率一般在 1500~3000K:
$ ffmpeg -i in.flv out.mp4
| 设备 | 速度 |
|---|---|
| 树莓派 + Micro SD(45MB/s) | 0.23x |
| 树莓派 + USB NVMe SSD (约 350MB/s) | 0.452x |
| (对比组)Mac mini 2018 i5(读2400写1200) | 2.7x |
硬件加速转码
在树莓派上使用硬件加速转码需要使用:
ffmpeg -i in.flv -c:v h264_v4l2m2m -b:v 1500k out.mp4
这里的1500k不是视频本身的码率,而是上一节中自动转码的码率,这样可以作为对比。我也测了一下其他码率,速度差不多:
| 设备 | 速度 |
|---|---|
| 树莓派 + Micro SD(45MB/s) | 2.1x |
| 树莓派 + USB NVMe SSD (约 350MB/s) | 2.36x |
| (对比组)Mac mini 2018 i5 UHD 630(读2400写1200) | 4.36x |
可以看到树莓派 4B 在使用硬件加速之后,速度提升了 6~10 倍。不过需要注意一点,h264_v4l2m2m是有 CPU 占用率的,如果你在跑其他程序,那么性能会降低一些。
为什么还是买了树莓派 4
最后记录一下为什么虽然树莓派 5 已经发布了,但是我又重新买了台树莓派 4B,因为考虑到几点:
- 功耗涨了 10 W,不光充电器得特別买(4B直接用现在的很多手机充电器都行,甚至显示器上的充电接口都可以),如果想无散热无风扇使用不太可能(Jeff 测试结果证明了这一点)。
- 虽然树莓派 5 的性能提升了 2~3 倍,但是实际价格也涨了不少。可能你会说官方售价不过涨了 5 美元哎,也不多啊。但是需要考虑到用的 5V5A 充电器目前并不是很多,而且必须用散热器。那么根据官方指定商家的过期链接的价格(4GB 550)再加上官方充电器(69)和散热器(99),也就是七百(不用官方充电器便宜 50),而且这个价格我能买到两倍性能并且直接有 M.2 + SATA 接口的 N100 主机了。
- 我要用来调试树莓派 Pico,这个在树莓派上刚好有调试接口,这也不要求什么性能。
- 树莓派 5 刚出可能会有一些问题,我想长期使用,不想当小白鼠,现在树莓派 4B 卖出了至少 300 万台,出现严重问题的可能性不大。
- 说实话我上次买树莓派 4B 就没用满。树莓派 5 也没有公开说支不支持 OpenCL,4B 是不能用的。
- 最关键的是,树莓派 5 在国内还没开始卖呢,而且双十一补贴树莓派 4B 4GB 裸板只要330,这还要啥自行车。
希望能帮到有需要的人~
相关文章:
树莓派4B的测试记录(CPU、FFMPEG)
本文是用来记录树莓派 4B 的一些测试记录。 温度 下面记录中的风扇和大风扇是这样的: 为什么要用大风扇呢?因为小风扇在外壳上,气流通过外壳的珊格会有啸叫,声音不大但是很烦人,大风扇没这个问题,并且同样…...
物联网AI MicroPython学习之语法 二进制与ASCII转换
学物联网,来万物简单IoT物联网!! ubinascii 介绍 ubinascii模块实现了二进制数据与各种ASCII编码之间的转换。 接口说明 a2b_base64 - 解码base64编码的数据 函数原型:ubinascii.a2b_base64(data)注意事项: 在解码…...
学之思项目的搭建部署 打jar包失败的解决方法
学之思系统介绍部署java环境安装maven安装node.js前端打包工具命令npmGit命令获取源代码安装配置mysql前端打包打包jar包服务上线!!!打jar包失败的解决方法 学之思系统介绍 学之思开源考试系统是一款 java vue 的前后端不分离的考试系统。主要优点是开发、部署简单快捷、界面…...
[100天算法】-定长子串中元音的最大数目(day 67)
题目描述 给你字符串 s 和整数 k 。请返回字符串 s 中长度为 k 的单个子字符串中可能包含的最大元音字母数。英文中的 元音字母 为(a, e, i, o, u)。示例 1:输入:s "abciiidef", k 3 输出:3 解释…...
Elastic Observability 8.11:ES|QL、APM 中的通用分析和增强的 SLOs
作者:Tom Grabowski, Katrin Freihofner, Israel Ogbole Elastic Observability 8.11 引入了 ES|QL for Observability(技术预览版)、Universal ProfilingTM 和 Elastic APM 集成,以及针对 Elastic Observability 的新 SLO &#…...
TexGen简单模型对应inp文件简单梳理-2
模型 默认最简单的编织复材,编辑材料属性时发现基体属性设置正常,各向同性材料,但是纱线的材料属性却没有弹性性能的设置。 导出inp文件后,导入ABAQUS中其实可以看到有两种材料,纱线也是有属性的。 ABAQUS中修改属性的…...
VUE获取当前日期的周日和周六
<template><div><div click"handleLast()">上一周</div><div click"handleNext()">下一周</div><el-calendarref"monChild"v-model"value":first-day-of-week"7":range"[sta…...
K8S篇之k8s containerd模式fail to pull image certificate signed by unknown authority
"k8s containerd模式fail to pull image certificate signed by unknown authority"的问题 解决方案:您有两个选择:配置证书或禁用证书验证。 配置证书:您可以为 containerd 配置证书,使其信任由未知机构签名的证书。 具…...
算法进阶指南图论 最优贸易
最优贸易 题目描述 C C C 国有 n n n 个大城市和 m m m 条道路,每条道路连接这 n n n 个城市中的某两个城市。任意两个城市之间最多只有一条道路直接相连。这 m m m 条道路中有一部分为单向通行的道路,一部分为双向通行的道路,双向通行的…...
【Android】Debug时禁用主线程ANR限制
ANR全称Application Not Response,指主线程超过5s无响应,应用会自动退出 由于这个线程,如果我们给主线程加了断点,就会触发ANR,导致调试时应用退出 这样调试起来会非常麻烦,其实对于Debug应用,…...
P6入门:项目初始化1-项目详情介绍
前言 使用项目详细信息查看和编辑有关所选项目的详细信息,在项目创建完成后,初始化项目是一项非常重要的工作,涉及需要设置的内容包括项目名,ID,责任人,日历,预算,资金,分类码等等&…...
进行 “最佳价格查询器” 的开发
前置条件 public class Shop {private final String name;private final Random random;public Shop(String name) {this.name name;random new Random(name.charAt(0) * name.charAt(1) * name.charAt(2));}public double getPrice(String product) {return calculatePrice…...
Brain Teaser概率类 - 三局两胜制
问题 三局两胜制比赛,两局结束还是三局结束的概率大? 解答 假设每局比赛的结果是独立同分布的,且遵循伯努利分布,其中一方的胜率为p,另一方为1-p. 则两局结束的概率是 p 2 ( 1 − p ) 2 ≥ 0.5 p^2 (1-p)^2 \geq …...
在现实生活中传感器GV-H130/GV-21的使用
今天,收获了传感器GV-H130/GV-21,调试探头的用法,下面就来看看吧!如有不妥欢迎指正!!!! 目录 传感器GV-H130/GV-21外观 传感器调试探头 探头与必要准备工作 传感器数值更改调试 …...
海康Visionmaster-全局脚本:通过通讯触发快速匹配 模块换型的方法
如何实现根据通讯信号切换快速匹配的模型文件并触发流程执行? 1.动态切换模板需在全局脚本中调用相关接口实现,可以在全局脚本的通讯数据接收回调中实现代码逻辑,代码如下。 C# using System; using VM.GlobalScript.Methods; using System.…...
什么是闭包
闭包是指函数在定义时可以访问其词法作用域的能力,即使函数在定义之后被传递到了其他地方执行。它包含了两个主要的特性:函数内部可以访问外部函数作用域中的变量,而这些变量在函数执行完毕后依然保持在内存中。 具体来说,闭包的…...
sql6(Leetcode1387使用唯一标识码替换员工ID)
1112-2 代码: INNER JOIN 如果表中有至少一个匹配,则返回行 LEFT JOIN 即使右表中没有匹配,也从左表返回所有的行(LEFT为基准 RIGHT JOIN 即使左表中没有匹配,也从右表返回所有的行 # Write your MySQL query st…...
qt-C++笔记之Qt中的时间与定时器
qt-C笔记之Qt中的时间与定时器 code review! 文章目录 qt-C笔记之Qt中的时间与定时器一.Qt中的日期时间数据1.1.QTime:获取当前时间1.2.QDate:获取当前日期1.3.QDateTime:获取当前日期和时间1.4.QTime类详解1.5.QDate类详解1.6..QDateTime类…...
【C++】复杂的多继承及其缺陷(菱形继承)
本篇要分享的内容是C中多继承的缺陷:菱形继承。 以下为本篇目录 目录 1.多继承的缺陷与解决方法 2.虚继承的底层原理 3.虚继承底层原理的设计原因 1.多继承的缺陷与解决方法 首先观察下面的图片判断它是否为多继承 这实际上是一个单继承,单继承的特…...
esp32-rust-no_std-examples-blinky
什么是裸机环境? 裸机环境是指没有可供使用的操作系统环境。当编译的 Rust 程序拥有 no_std 属性时,该程序无权访问上述 std 章节中提到的某些特定功能。尽管仍支持使用配网或引入复杂数据结构等功能,但实现方式将会更加复杂。 no_std…...
VB.net复制Ntag213卡写入UID
本示例使用的发卡器:https://item.taobao.com/item.htm?ftt&id615391857885 一、读取旧Ntag卡的UID和数据 Private Sub Button15_Click(sender As Object, e As EventArgs) Handles Button15.Click轻松读卡技术支持:网站:Dim i, j As IntegerDim cardidhex, …...
通过Wrangler CLI在worker中创建数据库和表
官方使用文档:Getting started Cloudflare D1 docs 创建数据库 在命令行中执行完成之后,会在本地和远程创建数据库: npx wranglerlatest d1 create prod-d1-tutorial 在cf中就可以看到数据库: 现在,您的Cloudfla…...
LLM基础1_语言模型如何处理文本
基于GitHub项目:https://github.com/datawhalechina/llms-from-scratch-cn 工具介绍 tiktoken:OpenAI开发的专业"分词器" torch:Facebook开发的强力计算引擎,相当于超级计算器 理解词嵌入:给词语画"…...
【C语言练习】080. 使用C语言实现简单的数据库操作
080. 使用C语言实现简单的数据库操作 080. 使用C语言实现简单的数据库操作使用原生APIODBC接口第三方库ORM框架文件模拟1. 安装SQLite2. 示例代码:使用SQLite创建数据库、表和插入数据3. 编译和运行4. 示例运行输出:5. 注意事项6. 总结080. 使用C语言实现简单的数据库操作 在…...
2025季度云服务器排行榜
在全球云服务器市场,各厂商的排名和地位并非一成不变,而是由其独特的优势、战略布局和市场适应性共同决定的。以下是根据2025年市场趋势,对主要云服务器厂商在排行榜中占据重要位置的原因和优势进行深度分析: 一、全球“三巨头”…...
浪潮交换机配置track检测实现高速公路收费网络主备切换NQA
浪潮交换机track配置 项目背景高速网络拓扑网络情况分析通信线路收费网络路由 收费汇聚交换机相应配置收费汇聚track配置 项目背景 在实施省内一条高速公路时遇到的需求,本次涉及的主要是收费汇聚交换机的配置,浪潮网络设备在高速项目很少,通…...
关于easyexcel动态下拉选问题处理
前些日子突然碰到一个问题,说是客户的导入文件模版想支持部分导入内容的下拉选,于是我就找了easyexcel官网寻找解决方案,并没有找到合适的方案,没办法只能自己动手并分享出来,针对Java生成Excel下拉菜单时因选项过多导…...
Python 高效图像帧提取与视频编码:实战指南
Python 高效图像帧提取与视频编码:实战指南 在音视频处理领域,图像帧提取与视频编码是基础但极具挑战性的任务。Python 结合强大的第三方库(如 OpenCV、FFmpeg、PyAV),可以高效处理视频流,实现快速帧提取、压缩编码等关键功能。本文将深入介绍如何优化这些流程,提高处理…...
TCP/IP 网络编程 | 服务端 客户端的封装
设计模式 文章目录 设计模式一、socket.h 接口(interface)二、socket.cpp 实现(implementation)三、server.cpp 使用封装(main 函数)四、client.cpp 使用封装(main 函数)五、退出方法…...
Qt学习及使用_第1部分_认识Qt---Qt开发基本流程
前言 学以致用,通过QT框架的学习,一边实践,一边探索编程的方方面面. 参考书:<Qt 6 C开发指南>(以下称"本书") 标识说明:概念用粗体倾斜.重点内容用(加粗黑体)---重点内容(红字)---重点内容(加粗红字), 本书原话内容用深蓝色标识,比较重要的内容用加粗倾…...
