Centralenhed - Central processing unit

En Intel 80486DX2 CPU, set fra oven
Undersiden af ​​en Intel 80486DX2 , der viser dens stifter

En central processing unit ( CPU ), også kaldet en central processor , hovedprocessor eller bare processor , er det elektroniske kredsløb, der udfører instruktioner, der omfatter et computerprogram . CPU'en udfører grundlæggende aritmetiske , logiske, styrings- og input/output- operationer (I/O) specificeret af instruktionerne i programmet. Dette står i kontrast til eksterne komponenter såsom hovedhukommelse og I/O-kredsløb og specialiserede processorer såsom grafikprocessorenheder (GPU'er).

Formen, designet og implementeringen af ​​CPU'er har ændret sig over tid, men deres grundlæggende funktion forbliver næsten uændret. De vigtigste komponenter i en CPU omfatter den aritmetiske-logiske enhed (ALU), der udfører aritmetiske og logiske operationer , processorregistre, der leverer operander til ALU'en og gemmer resultaterne af ALU-operationer, og en kontrolenhed, der orkestrerer hentning (fra hukommelsen), afkodning og udførelse af instruktioner ved at styre de koordinerede operationer af ALU, registre og andre komponenter.

De fleste moderne CPU'er er implementeret på integrerede kredsløb (IC) mikroprocessorer , med en eller flere CPU'er på en enkelt metal-oxid-halvleder (MOS) IC-chip. Mikroprocessorchips med flere CPU'er er multi-core processorer . De individuelle fysiske CPU'er, processorkerner , kan også være multithreaded for at skabe yderligere virtuelle eller logiske CPU'er.

En IC, der indeholder en CPU, kan også indeholde hukommelse , perifere grænseflader og andre komponenter i en computer; sådanne integrerede enheder kaldes på forskellig vis mikrocontrollere eller systemer på en chip (SoC).

Array-processorer eller vektorprocessorer har flere processorer, der fungerer parallelt, uden at nogen enhed betragtes som central. Virtuelle CPU'er er en abstraktion af dynamiske aggregerede beregningsressourcer.

Historie

EDVAC , en af ​​de første computere med lagrede programmer

Tidlige computere som f.eks. ENIAC skulle omkobles fysisk til at udføre forskellige opgaver, hvilket fik disse maskiner til at blive kaldt "computere med faste programmer". Udtrykket "central processorenhed" har været i brug siden så tidligt som i 1955. Da udtrykket "CPU" generelt defineres som en enhed til udførelse af software (computerprogram), kom de tidligste enheder, der med rette kunne kaldes CPU'er, med fremkomsten af computeren med det lagrede program .

Ideen om en lagret-program computer havde været allerede er til stede i udformningen af John Presper Eckert og John William Mauchly 's ENIAC , men blev oprindeligt udeladt, så det kunne være færdig hurtigere. Den 30. juni 1945, før ENIAC blev lavet, distribuerede matematikeren John von Neumann papiret med titlen First Draft of a Report on EDVAC . Det var omridset af en computer med lagret program, som til sidst ville blive færdiggjort i august 1949. EDVAC var designet til at udføre et vist antal instruktioner (eller operationer) af forskellige typer. Det er væsentligt, at programmerne skrevet til EDVAC skulle gemmes i computerens højhastighedshukommelse snarere end specificeret af computerens fysiske ledninger. Dette overvandt en alvorlig begrænsning af ENIAC, som var den betydelige tid og indsats, der krævedes for at omkonfigurere computeren til at udføre en ny opgave. Med von Neumanns design kunne programmet, som EDVAC kørte, ændres blot ved at ændre indholdet af hukommelsen. EDVAC var imidlertid ikke den første computer med lagrede programmer; det Manchester Baby , en mindre eksperimenterende lagret-program computer, kørte sit første program den 21. juni 1948 og den Manchester Mark 1 kørte sit første program i løbet af natten på 16-17 juni 1949.

Tidlige CPU'er var brugerdefinerede designs, der blev brugt som en del af en større og til tider karakteristisk computer. Denne metode til at designe brugerdefinerede CPU'er til en bestemt applikation har dog i vid udstrækning givet plads til udviklingen af ​​multi-purpose processorer produceret i store mængder. Denne standardisering begyndte i æraen med diskrete transistor- mainframes og minicomputere og er hurtigt accelereret med populariseringen af ​​det integrerede kredsløb  (IC). IC'en har gjort det muligt at designe og fremstille stadig mere komplekse CPU'er til tolerancer i størrelsesordenen nanometer . Både miniaturisering og standardisering af CPU'er har øget tilstedeværelsen af ​​digitale enheder i det moderne liv langt ud over den begrænsede anvendelse af dedikerede computermaskiner. Moderne mikroprocessorer optræder i elektroniske enheder lige fra biler til mobiltelefoner og nogle gange endda i legetøj.

Mens von Neumann oftest krediteres designet af computeren med lagret program på grund af hans design af EDVAC, og designet blev kendt som von Neumann-arkitekturen , havde andre før ham, såsom Konrad Zuse , foreslået og implementeret lignende ideer. Den såkaldte Harvard-arkitektur af Harvard Mark I , som blev afsluttet før EDVAC, brugte også et lagret programdesign ved hjælp af hullet papirbånd frem for elektronisk hukommelse. Den vigtigste forskel mellem von Neumann- og Harvard-arkitekturerne er, at sidstnævnte adskiller lagring og behandling af CPU-instruktioner og data, mens førstnævnte bruger den samme hukommelsesplads til begge. De fleste moderne CPU'er er primært von Neumann i design, men CPU'er med Harvard-arkitekturen ses også, især i indlejrede applikationer; for eksempel er Atmel AVR- mikrocontrollerne Harvard-arkitekturprocessorer.

Relæer og vakuumrør (termionrør) blev almindeligvis brugt som koblingselementer; en nyttig computer kræver tusinder eller titusindvis af koblingsenheder. Den samlede hastighed af et system er afhængig af hastigheden af ​​kontakterne. Vakuumrørcomputere såsom EDVAC havde en tendens til i gennemsnit otte timer mellem fejl, hvorimod relæcomputere som den (langsommere, men tidligere) Harvard Mark I fejlede meget sjældent. I sidste ende blev rørbaserede CPU'er dominerende, fordi de betydelige hastighedsfordele generelt opvejede pålidelighedsproblemerne. De fleste af disse tidlige synkrone CPU'er kørte ved lave klokfrekvenser sammenlignet med moderne mikroelektroniske designs. Ursignalfrekvenser, der spænder fra 100 kHz til 4 MHz, var meget almindelige på dette tidspunkt, i vid udstrækning begrænset af hastigheden af ​​de skifteenheder, de var bygget med.

Transistor CPU'er

IBM PowerPC 604e processor

