KernelBench hard · RTX PRO 6000

Sonic MoE Grok 4.6

10.1%geomean peak fraction across shapes

manually audited: clean

Triton grouped GEMM + fused SwiGLU epilogue (gate/up packed). CUDA-graph keyed on hidden/offsets/out data_ptr plus tile sizes; recaptures on a new key.

harnessgrokagent session1h 10mtotal wall1h 14mcheck2mbenchmark79soutput tokensregimecompute

Per-shape vs governing ceilingeach shape graded against whichever binds — bf16 compute or HBM bandwidth

32768×4096×1536×128×819.912 ms8.3%0.31 TB/s · 17% of 1.8 TB/s HBM · also 41 TFLOPS (8% of compute)
4096×2048×1024×64×40.451 ms15.2%1.41 TB/s · 79% of 1.8 TB/s HBM · also 76 TFLOPS (15% of compute)
16384×2048×4096×64×813.315 ms8.3%0.28 TB/s · 16% of 1.8 TB/s HBM · also 41 TFLOPS (8% of compute)

compute-bound memory-bound · bar + right column = official fraction of the ceiling (the geomean input)

geomean(8.3% · 15.2% · 8.3%) = 10.1%

Kernel source (redacted)
"""Top-K MoE up-projection: variable-length grouped GEMM + fused SwiGLU.

Per expert e with tokens in [offsets[e], offsets[e+1]):

    h_e = silu(x_e @ W_gate[e]) * (x_e @ W_up[e])

Gate/up weights are packed interleaved so a single TMA GEMM produces both
halves and SwiGLU runs in-register in the epilogue.
"""
from __future__ import annotations

from typing import Optional

import torch
import torch.nn as nn
import triton
import triton.language as tl
from triton.tools.tensor_descriptor import TensorDescriptor

OP_TYPE = "grouped_gemm_swiglu"
SUPPORTED_PRECISIONS = ["bf16"]
HARDWARE_REQUIRED = ["RTX_PRO_6000", "H100", "B200"]

def _set_tma_allocator() -> None:
    def alloc_fn(size: int, alignment: int, stream: Optional[int]):
        return torch.empty(size, device="cuda", dtype=torch.int8)

    triton.set_allocator(alloc_fn)


_set_tma_allocator()


