Bosh sahifa Wiki Cache Line

Cache Line

Cache Line — protsessor keshi bilan quyi xotira darajasi o‘rtasida odatda bir butun sifatida ko‘chiriladigan, tag va holat metama’lumotiga ega baytlar guruhi. Dastur bitta bayt yoki so‘zni so‘rasa ham, kesh ko‘pincha shu manzil joylashgan to‘liq satrni olib keladi. Satr o‘lchami mikroarxitekturaga bog‘liq va dastur undan xabardor bo‘lmasdan ham to‘g‘ri ishlashi kerak.

Manzilning bo‘linishi

Fizik manzilning eng past bitlari satr ichidagi offsetni ko‘rsatadi. Keyingi bitlar cache set indexini, yuqori bitlar tagni beradi. Satr 64 bayt bo‘lsa, pastki olti bit offset bo‘ladi. Kesh tag va valid holatini solishtirib, ayni setdagi way’dan kerakli baytlarni tanlaydi.

Line fill quyi darajadan butun satrni keltiradi. Critical-word-first tizim talab qilingan qismni yadroga oldin berishi, qolgan beatlarni keyin to‘ldirishi mumkin. Fill tugamay turib shu satrga ikkinchi miss kelsa MSHR requestlarni birlashtiradi.

Locality va trafik

Katta satr qo‘shni data’dan foydalanadigan ketma-ket massiv uchun spatial locality’ni yaxshilaydi. Juda katta satr esa ishlatilmaydigan baytlarni ko‘chirib, bandwidth va sig‘imni isrof qiladi. Pointer-chasing’da har satrdan faqat bitta so‘z kerak bo‘lishi mumkin. Optimal o‘lcham DRAM burst, interconnect va workload muvozanatidir.

Ikki thread bir satrning turli o‘zgaruvchilarini yozsa false sharing yuz beradi. Mantiqan mustaqil qiymatlar bo‘lsa ham coherence butun satr ownershipini yadrolar orasida ko‘chiradi. Tuzilmani padding yoki alignment bilan ajratish trafikni kamaytiradi, ammo xotira hajmini oshiradi.

Holat bitlari

Har satr valid, dirty va coherence state kabi metadata bilan yuradi. Dirty write-back satr chiqarilganda quyi darajaga yoziladi. ECC ko‘pincha satrning kichik codeword qismlarini himoya qiladi; partial store tegishli ECC qismini qayta hisoblaydi.

Lock, atomic va memory ordering ham satr granularity’sidan foydalanishi mumkin, lekin arxitektura atomiklik chegarasi satr o‘lchamiga teng bo‘lishi shart emas. Ikki satr chegarasini kesib o‘tgan operand sekin yo‘l yoki bir nechta tranzaksiyani talab qiladi.

Dasturiy boshqaruv

Cache flush, clean va invalidate instructionlari ko‘pincha manzilni satr chegarasiga yumaloqlaydi. Diapazon oxiri ham keyingi chegara tomon kengaytiriladi. DMA buffer’da tasodifan qo‘shni obyekt bilan bitta satrni bo‘lishish noto‘g‘ri invalidate sabab begona dirty data yo‘qolishiga olib kelishi mumkin.

Compiler alignment va prefetch hintlari satr xususiyatidan foydalanadi. Biroq dastur qat’iy o‘lchamni taxmin qilsa boshqa protsessorda portability buziladi. Tizim API’si cache line hajmini so‘rash yoki conservative alignment tanlash imkonini beradi.

Line alignment lock-free algoritmlarda ham ahamiyatli. Atomik obyekt ikki satrni kesib o‘tsa ayrim ISA operatsiyani qo‘llamasligi yoki global sekin qulfdan foydalanishi mumkin. Allocator kerakli alignmentni beradi, tilning atomik turi esa minimal tekislanish talabini belgilaydi. Bu talab false sharingdan alohida correctness masalasidir.

Debugger va profiler hardware line size’ni bilsa, false-sharing hisobotida bir satrga tushgan yozuvchi threadlarni guruhlaydi. Bu data race aniqlashdan boshqa tahlil: qiymatlar mustaqil bo‘lsa ham performance muammosi mavjud.

Allocator paddingni barcha obyektga qo‘llasa footprint ortadi; faqat ko‘p yoziladigan shared maydonlarni ajratish odatda samaraliroq.

Profiling tanlovni tasdiqlaydi.

Bu xususiyat alohida sinovdan o‘tkaziladi.

Bog‘liq tushunchalar

cache block, cache set, cache tag, spatial locality, false sharing, cache coherence