Se ha publicado una nueva edición del proyecto Vortex, que desarrolla un GPGPU abierto basado en la arquitectura del conjunto de instrucciones RISC-V, diseñado para realizar 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 realizar investigaciones en el campo de la gráficos 3D y para desarrollar nuevas arquitecturas de GPU. Los esquemas, descripciones de bloques de hardware en Verilog, simuladores, controladores y documentación del proyecto se distribuyen bajo la licencia Apache 2.0.
La base del GPGPU es un ISA RISC-V típico, ampliado con algunas instrucciones adicionales necesarias para soportar funciones de GPU y manejar flujos. A su vez, los cambios en la arquitectura del conjunto de instrucciones RISC-V se han minimizado y se utilizan, siempre que sea posible, las instrucciones vectoriales ya existentes. Un enfoque similar se aplica en el proyecto RV64X, que también desarrolla una GPU abierta basada en las tecnologías RISC-V.

Características principales de Vortex:
- Soporte para arquitecturas del conjunto de instrucciones RISC-V de 32 y 64 bits: RV32IMF y RV64IMAFD.
- Número configurado de núcleos, bloques de tareas (warps) y hilos.
- Número configurable de ALU, FPU, LSU y SFU para cada núcleo.
- Ancho de emisión configurable del pipeline.
- Memoria compartida opcional y cachés de niveles L1, L2 y L3.
- Soporte para la especificación OpenCL 1.2.
- Posibilidad de implementación en FPGA Altera Arria 10, Altera Stratix 10, Xilinx Alveo U50, U250, U280 y Xilinx Versal VCK5000.
- Instrucciones extendidas: «tex» para acelerar el procesamiento de texturas, vx_rast para controlar la rasterización, vx_rop para 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 frentes de instrucciones e hilos en ellos (wavefront, conjunto de hilos ejecutados en paralelo SIMD Engine), vx_split y vx_join.
- El soporte para la representación intermedia de shaders SPIR-V se implementa a través de la traducción a OpenCL.
- Para el desarrollo de aplicaciones, se ofrece un conjunto de herramientas que incluye variantes de PoCL (compilador y runtime OpenCL) adaptadas para trabajar con Vortex, así como LLVM/Clang, GCC y Binutils.
- Se admite la simulación del funcionamiento del chip utilizando Verilator (simulador Verilog), RTLSIM (simulación RTL) y SimX (simulación por software).
Para la gráfica, se desarrolla un GPU abierto Skybox en tecnologías Vortex, que soporta la API gráfica Vulkan. El prototipo de Skybox, creado en base a un FPGA Altera Stratix 10 y que incluye 32 núcleos (512 hilos), logró una tasa de ingreso de 3.7 gigapíxeles por segundo (29.4 gigatransacciones por segundo) a una frecuencia de 230 MHz. Se señala que es la primera GPU abierta con implementación tanto de software como de hardware que soporta Vulkan.
Entre los cambios en la versión Vortex 2.1:
- Se agregó la API spawn_taskgroups para lanzar núcleos que utilizan memoria local y que admiten la implementación de barreras de memoria.
- Se propuso una nueva extensión para la creación de núcleos binarios reubicables (relocatable).
- Se añadieron llamadas vx_mem_reserve, vx_mem_access y vx_mem_address a la API de gestión de memoria.
- Se agregó una nueva API de tiempo de ejecución vx_check_occupancy.
- Se añadió una opción al controlador para verificar las pruebas OpenCL en la GPU local.
- Se añadieron pruebas de OpenCL que utilizan memoria local (psum, sgemm2, sgemm3).
- Se añadieron bibliotecas libc y librt específicamente adaptadas para Vortex.
- Se añadió soporte para la fusión de bloques de memoria libres adyacentes (memory coalescing).
- Se ha optimizado la microarquitectura.
- Se añadió un nuevo script de construcción que separa los archivos fuente del directorio de construcción.
Fuente: opennet.ru
