Hardware Upgrade - il sito italiano sulla tecnologia - www.hwupgrade.it
« Torna all'articolo  -  Stampa
NVIDIA Tesla: GPU G80 per elaborazioni GPGPU
Paolo Corsini - 20 Giugno 2007
"Tesla è la nuova famiglia di prodotti NVIDIA specificamente sviluppati per elaborazioni GPGPU, dove il chip video viene utilizzato per eseguire calcoli tipicamente di competenza della CPU, ma molto più velocemente di quest'ultima. Scopriamo quali siano le caratteristiche di questi prodotti, e come una GPU possa essere utilizzata per calcoli paralleli"
Pagina 1 - Le elaborazioni GPGPU

GPGPU: questa sigla, acronimo di General Purpose Graphics Processing Unit, da un anno a questa parte caratterizza molte discussioni legate alle schede video, soprattutto nel momento in cui vengono presentate nuove generazioni di architetture video. GPGPU è, in estrema sintesi, quella combinazione tra componente hardware e software che permette di utilizzare una tradizionale GPU per elaborazioni che sono estremamente esigenti in termini di potenza di elaborazione, e che non trovano in tradizionali architetture di CPU disponibili in commercio una capacità di elaborazione sufficiente.

Si tratta, per loro natura, di elaborazioni parallele, in grado quindi di beneficiare grandemente dell'architettura che i produttori hanno implementato all'interno delle GPU più recenti. A questo si aggiunga la loro estrema programmabilità: la grafica 3D videoludica si è enormemente trasformata, passando da un insieme di istruzioni fisse e predefinite ad un approccio per il quale le GPU vengono completamente programmate utilizzando gli shader e quindi aprendosi virtualmente a qualsiasi tipo di applicazione o codice.

E' evidente che le GPU non siano la soluzione per qualsiasi scenario applicativo, in quanto alcune tipologie di applicazioni beneficiano meglio di altre: del resto se così fosse le GPU sarebbero adottate massicciamente in qualsiasi ambito, portando ad un'esclusione completa delle GPU per elaborazioni. All'atto pratico le GPU sono particolarmente adatte ad elaborazioni fortemente parallelizzate, scenario che può essere tipicamente riscontrato in elaborazioni di immagini mediche, analisi di pattern generici, ricerca di giacimenti petroliferi e di fonti naturali, analisi di modelli di rischio finanziari. Ben differenti le esigenze di scenari applicativi quali i database, la compressione dei dati, algoritmi ricorsivi e in generale elaborazioni nelle quali è richiesta una elevata logica di controllo del processo di calcolo: in questi casi una tradizionale CPU è l'architettura di riferimento e la GPU, per sua natura, non potrebbe permettere di ottenere risultati prestazionali interessanti.

Un paragone che può ben spiegare la dipendenza tra le differenti tipologie di applicazioni e lo strumento di calcolo associato è legato agli aerei: una CPU è simile ad un aereo caccia, in grado quindi di eseguire alcune elaborazioni molto velocemente ma trasportando poche persone e/o materiale. Una GPU, viceversa, è equiparabile ad un aereo di linea, più lento di un caccia ma in grado di trasportare un elevato numero di passeggeri con lo stesso viaggio: in funzione del tipo di risultato al quale si mira uno o l'altro strumento sono più efficienti, e lo stesso vale per CPU e GPU.

Quali sono i benefici di utilizzare una GPU per elaborazioni che non siano legate alla grafica 3D? La risposta è suddivisibile in differenti parti:

  • vantaggi prestazionali: con applicazioni che sono parallele nella loro natura è possibile, attraverso l'ottimizzazione del software, ottenere incrementi prestazionali per certi versi impensabili, con prestazioni sino a 100 volte superiori. L'ordine di grandezza, quindi, non è quindi quello dell'incremento di alcune decine di punti percentuali, o di un raddoppio della potenza elaborativa, ma di scenari per i quali se una elaborazione con una CPU richiede una unità di tempo, nella stessa unità di tempo è possibile eseguire 100 di queste elaborazioni con una GPU.
  • costo d'acquisto: i prezzi delle GPU sono allineati a quelli dei processori; è sempre vero che per utilizzare una GPU per elaborazioni di calcolo parallelo è richiesto comunque un processore, ma considerando il costo di una GPU top di gamma rispetto all'insieme di processori in parallelo che permettono di ottenere la stessa potenza elaborativa con una specifica applicazione il beneficio economico dell'utilizzo di una GPU è evidente.
  • tasso di aggiornamento tecnologico: i produttori sviluppano nuove GPU con un tasso di aggiornamento ben più rapido di quanto non avvenga nel mercato dei processori. Se per le CPU si possono assistere ad incrementi delle frequenze di clock con una periodicità predefinita, l'architettura di base tende a restare immutata per periodi di tempo di 2 anni come minimo; ogni 12-18 mesi i produttori di GPU rilasciano una nuova architettura top di gamma e un suo refresh, con prestazioni più elevate, seguito da una nuova architettura che rivoluziona i livelli prestazionali della precedente.
  • consumo vs prestazioni: se è assodato che le più recenti GPU top di gamma abbiano raggiunto livelli di consumo sensibilmente superiori a quelli dei processori, anche con architettura quad core, la potenza espressa per Watt dalle GPU nell'esecuzione di applicazioni GPGPU è estremamente più elevata rispetto a quanto richiesto, a parità di risultato elaborativo, da una tradizionale architettura di processore. In un periodo nel quale i consumi complessivi, rapportati alla potenza elaborativa, sono un importante elemento di valutazione di un'architettura è evidente come con elaborazioni parallele le GPU riescano ad ottenere il miglior compromesso.

