CPU versus GPU: architectuur, sterke punten en toepassingen vergeleken

Een CPU is ontworpen om één taak zo snel mogelijk af te ronden en heeft een klein aantal krachtige cores, grote caches en slimme besturingslogica. Een GPU is ontworpen om grote aantallen vergelijkbare taken tegelijk uit te voeren, met duizenden eenvoudige rekeneenheden en een enorm aantal threads waartussen wordt omgeschakeld om wachttijd op geheugen te verbergen. Een CPU past bij complexe, vertakkende sequentiële taken en een GPU bij grootschalige parallelle berekeningen zoals beeldverwerking en deep learning.

KenmerkCPUGPU
OntwerpdoelLage latency. Eén thread zo snel mogelijk afrondenHoge doorvoer. In totaal zo veel mogelijk werk verzetten
Aantal coresEnkele tot enkele honderden complexe coresDuizenden eenvoudige rekeneenheden, gegroepeerd in blokken
UitvoeringsmodelElke core heeft speculatieve (out-of-order) uitvoering en branch prediction, en gebruikt ook SIMD-instructiesSIMT. Een groep threads (bijvoorbeeld 32) voert gelijktijdig dezelfde instructie uit
Besturingslogica en cacheGrote caches en geavanceerde besturingslogica nemen een groot deel van het chipoppervlak inHet grootste deel van het oppervlak gaat naar rekeneenheden. Weinig cache per thread
Verbergen van geheugenlatencyVooral met caches en prefetchingVooral door van een wachtende thread over te schakelen op een andere uitvoerbare thread
GeheugenDDR of LPDDR. Bandbreedte doorgaans enkele tientallen tot honderden GB/sGDDR of HBM. Bandbreedte doorgaans enkele honderden GB/s tot enkele TB/s
VertakkingenSterk bij vertakkingen en onregelmatige codeLangzamer als threads in een groep verschillende vertakkingen nemen (divergentie)
Plaats van de dataWerkt rechtstreeks met het werkgeheugenEen losse GPU heeft eigen geheugen, dus data moet worden gekopieerd, bijvoorbeeld via PCIe
ProgrammerenBijna alle talen en tools zijn bruikbaarSpeciale modellen zoals CUDA, HIP, OpenCL en shadertalen
Sterke puntenBesturingssysteem, databases, besturingslogica, algemene toepassingenGraphics, matrix- en vectorberekeningen, deep learning, simulatie

De getalswaarden zijn typische ordegroottes en variëren per procesgeneratie en product.

Wanneer welke variant?

CPU
Wanneer de verwerking sequentieel is en veel vertakkingen heeft, of wanneer één thread snel moet reageren. Uitvoeren van het besturingssysteem, toepassingslogica, databases.
GPU
Wanneer dezelfde bewerking op grote hoeveelheden data wordt toegepast. Beeldrendering, training en inferentie van neurale netwerken, wetenschappelijke en technische simulaties.
Combinatie
De meeste systemen gebruiken beide. De CPU voert het programma uit en bereidt de data voor, en de GPU doet de zware parallelle berekeningen. Als er te weinig werk aan de GPU wordt overgedragen, kost het kopiëren van data zoveel tijd dat het soms trager is dan alleen de CPU gebruiken.

Veelgestelde vragen

Waarom is een GPU sneller dan een CPU bij deep learning?

Deep learning draait vooral om matrixberekeningen die in dezelfde bewerking zijn op te splitsen. Een GPU heeft duizenden eenvoudige rekeneenheden en een zeer hoge geheugenbandbreedte, en kan dit parallelle werk daardoor veel beter aan dan een CPU met enkele complexe cores.

Kan een GPU een CPU vervangen?

Nee. Een GPU is slecht in sequentiële code met veel vertakkingen, en de CPU is nodig voor het uitvoeren van het besturingssysteem en het aanleveren van data. Ze werken samen.

Wat is SIMT bij een GPU?

SIMT (single instruction, multiple threads) is een model waarbij een groep van bijvoorbeeld 32 threads gelijktijdig dezelfde instructie op verschillende data uitvoert. Als threads in de groep verschillende vertakkingen nemen, worden die na elkaar uitgevoerd, wat divergentie heet.

Waarom kan een GPU bij kleine taken juist trager zijn?

Data moet via een bus zoals PCIe tussen het geheugen van de CPU en dat van de GPU worden gekopieerd. Bij weinig werk kan die kopieertijd groter zijn dan de tijd die de GPU bespaart.

Test uw begrip

Welke uitspraak over het verschil tussen de SIMT-methode (single instruction, multiple threads) van de GPU en SIMD-instructies van de CPU is juist?

  1. ASIMT voert meerdere instructies tegelijk uit op één data-element en SIMD voert één instructie uit op één data-element
  2. BSIMT en SIMD zijn volledig hetzelfde en verschillen alleen in naam
  3. CBij SIMT kan elke thread als een onafhankelijk programma worden geschreven en handelt de hardware ook sprongen af, terwijl bij SIMD de programmeur of compiler expliciet vectorinstructies met vaste breedte gebruikt
