asc.language.basic.wait_flag
asc.language.basic.wait_flag(event: HardEvent, event_id: int = 0) → None
同一核内不同流水线之间的同步指令,具有数据依赖的不同流水指令之间需要插此同步。
对应的Ascend C函数原型
__aicore__ inline void SetFlag(TEventID id)
__aicore__ inline void WaitFlag(TEventID id)
参数说明
- id: 事件ID,由用户自己指定。
约束说明
- set_flag/wait_flag必须成对出现。
- 禁止用户在使用set_flag和wait_flag时,自行指定event_id,容易与框架同步事件冲突,导致卡死问题。event_id需要通过alloc_event_id或者fetch_event_id来获取。
调用示例
如data_copy需要等待set_value执行完成后才能执行,需要插入PIPE_S到PIPE_MTE3的同步。
dst = asc.GlobalTensor()
src = asc.LocalTensor()
src.set_value(0, 0)
data_size = 512
event_id = global_pipe.fetch_event_id(event=asc.HardEvent.S_MTE3)
asc.set_flag(event=asc.HardEvent.S_MTE3, event_id=event_id)
asc.wait_flag(event=asc.HardEvent.S_MTE3, event_id=event_id)
asc.data_copy(dst, src, data_size)