titolo.jpg (45486 bytes)

Quello delle elaborazioni GPGPU è un mercato che si sta sviluppando in questi anni, e che può rappresentare un'importante opportunità sia commerciale che di sviluppo tecnologico per i produttori di GPU; non deve quindi sorprendere vedere come anche Intel abbia recentemente mosso i primi passi in questo settore, anticipando alcune informazioni preliminari sulla propria architettura nota con il nome di Larrabee e destinata proprio a questo ambito di utilizzo. Sin dallo scorso anno ATI ha immesso sul mercato una serie di schede video, basate su architettura Radeon X1950, specificamente sviluppate per applicazioni GPGPU: parliamo dei prodotti Stream Processor, attualmente raccolti sotto il marchio AMD a seguito dell'acquisizione di ATI.

Quest'oggi NVIDIA presenta il proprio nuovo marchio, Tesla, a indicare una nuova compelta famiglia di soluzioni per il calcolo parallelo, incentrate sull'utilizzo di GPU completamente programmabili. Cuore di questa iniziativa è, come facile immaginare, l'architettura G80, utilizzata sin d'ora da NVIDIA sia per le soluzioni desktop della serie GeForce 8800 che per quelle professionali Quadro FX 4600 e Quadro FX 5600. Alla base del progetto G80 troviamo la volontà di utilizzare la stessa architettura video per differenti tipologie di implementazioni, delle quali quindi i prodotti Tesla rappresentano una delle incarnazioni.

Vediamo ora in dettaglio come sia composto l'hardware delle soluzioni Tesla, come vedremo non necessariamente riconducibile solo a quello di una tradizionale scheda video, per poi passare all'analisi di CUDA, Compute Unified Device Architecture, il pacchetto con il quale è possibile programmare le GPU NVIDIA per l'esecuzione di calcolo parallelo non grafico.

Pagina 2 - La famiglia di soluzioni Tesla: Deskside

Pensando alle differenti tipologie di sistemi di calcolo esistenti in commercio, oltre alle risorse di budget che ogni singolo utilizzatore può destinare ad un sistema di puro calcolo parallelo, NVIDIA ha implementato la propria tecnologia G80 in 3 distinte famiglie di prodotti che rientrano tutti sotto il marchio Tesla. Il primo sistema, qui di seguito fotografato, è il GPU Deskside: si tratta di una soluzione esterna da interfacciare con una workstation grafica, al cui interno trovano posto due schede video Tesla C870 collegate tra di loro via tecnologia SLI. NVIDIA indica per questo sistema una potenza massima di 550 Watt, con una capacità di elaborazione che può raggiungere teoricamente 1 TeraFLOPs.

deskside_1_s.jpg (33630 bytes)

deskside_3_s.jpg (46893 bytes)

deskside_2_s.jpg (43244 bytes)

Si nota chiatamente dalle immagini come lo chassis utilizzato sia identico a quello delle soluzioni Quadro Plex, sistemi esterni che integrano al proprio interno due schede video NVIDIA della serie Quadro collegate tra di loro via tecnologia SLI e utilizzate quale risorsa di elaborazione grafica esterna per una workstation grafica. La connessione avviene attraverso interfaccia PCI Express 16x, pertanto deve essere disponibile sulla workstation di controllo almeno uno Slot di questo tipo per poter pilotare il dispositivo correttamente. Il prezzo ufficiale per un sistema Tesla C870, questo il nome commerciale del Tesla Deskside, è stato fissato in 7.500 dollari USA.

Nella parte posteriore si notano vari componenti: al centro e sulla destra troviamo le due schede Tesla C870, come segnalato collegate in parallelo attraverso bridge SLI, mentre sulla sinistra è presente una scheda NVIDIA Quadro G-Sync board, richiesta proprio per la sincronizzazione delle due GPU dedicate al calcolo parallelo. Vediamo ora quali siano i componenti utilizzati nelle schede Tesla C870, alla base di tutte le 3 differenti tipologie di prodotti Tesla.

Pagina 3 - Tesla C870: la scheda per il GPGPU

vga_2_s.jpg (74783 bytes)

La scheda video Tesla C870 è di fatto l'elemento base di tutte le soluzioni Tesla; esteriormente molto simile ad una scheda video delle serie GeForce 8800 GTX o Ultra, si differenzia da queste ultime per la completa assenza di connettori di output video. Del resto, trattandosi di una soluzione hardware specificamente dedicata all'elaborazione parallela non avrebbe molto senso integrare una connessione ad un display, in quanto la GPU in essa montata non è tipicamente acquistata dall'utente per elaborazioni grafiche tradizionali.

vga_3_s.jpg (88024 bytes)

La scheda riprende il design delle soluzioni top di gamma GeForce 8800 GTX e Ultra, come chiaramente deducibile sia osservando il sistema di raffreddamento a turbina che i due connettori di alimentazione PCI Express a 6 pin posizionati nella parte posteriore del PCB. Il consumo massimo dichiarato da NVIDIA pe queste schede è pari a 170 Watt, allineato quindi alle soluzioni desktop; ben differente invece il prezzo, pari a 1.499 dollari USA e quindi sensibilmente superiore sia alle schede GTX che a quelle Ultra: del resto tali architetture sono destinate a particolari tipologie di utilizzi, per i quali il fattore costo è decisamente meno vincolante rispetto a quello di una soluzione desktop.

vga_4_s.jpg (54946 bytes)

vga_5_s.jpg (45684 bytes)

