Una Graphics Processing Unit (GPU) è un processore per scopi speciali, ottimizzato per i calcoli comunemente (e ripetutamente) richiesti dalla Computer Graphics, in particolare per le operazioni SIMD.
Una Central Processing Unit (CPU) è un processore per scopi generali - in linea di principio può fare qualsiasi calcolo, ma non necessariamente in modo ottimale per qualsiasi calcolo dato. Si può fare l'elaborazione grafica su una CPU - ma probabilmente non produrrà il risultato con la stessa velocità di una GPU correttamente programmata.
Le ragioni per cui si ha almeno una di queste nei tipici sistemi informatici al giorno d'oggi sono:
- i computer che interagiscono direttamente con le persone (cioè non i server) usano tipicamente la computer grafica in modo estensivo per farlo, e i calcoli coinvolti sono numerosi e devono essere fatti in tempo reale;
- avendo almeno uno di ognuno, si guadagna il calcolo parallelo e una maggiore performance dal throughput del sistema informatico: mentre la GPU sta facendo i calcoli per la grafica, la CPU può fare altri calcoli non grafici allo stesso tempo.
- La legge di Moore ci ha dato una tale abbondanza di ricchezze in termini di area e capacità dei chip di silicio a prezzi così bassi che è economico aggiungere processori speciali di vario tipo quasi ovunque nell'architettura dei sistemi informatici in questi giorni - spesso multipli di essi, per ottenere un migliore throughput e prestazioni facendo più calcoli diversi in parallelo (allo stesso tempo).
Il trucco è programmarli tutti per lavorare bene insieme.
Vale la pena notare che a partire dal 2014, la tipica GPU ha un motore SIMD più espansivo della tipica CPU, e quindi se i vostri calcoli non grafici si adattano a quel tipo di modello di calcolo parallelo ma altrimenti sovrastano il motore vettoriale di una CPU (ad es, AVX, Streaming SIMD Extensions (SSE)), si consiglia di codificare la propria applicazione con Compute Unified Device Architecture (CUDA) e/o OpenCL e utilizzare le GPU per aumentare la propria applicazione. Questo è più genericamente conosciuto come General Purpose GPU Computing, una sotto-disciplina relativamente nuova dell'High Performance Computing.