Instruction Dispatch — dekodlangan va nomi o‘zgartirilgan buyruqlarni protsessorning rejalashtirish hamda bajarishga tayyorlovchi ichki tuzilmalariga joylashtirish jarayoni. Termin turli mikroarxitekturalarda biroz boshqacha ishlatiladi, ammo odatda u buyruqni front-enddan issue queue, reorder buffer va load/store queue kabi resurslarga o’tkazishni anglatadi.
Resurs ajratish
Dispatchdan oldin buyruq uchun zarur yozuvlar mavjudligi tekshiriladi. Reorder buffer me’moriy tartibni saqlaydi, issue queue operand tayyorligini kuzatadi, xotira buyrug‘i esa load yoki store navbatidan joy oladi. Ulardan bittasi to‘lsa, butun guruh vaqtincha oldinga siljimaydi. Bu holat backpressure orqali dekoder va fetchgacha yetib borishi mumkin.
Registr nomini o‘zgartirish bir xil me’moriy registrga yozuvchi mustaqil buyruqlarni turli fizik registrlarga bog‘laydi. Dispatch shu xaritani mikrooperatsiya bilan birga saqlaydi. Manba qiymati allaqachon tayyor bo‘lsa, u yoki uning fizik registr tegi navbatga yoziladi; aks holda ishlab chiqaruvchi natijasi haqida signal kutiladi.
Issue bilan munosabat
Dispatch va issue bir xil hodisa emas. Dispatch mikrooperatsiyani kutish joyiga qabul qiladi; issue esa u tayyor bo‘lganda bajarish portiga yuboradi. Ayrim sodda quvurlarda bu bosqichlar birlashishi mumkin, shuning uchun hujjatda terminning aniq ta’rifi tekshiriladi.
Bir sikldagi dispatch kengligi front-endning maksimal oqimini belgilaydi. Bir murakkab buyruq ko‘p mikrooperatsiyaga ajralsa, u shu kenglikning katta qismini egallaydi. Mikrooperatsiyalar guruhi atomik ajratilsa, yetarli joy bo‘lmaganda guruhning faqat bir qismini kiritish o‘rniga hammasi kutadi.
Spekulyativ holat
Dispatch qilinayotgan buyruq bashoratlangan tarmoqdan keyin bo‘lishi mumkin. Unga fizik registr va navbat joyi ajratiladi, ammo me’moriy natijasi hali tasdiqlanmagan. Bashorat xato chiqsa, nazorat nuqtasidagi register mapping tiklanadi, yoshroq yozuvlar bekor qilinadi va resurslar qaytariladi.
Istisno ham ko‘pincha darhol tashqi ko‘rinmaydi. Mikrooperatsiya xato belgisini reorder bufferda saqlaydi; u navbat boshiga kelganda commit bosqichi aniq istisnoni yuzaga chiqaradi. Shu yo‘l bilan undan oldingi buyruqlar tugaydi, keyingilari esa me’moriy holatni buzmaydi.
Tiqilishlarni aniqlash
Dispatch stall sabablari alohida hisoblagichlarda kuzatilishi mumkin: fizik registrlar tugashi, reorder buffer to‘lishi, store queue bandligi yoki maxsus bajarish navbati yetishmasligi. Sababga qarab optimallashtirish o‘zgaradi. Juda ko‘p bir vaqtdagi xotira amallari store queue’ni, uzun kechikishli bog‘lanmagan amallar esa reorder buffer’ni bosishi mumkin.
Dispatch apparatning ichki tashkiloti bo‘lib, ISA dasturchiga aynan qanday navbatlardan foydalanishni buyurmaydi. Ikki protsessor bir xil mashina kodini turli dispatch sxemasi bilan bajarib, bir xil me’moriy natija berishi mumkin.
Dispatch guruhidagi buyruqlar orasida bir siklning o‘zida hosil bo‘lgan bog‘liqlik ham aniqlanadi. Oldingi mikrooperatsiya yangi fizik registr yaratgan bo‘lsa, keyingisining manba tegi eski xaritadan emas, aynan shu yangi yozuvdan olinadi. Nazorat nuqtalari cheklangan bo‘lsa, ko‘p bashoratlanmagan branch ham dispatchni ushlashi mumkin. Shu sabab stall hisobotida faqat navbat hajmi emas, renaming xaritasi va branch recovery resurslari ham ko‘riladi.
Mikrooperatsiya fusion ikki bog‘liq amalni ichki navbatlarda bitta yozuv sifatida tashishi mumkin. Bu dispatch sig‘imini tejaydi, lekin bajarish yoki commit yaqinida ularning alohida semantikasi, istisno manzili va profiling hisoblari to‘g‘ri saqlanishi zarur.
Bog‘liq tushunchalar
register renaming, reorder buffer, issue queue, micro-operation, backpressure, instruction commit