CPU-cache

Gertrud Lund Januar 2, 2017 C 9 0
FONT SIZE:
fontsize_dec
fontsize_inc

En CPU cache er en cache bruges af centralenheden i en computer til at reducere den gennemsnitlige tid til adgang til data fra hovedhukommelsen. Cachen er en mindre, hurtigere hukommelse, der lagrer kopier af dataene fra hyppigt anvendte vigtigste hukommelsespladser. De fleste CPU'er har forskellige uafhængige caches, herunder instruktion og data caches, hvor dataene cachen er normalt organiseret som et hierarki af flere cache niveauer

Oversigt

Når processoren har brug for at læse fra eller skrive til en placering i hovedhukommelsen, det første kontrollerer, om en kopi af disse data er i cachen. Hvis det er tilfældet, processoren straks læser fra eller skriver til cachen, som er meget hurtigere end at læse fra eller skrive til hovedhukommelsen.

De fleste moderne desktop og server CPU'er har mindst tre uafhængige caches: en instruktion cache til at fremskynde eksekverbar instruktion hente, en data-cache for at fremskynde data hente og opbevare, og en oversættelse Lookaside buffer bruges til at fremskynde virtuel-til-fysisk adresse oversættelse for både eksekverbare instruktioner og data. Dataene cachen er normalt organiseret som et hierarki af flere cache niveauer.

Cache poster

Data overføres mellem hukommelse og cache i blokke af fast størrelse, kaldet cache linjer. Når en cache linje kopieres fra hukommelsen i cachen, er en cache post oprettet. Cache post vil omfatte de kopierede data samt den ønskede hukommelsesplads.

Når processoren har brug for at læse eller skrive en placering i hovedhukommelsen, først kontrol for en tilsvarende post i cachen. De cache kontrollerer for indholdet af den ønskede hukommelsesplads i enhver cache linjer, der kan indeholde den pågældende adresse. Hvis processoren finder, at hukommelsen placering er i cachen, der er opstået en cache hit. Men hvis processoren ikke finder hukommelsesplads i cachen, der er opstået en cache miss. I tilfælde af:

  • en cache hit, processoren straks læser eller skriver data i cachen linje
  • en cache miss, cache tildeler en ny post og kopierer i data fra hovedhukommelsen, så anmodningen er opfyldt fra indholdet af cachen.

Cache ydeevne

Andelen af ​​adgange, der resulterer i en cache hit er kendt som hit-rate, og kan være et mål for effektiviteten af ​​cache for et givet program eller algoritme.

Læs misser forsinke henrettelse, fordi de kræver data, der skal overføres fra hukommelsen, som er meget langsommere end at læse fra cachen. Skriv misser kan forekomme uden en sådan straf, da processoren kan fortsætte henrettelse mens data kopieres til hovedhukommelsen i baggrunden.

Udskiftning politikker

For at gøre plads til den nye post på en cache miss, kan cachen nødt til at smide en af ​​de eksisterende poster. Heuristisk at den bruger til at vælge posten at smide kaldes udskiftning politik. Det grundlæggende problem med nogen udskiftning politik er, at det skal forudsige, hvilke eksisterende cache post er mindst tilbøjelige til at blive brugt i fremtiden. Forudsige fremtiden er svært, så der er ingen perfekt måde at vælge blandt de mange forskellige udskiftning politikker til rådighed.

En populær udskiftning politik, mindst nyligt brugt, erstatter mindst nyligt adgang post.

Mærkning noget hukommelse spænder som ikke-cache kan forbedre ydeevnen ved at undgå caching af hukommelse regioner, der sjældent re-adgang. Derved undgår overhead af lastning noget i cachen uden at have nogen genbrug.

  • Cache poster kan også deaktiveres eller låst afhængig af konteksten.

Skrive politikker

Hvis data skrives til cachen, på et tidspunkt må det også skrives til hovedhukommelsen. Timingen af ​​denne skrive er kendt som write politik.

  • I en skrive-through cache, hver skrive til cachen forårsager en skrivning til hovedhukommelsen.
  • Alternativt i en skrive-back eller copy-back cache, skriver ikke umiddelbart afspejles i hovedhukommelsen. I stedet cache spor, som beliggenhed er blevet skrevet over. Dataene i disse placeringer er skrevet tilbage til hovedhukommelsen kun når at data smidt ud fra cachen. Af denne grund kan en læse miss i en skrive-back cache undertiden kræve to hukommelse adgange til service: en til først at skrive det beskidte placering til hukommelsen og derefter en anden til at læse den nye placering fra hukommelsen.

Der er mellemliggende politikker. Cachen kan skrive-igennem, men de skriver kan holdes i en butik data kø midlertidigt, som regel så flere butikker kan behandles sammen.

Dataene i hovedhukommelsen bliver cached kan ændres af andre enheder, i hvilket tilfælde kopien i cachen kan blive out-of-date eller uaktuelle. Alternativt, når en CPU i et multiprocessorsystem opdaterer data i cachen, kopier af data i caches forbundet med andre CPU'er bliver uaktuelle. Kommunikationsprotokoller mellem cache ledere, der holder de data, konsekvent er kendt som cache sammenhæng protokoller.

CPU boder

Den tid, det tager at hente en cache linje fra hukommelsen spørgsmål, fordi CPU'en vil løbe tør for ting at gøre, mens man venter på cachen linje. Når en CPU når denne tilstand, kaldes det en stall.

Som CPU'er bliver hurtigere, boder skyldes cache savner fortrænge mere potentiale beregning; moderne CPU'er kan udføre hundredvis af instruktionerne i den tid det tager at hente en enkelt cache linje fra hovedhukommelsen. Forskellige teknikker er blevet anvendt til at holde CPU'en optaget i dette tidsrum.

  • Out-of-order CPU'er forsøger at udføre uafhængige instruktioner efter instruktionen, der venter på de cache miss data.
  • En anden teknologi, der bruges af mange processorer, er samtidig multithreading, eller i Intels terminologi hyper-threading, som giver en alternativ tråd til at bruge CPU kerne, mens en første gevind venter på data til at komme fra hovedhukommelsen.

Cache post struktur

Cache række firmaer normalt have følgende struktur:

Dataene blok indeholder de faktiske data hentes fra hovedhukommelsen. Koden indeholder adressen på de faktiske data hentes fra hovedhukommelsen. Flagbitterne diskuteres nedenfor.

Den "størrelse" af cachen er den mængde vigtigste hukommelse data, den kan holde. Denne størrelse kan beregnes som antallet af bytes, der er lagret i hver datablok gange antallet af blokke, der er lagret i cachen.

En effektiv lageradresse er opdelt i tag, indekset og blokken offset.

Indekset beskriver, hvilke cache træk, at dataene er blevet sat i. Indekset længde er bit for r cache rækker. Blokken offset angiver den ønskede data i de lagrede data blok i cachen række. Typisk den effektive adresse er i byte, så blokken offset længde er bits, hvor b er antallet af bytes per datablok. Koden indeholder de mest signifikante bit af adressen, som er kontrolleret i forhold den aktuelle række for at se, om det er den, vi har brug for eller en anden, irrelevante hukommelsesplacering, tilfældigvis har samme indeks bits som den, vi ønsker. Mærkaten længde i bits.

Nogle forfattere henviser til blokken forskydning som simpelthen "offset" eller "forskydning".

Eksempel

