Perché stiamo ancora utilizzando CPU anziché GPU?


373

Oggi mi sembra che sulla GPU vengano eseguiti molti calcoli. Ovviamente la grafica è fatta lì, ma usando CUDA e simili, AI, algoritmi di hashing (pensa bitcoin) e altri sono anche fatti sulla GPU. Perché non possiamo semplicemente sbarazzarci della CPU e usare la GPU da sola? Cosa rende la GPU molto più veloce della CPU?


3
come faccio a sapere quali risposte contengono informazioni corrette? Devo aspettare che gli altri rispondano al voto su / giù? Penso di essere stato troppo frettoloso nell'accettare una risposta: O
ell

14
Ci sono alcune risposte recenti a @ell ora, che non contengono "disinformazione". Stanno gradualmente salendo al vertice con voti positivi grazie all'efficiente meccanismo di mercato dello StackExchange meravigliosamente progettato ;-) Suggerirei di aspettare ancora un po 'prima di accettare una risposta. Sembra che tu lo stia facendo con molta prudenza. Questa è una buona domanda, comunque. Potrebbe sembrare ovvio, ma non lo è affatto. Grazie per averlo chiesto!
Ellie Kesselman,

124
Un po 'come chiedere "Se il Boeing 747 è più veloce e più efficiente dal punto di vista dei consumi, perché guidiamo ancora le auto"?
vartec,

7
No, perché non è RISC contro CISC. È uno degli altri fondamenti dell'informatica, leggermente mascherato. È "Perché scarichiamo il lavoro dal processore centrale ai processori I / O?" .
JdeBP,

5
@vartec: penso che un'analogia leggermente migliore potrebbe essere tra autobus e taxi. Se ci sono quaranta persone che vogliono tutti andare dallo stesso posto allo stesso posto, un autobus sarà molto più efficiente. Se ci sono quaranta persone le cui origini e destinazioni desiderate sono ampiamente disperse, anche un singolo taxi può essere buono quanto un autobus, e per il costo del bus si possono avere più taxi.
supercat

Risposte:


388

TL; Risposta DR: le GPU hanno un numero di core di processore molto più elevato rispetto alle CPU, ma poiché ogni core GPU funziona in modo significativamente più lento rispetto a un core CPU e non ha le funzionalità necessarie per i sistemi operativi moderni, non è appropriato per eseguire la maggior parte dell'elaborazione quotidiana computing. Sono più adatti per operazioni ad alta intensità di calcolo come l'elaborazione video e le simulazioni fisiche.


GPGPU è ancora un concetto relativamente nuovo. Le GPU sono state inizialmente utilizzate solo per il rendering della grafica; con l'avanzare della tecnologia, il gran numero di core nelle GPU relative alle CPU è stato sfruttato sviluppando capacità computazionali per le GPU in modo che possano elaborare simultaneamente molti flussi paralleli di dati, indipendentemente da quali dati possano essere. Mentre le GPU possono avere centinaia o addirittura migliaia di processori stream, ognuna funziona più lentamente di un core CPU e ha meno funzioni (anche se sono Turing complete e possono essere programmate per eseguire qualsiasi programma che una CPU può eseguire). Le funzioni mancanti dalle GPU includono interrupt e memoria virtuale, necessari per implementare un sistema operativo moderno.

In altre parole, CPU e GPU hanno architetture significativamente diverse che le rendono più adatte a compiti diversi. Una GPU può gestire grandi quantità di dati in molti flussi, eseguendo operazioni relativamente semplici su di essi, ma non è adatta all'elaborazione pesante o complessa su un singolo o pochi flussi di dati. Una CPU è molto più veloce su base core (in termini di istruzioni al secondo) e può eseguire operazioni complesse su uno o più flussi di dati più facilmente, ma non può gestire in modo efficiente molti flussi contemporaneamente.

