GPU versus CPU: Tegenstanders of team?

Vroeger voerde de CPU (central processing unit) snelle wiskundige berekeningen uit voor het renderen van beelden. Naarmate er meer grafisch-intensieve applicaties werden ontwikkeld, kwam er teveel druk op de CPU te staan en degradeerde de performance. De GPU (graphics processing unit) kwam tot stand om die taken van de CPU over te nemen. Een GPU kan beelden sneller renderen dan een CPU. Deze performance toename heeft ervoor gezorgd dat GPU’s ook populaire chips zijn voor resource-intensieve taken die niet gerelateerd zijn aan beelden.

Als GPU’s zo’n interessante performance verbetering opleveren voor verschillende soorten taken, is het dan niet handig om alle CPU’s te vervangen voor GPU’s? Het antwoord is nee. Lees mee waarom dat zo is.

Verschil tussen GPU en CPU

Een GPU is niet beter dan een CPU. Een GPU is eigenlijk best wel zwak. Echter, een GPU kan een bepaalde soort taak heel goed uitvoeren, waardoor hij voor die taak zeer sterk is. Daarentegen doet een CPU allerlei soorten dingen.

Een eenvoudige manier om het verschil tussen een CPU en een GPU te begrijpen is de wijze waarop ze taken verwerken te vergelijken.

Een GPU heeft een gigantisch parallelle architectuur bestaande uit duizenden kleine, efficiënte cores, ontworpen om meerdere taken tegelijkertijd uit te voeren. Sommige taken zijn zeer geschikt voor parallelle berekeningen, namelijk taken die opgeknipt kunnen worden in heel veel kleine taken die allemaal in een keer uitgevoerd kunnen worden. Het renderen van beelden is een goed voorbeeld van een taak die goed geparallelliseerd uitgevoerd kan worden. Elke pixel wordt grotendeels onafhankelijk van de andere verwerkt. GPU’s werken het best als dezelfde code wordt toegepast op elk stukje data.
Echter, niet elke taak kan worden opgeknipt en niet elke taak gaat gemoeid met dezelfde soort wiskunde als waar GPU’s goed in zijn. Met andere woorden; parallelliseren is niet voor elke taak betekenisvol. Dit geldt voor taken waarbij elk stukje code afhangt van de voorgaande code. In zo’n geval kan de volgende code niet uitgevoerd worden als de voorafgaande is afgerond, hoeveel cores je ook tot je beschikking hebt. Als het je al zou lukken dit soort taken te implementeren op een GPU, dan zou je extreem slechte performance krijgen, aangezien de meeste GPU cores ongebruikt zullen blijven omdat ze aan het wachten zijn.
Een CPU bestaat uit een aantal cores die geoptimaliseerd is voor de klussen die niet geparallelliseerd kunnen worden; de klussen bestaande uit opeenvolgende seriële taken. CPU’s zijn niet zo gespecialiseerd als GPU’s. Daarentegen zijn ze zeer veelzijdig. Zo doet een CPU allerlei dingen om te zorgen dat de data die het nodig heeft al beschikbaar is (caching en prefetching) en schat het in wat het resultaat van een beslissing zal zijn, zodat het alvast verder kan gaan met het uitvoeren van taken, waardoor het niet heeft hoeven wachten in het geval de schatting correct was (speculative execution).

Als je gebruik maakt van alleen CPU’s, dan gebeuren computerintensieve taken traag. Als je alleen gebruik maakt van GPU’s dan gebeuren de sequentiële taken traag.

GPU-accelerated computing

 

how-gpu-acceleration-works
Bron: http://www.nvidia.com

GPU-accelerated computing is het gebruik maken van zowel een GPU als een CPU om wetenschappelijke, analytische, engineering, consumenten en zakelijke applicaties te versnellen. GPU-accelerated computing levert een hoge applicatie performance door computerintensieve delen van de applicatie door te spelen naar de GPU, terwijl de rest van de code door de CPU behandeld wordt. De gebruiker zal hierdoor ervaren dat de applicatie significant sneller werkt.

 

CPU en GPU gaan dus hand in hand en vullen elkaar goed aan voor situaties die bestaan uit zowel sequentiële als parallelle taken. Geen tegenstanders dus, maar een top team!

Check eens dit korte maar leuke filmpje van NVIDIA waarin het verschil tussen CPU en GPU zichtbaar wordt gemaakt:

 

Geef een reactie