Wat is een multicore-processor?

Sinds het midden van de jaren negentig bieden desktop-CPU's meerdere CPU-kernen in één pakket. Dit is een multicore-processor. Terwijl vroege ontwerpen beperkt waren tot twee of vier CPU-kernen, bieden moderne CPU's tot 64 fysieke kernen op een enkele CPU. Core-tellingen die zo hoog zijn, zijn niet standaard voor desktop-CPU's en zijn over het algemeen gereserveerd voor high-end werkstations of servers. Typische kernaantallen in moderne desktop-CPU's liggen tussen 4 en 16. Maar waar gaat het over multicore-CPU's die ze dominant maken in moderne computers?

Enkele kern

Historisch gezien was een single-core CPU beperkt tot het uitvoeren van slechts één taak tegelijk. Dit gaat gepaard met een hele reeks problemen. Op een moderne computer zijn er bijvoorbeeld enorm veel achtergrondprocessen actief. Als een CPU slechts één ding tegelijk kan verwerken, betekent dit dat deze achtergrondprocessen de verwerkingstijd moeten wegnemen van het voorgrondproces. Bovendien betekenen cachemissers dat gegevens moeten worden opgehaald uit - relatief - langzame RAM. Gedurende de tijd dat gegevens uit het RAM worden opgehaald, zit de processor gewoon inactief, omdat hij niets kan doen totdat hij de gegevens krijgt. Dit houdt het lopende proces in stand, evenals alle andere processen die wachten om te voltooien.

Hoewel moderne single-coreprocessors niet echt iets zijn dankzij de opkomst van budget-multicore-CPU's, zouden ze andere moderne trucs kunnen gebruiken om sneller te werken. Een pijplijn zou het mogelijk maken dat elk afzonderlijk deel van het afhandelen van een instructie tegelijkertijd kan worden gebruikt, biedt een aanzienlijke prestatieverbetering ten opzichte van het gebruik van slechts één fase van de pijplijn per klok fiets. Een brede pijplijn zou ervoor zorgen dat meerdere instructies in elke pijplijntrap per klokcyclus kunnen worden verwerkt. Niet-bestaande verwerking zou het mogelijk maken om instructies op een meer tijdbesparende manier te plannen. Een vertakkingsvoorspeller zou in staat zijn om de uitkomst van een vertakkingsinstructie te voorspellen en preventief het veronderstelde antwoord uit te voeren.

Al deze factoren zouden goed werken en enige prestaties leveren. Het toevoegen van een of meer kernen maakt dat echter allemaal mogelijk, en maakt in één klap de verwerking van twee keer zoveel gegevens tegelijk mogelijk.

Multicore

Het toevoegen van een tweede kern klinkt alsof het de onbewerkte prestaties zou moeten verdubbelen. De zaken zijn helaas ingewikkelder dan dat. Programmalogica is vaak single-threaded, wat betekent dat een programma maar één ding tegelijk probeert te doen. Wat wel kan gebeuren is dat andere processen de andere core tegelijkertijd kunnen gebruiken. Hoewel er geen inherente prestatieverbetering is voor de meeste individuele programma's, is het bieden van een extra verwerkingsmiddel, vermindert effectief de concurrentie voor een beperkte hulpbron, wat wel een prestatieverbetering. Deze prestatieverbetering, simpelweg door het verminderen van de concurrentie voor CPU-tijd, is het meest merkbaar bij het springen van een single naar een dual-core CPU, zijn er afnemende opbrengsten van het verder verhogen van het aantal cores, hoewel er over het algemeen meer is beter.

Om goed te profiteren van multicore-systemen en daadwerkelijk een solide prestatieverbetering te zien, moeten programma's worden geprogrammeerd om meerdere verwerkingsthreads te gebruiken. Multithreaded logica is notoir moeilijk om betrouwbaar te doen, omdat het vaak moeilijk te leren is en er veel potentiële valkuilen zijn. Een voorbeeldvalkuil staat bekend als een raceconditie. In een raceconditie gaat het ene proces ervan uit dat een ander proces dat het start soepel zal verlopen, dan probeert het iets te doen dat ervan uitgaat dat dat andere proces soepel verloopt. Stel je bijvoorbeeld voor dat een proces een ander proces start om het ene document te sluiten en een ander te openen. Als het oorspronkelijke proces niet goed controleert of het tweede proces is voltooid, kan dit leiden tot onverwachte resultaten. Als er bijvoorbeeld een probleem was met het sluiten van het eerste document, kan het nog steeds open zijn wanneer het oorspronkelijke proces er gewoon meer gegevens naar schrijft.

