NVIDIA anunció el desarrollo del kit de herramientas CUDA Rust, que permite desarrollar kernels para la GPU utilizando el lenguaje Rust. Este kit garantiza la seguridad de la memoria durante la compilación y previene condiciones de carrera. El próximo año, se prevé que CUDA Rust alcance un nivel adecuado para proyectos de producción, similar al de los kits de herramientas CUDA C++ y CUDA Python.
El conjunto de herramientas CUDA Rust admite dos modelos para el desarrollo de kernels paralelos: SIMT (Instrucción Única, Múltiples Hilos) y Tile. El modelo SIMT permite la definición de bajo nivel de un solo hilo, así como el lanzamiento y la gestión de miles de ellos. El modelo Tile ofrece un nivel de abstracción superior, donde en lugar de gestionar explícitamente hilos individuales, se definen algoritmos para operar sobre bloques de datos (tiles), y el compilador Tile IR se encarga de toda la manipulación de hilos, la sincronización de acceso, la gestión de memoria y la distribución de datos entre los núcleos tensoriales.
Para el desarrollo en el lenguaje Rust utilizando el modelo SIMT, se está desarrollando el compilador cuda-oxide, que permite compilar código en el lenguaje Rust, utilizando el sistema de tipos estándar y el modelo de propiedad de Rust, directamente en instrucciones para su ejecución en máquina virtual CUDA PTX (Parallel Thread Execution). Los kernels de GPU están escritos en Rust estándar, pero se ejecutan en un entorno sin biblioteca estándar (no_std) y solo pueden usar funciones de la biblioteca libcore y abstracciones especializadas de Rust, sin acceso a la biblioteca estándar de Rust (libstd).
Los kernels de CUDA escritos en Rust permiten el uso de protección de tipos (seguros), el uso de bloques no seguros y el acceso a instrucciones de hardware de bajo nivel. Para garantizar la seguridad, se propone el tipo DisjointSlice, que asegura que cada hilo tenga acceso exclusivo a sus propios datos. El código cuda-oxide está licenciado bajo la licencia Apache 2.0.
Para implementar el modelo Tail, se propone la biblioteca cutile-rs. Esta permite utilizar el lenguaje idiomático Rust para crear código que se compila directamente en kernels CUDA. Cutile-rs aplica las estrictas reglas de propiedad y préstamo de Rust al código que se ejecuta en la GPU. El kernel se implementa como un programa de un solo hilo que opera sobre un bloque de datos, y el compilador divide automáticamente el cálculo en hilos y garantiza su sincronización. Los hilos tienen acceso compartido a tensores inmutables, y los tensores mutables se dividen en bloques disjuntos para garantizar un acceso seguro. El código de cutile-rs se distribuye bajo la licencia Apache 2.0.
Fuente: opennet.ru
