PipeBarrier
功能说明
阻塞相同流水,具有数据依赖的相同流水之间需要插此同步。
函数原型
1 2 |
template <pipe_t pipe> __aicore__ inline void PipeBarrier() |
参数说明
参数名 |
输入/输出 |
描述 |
---|---|---|
pipe |
输入 |
模板参数,表示阻塞的流水类别。 支持的流水参考表1。 |
返回值
无
支持的型号
Atlas 训练系列产品
Atlas推理系列产品AI Core
Atlas A2训练系列产品/Atlas 800I A2推理产品
Atlas 200/500 A2推理产品
约束说明
Scalar流水之间的同步由硬件自动保证,调用PipeBarrier<PIPE_S>()会引发硬件错误。
调用示例
如下示例,Mul指令的输入dst0Local是Add指令的输出,两个矢量运算指令产生依赖,需要插入PipeBarrier保证两条指令的执行顺序。
图1 Mul指令和Add指令是串行关系,必须等待Add指令执行完成后,才能执行Mul指令。
1 2 3 4 5 6 7 8 9 |
AscendC::LocalTensor<half> src0Local; AscendC::LocalTensor<half> src1Local; AscendC::LocalTensor<half> src2Local; AscendC::LocalTensor<half> dst0Local; AscendC::LocalTensor<half> dst1Local; AscendC::Add(dst0Local, src0Local, src1Local, 512); AscendC::PipeBarrier<PIPE_V>(); AscendC::Mul(dst1Local, dst0Local, src2Local, 512); |
父主题: 同步控制