Bufferminnet

Bufferminnet ( på engelsk cache memory , memory cache eller CPU cache ), i informatikk , er et raskt minne (sammenlignet med hovedminnet ), relativt lite, ikke synlig for programvaren og fullstendig administrert av maskinvaren , som lagrer data sist brukt i hovedminnet (MM - Main Memory) eller arbeidsminnet til systemet.

Funksjonen til hurtigbufferminnet er å øke hastigheten på tilgangen til hovedminnet ved å øke ytelsen til systemet. I multiprosessorsystemer med delt minne tillater det også å redusere trafikken til systembussen og hovedminnet, som representerer en av de største flaskehalsene til disse systemene. Cache-minne bruker rask SRAM -teknologi , kontra tregere hovedminne DRAM , som er koblet direkte til prosessoren.

Funksjoner

CPU cache

«CPU-cache» er et uvanlig begrep og brukes sjelden eller ikke i det hele tatt i både litteratur- og bransjekretser blant bransjeeksperter. For eksempel, i patentdokumenter (USA), brukes begrepet "CPU cache" mindre enn 2 % av tiden [1] sammenlignet med begrepet "Cache Memory" (83%) [2] og "Memory Cache" (15 ) %) [3] . Cache-minne er en funksjon knyttet til et minne og ikke med en spesifikk bruker av denne funksjonen. Denne funksjonen kan brukes av en CPU eller i Delt Cache av en gruppe CPUer eller kjerner eller noder , eller til og med assosiert med en gruppe eksterne minner i NUMA -systemer , eller generelt fra en hvilken som helst enhet som har tilgang til et hovedminne. Begrepet "CPU-cache" er derfor for restriktivt og derfor upassende (se f.eks . Remote cache - remote memory cache).

Definisjon

Cache er et minne som lagrer midlertidige data "stille" på høyeste bruksnivå for rask gjenbruk . [4] [5] [6]

Begrepet "cache" kommer fra fransk og betyr "gjemt".

Begrepet "Cache Memory" eller "Memory Cache" eller kort "Cache" uten noen annen spesifikasjon, refererer vanligvis til et skjult minne som lagrer et undersett av innholdet i hovedminnet og mer presist "instruksjonene" til et program og relaterte "data" å operere på.

Operasjon

Den funksjonelle logikken til hurtigbufferminnet er som følger:

  1. I hovedminne (MM) leseoperasjoner, kontrollerer hurtigbufferen først om dataene er bufret;
  2. Hvis vellykket (Hit), overføres dataene umiddelbart fra hurtigbufferen til prosessoren uten å involvere hovedminnet;
  3. I tilfelle feil (Miss), leses dataene fra hovedminnet og returneres til cachen etter prinsippene for romlig lokalitet.

Driften av cachen er hovedsakelig basert på to prinsipper om lokalitet , tidslokalitet og romlig lokalitet.

Effektivitet

Hurtigbuffereffektivitet måles i form av "Trefffrekvens". Trefffrekvensen representerer prosentandelen av treff, dvs. antall minnereferanser som kan tilfredsstilles av hurtigbufferen sammenlignet med det totale antallet minnetilganger (cache + hoved). For eksempel, forutsatt at av totalt 10 referanser til minne 8 er tilfredsstilt av hurtigbufferen, er treffraten 0,8 eller 80%.

"Miss" refererer til antall referanser som ikke tilfredsstilles av cachen sammenlignet med det totale antallet minnetilganger. I det forrige tilfellet er treffraten 0,2 og deretter 20 %, dette betyr at av 10 forespørsler var det nødvendig å få tilgang til hovedminnet to ganger for å finne dataene (eller instruksjonen). Effektiviteten til cachen avhenger av flere elementer som cachestørrelse, cachelinjestørrelse, type, arkitektur og applikasjoner. Et godt ytelsestall for kommersielle applikasjoner kan ligge i 80-95 % treffområdet [8] .

Grunnleggende struktur

Det er tre grunnleggende bufringsstrukturer:

Fullt assosiativ buffer

Hver minneblokk kan lagres på en hvilken som helst cacheplassering. Det kalles "fullstendig assosiativ" fordi hver hurtigbufrede data er assosiert med sin fulle minneadresse. Cachen er delt inn i to banker: Directory (guideindeks) og databank ( data ). Katalogen er igjen delt inn i to felt, dataattributtbit (dataattributtbit) eller State (state), og dataadresse ADD (minneblokkadresse). Dataattributtbitene inkluderer Gyldig bit og kan også inkludere flere andre statusbiter som Modifisert bit ( M ) (modifikasjonsbit), Delt bit ( S ) (delingsbit) og andre (se under Cache-tilstander ). I tillegg til disse bitene kan også "beskyttelsesbiter" som Supervisor/Bruker og Skrivebeskyttelse - "skrivebeskyttelse" inkluderes. Den fullt assosierte adressen til minneblokken bufres i den fullt assosiative hurtigbufferen. Når en data leses fra hurtigbufferen, sammenlignes alle adressene som er lagret i "Directory" samtidig med adressen til minneblokken til de forespurte dataene. Hvis en adresse blir funnet med "gyldige" data ( hit ), leses de tilsvarende dataene fra cachen. Ved glipp leses datablokken av MM. Dataene som leses av MM blir også bufret som vil erstatte (overskrive) en hurtigbufferlinje valgt i samsvar med erstatningspolicyen . Fullt assosiativ cache har høy effektivitet. Dataene kan lagres hvor som helst i cachen, men det er dyrt med tanke på kretsløp. Den trenger uavhengige samtidige tilgangsveier og en komparator for hver cache -oppføring . Derfor er størrelsen på denne hurtigbufferen vanligvis veldig liten og brukes bare for spesifikke tilfeller (f.eks. i TLB ). Normalt brukes den aldri som hurtigbufferminne , men Direct-Mapped og Set-Associative cacher brukes i stedet.

Cache direkte kartlagt

I direkte kartlagt cache - direkte kartlagt Hver minneblokk kan lagres i en enkelt cacheoppføring. Oppføringen (dvs. cache-plasseringen) hvor blokken skal lagres, er direkte avledet fra minneadressen (derav navnet "Direct-Mapped" - direkte kartlagt).

