Acasă - Date
Impactul memoriei cache asupra performanței computerului. Ce este memoria cache pentru hard disk și de ce este necesară pentru ce este responsabilă dimensiunea cache?

Nu e vorba de numerar, ci de cache-memorie procesor și multe altele. Din volum cache-comercianții de memorie și-au făcut un alt fetiș comercial, mai ales cu cache-ul procesoarelor centrale și al hard disk-urilor (o au și plăcile video, dar încă nu au ajuns la el). Deci, există un procesor XXX cu un cache L2 de 1MB și exact același procesor XYZ cu un cache de 2MB. Ghici care este mai bun? Ah - nu o face imediat!

Cache-memoria este un buffer care stochează ceea ce poate și/sau trebuie pus deoparte pentru mai târziu. Procesorul face treaba și apar situații când datele intermediare trebuie stocate undeva. Ei bine, bineînțeles în cache! - la urma urmei, este ordine de mărime mai rapidă decât RAM, pentru că... se află în matrița procesorului și de obicei rulează la aceeași frecvență. Și apoi, după ceva timp, el va extrage aceste date înapoi și le va procesa din nou. În linii mari, este ca un sortator de cartofi pe bandă rulantă, care, de fiecare dată când dă peste altceva decât cartofi (morcovi), îl aruncă într-o cutie. Și când este plin, se ridică și îl scoate a lui spre camera alăturată. În acest moment, transportorul stă nemișcat și se observă timp de nefuncționare. Volumul cutiei este cacheîn această analogie. ȘI Câți a lui Ai nevoie de 1MB sau 12? Este clar că dacă a lui volumul este mic va trebui sa petreci prea mult timp la scoatere si va fi simplu, dar de la un anumit volum a lui o creștere suplimentară nu va face nimic. Ei bine, sortatorul va avea o cutie pentru 1000 kg de morcovi - dar nu va avea atât de mulți pe tot timpul său și asta nu îl va face de DOUA ORI MAI RAPID! Mai este o subtilitate - mare cache poate provoca o creștere a întârzierilor în accesarea acestuia, în primul rând și, în același timp, crește probabilitatea de erori în acesta, de exemplu în timpul overclockării - în al doilea rând. (despre CUM să determinați stabilitatea/instabilitatea procesorului în acest caz și să aflați că eroarea apare în mod specific în a lui cache, testați L1 și L2 - puteți citi aici.) În al treilea rând - cache consumă o cantitate decentă de suprafață de cip și bugetul de tranzistori al circuitului procesorului. Același lucru este valabil și pentru cache memorie hard disk. Iar dacă arhitectura procesorului este puternică, acesta va avea un cache de 1024 KB sau mai mult solicitat în multe aplicații. Dacă aveți un HDD rapid, 16MB sau chiar 32MB sunt potriviti. Dar nicio cantitate de 64 MB de cache nu o va face a lui mai rapid dacă este un trim numit versiunea verde (Green WD) cu o viteză de 5900 în loc de 7200 necesar, chiar dacă acesta din urmă are 8MB. Apoi procesoarele Intel și AMD folosesc acest lucru diferit cache(în general, AMD este mai eficient, iar procesoarele lor sunt adesea confortabile cu valori mai mici). În plus, Intel cache general, dar pentru AMD este personal pentru fiecare nucleu. Cel mai rapid cache L1 pentru procesoarele AMD este de 64 KB pentru date și instrucțiuni, ceea ce este de două ori mai mult decât pentru Intel. Cache al treilea nivel L3 este de obicei prezent în procesoarele de top cum ar fi AMD Phenom II 1055T X6 Socket AM3 2.8GHz sau un concurent Intel Core i7-980X.În primul rând, jocurile adoră volumele mari de cache. ȘI cache Multe aplicații profesionale NU le place (vezi Computer pentru randare, editare video și aplicații profesionale). Mai exact, cei mai pretențioși îi sunt în general indiferenți. Dar ceea ce cu siguranță nu ar trebui să faceți este să alegeți un procesor bazat pe dimensiunea memoriei cache. Vechiul Pentium 4, în ultimele sale manifestări, avea 2 MB de cache la frecvențe de operare cu mult peste 3 GHz - comparați a lui performanță cu un Celeron E1*** dual-core ieftin care funcționează la frecvențe de aproximativ 2 GHz. Nu va lăsa nicio piatră neîntoarsă de la bătrân. Un exemplu mai relevant este E8600 dual-core de înaltă frecvență, care costă aproape 200 de dolari (se pare că datorită cache-ului de 6 MB) și Athlon II X4-620 2.6GHz, care are doar 2MB. Acest lucru nu îl împiedică pe Athlone să-și măceleze concurentul.

După cum puteți vedea din grafice, nu există cache nu va înlocui nuclee suplimentare. Athlon cu 2MB cache (roșu) bate cu ușurință Cor2Duo cu 6MB cache, chiar și la o frecvență mai mică și aproape jumătate din cost. Mulți oameni uită și asta cache este prezent in placile video pentru ca, in general, au si procesoare. Un exemplu recent este placa video GTX460, unde reușesc nu numai să reducă magistrala și capacitatea de memorie (despre care cumpărătorul va ghici) - ci și CACHE shaders, respectiv, de la 512Kb la 384Kb (despre care cumpărătorul NU va ghici). Și aceasta va adăuga și contribuția negativă la productivitate. De asemenea, va fi interesant să aflați dependența performanței de dimensiunea memoriei cache. Să examinăm cât de repede crește odată cu creșterea dimensiunii memoriei cache folosind exemplul aceluiași procesor. După cum știți, procesoarele din seriile E6***, E4*** și E2*** diferă doar prin dimensiunea cache-ului (4, 2 și, respectiv, 1 MB fiecare). Funcționând la aceeași frecvență de 2400 MHz, ele arată următoarele rezultate.

După cum puteți vedea, rezultatele nu sunt prea diferite. Voi spune mai multe - dacă ar fi fost implicat un procesor cu o capacitate de 6MB, rezultatul ar fi crescut puțin mai mult, pentru că procesoarele ajung la saturație. Dar pentru modelele cu 512Kb scăderea ar fi vizibilă. Cu alte cuvinte, 2MB este suficient chiar și pentru jocuri. Pentru a rezuma, putem trage următoarea concluzie: cache este bine când există DEJA multe din toate celelalte. Este naiv și stupid să schimbi viteza unui hard disk sau numărul de nuclee de procesor pentru dimensiunea cache la același cost, pentru că nici cea mai încăpătoare cutie de sortare nu va înlocui un alt sortator Dar există și exemple bune.. Pentru de exemplu, Pentium Dual-Core într-o revizuire timpurie a procesului de 65 nm a avut 1 MB de cache pentru două nuclee (seria E2160 și similar), iar revizuirea ulterioară de 45 nm a seriei E5200 are încă 2 MB, toate celelalte lucruri fiind egale ( si cel mai important - PRET). Desigur, ar trebui să o alegeți pe cea din urmă.

Un cache este un buffer intermediar cu acces rapid care conține informații care sunt cel mai probabil să fie solicitate. Accesarea datelor din cache este mai rapidă decât recuperarea datelor originale din memoria operațională (RAM) și mai rapidă decât memoria externă (hard disk sau solid-state drive), reducând astfel timpul mediu de acces și crescând performanța generală a sistemului informatic.

