مسئله: تکرار یک عملیات یکسان بارها
برخی بارهای کاری، بهویژه پردازش چندرسانهای و گرافیک، شامل اعمال یک عملیات ساده یکسان، مانند جمع، روی تعداد بسیار زیادی مقدار داده کوچک و مستقل هستند — برای مثال، تنظیم شدت رنگ هر پیکسل در یک تصویر. اجرای این کار با یک دستور معمولی بهازای هر مقدار، حتی برای یک تصویر متوسط به تعداد عظیمی دستور جداگانه نیاز خواهد داشت.
ایده اصلی: تقسیم یک رجیستر پهن به لِینها
Subword Parallelism این مسئله را با رفتار با یک رجیستر پهن بهگونهای که گویی چندین مقدار کوچکتر مستقل کنار هم بستهبندی شدهاند، و انجام همان عملیات روی همه آنها در یک دستور واحد، حل میکند.
برای مثال، یک رجیستر ۶۴ بیتی میتواند بهجای یک عدد بزرگ، بهعنوان چهار مقدار جداگانه ۱۶ بیتی در نظر گرفته شود:
رجیستر بهصورت 4 لِین 16 بیتی:
[ Lane 3 | Lane 2 | Lane 1 | Lane 0 ]یک دستور جمع موازی زیرکلمهای واحد سپس میتواند لِینهای متناظر را بهطور مستقل و همزمان جمع کند، و چهار نتیجه جداگانه در زمانی که در غیر این صورت برای اجرای یک جمع ساده لازم بود تولید کند.
چرا این تکنیک SIMD نامیده میشود
این تکنیک کلی SIMD (Single Instruction, Multiple Data) نامیده میشود: یک دستور صادر میشود، اما روی چند قطعه داده مستقل بهطور همزمان عمل میکند، بهجای حالت معمول یک دستور که روی یک مقدار تکی عمل میکند.
واقعیتهای عملی: افزونههای SIMD در پردازندههای تجاری
خانوادههای اصلی پردازنده افزونههای SIMD خودشان را برای بهرهبرداری از این ایده در مقیاس بزرگ پیادهسازی میکنند. در معماری x86، افزونههایی مانند SSE (Streaming SIMD Extensions) و بعدها AVX (Advanced Vector Extensions) رجیسترهای پهنی معرفی کردند، برخی تا ۵۱۲ بیت، که بهطور خاص برای نگهداشتن مقادیر کوچک زیادی که با هم در یک دستور واحد پردازش میشوند طراحی شدهاند. این افزونهها بهطور گسترده برای تسریع کدگذاری چندرسانهای، محاسبات علمی، و بارهای کاری یادگیری ماشین استفاده میشوند.
چرا موازیسازی زیرکلمهای اهمیت دارد
بدون موازیسازی زیرکلمهای، رسیدن به توان عملیاتی بالا روی بارهای کاری داده-موازی مانند پردازش تصویر، یا نیازمند سرعت ساعت بسیار بالاتری خواهد بود، که به محدودیت دیوار توان که پیشتر در این مجموعه بحث شد برخورد میکند، یا دستورات بسیار بیشتری که بهصورت پیدرپی اجرا شوند. با پردازش چندین مقدار بهازای هر دستور، سختافزار بدون نیاز به افزایش فرکانس ساعت یا صادر کردن دستورات اضافی برای هر عنصر داده منفرد، به بهرههای توان عملیاتی قابلتوجهی دست مییابد.