HMP vs AMP:异构多处理的两种范式详解
HMP和AMP是两种完全不同的异构多处理架构,分别服务于通用计算能效优化 和实时确定性与安全性隔离
核心区别概览
| 维度 | HMP(异构多处理) | AMP(非对称多处理) |
|---|---|---|
| 设计目标 | 最大化能效 | 功能安全与实时性 |
| 典型场景 | 手机应用处理器 | 汽车、工控、网络设备 |
| 操作系统 | 单一OS(Linux/Android) | 多个OS或裸机程序 |
| 核心关系 | 协同工作,任务共享 | 功能隔离,独立运行 |
| 调度方式 | 统一调度器全局调度 | 静态分配或简单协同 |
| 通信机制 | 共享内存,缓存一致性 | 消息传递,共享内存需显式同步 |
| 一致性 | 硬件保证缓存一致性 | 通常无硬件一致性 |
| 中断处理 | 统一中断控制器 | 每个核心独立中断 |
一、HMP(异构多处理)
本质:能效导向的任务调度优化
HMP是big.LITTLE架构的调度实现方式 ,让操作系统能够同时看见并使用所有不同类型的内核。
关键特征
-
统一操作系统:
- 单一Linux/Android内核管理所有核心
- 调度器(如EAS)了解每个核心的性能/功耗特征
-
智能任务迁移:
c// 简化调度逻辑 if (task_util(p) < threshold) { // 轻负载 → 小核 p->cpu = LITTLE_core; } else if (task_needs_responsiveness(p)) { // 响应型任务 → 大核 p->cpu = big_core; } else { // 可并行任务 → 多个小核 spread_tasks_across_LITTLES(p); } -
硬件支持:
- 所有核心共享缓存一致性(如CCI互联)
- 统一内存空间
- 共享中断控制器(GIC)
实际示例:手机SoC
骁龙8 Gen 2的HMP调度:
├── 点击屏幕 → Cortex-X3(超大核,快速响应)
├── 播放音乐 → Cortex-A510(小核,低功耗)
├── 后台同步 → 多个Cortex-A510协同
└── 游戏加载 → 所有大核+小核全开
二、AMP(非对称多处理)
本质:功能安全导向的物理隔离
AMP让不同核心运行不同的操作系统或裸机程序,各自执行特定功能,通过消息传递协同。
关键特征
-
多操作系统/裸机程序:
- Core 0: 运行Linux,处理复杂应用
- Core 1: 运行FreeRTOS,实时控制
- Core 2: 运行裸机程序,安全监控
-
物理/逻辑隔离:
- 内存分区:每个核心有专属内存区域
- 外设分区:特定外设分配给特定核心
- 中断隔离:中断控制器支持虚拟化
-
确定性实时响应:
- 实时任务在独立核心运行,不被通用OS干扰
- 最坏情况执行时间可预测
典型架构:汽车域控制器
汽车SoC的AMP配置:
┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐
│ Core 0 │ │ Core 1 │ │ Core 2 │
│ Linux │ │ AUTOSAR │ │ Safety MCU │
│ - 信息娱乐 │ │ - 底盘控制 │ │ - 监控备份 │
│ - 导航 │ │ - 制动 │ │ - 看门狗 │
└────────┬────────┘ └────────┬────────┘ └────────┬────────┘
│ IPC over Shared Mem │ │ 硬件信号
└───────────────────────┘ │
┌─────▼─────┐
│ 硬件安全 │
│ 模块 │
└───────────┘
三、技术实现对比
1. 内存架构
c
// HMP:统一共享内存
struct task_struct *task; // 所有核心看到相同的内存视图
task->on_cpu = BIG_CORE; // 任务可在核心间自由迁移
task->on_cpu = LITTLE_CORE;
// AMP:分区内存
// Core 0内存空间
#define CORE0_DDR_START 0x80000000
#define CORE0_DDR_SIZE 0x20000000
// Core 1内存空间
#define CORE1_DDR_START 0xA0000000
#define CORE1_DDR_SIZE 0x10000000
// 通过MPU/MMU硬件隔离
2. 中断处理
c
// HMP:统一处理
irq_handler_t handle_irq; // GIC将中断路由到最合适的核心
// 调度器决定哪个核心处理
// AMP:定向分配
// 在设备树中静态分配:
timer@1000 {
interrupts = <0 10 4>; // SPI 10, 定向到Core 1
cpu-affinity = <1>; // 只由Core 1处理
};
3. 启动流程
bash
# HMP启动(顺序启动)
BootROM → ATF → U-Boot → Linux Kernel
↓
所有核心启动,由调度器管理
# AMP启动(并行/独立启动)
Core 0: BootROM → ATF → U-Boot → Linux
Core 1: BootROM → ATF → RTOS (独立镜像)
Core 2: BootROM → Safety Monitor (裸机)
4. 通信机制
c
// HMP:共享内存直接访问
// 核心间天然共享数据,需软件同步
spinlock_t lock;
data = shared_mem->value; // 直接读取
// AMP:消息传递
// 通过硬件邮箱或共享内存+软件协议
struct ipc_msg {
uint32_t type;
uint8_t data[64];
};
mailbox_send(CORE1_MBX, &msg); // 发送到Core1的邮箱
四、实际应用场景
HMP应用:消费电子
- 智能手机:动态调节性能/功耗
- 笔记本电脑:Windows on ARM的能效优化
- 平板电脑:平衡续航与性能
AMP应用:关键任务系统
-
汽车电子(符合ISO 26262):
- 核心A:Linux(信息娱乐,ASIL-A) - 核心B:AUTOSAR(刹车控制,ASIL-D) - 核心C:Safety Island(监控,ASIL-D) -
工业控制:
- 核心0:Windows/Linux(HMI,非实时) - 核心1:VxWorks(运动控制,硬实时) - FPGA:硬件加速逻辑 -
网络设备:
- 控制面:Linux(路由协议,管理) - 数据面:裸机/DPDK(数据包转发) - 安全核心:加密加速 -
机器人:
- 核心0:ROS 2(路径规划) - 核心1:实时系统(电机控制) - GPU:视觉处理
五、混合架构:HMP与AMP的融合
现代复杂系统常采用混合架构:
示例:智能座舱SoC
NXP i.MX 8 QuadMax:
├── Cortex-A72集群 (HMP模式)
│ ├── 2×A72 @ 1.6GHz
│ └── 运行Linux,处理多媒体
│
├── Cortex-M4F核心 (AMP模式)
│ └── 运行FreeRTOS,音频DSP
│
├── Cortex-M7核心 (AMP模式)
│ └── 运行AUTOSAR,实时控制
│
└── GPU + NPU
├── 图形渲染
└── AI加速
启动流程:
- 安全核心首先启动,建立信任根
- A72集群启动Linux
- M4/M7从A72加载固件,独立运行
- 通过RPMSG(远程处理器消息)通信
六、选择指南
何时选择HMP?
- 应用场景:消费电子,追求极致能效
- 需求特点:动态负载变化大,任务类型多样
- 系统要求:单一OS,简化软件开发
- 示例:手机、平板、笔记本电脑
何时选择AMP?
- 应用场景:功能安全/实时性关键系统
- 需求特点:确定性响应,功能隔离,安全认证
- 系统要求:混合OS环境,不同安全等级
- 示例:汽车、医疗、工控、航空航天
何时选择混合架构?
- 需要同时满足:富功能应用 + 实时控制 + 功能安全
- 系统复杂度高,单一架构无法满足
- 资源充足,可承担多个OS的开发维护成本
- 示例:智能汽车、高级机器人、高端网络设备
总结:核心理念差异
| 方面 | HMP | AMP |
|---|---|---|
| 哲学 | 效率最大化 | 安全隔离 |
| 设计原则 | 核心间协作完成任务 | 核心间隔离执行功能 |
| 优化目标 | 性能/功耗比 | 确定性/可靠性 |
| 适用领域 | 通用计算 | 专用领域 |
| 发展趋势 | 更细粒度的能效调度 | 更强的物理隔离与安全认证 |
简单记忆:
- HMP :让所有核心一起聪明地工作,像一支配合默契的篮球队
- AMP :让每个核心专注自己的职责,像手术室里的专业团队
随着异构计算的发展,HMP和AMP正在融合:现代SoC可能同时包含HMP集群(用于应用处理)和AMP核心(用于实时/安全功能),形成多层次的计算架构。