NVIDIA publie cuda-oxide : un compilateur expérimental Rust vers CUDA générant des noyaux GPU directement en PTX
Les équipes de recherche de NVIDIA AI ont publié cuda-oxide, un compilateur expérimental qui permet aux développeurs d'écrire des noyaux GPU CUDA SIMT (Single Instruction, Multiple Threads) directement en Rust standard, sans passer par du C++ ni par des interfaces de liaison (FFI). Le projet compile le code Rust vers PTX (Parallel Thread Execution), la représentation intermédiaire assembleur qu'utilise CUDA pour cibler les GPU NVIDIA. La chaîne de compilation est entièrement construite en Rust : le code source traverse d'abord le frontend de rustc, puis Stable MIR (l'API stable et versionnée exposant les internals du compilateur), avant d'être transformé via trois dialectes intermédiaires définis dans Pliron, un framework Rust natif similaire à MLIR. Le résultat est un fichier LLVM IR (.ll) que l'outil externe llc compile en PTX, chargé ensuite par le driver CUDA à l'exécution. Le code hôte et le code GPU coexistent dans un même fichier .rs, et chaque étape de la chaîne peut être inspectée avec la commande cargo oxide pipeline.
L'intérêt principal de cuda-oxide est de permettre aux développeurs Rust d'écrire des kernels GPU sans quitter l'écosystème Rust et sans installer de chaîne C++, CMake ou tablegen. L'ensemble du projet se compile avec cargo. En s'appuyant sur Stable MIR plutôt que sur les internals instables de rustc, le backend évite de se casser à chaque mise à jour nightly du compilateur, ce qui était un obstacle récurrent pour les projets similaires. Pour l'industrie, cela ouvre la possibilité de combiner les garanties de sécurité mémoire de Rust avec la programmation GPU basse couche, un domaine jusqu'ici dominé par le C++ et où les bugs liés à la gestion mémoire ont des conséquences directes sur les performances et la stabilité des modèles d'IA en production.
L'écosystème Rust-GPU existe déjà sous plusieurs formes : Rust-GPU cible SPIR-V pour Vulkan, rust-cuda utilise un backend rustc vers NVVM IR, CubeCL expose un DSL embarqué compilant vers CUDA, ROCm et WGPU, et std::offload exploite le chemin d'offload implicite de LLVM. cuda-oxide se positionne différemment : là où rust-cuda cherche à "amener Rust sur GPU" en préservant l'ergonomie Rust (async/await, bibliothèque standard on-device), cuda-oxide vise à "amener CUDA dans Rust", c'est-à-dire exprimer le modèle CUDA natif, les intrinsèques GPU et l'indexation de threads directement en Rust. Les équipes de NVlabs ont précisé coordonner avec les mainteneurs de rust-cuda et considèrent les deux projets complémentaires plutôt que concurrents. Le projet reste expérimental, mais son architecture modulaire et son absence de dépendances C++ en font une base sérieuse pour explorer la programmation GPU en Rust à grande échelle.
Dans nos dossiers
Vu une erreur factuelle dans cet article ? Signalez-la. Toutes les corrections valides sont publiées sur /corrections.



