20Aug

Kada se CPU Cache Flushed natrag na glavnu memoriju?

Ako tek počnete saznati kako multi-core procesori, predmemoriranje, usklađivanje predmemorije i memorija funkcioniraju, na početku se može činiti pomalo zbunjujućim. Imajući to na umu, današnji SuperUser Q & A post ima odgovore na pitanje čudnog čitatelja.

Današnje pitanje &Sesija odgovora nam dolazi zahvaljujući SuperUseru - podjele Stack Exchange, grupiranjem zajednice Q & A web stranica.

Pitanje

SuperUser čitač CarmeloS želi znati kada CPU predmemorija je flushed natrag u glavnu memoriju:

Ako sam CPU sa dva jezgri i svaka jezgra ima svoju L1 cache, je li moguće da Core1 i Core2 i predmemorije istedio memorije u isto vrijeme? Ako je moguće, koja će vrijednost glavne memorije biti ako Core1 i Core2 uređuju svoje vrijednosti u predmemoriji?

Kada je CPU predmemorija flushed natrag u glavnu memoriju?

Odgovor

SuperUser suradnici David Schwartz, sleske i Kimberly W imaju odgovor za nas. Prvo, David Schwartz:

Ako imam CPU s dvije jezgre i svaka jezgra ima svoju L1 cache, može li Core1 i Core2 istovremeno memorirati isti dio memorije?

Da, izvedba bi bila strašna ako to nije bio slučaj. Razmotrite dvije niti s istim kodom. Vi želite taj kod u oba L1 sprema.

Ako je moguće, koja će vrijednost glavne memorije biti ako Core1 i Core2 uređuju svoje vrijednosti u predmemoriji?

Stara vrijednost će biti u glavnoj memoriji, što neće biti bitno jer ga neće čitati ni jezgra. Prije izbacivanja modificirane vrijednosti iz predmemorije, ona mora biti zapisana u memoriju. Obično se koristi neka varijanta MESI protokola. U tradicionalnoj implementaciji MESI, ako se vrijednost izmijeni u jednoj predmemoriji, uopće ne može biti prisutna ni u jednoj drugoj predmemoriji na istoj razini.

Slijedi odgovor sleske:

Da, imajući dvije predmemorije u memoriji mogu se dogoditi istu memorijsku regiju i zapravo je problem koji se u praksi pojavljuje u praksi. Postoje razna rješenja, na primjer:

  • Dva spremnika mogu komunicirati kako bi bili sigurni da se ne slažu
  • Možete imati nekakav nadglednik koji prati sve spremišta i ažurira ih sukladno
  • Svaki procesor prati memorijske predmete koji su pohranili u memoriju ikada otkrije pisanje, baca svoju( sada nevažeću) cache

Problem se naziva koherentnost predmemorije i članak iz Wikipedije na toj temi ima lijep pregled problema i mogućih rješenja.

I naš konačni odgovor tvrtke Kimberly W:

Da biste odgovorili na pitanje u naslovu vašeg postova, to ovisi o tome što je protokola predmemoriranja. Ako je pisanje natrag, predmemorija će biti ispraznjena natrag u glavnu memoriju kada kontrolor predmemorije nema drugog izbora nego staviti novi blok predmemorije u već zauzeti prostor. Blok koji je prethodno zauzimao prostor je uklonjen i njegova je vrijednost zapisana natrag u glavnu memoriju.

Drugi protokol je pisanje. U tom slučaju, svaki put kada je blok cachea napisan na razini n , odgovarajući blok na razini n + 1 ažurira se. Slično je u konceptu ispunjavanja obrasca s ugljenim papirom ispod;sve što napišete na vrhu kopira se na donjoj tablici. To je sporije jer očigledno uključuje više operacija pisanja, no vrijednosti između skrbova su dosljednije. U shemi za poništenje, samo najviša razina predmemorije imala bi najnovija vrijednost za određeni blok memorije.

Imate li što dodati objašnjenju? Zvuči u komentarima.Želite li pročitati više odgovora od drugih tehnoloških korisnika Stack Exchangea? Pogledajte ovdje cijelu raspravu.

kredit za slike: Lemsipmatt( Flickr)