Cosa c’è di nuovo con CUDA? NVIDIA rivela
Basandosi su questa architettura, il team ha sfruttato l’enorme scala di CUDA e ha aggiunto un nuovo livello gerarchico chiamato thread lock cluster.
CUDA, la piattaforma di elaborazione parallela di NVIDIA per l’informatica generale, è il principale framework proprietario per GPGPU. Acronimo di Compute Unified Device Architecture, CUDA è un livello software che fornisce l’accesso diretto al set di istruzioni virtuali della GPU e agli elementi di calcolo paralleli per eseguire i kernel di calcolo. La piattaforma è stata ampiamente utilizzata in bioinformatica, scienze della vita, visione artificiale, elettrodinamica, chimica computazionale, finanza, imaging medico ecc. A NVIDIA, Stephen Jones, Architect, CUDA, ha parlato di CUDA alla conferenza GTC, 2022 . Analytics India Magazine ha evidenziato i punti chiave del discorso che copre le aggiunte di lingua e toolkit, gli ultimi sviluppi e il futuro di CUDA.
Le tre ere dell’informatica:
Prima era: programmazione single core
Durante la prima era, la programmazione prendeva un problema, scomponendolo in una serie di passaggi logici e scrivendo un codice lineare che sarebbe stato eseguito su un processore il più velocemente possibile. È stato evidenziato da Dennard Scaling, che ha capito che quando rimpicciolisci i transistor, puoi farli funzionare più velocemente senza aumentare la potenza. Ma la meccanica quantistica ha sfidato questo e i progettisti hanno dovuto passare alla legge di Moore. Di conseguenza, gli sviluppatori hanno continuato ad aggiungere più transistor ma non sono riusciti a renderlo più veloce.
Seconda era: la programmazione parallela
La seconda era della programmazione ha realizzato che tutti i programmi devono indirizzare più thread che scompongono i dati in elementi separati in modo che possano essere elaborati in modo indipendente e, allo stesso tempo, come dati paralleli. Quindi la soluzione è passata da un codice lineare al parallelismo delle attività basato sull’esecuzione asincrona. Alla fine, ciò ha portato all’introduzione del data center per il calcolo in scala.
Terza era: Località
La terza era, presente in CUDA , si concentra sulla localizzazione . L’era del calcolo consapevole della località si concentra su dove sono collocati i soggetti. Il calcolo parallelo riguarda una gerarchia di framework, librerie e runtime in cui ogni livello gerarchico ingrandisce il sistema. Ciò consente ai programmatori di scegliere il proprio livello di ridimensionamento. Il ridimensionamento è un’aggiunta del parallelismo dei dati e della località dei dati.
Al backend: architettura Hopper
L’ architettura NVIDIA Hopper è il back-end della piattaforma CUDA. Estende le capacità MIG fino a 7 volte rispetto alla generazione precedente offrendo configurazioni multi-tenant sicure in ambienti cloud in ogni istanza GPU. Inoltre, introduce funzionalità per migliorare l’esecuzione asincrona e consentire una sovrapposizione delle copie della memoria con il calcolo riducendo al minimo i punti di sincronizzazione. Hopper mitiga anche i problemi di lunghi periodi di addestramento per i modelli giganti mantenendo le prestazioni delle GPU.
Caratteristiche CUDA
Elaborazione delle immagini
CUDA funziona in un sistema a griglia per l’elaborazione delle immagini. Come ha dimostrato Stephen, un’immagine viene frammentata in una griglia di blocchi, in cui ogni blocco viene eseguito sulla GPU come un programma completamente separato. Le GPU possono eseguire fino a migliaia di blocchi di questo tipo in base al parallelismo nella GPU. Questi blocchi funzionano indipendentemente sul loro frammento del problema e sono costituiti da thread.
Cluster di blocchi di thread
Basandosi su questa architettura, il team ha sfruttato l’enorme scala di CUDA e ha aggiunto un nuovo livello gerarchico chiamato thread block cluster. Descritto come Block.2, è essenzialmente un blocco di blocchi. Stephen lo ha definito un nuovo modo di pensare ai blocchi, in cui oltre ai singoli blocchi, possiamo anche prendere di mira soggetti localizzati per prestazioni migliorate.
Il cluster di blocchi di thread, NVIDIA
Qui, i blocchi all’interno di un cluster di blocchi di thread risiedono in un cluster di elaborazione GPC, con il cluster che rappresenta una capitale dei parallelismi con maggiori prestazioni. L’aggiunta di un cluster alla gerarchia di esecuzione consente a un’applicazione di sfruttare una sincronizzazione locale più rapida e una condivisione della memoria più rapida. Vari thread simultanei lavoreranno insieme in un cluster ma verranno eseguiti contemporaneamente. Ciò consente inoltre ai ricercatori di muoversi nella direzione dell’annotazione dei kernel prendendo di mira le dimensioni che hanno senso per la loro applicazione.
Memoria condivisa distribuita
Il cluster ha tutte le proprietà di un blocco di thread CUDA ma è più grande. Inoltre, ogni blocco in un cluster può leggere e scrivere la memoria condivisa di ogni altro blocco.
Copia asincrona della memoria unilaterale
Il team NVIDIA ha investito molto in dati asincroni che consentono ai programmatori di sospendere una copia e poi raccogliere il risultato, un enorme passo avanti verso il mantenimento di tutte le dipendenze locali. Libera anche i thread per fare altro lavoro tutto il giorno. Questa è chiamata barriera Split che consente ai programmatori di mantenere i thread in attesa di finire e attendere l’arrivo dei dati. I thread ora possono dormire in attesa esclusivamente di dati. Queste transazioni, denominate “diritti di sincronizzazione automatica”, consentono al mittente e al destinatario di sapere che i dati erano pronti senza bisogno di una stretta di mano. Questa copia della memoria unilaterale è sette volte più veloce della normale comunicazione poiché si tratta solo di una singola operazione di scrittura. Può anche essere utilizzato nella memoria locale per rendere i dati più veloci e semplici.
Unità TMA in Hopper
Stephen ha spiegato che tutto ciò è reso possibile dall’unità di accelerazione della memoria del tensore all’interno dell’Hopper. Prende la copia originale di async e la rende bidirezionale e funziona tra i cluster. Consente anche trasferimenti di dati unilaterali. Ad esempio, negli algoritmi che influenzano il vicino, il problema non è locale. Le transazioni di autosincronizzazione consentono uno scambio di alone 7 volte più veloce tra i blocchi nello stesso cluster. Il TMA è un motore di spostamento dati autonomo, un’unità hardware separata all’interno dell’SM che funziona indipendentemente dai thread. Può assumere e gestire tutti i calcoli, consentendo anche a un singolo thread di avviare una copia dell’intera memoria condivisa. La barriera della transazione può attendere l’arrivo dei dati senza sincronizzarsi tra loro. L’acceleratore può lavorare su dati a cinque dimensioni.