Write-allocate versus no-write-allocate: gedrag bij een write miss, verkeer en combinaties vergeleken
Write-allocate en no-write-allocate zijn strategieën die bepalen of een cacheregel in de cache wordt gehaald wanneer een schrijfactie mist. Bij write-allocate leest de cache eerst de regel uit het niveau eronder en voert daarna de schrijfactie in de cache uit. Bij no-write-allocate wordt de regel niet opgehaald en gaat de schrijfactie rechtstreeks naar het niveau eronder. Dit is een andere keuze dan write-back versus write-through, die bepalen wanneer een schrijfactie met een hit het niveau eronder bereikt, maar write-allocate wordt meestal gecombineerd met write-back en no-write-allocate met write-through.
| Kenmerk | Write-allocate | No-write-allocate |
|---|---|---|
| Bij een write miss | Leest de hele regel uit het niveau eronder, plaatst die in de cache en schrijft er dan in | Laat de cache ongemoeid en stuurt de schrijfactie direct naar het niveau eronder |
| Line fill (lezen) | Vereist. Op multicoresystemen is het een read for ownership (RFO) die vóór het schrijven de kopieën van andere cores ongeldig maakt, zodat een store miss op de geheugenbus als een leesactie verschijnt | Niet nodig; alleen de geschreven data gaat naar het niveau eronder |
| Gebruikelijke combinatie | Write-back: latere schrijfacties naar de opgehaalde regel geven een hit en worden zonder geheugenverkeer opgevangen, wat de kosten van de eerste leesactie terugverdient | Write-through: elke schrijfactie gaat sowieso naar het niveau eronder, dus het ophalen van de regel zou het schrijfverkeer niet verminderen |
| Verkeer naar het niveau eronder | Lager als dezelfde regel vaak wordt beschreven of de geschreven data weer wordt gelezen | Elke missende schrijfactie gaat telkens naar buiten, maar er ontstaan geen extra leesacties |
| Grote hoeveelheden data die alleen worden geschreven (geheugen wissen, uitvoer schrijven) | Elke regel wordt alleen gelezen om te worden overschreven en later teruggeschreven, wat het verkeer ongeveer verdubbelt, en nuttige data wordt uit de cache verdrongen | Geen leesacties en geen cachevervuiling, dus geschikt voor dit soort data |
| Lezen direct na schrijven | De regel staat in de cache, dus de leesactie geeft een hit | De regel staat niet in de cache, dus de leesactie mist en haalt de regel op |
| Implementatietechnieken | Voor data die alleen wordt geschreven, omzeilen non-temporal (streaming) stores de cache en sturen ze gebundelde schrijfacties rechtstreeks naar het hoofdgeheugen; sommige ISA's hebben ook een instructie die een hele regel op nul zet zonder de oude inhoud te lezen | Een schrijfbuffer verbergt de schrijflatentie en voegt vaak meerdere schrijfacties naar dezelfde regel samen tot één overdracht |
| Waar het wordt gebruikt | Gebruikelijk in write-back-caches; de meeste L1- tot L3-caches van CPU's zijn write-back | Gebruikelijk in write-through-caches, zoals een kleine L1 met daarachter een write-back-L2, of eenvoudige embedded processors |
De getalswaarden zijn typische ordegroottes en variëren per procesgeneratie en product.