Foundationপ্রথম নীতি থেকে
LEVEL 3 · CPU Architecture

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-এর জন্যই ডিজাইন করা।