Tesla
INFORMAZIONI SUI PRODOTTI
INFORMAZIONI ADDIZIONALI
LINK RELATIVI

Elaborazione su GPU

 

Il GP Computing o GPGPU indica l'utilizzo di una GPU (unità di elaborazione grafica) per l'esecuzione generale dei calcoli scientifici e tecnici.

Il modello del GPU Computing prevede l'uso combinato di CPU e GPU in un modello di elaborazione a co-processing eterogeneo. La parte sequenziale dell'applicazione viene eseguita sulla CPU, mentre la parte a maggiore intensità di calcolo viene accelerata dalla GPU. Dal punto di vista dell'utente, l'esecuzione dell'applicazione risulta più rapida perché l'alta velocità della GPU viene sfruttata per migliorare le prestazioni.

Heterogeneous Computing

La GPU si è evoluta nel corso degli anni sino a offrire diversi teraflop di calcolo in virgola mobile. Nel 2006-2007 NVIDIA ha rivoluzionato la GPGPU e ha dato nuovo slancio al mondo del computing presentando la sua nuova architettura di elaborazione parallela “CUDA”. L'architettura CUDA consiste di centinaia di core di elaborazione che operano insieme per “macinare” il set di dati nell'applicazione.

Il motivo del successo delle GPGPU negli ultimi anni è stato proprio la grande semplicità di programmazione del modello CUDA associato. In questo modello di programmazione, lo sviluppatore deve modificare l'applicazione per mappare i kernel ad alta densità di calcolo per l'elaborazione sulla GPU. La parte restante dell'applicazione rimane sulla CPU. Per mappare una funzione sulla GPU, è necessario riscriverla per esporre il parallelismo della funzione e aggiungere le parole chiave “C” appropriate per spostare i dati da e verso la GPU. Allo sviluppatore viene assegnato il compito di lanciare simultaneamente decine di migliaia di thread. L’hardware della GPU gestisce i thread e la loro programmazione.

Le GPU Tesla serie 20 si basano sulla nuova architettura “Fermi”, che rappresenta la terza generazione di CUDA. Fermi è ottimizzata per le applicazioni scientifiche con funzionalità chiave quali 500 gigaflop di supporto di componenti hardware in virgola mobile a doppia precisione secondo lo standard IEEE, cache L1 ed L2, protezione dagli errori di memoria ECC, cache di dati locali gestiti dagli utenti in forma di memoria condivisa distribuita nell'intera GPU, coalescenza degli accessi alla memoria e così via.

“Le GPU si sono evolute al punto che numerose applicazioni reali possono essere facilmente implementate ed eseguite su di esse in modo nettamente più rapido di quanto avviene sui tradizionali sistemi multi-core. Le future architetture di computing saranno sistemi ibridi con GPU a core paralleli che lavoreranno in tandem con CPU multi-core.”

Prof. Jack Dongarra
Direttore dell'Innovative Computing Laboratory
University of Tennessee

Storia dell'elaborazione su GPU

I chip grafici sono nati originariamente come pipeline grafiche a funzione fissa. Nel corso degli anni, questi chip grafici sono diventati sempre più programmabili, fino a quando NVIDIA ha presentato la prima vera e propria GPU (Graphics Processing Unit). Negli anni 1999-2000, gli studiosi di informatica e alcuni ricercatori specializzati nell'acquisizione di immagini medicali e nell'elettromagnetismo hanno iniziato a utilizzare le GPU per l'esecuzione di applicazioni di calcolo generiche. Hanno così osservato che le eccellenti prestazioni in virgola mobile delle GPU permettevano di migliorare le prestazioni di varie applicazioni scientifiche. È nato così il movimento denominato GPGPU (General Purpose computing on GPUs).

Il problema dell'elaborazione GPGPU era la necessità di utilizzare linguaggi di programmazione grafici come OpenGL e Cg per programmare la GPU. Gli sviluppatori dovevano perciò rendere le applicazioni scientifiche simili ad applicazioni grafiche, mappandole in problemi traducibili in triangoli e poligoni. Questo requisito limitava la possibilità di sfruttare le potenti prestazioni delle GPU per scopi scientifici.

NVIDIA ha reso possibile l'applicazione di questo enorme potenziale di prestazioni a vantaggio dell'intera comunità scientifica e ha deciso di investire per modificare la GPU, in modo da renderla interamente programmabile per le applicazioni scientifiche e aggiungendovi il supporto per linguaggi ad alto livello come C, C++ e Fortran. Questo ha portato alla realizzazione dell’architettura CUDA per la GPU.

Architettura parallela e modello di programmazione parallelo CUDA

L'architettura hardware parallela CUDA è accompagnata dal modello di programmazione parallelo CUDA, basato su un insieme di astrazioni che permettono di esprimere sia i dati “fine-grained” che quelli “coarse-grained” e il parallelismo dei task. Il programmatore può scegliere di esprimere tale parallelismo in linguaggi ad alto livello come C, C++, Fortran o in API per driver come OpenCL™ e DirectX™-11 Compute.

GPU-ComputingOvrw.png

Oggi NVIDIA fornisce supporto alla programmazione delle GPU con C, C++, Fortran, OpenCL e DirectCompute. Una serie di strumenti di sviluppo software assieme a librerie e middleware è disponibile agli sviluppatori come illustra la figura precedente e può essere visitata grazie a questo link . GPU da programmare con C e una serie minima di parole chiave o estensioni. Prossimamente verrà reso disponibile il supporto per Fortran, OpenCL e altri linguaggi.

Il modello di programmazione parallela CUDA permette ai programmatori di suddividere il problema in unità secondarie meno complesse, che possono essere risolte una per una parallelamente. Il parallelismo fine-grained dei sotto-problemi viene quindi espresso, in modo che ogni sotto-problema possa essere risolto in modo collaborativo in parallelo.

L'architettura della GPU CUDA e il relativo modello di elaborazione parallela CUDA sono oggi implementati in migliaia di applicazioni e descritti in migliaia di ricerche pubblicate. CUDA Zone sono citati molti di questi documenti e applicazioni.

OpenCL è un marchio di Apple Inc. utilizzato su licenza da Khronos Group Inc.
DirectX è un marchio registrato di Microsoft Corporation.