Konsepter:Cache

Fra CodeWiki

Gå til: navigasjon, søk

Ved normal programkjøring vil det være svært mye gjenbruk av instruksjoner og data. For eksempel ser vi for oss en programløkke der vi kjører om igjen de samme instruksjonene et antall ganger og der utgangen fra løkken er bestemt av betingelsene i denne. Dette danner grunnlaget for å legge inn en mindre, men svært rask hukommelse så nær prosessorkjernen som mulig. Når prosessoren skal aksessere minnet, sjekker den først cachen. Hvis data finnes her leses disse med en hastighet 10 ganger raskere enn om vi måtte lese fra internminnet (RAM). Når data finnes i cachen, sier vi at vi har en cache hit. I motsatt tilfelle kalles vi det cache miss.

Hvis Cachen skulle være full, og dataen vi leter etter ikke finnes der, hentes det fra internminnet og byttes ut i cachen med "least recently used", altså minst brukte datafelt.

Cachehukkomelsen skal inneholde data og instruksjoner som er kopi av innholdet i RAM'en. Cachen er ikke byteorganisert, men bygd opp av såkalte cachelinjer som hver består av mange byter. Det er i hovedsak tre måter å organisere cachehukommelser på,

  • Direct Mapped Cache (lite fleksibelt)
  • Fully Associative Cache (krever komplisert maskinvare)
  • Set-associative Cache (komprimiss mellom de to første)

Innhold

Direct Mapped Cache

"En databank og flere sett"

Den fysiske adressen brukes på følgende måte ved oppslag i cachen:

  • 7 bit benyttes til valg av entry.

En tag lagret i en entry sammenlignes med 20bit fra den fysiske adressen, når disse stemmer overens får vi en cache hit. De 5 minst betydningsfulle bit trengs ikke siden alle adressene (32 bytes) ligger i en cachelinje som her er på 32 bytes.

Fully Associative Cache

"Et sett, men mange databanker"

Denne benytter en større tag og velger ikke en entry basert på indeksbit slik som ved direct mapped cache. Hver av de 27 mest betydningsfulle bit'ene benyttes som tag. Dette gjør at Fully Associative Cache krever mer komplisert hardware enn direct mapped cache, men du kan til gjengjeld lagre data på en mer fleksibel måte enn direct mapped cache.

Set-Associative Cache

"Flere databanker ved siden av hverandre"

Set Associative Cache er et slags kompromiss av de to forrige og er svært mye brukt. Intel Pentiums data og instruksjonscache er av denne typen og kalles two-way set associative cache med 128 sets.

Nyttige Lenker

[En Interaktiv Animasjon]

Personlige verktøy
dataprogrammering
generelt