Sunteți pe pagina 1din 16

Seminar 2 - Memoria Cache

Seminar 2 - Memoria Cache 1. Principiul memoriei cache 2. Politici de Fetch 3. Politici de Scriere 4. Funcia de mapare 4.1 Memorii cache mapate direct 4.2 Memorii cache complet-asociative 4.3 Memorii cache asociative pe mulimi (N-way set-associative) 4.4 Politici de evacuare a liniilor de cache 5. Organizarea memoriei cache 5.1 Ocolirea cache-ului 5.2 Memorii cache divizate prin utilitate 5.3 Memorii cache divizate pe niveluri 6. Memorii cache pentru sisteme multi-procesor Bibliografie

n seminarul precedent a fost studiat arhitectura calculatoarelor din prisma execuiei instruciunilor n procesor, urmnd ca n cadrul acestui seminar s se abordeaze mecanismele de funcionare i implementare ale memoriei rapide cache. Dup cum s-a discutat la partea de pipeline, execuia unei instruciuni presupune n cele mai multe cazuri i aducerea sau scrierea operanzilor din sau n memorie, iar pentru ca aceste operaii s nu impun ntrzieri prea mari, procesoarele folosesc memorii cache, mai rapide dect memoria principal, ns cu o capacitate mult mai mic (figura 1).

1. Principiul memoriei cache


Pentru nceput, vom introduce memoria cache n contextul general al sistemului de calcul.

Figura 1. Ierarhizarea memoriei n sistemele de calcul

Prin adaugarea memoriei cache n ierarhia de memorii, interfaa dintre procesor i memoria principal rmne neschimbat i, dintr-un punct de vedere funcional, accesul se realizeaz ca i n cazul n care nu exist cache. Ideea de baz este c, din moment ce cache-ul este mai mic dect memoria principal, el stocheaz o submulime din coninutul acesteia. Totui, deoarece cache-ul poate fi implementat cu o tehnologie mai rapid (SRAM) dect memoria principal (DRAM), accesul la coninutul cache-ului este mai rapid. Ca rezultat al localitii fluxului de adrese, cache-ul reduce ncrcarea restului ierarhiei de memorie deoarece poate fi administrat s rein mulimea curent de date i instruciuni. Atunci cnd procesorul ncearc citirea unui cuvnt din memorie, se testeaz dac respectivul cuvnt se afl n memoria cache. n caz afirmativ, cuvntul este furnizat unitii centrale de execuie. n caz contrar, se ncarc n memoria cache un bloc al memoriei principale, constnd dintr-un numr fix de cuvinte, iar apoi cuvntul este returnat unitii centrale. Se cunoate c programele nu acceseaz memoria n mod complet aleator. Dac se face o referire la o anumit adres, este probabil c urmtoarea referire la memorie va fi n vecintatea acestei adrese. n spaiul adreselor de memorie, cteva regiuni au o probabilitate ridicat de a fi accesate, cteva au o probabilitate moderat, iar celelalte au o probabilitate foarte mic de a fi accesate n viitorul apropiat. O regiune care are o probabilitate nalt este cea corespunztoare contorului de program actual, deoarece este probabil s se execute urmtoarea instruciune din secvena de instruciuni. Alte regiuni care au o probabilitate mare de a fi accesate sunt cele care conin datele active, procedurile i punctul de ntoarcere dintr-o procedur. Atunci cnd vorbim de mbunatirile de performan rezultate din folosirea cache-ului, vom folosi urmtorii termeni: Cache hit - generat atunci cnd pentru a accesa date din memoria principala le lum din cache. Cache miss - generat atunci cnd datele nu sunt n cache, fiind aduse procesorului direct din memoria principal. cache miss obligatoriu cauzat de primul accesul la o zon de memorie. cache miss de capacitate cauzat de capacitatea limitat a cache-ului. cache miss conflictual cauzat de nlocuirea unui element din cache cu unul nou adus. Fetch - aducerea unui bloc de cuvinte din memoria principala ntr-o linie de cache. Atenie! n cache ncrcm linii care conin mai multe cuvinte, nu putem ncrca doar un anumit cuvnt. Aceasta structur a cache-ului este descris i n figura 2. Principiul localitii - aa cum am exemplificat mai sus, se refera la accesul programului la date din aceeai zon. Exist dou tipuri de localitate a datelor: localitatea spaial - se refer la faptul c datele aflate adiacent n memorie au o probabilitate mare de a fi folosite mpreun; organizarea pe linii a cache-ului face ca atunci cnd un cuvnt este accesat, ntreaga linie care conine acel cuvnt i cuvintele adiacente s fie ncrcat n cache, astfel accesele la cuvintele adiacente vor fi servite din cache. localitatea temporal - se refer la faptul c datele accesate recent au o probabilitate mare de a fi accesate din nou n viitorul apropiat; cache-ul mrete performana sistemului deoarece stocheaz datele accesate recent de program ntro memorie de mare vitez de unde pot fi reaccesate rapid. Performana programului este cu att mai mare cu ct timpul mediu de acces la memorie este mai mic.