Den oprindelige Pentium 4-processor havde en fire-vejs sæt associative L1 data-cache på 8 KB i størrelse, med 64-byte cache blokke. Derfor er der 8 KB / 64 = 128 cache blokke. Antallet af sæt er lig med antallet af cache blokke divideret med antallet af måder associativitet, hvad der fører til 128/4 = 32 sæt, og dermed 2 = 32 forskellige indekser. Der er 2 = 64 mulige forskydninger. Da CPU adresse er 32 bit brede, indebærer dette 21 + 5 + 6 = 32, og dermed 21 bits til tag område.

Den oprindelige Pentium 4 processor havde også en otte-vejs sæt associative L2 integreret cache 256 KB i størrelse, med 128-byte cache blokke. Dette indebærer 17 + 8 + 7 = 32, og dermed 17 bits til tag område.

Flagbit

En instruktion cache kræver kun ét flag bit pr cache rækken post: et gyldigt bit. Den gyldige bit angiver, hvorvidt en cache blok er fyldt med gyldige data.

På opstart, hardwaren sætter alle gyldige bits i alle de caches til "ugyldig". Nogle systemer også indstille en gyldig bit til "ugyldig" på andre tidspunkter, som når multi-mester bus snooping hardware i cachen på en processor hører en adresse udsendelse fra en anden processor, og indser, at visse data blokke i den lokale cache er nu forældede og bør mærkes ugyldig.

En data cache kræver typisk to flag bit pr cache linje - et gyldigt bit og en beskidt lidt. Under en beskidt bitsæt indikerer, at den tilhørende cache linje er blevet ændret siden den blev læst fra hovedhukommelsen, hvilket betyder, at processoren har skrevet data samme linje, og den nye værdi er ikke formeret hele vejen til hovedlageret.

Associativitet

Udskiftningen politik afgør hvor i cachen en kopi af en bestemt tilgang af hovedhukommelsen vil gå. Hvis udskiftning politik er frit vælge indgang i cachen til at holde kopien, er cachen kaldes fuldt associativ. I den anden ende, hvis hver enkelt post i hovedhukommelsen kan gå på bare ét sted i cachen, cachen er direkte kortlagt. Mange cacher gennemføre et kompromis, hvor hver post i hovedhukommelsen kan gå til en hvilken som helst af N steder i cachen, og er beskrevet som N-vejs sæt associativ. For eksempel niveauet-1 data cache i en AMD Athlon er tovejs sæt associativ, hvilket betyder, at et bestemt sted i hovedhukommelsen kan caches på to steder i plan-1 data cache.

Associativitet er et trade-off. Hvis der er ti steder, som erstatningen politik kunne have kortlagt en hukommelsesplacering, så at kontrollere, om denne placering er i cachen, skal ti cache poster søges. Kontrol flere steder tager mere magt, chip-området, og potentielt tid. På den anden side, caches med mere associativitet lider færre uheld, således at CPU affald mindre tid på at læse fra den langsomme hovedhukommelsen. Den tommelfingerregel er, at en fordobling af associativitet, fra direkte kortlagt til tovejs, eller fra to-vejs til fire-vejs, har omtrent samme effekt på hit sats som en fordobling af cache størrelse. Associativitet stiger ud over fire-vejs har langt mindre effekt på hit-rate, og er generelt gjort for andre grunde.

For af værre, men enkel at bedre, men anlægget:

  • direkte kortlagt cache - det bedste hit tidspunkter, og så det bedste tradeoff for "store" caches
  • to-vejs sæt associative cache
  • to-vejs skæv associativ cache - i 1993, det var den bedste tradeoff for cacher hvis størrelser var i 4-8 KB interval
  • fire-vejs sæt associative cache
  • fuldt associative cache - de bedste miss priser, og så den bedste tradeoff når miss straffen er meget høj.

Direkte kortlagt cache

I denne cache organisation, kan hver placering i hovedhukommelsen kun gå i én post i cachen. Derfor kan en direkte kortlagt cache også kaldes en "envejs sæt associativ" cache. Det har ikke en erstatning politik som sådan, da der ikke er noget valg, hvoraf cache indrejse indhold at smide. Det betyder, at hvis to placeringer kort til den samme post, kan de hele tiden slå hinanden ud. Selv enklere en direkte kortlagt cache, skal være meget større end en associativ on for at give sammenlignelige resultater, og det er mere uforudsigelig. Lad X være bloknummer i cache, Y være bloknummer hukommelse, og n er antallet af blokke i cache, derefter kortlægning udføres ved hjælp af ligningen x = y mod n.

To-vejs sæt associative cache

Hvis hver placering i hovedhukommelsen kan caches i en af ​​to steder i cachen, en logisk spørgsmål er: hvilken af ​​de to? Den enkleste og mest almindeligt anvendte ordning, der er vist i højre diagrammet ovenfor, er at bruge de mindst betydende bits af hukommelsesplads indeks som indekset for cache-hukommelsen, og at have to poster for hvert indeks. En fordel ved denne ordning er, at de mærker, der er gemt i cachen ikke behøver at omfatte den del af hovedhukommelsen adresse som kan udledes af cache-hukommelsen indeks. Da cache tags har færre bit, kræver de færre transistorer, tager mindre plads på processoren kredsløbskort eller på mikroprocessorchippen, og kan læses og sammenlignes hurtigere. Også LRU er særlig enkel, da kun en bit skal lagres for hvert par.

Spekulative udførelse

En af fordelene ved en direkte kortlagt cache er, at det giver mulighed for enkel og hurtig spekulation. Når adressen er beregnet, er den ene cache indeks, som kan have en kopi af denne placering i hukommelsen kendt. At cache post kan læses, og processoren kan fortsætte med at arbejde med disse data, før den er færdig kontrollere, at mærket faktisk matcher den ønskede adresse.

Kan anvendes Tanken om at have processoren anvende de cachede data, før de tag match fuldender at associative caches så godt. En delmængde af tag, kaldet en antydning, kan anvendes til at hente en af ​​de mulige cacheposter kortlægning til det ønskede adresse. Den valgte ved antydning posten kan derefter bruges parallelt med at kontrollere den fulde tag. Tippet teknik fungerer bedst, når de anvendes i forbindelse med Address Translation, som forklaret nedenfor.

To-vejs skæv associativ cache

Andre ordninger er blevet foreslået, såsom skæv cache, hvor indekset for vejen 0 er direkte, som ovenfor, men indekset for vejen 1 er udformet med en hash-funktion. En god hashfunktion har den egenskab, adresser, som strider mod den direkte kortlægning tendens til ikke at konflikt, når kortlagt med hash-funktionen, og derfor er det mindre sandsynligt, at et program vil lide af en uventet stort antal konflikter savner skyldes en patologisk adgang mønster. Ulempen er ekstra ventetid fra beregning af hash-funktionen. Derudover, når det drejer sig tid til at indlæse en ny linje, og smide en gammel linje, kan det være vanskeligt at afgøre, hvilke eksisterende linje mindst for nylig blev brugt, fordi den nye linje konflikter med data på forskellige indekser på hver vej; LRU sporing for ikke-skæve caches er normalt gøres på en per-sæt basis. Ikke desto mindre skæv-associativ caches har store fordele i forhold til konventionelle set-associative dem.

Pseudo-associative cache

En sand set-associative cache tester alle mulige måder samtidigt, ved hjælp af noget som et indhold adresserbare hukommelse. En pseudo-associative cache tester hver mulig måde en ad gangen. En hash-opkog cache og en søjle-associative cache er eksempler på en pseudo-associative cache.

