本文是用来记录树莓派 4B 的一些测试记录。
下面记录中的风扇和大风扇是这样的:
为什么要用大风扇呢?因为小风扇在外壳上,气流通过外壳的珊格会有啸叫,声音不大但是很烦人,大风扇没这个问题,并且同样使用树莓派的 USB 进行供电,而且由于树莓派在大硬盘旁边,还能顺道一起散热。
情形 | 温度(摄氏度) |
---|---|
无散热片+无风扇 | 41.3 |
有散热片+无风扇 | 38.9 |
有散热片+有风扇 | 36.5 |
有散热片+有大风扇 | 29.7 |
情形 | 温度(摄氏度) |
---|---|
有散热片+无风扇 | 69.6 |
有散热片+有风扇 | 56.9 |
有散热片+有大风扇 | 50.6 |
树莓派 4B Micro SD 写入速度为 45 MB/s,但是读取偶尔能跑到 100MB/s,大部分时间和读取速度差不多(Jeff 测试第五代是可以跑满的)。
使用 Clang 和 ISPC(并行计算)编写的程序来测试 CPU 的一些性能数据。考虑到受写入速度的影响,这里均使用不存储的程序进行测试。
如果均拆分 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 倍左右。
设备 | 并行计算+分割任务 |
---|---|
树莓派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 比较多,偶尔转换分辨率和裁切有时候用 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 占用率的,如果你在跑其他程序,那么性能会降低一些。
最后记录一下为什么虽然树莓派 5 已经发布了,但是我又重新买了台树莓派 4B,因为考虑到几点:
希望能帮到有需要的人~