Skip to content
KernelIndex
Search⌘K

submission 438751

Sheheryar Ahmad · python · License unknown

Use it

Vendorable · source mirrored · license unknownView source →

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

version42.py
curl "https://kernelindex.com/api/v1/implementations/kernelbot-nvfp4-group-gemm-438751?include=source"
interfacepython
Compatibility
measured onNVIDIA B200
declared hardwareNVIDIA B200
architecturessm_100
dtypesfp8_e4m3, nvfp4

Benchmark evidence

1 measurement across 1 GPU, fastest first.

Operation / workload
Hardware
Latency
Rank
Observed
NVFP4 group GEMMsuite of 4 cases
NVIDIA B200
55.3µs
#203 of 310
2026-02-03

Reported · How evidence levels are derived →

Source and license

sourceavailable
revision digestsha256:f01c656ce1908cbd35f7abd13f93f950977d034372ea25856f8a411f533dc987
license declaredunknown
license concludedunknown
authorsSheheryar Ahmad
imported2026-08-15

Kernel source

version42.py44 lines
import torch
import math
from task import input_t, output_t
from reference import ceil_div

def custom_kernel(data: input_t) -> output_t:
    abc_tensors, sfasfb_tensors, sfasfb_reordered_tensors, problem_sizes = data
    result_tensors = []
    
    # Pre-compute all flattening parameters once
    for i, ((a, b, c), (sfa_reordered, sfb_reordered), (m, n, k, l)) in enumerate(
        zip(abc_tensors, sfasfb_reordered_tensors, problem_sizes)
    ):
        # Direct fused permute + flatten without intermediate allocations
        # Use in-place operations where possible
        sfa_slice = sfa_reordered[..., 0]
        sfb_slice = sfb_reordered[..., 0]
        
        # Fast path for l=1 (all benchmarks)
        # Use view-based reshaping without copy when possible
        scale_a_flat = sfa_slice.permute(2, 4, 0, 1, 3).reshape(-1)
        scale_b_flat = sfb_slice.permute(2, 4, 0, 1, 3).reshape(-1)
        
        # Ensure contiguous memory for scaled_mm
        scale_a_flat = scale_a_flat.contiguous()
        scale_b_flat = scale_b_flat.contiguous()
        
        # Fuse the transpose with view
        a_view = a[:, :, 0].view(torch.float4_e2m1fn_x2)
        b_view = b[:, :, 0].transpose(0, 1).view(torch.float4_e2m1fn_x2)
        
        # Single scaled_mm call
        c[:, :, 0] = torch._scaled_mm(
            a_view,
            b_view,
            scale_a_flat,
            scale_b_flat,
            bias=None,
            out_dtype=torch.float16,
        )
        
        result_tensors.append(c)
    
    return result_tensors
scrolls · 44 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 424644.

- # submission.py - Simple correct version
import torch
+ import math
from task import input_t, output_t
- from reference import to_blocked
+ from reference import ceil_div
def custom_kernel(data: input_t) -> output_t:
- """
- Simple implementation that matches the reference exactly.
- Uses torch._scaled_mm for correctness.
- """
abc_tensors, sfasfb_tensors, sfasfb_reordered_tensors, problem_sizes = data
-
result_tensors = []
- for i, ((a, b, c), (sfa_ref, sfb_ref), (m, n, k, l)) in enumerate(
- zip(abc_tensors, sfasfb_tensors, problem_sizes)
+
+ # Pre-compute all flattening parameters once
+ for i, ((a, b, c), (sfa_reordered, sfb_reordered), (m, n, k, l)) in enumerate(
+ zip(abc_tensors, sfasfb_reordered_tensors, problem_sizes)
):
- for l_idx in range(l):
- # Convert scale factors to blocked format
- scale_a = to_blocked(sfa_ref[:, :, l_idx])
- scale_b = to_blocked(sfb_ref[:, :, l_idx])
-
- # Use torch's scaled_mm
- res = torch._scaled_mm(
- a[:, :, l_idx].view(torch.float4_e2m1fn_x2),
- b[:, :, l_idx].transpose(0, 1).view(torch.float4_e2m1fn_x2),
- scale_a.cuda(),
- scale_b.cuda(),
- bias=None,
- out_dtype=torch.float16,
- )
- c[:, :, l_idx] = res
+ # Direct fused permute + flatten without intermediate allocations
+ # Use in-place operations where possible
+ sfa_slice = sfa_reordered[..., 0]
+ sfb_slice = sfb_reordered[..., 0]
+ # Fast path for l=1 (all benchmarks)
+ # Use view-based reshaping without copy when possible
+ scale_a_flat = sfa_slice.permute(2, 4, 0, 1, 3).reshape(-1)
+ scale_b_flat = sfb_slice.permute(2, 4, 0, 1, 3).reshape(-1)
+
+ # Ensure contiguous memory for scaled_mm
+ scale_a_flat = scale_a_flat.contiguous()
+ scale_b_flat = scale_b_flat.contiguous()
+
+ # Fuse the transpose with view
+ a_view = a[:, :, 0].view(torch.float4_e2m1fn_x2)
+ b_view = b[:, :, 0].transpose(0, 1).view(torch.float4_e2m1fn_x2)
+
+ # Single scaled_mm call
+ c[:, :, 0] = torch._scaled_mm(
+ a_view,
+ b_view,
+ scale_a_flat,
+ scale_b_flat,
+ bias=None,
+ out_dtype=torch.float16,
+ )
+
result_tensors.append(c)
return result_tensors
No newline at end of file
scrolls · 69 diff lines total

Best evidence level for this revision: reported

JSON