Föreläsningsanteckningar 5. Cacheminnen

Relevanta dokument
Föreläsning 5 1 CPI Sammanfattning pipelining Cacheminnen

Föreläsning 5 1 CPI. Sammanfattning pipelining Cacheminnen

6. Minnen. Associativt minne

Associativt minne ... A= adress till PM/CM CL = cachelinens storlek CM = cacheminnets storlek. Tag = A/CL = A/2 4 = A(31:4) Adress. K tag.

Tentamen den 17 mars 2016 Datorteknik, EIT070

Tentamen den 12 januari 2017 Datorarkitektur med operativsystem, EDT621

Föreläsningsanteckningar 4. Pipelining

Vad bör göras? Steg 1. RISC => pipelining. Parallellism. Pipelining. Nya LDA 13. RISC(reduced instruction set computer) Öka klockfrekvensen

Tentamen den 9 januari 2018 Datorarkitekturer med operativsystem (EITF60)

CE_O5. Cacheminne. Hemlaboration 2.

Tentamen i Digitala system - EITA15 15hp varav denna tentamen 4,5hp

Närliggande allokering Datorteknik

Digitalteknik och Datorarkitektur 5hp

Datorarkitekturer med Operativsystem

Minnet från processorns sida Datorteknik

Multi-ported cache En rapport om några lösningar till att få flera minnesaccesser simultant.

Datorarkitekturer med operativsystem ERIK LARSSON

Jämförelse av skrivtekniker till cacheminne

SVAR TILL TENTAMEN I DATORSYSTEM, VT2013

HF0010. Introduktionskurs i datateknik 1,5 hp

Uppgift 1: a) u= a c + a bc+ ab d +b cd

Digitala System: Datorteknik ERIK LARSSON

Digitala System: Datorteknik ERIK LARSSON

Exempeltentamen Datorteknik, EIT070,

En processor kan ha en klockfrekvens på flera GHz. Det går alltså a9 exekvera en instruk=on väldigt for, givet a9 instruk=onen finns i processorn.

MESI i Intel Core 2 Duo

4. Pipelining. 4. Pipelining

TSEA28 Datorteknik Y (och U)

SVAR TILL TENTAMEN I DATORSYSTEM, HT2013

Snapdragon 810: Cacheminnet

Digitala System: Datorteknik ERIK LARSSON

TSEA28 Datorteknik Y (och U)

Tentamen den 18 mars svar Datorteknik, EIT070

Datorteknik ERIK LARSSON

LABORATION DATORTEKNIK D. Pipelining. Namn och personnummer. Version: (OS,OVA,AN)

Föreläsningsanteckningar 2. Mikroprogrammering I

TSEA28 Datorteknik Y (och U)

Datorsystemteknik för E/D

Tentamen den 14 januari 2015 Datorarkitekturer med operativsystem, EDT621, 7,5 poäng

Tentamen Datorteknik D del 2, TSEA49

Datorsystemteknik DVGA03 Föreläsning 8

En Von Neumann-arkitektur ( Von Neumann-principen i föreläsning 1) innebär:

Mer datorarkitektur. En titt I datorn Minnen

CE_O8. Cacheminne. Hemlaboration 2.

Övning1 Datorteknik, HH vt12 - Talsystem, logik, minne, instruktioner, assembler

Tentamen. Datorteknik Y, TSEA28

Föreläsningsanteckningar 3. Mikroprogrammering II

General Purpose registers ALU I T H S V N Z C SREG. Antag att vi behöver skriva in talet 25 till register R18

Grundläggande datavetenskap, 4p

TSEA28 Datorteknik Y (och U)

Hantering av hazards i pipelines

Minnets komponenter. Digitala System: Datorteknik. Programexekvering. Programexekvering. Enhet för utdata. Enhet för indata CPU.

Svar till tentamen den 16 december 2013 Datorarkitekturer med operativsystem, EDT621, 7,5 poäng

Tentamen den 14 januari 2016 Datorarkitektur med operativsystem, EDT621

Cache-koherens protokoll MESI och MOSI

Cacheminne och adressöversättning

Filsystem - Inode. Datorteknik. Minnets komponenter. Programexekvering. Enhet för indata. Enhet för utdata CPU. Primärminne.

Datorarkitekturer med operativsystem ERIK LARSSON

