Úvodná » ako » Kedy je pamäť Cache späť do hlavnej pamäte?

    Kedy je pamäť Cache späť do hlavnej pamäte?

    Ak sa práve začínate naučiť, ako fungujú viacjadrové procesory, ukladanie do vyrovnávacej pamäte, koherencia vyrovnávacej pamäte a pamäť, môže sa to na prvý pohľad zdať trochu nejasné. S ohľadom na to má dnešný príspevok SuperUser Q & A odpovede na otázku zvedavého čitateľa.

    Dnešná relácia otázok a odpovedí sa k nám pridelí zdvorilosťou SuperUser - podskupiny Stack Exchange, zoskupenia webových stránok typu Q & A.

    Otázka

    Čítačka SuperUser CarmeloS chce vedieť, kedy je cache CPU prepláchnutá späť do hlavnej pamäte:

    Ak mám CPU s dvoma jadrami a každé jadro má vlastnú vyrovnávaciu pamäť L1, je možné, že Core1 a Core2 súčasne vyrovnávajú rovnakú časť pamäte? Ak je to možné, akú hodnotu bude mať hlavná pamäť, ak Core1 a Core2 upravili svoje hodnoty v cache?

    Kedy je cache CPU prepláchnutá späť do hlavnej pamäte?

    Odpoveď

    Sponzori SuperUser David Schwartz, sleske a Kimberly W majú odpoveď pre nás. Prvýkrát, David Schwartz:

    Ak mám procesor s dvoma jadrami a každé jadro má vlastnú vyrovnávaciu pamäť L1, je možné, že Core1 a Core2 súčasne vyrovnávajú rovnakú časť pamäte?

    Áno, výkon by bol strašný, ak by tomu tak nebolo. Zvážte dva vlákna, ktoré majú rovnaký kód. Chcete kód v oboch L1 cache.

    Ak je to možné, akú hodnotu bude mať hlavná pamäť, ak Core1 a Core2 upravili svoje hodnoty v cache?

    Stará hodnota bude v hlavnej pamäti, ktorá nezáleží na tom, že ju nebude čítať ani jadro. Pred vysunutím upravenej hodnoty z vyrovnávacej pamäte musí byť zapísaná do pamäte. Obvykle sa používa niekoľko variantov protokolu MESI. V tradičnej implementácii MESI, ak je hodnota zmenená v jednej vyrovnávacej pamäti, nemôže byť vôbec prítomná v žiadnej inej vyrovnávacej pamäti na tej istej úrovni.

    Nasledovala odpoveď od sleske:

    Áno, s dvoma vyrovnávacou pamäťou vyrovnávacej pamäte sa môže stať tá istá pamäťová oblasť a je skutočne problémom, ktorý sa v praxi vyskytuje veľa. Existujú rôzne riešenia, napríklad:

    • Obe cache môžu komunikovať, aby sa uistili, že nesúhlasia
    • Môžete mať nejaký nadriadený, ktorý sleduje všetky pamäte a aktualizuje ich podľa toho
    • Každý procesor sleduje pamäťové oblasti, ktoré má uložené do vyrovnávacej pamäte, a ak deteguje zápis, vymaže svoju (teraz neplatnú) vyrovnávaciu pamäť

    Problém sa nazýva koherencia vyrovnávacej pamäte a článok Wikipedia na tému obsahuje pekný prehľad problému a možné riešenia.

    A naša konečná odpoveď od Kimberly W:

    Ak chcete odpovedať na otázku v názve vášho príspevku, záleží na tom, čo je protokol ukladania do vyrovnávacej pamäte. Ak je spätný zápis, vyrovnávacia pamäť sa vráti späť do hlavnej pamäte iba vtedy, keď regulátor vyrovnávacej pamäte nemá inú možnosť ako vložiť nový vyrovnávací pamäť do už obsadeného priestoru. Blok, ktorý predtým obsadil priestor, je odstránený a jeho hodnota sa zapíše do hlavnej pamäte.

    Druhý protokol je zápis. V takom prípade kedykoľvek je vyrovnávací blok zapísaný na úrovni n, príslušný blok na úrovni n + 1 je aktualizovaná. V koncepcii je podobná vyplnená forma s podtlakovým papierom; všetko, čo píšete na vrchu, sa skopíruje na hárku nižšie. Toto je pomalšie, pretože samozrejme zahŕňa viac operácií písania, ale hodnoty medzi vyrovnávacou pamäťou sú konzistentnejšie. V schéme spätnej väzby by len najvyššia úroveň vyrovnávacej pamäte mala najaktuálnejšiu hodnotu pre konkrétny pamäťový blok.


    Máte niečo doplniť vysvetlenie? Znie to v komentároch. Chcete sa dozvedieť viac odpovedí od iných používateľov technickej úrovne Stack Exchange? Pozrite sa na celý diskusný príspevok tu.

    Image Credit: Lemsipmatt (Flickr)