← 所有笔记
学习

venus学习 10/14

理解为什么配置了 4 个 Tile,却只有 1 个 Tile 工作;构造多任务实验,验证 Cluster 的并行执行能力,并比较 RTL 与 gem5。

2. 单任务:增加 Tile 数不一定加速

原始 LDPC DAG 只有一个普通任务 Task 0,对应函数 test_1。

flowchart LR
    A["DAG:只有 Task 0"] --> B["L2 Scheduler"]
    B --> C["Tile 0 执行"]
    D["Tile 1~3 空闲:没有更多任务"]

249d57c5659ad4e00ac6d841f5877c98.png 理解:

  • 调度器负责将任务分配给 Tile。
  • 一个普通任务不会自动拆成四份,分到四个 Tile。

3. 四任务:先在 gem5 中观察并行收益

构造四份独立 LDPC 任务,分别使用 1、2、4 个 Tile。

flowchart TD
    A["固定:4 个独立任务"] --> B["1 Tile:依次执行"]
    A --> C["2 Tiles:两路并行"]
    A --> D["4 Tiles:四路并行"]

第一轮 gem5 批量实验结果:

Tile 数 四任务批次完成时间 相对 1 Tile 加速比
1 276.872 μs 1.00×
2 140.628 μs 1.97×
4 75.520 μs 3.67×

这里是从仿真时间零到 DAG 完成的计时口径,包含模型中的任务装载、结果返回等过程。

发现的问题:这版批量数据镜像约 513.5 KiB,超过文档配置的 RTL Cluster 共享存储容量 384 KiB。因此,这组结果可以说明 gem5 中的并行趋势,但不能直接视为 RTL 已验证的多核性能。

4. 为 RTL 构造容量合适的四任务 DAG

重新从 BAS 源码构造四次 test_1 调用。

flowchart LR
    A["LLR_0"] --> T0["Task 0:test_1"] --> O0["out0"]
    B["LLR_1"] --> T1["Task 1:test_1"] --> O1["out1"]
    C["LLR_2"] --> T2["Task 2:test_1"] --> O2["out2"]
    D["LLR_3"] --> T3["Task 3:test_1"] --> O3["out3"]

关键设计:

  • 四个任务调用同一个函数,编译产物复用代码。
  • 每个任务使用独立的 LLR 缓冲区,因为计算会修改数据。
  • 每个任务返回 384 字节,共四份输出。
  • 编译后的 BIN 为 241,728 字节;加上四份返回数据后仍小于 384 KiB。
  • 修改实验副本中的 L1 程序,接收四份返回结果。

实验目录:

bringup/ldpc-rtl-four-20261015-020639/

5. 跑通同一份程序的 RTL 与 gem5 链路

flowchart TD
    A["四任务 BAS + LDPC C"] --> B["DSL 调用 LLVM 编译"]
    B --> C["dag1.bin + dag1.json"]
    C --> D["L1:make venus"]
    D --> E["L1 ELF 与数据数组"]
    E --> F["生成 dag1_test_data.svh"]
    F --> G["VCS 编译 → simv → RTL 仿真"]
    E --> H["提取任务 manifest"]
    H --> I["gem5:4 Tiles"]
    G --> J["核对输出、Tile 分配和执行耗时"]
    I --> J

RTL 编译曾返回退出码 2。排查发现当前终端没有配置好 VCS 命令路径,设置环境变量后重新编译成功。

注意:编译错误需要看日志中的具体原因,退出码本身不能证明是 License 问题。

6. 四任务 RTL 与 gem5 对比结果

两边均将 Task 0~3 分配到 Tile 0~3,四个任务存在重叠执行。

任务 Tile RTL 执行耗时 gem5 执行耗时
Task 0 0 68.072 μs 67.440 μs
Task 1 1 67.544 μs 67.160 μs
Task 2 2 68.232 μs 67.300 μs
Task 3 3 68.324 μs 67.396 μs

四份输出逐字节一致,每份 384 字节。这证明两种实现的本次输出一致;还不是与独立 LDPC 标准答案的验证。

统一整体计时口径:

四任务执行跨度 = 最后一个任务执行完成 − 第一个任务开始执行
不包含最后的结果返回 DMA。

RTL gem5 gem5 相对偏差
74.384 μs 73.396 μs −1.33%

不能把四个任务的执行时间相加当作整体耗时,因为它们在并行运行。

7. 今天真正理解的内容

  • Tile 与 Lane 不同:Tile 可理解为计算核;Lane 是核内部的向量并行通道。
  • 任务数决定可用并行度:多配几个 Tile,不会自动把普通任务拆开。
  • 多核提高吞吐量:约一个任务的时间内完成多份任务,不等于单个任务变快四倍。
  • 比较性能必须统一条件:任务数据、硬件容量、Tile 数和计时边界都要明确。
  • RTL 与 gem5 各有用途:RTL 验证硬件实现,gem5 便于架构实验;用相同程序对比,检查模型是否接近硬件。

DAG · Task · L2 Scheduler · Tile · Lane
任务级并行 · 共享存储容量 · 吞吐量 · 加速比 · 计时边界