20Aug
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)