unde

este timpul de acces la cache, iar este factorul de cache miss

este timpul de acces la

memoria principal, iar

Condiia ca memoria cache s mbunteasc performana unui sistem sistem este:

Pentru proiectarea memoriei cache trebuie luate n considerare o serie de mecanisme pentru scrierea datelor, citirea datelor i evacuarea liniilor, mecanisme care afecteaz performana i complexitatea cache-ului. Ne referim astfel la : Politici de fetch Politici de scriere Funcia de mapare Politici de evacuare

Figura 2. Organizarea pe linii a memoriei cache

2. Politici de Fetch
Atunci cnd datele de care procesorul are nevoie nu se regsesc n cache, ele sunt aduse n cache pe baza politicii de fetch. S considerm exemplul unei memorii cache cu 1024 de octei, organizai pe 256 de linii cu cte 4 cuvinte. Procesorul emite o cerere de ncrcare din memorie de la adresa 2, care se mapeaz direct n prima linie a cache-ului (cuvintele de la 0 la 3). Cache-ul nu conine pe prima linie datele asociate cu adresa 2, deci trebuie executat un fetch, fiind adus tot blocul din memorie care conine acel cuvnt. Problema care se pune este n ce ordine vor fi aduse cuvintele din memoria principal. Exist dou opiuni: cuvntul critic mai nti (critical word first) presupune o ncrcare a cuvintelor n ordinea 2,3,0,1. Cuvntul de la adresa de care avem nevoie este ncrcat primul. Aceast tehnic micoreaz miss-penalty (timpul de acces la memorie pentru a face fetch la date n cazul unui cache-miss) n cazul liniilor de dimensiuni mai mari. n exemplul dat, diferena de performan este neglijabil. cuvntul natural mai nti (natural word first) presupune o ncrcare a cuvintelor n ordinea 0,1,2,3. Adresa de la nceputul liniei este ncrcat prima. Chiar dac politica critical word first prezint avantajul aducerii cuvntului necesar mai repede n procesor, sporind viteza acestuia de lucru, ofer totui dezavantajul unui mecanism de gestiune a cache-ului mai complicat. Pre-fetching O alt tehnic de optimizare a timpului de acces la memorie, este prin aducerea n avans a datelor din memorie n cache prin tehnici de pre-fetching. Prin anticiparea accesrii datelor putem reduce numrul de cache-miss ns algoritmul/euristicile pe baza cruia se face speculaia trebuie s nu polueze cache-ul cu date ce nu sunt folosite, sau sunt folosite rar. n cazul instruciunilor, acestea sunt executate de cele mai multe ori consecutiv (excepii apar n cazul instructiunilor de salt) i de aceea exist o mare probabilitate ca dup instruciunile dintrun bloc K de cuvinte (linie cache) procesorul s execute i instruciunile stocate n blocul urmtor K+1. Prin pre-fetching se aduce din memorie acest bloc i se mapeaz pe una din liniile din cache, nainte de aprea o cerere de la procesor pentru vreo adres din bloc. n cazul datelor, pre-fetching-ul este mai complicat i, de obicei, are performane bune cnd blocurile de date sunt prelucrate secvenial, de exemplu prelucrari de vectori i matrici. Metodele de pre-fetching pot fi implementate att la nivel software, prin optimizri fcute de ctre compilatoare, ct i la nivel hardware prin analiza adreselor de cache-miss folosind memory reference patterns, sau analiza adreselor instruciunilor (pentru cazul cache-ului de instruciuni). O scurt descriere a principalelor metode este fcut aici.

3. Politici de Scriere
Politicile de scriere n cache se refer la fluxul de date dinspre procesor spre memoria cache i spre memoria principal. Astfel, difereniem dou situaii:

1. Datele aflate deja n cache trebuie actualizate (write-hit policies). 2. Datele care trebuie scrise nu se afl n cache (write-miss policies). Pentru primul caz problema ce trebuie adresat de politicile de scriere este cea a pstrrii consistenei dintre memoria principal i memoria cache. Cele dou opiuni sunt: write-through: Cnd procesorul emite o cerere de scriere, un cache write-through actualizeaz datele din cache, executnd, eventual, operaia de fetch (dac datele nu se aflau n cache), dar actualizeaz i datele din memoria principal. Avantaj: implementare simpl, asigur uor consistena dintre memorii: dac memoria cache i cea principal au mereu acelai coninut, ele sunt consistente. Dezavantaj: atunci cnd datele sunt actualizate des i la intervale scurte de timp, devine ineficient accesul repetat la memoria principal pentru efectuarea operaiilor de scriere, ducnd la scderea performanei. write-back: Cnd procesorul emite o cerere de scriere, un cache write-back actualizeaz datele din cache, ns nu actualizeaz imediat i pe cele din memorie. Avantaj: prin acest mencanism se elimin traficul inutil dintre cache i memoria principal. Dezavantaje: duce la cerete complexitii hardware-ului, fiind necesar reinerea (marcarea) acelor linii care au devenit inconsistente cu memoria principal. Pentru a marca aceste linii (murdare), se include un indicator suplimentar pe fiecare linie. n momentul evacurii, dac linia este murdar va fi scris n memoria principal. n cazul sistemelor multicore n care avem cache-uri individuale pentru fiecare core/ procesor, care partajeaz memoria principal, pstrarea consistenei devine mai dificil, necesitnd mecanisme i hardware i mai complex (discutat n seciunea 6). n cazul n care datele ce vin de la procesor nu se afl n cache, avem urmtoarele opiuni pentru implementarea scrierii n cache: write-allocate: se aloc o linie n cache pentru datele respective. no-write-allocate: nu se aloc o linie n cache pentru datele respective. fetch-on-write: se aduce linia n cache din memoria principala (sau dintr-un cache de la un nivel superior); implicit se face i alocarea liniei. no-fetch-on-write: dac se foloseste i optiunea write-allocate atunci linia este scris doar n cache i invalidat, altfel cu no-write-allocate datele sunt actualizate direct n memoria principal (write-around). Folosirea opiunii write-allocate poate duce la poluarea cache-ului. O metod de optimizare a performanelor cache-ului, prin minimizarea numrului de cache missuri, se foloseste de felu n care este implementat scrierea. De obicei, ntre CPU i cache avem cel puin un buffer n care sunt puse datele ce trebuie scrise. De aceea e bine ca nainte de a cuta datele n cache, s fie nti cutate n acest buffer. n multe cazuri avem operaii de read imediat dup cele de write. Aceast tehnic o putei gsi descris i sub numele de Priority to Read Misses Over Write.

4. Funcia de mapare
O caracteristic de baz a memoriei cache este funcia de mapare (de translatare), care atribuie unui bloc din memoria principal o locaie din memoria cache. Se pot utiliza trei tehnici: mapare direct mapare asociativ mapare asociativ pe seturi Aceste alternative se vor examina printr-un exemplu. Se consider o memorie cache de 1024 (1K) octei. Datele se transfer ntre memoria principal i memoria cache n blocuri de cte 8 octei. Aceasta nseamn c memoria cache are 128 de linii de cte 8 octei fiecare. Memoria principal const din 64K octei, fiecare octet fiind direct adresabil printr-o adres de 16 bii. Se poate considera c memoria principal const din 8K blocuri de cte 8 octei fiecare. Deoarece exist un numr mai mic de linii ale memoriei cache fa de numrul blocurilor memoriei principale, este necesar un algoritm pentru plasarea blocurilor memoriei principale n liniile memoriei cache. n plus, este necesar un mijloc de a determina care bloc al memoriei principale ocup la un moment dat o linie a memoriei cache.

4.1 Memorii cache mapate direct


