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
© Copyright 2024