Skip to content

NotifyNextBlock

产品支持情况

  • 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_determine_compute_sync_intf.h"

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

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

函数原型

C++
__aicore__ inline void NotifyNextBlock(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“卡死”现象。

调用示例

完整样例请参考调用示例

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