Accelerazione Gpu

di Michele Braga

I processori grafici hanno portato nel corso degli anni benefici non solo al popolarissimo mondo dei videogiochi, ma soprattutto a quello delle applicazioni professionali che sono lo strumento fondamentale per creare i contenuti digitali che consumiamo ogni giorno e le applicazioni utilizzate dall’utente della strada. La programmabilità , la potenza di elaborazione e la disponibilità  di piattaforme di sviluppo dedicate hanno permesso ai settori che si appoggiano al Gpu Computing di compiere in pochissimo tempo un enorme balzo in avanti. Mai come in questo caso possiamo dire che “quando il tempo è denaro” vale la pena investire in soluzioni che permettono di massimizzare il ricavo dal tempo speso per terminare un lavoro.

In questa occasione focalizziamo la nostra attenzione sui benefici che è possibile ottenere nell’ambito della creazione di contenuti in computer grafica. Si tratta di una piccola parte dell’universo di applicazioni che è stato contaminato dalle potenzialità  offerte dai processori grafici come acceleratore di calcolo: le comunità  impegnate nella ricerca scientifica (fisica, geologia, biologia, medicina, sociologia e molte altre ancora), il settore dell’ingegneria (edile, aerospaziale, meccanica, idraulica, navale, dei materiali sono solo alcune), quello delle biotecnologie e così via, perché tecnicamente non vi sono limiti ai campi d’applicazione. La quantità , la qualità , la complessità  e i risultati dei progetti che traggono vantaggio dalle nuove tecnologie di calcolo sono così elevati che è oggettivamente impossibile fornire una fotografia d’insieme nello spazio di qualche pagina; per questo motivo abbiamo preferito un percorso che ci porterà  passo dopo passo a esplorare il fantastico mondo dove si riprogettano le applicazioni del passato e dove se ne inventano di nuove.

A differenza di quanto accade nel mondo dei videogiochi 3D, qui la scheda grafica è l’elemento centrale dal quale dipendono in modo diretto le prestazioni, nel campo professionale l’accelerazione fornita dal processore grafico assume un senso più ampio e complesso.

La prima voce da inserire nell’elenco degli aspetti caratteristici è che esistono soluzioni per ogni tipologia di lavoro e in alcuni casi si tratta di software proprietari sviluppati ad hoc per un compito specifico. Il secondo elemento, da non dimenticare o sottovalutare mai, è che la stabilità  e l’affidabilità  sono prerogative irrinunciabili; per questo motivo l’innovazione degli strumenti di progetto è un processo lento: per garantire la compatibilità  con impianti di produzione si preferisce evitare di toccare parti del codice o del sistema di produzione che funzionano.

Insomma, non c’è da stupirsi se questo mondo è spesso refrattario a rimpiazzare con leggerezza tecnologie consolidate nel corso di anni per migrare a soluzioni più performanti. Allo stesso modo non bisogna stupirsi se dopo un primo periodo di sperimentazione, una volta accertata l’affidabilità  e la stabilità  delle nuove soluzioni, lo stesso mondo professionale viri rapidamente direzione per sposare una soluzione capace di incrementare l’efficienza lavorativa di uno o più ordini di grandezza.

L’accelerazione Gpu

Per accelerazione attraverso la Gpu si intende, nel senso più generale, un processo (funzioni, porzioni di codice) scritto all’interno del software che permette all’applicazione madre di spostare parte dell’elaborazione necessaria alla risoluzione del processo dalla Cpu a una o più Gpu.

La quantità  di lavoro che è possibile demandare alla Gpu varia in base alla natura del processo perché alcuni algoritmi, sebbene facciano ricorso a operazioni ripetitive e parallelizzabili, possono comunque richiedere l’esecuzione di funzioni tradizionali e di una gestione della struttura dati che rimane a carico della Cpu.

