Sentralenhet - Central processing unit

En Intel 80486DX2 CPU, sett ovenfra
Undersiden av en Intel 80486DX2 , som viser pinnene

En sentral prosessorenhet ( CPU ), også kalt en sentral prosessor , hovedprosessor eller bare prosessor , er den elektroniske kretsen som utfører instruksjoner som består av et dataprogram . CPU-en utfører grunnleggende aritmetikk , logikk, kontroll og input/output (I/O) operasjoner spesifisert av instruksjonene i programmet. Dette står i kontrast til eksterne komponenter som hovedminne og I/O-kretser, og spesialiserte prosessorer som grafikkbehandlingsenheter (GPUer).

Form, design og implementering av CPUer har endret seg over tid, men deres grunnleggende drift forblir nesten uendret. Hovedkomponentene til en CPU inkluderer den aritmetiske-logiske enheten (ALU) som utfører aritmetiske og logiske operasjoner , prosessorregistre som leverer operander til ALU og lagrer resultatene av ALU-operasjoner, og en kontrollenhet som orkestrerer hentingen (fra minnet), dekoding og utførelse av instruksjoner ved å styre de koordinerte operasjonene til ALU, registre og andre komponenter.

De fleste moderne CPUer er implementert på integrerte kretser (IC) mikroprosessorer , med en eller flere CPUer på en enkelt metall-oksid-halvleder (MOS) IC-brikke. Mikroprosessorbrikker med flere CPUer er flerkjerneprosessorer . De individuelle fysiske prosessorene, prosessorkjernene , kan også være flertrådede for å lage ekstra virtuelle eller logiske prosessorer.

En IC som inneholder en CPU kan også inneholde minne , perifere grensesnitt og andre komponenter i en datamaskin; slike integrerte enheter kalles på forskjellige måter mikrokontrollere eller systemer på en brikke (SoC).

Array-prosessorer eller vektorprosessorer har flere prosessorer som opererer parallelt, uten at noen enhet anses som sentral. Virtuelle CPUer er en abstraksjon av dynamiske aggregerte beregningsressurser.

Historie

EDVAC , en av de første datamaskinene med lagret program

Tidlige datamaskiner som ENIAC måtte kobles om fysisk for å utføre forskjellige oppgaver, noe som førte til at disse maskinene ble kalt "datamaskiner med fast program". Begrepet "sentral prosesseringsenhet" har vært i bruk siden så tidlig som i 1955. Siden begrepet "CPU" generelt er definert som en enhet for kjøring av programvare (dataprogram), kom de tidligste enhetene som med rette kunne kalles CPUer med adventen på datamaskinen med lagret program .

Ideen om et lagret program, datamaskin hadde vært allerede til stede i utformingen av J. Presper Eckert og John William Mauchly 's ENIAC , men ble opprinnelig utelatt slik at det kunne bli ferdig raskere. Den 30. juni 1945, før ENIAC ble laget, distribuerte matematiker John von Neumann papiret med tittelen First Draft of a Report on the EDVAC . Det var omrisset av en datamaskin med lagret program som til slutt skulle bli ferdigstilt i august 1949. EDVAC ble designet for å utføre et visst antall instruksjoner (eller operasjoner) av forskjellige typer. Signifikant nok skulle programmene skrevet for EDVAC lagres i høyhastighets datamaskinminne i stedet for spesifisert av den fysiske ledningen til datamaskinen. Dette overvant en alvorlig begrensning av ENIAC, som var den betydelige tiden og innsatsen som kreves for å rekonfigurere datamaskinen til å utføre en ny oppgave. Med von Neumanns design kunne programmet som EDVAC kjørte endres ganske enkelt ved å endre innholdet i minnet. EDVAC var imidlertid ikke den første datamaskinen med lagret program; det Manchester baby , en liten skala eksperimentelle lagret program, datamaskin, løp sitt første program 21. juni 1948 og det Manchester Mark 1 kjørte sitt første program i løpet av natten fra 16 til 17 juni 1949.

Tidlige CPU-er var tilpassede design som ble brukt som en del av en større og noen ganger særegen datamaskin. Imidlertid har denne metoden for å designe tilpassede CPUer for en bestemt applikasjon i stor grad gitt plass til utviklingen av flerbruksprosessorer produsert i store mengder. Denne standardiseringen begynte i epoken med diskrete transistor stormaskiner og minidatamaskiner og har raskt akselerert med populariseringen av den integrerte kretsen  (IC). IC har gjort det mulig å designe og produsere stadig mer komplekse CPUer til toleranser i størrelsesorden nanometer . Både miniatyrisering og standardisering av CPUer har økt tilstedeværelsen av digitale enheter i moderne liv langt utover den begrensede bruken av dedikerte datamaskiner. Moderne mikroprosessorer vises i elektroniske enheter som spenner fra biler til mobiltelefoner, og noen ganger til og med i leker.

Mens von Neumann oftest blir kreditert med utformingen av datamaskinen med lagret program på grunn av hans design av EDVAC, og designet ble kjent som von Neumann-arkitekturen , hadde andre før ham, som Konrad Zuse , foreslått og implementert lignende ideer. Den såkalte Harvard-arkitekturen til Harvard Mark I , som ble fullført før EDVAC, brukte også et lagret programdesign ved å bruke stanset papirtape i stedet for elektronisk minne. Den viktigste forskjellen mellom von Neumann- og Harvard-arkitekturen er at sistnevnte skiller lagring og behandling av CPU-instruksjoner og data, mens førstnevnte bruker samme minneplass for begge. De fleste moderne CPUer er først og fremst von Neumann i design, men CPUer med Harvard-arkitekturen sees også, spesielt i innebygde applikasjoner; for eksempel er Atmel AVR- mikrokontrollerne Harvard-arkitekturprosessorer.

Reléer og vakuumrør (termioniske rør) ble ofte brukt som koblingselementer; en nyttig datamaskin krever tusenvis eller titusenvis av bytteenheter. Den totale hastigheten til et system er avhengig av hastigheten til bryterne. Vakuumrørdatamaskiner som EDVAC hadde en tendens til å gå i gjennomsnitt åtte timer mellom feil, mens relédatamaskiner som (tregere, men tidligere) Harvard Mark I feilet svært sjelden. Til slutt ble rørbaserte CPUer dominerende fordi de betydelige hastighetsfordelene som ble gitt generelt veide opp for pålitelighetsproblemene. De fleste av disse tidlige synkrone CPU-ene kjørte med lave klokkehastigheter sammenlignet med moderne mikroelektroniske design. Klokkesignalfrekvenser fra 100 kHz til 4 MHz var veldig vanlige på dette tidspunktet, hovedsakelig begrenset av hastigheten til bytteenhetene de ble bygget med.

Transistor CPUer

IBM PowerPC 604e prosessor

