前言:
前面咱们搞了好多好玩的项目:用树莓派攒了个游戏机、开着卡丁车飙代码、在《我的世界》里折腾红石电路……说实话,挺过瘾的。
但这玩意儿玩多了容易审美疲劳,所以接下来的几篇文章,我打算换个赛道——搞点AI相关的。
像什么通义千问、DeepSeek、YOLO目标检测……这些大家耳熟能详的AI项目,我都打算拿树莓派跑一跑试试。
不过有个现实问题得先交代清楚:我手里这台树莓派5B,没有GPU。我也眼馋那些带GPU的板子,但生活费还没到账,实在搞不动。所以咱得务实一点,先用CPU来跑AI推理。等后面钱包回血了,再安排个GPU版本的对比测试。
预告一下:下周的文章会有openclaw
这个章节做个先行篇
正文:
既然要用CPU跑AI,那第一步当然是摸清底牌——我得先知道这颗CPU到底有多少“干活的本事”。
所以我找来一个专门测CPU算力的工具:CPUFP。
简单说,这是一个专门用来测试CPU浮点运算和AI指令集峰值性能的工具。
它的好处是能自动识别当前CPU支持的SIMD指令集(就是那些能一次性处理多个数据的“大招”),然后针对性地压榨出理论峰值性能。
而且它不光支持ARM架构,X86、RISC-V、龙芯的LoongArch也都能测——后面我打算多找几块板子横向对比,这样更有说服力。
先在树莓派上把代码拉下来:
git clone https://github.com/pigirons/cpufp.git
进入克隆下载的文件夹,我们可以看到这个文件夹里面有几个脚本
build_arm64.sh build_e2k.sh build_loongarch64.sh build_riscv64.sh build_x64.sh
很显然这里不同的脚本对应不同的框架构建
树莓派5B用的是Arm Cortex-A76,64位,ARMv8指令集,妥妥的arm64架构。所以直接跑这个:
执行如下命令进行构建
./build_arm64.sh
可以看到构建完成后,文件夹多出了一个build_dir目录和一个cpufp工具,这便是属于树莓派的测试工具的相关目录
开始测速
这个算力测试我分成了单线程、双线程、四线程测试(由于树莓派核心只有4个,故最高4线程)
单线程测试
./cpufp --thread_pool=[0]
双线程测试
./cpufp --thread_pool=[0-1]
四线程测试
./cpufp --thread_pool=[0-3]
我先把树莓派5B对应的结果贴出来
(base) zzf@ZZF:~/zzf/test/cpufp-master $ ./cpufp --thread_pool=[0]
Number Threads: 1
Thread Pool Binding: 0
----------------------------------------------------------------
| Instruction Set | Core Computation | Peak Performance |
| asimd_dp | dp4a.vs(s32,s8,s8) | 153.08 GOPS |
| asimd_dp | dp4a.vv(s32,s8,s8) | 152.78 GOPS |
| asimd_dp | dp4a.vs(u32,u8,u8) | 153.15 GOPS |
| asimd_dp | dp4a.vv(u32,u8,u8) | 153.1 GOPS |
| asimd_hp | fmla.vs(fp16,fp16,fp16) | 76.617 GFLOPS |
| asimd_hp | fmla.vv(fp16,fp16,fp16) | 76.602 GFLOPS |
| asimd | fmla.vs(f32,f32,f32) | 38.252 GFLOPS |
| asimd | fmla.vv(f32,f32,f32) | 38.302 GFLOPS |
| asimd | fmla.vs(f64,f64,f64) | 19.16 GFLOPS |
| asimd | fmla.vv(f64,f64,f64) | 19.163 GFLOPS |
----------------------------------------------------------------
(base) zzf@ZZF:~/zzf/test/cpufp-master $ ./cpufp --thread_pool=[0-1]
Number Threads: 2
Thread Pool Binding: 0 1
----------------------------------------------------------------
| Instruction Set | Core Computation | Peak Performance |
| asimd_dp | dp4a.vs(s32,s8,s8) | 306.82 GOPS |
| asimd_dp | dp4a.vv(s32,s8,s8) | 306.58 GOPS |
| asimd_dp | dp4a.vs(u32,u8,u8) | 306.78 GOPS |
| asimd_dp | dp4a.vv(u32,u8,u8) | 306.73 GOPS |
| asimd_hp | fmla.vs(fp16,fp16,fp16) | 153.22 GFLOPS |
| asimd_hp | fmla.vv(fp16,fp16,fp16) | 153.16 GFLOPS |
| asimd | fmla.vs(f32,f32,f32) | 76.642 GFLOPS |
| asimd | fmla.vv(f32,f32,f32) | 76.706 GFLOPS |
| asimd | fmla.vs(f64,f64,f64) | 38.336 GFLOPS |
| asimd | fmla.vv(f64,f64,f64) | 38.307 GFLOPS |
----------------------------------------------------------------
(base) zzf@ZZF:~/zzf/test/cpufp-master $ ./cpufp --thread_pool=[0-3]
Number Threads: 4
Thread Pool Binding: 0 1 2 3
----------------------------------------------------------------
| Instruction Set | Core Computation | Peak Performance |
| asimd_dp | dp4a.vs(s32,s8,s8) | 611.82 GOPS |
| asimd_dp | dp4a.vv(s32,s8,s8) | 609.16 GOPS |
| asimd_dp | dp4a.vs(u32,u8,u8) | 610.33 GOPS |
| asimd_dp | dp4a.vv(u32,u8,u8) | 607.55 GOPS |
| asimd_hp | fmla.vs(fp16,fp16,fp16) | 304.18 GFLOPS |
| asimd_hp | fmla.vv(fp16,fp16,fp16) | 303.1 GFLOPS |
| asimd | fmla.vs(f32,f32,f32) | 152.65 GFLOPS |
| asimd | fmla.vv(f32,f32,f32) | 153.02 GFLOPS |
| asimd | fmla.vs(f64,f64,f64) | 76.435 GFLOPS |
| asimd | fmla.vv(f64,f64,f64) | 75.616 GFLOPS |
----------------------------------------------------------------
这里我们先来进行一个简单的评价
这里是树莓派的单线程算力测试
这是我的Ubuntu电脑的CPU单核算力测试
如果单看分数你可能会认为,什么?难道树莓派5B的单核算力比电脑还好?实则不然,单看分数,不看标准,这是最最最傻的,这里的比较树莓派和电脑的比较标准相差十分之巨大
先别急着下结论,咱们得搞清楚这分数背后的"计量单位"是啥。
树莓派5B的153 GOPS,单位是GOPS(Giga Operations Per Second),算的是整数运算。它跑的是INT8的dp4a指令,一条指令能同时干4个乘法累加,所以数值看着特别唬人。
而我电脑的118 GFLOPS,单位是GFLOPS(Giga Floating-point Operations Per Second),算的是FP32浮点运算。这是科学计算、游戏物理、工程仿真的硬通货,含金量完全不是一个级别。
这就好比你拿"吨"和"公斤"比数字大小——一辆卡车载重10吨,一头猪重200公斤,10比200小,但你能说猪比卡车重得多吗?
真要拉到同一把尺子下比:
树莓派跑FP32只有38 GFLOPS
我电脑跑整数也能用AVX2搞INT8,保守估计500+ GOPS(很保守很保守的估计)
所以结论很简单:树莓派是嵌入式板子里的优等生,但别真拿它跟桌面CPU掰手腕。看跑分先看单位,这是硬件评测的第一课。
然后其他具体的指标,我们后续对比其他的板子做横向对比
可能有朋友看到上面的测试结果会有点懵——什么GOPS、GFLOPS、INT8、FP32……这些参数到底代表啥?这里我稍微展开说一下,后面看评测也能心里有数。
先说专业点的解释:
GOPS(Giga Operations Per Second)是每秒十亿次操作的缩写,通常用来衡量整数运算性能。而GFLOPS(Giga Floating-point Operations Per Second)是每秒十亿次浮点操作,专门针对浮点运算。
至于指令集后面的那些标识——dp4a是点积累加指令,专门为AI推理优化的;fmla是浮点乘加指令,科学计算用的多。后缀的vs和vv分别代表"向量-标量"和"向量-向量"的运算模式。
用人话说就是:
你可以把CPU想象成一个工地上的施工队。
GOPS(整数运算) 就像是搬砖——每块砖大小一样,重量固定,只管往上摞就行。活儿看着多(数值大),但技术含量不高。
GFLOPS(浮点运算) 好比是做精细木工——每块木头形状不规则,得量尺寸、打磨、拼接。干的活儿可能没那么多(数值小),但每一件都是细活儿。
而INT8、FP32这些,就是砖头和木头的规格:
INT8(8位整数) 是那种标准尺寸的轻质砖,AI推理的时候特别喜欢用,因为算得快、省内存。一条dp4a指令能同时处理4块砖,所以树莓派的INT8跑分能飙到150+ GOPS。
FP32(32位浮点) 就是实木大料,精度高、保真度好,但处理起来也慢。跑游戏物理、科学仿真必须用它,所以你看树莓派的FP32浮点只有38 GFLOPS左右。
为啥不能直接比大小?
这就好比你问:"一个施工队一天能搬1500块砖,另一个木匠一天能做38件家具,哪个更厉害?"
其实根本没法比啊,干的根本不是一类活儿。
现在AI推理很多都量化成INT8来跑,所以树莓派这个INT8成绩看着还挺能打。但真要跑那些必须用FP32的科学计算,或者游戏渲染,它就露怯了。反过来,让台式机用INT8跑AI,也能刷出很高的GOPS分数,只不过人家平时不这么测罢了(因为人家不屑于这个分数)。
总结一句话:
看跑分先看单位,看单位先看数据类型(并不是说单看分数就可以了)。
下一篇加上其他的开发板一起测试,测试完再来做横向对比,我相信这样的结果会更加的直观!!!
本帖最后由 1Awesome1 于 2026-3-11 17:55 编辑引用: Jacktang 发表于 2026-3-15 11:47 让台式机用INT8跑AI,也能刷出很高的GOPS分数,确实可以
是的是的