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

تعریف مسئله
-----------

در یک دستگاه ثبات، برنامه‌ها از دستورالعمل‌هایی تشکیل شده‌است که با مقدار کار می‌کنند. دستورالعمل‌ها باید این مقادیر را نام‌گذاری کنند تا از یکدیگر تشخیص داده شوند. یک نمونه دستورالعمل ممکن است بگوید X و Y را اضافه کن و نتیجه را در Z قرار بده. در این دستور X, Y و Z اسامی مکان‌های ذخیره‌سازی هستند.

به منظور داشتن یک کدگذاری مختصر از دستورالعمل، بیشتر مجموعه دستورالعمل‌های پردازنده مجموعه‌ای از مکان‌های خاص دارند که می‌توان به‌طور مستقیم آن‌ها را نام‌گذاری کرد. برای مثال معماری مجموعه دستورالعمل x86 دارای ۸ ثبات برای اعداد صحیح، x86-64 دارای ۱۶ ثبات و بسیاری از دستورالعمل‌های RISC دارای ۳۲ ثبات و IA-64 دارای ۱۲۸ عدد ثبات هستند. در پردازنده‌های کوچکتر نام این مکان‌ها مستقیماً مربوط به عناصر از یک فایل ثبات می‌باشد.

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

این قطعه کد در حال اجرا در پردازنده‌ای با ویژگی اجرای خارج از ترتیب را در نظر بگیرید:

| # | دستورالعمل |
| --- | --- |
| ۱ | `R1 = M[1024]` |
| ۲ | `R1 = R1 + 2` |
| ۳ | `M[1032] = R1` |
| ۴ | `R1 = M[2048]` |
| ۵ | `R1 = R1 + 4` |
| ۶ | `M[2056] = R1` |

دستورالعمل‌های ۴, ۵ و ۶ مستقل از دستورالعمل‌های ۱, ۲ و ۳ هستند اما پردازنده نمی‌تواند ۴ را پایان دهد تا زمانی که ۳ انجام شده باشد، در غیر این صورت دستورالعمل ۳ مقدار غلطی را می‌نویسد. این محدودیت می‌تواند با تغییر نام برخی از ثبات‌ها حذف شود:

| # | دستورالعمل | # | دستورالعمل |
| --- | --- | --- | --- |
| ۱ | `R1 = M[1024]` | ۴ | `R2 = M[2048]` |
| ۲ | `R1 = R1 + 2` | ۵ | `R2 = R2 + 4` |
| ۳ | `M[1032] = R1` | ۶ | `M[2056] = R2` |

در حال حاضر دستورالعمل‌های ۴, ۵ و ۶ می‌توانند به صورت موازی با دستورالعمل‌های ۱, ۲ و ۳ اجرا شوند، به‌طوری‌که برنامه می‌تواند سریع تر اجرا شود.

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

مخاطرات داده
------------

هنگامی که بیشتر از یک دستور ارجاع به یک مکان خاص برای یک عملوند یا با خواندن آن (به عنوان ورودی) یا با نوشتن در آن (به عنوان یک خروجی) وجود داشته باشد، در صورت اجرای این دستورها با ترتیبی غیر از برنامه اصلی سه نوع مخاطره داده ممکن است رخ دهد:

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

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

هر چیزی را که خوانده و نوشته می‌شود را می‌توان تغییر نام داد. در حالی که ثبات‌های همه منظوره و ممیز شناور بیشتر مورد بحث قرار گرفته‌اند، پرچم و وضعیت ثبات‌ها یا حتی وضعیت هر تک بیت معمولاً تغییر نام می‌یابند.

مکان‌های حافظه نیز می‌توانند تغییر نام داده شوند، اگر چه این عمل بسیار معمول نمی‌باشد. در پردازنده Transmeta Crusoe بافر ذخیره ساز یک فرم از تغییر نام حافظه می‌باشد.

