È stata pubblicata una nuova versione del progetto Vortex, che sviluppa un GPGPU open source basato sull'architettura a set di istruzioni RISC-V, progettato per l'esecuzione di calcoli paralleli utilizzando l'API OpenCL e il modello di esecuzione SIMT (Single Instruction, Multiple Threads). Il progetto può essere utilizzato anche per ricerche nel campo della grafica 3D e per lo sviluppo di nuove architetture GPU. Gli schemi, le descrizioni dei blocchi hardware in linguaggio Verilog, il simulatore, i driver e la documentazione di progetto vengono distribuiti sotto licenza Apache 2.0.
La base del GPGPU è costituita da un ISA RISC-V standard, espanso con alcune istruzioni aggiuntive necessarie per supportare le funzionalità della GPU e la gestione dei flussi. In questo modo, le modifiche all'architettura del set di istruzioni RISC-V sono ridotte al minimo e si cerca di utilizzare, quando possibile, le istruzioni vettoriali esistenti. Un approccio simile è impiegato nel progetto RV64X, che sviluppa anch'esso una GPU open source basata su tecnologie RISC-V.

Caratteristiche principali di Vortex:
- Supporto per architetture a 32 e 64 bit del set di istruzioni RISC-V RV32IMF e RV64IMAFD.
- Numero configurabile di core, blocchi di lavoro (warps) e thread.
- Numero configurabile di ALU, FPU, LSU e SFU per ogni core.
- Larghezza di emissione del pipeline configurabile.
- Memoria condivisa opzionale e cache di livelli L1, L2 e L3.
- Supporto per la specifica OpenCL 1.2.
- Possibilità di implementazione su FPGA Altera Arria 10, Altera Stratix 10, Xilinx Alveo U50, U250, U280 e Xilinx Versal VCK5000.
- Istruzioni avanzate: «tex» per accelerare l'elaborazione delle texture, vx_rast per il controllo della rasterizzazione, vx_rop per la gestione dei frammenti, delle profondità e della trasparenza, vx_imadd per eseguire l'operazione «moltiplica e somma», vx_wspawn, vx_tmc e vx_bar per attivare i fronti delle istruzioni e i thread in essi (wavefront, insieme di thread, eseguiti in parallelo dal SIMD Engine), vx_split e vx_join.
- Il supporto per la rappresentazione intermedia degli shader SPIR-V è realizzato tramite traduzione in OpenCL.
- Per lo sviluppo di applicazioni è disponibile un toolkit che include varianti PoCL adattate per lavorare con Vortex (compilatore e runtime OpenCL), LLVM/Clang, GCC e Binutils.
- È supportata la simulazione del funzionamento del chip utilizzando Verilator (simulatore Verilog), RTLSIM (simulazione RTL) e SimX (simulazione software).
Per la grafica, si sta sviluppando il GPU Skybox open source basato sulla tecnologia Vortex, che supporta l'API grafica Vulkan. Il prototipo Skybox, realizzato su FPGA Altera Stratix 10 e dotato di 32 core (512 thread), ha raggiunto una performance di riempimento di 3,7 gigapixel al secondo (29,4 gigatransazioni al secondo) a una frequenza di 230 MHz. Si segnala che questo è il primo GPU open source con implementazione sia software che hardware che supporta Vulkan.
Tra le novità della versione Vortex 2.1:
- Aggiunta l'API spawn_taskgroups per l'avvio di kernel che utilizzano memoria locale e supportano l'impostazione di barriere di memoria.
- Proposto un nuovo estensione per la creazione di kernel binari relocabili.
- Aggiunti nelle API di gestione della memoria le chiamate vx_mem_reserve, vx_mem_access e vx_mem_address.
- Aggiunto un nuovo runtime API vx_check_occupancy.
- Nel driver per GPU è stata aggiunta un'opzione per verificare i test OpenCL su GPU locale.
- Aggiunti test OpenCL che utilizzano la memoria locale (psum, sgemm2, sgemm3).
- Aggiunte librerie libc e librt adattate specificamente per Vortex.
- Aggiunta la supporto per la fusione dei blocchi di memoria libera adiacenti (memory coalescing).
- È stata ottimizzata la microarchitettura.
- Aggiunto un nuovo script di compilazione che separa i file sorgenti dalla directory di compilazione.
Fonte: opennet.ru