Tentamen. Datorteknik Y, TSEA28

Cacheminne i en AMD Opteron Processor

Rapport (1,5 HP) Lunds Universitet HT15

Datorteknik. Föreläsning 6. Processorns uppbyggnad, pipelining. Institutionen för elektro- och informationsteknologi, LTH. Mål

Cacheminne i en Intel Core 2 Duo-processor

Fö 2: Minnen. Introduktion. Primärminnet. Interna och externa minnen. Introduktion, Klassificiering

Övning1 Datorteknik, HH vt12 - Talsystem, logik, minne, instruktioner, assembler

Lösningsförslag till Tenta i Mikrodator

DatorsystemteknikDAVA14 Föreläsning 9

Datorhistorik. Föreläsning 3 Datorns hårdvara EDSAC. Eniac. I think there is a world market for maybe five computers. Thomas Watson, IBM, 1943

Omtentamen i CDT204 - Datorarkitektur

Tentamen. Datorteknik Y, TSEA28

Tentamen. Datorteknik Y, TSEA28

En något mer detaljerad bild av en processor. De tre delarna i processorn är: Nere 3ll vänster finns e' antal register som används för a' lagra data.

En något mer detaljerad bild av en processor. De tre delarna i processorn är: Nere 3ll vänster finns e' antal register som används för a' lagra data.

Datorsystem. Tentamen

Tentamen i Digitala system - EITA15 15hp varav denna tentamen 4,5hp

Spekulativ exekvering i CPU pipelining

Cacheminne Intel Core i7

Digital- och datorteknik

Datorsystem 2 CPU. Förra gången: Datorns historia Denna gång: Byggstenar i en dators arkitektur. Visning av Akka (för de som är intresserade)

Dugga 1 status 41 godkända 39 ej godkända ERIK LARSSON

Tentamen. Datorteknik Y, TSEA28

MESI-Protokollet. Richard Elvhammar. Lund Universitet 4/12-16

Lösningsförslag till Tenta i Mikrodator

Improved-MOESI Cache koherens Protokoll

Per Holm Lågnivåprogrammering 2014/15 24 / 177. int och double = = 2, 147, 483, 647

TSEA28 Datorteknik Y (och U)

System S. Datorarkitektur - en inledning. Organisation av datorsystem: olika abstraktionsnivåer. den mest abstrakta synen på systemet

Digital- och datorteknik

Lågnivåprogrammering. Föreläsning 2 Lågnivåprogrammering. Binära tal. En enkel modell av datorns inre

Lösningar till tentamen i EIT070 Datorteknik

Tentamen. Datorteknik Y, TSEA28

Datorsystem. Exempeltentamen

Tentamen. Datorteknik Y, TSEA28

Lösningsförslag till tentamen i IS1500 Datorteknik

Cache coherence hos multicoreprocessorer

Läsminne Read Only Memory ROM

Processor pipelining genom historien (Intel i9-intel i7)

Datorsystem. Tentamen

Digital- och datorteknik

Datorteknik. Tomas Nordström. Föreläsning 2. För utveckling av verksamhet, produkter och livskvalitet.

Transkript:

Föreläsningsanteckningar 5. Cacheminnen Olle Seger 2012 Anders Nilsson 2016 1 Inledning Bakgrunden till att cacheminnen behövs för nästan alla datorer är enkel. Vi kan kallt räkna med att processorn är pipelinad. Typiskt gäller detta: Processorn behöver hämta en ny instruktion varje klockcykel. Ofta behövs också en operand samtidigt. Vår dator behöver ett minne på låt oss säga 1 GB. De här kraven går inte ihop. Processorn är minst 10 gånger snabbare (hungrigare) än ett minne av den storleken. Ett cacheminne är ett litet och snabbt minne, som är placerat mellan CPU och primärminne: Grejen är att automatiskt försöka hålla de oftast använda instruktionerna/data i cacheminnet. Låt oss göra N accesser och anta följande parametrar: 1

