Beregning af cachehukommelse

Jeg lærer logikken i cachehukommelser. Jeg spekulerer på, om du kan kontrollere, at jeg har forstået det rigtigt. Hvis en cachehukommelse i tagfeltet har 16 bits, det indstillede felt har 10 bits og byte i blokfelt er 6 bits, så kan jeg kun udlede af denne information at kapaciteten er 128 kbyte, og at den er 2-vejs-associeret med blokstørrelse 64 byte, fordi 2⁶ = 64 byte fra byten i blokfelt. 2¹⁰ = 1024, men kunne en anden kapacitet med et andet associativitetstal opfylde kravene?

Jeg lærer, at formlerne er

antal blokke = kapacitet / blokstørrelse

antal sæt = antal blokke / #associativity

Derfor Jeg kunne fordoble både associativiteten til 4-vejs, men jeg kunne ikke tilfredsstille kravene med en 4-vejs cache, fordi den ikke uld kræver et andet antal bits i det indstillede felt.

Forstod jeg korrekt?

Svar

Hjælper dette billede dig med at forstå, hvordan associative cacher fungerer strukturelt?

indtast billedebeskrivelse her lånt fra her

I en nøddeskal bestemmer blok offset bits din blokstørrelse (hvor mange byte der er i en cache række, hvor mange kolonner hvis du vil). Indeksbitene bestemmer, hvor mange rækker der er i hvert sæt. Cacheens kapacitet er derfor 2 ^ (blockoffsetbits + indexbits) * #sets. I dette tilfælde er det 2 ^ (4 + 4) * 4 = 256 * 4 = 1 kilobyte.

For samme størrelse cache (kapacitet), hvis du skulle gå fra 4-vejs til to- måde sæt associativt, det tovejs associerende, kan du gøre det ved enten at fordoble rækkerne i hvert sæt eller ved at fordoble kolonnerne i hvert sæt, det vil sige at fordoble antallet af cachelinjer eller fordoble blokstørrelsen.

Hvis du vælger at fordoble antallet af rækker, ender du med, at din 12-bit-adresse bliver opdelt i et 5-bit indeks og en 4-bit blokforskydning, hvilket efterlader et 3-bit-tag.

Hvis du vælger at fordoble blokstørrelsen, ender du med, at din 12-bit-adresse opdeles i et 4-bit indeks, en 5-bit blokforskydning og efterlader et 3-bit-tag.

Så for at gentage det, tror jeg, at de styrende formler for associerende 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 dit oprindeligt angivne eksempel gør jeg ikke ” t tror, du kan udlede størrelsen på cachen baseret på størrelsen på dine respektive adressebitfelter uden at antage, at ud associativitet. Hvis er det 2-vejs associerende, kan du sige:

Cache Capacity = (2 ^ 6) * (2 ^ 10) * (2) = 2 ^ 18 = 2 ^ 8 kilobyte = 256 kilobyte. Jeg er ikke sikker på, hvordan du kom op med 128 kilobytes. Det ville være tilfældet, hvis det var 1-vejs associativ (direkte kortlagt).

For en 128 kB (2 ^ 17 byte) cache kapacitet, kunne lave en 4-vejs associerende cache med en 64 byte blokstørrelse ved at sige:

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

… og derfor allokere 9 indeksbits, 4 blok offset bits , og resten (19) tag bits.

Skriv et svar

Din e-mailadresse vil ikke blive publiceret. Krævede felter er markeret med *