20Aug
Ha csak most kezdjük megtanulni, hogyan működnek a többmagos CPU-k, a gyorsítótárazás, a gyorsítótár-koherencia és a memória, először kissé zavarónak tűnhet. Ezzel kapcsolatban a mai SuperUser Q & A bejegyzésben válaszolhatunk egy furcsa olvasó kérdésére.
A mai kérdés &A válaszüzenet a SuperUser - a Stack Exchange megosztottságának köszönhetően - a Q & A webhelyek közösségi szintű csoportosítása.
Kérdés
SuperUser olvasó A CarmeloS tudni szeretné, ha a CPU gyorsítótárát visszaviszi a fő memóriába:
Ha van egy CPU két maggal és mindegyik mag rendelkezik saját L1 gyorsítótárral, lehetséges, hogy a Core1 és a Core2 is ugyanarra a cache-reegyidejűleg a memória egy része is? Ha lehetséges, mi lesz a fő memória értéke, ha mind a Core1, mind a Core2 szerkesztette az értékeket a gyorsítótárban?
Mikor van a CPU gyorsítótárja a fő memóriába?
A válasz
A SuperUser közreműködők David Schwartz, sleske és Kimberly W válaszolnak ránk. Először is, David Schwartz:
Ha van egy CPU két maggal és minden mag rendelkezik saját L1 gyorsítótárral, lehetséges, hogy a Core1 és a Core2 egyidejűleg ugyanabban a memóriában tárolják a memóriát?
Igen, a teljesítmény szörnyű lenne, ha nem így lenne. Tekintsünk két szálat ugyanazt a kódot. A kódot mindkét L1 gyorsítótárban meg szeretné kapni.
Ha lehetséges, mi lesz a fő memória értéke, ha mind a Core1, mind a Core2 szerkesztette az értékeket a gyorsítótárban?
A régi érték a fő memóriában lesz, ami nem számít, mivel sem a mag nem fogja olvasni. A módosított értéknek a gyorsítótárból való kilépéséig a memóriába kell írni.Általában a MESI protokoll néhány változatát használják. A MESI hagyományos megvalósításában, ha egy értéket egy gyorsítótárban módosítanak, egyáltalán nem jelenhet meg ugyanazon a szinten más cache-ben.
A válasz a sleske-től:
Igen, két gyorsítótár cache memóriaterület megtörténhet, és ténylegesen egy probléma, ami sokat jelent a gyakorlatban. Vannak különböző megoldások, például:
- A két gyorsítótár kommunikálni tud, hogy nem értenek egyet
- Van valamilyen felügyelő, amely figyeli az összes gyorsítót, és frissíti őket megfelelően
- Minden processzor figyeli a tárolt memóriaterületeket, ésamikor észleli az írást, kiüríti a( most érvénytelen) gyorsítótárat
A problémát cache-koherenciának nevezik, és a témáról szóló Wikipedia-cikkek áttekintik a problémát és a lehetséges megoldásokat.
És a Kimberly W:
végső válaszja A kérdést a bejegyzés címében válaszoljuk, attól függ, hogy mi a gyorsítótárazási protokoll. Ha visszaolvasásra kerül, akkor a gyorsítótár csak a fő memóriába kerül vissza, ha a gyorsítótár-vezérlőnek nincs más választása, mint hogy új cache blokkot helyezzen a már foglalt helyre. A blokk, amelyik korábban elfoglalta a helyet, eltávolításra kerül, és értéke vissza van írva a fő memóriába.
A másik protokoll átírás. Ebben az esetben, ha a gyorsítótár blokk n szinten van írva, az n + 1 megfelelő blokkja frissítésre kerül. Hasonló a fogalom, hogy ki kell töltenie egy formanyomtatványt, amelynek szénpapírja van;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űveletet igényel, de a gyorsítótár közötti értékek következetesebbek. A visszaváltási sémában csak a legmagasabb szintû gyorsítótár rendelkezik az adott memóriablokk legfrissebb értékével.
Van valami, amit hozzá kell adnod a magyarázathoz? Hangzik ki a megjegyzésekben. Szeretne többet válaszolni a többi technikus-tudós Stack Exchange felhasználóiról? Nézze meg a teljes vitafonalat itt.
képarány: Lemsipmatt( Flickr)