I almindelige tilfælde for at finde et hit i første testede måde en pseudo-associative cache er så hurtig som en direkte kortlagt cache, men det har en meget lavere konflikt miss end en direkte kortlagt cache, tættere på miss raten af et fuldt associative cache.

Cache miss

En cache miss refererer til et mislykket forsøg på at læse eller skrive et stykke data i cachen, hvilket resulterer i en hovedhukommelsen adgang med meget længere ventetid. Der er tre slags cache miss: instruktion læse miss, data læse miss, og data skrive miss.

En cache læse miss fra en instruktion cache generelt forårsager mest forsinkelse, fordi processoren, eller i det mindste gevind udførelse, må vente, indtil instruktionen hentes fra hovedhukommelsen.

En cache læst miss fra en data-cache normalt forårsager mindre forsinkelse, fordi instruktionerne ikke afhængig af cache læse kan udstedes og fortsætte fuldbyrdelsen, indtil dataene returneres fra hovedhukommelsen, og de afhængige instruktioner kan genoptage udførelse.

En cache skrive miss til en data-cache generelt forårsager mindst forsinkelse, fordi de skriver kan i kø, og der er få begrænsninger i udførelsen af ​​de efterfølgende instruktioner. Processoren kan fortsætte, indtil køen er fuld.

For at sænke cache miss raten, har megen analyse blevet udført på cache adfærd i et forsøg på at finde den bedste kombination af størrelse, associativitet, blokstørrelse, og så videre. Sekvenser af hukommelsesreferencer udføres af benchmark programmer gemmes som adresse spor. Efterfølgende analyser simulere mange forskellige mulige cache designs på disse lange adresse spor. At gøre fornemmelse af, hvordan de mange variabler påvirker depottræfværdien kan være ganske forvirrende. Et væsentligt bidrag til denne analyse blev foretaget af Mark Hill, der adskilte misser i tre kategorier:

  • Obligatoriske misses er de misser forårsaget af den første henvisning til en placering i hukommelsen. Cache størrelse og associativitet gør ingen forskel for antallet af obligatoriske ulykker. Prefetching kan hjælpe her, som kan større cache blok størrelser. Obligatoriske misser er undertiden benævnt kolde ulykker.
  • Kapacitet misses er de misser, der opstår, uanset associativitet eller blokstørrelse, alene på grund af den begrænsede størrelse af cachen. Kurven af ​​kapaciteten miss sats versus cache størrelse giver en vis grad af den tidsmæssige lokalitet af en særlig henvisning stream. Bemærk, at der ikke er nogen nyttig begrebet en cache er "fuld" eller "tom" eller "nær kapacitet": CPU caches næsten altid har næsten hver linje fyldt med en kopi af nogle linie i hovedhukommelsen, og næsten hver tildeling af en ny linje kræver udsættelse af en gammel linie.
  • Konflikt misses er de misser, som kunne have været undgået, havde cachen ikke smidt en post tidligere. Konflikt misser kan yderligere opdeles i kortlægning misser, som er uundgåelige givet en bestemt mængde associativitet, og udskiftning misses, som på grund af den særlige offer valget af udskiftning politik.

Grafen til højre opsummerer cache resultater ses på Integer del af SPEC CPU2000 benchmarks, som indsamles af Hill og Cantin. Disse benchmarks er beregnet til at repræsentere den form for arbejdsbyrden, som en ingeniør arbejdsstation computer kan se på en given dag. Læseren skal huske på, at finde benchmarks, som er endnu fordel repræsentative for mange programmer har været meget vanskeligt, og der vil altid være vigtige programmer med meget forskellig adfærd, end hvad der er vist her.

Vi kan se de forskellige virkninger af de tre K'er i denne graf.

Yderst til højre, med cachestørrelse mærket "Inf", har vi de obligatoriske misser. Hvis vi ønsker at forbedre en maskines ydeevne på SpecInt2000, øge cache størrelse ud over 1 MB er hovedsagelig forgæves. Det er den indsigt givet af de obligatoriske misser.

Det fuldt associative cache miss sats her er næsten repræsentative for kapaciteten miss sats. Forskellen er, at de præsenterede data er fra simuleringer under antagelse af en LRU udskiftning politik. Viser kapacitet miss sats ville kræve en perfekt erstatning politik, dvs. et orakel, der ser ind i fremtiden for at finde en cache post som faktisk ikke vil blive ramt.

Bemærk, at vores indbyrdes tilnærmelse af kapaciteten miss sats falder stejlt mellem 32 KB og 64 KB. Dette indikerer, at benchmark har en arbejdsgruppe sæt på omkring 64 KB. En CPU cache designer undersøge dette benchmark vil have et stærkt incitament til at indstille cache størrelse til 64 KB i stedet for 32 KB. Bemærk, at der på dette benchmark, kan ingen mængde af associativitet lave en 32 KB cache udfører, samt en 64 KB 4-vejs, eller endda en direkte kortlagt 128 KB cache.

Endelig skal det bemærkes, at mellem 64 KB og 1 MB der er en stor forskel mellem direkte-kortlagt og fuldt associative caches. Denne forskel er konflikten miss sats. Den indsigt fra at se på konflikt miss satser er, at sekundære caches gavne en hel del fra high associativitet.

Denne fordel var kendt i slutningen af ​​1980'erne og begyndelsen af ​​1990'erne, hvor CPU designere ikke kunne passe store caches on-chip, og kunne ikke få tilstrækkelig båndbredde til enten cache data hukommelse eller cache-tag hukommelse til at gennemføre høj associativitet i off-chip caches . Desperate hacks blev forsøgt: MIPS R8000 brugte dyre off-chip dedikerede tag SRAM, som var indlejret tag komparatorer og store drivere på match linjer, for at gennemføre en 4 MB fire-vejs associative cache. MIPS R10000 brugte almindelige SRAM chips til tags. Tag adgang for begge veje tog to cykler. For at reducere ventetid, ville R10000 gætte, hvilken måde cachen ville ramme om hver adgang.

Address Translation

De fleste almindelige CPU'er purpose gennemføre en form for virtuel hukommelse. For at opsummere, enten hvert program, der kører på maskinen ser sin egen forenklet adresserum, som indeholder kode og data for kun dette program, eller alle programmer kører i et fælles virtuelt adresserum. Et program bruger den virtuelle adresse rum, hvor det kører uden hensyn til, hvor bestemte steder i denne adresse plads eksisterer i den fysiske hukommelse.

Virtuel hukommelse kræver processoren til at oversætte virtuelle adresser genereret af programmet i de fysiske adresser i hovedhukommelsen. Den del af processor, der gør denne oversættelse er kendt som lagers styreenhed. Den hurtige vej gennem MMU kan udføre disse oversættelser er gemt i oversættelsen Lookaside buffer, som er en cache af kortlægninger fra operativsystemets side bord, segment bord eller begge dele.

Med henblik på den foreliggende diskussion, er der tre vigtige elementer i Address Translation:

  • Latency: Den fysiske adresse er tilgængelig fra MMU nogen tid, måske et par cyklusser, efter den virtuelle adresse er tilgængelig fra adressen generator.
  • Aliasing: Flere virtuelle adresser kan kortlægge til en enkelt fysisk adresse. De fleste processorer garantere, at alle opdateringer til det enkelt fysisk adresse vil ske i programmet rækkefølge. At levere på denne garanti, skal processoren sikre, at kun én kopi af en fysisk adresse bosat i cachen på ethvert givet tidspunkt.
  • Granularitet: Den virtuelle adresserum er opdelt i sider. For eksempel kan en 4 GB virtuelt adresserum skæres op i 1048576 sider af 4 KB størrelse, som hver især kan være uafhængigt kortlagt. Der kan være flere sidestørrelser understøttes; se virtuel hukommelse til uddybning.

