Compañía Nvidia опубликовала primera versión del kit de herramientas Óxido CUDA, que permite crear kernels de GPU paralelos en el lenguaje Rust CUDA SIMT (Instrucción única, múltiples hilos). El proyecto le permite compilar código Rust utilizando el sistema de tipos estándar y modelo de propiedad Rust, directamente en instrucciones para su ejecución en la máquina virtual CUDA PTX (nvidia.com) (Ejecución de hilos paralelos) sin el uso de lenguajes específicos de dominio (DSL) intermedios ni enlaces.
El código del kit de herramientas está escrito en Rust y distribuido por bajo la licencia Apache 2.0. La primera versión se presenta como una versión alfa inicial.
El conjunto de herramientas incluye:
- Un backend de generación de código para el compilador rustc que permite compilar funciones con el "#[núcleo]" en kernels de GPU paralelos en la representación CUDA PTX. La compilación utiliza la cadena de transformación estándar basada en el marco rustc. Pliron: Óxido → MIR → Pliron IR → LLVM IR → PTX.
- Un sistema unificado para ensamblar componentes que se ejecutan en el sistema anfitrión y en la GPU, que se reduce a ejecutar los comandos "cargo oxide build" y "cargo oxide run".
- Conjunto de abstracciones de Rust que se pueden usar en kernels del lado de la GPU. Por ejemplo, hay funciones disponibles para la indexación, el uso de memoria compartida y barreras, operaciones atómicas y sincronización de grupos de hilos. TMA (nvlabs.github.io) (Acelerador de memoria tensorial). Es posible llamar a enlaces para instrucciones de bajo nivel específicas de la arquitectura Blackwell (por ejemplo, operaciones matriciales extendidas).
- Crea paquetes con componentes de tiempo de ejecución CUDA basados en el host que permitan la gestión de memoria, la ejecución de kernels en la GPU y la interacción asíncrona con funciones basadas en la GPU.
- Una colección de ejemplos de núcleos que demuestran características como la manipulación de vectores, la multiplicación de matrices (GEMM), las operaciones atómicas, la ejecución asíncrona y la integración de bibliotecas. MathDx, utilizando genéricos y cierres, interactuando con núcleos CUDA en C++/CCCL.
Los kernels de GPU se crean en Rust estándar (no en un dialecto), pero se ejecutan en el entorno. no_std y solo puede usar funciones de la biblioteca libcore y las abstracciones especializadas de Rust mencionadas anteriormente, sin acceso a la biblioteca estándar de Rust (libstd). Los tipos admitidos incluyen tipos primitivos (u8..u64, f32, f64, bool), estructuras, enumeraciones, tuplas, arreglos ([T; N]) y slices (&[T]), operadores match / if / if let, bucles for y while, iteradores (.iter(), .enumerate()), cierres y genéricos. No son admitidos los tipos String, Vec y Box, las macros format!, panic! y println!, los objetos Trait y las funciones de la biblioteca estándar implementadas a través de llamadas al sistema operativo (manejo de archivos, E/S y operaciones de red).
Disponible Rust ofrece tres niveles de seguridad para los núcleos CUDA: protección del sistema de tipos (segura), uso de bloques inseguros y acceso a instrucciones de hardware de bajo nivel. El rendimiento de la implementación de multiplicación de matrices basada en óxido CUDA (GEMM SoL) en una GPU B200 alcanza los 868 billones de operaciones por segundo, lo que representa el 58 % del rendimiento de la biblioteca optimizada. CUBLAS.
Fuente: linux.org.ru
