Perché non stiamo costruendo e usando processori paralleli * destinati * al calcolo generale?

2

Sappiamo tutti che le GPU sono molto più veloci delle CPU per una vasta gamma di applicazioni. Quando qualcuno chiede perché non stiamo solo programmando per le GPU, una delle risposte più comuni è che le GPU non sono buone per tutto - cioè, non riescono a fare alcune cose che le CPU fanno facilmente. Bene, non c'è da stupirsi: dopotutto, non sono pensati per essere usati per calcoli generali . Le GPU sono strongmente legate ai giochi e alle applicazioni grafiche, non solo con funzioni specializzate per loro, ma spesso pubblicizzate per loro.

La mia domanda è: perché, quindi, non stiamo costruendo e utilizzando processori attualmente progettati per programmi paralleli ?

    
posta MaiaVictor 02.09.2014 - 21:52
fonte

4 risposte

13

Lo facciamo già; questo è ciò che processori multi-core sono per.

Parte della massima ottimizzazione per la velocità è la specializzazione. Quando crei processori specializzati in una cosa, puoi ottimizzare quella cosa e ignorare l'ottimizzazione per qualsiasi altra cosa.

L'ottimizzazione può avere obiettivi in conflitto. Questa è la ragione per cui abbiamo molti diversi tipi di strutture di dati; ognuno è ottimizzato per un compito specifico. Se si potesse scrivere una struttura dati completamente ottimizzata per l'attività qualsiasi , tutti utilizzeremmo solo quella struttura dati e nient'altro.

    
risposta data 02.09.2014 - 22:03
fonte
11

Perché il calcolo generale è difficile da parallelizzare nel SIMD modello che è la forza trainante della progettazione della GPU. La grafica ha il vantaggio di avere ogni vertice della mesh renderizzata in grado di essere guardato da solo ed eseguire le stesse operazioni su di esso per capire la sua posizione sullo schermo e con ogni pixel sullo schermo risultante è lo stesso. Quelle sono la base per vertex e framment shader in openGL.

Il calcolo generale è più difficile da ottenere unità di calcolo kernelizzate che valgono la pena di parallelizzare in questo modo.

Avendo detto che i supercomputer sono strongmente parallelizzati con ogni core che è una CPU completa (usando il più flessibile MIMD modello) e comunicazione efficiente tra ogni core.

La parallelizzazione efficiente è un'area di ricerca aperta con diversi libri scritti su di essi.

    
risposta data 02.09.2014 - 22:04
fonte
2

Altre risposte sono buone, ma la domanda mi ricorda un fenomeno passato nella computer grafica (ricordate che?)

Si chiamava Wheel of Reincarnation . Funziona così:

  1. Inventa un computer.

  2. Programma il computer per fare qualcosa di utile, come disegnare immagini.

  3. Per prestazioni, inventa un processore speciale per scaricare il disegno dell'immagine.

  4. Per migliorare lo speciale processore, renderlo più "intelligente" come un computer.

  5. Ora è possibile scaricare ancora di più del lavoro sul processore speciale.

  6. Voilà, siamo tornati a 1.!

Questo è ancora in corso, con GPU, con browser sempre più "intelligenti", ecc. Sembra che succeda ogni volta che si verifica un collo di bottiglia tra i processori e la ridondanza dovuta alla separazione delle responsabilità porta a problemi di manutenibilità.

Non vantare ( aw, andare avanti ) Ho provato a cortocircuitare questo ciclo molto tempo fa con uno schema che gestisce automaticamente un client remoto senza che sia necessario scrivere del codice aggiuntivo. L'ho chiamato esecuzione differenziale .

La rilevanza per la domanda attuale è che il vantaggio di avere più processori adattati a diverse parti del lavoro è compensato dalla necessità di scrivere programmi separati per loro, che quindi producono errori, piuttosto che semplicemente dire quello che vuoi.

    
risposta data 04.09.2014 - 20:42
fonte
1

La programmazione parallela (multi-thread) è difficile. Ordini di grandezza più difficili della programmazione a thread singolo.

Sì, puoi ottenere più prestazioni, ma questa prestazione ha un costo: tempo per lo sviluppatore. E il tempo di sviluppo è spesso più costoso di un programma che è ottimizzato un po 'meno, ma è finito prima.

    
risposta data 05.09.2014 - 10:42
fonte