En historisk note: nogle tidlige virtuelle hukommelse systemer var meget langsom, fordi de krævede en adgang til siden tabellen før hver programmeret adgang til hovedlageret. Med ingen caches, dette effektivt skære maskinens hastighed i halve. Den første hardware cache anvendes i et edb-system ikke var faktisk en data eller instruktion cache, men snarere en TLB.

Caches kan inddeles i 4 typer, baseret på, om indeks eller tag svarer til fysiske eller virtuelle adresser:

  • Fysisk indekseret, fysisk mærkede caches bruge den fysiske adresse for både indekset og tag. Mens dette er simpel og undgår problemer med aliasing, er det også langsom, da den fysiske adresse skal slås op, før denne adresse kan slås op i cachen.
  • Stort set indekseret, næsten mærkede caches bruge den virtuelle adresse for både indekset og tag. Denne caching ordning kan resultere i meget hurtigere opslag, eftersom MMU ikke behøver at blive hørt først at bestemme den fysiske adresse for en given virtuel adresse. Men VIVT lider, fra aliasing problemer, hvor flere forskellige virtuelle adresser kan henvise til det samme fysiske adresse. Resultatet er, at sådanne adresser vil blive cached separat trods henvise til den samme hukommelse, der forårsager sammenhængningsmønstre problemer. Et andet problem er enslydende betegnelser, hvor det samme virtuel adresse Maps til flere forskellige fysiske adresser. Det er ikke muligt at skelne disse kortlægninger ved kun at se på den virtuelle indeks, selvom mulige løsninger omfatter: rødmen cachen efter en kontekst-switch, tvinger adresse mellemrum til at være ikke-overlappende, tagging den virtuelle adresse med valgt adresse plads id, eller ved hjælp af fysiske tags. Desuden er der et problem, at virtuel til fysisk afbildninger kan ændre sig, hvilket ville kræve skylning cache linjer, som vas ikke længere ville være gyldig.
  • Stort set indekseret, fysisk mærkede caches bruge den virtuelle adresse indekset og den fysiske adresse i tag. Fordelen i forhold til PIPT er lavere latency, som cache linje kan slås op parallelt med TLB oversættelse, men tag kan ikke sammenlignes før den fysiske adresse er tilgængelig. Den fordel i forhold VIVT er, at da tag har den fysiske adresse, kan cachen registrere enslydende betegnelser. VIPT kræver flere tag bits, da indekset bits ikke længere udgør den samme adresse.
  • Fysisk indekseret, næsten mærkede caches kun er teoretisk, da de dybest set ville være nytteløst. En cache med denne struktur ville være lige så langsom som PIPT, der lider af aliasing problemer på samme tid som VIVT.

Hastigheden af ​​denne gentagelse er afgørende for CPU-ydeevne, og så de fleste moderne niveau-1 caches er næsten indekseret, som i det mindste gør det muligt for MMU s TLB opslag for at fortsætte sideløbende med at hente data fra cachen RAM.

Men virtuelle indeksering er ikke det bedste valg for alle cache niveauer. Udgifterne til at håndtere virtuelle aliaser vokser med cache størrelse, og som et resultat de fleste niveau-2 og større caches fysisk indekseres.

Caches har historisk brugt både virtuelle og fysiske adresser til cache-tags, selvom virtuelle tagging er nu ualmindeligt. Hvis TLB opslag kan slutte før cache RAM opslag, så den fysiske adresse er tilgængelig i tide til tag sammenligne, og der er ikke behov for virtuelle tagging. Store caches, så tendens til at være fysisk mærket, og kun små, meget lav latency caches er næsten tagget. I de seneste generelle formål CPU'er, har virtuel tagging blevet afløst af vhints, som beskrevet nedenfor.

Enslydende og synonymer problemer

Cachen, der bygger på den virtuelle indeksering og tagging bliver inkonsekvent efter samme virtuel adresse er kortlagt i forskellige fysiske adresser. Dette kan løses ved hjælp af fysisk adresse for tagging eller ved at lagre adresseområde id i cachen linje. Den sidste af disse to tilgange er dog ikke hjælpe mod synonymet problem, hvor flere cache linjer ender lagring af data for den samme fysiske adresse. Skrivning til en sådan placering kan opdatere kun ét sted i cachen, efterlader andre med inkonsistente data. Dette problem kan løses ved hjælp af ikke-overlappende hukommelse layouts til forskellige adresser mellemrum eller på anden måde cachen skal skylles når kortlægning ændringer.

Virtuelle tags og vhints

Den store fordel ved virtuelle tags er, at for associative caches, de tillader tag match føres før den virtuelle til fysisk oversættelsen er udført. Men

  • sammenhæng sonder og udsættelser præsentere en fysisk adresse for handling. Hardwaren skal have nogle midler til at konvertere de fysiske adresser i en cache-indeks, normalt ved at lagre fysiske mærker samt virtuelle tags. Til sammenligning har en fysisk mærket cache ikke behøver at holde virtuelle tags, som er enklere.
  • Når en virtuel til fysisk kortlægning slettes fra TLB, vil cache poster med disse virtuelle adresser skal skylles eller anden måde. Alternativt, hvis cache indgange er tilladt på siderne ikke kortlagt af TLB, så disse poster skal skylles, når adgangsrettigheder på disse sider ændres i siden tabellen.

Det er også muligt for operativsystemet til at sikre, at ingen virtuelle aliaser samtidigt bosat i cachen. Operativsystemet gør denne garanti ved at håndhæve side farvelægning, som er beskrevet nedenfor. Nogle tidlige RISC-processorer tog denne tilgang. Det har ikke været brugt for nylig, da den hardware omkostninger til detektering og evicting virtuelle aliasser er faldet, og softwaren kompleksitet og ydeevne bøde på perfekt side farvelægning er steget.

Det kan være nyttigt at skelne de to funktioner af tags i en associativ cache: de anvendes til at bestemme, hvilken vej for indførelsen indstillet til at vælge, og de anvendes til at bestemme, om depottræfværdien eller ubesvarede. Den anden funktion skal altid være korrekt, men det er tilladt for den første funktion til at gætte, og få det forkerte svar lejlighedsvis.

Nogle processorer har caches med både virtuelle og fysiske tags. De virtuelle tags bruges til vej udvælgelse, og de fysiske tags bruges til at bestemme hit eller miss. Denne form for cache nyder latenstid fordel af en næsten mærket cache, og den enkle software interface af en fysisk mærket cache. Det bærerer den ekstra omkostning for duplikerede tags, dog. Også under miss behandling, de alternative måder at cache linje indekseret skal undersøgt for virtuelle aliasser og eventuelle kampe smidt.

Den ekstra areal kan afbødes ved at holde virtuelle hints med hver cache post i stedet for virtuelle tags. Disse antydninger er en delmængde eller hash af den virtuelle tag, og bruges til at vælge vejen for cachen, hvorfra man kan hente data og en fysisk mærke. Ligesom en næsten mærket cache, kan der være et virtuelt tip match, men fysisk tag misforhold, i hvilket tilfælde cachen post med den matchende hint skal blive sat på gaden, så cachen adgang efter cachen fylde på denne adresse, vil have bare en antydning kamp. Da virtuelle hints har færre bits end virtuelle tags adskiller dem fra hinanden, en næsten antydede cache lider flere konfliktområder misses end en næsten mærket cache.

