Hvis du nettopp har begynt å lære hvordan flerkjerners CPUer, caching, cache-koherens og minne fungerer, kan det virke litt forvirrende i starten. Med det i bakhodet har dagens SuperUser-spørsmål og svar svar på en nysgjerrig leserspørsmål.
Dagens spørsmål og svar-økt kommer til oss med tillatelse fra SuperUser - en underavdeling av Stack Exchange, en samfunnsdrevet gruppe av spørsmål og svar-nettsteder.
Spørsmålet
SuperUser-leser CarmeloS vil vite når hurtigbufferen til en CPU skylles tilbake til hovedminnet:
Hvis jeg har en CPU med to kjerner og hver kjerne har sin egen L1-cache, er det mulig at Core1 og Core2 begge cache den samme delen av minnet samtidig? Hvis det er mulig, hva vil verdien av hovedminnet være hvis både Core1 og Core2 har redigert verdiene i hurtigbufferen?
Når skyves hurtigbufferen til en CPU tilbake til hovedminnet?
Svaret
SuperUser-bidragsytere David Schwartz, sleske og Kimberly W har svaret for oss. Først opp, David Schwartz:
Hvis jeg har en CPU med to kjerner og hver kjerne har sin egen L1-cache, er det mulig at Core1 og Core2 begge cache den samme delen av minnet samtidig?
Ja, ytelse ville vært forferdelig hvis ikke dette var tilfelle. Vurder to tråder som kjører samme kode. Du vil ha den koden i begge L1-cachene.
Hvis det er mulig, hva vil verdien av hovedminnet være hvis både Core1 og Core2 har redigert verdiene i hurtigbufferen?
Den gamle verdien vil være i hovedminnet, noe som ikke betyr noe siden ingen av kjernene vil lese den. Før du endrer ut en modifisert verdi fra hurtigbufferen, må den skrives til minnet. Vanligvis noen variant av MESI-protokoll benyttes. I den tradisjonelle implementeringen av MESI, hvis en verdi endres i en cache, kan den ikke være tilstede i det hele tatt i noen annen cache på samme nivå.
Etterfulgt av svaret fra sleske:
Ja, det å ha to hurtigbuffere i samme minnesregion kan skje og er faktisk et problem som oppstår mye i praksis. Det er forskjellige løsninger, for eksempel:
- De to cachene kan kommunisere for å sikre at de ikke er uenige
- Du kan ha en slags veileder som overvåker alle cacher og oppdaterer dem deretter
- Hver prosessor overvåker minneområdene den har hurtigbufret, og når den oppdager en skriving, kaster den ut (nå ugyldig) cache
Problemet kalles cache coherency and the Wikipedia article på temaet har en fin oversikt over problemet og mulige løsninger.
Og vårt endelige svar fra Kimberly W:
For å svare på spørsmålet i tittelen på innlegget ditt, avhenger det av hva caching-protokollen er. Hvis det er tilbakeføring, vil hurtigbufferen bare skylles tilbake til hovedminnet når hurtigbufferkontrolleren ikke har annet valg enn å plassere en ny hurtigblokk i allerede opptatt plass. Blokken som tidligere okkuperte plassen fjernes og verdien skrives tilbake til hovedminnet.
Den andre protokollen er gjennomskrivning. I så fall, når som helst cache-blokken skrives på nivå n , den tilsvarende blokken på nivå n + 1 er oppdatert. Det ligner i konseptet å fylle ut et skjema med karbonpapir under; hva du skriver på toppen kopieres på arket nedenfor. Dette er tregere fordi det åpenbart innebærer flere skriveaksjoner, men verdiene mellom cachene er mer konsistente. I tilbakekoplingsskjemaet vil bare hurtigbufferen på høyeste nivå ha den mest oppdaterte verdien for en bestemt minneblokk.
Har du noe å legge til forklaringen? Lyd av i kommentarene. Vil du lese flere svar fra andre teknologikyndige Stack Exchange-brukere? Sjekk ut hele diskusjonstråden her .
Bildekreditt: Lemsipmatt (Flickr)