Scalar Instruction — bir buyruqda bitta mantiqiy son yoki ma’lumot elementiga amal qiladigan mashina buyrug‘i. U vektor buyruqdan farqli ravishda ko‘p elementni parallel yo‘llarda qayta ishlamaydi. Registr kengligi 64 bit bo‘lsa ham, bitta 64 bitli qiymat ustidagi qo‘shish skalyar amal hisoblanadi.
Operand modeli
Skalyar buyruq butun son, floating-point qiymat, manzil yoki mantiqiy bitlar to‘plamini operand sifatida olishi mumkin. ADD r1, r2, r3 kabi amal ikki qiymatdan bitta natija hosil qiladi. Load va store ham bitta elementni ko‘chirsa skalyar xotira amali bo‘ladi.
Skalyar floating-point buyruq keng vektor registrining faqat past elementini ishlatishi mumkin. Yuqori bitlar saqlanishi, nol qilinishi yoki aniqlanmagan bo‘lishi ISAga bog‘liq. Bu tafsilot keyingi vektor amal bilan soxta bog‘liqlik va registr ko‘chirish xarajatiga ta’sir qilishi mumkin.
Bajarish xususiyati
Skalyar degani albatta ketma-ket bajarish emas. Superskalyar protsessor bir siklda bir nechta mustaqil skalyar buyruqni turli execution unitlarda ishlatadi. Parallelizm buyruqlar darajasida hosil bo‘ladi; vektor buyruqda esa bitta buyruq ichidagi elementlar darajasida ham parallelizm mavjud.
Shartlar, ko‘rsatkich bo‘ylab yurish va notekis ma’lumot tuzilmalari ko‘pincha skalyar kodga mos. Har iteratsiya oldingi natijaga bog‘liq bo‘lsa, vektorlashtirish mumkin bo‘lmasligi mumkin. Kichik qoldiq yoki vektor kengligiga sig‘magan elementlar ham skalyar “tail” siklida bajariladi.
Vektor bilan aralashish
Kompilyator bir funksiyada skalyar boshqaruv va vektor ma’lumot yo‘lini birlashtiradi. Skalyar registrda sikl indeksi va chegara yuritilib, vektor registrlarda massiv bloklari ishlanadi. Skalyar qiymatni barcha vektor yo‘llariga tarqatish broadcast deb ataladi.
Vektor ishlatish har doim tezroq emas. Bitta yoki juda oz elementda vektor registrini tayyorlash, maska qurish va ma’lumotni joylash xarajati foydadan oshishi mumkin. Keng vektor bloklari ayrim protsessorda chastotani pasaytiradi; skalyar yo‘l qisqa, kechikishga sezgir kod uchun ma’qul qoladi.
Aniqlik va portativlik
Skalyar kod ISAning bazaviy qismida bo‘lsa, kengroq protsessorlar orasida ko‘proq portativ bo‘ladi. Vektor kengaytmasi mavjudligini runtime tekshirish talab qilinishi mumkin. Biroq skalyar va vektor floating-point natijasi reduction tartibi yoki fused amal sabab aynan teng bo‘lmasligi mumkin.
“Scalar” ma’lumot turiga ham ishlatiladi: struktura yoki massivdan farqli bitta qiymat. Mashina buyruqlari kontekstida esa mezon operandning parallel elementlar to‘plamimi yoki bitta mantiqiy elementmi ekanidir.
Skalyar bog‘liqlik
Skalyar accumulator siklda har iteratsiya oldingi natijani o‘qisa, haqiqiy RAW zanjir hosil bo‘ladi. Bir nechta mustaqil accumulator yaratib, yakunda ularni birlashtirish instruction-level parallelismni oshiradi. Bu usul floating-point yig‘indining tartibini o‘zgartirishi mumkin, shuning uchun aniq reproduktivlik talabida ehtiyotkorlik bilan qo‘llanadi.
Pointer chasing ham skalyar latencyga sezgir: keyingi manzil joriy node ichidan yuklanmaguncha ma’lum emas. Keng vector unit va ko‘p load portlari bitta bog‘langan ro‘yxat yo‘lini tezlashtirmaydi. Bir nechta mustaqil ro‘yxatni parallel yurish yoki ma’lumotni massivga qayta joylash ko‘proq foyda beradi.
Skalyar buyruq debugger va exception modelida odatda bitta aniq program counterga ega. Murakkab ichki mikrooperatsiyalarga ajralsa ham, dasturga ko‘rinadigan istisno shu arxitektura buyruq chegarasida yuz beradi va qayta boshlash qoidasi saqlanadi.
Bog‘liq tushunchalar
scalar processor, vector instruction, instruction-level parallelism, SIMD, register, auto-vectorization