ثبت بازخورد

لطفا میزان رضایت خود را از دیجیاتو انتخاب کنید.

واقعا راضی‌ام
اصلا راضی نیستم
چطور میتوانیم تجربه بهتری برای شما بسازیم؟

نظر شما با موفقیت ثبت شد.

از اینکه ما را در توسعه بهتر و هدفمند‌تر دیجیاتو همراهی می‌کنید
از شما سپاسگزاریم.

کش cpu
تکنولوژی

حافظه کش L2 ،L1 و L3 چیست و چگونه روی عملکرد پردازنده تاثیر می‌گذارد؟

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

احمدرضا فرهبد
نوشته شده توسط احمدرضا فرهبد | ۱۲ مهر ۱۴۰۰ | ۲۲:۰۰

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

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

حافظه کش چیست؟

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

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

در ضمن در صورتی‌ که این حافظه وجود خارجی داشت، تنها نیازمند واحدهای منطقی برای انجام عملیات ریاضی مثل جمع و تفریق و یک سیستم برای مدیریت تراکنش داده‌ها بود؛ زیرا این حافظه فرضی می‌توانست تمام اعداد موردنیاز را سریعاً ارسال یا دریافت کنند و در چنین حالتی لازم نبود واحدهای منطقی برای تبادل و انتقال داده‌ها منتظر بمانند

تفاوت حافظه کش با سایر حافظه‌های متداول ذخیره‌سازی

همان‌طور که همه ما می‌دانیم در حال حاضر هیچ‌گونه حافظه جادویی طراحی و ایجاد نشده است و حافظه‌ها تنها به دو نوع حافظه HDD و SSD تقسیم می‌شوند. در ضمن در حال حاضر حتی بهترین نوع از این حافظه‌ها هم قادر به مدیریت تبادل تمام داده‌های موردنیاز پردازنده نیستند.

حافظه کش

دلیل سرعت بسیار بالای پردازنده‌های مدرن، توانایی آن‌ها برای جمع کردن دو مقدار صحیح ۶۴ بیتی تنها در یک سیکل کلاک است. به‌عنوان‌ مثال پردازنده‌ای ۴ گیگاهرتزی می‌تواند چنین عملیاتی را تنها ظرف مدت 0.00000000025 ثانیه یا یک‌چهارم یک نانوثانیه انجام دهد.

هاردهای HDD نیز اصلاً برای تبادل سریع داده‌ها مناسب نیستند و تنها یافتن داده‌ها در دیسک توسط آن‌ها، هزاران نانوثانیه طول می‌کشد که برای پردازش اطلاعات اصلاً مدت‌زمان مناسبی نیست و باید مدت‌زمان موردنیاز برای انتقال اطلاعات را نیز درنظر بگیریم. حافظه‌های SSD هم با وجود اینکه سرعت بالاتری دارند و می‌توانند داده‌ها را در صدها یا حتی ده‌ها نانوثانیه بیابند، اما باز هم نمی‌توان از آن‌ها به‌عنوان حافظه کش استفاده کرد؛ بنابراین نه حافظه HDD و نه حافظه SSD نمی‌توانند در پردازنده استفاده شوند.

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

حافظه کش

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

رم که در تمام کامپیوترها نیز دیده می‌شود، این ویژگی‌ها را دارد و برای این منظور هم طراحی شده‌اند. تقریباً تمام رم مورد استفاده در کامپیوترها از نوع حافظه DRAM یا Dynamic Random Access Memory (حافظه تصادفی پویا) هستند و می‌توانند داده‌ها را از هر حافظه دیگری سریع‌تر منتقل کنند؛ البته حتی این حافظه‌ها هم نمی‌توانند به‌عنوان حافظه کش استفاده شوند؛ زیرا فضای کافی برای ذخیره‌سازی حجم بالایی از داده‌ها را ندارند.

حافظه رم

برخی از بزرگ‌ترین تراشه‌های حافظه DDR4 توسط شرکت میکرون (Micron) تهیه می‌شوند که یکی از معدود شرکت‌های تولیدکننده این نوع حافظه‌ها به شمار می‌رود. بزرگ‌ترین تراشه‌های حافظه DDR4  قادرند ۳۲ گیگابیت داده معادل 4 گیگابایت را در خود ذخیره کنند؛ درحالی‌که ظرفیت ذخیره‌سازی بزرگ‌ترین هارد درایوها چهار هزار برابر بیش از این میزان است.

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

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

