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.