Centrala behandlingsenheten - Central processing unit

En Intel 80486DX2 CPU, sett från ovan
Undersidan av en Intel 80486DX2 , som visar dess stift

En central processing unit ( CPU ), även kallad central processor , huvudprocessor eller bara processor , är den elektroniska krets som exekverar instruktioner som består av ett datorprogram . CPU:n utför grundläggande aritmetiska , logiska, styrande och input/output (I/O) operationer som specificeras av instruktionerna i programmet. Detta står i kontrast till externa komponenter som huvudminne och I/O-kretsar och specialiserade processorer som grafikprocessorer (GPU).

Formen, designen och implementeringen av processorer har förändrats över tiden, men deras grundläggande funktion förblir nästan oförändrad. Huvudkomponenterna i en CPU inkluderar den aritmetiska-logiska enheten (ALU) som utför aritmetiska och logiska operationer , processorregister som levererar operander till ALU och lagrar resultaten av ALU-operationer, och en kontrollenhet som orkestrerar hämtningen (från minnet), avkodning och exekvering av instruktioner genom att styra den samordnade verksamheten för ALU, register och andra komponenter.

De flesta moderna processorer är implementerade på integrerade kretsar (IC) mikroprocessorer , med en eller flera processorer på ett enda metall-oxid-halvledare (MOS) IC-chip. Mikroprocessorchips med flera processorer är flerkärniga processorer . De individuella fysiska processorerna, processorkärnorna , kan också vara flertrådade för att skapa ytterligare virtuella eller logiska processorer.

En IC som innehåller en CPU kan också innehålla minne , perifera gränssnitt och andra komponenter i en dator; sådana integrerade enheter kallas på olika sätt mikrokontroller eller system på ett chip (SoC).

Arrayprocessorer eller vektorprocessorer har flera processorer som arbetar parallellt, utan att någon enhet anses vara central. Virtuella processorer är en abstraktion av dynamiska aggregerade beräkningsresurser.

Historia

EDVAC , en av de första datorerna med lagrade program

Tidiga datorer som ENIAC var tvungna att kopplas om fysiskt för att utföra olika uppgifter, vilket gjorde att dessa maskiner kallades "datorer med fasta program". Termen "central processing unit" har använts sedan så tidigt som 1955. Eftersom termen "CPU" generellt definieras som en anordning för programvarukörning (datorprogram), kom de tidigaste enheterna som med rätta kunde kallas CPU:er med tillkomsten på datorn med lagrat program .

Idén om ett lagrat program datorn hade varit redan finns i utformningen av Presper Eckert och John William Mauchly 's Eniac , men ursprungligen utelämnas så att den kunde vara klar tidigare. Den 30 juni 1945, innan ENIAC gjordes, distribuerade matematikern John von Neumann uppsatsen med titeln First Draft of a Report on EDVAC . Det var konturerna av en dator med lagrat program som så småningom skulle färdigställas i augusti 1949. EDVAC designades för att utföra ett visst antal instruktioner (eller operationer) av olika slag. Betecknande nog var att programmen som skrevs för EDVAC skulle lagras i höghastighets datorminne snarare än att specificeras av datorns fysiska ledningar. Detta övervann en allvarlig begränsning av ENIAC, vilket var den avsevärda tid och ansträngning som krävdes för att konfigurera om datorn för att utföra en ny uppgift. Med von Neumanns design kunde programmet som EDVAC körde ändras helt enkelt genom att ändra innehållet i minnet. EDVAC var dock inte den första datorn med lagrat program; i Manchester baby , en småskalig försöks lagrat program dator, sprang sitt första program den 21 juni 1948, och den Manchester Mark 1 körde sitt första program under natten den 16-17 juni 1949.

Tidiga processorer var anpassade konstruktioner som användes som en del av en större och ibland distinkt dator. Denna metod för att designa anpassade processorer för en viss applikation har dock till stor del gett vika för utvecklingen av multifunktionella processorer som produceras i stora kvantiteter. Denna standardisering började i eran av diskreta transistorstordatorer och minidatorer och har snabbt accelereras med populariseringen av den integrerade kretsen  (IC). IC har gjort det möjligt för allt mer komplexa processorer att designas och tillverkas för toleranser i storleksordningen nanometer . Både miniatyrisering och standardisering av processorer har ökat förekomsten av digitala enheter i det moderna livet långt utöver den begränsade tillämpningen av dedikerade datormaskiner. Moderna mikroprocessorer förekommer i elektroniska enheter, allt från bilar till mobiltelefoner, och ibland även i leksaker.

Medan von Neumann oftast är krediterad för designen av den lagrade programdatorn på grund av hans design av EDVAC, och designen blev känd som von Neumann-arkitekturen , hade andra före honom, som Konrad Zuse , föreslagit och implementerat liknande idéer. Den så kallade Harvard-arkitekturen av Harvard Mark I , som färdigställdes före EDVAC, använde också en lagrad programdesign med hjälp av stansat papperstejp snarare än elektroniskt minne. Den viktigaste skillnaden mellan von Neumann- och Harvard-arkitekturen är att den senare separerar lagring och behandling av CPU-instruktioner och data, medan den förra använder samma minnesutrymme för båda. De flesta moderna processorer är i första hand von Neumann i design, men processorer med Harvard-arkitekturen ses också, särskilt i inbyggda applikationer; till exempel, Atmel AVR- mikrokontroller är Harvard-arkitekturprocessorer.

Reläer och vakuumrör (termioniska rör) användes vanligen som kopplingselement; en användbar dator kräver tusentals eller tiotusentals växlingsenheter. Den totala hastigheten för ett system är beroende av omkopplarnas hastighet. Vakuumrörsdatorer som EDVAC tenderade att ha i genomsnitt åtta timmar mellan fel, medan relädatorer som (långsammare, men tidigare) Harvard Mark I misslyckades mycket sällan. I slutändan blev tubbaserade processorer dominerande eftersom de betydande hastighetsfördelarna i allmänhet uppvägde tillförlitlighetsproblemen. De flesta av dessa tidiga synkrona CPU:er körde med låga klockfrekvenser jämfört med moderna mikroelektroniska konstruktioner. Klocksignalfrekvenser som sträckte sig från 100 kHz till 4 MHz var mycket vanliga vid denna tid, begränsade till stor del av hastigheten på växlingsenheterna de byggdes med.

Transistor processorer

IBM PowerPC 604e-processor

