دستورالعمل کنترل کش

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

مثال‌ها 
برخی از این دستورالعمل ها، با انواع مختلف، توسط چندین معماری مجموعه دستورالعمل پردازنده، مانند ARM ، MIPS ، PowerPC و x86 پشتیبانی می‌شوند.

واکشی اولیه 
همچنین به عنوان  بلوک حافظه پنهان داده  تاثیر، درخواست برای بارگیری و دریافت خط حافظه نهان مرتبط با یک آدرس تعیین شده می باشد. این کار توسط دستورالعمل PREFETCH در مجموعه دستور ها x86 انجام می شود. برخی دستورالعمل ها، سطوح بالاتر سلسله مراتب کش را دور می زنند، که برای مثال در زمینه "جریان" برای داده هایی که حداقل یک بار عبور کرده اند ، بجای نگه داری آنها در مجموعه کار مفیدی است. واکشی اولیه باید به میزان کافی سریع تر در زمان انجام شود تا تأخیر دسترسی به حافظه را کاهش دهد، برای مثال  یک حلقه که به صورت خطی از حافظه عبور می کند. تابع ذاتی مجموعه کامپایلر گنو __builtin_prefetch می تواند در زبان های برنامه نویسی C یا C++ برای فراخوانی استفاده شود.

واکشی اولیه دستورالعمل 
یک نوع پیش واکشی برای دستورالعمل حافظه نهان.

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

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

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

نکات دیگر 
برخی از پردازنده‌ها از انواع دستورالعمل‌های load-store پشتیبانی می‌کنند که به اشاره گر های حافظه پنهان نیز اشاره دارد. یک مثال load last در مجموعه دستورالعمل PowerPC است که نشان می دهد داده ها فقط یک بار استفاده می شوند، به عنوان مثال، خط حافظه نهان مورد نظر ممکن است به سر صف حافظه تخلیه افزوده شود، حال با این کار در صورت نیاز مستقیم آنرا میتواند به راحتی استفاده کند.

جایگزین، گزینه ها

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

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

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

منابع 
معماری رایانه