Nella parte posteriore della scheda NVIDIA ha fissato una slitta, necessaria per fissare la scheda all'interno dello chassis Tesla D870 o in quello di workstation grafiche; in questo caso NVIDIA prevede la presenza in un sistema di una sola scheda video, anche se la presenza di un connettore SLI lascia spazio a configurazioni basate su questa tecnologia. Segnaliamo come NVIDIA abbia implementato, su queste schede, un solo connettore SLI al posto dei due presenti sui PCB delle soluzioni GeForce 8800 GTX e GeForce 8800 Ultra.

vga_6_s.jpg (34642 bytes)

vga_7_s.jpg (49096 bytes)

Il cuore della scheda Tesla C870 è rappresentato dalla GPU della famiglia G80, per la quale il produttore non ha dichiarato la frequenza di funzionamento: possiamo dedurre che siano stati integrati 128 stream processors, con una frequenza di funzionamento stimabile attorno ai 600 MHz per la GPU, mentre sono stati confermati i 1.500 MHz di clock degli stream processors. NVIDIA indica per questa soluzione una potenza di elaborazione massima pari a 518 GigaFLOPs. La memoria video integrata on board è di tipo GDDR3, con bus da 384bit di ampiezza e quantitativo di 1,5 Gbytes: è questo un raddoppio nella dotazione di memoria video rispetto a quanto integrato nelle soluzioni desktop top di gamma.

Nella maggior parte degli scenari di utilizzo le soluzioni Tesla C870 rappresenteranno, per caratteristiche tecniche e per costo, le soluzioni di riferimento per gli utenti interessati ad effettuare elaborazioni di calcolo parallelo: il prezzo, benché elevato per una scheda singola, è sicuramente abbordabile per il professionista che vuole potenziale la propria workstation mentre la compatibilità è di fatto assicurata in tutti quei sistemi che possono utilizzare una scheda video GeForce 8800 Ultra al proprio interno.

Non è tuttavia questo il prodotto della famiglia Tesla in assoluto più interessante: NVIDIA ha infatti pensato anche a chi necessita di notevoli risorse di calcolo parallelo con il modello Tesla S870, dove la lettera S rimanda alla parola Server.

Pagina 4 - Tesla S870: 4 GPU in un Rack a 1 unità

server_1_s.jpg (44084 bytes)

La ricerca di una superiore potenza elaborativa è la chiave di lettura di tutte le soluzioni GPGPU, che mirano proprio ad utilizzare le GPU per le elaborazioni così da ottenere più elevata capacità computazionale. Non deve quindi sorprendere vedere come NVIDIA, al debutto della serie Tesla, abbia pensando anche a sistemi di calcolo parallelo che potessero essere facilmente inseriti all'interno di un datacenter, superando le limitazioni proprie degli chassis delle workstation che non possono essere montati in Rack. Da questo è nato il modello Tesla S870, primo di una serie di soluzioni server GPGPU che NVIDIA presenterà nei prossimi mesi.

server_2_s.jpg (54643 bytes)

server_3_s.jpg (59519 bytes)

server_4_s.jpg (82871 bytes)

All'interno troviamo 4 schede Tesla C870, collegate tra di loro a coppia via tecnologia SLI e interfacciate all'esterno attraverso connessione PCI Express. La conseguenza diretta di tutto questo è la necessità di utilizzare due PC esterni per gestire la logica di controllo di questo sistema, a ciascuno dei quali viene collegata una coppia di GPU a loro volta collegate tra di loro via SLI. Per quest'ultima tecnologia manca un bridge tradizionale in quanto la connessione avviene attraverso bus PCI Express, con un bridge montato sul PCB che gestisce i flussi provenienti da ciascuna GPU: è questo un approccio molto simile a quanto adottato sulle schede GeForce 7900 GX2 e GeForce 7950 GX2, prime schede video desktop su singola connessione PCI Express 16x ad essere dotate di due GPU collegate tra di loro.

server_5_s.jpg (62857 bytes)

Nella parte posteriore dello chassis rack spiccano le due connessioni PCI Express 2.0, ciascuna delle quali gestisce una coppia di GPU: il dissipatore di calore nero montato sul PCB verticale cela il bridge PCI Express, necessario per poter gestire il flusso dei dati proveniente dalle due GPU.

server_6_s.jpg (65858 bytes)

Ogni scheda video è raffreddata passivamente da un voluminoso dissipatore di calore, sviluppato in modo tale che l'aria soffiata dalle ventole frontali possa attraversarlo; queste ultime sono in numero di 18 montate frontalmente, accoppiate a sandwitch così da aumentare la portata complessiva senza dover per questo incrementare le dimensioni dello chassis in altezza. Altre ventole sono state posizionate sia nell'alimentatore del sistema che in prossimità di aree dello chassis che possono non essere direttamente raggiunte dal flusso d'aria di raffreddamento. Segnaliamo come in questo sistema sia stato utilizzato per ogni scheda video un solo connettore di alimentazione PCI Express a 6 pin, segno di come la circuiteria di alimentazione sia via Slot PCI Express 16x che via alimentatore sia stata opportunamente calibrata alle specifiche esigenze del sistema.

Al pari della soluzione Tesla D870, anche il sistema Rack utilizza schede Tesla C870 con 1,5 Gbytes di memoria video ciascuna: in totale un sistema di questo tipo vanta una potenza di elaborazione di 2 TeraFLOPs, con un consumo tipico indicato in 550 Watt e massimo, a pieno carico e in condizioni limite, che può raggiungere gli 800 Watt. NVIDIA prevede, in un secondo tempo, di presentare una versione "power optimized" del sistema Tesla S870: in questo caso il consumo massimo sarà pari a 550 Watt, così da rendere tale soluzione più indicata in quelle server farm, o in quegli scenari di implementazione, nei quali il consumo di esercizio rappresenti una discriminante critica.