Designkompleksiteten til CPUer økte ettersom ulike teknologier gjorde det lettere å bygge mindre og mer pålitelige elektroniske enheter. Den første slike forbedringen kom med fremkomsten av transistoren . Transistoriserte prosessorer på 1950- og 1960-tallet måtte ikke lenger bygges av store, upålitelige og skjøre koblingselementer som vakuumrør og releer . Med denne forbedringen ble mer komplekse og pålitelige CPUer bygget på ett eller flere trykte kretskort som inneholder diskrete (individuelle) komponenter.

I 1964 introduserte IBM sin IBM System/360 datamaskinarkitektur som ble brukt i en serie datamaskiner som var i stand til å kjøre de samme programmene med forskjellig hastighet og ytelse. Dette var betydelig i en tid da de fleste elektroniske datamaskiner var inkompatible med hverandre, selv de laget av samme produsent. For å lette denne forbedringen brukte IBM konseptet med et mikroprogram (ofte kalt "mikrokode"), som fortsatt ser utbredt bruk i moderne CPUer. System/360-arkitekturen var så populær at den dominerte stormaskinmarkedet i flere tiår og etterlot seg en arv som fortsatt er videreført av lignende moderne datamaskiner som IBM zSeries . I 1965 introduserte Digital Equipment Corporation (DEC) en annen innflytelsesrik datamaskin rettet mot vitenskapelige og forskningsmarkeder, PDP-8 .

Fujitsu-kort med SPARC64 VIIIfx-prosessorer

Transistorbaserte datamaskiner hadde flere distinkte fordeler i forhold til forgjengerne. Bortsett fra å legge til rette for økt pålitelighet og lavere strømforbruk, tillot transistorer også CPUer å operere med mye høyere hastigheter på grunn av den korte koblingstiden til en transistor sammenlignet med et rør eller et relé. Den økte påliteligheten og den dramatisk økte hastigheten til svitsjeelementene (som nesten utelukkende var transistorer på dette tidspunktet); CPU-klokkehastigheter i titalls megahertz ble lett oppnådd i løpet av denne perioden. I tillegg, mens diskrete transistor- og IC-prosessorer var i mye bruk, begynte nye høyytelsesdesigner som SIMD (Single Instruction Multiple Data) vektorprosessorer å dukke opp. Disse tidlige eksperimentelle design senere ga opphav til epoken av spesialiserte superdatamaskiner som de laget av Cray Inc og Fujitsu Ltd .

Småskala integrasjons-CPUer

CPU, kjerneminne og eksternt bussgrensesnitt til en DEC PDP-8 /I, laget av integrerte kretser i middels skala

I løpet av denne perioden ble det utviklet en metode for å produsere mange sammenkoblede transistorer i et kompakt rom. Den integrerte kretsen (IC) tillates et stort antall transistorer som skal fremstilles på en enkelt halvleder -basert , eller "brikke". Til å begynne med ble bare veldig grunnleggende ikke-spesialiserte digitale kretser som NOR-porter miniatyrisert til IC-er. CPU-er basert på disse "byggekloss"-IC-ene blir generelt referert til som "småskala-integrasjon" (SSI)-enheter. SSI IC-er, slik som de som ble brukt i Apollo Guidance Computer , inneholdt vanligvis opptil noen få dusin transistorer. Å bygge en hel CPU av SSI IC-er krevde tusenvis av individuelle brikker, men forbrukte fortsatt mye mindre plass og strøm enn tidligere diskrete transistordesigner.

IBMs System/370 , oppfølger til System/360, brukte SSI IC-er i stedet for Solid Logic Technology- diskrete transistormoduler. DECs PDP-8 /I og KI10 PDP-10 byttet også fra de individuelle transistorene som ble brukt av PDP-8 og PDP-10 til SSI IC-er, og deres ekstremt populære PDP-11- linje ble opprinnelig bygget med SSI IC-er, men ble til slutt implementert med LSI-komponenter når disse ble praktiske.

Storskala integrasjons-CPUer

Lee Boysel publiserte innflytelsesrike artikler, inkludert et "manifest" fra 1967, som beskrev hvordan man kunne bygge tilsvarende en 32-bits stormaskin fra et relativt lite antall storskala integrasjonskretser (LSI). Den eneste måten å bygge LSI-brikker på, som er brikker med hundre eller flere porter, var å bygge dem ved å bruke en MOS- halvlederproduksjonsprosess (enten PMOS-logikk , NMOS-logikk eller CMOS-logikk ). Noen selskaper fortsatte imidlertid å bygge prosessorer av bipolare transistor-transistor logic (TTL)-brikker fordi bipolare junction-transistorer var raskere enn MOS-brikker frem til 1970-tallet (noen få selskaper som Datapoint fortsatte å bygge prosessorer av TTL-brikker til tidlig 1980-tallet). På 1960-tallet var MOS IC-er tregere og først ansett som nyttige bare i applikasjoner som krevde lav effekt. Etter utviklingen av silisium-gate MOS-teknologi av Federico Faggin ved Fairchild Semiconductor i 1968, erstattet MOS IC-er i stor grad bipolar TTL som standard brikketeknologi på begynnelsen av 1970-tallet.

Etter hvert som den mikroelektroniske teknologien avanserte, ble et økende antall transistorer plassert på IC-er, noe som reduserte antallet individuelle IC-er som trengs for en komplett CPU. MSI- og LSI-IC-er økte transistortellingene til hundrevis, og deretter tusenvis. I 1968 hadde antallet IC-er som kreves for å bygge en komplett CPU blitt redusert til 24 IC-er av åtte forskjellige typer, med hver IC som inneholder omtrent 1000 MOSFET-er. I sterk kontrast til SSI- og MSI-forgjengerne, inneholdt den første LSI-implementeringen av PDP-11 en CPU bestående av kun fire LSI-integrerte kretser.

Mikroprosessorer

Die av en Intel 80486DX2 mikroprosessor (faktisk størrelse: 12 × 6,75 mm) i emballasjen
Intel Core i5 CPU på et Vaio E-serie bærbar hovedkort (til høyre, under varmerøret )
Innsiden av bærbar PC, med CPU fjernet fra kontakten

Fremskritt innen MOS IC-teknologi førte til oppfinnelsen av mikroprosessoren på begynnelsen av 1970-tallet. Siden introduksjonen av den første kommersielt tilgjengelige mikroprosessoren, Intel 4004 i 1971, og den første mye brukte mikroprosessoren, Intel 8080 i 1974, har denne klassen av CPU-er nesten fullstendig forbigått alle andre implementeringsmetoder for sentral prosesseringsenhet. Datidens stormaskin- og minidatamaskinprodusenter lanserte proprietære IC-utviklingsprogrammer for å oppgradere sine eldre datamaskinarkitekturer , og produserte etter hvert instruksjonssett- kompatible mikroprosessorer som var bakoverkompatible med deres eldre maskinvare og programvare. Kombinert med fremkomsten og den eventuelle suksessen til den allestedsnærværende personlige datamaskinen , brukes begrepet CPU nå nesten utelukkende om mikroprosessorer. Flere CPUer (betegnet kjerner ) kan kombineres i en enkelt prosesseringsbrikke.

