Skip to content
KernelIndex
Search⌘K

submission 754926

ftyghome · python · License unknown

Use it

Vendorable · source mirrored · license unknownView source →

No package. Vendor the mirrored source: 138 lines, June 9 Researcher Reciprocity License v1.0.

submission.py
curl "https://kernelindex.com/api/v1/implementations/kernelbot-amd-mixed-mla-754926?include=source"
interfacepython
Compatibility
measured onAMD Instinct MI355X
declared hardwareAMD Instinct MI355X
architecturesgfx950
dtypesbf16, int32

Benchmark evidence

1 measurement across 1 GPU, fastest first.

Operation / workload
Hardware
Latency
Rank
Observed
AMD Instinct MI355X
31.4µs
#20 of 766
2026-04-07

Reported · How evidence levels are derived →

Source and license

sourceavailable
revision digestsha256:1b103472ace0326929bfa0304077ddbf60ae1659d357934ae9c8d2ecf90ab272
license declaredunknown
license concludedunknown
authorsftyghome
imported2026-08-15

Techniques

Extracted from the mirrored source by pattern, never inferred. Each row cites its line.

fp4if "mxfp4" not in kv_data or "fp8" not in kv_data:
num-warps = 4NUM_WARPS = 4
split-kint64_t splitkv,
tile-k = 32TILE_K = 32

Kernel source

submission.py138 lines
#!POPCORN leaderboard amd-mixed-mla
import base64
import os
import pathlib
import zlib

import torch
from torch.utils.cpp_extension import load_inline

from task import input_t, output_t

os.environ.setdefault("HSA_XNACK", "0")
os.environ.setdefault("PYTORCH_ROCM_ARCH", "gfx950:xnack-")
os.environ.setdefault("TORCH_EXTENSIONS_DIR", str(pathlib.Path(__file__).resolve().parent / ".torch_extensions"))

HERE = pathlib.Path(__file__).resolve().parent
MLA_CPP_B64 = "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"
GPU_HSACO_B64 = "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"

_SRC_PATH = HERE / "_submission_mla.cu"
_source_text = zlib.decompress(base64.b64decode(MLA_CPP_B64)).decode("utf-8")
if not _SRC_PATH.exists() or _SRC_PATH.read_text() != _source_text:
    _SRC_PATH.write_text(_source_text)

_BINDING_SRC = r"""
#include <torch/extension.h>
#include <vector>

std::vector<torch::Tensor> mla_decode_h16_fp8_fp8(torch::Tensor q,
                                                  torch::Tensor kv,
                                                  torch::Tensor kv_fp8,
                                                  torch::Tensor kv_scale,
                                                  torch::Tensor kv_fp8_scale,
                                                  int64_t splitkv,
                                                  float softmax_scale,
                                                  std::optional<torch::Tensor> hsaco_tensor);

PYBIND11_MODULE(TORCH_EXTENSION_NAME, m) {
    m.def("mla_decode_h16_fp8_fp8", &mla_decode_h16_fp8_fp8);
}
"""

def _build_inline_module():
    return load_inline(
        name="mla_standalone_ext",
        cpp_sources=[_BINDING_SRC],
        cuda_sources=[_source_text],
        verbose=True,
        extra_cflags=["-O3", "-std=c++20"],
        extra_cuda_cflags=[
            "-O3",
            "-std=c++20",
            "-U__HIP_NO_HALF_OPERATORS__",
            "-U__HIP_NO_HALF_CONVERSIONS__",
            "--save-temps",
            "-ffast-math",
            # "-fno-finite-math-only",
            # "-mllvm", "-amdgpu-mfma-vgpr-form",
        ],
        extra_ldflags=["-lamdhip64"],
    )


def _load_hsaco_tensor():
    if not GPU_HSACO_B64:
        return torch.empty((0,), dtype=torch.uint8)
    hsaco = zlib.decompress(base64.b64decode(GPU_HSACO_B64))
    return torch.frombuffer(memoryview(bytearray(hsaco)), dtype=torch.uint8)


_hsaco_tensor = _load_hsaco_tensor()
_module = _build_inline_module()


def _quantize_fp8(x: torch.Tensor) -> torch.Tensor:
    return x.to(torch.float8_e4m3fn).contiguous()


