submission 750403
tom curis · python · License unknown
Use it
Vendorable · source mirrored · license unknownView source →
No package. Vendor the mirrored source: 60 lines, June 9 Researcher Reciprocity License v1.0.
test_v20.py
curl "https://kernelindex.com/api/v1/implementations/kernelbot-amd-mxfp4-mm-750403?include=source"interfacepython
Compatibility
measured onAMD Instinct MI355X
declared hardwareAMD Instinct MI355X
architecturesgfx950
dtypesbf16, mxfp4
Benchmark evidence
1 measurement across 1 GPU, fastest first.
Operation / workload
Hardware
Latency
Rank
Observed
Reported · How evidence levels are derived →
Source and license
sourceavailable
revision digestsha256:176dbd4d32c006c153a046f322d2af152a2c8c9c6ef8f6f5ae783e3117dd0c5b
license declaredunknown
license concludedunknown
authorstom curis
imported2026-08-15
Techniques
Extracted from the mirrored source by pattern, never inferred. Each row cites its line.
fp4
Fused BF16-A-quantize + MXFP4 GEMM for AMD Instinct MI355X (gfx950, ROCm 7.2).Kernel source
test_v20.py60 lines
"""
Fused BF16-A-quantize + MXFP4 GEMM for AMD Instinct MI355X (gfx950, ROCm 7.2).
Branchless FP4 quant + K-unroll-4 macro kernel.
"""
import os, base64, bz2, torch
from task import input_t, output_t
os.environ['HSA_XNACK'] = '0'
os.environ['PYTORCH_ROCM_ARCH'] = 'gfx950:xnack-'
import shutil as _shutil
os.environ['CXX'] = _shutil.which('clang++') or 'g++'
from torch.utils.cpp_extension import load_inline as _load_inline
_CPP_WRAPPER = """
void fused_fp4_gemm(torch::Tensor A, torch::Tensor B_shuf, torch::Tensor B_scale_sh, torch::Tensor C);
void unified_quant_gemm(torch::Tensor A, torch::Tensor B_shuf, torch::Tensor B_scale_sh, torch::Tensor C);
"""
_CUDA_SRC_COMPRESSED = "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"
_ext = None
cuda_src = bz2.decompress(base64.b64decode(_CUDA_SRC_COMPRESSED)).decode('utf-8')
_ext = _load_inline(
name='fused_fp4_gemm_hip',
cpp_sources=[_CPP_WRAPPER],
cuda_sources=[cuda_src],
functions=['fused_fp4_gemm', 'unified_quant_gemm'],
verbose=False,
extra_cuda_cflags=[
"--offload-arch=gfx950:xnack-",
"-std=c++20",
"-DBUILD_TORCH_EXTENSION",
"-DMXFP4_SKIP_TORCH_BINDINGS",
"-O3",
"-ffast-math",
"-march=native",
"-funroll-loops",
"-fomit-frame-pointer",
],
extra_cflags=[
"-O3",
],
)
_C_cache = {}
def custom_kernel(data: input_t) -> output_t:
A, B, B_q, B_shuffle, B_scale_sh = data
global _ext, _C_cache
shape = (A.shape[0], B_shuffle.shape[0])
if shape not in _C_cache:
_C_cache[shape] = torch.empty(shape, dtype=torch.bfloat16, device=A.device)
C = _C_cache[shape]
_ext.unified_quant_gemm(A, B_shuffle, B_scale_sh, C)
return C
scrolls · 60 lines total
Source code from GPU Mode and the KernelBot dataset · June 9 Researcher Reciprocity License v1.0
Best evidence level for this revision: reported
JSON