Bosh sahifa Wiki Predicate Register

Predicate Register

Predicate Register — shartli bajarishda qaysi skalyar amal yoki vektor elementlari faol ekanini ko‘rsatuvchi mantiqiy bitlarni saqlaydigan maxsus registr. U branch ochmasdan buyruq natijasini tanlash, vektor qoldig‘ini maskalash va divergent ma’lumot yo‘llarini boshqarish imkonini beradi.

Maska hosil qilish

Vector compare har element uchun bitta true/false bit ishlab, predicate registerga yozadi. Keyingi maskalangan add, load yoki store faqat true lane’larda ishlaydi. Skalyar predikatsiyada bitta shart biti butun buyruqni yoqishi yoki o‘chirishi mumkin.

Predikatning element granularligi buyruq element kengligiga moslashtiriladi. Bir xil bit naqshini bayt va 64 bitli elementlarda ishlatish lane mapping’ini o‘zgartirishi mumkin. ISA qaysi bit qaysi elementni boshqarishini va ortiqcha bitlar qanday talqin qilinishini belgilaydi.

Merge va zero

Maskalangan natijada faol bo‘lmagan elementlar eski destination qiymatini saqlasa merge semantics deyiladi. Bu eski registrga yashirin dependency yaratadi. Zero semantics ularni nol qiladi va mustaqil yangi natija beradi. Dastur algoritmga kerakli variantni, compiler esa dependency xarajatini hisobga olib tanlaydi.

Maskalangan load faol bo‘lmagan manzilga tegmasligi xotira xavfsiz qoldiq ishlovida muhim. Biroq barcha arxitektura va barcha speculative xulq uchun taxmin qilinmaydi; ISA mask suppress exception va memory access semantikasini aniq aytadi.

Predikat amallari

Predicate registerlar AND, OR, NOT, population count va “birortasi faolmi” kabi maxsus amallarga ega bo‘lishi mumkin. while-less-than turidagi buyruq sikl indeksidan qoldiq maska yaratadi. First-set yoki next-active amali siyrak elementlar bo‘ylab yurishga yordam beradi.

Nested shartlarda bir necha maska birlashtiriladi. Register soni cheklansa maskalar spill qilinishi yoki qayta hisoblanishi mumkin. Juda siyrak maskada keng vektor unit ko‘p lane’ni bo‘sh ishlatadi; branch yoki kompaktlash foydaliroq bo‘lishi ehtimol.

Boshqa statuslardan farqi

Condition code odatda oxirgi skalyar arifmetik natija haqida nol, carry yoki overflow holatini saqlaydi. Predicate Register esa ko‘pincha mustaqil nomlanadigan bir yoki ko‘p mantiqiy shartni saqlaydi. Control Register tizim rejimini boshqaradi; predikat odatiy dastur ma’lumot oqimining qismidir.

Out-of-order yadro predicate register’larni ham Physical Register’ga rename qilib, mustaqil taqqoslashlar orasidagi WAW va WAR bog‘liqliklarini yo‘qotadi. Maskalangan buyruq haqiqiy ishlab chiqaruvchi tegini kutadi.

Sikl boshqaruvi

Vector-length agnostic siklda predicate register qolgan elementlar uchun maska yaratadi. Indeks har iteratsiya apparat qayta ishlagan faol element soniga oshadi. Shu usul aniq vector kengligini bilmasdan massiv oxirini xavfsiz boshqaradi va alohida skalyar tail talab qilmaydi.

Fault-first load muvaffaqiyatli o‘qilgan lane’lar asosida predikatni qisqartirishi mumkin. Dastur keyingi iteratsiyada qolgan elementlardan davom etadi. Bu sahifa chegarasi yoki null-terminated oqimni vektorlashtirishga yordam beradi, ammo progress bo‘lmasa cheksiz siklga tushmaslik uchun qaytgan faol son tekshiriladi.

Predicate spill oddiy bit to‘plamiga o‘xshasa ham maxsus layout va kenglikka ega; ABI va context save formatidan foydalaniladi.

Predikat yaratadigan taqqoslash signed va unsigned talqin, element kengligi hamda suzuvchi nuqtali NaN qoidalariga bog‘liq. Bir xil bitlar boshqa compare opcode bilan mutlaqo boshqa faol lane to‘plamini berishi mumkin. Debugger maskani ko‘rsatganda lane tartibini arxitekturaning eng past elementidan boshlab talqin qiladi.

Bog‘liq tushunchalar

predication, vector mask, condition code, vector register, masked instruction, register renaming