Bosh sahifa Wiki Write-Allocate Cache

Write-Allocate Cache

Write-Allocate Cachestore buyrug‘i keshda yo‘q satrga murojaat qilganda, shu cache line’ni avval quyi xotira darajasidan olib kelib keshga joylashtiradigan yozuv-miss siyosati. Keyin store kerakli baytlarni yangilaydi. Ushbu usul “fetch on write” deb ham ataladi va ko‘pincha write-back kesh bilan birga ishlatiladi.

Store miss jarayoni

Manzil taglar orasida topilmasa kesh setida victim way tanlanadi. Dirty victim bo‘lsa u quyi darajaga chiqariladi. So‘ng yangi satr uchun Read For Ownership so‘rovi yuboriladi: u ma’lumotni olib kelish bilan birga ko‘p yadroli tizimda boshqa nusxalarni invalid qilib, yozish huquqini beradi.

Fill tugagach store byte mask bo‘yicha satrni o‘zgartiradi. Protsessor bu jarayonni to‘liq kutmasligi mumkin; store queue missni kuzatadi, keyingi bir xil satr yozuvlarini birlashtiradi. Load shu manzilga kelsa, eng yangi qiymat store buffer’dan forward qilinadi.

Locality uchun foyda

Dastur store’dan keyin shu satrni yana o‘qisa yoki yozsa, keyingi murojaatlar hit bo‘ladi. Obyekt yaratish, stack frame, hisoblash natijalarini massivga yozish kabi workloadlarda write locality kuchli. Bir satrdagi bir nechta kichik store’ni keshda yig‘ib, keyinchalik bitta to‘liq write-back sifatida uzatish bandwidthni tejaydi.

Write-back bilan juftlik keshdagi dirty nusxani eng yangi holat sifatida saqlaydi. Quyi xotira satr chiqarilguncha eski bo‘lishi mumkin. Coherence directory yoki snoop protokoli qaysi kesh egasi ekanini kuzatadi, DMA uchun esa coherent mapping yoki explicit cache maintenance talab qilinadi.

Keraksiz o‘qish holati

Store butun cache line’ni to‘liq almashtirsa, eski satrni DRAMdan o‘qish behuda. Write allocate without read yoki zero-fill optimallashtirishi to‘liq maskani aniqlab, read trafikini bekor qiladi. Compiler non-temporal store ishlatsa, katta streaming yozuv keshni umuman chetlab o‘tishi mumkin.

Qisman store’da esa o‘zgarmagan baytlar saqlanishi kerak, shuning uchun oldingi satr olib kelinadi. ECC codeword ham partial update uchun read-modify-write talab qilishi mumkin. Store combining barcha baytlar kelganini isbotlasa, keyin to‘liq satr sifatida yoziladi.

Cheklovlar

Streaming output tez orada qayta ishlatilmasa, write-allocate foydasiz line fill va eviction keltiradi. U foydali read-only satrlarni siqib chiqaradi va memory bandwidthni ikki tomonda band qiladi. Hardware insertion policy, write-combining buffer yoki no-write-allocate hint bunday oqimni ajratadi.

Siyosat hit/missdan tashqari consistency va fault bilan ham uyg‘unlashadi. Store page fault yoki permission xatosi bo‘lsa satr arxitektura holatiga noqonuniy ta’sir qilmasligi kerak. Speculative ownership so‘rovi mikroarxitektura izini qoldirishi mumkin, ammo xatoli instruction commit qilinmaydi.

Allocation contention’da bir satrga kelgan bir nechta store miss bitta fill tranzaksiyasiga birlashtiriladi. Har store o‘z byte maskini pending entry’da qoldiradi va fill data’si bilan to‘g‘ri tartibda merge qilinadi. Oldinroq store keyinroq store ustidan yozib yubormasligi uchun queue yoshi va forwarding prioriteti saqlanadi.

Coherence upgrade data fill talab qilmasligi mumkin: satr keshda Shared holatda bo‘lsa faqat yozish ruxsati olinadi. Haqiqiy tag miss esa ownership bilan birga data transferini ham talab qiladi.

Bu ikki holat counterlarda alohida ko‘rsatilsa bandwidth sababi aniqroq topiladi.

Bog‘liq tushunchalar

write miss, write-back cache, read for ownership, store buffer, non-temporal store, cache line