Skip to content

SetFlag/WaitFlag

产品支持情况

  • Ascend 950PR/Ascend 950DT:支持
  • Atlas A3 训练系列产品/Atlas A3 推理系列产品:支持
  • Atlas A2 训练系列产品/Atlas A2 推理系列产品:支持
  • Atlas 200I/500 A2 推理产品:支持
  • Atlas 推理系列产品AI Core:支持
  • Atlas 推理系列产品Vector Core:不支持
  • Atlas 训练系列产品:支持

功能说明

头文件路径为:"basic_api/kernel_operator_block_sync_intf.h"

同一核内不同流水线之间的同步指令,具有数据依赖的不同流水指令之间需要插入此同步。

  • SetFlag:当前序指令的所有读写操作都完成之后,当前指令开始执行,并将硬件中的对应标志位设置为1。
  • WaitFlag:当执行到该指令时,如果发现对应标志位为0,该队列的后续指令将一直被阻塞;如果发现对应标志位为1,则将对应标志位设置为0,同时后续指令开始执行。

说明

此接口与SetFlag/WaitFlag(ISASI)接口也能实现相同的功能。二者的区别在于,TQueSync类接口可以保证跨硬件版本兼容,而SetFlag/WaitFlag(ISASI)中的接口标注为ISASI类别,不能保证跨硬件版本兼容。

函数原型

C++
__aicore__ inline void SetFlag(TEventID id)
__aicore__ inline void WaitFlag(TEventID id)

参数说明

表1 参数说明

参数名输入/输出描述
id输入事件ID,由用户自己指定,推荐通过AllocEventID或者FetchEventID来获取。定义如下:
using TEventID = int8_t;
不同产品对id的取值范围说明请参见id取值范围说明

id取值范围说明

  • Ascend 950PR/Ascend 950DT,取值范围是0-7。
  • Atlas A3 训练系列产品/Atlas A3 推理系列产品,取值范围是0-7。
  • Atlas A2 训练系列产品/Atlas A2 推理系列产品,取值范围是0-7。
  • Atlas 200I/500 A2 推理产品,取值范围是0-7。
  • Atlas 推理系列产品AI Core,取值范围是0-7。
  • Atlas 训练系列产品,取值范围是0-3。

返回值说明

约束说明

SetFlag/WaitFlag必须成对出现。

调用示例

如DataCopy需要等待SetValue执行完成后才能执行,需要插入PIPE_S到PIPE_MTE3的同步。

C++
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);

免责声明:本站内容由 asc-devkit 仓 master 分支自动编译生成,属于持续开发版本,可能存在缺陷,仅供预览与参考。如需稳定及商用资料,请查阅官方 昇腾社区