پایپلاینینگ و مخاطرات
پایپلاینینگ با تقسیم پردازش دستورالعملها به مراحل، اجرای دستورالعملهای متوالی را همپوشانی میکند و توان عملیاتی را افزایش میدهد؛ مخاطرات موقعیتهایی هستند — تداخل منابع، وابستگیهای دادهای، و انشعابات — که مانع از پیشروی دستورالعمل بعدی در چرخه بعدی میشوند.
Definition
پایپلاینینگ (Pipelining) یک تکنیک است که با تقسیم پردازش دستورالعملهای متعدد به مراحل متوالی، اجرای آنها را همپوشانی میکند، و مخاطره (hazard) هر شرایطی است که یک مرحله را مجبور به توقف میکند زیرا نمیتواند به درستی در چرخه ساعت بعدی پیش برود.
Scope
این موضوع پایپلاین دستورالعمل کلاسیک و سه دسته مخاطراتی که آن را محدود میکنند، پوشش میدهد: مخاطرات ساختاری (تداخل منابع)، مخاطرات دادهای (وابستگیهای بین دستورالعملها)، و مخاطرات کنترلی (انشعابات). این شامل راهحلهای استاندارد — ارسال/بایپس، توقف، و مدیریت انشعاب — میشود. این موضوع شامل صدور موازی پیشرفته (موازیسازی در سطح دستورالعمل)، پیشبینی عمیق جهت انشعاب (پیشبینی انشعاب)، و بازترتیب پویا (اجرای خارج از ترتیب) نمیشود.
Core questions
- چگونه تقسیم اجرای دستورالعمل به مراحل، توان عملیاتی را بدون کاهش تأخیر افزایش میدهد؟
- مخاطرات ساختاری، دادهای و کنترلی چه هستند و هر یک چه چیزی باعث میشود؟
- چگونه ارسال (forwarding) بسیاری از مخاطرات دادهای را بدون توقف حل میکند؟
- هزینه انشعابات در یک پایپلاین چقدر است و چگونه کاهش مییابد؟
Key concepts
- مراحل پایپلاین (واکشی، رمزگشایی، اجرا، حافظه، بازنویسی)
- توان عملیاتی در مقابل تأخیر
- مخاطرات ساختاری
- مخاطرات دادهای
- مخاطرات کنترلی
- ارسال و بایپس
- توقفها و حبابهای پایپلاین
- جریمه انشعاب
Key theories
- توان عملیاتی و مخاطرات پایپلاین
- یک پایپلاین k-مرحلهای به طور ایدهآل پس از پر شدن، یک دستورالعمل در هر چرخه را تکمیل میکند، اما مخاطرات ساختاری، دادهای و کنترلی باعث توقفهایی میشوند که توان عملیاتی را کمتر از حد ایدهآل کاهش میدهند؛ طراحی پایپلاین بر به حداقل رساندن این توقفها متمرکز است.
Mechanisms
پردازش دستورالعمل به مراحل تقسیم میشود تا در حالی که یک دستورالعمل در حال اجرا است، دستورالعملهای دیگر واکشی و رمزگشایی شوند. یک مخاطره ساختاری زمانی رخ میدهد که دو دستورالعمل به یک منبع نیاز داشته باشند؛ یک مخاطره دادهای زمانی که یک دستورالعمل به نتیجهای نیاز دارد که هنوز تولید نشده است؛ یک مخاطره کنترلی زمانی که دستورالعمل بعدی به یک انشعاب حلنشده وابسته است. ارسال (forwarding) نتایج را مستقیماً بین مراحل هدایت میکند، توقفها (stalls) حبابهایی را در صورت ناکافی بودن ارسال وارد میکنند، و مدیریت انشعاب (branch handling) جریمههای مخاطره کنترلی را کاهش میدهد.
Clinical relevance
پایپلاینینگ تکنیک عملکردی اساسی در تقریباً هر پردازندهای است، و درک مخاطرات توضیح میدهد که چرا ترتیب دستورالعملها و رفتار انشعاب بر سرعت تأثیر میگذارد. زمانبندی دستورالعملها توسط کامپایلر و آگاهی برنامهنویس از وابستگیها و الگوهای انشعاب میتواند عملکرد را در سختافزار پایپلاین شده به طور قابل توجهی بهبود بخشد.
History
پایپلاینینگ در ماشینهای اولیه با عملکرد بالا مانند IBM Stretch و CDC 6600 در اوایل دهه 1960 ظاهر شد. پایپلاین ساده پنج مرحلهای با پردازندههای RISC دهه 1980 به یک مدل آموزشی و طراحی کانونی تبدیل شد، و طبقهبندی سیستماتیک مخاطرات و راهحلهای آنها در متون Hennessy-Patterson تدوین شد.
Key figures
- John L. Hennessy
- David A. Patterson
- Seymour Cray
Related topics
Seminal works
- hennessy2019
- patterson2020
Frequently asked questions
- آیا پایپلاینینگ باعث میشود یک دستورالعمل واحد سریعتر اجرا شود؟
- خیر. پایپلاینینگ زمان تکمیل یک دستورالعمل (تأخیر) را کاهش نمیدهد؛ بلکه با همپوشانی اجرای دستورالعملها، تعداد دستورالعملهایی که در واحد زمان به پایان میرسند (توان عملیاتی) را افزایش میدهد، دقیقاً همانند خط مونتاژ که تولید را بدون سرعت بخشیدن به هیچ یک از اقلام افزایش میدهد.
- ارسال (forwarding) چیست؟
- ارسال، یا بایپس، یک نتیجه تازه محاسبه شده را مستقیماً از مرحلهای که آن را تولید کرده است به مرحله بعدی که به آن نیاز دارد، هدایت میکند، به جای اینکه منتظر بماند تا در فایل ثبات (register file) نوشته شود. این بسیاری از مخاطرات دادهای را بدون توقف پایپلاین حل میکند.