Se ha publicado la versión 2.2 del proyecto Vortex, que desarrolla un GPGPU basado en la arquitectura de conjunto de instrucciones RISC-V, diseñado para llevar a cabo cálculos paralelos utilizando la API OpenCL y el modelo de ejecución SIMT (Single Instruction, Multiple Threads). El proyecto también puede ser utilizado para investigaciones en el campo de la gráfica 3D y en el desarrollo de nuevas arquitecturas de GPU. Los esquemas, descripciones de bloques de hardware en Verilog, simuladores, controladores y documentación del proyecto relevante se distribuyen bajo la licencia Apache 2.0.
La base del GPGPU es un ISA RISC-V común, ampliado con algunas instrucciones adicionales necesarias para respaldar funciones de GPU y gestionar flujos. Al mismo tiempo, los cambios en la arquitectura del conjunto de instrucciones RISC-V se han minimizado y, cuando es posible, se utilizan instrucciones vectoriales existentes. Entre las instrucciones adicionales se encuentran: «tex» para acelerar el procesamiento de texturas, vx_rast para administrar la rasterización, vx_rop para el procesamiento de fragmentos, profundidad y transparencia, vx_imadd para realizar la operación de «multiplicar y sumar», vx_wspawn, vx_tmc y vx_bar para activar los frentes de instrucciones y los flujos en ellos (wavefront, conjunto de hilos ejecutados en paralelo por el SIMD Engine), vx_split y vx_join.

El GPGPU en desarrollo soporta arquitecturas de conjunto de instrucciones RISC-V de 32 y 64 bits, RV32IMF y RV64IMAFD, y puede incluir memoria compartida opcional, cachés de los niveles L1, L2 y L3, así como un número configurable de núcleos, bloques de tareas (warps) y flujos. A su vez, para cada núcleo se prevé la posibilidad de habilitar un número configurable de ALU, FPU, LSU y SFU. Para la creación de prototipos se pueden utilizar FPGA Altera Arria 10, Altera Stratix 10, Xilinx Alveo U50, U250, U280 y Xilinx Versal VCK5000. Para simular el funcionamiento del chip se pueden usar Verilator (simulador Verilog), RTLSIM (simulación RTL) y SimX (simulación de software).
Para el desarrollo de aplicaciones, se ofrece un conjunto de herramientas que incluye versiones adaptadas para trabajar con Vortex, como PoCL (compilador y runtime OpenCL), LLVM/Clang, GCC y Binutils. El proyecto mantiene la especificación OpenCL 1.2 y, a través de la traducción a OpenCL, implementa soporte para la representación intermedia de shaders SPIR-V. Para gráficos en tecnologías Vortex, se desarrolla el GPU abierto Skybox, que soporta la API gráfica Vulkan. El prototipo de Skybox, creado sobre la base de FPGA Altera Stratix 10 e incluyendo 32 núcleos (512 hilos), logró una tasa de llenado de 3.7 gigapíxeles por segundo (29.4 gigatransacciones por segundo) a una frecuencia de 230 MHz.
Entre los cambios en la versión Vortex 2.2:
- Se añadió la API vx_spawn_taskgroups para lanzar núcleos que soportan la ejecución segmentada de tareas 3D.
- Se agregó soporte para ZICOND, una extensión de la arquitectura del conjunto de instrucciones RISC-V que permite la ejecución condicional de operaciones sin bifurcaciones.
- El compilador OpenCL se ha cambiado para la programación de la ejecución a nivel de hilos individuales (thread-level, donde cada hilo ejecuta su tarea independientemente de otros), en lugar de grupos de tareas (warp-level) como era antes.
- Se añadió soporte JIT para compilación y núcleos de 64 bits en OpenCL.
- Se implementó el soporte para la carga dinámica de Vortex runtime.
- Se presentó nueva documentación para la configuración de FPGA Xilinx.
- Se incluyó la prueba de síntesis de lógica utilizando las herramientas Yosys.
- En operaciones jerárquicas de flush y en el modo write-back, se garantizó el soporte para caché.
- Se optimizó la velocidad de verificación de scoreboard y el manejo de operandos a nivel de transferencia de registros (RTL, Register Transfer Level).
- Se añadió soporte para el simulador de memoria DRAM Ramulator 2.0.
- Se realizó la transición al uso de nuevas versiones de Verilator 5.0 (simulador SystemVerilog) y LLVM 18.0, además de actualizar las herramientas basadas en CentOS 7.9.
- Se utilizó el servicio GitHub CI en lugar del sistema de integración continua Travis CI.
Fuente: opennet.ru
