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

相关推荐
li16709027012 小时前
第二十七章:智能指针
c语言·数据结构·c++·visual studio
We་ct12 小时前
深度剖析浏览器跨域问题
开发语言·前端·浏览器·跨域·cors·同源·浏览器跨域
skywalk816312 小时前
在考虑双轨制,即在中文语法的基础上,加上数学公式的支持,这样像很多计算将更加简单方便,就像现在的小学数学课本里面一样,比如:定x=2*x + 1
开发语言
小书房12 小时前
Kotlin的by
android·开发语言·kotlin·委托·by
就叫飞六吧13 小时前
QT写一个桌面程序exe并动态打包基本流程(c++)
开发语言·c++
threelab13 小时前
Three.js 代码云效果 | 三维可视化 / AI 提示词
开发语言·javascript·人工智能
V搜xhliang024613 小时前
OpenClaw科研全场景用法:从文献到实验室的完整自动化方案
运维·开发语言·人工智能·python·算法·microsoft·自动化
kaikaile199513 小时前
风、浪、流环境模型的船舶三自由度(纵荡、横荡、艏摇)运动仿真MATLAB
开发语言·人工智能·matlab
fish_xk13 小时前
map和set
java·开发语言
李崧正13 小时前
Java技术分享:Lambda表达式与函数式编程
java·开发语言·python