Laboration 2
Laboration 2
Laboration 2
You also want an ePaper? Increase the reach of your titles
YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.
<strong>Laboration</strong> 2<br />
Ange antalet adressbitar i tag-fältet för en fullt associativt avbildande cache med storleken 8 ord samt blockstorleken<br />
1 ord om huvudminnets storlek är 64 kord.<br />
Svar: _____________________________________________________________________________________<br />
——————————————————————————————————— Slut på hemuppgift 2.3<br />
Vi skall nu studera en direkt-avbildande cache genom att exekvera programmet example0.<br />
Uppgift 2.4<br />
Gå ur simulatorn och starta den med det första programmet (cache example0). Peka på cachen och tryck på<br />
vänster musknapp. Du får då upp en popup-meny i vilken du väljer Change. Du kan nu välja cacheorganisation.<br />
Välj cache-storlek enligt uppgift 2.3. Välj blockstorlek 1 samt antal mängder så att cachen blir direkt-avbildande.<br />
Ändra dock inga andra fält. Stäng därefter fönstret med Close .<br />
I Cache-menyn väljer du nu Contents som skapar ett fönster i vilket du kan studera cacheinnehållet.<br />
———————————————————————————————————— Slut på uppgift 2.4<br />
Varje rad i cachen mostvarar ett block. Till varje block hör en statusbit V, en tag samt blockinnehållet. V biten<br />
(Valid) anger om blocket innehåller giltig data (jfr. med Figur 2.4).<br />
Uppgift 2.5<br />
Gör nu reset och exekvera programmet stegvis genom att trycka på Step . Följ hela tiden med i programlistan<br />
så att du vet vilka instruktioner som exekveras. Fortsätt tills cachen fyllts. Tryck ytterligare en gång och notera<br />
noga vilket block som byts ut.<br />
Vilket block byts ut och varför<br />
Svar: _____________________________________________________________________________________<br />
Vilken instruktion hämtades in i cachen<br />
Svar: _____________________________________________________________________________________<br />
Fortsätt nu stegvis tills hela loopen ligger i cachen. Studera därefter cachens beteende genom att låta ett antal steg<br />
exekveras i halvfart. Detta gör du genom att skriva in ett antal (välj 32) i fältet No of steps. Tryck därefter på<br />
Visual . Cachen blinkar till vid träff och minnet vid miss.<br />
Det genereras två missar per varv i loopen. Vilka adresser motsvarar dessa<br />
Svar: _____________________________________________________________________________________<br />
Varför genereras missar vid just dessa adresser<br />
Svar: _____________________________________________________________________________________<br />
———————————————————————————————————— Slut på uppgift 2.5<br />
11<br />
<strong>Laboration</strong> 2<br />
Trots att hela adressrymden som loopen refererar till får plats i cachen erhålls missar. Detta beror på en svaghet<br />
hos direkt-avbildande cachar som går under benämningen konfliktmissar (eng. conflict misses) eller “bumps”.<br />
Utbytesalgoritmer<br />
Antalet konfliktmissar, dvs situationer där två minnesadresser konkurrerar om samma block i cachen, kan minskas<br />
genom att välja en mängd-associativ cache med färre antal mängder än antal block i cachen. Extremfallet motsvaras<br />
av fullt associativa cachar.<br />
För alla cachar som inte är direkt-avbildande är det inte självklart vilket block som skall bytas ut då man erhåller<br />
en cache-miss. Många algoritmer är tänkbara men måste förkastas pga att de ej går att implementera till rimlig kostnad.<br />
Vi skall studera tre utbytesalgoritmer, nämligen Random, FIFO och LRU.<br />
Vid Random (eller pseudo-random) väljs det block som skall bytas ut slumpmässigt. Denna algoritm kan approximeras<br />
med round-robin som är ganska lätt att implementera. I simulatorn är Random implementerad genom<br />
slumptalsdragning.<br />
Vid FIFO (First In First Out) bytes det block ut som funnits längst tid i cachen. Denna algoritm kan implementeras<br />
exakt genom att associera en räknare till varje block. Vid varje blockutbyte inkrementeras samtliga räknare. Det<br />
block vars räknare har högst värde byts ut. Räknarens storlek definieras av antalet block i setet. Nackdelen med<br />
denna algoritm är främst att det block som varit längst i cachen nödvändigtvis inte behöver vara det som är minst<br />
refererat.<br />
LRU (Least Recently Used) tar hänsyn till referensintensiteten till varje block. Man associerar en räknare till varje<br />
block. Räknaren nollställs då blocket refereras. Övriga räknare inkrementeras. Vid utbyte väljs det block vars räknare<br />
har högst värde. Räknaren kan teoretiskt behöva vara hur stor som helst. I praktiken räcker det med ett fåtal<br />
bitar (många implementeringar använder endast en bit). I simulatorn anges räknarens värde under R i fönstret med<br />
cachens innehåll.<br />
Val av utbytesalgoritm påverkar kostnaden för cachen på grund av de statusbitar som behövs för beslutsfunktionen.<br />
Uppgift 2.6<br />
Gör nu cachen i förra uppgiften fullt associativ och välj LRU som utbytesalgoritm. Exekvera tills cachen fyllts.<br />
Studera speciellt hur räknarnas värden förändras.<br />
Vilket block kommer att bytas ut vid nästa referens och varför Ledning: Studera räknarnas värde för de olika<br />
blocken<br />
Svar: _____________________________________________________________________________________<br />
Verifiera resultatet!<br />
Fortsätt nu tills hela loopen finns i cachen och exekvera sedan programmet i halvfart 32 steg.<br />
Vilken minnesoperation ger upphov till att både cachen och minnet blinkar<br />
Svar: _____________________________________________________________________________________<br />
Hur många missar genereras per varv och varför<br />
Svar: _____________________________________________________________________________________<br />
_________________________________________________________________________________________<br />
12