Hva er en flerkjerneprosessor?

Siden midten av nittitallet har stasjonære CPUer tilbudt flere CPU-kjerner i en enkelt pakke. Dette er en flerkjerneprosessor. Mens tidlige design var begrenset til to eller fire CPU-kjerner, tilbyr moderne CPUer opptil 64 fysiske kjerner på en enkelt CPU. Så høye kjernetall er ikke standard for stasjonære CPUer og er generelt reservert for avanserte arbeidsstasjoner eller servere. Typiske kjerneteller i moderne stasjonære CPUer er mellom 4 og 16. Men hva er det med flerkjerne-CPUer som gjør dem dominerende i moderne datamaskiner?

Enkjernet

Historisk sett var en enkeltkjerne-CPU begrenset til bare å utføre en enkelt oppgave samtidig. Dette kommer med en hel rekke problemer. For eksempel, på en moderne datamaskin, er det en enorm mengde bakgrunnsprosesser som kjører. Hvis en CPU bare kan behandle én ting om gangen, betyr det at disse bakgrunnsprosessene må ta behandlingstid bort fra forgrunnsprosessen. I tillegg betyr cache-misser at data må hentes fra – relativt – treg RAM. I løpet av tiden som data hentes fra RAM, sitter prosessoren ganske enkelt inaktiv, siden den ikke kan gjøre noe før den får dataene. Dette holder opp den kjørende prosessen så vel som alle andre prosesser som venter på at den skal fullføres.

Mens moderne enkeltkjerneprosessorer egentlig ikke er en ting takket være fremveksten av budsjett-flerkjerne-CPU-er, vil de kunne bruke andre moderne triks for å fungere raskere. En rørledning vil tillate at hver enkelt del av håndteringen av en instruksjon kan brukes samtidig, gir en betydelig ytelsesøkning i forhold til å bruke bare ett trinn i rørledningen i det hele tatt per klokke syklus. En bred rørledning vil se at flere instruksjoner kan håndteres i hvert rørledningstrinn per klokkesyklus. Ute av rekkefølge-behandling vil gjøre det mulig å planlegge instruksjoner på en mer tidseffektiv måte. En grenprediktor vil være i stand til å forutsi utfallet av en greninstruksjon og kjøre det antatte svaret på forhånd.

Alle disse faktorene vil fungere bra og gi en viss ytelse. Å legge til en eller flere kjerner tillater imidlertid alt dette, og på et slag muliggjør behandlingen av to ganger dataene samtidig.

Multicore

Å legge til en annen kjerne høres ut som det burde doble den rå ytelsen. Ting er dessverre mer komplisert enn som så. Programlogikk er ofte entråds, noe som betyr at det bare er én ting et program prøver å gjøre til enhver tid. Det som derimot kan skje er at andre prosesser kan bruke den andre kjernen samtidig. Selv om det ikke er noen iboende ytelsesøkning for de fleste individuelle programmer, tilbys en ekstra behandlingsressurs, reduserer effektivt konkurransen om en begrenset ressurs, noe som gir en ytelsesøkning. Denne ytelsesøkningen, ganske enkelt fra å redusere konkurransen om CPU-tid, er mest merkbar når du hopper fra en enkelt til en dual-core CPU, er det synkende avkastning fra å øke kjerneantallet ytterligere, selv om mer generelt er bedre.

For å dra skikkelig nytte av flerkjernesystemer og faktisk se en solid ytelsesøkning, må programmer programmeres til å bruke flere behandlingstråder. Flertrådslogikk er notorisk vanskelig å gjøre pålitelig, da det ofte er vanskelig å lære og det er mange potensielle fallgruver. Et eksempel på en fallgruve er kjent som en rasebetingelse. I en løpstilstand antar en prosess at en annen prosess som den starter vil gå jevnt, den prøver deretter å gjøre noe som er avhengig av at den andre prosessen har gått jevnt. Tenk deg for eksempel at en prosess starter en annen prosess for å lukke ett dokument og åpne et annet. Hvis den opprinnelige prosessen ikke sjekker om den andre prosessen er fullført, kan dette føre til uventede utfall. Hvis det for eksempel var et problem med å lukke det første dokumentet, kan det fortsatt være åpent når den opprinnelige prosessen bare skriver mer data til det.

