25.12.2014 Views

Laboration 2

Laboration 2

Laboration 2

SHOW MORE
SHOW LESS

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

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!