فایل ثبات
ریزمعماری

اکثر فایل های ثبات هیچ گونه تمهید خاصی برای جلوگیری از نوشتن همزمان چندین پورت نوشتن یک ورودی ندارند. در عوض، سخت‌افزار زمان‌بندی دستورالعمل تضمین می‌کند که فقط یک دستورالعمل در هر چرخه خاص، یک ورودی خاص را می‌نویسد. اگر چندین دستورالعمل با هدف قرار دادن یک ثبات صادر شود، همه به جز یکی، قابلیت نوشتن آنها خاموش می شود.
تبدیل کننده های متقاطع پس از یک عملیات نوشتن مدت زمان محدودی برای ته‌نشین شدن نیاز دارند، که طی آن عملیات خواندن یا بیشتر طول می‌کشد یا زباله‌ها را برمی‌گرداند. معمولاً مالتی پلکسرهای بای پس(میانبر) وجود دارد که داده‌های نوشته شده را به درگاه‌های خواندن دور می‌زنند، زمانی که خواندن و نوشتن همزمان در یک ورودی یکسان دستور داده می‌شود. این مالتی پلکسرهای میانبر اغلب بخشی از یک شبکه بای پس بزرگتر هستند که نتایجی را که هنوز بین واحدهای عملکردی متعهد نشده‌اند، ارسال می‌کند.
فایل ثبات معمولاً با مسیر داده‌ای که ارائه می‌کند تطابق دارد. تطبیق پیچ از عبور اتوبوس‌های زیادی از گوشه‌های پیچ مسیر داده جلوگیری می‌کند، که باعث استفاده از مساحت زیادی می‌شود. اما از آنجایی که هر واحد باید یک گام بیتی داشته باشد، هر واحد در مسیر داده به گام بیتی که توسط گسترده‌ترین واحد مجبور می‌شود، ختم می‌شود، که می‌تواند باعث هدر رفتن ناحیه در واحدهای دیگر شود. ثبت فایل‌ها، به دلیل اینکه دو سیم در هر بیت در هر پورت نوشتن دارند، و به دلیل اینکه تمام خطوط بیت باید در هر سلول بیت با سیلیکون تماس داشته باشند، اغلب می‌توانند گام یک مسیر داده را تنظیم کنند.
گاهی اوقات می‌توان ناحیه‌ای را در ماشین‌هایی با واحدهای متعدد در یک مسیر داده، با داشتن دو مسیر داده در کنار هم ذخیره کرد، که هرکدام از مسیرهای داده کوچک‌تری نسبت به یک مسیر داده واحد دارند. این مورد معمولاً چندین کپی از یک فایل ثبات را مجبور می‌کند، یکی برای هر مسیر داده.
به عنوان مثال، آلفا 21264 (EV6)، اولین ریزمعماری بزرگی بود که «معماری فایل ثبت سایه» را پیاده‌سازی کرد. دارای دو کپی از فایل ثبت عدد صحیح و دو کپی از ثبات ممیز شناور است که در انتهای جلوی آن قرار می‌گیرد (فایل آینده و مقیاس شده، هر کدام شامل ۲ پورت خواندن و ۲ درگاه نوشتن هستند) و یک چرخه اضافی برای انتشار داده‌ها بین این دو در طول تعویض متن انجام شد. منطق موضوع تلاش کرد تا تعداد عملیات ارسال اطلاعات بین این دو را کاهش دهد و عملکرد اعداد صحیح آن را تا حد زیادی بهبود بخشد و به کاهش تأثیر تعداد محدود GPR در اجرای فوق‌اسکالار و حدس‌آمیز کمک کند. این طرح بعداً توسط SPARC , MIPS و برخی از پیاده‌سازی‌های بعدی x86 اقتباس شد.
MIPS از چندین فایل ثبت نیز استفاده می‌کند. واحد ممیز شناور R8000 دارای دو نسخه از فایل ثبت ممیز شناور بود که هر کدام دارای چهار پورت نوشتن و چهار درگاه خواندن بود و هر دو کپی را همزمان با تغییر متن نوشت. با این حال از عملیات اعداد صحیح پشتیبانی نمی‌کند و فایل ثبت عدد صحیح همچنان به عنوان یک باقی می‌ماند. بعداً، فایل‌های ثبت سایه در طرح‌های جدیدتر به نفع بازار، کنار گذاشته شدند.
SPARC از "معماری فایل ثبت سایه" نیز برای خط پایانی خود استفاده می‌کند. حداکثر ۴ کپی از فایل‌های ثبت اعداد صحیح (آینده، بازنشسته، مقیاس شده، خراشیده شده، هر کدام شامل ۷ پورت خواندن ۴ نوشتن) و ۲ کپی از فایل ثبت ممیز شناور بود. با این حال، برخلاف آلفا و x86، درست پس از واحد از کار افتاده در پیشانه به عنوان واحد بازنشسته و پس از تغییر نام فایل‌های ثبات قرار می‌گیرند و دستورالعمل در حین واکشی دستورالعمل و مرحله رمزگشایی لود نمی شوند و تغییر زمینه در این طراحی بی‌نیاز است.
IBM از مکانیزم مشابه بسیاری از ریزپردازنده‌های اصلی استفاده می‌کند، فایل ثبات را به صورت عمقی با رمزگشا ادغام می‌کند، اما فایل ثبات آن به‌طور مستقل توسط رسیور کار می‌کند و شامل تغییر زمینه نیست، که با آلفا و x86 متفاوت است. اکثر فایل‌های ثبات آن نه تنها برای رمزگشای اختصاصی آن بلکه تا سطح رشته خدمت می‌کنند. به عنوان مثال، POWER8 دارای حداکثر ۸ رمزگشای دستورالعمل است، اما حداکثر تا ۳۲ فایل ثبت با ۳۲ ثبات همه منظوره (۴ پورت خواندن و ۴ پورت نوشتن)، برای تسهیل چند ریسمانی همزمان، که دستورالعمل آن را نمی‌توان در میان هیچ فایل ثبت دیگری استفاده کرد (فقدان تغییر زمینه).
در خط پردازنده x86، یک CPU معمولی قبل از ۴۸۶ یک فایل ثبت مجزا نداشت، زیرا همه ثبات های هدف عمومی مستقیماً با رمزگشای آن کار می‌کردند و پشته فشار x87 در خود واحد ممیز شناور قرار داشت. با شروع پنتیوم، یک پردازنده x86 معمولی سازگار با پنتیوم با یک کپی از فایل ثبت معماری تک پورت شامل ۸ ثبات معماری، ۸ ثبات کنترل، ۸ ثبات اشکال زدایی، ۸ ثبات کد شرط، ۸ ثبات مبتنی بر بی‌نام، یک اشاره گر دستورالعمل، یک ثبت پرچم و ۶ ثبت بخش در یک فایل ادغام می شود.
یک کپی از پشته 8 x87 FP به‌طور پیش‌فرض، ثبات MMX به صورت مجازی از پشته x87 شبیه‌سازی شده‌است و برای ارائه دستورات MMX و نام‌های مستعار برای وجود پشته نیاز به ثبت x86 دارد. در P6، دستورالعمل را می‌توان به‌طور مستقل ذخیره و به صورت موازی در مراحل اولیه خط لوله قبل از رمزگشایی به عملیات میکرو و تغییر نام در اجرای خارج از نظم، ذخیره و اجرا کرد. با شروع P6، همه فایل‌های ثبت نیازی به چرخه اضافی برای انتشار داده‌ها ندارند، فایل‌های ثبت مانند معماری و نقطه شناور بین بافر کد و رمزگشاها قرار دارند که به آنها «بافر بازنشستگی»، بافر ترتیب مجدد و OoOE می‌گویند و در داخل گذرگاه حلقه متصل می‌شوند (۱۶بایت). خود فایل ثبت همچنان یک فایل ثبت x86 و یک پشته x87 باقی می‌ماند و هر دو به عنوان ذخیره بازنشستگی عمل می‌کنند. فایل ثبت x86 آن برای افزایش پهنای باند برای ذخیره‌سازی نتیجه به دو پورت افزایش یافت. ثبات هایی مانند اشکال‌زدایی/کد شرط/کنترل/بدون نام/پرچم از فایل ثبت اصلی حذف شده و در فایل‌های جداگانه بین رام micro-op و ترتیب‌دهنده دستورالعمل قرار می‌گیرند. اکنون فقط ثبات های غیرقابل دسترسی مانند ثبات قطعه از فایل ثبت همه منظوره جدا می‌شوند (به جز اشاره گر دستورالعمل). آنها اکنون بین زمانبندی و تخصیص دهنده دستورالعمل قرار دارند تا تغییر نام ثبات و اجرای خارج از دستور را تسهیل کنند. پشته x87 بعد از اینکه یک ثبات XMM 128 بیتی در Pentium III شروع به کار کرد با فایل ثبت ممیز شناور ادغام شد، اما فایل ثبات XMM هنوز جدا از فایل‌های ثبت عدد صحیح x86 قرار دارد.
پیاده‌سازی‌های بعدی P6 (Pentium M, Yonah) «معماری فایل ثبت سایه» را معرفی کردند که به ۲ نسخه از فایل ثبت معماری اعداد صحیح انتقال داده شده دوگانه گسترش یافت و شامل تغییر زمینه (بین فایل آینده و بازنشسته و فایل مقیاس‌شده با استفاده از همان ترفندی بود که بین عدد صحیح و نقطه شناور استفاده می‌شود.). این به منظور حل گلوگاه ثبتی بود که در معماری x86 پس از معرفی همجوشی ریزعمل ها وجود دارد، اما هنوز ۸ ورودی دارد و ثبات های معماری 32 بیتی برای مجموع ۳۲ بایت ظرفیت حافظه در هر فایل (ثبت قطعه و نشانگر دستورالعمل در فایل باقی می‌مانند، اگرچه توسط برنامه غیرقابل دسترسی هستند) به عنوان فایل گمانه زنی. فایل دوم به عنوان یک فایل ثبت سایه مقیاس شده ارائه می‌شود، که بدون تغییر زمینه، فایل مقیاس شده نمی‌تواند برخی از دستورالعمل‌ها را به‌طور مستقل ذخیره کند. برخی از دستورالعمل‌های SSE2/SSE3/SSSE3 به این ویژگی برای عملیات اعداد صحیح نیاز دارند، به عنوان مثال دستورالعمل‌هایی مانند PSHUFB, PMADDUBSW, PHSUBW, PHSUBD, PHSUBSW, PHADDW, PHADDD, PHADDSW نیاز به بارگیری EAX/EBX/ECX/EDX از هر دو فایل ثبتی دارند، اگرچه برای پردازنده x86 غیر معمول بود که از فایل ثبت دیگری با همان دستورالعمل استفاده کند. بیشتر اوقات فایل دوم به عنوان فایل بازنشسته مقیاس ارائه می‌شود. معماری Pentium M همچنان یک فایل ثبت FP با پورت دوگانه (۸ ورودی MM/XMM) به اشتراک گذاشته شده با سه رمزگشا است و ثبات FP فایل ثبت سایه همراه خود ندارد زیرا معماری فایل ثبت سایه آن تابع ممیز شناور را شامل نمی‌شود. پردازشگر بعد از P6، فایل ثبت معماری خارجی هستند و پس از بازنشستگی در داخل پردازنده قرار می‌گیرند، برخلاف فایل ثبات داخلی که در هسته داخلی برای بافر تغییر نام / ترتیب مجدد ثبات قرار دارند. با این حال، در Core 2 اکنون در واحدی به نام «جدول نام مستعار ثبت» RAT قرار دارد که با تخصیص دهنده دستورالعمل‌ها قرار دارد، اما اندازه ثبات اندازه بازنشستگی را دارد. Core 2 گذرگاه حلقه داخلی را به ۲۴ بایت افزایش داد  (اجازه می‌دهد بیش از ۳ دستورالعمل رمزگشایی شوند) و فایل ثبت آن را از پورت دوگانه (یک خواندن/یک نوشتن) به چهار پورت (دو خواندن/دو نوشتن) گسترش داد، ثبت هنوز ۸ ورودی در ۳۲ مورد باقی می‌ماند. بیت و ۳۲ بایت (بدون شامل ۶ بخش ثبت و یک اشاره گر دستورالعمل زیرا امکان دسترسی به فایل با هیچ کد/دستورالی وجود ندارد) در کل اندازه فایل و به ۱۶ ورودی در x64 برای کل ۱۲۸ افزایش یافته‌است. اندازه بایت در هر فایل از Pentium M با افزایش پورت خط لوله و رمزگشای آن، اما آنها به جای بافر کد با جدول اختصاص دهنده قرار دارند. فایل ثبت FP XMM آن نیز به چهار پورت (۲ خواندن/۲ نوشتن) افزایش می‌یابد، ثبت هنوز ۸ ورودی در ۳۲ مورد باقی می‌ماند. بیت و به ۱۶ ورودی در حالت x64 گسترش یافته و تعداد همچنان ۱ باقی می‌ماند زیرا معماری فایل ثبت سایه آن شامل توابع ممیز شناور/SSE نمی‌شود.
در پیاده‌سازی‌های بعدی x86، مانند Nehalem و پردازنده‌های بعدی، هر دو ثبات اعداد صحیح و ممیز شناور در یک فایل ثبت همه‌منظوره هشت پورت (شش خواندن و دو نوشتن) یکپارچه (۸ + ۸ در ۳۲ بیت و ۱۶ + ۱۶) گنجانده شده‌اند.)، در حالی که فایل ثبت با بهبود یافته "معماری فایل ثبت سایه" در مورد اجرای فرا ریسمانی به ۲ افزایش یافت و هر رشته از فایل‌های ثبت مستقل برای رمزگشای خود استفاده می‌کند. بعداً سندی بریج و به بعد جایگزین جدول ثبت سایه و ثبات های معماری با فایل ثبت فیزیکی بسیار بزرگتر و در عین حال پیشرفته‌تر قبل از رمزگشایی در بافر مرتب‌سازی مجدد شد. رندری که پل شنی و به بعد دیگر ثبت معماری ندارد.
در خط اتم تجدید نظر ساده شده مدرن P5 بود. این شامل کپی‌های تکی از اشتراک فایل ثبات با نخ و رمزگشا می‌باشد. فایل ثبت یک طراحی دو پورت است، ورودی‌های 8/16 GPRS، ثبات اشکال زدایی ۸/۱۶ ورودی و کد شرایط ورودی ۸/۱۶ در همان فایل ادغام شده‌اند. با این حال دارای هشت ورودی ۶۴ است ثبات مبتنی بر سایه بیت و هشت ورودی ۶۴ ثبات بیتی بدون نام که اکنون بر خلاف طرح اصلی P5 از GPRهای اصلی جدا شده و بعد از واحد اجرا قرار دارد و فایل این ثبات‌ها تک پورت شده‌است و در معرض دستورالعمل‌هایی مانند فایل ثبات سایه مقیاس شده موجود در Core/Core2 (ثبت سایه) قرار نمی‌گیرد. فایل از ثبات های معماری ساخته شده‌است و Bonnell به دلیل نداشتن آن، "معماری فایل ثبت سایه" را ندارد، اما  به دلیل اجرای نامناسب موجود در معماری Bonnell، می‌توان از فایل برای تغییر نام استفاده کرد. همچنین یک کپی از فایل ثبت ممیز شناور XMM در هر رشته داشت. تفاوت Bonnell با Nehalem در این است که Bonnell یک فایل ثبت یکپارچه ندارد و هیچ فایل ثبت اختصاصی برای فرا ریسمانی خود ندارد. در عوض، Bonnell از یک ثبات تغییر نام جداگانه برای رشته خود استفاده می‌کند، علاوه بر اینکه از کار افتاده‌است. مشابه Bonnell, Larrabee و Xeon Phi نیز هرکدام فقط یک فایل ثبت عدد صحیح همه منظوره دارند، اما Larrabee تا ۱۶ فایل ثبت XMM (8 ورودی در هر فایل) و Xeon Phi تا ۱۲۸ فایل ثبت AVX-512 دارد. هر کدام شامل ۳۲ ثبات ZMM 512 بیتی برای ذخیره‌سازی دستورالعمل‌های برداری است که می‌تواند به اندازه کش L2 باشد.
برخی دیگر از خطوط x86 اینتل وجود دارند که فایل ثبت در طراحی داخلی خود ندارند، Geode GX و Vortex86 و بسیاری از پردازنده‌های تعبیه شده که با پنتیوم سازگار نیستند یا پردازنده‌های اولیه 80x86 با مهندسی معکوس طراحی نشده‌اند؛ بنابراین، اکثر آنها یک فایل ثبت برای رمزگشای خود ندارند، اما GPR آنها به صورت جداگانه استفاده می‌شود. از سوی دیگر، پنتیوم 4 فایل ثبتی برای رمزگشای خود ندارد، زیرا GPRهای x86 آن در ساختار آن وجود نداشت، به دلیل معرفی یک فایل تغییر نام یکپارچه فیزیکی (شبیه به سندی بریج، اما کمی متفاوت است. به دلیل عدم توانایی پنتیوم ۴ در استفاده از ثبات قبل از نامگذاری) برای تلاش برای جایگزینی فایل ثبت معماری و رد شدن از طرح رمزگشایی x86. در عوض از SSE برای اجرای اعداد صحیح و ذخیره‌سازی قبل از ALU استفاده می‌کند و پس از نتیجه، SSE2/SSE3/SSSE3 از همان مکانیزم و همچنین برای عملیات عدد صحیح خود استفاده می‌کند.
طراحی های اولیه AMD مانند K6، مثل اینتل فایل ثبتی ندارند و از "معماری فایل ثبت سایه" پشتیبانی نمی‌کنند زیرا فاقد تغییر زمینه و تبدیل کننده میان بر است که برای عملکرد مناسب یک فایل ثبات لازم است. در عوض آنها از یک GPR جداگانه استفاده می‌کنند که مستقیماً به یک جدول ثبت تغییر نام برای OoOE واحد پردازش مرکزی خود با رمزگشای عدد صحیح اختصاصی و رمزگشای شناور پیوند می‌دهد. این مکانیزم شبیه به خط پردازنده‌های Pre-Pentium اینتل است. به عنوان مثال، پردازنده K6 دارای چهار عدد صحیح(یک فایل ثبت نام موقت خش دار با هشت ورودی + یک فایل ثبت آتی با هشت ورودی + یک فایل ثبت واکشی شده با هشت ورودی + یک فایل ثبت بدون نام با هشت ورودی) و دو فایل ثبت تغییر نام FP (دو فایل هشت ورودی x87 ST یکی به fadd و یکی fmov می‌رود) است که مستقیماً با x86 EAX برای تغییر نام عدد صحیح و ثبات XMM0 برای تغییر نام ممیز شناور پیوند می‌خورد، اما بعداً Athlon «ثبت‌سایه سایه» را در قسمت جلویی خود قرار داد و تا مقیاس آن افزایش یافت. ۴۰ ورودی فایل ثبت یکپارچه برای عملیات اعداد صحیح قبل از رمزگشایی، فایل ثبت شامل ۸ ورودی ثبت خراش + ۱۶ فایل ثبت GPR آینده + ۱۶ فایل ثبت نام GPRs بدون نام است. در طرح‌های بعدی AMD، طراحی ثبت سایه را رها کرد و به معماری K6 با طراحی لینک مستقیم GPR منفرد ترجیح داد. مانند فنوم، دارای سه فایل ثبت عدد صحیح و دو فایل ثبت SSE است که در فایل ثبت فیزیکی قرار دارند که مستقیماً با GPR مرتبط هستند. با این حال، مقیاس به یک عدد صحیح + یک ممیز شناور در بولدوزر کاهش می یابد. مانند طرح‌های اولیه AMD، اکثر سازندگان x86 مانند Cyrix, VIA, DM&P و SIS نیز از همین مکانیزم استفاده می‌کردند که منجر به عدم عملکرد عدد صحیح بدون تغییر نام ثبات برای واحد پردازش مرکزی مرتب‌شان می‌شد. شرکت‌هایی مانند Cyrix و AMD مجبور شدند اندازه کش را افزایش دهند تا بتوانند گلوگاه را کاهش دهند. عملیات اعداد صحیح SSE AMD به روشی متفاوت از Core 2 و پنتیوم 4 کار می‌کند. از ثبات عدد صحیح تغییر نام جداگانه خود برای بارگذاری مقدار مستقیماً قبل از مرحله رمزگشایی استفاده می‌کند. اگرچه از نظر تئوری فقط نیاز به خط لوله کوتاه‌تری نسبت به اجرای SSE اینتل خواهد داشت، اما به‌طور کلی هزینه پیش‌بینی شعبه بسیار بیشتر از اینتل است و نرخ گمشده آن بالاتر است و باید حداقل دو چرخه طول بکشد تا دستورالعمل SSE بدون توجه به اینکه از آنجایی که پیاده‌سازی‌های اولیه AMD نمی‌توانستند FP و Int را در مجموعه دستورالعمل‌های SSE مانند پیاده‌سازی اینتل اجرا کنند.
برخلاف Alpha، Sparc و MIPS که فقط به یک فایل ثبت اجازه می‌دهد تا یک عملوند را در آن زمان بارگذاری/واکشی کند. برای دستیابی به مقیاس فوق‌العاده به چندین فایل ثبت نیاز دارد. از سوی دیگر پردازنده ARM چندین فایل ثبت را برای بارگذاری/واکشی دستورالعمل‌ها یکپارچه نمی‌کند. ARM GPR هیچ هدف خاصی برای مجموعه دستورالعمل ندارد (ARM ISA نیازی به انباشته کننده، شاخص و نقاط پشته/پایه ندارد. ثبات های انباشته کننده ندارند و نقطه پایه/پشته فقط در حالت شست قابل استفاده است). هر GPR می‌تواند چندین دستورالعمل را به‌طور مستقل در اندازه کد کوچکتر منتشر و ذخیره کند که به اندازه کافی کوچک است که بتواند در یک ثبات قرار گیرد و ثبت معماری آن به عنوان یک جدول عمل می‌کند و با جابجایی ساده بانکی بین رمزگشاها با همه رمزگشاها/دستورالعمل‌ها به اشتراک گذاشته می‌شود. تفاوت عمده بین ARM و طرح‌های دیگر این است که ARM اجازه می‌دهد روی یک ثبات همه‌منظوره با تعویض سریع بانک بدون نیاز به فایل ثبت اضافی در سوپراسکالر اجرا شود. با وجود اینکه x86 مکانیزم یکسانی را با ARM به اشتراک می‌گذارد که GPRهای آن می‌توانند هر داده‌ای را به صورت جداگانه ذخیره کنند، x86 اگر بیش از سه دستورالعمل غیرمرتبط ذخیره شود، با وابستگی به داده‌ها مقابله می‌کند، زیرا GPRهای آن در هر فایل بسیار کوچک هستند (هشت در ۳۲ بیت و شانزده در ۶۴ بیت، در مقایسه با ARM 13 در ۳۲ بیت و سی و یک در ۶۴ بیت) برای داده‌ها، و غیرممکن است که بدون فایل‌های ثبات متعدد، سوپراسکالر داشته باشیم تا به رمزگشای آن وارد شوند (کد x86 در مقایسه با ARM بزرگ و پیچیده‌است). زیرا بسیاری از قسمت‌های جلویی x86 برای رقابتی بودن، بسیار بزرگ‌تر و انرژی‌زاتر از پردازنده ARM شده‌اند (مثال: Pentium M & Core 2 Duo, Bay Trail). برخی از پردازنده‌های مشابه x86 شخص ثالث به دلیل نداشتن معماری فایل ثبات اختصاصی حتی با ARM غیررقابتی شدند. مخصوصاً برای AMD, Cyrix و VIA که بدون تغییر نام ثبات و اجرای خارج از نظم نمی‌توانند عملکرد معقولی را به ارمغان بیاورند، که تنها هسته پردازنده x86 اینتل را در رقابت موبایل باقی می‌گذارد. این تا زمانی بود که پردازنده x86 Nehalem هر دو ثبات عدد صحیح و ممیز شناور خود را در یک فایل واحد ادغام کرد و یک جدول ثبت فیزیکی بزرگ و جدول تخصیص دهنده پیشرفته را در قسمت جلویی خود قبل از تغییر نام در هسته داخلی خارج از نظم خود معرفی کرد. .