O serie de modele de unități centrale de procesare (CPU) au propriul cache pentru a minimiza accesul la memoria cu acces aleatoriu (RAM), care este mai lentă decât registrele. Memoria cache poate oferi beneficii semnificative de performanță atunci când viteza de ceas a RAM este semnificativ mai mică decât viteza de ceas a procesorului. Viteza de ceas pentru memoria cache nu este de obicei cu mult mai mică decât viteza procesorului.

Niveluri de cache

Cache-ul CPU este împărțit în mai multe niveluri. Într-un procesor de uz general, numărul de niveluri poate fi acum până la 3. Cache-ul de nivel N+1 este de obicei mai mare ca dimensiune și mai lent ca viteză de acces și transfer de date decât cache-ul de nivel N.

Cea mai rapidă memorie este cache-ul de prim nivel - L1-cache. De fapt, este o parte integrantă a procesorului, deoarece este situat pe același cip și face parte din blocurile funcționale. La procesoarele moderne, memoria cache L1 este de obicei împărțită în două cache, cache-ul de instrucțiuni și cache-ul de date (arhitectura Harvard). Majoritatea procesoarelor fără cache L1 nu pot funcționa. Cache-ul L1 funcționează la frecvența procesorului și, în general, poate fi accesat la fiecare ciclu de ceas. Este adesea posibilă efectuarea simultană a mai multor operații de citire/scriere. Latența de acces este de obicei de 2-4 cicluri de ceas de bază. Volumul este de obicei mic - nu mai mult de 384 KB.

Al doilea cel mai rapid este L2-cache - un cache de al doilea nivel, situat de obicei pe cip, ca L1. La procesoarele mai vechi, un set de cipuri pe placa de bază. Volumul cache L2 de la 128 KB la 1-12 MB. În procesoarele moderne cu mai multe nuclee, cache-ul de al doilea nivel, situat pe același cip, este o memorie separată - cu o dimensiune totală a cache-ului de nM MB, fiecare nucleu are nM/nC MB, unde nC este numărul de nuclee de procesor. De obicei, latența cache-ului L2 situat pe cipul central este de la 8 la 20 de cicluri de ceas de bază.

Cel de-al treilea nivel cache este cel mai puțin rapid, dar poate fi foarte impresionant ca dimensiune - mai mult de 24 MB. Cache-ul L3 este mai lent decât cache-urile anterioare, dar totuși semnificativ mai rapid decât RAM. În sistemele multiprocesor este de uz comun și este destinat sincronizării datelor din diferite L2.

Uneori există și un cache de nivel 4, acesta este de obicei situat într-un cip separat. Utilizarea cache-ului de nivel 4 este justificată numai pentru servere și mainframe de înaltă performanță.

Problema sincronizării între diferitele cache (atât unul cât și mai multe procesoare) este rezolvată prin coerența cache. Există trei opțiuni pentru schimbul de informații între cache-uri de diferite niveluri sau, după cum se spune, arhitecturi cache: inclusive, exclusive și neexclusive.

Cât de important este memoria cache L3 pentru procesoarele AMD?

Într-adevăr, este logic să echipați procesoarele cu mai multe nuclee cu memorie dedicată care va fi partajată de toate nucleele disponibile. În acest rol, un cache rapid de nivel al treilea (L3) poate accelera în mod semnificativ accesul la datele care sunt solicitate cel mai des. Atunci nucleele, dacă este posibil, nu vor trebui să acceseze memoria principală lentă (RAM).

Cel putin in teorie. Recent, AMD a anunțat procesorul Athlon II X4, care este un model Phenom II X4 fără cache L3, sugerând că nu este atât de necesar. Am decis să comparăm direct două procesoare (cu și fără cache L3) pentru a testa modul în care cache-ul afectează performanța.

Click pe poza pentru marire.

Cum funcționează memoria cache?

Înainte de a ne aprofunda în teste, este important să înțelegem câteva elemente de bază. Principiul cum funcționează memoria cache este destul de simplu. Cache-ul tamponează datele cât mai aproape de nucleele de procesare ale procesorului pentru a reduce cererile CPU la o memorie mai îndepărtată și mai lentă. Pe platformele desktop moderne, ierarhia cache-ului include până la trei niveluri care preced accesul la RAM. Mai mult, cache-urile celui de-al doilea și, în special, al treilea nivel servesc nu numai la stocarea datelor. Scopul lor este de a preveni supraîncărcarea magistralei procesorului atunci când nucleele trebuie să facă schimb de informații.

Lovituri și rateuri

Eficacitatea arhitecturilor cache este măsurată prin rata de accesare. Solicitările de date care pot fi satisfăcute de cache sunt considerate accesări. Dacă acest cache nu conține datele necesare, atunci cererea este transmisă mai departe de-a lungul conductei de memorie și se contorizează o pierdere. Desigur, greșelile duc la mai mult timp necesar pentru a obține informații. Ca rezultat, „bule” (inactiv) și întârzieri apar în conducta de calcul. Hiturile, dimpotrivă, vă permit să mențineți performanța maximă.

Intrare în cache, exclusivitate, coerență

Politicile de înlocuire dictează modul în care spațiul este eliberat în cache pentru noile intrări. Deoarece datele scrise în cache trebuie să apară în cele din urmă în memoria principală, sistemele pot face acest lucru în același timp cu scrierea în cache (scriere prin scriere) sau pot marca zonele de date ca „murdare” (rescriere) și pot scrie în memorie când este evacuată din cache.

Datele din mai multe niveluri de cache pot fi stocate exclusiv, adică fără redundanță. Atunci nu veți găsi aceleași linii de date în două ierarhii de cache diferite. Sau cache-urile pot funcționa inclusiv, adică nivelurile inferioare de cache sunt garantate să conțină date prezente în nivelurile de cache superioare (mai aproape de nucleul procesorului). AMD Phenom utilizează un cache L3 exclusiv, în timp ce Intel urmează o strategie de cache inclusivă. Protocoalele de coerență asigură integritatea și prospețimea datelor în diferite nuclee, niveluri de cache și chiar procesoare.

Mărimea cache-ului

Un cache mai mare poate stoca mai multe date, dar tinde să crească latența. În plus, un cache mare consumă un număr considerabil de tranzistori de procesor, așa că este important să găsim un echilibru între bugetul tranzistorului, dimensiunea matriței, consumul de energie și performanță/latență.

Asociativitatea

Intrările din RAM pot fi mapate direct în cache, adică există o singură poziție cache pentru o copie a datelor din RAM, sau pot fi asociative în n moduri, adică există n locații posibile în cache în care acest lucru datele pot fi stocate. Grade mai înalte de asociativitate (până la cache-uri complet asociative) oferă o flexibilitate mai mare de stocare în cache, deoarece datele existente în cache nu trebuie rescrise. Cu alte cuvinte, un grad n ridicat de asociativitate garantează o rată de hit mai mare, dar crește și latența, deoarece este nevoie de mai mult timp pentru a verifica toate acele asocieri pentru un hit. În mod obișnuit, cel mai înalt grad de asociere este rezonabil pentru ultimul nivel de stocare în cache, deoarece capacitatea maximă este disponibilă acolo, iar căutarea datelor în afara acestui cache va duce la accesarea procesorului RAM lentă.

