16
УНИВЕРЗИТЕТ„ГОЦЕ ДЕЛЧЕВ”- ШТИП ФАКУЛТЕТ ЗА ИНФОРМАТИКА СЕМИНАРСКА РАБОТА ПО ПРЕДМЕТОТ АРХИТЕКТУРА НА КОМПЈУТЕРИ ТЕМА: Ментор Студенти: Проф.Др Зоран Утковски Иван Кукушев 10839 Иван Стојчев 10750 2 Кеш Меморија

Cash Memorija

Embed Size (px)

Citation preview

Page 1: Cash Memorija

УНИВЕРЗИТЕТ„ГОЦЕ ДЕЛЧЕВ”- ШТИП

ФАКУЛТЕТ ЗА ИНФОРМАТИКА

СЕМИНАРСКА РАБОТА

ПО ПРЕДМЕТОТ АРХИТЕКТУРА НА КОМПЈУТЕРИ

ТЕМА:

Ментор Студенти:

Проф.Др Зоран Утковски Иван Кукушев 10839

Иван Стојчев 10750

14.06.2011 Штип

2

Кеш Меморија

Page 2: Cash Memorija

Содржина

1. Кеш меморија.................................................................................................................3

2. Кеш со директно мапирање..........................................................................................5

3. Ser-Associative Кеш........................................................................................................8

3

Page 3: Cash Memorija

1. Кеш меморија

Еден од аспектите на компјутерски дизајн кој во текот на историјата носел

најголем предизвик е обезбедување на мемориски систем кој може да ги снабдува

операндите до процесорот со брзината со која може да се процесиуираат.

Неодамнешниот голем развој на брзината на процесорите не беше придружена со

забрзување на мемориите. Во однос на SPU, мемориите стануваат поспори веќе

неколку децении. Бидејќи примарната меморија има неверојатно значење, оваа

ситуација е ограничена со развојот на системи со високи перформанси, и

предизвика истражувања на начините со кои може да се заобиколи проблемот на

мемориската брзина, која е многу поспора од брзината на SPU, и релативно

зборувајќи, станува се полошо со секоја наредна година.

Местото на модерните процесори предизвикува огромни побарувања од

меморискиот систем, и во однос на латентноста (одложувањето во снабдување со

операнда) и појасната ширина (количината податоци поднесени во единица време).

За жал, овие два аспекти на мемориските системи се во поголемиот дел спротивни.

Многу техники за зголемувањето на појасната ширина го прават тоа само со

зголемување на латентноста. На пример, техниките со канали користени во Mic-3

можат да бидат применети на меморискиот систем, со повеќе преклопувачки

мемориски побарувања со кои би се делувало ефикасно. За жал, како со Mic-3, ова

резултира во поголема латентност на индивидуалните мемориски операции. Како

што брзината на часовникот на процесорот оди нагоре, станува се потешко и

потешко да се снабди со мемориски систем кој е способен да ги снабдува

операндите во eдeн или два циклуси на часовникот.

Еден начин да се нападне овој проблем е со обезбедување на кеш. Кешот ги

содржи последните користени мемориски зборови во мала брза меморија,

забрзувајќи го пристапот до нив. Ако доволно голем процент од потребните

4

Page 4: Cash Memorija

мемориските зборови се во кешот, ефективната мемориска латентност може да

биде значајно намалена.

Една од најефективните техники за подобрување на појасната ширина и на

латентноста доаѓа од користењето на повеќекратен кеш. Основа техника која

функционира многу ефективно е воведување на посебен кеш за инструкциите и

податоците. Има неколку придобивки од одделни кеш мемории за податоците и

инструкциите, често наречен одвоен кеш. Прво, мемориските операции можат да

бидат иницирани независно во секој кеш, ефективно удвојувајќи ја појасната

ширина на меморискиот систем. Ова е причината поради која има смисла да има

два посебни мемориски порта, како во Mic-1: секој порт има свој кеш. Забележете

дека секој кеш има независен приод кон главната меморија.

Денес, многу мемориски системи се покомплицирани од овој пример, и меѓу

кешот за инструкции и кешот за податоци од една страна и главната меморија може

да има дополнителен кеш, наречен level 2 cache. Всушност, може да има три или

повеќе нивоа на кеш како што бараат пософистицираните мемориски системи. На