Måske den ultimative reduktion af virtuelle tip kan findes i Pentium 4. I disse processorer den virtuelle tip er effektivt 2 bits, og cache er 4-vejs sæt associative. Effektivt, hardwaren opretholder en simpel permutation fra virtuel adresse til cache-indeks, således at intet indhold-adresserbare hukommelse er nødvendigt at vælge den rigtige af de fire måder hentede.

Side farvelægning

Store fysisk indekserede caches løbe ind i et problem: operativsystemet snarere end applikationskontroller hvilke sider kolliderer med hinanden i cachen. Forskelle i side tildeling fra ét program køre til næste føre til forskelle i cache kollision mønstre, hvilket kan føre til meget store forskelle i programmet ydeevne. Disse forskelle kan gøre det meget vanskeligt at få en ensartet og reproducerbar timing for et benchmark løb.

For at forstå problemet, overveje en CPU med en 1 MB fysisk indekseret direkte kortlagt niveau-2 cache og 4 KB virtuel hukommelse sider. Sekventielle fysiske sider kort til sekventielle steder i cachen før efter 256 sider mønsteret ombrydes omkring. Vi kan mærke hver fysisk side med en farve på 0-255 for at betegne hvor i cachen det kan gå. Steder i fysiske sider med forskellige farver, kan ikke være i modstrid i cachen.

Programmører forsøger at gøre maksimal brug af cachen kan arrangere deres programmers adgang mønstre, så kun 1 MB data behøver at blive cachet på et givent tidspunkt, og dermed undgå kapacitet savner. Men de skal også sikre, at adgang mønstre ikke har konflikt misses. En måde at tænke på dette problem er at opdele de virtuelle sider Programmet bruger og tildele dem virtuelle farver på samme måde som fysiske farver blev tildelt fysiske sider før. Programmører kan derefter arrangere adgang mønstre i deres kode, så ikke to sider med samme virtuelle farve er i brug på samme tid. Der er et bredt litteratur om sådanne optimeringer, hovedsagelig kommer fra High Performance Computing samfund.

Den hage er, at mens alle siderne i brug på et givet tidspunkt kan have forskellige virtuelle farver, kan nogle har de samme fysiske farver. Faktisk, hvis operativsystemet tildeler fysiske sider til virtuelle sider tilfældigt og ensartet, er det yderst sandsynligt, at nogle sider vil have den samme fysiske farve, og derefter steder fra disse sider vil kollidere i cachen.

Løsningen er at få operativsystemet forsøg på at tildele forskellige fysiske farve sider til forskellige virtuelle farver, en teknik kaldet side farvelægning. Selv om den egentlige kortlægning fra virtuel til fysisk farve er irrelevant for systemets ydeevne, er vanskelige at holde styr på og har lidt gavn ulige tilknytninger, så de fleste tilgange til side farvelægning blot forsøge at holde fysiske og virtuelle side farver de samme.

Hvis operativsystemet kan garantere, at hver fysisk side kort til kun en virtuel farve, så er der ingen virtuelle aliaser, og processoren kan bruge næsten indekserede caches uden behov for ekstra virtuelle alias sonder under miss håndtering. Alternativt kan OS skylle en side fra cachen, når den skifter fra en virtuel farve til en anden. Som nævnt ovenfor blev denne metode anvendt til nogle tidlige SPARC og RS / 6000 designs.

 Cache hierarki i en moderne processor

Moderne processorer har flere interagerende cacher på chippen.

Driften af ​​en bestemt cache kan være fuldstændig specificeret af:

  • cache størrelse
  • cache blokstørrelse
  • antallet af blokke i et sæt
  • cachen sæt udskiftning politik
  • cache skrive politik

Mens alle de cache blokke i en bestemt cache er af samme størrelse og har samme associativitet, typisk "lavere niveau" caches har en mindre størrelse, har mindre blokke, og har færre blokke i et sæt, mens "højere niveau" caches har større størrelse, større blokke, og flere blokke i et sæt.

Specialiserede caches

Pipeline CPU'er adgang hukommelse fra flere punkter i støbeskeen: instruktion hente, virtuel-til-fysisk adresse oversættelse, og data hente. Den naturlige design er at bruge forskellige fysiske cacher for hvert af disse punkter, så ingen fysisk ressource skal planlægges til at servicere to punkter i støbeskeen. Således rørledningen naturligt ender med mindst tre separate caches, hver specialiseret til sin særlige rolle.

Victim cache

En cache offer er en cache bruges til at holde blokke smidt ud af en CPU-cache på erstatning. Cache offer ligger mellem de vigtigste cache og dens refill sti, og kun holder blokke, der blev fordrevet fra de vigtigste cache. Cache offer er som regel fuldt associativ, og har til formål at reducere antallet af konflikt misser. Mange almindeligt anvendte programmer ikke kræver en associativ kortlægning for alle adgange. I virkeligheden kun en lille brøkdel af hukommelsesadgange af programmet kræver høj associativitet. Cache offer udnytter denne egenskab ved at levere høj associativitet til kun disse adgange. Det blev indført af Norman Jouppi fra december i 1990.

Intels Crystal Well variant af sine Haswell processorer, der er udstyret med Intels Iris Pro GT3e indlejret grafik og 128 MB EDRAM, introducerede en on-pakke Niveau 4 cache, der fungerer som et offer cache til forarbejdningsvirksomhederne niveau 3-cache.

Trace cache

Et af de mere ekstreme eksempler på cache specialisering er spor cache findes i Intel Pentium 4 mikroprocessorer. Et spor cache er en mekanisme til at øge undervisningen hente båndbredde og faldende strømforbrug ved at gemme spor af instruktioner, der allerede har været hentet og afkodes.

Den tidligste bredt anerkendt akademisk offentliggørelse af spor cache var af Eric Rotenberg, Steve Bennett, og Jim Smith i deres papir "Trace Cache: en lav Latency Tilgang til høj båndbredde Instruktion Henter" 1996. En tidligere offentliggørelse er US patent 5381533, Alex Peleg og Uri Weiser Intel Corp., "Dynamisk flow instruktion cache-hukommelse organiseret omkring spor segmenter uafhængigt af virtuel adresse linje", en fortsættelse af en ansøgning indgivet i 1992, senere opgivet.

Et spor cache gemmer instruktioner enten efter de er blevet afkodet, eller som de er pensioneret. Generelt er instruktioner tilføjes spore caches i grupper, der repræsenterer enten individuelle grundlæggende blokke eller dynamiske instruktion spor. En dynamisk spor indeholder kun instruktioner, hvis resultater rent faktisk bruges, og fjerner instruktioner efter taget grene; en dynamisk spor kan være en sammenkædning af flere grundlæggende blokke. Dette gør det muligt instruktionshenteenheden af ​​en processor til at hente flere grundlæggende blokke, uden at skulle bekymre sig om filialer i udførelsen flow.

Trace linier lagres i cachen spor baseret på programtælleren af ​​den første instruktion i spor og et sæt branche forudsigelser. Dette giver mulighed for opbevaring af forskellige spor stier, der starter på den samme adresse, der hver repræsenterer forskellige gren resultater. I instruktionen hente fase af en rørledning, er det aktuelle program tæller sammen med et sæt af filial forudsigelser kontrolleres i spor cachen til et hit. Hvis der er et hit, er et spor linje leveret at hente, som ikke behøver at gå til en almindelig cache eller hukommelse til disse instruktioner. Det spor cache fortsætter med at fodre hente enhed indtil spor linje ender, eller indtil der er en misprediction i støbeskeen. Hvis der er en forbier, et nyt spor begynder at blive bygget.

