Vortex, un proyecto que desarrolla una GPGPU basada en RISC-V

mayo 23, 2024 0 Comments

Vortex, GPGPU basada en RISC-V

RISC-V es una arquitectura que ha ganado mucha popularidad en los últimos años, esto gracias a su diseño (ISA) de código abierto y a esto, sumando de que se ha convertido en una de las arquitecturas de procesadores más importantes debido a su flexibilidad y modularidad.

Gracias a ello se han lanzado diversos proyectos basados en RISC-V y uno de ellos es Vortex del cual vamos a hablar el día de hoy aquí en el blog.

¿Qué es el proyecto Vortex?

Vortex es un proyecto que desarrolla una GPGPU, basada en la arquitectura RISC-V. El proyecto está diseñado para realizar computación paralela utilizando la API OpenCL y el modelo de ejecución SIMT.

El núcleo de la GPGPU de Vortex, es un RISC-V genérico, sobre el cual se han implementado mejoras con algunas instrucciones adicionales necesarias para admitir la funcionalidad de GPU y el control de subprocesos. Al mismo tiempo, los cambios en la arquitectura del conjunto de instrucciones RISC-V se mantienen al mínimo y, siempre que es posible, se utilizan instrucciones vectoriales existentes. Se utiliza un enfoque similar en el proyecto RV64X, que también desarrolla una GPU abierta basada en tecnologías RISC-V.

Otra de las características de Vortex es que la GPGPU cuenta con instrucciones avanzadas, entre las cuales se encuentra:»tex» para acelerar el procesamiento de texturas, «vx_rast» para controlar la rasterización, «vx_rop» para manejar fragmentos, profundidad y transparencia, «vx_imadd» para realizar operaciones de multiplicación y suma, «vx_wspawn», «vx_tmc» y «vx_bar» para activar bordes de instrucción y frentes de onda (un conjunto de subprocesos ejecutado en paralelo por el motor SIMD), «vx_split» y «vx_join».

De las características principales de Vortex que se destacan se encuentra las siguientes:

  •  Compatibilidad con arquitecturas de conjuntos de instrucciones RISC-V de 32 y 64 bits: RV32IMF y RV64IMAFD.
  • Configurabilidad: Número configurable de núcleos, bloques de tareas (warps) e hilos.
  • Unidad de procesamiento: Número configurable de ALU, FPU, LSU y SFU por núcleo.
  • Ancho de salida: Ancho de salida de tubería ajustable.
  • Memoria: Memoria compartida opcional y cachés L1, L2 y L3.
  • Soporte de especificación OpenCL 1.2.
  • Implementación basada en FPGA: Posibilidad de implementación en FPGA Altera Arria 10, Altera Stratix 10, Xilinx Alveo U50, U250, U280 y Xilinx Versal VCK5000.
  • Compatibilidad con SPIR-V: Implementada mediante traducción a OpenCL.
    Herramientas de desarrollo: Un conjunto de herramientas que incluye variantes de PoCL (compilador y tiempo de ejecución OpenCL), LLVM/Clang, GCC y Binutils adaptados para trabajar con Vortex.
  • Simulación de chips: Admitida mediante Verilator (simulador Verilog), RTLSIM (simulación RTL) y SimX (simulación de software).
    GPU Skybox

Ademas de ello, para gráficos basados en tecnologías Vortex, se está desarrollando una GPU Skybox abierta que admite la API de gráficos Vulkan. Se menciona que el prototipo Skybox, está creado sobre la base de la FPGA Altera Stratix 10 e incluyendo 32 núcleos (512 subprocesos) a una frecuencia de 230 MHz. Cabe señalar que esta es la primera GPU abierta con implementación de software y hardware compatible con Vulkan

Cabe mencionar que actualmente el proyecto Vortex se encuentra en su versión 2.1, la cual fue lanzada hace poco y en ella se han implementado cambios importantes tales como: el soporte de fusión de memoria (el cual ahora es compatible), se optimizó el proceso de instrucciones de RSE, se ha optimizado la sobrecarga, se añadió un nuevo script de configuración de compilación, entre otras cosas más:

  • Se agregó la API del kernel spawn_taskgroups para ejecutar kernels que usan memoria local y barreras
  • Nueva extensión de tiempo de ejecución para argumentos y binarios del kernel reubicables.
  • Nuevas adiciones de API de memoria de runtime: vx_mem_reserve, vx_mem_access, vx_mem_address
  • nueva API de tiempo de ejecución vx_check_occupancy
  • Se agregó la opción de controlador de GPU para probar las pruebas OpenCL en la GPU local (por ejemplo, blackbox.sh –driver=gpu –app=sgemm)
  • Se agregaron pruebas OpenCL que se usan con memoria local (psum, sgemm2, sgemm3)
  • Se agregaron bibliotecas libc y librt personalizadas de vórtice con instrumentación de divergencia de control.

Si estás interesado en poder conocer más al respecto, debes saber que los esquemas, las descripciones de los bloques de hardware en lenguaje Verilog, el simulador, los controladores y la documentación de diseño que lo acompaña se distribuyen bajo la licencia Apache 2.0. Puedes consultar los detalles en el siguiente enlace.


Some say he’s half man half fish, others say he’s more of a seventy/thirty split. Either way he’s a fishy bastard.