@triton.jit
def _grouped_swiglu_tma_kernel(
    x_desc,
    w_desc,
    out_ptr,
    offsets_ptr,
    stride_om,
    H: tl.constexpr,
    I: tl.constexpr,  # noqa: E741
    BLOCK_M: tl.constexpr,
    BLOCK_N: tl.constexpr,
    BLOCK_K: tl.constexpr,
):
    """One CTA per (m-tile, packed-n-tile, expert). W is interleaved [gate, up]."""
    pid_m = tl.program_id(0)
    pid_n = tl.program_id(1)
    e = tl.program_id(2)

    start = tl.load(offsets_ptr + e)
    end = tl.load(offsets_ptr + e + 1)
    n_e = end - start
    offs_m = pid_m * BLOCK_M
    if offs_m >= n_e:
        return

    offs_n = pid_n * BLOCK_N
    row0 = start + offs_m
    w_row0 = e * H

    acc = tl.zeros((BLOCK_M, BLOCK_N), dtype=tl.float32)
    for ki in range(0, H // BLOCK_K):
        k = ki * BLOCK_K
        a = x_desc.load([row0, k])
        b = w_desc.load([w_row0 + k, offs_n])
        acc = tl.dot(a, b, acc)

    acc = tl.reshape(acc, (BLOCK_M, BLOCK_N // 2, 2))
    gate, up = tl.split(acc)
    out = (gate * tl.sigmoid(gate) * up).to(tl.bfloat16)

    offs_om = row0 + tl.arange(0, BLOCK_M)
    offs_on = pid_n * (BLOCK_N // 2) + tl.arange(0, BLOCK_N // 2)
    mask = (offs_om[:, None] < end) & (offs_on[None, :] < I)
    tl.store(out_ptr + offs_om[:, None] * stride_om + offs_on[None, :], out, mask=mask)


def _pack_interleaved(w_gate: torch.Tensor, w_up: torch.Tensor, dst: torch.Tensor) -> None:
    """dst[..., 0::2] = gate, dst[..., 1::2] = up. dst is (E, H, 2I)."""
    dst[..., 0::2] = w_gate
    dst[..., 1::2] = w_up


class Model(nn.Module):
    """Up-projection of a top-K MoE FFN with fused SwiGLU."""

    def __init__(self, T_total: int, H: int, I: int, E: int, K: int):  # noqa: E741
        super().__init__()
        self.T_total = T_total
        self.H = H
        self.I = I
        self.E = E
        self.K = K
        self.W_gate = nn.Parameter(torch.empty(E, H, I, dtype=torch.bfloat16))
        self.W_up = nn.Parameter(torch.empty(E, H, I, dtype=torch.bfloat16))
        nn.init.normal_(self.W_gate, std=0.02)
        nn.init.normal_(self.W_up, std=0.02)
        self.register_buffer(
            "_W_pack",
            torch.empty(E, H, 2 * I, dtype=torch.bfloat16),
            persistent=False,
        )
        self._pack_ok = False
        self._out_buf: torch.Tensor | None = None
        self._cached_off_ptr = 0
        self._cached_max_m = 0
        self._desc_key: tuple | None = None
        self._x_desc = None
        self._w_desc = None
        self._graph = None
        self._graph_key: tuple | None = None

    def _ensure_pack(self) -> None:
        if self._pack_ok:
            return
        _pack_interleaved(self.W_gate.detach(), self.W_up.detach(), self._W_pack)
        self._pack_ok = True
        self._graph = None
        self._graph_key = None

    def _load_from_state_dict(self, *args, **kwargs):
        self._pack_ok = False
        self._graph = None
        self._graph_key = None
        return super()._load_from_state_dict(*args, **kwargs)

    def forward(
        self,
        hidden_states: torch.Tensor,
        expert_offsets: torch.Tensor,
    ) -> torch.Tensor:
        self._ensure_pack()
        if not hidden_states.is_contiguous():
            hidden_states = hidden_states.contiguous()
        T_perm, H = hidden_states.shape
        I = self.I
        E = self.E
        device = hidden_states.device
        out = self._out_buf
        if out is None or out.shape[0] != T_perm or out.shape[1] != I or out.device != device:
            out = torch.empty(T_perm, I, dtype=torch.bfloat16, device=device)
            self._out_buf = out

        offsets = expert_offsets
        if not offsets.is_cuda:
            offsets = offsets.to(device, non_blocking=True)
        if not offsets.is_contiguous():
            offsets = offsets.contiguous()

        off_ptr = int(offsets.data_ptr())
        if off_ptr != self._cached_off_ptr:
            counts = offsets[1:] - offsets[:-1]
            self._cached_max_m = int(counts.max().item()) if E > 0 else 0
            self._cached_off_ptr = off_ptr
        max_m = self._cached_max_m
        if max_m == 0:
            return out

        packed = self._W_pack
        # Tile pick is from SM120 sweeps. 128x256x32 keeps the tensor pipe
        # busiest on large intermediates; 128x128x32 / 4-stage has lower
        # register pressure and wins on the small-M expert case.
        if I >= 1536:
            BLOCK_M, BLOCK_N, BLOCK_K, num_stages = 128, 256, 32, 3
        else:
            BLOCK_M, BLOCK_N, BLOCK_K, num_stages = 128, 128, 32, 4
        desc_key = (
            hidden_states.data_ptr(), T_perm, H,
            packed.data_ptr(), BLOCK_M, BLOCK_N, BLOCK_K,
        )
        if desc_key != self._desc_key:
            self._x_desc = TensorDescriptor(
                hidden_states,
                [T_perm, H],
                [hidden_states.stride(0), hidden_states.stride(1)],
                [BLOCK_M, BLOCK_K],
            )
            self._w_desc = TensorDescriptor(
                packed,
                [E * H, 2 * I],
                [packed.stride(1), packed.stride(2)],
                [BLOCK_K, BLOCK_N],
            )
            self._desc_key = desc_key
        x_desc = self._x_desc
        w_desc = self._w_desc

        grid = (
            triton.cdiv(max_m, BLOCK_M),
            triton.cdiv(2 * I, BLOCK_N),
            E,
        )
        gkey = (hidden_states.data_ptr(), offsets.data_ptr(), out.data_ptr(),
                BLOCK_M, BLOCK_N, BLOCK_K, num_stages)

        def _launch():
            _grouped_swiglu_tma_kernel[grid](
                x_desc,
                w_desc,
                out,
                offsets,
                out.stride(0),
                H=H,
                I=I,
                BLOCK_M=BLOCK_M,
                BLOCK_N=BLOCK_N,
                BLOCK_K=BLOCK_K,
                num_warps=8,
                num_stages=num_stages,
            )

        if self._graph is not None and gkey == self._graph_key:
            self._graph.replay()
            return out

        _launch()
        try:
            torch.cuda.synchronize()
            graph = torch.cuda.CUDAGraph()
            with torch.cuda.graph(graph):
                _launch()
            self._graph = graph
            self._graph_key = gkey
        except Exception:
            self._graph = None
            self._graph_key = None
        return out


T_total = 32768
H = 4096
I = 1536  # noqa: E741
E = 128
K = 8


def _build_routing(T_total: int, E: int, K: int, device: str = "cpu") -> torch.Tensor:
    T_perm = T_total * K
    base = T_perm // E
    rem = T_perm - base * E
    counts = torch.full((E,), base, dtype=torch.int32, device=device)
    counts[:rem] += 1
    offsets = torch.zeros(E + 1, dtype=torch.int32, device=device)
    offsets[1:] = torch.cumsum(counts, dim=0)
    return offsets


def get_inputs():
    T_perm = T_total * K
    hidden_states = torch.randn(T_perm, H, dtype=torch.bfloat16) * 0.1
    expert_offsets = _build_routing(T_total, E, K)
    return [hidden_states, expert_offsets]


def get_init_inputs():
    return [T_total, H, I, E, K]

20260813_072937_grok_grok-4.6_06_sonic_moe_swiglu