SetFlag/WaitFlag
功能说明
同一核内不同流水线之间的同步指令,具有数据依赖的不同流水指令之间需要插此同步。
- SetFlag:当前序指令的所有读写操作都完成之后,当前指令开始执行,并将硬件中的对应标志位设置为1。
- WaitFlag:当执行到该指令时,如果发现对应标志位为0,该队列的后续指令将一直被阻塞;如果发现对应标志位为1,则将对应标志位设置为0,同时后续指令开始执行。
函数原型
1 2 | __aicore__ inline void SetFlag(TEventID id) __aicore__ inline void WaitFlag(TEventID id) |
参数说明
参数名 |
输入/输出 |
描述 |
||
---|---|---|---|---|
id |
输入 |
事件ID,数据类型为整型,由用户自己指定。
Atlas 训练系列产品,数据范围为:0-3 Atlas推理系列产品AI Core,数据范围为:0-7 Atlas A2训练系列产品/Atlas 800I A2推理产品,数据范围为:0-7 Atlas 200I/500 A2推理产品,数据范围为:0-7 |
返回值
无
支持的型号
Atlas 训练系列产品
Atlas推理系列产品AI Core
Atlas A2训练系列产品/Atlas 800I A2推理产品
Atlas 200I/500 A2推理产品
约束说明
- SetFlag/WaitFlag必须成对出现。
- 用户在使用SetFlag和WaitFlag时,需要自行指定eventID,且需要ID取值在范围内。
调用示例
如DataCopy需要等待SetValue执行完成后才能执行,需要插入PIPE_S到PIPE_MTE3的同步。
1 2 3 4 5 6 7 | AscendC::GlobalTensor<half> dstGlobal; AscendC::LocalTensor<half> dstLocal; dstLocal.SetValue(0, 0); AscendC::TQueSync<PIPE_S, PIPE_MTE3> sync; sync.SetFlag(0); sync.WaitFlag(0); AscendC::DataCopy(dstGlobal, dstLocal, dataSize); |
父主题: TQueSync