n acest caz, abordarea este simpl fiecare a 2n-a adres este mapat pe acelai cuvnt din cache (figura 5). Este o dependen unu-mai multe, deoarece memoria principal este mai mare i exist mai multe locaii care se mapeaz exact pe acelai cuvnt din cache. Mecanismul implementat va trebui s disting ntre acestea. Se vor calcula dou componente utilizate n accesarea coninutului memoriei cache: Aword = A mod Cwords Aline = [A div Cwords] mod Clines = Cblocuri in memorie mod Clines Valoarea identific linia pentru adresa A, n timp ce valoarea identific exact cuvntul din linie. Dac Clines i Cwords sunt alese ca puteri ale lui 2, calculele sunt facile deplasri de bii. Pentru a face distincia ntre blocuri de memorie mapate pe aceeai linie, n memoria cache fiecare linie primete o etichet. Apare, deci, nevoia unui calcul suplimentar: Atag = [A div Cwords] div Clines S considerm un caz generic de memorie cache cu Clines= 2m i Cwords= 2k. Adresa A transmis de procesor este pe bii. Atunci, figura urmatoare reprezint cele trei componente ale adresei care trebuie calculate Aword, Aline i Atag.

Astfel, adresele cuvintelor din memoria principal vor fi interpretate dup formatul prezentat n figura 3, pentru a putea fi mapate pe locaii din cache.

Figura 3. Formatul adresei cuvintelor pentru maparea direct

Procedeul prin care se verific existena unui cuvnt n cache este urmtorul (figura 4): 1. Fiind dat o adres A, cache-ul calculeaz cele trei componente. 2. Inspecteaz valoarea C[Aline]valid. 3. Dac nu are coninut valid, cuvntul nu este rezident i are loc un cache-miss. 4. Dac linia are coninut valid, se inspecteaz valoarea C[Aline]tag i se compar cu Atag. 5. Dac cele dou etichete nu se potrivesc, are loc un cache-miss. 6. Dac etichetele se potrivesc, are loc un cache-hit i cuvntul este rezident n C[Aline]
data[Aword]

Figura 4. Diagrama procedeului de lucru pentru memoria cache mapat direct Figura 5. Exemplu de mapare direct pentru un cache de 1K i memorie principal de 64K

4.2 Memorii cache complet-asociative


O memorie mapat direct nu poate avea dect o linie ca alegere pentru o anumit adres; acest fapt poate duce la fenomenul numit interferen cache sau contenie de cache. Pentru un caz n care dou adrese sunt mapate pe aceeai linie i procedeul de evacuare are loc repetat datorit accesrii alternative a celor dou adrese, se folosete sintagma fluxul de acces deterioreaz cache-ul. Este vorba despre o situaie n care performanele memoriei cache sunt degradate semnificativ. O abordare pentru rezolvarea acestei probleme este utilizarea ideii de asociativitate. Un cache

asociativ permite ca o locaie de memorie s fie mapat n mai multe linii de cache; un cache complet-asociativ permite unei locaii de memorie s fie mapat pe orice linie. Din moment ce acum datele necesare ar putea fi oriunde n cache, cutarea lor este mai complex i realizarea hardware este mai mare i consum mai mult energie. Totui, memoriile cache asociative pot avea un factor de miss mult mai mic dect cele mapate direct. Din moment ce un bloc de cuvinte poate fi mapat pe oricare linie din cache (figura 8), nu se mai poate identifica indexul liniei prin intermediul adresei. De aceea formatul folosit de ctre maparea complet asociativa este cel descris n figura 6.

Figura 6. Formatul adresei cuvintelor pentru maparea complet asociativ

Valoarea

ce identific cuvintele dintr-un bloc (linie) este construit, ca i la memoria , care reprezint

cache mapat direct, din ultimii k cei mai puin semnificativi bii. Valoarea identificatorul (eticheta) blocului de cuvinte este dat de restul biilor.

Dup traducerea adresei pentru a realiza operaia de fetch, trebuie s analizm problema gsirii liniei n momentul iniierii unei operaii de citire. Datorit modului n care s-a depus n cache linia mapat, este necesar a efectua o cutare n ntregul su cuprins. Pentru c memoria cache trebuie s fie foarte rapid, o cutare liniar (sau chiar binar) nu este o opiune; trebuie investigate toate liniile n paralel, cea ce mrete complexitatea hardware a logicii asociate cacheului, ducnd i la costuri mai mari. Procedeul prin care se verific existena unui cuvnt n cache este urmtorul (figura 7): 1. Fiind dat o adres A, cache-ul calculeaz cele dou componente. 2. Se inspecteaz toate valorile Ctag i se compar cu valoarea Atag. 3. Dac nici una din etichete nu se potriveste, are loc un cache-miss. 4. Dac o etichet se potrivete, se inspecteaz valoarea C{Atag}valid. 5. Dac linia nu are coninut valid, cuvntul nu este rezident i are loc un cache-miss. 6. Dac linia este valid, are loc un cache-hit i cuvntul este rezident n C{Atag}data[Aword] Obs: C{Atag} = C[i], unde C[i]tag = Atag

