Confuso sul fatto che la GPU abbia centinaia di processori al suo interno


4

Ho appena iniziato a conoscere il corso di programmazione parallela su Udacity e già sono un po 'confuso. Qui in questo segmento video: https://youtu.be/gbj0oauFFI8?t=52s

Ci viene detto che la GPU media ha migliaia di ALU e centinaia di processori. Sono confuso dalla parte "centinaia di processori". Perché ce ne sono così tanti? Non dovrebbe essere solo uno ...? GPU sta per unità di elaborazione grafica. Una GPU non è come una CPU, un processore con migliaia di ALU al suo interno, MA interamente specializzata per determinati compiti? Come entrano in gioco questi "processori"?

Se sbaglio allora suppongo che ogni processore abbia forse circa 10 (perché 10 * cento CPU = 1000s di ALU) ALU è al suo interno? C'è un layout che posso vedere per poterlo verificare?

Grazie.

Risposte:


4

Un moderno processore grafico è un dispositivo estremamente complesso e può avere migliaia di core di elaborazione. La Nvidia GTX 970 ad esempio ha 1664 core. Questi nuclei sono raggruppati in lotti che lavorano insieme.

Per una scheda Nvidia i nuclei sono raggruppati in lotti di 16 o 32 a seconda dell'architettura sottostante ( Keplero o Fermi) e ciascun nucleo in quel lotto eseguirà lo stesso compito.

La distinzione tra un batch e un core è tuttavia importante perché, sebbene ogni core di un batch debba eseguire la stessa attività, il suo set di dati può essere separato.

L'unità del processore centrale è grande e ha solo pochi core perché è un processore altamente generalizzato in grado di prendere decisioni su larga scala e controllo del flusso. La scheda grafica evita una grande quantità di controllo e logica di commutazione per favorire la possibilità di eseguire un numero enorme di attività in parallelo.

Se insisti per avere una foto per dimostrarla, l'immagine qui sotto (dalla recensione GTX 660Ti Direct CU II TOP ) mostra 5 aree verdi che sono in gran parte simili e conterrebbero diverse centinaia di core ciascuna per un totale di 1344 core attivi suddivisi su ciò che sembra per me essere 15 blocchi funzionali:

inserisci qui la descrizione dell'immagine

Guardando da vicino ogni blocco sembra avere 4 serie di logiche di controllo sul lato che suggeriscono che ciascuno dei 15 blocchi più grandi che puoi vedere ha 4 unità SMX.

Questo ci dà 15 * 4 blocchi di elaborazione (60) con 32 core ciascuno per un totale completo di 1920 core, i loro lotti saranno disabilitati perché non funzionavano correttamente o semplicemente per facilitare la separazione in gruppi di prestazioni diversi. Questo ci darebbe il numero corretto di core attivi.

Una buona fonte di informazioni su come la mappa dei lotti è su Stack Overflow: https://stackoverflow.com/questions/10460742/how-do-cuda-blocks-warps-threads-map-onto-cuda-cores


32 istruzioni simultanee sono ancora follemente veloci, vero? Le CPU di solito possono fare 4 o 8.
Pacerier

@Pacerier ti manca un po 'di matematica. I 32 core sono per unità SMX . L'estremità superiore completamente popolata di questa serie avrebbe 60 unità SMX per un totale di 1920 core disponibili per svolgere la stessa attività in parallelo.
Mokubai

8

Le CPU sono SISD , le GPU sono SIMD .

SISD è l'acronimo di Single Instruction, Single Data. Le CPU sono brave nell'esecuzione di operazioni sequenziali: prendi questo, fallo, spostalo lì, prendine un altro, aggiungili entrambi insieme, scrivi su un dispositivo, leggi la risposta e così via. Eseguono principalmente operazioni semplici che accettano uno o due valori e restituiscono un valore.

SIMD è istruzione singola, dati multipli: la stessa operazione viene eseguita su più set di dati contemporaneamente. Ad esempio, prendere 128 valori X 1 -X 128 , prendere 128 valori Y 1 -Y 128 , moltiplicare i valori corrispondenti in coppie e restituire 128 risultati. Un processore SISD dovrebbe eseguire 128 istruzioni (+ letture / scritture di memoria) perché può moltiplicare solo due numeri contemporaneamente. Il processore SIMD lo fa in pochi passaggi o forse anche in uno se solo 128 numeri si adattano al suo registro.

Le CPU SISD funzionano bene per il calcolo quotidiano perché sono per lo più sequenziali, ma ci sono alcune attività che richiedono lo scricchiolio di grandi quantità di dati in modo simile - ad esempio l'elaborazione di grafica, rendering video, password di cracking, mining di bitcoin ecc. Le GPU consentono una massiccia parallelizzazione di informatica, a condizione che tutti i dati debbano essere elaborati allo stesso modo.

