NPU 挑战实验说明
过去这些年,AI 从识别图片发展到能写代码、做科研的大模型,背后是大量的矩阵乘法和相应的加速硬件。模型越大、上下文越长,对算力、带宽和能效的要求就越高。从手机里的 NPU,到数据中心的 TPU,再到 GPU 里的 Tensor Core,AI 硬件的竞争,本质上就是“怎样用更少的面积和功耗,把矩阵乘做得更快”的竞争。
本实验就是亲手做一遍 NPU:我们提供一套基于 4x4 脉动阵列(systolic array)的 NPU 参考实现(SystemVerilog 和 Chisel 两个版本)以及配套 C 驱动;你需要把它集成到自己的 RISC-V SoC 中,在 CPU 上运行矩阵乘,测量真实算力与利用率,并针对瓶颈做优化。
这个实验并不轻松,但会很有收获
它涉及从底层硬件到上层软件的多个领域,调试量不小。但做完之后,你会对“AI 芯片为什么长这样”“峰值算力和实际算力差在哪里”“一个矩阵乘从一行 C 函数调用到硬件进行乘加运算到底经过了多少层”有非常具体的理解。
本实验与 uCore 挑战实验 并列,是大实验的不同进阶方向。本实验在 CPU 已经能工作的基础上,集成一个 NPU,并分析计算与访存瓶颈,再进行软硬件协同优化。两者都需要较大的投入,建议根据自己的兴趣和时间谨慎选择,不建议同时做,也不要卷功能数量。
前置要求
在开始本实验前,你的 CPU 需要首先能够运行监控程序完整版本,包含中断、异常和页表支持,与 uCore 挑战实验的前置要求一致。如果你的 CPU 还没有时钟计数(rdcycle 或 mtime),需要先实现一种计时手段,否则无法做性能评测。
先跑通 CPU,再做 NPU
如果 CPU 还不能稳定运行监控程序完整版本,建议先完成大实验。NPU 实验中可能会遇到很多计算结果错误的问题,最终都会追溯到总线、地址译码或软件编译问题,而不是 NPU 本身。
实验内容
本实验的核心是“集成 + 评测 + 优化”,具体要求如下。
1. 集成 NPU
把 NPU 的顶层模块 npu_top 作为 Wishbone Slave 挂到总线上:
- 地址窗口
0x2000_0000,掩码0xFFFF_0000(64KB); - 在 Wishbone 总线上挂载
npu_top; - NPU 与 CPU 使用同一时钟,注意复位极性(
npu_top高有效)。
2. 跑通矩阵乘
使用 cod-npu 仓库根目录下的 software/npu.c / npu.h,在 CPU 上完成:
- 4x4x4 的基础矩阵乘;
- 8x8x8、16x16x16、32x32x32 的通用矩阵乘;
- 运算结果与
npu_matmul_sw(CPU 标量参考实现)对拍。
注:形如 MxNxK 的矩阵乘表达方式,代表的是 MxK 矩阵乘以 KxN 矩阵,得到 MxN 矩阵。
3. 测量性能
至少选择 5 种不同规模的矩阵乘,在 CPU 侧测量端到端周期数,计算:
- 实际算力(INT8 OPS);
- 理论峰值算力(INT8 OPS);
- 算力利用率(%)。
同时分析周期都花在了哪里:计算、L0A/L0B/L0C 访问、数据搬运、CPU 开销各占多少。画出各单元工作的 Gantt 图和数据流图。分析 NPU 做矩阵乘的 Roofline 模型。
4. 做优化
从 NPU 性能优化方向中选择多项,完成设计、实现和评测,并给出优化前后的对比。
不能硬编码矩阵乘
为了保证灵活性,不允许把完整的矩阵乘直接硬编码在硬件里。必须由 CPU 调度 NPU 的 LDTILE/TMUL 等指令,并且至少用 5 种不同规模的矩阵来展示灵活性。可以把常用矩阵形状的算子做成软件库,但不能只支持一种固定的矩阵大小。
5. 报告与答辩
报告至少应包含:软硬件设计、正确性验证、性能数据、瓶颈分析、优化前后对比,并在答辩中展现对整个 CPU + NPU + 软件系统的理解。具体要求见实验步骤和性能评测与优化。
答辩时,需要:
- 在 ThinPAD 云平台上运行你的 CPU + NPU,串口打印矩阵乘法的实际性能,矩阵乘结果正确;
- 展示至少 5 种规模的性能数据,并解释计算公式和单位;
- 展示所做优化的前后对比,说明瓶颈和收益;
- 能回答关于设计细节的问题。
关于 AI 政策
在 AI 时代,很多工作可以由 AI 代劳;但最重要的是,人应当理解整个设计,知道如何分析性能瓶颈、如何针对瓶颈设计软硬件。除了追求峰值性能与实测性能,更重要的是展示你对 CPU + NPU + 软件整体系统的理解:如何从初始版本出发,一步一步分析性能,当前瓶颈是计算还是访存,主要瓶颈位于哪个部件的哪个步骤,有哪些优化思路,如何评估可行性与收益,以及最后如何落地。这些才是你应当从这门课程中带走的知识,而不是只知道向 AI 许愿。
最后再次提醒:人生很精彩,适度娱乐,拒绝内卷。祝各位造机愉快!