Medelaccestiden ges av: minne accesstid antal accesser cache t CM N CM primär t P M N P M = N N CM t med = N CM t CM + (N N CM ) t P M N = h t CM + (1 h) t P M, där h = N CM /N kallas träffkvot eller hit ratio. Av formeln framgår att om träffkvoten närmar sig 1, så blir medelaccestiden lika med cacheminnets accestid. En typisk träffvot är 0,95. Ett cacheminne består av en styrenhet (cache controller) och ett snabbt minne: När vi accessar minnet händer följande: När datorn startar är cacheminnet tomt. Varje minnesaccess ger till att börja med en cachemiss, kopiering PM->CM. Vanligt är att vid en cachemiss kopiera flera (t ex 4) instruktioner/data till CM. Kallas en cacheline. Anledningen till att det går att få höga träffkvoter är nu följande: Program innehåller loopar => sannolikheten är stor att samma instruktion/data accessas igen (temporal lokalitet). Program/data är sekvensiella => sannolikheten är stor att också nästa instruktion/data accessas (spatial lokalitet). 2

2 Olika typer av cacheminnen Vi går nu direkt på några olika sätta att bygga cacheminnen. Som ett exempel tänker vi oss att primärminnet är 4 GB och att databussen är 32 bitar bred. Minnet är alltså organiserat 1G x 4B. För att adressera primärminnet behövs 32 adressledningar. Vi vill bygga ett cacheminne med storleken 4 kb. Cachelinens storlek ska vara 4 ord = 16 byte. När man resonerar runt cacheminnen, kan det hjälpa att tänka på primärminnet, som indelat i block lika med cacheminnets storlek. Vi tänker ett steg vidare och visar också cachelines: Vi slår också fast att en byte kan finnas på vilken adress som helst i minnet. Ett ord (=4 bytes) kan bara finnas på en adress, som är en multipel av 4. På samma sätt gäller att en cacheline bor på en multiplel av 16 i adressrymden. 2.1 Associativt minne Nedanstående bild visar en associativ cache. Vi har valt storleken 4kB, alltså består den av 256 identiska rader bestående av en komparator, ett tagregister och cachelinen (16 B). Efter att det första blocket i PM har besökts, finns detta i cachen (naturligvis är hela cachelinarna fyllda): 3

Observera att vi för varje cacheline, måste spara varifrån i minnet den kommer. Det räcker med att spara cachelinens nummer. I minnet får det plats 2 32 /2 4 = 2 28 cachelines, alltså de 28 mest signifikanta bitarna. I bilden visas de 7 mest signifikanta hex-siffrorna. Vid sökning i cacheminnet jämförs adressens 28 mest signifikanta bitar parallellt med 256 komparatorer med de sparade taggarna. Vid likhet någonstans har vi en cacheträff. Observera att till varje cacheline hör en kontrollbit: valid. Annars kan vi inte skilja på skräp och riktiga data. Vid reset (eller cachetömning) nollställs alla validbitar. 2.2 Direktmappad cache Associativt minne är ett dyrt men bra sätt att bygga cache på. 4kB-cache innehåller alltså 256 komparatorer. Fördelen är att cachelinar kan placeras var som helst i cachen. Hur det går till hoppar vi över. Nedanstående bild visar en direktmappad cache på 4kB. Den innehåller bara en komparator. För att åstadkomma detta kan inte cachelinarna placeras fritt 4

längre! Vi tar samma exempel som förra gången. Början på det övre blocket har besökts. Det bör påpekas att ovanstående är bara en metod att bygga en cache med endast en komparator. Hur har det gått till? Vi bestämmer oss för detta: en cacheline från minnet ska placeras på samma relativa position i cacheminnet som i blocket! Denna position (rad) brukar kallas index. Vi gör en formel av detta. (A = adress, CL = cachelinens storlek, CM = cacheminnets storlek) index = (A mod CM)/CL = (A mod 2 12 )/2 4 och taggen är helt enkelt blocknumret och ges av tag = A/CM = A/2 12 5

Cachelinen som börjar på adressen 0x12345670 ska alltså placeras på index = 0x67 med tag = 0x12345. Vi inser då att cachelinar på adresserna 0xzzzzz670 (z=godtycklig hex-siffra) får samma index. Detta är nackdelen med en-komparatormetoden. 2.3 Flervägscache Den enklaste metoden att råda bot på detta är att helt enkelt duplicera cacheminnet: Detta är en 4-vägs cache på 16 kb. Vid en cachemiss, så hämtas ett data och vi har nu ett val. Vilken av de 4 cachelinarna kommer att bli öveskriven. Vi behöver en så kallad replacement algorithm. En vanlig sådan är LRU=least recently used. Den brukar beskrivas så här. Till varje cacheline hör en liten räknare (kanske 3 bitar). Denna används för att jämföra de 4 cachelinarna med samma index. Detta är ett tänkbart scenario: cache hit: max->cntr 6

