Perché le persone usano le GPU per il calcolo ad alte prestazioni anziché un chip più specializzato?


105

Da quanto ho capito, le persone hanno iniziato a utilizzare le GPU per il calcolo generale perché sono una fonte extra di potenza di calcolo. E sebbene non siano veloci come CPU per ogni operazione, hanno molti core, quindi possono essere adattati meglio per l'elaborazione parallela rispetto a una CPU. Questo ha senso se possiedi già un computer che ha una GPU per l'elaborazione grafica, ma non hai bisogno della grafica e desideri un po 'più di potenza computazionale. Ma capisco anche che le persone acquistano GPU appositamente per aggiungere potenza di calcolo, senza intenzione di usarle per elaborare la grafica. A me questo sembra simile alla seguente analogia:

Devo tagliare la mia erba, ma il mio tosaerba è sfigato. Quindi rimuovo la gabbia dal ventilatore della scatola che tengo nella mia camera da letto e affilare le pale. Lo installo sul mio rasaerba e trovo che funzioni abbastanza bene. Anni dopo, sono il responsabile degli acquisti di una grande azienda di cura del prato. Ho un budget considerevole da spendere per attrezzi da taglio. Invece di acquistare tosaerba, compro un sacco di fan box. Ancora una volta, funzionano bene, ma devo pagare per parti extra (come la gabbia) che non finirò per usare. (ai fini di questa analogia, dobbiamo presumere che i tosaerba e i ventilatori box costino circa lo stesso)

Quindi perché non esiste un mercato per un chip o un dispositivo che ha la potenza di elaborazione di una GPU, ma non l'overhead grafico? Mi vengono in mente alcune possibili spiegazioni. Quale di essi, se presente, è corretto?

  • Un'alternativa del genere sarebbe troppo costosa da sviluppare quando la GPU è già un'opzione eccellente (i tosaerba non esistono, perché non usare questo fan box perfettamente buono?).
  • Il fatto che "G" sia sinonimo di grafica indica solo un uso previsto e non significa in realtà che qualsiasi sforzo venga fatto per rendere il chip più adatto all'elaborazione grafica rispetto a qualsiasi altro tipo di lavoro (i tosaerba e gli appassionati di box sono la stessa cosa quando ci si arriva fino in fondo; non sono necessarie modifiche per far funzionare l'una come l'altra).
  • Le moderne GPU portano lo stesso nome dei loro antichi predecessori, ma oggigiorno quelle di fascia alta non sono progettate per elaborare specificamente la grafica (i moderni fan box sono progettati per funzionare principalmente come tosaerba, anche se non lo erano quelli più vecchi).
  • È facile tradurre praticamente qualsiasi problema nel linguaggio dell'elaborazione grafica (l'erba può essere tagliata soffiando aria su di essa molto velocemente).

MODIFICARE:

Alla mia domanda è stata data una risposta, ma sulla base di alcuni dei commenti e delle risposte, sento che dovrei chiarire la mia domanda. Non sto chiedendo perché tutti non comprino i propri calcoli. Chiaramente sarebbe troppo costoso per la maggior parte del tempo.

Ho semplicemente osservato che sembra esserci una richiesta di dispositivi in ​​grado di eseguire rapidamente calcoli paralleli. Mi chiedevo perché sembra che tale dispositivo ottimale sia l'unità di elaborazione grafica, al contrario di un dispositivo progettato per questo scopo.


66
Perché sono specializzati per questo tipo di cose; è sostanzialmente lo stesso tipo di matematica. E nVidia ha creato e venduto schede solo per GPU affinché le persone possano eseguire questo tipo di crunching di numeri in parallelo in modo massiccio.
Heptite,

7
Tieni presente che abbiamo aggiunto "unità" specializzate ai chip. AES è fatto in hardware (penso) su CPU. AVX è implementato anche nell'hardware. Tuttavia, dove ti fermi? Il Chipmaker non sa di cosa hai bisogno e la maggior parte delle persone non ha le capacità (tecnologiche o finanziarie) di avere i propri chip progettati per compiti molto specifici. Le schede grafiche sono - come altri hanno detto - un tipo di architettura specializzata, che si presta bene a determinati compiti. Non vanno bene per tutto, ma per determinati compiti specifici e quindi usati lì.
DetlevCM,

