Homepage » hogyan kell » Mikor tér vissza a CPU gyorsítótára a fő memóriára?

    Mikor tér vissza a CPU gyorsítótára a fő memóriára?

    Ha éppen elkezdi megtanulni, hogy a többmagos processzorok, a gyorsítótár, a gyorsítótár-koherencia és a memória működik, először egy kicsit zavarónak tűnhet. Ezt szem előtt tartva, a mai SuperUser Q&A postai válaszok egy furcsa olvasó kérdésére.

    A mai Kérdések és válaszok munkamenet a Jóvagyon - a Stack Exchange alosztályának, a közösség által vezérelt Q&A webhelyek csoportjának köszönhetően..

    A kérdés

    A SuperUser olvasó CarmeloS tudni akarja, hogy mikor kerül a CPU gyorsítótárának vissza a fő memóriába:

    Ha van két CPU, és mindegyik mag saját L1 gyorsítótárral rendelkezik, akkor lehetséges, hogy a Core1 és a Core2 egyszerre ugyanazt a memóriát foglalja össze? Ha lehetséges, mi lesz a fő memória értéke, ha mind a Core1, mind a Core2 szerkesztette az értékeket gyorsítótárban?

    Mikor a CPU gyorsítótárát visszavezetik a fő memóriába?

    A válasz

    David Schwartz, Sleske és Kimberly W SuperUser közreműködői válaszolnak nekünk. Először David Schwartz:

    Ha van két CPU, és mindegyik mag saját L1 gyorsítótárral rendelkezik, akkor lehetséges, hogy a Core1 és a Core2 egyidejűleg ugyanazt a részét tárolja a memóriában?

    Igen, a teljesítmény szörnyű lenne, ha ez nem így lenne. Tekintsünk két szálat, amelyek ugyanazt a kódot használják. Ezt a kódot mindkét L1 gyorsítótárban szeretné.

    Ha lehetséges, mi lesz a fő memória értéke, ha mind a Core1, mind a Core2 szerkesztette az értékeket gyorsítótárban?

    A régi érték a fő memóriában lesz, ami nem számít, mivel egyik mag sem fogja elolvasni. A módosított érték gyorsítótárból történő kiadása előtt a memóriába kell írni. Jellemzően a MESI protokoll néhány változatát használják. A hagyományos MESI megvalósításakor, ha egy értéket egy gyorsítótárban módosítanak, akkor egyáltalán nem jelenhet meg egy másik gyorsítótárban ugyanazon a szinten.

    Ezt követi a sleske válasza:

    Igen, két gyorsítótár gyorsítótárával ugyanaz a memória régió történhet, és valójában egy olyan probléma, amely a gyakorlatban sokat fordul elő. Vannak különböző megoldások, például:

    • A két gyorsítótár kommunikálhat, hogy megbizonyosodjon arról, hogy nem ért egyet
    • Van egyfajta felügyelője, amely figyeli az összes gyorsítótárat, és ennek megfelelően frissíti azokat
    • Minden processzor figyeli a tárolt memóriaterületeket, és amikor észlel egy írást, kivonja a (most érvénytelen) gyorsítótárát

    A problémát cache koherenciának nevezik, és a témával kapcsolatos Wikipedia-cikknek szép áttekintése van a problémáról és a lehetséges megoldásokról.

    És végső válaszunk Kimberly W:

    Ahhoz, hogy válaszoljon a kérdésre a bejegyzés címében, attól függ, hogy mi a gyorsítótárazási protokoll. Ha visszafizetés történik, a gyorsítótár csak akkor kerül vissza a fő memóriába, ha a cache-vezérlőnek nincs más választása, mint egy új cache-blokk elhelyezése a már elfoglalt helyre. A korábban elfoglalt blokk eltávolításra kerül, és az értékét visszaírja a fő memóriába.

    A másik protokoll az átírás. Ebben az esetben bármikor a gyorsítótárblokk szintre íródik n, a megfelelő blokk szintjén n + 1 frissítve van. Koncepciójában hasonló az űrlap kitöltése széndioxiddal; amit a tetején írsz, az alábbi lapra másolódik. Ez lassabb, mert nyilvánvalóan több írási műveletet tartalmaz, de a gyorsítótárak közötti értékek következetesebbek. A visszafizetési rendszerben csak a legmagasabb szintű gyorsítótár lenne a legmodernebb érték egy adott memóriablokk számára.


    Van valami, amit hozzá kell adni a magyarázathoz? Kikapcsolja a megjegyzéseket. Szeretne további válaszokat olvasni más tech-savvy Stack Exchange felhasználóktól? Nézze meg a teljes beszélgetés szálát itt.

    Képhitel: Lemsipmatt (Flickr)