Pubblicata la versione del progetto Vortex 2.2, che sviluppa un GPGPU open-source basato sull'architettura del set di istruzioni RISC-V, progettato per eseguire calcoli paralleli utilizzando l'API OpenCL e il modello di esecuzione SIMT (Single Instruction, Multiple Threads). Il progetto può anche essere utilizzato per condurre ricerche nel campo della grafica 3D e per lo sviluppo di nuove architetture GPU. Gli schemi, le descrizioni dei moduli hardware in linguaggio Verilog, i simulatori, i driver e la documentazione progettuale associata sono distribuiti sotto licenza Apache 2.0.
La base del GPGPU è costituita dall'ISA RISC-V standard, ampliata con alcune istruzioni aggiuntive necessarie per supportare le funzionalità GPU e la gestione dei flussi. Le modifiche all'architettura del set di istruzioni RISC-V sono ridotte al minimo, utilizzando ove possibile le istruzioni vettoriali già esistenti. Tra le istruzioni aggiuntive si possono citare: «tex» per accelerare l'elaborazione delle texture, vx_rast per il controllo della rasterizzazione, vx_rop per l'elaborazione dei frammenti, della profondità e della trasparenza, vx_imadd per l'esecuzione dell'operazione «moltiplica e somma», vx_wspawn, vx_tmc e vx_bar per l'attivazione dei fronti delle istruzioni e dei flussi in essi (wavefront, un insieme di thread eseguiti in parallelo dal motore SIMD), vx_split e vx_join.

Il GPGPU in fase di sviluppo supporta le architetture del set di istruzioni RISC-V a 32 e 64 bit RV32IMF e RV64IMAFD, e può includere memorie condivise opzionali, cache di livello L1, L2 e L3, nonché un numero configurabile di core, blocchi di attività (warps) e flussi. Per ogni core è prevista la possibilità di attivare un numero configurabile di ALU, FPU, LSU e SFU. Per la creazione di prototipi possono essere utilizzati FPGA Altera Arria 10, Altera Stratix 10, Xilinx Alveo U50, U250, U280 e Xilinx Versal VCK5000. Per simulare il funzionamento del chip possono essere utilizzati Verilator (simulatore Verilog), RTLSIM (simulazione RTL) e SimX (simulazione software).
Per lo sviluppo delle applicazioni è fornito un set di strumenti che include varianti PoCL (compilatore e runtime OpenCL) adattate per lavorare con Vortex, LLVM/Clang, GCC e Binutils. Il progetto supporta la specifica OpenCL 1.2 e attraverso la traduzione in OpenCL è stata implementata la supporto della rappresentazione intermedia degli shader SPIR-V. Per la grafica sulle tecnologie Vortex è in fase di sviluppo un GPU Skybox open-source che supporta l'API grafico Vulkan. Il prototipo di Skybox, creato sulla base del FPGA Altera Stratix 10 e composto da 32 core (512 thread), ha permesso di raggiungere una prestazione di riempimento di 3.7 gigapixel al secondo (29.4 gigatransazioni al secondo) a una frequenza di 230 MHz.
Tra le novità della versione Vortex 2.2:
- Aggiunto l'API vx_spawn_taskgroups per avviare i core che supportano l'esecuzione segmentata di compiti 3D.
- Aggiunto il supporto per ZICOND, un'estensione dell'architettura del set di istruzioni RISC-V, che consente l'esecuzione condizionale delle operazioni senza ramificazione.
- Il compilatore OpenCL è stato convertito per una pianificazione dell'esecuzione a livello di singoli thread (thread-level, ogni thread esegue il proprio compito indipendentemente dagli altri), anziché a livello di gruppi di compiti (warp-level), come avveniva in precedenza.
- In OpenCL è stato aggiunto il supporto per la compilazione JIT e per i core a 64 bit.
- Implementato il supporto per il caricamento dinamico del runtime Vortex.
- Fornita nuova documentazione per la configurazione dei FPGA Xilinx.
- Includito il test di sintesi della logica utilizzando gli strumenti Yosys.
- Nelle operazioni gerarchiche di flush e in modalità write-back è stato implementato il supporto per la cache.
- Ottimizzata la velocità di verifica del scoreboard e il lavoro con gli operandi a livello di trasferimento dei registri (RTL, Register Transfer Level).
- Aggiunto il supporto per il simulatore di memoria DRAM Ramulator 2.0.
- Passaggio all'utilizzo delle nuove versioni di Verilator 5.0 (simulatore SystemVerilog) e LLVM 18.0, oltre all'aggiornamento degli strumenti basati su CentOS 7.9.
- Invece del sistema di integrazione continua Travis CI è stato utilizzato il servizio GitHub CI.
Fonte: opennet.ru
