Perché usare SIMD se abbiamo GPGPU?


13

Ho pensato che questa domanda fosse meglio servita nella parte CS di Stack Exchange. Ora che abbiamo GPGPU con lingue come CUDA e OpenCL, le estensioni SIMD multimediali (SSE / AVX / NEON) hanno ancora uno scopo?

Di recente ho letto un articolo su come utilizzare le istruzioni SSE per accelerare le reti di smistamento. Ho pensato che fosse abbastanza pulito ma quando ho detto al mio professore di arch arch ha riso e ha detto che l'esecuzione di un codice simile su una GPU avrebbe distrutto la versione SIMD. Non ne dubito perché SSE è molto semplice e le GPU sono grandi acceleratori molto complessi con molto più parallelismo, ma mi ha fatto pensare, ci sono molti scenari in cui le estensioni SIMD multimediali sono più utili dell'uso di una GPU?

Se le GPGPU rendono il SIMD ridondante, perché Intel dovrebbe aumentare il supporto SIMD? SSE era di 128 bit, ora è di 256 bit con AVX e l'anno prossimo sarà di 512 bit. Se le GPGPU elaborano meglio il codice con il parallelismo dei dati, perché Intel sta spingendo queste estensioni SIMD? Potrebbero essere in grado di mettere le risorse equivalenti (ricerca e area) in un predittore di cache e filiali più grande, migliorando così le prestazioni seriali.

Perché usare SIMD invece di GPGPU?


2
È di per sé una sfida alimentare la GPU con dati sufficienti per tenerlo occupato. Il trasferimento di dati tra l'host e il dispositivo è praticamente sempre il collo di bottiglia. Alcune operazioni sono supportate meglio sulle CPU (ad es. Moltiplicazione senza trasporto; vedere PCLMULQDQ).
Juho,

2
@Juho I nuovi dispositivi come le APU AMD non hanno la GPU e la CPU sullo stesso die? Questo elimina il collo di bottiglia?
jonfrazen,

1
Quando tutto è detto e fatto, un'istruzione vettoriale è ancora una singola istruzione e il costo per programmarla ed eseguirla è uguale a qualsiasi altra singola istruzione. Ha senso eseguire i lavori sulla GPU solo quando i vantaggi superano i costi. Considera anche che ottieni un'unità SIMD per core, ma in genere solo una GPU per chassis e al momento la GPU è una risorsa condivisa. Ciò limita il numero di lavori che è possibile eseguire su una GPU. (Il numero di core è in costante aumento, ma il numero di GPU non lo è.)
Pseudonimo

Intel non fa molto in termini di GPU (a parte Larrabee / Knights Landing :)), quindi suppongo sia naturale per loro provare a spingere AVX. Sebbene un uso intenso di AVX possa essere molto performante, ora si traduce in downclocking sulle loro nuove CPU, quindi potrebbero avere dei limiti con qualcosa.
nsandersen,

Risposte:


16

Niente è gratuito. Le GPGPU sono SIMD. Le istruzioni SIMD sulle GPGPU tendono ad essere più ampie delle istruzioni SIMD sulle CPU. Le GPGPU tendono ad essere multi-thread a grana fine (e hanno molti più contesti hardware rispetto alle CPU). Le GPGPU sono ottimizzate per lo streaming . Tendono a dedicare una percentuale maggiore di area a unità in virgola mobile, una percentuale inferiore di area da memorizzare nella cache e una percentuale inferiore di area a prestazioni intere.

Facciamo un confronto. Il core i7-5960x di Intel ha 8 core, ciascuno con SIMD a 4 (doppia precisione) a 4 GHz (3,5 GHz turbo), una cache L3 da 20 M, consuma 356 mm ^ 2 e 140 W e costa $ 1000. Quindi 8 * 4 * 3 * 4 = 384 GFlop a doppia precisione. (Il 4x extra è perché puoi fare due aggiunte fuse-moltiplicare per corsia vettoriale per ciclo.) Può fare 768 GFlop di precisione singola. Sono circa 1,08 DPF GFlops / mm ^ 2 e 2,75 DP GFlop / Watt. C'è anche circa 57,5 ​​KB / mm ^ 2 di cache su chip.

La GeForce GTX Titan Black di NVidia ha 15 SMX, ciascuna con SIMD a doppia precisione da 32 pollici, a 890 MHz (980 MHz turbo), 3,5 M di cache L1 + L2, consuma 561 mm ^ 2, 250 W e costa $ 1000. Quindi 15 * 32 * .89 * 4 = 1709 GFlop a doppia precisione. (Stesso 4x di due aggiunte fuse-moltiplicate per corsia vettoriale per ciclo.) Può eseguire 5126 GFlop di precisione singola. Sono circa 3.05 DPF GFlops / mm ^ 2 e 6.8 DP GFlop / Watt. Quindi 3 volte la densità in virgola mobile DP per unità di superficie e 3 volte l'efficienza energetica in virgola mobile DP. E il compromesso? 6,4 KB / mm ^ 2 di cache su chip. Circa 9 volte meno denso della CPU.

Quindi la differenza principale è che la GPU ha scelto un bilanciamento dell'area che favorisce fortemente il virgola mobile (e in particolare il virgola mobile a precisione singola) rispetto alla cache. Anche ignorando il fatto che è necessario copiare elementi avanti e indietro tra la CPU e la GPU per eseguire l'I / O, la capacità della GPU rispetto alla CPU dipende dal programma in esecuzione.

Se hai un programma in virgola mobile con dati paralleli con pochissima divergenza di controllo (tutte le corsie vettoriali stanno facendo la stessa cosa allo stesso tempo) e il tuo programma è in streaming (non può beneficiare della memorizzazione nella cache), allora la GPU sarà circa 3 volte più efficiente per unità di superficie o per Watt. Ma se hai una quantità significativa di controllo divergente, lavori non paralleli ai dati da svolgere o potresti trarre vantaggio da grandi strutture di dati letti molte volte, la CPU probabilmente farà meglio.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.