نوشته‌ها

کش L1، L2 و L3 چیست؟

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

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

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

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

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

SAM4S_block_diagram-450x400

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

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

2-CPU-DRAM

در ۱۹۸۰ کشی در میکروپروسسورها (همان ریزپردازنده یا به اصطلاح پردازنده) وجود نداشت اما در ۱۹۹۵، برخی پردازنده‌ها به کش دو سطحی تجهیز شده بودند. امروزه هم کش سطح ۳ و ۴ را در پردازنده‌ها می‌بینیم. نمودار فوق نشان می‌دهد که در سال ۱۹۸۰ اختلاف بین عملکرد کش و پردازنده کم بوده و هر دو را برابر واحد در نظر گرفته‌ایم. پس از آن به عنوان مثال در سال ۱۹۸۹ میبینیم که پردازنده‌ی اصلی ۱۰ برابر سریع شده ولیکن حافظه فقط ۳ برابر بهبود پیدا کرده است. با این حساب روشن است که به نوعی حافظه‌ی بهتر نیاز داریم که کش یا حافظه‌ی میانجی نامیده شده است.

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

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

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

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

طرز کار کش

کش L1 یا سطح اول

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

Core_i7_Whitepaper

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

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

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

کش L2 یا سطح دوم

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

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

CACHEMEM1

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

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

بیشتر CPU های امروزی کش CPU لایه یک و لایه دو را درون خود برای هر هسته تعبیه کرده اند و یک کش لایه سه نیز بصورت کلی برای همه Core ها قرار داده اند.

منبع : intotech.ir