Ako tek počinjete naučiti 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šnja pitanja i odgovori nam se javljaju zahvaljujući SuperUseru - podjele Stack Exchange-a, zajednice-driven grupiranja Q & A web stranica.
SuperUser čitač CarmeloS želi znati kada se CPU predmemorija ispere natrag u glavnu memoriju:
Ako imam CPU s dvije jezgre i svaka jezgra ima svoju L1 cache, je li moguće da Core1 i Core2 istodobno skladište isti dio memorije? 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?
David Schwartz, sleske i Kimberly W dobili su odgovor za nas. Prvo, David Schwartz:
Ako imam CPU s dvije jezgre i svaka jezgra ima svoju L1 cache, je li moguće da Core1 i Core2 istodobno skladište 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 ni jezgra neće čitati. 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 dvije predmemorije u predmemoriji iste memorije regije može se dogoditi i zapravo je problem koji se pojavljuje puno u praksi. Postoje razna rješenja, na primjer:
- Dva spremnika mogu komunicirati kako bi bili sigurni da se ne slažu
- Možete imati neku vrstu nadzornika koji prati sve spremišta i ažurira ih u skladu s tim
- Svaki procesor prati memorijske predmete koji su pohranili u memoriju, a kad otkrije pisanje, baca svoju (sada nevažeću) predmemoriju
Problem se naziva koherencijom predmemorije i članak iz Wikipedije o toj temi ima lijep pregled problema i mogućih rješenja.
I naš konačni odgovor Kimberlyja W:
Da biste odgovorili na pitanje u naslovu postova, to ovisi o tome što je protokol spremljen. 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 se ažurira. 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 nešto za objašnjenje? Zvuči u komentarima. Želite li pročitati više odgovora od drugih tehnoloških korisnika Stack Exchangea? Pogledajte ovdje cijelu raspravu.
Slikovni kredit: Lemsipmatt (Flickr)