Tidligere generasjoner av CPUer ble implementert som diskrete komponenter og mange små integrerte kretser (ICer) på ett eller flere kretskort. Mikroprosessorer, på den annen side, er CPUer produsert på et svært lite antall ICer; vanligvis bare én. Den totale mindre CPU-størrelsen, som et resultat av å være implementert på en enkelt dyse, betyr raskere byttetid på grunn av fysiske faktorer som redusert portparasittisk kapasitans . Dette har gjort det mulig for synkrone mikroprosessorer å ha klokkehastigheter fra titalls megahertz til flere gigahertz. I tillegg har evnen til å konstruere svært små transistorer på en IC økt kompleksiteten og antallet transistorer i en enkelt CPU mange ganger. Denne mye observerte trenden er beskrevet av Moores lov , som hadde vist seg å være en ganske nøyaktig prediktor for veksten av CPU (og annen IC) kompleksitet frem til 2016.

Mens kompleksiteten, størrelsen, konstruksjonen og den generelle formen til CPUer har endret seg enormt siden 1950, har den grunnleggende designen og funksjonen ikke endret seg mye i det hele tatt. Nesten alle vanlige CPUer i dag kan meget nøyaktig beskrives som von Neumann lagrede programmaskiner. Ettersom Moores lov ikke lenger gjelder, har det oppstått bekymringer om grensene for integrert kretstransistorteknologi. Ekstrem miniatyrisering av elektroniske porter gjør at effektene av fenomener som elektromigrasjon og underterskellekkasje blir mye mer betydelige. Disse nyere bekymringene er blant de mange faktorene som får forskere til å undersøke nye metoder for databehandling som kvantedatamaskinen , samt utvide bruken av parallellisme og andre metoder som utvider nytten av den klassiske von Neumann-modellen.

Operasjon

Den grunnleggende operasjonen til de fleste CPUer, uavhengig av den fysiske formen de har, er å utføre en sekvens av lagrede instruksjoner som kalles et program. Instruksjonene som skal utføres lagres i en slags datamaskinminne . Nesten alle CPU-er følger hente-, dekode- og utføringstrinnene i operasjonen, som er samlet kjent som instruksjonssyklusen .

Etter utførelse av en instruksjon, gjentas hele prosessen, med den neste instruksjonssyklusen som normalt henter neste-i-sekvens-instruksjonen på grunn av den økte verdien i programtelleren . Hvis en hoppinstruksjon ble utført, vil programtelleren bli modifisert til å inneholde adressen til instruksjonen som ble hoppet til, og programkjøringen fortsetter normalt. I mer komplekse CPUer kan flere instruksjoner hentes, dekodes og utføres samtidig. Denne delen beskriver det som generelt refereres til som den " klassiske RISC-rørledningen ", som er ganske vanlig blant de enkle CPU-ene som brukes i mange elektroniske enheter (ofte kalt mikrokontrollere). Den ignorerer i stor grad den viktige rollen til CPU-cache, og derfor tilgangsstadiet til rørledningen.

Noen instruksjoner manipulerer programtelleren i stedet for å produsere resultatdata direkte; slike instruksjoner kalles vanligvis "hopp" og letter programoppførsel som loops , betinget programkjøring (ved bruk av et betinget hopp) og eksistensen av funksjoner . I noen prosessorer endrer noen andre instruksjoner tilstanden til bitene i et "flagg"-register . Disse flaggene kan brukes til å påvirke hvordan et program oppfører seg, siden de ofte indikerer utfallet av ulike operasjoner. For eksempel, i slike prosessorer evaluerer en "sammenlign"-instruksjon to verdier og setter eller sletter biter i flaggregisteret for å indikere hvilken som er størst eller om de er like; ett av disse flaggene kan deretter brukes av en senere hoppinstruksjon for å bestemme programflyten.

Hent

Det første trinnet, henting, innebærer å hente en instruksjon (som er representert ved et tall eller en tallsekvens) fra programminnet. Instruksjonens plassering (adresse) i programminnet bestemmes av programtelleren (PC; kalt "instruksjonspekeren" i Intel x86 mikroprosessorer ), som lagrer et nummer som identifiserer adressen til neste instruksjon som skal hentes. Etter at en instruksjon er hentet, økes PC-en med lengden på instruksjonen slik at den vil inneholde adressen til neste instruksjon i sekvensen. Ofte må instruksjonen som skal hentes hentes fra relativt tregt minne, noe som får CPU-en til å stoppe mens den venter på at instruksjonen skal returneres. Dette problemet løses i stor grad i moderne prosessorer av cacher og pipeline-arkitekturer (se nedenfor).

Dekode

Instruksjonen som CPU henter fra minnet bestemmer hva CPUen skal gjøre. I dekodetrinnet, utført av binære dekoderkretser kjent som instruksjonsdekoderen , konverteres instruksjonen til signaler som kontrollerer andre deler av CPU.

Måten instruksjonen tolkes på er definert av CPUens instruksjonssettarkitektur (ISA). Ofte indikerer en gruppe biter (det vil si et "felt") i instruksjonen, kalt opcode, hvilken operasjon som skal utføres, mens de resterende feltene vanligvis gir tilleggsinformasjon som kreves for operasjonen, for eksempel operandene. Disse operandene kan spesifiseres som en konstant verdi (kalt en umiddelbar verdi), eller som plasseringen av en verdi som kan være et prosessorregister eller en minneadresse, som bestemt av en eller annen adresseringsmodus .

I noen CPU-design er instruksjonsdekoderen implementert som en fastkoblet, uforanderlig binær dekoderkrets. I andre brukes et mikroprogram til å oversette instruksjoner til sett med CPU-konfigurasjonssignaler som påføres sekvensielt over flere klokkepulser. I noen tilfeller kan minnet som lagrer mikroprogrammet overskrives, noe som gjør det mulig å endre måten CPU dekoder instruksjoner på.

Henrette

Etter hente- og dekodingstrinnene utføres utførelsestrinnet. Avhengig av CPU-arkitekturen kan dette bestå av en enkelt handling eller en sekvens av handlinger. Under hver handling aktiverer eller deaktiverer kontrollsignaler forskjellige deler av CPU-en elektrisk slik at de kan utføre hele eller deler av ønsket operasjon. Handlingen er deretter fullført, typisk som svar på en klokkepuls. Svært ofte blir resultatene skrevet til et internt CPU-register for rask tilgang ved påfølgende instruksjoner. I andre tilfeller kan resultatene skrives til et tregere, men rimeligere hovedminne med høyere kapasitet .

