本文最后更新于 2026年3月30日 上午

🧠 一、背景

  • 问题核心:在SIMD架构的NPU上,为神经网络算子(如Matmul、Conv、Attention)的计算图设计自动化调度算法,以替代低效的人工编排。
  • 挑战:计算图异构性强(算子多样、形状动态、拓扑复杂),需考虑多执行单元并行多级缓存管理数据搬运优化

📋 二、任务概述

调度算法需完成:

  1. 生成满足拓扑序的节点执行序列。
  2. 为每个数据缓冲区(BufId)分配物理缓存地址(Offset)。
  3. 在缓存不足时引入SPILL操作(换入换出至DDR)。
  4. 优化两个核心指标:
    • 总执行时间(时钟周期数)
    • 总额外数据搬运量(由SPILL引起)

🧩 三、计算图结构

  • 节点类型
    • 操作节点(OP):如COPY_IN、ADD、MUL等,含Id、Op、Pipe、Cycles、Bufs等属性。
    • 缓存管理节点:ALLOC(申请缓存)、FREE(释放缓存),含Id、Op、BufId、Size、Type。
  • 依赖关系:有向边表示执行顺序约束。

🎯 四、三个具体问题

问题1:最小缓存驻留调度

  • 目标:寻找调度序列 $S$,使得执行过程中最大缓存占用量 $\max(V_{stay})$ 最小。
  • 输出:调度序列 + $\max(V_{stay})$ 值。
  • 附件要求:每个计算图的调度顺序文件。

问题2:缓存分配与SPILL优化

  • 目标:在给定缓存容量限制下(L1、UB、L0A/B/C),为每个缓冲区分配Offset,并尽可能减少SPILL操作带来的额外数据搬运量
  • 输出:缓存分配方案、SPILL操作列表、调度序列。
  • 附件要求:调度顺序、内存分配、SPILL操作文件。

问题3:性能优化策略

  • 目标:在不显著增加数据搬运量的前提下,最小化总执行时间
  • 方法:可调整调度顺序、缓存分配策略、SPILL策略等。
  • 输出:优化后的调度方案 + 两项指标结果。

⏱️ 五、评估指标

  1. 总执行时间
    • 考虑节点依赖、缓存复用依赖、执行单元独占性。
    • 通过流水图可视化各单元并行情况。
  2. 总额外数据搬运量
    • 由SPILL操作引起,按缓冲区是否被COPY_IN使用分为两种情况计算。

🛠️ 六、附录摘要

  • 附录A:硬件架构抽象(执行单元:Cube、Vector、MTE1/2/3、FIXP;缓存:L1、UB、L0A/B/C)。
  • 附录B:SPILL操作机制(插入SPILL_OUT/SPILL_IN节点,生成依赖边)。
  • 附录C:指标计算细节(总时间、搬运量)。
  • 附录D:SPILL操作耗时公式(与缓冲区大小线性相关)。
  • 附录E:数据文件格式(Json/CSV)与提交附件格式说明。
  • 附录F:典型算子计算图结构(Matmul、FlashAttention、Conv)及调度策略分析。

✅ 核心要点总结

项目 内容概要
问题类型 计算图调度 + 缓存分配 + 性能优化
硬件背景 SIMD架构NPU,多执行单元,多级缓存
优化目标 最小化缓存占用、数据搬运量、总执行时间
数据特点 DAG计算图,含操作节点与缓存管理节点
输出要求 调度序列、缓存分配、SPILL操作列表
附件格式 文本文件,按任务名组织,压缩提交

如果还有其它要求,请随时告诉我,我们一起调整。


http://example.com/posts/129.html
作者
司马吴空
发布于
2026年3月30日
许可协议