cache miss: välj cacheline med minst cntr. Fyll på. max->cntr inget: räkna ner alla cntr (aging, dock inte på varje cp) Ovanstående är den vanligaste cachetypen. Givet en viss cachestorlek t ex 16 kb, visar det sig vara bättre att organisera den som 4x4 kb istf 1x16 kb. 2.4 BPT = Branch Prediction Table BPT avser att få bort den förtretliga NOP-en vid ett taget hopp. Betrakta vår dator med en installerad BPT: En BPT, består av ett associativt minne och en styrenhet. I det associativa minnet lagras information om hoppinstruktioner i programmet: hoppets adress, var finns hoppet. hoppadressen, vart hoppar hoppet. 7

hoppstatistik. Med exempelvis 2 bitar, kan vi hålla reda på om hoppet är: Strongly Taken (ST), Taken (T), Not Taken (NT) eller Strongly Not Taken (SNT). En styrenhet lyssnar på programflödet och uppdaterar bitarna. Vi antar nu att vi har kört några varv i loopen, så att hoppet finns noterat i BPT. Ännu så länge har hoppet utförts varje gång, så hoppstatistiken säger ST. Vi ser nu att när PC har blivit 24 och hoppet ska hämtas ur programminnet så kan samtidigt PC få värdet 10. Detta är en chansning (prediktering). Någon klockcykel senare får vi reda på om chansningen var korrekt. Om så är fallet är det bara och köra på och vi har vunnit en klockcykel (den där NOP-en). Om inte måste en felaktigt inhämtad instruktion ersättas med NOP. Vi tar en lite närmare titt på detta påstående med ett pipelinediagram. Vi inför ett nytt register SPC = sparad PC. Vi kör detta program som en test. Vi antar att BPT falskeligen predikterar och skissar på vad som händer. LOOP: 10: ZZZ 14: VVV 18: WWW 1C: ADDI R1,R1,1 20: SFEQ R1,R2 24: BF LOOP 28: XXX 2C: YYY PC IR1 IR2 IR3 IR4 Kommentar 24 SFEQ ADDI - - Använd BPT och 10->PC, PC+4 ->SPC 10 BF SFEQ ADDI - Hoppet redan verkställt. 14 ZZZ BF SFEQ ADDI Låt F=0. Fel chansat! SPC-> PC 28 NOP NOP BF SFEQ Vi får stopp på ZZZ,VVV. Sätt hoppstatistik = T. 2C XXX NOP NOP BF Vi är på rätt spår Vi konstaterar efter denna (långt ifrån fullständiga) undersökning: Rätt prediktering. Vinst av två klockcykler. Instruktionen XXX går inte in i pipelinen och någon NOP behövs inte alls. Fel prediktering. Förlust av två klockcykler. Så länge rätt prediktioner överväger vinner vi på att koppla in en BPT. 8

2.5 Separata I- och D-cachar Slutligen visar vi denna koppling, som är mycket vanlig. Instruktions- och dataminnena har bytts ut mot cacheminnen. Dessa båda cacheminnen kommunicerar över en gemensam buss mot primärminnet. Vi konstaterar följande: Vid cachemiss i I-cache eller D-cache måste pipelinen stoppas. Båda cacharna använder en gemensam buss mot minnet. Samtidig miss i I-cache och D-cache, innebär påfyllning av en cache i taget. Pipelinen fryst hela tiden. I D-cachen tillkommer en frågeställning: hur ska skrivning mot minnet hanteras. Två taktiker brukar nämnas i litteraturen: 9

write-thru. Vid skrivning mot cacheminnet uppdateras även primärminnet. write-back. Uppdateringen av primärminnet sker endast när en cacheline kommer att skrivas över. En extra kontrollbit, dirty, håller reda på om cachelinen ändrats. Endast då måste en skrivning ske. Referenser [1] Josefsson M. (2008): Föreläsningsunderlag TSEA49 Datorteknik D del 2, LiU-tryck. 10