4
Un'analogia più accurata avrebbe sostituito i ventilatori a cassa con mietitrebbie agricole larghe 100 metri.
MooseBoys,

6
Il mio PC ha già una GPU pronta all'uso, la progettazione e la produzione di un chip dedicato mi farebbe arretrare di un paio di milioni.
PlasmaHH,

19
Prova un'altra analogia. Supponiamo di avere fan box e di rotori per elicotteri. Nel nostro ipotetico mondo, le applicazioni per i fan delle scatole necessitavano di fan progressivamente più grandi che funzionavano a velocità più elevate, fino a quando non abbiamo finito con i fan dei box da 20 m con pale in fibra di carbonio e la produzione in serie li ha resi economici. Quindi qualcuno ha capito che un ventilatore da 20 m è essenzialmente un rotore per elicotteri con una gabbia attorno. È davvero così simile.
Graham,

Risposte:


109

È davvero una combinazione di tutte le tue spiegazioni. Più economico e più semplice, esiste già e il design si è spostato dalla grafica pura.


Una GPU moderna può essere vista principalmente come processori di streaming con hardware grafico aggiuntivo (e alcuni acceleratori a funzione fissa, ad es. Per codificare e decodificare video). La programmazione GPGPU in questi giorni utilizza API appositamente progettate per questo scopo (OpenCL, Nvidia CUDA, AMD APP).

Nell'ultimo decennio o due, le GPU si sono evolute da una pipeline a funzione fissa (praticamente solo grafica) a una pipeline programmabile ( shader consente di scrivere istruzioni personalizzate) ad API più moderne come OpenCL che forniscono accesso diretto ai core shader senza il pipeline grafica di accompagnamento.

I bit grafici rimanenti sono minori. Sono una parte così piccola del costo della carta che non è significativamente più economico lasciarli fuori e si incorre nel costo di un design aggiuntivo. Quindi questo di solito non viene fatto - non esiste un equivalente orientato al calcolo della maggior parte delle GPU - tranne ai livelli più alti, e quelli sono piuttosto costosi.

Le normali GPU "gaming" sono molto comunemente utilizzate perché le economie di scala e la relativa semplicità le rendono economiche e facili da iniziare. È un percorso abbastanza semplice dalla programmazione grafica all'accelerazione di altri programmi con GPGPU. È anche facile aggiornare l'hardware in quanto sono disponibili prodotti più recenti e più veloci, a differenza delle altre opzioni.


Fondamentalmente, le scelte si riducono a:

  • CPU per uso generico, ideale per diramazioni e codice sequenziale
  • GPU "gaming" normale
  • GPU orientata al calcolo, ad esempio Nvidia Tesla e Radeon Instinct Questi spesso non supportano affatto l'output grafico, quindi la GPU è un po 'impropria. Tuttavia, usano core GPU simili a GPU normali e il codice OpenCL / CUDA / APP è più o meno direttamente portabile.
  • Gli FPGA, che utilizzano un modello di programmazione molto diverso e tendono ad essere molto costosi. È qui che esiste una barriera significativa all'ingresso. Inoltre, non sono necessariamente più veloci di una GPU, a seconda del carico di lavoro.
  • ASIC, circuiti personalizzati (hardware). Questo è molto costoso e ne vale la pena solo con una scala estrema (stiamo parlando almeno di migliaia di unità), e dove sei sicuro che il programma non dovrà mai cambiare. Raramente sono fattibili nel mondo reale. Dovrai anche riprogettare e testare il tutto ogni volta che la tecnologia avanza - non puoi semplicemente scambiare un nuovo processore come puoi fare con CPU e GPU.

16
Gli ASIC hanno anche senso quando l'informatica paga letteralmente per se stessa (cripto mining)
maniaco del cricchetto

4
In realtà, gli FPGA sono spesso peggiori di quelli della GPU. Il problema è che gli FPGA sono molto flessibili; possono implementare molte diverse operazioni. Tuttavia, il calcolo è generalmente una forma di matematica, e in effetti la maggior parte sono solo due operazioni: addizione e moltiplicazione (sottrazione e divisione sono varianti di quanto sopra). Le GPU sono molto, molto brave in queste due operazioni, molto più delle FPGA.
Salterio

