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

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

موازی‌سازی سطح دستورپردازنده‌های سوپراسکالرصدور چندگانه

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

محدودیت یک پایپ‌لاین پایه

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

فراتر رفتن از یک دستور در هر سیکل

Instruction-Level Parallelism (ILP) به تکنیک‌هایی اشاره دارد که به یک پردازنده اجازه می‌دهند بیش از یک دستور را در همان سیکل ساعت اجرا کند، با تکرار منابع سخت‌افزاری و صادر کردن چند دستور هم‌زمان به پایپ‌لاین به‌جای یکی‌یکی.

صدور چندگانه: تکرار جلوی پایپ‌لاین

یک پردازنده قادر به این کار Multiple-Issue یا Superscalar نامیده می‌شود. برای پشتیبانی از صدور بیش از یک دستور در هر سیکل، سخت‌افزار منابع کلیدی را تکرار می‌کند: چند ALU اجازه می‌دهند بیش از یک عملیات محاسباتی به‌طور هم‌زمان اجرا شود، پورت‌های خواندن و نوشتن اضافی روی فایل رجیستر اجازه می‌دهند عملوندهای بیشتری هم‌زمان دسترسی‌پذیر باشند، و مرحله واکشی دستور باید بیش از یک دستور را در هر سیکل از حافظه بازیابی کند.

پایپ‌لاین تک‌صدور: 1 دستور در هر مرحله در هر سیکل
پایپ‌لاین دوصدور: تا 2 دستور در هر مرحله در هر سیکل،
                    نیازمند 2 ALU، پورت‌های اضافی فایل رجیستر،
                    و واکشی دستور پهن‌تر

زمان‌بندی ایستا در مقابل پویا

تصمیم‌گیری درباره اینکه کدام دستورات می‌توانند با امنیت در همان سیکل با هم اجرا شوند می‌تواند به دو روش متفاوت رخ دهد. Static Scheduling از پیش توسط کامپایلر انجام می‌شود، و دستورات را در ترتیبی که شناخته‌شده برای اجتناب از تعارضات است پیش از اینکه برنامه اصلاً اجرا شود، مرتب می‌کند. Dynamic Scheduling توسط سخت‌افزار در زمان اجرا انجام می‌شود، که دستورات را همان‌طور که می‌رسند بررسی می‌کند و بی‌درنگ تصمیم می‌گیرد کدام‌ها می‌توانند با هم صادر شوند، به قیمت پیچیدگی سخت‌افزاری اضافی برای گرفتن این تصمیمات به‌سرعت.

چرا وابستگی‌ها محدود می‌کنند چقدر موازی‌سازی ممکن است

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

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

چرا این رویکرد محدودیت‌های عملی دارد

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

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

مقالات مرتبط

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

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

ادامه

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

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

ادامه

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

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

ادامه

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

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

ادامه

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

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

ادامه

خطرهای کنترلی: مدیریت شاخه‌ها در یک پردازنده پایپ‌لاین‌شده

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

ادامه