Nel vasto panorama dell’hardware informatico, esistono alcune iniziative che si distinguono per la loro originalità e innovazione. Una di queste è FuryGPU, una GPU implementata su chip FPGA (Field-Programmable Gate Array) di AMD (che ha acquisito la tecnologia di Xilinx).
Nello specifico, FuryGPU è una GPU implementata su FPGA Zynq UltraScale+, con il chip disposto su un circuito stampato personalizzato e collegata al computer mediante interfaccia PCIe. L’obiettivo del promotore dell’iniziativa, è quello di assicurare prestazioni hardware paragonabili a una scheda grafica di fascia alta dei primi anni ’90, consentendo di eseguire giochi di quel periodo a risoluzioni e fps (frame per secondo) elevati.
Le principali caratteristiche di FuryGPU: perché è un’iniziativa importante
Che senso ha, oggi, eseguire con prestazioni di livello videogiochi che risalgono a trent’anni fa? L’autore del progetto, Dylan Barrie, premette che il suo lavoro (è comunque il risultato di 4 anni di impegno…) è da considerarsi come una sorta di “giocattolo”. Tuttavia, essendo la piattaforma aperta e accessibile da tutti, può essere facilmente migliorata e ottimizzata.
Implementare GPU su chip FPGA potrebbe aprire a nuove possibilità per gli appassionati e gli sviluppatori software. Con il prezzo relativamente accessibile e l’interesse crescente intorno a questa tecnologia, l’idea alla base di FuryGPU potrebbe ben presto diventare un punto di partenza nei laboratori di mezzo mondo.
Una GPU “speciale” come FuryGPU, infatti, può essere ad esempio sfruttata anche in ambito accademico e professionale per applicazioni di simulazione, visualizzazione e calcolo parallelo.
Barrie descrive FuryGPU come il classico tiled rasterizer: è in grado di convertire immagini vettoriali, che consistono in riferimenti a punti espressi sotto forma di coordinate con linee che li interconnettono, in immagini rasterizzate, rappresentate come un insieme di punti di diverso colore.
Il tile rendering, supportato da FuryGPU, consiste nel suddividere lo schermo in piccole tessere per poi elaborare ciascuna di esse in parallelo, così da ottenere un rendering più rapido. L’elaborazione a pipeline, in cui ogni fase del processo grafico – dall’interpretazione dei comandi alla rasterizzazione – avviene in parallelo, garantisce un elevato throughput.
Le Fixed Function Units di FuryGPU sono particolarmente degne di nota, in quanto sono unità hardware dedicate per ciascun processo, che consentono un’elaborazione efficiente.
Prestazioni di FuryGPU e prospettive future
FuryGPU assomiglia molto a una tipica scheda grafica per PC di circa 20 anni fa, modernizzata dotandola di uscite DisplayPort e HDMI. Il progetto, tuttavia, non è soltanto valido dal punto di vista hardware ma – come spiega Barrie – lo sforzo più complesso è stato quello di creazione dei driver per Windows.
Barrie ha iniziato a realizzare il suo sogno di costruire una GPU da zero utilizzando dapprima una scheda di sviluppo Arty Z7 con FPGA. Con il debutto dei moduli di sistema Xilinx Kria (SoM, System-on-Modules), che combinano FPGA Zynq UltraScale+ estremamente economici con un numero abbondante di unità DSP e una quantità enorme di LUT e FF.
I System-on-Modules (SoM) sono dispositivi integrati che includono tutti i componenti necessari per il funzionamento di un sistema embedded, come CPU, memoria, unità di I/O,.. Sono progettati per semplificare lo sviluppo di sistemi inetgrati, riducendo il tempo e i costi di progettazione.
Le unità di elaborazione digitale del segnale (DSP) sono componenti hardware specializzati progettati per eseguire operazioni matematiche complesse su segnali digitali in tempo reale. Sono spesso utilizzate nelle applicazioni di elaborazione dei segnali. Le Look-Up Tables (LUT) e i Flip-Flops (FF) sono componenti fondamentali all’interno di un chip FPGA. Le prime sono utilizzate per implementare funzioni logiche, mentre i FF mantengono lo stato di un circuito.
Per passare dalla prima scheda da semplice “maker” al design nettamente più evolute della FuryGPU PCIe, Barrie ha usato SystemVerilog e KiCAD EDA. Tutt’altro che banale progettare lo schema per la scheda FuryGPU con 4 corsie PCIe così come la vediamo oggi.
Ci gira Quake?
La piattaforma sviluppata da Barrie, grazie ai driver per Windows e alle API custom per comunicare con la GPU, consentono di utilizzare lo storico videogioco Quake a 60 fps. Lo si vede in questo video pubblicato su YouTube dove dapprima l’autore indica al sistema operativo la scheda da usare, quindi lancia la versione ottimizzata di Quake avviando il corrispondente eseguibile.
Nel video, in realtà, non si va oltre i 44 fps ma quella pubblicazione risale ormai a un mese fa e Barrie stesso conferma di aver individuati e rimosso alcuni colli di bottiglia.
FuryGPU: un progetto open source
L’autore di FuryGPU conferma che il suo progetto sarà disponibile sotto forma di GPU-FPGA completamente personalizzabile e open source. Barrie ha infatti intenzione di condividere pubblicamente l’intero stack: schemi/layout del circuito elettronico, il linguaggio usato per descrivere l’hardware (HDL), i driver WDDM per Windows, le API usate a runtime, la versione di Quake modificata per usare tali API. “Lo farò, ma ci sono ancora alcune questioni legali da gestire“, ha puntualizzato.
Per chi volesse approfondire, sul sito Web di FuryGPU è presente un articolo focalizzato sulle unità texture della GPU: la sua lettura conduce in un viaggio nell’esplorazione dell’architettura a basso livello.