اجرای خارج از نوبت

از ویکی‌پدیا، دانشنامهٔ آزاد
پرش به ناوبری پرش به جستجو

در مهندسی کامپیوتر، اجرای خارج از نوبت (یا اجرای پویا بیشتر به طور رسمی) یک الگوی مورد استفاده در اکثر ریزپردازنده‌ها با عملکرد بالا است که منجر به استفاده از چرخه دستورالعمل می‌شود که در غیر این صورت توسط نوع خاصی از تأخیر پرهزینه، تلف خواهد شد. در این الگو، یک پردازنده دستورالعمل موجود در دستورهای کنترل شده را به جای اجرای دستورهای اصلی توسط دسترسی به دادهٔ ورودی در برنامه اجرا می‌کند. در انجام این کار، پردازنده می‌تواند از بیکار ماندن جلوگیری کند؛ به این صورت که به جای اینکه منتظر بماند تا در دستورالعمل قبلی، داده‌ها دریافت شود، دستورالعمل بعدی را که فوراً آماده اجرا هست؛ اجرا کند.[۱]

تاریخچه[ویرایش]

اجرای خارج از نوبت، یک شکل محدود از محاسبه‌های جریان داده‌ها است، که یک بخش مهم پژوهشی در معماری کامپیوتر در سال ۱۹۷۰ و اوایل سال ۱۹۸۰ بود. ‍‍‍‍‍‍‍‍‍‍‍ تحقیقات دانشگاهی مهم در این موضوع توسط دانشگاه ییل PATT و شبیه‌ساز HPSM او منجر شد. یک مقاله توسط James E. Smith و A.R. Pleszkunدر سال ۱۹۸۵ منتشر شده، که طرح آن توسط توصیف اینکه چگونه رفتار دقیق استثنا در ماشین اجرای خارج از نوبت می‌تواند نگه داری شود.

