Beregning av hurtigminne

Jeg lærer logikken til hurtigminnene. Jeg lurer på om du kan bekrefte at jeg har forstått det riktig. Hvis et hurtigminne i taggfeltet har 16 bits, settfeltet har 10 biter og byten i blokkfeltet er 6 bits, så kan jeg utlede fra bare den informasjonen at kapasiteten er 128 kbyte og at den er 2-veis satt assosiativ med blokkstørrelse 64 byte fordi 2⁶ = 64 byte fra byten i blokkfelt. 2¹⁰ = 1024, men kan en annen kapasitet med noe annet assosiativitetstall tilfredsstille kravene?

Jeg lærer at formlene er

antall blokker = kapasitet / blokkeringsstørrelse

antall sett = antall blokker / #associativity

Derfor Jeg kunne doblet både assosiativiteten til 4-veis, men jeg kunne ikke tilfredsstille kravene med en 4-veis cache fordi det var Du trenger et annet antall biter i det angitte feltet.

Forsto jeg riktig?

Svar

Hjelper dette bildet deg å forstå hvordan assosiative cacher fungerer strukturelt?

skriv inn bildebeskrivelse her lånt fra her

I et nøtteskall bestemmer blokkforskyvningsbitene din blokkstørrelse (hvor mange byte som er i en cache-rad, hvor mange kolonner hvis du vil). Indeksbittene bestemmer hvor mange rader som er i hvert sett. Kapasiteten til hurtigbufferen er derfor 2 ^ (blockoffsetbits + indexbits) * #sets. I dette tilfellet er det 2 ^ (4 + 4) * 4 = 256 * 4 = 1 kilobyte.

For samme størrelse cache (kapasitet), hvis du skulle gå fra 4-veis til to- måte sett assosiativt, det toveis assosiativt, kan du gjøre det ved enten å doble radene i hvert sett eller ved å doble kolonnene i hvert sett, det vil si å doble antall cachelinjer eller doble blokkstørrelsen.

Hvis du velger å doble antall rader, vil du ende opp med at 12-biters adressen din blir brutt inn i en 5-biters indeks og en 4-biters blokkforskyvning, og etterlater en 3-biters tag.

Hvis du velger å doble blokkstørrelsen, vil du ende opp med at 12-biters adressen din blir delt inn i en 4-biters indeks, en 5-biters blokkforskyvning, og etterlater en 3-biters tag.

Så for å gjenta det, tror jeg de styrende formlene for assosierende cacher er:

Cache Capacity = (Block Size in Bytes) * (Blocks per Set) * (Number of Sets) Index Bits = LOG2(Blocks per Set) Block Offset Bits = LOG2(Block Size in Bytes) Tag Bits = (Address Bits) - (Index Bits) - (Block Offset Bits) 

I det opprinnelig uttalte eksemplet, gjør jeg ikke » t tror du kan utlede størrelsen på hurtigbufferen basert på størrelsen på de respektive adressebitfeltene uten å anta ut assosiativiteten. Hvis er det 2-veis assosiativ, kan du si:

Cache Capacity = (2 ^ 6) * (2 ^ 10) * (2) = 2 ^ 18 = 2 ^ 8 kilobyte = 256 kilobyte. Jeg er ikke sikker på hvordan du kom opp med 128 kilobyte. Det ville være tilfelle hvis det var 1-veis assosiativ (direkte kartlagt). kunne lage en 4-veis assosiativ cache med 64 byte blokkstørrelse ved å si:

2^17 = 2^6 * (Blocks per Set) * 4 Blocks per Set = 2^17 / 2^6 / 2^2 = 2^9 = 512 

… og derfor tildele 9 indeksbiter, 4 blokkeringsforskyvningsbiter , og resten (19) tagbiter.

Legg igjen en kommentar

Din e-postadresse vil ikke bli publisert. Obligatoriske felt er merket med *