اگر برنامه از استفاده مجدد از ثبات بلافاصله خودداری کند، دیگر نیازی به تغییر نام ثبات وجود ندارد. برخی از مجموعه دستورالعمل‌ها (به عنوان مثال، IA-64) تعداد بسیار زیادی از ثبات‌ها را به‌طور خاص برای این دلیل مشخص می‌کنند. اگرچه محدودیت‌هایی در این روش وجود دارد:

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

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

ثبات‌های معماری در مقابل ثبات‌های فیزیکی
----------------------------------------

برنامه‌های ماشین زبان، خواندن و نوشتن را به مجموعه‌ای محدود از ثبات‌ها به نام مجموعه دستورالعمل معماری (ISA) محدود می‌کنند. مثلاً در آلفا ISA تعداد ۳۲ ثبات عدد صحیح، که هر یک ۶۴ بیت پهنا دارد و ۳۲ ثبات ممیز شناور دارد که هر یک ۶۴ بیت می‌باشد. این ثبات‌ها، ثبات‌های معماری نامیده می‌شوند. برنامه‌های نوشته شده برای پردازنده‌هایی که مجموعه دستورالعمل آلفا را اجرا می‌کنند، عملیات خواندن و نوشتن در ۶۴ ثبات گفته شده انجام می‌شود. اگر یک برنامه‌نویس برنامه اش را در یک دیباگر متوقف کند، می‌توان محتویات این ۶۴ ثبات (و چند ثبات وضعیت) را مشاهده کرد و میزان پیشرفت ماشین را تعیین کرد.

یک پردازنده خاص که مجموعه دستورالعمل آلفا ۲۱۲۶۴ را پیاده‌سازی کرده‌است، دارای ۸۰ ثبات فیزیکی عدد صحیح و ۷۲ ثبات فیزیکی ممیز شناور می‌باشد. در یک تراشه آلفا ۲۱۲۶۴ ،۸۰ مکان فیزیکی جداگانه وجود دارد که می‌تواند نتایج عملیات صحیح را ذخیره کند و ۷۲ مکان نیز می‌تواند نتایج حاصل از عملیات ممیز شناور را ذخیره کند. (در واقع مکان‌های بیشتری وجود دارد، اما این مکان‌های اضافه وابسته به عملیات تغییر نام ثبات نیستند)

در ادامه مقاله دو سبک تغییر نام ثبات وجود دارد، که با مداری که داده‌ها را برای اجرا نگه می‌دارد، مشخص می‌شود.

در تمام شمای تغییر نام، ماشین، ثبات‌های معماری در جریان دستورالعمل را به برچسب‌هایی ارجاع می‌دهد؛ که در آن ثبات‌های معماری ممکن است ۳ تا ۵ بیت مشخص شوند، این برچسب‌ها معمولاً ۶ تا ۸ بیت عدد هستند. فایل تغییر نام یافته باید پورت خواندن برای هر ورودی از هر دستورالعمل تغییر نام یافته در هر چرخه را دارا باشد، و پورت نوشتن برای هر خروجی از هر دستورالعمل تغییر نام یافته در هر چرخه را مشخص می‌کند. به دلیل افزایش سایز یک فایل ثبات با مربع تعداد پورت، فایل تغییر نام یافته معمولاً از لحاظ فیزیکی بزرگ و توان مصرفی قابل توجهی نیز دارد.

در سبک *فایل ثبات اندیس‌گذاری با برچسب،* یک ثبات فایل بزرگ برای مقادیر داده‌ها وجود دارد که شامل یک ثبات برای هر برچسب می‌باشد. برای مثال اگر دستگاه دارای ۸۰ ثبات فیزیکی باشد، سپس از ۷ بیت برچسب استفاده می‌کند. ۴۸ مقدار ممکن در این حالت استفاده نشده باقی می‌ماند.

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

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

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

**معماری فایل ثبات یا بازنشستگی فایل ثبات (RRF)** 