Iată câteva exemple: Core i5 și i7 folosesc 32 KB de cache L1 cu asociativitate cu 8 căi pentru date și 32 KB de cache L1 cu asociativitate în 4 căi pentru instrucțiuni. Este de înțeles că Intel dorește ca instrucțiunile să fie disponibile mai rapid și cache-ul de date L1 să aibă o rată de accesare maximă. Cache-ul L2 de pe procesoarele Intel are asociativitate cu 8 căi, iar memoria cache Intel L3 este și mai inteligentă, deoarece implementează asociativitate cu 16 căi pentru a maximiza accesările.

Cu toate acestea, AMD urmează o strategie diferită cu procesoarele Phenom II X4, care utilizează un cache L1 asociativ cu două căi pentru a reduce latența. Pentru a compensa eventualele erori, capacitatea cache-ului a fost dublată: 64 KB pentru date și 64 KB pentru instrucțiuni. Cache-ul L2 are asociativitate cu 8 căi, ca și designul Intel, dar memoria cache L3 de la AMD funcționează cu asociativitate cu 48 de căi. Dar decizia de a alege o arhitectură cache în detrimentul unei alte nu poate fi evaluată fără a lua în considerare întreaga arhitectură a CPU. Este destul de firesc ca rezultatele testelor să aibă o semnificație practică, iar scopul nostru a fost tocmai un test practic al întregii structuri complexe de stocare în cache pe mai multe niveluri.

Fiecare procesor modern are un cache dedicat care stochează instrucțiunile și datele procesorului, gata de utilizare aproape instantaneu. Acest nivel este denumit în mod obișnuit cache de nivel 1 sau L1 și a fost introdus pentru prima dată în procesoarele 486DX. Recent, procesoarele AMD au devenit standard cu 64 KB cache L1 per nucleu (pentru date și instrucțiuni), iar procesoarele Intel folosesc 32 KB cache L1 per nucleu (și pentru date și instrucțiuni)

Cache-ul L1 a apărut pentru prima dată pe procesoarele 486DX, după care a devenit o caracteristică integrală a tuturor procesoarelor moderne.

Cache-ul de nivel al doilea (L2) a apărut pe toate procesoarele după lansarea Pentium III, deși primele implementări ale acestuia pe ambalaj au fost în procesorul Pentium Pro (dar nu pe cip). Procesoarele moderne sunt echipate cu până la 6 MB de cache L2 pe cip. De regulă, acest volum este împărțit între două nuclee pe un procesor Intel Core 2 Duo, de exemplu. Configurațiile tipice L2 oferă 512 KB sau 1 MB de cache per nucleu. Procesoarele cu un cache L2 mai mic tind să fie la un nivel de preț mai scăzut. Mai jos este o diagramă a implementărilor timpurii ale cache-ului L2.

Pentium Pro avea memoria cache L2 în ambalajul procesorului. În generațiile ulterioare de Pentium III și Athlon, memoria cache L2 a fost implementată prin cipuri SRAM separate, ceea ce era foarte comun la acea vreme (1998, 1999).

Anunțarea ulterioară a unei tehnologii de proces de până la 180 nm a permis producătorilor să integreze în sfârșit cache-ul L2 pe matrița procesorului.


Primele procesoare dual-core au folosit pur și simplu modele existente care includeau două matrițe per pachet. AMD a introdus un procesor dual-core pe un cip monolitic, a adăugat un controler de memorie și un comutator, iar Intel a asamblat pur și simplu două cipuri single-core într-un singur pachet pentru primul său procesor dual-core.


Pentru prima dată, memoria cache L2 a început să fie partajată între două nuclee de calcul pe procesoarele Core 2 Duo. AMD a mers mai departe și a creat primul său Phenom quad-core de la zero, iar Intel a folosit din nou o pereche de matrițe, de data aceasta două matrițe dual-core Core 2, pentru primul său procesor quad-core pentru a reduce costurile.

Cel de-al treilea nivel cache există încă din primele zile ale procesorului Alpha 21165 (96 KB, procesoare introduse în 1995) sau IBM Power 4 (256 KB, 2001). Cu toate acestea, în arhitecturile bazate pe x86, memoria cache L3 a apărut pentru prima dată cu modelele Intel Itanium 2, Pentium 4 Extreme (Gallatin, ambele procesoare în 2003) și Xeon MP (2006).

Implementările timpurii au oferit pur și simplu un alt nivel în ierarhia cache-ului, deși arhitecturile moderne folosesc memoria cache L3 ca un buffer mare, partajat pentru transferul de date între nuclee în procesoarele multi-core. Acest lucru este subliniat de gradul n ridicat de asociativitate. Este mai bine să cauți date puțin mai mult în cache decât să ajungi la o situație în care mai multe nuclee folosesc acces foarte lent la memoria RAM principală. AMD a introdus pentru prima dată memoria cache L3 pe un procesor desktop cu linia Phenom deja menționată. Phenom X4 de 65 nm conținea 2 MB de cache L3 partajat, iar Phenom II X4 modern de 45 nm are deja 6 MB de cache L3 partajat. Procesoarele Intel Core i7 și i5 folosesc 8 MB de cache L3.

Procesoarele moderne quad-core au cache L1 și L2 dedicate pentru fiecare nucleu, precum și un cache L3 mare partajat de toate nucleele. Cache-ul L3 partajat permite, de asemenea, schimbul de date pe care nucleele pot lucra în paralel.


Salutare baieti Sa vorbim despre procesor, sau mai exact, despre cache-ul lui. Cache-ul procesorului poate fi diferit, de exemplu, acum am un Pentium G3220 (socket 1150), acesta este un procesor modern si are 3 MB de cache. Dar, în același timp, vechiul model Pentium D965 (socket 775) are 4 MB de cache. Dar, în același timp, G3220 este de câteva ori mai rapid decât D965, ceea ce vreau să spun este că cache-ul este bun, dar principalul este că cache-ul este modern. Memoria cache a procesoarelor mai vechi este mult mai lentă decât cea a celor noi, țineți cont de acest lucru.

Să vorbim despre unele dispozitive care afectează performanța. Uite, hai să luăm un hard disk, are cache? Da, există, dar este mic, deși are un impact ușor asupra performanței. Atunci ce se întâmplă? Apoi vine RAM-ul, tot ceea ce funcționează programul sau procesorul, toate acestea sunt plasate în RAM. Dacă nu există date în RAM, atunci acestea sunt citite de pe hard disk, iar acest lucru este foarte lent. Dar RAM-ul este deja foarte rapid, poate fi destul de mult. Dar RAM-ul este rapid în comparație cu un hard disk pentru un procesor încă nu este foarte rapid și, prin urmare, acesta din urmă are și propriul cache, care este deja super rapid!

Ce afectează memoria cache a procesorului? În acest cache procesorul stochează ceea ce folosește adesea, adică tot felul de comenzi și instrucțiuni. În consecință, cu cât există mai multe, cu atât mai bine, dar acest lucru nu este în întregime adevărat. Cât cache ai? Dacă nu știi, atunci îți voi arăta cum să afli, totul este simplu. Ei bine, uite ce situație interesantă, să ne întoarcem din nou la vechile procese. Se pare că dacă există mult cache, atunci este bine. Există însă un procesor Q9650 (socket 775), care are 12 MB de cache, dar nu se apropie nici măcar de modelele moderne Core i5 sau chiar Core i3. I5 are mult mai puțin cache, adică doar 6 MB, iar i3 are și mai puțin cache - doar 3 MB.