Figura 7. Procedeul prin care se verific existena unui cuvnt n cache pentru maparea complet asociativ

Figura 8. Exemplu de mapare complet asociativ pentru un cache de 1K si memorie principal de 64K

4.3 Memorii cache asociative pe mulimi (N-way set-associative)


Memoriile cache asociative pe mulimi mbin simplitatea relativ a memoriilor cache mapate direct cu metodele de evitare a conteniei de la memoriile cache complet-asociative, ducnd la costuri rezonabile i un factor de hit bun. Ideea de baz este aceea a secionrii memoriei cache n Cset seturi, fiecare set avnd N linii: N = Clines div Cset n locul maprii unei adrese la o linie, se face maparea la un set, iar n interiorul setului cutarea

unei linii se face ntr-o manier complet-asociativ. Ca i n cazurile anterioare, este necesar calcularea anumitor valori pentru poziionare n memoria cache i identificare unic. Aword = A mod Cwords Aset = [A div Cwords] mod Cset Atag = [A div Cwords] div Cset Valoarea Aword identific indexul cuvntului n cadrul blocului (liniei), Aset identific indexul setului, iar Atag este eticheta blocului. Formatul adresei cuvintelor pentru maparea set asociativ este prezentat n figura 9.

Figura 9. Componentele adresei unui cuvnt pentru maparea set-asociativ

Procedeul prin care se verific existena unui cuvnt n cache este urmtorul (figura 10): 1. Fiind dat o adres A, cache-ul calculeaz cele trei componente. 2. In cadrul setului Aset se inspecteaz toate valoarile C[Aset]tag i se compar cu valoarea Atag. 3. Dac nici una dintre etichetele din cadrul setului nu coincide cu Atag are loc un cache-miss. 4. Dac o etichet se potrivete, se inspecteaz valoarea C[Aset]{Atag}valid. 5. Dac linia nu are coninut valid, cuvntul nu este rezident i are loc un cache-miss. 6. Dac linia este valid are loc un cache-hit i cuvntul este rezident n C[Aset]{Atag}data[Aword] Obs: C[Aset]{Atag} = C[Aset][i], unde C[Aset][i]tag = Atag

Figura 10. Procedeul prin care se verific existena unui cuvnt n cache pentru maparea set asociativ

Figura 11. Exemplu de mapare set asociativ pentru un cache de 1K cu 2 linii pe set i memorie principal de 64K

Pentru a nlocui o linie n cadrul unui segment, vom urma una dintre politicile de evacuare. Am putea selecta LRU. Pentru c N este de dimensiuni reduse (2, 4, 8), este fezabil alegerea unei politici de evacuare foarte eficiente precum LRU. Aceast opiunea este neviabil pentru memoriile complet asociative datorit faptului c acolo exist prea multe posibiliti pentru a permite o realizare eficient i acceptabil ca pre.

4.4 Politici de evacuare a liniilor de cache


Pentru construcia mecanismului de traducere a adreselor, trebuie avut n vedere, mai nti, modul n care determinm pe ce linie punem noile adrese aduse din memorie. Cum n majoritatea cazurilor cache-ul este plin, trebuie fcut loc noilor cuvinte prin evacuarea datelor dintr-o linie de cache napoi n memorie. Politicile cele mai cunoscute pentru evacuarea unei linii sunt: Aleator: Folosind un generator pseudo-aleator de numere, se alege un numr la ntmplare, indiferent de adres i de ceea ce se gsete n cache. Este o variant necostisitoare, dar poate suferi dac se genereaz o secven nedorit, care duce la contenie. LRU (Least Recently Used): De fiecare dat cnd o linie este accesat, este mutat n capul listei de utilizare. Cnd memoria cache trebuie s ncarce date noi, este selectat linia de la coada listei; raionamentul este c aceasta, nemaifiind folosit de ceva timp, cel mai probabil nu va mai fi folosit. Pentru memorii cache de dimensiuni mari ntreinerea unei liste LRU este o opiune neviabil. LFU (Least Frequently Used): Linia care conine date accesate de cele mai puine ori este nlocuit. FIFO (First In, First Out) sau LRR (Least Recently Replaced): Linia care conine datele cele mai vechi este nlocuit. Deosebirea fa de LRU este c o linie poate fi eliminat chiar dac ea a fost accesat des pentru a fi citit.

