20Aug
Jos alat vain oppia, kuinka monen ytimen suorittimet, välimuisti, välimuistin koherenssi ja muisti toimivat, se voi tuntua hieman hämmentävältä aluksi. Tässä mielessä tämän päivän SuperUser Q & A -postilla on vastauksia utelias lukijan kysymykseen.
Päivän kysymys &Vastausistunto tulee meille kohteliaasti SuperUser-osastoon Stack Exchange, yhteisöllinen ryhmittely Q & A verkkosivuilla.
Kysymys
SuperUser-lukija CarmeloS haluaa tietää, milloin CPU: n välimuisti huuhdellaan takaisin päämuistiin:
Jos minulla on CPU, jossa on kaksi ytintä ja jokaisella ytimellä on oma L1-välimuisti, on mahdollista, että Core1 ja Core2 sekä välimuistiosa muistia samaan aikaan? 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 on mahdollista, mikä on päämuistin arvo, jos sekä Core1 että Core2 ovat muokkineet arvojaan välimuistissa?
Vanha arvo on päämuistissa, sillä sillä ei ole merkitystä, koska mikään 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.
Slesken vastaus:
Kyllä, kun kaksi välimuistia välimuistissa on sama muistipiiri, se voi tapahtua ja se on itse asiassa ongelma, joka esiintyy paljon käytännössä.On olemassa erilaisia ratkaisuja, esimerkiksi:
- Kaksi välimuistia voi kommunikoida varmistaakseen, etteivät ne ole eri mieltä
- Voit olla jonkinlainen ohjaaja, joka valvoo kaikki välimuistit ja päivittää ne vastaavasti
- Jokainen prosessori valvoo muistipaikkoja, jotka se on välimuistissa, jakun se havaitsee kirjoituksen, se heittää sen( nyt pätemättömän) välimuistin
. Tätä ongelmaa kutsutaan välimuistin koherenssiksi ja aiheen Wikipedia-artikkelilla on hyvä yleiskuva ongelmasta ja mahdollisista ratkaisuista.
Ja Kimberly W: n lopullinen vastaus:
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, kun välimuistilohko on kirjoitettu tasolle n , taso n + 1 vastaava lohko 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 sinulla jotain lisättävä selitykseen? Kuulkaa kommentit. Haluatko lukea lisää vastauksia muilta tech-tajuilta Stack Exchange-käyttäjiltä?Katso koko keskusteluketju täältä.
Kuvan luotto: Lemsipmatt( Flickr)