- double-buffer K/V one tile ahead via cp.async to overlap load with tensor-core math (ncu long_scoreboard 2.12->0.53) - reorder wait->barrier->prefetch so one __syncthreads/tile covers both cross-warp publish and buffer-reuse (was two) - add predicated cp_async_16_pred (src-size=0 zero-fills OOB) to unify full/partial tiles, dropping the scalar fallback - halve BC to 16 to keep 3 blocks/SM despite the doubled smem - pack adjacent bf16 output into one 32-bit STG, removing the uncoalesced scalar-store penalty (14%->5% sectors) - result vs torch SDPA: prefill 0.61-0.78x -> 0.70-0.82x, spills eliminated |
||
|---|---|---|
| .. | ||
| kernels | ||
| tests | ||
| __init__.py | ||
| build.py | ||