For eksempel, hvis en addisjonsinstruksjon skal utføres, aktiveres registre som inneholder operander (tall som skal summeres), og det samme er delene av den aritmetiske logiske enheten (ALU) som utfører addisjon. Når klokkepulsen oppstår, flyter operandene fra kilderegistrene inn i ALU, og summen vises ved utgangen. På etterfølgende klokkepulser aktiveres (og deaktiveres) andre komponenter for å flytte utgangen (summen av operasjonen) til lagring (f.eks. et register eller minne). Hvis den resulterende summen er for stor (dvs. den er større enn ALUs utdataordstørrelse), vil et aritmetisk overløpsflagg bli satt, som påvirker neste operasjon.

Struktur og gjennomføring

Blokkdiagram av en grunnleggende uniprosessor-CPU-datamaskin. Svarte linjer indikerer dataflyt, mens røde linjer indikerer kontrollflyt; piler indikerer strømningsretninger.

Kablet inn i en CPU-krets er et sett med grunnleggende operasjoner den kan utføre, kalt et instruksjonssett . Slike operasjoner kan for eksempel innebære å legge til eller trekke fra to tall, sammenligne to tall eller hoppe til en annen del av et program. Hver instruksjon er representert av en unik kombinasjon av biter , kjent som maskinspråkets opkode . Mens prosessoren behandler en instruksjon, dekoder CPU'en opkoden (via en binær dekoder ) til kontrollsignaler, som orkestrerer oppførselen til CPU'en. En komplett maskinspråkinstruksjon består av en opkode og, i mange tilfeller, tilleggsbiter som spesifiserer argumenter for operasjonen (for eksempel tallene som skal summeres i tilfelle en addisjonsoperasjon). Når man går oppover kompleksitetsskalaen, er et maskinspråkprogram en samling av maskinspråkinstruksjoner som CPUen utfører.

Den faktiske matematiske operasjonen for hver instruksjon utføres av en kombinasjonslogikkkrets i CPU-ens prosessor kjent som den aritmetiske-logiske enheten eller ALU. Generelt sett utfører en CPU en instruksjon ved å hente den fra minnet, bruke sin ALU for å utføre en operasjon, og deretter lagre resultatet i minnet. Ved siden av instruksjonene for heltallsmatematikk og logiske operasjoner, finnes det forskjellige andre maskininstruksjoner, for eksempel de for å laste data fra minnet og lagre det tilbake, forgreningsoperasjoner og matematiske operasjoner på flyttall utført av CPU-ens flyttallenhet (FPU) ).

Kontrollenhet

Den styreenheten (CU) er en komponent av den CPU som styrer operasjonen av prosessoren. Den forteller datamaskinens minne, aritmetiske og logiske enhet og inngangs- og utdataenheter hvordan de skal svare på instruksjonene som er sendt til prosessoren.

Den styrer driften av de andre enhetene ved å gi timing og kontrollsignaler. De fleste dataressurser administreres av CU. Den styrer dataflyten mellom CPU og de andre enhetene. John von Neumann inkluderte kontrollenheten som en del av von Neumann-arkitekturen . I moderne datamaskindesign er kontrollenheten vanligvis en intern del av CPUen med dens generelle rolle og drift uendret siden introduksjonen.

Aritmetisk logikkenhet

Symbolsk representasjon av en ALU og dens inngangs- og utgangssignaler

Den aritmetiske logiske enheten (ALU) er en digital krets i prosessoren som utfører heltallsaritmetiske og bitvise logiske operasjoner. Inngangene til ALU er dataordene som skal opereres på (kalt operander ), statusinformasjon fra tidligere operasjoner, og en kode fra kontrollenheten som indikerer hvilken operasjon som skal utføres. Avhengig av instruksjonen som utføres, kan operandene komme fra interne CPU-registre eller eksternt minne, eller de kan være konstanter generert av ALU selv.

Når alle inngangssignaler har satt seg og forplantet seg gjennom ALU-kretsen, vises resultatet av den utførte operasjonen på ALU-ens utganger. Resultatet består av både et dataord, som kan være lagret i et register eller minne, og statusinformasjon som typisk er lagret i et spesielt, internt CPU-register reservert for dette formålet.

Adressegenereringsenhet

Adresse generasjon enhet ( AGU ), noen ganger også kalt adresse beregningsenhet ( ACU ), er en utførende enhet inne i CPU som beregner adresser som brukes av CPU å få tilgang til hovedminne . Ved å få adresseberegninger håndtert av separate kretser som opererer parallelt med resten av CPUen, kan antallet CPU-sykluser som kreves for å utføre ulike maskininstruksjoner reduseres, noe som gir ytelsesforbedringer.

Mens de utfører ulike operasjoner, må CPUer beregne minneadresser som kreves for å hente data fra minnet; for eksempel må posisjoner i minnet til array-elementer beregnes før CPU-en kan hente data fra faktiske minneplasseringer. Disse adressegenereringsberegningene involverer forskjellige heltalls aritmetiske operasjoner , for eksempel addisjon, subtraksjon, modulo-operasjoner eller bitskift . Ofte involverer beregning av en minneadresse mer enn én generell maskininstruksjon, som ikke nødvendigvis dekoder og utføres raskt. Ved å inkorporere en AGU i en CPU-design, sammen med å introdusere spesialiserte instruksjoner som bruker AGU, kan ulike adressegenereringsberegninger avlastes fra resten av CPUen, og kan ofte utføres raskt i en enkelt CPU-syklus.

Mulighetene til en AGU avhenger av en bestemt CPU og dens arkitektur . Dermed implementerer og avslører noen AGUer flere adresseberegningsoperasjoner, mens noen også inkluderer mer avanserte spesialiserte instruksjoner som kan operere på flere operander om gangen. Videre inkluderer noen CPU-arkitekturer flere AGU-er, slik at mer enn én adresseberegningsoperasjon kan utføres samtidig, noe som gir ytterligere ytelsesforbedringer ved å utnytte den superskalære naturen til avanserte CPU-design. For eksempel inkorporerer Intel flere AGU-er i sine Sandy Bridge- og Haswell- mikroarkitekturer , som øker båndbredden til CPU-minneundersystemet ved å la flere minnetilgangsinstruksjoner kjøres parallelt.

Minneadministrasjonsenhet (MMU)

Mange mikroprosessorer (i smarttelefoner og stasjonære, bærbare, serverdatamaskiner) har en minneadministrasjonsenhet, som oversetter logiske adresser til fysiske RAM-adresser, gir minnebeskyttelse og personsøkingsevner , nyttig for virtuelt minne . Enklere prosessorer, spesielt mikrokontrollere , inkluderer vanligvis ikke en MMU.

Cache

