Central processing unit (Svenska)
Blockdiagram för en grundläggande uniprocessor-CPU-dator. Svarta linjer indikerar dataflöde, medan röda linjer indikerar kontrollflöde; pilar anger flödesriktningar.
Hardwired till en CPU”s kretsar är en uppsättning grundläggande operationer som den kan utföra, kallas en instruktionsuppsättning. Sådana operationer kan exempelvis innebära att man lägger till eller subtraherar två tal, jämför två tal eller hoppar till en annan del av ett program., Varje grundläggande operation representeras av en viss kombination av bitar, känd som maskinspråket opcode; medan du utför instruktioner i ett maskinspråksprogram bestämmer CPU vilken operation som ska utföras genom att” avkoda ” opcode. En komplett maskinspråksinstruktion består av en opkod och i många fall ytterligare bitar som anger argument för operationen (till exempel de siffror som ska summeras vid en tilläggsoperation). Att gå upp i komplexitetsskalan är ett maskinspråksprogram en samling maskinspråksinstruktioner som CPU utför.,
den faktiska matematiska operationen för varje instruktion utförs av en kombinationslogikkrets inom CPU-processorn som kallas aritmetisk logikenhet eller ALU. I allmänhet utför 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 till minnet., Förutom instruktionerna för heltal matematik och logik operationer, finns olika andra maskininstruktioner, såsom de för att ladda data från minnet och lagra den tillbaka, förgreningsoperationer, och matematiska operationer på flyttal som utförs av CPU”s flyttal enhet (FPU).
Control unitEdit
styrenheten (CU) är en komponent i processorn som styr processorns funktion., Den berättar datorns minne, aritmetiska och logiska enhet och ingångs-och utmatningsenheter hur man svarar på de instruktioner som har skickats till processorn.
det styr driften av de andra enheterna genom att tillhandahålla timing och styrsignaler. De flesta datorresurser hanteras av CU. Det styr flödet av data mellan CPU och andra enheter. John von Neumann inkluderade styrenheten som en del av von Neumann-arkitekturen., I moderna datordesigner är styrenheten vanligtvis en intern del av CPU: n med sin övergripande roll och funktion oförändrad sedan introduktionen.
aritmetisk logik unitEdit
symbolisk representation av en ALU och dess In-och utsignaler
den aritmetiska logikenheten (ALU) är en digital krets i processorn som utför heltal aritmetiska och bitvis logiska operationer., Ingångarna till ALUMINIUMENHETEN är de dataord som ska användas på (kallade operander), statusinformation från tidigare operationer och en kod från styrenheten som anger vilken åtgärd som ska utföras. Beroende på instruktionen som utförs kan operanderna komma från interna CPU-register eller Externt minne, eller de kan vara konstanter som genereras av ALU själv.
När alla insignaler har avgjort och förökat sig genom ALU-kretsarna visas resultatet av den utförda operationen vid ALU-utgångarna., 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 som är reserverat för detta ändamål.
address generation unitEdit
Address generation unit (AGU), ibland även kallad address computation unit (ACU), är en exekveringsenhet inuti CPU som beräknar adresser som används av CPU för att komma åt huvudminnet., Genom att ha adressberäkningar som hanteras av separata kretsar som fungerar parallellt med resten av CPU, kan antalet CPU-cykler som krävs för att utföra olika maskininstruktioner minskas, vilket ger prestandaförbättringar.
När processorer utför olika operationer måste de beräkna minnesadresser som krävs för att hämta data från minnet.till exempel måste matriselementens in-memory-positioner beräknas innan processorn kan hämta data från faktiska minnesplatser., Dessa address-generation beräkningar involverar olika heltal aritmetiska operationer, såsom addition, subtraktion, modulo operationer, eller bit Skift. Ofta innebär beräkning av en minnesadress mer än en generell maskininstruktion, som inte nödvändigtvis avkodar och utför snabbt. Genom att införliva en AGU i en CPU-design, Tillsammans med att införa specialiserade instruktioner som använder AGU, kan olika adressgenerationsberäkningar avlastas från resten av CPU: n och kan ofta utföras snabbt i en enda CPU-cykel.,
funktionerna i en AGU beror på en viss CPU och dess arkitektur. Således implementerar vissa AGUs och exponerar fler adressberäkningsoperationer, medan vissa också innehåller mer avancerade specialiserade instruktioner som kan fungera på flera operander åt gången. Dessutom innehåller vissa CPU-arkitekturer flera AGUs så att mer än en adressberäkningsoperation kan utföras samtidigt, vilket ger ytterligare prestandaförbättringar genom att utnyttja den avancerade CPU-designens superscalar-karaktär., Till exempel innehåller Intel Flera AGUs i sin Sandy Bridge och Haswell microarchitectures, vilket ökar bandbredden för CPU-minne delsystemet genom att tillåta flera minnesanvisningar som ska utföras parallellt.
Memory management unit (MMU)Edit
de flesta avancerade mikroprocessorer (i stationära, bärbara datorer, serverdatorer) har en minneshanteringsenhet som översätter logiska adresser till fysiska RAM-adresser, vilket ger minnesskydd och personsökningsförmåga, som är användbara för virtuellt minne., Enklare processorer, särskilt mikrokontroller, brukar inte inkludera en MMU.
CacheEdit
en CPU-cache är en maskinvarucache som används av den centrala bearbetningsenheten (CPU) på en dator 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 cachar, inklusive instruktion och data cachar, där datacachen vanligtvis organiseras som en hierarki av fler cachenivåer (L1, L2, L3, L4, etc.,).
alla moderna (snabba) processorer (med få specialiserade undantag) har flera nivåer av CPU cachar. De första processorer som använde en cache hade bara en nivå av cache; till skillnad från senare nivå 1 cachar, var det inte delas upp i L1D (för data) och L1I (för instruktioner). Nästan alla nuvarande processorer med cachar har en delad L1 cache. De har också L2 cachar och, för större processorer, L3 cachar samt. L2-cachen delas vanligtvis inte och fungerar som ett gemensamt förråd för den redan delade L1-cachen. Varje kärna av en multi-core processor har en dedikerad L2-cache och delas vanligtvis inte mellan kärnorna., L3-cacheminnet och cacherna på högre nivå delas mellan kärnorna och delas inte. En L4 cache är för närvarande ovanligt, och är i allmänhet på dynamic random-access memory (DRAM), snarare än på statisk random-access memory (SRAM), på en separat munstycke eller chip. Det var också fallet historiskt med L1, medan större marker har tillåtit integration av det och i allmänhet alla cachenivåer, med möjligt undantag för den sista nivån. Varje extra nivå av cache tenderar att vara större och optimeras på olika sätt.,
andra typer av cachar finns (som inte räknas mot ”cachestorleken” för de viktigaste cacherna som nämns ovan), till exempel translation lookaside buffer (TLB) som ingår i minneshanteringsenheten (MMU) som de flesta processorer har.
cachar är i allmänhet dimensionerade i befogenheter av två: 4, 8, 16 etc. KiB eller MiB (för större icke-L1) storlekar, även om IBM z13 har en 96 Kb L1 instruction cache.
Klockrateedit
de flesta processorer är synkrona kretsar, vilket innebär att de använder en klocksignal för att anpassa sin sekventiella verksamhet., Klocksignalen produceras av en extern oscillatorkrets som genererar ett konsekvent antal pulser varje sekund i form av en periodisk kvadratisk våg. Klockfrekvensen bestämmer den hastighet med vilken en CPU utför instruktioner och följaktligen desto snabbare klockan desto fler instruktioner kommer CPU att utföra varje sekund.
för att säkerställa att CPU: n fungerar korrekt är klockperioden längre än den maximala tid som behövs för att alla signaler ska spridas (flytta) genom CPU: n., Vid inställning av 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 att förenkla CPU betydligt, både ur ett designperspektiv och ett komponenträkning perspektiv. Det bär emellertid också nackdelen att hela CPU: n måste vänta på sina långsammaste element, även om vissa delar av det är mycket snabbare. Denna begränsning har i stor utsträckning kompenserats av olika metoder för att öka CPU-parallellismen (se nedan).,
men arkitektoniska förbättringar ensam löser inte alla nackdelar med globalt synkrona processorer. Till exempel är en klocksignal föremål för förseningar av någon annan elektrisk signal. Högre klockfrekvens i alltmer komplexa processorer gör det svårare att hålla klocksignalen i fas (synkroniserad) i hela enheten. Detta har lett till att många moderna processorer kräver att flera identiska klocksignaler ska tillhandahållas för att undvika att fördröja en enda signal tillräckligt signifikant för att orsaka att CPU: n fungerar fel., En annan stor fråga, som klockfrekvenser ökar dramatiskt, är den mängd värme som försvinner av CPU. Den ständigt föränderliga klockan orsakar många komponenter att byta oavsett om de används vid den tiden. I allmänhet använder en komponent som byter mer energi än ett element i statiskt tillstånd. Därför, när klockhastigheten ökar, så gör energiförbrukningen, vilket gör att CPU: n kräver mer värmeavledning i form av CPU-kyllösningar.,
en metod för att hantera växlingen 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 genomföra och ser därför inte gemensam användning utanför mycket lågeffektdesigner. En anmärkningsvärd ny CPU-design som använder omfattande klockgata är IBM PowerPC-baserade Xenon som används i Xbox 360; på så sätt reduceras strömkraven för Xbox 360 kraftigt., En annan metod för att ta itu med några av problemen med en global klocksignal är borttagandet av klocksignalen helt och hållet. Medan du tar bort den globala klocksignalen gör designprocessen betydligt mer komplex på många sätt, bär asynkrona (eller klockfria) mönster markerade fördelar i strömförbrukning och värmeavledning i jämförelse med liknande synkrona mönster. Medan något ovanligt har hela asynkrona processorer byggts utan att använda en global klocksignal. Två anmärkningsvärda exempel på detta är ARM-kompatibla amuletten och MIPS R3000-kompatibla MiniMIPS.,
i stället för att helt ta bort klocksignalen tillåter vissa CPU-mönster vissa delar av enheten att vara asynkrona, till exempel att använda asynkrona ALUs i samband med superscalar pipelining för att uppnå några aritmetiska prestandavinster. Även om det inte är helt klart om helt asynkrona mönster kan utföra 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, kombinerat med deras utmärkta strömförbrukning och värmeavledningsegenskaper, gör dem mycket lämpliga för inbyggda datorer.
spänningsregulator moduleEdit
många moderna processorer har en die-integrerad effekthanteringsmodul som reglerar on-demand spänningsförsörjning till CPU-kretsen så att den kan hålla balans mellan prestanda och strömförbrukning.
heltal rangeEdit
varje CPU representerar numeriska värden på ett visst sätt., Till exempel, några tidiga digitala datorer representerade siffror som bekant decimal (bas 10) siffror systemvärden, och andra har använt mer ovanliga representationer såsom ternära (bas tre). Nästan alla moderna processorer representerar siffror i binär form, där varje siffra representeras av någon tvåvärderad fysisk kvantitet, såsom en ”hög” eller ”låg” spänning.
ett sex bitars ord som innehåller binärkodad representation av decimalvärde 40. De flesta moderna processorer använder ordstorlekar som är en kraft på två, till exempel 8, 16, 32 eller 64 bitar.,
relaterad till numerisk representation är storleken och precisionen av heltal som en CPU kan representera. I fallet med en binär CPU mäts detta med antalet bitar (signifikanta siffror i ett binärt kodat heltal) som CPU kan bearbeta i en operation, som vanligtvis kallas ordstorlek, bitbredd, databanans bredd, heltalsprecision eller heltalstorlek. En CPU ” s heltal storlek bestämmer intervallet heltal värden det kan direkt fungera på., Till exempel kan en 8-bitars CPU direkt manipulera heltal som representeras av åtta bitar, som har ett intervall på 256 (28) diskreta heltalvärden.
Heltalsintervall kan också påverka antalet minnesplatser som CPU kan adressera direkt (en adress är ett heltal som representerar en specifik minnesplats). Till exempel, om en binär CPU använder 32 bitar för att representera en minnesadress kan den direkt adressera 232 minnesplatser. För att kringgå denna begränsning och av olika andra skäl använder vissa processorer mekanismer (till exempel bankväxling) som gör det möjligt att ta itu med ytterligare minne.,
processorer med större ordstorlekar kräver mer kretsar och följaktligen är fysiskt större, kostar mer och förbrukar mer kraft (och därför generera mer värme). Som ett resultat, mindre 4-eller 8-bitars mikrokontroller används ofta i moderna tillämpningar även om processorer med mycket större ordstorlekar (såsom 16, 32, 64, även 128-bitars) finns 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 add krävde fyra cykler, en för varje 8 bitar av operanderna, och även om Motorola 68000-serien instruktionsuppsättningen 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 add 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 instruktionssatser olika bitbredder för heltal och flyttal, vilket gör att processorer implementerar den instruktionssatsen för att ha olika bitbredder för olika delar av enheten. Till exempel var IBM System / 360 instruktionsuppsättningen främst 32 bit, men stödde 64-bitars flyttalvärden för att underlätta större noggrannhet och intervall i flyttal., Systemet / 360 Modell 65 hade en 8-bitars adder för decimal och fast punkt binär aritmetik och en 60-bitars adder för flyttal aritmetik. Många senare CPU-mönster använder liknande blandad bitbredd, speciellt när processorn är avsedd för allmän användning där en rimlig balans mellan heltal och flyttalskapacitet krävs.,
Parallellismedit
modell av en subscalar CPU, där det tar femton klockcykler för 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 subscalar, fungerar på och utför en instruktion på en eller två bitar av data åt gången, det är mindre än en instruktion per klockcykel (IPC < 1).,
denna process ger upphov till en inneboende ineffektivitet i Subscalar processorer. Eftersom endast en instruktion exekveras åt gången måste hela processorn vänta på att instruktionen ska slutföras innan nästa instruktion fortsätter. Som ett resultat blir subscalar CPU ”hängde upp” på instruktioner som tar mer än en klockcykel för att slutföra utförandet. Till och med att lägga till en andra exekveringsenhet (se nedan) förbättrar inte prestanda mycket; snarare än att en väg hängs upp, nu hänger två vägar upp och antalet oanvända transistorer ökar., Denna design, där processorns exekveringsresurser kan fungera på endast en instruktion i taget, kan endast eventuellt nå skalär prestanda (en instruktion per klockcykel, IPC = 1). Men resultatet är nästan alltid subscalar (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 parallellitet i processorer används vanligtvis två termer för att klassificera dessa designtekniker:
- instruktionsnivåparallelism (ILP), som syftar till att öka hastigheten vid vilken instruktioner exekveras inom en CPU (det vill säga att öka användningen av on-die-exekveringsresurser);
- aktivitetsnivåparallelism (TLP), vilket syftar till att öka antalet trådar eller processer som en CPU kan utföra samtidigt.,
varje metod skiljer sig både på de sätt som de implementeras, liksom den relativa effektiviteten som de har råd med för att öka CPU: s prestanda för en applikation.
instruktion-nivå parallellismedit
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 som används för att uppnå ökad parallellitet är att börja de första stegen i instruktionen hämta och avkoda innan den tidigare instruktionen slutar exekvera. Detta är den enklaste formen av en teknik som kallas instruktion pipelining, och används i nästan alla moderna allmänt ändamål processorer. Pipelining gör att mer än en instruktion kan utföras vid varje given tidpunkt genom att bryta ner exekveringsvägen i diskreta steg., Denna separation kan jämföras med en monteringslinje, där en instruktion görs mer komplett i varje steg tills den lämnar exekveringsledningen och går i pension.
Pipelining ger dock möjlighet till en situation där resultatet av den tidigare operationen behövs för att slutföra nästa operation; ett villkor som ofta kallas databeroende konflikt. För att klara detta måste ytterligare försiktighet vidtas för att kontrollera dessa typer av förhållanden och fördröja en del av instruktionsledningen om detta inträffar., Naturligtvis kräver detta ytterligare kretsar, så pipelinerade processorer är mer komplexa än subscalar sådana (men inte särskilt signifikant så). En pipelined processor kan bli mycket nästan skalär, hämmas endast av pipeline bås (en instruktion spendera mer än en klockcykel i ett skede).
en enkel superscalar-rörledning. Genom att hämta och skicka två instruktioner åt gången kan högst två instruktioner per klockcykel slutföras.,
ytterligare förbättringar av tanken på instruktionsrörledning ledde till utvecklingen av en metod som minskar tomgångstiden för CPU-komponenter ännu längre. Mönster som sägs vara superscalar inkluderar en lång instruktionsledning och flera identiska exekveringsenheter, såsom lastlagringsenheter, aritmetiska logiska enheter, flyttalsenheter och adressgenerationsenheter. I en superscalar-rörledning läses flera instruktioner och skickas till en avsändare, som bestämmer huruvida instruktionerna kan utföras parallellt (samtidigt)., I så fall skickas de till tillgängliga exekveringsenheter, vilket resulterar i att flera instruktioner kan utföras samtidigt. I allmänhet, desto fler instruktioner en superscalar CPU kan sända samtidigt till väntar utförande enheter, desto fler instruktioner kommer att slutföras i en given cykel.
de flesta svårigheterna i utformningen av en superscalar CPU-arkitektur ligger i att skapa en effektiv avsändare., Avsändaren måste snabbt och korrekt kunna avgöra om instruktioner kan utföras parallellt, samt skicka dem på ett sådant sätt att så många exekveringsenheter är upptagna som möjligt. Detta kräver att instruktionsledningen fylls så ofta som möjligt och ger upphov till behovet i superscalar-arkitekturer för betydande mängder CPU-cache. Det gör också risk-undvika tekniker som gren förutsägelse, spekulativ utförande, registrera döpa, Out-of-order utförande 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 minimera antalet gånger som hela rörledningen måste vänta tills en villkorlig instruktion är klar. Spekulativt utförande ger ofta blygsamma prestandaökningar genom att utföra delar av kod som kanske inte behövs efter att en villkorlig operation är klar. Körning utanför ordningen omarrangerar något ordningen i vilken instruktioner exekveras för att minska förseningar på grund av databeroende., Även i fallet med en enda instruktion ström, flera dataström— ett fall när en hel del data från samma typ måste behandlas -, moderna processorer kan inaktivera delar av rörledningen så att när en enda instruktion utförs många gånger, CPU hoppar hämta och avkoda faser och därmed kraftigt ökar prestanda vid vissa tillfällen, särskilt i mycket monotona program motorer som video skapande programvara och fotobehandling.,
om en del av CPU: n är superscalar och en del inte är den del som inte lider av ett prestationsstraff på grund av schemaläggningsstall. Intel P5 Pentium hade två superscalar ALUs som kunde acceptera en instruktion per klockcykel vardera, men dess FPU kunde inte acceptera en instruktion per klockcykel. Således var P5 heltal superscalar men inte flyttal superscalar. Intels efterträdare till P5-arkitekturen, P6, lade till superscalar-förmågor till sina flyttalsfunktioner och gav därmed en signifikant ökning av flyttalsinstruktionsprestanda.,
både enkel pipelining och superscalar design ökar en CPU”s ILP genom att tillåta en enda processor för att slutföra utförandet av instruktioner vid hastigheter som överträffar en instruktion per klockcykel. De flesta moderna CPU-mönster är åtminstone något superscalar, och nästan alla generella processorer utformade under det senaste decenniet är superscalar. Under senare år har en del av tyngdpunkten i utformningen av hög ILP-datorer flyttats ut ur CPU: ns hårdvara och in i dess programvarugränssnitt, eller instruktionsuppsättning arkitektur (Isa)., Strategin för det mycket långa instruktionsordet (VLIW) gör att vissa ILP blir underförstådda direkt av programvaran, vilket minskar mängden arbete CPU måste utföra för att öka ILP och därigenom minska designens komplexitet.
Task-level parallellismedit
en annan strategi för att uppnå prestanda är att utföra flera trådar eller processer parallellt. Detta forskningsområde är känt som parallel computing. I Flynns”s taxonomi, denna strategi är känd som flera instruktion ström, flera dataström (MIMD).,
en teknik som används 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 system 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 minne, processorer kan samarbeta på samma program och program kan migrera från en CPU till en annan., För att öka antalet samarbetsvilliga processorer utöver en handfull infördes system som non-uniform memory access (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 multibearbetning med flera diskreta processorer och brädor för att implementera sammankopplingen mellan processorerna., När processorer och deras sammankoppling är alla implementerade på ett enda chip, är tekniken känd som chip-level multiprocessing (CMP) och single chip som en multi-core processor.
det blev senare erkänt att finare kornparallelism existerade med ett enda program. Ett enda program kan ha flera trådar (eller funktioner) som kan utföras separat eller parallellt. Några av de tidigaste exemplen på denna teknik genomfört input / output bearbetning såsom direkt minnesåtkomst som en separat tråd från beräkningstråden., En mer allmän inställning till denna teknik introducerades på 1970-talet när system utformades 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 i en CPU replikeras för att stödja MT i motsats till hela CPU i fallet med MP. I MT delas exekveringsenheterna och minnessystemet inklusive cacharna mellan flera trådar., Nackdelen med MT är att hårdvarustödet för multitrådning är mer synligt för programvara än för MP och därmed handledare programvara som operativsystem måste 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 är avstannad och väntar på att data ska återvända från externt minne. I detta system skulle CPU då snabbt kontextväxla till en annan tråd som är redo att köra, omkopplaren görs ofta i en CPU-klockcykel, såsom UltraSPARC T1., En annan typ av MT är samtidig 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 var fokus på att utforma högpresterande processorer för allmänna ändamål till stor del på att uppnå hög ILP genom tekniker som pipelining, cachar, superscalar exekvering, Out-of-order exekvering etc. Denna trend kulminerade i stora, makthungriga processorer som Intel Pentium 4., I början av 2000-talet mottogs CPU-designers från att uppnå högre prestanda från ILP-tekniker på grund av den växande skillnaden mellan CPU-driftsfrekvenser och huvudminnesoperativfrekvenser samt eskalerande CPU-effektavledning på grund av mer esoteriska ILP-tekniker.
CPU-designers lånade sedan idéer från kommersiella datormarknader som transaktionsbehandling, där den sammanlagda prestandan hos flera program, även känd som genomströmning, var viktigare än utförandet av en enda tråd eller process.,
denna omkastning av tonvikten framgår av spridningen av dubbla och fler kärnprocessordesigner och i synnerhet Intels nyare mönster som liknar sin mindre superscalar P6-arkitektur. Sent mönster i flera olika processorfamiljer uppvisar CMP, inklusive x86-64 Opteron och Athlon 64 X2, SPARC UltraSPARC T1, IBM POWER4-och POWER5, liksom flera spelkonsol Processorer som Xbox 360″s triple-core PowerPC design, och PlayStation 3″s 7-grundläggande Cell-processorn.,
data parallellismedit
ett mindre vanligt men allt viktigare paradigm av processorer (och faktiskt datoranvändning i allmänhet) behandlar data parallellitet. De processorer som diskuterats tidigare kallas alla som någon typ av skalär enhet. Som namnet antyder hanterar vektorprocessorer flera datastycken i samband med en instruktion. Detta kontrasterar med scalar-processorer, som hanterar en bit data för varje instruktion., Med hjälp av Flynns taxonomi kallas dessa två system för att hantera data i allmänhet en enda instruktionsström, flera dataströmmar (SIMD) respektive en enda instruktionsström, en enda dataström (SISD). Det stora verktyget för att skapa processorer som hanterar vektorer av data 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), liksom många typer av vetenskapliga och tekniska uppgifter., Medan en skalärprocessor måste slutföra hela processen att hämta, avkoda och utföra 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 programmet 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, var nästan uteslutande associerade med vetenskaplig forskning och kryptografi., Men eftersom multimedia i stor utsträckning har skiftat till digitala medier har behovet av någon form av SIMD i generella processorer blivit betydande. Strax efter 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 generella processorer. Några av dessa tidiga SIMD-specifikationer – som HP”s Multimedia Acceleration eXtensions (MAX) och Intel”s MMX – var integer-bara., Detta visade sig vara ett betydande hinder för vissa mjukvaruutvecklare, eftersom många av de program som gynnas av SIMD främst handlar om flyttal. Progressivt, Utvecklare raffinerade och omarbetade dessa tidiga mönster i några av de gemensamma moderna SIMD specifikationer, som vanligtvis förknippas med en instruktion set arkitektur (ISA). Några anmärkningsvärda moderna exempel Intel”s Streaming SIMD Extensions (SSE) och PowerPC-relaterade AltiVec (även känd som VMX).