If-Koubou

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

Milloin CPU: n välimuisti palaa takaisin päämuistiin? (Miten)

Jos alat vain oppia, miten moninopeuksiset suorittimet, välimuisti, välimuistin koherenssi ja muisti toimivat, se saattaa tuntua hieman hämmentävältä aluksi. Tämän vuoksi tämän päivän SuperUser Q & A -postilla on vastauksia utelias lukijan kysymykseen.

Tämän päivän kysymys- ja vastausistunto tulee meihin SuperUserin hyväksi - Stack Exchangein alaosasto, joka on yhteisöllinen Q & A-sivustojen ryhmittely.

Kysymys

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

Jos minulla on kaksi ytimestä varustettu CPU ja jokaisella ytimellä on oma L1-välimuistinsa, on mahdollista, että Core1 ja Core2 sekä välittävät saman muistin osan samanaikaisesti? Jos se on mahdollista, mikä on päämuistin arvo, jos sekä Core1 että Core2 ovat muokkauttaneet niiden arvot välimuistiin?

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

Vastaus

SuperUser-avustajat David Schwartz, sleske ja Kimberly W ovat meille vastaus. Ensin ylös, David Schwartz:

Jos minulla on kaksi ytimestä varustettu CPU ja jokaisella ytimellä on oma L1-välimuistinsa, on mahdollista, että Core1 ja Core2 sekä välittävät saman muistin osan samanaikaisesti?

Kyllä, suorituskyky olisi kauhea, jos näin ei olisi. Harkitse samaa koodia käyttävät kaksi ketjua. Haluat, että koodi molemmissa L1-välimuistissa.

Jos se on mahdollista, mikä on päämuistin arvo, jos sekä Core1 että Core2 ovat muokkauttaneet niiden arvot välimuistiin?

Vanha arvo on päämuistissa, sillä sillä ei ole väliä, koska kumpikaan ydin ei lue sitä. Ennen muokatun arvon poistamista välimuistista, se on kirjoitettava muistiin. Tyypillisesti käytetään jotain MESI-protokollan versiota. MESI: n perinteisessä toteutuksessa, jos arvoa muokataan yhdessä välimuistissa, sitä ei voi olla missään muussa välimuistissa samalla tasolla.

Seuraa vastaus sleske:

Kyllä, kun kaksi välimuistia välimuistissa, sama muistipiiri voi tapahtua ja se on itse asiassa ongelma, joka esiintyy paljon käytännössä. On olemassa erilaisia ​​ratkaisuja, esimerkiksi:

  • Nämä kaksi välimuistia voivat kommunikoida varmistaakseen, etteivät ne ole eri mieltä
  • Sinulla voi olla jonkinlainen ohjaaja, joka valvoo kaikkia kätköjä ja päivittää ne vastaavasti
  • Kukin prosessori valvoo muistipaikkoja, jotka se on tallentanut, ja kun se havaitsee kirjoituksen, se heittää sen (nyt virheellinen) välimuistin

Ongelma on nimeltään välimuistin koherenssi ja aiheen Wikipedia-artikkelilla on hieno katsaus ongelmaan ja mahdollisiin ratkaisuihin.

Ja meidän lopullinen vastaus Kimberly W:

Vastaus kysymykseen viestisi otsikossa riippuu siitä, mitä välimuistiprotokolla on. Jos se on kirjoittaa takaisin, välimuisti tyhjennetään takaisin päämuistiin, kun välimuistin ohjaimella ei ole muuta vaihtoehtoa kuin laittaa uusi välimuistilohko jo käytössä olevalle tilalle. Aikaisemmin käytössä oleva lohko poistetaan ja sen arvo palautetaan takaisin päämuistiin.

Toinen protokolla on kirjoitus. Tällöin välimuisti-lohko kirjoitetaan tasolle n, vastaava lohko tasolla n + 1 päivitetään. Se on samankaltainen käsitteen täyttämiseksi alla olevan hiilipaperin kanssa; mitä kirjoitat päälle, kopioidaan alla olevaan arkkiin. Tämä on hitaampaa, koska siihen liittyy luonnollisesti enemmän kirjoitustoimintoja, mutta välimuistien väliset arvot ovat johdonmukaisempia. Palautussuunnitelmassa vain korkeimman tason välimuistilla olisi tietyn muistilohkon ajankohtainen arvo.

Onko jokin asia lisättävä selitykseen? Kuulkaa kommentit. Haluatko lukea lisää vastauksia muilta tech-tajuilta Stack Exchange-käyttäjiltä? Katso koko keskusteluketju täältä.

Kuvauskenttä: Lemsipmatt (Flickr)