Di conseguenza, le GPU non sono adatte a gestire attività che non beneficiano in modo significativo o che non possono essere parallelizzate, comprese molte comuni applicazioni consumer come i word processor. Inoltre, le GPU usano un'architettura sostanzialmente diversa; si dovrebbe programmare un'applicazione appositamente per una GPU affinché funzioni, e sono necessarie tecniche significativamente diverse per programmare le GPU. Queste diverse tecniche includono nuovi linguaggi di programmazione, modifiche a linguaggi esistenti e nuovi paradigmi di programmazione che si adattano meglio all'espressione di un calcolo come operazione parallela che deve essere eseguita da molti processori di stream. Per ulteriori informazioni sulle tecniche necessarie per programmare le GPU, consultare gli articoli di Wikipedia sull'elaborazione dei flussi e l' elaborazione parallela .

Le moderne GPU sono in grado di eseguire operazioni vettoriali e aritmetica in virgola mobile, con le ultime carte in grado di manipolare numeri in virgola mobile a precisione doppia. Frame come CUDA e OpenCL consentono di scrivere programmi per GPU e la natura delle GPU li rende più adatti a operazioni altamente parallelizzabili, come nel calcolo scientifico, in cui una serie di schede di elaborazione GPU specializzate può essere una valida alternativa per un piccolo calcolare il cluster come nei supercomputer personali NVIDIA Tesla . I consumatori con GPU moderne che hanno esperienza con Folding @ home possono usarli per contribuire con i client GPU , che possono eseguire simulazioni di ripiegamento delle proteine ​​a velocità molto elevate e contribuire più lavoro al progetto (assicurati di leggere le FAQin primo luogo, specialmente quelli relativi alle GPU). Le GPU possono anche consentire una migliore simulazione fisica nei videogiochi utilizzando PhysX, accelerare la codifica e la decodifica video ed eseguire altre attività ad alta intensità di calcolo. Sono questi tipi di attività che le GPU sono più adatte a svolgere.

AMD è all'avanguardia nel design di un processore chiamato Accelerated Processing Unit (APU) che combina core di CPU x86 convenzionali con GPU. Questo approccio consente prestazioni grafiche di gran lunga superiori alle soluzioni grafiche integrate nella scheda madre (sebbene non corrispondano a GPU discrete più costose) e consente un sistema compatto, economico con buone prestazioni multimediali senza la necessità di una GPU separata. Gli ultimi processori Intel offrono anche grafica integrata su chip, sebbene le prestazioni della GPU integrata competitiva siano attualmente limitate ai pochi chip con Intel Iris Pro Graphics. Mentre la tecnologia continua ad avanzare, vedremo un crescente grado di convergenza di queste parti una volta separate. AMD prevedeun futuro in cui CPU e GPU sono una cosa sola, in grado di lavorare insieme senza problemi sullo stesso compito .

Tuttavia, molte attività eseguite dai sistemi operativi e dalle applicazioni per PC sono ancora più adatte alle CPU e è necessario molto lavoro per accelerare un programma utilizzando una GPU. Dato che molti software esistenti utilizzano l'architettura x86 e poiché le GPU richiedono diverse tecniche di programmazione e mancano alcune importanti funzionalità necessarie per i sistemi operativi, una transizione generale da CPU a GPU per il calcolo quotidiano è molto difficile.


39
Come questa risposta, penso che la ragione principale sia che non abbiamo buoni linguaggi di programmazione per lo streaming principale per gestire architetture parallele come questa. Abbiamo lottato per decenni per far progredire la programmazione multi-thread e le persone continuano a chiamare "multi-thread". Nonostante che CPU e GPU multi-core siano una realtà, e dovremo inventare nuovi paradigmi di programmazione per far fronte a questo.
Soren,

Vale la pena notare che Intel ha lavorato sull'architettura Larrabee (per troppo tempo) che è essenzialmente un chip con un numero enorme di core x86.
Chris S,

Ottima risposta per discutere i motivi hardware e discutere APU e come cambieranno. Tuttavia, @Soren fornisce un ottimo punto sul lato software. In realtà, è la combinazione dei problemi hardware, dei problemi software e del fatto che le CPU funzionano e quando si sa che qualcosa funziona, è difficile convincere le persone a sostituirlo.
Nich Del

3
"non abbiamo buoni linguaggi di programmazione per il flusso principale per gestire architetture parallele come questa". - Haskell, OCaml, Scheme, F #, Erlang e praticamente qualsiasi altra lingua di programmazione funzionale trattano molto bene il multithreading. Tutti quelli che ho citato sono tradizionali.
BlueRaja - Danny Pflughoeft l'