Processorernas designkomplexitet ökade i takt med att olika tekniker underlättade att bygga mindre och mer pålitliga elektroniska enheter. Den första sådana förbättringen kom med tillkomsten av transistorn . Transistoriserade processorer under 1950- och 1960-talen behövde inte längre byggas av skrymmande, opålitliga och ömtåliga kopplingselement som vakuumrör och reläer . Med denna förbättring byggdes mer komplexa och pålitliga CPU:er på ett eller flera kretskort innehållande diskreta (individuella) komponenter.

1964 introducerade IBM sin IBM System/360- datorarkitektur som användes i en serie datorer som kunde köra samma program med olika hastighet och prestanda. Detta var betydande i en tid då de flesta elektroniska datorer var inkompatibla med varandra, även de som tillverkades av samma tillverkare. För att underlätta denna förbättring använde IBM konceptet med ett mikroprogram (ofta kallat "mikrokod"), som fortfarande ser utbredd användning i moderna processorer. System/360-arkitekturen var så populär att den dominerade stordatormarknaden i årtionden och lämnade ett arv som fortfarande förs vidare av liknande moderna datorer som IBM zSeries . 1965 introducerade Digital Equipment Corporation (DEC) en annan inflytelserik dator riktad mot vetenskaps- och forskningsmarknaderna, PDP-8 .

Fujitsu-kort med SPARC64 VIIIfx-processorer

Transistorbaserade datorer hade flera distinkta fördelar jämfört med sina föregångare. Bortsett från att underlätta ökad tillförlitlighet och lägre strömförbrukning tillät transistorer också CPU:er att arbeta med mycket högre hastigheter på grund av den korta kopplingstiden för en transistor jämfört med ett rör eller ett relä. Den ökade tillförlitligheten och dramatiskt ökade hastigheten hos kopplingselementen (som nästan uteslutande var transistorer vid den här tiden); CPU-klockfrekvenser i tiotals megahertz erhölls lätt under denna period. Dessutom, medan diskret transistor och IC-processorer var tung användning, nya högpresterande mönster som SIMD (Single Instruction Multiple Data) vektor processorer började dyka upp. Dessa tidiga experimentell design gav senare upphov till en tid präglad av specialiserade superdatorer som de som gjorts av Cray Inc och Fujitsu Ltd .

Småskaliga integrationsprocessorer

CPU, kärnminne och externt bussgränssnitt för en DEC PDP-8 /I, gjord av medelstora integrerade kretsar

Under denna period utvecklades en metod för att tillverka många sammankopplade transistorer i ett kompakt utrymme. Den integrerade kretsen (IC) tillåts ett stort antal transistorer som skall tillverkas på ett enda halvledar -baserad munstycke , eller "chip". Till en början miniatyriserades endast mycket grundläggande icke-specialiserade digitala kretsar som NOR-grindar till IC:er. CPU:er baserade på dessa "byggblock"-IC:er kallas i allmänhet för "småskalig integration" (SSI)-enheter. SSI ICs, som de som används i Apollo Guidance Computer , innehöll vanligtvis upp till några dussin transistorer. För att bygga en hel CPU av SSI IC:er krävdes tusentals individuella chips, men förbrukade fortfarande mycket mindre utrymme och kraft än tidigare diskreta transistorkonstruktioner.

IBM:s System/370 , en uppföljare till System/360, använde SSI IC:er snarare än Solid Logic Technology diskreta transistormoduler. DEC:s PDP-8 /I och KI10 PDP-10 bytte också från de individuella transistorerna som används av PDP-8 och PDP-10 till SSI IC, och deras extremt populära PDP-11 linje byggdes ursprungligen med SSI IC:er men implementerades så småningom med LSI-komponenter när dessa blev praktiska.

Storskaliga integrations-CPU:er

Lee Boysel publicerade inflytelserika artiklar, inklusive ett "manifest" från 1967, som beskrev hur man bygger motsvarigheten till en 32-bitars stordator från ett relativt litet antal storskaliga integrationskretsar (LSI). Det enda sättet att bygga LSI-chips, som är chips med hundra eller fler grindar, var att bygga dem med en MOS- halvledartillverkningsprocess (antingen PMOS-logik , NMOS-logik eller CMOS-logik ). Vissa företag fortsatte dock att bygga processorer av bipolära transistor-transistor logic (TTL)-chips eftersom bipolära junction-transistorer var snabbare än MOS-chips fram till 1970-talet (några företag som Datapoint fortsatte att bygga processorer av TTL-chips fram till början av 1980-talet). På 1960-talet var MOS IC:er långsammare och ansågs ursprungligen endast användbara i applikationer som krävde låg effekt. Efter utvecklingen av silicon-gate MOS-teknologi av Federico Faggin på Fairchild Semiconductor 1968, ersatte MOS ICs till stor del bipolär TTL som standardchipteknologi i början av 1970-talet.

När den mikroelektroniska tekniken utvecklades, placerades ett ökande antal transistorer på IC, vilket minskade antalet individuella IC:er som behövs för en komplett CPU. MSI- och LSI-IC:er ökade antalet transistorer till hundratals och sedan tusentals. År 1968 hade antalet IC:er som krävs för att bygga en komplett CPU reducerats till 24 IC:er av åtta olika typer, där varje IC innehåller ungefär 1000 MOSFET:er. I skarp kontrast till dess SSI- och MSI-föregångare innehöll den första LSI-implementeringen av PDP-11 en CPU som endast består av fyra integrerade LSI-kretsar.

Mikroprocessorer

Dör av en Intel 80486DX2 mikroprocessor (verklig storlek: 12 × 6,75 mm) i dess förpackning
Intel Core i5 CPU på ett Vaio E-serie laptop moderkort (till höger, under värmeröret )
Insidan av bärbar dator, med CPU borttagen från sockeln

Framsteg inom MOS IC-teknik ledde till uppfinningen av mikroprocessorn i början av 1970-talet. Sedan introduktionen av den första kommersiellt tillgängliga mikroprocessorn, Intel 4004 1971, och den första mycket använda mikroprocessorn, Intel 8080 1974, har denna klass av processorer nästan helt gått om alla andra implementeringsmetoder för centralprocessorer. Dåtidens stordator- och minidatortillverkare lanserade proprietära IC-utvecklingsprogram för att uppgradera sina äldre datorarkitekturer och producerade så småningom instruktionsuppsättningskompatibla mikroprocessorer som var bakåtkompatibla med deras äldre hårdvara och mjukvara. I kombination med tillkomsten och den slutliga framgången för den allestädes närvarande persondatorn , används termen CPU nu nästan uteslutande på mikroprocessorer. Flera processorer (betecknade kärnor ) kan kombineras i ett enda bearbetningschip.

