När Är en CPU Cache Spolas Tillbaka till Huvud-Minne?

0
289

Om du just har börjat lära sig hur multi-core Processorer, cachning, cache-koherens, och minnet fungerar, det kan verka lite förvirrande till en början. Med detta i åtanke, dagens SuperUser Q&A inlägget har svar till en nyfiken läsare fråga.

Dagens session med frågor Och Svar kommer till oss artighet av SuperUser—en indelning av Stack Exchange, en community-driven gruppering av Q&A sidor.

Frågan

SuperUser läsare CarmeloS vill veta när en CPU cache spolas tillbaka till main memory:

Om jag har en PROCESSOR med två kärnor och varje kärna har sin egen L1 cache, är det möjligt att Core1 och Core2 både cache samma del av minnet på samma gång? Om det är möjligt, vad som kommer att värdet av huvudminnet vara om båda Core1 och Core2 har redigerat sina värden i cache?

När är en CPU cache spolas tillbaka till huvud-minne?

Svara

SuperUser bidragsgivare David Schwartz, sleske, och Kimberly W har svaret för oss. Först upp, David Schwartz:

Om jag har en PROCESSOR med två kärnor och varje kärna har sin egen L1 cache, är det möjligt att Core1 och Core2 både cache samma del av minnet på samma gång?

Ja, prestanda skulle vara hemskt om detta inte var fallet. Tänk att två trådar som kör samma kod. Du vill att koden i både L1 cachar.

Om det är möjligt, vad som kommer att värdet av huvudminnet vara om båda Core1 och Core2 har redigerat sina värden i cache?

Det gamla värdet kommer att vara i främsta minne, som inte kommer att fråga eftersom varken kärnan kommer att läsa det. Innan ta ut ett ändrat värde från cachen, det måste vara skriven i minnet. Typiskt, en variant av MESI-protokollet används. I den traditionella genomförandet av MESI, om ett värde ändras i en cache, det kan inte vara närvarande i någon annan cache på samma nivå.

Följt av svaret från sleske:

Ja, med två cachar cache-minne regionen kan hända att det faktiskt är ett problem som förekommer mycket i praktiken. Det finns olika lösningar, till exempel:

  • De två cachar kan kommunicera för att se till att de inte håller
  • Du kan ha någon form av handledare som övervakar alla cachar och uppdateringar dem därefter
  • Varje processor övervakar minne områden som det har cachas, och när den upptäcker att skriva, det kastar sin (nu gällande) cache

Problemet kallas cache-koherens och Wikipedia-artikeln om ämnet har en bra överblick av problemet och möjliga lösningar.

Och vår sista svaret från Kimberly W:

För att svara på frågan i ditt inlägg titel, det beror på vad cache-protokollet. Om det är write-back cache endast kommer att spolas tillbaka till huvud-minnet när cache-styrenheten har inget annat val än att sätta en ny cache block i redan ockuperat utrymme. Det block som tidigare ockuperat utrymmet bort och dess värde skrivs tillbaka till huvudminnet.

Den andra protokoll är att skriva. I så fall, när som helst cache blocket är skrivet på nivå n, motsvarande block på nivå n+1 är uppdaterad. Det är liknande i begrepp att fylla i ett formulär med karbonpapper under, vad du skriver på toppen kopieras på blad nedan. Detta är långsammare eftersom det inbegriper naturligtvis mer att skriva verksamheten, men de värden mellan cachar är mer konsekvent. I write-back-system, endast den högsta nivån cache skulle ha den mest up-to-date värde för ett särskilt minne block.

Har något att tillägga till förklaring? Ljudet i kommentarerna. Vill läsa fler svar från andra tech-savvy Stack Exchange-användare? Kolla in den fullständiga diskussionen tråd här.

Image Credit: Lemsipmatt (Flickr)