Designkompleksiteten af ​​CPU'er steg, da forskellige teknologier gjorde det lettere at bygge mindre og mere pålidelige elektroniske enheder. Den første sådan forbedring kom med fremkomsten af transistoren . Transistoriserede CPU'er i 1950'erne og 1960'erne behøvede ikke længere at bygges ud af omfangsrige, upålidelige og skrøbelige koblingselementer som vakuumrør og relæer . Med denne forbedring blev mere komplekse og pålidelige CPU'er bygget på et eller flere printkort indeholdende diskrete (individuelle) komponenter.

I 1964 introducerede IBM sin IBM System/360 computerarkitektur, der blev brugt i en række computere, der kunne køre de samme programmer med forskellig hastighed og ydeevne. Dette var vigtigt på et tidspunkt, hvor de fleste elektroniske computere var inkompatible med hinanden, selv dem, der var fremstillet af samme producent. For at lette denne forbedring brugte IBM konceptet med et mikroprogram (ofte kaldet "mikrokode"), som stadig ser udbredt brug i moderne CPU'er. System/360-arkitekturen var så populær, at den dominerede mainframe-computermarkedet i årtier og efterlod en arv, der stadig videreføres af lignende moderne computere som IBM zSeries . I 1965 introducerede Digital Equipment Corporation (DEC) en anden indflydelsesrig computer rettet mod det videnskabelige og forskningsmæssige marked, PDP-8 .

Fujitsu-kort med SPARC64 VIIIfx-processorer

Transistor-baserede computere havde flere forskellige fordele i forhold til deres forgængere. Bortset fra at lette øget pålidelighed og lavere strømforbrug, tillod transistorer også CPU'er at fungere ved meget højere hastigheder på grund af den korte koblingstid for en transistor i forhold til et rør eller et relæ. Den øgede pålidelighed og dramatisk øgede hastighed af skifteelementerne (som næsten udelukkende var transistorer på dette tidspunkt); CPU-clockhastigheder i snesevis af megahertz blev let opnået i denne periode. Derudover, mens diskrete transistor- og IC-CPU'er var i stor brug, begyndte nye højtydende designs som SIMD (Single Instruction Multiple Data) vektorprocessorer at dukke op. Disse tidlige eksperimentelle designs gav senere anledning til den æra af specialiserede supercomputere som dem, der foretages af Cray Inc. og Fujitsu Ltd .

Småskala integration CPU'er

CPU, kernehukommelse og ekstern busgrænseflade af en DEC PDP-8 /I, lavet af mellemstore integrerede kredsløb

I denne periode blev der udviklet en metode til fremstilling af mange indbyrdes forbundne transistorer i et kompakt rum. Det integrerede kredsløb (IC) tillod et stort antal af transistorer, der skal fremstilles på en enkelt halvleder -baseret matrice , eller "chip". Først blev kun meget grundlæggende ikke-specialiserede digitale kredsløb såsom NOR-porte miniaturiseret til IC'er. CPU'er baseret på disse "byggeklods" IC'er omtales generelt som "small-scale integration" (SSI) enheder. SSI IC'er, såsom dem, der blev brugt i Apollo Guidance Computer , indeholdt normalt op til et par dusin transistorer. At bygge en hel CPU ud af SSI IC'er krævede tusindvis af individuelle chips, men forbrugte stadig meget mindre plads og strøm end tidligere diskrete transistordesigns.

IBM's System/370 , opfølger til System/360, brugte SSI IC'er frem for Solid Logic Technology diskrete transistor-moduler. DEC's PDP-8 /I og KI10 PDP-10 skiftede også fra de individuelle transistorer brugt af PDP-8 og PDP-10 til SSI IC'er, og deres ekstremt populære PDP-11 linje blev oprindeligt bygget med SSI IC'er, men blev til sidst implementeret med LSI komponenter, når disse blev praktiske.

Storskala integration CPU'er

Lee Boysel publicerede indflydelsesrige artikler, herunder et "manifest" fra 1967, som beskrev, hvordan man bygger hvad der svarer til en 32-bit mainframe-computer fra et relativt lille antal integrationskredsløb i stor skala (LSI). Den eneste måde at bygge LSI-chips på, som er chips med hundrede eller flere porte, var at bygge dem ved hjælp af en MOS- halvlederfremstillingsproces (enten PMOS-logik , NMOS-logik eller CMOS-logik ). Nogle virksomheder fortsatte dog med at bygge processorer ud af bipolære transistor-transistor logik- chips (TTL), fordi bipolære junction-transistorer var hurtigere end MOS-chips indtil 1970'erne (nogle få virksomheder som Datapoint fortsatte med at bygge processorer ud af TTL-chips indtil begyndelsen 1980'erne). I 1960'erne var MOS IC'er langsommere og blev oprindeligt kun anset for nyttige i applikationer, der krævede lav effekt. Efter udviklingen af silicium-gate MOS-teknologi af Federico Faggin på Fairchild Semiconductor i 1968, erstattede MOS IC'er stort set bipolar TTL som standardchipteknologien i begyndelsen af ​​1970'erne.

Efterhånden som den mikroelektroniske teknologi udviklede sig, blev et stigende antal transistorer placeret på IC'er, hvilket reducerede antallet af individuelle IC'er, der er nødvendige for en komplet CPU. MSI og LSI IC'er øgede transistorantal til hundreder og derefter tusinder. I 1968 var antallet af IC'er, der kræves for at bygge en komplet CPU, blevet reduceret til 24 IC'er af otte forskellige typer, hvor hver IC indeholdt omkring 1000 MOSFET'er. I skarp kontrast til dens SSI- og MSI-forgængere indeholdt den første LSI-implementering af PDP-11 en CPU bestående af kun fire LSI-integrerede kredsløb.

Mikroprocessorer

Die af en Intel 80486DX2 mikroprocessor (faktisk størrelse: 12 × 6,75 mm) i emballagen
Intel Core i5 CPU på et Vaio E-serie bærbar bundkort (til højre, under varmerøret )
Inde i bærbar computer, med CPU fjernet fra stikket

Fremskridt inden for MOS IC-teknologi førte til opfindelsen af mikroprocessoren i begyndelsen af ​​1970'erne. Siden introduktionen af ​​den første kommercielt tilgængelige mikroprocessor, Intel 4004 i 1971, og den første udbredte mikroprocessor, Intel 8080 i 1974, har denne klasse af CPU'er næsten fuldstændigt overhalet alle andre implementeringsmetoder for centralenheder. Datidens mainframe- og minicomputerproducenter lancerede proprietære IC-udviklingsprogrammer for at opgradere deres ældre computerarkitekturer og producerede til sidst instruktionssæt- kompatible mikroprocessorer, der var bagudkompatible med deres ældre hardware og software. Kombineret med fremkomsten og den endelige succes for den allestedsnærværende personlige computer , anvendes udtrykket CPU nu næsten udelukkende til mikroprocessorer. Flere CPU'er (benævnt kerner ) kan kombineres i en enkelt behandlingschip.