1
@BlueRaja - siamo a conoscenza di queste lingue, la tua definizione di stream principale deve essere diversa dalla mia :-)
Soren,

252

Cosa rende la GPU molto più veloce della CPU?

La GPU non è più veloce della CPU. CPU e GPU sono progettate con due obiettivi diversi, con diversi compromessi, quindi hanno caratteristiche prestazionali diverse . Alcune attività sono più veloci in una CPU mentre altre sono più veloci in una GPU. La CPU eccelle nel fare manipolazioni complesse su un piccolo insieme di dati, la GPU eccelle nel fare semplici manipolazioni su un ampio insieme di dati.

La GPU è una CPU per scopi speciali, progettata in modo tale che una singola istruzione funzioni su un grande blocco di dati (SIMD / Dati multipli per istruzioni singole), tutti applicando la stessa operazione. Lavorare in blocchi di dati è sicuramente più efficiente che lavorare con una singola cella alla volta perché c'è un sovraccarico molto ridotto nella decodifica delle istruzioni, tuttavia lavorare in blocchi di grandi dimensioni significa che ci sono più unità di lavoro parallele, quindi utilizza molti più transistor implementare una singola istruzione GPU (causando vincoli di dimensioni fisiche, usando più energia e producendo più calore).

La CPU è progettata per eseguire una singola istruzione su un singolo dato il più rapidamente possibile. Poiché deve funzionare solo con un singolo dato, il numero di transistor necessari per implementare una singola istruzione è molto inferiore, quindi una CPU può permettersi di avere un set di istruzioni più ampio, un ALU più complesso, una migliore previsione del ramo, una migliore virtualizzazione architettura e schemi di cache / pipeline più sofisticati. I suoi cicli di istruzione sono anche più veloci.

Il motivo per cui stiamo ancora usando la CPU non è perché x86 è il re dell'architettura della CPU e Windows è scritto per x86, il motivo per cui stiamo ancora usando la CPU è perché il tipo di attività che un SO deve fare, cioè prendere decisioni, viene eseguito in modo più efficiente su un'architettura CPU. Un sistema operativo deve esaminare centinaia di diversi tipi di dati e prendere varie decisioni che dipendono tutte l'una dall'altra; questo tipo di lavoro non si parallelizza facilmente, almeno non in un'architettura SIMD.

In futuro, vedremo una convergenza tra l'architettura della CPU e della GPU poiché la CPU acquisisce la capacità di lavorare su blocchi di dati, ad esempio SSE. Inoltre, poiché la tecnologia di produzione migliora e i chip si riducono, la GPU può permettersi di implementare istruzioni più complesse.


23
Questa è probabilmente la migliore risposta qui. È importante comprendere le differenze fondamentali tra i due paradigmi. Perché le GPU superino le CPU, considerando i carichi di lavoro odierni, significa essenzialmente che una GPU deve trasformarsi in CPU. E quindi la domanda è la risposta.
surfasb,

2
+1 per questa è la risposta migliore. Sia questa che la risposta accettata sono corrette, ma questa spiega molto più chiaramente.

Sono sorpreso che nessuno in questo thread abbia menzionato il sovraccarico dell'invio di dati alla GPU - la larghezza di banda limitata sui bus PCI-Express rende alcune operazioni parallele su una GPU molto più lente di quanto non fossero eseguite sulla CPU. Si può vedere un semplice caso in cui la variazione delle dimensioni di una FFT ha fatto una differenza significativa nelle prestazioni su GPU rispetto alla CPU a causa del sovraccarico di invio di dati, impostazione di un contesto, lettura dei risultati: stackoverflow.com/a/8687732/303612 Operazioni più piccole possono essere eseguite in cache su CPU e la larghezza di banda della memoria è notevolmente superiore all'attuale architettura PCI-E
Dr. Andrew Burnett-Thompson,

1
@ Dr.AndrewBurnett-Thompson: questo perché è irrilevante per la domanda. Attualmente, la GPU è considerata un'unità di elaborazione ausiliaria, ecco perché lo spostamento dei dati da / verso una GPU è necessario e costoso. Se trattiamo la GPU come unità di elaborazione di prima classe, non sarà necessario eseguire il marshalling dei dati tra la memoria principale e la memoria GPU.
Lie Ryan,