پردازنده گرافیکی ایکس باکس 360
حافظه DRAM با ظرفیت 10 مگابایت در سمت چپ پردازنده گرافیکی ایکس باکس 360

اکثر حافظه‌های DRAM درست در کنار پردازنده قرار می‌گیرند و به مادربرد متصل می‌شوند و همیشه جزو نزدیک‌ترین قطعات به CPU محسوب می‌شوند. پیدا کردن داده‌ها توسط حافظه DRAM هم 100 نانوثانیه طول می‌کشد که به‌اندازه کافی سریع نیست؛ اما حداقل سریع‌تر از سایر انواع حافظه‌های متداول است و می‌تواند در هر ثانیه میلیاردها بیت را انتقال دهد؛ بنابراین به نظر می‌رسد باید از نوعی از حافظه استفاده شود که چیزی بین واحدهای پردازنده و حافظه DRAM باشد.

اجازه دهید قبل از آشنا شدن با بهترین سیستم برای حافظه کش، حافظه ذخیره‌سازی دیگری را نیز بررسی کنیم که حافظه SRAM یا Static Random Access Memory (حافظه دسترسی تصادفی ایستا) نام دارد. حافظه DRAM از خازن‌های بسیار ریز میکروسکوپی برای ذخیره‌سازی داده‌ها به شکل جریان الکتریکی استفاده می‌کند. حافظه SRAM همین کار را با استفاده از ترانزیستورها انجام می‌دهد و ذخیره‌سازی داده‌ها در آن با همان سرعت ذخیره‌سازی داده‌ها توسط واحدهای پردازشگر CPU انجام می‌شود که در حدود ۱۰ برابر سریع‌تر از سرعت ذخیره‌سازی داده‌ها در DRAM است؛ اما متأسفانه استفاده از SRAM هم در CPU به فضای زیادی نیاز دارد.

حافظه DRAM

استفاده از حافظه‌های ایجاد شده بر پایه ترانزیستور فضایی بسیار بیشتر از فضای موردنیاز توسط حافظه DRAM می‌طلبد و به همان فضای موردنیاز برای استفاده از یک تراشه DDR4 با ظرفیت ۴ گیگابایت نیاز دارند (بنابراین در صورت استفاده از SRAM در CPU، تنها ۱۰۰ مگابایت حافظه ایجاد می‌شود) اما به دلیل اینکه این نوع از حافظه با همان فرایند مورد استفاده برای ساخت CPU تولید می‌شود، می‌تواند در داخل CPU ادغام شود و تا جای ممکن نزدیک واحدهای پردازشگر منطقی قرار گیرد.

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

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

ساختار حافظه کش

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

قسمت‌های مختلف تشکیل‌دهنده CPU

در تصویر بالا قسمت‌های مختلف تشکیل‌دهنده CPU به نمایش گذاشته شده‌اند که در داخل مستطیل خط‌چین قرار دارند. ALU (واحدهای محاسبه و منطق) که در بخش انتهایی قسمت چپ مستطیل قرار گرفته، قدرت پردازشی CPU را تأمین می‌کنند و انجام فعالیت‌های محاسباتی تراشه را نیز برعهده دارد.

 البته این واحدهای منطقی محاسباتی نیز کش محسوب نمی‌شوند و همان‌طور که در تصویر بالا نمایش داده شده، به‌عنوان واحدهای رجیستر (register) شناخته می‌شوند (آن‌ها به‌عنوان فایل رجیستر دسته‌بندی می‌شوند). هر یک از واحدهای ریجستر دارای اعداد تک هستند؛ مثلاً یک عدد صحیح ۶۴ بیتی. مقادیر ثبت‌ شده در هر بخش می‌تواند هر نوع داده‌ای باشد، به‌عنوان‌ مثال هر واحد رجیستر می‌تواند دربردارنده یک دستورالعمل یا آدرس حافظه یک داده خاص باشد.

فایل رجیستر در سی‌پی‌یوی کامپیوتر کاملاً کوچک است؛ به‌عنوان‌مثال در سی‌پی‌یوی Core i9-9900K، تنها دو مجموعه فایل رجیستر وجود دارد. دسته مخصوص اعداد صحیح تنها ۱۸۰ ریجستر ۶۴ بیتی دارد. دسته دوم برای اعداد برداری استفاده می‌شود و دارای ۱۶۸ ورودی ۲۵۶ بیتی است؛ بنابراین کل حجم فایل برای هر هسته کمتر از ۷ کیلوبایت است. این عدد در مقایسه با اندازه فایل رجیستر واحد پردازشی Streaming Multiprocessors (این واحد پردازشی معادل هسته‌های CPU است) پردازنده‌های گرافیکی بسیار قدرتمند مثل کارت گرافیک Nvidia GeForce RTX 2080 Ti که ۲۵۶ کیلوبایت است، عدد بسیار کوچکی محسوب می‌شود.

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

