Skrivning i cacheminnen zTräff zMiss zSkrivbuffert
Skrivträff zRätt adress finns i giltig adresslapp zSka huvudminnet uppdateras? yJa = genomskrivning (write-through) yNej = återskrivning (write-back, write- behind)
Write-through zEnkelt zPrimärminnet har alltid aktuella data zMinus: kräver mycket busstrafik
Write-back zCacheminnet kan ha senaste värdet zUppdatera primärminnet när blocket byts z"Dirty bit" anger om blocket skrivits zMinskar busstrafiken zExtra krångligt och extra nödvändigt i flerprocessorsystem
Skrivmissar z1. Skrivs nya värdet till cacheminnet? Ja = platsreservation vid skrivmiss (allocate on write miss) z2. Hämtas gamla värdet till cacheminnet? Ja = hämtning vid skrivmiss (fetch on write) z3. Skrivs cacheminnet medan adresslappen läses? Ja = write before hit
Alternativ vid skrivmiss
Fetch-on-write zReservera plats (släng ut något vid behov) zHela 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 4711ABCD adresslappord 0ord 1ord 2ord 3 LOADI R1 <- #$ LOADI R2 <- #$0123 STORE 0(R1) <- R2 Medför platsreservation och hämtning XYZW …följt av skrivning 11147X0123ZW
Write-validate zReservera plats (släng ut något vid behov) zHämta inget zKräver giltigbitar för varje ord i blocket zMinskar busstrafik
Exempel (i datacache med bara 1 block) Write-validate 4711ABCD adresslappord 0ord 1ord 2ord 3 LOADI R1 <- #$ LOADI R2 <- #$0123 STORE 0(R1) <- R2 Medför platsreservation men ingen hämtning …följt av skrivning anger nollställd giltigbit
Write-around zIngen platsreservation zIngen hämtning (förstås) zIngen write-before-hit zCacheinnehåll helt opåverkat av skrivmiss zEnkelt att bygga
Exempel (i datacache med bara 1 block) Write-around 4711ABCD adresslappord 0ord 1ord 2ord 3 LOADI R1 <- #$ LOADI R2 <- #$0123 STORE 0(R1) <- R2 Cacheminnet påverkas inte, skrivning endast till primärminnet 4711ABCD
Write-invalidate zCacheminnet skrivs alltid zAdresslappen uppdateras inte vid miss - blocket måste ogiltigförklaras zEnkel logik zEndast direktmappade cacheminnen av genomskrivningstyp (write-through)
Exempel (i datacache med bara 1 block) Write-invalidate 4711ABCD adresslappord 0ord 1ord 2ord 3 LOADI R1 <- #$ LOADI R2 <- #$0123 STORE 0(R1) <- R2 Skrivning före adresslappskontroll A0123CD …leder till att adresslappen inte stämmer - ogiltigförklara blocket ogiltigtA0123CD
Träff och miss zI princip oberoende zI praktiken: ygenomskrivning (write-through) vid träff - ofta write-around vid miss yåterskrivning (write-back) vid träff - ofta fetch-on-write vid miss zMed tanke på skrivning av flera ord i följd
Skrivbuffert zCacheminne av genomskrivningstyp är enkelt och bra zMen vi vill inte stoppa processorn medan skrivning sker till primärminnet zLösning: skrivbuffert mellan cacheminne och primärminne
Skrivbuffert zEndast skrivningar zBlir skrivbufferten full så måste processorn vänta, annars inte Processor Cacheminne Skriv- buffert Primärminne
Enklast möjliga skrivbuffert zEndast ett ord zSparcstation SLC (1990) z1 STORE tar 1 cykel, 2 STORE i följd tar 18 cykler adressdata giltigbit v
Nackdel med skrivbuffert Problem: STORE 0(R3) <- … LOAD … <- 0(R3) zLoad kollar i skrivbufferten för att slippa vänta
Pentium Pro (och senare) zSTORE körs i programmets ordning zLOAD får köras före andra LOAD zLOAD får köras före STORE
Sammansmältning zNär STORE ej körs i programmets ordning zEn sammansmältande skrivbuffert (coalescing write buffer) kan ändra ordning på STORE-instruktioner zOlika varianter på sammansmältning finns
Skrivbuffert med flera platser zSka skrivningar till samma adress slås ihop eller ska man ta en ny plats? adressdatav adressdatav adressdatav
Bred skrivbuffert zSka skrivningar till intilliggande adresser slås ihop eller ska man ta en ny plats? adressv v v ABCD ord 0ord 1ord 2ord 3 ABCD ABCD
Grader av sammansmältning zIngen sammansmältning yny plats för varje skrivning ySTORE körs i ordning zBegränsad sammansmältning yendast översta platsen i skrivbufferten kollas yfångar upp skrivningar till flera ord i följd zFull sammansmältning yalla skrivbuffertplatser kollas