Laboration 2
Laboration 2
Laboration 2
Create successful ePaper yourself
Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.
<strong>Laboration</strong> 2<br />
<strong>Laboration</strong> 2<br />
Som figuren visar kan man ändra cachestorlek, blockstorlek, antal mängder (eng. set) (adressavbildningsmetod),<br />
accesstid, uppdateringsstrategi (eng. write policy) samt utbytesalgoritm (eng. replacement policy). Cache och<br />
blockstorlek anges i antal 32-bitars ord, som vi hädanefter kommer att kalla för ord, kort och gott.<br />
De numeriska värdena ändras genom att man ökar eller minskar genom att trycka på “+” eller “-”. Övriga parametrar<br />
ändras genom att trycka på det högra fältet på motsvarande rad ett antal gånger tills önskat alternativ kommer<br />
upp. Om man exempelvis vill ändra till copy-back, pekar man ut fältet i vilket det står write-through och trycker<br />
därefter på vänster musknapp. Fönstret tas bort genom att aktivera rutan Close .<br />
Om Contents väljs skapas ett fönster i vilket man kan studera såväl innehållet i varje block i cachen som den information<br />
som krävs av adressavbildningsmetoden och utbytesalgoritmen.<br />
Nedan visas cacheinnehållet efter exekvering av ett program med en mängd-associativ, 8 ords cache med 1 ord /<br />
block och 2 block/mängd som använder utbytesalgoritmen LRU samt upp\-dateringsstrategin copy-back (förklaras<br />
senare i kommande avsnitt).<br />
V D R Tag Block<br />
- - - --- -----<br />
0 : 1 1 0 80b 0 0 0 8<br />
1 0 1 805 0 a 24 d9<br />
1 : 1 0 0 805 4 80 0 0<br />
1 0 1 808 0 0 0 8<br />
2 : 1 1 1 80a 0 0 0 6<br />
1 0 0 805 0 1 66 f6<br />
3 : 1 0 0 805 4e 72 27 0<br />
1 1 1 80a 0 0 0 7<br />
Varje rad motsvarar informationen i ett cacheblock med statusbitarna (V=Valid, D=Dirty samt R=Reference för<br />
LRU och FIFO) och taggen. Därefter följer blockinnehållet (1 ord = 4 bytes). Fönstret uppdateras efter varje minnesoperation.<br />
Det tas bort genom att aktivera Close .<br />
Ovanför linjen mellan CPUn och cachen finns tre fält som visar adressen som CPUn lägger ut uppdelad i tag, index<br />
och offset. Detta är tänkt att underlätta inspektionen av cacheinnehållet.<br />
I minnes-menyn kan följande göras:<br />
• Change. Ändring av minnesorganisation.<br />
• Contents. Inspektion av minnesinnehållet.<br />
Under change kan man ändra minnesbredden, dvs det antal (32-bitars) ord som kan överföras mellan cachen och<br />
huvudminnet i en minnesaccess. Man kan också ändra minnesaccesstiden.<br />
Minnesinnehållet kan studeras genom att välja Contents. Detta presenteras blockvis och uppdateras efter varje<br />
minnesoperation.<br />
Resultat av simuleringar<br />
Med en fjärde popup-meny, show-menyn, kan man få ut resultatet från en simulering. Denna popup-meny erhålls<br />
då mittersta musknappen trycks ned inom simulator-fönstret.<br />
I show-menyn kan följande göras:<br />
• Show Result.<br />
• Show Hitgraph, All<br />
• Show Hitgraph, Data<br />
• Show Hitgraph, Instr<br />
• Show Localitygraph, All<br />
• Show Localitygraph, Data<br />
• Show Localitygraph, Instr<br />
Show Result visar andel träffar, exekveringstid, antal minnesreferenser, andel skrivningar etc för senaste simuleringen.<br />
Show Hitgraph visar hur hit-ratio varierar med tiden (i antal minesreferenser) under exekveringen. Man kan välja<br />
att studera detta för alla minnesreferenser, endast data eller instruktioner.<br />
Show Localitygraph visar hur minnesreferenserna fördelar sig i adressrymden som funktion av tiden (i minnesreferenser).<br />
Även här kan man välja att studera alla, endast data eller instruktionsreferenser.<br />
Man kan få ut diagram och textutskrifter på skrivare genom att aktivera Hardcopy fältet i respektive fönster.<br />
För diagrammen måste man därefter aktivera Postscript och blankställa fältet med skrivarens namn. Allra sist<br />
aktiveras OK varvid diagrammet skrivs ut på laserskrivaren.<br />
Konstruktionsprinciper för cacheminne<br />
Lokalitetsprincipen<br />
En cacheminneshierarki består av ett litet snabbt minne (cacheminnet) och ett långsamt större minne (huvudminne).<br />
Genom att endast lagra de delar av huvudminnet som används ofta i cacheminnet, kommer de flesta minnesreferenser<br />
att kunna betjänas av cachen och vi får en skenbar accesstid som ligger mycket nära cacheminnets. Anledningen<br />
att denna enkla teknik fungerar bra beror på lokaliteten hos minnesreferenserna i adressrymden.<br />
Vi skall studera lokaliteten för två program. Det första programmet — example0 — finns längst bak i denna<br />
handledning. Programmet bestämmer en svit av Fibonaccital.<br />
Hemuppgift 2.1<br />
Studera assemblykoden för programmet example0.s och besvara nedanstående fråga<br />
Hur många (32-bitars) ord upptar for-loopen Ledning: Du finner adresserna i hexadecimal form längst till vänster<br />
i listan.<br />
Svar: _____________________________________________________________________________________<br />
——————————————————————————————————— Slut på hemuppgift 2.1<br />
Vi skall studera vilka adresser som refereras under exekveringen av detta program. Detta görs genom att studera<br />
den s.k. lokalitetsgrafen för programmet. I lokalitetsgrafen avsätts adressrymden längs y-axeln och tiden (räknat i<br />
minnesreferenser) längs x-axeln.<br />
5<br />
6