1
Non ottimista, non è un sovraccarico di larghezza di banda pari a zero. Se un processore con architettura GPU esegue l'intero spettacolo, non c'è nulla che debba essere spostato, la memoria GPU è la memoria principale. In primo luogo non è necessario parlare delle spese generali di trasferimento perché non vi sono trasferimenti. Questo non è ipotetico, le APU di AMD usano l'HSA (architettura di sistema eterogenea) con memoria principale unificata che consente la copia zero tra CPU e GPU.
Lie Ryan,

75

Mancano le GPU:

  1. Memoria virtuale (!!!)
  2. Mezzi di indirizzamento di dispositivi diversi dalla memoria (ad es. Tastiere, stampanti, memoria secondaria, ecc.)
  3. interrupt

Ti servono per essere in grado di implementare qualcosa come un moderno sistema operativo.

Sono anche (relativamente) lenti a un'aritmetica a doppia precisione (rispetto alla loro prestazione aritmetica a precisione singola) * e sono molto più grandi (in termini di dimensioni del silicio). Le architetture GPU precedenti non supportano le chiamate indirette (tramite i puntatori di funzione) necessarie per la maggior parte della programmazione per scopi generici e le architetture più recenti che lo fanno lentamente. Infine, (come hanno notato altre risposte), per attività che non possono essere parallelizzate, le GPU perdono rispetto alle CPU dato lo stesso carico di lavoro.

EDIT : Si noti che questa risposta è stata scritta nel 2011: la tecnologia GPU è un'area in costante cambiamento. Le cose potrebbero essere molto diverse a seconda della lettura di questo: P

* Alcune GPU non sono lente all'aritmetica a doppia precisione, come le linee Quadro o Tesla di NVidia (generazione Fermi o più recente) o la linea FirePro AMD (generazione GCN o più recente). Ma questi non sono nelle macchine della maggior parte dei consumatori.


@Cicada: hai un riferimento per questo? In ogni caso, anche se ciò è vero, anche l'hardware recente non funzionerà bene in quel caso. (ad es. non avrebbe un vantaggio eccessivo su una CPU e uno svantaggio di consumo energetico)
Billy ONeal

3
Sì, i dispositivi Fermi come hai detto (con CUDA 4.0 e sm_20) supportano i salti indiretti (e quindi i metodi virtuali C ++, l'ereditarietà ecc.).
Angry Lettuce,

544 GigaFLOPS da una GPU di 2 anni da $ 300 è lenta?
Ben Voigt,

2
@Ben: ottieni quel tipo di prestazioni solo in applicazioni parallele ai dati. Le operazioni sequenziali generali sono un gioco di palla completamente diverso. (Questo è solo con tutti i 1600 core su quel chip che corrono in parallelo, eseguendo essenzialmente le stesse istruzioni più e più volte ... e anche quello è teorico piuttosto che effettivo perf)
Billy ONeal

@Billy: Ma questa è la lentezza su una particolare classe di algoritmi, non la lentezza sull'aritmetica a doppia precisione (che è ciò che hai affermato). (E le CPU di solito non raggiungono nemmeno i throughput di riferimento)
Ben Voigt,

37

Una CPU è come un lavoratore che va super veloce. Una GPU è come un gruppo di lavoratori clone che va veloce, ma che devono tutti fare esattamente la stessa cosa all'unisono (con l'eccezione che alcuni cloni possono rimanere inattivi se lo si desidera)

Quale preferiresti avere come collega sviluppatore, un ragazzo super veloce o 100 cloni veloci che non sono in realtà così veloci, ma tutti devono eseguire le stesse azioni contemporaneamente?

Per alcune azioni, i cloni sono piuttosto buoni, ad esempio spazzare il pavimento: ognuno può spazzarne una parte.

Per alcune azioni, i cloni puzzano, ad esempio scrivere il rapporto settimanale - tutti i cloni tranne uno rimangono inattivi mentre un clone scrive il rapporto (altrimenti si ottengono solo 100 copie dello stesso rapporto).


4
Potrei anche avere ... entrambi?
Kevin Panko,