сл. 1 гледаме систем со три нивоа на кеш. Самиот SPU чип во себе има мал кеш за

инструкции и мал кеш за податоци, обично од 16 КВ до 64 КВ. Потоа тука е level 2

cache, кој не e на SPU чипот, но може да биде вклучен во SPU пакетот, веднаш до

SPU и поврзан со брза патека. Овој кеш во основа е обединет, содржејќи мешавина

на податоци и инструкции. Типична големина на L2 кешот е од 512 КВ до 1 MB.

Кеш од трето ниво е на плочата на процесорот и се содржи од неколку мегабајти

SRAM, кој е многу побрз од главната DRAM меморија. Кешот генерално е

инклузивен, со целосната содржина на level 1 кешот во level 2 кешот и целосната

содржина на level 2 кешот во level 3 кешот.

5

Page 5: Cash Memorija

Кешот зависи од два вида на локалност на адресите за да ја постигне својата

цел. Просторната локалност е набљудувањето дека мемориските локации со

адреси кои се нумерички слични со неодамна пристапената мемориска локација,

најверојатно ќе бидат пристапени во блиска иднина. Кешот го користи ова својство

со носење на повеќе податоци од бараното, со очекување дека следните барања ќе

бидат предвидливи. Временската локалност се случува кога кон неодамна

пристапената мемориска локација повторно се пристапува. Ова може да се случи,

на пример, на мемориски локации на врвот на стекот, или на инструкции во јамка.

Временската локалност се искористува во дизајнот на кеш во основа преку изборот

на тоа што кешот да отфрли. Многу алгоритми за замена на кешот ја користат

временската локалност со отфрлање на тие можности кон кои не се пристапувало.

Сите кеш мемории го користат следниот модел. Главната меморија е

поделена на блокови со фиксна големина наречени кеш линии. Кеш линија обично

се состои од 4 до 64 последователни бајти. Линиите се бројат последователно,

започнувајќи од 0, така што со 32-битна големина на линиите, линијата 0 се бајтите

од 0 до 31, линијата 1 се бајтите од 32 до 63, и така натаму. Во секој момент, некои

линии се во кешот. Кога се упатува кон меморијата, колото на кеш контролерот

проверува да види дали зборот кој е посочен е моментно во кешот. Ако е така,

вредноста која е таму може да се користи, и не мора да се патува до главната

меморија. Ако зборот не е таму, дел од влезот на линијата се отстранува од кешот и

6

Page 6: Cash Memorija

линијата која е потребна се фаќа од меморијата или кешот од пониско ниво за

замена. Постојат многу варијации на онаа шема, но во сите од нив, идејата е да се

задржат линиите кои најмногу се користат во кешот колку што е можно подолго, за

да се максимизира бројот на мемориски референци послужени од кешот.

2. Кеш со директно мапирање

Наједноставниот кеш е познат како кеш со директно мапирање (direct-

maped cache). Пример на кеш со директно мапирање со едно ниво е покажан на сл.

2(а). Овој пример содржи 2048 одредници. Секоја одредница (ред) во кешот може

да држи точно една кеш линија од главната меморија. Со 32-бајтна должина на кеш

линијата (за овој пример), кешот може да задржи 64 КВ. Секоја одредница на

кешот се содржи од три дела:

1. Valid битот покажува дали има валидни податоци во оваа одредница или не.

Кога системот е бутиран (стартуван), сите одредници се означуваат како

невалидни.

2. Tag полето се состои од уникатна 16-битна вредност која ја идентификува

соодветната линија од меморијата од која пристигна податокот.

3. Data полето содржи копија на податоците во меморијата. Ова поле држи една

ксшлинијаод32 бајти.

7

Page 7: Cash Memorija

Во кеш со директно мапирање, одреден мемориски збор може да биде

сочуван на само едно место во кешот. Со дадена мемориска адреса има само едно

место за него во кешот. Ако не е таму, тогаш воопшто не е во кешот. За сочувување

и враќање на податоците од кешот, адресата се разделува на четири компоненти,

покажани на сл. 2(б):

1. ТАG полето се однесува на Tag битовите сочувани во одредницата на кешот.

2. LINE полето покажува која одредница на кешот ги содржи потребните податоци,

