跳到主要内容

09 - 实现计划与工作量评估

整体计划

阶段划分

Phase 0: TPUPerf 快速接入 (方案 B)     [3-5 周]
-> 最快获得指令级仿真能力

Phase 1: Python 仿真内核 [3-4 周]
-> 事件引擎 + 单核框架

Phase 2: TIU/DMA 引擎 [4-6 周]
-> 核心计算和搬运建模

Phase 3: 内存子系统 [2-3 周]
-> LMEM + DDR + Cache

Phase 4: 多核互连 [2-3 周]
-> Bus + C2C + CDMA

Phase 5: 指令生成器 [3-4 周]
-> LLM 模型 -> 指令序列

Phase 6: 系统集成 [2-3 周]
-> API + 前端 + 结果适配

总计: 约 17-28 周 (4-7 个月, 1人)

Phase 0: TPUPerf 快速接入

目标: 最快速度获得指令级仿真能力, 验证集成可行性。

任务工作量说明
pybind11 接口设计2天定义 Python-C++ 交互接口
sc_main 重构3天提取核心逻辑为可调用函数
全局状态管理2天reset 机制, 解决多次调用问题
profiler 输出适配2天将 CSV 输出转为 Python dict
CMake + pybind11 构建2天编译 .so 模块
Python wrapper2天封装为 Tier6+Model 接口
Gantt 数据适配2天适配到现有图表系统
测试验证3天对比 TPUPerf 直接运行的结果

风险:

  • SystemC 的 sc_main 只能调一次 -> 可能需要子进程方案
  • 全局状态清理不彻底 -> 多次仿真结果不一致
  • 跨平台编译 (macOS/Linux/Windows) 复杂度

交付物:

  • tpu_perf.so Python 模块
  • API: POST /api/instruction-simulate (binary 模式)
  • Gantt 可视化显示指令级事件

Phase 1: Python 仿真内核

目标: 实现事件驱动调度器和基础框架。

任务工作量说明
EventScheduler3天时间推进, 事件队列, delta cycle
Signal/Port2天信号模型, 延迟更新
Method/Thread3天SC_METHOD/SC_THREAD 等价物
FIFO/Semaphore2天同步原语
Clock1天多时钟域支持
单核骨架3天TIU + DMA 空壳 + 信号连接
单元测试3天调度器正确性验证

验证方式:

  • 简单的 TIU+DMA 并行场景, 验证 cmd_id 同步
  • 多时钟域场景, 验证时钟对齐

Phase 2: TIU/DMA 引擎

目标: 完成核心计算和数据搬运建模。

TIU 引擎 (2-3 周)

任务工作量说明
TIU 状态机2天Init/Compute/Finish
cmd_id 同步1天TIU<->DMA 依赖
消息同步1天send_msg/wait_msg
CONV 延迟3天从 tiuImpl.cc 翻译
MM2.nn/nt/tt 延迟3天三种矩阵乘模式
MM v1 延迟1天旧版矩阵乘
SFU/AR/LIN 延迟2天辅助指令
Bank conflict1天LMEM bank 冲突
对比验证2天与 TPUPerf 逐指令对比 cycle

DMA 引擎 (2-3 周)

任务工作量说明
命令调度2天cmd_dispatch + 依赖检查
Tensor 分段3天NCHW 连续性分析 + 分段
Matrix 分段2天矩阵搬运 + 转置
Fabric 请求生成2天AXI burst 拆分
Outstanding 控制1天信用池
完成跟踪2天ROB + tdmaSyncId
对比验证2天与 TPUPerf 对比 DMA 延迟

Phase 3: 内存子系统

任务工作量说明
LMEM 模型3天Lane 映射 + bank conflict
DDR 模型4天地址映射 + bank conflict + outstanding
Cache 模型4天4-way + LRU + miss 合并
SAM 地址映射2天SG2260/SG2262 地址空间
集成测试2天LMEM-DDR-Cache 联合验证

Phase 4: 多核互连

任务工作量说明
Bus 模型3天NxM 仲裁 + 距离延迟
C2C 链路3天带宽建模 + ROB + 信用
CDMA 引擎4天send/recv + credit + AllReduce
多核组装3天N 核 + Bus + DDR + C2C
终止检测1天全核 idle 检测
多核验证2天与 TPUPerf 8核结果对比

Phase 5: 指令生成器

任务工作量说明
计算图构建3天Transformer 层 -> 操作列表
Tiling 策略4天MatMul/Conv 的 LMEM 分块
指令生成3天操作 -> TIU/DMA 指令
cmd_id 生成2天依赖关系分析
MoE 支持2天Expert routing + AllToAll
MLA 支持2天KV 压缩 + LoRA projection
验证3天生成结果 vs 真实编译器输出

Phase 6: 系统集成

任务工作量说明
API 端点2天/api/instruction-simulate
结果适配器2天转换为标准格式
前端: 模式切换2天数学建模 / 指令级仿真
前端: 文件上传1天.BD/.GDMA 上传
前端: Gantt 增强2天指令级事件显示
前端: 新面板2天TIU/DMA 利用率统计
评估任务集成2天任务队列 + 数据库存储
端到端测试2天完整流程验证

推荐执行顺序

如果有 1 个人

月份 1: Phase 0 (TPUPerf 接入) -> 快速获得能力
月份 2: Phase 1 (仿真内核)
月份 3: Phase 2 (TIU 引擎)
月份 4: Phase 2 续 (DMA 引擎) + Phase 3 (内存)
月份 5: Phase 4 (多核) + Phase 5 前半 (指令生成)
月份 6: Phase 5 续 + Phase 6 (集成)

如果有 2 个人

人员 A (仿真引擎):
月份 1: Phase 1 (仿真内核)
月份 2: Phase 2 (TIU 引擎)
月份 3: Phase 2 续 (DMA) + Phase 3 (内存)
月份 4: Phase 4 (多核)

人员 B (集成 + 生成器):
月份 1: Phase 0 (TPUPerf 接入)
月份 2: Phase 5 (指令生成器)
月份 3: Phase 5 续 + Phase 6 (集成)
月份 4: 端到端验证 + 优化

验证策略

逐级验证

Level 1: 单指令验证
- 每种 TIU 指令的 cycle 计算与 TPUPerf 对比
- 误差 <= 2 cycles

Level 2: 单核验证
- 同一组 .BD/.GDMA, Python vs TPUPerf 总 cycle 对比
- 误差 <= 1%

Level 3: 多核验证
- 8核场景, 对比总 cycle 和 per-core cycle
- 误差 <= 5% (总线仲裁可能有差异)

Level 4: 端到端验证
- LLM 模型 (DeepSeek-V3), 对比性能指标
- 与数学建模结果交叉验证

基准测试集

从 TPUPerfBenchZoo 选取:
1. ResNet50 (单核, 基础验证)
2. BERT Large (单核, Transformer)
3. GPT-2 (单核, 生成模型)
4. FC_QKV (8核, 多核验证)
5. DeepSeek-V3 层 (指令生成验证)

风险和缓解

风险概率影响缓解措施
Python 性能不足Cython 加速关键路径, 或方案 B 兜底
tiuImpl 翻译错误逐指令与 TPUPerf 对比验证
SystemC sc_main 限制子进程方案
指令生成器 Tiling 不准与真实编译器输出对比
DMA 分段逻辑复杂优先实现最常用类型 (TENSOR)
多核同步 bug先单核稳定, 再逐步增加核数