Pentium 4 s spor cache butikker mikro-operationer som følge af afkode x86 instruktioner, der giver også funktionaliteten af ​​en mikro-operation cache. Under dette, næste gang der er behov for en instruktion, det behøver ikke at blive dekodet til mikro-ops igen.

Mikro-operation cache

En mikro-operation cache er en specialiseret cache, der gemmer mikro-operationer af dekodede instruktioner, som modtages direkte fra instruktion dekodere eller fra undervisningen cachen. Når en instruktion skal dekodes, er UOP cache kontrolleres for dekodet form, der genanvendes, hvis cached; hvis den ikke er tilgængelig, er instruktionen afkodes og derefter cached.

En af de tidlige værker, der beskriver UOP cache som en alternativ frontend til Intel P6 processor familie, er i 2001 papir "Mikro-Operation Cache: En Power Aware Frontend til variabel Instruktion Længde ISA". Senere, Intel inkluderet UOP caches i sine Sandy Bridge processorer og i successive microarchitectures som Ivy Bridge og Haswell.

Hente komplette præ-dekodede instruktioner eliminerer behovet for gentagne gange at afkode variabel længde komplekse instruktioner i enklere fast længde mikro-operationer og forenkler processen med at forudsige, hente, rotation og tilpasse hentet instruktioner. En UOP cache effektivt aflaster den hente og afkode hardware, og dermed faldende strømforbrug og forbedre frontend levering af dekodede mikro-operationer. Den UOP cache øger også ydeevnen ved mere konsekvent at levere dekodede mikro-operationer til backend og fjerne diverse flaskehalse i CPU'ens hente og afkode logik.

En UOP cache har mange ligheder med et spor cache, selv om en UOP cache er meget enklere og dermed give bedre strømeffektivitet. Dette gør det bedre egnet til implementeringer på batteridrevne enheder. Den største ulempe ved spor cache, der fører til dens magt ineffektivitet, er den hardware kompleksitet nødvendige for dens heuristiske træffes beslutning om caching og genbruge dynamisk oprettet instruktion spor.

Multi-level caches

Et andet spørgsmål er den grundlæggende afvejning mellem cache ventetid og hit rate. Større caches har bedre hit satser men længere ventetid. For at løse dette afvejning, mange computere bruger flere niveauer af cache, med små hurtige caches bakkes op af større og langsommere caches. Multi-level caches generelt opererer ved at kontrollere den hurtigste, niveau 1 cache først; hvis den rammer, processoren fortsætter ved høj hastighed. Hvis det mindre cache savner, er den næste hurtigste cache kontrolleres, og så videre, før ekstern hukommelse er markeret.

Som latenstiden forskellen mellem hovedlageret og hurtigste cache er blevet større, er nogle processorer begyndt at anvende så mange som tre niveauer af on-chip cache. Prisfølsomme designs brugt denne til at trække hele cache hierarkiet on-chip, men af ​​2010'erne nogle af de højeste ydeevne designs tilbage til at have store off-chip caches ofte implementeret i EDRAM og monteret på en multi-chip-modul som en fjerde cache-niveau.

For eksempel Alpha 21164 havde 1 til 64 MB off-chip L3 cache; IBM POWER4 havde off-chip L3 cache på 32 MB pr processor, delt mellem flere processorer; Itanium 2 havde en 6 MB samlet niveau 3 cache på dø; Itanium 2 MX 2 modul indeholder to Itanium2 processorer sammen med en delt 64 MB L4 cache på en Multi-chip modul, der var pin kompatible med en Madison processor; Intels Xeon MP produkt med kodenavnet "Tulsa" har 16 MB on-die L3 cache delt mellem to processorkerner; AMD Phenom II har op til 6 MB on-die forenet L3-cache; Intel Core i7 har en 8 MB on-die forenet L3-cache, som er inklusiv, deles af alle kerner; Intel Haswell CPU'er med integreret Intel Iris Pro Graphics har 128 MB EDRAM handler det væsentlige som en L4 cache. Fordelene ved en L3 cache afhænger af programmets adgang mønstre.

Endelig har den anden ende af hukommelsen hierarki, CPU register selve filen kan betragtes som den mindste, hurtigste cache i systemet, med den særlige egenskab, at det er planlagt i software typisk ved en compiler, som det tildeler registre til at holde værdier hentes fra hovedhukommelsen. Registrer filer til tider også have hierarki: The Cray-1 havde otte adresse "A" og otte skalar data "S" registre, der var generelt anvendelige. Der var også et sæt 64-adresse "B" og 64 skalar data "T" registre, der tog længere tid at få adgang, men var hurtigere end hovedhukommelsen. "B" og "T" registre blev leveret, fordi Cray-1 ikke har en data-cache.

Multi-core chips

Når man overvejer en chip med flere kerner, er der et spørgsmål om, hvorvidt de caches bør deles eller lokale til hver kerne. Gennemførelse delt cache utvivlsomt indfører mere ledninger og kompleksitet. Men så, har en cache per chip, snarere end kernen, i høj grad reducerer mængden af ​​pladsbehov, og dermed kan man inkludere en større cache.

Typisk er uønsket deling L1 cache siden latenstid stigning er således, at hver kerne vil løbe væsentligt langsommere end en single-core chip. På den anden side, for det højeste niveau, der har en global cache er ønskeligt af flere grunde. For eksempel kan en otte-core chip med tre niveauer omfatte en L1-cache for hver kerne, en mellemliggende L2 cache for hvert par kerner, og en L3 cache deles af alle kerner.

Delt højeste niveau cache, som kaldes før adgang hukommelse, der normalt omtales som det sidste niveau cache. Yderligere teknikker anvendes til at øge niveauet af parallelisme når LLC er delt mellem flere kerner, herunder udskæring det i flere stykker, som behandler visse intervaller af hukommelsesadresser, og kan tilgås uafhængigt af hinanden.

Separat versus forenet

I en separat cache struktur, instruktioner og data cached separat, hvilket betyder, at en cache linje bruges til cache enten instruktioner eller data, men ikke begge; forskellige fordele er blevet påvist med separate data og instruktion oversættelse Lookaside buffere. I en samlet struktur, denne begrænsning ikke er til stede, og cache linjer kan bruges til at cache både instruktioner og data.

Eksklusiv versus inklusiv

Multi-level caches indføre nye design beslutninger. For eksempel, i nogle processorer, alle data i L1 cachen skal også være et sted i L2 cache. Disse caches kaldes strengt inklusive. Andre processorer har eksklusive caches: data er garanteret at være i højst en af ​​L1 og L2 cache, aldrig i begge. Endnu andre processorer, kræver ikke, at data i L1-cache bor også i L2 cache, selv om det ofte kan gøre det. Der er ingen alment accepteret navn for denne mellemliggende politik.

Fordelen af ​​eksklusive caches er, at de gemme flere data. Denne fordel er større, når den eksklusive L1 cache er sammenlignelig med L2 cache, og mindskes, hvis L2 cache er mange gange større end L1 cache. Når L1 situationer og L2 hits på en adgang, er hårdtslående cache linje i L2 udvekslet med en streg i L1. Denne udveksling er ganske lidt mere arbejde end blot at kopiere en linje fra L2 til L1, hvilket er, hvad et rummeligt cache gør.

