Instruction Execute — protsessor buyrug‘i belgilagan hisoblash yoki ma’lumot ko‘chirish amalining bajarish bloklarida amalga oshiriladigan bosqichi. Bu paytda arifmetik natija hisoblanadi, tarmoq sharti baholanadi yoki xotira manzili hosil qilinadi. Bajarilish natijasi darhol dasturga rasmiy ko‘rinmasligi mumkin; zamonaviy yadro uni keyingi commit bosqichigacha spekulyativ saqlaydi.
Bajarish birliklari
ALU butun son qo‘shish, mantiqiy amallar va siljitishni bajaradi. Ko‘paytirgich va bo‘luvchi ko‘proq sikl talab qilishi mumkin. Floating-point va vektor bloklari alohida format hamda kengliklar bilan ishlaydi. Load/store birligi samarali manzilni hisoblab, kesh va xotira tartibi mexanizmlariga murojaat qiladi.
Bir mikrooperatsiya unga mos portga issue qilingach operandlar fizik registrlardan yoki forwarding yo‘lidan olinadi. Natija tayyor bo‘lganida bog‘liq operatsiyalarga teg bilan bildiriladi. Bir siklli amal ertasi sikl natija berishi mumkin, quvurli ko‘paytirgich esa kechikishi bir necha sikl bo‘lsa ham har siklda yangi amal qabul qilishi mumkin.
Kechikish va o’tkazuvchanlik
Latency bitta amal boshlanishidan natijasi tayyor bo‘lguncha vaqtni bildiradi. Throughput esa qancha tez-tez yangi shunday amal boshlanishini ko‘rsatadi. Bu ikki ko‘rsatkich teng emas. Mustaqil operatsiyalar ko‘p bo‘lsa, quvur uzun kechikishni parallel ish bilan yashiradi; uzluksiz bog‘liq zanjirda esa latency asosiy cheklov bo‘ladi.
Xotira yuklashining vaqti kesh darajasiga bog‘liq. Birinchi darajali kesh topilmasligi o‘nlab yoki yuzlab sikl kutishga olib kelishi mumkin. Out-of-order bajarish shu orada mustaqil buyruqlarni ishlatadi, lekin reorder buffer yoki boshqa navbat to‘lsa, oldinga siljish to‘xtaydi.
Istisnolar va spekulyatsiya
Nolga bo‘lish, noto‘g‘ri manzil yoki sahifa ruxsati buzilishi execute paytida aniqlanishi mumkin. Protsessor xato ma’lumotini buyruq bilan saqlaydi. Buyruq commit navbatining boshiga kelgandagina aniq istisno ko‘tariladi; undan oldingi amallar yakunlangan, keyingilari bekor qilingan bo‘ladi.
Tarmoq sharti bashoratga zid chiqsa, to‘g‘ri program counter hisoblanadi va noto‘g‘ri yo‘l mikrooperatsiyalari tozalanadi. Ular commit qilinmasa-da, kesh yoki predictor kabi ichki holatga ta’sir qilgan bo‘lishi mumkin. Spekulyativ bajarish yon kanallari aynan me’moriy va mikroarxitekturaviy ta’sir orasidagi farqdan kelib chiqadi.
To‘g‘rilik
Execute bloki barcha operand qiymatlari uchun ISA belgilagan natijani, bayroqlarni va istisnoni berishi kerak. Suzuvchi nuqtada yaxlitlash rejimi va maxsus qiymatlar, vektorda element kengligi, butun sonlarda to‘lib ketish semantikasi muhim. Apparat tekshiruvida etalon model bilan solishtirish va chegaraviy bit naqshlarini sinash qo‘llanadi.
Execute butun buyruq hayot siklining faqat bir qismi. Natija hisoblangan bo‘lsa ham eski tarmoq bashorati yoki oldingi istisno sabab u tashlanishi mumkin; me’moriy holatni yangilash commit vakolatidir.
Bajarish blokining bandligini oshirish har doim energiya samaradorligini oshirmaydi. Vektor blokini qisqa skalyar ish uchun uyg‘otish, ma’lumotni moslashtirish va keng registrlarni almashtirish qo‘shimcha sarf keltiradi. Protsessor foydalanilmayotgan bloklarning soatini yoki quvvatini o‘chirishi mumkin; qayta uyg‘otish esa kichik kechikish beradi. Kompilyator tanlagan buyruq shakli, operand kengligi va aralash port talabi shu fizik xususiyatlar bilan birga umumiy unumdorlikni belgilaydi.
Bir buyruq bir necha bajarish domenidan o‘tishi mumkin. Masalan, load manzilni integer blokida hisoblab, xotira birligidan qiymat olib, vektor registriga yetkazadi. Har oraliq navbat va format almashtirish umumiy latencyga qo‘shiladi.
Bog‘liq tushunchalar
execution unit, ALU, latency, throughput, speculative execution, instruction commit