Startpagina » hoe » Wanneer is de cache van een CPU teruggespoeld naar het hoofdgeheugen?

    Wanneer is de cache van een CPU teruggespoeld naar het hoofdgeheugen?

    Als je net begint te leren hoe multi-core CPU's, caching, cache-coherentie en geheugen werken, lijkt het in eerste instantie een beetje verwarrend. Met dat in gedachten heeft de SuperUser Q & A-post van vandaag antwoorden op de vraag van een nieuwsgierige lezer.

    De Question & Answer-sessie van vandaag komt tot ons dankzij SuperUser - een onderdeel van Stack Exchange, een gemeenschapsgedreven groep van Q & A-websites.

    De vraag

    SuperUser-lezer CarmeloS wil weten wanneer de cache van een CPU wordt teruggespoeld naar het hoofdgeheugen:

    Als ik een CPU met twee kernen heb en elke kern een eigen L1-cache heeft, is het dan mogelijk dat Core1 en Core2 beide dezelfde geheugens tegelijkertijd opslaan? Als dit mogelijk is, wat zal de waarde van het hoofdgeheugen zijn als zowel Core1 als Core2 hun waarden in de cache hebben bewerkt?

    Wanneer wordt de cache van een CPU teruggespoeld naar het hoofdgeheugen?

    Het antwoord

    SuperUser-bijdragers David Schwartz, Sleske en Kimberly W hebben het antwoord voor ons. Als eerste, David Schwartz:

    Als ik een CPU heb met twee kernen en elke kern een eigen L1-cache heeft, is het mogelijk dat Core1 en Core2 beide hetzelfde geheugengedeelte tegelijkertijd cachen?

    Ja, de prestaties zouden vreselijk zijn als dit niet het geval was. Overweeg twee threads met dezelfde code. U wilt die code in beide L1-caches.

    Als dit mogelijk is, wat zal de waarde van het hoofdgeheugen zijn als zowel Core1 als Core2 hun waarden in de cache hebben bewerkt?

    De oude waarde bevindt zich in het hoofdgeheugen, wat niet uitmaakt, omdat geen van beide de kern zal lezen. Voordat u een gewijzigde waarde uit de cache verwijdert, moet deze in het geheugen worden geschreven. Meestal wordt een variant van het MESI-protocol gebruikt. In de traditionele implementatie van MESI, als een waarde in één cache wordt gewijzigd, kan deze helemaal niet aanwezig zijn in een andere cache op hetzelfde niveau.

    Gevolgd door het antwoord van sleske:

    Ja, met twee cachegeheugens in de cache kan hetzelfde geheugengebied optreden en dit is eigenlijk een probleem dat in de praktijk veel voorkomt. Er zijn verschillende oplossingen, bijvoorbeeld:

    • De twee caches kunnen communiceren om zeker te zijn dat ze het niet oneens zijn
    • U kunt een soort supervisor hebben die alle caches bewaakt en deze overeenkomstig bijwerkt
    • Elke processor controleert de geheugengebieden die in de cache zijn opgeslagen en wanneer deze een write detecteert, wordt de (nu ongeldige) cache eruit gegooid

    Het probleem wordt cache-coherentie genoemd en het Wikipedia-artikel over het onderwerp heeft een aardig overzicht van het probleem en mogelijke oplossingen.

    En ons laatste antwoord van Kimberly W:

    Om de vraag in de titel van uw bericht te beantwoorden, hangt het af van wat het caching-protocol is. Als het terugschrijven is, wordt de cache alleen teruggespoeld naar het hoofdgeheugen als de cache-controller geen andere keuze heeft dan een nieuw cache-blok in een reeds bezette ruimte te plaatsen. Het blok dat eerder de ruimte in beslag nam, wordt verwijderd en de waarde ervan wordt teruggeschreven naar het hoofdgeheugen.

    Het andere protocol is doorschrijfprocedure. In dat geval, telkens wanneer het cacheblok op niveau wordt geschreven n, het bijbehorende blok op niveau n + 1 is geüpdatet. Het is vergelijkbaar in concept met het invullen van een formulier met carbonpapier eronder; wat je er bovenop schrijft, wordt gekopieerd op het onderstaande blad. Dit is langzamer omdat het duidelijk meer schrijfbewerkingen betreft, maar de waarden tussen caches zijn meer consistent. In het terugschrijfschema zou alleen de cache op het hoogste niveau de meest actuele waarde hebben voor een bepaald geheugenblok.


    Heb je iets toe te voegen aan de uitleg? Geluid uit in de reacties. Wilt u meer antwoorden van andere technisch onderlegde Stack Exchange-gebruikers lezen? Bekijk hier de volledige discussiethread.

    Image Credit: Lemsipmatt (Flickr)