Bosh sahifa Wiki Cache Prefetching

Cache Prefetching

Cache Prefetching — dastur aniq talab yuborishidan oldin kelajakda kerak bo‘lishi taxmin qilingan cache line’larni quyi xotiradan keshga olib kelish usuli. Maqsad memory latency’ni foydali hisoblash ortida yashirishdir. Prefetch hardware tomonidan access tarixidan yoki software instruction va compiler hintidan kelib chiqishi mumkin.

Hardware prefetcher

Next-line prefetch har missdan keyin qo‘shni satrni oladi. Stride prefetcher bir instructionning manzil farqlarini kuzatib, muntazam qadamni davom ettiradi. Stream prefetch ketma-ket yo‘nalishni, correlation prefetch esa oldingi misslar ketma-ketligi bilan keyingi manzilni bashorat qiladi.

Prefetch distance satrni qanchalik oldin so‘rashni belgilaydi. Juda yaqin request data demanddan oldin kelmaydi; juda uzoq request ishlatilishidan avval chiqarilishi mumkin. Degree bir hodisada nechta satr olinishini bildiradi. Controller bandwidth va aniqlikka qarab parametrlarni dinamik pasaytiradi.

Software prefetch

Compiler loop tahlili bilan kelajak iteratsiya manziliga prefetch instruction qo‘shadi. Dasturchi intrinsic orqali murakkab pointer traversal uchun hint berishi mumkin. Prefetch odatda arxitektura natijasini o‘zgartirmaydi va yaroqsiz manzilga nisbatan fault bermasligi mumkin, lekin aniq semantika ISA’ga bog‘liq.

Software distance iteration ish hajmi va memory latency’ga mos bo‘lishi kerak. Juda ko‘p hint instruction bandwidth va address-generation resursini egallaydi. Hardware prefetch allaqachon muntazam oqimni topgan bo‘lsa qo‘lda hint foyda bermasligi mumkin.

Foyda va zarar

Aniq va o‘z vaqtida prefetch demand missni hitga aylantiradi. Noto‘g‘ri satr bandwidth, MSHR va cache way’ini egallab, foydali data’ni chiqaradi. Bu cache pollution deyiladi. Ko‘p yadroda bitta agressiv prefetcher shared LLC va DRAMni band qilib, boshqa yadroga zarar yetkazadi.

Prefetch satrlari past insertion priority, alohida buffer yoki faqat L2’ga joylashtirilishi mumkin. Demand access kelganda entry foydali deb belgilanadi; uzoq ishlatilmasa predictor confidence pasayadi. Page boundary yoki privilege chegarasidan o‘tish xavfsizlik va fault siyosati bilan cheklanadi.

O‘lchash

Accuracy ishlatilgan prefetchlarning jami prefetchga nisbati, coverage oldini olingan misslar ulushi, timeliness esa data talabdan oldin yetganini ko‘rsatadi. Faqat hit rate ortishi yetarli emas; bandwidth, energiya va boshqa thread slowdown ham baholanadi.

Prefetch cache timing side-channel yoki speculation izlarini kuchaytirishi mumkin. Isolation talab qilingan contextda ayrim prefetcher o‘chiriladi yoki history context bo‘yicha ajratiladi. Context switchda predictor holatini saqlash arxitektura talabi bo‘lmasa-da, xavfsizlik siyosati uni tozalashi mumkin.

Pointer-based prefetcher load natijasini keyingi manzil deb talqin qilib, linked list yoki tree traversalni kuzatadi. U oddiy stride’dan murakkabroq va noto‘g‘ri pointer tasnifida tasodifiy sahifalarga trafik yuborishi mumkin. Confidence, page permission va outstanding limitlar zararini cheklaydi; encrypted yoki compressed pointer formatlari aniqlikni pasaytiradi.

Virtualizatsiyada host guestning prefetch instructionini bajarishi, cheklashi yoki emulyatsiya qilishi mumkin. Tenantlararo bandwidth isolation prefetch trafikini ham oddiy demand request kabi hisobga oladi.

Bulut operatori bandwidth counterlari asosida virtual mashina prefetch ta’sirini kuzatib, kerak bo‘lsa hardware funksiyasini BIOS yoki model-specific control orqali pasaytiradi.

Bunday sozlashdan oldin turli workloadlar bilan regression sinovi o‘tkaziladi va demand latency yomonlashmagani tasdiqlanadi.

Bog‘liq tushunchalar

hardware prefetcher, software prefetch, stride prediction, cache pollution, memory latency, MSHR