Ladda ner presentationen
Publicerades avThomas Hermansson
1
William Sandqvist william@kth.se
Övning 8 Minnessystem Lokalitet Cacheminnen William Sandqvist
2
Datorteknik & komponenter
DC F1 DC Ö1 DC F2 DC Ö2 lab dicom Digitala komponenter CE F1 CE F2 CE Ö1 CE F3 CE Ö2 CE F4 CE Ö3 lab nios2time Assemblerprogram CE F5 CE Ö4 hemlab C C CE F6 CE Ö5 CE Ö6 lab nios2io In- och utmatning CE F7 CE Ö7 lab nios2int Avbrott och "trap" CE F8 CE Ö8 hemlab cache Cacheminnen CE F9 CE Ö9 hemlab trådar Trådar, synkronisering CE F10 CE Ö10 tentamen William Sandqvist
3
Processor-memory performance gap
Både processorer och minnen ökar sina prestanda år efter år, men inte alls med samma ökningstakt – ett prestandagap har uppstått! Lösningen på detta problem har blivit uppfinnandet av Cache-minnet. William Sandqvist
4
William Sandqvist william@kth.se
Minneshierarki En tre nivåers minneshierarki. De snabbare minnestyperna används som ”buffertar” mot de långsammare. Principbild William Sandqvist
5
William Sandqvist william@kth.se
SRAM Varje bit i ett CMOS SRAM består av en låskrets uppbyggd av sex MOS-transistorer. William Sandqvist
6
William Sandqvist william@kth.se
DRAM Varje bit i ett DRAM består av en transistor och en minneskonden- sator. En laddad kondensator läcker ut laddningen efter ett tag. Periodiskt måste alla kondensatorer under- sökas och de som har laddning kvar måste då återladdas. Detta kallas för Refresh. Det sköts av kretsar inuti minnet. William Sandqvist
7
Kondensatorn byggs på djupet
Trench Capacitor (trench = dike) En bit i ett DRAM tar samma plats som två MOS-transistorer. En bit i SRAM som sex MOS-transistorer! William Sandqvist
8
William Sandqvist william@kth.se
Burst (skur) Minnet läses i tre steg: ROW, COL, och access. Accesstiden för ett valfritt minnes- ord blir därför tre Bussklock-cykler. Om man läser minnet ”skurvis” (Burst) räknar minnet självt fram adresserna till minnesordets ”grannar”. Resten av minnes- orden i skuren tar då bara en Bussklockcykel. Burst kan tex. vara 2, 4, 8 minnes- ord. William Sandqvist
9
Burst ger snabbare medelaccess
Att hämta 1 ”random” ord i minnet tar tre busscykler 3TBus/ord (varav 2 TBUS är Waitstates) Att hämta en ”Burst” med 2 ord tar 3+1 busscykler, 4/2 = 2TBus/ord Att hämta en ”Burst” med 4 ord tar busscykler, 6/4 = 1,5TBus/ord Att hämta en ”Burst” med 8 ord tar busscykler, 10/8 = 1,25TBus/ord Det gäller dock att ha användning för alla hämtade ord – annars slösar man bussklockcykler med Burst-metoden! Detta är ett principiellt resonemang. Gäller både SRAM och DRAM. Andra accessmönster förekommer, tex osv. TBUS = 10*TCPU är valt som exempel. William Sandqvist
10
William Sandqvist william@kth.se
Cacheminnet Cacheminnet kan hålla en liten del av huvudminnets innehåll. Processorn hämtar sin information från Cacheminnet, men om informationen saknas där (= Cache-miss), överförs den tillsam- mans med ett helt Cache-block från huvudminnet till Cache-minnet. Blockvis läsning av huvudminnet ger lägre genomsnittlig accesstid, men man måste ha nytta av de övriga orden i blocket … Chansen att övriga ord i blocket kommer till användning beror av … Tidslokalitet En minnescell som blivit accessad nyligen kan bli accessad snart igen. Rumslokalitet De minnesceller som har adresser nära en som nyligen accessats har större chans att bli accessade. William Sandqvist
11
Cache – Adressavbildning
De flesta huvudminnen är Byteorganiserade, men eftersom huvudminnet accessas blockvis brukar det bli enklare om man ritar det som en följd av Minnesblock. Direkt adressavbildning: Minnesblock: i Cacheblock: j = i % K Minnesblocket i avbildas på Cacheblocket j tills Cache-minnet tar slut – då börjar det om från Cache- minnets början. Två Minnesblock som avbildas på samma Cache- block kan inte användas samtidigt – det ena ”knuffar ut” det andra. William Sandqvist
12
William Sandqvist william@kth.se
Hitrate och accesstid Man önskar en genomsnittlig acesstid tAVG = 8 ns från ett minne som har acesstiden tM = 70 ns och ett cacheminne med acesstiden tC = 5 ns. Vilken hitrate krävs? h = ? ( h är hitrate). William Sandqvist
13
William Sandqvist william@kth.se
Beräkning av hitrate Önskas tAVG 8 ns Med hitrate 95% blir medelaccesstiden 8 ns trots att vi använder ett långsamt main memory med accesstiden 70 ns ! William Sandqvist
14
William Sandqvist william@kth.se
8.1 Blockstorlek 4 ord Ställ in 15 som Accesstime i simulatorn William Sandqvist
15
William Sandqvist william@kth.se
8.1 Blockstorlek 2 ord Ställ in 20 som Accesstime i simulatorn William Sandqvist
16
William Sandqvist william@kth.se
8.1 I-cache och D-cache William Sandqvist
17
William Sandqvist william@kth.se
I-Cache och D-Cache William Sandqvist
18
William Sandqvist william@kth.se
8.2 Lokalitet William Sandqvist
19
Blockstorlek och genomsnittlig accesstid
Större blockstorlek utnyttjar rumslokalitet Liten blockstorlek utnyttjar tidslokalitet William Sandqvist
20
Rumslokalitet och Tidslokalitet
Tidslokalitet: för data är det Read-Modify-Write operationer till en variabel. Till exempel C:s sammansatta operatorer += *= -= /= %= a += 3; ( a = a+3; ), loopräknare och index- variabler. För instruktioner finns tidslokalitet vid korta loopar. ”Rak” kod saknar tidslokalitet. Rumslokalitet: för instruktioner är det rak kod. För data är det vektorer och arrayer. William Sandqvist
21
8.3 Adressering i Main memory och Cache memory
William Sandqvist
22
8.3 Uppdelning av adressen, blocksize 2
Main memory är 3128 Mbyte = 384 Mbyte. M=220, 128 = 27, 3 (4) = 22 229 ( 29 bitar adresserar upp till 512 Mbyte ). Cache memory är 16 kByte. k=210, 16 = 24, 214 Direktmappning minne-cache, Block size = 2 ord a’ 8 Byte. bbb 8Byte/ord, w 2ord/Block, iiiiiiiiii 1024Index (rader, block). Restrerande 15 bitar är tag ttttttttttttttt ( =29) Mm: mmmmmmmmmmmmmmm.mmmmmmmmmm.m.mmm Cm: ttttttttttttttt.iiiiiiiiii.w.bbb Två minnesadresser med samma index upptar samma rad i cacheminnet. Har de olika tag så knuffar de ut varandra! Har de däremot samma tag så finns innehållet i cachen! William Sandqvist
23
Minnesblock och Cacheblock
Mappningen mellan minne och cache blir tydlig om man ritar minnet som om det bestod av cacheblock. William Sandqvist
24
8.3 Uppdelning av adressen, blocksize 4
Main memory är 229 (29 adressbitar). Cache memory är 214 (14 adressbitar) Direktmappning minne-cache, Block size = 4 ord a’ 8 Byte. bbb 8Byte/ord, ww 4ord/Block, iiiiiiiii 512Index (rader, block). Restrerande 15 bitar är tag ttttttttttttttt ( =29) Mm: mmmmmmmmmmmmmmm.mmmmmmmmm.mm.mmm Cm: ttttttttttttttt.iiiiiiiii.ww.bbb Med blockstorleken 4 ord ökar ww till två bitar på indexbitarna i:s bekostnad. Tagbitarnas t:s antal blir detsamma. William Sandqvist
25
8.3 Uppdelning av adressen, två set
Main memory är 229 (29 adressbitar). Cache memory är 214 (14 adressbitar) Direktmappning minne-cache, Block size = 4 ord a’ 8 Byte. bbb 8Byte/ord, ww 4ord/Block, iiiiiiii 256Index (rader, block). Restrerande 16 bitar är tag tttttttttttttttt ( =29) Mm: mmmmmmmmmmmmmmmm.mmmmmmmm.mm.mmm Cm: tttttttttttttttt.iiiiiiii.ww.bbb Med ett associativt minne som har två set, gäller adressavbildningen mot ett set. Taggbitarna t ökar med en bit på indexbitarnas i bekostnad (de övriga raderna finns inuti det andra setet. Logik i cacheminnet väljer sedan mellan de två seten.) William Sandqvist
26
8.3 Uppdelning av adressen, fyra set
Main memory är 229 (29 adressbitar). Cache memory är 214 (14 adressbitar) Direktmappning minne-cache, Block size = 4 ord a’ 8 Byte. bbb 8Byte/ord, ww 4ord/Block, iiiiiii 128Index (rader, block). Restrerande 17 bitar är tag tttttttttttttttt ( =29) Mm: mmmmmmmmmmmmmmmmm.mmmmmmm.mm.mmm Cm: ttttttttttttttttt.iiiiiii.ww.bbb Med ett associativt minne som har fyra set, gäller adressavbildningen mot ett set. Indexbitarna i minskar med två bitar på taggbitarnas t:s bekostnad (de övriga raderna fördelas på de övriga seten. Logik i Cacheminnet väljer mellan de fyra seten.) William Sandqvist
27
8.3 Uppdelning av adressen, full associativitet
Main memory är 229 (29 adressbitar). Cache memory är 214 (14 adressbitar) Direktmappning minne-cache, Block size = 4 ord a’ 8 Byte. bbbb 8Byte/ord, ww 4ord/Block, 1Index (rad, block). Restrerande 24 bitar är tag tttttttttttttttttttttttt (24+2+3=29) Mm: mmmmmmmmmmmmmmmmmmmmmmmm.mm.mmm Cm: tttttttttttttttttttttttt.ww.bbb För adressavbildningen har ett fullständigt associativt minne bara en rad (ingen indexbit i). Alla indexbitarna tas över av tag-bitar t. Cacheminnet består av set (i stället för rader) som väljs med intern logik. William Sandqvist
28
8.3 Uppdelning av adressen
t i w.b William Sandqvist
29
William Sandqvist william@kth.se
8.4 Instruktionscache Antalet instruktioner per loop-varv tar man i allmänhet reda på genom att studera assemblerkoden. William Sandqvist
30
I-Cache 16 Ord a’ 4 Byte 32 bit, två ord/block
Instruktionerna utförs i en följd tills hoppinstruktionen tillbaka till loopens början utförs. För varje cache-rad blir det MT. När cacheminnet tar slut så mappas instruktionerna till början igen. Mönstret MT fortsätter i alla varv. Hitrate h = 50%. För loopen med 60 instruktioner blir det samma hitrate, 50%. iii.w.bb William Sandqvist
31
I-Cache 32 Ord, a’ 4 Byte (32 bit), två ord/block
Hela 30-instruktioners loopen ryms i cacheminnet. För första varvet i loopen blir det MT i varje rad. Därefter finns redan alla instruktioner i följd i cacheminnet och då blir hitrate 100%. För loopen med 60 instruktioner blir det fortsatt en hitrate 50%. iiii.w.bb För 1000 varv så blir det första varvet försumbart! William Sandqvist
32
William Sandqvist william@kth.se
I-Cache 64 Ord Ett 64 ords cacheminne rymmer båda looparna. Hitrate blir nära 100%. iiiii.w.bb William Sandqvist
33
I-Cache 64 Ord associativitet med två set
Hela 30 instruktioners loopen ryms i ett set i cacheminnet. 60 instruktions loopen ryms i två set. Hitrate för båda looparna blir nära 100%. iiii.w.bb William Sandqvist
34
I-Cache 64 Ord Blocksize 8 ord
Båda looparna får första varvet MTTTTTTT, därefter TTTTTTTT. h = 100% iii. I-Cache 32 Ord 60-instruktioners loopen får mycket bättre hitrate än med mindre blocksize. Alla varv MTTTTTTT. h = 7/8 = 88% ii. William Sandqvist
35
8.5 Matrisberäkning, Datacache
#define RADER 8 #define KOLUMNER 8 typedef int matris[RADER][KOLUMNER]; /* matrix calculation */ void matmul3(matris A, matris B) { int i,j; for(i=0;i<RADER; i++) /* vary row-index */ for(j=0;j<KOLUMNER;j++) /* vary col-index */ A[i][j] = A[i][j]*3 + B[i][j]; } int main() { static matris M1,M2; matmul3(M1,M2); } William Sandqvist
36
Repris: Hur lagrar C matriser?
35 matris matematik-index a[0][0] a[0][1] a[0][2] a[0][3] a[0][4] a[1][0] a[1][1] a[1][2] a[1][3] a[1][4] a[2][0] a[2][1] a[2][2] a[2][3] a[2][4] 35 matris C-index I minnet radvis. William Sandqvist
37
William Sandqvist william@kth.se
Radvis lagring Att matrisen B ligger direkt efter A är vanligt, men inget som garanteras. Med C:s adressoperator & kan man dock alltid ta reda på hur kompilatorn lagrat matriserna. William Sandqvist
38
William Sandqvist william@kth.se
Datacache Integer = ord = 32 bitar = 4 Bytes. Datacache 32 ord, Blocksize 4 ord. iii.ww.bb William Sandqvist
39
Rumslokalitet och Tidslokalitet?
for(i=0;i<RADER; i++) /* vary row-index */ for(j=0;j<KOLUMNER;j++) /* vary col-index */ A[i][j]=A[i][j]*3 + B[i][j]; a) Rumslokalitet (Locality)? Ja, C lagrar radvis och inre loopen (index j) stegar inom raden. b) Tidslokalitet (Reuse)? Ja, operationen med elementet A[i][j] är av typen Read-Modify-Write. William Sandqvist
40
Datacache 32 Word, cacheblock 4 Word
William Sandqvist
41
Datacache 32 Word, cacheblock 8 Word
c) Ökad blockstorlek till 8 ord för att utnyttja rumslokaliteten. Eftersom båda matriserna mappas på samma rader så gör ”utknuffningen” bara att körtiden ökar! William Sandqvist
42
William Sandqvist william@kth.se
Beräkna hitrate A[i][j] = A[i][j]*3 + B[i][j]; d) Cache 32 ord, blocksize 4. I exemplet mappas A och B elementen alltid till samma rad i cacheminnet (tyvärr): ldw A ldw B stw A MMM TMM TMM TMM % träff. Blocksize 8 skulle bara innebära att man hämtar in fler ord som inte kommer till användning. Körtiden ökar. e) Cache 128 ord, blocksize 4? Båda matriserna ryms samtidigt i cachen, ingen utknuffning. MMT TTT TTT TTT % träff. William Sandqvist
43
William Sandqvist william@kth.se
Associativitet 2 set A[i][j] = A[i][j]*3 + B[i][j]; f) Cache 32 ord, blocksize 4, 2 set. Elementen i A och B kan lagras i olika set och behöver inte knuffa ut varandra. ldw A ldw B stw A MMT TTT TTT TTT % träff (2 missar vart fjärde varv). En förutsättning för detta är att den använda utbytes-algoritmen inte väljer att skriva över det nyligen använda blocket. Tex. LRU (Least Recently Used). Blocksize 8, då får vi 2 missar var åttonde varv. William Sandqvist
44
Att undvika utknuffning!
William Sandqvist
45
William Sandqvist william@kth.se
L1 L2 L3 Cache Intel Itanium har stora associativa Cacheminnen i tre nivåer … William Sandqvist
Liknande presentationer
© 2024 SlidePlayer.se Inc.
All rights reserved.