Înțeleg că, în general, procesoarele moderne sunt mult mai rapide decât cele vechi. Dar nu despre asta vorbesc. Cache-ul și cache-ul sunt diferite; Prin urmare, acei 12 MB nu sunt de folos. Asta este tot ce vreau să spun: nu urmări cantitatea, urmărește calitatea. Deci așa. Ți-am scris toate acestea ca o notă, sper să-ți fie de folos

Iată o imagine simplă a modului în care funcționează memoria cache:

Și iată o altă imagine, aici este indicat și un alt dispozitiv, acesta este un controler, care doar îți spune dacă există sau nu date în cache:

Memoria cache este super rapidă. Nu știu atât de bine despre procesoare, dar ar fi interesant de știut, dacă acest cache ar fi... 100 MB... sau chiar 1 GB... ar fi procesorul mai rapid? Acest lucru este, desigur, fantastic chiar și acum, dar acum există procesoare cu o cantitate uriașă de cache... aproximativ 30 MB sau mai mult.. Nu sunt sigur de asta, dar se pare că această memorie cache este foarte scumpă și in general e greu sa-l pui intr-un procesor, ma refer la volum mare

Ei bine, acum permiteți-mi să vă arăt cum să aflați câtă memorie cache este în procesor. Dacă aveți Windows 10, atunci acest lucru este grozav, deoarece poate afișa toate cache-urile, există trei niveluri acolo. Deși al treilea nivel pare a fi cel mai important, este și cel mai mare. Deci, uite, deschide managerul de activități și mergi la fila Performanță și aici pe fila CPU poți vedea informații despre cache, aici este:

Aici puteți vedea că am un Pentium G3220, un procesor destul de bun, deși ieftin. Dar este de fapt mai rapid decât multe modele de pe socket 775, care pot fi numite modele aproape de top și care au mult mai mult cache... Acestea sunt lucrurile...

Dar vă spun sincer că aceasta nu este o modalitate clară de a vedea câtă memorie cache are un procesor. Vă sfătuiesc să utilizați utilitarul CPU-Z dacă vă gândiți astfel: da, acesta este un program, trebuie să îl instalez și toate astea, dar haide... Atunci opriți-vă! Acest program este folosit de overlockerii cool care își overclockează procesoarele. În timpul instalării, utilitarul nu creează o grămadă de fișiere și, de fapt, instalarea este doar despachetarea programului în Fișiere de program, apoi cpuz.exe poate fi copiat oriunde și rulat, va funcționa! Tocmai l-au lansat și gata, ea a strâns informațiile și uite! Îl puteți descărca cu ușurință de pe Internet, deoarece este disponibil la fiecare colț. Doar asigurați-vă că nu prindeți viruși.. Pentru a face acest lucru, descărcați, de exemplu, pe portalul soft.. Așa că scrieți în căutarea portalului soft CPU-Z. CPU-Z funcționează pe aproape toate versiunile de Windows, cu excepția celor mai vechi...

În general, îl puteți descărca de pe acest site: cpuid.com, pur și simplu nu știam despre el și eram obișnuit să descarc de pe alte site-uri!

Ei bine, sper că îl puteți descărca fără probleme. Acum îl lansezi și totul despre procesor este la îndemâna ta. Așa că am lansat CPU-Z și iată ce a arătat despre Pentium G3220 al meu:

Unde am încercuit caseta, acolo este afișat memoria cache. Ce este o cale, ei bine, scrie 8-way, 12-way, ei bine, nu știu ce este, îmi pare rău. Dar după cum puteți vedea aici, puteți vedea clar nu numai memoria cache, ci și alte informații, frecvență, nuclee și fire. Ei bine, ceea ce este, de asemenea, interesant este ceea ce arată una sau două cache-uri aici. Ei bine, aici spun doar 3 MB, adică am doar 3 MB de cache.

Dar, de exemplu, în ceea ce privește top-end Q9650, situația este puțin diferită, chiar dacă există 12 MB de cache, dar acestea sunt în esență două blocuri de 6 MB fiecare și CPU-Z determină acest lucru:

Apropo, după cum puteți vedea, există overclocking la 4 GHz, ceea ce nu este rău. Apropo, un astfel de overclocking poate fi bine răcit cu aer. Dar asta e cu totul alta poveste...

Apropo, un alt lucru interesant este că modelele de pe socket 775 nu au un cache L3 de nivel al treilea... Adică există doar L1 și L2..., dar nu știam...

Deci astea sunt lucrurile. Sper ca am scris totul clar. Repet încă o dată, nu urmăriți cantitatea. Așa că nu prea regret, dar totuși... Pe scurt, l-am luat și mi-am construit un computer pe soclul 1150. Ei bine, cred că totul este bine. Dar m-am simțit puțin jignit când am aflat că a fost lansat socket-ul 1151 și că costă la fel, sau chiar puțin mai ieftin... Dar procesoarele sunt de fapt mai rapide acolo... Ei bine, bine. Tocmai mi-am cumpărat un computer de mulți ani, dar m-am bucurat că placa mea și acest Asus Gryphon Z87 acceptă procesoare bazate pe nucleul Devil’s Canyon! Acesta a fost un cadou, pentru că Intel declarase anterior că aceste procesoare vor fi suportate doar de chipsetul Z97, dar am luat blestemul de Z87!

Pe scurt, acestea sunt lucrurile

Asta e tot băieți. Sper că totul va fi bine pentru tine și aceste informații ți-au fost de folos, succes

Spre casă! procesor cache 30.07.2016

virtmachine.ru

Impactul memoriei cache asupra performanței computerului

Toți utilizatorii cunosc bine elementele computerului, cum ar fi procesorul, care este responsabil pentru prelucrarea datelor, precum și memoria cu acces aleatoriu (RAM sau RAM), care este responsabilă pentru stocarea acestora. Dar probabil că nu toată lumea știe că există și o memorie cache a procesorului (Cache CPU), adică RAM-ul procesorului în sine (așa-numita ultra-RAM).

Funcția de cache

Care este motivul care i-a determinat pe designerii de calculatoare să folosească memorie dedicată pentru procesor? Capacitatea RAM a computerului nu este suficientă?

Într-adevăr, pentru o lungă perioadă de timp, computerele personale au făcut fără nicio memorie cache. Dar, după cum știți, procesorul este cel mai rapid dispozitiv de pe un computer personal și viteza lui a crescut cu fiecare nouă generație de CPU. În prezent, viteza sa este măsurată în miliarde de operații pe secundă. În același timp, RAM standard nu și-a crescut semnificativ performanța pe parcursul evoluției sale.

În general, există două tehnologii principale de cip de memorie - memoria statică și memoria dinamică. Fără să ne adâncim în detaliile designului lor, vom spune doar că memoria statică, spre deosebire de memoria dinamică, nu necesită regenerare; În plus, memoria statică folosește 4-8 tranzistori pentru un bit de informație, în timp ce memoria dinamică folosește 1-2 tranzistori. În consecință, memoria dinamică este mult mai ieftină decât memoria statică, dar în același timp mult mai lentă. În prezent, cipurile RAM sunt fabricate pe baza memoriei dinamice.

