Skip to content
KernelIndex
Search⌘K

submission 68275

koshibat · python · License unknown

Use it

Vendorable · source mirrored · license unknownView source →

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

submission.py
curl "https://kernelindex.com/api/v1/implementations/kernelbot-vectorsum-v2-68275?include=source"
interfacepython
Compatibility
measured onNVIDIA A100
declared hardwareNVIDIA A100
architecturessm_80
dtypesfp32

Benchmark evidence

1 measurement across 1 GPU, fastest first.

Operation / workload
Hardware
Latency
Rank
Observed
Vector sum reductionsuite of 6 cases
NVIDIA A100
142.1µs
#20 of 96
2025-11-08

Reported · How evidence levels are derived →

Source and license

sourceavailable
revision digestsha256:0d6fc76bf9d52769514602638bbf7f8b1b43ddfdc937e40594b814f7e8bc4337
license declaredunknown
license concludedunknown
authorskoshibat
imported2026-08-15

Techniques

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

num-warps = 8num_warps=8,

Kernel source

submission.py74 lines
import torch
import triton
import triton.language as tl

@triton.jit
def sum_kernel_stage1(
    input_ptr,
    partial_sums_ptr,
    n_elements,
    BLOCK_SIZE: tl.constexpr,
):
    pid = tl.program_id(0)
    block_start = pid * BLOCK_SIZE
    offsets = block_start + tl.arange(0, BLOCK_SIZE)
    mask = offsets < n_elements
    
    data = tl.load(input_ptr + offsets, mask=mask, other=0.0)
    block_sum = tl.sum(data)
    tl.store(partial_sums_ptr + pid, block_sum)

@triton.jit
def sum_kernel_stage2(
    partial_sums_ptr,
    partial_sums2_ptr,
    n_partials,
    BLOCK_SIZE: tl.constexpr,
):
    pid = tl.program_id(0)
    block_start = pid * BLOCK_SIZE
    offsets = block_start + tl.arange(0, BLOCK_SIZE)
    mask = offsets < n_partials
    
    data = tl.load(partial_sums_ptr + offsets, mask=mask, other=0.0)
    block_sum = tl.sum(data)
    tl.store(partial_sums2_ptr + pid, block_sum)

def custom_kernel(data):
    input_tensor, output_tensor = data
    n_elements = input_tensor.numel()
    
    # 安定性とパフォーマンスのバランス
    BLOCK_SIZE_1 = 4096
    n_blocks_1 = triton.cdiv(n_elements, BLOCK_SIZE_1)
    partial_sums_1 = torch.empty(n_blocks_1, device='cuda', dtype=torch.float32)
    
    # num_warps=8を明示的に指定(BLOCK_SIZE=4096に最適)
    sum_kernel_stage1[(n_blocks_1,)](
        input_tensor,
        partial_sums_1,
        n_elements,
        BLOCK_SIZE=BLOCK_SIZE_1,
        num_warps=8,
    )
    
    # Stage 2
    BLOCK_SIZE_2 = 1024
    n_blocks_2 = triton.cdiv(n_blocks_1, BLOCK_SIZE_2)
    
    if n_blocks_2 > 1:
        partial_sums_2 = torch.empty(n_blocks_2, device='cuda', dtype=torch.float32)
        sum_kernel_stage2[(n_blocks_2,)](
            partial_sums_1,
            partial_sums_2,
            n_blocks_1,
            BLOCK_SIZE=BLOCK_SIZE_2,
            num_warps=8,
        )
        # result = partial_sums_2.to(torch.float64).sum().to(torch.float32)
        result = partial_sums_2.sum()
    else:
        # result = partial_sums_1.to(torch.float64).sum().to(torch.float32)
        result = partial_sums_1.sum()
    
    return result
scrolls · 74 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 68274.

Best evidence level for this revision: reported

JSON