Кіріспе
Жадыға қол жеткізу үлгілеріне байланысты өнімділіктің төмендеуі. Кэш ластануы – компьютерлік бағдарламаның жұмыс істеу кезінде CPU кэшіне қажетсіз деректерді жүктеуі, нәтижесінде пайдалы деректер кэштен жад иерархиясының төменгі деңгейлеріне шығарылып, өнімділік төмендейді. Мысалы, көп ядролы процессорда бір ядро ортақ кэшке басқа ядролар әкелген блоктарды ығыстыра алады, немесе алдын ала әкелінген блоктар кэштен сұраныс бойынша әкелінген блоктарды ығыстыра алады.
Cache pollution describes situations where an executing computer program loads data into CPU cache unnecessarily, thus causing other useful data to be evicted from the cache into lower levels of the memory hierarchy, degrading performance. For example, in a multi core processor, one core may replace the blocks fetched by other cores into shared cache, or prefetched blocks may replace demand fetched blocks from the cache.
Шешімдер
Жоғарыда аталған кодты қайта құрылымдаудан басқа, кэштің ластануына қарсы шешім – тек жиі қолданылатын деректерді ғана кэште сақтауды қамтамасыз ету. Бұл арнайы кэш басқару нұсқауларын, операциялық жүйенің мүмкіндіктерін немесе аппараттық қолдауды пайдалану арқылы жүзеге асырылады. Арнайы аппараттық нұсқаулардың мысалы ретінде PowerPC AltiVec ұсынған "lvxl" нұсқауын қарастыруға болады. Бұл нұсқау 128 биттік мәнді тіркелгіге жүктейді және сәйкес кэш блогын "ең соңғы пайдаланылмаған" деп белгілейді, яғни кэш жиынтығынан блокты шығару қажет болғанда, оны шығаруға ең лайықты кандидат ретінде таңдайды. Жоғарыдағы мысалдың контекстінде осы нұсқауды тиімді пайдалану үшін, циклде сілтеме берілген дерек элементтерін осы нұсқау арқылы жүктеу қажет. Осылай іске асырылған жағдайда кэш ластануы болмайды, себебі мұндай циклдің орындалуы кэштен T[0] дерегінің мерзімінен бұрын шығарылуына себеп болмайды. Бұған жол берілмейді, өйткені цикл дами келе, C массивінің элементтерінің мекенжайлары кэштің бірнеше жолына сәйкес келеді, ал ескі деректер (бірақ "ең соңғы пайдаланылмаған" деп белгіленбеген) басқа жолдарда сақталады. Кэштен тек ең ескі деректер (мысалға қатысы жоқ) шығарылады, ал T[0] олардың құрамына кірмейді, себебі оның жаңартылуы цикл басталғанға дейін жүзеге асырылады. Сол сияқты, операциялық жүйенің (ОЖ) мүмкіндіктерін пайдаланып, C дерек массивіне сәйкес келетін негізгі жадтағы беттерді "кэште сақтауға тыйым салынған" немесе, басқаша айтқанда, кэште сақталмайтын деп белгілеуге болады. Аппараттық деңгейде, бағдарламаның деректерге қол жеткізу үлгісіне сүйене отырып, жиі пайдаланылмайтын деректерді анықтап, оларды кэштен айналып өтетін кэштің жұмысын өзгерту схемаларын қолдануға болады. Сонымен қатар, орындалып жатқан бағдарламалар арасындағы зиянды әсерді болдырмау үшін ортақ кэшті бөлуге болады. Бұл шешімдердің кемшілігі – ОЖ негізделген схемалардың үлкен кешігу уақыты болуы мүмкін, бұл кэш ластануын болдырмау арқылы қол жеткізілетін пайданы жоюы мүмкін (егер жад аймағы бастапқыда кэште сақталмайтын болса), ал аппараттық негізделген әдістер бағдарламаның басқару ағыны мен жадқа қол жеткізу үлгісі туралы толық көрініс бермеуі мүмкін.
Өсе түсетін маңыздылығы
Кэштегі ластануды бақылаудың маңыздылығы артып келеді, себебі "жад қабырғасы" деп аталатын мәселе салдарынан туындайтын қиындықтар күшейіп жатыр. Чип өндірушілер процессордың жадқа қатысты өте үлкен кідірісін жеңу үшін жаңа тәсілдерді әзірлеуді жалғастыруда. Олар кэш көлемін ұлғайту арқылы және бағдарламалық жасақтама инженерлеріне деректердің процессорға қалай келіп, сақталуын басқаруға мүмкіндік беретін пайдалы құралдарды ұсынады. Кэштегі ластануды бақылау – (көбінесе кіріктірілген) бағдарламашының қолдана алатын көптеген мүмкіндіктердің бірі. Дегенмен, басқа да әдістер де қолданылады, олардың көпшілігі авторлық құқықпен қорғалған және аппараттық және қолданбалық талаптарға қатысты өте ерекше.