ردیابی حافظه نهان
در معماری رایانه ، حافظه پنهان ردیابی یک حافظه نهان سی‌پی‌یو تخصصی است که جریان پویای دستورالعمل های معروف به ردیابی را ذخیره می کند . با ذخیره ردیابی دستورالعمل هایی که قبلاً واکشی و رمزگشایی شده‌اند ، به افزایش پهنای باند واکشی دستورالعمل و کاهش مصرف برق (در مورد اینتل پنتیوم ۴ ) کمک می کند. پردازنده ردیابی معماری است که در اطراف حافظه پنهان ردیابی طراحی شده است و دستورالعمل ها را در دانه دانه بودن سطح ردیابی پردازش می کند. نظریه رسمی ریاضی ردیابی توسط مونوئیدهای ردیابی توصیف می شود.
اولین انتشار علمی حافظه پنهان ردیابی "Trace Cache: رویکردی با تأخیر کم برای واکشی دستورالعمل پهنای باند" بود. این مقاله که به طور گسترده مورد تأیید قرار گرفته است توسط اریک روتنبرگ ، استیو بنت و جیم اسمیت در کنفرانس بین‌المللی سمپوزیوم بین‌المللی ریز معماری (MICRO) در سال 1996 ارائه شد. انتشار قبلی ، اختراع ثبت شده 5381533 ایالات متحده توسط الکس پِلگ و یوری وایزر از اینتل ، "حافظه پنهان پویای دستورالعمل جریان پویا است که در اطراف بخشهای ردیابی مستقل از خط آدرس مجازی سازمان یافته است" ، ادامه برنامه ای که در سال 1992 ثبت شد ، بعداً رها شد.
پردازنده های سوپراسکالر گسترده تر ، برای عملکرد بالاتر ، دستورالعمل های متعددی را می خواهند که در یک چرخه واحد واکشی شوند. دستورالعمل های واکشی به دلیل دستورالعمل های شاخه و پرش ،همیشه در مکان های حافظه مجاور ( بلوک پایه ) نیستند. بنابراین پردازنده ها برای واکشی و هم ترازی چنین دستورالعمل هایی از بلوک های اساسی غیرهمجوار به پشتیبانی منطقی و سخت افزاری اضافی نیاز دارند. اگر چندین شاخه به عنوان "عدم گرفته" پیش بینی شده باشد ، پردازنده ها می توانند دستورالعمل ها را از چندین بلوک اساسی مجاور در یک چرخه دریافت کنند. با این حال ، اگر هر یک از شاخه ها به عنوان "گرفته شده" پیش بینی شده باشد ، پردازنده باید دستورالعمل هایی را از مسیر طی شده در همان چرخه دریافت کند. این قابلیت واکشی پردازنده را محدود می کند.
این چهار بلوک اساسی ( codice_1 ، codice_2 ، codice_3 ، codice_4 ) را همانطور که در شکل نشان داده شده است در نظر بگیرید که مربوط به یک حلقه ساده در صورت وجود است. این بلوک ذخیره خواهد شد پارگی به عنوان codice_5 در حافظه است. اگر پیش بینی شود codice_4 "گرفته نشده است ،" واحد واکشی می تواند بلوک های اصلی codice_1 ، codice_2 ، codice_3 که به طور همزمان قرار می گیرند ، واکشی کند. با این حال ، اگر پیش بینی codice_4 "گرفته شود" ، واحد واکشی باید codice_1 ، codice_2 ، codice_4 که به طور غیر هم پیوسته قرار می گیرند ، واکشی کند. از این رو ، واکشی این بلوک ها که به طور ناپیوسته در یک چرخه قرار می گیرند بسیار دشوار خواهد بود. بنابراین ، در چنین موقعیت هایی حافظه پنهان ردیابی به پردازنده کمک می کند.
حافظه نهان ردیابی پس از واکشی ، دستورالعمل ها را به ترتیب پویای خود ذخیره می کند. هنگامی که این دستورالعمل ها مجدداً مشاهده می شوند ، حافظه پنهان ردیابی به واحد واکشی دستورالعمل پردازنده اجازه می دهد تا چندین بلوک اساسی را بدون نگرانی از شاخه های موجود در جریان اجرا ، از آن دریافت کند. دستورالعمل ها یا پس از رمزگشایی یا پس از منقضی شدن ، در حافظه پنهان ردیابی ذخیره می شوند. اگرچه توالی دستورالعمل اگر فقط پس از مرحله رمزگشایی ذخیره شود ، حدسی است.
یک ردیابی که توالی دستورالعمل پویا نیز نامیده می شود ، ورودی در حافظه پنهان ردیابی است. با "حداکثر تعداد دستورالعمل" و "حداکثر بلوک های اساسی می تواند مشخص شود" . ردیابی ها می توانند در هر دستورالعمل پویا شروع شوند. چندین ردیابی می تواند دارای همان دستورالعمل شروع ، یعنی همان اولین شمارنده برنامه (PC) و دستورالعمل های مختلف از بلوک های مختلف به عنوان نتایج شاخه داشته باشد. برای شکل بالا ، ABC و ABD ردیابی معتبری هستند. هر دو با یک PC (آدرس A) شروع می شوند و طبق پیش بینی D ، بلوک های اساسی مختلفی دارند.
ردیابی ها معمولاً در صورت وقوع یکی از موارد زیر خاتمه می یابند:
یک ردیابی دارای اطلاعات زیر خواهد بود:
در اینجا عواملی ذکر شده است که باید هنگام طراحی حافظه پنهان مورد بررسی قرار گیرند.
حافظه پنهان در مسیر مهم واکشی دستورالعمل نیست
خطوط ردیابی بر اساس PC اولین دستورالعمل موجود در ردیابی و مجموعه پیش بینی های شاخه ، در حافظه پنهان ردیابی ذخیره می شوند. این امکان را برای ذخیره مسیرهای ردیابی مختلف فراهم می کند که از همان آدرس شروع می شوند ، هر کدام نتایج مختلف شاخه را نشان می دهند. این روش برچسب گذاری به ایجاد ارتباط مسیر به حافظه پنهان ردیابی کمک می کند. روش دیگر می تواند شامل تنها نگهداری اولین PC به عنوان برچسب در حافظه پنهان باشد. در مرحله واکشی دستورالعمل یک خط لوله ، PC فعلی به همراه مجموعه ای از پیش بینی های شاخه در حافظه پنهان ردیابی برای ضربه بررسی می شود . اگر ضربه ای ایجاد شود ، یک خط ردیابی برای واحد واکشی ارائه می شود که برای این دستورالعمل ها نیازی به رفتن به حافظه پنهان معمولی یا حافظه نیست. حافظه پنهان ردیابی به تغذیه واحد واکشی ادامه می دهد تا زمانی که خط ردیابی به پایان برسد یا اینکه پیش‌بینی‌کننده پرش اشتباهی در خط لوله وجود داشته باشد. در صورت عدم وجود ، ردیابی جدید شروع به ساخت می کند.
حافظه پنهان اجرای پنتیوم ۴ عملیات خرد حاصل از رمزگشایی دستورالعمل های x86 را ذخیره می کند ، همچنین عملکرد حافظه پنهان ریز عملکرد را فراهم می کند. با این وجود ، دفعه بعدی که یک دستورالعمل مورد نیاز است ، نیازی به رمزگشایی مجدد در ریز عملیات نیست.
معایب حافظه پنهان ردیابی عبارتند از:
اینتل در حافظه پنهان L1 پردازنده های NetBurst ، حافظه پنهان ردیابی اجرا را در خود جای داده است. این عملیات رمزگشایی شده را ذخیره می کند ، بنابراین هنگام اجرای یک دستورالعمل جدید ، به جای واکشی و رمزگشایی مجدد دستورالعمل ، پردازنده مستقیماً از ردیابی حافظه پنهان به ریز رمزگشایی های رمزگشایی شده دسترسی پیدا می کند و در نتیجه باعث صرفه جویی در وقت قابل توجهی می شود. علاوه بر این ، ریز op ها در مسیر پیش بینی شده خود در حافظه پنهان می شوند ، به این معنی که وقتی دستورالعمل ها توسط CPU از حافظه پنهان واکشی می شوند ، آنها از قبل به ترتیب صحیح اجرا وجود دارند. اینتل بعداً مفهومی مشابه اما ساده تر با سندی بریج به نام حافظه پنهان کوچک (UOP cache) ارائه داد.