ако тие се присутни.

3. WORD полето објаснува 38 кој збор во линијата се однесува.

4. BYTE полето обично не се користи, но ако се бара само еден бајт, тогаш кажува

кој бајт од зборот се бара. За кеш кој снабдува само 32-битни зборови, ова поле

секогаш ќе биде 0.

Кога CPU ќе произведе мемориска адреса, хардверот ги извлекува 11 LINE

битови од адресата и ги користи за индексирање во кешот да се пронајде еден од

8

Page 8: Cash Memorija

2048 одредници. Ако таа одредница с валидна, ТАG полето на мемориската адреса

и Таg полето во кеш одредницата се споредуваат. Ако се согласуваат, одредницата

на кешот го држи зборот кој се побарува, и ситуацијата се нарекува cache hit. На

овој погодок, зборот кој се чита може да биде земен од кешот, отстранувајќи ја

потребата да се оди во меморијата. Само зборот кој е потребен се извлекува од

одредницата во кешот. Остатокот од одредницата не се користен. Ако одредницата

на кешот е невалидна или ознаките не се идентични, потребната одредница не е

присутна во кешот, ситуација наречена cache miss. Во овој случај 32-битната кеш

линија се фаќа од меморијата и се зачувува во одредницата во кешот, заменувајќи

тоа што било на нејзино место. Но, ако постоечката кеш одредница с

модифицирана од времето на вчитувањето, тогаш мора да биде запишана назад во

главната меморија, пред да се отфрли.

И покрај комплексноста на одлуката, приодот кон потребни збор може да

биде зачудувачки брз. Кога ќе биде позната адресата, точната локација на зборот е

позната како if it is present in the cache. Ова значи дека е можно да се прочита

зборот од кешот и да се достави до процесорот во исто време кога се одредува дали

ова е исправниот збор (со споредба на ознаките). Така процесорот всушност добива

збор од кешот во исто време, или можеби дури пред да знае дали зборот е тој што

се побарува.

Оваа шема на мапирање поставува последователни мемориски линии во

последователни одредници на кешот. Всушност, до 64 КВ бајтови од соседни

податоци можат да бидат поставени во кешот. Меѓутоа, две линии кои се

разликуваат во нивните адреси точно 64 КВ (65,356 бајти) или било кој целосен

содржател на тој број не може да биде сочуван во кешот во исто време (бидејќи ја

имаат истата LINE вредност). На пример, ако програмот пристапува податоци на

локацијата X и потоа извршува инструкција која треба податоци од локацијата X +

65,536 (или било која друга локација во истата линија), втората инструкција ќе ја

примора одредницата на кешот да биде повторно прочитана, препишувајќи се што

е таму. Ако ова се случува доволно често, може да резултира во лошо однесување.

Всушност, најлошото однесување на кешот е полошо од ситуација во која нема

9

Page 9: Cash Memorija

кеш. бидејќи секоја мемориска операција вклучува читање на целиот кеш наместо

читање на еден збор.

Кешот со директно мапирање е најчестиот кеш, и тие работат доста

ефективно, бидејќи судирите како тој опишан погоре може да се направат да се

случуваат многу ретко, или воопшто да не се случуваат. На пример, многу умен

компајлер може да ги земе во предвид судирите во кешот во предвид кога

поставува инструкции и податоци вр меморијата. Забележете дека случајот кој

беше опишан не би се случил во систем со одделни кешови за инструкциите и

податоците, бидејќи барањата кои предизвикуваат судир би биле опслужувани од

различен кеш. Така ја гледаме втората придобивка од две кеш мемории наместо

една: поголема флексибилност во средување на конфликтни мемориски шаблони.

3. Ser-Associative Кеш

Како што споменавме погоре, многу различни линии во меморијата се

натпреваруваат за исти места во кешот. Ако програмот го користи кешот од сл. 2(а)

исцрпно ги користи зборовите на адресите 0 и на 65,536 ќе има постојани

конфликти, и секоја референца потенцијално ќе исфрла друга од кешот. Решение

на овој проблем е да се дозволат две или повеќе линии во секоја одредница на

кешот. Кешот со n можни одредници за секоја адреса се нарекува n-weу ѕеt-

associative кеш. Четиринасочен ѕе1-аѕѕос1апус кеш е илустриран на сл. 3.

