Pure Rust CUDA replacement -- cuBLAS, cuDNN, cuFFT, cuSPARSE, cuSOLVER, cuRAND and beyond in ~1.27M SLoC of safe Rust across 73 crates.
OxiCUDA replaces the entire NVIDIA CUDA Toolkit software stack with type-safe,
memory-safe Rust code. The only runtime dependency is the NVIDIA driver
(libcuda.so / nvcuda.dll); no CUDA SDK, no nvcc, no C/C++ toolchain is
needed at build time. Optimized PTX assembly is generated directly from Rust
data structures, and a built-in autotuner benchmarks kernel variants per GPU
architecture to achieve near-peak throughput from Turing through Blackwell.
+---------------------------------------------------------------+
| SciRS2 | OxiONNX | TrustformeRS | ToRSh |
| (Scientific Computing / ML / Inference Ecosystem) |
+-------------------------------+-------------------------------+
|
+-------------------------------v-------------------------------+
| OxiCUDA |
| (Pure Rust GPU) |
| |
| Vol.1 Foundation (4 crates) |
| +----------+ +--------+ +---------+ +---------+ |
| | Driver | | Memory | | Launch | | Runtime | |
| +----------+ +--------+ +---------+ +---------+ |
| |
| Vol.2 Codegen (2 crates) |
| +-----------+ +------------+ |
| | PTX Gen | | Autotune | |
| +-----------+ +------------+ |
| |
| Vol.3 Linear Algebra Vol.4 Deep Learning |
| +-------------+ +-------------+ |
| | BLAS | | DNN | |
| +-------------+ +-------------+ |
| |
| Vol.5 Scientific Computing (4 crates) |
| +------+ +--------+ +--------+ +------+ |
| | FFT | | Sparse | | Solver | | Rand | |
| +------+ +--------+ +--------+ +------+ |
| |
| Vol.6 Signal Vol.7 Comp.Graph Vol.8 Training (2) |
| +---------+ +----------+ +-------+ +-------+ |
| | Signal | | Graph | | Train | | Quant | |
| +---------+ +----------+ +-------+ +-------+ |
| |
| Vol.9 Inference (3 crates) Vol.10 RL |
| +-------+ +------------+ +----+ +------+ |
| | Infer | | Dist-Infer | | LM | | RL | |
| +-------+ +------------+ +----+ +------+ |
| |
| Backends (7 crates) |
| +----------+ +--------+ +-------+ +--------+ |
| | backend | | prims | | Metal | | Vulkan | |
| +----------+ +--------+ +-------+ +--------+ |
| +--------+ +-------+ +-----------+ |
| | WebGPU | | ROCm | | LevelZero | |
| +--------+ +-------+ +-----------+ |
+-------------------------------+-------------------------------+
|
+-------------------------------v-------------------------------+
| libcuda.so (NVIDIA Driver, runtime only) |
| No SDK / No nvcc / No C Toolchain |
+---------------------------------------------------------------+
Vol.1 -- Foundation (4 crates, 26,438 SLoC)
- Dynamic driver loading via libloading -- zero build-time SDK dependency
- DeviceBuffer<T> with Rust ownership semantics -- Send + Sync, RAII
- Type-safe launch! macro with compile-time grid/block validation
- CUDA Runtime API layer for high-level device management
Vol.2 -- PTX Codegen & Autotuner (2 crates, 47,429 SLoC) - Rust DSL that generates PTX IR covering SM 7.5 through SM 10.0 - Tensor Core support: WMMA, MMA, WGMMA instruction generation - Built-in autotuner with 3-tier dispatch (cached / tuned / default) - Disk-based PTX cache keyed by kernel hash + GPU architecture
Vol.3 -- BLAS (1 crate, 28,379 SLoC) - Full BLAS Level 1/2/3 (axpy, gemv, gemm, trsm, syrk, ...) - GEMM dispatch: SIMT, Tensor Core, Split-K paths - Batched GEMM: standard, strided, grouped - Precision coverage: F16, BF16, TF32, F32, F64, FP8 - Elementwise ops (relu, gelu, sigmoid, silu) and reductions (softmax, variance)
Vol.4 -- DNN (1 crate, 39,297 SLoC) - Convolution: implicit GEMM, im2col, Winograd 3x3, direct, fused Conv+BN+Act - FlashAttention forward/backward, PagedAttention, decode attention - MoE: top-k routing, token permutation, fused MoE kernel - Normalization: BatchNorm, LayerNorm, RMSNorm, GroupNorm - Pooling: max, average, adaptive, global - Resize: nearest, bilinear, bicubic - Quantization: FP8, INT8, block-scaled FP4
Vol.5 -- Scientific Computing (4 crates, 62,511 SLoC) - FFT: Stockham, radix-2/4/8, mixed-radix, Bluestein, C2C/R2C/C2R, 2D/3D - Sparse: CSR/CSC/COO/BSR/ELL, SpMV, SpMM, SpGEMM, SDDMM, ILU(0)/IC(0) - Solver: LU, QR, SVD, Cholesky, eigendecomp, CG, BiCGSTAB, GMRES - Rand: Philox, MRG32k3a, XORWOW, Sobol, uniform/normal/Poisson
Vol.6 -- Signal Processing (1 crate, 12,276 SLoC) - Audio: MFCC, STFT, Mel filterbank, spectral features - Image: Gaussian blur, Sobel edge detection, morphological ops - DCT: Types I-IV with fast algorithms - DWT: Haar, Daubechies wavelets - Filtering: IIR/FIR filters, Butterworth, Chebyshev - Correlation: cross-correlation, autocorrelation
Vol.7 -- Computation Graph (1 crate, 6,563 SLoC) - CUDA Graph capture API (StreamCapture, GraphCapture) - Execution plan with dependency-sorted node scheduling - Event-based inter-node synchronization - Sequential + parallel graph executors
Vol.8 -- GPU Training (2 crates, 13,832 SLoC) - Mixed precision training (AMP): FP16/BF16 + loss scaling - Gradient accumulation and clipping; EMA (exponential moving average) - LR schedulers: cosine, warmup, cyclic, polynomial - GPU-fused optimizers: Adam, AdamW, SGD, RMSProp, LAMB - Checkpointing (model save/load) - Quantization: INT8/INT4/FP8 weight quantization, block-scaled
Vol.9 -- Inference Engine (3 crates, 17,909 SLoC) - KV-cache with paged attention (PagedKvCache) and prefix caching - Speculative decoding - Distributed inference pipeline (tensor/pipeline parallelism) - LM inference: BPE tokenizer, vocabulary management, sampling strategies
Vol.10 -- Reinforcement Learning (1 crate, 11,280 SLoC) - Replay buffers: Uniform, Prioritized (PER), N-step - Policy distributions: Categorical, Gaussian (SAC reparameterization), Deterministic - Advantage estimators: GAE, TD(λ), V-trace, Retrace(λ) - Loss functions: PPO, DQN, Double-DQN, SAC, TD3 - Observation/reward normalization with Welford running stats - Environment abstractions: Env, VecEnv (auto-reset)
Backends (7 crates, 28,400 SLoC) - Backend trait abstraction for multi-GPU-runtime portability - CUB-equivalent GPU primitives (scan, reduce, sort, histogram) - Metal (macOS), Vulkan Compute, WebGPU, AMD ROCm, Intel oneAPI (LevelZero)
OxiCUDA is built on a strict Pure Rust policy with minimal external
dependencies. The entire codebase compiles with cargo build alone -- no
C compiler, no Fortran runtime, no CUDA SDK, no nvcc, no pkg-config.
| Dependency | Purpose | Type |
|---|---|---|
libloading |
Dynamic .so/.dll loading at runtime |
Pure Rust |
thiserror |
Ergonomic error type derivation | Pure Rust |
num-complex |
Complex number types (FFT) | Pure Rust |
half |
FP16/BF16 types (optional) | Pure Rust |
serde / serde_json |
Autotune result DB (optional) | Pure Rust |
The only runtime requirement is the NVIDIA GPU driver (libcuda.so on Linux,
nvcuda.dll on Windows). On macOS the crate compiles but returns
UnsupportedPlatform at runtime.
use oxicuda::prelude::*;
fn main() -> Result<(), oxicuda::Error> {
// Initialize driver and select GPU device
let device = Device::get(0)?;
let ctx = Context::new(device)?;
let stream = Stream::new(&ctx)?;
// Allocate device memory
let mut d_a = DeviceBuffer::<f32>::zeroed(1024)?;
let mut d_b = DeviceBuffer::<f32>::zeroed(1024)?;
let mut d_c = DeviceBuffer::<f32>::zeroed(1024)?;
// Copy host data to device
d_a.copy_from_host(&host_a)?;
d_b.copy_from_host(&host_b)?;
// Launch a GEMM: C = alpha * A @ B + beta * C
let handle = BlasHandle::new(&stream)?;
handle.gemm(
Transpose::None, Transpose::None,
m, n, k,
1.0f32, // alpha
&d_a, lda,
&d_b, ldb,
0.0f32, // beta
&mut d_c, ldc,
)?;
stream.synchronize()?;
// Copy result back to host
let mut result = vec![0.0f32; m * n];
d_c.copy_to_host(&mut result)?;
Ok(())
}
| Crate | CUDA Equivalent | Description | SLoC | Tests |
|---|---|---|---|---|
| Vol.1 -- Foundation | ||||
oxicuda-driver |
Driver API | FFI, device/context/stream/event/module | 15,228 | 379 |
oxicuda-memory |
cuMemAlloc | DeviceBuffer, PinnedBuffer, unified, pool | 6,451 | 275 |
oxicuda-launch |
cuLaunchKernel | Dim3, LaunchParams, launch! macro |
5,112 | 214 |
oxicuda-runtime |
CUDA Runtime | High-level cudaRT API layer | 4,856 | 121 |
| Vol.2 -- PTX Codegen & Autotuner | ||||
oxicuda-ptx |
nvcc / CUTLASS | PTX IR, codegen DSL, Tensor Core gen | 33,988 | 1,006 |
oxicuda-autotune |
-- | Search space, benchmark, tuning DB | 16,198 | 467 |
| Vol.3 -- Linear Algebra | ||||
oxicuda-blas |
cuBLAS | BLAS L1/L2/L3, GEMM, batched, elementwise | 29,765 | 791 |
| Vol.4 -- Deep Learning | ||||
oxicuda-dnn |
cuDNN | Conv, attention, MoE, norm, pool, quantize | 40,845 | 1,075 |
| Vol.5 -- Scientific Computing | ||||
oxicuda-fft |
cuFFT | Stockham, radix-2/4/8, Bluestein, 1D/2D/3D | 15,764 | 427 |
oxicuda-sparse |
cuSPARSE | CSR/CSC/COO/BSR/ELL, SpMV, SpMM, SpGEMM | 16,320 | 417 |
oxicuda-solver |
cuSOLVER | LU, QR, SVD, Cholesky, eig, CG, GMRES | 24,587 | 530 |
oxicuda-rand |
cuRAND | Philox, MRG32k3a, Sobol, distributions | 14,384 | 433 |
| Vol.6 -- Signal Processing | ||||
oxicuda-signal |
-- | Audio/image DSP, DCT, DWT, IIR/FIR filters | 14,381 | 508 |
| Vol.7 -- Computation Graph | ||||
oxicuda-graph |
CUDA Graphs | Graph capture, dep-sorted exec, events | 8,362 | 299 |
| Vol.8 -- GPU Training | ||||
oxicuda-train |
-- | AMP, grad accum/clip, LR schedulers, optimizers | 11,901 | 362 |
oxicuda-quant |
-- | INT8/INT4/FP8 quantization, block-scaled | 9,007 | 288 |
| Vol.9 -- Inference Engine | ||||
oxicuda-infer |
-- | KV-cache, paged attention, speculative decode | 10,925 | 399 |
oxicuda-dist-infer |
-- | Tensor/pipeline parallelism, distributed infer | 7,735 | 239 |
oxicuda-lm |
-- | BPE tokenizer, vocab, sampling strategies | 7,252 | 275 |
| Vol.10 -- Reinforcement Learning | ||||
oxicuda-rl |
-- | Replay buffers, policy dists, PPO/DQN/SAC/TD3 | 12,473 | 453 |
| Backends | ||||
oxicuda-backend |
-- | Backend trait abstraction | 4,038 | 101 |
oxicuda-primitives |
CUB | GPU scan, reduce, sort, histogram | 10,114 | 260 |
oxicuda-metal |
-- | Metal compute backend (macOS) | 7,287 | 255 |
oxicuda-vulkan |
-- | Vulkan Compute backend | 7,366 | 150 |
oxicuda-webgpu |
-- | WebGPU backend | 5,430 | 216 |
oxicuda-rocm |
-- | AMD ROCm backend | 6,523 | 213 |
oxicuda-levelzero |
-- | Intel oneAPI / LevelZero backend | 8,248 | 153 |
| Vol.17 -- Generative AI | ||||
oxicuda-gen |
-- | Diffusion (DDPM/DDIM/DPM-Solver++/Flow Matching), CFG, VAE, LoRA | 16,612 | 596 |
| Vol.18 -- Graph Neural Networks | ||||
oxicuda-gnn |
-- | CSR/COO/Hetero graphs, GCN/GAT/GraphSAGE/GIN, pooling | 19,452 | 670 |
| Vol.19 -- State Space Models | ||||
oxicuda-mamba |
-- | HiPPO-NPLR, S4D/S5 selective scan, Mamba SSM, RWKV | 16,613 | 678 |
| Vol.20 -- Vision Transformers | ||||
oxicuda-vision |
-- | ViT, patch embedding, CLIP towers | 22,299 | 853 |
| Vol.21 -- Audio/Speech ML | ||||
oxicuda-audio |
-- | Conformer, Wav2Vec2, CTC/RNN-T, WaveNet, SpecAugment, x-vector | 24,396 | 853 |
| Vol.22 -- Time-Series Forecasting | ||||
oxicuda-timeseries |
-- | TCN, NHiTS, PatchTST, TimesNet, iTransformer, RevIN | 22,887 | 711 |
| Vol.23 -- Bayesian Deep Learning | ||||
oxicuda-bayes |
-- | Variational inference, MC Dropout, Deep Ensembles, SWAG, Laplace | 21,380 | 675 |
| Vol.24 -- Federated Learning | ||||
oxicuda-federated |
-- | FedAvg/FedProx/SCAFFOLD/FedAdam, DP, secure aggregation | 12,084 | 502 |
| Vol.25 -- Neural Architecture Search | ||||
oxicuda-nas |
-- | DARTS, supernet, NSGA-II, hardware-aware FLOPs predictor | 12,155 | 389 |
| Vol.26 -- Self-Supervised Learning |
$ claude mcp add oxicuda \
-- python -m otcore.mcp_server <graph>