Cacheadres opsplitsen en gemiddelde geheugentoegangstijd
Voer de cachegrootte, regelgrootte en associativiteit in om te zien hoe een adres wordt opgesplitst in tag, index en offset, weergegeven als aantallen bits en als balk. De calculator berekent ook de gemiddelde geheugentoegangstijd (AMAT) uit hittijd, missrate en miss penalty, zodat je ziet hoe de cache-organisatie de prestaties beïnvloedt.
Resultaten
Adresopbouw (meest significante bits links)
Voer machten van twee in voor cachegrootte, regelgrootte en associativiteit, waarbij de grootte deelbaar moet zijn door regelgrootte × ways. De opsplitsing kan ook niet worden berekend als offset- en indexbits samen de adresbreedte overschrijden.
Regels
–
Sets
–
Tag
–
Index
–
Offset
–
Gemiddelde geheugentoegangstijd (AMAT)
–
Bekijk als grafiek
De andere invoerwaarden blijven gelijk, terwijl de gekozen invoer varieert van 1/4 tot 4 keer de huidige waarde. De rode stip is de huidige waarde.
Een adres opsplitsen in drie velden
Een cache bewaart data uit het hoofdgeheugen in eenheden die regels (blokken) heten. Het aantal regels is grootte ÷ regelgrootte, en het aantal sets is regels ÷ associativiteit. Vanaf de onderkant van het adres kiest de offset een byte binnen de regel en beslaat log₂(regelgrootte) bits, kiest de index een set en beslaat log₂(sets) bits, en vormen de resterende hogere bits de tag. Met de standaardwaarden 32 bits, 32 KB, 64 B en 8 ways zijn er 512 regels en 64 sets, wat een offset van 6 bits, een index van 6 bits en een tag van 32 − 6 − 6 = 20 bits geeft.
Wat associativiteit verandert
Een verdubbeling van de associativiteit bij gelijke grootte en regelgrootte halveert het aantal sets, zodat de index één bit verliest en de tag er één bij krijgt. Eén way is een direct-mapped cache, en het aantal ways gelijk maken aan het aantal regels (512 bij de standaardwaarden) geeft een fully associative cache met één set en een index van 0 bits. Hogere associativiteit vermindert conflictmisses, die ontstaan doordat adressen zich in dezelfde set opeenhopen, maar er moeten meer tags parallel worden vergeleken, wat comparatoroppervlak, vermogen en hittijd kost.
Gemiddelde geheugentoegangstijd (AMAT)
Caches vergelijk je op gemiddelde geheugentoegangstijd, niet alleen op missrate. AMAT = hittijd + missrate × miss penalty, wat met de standaardwaarden 4 + 0,05 × 100 = 9 cycli is. Zelfs een missrate van 5% maakt het gemiddelde ruim twee keer zo groot, omdat de penalty groot is. Een lagere missrate dankzij een grotere of meer associatieve cache helpt niet als de hittijd toeneemt, want die betaalt elke toegang. Bij caches met meerdere niveaus vervang je de L1-miss penalty door L2-hittijd + L2-missrate × L2-miss penalty.
Gebruik in ontwerpen en valkuilen
Grotere regels benutten ruimtelijke lokaliteit en verlagen de missrate, maar elke miss verplaatst meer data, wat de miss penalty verhoogt, en minder regels betekenen meer conflicten; de meeste huidige CPU's gebruiken 64 B. L1-caches gebruiken vaak een virtually indexed, physically tagged (VIPT) ontwerp dat de set uitleest terwijl de TLB het adres vertaalt. Als index en offset binnen de pagina-offset moeten blijven, is de grootte beperkt tot paginagrootte × associativiteit, bijvoorbeeld 4 KB × 8 ways = 32 KB. De tagbreedte bepaalt ook de grootte van de tagopslag.
Een regelgrootte van 64 byte = 2⁶ betekent een offset van 6 bits. Het aantal regels is 32 KB ÷ 64 B = 32768 ÷ 64 = 512 = 2⁹; bij direct-mapped is het aantal regels gelijk aan het aantal sets, dus de index is 9 bits. De rest vormt de tag: 32 − 9 − 6 = 17 bits. 19 bits is de waarde bij een 4-weg set-associatieve cache, waar de index 2 bits korter is; dat geldt niet voor direct-mapped.
Het aantal regels is 32 KB ÷ 64 B = 512. Bij 4 wegen passen er 4 regels in één set, dus het aantal sets is 512 ÷ 4 = 128 = 2⁷; de index is dan 7 bits en de tag 32 − 7 − 6 = 19 bits. 512 is het aantal regels zelf en tevens het aantal sets bij direct-mapped. Een hogere associativiteit verlaagt het aantal sets; daardoor neemt het aantal tagbits toe en zijn er meer comparatoren nodig. 32 is het resultaat van de regelgrootte 64 ten onrechte door het aantal wegen te delen.
Gemiddelde geheugentoegangstijd = hittijd + missratio × misstraf = 2 + 0,04 × 150 = 2 + 6 = 8 cycli. De hittijd geldt voor alle toegangen, en de misstraf komt er alleen bij wanneer een miss optreedt. 6 cycli is de waarde waarbij alleen de bijdrage van de misses is berekend en de hittijd is vergeten. 152 cycli is de tijd van één toegang met miss en niet het gemiddelde. Zelfs bij een missratio van slechts 4% wordt de gemiddelde tijd viermaal zo groot.
De offset is 64 = 2⁶, dus de onderste 6 bits; de index is het aantal sets 64 = 2⁶, dus de 6 bits daarboven. 0x1234 = 4660; 4660 ÷ 64 = 72 rest 52, dus het regelnummer is 72. Het setnummer is het regelnummer modulo het aantal sets: 72 mod 64 = 8. 52 is de rest na deling door 64 en geeft de positie binnen de regel (offset) aan. 4 is slechts het laatste hexadecimale cijfer van het adres en heeft niets met de set te maken.
Veelgestelde vragen
Hoeveel tagbits heeft een direct-mapped cache van 32 KB met regels van 64 B en 32-bits adressen?
De offset is log₂64 = 6 bits, en 32 KB ÷ 64 B = 512 regels geeft een index van 9 bits, dus de tag is 32 − 9 − 6 = 17 bits. Maak je de cache 8-way, dan daalt het aantal sets naar 64, met een index van 6 bits en een tag van 20 bits.
Hoeveel indexbits heeft een fully associative cache?
Nul. Er is maar één set, dus elk bit behalve de offset is tag, en de tag wordt met elke regel vergeleken. Je kunt dit hier controleren door de associativiteit gelijk te maken aan het aantal regels.
Wat helpt meer: de missrate halveren of de hittijd met één cyclus verkorten?
Met de standaardwaarden (hittijd 4 cycli, missrate 5%, miss penalty 100 cycli) verlaagt een missrate van 2,5% de AMAT van 9 naar 6,5 cycli, terwijl een hittijd van 3 cycli 8 cycli geeft, dus hier weegt de missrate zwaarder. Bij een kleine miss penalty kan het antwoord omslaan, dus vergelijk met de AMAT-formule.