Vad är en flerkärnig processor?

Sedan mitten av 1900-talet har stationära processorer erbjudit flera CPU-kärnor i ett enda paket. Detta är en flerkärnig processor. Medan tidiga konstruktioner var begränsade till två eller fyra CPU-kärnor, erbjuder moderna CPU: er upp till 64 fysiska kärnor på en enda CPU. Så högt antal kärnor är inte standard för stationära processorer och är i allmänhet reserverade för avancerade arbetsstationer eller servrar. Typiskt antal kärnor i moderna stationära processorer är mellan 4 och 16. Men vad är det med flerkärniga processorer som gör dem dominerande i moderna datorer?

Enkel kärna

Historiskt sett var en enda kärna-CPU begränsad till att bara utföra en enda uppgift på en gång. Detta kommer med en hel rad problem. Till exempel, på en modern dator, finns det en enorm mängd bakgrundsprocesser som körs. Om en CPU bara kan bearbeta en sak i taget, betyder det att dessa bakgrundsprocesser måste ta bearbetningstiden bort från förgrundsprocessen. Dessutom innebär cachemissar att data måste hämtas från - jämförelsevis - långsamt RAM. Under tiden som data hämtas från RAM, sitter processorn helt enkelt inaktiv, eftersom den inte kan göra någonting förrän den får data. Detta håller upp den pågående processen såväl som alla andra processer som väntar på att den ska slutföras.

Medan moderna enkärniga processorer egentligen inte är något tack vare ökningen av flerkärniga budgetprocessorer, skulle de kunna använda andra moderna knep för att arbeta snabbare. En pipeline skulle tillåta att varje del av hanteringen av en instruktion kan användas samtidigt, ger en betydande prestandaökning jämfört med att använda bara ett steg i pipelinen alls per klocka cykel. En bred pipeline skulle se att flera instruktioner skulle kunna hanteras i varje pipelinesteg per klockcykel. Out Of Order-behandling skulle göra det möjligt att schemalägga instruktioner på ett mer tidseffektivt sätt. En förgreningsprediktor skulle kunna förutsäga resultatet av en förgreningsinstruktion och förebyggande köra det förmodade svaret.

Alla dessa faktorer skulle fungera bra och ge viss prestanda. Att lägga till en eller flera kärnor tillåter dock allt detta, och i ett slag möjliggörs bearbetning av två gånger data på en gång.

Multicore

Att lägga till en andra kärna låter som att det borde fördubbla den råa prestandan. Saker och ting är tyvärr mer komplicerade än så. Programlogik är ofta entrådig vilket betyder att det bara finns en sak som ett program försöker göra åt gången. Det som däremot kan hända är att andra processer kan använda den andra kärnan samtidigt. Även om det inte finns någon inneboende prestandahöjning för de flesta individuella program, tillhandahålls en extra bearbetningsresurs, minskar effektivt konkurrensen om en begränsad resurs, vilket ger en prestationshöjning. Denna prestandaökning, helt enkelt från att minska konkurrensen om CPU-tid är mest märkbar när man hoppar från en singel till en dual-core CPU, det finns minskande avkastning från att öka antalet kärnor ytterligare, även om mer generellt bättre.

För att dra fördel av flerkärniga system och faktiskt se en rejäl prestandaökning, måste program programmeras för att använda flera bearbetningstrådar. Flertrådad logik är notoriskt svårt att göra på ett tillförlitligt sätt eftersom det ofta är svårt att lära sig och det finns många potentiella fallgropar. Ett exempel på en fallgrop är känd som ett rastillstånd. I ett racetillstånd antar en process att en annan process som den startar kommer att löpa smidigt, den försöker sedan göra något som förlitar sig på att den andra processen har löpt smidigt. Tänk dig till exempel att en process startar en annan process för att stänga ett dokument och öppna ett annat. Om den ursprungliga processen inte korrekt kontrollerar om den andra processen har slutförts kan detta resultera i oväntade resultat. Om det fanns ett problem med att stänga det första dokumentet, till exempel, kan det fortfarande vara öppet när den ursprungliga processen bara skriver mer data till det.