حالت ثبات، متعهد به ماشین است. حافظه با دسترسی تصادفی با اعداد ثبات منطقی اندیس‌گذاری می‌شود. به‌طور معمول نتایج نوشته شده کناره‌گیری شده‌اند یا از مرتب کردن بافر متعهد است.**آینده فایل** بیشترین حالت پیش‌بینی از حالت ثبات مربوط به ماشین است. حافظه با دسترسی تصادفی نیز با اعداد ثبات منطقی برچسب‌گذاری شده‌است. **فایل ثبات فعال**  عبارت گروه اینتل P6 برای فایل آینده است. **تاریخچه بافر**به‌طور معمول در ترکیب با یک فایل آینده استفاده می‌شود. شامل «مقادیر قدیمی» از ثبات‌ها است که دوباره بازنویسی شده‌است. اگر تولیدکننده‌ای هنوز هم در حالت پرواز باشد ممکن است حافظه با دسترسی تصادفی، با تاریخچه اعداد بافر اندیس‌گذاری شوند. پس از یک پرش غیرقابل پیش‌بینی باید از نتایج موجود در تاریخچه بافر استفاده کند—یا از آن‌ها کپی شده یا مراجعات فایل آینده غیرفعال می‌شود و تاریخچه بافر CAM، اندیس‌گذاری با اعداد ثبات منطقی شده‌است. **دوباره مرتب کردن بافر(ROB)** یک ساختار متوالی (حلقوی) است که در هر پایه عملیات برای دستورالعمل‌های در پرواز اندیس‌گذاری شده‌است. از سابقه بافر متفاوت است زیرا مرتب کردن بافر به‌طور معمول پس از فایل آینده (در صورت وجود) و قبل از فایل ثبات معماری می‌آید.

دوباره مرتب کردن بافر می‌تواند منجر به داده‌های کمتر یا از دست رفتن اطلاعات می‌شود.

در مرتب کردن بافر Willamette، ورودی‌های مرتب کردن بافر به ثبات‌های موجود در فایل ثبات فیزیکی (PRF) اشاره می‌کند. این نیز اولین طراحی خارج از ترتیب توسط Andi Glew در Illinios با HaRRM محسوب می‌شود.

دوباره مرتب کردن P6، ورودی‌های بافر مرتب شده شامل داده هستند؛ هیچ فایل ثبات فیزیکی جداگانه‌ای وجود ندارد. مقادیر داده‌ها از راب کپی شده و به فایل ثبات فیزیکی منتقل می‌شود.

یکی از جزئیات کوچک: اگر محلیت زمانی در ورودی راب وجود داشته باشد (یعنی اگر دستورالعمل‌ها نزدیک به توالی دستورالعمل‌ها در ون نیومن باشد، می‌توان بازپس‌نویسی نزدیکی در زمان به کار برد، همچنین ممکن است با ترکیب نوشتن در ورودی‌های راب این کار را فراهم کرد و بنابراین پورت کمتری نسبت به ROB/PRF دارد). اگر تفاوتی داشته باشد واضح نیست، زیرا PRF باید مرتب شود.

معمولاً مرتب کردن بافرها منطق انجمنی ندارد، و قطعاً هیچ‌یک از راب‌ها توسط اندی Glew طراحی نشده‌است. Keith Diefendorff اصرار داشت که مرتب کردن بافر منطق انجمنی پیچیده دارد. اولین مرتب کردن بافر پیشنهاد شده ممکن است CAM داشته باشد.

جزئیات: فایل ثبات اندیس‌گذاری شده با برچسب
------------------------------------------

این سبک تغییر نام در MIPS R10000، آلفا ۲۱۲۶۴ و در قسمت FP از بخش AMD Athlon مورد استفاده قرار می‌گیرد.

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

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

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

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

جزئیات: ایستگاه‌های رزرواسیون
-----------------------------

این سبک مورد استفاده در بخش عدد صحیح از طراحی‌های AMD K7 و K8 است.

