---
title: "两美元 MCU 上的 SIMD：ESP32-S3 把 FAST 角点检测提速约一倍 - Angryecho"
description: "ESP32-S3 卖得便宜，里头却有一组相对少人深挖的 128 位 SIMD 指令。"
canonical_url: "https://www.angryecho.com/c/dian_gong_ba/p/P2TBBorw6McMmN9N0NqcL"
meta:
  "og:description": "ESP32-S3 卖得便宜，里头却有一组相对少人深挖的 128 位 SIMD 指令。"
  "og:image": "https://www.angryecho.com/_og/d/c_Post%2Ctitle_~5ZCQ5qe9572R%2Cdescription_~5ZCQ5qe95LiA5LiL77yM5bCx5LiK5ZCQ5qe9572R44CC%2CpostId_P2TBBorw6McMmN9N0NqcL%2Crevision_~MjAyNi0xMC0yN1QwMjo1Nzo0OS4yMjMzNTBa%2Cp_Ii9jL2RpYW5fZ29uZ19iYS9wL1AyVEJCb3J3Nk1jTW1OOU4wTnFjTCI%2Cs_rQIt9fTqZb-BQ_kw.png"
  "og:image:height": "630"
  "og:image:type": image/png
  "og:image:width": "1200"
  "og:title": "两美元 MCU 上的 SIMD：ESP32-S3 把 FAST 角点检测提速约一倍"
---

