موازی‌سازی زیرکلمه‌ای: یک دستور چگونه چند مقدار را هم‌زمان پردازش می‌کند

پردازنده‌های امروزی اغلب نیاز دارند یک عملیات ساده یکسان را به‌طور هم‌زمان روی داده‌های کوچک زیادی اعمال کنند، مانند تنظیم روشنایی میلیون‌ها پیکسل یک تصویر. این مقاله موازی‌سازی زیرکلمه‌ای، نحوه تقسیم یک رجیستر پهن به چند لِین کوچک‌تر که در یک دستور واحد پردازش می‌شوند، و چگونگی کاربرد این ایده در سخت‌افزار تجاری از طریق افزونه‌های واقعی مانند SIMD و AVX را توضیح می‌دهد.

پردازش برداریدستورات SIMDموازی‌سازی زیرکلمه‌ای

~3 دقیقه مطالعه · آخرین به‌روزرسانی ۱۵ شهریور ۱۴۰۵

مسئله: تکرار یک عملیات یکسان بارها

برخی بارهای کاری، به‌ویژه پردازش چندرسانه‌ای و گرافیک، شامل اعمال یک عملیات ساده یکسان، مانند جمع، روی تعداد بسیار زیادی مقدار داده کوچک و مستقل هستند — برای مثال، تنظیم شدت رنگ هر پیکسل در یک تصویر. اجرای این کار با یک دستور معمولی به‌ازای هر مقدار، حتی برای یک تصویر متوسط به تعداد عظیمی دستور جداگانه نیاز خواهد داشت.

ایده اصلی: تقسیم یک رجیستر پهن به لِین‌ها

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) رجیسترهای پهنی معرفی کردند، برخی تا ۵۱۲ بیت، که به‌طور خاص برای نگه‌داشتن مقادیر کوچک زیادی که با هم در یک دستور واحد پردازش می‌شوند طراحی شده‌اند. این افزونه‌ها به‌طور گسترده برای تسریع کدگذاری چندرسانه‌ای، محاسبات علمی، و بارهای کاری یادگیری ماشین استفاده می‌شوند.

چرا موازی‌سازی زیرکلمه‌ای اهمیت دارد

بدون موازی‌سازی زیرکلمه‌ای، رسیدن به توان عملیاتی بالا روی بارهای کاری داده-موازی مانند پردازش تصویر، یا نیازمند سرعت ساعت بسیار بالاتری خواهد بود، که به محدودیت دیوار توان که پیش‌تر در این مجموعه بحث شد برخورد می‌کند، یا دستورات بسیار بیشتری که به‌صورت پی‌درپی اجرا شوند. با پردازش چندین مقدار به‌ازای هر دستور، سخت‌افزار بدون نیاز به افزایش فرکانس ساعت یا صادر کردن دستورات اضافی برای هر عنصر داده منفرد، به بهره‌های توان عملیاتی قابل‌توجهی دست می‌یابد.

نوشته و پژوهش‌شده توسط دکتر شاهین صیامی

مقالات مرتبط

اصول کش: حافظه کوچک و سریع چگونه پیش‌بینی می‌کند بعداً چه چیزی نیاز است

یک کش فقط به این دلیل کار می‌کند که برنامه‌ها تمایل دارند داده یکسان یا نزدیک به هم را به‌طور تکراری دسترسی کنند نه به‌صورت تصادفی. این مقاله اصل محلیت که کش را مؤثر می‌کند را توضیح می‌دهد، یک کش مستقیم‌نگاشت‌شده چگونه داده را با استفاده از یک آدرس مکان‌یابی می‌کند، و در یک hit کش در مقابل یک miss کش چه اتفاقی می‌افتد.

ادامه

سلسله‌مراتب حافظه: چرا کامپیوترها از چند نوع حافظه استفاده می‌کنند

هیچ فناوری حافظه واحدی هم‌زمان سریع، بزرگ، و ارزان نیست. این مقاله مفهوم سلسله‌مراتب حافظه که چند فناوری حافظه مختلف را ترکیب می‌کند تا به سرعت سریع‌ترین آن‌ها با هزینه ارزان‌ترین نزدیک شود را معرفی می‌کند، سپس فناوری‌های اصلی که هر سطح را می‌سازند مرور می‌کند.

ادامه

تصورات غلط رایج درباره طراحی پردازنده و تصویر کلی فصل چهارم

پس از پوشش datapath ها، پایپ‌لاینینگ، خطرها، و مقایسه‌های پردازنده دنیای واقعی، وقت آن است چند تصور غلط پایدار درباره نحوه رفتار واقعی پردازنده‌ها را اصلاح کنیم. این مقاله به مغالطات رایج درباره پایپ‌لاینینگ و کارایی می‌پردازد، سپس مسیر کامل از datapath های ساده تا اجرای سوپراسکالر که در سراسر این فصل پوشش داده شد را به هم پیوند می‌دهد.

ادامه

پایپ‌لاین‌های دنیای واقعی: مقایسه ARM و Intel، و تسریع ضرب ماتریس

مفاهیم نظری پایپ‌لاین در پردازنده‌های تجاری واقعی شکل مشخصی به خود می‌گیرند، که بسته به اهداف طراحی‌شان از نظر عمق پایپ‌لاین و عرض صدور به‌طور گسترده متفاوت‌اند. این مقاله مقایسه می‌کند ARM Cortex-A53 و Intel Core i7 چگونه پایپ‌لاینینگ را متفاوت برای کارایی توان در مقابل کارایی خام پیاده‌سازی می‌کنند، سپس نشان می‌دهد موازی‌سازی سطح دستور چگونه ضرب ماتریس را در عمل تسریع می‌کند.

ادامه

موازی‌سموازی‌سازی سطح دستور: اجرای بیش از یک دستور به‌طور هم‌زمانازی سطح دستور: اجرای بیش از یک دستور به‌طور هم‌زمان

موازی‌سازی سطح دستور: اجرای بیش از یک دستور به‌طور هم‌زمان

ادامه

یک پردازنده پایپ‌لاین‌شده چگونه استثناها را مدیریت می‌کند

هر دستوری آن‌طور که انتظار می‌رود اجرا نمی‌شود — برخی شرایط خطایی مانند یک opcode نامعتبر یا سرریز محاسباتی را فعال می‌کنند که پردازنده باید با امنیت به آن‌ها پاسخ دهد. این مقاله توضیح می‌دهد استثناها چه هستند، یک پردازنده پایپ‌لاین‌شده چگونه آن‌ها را بدون خراب کردن وضعیت برنامه تشخیص داده و مدیریت می‌کند، و چرا استثناها مشابه خطرهای کنترلی رفتار می‌شوند.

ادامه