Tidligere generationer af CPU'er blev implementeret som diskrete komponenter og adskillige små integrerede kredsløb (IC'er) på et eller flere printkort. Mikroprocessorer er på den anden side CPU'er fremstillet på et meget lille antal IC'er; normalt kun én. Den overordnede mindre CPU-størrelse, som et resultat af at være implementeret på en enkelt matrice, betyder hurtigere omskiftningstid på grund af fysiske faktorer som nedsat gate- parasitisk kapacitans . Dette har gjort det muligt for synkrone mikroprocessorer at have clock-hastigheder, der spænder fra snesevis af megahertz til adskillige gigahertz. Derudover har evnen til at konstruere meget små transistorer på en IC øget kompleksiteten og antallet af transistorer i en enkelt CPU mange gange. Denne meget observerede tendens er beskrevet af Moores lov , som havde vist sig at være en ret præcis forudsigelse af væksten i CPU (og anden IC) kompleksitet indtil 2016.

Mens kompleksiteten, størrelsen, konstruktionen og den generelle form for CPU'er har ændret sig enormt siden 1950, har det grundlæggende design og funktion ikke ændret sig meget overhovedet. Næsten alle almindelige CPU'er i dag kan meget præcist beskrives som von Neumann stored-program maskiner. Da Moores lov ikke længere gælder, er der opstået bekymringer om grænserne for integreret kredsløbstransistorteknologi. Ekstrem miniaturisering af elektroniske porte får virkningerne af fænomener som elektromigration og undertærskellækage til at blive meget større. Disse nyere bekymringer er blandt de mange faktorer, der får forskere til at undersøge nye databehandlingsmetoder såsom kvantecomputeren , samt at udvide brugen af parallelisme og andre metoder, der udvider anvendeligheden af ​​den klassiske von Neumann-model.

Operation

Den grundlæggende funktion for de fleste CPU'er, uanset den fysiske form, de har, er at udføre en sekvens af lagrede instruktioner , der kaldes et program. Instruktionerne, der skal udføres, opbevares i en form for computerhukommelse . Næsten alle CPU'er følger hente-, afkodnings- og eksekveringstrinene i deres drift, som tilsammen er kendt som instruktionscyklussen .

Efter udførelsen af ​​en instruktion gentages hele processen, hvor den næste instruktionscyklus normalt henter den næste i sekvens instruktion på grund af den øgede værdi i programtælleren . Hvis en hop-instruktion blev udført, vil programtælleren blive ændret til at indeholde adressen på den instruktion, der blev hoppet til, og programafviklingen fortsætter normalt. I mere komplekse CPU'er kan flere instruktioner hentes, afkodes og udføres samtidigt. Dette afsnit beskriver, hvad der generelt omtales som den " klassiske RISC-pipeline ", som er ret almindelig blandt de simple CPU'er, der bruges i mange elektroniske enheder (ofte kaldet mikrocontrollere). Det ignorerer stort set CPU-cachens vigtige rolle og derfor adgangsfasen i pipelinen.

Nogle instruktioner manipulerer programtælleren i stedet for at producere resultatdata direkte; sådanne instruktioner kaldes generelt "hop" og letter programadfærd som loops , betinget programudførelse (ved brug af et betinget hop) og eksistensen af funktioner . I nogle processorer ændrer nogle andre instruktioner bits tilstand i et "flag"-register . Disse flag kan bruges til at påvirke, hvordan et program opfører sig, da de ofte angiver resultatet af forskellige operationer. For eksempel evaluerer en "sammenlign"-instruktion i sådanne processorer to værdier og sætter eller sletter bits i flagregisteret for at indikere hvilken der er størst, eller om de er ens; et af disse flag kunne derefter bruges af en senere springinstruktion til at bestemme programflow.

Hent

Det første trin, hentning, involverer at hente en instruktion (som er repræsenteret ved et antal eller en række tal) fra programhukommelsen. Instruktionens placering (adresse) i programhukommelsen bestemmes af programtælleren (PC; kaldet "instruktionsmarkøren" i Intel x86 mikroprocessorer ), som gemmer et nummer, der identificerer adressen på den næste instruktion, der skal hentes. Efter at en instruktion er hentet, øges pc'en med længden af ​​instruktionen, så den vil indeholde adressen på den næste instruktion i sekvensen. Ofte skal instruktionen, der skal hentes, hentes fra relativt langsom hukommelse, hvilket får CPU'en til at gå i stå, mens den venter på, at instruktionen bliver returneret. Dette problem løses stort set i moderne processorer af caches og pipeline-arkitekturer (se nedenfor).

Afkode

Instruktionen, som CPU'en henter fra hukommelsen, bestemmer, hvad CPU'en vil gøre. I afkodningstrinnet, udført af binære dekoderkredsløb kendt som instruktionsdekoderen , konverteres instruktionen til signaler, der styrer andre dele af CPU'en.

Den måde, hvorpå instruktionen fortolkes, er defineret af CPU'ens instruktionssætarkitektur (ISA). Ofte angiver en gruppe bits (det vil sige et "felt") i instruktionen, kaldet opkoden, hvilken operation der skal udføres, mens de resterende felter normalt giver supplerende information, der kræves til operationen, såsom operanderne. Disse operander kan angives som en konstant værdi (kaldet en umiddelbar værdi) eller som placeringen af ​​en værdi, der kan være et processorregister eller en hukommelsesadresse, som bestemt af en adresseringstilstand .

I nogle CPU-design er instruktionsdekoderen implementeret som et fastkablet, uforanderligt binært dekoderkredsløb. I andre bruges et mikroprogram til at oversætte instruktioner til sæt CPU-konfigurationssignaler, der påføres sekventielt over flere clock-impulser. I nogle tilfælde kan hukommelsen, der gemmer mikroprogrammet, omskrives, hvilket gør det muligt at ændre den måde, hvorpå CPU'en afkoder instruktioner.

Udfør

Efter hentnings- og afkodningstrinene udføres eksekveringstrinnet. Afhængigt af CPU-arkitekturen kan dette bestå af en enkelt handling eller en sekvens af handlinger. Under hver handling aktiverer eller deaktiverer styresignaler elektrisk forskellige dele af CPU'en, så de kan udføre hele eller dele af den ønskede operation. Handlingen er derefter fuldført, typisk som reaktion på en clock-impuls. Meget ofte skrives resultaterne til et internt CPU-register for hurtig adgang ved efterfølgende instruktioner. I andre tilfælde kan resultaterne skrives til en langsommere, men billigere hovedhukommelse med højere kapacitet .

