Кеш централне процесорске јединице је кеш који користи CPU ( - централна процесорска јединица) рачунара да би се смањило просечно време приступа меморији. Ако је кеш мањи, бржа је меморија, која чува копије података из често коришћених главних меморијских локација. Све док су већина приступа меморији кеширане меморијске локације, просечна латентнција приступа меморији ће бити ближа латенцији кеша него латенцији главне меморије.
Прегледи
Када процесор треба да се чита или пише у некој локацији у главној меморији, он прво проверава да ли је копија тих података у кешу. Ако је тако, процесор одмах чита или пише из кеша, што је много брже него читање или писање из главне меморије.
Већина модерних десктопа и серверских CPUs имају најмање три независна кеша: инструкцију кеша ради брзине доношења извршних инструкција, податке кеша ради брзине доношења података и складиштења, и translation lookaside buffer (TLB) који се користи ради виртуелног-у-физички адресни превод и за извршне инструкције и податаке. Кеш подаци се обично организују као хијерархије кеша вишег-нивоа (L1, L2, итд, види кешеви вишег нивоа).
Кеш улази
Подаци се преносе између меморије и кеша у блоковима фиксне величине, који се зову кеш линије. Када се кеш линија копира из меморије у кеш, креира се кеш улаз. Кеш улаз ће обухватити копиране податке, као и тражену меморијску локацију (сада се зове таг).
Када процесор треба да чита или исписује локацију у главној меморији, он прво проверава одговарајући улаз у кешу. Кешеви проверавају садржај захтеване меморијске локације у свакој од линија кеша, која може да садржи ту адресу. Ако процесор утврди да је меморијска локација у кешу, јавља се кеш погодак. Међутим, ако процесор не пронађе меморијску локацију у кешу, јавља се промашај кеша. У случају: кеш погодка, процесор одмах чита или исписује податке у кеш линији кеш промашаја, кеш додељује нови улаз, и копира у подацима из главне меморије; затим, захтев се испуњава из садржаја кеша.
Кеш перформансе
Проценат приступа који резултује у кеш погодку је познат као брзина погодка, а може бити мера ефикасности кеша за дати програм или алгоритам.
Промашаји читања одлажу извршење, јер они захтевају да се подаци преносе из меморије много спорије него из самог кеша. Исписани промашаји могу да дођу без те казне, јер процесор може да настави извршење док се у позадини подаци копирају на главној меморији.
Политика замене
Да би се направило места за нови улаз на кеш промашај, кеш мора да избаци један од постојећих улаза. Хеуристички, да користи избор улаза да би извршио избацивање, а што се зове политика замене. Основни проблем са било којом политиком замене је да мора да се предвиди за који постојећи улаз кеша је најмање вероватно да ће се користити у будућности. Предвиђање будућности је тешко, тако да не постоји савршен начин да се изабере између различитих расположивих политика замене.
Једна популарна политика замене, најмање скоро коришћена, ЛРУ (LRU - Least Recently Used), замењује најмање недавно приступни улаз.
Обележавањем неког меморијског опсега као не-кеша могу да се побољшају перформансе, избегавањем кеширања меморијског региона који су ретко поново приступачни. Овим се нешто избегавају режијски трошкови оптерећења у кешу, без било каквог поновног коришћења. Кеш улази такође могу бити искључени или закључани у зависности од контекста.
Политика исписа
Ако се подаци уписују у кеш, у неком тренутку они морају да буду написани на главној меморији. Тајминг овог писања је познат као политика исписа. При правовременом ажурирању (write-through) кеша, сваки испис кеша изазива испис на главној меморији. Алтернативно, у кешу враћеног ажурирања (write back) или одложеног ажурирања (copy back), исписи се одмах не пресликавају на главну меморију. Уместо тога, кеш тражи чије су локације исписане преко других локација (ове локације се означавају прљавим). Подаци у овим локацијама се исписују назад у главну меморију само када су подаци избачени из кеша. Из тог разлога, промашаји читања у враћеном ажурирајућем кешу могу понекад да захтевају два меморијска приступа: један да прво испише прљаву локацију у меморији, а затим још да прочита нову локацију меморије.
Постоје правила политике. Кеш може да буде правовремено ажуриран, али исписи се могу држати у привременом реду складишних података, обично тако да више складишта може да се обради заједно (што може да смањи бас преокрете и побољша бас искоришћеност).
Подаци у главној меморији кеша могу да се промене од стране других субјеката (нпр. периферије користе директан приступ меморији или процесор са више-језгара), у ком случају копија у кешу може да постане застарела или устајала. Алтернативно, када CPU у процесору са више-језгара ажурира податке у кешу, копије података у кешу, које ће се повезати са другим језгрима, постаће устајале. Комуникациони протоколи између кеш менаџера, који одржавају доследност података, су познати као кеш кохерентни протоколи.
CPU застоји
Време потребно да се донесе једна кеш линија из меморије (читај латенције) је битно јер ће CPU остати без ствари које треба да уради док чека на кеш линију. Када CPU достигне ово стање, то се зове застој.
Како CPUs постају бржи, застој услед кеш промашаја се помера ка већим могућностима рачунања; модерни CPUs могу да извршавају стотине упутства за време потребно да се донесе једна кеш линија из главне меморије. Различите технике се употребљавају да би се CPU одржао радно активним за то време. CPUs ван функције (оut-of-order) (Pentium Pro и касније Intel дизаин, на пример) покушавају да изврше независне инструкције после инструкције која се чека за кеш промашене податаке. Још једна технологија, која се користи од стране многих процесора, је симултани мултитрединг (simultaneous multithreading - SMT), или - у Intel терминологији – хипертрединг (hyper-threading - HT), који омогућавају да алтернативна нит користи CPU језгро, док прва нит чека да подаци дођу из главне меморије.
Кеш улазна структура
Кеш улазни ред обично је следеће структуре:
таг блок података застава бита(flag bits)
Блок подаци (кеш линија) садрже стварне податке учитане из главне меморије. Таг садржи (део од) адресу стварних података преузетих из главне меморије. Flag битови су дискутовани у даљем тексту.
Величина кеша је количина података главне меморије коју он може да држи. Ова величина се може израчунати као број бајтова који се налазе у сваком блоку података пута број блокова смештених у кешу. (Број тага и flag битова је ирелевантан за овај обрачун, мада то не утиче на физичко подручје кеша).
Ефективна меморијска адреса је подељена (MSB до LSB) na таг, индекс и блок офсет:
таг индекс блок офсет
Индекс описује који је кеш ред (која кеш линија) унутар кога ће се ставити подаци. Дужина индекса је бита. Блок офсет специфицира жељене податке у сачуваним подацима блока у кеш реду. Типична ефективна адреса је у бајтовима, па дужина блок офсета је бита. Таг садржи најзначајније адресе битова, које се проверавају у односу на тренутни ред (ред је преузет од стране индекса) да се види да ли је то онај што нам треба или други, небитна меморијска локација где се догодио исти индексни бит који желимо. Ознака дужина у битовима је:.
Неки аутори блок офсет једноставно зову "офсет", или "премештање“.Ben Dugan. "Concerning Caches". 2002
Пример
Оригинални Pentium 4 има четворосмерни скуп удружених L1 кеш података величине 8 KB са 64-бајт кеш блокова. Дакле, постоји 8 KB/64= 128 кеш блокова. То подразумева 128/4 = 32 скупа (а самим тим и 2 ^ 5 = 32 различита индекса). Постоји 64 = 2 ^ 6 могућих одступања. Пошто је адреса CPU од 32 бита, то значи 32 = 21 + 5 + 6, а самим тим подразумева 21 бита таг поља. Оригинални Pentium 4 је такође имао на осам-начина удружени скуп L2 интегрисаног кеша величине 256 KB са 128 бајт кеш блокова. То подразумева 32 = 17 + 8 + 7, а самим тим и 17 бита таг поља.
Застава (flag) битови
Кеш инструкција захтева само један flag бит по уласку у ред кеша: важећи бит. Важећи бит означава да ли је или није кеш блок оптерећен валидним подацима.
При укључењу рачунара, хардвер поставља све важеће битове у свим кешевима на "неважеће“. У другим приликама, неки системи такође постављају важећи бит на "неважећи", као када мулти-мастер bus-snooping хардвер у кешу једног процесора слуша пренос адреса из неког другог процесора, и схвата да су одређени блокови података у локалном кешу сада устајали и требало би да буду означени као неважећи.
Кеш податак обично захтева два flag бита по уласку у кеш ред: важећи бит и такође прљав бит. Прљав бит показује да ли је блок био непромењен пошто је био прочитан из главне меморије - "чист" - односно да ли је процесор написао податке у том блоку (а нову вредност није још направио у главној меморији) - "прљав“.
Асоцијативност
мини|450px|Which memory locations can be cached by which cache locations
Политика замене одлучује где ће у кешу ићи копија одређеног улаза главне меморије. Ако је политика замене слободна да изабере било који улаз у кешу да одржи копију, кеш се зове потпуно асоцијативни (повезан). Са друге стране, ако сваки улаз у главној меморији може да иде на само једно место у кешу, кеш је директно мапиран. Многи кешеви испуњавају компромис у коме сваки улаз у главној меморији може да иде у било које од Н-места у кешу, а описани су као Н-начина асоцијативног скупа. На пример, кеш подаци нивоа-1 у AMD Athlon су двосмерни асоцијативни скуп, што значи да било која одређена локација у главној меморији може да се сачува у једној од две локације у кеш подацима нивоа-1.
Асоцијативност је компромис. Ако постоји десет места на којима политика замене може имати мапиране меморијске локације, а затим проверу да ли је локација у кешу, морају се претражити десет кеш улаза. Провера више места тражи више енергије, чип зона, и потенцијално време. С друге стране, кешеви са више асоцијативности трпе мање промашаје (погледати промашаје сукоба, доле), тако да процесор троши мање времена за читање из споре главне меморије. Правило палца је да удвостручење асоцијативности, од директно мапираних у двосмер, или од два пута до четири пута, има отприлике исти ефекат на брзину поготка као удвостручење величине кеша. Асоцијативност повећана преко четири пута има много мање утицаја на брзину поготка,IEEE Xplore - Phased set associative cache design for reduced power consumption. Ieeexplore.ieee.org (2009-08-11). Приступљено 2013-07-30. и углавном се извршава из других разлога (види виртуелно изобличење, доле).
У циљу лошијег, али једноставно боље него сложеног: директни мапирани кеш - најбољи (најбржи) погодак времена, и тако најбољи компромис за "велике" кешове двосмерни скуп асоцијативног кеша двосмерни искривљени асоцијативни кеш – 1993. године, ово је најбољи компромис за кеш чије су величине биле у опсегу 4-8 KB четворосмерни скуп асоцијативног кеша потпуно асоцијативни кеш - најбоље (најниже) промашене брзине, па је најбољи компромис када је казна за промашај веома висока.
Директно-мапирани кеш
Овде свака локација у главној меморији може да иде само на један улаз у кешу. Овде нема политике замене као такве, јер не постоји избор у којем ће кеш улазни садржаји да се избаце. То значи да, ако се две локације пресликавају у исти улаз, оне могу стално да куцају једна другој. Мада једноставније, директно мапирани кеш мора да буде много већи него асоцијативни да би дао упоредиве перформансе, и више је непредвидив. Нека "к" буде број блока у кешу, "y" да буде блок број меморије, и "n" да буде број блокова у кешу, тада се мапирање врши помоћу једначине k = y mod n.
Двосмерни скуп асоцијативног кеша