22
@ Kevin: Si, ma avresti bisogno di un computer con sia una CPU e una GPU! Se solo ci fosse una cosa del genere!
Joachim Sauer,

3
Grande analogia. Lo ricorderò.
Mayo,

23

Perché le GPU sono progettate per fare molte piccole cose contemporaneamente e le CPU sono progettate per fare una cosa alla volta. Se il tuo processo può essere reso massicciamente parallelo, come l'hashing, la GPU è più veloce degli ordini di grandezza, altrimenti non lo sarà.

La tua CPU può calcolare un hash molto, molto più velocemente di quanto possa fare la tua GPU - ma il tempo impiegato dalla CPU per farlo, la tua GPU potrebbe essere in parte attraverso diverse centinaia di hash. Le GPU sono progettate per fare molte cose contemporaneamente e le CPU sono progettate per fare una cosa alla volta, ma molto velocemente.

Il problema è che CPU e GPU sono soluzioni molto diverse a problemi molto diversi, c'è un po 'di sovrapposizione ma generalmente ciò che è nel loro dominio rimane nel loro dominio. Non possiamo sostituire la CPU con una GPU perché la CPU è seduta lì facendo il suo lavoro molto meglio di una GPU, semplicemente perché una GPU non è progettata per fare il lavoro, e lo è una CPU.

Una piccola nota a margine, tuttavia, se fosse possibile scartare la CPU e avere solo una GPU, non pensi che la rinomineremmo? :)


Penso che la maggior parte delle CPU moderne siano progettate per fare 2, 4 o 8 cose contemporaneamente.
danielcg,

@ danielcg25: e la maggior parte delle GPU moderne sono progettate per eseguire 256, 512, 1024 cose contemporaneamente (la GTX 680 ha 1536 core CUDA). Ogni singolo core della CPU è concettualmente un'entità distinta, ma questo non è vero per una GPU.
Phoshi,

@ danielcg25: ne sono consapevole, ma un commento con un fraintendimento fondamentale (sebbene intenzionale) della risposta potrebbe essere dannoso se qualcuno la leggesse senza già conoscere l'argomento. "Essere un asino" in questo senso non è molto apprezzato su SE in quanto abbassa il segnale: rapporto di rumore.
Phoshi,

Stavo solo fornendo alcune informazioni. La maggior parte dei computer oggi è in grado di elaborare 2-8 cose contemporaneamente. Alcuni processori possono fare anche di più. Non si avvicina ancora alle GPU che fanno centinaia di cose contemporaneamente.
danielcg,

@ danielcg25: Tuttavia, è un diverso tipo di elaborazione, che è la domanda. Ogni core della CPU è effettivamente separato, lavorando con i propri blocchi di dati e i propri processi. Ciascun core della CPU svolge un'attività diversa e separata l'uno dall'altro e non si ridimensionano linearmente verso l'alto: un octo-core non è due volte più utile di un quad core non è due volte più utile di un dual core. I core GPU, d'altra parte, svolgono la stessa attività su diversi pezzi di dati e si ridimensionano in modo lineare. È ovvio che esistono CPU multi-core, ma questa non è la stessa cosa .
Phoshi,

14

Stai davvero chiedendo perché non stiamo usando GPU come architetture nella CPU?

La GPU è solo una CPU specializzata di una scheda grafica. Prestiamo il calcolo non grafico della GPU perché le CPU per scopi generici non sono all'altezza dell'esecuzione in parallelo e in virgola mobile.

Attualmente stiamo utilizzando architetture CPU diverse (più di tipo GPU). Ad esempio i processori Niagara sono piuttosto multitasking. SPARC T3 eseguirà 512 thread simultanei.


Perché un downvote?
jkj,

3
immagino che l'ultima riga sia semplicemente falsa. In effetti, posso solo pensare a un sistema operativo mainstream solo per x86; e anche quello è stato portato su processori alfa e ARM, ma al momento non sono commercialmente offerti.
Javier,

Ok. Rimossa l'ultima sezione che era mia opinione sul supporto del sistema operativo tradizionale che ostacolava il cambiamento di nuove architetture. Potrebbe non essere nell'ambito della risposta.
jkj,

11

