T9.2/T10.2/T11.1 Minnehierarki og hurtigbuffer Flashcards
Mindre minner er typisk raskere enn
store minner
raske minneteknologier tar mer
plass og koster dermed mer enn trege minneteknologier
Et program aksesserer relativt få
dataelementer i et kort tidsrom
⭐️ Lokalitet i tid
Hvis et program bruker et dataelement, er det sannsynlig at det vil bruke det igjen snart
⭐️ Lokalitet i rom
Hvis et program bruker et dataelement, er det sannsynlig at det vil bruke et dataelement på en adresse i nærheten snart
⭐️ Hvorfor oppstår lokalitet?
Det oppstår som en konsekvens av hvordan vi programmerer
⭐️ Hvordan og hvorfor kan minnehierarkiet illusjonen av et stort og raskt minne?
Ved å utnytte lokalitetsprinsippet
⭐️ Minnehierarki
En struktur som bruker flere nivåer med minner; når distansen fra prosessoren øker, vil størrelsen på minnet og aksesstiden begge øke imens kostnaden per bit synker
Hva er formålet med minnehierarkiet?
Å gi brukeren så mye minne som mulig med den billigste teknologien, samtidig som man skal gi brukeren farten man får fra det raskeste minnet
Data i minnehierarkiet kopierers kun mellom
to nivåer ved siden av hverandre om gangen
Hvordan bestemmer vi hva vi skal lagre i det minste minnet?
Vi flytter dataelementene nær prosessoren når de blir aksessert, og flytter dataelementer lengre fra prosessoren når vi ikke har brukt de på en stund og trenger mer plass
⭐️ Hurtigbuffer
En maskinvarestyrt minneenhet som kan lagre n dataelementer
⭐️ Blokk
Den minste enheten av informasjon som enten kan være eller ikke være i en cache
Cache miss
En forespørsel for data fra cachen som ikke kan bli oppfylt pga. dataene ikke er tilstede i cachen
Dersom et cache miss oppstår, må vi få prosessoren til å vente inntil
minnet responderer med dataen vi ønsker
Hit rate
Den andelen av minneaksesseringer som man finner på et nivå av minnehierarkiet
Hit time
Tiden som kreves for å aksessere et nivå av minnehierarkiet, inkl. tiden som kreves for å avgjøre hvorvidt aksesseringer var en hit / miss
Miss rate
Den andelen av minneaksesseringer som man ikke finner i et nivå av minnehierarkiet
Miss penalty
Tiden som kreves for å hente en blokk til et nivå av minnehierarkiet fra et lavere nivå. inkl. tiden det tar å aksesserer blokken, overføre den fra et nivå til et annet, sette blokken inn i det nivået der det var et “miss” også gi blokken videre til der forespørselen ble sendt frs
⭐️ Hvordan konstruerer man et direktetilordnet hurtigbuffer?
- Vi bruker bit 11-2 til indeks fordi sekvensiell aksess er vanlig
- Hver blokk må ha en «valid» bit; Vi trenger disse ved oppstart og hvis vi må tømme hurtigbufferet
- Hver adresse har et “tag” felt og en “cache” indeks
“Tag” felt brukes til
å sammenligne tag felt til blokken
Tags
Et felt i en tabell brukt av et minnehierarki som inneholder adressen for informasjon som trengs for å identifisere hvorvidt en assosiert blokk i hierarkiet korresponderer til det etterspurte ordet
⭐️ Valid bit
Et felt i tabellene i minnehierakiet som indikerer at den assosierte blokken i hierarkiet inneholder gyldig data
“Cache” indeks brukes til
å velge blokk
⭐️ Direkte-tilordnet hurtigbuffer
En hurtigbuffer struktur der hvor hver minne lokasjon er mappet til en eksakt lokasjon i hurtigbufferet
⭐️ Hvordan kan man utvide en direktetilordnet hurtigbuffer til å håndtere hurtigbufferblokker som består av mer enn ett ord?
- Indeks flyttes mot venstre
- Legger til feltet: Block offset
- Færre bit i tag
- Legger til en multiplekser for å hente rett ord
Hva er fordelene med større blokker?
- Bedre utnyttelse av lokalitet i rom
Hva er ulempene med større blokker?
- Plass til færre blokker i hurtigbufferet
- Kostnaden ved å hente nye data øker
⭐️ Hvordan kan hurtigbuffere integreres i en samlebåndsarkitektur?
- Cache hit: Gir hurtigbufferet en adresse og får instruksjon/data tilbake i samme sykel
- Cache miss: Fryser samlebåndet inntil den manglende hurtigbufferblokken er hentet fra hovedminnet
- Legger til en instruksjonshurtigbuffer og datahurtigbuffer
⭐️ Hvordan håndterer hurtigbuffere skriveoperasjoner?
- To skriveprinsipper for cache hit: “write-through” og “write back”
- Prinsipper dersom man bommer på skriveprinsippene: “no write allocate” og “write allocate”
- Legges ofte til write buffer - lagrer nylig skrevne data frem til vi kan oppdatere hurtigbufferet
⭐️ “Write through”
Oppdatere blokken og det neste lavere nivået i minnehierarkiet hver gang blokken skrives til, for å forsikre at data alltid er konsistent mellom de to
Hva er løsningen på den dårlige ytelsen gitt av “write-through”?
Write buffer
Write buffer
En kø som holder data imens data venter på å bli skrevet til minnet
⭐️ “Write back”
Oppdatere det lavere nivået i minnehierarkiet når blokken er erstattet
⭐️ “No write allocate”
Vi skriver rett til minnet
⭐️ “Write allocate”
Vi henter blokken fra minnet før vi skriver til den
I et direktetilordnet hurtigbuffer kan vi bare plassere en adresse
på ett sted
⭐️ Hvorfor kan settassosiative og fullassosiative hurtigbuffere øke treffraten?
Ved mer fleksibel plassering av blokker. Økende grad av assosiativitet øker treffraten.
Mer fleksibel plassering av blokker vil si at vi kan
velge mellom flere blokker når vi skal kaste ut noe
⭐️ Settassosiativ hurtigbuffer
En hurtigbuffer med et satt antall lokasjoner hvor hver blokk kan bli plassert
⭐️ Fullassosiativ hurtigbuffer
En hurtigbuffer struktur der hvor en blokk kan bli plassert i hvilken som helst lokasjon i hurtigbufferet
Hvorfor er fullassosiativt hurtigbuffer dyrt?
Vi må sammenligne tag fra adressen med alle tags i hurtigbufferet
Minnelatens
Antallet klokkesykler det tar å hente en verdi fra en minnenhet
Beregningsintensivt program
Bruker en relativt stor andel av kjøretiden på beregning
Minneintensivt program
Bruker en relativt liten andel av kjøretiden sin på beregning
Jo mer minneintensiv applikasjonen er, jo mer påvirker minnelatensen
ytelsen
Hvordan kan vi øke ytelsen i minnesystemet?
Øke treffraten i hurtigbufferet
Redusere tiden det tar å hente
Hva er det typiske valget for å velge mellom flere blokker når vi skal kaste ut noe?
LRU (Least Recently Used)
Least Recently Used (LRU)
En erstatningsmetode der blokken som erstattes er den som har vært ubrukt i lengst tid
Hvordan øker man ytelsen til minnesystemet med et flernivå hurtigbuffer?
Flere nivåer med hurtigbuffer reduserer latensen til bom fordi noen bom nå treffer nivå 2 hurtigbufferet
⭐️ Hvordan kan man på programvarenivå påvirke treffraten i hurtigbuffere?
Blokking
Blokking
Vi reduserer antallet minneaksesserer i programmer mellom hver aksess til samme data - bedre lokalitet.
Hvordan påvirker blokking treffraten i hurtigbuffere på programvarenivå?
Blokking forbedrer lokalitet i programvare ved å gruppere data som ofte brukes sammen i nærliggende minneområder