29. GM读取量<输入数据量(列口径)+缺L2驻留工作集统一模型: 先设计文档后代码 #29

Closed
opened 2026-09-04 08:17:34 +00:00 by admin · 1 comment
Owner

GM 读取量下限 + L2 驻留工作集: 现状核查与统一模型 (先文档后代码)

你的规则 (确认采纳为公理)

R1. 输入 A/B 初始都在 GM, 每字节至少从 GM 读一次 → GM读取量 >= 输入A+B总数据量。
R2. L2 容量 >= 输入A+B总数据量 → GM 只读一次, 后续重复读全走 L2 (L2 读速率 5.2TB/s 独享)。
R3. L2 容量 < 输入A+B总数据量 → 用工作集概念分组执行, 力求最小 L2 替换; 组间复用落空回 GM。

核查结果 (本轮) — 计算层面各分支 GM 均 >= 输入量(一次), 无"少算";

但发现三类问题:

  1. 字节列口径混用: MergeBatch/IterBatch 的 gm_read_bytes/cube_flops/fixpipe_bytes 记每核值, ASW/StreamK 记整芯片值 → 逐行比 GM vs 输入量失真 (例: merge_demo_k_trunc gm=2.10MB vs 整case输入 67.1MB; 实际每核值x32=67.1MB 恰好=输入一次)。统一为整芯片口径并写明列语义。
  2. 缺系统性驻留判定与"整case可驻留"分支: 现场景判定按"单batch工作集"(#24), 但未显式建模 "输入A+B整case <= L2 → GM一次 + 重复读全L2" 的边界, 各分支重复读归属规则散落且部分保守不计 (ASW 场景C窗口内复用不计、K切分分支切段重复读口径不一)。
  3. 广播/不等batch结构 (BatchA != BatchB >=2): GM 按 b*(A_b+B_b) 计为保守放大 (>=真实输入), 文档标注。

交付 (本轮, 先文档后代码)

  1. docs 下新增《08_L2驻留与GM读写_算力口径_设计分析》(含 R1-R3 公理化、整case/单batch/分组三档场景判定、各分支 GM/L2 流量归属表、输出落点联动 #30)。
  2. 按文档落地: 场景判定 + 字节列整芯片口径统一 + GM>=输入一次的不变量(单元测试锁死, 违反即 bug)。
  3. 输入侧计账数值对 demo 44 例 bf16 尽量零回退 (主要是列/注释/文档与新增边界), 输出侧按 #30 变。
## GM 读取量下限 + L2 驻留工作集: 现状核查与统一模型 (先文档后代码) ### 你的规则 (确认采纳为公理) R1. 输入 A/B 初始都在 GM, 每字节**至少从 GM 读一次** → GM读取量 >= 输入A+B总数据量。 R2. L2 容量 >= 输入A+B总数据量 → GM 只读一次, 后续重复读全走 L2 (L2 读速率 5.2TB/s 独享)。 R3. L2 容量 < 输入A+B总数据量 → 用**工作集**概念分组执行, 力求最小 L2 替换; 组间复用落空回 GM。 ### 核查结果 (本轮) — 计算层面各分支 GM 均 >= 输入量(一次), 无"少算"; 但发现三类问题: 1. **字节列口径混用**: MergeBatch/IterBatch 的 gm_read_bytes/cube_flops/fixpipe_bytes 记**每核值**, ASW/StreamK 记**整芯片值** → 逐行比 GM vs 输入量失真 (例: merge_demo_k_trunc gm=2.10MB vs 整case输入 67.1MB; 实际每核值x32=67.1MB 恰好=输入一次)。统一为整芯片口径并写明列语义。 2. **缺系统性驻留判定与"整case可驻留"分支**: 现场景判定按"单batch工作集"(#24), 但未显式建模 "输入A+B整case <= L2 → GM一次 + 重复读全L2" 的边界, 各分支重复读归属规则散落且部分保守不计 (ASW 场景C窗口内复用不计、K切分分支切段重复读口径不一)。 3. **广播/不等batch结构** (BatchA != BatchB >=2): GM 按 b*(A_b+B_b) 计为保守放大 (>=真实输入), 文档标注。 ### 交付 (本轮, 先文档后代码) 1. docs 下新增《08_L2驻留与GM读写_算力口径_设计分析》(含 R1-R3 公理化、整case/单batch/分组三档场景判定、各分支 GM/L2 流量归属表、输出落点联动 #30)。 2. 按文档落地: 场景判定 + 字节列整芯片口径统一 + GM>=输入一次的不变量(单元测试锁死, 违反即 bug)。 3. 输入侧计账数值对 demo 44 例 bf16 尽量零回退 (主要是列/注释/文档与新增边界), 输出侧按 #30 变。
Author
Owner

修复 commit: b9e07ed (设计文档先行: docs/05_L2驻留GM读写与dtype算力口径_设计分析.md)

落地:

  1. 设计分析文档: R1(GM首读下限 GM>=V_in)/R2(驻留窗口)/R3(整case全驻留)/R4(输出落点)/R5(输入工作集场景)/R6(已知简化) 公理化 + §5 逐分支 GM/输出计账表 + §4.4 列口径说明;
  2. 字节列统一整芯片口径: MergeBatch/IterBatch 的 gm_read_bytes/cube_flops/fixpipe_bytes 由每核值改为整芯片值 (K截断 GM 恰 = V_in; K切分 >= V_in, padding 上取), dma_cmd_count 注明为单核命令数; models.HardwareTiming 字段语义文档同步;
  3. GM>=V_in 不变量入测试: 代表 case 精确断言 + 随机多 dtype 冒烟 (含 fp4/fp8/int8/fp32, 见 test_issue29_*); 压力回归 10000 例 0 次 GM<V_in;
  4. 核查结论写入 issue: 计算层面各分支 GM 原本均已 >= 输入一次, 用户看到的 "GM<输入" 来自列口径混用假象 (例: merge_demo_k_trunc gm 列 2.10MB vs 整case输入 67.1MB; ×32 后恰 = V_in); 广播/不等 batch 结构的保守放大已文档标注 (R6②);
  5. demo 44 例中 iter/merge 行的 gm/fix 列变化为纯口径归一 (数值时延仅受 #30 输出落点影响)。

验证: 49/49 单测; 双压力 seed7/6000 + seed2024/4000 全绿; examples 三件套重生成且可复现 0 diff。

修复 commit: b9e07ed (设计文档先行: docs/05_L2驻留GM读写与dtype算力口径_设计分析.md) 落地: 1. 设计分析文档: R1(GM首读下限 GM>=V_in)/R2(驻留窗口)/R3(整case全驻留)/R4(输出落点)/R5(输入工作集场景)/R6(已知简化) 公理化 + §5 逐分支 GM/输出计账表 + §4.4 列口径说明; 2. 字节列统一整芯片口径: MergeBatch/IterBatch 的 gm_read_bytes/cube_flops/fixpipe_bytes 由每核值改为整芯片值 (K截断 GM 恰 = V_in; K切分 >= V_in, padding 上取), dma_cmd_count 注明为单核命令数; models.HardwareTiming 字段语义文档同步; 3. GM>=V_in 不变量入测试: 代表 case 精确断言 + 随机多 dtype 冒烟 (含 fp4/fp8/int8/fp32, 见 test_issue29_*); 压力回归 10000 例 0 次 GM<V_in; 4. 核查结论写入 issue: 计算层面各分支 GM 原本均已 >= 输入一次, 用户看到的 "GM<输入" 来自列口径混用假象 (例: merge_demo_k_trunc gm 列 2.10MB vs 整case输入 67.1MB; ×32 后恰 = V_in); 广播/不等 batch 结构的保守放大已文档标注 (R6②); 5. demo 44 例中 iter/merge 行的 gm/fix 列变化为纯口径归一 (数值时延仅受 #30 输出落点影响)。 验证: 49/49 单测; 双压力 seed7/6000 + seed2024/4000 全绿; examples 三件套重生成且可复现 0 diff。
admin closed this issue 2026-09-04 08:26:36 +00:00
Sign in to join this conversation.
No Label
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: admin/matmul-analysis#29
No description provided.