Alcune definizioni

CUDA, il nuovo linguaggio di programmazione per le GPU Nvidia, promette grandi risultati e mostra le schede video sotto una nuova luce. Cerchiamo di capire un po' di più cosa ci riserva CUDA.

Avatar di Andrea Ferrario

a cura di Andrea Ferrario

Editor in Chief

Alcune definizioni

Prima di tuffarci in CUDA, diamo le definizioni di alcuni termini che compaiono nella documentazione Nvidia. L'azienda ha scelto di usare una terminologia speciale che può essere difficile da masticare. Prima dobbiamo definire cos'è un thread in CUDA, poiché questo termine non è sinonimo di "thread per CPU", e non è nemmeno equivalente a quello che definiamo "thread" nei nostri articoli dedicati alle GPU. Un thread, nella terminologia CUDA, è un elemento composto dai dati base che devono essere elaborati. Diversamente dai thread delle CPU, i thread CUDA sono notevolmente più "leggeri", quindi il cambio di contesto tra due thread non è un'operazione molto impegnativa.

Il secondo termine che si incontra di frequente nella documentazione CUDA è " iswarp ". Il termine deriva dalla tecnologia di weaving (processo di interlacciamento dei thread); un warp in CUDA è un gruppo di 32 thread, la minima dimensione dei dati elaborati in SIMD da un multiprocessore CUDA.

Tuttavia, in CUDA, anziché manipolare direttamente warp, lavorerete con blocchi (blocks) che possono contenere dai 64 ai 512 thread.

Infine, questi blocchi si riuniscono in "grids" (griglie). Il vantaggio di questo raggruppamento è che il numero di blocchi elaborati simultaneamente dalla GPU è vicino al limite delle risorse hardware, come vedremo più avanti. Il numero di blocchi in una griglia (grid) rende possibile l'applicazione del kernel a una grande quantità di thread con una singola chiamata, senza doversi preoccupare delle risorse. La CUDA runtime si occupa di tutti i lavori necessari, mostrando una flessibilità estrema. Se l'hardware dispone di poche risorse, eseguirà i blocchi sequenzialmente; se dispone invece di molte unità processuali, potrà elaborare i dati in parallelo. Questo significa che lo stesso codice può essere gestito, in maniera adeguata, sia dalle GPU entry-level che da quelle high-end, e naturalmente anche dai modelli a venire.

Gli altri termini frequenti nelle API CUDA sono usati per identificare la CPU, che è chiamata "host", e la GPU, a cui si fa riferimento come "device".