Fix: track reader anti-dependencies in TensorMap - #1810
Conversation
|
Important Review skippedDraft detected. Please check the settings in the CodeRabbit UI or the ⚙️ Run configurationConfiguration used: Organization UI Review profile: CHILL Plan: Pro Plus Run ID: You can disable this status message by setting the Use the checkbox below for a quick retry:
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
32ad4d7 to
b609d69
Compare
Track opt-in reader accesses separately from writers across A2/A3 and A5 HBG/TMR, and make later writes acquire the corresponding WAR dependencies. Exercise tracked inputs in the existing scalar_data examples, refresh PTO-ISA, and enable the A5 simulator MX FP GEMM cases.
PR #1810: TensorMap WAR 依赖跟踪优化 - 技术方案与验证问题背景本 PR 解决 issue #1306 暴露的 WAR (Write-After-Read) 正确性问题。 原有问题:TensorMap 只索引 writer,无法发现仍在执行的 reader,导致在以下访问序列中缺少 当 核心方案从全量 reader 发布改为 opt-in 语义,新增显式的
设计原理:正确的依赖链为: 多个 reader 仍可并行,因为 reader 不查询其他 reader: 实现关键点四套 runtime 统一语义:
依赖生成机制:
HBG 特定优化:
Graph boundary 处理:
生命周期保证:
验证状态A2/A3 硬件验证:
A5 硬件验证:
回归覆盖:
使用示例优化前(可能遗漏 WAR 依赖): # 普通 reader 不发布到 TensorMap
add_input(x)
# 后续 writer 无法发现前面的 reader,可能提前执行
add_output(x) 优化后(显式跟踪 WAR 依赖): # 显式 reader,发布到 TensorMap
add_tracked_input(x)
# 后续 writer 能正确发现前面的 reader,生成 WAR 依赖
add_output(x) 实际应用案例(A5 # 改造前:Step 11 使用普通 input
add_input(c)
# Step 12 需要用伪 writer 来注册依赖
add_output(ext_b)
# 改造后:Step 11 显式跟踪
add_tracked_input(c)
# Step 12 直接使用 tracked input,更语义化
add_tracked_input(ext_b)改造后性能验证:Host -1.70% / Device -0.42% / Orch -1.71%,无性能回退。 技术价值正确性保证:完全解决 issue #1306 的 WAR 正确性问题,在获得显著性能改善的同时不妥协正确性。 性能优化:从昂贵的"全量 reader 进 TensorMap"优化到高效的"tracked_input opt-in"方案(详见性能对比评论)。 统一语义:A2/A3、A5 的 HBG 与 TMR 四套 runtime 使用相同的访问规则,降低认知负担和维护成本。 用户友好:通过显式 |
性能优化验证:全量 reader → tracked_input opt-in优化路径本 PR 探索了从昂贵的"全量 reader 进 TensorMap"到高效的"tracked_input opt-in"方案的优化路径: 方案对比:
性能测试说明测试配置:
数据来源:
A2/A3 详细性能数据| 负载 | 全量 reader相对 main | tracked_input相对 main | 优化收益 | 说明:H = Host,D = Device,O = Orch;正数表示变慢,负数表示变快 A5 详细性能数据| 负载 | 全量 reader相对 main | tracked_input相对 main | 优化收益 | 说明:H = Host,D = Device,O = Orch;正数表示变慢,负数表示变快 中位数汇总
核心结论✅ tracked_input opt-in 方案显著优于全量 reader 方案 A2/A3 关键发现:
A5 关键发现:
性能分析为什么 tracked_input 方案更优:
架构差异分析:
实际应用验证A5
容量影响:
最终结论本 PR 通过引入
建议:从 Draft 转为正式 PR,准备合并到主分支。 |
变更摘要
TRACKED_INPUT/add_tracked_input(),让需要约束后续重叠写的 reader 显式发布到 TensorMap。INPUT只查询 writer,TRACKED_INPUT额外注册 reader。INOUT、OUTPUT_EXISTING和 host write 查询 tracked reader 并生成 WAR;多个只读 reader 保持并行。NO_DEP保留 creator 依赖以维持 tensor 生命周期,但不查询或发布 TensorMap access。TRACKED_INPUT自动回退到普通执行路径。证据索引
15d168f1)验证口径
15d168f19ad5edfb9ad5edfbcc121441最终 head
99a933fe在 A2/A3、A5 的 HBG 与 TMR 上统一采用显式 reader 发布。性能数据分别比较“read 全进 TensorMap”和“当前 TMR opt-in 方案”与 main;A5 当前方案相对 main 的结果由已有两阶段配对数据复合计算。所有硬件命令均通过
task-submit执行。验证结论
正数表示变慢,H/D/O 表示 Host / Device / Orch。
A2/A3 性能
alternating_matmul_addCase1benchmark_bgemmCase0paged_attention_unrollCase1paged_attention_unrollCase2paged_attention_unroll_manual_scopeCase1paged_attention_unroll_manual_scopeCase2batch_paged_attentionCase1A5 性能
A5 当前方案相对 main 的结果由已有两阶段数据复合得到:
(1 + read 全进 TensorMap 相对 main) × (1 + 当前方案相对 read 全进 TensorMap) - 1。alternating_matmul_addCase1paged_attention_unrollCase1paged_attention_unrollCase2batch_paged_attentionCase1最终 head 已通过
git diff --check、完整 pre-commit 和公共无硬件 C++ 测试 98/98。Refs #1388
Refs #1306