I denne rasetilstanden leses verdien av en variabel en gang til før den nye verdien skrives til den, noe som fører til feil overordnet svar.

Termiske problemer

Et av de største problemene multicore-prosessorer ender opp med å slite med er varme. Mens én CPU-kjerne ikke gir ut så mye varme, avgir to mer. I CPU-er med høyt antall kjerner kan denne varmekonsentrasjonen resultere i en lavere boost-klokke, ettersom CPU-en styrer temperaturen. En lavere boost-klokke vil føre til lavere ytelse i enkelt-trådede applikasjoner. Dette kan ofte sees i benchmarks for spillytelse. Videospill er ofte svært avhengige av en enkelt tråd. Som sådan er entråds ytelse ofte kritisk for spill. CPU-er med høyt antall kjerner, som modellene med 16-kjerner, kommer ofte fra høyytelseskasser. Til tross for dette kan de jevnlig bli funnet å bli bedre enn "mindre" CPUer med lavere kjernetall i entrådede benchmarks. Dette problemet er enda mer åpenbart i prosessorer med ultrahøyt kjernetall som 64-kjerners AMD Threadripper, hvor klokkehastigheten er merkbart lavere enn avanserte stasjonære CPUer.

Suksesser

Mange applikasjoner er i stand til å gjøre riktig bruk av flere CPU-kjerner. For eksempel er CPU-gjengivelse en relativt enkel oppgave å parallellisere. Ytelsesforbedringer kan sees helt opp til 64 kjerner og høyere, selv om ingen enkelt CPU tilbyr mer enn 64 kjerner for øyeblikket. Mange applikasjoner kan ganske enkelt ikke multithreaded, da de er avhengige av sekvensiell logikk. Selv om disse ikke ser i nærheten av hastigheten til et flertråds program, er det faktum at flertrådede programmer og andre entrådede programmer kan bruke andre CPU-kjerner frigjør prosessortid, noe som gir bedre mulighet opptreden.

Arkitektoniske alternativer

I stasjonære prosessorer har hver CPU-kjerne i en flerkjerne-CPU generelt vært identisk. Denne homogeniteten gjør det enkelt å planlegge arbeidet med kjernene. Å bruke samme repeterende design bidrar også til å holde utviklingskostnadene nede. Mobile prosessorer har imidlertid lenge brukt heterogene kjernearkitekturer. I denne designen er det to eller til og med tre lag med CPU-kjerne. Hvert nivå kan kjøre de samme prosessene, men noen er designet for strømeffektivitet, og andre er innstilt for ytelse. Dette har vist seg å være en suksessoppskrift for batteridrevne enheter ettersom mange oppgaver kan bruke tregere mer strømeffektive kjerner, øker batterilevetiden, mens høyprioriterte prosesser fortsatt kan kjøres i høy hastighet når det trengs.

Desktop CPU-arkitektur beveger seg også i retning av en heterogen kjernedesign. Intels Alder Lake 12th generasjon Core CPU-linjen er den første stasjonære CPU-en som gjør dette. I dette tilfellet er den viktigste drivfaktoren til de mindre kjernene ikke nødvendigvis strømeffektivitet, men termisk effektivitet, selv om det er to sider av samme sak. Å ha flere kraftige kjerner gir høy ytelse, mens mange effektive kjerner kan håndtere bakgrunnsoppgaver uten å påvirke hovedkjernene for mye.

Konklusjon

En flerkjerne-prosessor er en prosessor som har flere prosesseringskjerner i en enkelt pakke, ofte, men ikke utelukkende på samme dyse. Flerkjerne-CPU-er tilbyr ikke mye av en direkte ytelsesøkning til mange programmer, men ved å øke antall kjerner, trenger entrådede programmer ikke å konkurrere så mye om CPU-tid. Noen programmer kan dra full nytte av flere kjerner, og bruker direkte så mange som er tilgjengelige. Dette gir en stor ytelsesforsterkning, men på grunn av termiske og strømbegrensninger er ikke denne boosten nødvendigvis en rett ytelsesdobling med en dobling av kjerner.