19
Devi chiarire di più sugli FPGA. L'idea che ci sia un "passo in avanti" è un po 'fuorviante. Sono più di un passo lateralmente.
Yakk,

6
Come esempio dell'ultimo, Google ha le proprie "unità di elaborazione tensore" per l'apprendimento automatico. In che misura sono personalizzati non è chiaro, ma sono descritti come ASIC.
mbrig,

4
@MSalters Uno dei principali punti di forza degli FPGA rispetto alle GPU è rappresentato dalle prestazioni / Watt, che sta diventando sempre più importante quando i data center iniziano a colpire il muro di potere (gli FPGA sono generalmente più efficienti). Per quanto riguarda la matematica, gli FPGA sono paragonabili alle GPU nell'aritmetica a punto fisso e intero e sono solo in ritardo nella matematica a virgola mobile.
Wilcroft,

32

La mia analogia preferita:

  • CPU : un genio di Polymath. Può fare una o due cose alla volta, ma quelle cose possono essere molto complesse.
  • GPU : un sacco di lavoratori scarsamente qualificati. Ognuno di loro non può fare grossi problemi, ma in massa si può fare molto. Alla tua domanda, sì, c'è qualche sovraccarico grafico ma credo che sia marginale.
  • ASIC / FPGA : un'azienda. Puoi assumere un sacco di lavoratori scarsamente qualificati o un paio di geni, o una combinazione di lavoratori scarsamente qualificati e geni.

Quello che usi dipende dalla sensibilità ai costi, dal grado di parallelismo di un'attività e da altri fattori. A causa del modo in cui il mercato ha funzionato, le GPU sono la scelta migliore per la maggior parte delle applicazioni altamente parallele e le CPU sono la scelta migliore quando potenza e costi unitari sono le preoccupazioni principali.

Direttamente alla tua domanda: perché una GPU su un ASIC / FPGA? Generalmente costo. Anche con i prezzi gonfiati della GPU di oggi, è ancora (generalmente) più economico usare una GPU che progettare un ASIC per soddisfare le tue esigenze. Come sottolinea @ user912264, ci sono attività specifiche che possono essere utili per ASIC / FPGA. Se hai un compito unico e trarrai vantaggio dalla scala, può valere la pena progettare un ASIC / FPGA. In effetti, è possibile progettare / acquistare / concedere in licenza progetti FPGA appositamente per questo scopo. Questo viene fatto per alimentare i pixel in TV ad alta definizione, ad esempio.


7
I commenti non sono per rispondere comunque, e questa mi sembra una risposta ragionevole.
Raimund Krämer,

1
@BobtheMogicMoose Ma è possibile che ordini di grandezza più veloci utilizzino un FPGA personalizzato progettato per l'analisi genomica piuttosto che avere il codice equivalente in una GPU. Quando paghi gli scienziati per aspettare i risultati, l'FPGA più veloce si ripaga da solo molto rapidamente.
doneal24,

Gli FPGA stanno diventando molto più accessibili anche allo sviluppatore comune, ad esempio Microsoft ha una soluzione di cloud AI che utilizza FPGA (Project BrainWave). AWS ha anche alcune offerte. Chiunque può noleggiare alcuni FPGA personalizzati per attività specializzate senza doverlo costruire da soli, non fattibile per molti casi d'uso anche pochi anni fa.
brichins,

Sì, penso che ci siano persino kit hobby FPGA che sono paragonabili a un arduino raspberry-pi. Penso ancora che programmare FPGA sia molto più costoso di architetture più sviluppate.
BobtheMagicMoose l'

10

La tua analogia è cattiva. In analogia, quando si acquistano attrezzature per una grande azienda di cura del prato, si presume che siano disponibili buoni tosaerba. Questo non è il caso nel mondo dell'informatica: le GPU sono lo strumento migliore prontamente disponibile.

I costi di ricerca e sviluppo e i possibili miglioramenti delle prestazioni per un chip specializzato sono probabilmente troppo elevati per giustificarne la realizzazione.

