Computing GPU: che cos'è?

Continui a sentire parlare di GPU computing o accelerazione, ma non sei sicuro di cosa significhino? Ecco tutto ciò che devi sapere.

Le GPU o le unità di elaborazione grafica sono presenti in tutti i circuiti elettronici che producono una forma di visualizzazione o l'altra, in particolare il computer.

I primi processori grafici erano relativamente semplici. Ma con l'avvento dei giochi, dell'animazione 3D e delle attività di rendering video che hanno spinto le CPU oltre i loro limiti, le GPU più potenti hanno dovuto venire in soccorso.

Queste nuove schede GPU sono cresciute in potenza e complessità nel tempo, con diverse aziende e ricercatori alla ricerca di modi per sfruttare il loro vantaggio di esecuzione parallela. Questo post ti mostra come è andata finora.

Che cos'è una GPU?

Una GPU o unità di elaborazione grafica è un circuito specializzato progettato per la manipolazione dei dati per aiutare nella creazione di immagini da visualizzare. In altre parole, una GPU è un sistema che crea le immagini che vedi su qualsiasi superficie di visualizzazione, come il monitor del computer, lo schermo dello smartphone, le console di gioco e così via.

Inizialmente le GPU erano dispositivi semplici che mettono insieme elementi grafici per creare un output ideale per un dispositivo specifico. Col tempo, tuttavia, e con l'avvento dei giochi per computer, le GPU hanno iniziato a crescere in complessità e potenza, dando vita a GPGPU o General Purpose Computing su GPU.

Che cos'è il calcolo GPU?

Il GPU Computing o GPGPU è l'uso di una GPU per il calcolo oltre la grafica. Ciò significa utilizzare le GPU incorporate nella scheda video di un computer e originariamente destinate all'elaborazione di computer grafica per il calcolo di altri tipi di dati, come simulazioni scientifiche, mining di criptovalute, calcoli algebrici, previsioni meteorologiche, reti neurali e così via.

La ragione di questa evoluzione del GPU computing deriva dall'impressionante sviluppo delle unità di elaborazione grafica, che deriva dall'architettura parallela distribuita dei moderni sistemi GPU.

Man mano che la CPU del computer diventava più potente e poteva gestire programmi e giochi più complessi, i produttori di schede video hanno anche cercato di tenere il passo con gli sviluppi dell'informatica moderna e della grafica 3D. Nvidia ha presentato il GeForce 256 nel 1999 come prima scheda video GPU al mondo e le cose si sono evolute da lì.

Il principale vantaggio delle schede GPU rispetto alle CPU è la loro architettura di elaborazione parallela, che le rende in grado di elaborare attività di dati di grandi dimensioni in modo distribuito e parallelo che previene colli di bottiglia e blocchi della CPU.

Quali sono le applicazioni per il calcolo GPU?

Le applicazioni del GPU Computing sono molte, ecco alcuni dei principali utilizzi:

  1. Apprendimento automatico e reti neurali
  2. Logica fuzzy
  3. Bioinformatica
  4. Modellazione molecolare
  5. Resa video
  6. Calcolo geometrico
  7. Ricerca climatica e previsioni meteorologiche
  8. Astrofisica
  9. Crittografia
  10. Visione computerizzata
  11. Violazione della password
  12. Ricerca quantistica

Elaborazione GPU vs CPU

Sia le GPU che le CPU elaborano i dati digitali, ma lo fanno in modi diversi. La CPU o l'unità di elaborazione centrale è progettata per l'elaborazione seriale ad alte velocità, mentre le GPU sono progettate per l'elaborazione parallela a velocità molto inferiori. Ovviamente, una CPU può utilizzare l'hyper-threading per ottenere 2 thread per core, o anche avere dozzine di core, ma sono fondamentalmente processori seriali.

Mentre le CPU possono avere pochi core, le moderne GPU sono dotate di migliaia di core, ad esempio il Nvidia GeForce RTX 3090 che dispone di 10 core. Per ottenere un vantaggio rispetto alle CPU, tuttavia, i dati devono essere in grado di essere elaborati in parallelo, come l'elaborazione di un flusso contenente migliaia di immagini alla volta.

GPU vs ASIC