> Index of every page on this site: [llms.txt](https://www.angryecho.com/llms.txt)

# **两美元 MCU 上的 SIMD：ESP32-S3 把 FAST 角点检测提速约一倍**

ESP32-S3 卖得便宜，里头却有一组相对少人深挖的 128 位 SIMD 指令。开发者 shraiwi 在博客里写了自己用这套指令重做 FAST 特征检测的过程：QVGA（320×240）一帧大约 6 毫秒，相对参考实现大约翻倍，峰值吞吐从约 5.1MP/s 提到约 11.2MP/s，够支撑实时视觉里「能跟上 30fps VGA」的量级。源码一并公开。

## 为什么选 FAST，难点在哪

作者先翻过 Larry Bank 的示例、乐鑫 `esp-dsp` 和 `esp-dl`，确认汇编并不算玄学，然后选定计算机视觉里常见的 FAST 角点预检测：在中心像素上下左右各采样，看有没有足够多的「极端像素」（与中心差超过阈值）。向量寄存器一次能塞 16 个 8 位值，于是按「一次算 16 个中心点」来设计。

硬件立刻甩出两道坑。一是指令集不允许直接做错位读取，而东西两侧像素块相对中心往往是错位的，只能靠「拼两个寄存器再切片」的指令抠出东西块。二是比较指令只支持有符号 8 位，像素却是无符号 0—255；若直接当有符号解释，128—255 会拧成 -128—-1，比较全乱。

## 绕开饱和运算的小技巧

本来想减 128 把无符号映射到有符号区间，但 ESP32-S3 的 SIMD 算术是饱和的：大于 127 的值一减会被钳死，而不是绕回。作者最后用位运算代替减法：对每个字节异或 `0x80`，等价于翻转最高位，也就是无符号意义上的「减 128」，再去做后续比较和极值计数。评分函数也按类似套路做了 SIMD 版。

过程中他还顺手写了个很基础的寄存器分配器 `basm`，方便自己堆汇编。文章重点不在「教你抄指令」，而在说明：两美元级芯片上的 SIMD 不是营销口号，真能把边缘侧特征检测推到可用帧率，但也得正视错位访问、有符号比较和饱和运算这些 ISA 细节。

> 说明：性能数字来自作者自测环境，不同板卡、编译选项和图像内容会有差异；具体实现以公开源码为准。

## 来源

> \[1] [SIMD-accelerated computer vision on a $2 microcontroller — shraiwi](https://shraiwi.com/blog/simd-fast-esp32s3/)，约2026年10月。

#ESP32-S3 #SIMD #FAST角点 #嵌入式视觉 #边缘计算

排序方式 :

### **成为第一条评论！**

Nobody's responded to this post yet. Add your thoughts and get the conversation going.

```json
{"@context":"https://schema.org","@graph":[{"@id":"https://www.angryecho.com/c/dian_gong_ba/p/P2TBBorw6McMmN9N0NqcL#post","@type":"DiscussionForumPosting","commentCount":0,"dateModified":"2026-10-27T02:57:49.223Z","datePublished":"2026-10-26T04:00:00.000Z","description":"ESP32-S3 卖得便宜，里头却有一组相对少人深挖的 128 位 SIMD 指令。","headline":"两美元 MCU 上的 SIMD：ESP32-S3 把 FAST 角点检测提速约一倍","isPartOf":"https://www.angryecho.com/c/dian_gong_ba","mainEntityOfPage":"https://www.angryecho.com/c/dian_gong_ba/p/P2TBBorw6McMmN9N0NqcL","text":"ESP32-S3 卖得便宜，里头却有一组相对少人深挖的 128 位 SIMD 指令。开发者 shraiwi 在博客里写了自己用这套指令重做 FAST 特征检测的过程：QVGA（320×240）一帧大约 6 毫秒，相对参考实现大约翻倍，峰值吞吐从约 5.1MP/s 提到约 11.2MP/s，够支撑实时视觉里「能跟上 30fps VGA」的量级。源码一并公开。\n\n为什么选 FAST，难点在哪\n\n作者先翻过 Larry Bank 的示例、乐鑫 esp-dsp 和 esp-dl，确认汇编并不算玄学，然后选定计算机视觉里常见的 FAST 角点预检测：在中心像素上下左右各采样，看有没有足够多的「极端像素」（与中心差超过阈值）。向量寄存器一次能塞 16 个 8 位值，于是按「一次算 16 个中心点」来设计。\n\n硬件立刻甩出两道坑。一是指令集不允许直接做错位读取，而东西两侧像素块相对中心往往是错位的，只能靠「拼两个寄存器再切片」的指令抠出东西块。二是比较指令只支持有符号 8 位，像素却是无符号 0—255；若直接当有符号解释，128—255 会拧成 -128—-1，比较全乱。\n\n绕开饱和运算的小技巧\n\n本来想减 128 把无符号映射到有符号区间，但 ESP32-S3 的 SIMD 算术是饱和的：大于 127 的值一减会被钳死，而不是绕回。作者最后用位运算代替减法：对每个字节异或 0x80，等价于翻转最高位，也就是无符号意义上的「减 128」，再去做后续比较和极值计数。评分函数也按类似套路做了 SIMD 版。\n\n过程中他还顺手写了个很基础的寄存器分配器 basm，方便自己堆汇编。文章重点不在「教你抄指令」，而在说明：两美元级芯片上的 SIMD 不是营销口号，真能把边缘侧特征检测推到可用帧率，但也得正视错位访问、有符号比较和饱和运算这些 ISA 细节。\n\n\n\n说明：性能数字来自作者自测环境，不同板卡、编译选项和图像内容会有差异；具体实现以公开源码为准。\n\n来源\n\n\n\n[1] SIMD-accelerated computer vision on a $2 microcontroller — shraiwi，约2026年10月。\n\n#ESP32-S3 #SIMD #FAST角点 #嵌入式视觉 #边缘计算","url":"https://www.angryecho.com/c/dian_gong_ba/p/P2TBBorw6McMmN9N0NqcL","author":{"@type":"Person","name":"ffdshow233","url":"https://www.angryecho.com/u/V2Xffdshow233"},"interactionStatistic":[{"@type":"InteractionCounter","interactionType":"https://schema.org/LikeAction","userInteractionCount":0},{"@type":"InteractionCounter","interactionType":"https://schema.org/DislikeAction","userInteractionCount":0},{"@type":"InteractionCounter","interactionType":"https://schema.org/ViewAction","userInteractionCount":0},{"@type":"InteractionCounter","interactionType":"https://schema.org/ShareAction","userInteractionCount":0}]}]}
```

## Sitemap

See the full [sitemap](https://www.angryecho.com/sitemap.md) for all pages.
