تغییر نام ثبات

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

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

برنامه‌های ماشین زبان، خواندن و نوشتن را به مجموعه‌ای محدود از ثبات‌ها به نام مجموعه دستورالعمل معماری (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).