33. ASW_Basic tile 选择僵化恒为176: BaseM/N 应用 L0C 单缓冲方形256, SingleCoreM/N 应用 v1.91 §5.2 有界枚举最小搬入 #33
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?
现象 (examples/plans.csv)
cases_demo 所有 ASW_Basic 行的 SingleCoreM/SingleCoreN/BaseM/BaseN 恒为 176(=sqrt(L0C/(2*4B)) 对齐16), 不随 case 形状变化。
根因 (对照 ASW_Basic分支分析_v1.91 §5.1/§5.2 + BMM尾轮处理策略对比分析_v1.5)
sqrt(L0C/(2*4B))=181->176(L0C 双缓冲两份 32768 元素); v1.91 §5.1 明确: 950PR 的 Fixpipe UnitFlag 提供 tile 内 16x16x16 细粒度流水, 取代 tile 间粗粒度双缓冲 -> 默认 UnitFlag 单缓冲, BaseM*BaseN = L0C/4B = 65536 元素, 方形 256x256 (L0A/L0B 同时装满, baseK 加倍); 仅当 M/N < 方形边长时被迫跟随 M/N (BaseM=min(⌊M⌋16...), 另一维 = min(65536/BaseM, N) 向下16对齐)。影响
tile 过度切分 -> mCnt/nCnt 成倍放大 -> L2 共享块重复读流量被放大约 2-3x (如 b128_m8192_n8192_k7168 重复读 1.38TB -> 应显著降低), 搬移时延与瓶颈判定偏离理论最优。
修复
修复 commit:
05ca91e落地 (对照《ASW_Basic分支分析 v1.91》§5.1/§5.2 + 《BMM尾轮处理策略对比分析 v1.5》§2.1):
方形优先 (L0A/L0B 同时装满、baseK=64 比跟随 M/N 加倍); M/N < 256 被迫跟随 M/N,
另一侧按 L0C 余量放大且收敛 L0A/L0B (baseK>=16) 单边上限 (修掉 M=16 时 BaseN=4096 超 L0B 的缺口);
退回 Base 兜底, 即用户看到的恒 176 根因): P=1 (B>=C) 先试不切分 (tile 跟随 M/N),
否则枚举 mCnt<=ceil(M/BaseM) x nCnt<=ceil(N/BaseN) 且 BmCntnCnt>=C; sM/sN 为 Base
整数倍 (约束4); 约束2 由 L1 双缓冲反推 k_L1; 约束3 dValue>=256B 转置感知 + minTile 16KB;
目标 = 每 batch 总搬入 Kdt(nCntM + mCntN) 最小 (v1.5 修正口径: 稳态下 k_L1 与搬入总量
无关, k_L1 只进约束); 并列取 r = BmCntnCnt mod C 最大;
(如 N=8 int8 大K, B 侧 dValue = sN*dt 物理不可满足) 仍无解时退回 Base tile 并自检标注
违规 (不再像旧模型那样静默产出伪可行方案);
保持双缓冲 (其文档口径本就如此);
issue#33 更新; docs/05 无涉 (tile 选择不影响 GM/L2 场景口径, 仅 tile 尺寸作为输入)。
验证 (61/61 全过):
r=0 (与文档表格逐项一致);
(M/N 极小 + 大 K + fp8/fp4) 的如实标注 (自检违规列), 不再静默;
数值影响 (demo 节选): tile 从恒 176x176 变为自适应 (512x512 / 512x128 / 16x1024 等),
mCnt/nCnt 相应收缩; 共享块重复读流量大幅下降 (如 b128_m8192_n8192_k7168 L2 重复读
1.38TB -> 451GB, b16_m32768_n8192_k7168 695GB -> 231GB), 时延随之下移或瓶颈回归 MMAD
(如 b128_m8192_n8192_k7168: 253.4ms MMAD-bound, b32_m8192_n8192_k7168 63.3ms)。