I detta rastillstånd läses värdet av en variabel en andra gång innan det nya värdet skrivs till den, vilket leder till fel övergripande svar.

Termiska problem

Ett av de största problemen som flerkärniga processorer kämpar med är värmen. Medan en CPU-kärna inte avger så mycket värme, avger två mer. I processorer med högt antal kärnor kan denna värmekoncentration resultera i en lägre boost-klocka, eftersom processorn hanterar sin temperatur. En lägre boost-klocka ger lägre prestanda i enkeltrådade applikationer. Detta kan ofta ses i riktmärken för spelprestanda. Videospel är ofta mycket beroende av en enda tråd. Som sådan är enkeltrådad prestanda ofta avgörande för spel. CPU: er med högt antal kärnor, som modellerna med 16 kärnor, kommer ofta från högpresterande fack. Trots detta kan de regelbundet upptäckas att de överträffas av "mindre" processorer med ett lägre antal kärnor i entrådiga benchmarks. Det här problemet är ännu mer uppenbart i processorer med ultrahögt antal kärnor som 64-kärniga AMD Threadripper där klockhastigheten är märkbart lägre än avancerade stationära processorer.

Framgångar

Många applikationer kan använda flera CPU-kärnor på rätt sätt. Till exempel är CPU-rendering en relativt enkel uppgift att parallellisera. Prestandaförbättringar kan ses hela vägen upp till 64 kärnor och högre, även om ingen enskild CPU erbjuder mer än 64 kärnor för närvarande. Många applikationer kan helt enkelt inte flertrådas eftersom de är beroende av sekventiell logik. Även om dessa inte ser någonstans i närheten av hastigheten hos ett flertrådsprogram, är det faktum att flertrådade program och andra enkeltrådade program kan använda andra CPU-kärnor frigör processortid, vilket möjliggör bättre prestanda.

Arkitektoniska alternativ

I stationära processorer har varje CPU-kärna i en flerkärnig CPU i allmänhet varit identisk. Denna homogenitet gör det enkelt att schemalägga arbetet med kärnorna. Att använda samma upprepande design hjälper också till att hålla utvecklingskostnaderna nere. Mobila processorer har dock länge använt heterogena kärnarkitekturer. I den här designen finns det två eller till och med tre nivåer av CPU-kärna. Varje nivå kan köra samma processer, men vissa är designade för energieffektivitet och andra är inställda för prestanda. Detta har visat sig vara ett framgångsrecept för batteridrivna enheter eftersom många uppgifter kan använda den långsammare mer strömsnåla kärnor, vilket ökar batteritiden, medan högprioriterade processer fortfarande kan köras i hög hastighet när det behövs.

Desktop CPU-arkitektur går också i riktning mot en heterogen kärndesign. Intels Alder Lake 12th generation Core CPU-linjen är den första stationära processorn som gör detta. I det här fallet är den huvudsakliga drivfaktorn för de mindre kärnorna inte nödvändigtvis energieffektivitet utan termisk effektivitet, även om det är två sidor av samma mynt. Att ha flera kraftfulla kärnor ger hög prestanda, medan många effektiva kärnor kan hantera bakgrundsuppgifter utan att påverka huvudkärnorna för mycket.

Slutsats

En flerkärnig CPU är en CPU som har flera bearbetningskärnor i ett enda paket, ofta, men inte enbart på samma tärning. Flerkärniga processorer erbjuder inte mycket direkt prestandaökning för många program, men genom att öka antalet kärnor behöver enkeltrådade program inte konkurrera lika mycket om CPU-tid. Vissa program kan dra full nytta av flera kärnor och direkt använda så många som är tillgängliga. Detta ger en stor prestandaökning, men på grund av termiska och effektbegränsningar är denna ökning inte nödvändigtvis en rak prestandafördubbling med en fördubbling av kärnor.