5. Organizarea memoriei cache


5.1 Ocolirea cache-ului
Uneori este util/atractiv s se realizeze acces direct la memoria principal. Pentru a permite acest lucru, proiectarea sistemului de calcul are dou opiuni. n primul rnd, s-ar putea furniza instruciuni explicite (sau un mod al procesorului) care ntreprinde accesul fr a trece prin cache; acest procedeu se numete ocolirea memoriei cache (cache bypass). n al doilea rnd, s-ar putea furniza un mecanism de oprire a memoriei cache. Unele procesoare permit ca acest lucru s se realizeze la pornire, urmnd a funciona fr cache. Alte procesore permit o comutare dinamic on/off a memoriei cache. Ocolirea memoriei este un procedeu riscant datorit creterii anselor de apariie a inconsistenelor ntre cache i memoria principal.

5.2 Memorii cache divizate prin utilitate


Conceptul de divizare prin utilitate, de separare a datelor de instruciuni este folosit i n ceea ce privete organizarea memoriei cache a procesoarelor, ns a fost introdus de arhitecturile de tip Hardvard. Spre deosebire de arhitectura von Neumann, care impune o singur magistral i memorie pentru date i instruciuni, n arhitectura Harvard se face o separare clar a acestora, memoria de date fiind separat de cea de instruciuni (de multe ori i de tipuri diferite: flash i SRAM; cum e n cazul microcontrollerelor). La arhitectura Harvard accesul la memorii se face pe magistrale separate, astfel procesorul putnd s citeasc o instruciune i s citeasc/scrie date n acelai timp. Datorit acestui avantaj de rapiditate adus de arhitectura Harvard, s-a recurs la arhitectura Harvard modificat (Modified Harvard Architecture) ntlnit n majoritatea procesoarelor actuale (x86, ARM etc). Astfel, procesorul poate accesa datele i instruciunile pe magistrale separate i din cache-uri separate, pe modelul Harvard, ns spaiul de adresare este comun, accesul la memoria principal fiind fcut dup modelul von Neumann, iar instruciunile putnd fi privite ca date la acest nivel (se pot face programe care modific codul la runtime). Unul din avantajele existenei unui cache de date separat de cel de instruciuni este cel al diferitelor forme de localitate specifice fiecreia (vedei exemplul de la pre-fetching din seciunea 2). Astfel, se folosesc dou memorii cache, una pentru date, alta pentru instruciuni. Aceast implementare pare mai sigur i pentru c separarea accesrilor poate micora ansele de poluare i de contenie n cache. Un alt avantaj ar fi c se pot implementa anumite optimizri ale logicii hardware a cache-urilor. Spre exemplu, memoria cache de instruciuni poate fi mai simpl dect cea de date. Aceasta nu va avea nevoie de logica necesar operaiilor de scriere deoarece, n cele mai multe cazuri se efectueaz doar citirea de instruciuni, iar n situaiile rare de selfmodifying code instruciunile noi se vor scrie direct n memoria principal.

5.3 Memorii cache divizate pe niveluri


Este posibil stabilirea unei ierarhii i ntre memoriile de tip cache. n particular este atractiv s facem distincia ntre cache de pe acelai chip cu procesorul (on-chip cache) i cache din afara chip-ului. Diferena dintre ele este evident prin dimensiune, off-chip cache este mai mare dect memoria de pe chip. n lipsa unei interfee complicate de comunicare i aflndu-se la distan mic de procesor, memoria on-chip este mai rapid. Pe baza distanei fa de procesor se identific memoria cache de nivel 1 (L1 cache) cu dimenisiunea cea mai mic, memoria cache de nivel 2 (L2 cache) - mai mare i memoria cache de nivel 3 (L3 cache). n funcie de arhitectura