Evoluția aproximativă a raportului dintre viteza procesoarelor și RAM:

Astfel, dacă procesorul ar prelua informații din RAM tot timpul, ar trebui să aștepte o memorie dinamică lentă și ar fi inactiv tot timpul. În același caz, dacă s-ar folosi memoria statică ca RAM, costul computerului ar crește de câteva ori.

De aceea a fost dezvoltat un compromis rezonabil. Cea mai mare parte a memoriei RAM a rămas dinamică, în timp ce procesorul a primit propria memorie cache rapidă bazată pe cipuri de memorie statică. Volumul său este relativ mic - de exemplu, dimensiunea cache-ului de al doilea nivel este de doar câțiva megaocteți. Cu toate acestea, merită să ne amintim că întreaga memorie RAM a primelor computere IBM PC avea mai puțin de 1 MB.

În plus, oportunitatea introducerii tehnologiei de caching este influențată și de faptul că diferite aplicații situate în RAM încarcă diferit procesorul și, ca urmare, există o mulțime de date care necesită o prelucrare prioritară în comparație cu altele.

Istoricul memoriei cache

Strict vorbind, înainte ca memoria cache să fie mutată pe computerele personale, aceasta fusese deja folosită cu succes în supercomputere de câteva decenii.

Pentru prima dată, într-un PC bazat pe procesorul i80386 a apărut o memorie cache de doar 16 KB. Astăzi, procesoarele moderne folosesc diferite niveluri de cache, de la primul (cel mai rapid cache de cea mai mică dimensiune - de obicei 128 KB) până la al treilea (cel mai lent cache de cea mai mare dimensiune - până la zeci de MB).

La început, memoria cache externă a procesorului a fost localizată pe un cip separat. Cu timpul, însă, acest lucru a făcut ca magistrala situată între cache și procesor să devină un blocaj, încetinind schimbul de date. În microprocesoarele moderne, atât primul cât și cel de-al doilea nivel de memorie cache sunt situate în miezul procesorului însuși.

Multă vreme, procesoarele au avut doar două niveluri de cache, dar procesorul Intel Itanium a fost primul care a prezentat un cache de nivel al treilea, comun tuturor nucleelor ​​de procesor. Există și dezvoltări de procesoare cu un cache pe patru niveluri.

Arhitecturi și principii cache

Astăzi se cunosc două tipuri principale de organizare a memoriei cache, care provin din primele dezvoltări teoretice în domeniul ciberneticii - arhitecturile Princeton și Harvard. Arhitectura Princeton presupune un singur spațiu de memorie pentru stocarea datelor și comenzilor, în timp ce arhitectura Harvard implică unele separate. Majoritatea procesoarelor x86 de computere personale folosesc un tip separat de memorie cache. În plus, un al treilea tip de memorie cache a apărut și în procesoarele moderne - așa-numitul buffer de traducere asociativă, conceput pentru a accelera conversia adreselor de memorie virtuală ale sistemului de operare în adrese de memorie fizică.

O diagramă simplificată a interacțiunii dintre memoria cache și procesor poate fi descrisă după cum urmează. În primul rând, verifică prezența informațiilor de care are nevoie procesorul în cel mai rapid cache de primul nivel, apoi în cel de al doilea nivel, etc. Dacă informațiile necesare nu sunt găsite în niciun nivel de cache, atunci o numesc o eroare sau o pierdere de cache. Dacă nu există deloc informații în cache, atunci procesorul trebuie să o ia din RAM sau chiar din memoria externă (de pe hard disk).

Ordinea în care procesorul caută informații în memorie:

Acesta este modul în care Procesorul caută informații

Pentru a controla funcționarea memoriei cache și interacțiunea acesteia cu unitățile de calcul ale procesorului, precum și RAM, există un controler special.

Schema de organizare a interacțiunii nucleului procesorului, cache-ului și RAM:


Controlerul cache este legătura cheie între procesor, RAM și memoria cache

Trebuie remarcat faptul că stocarea în cache a datelor este un proces complex care utilizează multe tehnologii și algoritmi matematici. Printre conceptele de bază utilizate în cache se numără metodele de scriere în cache și arhitectura asociativității cache.

Metode de scriere în cache

Există două metode principale de scriere a informațiilor în memoria cache:

  1. Metoda de rescriere – datele sunt scrise mai întâi în cache, iar apoi, când apar anumite condiții, în RAM.
  2. Metoda de scriere – datele sunt scrise simultan în RAM și cache.

Arhitectura asociativității cache

Arhitectura asociativității cache definește modul în care datele din RAM sunt mapate în cache. Principalele opțiuni pentru memorarea în cache a arhitecturii asociativității sunt:

  1. Cache mapat direct - o anumită secțiune a memoriei cache este responsabilă pentru o anumită secțiune a RAM
  2. Cache complet asociativ - orice parte a memoriei cache poate fi asociată cu orice parte a memoriei RAM
  3. Cache mixt (set-asociativ)

Nivelurile de cache diferite pot utiliza, de obicei, arhitecturi de asociativitate cache diferite. Memorarea în memoria cache a memoriei RAM cu mapare directă este cea mai rapidă opțiune de stocare în cache, așa că această arhitectură este de obicei utilizată pentru cache-urile mari. La rândul său, un cache complet asociativ are mai puține erori de cache (gașuri).

Concluzie

În acest articol, ați fost introdus în conceptul de memorie cache, arhitectura memoriei cache și metodele de stocare în cache și ați învățat cum afectează performanța unui computer modern. Prezența memoriei cache poate optimiza în mod semnificativ funcționarea procesorului, poate reduce timpul de inactivitate și, în consecință, poate crește performanța întregului sistem.

biosgid.ru

Galerie de efecte în memoria cache a procesorului

Aproape toți dezvoltatorii știu că memoria cache a procesorului este o memorie mică, dar rapidă, care stochează date din zonele de memorie vizitate recent - definiția este scurtă și destul de precisă. Cu toate acestea, cunoașterea detaliilor plictisitoare despre mecanismele cache este necesară pentru a înțelege factorii care afectează performanța codului.

În acest articol vom analiza o serie de exemple care ilustrează diferite caracteristici ale cache-urilor și impactul acestora asupra performanței. Exemplele vor fi în C# alegerea limbajului și a platformei nu afectează foarte mult evaluarea performanței și concluziile finale. Desigur, în limite rezonabile, dacă alegeți o limbă în care citirea unei valori dintr-o matrice este echivalentă cu accesarea unui tabel hash, nu veți obține niciun rezultat interpretabil. Notele traducătorului sunt cu caractere cursive.

Habracut - - -

Exemplul 1: Acces la memorie și performanță
Cu cât crezi că este mai rapid al doilea ciclu decât primul? int arr = int nou;

