حافظه كش L2 ،L1 و L3 چيست و چه تاثيري در عملكرد پردازنده دارد؟
تقريبا تمام پردازندهها از پردازندههاي كممصرف و كمتواني مانند Cortex-A5 آرم تا پردازندههاي قدرتمندي همچون Core i7 اينتل همگي از حافظهي پرسرعتي بهنام كش (Cache) بهره ميبرند. حتي ميكروكنترلرهاي ردهبالا نيز عموما كَش كوچكي دارند. با وجود اينكه در طراحي آنها مصرف انرژي اهميت زيادي دارد و كش نيز انرژي مصرف ميكند، اما مزيتهاي حافظهي كش آنقدر مهم هستند كه استفاده از كش را توجيه ميكند.
كشينگ و استفاده از كش اختراع شد تا يك اشكال جدي را حل كند. در دهههاي اوليهي ظهور كامپيوتر، حافظهي اصلي بهشدت كند و بسيار گران بود و از طرفي پردازندهها نيز چندان سريع نبودند. در دههي ۱۹۸۰ اختلاف سرعت بين حافظه و پردازنده افزايش يافت و سرعت كلاكِ ميكروپروسسورها مدام در حال افزايش بود. در اين شرايط همچنان حافظهها كند بودند و درواقع نميتوانستند پا به پاي پردازندهها دسترسي به اطلاعات را فراهم كنند. اينجا بود كه لاخبار تخصصي ساخت حافظههاي سريعتر حس شد. در نمودار زير ميتوانيد رشد سرعت حافظههاي DRAM و CPUها را طي سالهاي ۱۹۸۰ تا ۲۰۰۰ مشاهده كنيد:
در سال ۱۹۸۰ كش در ميكروپروسسورها وجود نداشت. در سال ۱۹۹۵ استفاده از سطح دوم كش رواج يافت.
حافظه كش چيست و چطور كار ميكند؟
كش به زبان ساده يك حافظهي بسيار سريع است كه دقيقا دركنار واحدهاي منطقي پردازندهي مركزي قرار ميگيرد. البته قطعا حافظهي كش بيش از اين تعريف يك خطي در قدرت و سرعت پردازنده متخصصد و تأثير دارد.
براي درك ابتدايي ساختار و متخصصد كش، يك حافظهي فرضي بدون نقص را در انديشه متخصصين بگيريد. سيستم ذخيرهسازي جادويي ما، بينهايت سريع است و توانايي ذخيرهسازي بينهايت تراكنش داده را دارد. همچنين دادههاي موجود در سيستم مذكور، براي هميشه امن هستند. قطعا چنين حافظهاي وجود خارجي ندارد، اما اگر اين سيستم توسعه پيدا ميكرد، طراحي پردازندهها بسيار آسان ميشد. پردازندهها در چنين فرضيهاي تنها براي انجام فرايندهاي رياضي به واحدهاي منطقي نياز پيدا ميكردند. يك سيستم هم براي مديريت تبادل دادهها مورد استفاده قرار ميگرفت. ازآنجاكه سيستم جادويي فرضي، امكان ارسال و دريافت آني تمامي اعداد را داشت، هيچيك از واحدهاي منطقي پردازنده، نيازي به منتظر ماندن براي تبادل دادهها نداشتند.
همانطور كه ميدانيم، سيستم جادويي فرضيهي بالا وجود ندارد و احتمال توسعهي آن نيز به صفر ميل ميكند. بهجاي سيستم مذكور، درحالحاضر درايوهاي حالت جامد را در دست داريم كه حتي بهترين نمونهها در ميان آنها نيز توانايي مديريت تمامي تبادلهاي دادهاي موردنياز پردازندههاي عادي را ندارند.
چرا حافظه SSD هم توانايي مديريت تمام نيازهاي دادهاي پردازنده را ندارند؟ پردازندههاي مدرن، سرعت عملكرد زيادي دارند و بهعنوان مثال، در هر سيكل كلاك، امكان جمع كردن دو مقدار عدد صحيح ۶۴ بيتي را با هم دارند. به بيان ديگر، چنين عملياتي براي يك پردازندهي چهار گيگاهرتزي، تنها ۰/۰۰۰۰۰۰۰۰۰۲۵ يا يكچهارم نانوثانيه طول ميكشد. حال تصور كنيد كه هارد درايوهاي مكانيكي، تنها براي پيدا كردن داده به چند هزار نانوثانيه نياز دارند. بهعلاوه، زمان تبادل داده را هم بايد به اين مقدار اضافه كنيد. حافظههاي SSD با سرعت بسيار بالا هم براي پيدا كردن داده به چندده يا چندصد نانوثانيه زمان نياز دارند.
درايوهاي ذخيرهسازي سريع را نميتوان در داخل پردازندهها توسعه داد. درنتيجه هميشه يك فاصلهي فيزيكي بين بخش ذخيرهسازي و پردازندهي مركزي وجود دارد. همين فاصله، زمان دسترسي و جابهجايي داده را افزايش ميدهد كه موجب بدتر شدن شرايط ميشود.
براي رفع چالش بالا، بايد سيستم ذخيرهسازي دادهي ديگري بين پردازنده و حافظه ذخيره سازي اصلي اضافه كنيم. حافظهي جديد، بايد سريعتر از درايو بوده و توانايي مديريت تمامي فرايندهاي تبادل داده را بهصورت همزمان داشته باشد. از همه مهمتر، اين حافظه بايد هرچه بيشتر به پردازنده نزديك باشد. حافظهاي كه تركيبي از پيشنيازها را داشته باشد، در كامپيوترهاي شخصي وجود دارد و آن را بهنام رم (RAM) ميشناسيم. به بيان بهتر، نام DRAM براي اين نوع از حافظه استفاده ميشود كه توانايي تبادل دادهها را با سرعتي بسيار بيشتر از هر درايو ذخيرهسازي دارد.
حافظهي رم با وجود سرعت بالايي كه به كامپيوتر ارائه ميكند، توانايي ذخيرهي حجم زيادي از داده را ندارد. در مقام مقايسه، جالب است بدانيد تراشههاي بزرگ DDR4 هر يك توانايي ذخيرهي ۳۲ گيگابيت را دارند، درحاليكه بزرگترين هارد ها، ظرفيتي چهار هزار برابر بيشتر را ارائه ميكنند.
با وجود اينكه اضافه كردن رم، اشكال سرعت در تبادل داده را از بين ميبرد، براي بهبود سيستم به بخشهاي سختافزاري و نرمافزاري ديگري هم نياز پيدا خواهيم كرد. اين سيستمهاي اضافه، تصميم ميگيرند كه چه دادهاي بايد در حافظهي محدود DRAM بهصورت آماده براي پردازندهي مركزي، نگهداري شود.
حافظههاي DRAM برخلاف درايوهاي مرسوم ذخيرهسازي، امكان توليد بهصورت تراشه را دارند كه بهنام embedded DRAM شناخته ميشود. بااينحال، باز هم ابعاد بسيار كوچك پردازنده مانع از آن ميشود كه تراشههاي DRAM را در CPU جانمايي كنيم.
اكثر حافظههاي DRAM در نزديكترين موقعيت نسبت به پردازنده قرار دارند و روي مادربرد نصب ميشوند. هميشه جديدترين قطعه به CPU، حافظهي DRAM است، اما باز هم توانايي ارائهي سرعت بالاي كافي را ندارد. DRAM براي پيدا كردن دادههاي مدانديشه متخصصين، به ۱۰۰ نانوثانيه زمان نياز داشته و البته حداقل توانايي جابهجايي ميلياردها بيت داده را در هر ثانيه دارد. ظاهرا براي افزايش هرچه سريعتر سرعت انتقال داده، به يك بخش ذخيرهسازي ديگر بين واحدهاي پردازشي CPU و DRAM نياز داريم.
پيش از رسيدن به راهكار نهايي، بايد يك قطعهي ذخيرهسازي ديگر را نيز مطالعه كنيم. SRAM يا Static Random Access Mempory تفاوتهايي كلي با DRAM دارد. DRAM از خازنهاي ميكروسكوپي براي ذخيرهسازي داده بهصورت بار الكتريكي استفاده ميكند. در SRAM از ترانزيستور براي همين منظور استفاده ميشود كه سرعتي بسيار بالا و نزديك به واحدهاي منطقي پردازندهي مركزي دارد. SRAM سرعتي حدود ۱۰ برابر DRAM دارد.
حافظههاي SRAM با وجود سرعت بيشتر، باز هم محدوديت فضا دارند. حافظههاي مبتني بر ترانزيستور، فضاي بسيار بيشتري نسبت به DRAM اشغال ميكنند. يك ماژول SRAM با ابعاد فيزكي نزديك به يك ماژول DDR4، تنها ۱۰۰ مگابايت حافظهي ذخيرهسازي دارد. البته ازآنجاكه SRAM با فرايندي شبيه به ساخت CPU توليد ميشود، ميتوان از آن در داخل تراشهي پردازندهي مركزي استفاده و حافظه را هرچه نزديكتر به واحدهاي منطقي جانمايي كرد.
در مراحل بالا، در هر مرتبه كه يك فرايند ذخيرهسازي بين درايو ذخيرهسازي و پردازنده اضافه كرديم، سرعت افزايش پيدا كرد و ظرفيت كمتر شد. هنوز هم ميتوان در فرايندهاي بالا، مراحلي را اضافه كرد تا حافظههايي با ظرفيت كمتر و سرعت بيشتر، به سيستم اضافه شوند.
باتوجهبه توضيحات بالا، اكنون ميتوان تعريف متخصص و دقيقتري از حافظهي كش ارائه كرد. حافظهي كش، تعدادي بلوك حافظهي SRAM است كه همگي در داخل پردازنده قرار دارند. اين واحدها وظيفه دارند تا واحدهاي منطقي پردازنده را هميشه مشغول نگه دارند. آنها داده را با سرعتهايي بسيار بالا به واحدهاي منطقي ارسال كرده و از آنها دريافت ميكنند.
كش يا پاركينگ طبقاتي
همانطور كه ديديد، كش به اين دليل ايجاد شد كه هيچ سيستم جادويي ذخيرهسازي براي پاسخ به نيازهاي شديد دادهاي واحدهاي منطقي پردازنده وجود ندارد. پردازندههاي مدرن مركزي و گرافيكي امروزي، همگي داراي تعدادي بلوك SRAM هستند كه ازلحاظ داخلي بهصورت سلسلهمراتبي دستهبندي شدهاند. درنهايت، ترتيبي از حافظههاي كش شبيه به تصوير زير، جانمايي شدهاند.
در تصوير بالا، مستطيل خطچين پردازنده را نشان ميدهد. ALU يا واحدهاي منطقي محاسباتي، در سمت چپ قرار دارند كه وظيفهي اصلي محاسبههاي وظايف را برعهده ميگيرند. نزديكترين واحد ذخيرهسازي به واحدهاي منطقي، اصولا در دستهبندي كش جاي نميگيرد و همانطور كه ميبينيد، بهنام Registers شناخته ميشود. واحد مذكور، گروهي از فايلهاي موسوم به رجيستر است.
هريك از واحدهاي رجيستر، يك عدد تكي را نگهداري ميكنند، مثلا يك عدد صحيح ۶۴ بيتي. مقادير هر بخش ميتواند هر نوع دادهاي باشد. مثلا در هر رجيستر شايد كد يك دستورالعمل خاص يا حتي آدرس مموري دادهاي ديگر ذخيره شود. فايل رجيستر در يك پردازندهي روميزي بسيار كوچك است. بهعنوان مثال، در پردازندهي Core i9-9900K در هر هسته، دو مجموعهي رجيستر قرار دارد. دستهي مخصوص اعداد صحيح، تنها ۱۸۰ رجيستر ۶۴ بيتي دارد. رجيستر ديگر براي اعداد برداري استفاده ميشود و ظرفيت ۱۶۸ ورودي ۲۵۶ بيتي دارد. درنتيجه، ظرفيت كل فايل رجيستر براي هر هسته، كمي كمتر از هفت كيلوبايت خواهد بود. در مقام مقايسه، فايلهاي رجيستر در مجموعههاي Streaming Multiprocessors مثل پردازندهي گرافيكي GeForce RTX 2080 Ti، ابعاد ۲۵۶ كيلوبايتي دارند. Streaming Multiprocessors، تراشههايي هستند كه در پردازندهي گرافيكي عملكردي شبيه به CPU دارند.
رجيسترها ازنوع SRAM هستند، اما سرعت آنها با واحدهاي منطقي متصل برابري ميكند. درنتيجه آنها داده را در هر چرخهي كلاك، با ALU تبادل ميكنند. همانطور كه ديديد، اين واحدها براي ذخيرهسازي دادهي زيادي طراحي نشدهاند. درنتيجه، هميشه يك واحد بزرگتر ذخيرهسازي داده دركنار آنها وجود دارد كه همان نام آشناي حافظهي كش L1 را براي آن انتخاب ميكنيم.
درتصوير بالا، نماي نزديكي از يك هستهي پردازندهي روميزي اينتل اسكايليك را مشاهده ميكنيد. واحدهاي ALU و رجيستر در بالا و سمت چپ تصوير ديده ميشوند كه در داخل چهارضلعي سبز قرار دارند. در سمت راست و بالاي تصوير، حافظهي كش L1 در چهارضلعي سفيد ديده ميشود. اين حافظه ظرفيت محدود ۳۲ كيلوبايتي دارد. همانطور كه ميبينيد، L1 مانند رجيستر در فاصلهي بسيار نزديك به واحدهاي منطقي قرار دارد و سرعتي برابر با آنها را ارائه ميكند.
چهارضلعي سفيدرنگ ديگر در تصوير بالا، كش موسوم به Level 1 Instruction را نشان ميدهد كه آن هم ظرفيت محدود ۳۲ كيلوبايتي دارد. همانطور كه از نام حافظه بر ميآيد، وظيفهي ذخيرهسازي دستورهاي متعددي را برعهده دارد كه آمادهي تقسيمشدن به عمليات كوچكتر موسوم به μops هستند و درنهايت براي ALU ارسال ميشوند. براي اين دستورها نيز يك حافظهي كش وجود دارد كه بهنام L0 شناخته ميشود. اين حافظه كوچكتر است و در فاصلهاي نزديكتر نسبت به حافظهي L1 قرار ميگيرد. L0 تنها توانايي ذخيرهسازي ۱،۵۰۰ عمليات را دارد.
شايد از خود بپرسيد كه چرا بلوكهاي حافظهي SRAM در پردازنده كوچك هستند و آنها را در ظرفيتهاي مگابايتي توليد نميكنند. دادهها و دستورالعملهايي كه در كش نگهداري ميشوند، فضايي برابر با واحدهاي منطقي در تراشهي پردازنده اشغال ميكنند. درنتيجه افزايش ابعاد آنها منجر به افزايش ابعاد كل قالب تراشه ميشود. البته دليل اصلي پايين بودن ظرفيت در حد كيلوبايت اين است كه با افزايش ابعاد سيستم ذخيرهسازي، زمان موردنياز براي دسترسي به داده هم افزايش پيدا ميكند. حافظهي L1 بايد سرعت عمل بسيار زيادي داشته باشد. به همين دليل بايد بين ابعاد و سرعت تعادل ايجاد شود. براي دسترسي به داده در اين حافظه و استخراج آن، حداقل به پنج سيكل كلاك نياز داريم.
اگر در يك پردازنده تنها از يك حافظهي كش استفاده ميشد، بهرهوري و كارايي با مانع بزرگي روبهرو ميشد. به همين دليل لايهي ديگر ذخيرهساز هم نياز خواهد بود كه بهنام Level 2 يا همان L2 شناخته ميشود و دستورالعمل و داده را نگهداري ميكند.
حافظهي L2 هميشه بزرگتر از L1 است. در پردازندههاي AMD Zen 2 شاهد استفاده از حافظههاي L2 با ظرفيت ۵۱۲ كيلوبايت هستيم كه دادههاي موردنياز L1 را هميشه دردسترس قرار ميدهند. البته همانطور كه گفته شد، با افزايش ابعاد حافظه، سرعت كاهش پيدا ميكند. درنتيجه حافظههاي L2 براي پيدا كردن داده نسبت به L1 به دوبرابر زمان نياز دارند. در گذشته و در دوران پردازندههاي پنتيوم، كش L2 بهصورت بخشي جدا در رم يا مادربرد استفاده ميشد و بهمرور به تراشهي اصلي CPU رسيد. همين مسير، براي اضافه شدن كش جديد به پردازندهها طي شد و لايهي جديد، همزمان با توسعهي پردازندههاي چندهستهاي به تراشههاي اصلي اضافه شد.
تصوير بالا از تراشهي اينتل Kaby Lake، چهار هسته را در سمت چپ و مركز نشان ميدهد (نيمي از تراشه در سمت راست، توسط پردازندهي گرافيكي يكپارچه اشغال شده است). هر هسته، مجموعهاي اختصاصي از حافظههاي كش L1 و L2 دارد كه در چهارضلعيهاي سفيد و زرد ميبينيد. البته هستهها مجهز به يك لايهي سوم از حافظهي SRAM نيز هستند.
كش L3 يا Level 3 در اطراف يك هستهي تكي ديده شده، اما با هستههاي ديگر به اشتراك گذاشته ميشود. درواقع هر هسته ميتواند آزادانه به دادههاي موجود در كش L3 ديگر دسترسي پيدا كند. اين حافظهها ظرفيت بسيار بيشتري به كشهاي ديگر دارند و عموما بين دو تا ۳۲ مگابايت ظرفيت ارائه ميكنند. البته سرعت آنها كمتر است و بهصورت ميانگين به ۳۰ چرخهي كلاك ميرسد. از همه مهمتر، اگر هستهاي به دادههاي موجود در بلوك كش در فاصلهي دور نياز داشته باشد، سرعت كاهش پيدا ميكند.
در تصوير زير، يك هستهي تكي در معماري AMD Zen 2 را مشاهده ميكنيد. كش L1 با ظرفيت ۳۲ كيلوبايت در مستطيلهاي سفيد، كش L2 با ظرفيت ۵۱۲ كيلوبايت در مستطيلهاي زرد و كش بزرگ چهار مگابايتي L3 در مستطيل قرمز ديده ميشود.
با مقايسهي ابعاد مستطيلها اين سؤال ايجاد ميشود كه چرا حافظهي كوچك ۳۲ كيلوبايتي L1، فضاي بيشتري نسبت به حافظههاي ديگر اشغال كرده است؟
مفهومي مهمتر از اعداد
كش، با افزايش سرعت تبادل داده به واحدهاي منطقي و نگه داشتن يك كپي از دستورالعملهاي رايج و پركاربرد در فاصلهاي نزديك به واحدها، قدرت و بهرهوري پردازنده را افزايش ميدهد. اطلاعاتي كه در كش ذخيره شده، به دو بخش تقسيم ميشود: خود داده و موقعيت آن در حافظهي ذخيرهسازي اصلي سيستم. موقعيت يا آدرس، بهنام برچسب يا تگ كش شناخته ميشود.
وقتي پردازنده، يك عمليات را با نياز به خواندن يا نوشتن داده از حافظه اجرا ميكند، ابتدا تگهاي موجود در كش L1 مطالعه ميشوند. اگر تگ مناسب در L1 موجود باشد، دسترسي به داده بهسرعت رخ ميدهد (Cache Hit)، اگر هم تگ در حافظهي كش سطح پايين پيدا نشود، رخداد موسوم به Cache Miss اتفاق ميافتد. در چنين وضعيتي يك تگ جديد در L1 ساخته شده و ساير بخشهاي معماري پردازنده، وارد عمل ميشود تا داده را در كشهاي سطوح ديگر جستوجو كند. درنهايت شايد پردازنده مجبور به مراجعه به حافظهي ذخيرهسازي اصلي بشود. ازطرفي براي ايجاد فضا در حافظهي L1، هميشه بايد بخش ديگر از داخل L2 خارج شود.
فرايندي كه در بالا توضيح داده شد باعث ميشود كه هميشه، دادهها در روندي تصادفي جابهجا شوند كه البته فرايند در چند چرخهي محدود پردازنده رخ ميدهد. براي رسيدن به چنين عملكردي به ساختاري پيچيده نياز داريم كه مديريت SRAM و دادهها را برعهده بگيرد. به بيان سادهتر، اگر يك هستهي پردانده تنها يك واحد منطقي داشته باشد، حافظهي L1 بسيار يادهتر ميشود، اما ازآنجاكه چندين واحد منطقي در پردازنده داريم، كش براي حفظ جريان دادهها به چندين اتصال نياز پيدا ميكند.
با استفاده از نرمافزارهاي رايگان مانند CPU-Z ميتوانيد اطلاعاتي كلي از ساختار پردازندهي مركزي خود به دست بياوريد. درك اين اطلاعات، كمك شاياني به درك بهتر ساختار كش ميكند. يكي از مهمترين المانهاي اطلاعاتي، set associative نام دارد كه قوانين و دستورالعملهاي چگونگي كپي كردن بلوكهاي داده از حافظهي سيستم به كش را مشخص ميكند.
اطلاعات كش بالا، متعلق به پردازندهي Core i7-9700K هستند. حافظههاي كش L1 در اين پردازنده هركدام به ۶۴ بلوك كوچكتر تقسيم ميشوند كه Sets نام دارند. بهعلاوه، هر بخش كوچكتر مجددا به بخشهاي كوچكتري بهنام cache lines تقسيم ميشوند كه هركدام ابعاد ۶۴ بايتي دارند. بخش set associatives يعني يك بلوك داده از حافظهي سيستمي در مجموعهاي مشخص به cache lines مرتبط شده است.
در بخشي از اطلاعات بالا، عبارت 8way را مشاهده ميكنيم. يعني هر بلوك داده در هر دسته، به هشت خط كش مرتبط ميشود. هرچه تعداد ارتباطها بيشتر باشد، شانس cache hit افزايش پيدا ميكند. البته اضافه شدن تعداد خطوط، با بيشتر شدن پيچيدگي همراه خواهد بود و توان مصرفي را افزايش ميدهد. ازطرفي كارايي و بهرهوري پردازنده هم دچار اشكال ميشود، چون پردازنده بايد براي هر بلوك داده، خطوط كش بيشتري را پردازش كند.
يكي ديگر از دلايل افزايش پيچيدگي كش، به چگونگي نگهداري و مديريت داده در سطوح گوناگون مربوط ميشود. قوانين مربوط به اين فرايند در بخشي بهنام inclusion policy تنظيم ميشوند. بهعنوان مثال، پردازندههاي اينتل ساختار fully inclusive L1+L3 دارند. به بيان ديگر، دادههايي كه در L1 هستند، امكان حضور در L3 را هم دارند. شايد در نگاه اول چنين ساختاري موجب هدر رفتن فضاي كش باشد، اما مزيت اصلي در آنجا است كه اگر پردازنده در پيدا كردن تگ داده در سطح پايينتر كش ناموفق بود، نيازي به جستوجو در سطح بالاتر نخواهد داشت. در همين پردازندها، بخش L2 ديگر شامل دادهها نميشود. به بيان ديگر، دادههايي كه در L2 هستند، در سطح ديگر كپي نميشوند.
روند عدم كپي دادهها در L2 باعث صرفهجويي در فضاي حافظه ميشود، اما سيستم حافظهي تراشه مجبور ميشود تا براي پيدا كردن يك تگ يافتنشده (missed tag) حافظهي بزرگتر L3 را جستوجو كند. رويكرد ديگري در معماري كش وجود دارد كه بهنام Victim caches شناخته ميشود و شبيه به روند بالا است. اين نوع از كش براي ذخيرهسازي دادهي خارجشده از سطح پايينتر استفاده ميشود. بهعنوان مثال، پردازندههاي AMD Zen 2 از L3 victim cache استفاده ميكنند كه تنها دادههاي كش L2 را ذخيره ميكند.
در طراحي كش، ساختار و دستورالعمل مهم ديگري هم بايد مدانديشه متخصصين قرار بگيرد. در اين ساختار زمان ذخيرهي داده روي كش يا حافظهي اصلي سيستم، مشخص ميشود. ساختار مذكور بهنام Write policies شناخته ميشود كه اكثر پردازندههاي مدرن از سياست موسوم به write-back بهره ميبرند. به بيان ديگر وقتي داده روي يك سطح از حافظهي كش نوشته ميشود، كمي تأخير نياز خواهد بود تا حافظهي اصلي با يك كپي از دادهي مذكور، بهروز شود. در اكثر از موارد، توقف در ارسال داده تا زمانيكه داده در كش باشد، ادامه پيدا ميكند. تنها زمانيكه داده از كش خارج شود، حافظهي رم اطلاعات را دريافت ميكند.
طراحان پردازنده، براي تصميمگيري بين انتخابهاي گوناگون مقدار، نوع و سياستهاي اجرايي كش، نياز به ظرفيت بيشتر در پردازنده را با پيچيدگي بيشتر و فضاي بيشتر قالب تراشه، در وضعيتي تعادلي مطالعه ميكنند. در يك دههي گذشته، پايينترين سطح حافظهي كش تغيير زيادي را تجربه نكرده است. درمقابل، ابعاد حافظهي L3 روند افزايشي را سپري كرد. ۱۰ سال پيش، براي خريد پردازندهاي با ۱۲ مگابايت كش L3 بايد هزينهاي حدود هزار دلار پرداخت ميشد. امروز با پرداخت هزينهاي نصف، پردازنده با ۶۴ مگابايت حافظهي كش دراختيار متخصصان قرار دارد.
چرا ظرفيت حافظهي كش CPU مدام در حال افزايش است؟
دليل اينكه مدام ظرفيت حافظهي كش افزايش مييابد آن است كه با افزايش حافظهي كش، شانس دسترسي به اطلاعات در اين حافظه بيشتر شده و نياز به رم كمتر ميشود و اين موضوع بهمعني افزايش بازده سيستم خواهد بود.
در نمودار بالا كه از مطالعه انندتك تهيه شده است ميتوانيد تأثير اضافه شدن حافظهي ۱۲۸ مگابايتي L4 Cache را در كاهش تأخير در هر كلاك مشاهده كنيد. خط قرمز مربوط به پردازندهاي است كه حافظهي L4 دارد. دقت داشته باشيد كه براي فايلهاي سنگين، سرعت آن تقريبا دو برابر ديگر پردازندههاي اينتل است.
طراحي كش چه تأثيري روي بازده دارد؟
تأثير اضافه شدن كش به CPU ارتباط مستقيم به نرخ مراجعات موفق پردازنده به كش دارد. هرچه دفعات مراجعهي CPU كمتر با شكست روبهرو شود، بازده پردازنده افزايش مييابد. در ادامه چند مثال براي اين موضوع ارائه ميكنيم تا ديد بهتري نسبت به آن داشته باشيد.
تصوير كنيد كه يك CPU مجبور باشد اطلاعات مشخصي را ۱۰۰ بار پشت سر هم از L1 بخواند. حافظهي L1 تأخير يك نانوثانيه دارد و هر ۱۰۰ بار نيز حافظه با موفقيت اطلاعات را ميخواند. به اين ترتيب پردازنده ۱۰۰ نانوثانيه براي انجام اين عمليات زمان صرف ميكند.
حال تصور كنيد كه همان CPU با نرخ ۹۹ درصد اطلاعات را از L1 بخواند و صدمين مراجعهي آن به L1 بدون پاسخ بماند و مجبور باشد به L2 مراجعه كنيد. تأخير L2 ده سيكل يا ۱۰ نانوثانيه است به اين ترتيب پردازنده ۹۹ نانوثانيه براي كسب اطلاعات از L1 و ۱۰ نانوثانيه براي كسب اطلاعات از L2 صرف ميكند. اين بدين معني است كه اگر يك درصد از مراجعات پردازنده به حافظهي L1 بدون پاسخ بماند ۱۰ درصد سرعت پردازنده كاهش مييابد.
در دنياي واقعي حافظهي L1 بين ۹۵ تا ۹۷ درصد مراجعات پردازنده را پاسخ ميدهد، اما همان دو درصد اختلاف ميتواند تأثير محسوسي در سرعت پردازش امور داشته باشد. تازه اين براي زماني است كه مطمئن باشيم اطلاعاتي كه در L1 يافت نشده است حتما در L2 وجود دارد. اما در دنياي واقعي بعضي اوقات اطلاعات مورد نياز پردازنده حتي در L3 و L4 نيز وجود ندارد و پردازنده مجبور به مراجعه به رم است. اگر پردازنده مجبور به كسب اطلاعات از رم باشد آنوقت سيكل پاسخدهي به ۸۰ تا ۱۲۰ نانوثانيه افزايش مييابد.
وقتي پردازندههاي قديمي سري بولدوزر AMD را با رقباي اينتلي آن مقايسه كنيم، ممباحثه طراحي كش و تأثير آن روي بازده، به يك عامل بسيار مهم تبديل ميشود؛ عاملي كه معادلات بازي را بر هم ميزند. بسياري از متخصص كارشناسان، يكي از دلايل مهم عقب ماندن AMD از Intel در سالهاي گذشته در قدرت و بازدهي پردازندهها را طراحي كش ميدانند.
پردازندههاي سري بولدوزر AMD از اشكال Cache Contention رنج ميبردند. اين اشكال زماني رخ ميداد كه دو رشته يا Thread متفاوت اطلاعات را روي يك سكتور از كش ذخيره ميكردند. اين اشكال تأثير بسيار منفي روي بازده هر دو Thread داشت. تصور كنيد كه يك هسته براي كسب اطلاعات مدانديشه متخصصين خود به كش مراجعه ميكند، اما هستهاي ديگر اطلاعات مدانديشه متخصصين خود را روي همان بخش از حافظه كپي كرده است. در اين صورت هسته مجبور است يك بار تمام سطوح كش را چك كرده و سپس به رم مراجعه كرده و مجددا اطلاعات مدانديشه متخصصين خود را در سطح اول كش بنويسد. اين اشكال حتي در پردازندههاي مجهز به معماري Streamroller AMD نيز وجود داشت و حتي تلاش اين شركت براي اختصاص ۹۶ كيلوبايت به L1 Code Cache هم مؤثر نبود. از طرفي حتي استفاده از فناوري HSA يا معماري ناهمگن نيز در اين باره چندان مؤثر نبود. البته AMD با معرفي معماري Zen در سالهاي اخير سهم عمدهاي از چالشها را برطرف كرد و حتي موفق به كسب سهم بازار بيشتر از اينتل شد.
به هر حال، كش ممباحثه فوقالعاده پيچيدهاي است كه در سرعت پردازش دستورها نقش مهمي را ايفا ميكند و بهانديشه متخصصين ميرسد مديريت بهتر آن در پردازندههاي اينتل يكي از مهمترين دلايل برتري محصولات اين شركت در رقابت با پردازندههاي AMD بود.
مشخصات متخصص كامل، ارزش پردازنده در فروشگاههاي اينترنتي و مقايسهي كامل انواع CPU را در بخش محصولات مشاهده كنيد؛ انواع CPU اينتل از جمله سري Core i3، Core i5 و Core i7 و انواع پردازنده AMD رايزن (Ryzen) براي مقايسه و خريد دردسترس متخصصان است.
هم انديشي ها