asc.language.basic.set_flag

asc.language.basic.set_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)