昇腾CANN/asc-devkit PipeBarrier同步控制API

📅 2026/7/16 21:57:30
昇腾CANN/asc-devkit PipeBarrier同步控制API
PipeBarrier(ISASI)【免费下载链接】asc-devkit本项目是CANN 推出的昇腾AI处理器专用的算子程序开发语言原生支持C和C标准规范主要由类库和语言扩展层构成提供多层级API满足多维场景算子开发诉求。项目地址: https://gitcode.com/cann/asc-devkit产品支持情况Ascend 950PR/Ascend 950DT支持Atlas A3 训练系列产品/Atlas A3 推理系列产品支持Atlas A2 训练系列产品/Atlas A2 推理系列产品支持Atlas 200I/500 A2 推理产品支持Atlas 推理系列产品AI Core支持Atlas 推理系列产品Vector Core不支持Atlas 训练系列产品支持Kirin X90支持Kirin 9030支持功能说明头文件路径为basic_api/kernel_operator_block_sync_intf.h。如下图1所示完成同一流水线内的同步控制用于在同一流水线内部约束执行顺序。其作用是保证前序指令中所有数据的读写工作全部完成后序指令才能执行。图1PipeBarrier接口功能示意图![](https://raw.gitcode.com/cann/asc-devkit/raw/fca368efb52629b09a323752901d0e77214b266d/docs/zh/api/figures/pipebarrier_function_diagram.png PipeBarrier_接口功能示意图?utm_sourcegitcode_repo_files)函数原型template pipe_t pipe __aicore__ inline void PipeBarrier()参数说明表1模板参数说明参数名描述pipe模板参数表示阻塞的流水类别。支持的流水参考硬件流水类型其中不支持PIPE_S。如果不关注流水类别希望阻塞所有流水可以传入PIPE_ALL。返回值说明无约束说明Scalar流水之间的同步由硬件自动保证PipeBarrier接口不支持PIPE_S单流水的同步。PipeBarrierPIPE_ALL()会等待所有流水线中所有先前提交的接口完成这会对性能产生影响。若仅阻塞单条流水线即可解决问题应避免随意调用PipeBarrierPIPE_ALL()。PIPE_MTE2/PIPE_MTE3在搬运地址有重叠的情况下需要开发者插入同步。例如当需要执行多个DataCopy指令且DataCopy的目的地址存在重叠时需要通过调用来插入PipeBarrier同步指令保证多个DataCopy指令的串行化防止出现异常数据。如下图左侧示意图执行两个DataCopy指令搬运的目的GM地址存在重叠两条搬运指令之间需要通过调用PipeBarrierPIPE_MTE3()添加MTE3搬出流水的同步如下图右侧示意图所示搬运的目的地址UB存在重叠两条搬运指令之间需要调用PipeBarrierPIPE_MTE2()添加MTE2搬入流水的同步。![](https://raw.gitcode.com/cann/asc-devkit/raw/fca368efb52629b09a323752901d0e77214b266d/docs/zh/api/figures/datacopy_address_overlap_pipebarrier.png DataCopy_地址重叠_PipeBarrier_同步示意图?utm_sourcegitcode_repo_files)调用示例如下示例Mul指令的输入dst0Local是Add指令的输出两个矢量运算指令产生依赖需要插入PipeBarrier保证两条指令的执行顺序。注仅作为示例参考开启自动同步Kernel直调算子工程和自定义算子开发工程已默认开启的情况下编译器自动插入PIPE_V同步无需开发者手动插入。图2Mul指令和Add指令是串行关系必须等待Add指令执行完成后才能执行Mul指令。![](https://raw.gitcode.com/cann/asc-devkit/raw/fca368efb52629b09a323752901d0e77214b266d/docs/zh/api/figures/mul_add_pipebarrier_sync_diagram.png Mul_Add_指令_串行依赖_PipeBarrier_同步示意图?utm_sourcegitcode_repo_files)AscendC::LocalTensorhalf src0Local; AscendC::LocalTensorhalf src1Local; AscendC::LocalTensorhalf src2Local; AscendC::LocalTensorhalf dst0Local; AscendC::LocalTensorhalf dst1Local; AscendC::Add(dst0Local, src0Local, src1Local, 512); AscendC::PipeBarrierPIPE_V(); AscendC::Mul(dst1Local, dst0Local, src2Local, 512);【免费下载链接】asc-devkit本项目是CANN 推出的昇腾AI处理器专用的算子程序开发语言原生支持C和C标准规范主要由类库和语言扩展层构成提供多层级API满足多维场景算子开发诉求。项目地址: https://gitcode.com/cann/asc-devkit创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考