CANN/asc-devkit核内同步能力概述

📅 2026/7/16 21:49:26
CANN/asc-devkit核内同步能力概述
核内同步能力概述【免费下载链接】asc-devkit本项目是CANN 推出的昇腾AI处理器专用的算子程序开发语言原生支持C和C标准规范主要由类库和语言扩展层构成提供多层级API满足多维场景算子开发诉求。项目地址: https://gitcode.com/cann/asc-devkit为什么需要核内同步AI Core内部的执行单元如MTE2搬运单元、Vector计算单元等以异步并行的方式运行在读写同一存储资源时可能存在数据依赖关系。为确保数据一致性及计算正确性需通过同步控制协调操作时序。针对NPU架构2201硬件架构图如下高亮部分展示了并行执行的计算单元和搬运单元。图 1架构图![](https://raw.gitcode.com/cann/asc-devkit/raw/fca368efb52629b09a323752901d0e77214b266d/docs/zh/api/figures/atlas_a2_a3_architecture.png Atlas_A2_A3_硬件架构图?utm_sourcegitcode_repo_files)针对NPU架构3510硬件架构图如下高亮部分展示了并行执行的计算单元和搬运单元。图 2架构图![](https://raw.gitcode.com/cann/asc-devkit/raw/fca368efb52629b09a323752901d0e77214b266d/docs/zh/api/figures/ascend_950pr_950dt_architecture.png Ascend_950PR_950DT_硬件架构图?utm_sourcegitcode_repo_files)下图示例描述了一个常见的Vector计算数据流先通过DMA执行单元将数据从Global Memory搬入到Local Memory进行计算然后再通过DMA执行单元将计算结果从Local Memory搬出到Global Memory。![](https://raw.gitcode.com/cann/asc-devkit/raw/fca368efb52629b09a323752901d0e77214b266d/docs/zh/api/figures/vector_compute_data_flow.png Vector_计算_数据流示意图?utm_sourcegitcode_repo_files)四个执行单元Scalar、Vector、DMAMTE2、DMA(MTE3)并行执行若访问同一片Local Memory需要同步机制来控制它们的访问时序保证先搬入Local Memory后再计算计算完成后再搬出。![](https://raw.gitcode.com/cann/asc-devkit/raw/fca368efb52629b09a323752901d0e77214b266d/docs/zh/api/figures/intra_core_parallel_pipeline_execution_timing.png intra_core_parallel_pipeline_execution_timing?utm_sourcegitcode_repo_files)硬件流水类型AI Core内部并行的指令流水类型和解释如下所示[!NOTE]说明 不同的硬件架构每一种硬件流水类型包含的具体流水会有所差异详细介绍请参考硬件实现章节。表1指令流水类型和相关说明流水类型含义PIPE_S标量流水线使用GlobalTensor/LocalTensor的GetValue函数时为此流水PIPE_V矢量计算流水及部分硬件架构下的L0C Buffer-UB数据搬运流水PIPE_M矩阵计算流水PIPE_MTE1L1 Buffer -L0A Buffer、L1 Buffer-L0B Buffer数据搬运流水PIPE_MTE2GM-L1 Buffer、GM-UB等数据搬运流水PIPE_MTE3UB-GM等数据搬运流水PIPE_FIXL0C Buffer-GM、L0C Buffer -L1等数据搬运流水核内同步分类对上述核内并行流水的同步控制分为两种多流水同步同一核内具有数据依赖的不同类型流水指令之间的同步。 TQueSync类接口和SetFlag/WaitFlag(ISASI).md)中提供的同步控制接口的区别在于SetFlag/WaitFlag(ISASI).md)中的接口标注为ISASI类别不能保证跨硬件版本兼容TQueSync类接口可以保证跨硬件版本兼容。 通过SetFlag/WaitFlag接口进行不同流水线间的同步控制。在SetFlag/WaitFlag的指令中可以指定一对指令流水源流水与目的流水先后执行的关系表示两个指令流水之间完成一组“锁”机制其作用原理为SetFlag当源流水的前序指令的所有读写操作都完成之后当前指令开始执行并将硬件中的对应标志位设置为1。WaitFlag当目的流水执行到该指令时如果发现硬件中对应标志位为0目的流水的后续指令将一直被阻塞如果发现硬件中对应标志位为1则将硬件中对应标志位设置为0同时目的流水的后续指令开始执行。Ascend 950PR/Ascend 950DT新增通过Lock/Lock.md)/Unlock/Unlock.md)接口进行不同流水线间的同步控制。通过Lock锁定指定流水阻塞后续指令再通过Unlock释放流水来完成流水间的同步依赖。Lock根据MutexID获取Mutex若Mutex已被锁定将阻塞后续指定流水指令队列直到前序指令中对应MutexID的Mutex被Unlock。Unlock当前流水的前置指令退出后根据MutexID释放对应Mutex。单流水同步同一核内具有数据依赖的相同类型流水指令之间的同步。通过PipeBarrier.md)接口进行相同流水线间的同步控制。同一流水中虽然指令是顺序执行但并不意味着后一条指令开始执行时前一条指令执行结束。PipeBarrier指令可以保证前序指令中所有数据读写全部完成后序指令才开始执行。注意该接口不支持PIPE_S单流水的同步。以NPU架构2201为例该硬件架构下所有合法的核内同步组合如表2和表3所示。其中不涉及表示硬件层面不存在此种同步组合暂无应用场景表示存在此种同步组合但在实际开发场景中暂不需要使用。表2AIC中所有合法的核内同步组合源流水PIPE_SPIPE_MPIPE_MTE1PIPE_MTE2PIPE_MTE3PIPE_FIXPIPE_S不涉及不涉及不涉及不涉及不涉及不涉及PIPE_M不涉及PipeBarrierPIPE_M()SetFlagM_MTE1(0)WaitFlagM_MTE1(0)SetFlagM_MTE2(0)WaitFlagM_MTE2(0)不涉及SetFlagM_FIX(0)WaitFlagM_FIX(0)PIPE_MTE1不涉及SetFlagMTE1_M(0)WaitFlagMTE1_M(0)PipeBarrierPIPE_MTE1()SetFlagMTE1_MTE2(0)WaitFlagMTE1_MTE2(0)SetFlagMTE1_MTE3(0)WaitFlagMTE1_MTE3(0)SetFlagMTE1_FIX(0)WaitFlagMTE1_FIX(0)PIPE_MTE2不涉及SetFlagMTE2_M(0)WaitFlagMTE2_M(0)SetFlagMTE2_MTE1(0)WaitFlagMTE2_MTE1(0)PipeBarrierPIPE_MTE2()SetFlagMTE2_MTE3(0)WaitFlagMTE2_MTE3(0)暂无应用场景PIPE_MTE3不涉及不涉及SetFlagMTE3_MTE1(0)WaitFlagMTE3_MTE1(0)SetFlagMTE3_MTE2(0)WaitFlagMTE3_MTE2(0)PipeBarrierPIPE_MTE3()暂无应用场景PIPE_FIX不涉及SetFlagFIX_M(0)WaitFlagFIX_M(0)SetFlagFIX_MTE1(0)WaitFlagFIX_MTE1(0)暂无应用场景暂无应用场景PipeBarrierPIPE_FIX()表3AIV中所有合法的核内同步组合源流水PIPE_SPIPE_VPIPE_MTE2PIPE_MTE3PIPE_S不涉及SetFlagS_V(0)WaitFlagS_V(0)SetFlagS_MTE2(0)WaitFlagS_MTE2(0)SetFlagS_MTE3(0)WaitFlagS_MTE3(0)PIPE_VSetFlagV_S(0)WaitFlagV_S(0)PipeBarrierPIPE_V()SetFlagV_MTE2(0)WaitFlagV_MTE2(0)SetFlagV_MTE3(0)WaitFlagV_MTE3(0)PIPE_MTE2SetFlagMTE2_S(0)WaitFlagMTE2_S(0)SetFlagMTE2_V(0)WaitFlagMTE2_V(0)PipeBarrierPIPE_MTE2()SetFlagMTE2_MTE3(0)WaitFlagMTE2_MTE3(0)PIPE_MTE3SetFlagMTE3_S(0)WaitFlagMTE3_S(0)SetFlagMTE3_V(0)WaitFlagMTE3_V(0)SetFlagMTE3_MTE2(0)WaitFlagMTE3_MTE2(0)PipeBarrierPIPE_MTE3()什么时候需要开发者手动插入同步TPipe-TQue框架编程范式和毕昇编译器均支持自动同步可减少开发者手动插入同步的工作量但部分场景下仍需开发者手动完成。详细说明请参考自动同步。【免费下载链接】asc-devkit本项目是CANN 推出的昇腾AI处理器专用的算子程序开发语言原生支持C和C标准规范主要由类库和语言扩展层构成提供多层级API满足多维场景算子开发诉求。项目地址: https://gitcode.com/cann/asc-devkit创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考