下载
中文
注册

CrossCoreSetFlag

功能说明

针对分离架构,AI Core上的Cube核(AIC)与Vector核(AIV)之间的同步设置指令。

每一个flagId对应一个计数器,初始值为0。同一AI Core中,当Cube核运行CrossCoreSetFlag指令时,对应两个Vector核的相应flagId的计数器增加1;当两个Vector核都已经运行了CrossCoreSetFlag指令,对应Cube核的计数器增加1。

函数原型

template <uint8_t modeId, pipe_t pipe>

__aicore__ inline void CrossCoreSetFlag(uint16_t flagId)

参数说明

表1 模板参数说明

参数名

描述

modeId

核间同步的模式,取值范围为0~2。

模式0:块间的同步,对所有块设置flagId。

模式1:组间的同步,对组中的块设置flagId。

模式2:子块间的同步,对一个组中的所有子块设置flagId。

pipe

数据类型:枚举类型

设置这条指令所在的流水类型,不能传入PIPE_S和PIPE_ALL。

流水类型可参考表1

表2 参数说明

参数名

输入/输出

描述

flagId

输入

数据类型:uint16_t

核间同步的标记,取值范围是0-15。

返回值

支持的型号

Atlas A2训练系列产品/Atlas 800I A2推理产品

约束说明

  • CrossCoreSetFlag必须与CrossCoreWaitFlag接口配合使用。
  • 同一flagId的计数器最多设置16次。

调用示例

// 同一MIX核中,阻塞AIC核,直到AIV核设置计数器大于0
if (g_coreType == AIC) {
    CrossCoreWaitFlag(0x3);
} else {
    // 采用模式2
    CrossCoreSetFlag<0x2, PIPE_FIX>(0x3);
}