کش L1، L2 و L3 چیست، چه طور کار می‌کند و معماری و مقدار کش در سرعت پردازنده چه اثری دارد؟ این سوالات را در این مقاله پاسخ می‌دهیم و اهمیت کش را روشن می‌کنیم.

تبلیغات ۷۲۰ در ۹۰

برگی از تاریخ، وقتی کش مهم و مهم‌تر می‌شود

اختراع کش یکی از مهم‌ترین اتفاقات در دنیای پردازش است. تقریباً تمام پردازنده‌های پیشرفته مقداری کش دارند. حال ممکن است در هسته‌های ضعیف و کوچکی مثل Cortex-A5 آرم، مقدار و سرعت کش کمتر باشد و در پردازنده‌های رده بالای Core i7 اینتل، سرعت و مقدار این حافظه‌ی مهم، بیشتر باشد.

امروزه حتی میکروکنترلرهای رده اول هم مقداری حافظه به عنوان کش دارند تا عملکردشان به مراتب بهتر شود. حافظه‌ی کش هم مثل هر حافظه‌ی فعال دیگری به توان الکتریکی نیاز دارد اما حتی توان مصرفی بیشتر هم جلوی استفاده از کش را نگرفته است.

نمونه‌ای از آن Cortex-M4 آرم است. آرم را با تراشه‌های معروف گوشی و تبلت می‌شناسیم ولی میکروکنترلرهای اتمل مثل تراشه‌ای که به صورت شماتیک در تصویر زیر می‌بینید هم حافظه‌ی کش دارد:

حتی Cortex-M4 با سرعت کلاک 120 مگاهرتز هم از کش استفاده‌ی بهینه می‌کند

حتی Cortex-M4 با سرعت کلاک 120 مگاهرتز هم از کش استفاده‌ی بهینه می‌کند

در سال‌های اولیه‌ی شکل‌گیری تراشه‌ها، سرعت حافظه‌ها به نسبت سرعت و قدرت پردازشی پردازنده خوب و حتی زیاد بود. اما در دهه‌ی 1980 وضعیت کم‌کم برعکس شد. به این صورت که پردازنده‌ها از نظر سرعت کلاک پیشرفت زیادی داشتند اما سرعت حافظه و تأخیری که در ارسال و اجرای فرامین وجود داشت، بهبود شدیدی پیدا نکرد و همین نکته آغازی برای تولد حافظه‌ی کش شد.

بد نیست عملکرد پردازنده‌ی اصلی و حافظه را در یک نمودار مقایسه کنیم. البته وظیفه‌ی حافظه تأمین پهنای باند است و وظیفه‌ی پردازنده، انجام محاسبات و پردازش‌هاست. بنابراین نمودار زیر واحدی ندارد، همه چیز به صورت مقیاس شده است:

مقایسه‌ی عملکرد پردازنده‌ی اصلی و حافظه‌ی رم در گذر زمان

مقایسه‌ی عملکرد پردازنده‌ی اصلی و حافظه‌ی رم در گذر زمان

در 1980 کشی در مایکروپراسزورها (همان ریزپردازنده یا به اصطلاح پردازنده) وجود نداشت اما در 1995، برخی پردازنده‌ها به کش دو سطحی تجهیز شده بودند. امروزه هم کش سطح 3 و 4 را در پردازنده‌ها می‌بینیم. نمودار فوق نشان می‌دهد که در سال 1980 اختلاف بین عملکرد کش و پردازنده کم بوده و هر دو را برابر واحد در نظر گرفته‌ایم. پس از آن به عنوان مثال در سال 1989 میبینیم که پردازنده‌ی اصلی 10 برابر سریع شده ولیکن حافظه فقط 3 برابر بهبود پیدا کرده است. با این حساب روشن است که به نوعی حافظه‌ی بهتر نیاز داریم که کش یا حافظه‌ی میانجی نامیده شده است.

هدف از پیاده‌سازی کش، کاهش تأخیر و افزایش پهنای باند

مأموریت حافظه‌ای به نام کش که گاهاً حافظه‌ی میانجی هم ترجمه می‌شود در یک کلام این است:

 حافظه‌ی کش سرعت و پهنای باند بسیار بالایی دارد و تأخیر در دسترسی به محتوای آن بسیار کم است. از این رو اطلاعات مورد نیاز پردازنده را سریع‌تر و با تأخیر کمتر در اختیار آن می‌گذارد.

 اهمیت تأخیر شاید کمی برای من و شما گنگ باشد اما وقتی به پردازنده‌های رده اول امروزی نگاه می‌کنیم که انبوهی از محاسبات پیچیده را تنها در کسری از ثانیه به پایان می‌رسانند به این باور می‌رسیم که پردازنده نباید برای دریافت دستورات و داده‌ها معطل شود. همه چیز باید سریع و بدون مکث در اختیار بخش‌های پردازشی قرار بگیرد.

طرز کار کش

کش L1 یا سطح اول

کش L1 نزدیک‌ترین و سریع‌ترین حافظه در کنار هسته‌ها

کش L1 نزدیک‌ترین و سریع‌ترین حافظه در کنار هسته‌ها

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

کش L1 سریع‌ترین حافظه است و درست کنار هسته‌های پردازشی قرار می‌گیرد.

به این حالت که داده‌ی مورد نیاز پردازنده پیشاپیش روی کش موجود باشد اصطلاحاً برخورد کش یا Cache Hit می‌گویند. اصطلاح هیت ریت یا نرخ برخورد هم به معنی درصد دفعاتی است که در هنگام مراجعه به کش، داده‌ی مورد نیاز روی آن وجود دارد.

برخی اوقات برعکس اتفاق فوق رخ می‌دهد یعنی وقتی پردازنده به کش مراجعه می‌کنید، داده‌های مورد نیاز روی آن وجود ندارد و باید از حافظه‌ی رم بارگذاری شود. در این صورت می‌گوییم Cache Miss رخ داده یا به عبارتی داده در کش موجود نیست.

کش L2 یا سطح دوم

وقتی اطلاعات در کش L1 موجود نباشد، بررسی کل سیستم برای یافتن اطلاعات زمان زیادی می‌گیرد و اینجا جایی است که کش L2 مفید واقع می‌شود. کش L2 کندتر از L1 است اما در عوض مقدار آن به مراتب بیشتر است و این یعنی اطلاعات بسیار زیادی روی آن جا می‌شود و نرخ برخورد را افزایش می‌دهد.

تصویر زیر هم به صورت شماتیک کش L2 را جدا از پردازنده و کش L1 آن نمایش داده که صد البته در تراشه‌های امروزی، حتی کش L3 و L4 هم جزئی از پردازنده هستند:

کش L2 که به صورت شماتیک جدا از پردازنده و کش L1 نشان داده شده است

کش L2 که به صورت شماتیک جدا از پردازنده و کش L1 نشان داده شده است

کش L2 در برخی پردازنده‌ها حالت دربرگیرنده یا inclusive دارد به این معنی که هر چه در کش سطح 1 موجود است، عیناً در سطح دوم نیز نوشته شده است. برخی پردازنده‌ها روش دیگری دارند که کش سطح دوم مستقل از کش سطح اول است و داده‌ی تکراری نداریم.

اگر اطلاعات مورد نیاز پردازنده روی کش سطح دوم هم وجود نداشته باشد، کش L3 وارد عمل می‌شود که باز هم ممکن است اطلاعات موردنظر روی آن موجود نباشد. این زنجیره به کش سطح چهارم، البته اگر وجود داشته باشد و سپس به حافظه‌ی DRAM یا همان رم گسترش می‌یابد.