Als je net begint te leren hoe multi-core Cpu ‘ s, caching, cache coherentie, en het geheugen werkt, kan het lijken een beetje verwarrend in het begin. Met dat in het achterhoofd, vandaag de SuperUser Q&A post antwoorden op een nieuwsgierige lezer de vraag.
Vandaag Vraag & Antwoord sessie komt ons hoffelijkheid van SuperUser—een onderverdeling van de Stack Exchange, een community-gedreven groepering van de Q&A-sites.
De Vraag
SuperUser reader CarmeloS wil weten wanneer een CPU cache is leeggemaakt terug naar intern geheugen:
Als ik een processor met twee cores en elke kern heeft zijn eigen L1-cache, is het mogelijk dat Core1 en Core2 zowel cache hetzelfde deel van het geheugen? Als het mogelijk is, wat zal de waarde van het hoofdgeheugen te worden als beide Core1 en Core2 hebt bewerkt, hun waarden in de cache?
Wanneer is een CPU cache leeggemaakt terug naar main geheugen?
Het Antwoord
SuperUser medewerkers David Schwartz, sleske, en Kimberly W hebben het antwoord voor ons. Eerst omhoog, David Schwartz:
Als ik een processor met twee cores en elke kern heeft zijn eigen L1-cache, is het mogelijk dat Core1 en Core2 zowel cache hetzelfde deel van het geheugen?
Ja, prestaties zou verschrikkelijk zijn als dit niet het geval was. Rekening houden met twee draden met dezelfde code. Wilt u die code in zowel de L1 cache.
Als het mogelijk is, wat zal de waarde van het hoofdgeheugen te worden als beide Core1 en Core2 hebt bewerkt, hun waarden in de cache?
De oude waarde wordt in het hoofdgebouw van het geheugen, welke niet is van belang, omdat noch kern zal lezen. Voor het uitwerpen van een gewijzigde waarde van de cache, het moet worden geschreven naar het geheugen. Meestal een variant van de MESI-protocol wordt gebruikt. In de traditionele uitvoering van MESI, als er een waarde is gewijzigd in een cache, het kan niet aanwezig zijn op alle in een andere cache op dat zelfde niveau.
Gevolgd door het antwoord van sleske:
Ja, met twee caches cache hetzelfde geheugengebied kan gebeuren en is eigenlijk een probleem dat zich voordoet een veel in de praktijk. Er zijn verschillende oplossingen, bijvoorbeeld:
- De twee caches kunnen communiceren en zorg ervoor dat ze niet mee oneens
- U kunt een soort van toezichthouder die toezicht houdt op alle caches en updates hen dienovereenkomstig
- Elke processor controleert het geheugen van de gebieden die het in de cache, en bij het detecteren van een schrijven, gooit haar (nu ongeldig) cache
Het probleem is de zogenaamde cache coherentie en de Wikipedia-artikel over het onderwerp heeft een mooi overzicht van het probleem en de mogelijke oplossingen.
En onze laatste antwoord van Kimberly W:
Om de vraag te beantwoorden in uw bericht de titel, het hangt af van wat de caching protocol is. Als het write-back cache zal alleen worden teruggevoerd tot de belangrijkste geheugen als cache controller heeft geen andere keuze, maar om een nieuwe cache-blok in het reeds ingenomen ruimte. Het blok, dat eerder bezet de ruimte is verwijderd en de waarde ervan is geschreven teruggaan naar het geheugen.
Het andere protocol is write-through. In dat geval, wanneer de cache blok wordt weggeschreven op niveau n, wordt het overeenkomstige blok op het niveau n+1 is bijgewerkt. Het is vergelijkbaar met het concept tot het invullen van een formulier met carbon papier onder, wat je schrijft op de top is gekopieerd op het werkblad hieronder. Dit is langzamer, omdat het impliceert uiteraard meer schrijven, maar de waarden tussen de caches zijn meer consistent. In de write-back regeling, wordt alleen het hoogste niveau cache zou hebben de meest up-to-date waarde voor een bepaald geheugenblok.
Nog iets toe te voegen aan de uitleg? Geluid uit in de reacties. Wilt u meer antwoorden van de andere tech-savvy Stack Exchange-gebruikers? Bekijk de volledige bespreking draad hier.
Image Credit: Lemsipmatt (Flickr)