Runtime 执行提交机制:NPU 硬件队列的管理与任务原子化下发

CANN 组织链接https://atomgit.com/cann
Runtime 仓库链接https://gitcode.com/cann/runtime


1. 任务描述与硬件队列的映射

GE 优化后的执行计划需要被 Runtime 翻译成具体的硬件提交命令。

1.1 任务描述符的构建

Runtime 接收来自 GE 的优化图后,将每个执行单元(包括 ops-nn 算子、自定义核函数、通信操作)封装成一个任务描述符 (Task Descriptor)

  • 硬件绑定:这个描述符详细说明了任务应由哪个硬件单元执行(Cube Unit, Vector Unit, DMA Engine, 或 HCCL 引擎),以及所需的资源(Local Memory 块、Global Memory 偏移量)。
  • 流 ID 关联:每个任务描述符都被标记了它所属的执行流(Stream ID),这是 Runtime 实现并发调度的基础。

1.2 硬件提交队列的管理

NPU 硬件通常通过多个提交队列(Submission Queues)接收来自 Runtime 的任务。

  • 队列的复用 :Runtime 负责管理这些提交队列。为了避免频繁的硬件上下文切换,Runtime 倾向于批量提交属于同一执行流的多个任务描述符,形成一个连续的硬件工作块

2. 执行流的同步与依赖链的驱动

Runtime 的核心职能在于确保任务按照 GE 定义的依赖图顺序执行。

2.1 依赖等待机制(Wait/Signal)

任务间的同步依赖通过硬件同步机制实现,Runtime 负责操作这些机制。

  • 硬件同步点(Fence) :当一个任务 T B T_B TB 依赖于 T A T_A TA 完成时,Runtime 会在 T B T_B TB 提交前,向硬件写入一个同步指令(Fence)。该指令指示硬件核心等待 T A T_A TA 对应的完成信号被硬件更新后,才能启动 T B T_B TB 的执行。
  • 异步操作的同步:这对于通信操作(HCCL)尤为重要。例如,在执行依赖于远程数据的计算任务前,Runtime 必须等待 SHMEM/HCCL 提交的完成信号。

2.2 任务调度策略:抢占与优先级

在多任务(如训练和推理同时进行)或资源竞争场景下,Runtime 需要实施优先级调度。

  • 上下文优先级:推理任务(尤其是低延迟要求的服务)会被赋予更高的优先级。如果高优先级的任务到达,Runtime 可能会向正在执行的低优先级任务(如后台的内存整理)发送抢占信号,以确保关键计算的延迟达标。

3. 资源回收与上下文清理

在任务执行完成后,Runtime 负责清理该任务在所有硬件资源上的引用。

  • 内存句柄释放:释放与该任务相关的 Local Memory 块和任何临时 Global Memory 句柄,将其返回给内存池。
  • 流同步清理:确保所有依赖于该任务的后续任务都能被正确唤醒,并清理掉已完成的同步点标记。

CANN 组织链接https://atomgit.com/cann
Runtime 仓库链接https://gitcode.com/cann/runtime

相关推荐
lly2024064 小时前
C 标准库 - `<stdio.h>`
开发语言
沫璃染墨4 小时前
C++ string 从入门到精通:构造、迭代器、容量接口全解析
c语言·开发语言·c++
jwn9994 小时前
Laravel6.x核心特性全解析
开发语言·php·laravel
迷藏4944 小时前
**发散创新:基于Rust实现的开源合规权限管理框架设计与实践**在现代软件架构中,**权限控制(RBAC)** 已成为保障
java·开发语言·python·rust·开源
功德+n4 小时前
Linux下安装与配置Docker完整详细步骤
linux·运维·服务器·开发语言·docker·centos
明日清晨4 小时前
python扫码登录dy
开发语言·python
我是唐青枫4 小时前
C#.NET gRPC 深入解析:Proto 定义、流式调用与服务间通信取舍
开发语言·c#·.net
JJay.4 小时前
Kotlin 高阶函数学习指南
android·开发语言·kotlin
bazhange4 小时前
python如何像matlab一样使用向量化替代for循环
开发语言·python·matlab
jinanwuhuaguo4 小时前
截止到4月8日,OpenClaw 2026年4月更新深度解读剖析:从“能力回归”到“信任内建”的范式跃迁
android·开发语言·人工智能·深度学习·kotlin