Potrei sbagliarmi orribilmente qui, e sto parlando di poca o nessuna autorità sull'argomento, ma qui va:

  • Credo che ogni unità di esecuzione GPU ("core") abbia uno spazio di indirizzi molto limitato rispetto a una CPU.

  • Le unità di esecuzione GPU non possono gestire la ramificazione in modo efficiente.

  • Le unità di esecuzione GPU non supportano gli interrupt di processo allo stesso modo delle CPU.

Ho sempre pensato che il modo in cui dovevano essere le unità di esecuzione della GPU è qualcosa di simile alle "SPE" di Playstation 3, vogliono ricevere un blocco di dati, eseguire una serie di operazioni sequenziali su di esso e quindi sputare un altro blocco di dati, risciacquo, ripetizione. Non hanno la stessa memoria indirizzabile del "CPE" principale, ma l'idea è di dedicare ogni "SPE" a un compito specifico e sequenziale. L'uscita di un'unità potrebbe alimentare l'ingresso di un'altra unità.

Le unità di esecuzione non funzionano bene se stanno tentando di "analizzare" i dati e prendere un sacco di decisioni in base a quali siano questi dati.

Questi "blocchi di dati" possono far parte di un flusso, ad esempio un elenco di vertici dalla tabella di stato di un gioco, dati MPEG da un disco, ecc.

Se qualcosa non si adatta a questo modello di "streaming", allora hai un compito che non può essere paralizzato in modo efficiente e la GPU non è necessariamente la soluzione migliore per questo. Un buon esempio è l'elaborazione di elementi basati su "eventi esterni" come tastiera, joystick o input di rete. Non ci sono molte cose che non si adattano a quel modello, ma ce ne saranno sempre alcune.


Un buon punto sull'ottimizzazione della previsione del ramo: non l'avrei mai considerato, ma hai ragione.
Jimmy Breck-McKye,

6

Questo è niente di velocità di clock o scopo. Entrambi sono ugualmente in grado di completare la maggior parte, se non tutte le attività; tuttavia alcuni sono leggermente più adatti per alcune attività rispetto ad altri.

C'è stato un argomento molto vecchio sul fatto che sia meglio avere molti core stupidi o un piccolo gruppo di core molto intelligenti. Questo risale facilmente agli anni '80.

All'interno di una CPU ci sono molti possibili calcoli che possono essere fatti. I core più intelligenti sono in grado di eseguire molti calcoli diversi contemporaneamente (un po 'come il multi-core ma non, è complicato; vedi parallelismo a livello di istruzione ). Un core intelligente potrebbe eseguire diversi calcoli contemporaneamente (aggiungere, sottrarre, moltiplicare, dividere, operazione di memoria) ma solo uno alla volta; per questo motivo sono fisicamente più grandi (e quindi molto più costosi) dei nuclei più stupidi.

Un core stupido è molto più piccolo e quindi è possibile aggiungerne di più a un singolo chip ma non è in grado di eseguire altrettanti calcoli simultanei. C'è un buon equilibrio tra molti core stupidi e alcuni core intelligenti.

Le architetture multi-core funzionano bene con la grafica perché i calcoli possono essere facilmente suddivisi su centinaia di core, ma dipende anche dalla qualità del codice e dal fatto che l'altro codice si basi sul risultato di un calcolo.

Questa è una domanda molto più complicata di quanto possa sembrare. Per maggiori informazioni, leggi questo articolo sulla progettazione della CPU:

Microprocessori moderni - Una guida di 90 minuti

http://www.lighterra.com/papers/modernmicroprocessors/


scusate la grammatica scadente e, in generale, lo stile di scrittura sub-par usato in precedenza, non ho preso il mio caffè. è un concetto abbastanza complicato e il link incluso è dove dovresti andare se vuoi capire di più. non la mia cattiva spiegazione
Silverfire,

1
L'ho risolto per te e ho aggiunto anche un link.
bwDraco,

5

Vorrei affrontare un punto sintattico: i termini CPU e GPU sono nomi funzionali non nomi architettonici.

Se un computer dovesse utilizzare una GPU come suo processore principale, diventerebbe una "central processing unit" (CPU) indipendentemente dall'architettura e dal design.


4