For eksempel, hvis en additionsinstruktion skal udføres, aktiveres registre, der indeholder operander (tal, der skal summeres), ligesom de dele af den aritmetiske logiske enhed (ALU), der udfører addition. Når klokpulsen opstår, flyder operanderne fra kilderegistrene ind i ALU'en, og summen vises ved dens udgang. Ved efterfølgende clock-impulser aktiveres (og deaktiveres) andre komponenter for at flytte outputtet (summen af ​​operationen) til lager (f.eks. et register eller hukommelse). Hvis den resulterende sum er for stor (dvs. den er større end ALU'ens outputordstørrelse), vil et aritmetisk overløbsflag blive sat, hvilket påvirker den næste operation.

Struktur og implementering

Blokdiagram af en grundlæggende uniprocessor-CPU computer. Sorte linjer angiver dataflow, hvorimod røde linjer indikerer kontrolflow; pile angiver strømningsretninger.

Hardwired til en CPU's kredsløb er et sæt grundlæggende operationer, den kan udføre, kaldet et instruktionssæt . Sådanne operationer kan for eksempel involvere at tilføje eller trække to tal fra, sammenligne to tal eller springe til en anden del af et program. Hver instruktion er repræsenteret af en unik kombination af bit , kendt som maskinsproget opcode . Mens en instruktion behandles, afkoder CPU'en opkoden (via en binær dekoder ) til kontrolsignaler, som orkestrerer CPU'ens opførsel. En komplet maskinsprogsinstruktion består af en opkode og i mange tilfælde yderligere bits, der specificerer argumenter for operationen (f.eks. de tal, der skal summeres i tilfælde af en additionsoperation). Når man går op på kompleksitetsskalaen, er et maskinsprogsprogram en samling af maskinsprogsinstruktioner, som CPU'en udfører.

Den faktiske matematiske operation for hver instruktion udføres af et logisk kombinationskredsløb i CPU'ens processor kendt som den aritmetiske-logiske enhed eller ALU. Generelt udfører en CPU en instruktion ved at hente den fra hukommelsen, bruge dens ALU til at udføre en operation og derefter gemme resultatet i hukommelsen. Udover instruktionerne til heltal matematik og logiske operationer, findes der forskellige andre maskininstruktioner, såsom dem til at indlæse data fra hukommelsen og gemme dem tilbage, forgreningsoperationer og matematiske operationer på flydende-komma-tal udført af CPU'ens flydende-komma-enhed (FPU) ).

Styreenhed

Den styreenheden (CU) er en bestanddel af CPU, der dirigerer driften af processoren. Den fortæller computerens hukommelse, aritmetiske og logiske enhed og input- og outputenheder, hvordan de skal reagere på de instruktioner, der er blevet sendt til processoren.

Den styrer driften af ​​de andre enheder ved at give timing og styresignaler. De fleste computerressourcer administreres af CU. Det styrer strømmen af ​​data mellem CPU'en og de andre enheder. John von Neumann inkluderede kontrolenheden som en del af von Neumann-arkitekturen . I moderne computerdesign er kontrolenheden typisk en intern del af CPU'en med dens overordnede rolle og drift uændret siden introduktionen.

Aritmetisk logisk enhed

Symbolsk repræsentation af en ALU og dens input- og outputsignaler

Den aritmetiske logiske enhed (ALU) er et digitalt kredsløb i processoren, der udfører heltals aritmetiske og bitvise logiske operationer. Indgangene til ALU'en er de dataord, der skal betjenes (kaldet operander ), statusinformation fra tidligere operationer og en kode fra styreenheden, der angiver, hvilken operation der skal udføres. Afhængigt af den instruktion, der udføres, kan operanderne komme fra interne CPU-registre eller ekstern hukommelse, eller de kan være konstanter, der genereres af ALU'en selv.

Når alle indgangssignaler har sat sig og forplantet sig gennem ALU-kredsløbet, vises resultatet af den udførte operation ved ALU'ens udgange. Resultatet består af både et dataord, som kan være lagret i et register eller en hukommelse, og statusinformation, der typisk er lagret i et specielt internt CPU-register, der er reserveret til dette formål.

Adressegenereringsenhed

Adresse generation enhed ( AGU ), undertiden også kaldet adresse beregningsenhed ( ACU ), er en henrettelse enhed inde i CPU'en, der beregner adresser bruges af CPU til adgang hovedhukommelsen . Ved at få adresseberegninger håndteret af separate kredsløb, der fungerer parallelt med resten af ​​CPU'en, kan antallet af CPU-cyklusser, der kræves til at udføre forskellige maskininstruktioner, reduceres, hvilket medfører ydeevneforbedringer.

Mens de udfører forskellige operationer, skal CPU'er beregne hukommelsesadresser, der er nødvendige for at hente data fra hukommelsen; f.eks. skal array-elementers positioner i hukommelsen beregnes, før CPU'en kan hente data fra faktiske hukommelsesplaceringer. Disse adressegenereringsberegninger involverer forskellige heltals aritmetiske operationer , såsom addition, subtraktion, modulo-operationer eller bitskift . Ofte involverer beregning af en hukommelsesadresse mere end én generel maskininstruktion, som ikke nødvendigvis afkoder og udføres hurtigt. Ved at inkorporere en AGU i et CPU-design, sammen med at introducere specialiserede instruktioner, der bruger AGU'en, kan forskellige adressegenereringsberegninger aflastes fra resten af ​​CPU'en og kan ofte udføres hurtigt i en enkelt CPU-cyklus.

En AGU's muligheder afhænger af en bestemt CPU og dens arkitektur . Således implementerer og afslører nogle AGU'er flere adresseberegningsoperationer, mens nogle også inkluderer mere avancerede specialiserede instruktioner, der kan fungere på flere operander ad gangen. Desuden inkluderer nogle CPU-arkitekturer flere AGU'er, så mere end én adresseberegningsoperation kan udføres samtidigt, hvilket bringer yderligere ydeevneforbedringer ved at udnytte den superskalære karakter af avancerede CPU-designs. For eksempel inkorporerer Intel flere AGU'er i sine Sandy Bridge- og Haswell- mikroarkitekturer , som øger båndbredden af ​​CPU-hukommelsesundersystemet ved at tillade, at flere hukommelsesadgangsinstruktioner udføres parallelt.

Hukommelsesstyringsenhed (MMU)

Mange mikroprocessorer (i smartphones og stationære, bærbare, servercomputere) har en hukommelsesstyringsenhed, der oversætter logiske adresser til fysiske RAM-adresser, giver hukommelsesbeskyttelse og personsøgningsevner , nyttige til virtuel hukommelse . Enklere processorer, især mikrocontrollere , inkluderer normalt ikke en MMU.

Cache

En CPU-cache er en hardware-cache, der bruges af en computers centralenhed (CPU) til at reducere de gennemsnitlige omkostninger (tid eller energi) for at få adgang til data fra hovedhukommelsen . En cache er en mindre, hurtigere hukommelse, tættere på en processorkerne , som gemmer kopier af data fra ofte brugte hovedhukommelsesplaceringer . De fleste CPU'er har forskellige uafhængige caches, inklusive instruktions- og datacache , hvor datacachen normalt er organiseret som et hierarki af flere cache-niveauer (L1, L2, L3, L4 osv.).

