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.