240 likes | 674 Views
Skrivning i cacheminnen. Träff Miss Skrivbuffert. Skrivträff. Rätt adress finns i giltig adresslapp Ska huvudminnet uppdateras? Ja = genomskrivning (write-through) Nej = återskrivning (write-back, write-behind). Write-through. Enkelt Primärminnet har alltid aktuella data
E N D
Skrivning i cacheminnen • Träff • Miss • Skrivbuffert
Skrivträff • Rätt adress finns i giltig adresslapp • Ska huvudminnet uppdateras? • Ja = genomskrivning(write-through) • Nej = återskrivning(write-back, write-behind)
Write-through • Enkelt • Primärminnet har alltid aktuella data • Minus: kräver mycket busstrafik
Write-back • Cacheminnet kan ha senaste värdet • Uppdatera primärminnet när blocket byts • "Dirty bit" anger om blocket skrivits • Minskar busstrafiken • Extra krångligt och extra nödvändigt i flerprocessorsystem
Skrivmissar • 1. Skrivs nya värdet till cacheminnet?Ja = platsreservation vid skrivmiss(allocate on write miss) • 2. Hämtas gamla värdet till cacheminnet?Ja = hämtning vid skrivmiss (fetch on write) • 3. Skrivs cacheminnet medan adresslappen läses? Ja = write before hit
Fetch-on-write • Reservera plats (släng ut något vid behov) • Hela gamla blocket hämtas • Efter hämtningen är det ingen miss längre- STORE kan köras igen, enkel logikkrets
Exempel (i datacache med bara 1 block)Fetch-on-write adresslapp ord 0 ord 1 ord 2 ord 3 4711 A B C D LOADI R1 <- #$111474LOADI R2 <- #$0123STORE 0(R1) <- R2 Medför platsreservation och hämtning... 11147 X Y Z W …följt av skrivning 11147 X 0123 Z W
Write-validate • Reservera plats (släng ut något vid behov) • Hämta inget • Kräver giltigbitar för varje ord i blocket • Minskar busstrafik
Exempel (i datacache med bara 1 block) Write-validate adresslapp ord 0 ord 1 ord 2 ord 3 4711 A B C D LOADI R1 <- #$111474LOADI R2 <- #$0123STORE 0(R1) <- R2 Medför platsreservation men ingen hämtning... 11147 -- -- -- -- …följt av skrivning 11147 -- 0123 -- -- -- anger nollställd giltigbit
Write-around • Ingen platsreservation • Ingen hämtning (förstås) • Ingen write-before-hit • Cacheinnehåll helt opåverkat av skrivmiss • Enkelt att bygga
Exempel (i datacache med bara 1 block) Write-around adresslapp ord 0 ord 1 ord 2 ord 3 4711 A B C D Cacheminnet påverkas inte, skrivning endast till primärminnet LOADI R1 <- #$111474LOADI R2 <- #$0123STORE 0(R1) <- R2 4711 A B C D
Write-invalidate • Cacheminnet skrivs alltid • Adresslappen uppdateras inte vid miss- blocket måste ogiltigförklaras • Enkel logik • Endast direktmappade cacheminnen av genomskrivningstyp (write-through)
Exempel (i datacache med bara 1 block) Write-invalidate adresslapp ord 0 ord 1 ord 2 ord 3 4711 A B C D LOADI R1 <- #$111474LOADI R2 <- #$0123STORE 0(R1) <- R2 Skrivning före adresslappskontroll... 4711 A 0123 C D …leder till att adresslappen inte stämmer - ogiltigförklara blocket ogiltigt A 0123 C D
Träff och miss • I princip oberoende • I praktiken: • genomskrivning (write-through) vid träff- ofta write-around vid miss • återskrivning (write-back) vid träff- ofta fetch-on-write vid miss • Med tanke på skrivning av flera ord i följd
Skrivbuffert • Cacheminne av genomskrivningstypär enkelt och bra • Men vi vill inte stoppa processorn medan skrivning sker till primärminnet • Lösning: skrivbuffertmellan cacheminne och primärminne
Skrivbuffert • Endast skrivningar • Blir skrivbufferten full så måste processorn vänta, annars inte Processor Cacheminne Skriv-buffert Primärminne
Enklast möjliga skrivbuffert giltigbit • Endast ett ord • Sparcstation SLC (1990) • 1 STORE tar 1 cykel,2 STORE i följd tar 18 cykler v adress data
Nackdel med skrivbuffert • Problem:STORE 0(R3) <- … LOAD … <- 0(R3) • Load kollar i skrivbufferten för att slippa vänta
Pentium Pro (och senare) • STORE körs i programmets ordning • LOAD får köras före andra LOAD • LOAD får köras före STORE
Sammansmältning • När STORE ej körs i programmets ordning • En sammansmältande skrivbuffert (coalescing write buffer)kan ändra ordning på STORE-instruktioner • Olika varianter på sammansmältning finns
Skrivbuffert med flera platser • Ska skrivningar till samma adress slås ihop eller ska man ta en ny plats? v adress data v adress data v adress data
Bred skrivbuffert ord 0 ord 1 ord 2 ord 3 • Ska skrivningar till intilliggande adresser slås ihop eller ska man ta en ny plats? v adress A B C D v adress A B C D v adress A B C D
Grader av sammansmältning • Ingen sammansmältning • ny plats för varje skrivning • STORE körs i ordning • Begränsad sammansmältning • endast översta platsen i skrivbufferten kollas • fångar upp skrivningar till flera ord i följd • Full sammansmältning • alla skrivbuffertplatser kollas