Bufferstørrelsen er mindre enn MM, så minneadressen må reduseres for å passe til hurtigbufferplassen. Alle minnedata må kunne lagres på en mindre plass, men selvsagt ikke alle samtidig. Mange algoritmer, kalt hash-koding (eller hashing), brukes til å gjøre dette. Den vanlige løsningen [9] for å få hurtigbufferadressen er å direkte bruke en del av minneadressen, og nettopp feltet kalt Index (indeks), det vil si ekskludert offset , de minst signifikante bitene av adressen ( Minst signifikante bit - LSB), se fig. Cache-adressering . Offset ( linjeforskyvning) er adressefeltet som brukes for intern adressering av hurtigbufferlinjen på bytenivå. For eksempel med en 32-bits minneadresse (4 GB plass), og en hurtigbufferstørrelse på 4 MB med en hurtigbufferlinje på 256 B, brukes de minst signifikante bitene (8-21), Index , for å velge cachelinjeadresse. Denne lineære adresseringsløsningen, i det virtuelle minnet for etterspørselssøking , ( se også under Virtuell adressering ), tillater lagring av en komplett minneside i hurtigbufferen. Alle data som har samme indeks , kalt synonymer , lagres i samme oppføring, så bare ett synonym om gangen kan lagres i hurtigbufferen (synonym konflikt). Synonymene skiller seg fra hverandre for MSB (Most Significant Bits - most significant bits of the address). For å skille de forskjellige synonymene, lagres MSB-navnet Address Tag (adressetag) i cache-katalogen (i forrige eksempelbiter (22-31). Når en data leses fra cachen, blir MSB-en til cache-katalogen sammenlignes med MSB-en til minneadressen til dataene som skal leses. Når det gjelder Fully Associative cache, i tilfelle et treff, leses dataene fra cachen, ellers i tilfelle glipp, fra minnet. to synonymer, når det gjelder adresse, er et multiplum av hurtigbufferstørrelsen. Konflikten mellom synonymer avtar ettersom hurtigbufferstørrelsen øker fordi avstanden mellom synonymer øker. I denne typen hurtigbuffer velges bare én hurtigbufferlinje om gangen , derfor er bare én komparator nødvendig For å minimere problemet med synonymer brukes Set Associative cache.

Cache Set Associative

Set Associative (eller multi-via-direct-mapped ) cache er en kombinasjon av de to tidligere tilnærmingene og brukes til å redusere konflikten mellom synonymer. Denne cachen er sammensatt av et sett med identiske Direct Mapped cacher, adressert på nøyaktig samme måte, slik at det for hver oppføring er et "sett" (gruppe, vei-veier) av alternative cache-linjer for å lagre mer enn ett synonym. Synonymene kan lagres i ethvert sett av de valgte oppføringene, avhengig av '' erstatningspolicyen ' '-algoritmen som brukes, vanligvis LRU . Normalt er antall sett i området 2-8 / 16 eller mer, opptil 48 ( AMD Athlon [10] ) og 128 ( POWER3 [11] ), avhengig av typen cache (instruksjoner / data). I Set Associative cache brukes en adressekomparator for hvert sett. En Direct Mapped cache kan sees på som en Set Associative cache med bare ett sett og en Fully Associative cache med n-linjer som en n-veis Set Associative cache med en enkelt oppføring. Avhengig av " Erstatningspolicyen " som er vedtatt, kan det hende at katalogen også inneholder erstatningsbitene for å velge bufferlinjekandidaten for erstatning.

Erstatningspolicy (deallokering av cachelinje)

Når mer enn én oppføring er tilgjengelig for å lagre en data, som i tilfellet med Fully Associative and Set Associative cache, velges oppføringen som skal erstattes på grunnlag av den vedtatte "Erstatningspolicyen". Det er forskjellige retningslinjer [12] .

De viktigste er:

- LRU - Vanligvis brukt for Set Associative cacher. - Separat for hvert sett er hver oppføring knyttet til en "aldersteller" ( erstatningsindeks ). Den maksimale kapasiteten til denne telleren er lik antall sett . Bufferlinjen til en oppføring med høyest verdi er den som vil bli erstattet av en ny hurtigbufferlinje. Hver gang en hurtigbufferlinje åpnes, settes telleren til null, mens de andre tellerne på de andre linjene i samme oppføring med en verdi lavere enn hurtigbufferlinjen økes med 1. For eksempel med en 4-veis Set-cache Assosiativ og derfor to bits per teller, med tellerne som har verdiene 0-3-2-1 (sett 1 til 4), vil erstatningsrekkefølgen være 4. -1. -2. -3. Den høyeste verdien (3) er den eldste og den laveste (0) den nyeste (eller det kan også være omvendt i en alternativ implementering). - hvis sett 3 (verdi 2) åpnes, vil den endelige situasjonen være: verdi av tellere 1-3- 0 -2, erstatningsordre 3 ° -1 ° - 4 ° -2 °. Sett 3 flyttes til siste plass. - Ved erstatning av en hurtigbufferlinje vil den erstattede linjen være sett 2 og tellerne blir 2-0 -1-3: 2.-4.-3.-1. erstatningsrekkefølge. - FIFO - Brukt i Set Associative cacher. - Samme algoritme som LRU men med den forskjellen at tellerne kun oppdateres når en cache-linje erstattes. Hurtigbufferlinjen med den høyeste verdien erstattes og telleren settes til null, mens alle andre tellere økes med 1. - LFU - Den mest effektive algoritmen, men den dyreste. Vanligvis ikke brukt. - Round-robin - Brukes i Full Associative cacher. - En peker velger hurtigbufferlinjen som skal erstattes. Denne pekeren økes med 1 ved hver utskifting av en hurtigbufferlinje. Dette gjøres syklisk. Bare én peker er nødvendig. - Enkel og rimelig å implementere. - Tilfeldig - Brukes i Full Associative cacher. - Round-robin oppdatert ved hver klokke / tilgang i stedet for hver erstatning. - Enkel og rimelig å implementere.

Typer cache

Det finnes to typer cacher:

Instruksjonsbuffer og databuffer

To typer informasjon er lagret i hovedminnet, instruksjoner (også kalt kode) og data (som operander eller stabler - se Stack cache ). Cacher kan deles inn i enhetlige cacher og separate cacher, enhetlige cacher lagrer både instruksjoner og data mens instruksjoner og data i separate cacher lagres i dedikerte cacher.

Instruksjonsbufferen er forkortet til "I-Cache", mens databufferen til "D-Cache", ved å bruke separate cacher har tre hovedfordeler:

1. Reduksjon av interferens mellom to forskjellige datastrukturer; jo mer sekvensielle instruksjonene, desto mer tilfeldige data. Videre tillater denne tilnærmingen ulike typer implementering. Generelt 2 til 4/8-veis Angi assosiative cacher for instruksjonsbufferen, 4 til 16-veis eller mer (128) for databufferen [11] . 2. Tillater implementering av "Harvard" -arkitekturen ; denne typen arkitektur øker prosessorens eksekveringsparallellisme fordi den gir tilgang til påfølgende instruksjoner (forhåndshenting, tidlig tilgang) parallelt med tilgang og utførelse av dataene knyttet til de tidligere instruksjonene (separate uavhengige tilgangsveier); 3. Ingen interferens, i multiprosessorsystemer, mellom Snoopy -aktivitet og prosessoraktivitet på I-Cache; Snoopy-aktivitet gjøres vanligvis bare i D-Cache (se Skrivepolicy og Interferens mellom Snoopy og prosessoraktivitet ).

De fleste cacher kan bare håndtere én forespørsel om gangen. Hvis en forespørsel kommer og det er en glipp , må cachen vente på dataene fra minnet, og mens man venter på dette forblir cachen "låst". En ikke-blokkerende (eller låsefri) cache har muligheten til å jobbe med andre forespørsler mens du venter på "glipp"-data fra minnet.

Inkluderende og eksklusiv cache

Cachen kan være inkluderende eller eksklusiv:

Samme forhold mellom inkluderende L3 og L2, hvis L3 brukes. - L2 cache-linje er kopiert til L1. - Dataene leses fra minnet og lagres i både L1 og L2, og erstatter den samme linjen erstattet i L2 i L1, hvis L1 inneholder en kopi, ellers vil hurtigbufferlinjen som skal erstattes i L1 bli valgt i henhold til erstatningspolicyen som brukes. - Når en linje i L2 byttes ut, på grunn av en misskonflikt i L2, må også den eventuelle kopien av L1 kastes ut for å opprettholde inkluderingen. (Merk - Den globale cachestørrelsen er summen av størrelsene til begge cachene). Samme forhold mellom eksklusive L3 og L2, hvis L3 brukes. - Hurtigbufferlinjene til L1 og L2 byttes med hverandre, dvs. cachelinjen til L1 er lagret i L2 og linjen til L2 i L1. - Dataene som leses fra minnet lagres direkte i L1 og hurtigbufferlinjen erstattet av L1 ( offerdata ) overføres til L2 og erstatter en annen hurtigbufferlinje i henhold til erstatningspolicyen som brukes.

Skriv policy

Skrivepolicyen - eller skrivepolicyen - bestemmer hvordan skriving til minnet av hurtigbufrede data håndteres. Vanligvis er det bare D-cachen som påvirkes, fordi instruksjonene normalt ikke er selvmodifiserende, og i tilfelle selvmodifisering tvinger programvaren skrivingen av denne koden (instruksjoner) bare i minnet uten å involvere cachen (se for eksempel AMD64 Selvmodifiserende kode [14] )

Det finnes to typer retningslinjer:

- Skriv igjennom - Tilbakeskrivning (eller kopier tilbake )

Skriv gjennom

Tilbakeskrivning (eller kopier tilbake) (skriv om, skriv tilbake eller kopier tilbake)

Ved manglende skriftlighet er det to forskjellige løsninger:

Skriv alloker (skriv med allokering)

Skriv alloker på miss ( skriv tildeling på miss ) eller RWITM (Les ​​med I ntentT or modify - les med intensjon om å endre) ellerLes for skriv - les for å skrive

Skriv no-allocate (eller no-write-allokert - ikke-allokering)

- Skrivetildeling er normalt forbundet med tilbakeskrivning . Write no-allocate kan være knyttet til gjennomskrivning eller ikke .

Buffernivåer

Mer enn én cache kan brukes på et system. Cachene er organisert i hierarkiske nivåer. Opptil fire nivåer er mulig, L1-L4 eller mer [15] . En større hurtigbuffer har en bedre trefffrekvens, men lengre latenstid. En multi-level cache garanterer rask tilgang med høy treffrate. Multi-level cache fungerer vanligvis ved å sjekke først den minste laveste nivå cachen, Level 1 (L1). Hvis den treffer, går prosessoren raskt. Hvis den minste cachen glipper, blir den nest største cachen (L2) sjekket, og så videre opp til det høyeste nivået. Den forbedrede teknologien gir nok plass til å implementere en liten L1-cache inne i prosessorbrikken . En intern cache er raskere enn en ekstern, men har en lavere trefffrekvens på grunn av sin mindre størrelse, vanligvis i området 8KB til 64KB. For å øke den totale hurtigbufferstørrelsen og dermed trefffrekvensen, brukes en større L2-cache tett koblet til prosessoren. En typisk L2-bufferstørrelse er i området 64KB til 8MB. L2-cachen kan være ekstern eller intern i prosessorbrikken eller pakken . I sistnevnte tilfelle kan derfor en ekstra enda større ekstern L3-cache (4-256MB) brukes. I flerkjernesystemer kan L3 implementeres i en MCM ( Multi-chipmodul ) (se f.eks . POWER5 IBM, AMD Bulldozer ). Normalt er L1 en separat Instruction and Data Set Associative cache. L2 cachen kan være enhetlig eller separat, i tillegg til å være en Direct Mapped eller Set Associative cache. Det samme for L3-cachen.

Hierarkisk funksjon av multi-level cacher

L1 → Inne i prosessorbrikken . Rask tilgang.     - Rekkevidde 8KB - 64KB ( POWER8 [7] ) L2 → For å øke den totale størrelsen og for datakonsistens     - Snoopy for den bussbaserte multiprosessoren (bussbasert),       delt for multi-core .     - Det kan være eksternt eller internt i prosessorbrikken .     - Rekkevidde 64KB - 8MB (16MB IBM RS64 -IV) [7] L3 → For å øke den totale størrelsen. Brukes også som L2 Victim-cache      (se f.eks . POWER5 og AMD ) og for snoopy i SMP-systemer.     - Rekkevidde 4MB - 128MB [7] [16] . L3 brukes hvis L2 er internt i brikken eller dysen L4 →     Ekstern cache for cc-NUMA - Clustering Systems     - Område> L3 (512 MB eller mer) avhengig av antall noder     - noen ganger brukt som L3 Victim cache i grafikkprosessorer ( GPUer ) [17] .

Multi-bank ( multi-bank ) og multi-port ( multi-ported ) cache

Superskalære prosessorarkitekturer ( superskalære prosessorer = multioperative enheter) er i stand til å utføre instruksjoner parallelt samtidig (utnytter den iboende parallelliteten til strømmen / flertrådede instruksjoner - kontinuerlig flyt / multi-forgrening). I denne typen prosessorer er det flere funksjonelle enheter av samme type med tilleggskretser for å "sende" instruksjonene til de ulike enhetene. I de fleste av disse "superskalære" systemene inkluderer de mer enn én aritmetisk-logisk enhet (enhet for aritmetiske og logiske operasjoner). For eksempel i IBM POWER3 [18] opptil åtte instruksjoner, to flytende punkt (flytende punkt), to last / lagre (lese / skrive = databevegelse - på engelsk "move"), tre faste punkt - (fast punkt), to enkelt syklus, en multisyklus og en "gren" (hoppinstruksjon - instruksjonene utføres sekvensielt inntil en "hopp"-instruksjon blir funnet som hopper fra en ny sekvens) som kan utføres i samme syklus. De tilgjengelige instruksjonene sendes ut av rekkefølge av utgangskøene, slik at disse instruksjonene kan utføres i uorden ved å bruke Register rename -teknikken (erstatte et register som allerede er i bruk med et annet register - endre navn) for synkronisering og omorganisering av resultater.

Parallell instruksjonsutførelse krever samtidig tilgang til L1 D-cachen. Konflikter oppstår når to eller flere forespørsler samtidig får tilgang til samme hurtigbufferbank. Disse konfliktene kan delvis elimineres ved bruk av multibank- og/eller multiport-cacher [19] [20] [21]

Det er flere løsninger [22] [23] :

Multi-Bank Cache

L1 D-cachen er delt inn i flere banker med uavhengige adresser. Det er to tilnærminger:

Lineær adressering

Banker adresseres parallelt via en tverrstang (kryss direkte forbindelser). Adressen er lineær, dvs. den neste adressen til den siste adressen til en bank er den første adressen til den neste banken. Bankene velges i rekkefølge ved å bruke de mest signifikante bitene (MSB) i "indeksen" til adressen (for eksempel med 8 banker, de tre bitene 21-19 i eksemplet i Cache-adressering ). Flere banker kan støtte flere forespørsler per syklus når de ikke adresserer samme bank. Multibank-tilnærmingen kan være effektiv for applikasjoner som har en dårlig romlig lokalisering av dataene (statistisk uavhengige data), men for applikasjoner med god romlig lokalitet, som for eksempel ved påfølgende aksesser, tillates ikke flere samtidige aksesser på grunn av bankkonflikter . "(bankkollisjon - bankkollisjoner)

Interleaving cache

Påfølgende hurtigbufferlinjer lagres på påfølgende banker. Adresseringen av cache-linjene er "interlaced" (fordelt horisontalt) mellom bankene som vist i fig. til siden. Banker velges av de minst signifikante bitene av "indeksen" til adressen (for eksempel med 8-veis interleaving, bit 10-8 i eksemplet ovenfor i Cache-adressering ). Vanligvis varierer antallet banker fra to, fire eller åtte (se f.eks . IBM POWER3 [24] ), kalt henholdsvis toveis , fireveis eller åtteveis interleaving . Cache-interleaving er spesielt fordelaktig ved operasjoner på flere datastrenger. For eksempel, med en toveis interleaving cache (parten adresse i Bank 0 og oddetall adresse i Bank 1) og to programmer (tråder) som opererer på to uavhengige strenger, kan det første programmet få tilgang til Bank 0 mens det andre kan få tilgang til Bank 1 I den neste tilgangen kan det første programmet få tilgang til Bank 1 mens det andre kan få tilgang til Bank 0, og så videre vekselvis. Ved «bankkollisjon», dvs. samtidig tilgang til samme bank, må et program i utgangspunktet vente en syklus, så kan det starte. Selv ved flere samtidige tilfeldige tilganger gir dette systemet fordeler, avhengig av antall banker. Sannsynligheten for konflikt reduseres etter hvert som antallet banker øker. Eksempel på interleaving: L1-cachen til POWER3 [25] med 8-veis interleaving er i stand til å betjene to "laster" (leser), en "store" (skrive) og en reread (reload) av en cache-linje for å sykle.

Multi-port cache ( multi-port cache , ekte multi-porting eller ideell multi-porting )

Flere porter tillater flere parallelle tilganger til cachen i samme klokkesyklus, som opererer uavhengig av hverandre [7] .

Multi-port cacher gir den høyeste tilgangshastigheten per syklus, men er komplekse og derfor trege og dyre. Det innebærer også bruk av ikke-standard cellestrukturer. Mens en enkelt statisk minnecelle krever 6 felteffekttransistorer , kreves det 2 transistorer til for å ha en dobbel gate. Derfor kan denne løsningen brukes for bare noen få porter, vanligvis to for lesing og én for skriving (f.eks . POWER4 IBM ).

Flere kopier ( speiling eller kloning )

Cache med "n" identiske kopier (kloner) med uavhengig samtidig adressering. Begrensninger: skyggekopier uten fordeler med lagringsplass. Videre skal skriveforespørsler gjøres samtidig på alle eksemplarer, slik at ingen andre forespørsler kan sendes parallelt. Siden omtrent 30 % av minnetilgangene er skriving [27] , har denne løsningen alvorlige begrensninger.

Virtuelle multiporter (tidsdelingsmultipleksing)

"Tidsdelingsmultipleksing" er en teknikk som også kan refereres til som "cache overklokking" som er klokke med økt frekvens. Bufferdrift med frekvens 2x (3x, 4x) av prosessorfrekvensen slik at cachen kan nås to (tre, fire) ganger per syklus (klokke).

Hybridløsning

Kombinasjon av interleaving cache-løsning med multiporter. Flere interleaving banker tillater rimelig parallell tilgang mens flere dører reduserer bankkonflikter.

Cache -sammenheng _

Prosessorer kan dele en felles cache. Delte cacher brukes vanligvis for datakonsistens i multi-core (Multi-chip) systemer og for kostnadsreduksjon. I systemer som symmetrisk multiprosessor (SMP) , multi-core og cc-NUMA , der en dedikert hurtigbuffer brukes for hver prosessor , kjerne eller node , kan det oppstå et datakonsistensproblem når de samme dataene er lagret i mer enn én cache og det forekommer at en data blir modifisert i en cache. Det kan løses på to måter:

  1. ugyldiggjøring av alle kopier av de andre cachene (broadcast-invalidate - diffusjonsinvalidering);
  2. oppdatering av alle kopier av de andre cachene (skrive-kringkasting).

I begge tilfeller kan minnet oppdateres (skrives gjennom) eller ikke oppdateres (skrives tilbake); konsistens fra data gjelder vanligvis bare dataene (som operander) og ikke instruksjonene (se Self-Modifying Code ).

Ordningene kan klassifiseres etter:

  • Snoopy Vs Directory og Vs Shared cache-opplegg;
  • Skriv gjennom vs tilbakeskrivingsprotokoll (basert på eierskap eller eierskap);
  • Protokolloppdatering vs ugyldiggjøring (oppdatering vs ugyldiggjøring);
  • Intervensjon vs ikke-intervensjon (intervention vs non-intervention);
  • Dirty-sharing vs non dirty-sharing-protokoll (modifisert delt vs ikke-delt data - MOESI vs MESI).

Tre tilnærminger er tatt i bruk for å opprettholde datakonsistens:

  1. Bussovervåking eller snoking : brukes vanligvis for SMP-systemer eller symmetrisk / flerkjernebussbasert multiprosessorsystem ;
  2. Katalogbasert - meldingsoverføring : katalogbasert og meldingsutveksling; de kan brukes i alle systemer, men typisk i cc-NUMA- systemer og utvidede flerkjernesystemer ;
  3. Delt cache : brukes vanligvis i flerkjernesystemer .

Buss ser på eller snoker

Protokoll brukt i bussystemer, for eksempel SMP-systemer. System som opererer under ett enkelt operativsystem med to eller flere homogene prosessorer og med et delt sentralisert hovedminne . Hver prosessor har sin egen cache som fungerer som en bro mellom prosessoren og hovedminnet. Tilkoblingen gjøres ved hjelp av en systembuss eller en tverrstang (xbar, tverrkoblinger) [28] eller en blanding av de to tidligere systemene, adressebuss og datatverrstang [ 29] [30] [31] .

De største begrensningene til disse systemene er trafikk og minnebåndbredde (mengde data per sekund). Båndbredden kan økes ved å bruke en stor datakanal, datatverrstang, minneinnfletting og datatransaksjoner som ikke er i orden. Trafikk kan reduseres ved å bruke en cache som fungerer som et filter til delt minne. Cachen er derfor et vesentlig element i SMP-systemer med delt minne. I multiprosessorsystemer med separate cacher som deler felles minne, kan de samme dataene lagres i mer enn én cache. Et datakonsistensproblem oppstår når data endres i bare én cache. Protokollene for å opprettholde konsistens på tvers av flere prosessorer kalles cache-coherency-protokoller. Generelt i SMP-systemer er konsistens basert på tilnærmingen kalt Bus watching eller Snoopy. I et snoopy-basert system sjekker alle cacher busstransaksjoner for å fange opp data og se om den har en kopi i cachen. Ulike konsistensprotokoller brukes for å opprettholde datakonsistens på tvers av cacher . Disse protokollene klassifiseres vanligvis bare på grunnlag av hurtigbuffertilstandene (fra 3 til 5 og 7 eller mer) og transaksjonene mellom dem, men dette kan skape litt forvirring ettersom definisjonen av en slik protokoll er ufullstendig fordi den mangler viktig og essensiell informasjon som handlingene de produserer; disse handlingene kan induseres av prosessoren eller av bussen (f.eks. "intervensjon", "ugyldiggjøring", "kringkasting", "oppdatering", etc.). Typen handlinger er avhengig av de implementerte implementeringene. Protokoller som har samme tilstander og samme transaksjonsregler kan være forskjellige, f.eks. MESI - protokollen med "delt intervensjon" og MESI uten "intervensjon". Protokoller med forskjellige tilstander kan være stort sett den samme protokollen, for eksempel 4-stats MESI Illinois og 5-stats MERSI (IBM) / MESIF-Intel-protokoller er bare en annen implementering av samme funksjonalitet. De vanligste protokollene er 4-statsprotokollen kjent under akronymet MESI og 5-stats MOESI. Andre protokoller bruker de samme tilstandene - eller en undergruppe av dem - men med forskjellige implementeringer og ofte med forskjellig, men ekvivalent terminologi. Begrepet MESI eller MOESI, eller en undergruppe av disse, refererer vanligvis til en klasse av protokoller i stedet for til en spesifikk protokoll.

Buffertilstander
  • M = Modifisert (modifisert) eller D = Skitten (skitten / endret) eller DE = Skitten-eksklusiv (eksklusiv smuss) eller EM = Eksklusiv Modifisert (eksklusiv modifisert)
    • modifisert eller skitten, dvs. modifisert kun i en cache - tilbakeskrivning ved utskifting; dataene er lagret i en enkelt cache, men dataene i minnet er ikke oppdatert (ugyldig);
  • O = Eier (eier / leder) o SD = Delt skittent o M = Delt Modifisert o T = Tagget
    • modifisert, potensielt delt, proprietær - tilbakeskrivning i tilfelle erstatning; dataene kan lagres i mer enn én cache, men dataene i minnet er ikke oppdatert (ugyldig). Bare én cache er "eier", de andre cachene er merket "delt". Ved en leseforespørsel på bussen, leveres dataene av eieren i stedet for av minnet.
  • E = Eksklusiv eller R = Reservert eller VE = Gyldig-Eksklusiv eller EC = Eksklusiv Clean eller Me = Eksklusiv
    • eksklusiv eller reservert eller gyldig eksklusiv eller eksklusiv ren; dataene lagres kun i en cache og rengjøres i minnet.
  • S = Delt (delt) eller V = Gyldig (gyldig) eller SC = Delt renhold (delt renhold)
    • Data som potensielt deles med andre cacher. Dataene kan være rene eller skitne. Begrepet "ren" i SC er misvisende fordi det også kan være skittent (se Dragon Protocol )
  • I = Ugyldig
    • Ugyldig hurtigbufferlinje. Hvis hurtigbufferlinjen ikke er tilstede (taggen samsvarer ikke) tilsvarer den en ugyldig linje, derfor betyr ugyldig data data som er tilstede men ugyldig eller ikke til stede i hurtigbufferen
Spesielle stater
  • F = Videresend eller R = Nylig _
    • tilleggstilstander i MESI - protokollen . De siste dataene som ble lest. Det er en spesiell "gyldig" tilstand som er eier for umodifiserte delte data , brukt i noen utvidede MESI-protokoller (MERSI eller R-MESI IBM [33] [34] , MESIF - Intel [35] [36] ). R/F-statusen brukes til å tillate "Intervention" når dataene er "Gyldige", men deles med andre cacher. Denne cachen er ansvarlig for intervensjonen (delt intervensjon). På en bussleseforespørsel blir dataene levert fra denne cachen i stedet for fra minnet. MERSI og MESIF er den samme protokollen bare med en annen terminologi (F i stedet for R). Noen ganger blir R også referert til som "Shared Last" - sist delt (S L ) [37] . R-tilstanden (Recent) brukes ikke bare i MERSI = R-MESI-protokollen, men i flere andre protokoller. Denne tilstanden kan brukes sammen med andre stater. For eksempel RT-MONTHS , HR-MONTHS, HRT-MONTHS, HRT-ST-MONTHS [38] [39] . Alle protokoller som bruker denne tilstanden vil bli referert til som R-MESI type.
  • H = Hover - H-MESI (ekstra status for MESI-protokollen) [40]
    • Hover (H) (suspendert)-tilstanden lar en cache beholde en adresse i katalogen selv om den tilsvarende cache-linjeverdien er en ugyldig kopi. Hvis den tilsvarende verdien vises på bussen (sammenfallende adresse-tag) på grunn av en gyldig "Les" eller "Skriv", oppdateres cache-linjedataene med en gyldig kopi og dens tilstand er endret til S. Denne tilstanden kan brukes i kombinasjon med andre stater, f.eks. HR-MONTHS, HT-MONTHS, HRT-MONTHS, HRT-ST-MONTHS [38] [41] [42]
Interferens mellom Snoopy og prosessoraktivitet

Snoopy-aktiviteten krever tilgang til Cache Directory og kan komme i konflikt med samtidig prosessortilgang. Denne interferensen øker hurtigbufferforsinkelsen.

Tre løsninger kan brukes for å redusere eller eliminere denne interferensen:

  • Inkluderende multi-level cache
  • Separat instruksjon og databuffer
  • Dual-port og dual-directory
  1. To eller flere "inkluderende" hurtigbuffernivåer reduserer denne interferensen fordi omtrent 85-90 % [8] av prosessortilganger (for data) gjøres på det laveste hurtigbuffernivået.
  2. "Separate" cache -instruksjoner og data reduserer interferens fordi snoopy vanligvis bare gjøres på databufferen (se Skrivepolicy ), så konflikter på instruksjoner elimineres.
  3. Snoken bruker mesteparten av tiden sin på å overvåke parasittisk trafikk. En " dual-Port Directory " (katalog med to porter) eller " dual-cache " (cache med to porter - katalog + data) eller en " dual-directory " (dobbel katalog) [43] eliminerer nesten fullstendig interferens. En port / katalog brukes for snoopy og den andre for prosessoren (konflikter oppstår bare når snoopy og prosessor bruker samme oppføring, men dette er relativt sjeldent).
Snoopy Consistency Operations

Snoopy-aktiviteten krever tilgang til Cache Directory og kan komme i konflikt med samtidig prosessortilgang. Denne interferensen øker hurtigbufferforsinkelsen. Tre løsninger kan brukes for å redusere eller eliminere denne interferensen:

  • Inkluderende multi-level cache
  • Separat instruksjon og databuffer
  • Dual-Port og Dual-Directory
  1. To eller flere "inkluderende" hurtigbuffernivåer reduserer denne interferensen fordi omtrent 85-90 % [8] av prosessortilganger (for data) gjøres på det laveste hurtigbuffernivået.
  2. "Separate" cache -instruksjoner og data reduserer interferens fordi snoopy vanligvis bare gjøres på databufferen (se Skrivepolicy ), så konflikter på instruksjoner elimineres.
  3. Snoken bruker mesteparten av tiden sin på å overvåke parasittisk trafikk. En " dual-Port Directory " (katalog med to porter) eller " dual-Cache " (Cache med to porter - Directory + Data) eller en " dual-Directory " (Double Directory) [43] eliminerer nesten fullstendig forstyrrelser. En port / katalog brukes for snoopy og den andre for prosessoren (konflikter oppstår bare når snoopy og prosessor bruker samme oppføring, men dette er relativt sjeldent).

Det er tre operasjoner: busstransaksjoner, dataegenskaper og hurtigbufferoperasjoner:

  • Busstransaksjoner : hovedoperasjonene er:
    • Write Through : cache-linjen oppdateres både i cache og i MM eller bare i MM (skriv ingen allokering); enkel å implementere, høy båndbreddebruk. Det er bra for enkeltmanus.
    • Tilbakeskrivning : dataene skrives kun i hurtigbufferen. Dataene skrives tilbake i MM (Write-Back) bare når de vil bli erstattet (erstatning) eller når de blir bedt om av de andre cachene (se Skrivepolicy ); mellomløsning: Write Through for første skriving, Write-Back for følgende ( Write-once- protokoller og Bull HN ISI-protokoll [44] )
    • Write Allocate : i tilfelle glipp leses dataene av "eieren" eller av MM, så blir dataene skrevet i cachen (oppdatert - delvis skriving) (se Skrivepolicy )
    • Skriv no-Allocate : i tilfelle glipp skrives dataene i MM uten å involvere cachen, eller, som i Bull HN ISI-protokollen , skrives de i "eieren", det vil si i D- eller SD - cachen (eieroppdatering - oppdatering av 'Eier', hvis tilstede, ellers i MM; Write-no-Allocate er normalt assosiert med Write Through.
    • Bufferintervensjon (eller kort sagt "intervensjon")
      • Delt intervensjon: delt-ren intervensjon (intervensjon på uendrede data); i tilfelle Read Miss (manglende lesing) leveres dataene av "eieren" - E eller R / F eller til og med S i stedet for MM (se Illinois , IBM R-MESI type og Intel MESIF-protokoller ):
      • Dirty Intervention (intervensjon på modifiserte data): i tilfelle Read Miss blir dataene gitt av "eierne" M (D) eller O (SD) eller E (R) (Ikke for E (R) i det opprinnelige forslaget til MOESI-protokollen [45] og i noen andre implementeringer av MOESI-typen) i stedet for MM (f.eks. MOESI-protokollen, RT-MESI, ...)
      • "Intervensjon" er en bedre løsning enn "ikke-intervensjon" fordi cache-to-cache-transaksjoner er mye raskere enn å få tilgang til MM, pluss at det reduserer minnetrafikken (båndøkning). MESI utvidet Illinois og R-MESI type / MESIF er derfor mye mer effektive enn MOESI-protokollen (se MESI vs MOESI )
    • Ugyldiggjøring : i tilfelle Skrivetreff med status S (V) eller O (SD) (delt) sendes en busstransaksjon for å ugyldiggjøre alle kopiene av de andre cachene (Skriv-ugyldig)
    • Skrive-kringkasting (Skrive-oppdatering) : (distribuert skriving), i tilfelle "Skriv-treff" med status S (V) eller O (SD) (delt) sendes en oppdateringsskriving til alle andre cacher for å oppdatere kopiene deres (f.eks. Intel Nehalem [46] , Dragon protocol (Xerox), Firefly (DEC). Oppdatering av andre cacher kalles noen ganger også for Snarfing. Cachene snoper bussen og hvis det er et treff, tar cachen tak i dataene som passerer på bussen og oppdaterer cachen. Selv oppdateringen av H-statusen i ( H-MESI ) kan defineres som snarfing. I det første tilfellet skjer det bare i en distribuert skriveoperasjon, i det andre tilfellet både for lesing og skriving.
    • Intervensjonskringkasting : (Intervensjon med distribuert oppdatering): i tilfelle en intervensjonstransaksjon oppdaterer en cache med status H ( H-MESI ) sin ugyldige kopi med verdien sendt på bussen og statusen endres til S [41 ]
    • Write Invalidate vs broadcast: w rite Invalidate er best for flere skrivinger, vanligvis delvise skrivinger, utført av én prosessor før hurtigbufferlinjen leses av en annen prosessor. Write-broadcast (oppdatering) er bedre når du har en enkelt produsent til mange forbrukere av dataene, men det er verre når en cache oppdateres med data som ikke vil bli brukt senere (unødvendig økning i busstrafikk og økning i cache-interferens ) . Ugyldiggjøring er den vanlige løsningen.
  • Datakarakteristikker : Det er tre egenskaper ved hurtigbufferdataene:
    • Gyldighet : Alle ikke-ugyldige hurtigbufferlinjer, dvs. MOES / D-SD-RV-tilstander
    • Eksklusivitet : dataene er kun gyldige på en cache (udelte data) i tilstand M (D) eller E (R), med MM ikke oppdatert (skitten) i tilfelle M (D) og oppdatert (ren) i tilfelle av E (R);
    • Eierskap - Eiendom [47] : cachen som er ansvarlig for å gi de forespurte dataene i stedet for MM (intervensjon). - Avhengig av protokollen, kan hurtigbufferen som skal utføres være S - E - M i MESI Illinois , eller R / F - E - M i R-MESI type / MESIF eller M (D) eller O (SD) eller også E (R) (implementeringsavhengig) i MOESI-typen, (f.eks . AMD64 , [45] , Bull HN ISI [44] - se "Read Miss"-operasjon nedenfor).
  • Bufferoperasjoner : Bufferoperasjonene er:
    • Les treff: dataene leses fra hurtigbufferen. Staten forblir uendret; siden dette er en åpenbar operasjon, vil den ikke lenger bli vurdert senere, selv ikke i statlige transaksjonsdiagrammer
    • Les Miss : forespørselen om datalesing sendes på bussen; det er flere situasjoner:
      • Data lagret kun i MM : dataene leses fra MM; cachen er satt E (R) eller S (V); E (R) hvis en spesiell busslinje ( Delt linje ) brukes for å indikere " ingen datadeling ". Brukes i alle protokoller som har E (R)-tilstanden bortsett fra Write-once og Bull HN ISI -protokollene (se "Skriv treff" nedenfor).
      • Data lagret i MM og i en eller flere cacher i tilstand S (V) eller i R/F i R-MESI type/MESIF-protokollen : Det er tre situasjoner:
        • Illinois Protocol - Et prioritert nettverk brukes til å vilkårlig og midlertidig tildele eierskap til en S -kopi . Dataene leveres av den valgte hurtigbufferen. Den forespørrende cachen er satt til S ( delt intervensjon - intervensjon mellom data delt med MM clean);
        • R-MESI type / MESIF-protokoll med en cache i R / F -tilstand - delt eier ("eier" av delte cacher); dataene leveres av R / F -cachen . Bufferen som gir dataene endres til S og den forespørrende bufferen er satt til R / F (i read miss eierskap tas alltid fra den forespørrende cachen) - delt intervensjon ;
        • I alle andre tilfeller blir dataene levert av MM og den forespørrende cachen er satt til S (V).
      • Data lagret i MM og i en enkelt hurtigbuffer i E (R) tilstand: dataene leveres av E (R) cachen eller av MM, avhengig av protokollen; levert av E (R) i utvidet MESI (f.eks . Illinois , Pentium (R) II [48] ), R-MESI type / MESIF og i noen implementeringer av MOESI (f.eks . AMD64 ); den forespørrende cachen er satt til S (V), eller R / F i R-MESI type / MESIF-protokollen og E (R) -cachen endres til S (V) eller I i MEI-protokollen. I alle andre tilfeller er dataene levert av MM
  • Data endret i en eller flere cacher med utdatert MM :
  • MOESI-type protokoll - Data lagret i M (D) eller i O (SD) og de andre cachene i tilstand S (V): dataene sendes til den forespørrende cachen av "eieren" M (D) eller O (SD). Forespørselsbufferen er satt til S (V) mens M (D) endres til O (SD); MM forblir utdatert.
  • Protokolltype MESI eller MEI - Data lagret i M (D) og de andre cachene i tilstand S (V); det er to løsninger:
  1. dataene sendes fra cache M (D) til den forespurte cachen og samtidig i MM (f.eks . Illinois )
  2. operasjonen gjøres i to trinn: forespørselstransaksjonen er midlertidig suspendert. Du har "Copy Back" av dataene M (D) i MM, deretter fortsetter den ventende transaksjonen å lese dataene fra MM (f.eks. protokollene MESI og MSI Synapse )
Alle cacher er satt S (V)
    • Skriv treff : dataene skrives i cachen; det er flere situasjoner:
      • Buffer i S (V) eller R/F eller O (SD) tilstand (delte cacher)
        • Skriv ugyldig
          • Kopier tilbake: dataene skrives i cachen og en ugyldig transaksjon sendes på bussen for å ugyldiggjøre de andre cachene; cachen er satt M (D)
          • Write Through ( Write-once , Bull HN ISI ): data skrives i cache og i MM som ugyldiggjør alle andre cacher. Cachen er satt R (E)
        • Skriv kringkasting (f.eks . Firefly , Dragon ); dataene skrives i cachen og en "kringkastende" transaksjon sendes på bussen for å oppdatere alle de andre cachene som har en kopi; cachen settes M (D) hvis den "delte linjen" ikke er aktiv, ellers settes den O (SD). Alle andre cacher er satt til S (V)
      • Cache med status E (R) eller M (D) (eksklusivitet): skriving kan gjøres lokalt uten noen annen handling. Status er satt (eller forblir) M (D)
    • Skriv frøken
      • Skriv Tildel
        • Leseoperasjon med intensjon om modifisert operasjon ( RWITM ): Når det gjelder en leseoperasjon pluss en ugyldig kommando, blir hurtigbufferen skrevet (oppdatert); cachen som ber om er satt til M (D) og alle andre cacher er ugyldige
        • Skriv kringkasting (f.eks . Firefly , Dragon ): som for en Les Miss; hvis den "delte linjen" ikke er aktiv skrives dataene inn i hurtigbufferen og settes M (D), ellers som for en Skrivetreff - Skriv kringkasting
      • Write-no-Allocate : dataene sendes til MM, eller som i Bull HN ISI -protokollen , bare til D (M) eller SD (O) cachene hvis de er tilstede, og omgår cachen.

                                                                                Protokoller

  • JA                                                                      Skriv gjennom
  • MSI Synapse                                                                   
  • MEI                                                                   IBM PowerPC 750 [49] , MPC7400 [41]
  • MES Firefly                                                                  
  • MONTHS                                                                  Pentium II [48] , PowerPC, Intel Harpertown (Xeon 5400)
  • MOSI Berkeley                                                                
  • MOESI AMD64 [50] , AMD Opteron [28] , MOESI [45] , T-MESI IBM [42]                                                            

                                                                                Terminologi brukt

  • Illinois                                                                 D-VE-SI                     (= MONTH forlenget) [51]
  • Skriv én gang eller Skriv først                                      DRVI                        (= MÅNEDER)   [52] [53]
  • Berkeley                                                             D-SD-VI                     (= MOSI)  
  • Synapse                                                             DVI                           (= MSI)    
  • Firefly                                                                 D-VE-S                       (= MES) DES
  • Dragon                                                               D-SD (SM?) - SC-VE (= MOES) Xerox
  • Bull HN ISI                                                         D-SD-RVI                 (= MOESI) [44]
  • MERSI (IBM) / MESIF (Intel)-protokoll             R = Nylig - IBM PowerPC G4 , MPC7400 [33] [41]

                                                                               F = Forover - Intel [35] , Intel Nehalem [13] [46] [54]

  • RT-MESI                                                           T = Tagged - IBM [42]
  • HRT-ST-MESI                                                   H = Hover, R = Nylig, T = Tagget, ST = Delt-Tagget - IBM [38] [42]
  • IBM                                 T-Mu-Me-MSS L -I POWER4- protokoll (L2 syv stater)

                                                                                Mu = Uoppfordret Modifisert - Uoppfordret Modifisert Eksklusiv - ( M ) [55]

                                                                                M = Modifisert Eksklusiv - Modifisert Eksklusiv

                                                                                T = Tagget - Modifisert ikke-eksklusiv eier ( O )

                                                                                Me = Gyldig Eksklusiv - ( E )

                                                                                S = Delt

                                                                                S L = Delt siste kilde lokalt "- ( Delt eier lokalt )

                                                                                I = Ugyldig - ( I )

Katalogbasert - Sending av meldinger

SMP-systemer er kjent for å ha begrenset skalerbarhet. Multibankminnet og datatverrstangen [29] tillater parallell tilgang til minnet . Bruk av store cacher reduserer trafikken på systembussen, men ikke skrive-ugyldig (skriv med ugyldig) eller skrive-kringkasting (skriv med distribusjon). Den største begrensningen er at minneadressen må være snoopy ved å bruke en enkelt buss. For å overvinne denne begrensningen, er en ny arkitektur kalt " cc-NUMA " tatt i bruk.

cc-NUMA-systemet er et sett med SMP- systemer kalt " Noder " koblet via et tilkoblingsnettverk som kan være en kobling dannet av en enkelt eller dobbel toveis eller multi-ring, punkt-til-punkt-forbindelser [28] [35] eller en blanding av disse (se f.eks . IBM Power Systems [56] ), forbønn via buss (f.eks. NUMAq [57] ), tverrstang , segmentert buss (segmentert buss - NUMA Bull HN ISI ex Honeywell [58] ), Mesh-ruter , etc ..

Eksempler på sammenkobling:

I et NUMA-system er det tregere å få tilgang til en prosessor til eksternt minne på en ekstern node enn å få tilgang til sitt eget lokale minne. Av denne grunn kalles dette systemet NUMA ( N on Uniform M emory A ccess - ikke-uniform minnetilgang).

NUMA-arkitekturen kalles også distribuert delt minne (DSM) - distribuert delt minne [59] .

Normalt er hver node et SMP-system , der en prosessor kan være en enkelt prosessor eller en flerkjerne, eller en blanding av de to, eller en hvilken som helst annen type arkitektur. Fig. på siden er bare et eksempel.

Forskjellen i tilgangstid mellom et lokalt og et eksternt minne kan også være av en størrelsesorden, avhengig av typen tilkobling (raskere i den segmenterte bussen, tverrstangen og punkt-til-punkt-forbindelsen, tregere med den serielle ringforbindelsen ) .

Ekstern buffer

Terminologi:

(fra et node synspunkt)

  • Lokalt            minne - nodeminne
  • Eksternt           minne - minne for andre eksterne noder
  • Lokale                     data - data lagret i lokalt minne
  • Fjerndata                   - data lagret i eksterne minner
  • Remote              cache - node cache som lagrer data lest fra eksterne minner
  • Lokale cacher (L1-L3)  - node cacher som lagrer lokale og eksterne data

For å redusere forskjellene i tilgang mellom lokale og eksterne data, brukes en ekstern cache . Denne hurtigbufferen lagrer data som er lest fra andre eksterne minner . Normalt er denne cachen inkluderende-delt ( delt inkludert ) med MESI-protokollen. L1-L3 cacher kan utvides MESI type (f.eks . R-MESI , RT-MESI , etc.). Eventuelle eksterne data som er lagret i L1-L3-cachen, lagres også i denne cachen (for inkludering). Denne cachen er det 4. cache-nivået til noden kun for ekstern data (ekstern minnebuffer ), mens L1-L3 cache lagrer både lokale og eksterne data (global minnenode cache). Fra et internt synspunkt av en node kan fjernbufferen sees på som en utvidelse av det lokale minnet (fjerndata lagret lokalt).

Siden funksjonen til denne hurtigbufferen er å redusere fjerntilgangstiden minst like mye som tilgangstiden til ditt lokale minne, kan en hybridteknologi brukes - SRAM for katalogen, DRAM for databufferen [60] . Denne løsningen lar deg implementere tilstrekkelig store cacher som kreves av disse systemene.

Remote Cache kan lagre både instruksjoner (kode) og data (som operander), men normalt lagres bare dataene . Tilgang til private data, som kode og stabeldata, kan ofte behandles lokalt ved å kopiere koden (kodereplikering) fra en annen node (økt effektivitet). [61]

Konsistens av cacher i cc-NUMA

Koherensen av cacher i cc-NUMA-systemer (Cache Coherency-NUMA) oppnås ved å bruke protokollen kjent som Directory-based - Message-passing . Denne tilnærmingen ble først foreslått av Censier og Feaultrier [62] og også beskrevet i " The Directory-Based Cache Coherency Protocol for DASH Multiprocessor " [63] .

Siden normalt ikke alle noder har tilgang til de samme dataene samtidig, kan konsistenskontrollen være mye mer effektiv hvis den gjøres selektivt på kun de aktuelle nodene.

I cc-NUMA-systemer gjøres cache-koherens på systemnivå (inter-node) derfor gjennom en katalogbasert protokoll (basert på en katalog), ved bruk av en katalog knyttet til hver lokale minnekatalog som holder styr på den globale statusen til alle blokker i ditt lokale minne og en " indikatorbit " for å indikere hvilken node som har blokken lagret i den eksterne hurtigbufferen. Konsistens innenfor noden er derimot basert på bus-snoopy-ordningen.

Hver katalogoppføring har N-1 nodeflaggbiter og tre globale tilstander knyttet til hver minneblokk som er en kopi av tilstandene til alle eksterne cacher.

  • Ugyldig ( I ​​) eller Ubufret ( U ) - ingen node har ekstern hurtigbufferlås. Blokken er kun i hjemmet, altså i det lokale minnet som eier dataene
  • Shared-Remote ( S ) - Gyldige kopier finnes på de andre nodene
  • Exclusive-Remote ( E ) eller Dirty-Remote - blokken er bufret i den eksterne hurtigbufferen til kun én node. I MESI-protokollen kan blokken på den eksterne noden være Clean-Exclusive eller Dirty. Endringen fra Clean-Exclusive til Dirty gjøres lokalt uten å informere "hjemmekatalogen", dvs. katalogen til det lokale minnet som eier blokken. I MSI-protokollen kan låsen i den eksterne noden bare være i skitten tilstand selv om den ikke er modifisert [63] [64] .
  • Advarsel - ikke forveksle den lokale lagringskatalogen med den eksterne hurtigbufferkatalogen. Den første inneholder informasjon om lokale data, den andre om eksterne data

Det er fire mulige situasjoner for en node:

  • Lokal minnelesing
  • Lokal minneskriving
  • Ekstern minnelesing
  • Skrive fjernminnet
Lokal minnelesing
  • En lokal minnelesetransaksjon for samme node overvåkes og administreres på samme måte som i et normalt SMP-system.
  • L3 miss
    • I tilfelle L1-L3-miss, overvåkes transaksjonen på systembussen til noden av alle de andre L3-cachene og av den "lokale minnekatalogen", i dette tilfellet for å sjekke om dataene som skal leses er tilstede i den andre eksterne cacher og i hvilke noder. Den lokale minnekatalogen blir sett på og administrert som en katalog for en ekstra cache og mer presist som en "delt katalog" for alle eksterne cacher til alle eksterne noder. Den eneste forskjellen sammenlignet med L3 cacher (dannet av katalog + data) er at datafeltet og cachen "Tag" ikke er lagret i samme node som katalogen, men distribuert på de andre nodene. Kommunikasjonen mellom den lokale minnekatalogen og de eksterne cachene gjøres via en "Message-passing"-forbindelse (sende en melding), punkt-til-punkt eller distribuert ved hjelp av vektoren "Indicator bit" (feltet til indikatorbitene til noder).
    • I tilfelle status E (eksklusiv) i den lokale minnekatalogen, sendes en melding til den eneste eksterne hurtigbufferen til noden hvor dataene er lagret og venter på svar fordi hurtigbufferen kan være "skitten".
      • Hvis dataene er Dirty , sendes dataene tilbake til "hjemmet" og håndteres som om de kom fra en lokal cache med unntak av at "Shared-Dirty" ikke er tillatt mellom noder i MOESI-protokollen. Det kunne bare tillates med protokolltype T-måneder med "eieren" bare i "hjemmet" (migrering av "Dirty-Owner" i hjemmet), men normalt "Dirty-intervention" og "Shared-clean intervensjon " mellom noder brukes ikke (se f.eks. IBM POWER4-protokollen )
      • Tilstanden til den eksterne cachen og tilstanden til de tilknyttede L1-L3 cachene settes til "Delt" og tilstanden til den lokale minnekatalogen endres til S
    • Hvis dataene er lagret i en lokal "eier" L3-cache, leveres dataene av denne cachen (som kan være "shared-clean owner" eller "dirty-owner")
    • ellers fra lokalt minne
Lokalt minne skriv
  • Hit Delt i L3
    • Hvis det er truffet S i L3, sendes en "ugyldig" transaksjon på bussen til noden for å ugyldiggjøre alle andre kopier. Hvis det i den lokale lagringskatalogen er noen noder med status S , sendes en ugyldig transaksjon, via nodeindikatoren til hjemmekatalogen, til hver node som har en kopi
  • Treff Eksklusivt i L3
    • Skriving gjøres lokalt i L1-L3 (for inkludering) som normalt. Cacher er satt (eller forblir) "Dirty"
  • Gå glipp av
    • Som med et " lokalt minne lesemiss " med en ugyldig kommando ( RWITM ), så som med en "skrivetreffeksklusiv"
Ekstern minnelesing
  • Gå glipp av
    • En lokal minnelesetransaksjon (for et eksternt datum) overvåkes av alle L3-cachene og den eksterne cachen til noden din.
    • Hvis det er en "eier" L3-cache, leveres dataene av denne cachen
    • ellers hvis den "treffer" i den eksterne cachen til noden, blir dataene levert av denne cachen
    • ellers sendes en fjernlesingsforespørsel til "hjemme"-noden til dataene. "Hjemmet" håndterer denne forespørselen på samme måte som den gjør for en intern forespørsel. Den eneste forskjellen er at dataene sendes til forespørselsnoden i stedet. Forespørselsbufferen er satt til "Delt"
      • Når det gjelder "skitne" data i en annen node enn "hjemme", ber "hjemmet" om data fra denne noden, som beskrevet i operasjonen "les lokalt minnemiss" i tilfelle status E i katalogen fra lokal minne, så sendes dataene til den forespørrende noden. Eksempel: node "A" ber om data fra "hjem" "B". "B" ber om dataene fra node "C" som har "Dirty" data. Noden "C" sender dataene til "hjem"-noden "B" (kopi tilbake), "B" sender den tilbake til noden "A". Nodene "A" og "C" er satt til "Delt" så vel som den lokale minnekatalogen.
      • Det er andre mulige varianter: f.eks. node "C" sender dataene til node "B" (hjem) og samtidig til den forespørrende noden "A" (se DASH [63] og Intel QuickPath "Interconnect [35] ).
Eksternt minne skrive
  • Trykk på "Eksklusiv" i L3
  • Trykk på "Delt" i L3
    • En ugyldig transaksjon sendes til "hjemmet" for dataene og venter på skrivesamtykke. "Hjemmet" sender ugyldiggjøringstransaksjonen tilbake til alle nodene med dataene og sender deretter skrivesamtykket til den forespørrende noden. To samtidige skrivinger på forskjellige noder er dermed synkronisert.
  • Gå glipp av

Delt cache

Brukes vanligvis i flerkjernesystemer for konsistens og kostnadsreduksjon (plassmessig).

Flerkjernesystemer _

Multi -core ("flere integrerte prosessorer"), også referert til som chip multiprosessorer , flerkjernebrikker og mange-kjernebrikker , er en spesiell type multiprosessor der alle prosessorene er på samme MCM ( Multi-Chip Module ) brikke [ 66] [67]

Multi-core prosessorer er MIMD -systemer : forskjellige kjerner utfører forskjellige tråder ( Multithread / Multiple Instructions - parallell kjøring på samme kontekst av små sekvenser av programmerte instruksjoner), som opererer på forskjellige deler av minnet (Flere data).

En vanlig løsning for implementering av flerkjernesystemer er bruken av en inkluderende delt hurtigbuffer på flere nivåer for å opprettholde datakonsistens.

Inkludering tvinger dataene til å være konsistente. Data lagret i L1 lagres også i L2 (og i L3 hvis de brukes). Eventuelle endringer i L1 må også rapporteres i L2-cachen og så også i L3. Hvis L2 oppdateres eller ugyldiggjøres, må alle L1-cacher også ugyldiggjøres eller oppdateres (samme forhold mellom L2-L3).

Konsistensen av cacher opprettholdes ved bruk av en sentralisert delt cache-kontroller. Den delte cachen kan være L2, eller L3 hvis L2 er en privat cache.

Konsistensprotokollen er basert på en punkt-til-punkt meldingsoverføringsprotokoll som ligner på den som er beskrevet i cc-NUMA- systemet . Forskjellen er kun i katalogen, som i cc-NUMA-systemet er i forhold til minnet og ikke til den delte cachen.

Det er to typer implementering. Meldingskringkasting til alle L1-cacher eller bare til spesifikke L1-cacher som har dataene lagret. I det første tilfellet er konsistensprotokollen av snoopy-typen. Den delte cachen fungerer som en bro i stedet for systembussen, og sender transaksjoner tilbake til alle L1-cachene for snoking, men bare når det er nødvendig, det vil si når en data ikke er eksklusiv i den delte cachen. I det andre tilfellet, i den delte cache-katalogen er det en "indikatorbit" for hver L1-cache for å indikere hvilken L1 som kan ha dataene (Intel Nehalem [46] ).

cc-NUMA i flerkjernesystemer

Flerkjernesystemer kan kobles sammen for å danne et NUMA-system. Konsistens sikres gjennom meldingsoverføring mellom de delte cache L3-ene til de forskjellige nodene (se f.eks. Intel Nehalem [46] , AMD Opteron [28] [35] [68] , MCM Interconnections POWER5 IBM [7] [56] [69 ] osv.)

Virtuell, fysisk og pseudo-virtuell adressering

MMU

Memory Management Unit ( MMU ) er tilgangsadministrasjonsenheten til MM. Hovedfunksjonene er:

  • Adresseoversettelse fra virtuell til fysisk
  • Håndtering av missene til TLB
  • Sjekke tilgangstillatelsene til hurtigbufferlinjen og minnet:
1. - Veileder / Bruker 2. - beskyttelse av skrifter

TLB

Virtuelt minne er rommet sett av en prosess. Vanligvis er denne plassen mye større enn fysisk minne. Denne plassen er delt inn i sider med fast størrelse. Sidetabellen , vanligvis lastet inn i minnet, holder styr på hvor virtuelle sider lastes inn i det fysiske minnet. TLB ( Oversettelse Lookaside Buffer - sideoversettelsesminne) eller Page Table cache eller sideoversettelsesbuffer - sideoversettelsesbuffer ) er en hurtigbuffer av sidetabellen, det vil si at bare et undersett av innholdet er lagret i TLB. TLB, som for minnebufferen, kan være "atskilte" instruksjoner (ITLB) og data (DTLB) eller "forent", så vel som direkte kartlagt eller sett assosiativ eller fullstendig assosiativ. Generelt følger organisasjonen organiseringen av den tilknyttede cachen, men kan organiseres uavhengig av dette (se TLB ). Som med cachen, kan et andre nivå av TLB også brukes til å øke effektiviteten ved å legge til en L2 TLB (f.eks. Intel Nehalem [46] ).

Cachen kan adresseres fysisk eller virtuelt. Det er fordeler og ulemper med begge implementeringene, men fysisk adressering er vanligvis det som vanligvis brukes.

Virtuell adressering

I fig. Nedenfor er et eksempel på en virtuell adresse med 4 GB virtuell plass, 4 MB cache, 4 KB sidestørrelse og 256 B cache linjestørrelse.

Det virtuelle eller logiske rommet er delt inn i sider. MSB + PA danner sideadressen til det virtuelle rommet VPA ( Virtual Page Address). Cachen er også delt inn i sider.

Bufferen lagrer et undersett av sidene med virtuell plass. Det adresseres av indeksen som er dannet av PA + PA Offset der PA (Page Address) er sideadressen til hurtigbufferen og PA Offset er adressen til cachelinjen på siden, mens Offset er den interne adressen , på bytenivået til hurtigbufferlinjen.

Ved virtuell eller logisk adressering adresseres en cache direkte av den virtuelle indeksadressen uten først å måtte konvertere den virtuelle adressen til fysisk. TAG- er er også virtuelle ( logisk MSB ). Denne typen adressering kalles også Virtual Index – Virtual TAG (VIVT).

I et multiprosesseringsmiljø kan forskjellige logiske adresser til kontekster eller forskjellige prosesser referere til den samme fysiske adressen, og den samme logiske adressen til en prosess kan kartlegge forskjellige fysiske adresser som forårsaker et konsistensproblem, mens tvert imot innenfor samme kontekst, den samme logiske adressen Adressen er alltid i forhold til den samme fysiske adressen.

Det er tre mulige løsninger:

  1. Flushing (bokstavelig talt flushing = ugyldiggjøring) av cachen ved hver kontekstbryter ,
  2. Legg til en ID (ASID - Address Space IDentifier) ​​eller et Context Number (CTX) eller prosessnummer (adresseplassidentifikator, kontekstnummer eller prosessnummer), for å skille mellom de ulike prosessene/kontekstene [70] .
  3. Legg til i hurtigbufferen den tilsvarende fysiske adressen som må sammenlignes med den fysiske adressen hentet fra TLB (tilgjengelig parallelt - "se til side" - sett ved siden av), for å bekrefte den riktige virtuell-fysiske tilknytningen til adressen ( Virtuell indeksadressering - Fysisk TAG - VIPT).
Konsistensproblem

Siden forskjellige logiske adresser i forskjellige kontekster kan referere til den samme fysiske adressen (delte data), kan mer enn én minneplassering lagre de samme dataene, noe som forårsaker et konsistensproblem i tilfelle skriving. Bare én minneplassering vil bli oppdatert.

Det er to hovedløsninger [71]

  1. Synonymforebygging _ - Bruke programvaren for å forhindre eller unngå synonymer
  2. Dynamisk synonymgjenkjenning - Maskinvarestøtte for å hjelpe programvaren til alle eller hovedoppgaven (programmet) for å opprettholde konsistens i nærvær av synonymer

I alle fall må hurtigbufferen alltid være ugyldig når den virtuelle-fysiske kartleggingen endres, f.eks. i tilfelle sideerstatning - sideerstatning .

Fysisk adressering

Ved fysisk adressering blir TLB (*) først adressert ved å bruke den virtuelle adressen L-MSB + LPA , deretter brukes den fysiske adressen ( PPA ) hentet fra TLB pluss PPA Offset for å adressere cachen. Kun den delen av den virtuelle adressen som er forskjellig fra den fysiske adressen konverteres, dvs. "L.MSB" og "LPA".

TLB er en cache for Page Table cache og administreres som en normal cache med i tillegg at CTX assosiert med den logiske adressen sammenlignes med CTX lagret i TLB fordi endring av kontekst endrer LPA-PPA assosiasjonen ( se virtuell adressering ).

Denne løsningen ( fysisk indeks - fysisk TAG - PIPT-adressering) er mye enklere og unngår ethvert problem med tvetydighet, men er tregere fordi tilgang til TLB er nødvendig først .

(*) - Opprinnelig var hurtigbufferstørrelsen liten og lik sidestørrelsen, så virtuell og fysisk "indeks" var sammenfallende og TLB ble åpnet parallelt (på siden - se til side, hvorfra navnet) bare for å bekrefte MSB-er, som i virtuell adressering .

Pseudo-virtuell adressering

  • Løsning brukt i Honeywell Bull Italia -systemer [72] - F. Zulian - US Patent N. 5.165.028
  • Denne løsningen gir alle fordelene til begge tidligere løsninger.

Med henvisning til fig. Virtual Space Address Structure , den virtuelle/logiske "Index"-adressen er delt inn i to deler: Logisk sideadresse (LPA - logisk sideadresse eller sidenummer) og LPA Offset (adressen til hurtigbufferlinjen på siden). Offset er den interne adressen (på bytenivå) til hurtigbufferlinjen.

Den virtuelle og den fysiske sideforskyvningen faller sammen (så vel som, selvfølgelig, forskyvningen ). Den virtuelle adressen og den fysiske adressen er forskjellige for L.MSB og for LPA. TLB konverterer henholdsvis den logiske L.MSB og den logiske sideadressen (LPA) til fysisk P.MSB og til fysisk sideadresse (PPA = fysisk sideadresse). Ved fysisk adressering danner PPA + LPA Offset den fysiske indeksen som brukes til å adressere cachen.

Romlig plassering betyr at dersom en tilgang gjøres på en side er det svært mange sjanser for at neste tilgang (i forhold til samme type) blir gjort på samme side .

Separat for instruksjonene og for stabeldata og data (hvis stabelbufferen brukes), er sannsynligheten for at neste tilgang vil bli gjort på samme side som forrige tilgang veldig høy på grunn av en veldig stor romlig lokalitet (4 KB) eller mer sammenlignet med for eksempel en mye mindre størrelse på en hurtigbufferlinje).

Den forrige logiske/virtuelle sideadressen (LPA) med dens kontekstnummer (CTX) og den tilsvarende fysiske sideadressen (PPA) lagres i et dedikert register.

Ved neste tilgang sammenlignes den nye logiske sideadressen (sammen med CTX) med adressen som tidligere er lagret i LPA-registeret. Hvis de faller sammen (treff), brukes det tilsvarende fysiske adresseregisteret for PPA-siden til å adressere hurtigbufferen direkte, uten behov for tilgang til TLB som i tilfellet med virtuell adressering (derav navnet Pseudo Virtual addressing - Pseudo-adresse Virtual).

I tilfelle en glipp, leveres PPA av TLB, som i tilfelle av fysisk adressering uten straff med hensyn til sistnevnte.

Denne tilnærmingen er effektiv hvis et sett med "LPA-PPA"-registre er reservert for hver type funksjon: en for instruksjoner, to for operander (instruksjoner kan ha opptil to adresser til operander) og muligens en for datastabel. I tillegg til å øke effektiviteten i flertrådede systemer , kan en gruppe dedikerte "LPA-PPA"-registre brukes for hver tråd.

Merk - Disse registrene kan sees på som en L1-cache for TLB med en enkelt oppføring, separat for hver type data (instruksjoner, data1, data2, stack) og for hver tråd, dvs. en L1 TLB-cache laget med registre og derfor veldig rask.

Med denne løsningen, praktisk talt uten ekstra kostnader, i nesten alle tilfeller, og spesielt for instruksjoner og sekvensielle datastrenger, gjøres adresseringen fysisk uten behov for å vente på oversettelsen av adressen fra virtuell til fysisk, akkurat slik det skjer i i tilfellet med virtuell adressering, og uten behov, med hensyn til sistnevnte, å ugyldiggjøre ( tømme ) hurtigbufferen i tilfelle sideerstatning (sideerstatning), noe som eliminerer ethvert konsistensproblem.

Merknader

  1. ^ FPO IP-forskning og fellesskap
  2. ^ FPO IP-forskning og fellesskap
  3. ^ FPO IP-forskning og fellesskap
  4. ^ https://www.britannica.com/technology/cache-memory
  5. ^ https://www.merriam-webster.com/dictionary/cache
  6. ^ Denne definisjonen stammer direkte fra den iboende måten å betjene selve cachen på og trenger derfor ikke referansekilder. Cachen er per definisjon et skjult minne som vanligvis er mellom et minne og brukeren (vanligvis en prosessor). Mellom brukeren og minnet, hvor informasjonen er lagret, kan det være andre brukere av dataene som skal leses, for eksempel andre cacher. Ved mottak av data vet ikke prosessoren om det kommer fra en cache eller fra minnet. Det samme i tilfelle av flere cacher i kaskade. L1 (den første cachen) vet ikke om dataene kom fra en andre cache (L2) eller fra minnet. Ditto for en mulig tredje cache. For eksempel er L3-cachen usynlig for både L2-cachen og L1-cachen og også for prosessoren som er brukere av L3-innholdet. Cachen er derfor et minne som er usynlig for alle nivåer av høyere brukere (i dette eksemplet L2, L1 og prosessor). Denne definisjonen er generell og gjelder for alle andre typer cacher hvor det kan være flere brukere i kaskade
  7. ^ a b c d e f POWER4-prosessorens introduksjons- og innstillingsveiledning par. 2.4 - Arkivert kopi ( PDF ), på web.eecs.utk.edu . Hentet 26. september 2014 (arkivert fra originalen 6. desember 2014) .
  8. ^ a b c d Arkitekturanalyse av tett koblede multiprosessorsystemer - F. Zulian Honeywell (Bull Italia 1987)
  9. ^ En annen mulig hash -kodingsalgoritme , men noen ganger bare brukt for TLB , er " bit XORing " av adressen. Adressereduksjon oppnås ved å lage en XOR (eksklusiv ELLER) mellom bitpar. Denne metoden genererer pseudo-tilfeldig adressering.
  10. ^ Athlon II eller Phenom II: Trenger CPU-en din L3-buffer ? , i Tom's Hardware , 6. oktober 2009. Hentet 28. februar 2017 .
  11. ^ a b IBM RS / 6000 Scientific and Technical Computing: POWER3 Introduksjon og Tuning Guide (Kap. 7.1 s.88)
  12. ^ Ytelsesevaluering av retningslinjer for buffererstatning for SPEC CPU2000 Benchmark Suite ( PDF ), på ece.uah.edu .
  13. ^ a b Sammenligning av bufferarkitekturer og koherensprotokoller på x86-64 Multicore SMP-systemer - https://people.freebsd.org/~lstewart/articles/cache-performance-x86-2009.pdf
  14. ^ Arkitekturprogrammererhåndbok "3.9.4 Cache Operation" - http://developer.amd.com/wordpress/media/2012/10/24593_APM_v21.pdf Arkivert 3. mars 2016 på Internet Archive .
  15. ^ Intel Iris Pro 5200 Graphics Review: Core i7-4950HQ testet - https://www.anandtech.com/show/6993/intel-iris-pro-5200-graphics-review-core-i74950hq-tested/3
  16. ^ pssem13010400fa.indd ( PDF ), fra research.ibm.com . Hentet 3. mai 2019 (arkivert fra originalen 4. mars 2016) .
  17. ^ Anand Lal Shimpi, Intel Iris Pro 5200 Graphics Review: Core i7-4950HQ testet . Hentet 28. februar 2017 .
  18. ^ RS / 6000 Scientific and Technical Computing: POWER3 Introduksjon og Tuning Guide - Arkivert kopi ( PDF ), på redbooks.ibm.com . Hentet 27. juli 2006 (arkivert fra originalen 21. juli 2006) . (Kap. 2.1 s. 7-8)
  19. ^ Databuffere for Superscalar-prosessorer - http://pages.saclay.inria.fr/olivier.temam/files/eval/JNT97.pdf
  20. ^ Dataminnesystemer med høy båndbredde for superskalarprosessorer - ftp://ftp.cs.wisc.edu/pub/techreports/1990/TR968.pdf
  21. ^ Funksjonelle prinsipper for hurtigbufferminne - multiportering. , på alasir.com . Hentet 28. februar 2017 .
  22. ^ Sammenligning av multiporterte bufferskjemaer - https://www.researchgate.net/publication/221134115_Comparing_Multiported_Cache_Schemes/file/32bfe50fb1759c4f80.pdf
  23. ^ Om databufferdesign med høy båndbredde for prosessorer med flere utgaver - https://web.eecs.umich.edu/~taustin/papers/MICRO30-bwcache.pdf
  24. ^ BM RS / 6000 Scientific and Technical Computing: POWER3 Introduction and Tuning Guide (Ch 7.1 s. 89) - Arkivert kopi ( PDF ), på redbooks.ibm.com . Hentet 27. juli 2006 (arkivert fra originalen 21. juli 2006) .
  25. ^ BM RS / 6000 Scientific and Technical Computing: POWER3 introduksjons- og tuningveiledning kap. 2.1 s. 7 - kap 7.1 s.89 - Arkivert kopi ( PDF ), på redbooks.ibm.com . Hentet 27. juli 2006 (arkivert fra originalen 21. juli 2006) .
  26. ^ John L. Hennessy og David A. Patterson, Computer Architecture: A Quantitative Approach , 2. utgave. Morgan Kaufmann Publishers Inc., 1996.
  27. ^ a b c d AMD Opteron delt minne MP-systemer - http://www.cse.wustl.edu/~roger/569M.s09/28_AMD_Hammer_MP_HC_v8.pdf
  28. ^ a b Multiprosessorsystem med delt minne - http://www.freepatentsonline.com/5701413.html
  29. ^ Metode for overføring av data i et multiprosessordatasystem med tverrstang-sammenkoblingsenhet - https://www.google.it/patents/EP0923032A1?cl=en
  30. ^ Spesifikasjon og verifikasjon av PowerScale Bus Arbitration Protocol: Et industrielt eksperiment med LOTOS, kap. 2, side 4 - ftp://ftp.inrialpes.fr/pub/vasy/publications/cadp/Chehaibar-Garavel-et-al-96.pdf
  31. ^ a b MPC7400 RISC mikroprosessor brukerhåndbok - http://pccomponents.com/datasheets/MOT-MPC7400.PDF
  32. ^ Ravi Kumar Arimilli, John Steven Dodson og John Michael Kaiser, Cache-koherensprotokoll med nylig lest tilstand for data og instruksjoner , US5996049 A, 30. november 1999. Hentet 28. februar 2017 .
  33. ^ a b c d e En introduksjon til Intel® QuickPath Interconnect - http://www.intel.ie/content/dam/doc/white-paper/quick-path-interconnect-introduction-paper.pdf
  34. ^ Herbert HJ Hum og James R. Goodman, Forward state for use in cache coherency in a multiprocessor system , US6922756 B2, 26. juli 2005. Hentet 28. februar 2017 .
  35. ^ BM PowerPC 476FP L2 Cache Core Databook - Arkivert kopi ( PDF ), på www-01.ibm.com . Hentet 1. november 2016 (arkivert fra originalen 18. desember 2014) .
  36. ^ a b c Cache Ccoherency Protocol inkludert en HR-stat - IBM-patent - https://www.google.com/patents/US6275908
  37. ^ Ravi Kumar Arimilli, John Steven Dodson og Jerry Don Lewis, Cache coherency protocol with tagged state for modified values ​​, US6334172 B1, 25. desember 2001. Hentet 28. februar 2017 .
  38. ^ Ravi Kumar Arimilli, John Steven Dodson og Jerry Don Lewis, Cache coherency protocol including an HR state , US6275908 B1, 14. august 2001. Hentet 28. februar 2017 .
  39. ^ a b c d Cache-koherensprotokoll med nylig lest tilstand for data og instruksjoner - IBM-patent - https://www.google.com/patents/US5996049
  40. ^ a b c d Cache Coherency Protocol med tagget tilstand for modifiserte verdier - IBM-patent - https://www.google.com/patents/US6334172
  41. ^ a b Handy, Jim. "Cache Memory Book", Academic Press, Inc., 1998, s. 130, s. 208 - http://books.google.it/books?hl=it&id=-7oOlb-lCpMC&q=208
  42. ^ a b c Bufferminne og relatert konsistensprotokoll, oppfinner Ferruccio Zulian, Bull HN ISI - https://www.google.com/patents/EP0396940B1?cl=en
  43. ^ a b c Sweazey, P., og Smith, AJ En klasse med kompatible cache-konsistensprotokoller og deres støtte av IEEE Futurebus. I Proceedings of the 13th International Symposium on Computer Architecture . IEEE. New York, 1986, s. 414-423.) - http://pdf.aminer.org/000/419/524/a_class_of_compatible_cache_consistency_protocols_and_their_support.pdf
  44. ^ a b c d e Cache-organisering og minneadministrasjon av Intel Nehalem Computer Architecture - Trent Rolf - Arkivert kopi ( PDF ), på rolfed.com . Hentet 26. september 2014 (arkivert fra originalen 30. august 2014) .
  45. ^ Den mer restriktive definisjonen av "eier" gitt i MOESI-protokollen må ikke forveksles med denne mer generelle definisjonen
  46. ^ a b Pentium Pro og Pentium II systemarkitektur s. 160 - Av T. Shanley - http://books.google.it/books?id=MLJClvCYh34C&pg=PA160&lpg=PA160&dq=Pentium+protocol+cache&source=bl&ots=gaOu-EvaTy&sig=QQEM1krp-H_0KUUHWT6&page =VDW2ZXHWT6&page =VDW2ZXHWT6&page =VDWZ6TW6T&page =VDW6T6T6T1&page % 20protocol% 20cache & f = usant
  47. ^ MPC750UM / D 12/2001 Rev. 1 MPC750 RISC Microprocessor Family User's Manual - http://www.freescale.com/files/32bit/doc/ref_manual/MPC750UM.pdf Arkivert 24. september 2015 på Internet Archive .
  48. ^ AMD64 Technology - AMD64 Architecture Programmer's Manual Volume 2: System Programming - http://developer.amd.com/wordpress/media/2012/10/24593_APM_v21.pdf Arkivert 3. mars 2016 på Internet Archive .
  49. ^ Mark S. Papamarcos og Janak H. Patel. I ISCA '84: Proceedings of the 11th annual international symposium on Computer architecture, side 348 {354, New York, NY, USA, 1984. ACM - https://web.archive.org/web/20150521112759/http:// www.researchgate.net/profile/Janak_Patel4/publication/220771512_A_Low-Overhead_Coherence_Solution_for_Multiprocessors_with_Private_Cache_Memories/links/00463519b8d139e4010000
  50. ^ Bruke hurtigbufferminne for å redusere prosessorminnetrafikk ". Proceedings of the 10th annual international symposium on Computer architecture - ISCA '83. International Symposium on Computer Architecture: Stockholm, Sweden, June 13–17, 1983.pp. 127-128 - http://courses.cs.vt.edu/cs5204/fall11-kafura/Papers/TransactionalMemory/Goodman-SnoopyProtocol.pdf
  51. ^ Avansert datamaskinarkitektur, 2E s. 301 - Av Hwang - http://books.google.it/books?id=m4VFXr6qjroC&pg=PA301&lpg=PR10&focus=viewport&dq=Multiprocessors+and+Multicomputers+7.2+Cache+Coherence+and+Synchronization&hl=it
  52. ^ David Kanter, The Common System Interface: Intel's Future Interconnect , i Real World Tech , 28. august 2007, s. 5. Hentet 12. august 2012 .
  53. ^ Spesialstatus - Forespørsel om en "dobbeltord" lese- og skrivereservasjon (64-biters implementeringer)
  54. ^ a b IBM POWER Systems Overview - https://computing.llnl.gov/tutorials/ibm_sp/ Arkivert 27. mai 2010 på Internet Archive .
  55. ^ SourceForge - http://lse.sourceforge.net/numa/faq/system_descriptions.html
  56. ^ Bull HN F. Zulian - A. Zulian patent - Datasystem med en buss som har en segmentert struktur - http://www.freepatentsonline.com/6314484.html
  57. ^ NUMA Architecture - http://www.dba-oracle.com/real_application_clusters_rac_grid/numa.html
  58. ^ Databehandlingssystem med CC-NUMA (cache-koherent, ikke-uniform minnetilgang) arkitektur og ekstern cache innlemmet i lokalt minne - http://www.freepatentsonline.com/6243794.html
  59. ^ Katalogbasert CacheCoherence - Parallell Computer Architecture par. 1.3.2 s. 48 - http://www.dte.eis.uva.es/Docencia/ETSII/SMP/archivos/archibak/culler.pdf Arkivert 18. mai 2015 på Internet Archive .
  60. ^ En ny løsning på sammenhengsproblemer i multicacher-systemer - Censier og Feaultrier - http://www.cs.auckland.ac.nz/courses/compsci703s1c/resources/Censier.pdf
  61. ^ a b c Proceedings of the 17th Annual International Symposium on Computer Architecture, IEEE 1990, side 148-159; D. Lenosky et al: The Directory-Based Cache Coherency Protocol for DASH Multiprocessor - http://www.cse.wustl.edu/~roger/569M.s09/p148-lenoski.pdf
  62. ^ Katalogbasert CacheCoherence - Parallell Computer Architecture kap. 8 s. 513 - http://www.dte.eis.uva.es/Docencia/ETSII/SMP/archivos/archibak/culler.pdf Arkivert 18. mai 2015 på Internet Archive .
  63. ^ SourceForge - http://lse.sourceforge.net/numa/faq/
  64. ?? _
  65. ^ https://scholar.google.it/scholar_url?url=http://www.itu.dk/people/jhh/thesis/references/36%2520-%2520Chip%2520Makers%2520Turn%2520to%2520Multicore%2520Processors. pdf & hl = it & sa = X & scisig = AAGBfm26PHbY3VJRZqQtLux3ac90MmK1rQ & oi = scholarr & ei = pXGmVPnBAsn7Uti3g7AL & ved = 0CCIQgAMoATAA
  66. ^ Cache-koherensteknikker for flerkjerneprosessorer - Michael R. Marty - http://research.cs.wisc.edu/multifacet/theses/michael_marty_phd.pdf
  67. ^ Av NUMA på POWER7 hos IBM - https://www-03.ibm.com/systems/resources/pwrsysperf_P7NUMA.pdf
  68. ^ Høyhastighets minne- og minneadministrasjonssystem - Sun Microsystems - https://www.google.com.tr/patents/US4550368
  69. ^ Virtuelle adressebuffere - http://www.ece.umd.edu/class/enee646.F2007/Cekleov1.pdf
  70. ^ Bufferminne med pseudo-virtuell adressering - Honeywell Bull Italia - https://www.google.com/patents/US5165028

Bibliografi

  • Jim Handy, The Cache Memory Book . Academic Press, Inc., 1998. ISBN 0-12-322980-4

Relaterte elementer

Eksterne lenker