Skip to content
KernelIndex
Search⌘K

submission 749134

ftyghome · python · License unknown

Use it

Vendorable · source mirrored · license unknownView source →

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

submission.py
curl "https://kernelindex.com/api/v1/implementations/kernelbot-amd-mixed-mla-749134?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
34.6µs
#61 of 766
2026-04-06

Reported · How evidence levels are derived →

Source and license

sourceavailable
revision digestsha256:297f8b73a4f93c0fe349fe34e6f07ebb7fc5391e516a37cdceea5b2e159fecb3
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.py137 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,
    }
    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 · 137 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 698249.

⋯ 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")
⋯ 32 unchanged lines
"-U__HIP_NO_HALF_CONVERSIONS__",
"--save-temps",
"-ffast-math",
- "-fno-finite-math-only",
+ # "-fno-finite-math-only",
# "-mllvm", "-amdgpu-mfma-vgpr-form",
],
extra_ldflags=["-lamdhip64"],
⋯ 56 unchanged lines
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"])
scrolls · 29 diff lines total

Best evidence level for this revision: reported

JSON