Per sfruttare l’enorme potenziale di calcolo delle moderne Gpu, gli sviluppatori software hanno a disposizione diversi standard sui quali costruire le proprie applicazioni o parti di esse: proprietari come Nvidia Cuda e Microsoft DirectCompute, oppure di tipo aperto come OpenCL e OpenGL.

Poiché lo sviluppo del codice necessario a sfruttare la Gpu richiede tempo e ovviamente denaro, oggi assistiamo a una frammentazione della compatibilità  tra applicazioni e hardware. La tecnologia Cuda di Nvidia è riuscita nel corso degli anni ad attrarre un vasto pubblico di professionisti, scienziati e ricercatori che hanno non solo beneficiato delle potenzialità  di questa infrastruttura, ma  anche contribuito alla sua stessa crescita. Quella DirectCompute di Microsoft è ancora poco utilizzata in quanto lega lo sviluppatore a un solo sistema operativo, Windows, che permette di utilizzare le librerie DirectX 11. Per questo motivo il DirectCompute è poco appetibile per lo sviluppo di applicazioni professionali multi piattaforma, mentre può essere estremamente efficiente per quelle storicamente disponibili solo per Windows. Gli standard aperti hanno infine enormi potenzialità , ma anche alcuni difetti intrinseci; trattandosi di tecnologie non legate a un singolo produttore o investitore è necessario attendere che si raggiunga una massa critica di sviluppatori software prima che l’adozione di tale tecnologia possa diventare di utilizzo comune. OpenCL ne è un esempio: a differenza di Cuda nel quale Nvidia ha investito ingenti risorse sia economiche che umane, OpenCL non ha alle spalle una guida unica capace di indirizzarne la crescita e l’adozione in tempi rapidi.

La nostra prova

L’accelerazione offerta dalla Gpu rende molto più rapidi sia lo sviluppo del progetto sia le regolazioni dei filtri. Questo aiuto si traduce in pratica in una reattività  immediata (o quasi) agli spostamenti e alle rotazioni comandate con il mouse, alla visualizzazione in tempo reale degli effetti dei filtri e delle loro regolazioni. Il beneficio appare subito evidente se solo si pensa a quante centinaia (se non migliaia) di volte si sposta il punto di vista sul progetto nell’arco di una giornata lavorativa. Lo sfruttamento della Gpu consente poi di ridurre in maniera considerevole i tempi di rendering. Anche in questo caso si tratta di un miglioramento non da poco, se consideriamo che un rendering di livello professionale può durare diverse ore e può capitare che sia necessario rifarlo per correggere qualche errore.

Abbiamo catalogato i possibili scenari nella creazione di contenuti multimediali e individuato le applicazioni professionali riconosciute come standard per la piattaforma Microsoft Windows e capaci al tempo stesso di supportare le tecnologie che ci siamo proposti di analizzare. Questo primo passo è stato abbastanza semplice, mentre più complesso è stato decifrare come interviene l’accelerazione della Gpu nei diversi applicativi e riprodurre un flusso di lavoro adatto a misurare le prestazioni in ambito reale.

Per le nostre prove abbiamo preso in considerazione diversi software capaci di sfruttare la potenza di calcolo delle Gpu e, in questa occasione, abbiamo esplorato sostanzialmente tre settori: fotoritocco, montaggio video e rendering 3D. Nel primo caso abbiamo usato Adobe Photoshop CS6, che grazie alla Gpu mostra rotazioni, panoramiche e zoom perfettamente fluidi e in tempo reale, anche quando l’immagine di lavoro è molto grande. Sono inoltre disponibili alcuni filtri accelerati. Per il video editing abbiamo usato Adobe Premiere Pro CS6, che offre un’anteprima in tempo reale anche con diversi video full Hd e numerosi filtri accelerati. Per la modellazione 3D abbiamo esaminato Autodesk 3ds Max 2013 con i motori di rendering QuickSilver e iray, Blender con Cycles e i motori stand alone LuxRender, Refractive Software Octane Render e Bunkspeed Shot. Tutti questi motori usano le Gpu presenti nel sistema per ridurre i tempi di calcolo, inoltre 3ds Max sfrutta il processore grafico anche per l’anteprima della scena 3D.