در مرحله تغییر نام، هر ثبات معماری برای خواندن هم به **فایل آینده** اندیس‌گذاری شده معماری و هم به فایل تغییر نام اشاره می‌کند. اگر هیچ دستورالعمل برجسته‌ای برای نوشتن وجود نداشته باشد (یعنی آماده است) خواندن فایل آینده مقادیر آن ثبات را برمی‌گرداند. زمانی که این دستورالعمل در صف قرار داده شده باشد، مقادیر خوانده شده از فایل آینده به ورودی‌های ایستگاه‌های رزرواسیون نوشته می‌شود. نوشتن ثبات در این دستورالعمل منجر به نوشته شدن برچسب جدید، غیر آماده به فایل تغییر نام می‌شود. عدد برچسب معمولاً به ترتیب دستورالعمل اختصاص یافته‌است که هیچ تگ خالی FIFO لازم نیست.

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

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

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

در مرحله نهایی مقدار از بافر مرتب شده به فایل ثبات معماری کپی می‌شود. تنها استفاده از فایل ثبات معماری بازیابی از استثنا و پرش غیرقابل پیش‌بینی است.

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

مقایسه بین طرح‌ها
-----------------

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

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

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

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

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

تاریخچه
-------

یک IBM System/360 مدل ۹۱ ماشین اولیه‌ای بود که از اجرای دستورالعمل‌های خارج از ترتیب پشتیبانی می‌شود، از الگوریتم Tomasulo برای تغییر نام ثبات استفاده می‌کند.

POWER1 اولین ریزپردازنده‌ای است که از تغییر نام ثبات و اجرای خارج از ترتیب در سال ۱۹۹۰ استفاده می‌کند.

طراحی اصلی R10000 مسئله صف یا رمزگذاری اولویت متغیر دچار سقوط می‌شود و مسئله گرسنگی به عنوان نتیجه به دست می‌آید- گاهی اوقات قدیمی‌ترین دستور در صف صادر نمی‌شود تا زمانی که رمزگشایی دستورالعمل به‌طور کامل برای کمبود تغییر نام ثبات‌ها متوقف شود و هر دستورالعمل دیگر قبلاً صادر شده باشد. نسخه‌های بعدی از این طرح با R12000 از رمزگذار متغیر با اولویت استفاده کرده‌است تا این مشکل را حل کند.

اوایل ماشین‌های خارج از ترتیب، تغییر نام و توابع ROB/PRF جداگانه نیستند. برای همین منظور، برخی از قدیمی‌ترین مانند Sohi را RUU یا Metaflow DCAF از زمان‌بندی ترکیب شده، تغییر نام و ذخیره‌سازی در همان ساختار استفاده می‌کنند.

بیشتر ماشین‌های امروزی تغییر نام را با اندیس‌گذاری RAM انجام می‌دهند که یک جدول نگاشت با اعداد ثبات منطقی می‌باشد. P6 و فایل‌های آینده این عملیات را انجام می‌دهند و داده‌ها در یک ساختار ذخیره می‌شوند.

اگرچه ماشین‌های ابتدایی از حافظه با محتوای آدرس دهی در تغییر نام دهنده استفاده می‌کند (یک نوع از سخت‌افزار است که قابلیت‌های یک آرایه انجمنی را فراهم می‌کند). درHPSM RAT یا جدول مستعار ثبات، از یک CAM در تعدادی ثبات منطقی در ترکیب با نسخه‌های متفاوت از ثبات استفاده می‌شود.

در بسیاری از راهکارها، داستان معماری میکرو خارج از ترتیب که چگونه CAMها حذف شده‌اند. CAMهای کوچک مفید هستند و CAMهای بزرگ غیر عملی هستند.

معماری میکرو P6 اولین معماری میکرو است که توسط اینتل با اجرای خارج از ترتیب و تغییر نام پیاده‌سازی شده‌است. معماری میکرو P6 در Pentium Pro, پنتیوم II, Pentium III, Pentium M Core و Core 2 استفاده شده‌است. در Cyrix M1 که در اکتبر ۲ سال ۱۹۹۵ منتشر شده برای اولین بار پردازنده x86 از تغییر نام ثبات و اجرای خارج از ترتیب استفاده می‌کند. دیگر پردازنده‌های x86 (مانند NexGen Nx686 و AMD K5) در سال ۱۹۹۶ منتشر شدند که از ویژگی‌های تغییر نام ثبات، اجرای خارج از ترتیب معماری ریسکμ-عملیات بهره می‌برد (به جای دستورالعمل‌های بومی x86).

