Domača » kako » Kdaj je predpomnilnik CPU izpraznjen nazaj na glavni pomnilnik?

    Kdaj je predpomnilnik CPU izpraznjen nazaj na glavni pomnilnik?

    Če se šele začenjate učiti o delovanju večjedrnih procesorjev, predpomnjenja, skladnosti predpomnilnika in pomnilnika, se morda zdi, da je na začetku nekoliko zmeden. S tem v mislih ima današnja poštna številka SuperUser Q&A odgovore na zanimivo vprašanje bralca.

    Današnja seja vprašanj in odgovorov prihaja z namenom SuperUser-a, ki je del skupine Stack Exchange, ki temelji na skupnostih spletnih mest za vprašanja in odgovore.

    Vprašanje

    Bralnik SuperUser CarmeloS želi vedeti, kdaj je predpomnilnik CPE spet v glavni pomnilnik:

    Če imam CPU z dvema jedroma in ima vsako jedro svoj L1 predpomnilnik, ali je možno, da Core1 in Core2 hkrati predpomneta isti del pomnilnika? Če je mogoče, kakšna bo vrednost glavnega pomnilnika, če sta Core1 in Core2 urejala svoje vrednosti v predpomnilniku?

    Ko je predpomnilnik CPU spran v glavni pomnilnik?

    Odgovor

    Sodelavci super uporabnika David Schwartz, sleske in Kimberly W imajo odgovor za nas. Prvič, David Schwartz:

    Če imam CPU z dvema jederoma in ima vsako jedro svoj L1 predpomnilnik, je možno, da Core1 in Core2 hkrati predpomneta isti del pomnilnika hkrati.?

    Da, uspešnost bi bila grozna, če ne bi bilo tako. Razmislite o dveh temah, ki vodita isto kodo. To kodo želite v obeh predpomnilnikih L1.

    Če je mogoče, kakšna bo vrednost glavnega pomnilnika, če sta Core1 in Core2 urejala svoje vrednosti v predpomnilniku?

    Stara vrednost bo v glavnem pomnilniku, kar pa ne bo pomembno, saj ga nobeno jedro ne bo prebralo. Pred odstranitvijo spremenjene vrednosti iz predpomnilnika mora biti zapisana v pomnilnik. Običajno se uporablja neka varianta protokola MESI. V tradicionalni izvedbi MESI, če je vrednost spremenjena v enem predpomnilniku, ne more biti prisotna v nobenem drugem predpomnilniku na isti ravni..

    Sledi odgovor sleske:

    Da, z dvema predpomnilnikom predpomnilnika se lahko zgodi enako območje pomnilnika in je pravzaprav problem, ki se v praksi pojavlja veliko. Obstajajo različne rešitve, na primer:

    • Dva predpomnilnika lahko komunicirata, da se prepričata, da se ne strinjata
    • Lahko imate neke vrste nadzornika, ki nadzoruje vse predpomnilnike in jih ustrezno posodablja
    • Vsak procesor nadzoruje področja pomnilnika, ki jih je predpomnilnika, in ko zazna pisanje, vrže svoj (zdaj neveljaven) predpomnilnik.

    Težava se imenuje skladnost predpomnilnika, članek Wikipedije o tej temi pa ima lep pregled problema in možne rešitve.

    In naš končni odgovor od Kimberly W:

    Če želite odgovoriti na vprašanje v naslovu vaše objave, je to odvisno od tega, kaj je protokol predpomnjenja. Če je vračanje nazaj, se bo predpomnilnik zbrisal nazaj samo v glavni pomnilnik, če upravljalnik predpomnilnika nima druge izbire, kot da postavi nov blok predpomnilnika v že zaseden prostor. Blok, ki je predhodno zasedel prostor, se odstrani in njegova vrednost se zapiše nazaj v glavni pomnilnik.

    Drugi protokol je preklic. V tem primeru se kadarkoli bloki zapišejo na ravni n, ustrezni blok na ravni n + 1 je posodobljen. Koncept je podoben izpolnjevanju obrazca z ogljikovim papirjem pod njim; karkoli pišete na vrhu, se kopira na spodnji list. To je počasnejše, ker očitno vključuje več operacij pisanja, vendar so vrednosti med predpomnilniki bolj dosledne. V shemi za povratno kopiranje bi imela najnovejša vrednost za določen pomnilniški blok samo najvišji predpomnilnik.


    Imate kaj dodati pojasnilu? Zvok v komentarjih. Želite prebrati več odgovorov drugih uporabnikov tehnologije Stack Exchange? Oglejte si celotno nit razprave tukaj.

    Zasluge za slike: Lemsipmatt (Flickr)