Read-After-Write Hazard — keyingi buyruq registr yoki xotira qiymatini oldingi buyruq yangilashidan oldin o‘qishga uringan haqiqiy ma’lumot hazardidir. RAW bog‘liqlikda iste’molchi aynan ishlab chiqaruvchining yangi natijasiga muhtoj. Vaqt noto‘g‘ri boshqarilsa, eski qiymat o‘qilib, hisob natijasi buziladi.
Registr misoli
ADD r1, r2, r3
SUB r4, r1, r5
Ikkinchi buyruq r1ning ADD hosil qilgan versiyasini olishi kerak. Oddiy pipeline’da SUB register file’ni ADD write-back bosqichidan oldin o‘qishi mumkin. Hazard detection registr indekslari, yozish-enable va operandning haqiqiy ishlatilishini taqqoslaydi.
Immediate maydon bitlari registr indeksiga o‘xshashi hazard emas. Nol registriga tashlanadigan yozuv ham ishlab chiqaruvchi bo‘lmaydi. To‘g‘ri mantiq opcode semantikasini hisobga oladi.
Forwarding va stall
ADD natijasi execute oxirida tayyor bo‘lsa, bypass tarmog‘i uni keyingi execute kirishiga bevosita uzatadi. Bu write-back va yangi register read’ni kutishni olib tashlaydi. Agar bir nechta eski buyruq bir registrga yozayotgan bo‘lsa, dastur tartibidagi eng yangi tegishli natija tanlanadi.
Load-use holatida data cache qiymati kechroq kelishi mumkin. Keyingi buyruq execute’ga bir sikl erta yetib kelgan bo‘lsa, forwarding ham yetarli emas va bubble kiritiladi. Cache miss’da kutish ko‘p sikl davom etadi; out-of-order yadro mustaqil ishlarni shu orada bajaradi.
Out-of-order bajarish
Register Renaming RAW’ni yo‘q qilmaydi. U iste’molchiga ishlab chiqaruvchining Physical Register tegini beradi. Issue Queue ready bitini kuzatadi; natija broadcast qilinganda qaram mikrooperatsiyalar uyg‘onadi. Mustaqil keyingi buyruqlar esa oldinroq issue qilinishi mumkin.
Speculative producer keyin branch xatosi sabab bekor qilinsa, uning iste’molchilari ham bekor qilinadi. To‘g‘ri yo‘ldagi eski physical mapping recovery orqali qaytariladi.
Xotira RAW
Store’dan keyingi bir manzilli load ham RAW bog‘liqlikdir. Store qiymati Store Queue’da bo‘lsa, store-to-load forwarding ishlaydi. Manzil noma’lum bo‘lsa load kutadi yoki taxminan bajarilib, conflict topilganda replay qilinadi. Qisman ustma-ust baytlar bir nechta manbadan birlashtirilishi mumkin.
RAW algoritmning zarur qirrasi bo‘lgani sabab faqat rejalashtirish bilan butunlay yo‘qolmaydi. Dastur parallelizmi uchun mustaqil ma’lumot zanjiri yaratish, precompute yoki data layout o‘zgartirish talab qilinadi.
Ko‘p siklli natijalar
Bo‘lish, kvadrat ildiz va cache miss kabi operatsiya natija vaqtini oldindan aniq bermasligi mumkin. Scoreboard har registrning ishlab chiqaruvchisi va tayyorligini kuzatib, RAW iste’molchini ushlab turadi. Fixed-latency pipeline’da esa stage raqamidan forwarding va stall vaqti chiqariladi.
Bir buyruq bir nechta natija — masalan, quotient va remainder yoki status bayroq — hosil qilsa, ularning tayyorlik vaqti farq qilishi mumkin. Iste’molchi faqat kerakli operand tegini kutadi. Natijaning boshqa qismi kechikgani uchun barcha iste’molchilarni ortiqcha ushlab turish throughputni pasaytiradi.
RAW hazard xotirada ham uchraydi: yosh load undan oldingi store bilan bir manzilga murojaat qilsa, load eski cache qiymatini olmasligi kerak. Store manzili hali hisoblanmagan paytda processor loadni taxminan oldinga chiqarishi mumkin. Keyin alias aniqlansa load va unga bog‘liq amallar replay qilinadi.
Compiler scheduling’da latency jadvali producer natijasi qaysi siklda iste’molchiga forward bo‘lishini ifodalaydi. Turli execution unit juftligi uchun bypass mavjud bo‘lmasa, bir xil opcode zanjiri qo‘shimcha sikl kutishi mumkin. Shu sabab mikroarxitekturaga mos model kod joylashuviga ta’sir qiladi.
Bog‘liq tushunchalar
data hazard, forwarding, pipeline stall, load-use hazard, register dependency, store-to-load forwarding