GF100 è orientata in modo esplicito verso il GPU Computing e, a differenza di GT200 che era solo una evoluzione di G80, la nuova architettura è stata riprogettata al fine di migliorare le performance, non solo in ambito videoludico, ma focalizzandosi anche sul mondo business. La stretta collaborazione con molte università e centri di ricerca ha portato allo studio di specifiche ottimizzazioni concretizzatesi in un miglioramento delle performance in ambito GP-GPU che, con le dovute limitazioni della tecnologia attuale, sono state integrate in GF100:

  • Miglioramento delle prestazioni nel calcolo a doppia precisione: le maggior parte della computazione video è eseguita in singola precisione, l’occhio umano difficilmente riuscirebbe a scorgere piccoli errori in un’immagine ad alta risoluzione tuttavia, per utilizzare le GPU in ambito scientifico, la singola precisione non è sufficiente, si è quindi lavorato per migliorare le prestazioni in doppia precisione, tallone di Achille di ogni GPU moderna che generalmente riduce di un quarto o più la sua potenza di calcolo in questa modalità. (32 CUDA Cores per Streaming Multiprocessor, 4x rispetto a GT200, 8x rispetto a GT200 in calcolo a doppia precisione, Full IEEE 754-2008 32-bit e 64-bit)

  • Supporto ECC: nell'ottica di complesse elaborazioni è importante che i dati in memoria/cache siano coerenti e non presentino errori indotti da fattori esterni, quali interferenze o difetti di qualche componente. La tecnologia ECC permette di individuare un eventuale errore dei dati e, se possibile, correggerlo al fine di completare l’elaborazione; GF100 è la prima GPU ad integrare una logica di controllo di errore.

  • Gerarchia di memoria cache: alcuni algoritmi paralleli non possono lavorare sulle GPU perché, l’assenza di una memoria cache ad alta velocità, impedisce l’accesso ai dati necessari per la computazione. NVIDIA ha quindi integrato in GF100 fino a 64 KB di cache L1, configurabile secondo le esigenze del programmatore e ha esteso la memoria cache condivisa oltre i 16 KB presenti nelle passate generazioni di GPU (la retrocompatibilità è però stata mantenuta). (NVIDIA Parallel DataCache con memoria cache L1 e memoria L2 unficata configurabile dall’utente)

  • Miglioramento della velocità nel cambio di contesto: tutte le GPU NVIDIA, da 3 generazioni a questa parte, possono operare sia in modalità CUDA (calcolo) che Grafica (DirectX, OpenGL, etc); con GF100 il cambio di contesto di elaborazione è stato velocizzato, rendendo possibile l’uso di tutte le tecnologie supportate contemporaneamente con un ridotto impatto sulle prestazioni. (NVIDIA GigaThread Engine, fino a 10x più veloce nel cambio di contesto, esecuzione concorrente di più kernel)

  • Operazioni atomiche: una delle lacune di G80 era l’assenza delle operazioni atomiche, queste sono state introdotte in G92 e in GF100 sono state velocizzate. Le operazioni atomiche sono operazioni che bloccano l’area di memoria in uso al fine di rendere annullabile la modifica o di confermarla, senza necessità di ulteriori azioni da parte del programmatore per ovviare ai problemi di concorrenza.

NVIDIA GeForce GTX 480 e GTX 470 testate per voi 2. GF100 per GP-GPU - Parte 1 1 

I 16 Streaming Multiprocessor sono posizionati attorno alla cache L2 comune. Ogni SM è caratterizzato da uno scheduler e dispathcher (in arancione), dalle unità di elaborazione (in verde) e da registri e cache L1 (in azzurro)


GF100 è stato progettato per operare con 512 CUDA Cores raggruppati in 16 Streaming Multiprocessor collegati attraverso 6 canali a 64bit alla memoria GDDR5 della scheda (bus 384 bit), la GPU è connessa con il sistema con un BUS PCI-Express. Ogni Streaming Multiprocessor (d’ora in poi SM) è caratterizzato da 32 CUDA processor, ognuno di questi integra sia una completa pipeline per la gestione della aritmetica intera (ALU), che una unità di elaborazione floting point (FPU). GF100 integra ALU con supporto a 32bit che può essere esteso a 64bit a seconda delle esigenze del programmatore. Ogni SM è caratterizzato da 16 unità di memorizzazione e caricamento che permettono di gestire fino a 16 thread per ciclo di clock, inviando o recuperando i risultati, sia dalla cache che dalla memoria video. Al fine di svolgere le operazioni più complesse, sono presenti anche quattro unità speciali (Special Function Units o SFU) che possono eseguire operazioni come sen, coseno, reciproco, radice quadrata, etc; quando una unità è occupata, il gestore dei thread può decidere di usarne un’altra in accordo con il carico delle unità rimanenti.


NVIDIA GeForce GTX 480 e GTX 470 testate per voi 2. GF100 per GP-GPU - Parte 1 2 

NVIDIA GeForce GTX 480 e GTX 470 testate per voi 2. GF100 per GP-GPU - Parte 1 3 


Cuore delle ottimizzazioni, per la gestione dei thread, è il Dual Warp Scheduler che permette di gestire due code distinte da inviare alle unità di elaborazione, senza doversi preoccupare ulteriormente di gestire la concorrenza tra le stesse, in quanto è derivata automaticamente dall’ordinamento delle stesse. Purtroppo, in modalità a doppia precisione, questa tecnologia non è sfruttabile.

L’architettura della memoria di Fermi permette di avere un unico spazio di indirizzamento, astraendo dalla locazione fisica dei dati (cache, memoria condivisa, memoria video) e rendendo di fatto possibile l’uso di linguaggi di programmazione più complessi come il C++. L’introduzione del supporto al C++ sulle schede video, rende il porting di molto software ancora più semplice, basti pensare che tutt'oggi è uno dei linguaggi più utilizzati là dove le performance sono una priorità.

All’interno dell’architettura Fermi sono supportati inoltre, OpenCL e DirectCompute, rendendo la scheda una ottima piattaforma di sviluppo per le tre tecnologie GP-GPU attualmente in uso.