La teoria: CUDA dal punto di vista hardware

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

La teoria: CUDA dal punto di vista hardware

Se siete assidui lettori di Tom's Hardware, l'architettura delle ultime GPU di Nvidia non sarà un mistero per voi. Con CUDA, Nvidia presenta la sua architettura in maniera un po' differente, ponendo l'accento su alcuni dettagli mai rivelati fino ad ora.

Come potete vedere da questa immagine, il Shader Core Nvidia è costituito da diversi cluster, che Nvidia chiama "Texture Processor Clusters". Una 8800 GTX, per esempio, dispone di otto di questi cluster, una 8800 GTS di sei, e così via. Ogni cluster è a sua volta costituito da un'unità texture e due multiprocessori streaming (SM). Questi processori sono costituiti da un "front end" che lancia le istruzioni, e da un "back end", costituito da un gruppo di otto unità di calcolo e due SFU (Super Funcion Units), che eseguono l'istruzione in modalità SIMD. la stessa istruzione è applicata a tutti i thread del warp. Nvidia chiama questa modalità SIMT (Single Instruction Multiple Threads). È importante puntualizzare che il back end opera a frequenza doppia rispetto al front end. In pratica, il modulo che esegue le istruzioni è due volte più "ampio" rispetto a quanto è in realtà (come un'unità SIMD 16-way anziché 8-way).

La modalità operativa dei multiprocessori streaming è la seguente: ad ogni ciclo si effettua un'operazione di lettura di un warp dal front end, che lancia l'esecuzione di un'istruzione. Per applicare l'istruzione a tutti i 32 thread del warp, il back end impiega quattro cicli, ma siccome opera a frequenza doppia del front end, possiamo dire che ne impiega solo due. Quindi, per evitare che il front end rimanga inutilizzato per un ciclo e per massimizzare l'uso dell'hardware, l'ideale è alternare il tipo di istruzione a ogni ciclo - un'istruzione classica per un ciclo e un'istruzione SFU per l'altro.

Ogni multiprocessore dispone di una certa quantità di risorse, che dovrebbe essere conosciuta per farne il miglior uso possibile. C'è una piccola quantità di memoria chiamata "Shared Memory", equivalente a 16 Kb per multiprocessore: non si tratta di una memoria cache in senso classico, perché il programmatore ha pieno controllo di gestione su questa memoria. È come il Local Store dell'SPU di un processore Cell. Questo dettaglio è particolarmente interessante, e dimostra che CUDA è veramente un set di tecnologie hardware e software.