Начална » как да » Кога кешът на процесора се изчиства обратно към основната памет?

    Кога кешът на процесора се изчиства обратно към основната памет?

    Ако току-що започвате да научавате как работят многоядрените процесори, кеширането, кохерентността на кеша и паметта, в началото може да изглежда малко объркващо. Имайки предвид това, днешната публикация за въпроси и отговори на суперпотребителя отговаря на един любопитен въпрос на читателя.

    Днешната сесия за въпроси и отговори идва при нас с любезното съдействие на SuperUser - подразделение на Stack Exchange, групирано от общността уеб сайтове за въпроси и отговори.

    Въпроса

    Reader от суперпотребител CarmeloS иска да знае кога кешът на процесора е промит обратно в основната памет:

    Ако имам процесор с две ядра и всяко ядро ​​има свой собствен L1 кеш, възможно ли е Core1 и Core2 да кешират една и съща част от паметта едновременно? Ако е възможно, каква ще бъде стойността на основната памет, ако и Core1, и Core2 са редактирали своите стойности в кеша?

    Когато кешът на процесора е изчистен обратно в основната памет?

    Отговорът

    Участниците в SuperUser Дейвид Шварц, sleske и Kimberly W имат отговор за нас. Първо, Дейвид Шварц:

    Ако имам процесор с две ядра и всяко ядро ​​има свой собствен L1 кеш, възможно ли е Core1 и Core2 едновременно да кешират една и съща част от паметта едновременно.?

    Да, представянето щеше да е ужасно, ако това не беше така. Помислете за две нишки, които изпълняват същия код. Искаш този код и в двата L1 кеша.

    Ако е възможно, каква ще бъде стойността на основната памет, ако и Core1, и Core2 са редактирали своите стойности в кеша?

    Старата стойност ще бъде в основната памет, което няма да има значение, тъй като нито едно ядро ​​няма да го прочете. Преди да извадите модифицирана стойност от кеша, тя трябва да бъде записана в паметта. Обикновено се използва някакъв вариант на протокола MESI. При традиционната реализация на MESI, ако дадена стойност е променена в един кеш, тя не може да присъства изобщо във всеки друг кеш на същото ниво.

    Следван от отговора от sleske:

    Да, имаме два кеша кеш една и съща област памет може да се случи и всъщност е проблем, който се случва много в практиката. Има различни решения, например:

    • Двата кеша могат да комуникират, за да се уверят, че не са съгласни
    • Можете да имате някакъв надзорен орган, който да следи всички кешове и да ги актуализира съответно
    • Всеки процесор следи областта на паметта, която е кеширана и когато открие запис, изхвърля своя (сега невалиден) кеш

    Проблемът се нарича cache coherency, а статията на Wikipedia по темата има хубав преглед на проблема и възможните решения.

    И нашият последен отговор от Кимбърли У:

    За да отговорите на въпроса в заглавието на публикацията, това зависи от това, което е протоколът за кеширане. Ако е обратно записване, кешът ще бъде изчистен обратно само в основната памет, когато контролерът на кеша няма друг избор, освен да постави нов блок кеш във вече заетото пространство. Блокът, който преди това е заемал мястото, се премахва и неговата стойност се записва обратно в основната памет.

    Другият протокол е запис. В този случай, всеки път, когато блокът за кеш се записва на ниво п, съответния блок на ниво п + 1 се актуализира. По подобен начин той е подобен на попълването на формуляр с въглеродна хартия отдолу; това, което пишете отгоре, се копира на листа по-долу. Това е по-бавно, защото очевидно включва повече операции по писане, но стойностите между кешовете са по-последователни. В схемата за обратно записване само най-високото ниво на кеша ще има най-актуалната стойност за конкретен блок памет.


    Имате ли какво да добавите към обяснението? Звучи в коментарите. Искате ли да прочетете повече отговори от други технологични потребители на Stack Exchange? Вижте пълната тема за дискусия тук.

    Кредит за изображения: Lemsipmatt (Flickr)