Detto questo, sono a conoscenza del fatto che Nvidia ha lanciato alcune GPU appositamente per il calcolo per scopi generici - non avevano uscite video - un po 'come vendere fan box con le gabbie già rimosse.


9

Ovviamente, puoi usare chip specializzati, sia per l'efficienza energetica che per la velocità di calcolo. Lascia che ti racconti la storia del mining di Bitcoin:

  • Bitcoin è nuovo, i miei smanettoni con le loro CPU.
  • Bitcoin è un po 'nuovo, il mio geek intelligente con le sue GPU.
  • Bitcoin è ora (un po ') famoso, la gente compra FPGA.
  • Bitcoin è ora famoso (2013), anche i neofiti acquistano ASIC ("Circuiti integrati specifici per l'applicazione") per estrarre in modo efficiente.
  • Blocca le ricompense (periodicamente), anche i vecchi ASIC non sono più redditizi.

Quindi no, non ci sono ragioni per usare una GPU invece di un "calcolatore gigante" specializzato. Maggiore è l'incentivo economico, più l'hardware si specializza. Tuttavia, sono piuttosto difficili da progettare e non realizzabili se non ne produci migliaia contemporaneamente. Se non è valida per la progettazione di circuiti integrati, è possibile acquistare uno di quelli dal più vicino Walmart.

TL; DR Naturalmente puoi usare chip più specializzati.


1
"Ovviamente puoi usare chip più specializzati" - ma ci sono chip specializzati per bitcoin (SHA-256), quindi per litecoin (scrypt) e questo è praticamente tutto. Non esiste hardware di elaborazione ad alte prestazioni per altri problemi. (Cioè, con prestazioni superiori alle attuali GPU di fascia alta)
Agent_L

8

Quello che descrivi nella tua analogia è esattamente quello che è successo. Proprio quando hai afferrato il tuo ventilatore e affilato le pale per provare a usarlo come un tosaerba, un gruppo di ricerche ha realizzato "Ehi, qui abbiamo una bella unità di elaborazione multi-core, proviamo ad usarla per calcoli per scopi generici! ".

Il risultato è stato buono e la palla ha iniziato a rotolare. La GPU è passata da un dispositivo esclusivamente grafico a supporto del calcolo per scopi generici per assistere nelle situazioni più impegnative.

Perché comunque l'operazione più impegnativa dal punto di vista computazionale che ci aspettiamo dai computer è la grafica. È abbastanza per dare un'occhiata agli incredibili progressi di come appaiono oggi i giochi rispetto a come hanno fatto solo pochi anni fa. Ciò significa che sono stati fatti molti sforzi e denaro nello sviluppo delle GPU e il fatto che potrebbero anche essere usati per accelerare una certa classe di calcolo per scopi generici (cioè estremamente paralleli) ha appena aggiunto alla loro popolarità.

Quindi, in conclusione, la prima spiegazione che offri è la più accurata:

  • Una simile alternativa sarebbe troppo costosa da sviluppare quando la GPU è già un'opzione eccellente.

Le GPU erano già lì, sono prontamente disponibili a tutti e hanno funzionato.


5
Devo essere in disaccordo sul fatto che "l'operazione più impegnativa dal punto di vista computazionale" sia la grafica, a seconda ovviamente di chi "siamo". Per gli utenti generici, sì, ma nella comunità scientifica e ingegneristica, ci sono molte cose più impegnative della grafica. Dopotutto, la grafica accettabile (come per i giochi) può essere fatta con una singola combinazione di PC e GPU di fascia media. Problemi significativi spesso combinano centinaia o migliaia di tali unità per ottenere prestazioni nella gamma petaflop - e quindi i problemi possono richiedere ancora giorni o settimane di tempo di calcolo.
jamesqf,

L'operazione più impegnativa dal punto di vista computazionale che mi aspetto dal mio computer è tecnicamente grafica, ma i calcoli struttura dal movimento non sono ciò a cui pensa la maggior parte delle persone (o dei progettisti di GPU) quando sentono la parola "grafica".
Segna il

5

In particolare, le GPU non sono "core" nel senso di "parallelismo delle attività". Per la maggior parte, si presenta sotto forma di "parallelismo dei dati". SIMD è "dati multipli per singola istruzione". Ciò significa che non lo faresti:

for parallel i in range(0,1024): c[i] = a[i] * b[i]

Ciò significherebbe che hai 1024 puntatori di istruzioni che eseguono attività separate procedendo a velocità diverse. SIMD o "calcolo vettoriale" eseguirà le istruzioni su interi array contemporaneamente, più come questo:

c = a * b

I "loop" si trovano nelle istruzioni "*" e "=", anziché all'esterno delle istruzioni. Quanto sopra farebbe questo per tutti i 1024 elementi contemporaneamente, nel puntatore dell'istruzione SAME per tutti loro. È come avere tre enormi registri per a, b e c. Il codice SIMD è estremamente limitato e funziona bene solo per problemi che non sono eccessivamente "ramificati".

In casi realistici, questi valori SIMD non sono grandi quanto 1024 elementi. Immagina una variabile che è una banda di int32 legata insieme. Puoi pensare al moltiplicarsi e assegnarlo come una vera istruzione macchina.

int32_x64 c; int32_x64 b; int32_x64 a; c = b * a;

Le GPU reali sono più complicate di SIMD, ma questa è l'essenza di esse. È per questo che non puoi semplicemente lanciare un algoritmo CPU casuale su una GPU e aspettarti uno speedup. Più ramificano le istruzioni dell'algoritmo, meno è appropriato per una GPU.


5

Le altre risposte qui sono abbastanza buone. Aggiungerò anche i miei 2 centesimi.

Uno dei motivi per cui le CPU sono diventate così pervasive è che sono flessibili. Puoi riprogrammarli per un'infinita varietà di attività. Al giorno d'oggi è più economico e più veloce per le aziende che producono prodotti attaccare una piccola CPU o un microcontrollore in qualcosa e programmare la sua funzionalità piuttosto che sviluppare circuiti personalizzati per fare lo stesso compito.

Utilizzando lo stesso dispositivo di altri, è possibile sfruttare le soluzioni note ai problemi utilizzando lo stesso dispositivo (o simile). E man mano che la piattaforma matura, le tue soluzioni si evolvono e diventano molto mature e ottimizzate. Anche le persone che codificano su questi dispositivi acquisiscono esperienza e diventano molto brave nel loro mestiere.

Se dovessi creare un nuovo tipo di dispositivo da zero, un'alternativa a una GPU, ci vorrebbero anni anche per i primi utenti a diventare effettivamente bravi a saperlo usare. Se si collega un ASIC alla CPU, come si ottimizza il calcolo dell'offloading su quel dispositivo?

La comunità dell'architettura informatica è stata in fermento con questa idea per diversi anni (ovviamente è stato popolare prima, ma ha recentemente visto un rinascimento). Questi "acceleratori" (il loro termine) hanno vari gradi di riprogrammabilità. Il problema è: in che misura definisci l'ambito del problema che il tuo acceleratore può affrontare? Ho anche parlato con alcune persone che stavano lavorando creando un acceleratore usando circuiti analogici con amplificatori operazionali per calcolare equazioni differenziali. Ottima idea, ma portata estremamente ristretta.

Dopo che avrai un acceleratore funzionante, le forze economiche decideranno il tuo destino. L'inerzia del mercato è una forza incredibile. Anche se qualcosa è un'ottima idea, è economicamente fattibile il refactoring delle soluzioni di lavoro per utilizzare questo nuovo dispositivo? Forse sì forse no.

Le GPU sono in realtà orribili per alcuni tipi di problemi, quindi molte persone / aziende stanno lavorando su altri tipi di dispositivi. Ma le GPU sono già così radicate, i loro dispositivi diventeranno mai economicamente sostenibili? Immagino che vedremo.

Modifica: espandendo un po 'la mia risposta, ora che sono fuori dal bus.

Un caso di cautela è il progetto Intel Larrabee. È iniziato come un dispositivo di elaborazione parallelo che poteva fare grafica nel software; non aveva hardware grafico specializzato. Ho parlato con qualcuno che ha lavorato al progetto, e uno dei motivi principali per cui hanno detto che è fallito e che è stato cancellato (oltre all'orribile politica interna) è che non sono riusciti a convincere il compilatore a produrre un buon codice per esso. Naturalmente ha prodotto un codice funzionante, ma se l'intero punto del tuo prodotto è il massimo delle prestazioni, è meglio avere un compilatore che produca un codice piuttosto ottimale. Ciò rievoca il mio precedente commento sulla mancanza di una profonda competenza sia hardware che software per il tuo nuovo dispositivo, essendo un grosso problema.

Alcuni elementi del design Larrabee sono diventati Xeon Phi / Intel MIC. Questo prodotto è effettivamente arrivato sul mercato. Era interamente focalizzato sulla parallelizzazione di calcoli scientifici e di altro tipo di HPC. Sembra che ora sia un fallimento commerciale. Un'altra persona con cui ho parlato a Intel ha insinuato che non erano competitivi rispetto al prezzo / prestazioni con le GPU.

Le persone hanno cercato di integrare la sintesi logica per FPGA nei compilatori, in modo da poter generare automaticamente il codice per gli acceleratori FPGA. Non funzionano così bene.

Un posto che sembra essere un terreno davvero fertile per gli acceleratori, o altre alternative alle GPU, è il cloud. L'economia di scala esistente in queste grandi aziende come Google, Amazon e Microsoft rende utile investire in schemi di calcolo alternativi. Qualcuno ha già menzionato le unità di elaborazione tensore di Google. Microsoft ha FPGA e altre cose in tutta la sua infrastruttura Bing e Azure. Stessa storia con Amazon. Ha assolutamente senso se la bilancia può compensare il tuo investimento in tempo, denaro e lacrime degli ingegneri.

In sintesi, la specializzazione è in contrasto con molte altre cose (economia, maturità della piattaforma, competenza ingegneristica, ecc.). La specializzazione può migliorare significativamente le tue prestazioni, ma restringe l'ambito a cui il tuo dispositivo è applicabile. La mia risposta si è concentrata su molti aspetti negativi, ma anche la specializzazione ha molti benefici. Dovrebbe assolutamente essere perseguito e indagato e, come ho già detto, molti gruppi lo perseguono in modo piuttosto aggressivo.

Scusa, modifica di nuovo: penso che la tua premessa iniziale sia sbagliata. Credo che sia stato meno un caso di ricerca di risorse extra di potenza di calcolo, e più un caso di persone che riconoscono un'opportunità. La programmazione grafica è algebrica molto lineare e la GPU è stata progettata per eseguire in modo efficiente operazioni comuni come la moltiplicazione di matrici, operazioni vettoriali, ecc. Operazioni che sono anche molto comuni nel calcolo scientifico.

L'interesse per le GPU è iniziato proprio quando le persone hanno capito che le promesse fatte dal progetto Intel / HP EPIC erano enormemente sopravvalutate (fine anni '90, primi anni 2000). Non esisteva una soluzione generale alla parallelizzazione del compilatore. Quindi, piuttosto che dire "dove troviamo più potenza di elaborazione, oh, potremmo provare la GPU", penso che fosse più "abbiamo qualcosa di buono nei calcoli paralleli, possiamo renderlo più generalmente programmabile". Molte delle persone coinvolte erano nella comunità scientifica informatica, che avevano già un codice Fortran parallelo che potevano eseguire su macchine Cray o Tera (Tera MTA aveva 128 thread hardware). Forse c'è stato movimento da entrambe le direzioni, ma ho sentito solo menzioni delle origini della GPGPU da questa direzione.


Per "acceleratori" ti riferisci a hardware personalizzato o super cluster di nodi di elaborazione a bassa potenza? Puoi elaborare fornendo riferimento ad alcuni esempi di hardware dell'acceleratore.
manav mn,

Scusa, pensavo di averlo chiarito dal contesto. Acceleratore è solo un termine generico per un coprocessore o una carta di scarico. Il virgola mobile era originariamente in un coprocessore e non nella CPU principale, e sarebbe stato considerato un acceleratore. GPU, DSP, Xeon Phi, FPGA quando sono su una scheda PCIe o qualcosa di simile, la cosa dell'equazione differenziale analogica che ho menzionato, ci sono dispositivi che aiutano nella virtualizzazione, c'è una ricerca attuale negli acceleratori di reti neurali. Questi sono tutti esempi di acceleratori.
NerdPirate,

4

inserisci qui la descrizione dell'immagine

Un ASIC (silicone personalizzato) è molto veloce, ma è molto costoso da progettare e produrre. L'ASIC era specifico per uno scopo, e la CPU era un approccio che consentiva di "programmare" i computer in modo che le attività di elaborazione potessero essere eseguite dal software. Le prime CPU hanno dato alle persone la possibilità di sfruttare la potenza di ASIC senza i costi enormi programmando il chip sul campo. Questo approccio ha avuto così tanto successo che ha dato origine al computer (molto) veloce che stai usando in questo momento.

Quindi perché GPU?

A metà degli anni '90, 3DFX si rese conto che le attività di rendering 3D erano così specifiche che un ASIC personalizzato avrebbe funzionato MOLTO meglio di una CPU. Hanno creato un coprocessore per computer che ha scaricato le attività di rendering 3D dalla CPU a questo coprocessore, che hanno soprannominato una "GPU". La concorrenza e la domanda del mercato hanno spinto l'innovazione in questo spazio a un punto in cui le GPU eseguivano calcoli MOLTO più velocemente di quelle della CPU, quindi è sorta la domanda: "Perché non posso usare la GPU per sgretolare i miei numeri anziché la CPU?" I produttori di GPU hanno riscontrato una domanda e un modo per guadagnare di più, quindi hanno iniziato a modificare le loro piattaforme per consentire agli sviluppatori di utilizzare il proprio hardware. Ma l'hardware hardware era così specifico allo scopo che c'erano, e ci sono ancora, limitazioni in ciò che si può chiedere alla GPU di fare. Non entrerò nei dettagli sul perché qui.

Quindi perché non c'era un silicio più specifico? Perché solo la grafica?

Due motivi: 1) Prezzo. Le GPU avevano un buon mercato e potevano giustificarlo, ma anche allora, era un rischio enorme. Nessuno sapeva davvero se 3DFX potesse realizzare un profitto (si scopre che in realtà non potevano farlo e andarono in fallimento). Anche adesso, con le dimensioni del mercato GPU, ci sono davvero solo 3 concorrenti. 2) Le CPU stavano effettivamente rispondendo alla necessità di "silicio personalizzato" con estensioni di istruzioni. Ripensa a MMX: questo è stato in realtà il tentativo di Intel di accelerare la grafica nella CPU proprio mentre 3DFX stava guadagnando velocità. Da allora, il set di istruzioni x86 è diventato abbastanza massiccio con tutte queste estensioni personalizzate. Molte di queste estensioni avevano senso all'epoca (come MMX), ma ora sono in gran parte a peso morto nel processore. Tuttavia, non è possibile rimuoverli perché interrompe il software esistente. E' s in realtà uno dei punti di forza di ARM - ARM è un set di istruzioni ridotto. Non ci sono tante estensioni di istruzioni, ma questo rende il silicio più piccolo ed economico da produrre.

