Bosh sahifa Wiki Pipeline Bubble

Pipeline Bubble

Pipeline Bubble — protsessor quvuridagi bosqichni egallagan, ammo haqiqiy buyruq va yon ta’sirga ega bo‘lmagan bo‘sh yozuv. Bubble hazardni bartaraf etish, noto‘g‘ri bashoratdan keyingi joyni tozalash yoki buyruqlar oqimidagi uzilishni ifodalash uchun quvur bo‘ylab siljiydi. U ishlatilmagan bajarish imkoniyatini ko‘rsatgani sabab throughputni kamaytiradi.

Hosil bo‘lishi

Oddiy load-use vaziyatida load natijasi keyingi buyruqning execute kirishiga o‘z vaqtida yetmaydi. Boshqaruv fetch va decode registrlarini bir sikl ushlab, execute bosqichiga valid biti o‘chirilgan yozuv kiritadi. Shu bo‘sh yozuv bubble hisoblanadi. Keyingi siklda operand tayyor bo‘lgach qaram buyruq davom etadi.

Branch noto‘g‘ri bashoratida noto‘g‘ri yo‘ldan kelgan buyruqlar invalid qilinadi. Ular quvurdan chiqib ketguncha diagrammada bir necha bubble ko‘rinishi mumkin. Instruction cache javobi kechiksa, front-end keyingi bosqichlarni to‘ldira olmaydi va bo‘sh slotlar paydo bo‘ladi.

Stalldan farqi

Stall mavjud haqiqiy buyruqni o‘sha bosqichda saqlaydi; bubble esa hech qanday amal yo‘qligini bildirgan holda bosqichlar bo‘ylab yuradi. Ikkalasi bir hodisada birga ishlatilishi mumkin. Masalan, oldingi registrlar stall qilinadi, keyingi bajarish bosqichiga esa bubble yuboriladi.

Apparatda bubble ko‘pincha alohida opcode emas, valid = 0 kabi boshqaruv holatidir. Keyingi bosqichlar valid bo‘lmagan yozuv uchun registr yozish, xotira murojaati yoki istisno hosil qilmasligi kerak. NOP haqiqiy arxitektura buyrug‘i bo‘lishi mumkin va odatda commit qiladi; bubble esa mikroarxitekturaviy bo‘shliq bo‘lib, dastur tomonidan ko‘rinmaydi.

Superskalyar quvur

Bir siklda bir nechta slot mavjud bo‘lgan yadroda bubble butun siklni emas, ayrim slotni band qilishi mumkin. Masalan, ikki tayyor integer amal bor, lekin vektor porti uchun ish yo‘q bo‘lsa, ba’zi bajarish yo‘llari bo‘sh qoladi. Front-end yetarli mikrooperatsiya bermasa barcha portlar bo‘shashishi mumkin.

Out-of-order bajarish mustaqil buyruqlar bilan ko‘p bo‘shliqni to‘ldiradi. Biroq branch xatosi, juda uzun qaram zanjir yoki barcha kutish yozuvlarining bir kesh missga bog‘lanishi bubblelarni butunlay yo‘qotishga imkon bermaydi.

Tahlil va kamaytirish

Vaqt diagrammasida bubble qaysi siklda va qaysi bosqichdan boshlanganini ko‘rsatish uning sababini topishga yordam beradi. Apparat hisoblagichlarida u to‘g‘ridan-to‘g‘ri “bubble” deb nomlanmasligi mumkin; issue slotlari foydalanilishi, front-end starvation va branch recovery sikllari orqali baholanadi.

Forwarding data hazard bubblelarini, branch prediction boshqaruv bubblelarini, kesh va prefetch yaxshilanishlari esa fetch bo‘shliqlarini kamaytiradi. Har bir mexanizm apparat va energiya xarajatiga ega. Maqsad barcha bubblelarni nazariy yo‘qotish emas, keng tarqalgan ish yukida sarflangan resursga mos foyda olishdir.

Bubble kuzatuvini NOP sanash bilan almashtirib bo‘lmaydi. Kompilyator tekislash, kechikish sloti yoki patch joyi uchun haqiqiy NOP chiqarishi mumkin; u fetch va decode resursini ishlatadi. Ichki bubble esa kod oqimida baytga ega emas. Trace vositasi faqat commit qilingan buyruqlarni yozsa, bubble bevosita ko‘rinmaydi. Siklga asoslangan simulyator yoki mikroarxitektura hisoblagichi bo‘sh slotning qayerda paydo bo‘lganini aniqroq ko‘rsatadi.

Quvur ishga tushganda dastlabki bosqichlar to‘lguncha, tugaganda esa oxirgi buyruqlar chiqib ketguncha tabiiy bubblelar bo‘ladi. Uzoq barqaror siklda bu xarajat amortizatsiyalanadi, juda qisqa kod parchasida esa quvur chuqurligi sezilarli ulushga aylanadi.

Bog‘liq tushunchalar

pipeline stall, valid bit, NOP, branch misprediction, issue slot, pipeline hazard