Ha csak most kezdi el megtanulni, hogyan működik a többmagos CPU, a gyorsítótár, a gyorsítótár koherenciája és a memória, akkor elsőre kissé zavarónak tűnhet. Ezt szem előtt tartva a mai SuperUser Q & A bejegyzés megválaszolja az olvasó kíváncsi kérdését.
A mai Kérdések és válaszok ülés a SuperUser jóvoltából érkezik hozzánk - a Stack Exchange alosztályához, amely a Q & A webhelyek közösségvezérelt csoportosulása.
A kérdés
A SuperUser olvasó, a CarmeloS tudni akarja, amikor a CPU gyorsítótárát visszahelyezik a fő memóriába:
Ha két magos CPU-m van, és mindegyik magnak megvan a maga L1 gyorsítótára, lehetséges, hogy a Core1 és a Core2 is egyszerre tárolja ugyanazt a memóriarészt? Ha lehetséges, mekkora lesz a fő memória értéke, ha a Core1 és a Core2 is értékeit gyorsítótárban szerkesztette?
Mikor kerül a CPU gyorsítótárának visszaállítása a fő memóriába?
A válasz
A SuperUser közreműködői, David Schwartz, a sleske és Kimberly W válaszoltak ránk. Először David Schwartz:
Ha két magos CPU-m van, és mindegyik magnak megvan a maga L1 gyorsítótára, lehetséges, hogy a Core1 és a Core2 is egyszerre tárolja ugyanazt a memóriarészt?
Igen, a teljesítmény szörnyű lenne, ha ez nem így lenne. Tekintsünk két szálat, amelyek ugyanazt a kódot futtatják. Ezt a kódot szeretné mindkét L1 gyorsítótárba.
Ha lehetséges, mekkora lesz a fő memória értéke, ha a Core1 és a Core2 is értékeit gyorsítótárban szerkesztette?
A régi érték a fő memóriában lesz, ami nem számít, mivel egyik mag sem fogja elolvasni. Mielőtt a módosított értéket kiállítaná a gyorsítótárból, be kell írni a memóriába. Jellemzően a MESI protokoll használt. A MESI hagyományos megvalósításakor, ha egy értéket egy gyorsítótárban módosítanak, akkor egyáltalán nem lehet jelen egyetlen más gyorsítótárban sem ugyanazon a szinten.
Sleske válasza:
Igen, két gyorsítótár gyorsítótára ugyanazzal a memóriaterülettel történhet, és valójában egy olyan probléma, amely a gyakorlatban sokszor előfordul. Különféle megoldások vannak, például:
- A két gyorsítótár kommunikálhat, hogy megbizonyosodjon arról, hogy nem értenek egyet
- Rendelkezhet valamilyen felügyelővel, amely figyeli az összes gyorsítótárat, és ennek megfelelően frissíti őket
- Minden processzor figyeli a gyorsítótárban tárolt memóriaterületeket, és amikor írást észlel, kidobja (már érvénytelen) gyorsítótárát
A problémát gyorsítótár-koherenciának és Wikipédia cikk a témában szép áttekintést nyújt a problémáról és a lehetséges megoldásokról.
És a végső válaszunk Kimberly W-től:
A bejegyzés címében szereplő kérdés megválaszolása attól függ, hogy mi a gyorsítótár-protokoll. Ha visszaírás, akkor a gyorsítótár csak akkor kerül vissza a fő memóriába, ha a gyorsítótár-vezérlőnek nincs más választása, mint egy új gyorsítótár-blokkot betenni a már elfoglalt helyre. A korábban a helyet elfoglaló blokk eltávolításra kerül, és az értéke visszaírásra kerül a fő memóriába.
A másik protokoll az átírás. Ebben az esetben a gyorsítótár-blokkot bármikor a szintre lehet írni n , a megfelelő blokk a szinten n + 1 frissül. Fogalmában hasonló az űrlap kitöltéséhez szén-dioxid-papírral; bármit is írsz a tetejére, az az alábbi lapra másolódik. Ez lassabb, mert nyilvánvalóan több írási művelettel jár, de a gyorsítótárak közötti értékek következetesebbek. A visszaírási sémában csak a legmagasabb szintű gyorsítótárnak lenne a legfrissebb értéke egy adott memóriablokk számára.
Van valami hozzáfűzhető a magyarázathoz? Hang a kommentekben. Szeretne további válaszokat olvasni más, hozzáértő Stack Exchange-felhasználóktól? Nézze meg a teljes vitafonalat itt .
Kép jóváírása: Lemsipmatt (Flickr)