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)
参数说明
参数名 |
描述 |
---|---|
modeId |
核间同步的模式,取值范围为0~2。 模式0:块间的同步,对所有块设置flagId。 模式1:组间的同步,对组中的块设置flagId。 模式2:子块间的同步,对一个组中的所有子块设置flagId。 |
pipe |
数据类型:枚举类型 设置这条指令所在的流水类型,不能传入PIPE_S和PIPE_ALL。 流水类型可参考表1。 |
参数名 |
输入/输出 |
描述 |
---|---|---|
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); }
父主题: 同步控制