En CPU-cache er en maskinvare-cache som brukes av den sentrale prosessorenheten (CPU) til en datamaskin for å redusere den gjennomsnittlige kostnaden (tid eller energi) for å få tilgang til data fra hovedminnet . En cache er et mindre, raskere minne, nærmere en prosessorkjerne , som lagrer kopier av dataene fra ofte brukte hovedminneplasseringer . De fleste prosessorer har forskjellige uavhengige cacher, inkludert instruksjons- og datacacher , hvor databufferen vanligvis er organisert som et hierarki av flere cache-nivåer (L1, L2, L3, L4, etc.).

Alle moderne (raske) CPUer (med få spesialiserte unntak) har flere nivåer av CPU-cacher. De første CPU-ene som brukte en hurtigbuffer hadde bare ett nivå med hurtigbuffer; i motsetning til senere nivå 1-cacher, ble den ikke delt inn i L1d (for data) og L1i (for instruksjoner). Nesten alle nåværende CPUer med cacher har en delt L1-cache. De har også L2-cacher og, for større prosessorer, L3-cacher også. L2-cachen er vanligvis ikke delt og fungerer som et felles depot for den allerede delte L1-cachen. Hver kjerne i en flerkjerneprosessor har en dedikert L2-cache og deles vanligvis ikke mellom kjernene. L3-cachen, og cacher på høyere nivå, deles mellom kjernene og deles ikke. En L4-cache er for tiden uvanlig, og er vanligvis på dynamisk tilfeldig tilgangsminne (DRAM), i stedet for på statisk tilfeldig tilgangsminne (SRAM), på en separat die eller brikke. Det var også tilfelle historisk med L1, mens større brikker har tillatt integrasjon av den og generelt alle cache-nivåer, med mulig unntak av det siste nivået. Hvert ekstra nivå med cache har en tendens til å være større og optimaliseres annerledes.

Det finnes andre typer cacher (som ikke regnes med i "cache-størrelsen" til de viktigste cachene nevnt ovenfor), for eksempel oversettelses-lookaside-bufferen (TLB) som er en del av minnestyringsenheten (MMU) som de fleste CPU-er har.

Cacher er vanligvis dimensjonert i to potenser: 2, 8, 16 osv. KiB eller MiB (for større ikke-L1) størrelser, selv om IBM z13 har en 96 KiB L1 instruksjonsbuffer.

Klokkefrekvens

De fleste CPU-er er synkrone kretser , noe som betyr at de bruker et klokkesignal for å fremskynde sekvensielle operasjoner. Klokkesignalet produseres av en ekstern oscillatorkrets som genererer et konsistent antall pulser hvert sekund i form av en periodisk firkantbølge . Frekvensen til klokkepulsene bestemmer hastigheten som en CPU utfører instruksjoner med, og følgelig, jo raskere klokken er, jo flere instruksjoner vil CPU utføre hvert sekund.

For å sikre riktig drift av CPUen, er klokkeperioden lengre enn den maksimale tiden som trengs for alle signaler å forplante seg (bevege seg) gjennom CPUen. Ved å sette klokkeperioden til en verdi godt over den verste utbredelsesforsinkelsen , er det mulig å designe hele CPUen og måten den flytter data rundt "kantene" av det stigende og fallende klokkesignalet. Dette har fordelen av å forenkle CPU betraktelig, både fra et designperspektiv og et komponenttellingsperspektiv. Imidlertid har det også den ulempen at hele CPUen må vente på de tregeste elementene, selv om noen deler av den er mye raskere. Denne begrensningen har i stor grad blitt kompensert for av ulike metoder for å øke CPU-parallellen (se nedenfor).

Arkitektoniske forbedringer alene løser imidlertid ikke alle ulempene med globalt synkrone CPUer. For eksempel er et klokkesignal underlagt forsinkelsene til ethvert annet elektrisk signal. Høyere klokkehastigheter i stadig mer komplekse CPUer gjør det vanskeligere å holde klokkesignalet i fase (synkronisert) gjennom hele enheten. Dette har ført til at mange moderne CPUer krever at flere identiske klokkesignaler leveres for å unngå å forsinke et enkelt signal betydelig nok til å få CPU til å fungere feil. Et annet stort problem, ettersom klokkehastighetene øker dramatisk, er mengden varme som spres av prosessoren . Den stadig skiftende klokken får mange komponenter til å bytte uavhengig av om de brukes på det tidspunktet. Generelt bruker en komponent som skifter mer energi enn et element i statisk tilstand. Derfor, ettersom klokkehastigheten øker, øker også energiforbruket, noe som gjør at CPU-en krever mer varmespredning i form av CPU-kjøleløsninger .

En metode for å håndtere veksling av unødvendige komponenter kalles klokkeporting , som innebærer å slå av klokkesignalet til unødvendige komponenter (effektivt deaktivere dem). Dette blir imidlertid ofte sett på som vanskelig å implementere og ser derfor ikke vanlig bruk utenom design med svært lav effekt. En bemerkelsesverdig nylig CPU-design som bruker omfattende klokkeport er den IBM PowerPC- baserte Xenon som brukes i Xbox 360 ; på den måten reduseres strømkravene til Xbox 360 betraktelig.

Klokkeløse CPUer