Tidigare generationer av processorer implementerades som diskreta komponenter och många små integrerade kretsar (IC) på ett eller flera kretskort. Mikroprocessorer, å andra sidan, är processorer som tillverkas på ett mycket litet antal IC:er; vanligtvis bara en. Den totalt sett mindre CPU-storleken, som ett resultat av att den är implementerad på en enda platta, innebär snabbare bytestid på grund av fysiska faktorer som minskad gate parasitisk kapacitans . Detta har gjort det möjligt för synkrona mikroprocessorer att ha klockfrekvenser från tiotals megahertz till flera gigahertz. Dessutom har förmågan att konstruera mycket små transistorer på en IC ökat komplexiteten och antalet transistorer i en enda CPU många gånger. Denna allmänt observerade trend beskrivs av Moores lag , som hade visat sig vara en ganska korrekt prediktor för tillväxten av CPU-komplexitet (och annan IC) fram till 2016.

Medan processorernas komplexitet, storlek, konstruktion och allmänna form har förändrats enormt sedan 1950, har den grundläggande designen och funktionen inte förändrats mycket alls. Nästan alla vanliga processorer idag kan mycket exakt beskrivas som von Neumann lagrade programmaskiner. Eftersom Moores lag inte längre gäller har det uppstått farhågor om gränserna för integrerad kretstransistorteknologi. Extrem miniatyrisering av elektroniska grindar gör att effekterna av fenomen som elektromigrering och undertröskelläckage blir mycket mer betydande. Dessa nyare farhågor är bland de många faktorerna som får forskare att undersöka nya beräkningsmetoder som kvantdatorn , såväl som att utöka användningen av parallellism och andra metoder som utökar användbarheten av den klassiska von Neumann-modellen.

Drift

Den grundläggande operationen för de flesta processorer, oavsett den fysiska form de har, är att exekvera en sekvens av lagrade instruktioner som kallas ett program. Instruktionerna som ska köras lagras i något slags datorminne . Nästan alla CPU:er följer hämtnings-, avkodnings- och exekveringsstegen i sin operation, som tillsammans kallas instruktionscykeln .

Efter exekveringen av en instruktion upprepas hela processen, varvid nästa instruktionscykel normalt hämtar nästa instruktion på grund av det ökade värdet i programräknaren . Om en hoppinstruktion utfördes kommer programräknaren att modifieras för att innehålla adressen för instruktionen som hoppades till och programexekveringen fortsätter normalt. I mer komplexa processorer kan flera instruktioner hämtas, avkodas och exekveras samtidigt. Det här avsnittet beskriver vad som allmänt kallas den " klassiska RISC-pipelinen ", vilket är ganska vanligt bland de enkla processorer som används i många elektroniska enheter (ofta kallade mikrokontroller). Den ignorerar till stor del den viktiga rollen som CPU-cache, och därför åtkomststadiet i pipelinen.

Vissa instruktioner manipulerar programräknaren snarare än att producera resultatdata direkt; sådana instruktioner kallas allmänt för "hopp" och underlättar programbeteende som loopar , villkorad programexekvering (genom användningen av ett villkorligt hopp) och förekomsten av funktioner . I vissa processorer ändrar vissa andra instruktioner bitarnas tillstånd i ett "flagga"-register . Dessa flaggor kan användas för att påverka hur ett program beter sig, eftersom de ofta indikerar resultatet av olika operationer. Till exempel, i sådana processorer utvärderar en "jämför"-instruktion två värden och sätter eller rensar bitar i flaggregistret för att indikera vilken som är störst eller om de är lika; en av dessa flaggor skulle sedan kunna användas av en senare hoppinstruktion för att bestämma programflödet.

Hämta

Det första steget, hämtning, innebär att man hämtar en instruktion (som representeras av ett nummer eller en sekvens av nummer) från programminnet. Instruktionens plats (adress) i programminnet bestäms av programräknaren (PC; kallas "instruktionspekaren" i Intel x86-mikroprocessorer ), som lagrar ett nummer som identifierar adressen till nästa instruktion som ska hämtas. Efter att en instruktion har hämtats inkrementeras PC:n med instruktionens längd så att den kommer att innehålla adressen till nästa instruktion i sekvensen. Ofta måste instruktionen som ska hämtas hämtas från relativt långsamt minne, vilket gör att CPU:n stannar medan den väntar på att instruktionen ska returneras. Detta problem åtgärdas till stor del i moderna processorer av cachar och pipeline-arkitekturer (se nedan).

Avkoda

Instruktionen som CPU:n hämtar från minnet avgör vad CPU:n kommer att göra. I avkodningssteget, utfört av binära avkodarkretsar känd som instruktionsavkodaren , omvandlas instruktionen till signaler som styr andra delar av CPU:n.

Sättet på vilket instruktionen tolkas definieras av CPU:ns instruktionsuppsättningsarkitektur (ISA). Ofta indikerar en grupp av bitar (det vill säga ett "fält") i instruktionen, kallad opcode, vilken operation som ska utföras, medan de återstående fälten vanligtvis tillhandahåller kompletterande information som krävs för operationen, såsom operanderna. Dessa operander kan specificeras som ett konstant värde (kallas ett omedelbart värde), eller som platsen för ett värde som kan vara ett processorregister eller en minnesadress, som bestäms av något adresseringsläge .

I vissa CPU-konstruktioner är instruktionsavkodaren implementerad som en fast ansluten, oföränderlig binär avkodarkrets. I andra används ett mikroprogram för att översätta instruktioner till uppsättningar av CPU-konfigurationssignaler som appliceras sekventiellt över flera klockpulser. I vissa fall är minnet som lagrar mikroprogrammet omskrivbart, vilket gör det möjligt att ändra sättet på vilket CPU:n avkodar instruktioner.

Kör

Efter hämtnings- och avkodningsstegen utförs exekveringssteget. Beroende på CPU-arkitekturen kan detta bestå av en enda åtgärd eller en sekvens av åtgärder. Under varje åtgärd aktiverar eller inaktiverar styrsignaler olika delar av CPU:n elektriskt så att de kan utföra hela eller delar av den önskade operationen. Åtgärden fullbordas sedan, typiskt som svar på en klockpuls. Mycket ofta skrivs resultaten till ett internt CPU-register för snabb åtkomst genom efterföljande instruktioner. I andra fall kan resultaten skrivas till ett långsammare men billigare huvudminne med högre kapacitet .

