Vx: lenguaje de programación para computación heterogénea

Fuentes: Vx: A Systems Programming Language for Heterogeneous Computing

Vx es un lenguaje de programación de sistemas diseñado para la computación heterogénea, integrando CPU, GPU, NPU y memoria de aceleradores en su sistema de tipos. A diferencia de los lenguajes tradicionales que tratan los aceleradores como infraestructura opaca, Vx define la ubicación de los datos como parte de su semántica. Esto permite que el compilador detecte errores de compilación, como la desreferencia de punteros de dispositivo desde el host, en lugar de generar fallos en tiempo de ejecución o corrupción silenciosa.

El sistema de tipos de Vx distingue explícitamente entre memoria de alto ancho de banda de NPU y DRAM del host, requiriendo transferencias explícitas entre ellas, incluso cuando el hardware lo permite. En arquitecturas como Apple Silicon, estas transferencias se compilan a casi cero coste, priorizando la localidad de datos verificable por el código fuente. El compilador utiliza comprobadores de tipos para prevenir errores como la fuga de punteros de dispositivo, la violación de contratos de seam (asincronía no visible) y el uso posterior a movimiento, así como la diferenciación a través de regiones sin adjunto definido.

Vx requiere la declaración explícita de la topología y jerarquía de memoria del hardware, utilizando archivos de máquina que describen capacidades y ancho de banda. El frontend del compilador es orientado a datos y paralelo, generando MLIR idéntico en byte para ejecuciones serial y paralela. Los backends soportan CPU (x86-64, arm64), GPU NVIDIA (PTX/SASS), Apple AMX/ANE y regiones distribuidas. Aunque no es adecuado para flujos de trabajo dinámicos como los de PyTorch, Vx ofrece precisión y velocidad en entornos donde la arquitectura del silicio es fija y conocida.