Ja jūs tikko sākat uzzināt, kā darbojas daudzcentru procesori, kešdarbe, kešatmiņas saderība un atmiņa, vispirms tas var šķist nedaudz mulsinošs. Paturot to prātā, šodienas SuperUser Q & A ziņā ir atbildes uz ziņkārības lasītāja jautājumu.
Šodienas jautājumu un atbilžu sesija mums priecājas par SuperUser - Stack Exchange dalību, kas ir kopienas vadīta Q & A tīmekļa vietņu grupa.
SuperUser lasītājs CarmeloS vēlas uzzināt, kad CPU kešatmiņa tiek izmesta atpakaļ galvenajā atmiņā:
Ja man ir centrālais procesors ar diviem kodoliem, un katram kodolam ir sava L1 kešatmiņa, vai ir iespējams, ka Core1 un Core2 abi tajā pašā laikā saglabā vienu un to pašu atmiņas daļu? Ja tas ir iespējams, kāda būs galvenās atmiņas vērtība, ja gan Core1, gan Core2 ir rediģējuši savas vērtības kešatmiņā?
Kad CPU kešatmiņa tiek izskalota atpakaļ uz galveno atmiņu?
SuperUser atbalstītāji David Schwartz, sleske un Kimberly W ir atbildes par mums. Pirmkārt, David Schwartz:
Ja man ir centrālais procesors ar diviem kodoliem, un katram kodolam ir sava L1 kešatmiņa, vai ir iespējams, ka Core1 un Core2 abi tajā pašā laikā saglabā vienu un to pašu atmiņas daļu?
Jā, sniegums būtu briesmīgi, ja tas tā nebūtu. Apsveriet divus tēmas, kas darbojas ar vienu un to pašu kodu. Jūs vēlaties šo kodu abos L1 kešatmiņā.
Ja tas ir iespējams, kāda būs galvenās atmiņas vērtība, ja gan Core1, gan Core2 ir rediģējuši savas vērtības kešatmiņā?
Vecā vērtība atradīsies galvenajā atmiņā, un tas nebūs svarīgs, jo neviena koda to neizlasīs. Pirms modificētās vērtības izņemšanas no kešatmiņas, tā jāraksta atmiņā. Parasti tiek izmantots kāds MESI protokola variants. Tradicionālā MESI ieviešanā, ja vērtība tiek mainīta vienā kešatmiņā, tajā pašā līmenī tā vairs nevar būt nevienā citā kešatmiņā.
Seko atbilde no sleske:
Jā, ar diviem kešatmiņām kešatmiņu var notikt tas pats atmiņas apgabals, un tā patiešām ir problēma, kas praktiski rodas daudz. Ir dažādi risinājumi, piemēram:
- Abas kešatmiņas var paziņot, lai pārliecinātos, ka viņi nepiekrīt
- Jums var būt sava veida uzraudzības iestāde, kas uzrauga visus kešatmiņus un attiecīgi atjaunina tos
- Katrs procesors uzrauga atmiņas apgabalus, kurus tā ir saglabājusi kešatmiņā, un, nosakot rakstīšanu, tiek izlaista tā (tagad nederīgā) kešatmiņa
Problēma sauc par kešatmiņu un Wikipedia raksts par šo tēmu ir jauks pārskats par problēmu un iespējamiem risinājumiem.
Un mūsu galīgā atbilde no Kimberli W:
Lai atbildētu uz jautājumu jūsu ziņas virsrakstā, tas ir atkarīgs no tā, kāds ir kešdarbības protokols. Ja tas ir norakstīšanas atpakaļ, kešatmiņu varēs izskalot tikai atpakaļ galvenajā atmiņā, ja kešatmiņas kontrolierim nav citas izvēles kā novietot jaunu krātuves bloku jau aizņemtajā vietā. Bloks, kas iepriekš aizņēma telpu, tiek noņemts, un tā vērtība tiek ierakstīta atpakaļ galvenajā atmiņā.
Otrais protokols ir rakstīšanas protokols. Tādā gadījumā ikreiz, kad kešatmiņas bloks ir ierakstīts līmenī n, atbilstošais bloks līmenī n + 1 tiek atjaunināts. Jēdziens ir līdzīgs, aizpildot veidlapu ar koppapīru zem tā; Viss, ko rakstāt augšā, tiek kopēts zemāk esošajā lapā. Tas ir lēnāks, jo tas neapšaubāmi ietver vairāk rakstīšanas operāciju, bet vērtības starp kešatmiņām ir daudz konsekventākas. Atpirkšanas shēmā tikai visaugstākā līmeņa kešatmiņai būtu visizcilākā vērtība konkrētā atmiņas blokā.
Vai kaut ko pievienot paskaidrojumam? Skatieties komentāros. Vēlaties lasīt citas atbildes no citiem tehnoloģiju savvy Stack Exchange lietotājiem? Šeit skatiet pilnu diskusiju pavedienu.
Attēla kredīts: Lemsipmatt (Flickr)