Till exempel, om en additionsinstruktion ska utföras, aktiveras register som innehåller operander (tal som ska summeras), liksom de delar av den aritmetiska logiska enheten (ALU) som utför addition. När klockpulsen inträffar flödar operanderna från källregistren in i ALU:n och summan visas vid dess utgång. Vid efterföljande klockpulser aktiveras (och avaktiveras) andra komponenter för att flytta utgången (summan av operationen) till lagring (t.ex. ett register eller minne). Om den resulterande summan är för stor (dvs. den är större än ALU:s utgående ordstorlek), kommer en aritmetisk spillflagga att ställas in, vilket påverkar nästa operation.

Struktur och genomförande

Blockschema över en grundläggande enprocessor-CPU-dator. Svarta linjer indikerar dataflöde, medan röda linjer indikerar kontrollflöde; pilar indikerar flödesriktningar.

Inkopplad i en CPU:s kretsar är en uppsättning grundläggande operationer den kan utföra, en så kallad instruktionsuppsättning . Sådana operationer kan till exempel innebära att lägga till eller subtrahera två tal, jämföra två tal eller hoppa till en annan del av ett program. Varje instruktion representeras av en unik kombination av bitar , känd som maskinspråkets opcode . Under bearbetning av en instruktion avkodar CPU:n opkoden (via en binär avkodare ) till styrsignaler, som orkestrerar CPU:ns beteende. En komplett maskinspråksinstruktion består av en op-kod och i många fall ytterligare bitar som anger argument för operationen (till exempel talen som ska summeras vid en additionsoperation). Om man går upp på komplexitetsskalan är ett maskinspråksprogram en samling maskinspråksinstruktioner som CPU:n exekverar.

Den faktiska matematiska operationen för varje instruktion utförs av en kombinationslogikkrets inom CPU:n processor, känd som aritmetisk-logisk enhet eller ALU. I allmänhet exekverar en CPU en instruktion genom att hämta den från minnet, använda sin ALU för att utföra en operation och sedan lagra resultatet i minnet. Förutom instruktionerna för heltalsmatematik och logiska operationer, finns det olika andra maskininstruktioner, såsom de för att ladda data från minnet och lagra det tillbaka, förgreningsoperationer och matematiska operationer på flyttalsnummer som utförs av CPU:ns flyttalsenhet (FPU) ).

Styrenhet

Den Styrenheten (CU) är en komponent av CPU som styr driften av processorn. Den talar om för datorns minne, aritmetiska och logiska enhet och inmatnings- och utgångsenheter hur de ska svara på instruktionerna som har skickats till processorn.

Den styr driften av de andra enheterna genom att tillhandahålla timing och styrsignaler. De flesta datorresurser hanteras av CU. Det styr dataflödet mellan CPU:n och de andra enheterna. John von Neumann inkluderade styrenheten som en del av von Neumann-arkitekturen . I modern datordesign är styrenheten vanligtvis en intern del av CPU:n med dess övergripande roll och funktion oförändrad sedan introduktionen.

Aritmetisk logisk enhet

Symbolisk representation av en ALU och dess in- och utsignaler

Den aritmetiska logiska enheten (ALU) är en digital krets i processorn som utför heltalsaritmetiska och bitvisa logiska operationer. Ingångarna till ALU är de dataord som ska opereras på (kallade operander ), statusinformation från tidigare operationer och en kod från styrenheten som indikerar vilken operation som ska utföras. Beroende på instruktionen som exekveras kan operanderna komma från interna CPU-register eller externt minne, eller så kan de vara konstanter som genereras av själva ALU:n.

När alla insignaler har stabiliserats och fortplantat sig genom ALU-kretsen, visas resultatet av den utförda operationen vid ALU:s utgångar. Resultatet består av både ett dataord, som kan lagras i ett register eller minne, och statusinformation som vanligtvis lagras i ett speciellt internt CPU-register reserverat för detta ändamål.

Adressgenereringsenhet

Adressgenereringsenhet ( AGU ), ibland även kallad adressberäkningsenhet ( ACU ), är en exekveringsenhet inuti CPU:n som beräknar adresser som används av CPU:n för att komma åt huvudminnet . Genom att låta adressberäkningar hanteras av separata kretsar som arbetar parallellt med resten av CPU:n, kan antalet CPU-cykler som krävs för att exekvera olika maskininstruktioner reduceras, vilket ger prestandaförbättringar.

När de utför olika operationer måste CPU:er beräkna minnesadresser som krävs för att hämta data från minnet; till exempel, i-minne positioner av uppsättningselement måste beräknas innan CPU kan hämta data från verkliga minnesplatser. Dessa adressgenererande beräkningar involverar olika heltalsaritmetiska operationer , såsom addition, subtraktion, modulo-operationer eller bitskift . Ofta involverar beräkning av en minnesadress mer än en generell maskininstruktion, som inte nödvändigtvis avkodas och exekveras snabbt. Genom att införliva en AGU i en CPU-design, tillsammans med att introducera specialiserade instruktioner som använder AGU, kan olika adressgenereringsberäkningar avlastas från resten av CPU:n och kan ofta exekveras snabbt i en enda CPU-cykel.

Möjligheterna hos en AGU beror på en viss CPU och dess arkitektur . Sålunda implementerar och exponerar vissa AGU:er fler adressberäkningsoperationer, medan vissa också inkluderar mer avancerade specialiserade instruktioner som kan arbeta på flera operander samtidigt. Dessutom inkluderar vissa CPU-arkitekturer flera AGU så att mer än en adressberäkningsoperation kan utföras samtidigt, vilket ger ytterligare prestandaförbättringar genom att dra fördel av den superskalära karaktären hos avancerade CPU-designer. Till exempel införlivar Intel flera AGU:er i sina Sandy Bridge- och Haswell- mikroarkitekturer , som ökar bandbredden för CPU-minnesundersystemet genom att tillåta flera minnesåtkomstinstruktioner att exekveras parallellt.

Minneshanteringsenhet (MMU)

Många mikroprocessorer (i smartphones och stationära datorer, bärbara datorer, serverdatorer) har en minneshanteringsenhet som översätter logiska adresser till fysiska RAM-adresser, ger minnesskydd och personsökningsförmåga , användbart för virtuellt minne . Enklare processorer, särskilt mikrokontroller , inkluderar vanligtvis inte en MMU.

Cache

En CPU-cache är en hårdvarucache som används av en dators centralenhet (CPU) för att minska den genomsnittliga kostnaden (tid eller energi) för att komma åt data från huvudminnet . En cache är ett mindre, snabbare minne, närmare en processorkärna , som lagrar kopior av data från ofta använda huvudminnesplatser . De flesta processorer har olika oberoende cacher, inklusive instruktions- och datacache , där datacchen vanligtvis är organiserad som en hierarki av fler cachenivåer (L1, L2, L3, L4, etc.).

