Pagina principala » HOWTO » Când memoria cache a procesorului este spulberată înapoi în memoria principală?

    Când memoria cache a procesorului este spulberată înapoi în memoria principală?

    Dacă începeți să aflați cum funcționează procesoarele multi-core, cache-ul, coerența cache-ului și memoria, poate părea puțin confuză la început. În acest sens, postul de astăzi SuperUser Q & A are răspunsuri la întrebarea curioasă a cititorului.

    Sesiunea de întrebări și răspunsuri din ziua de astăzi vine de la amabilitatea SuperUser - o subdiviziune a Stack Exchange, o grupare bazată pe comunitate a site-urilor web Q & A.

    Intrebarea

    Cititorul SuperUser CarmeloS dorește să știe când memoria cache a procesorului este reluată în memoria principală:

    Dacă am un procesor cu două nuclee și fiecare nucleu are propria cache L1, este posibil ca Core1 și Core2 să stocheze simultan aceeași parte a memoriei? Dacă este posibil, ce valoare va avea memoria principală dacă Core1 și Core2 și-au modificat valorile în memoria cache?

    Când memoria cache a procesorului este spulberată înapoi în memoria principală?

    Răspunsul

    Contribuitorii SuperUser David Schwartz, sleske și Kimberly W au răspunsul pentru noi. În primul rând, David Schwartz:

    Dacă am un procesor cu două nuclee și fiecare nucleu are propria cache L1, este posibil ca Core1 și Core2 să cacheze aceeași parte a memoriei în același timp?

    Da, performanța ar fi teribilă dacă nu ar fi așa. Luați în considerare două fire care rulează același cod. Vrei codul respectiv în ambele cache-uri L1.

    Dacă este posibil, ce valoare va avea memoria principală dacă Core1 și Core2 și-au modificat valorile în memoria cache?

    Valoarea veche va fi în memoria principală, care nu va conta niciodată, deoarece nici nucleul nu o va citi. Înainte de a scoate o valoare modificată din memoria cache, trebuie să fie scrisă în memorie. De obicei, se utilizează o variantă a protocolului MESI. În implementarea tradițională a MESI, dacă o valoare este modificată într-o singură memorie cache, ea nu poate fi prezentă deloc în nici un alt cache la același nivel.

    Urmat de răspunsul de la sleske:

    Da, având două cache-uri de memorie cache, se poate întâmpla aceeași regiune de memorie și este de fapt o problemă care apare foarte mult în practică. Există diferite soluții, de exemplu:

    • Cele două cache-uri pot comunica pentru a vă asigura că nu sunt de acord
    • Puteți avea un fel de supraveghetor care să monitorizeze toate cache-urile și să le actualizeze în consecință
    • Fiecare procesor monitorizează zonele de memorie pe care le-a stocat în cache, iar când detectează o scriere, aceasta aruncă memoria cache (acum invalidă)

    Problema este numită coerența cache-ului, iar articolul Wikipedia pe această temă are o imagine de ansamblu a problemei și a posibilelor soluții.

    Și răspunsul nostru final de la Kimberly W:

    Pentru a răspunde la întrebarea din titlul postării dvs., depinde de protocolul de cache. Dacă este o scriere înapoi, cache-ul va fi returnat numai în memoria principală atunci când controlerul cache nu are altă posibilitate decât să pună un nou bloc de cache în spațiul deja ocupat. Blocul care a ocupat anterior spațiul este eliminat și valoarea acestuia este scrisă în memoria principală.

    Celălalt protocol este scrierea. În acest caz, oricând blocul de cache este scris la nivel n, blocul corespunzător la nivel n + 1 este actualizat. Este similar în concepția de a completa un formular cu hârtie carbon de dedesubt; orice scrieți pe partea de sus este copiat pe foaia de mai jos. Acest lucru este mai lent, deoarece implică în mod evident mai multe operații de scriere, dar valorile dintre cache-urile sunt mai consecvente. În schema de returnare, numai cache-ul de nivel superior ar avea cea mai actualizată valoare pentru un anumit bloc de memorie.


    Aveți ceva de adăugat la explicație? Sunați în comentariile. Doriți să citiți mai multe răspunsuri de la alți utilizatori de tehnologie Stack Exchange? Check out discuția completă aici.

    Credit de imagine: Lemsipmatt (Flickr)