12 June G1518, Föreäsningl 8, vt07 (E/I/CL)1 2G1518 Datorteknik Föreläsning 8 Cache Memory vt 2007 (period 3-4) för E, I och CLMDA
12 June G1518, Föreäsningl 8, vt07 (E/I/CL)2 F1F2F3F4F5F6F7F8F9F10Ö2Ö1Ö3Ö4Ö5LAB-1LAB-2Hemlab-1Ö6Ö7LAB-3Hemlab-2Ö8Hemlab-3Ö9TentamenÖ10 Assemblerkod 4 stegs pipeline Nios2time Nios2io C-kod Nios2int Cache-minnen CPU-scheduling 2G1518 Datorteknik
12 June G1518, Föreäsningl 8, vt07 (E/I/CL)3 Litteraturhänvisningar Kursboken, valda delar av kapitel 6 6.1 Inledning, läs 6.2 Minnestekniker, läses kursivt 6.3 Minneshierarkier, bra 6.4 Cacheminnen, viktigt 6.5 Avslutande kommentarer, bra 6.6 Övningar, se ex-saml. och hem-lab 2
12 June G1518, Föreäsningl 8, vt07 (E/I/CL)4 Viktiga delar i en dator CPU BUS I/O MM Data Program
12 June G1518, Föreäsningl 8, vt07 (E/I/CL)5 Program Memory m x 8 ALU ADD IR0 IR1 IR2 RWM 4-stegs PIPE-LINE Register File 32 x 32 Register File 32 x 32 PC+k PC+Imm PC ALU MEM FO WB FI
12 June G1518, Föreäsningl 8, vt07 (E/I/CL)6 MEM 4 stegs PIPE-LINE LOAD FIFOWBFIFOWB MEM STORE Memory References FIFOWB EX FIFOWB EX Fetch Instruction
12 June G1518, Föreäsningl 8, vt07 (E/I/CL)7 Harvard-arkitektur Separata datavägar för instruktioner och data Separat Instruktions-och Datacache ”Krav” för att en processor med pipeline ska kunna hålla farten dvs kunna göra FETCH och LOAD i samma klockperiod FETCH och STORE i samma klockperiod
12 June G1518, Föreäsningl 8, vt07 (E/I/CL)8 Nytt – Viktiga delar i en dator CPU BUS I/O D-CACHE I-CACHE MM Data Program ChipSet
12 June G1518, Föreäsningl 8, vt07 (E/I/CL)9 Main Memory - Cache Memory Main Memory - Långsamt Stort Billigt fysiskt placerat utanför CPU-kretsen Cache Memory - Snabbt Litet Dyrt fysiskt placerat inne i CPU-kretsen ”Långsam” Bus-förbindelse mellan CPU och MM som passerar CPU-sockel och ChipSet ChipSet innehåller Memory Control mm
12 June G1518, Föreäsningl 8, vt07 (E/I/CL)10 Cache Memory grundide’ Försök att se till att ”viktig” information finns lagrad (kvar) i cache minnet Vilken information är viktig ? Instruktioner och data som (snart) kommer att refereras (igen)
12 June G1518, Föreäsningl 8, vt07 (E/I/CL)11 Lokalitet Referenslokalitet Egenskaper hos program och data som kan utnyttjas (tas till vara) av cacheminnet Rumslokalitet (Spatial Locality) Tidslokalitet (Temporal Locality)
12 June G1518, Föreäsningl 8, vt07 (E/I/CL)12 Lokalitet Rumslokalitet Rumslokalitet (Spatial Locality) En minnescell med en adress som ligger nära en minnescell som nyligen har refererats har större sannolikhet att bli refererad än andra minnesceller Typexempel är sekvensiella program samt vektor- och matris-beräkningar
12 June G1518, Föreäsningl 8, vt07 (E/I/CL)13 Lokalitet Rumslokalitet När man hämtar in nya data från MM till cache-minnet passar man på att hämta ett block av näraliggande data Genom att hämta och spara näraliggande information i cachen kan man utnyttja rumslokalitet
12 June G1518, Föreäsningl 8, vt07 (E/I/CL)14 Lokalitet Rumslokalitet Lönar det sig att hämta stora block jämfört med små block ? Bara om: 1. Medelhämtetiden per byte blir lägre ! 2. Inhämtade data verkligen refereras !
12 June G1518, Föreäsningl 8, vt07 (E/I/CL)15 Lokalitet Tidslokalitet Tidslokalitet (Temporal Locality) En minnescell som nyligen har refererats har större sannolikhet att åter bli refererad än andra minnesceller Typexempel är programloopar och indexvariabler Lagra en hel program-loop i cacheminnet för att ta till vara på tidslokaliteten Lagra/spar indexvariabler i cacheminnet
12 June G1518, Föreäsningl 8, vt07 (E/I/CL)16 Minnesreferens från CPU:n (Read / Write) Referera först Cache-minnet Vid Cache Miss referera till Main Memory och Kopiera (ett block) från MM till Cache Denna extra tid kallas Miss Penalty Gör en ny referens (med Hit) till cachen (gäller för både read och write miss)
12 June G1518, Föreäsningl 8, vt07 (E/I/CL)17 Adressering av huvudminnet Adressen anger direkt den eller de bytes i Main Memory som avses Vid byteadressering gäller att om fler än en byte avses är LSBits nollor i adressen Adressen anger exakt en plats att referera i Main Memory
12 June G1518, Föreäsningl 8, vt07 (E/I/CL)18 Cache Memory Read / Write Cache Memory Hit / Miss Read Hitlästräff Read Missläsmiss Write Hitskrivträff Write Missskrivmiss Referenser till Cacheminne
12 June G1518, Föreäsningl 8, vt07 (E/I/CL)19 Cache Memory Read Hit Informationen finns i cachen, (Hurra) men... Hur vet man att det är en Hit ? Var i cachen finns informationen ?
12 June G1518, Föreäsningl 8, vt07 (E/I/CL)20 Cache Memory Read Miss Informationen finns EJ i cachen, (ÄSCH) men... Hur vet man att det är en Miss ? Kopiera från Main Memory till Cache? Var finns information i MM ? Var ska informationen placeras i Cache ? Vad händer om/när Cachen är ”full”
12 June G1518, Föreäsningl 8, vt07 (E/I/CL)21 Cache Memory Write Hit Vad menas med Hit vid skrivning ? Informationen finns i cachen ! Den har kopierats från MM tidigare ! Hur vet man att det är en Hit ?
12 June G1518, Föreäsningl 8, vt07 (E/I/CL)22 Cache Memory Write Miss Vad menas med Miss vid skrivning ? Informationen finns EJ i cachen ! Den har inte kopierats från MM tidigare eller den har blivit bortbytt / överskriven Hur vet man att det är en Miss ? förslag: kopiera från MM till Cache och gör ett nytt skrivförsök (det blir en Hit)
12 June G1518, Föreäsningl 8, vt07 (E/I/CL)23 Fetch on Write Miss förslag: kopiera från MM till Cache och gör ett nytt skrivförsök (det blir en Hit)
12 June G1518, Föreäsningl 8, vt07 (E/I/CL)24 Cache Memory Write Ska det skrivas till bara Cache ? Ska det skrivas till Main Memory också ? Ska man skriva bara till Main Memory ?
12 June G1518, Föreäsningl 8, vt07 (E/I/CL)25 Cache Memory Skrivpolitik, Write Policy Write Through - Genomskrivning Skrivning till både Cache och MM (nu) Write Back - Återskrivning Skrivning bara i Cache, kopiering till MM (senare) Write Around - skrivning bara till MM (nu)
12 June G1518, Föreäsningl 8, vt07 (E/I/CL)26 Träff i Cache Memory ger snabb referens Cache i samma chip som Processor Snabb access till cache I balans med CPU-klockan En eller några få CPU-cykler
12 June G1518, Föreäsningl 8, vt07 (E/I/CL)27 Viktiga delar i en dator CPU BUS I/O MM Data Program
12 June G1518, Föreäsningl 8, vt07 (E/I/CL)28 Nytt - Viktiga delar i en dator CPU BUS I/O D-CACHE I-CACHE MM Data Program ChipSet
12 June G1518, Föreäsningl 8, vt07 (E/I/CL)29 Referens-Miss i Cache Memory ger MM-referens i tre moment Läsning från MM (vid Referens-Miss) 1. Skicka adress från CPU till Main Memory (tar en minnes-buss-cykel) 2. Läs data i Main Memory (tar en ”minnes-access-time”) 3. Skicka data från Main Memory till CPU (tar en minnes-buss-cykel)
12 June G1518, Föreäsningl 8, vt07 (E/I/CL)30 Referens-Miss i Cache Memory ger MM-referens i tre moment Adr Mem Data minst 3 minnes-buss-cykler per referens (om minnet är lika snabbt som bussen) Kan det göras med Pipe-Line ? javisst
12 June G1518, Föreäsningl 8, vt07 (E/I/CL)31 MM-referens i tre moment med PIPE-LINE Adr Mem DataAdr Mem DataAdr Mem DataAdr Mem Data 4 läsningar på 6 buscycles 1 läsning på 3 buscycles 2 läsningar på 4 buscycles
12 June G1518, Föreäsningl 8, vt07 (E/I/CL)32 Cache Reference Miss causes Main Memory Reference Den första MM referensen tar 3 buscykler (minst) efterföljande referenser tar minst 1 buscykel var Referens-mönster: Beräknad medeltid / referens Att läsa 1 enhet tar 3 cykler,3 cykler/enhet Att läsa 2 enheter tar 4 cykler,2 cykler/enhet Att läsa 4 enheter tar 6 cykler,1,5 cykler/enhet Att läsa 8 enheter tar 10 cykler,1,25 cykler/enhet Större block ger lägre medeltid / enhet
12 June G1518, Föreäsningl 8, vt07 (E/I/CL)33 Cache Reference Miss causes Main Memory Reference Om den första MM referensen tar 6 buscykler och efterföljande referenser tar minst 1 buscykel var får vi Referens-mönster: Beräknad medeltid / referens Att läsa 1 enhet tar 6 cykler,6 cykler/enhet Att läsa 2 enheter tar 7 cykler,3,5 cykler/enhet Att läsa 4 enheter tar 9 cykler,2,25 cykler/enhet Att läsa 8 enheter tar 13 cykler,1,625 cykler/enhet Större block ger lägre medeltid / enhet
12 June G1518, Föreäsningl 8, vt07 (E/I/CL)34 När man vill kopiera från MM till Cache kan det hända att cachen redan innehåller information (kollision / överskrivning) Då måste man frigöra plats Vilken plats ska man frigöra ? jämför med kopiering mellan MM och SS MM = Main Memory, SS = Secondary Storage Cache Memory Miss och Full Cache ger nya frågor
12 June G1518, Föreäsningl 8, vt07 (E/I/CL)35 Cache Memory Utbytesalgoritmer, Replacement Algorithms FIFO - First In First Out Random LRU - Least Recently Used Ideal - (haha/omöjlig) non-MRU - non Most Recently Used
12 June G1518, Föreäsningl 8, vt07 (E/I/CL)36 Main Memory Size Address size, number of bits 0 2 n -1 7 … 0 27 … 0 Address: vid fetch (PC) vid LOAD vid STORE Exempel: Main Memory 256 MegaByte n = 28 (bytes) byte address 32 bitars adress ger maximalt 4 Gbyte minne
12 June G1518, Föreäsningl 8, vt07 (E/I/CL)37 Main Memory Size Address size, number of bits Exempel: Main Memory 256 MegaByte Organiserat i rader Med 8 bytes/rad n = 28 (bytes) m = 25 (rader) 0 2 m … 0 27 … 3 0 Byte inom rad, 3 bitar xxx block address byte address
12 June G1518, Föreäsningl 8, vt07 (E/I/CL)38 Cache and Main Memory Size Block Size (Line Size) Cache Memory 16 KiloByte k = 11 Main Memory 256 MegaByte n = n … k … 0 Kopiering mellan Cache och Main Memory görs med block om t.ex. 64 bits = 8 bytes 2 st 32-bits ord (Word) 1*2 k 2*2 k 0*2 k Typisk PC: 64 bits databus (8 byte/unit) 4 units per line/block 32 bytes per line/block
12 June G1518, Föreäsningl 8, vt07 (E/I/CL)39 Adressering av Cacheminnet Adressen ska peka ut den eller de platser i cachen där informationen skulle kunna finnas (läsas/skrivas) På en viss plats i Cacheminnet kan man lagra information från olika platser i MM Hur avgör man vad som finns lagrat på en viss plats i cachen?
12 June G1518, Föreäsningl 8, vt07 (E/I/CL)40 Adresslapp i Cacheminnet TAG Hur avgör man vad som finns lagrat ? Varje block som kopieras till Cachen förses med en ”adresslapp” som anger vad som är lagrat på denna plats i cachen Adresslappen ska ange från vilken plats i Main Memory, informationen kommer Vid varje referens till cachen jämförs adresslappen i MM-adressen med utpekade adresslappar i cachen
12 June G1518, Föreäsningl 8, vt07 (E/I/CL)41 Direct Mapping kopiera från MM till Cache 0 2 n -1 TAGINDEX 31 … Byte TAG Valid DATA INDEX anger en enda plats att lagra utpekad info i CACHEn Byte anger eventuell enskild byte inom block/rad TAG i adressen anger vilken info i MM som refereras TAG i CACHEN anger vilken info som finns i CACHEN VALID anger giltigt innehåll i CACHEN (0 betyder ”tom plats”) Adress till MM rader
12 June G1518, Föreäsningl 8, vt07 (E/I/CL)42 Direct Mapping Läsreferens 0 2 n -1 TAGINDEX 31 … Byte bits 2-1 MUX bus-driver TAG Valid DATA = MUX 32 8 En jämförare HIT/MISS Enable Adress till MM bit 1 bit
12 June G1518, Föreäsningl 8, vt07 (E/I/CL)43 Cache Memory Mapping Adressavbildning Direct Mapping - direkt avbildning Fully Associative Mapping - fullt associativ avbildning Set-Associative Mapping -mängdassociativ avbildning
12 June G1518, Föreäsningl 8, vt07 (E/I/CL)44 Direct Mapping Läsreferens 0 2 n -1 TAGINDEX 31 … Byte TAG Valid DATA = En jämförare HIT/MISS Enable Adress till MM En jämförare
12 June G1518, Föreäsningl 8, vt07 (E/I/CL)45 2-way Set-Associative Läsreferens 0 2 n -1 TAGINDEX 31 … Byte TAG Valid DATA = Två jämförare (arbetar samtidigt) HIT En Adress till MM 0 2 n -1 TAG Valid DATA = HIT En
12 June G1518, Föreäsningl 8, vt07 (E/I/CL)46 Cache Memory Properties Prestanda (Performance) påverkas av Storlek, Cachesize Blockstorlek, Blocksize/Linesize Grad av associativitet, Associativity Utbytesalgoritm, Replacement algorithm Skrivpolitik, Write Policy Lokalitet i program och data
12 June G1518, Föreäsningl 8, vt07 (E/I/CL)47 När man vill kopiera från MM till Cache kan det hända att cachen redan innehåller information (kollision / överskrivning) Då måste man frigöra plats Vilken plats ska man frigöra ? Vid direct mapped cache finns inget val den enda utpekade platsen väljs Cache Memory Full Cache ska särbehandlas
12 June G1518, Föreäsningl 8, vt07 (E/I/CL)48 Vid associative mapping finns valmöjligheter vilken plats ska man frigöra ? Referenced bit anger egenskap (per plats) Modified bit anger egenskap (per plats) Tidsbitar anger tid för hämtning/referens (jämför med kopiering mellan MM och SS) Cache Memory Full Cache ska särbehandlas
12 June G1518, Föreäsningl 8, vt07 (E/I/CL)49 2-way Set-Associative Läsreferens 0 2 n -1 TAGINDEX 31 … Byte TAG Valid DATA = HIT En Adress till MM n -1 TAG Valid DATA = HIT En Två jämförare (arbetar samtidigt)
12 June G1518, Föreäsningl 8, vt07 (E/I/CL)50 Cache Memory Utbytesalgoritmer, Replacement Algorithms FIFO - First In First Out (tidsbitar) Random LRU - Least Recently Used (tidsbitar) Ideal - (haha/omöjlig) non-MRU - non Most Recently Used
12 June G1518, Föreäsningl 8, vt07 (E/I/CL)51 Cache-minne Cache Size: 8 --> 16
12 June G1518, Föreäsningl 8, vt07 (E/I/CL)52 Cache-minne Block Size: 1 --> 2
12 June G1518, Föreäsningl 8, vt07 (E/I/CL)53 Cache-minne Associativitet: 1 --> 2
12 June G1518, Föreäsningl 8, vt07 (E/I/CL)54 Cache-minne Associativitet: --> 4
12 June G1518, Föreäsningl 8, vt07 (E/I/CL)55 CPU CHIPSET Grafik MHz-GHz L2 cache L1 I-cache RAM/DRAM PCIBUS ISA/EISABUS IDEBUS(sar) PS2BUS SCSI-BUS PCI/USB DVD ZIP L1 D-cache HDD CDRW
12 June G1518, Föreäsningl 8, vt07 (E/I/CL)56 Tips om kul program Det finns ett nedladdningsbart program som visar hur just din dator är utrustad när det gäller processor och cache-minnen med mera Sök på google efter wcpuid och ladda hem på egen risk H.Oda
12 June G1518, Föreäsningl 8, vt07 (E/I/CL)57 Hem-laboration 2 Cache memory Provkör (1-) 2 testprogram (Kopiering av textsträng/memcpy) Addition av två matriser Studera hur prestanda exekveringstid och hitrate påverkas av olika värden på parametrar för I- och D-cache
12 June G1518, Föreäsningl 8, vt07 (E/I/CL)58 string-copy memcpy ;Loop: kopiera ett tecken initiera loop: LOAD tmp src(i) STORE dst(i) tmp inc i if more goto loop klart
12 June G1518, Föreäsningl 8, vt07 (E/I/CL)59 Matrisaddition for (i=0, i<max, i++)/* radindex i yttre loopen */ for (j=0, j<max, j++)/* kolumnindex i inre loopen */ dst(i,j) = src1(i,j) + src2(i,j);