Tesla
INFORMAZIONI SUI PRODOTTI
INFORMAZIONI ADDIZIONALI
  • Strumenti di sviluppo software

    Programmazione di GPU CUDA-compatibili

  • Soluzioni verticali
  • NVIDIA CUDA
  • Newsletter su CUDA / Supercomputing TeslaNewsletter su CUDA / Supercomputing Tesla
    L'iscrizione alla newsletter su CUDA/Supercomputing Tesla permette di ricevere aggiornamenti regolari in merito all'architettura di elaborazione in parallelo per finalità generali di NVIDIA – cioè su come sfruttare le GPU per risolvere numerosi problemi di calcolo di grande complessità in una frazione del tempo necessario a una CPU – oltre a tutte le ultime notizie relative alle soluzioni di computing NVIDIA Tesla e alla loro scalabilità, in grado di risolvere le sfide di computing più impegnative al mondo.

LINK RELATIVI

Elaborazione su GPU

 

Questo termine indica l'utilizzo di una GPU (unità di elaborazione grafica) per l'esecuzione generale dei calcoli scientifici e tecnici.
Normalmente si utilizzano una CPU e una GPU insieme per ottenere un modello di elaborazione eterogeneo. La parte sequenziale dell'applicazione viene eseguita sulla CPU, mentre la parte a maggiore densità di calcolo viene eseguita sulla 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

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.

L'elaborazione su GPU è possibile grazie all'architettura massivamente parallela delle GPU NVIDIA, la cosiddetta architettura CUDA. L'architettura CUDA consiste di centinaia di core di elaborazione che operano insieme per “macinare” il set di dati nell'applicazione.

La serie di GPU Tesla 10 rappresenta l'architettura CUDA di seconda generazione, dotata di funzioni ottimizzate per le applicazioni scientifiche quali il supporto di componenti hardware in virgola mobile a doppia precisione secondo lo standard IEEE, cache di dati locali 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 e C++. Da questa iniziativa è nata l'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

Il primo linguaggio supportato da NVIDIA è stato il linguaggio C. Un insieme di strumenti di sviluppo software in C per CUDA permette di programmare la GPU utilizzando il linguaggio C con un set minimo 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 centinaia di applicazioni e descritti in quasi un migliaio di ricerche pubblicate. Sul sito 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.