Out-of-order execution — protsessor ko‘rsatmalarni dastur tartibidan farqli ichki ketma-ketlikda bajarib, operand yoki resurs kutish vaqtini mustaqil ish bilan to‘ldirish usulidir. Tashqi kuzatuvda esa dastur arxitekturada belgilangan tartibga mos natija olishi kerak. Mexanizm instruction-level parallelismdan samaraliroq foydalanishga xizmat qiladi.
Bog‘liqliklarni aniqlash
Haqiqiy data dependency mavjud bo‘lsa, iste’molchi ko‘rsatma ishlab chiqaruvchi natijasini kutadi. Masalan, ikkinchi amal birinchi amal yozgan registrni o‘qisa, uni oldin bajarib bo‘lmaydi. Biroq mustaqil ko‘rsatmalar cache miss yoki uzoq arifmetik amal davomida boshqa execution unitlarda bajarilishi mumkin.
Register nomlari sabab yuzaga keladigan write-after-read va write-after-write bog‘liqliklari ko‘pincha sun’iydir. Register renaming arxitektura registrlarini ko‘proq fizik registrlarga xaritalab, bu to‘qnashuvlarni yo‘qotadi. Read-after-write esa haqiqiy qiymat oqimi bo‘lgani uchun saqlanadi.
Ichki tuzilmalar
Front end ko‘rsatmalarni fetch va decode qilib, ularni mikroamallarga aylantirishi mumkin. Rename bosqichi fizik registr ajratadi. Reservation station yoki scheduler operandlari tayyor mikroamallarni mos execution unitga yuboradi. Load/store queue xotira amallari tartibi va manzil bog‘liqligini kuzatadi.
Reorder buffer natijalarni dastur tartibida retire yoki commit qilish imkonini beradi. Ko‘rsatma ichkarida oldin tugagan bo‘lsa ham, undan oldingi ko‘rsatmalar xavfsiz yakunlanmaguncha arxitektura holatiga doimiy ta’sir ko‘rsatmaydi. Bu precise exception yaratish uchun muhim.
Xotira amallari
Load oldingi store bilan bir manzilga murojaat qilsa, to‘g‘ri qiymatni olishi kerak. Manzillar hali hisoblanmaganida protsessor dependency predictor yordamida taxmin qilishi mumkin. Taxmin xato bo‘lsa yoshroq amallar qayta bajariladi. Store-to-load forwarding oldingi store qiymatini cachega yozilishini kutmasdan loadga uzatadi.
Arxitekturaning memory consistency modeli boshqa yadro va qurilmalarga ko‘rinadigan tartibni belgilaydi. Memory barrier yoki atomic ko‘rsatma dastur talab qilgan orderingni ifodalaydi. Out-of-order yadro bu cheklovlarni buzmasdan ichki optimallashtirish qiladi.
Spekulyatsiya va xavfsizlik
Branch prediction bilan protsessor hali tasdiqlanmagan yo‘ldagi ko‘rsatmalarni spekulyativ bajaradi. Noto‘g‘ri yo‘l natijalari arxitektura holatidan bekor qilinadi, ammo cache kabi mikroarxitektura holatida iz qoldirishi mumkin. Spectre sinfidagi hujumlar vaqt o‘lchovi orqali shunday izlardan ma’lumot chiqarishga urinadi.
Mitigatsiya boundarylarda speculation barrier, indeksni maskalash, compiler transformatsiyasi va process isolationni o‘z ichiga olishi mumkin. Aniq chora protsessor modeli va tahdidga bog‘liq. Barcha out-of-order bajarilishni o‘chirish odatda katta unumdorlik yo‘qotadi va umumiy yechim hisoblanmaydi.
Unumdorlik chegaralari
Reorder buffer hajmi, fizik registrlar, execution portlar, cache latency va branch aniqligi bir vaqtda uchadigan ishni cheklaydi. Performance counterlar stalled cycle, branch miss, cache miss va backend bosimini o‘lchaydi. Kodni optimallashtirishda faqat ko‘rsatma soni emas, dependency chain ham tahlil qilinadi.
Retirement va recovery
Ko‘rsatma bajarilib natija fizik registrda tayyor bo‘lishi bilan uning arxitektura ta’siri darhol yakunlanmaydi. Reorder buffer boshidagi barcha eski ko‘rsatmalar muvaffaqiyatli bo‘lganda retirement amalga oshadi. Agar branch taxmini xato yoki exception aniqlansa, yoshroq mikroamallar squashed qilinadi, rename xaritasi oldingi holatga qaytariladi va fetch to‘g‘ri PCdan boshlanadi. Recovery tezligi branch miss penaltyga ta’sir qiladi. Store odatda commitdan oldin boshqa yadrolarga doimiy ko‘rinmaydi, bu precise state saqlash uchun zarur.
Bog‘liq tushunchalar
Register renaming, Reorder buffer, Speculative execution, Memory ordering, Branch prediction, Instruction-level parallelism