Bosh sahifa Wiki Branch History Table

Branch History Table

Branch History Tablebranch’larning oldingi yo‘nalish xulqini saqlab, kelajakdagi taken yoki not-taken qarorini chiqarishga yordam beradigan predictor jadvali. BHT odatda Instruction Pointer bitlari bilan indekslanadi va har entry’da saturating counter yoki tarix holati saqlaydi. U Dynamic Branch Prediction’ning asosiy komponentlaridan biridir.

Indekslash

Branch manzilining past ayrim bitlari instruction alignment sabab doim nol bo‘ladi va indeksda ishlatilmaydi. Keyingi bitlar jadval qatorini tanlaydi. Jadval entry sonidan ko‘p statik branch mavjud bo‘lgani uchun bir nechta manzil bir qatorga tushishi mumkin; bu aliasing deyiladi.

Aliasing ijobiy bo‘lsa o‘xshash xulqli branchlar bir counter’ni bir tomonga o‘rgatadi. Salbiy holatda biri taken, boshqasi not-taken qilib, prediction beqaror bo‘ladi. Manzilni global history bilan XOR qilish yoki entry’ga qisman tag qo‘shish interference’ni kamaytiradi.

Counter holati

Ikki bitli counter kuchli va kuchsiz ikki yo‘nalishni ifodalaydi. Prediction yuqori bit yoki holat guruhidan olinadi. Actual natija counter’ni bir qadam yangilaydi. Bitta noodatiy natija kuchli holatni faqat kuchsizga o‘tkazib, darhol yo‘nalishni almashtirmaydi.

BHT nomi ayrim hujjatda har branch uchun bitlar ketma-ketligini saqlovchi local history table’ga ham ishlatiladi. Boshqasida u bevosita counter jadvalidir. Tuzilmani entry tarkibi va keyingi Pattern History Table mavjudligi orqali aniqlash kerak.

Front-end bilan ishlash

Fetch manzili berilgan siklda BHT predictionni tez yetkazishi kerak. Branch hali decode qilinmagan bo‘lsa, Branch Target Buffer blokda branch borligini va nishonni bildiradi. BHT yo‘nalishni taken desa target, aks holda ketma-ket PC tanlanadi.

Bir fetch blokida bir nechta branch bo‘lsa ko‘p bank yoki oldindan dekodlangan metadata kerak. Eng oldingi taken branch keyingi baytlarni bekor qiladi. Bank conflict prediction bandwidth’ini cheklashi mumkin.

Yangilanish va kontekst

Branch Unit actual natijani aniqlaganda entry yangilanadi. Spekulyativ yo‘ldagi branch keyin bekor qilinsa uning yangilanishi tashlanishi yoki recovery qilinishi kerak. Commit’da yangilash xavfsizroq, ammo predictor keyinroq o‘rganadi.

BHT odatda process context’ning me’moriy qismi emas. Context switch’da eski entry’lar qolishi performance warm-up’ni kamaytiradi, lekin cross-domain interference va yon kanal yaratishi mumkin. Apparatura privilege yoki address-space teg bilan partition qilishi, yadro esa zarur holatda predictor barrier ishlatishi mumkin.

BHT faqat yo‘nalishni bashorat qiladi; taken branch nishoni uchun BTB, return uchun RAS va bilvosita branch uchun maxsus target predictor kerak bo‘lishi mumkin.

Sig‘im va tashkil

BHT hajmi entry soni bilan counter bitlari ko‘paytmasidan tashqari tag, parity va replacement metadata’sini ham qamrab olishi mumkin. Direct-mapped jadval tez, lekin collision ko‘p; set-associative variant aliasingni kamaytirib, yo‘l tanlash latency’sini oshiradi.

Jadval soft error bilan counter yo‘nalishi o‘zgarsa odatda faqat performance zarar ko‘radi, lekin predictor xavfsizlikka ta’sir qilgani uchun ayrim dizayn parity qo‘llaydi. Xato entry invalid qilinadi va qayta o‘rganiladi. BHT yangilanish porti bir siklda ko‘p branch resolve bo‘lsa arbitraj talab qiladi; yo‘qolgan update correctness’ni emas, keyingi prediction sifatini pasaytiradi.

Context switch’dan keyin jadvalni saqlash odatda shart emas; yangi jarayon mavjud holatni asta o‘z patternlari bilan almashtiradi.

Bog‘liq tushunchalar

dynamic branch prediction, saturating counter, branch target buffer, aliasing, global history, pattern history table