Välimuistin suorituskyvyn mittaus Oletetaan, että välimuistiosuman kustannukset on sisällytetty normaaliin CPU-jaksoon. Tällöin CPU time = IC CPI CC = IC (CPI ideal + Memory-stall cycles) CC CPI stall Muistin sakkausjaksot (stall) tulevat välimuistin hudeista (luku- ja kirjoitussakkausjaksojen lukumäärä) Read-stall cycles = reads/program read miss rate read miss penalty Write-stall cycles = (writes/program write miss rate write miss penalty) + write buffer stalls write-through välimuistille voidaan yksinkertaistaa: Memory-stall cycles = accesses/program miss rate miss penalty #38
#39 Välimuistin suorituskyvyn vaikutukset välimuistin sakon suhteellinen osuus kasvaa prosessorin suorituskyvyn parantuessa (nopeampi kello ja/tai alhaisempi CPI) Muistin nopeus ei todennäköisesti kasva yhtä nopeasti kuin prosessorin suorituskyky. Laskettaessa CPI stall -arvoa, välimuistin hudin sakko on hudin käsittelyyn kuluvien prosessorin kellojaksojen määrä Mitä alempi CPI ideal, sitä merkittävämpiä ovat sakkausjaksot Prosessorin CPI ideal = 2, hutisakko 100 jaksoa, ohjelmassa 36% load/store - käskyjä ja hutisuhde 2% I$ -viittauksissa ja 4% D$ -viittauksissa Memory-stall cycles = 2% 100 + 36% 4% 100 = 3.44 CPI stalls = 2 + 3.44 = 5.44 eli, 2x suurempi kuin CPI ideal! Jos CPI ideal laskisi 1:een? 0.5? 0.25? Jos D$ hutisuhde kasvaisi 1%? 2%? Jos kellotaajuus tuplattaisiin (tuplaisi hutisakon)?
Keskim. muistin hakuaika Average Memory Access Time (AMAT) Suuremmassa välimuistissa pidempi hakuaika. Osuma-ajan pidentyminen todennäköisesti lisää uuden tason liukuhihnaan ja jossain vaiheessa suuren välimuistin pidempi osuma-aika ylittää osumasuhteesta saatavan edun. keskim. muistin hakuaika ottaen huomioon sekä osumat että hudit AMAT = Time for a hit + Miss rate x Miss penalty Oletetaan prosessori, jossa 20 psec kellojakso, hutisakko 50 kellojaksoa, hutisuhde 0.02 hutia per käsky ja välimuistin hakuaika 1 kellojakso. Mikä on AMAT? #40
Hutisuhteen pienentäminen #1 ❶Salli joustavampi lohkojen sijoittelu Suorasijoitettavassa välimuistissa muistilohko kuvautuu ainoastaan yhteen välimuistilohkoon Toinen ääripää on sallia muistilohkon kuvautuvan mihin tahansa välimuistin lohkoon täysin assosiatiivinen välimuisti Kompromissi: jaetaan välimuisti joukkoihin, joista jokainen koostuu n:stä tiestä (n-tie joukkoassosiatiivinen) Muistilohko kuvautuu uniikkiin (indeksi-kentän määrittämään) joukkoon ja voidaan mihin tahansa tämän joukon sisällä (n vaihtoehtoa) (block address) modulo (# sets in the cache) #41
#42 Assosiatiivinen välimuisti
Assosiatiivisuus 8:n elementin välimuisti #43
Esimerkki Tarkastellaan viittauksia muistiin osoitteilla: Aloitetaan tyhjällä välimuistilla kaikissa lohkoissa validi-kenttä tilassa 0 4 0 4 0 4 0 4 epätosi 0 miss 4 miss 0 miss 4 miss 00 Mem(0) 00 01 Mem(0) 4 01 00 Mem(4) 0 00 01 Mem(0) 4 0 miss 4 miss 0 miss 4 miss 01 00 Mem(4) 0 00 01 Mem(0) 4 01 00 Mem(4) 0 00 01 Mem(0) 4 #45 8 pyyntöä, 8 hutia Hudeista johtuva ping pong efekti - kaksi muistipaikkaa kuvautuvat samaan välimuistin lohkoon
Set Esim. joukkoassosiatiivinen välimuisti välimuisti 0 1 Way 0 1 0 1 V Tag Q1: Onko data välimuistissa? Data Vertaa välimuistin joukon kaikkia tageja kolmeen ylimpään osoitebittiin, jotta nähdään onko data välimuistissa Päämuisti 0000xx 0001xx 0010xx 0011xx 0100xx 0101xx 0110xx 0111xx 1000xx 1001xx 1010xx 1011xx 1100xx 1101xx 1110xx 1111xx Yhden sanan lohkot 2 LSB-bittilä määrittää tavun sanan sisällä (32-bittiset sanat) Q2: kuinka data löydetään? Käytä yhtä muistibittiä määrittämään mistä joukosta data löytyy #46 joukko = (lohkon osoite) modulo (välimuistin joukkojen lukumäärä)
Esimerkki Tarkastellaan viittauksia muistiin osoitteilla: 000 Mem(0) 000 Mem(0) 0 4 0 4 0 4 0 4 Aloitetaan tyhjällä välimuistilla kaikissa lohkoissa validi-kenttä tilassa epätosi 0 miss 4 miss 0 hit 4 hit 010 Mem(4) 010 Mem(4) 000 Mem(0) 000 Mem(0) 010 Mem(4) 8 pyyntöä, 1 huti Ratkoo aiemman ping pong -efektin, koska nyt 2 muistipaikkaa, jotka kuvautuvat samaan välimuistin lohkoon, voivat molemmat olla välimuistissa! #48
4-tie joukkoassosiatiivinen välimuisti 2 8 = 256 joukkoa jokaisella tiellä (jokaisessa 1 lohko) Tag 22 Index 8 tavupoikkeama Index 0 1 2... 253 254 255 V Tag Data V Tag Data V Tag Data V Tag Data 0 0 0 Way 0 1 1 1 2 Way 1 2 Way 2 2 Way 3... 253 254 255... 253 254 255... 253 254 255 32 #49 Hit 4x1 select Data
Joukkoassosiatiivisen välimuistin laajuus Kiinteänkokoisessa välimuistissa assosiatiivisuuden kaksinkertaistaminen tuplaa lohkojen määrän joukossa (teiden lukumäärä) ja puolittaa joukkojen lukumäärän vähentäen indeksiä yhdellä bitillä ja kasvattaen tagi-kenttää yhdellä bitillä Käytetään tagi-vertailuun Valitsee joukon Valitsee sanan lohkon sisällä Tag Index Block offset Byte offset Vähenevä assosiatiivisuus suorasijoitettu (ainoastaan yksi tie) Lyhyemmät tagit, ainostaan yksi vertailijayksikkö kasvava assosiatiivisyys Täysin assosiatiivinen (ainoastaann yksi joukko) Tagi muodostuu kaikista osoitebiteistä paitsi lohkon ja tavun poikkeamat #50
Joukkoassosiatiivisen välimuistin kustannus Hudin tapahtuessa, minkä tien lohko valitaan korvattavaksi? Least Recently Used (LRU): korvataan lohko, jota on ollut käyttämättä pisimpään Tarvitaan laitteistoa, joka pitää kirjaa milloin kutakin lohkoa on käytetty suhteessa muihin joukon lohkoihin 2-tie joukkoassosiatiiviselle tarvitaan yksi bitti per joukko bitti asetetaan, kun lohkoon viitataan (ja samalla nollataan toisen tien bitti) N-tien joukkoassosiatiivinen välimuisti N vertailijaa (viive ja pinta-ala) MUX -viive (joukon valinta) ennen kuin data on saatavilla Data saatavilla joukon valinnan jälkeen (ja osuma/huti päätöksen jälkeen). Suorasijoitettavassa välimuistissa lohko on saatavilla ennen osuma/huti-päätöstä Ei voida olettaa osumaa ja jatkaa ja toipua myöhemmin, jos tapauksessa olikin huti #51
Joukkoassosiatiivisen välimuistin edut Valinta suorasijoitettavan ja joukkoassosiatiivisen välimuistin välillä riippuu hudin kustannuksesta verrattuna toteutuksen kustannukseen Miss Rate 12 10 8 6 4 2 4KB 8KB 16KB 32KB 64KB 128KB 256KB 512KB 0 1-way 2-way 4-way 8-way Data from Hennessy & Patterson, Computer Architecture, 2003 Associativity Suurin hyöty saavutetaan siirtymällä suorasijoitettavasta välimuistista 2- tie välimuistiin (20% + vähennys hutisuhteessa) #52
Hutisuhteen pienentäminen #2 ❷Käytä useampia välimuistitasoja IC-teknologian edistyessä piirillä on enemmän tilaa suuremman L1 -välimuistin tai toisen välimuistitason toteuttamiseen tai joissain tapauksissa jopa L3 -välimuisti. Normaalisti L2 välimuisti tukee sekä käskyjä että dataa Esim. CPI ideal = 2, hutisakko 100 jaksoa (päämuistiin) ja hutisakko 25 jaksoa (UL2$-välimuistiin), 36% load/store - käskyjä, 2% (4%) hutisuhde L1 I$ (D$) muistiviittauksiin. Lisätään 0.5% UL2$ -hutisuhde CPI stalls = 2 +.02 25 +.36.04 25 +.005 100 +.36.005 100 = 3.54 (verrattuna 5.44, joka saadaan ilman L2$-välimuistia) #53
Monitasoisen välimuistin suunnittelu L1 ja L2 välimuistin suunnnittelutavoitteet ovat erilaiset: Primäärivälimuistissa tavoitteena on osuma-ajan minimointi ja lyhyemmäm kellon jaksonajan tukeminen Pienempi muisti pienemmällä lohkokoolla Sekundäärivälimuistin tavoitteena on hutisuhteen minimointi päämuistin pitkän hakuajan aiheuttaman sakon pienentäiseksi Suurempi muisti suuremmalla lohkokoolla Korkeampi assosiatiivisuus L1-välimuistin hutisakko pienenee merkittävästi käytettäessä L2-muistia L1$ voi olla pienempi (eli nopeampi) mutta suuremmalla hutisuhteella L2 välimuistissa hutisuhde on tärkeämpi kuin osuma-aika L2$ osuma-aika määrittää L1$:n hutisakon L2$:n paikallinen hutisuhde >> globaali hutisuhde #54
Interaktio ohjelmiston kanssa Hudit riippuvat pitkälle muistinviittauskuviosta Algoritmi viittaa muistiin tietyssä järjestyksessä Kääntäjän optimoinnit muistiviittauksiin algoritmin valinnassa voi joutua huomioimaan kohdejärjestelmän välimuistin ominaisuudet #55
Välimuistin parametrejä L1 cache organization & size L1 associativity Intel Nehalem Split I$ and D$; 32KB for each per core; 64B blocks 4-way (I), 8-way (D) set assoc.; ~LRU replacement AMD Barcelona Split I$ and D$; 64KB for each per core; 64B blocks 2-way set assoc.; LRU replacement L1 write policy write-back, write-allocate write-back, write-allocate L2 cache organization & size Unified; 256MB (0.25MB) per core; 64B blocks Unified; 512KB (0.5MB) per core; 64B blocks L2 associativity 8-way set assoc.; ~LRU 16-way set assoc.; ~LRU L2 write policy write-back, write-allocate write-back, write-allocate L3 cache organization & size Unified; 8192KB (8MB) shared by cores; 64B blocks Unified; 2048KB (2MB) shared by cores; 64B blocks L3 associativity 16-way set assoc. 32-way set assoc.; evict block shared by fewest cores L3 write policy write-back, write-allocate write-back; write-allocate #56
Välimuistiohjaimen ohjaus Esimerkkivälimuistin piirteet suorasijoitettu, write-back, write allocate Lohkon koko: 4 words (16 bytes) Välimuistin koko: 16 KB (1024 blocks) 32-bittiset tavuosoitteet Valid - ja dirty -bitti per lohko lukitseva välimuisti CPU odottaa kunnes muistiviittaus suoritettu loppuun 31 10 9 4 3 0 Tag Index Offset 18 bits 10 bits 4 bits #57
Liitynnän signaalit Read/Write Read/Write Valid Valid Address 32 Address 32 CPU Write Data 32 Cache Write Data 128 Memory Read Data 32 Read Data 128 Ready Ready Useampi jakso per viittaus #58
Tilakone Tilakonetta käytetään askeltamaan ohjaukset Tilojen joukkko, transitio jokaisella kellosignaalin reunalla Tilat binäärikoodattuja Nykyinen tila talletettu rekisteriin Seuraava tila = f n (nykyinen tila, nykyiset sisäänmenot) ohjaussignaalit = f o (nykyinen tila) #59
4-tilainen välimuistin ohjain Idle Cache Hit Mark Cache Ready Valid CPU request Compare Tag If Valid && Hit Set Valid, Set Tag, If Write set Dirty Allocate Read new block from memory Memory Not Ready Cache Miss Old block is clean Memory Ready Cache Miss Old block is Dirty Write Back Write old block to memory Memory Not Ready #60
Välimuistin koherenssi, multicore Jos multicore prosessorissa, ytimet jakavat yhteisen fyysisen muistiavaruuden, aikaansaadaan välimuistin koherenssiongelma Read X Read X Core 1 Core 2 Write 1 to X L1 I$ L1 D$ L1 I$ L1 D$ X = 01 X = 0 Time step Event CPU A s cache CPU B s cache Memory 0 0 1 CPU A reads X 0 0 2 CPU B reads X 0 0 0 X = 01 Unified (shared) L2 3 CPU A writes 1 to X 1 0 1 #61
Koherentti muistijärjestelmä Mikä tahansa luku data-alkioon pitäisi palauttaa viimeiseksi kirjoitettu data-alkion arvo Koherenssi määrittää mitä arvoja lukuoperaatio voi palauttaa Kirjoitukset samaan osoitteeseen ovat sarjallisia (kaikkien prosesoreiden on nähtävä kaksi kirjoitusta samaan muistipaikkaan samassa järjestyksessä) Konsistenssi määrittää milloin lukuoperaatio palauttaa kirjoitetun arvon (milloin muut prosessorit näkevät kirjoituksen) #62
Välimuistin koherenssiprotokollat Tarvitaan laitteistoprotokolla välimuistin koherenssin takaamiseksi, suosituin snooping Välimuistin ohjain nuuskii väylää erillisellä osoite-tagi-laitteistolla ja päättelee löytyykö välimuistista kopio lohkosta, jota on pyydetty jaetusta muistista Kirjoituksenmitätöinti protokolla kirjoitus vaatii poissulkevan viittauksen ja mitätöi kaikki muut lohkon kopiot järjestelmässä Poissulkeva viittaus varmistaa, että alkiosta ei ole olemassa mitään muuta luettavaa tai kirjoitettavaa kopiota Jos kaksi prosessoria yrittää kirjoittaa samaan dataan samaan aikaan, toinen voittaa ja toisen kopio mitätöidään. Toisen prosessorin operaation loppuunsaattamiseksi, sen on haettava uusi kopio datasta, joka sisältää päivitetyn arvon sarjallistetut kirjoitukset #63
Esim. Nuuskiva mitätöinti Read X Read X Core 1 Core 2 Write 1 to X Read X L1 I$ L1 D$ L1 I$ L1 D$ X = 01 X = 01 I CPU activity CPU A reads X Bus activity Cache miss for X CPU A s cache CPU B s cache Memo ry 0 0 0 X = I 10 Unified (shared) L2 CPU B reads X CPU A writes 1 to X Cache miss for X Invalidate for X 0 0 0 1 0 CPU B read X Cache miss for X 1 1 1 #64
Yhteenveto: välimuistin suunnitteluavaruus Useita interaktiivisia ulottuvuuksia välimuistin koko lohkon koko assosiatiivisuus korvausmenetelmä write-through vs write-back write allocation Optimaalinen valinta on kompromissi Riippuu viittauksista (viittauskuvio) kuorma Käyttö (I-cache, D-cache, TLB) Riippuu käytetystä teknologiasta /kustannuksesta Yleensä yksinkertaisuus voittaa Cache Size Associativity Block Size Bad Good Factor A Factor B Less More #65