Alle moderne (hurtige) CPU'er (med få specialiserede undtagelser) har flere niveauer af CPU-cache. De første CPU'er, der brugte en cache, havde kun ét niveau af cache; i modsætning til senere niveau 1-caches blev den ikke opdelt i L1d (til data) og L1i (til instruktioner). Næsten alle nuværende CPU'er med cache har en delt L1 cache. De har også L2-caches og, for større processorer, også L3-caches. L2-cachen er normalt ikke delt og fungerer som et fælles lager for den allerede opdelte L1-cache. Hver kerne i en multi-core-processor har en dedikeret L2-cache og deles normalt ikke mellem kernerne. L3-cachen og cachen på højere niveau deles mellem kernerne og er ikke opdelt. En L4-cache er i øjeblikket ualmindelig og er generelt på dynamisk tilfældig adgangshukommelse (DRAM), snarere end på statisk tilfældig adgangshukommelse (SRAM), på en separat die eller chip. Det var også tilfældet historisk med L1, mens større chips har tilladt integration af det og generelt alle cache-niveauer, med mulig undtagelse af det sidste niveau. Hvert ekstra niveau af cache har en tendens til at være større og optimeres forskelligt.

Der findes andre typer caches (som ikke tælles med i "cache-størrelsen" af de vigtigste caches nævnt ovenfor), såsom translation lookaside buffer (TLB), der er en del af memory management unit (MMU), som de fleste CPU'er har.

Caches er generelt dimensioneret i to potenser: 2, 8, 16 osv. KiB eller MiB (for større ikke-L1) størrelser, selvom IBM z13 har en 96 KiB L1 instruktionscache.

Urhastighed

De fleste CPU'er er synkrone kredsløb , hvilket betyder, at de anvender et clock-signal til at pace deres sekventielle operationer. Klokkesignalet produceres af et eksternt oscillatorkredsløb, der genererer et ensartet antal impulser hvert sekund i form af en periodisk firkantbølge . Frekvensen af ​​urimpulserne bestemmer hastigheden, hvormed en CPU udfører instruktioner, og følgelig, jo hurtigere uret er, jo flere instruktioner vil CPU'en udføre hvert sekund.

For at sikre korrekt drift af CPU'en er urperioden længere end den maksimale tid, der kræves for alle signaler at forplante sig (bevæge sig) gennem CPU'en. Ved at indstille clock-perioden til en værdi langt over worst-case propagation delay , er det muligt at designe hele CPU'en og den måde, den flytter data rundt på "kanterne" af det stigende og faldende clock-signal. Dette har den fordel, at det forenkler CPU'en betydeligt, både fra et designperspektiv og et komponentoptællingsperspektiv. Det har dog også den ulempe, at hele CPU'en skal vente på sine langsomste elementer, selvom nogle dele af den er meget hurtigere. Denne begrænsning er stort set blevet kompenseret for af forskellige metoder til at øge CPU-parallelismen (se nedenfor).

Arkitektoniske forbedringer alene løser dog ikke alle ulemperne ved globalt synkrone CPU'er. For eksempel er et ursignal underlagt forsinkelserne af ethvert andet elektrisk signal. Højere clock-hastigheder i stadig mere komplekse CPU'er gør det sværere at holde clock-signalet i fase (synkroniseret) gennem hele enheden. Dette har fået mange moderne CPU'er til at kræve flere identiske clock-signaler, der skal leveres for at undgå at forsinke et enkelt signal væsentligt nok til at få CPU'en til at fungere forkert. Et andet stort problem, efterhånden som clock rates stiger dramatisk, er mængden af ​​varme, der spredes af CPU'en . Det konstant skiftende ur får mange komponenter til at skifte, uanset om de bliver brugt på det tidspunkt. Generelt bruger en komponent, der skifter, mere energi end et element i en statisk tilstand. Derfor stiger energiforbruget, efterhånden som klokfrekvensen stiger, hvilket får CPU'en til at kræve mere varmeafledning i form af CPU- køleløsninger.

En metode til at håndtere skift af unødvendige komponenter kaldes clock gating , som involverer at slukke for ursignalet til unødvendige komponenter (effektivt deaktivering af dem). Dette anses dog ofte for at være svært at implementere og ser derfor ikke almindelig brug uden for design med meget lav effekt. Et bemærkelsesværdigt nyligt CPU-design, der bruger omfattende clock-porting, er den IBM PowerPC- baserede Xenon, der bruges i Xbox 360 ; på den måde reduceres strømkravene til Xbox 360 kraftigt.

Urløse CPU'er

En anden metode til at løse nogle af problemerne med et globalt clock-signal er at fjerne clock-signalet helt. Mens fjernelse af det globale ursignal gør designprocessen betydeligt mere kompleks på mange måder, har asynkrone (eller urløse) design markante fordele i strømforbrug og varmeafledning sammenlignet med lignende synkrone designs. Selvom det er noget ualmindeligt, er hele asynkrone CPU'er blevet bygget uden brug af et globalt ursignal. To bemærkelsesværdige eksempler på dette er den ARM- kompatible AMULET og den MIPS R3000-kompatible MiniMIPS.{{

I stedet for at fjerne clock-signalet fuldstændigt, tillader nogle CPU-design at visse dele af enheden er asynkrone, såsom at bruge asynkrone ALU'er i forbindelse med superskalar pipelining for at opnå nogle aritmetiske præstationsforbedringer. Selvom det ikke er helt klart, om totalt asynkrone designs kan præstere på et sammenligneligt eller bedre niveau end deres synkrone modstykker, er det tydeligt, at de i det mindste udmærker sig i enklere matematiske operationer. Dette, kombineret med deres fremragende strømforbrug og varmeafledningsegenskaber, gør dem meget velegnede til indlejrede computere .

Spændingsregulator modul

Mange moderne CPU'er har et matrice-integreret strømstyringsmodul, som regulerer on-demand spændingsforsyning til CPU-kredsløbet, så det kan holde balancen mellem ydeevne og strømforbrug.

Heltalsområde

Hver CPU repræsenterer numeriske værdier på en bestemt måde. For eksempel repræsenterede nogle tidlige digitale computere tal som velkendte decimale (grundlag 10) talsystemværdier , og andre har brugt mere usædvanlige repræsentationer såsom ternære (grundlag tre). Næsten alle moderne CPU'er repræsenterer tal i binær form, hvor hvert ciffer er repræsenteret af en fysisk størrelse med to værdier, såsom en "høj" eller "lav" spænding .

