31. IterBatch/MergeBatch GM 读取量超输入总量: K切分按整段上取+驻留侧重复计, 应每字节恰读一次=V_in #31

Closed
opened 2026-09-04 09:06:37 +00:00 by admin · 1 comment
Owner

现象 (result_recommend.csv)

b64_m16_n256_k512 (IterBatch, 形态 c, K=512 切 3 段 k_L1=240): gm_read_bytes=25.1MB > 输入 A+B 总量 17.8MB。

根因

IterBatch 的 K 切分各 (batch, K段) 数据互不重叠, 每个输入字节恰好从 GM 读一次 (重复读只存在于 L1 驻留形态内部, 不产生 GM/L2 流量); 当前模型把每段按整段 k_L1 计 (末段剩余 512-2x240=32 也按 240 计), 且形态 c 把"驻留侧 A"按每个 K 段重复计, 造成 GM 上浮 ~40%。MergeBatch 的 L1 绑定分支同类 (n_K*k_L1 上取)。
这与 "GM 至少读一次、每字节恰好一次即最优" 的物理口径不符 (docs/05 R1 之前把"末段整段上取"当作建模约定, 现撤销)。

修复 (按 R1 精确计)

  • IterBatch/MergeBatch: GM 读取量 = V_in (每字节一次; 驻留侧只计一次、末段按实际剩余计), GM 数据时延 = V_in/带宽; n_K/k_L1 只决定 DMA 命令次数 (T_cmd) 与双缓冲调度, 不再放大数据量;
  • 代码注释、docs/02 (01_MergeBatch / 02_IterBatch 分支文档搬移公式附注) 与 docs/05 §5 同步;
  • 回归: 形态 c 非整除 / 形态 d 非整除 / MergeBatch L1 绑定 三类 case 断言 gm == V_in。
## 现象 (result_recommend.csv) b64_m16_n256_k512 (IterBatch, 形态 c, K=512 切 3 段 k_L1=240): gm_read_bytes=25.1MB > 输入 A+B 总量 17.8MB。 ## 根因 IterBatch 的 K 切分各 (batch, K段) 数据互不重叠, 每个输入字节**恰好从 GM 读一次** (重复读只存在于 L1 驻留形态内部, 不产生 GM/L2 流量); 当前模型把每段按整段 k_L1 计 (末段剩余 512-2x240=32 也按 240 计), 且形态 c 把"驻留侧 A"按每个 K 段重复计, 造成 GM 上浮 ~40%。MergeBatch 的 L1 绑定分支同类 (n_K*k_L1 上取)。 这与 "GM 至少读一次、每字节恰好一次即最优" 的物理口径不符 (docs/05 R1 之前把"末段整段上取"当作建模约定, 现撤销)。 ## 修复 (按 R1 精确计) - IterBatch/MergeBatch: GM 读取量 = V_in (每字节一次; 驻留侧只计一次、末段按实际剩余计), GM 数据时延 = V_in/带宽; n_K/k_L1 只决定 DMA 命令次数 (T_cmd) 与双缓冲调度, 不再放大数据量; - 代码注释、docs/02 (01_MergeBatch / 02_IterBatch 分支文档搬移公式附注) 与 docs/05 §5 同步; - 回归: 形态 c 非整除 / 形态 d 非整除 / MergeBatch L1 绑定 三类 case 断言 gm == V_in。
admin closed this issue 2026-09-04 09:13:05 +00:00
Author
Owner

修复 commit: 18f5959

落地 (issue 正文方案):

  1. IterBatch/MergeBatch evaluate: GM 数据量 = V_in (每字节恰从 GM 读一次; 形态 c 驻留侧每 batch 只搬一次, 切 K 末段按实际剩余计, 不再按整段上取), GM 数据时延 = V_in/W_GM (全核并发); n_K/k_L1 只决定 DMA 命令数 (T_cmd 项) 与双缓冲调度;
  2. b64_m16_n256_k512 (形态 c): GM 25.07MB -> 17.83MB = V_in; MergeBatch L1 绑定分支同修;
  3. docs/02 (01_MergeBatch / 02_IterBatch 分支文档) 公式附注 + docs/05 R6(2)/§3.1/§5 同步 (去 padding 上取);
  4. 回归 (54/54): 形态 c 非整除 / 形态 d 非整除 (K=5000) / MergeBatch L1 绑定 三类 gm == V_in。

物理口径: IterBatch/MergeBatch 无 L2 级重复读结构 (K 段/驻留侧互不重叠), GM 与 L2 容量无关 —— 每字节恰好从 GM 读一次即最优。

修复 commit: 18f5959 落地 (issue 正文方案): 1. IterBatch/MergeBatch evaluate: GM 数据量 = V_in (每字节恰从 GM 读一次; 形态 c 驻留侧每 batch 只搬一次, 切 K 末段按实际剩余计, 不再按整段上取), GM 数据时延 = V_in/W_GM (全核并发); n_K/k_L1 只决定 DMA 命令数 (T_cmd 项) 与双缓冲调度; 2. b64_m16_n256_k512 (形态 c): GM 25.07MB -> 17.83MB = V_in; MergeBatch L1 绑定分支同修; 3. docs/02 (01_MergeBatch / 02_IterBatch 分支文档) 公式附注 + docs/05 R6(2)/§3.1/§5 同步 (去 padding 上取); 4. 回归 (54/54): 形态 c 非整除 / 形态 d 非整除 (K=5000) / MergeBatch L1 绑定 三类 gm == V_in。 物理口径: IterBatch/MergeBatch 无 L2 级重复读结构 (K 段/驻留侧互不重叠), GM 与 L2 容量无关 —— 每字节恰好从 GM 读一次即最优。
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#31
No description provided.