En fordel ved strengt inkluderende caches er, at når eksterne enheder eller andre processorer i et multiprocessorsystem ønsker at fjerne en cache linje fra processoren, de har brug for kun processoren kontrollere L2-cache. I cache hierarkier, der ikke håndhæver inklusion skal L1-cache kontrolleres så godt. Som ulempe, er der en sammenhæng mellem associativiteter af L1 og L2 caches: Hvis L2 cache ikke har mindst lige så mange måder, som alle L1 caches sammen, den effektive Associativitet af L1 caches er begrænset. En anden ulempe ved inkluderende cache er, at når der er en udsættelse i L2 cache, de tilsvarende linjer i L1 også at få smidt for at opretholde rummelighed. Dette er ganske lidt arbejde, og vil resultere i højere L1 miss sats.

En anden fordel ved inklusive caches er, at den større cache kan bruge større cache linjer, hvilket reducerer størrelsen af ​​de sekundære cache tags. Hvis den sekundære cache er en størrelsesorden større end den primære, og cache data er en størrelsesorden større end de cache-tags, dette tag område gemt, kan være sammenlignelig med den trinvise område nødvendig for at gemme L1 cache data i L2 .

Eksempel: K8

For at illustrere både specialisering og multi-level caching, her er cachen hierarki af K8 kernen i AMD Athlon 64 CPU.

K8 har fire specialiserede caches: en instruktion cache, en instruktion TLB, en data-TLB, og en data-cache. Hver af disse caches er specialiseret:

  • Instruktionen cache holder kopier af 64-byte linjer af hukommelse, og henter 16 bytes hver cyklus. Hver byte i denne cache lagres i ti bit snarere end otte, med de ekstra bits mærkning grænserne for instruktioner. Cachen har kun paritet beskyttelse snarere end ECC, fordi paritet er mindre og eventuelle beskadigede data kan erstattes af friske data hentes fra hukommelsen.
  • Instruktionen TLB holder kopier af side table poster. Hver cyklus instruktion hente har sin virtuel adresse oversat gennem denne TLB til en fysisk adresse. Hver post er enten fire eller otte bytes i hukommelsen. Fordi K8 har en variabel side størrelse, er hver af TLB opdelt i to sektioner, en til at holde PTEs der kort 4 KB-sider, og en til at holde PTEs der kort 4 MB eller 2 MB sider. Opdelingen giver mulighed for fuldt associative match kredsløb i hvert afsnit at være enklere. Operativsystemet kortlægger forskellige sektioner af det virtuelle adresserum med forskellige størrelse PTEs.
  • De data TLB har to eksemplarer, der holder identiske poster. De to eksemplarer tillader to data adgang per cyklus til at oversætte virtuelle adresser til fysiske adresser. Ligesom instruktion TLB, er denne TLB opdelt i to typer af poster.
  • De data cache holder kopier af 64-byte linjer af hukommelse. Den er opdelt i 8 banker, og kan hente to 8-byte data hver cyklus, så længe disse oplysninger er i forskellige banker. Der er to kopier af de tags, fordi hver 64-byte linje er spredt blandt alle otte banker. Hvert mærke kopi håndterer en af ​​de to adgange pr cyklus.

K8 har også flere niveauer caches. Der er andet niveau instruktion og data TLB, som lagrer kun PTEs kortlægning 4 KB. Både instruktion og data caches, og de forskellige TLB, kan udfylde fra den store forenet L2 cache. Denne cache er eksklusivt til både L1 instruktion og data caches, hvilket betyder, at enhver 8-byte linje kun kan være i en af ​​L1 instruktion cache, L1 data cache, eller L2 cache. Det er dog muligt for en linje i data cache for at få en PTE, som også er i en af ​​TLB operativsystemet er ansvarlig for at holde de TLB sammenhængende ved at skylle dele af dem, når siden tabeller i hukommelsen er opdateret.

K8 cacher også oplysninger, der aldrig gemt i hukommelsen forudsigelse oplysninger. Disse caches er ikke vist i ovenstående diagram. Som det er sædvanligt for denne klasse af CPU, K8 har ret kompleks gren forudsigelse, med borde, der hjælper forudsige, om grene bliver taget, og andre tabeller, som forudsiger målene af filialer og hopper. Nogle af disse oplysninger er forbundet med instruktioner, i både niveau 1 instruktion cache og det forenede sekundære cache.

K8 bruger en interessant trick til at gemme forudsigelse oplysninger med instruktionerne i den sekundære cache. Linjer i det sekundære cache er beskyttet mod utilsigtet beskadigelse af data ved enten ECC eller paritet, alt efter om disse linjer blev smidt ud data eller instruktion primære caches. Da den paritet koden tager færre bits end ECC-koden, linjer fra instruktion cache har et par ekstra bits. Disse bits bruges til cache gren forudsigelse oplysninger i forbindelse med disse instruktioner. Nettoresultatet er, at filialen prædiktor har en større effektiv historie bordet, og så har bedre nøjagtighed.

Flere hierarkier

Andre processorer har andre former for prædiktorer, og forskellige specialiserede prædiktorer sandsynligvis til at blomstre i fremtidige processorer.

Disse indikatorer er caches i, at de lagre information, der er dyrt at beregne. Nogle af de anvendte terminologi når vi diskuterer prædiktorer er den samme som for caches, men prædiktorer er generelt ikke opfattes som en del af cache hierarki.

K8 holder instruktion og data caches sammenhængende i hardware, hvilket betyder, at et lager i et ordreregister nøje butikken instruktion vil ændre det følgende instruktion. Andre processorer, som dem i Alfa og MIPS familie, har påberåbt sig software til at holde instruktion cache sammenhængende. Butikker er ikke garanteret til at dukke op i undervisningen strøm, indtil et program kalder et operativsystem facilitet til at sikre sammenhæng.

Implementering

Cache læser er den mest almindelige CPU operation, der kræver mere end en enkelt cyklus. Program gennemførelsestid tendens til at være meget følsom over for latenstiden for et niveau-1 data cache hit. En stor del af design indsats, og ofte magt og silicium område er brugt gøre cacher så hurtigt som muligt.

Den enkleste cache er en næsten indekseret direkte kortlagt cache. Den virtuelle adresse er beregnet med en adder, den relevante del af adressen udvindes og anvendes til at indeksere en SRAM, der returnerer de fyldte data. Dataene er byte bragt i en byte shifter, og derfra bypasses til den næste operation. Der er ikke behov for nogen tag kontrol i den indre sløjfe faktisk mærkerne behøver ikke engang læses. Senere i støbeskeen, men før belastningen instruktion er pensioneret, tag de indlæste data skal læses og kontrolleres i forhold til virtuel adresse for at sikre, at der var en cache hit. På en miss, er cachen opdateret med den ønskede cache linje og rørledningen genstartes.

En associativ cache er mere kompliceret, fordi nogle form for tag skal læses for at bestemme, hvilken indtastning af cache for at vælge. En N-vejs set-associativ niveau-1-cache normalt læser alle N mulige tags og N data parallelt, og så vælger de data, der er forbundet med den matchende tag. Level-2 caches sommetider spare på strømmen ved at læse tags først, så at kun én dataelement læses fra data SRAM.

Diagrammet til højre er at præcisere den måde, hvorpå de forskellige områder af den adresse, der bruges. Adresse bit 31 er mest markant, bit 0 er mindst betydningsfulde. Diagrammet viser SRAM, indeksering, og multiplexing for en 4 KB, 2-vejs set-associativ, næsten indekseret og næsten mærket cache med 64 byte linjer, en 32-bit læst bredde og 32-bit virtuel adresse.

