Swedish

IS1200 Datorteknik – Exempelsamling
IS1200 Exempelsamling till övning CE_O8, 2015
CE_O8. Cacheminne. Hemlaboration 2.
8.1. Medeltidshistoria
Diskutera förloppet då CPU:n gör en läsreferens i huvudminnet dvs information
kopieras från huvudminne via bus till CPU. Förklara hur olika blockstorlek
inverkar och varför det kan löna sig att hämta flera ord i följd jämfört med enstaka
ord.
8.2. Referenslokalitet: tidslokalitet och rumslokalitet
Vad menas med att ett program vid sin exekvering har lokalitetsegenskaper:
tidslokalitet och rumslokalitet? Försök ge förslag på ett program som vid sin
exekvering har dålig lokalitet (noll?) och diskutera vilken inverkan det har vid
användning av cache. Lokalitetsegenskaper finns både i program och data.
Diskutera hur man kan skriva sina program för att öka lokaliteten.
8.3. Adressering i Main Memory och Cache Memory
Antag att Main Memory, MM, har en viss storlek, t.ex. 3x128 Mbyte (384 Mbyte)
Hur många adressbitar krävs för adressera MM dvs att kunna peka ut varje enskild
byte i MM.
Visa hur adressen ovan delas upp i olika fält för att ange var i ett cacheminne
man ska lagra den information som pekas ut i Main Memory.
Antag att cacheminnet innehåller 16 Kbyte och man vid varje referens till Main
Memory överför ett block om 4 Word om vardera 64 bitar (8 byte)).
Visa för olika fall enligt nedan. Visa även hur antal bitar i de olika fälten i
adressen ändras om man ändrar storlek respektive blockstorlek i cacheminnet.
a) Direkt adressavbildning (1-vägs associativ adressavbildning)
b) 2- och 4-vägs mängdassociativ adressavbildning
c) Fullt associativ adressavbildning
Exempelsamling
Sida 1 av 5
2015-02-24
IS1200 Datorteknik – Exempelsamling
8.4. Analys av träff och miss i cache-minne
Här nedanför finns en del av ett assemblerprogram. I varje deluppgift är
datacacheminnet alltid tomt när rad 1 körs. Instruktionen ldw läser 4 bytes och
instruktionen stw skriver 4 bytes. Vid miss hämtar cacheminnet alltid ett helt block.
rad 1
rad 2
rad 3
rad 4
rad 5
rad 6
rad 7
rad 8
rad 9
movia
ldw
ldw
stw
ldw
stw
stw
ldw
ldw
r8, 0x80f000
r15, 48(r8)
r14,
0(r8)
r13, 64(r8)
r12,
4(r8)
r11, 512(r8)
r10,
4(r8)
r9, 1536(r8)
r12,
4(r8)
#
#
#
#
#
#
#
#
#
lägg adress i r8 (men läs inga data från minnet)
läs från 0...0 1000 0000 1111 0000 0011 0000
läs från 0...0 1000 0000 1111 0000 0000 0000
skriv till 0...0 1000 0000 1111 0000 0100 0000
läs från 0...0 1000 0000 1111 0000 0000 0100
skriv till 0...0 1000 0000 1111 0010 0000 0000
skriv till 0...0 1000 0000 1111 0000 0000 0100
läs från 0...0 1000 0000 1111 0110 0000 0000
läs från 0...0 1000 0000 1111 0000 0000 0100
a) Förklara vad tidslokalitet innebär. Har datareferenserna mycket eller lite
tidslokalitet när en dator kör assemblerkoden här ovanför? En datareferens är
detsamma som en läsning eller skrivning av data. Har instruktionshämtningarna
mycket eller lite tidslokalitet när en dator kör assemblerkoden här ovanför?
32 bitar totalt
adressetikett (tag)
radnummer (index)
mest signifikant adressbit
byte offset i blocket
minst signifikant adressbit
b) Figuren här ovanför visar hur en 32-bits adress delas upp av ett datacacheminne.
För adressetiketten används 16 bit, för radnummer 10 bit, och för byte offset
6 bit. Cacheminnet är direktmappat, så associativitetstalet är 1.
Ange cacheminnets storlek (i bytes) och blockstorlek (i bytes).
Ange också det binära radnummer (index) i datacacheminnet som refereras, när
datorn utför load-instruktionen på rad 2 i assemblerkoden här ovanför.
I de följande deluppgifterna ska du ange följande för varje ldw och stw:
det binära index som används i datacacheminnet,
om det blir träff eller miss i datacacheminnet (med motivering), samt
vid miss: minnesadresserna för alla bytes som hämtas till datacacheminnet.
Exempel: "index 0101110001, miss, har aldrig hämtats, hämta 0x123450–0x12345f".
c) Träff och miss.
Storlek, blockstorlek och associativitet enligt föregående deluppgift.
d) Nya parametervärden jämfört med deluppgift c.
Storlek (cache size): 1024 byte (256 ord). Blockstorlek (line size): 16 byte (4 ord).
Associativitet (blocks in set): 1-vägs (direktmappat).
e) Ny associativitet (blocks in set), jämfört med deluppgift d.
Storlek (cache size): 1024 byte (256 ord). Blockstorlek (line size): 16 byte (4 ord).
Associativitet (blocks in set): 2-vägs associativt.
Utbytespolicy är Least Recently Used (LRU).
Exempelsamling
Sida 2 av 5
2015-02-24
IS1200 Datorteknik – Exempelsamling
8.5. Analys av träff och miss i cache-minne
Här nedanför finns en del av ett assemblerprogram. Cacheminnet är tomt när rad 1
körs.
rad 1
rad 2
rad 3
rad 4
rad 5
rad 6
rad 7
movia
ldw
ldw
stw
ldw
ldw
ldw
r8, 0x80a700
r12,0(r8)
r13,4(r8)
r14,20(r8)
r15,12(r8)
r16,256(r8)
r17,20(r8)
;
;
;
;
;
;
;
lägg adress i r8
läs 4 bytes från adress 0x80a700
läs 4 bytes från adress 0x80a704
skriv 4 bytes till adress 0x80a714
läs 4 bytes från adress 0x80a70c
läs 4 bytes från adress 0x80a800
läs 4 bytes från adress 0x80a714
a) Är tidslokaliteten stor eller liten för instruktionshämtningarna när en dator kör
assemblerkoden ovan? Är rumslokaliteten stor eller liten för
instruktionshämtningarna?
b) Är tidslokaliteten (re-use) stor eller liten för läsning/skrivning av data när en
dator kör assemblerkoden här ovanför? Är rumslokaliteten (locality) stor eller
liten för läsning/skrivning av data?
c) För varje ldw och stw i assemblerkoden här ovanför, ange om den ger träff
eller miss i datacacheminnet (D-cache).
Storlek (cache size): 256 byte (64 ord).
Blockstorlek (line size): 8 byte (2 ord).
Associativitet (blocks in set): 1-vägs (direktmappat).
d) Ändring av blockstorlek (block size), jämfört med deluppgift c.
För varje ldw och stw i assemblerkoden här ovanför, ange om den ger träff eller
miss i datacacheminnet (D-cache).
Storlek (cache size): 256 byte (64 ord).
Blockstorlek (line size): 64 byte (16 ord).
Associativitet (blocks in set): 1-vägs (direktmappat).
e) Ändring av associativitet (blocks in set), jämfört med deluppgift c.
För varje ldw och stw i assemblerkoden här ovanför, ange om den ger träff eller
miss i datacacheminnet (D-cache).
Storlek (cache size): 256 byte (64 ord).
Blockstorlek (line size): 8 byte (2 ord).
Associativitet (blocks in set): 4-vägs associativt.
Utbytespolicy: LRU, Least Recently Used.
Exempelsamling
Sida 3 av 5
2015-02-24
IS1200 Datorteknik – Exempelsamling
8.6. Cache-minnes-prestanda för program med slingor (loopar)
Nederst på sidan visas ett programexempel. I denna uppgift ska Du diskutera hur
egenskaper hos instruktions-cachen påverkar hitrate i instruktionscachen och
exekveringstid vid exekvering av detta program. Varje instruktion består av ett ord
om 32 bitar ( =4 bytes).
a) Utgå från en instruktionscache med direkt adressavbildning (direct mapped cache)
som rymmer 16 ord och har blockstorleken 2 ord.
Hur påverkas hitrate vid exekvering av nedanstående program om storleken av
cachen ökas från 16 ord till 32 ord.
Du ska svara i enlighet med: Då storleken dubbleras från 16 till 32 kommer hit
rate att ökas/minskas/ändras avsevärt/märkbart/obetydligt på grund av att...
Exempel: ”Då storleken dubbleras från 16 till 32 ord kommer hit rate att ändras
obetydligt på grund av att ... (detta är bara ett exempel på hur man kan skriva)
b) Fortsättning på a): Hur påverkas hitrate vid exekvering av nedanstående program
om storleken av cachen ökas från 32 ord till 64 ord. Svara på liknande sätt som i
uppgift a).
c) Utgå från en instruktionscache med direkt adressavbildning (direct mapped cache)
som rymmer 32 ord och har blockstorleken 2 ord.
Hur påverkas hitrate vid exekvering av nedanstående program om associativiteten
av cachen ökas från 1 ord till 2 och med oförändrad storlek på cachen. Svara på
liknande sätt som i uppgift a).
d) Utgå från en instruktionscache med direkt adressavbildning (direct mapped cache)
som rymmer 64 ord och har blockstorleken 2 ord.
Hur påverkas hitrate vid exekvering av nedanstående program om blockstorleken
av cachen ökas från 2 ord per block till 8 ord per block och med oförändrad
storlek på cachen. Svara på liknande sätt som i uppgift a).
e) Hur påverkas exekveringstiden för programmen för vart och ett av de fall som
anges i uppgift a) till d) ovan?
Loop1
cirka 30 instruktioner
cirka 1000 varv
Loop2
cirka 60 instruktioner
cirka 2000 varv
Exempelsamling
Sida 4 av 5
2015-02-24
IS1200 Datorteknik – Exempelsamling
8.7. Cache-minnes-prestanda för matrisberäkning
Här finns delar av ett C-program som beräknar element
i arrayer av flyttal. Figuren visar hur arrayerna lagras i
minnet. Ett flyttal (float) lagras i 4 byte (1 ord).
adress 0
...
adress 4
...
Indexvariabeln i lagras i ett register, inte i minnet.
Konstanterna a och mfactor lagras också i register,
inte i minnet.
b) Finns tidslokalitet och/eller rumslokalitet för
datareferenserna i programmet?
y[127]
s[0]
...
c) Beräkna hit-rate för datacacheminnet (D-cache),
när funktionen saxpy körs.
Storlek (cache size): 512 byte (128 ord).
Blockstorlek (line size): 32 byte (8 ord).
Associativitet: direktmappat (direct-mapped).
x[127]
y[0]
y[1]
...
a) Finns tidslokalitet och/eller rumslokalitet för
instruktionsreferenserna i programmet?
x[0]
x[1]
x[2]
...
Anta att cacheminnet är tomt varje gång som saxpy
anropas. Anta också att x[i] läses först i varje
iteration, sedan y[i]. Sedan skrivs s[i]. Om det blir
cache-miss då, så hämtas s[i] till cacheminnet innan
skrivningen avslutas.
1 ord
(4 byte)
d) Ändring av storlek (cache size), jämfört med deluppgift c.
Beräkna hit-rate om storleken halveras;
beräkna också hit-rate om storleken fördubblas.
Blockstorlek och associativitet ändras inte när storleken ändras.
e) Ändring av associativitet (blocks in sets), jämfört med deluppgift c.
Beräkna hit-rate om associativiteten ökas till 2;
beräkna också hit-rate om associativiteten ökas till 4.
Storlek och blockstorlek ändras inte då associativiteten ändras.
LRU är den utbytesalgoritm som ska förutsättas.
float x[128], y[128], s[128];
float mfactor;
/* Här finns mera programkod... */
void saxpy( void )
{
register int i;
/* i kommer att lagras i register */
register float a = mfactor; /* a kommer att lagras i register */
for ( i = 0; i < 128; i = i + 1 )
s[i] = a*x[i] + y[i];
}
Exempelsamling
Sida 5 av 5
2015-02-24