صویر زوم شده بخشی از هسته سی‌پی‌یوی دسکتاپ اینل اسکای لیک (Intel's Skylake)

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

کادر سفیدرنگ سمت راست تصویر هم نشان‌دهنده بخشی موسوم به کش دستورالعملی یا Level 1 Instruction است. این قسمت از حافظه کش نیز تنها می‌تواند ۳۲ کیلوبایت را ذخیره کند. این قسمت همان‌طور که از نامش مشخص است، فرمان‌هایی را ذخیره می‌کند که می‌تواند به قسمت‌های کوچک‌تری موسوم به ریز عملیات یا Micro Operations تقسیم شود (این قسمت‌ها با نام μops نیز معرفی شده‌اند) تا برای انجام عملیات توسط واحدهای محاسبه و منطق، در اختیار این واحدها قرار گیرند. برای این دستورها نیز حافظه کشی با نام L0 ایجاد شده است. این حافظه کش در مقایسه با حافظه کش L1 کوچک‌تر است و تنها می‌تواند ۱۵۰۰ عملیات را در خود ذخیره کند؛ البته این حافظه کش در کنار کش L1 قرار دارد.

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

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

کش L2 سی پی یوی اسگای لیک
کش L2 سی پی یوی اسکای لیک از نوع DRAM با ظرفیت 256 کیلوبایت

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

این حافظه کمی بزرگ‌تر از کش L1 است. اندازه این حافظه در پردازنده‌های AMD Zen 2 برابر با ۵۱۲ کیلوبایت است که داده‌های ضروری برای کش L1 را همیشه در اختیار دارد؛ البته همان‌طور که قبلاً گفتیم، با افزایش ظرفیت حافظه کش، سرعت یافتن و انتقال اطلاعات کاهش می‌یابد و این موضوع در مورد کش L1 هم کاملاً صدق می‌کند و مدت‌زمان یافتن و انتقال اطلاعات توسط این حافظه کش تقریباً دو برابر مدت‌زمان موردنیاز برای کش L1 برای انتقال اطلاعات است.

در دوران طراحی و ایجاد نخستین سی‌پی‌یوی پنتیموم اینتل، کش L2 در قالب یک تراشه مجزا طراحی شد که یا به شکل یک برد دارای پین در داخل سیستم قرار می‌گرفت (مثل ماژول رم خطی دوگانه) یا در داخل مادربرد تعبیه می‌شد و در طراحی نسل‌های بعدی CPU به داخل پکیج سیستم CPU راه یافت و در نهایت سی‌پی‌یوهایی مثل پنتیوم 3 یا AMD K6-III در دای آن ادغام شد. توسعه لایه‌های مختلف کش به همین جا ختم نشد و باز هم ادامه یافت. با پیدایش سی‌پی‌یوهای چندهسته‌ای ایجاد سطحی دیگری از کش ضروری شد.

یکی از تراشه‌های سی‌پی‌یوی پردازنده کبی لیک (Kaby Lake)

در تصویر بالا که تصویری از یکی از تراشه‌های سی‌پی‌یوی پردازنده کبی لیک (Kaby Lake) است، در قسمت میانی سمت چپ تصویر چهار هسته را مشاهده می‌کنید (در قسمت راست تصویر مشاهده می‌کنید که پردازنده گرافیکی ادغام شده در CPU تقریباً نیمی از فضای دای را اشغال کرده است). در هر هسته مجموعه‌ای اختصاصی از حافظه کش L1 و L2 وجود دارد (قسمت‌های مشخص‌شده با رنگ زرد و سفید) و علاوه بر این دو مجموعه، مجموعه سومی از بلوک‌های SRAM نیز دیده می‌شود.

کش L3 یا Level 3 در اطراف یک هسته تکی ایجاد شده؛ اما با هسته‌های دیگر به‌طور کامل به اشتراک گذاشته‌ شده است. هر یک از هسته‌ها می‌توانند آزادانه و بدون هیچ‌گونه محدودیتی به محتوای موجود در کش L3 سایر هسته‌ها دست پیدا کند. ظرفیت کش L3 بسیار بیشتر از ظرفیت L2 و L1 است (بین ۲ تا ۳۲ مگابایت) است؛ اما به همان میزان سرعت بسیار کمتری دارد و یافتن و انتقال اطلاعات توسط آن به‌طور متوسط 30 سیکل کلاک طول می‌کشد؛ مخصوصاً اگر هسته نیازمند داده‌های موجود در یکی از بلوک‌های حافظه کش در فاصله‌ای دور از هسته باشد.

یکی از هسته‌های معماری AMD Zen 2

تصویر بالا مربوط به یکی از هسته‌های معماری AMD Zen 2 است. قسمت مشخص‌شده در کادر سفیدرنگ مربوط به کش Level 1 با ظرفیت ۳۲ کیلوبایت دربردارنده داده‌ها و دستورات است و بلوک بزرگ ۴ مگابایتی کش Level 3 با کادر قرمز رنگ مشخص شده است. اگر به‌دقت به تصویر نگاه کنید، متوجه می‌شوید که کش 23 کیلوبایتی حافظه بیشتری را نسبت به ۵۱۲ کیلوبایتی اشغال کرده است. چگونه چنین اتفاقی ممکن است؟ چرا با وجود اینکه کش L1 نسبت به کش L2 و L3 ظرفیت بسیار کمتری دارد، به نسبت به آن‌ها فضای زیادی را اشغال کرده است. آیا شما پاسخ این سؤال را می‌دانید؟

ضرورت وجود حافظه کش چیست؟

شاید حافظه‌هایی با ظرفیت ۳۲ کیلوبایت یا ۵۱۲ کیلوبایت یا حتی تا ۴ مگابایت از نظر شما چندان تاثیرگذار نباشند؛ اما باید بدانید که این حافظه‌ها با افزایش سرعت انتقال داده‌ها به واحدهای پردازشگر منطقی، عملکرد سی‌پی‌یو را به میزان قابل‌توجهی بهبود می‌دهند، داده‌ها و دستورات موردنیاز واحدهای پردازنده نزدیک به خود را در خود ذخیره می‌کنند. اطلاعات ذخیره‌شده در حافظه کش به دو دسته تقسیم می‌شوند: خود داده‌ها و موقعیت مکانی حافظه در سیستم ذخیره‌سازی. این آدرس با عنوان برچسب یا تگ کش (Cache Tag) شناخته می‌شود.

زمانی که سی‌پی‌یو می‌خواهد اطلاعاتی را در حافظه‌اش بنویسید یا اطلاعاتی را از روی آن بخواند، برچسب‌های کش L1 را بررسی می‌کند. چنانچه تگ موردنیاز CPU که با نام کش هیت (Cache Hit) نیز شناخته می‌شود در کش موجود باشد، CPU می‌تواند به‌راحتی به داده‌ها دسترسی پیدا کند. درصورتی‌که کش هیت در پایین‌ترین سطح کش یافت نشود، اتفاقی تحت عنوان کش میس (Cache Miss) رخ می‌دهد.

در چنین وضعیتی تگی در کش L1 ایجاد می‌شود و سایر بخش‌های معماری پردازنده دست‌به‌کار می‌شوند تا داده‌های دربردارنده آن تگ را در سایر سطوح کش بیابند. حتی ممکن است پردازنده مجبور شود به حافظه اصلی نیز رجوع کند؛ اما برای ایجاد فضا در کش L1 بخشی از محتویات کش L2 به‌ناچار باید از این کش خارج ‌شوند.

فرآیند مذکور باعث می‌شود داده‌ها تقریباً پیوسته با ترتیب غیر مشخصی جابجا شوند. تمام این فرایند تنها در طول چند سیکل کلاک رخ می‌دهد؛ تنها روش دستیابی به این هدف ایجاد ساختاری پیچیده پیرامون حافظه SRAM است که به‌منظور مدیریت درست داده‌ها است؛ به‌عبارت‌دیگر درصورتی‌که یک هسته پردازنده تنها دارای یک واحد محاسبه و منطق باشد، می‌توان کش L1 را با ساختار ساده‌ای طراحی کرد؛ اما به دلیل وجود تعداد زیادی از این واحدهای پردازشگر (بسیاری از آن‌ها انجام دو زنجیره متوالی از دستورالعمل‌ها را برعهده دارند)، کش برای حفظ جریان داده‌ها به چندین اتصال نیاز دارد.

شما می‌توانید با استفاده از نرم‌افزارهای رایگانی همچون CPU-Z تمام اطلاعات سطوح مختلف حافظه کش سی‌پی‌یوی کامپیوتر خود را مشاهده کنید، اما این اطلاعات به چه معنایی است؟ از میان مهم‌ترین اطلاعاتی که توسط این نرم‌افزار ارائه می‌شود، می‌توان به اطلاعاتی که تحت عنوان Associative ارائه شده، اشاره کرد. این اطلاعات به قوانین مرتبط با چگونگی نحوه کپی شدن بلوک‌های داده‌ از حافظه سیستم به حافظه کش مربوط می‌شود.

نرم‌افزار CPU-Z
نرم‌افزار CPU-Z

اطلاعات کش سی‌پی‌یوی نمایش داده شده در تصویر بالا مربوط به سی‌پی‌یوی اینتل Core i7-9700K است. هر یک از حافظه‌های کش L1 این سی‌پی‌یو به 64 بلوک‌های کوچک به نام Sets (مجموعه‌ها) تقسیم می‌شوند و هر یک از این بلوک نیز به بخش‌های کوچک‌تری تحت عنوان Cache Lines (خطوط کش) با اندازه ۶۴ بایت تقسیم می‌شوند. عبارت Set associative به این معنی است که بلوکی از داده‌ها که در حافظه سیستم ذخیره شده است، به‌جای اینکه آزادانه در هر نقطه‌ای از نقشه قرار گیرد به مجموعه‌ای مشخص به خطوط کش مرتبط می‌شود.

در تصویر بالا عبارت way-8 را نیز مشاهده می‌کنید که به ما می‌گوید یک بلوک می‌تواند با 8 خط کش در یک مجموعه مرتبط شود. هرچقدر ارتباط‌ها بیشتر باشد و به‌عبارت‌دیگر بلوک‌ها با راه‌های بیشتری به خط‌های کش مرتبط شوند، شانس یافتن کش هیت توسط سی‌پی‌یو در هنگام جستجوی یک کش برای یافتن داده بیشتر می‌شود و خطاهای مربوط به کش میس کمتر می‌شود؛ اما ایجاد چنین ساختاری معایبی هم دارد که از میان آن‌ها می‌توان به پیچیده‌تر شدن ساختار سی‌پی‌یو، افزایش مصرف آن و افت عملکرد سی‌پی‌یو به دلیل لزوم پردازش خطوط کش بیشتر برای هر یک از بلوک‌های داده اشاره کرد.

یکی دیگر از موارد مرتبط با پیچیدگی کش، به نحوه حفظ داده‌ها در سطوح مختلف کش مربوط می‌شود. قوانین مرتبط با این فرآیند در مجموعه‌ای تحت عنوان Inclusion Policy (سیاست شمول) تنظیم شده‌اند. سی‌پی‌یوهای اینتل دارای کش Fully Inclusive L1+L3 هستند؛ یعنی در این پردازنده‌ها درست همان داده‌ای که در کش L1 وجود دارد، در کش L3 وجود دارد.

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

در همان سی‌پی‌یوها کش L2 مانند دو سطح دیگر از حافظه کش Inclusive نیست (به‌اصطلاح Non-inclusive) هستند و هیچ یک از داده‌های ذخیره‌شده در آن، به دو سطح دیگر کش منتقل و در آن‌ها کپی نمی‌شود. اگرچه با استفاده از چنین ساختاری می‌توان فضای ذخیره‌سازی را حفظ کرد؛ اما از سوی دیگر باعث می‌شود سیستم حافظه تراشه برای یافتن تگ همیشه مجبور باشد در کش L3 که به میزان قابل‌توجهی بزرگ‌تر از دو کش دیگر است، نیز جستجو کند.

کش‌های موسوم به Victim caches نیز شبیه به کش‌های Non-inclusive L2 هستند، با این تفاوت که این کش‌ها برای ذخیره‌سازی داده‌های خارج‌شده از سایر سطوح کش، استفاده می‌شود. به‌عنوان‌مثال در سی‌پی‌یوهای AMD ZEN 2 از ویکتیم کش L3 تنها برای ذخیره‌سازی داده‌های کش L2 استفاده می‌شود.

سیاست‌های دیگری نیز در رابطه با کش نیز وجود دارد؛ مثل زمانی که اطلاعات در حافظه کش و حافظه اصلی سیستم نگهداری می‌شوند. سیاست‌های مربوط به نوشتن اطلاعات، Write Policies نام دارند و امروزه بسیاری از سی‌پی‌یوها دارای کش‌هایی تحت عنوان کش‌های write-back هستند. زمانی که داده‌ها در این کش‌ها نوشته می‌شوند، گرفتن کپی از آن‌ها و به‌روزرسانی سیستم با کمی تأخیر انجام می‌شود. در اکثر موارد این تأخیر تا زمانی که داده در کش باشد، طول می‌کشد و رم سیستم تنها زمانی داده‌های کش را دریافت می‌کند که داده‌ها از کش خارج شده باشند.

حافظه کش

تمام طراحان سی‌پی‌یو پردازنده در انتخاب میزان، نوع و سیاست کش به‌گونه‌ای عمل می‌کنند که توازن بین عملکرد مورد انتظار برای CPU و افزایش پیچیدگی و فضای موردنیاز برای دای آن، به بهترین شکل ممکن ایجاد شود. درصورتی‌که طراحان می‌توانستند تراشه کشی مثل کش L1 1000 way با ظرفیت 20 مگابایت را طوری طراحی کنند که اندازه آن به‌اندازه منطقه بسیار بزرگی مانند منطقه منهتن نشود (و به اندازه چنین منطقه بزرگی انرژی مصرف نکند)، قطعاً از چنین تراشه‌‌ای در سی‌پی‌یوها استفاده می‌کردند.

ظرفیت پایین‌ترین سطح کش در سی‌پی‌یوهای امروزی نسبت به ۱۰ سال گذشته تفاوت چندان زیادی نکرده است؛ اما شاهد رشد ظرفیت کش L3 هستیم. 10 سال گذشته ظرفیت کش L3 در سی‌پی‌یوی اینتل i7-980X با قیمت ۹۹۹ دلار 12 مگابایت بود که ظرفیت بسیار خوبی محسوب می‌شد و هر کاربر حرفه‌ای برای خریدن چنین پردازنده‌ای بسیار مشتاق بود؛ اما امروزه می‌توانید با نصف این پول پردازنده‌ای با کش L3 با ظرفیت ۶۴ مگابایت بخرید.

به‌طور خلاصه باید بگوییم وجود کش با ظرفیت بالا در سی‌پی‌یوها و پردازنده‌های گرافیکی بسیار ضروری است و افزایش ظرفیت حافظه کش، پیشرفت شگفت‌انگیزی محسوب می‌شود.

پردازنده گرافیکی GA100 انویدیا
پردازنده گرافیکی GA100 انویدیا دارای کش L1 با ظرفیت 20 مگابایت و کش L2 با ظرفیت 40 مگابایت

لازم به توضیح است که انواع حافظه‌های کش دیگری مانند کش بافر (Buffer Cache) و کش Texture هم وجود دارد؛ اما به دلیل اینکه سطوح مختلف کش که در مورد آن‌ها توضیح دادیم، در این کش‌ها ساختار ساده‌ای دارند و چندان پیچیده به نظر نمی‌رسند، از توضیح در مورد آن‌ها صرف‌نظر کرده‌ایم.

دیدگاه‌ها و نظرات خود را بنویسید
مجموع نظرات ثبت شده (2 مورد)
  • mohamad amin gg
    mohamad amin gg | ۱۳ مهر ۱۴۰۰

    ممنون بابت اطلاعات مفیدتون😍

  • avvvvab
    avvvvab | ۱۳ مهر ۱۴۰۰

    "بنابراین با این تفاسیر، ..."
    اوّلًا: با این تفاسیر نه، با این تفاصیل. ثانیًا: بنابراین همان با این تفاصیل است
    پس یکی از ایندو کافیست: بنایراین، ...
    به تحت عنوان > به عنوان / تحت عنوان
    به‌دقت به تصویر نگاه کنید > با دقت به تصویر نگاه کنید
    Associative = همخوان، مرتبط
    Sets = دسته‌ها
    Cache Lines = خطوط ذخیره (حافظه)
    Inclusive = گنجیده
    Non-inclusive = نگنجیده
    Victim Cache = ذخیره قربانی / ذخیره طعمه
    write-back Cache = ذخیره جوابدهی
    Buffer Cache = ذخیره میانگیر / ذخیره سپر
    Texture Cache = ذخیره بافتی

مطالب پیشنهادی