procesorului unul sau mai multe core-uri pot partaja acelai cache i numrul de niveluri poate varia n funcie de costurile i utilitatea procesorului. Ideea din spatele implementrii este c L1 cache se va ocupa de majoritatea accesrilor memoriei, ntr-un timp foarte scurt, fiind separat n memorie cache de date i memorie cache de instruciuni. Cele pe care nu le poate deservi vor fi preluate de celelalte niveluri de cache, n locul memoriei principale. Pentru a avea o oarecare eficien, acest mecanism se bazeaz pe valabilitatea principiului localitii. Exist dou filozofii de construcie a memoriei cache pe niveluri: 1. cache exclusiv liniile evacuate din cache L1 sunt trimise n cache L2 i aa mai departe. Aducerea liniilor n memoria cache L1 se face direct, deci rapid. 2. cache inclusiv liniile din cache L1 sunt prezente mereu n toate nivelele de cache. Evacuarea liniilor este mai rapid.

6. Memorii cache pentru sisteme multi-procesor


n sistemele de calcul moderne se ntlnesc n mod uzual mai multe procesoare, fiecare cu mai multe nuclee. Figura 12 prezint un exemplu de schem bloc a unui procesor multicore (arhitectura Intel i7 sau AMD Phenom - difer dimensiunile cache-urilor).

Figura 12. Ierarhia de memorii cache ntr-un procesor cu 4 nuclee

n imagine sunt prezentate cele patru nuclee ale procesorului. Nucleele au un cache L1 pentru date, unul pentru instruciuni i un cache L2 unificat. Chiar dac nucleele au propriul set de regitrii, cache L1 i L2, ele partajeaz memoria cache L3 i memoria principal. Aceast structur aduce pe lng beneficii i noi probleme. Astfel, n sistemele multi-procesor simetrice, memoriile cache ale diferitelor procesoare nu pot lucra independent. Toate procesoarele trebuie s vad, la un anumit moment de timp, exact aceleai date n memorie. Meninerea acestei uniformiti a vederii memoriei poart numele de asigurarea coerenei memoriei cache. Pentru cazul cel mai ntlnit, al memoriilor cache de tip write-back, dac un procesor ar analiza doar coninutul propriului cache nu ar vedea liniile murdare din cache-urile celorlalte procesoare. O soluie deloc eficient ar fi furnizarea accesului la cache-ul unui procesor ctre celelalte procesoare. O alt soluie, mai eficient, are la baz detectarea de ctre celelalte procesoare/ nuclee a inteniei unui procesor/nucleu de a scrie n propriul cache. Dac s-a detectat o operaiune de scriere n cache-ul altui procesor, celelalte procesoare i vor marca linia respectiv ca invalid. Cnd vor dori s acceseze acea linie, va avea loc o operaie de fetch din memoria principal. Memoriile cache avansate ofer suport pentru tehnici de snooping. Cnd un procesor cere o linie murdrit de alt procesor, procesorul care a murdrit acea linie detecteaz (snoops in on the other processors) cererea i transmite linia direct n cache-ul primului procesor, eventual scriind-o i n memoria principal n proces. Pentru meninerea coerenei memoriei cache s-au dezvoltat numeroi algoritmi, cel mai important fiind MESI (Modified, Exclusive, Shared, Invalid). Numele acestuia provine de la cele patru stri n care se poate afla o linie din cache, cele mai importante tranziiile dintre acestea fiind date de urmtoarele condiii: o linie murdar este prezent n cache-ul unui singur procesor cel care a murdrit-o

copii curate ale aceleiai linii se pot regsi n orict de multe cache-uri

Partajarea memoriei principale i a cache-ului n sistemele multicore i multiprocesor reprezint o problem complex i necesit o tratare separat, de aceea accentul acestui laborator nu este pus pe aceast tematic. Mai multe informaii putei s gsiti n articole de pe site-urile din domeniu [1] [2] sau n articole academice.

Bibliografie
[1] J. Hennessy, D. Patterson. Computer Architecture: A quantitative approach, 4th ed. [2] D.Page. A Practical Introduction to Computer Architecture, Springer, 2009 [3] W. Stallings. Computer Organization & Architecture, Pearson Education, Prentice Hall, 2003 [4] N. Jouppi. Cache Write Policies and Performance, 1991 [5] S. Berg. Cache Prefetching, 2002. pdf download [6] Software Techniques for shared cache multi-core systems: http://software.intel.com/en-us/ articles/software-techniques-for-shared-cache-multi-core-systems/, last accessed 16.11.2011 [7] Effective Use of the Shared Cache in Multi-core Architectures: http://drdobbs.com/embeddedsystems/196902836, last accessed 16.11.2011