Et seks-bit ord, der indeholder den binære kodede repræsentation af decimalværdi 40. De fleste moderne CPU'er anvender ordstørrelser, der er en potens på to, for eksempel 8, 16, 32 eller 64 bit.

Relateret til numerisk repræsentation er størrelsen og præcisionen af ​​heltal, som en CPU kan repræsentere. I tilfælde af en binær CPU måles dette ved antallet af bit (signifikante cifre i et binært kodet heltal), som CPU'en kan behandle i én operation, som almindeligvis kaldes ordstørrelse , bitbredde , datastibredde , heltalspræcision eller heltalsstørrelse . En CPU's heltalsstørrelse bestemmer rækkevidden af ​​heltalsværdier, den direkte kan operere på. For eksempel kan en 8-bit CPU direkte manipulere heltal repræsenteret af otte bit, som har et interval på 256 (2 8 ) diskrete heltalsværdier.

Heltalsinterval kan også påvirke antallet af hukommelsesplaceringer, som CPU'en kan adressere direkte (en adresse er en heltalsværdi, der repræsenterer en specifik hukommelsesplacering). For eksempel, hvis en binær CPU bruger 32 bit til at repræsentere en hukommelsesadresse, kan den direkte adressere 2 32 hukommelsesplaceringer. For at omgå denne begrænsning og af forskellige andre årsager bruger nogle CPU'er mekanismer (såsom bankskifte ), der tillader, at yderligere hukommelse adresseres.

CPU'er med større ordstørrelser kræver flere kredsløb og er derfor fysisk større, koster mere og bruger mere strøm (og genererer derfor mere varme). Som et resultat er mindre 4- eller 8-bit mikrocontrollere almindeligvis brugt i moderne applikationer, selvom CPU'er med meget større ordstørrelser (såsom 16, 32, 64, endda 128-bit) er tilgængelige. Når der kræves højere ydeevne, kan fordelene ved en større ordstørrelse (større dataområder og adresserum) dog opveje ulemperne. En CPU kan have interne datastier kortere end ordstørrelsen for at reducere størrelse og omkostninger. For eksempel, selvom IBM System/360- instruktionssættet var et 32-bit instruktionssæt, havde System/360 Model 30 og Model 40 8-bit datastier i den aritmetiske logiske enhed, så en 32-bit tilføjelse krævede fire cyklusser, en for hver 8 bit af operanderne, og selvom Motorola 68000-seriens instruktionssæt var et 32-bit instruktionssæt, havde Motorola 68000 og Motorola 68010 16-bit datastier i den aritmetiske logiske enhed, således at en 32-bit tilføjelse krævede to cyklusser.

For at opnå nogle af fordelene ved både lavere og højere bitlængder har mange instruktionssæt forskellige bitbredder for heltal- og flydende kommadata, hvilket gør det muligt for CPU'er, der implementerer det instruktionssæt, at have forskellige bitbredder for forskellige dele af enheden. For eksempel var IBM System/360- instruktionssættet primært 32 bit, men understøttede 64-bit flydende kommaværdier for at lette større nøjagtighed og rækkevidde i flydende kommatal. System/360 Model 65 havde en 8-bit adder til binær aritmetik med decimaler og fikspunkt og en 60-bit adder til flydende aritmetik. Mange senere CPU-designs bruger lignende blandet bitbredde, især når processoren er beregnet til generel brug, hvor der kræves en rimelig balance mellem heltal og flydende komma.

Parallelisme

Model af en subscalar CPU, hvor det tager femten clock-cyklusser at fuldføre tre instruktioner

Beskrivelsen af ​​den grundlæggende betjening af en CPU, der blev tilbudt i det foregående afsnit, beskriver den enkleste form, som en CPU kan antage. Denne type CPU, normalt omtalt som subscalar , opererer på og udfører en instruktion på et eller to stykker data ad gangen, det vil sige mindre end én instruktion pr. clock-cyklus ( IPC < 1 ).

Denne proces giver anledning til en iboende ineffektivitet i subskalære CPU'er. Da kun én instruktion udføres ad gangen, skal hele CPU'en vente på, at instruktionen er fuldført, før den fortsætter til den næste instruktion. Som et resultat bliver den subskalære CPU "hængt på" på instruktioner, der tager mere end én clock-cyklus for at fuldføre udførelse. Selv tilføjelse af en anden udførelsesenhed (se nedenfor) forbedrer ikke ydeevnen meget; snarere end at én sti bliver hængt op, hænges nu to kanaler op og antallet af ubrugte transistorer øges. Dette design, hvor CPU'ens eksekveringsressourcer kun kan fungere på én instruktion ad gangen, kan muligvis kun nå skalær ydeevne (én instruktion pr. clock-cyklus, IPC = 1 ). Ydeevnen er dog næsten altid subskalær (mindre end én instruktion pr. clock-cyklus, IPC < 1 ).

Forsøg på at opnå skalar og bedre ydeevne har resulteret i en række designmetoder, der får CPU'en til at opføre sig mindre lineært og mere parallelt. Når der henvises til parallelisme i CPU'er, bruges to udtryk generelt til at klassificere disse designteknikker:

Hver metodologi adskiller sig både i måden, hvorpå de implementeres, såvel som den relative effektivitet, de har råd til at øge CPU'ens ydeevne for en applikation.

Parallelisme på instruktionsniveau

Grundlæggende fem-trins rørledning. I det bedste tilfælde kan denne pipeline opretholde en fuldførelseshastighed på én instruktion pr. clock-cyklus.

En af de enkleste metoder til øget parallelitet er at begynde de første trin af instruktionshentning og afkodning, før den tidligere instruktion afsluttes med at udføre. Dette er en teknik kendt som instruktionspipelining og bruges i næsten alle moderne generelle CPU'er. Pipelining gør det muligt at udføre flere instruktioner ad gangen ved at opdele eksekveringsvejen i diskrete stadier. Denne adskillelse kan sammenlignes med et samlebånd, hvor en instruktion gøres mere komplet på hvert trin, indtil den forlader udførelsesrørledningen og trækkes tilbage.

Pipelining introducerer dog muligheden for en situation, hvor resultatet af den tidligere operation er nødvendig for at fuldføre den næste operation; en tilstand, der ofte kaldes dataafhængighedskonflikt. Derfor skal pipelinede processorer kontrollere for denne slags forhold og forsinke en del af pipelinen, hvis det er nødvendigt. En pipelinet processor kan blive meget næsten skalær, kun hæmmet af pipeline-stands (en instruktion, der bruger mere end én clock-cyklus i et trin).

En simpel superskalar pipeline. Ved at hente og afsende to instruktioner ad gangen kan der maksimalt udføres to instruktioner pr. urcyklus.

