[AI][昇腾950]核间同步原理介绍

📅 2026/7/2 2:29:19
[AI][昇腾950]核间同步原理介绍
DaVinci 950 跨核同步性能提升深度分析第1章 硬件同步机制1.1 FFTS (Fast Fine-Grained Task Scheduler) 架构D950 引入了片内专用同步硬件 FFTS实现零总线延迟的跨核同步┌─────────────────────────────────────────────────────────────────────┐ │ D950 SoC │ │ │ │ ┌─ Block 0 ──────┐ ┌─ Block 1 ──────┐ ┌─ Block M-1 ────┐ │ │ │ CubeCore │ │ CubeCore │ │ CubeCore │ │ │ │ VecCore (×2) │ │ VecCore (×2) │ │ VecCore (×2) │ │ │ └────┬────────────┘ └────┬────────────┘ └────┬───────────┘ │ │ │ │ │ │ │ │ SET_CROSS_CORE │ SET_CROSS_CORE │ │ │ └──────────────────────┼──────────────────────┘ │ │ │ │ │ ▼ │ │ ┌──────────────────────┐ │ │ │ FFTS │ │ │ │ (片内专用同步硬件) │ │ │ │ │ │ │ │ flag_id 0: counter │ │ │ │ flag_id 1: counter │ │ │ │ ... │ │ │ │ flag_id 15: counter │ │ │ │ │ │ │ │ 每核每ID: │ │ │ │ 4-bit counter (0~15)│ │ │ │ 收集逻辑 (Mode 0~3) │ │ │ │ 自动唤醒机制 │ │ │ └──────────────────────┘ │ │ │ │ │ WAIT_FLAG_DEV │ WAIT_FLAG_DEV │ │ ┌──────────────────────┼──────────────────────┐ │ │ ▼ ▼ ▼ │ │ Core 0 唤醒 Core 1 唤醒 Core M-1 唤醒 │ └─────────────────────────────────────────────────────────────────────┘1.2 SET_CROSS_CORE 指令SET_CROSS_CORE.pipe Xt // Xt[11:8] flag_id, Xt[5:4] sync_mode特征说明延迟~1-2 cycle(写片内 FFTS 计数器)阻塞非阻塞(发出即继续执行)可用管线M, MTE1, MTE2, F (不可 S)目标FFTS 硬件计数器 (不经过 GM/系统总线)Xt 编码Xt[63:0]: ┌──────────────────────┬───────┬───────┐ │ ... 忽略 ... │ flag │ mode │ │ │ ID │ │ │ │[11:8] │ [5:4] │ └──────────────────────┴───────┴───────┘ flag_id: 0~15 (4-bit, 最大计数 15, 不可溢出) sync_mode: 见下节1.3 四种同步模式Mode 0 (Inter-Block): 所有 M 个 Block 互相同步 ┌──── Block 0 ────┐ ┌──── Block 1 ────┐ │ Core A │ │ Core B │ │ SET ─────────→ │ │ SET ─────────→ │ │ FFTS ←─┼────┤──→ FFTS │ │ counter│ │ counter │ │ 2 │ │ 2 │ │ WAIT ←─────── │ │ WAIT ←─────── │ │ (到齐, 继续) │ │ (到齐, 继续) │ └─────────────────┘ └─────────────────┘ Mode 1 (Inter-SubBlock): 同组 N 个 SubBlock 间同步 ┌── Block X ──┐ │ SB0 ↘ │ │ SB1 FFTS │ │ ... ↙ │ │ SBN-1 │ └─────────────┘ Mode 2 (Intra-Block): 单 Block 内 Block↔SubBlock 同步 ┌── Block X ──┐ │ Block ↕ │ │ SB0..N │ └─────────────┘ Mode 3 (Unicast Block): SubBlock→Block 单播 (不等收集) SB ──→ FFTS ──→ Block (立即转发, 不等其他 SB)ModeXt[5:4]名称粒度收集逻辑02’b00Inter-Block跨 Block所有 Block SET 到齐后才递增12’b01Inter-SubBlockBlock 组内同组 SubBlock 全部 SET22’b10Intra-BlockBlock 内部Block↔SubBlock 双向32’b11Unicast Block单播1 个 SET 即递增, 不等收集1.4 WAIT_FLAG_DEV 指令WAIT_FLAG_DEV.pipe Xt // 寄存器版本 WAIT_FLAG_DEVI.pipe #uimm8 // 立即数版本特征说明行为阻塞等待FFTS 对应 flag_id 的 counter 0唤醒硬件自动唤醒 (counter 0 时)计数器操作唤醒后 counter - 1 (自动消耗)可用管线S, M, MTE1, MTE2, F(全管线!)1.5 D950 同步时序D950 跨核 Barrier 时序 (4 核 Inter-Block, flag_id5): T0 Core A: SET_CROSS_CORE.M X10 // 1 cycle, 非阻塞! T0 Core A: 继续做其他计算... // 不等! T5 Core B: SET_CROSS_CORE.M X10 // 1 cycle T5 Core B: 继续做其他计算... T10 Core C: SET_CROSS_CORE.M X10 // 1 cycle T15 Core D: SET_CROSS_CORE.M X10 // 1 cycle FFTS: counter[5] 4 M (到齐!) T15 Core A: WAIT_FLAG_DEVI.M 0x50 // counter40 → 立即返回! Core A: counter[5] - 1 → 3 T15 Core B: WAIT_FLAG_DEVI.M 0x50 // counter30 → 立即返回! Core B: counter[5] - 1 → 2 T15 Core C: WAIT_FLAG_DEVI.M 0x50 // counter20 → 立即返回! Core C: counter[5] - 1 → 1 T15 Core D: WAIT_FLAG_DEVI.M 0x50 // counter10 → 立即返回! Core D: counter[5] - 1 → 0 总同步延迟: ~1 cycle (WAIT 命中时)第2章SET_INTRA_BLOCK — Mix-Mode 核内同步2.1 用途Mix-Mode Block (1 CubeCore 1~2 VecCore) 内 CubeCore↔VecCore 的轻量同步。SET_INTRA_BLOCKI.pipe #ID // ID: 0~15 WAIT_INTRA_BLOCKI.pipe #ID2.2 机制CubeCore (Block X) VecCore (Block X) ┌───────────────────┐ ┌───────────────────┐ │ │ │ │ │ SET_INTRA_BLOCK │── ID 3 ─→│ counter[3] 1 │ │ (CubeCore 的 │ │ (VecCore 的 ID 3 │ │ counter 由 │ │ counter 由 │ │ VecCore SET │ │ CubeCore SET │ │ 来递增) │ │ 来递增) │ │ │←─ ID 3 ──│ SET_INTRA_BLOCK │ │ counter[3] 1 │ │ │ │ │ │ │ │ WAIT_INTRA_BLOCK │ │ WAIT_INTRA_BLOCK │ │ (counter0 → -1) │ │ (counter0 → -1) │ └───────────────────┘ └───────────────────┘ 延迟: ~1-2 cycle (片内互连, 不出 Block)第3章根因总结3.1 D950 性能提升的 4 个硬件根因┌────────────────────────────────────────────────────────────────────┐ │ D950 跨核同步性能提升的硬件根因 │ ├────────────────────────────────────────────────────────────────────┤ │ │ │ Root Cause 1: 专用硬件 vs 通用总线 │ │ ───────────────────────────────────── │ │ V220: ATOM/RED 走系统总线 → 延迟不可控 (50-200 cyc) │ │ D950: FFTS 片内计数器 → 固定 1-2 cycle │ │ 本质: 同步从内存事务变成寄存器写 │ │ │ │ Root Cause 2: 事件驱动 vs 轮询驱动 │ │ ───────────────────────────────────── │ │ V220: LD CMP JUMP 循环轮询 → 延迟×次数, 空转Core │ │ D950: WAIT 硬件阻塞, counter0 自动唤醒 → 零空转 │ │ 本质: 从问有没有变成等通知 │ │ │ │ Root Cause 3: 全管线可用 vs 仅 S 管线 │ │ ───────────────────────────────────── │ │ V220: ATOM/CMP/JUMP 全在 S 管线 → 其他管线空闲 │ │ D950: SET/WAIT 可在 M/MTE1/MTE2/F/S 执行 → 与计算并行 │ │ 本质: 同步不阻塞计算管线 │ │ │ │ Root Cause 4: O(N) 可扩展性 │ │ ───────────────────────────────────── │ │ V220: N 核 N×ATOM O(N²) poll (总线竞争恶化) │ │ D950: N 核 N×SET N×WAIT O(N), 硬件并行收集 │ │ 本质: FFTS 收集逻辑是硬件并行的, 不增加延迟 │ │ │ └────────────────────────────────────────────────────────────────────┘3.2 硬件代价D950 为此付出的硬件成本资源代价FFTS 计数器每核 16 个 flag_id × 4-bit counter × 4 种 mode 小面积片内互连Core↔FFTS 专用路径, 不复用系统总线SET/WAIT 指令ISA 编码空间 各管线解码逻辑全管线支持M/MTE1/MTE2/F/S 都需 SET/WAIT 接口这些代价相对于性能提升100-200x 同步延迟降低是极低成本的投入。3.3 SPR 配置(内部实现)FFTS_BASE_ADDR 必须在首次 SET_CROSS_CORE 前配置: CubeCore: SPR.FFTS_BASE_ADDR 0x0002_1B00_0008 ONLY_COREID × 0x20000 VecCore: SPR.FFTS_BASE_ADDR 0x0002_1B01_0008 ONLY_COREID × 0x20000 配置示例: MOV_SPR2X X0, ONLY_COREID MOVI X1, 0x0002 SHLI X2, X0, 17 OR X3, X1, X2 ADDI X3, X3, 0x1B000008 MOV_X2SPR X3, FFTS_BASE_ADDR