منابع
-----

* 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.


| * ن
* ب
* و
فناوری‌های واحد پردازش مرکزی |
| --- |
| مدل‌های محاسبه | 
* ماشین تورینگ
	+ ماشین محاسبه تورینگ
	+ ماشین پست-تورینگ
	+ ماشین تورینگ کوانتومی
* Belt machine
* ماشین پشته‌ای
* ماشین حالات متناهی
	+ with datapath
	+ ماشین حالت یو.ام.ال
	+ ماشین صف
* Register machines
	+ Counter
	+ Pointer
	+ Random-access
	+ ماشین برنامه ذخیره‌شده با دسترسی تصادفی

 |
| معماری رایانه | 
* ریزمعماری
* معماری فون نویمان
* معماری هاروارد
	+ modified
* معماری جریان داده
* Transport-triggered
* Cellular
* اندیان
* ذخیره‌سازی داده رایانه
	+ حافظه دسترسی غیریکپارچه
	+ HUMA
	+ Load/store
	+ معماری حافظه ثبات
* Cache hierarchy
* سلسله‌مراتب حافظه
	+ حافظه مجازی
	+ ذخیره‌سازی داده رایانه
* Heterogeneous
* Fabric
* چندپردازشی
* رایانش شناختی
* نورومورفیک

 |
| مجموعه دستورالعملs | 

|  |  |
| --- | --- |
| Types | 
* رایانه با دستورهای پیچیده
* رایانه کم‌دستور
* Application-specific
* EDGE
	+ TRIPS
* کلمه دستورالعمل بسیار طولانی
	+ رایانش موازی صریح دستورالعمل‌ها
* MISC
* OISC
* NISC
* ZISC
* comparison
	+ حالت آدرس‌دهیs

 |

* اکس۸۶
* معماری آرم
* معماری میپس
* Power ISA
* اسپارک
* Itanium
* Unicore
* MicroBlaze
* RISC-V
* others
 |
| Execution | 

|  |  |
| --- | --- |
| خط لوله (رایانه) | 
* حباب (رایانه)
* Operand forwarding
* Classic RISC pipeline

 |
| مخاطره (معماری رایانه)s | 
* وابستگی داده
* مخاطره (معماری رایانه)
* مخاطره (معماری رایانه)
* False sharing

 |
| خروج از دستور در حال اجرا | 
* Tomasulo algorithm
	+ Reservation station
	+ Re-order buffer
* تغییر نام ثبات

 |
| Speculative | 
* پیش‌بینی‌کننده پرش
* Memory dependence prediction

 |

 |
| رایانش موازی | 

|  |  |
| --- | --- |
| Level | 
* موازی‌سازی بیتی
	+ Bit-serial
	+ کلمه (معماری رایانه)
* دستورالعمل
* خط لوله (رایانه)
	+ Scalar
	+ سوپراسکالر
* Task
	+ ریسه (رایانه)
	+ فرایند (رایانه)
* Data
	+ پردازنده برداری
* Memory
* رایانش توزیع‌شده

 |
| چندریسمانی | 
* چندرشته زمانی
* چندرشتگی همزمان
	+ فراریسمانی
* Speculative
* قبضه‌کردن (رایانش)
* چند وظیفه‌ای بدون قبضه‌ای

 |
| طبقه‌بندی فلین | 
* یک دستور یک داده
* یک دستور چند داده
	+ SWAR
* SIMT
* چند دستور یک داده
* چند دستور چند داده
	+ یک برنامه چند داده

 |

 |
| Processorperformance | 
* Transistor count
* Instructions per cycle (IPC)
	+ Cycles per instruction (CPI)
* Instructions per second (IPS)
* فلاپس (FLOPS)
* تراکنش بر ثانیه (TPS)
* Synaptic updates per second (SUPS)
* Performance per watt (PPW)
* Cache performance metrics
* Computer performance by orders of magnitude

 |
| Types | 
* واحد پردازش مرکزی (CPU)
* واحد پردازش گرافیکی (GPU)
	+ محاسبات همه‌منظوره بر روی واحد پردازش گرافیکی
