什么是异构计算 SoC
传统 MCU 一个核心干所有事。现在的嵌入式 SoC 已经是"小电脑":一个大核跑 Linux(应用、网络、UI),一个小核跑 RTOS(实时控制),旁边还有 NPU(AI 推理)、DSP(音频/信号)、VPU(视频编解码)。不同核干不同活,这就是异构计算。
异构不是"多几个核"那么简单,是"让合适的活儿跑在合适的核上"。实时任务丢大核上,抖动 5ms 就废了;AI 推理丢 CPU 上,功耗爆炸。
这篇讲怎么把一颗异构 SoC 的算力真正用满。
典型 SoC 架构
主流嵌入式 SoC 举例:
- 瑞芯微 RK35884×A76 + 4×A55 + 6 TOPS NPU。
- 全志 H6184×A53 + 1 TOPS NPU。
- TI AM64xA53 + 实时 MCU 核 + PRU。
- ESP32-S3Xtensa LX7 双核 + AI 向量指令。
- 瑞萨 RZ/G2LA53 + Cortex-M 实时核。
NPU:跑 AI 模型
NPU(神经网络处理器)是专门跑矩阵乘的硬件。同精度下,NPU 比 CPU 快 10~100 倍、功耗低 10 倍。部署流程:
// 1. PC 上训练好 PyTorch 模型
// 2. 量化:FP32 -> INT8(用芯片厂商工具)
// 3. 转换成 NPU 专用格式(RKNN / CoreML / TFLite)
// 4. 板端加载模型、喂输入、取输出
import rknn.api as rknn
model = rknn.RKNN()
model.load('yolov5.rknn')
out = model.infer(input_image)
注意:NPU 只支持它认识的算子,自定义算子要自己写插件。
DSP:跑信号处理
DSP(数字信号处理器)是为 MAC(乘加)指令优化的核。音频编解码、电机 FOC、通信基带都跑在 DSP 上。ARM 那边是 Cortex-R 或带 FPU 的 A 核,TI C6000、Cadence Tensilica HiFi 是经典 DSP IP。
什么时候用 DSP
- 音频回声消除、降噪、编解码。
- 电机FOC 高带宽控制。
- 通信调制解调、基带处理。
- 图像ISP、3A、降噪。
核间通信
大核跑 Linux,小核跑 RTOS,它们要通信:传命令、传数据。常见方式:
// 1. 共享内存:最快,但要做同步
// 2. 邮箱(Mailbox):硬件寄存器中断通知
// 3. RPMsg:基于 Mailbox 的上层协议(Linux 内核自带)
// 4. OpenAMP:跨 OS 的多核通信框架
// 5. 网络/TCP:最简单但延迟大
OpenAMP 实战
OpenAMP 是 Linux 官方推荐的异构多核框架。它提供:
OpenAMP 组成
- RPMSG消息通道。
- VirtIO标准化数据面。
- Remoteproc加载远端固件。
- LibOpenAMP用户态库。
// Linux 主侧:加载 MCU 核固件
echo /lib/firmware/m4_fw.elf > /sys/class/remoteproc/remoteproc0/firmware
echo start > /sys/class/remoteproc/remoteproc0/state
// MCU 核启动后,RPMsg 自动建立通道
性能调优
// 1. 绑核:实时任务绑大核,避开关联性
taskset -cp 3 pid
// 2. CPU 亲和性:UI 跑大核、后台跑小核
// 3. DVFS:空闲时降频省电
// 4. 缓存:共享数据放 DDR,热数据放 SRAM
// 5. 带宽:NPU/DSP 跑时别和 CPU 抢 DDR
异构 SoC 的性能瓶颈往往不在算力,在内存带宽。先量清楚数据从哪走到哪,再决定放哪个核。
把 CPU、NPU、DSP、MCU 核各司其职,一颗 SoC 就能顶过去一整套板子。