掌握多核编程与调试:性能与可靠性策略
系统性能
嵌入式系统性能增益可通过复杂编译器优化、高效硬件架构、日益增多的多核并行执行实现。虽巧妙编译器算法能从单线程代码挤出额外速度,但时钟频率每几年翻倍长期假设已不可持续。现代性能上限处于低个位数GHz范围,使并行化成扩展性最可行路径。
并行性

非所有任务同等适合并行化。单人钻深孔,增加工人不加速反而阻碍。相反,挖沟高度并行:多工人并排挖掘,各承担总工作一部分。

上图描绘MIMD(多指令多数据),每工人(核心)可执行不同操作。四独立工人可将单核需全分钟任务完成于约15秒。

相反,SIMD(单指令多数据)跨多个数据元素同步执行相同指令。SIMD适合规则重复操作工作负载——如图像滤波、向量数学——但缺乏通用计算灵活性。
这些考量支撑多核处理器兴起:在单芯片嵌入多个完整CPU子系统,设计师可线性扩展性能,前提是软件编写利用并行性。
多核处理类型
处理器可用多种方式组合核心,影响工作负载分发和核心通信。
同构多核
两个或更多相同核心,各自拥有寄存器、功能单元、通常私有L1缓存。核心通信典型通过共享内存或邮箱机制。因每核心类型相同,同一二进制可在任意核心运行。

异构多核
不同核心类型混合,各针对特定工作负载优化。例如蓝牙控制器可能专用一核心协议处理,第二核心管理高层应用逻辑。此架构常见于移动SoC和工业控制器。

核心分布模式进一步区分多核设计:
对称多处理(SMP)
多相同核心执行同一二进制,由实时操作系统(RTOS)协调。调度器跨核心分发工作,二进制针对单核心类型编译。

非对称多处理(AMP)
每核心运行专用二进制。核心可同构或异构。通信可选,典型通过共享内存或消息原语处理。
因SMP要求单一二进制,强制同构核心。AMP可在同构或异构系统实现,适合需独特专用工作负载应用。
采用多核理由
随摩尔定律放缓,封装更多核心成提升性能最有效路径。时钟频率在低个位数GHz范围趋于平稳,晶体管密度持续攀升,实现更丰富互连和更大片上缓存。多核设计释放此密化全部潜力。
异构AMP对实时和吞吐量中心工作负载特别强大。通过在专用核心隔离时关键功能,设计师可满足严格延迟保证不牺牲整体系统吞吐量。此分离也简化认证,因实时组件可独立于应用逻辑验证。
多核挑战
采用多核架构引入众多软件系统挑战:
- 任务粒度——整体应用常无法高效使用多核。开发者须重构代码为可并发运行独立任务。糟糕线程设计导致利用不足或争用。
- 同步瓶颈——共享数据结构和I/O设备需锁(互斥锁、自旋锁、读写锁等)。过度激进锁定或高争用可串行化工作抵消并行增益。
- 负载不平衡——若一核心早完成而其他滞后,空闲核心代表浪费计算周期。将大作业分解为更小均匀块至关重要。
- 实时约束——SMP系统中RTOS调度器须平衡延迟和吞吐。在数据分区(每线程处理数据块)和功能分区(每线程执行流水线不同阶段)间选择取决于工作负载特征。
多核环境调试
有效调试依赖所有核心全面可见性:
- 协同控制——调试器应允许同时或独立暂停、单步、设置断点跨核心。
- 多核追踪——同时捕获多核心追踪数据需高带宽传输(如CoreSight SWD和TPIU端口)和智能过滤避免数据过载。

(来源:IAR Systems,图表由Arm Ltd.提供)
Arm CoreSight调试架构集成交叉触发接口(CTI)和交叉触发矩阵(CTM),使调试器能响应另一核心事件暂停或触发任意核心动作。此能力对诊断竞态条件和死锁至关重要。
IAR Embedded Workbench C-SPY调试器支持SMP和AMP配置。SMP下用户指定核心数调试器自动连接各核心。AMP支持需两个IDE实例(主和节点)当核心运行分离二进制时。

右侧视图显示4核Cortex-A9 SMP集群:核心2暂停而其他继续执行。
针对异构系统如ST STM32H745/755(Cortex-M7 + Cortex-M4),调试器为每核心启动单独IDE窗口。每窗口显示其核心状态并可选显示另一核心,允许开发者实时观察核心间交互。

两CTI(系统级、Cortex-M4、Cortex-M7)经CTM连接,给调试器细粒度断点和追踪触发控制。

(来源:IAR Systems,图表由STMicroelectronics M0399参考手册提供)
典型应用用共享内存接口和轻量RTOS(如FreeRTOS)交换核心间消息。从各核心视角,通信呈简单任务消息,抽象底层核心间机制。

工作区浏览器显示两项目(Cortex-M7和Cortex-M4),用户可切换焦点。主项目自动启动第二IDE实例,简化AMP调试。
总结
多核架构提供摩尔定律放缓所需性能,但要求严谨软件设计和复杂调试工具。一旦调试环境配置妥当,开发者发现多核调试出奇简单,尤其对比仅用过单核系统者常报告挑战。
现代硬件和集成软件工具现使利用多核性能同时保持可靠性和可追踪性成为实用。
注:图片由IAR Systems提供除非另有说明。

Aaron Bauch任IAR Systems高级现场应用工程师,服务美国东部和加拿大客户。Aaron从事嵌入式系统和软件为Intel、Analog Devices、Digital Equipment Corporation等公司工作。设计涵盖医疗仪器、导航、银行系统等广泛应用。Aaron也在南新罕布什尔大学任教授讲授嵌入式系统设计等多门大学课程。Bauch先生持库珀联盟电气工程学士、哥伦比亚大学电气工程硕士,均在纽约纽约。
相关内容:
- 确保关键多核嵌入式系统软件时序行为
- 多核系统、hypervisor、多核框架
- 高性能嵌入式计算——并行性与编译器优化
- 你以为软件工作?证明它!
- 现场部署设备软件追踪
- 函数式安全外星世界中的编译器
更多Embedded内容,订阅Embedded周刊电子邮件通讯。
嵌入式