Mi sembra che potresti fare un sacco di soldi se potessi ridurre il costo del silicio personalizzato. Nessuno ci sta lavorando?

Esiste una tecnologia chiamata FPGA - array di gate programmabile sul campo, presente sin dai primi tempi dell'informatica. È essenzialmente un microchip che puoi progettare "sul campo" utilizzando il software. È una tecnologia molto interessante, ma tutta la struttura necessaria per rendere programmabile il chip occupa MOLTO silicio e fa funzionare i chip a velocità di clock molto più basse. Gli FPGA POSSONO essere più veloci di quelli della CPU, se hai abbastanza silicio sul chip E puoi parallelizzare efficacemente l'attività. Ma sono limitati in quanta logica puoi mettere su di loro. Tutti tranne gli FPGA più costosi erano più lenti rispetto alle GPU per il mining iniziale di bitcoin, ma le loro controparti ASIC hanno effettivamente chiuso la redditività del mining di GPU. Altre criptovalute hanno utilizzato algoritmi specifici che non possono essere parallelizzati, quindi FPGA e ASIC '

Il principale limitatore con FPGA è la dimensione del silicio: quanta logica è possibile inserire nel chip? Il secondo è la velocità di clock, perché è difficile ottimizzare cose come hot spot, perdite e cross-talk in un FPGA. I metodi di fabbricazione più recenti hanno minimizzato questi problemi e Intel ha collaborato con Altera per fornire un FPGA che può essere utilizzato dagli ingegneri per sfruttare i vantaggi del "silicio personalizzato" come coprocessore in un server. Quindi sta arrivando, in un certo senso.