10

Page 10: Cash Memorija

Sеt-associative кешот е инхерентно покомплициран од кеш со директно

мапирање бидејќи иако вистинската одредница за кешот кој треба да се испита

мора да се пресмета од мемориската адреса, сет од н кеш одредници мораат да

бидат проверени да се види дали потребната линија е присутна. Сепак, искуството

покажува дека двонасочен или четиринасочен кеш има доволно добри

перформанси за да вреди ова екстра коло.

Користењето на ѕеt-associative кеш му дава избор на дизајнерот. Кога ќе се

донесе нова одредница во кешот, кој од присутните предмети треба да биде

исфрлен? Најповолната одлука, секако, побарува поглед во иднината, но доволно

добар алгоритам за повеќето случаи е LRU (Least Recently Used). Овој алгоритам

продолжува со нарачувањето на сетови локации кон кои може да се пристапи од

одредена мемориска локација. Кога се пристапува кон некоја од присутните линии,

се прави нова листа, означувајќи ја таа одредница како последната пристапена.

Кога ќе дојде време да се замени одредница, таа на крајот на оваа листа, т.е. таа

која најодамна е пристапена, е таа која се исфрла.

Ако одиме до крајност, можен е и 2048-насочен кеш содржи еден сет на

2048 линиски одредници. Тука целата мемориска адреса се мапира во еден сет, така

што барањето побарува споредување на адресите со сите 2048 ознаки во кешот.

11

Page 11: Cash Memorija

Забележете дека секој влез мора да има логика со споредување на ознаки. Бидејќи

LINE полето е со 0 должина, ТАG полето целата адреса освен WORD и ВYТЕ

полињата. Освен тоа, кога се менува линија во кешот, сите 2048 локации се можни

кандидати за заменување. Одржување на подредена листа на 2048 одредници бара

многу сметководство, со што замената на LRU е неизводлива. (Запаметете дека

оваа листа мора да биде обновувана на секоја мемориска операција, не само на

промашување). Изненадувачки, кешот со голема асоцијативност не ги подобрува

многу перформансите во однос на кеш со мала асоцијативност, а во некои случаи

дури создава помали перформанси. Поради овие причини, асоцијативноста над

четири страни е невообичаена.

Конечно, запишувањето создава посебен проблем за кешот. Кога

процесорот запишува збор, и зборот е во кешот, очигледно мора или да го обнови

зборот или да ја отфрли одредницата во кешот. Речиси сите дизајни го обновуваат

кешот. Но, што со обновувањето на копијата во главната меморија? Оваа операција

може да биде одложена за подоцна, кога линијата на кешот е подготвена да биде

заменета со LRU алгоритмот. Овој избор е тежок, и ниту една опција не е јасно

попожелна. Итното обновување на одредницата во главната меморија се нарекува

write through. Овој приод во основа е поедноставен за имплементација и

поверодостоен, бидејќи меморијата секогаш е свежо обновена, што помага, на

пример ако се случи грешка и е потребно да се врати состојбата на меморијата. За

жал, за ова честопати е потребен поголем сообраќај за запишување до меморијата,

така што пософистицираните имплементации во поголем дел го користат

алтернативниот метод, познат како write differed, или write back.

Исто така мора да се напомене поврзаниот проблем со запишувањето: што

ако запишувањето се случи на локација која моментално не е кеширана? Дали

податоците треба да се донесат во кешот, или само да се избришат од меморијата?

Повторно, ниту еден одговор не дава најдобро решение. Повеќето дизајни кои

одложуваат запишувања до меморијата ги носат податоците во кешот на

промашување на запишување, техника позната какоwrite allocation.

12

Page 12: Cash Memorija

Заклучок

Повеќето дизајни кои го користат пишувањето преку, не сакаат да алоцираат

одредница на запишување, бидејќи оваа опција го комплицира во основа

едноставниот дизајн. Алоцирањето на запишување победува само кога има

повторни запишувања на исти или различни зборови во една линија на кешот.

Перформансите на кешот се критични за перформансите па системот

бидејќи разликата помеѓу брзината на CRU и брзината на мемориите е многу

голема. 11ослсдоватслно, истражувањето на подобри стратегии за кеширање се

уште е жешка тема.

13