ساخت حافظهٔ نهان سایهزن هنگام نخستین اجرای یک بازی، طاقتفرساترین بخش ماجراست. یادم میآید وقتی نسخهٔ بازسازیشدهٔ The Last of Us Part ۱ برای PC منتشر شد، آن را گرفتم و فقط بهدلیل طولانیشدن کامپایل سایهزنها، یک ساعت منتظر ماندم تا سرانجام وارد خود بازی شوم.
کامپایل سایهزن به GPU کمک میکند سایهزنها را به کد بومی و قابلاجرا تبدیل کند؛ فرایندی که تنها یک بار انجام میشود. بااینحال، گاهی این حافظهٔ نهان ناخواسته پاک میشود و چون CPU باید همهچیز را دوباره کامپایل کند، فشار بیشتری بر آن وارد میشود و بازی به لکنت میافتد.
خوشبختانه با تغییر تنها یک گزینه در Nvidia Control Panel میتوان این مشکل را برطرف کرد تا بازیها پس از بار نخست، دیگر ناچار به کامپایل دوبارهٔ سایهزنها نباشند.
چرا حافظهٔ نهان سایهزن مدام پاک میشود؟
محدودیت پیشفرض Nvidia سایهزنهای بازیهای قدیمیتر را حذف میکند

کامپایل سایهزن معمولاً فرایندی یکباره است و GPU دادههای کامپایلشده را در پوشهٔ درایور روی درایو C: ذخیره میکند. بااینحال، انباشتهشدن دادههای چندین بازی ممکن است فضای زیادی اشغال کند و درایور GPU برای بازکردن جا برای دادههای تازهتر، حافظهٔ نهان بازیهای دیگر را کنار بگذارد.
این اتفاق معمولاً از آنجا ناشی میشود که درایور GPU سقفی ثابت و گاه ناکافی برای اندازهٔ حافظهٔ نهان تعیین میکند. در نتیجه، حافظهٔ نهان پاک میشود و بازی ناچار است سایهزنها را دوباره کامپایل کند؛ فرایندی که به لکنت میانجامد. وقتی بازیای را دوباره اجرا میکنید که سایهزنهایش پاک شدهاند، بار کامپایل بر دوش CPU میافتد و لکنت تا زمان تکمیل کامپایل همهٔ سایهزنها ادامه مییابد.
پس از آن نیز ممکن است با رفتن سراغ بازی دیگری، در صورت پرشدن حافظهٔ نهان، سایهزنهای بازی قبلی پاک شوند و این چرخه همینطور ادامه پیدا کند.
چگونه سقف حافظهٔ نهان سایهزن را افزایش دهیم؟
تنها یک گزینه در کنترلپنل Nvidia

AMD و Nvidia هر دو امکان تعیین اندازهای مشخص برای حافظهٔ نهان بازیها را فراهم میکنند و اگر مانند من کتابخانهٔ بزرگی داشته باشید، احتمالاً بارها با کامپایل دوبارهٔ سایهزنها روبهرو خواهید شد. برای جلوگیری از این مشکل، سقفی دلخواه برای اندازهٔ حافظهٔ نهان سایهزن تعیین کنید.
برای این کار، مراحل زیر را دنبال کنید:
- کنترلپنل Nvidia (Nvidia Control Panel) را باز کنید.
- به «مدیریت تنظیمات سهبعدی (Manage 3D settings)» و سپس «تنظیمات سراسری (Global settings)» بروید.
- گزینهٔ «اندازهٔ حافظهٔ نهان سایهزن (Shader Cache Size)» را پیدا کنید و مقدار معقولی برای آن برگزینید تا بازیها بدون اشغال بیرویهٔ فضای ذخیرهسازی، ناچار به کامپایل دوبارهٔ سایهزنها نشوند. اگر کتابخانهٔ بازی بسیار بزرگی دارید، پیشنهاد میکنم سقف بالاتری مانند 5GB در نظر بگیرید.
متأسفانه AMD اجازه نمیدهد سقف حافظهٔ نهان سایهزن را خودتان تعیین کنید؛ درایور این بخش را بهطور خودکار مدیریت میکند، بنابراین چیزی برای تغییر وجود ندارد.
نتایج بنچمارکها چه نشان دادند؟
جهشهای لکنت بهشدت کاهش یافتند