Gli FPGA sostituiranno mai CPU e GPU?

Probabilmente non presto. Le ultime CPU e GPU sono MASSIVE e il silicio altamente ottimizzato per le prestazioni termiche ed elettriche. Non è possibile ottimizzare FPGA nello stesso modo in cui è possibile un ASIC personalizzato. Escludendo una tecnologia rivoluzionaria, la CPU rimarrà probabilmente il cuore del tuo computer con coprocessori FPGA e GPU.


1
Molte di queste estensioni avevano senso all'epoca (come MMX), ma ora sono in gran parte a peso morto nel processore. Il rendering 3D è tutt'altro che l'unico caso d'uso per SIMD. Gran parte del "peso" di MMX è costituito dalle unità di esecuzione, che possono essere condivise con un vettore più ampio come SSE2, AVX2 e AVX512. Questi sono ampiamente utilizzati per la codifica video di alta qualità su CPU e molte altre attività, tra cui l'elaborazione ad alte prestazioni. Ma anche implementazioni di librerie di memchr, strlen e molte altre cose. ad esempio, filtrando un array più di 1 elemento alla volta
Peter Cordes,

3

In effetti ci sono schede specializzate per il calcolo ad alta velocità, ad esempio Xilinx ha un elenco di 178 schede PCI-e che utilizzano i loro FPGA, e circa un terzo di queste schede sono "cruncher numerici" con uno o più potenti chip FPGA e un sacco di on- memoria DDR della scheda. Esistono anche schede DSP ad alte prestazioni ( esempio ) destinate ad attività di elaborazione ad alte prestazioni.

