Contexte et objectifs

En septembre 2026, Nvidia a annoncé deux projets Rust capables de générer du code PTX natif à partir de kernels GPU écrits en Rust. L’objectif est de combler le manque d’un frontend Rust complet, alors que les modèles CUDA C++ et CUDA Python sont déjà matures. Les deux pistes reproduisent les modèles de programmation CUDA : SIMT (Single‑Instruction‑Multiple‑Thread) et Tile, afin de proposer aux développeurs Rust un choix adapté à leurs besoins de contrôle ou d’abstraction.

Architecture des deux pistes

Le projet cuda-oxide implémente un backend rustc personnalisé. Il intercepte les fonctions annotées #[kernel], les fait passer par le MIR de Rust, puis par le framework IR Pliron avant de les convertir en LLVM IR et finalement en PTX. Le processus reste entièrement en Rust jusqu’à l’étape LLVM, ce qui nécessite un pinned nightly toolchain (exemple : +nightly-2026-04-03) et un environnement Linux avec CUDA 12.x ou supérieur, ainsi qu’un GPU de capacité de calcul 8.0+. Le flux de compilation est déclenché par la sous‑commande cargo oxide.

use cuda_device::{kernel, launch_bounds, launch_contract, thread, DisjointSlice};
#[kernel]
#[launch_bounds(256)]
#[launch_contract(domain = 1, block = (256, 1, 1))]
pub fn vecadd(a: &[f32], b: &[f32], mut c: DisjointSlice) {
    let idx = thread::index_1d();
    let idx_raw = idx.get();
    if let Some(c_elem) = c.get_mut(idx) {
        *c_elem = a[idx_raw] + b[idx_raw];
    }
}

Le second projet, cutile-rs, repose sur le modèle Tile. Il utilise le CUDA Tile IR pour gérer automatiquement le mapping des threads et la disposition mémoire. Contrairement à cuda-oxide, cutile-rs s’appuie uniquement sur le compilateur stable Rust 1.89+ et CUDA 13.3, sans besoin de LLVM personnalisé. Le code est compilé JIT à l’exécution, ce qui simplifie l’intégration dans des pipelines CI/CD.

Sécurité mémoire et exigences d’exécution

Les deux implémentations intègrent des garanties de sécurité à la compilation. cuda-oxide introduit les types DisjointSlice et les launch_contract afin d’empêcher les aliasings entre buffers d’entrée et de sortie. cutile-rs repose sur le partitionnement de tenseurs et le système de propriété Rust pour assurer un accès exclusif aux données d’un tile. Ces mécanismes permettent de détecter les dépassements de tampon ou les conditions de course au moment de la compilation, réduisant ainsi les vulnérabilités typiques des kernels écrits en C++.

En termes de dépendances, cuda-oxide requiert cargo-oxide doctor pour vérifier la présence de clang, libclang et d’un système LLVM optionnel. cutile-rs, publié sur crates.io, ne nécessite aucune chaîne d’outils supplémentaire, ce qui le rend plus accessible aux équipes déjà familiarisées avec le Rust stable.

Adoption, interopérabilité et perspectives

Le projet Tile a déjà été intégré dans les moteurs d’inférence HuggingFace Grout et le framework mistral.rs, démontrant son utilité dans des charges de travail d’IA. cuda-oxide reste en phase alpha, mais Nvidia prévoit d’étendre l’interopérabilité entre CUDA Rust, CUDA C++ et CUDA Python, afin que le choix du frontend n’isole pas les développeurs des écosystèmes existants. Cette stratégie vise à soutenir la migration progressive de code critique vers Rust, tout en conservant la compatibilité avec les bibliothèques CUDA établies.