Successivo

Magazine

Accelerazione GPU: il software

Michele Braga | 4 Dicembre 2014

Preview

Per lavorare un progetto di grafica 2D, 3D o un montaggio video in modo confortevole ed efficiente è di fondamentale […]

ACCELERAZIONE-GPU

Per lavorare un progetto di grafica 2D, 3D o un montaggio video in modo confortevole ed efficiente è di fondamentale importanza, tanto per il professionista come per l’appassionato evoluto, poter vedere in tempo reale – o quasi – l’anteprima del proprio lavoro. Questo aspetto ha un valore di particolare importanza non solo in termini del tempo risparmiato in fase di produzione, ma anche dal punto di vista dell’esperienza di lavoro. Oggi, infatti, siamo abituati a dispositivi come smartphone e tablet che reagiscono in modo pressoché istantaneo ai nostri comandi. Visualizzare in tempo reale una scena 3D composta da milioni di poligoni, un’immagine di parecchi megapixel trasformata con un filtro o un montaggio video con diversi filmati Full Hd – se non addirittura Ultra Hd – non è affatto uno scherzo: sono necessari componenti dalle prestazioni elevate e software capaci di sfruttare le potenzialità  dell’accelerazione in hardware.

di Michele Braga

ICON_EDICOLALa Cpu ha dimostrato da tempo che da sola non è all’altezza del compito ed è anche per questo che sono state sviluppate le Gpu, ovvero processori grafici ottimizzati sia per le elaborazioni grafiche sia per quelle di calcolo generico in parallelo; capaci di “macinare” grandi blocchi di dati e supportate da memoria dedicata ad alte prestazioni, le schede grafiche di fascia alta sono oggi un ingrediente irrinunciabile per una workstation destinata a progetti di grafica, elaborazione video o calcolo scientifico. Ma come abbiamo accennato poco sopra, anche la migliore Gpu sarebbe inutile senza applicativi adeguati, sviluppati ad hoc o comunque dotati di routine di accelerazione compilate per sfruttare in modo efficiente le diverse caratteristiche delle Cpu e delle Gpu, con accesso diretto alle unità  di calcolo.

Oggi esistono diversi standard di librerie che permettono di sfruttare l’hardware delle Gpu: OpenGL, DirectX, OpenCL, Cuda e Mantle. Le prime librerie grafiche sono state quelle OpenGL, sviluppate da Silicon Graphics nel 1992 per il mondo professionale, contenenti routine di accelerazione molto veloci, ma basate su algoritmi semplificati. Queste librerie sono adatte alla generazione delle anteprime a schermo, ma non dei rendering finali di immagini e video. Nel 1995 sono hanno visto la luce le routine DirectX di Microsoft, simili per molti aspetti a OpenGL, ma orientate più al mondo consumer e pensate – in origine – per consentire lo sviluppo di videogiochi capaci di sfruttare le nuove funzioni di accelerazione hardware dei processori grafici, in rapida evoluzione in quegli anni. Per la loro natura di Api di alto livello, le DirectX hanno il grande vantaggio di offrire supporto a un ampio parco software, ma hanno anche limiti molti pesanti: non offrono ancora un accesso diretto all’hardware proprio per garantire la compatibilità  tra hardware e software, sono legate a doppia mandata ai sistemi operativi Microsoft e, come le OpenGL, non sono adatte al rendering finale di immagini o video di qualità  professionale. Nel 2007, l’introduzione della tecnologia Cuda da parte di Nvidia ha rappresentato una svolta importante nel settore della computer grafica e del calcolo scientifico.

Le librerie Cuda hanno offerto ai programmatori la possibilità  di sfruttare l’architettura delle Gpu in modo diretto; attraverso algoritmi creati ad hoc, o comunque ottimizzati, è stato possibile ottenere velocità  di elaborazione con fattori di moltiplicazione fino a tre ordini di grandezza. La versatilità  di Cuda, di fatto si tratta di un linguaggio di programmazione vero e proprio per le Gpu, ha permesso di scrivere algoritmi adatti sia per accelerare la creazione e visualizzazione delle anteprime grafiche sia per la generazione dei rendering finali di immagini e video. Non c’è da stupirsi che in mancanza di soluzioni alternative, molti dei software professionali siano stati integrati nel tempo per fornire supporto a questa tecnologia che però è di tipo proprietario e indissolubilmente legata (e limitata) alle Gpu Nvidia. Per offrire un ambiente di accelerazione aperto anche ai processori grafici di altri produttori, Apple, con la collaborazione di Amd, Ibm, Intel e della stessa Nvidia, ha promosso lo sviluppo delle librerie OpenCL che sono state rese pubbliche nel 2009.

OpenCL è un ambiente di sviluppo che permette di scrivere algoritmi per sistemi di calcolo eterogenei, consente cioè di sfruttare sia la potenza di calcolo della Gpu sia della Cpu. Da metà  di quest’anno è disponibile inoltre l’Api Mantle, sviluppata da Amd per permettere l’accesso diretto alle funzioni del proprio hardware grafico e indirizzata anche alla programmazione delle architetture eterogenee delle Apu prodotte dalla stessa azienda. Tuttavia le Api Mantle sono state pensate per il mondo dei videogiochi e Amd non intende – almeno per il momento – supportare un utilizzo di questa tecnologia in ambito professionale. Dal punto di vista di chi sviluppa software professionale, Cuda offre un insieme di funzioni più completo ed omogeneo per la programmazione, per il testing e il debugging; inoltre l’ambiente di sviluppo Cuda può contare oggi su un vasto set di funzioni già  pronte all’uso. OpenCL supporta praticamente ogni tipo di Gpu e Cpu, è uno standard completamente aperto e da molte parti si auspica che possa diventare lo standard per il futuro; di contro, poiché è sviluppato da consorzio di società , la sua evoluzione non è organica e ben strutturata come nel caso di Cuda. In definitiva la tecnologia Cuda sembra essere al momento una scelta migliore per gli sviluppatori quando è importante ottenere il massimo in fatto di prestazioni, anche se restringe il campo d’azione alle sole Gpu Nvidia. (…)

Estratto dell’articolo pubblicato su PC Professionale di dicembre 2014