Forbedringer i instruktionspipelining førte til yderligere fald i den inaktive tid for CPU-komponenter. Designs, der siges at være superskalære, inkluderer en lang instruktionspipeline og flere identiske udførelsesenheder , såsom load-store-enheder , aritmetiske-logiske enheder , floating-point-enheder og adressegenereringsenheder . I en superskalar pipeline læses instruktioner og sendes til en dispatcher, som beslutter, om instruktionerne kan udføres parallelt (samtidigt). Hvis det er tilfældet, sendes de til udførelsesenheder, hvilket resulterer i deres samtidige udførelse. Generelt er antallet af instruktioner, som en superskalar CPU vil fuldføre i en cyklus, afhængigt af antallet af instruktioner, den er i stand til at sende samtidigt til eksekveringsenheder.

Det meste af vanskeligheden ved designet af en superskalær CPU-arkitektur ligger i at skabe en effektiv dispatcher. Dispatcheren skal hurtigt kunne afgøre, om instruktioner kan udføres parallelt, samt afsende dem på en sådan måde, at så mange eksekveringsenheder beskæftiges som muligt. Dette kræver, at instruktionspipelinen fyldes så ofte som muligt og kræver betydelige mængder CPU-cache . Det gør også fare -avoiding teknikker som filial forudsigelse , spekulative udførelse , register omdøbning , out-of-order udførelse og transaktions hukommelse afgørende for at bevare høj ydelse. Ved at forsøge at forudsige, hvilken gren (eller sti) en betinget instruktion vil tage, kan CPU'en minimere antallet af gange, som hele pipelinen skal vente, indtil en betinget instruktion er fuldført. Spekulativ eksekvering giver ofte beskedne ydelsesforøgelser ved at udføre dele af kode, som muligvis ikke er nødvendige, efter at en betinget handling er fuldført. Eksekvering uden for orden ændrer noget i rækkefølgen, hvori instruktionerne udføres, for at reducere forsinkelser på grund af dataafhængigheder. Også i tilfælde af en enkelt instruktionsstrøm, flere datastrøm - et tilfælde, hvor mange data fra samme type skal behandles - kan moderne processorer deaktivere dele af pipelinen, så når en enkelt instruktion udføres mange gange, kan CPU'en springer hente- og afkodningsfaserne over og øger dermed ydeevnen betydeligt ved visse lejligheder, især i meget monotone programmotorer såsom software til videooprettelse og fotobehandling.

I det tilfælde, hvor kun en del af CPU'en er superskalær, lider den del, der ikke er, en præstationsstraf på grund af planlægningsstop. Intel P5 Pentium havde to superskalære ALU'er, som kunne acceptere én instruktion pr. clock-cyklus hver, men dens FPU kunne ikke. Således var P5 heltals superskalar, men ikke floating point superskalar. Intels efterfølger til P5-arkitekturen, P6 , tilføjede superskalære egenskaber til sine floating point-funktioner.

Enkel pipelining og superskalar design øger en CPU's ILP ved at tillade den at udføre instruktioner med hastigheder, der overstiger én instruktion pr. clock-cyklus. De fleste moderne CPU-designs er i det mindste noget superskalære, og næsten alle generelle CPU'er designet i det sidste årti er superskalære. I de senere år er noget af vægten ved design af høj-ILP-computere blevet flyttet ud af CPU'ens hardware og ind i dens softwaregrænseflade eller instruktionssætarkitektur (ISA). Strategien med det meget lange instruktionsord (VLIW) får noget ILP til at blive implicit direkte af softwaren, hvilket reducerer CPU'ens arbejde med at booste ILP og derved reducerer designkompleksiteten.

Parallelisme på opgaveniveau

En anden strategi for at opnå ydeevne er at udføre flere tråde eller processer parallelt. Dette forskningsområde er kendt som parallel computing . I Flynns taksonomi er denne strategi kendt som multiple instruction stream, multiple data stream (MIMD).

En teknologi, der blev brugt til dette formål, var multiprocessing (MP). Den oprindelige smag af denne teknologi er kendt som symmetrisk multiprocessing (SMP), hvor et lille antal CPU'er deler et sammenhængende billede af deres hukommelsessystem. I dette skema har hver CPU ekstra hardware for at opretholde en konstant opdateret visning af hukommelsen. Ved at undgå forældede hukommelsesvisninger kan CPU'erne samarbejde om det samme program, og programmer kan migrere fra én CPU til en anden. For at øge antallet af samarbejdende CPU'er ud over en håndfuld blev ordninger som ikke-ensartet hukommelsesadgang (NUMA) og biblioteksbaserede kohærensprotokoller introduceret i 1990'erne. SMP-systemer er begrænset til et lille antal CPU'er, mens NUMA-systemer er blevet bygget med tusindvis af processorer. Oprindeligt blev multiprocessing bygget ved hjælp af flere diskrete CPU'er og boards for at implementere sammenkoblingen mellem processorerne. Når processorerne og deres sammenkobling alle er implementeret på en enkelt chip, er teknologien kendt som chip-level multiprocessing (CMP) og den enkelte chip som en multi-core processor .

Det blev senere erkendt, at der eksisterede en finkornet parallelitet med et enkelt program. Et enkelt program kan have flere tråde (eller funktioner), der kan udføres separat eller parallelt. Nogle af de tidligste eksempler på denne teknologi implementerede input/output- behandling såsom direkte hukommelsesadgang som en separat tråd fra beregningstråden. En mere generel tilgang til denne teknologi blev introduceret i 1970'erne, da systemer blev designet til at køre flere beregningstråde parallelt. Denne teknologi er kendt som multi-threading (MT). Denne tilgang anses for at være mere omkostningseffektiv end multiprocessing, da kun et lille antal komponenter i en CPU replikeres for at understøtte MT i modsætning til hele CPU'en i tilfælde af MP. I MT er eksekveringsenhederne og hukommelsessystemet inklusive cachene delt mellem flere tråde. Ulempen ved MT er, at hardwareunderstøttelsen til multithreading er mere synlig for software end MP, og derfor skal supervisorsoftware som operativsystemer gennemgå større ændringer for at understøtte MT. En type MT, der blev implementeret, er kendt som temporal multithreading , hvor en tråd udføres, indtil den er stoppet og venter på, at data vender tilbage fra ekstern hukommelse. I dette skema ville CPU'en derefter hurtigt skifte til en anden tråd, der er klar til at køre, skiftet udføres ofte i én CPU-urcyklus, såsom UltraSPARC T1 . En anden type MT er simultan multithreading , hvor instruktioner fra flere tråde udføres parallelt inden for én CPU-clock-cyklus.

I adskillige årtier fra 1970'erne til begyndelsen af ​​2000'erne var fokus i design af højtydende CPU'er til generelle formål i høj grad på at opnå høj ILP gennem teknologier som pipelining, caches, superskalar eksekvering, ude af drift, osv. Denne tendens kulminerede i store , strømkrævende CPU'er som Intel Pentium 4 . I begyndelsen af ​​2000'erne blev CPU-designere forhindret i at opnå højere ydeevne fra ILP-teknikker på grund af den voksende forskel mellem CPU-driftsfrekvenser og hovedhukommelsesdriftsfrekvenser samt eskalerende CPU-effekttab på grund af mere esoteriske ILP-teknikker.