Pentru (int i = 0; i // secundă pentru (int i = 0; i Exemplul 2: influența liniilor cache) Să săpăm mai adânc - încercați alte valori de pas, nu doar 1 și 16: for (int i = 0; i

Vă rugăm să rețineți că, cu valori de trepte de la 1 la 16, timpul de funcționare rămâne practic neschimbat. Dar cu valori mai mari de 16, timpul de rulare scade cu aproximativ jumătate de fiecare dată când dublăm pasul. Acest lucru nu înseamnă că bucla începe cumva în mod magic să ruleze mai repede, doar că și numărul de iterații scade. Punctul cheie este același timp de funcționare cu valori de pas de la 1 la 16.

Motivul pentru aceasta este că procesoarele moderne accesează memoria nu octet cu octet, ci în blocuri mici numite linii cache. De obicei, dimensiunea șirului este de 64 de octeți. Când citiți orice valoare din memorie, cel puțin o linie de cache intră în cache. Accesul ulterior la orice valoare din acest rând este foarte rapid. Deoarece 16 valori int ocupă 64 de octeți, buclele cu pași de la 1 la 16 accesează același număr de linii cache, sau mai precis, toate liniile cache ale matricei. La pasul 32, accesul are loc la fiecare a doua linie, la pasul 64, la fiecare a patra. Înțelegerea acestui lucru este foarte importantă pentru unele tehnici de optimizare. Numărul de accesări la acesta depinde de locația datelor în memorie. De exemplu, datele nealiniate pot necesita două accesări la memoria principală în loc de una. După cum am aflat mai sus, viteza de operare va fi de două ori mai mică.

Exemplul 3: dimensiunile cache de nivel 1 și 2 (L1 și L2)
Procesoarele moderne au de obicei două sau trei niveluri de cache, numite de obicei L1, L2 și L3. Pentru a afla dimensiunile cache-urilor la diferite niveluri, puteți utiliza utilitarul CoreInfo sau funcția Windows API GetLogicalProcessorInfo. Ambele metode oferă, de asemenea, informații despre dimensiunea liniei de cache pentru fiecare nivel. Pe aparatul meu, CoreInfo raportează 32 KB cache de date L1, 32 KB cache de instrucțiuni L1 și 4 MB cache de date L2. Fiecare nucleu are propriile sale cache L1 personale, cache-urile L2 sunt comune pentru fiecare pereche de nuclee: Procesor logic la Harta cache: *--- Cache de date 0, Nivel 1, 32 KB, Assoc 8, LineSize 64 *--- Cache de instrucțiuni 0, Level 1, 32 KB, Assoc 8, LineSize 64 -*-- Data Cache 1, Level 1, 32 KB, Assoc 8, LineSize 64 -*-- Instruction Cache 1, Level 1, 32 KB, Assoc 8, LineSize 64 ** -- Unified Cache 0, Level 2, 4 MB, Assoc 16, LineSize 64 --*- Data Cache 2, Level 1, 32 KB, Assoc 8, LineSize 64 --*- Instruction Cache 2, Level 1, 32 KB, Assoc 8, LineSize 64 ---* Data Cache 3, Level 1, 32 KB, Assoc 8, LineSize 64 ---* Instruction Cache 3, Level 1, 32 KB, Assoc 8, LineSize 64 --** Unified Cache 1 , Level 2, 4 MB, Assoc 16, LineSize 64 Să verificăm aceste informații experimental. Pentru a face acest lucru, să trecem prin matricea noastră, incrementând fiecare a 16-a valoare - o modalitate ușoară de a schimba datele din fiecare linie de cache. Când ajungem la sfârșit, ne întoarcem la început. Să verificăm diferitele dimensiuni de matrice; ar trebui să vedem o scădere a performanței atunci când matricea nu se mai încadrează în cache-urile de diferite niveluri. Codul este: int steps = 64 * 1024 * 1024; // numărul de iterații int lengthMod = arr.Length - 1; // dimensiunea matricei -- puterea a doi

pentru (int i = 0; i (

// x & lengthMod = x % arr.Length, deoarece puteri de doi

Arr[(i * 16) & lengthMod]++; ) Rezultatele testului:

Pe aparatul meu, există scăderi vizibile ale performanței după 32 KB și 4 MB - acestea sunt dimensiunile cache-urilor L1 și L2.

Exemplul 4: Paralelismul instrucțiunilor
Acum să ne uităm la altceva. În opinia dumneavoastră, care dintre aceste două bucle se va executa mai repede? int pași = 256 * 1024 * 1024; int a = int nou;

Pentru (int i = 0; i // secundă pentru (int i = 0; i) Exemplul 5: asociativitatea cache-ului Una dintre întrebările cheie la care trebuie să se răspundă la proiectarea unui cache este dacă datele dintr-o anumită zonă de memorie pot fi stocate în orice celulele cache sau doar în unele dintre ele. Trei soluții posibile:

  1. Cache mapat direct, datele fiecărei linii de cache din RAM sunt stocate într-o singură locație cache predefinită. Cel mai simplu mod de a calcula maparea este: row_index_in_memory % number_of_cache_cells. Două linii mapate la aceeași celulă nu pot fi în cache în același timp.
  2. Cache parțial asociativ cu N intrări, fiecare linie poate fi stocată în N locații cache diferite. De exemplu, într-un cache cu 16 intrări, o linie poate fi stocată într-una dintre cele 16 celule care alcătuiesc grupul. De obicei, rândurile cu biți egali de indici mai puțin semnificativi împart un grup.
  3. Cache complet asociativ, orice linie poate fi stocată în orice locație cache. Soluția este echivalentă cu un tabel hash în comportamentul său.
Cache-urile mapate direct sunt predispuse la dispute, de exemplu, atunci când două rânduri concurează pentru aceeași celulă, se scot reciproc din cache, eficiența este foarte scăzută. Pe de altă parte, cache-urile complet asociative, deși lipsite de acest dezavantaj, sunt foarte complexe și costisitoare de implementat. Cache-urile parțial asociative reprezintă un compromis tipic între complexitatea și eficiența implementării. De exemplu, pe computerul meu, memoria cache L2 de 4 MB este o cache asociată parțială cu 16 intrări. Întreaga RAM este împărțită în seturi de linii conform celor mai puțin semnificative biți ai indicilor lor, liniile din fiecare set concurează pentru un grup de 16 celule cache L2.

Deoarece memoria cache L2 are 65.536 de celule (4 * 220 / 64) și fiecare grup este format din 16 celule, avem un total de 4.096 de grupuri. Astfel, cei 12 biți inferiori ai indexului de rând determină grupului căruia îi aparține acest rând (212 = 4.096). Ca rezultat, rândurile cu adrese care sunt multipli de 262.144 (4.096 * 64) împart același grup de 16 celule și concurează pentru spațiul din acesta.

Pentru ca efectele asociativității să aibă efect, trebuie să accesăm constant un număr mare de rânduri din același grup, de exemplu, folosind următorul cod: public static long UpdateEveryKthByte(byte arr, int K) (

const int rep = 1024 * 1024; // numărul de iterații

Cronometru sw = Cronometru.StartNew();

Pentru (int i = 0; i p += K; if (p >= arr.Length) p = 0; ) sw.Stop();

return sw.ElapsedMilliseconds;

) Metoda incrementează fiecare K-lea element al tabloului. Când ajungem la capăt, începem din nou. După un număr destul de mare de iterații (220), ne oprim. Am făcut rulări pentru diferite dimensiuni de matrice și valori K pasi (albastru - timp de rulare lung, alb - scurt):

Zonele albastre corespund cazurilor în care, cu modificări constante ale datelor, memoria cache nu este capabilă să găzduiască toate datele necesare în același timp. O culoare albastră strălucitoare indică un timp de funcționare de aproximativ 80 ms, aproape alb - 10 ms.

Să ne ocupăm de zonele albastre:

  1. De ce apar linii verticale? Liniile verticale corespund valorilor pasului la care sunt accesate prea multe rânduri (mai mult de 16) dintr-un grup. Pentru aceste valori, memoria cache cu 16 intrări a mașinii mele nu poate găzdui toate datele necesare.

    Unele dintre valorile stride proaste sunt puteri de doi: 256 și 512. De exemplu, luați în considerare stride 512 și o matrice de 8 MB. Cu acest pas, există 32 de secțiuni în matrice (8 * 220 / 262.144), care concurează între ele pentru celule din 512 grupuri de cache (262.144 / 512). Există 32 de secțiuni, dar există doar 16 celule în cache pentru fiecare grup, așa că nu există suficient spațiu pentru toată lumea.

    Alte valori ale pașilor care nu sunt puteri de doi sunt pur și simplu ghinioniste, ceea ce provoacă un număr mare de accesări la aceleași grupuri de cache și, de asemenea, duce la apariția unor linii albastre verticale în figură. În acest moment, iubitorii de teoria numerelor sunt invitați să gândească.

  2. De ce se rup liniile verticale la limita de 4 MB? Când dimensiunea matricei este de 4 MB sau mai puțin, memoria cache cu 16 intrări se comportă ca un cache complet asociativ, adică poate găzdui toate datele din matrice fără conflicte. Nu există mai mult de 16 zone care se luptă pentru un grup de cache (262.144 * 16 = 4 * 220 = 4 MB).
  3. De ce există un triunghi albastru mare în stânga sus? Pentru că, cu un pas mic și o matrice mare, memoria cache nu este capabilă să încapă toate datele necesare. Gradul de asociativitate a cache-ului joacă un rol secundar aici, limitarea este legată de dimensiunea cache-ului L2. De exemplu, cu o dimensiune a matricei de 16 MB și un pas de 128, accesăm fiecare 128 de octeți, modificând astfel fiecare a doua linie de cache a matricei. Pentru a stoca fiecare a doua linie în cache, aveți nevoie de 8 MB de cache, dar pe aparatul meu am doar 4 MB.

    Chiar dacă memoria cache ar fi complet asociativă, nu ar permite stocarea a 8 MB de date în el. Rețineți că în exemplul deja discutat cu un pas de 512 și o dimensiune a matricei de 8 MB, avem nevoie doar de 1 MB de cache pentru a stoca toate datele necesare, dar acest lucru este imposibil din cauza asociativității insuficiente a cache-ului.

  4. De ce partea stângă a triunghiului câștigă treptat în intensitate? Intensitatea maximă apare la o valoare a pasului de 64 de octeți, care este egală cu dimensiunea liniei de cache. După cum am văzut în primul și al doilea exemplu, accesul secvenţial la același rând nu costă practic nimic. Să zicem, cu un pas de 16 octeți, avem patru accesări la memorie la prețul unuia. Deoarece numărul de iterații este același în testul nostru pentru orice valoare de pas, un pas mai ieftin are ca rezultat un timp de rulare mai mic.
Efectele descoperite persistă la valori mari ale parametrilor:

Asociativitatea cache-ului este un lucru interesant care se poate manifesta în anumite condiții. Spre deosebire de celelalte probleme discutate în acest articol, nu este atât de gravă. Cu siguranță nu este ceva care necesită o atenție constantă atunci când scrieți programe.

Exemplul 6: Partiționarea cache falsă
Pe mașinile multi-core, este posibil să întâmpinați o altă problemă - coerența cache-ului. Miezurile procesorului au cache-uri parțial sau complet separate. Pe mașina mea, cache-urile L1 sunt separate (ca de obicei) și există, de asemenea, două cache-uri L2 partajate de fiecare pereche de nuclee. Detaliile pot varia, dar, în general, procesoarele moderne multi-core au cache-uri ierarhice pe mai multe niveluri. Mai mult, cele mai rapide, dar și cele mai mici cache aparțin nucleelor ​​individuale.

Când un nucleu modifică o valoare din memoria cache, alte nuclee nu mai pot folosi valoarea veche. Valoarea din cache-urile altor nuclee trebuie actualizată. Mai mult, întreaga linie cache trebuie actualizată, deoarece cache-urile operează pe date la nivel de linie.

Să demonstrăm această problemă cu următorul cod: private static int s_counter = new int;

private void UpdateCounter (poziție int)

{

pentru (int j = 0; j ( s_counter = s_counter + 3; )

Dacă pe mașina mea cu patru nuclee apelez această metodă cu parametrii 0, 1, 2, 3 simultan din patru fire, atunci timpul de rulare va fi de 4,3 secunde. Dar dacă apelez la metoda cu parametrii 16, 32, 48, 64, atunci timpul de rulare va fi de doar 0,28 secunde. De ce? În primul caz, este posibil ca toate cele patru valori procesate de fire de execuție la un moment dat să ajungă într-o linie de cache. De fiecare dată când un nucleu incrementează o valoare, acesta marchează celulele cache care conțin acea valoare în alte nuclee ca nevalide. După această operație, toate celelalte nuclee vor trebui să memoreze din nou linia în cache. Acest lucru face ca mecanismul de stocare să fie inoperabil, distrugând performanța.

Exemplul 7: Complexitatea hardware
Chiar și acum, când principiile funcționării cache-ului nu sunt un secret pentru tine, hardware-ul tot îți va oferi surprize. Procesoarele diferă unele de altele prin metode de optimizare, euristică și alte subtilități de implementare.

Cache-ul L1 al unor procesoare poate accesa două celule în paralel dacă aparțin unor grupuri diferite, dar dacă aparțin aceluiași grup, doar secvențial. Din câte știu eu, unii pot accesa chiar și diferite sferturi ale aceleiași celule în paralel.

Procesoarele vă pot surprinde cu optimizări inteligente. De exemplu, codul din exemplul anterior despre partajarea falsă a memoriei cache nu funcționează pe computerul meu de acasă așa cum a fost prevăzut - în cele mai simple cazuri, procesorul poate optimiza munca și poate reduce efectele negative. Dacă modifici puțin codul, totul cade la locul său. Iată un alt exemplu de ciudatenii hardware ciudate: private static int A, B, C, D, E, F, G;

private static void Ciudație ()

{

for (int i = 0; i ( ) ) Dacă înlocuiți trei opțiuni diferite, puteți obține următoarele rezultate:

Creșterea câmpurilor A, B, C, D durează mai mult decât creșterea câmpurilor A, C, E, G. Ce este și mai ciudat este că creșterea câmpurilor A și C durează mai mult decât câmpurile A, C și E, G. Nu știu pt. sigur care sunt motivele pentru acest lucru, dar poate sunt legate de băncile de memorie (da, cu băncile de memorie obișnuite de economii de trei litri, și nu ceea ce credeai). Dacă aveți vreo părere despre această chestiune, vă rugăm să vorbiți în comentarii.

Pe mașina mea, cele de mai sus nu sunt respectate, totuși, uneori există rezultate anormal de proaste - cel mai probabil, programatorul de sarcini își face propriile „ajustări”.

Lecția care trebuie învățată din acest exemplu este că este foarte dificil să preziceți complet comportamentul hardware-ului. Da, puteți prezice multe, dar trebuie să vă validați continuu predicțiile prin măsurare și testare.

Concluzie
Sper că tot ceea ce s-a discutat mai sus v-a ajutat să înțelegeți designul cache-urilor procesorului. Acum puteți pune aceste cunoștințe în practică pentru a vă optimiza codul. * Codul sursă a fost evidențiat cu Sursa de evidențiere a codului. Etichete:

Unul dintre factorii importanți care crește performanța procesorului este prezența memoriei cache, sau mai degrabă volumul acesteia, viteza de acces și distribuția între niveluri.

De ceva vreme, aproape toate procesoarele sunt echipate cu acest tip de memorie, ceea ce dovedește încă o dată utilitatea prezenței sale. În acest articol, vom vorbi despre structura, nivelurile și scopul practic al memoriei cache, ceea ce este foarte important. caracteristicile procesorului.

Ce este memoria cache și structura acesteia

Memoria cache este o memorie ultra-rapidă utilizată de procesor pentru a stoca temporar datele care sunt accesate cel mai frecvent. Așa putem descrie pe scurt acest tip de memorie.

Memoria cache este construită pe flip-flop, care, la rândul lor, sunt formate din tranzistori. Un grup de tranzistoare ocupă mult mai mult spațiu decât aceiași condensatori care alcătuiesc RAM. Acest lucru implică multe dificultăți în producție, precum și limitări de volum. De aceea, memoria cache este o memorie foarte scumpă, având în același timp volume neglijabile. Dar din această structură provine principalul avantaj al unei astfel de memorie - viteza. Deoarece bistabilele nu au nevoie de regenerare, iar timpul de întârziere al porții pe care sunt asamblate este mic, timpul de comutare a flip-flop-ului de la o stare la alta are loc foarte repede. Acest lucru permite memoriei cache să funcționeze la aceleași frecvențe ca și procesoarele moderne.

De asemenea, un factor important este plasarea memoriei cache. Este situat pe cipul procesorului propriu-zis, ceea ce reduce semnificativ timpul de acces. Anterior, memoria cache a unor niveluri era amplasată în afara cipului procesorului, pe un cip SRAM special undeva pe placa de bază. Acum, aproape toate procesoarele au memorie cache situată pe cipul procesorului.


Pentru ce se folosește memoria cache a procesorului?

După cum am menționat mai sus, scopul principal al memoriei cache este de a stoca date care sunt utilizate frecvent de procesor. Cache-ul este un buffer în care sunt încărcate datele și, în ciuda dimensiunii sale mici (aproximativ 4-16 MB) procesoare moderne, oferă o creștere semnificativă a performanței în orice aplicație.

Pentru a înțelege mai bine nevoia memoriei cache, să ne imaginăm organizarea memoriei unui computer ca un birou. Memoria RAM va fi un cabinet cu foldere pe care contabilul le accesează periodic pentru a prelua blocuri mari de date (adică foldere). Și tabelul va fi o memorie cache.

Există elemente care sunt așezate pe biroul contabilului, la care se referă de mai multe ori într-o oră. De exemplu, acestea ar putea fi numere de telefon, câteva exemple de documente. Aceste tipuri de informații sunt situate chiar pe masă, ceea ce, la rândul său, crește viteza de acces la ele.

În același mod, datele pot fi adăugate din acele blocuri mari de date (dosare) la tabel pentru o utilizare rapidă, de exemplu, un document. Când acest document nu mai este necesar, acesta este plasat înapoi în dulap (în RAM), ștergând astfel tabelul (memoria cache) și eliberând acest tabel pentru documente noi care vor fi utilizate în următoarea perioadă de timp.

De asemenea, cu memoria cache, dacă există date care este cel mai probabil să fie accesate din nou, atunci aceste date din RAM sunt încărcate în memoria cache. Foarte des, acest lucru se întâmplă prin co-încărcarea datelor care este cel mai probabil să fie utilizate după datele curente. Adică, există presupuneri despre ceea ce va fi folosit „după”. Acestea sunt principiile complexe de funcționare.

Nivelurile cache ale procesorului

Procesoarele moderne sunt echipate cu un cache, care constă adesea din 2 sau 3 nivele. Desigur, există și excepții, dar acesta este adesea cazul.

În general, pot exista următoarele niveluri: L1 (primul nivel), L2 (al doilea nivel), L3 (al treilea nivel). Acum puțin mai multe detalii despre fiecare dintre ele:

Cache de prim nivel (L1)– cel mai rapid nivel de memorie cache care funcționează direct cu nucleul procesorului, datorită acestei interacțiuni strânse, acest nivel are cel mai scurt timp de acces și funcționează la frecvențe apropiate procesorului. Este un buffer între procesor și memoria cache de al doilea nivel.

Vom lua în considerare volumele pe un procesor de înaltă performanță Intel Core i7-3770K. Acest procesor este echipat cu 4x32 KB cache L1 4 x 32 KB = 128 KB. (32 KB per nucleu)

Cache al doilea nivel (L2)– al doilea nivel este la scară mai mare decât primul, dar, ca urmare, are „caracteristici de viteză” mai mici. În consecință, servește ca un tampon între nivelurile L1 și L3. Dacă ne uităm din nou la exemplul nostru Core i7-3770 K, atunci dimensiunea memoriei cache L2 este 4x256 KB = 1 MB.

Cache de nivel 3 (L3)– al treilea nivel, din nou, este mai lent decât precedentele două. Dar este încă mult mai rapid decât RAM. Dimensiunea cache-ului L3 în i7-3770K este de 8 MB. Dacă cele două niveluri anterioare sunt partajate de fiecare nucleu, atunci acest nivel este comun întregului procesor. Indicatorul este destul de solid, dar nu exorbitant. Deoarece, de exemplu, pentru procesoarele din seria Extreme, cum ar fi i7-3960X, este de 15 MB, iar pentru unele procesoare Xeon noi, mai mult de 20.



 


Citit:



Revizuirea smartphone-ului cu Android Samsung Galaxy J7 (2016): o descoperire în segmentul de gamă medie sau un telefon de buget prea scump?

Revizuirea smartphone-ului cu Android Samsung Galaxy J7 (2016): o descoperire în segmentul de gamă medie sau un telefon de buget prea scump?

Fotografii live Conținutul pachetului Smartphone Căști stereo cu fir Încărcător cu cablu USB Instrucțiuni Agrafă...

Revizuirea smartphone-ului Philips Xenium W3568: o fantezie despre accesibilitate

Revizuirea smartphone-ului Philips Xenium W3568: o fantezie despre accesibilitate

Xenium a fost mult timp asociat cu o baterie bună și cu o durată de viață a bateriei lungă, fără reîncărcare. Recent, compania...

Configurarea Mi Band - descriere detaliată a aplicației Mi Fit Brățară Xiaomi cu monitor de ritm cardiac manual de instrucțiuni

Configurarea Mi Band - descriere detaliată a aplicației Mi Fit Brățară Xiaomi cu monitor de ritm cardiac manual de instrucțiuni

Brățara de fitness de la Xiaomi este acum la vârf de popularitate. Acest lucru este de înțeles, pentru că îi ajută pe oameni să-și urmărească silueta...

Istoria dezvoltării Android (3

Istoria dezvoltării Android (3

Nexus 5 a fost prezentat oficial publicului, iar odată cu el o nouă versiune a sistemului de operare Android 4.4. Mai multe videoclipuri au fost postate online...

feed-image RSS