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

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.