Kdy je mezipaměť procesoru vyplavena zpět do hlavní paměti?
Pokud se právě začínáte naučit, jak fungují vícejádrové CPU, ukládání do mezipaměti, koherence paměti a paměť, může se nejprve trochu zmátnit. S ohledem na to má dnešní příspěvek SuperUser Q & A odpovědi na otázku zvědavé čtenáře.
Dnešní zasedání Otázky a odpovědi nás přichází s laskavým svolením SuperUser - podřízené rozdělení Stack Exchange, které je založeno na komunitě prostřednictvím skupin webových stránek.
Otázka
Snímač SuperUser CarmeloS chce vědět, kdy je mezipaměť CPU proplachována zpět do hlavní paměti:
Mám-li procesor se dvěma jádry a každé jádro má vlastní L1 cache, je možné, že Core1 a Core2 současně ukládají do paměti stejnou část paměti? Pokud je to možné, jaká bude hodnota hlavní paměti, pokud Core1 a Core2 upraví své hodnoty v mezipaměti?
Kdy je mezipaměť CPU proplachována zpět do hlavní paměti?
Odpověď
Uživatelé SuperUser David Schwartz, sleske a Kimberly W mají odpověď. První, David Schwartz:
Pokud mám CPU se dvěma jádry a každé jádro má vlastní L1 cache, je možné, že Core1 a Core2 oba cache stejnou část paměti současně?
Ano, výkon by byl hrozný, kdyby tomu tak nebylo. Zvažte dva podprocesy se stejným kódem. Chcete kód v obou mezipaměti L1.
Pokud je to možné, jaká bude hodnota hlavní paměti, pokud Core1 a Core2 upraví své hodnoty v mezipaměti?
Stará hodnota bude v hlavní paměti, na které nezáleží, protože jádro ji nebude číst. Před vysunutím modifikované hodnoty z mezipaměti musí být zapsána do paměti. Obvykle se používá některá varianta protokolu MESI. V tradiční implementaci MESI, pokud je hodnota změněna v jedné mezipaměti, nemůže být přítomna v žádné jiné mezipaměti na stejné úrovni.
Následuje odpověď sleske:
Ano, mít dvě mezipaměti mezipaměti může dojít ke stejné paměťové oblasti a je to vlastně problém, který se v praxi vyskytuje hodně. Existují různá řešení, například:
- Obě cache mohou komunikovat, aby se ujistily, že nesouhlasí
- Můžete mít nějakého nadřízeného, který sleduje všechny mezipaměti a odpovídajícím způsobem je aktualizuje
- Každý procesor sleduje paměťové oblasti, které má v mezipaměti, a když detekuje zápis, vyřadí svou (nyní neplatnou) mezipaměť
Problém se nazývá koherence mezipaměti a článek Wikipedie o tématu má pěkný přehled problému a možných řešení.
A naše konečná odpověď od Kimberly W:
Chcete-li odpovědět na otázku v názvu příspěvku, záleží na tom, co je protokol ukládání do mezipaměti. Pokud se jedná o zpětný zápis, mezipaměť bude vrácena zpět do hlavní paměti pouze tehdy, když má správce mezipaměti jinou možnost než vložení nového mezipaměti do již obsazeného prostoru. Blok, který dříve obsadil prostor, je odebrán a jeho hodnota je zapsána zpět do hlavní paměti.
Druhý protokol je zápis. V takovém případě kdykoli je vyrovnávací paměť zapsána na úrovni n, příslušný blok na úrovni n + 1 je aktualizován. Koncept je podobný vyplnění formuláře s podtlakovým papírem; vše, co píšete nahoře, je zkopírováno na list níže. To je pomalejší, protože zřejmě zahrnuje více operací psaní, ale hodnoty mezi mezipaměti jsou konzistentnější. V schématu zápisu zpětného zápisu by měla nejaktuálnější mezní hodnota pro určitý paměťový blok pouze mezipaměť nejvyšší úrovně.
Musíte něco přidat k vysvětlení? Vyjměte v komentářích. Chcete se dozvědět více odpovědí od ostatních uživatelů technologie Stack Exchange? Podívejte se na celý diskusní příspěvek zde.
Image Credit: Lemsipmatt (Flickr)