Papers › ThunderKittens: Simple, Fast, and Adorable AI Kernels

ThunderKittens: Simple, Fast, and Adorable AI Kernels

27 Oct 2024arXiv:2410.20399archive 2025-07-28

Benjamin F. Spector, Simran Arora, Aaryan Singhal, Daniel Y. Fu, Christopher Ré

The challenge of mapping AI architectures to GPU hardware is creating a critical bottleneck in AI progress. Despite substantial efforts, hand-written custom kernels fail to meet their theoretical performance thresholds, even on well-established operations like linear attention. The diverse hardware capabilities of GPUs might suggest that we need a wide variety of techniques to achieve high performance. However, our work explores whether a small number of key abstractions can drastically simplify the process. We present ThunderKittens (TK), a framework for writing performant AI kernels while remaining easy to use and maintain. Our abstractions map to the three levels of the GPU hierarchy: (1) at the warp-level, we provide 16x16 matrix tiles as basic data structures and PyTorch-like parallel compute operations over tiles, (2) at the thread-block level, we provide a template for overlapping asynchronous operations across parallel warps, and (3) at the grid-level, we provide support to help hide the block launch and tear-down, and memory costs. We show the value of TK by providing kernels that match or outperform prior kernels for a range of AI operations. We match CuBLAS and FlashAttention-3 on GEMM and attention inference performance and outperform the strongest baselines by 10-40% on attention backwards, 8× on state space models, and 14× on linear attention.

PaperPDFCodeCode Syntology ran

In Syntology Open this paper in Syntology's Atlas, the map of the papers in Syntology's graph and their citations.

For agents, Syntology's MCP tool lists every function and class Syntology harvested from this paper and whether it ran (how to connect): get_harvested_code_for_paper(arxiv_id="2410.20399")

Code

Syntology Ran 0 of 21 code samples harvested from 1 repository linked to this paper; 21 have no recorded run.

By repository: official repository: 21 samples from 1 repository, 0 ran. The run record, sample by sample. “Ran” means executed on a synthesized input, not that the code is correct or reproduces the paper.

HazyResearch/ThunderKittens officialmentioned in papermentioned on GitHubpytorchMIT report

Repository list and official/mentioned flags are the archive's, frozen 2025-07-28. Reachability, where shown, is from one Syntology probe window (2026-09-16 to 2026-09-18); repositories not probed show nothing. GitHub stars are not tracked.

Code Syntology ran Syntology

21 samples harvested; 0 ran; 0 honoured the contract we drafted; 21 have no recorded run. Read from Syntology's graph 2026-09-24; that is when this build read the record, not when the samples ran.

21unverified

Licence: 0 of the 21 samples are pointer only, meaning Syntology does not serve that copy's text. This page shows no code text for any sample; each one links to its file in the repository.

Harvested from HazyResearch/ThunderKittens. “Ran” means the sample executed on a synthesized input. It does not mean the output is correct, and nothing here reproduces the paper's results. “Honoured” and “violated” refer to a contract Syntology drafted from the code itself; “our draft was wrong” and “fixture could not drive it” are failures of Syntology's instrument, not of the code.

Each sample ends with its code_sha256, Syntology's identity for that exact code. An agent fetches the stored sample with Syntology's MCP tool get_code(code_sha256="…") (how to connect); click an identity to copy that call.

Repository labels, per sample. official repository: The archive marks this repository official for the paper. named in the paper: The archive records that the paper mentions this repository; it is not marked official. community (archive-listed): In the archive's code links for this paper, not marked official and not recorded as mentioned in the paper. found in paper text by Syntology: Syntology found this repository in the paper's own text; whether it is the authors' implementation is not asserted. community: Not in the archive's code links for this paper; a community repository Syntology harvested. Samples from a repository marked official are listed first. Licence labels name the repository's licence as recorded at harvest. “Pointer only” means Syntology does not serve that copy's text, for one of four reasons: no licence file was found; the licence was not identified; the licence is recorded as permissive but that copy's record is not marked cleared; or the licence is outside the permissive list Syntology serves text under (MIT, Apache-2.0, BSD and similar). Some licences outside that list permit redistribution, such as WTFPL, and GPL-3.0 under its conditions; they are simply not on the list. Hover a licence label for the reason. File links open the file on GitHub at the default branch, which may have changed since the harvest.

