2013-10-28 23 views
10

Come funziona la cache L2 in GPU con architettura Kepler in termini di località di riferimento? Ad esempio, se un thread accede a un indirizzo nella memoria globale, supponendo che il valore di tale indirizzo non sia nella cache L2, come viene memorizzato il valore nella cache? È temporale? O ci sono altri valori vicini di quell'indirizzo portati anche alla cache L2 (spaziale)?cache L2 in Kepler

L'immagine sottostante è tratta dal whitepaper NVIDIA.

Picture is from NVIDIA whitepaper

+1

cache L2 è stato introdotto con calcolo capacità 2.0 o superiore e continua ad essere supportato su architettura Kepler. La politica di memorizzazione nella cache utilizzata è LRU (utilizzata meno di recente) e l'intenzione principale era quella di evitare il collo di bottiglia della larghezza di banda della memoria globale. L'avevo letto dal libro "Cuda Application design and development". Non sono sicuro che questo risponda alla tua domanda. –

+3

La cache L1 ha una dimensione di cacheline di 128 byte. La cache L2 ha una dimensione di cacheline di 32 byte. Quindi una miss L2 attiva un carico di 32 byte. Kepler normalmente non ha L1 abilitato per i carichi globali ordinari. –

risposta

10

cache unificata L2 è stato introdotto con calcolo capacità 2.0 o superiore e continua ad essere supportato su architettura Kepler. La politica di memorizzazione nella cache utilizzata è LRU (utilizzata meno di recente) e l'intenzione principale era quella di evitare il collo di bottiglia della larghezza di banda della memoria globale. L'applicazione GPU può mostrare entrambi i tipi di località (temporale e spaziale).

Ogni volta che si verifica un tentativo di lettura di una memoria specifica, nella cache L1 e L2 non viene trovato, quindi caricherà 128 byte dalla riga della cache. Questa è la modalità di default. Lo stesso può essere compreso dal seguente diagramma sul perché il pattern di accesso a 128 bit dà il buon risultato.

enter image description here

+2

Il primo paragrafo del post precedente risponde alla domanda. Riguardo al secondo paragrafo di questa risposta, penso che sia vero solo quando (in modalità predefinita) l'architettura del dispositivo è Fermi. Come @Robert Crovella menziona nei commenti, in Kepler un errore di cache L2 risulta in un carico di 32 byte. Inoltre, penso che il diagramma sia fuorviante. Quando un SM è sottoutilizzato dal basso numero di thread, le richieste di memoria globale più ampie possono saturare la larghezza di banda della memoria globale. Quando la SM diventa più/completamente occupata con più thread, la larghezza di banda della memoria globale può essere saturata anche con carichi a 4 byte. – Farzad

Problemi correlati