2015-07-16 28 views
9

Ho letto che CUDA può leggere dalla memoria globale 128 byte alla volta, quindi ha senso che ogni thread in un ordito possa leggere/scrivere 4 byte in un modello coalescente per un totale di 128 byte.Perché i tipi di vettore CUDA (int4, float4) sono più veloci?

Lettura/scrittura con i tipi di vettore come int4 e float4 è faster.

Ma quello che non capisco perché questo è. Se ogni thread nel warp richiede 16 byte e solo 128 byte possono spostarsi sul bus alla volta, da dove viene il guadagno di prestazioni?

È perché ci sono meno richieste di memoria che accadono, cioè si dice "prendi 16 byte per ogni thread in questo warp" una volta, opposto a "prendi 4 byte per ogni thread in questo ordito" 4 volte? Non riesco a trovare nulla nella letteratura che dice il motivo esatto per cui i tipi di vettore sono più veloci.

risposta

5

Il tuo ultimo paragrafo è fondamentalmente la risposta alla tua domanda. Il miglioramento delle prestazioni proviene da una maggiore efficienza, in due modi

  1. A livello di istruzione, un carico vettore più parole o memorizzare richiede solo una singola istruzione da emettere, in modo che il byte per rapporto istruzione è istruzione superiore e totale la latenza per una particolare transazione di memoria è inferiore.
  2. A livello di controller di memoria, una richiesta di transazione di dimensioni vettoriali di una curvatura genera un throughput di memoria netta maggiore per transazione, quindi il rapporto byte per transazione è più alto. Un numero inferiore di richieste di transazione riduce la contesa del controller di memoria e può produrre un utilizzo più ampio della larghezza di banda della memoria generale.

in modo da ottenere una maggiore efficienza sia a controllo multiprocessore e la memoria utilizzando le istruzioni di memoria vettore, rispetto al rilascio di singole istruzioni che producono transazioni memoria individuale per ottenere la stessa quantità di byte dalla memoria globale

3

È avere una risposta esaustiva per la domanda nel blog Parallel4All: http://devblogs.nvidia.com/parallelforall/cuda-pro-tip-increase-performance-with-vectorized-memory-access/

Il motivo principale è meno aritmetica dell'indice per byte caricato nel caso in cui vengano utilizzati carichi vettoriali.

C'è un altro - più carichi in volo, che aiuta a saturare la larghezza di banda della memoria in caso di occupazione ridotta.

+0

Sebbene questo collegamento possa rispondere alla domanda, è meglio includere qui le parti essenziali della risposta e fornire il link per riferimento. Le risposte di solo collegamento possono diventare non valide se la pagina collegata cambia. – Luke

+0

Grazie, l'ho appena fatto. –

Problemi correlati