schema_server.jpg (34232 bytes)

Lo schema fornito da NVIDIA mostra chiaramente come un sistema Tesla GPU Server S870 richieda necessariamente la presenza di due altri sistemi ad esso affiancato, ciascuno dei quali sia collegato ad una delle due coppie di schede Tesla C870 montate nel sistema. Il grafico segnala inoltre una configurazione attualmente non presente, ma che nei prossimi mesi NVIDIA potrebbe adottare: parliamo di un sistema GPU Server con 8 GPU integrate, divise in due blocchi da 4 GPU ciascuno dei quali è collegato al sistema attraverso connessione PCI Express 2.0 esterna. Una soluzione di questo tipo riprende per analogia quella dei sistemi Quad SLI con schede desktop, pertanto riteniamo che potrà venir presentata da NVIDIA nel momento in cui un sistema con GPU G80 e architettura Quad SLI per sistemi desktop si affaccerà all'orizzonte, o quantomeno quando una scheda video PCI Express singola con due GPU G80, una presunta GeForce 8850 GX2 se questo sarà il nome scelto, verrà finalmente immessa in commercio dal produttore americano. NVIDIA, del resto, ha ufficialmente confermato di voler presentare un sistema Tesla GPU Server con 8 GPU in uno chassis rack a 1 unità, senza tuttavia specificare il periodo di debutto.

Da ultimo, un cenno sul prezzo: NVIDIA propone questa soluzione a 12.000 dollari USA, oltre ai quali è ovviamente necessario aggiungere il costo dei due sistemi di controllo che tipicamente dovranno essere di tipo Rack a 1 unità così da meglio integrarsi nella server farm con lo chassis del Tesla GPU Server S870.

Pagina 5 - Perché usare le GPU per calcoli general purpose?

Gli appassionati di grafica 3D hanno potuto osservare, in questi ultimi anni, come le architetture video abbiano subito un processo di continua trasformazione che ha portato verso da una parte un realismo sempre più elevato delle scene 3D, dall'altra ad un aumento della complessità architetturale e del numero di transistor integrati all'interno delle GPU. La potenza elaborativa di un processore può essere indicata in vari modi, tra i quali uno dei più semplici ed utilizzati è indubbiamente la misura dei FLOPS, FLoating point Operations Per Second, cioè quante operazioni in virgola mobile una determinata architettura sia in grado di elaborare al secondo.

Ogni nuova architettura di processore mette a disposizione degli utenti valori crescenti di FLOPS per le elaborazioni; ad incrementi della frequenza di clock, a parità di arcitettura, conseguono ovviamente altri incrementi della potenza di elaborazione massima. La misura dei FLOPS è in genere un valore massimo teorico che prevede l'utilizzo contemporaneo e al massimo delle potenzialità di tutte le unità di elaborazione presenti in una specifica architettura; resta poi da stabilire in che misura una specifica applicazione possa sfruttare tale potenza elaborativa, o sia in qualche misura limitata nell'esecuzione pratica dal tipo di calcoli effettuati.

gpu_vs_cpu.jpg (26068 bytes)

Il grafico qui esposto evidenzia le differenze, in termini di potenza elaborativa espressa in GigaFLOPS, tra processori Intel Pentium 4 prima e Core 2 Duo poi, rispetto a quanto registrato dalle più recenti soluzioni NVIDIA partendo dalla serie GeForce FX 5800 del 2003 in avanti. E' evidente come, in termini di pura potenza elaborativa massima teorica, le GPU crescano con un tasso ben superiore alle CPU, giustificando quindi tutta l'attenzione attualmente rivolta al loro utilizzo per elaborazioni di tipo parallelo.

La GPU GeForce FX 5800 era capace di un massimo di 8 GigaFLOPS, passati a 20 con le soluzioni GeForce FX 5900 Ultra alcuni mesi dopo. Le GPU della famiglia NV40, le prime pensate per API DirectX 9 e Shader Model 3.0, hanno raggiunto con le versioni GeForce 6800 Ultra la soglia di 53 GFLOPs. G70, architettura GeForce 7800 GTX, ha portato tale limite attorno ai 200 GigaFLOPS, mentre le soluzioni GeForce 8800 GTX hanno superato i 350 GigaFLOPS.

Potenza di elaborazione in GigaFLOPS più elevata equivale a prestazioni sempre superiori? No, e per due ordini di motivi. Il primo è legato al fatto che questi sono dati massimi teorici, ottenibili in situazioni limite e quindi con software che possa sfruttare completamente tutte le unità di elaborazione presenti in una GPU o in una CPU; questo è molto difficile che accada all'atto pratico con applicazioni disponibili in commercio, se non con software sviluppati di fatto su misura per questo tipo di misurazione. L'efficienza dell'applicazione, detto in altro modo, è fondamentale per poter sfruttare le potenzialità teoriche di un'architettura hardware.

Il secondo, ben più importante, è legato alle differenze architetturali proprie tra GPU e CPU. Nelle GPU la maggior parte della circuiteria è dedicata al data processing, mentre nelle CPU buona parte è legata al flow control e al data caching: di conseguenza le CPU non sono soluzioni ideali nell'elaborazione di processi che possono essere divisi in piccoli elementi e processati in parallelo, ambito di elaborazione nel quale invece le GPU possono eccellere in quanto si tratta, per loro natura, del tipico pacchetto di dati elaborati in un'applicazione grafica 3D.

cpu_gpu_schema.gif (9271 bytes)

