两美元的芯片跑计算机视觉:ESP32-S3 上 SIMD 加速的 FAST 角点检测
来源:shraiwi.com — 2026-10
📋 概述
作者翻 ESP32-S3 技术参考手册时发现,这颗 240MHz 双核、带 WiFi 与 BLE、售价比一杯咖啡还便宜的芯片竟然有一套 128 位 SIMD 指令,于是用它重写了 FAST 特征点检测器。为了绕开指令集的怪癖——不能直接做非对齐读、只支持有符号 8 位比较、所有 SIMD 算术都是饱和的——他自己写汇编,还写了一个简易寄存器分配器 basm,最终吞吐从 5.1MP/s 提到 11.2MP/s,QVGA 一帧约 6ms。
🔑 核心要点
- 吞吐提升约 220%:从 5.1MP/s 到 11.2MP/s,QVGA(320×240)一帧约 6ms
- 这个速度足够实时处理 30fps 的 VGA 流,而硬件成本只有两美元
- 第一道坎是 ISA 不支持直接非对齐读,东西两侧的像素块要靠切片指令从相邻寄存器拼出来
- 第二道坎是只有有符号 8 位比较,直接把 uint8 当 int8 会得到非线性映射,比较全错
- 第三道坎是所有 SIMD 算术都饱和,减 128 会把大于 127 的值夹成 -128;解法是翻转最高位,因为 x 减 128 等价于 x ^ 0x80
- 一次算十六个像素:每个向量寄存器装 16 个 8 位值,四个方向各取四块与中心像素比较,取极值计数
- 项目里还诞生了自己的寄存器分配器 basm,因为手写汇编的寄存器压力实在太大
💡 金句
For silicon that's cheaper than the average coffee, that's pretty cool.
👍 0
👎 0
← 返回 Lobsters 首页