SIMD
সিমড
Single Instruction, Multiple Data — একটা instruction একসাথে একটা wide, packed register-এর ভেতরে বহু data element-এ একই operation চালায়, যেমন একটা vaddps দিয়ে আটটা float একসাথে যোগ।
also: Single Instruction Multiple Data, vector instruction, packed register, AVX, SSE, NEON
Superscalar/out-of-order (ভিন্ন instruction সমান্তরালে) থেকে
সম্পূর্ণ আলাদা অক্ষ — SIMD একই instruction, একসাথে বহু data-তে
চালায়। একটা ২৫৬-bit AVX register আটটা 32-bit float packed রাখতে
পারে; একটা vaddps সেই আট জোড়া একই cycle-এ যোগ করে।
x86-এর বিবর্তন: MMX (১৯৯৭, integer-only, x87 register-এর উপরে aliased) → SSE/SSE2 (১৯৯৯-২০০১, ১২৮-bit, আলাদা XMM register) → AVX/AVX2 (২০১১-১৩, ২৫৬-bit YMM) → AVX-512 (২০১৬+, ৫১২-bit ZMM, কিন্তু frequency throttling-এর কুখ্যাত সমস্যা সহ)। ARM-এ সমতুল্য NEON, পরে scalable SVE/SVE2।
শর্ত: শুধু কাজে লাগে যখন একই operation সত্যিই সব element-এ
সমানভাবে প্রযোজ্য (data parallelism) — branchy, data-dependent
কোডে প্রতিটা লেনকে উভয় path-এর কাজ করতে হয় (predicated
execution), যা লাভ কমিয়ে দেয়। Compiler-এর auto-vectorization
প্রায়ই নীরবে ব্যর্থ হয় (pointer aliasing অনিশ্চয়তা, loop-carried
dependency) — তখন restrict, compiler hint, বা হাতে-লেখা
intrinsics লাগে।
Machine learning-এর matrix/dot-product কোর ঠিক SIMD-আকৃতির — AVX-512 VNNI int8 inference-এর জন্যই ডিজাইন করা।