NVIDIA Anuncia CUDA Rust: Desarrollo Nativo de Kernels para GPU

NVIDIA se ha sumado a la tendencia deRust integrando componentes clave como el controlador Nova de Linux, NVIDIA Dynamo y los enlaces de NVTX. Ahora, la compañía cierra la brecha al anunciar el desarrollo de CUDA Rust, permitiendo escribir kernels de GPU nativos que se compilan directamente a PTX, en lugar de depender de envoltorios sobre código en otros lenguajes.
Se menicona que CUDA Rust admite dos enfoques principales para el desarrollo de kernels paralelos. NVIDIA recomienda a los desarrolladores iniciar siempre con el modelo Tile. En este paradigma, el programador define algoritmos que operan sobre bloques de datos, y el compilador Tile IR asume el control: decide cómo mapear los bloques en la arquitectura específica de la GPU, gestiona la sincronización y distribuye los datos entre los núcleos tensoriales. El modelo SIMT (Instrucción Única, Múltiples Hilos) se reserva para cuando se requiere un control de bajo nivel explícito sobre la memoria y los hilos individuales.
El Enfoque SIMT: cuda-oxide
Para el desarrollo bajo el modelo SIMT, NVIDIA propone el compilador cuda-oxide, un backend de generación de código personalizado para rustc. Este intercepta la compilación, enruta las funciones marcadas a través de Rust MIR, el marco Pliron IR y LLVM IR, hasta generar las instrucciones PTX finales.
Este enfoque permite crear kernels utilizando el sistema de tipos y el modelo de propiedad de Rust, operando en un entorno sin biblioteca estándar (no_std). Para garantizar la seguridad en el acceso a la memoria (que suele ser el mayor problema en SIMT), NVIDIA introduce el tipo DisjointSlice, el cual asegura que cada hilo reciba acceso exclusivo a sus propios elementos de datos, dividiendo un préstamo mutable único en fragmentos por hilo. A nivel de infraestructura, cuda-oxide requiere Linux, una GPU con capacidad de cómputo 8.0 o superior, CUDA 12.x, clang y, por el momento, una cadena de herramientas nightly anclada a una versión específica de Rust.
El Enfoque Tile: cutile-rs
El modelo Tile se implementa mediante la biblioteca cutile-rs, la cual opera a un nivel de abstracción superior y presenta requisitos mucho más ligeros. A diferencia del modelo SIMT, no necesita compiladores LLVM personalizados ni versiones nightly; funciona sobre Rust estable (1.89 o superior) y requiere CUDA 13.3. Además, ya se encuentra publicada de manera estándar en crates.io.
El núcleo de cutile-rs captura el AST (Árbol de Sintaxis Abstracta) del módulo en el binario del anfitrión y lo compila de forma dinámica (JIT) a través de CUDA Tile IR la primera vez que se lanza el kernel. En este modelo no es necesario utilizar estructuras como DisjointSlice, ya que el particionamiento de los datos se realiza en el anfitrión (host), otorgando a cada bloque de hilos un subtensor de escritura exclusivo. Este diseño hace que el código sea seguro por construcción, aplicando las estrictas reglas de propiedad y préstamo de Rust directamente sobre la GPU y previniendo errores clásicos de aliasing (como pasar un mismo búfer de salida como entrada) desde el tiempo de compilación.
Estado Actual
Ninguno de los dos proyectos se considera listo para producción en este momento. El compilador cuda-oxide se encuentra en una fase alfa temprana. Por su parte, cutile-rs presenta un estado de desarrollo más avanzado y ya está siendo adoptado fuera de NVIDIA por herramientas de terceros, como el motor de inferencia Grout de HuggingFace y el proyecto mistral.rs.
El desarrollo de CUDA Rust no parte desde cero ya que el equipo de NVIDIA colabora activamente con los mantenedores de proyectos comunitarios preexistentes como rust-cuda, ubicándose dentro de un ecosistema que también incluye iniciativas como Rust-GPU y CubeCL. El diferenciador clave es el respaldo de ingeniería directa del fabricante y una hoja de ruta clara para estandarizar Rust en la programación nativa de aceleradores gráficos.
Finalmente, cabe mencionar que aunque los ecosistemas de CUDA C++ y CUDA Python ya son cadenas de herramientas de nivel empresarial, NVIDIA ha proyectado que CUDA Rust madurará y alcanzará un nivel apto para entornos de producción hacia 2027. Para facilitar esta adopción, la arquitectura planificada permitirá la interoperabilidad entre lenguajes, asegurando que elegir Rust no bloquee la integración con el código preexistente en C++ o Python.
Si estas interesado en poder conocer mas al respecto, puedes consultar los detalles en el siguiente enlace.