En annen metode for å løse noen av problemene med et globalt klokkesignal er å fjerne klokkesignalet helt. Mens fjerning av det globale klokkesignalet gjør designprosessen betydelig mer kompleks på mange måter, har asynkrone (eller klokkeløse) design markante fordeler i strømforbruk og varmespredning sammenlignet med lignende synkrone design. Selv om det er noe uvanlig, har hele asynkrone CPUer blitt bygget uten å bruke et globalt klokkesignal. To bemerkelsesverdige eksempler på dette er den ARM- kompatible AMULET og den MIPS R3000-kompatible MiniMIPS.{{

I stedet for å fullstendig fjerne klokkesignalet, tillater noen CPU-design at visse deler av enheten er asynkrone, for eksempel å bruke asynkrone ALU-er i forbindelse med superskalar pipelining for å oppnå noen aritmetiske ytelsesgevinster. Selv om det ikke er helt klart om helt asynkrone design kan yte på et sammenlignbart eller bedre nivå enn deres synkrone motstykker, er det tydelig at de i det minste utmerker seg i enklere matematiske operasjoner. Dette, kombinert med deres utmerkede strømforbruk og varmeavledningsegenskaper, gjør dem svært egnet for innebygde datamaskiner .

Spenningsregulatormodul

Mange moderne CPUer har en dyseintegrert strømstyringsmodul som regulerer spenningstilførselen til CPU-kretsen på forespørsel, slik at den kan holde balansen mellom ytelse og strømforbruk.

Heltallsområde

Hver CPU representerer numeriske verdier på en bestemt måte. For eksempel representerte noen tidlige digitale datamaskiner tall som kjente desimalverdier (grunnlag 10) tallsystemverdier , og andre har brukt mer uvanlige representasjoner som ternær (grunntall tre). Nesten alle moderne CPU-er representerer tall i binær form, hvor hvert siffer er representert av en fysisk mengde med to verdier, for eksempel en "høy" eller "lav" spenning .

Et seks-bits ord som inneholder den binærkodede representasjonen av desimalverdi 40. De fleste moderne prosessorer bruker ordstørrelser som er en potens på to, for eksempel 8, 16, 32 eller 64 biter.

Relatert til numerisk representasjon er størrelsen og presisjonen til heltall som en CPU kan representere. Når det gjelder en binær CPU, måles dette ved antall biter (signifikante sifre i et binært kodet heltall) som CPU kan behandle i én operasjon, som vanligvis kalles ordstørrelse , bitbredde , databanebredde , heltallspresisjon , eller heltallsstørrelse . En CPUs heltallsstørrelse bestemmer rekkevidden av heltallsverdier den kan operere direkte på. For eksempel kan en 8-bits CPU direkte manipulere heltall representert av åtte biter, som har et område på 256 (2 8 ) diskrete heltallsverdier.

Heltallsområde kan også påvirke antallet minneplasseringer CPU-en kan adressere direkte (en adresse er en heltallsverdi som representerer en spesifikk minneplassering). For eksempel, hvis en binær CPU bruker 32 biter for å representere en minneadresse, kan den adressere 2 32 minneplasseringer direkte. For å omgå denne begrensningen og av forskjellige andre grunner, bruker noen CPU-er mekanismer (som bankbytte ) som gjør at ekstra minne kan adresseres.

CPUer med større ordstørrelser krever flere kretser og er følgelig fysisk større, koster mer og bruker mer strøm (og genererer derfor mer varme). Som et resultat blir mindre 4- eller 8-biters mikrokontrollere ofte brukt i moderne applikasjoner, selv om CPUer med mye større ordstørrelser (som 16, 32, 64, til og med 128-bit) er tilgjengelige. Når det kreves høyere ytelse, kan imidlertid fordelene med en større ordstørrelse (større dataområder og adresserom) oppveie ulempene. En CPU kan ha interne databaner kortere enn ordstørrelsen for å redusere størrelsen og kostnadene. For eksempel, selv om IBM System/360- instruksjonssettet var et 32-bits instruksjonssett, hadde System/360 Model 30 og Model 40 8-biters databaner i den aritmetiske logiske enheten, slik at en 32-bits addisjon krevde fire sykluser, en for hver 8 biter av operandene, og selv om instruksjonssettet i Motorola 68000-serien var et 32-bits instruksjonssett, hadde Motorola 68000 og Motorola 68010 16-bits databaner i den aritmetiske logiske enheten, slik at en 32-bit add krevde to sykluser.

For å oppnå noen av fordelene som tilbys av både lavere og høyere bitlengder, har mange instruksjonssett forskjellige bitbredder for heltalls- og flyttallsdata, slik at CPUer som implementerer det instruksjonssettet kan ha forskjellige bitbredder for forskjellige deler av enheten. For eksempel var IBM System/360- instruksjonssettet primært 32-biters, men støttet 64-bits flyttallverdier for å lette større nøyaktighet og rekkevidde i flytende kommatall. System/360 Model 65 hadde en 8-bits adderer for binær aritmetikk med desimal og fast punkt og en 60-bits adderer for flytepunktsregning. Mange senere CPU-design bruker lignende blandet bitbredde, spesielt når prosessoren er ment for generell bruk der det kreves en rimelig balanse mellom heltalls- og flyttallskapasitet.

Parallellisme

Modell av en subskalær CPU, der det tar femten klokkesykluser for å fullføre tre instruksjoner

Beskrivelsen av den grunnleggende operasjonen til en CPU som tilbys i forrige avsnitt beskriver den enkleste formen en CPU kan ha. Denne typen CPU, vanligvis referert til som subscalar , opererer på og utfører én instruksjon på ett eller to datastykker om gangen, det vil si mindre enn én instruksjon per klokkesyklus ( IPC < 1 ).

Denne prosessen gir opphav til en iboende ineffektivitet i subskalære CPUer. Siden bare én instruksjon utføres om gangen, må hele CPUen vente på at instruksjonen fullføres før den fortsetter til neste instruksjon. Som et resultat blir den subskalære CPU "hengt opp" på instruksjoner som tar mer enn én klokkesyklus for å fullføre utførelse. Selv å legge til en andre utførelsesenhet (se nedenfor) forbedrer ikke ytelsen mye; i stedet for at en sti blir hengt opp, blir to sti hengt opp og antallet ubrukte transistorer økes. Denne utformingen, der CPUens utførelsesressurser kan operere på bare én instruksjon om gangen, kan bare muligens nå skalær ytelse (én instruksjon per klokkesyklus, IPC = 1 ). Imidlertid er ytelsen nesten alltid subskalær (mindre enn én instruksjon per klokkesyklus, IPC < 1 ).

Forsøk på å oppnå skalar og bedre ytelse har resultert i en rekke designmetodikker som gjør at CPU-en oppfører seg mindre lineært og mer parallelt. Når det refereres til parallellitet i CPUer, brukes vanligvis to begreper for å klassifisere disse designteknikkene:

Hver metodikk er forskjellig både i måten de er implementert på, så vel som den relative effektiviteten de har råd til å øke CPU-ytelsen for en applikasjon.

Parallellitet på instruksjonsnivå

Grunnleggende fem-trinns rørledning. I beste fall kan denne rørledningen opprettholde en fullføringshastighet på én instruksjon per klokkesyklus.

En av de enkleste metodene for økt parallellitet er å begynne de første trinnene med instruksjonshenting og -dekoding før den forrige instruksjonen fullføres. Dette er en teknikk kjent som instruction pipelining , og brukes i nesten alle moderne CPU-er for generell bruk. Pipelining gjør at flere instruksjoner kan utføres om gangen ved å dele utførelsesveien i diskrete stadier. Denne separasjonen kan sammenlignes med et samlebånd, der en instruksjon gjøres mer fullstendig på hvert trinn til den går ut av utførelsesrørledningen og trekkes tilbake.

Pipelining introduserer imidlertid muligheten for en situasjon der resultatet av forrige operasjon er nødvendig for å fullføre neste operasjon; en tilstand som ofte kalles dataavhengighetskonflikt. Derfor må prosessorer med pipeline se etter slike forhold og forsinke en del av rørledningen om nødvendig. En prosessor med pipeline kan bli nesten skalær, kun hemmet av pipeline-stopp (en instruksjon som bruker mer enn én klokkesyklus i et trinn).

En enkel superskalar pipeline. Ved å hente og sende to instruksjoner om gangen, kan maksimalt to instruksjoner per klokkesyklus fullføres.

Forbedringer i instruksjonspipelining førte til ytterligere reduksjoner i inaktiv tid for CPU-komponenter. Design som sies å være superskalær inkluderer en lang instruksjonspipeline og flere identiske utførelsesenheter , for eksempel lastlagerenheter , aritmetikk-logiske enheter , flyttallsenheter og adressegenereringsenheter . I en superskalar pipeline leses instruksjoner og sendes til en dispatcher, som bestemmer om instruksjonene kan utføres parallelt (samtidig). I så fall blir de sendt til utførelsesenheter, noe som resulterer i at de utføres samtidig. Generelt er antallet instruksjoner som en superskalar CPU vil fullføre i en syklus, avhengig av antall instruksjoner den er i stand til å sende samtidig til utførelsesenheter.

Mesteparten av vanskeligheten med utformingen av en superskalar CPU-arkitektur ligger i å skape en effektiv dispatcher. Ekspeditøren må raskt kunne avgjøre om instruksjoner kan utføres parallelt, samt sende dem på en slik måte at så mange utførelsesenheter er opptatt som mulig. Dette krever at instruksjonsrørledningen fylles så ofte som mulig og krever betydelige mengder CPU-cache . Det gjør også fare -avoiding teknikker som gren forutsigelse , spekulativ utførelse , registeromdøping , ute-av-ordreutførelse og transaksjonsminne avgjørende for å opprettholde en høy grad av ytelse. Ved å forsøke å forutsi hvilken gren (eller bane) en betinget instruksjon vil ta, kan CPUen minimere antall ganger hele rørledningen må vente til en betinget instruksjon er fullført. Spekulativ utførelse gir ofte beskjedne ytelsesøkninger ved å utføre deler av koden som kanskje ikke er nødvendig etter at en betinget operasjon er fullført. Utførelse av utførelse omorganiserer rekkefølgen som instruksjoner utføres i noe for å redusere forsinkelser på grunn av dataavhengigheter. Også i tilfelle av en enkelt instruksjonsstrøm, flere datastrøm - et tilfelle når mye data fra samme type må behandles - kan moderne prosessorer deaktivere deler av rørledningen slik at når en enkelt instruksjon utføres mange ganger, kan CPU-en hopper over hente- og dekodefasene og øker dermed ytelsen betraktelig ved visse anledninger, spesielt i svært monotone programmotorer som programvare for videoskaping og fotobehandling.

I tilfellet der bare en del av CPU-en er superskalær, lider den delen som ikke er det en ytelsesstraff på grunn av planleggingsstopp. Intel P5 Pentium hadde to superskalare ALU-er som kunne godta én instruksjon per klokkesyklus hver, men dens FPU kunne ikke. Dermed var P5 heltalls superskalar, men ikke flyttalls superskalar. Intels etterfølger til P5-arkitekturen, P6 , la til superskalare evner til sine flytende kommafunksjoner.

Enkel pipelining og superskalardesign øker en CPUs ILP ved å la den utføre instruksjoner med hastigheter som overgår én instruksjon per klokkesyklus. De fleste moderne CPU-design er i det minste noe superskalære, og nesten alle generelle CPU-er designet i det siste tiåret er superskalære. I senere år har noe av vekten på å designe datamaskiner med høy ILP blitt flyttet ut av CPU-maskinvaren og inn i programvaregrensesnittet, eller instruction set architecture (ISA). Strategien til det svært lange instruksjonsordet (VLIW) fører til at noe ILP blir implisert direkte av programvaren, noe som reduserer CPUens arbeid med å øke ILP og derved reduserer designkompleksiteten.

Parallellitet på oppgavenivå

En annen strategi for å oppnå ytelse er å utføre flere tråder eller prosesser parallelt. Dette forskningsområdet er kjent som parallell databehandling . I Flynns taksonomi er denne strategien kjent som multiple instruction stream, multiple data stream (MIMD).

En teknologi som ble brukt til dette formålet var multiprosessering (MP). Den første smaken av denne teknologien er kjent som symmetrisk multiprosessering (SMP), der et lite antall CPUer deler et sammenhengende syn på minnesystemet sitt. I dette opplegget har hver CPU ekstra maskinvare for å opprettholde en konstant oppdatert visning av minnet. Ved å unngå foreldede visninger av minne, kan CPU-ene samarbeide om det samme programmet og programmer kan migrere fra én CPU til en annen. For å øke antallet samarbeidende CPUer utover en håndfull, ble ordninger som ikke-uniform minnetilgang (NUMA) og katalogbaserte koherensprotokoller introdusert på 1990-tallet. SMP-systemer er begrenset til et lite antall CPUer mens NUMA-systemer er bygget med tusenvis av prosessorer. Opprinnelig ble multiprosessering bygget ved å bruke flere diskrete CPUer og kort for å implementere sammenkoblingen mellom prosessorene. Når prosessorene og deres sammenkoblinger alle er implementert på en enkelt brikke, er teknologien kjent som chip-level multiprocessing (CMP) og enkeltbrikken som en multi-core prosessor .

Det ble senere anerkjent at finkornet parallellitet eksisterte med et enkelt program. Et enkelt program kan ha flere tråder (eller funksjoner) som kan kjøres separat eller parallelt. Noen av de tidligste eksemplene på denne teknologien implementerte input/output- behandling som direkte minnetilgang som en separat tråd fra beregningstråden. En mer generell tilnærming til denne teknologien ble introdusert på 1970-tallet da systemer ble designet for å kjøre flere beregningstråder parallelt. Denne teknologien er kjent som multi-threading (MT). Denne tilnærmingen anses som mer kostnadseffektiv enn multiprosessering, ettersom bare et lite antall komponenter i en CPU blir replikert for å støtte MT i motsetning til hele CPUen når det gjelder MP. I MT deles utførelsesenhetene og minnesystemet inkludert cachene mellom flere tråder. Ulempen med MT er at maskinvarestøtten for multithreading er mer synlig for programvare enn for MP, og derfor må supervisorprogramvare som operativsystemer gjennomgå større endringer for å støtte MT. En type MT som ble implementert er kjent som temporal multithreading , der en tråd kjøres til den stopper og venter på at data skal returneres fra eksternt minne. I dette opplegget vil CPU'en deretter raskt bytte til en annen tråd som er klar til å kjøre, byttet gjøres ofte i én CPU-klokkesyklus, for eksempel UltraSPARC T1 . En annen type MT er simultan multithreading , hvor instruksjoner fra flere tråder utføres parallelt innenfor én CPU-klokkesyklus.

I flere tiår fra 1970-tallet til begynnelsen av 2000-tallet var fokuset i utformingen av høyytelses-CPU-er for generell bruk i stor grad på å oppnå høy ILP gjennom teknologier som pipelining, cacher, superskalær utførelse, ut-av-ordre utførelse, etc. Denne trenden kulminerte i store , strømkrevende prosessorer som Intel Pentium 4 . På begynnelsen av 2000-tallet ble CPU-designere hindret fra å oppnå høyere ytelse fra ILP-teknikker på grunn av den økende forskjellen mellom CPU-driftsfrekvenser og hovedminnedriftsfrekvenser, samt eskalerende CPU-krafttap på grunn av mer esoteriske ILP-teknikker.

CPU-designere lånte deretter ideer fra kommersielle datamarkeder som transaksjonsbehandling , der den samlede ytelsen til flere programmer, også kjent som gjennomstrømsdatabehandling , var viktigere enn ytelsen til en enkelt tråd eller prosess.

Denne reverseringen av vekten er bevist av spredningen av to- og mer kjerneprosessordesign, og spesielt Intels nyere design som ligner dens mindre superskalar P6- arkitektur. Senere design i flere prosessorfamilier viser CMP, inkludert x86-64 Opteron og Athlon 64 X2 , SPARC UltraSPARC T1 , IBM POWER4 og POWER5 , samt flere videospillkonsoller CPUer som Xbox 360s trippelkjerne PowerPC-design, og PlayStation 3s 7-kjerners cellemikroprosessor .

Dataparallellisme

Et mindre vanlig, men stadig viktigere paradigme for prosessorer (og faktisk databehandling generelt) omhandler dataparallellisme. Prosessorene diskutert tidligere er alle referert til som en type skalarenhet. Som navnet tilsier, håndterer vektorprosessorer flere datastykker i sammenheng med én instruksjon. Dette står i kontrast til skalære prosessorer, som håndterer ett stykke data for hver instruksjon. Ved å bruke Flynns taksonomi blir disse to skjemaene for å håndtere data generelt referert til som henholdsvis enkelt instruksjonsstrøm , multippel datastrøm ( SIMD ) og enkelt instruksjonsstrøm , enkelt datastrøm ( SISD ). Den store nytten i å lage prosessorer som håndterer vektorer av data ligger i å optimalisere oppgaver som har en tendens til å kreve den samme operasjonen (for eksempel en sum eller et punktprodukt ) som skal utføres på et stort sett med data. Noen klassiske eksempler på denne typen oppgaver inkluderer multimediaapplikasjoner (bilder, video og lyd), samt mange typer vitenskapelige og ingeniøroppgaver. Mens en skalarprosessor må fullføre hele prosessen med å hente, dekode og utføre hver instruksjon og verdi i et sett med data, kan en vektorprosessor utføre en enkelt operasjon på et relativt stort sett med data med én instruksjon. Dette er bare mulig når applikasjonen har en tendens til å kreve mange trinn som bruker én operasjon på et stort sett med data.

De fleste tidlige vektorprosessorer, som Cray-1 , var nesten utelukkende assosiert med vitenskapelig forskning og kryptografiapplikasjoner . Men ettersom multimedia i stor grad har gått over til digitale medier, har behovet for en eller annen form for SIMD i prosessorer for generell bruk blitt betydelig. Kort tid etter at inkludering av flyttallsenheter begynte å bli vanlig i prosessorer for generelle formål, begynte spesifikasjoner for og implementeringer av SIMD-utførelsesenheter også å dukke opp for prosessorer med generelle formål. Noen av disse tidlige SIMD-spesifikasjonene - som HPs Multimedia Acceleration Extensions (MAX) og Intels MMX - var kun heltall. Dette viste seg å være en betydelig hindring for noen programvareutviklere, siden mange av applikasjonene som drar nytte av SIMD primært omhandler flyttall . Gradvis har utviklere foredlet og omgjort disse tidlige designene til noen av de vanlige moderne SIMD-spesifikasjonene, som vanligvis er assosiert med én instruksjonssettarkitektur (ISA). Noen bemerkelsesverdige moderne eksempler inkluderer Intels Streaming SIMD Extensions (SSE) og den PowerPC-relaterte AltiVec (også kjent som VMX).

Virtuelle CPUer

Cloud computing kan innebære underinndeling av CPU-drift i virtuelle sentralbehandlingsenheter ( vCPU- er).

En vert er den virtuelle ekvivalenten til en fysisk maskin som et virtuelt system opererer på. Når det er flere fysiske maskiner som opererer i tandem og administreres som en helhet, danner de grupperte databehandlings- og minneressursene en klynge . I noen systemer er det mulig å legge til og fjerne dynamisk fra en klynge. Ressurser tilgjengelig på verts- og klyngenivå kan deles opp i ressurspooler med fin granularitet .

Opptreden

Den ytelse eller hastigheten av en prosessor er avhengig av, blant mange andre faktorer, av klokkehastigheten (vanligvis gitt i multipler av hertz ) og instruksjonene pr klokke (IPC), som sammen er de faktorer for instruksjoner per sekund (IPS) at CPU kan utføre. Mange rapporterte IPS-verdier har representert "peak" utførelseshastigheter på kunstige instruksjonssekvenser med få grener, mens realistiske arbeidsbelastninger består av en blanding av instruksjoner og applikasjoner, hvorav noen tar lengre tid å utføre enn andre. Ytelsen til minnehierarkiet påvirker også prosessorytelsen i stor grad, et problem som knapt vurderes i MIPS-beregninger. På grunn av disse problemene har forskjellige standardiserte tester, ofte kalt "benchmarks" for dette formålet‍—‌som SPECint‍ —‌ blitt utviklet for å forsøke å måle den virkelige effektive ytelsen i ofte brukte applikasjoner.

Behandlingsytelsen til datamaskiner økes ved å bruke flerkjerneprosessorer , som i hovedsak er å koble to eller flere individuelle prosessorer (kalt kjerner i denne forstand) til en integrert krets. Ideelt sett ville en tokjerneprosessor være nesten dobbelt så kraftig som en enkeltkjerneprosessor. I praksis er ytelsesgevinsten langt mindre, bare rundt 50 %, på grunn av ufullkomne programvarealgoritmer og implementering. Å øke antall kjerner i en prosessor (dvs. dual-core, quad-core, etc.) øker arbeidsbelastningen som kan håndteres. Dette betyr at prosessoren nå kan håndtere en rekke asynkrone hendelser, avbrudd osv. som kan ta en toll på CPU-en når den blir overveldet. Disse kjernene kan betraktes som forskjellige etasjer i et prosessanlegg, der hver etasje håndterer en annen oppgave. Noen ganger vil disse kjernene håndtere de samme oppgavene som kjerner ved siden av dem hvis en enkelt kjerne ikke er nok til å håndtere informasjonen.

På grunn av de spesifikke egenskapene til moderne CPUer, som samtidig multithreading og uncore , som involverer deling av faktiske CPU-ressurser mens man sikter mot økt utnyttelse, ble overvåking av ytelsesnivåer og maskinvarebruk gradvis en mer kompleks oppgave. Som et svar implementerer noen CPUer ekstra maskinvarelogikk som overvåker faktisk bruk av ulike deler av en CPU og gir ulike tellere tilgjengelig for programvare; et eksempel er Intels Performance Counter Monitor- teknologi.

Se også

Notater

Referanser

Eksterne linker