5.4.7 · HinglishMemory Hierarchy & Caches

Write-allocate vs no-allocate

2,715 words12 min readRead in English

5.4.7 · Hardware › Memory Hierarchy & Caches

Write-Allocate kya hai?

Write-allocate (jise fetch-on-write bhi kehte hain) ek cache policy hai jo kehti hai: write miss hone par, block ko memory se cache mein laao, PHIR write karo.

Poora block kyun fetch karte hain?

Kyunki caches block granularity par operate karte hain, individual bytes par nahi. Cache line ka size typically 64 bytes hota hai. Agar tum sirf 1 byte likh rahe ho, tab bhi cache ko poora block chahiye taaki coherence maintain ho sake aur neighboring addresses ke future reads support ho sakein.

No-Allocate kya hai?

No-allocate (jise write-around ya write-no-allocate bhi kehte hain) ek cache policy hai jo kehti hai: write miss hone par, block ko cache mein laaye bina seedha memory ke next level par likho.

Written data cache ke "around" (usse bachte hue) chala jaata hai.

Yeh Kyun Matter Karta Hai?

Write-allocate aur no-allocate ke beech ka choice in cheezaan ko affect karta hai:

  1. Cache pollution: No-allocate un data ke liye cache space waste karne se bachta hai jo reuse nahi hogi
  2. Memory bandwidth: Write-allocate ko write miss par ek extra memory read chahiye
  3. Latency: Write-allocate mein write miss par zyada latency hoti hai (read + write vs sirf write)
  4. Subsequent accesses mein hit rate: Write-allocate hits badhata hai agar data jaldi reuse hota hai

Write Policies ke Saath Typical Pairing

Derivation: Write-back ko Write-allocate Kyun Chahiye

Socho kya hoga agar write-back + no-allocate use karein:

  1. Address A par write miss hoti hai
  2. No-allocate policy: A ko cache mein mat laao
  3. Write-back policy: Dirty line evict hone par hi memory mein likho

Problem: A par jo write hai usse kaise handle karein? Hum ise cache mein store nahi kar sakte (no-allocate), aur hum ise defer nahi kar sakte (write-back matlab baad mein likhna). Hum majboor ho jaate hain ki seedha memory mein likhein, jo actually write-through behavior hai!

Isliye, write-back consistent rehne ke liye write-allocate zaroori hai.

Har Policy Kab Use Karein

Write-allocate ke fayde:

  • High temporal/spatial locality wale workloads ke liye better
  • Block reuse hone par memory traffic kam karta hai
  • Write-back optimization enable karta hai (dirty writes batch mein)

No-allocate ke fayde:

  • Streaming writes ke liye better (bada sequential data ek baar likha jaata hai)
  • One-time writes se cache pollution se bachata hai
  • Write miss par kam latency (fetch delay nahi)
  • Kuch ISAs mein streaming stores ya uncached writes mein use hota hai

Performance Tradeoffs

| Metric | Write-Allocate | No-Allocate | |-----|-------------| | Write miss latency | Zyada (fetch + write) | Kam (sirf write) | | Memory read traffic | Zyada (miss par fetches) | Kam (koi fetch nahi) | | Memory write traffic | Kam (write-back batching) | Zyada (har miss par) | | Cache utilization | Zyada (blocks cached) | Kam (kam pollution) | | Best for | High locality | Low locality |

Recall Feynman Explanation (Simple)

Socho tumhari desk tumhari cache hai, aur bookshelf memory hai.

Write-allocate aise hai: Tumhe ek aisi book mein notes likhne hain jo tumhari desk par nahi hai. To tum:

  1. Book shelf se laate ho (fetch)
  2. Desk par rakhte ho (allocate)
  3. Usme apne notes likhte ho
  4. Desk par rakhte ho, agar jaldi phir chahiye ho