Fordi cachen er 4 KB og har 64 B linjer, er der kun 64 linjer i cachen, og vi læser to ad gangen fra en Tag SRAM, som har 32 rækker, hver med et par 21 bit tags. Selv om enhver funktion af virtuel adresse bits 31 til 6 kunne anvendes til at indeksere tag og data SRAM, er det enkleste at anvende de mindst betydende bits.

Ligeledes fordi cachen er 4 KB og har en 4 B Læs vej, og læser to måder for hver adgang, Data SRAM er 512 rækker med 8 bytes bred.

En mere moderne cache kan være 16 KB, 4-vejs set-associativ, næsten indekseret, nærmest antydede, og fysisk mærket, med 32 B-linjer, 32-bit læst bredde og 36-bit fysiske adresser. Den læser vej gentagelse for en sådan cache ligner meget den ovenstående sti. I stedet for tags, der vhints læst og matchet mod en delmængde af den virtuelle adresse. Senere i støbeskeen, er den virtuelle adresse oversat til en fysisk adresse fra TLB, og den fysiske tag læses. Endelig den fysiske adresse sammenlignes med den fysiske tag at afgøre, om et hit har fundet sted.

Nogle SPARC designs har forbedret hastigheden af ​​deres L1 caches med et par gate forsinkelser ved at kollapse den virtuelle adresse adder i SRAM dekodere. Se Sum rettet dekoder.

Historie

Den tidlige historie cache-teknologi er tæt forbundet med opfindelsen og anvendelsen af ​​virtuel hukommelse. På grund af knaphed og omkostningerne ved halvledere erindringer, tidlige mainframe computere i 1960'erne brugte en kompliceret hierarki af fysisk hukommelse, kortlagt på en flad virtuel hukommelse der bruges af programmer. De hukommelse teknologier ville strække halvledere, magnetisk kerne, tromle og skive. Virtuel hukommelse ses og anvendes af programmer ville være flad og caching ville blive brugt til at hente data og instruktioner i den hurtigste hukommelsen forud for processor adgang. Omfattende undersøgelser blev udført for at optimere cachestørrelser. Optimale værdier blev fundet i høj grad afhænge af programmeringssprog bruges med Algol behøver den mindste og Fortran og Cobol behøver de største cachestørrelser.

I de tidlige dage af mikrocomputer teknologi, var hukommelse adgang kun lidt langsommere end registrere adgang. Men siden 1980'erne ydeevne kløften mellem processor og hukommelse har været stigende. Mikroprocessorer har avancerede meget hurtigere end hukommelse, især med hensyn til deres driftsfrekvens, så hukommelsen blev en præstation flaskehals. Mens det var teknisk muligt at have alle de vigtigste hukommelse så hurtigt som CPU, har en mere økonomisk rentabel vej blevet taget: brug masser af lav hastighed hukommelse, men også indføre en lille høj hastighed cache-hukommelse til at afhjælpe udførelsen hul. Dette billede en størrelsesorden større kapacitet til samme pris med kun en lidt reduceret samlede præstation.

Første TLB implementeringer

De første dokumenterede anvendelser af en TLB var på GE 645 og IBM 360/67, som begge anvendes et associativt hukommelse som en TLB.

Første data cache

Den første dokumenterede brug af en data-cache var på IBM System / 360 Model 85.

I x86 mikroprocessorer

Som x86 mikroprocessorer nået ur satser på 20 MHz og derover i 386 begyndte små mængder af hurtig cache-hukommelse til at blive præsenteret i systemer for at forbedre ydeevnen. Dette skyldtes, at DRAM bruges til hovedhukommelsen havde en betydelig latenstid, op til 120 ns, samt refresh cykler. Cachen blev konstrueret af dyrere, men betydeligt hurtigere, SRAM hukommelse celler, som på det tidspunkt havde ventetid omkring 10 ns. De tidlige caches var ekstern til processoren og typisk placeret på bundkortet i form af otte eller ni DIP enheder placeret i sokler for at aktivere cachen som ekstraudstyr eller opgradere funktionen.

Nogle versioner af Intel 386 processor kunne støtte 16 til 64 KB eksterne cache.

Med 486 processor, blev en 8 KB cache integreret direkte i CPU die. Denne cache blev betegnet niveau 1 eller L1-cache for at skelne det fra den langsommere på bundkortet, eller niveau 2 cache. Disse på-bundkort caches var meget større, med de mest almindelige størrelse er 256 KB. Populariteten af ​​on-bundkort cache fortsatte gennem Pentium MMX æra men blev gjort forældet ved indførelsen af ​​SDRAM og det voksende misforhold mellem bus clock satser og CPU clock satser, som forårsagede på bundkort cache kun at være lidt hurtigere end hovedhukommelsen.

Den næste udvikling på cache implementering i x86 mikroprocessorer begyndte med Pentium Pro, som bragte den sekundære cache på samme pakke som mikroprocessoren, clocket ved den samme frekvens som mikroprocessoren.

On-bundkort cacher haft langvarige popularitet takket være AMD K6-2 og AMD K6-III-processorer, der stadig bruges den ærværdige Socket 7, som tidligere blev brugt af Intel med on-bundkort caches. K6-III omfattede 256 KB on-die L2 cache og udnyttede den indbyggede cache som et tredje niveau cache, opkaldt L3. Efter Socket 7 blev forældet, on-bundkort cache forsvundet fra x86-systemer.

De tre-niveau caches blev anvendt igen først med indførelsen af ​​adskillige processorkerner, hvor L3 cache blev tilsat til CPU dø. Det blev almindeligt for de samlede cachestørrelser at blive stadig større i nyere processor generationer, og for nylig er det ikke ualmindeligt at finde Niveau 3 cache størrelser af snesevis af megabytes. Denne tendens synes at fortsætte i den nærmeste fremtid.

Intel introducerede en niveau 4 på pakken cache med Haswell mikroarkitektur. Crystal Nå Haswell CPU'er, udstyret med den GT3e variant af Intels integrerede Iris Pro grafik, effektivt har 128MB af indlejret DRAM på samme pakke. Dette L4 cache deles dynamisk mellem on-die GPU og CPU, og fungerer som et offer cache til CPU'en s L3 cache.

Aktuel forskning

Tidlige cache designs fokuserede udelukkende på de direkte omkostninger ved cache og RAM og gennemsnitlig udførelse hastighed. Nyere cache designs også overveje energieffektivitet, fejltolerance, og andre mål.

Der er flere værktøjer til rådighed for edb-arkitekter til at hjælpe med at udforske kompromiser mellem cache cyklus tid, energi, og område. Disse værktøjer omfatter open source kaktus cache simulator og open source SimpleScalar instruktionssæt simulator.

Multi-porteret cache

En multi-porteret cache er en cache, der kan betjene mere end én anmodning ad gangen. Ved adgang til et traditionelt cache vi normalt bruge en enkelt hukommelse adresse, mens der i en multi-porteret cache vi kan anmode N-adresser ad gangen - hvor N er antallet af porte, der er tilsluttet via processoren og cachen. Fordelen ved dette er, at en processor med pipeline, kan få adgang til hukommelse fra forskellige faser i sin pipeline. En anden fordel er, at det giver mulighed for begrebet super-skalære processorer gennem forskellige cache niveauer.

  Like 0   Dislike 0
Næste artikel Sorrowful Jones
Kommentarer (0)
Ingen kommentar

Tilføj en kommentar

smile smile smile smile smile smile smile smile
smile smile smile smile smile smile smile smile
smile smile smile smile smile smile smile smile
smile smile smile smile
Tegn tilbage: 3000
captcha