本文最后更新于 2026年3月30日 上午
🧠 一、背景
- 问题核心:在SIMD架构的NPU上,为神经网络算子(如Matmul、Conv、Attention)的计算图设计自动化调度算法,以替代低效的人工编排。
- 挑战:计算图异构性强(算子多样、形状动态、拓扑复杂),需考虑多执行单元并行、多级缓存管理、数据搬运优化。
📋 二、任务概述
调度算法需完成:
- 生成满足拓扑序的节点执行序列。
- 为每个数据缓冲区(BufId)分配物理缓存地址(Offset)。
- 在缓存不足时引入SPILL操作(换入换出至DDR)。
- 优化两个核心指标:
- 总执行时间(时钟周期数)
- 总额外数据搬运量(由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策略等。
- 输出:优化后的调度方案 + 两项指标结果。
⏱️ 五、评估指标
- 总执行时间:
- 考虑节点依赖、缓存复用依赖、执行单元独占性。
- 通过流水图可视化各单元并行情况。
- 总额外数据搬运量:
- 由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操作列表 |
| 附件格式 | 文本文件,按任务名组织,压缩提交 |
如果还有其它要求,请随时告诉我,我们一起调整。