No-allocate aise hai: Tumhe ek aisi book mein notes likhne hain jo tumhari desk par nahi hai. To tum:

  1. Shelf ke paas jaate ho
  2. Seedha shelf par rakhi book mein notes likhte ho
  3. Wahi chhod dete ho (desk par nahi laate)

Kaun sa better hai?

  • Agar agle 5 minute mein woh book phir chahiye hogi → desk par le aao (write-allocate)
  • Agar sirf ek quick note likhna hai aur phir touch nahi karoge → shelf par hi likho (no-allocate)

Tumhari desk ka space limited hai, isliye usme aisi books mat rakhna jo dobara use nahi karoge!

Connections

  • Write-back vs Write-through: Write propagation policy jo allocate decisions ke saath pair hoti hai
  • Cache Line Size: Write-allocate par allocation ki granularity decide karta hai
  • Temporal vs Spatial Locality: Principles jo policies ke beech choice guide karte hain
  • Streaming Stores: ISA instructions jo no-allocate behavior force karte hain
  • Cache Pollution: Problem jisme no-allocate help karta hai
  • Write Combining Buffers: Optimization jo memory access se pehle writes batch karta hai
  • Dirty Bit: Tracking mechanism jo write-back + write-allocate ke liye zaroori hai

#flashcards/hardware

Write-allocate policy mein write miss par kya hota hai?
Memory se poora block cache mein fetch karo, phir cached block mein write perform karo. Line ko valid mark karo (aur write-back hai to dirty bhi).
No-allocate policy mein write miss par kya hota hai?
Data seedha memory ke next level par likho, bina cache line allocate kiye ya block fetch kiye.
Write-back ko write-allocate kyun chahiye?
Write-back writes ko eviction tak defer karta hai, jiske liye data cache mein hona zaroori hai. Agar write miss par allocate nahi karte, to write defer karne ki jagah nahi hoti, aur immediate memory write karna padta hai (jo write-back se contradict karta hai).
Write-through caches ke liye standard pairing kya hai?
Write-through KISI BHI ke saath pair ho sakti hai — write-allocate ya no-allocate — writes ki expected temporal locality ke hisaab se.
No-allocate kab write-allocate se better hai?
Jab writes ki temporal locality kam ho (streaming writes, one-time initialization, I/O operations). Cache pollution aur fetch bandwidth waste se bachata hai.
Write miss par write-allocate ka main disadvantage kya hai?
Likhne se pehle block fetch karne ke karan zyada latency, aur badhta hua memory read traffic.
Write policies ke context mein cache pollution kya hai?
Jab write-allocate aise blocks cache mein laata hai jo reuse nahi honge, potentially useful data evict ho jaata hai aur cache space waste hota hai.
Non-temporal store instruction kya hota hai?
Ek ISA instruction (jaise x86 ka movnti) jo no-allocate behavior ke saath memory mein likhta hai, pollution se bachne ke liye cache bypass karta hai.
Write-allocate single-byte write ke liye bhi poora block kyun fetch karta hai?
Caches block granularity par operate karte hain. Block ke baaki bytes baad mein access ho sakte hain, isliye cache ko coherence maintain karne aur spatial locality support karne ke liye poora block chahiye.
Write-allocate mein fetch skip karne wala optimization kya hai, aur ise kisse confuse nahi karna chahiye?
Full-line-write optimization (write-validate): agar ek write poori cache line cover kare, to fetch skip karo aur seedha poori cache line overwrite karo. Ise write-combining se confuse mat karo, jo adjacent writes ko memory ko issue karne se pehle bursts mein merge karta hai — yeh ek write-buffering technique hai, fill policy nahi.

Concept Map

option A

option B

fetches block from memory

bypasses cache

guides choice

extra read then write

avoids reuse waste

required by

needs data in cache for dirty bits

pairs with

can also pair with

Write miss occurs

Write-allocate / fetch-on-write

No-allocate / write-around

Block loaded into cache

Write direct to memory

Temporal locality

Higher latency & bandwidth

Less cache pollution

Write-back policy

Write-through policy