WaitPreBlock

产品支持情况

产品

是否支持

Ascend 950PR/Ascend 950DT

Atlas A3 训练系列产品/Atlas A3 推理系列产品

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

Atlas 200I/500 A2 推理产品

x

Atlas 推理系列产品AI Core

Atlas 推理系列产品Vector Core

x

Atlas 训练系列产品

x

功能说明

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

WaitPreBlock和NotifyNextBlock是核间同步控制接口。NotifyNextBlock通过写全局内存来通知其他核当前核已执行完成,其他核可以继续往下执行;WaitPreBlock通过读取全局内存,判断当前核是否可以继续往下执行。

WaitPreBlock和NotifyNextBlock必须与InitDetermineComputeWorkspace接口配合使用,这三个接口组合使用能够确保多个AIV核严格按照blockIdx的升序执行,适用于要求确定性计算的场景,确定性计算的具体含义请参考原子操作-确定性计算

函数原型

__aicore__ inline void WaitPreBlock(GlobalTensor<int32_t>& gmWorkspace, LocalTensor<int32_t>& ubWorkspace)

参数说明

表 1 接口参数说明

参数名称 输入/输出 含义
gmWorkspace 输入 临时空间,通过读取gmWorkspace,判断当前核是否可以继续往下执行,类型为GlobalTensor。
ubWorkspace 输入 临时空间,用于操作gmWorkspace,类型为LocalTensor。

返回值说明

约束说明

  • 要实现确定性计算,需要保证每个核调用NotifyNextBlock/WaitPreBlock接口的次数相同。如果调用了NotifyNextBlock没有与之配对的WaitPreBlock,会导致非确定性计算、输出结果可能不符合预期;如果调用了WaitPreBlock没有与之配对的NotifyNextBlock,会导致程序卡死。
  • 使用接口前,请确保已经调用InitDetermineComputeWorkspace接口,初始化共享内存。
  • gmWorkspace申请的空间最少要求为:GetBlockNum()*32Bytes,ubWorkspace申请的空间最少要求为:GetBlockNum()*32+32Bytes。
  • 使用该接口进行多核同步时,仅对AIV核生效,WaitPreBlock和NotifyNextBlock之间仅支持插入矢量计算相关指令,对矩阵计算相关指令不生效。
  • 使用该接口进行多核控制时,算子调用时指定的逻辑AI Core核数numBlocks必须保证不大于实际运行该算子的AI处理器核数,否则框架进行多轮调度时会插入异常同步,导致Kernel“卡死”现象。

调用示例

完整样例请参考调用示例