Confrontando le strutture di base di CPU e GPU si evidenzia chiaramente come la maggior parte dei transistor implementati all'interno di una GPU siano dedicati alle execution unit, mentre in una cpu la parte di circuiteria dedicata sia al controllo che alla cache è ben più importante. Del resto, un processore deve eseguire un singolo task il più velocemente possibile, mentre una GPU deve cercare di eseguire il maggior numero di processi in parallelo, minimizzando per ciascuno il tempo di esecuzione e massimizzando il quantitativo di dati analizzati nell'unità di tempo.

Tutte le applicazioni che sono basate su set di dati molto ampi, per le quali si richiede l'esecuzione di un elevato numero di operazioni aritmetiche, possono beneficiare dell'utilizzo di una GPU in modo massiccio: in questo scenario, infatti, uno stesso programma può essere ripetuto su vari pacchetti di dati in parallelo, con un elevato rapporto di operazioni aritmetiche eseguite rispetto a quelle sulla memoria. In un tradizionale approccio di elaborazione con CPU si utilizza un programma singolo che viene riprocessato sui dati da elaborare in modo sequenziale, risultando quindi essere più dipendente dalla memoria sia di sistema che cache interna al processore.

Pagina 6 - CUDA: GPCPU per NVIDIA

CUDA, acronimo di Compute Unified Device Architecture, è l'architettura che NVIDIA ha sviluppato per poter utilizzare le GPU della serie GeForce 8 in elaborazioni di tipo GPGPU. L'elaborazione GPGPU per NVIDIA prevede la presenza di 3 elementi:

  • la componente hardware, nella forma di una GPU NVIDIA della serie 8 e quindi delle nuove piattaforme hardware Tesla;
  • il Software Developer Kit (SDK) NVIDIA CUDA, comprensivo delle librerie FFT e BLAS;
  • il compilatore C, che permette quindi un approccio alla programmazione in ambiente familiare per i programmatori in C.

Delle soluzioni hardware proposte da NVIDIA abbiamo parlato sino ad ora all'interno dell'articolo; diamo quindi spazio a CUDA e a come NVIDIA permetta ai programmatori di utilizzare le proprie architetture hardware per elaborazioni di General Purpose GPU.

Come opera una GPU nell'elaborazioni di calcoli in parallelo? La GPU esegue un programma CUDA, operando alla stregua di un coprocessore per la CPU di sistema: il processore interpreta, organizza e invia le informazioni, mentre la GPU elabora i dati in parallelo. Parti dell'applicazione sviluppata con CUDA vengono estratte e compilate così da poter essere eseguite dalla GPU, in quanto con questo componente si ottengono tempi di elaborazione sensibilmente inferiori a quelli della CPU. E' quindi evidente che se da una parte la GPU permetta di ottenere un notevole incremento prestazionale, dall'altra sia sempre richiesta la presenza della CPU per poter eseguire le elaborazioni e governare sul processo di elaborazione proprio della GPU.

CUDA è composto da 3 elementi principali: le funzionalità implementate nelle GPU NVIDIA della serie 8 specificamente rivolte all'elaborazione parallela (e sintetizzabili, di fatto, nella presenza di stream processors sino al numero di 128 nelle arhitetture più complesse), il compilatore C che permette di trasferire codice alla GPU così che venga da quest'ultima elaborato e un runtime driver specificamente sviluppato per l'elaborazione da parte della GPU.

cuda.gif (7049 bytes)

La presenza del compilatore C permette ai programmatori di non interfacciarsi con la GPU attraverso le API, tipica forma adottata nella programmazione di applicazioni grafiche per schede video, ma di utilizzare un ambiente di lavoro familiare e dedicarsi, quindi, solo alla scrittura di codice che tenda ad eseguire operazioni parallele il più possibile. Il compilatore C permette di gestire codice destinato sia alla CPU che alla GPU, con la possibilità di inserire all'interno del codice delle specifiche note che permettano di indirizzare porzioni di codice alla GPU o alla CPU.

Durante l'esecuzione di un programma che può venir elaborato dalla GPU, gli sviluppatori devono semplicemente eseguire il programma sulla CPU. Il driver CUDA carica automaticamente il programma e lo manda in esecuzione sulla GPU, avviando una comunicazione tra CPU e GPU via bus PCI Express. Il runtime driver gestisce automaticamente il trasferimento dei dati tra i dispositivi, l'esecuzione del codice da lato GPU e tutte le eventuali interazioni esistenti tra CPU e GPU nel momento in cui le operazioni di elaborazione vengono eseguite. Questo approccio permette allo sviluppatore di evitare di dover gestire manualmente le risorse di elaborazione proprie delle GPU.

L'utilizzo della GPU per elaborazioni parallele è un tema estremamente interessante e altrettanto complesso. Segnaliamo due articoli, in lingua inglese, che analizzano CUDA con un dettaglio tecnico superiore a quanto qui adottato e permettono di meglio approfondire l'approccio alla programmazione sulle GPU; entrambi gli articoli presuppongono una notevole familiarità con le architetture delle GPU e con la programmazione in generale.

http://www.behardware.com/articles/659-1/nvidia-cuda-preview.html

http://www.beyond3d.com/content/articles/12/

Pagina 7 - Intervista con Andy Keane

Abbiamo avuto occasione di discutere con Andy Keane, general manager per la divisione GPU computing di NVIDIA e a capo di fatto di tutti i progetti NVIDIA legati ai prodotti GPGPU; di seguito la serie di domande che abbiamo posto con i suoi approfondimenti.

Hardware Upgrade: l'approccio di Intel e AMD sulle architetture multicore del futuro è sensibilmente differente. Da una parte la ricerca di soluzioni che integrino un elevato numero di Core identici tra di loro, e dall'altra la volontà di integrare acceleratori dedicati all'interno delle CPU accanto a tradizionali Core general purpose. Qual è il punto di vista di NVIDIA a riguardo?