* پردازنده برداری
* Barrel
* پردازش جریان
* Coprocessor
* مدارهای مجتمع با کاربرد خاص
* مدار مجتمع دیجیتال برنامه‌پذیر
* CPLD
* Multi-chip module (MCM)
* System in package (SiP)

|  |  |
| --- | --- |
| By application | 
* ریزپردازنده
* ریزکنترل‌گر
* Mobile
* Notebook
* Ultra-low-voltage
* ASIP

 |
| Systemson chip | 
* سامانه روی یک تراشه (SoC)
* Multiprocessor (MPSoC)
* Programmable (PSoC)
* شبکه درون یک تراشه (NoC)

 |
| شتاب‌دهنده سخت‌افزاری | 
* AI accelerator
* Vision processing unit (VPU)
* Physics processing unit (PPU)
* پردازشگر سیگنال دیجیتال (DSP)
* واحد پردازشی تنسور (TPU)
* Secure cryptoprocessor
* پردازنده‌های شبکه‌ای
* Baseband processor

 |

 |
| کلمه (معماری رایانه) | 
* معماری ۱-بیتی
* بیت برش
* ۴-بیت
* ۸ بیتی
* ۱۶ بیتی
* ۳۲-بیت
* 48-bit
* 64-bit
* ۱۲۸-بیت
* 256-bit
* 512-bit
* کلمه (معماری رایانه)
	+ کلمه (معماری رایانه)

 |
| Core count | 
* Single-core
* پردازنده چندهسته‌ای
* Manycore
* Heterogeneous architecture

 |
| اجزاء | 
* واحد پردازش مرکزی
* حافظه نهان (رایانش)
	+ حافظه نهان سی‌پی‌یو
	+ الگوریتم حافظه پنهان
	+ انسجام حافظه نهان
* گذرگاه (رایانه)
* سرعت ریزپردازنده
* سیگنال ساعت
* خروج به ترتیب ورود (رایانه و الکترونیک)

|  |  |
| --- | --- |
| Functional units | 
* واحد محاسبه و منطق (ALU)
* Address generation unit (AGU)
* واحد ممیز شناور (FPU)
* واحد مدیریت حافظه (MMU)
	+ Load–store unit
	+ تی‌ال‌بی (TLB)
* کنترلگر حافظه (IMC)

 |
| دروازه منطقی | 
* مدار ترکیبی
* مدارهای ترتیبی
* Glue
* دروازه منطقی
	+ دروازه‌های منطقی کوانتومی
	+ دروازه آرایه

 |
| ثبت سخت‌افزاریs | 
* ثبات
* ثبات وضعیت
* ثبات پشته‌ای
* Register file
* Memory buffer
* شمارنده برنامه

 |
| Control unit | 
* Instruction unit
* حافظه میانگیر
* Write buffer
* ریزبرنامه‌سازی تصویر رام
* شمارنده

 |
| دیتاپد | 
* تسهیم‌کننده
* تسهیم‌کننده
* جمع‌کننده
* ضرب‌کننده دودویی
	+ پردازنده چندبرابر
* رمزگشا
	+ Address decoder
	+ Sum addressed decoder
* شیفت دهنده بشکه‌ای

 |
| مدار الکترونیکی | 
* مدار مجتمع
	+ 3D
	+ Mixed-signal
	+ Power management
* مدار بولی
* الکترونیک دیجیتال
* الکترونیک آنالوگ
* Quantum
* کلید (مدار)

 |

 |
| مدیریت نیرو | 
* PMU
* APM
* رابط قدرت و تنظیمات پیشرفته
* درجه‌بندی پویای بسامد
* Dynamic voltage scaling
* Clock gating
* Performance per watt (PPW)
* Race to sleep

 |
| مرتبط | 
* History of general-purpose CPUs
* Microprocessor chronology
* طراحی پردازنده
* الکترونیک دیجیتال
* ماژول امنیتی سخت‌افزاری
* Semiconductor device fabrication
* Tick–tock model

 |