SetFlag/WaitFlag
功能说明
同一核内不同流水线之间的同步指令。具有数据依赖的不同流水指令之间需要插此同步。
函数原型
1 2 3 4 | template <HardEvent event> __aicore__ inline void SetFlag(int32_t eventID) template <HardEvent event> __aicore__ inline void WaitFlag(int32_t eventID) |
参数说明
参数名 |
输入/输出 |
描述 |
---|---|---|
event |
输入 |
模板参数。 同步事件,数据类型为HardEvent。详细内容参考下文中的同步类型说明。 |
eventID |
输入 |
事件ID。数据类型为int32_t类型。其定义如下: eventID需要通过AllocEventID或者FetchEventID来获取。 Atlas 训练系列产品,数据范围为:0-3 Atlas推理系列产品AI Core,数据范围为:0-7 Atlas A2训练系列产品/Atlas 800I A2推理产品,数据范围为:0-7 |
同步类型说明如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 | enum class HardEvent : uint8_t { // 名称(源流水_目标流水),例如MTE2_V,代表PIPE_MTE2为源流水,PIPE_V为目标流水。标识从PIPE_MTE2到PIPE_V的同步,PIPE_V等待PIPE_MTE2。 MTE2_MTE1 MTE1_MTE2 MTE1_M M_MTE1 MTE2_V V_MTE2 MTE3_V V_MTE3 M_V V_M V_V MTE3_MTE1 MTE1_MTE3 MTE1_V MTE2_M M_MTE2 V_MTE1 M_FIX // 当前版本暂不支持 FIX_M // 当前版本暂不支持 MTE3_MTE2 MTE2_MTE3 S_V V_S S_MTE2 MTE2_S S_MTE3 MTE3_S MTE2_FIX // 当前版本暂不支持 FIX_MTE2 // 当前版本暂不支持 FIX_S // 当前版本暂不支持 M_S FIX_MTE3 // 当前版本暂不支持 } |
返回值
无
支持的型号
Atlas 训练系列产品
Atlas推理系列产品AI Core
Atlas A2训练系列产品/Atlas 800I A2推理产品
约束说明
- SetFlag/WaitFlag必须成对出现。
- 禁止用户在使用SetFlag和WaitFlag时,自行指定eventID,容易与框架同步事件冲突,导致卡死问题。eventID需要
通过AllocEventID或者FetchEventID来获取。
调用示例
如DataCopy需要等待SetValue执行完成后才能执行,需要插入PIPE_S到PIPE_MTE3的同步。
1 2 3 4 5 6 7 8 | AscendC::GlobalTensor<half> dstGlobal; AscendC::LocalTensor<half> dstLocal; dstLocal.SetValue(0, 0); uint32_t dataSize = 512; int32_t eventIDSToMTE3 = static_cast<int32_t>(GetTPipePtr()->FetchEventID(AscendC::HardEvent::S_MTE3)); AscendC::SetFlag<AscendC::HardEvent::S_MTE3>(eventIDSToMTE3); AscendC::WaitFlag<AscendC::HardEvent::S_MTE3>(eventIDSToMTE3); AscendC::DataCopy(dstGlobal, dstLocal, dataSize); |
父主题: 同步控制