GPU kernel benchmark

KernelAscent

Models write GPU kernels. Each kernel is graded for correctness against a reference and for speed against a baseline. The benchmark asks two things: how well a model does in one shot, and whether it gets better when it trains on, or edits, its own work over several rounds.

Tasks

TaskWhat it measuresModels
1. CapabilityCan the model write a correct, fast kernel in one shot?open and closed
2. Weight self-improvementThe model trains on its own correct kernels each round. Does it get better than a matched control?open weights
3. Procedure self-improvementWeights stay fixed; the model rewrites its own strategy and solver prompt each round.open and closed
4. Closed → openA closed model rewrites the training setup of an open model.closed + open
5. Self-playThe model writes harder tasks for itself, then solves them.open and closed

Task 1: capability

15 fixed tasks, 5 tries each. correct: output matches the reference. fast: correct and faster than PyTorch. Click a header to sort.

ModelKind correctfastmean C

Task 2: weight self-improvement

Five rounds. self vs fresh-frozen: the model trained on its own kernels minus a model trained on kernels from the unchanged base. Positive means self-training helped.

ModelFamilyroundsC0final correctcompiled xdelta vs frozenself vs fresh-frozenverdict

Task 2 by model size

Each size runs on tasks filtered for its own difficulty, scored on speed against torch.compile.

ModelTierroundsC0 (speed)C finalself vs fresh-frozenverdict

Training vs sampling more

Self-training compared with methods that don't train, at the same number of generations. recursion gain: self-training minus the best of these.

Modelweight-RSI Cbest-of-kself-refineretrievalrecursion gain

Task 3: procedure self-improvement

Q is the held-out quality of the model's current procedure. Q gain vs frozen: improvement over the procedure it started with.

ModelModeroundsQ0Q finalQ gain vs frozenverdict

Task 4: closed models improving open models

improved − frozen: the open model trained with the closed model's setup minus one trained with the original setup. peak: best round.

ResearcherOpen traineeroundsC0C improvedC frozenimproved − frozenpeakverdict

Task 5: self-play

Three versions run side by side: fixed tasks (static), harder tasks written by the original model (frozen-author), and harder tasks written by the improving model (live). L − F: live minus frozen-author. authored: model-written tasks that passed the validity check.

Open models

ModelTierroundsC liveC frozen-authC staticL − FF − Sauthoredverdict

Closed models

ModelTierroundsC liveC frozen-authC staticL − FF − Sauthoredverdict

Datasets

Each task bank has a public split and a held-out split.

BankContentsWhere
Kernel bank29 tasks in three tiers: memory-bound, matmul epilogue, attention and normHugging Face, dataset/kernel_bank/
Hard bankfiltered to hard but learnable tasks, used for self-improvementdataset/kernel_bank/rsi_bank_hard.json
Generated bank456 tasks over 16 operation familiesdataset/kernel_bank/kernel_tasks_dsl_validated.json
from datasets import load_dataset
ds = load_dataset("muahmed7338/kernelascent-tasks")

Submit

Open a pull request adding one JSON file under submissions/<track>/. It is checked automatically and appears below as self-reported until a maintainer re-runs it.

python3 scripts/validate_submission.py submissions/capability/your-model.json

Guide: submissions/README.md

Community board

TrackModel / recipeKindheadlinestatusby