Ierarhia memoriei - Memory hierarchy

Diagrama ierarhiei memoriei computerului

În arhitectura computerului , ierarhia memoriei separă stocarea computerului într-o ierarhie bazată pe timpul de răspuns. Deoarece timpul de răspuns, complexitatea și capacitatea sunt corelate, nivelurile se pot distinge și prin performanța lor și tehnologiile de control. Ierarhia memoriei afectează performanța în proiectarea arhitecturală a computerului, predicțiile algoritmilor și construcțiile de programare de nivel inferior care implică localitatea de referință .

Proiectarea pentru performanțe ridicate necesită luarea în considerare a restricțiilor ierarhiei memoriei, adică a dimensiunii și a capacităților fiecărei componente. Fiecare dintre diferitele componente poate fi privită ca parte a unei ierarhii de amintiri (m 1 , m 2 , ..., m n ) în care fiecare membru m i este de obicei mai mic și mai rapid decât următorul membru cel mai înalt m i + 1 al ierarhia. Pentru a limita așteptarea cu niveluri superioare, un nivel inferior va răspunde prin umplerea unui tampon și apoi semnalizare pentru activarea transferului.

Există patru niveluri majore de stocare.

  • Intern - Registrele procesorului și memoria cache .
  • Principal - RAM de sistem și carduri de control.
  • Stocare în masă on-line - Stocare secundară.
  • Depozitare în vrac off-line - Depozitare terțiară și off-line.

Aceasta este o structurare generală a ierarhiei memoriei. Multe alte structuri sunt utile. De exemplu, un algoritm de paginare poate fi considerat un nivel pentru memoria virtuală atunci când se proiectează o arhitectură de calculator și se poate include un nivel de stocare nearline între stocarea online și offline.

Proprietățile tehnologiilor în ierarhia memoriei

  • Adăugarea complexității încetinește ierarhia memoriei .
  • Tehnologia de memorie CMOx întinde spațiul Flash în ierarhia memoriei
  • Una dintre principalele modalități de creștere a performanței sistemului este de a minimiza cât de jos trebuie să mergeți ierarhia de memorie pentru a manipula datele.
  • Latența și lățimea de bandă sunt două valori asociate cu cache-urile. Niciunul dintre ei nu este uniform, ci este specific unei anumite componente a ierarhiei memoriei.
  • Prezicerea locului în care se află datele din ierarhia memoriei este dificilă.
  • ... locația din ierarhia memoriei dictează timpul necesar pentru ca prefixul să aibă loc.

Exemple

Ierarhia de memorie a unui server AMD Bulldozer.

Numărul de niveluri din ierarhia memoriei și performanța la fiecare nivel a crescut în timp. Tipul de memorie sau componentele de stocare se schimbă, de asemenea, în mod istoric. De exemplu, ierarhia memoriei unui procesor Intel Haswell Mobile în jurul anului 2013 este:

  • Registrele procesorului - cel mai rapid acces posibil (de obicei 1 ciclu CPU). Câteva mii de octeți în dimensiune
  • Cache
    • Nivelul 0 (L0) Cache micro-operațiuni - dimensiune 6.144 octeți (6 KiB)
    • Nivelul 1 (L1) Cache de instrucțiuni - 128 KiB în dimensiune
    • Nivelul 1 (L1) Cache de date - 128 KiB în dimensiune. Cea mai bună viteză de acces este de aproximativ 700 GB / s
    • Nivel 2 (L2) Instrucțiuni și date (partajate) - 1 MiB în dimensiune. Cea mai bună viteză de acces este de aproximativ 200 GB / s
    • Nivelul 3 (L3) Memorie cache partajată - 6 MiB în dimensiune. Cea mai bună viteză de acces este de aproximativ 100 GB / s
    • Nivelul 4 (L4) Cache partajată - 128 MiB în dimensiune. Cea mai bună viteză de acces este de aproximativ 40 GB / s
  • Memorie principală ( stocare primară ) - dimensiune GiB . Cea mai bună viteză de acces este de aproximativ 10 GB / s. În cazul unei mașini NUMA , timpul de acces poate să nu fie uniform
  • Stocare pe disc ( stocare secundară ) - dimensiunea Terabytes . Începând cu 2017, cea mai bună viteză de acces este de la o unitate SSD de consum, de aproximativ 2000 MB / s
  • Stocare nearline ( stocare terțiară ) - Până la exabytes ca dimensiune. Începând cu 2013, cea mai bună viteză de acces este de aproximativ 160 MB / s
  • Stocare offline

Nivelurile inferioare ale ierarhiei - de la discuri în jos - sunt cunoscute și sub denumirea de stocare pe niveluri . Distincția formală între stocarea online, nearline și offline este:

  • Stocarea online este disponibilă imediat pentru I / O.
  • Depozitarea Nearline nu este disponibilă imediat, dar poate fi făcută rapid online fără intervenția umană.
  • Spațiul de stocare offline nu este disponibil imediat și necesită o intervenție umană pentru a face online.

De exemplu, discurile rotative întotdeauna activate sunt online, în timp ce discurile rotative care se rotesc, cum ar fi o gamă masivă de disc inactiv ( MAID ), sunt aproape de linie. Suporturile amovibile, cum ar fi cartușele de bandă care pot fi încărcate automat, ca într-o bibliotecă de benzi , sunt aproape de linie, în timp ce cartușele care trebuie încărcate manual sunt offline.

Cele mai multe procesoare moderne sunt atât de rapide încât pentru majoritatea încărcărilor de lucru ale programului, blocajul este localitatea de referință a acceselor de memorie și eficiența memorării în cache și a transferului de memorie între diferite niveluri ale ierarhiei. Drept urmare, CPU își petrece o mare parte din timp în gol, așteptând finalizarea I / O de memorie. Aceasta se numește uneori costul spațiului , deoarece un obiect de memorie mai mare este mai probabil să depășească un nivel mic / rapid și necesită utilizarea unui nivel mai mare / mai lent. Sarcina rezultată pe utilizarea memoriei este cunoscut sub numele de presiune (respectiv registru de presiune , presiune cache și (principal) presiune de memorie ). Termenii pentru datele care lipsesc de la un nivel superior și care trebuie preluate de la un nivel inferior sunt, respectiv: vărsarea înregistrării (datorită presiunii de înregistrare: înregistrați în cache), lipsa de cache (cache în memoria principală) și defecțiunea (hard) a paginii (memorie principală pe disc).

Limbajele moderne de programare presupun în principal două niveluri de memorie, memoria principală și stocarea pe disc, deși în limbajul de asamblare și în asamblatoarele inline în limbaje precum C , registrele pot fi accesate direct. Pentru a profita optim de ierarhia de memorie este necesară cooperarea programatorilor, a hardware-ului și a compilatoarelor (precum și a suportului de bază din sistemul de operare):

  • Programatorii sunt responsabili pentru mutarea datelor între disc și memorie prin I / O de fișiere.
  • Hardware-ul este responsabil pentru mutarea datelor între memorie și cache.
  • Compilatoarele de optimizare sunt responsabile pentru generarea de cod care, atunci când este executat, va determina hardware-ul să utilizeze cache-uri și registre eficient.

Mulți programatori își asumă un nivel de memorie. Acest lucru funcționează bine până când aplicația atinge un perete de performanță. Apoi ierarhia memoriei va fi evaluată în timpul refactorizării codului .

Vezi si

Referințe