Andy Keane: è difficile poter immaginare in questo momento quale approccio multicore sarà dominante in futuro, tra le impostazioni alle quali AMD e Intel sembrano lavorare in questo momento. E' indubbio che per NVIDIA entrambe le aziende siano partner importanti, con i quali abbiamo tutto l'interesse a lavorare assieme. Detto questo, crediamo che le GPU possano rivestire un ruolo molto importante nel risolvere i problemi di potenza elaborativa richiesti da elaborazioni per loro natura parallele, e che quindi possono beneficiare grandemente delle GPU. Per NVIDIA, quindi, le future architetture multicore che verranno sviluppate da Intel e da AMD sono interessanti nell'ottica di collaborazione tra partner, in quanto sono processori che verranno abbinati alle nostre future GPU per operazioni computazionali particolarmente intense.

Hardware Upgrade: c'è una dipendenza diretta, ed eventualmente in che misura, tra numero di GPU utilizzate per elaborazioni GPGPU e numero di Core di processore ad esse associate?

Andy Keane: in generale il numero di processori presenti in workstation attualmente in commercio, anche di tipo single socket, è più che sufficiente a garantire la necessaria potenza elaborativa lato CPU per gestire elaborazioni GPGPU. Non dobbiamo infatti dimenticare che la presenza di una GPU dedicata all'elaborazione parallela implica sempre la presenza di un processore di sistema a disposizione, in quanto a quest'ultimo competono sempre alcune elaborazioni, non fosse altro che per gestire il sistema operativo. Nei sistemi Tesla GPU Server colleghiamo una coppia di GPU ad un server attraverso connessione PCI Express 2.0: questa configurazione richiede quindi che su ogni server di collegamento sia presente una CPU, anche se il loro numero complessivo è legato al tipo di utilizzo che dev'essere fatto nella server farm dei vari server.

Pensiamo ad un cluster di server Tesla GPU Server, dove ogni server è collegato ad altri due server Rack ad 1 unità: questi ultimi integreranno al proprio interno da un minimo di 1 a un massimo di 4 Socket di processore, per un numero di Core disponibili vairabile da 1 a 16. Il numero di questi Core è ovviamente funzione del tipo di elaborazioni che vengono condotte in server farm: se accanto alle elaborazioni GPGPU si eseguono anche elaborazioni di calcolo intensivo con CPU di tipo tradizionale è evidente che maggiore il loro numero, meglio è in termini di tempi di elaborazione. In sintesi, quindi, la scelta è legata alla tipologia di elaborazioni eseguite con le cpu nella server farm; in funzione delle sole GPU per calcoli paralleli, il rapporto di riferimento è quello di avere un core di processore a disposizione per ogni GPU, situazione facilmente verificabile al momento attuale vista la diffusione di CPU dual e quad core a costi accessibili.

Hardware Upgrade: parliamo di rapporto con i vostri clienti: che tipo di supporto fornisce NVIDIA a loro progetti di GPGPU? Al momento attuale, infatti, questo è un mercato nel quale non esistono soluzioni preconfezionate che si possano adattare ad alcune tipologie di clienti ma la programmazione della parte software è specifica per ogni tipologia di elaborazione da eseguire.

Andy Keane: il mercato del GPU Computing si sta di fatto sviluppando in questi mesi, pertanto l'evoluzione potrà prendere le più diverse strade nel corso del tempo. L'approccio di NVIDIA è quello di fornire un background architetturale che permetta ai nostri clienti di spostare le elaborazioni parallele intensive dalle CPU alle GPU, cercando in questo di aiutare i team di sviluppo software interni ai vari partner nella programmazione del codice che verrà elaborato dalle GPU. Non sviluppiamo direttamente software per i nostri clienti, in quanto da un lato sarebbe un'operazione sin troppo complessa e dall'altro avrebbe un risultato presumibilmente meno efficiente nel complesso rispetto a quanto ottenibile internamente da chi l'applicazione deve utilizzarla quotidianamente.

NVIDIA è particolarmente presente all'interno del mondo accademico, grazie agli sforzi fatti in questa direzione da David Kirk (nota: Kirk è Chief Scientist in NVIDIA e uno dei principali promotori dell'utilizzo delle GPU per calcolo general purpose): intendiamo supportare al meglio le università proponendo corsi di programmazione in GPU e cercando di elevare il livello dei corsi già esistenti. Quello che stiamo contribuendo a sviluppare, assieme ai nostri partner, è un completo ecosistema nel quale la potenza elaborativa delle GPU possa essere attivamente utilizzata quale risorsa di calcolo su ampia scala.

Hardware Upgrade: può spiegarci il funzionamento del sistema Tesla GPU Server in termini di connessioni PCI Express con il sistema?

Andy Keane: in un sistema Tesla GPU Server sono montate 4 GPU, collegate a coppie di due attraverso tecnologia PCI Express; ogni coppia di GPU è a sua volta collegata, attraverso un link PCI Express 2.0 esterno, ad un PC di controllo, nella forma di un server rack o di una workstation a seconda delle disponibilità, così che per ogni server Tesla GPU sia necessario abbinare almeno 2 server di controllo. Il collegamento tra le due GPU avviene attraverso tecnologia SLI: nel server è montato un PCB su cui sono installati gli Slot PCI Express delle schede video, al termine dei quali è montato un chip bridge PCI Express che gestisce i flussi PCI Express provenienti dalle GPU, bilanciandoli tra di loro così che il segnale possa essere trasmesso su un'unica connessione PCI Express 16x verso il server di controllo. L'approccio, di conseguenza, è molto simile a quanto implementato nel versante desktop con le soluzioni dual GPU su singolo Slot PCI Express, cioè le schede GeForce 7950 GX2 in commercio da circa 1 anno.