CPU-designere lånte derefter ideer fra kommercielle computermarkeder såsom transaktionsbehandling , hvor den samlede ydeevne af flere programmer, også kendt som throughput computing, var vigtigere end ydeevnen af ​​en enkelt tråd eller proces.

Denne vending af vægten er bevist af udbredelsen af ​​dual og mere core processordesign og især Intels nyere designs, der ligner dens mindre superskalære P6- arkitektur. Senere designs i flere processorfamilier udviser CMP, herunder x86-64 Opteron og Athlon 64 X2 , SPARC UltraSPARC T1 , IBM POWER4 og POWER5 , samt adskillige videospilkonsol- CPU'er som Xbox 360 's triple-core PowerPC-design, og PlayStation 3 's 7-core Cell mikroprocessor .

Dataparallelisme

Et mindre almindeligt, men stadig vigtigere paradigme for processorer (og faktisk computing generelt) omhandler dataparallelisme. Processorerne diskuteret tidligere omtales alle som en slags skalar enhed. Som navnet antyder, håndterer vektorprocessorer flere stykker data i forbindelse med en instruktion. Dette står i kontrast til skalære processorer, som håndterer et stykke data for hver instruktion. Ved at bruge Flynns taksonomi omtales disse to skemaer til håndtering af data generelt som henholdsvis enkelt instruktionsstrøm , multiple datastrøm ( SIMD ) og enkelt instruktionsstrøm , enkelt datastrøm ( SISD ). Den store nytte i at skabe processorer, der beskæftiger sig med vektorer af data, ligger i at optimere opgaver, der har tendens til at kræve den samme operation (for eksempel en sum eller et prikprodukt ), der skal udføres på et stort sæt data. Nogle klassiske eksempler på disse typer opgaver omfatter multimedieapplikationer (billeder, video og lyd) samt mange typer videnskabelige og tekniske opgaver. Mens en skalarprocessor skal fuldføre hele processen med at hente, afkode og udføre hver instruktion og værdi i et datasæt, kan en vektorprocessor udføre en enkelt operation på et forholdsvis stort datasæt med én instruktion. Dette er kun muligt, når applikationen har en tendens til at kræve mange trin, som anvender én operation på et stort sæt data.

De fleste tidlige vektorprocessorer, såsom Cray-1 , var næsten udelukkende forbundet med videnskabelig forskning og kryptografiapplikationer . Men da multimedier stort set er skiftet til digitale medier, er behovet for en form for SIMD i processorer til generelle formål blevet betydeligt. Kort efter inkludering af floating-point-enheder begyndte at blive almindelig i processorer til generelle formål, begyndte specifikationer for og implementeringer af SIMD-udførelsesenheder også at dukke op for processorer til generelle formål. Nogle af disse tidlige SIMD-specifikationer - som HP's Multimedia Acceleration Extensions (MAX) og Intels MMX - var kun heltal. Dette viste sig at være en væsentlig hindring for nogle softwareudviklere, da mange af de applikationer, der nyder godt af SIMD, primært omhandler flydende kommatal . Gradvist forfinede og ombyggede udviklere disse tidlige designs til nogle af de almindelige moderne SIMD-specifikationer, som normalt er forbundet med én instruktionssætarkitektur (ISA). Nogle bemærkelsesværdige moderne eksempler inkluderer Intels Streaming SIMD Extensions (SSE) og den PowerPC-relaterede AltiVec (også kendt som VMX).

Virtuelle CPU'er

Cloud computing kan involvere underopdeling af CPU-drift i virtuelle centralbehandlingsenheder ( vCPU'er ).

En vært er den virtuelle ækvivalent til en fysisk maskine, som et virtuelt system fungerer på. Når der er flere fysiske maskiner, der fungerer i tandem og administreres som en helhed, danner de grupperede computer- og hukommelsesressourcer en klynge . I nogle systemer er det muligt dynamisk at tilføje og fjerne fra en klynge. Ressourcer, der er tilgængelige på værts- og klyngeniveau, kan opdeles i ressourcepuljer med fin granularitet .

Ydeevne

En processors ydeevne eller hastighed afhænger blandt mange andre faktorer af klokfrekvensen (generelt angivet i multipla af hertz ) og instruktionerne pr. ur (IPC), som tilsammen er faktorerne for instruktionerne pr. sekund (IPS), som CPU kan udføre. Mange rapporterede IPS-værdier har repræsenteret "peak"-udførelseshastigheder på kunstige instruktionssekvenser med få forgreninger, hvorimod realistiske arbejdsbelastninger består af en blanding af instruktioner og applikationer, hvoraf nogle tager længere tid at udføre end andre. Udførelsen af hukommelse hierarki også i høj grad påvirker processor ydelse, et problem næppe betragtes i MIPS beregninger. På grund af disse problemer er forskellige standardiserede tests, ofte kaldet "benchmarks" til dette formål‍—‌såsom SPECint‍ —‌ blevet udviklet for at forsøge at måle den reelle effektive ydeevne i almindeligt anvendte applikationer.

Behandlingsydeevne af computere øges ved at bruge multi-core processorer , som i det væsentlige er at tilslutte to eller flere individuelle processorer (kaldet kerner i denne forstand) til et integreret kredsløb. Ideelt set ville en dual core processor være næsten dobbelt så kraftig som en single core processor. I praksis er præstationsgevinsten langt mindre, kun omkring 50 %, på grund af ufuldkomne softwarealgoritmer og implementering. At øge antallet af kerner i en processor (dvs. dual-core, quad-core osv.) øger den arbejdsbyrde, der kan håndteres. Det betyder, at processoren nu kan håndtere adskillige asynkrone hændelser, afbrydelser osv., som kan tage hårdt på CPU'en, når den bliver overbelastet. Disse kerner kan opfattes som forskellige etager i et forarbejdningsanlæg, hvor hver etage håndterer en anden opgave. Nogle gange vil disse kerner håndtere de samme opgaver som kerner ved siden af ​​dem, hvis en enkelt kerne ikke er nok til at håndtere informationen.

På grund af de specifikke muligheder for moderne CPU'er, såsom simultan multithreading og uncore , som involverer deling af faktiske CPU-ressourcer, mens der sigtes mod øget udnyttelse, blev overvågning af ydeevneniveauer og hardwarebrug gradvist en mere kompleks opgave. Som et svar implementerer nogle CPU'er yderligere hardwarelogik, der overvåger den faktiske brug af forskellige dele af en CPU og giver forskellige tællere tilgængelige for software; et eksempel er Intels Performance Counter Monitor- teknologi.

Se også

Noter

Referencer

eksterne links