Open in tt-awesome →

Booth

community★ featured
by Zaneham · C · Apache-2.0 · 1753⭐ ·

An open-source CUDA, HIP, and Triton compiler with no LLVM anywhere in the path. Takes the same sources you would hand to nvcc, ROCm, or Triton's JIT and emits AMD RDNA 2/3/4 binaries, NVIDIA PTX, Tenstorrent Metalium C++, native RV32IM, or plain x86-64 — so a Triton matmul can run on a laptop that has never seen a GPU. Also reads a deliberate subset of MLIR (`func.func` plus the `arith` dialect) and Fortran `do concurrent` kernels via LFortran. Formerly BarraCUDA; renamed to honour Kathleen Booth.

📦 Repo
LATEST v0.6.1 2026-10-26T05:05:24Z Release notes ↗
4 previous releases
v0.6.0 2026-09-14T15:16:41Z
v0.5.3 2026-09-03T09:44:42Z
v0.5.2 2026-08-08T03:05:39Z
v5.01 2026-07-14T08:02:45Z
See all releases on GitHub ↗
Booth — Changelog
=================

## Booth 0.6.1

### Backends

- `--nvidia-cubin` puts every kernel of a module into the one cubin, so
  ggml-cuda files with several kernels no longer stop at E600
  (Zane Hambly, 2026-10-26)

- `--nvidia-cubin` lowers local loads and stores, half and bfloat16
  conversions, rounding, votes, membar, nanosleep, 16-bit parameters and
  constant divisors, and sizes each kernel's registers from its own counts
  (Zane Hambly, 2026-10-26)

- `--nvidia-cubin` holds a register only where its value is live, places join
  barriers by the blocks a region covers, and lowers wmma load, store and mma
  to scalar SASS, so topk-moe and lightning-indexer build (Zane Hambly,
  2026-10-26)

- `--nvidia-cubin` lowers cvta.local and cvta.global, so cumsum and quantize
  get as far as their vprintf call (Zane Hambly, 2026-10-26)

- `--nvidia-cubin` spills values to the local frame when a kernel needs more
  registers than SASS has, so mmvq gets past E603 (Zane Hambly, 2026-10-26)

- `--cuda-host` and `--cuda-exe` emit the host half of a CUDA compile, so kath
  builds a whole program the way nvcc does: the source back out with the device
  definitions removed, each launch through `__cudaPushCallConfiguration` and a
  stub calling `cudaLaunchKernel`, the kernels registered from a constructor out
  of a fatbin carrying both the cubin and the PTX, and the system C++ compiler
  driven to link it. Clean-room `cuda.h`, `cuda_runtime.h`, `cuda_fp16.h`,
  `cuda_bf16.h` and `cublas_v2.h` under `runtime/include` (Zane Hambly,
  2026-10-26)

- `--cuda-host` writes each kernel's stub where the kernel stood and keys a
  launch on the instantiation rather than its position, so a kernel launched
  from inside a host template or through a macro reaches the right one, and it
  spells enum, struct, vector and function template arguments, so ggml-cuda
  files get through the host pass (Zane Hambly, 2026-10-26)

- `--cuda-host` writes out a variadic template argument pack, spells a function
  template-id argument rather than the symbol it lowered to, keeps a launch
  whose callee ends in `>>`, registers up to 4096 kernels and refuses with E622
  above that instead of falling silent, and `kath cuda` finds Booth's own
  `runtime/include` from the binary rather than the working directory, so
  binbcast and cpy get through (Zane Hambly, 2026-10-26)
- `--cuda-host` carries const on the BIR type itself, so a kernel taking
  `const float *` registers the instantiation its launch actually names
  rather than one spelled without the qualifier (Zane Hambly, 2026-10-26)

- `kath cuda -c` compiles one `.cu` to one relocatable object rather than a
  whole program, with `-fPIC` for a shared library, each object carrying its
  own fatbin and registration constructor the way nvcc does, so many
  translation units link into one library (Zane Hambly, 2026-10-26)

- `kath cuda` takes `-Idir` written up against the flag as well as `-I dir`,
  rather than dropping it and c
cuda hip triton fortran mlir compiler cross-platform metalium rv32im no-llvm
blackhole