Antwoord en toelichting tonen

Antwoord: C. Bij SIMT kan elke thread als een onafhankelijk programma worden geschreven en handelt de hardware ook sprongen af, terwijl bij SIMD de programmeur of compiler expliciet vectorinstructies met vaste breedte gebruikt

Bij SIMD van de CPU wordt één instructie toegepast op een vectorregister met bijvoorbeeld 4 of 8 data-elementen, dus het programma wordt geschreven met aandacht voor de vectorbreedte. Bij SIMT van de GPU schrijft de programmeur de bewerking van één thread gewoon uit, en bundelt de hardware die in groepen van 32 en voert ze met dezelfde instructie uit. Threads mogen individueel vertakken, en de hardware voert de gesplitste paden na elkaar uit, maar dan daalt de efficiëntie.

Wat is de belangrijkste reden dat GPU's geschikt zijn voor matrixbewerkingen en het trainen en inferentie van AI?

  1. ADe klokfrequentie is meer dan 100 keer die van een CPU
  2. BZe hebben veel eenvoudige rekeneenheden en kunnen grote hoeveelheden gegevens parallel verwerken
  3. CZe hebben geen geheugen
Antwoord en toelichting tonen

Antwoord: B. Ze hebben veel eenvoudige rekeneenheden en kunnen grote hoeveelheden gegevens parallel verwerken

Een GPU heeft van oorsprong, om de vele pixels van het scherm gelijktijdig te verwerken, een structuur met duizenden tot meer dan tienduizend eenvoudige rekeneenheden. Bij bewerkingen als matrixrekenen, waarbij dezelfde berekening op veel gegevens wordt herhaald, levert dit parallellisme hoge prestaties. De laatste jaren beschikken GPU's over speciale eenheden voor matrixbewerkingen (zoals Tensor Cores) en HBM met brede bandbreedte, en zijn ze de hoofdrolspeler bij het trainen van AI. Voor sequentiële verwerking met veel sprongen is een CPU beter geschikt.

Welke uitspraak is juist over een kenmerk van GPU-caches in vergelijking met CPU's?

  1. AEen GPU heeft helemaal geen cache
  2. BOok een GPU heeft L1- en L2-caches, maar omdat het aantal threads dat tegelijk draait zeer groot is, is de cachecapaciteit per thread veel kleiner
  3. CDe cache van een GPU is per thread vele malen groter dan die van een CPU
Antwoord en toelichting tonen

Antwoord: B. Ook een GPU heeft L1- en L2-caches, maar omdat het aantal threads dat tegelijk draait zeer groot is, is de cachecapaciteit per thread veel kleiner

Ook een GPU heeft per SM een L1-cache en een L2-cache die door de hele chip wordt gedeeld, maar omdat tienduizenden threads tegelijk draaien, is de capaciteit per thread ordes van grootte kleiner dan voor één CPU-thread. Het uitgangspunt van de GPU is niet latentie te verminderen door op de cache te vertrouwen, maar latentie te verbergen door tussen veel warps om te schakelen en het geheugengebruik te verbeteren met coalesced toegang en shared memory.

  1. Welke uitspraak is in het algemeen juist over het geheugen aan de CPU-zijde en dat aan de GPU-zijde bij een programma dat een discrete GPU gebruikt?
  2. Bij lichte bewerkingen zoals het één keer optellen van array-elementen kan het sturen van data naar de GPU trager zijn dan rekenen op de CPU. Wat is de belangrijkste reden?
  3. Welke reden waarom overdracht naar de GPU sneller gaat nadat het CPU-geheugen is vastgepind (page-locked), is juist?

Oefenvragen over GPU-programmeren

Belangrijke termen uitgelegd

GPU
Afkorting van Graphics Processing Unit. Processor met veel eenvoudige rekeneenheden die grote hoeveelheden data parallel verwerkt. Naast beeldverwerking veel gebruikt voor training en inferentie van AI.
SIMD
Afkorting van Single Instruction, Multiple Data. Methode waarbij één instructie dezelfde bewerking op meerdere data tegelijk uitvoert. Versnelt beeldverwerking en AI-berekeningen.
Cachegeheugen
Snel geheugen met kleine capaciteit dicht bij de CPU. Het bewaart veelgebruikte gegevens en overbrugt het snelheidsverschil met het hoofdgeheugen. Wordt meestal met SRAM gemaakt.
HBM (high bandwidth memory)
Geheugen waarin meerdere DRAM-dies met TSV's worden gestapeld en dat met een zeer brede bus een hoge bandbreedte levert.

Verwante vergelijkingen