Pattern History Table — branch natijalari tarixidan hosil qilingan naqsh indeksiga mos prediction holatlarini saqlaydigan dinamik branch predictor jadvali. PHT entry’si ko‘pincha ikki bitli saturating counter bo‘lib, berilgan history pattern’dan keyin branch odatda taken yoki not-taken bo‘lishini o‘rganadi.
Ikki darajali predictor
Birinchi daraja history register’da so‘nggi branch natijalarini bitlar ketma-ketligi sifatida saqlaydi. Masalan, T, N, T, T ketma-ketligi to‘rt bitli indeksga aylanadi. Ikkinchi daraja PHT shu indeksdagi counter’ni o‘qib keyingi yo‘nalishni beradi. Actual natija kelgach counter yangilanadi va history shift qilinadi.
History lokal bo‘lsa har statik branch o‘z naqshini yuritadi. Global history barcha yaqindagi branch natijalarini birlashtirib, turli shartlar orasidagi korrelyatsiyani topadi. PHT bitta umumiy jadval yoki branch guruhlariga bo‘lingan bo‘lishi mumkin.
Indeks hosil qilish
Faqat global history ishlatilsa turli branch bir pattern uchun bir counter’ni bo‘lishib, kuchli aliasing yuz beradi. Branch manzil bitlarini history bilan birlashtirish entry’larni ajratadi. Concatenation alohida maydonlar yaratadi, XOR esa bir xil jadval hajmida bitlarni aralashtiradi.
Hash tanlovi turli workload’da farq qiladi. Juda qisqa history uzoq davriy naqshni ko‘rmaydi; juda uzun history ko‘p noyob holat yaratib, har entry yetarli marta o‘rganmasligi mumkin. Gibrid predictor turli tarix uzunliklarini parallel ishlatadi.
Yangilanish
Prediction vaqtida global history spekulyativ natija bilan yangilansa, keyingi branchlar to‘g‘ri kontekstda bashorat qilinadi. Misprediction’da history checkpoint’dan tiklanadi va actual bit qo‘shiladi. PHT counter’ini wrong-path branch yangilashi kerakmi yoki commitgacha kutishi dizayn qaroridir.
Counter actual taken’da yuqoriga, not-taken’da pastga saturatsiya bilan yuradi. Initial holat weak tarafda bo‘lsa yangi branch bir necha kuzatuvda moslashadi. Compiler yoki static yo‘nalish boshlang‘ich bias berishi mumkin.
Misol xulqi
Bir branch har ikkinchi safar taken bo‘lsa, uning so‘nggi bitta natijasi keyingisini kuchli bashorat qiladi. Oddiy per-branch counter esa taken va not-taken orasida tebranadi. Lokal history va PHT ikki pattern uchun qarama-qarshi counter o‘rgatib, yuqori aniqlikka erishadi.
Mutlaqo tasodifiy kirishga bog‘liq branch tarix bilan bashorat qilinmaydi. Katta PHT bunday entropiyani yo‘q qila olmaydi, faqat maydon va energiya sarflaydi.
BHT bilan munosabat
Terminologiya manbaga qarab farq qiladi. Branch History Table ba’zan counterlarni, PHT esa history-indekslangan counterlarni anglatadi; boshqa tavsifda BHT lokal history bitlarini saqlab, PHT ikkinchi daraja bo‘ladi. Arxitektura diagrammasidagi kirish va entry tarkibi aniq rolni ko‘rsatadi.
PHT holati me’moriy emas, ammo cross-context training spekulyativ xavfsizlikka ta’sir qiladi. Partition, tagging va predictor flush himoya domenlari orasidagi ta’sirni kamaytiradi.
Saqlash optimallashtirishi
PHT counterlari kichik bo‘lgani sabab zich SRAMga joylashtiriladi. Bir siklda prediction o‘qishi va oldingi branch update yozuvi bir entry’ga tegsa, old bypass yoki port siyosati qaysi qiymat ishlatilishini belgilaydi. Yangi natijani ko‘rmaslik odatda faqat o‘rganishni bir qadam kechiktiradi.
Ko‘p prediction komponenti bir xil history’dan foydalansa, history checkpoint’lari umumiy recovery tuzilmasida saqlanadi. Branchlar chuqur spekulyativ bo‘lsa har bir hal qilinmagan branch uchun eski holat yoki qayta qurish ma’lumoti kerak. Checkpoint sig‘imi front-end kengligini cheklashi mumkin; compression va incremental log maydonni kamaytiradi.
Bog‘liq tushunchalar
two-level predictor, global history register, local history, saturating counter, branch history table, aliasing