ASIC sta per Application Specific Integrated Circuit e questo significa che può eseguire solo un'attività, ovvero l'attività per cui è stato progettato. Un ASIC è una macchina unica che viene sviluppata da zero e richiede una conoscenza hardware esperta per essere costruita. Gli ASIC sono comunemente usati nel mining di criptovalute, poiché offrono buoni vantaggi di elaborazione parallela e una migliore efficienza rispetto alle GPU.

La principale differenza tra i due, tuttavia, è che le GPU sono più versatili. Ad esempio, puoi facilmente costruire un impianto di mining di criptovaluta usando le GPU. Le parti sono facilmente disponibili e se hai finito con il mining, puoi sempre vendere la scheda GPU ai giocatori o ad altri minatori. Con gli ASIC, tuttavia, puoi vendere una macchina usata solo ad altri minatori, perché difficilmente puoi farci altro.

Al di là del mining di criptovalute, diventa ancora più difficile mettere le mani su una macchina ASIC, perché non sono prodotti di massa. Ciò contrasta fortemente con i sistemi GPU che puoi ottenere ovunque e configurare facilmente.

GPU vs Cluster Computing

Sebbene una singola scheda GPU contenga migliaia di core, che aggiungono un'enorme potenza a qualsiasi computer a cui la colleghi, puoi teoricamente aggiungere tutte le schede GPU alla scheda madre del computer che può gestire e aumentare ulteriormente la sua capacità di elaborazione.

Un cluster di computer, d'altra parte, si riferisce a più computer collegati in rete per funzionare come un unico grande computer: un supercomputer. Ogni computer della rete è chiamato nodo e può avere a bordo una CPU multi-core, oltre a una o più schede GPU.

Ogni cluster deve avere un nodo master, che è il front computer responsabile della gestione e della pianificazione dei suoi nodi di lavoro. Conterrà anche software che alloca dati e programmi per i suoi nodi di lavoro per calcolare e restituire risultati.

Accelerazione GPU vs Hyper-threading

La CPU è progettata per gestire più attività contemporaneamente, ed è per questo che funziona a velocità molto elevate, programmando il tempo di elaborazione tra questi più processi. Tuttavia, quando incontra una funzione ad alta intensità di calcolo, potrebbe trascorrere un po' di tempo nel ciclo prima di tornare agli altri processi. Questo di solito si traduce in un rallentamento generale del computer e, nei casi peggiori, in un blocco completo del sistema.

I progettisti di computer possono evitare questo temuto scenario utilizzando l'hyper-threading o l'accelerazione GPU. L'hyper-threading consente a un singolo core della CPU di funzionare come due thread di elaborazione. Pertanto, quando un thread è intrappolato in un ciclo ad alta intensità di calcolo, l'altro thread può ancora tenere insieme il sistema.

I computer moderni ora hanno più core da 2 a 4, 8, 16, 32 e così via. Inoltre, sono dotati di hyper-threading, quindi una CPU a 2 core offre 4 thread, una a 4 core offre 8 thread e così via.

L'hyper-threading con CPU multi-core risolverà la maggior parte dei problemi di elaborazione, preverrà i colli di bottiglia e fornirà le massime prestazioni con giochi semplici, produzione musicale e piccoli progetti di grafica, video e apprendimento automatico. Ma quando hai bisogno di più potenza, una GPU è spesso la soluzione giusta.

L'accelerazione hardware o GPU è la capacità di un'applicazione software di sfruttare la potenza di elaborazione parallela di una GPU per elaborare un gran numero di dati, senza impantanare la CPU. Molte applicazioni professionali dipendono dall'accelerazione della GPU per funzionare correttamente. Questi includono programmi di progettazione/rendering di video e animazioni, codificatori, crittografia, grandi reti neurali e così via.

Nozioni di base sulla programmazione GPPGU

Inizialmente è stata utilizzata la programmazione generica delle GPU DirectX e OpenGL biblioteche. Questi sono stati progettati esclusivamente per lo sviluppo grafico, tuttavia, quindi è stato necessario riutilizzare i dati in modelli simili a grafici per funzionare.

Fortunatamente, ci sono stati importanti progressi in GPGPU nel corso degli anni, che hanno portato a librerie, linguaggi di programmazione e framework. Il più popolare di questi framework è CUDA di Nvidia.

