asc.language.basic.notify_next_block
- asc.language.basic.notify_next_block(gm_workspace: GlobalTensor, ub_workspace: LocalTensor) None
多核同步接口,通过写入 Global Memory 中的标志位,通知下一个 AI Core 当前核的操作已完成。
此接口通常与 wait_pre_block 配对使用。当前核调用此函数后,等待此核的下一个核将能够通过 wait_pre_block 检测到状态变化,从而继续执行。
对应的Ascend C函数原型
__aicore__ inline void NotifyNextBlock(GlobalTensor<int32_t>& gmWorkspace, LocalTensor<int32_t>& ubWorkspace)
参数说明
- gm_workspace (asc.GlobalTensor): Global Memory 上的临时工作空间。
用于核间通信的共享内存区域。通过向此空间写入一个特定的标志位,来通知下一个核。
类型必须为 GlobalTensor<int32_t>。
- ub_workspace (asc.LocalTensor): UB 上的临时工作空间。
用于在 AI Core 内部操作 gm_workspace 的暂存区。
类型必须为 LocalTensor<int32_t>。
返回值
无。
约束说明
需要保证每个核调用该接口的次数相同。
gm_workspace申请的空间最少要求为:blockNum * 32Bytes;ub_workspace申请的空间最少要求为:blockNum * 32 + 32Bytes;其中blockNum为调用的核数,可调用get_block_num获取。
分离模式下,使用该接口进行多核同步时,仅对AIV核生效,wait_pre_block和notify_next_block之间仅支持插入矢量计算相关指令,对矩阵计算相关指令不生效。
使用该接口进行多核控制时,算子调用时指定的逻辑blockNum必须保证不大于实际运行该算子的AI处理器核数,否则框架进行多轮调度时会插入异常同步,导致Kernel“卡死”现象。
调用示例
asc.notify_next_block(gm_workspace, ub_workspace)