I risultati ottenuti

Da una prima occhiata ai risultati che abbiamo registrato con i nostri test appaiono evidenti le differenze tra i tempi con la sola Cpu e quelli con la Gpu al lavoro. La differenza più eclatante è sicuramente quella ottenuta con Premiere Pro – da poco meno di 59 minuti si precipita a un minuto e 38 secondi – ma anche il filtro Sfocatura di Photoshop e i motori di rendering iray, Cycles e Bunkspeed Shot traggono grandi benefici dal processore grafico. In questi ultimi tre casi l’intervento della Gpu è fondamentale perché è necessario far compiere al computer migliaia di cicli (anche diverse ore con la sola Cpu) per produrre immagini con grana ridotta. Il costo di acquisto di una scheda grafica o di una di accelerazione è quindi recuperabile in breve tempo, grazie ai rendering molto più veloci. Anche LuxRender e il filtro Fluidifica di Photoshop hanno un bel guadagno, mentre la deformazione Altera sembra non sfruttare la potenza del processore grafico. In sintesi, nella maggior parte dei casi analizzati la differenza tra i tempi con e senza Gpu è lampante, tale da rendere molto più veloce il lavoro del professionista che spesso deve ripetere le operazioni per eliminare gli errori e affinare il risultato finale.

Per quanto riguarda il rendering 3D, facciamo notare che ha poco senso confrontare i tempi tra i diversi motori. È vero che il progetto è lo stesso, ma l’impiego di materiali, di luci e di algoritmi propri del software rendono impossibile un raffronto diretto. Segnaliamo inoltre che non abbiamo compiuto alcuna ottimizzazione dei motori di rendering ma ci siamo limitati a usarli con i loro parametri di default, assicurandoci unicamente che usassero la Gpu. Lo scopo di queste prove non era di spremere al massimo i software, ma di vedere quanto miglioravano come velocità  cambiando l’hardware per i calcoli.

L’analisi più approfondita dei risultati rivela che oggi la GeForce GTX 580 è ancora il modello più prestante nella maggior parte dei casi: non solo è migliore della sorella minore GTX 560, ma anche della nuova arrivata GTX 680. Quest’ultimo paragone però è probabilmente ingiusto, poiché i programmi usati non sono ancora stati ottimizzati per la nuova architettura Kepler. Quando l’aggiornamento sarà  compiuto è plausibile che la nuova GTX 680 sarà  più veloce delle altre schede GeForce. Anche il raffronto tra i prodotti Nvidia e Amd sembra impari: in molti casi le Gpu Amd non hanno funzionato perché incompatibili con Cuda e soltanto con i filtri Fluidifica e Dipinto a olio di Photoshop hanno spuntato tempi migliori. In generale, quindi, una scheda Nvidia sembra per ora e con queste applicazioni un acquisto migliore di una Amd, soprattutto perché Cuda è più maturo e più diffuso nel settore dell’accelerazione Gpu rispetto alle librerie OpenCL.

Un’ultima considerazione sulla scheda grafica (o di accelerazione): non basta che la Gpu sia potente e veloce, ma serve anche un’adeguata dotazione di memoria. Come vedremo meglio più avanti, in Premiere Pro e nei motori di rendering 3D è necessario che l’intera scena (il singolo frame nel caso di Premiere) sia contenuta all’interno della memoria della scheda, in modo che sia immediatamente accessibile alla Gpu. Se i dati sono troppi per stare tutti nella memoria della scheda, la Gpu viene esclusa dai calcoli e questi ricadono tutti sulla sola Cpu. (…)

Estratto dell’articolo pubblicato sul numero 256 luglio 2012

Nessun Articolo da visualizzare