CPU versus GPU versus NPU: ontwerp, datatypes en energie-efficiëntie
Een CPU is een universele processor die alles kan uitvoeren en met een klein aantal complexe cores één taak zo snel mogelijk afrondt. Een GPU verwerkt met een groot aantal rekeneenheden grote hoeveelheden data parallel en wordt gebruikt voor uiteenlopende parallelle berekeningen, zoals graphics en het trainen van AI. Een NPU is een gespecialiseerd circuit voor de multiply-accumulate-bewerkingen op matrices die het grootste deel van de berekeningen in neurale netwerken uitmaken; door veel rekeneenheden met lage precisie zoals INT8 naast elkaar te plaatsen en data in geheugen op de chip te hergebruiken, voert het inferentie uit met zeer hoge energie-efficiëntie. Bewerkingen die het niet ondersteunt, liggen het daarentegen slecht.
| Kenmerk | CPU | GPU | NPU |
|---|---|---|---|
| Ontwerpfilosofie | Universeel, lage latentie. Eén taak zo snel mogelijk afronden | Hoge doorvoer. Grote hoeveelheden parallelle berekeningen in één keer verwerken | Gespecialiseerd in bewerkingen van neurale netwerken (vooral inferentie), met hoge prestaties per watt |
| Opbouw van de rekeneenheden | Enkele tot enkele honderden complexe cores, elk met SIMD-rekeneenheden | Duizenden eenvoudige rekeneenheden. Vaak ook met matrixrekeneenheden | Een grote array van multiply-accumulate-eenheden (zoals een systolische array) plus vectoreenheden voor onder meer activatiefuncties |
| Besturing | Per instructie sprongvoorspelling en speculatieve uitvoering (out-of-order) | Wisselt tussen veel threads om geheugenwachttijden te verbergen | Volgt meestal een dataflow die vooraf door de compiler is vastgelegd, met weinig besturing per instructie |
| Sterk in | Taken met veel vertakkingen, het besturingssysteem, applicatielogica | Graphics, training en inferentie van AI, wetenschappelijke berekeningen | AI-inferentie die draait om convoluties en matrixvermenigvuldigingen |
| Geheugen | Grote caches en hoofdgeheugen zoals DDR | Geheugen met hoge bandbreedte zoals GDDR en HBM | Hergebruikt gewichten en tussenresultaten in SRAM-buffers op de chip. Ingebouwd in een SoC deelt het hoofdgeheugen met de CPU |
| Belangrijkste datatypes | Vooral FP64, FP32 en integers, maar vrijwel alles | Vooral FP32, FP16 en BF16. Voor training ook FP8 en dergelijke | Vooral lage precisie zoals INT8, INT4 en FP16 |
| Prestatiemaat | Klokfrequentie, aantal cores, IPC | FLOPS (zoals TFLOPS) | TOPS (meestal de theoretische piekwaarde, geteld in INT8) |
| Energie-efficiëntie bij AI-inferentie | Laag | Hoog | Het hoogst. Soms meer dan een orde van grootte hoger dan een CPU |
| Flexibiliteit | Het hoogst. Elk programma draait erop | Hoog. Breed inzetbaar voor paralleliseerbare taken | Laag. Niet-ondersteunde bewerkingen worden teruggegeven aan de CPU of GPU |
| Programmering | Gewone programmeertalen en compilers | Kernels schrijven in een parallel programmeermodel voor GPU's | Getrainde modellen worden met een AI-compiler of inferentieruntime omgezet en uitgevoerd. Direct programmeren is zeldzaam |
| Waar te vinden | In elke computer | Als losse kaart of ingebouwd in een SoC | Vaak ingebouwd in de SoC van smartphones en pc's. Er zijn ook gespecialiseerde chips voor datacenters |
De getalswaarden zijn typische ordegroottes en variëren per procesgeneratie en product.