VectorWare, compañía que se presenta como la primera empresa de software nativa para GPU, anunció que logró ejecutar el SIMD portable de Rust (core::simd) sobre la GPU, un hito sin precedentes para la programación de procesadores gráficos en este lenguaje. La empresa, especializada en tooling para llevar Rust al hardware gráfico, ya había trasladado con anterioridad los hilos de Rust (std::thread) a la GPU, mapeando cada hilo a un warp de NVIDIA. Ahora da un paso más al llevar también el paralelismo dentro del hilo: el SIMD.
El equipo explica que la arquitectura SIMT de las GPUs —un warp ejecuta una instrucción sobre los 32 carriles (lanes) que lo componen— es, en esencia, una unidad vectorial amplia. Por ello, un vector Simd se asigna directamente a un warp: cada elemento i16 cae en un lane, y operaciones elementales, comparaciones con máscara, selecciones y reducciones horizontales se compilan a instrucciones nativas del warp, incluyendo shuffles entre lanes y las instrucciones vote/ballot.
La principal fricción entre el modelo abstracto y el hardware es el número fijo de lanes del warp (32 en NVIDIA, 32 o 64 en AMD), frente a la flexibilidad de N en Simd. VectorWare codifica estas restricciones en el sistema de tipos de Rust mediante genéricos y const generics, definiendo un IR que representa ballots, shuffles, reducciones, scans, gathers, scatters, atomics y strip mining. El mismo código fuente en Rust se compila para CPU x86-64 y para GPU sin modificar, lo que allana el camino hacia aplicaciones complejas de alto rendimiento escritas con abstracciones Rust familiares.