Immagino che la popolarità delle schede GPU derivi dal loro obiettivo per un più ampio gruppo di clienti. Non devi investire in hardware speciale per giocare con Nvidia CUDA, quindi quando avrai un compito che richiede hardware speciale, le GPU Nvidia avranno un vantaggio competitivo in quanto sai già come programmarle.


2

Penso che la risposta alla tua domanda dipenda da come definire il calcolo ad alte prestazioni.

In generale, il calcolo ad alte prestazioni è correlato al tempo di calcolo. In tal caso, mi piace condividere il collegamento del cluster di elaborazione ad alte prestazioni .

Nel collegamento viene specificato il motivo di utilizzo della GPU; L'uso di schede grafiche (o meglio delle loro GPU) per eseguire calcoli per il grid computing è di gran lunga più economico rispetto all'utilizzo della CPU, nonostante sia meno preciso.


2
Le GPGPU di fascia alta hanno un buon throughput per la doubleprecisione a 64 bit , non solo per la precisione singola a 32 bit float. (Alcune GPU regolari risparmiano su HW per double). Tutti i principali fornitori supportano la matematica IEEE FP (penso anche con i denormals). Quindi non c'è perdita di precisione a meno che tu non voglia scambiare precisione per prestazioni, ad es. Con FP a mezza precisione a 16 bit che ha un throughput ancora migliore su alcuni hardware (e ovviamente metà della larghezza di banda della memoria). Il codice ad alte prestazioni sulle CPU utilizza spesso anche 32 bit float, per ottenere il doppio degli elementi per vettore SIMD e metà della larghezza di banda della memoria.
Peter Cordes,

1
@PeterCordes Ho visto un po 'di lavoro nel calcolo approssimativo che arriva persino a virgola mobile a otto bit, anche se non credo che molte GPU lo supportino nell'hardware.
JAB,
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.