Alla moderna (snabba) CPU:er (med få specialiserade undantag) har flera nivåer av CPU-cacher. De första CPU:erna som använde en cache hade bara en nivå av cache; till skillnad från senare nivå 1-cacher, delades den inte upp i L1d (för data) och L1i (för instruktioner). Nästan alla nuvarande processorer med cacher har en delad L1-cache. De har också L2-cacher och, för större processorer, L3-cacher också. L2-cachen är vanligtvis inte delad och fungerar som ett gemensamt arkiv för den redan delade L1-cachen. Varje kärna i en flerkärnig processor har en dedikerad L2-cache och delas vanligtvis inte mellan kärnorna. L3-cachen, och cacher på högre nivå, delas mellan kärnorna och delas inte. En L4-cache är för närvarande ovanlig och är vanligtvis på dynamiskt slumpmässigt minne (DRAM), snarare än på statiskt slumpmässigt minne (SRAM), på en separat tärning eller chip. Det var också fallet historiskt med L1, medan större chips har tillåtit integration av den och i allmänhet alla cachenivåer, möjligen med undantag för den sista nivån. Varje extra nivå av cache tenderar att vara större och optimeras på olika sätt.

Det finns andra typer av cachar (som inte räknas till "cachestorleken" för de viktigaste cacharna som nämns ovan), till exempel översättnings-lookaside-bufferten (TLB) som är en del av minneshanteringsenheten (MMU) som de flesta processorer har.

Cacher är i allmänhet dimensionerade i två potenser: 2, 8, 16 etc. KiB eller MiB (för större icke-L1) storlekar, även om IBM z13 har en 96 KiB L1-instruktionscache.

Klockfrekvens

De flesta processorer är synkrona kretsar , vilket innebär att de använder en klocksignal för att stimulera sina sekventiella operationer. Klocksignalen produceras av en extern oscillatorkrets som genererar ett konsekvent antal pulser varje sekund i form av en periodisk fyrkantvåg . Frekvensen på klockpulserna bestämmer hastigheten med vilken en CPU exekverar instruktioner och följaktligen, ju snabbare klockan är, desto fler instruktioner kommer CPU:n att exekvera varje sekund.

För att säkerställa korrekt drift av CPU:n är klockperioden längre än den maximala tiden som behövs för alla signaler att fortplanta sig (röra sig) genom CPU:n. Genom att ställa in klockperioden till ett värde långt över den värsta utbredningsfördröjningen är det möjligt att designa hela CPU:n och hur den flyttar data runt "kanterna" av den stigande och fallande klocksignalen. Detta har fördelen av att förenkla processorn avsevärt, både ur ett designperspektiv och ett komponenträkningsperspektiv. Men det har också nackdelen att hela CPU:n måste vänta på sina långsammaste element, även om vissa delar av den är mycket snabbare. Denna begränsning har till stor del kompenserats av olika metoder för att öka CPU-parallellen (se nedan).

Men arkitektoniska förbättringar ensamma löser inte alla nackdelarna med globalt synkrona processorer. Till exempel är en klocksignal föremål för fördröjningarna av någon annan elektrisk signal. Högre klockhastigheter i allt mer komplexa processorer gör det svårare att hålla klocksignalen i fas (synkroniserad) genom hela enheten. Detta har lett till att många moderna processorer kräver att flera identiska klocksignaler tillhandahålls för att undvika att en enda signal försenas tillräckligt mycket för att få processorn att fungera fel. En annan viktig fråga, eftersom klockfrekvenserna ökar dramatiskt, är mängden värme som avleds av CPU:n . Den ständigt växlande klockan gör att många komponenter växlar oavsett om de används vid den tidpunkten. I allmänhet använder en komponent som växlar mer energi än ett element i statiskt tillstånd. Därför, när klockfrekvensen ökar, ökar också energiförbrukningen, vilket gör att CPU:n kräver mer värmeavledning i form av CPU-kylningslösningar .

En metod för att hantera växling av onödiga komponenter kallas clock gating , vilket innebär att stänga av klocksignalen till onödiga komponenter (effektivt inaktivera dem). Detta anses dock ofta vara svårt att implementera och ser därför inte vanlig användning utanför konstruktioner med mycket låg effekt. En anmärkningsvärd nyligen CPU-design som använder omfattande klockning är den IBM PowerPC- baserade Xenon som används i Xbox 360 ; på så sätt reduceras strömkraven för Xbox 360 avsevärt.

Klockfria processorer