حافظهٔ نهان سایهزن بهاندازهٔ برخی شاخصهای دیگر بر میانگین FPS اثر نمیگذارد. دلیلش این است که بازی چند ثانیه روان اجرا میشود و لکنتها بهشکل جهشهایی کوتاه و پراکنده رخ میدهند، زیرا CPU در پسزمینه مشغول کامپایل بخشهای باقیمانده است.
به همین دلیل، آزمایش نباید بر میانگین FPS متمرکز باشد؛ بلکه باید زمان فریم و کمینههای ۱% را سنجید، زیرا این دو شاخص لکنتها را آشکار میکنند.
برای آزمایش، ۳ بازی متفاوت AAA را از میان کتابخانهٔ ۱۵ بازی خود، پیش و پس از تعیین اندازهٔ دلخواه برای حافظهٔ نهان سایهزن اجرا کردم. رایانهٔ آزمایشی به RTX ۴۰۶۰، حافظهٔ DDR5 با ظرفیت 16GB و پردازندهٔ Ryzen ۷ 7800X3D مجهز بود تا مشخص شود این تغییر تا چه اندازه بر کارایی بازیها اثر میگذارد. نتایجی که به دست آوردم، در ادامه آمده است.
| نام بازی | کمینهٔ ۱% پیش از تغییر | کمینهٔ ۱% پس از تغییر | زمان فریم پیش از تغییر | زمان فریم پس از تغییر | جهش لکنت پیش از تغییر | جهش لکنت پس از تغییر |
|---|---|---|---|---|---|---|
| ۰۰۷: فرست لایت | 42FPS | ۴۴ فریمبرثانیه (افزایش ۴.۸٪) | ۱۶.۷ میلیثانیه | ۱۵.۱ میلیثانیه | ۶۵ میلیثانیه | ۴۲ میلیثانیه |
| آخرین بازمانده از ما، قسمت ۲ ریمسترشده | 38FPS | ۳۹ فریمبرثانیه (افزایش ۲.۶٪) | ۲۰ میلیثانیه | ۱۷.۸ میلیثانیه | ۷۵ میلیثانیه | ۵۸ میلیثانیه |
| سایبرپانک ۲۰۷۷ | 61FPS | ۶۲ فریمبرثانیه (افزایش ۱.۶٪) | ۱۲.۵ میلیثانیه | ۱۱.۴ میلیثانیه | ۳۸ میلیثانیه | ۳۰ میلیثانیه |
این نتایج همگانی نیستند و حتی در سامانههایی با مشخصات یکسان نیز ممکن است متفاوت باشند. مدت اجرای بازی هم بر نتیجه اثر میگذارد، زیرا پس از کامپایل و ذخیرهسازی درست سایهزنها، اجرای دوباره بازی روانتر میشود. دلیلش این است که برخی بازیها سایهزنها را پیش از آغاز بازی کامپایل میکنند، درحالیکه برخی دیگر، مانند سایبرپانک ۲۰۷۷، این کار را در پسزمینه انجام میدهند.
بااینحال، مکثهای ریز و زمان فریم پایینتر لزوماً از مشکل کامپایل سایهزنها ناشی نمیشوند و عواملی مانند بارگذاری جریانی داراییها، گلوگاه پردازنده مرکزی یا پردازنده گرافیکی و درایورهای قدیمی نیز میتوانند عامل آنها باشند. بنابراین، پیش از آنکه کامپایل سایهزنها را مقصر بدانید، میزان استفاده از قطعات را زیر نظر بگیرید.
کتابخانههای بزرگ DX12 زودتر حافظه نهان پیشفرض را پر میکنند
بیشتر افرادی که تنها چند بازی نصب کردهاند، با مشکل کامپایل سایهزنها روبهرو نمیشوند؛ زیرا سقف پیشفرض حافظه نهان معمولاً برای نگهداری سایهزنهای این بازیها کافی است. بااینحال، کاربران دارای بازیهای متعدد ممکن است به این مشکل دچار شوند؛ مشکلی که هنگام اجرای دوباره یک بازی پس از مدتی طولانی بیشتر به چشم میآید، زیرا درایور پردازنده گرافیکی ممکن است سایهزنهای آن را حذف کند و سایهزنهای بازی دیگری را جایگزینشان سازد.
بازیهای DX12 هزاران سایهزن را کامپایل میکنند و درنتیجه حافظه نهان را سریعتر از عناوین قدیمیتری مانند فورتزا هورایزن ۵ و اساسینز کرید بلک فلگ ریسینکشده پر میکنند. بنابراین، اگر کتابخانه شما پر از بازیهای جدید AAA است، برای اطمینان سقف حافظه نهان سایهزن را افزایش دهید.
منبع: این مطلب ترجمه و بومیسازی مقالهای از MakeUseOf به قلم Shaheer Khan است. مشاهده مقاله اصلی