Hardware Upgrade: quando vedremo precisione floating point a 64 bit, quindi double precision, in soluzioni Tesla?

Andy Keane: le soluzioni Tesla che abbiamo presentato sono caratterizzate da single precision e non da double precision; riteniamo che per il tipo di elaborazioni attuali questo livello di precisione sia sufficiente. Avremo a disposizione precisione FP64 nel momento in cui presenteremo la prossima generazione di architettura delle nostre GPU.

Hardware Upgrade: nel futuro dei sistemi GPU sviluppato da NVIDIA vede la possibilità che coesistano due distinti team di sviluppo, uno incentrato rispettivamente su architetture GPU per applicazioni 3D e videoludiche e l'altro su soluzioni della famiglia GPU Computing?

Andy Keane: l'attenzione che internamente in NVIDIA c'è per le soluzioni GPGPU è ogni giorno sempre più importante, ma non credo che a breve questo porterà allo sviluppo di due team paralleli che creino GPU destinate a differenti tipologie di utilizzo. Del resto tutto quello che può essere implementato, dal punto di vista architetturale, all'interno di una GPU per una specifica tipologia di elaborazioni trova senso anche se applicata per altri ambiti. Non dimentichiamo inoltre che i costi di progettazione e sviluppo di una famiglia di GPU richiede investimenti, sia in termini di tempo che economici, estremamente elevati, al punto probabilmente da avere poco senso, per adesso, di implementare due design sensibilmente differenti per GPU grafiche e GPU destinate al calcolo parallelo.

Pagina 8 - GPGPU: dei casi studio

Assieme alla presentazione delle proprie soluzioni Tesla per l'elaborazione GPGPU, NVIDIA ha mostrato alcuni esempi pratici di come le architetture della famiglia G80 sono state implementate per elaborazioni GPGPU da differenti aziende

Acceleware e Boston Scientific

boston.jpg (22263 bytes)

Boston Scientific produce pacemakers e altre tipologie di impianti biomedici, per la costruzione dei quali vengono condotte numerose simulazioni al computer. Grazie alla partnership con Acceleware, azienda canadese, l'esecuzione del software SEMCAD X utilizzato per le simulazioni biomediche ha subito una accelerazione sino a 25 volte dei tempi di elaborazione, utilizzando per parte di queste la potenza elaborativa delle GPU NVIDIA. L'implicazione diretta di questo incremento di velocità è la possibilità di condurre un numero molto più elevato di simulazioni sui propri prodotti, delineando per questo le influenze e le dipendenze reciproche di un elevato numero di variabili presenti all'interno del design dei prodotti.

Evolved Machine

evolved_machine.jpg (54926 bytes)

In questo caso l'ambito di ricerca si sposta sull'analisi neuronale: Evolved Machine analizza i circuiti neuronali sul larga scala. L'ordine di grandezza delle elaborazioni è estremamente complesso: la simulazione del comportamento di un singolo neurone richiede la risoluzione di 200 milioni di equazioni differenziali al secondo, con una potenza elaborativa stimata in circa 4 GigaFLOPs. Un'analisi completa richiede lo studio di centinaia di neuroni e delle loro interrelazioni, con una potenza elaborativa che supera i 10 teraFLOPs.

Queste simulazioni vengono eseguite sfruttando la potenza di elaborazione delle GPU, con incrementi sino a 130 volte rispetto a quanto registrato con i processori x86 in commercio. Evolved Machine ha quindi implementato una struttura di GPU in cluster per questo genere di elaborazioni, con una frazione del costo richiesto per ottenere la medesima potenza elaborativa con tradizionali CPU.

Headwave

headwave.jpg (31154 bytes)

Headwave si occupa di trivellazioni, cioè della ricerca di giacimenti naturali di gas e petrolio. In questi ambiti il ruolo della simulazione, partendo da un pacchetto di dati raccolti nell'area di possibile scavo, è fondamentale: non è possibile poter trivellare alla ricerca di un giacimento per tentativi, in quanto i costi di ogni operazione di ricerca sarebbero insostenibili.

Più elevato il numero di dati raccolti ed elaborati, più precisi saranno i risultati dell'analisi a prezzo tuttavia di un incremento del volume di elaborazioni. Headwave ha quindi sviluppato un proprio software che utilizza la GPU per eseguire queste elabotazioni, con incrementi del 2000% nei tempi di elaborazione rispetto all'utilizzo di tradizionali architetture di CPU.

L'utilizzo delle GPU permette quindi sia di ridurre i tempi di elaborazione delle simulazioni, che di analizzare immediatamente i dati acquisiti in modo multidimensionale direttamente nella stessa giornata nella quale essi sono stati raccolti.

Wisconsin-Madison e Acceleware

wisconsin.jpg (25654 bytes)

L'università del Wisconsin-Madison ha utilizzato le piattaforme hardware Acceleware per utilizzare le GPU NVIDIA nell'elaborazione di dati che mirano all'individuazione preventiva di cancro al seno. Un dipartimento interno a questa università ha infatti sviluppato una tecnologia che permette, attraverso impulsi elettromagnetici ad elevata frequenza e ridotta potenza di costruire una rappresentazione 3D del seno, con la quale individuare la presenza di masse tumorali.

Questa tecnologia, in combinazione con una tradizionale mammografia, permette di evidenziare potenziali formazioni tumorali nel seno, oltre a effettuare trattamenti sulla forma tumorale senza richiedere interventi di chirurgia.