È importante tenere presente che non esiste una linea di demarcazione magica nello spazio dell'architettura che rende un processore "centrale" e un altro "grafica". (Beh, alcune GPU potrebbero essere troppo paralizzate per essere del tutto generali, ma quelle non sono quelle di cui stiamo parlando qui.)

La distinzione è uno di come sono installati sulla scheda e quali compiti vengono assegnati a loro. Ovviamente, utilizziamo un processore per scopi generici (o un insieme di processori per scopi generali) per l'utilità di spostamento dati principale e un'unità speciale, parallelizzata e profondamente foderata per le cose (come la grafica) per sfruttarla al meglio.

La maggior parte dei trucchi spettrali che sono stati utilizzati per fare le GPU molto velocemente sono stati sviluppati da persone che cercavano di realizzare CPU più veloci e migliori. Si scopre che Word, Excel, Netscape e molte altre cose per cui le persone usano i loro computer non solo non sfruttano appieno le funzionalità offerte dai chip specializzati in grafica, ma rallentano anche su quelle architetture perché si ramificano molto (molto costoso e lento) cancella la tubazione.


1
Penso che le spese generali della pipeline siano un dettaglio fondamentale che mancano le risposte classificate più alte.
Steve,

2

Il punto centrale dell'esistenza di una GPU era di sollevare la CPU dai costosi calcoli grafici che stava facendo in quel momento.
Combinandoli nuovamente su un singolo processore sarebbe tornato al punto di partenza.


Sì, un passo avanti, due passi indietro.
Randolf Richardson,

2

Per un semplice motivo: la maggior parte delle applicazioni non sono multi-thread / vettorializzate.

Le schede grafiche si basano fortemente sul multi threading, almeno nel concetto.

Confronta un'auto con un solo motore, un'auto con un motore più piccolo per ruota. Con quest'ultima macchina, è necessario comandare tutti i motori, cosa che non è stata presa in considerazione per un punto di vista della programmazione del sistema.

Con AMD Fusion, tuttavia, cambierà il modo in cui avremo bisogno della potenza di elaborazione: sia vettorializzata, sia veloce per un thread.


2

Il motivo per cui stiamo ancora utilizzando le CPU è che sia le CPU che le GPU hanno i loro vantaggi unici. Vedi il mio articolo seguente, accettato in ACM Computing Surveys 2015, che fornisce una discussione conclusiva e completa sull'allontanamento dal "dibattito CPU vs GPU" al "calcolo collaborativo CPU-GPU".

Un sondaggio sulle tecniche di elaborazione eterogenee CPU-GPU


1

Se mettere semplicemente GPU può essere paragonato al rimorchio in macchina. Come al solito il bagagliaio è sufficiente per la maggior parte delle persone, tranne per i casi in cui acquistano qualcosa di veramente grande. Quindi possono aver bisogno di un rimorchio. Lo stesso con la GPU, poiché di solito è sufficiente avere una CPU ordinaria che eseguirà la maggior parte dei compiti. Ma se hai bisogno di alcuni calcoli intensivi in ​​molti thread, allora puoi aver bisogno della GPU


1

gpus sono dei buoni processori stream. puoi pensare all'elaborazione del flusso come a moltiplicare una lunga serie di numeri in sequenza. cpus ha anche capacità di elaborazione del flusso (si chiama estensioni SIMD) ma non è possibile implementare tutta la logica di programmazione come elaborazione del flusso, e i compilatori hanno la possibilità di creare btyecode che dovrebbe utilizzare le istruzioni simd quando possibile.

non tutto è un array di numeri. le immagini e i video sono, forse anche i suoni (ci sono codificatori a cielo aperto qua e là). così gpus può elaborare, codificare e decodificare immagini, video e simili. uno svantaggio è che non puoi scaricare tutto su gpus nei giochi perché creerebbe balbuzie, gpus è impegnato con la grafica e dovrebbe essere il collo di bottiglia nel sistema quando giochi. la soluzione ottimale sarebbe utilizzare pienamente tutti i componenti di un PC. quindi, ad esempio, il motore Physx di NVIDIA, per impostazione predefinita, esegue calcoli sulla CPU quando la GPU è completamente utilizzata.

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.