MergeBatch L1 绑定情形 DMA 命令数多计 b0 倍, 且 beats_iterbatch 截断判定与方案口径不一致 #35
Reference in New Issue
Block a user
No description provided.
Delete Branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
现象
B=128, M=1~16, K=512, N=128, bf16: 两切B分支均满足进入条件 (candidates 均 True), 但仲裁全部判 IterBatch 胜 (T_MergeBatch 比 T_IterBatch 高 0.4~0.6us)。用户质疑: MergeBatch 在重叠区应更有竞争力。根因 (两处缺陷)
缺陷 1: MergeBatch evaluate 的 L1 绑定情形 DMA 命令数多计 b0 倍 (P1, 影响仲裁方向)
merge_batch.pyevaluate 的 L1 绑定分支:dma_cmds = b_core * n_k, 其中n_k = ceil(K/k_l1^m)是合并后的 K 段数。v1.1 §4.4 的"命令数与 IterBatch 相同 = b_core·n_K"中的 n_K 是未合并粒度; 代入合并后段数导致多计 b0 倍。真实命令数 = 合并组数 × 每组 K 段数 =
ceil(b_core/b0) * ceil(K/k_l1^m)。本 case (b_core=4, b0=4, k_l1^m=240): 真实 1×3=3 条 (比 IterBatch 的 4 条还少), 模型计成 4×3=12 条, 虚增 450ns 命令时延, 直接把仲裁翻成 IterBatch。修复后 m=1/2 由 MergeBatch 胜 (与分界条件一致), m=4/8/16 仍 IterBatch (drain 随 M 增长, 命令节省打不平), 交叉点 m≈2~4, 物理合理。
缺陷 2: beats_iterbatch 的"K 截断"判定与方案口径不一致 (P2, 注释误导 + T_cmd<=0 策略路径会选错)
beats_iterbatch用未合并的k_l1_iter = min(K, L1/(2(M+N)dt)) >= K判截断 (v1.1 line 219 字面), 与 make_plan/evaluate 的合并口径k_l1^m = min(K, k_l1*/b0, 512B/dtype)(v1.1 line 161) 矛盾: m=1/2 时未合并截断但合并后 k_l1=240<K, 仲裁注释误报"分界条件判 MergeBatch 胜 (K截断)"。当前 T_cmd=50ns>0 时时延模型终审兜住了最终选择, 但 T_cmd<=0 策略路径会直接依此误判选错分支。此外 v1.1 的"K截断/L1绑定"二分未覆盖 dValue 512B 推荐值截断第三情形: IterBatch a/b 形态 k_l1=K 不受 cap, 合并侧受 cap (k_l1^m=256), 此时 n_K^m=n_K, 命令数打平 (而非 b0 倍节省也非 b0 倍放大), 文档两种情形都不适用。
修复方案
dma_cmds = ceil(b_core/b0) * ceil(K/k_l1^m)(K 截断时退化为 b_core/b0, 与现口径一致; L1 绑定情形消除 b0 倍多计);savings = (cmds_iter - cmds_mb)*T_cmdvsdrain_pen = (b0-1)*(T_comp+T_write); K 截断时严格退化为文档闭式b_core > b0*(T_comp+T_write)/T_cmd, L1 绑定理想情形退化为恒劣; T_cmd<=0 策略路径改为cmds_mb < cmds_iter(结构性命令/指令节省) 判 MergeBatch 优先;(128,64,64,512)的 T_cmd=0 期望从 True 改 False: 该 case 合并侧被 dValue 512B cap 截断 (k_l1^m=256, n_K^m=2), 命令数与 IterBatch 打平 (4=4), 无节省且 drain 翻倍, 物理上应为恒劣 —— 原期望建立在未合并口径的误分类上;影响面
已修复, commit
fdd3c88已推送 main。修复内容
用户 case 家族修复后路由 (B=128, N=128, K=512, bf16)
交叉点 m≈4~8: 命令节省固定 50ns (3 vs 4 条), drain 惩罚随 M 线性增长, 小 M 合并胜、大 M 逐 batch 胜 —— 物理合理, 且小 M 端与"MergeBatch 应更有竞争力"的直觉一致。
关于"静态优先级": 未引入。v1.1 §4.5 的统一分界就是重叠区的裁决机制 (L1 绑定恒劣有证明), 静态优先 MergeBatch 会在恒劣区选错; 本轮修复让时延模型口径恢复诚实后, 仲裁结果已与理论直觉对齐。
验证