La tecnologia di rappresentazione grafica del seno incorpora algoritmi di calcolo molto complessi, che richiedono una elevata potenza elaborativa. E' in questo ambito che la GPU permette di ottenere significativi incrementi nei tempi di elaborazione, permettendo di ottenere la generazione delle immagini in un periodo di tempo di alcune ore contro i giorni richiesti utilizzando processori tradizionali.

University of Illinois at Urbana-Champaign’s (UIUC)

uiuc_1.jpg (15189 bytes)uiuc_2.jpg (20314 bytes)

L'University of Illinois at Urbana-Champaign’s (UIUC) ha sviluppato due tool, Nanoscale Molecular Dynamics (NAMD) e Visual Molecular Dynamics (VMD), utilizzati per simulare e visualizzare processi biomolecolari. Le elaborazioni di questi software sono state accelerate utilizzando GPU per calcolare le interazioni tra molecole biologiche e ioni. Il risultato è stato quello di accelerare di oltre 100 volte i tempi di elaborazione rispetto a quanto ottenuto con un cluster di 18 CPU; il picco di potenza elaborativa, ottenuto con una workstation dotata di 3 GPU al proprio interno, è stato di 705 GigaFLOPs utilizzando dati reali elaborati da una di queste applicazioni.

La possibilità di eseguire queste elaborazioni utilizzando una workstation dotata di GPU permette ai ricercatori di ottenere analisi direttamente nei propri laboratori, senza dover ricorrere ad una server room con cluster di computer per questo e dover necessariamente schedulare il tempo a disposizione nella server farm a diretta competizione con altri progetti di ricerca che richiedono il cluster di PC per le proprie elaborazioni.

Pagina 9 - Considerazioni

In questo articolo abbiamo cercato di spiegare le basi che spingono verso l'utilizzo delle GPU in contesti di elaborazione general purpose, e quali benefici queste possano avere rispetto all'adozione di una tradizionale CPU. E' un ambito nel quale NVIDIA sta investendo in modo massiccio con la serie di prodotti Tesla, intravedendo potenzialità di business molto elevate per i prossimi anni oltre ad uno sbocco complementare del proprio lavoro di ricerca tecnologico alla base di ogni famiglia di GPU.

folding@home.gif (29291 bytes)

Le statistiche di elaborazione del client Folding@Home, uno dei pochi esempi alla portata di tutti gli utenti di applicazione che può essere eseguita su varie piattaforme di CPU e su GPU, evidenziano come sia ancora molto ridotto il numero di sistemi per i quali si utilizzano GPU, in questo caso ATI Radeon, per l'elaborazione di pacchetti di dati Folding. Confrontando i valori in TeraFLOPS emerge chiaramente come siano proprio le GPU la risorsa di elaborazione più potente tra quelle a disposizione degli utenti, distanziando di gran lunga tutte le altre architetture. E' questo un esempio di nicchia ma concreto di quelle che possono essere le potenzialità dell'elaborazione parallela via GPU, nel momento in cui viene implementato un client ottimizzato.

Il futuro delle architettue CPU si sposta sempre più rapidamente verso soluzioni multicore, aprendo scenari interessanti su quale sarà l'approccio potenzalmente vincente tra gli attuali aprcci sviluppati da Intel e AMD. Quest'ultima in particolare spinge verso architetture che abbinino core general purpose con acceleratori dedicati: di fatto una GPU, nell'ottica delle elaborazioni GPGPU, può essere vista proprio in questo modo. Intel, invece, sta sviluppando Larrabee, GPU che mira a proporsi proprio nel mercato GPGPU e non in quello della grafica 3D, puntando sulla compatibilità con codice x86.

NVIDIA crede fortemente nell'utilizzo delle proprie GPU per elaborazioni general purpose, e i primi esempi pratici di clienti che hanno convertito programmi e dataset per l'elaborazione su GPU confermano come sia possibile beneficiare grandemente di queste architetture. Non è tutto oro quello che luccica, tuttavia: migrare un'applicazione da CPU a GPU richiede un lavoro di programmazione non di poco conto, soprattutto se si ricerca la massima efficienza possibile dell'elaborazione. Non c'è da tralasciare anche il fattore culturale: NVIDIA sta operando attivamente con il mondo accademico affinché le GPU vengano attivamente utilizzate nella ricerca come strumento di calcolo general purpose, sostituendo le CPU in quegli ambiti nei quali si dimostrano più efficienti.

L'approccio NVIDIA con CUDA è, in termini sia teorici che pratici, sicuramente più accessibile di Close To Metal o CTM , l'approccio corrispondente di AMD per la programmazione con GPU della famiglia R580. CTM permette di interagire con l'hardware ad un livello ancor più dettagliato di CUDA, di fatto con un linguaggio assembler, benché questo a prezzo di una superiore complessità e di tempi di sviluppo ben più lunghi. CTM, inoltre, è specifico per una famiglia di GPU, mentre CUDA ha dalla sua la flessibilità di poter spostare applicazioni svilupate ora su future generazioni di GPU NVIDIA.

Quando le GPU potranno venir utilizzate per elaborazioni parallele anche in ambiente domestico, o comunque al di fuori di applicazioni specialistiche? E' complesso dare una risposta a questa domanda, anche se riteniamo difficile che i tempi siano maturi, o lo possano essere nel giro di alcuni anni, perché questo possa avvenire. Indubbiamente le potenzialità delle elaborazioni GPGPU sono molto ampie in ambienti professionali: se il software può essere adattato efficientemente all'elaborazione su GPU i benefici prestazionali e di riduzione dei costi che se ne derivano sono una spinta troppo forte per non pensare ad una migrazione.