Kotisivu » miten » Milloin CPU n välimuisti palaa takaisin päämuistiin?

    Milloin CPU n välimuisti palaa takaisin päämuistiin?

    Jos olet juuri alkamassa oppia, kuinka monisydämiset prosessorit, välimuisti, välimuistin yhtenäisyys ja muisti toimivat, se saattaa tuntua hieman sekavalta. Tässä mielessä tämän päivän SuperUser Q&A -postissa on vastauksia utelias lukijan kysymykseen.

    Nykypäivän Kysymys- ja vastaus -istunto tulee meille suotuisasti SuperUserin - Stack Exchange -alueen, yhteisöpohjaisen Q & A-sivustojen ryhmittymän - kautta..

    Kysymys

    SuperUser-lukija CarmeloS haluaa tietää, milloin CPU: n välimuisti huuhdellaan takaisin päämuistiin:

    Jos minulla on CPU, jossa on kaksi ydintä ja jokaisella ytimellä on oma L1-välimuisti, onko mahdollista, että Core1 ja Core2 välimuistit samaan aikaan muistiin samanaikaisesti? Jos on mahdollista, mitä päämuistin arvo on, jos sekä Core1 että Core2 ovat muokkaaneet arvojaan välimuistissa?

    Milloin CPU: n välimuisti huuhdellaan takaisin päämuistiin?

    Vastaus

    SuperUserin avustajat David Schwartz, sleske ja Kimberly W ovat vastaus meille. Ensinnäkin, David Schwartz:

    Jos minulla on CPU, jossa on kaksi ydintä, ja jokaisella ytimellä on oma L1-välimuisti, onko mahdollista, että Core1 ja Core2 välimuistit samaan aikaan muistiin samanaikaisesti?

    Kyllä, suorituskyky olisi kauheaa, jos näin ei olisi. Tarkastellaan kahta samaa koodia käyttävää säiettä. Haluatko koodin molemmissa L1-välimuistissa.

    Jos on mahdollista, mitä päämuistin arvo on, jos sekä Core1 että Core2 ovat muokkaaneet arvojaan välimuistissa?

    Vanha arvo on päämuistissa, mikä ei ole väliä, koska kumpikaan ydin ei lue sitä. Ennen kuin muutat muunnettua arvoa välimuistista, se on kirjoitettava muistiin. Tyypillisesti käytetään jotakin MESI-protokollan versiota. MESI: n perinteisessä toteutuksessa, jos arvoa muutetaan yhdessä välimuistissa, se ei voi olla läsnä millään muulla välimuistilla samassa tasossa.

    Slesken vastausta seuraa:

    Kyllä, kahden välimuistin välimuistin samassa muistialueessa voi tapahtua ja se on itse asiassa paljon käytännössä ongelma. On olemassa erilaisia ​​ratkaisuja, esimerkiksi:

    • Kaksi välimuistia voi kommunikoida varmistaakseen, etteivät ne ole eri mieltä
    • Sinulla voi olla jonkinlainen esimies, joka valvoo kaikkia välimuistia ja päivittää ne vastaavasti
    • Kukin prosessori valvoo välimuistiin tallennettuja muistialueita, ja kun se havaitsee kirjeen, se heittää sen (nyt virheellisen) välimuistin

    Ongelmaa kutsutaan välimuistin johdonmukaisuudeksi ja aiheen Wikipedia-artikkelissa on mukava yleiskatsaus ongelmaan ja mahdollisiin ratkaisuihin.

    Ja lopullinen vastauksemme Kimberly W: ltä:

    Vastataksesi kysymykseen viestisi otsikossa, se riippuu siitä, mitä välimuistiprotokolla on. Jos se on palautus, välimuisti huuhdellaan vain takaisin päämuistiin, kun välimuistiohjaimella ei ole muuta vaihtoehtoa kuin asettaa uusi välimuistilohko jo käytössä olevaan tilaan. Aiemmin käytössä oleva lohko poistetaan ja sen arvo kirjoitetaan takaisin päämuistiin.

    Toinen protokolla on kirjoitus. Tällöin välimuistilohko kirjoitetaan milloin tahansa tasolle n, vastaava lohko tasolla n + 1 päivitetään. Se on samanlainen kuin muodon täyttäminen hiilipaperilla alla; mitä kirjoitat päälle, kopioidaan alla olevaan arkkiin. Tämä on hitaampaa, koska siihen liittyy luonnollisesti enemmän kirjoitusoperaatioita, mutta välimuistien väliset arvot ovat johdonmukaisempia. Palautusjärjestelmässä vain korkeimmalla välimuistilla olisi ajantasaisin arvo tietylle muistilohkolle.


    Onko jotain lisättävää selitykseen? Ääni pois kommenteista. Haluatko lukea lisää vastauksia muilta tech-savvy Stack Exchange -käyttäjiltä? Tutustu koko keskusteluketjuun täällä.

    Kuvaluotto: Lemsipmatt (Flickr)