NVIDIA ha presentado CUDA Rust para el desarrollo de núcleos de GPU en el lenguaje Rust

La empresa NVIDIA ha anunciado el desarrollo de la herramienta CUDA Rust, que permite utilizar el lenguaje Rust para desarrollar núcleos que se ejecutan en el lado de la GPU. La herramienta garantiza la seguridad en la gestión de memoria en la etapa de compilación y previene la aparición de condiciones de carrera. El próximo año, se planea llevar CUDA Rust a un nivel adecuado para el desarrollo de proyectos reales, similar a las herramientas CUDA C++ y CUDA Python.

La herramienta CUDA Rust admite dos modelos de desarrollo de núcleos que se ejecutan en paralelo: SIMT (Single Instruction, Multiple Threads) y Tile. El modelo SIMT permite definir la lógica de un solo hilo a un nivel bajo, ejecutar miles de tales hilos y gestionarlos. El modelo Tile ofrece un nivel de abstracción más alto, donde en lugar de gestionar explícitamente hilos individuales, se definen algoritmos de acción con bloques de datos (tiles), y el compilador Tile IR se encarga de todas las manipulaciones con los hilos, sincronización de acceso, gestión de memoria y distribución de datos entre los núcleos tensoriales.

Para desarrollar en el lenguaje Rust utilizando el modelo SIMT, se está desarrollando el compilador cuda-oxide, que permite compilar código en Rust que utiliza el sistema de tipos estándar y el modelo de propiedad de Rust, directamente a instrucciones para ejecutarse en una máquina virtual CUDA PTX (Parallel Thread Execution). Los núcleos para GPU se crean en Rust estándar, pero se ejecutan en un entorno no estándar (no_std) y solo pueden utilizar funciones de la biblioteca libcore y abstracciones especializadas de Rust, sin acceso a la biblioteca estándar de Rust (libstd).

En los núcleos CUDA en Rust se permite el uso de protección a través del sistema de tipos (safe), el uso de bloques inseguro (unsafe) y el acceso a instrucciones de hardware de bajo nivel. Para garantizar la seguridad, se propone el tipo DisjointSlice, que garantiza que cada hilo tenga acceso exclusivo solo a sus propios datos. El código de cuda-oxide se distribuye bajo la licencia Apache 2.0.

Para aplicar el modelo Tail, se propone la biblioteca cutile-rs, que permite usar el lenguaje Rust de manera idiomática para crear código que se compila directamente en núcleos CUDA. Cutile-rs aplica las estrictas reglas de propiedad y préstamo propuestas en Rust al código que se ejecuta en la GPU. El núcleo se presenta como un programa de un solo hilo que trabaja con un bloque de datos, y el compilador se encarga de dividir los cálculos en hilos y garantizar su sincronización. Los hilos tienen acceso compartido a tensores inmutables, y para el acceso seguro a tensores mutables, se utiliza su división en bloques no superpuestos. El código de cutile-rs se distribuye bajo la licencia Apache 2.0.

Fuente: opennet.ru

Compra un hosting fiable para sitios web con protección contra DDoS, servidores VPS VDS 🔥 Compra un hosting fiable para sitios web con protección contra DDoS, servidores VPS VDS | ProHoster