سنجش و بهبود کارایی کش

همه miss های کش یکسان نیستند، و درک علل آن‌ها اولین گام برای بهبود کارایی است. این مقاله توضیح می‌دهد چگونه تأثیر واقعی کارایی کش را با استفاده از نرخ miss و جریمه miss محاسبه کنیم، سه علت رایج miss های کش را دسته‌بندی می‌کند، و استراتژی‌های عملی برای کاهش هرکدام را توضیح می‌دهد.

میانگین زمان دسترسی حافظهنرخ Miss کشجریمه Miss,

~4 دقیقه مطالعه · آخرین به‌روزرسانی ۱۵ شهریور ۱۴۰۵

سنجش کمی کارایی کش

برای استدلال دقیق به‌جای شهودی درباره کارایی کش، دو سنجه ضروری‌اند: Miss Rate، بخشی از دسترسی‌های حافظه که منجر به یک cache miss می‌شوند، و Miss Penalty، زمان اضافه‌ای که برای واکشی داده از یک سطح کندتر سلسله‌مراتب حافظه هنگام رخ دادن یک miss مورد نیاز است.

این دو در یک سنجه کلی واحد ترکیب می‌شوند:

میانگین زمان دسترسی حافظه =
Hit Time + (Miss Rate × Miss Penalty)

این فرمول نشان می‌دهد بهبود کارایی کش یعنی کاهش یک یا چند مورد از سه عامل: زمان دسترسی به خود کش، دفعات رخ دادن miss، و هزینه هر miss هنگام رخ دادن.

سه C: دسته‌بندی چرایی رخ دادن Miss ها

Cache miss ها معمولاً در سه دسته گروه‌بندی می‌شوند، که اغلب Three Cs نامیده می‌شوند.

  • Compulsory Misses اولین باری که یک بلوک از حافظه دسترسی می‌شود رخ می‌دهند، چون نمی‌تواند از قبل در کش باشد. این‌ها گاهی cold-start miss نامیده می‌شوند و تا حد زیادی اجتناب‌ناپذیرند.
  • Capacity Misses زمانی رخ می‌دهند که کش صرفاً برای نگه‌داشتن تمام داده‌ای که یک برنامه هم‌زمان نیاز دارد بسیار کوچک است، و بلوک‌های قبلاً کش‌شده را مجبور به تخلیه می‌کند حتی اگر ممکن بود به‌زودی دوباره مورد نیاز باشند.
  • Conflict Misses به‌طور خاص در کش‌های مستقیم‌نگاشت‌شده یا با associativity محدود، که پیش‌تر در این مجموعه بحث شد، رخ می‌دهند، وقتی دو بلوک حافظه پرکاربرد به همان مکان کش نگاشت می‌شوند، و به‌طور مکرر یکدیگر را تخلیه می‌کنند حتی اگر کش در کل فضای استفاده‌نشده‌ای در جای دیگر داشته باشد.

استراتژی: افزایش Associativity

یک راه برای کاهش conflict miss ها این است که اجازه داده شود هر آدرس حافظه به بیش از یک مکان کش ممکن نگاشت شود به‌جای دقیقاً یکی، رویکردی به نام Set-Associative Caching. این کار احتمال برخورد دو بلوک پرکاربرد و تخلیه مکرر یکدیگر را کاهش می‌دهد، به قیمت نیاز به سخت‌افزار مقایسه اضافی برای بررسی چند مکان ممکن در هر دسترسی.

استراتژی: افزایش اندازه بلوک

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

استراتژی: افزودن سطوح کش بیشتر

به‌جای تکیه بر یک کش واحد، بیشتر پردازنده‌های امروزی از یک سلسله‌مراتب Multi-Level Cache استفاده می‌کنند، با یک کش سطح‌اول بسیار کوچک و بسیار سریع که توسط یک کش سطح‌دوم بزرگ‌تر و کمی کندتر پشتیبانی می‌شود، که خود به‌نوبه‌خود توسط حافظه اصلی پشتیبانی می‌شود. یک miss در سطح اول اغلب همچنان در سطح دوم hit می‌شود، که جریمه miss میانگین مؤثر را در مقایسه با رفتن تا حافظه اصلی به‌طور قابل‌توجهی کاهش می‌دهد.

چرا این مبادلات نیازمند توازن دقیق‌اند

هرکدام از این استراتژی‌ها یک جنبه از کارایی کش را بهبود می‌بخشد در حالی که به‌طور بالقوه جنبه دیگری را بدتر می‌کند — کش‌های بزرگ‌تر capacity miss را کاهش می‌دهند اما زمان hit و هزینه را افزایش می‌دهند، associativity بالاتر conflict miss را کاهش می‌دهد اما پیچیدگی سخت‌افزاری اضافه می‌کند، و بلوک‌های بزرگ‌تر compulsory miss را کاهش می‌دهند اما جریمه miss را افزایش می‌دهند. طراحی‌های پردازنده واقعی نتیجه توازن دقیق این عوامل رقیب بر اساس بارهای کاری خاصی هستند که انتظار می‌رود اجرا کنند.

نوشته و پژوهش‌شده توسط دکتر شاهین صیامی

مقالات مرتبط

ماشین‌های مجازی: اجرای چند سیستم مجزا روی یک کامپیوتر

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

ادامه

حافظه قابل‌اعتماد: سخت‌افزار چگونه خطاهای داده را تشخیص و تصحیح می‌کند

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

ادامه

اصول کش: حافظه کوچک و سریع چگونه پیش‌بینی می‌کند بعداً چه چیزی نیاز است

یک کش فقط به این دلیل کار می‌کند که برنامه‌ها تمایل دارند داده یکسان یا نزدیک به هم را به‌طور تکراری دسترسی کنند نه به‌صورت تصادفی. این مقاله اصل محلیت که کش را مؤثر می‌کند را توضیح می‌دهد، یک کش مستقیم‌نگاشت‌شده چگونه داده را با استفاده از یک آدرس مکان‌یابی می‌کند، و در یک hit کش در مقابل یک miss کش چه اتفاقی می‌افتد.

ادامه

سلسله‌مراتب حافظه: چرا کامپیوترها از چند نوع حافظه استفاده می‌کنند

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

ادامه

تصورات غلط رایج درباره طراحی پردازنده و تصویر کلی فصل چهارم

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

ادامه

پایپ‌لاین‌های دنیای واقعی: مقایسه ARM و Intel، و تسریع ضرب ماتریس

مفاهیم نظری پایپ‌لاین در پردازنده‌های تجاری واقعی شکل مشخصی به خود می‌گیرند، که بسته به اهداف طراحی‌شان از نظر عمق پایپ‌لاین و عرض صدور به‌طور گسترده متفاوت‌اند. این مقاله مقایسه می‌کند ARM Cortex-A53 و Intel Core i7 چگونه پایپ‌لاینینگ را متفاوت برای کارایی توان در مقابل کارایی خام پیاده‌سازی می‌کنند، سپس نشان می‌دهد موازی‌سازی سطح دستور چگونه ضرب ماتریس را در عمل تسریع می‌کند.

ادامه
سنجش و بهبود کارایی کش | دکتر شاهین صیامی