مسلماً ماشین اولی که از اجرای خارج از نوبت استفاده می‌کرد (CDC 6600 (1964 بود که از یک رتبه‌بندی برای حل برخورد استفاده می‌کرد. در استفاده‌های مدرن، همانند رتبه‌بندی به عنوان ورود اجرای به نوبت در نظر گرفته می‌شود، از جمله ماشین‌هایی که بر روی اولین برخورد raw می‌مانند.

حدود سه سال بعد، سیستم آی بی ام / ۳۶۰ مدل ۹1 (1966) الگوریتم Tomasulo را معرفی کرد که باعث ساخت فرایند اجرای خارج از نوبت شد. در سال ۱۹۹۰ آی بی ام اولین میکروپروسسور اجرای خارج از نوبت به نام power1 معرفی کرد، اگرچه اجرای خارج از نوبت محدود به دستورهای ممیز شناور شد.

در کل دهه ۱۹۹۰ فرایند اجرای خارج از نوبت شایع تر شد، و در IBM/Motorola PowerPC 601 (1993), Fujitsu/HAL SPARC64 (1995), Intel Pentium Pro (1995), MIPS R10000 (1996), HP PA-8000 (1996), AMD K5 (1996) و DEC Alpha 21264 (1998) برجسته تر بود. استثناهای قابل توجه در این مدل شامل Sun UltraSPARCهای HP/Intel Itanium Transmeta Crusoe اینتل اتم معماری Silvermont و IBM POWER6 بود.

پیچیدگی منطقی طرح‌های خارج از نوبت به این دلیل است که این تکنیک به ماشین‌های اصلی تا اواسط دهه ۱۹۹۰ نرسید. بسیاری از پردازنده‌های low-end برای بازارهای حساس به هزینه هنوز از این الگو استفاده نمی‌کنند به این علت که نواحی بزرگ سیلیکون نیاز به ساخت این کلاس از ماشین‌ها دارند. استفاده از قدرت پایین یک هدف دیگر طراحی است که برای رسیدن به طراحی OoOE سخت‌تر است

مفهوم اساسی[ویرایش]

اعزام و جدا کردن موضوع به مسئله out-of-order اجازه می‌دهد[ویرایش]

اجرا و انفصال بازنویسی اجازه می‌دهد تا برنامه مجدد راه اندازی شود[ویرایش]

پردازنده‌های In-order[ویرایش]

در پردازنده‌های قبلی، پردازش دستورالعمل به طور معمول در مراحل زیر انجام می‌شود:

  1. واکشی دستورالعمل
  2. اگر عملوندهای ورودی در دسترس هستند (به عنوان مثال در رجیستر) دستورالعمل به واحد تابعی مناسب اعزام می‌شود. اگر یک یا چند عملوند در طول سیکل ساعت فعلی در دسترس نباشند (به طور کلی به این دلیل که آنها از حافظه واکشی می‌شوند)، پردازنده تا زمانی که آنها در دسترس قرار بگیرند ، منتظر می‌ماند.
  3. دستورالعمل‌ها توسط واحدهای تابعی مناسب اجرا می‌شود.
  4. واحدهای در حال کار نتایج را به رجیستر فایل‌ها می‌نویسند.

پردازنده Out-of-order[ویرایش]

این الگوی جدید پردازش دستورالعمل را به این مراحل می‌شکند:

  1. واکشی دستورالعمل
  2. اعزام دستورالعمل به صف دستورالعمل (همچنین بافر دستورالعمل یا ایستگاه ذخیره نیز نامیده می‌شود)
  3. دستورالعمل در صف منتظر می‌ماند تا عملوند ورودی آن در دسترس قرار گیرد. دستورالعمل پس از آن مجاز به ترک صف می‌شود
  4. دستورالعمل به واحد عملکردی مناسب صادر و در آن واحد اجرا می‌شود.
  5. نتایج نیز صف می‌بندند.
  6. تنها پس از اینکه تمام دستورهای قدیمی تر نتایجشان به رجیستر فایل پس نویسی شد، سپس این نتایج به رجیستر فایل پس نویسی می‌شود. این فارغی یا حالت کناره گیری نامیده می‌شود.

مفهوم کلیدی پردازش OoOE این است که اجازه می‌دهد پردازنده از یک کلاس از وقت کشی جلوگیری کند که هنگامی رخ می‌دهد که اطلاعات مورد نیاز برای انجام عملیات در دسترس نیست. در طرح فوق، پردازنده OoOE مانع از وقت کشی که در مرحله (۲) از پردازنده‌های in-order رخ می‌دهد، می‌شود وقتی که دستورالعمل با توجه به داده‌های از دست رفته، به طور کامل آماده پردازش نمی‌شود.

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

مزیت پردازش OoOE به عنوان دستورالعمل خط لوله رشد می‌کند و تفاوت سرعت بین حافظه اصلی (یا حافظه کش) کند و پردازنده وسیعتر می‌شود. بر روی ماشین آلات مدرن، پردازنده چند بار سریع تر از حافظه اجرا می‌شود، بنابراین در طول زمان یک پردازنده in-order منتظر می‌ماند تا داده برسد، آن می‌تواند تعداد زیادی از دستورالعمل را پردازش کند.

یکی از تفاوت‌های ایجاد شده توسط این الگوی جدید ایجاد صف است که اجازه می‌دهد تا مرحله اعزام از مرحله مسئله جدا شود و مرحله فراغت از مرحله اجرا جدا شود. یک نام اولیه برای الگوی معماری جدا شد. در اوایل پردازنده in-order، این مراحل را در lock-step و مد خط لوله اداره می‌کرد.

دستورالعمل برنامه که آن را اجرا می‌کرد، تا زمانی که نتیجه نهایی درست است ممکن بود که در جهت درست اجرا نمی‌شد. آن با استفاده از بافر در پردازنده پایپلاین مرحله واکشی و رمزگشایی را از مرحله اجرا جدا می‌کند.

هدف بافر پارتیشن‌بندی دسترسی به حافظه و اجرای توابع در یک برنامه کامپیوتری است و دستیابی به کارایی بالا با بهره‌برداری از موازی سازی بین این دو است. در انجام این کار به طور مؤثر همه تاخیرهای حافظه از دیدگاه پردازنده پنهان است.

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

معماری جداشونده به طور کلی اندیشه مفیدی برای اهداف محاسباتی نیست و همین‌طور آنها کد فشرده کنترلی را به خوبی اداره نمی‌کنند. کد فشرده کنترلی شامل چیزهایی مانند پرش‌های تو در تو که اغلب در هسته سیستم عامل به صورت متناوب رخ دهد، می‌باشد. معماری جداشونده نقش مهمی در برنامه‌ریزی کلمه دستورالعمل بسیار طولانی (VLIW) معماری بازی می‌کند.[۲]

برای جلوگیری از وابستگی عملوند نادرست، که می‌تواند فرکانس را کاهش دهد هنگامی که دستورالعمل می‌تواند در out-of order صادر شده، یک تکنیک به نام تغییر نام رجیستر استفاده شده است. در این طرح، رجیسترهای فیزیکی بیش از آن چیزی که توسط معماری تعریف شده وجود دارد. رجیسترهای فیزیکی علامت گذاری شده‌اند به طوری که نسخه‌های متعدد از رجیسترهای معماری یکسان می‌تواند هم‌زمان وجود داشته باشد.

صف برای نتایج لازم است تا مسائل مانند پرش اشتباه پیش بینی شده و استثنا / تله را حل کند. صف نتایج اجازه می‌دهد تا برنامه‌ها بعد از یک استثنا دوباره راه اندازی شوند، که نیاز به دستورالعمل برای تکمیل شدن در برنامه دارند. صف اجازه می‌دهد تا نتایج را به توجه به mispredictions در دستورالعمل شاخه بزرگتر و استثناهای گرفته شده در دستورالعمل قدیمی تر دور انداخته شود. صف اجازه می‌دهد تا نتایج ناشی از پیش بینی اشتباه در دستورالعمل پرش قدیمی تر و استثناهای گرفته شده در دستورالعمل قدیمی تر دور انداخته شود.

قابلیت صدور دستورالعمل پرش گذشته که تا کنون حل شده است به عنوان اجرای حدسی شناخته شده است.

انتخاب میکرو-معماری[ویرایش]

  • آیا دستورالعمل به صف متمرکز یا به صف توزیع شده متعدد اعزام می‌شود؟
پردازندهٔ IBM PowerPC از صفی که در میان واحدهای مختلف کاربردی توزیع شده استفاده مس کند در حالی که پردازنده‌های دیگر out-of-order از یک صف متمرکز استفاده می‌کنند. آی بی ام از اصطلاح ایستگاه ذخیره دوره ای برای صف توزیع شده استفاده می‌کند.
  • آیا صف نتایج واقعی وجود دارد یا نتایج به طور مستقیم به یک فایل رجیستر نوشته شده است؟ برای دومی، تابع صف با رجیسترمپ که اطلاعات باقیمانده رجیستر را نگه می‌دارد برای هر دستورالعمل در اعزام، به کار می‌رود.
پردازنده out-of-order اولیهٔ اینتل از یک صف نتایج اولیه استفاده می‌کند که بافر re order نامیده می‌شود، در حالی که بسیاری از پردازنده‌های out-of-order از مپ رجیستر استفاده می‌کنند.
دقت بیشتر: خانواده ریزپردازنده اینتل P6 دو بافر re order (ROB) و یک جدول رجیستر مستعار (RAT) دارند.ROB به طور عمده توسط بهبود پرش misprediction پیش می‌رود.

خانواده اینتل P6 در میان اولین ریزپردازنده OoOE بود، اما با معماری NetBurst جایگزین شد. سال‌ها بعد Netburst به یک بن‌بست رسید به دلیل خط لوله طولانی آن که فرکانس عملیاتی را بسیار بالاتر برد. سایر قسمت‌ها قادر به مطابفت با این فرکانس بالا نبودند که با توجه به مسئله دما و طراحی دیر بر اساس NetBurst، یعنی Tejas و Jayhawk لغو شدند. اینتل به طراحی P6 به عنوان اساس هسته و معماری میکرو Nehalem بازگشت. Sandy Bridge و Ivy Bridge و معماری میکرو HASWELL یک حرکت از تکنیک‌های reordering مورد استفاده در P6 و تکنیکهای reordering بکار گرفته شده از EV6 و P4 بدون خط لوله، هستند.

لوله.[۳]

جستارهای وابسته[ویرایش]

منابع[ویرایش]

  1. "Out-of-order Execution". pcguide.com. Retrieved 17 January 2014. This flexibility improves performance since it allows execution with less "waiting" time. 
  2. M. N. Dorojevets and V. Oklobdzija.
  3. Kanter, David (September 25, 2010). "Intel's Sandy Bridge Microarchitecture". 

مطالعه بیشتر[ویرایش]

  • Smith, J. E.; Pleszkun, A. R. (June 1985). "Implementation of precise interrupts in pipelined processors". ACM SIGARCH Computer Architecture News. 13 (3): 36–44. doi:10.1145/327070.327125. 
  • Smith, J. E.; Pleszkun, A. R. (May 1988). "Implementing precise interrupts in pipelined processors". IEEE Trans. Comput. 37 (5): 562–573. doi:10.1109/12.4607. 
  • Empty citation (help)