[muh] tuning_reduce: 修正 SMEM 模型错误 (基于 agent_reduce.cuh 源码分析)
关键修正:
旧注释: 'tile = tpb * ipt * accum_size ≤ 48KB SMEM'
实际: reduce 不使用 BlockLoad 的 SMEM staging buffer!
数据直接从 global memory 加载到寄存器 (striped/vectorized)
SMEM 仅用于 BlockReduce (warp shuffle scratch, << 1KB)
真正的约束是寄存器压力: items[ITEMS_PER_THREAD] 全在寄存器里
items=24 float32 → ~24 regs → 可以接受 (64K regs/SM)
from agent_reduce.cuh:
- ConsumeFullTile: 直接 striped load 或 VectorT 加载到 items[] 数组
- 没有 BlockLoad::TempStorage (不像 scan 有 union {load, store, scan})
- ATTEMPT_VECTORIZATION 条件: vec_size>1, items%vec==0, sizeof≤8
- 数值不变 (items=24 对 float32 是合理的, 只是理由从错误的 SMEM 改为正确的寄存器压力)
from kernel_reduce.cuh:
- atomic path (not_guaranteed): atomicAdd 聚合, 16 SMs 上 contention 极低
- LOAD_LDG 保留 (等 bench 数据, topk 显示 LOAD_DEFAULT 可能更优)