def _dyn_quantize_fp8(tensor: torch.Tensor) -> tuple[torch.Tensor, torch.Tensor]:
    finfo = torch.finfo(torch.float8_e4m3fn)
    amax = tensor.abs().amax().clamp(min=1e-12)
    scale = amax / finfo.max
    fp8_tensor = (tensor / scale).clamp(min=finfo.min, max=finfo.max).to(torch.float8_e4m3fn)
    return fp8_tensor, scale.to(torch.float32).reshape(1)


def _choose_splitkv(bs: int, seq: int) -> int:
    NUM_CUS = 256
    NUM_WARPS = 4
    TILE_K = 32
    # (bs * split) % (cu * warp) == 0
    # splitk <= 32
    # seq % splitk == 0 && seq / splitk >= 32
    MAPS = {
        (4, 1024): 32,
        (4, 8192): 32,
        (32, 1024): 32,
        (32, 8192): 32,
        (64, 1024): 16,
        (64, 8192): 16,
        (256, 1024): 4,
        (256, 8192): 4,
    }
    return MAPS.get((bs, seq))
    override = os.getenv("MLA_SPLITKV_OVERRIDE")
    if override is not None:
        return int(override)
    mapped = MAPS.get((bs, seq))
    if mapped is not None:
        return mapped
    split = min(NUM_WARPS * NUM_CUS // bs, seq // TILE_K, 32)
    return split


def custom_kernel(data: input_t) -> output_t:
    q, kv_data, _, _, config = data
    # TODO: bf16 kv on small shapes
    if "mxfp4" not in kv_data or "fp8" not in kv_data:
        raise RuntimeError("submission currently expects kv_data['mxfp4'] and kv_data['fp8']")
    kv_mxfp4, kv_scale = kv_data["mxfp4"]
    # kv_scale: torch.Tensor
    # print(kv_scale.shape, kv_scale.stride(), kv_scale[0], kv_scale[31])
    kv_fp8, kv_fp8_scale = kv_data["fp8"]
    batch_size = int(config["batch_size"])
    kv_seq_len = int(config["kv_seq_len"])
    splitkv = _choose_splitkv(batch_size, kv_seq_len)
    final_output, _, _ = _module.mla_decode_h16_fp8_fp8(
        q.contiguous(),
        kv_mxfp4.contiguous(),
        kv_fp8.contiguous(),
        kv_scale.contiguous(),
        kv_fp8_scale.contiguous(),
        splitkv,
        float(config["sm_scale"]),
        _hsaco_tensor if _hsaco_tensor.numel() else None,
    )
    return final_output.contiguous()
scrolls · 138 lines total

Source code from GPU Mode and the KernelBot dataset · June 9 Researcher Reciprocity License v1.0

Changes from previous submission

Against this author's previous submission submission 754379.

⋯ 13 unchanged lines
os.environ.setdefault("TORCH_EXTENSIONS_DIR", str(pathlib.Path(__file__).resolve().parent / ".torch_extensions"))
HERE = pathlib.Path(__file__).resolve().parent
- MLA_CPP_B64 = "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"
- GPU_HSACO_B64 = "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"
+ MLA_CPP_B64 = "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"
+ GPU_HSACO_B64 = "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"
_SRC_PATH = HERE / "_submission_mla.cu"
_source_text = zlib.decompress(base64.b64decode(MLA_CPP_B64)).decode("utf-8")
⋯ 102 unchanged lines
batch_size = int(config["batch_size"])
kv_seq_len = int(config["kv_seq_len"])
splitkv = _choose_splitkv(batch_size, kv_seq_len)
- final_output, split_out, split_lse = _module.mla_decode_h16_fp8_fp8(
+ final_output, _, _ = _module.mla_decode_h16_fp8_fp8(
q.contiguous(),
kv_mxfp4.contiguous(),
kv_fp8.contiguous(),
⋯ 3 unchanged lines
float(config["sm_scale"]),
_hsaco_tensor if _hsaco_tensor.numel() else None,
)
- # print(split_out)
- # print(split_lse)
return final_output.contiguous()
scrolls · 27 diff lines total

Best evidence level for this revision: reported

JSON