Samsung Exynos M 系列(M1–M6)CPU 微架构参数对比
Samsung Austin R&D Center(SARC)自 2011 年末开始研发 Exynos 自研高性能核:M1–M5 五代已量产;M6 是第六个已经完成的设计,但未量产; M7 并未有相关资料,只在 LinkIn 出现过(可能是相关部门被撤裁)
微架构演进:
- M1/M2:4-wide baseline
M1 建立 4-wide、约 100 项乱序窗口、分布式调度器、分层神经网络分支预测器和共享 L2。M2 基本保留微架构参数,以制程迁移、队列加深和内部效率改进为主。 - M3:第一次扩张
Decode/Rename/Dispatch/Retire 从 4-wide 增至 6-wide,ROB 从 100 增至 228,整数与浮点 PRF 均翻倍,执行峰值可达 11 ops/cycle;cache 改为每核私有 512 KB L2 加 4 MB 共享 L3。代价是增加 DP2、RR2 两级流水,并把误预测代价从 14 cycle 提高至 16 cycle - M4/M5:固定 6-wide/228-ROB baseline 上的路径优化
M4 面向更大代码/数据工作集和主存延迟,扩大 L2BTB、增加私有 L2、采用 data-less MAB、Buddy 预取、DRAM 快速返回路径和 load-load cascading。M5 加入 384-µop UOC、ZAT/ZOT、MRB、更大 SHP、下层独立预取器、推测性缓存旁路和早期 DRAM page activate。 - M6:第二次扩宽流水线
M6 面向 5 nm 设计、目标频率 2.8 GHz,Decode/Rename/Retire 扩至 8-wide,ROB 仅增至 256;L1I/L1D 均增至 128 KB,L2 带宽翻倍到 64 B/cycle,整数端变为4S+2CD+2BR,FP 变为 4×FMAC。分支侧以更大 mBTB/L2BTB 和“短 VPC + 独立间接目标哈希表”应对 JavaScript 的多目标间接调用
统一 2.6 GHz、相同 4,026 workload slices 的模型中,M1→M6 的 Decode/Retire 宽度从 4 增至 8,ROB 从 96 增至 256(2.67×),分支预测逻辑存储从 98.9 KB 增至 561.5 KB(5.68×),平均 load latency 从 14.9 cycle 降至 8.3 cycle(约降低 44.3%),平均 IPC 从 1.06 增至 2.71
CPU、SoC 映射表:
| 微架构 | 代表 SoC | 大核簇/异构拓扑 | 制程 | 论文/产品频率 |
|---|---|---|---|---|
| M1 | Exynos 8890 | 4×M1 + 4×Cortex-A53 | 14 nm | 2.6 GHz |
| M2 | Exynos 8895 | 4×M2 + 4×Cortex-A53 | 10 nm LPE | 2.3 GHz |
| M3 | Exynos 9810 | 4×M3 + 4×Cortex-A55 | 10 nm LPP | 2.7 GHz |
| M4 | Exynos 9820 / 9825 | 2×M4 + 2×Cortex-A75 + 4×A55 | 8 nm LPP / 7 nm EUV | 2.7 GHz |
| M5 | Exynos 990 | 2×M5 + 2×Cortex-A76 + 4×A55 | 7 nm EUV | 2.8 GHz |
| M6 | 无量产 SoC | 论文只说明 L2 每 2 核共享 | 5 nm(设计节点) | 2.8 GHz(target) |
| 参数 | M1 | M2 | M3 | M4 | M5 | M6 |
|---|---|---|---|---|---|---|
| 制程 | 14 nm | 10 nm LPE | 10 nm LPP | 8 nm LPP | 7 nm | 5 nm(设计节点) |
| 代表/目标频率 | 2.6 GHz | 2.3 GHz | 2.7 GHz | 2.7 GHz | 2.8 GHz | 2.8 GHz target |
| L1 I$ | 64 KB,4-way | 64 KB,4-way | 64 KB,4-way | 64 KB,4-way | 64 KB,4-way | 128 KB,4-way |
| L1 D$ | 32 KB,8-way | 32 KB,8-way | 64 KB,8-way | 64 KB,4-way | 64 KB,4-way | 128 KB,8-way |
| L2 | 2 MB,16-way | 2 MB,16-way | 512 KB,8-way | 1 MB,8-way | 2 MB,8-way | 2 MB,8-way |
| L2 共享关系 | 4 核共享 | 4 核共享 | 每核私有 | 每核私有 | 每 2 核共享 | 每 2 核共享 |
| L2 BW(论文表口径) | 16 B/c | 16 B/c | 32 B/c | 32 B/c | 32 B/c | 64 B/c |
| L3 | 无 | 无 | 4 MB,16-way,4 bank | 3 MB,16-way,3 bank | 3 MB,12-way,2 bank | 4 MB,16-way,2 bank |
| L1 ITLB 覆盖 | 256 pages | 256 | 512 | 512 | 512 | 512 |
| L1 DTLB | 32 pages | 32 | 32 | 48 | 48 | 128 pages |
| L1.5 DTLB | 无 | 无 | 512 pages | 512 | 512 | 512 |
| Shared L2 TLB | 1K pages | 1K | 4K | 4K | 4K | 8K pages |
| 参数 | M1 | M2 | M3 | M4 | M5 | M6 |
|---|---|---|---|---|---|---|
| Decode / Rename / Retire | 4 / 4 / 4 | 4 / 4 / 4 | 6 / 6 / 6 | 6 / 6 / 6 | 6 / 6 / 6 | 8 / 8 / 8 |
| Integer units | 2S+1CD+BR | 2S+1CD+BR | 2S+1CD+1C+BR | 同 M3 | 4S+1CD+1C+BR | 4S+2CD+2BR |
| LSU pipes | 1L+1S | 1L+1S | 2L+1S | 1L+1S+1G | 1L+1S+1G | 1L+1S+1G |
| FP pipes | 1 FMAC+1 FADD | 同 M1 | 3 FMAC | 3 FMAC | 3 FMAC | 4 FMAC |
| Integer PRF | 96 | 96 | 192 | 192 | 192 | 224 |
| FP PRF | 96 | 96 | 192 | 176 | 176 | 224 |
| ROB | 96 | 100 | 228 | 228 | 228 | 256 |
| 分支误预测代价 | 14 c | 14 c | 16 c | 16 c | 16 c | 16 c |
| L1 load hit | 4 c | 4 c | 4 c | 3 c(级联)或 4 c | 同 M4 | 同 M4 |
| 平均 L2 命中延迟 | 22 c | 22 c | 12 c | 12 c | 13.5 c | 13.5 c |
| 平均 L3 命中延迟 | — | — | 37 c | 37 c | 30 c | 30 c |
| FP FMAC / FMUL / FADD | 5 / 4 / 3 c | 5 / 4 / 3 c | 4 / 3 / 2 c | 同 M3 | 同 M3 | 同 M3 |
符号定义:
- S:add/shift/logical;
- C:S 类能力加 multiply 与 indirect branch;
- CD:C 类能力再加 divide;
- BR:仅 direct branch;
- G:可执行 load 或 store 的 generic LSU pipe。
M6 的 1L+1S+1G 与 M5 相同:LSU 流水线可生成两个 load 或两个 store-address 候选,但不能同时形成 2 load + 2 store
前端——分支预测
M 系列前端是 Samsung 特有的分层 BTB + perceptron 体系:
- µBTB:低容量、图式链接的零气泡预测路径,内含 local-history hashed perceptron(LHP)
- mBTB:更大但通常有 1–2 bubble 的主 BTB,结合完整 Scaled Hashed Perceptron(SHP)
- L2BTB:容量层,采用更致密、较慢的 SRAM 宏
- vBTB:当一个 128 B code cacheline中发现超过主 BTB 可容纳的 8 个顺序分支时,保存溢出分支(针对分支密集型场景的冲突失效)
- RAS:带推测 push/pop 修复机制
- 间接分支:M1–M5 实现为 VPC(Virtual Program Counter)链式预测
分支方向预测器:SHP / LHP
| 项目 | M1 | M2 | M3 | M4 | M5 | |
|---|---|---|---|---|---|---|
| 主方向预测器 | 8 表 × 1024 个 sign-magnitude 权重的 SHP;BTB 项内含 local BIAS | 无显著结构变化 | SHP 行数/总权重容量约翻倍;置信度与历史配置调优 | 公开重点在 L2BTB,SHP 容量与 M3 同为 16 KB | 16 表 × 2048 个 8-bit 权重;GHIST 长度再增 25% | |
| µBTB 方向预测 | LHP + 图式 taken/not-taken 链 | 基本同 M1 | 更长 local history、权重表容量翻倍、置信度调优 | ND | 与 ZAT/ZOT 仲裁;µBTB 项数为面积效率而缩减 | |
| SHP 存储 | 8.0 KB | 8.0 KB | 16.0 KB | 16.0 KB | 32.0 KB | 32.0 KB |
| M1 已知历史长度 | GHIST 165 bit;PHIST 80 bit | 基本沿用 | 具体全局历史长度 ND | ND | 相对上一代 GHIST +25%,绝对长度 ND | |
| 训练策略 | 误预测或低置信正确预测时更新;阈值采用 O-GEHL 式训练;always-taken 不训练 SHP 以减小 aliasing | 基本同 M1 | 更大表降低 aliasing | ND | 更多表、更长历史并重平衡 hash interval |
M1 SHP 索引与求和机制:
- 每个权重表的索引由 GHIST 区间哈希、PHIST 区间哈希和分支 PC 异或组合;
- BTB 中的 BIAS 权重按 2×加入各表权重和;
- 总和非负预测 taken,否则预测 not-taken;
- 仅在误预测或绝对和低于训练阈值时更新;
- unconditional 和“迄今始终 taken”的 conditional branch 不污染 SHP 权重表。
分析:
- M1 的设计目标不是单纯追求最低 MPKI,而是同时支持 每周期最多两个分支预测,尤其优化“前一分支 not-taken 后继续看第二分支”的高吞吐场景
- M3 将机器加宽后,分支错一次会浪费更大的后端窗口,因此增加 SHP 容量、µBTB 容量和 1AT 提前重定向;其 4800 条 trace 上 MPKI 从 3.92 降至 3.29,约下降 16%
- M5 的 SHP 由 8 表扩为 16 表,而 Decode/ROB 不变,说明前端投资从“喂饱更宽机器”转向“减少无效 µop 和恢复空洞”
BTB:µBTB、mBTB、L2BTB、vBTB
| 结构 | M1 | M2 | M3 | M4 | M5 | M6 |
|---|---|---|---|---|---|---|
| µBTB | 64 项 | 无显著变化 | 128 项 | 精确项数 ND | 项数相对前代缩减;精确值 ND | |
| mBTB | 4K 项 | 4K 项 | 4K 项 | 精确项数未单列 | 精确项数未单列;项内增加 ZAT/ZOT 复制目标信息 | |
| L2BTB | 约 8K 项 | 约 8K 项 | 16K 项 | 约 32K 项 | 精确项数 ND;存储 225.5 KB | |
| vBTB | 有,容纳稠密分支行溢出 | 同类结构 | 保留 | 保留 | 保留 | |
| L1 BTB 总存储 | 32.5 KB | 32.5 KB | 49.0 KB | 50.5 KB | 53.3 KB | 78.5 KB |
| L2BTB 存储 | 58.4 KB | 58.4 KB | 110.8 KB | 221.5 KB | 225.5 KB | 451.0 KB |
| 全部分支预测存储 | 98.9 KB | 98.9 KB | 175.8 KB | 288.0 KB | 310.8 KB | 529.5 KB |
µBTB 组织细节:
- 每个图节点对应热代码区中的一个分支,保存 taken 与 not-taken 指向下一节点的 link;
- 小 CAM 发现热点“seed”,图建立后可关闭 CAM;
- 热 kernel 完整落入 µBTB 且预测可靠时,µBTB 可 lock 并连续提供 0-bubble 重定向;
- 极高置信时可以 clock-gate mBTB 与 SHP,兼顾吞吐和前端功耗;
- 专利实施例给出 64-entry graph、16-entry seed CAM、最多每周期两个分支,但只有 64-entry M1 是量产演讲明确确认值。
M3/M4/M5 的演进重点:
- M3:µBTB 扩为 128 项;mBTB 加入 1AT(one-bubble always-taken);L2BTB 容量和回填带宽翻倍。
- M4:L2BTB 再翻倍,回填延迟略降、带宽再翻倍;单独对 BBench 带来约 2.8% 性能提升。
- M5:在 predecessor 的 mBTB 记录中复制后继 always-/often-taken 目标,形成 ZAT/ZOT(zero-bubble always/often-taken);由启发式仲裁器在 µBTB 与 ZAT/ZOT 间选择
RAS
| 项目 | M1 | M2 | M3 | M4 | M5 |
|---|---|---|---|---|---|
| 公开容量 | 64 项 call/return stack | 继承类设计;精确值未重新披露 | 64 项 | ND | ND |
| 机制 | 推测 push/pop,并支持错误推测后的多步修复 | 无显著 BP 变化 | 保留 | 保留类结构 | 增加上下文相关目标加密方案的公开技术,但首次量产代际未明确 |
| 与 µBTB 关系 | µBTB 热图内仍配合返回预测 | 同 M1 | µBTB 描述明确含 RAS | ND | ND |
间接分支:VPC
M1 首次引入 VPC:把一个多目标 indirect 转换为多个“虚拟条件分支”并复用 SHP (每个 indirect branch 16 个目标)
M1–M5 的 VPC 对每个间接分支构建目标链。若一个 JavaScript call site 出现数百个目标,完整 VPC 会产生两个问题:
- 训练和逐个虚拟条件分支预测的成本随目标数近似按
O(n)增长 - 目标链大量占用 vBTB,挤压其他分支的容量
M6 保留 VPC 对少目标场景的准确率优势,同时并行启动独立的 indirect target hash table:
实现:
- 大表访问需要数个周期,因此短 VPC 与 hash-table lookup 并行,而不是先把 VPC 链走完再访问大表;
- Figure 8 将 VPC 链缩到 5 个目标,并标出
256 sets × 4 ways的间接目标存储 - 索引不使用普通 SHP 的
GHIST/PHIST/PC组合,因为前驱条件分支与 indirect target 的相关性较弱 - 专用 hash 基于 近期间接分支目标历史
- 该结构把“小目标集合”和“大目标集合”分流:VPC 负责小集合的高准确率与低延迟,大表负责高基数 call site 的容量;
- M6 的 8-wide 后端对前端断流更敏感,因此 target capacity 的边际价值高于再扩大已达 32 KB 的 SHP;
误预测恢复:M5 MRB
M5 增加 Mispredict Recovery Buffer(MRB):
- 对低置信分支记录最可能的后续 3 个 fetch address;
- 当真实误预测重定向命中 MRB 时,连续周期给出这些地址,绕过常规分支预测流水的逐级等待;
- 论文示例中,连续三个短基本块共 14 条指令,传统路径需要 9 cycle 才能取完,MRB 路径只需 5 cycle;
- 第三级仍用正常预测结果校验 MRB 地址,错误时可纠正
分支预测安全
SARC 公开的后期安全方案对 BTB/RAS 中的 target address 做 context-specific 可逆扰乱/加密:
- 密钥混合软件熵、硬件熵、ASID/VMID、安全状态与 Exception Level;
- context switch 时生成
CONTEXT_HASH,只需少量周期; - 写 BTB/RAS 时将 target 与 hash 做流密码式 XOR,并可增加可逆 substitution;
- 其他进程用不同上下文读出时得到无意义地址,从而缓解 cross-training 与 replay;
- 相比每次上下文切换清空整个预测器,可避免全部重新训练的性能成本
前端——取指与 µop 供应
ICache
| 参数 | M1 | M2 | M3 | M4 | M5 | M6 |
|---|---|---|---|---|---|---|
| 容量/相联度 | 64 KB / 4-way | 64 KB / 4-way | 64 KB / 4-way | 64 KB / 4-way | 64 KB / 4-way | 128 KB / 4-way |
| line size | 128 B [A] | ND | ND | ND | ND | |
| I$→Decode 读取带宽 | 24 B/c | 约 24 B/c [B:结构继承] | 48 B/c | ND | 常规路径 ND;UOC 可 6 µop/c | |
| L2→前端带宽 | 16 B/c 级 L2 链路 | 同 M1 | 32 B/c | 32 B/c L2 总带宽 | 32 B/c L2 总带宽 | |
| 保护 | parity [A] | ND | ND | ND | ND | |
| ITLB | 256 pages | 256 | 512 | 512 | 512 | 512 |
分析:
- M3 的 ICache 容量不变,ICache→decoder 带宽翻倍到 48 B/c,同时 InstQ 接近加深一倍;
- M4/M5 没继续增大 Icache,而是分别投资 L2BTB 与 UOC,说明大代码工作集的首要瓶颈被判断为 目标/µop 供应与功耗
AddrQ、InstQ 与 FTQ
| 结构 | M1 | M2 | M3 | M4-M6 |
|---|---|---|---|---|
| 取值地址解耦 | AddrQ,将 branch prediction 与 I$ 解耦 |
继承类设计 | AddrQ;宽前端仍明确使用 |
ND |
| 指令队列 | InstQ,解耦 I$ 与 Decode |
队列有加深类改进,精确容量 ND | InstQ 接近 M2 的 2× 深度 | ND |
AddrQ/UAQ承担现代前端中 FTQ 的一部分作用:保存预测产生的 fetch address 并解耦预测、I$ 和后级
MOP/µop Cache
| 参数 | M1-M4 | M5-M6 |
|---|---|---|
| UOC | 无 | 384 µop,最多 6 µop/c |
| 目标 | — | 对可重复、可预测且能装入有限资源的 kernel 节省 fetch/decode 功耗 |
| 模式 | — | FilterMode / BuildMode / FetchMode |
| FetchMode 关闭单元 | — | I$ 和 Decode;µBTB 足够准确时还可关闭 mBTB |
| admission | — | µBTB 检查可预测性与 footprint,built bit + BuildEdge/FetchEdge/Timer 判定收益 |
- BuildMode 在 µBTB 项中维护
builtbit;基本块写入 UOC 后将状态反向传播给 µBTB; - FetchMode 中由 µBTB 经 UAQ 给 UOC 地址,UOC 直接向后级提供 µop;
- 该设计不是遇到 decode 过的代码就尽量缓存,而是先证明 kernel 可预测、可驻留、可复用,再允许关闭前端
Decode、Rename、Dispatch 与 Issue
Decode 与 µop cache
| 项目 | M1 | M2 | M3 | M4 | M5 | M6 |
|---|---|---|---|---|---|---|
| 指令解码宽度 | 4 inst/c | 4 | 6 | 6 | 6 | 8 |
| Rename/Dispatch | 4 µop/c | 4 | 6 | 6 | 6 | 8 |
| 复杂指令 | multi-µop sequencer | 同类 | 少数指令 cracking;A32 LDM 主要拆为 load-pair µop | ND | ND | |
| Fusion | 未具体披露 | ND | 支持多种 fusion idiom | ND | ND |
分析:
- Samsung 文献在 M3 论文中使用
mop,ISCA 论文使用µop;本文统一称 µop - M5 UOC 的主要能效价值来自**完全关闭**decode
M6 8-wide rename/dispatch 会显著增加:
- 同周期目的寄存器分配和 free-list 带宽;
- dependency-map 读写端口与同组 intra-cycle dependency bypass;
- 向多个分布式 scheduler 的 credit 检查和 steering;
- PRF 读端口、writeback 与 bypass 交叉连接;
- branch checkpoint 和异常元数据写入带宽。
Rename、物理寄存器堆与恢复
| 参数 | M1 | M2 | M3 | M4 | M5 | M6 |
|---|---|---|---|---|---|---|
| Integer PRF | 96×64 bit | 96×64 bit | 192×64 bit | 192 | 192 | 224 |
| FP/Vector PRF | 96 项 | 96 项 | 192×128 bit | 176 项 | 176 项 | 224 |
| Rename 宽度 | 4 | 4 | 6 | 6 | 6 | 8 |
| Integer reg-reg move elimination | 未披露 | 未披露 | 0-cycle:rename remap + reference count | 保留 | 保留 | |
| map recovery | fast map recovery | 同类,细节 ND | 支持更大窗口;checkpoint 数 ND | ND | ND | |
| PRF bank/port | ND | ND | ND | ND | ND |
- M3+ 的 0-cycle integer move elimination 可以减轻 issue/execute/bypass 压力,并提高有效调度窗口利用率
- M4 把 FP PRF 从 192 缩到 176,而整数 PRF、ROB、3×FMAC 都不变
Issue Queue / Scheduler
| 项目 | M1 | M2 | M3 | M4/M5 |
|---|---|---|---|---|
| 整数调度组织 | 7 个分布式 scheduler;总 58 项 | 7 个;总容量未单列,存在队列加深 | 9 个分布式 scheduler;总 126 µop | 精确队列分区/容量 ND |
| M3 分区 | — | — | 4 ALU、1 branch、3 AGU、1 store-data scheduler | 执行单元数公开,队列映射 ND |
| FP scheduler | 32 项 | 约为前代规模;精确值未重新披露 | 62 项 | ND |
| 峰值 issue | 整数侧演讲称最多 7 µop/c | ND | 全核峰值 11 ops/c | ND |
| multidispatch | store address/store data 分送等 | 同类可能性高,细节 ND | 明确支持;dispatcher 需检查各 scheduler credit | ND |
M3 的峰值 11 ops/c 由:
- 4 ALU;
- 1 branch;
- 2 load;
- 1 store;
- 3 FP/vector
M3 的 scheduler 总容量从 58 级增长到 126,约与 ROB 96/100→228 的扩张一致,避免 ROB 变大而 issue window 不变。
[S2] [S3] [S4]
M3 新增流水级的代价
flowchart LR
BP["B0/B1<br/>分支预测"] --> F["F2/F3/F4<br/>取值"]
F --> D["D1/D2/D3<br/>解码"]
D --> RN["RN1/RN2<br/>重命名"]
RN --> DP2["DP2<br/>M3 新增:调度器路由"]
DP2 --> SCH["Schedule"]
SCH --> RR1["RR1"]
RR1 --> RR2["RR2<br/>M3 新增:大 PRF 读/解耦"]
RR2 --> EX["Execute"]
EX --> WB["Writeback"]
- DP2 解决 6-wide dispatch 到更多分布式 scheduler 的布线与分配时序;
- RR2 解决更大 PRF 的读取和 scheduler→ALU 环路时序;
- 结果是 branch mispredict penalty 从 14 c 变为 16 c;
- M3 用更强 predictor(MPKI 下降)、更大窗口和更快执行/缓存来抵偿这两级开销
Execution:执行单元
整数执行
| 项目 | M1/M2 | M3 | M4 | M5 | M6 |
|---|---|---|---|---|---|
| 简单整数 S pipe | 2 | 2 | 2 | 4 | 4 |
| C/CD pipe | 1×CD | 1×CD + 1×C | 同 M3 | 同 M3 | 2CD |
| 直接分支 pipe | 1 | 1 | 1 | 1 | 2 |
| 总算术类整数 pipe | 3 | 4 | 4 | 6 | 6 |
| 整数乘法 | M1 block diagram 有 ALUC 内 iMUL; | 增加第二乘法能力 | ND | ND | |
| 整数除法 | radix-4 | radix-16 | 具体是否再变 ND | ND | |
| 0-cycle move | 无确认 | 有 | 有 | 有 |
- M3 的执行宽度与 6-wide 前端同步扩张;第二 multiplier 和 radix-16 divider主要降低特定运算的结构冲突与长延迟。
- M5 在 decode/retire 仍为 6-wide 时,将简单整数 pipe 从 2 增至 4。可在 load/branch/复杂整数混合下减少 ALU contention
BR仅负责 direct branch;indirect branch 可由 C/CD 类执行资源处理- M6 把 direct-branch-only pipe 从 1 条增至 2 条,同时复杂整数端仍能处理 indirect branch
浮点、SIMD 与加密
| 参数 | M1/M2 | M3 | M4 | M5 | M6 |
|---|---|---|---|---|---|
| 主 FP pipes | 1×128b FMAC + 1×128b FADD | 3×128b FMAC/FADD | 3×FMAC | 3×FMAC | 4×FMAC |
| FP dispatch/issue/execute | 2 ops/c 级 | 3 ops/c | ND | ND | |
| FP scheduler | 32 | 62 | ND | ND | |
| FP PRF | 96 | 192 | 176 | 176 | |
| FMAC / FMUL / FADD latency | 5 / 4 / 3 c | 4 / 3 / 2 c | 4 / 3 / 2 c | 4 / 3 / 2 c | 4 / 3 / 2 c |
| FDIV | radix-4 | radix-64,6 bit/c | ND | ND | |
| 峰值 FLOP | 1 FMAC + 1 FADD 饱和 | 24 SP 或 12 DP FLOP/c | 同为 3 FMAC 级理论资源 | 同为 3 FMAC 级理论资源 | |
| Crypto throughput | 1 | 2 | ND | ND |
- M3 FPU 从异构的
FMAC + FADD变成三条更对称的 128-bit FMAC/FADD 能力,降低调度端口偏置 - 第二 load port 对 M3 FPU 至关重要,否则 3×128b FMAC 很容易被 operand feed 限制
- M6 3→4 FMAC 对应 6→8-wide 的 33.3% 增幅。假设每条均保持 128-bit FMAC 能力,单周期理论峰值可相对 M5 增加三分之一
Load/Store 执行端口
| 代际 | 端口组织 | 峰值含义 |
|---|---|---|
| M1/M2 | 1L + 1S | 1 load/c + 1 store/c |
| M3 | 2L + 1S | 2 load/c + 1 store/c |
| M4/M5/M6 | 1L + 1S + 1G | G 可作 load 或 store:LSU pipe 层面可形成 2L+1S 或 1L+2S,不能同时 2L+2S;持续 store-data/commit 带宽 ND |
- M3 面向 FP/SIMD feed,选择固定第二 load pipe;
- M4/M5 改为 generic pipe,提高对 store-heavy、copy/memset 和混合访存的适应性;
- 该策略以更复杂的 steering、端口冲突仲裁和可能更高的通用 pipe 成本换取 workload mix 灵活性。
- M6 8-wide 机器仍只有 1L+1S+1G。这表明团队可能优先通过 128 KB D$、40 个 outstanding misses、64 B/c L2 和更大 TLB 降低访存停顿,而不是再增加 AGU/cache ports
访存
DCache
| 参数 | M1 | M2 | M3 | M4 | M5 | M6 |
|---|---|---|---|---|---|---|
| 容量 | 32 KB | 32 KB | 64 KB | 64 KB | 64 KB | 128 KB |
| 相联度 | 8-way | 8-way | 8-way | 4-way | 4-way | 8-way |
| line size | 64 B | ND | 默认数据 line 64 B | 64 B 级 | 64 B 级 | |
| load hit | 4 c | 4 c | 4 c | 4 c;load-load cascade 可等效 3 c | 同 M4 | |
| load throughput | 1/c | 1/c | 2/c | LSU pipe 层面最多 2 个 load 候选/c(含 G) | 同 M4 | |
| store throughput | 1/c | 1/c | 1/c | LSU pipe 层面最多 2 个 store-address 候选/c;持续 data/commit ND | 同 M4 | |
| 保护 | ECC | ND | ND | ND | ND |
load-load cascading:
当第一条 load 的结果仅用于生成下一条依赖 load 的地址时,M4+ 可提前一个周期把结果转发给后续 load,使该依赖链中的第一条 load 体现为 3-cycle 有效延迟。普通 consumer 并不都获得 3-cycle L1 hit,因此应写成“3 或 4 cycle”
相联度分析:
M4 在容量仍为 64 KB 时把 8-way 降为 4-way,可能是为了控制 tag/data 访问时序、功耗和端口复杂度
DTLB 与地址翻译
| 层级 | M1 | M2 | M3 | M4 | M5 | M6 |
|---|---|---|---|---|---|---|
| L1 DTLB 总 pages | 32 | 32 | 32 | 48 | 48 | 128 |
| 组织(entries/ways/sectors) | 32/32/1 | 32/32/1 | 32/32/1 | 48/48/1 | 48/48/1 | 128/128/1 |
| L1.5 DTLB 总 pages | — | — | 512 | 512 | 512 | 512 |
| L1.5 组织 | — | — | 128/4/4 | 128/4/4 | 128/4/4 | 128/4/4 |
| Shared L2 TLB 总 pages | 1K | 1K | 4K | 4K | 4K | 8K |
| L2 组织 | 1K/4/1 | 1K/4/1 | 1K/4/4 | 1K/4/4 | 1K/4/4 | 2K/4/4 |
- M3 保留极低延迟的 32-entry L1 DTLB,不直接扩容以免影响 load critical path,而是在后面增加 512-page L1.5 DTLB;
- 共享 L2 TLB 的 page coverage 扩为 4×
- L1 data prefetcher 在虚拟地址域工作并可跨页,因而也会提前触发下一页翻译,形成弱式 TLB prefetch 效果;
- M6 L2 容量不变,但带宽翻倍(64B/c),以支持更宽前端、128 KB L1 refill 与更多并发 miss;
L2/L3 Cache
flowchart TB
subgraph A["M1/M2:4 个大核"]
A0["M core 0<br/>L1I/L1D"]
A1["M core 1<br/>L1I/L1D"]
A2["M core 2<br/>L1I/L1D"]
A3["M core 3<br/>L1I/L1D"]
AL2["2 MB shared L2<br/>16-way / 4 banks<br/>22 c"]
A0 --> AL2
A1 --> AL2
A2 --> AL2
A3 --> AL2
end
subgraph B["M3:4 个大核"]
B0["M3 core + 512 KB pL2"]
B1["M3 core + 512 KB pL2"]
B2["M3 core + 512 KB pL2"]
B3["M3 core + 512 KB pL2"]
BL3["4 MB shared L3<br/>4×1 MB slices<br/>exclusive / NUCA"]
B0 --> BL3
B1 --> BL3
B2 --> BL3
B3 --> BL3
end
subgraph C["M4/M5:2 个自研大核"]
C4["M4:每核 1 MB pL2<br/>3 MB L3"]
C5["M5:双核共享 2 MB L2<br/>3 MB L3"]
end
| 项目 | M1/M2 | M3 | M4 | M5 | M6 |
|---|---|---|---|---|---|
| L2 | 2 MB/16w,四核共享 | 512 KB/8w,每核私有 | 1 MB/8w,每核私有 | 2 MB/8w,双核共享 | 2 MB/8w,双核共享 |
| L2 latency | 22 c | 12 c | 12 c | 13.5 c | 13.5 c |
| L3 | 无 | 4 MB/16w/4 bank | 3 MB/16w/3 bank | 3 MB/12w/2 bank | 4 MB/16w/2 bank |
| L3 latency | — | 37 c typical | 37 c | 30 c | |
| L3 关系 | — | 对 L2 exclusive | 外层独占管理类设计 | 外层独占管理类设计 | |
| BIU 并发事务 | 56 | 80 | ND | ND |
协同 exclusive cache 管理
M3+ 的外层 L3 采用 exclusive hierarchy。简单 exclusive cache 会在上下层交换数据时丢失“真实复用程度”,Samsung 的方案是让 L2 记录:
- L2 中的命中频度;
- 从 L3 重新分配回来的行为;
- demand 与 prefetch 的不同 reuse/dead 元数据
L2 castout 时据此选择:
- 以较高 replacement priority 分配到 L3
- 普通优先级分配
- 完全不分配
分析:
- M3 的 512 KB 私有 L2 + 4 MB L3 是用层次复杂度换取 “12-cycle 近端容量 + 大共享容量”
- M5 的 L3 延迟降到 30 c,而 L2 变为双核共享且略慢
数据预取器
L1 预取算法
- 对 demand load miss 训练
- 在虚拟地址域识别多分量 multi-stride
- 允许跨页预取,并顺带提前 load 翻译
- 多 load pipe 产生的乱序地址先经类似 ROB 的结构重排回程序顺序;(可能影响 timeliness)
- 同 cache-line 地址用 filter 去重
- 用 confirmation 与内存延迟动态调整 prefetch degree
- demand 追上 prefetch 流时跳过 late 请求
| 代际 | 主要演进 |
|---|---|
| M1 | multi-stride;动态 degree;one-pass/two-pass;stream/copy 优化 |
| M2 | 主结构延续 |
| M3 | enhanced/hybrid multi-stride;新增 SMS;integrated confirmation;更多 outstanding miss |
| M4 | L2 加 Buddy;MAB 扩大 miss concurrency |
| M5 | 在下层缓存旁增 standalone prefetcher,观察 I+D 全局流,并采用低/高置信两态自适应 |
One-pass / Two-pass
Two-pass 首次预取只向 L2 发 fill,不占 L1 miss buffer;同一地址第二次预取时,待 L1 buffer 空闲后再从 L2 填入 L1。若检测到大量第一次请求本就在 L2 命中,则切到 one-pass,避免浪费 L2 带宽和功耗
flowchart LR
P["L1 prefetch 生成"] --> MODE{"模式"}
MODE -->|"two-pass"| L2F["先填 L2<br/>不占 L1 miss buffer"]
L2F --> Q["second-pass queue"]
Q --> L1F["buffer 可用后填 L1"]
MODE -->|"one-pass"| Q2["先记录地址"]
Q2 --> L1F2["buffer 可用时直接发 L1 fill"]
M3: SMS
SMS(Spatial Memory Streaming):
- 记录 region 的 primary load;
- 把同区域、不同 PC 的关联 miss offset 挂接到 primary load;
- primary PC 再出现时重放高置信 offset;
- 低置信时只发 first-pass L2 prefetch;
- multi-stride 已覆盖时抑制 SMS 重复训练
M4: Buddy
- L2 tag 以 128 B sector 组织,数据仍为两个 64 B sector;
- demand miss 时预取相邻 64 B buddy;
- tag sector 已存在,不会因 buddy 数据无效产生额外 tag pollution;
- filter 观察“是否经常跳过邻居”,无收益时关闭,以控制 DRAM 带宽
M5: standalone lower-level prefetcher
- 观察 lower cache level 的 instruction、data、demand 与 core-prefetch 全局流;
- 在物理地址上训练,采用更大结构识别长而复杂的 stream;
- 通过跨 4 KB 页复用学习结果,缓解物理页边界截断;
- 低置信时只生成“phantom prefetch”到 filter,不积极发内存请求
- 高置信后积极请求,并用 cache tag metadata 追踪 prefetched/used 状态
- 应用 phase 变化或准确率下降时退回低置信模式
LSQ、Store Buffer 与访存违例队列
| 结构 | M1 | M2 | M3 | M4 | M5 |
|---|---|---|---|---|---|
| Store Buffer | 约 16 [B] | 约 16 [B] | 32 [A,官方称 doubled] | ND | ND |
| Load/store hazard queue | ND | ND | 32 项 [A] | ND | ND |
| OoO load/store | 支持 | 支持 | 支持且窗口更深 | 支持类设计 | 支持类设计 |
MSHR、Fill Buffer 与 MAB
| 参数 | M1 | M2 | M3 | M4 | M5 | M6 |
|---|---|---|---|---|---|---|
| 公开 outstanding L1 misses | 8 | 未单列 | 12 | 32 | 未单列 | 40 |
| 机制 | fill buffer | 同类 | 扩大 miss 能力 | data-less MAB;fill data 仅留在 D$ | ND | 40 并发能力 |
- fill buffer 可能同时保存地址、状态和数据,面积随并发增长很快;
- M4 改成 data-less Memory Address Buffer(MAB),数据只落在 D$,因此能把并发能力扩到 32;
Write Buffer / Writeback
| 项目 | 公开状态 |
|---|---|
| Store Buffer | M3=32;M1/M2 约 16 |
| store commit→cache 的 drain 带宽 | M1/M3: 1 store/c |
主存访问延迟优化
Exynos 路径含 core、coherent interconnect、memory controller 三个电压/频率域,往返通常跨越四次异步边界。M4/M5 用不同手段缩短关键 read;
M4:DRAM→CPU Cluster Fast Path
- 为返回数据提供专用旁路;
- 绕过若干 cache return path 与 interconnect queue;
- 把返回方向经过两个 interconnect 异步 crossing 的路径压缩为一个直接 crossing
M5:Speculative Cache Lookup Bypass
类似于 Cache Level Prediction
- demand load miss、I$ miss、page walk 等 latency-critical request,在本地 cache tag search 同时就向 coherent interconnect 推测发出;
- interconnect snoop-filter directory 作为第二级“纠错预测器”;
- 若目录表明数据可能仍在被旁路的 cache 中,则取消推测 DRAM request;
- 对关键 read 还通过 sideband 提前发 page activate hint;内存控制器在高负载时可忽略。
flowchart LR
R["Latency-critical read"] --> L["本地 L2/L3 tag search"]
R --> S["并行推测发往 coherent interconnect"]
S --> DIR{"Snoop-filter directory<br/>可能在缓存?"}
DIR -->|"是"| CANCEL["取消 DRAM 推测请求"]
DIR -->|"否"| DRAM["继续 DRAM read"]
R --> ACT["Sideband early page activate hint"]
ACT --> DRAM
同频下平均 load latency
| M1 | M2 | M3 | M4 | M5 | M6 |
|---|---|---|---|---|---|
| 14.9 c | 13.8 c | 12.8 c | 11.1 c | 9.5 c | 8.3 c |
数据来自所有核心固定 2.6 GHz 的 trace-driven cycle-accurate model
Commit、ROB 与异常
ROB 与 Retire
| 参数 | M1 | M2 | M3 | M4 | M5 | M6 |
|---|---|---|---|---|---|---|
| ROB | 96 | 100 | 228 | 228 | 228 | 256 |
| Retire | 4 µop/c | 4 | 6 | 6 | 6 | 8 µop/c |
| Decode/Rename/Retire | 4/4/4 | 4/4/4 | 6/6/6 | 6/6/6 | 6/6/6 | 8/8/8 |
| fast map recovery | 明确有 | 细节 ND | 支持大窗口,细节 ND | ND | ND | ND |
| branch penalty | 14 c | 14 c | 16 c | 16 c | 16 c | 16 c |
- M3 ROB 变为 M1 的 2.375×,同时 scheduler、PRF、TLB、缓存和 BP 都扩张,否则单独加 ROB 难以获得同等收益;
- M6 retire width 增长 33.3%,ROB 只增长 12.3%。在持续 8-wide retire 的理想条件下,整个 ROB 可在 32 cycle 排空,少于 M5 的 38 cycle。这表明 M6 更偏向提升峰值吞吐
功耗管理
- µBTB 高置信时 clock-gate mBTB/SHP;
- M5 UOC FetchMode 关闭 I$、decode,必要时关闭 mBTB;
- M5 Empty Line Optimization 跳过无分支 BTB line;
- prefetch 动态 degree、one/two-pass、低置信 phantom mode 控制无效请求;
- Buddy filter 与推测 DRAM cancel 机制控制带宽;
- M3 设计明确大量使用 clock gating。
- M6 没有硅后功耗、频率或热持续性数据;8-wide、双 128 KB L1 和 561.5 KB BP 的 PPA 只能视为设计目标,不能据模型 IPC 判定能效
分代分析
M1
M1 的目标是 clean-sheet、可量产、性能/功耗平衡。其最特色的设计是将:
- 小热 kernel:交给零气泡 µBTB;
- 中等代码:交给 mBTB + SHP;
- 大 footprint:交给 L2BTB;
- 稠密分支行:交给 vBTB
这种按工作集分层的前端在第一代已经很成熟,并通过关闭主预测器来直接节能。Hot Chips 资料还给出每核低于约 3 W
M2
- 14 nm→10 nm LPE;
- ROB 96→100;
- 同频模型平均 load latency 14.9→13.8 c
M2 最初计划为 M1 shrink;在 M3 开发推进后,团队把一部分可控的新特性提前拉入 M2
M3
- 4→6-wide throughout;
- ROB 100→228;
- Int/FP PRF 96→192;
- 整数 scheduler 约 58→126,7→9 个分区;
- 峰值 11 ops/c;
- 1L+1S→2L+1S;
- FPU 1 FMAC+1 FADD→3 FMAC;
- D$ 32→64 KB;
- 新增 512-page L1.5 DTLB,L2 TLB 1K→4K;
- 共享 2 MB L2→每核 512 KB L2 + 4 MB L3;
- 分支 MPKI 3.92→3.29;
- 新增 DP2、RR2,误预测代价 14→16
M3 明确选择:接受两级额外流水,用 predictor、窗口与低延迟 cache 抵偿
M4
- L2BTB 容量再翻倍,fill latency 略降、fill bandwidth 2×;
- DTLB 32→48;
- D$ 保持 64 KB,但 8-way→4-way;
- LSU 由 2L+1S 改为 1L+1S+1G;
- 私有 L2 512 KB→1 MB;
- L3 4 MB→3 MB,对应大核簇 4→2;
- load-load cascading;
- outstanding miss 12→32,使用 data-less MAB;
- Buddy L2 prefetcher;
- DRAM→CPU cluster fast path;
- 平均 load latency 12.8→11.1 c
M4 更侧重优化 更大代码 footprint、更多并发 cache miss 和跨电源域主存路径
M5
- 简单整数 S pipe 2→4;
- 双核共享 2 MB L2,3 MB L3 延迟降到 30 c;
- SHP 16→32 KB,16×2048 权重;
- ZAT/ZOT、Empty Line Optimization、µBTB/mBTB 启发式仲裁;
- MRB;
- 384-entry UOC;
- standalone lower-level I+D prefetcher;
- speculative cache lookup bypass;
- early page activate hint;
- 平均 load latency 11.1→9.5 c
M5 更侧重于设计预测驱动的路径编排
M6
M6 没有产品化
- 5 nm 设计节点、2.8 GHz target;
- 8-wide Decode/Rename/Retire;
- ROB 256,Integer/FP PRF 均 224;
- 4S + 2CD + 2BR,4×FMAC
- 128 KB 4-way I$ ,128 KB 8-way D $;
- 双核共享 2 MB 8-way L2,64 B/c;
- 4 MB 16-way、2-bank L3;
- 128-page L1 DTLB,512-page L1.5 DTLB,8K-page shared L2 TLB;
- mBTB +50%,L2BTB 451.0 KB,BP 总逻辑存储 561.5 KB;
- 短 VPC + 1,024-slot indirect target hash table;
- 40 outstanding L1 misses;
- 模型平均 load latency 8.3 c,平均 IPC 2.71
参考资料
主要论文、演讲与产品页
| 文献 | 覆盖 | 最有价值内容 |
|---|---|---|
| ISCA 2020《Evolution of the Samsung Exynos CPU Microarchitecture》 | M1–M6;M1–M5 量产,M6 completed design | 代际总表;M6 8-wide/L1/TLB/端口;SHP/BTB/Hybrid indirect;MRB;安全 target encryption;UOC;prefetch/MAB/DRAM;IPC 与 load latency 模型 |
| Hot Chips 28《Samsung Exynos M1 Processor》 | M1 | 精确前端、scheduler、PRF、D$/L2、端口、流水级 |
| Hot Chips 30《Samsung M3 Processor》 | M3 | 4→6-wide、前端带宽、scheduler、FPU、LSU、cache hierarchy、面积 |
| IEEE Micro 2019《Samsung M3 Processor》 | M1/M2 开发史与 M3 | POR/M3+ 方法、hazard queue 时序取舍、RTL/模型相关性、功耗哲学 |
| Samsung Exynos 产品页 | SoC 映射 | 制程、核心拓扑、产品级频率/定位 |
[S1] Brian Grayson et al., Evolution of the Samsung Exynos CPU Microarchitecture, ISCA 2020 Industry Track. 论文注明所有作者在相关核心开发期间任职于 Samsung SARC,并获 Samsung 支持发表。
[S2] Brad Burgess, Samsung Exynos M1 Processor, Hot Chips 28, 2016.
[S3] Jeff Rupley, Samsung M3 Processor, Hot Chips 30, 2018.
[S4] Jeff Rupley, Brad Burgess, Brian Grayson, Gerald Zuraski Jr., Samsung M3 Processor, IEEE Micro 39(2), 2019, DOI: 10.1109/MM.2019.2897556.
[S5] Samsung Semiconductor, Exynos 8895 产品页.
[S6] Samsung Semiconductor, Exynos 9810 产品页.
[S7] Samsung Semiconductor, Exynos 9820 产品页.
[S8] Samsung Semiconductor, Exynos 9825 产品页.
[S9] Samsung Semiconductor, Exynos 990 产品页.
[S10] Samsung Semiconductor, Exynos 8890 官方访谈/产品说明,确认 4×2.6 GHz Samsung custom CPU + 4×Cortex-A53、14 nm 与 Samsung Coherent Interconnect。
[S11] Yonhap News Agency, Samsung shuts down custom CPU development project in U.S., 2019-11-05。报道引用 Samsung 官员,确认停止美国 custom CPU core 开发,并披露 Austin/San Jose 团队裁撤安排。
[S12] Samsung Global Newsroom, Samsung Sets New Standard for Flagship Mobile Processors With Exynos 2100, 2021-01-12。官方确认 Exynos 2100 采用 Cortex-X1、Cortex-A78 与 Cortex-A55,并进入量产。
[S13] Samsung Global Newsroom, Samsung Introduces Game Changing Exynos 2200 Processor With Xclipse GPU Powered by AMD RDNA 2 Architecture, 2022-01-18。官方确认 Exynos 2200 采用 Cortex-X2、Cortex-A710 与 Cortex-A510。
报道
[R1] Hadlee Simons, Android Authority, Samsung was working on at least two new custom CPUs before shutdown, 2020-04-15。报道记录四份 LinkedIn 履历均提到 Mongoose M6,其中一份提到 Mongoose M7;其 2021/2022 产品年份判断为媒体推测,不是 Samsung 官方路线图。
Samsung 专利
| 专利 | 对应技术 | 机制要点 | 对应 Arch |
|---|---|---|---|
| US10402200B2 | 零气泡 µBTB | 图节点保存 T/N link;seed CAM 发现热循环;decoupling queue;可关主前端 | M1 |
| US10846097B2 | MRB | 保存误预测恢复后的候选 fetch address 序列,连续重启取值 | M5 |
| US11169810B2 | Predictive UOC allocation | 只为可重复、可预测、可装入的代码段建立 UOC;允许关闭 I$/decode | M5 |
| US20200210626A1 | Secure branch predictor | context-specific key 加密 BTB/RAS target,防跨上下文训练与 replay | - |
| US10031851B2 | Prefetch address reordering | 以程序序分配 tag,OoO 地址到达后链接/重排,过滤同 line 重复 | M 系列 L1 prefetch 基线 |
| US9665491B2 | Adaptive prefetch degree | 按确认率、延迟和压力动态调节预取距离/degree | M1 起 |
| US9569361B2 | Prefetch chaining | 虚拟地址预测、翻译后按层次选择请求,支持跨页与多级填充 | |
| US10417130B2 | SMS training | primary load + associated offset + confidence | M3 |
| US10387320B2 | Integrated confirmations | 由最后确认地址和 pattern 生成小窗口确认项,替代巨大队列 | M3 |
| US10606752B2 | Exclusive cache coordination | 上下层传递 reuse/dead、demand/prefetch 元数据,指导 L3 分配优先级 | M3+ |
| US11055221B2 | Speculative DRAM read | cache lookup 与 DRAM 请求并行;互连目录负责取消错误推测 | M5 |
[P1] Samsung Electronics, US10402200B2 — High performance zero bubble conditional branch prediction using micro branch target buffer.
[P2] Samsung Electronics, US10846097B2 — Mispredict recovery apparatus and method for branch and fetch pipelines.
[P3] Samsung Electronics, US11169810B2 — Micro-operation cache using predictive allocation.
[P4] Samsung Electronics, US20200210626A1 — Secure branch predictor with context-specific learned instruction target address encryption.
[P5] Samsung Electronics, US10031851B2 — Address re-ordering mechanism for efficient pre-fetch training in an out-of-order processor.
[P6] Samsung Electronics, US9665491B2 — Adaptive mechanism to tune the degree of pre-fetch streams.
[P7] Samsung Electronics, US9569361B2 — Pre-fetch chaining.
[P8] Samsung Electronics, US10417130B2 — System and method for spatial memory streaming training.
[P9] Samsung Electronics, US10387320B2 — Integrated confirmation queues; US10606752B2 — Coordinated cache management policy for an exclusive cache hierarchy.
[P10] Samsung Electronics, US11055221B2 — Speculative DRAM read, in parallel with cache level search, leveraging interconnect directory