Vector Instruction — bitta buyruq bilan bir nechta ma’lumot elementiga parallel amal qo‘llaydigan mashina buyrug‘i. Elementlar vektor registrida, xotira blokida yoki maxsus predikat bilan tanlangan yo‘llarda joylashadi. Vektorlashtirish tasvir, audio, ilmiy hisoblash, mashinaviy o‘rganish va massivlar ustidagi bir xil operatsiyalarni tezlashtiradi.
Element va yo‘llar
Vektor registri bir nechta 8, 16, 32 yoki 64 bitli element sifatida talqin qilinishi mumkin. Bir xil fizik registr kengligi kichik elementlarda ko‘proq parallel yo‘l beradi. Qo‘shish, ko‘paytirish va taqqoslash har elementga mustaqil bajariladi; gorizontal reduction esa elementlarni bitta natijaga birlashtiradi.
Fixed-length SIMD arxitekturasi registr kengligini ISAda belgilaydi. Scalable vector model dasturga apparatdagi aniq uzunlikni oshkor qilmay, vector length bo‘yicha qismlab ishlashga imkon beradi. Ikkinchi yondashuv bir binariyni turli kenglikdagi yadroda samarali ishlatishni maqsad qiladi.
Xotira murojaati
Ketma-ket load va store vektor elementlarini yonma-yon manzillardan oladi. Strided murojaat elementlar orasida doimiy masofa ishlatadi. Gather va scatter har element uchun alohida manzilga tegadi; ular tartibsiz tuzilma uchun qulay, ammo ko‘p kesh satri va sahifaga tarqalib, qimmatroq bo‘lishi mumkin.
Tekislanish ayrim ISAlarda talab, boshqasida unumdorlik omilidir. Massiv chegarasidagi qoldiq elementlar maska bilan o‘chiriladi yoki skalyar siklda ishlanadi. Maskalangan yo‘l “faol emas” bo‘lsa, u xotiraga umuman tegmasligi kerakmi yoki faqat natijani yozmasligi ISA tomonidan aniqlanadi.
Predikatsiya va istisno
Predikat registri qaysi elementlar faol ekanini belgilaydi. Bu shartli branchsiz turli elementlarni tanlashga yordam beradi. Bir element xato manzilga tegsa, butun vektor buyruqning aniq istisnosi qanday ko‘rinishi murakkab masala; fault-first variant birinchi xatogacha muvaffaqiyatli elementlar sonini qaytarishi mumkin.
Floating-point vektor amallari har elementda yaxlitlash va maxsus qiymat qoidalariga amal qiladi. Fused multiply-add oraliq yaxlitlashni kamaytirib, alohida ko‘paytirish va qo‘shishdan bit darajasida boshqa natija berishi mumkin.
Dasturiy vositalar
Kompilyator auto-vectorization uchun iteratsiyalar mustaqilligini, alias yo‘qligini va operatsiya xavfsizligini isbotlaydi. Intrinsic dasturchiga aniq vektor buyrug‘ini chaqirish imkonini beradi, ammo kodni ISA kengaytmasiga bog‘laydi. Runtime dispatch protsessor xususiyatiga qarab skalyar yoki bir nechta vektor variantidan mosini tanlaydi.
Vektor kengligi ortishi nazariy throughputni oshiradi, lekin xotira bandwidth, portlar va chastota cheklovi foydani kamaytirishi mumkin. Profil faqat buyruq sonini emas, faol yo‘llar ulushi va ma’lumot yetkazish xarajatini ham o‘lchaydi.
Ma’lumot joylashuvi
Array of Structures ko‘rinishida bitta obyekt maydonlari yonma-yon, Structure of Arrays’da esa bir xil maydonlar alohida massivda joylashadi. Vektor buyruq faqat bitta maydonni ketma-ket ishlasa, ikkinchi joylashuv contiguous load va kamroq shuffle beradi. Biroq butun obyektni tez-tez ishlatadigan kod uchun birinchi shakl keshga qulayroq bo‘lishi mumkin.
Vektor reduction natijasining tartibi skalyar chapdan-o‘ng hisobdan farq qiladi. Integer modul arifmetikasida ko‘pincha bir xil natija chiqadi, floating-point’da assotsiativlik yo‘qligi sabab oxirgi bitlar o‘zgaradi. Reproduktiv ilmiy hisob compiler flag, reduction daraxti va parallel ishchilar sonini aniq boshqaradi.
Vektor kodni tekshirishda faqat to‘liq blok emas, nol element, bir element, maskaning barcha kombinatsiyasi va sahifa chegarasidagi qoldiq ham sinovdan o‘tkaziladi. Faol bo‘lmagan lane ruxsatsiz manzilga tegmasligi ayniqsa muhim.
Bog‘liq tushunchalar
SIMD, vector register, predication, gather-scatter, auto-vectorization, vector processing unit