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

相关推荐
Zwawa10 分钟前
串口为什么会丢字节:从轮询到中断和环形缓冲区
c语言·单片机·嵌入式
Wang's Blog17 分钟前
Java 项目实战:交友项目 - 用户体系集成总结
java·开发语言·交友
中科三方1 小时前
IPv6检测常见问题:AAAA记录检测不通过是什么原因?
开发语言·php
沫璃染墨2 小时前
从零入门计算机网络系列(十一):HTTP协议进阶——从重定向原理到GET/POST与Fiddler抓包
linux·服务器·开发语言·网络·c++·tcp/ip·html
刚入门的大一新生2 小时前
Linux-线程互斥
java·开发语言
香芋芋圆2 小时前
iD-editor 详解|OSM官方在线编辑器,基于D3.js的轻量地图编辑器
开发语言·javascript·编辑器
揽星河..3 小时前
【C语言】分支和循环
c语言·c++·算法
小熊恋旧3 小时前
Python 面向对象编程:方法、属性、继承与多态详解
开发语言·python
云边云科技_云网融合3 小时前
面向汽车零部件制造业场景的解决方案 | 70 秒:一台车下线的时间里,藏着五张网
开发语言·汽车·php
Evand J3 小时前
【PMSM滤波例程2】PMSM未知负载转矩观测EKF。MATLAB例程(负载增广EKF与实际仿真结果)。附下载链接
开发语言·matlab·电机