20Aug

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. Având în vedere acest lucru, postul SuperUser Q & A de astăzi are răspunsuri la întrebarea curioasă a cititorului.

Întrebarea de astăzi &Sesiunea de răspuns vine de la amabilitatea SuperUser - o subdiviziune a Stack Exchange, o grupare bazată pe comunitate a site-urilor web Q & A.

Întrebarea

SuperUser Cititorul CarmeloS dorește să știe când cache-ul unei CPU-uri este returnat în memoria principală:

Dacă am un procesor cu două nuclee și fiecare nucleu are propriul cache L1, este posibil ca Core1 și Core2 să cacheze aceleașiparte din memorie în același timp? Dacă este posibil, care va fi valoarea memoriei principale dacă Core1 și Core2 și-au modificat valorile în memoria cache?

Când este memoria cache a procesorului î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 propriul cache L1, este posibil ca Core1 și Core2 să stocheze simultan aceeași parte a memoriei?

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, care va fi valoarea memoriei principale dacă Core1 și Core2 și-au modificat valorile în memoria cache?

Valoarea veche va fi în memoria principală, care nu contează, deoarece nici nucleul nu o va citi.Înainte de a scoate o valoare modificată din cache, trebuie 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 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 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 se asigura că nu sunt de acord
  • Aveți posibilitatea să aveți un fel de supervizor 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;când detectează o scriere, aruncă cache-ul său( acum invalid)

Problema se numește coerență cache, iar articolul Wikipedia cu privire la acest subiect prezintă o imagine de ansamblu a problemei și posibilele soluții.

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

Pentru a răspunde la întrebarea din titlul postului dvs., depinde de ceea ce este protocolul de cache. Dacă este o scriere înapoi, memoria cache va fi returnată numai în memoria principală atunci când controlerul cache nu are altă opțiune 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 pe nivel n , blocul corespunzător la nivelul n + 1 este actualizat. Este similar în concepția de a completa un formular cu hârtie de carbon 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 comentarii. 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)