En annan metod för att ta itu med några av problemen med en global klocksignal är att ta bort klocksignalen helt och hållet. Samtidigt som borttagning av den globala klocksignalen gör designprocessen avsevärt mer komplex på många sätt, har asynkrona (eller klocklösa) konstruktioner markanta fördelar i strömförbrukning och värmeavledning jämfört med liknande synkrona konstruktioner. Även om det är något ovanligt, har hela asynkrona processorer byggts utan att använda en global klocksignal. Två anmärkningsvärda exempel på detta är den ARM- kompatibla AMULET och den MIPS R3000-kompatibla MiniMIPS.{{

Istället för att helt ta bort klocksignalen tillåter vissa CPU-designer att vissa delar av enheten är asynkrona, till exempel att använda asynkrona ALU:er i samband med superskalär pipelining för att uppnå vissa aritmetiska prestandavinster. Även om det inte är helt klart om helt asynkrona konstruktioner kan prestera på en jämförbar eller bättre nivå än sina synkrona motsvarigheter, är det uppenbart att de åtminstone utmärker sig i enklare matematiska operationer. Detta, i kombination med deras utmärkta strömförbrukning och värmeavledningsegenskaper, gör dem mycket lämpliga för inbyggda datorer .

Spänningsregulatormodul

Många moderna processorer har en inbyggd strömhanteringsmodul som reglerar spänningsförsörjningen på begäran till processorkretsen så att den kan hålla balansen mellan prestanda och strömförbrukning.

Heltalsintervall

Varje CPU representerar numeriska värden på ett specifikt sätt. Till exempel representerade vissa tidiga digitala datorer siffror som bekanta decimala (bas 10) numeriska systemvärden, och andra har använt mer ovanliga representationer som ternära (bas tre). Nästan alla moderna processorer representerar siffror i binär form, där varje siffra representeras av någon fysisk kvantitet med två värden, såsom en "hög" eller "låg" spänning .

Ett sexbitars ord som innehåller den binärkodade representationen av decimalvärdet 40. De flesta moderna CPU:er använder ordstorlekar som är en potens av två, till exempel 8, 16, 32 eller 64 bitar.

Relaterat till numerisk representation är storleken och precisionen hos heltal som en CPU kan representera. När det gäller en binär CPU mäts detta av antalet bitar (signifikanta siffror i ett binärt kodat heltal) som CPU:n kan bearbeta i en operation, vilket vanligtvis kallas ordstorlek , bitbredd , datavägsbredd , heltalsprecision , eller heltalsstorlek . En CPU:s heltalsstorlek avgör intervallet av heltalsvärden som den direkt kan arbeta på. Till exempel kan en 8-bitars CPU direkt manipulera heltal representerade av åtta bitar, som har ett intervall på 256 (2 8 ) diskreta heltalsvärden.

Heltalsintervall kan också påverka antalet minnesplatser som CPU:n kan adressera direkt (en adress är ett heltalsvärde som representerar en specifik minnesplats). Till exempel, om en binär CPU använder 32 bitar för att representera en minnesadress så kan den direkt adressera 2 32 minnesplatser. För att kringgå denna begränsning och av olika andra skäl använder vissa processorer mekanismer (som bankväxling ) som gör att ytterligare minne kan adresseras.

CPU:er med större ordstorlekar kräver mer kretsar och är följaktligen fysiskt större, kostar mer och förbrukar mer ström (och genererar därför mer värme). Som ett resultat används mindre 4- eller 8-bitars mikrokontroller vanligtvis i moderna applikationer även om CPU:er med mycket större ordstorlekar (som 16, 32, 64, till och med 128-bitars) är tillgängliga. När högre prestanda krävs kan dock fördelarna med en större ordstorlek (större dataintervall och adressutrymmen) uppväga nackdelarna. En CPU kan ha interna datavägar kortare än ordstorleken för att minska storlek och kostnad. Till exempel, även om IBM System/360- instruktionsuppsättningen var en 32-bitars instruktionsuppsättning, hade System/360 Model 30 och Model 40 8-bitars datavägar i den aritmetiska logiska enheten, så att en 32-bitars addering krävde fyra cykler, en för varje 8 bitar av operanderna, och även om instruktionsuppsättningen i Motorola 68000-serien var en 32-bitars instruktionsuppsättning, hade Motorola 68000 och Motorola 68010 16-bitars datavägar i den aritmetiska logiska enheten, så att en 32-bitars tillägg krävde två cykler.

För att få några av fördelarna med både lägre och högre bitlängder har många instruktionsuppsättningar olika bitbredder för heltalsdata och flyttalsdata, vilket gör att CPU:er som implementerar den instruktionsuppsättningen har olika bitbredder för olika delar av enheten. Till exempel var IBM System/360- instruktionsuppsättningen i första hand 32-bitars, men stödde 64-bitars flyttalsvärden för att underlätta större noggrannhet och omfång i flyttal. System/360 Model 65 hade en 8-bitars adderare för binär aritmetik med decimaler och fixpunkter och en 60-bitars adderare för aritmetik med flyttal. Många senare CPU-designer använder liknande blandade bitbredder, speciellt när processorn är avsedd för allmän användning där en rimlig balans mellan heltals- och flyttalskapacitet krävs.

Parallellism

Modell av en subskalär CPU, där det tar femton klockcykler att slutföra tre instruktioner

Beskrivningen av den grundläggande driften av en CPU som erbjuds i föregående avsnitt beskriver den enklaste formen som en CPU kan ta. Denna typ av CPU, vanligtvis kallad subskalär , arbetar på och exekverar en instruktion på en eller två databitar åt gången, det vill säga mindre än en instruktion per klockcykel ( IPC < 1 ).

Denna process ger upphov till en inneboende ineffektivitet i subskalära processorer. Eftersom endast en instruktion exekveras åt gången, måste hela CPU:n vänta på att den instruktionen ska slutföras innan den går vidare till nästa instruktion. Som ett resultat blir den subskalära CPU:n "hängd" på instruktioner som tar mer än en klockcykel för att slutföra exekvering. Inte ens att lägga till en andra exekveringsenhet (se nedan) förbättrar inte prestandan mycket; istället för att en väg hängs upp, hängs nu två banor upp och antalet oanvända transistorer utökas. Denna design, där CPU:ns exekveringsresurser kan arbeta på endast en instruktion åt gången, kan endast möjligen nå skalär prestanda (en instruktion per klockcykel, IPC = 1 ). Prestandan är dock nästan alltid subskalär (mindre än en instruktion per klockcykel, IPC < 1 ).

Försök att uppnå skalär och bättre prestanda har resulterat i en mängd olika designmetoder som gör att CPU:n beter sig mindre linjärt och mer parallellt. När man hänvisar till parallellism i CPU: er, används vanligtvis två termer för att klassificera dessa designtekniker:

Varje metod skiljer sig både i sättet de implementeras på, såväl som den relativa effektiviteten de ger för att öka CPU:ns prestanda för en applikation.

Parallellism på instruktionsnivå

Grundläggande femstegs pipeline. I bästa fall kan denna pipeline upprätthålla en slutförandehastighet på en instruktion per klockcykel.

En av de enklaste metoderna för ökad parallellitet är att påbörja de första stegen av instruktionshämtning och avkodning innan den tidigare instruktionen slutförs exekvering. Detta är en teknik som kallas instruktionspipelining och används i nästan alla moderna processorer för allmänna ändamål. Pipelining tillåter att flera instruktioner exekveras samtidigt genom att dela upp exekveringsvägen i diskreta steg. Denna separation kan jämföras med ett löpande band, där en instruktion görs mer komplett i varje steg tills den lämnar exekveringsrörledningen och dras tillbaka.

Pipelining introducerar dock möjligheten för en situation där resultatet av den föregående operationen behövs för att slutföra nästa operation; ett tillstånd som ofta kallas databeroendekonflikt. Därför måste pipelinebehandlade processorer kontrollera dessa typer av förhållanden och fördröja en del av pipelinen vid behov. En pipelined processor kan bli mycket nästan skalär, endast hämmad av pipeline-stopp (en instruktion som spenderar mer än en klockcykel i ett steg).

En enkel superskalär pipeline. Genom att hämta och skicka två instruktioner åt gången kan maximalt två instruktioner per klockcykel slutföras.

Förbättringar i instruktionspipelining ledde till ytterligare minskningar i inaktiv tid för CPU-komponenter. Konstruktioner som sägs vara superskalära inkluderar en lång instruktionspipeline och flera identiska exekveringsenheter , såsom lastlagringsenheter , aritmetik-logiska enheter , flyttalsenheter och adressgenereringsenheter . I en superskalär pipeline läses instruktionerna och skickas till en dispatcher, som bestämmer om instruktionerna kan utföras parallellt (samtidigt). Om så är fallet skickas de till avrättningsenheter, vilket resulterar i att de utförs samtidigt. I allmänhet är antalet instruktioner som en superskalär CPU kommer att slutföra i en cykel beroende på antalet instruktioner som den kan skicka samtidigt till exekveringsenheter.

Det mesta av svårigheten i designen av en superskalär CPU-arkitektur ligger i att skapa en effektiv dispatcher. Avsändaren måste snabbt kunna avgöra om instruktioner kan utföras parallellt, samt skicka dem på ett sådant sätt att så många exekveringsenheter sysselsätts som möjligt. Detta kräver att instruktionspipelinen fylls så ofta som möjligt och kräver betydande mängder CPU-cache . Det gör det också fara -avoiding tekniker som grenprediktion , spekulativ exekvering , Registret döpa , out-of-order exekvering och transaktionsminne avgörande för att upprätthålla höga nivåer av prestanda. Genom att försöka förutsäga vilken gren (eller väg) en villkorlig instruktion kommer att ta, kan CPU:n minimera antalet gånger som hela pipelinen måste vänta tills en villkorlig instruktion är klar. Spekulativ exekvering ger ofta blygsamma prestandaökningar genom att exekvera delar av koden som kanske inte behövs efter att en villkorlig operation har slutförts. Exekvering i oordning ordnar något om ordningen i vilken instruktioner exekveras för att minska förseningar på grund av databeroende. Också i fallet med en enkel instruktionsström, flera dataström — ett fall när mycket data från samma typ måste bearbetas — kan moderna processorer inaktivera delar av pipelinen så att när en enskild instruktion exekveras många gånger, kan CPU:n hoppar över hämtnings- och avkodningsfaserna och ökar därmed prestandan avsevärt vid vissa tillfällen, särskilt i mycket monotona programmotorer som programvara för att skapa video och fotobearbetning.

I fallet där bara en del av CPU:n är superskalär, drabbas den del som inte är det en prestationsstraff på grund av schemaläggningsstopp. Intel P5 Pentium hade två superskalära ALU:er som kunde acceptera en instruktion per klockcykel vardera, men dess FPU kunde inte. Således var P5 heltals superskalär men inte flyttals superskalär. Intels efterträdare till P5-arkitekturen, P6 , lade till superskalära förmågor till sina flyttalsfunktioner.

Enkel pipelining och superskalär design ökar en CPU:s ILP genom att tillåta den att exekvera instruktioner med hastigheter som överstiger en instruktion per klockcykel. De flesta moderna CPU-designer är åtminstone något superskalära, och nästan alla processorer för allmänna ändamål som designats under det senaste decenniet är superskalära. Under senare år har en del av tyngdpunkten vid design av hög-ILP-datorer flyttats ut från CPU:ns hårdvara och till dess mjukvarugränssnitt, eller instruktionsuppsättningsarkitektur (ISA). Strategin för det mycket långa instruktionsordet (VLIW) gör att viss ILP impliceras direkt av programvaran, vilket minskar CPU:ns arbete med att öka ILP och därigenom minskar designkomplexiteten.

Parallellism på uppgiftsnivå

En annan strategi för att uppnå prestanda är att köra flera trådar eller processer parallellt. Detta forskningsområde är känt som parallell beräkning . I Flynns taxonomi är denna strategi känd som multipel instruktionsström, multipel dataström (MIMD).

En teknik som användes för detta ändamål var multiprocessing (MP). Den ursprungliga smaken av denna teknik är känd som symmetrisk multiprocessing (SMP), där ett litet antal processorer delar en sammanhängande bild av deras minnessystem. I detta schema har varje CPU ytterligare hårdvara för att upprätthålla en ständigt uppdaterad bild av minnet. Genom att undvika inaktuella vyer av minnet kan processorerna samarbeta i samma program och program kan migrera från en processor till en annan. För att öka antalet samarbetande processorer till mer än en handfull, introducerades system som icke-uniform minnesåtkomst (NUMA) och katalogbaserade koherensprotokoll på 1990-talet. SMP-system är begränsade till ett litet antal processorer medan NUMA-system har byggts med tusentals processorer. Ursprungligen byggdes multiprocessing med hjälp av flera diskreta CPU:er och kort för att implementera sammankopplingen mellan processorerna. När processorerna och deras sammankoppling alla är implementerade på ett enda chip kallas tekniken för chip-level multiprocessing (CMP) och det enda chippet som en multi-core processor .

Det insågs senare att finkornig parallellism existerade med ett enda program. Ett enda program kan ha flera trådar (eller funktioner) som kan köras separat eller parallellt. Några av de tidigaste exemplen på denna teknik implementerade in-/utdatabehandling såsom direkt minnesåtkomst som en separat tråd från beräkningstråden. Ett mer generellt tillvägagångssätt för denna teknik introducerades på 1970-talet när system designades för att köra flera beräkningstrådar parallellt. Denna teknik är känd som multi-threading (MT). Detta tillvägagångssätt anses vara mer kostnadseffektivt än multiprocessing, eftersom endast ett litet antal komponenter inom en CPU replikeras för att stödja MT i motsats till hela CPU:n när det gäller MP. I MT delas exekveringsenheterna och minnessystemet inklusive cacharna mellan flera trådar. Nackdelen med MT är att hårdvarustödet för multithreading är mer synligt för mjukvara än för MP och därför måste övervakarprogramvara som operativsystem genomgå större förändringar för att stödja MT. En typ av MT som implementerades är känd som temporal multithreading , där en tråd exekveras tills den har stannat i väntan på att data ska återvända från externt minne. I detta schema skulle CPU:n sedan snabbt kontextväxla till en annan tråd som är redo att köras, bytet görs ofta i en CPU-klockcykel, såsom UltraSPARC T1 . En annan typ av MT är simultan multithreading , där instruktioner från flera trådar exekveras parallellt inom en CPU-klockcykel.

Under flera decennier från 1970-talet till början av 2000-talet låg fokus vid design av högpresterande processorer för allmänna ändamål till stor del på att uppnå hög ILP genom teknologier som pipelining, cacher, superskalär exekvering, out-of-order exekvering, etc. Denna trend kulminerade i stora , kraftkrävande processorer som Intel Pentium 4 . I början av 2000-talet hindrades CPU-designers från att uppnå högre prestanda från ILP-tekniker på grund av den växande skillnaden mellan CPU-driftsfrekvenser och huvudminnesdriftsfrekvenser samt eskalerande CPU-effektförlust på grund av mer esoteriska ILP-tekniker.

CPU-designers lånade sedan idéer från kommersiella datormarknader som transaktionsbearbetning , där den sammanlagda prestandan för flera program, även känd som genomströmningsberäkning , var viktigare än prestandan för en enda tråd eller process.

Denna omkastning av tyngdpunkten bevisas av spridningen av processordesigner med dubbla och fler kärnor och särskilt Intels nyare design som liknar dess mindre superskalära P6- arkitektur. Sen design i flera processorfamiljer uppvisar CMP, inklusive x86-64 Opteron och Athlon 64 X2 , SPARC UltraSPARC T1 , IBM POWER4 och POWER5 , såväl som flera processorer för videospelskonsoler som Xbox 360 :s trippelkärniga PowerPC-design, och PlayStation 3 :s 7-kärniga cellmikroprocessor .

Dataparallellism

Ett mindre vanligt men allt viktigare paradigm för processorer (och faktiskt datoranvändning i allmänhet) handlar om dataparallellism. Processorerna som diskuterats tidigare kallas alla för någon typ av skalär enhet. Som namnet antyder, hanterar vektorprocessorer flera bitar av data i samband med en instruktion. Detta står i kontrast till skalära processorer, som hanterar en bit data för varje instruktion. Med Flynns taxonomi hänvisas dessa två system för att hantera data i allmänhet till som enkel instruktionsström , multipel dataström ( SIMD ) respektive enkel instruktionsström , enkel dataström ( SISD ). Den stora nyttan med att skapa processorer som hanterar datavektorer ligger i att optimera uppgifter som tenderar att kräva samma operation (till exempel en summa eller en punktprodukt ) som ska utföras på en stor uppsättning data. Några klassiska exempel på dessa typer av uppgifter inkluderar multimediaapplikationer (bilder, video och ljud), såväl som många typer av vetenskapliga och tekniska uppgifter. Medan en skalär processor måste slutföra hela processen med att hämta, avkoda och exekvera varje instruktion och värde i en uppsättning data, kan en vektorprocessor utföra en enda operation på en jämförelsevis stor uppsättning data med en instruktion. Detta är endast möjligt när applikationen tenderar att kräva många steg som tillämpar en operation på en stor uppsättning data.

De flesta tidiga vektorprocessorer, såsom Cray-1 , associerades nästan uteslutande med vetenskaplig forskning och kryptografiapplikationer . Men eftersom multimedia till stor del har övergått till digitala medier har behovet av någon form av SIMD i processorer för allmänt bruk blivit betydande. Kort efter att införandet av flyttalsenheter började bli vanligt förekommande i processorer för allmänna ändamål, började specifikationer för och implementeringar av SIMD-exekveringsenheter också dyka upp för processorer för generella ändamål. Några av dessa tidiga SIMD-specifikationer - som HP:s Multimedia Acceleration Extensions (MAX) och Intels MMX - var enbart heltal. Detta visade sig vara ett betydande hinder för vissa mjukvaruutvecklare, eftersom många av de applikationer som drar nytta av SIMD främst handlar om flyttal . Progressivt förfinade och gjorde utvecklare om dessa tidiga konstruktioner till några av de vanliga moderna SIMD-specifikationerna, som vanligtvis förknippas med en instruktionsuppsättningsarkitektur (ISA). Några anmärkningsvärda moderna exempel inkluderar Intels Streaming SIMD Extensions (SSE) och den PowerPC-relaterade AltiVec (även känd som VMX).

Virtuella CPU:er

Cloud computing kan innebära att dela upp CPU-drift i virtuella centralprocessorer ( vCPU: er).

En värd är den virtuella motsvarigheten till en fysisk maskin på vilken ett virtuellt system fungerar. När det finns flera fysiska maskiner som arbetar tillsammans och hanteras som en helhet, bildar de grupperade dator- och minnesresurserna ett kluster . I vissa system är det möjligt att dynamiskt lägga till och ta bort från ett kluster. Resurser tillgängliga på värd- och klusternivå kan delas upp i resurspooler med fin granularitet .

Prestanda

Den prestanda eller hastigheten hos en processor beror bland många andra faktorer, klockhastigheten (i allmänhet ges i multiplar av hertz ) och instruktioner per klock (IPC), som tillsammans är de faktorer för de instruktioner per sekund (IPS) att den CPU kan prestera. Många rapporterade IPS-värden har representerat "peak" exekveringshastigheter på artificiella instruktionssekvenser med få grenar, medan realistiska arbetsbelastningar består av en blandning av instruktioner och applikationer, av vilka några tar längre tid att exekvera än andra. Utförandet av minneshierarki också i hög grad påverkar processorprestanda, en fråga knappt beaktas i MIPS beräkningar. På grund av dessa problem har olika standardiserade tester, ofta kallade "riktmärken" för detta ändamål‍—‌såsom SPECint‍ —‌ utvecklats för att försöka mäta den verkliga effektiva prestandan i vanliga applikationer.

Bearbetningsprestanda hos datorer ökas genom att använda flerkärniga processorer , vilket i huvudsak är att koppla in två eller flera individuella processorer (kallade kärnor i denna mening) till en integrerad krets. Helst skulle en dubbelkärnig processor vara nästan dubbelt så kraftfull som en enkelkärnig processor. I praktiken är prestandavinsten mycket mindre, bara cirka 50 %, på grund av ofullkomliga mjukvarualgoritmer och implementering. Att öka antalet kärnor i en processor (dvs. dual-core, quad-core, etc.) ökar arbetsbelastningen som kan hanteras. Detta innebär att processorn nu kan hantera många asynkrona händelser, avbrott etc. som kan ta hårt på CPU:n när den är överbelastad. Dessa kärnor kan ses som olika golv i en bearbetningsanläggning, där varje våning hanterar olika uppgifter. Ibland kommer dessa kärnor att hantera samma uppgifter som kärnor intill dem om en enda kärna inte räcker för att hantera informationen.

På grund av specifika kapaciteter hos moderna CPU: er, såsom simultan multithreading och uncore , som involverar delning av faktiska CPU-resurser samtidigt som man strävar efter ökat utnyttjande, blev övervakning av prestandanivåer och hårdvaruanvändning gradvis en mer komplex uppgift. Som ett svar implementerar vissa CPU:er ytterligare hårdvarulogik som övervakar den faktiska användningen av olika delar av en CPU och tillhandahåller olika räknare som är tillgängliga för programvara; ett exempel är Intels Performance Counter Monitor- teknik.

Se även

Anteckningar

Referenser

externa länkar