Bosh sahifa Wiki Vector Register

Vector Register

Vector Register — bir nechta bir xil yoki turli talqin qilinadigan ma’lumot elementini bitta keng apparat registrida saqlovchi protsessor registri. Vector Instruction shu registrdagi elementlarga parallel amal qo‘llaydi. Kenglik 128, 256, 512 bit yoki apparatga bog‘liq scalable qiymat bo‘lishi mumkin.

Element talqini

Bitta bit naqshi sakkiz bitli baytlar, 32 bitli integerlar, floating-point sonlar yoki maska sifatida talqin qilinishi mumkin. Registrning o‘zi doim “float” turiga ega emas; opcode element kengligi va semantikasini belgilaydi. Type o‘zgartirish ba’zan faqat boshqa buyruq bilan talqin qilish, ba’zan esa haqiqiy raqamli konversiyadir.

128 bitli registr to‘rtta 32 bitli yoki ikkita 64 bitli elementni saqlashi mumkin. Elementlar tartibi ISA diagrammasi va xotira endianness’i bilan aniq belgilanadi. Shuffle indeksi noto‘g‘ri talqin qilinsa lane’lar aralashib ketadi.

Registr fayli va portlar

Vector register file keng o‘qish-yozish portlari va katta energiya talab qiladi. Bir siklda bir nechta vektor operandni execution unitga yetkazish yuzlab bitli simlarni almashtiradi. Banklash maydonni kamaytiradi, ammo bir bankka ko‘p operand tushsa conflict yuz beradi.

Physical vector register’lar Register Renaming uchun arxitektura registrlaridan ko‘proq bo‘lishi mumkin. Maskalangan qisman yozuv eski faol bo‘lmagan elementlarni saqlashi kerak bo‘lsa, merge dependency hosil bo‘ladi. Zeroing varianti faol bo‘lmagan qismlarni nol qilib, eski qiymatga bog‘liqlikni yo‘qotadi.

Kengliklar va moslik

Ayrim ISA kichik registrlarni katta registrning past qismi sifatida alias qiladi. Kichik yozuv yuqori bitlarni saqlashi yoki nol qilishi mikroarxitektura va opcodega bog‘liq. Noto‘g‘ri variant keyingi keng buyruqda eski ma’lumot yoki performance penalty keltiradi.

Scalable vector arxitektura registrning bit sonini dasturdan yashiradi. Dastur runtime vector length bo‘yicha sikl yuritadi va predikat bilan qoldiqni boshqaradi. Context switch esa apparatdagi haqiqiy kenglikdagi barcha holatni saqlaydi.

Kontekst va xavfsizlik

Vektor registrlar katta bo‘lgani sabab operatsion tizim ularni faqat jarayon ishlatganda saqlash optimallashtirishidan foydalanishi mumkin. Biroq eski jarayon qiymati yangi himoya domeniga ko‘rinmasligi shart. Signal handler va debugger ham uzilgan nuqtadagi to‘liq vektor holatini ko‘ra olishi kerak.

Kriptografik kalitlar vector register’da qolishi mumkin. Funksiya register’ni tozalasa ham compiler o‘chirishni “keraksiz” deb olib tashlamasligi uchun xavfsiz zeroization vositasi ishlatiladi. Spekulyatsiya va context save nusxalari ham tahdid modelida hisobga olinadi.

ABI va chaqiruv

Calling Convention qaysi vector register argument, natija va vaqtinchalik qiymat uchun ishlatilishini belgilaydi. Callee-saved keng registrni saqlash katta stack trafik keltirishi sabab ko‘p ABI faqat ayrim qismini yoki umuman hech birini callee-saved qilmasligi mumkin. Variadik funksiya vektor argumentlari uchun qo‘shimcha metadata yoki register-save area talab qiladi.

Function call atrofida compiler faqat live vector qiymatlarni spill qiladi. Inlining bu chegarani yo‘qotib, register pressure’ni oshirishi yoki saqlash xarajatini kamaytirishi mumkin. Tail call’da callee ko‘rishi kerak bo‘lgan argument lane’lari to‘g‘ri formatda qoladi, yuqori aniqlanmagan bitlar esa xavfsizlik sabab tozalanishi mumkin.

Context switch’da kengaytma ishlatilmagan jarayon uchun vektor holatini darhol saqlamaslik mumkin. Lazy yoki usage-tracked usul katta registr blokini keraksiz ko‘chirishni kamaytiradi, biroq jarayonlar orasida eski lane ma’lumotlari ko‘rinib qolmasligi shart.

Bog‘liq tushunchalar

vector instruction, SIMD, vector processing unit, register file, predication, scalable vector