Ok, questa è pura teoria. Nel mondo reale le normali CPU offrono alcune istruzioni SIMD ( SSE ), quindi alcuni dati multipli possono essere eseguiti in modo più efficiente su una normale CPU. Allo stesso tempo, non tutti gli ALU nelle GPU devono lavorare sulla stessa cosa perché sono raggruppati in lotti (vedi la risposta di Mokubai ). Quindi le CPU non sono puramente SISD e le GPU non sono puramente SIMD.

Quando è utile utilizzare la GPU per i calcoli? Quando i tuoi calcoli sono davvero, davvero massicciamente parallelizzabili. Devi considerare che scrivere input nella memoria della GPU richiede tempo e anche leggere i risultati richiede del tempo. È possibile ottenere il massimo incremento delle prestazioni quando è possibile creare una pipeline di elaborazione che esegue molti calcoli prima di lasciare la GPU.


In che modo GPGPU influenza la durata della batteria rispetto a farlo nella CPU?
Pacerier,

@Pacerier Troppi fattori per dare una sola risposta. Dipende da attività, architettura del chip, idoneità per attività specifica, numero di operazioni parallelizzate, prestazioni di nodi computazionali, tecnologia di fabbricazione di dispositivi a semiconduttore ecc. Come regola generale, le attività che possono essere paralizzate trarranno vantaggio da SIMD in termini di efficienza energetica e prestazioni . Ci sono comunque delle eccezioni. Ad esempio, mentre di solito il cracking delle password è notevolmente accelerato dal SIMD, l'algoritmo scrypt non lo sarà perché è un enorme trambusto di memoria e con quel grado di parallelizzazione la memoria è scarsa.
gronostaj,

2

I dati grafici sono ideali per l'elaborazione parallela. Dividi un'immagine di 1024x1024 pixel in blocchi di 16x16 e lascia che ogni core elabori un blocco così piccolo. Raggruppa i risultati insieme e il risultato non sarà diverso da un processore che elabora quei blocchi uno per uno.

La condizione perché ciò funzioni è che i risultati di un core non influenzeranno i risultati degli altri core e viceversa. Qualcosa del genere potrebbe funzionare anche per un foglio Excel, in cui le celle nella colonna C sommano i valori della colonna A + B. C1 = A1 + B1, C2 = A2 + B2 e le righe 1 e 2 sono indipendenti l'una dall'altra.

L'elaborazione grafica dei dati è un'attività altamente specifica e puoi progettare un processore specifico per questo tipo di attività, che può essere utilizzato anche per altre attività, come il mining di bitcoin. E apparentemente puoi rendere un'unità di elaborazione più efficiente usando molti core uno accanto all'altro invece di usare un grande processore. Più efficiente significa non solo più veloce, ma ha anche il vantaggio che se hai bisogno solo del 20% dei core di elaborazione, puoi spegnere il resto, che è efficiente dal punto di vista energetico.

Dichiarazione di non responsabilità: l'esempio sopra potrebbe non essere tecnicamente corretto. È più per mostrare il principio. L'elaborazione effettiva dei dati sarà molto più complessa, immagino.


1

la risposta principale è che sono più semplici, quindi è possibile raggrupparli molti insieme, erano soliti fare un compito e quello era mettere fronzoli sullo schermo. ma al giorno d'oggi sono di natura più generale, proprio come cpus. il motivo principale tra cpus e gpus è che l'architettura della cpu si basa su x86 e quella in gpu si basa su AMD GCN o NVIDIA CUDA

prova a leggere http://www.anandtech.com/show/4455/amds-graphics-core-next-preview-amd-architects-for-compute http://www.anandtech.com/show/5699/nvidia-geforce -gtx-680-recensione / 2


1

Le CPU hanno 1,2,4,6,8 core o più. Allo stesso modo, le GPU ne hanno centinaia e migliaia. Ecco perché una delle migliori schede video ha una potenza di elaborazione float circa 80 volte maggiore rispetto a una CPU quad core.

La differenza è che sono specifici per tipo e raggruppati (vedi risposta sopra). Specifico per tipo significa che sono stati progettati per effettuare calcoli specifici non generali. È estremamente difficile fare in modo che un software standard utilizzi core GPU anziché core CPU. Se un software potesse essere così buono, renderebbe inutili le CPU. Sfortunatamente solo quelli molto specifici sono in grado di avvicinarsi alla vera potenza di elaborazione di una scheda video. Alcuni software di elaborazione hash possono farlo.


"" "Se un software potesse essere così buono, renderebbe inutili le CPU" "", Sì esattamente, in futuro lo farà.
Pacerier,
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.