فایل ثبات
یک فایل ثبات آرایهای از ثبات های پردازنده در یک واحد پردازش مرکزی (CPU) است. ثبت بانکی روش استفاده از یک نام واحد برای دسترسی به چندین ثبات فیزیکی مختلف، بسته به حالت عملیاتی است. فایلهای ثبات بر پایه ی مدار مجتمع مدرن اصولاً از طریق حافظه های دسترسی تصادفی ایستا سریع با پورتهای متعدد پیادهسازی میشوند. چنین حافظه های دسترسی تصادفی، با داشتن پورتهای خواندن و نوشتن اختصاصی متمایز میشوند، در حالی که حافظه های دسترسی تصادفی ایستا عادی چند پورت، معمولاً از طریق همان پورتها، خواندن و نوشتن را انجام میدهند.
معماری مجموعه دستورالعمل یک CPU اکثرا مجموعه ای از ثباتها را تعریف میکند که برای مرحله بندی دادهها بین حافظه و واحدهای عملکردی روی تراشه مورد استفاده قرار میگیرد. در CPUهای سادهتر، این ثباتهای معماری یک به یک با ورودیهای یک فایل ثبت فیزیکی (PRF) در CPU تطابق دارند. CPUهای پیچیدهتر از تغییر نام ثبات استفاده میکنند، به گونه ای که نگاشت ورودی فیزیکی که یک ثبات معماری خاص را ثبت میکند و به صورت پویا در طول اجرا تغییر میکند. فایل ثبت بخشی از معماری مجموعه ی دستورالعمل است و برای برنامهنویس قابل مشاهده است، که مخالف مفهوم کش شفاف است.
ثبت تغییرات بانک
[ویرایش]ممکن است فایلهای ثبت، بهعنوان بانکهای ثبت در کنار هم قرار بگیرند.[۱] امکان دارد یک پردازنده بیش از یک بانک ثبت داشته باشد.
پردازندههای ARM دارای ثبات های بانکی و غیربانکی هستند. در حالی که همه حالتها همیشه ثبات های فیزیکی یکسانی را برای ۸ ثبات همه منظوره اول، R0 تا R7 به اشتراک میگذارند، ثبات فیزیکی که ثبتکننده بانکی، R8 تا R14 به آن اشاره میکند، بستگی به حالت عملکردی دارد که پردازنده در آن قرار دارد.[۲] قابل ذکر است، حالت درخواست وقفه سریع (FIQ) دارای بانک ثبات های مخصوص به خود برای R8 تا R12 است، با این معماری همچنین یک اشاره گر پشته خصوصی (R13) برای هر حالت وقفه ارائه میدهد.
پردازندههای x86 از تغییرات متنی و وقفه سریع برای جابهجایی بین دستورالعملها، رمزگشاها، GPRها و فایلهای ثبات استفاده میکنند، در صورتی که بیش از یک فایل وجود داشته باشد، قبل از صدور دستورالعمل، اما این فقط در پردازندههایی وجود دارد که از superscalar پشتیبانی میکنند. با این حال، تغییر زمینه مکانیزمی کاملاً متفاوت با بانک ثبت ARM در رجیسترها است.
MODCOMP و پردازنده های بعدی سازگار با ۸۰۵۱ از بیتها در کلمه وضعیت برنامه برای انتخاب بانک ثبت فعال فعلی استفاده میکنند.
پیادهسازی
[ویرایش]قرارداد معمول چیدمان این است که یک آرایه ساده به صورت عمودی خوانده میشود؛ یعنی یک خط کلمه که به صورت افقی اجرا میشود باعث میشود یک ردیف از سلولهای بیت دادههای خود را روی خطوط بیت قرار دهند که به صورت عمودی اجرا میشوند. آمپرهای حسی، که بیتلاینهای خواندنی با نوسان کم را به سطوح منطقی تمام نوسان تبدیل میکنند، معمولاً (بر اساس قرارداد) در پایین هستند. گاهی اوقات فایلهای ثبت بزرگتر، با کاشی کاری آرایههای ساده آینه شده و چرخانده ساخته میشوند.
فایلهای ثبت دارای یک خط کلمه در هر ورودی در هر پورت، یک خط بیت در هر بیت عرض در هر پورت خواندن و دو خط بیت در هر بیت عرض در هر پورت نوشتن هستند. هر سلول بیت نیز یک Vdd و Vss دارد؛ بنابراین، مساحت زمین سیم با مجذور تعداد پورتها افزایش مییابد و مساحت ترانزیستور به صورت خطی افزایش مییابد.[۳] در برخی مواقع، ممکن است به جای یک فایل ثبات منفرد با همه پورتهای خوانده شده، داشتن چندین فایل ثبات اضافی، با تعداد پورتهای خواندن کمتر، کوچکتر و/یا سریعتر باشد. برای مثال، واحد عدد صحیح MIPS R8000 دارای یک فایل رجیستر ۶۴ بیتی ورودی ۳۲ درگاه ۹ خواندنی ۴ نوشتنی بود که در ۰٫۷ پیادهسازی شده بود. فرایند میکرومتر، که با نگاه کردن به تراشه از طول بازو قابل مشاهده است.
دو روش رایج برای تقسیم ثبات ها به چندین فایل ثبات، پیکربندی فایل ثبات توزیع شده و پیکربندی فایل ثبات تقسیم بندی شدهاست.[۴]در اصل، هر عملیاتی که میتوان با یک فایل ثبات ۶۴ بیتی با پورتهای خواندن و نوشتن بسیاری انجام داد، میتوان با یک فایل ثبتی با پهنای ۸ بیت با یک پورت خواندن و یک پورت نوشتن انجام داد. با این حال، موازی بودن سطح بیت فایلهای ثبت گسترده با پورتهای زیاد به آنها اجازه میدهد تا بسیار سریعتر اجرا شوند و بنابراین، میتوانند عملیاتهایی را در یک چرخه واحد انجام دهند که چرخههای زیادی را با پورتهای کمتر یا عرض بیت باریکتر یا هر دو انجام میدهد.
عرض بر حسب بیت فایل ثبات معمولاً تعداد بیتهای اندازه کلمه پردازنده است. گاهی اوقات کمی پهنتر میشود تا بیتهای «اضافی» را به هر ثبات متصل کند، مانند بیت سم. اگر عرض کلمه داده با عرض یک آدرس متفاوت باشد - یا در برخی موارد، مانند ۶۸۰۰۰، حتی زمانی که عرض آنها یکسان باشد - ثبات های آدرس در یک فایل ثبات جداگانه نسبت به ثباتهای داده قرار دارند.
رمزگشا
[ویرایش]- رمزگشا اغلب به پیش رمزگشا و رمزگشای مناسب تقسیم میشود.
- رمزگشا مجموعه ای از گیتهای AND است که خطوط کلمه را هدایت میکند.
- در هر پورت خواندن یا نوشتن یک رمزگشا وجود دارد؛ مثلاً اگر آرایه دارای چهار پورت خواندن و دو درگاه نوشتن باشد، در هر سلول بیتی در آرایه ۶ خط کلمه و در رمزگشا در هر ردیف شش گیت AND دارد. توجه داشته باشید که رمزگشا باید با آرایه مطابقت داشته باشد، که باعث میشود گیتهای AND عریض و کوتاه باشند.
آرایه
[ویرایش]طرح اصلی برای یک سلول بیت:
- حالت در جفت اینورتر ذخیره میشود.
- دادهها توسط ترانزیستور nmos به یک خط بیت خوانده میشود.
- دادهها با کوتاه کردن یک طرف یا طرف دیگر به زمین از طریق پشته دو nmos نوشته میشوند.
- بنابراین: پورتهای خواندن به ازای هر سلول بیت یک ترانزیستور میگیرند، و پورتهای نوشتن چهار عدد.
بهینهسازیهای زیادی امکانپذیر است:
- به اشتراک گذاری خطوط بین سلولها، به عنوان مثال، Vdd و Vss.
- خطوط بیت خواندن اغلب به چیزی بین Vdd و Vss شارژ میشوند.
- خطوط بیت خواندن اغلب فقط در کسری از راه به Vdd یا Vss میچرخند. یک تقویت کننده حس این سیگنال نوسان کوچک را به یک سطح منطقی کامل تبدیل میکند. سیگنالهای نوسانی کوچک سریعتر هستند زیرا خط بیت درایو کمی دارد اما ظرفیت انگلی زیادی دارد.
- خطوط بیت نوشتن ممکن است بافته شده باشند، به طوری که بهطور مساوی با خطوط بیت خوانده شده نزدیک شوند. از آنجایی که خط بیتهای نوشتن در نوسان کامل هستند، میتوانند اختلالات قابل توجهی در خط بیتهای خواندن ایجاد کنند.
- اگر Vdd یک خط افقی باشد، اگر هر یک از پورتهای نوشتن آن خط را در طول آن چرخه بنویسد، میتوان آن را با رمزگشای دیگری خاموش کرد. این بهینهسازی سرعت نوشتن را افزایش میدهد.
- تکنیکهایی که انرژی مصرفی فایلهای رجیستر را کاهش میدهند در الکترونیک کم مصرف[۵] نیز مفید است.
ریزمعماری
[ویرایش]اکثر فایل های ثبات هیچ گونه تمهید خاصی برای جلوگیری از نوشتن همزمان چندین پورت نوشتن یک ورودی ندارند. در عوض، سختافزار زمانبندی دستورالعمل تضمین میکند که فقط یک دستورالعمل در هر چرخه خاص، یک ورودی خاص را مینویسد. اگر چندین دستورالعمل با هدف قرار دادن یک ثبات صادر شود، همه به جز یکی، قابلیت نوشتن آنها خاموش می شود.
تبدیل کننده های متقاطع پس از یک عملیات نوشتن مدت زمان محدودی برای تهنشین شدن نیاز دارند، که طی آن عملیات خواندن یا بیشتر طول میکشد یا زبالهها را برمیگرداند. معمولاً مالتی پلکسرهای بای پس(میانبر) وجود دارد که دادههای نوشته شده را به درگاههای خواندن دور میزنند، زمانی که خواندن و نوشتن همزمان در یک ورودی یکسان دستور داده میشود. این مالتی پلکسرهای میانبر اغلب بخشی از یک شبکه بای پس بزرگتر هستند که نتایجی را که هنوز بین واحدهای عملکردی متعهد نشدهاند، ارسال میکند.
فایل ثبات معمولاً با مسیر دادهای که ارائه میکند تطابق دارد. تطبیق پیچ از عبور اتوبوسهای زیادی از گوشههای پیچ مسیر داده جلوگیری میکند، که باعث استفاده از مساحت زیادی میشود. اما از آنجایی که هر واحد باید یک گام بیتی داشته باشد، هر واحد در مسیر داده به گام بیتی که توسط گستردهترین واحد مجبور میشود، ختم میشود، که میتواند باعث هدر رفتن ناحیه در واحدهای دیگر شود. ثبت فایلها، به دلیل اینکه دو سیم در هر بیت در هر پورت نوشتن دارند، و به دلیل اینکه تمام خطوط بیت باید در هر سلول بیت با سیلیکون تماس داشته باشند، اغلب میتوانند گام یک مسیر داده را تنظیم کنند.
گاهی اوقات میتوان ناحیهای را در ماشینهایی با واحدهای متعدد در یک مسیر داده، با داشتن دو مسیر داده در کنار هم ذخیره کرد، که هرکدام از مسیرهای داده کوچکتری نسبت به یک مسیر داده واحد دارند. این مورد معمولاً چندین کپی از یک فایل ثبات را مجبور میکند، یکی برای هر مسیر داده.
به عنوان مثال، آلفا 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 هر دو ثبات عدد صحیح و ممیز شناور خود را در یک فایل واحد ادغام کرد و یک جدول ثبت فیزیکی بزرگ و جدول تخصیص دهنده پیشرفته را در قسمت جلویی خود قبل از تغییر نام در هسته داخلی خارج از نظم خود معرفی کرد. .
ثبت نام تغییر نام
[ویرایش]پردازندههایی که تغییر نام ثبات انجام میدهند میتوانند ترتیبی دهند که هر واحد عملکردی در زیر مجموعه ای از فایل ثبت فیزیکی بنویسد. این ترتیب میتواند نیاز به درگاههای نوشتن چندگانه در هر سلول بیت را برای صرفهجویی زیاد در منطقه برطرف کند. فایل ثبت بهدستآمده، در واقع پشتهای از فایلهای ثبت با پورتهای نوشتن منفرد است، سپس از تکرار و زیرمجموعه کردن پورتهای خواندن سود میبرد. در حد مجاز، این تکنیک یک پشته از فایل های ثبت ۱ نوشتنی و ۲ خواندنی را در ورودیهای هر واحد عملکردی قرار میدهد. از آنجایی که فایلهای ثبت با تعداد پورتهای کم اغلب تحت تسلط ناحیه ترانزیستور هستند، بهتر است این روش را تا این حد جلو نبرید، اما در عین حال مفید است.
ثبت پنجره
[ویرایش]SPARC ISA پنجرههای ثبت را تعریف میکند، که در آن نامهای معماری ۵ بیتی ثباتها در واقع به پنجرهای در یک فایل ثبات بسیار بزرگتر، با صدها ورودی اشاره میکنند. پیادهسازی فایلهای ثبت چندپورتی با صدها ورودی به یک منطقه بزرگ نیاز دارد. پنجره ثبت هنگام جابجایی ۱۶ ثبات اسلاید میکند، به طوری که هر نام ثبت معماری میتواند تنها به تعداد کمی از ثباتها در آرایه بزرگتر اشاره کند، به عنوان مثال ثبت معماری r20 فقط میتواند به ثبتهای فیزیکی #۲۰، #۳۶، #۵۲، # اشاره کند. ۶۸، #۸۴، #100، #116، اگر فقط هفت پنجره در فایل فیزیکی وجود داشته باشد.
برای صرفه جویی در منطقه، برخی از پیادهسازیهای SPARC یک فایل ثبات ۳۲ ورودی را پیادهسازی میکنند که در آن هر سلول دارای هفت «بیت» است. فقط یک مورد از طریق پورتهای خارجی قابل خواندن و نوشتن است، اما محتویات بیتها قابل چرخش هستند. یک چرخش در یک چرخه حرکت پنجره ثبت را انجام میدهد. از آنجایی که بیشتر سیمهایی که حرکت حالت را انجام میدهند محلی هستند، پهنای باند فوقالعادهای با قدرت کم امکانپذیر است.
همین روش در فایل نگاشت تغییر نام ثبات R10000 استفاده میشود که یک شماره ثبت مجازی ۶ بیتی برای هر یک از ثباتهای فیزیکی ذخیره میکند. در فایل تغییر نام، هر زمان که شاخه ای گرفته میشود، وضعیت تغییر نام بررسی میشود، به طوری که وقتی تشخیص داده شد که یک شاخه اشتباه پیشبینی شدهاست، وضعیت تغییر نام قدیمی میتواند در یک چرخه بازیابی شود. (به تغییر نام ثبات مراجعه کنید)
منابع
[ویرایش]- ↑ Wikibooks: Microprocessor Design/Register File#Register Bank.
- ↑ "ARM Architecture Reference Manual" (PDF). ARM Limited. July 2005. Archived from the original (PDF) on 22 اكتبر 2021. Retrieved 13 October 2021.
{{cite web}}
: Check date values in:|archive-date=
(help) - ↑ Johan Janssen. "Compiler Strategies for Transport Triggered Architectures". 2001. p. 169. p. 171-173.
- ↑ Johan Janssen. "Compiler Strategies for Transport Triggered Architectures". 2001. p. 169. p. 171-173.
- ↑ "Energy efficient asymmetrically ported register files" by Aneesh Aggarwal and M. Franklin. 2003.
پیوند به بیرون
[ویرایش]- ثبت ملاحظات طراحی فایل در پردازندههای برنامه ریزی شده پویا - Farkas, Jouppi , Chow - 1995