کش (Cache) پردازنده چیست؟
کش (Cache) پردازنده چیست؟
کش پردازنده یا کش سی پی یو (حافظه پنهان پردازنده) نوعی حافظه است که سرعت دسترسی بسیار بالایی دارد و محاسبات را با سرعت بیشتری انجام می دهد.
این حافظه معمولاً داده هایی را که پردازنده به طور مداوم به آن ها نیاز دارد در خود ذخیره می کند. در نتیجه هر زمان که پردازنده به آن داده نیاز پیدا می کند دیگر لازم نیست تا به حافظه اصلی دسترسی پیدا کند.
حافظه اصلی یک قطعه کامپیوتری است که پایین ترین سرعت دسترسی به اطلاعات را دارد. اگر CPU به داده ای خاص نیاز داشته باشد با استفاده از گذرگاه حافظه (Memory Bus) درخواستی از CPU به حافظه اصلی فرستاده می شود. در ادامه حافظه اصلی به دنبال داده مورد نظر می گردد و آن را به CPU می فرستد. مدت زمان زیادی در طول این چرخه تلف می شود. اگر داده های مورد نظر در محلی نزدیک به CPU ذخیره می شدند چه می شد؟ عملکرد کش پردازنده نیز بر مبنای چنین مفهومی طراحی شده است. برای درک مفهوم حافظه کش ما از مثال کتابخانه در طول این مطلب استفاده می کنیم.
فرض کنید که ما یک کتابخانه و یک فرد کتابدار داریم. اگر شخصی وارد کتابخانه شود و کتاب اول هری پاتر را بخواهد کتابدار به سمت قفسه ها می رود، کتاب را پیدا می کند و آن را به آن شخص می دهد. وقتی کار شخص با کتاب تمام شد کتاب مجددا به قفسه بازگردانده می شود. اگر هر شخص دیگری نیاز وارد کتابخانه شود و همان کتاب را بخواهد این چرخه مجددا تکرار می شود. این روش دقیقا همان روشی است که یک سیستم بدون حافظه کش عمل می کند.
چرا به کش پردازنده نیاز داریم؟
حال می خواهیم بررسی کنیم در حضور حافظه کش چه اتفاقی می افتد. در مثال کتابخانه، یک کشو در میز کتابدار را به عنوان کش در نظر میگیریم. وقتی نفر اول وارد کتابخانه می شود و کتابی را درخواست می کند روند به همان صورت باقی می ماند. اما وقتی کتاب برگردانده می شود کتابدار آن را به قفسه ها بر نمی گرداند بلکه این بار آن را در کشو میز خود قرار می دهد. حال وقتی نفر بعدی وارد می شود و همان کتاب را درخواست می کند کتابدار به راحتی آن را از کشو در می آورد و به او تحویل می دهد. به طور مشابه، حافظه کش نیز داده هایی را که پردازنده به طور مداوم به آن ها نیاز دارد را در خود ذخیره می کند. در نتیجه هر بار که به آن داده نیاز می شود پردازنده به سادگی داخل حافظه کش را نگاه می کند و داده مورد نظر را به دست می آورد به این ترتیب نیازی نیست تا هر بار مسیر طولانی حافظه اصلی طی شود. این کار به طرز چشمگیری سرعت پردازنده را افزایش می دهد.
آیا حافظه کش تنها داده هایی را که زیاد مورد استفاده قرار می گیرند در خود ذخیره می کند؟
خیر، حافظه کش نوعی حافظه هوشمند است که به دنبال داده هایی که ممکن است در آینده نزدیک لازم شوند نیز می گردد. اگر بخواهیم به مثال کتابخانه برگردیم: وقتی شخص جلد اول هری پاتر را درخواست می کند کتابدار باهوش ما جلد دوم هری پاتر را نیز پیدا می کند و با خود می آورد. حال وقتی شخص جلد اول را خواند به احتمال زیاد از کتابدار جلد دوم را نیز می خواهد. در چنین حالتی نیز جلد دوم در کشو میز کتابدار آماده تحویل به آن شخص است. به طور مشابه وقتی حافظه کش داده ها را از حافظه اصلی می گیرد داده هایی را نیز که در آدرس هایی نزدیک آدرس داده اصلی هستند در خود ذخیره می کند. به این مقادیر داده های مجاور داده اصلی که به کش منتقل می شوند cache line گفته می شود.
کش پردازنده دو سطحی
بسیاری از هارد درایو ها و اجزای دیگر سیستم از کش یک سطحی استفاده می کنند اما کش پردازنده، یک کش دو سطحی است. در این حالت کش سطح 1 (L1) کوچکتر و سریع تر است در حالی که کش سطح 2(L2) کمی کند تر است بااین حال باز هم کش سطح 2 سرعت بسیاری بیشتری نسبت به حافظه اصلی سیستم دارد. کش L1 به دو بخش تقسیم می شود که عبارتند از: کش دستورات و کش داده ها. کش دستورات در واقع دستوراتی را که CPU برای پردازش اطلاعات به آن ها نیاز دارد در خود ذخیره می کند در حالی که کش داده، مقادیری را که برای دستور فعلی در حال اجرا نیاز هستند را ذخیره می کند. وظیفه کش L2 بارگذاری اطلاعات از حافظه اصلی است. اگر بخواهیم دوباره به مثال کتابخانه برگردیم: فرض کنید کشوی میز کتابدار همان کش L1 باشد. در یک روز شلوغ که میزان تقاضا برای کتاب ها زیاد است و کتابدار کتاب های زیادی را در کشوی میز خود قرار داده است این احتمال وجود دارد که کشوی میز به سرعت پر شود. اینجا جایی است که کش L2 وارد ماجرا می شود. یک کمد کتاب را در نزدیکی میز کتابدار به عنوان کش L2 در نظر بگیرید. وقتی کشو پر می شود کتابدار کتاب ها را در کمد قرار می دهد. در این صورت وقتی تقاضا برای یک کتاب محبوب زیاد باشد، کتابدار اول کشوی میز خود را جستجو می کند. اگر آن کتاب در آن جا نبود او به سراغ کمد کتاب ها می رود. به طور مشابه وقتی کش L1 پر می شود داده ها در کش L2 ذخیره می شوند. پردازنده ابتدا در کش L1 به دنبال داده مورد نیاز خود می گردد اگر آن را پیدا نکرد فقط کش L2 را جستجو می کند. اگر آن داده در کش L2 نیز موجود نباشد طی کردن مسیر طولانی تا حافظه اصلی و جستجو در آن اجتناب ناپذیر است.
L3 Cache یا کش لایه سوم پردازنده چیست ؟
کش L3 بین حافظه اصلی سیستم یا همان RAM و کش لایه دوم قرار می گیرد . هدف از طراحی و پیاده سازی کش L3 این است که اگر داده ها در کش لایه دوم پیدا نشدند در لایه سوم بتوان به آنها دسترسی داشت باید به این نکته توجه داشت که کش لایه سوم سرعت پایینتر اما ظرفیت بیشتری نسبت به کش لایه دوم دارد. همان طور که در تصویر پایین مشاهد میکنید ویژگی دیگر کش لایه 3 این میباشد که بین تمام هسته های پردازنده مشترک است.
eDRAM یا L4 Cache یا کش لایه چهارم پردازنده چیست ؟
اگر اطلاعات مورد نیاز پردازنده روی کش سطح سوم هم وجود نداشته باشد، کش L4 در صورت موجود بودن وارد عمل خواهد شد.
حافظه کش سطح چهارم از نوع eDRAM بوده که فقط در پردازنده های برادول (BroadWell) با گرافیک مجتمع Iris Pro با حافظه 128 مگابایت وجود دارد. کمپانی اینتل حافظه کش L4 را Crystal Well نام گذاری کرده و این حافظه را همراه با خود پردازنده اما در تراشه ای جداگانه همانند شکل زیر گنجانده است.
البته باید گفت که فقط اینتل نیست که به فکر افزایش حافظه کش پردازنده های خود افتاده است بلکه کمپانی AMD نیز سعی را بر این داشته که در پردازنده های کنسول XBOX One شرکت مایکروسافت از یک کش اضافه بهره ببرد.
آیا استفاده از کش بیشتر ایده خوبی است؟
بله و خیر. استفاده از کش بیشتر به شما اجازه می دهد تا داده ها را باسرعت بیشتری به دست بیاورید البته این در حالتی است که داده مورد نظر در کشL1 یا L2 موجود باشد. دوباره به مثال کتابخانه باز می گردیم. اگر شخصی یک کتاب محبوب را درخواست کند که در کشو و کمد کتاب ها موجود نباشد، کتابدار ابتدا کشو میز خود را جستجو می کند و سپس به سراغ کمد کتاب ها می رود آن جا را نیز می گردد. با این روش زمان زیادی تلف می شود تا کتابدار در نهایت به سراغ قفسه های اصلی کتاب در کتابخانه برود و کتاب مورد نظر را پیدا کند. به طور مشابه، CPU نیز ابتدا در کش L1 و سپس در کش L2 به دنبال داده مورد نظر می گردد و اگر آن را پیدا نکرد در نهایت درخواست خود را به حافظه اصلی می فرستد. همان طور که حتما متوجه شده اید در این روش زمان زیادی از پردازنده برای جستجو در کش های L1 و L2 تلف می شود. وقتی پردازنده داده مورد نظر را در یکی از کش ها پیدا کند اصطلاحا به آن Cache Hit گفته می شود و در شرایط دیگر به آن Cache miss گفته می شود. داده ها اغلب به صورت تناوبی به روزرسانی شده و با الگوریتم های متفاوتی جایگزین می شوند تا تا بیشترین مقدار Cache Hit اتفاق بیفتد.
یک نفر ممکن است پیش خود فکر کند اگر حافظه کش اینقدر سریع است چرا آن را آنقدر بزرگ طراحی نکنند که بتواند تمام داده های حافظه اصلی را در خود ذخیره کند؟ پاسخ این است که اگرچه حافظه کش سرعت دسترسی به اطلاعات بسیار بالایی را در اختیار ما می گذارد اما این سرعت هزینه های بسیار بالایی در پی دارد. در نتیجه استفاده مناسب از مقدار کش در دسترس کاملاً ضروری است.