CUDA consente a qualsiasi sviluppatore di immergersi facilmente nella programmazione GPU senza dover conoscere il nocciolo della programmazione GPU classica. Fornisce funzionalità che migliorano lo sviluppo oltre la grafica, con molte unità anche dotate di funzioni specifiche per l'apprendimento automatico.

Le librerie disponibili semplificano inoltre la creazione da zero di nuovi programmi con accelerazione GPU o l'adattamento di quelli già scritti all'elaborazione parallela. Scegli la libreria giusta, ottimizza il tuo codice per i loop paralleli, ricompila e il gioco è fatto.

CUDA Core vs Stream Processor

Spesso ti imbatterai nei termini Cuda core e processori di flusso. Entrambi i termini si riferiscono semplicemente al core della GPU o Unità logiche aritmetiche di una GPU. CUDA Core è una tecnologia proprietaria di Nvidia, mentre i processori Stream sono di AMD.

Un altro termine che potresti incontrare è Streaming Multi-Processor o SM. Questa è un'altra tecnologia Nvidia che originariamente raggruppava 8 core CUDA per SM. Esegue warp a 32 thread alla volta, utilizzando 4 cicli di clock per comando. I design più recenti ora dispongono di oltre 100 core per multiprocessore di streaming.

Le migliori lingue e librerie GPU

Ci sono così tante librerie e linguaggi là fuori che funzionano su entrambe le piattaforme Nvidia CUDA e AMD. Di seguito sono riportati solo alcuni:

  1. Nvidia CuBLAS – Sottoprogrammi di base di algebra lineare per CUDA
  2. cuDNN – Libreria di reti neurali profonde
  3. OpenCL – Standard aperto per la programmazione parallela
  4. Openmp – Per GPU AMD
  5. HIP – Libreria C++
  6. Nvidia cRAND – Generazione casuale di numeri
  7. polsino – Per la trasformata veloce di Fourier
  8. Nvidia centrale – Elaborazione di immagini e segnali 2D
  9. VSIPL GPU – Immagine vettoriale ed elaborazione del segnale
  10. OpenCV – Libreria GPU per la visione artificiale
  11. Apri ACC – Linguaggio per lo sviluppo parallelo
  12. PyCUDA – Piattaforma Python per CUDA
  13. TensorRT – Apprendimento profondo per CUDA
  14. CUDA C++ – Linguaggio C++ per CUDA
  15. CUDA C – Linguaggio C per CUDA
  16. CUDA Fortran – CUDA per sviluppatori FORTRAN

I migliori progetti di cluster di GPU

A giugno 2022, 8 dei 10 supercomputer più veloci al mondo sono accelerati dalla GPU. Condividono tutti anche il sistema operativo Linux e sono i seguenti:

RangoNomePetaflopCPU CoresCore GPUPotenza (kW)Anno
1.Frontier1,102591,8728,138,24021,1002022
2.LUMI151.9075,2641,034,8802,9002022
3.Vertice148.6202,7522,211,84010,0962018
4.sierra94.64190,0801,382,4007,4382018
5.Permutter64.59N/AN/A2,5892021
6.Selene63.4671,680483,8402,6462020
7.Tianhe-261.445427,0084,554,75218,4822013
8.Adastra46.121,632297,4409212022

Conclusione

Raggiungendo la fine di questo tuffo nel GPU computing e tutto ciò che ne deriva, a questo punto dovresti aver avuto un'idea della sua potenza e portata.

Per ulteriori informazioni, puoi controllare la piattaforma per sviluppatori di Nvidia qui o quello di AMD qui.

Nnamdi Okeke

Nnamdi Okeke

Nnamdi Okeke è un appassionato di computer che ama leggere una vasta gamma di libri. Ha una preferenza per Linux su Windows/Mac e lo sta usando
Ubuntu sin dai suoi primi giorni. Puoi beccarlo su Twitter tramite bongotrax

Articoli: 201

Ricevi materiale tecnico

Tendenze tecnologiche, tendenze di avvio, recensioni, entrate online, strumenti web e marketing una o due volte al mese

Lascia un Commento

L'indirizzo email non verrà pubblicato. I campi obbligatori sono contrassegnati con *