Bosh sahifa Wiki Single Instruction Multiple Data

Single Instruction Multiple Data

Single Instruction Multiple Data — bitta buyruq oqimi bir vaqtning o‘zida ko‘p ma’lumot elementiga bir xil amal qo‘llaydigan parallel hisoblash modeli. SIMD tasvir piksellari, audio namunalar, vektor va matritsa bloklari kabi muntazam ma’lumot-parallel ishlarni kam buyruq overhead’i bilan bajaradi.

Aparat ko‘rinishlari

CPUdagi Vector Instruction keng Vector Register elementlariga parallel ishlaydi. GPUda bir instruction warp yoki wavefront ichidagi ko‘p lane tomonidan bajariladi; amaliy model SIMT deb nomlansa-da, bir xil buyruqni ko‘p ma’lumotda bajarish tamoyiliga yaqin. Eski massiv protsessorlarda markaziy Control Unit ko‘p Processing Element’ga buyruq tarqatgan.

SIMD kengligi fixed yoki scalable bo‘lishi mumkin. 256 bitli registr sakkizta 32 bitli elementni bir buyruqda qayta ishlaydi. Scalable model apparat uzunligi bo‘yicha sikl yuritib, bir binariyni turli kenglikka moslashtiradi.

Ma’lumot joylashuvi

Ketma-ket elementlar contiguous load/store bilan samarali uzatiladi. Structure of Arrays bir xil maydonlarni yonma-yon joylab, vektor ishlovini yengillashtiradi. Gather va scatter tartibsiz manzillarni qo‘llaydi, lekin ko‘p kesh satri va TLB yozuviga tegib, oddiy vektor load’dan sekinroq bo‘lishi mumkin.

Alignment ba’zi ISAda talab, boshqasida unumdorlik omilidir. Array oxiridagi qoldiq maskalangan buyruq yoki skalyar tail bilan ishlanadi. Faol bo‘lmagan lane ruxsatsiz xotiraga tegmasligi uchun mask semantikasi tekshiriladi.

Shartli bajarish

Ma’lumot elementlari turli branch yo‘liga ketsa divergence yuz beradi. Predicate Register yoki mask har yo‘lni alohida faol lane’larda bajaradi. Ikkala yo‘lning ishini bajarish kerak bo‘lsa, faol lane ulushi kamayadi va SIMD samarasi pasayadi.

Branchless transformatsiya qisqa shartlar uchun foydali, ammo murakkab yo‘llarda keraksiz hisob va xotira murojaati ko‘payadi. Ma’lumotni shart bo‘yicha oldindan guruhlash bir xil lane’larni birga ishlatishi mumkin.

Dasturlash va aniqlik

Compiler auto-vectorization iteratsiyalar mustaqilligini va alias yo‘qligini isbotlaydi. Intrinsic aniq SIMD amalni beradi, lekin ISAga bog‘laydi. Kutubxona runtime feature detection bilan skalyar va turli kenglikdagi variantlar orasidan tanlaydi.

Floating-point reduction elementlarni daraxt tartibida yig‘ib, skalyar ketma-ketlikdan boshqa rounding natija berishi mumkin. Reproduktiv hisob compiler rejimi va reduction algoritmini aniq belgilaydi. Peak SIMD throughput xotira bandwidth, mask density va port pressure sabab amalda kamayadi.

SIMD MIMD’dan farqli ravishda barcha lane uchun bitta nazorat oqimini bo‘lishadi. Ko‘p yadroli dastur MIMD threadlar ichida SIMD ishlatib, ikki darajadagi parallelizmni birlashtirishi mumkin.

Energiya samaradorligi

Bitta decode va control signali ko‘p lane uchun bo‘lishilgani SIMD har operatsiyaga kamroq front-end energiya sarflashi mumkin. Ammo barcha lane faol bo‘lmasa yoki ma’lumotni shuffle qilish ko‘p bo‘lsa, bu ustunlik kamayadi. Keng unitni uyg‘otish va register file’dan yuzlab bit o‘qish ham sezilarli xarajatdir.

Mobil signal protsessori muntazam filtrni SIMD’da yuqori samaradorlikda bajaradi, control-heavy kodni esa skalyar yadroga qoldiradi. Heterogeneous scheduler vazifani mos blokka yuboradi; qurilmalar orasida ma’lumot nusxalash narxi hisoblash foydasidan oshmasligi kerak.

SIMD kod portability uchun intrinsics, auto-vectorization yoki ko‘p variantli dispatch orqali yoziladi. Dastur ishga tushganda mavjud instruction-set kengaytmasini tekshiradi va mos implementatsiyani tanlaydi. Qo‘llab-quvvatlanmaydigan opcode’ni to‘g‘ridan-to‘g‘ri bajarish illegal-instruction exception keltiradi.

Bog‘liq tushunchalar

SIMD, vector instruction, data parallelism, predication, vector register, MIMD