hp-l33's picture
Add Sol-Attn Kernel Builder source
8e9f35a verified
Raw
History Blame Contribute Delete
1.43 kB
"""Frozen Hopper kernel recipe."""
import cutlass
from .fwd import SolAttnSplitForwardSm90
from .mainloop import SolAttnMainloopSm90
def make_kernel(tokens: int, kv_splits: int):
blocks = (tokens + 63) // 64
full_groups, tail = divmod(blocks, 64)
has_full_groups = tail == 0
has_full_blocks = tokens % 64 == 0
kernel = SolAttnMainloopSm90 if kv_splits == 1 else SolAttnSplitForwardSm90
return kernel(
cutlass.BFloat16,
head_dim=128,
head_dim_v=128,
qhead_per_kvhead=1,
is_causal=False,
is_local=False,
pack_gqa=False,
tile_m=64,
tile_n=64,
num_stages=1,
num_threads=128,
sol_attn_assume_lane_group_route_reduce=(
has_full_blocks and has_full_groups
),
sol_attn_assume_full_k_exact_blocks=has_full_blocks,
sol_attn_tail_exact_words1=0 < tail <= 8,
sol_attn_assume_full_route_groups=has_full_groups,
sol_attn_static_num_full_route_groups=(
-1 if has_full_groups else full_groups
),
sol_attn_static_tail_valid_count=(-1 if has_full_groups else tail),
sol_attn_tail_physical_tile16=0 < tail <= 16,
sol_attn_exact_mask_seqlen_last_only=(
not has_full_blocks
),
sol_attn_tail16_lane_group_route_reduce=tail == 16,
sol_attn_num_splits=kv_splits,
)
__all__ = ["make_kernel"]