based_test HazyResearch/ThunderKittens/kernels/based/benchmark.py official repository unverified MIT (permissive) · 5c953e9789e91477 · report
compute_twiddle_factors_fft HazyResearch/ThunderKittens/kernels/fftconv/gentests.py official repository unverified MIT (permissive) · d0d9b292586f56f3 · report
compute_twiddle_factors_fft HazyResearch/ThunderKittens/kernels/fftconv/gentests_1024.py official repository unverified MIT (permissive) · f24f3028b67e35d0 · report
count_params HazyResearch/ThunderKittens/demos/llama/demo_llama_hf.py official repository unverified MIT (permissive) · 54b2749eb0418240 · report
fft_matrix HazyResearch/ThunderKittens/kernels/fftconv/gentests.py official repository unverified MIT (permissive) · 9d855071c55ee252 · report
fft_matrix HazyResearch/ThunderKittens/kernels/fftconv/gentests_1024.py official repository unverified MIT (permissive) · 1cf11ad3708c4d6f · report
fftconv_tk_test HazyResearch/ThunderKittens/kernels/fftconv/benchmark.py official repository unverified MIT (permissive) · 7eebf98ddea95c97 · report
get_based_inputs HazyResearch/ThunderKittens/kernels/based/benchmark.py official repository unverified MIT (permissive) · 2c7a1c21d9730061 · report
get_data HazyResearch/ThunderKittens/demos/based/document_ie_based.py official repository unverified MIT (permissive) · 1615a1b5b86e2b15 · report
get_fft_inputs HazyResearch/ThunderKittens/kernels/fftconv/benchmark.py official repository unverified MIT (permissive) · ed1316b9d8136663 · report
get_flops HazyResearch/ThunderKittens/kernels/layernorm/benchmark.py official repository unverified MIT (permissive) · e12aa72e4c396b45 · report
get_flops HazyResearch/ThunderKittens/kernels/based/benchmark.py official repository unverified MIT (permissive) · 7777d7cd21b34e3e · report
get_flops HazyResearch/ThunderKittens/kernels/fftconv/benchmark.py official repository unverified MIT (permissive) · 8588c8cfb9739504 · report
get_inputs HazyResearch/ThunderKittens/demos/based/document_ie_based.py official repository unverified MIT (permissive) · 55de983a3ac2c905 · report
get_layer_norm_inputs HazyResearch/ThunderKittens/kernels/layernorm/benchmark.py official repository unverified MIT (permissive) · dbe5d402dc4ce748 · report
get_lm_eval_lolcats_model HazyResearch/ThunderKittens/demos/lolcats/demo_lolcats_hf.py official repository unverified MIT (permissive) · 041f53d114a5e7db · report
layernorm_test HazyResearch/ThunderKittens/kernels/layernorm/benchmark.py official repository unverified MIT (permissive) · 7aa5f9a6f612c4e6 · report
pytorch_test HazyResearch/ThunderKittens/kernels/based/gentests.py official repository unverified MIT (permissive) · 457acc5a326ca09e · report
ref_fftconv HazyResearch/ThunderKittens/kernels/fftconv/gentests.py official repository unverified MIT (permissive) · ddee33c0d89530af · report
ref_fftconv HazyResearch/ThunderKittens/kernels/fftconv/gentests_1024.py official repository unverified MIT (permissive) · 8733dce8506be321 · report
setup_fsdp_config HazyResearch/ThunderKittens/demos/lolcats/demo_lolcats_hf.py official repository unverified MIT (permissive) · ed9d06db6edca0c4 · report

Tasks

State Space Models

1 archive task tag without a task page not shown.

Results from the paper archive 2025-07-28

No leaderboard rows for this paper in the archive.

Methods

AttentionSoftmax

Report a problem or propose a change · a person checks every report against the paper or source before anything changes; decisions are listed on /corrections