In deze raceconditie wordt de waarde van een variabele een tweede keer gelezen voordat de nieuwe waarde ernaar wordt geschreven, wat leidt tot het verkeerde algemene antwoord.

Thermische problemen

Een van de grootste problemen waar multicore-processors mee worstelen, is warmte. Terwijl één CPU-kern niet zoveel warmte afgeeft, geven twee meer af. In CPU's met een hoog aantal kernen kan deze concentratie van warmte resulteren in een lagere boostklok, omdat de CPU zijn temperatuur beheert. Een lagere boostklok zorgt voor lagere prestaties in single-threaded applicaties. Dit is vaak te zien in benchmarks voor gameprestaties. Videogames zijn vaak sterk afhankelijk van één enkele thread. Als zodanig zijn single-threaded prestaties vaak van cruciaal belang voor gaming. CPU's met een hoog aantal kernen, zoals de modellen met een telling van 16 kernen, zijn vaak afkomstig uit high-performance bins. Desondanks kunnen ze regelmatig worden overtroffen door "mindere" CPU's met een lager aantal cores in single-threaded benchmarks. Dit probleem is nog duidelijker in CPU's met een ultrahoog aantal cores, zoals de 64-core AMD Threadripper, waar de kloksnelheid merkbaar lager is dan bij high-end desktop-CPU's.

successen

Veel applicaties zijn in staat om correct gebruik te maken van meerdere CPU-cores. CPU-rendering is bijvoorbeeld een relatief gemakkelijke taak om te parallelliseren. Prestatieverbeteringen zijn te zien tot 64 cores en hoger, hoewel geen enkele CPU momenteel meer dan 64 cores biedt. Veel applicaties kunnen eenvoudigweg niet multithreaded worden omdat ze afhankelijk zijn van sequentiële logica. Hoewel deze nergens in de buurt van de snelheid van een multithreaded programma zien, is het feit dat multithreaded programma's en andere single-threaded programma's kunnen andere CPU-cores gebruiken, maakt processortijd vrij, waardoor betere prestatie.

Architecturale opties

In desktopprocessors is elke CPU-kern binnen een multicore-CPU over het algemeen identiek. Deze homogeniteit maakt het plannen van werk aan de kernen eenvoudig. Het gebruik van hetzelfde herhalende ontwerp helpt ook om de ontwikkelingskosten laag te houden. Mobiele processors gebruiken echter al lang heterogene kernarchitecturen. In dit ontwerp zijn er twee of zelfs drie lagen CPU-kern. Elke laag kan dezelfde processen uitvoeren, maar sommige zijn ontworpen voor energie-efficiëntie en andere zijn afgestemd op prestaties. Dit is een succesrecept gebleken voor apparaten op batterijen, aangezien veel taken de langzamere meer kunnen gebruiken energiezuinige kernen, waardoor de levensduur van de batterij wordt verlengd, terwijl processen met hoge prioriteit nog steeds op hoge snelheid kunnen worden uitgevoerd wanneer nodig.

Desktop CPU-architectuur beweegt zich ook in de richting van een heterogeen kernontwerp. Intel's Alder Lake 12 "e generatie Core CPU-lijn is de eerste desktop-CPU die dit doet. In dit geval is de belangrijkste drijvende factor van de kleinere kernen niet noodzakelijkerwijs energie-efficiëntie, maar thermische efficiëntie, hoewel dat twee kanten van dezelfde medaille zijn. Het hebben van meerdere krachtige kernen biedt hoge prestaties, terwijl veel efficiënte kernen achtergrondtaken aankunnen zonder de belangrijkste kernen te veel te beïnvloeden.

Conclusie

Een multicore-CPU is een CPU met meerdere verwerkingskernen in een enkel pakket, vaak, maar niet uitsluitend, op dezelfde chip. Multicore-CPU's bieden niet echt een directe prestatieverbetering voor veel programma's, maar door het aantal kernen te vergroten, hoeven single-threaded-programma's niet zoveel te concurreren om CPU-tijd. Sommige programma's kunnen optimaal profiteren van meerdere kernen en maken direct gebruik van zoveel als er beschikbaar zijn. Dit zorgt voor een grote prestatieverbetering, maar vanwege thermische en stroombeperkingen is deze verbetering niet noodzakelijk een directe prestatieverdubbeling met een verdubbeling van de kernen.