HIVM 同步体系总览【免费下载链接】cannbot-skillsCANNBot 是面向 CANN 开发的用于提升开发效率的系列智能体本仓库为其提供可复用的 Skills 模块。项目地址: https://gitcode.com/cann/cannbot-skills关键词Synchronization, Pipe Sync, Block Sync, FFTS, UnitFlag, Event ID, InjectSync, GraphSyncSolver概述HIVM 同步体系是 AscendNPU-IR 中协调多 Pipeline、多 Core、多 Block 之间数据依赖的核心机制。由于 NPU 采用多 Pipeline 并行执行架构MTE1/MTE2/MTE3/M/V 等不同 Pipeline 上的操作之间存在数据依赖需要通过同步原语来保证执行顺序的正确性。HIVM 同步体系分为三个层次管道同步Pipe Synchronization同一 Block 内不同 Pipeline 之间的同步通过 Event ID 机制实现。这是最基础、最常用的同步层次。跨核同步Block Synchronization不同 Block 之间的同步通过 FFTSFast Flag Transfer System机制实现。用于多 Block 协作计算场景。UnitFlag 同步处理循环中至少执行一次依赖的特殊同步模式通过 UnitFlag 条件控制。同步操作层次┌─────────────────────────────────────────────────┐ │ 跨核同步 (Block Sync) │ │ sync_block / sync_block_set / sync_block_wait │ │ create_sync_block_lock / sync_block_lock/unlock │ ├─────────────────────────────────────────────────┤ │ 管道同步 (Pipe Sync) │ │ set_flag / wait_flag / pipe_barrier │ ├─────────────────────────────────────────────────┤ │ UnitFlag 同步 │ │ unit_flag_cond / unit_flag_mode │ │ (嵌入在宏操作中) │ └─────────────────────────────────────────────────┘管道同步管道同步是 HIVM 中最细粒度的同步机制用于同一 Block 内不同 Pipeline 之间的协调。核心操作操作助记符说明SetFlagOphir.set_flag在 set_pipe 上设置 Event FlagWaitFlagOphir.wait_flag在 wait_pipe 上等待 Event FlagPipeBarrierOphir.pipe_barrierPipeline 屏障等待该 Pipe 所有操作完成Event ID 机制每个 Pipe 有 8 个 Event IDEVENT_ID0 ~ EVENT_ID7用于区分不同的同步点。set_flag和wait_flag通过 Event ID 配对使用set_flag[set_pipe, wait_pipe, event_id]在 set_pipe 上发送信号wait_flag[set_pipe, wait_pipe, event_id]在 wait_pipe 上等待信号Event ID 可以是静态的编译时确定的#hivm.eventEVENT_IDx或动态的运行时计算的 i64 值。跨核同步跨核同步用于不同 Block 之间的协调基于 FFTS 机制。核心操作操作助记符说明SyncBlockOphir.sync_block高层跨核同步支持多种模式SyncBlockSetOphir.sync_block_set发送跨核同步信号SyncBlockWaitOphir.sync_block_wait等待跨核同步信号CreateSyncBlockLockOphir.create_sync_block_lock创建跨核锁SyncBlockLockOphir.sync_block_lock获取跨核锁SyncBlockUnlockOphir.sync_block_unlock释放跨核锁SyncBlockMode模式值说明ALL_CUBE0所有 Cube Core 同步ALL_VECTOR1所有 Vector Core 同步ALL_SUB_VECTOR2所有 Sub-Vector 同步BARRIER_CUBE3Cube-Cube 屏障同步BARRIER_VECTOR4Vector-Vector 屏障同步ALL5所有 AIC/AIV 同步FFTS 机制FFTSFast Flag Transfer System是 AscendNPU 的硬件同步机制。每个 Block 有一个 FFTS 基地址ffts_base_addrFFTS 收集特定 flag_id 后将其设置回 Block 组中的 Block实现同步。在 Ascend910B 及以上平台上ffts_base_addr必须通过hir.set_ffts_base_addr设置。UnitFlag 同步UnitFlag 是嵌入在宏操作如 mmadL1中的同步机制用于处理循环中至少执行一次的依赖场景。详见 03-unit-flag.md。自动同步注入HIVM 编译器提供两个自动同步注入 PassInjectSync Pass基于启发式规则在操作前后自动插入set_flag/wait_flag。GraphSyncSolver Pass基于图的同步求解器构建操作依赖图后求解最优同步方案。详见 04-sync-injection.md。操作列表操作助记符详细文档SetFlagOphir.set_flag01-pipe-sync.mdWaitFlagOphir.wait_flag01-pipe-sync.mdPipeBarrierOphir.pipe_barrier01-pipe-sync.mdSyncBlockOphir.sync_block02-block-sync.mdSyncBlockSetOphir.sync_block_set02-block-sync.mdSyncBlockWaitOphir.sync_block_wait02-block-sync.mdCreateSyncBlockLockOphir.create_sync_block_lock02-block-sync.mdSyncBlockLockOphir.sync_block_lock02-block-sync.mdSyncBlockUnlockOphir.sync_block_unlock02-block-sync.md相关文档源码参考HIVMSynchronizationOps.td测试用例sync-ops.mlir【免费下载链接】cannbot-skillsCANNBot 是面向 CANN 开发的用于提升开发效率的系列智能体本仓库为其提供可复用的 Skills 模块。项目地址: https://gitcode.com/cann/cannbot-skills创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
CANN/cannbot-skills: HIVM 同步体系总览
发布时间:2026/7/11 12:45:24
HIVM 同步体系总览【免费下载链接】cannbot-skillsCANNBot 是面向 CANN 开发的用于提升开发效率的系列智能体本仓库为其提供可复用的 Skills 模块。项目地址: https://gitcode.com/cann/cannbot-skills关键词Synchronization, Pipe Sync, Block Sync, FFTS, UnitFlag, Event ID, InjectSync, GraphSyncSolver概述HIVM 同步体系是 AscendNPU-IR 中协调多 Pipeline、多 Core、多 Block 之间数据依赖的核心机制。由于 NPU 采用多 Pipeline 并行执行架构MTE1/MTE2/MTE3/M/V 等不同 Pipeline 上的操作之间存在数据依赖需要通过同步原语来保证执行顺序的正确性。HIVM 同步体系分为三个层次管道同步Pipe Synchronization同一 Block 内不同 Pipeline 之间的同步通过 Event ID 机制实现。这是最基础、最常用的同步层次。跨核同步Block Synchronization不同 Block 之间的同步通过 FFTSFast Flag Transfer System机制实现。用于多 Block 协作计算场景。UnitFlag 同步处理循环中至少执行一次依赖的特殊同步模式通过 UnitFlag 条件控制。同步操作层次┌─────────────────────────────────────────────────┐ │ 跨核同步 (Block Sync) │ │ sync_block / sync_block_set / sync_block_wait │ │ create_sync_block_lock / sync_block_lock/unlock │ ├─────────────────────────────────────────────────┤ │ 管道同步 (Pipe Sync) │ │ set_flag / wait_flag / pipe_barrier │ ├─────────────────────────────────────────────────┤ │ UnitFlag 同步 │ │ unit_flag_cond / unit_flag_mode │ │ (嵌入在宏操作中) │ └─────────────────────────────────────────────────┘管道同步管道同步是 HIVM 中最细粒度的同步机制用于同一 Block 内不同 Pipeline 之间的协调。核心操作操作助记符说明SetFlagOphir.set_flag在 set_pipe 上设置 Event FlagWaitFlagOphir.wait_flag在 wait_pipe 上等待 Event FlagPipeBarrierOphir.pipe_barrierPipeline 屏障等待该 Pipe 所有操作完成Event ID 机制每个 Pipe 有 8 个 Event IDEVENT_ID0 ~ EVENT_ID7用于区分不同的同步点。set_flag和wait_flag通过 Event ID 配对使用set_flag[set_pipe, wait_pipe, event_id]在 set_pipe 上发送信号wait_flag[set_pipe, wait_pipe, event_id]在 wait_pipe 上等待信号Event ID 可以是静态的编译时确定的#hivm.eventEVENT_IDx或动态的运行时计算的 i64 值。跨核同步跨核同步用于不同 Block 之间的协调基于 FFTS 机制。核心操作操作助记符说明SyncBlockOphir.sync_block高层跨核同步支持多种模式SyncBlockSetOphir.sync_block_set发送跨核同步信号SyncBlockWaitOphir.sync_block_wait等待跨核同步信号CreateSyncBlockLockOphir.create_sync_block_lock创建跨核锁SyncBlockLockOphir.sync_block_lock获取跨核锁SyncBlockUnlockOphir.sync_block_unlock释放跨核锁SyncBlockMode模式值说明ALL_CUBE0所有 Cube Core 同步ALL_VECTOR1所有 Vector Core 同步ALL_SUB_VECTOR2所有 Sub-Vector 同步BARRIER_CUBE3Cube-Cube 屏障同步BARRIER_VECTOR4Vector-Vector 屏障同步ALL5所有 AIC/AIV 同步FFTS 机制FFTSFast Flag Transfer System是 AscendNPU 的硬件同步机制。每个 Block 有一个 FFTS 基地址ffts_base_addrFFTS 收集特定 flag_id 后将其设置回 Block 组中的 Block实现同步。在 Ascend910B 及以上平台上ffts_base_addr必须通过hir.set_ffts_base_addr设置。UnitFlag 同步UnitFlag 是嵌入在宏操作如 mmadL1中的同步机制用于处理循环中至少执行一次的依赖场景。详见 03-unit-flag.md。自动同步注入HIVM 编译器提供两个自动同步注入 PassInjectSync Pass基于启发式规则在操作前后自动插入set_flag/wait_flag。GraphSyncSolver Pass基于图的同步求解器构建操作依赖图后求解最优同步方案。详见 04-sync-injection.md。操作列表操作助记符详细文档SetFlagOphir.set_flag01-pipe-sync.mdWaitFlagOphir.wait_flag01-pipe-sync.mdPipeBarrierOphir.pipe_barrier01-pipe-sync.mdSyncBlockOphir.sync_block02-block-sync.mdSyncBlockSetOphir.sync_block_set02-block-sync.mdSyncBlockWaitOphir.sync_block_wait02-block-sync.mdCreateSyncBlockLockOphir.create_sync_block_lock02-block-sync.mdSyncBlockLockOphir.sync_block_lock02-block-sync.mdSyncBlockUnlockOphir.sync_block_unlock02-block-sync.md相关文档源码参考HIVMSynchronizationOps.td测试用例sync-ops.mlir【免费下载链接】cannbot-skillsCANNBot 是面向 CANN 开发的用于提升开发效率的系列智能体本仓库为其提供可复用的 Skills 模块。项目地址: https://gitcode.com/cann/cannbot-skills创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考