2016-09-04 4 views
0

Ich konnte keine Quelle finden, die erklärt, wie die Richtlinie im Detail funktioniert. Die Kombinationen von Schreibrichtlinien sind in Jouppi's Paper für Interessierte erklärt. So habe ich es verstanden.Write Allocate/Fetch bei Write Cache Policy

  1. Eine Schreibanforderung wird von CPU an Cache gesendet.
  2. Ergebnisse in einem Cache-Miss anfordern.
  3. wird ein Cache-Block für diese Anforderung im Cache zugeordnet. (Write-zuzuteilen)
  4. Schreibanforderungsblock vom unteren Speicher an den zugewiesenen Cache-Block abgerufen wird. (Fetch-on-Write)
  5. Jetzt sind wir in der Lage Schreiben auf den Cache-Block "allocated" und "update by fetch".

Frage ist, was 5 zwischen Schritt 4 und Schritt geschieht (Lets sagen Cache ein nicht-blockierenden Cache mit Mißerfolg-Status ist Register Handhabung.)

Does CPU Wiederholungsschreibanforderung auf Cache, bis Schreib haben -hit passiert? (nach dem Abrufen des Blocks zum zugewiesenen Cache-Block)

Wenn nicht, wo wird schreiben Anfrage Daten werden in der Zwischenzeit gehalten?

Edit: Ich glaube, ich habe meine Antwort in Implementation of Write Allocate in the K86™ Processors gefunden. Es wird direkt in den zugeordneten Cache-Block geschrieben und später mit der Leseanforderung zusammengeführt.

Antwort

1

Es wird direkt in den zugewiesenen Cache-Block geschrieben und später mit der Leseanforderung zusammengeführt.

Nein, das sagt AMDs pdf nicht. Sie sagen, dass die Speicherdaten mit den gerade abgerufenen Daten aus dem Speicher zusammengeführt werden und dann im Datenarray des L1-Cachespeichers gespeichert werden.

Der Cache verfolgt die Gültigkeit mit der Granularität der Cache-Zeilen. Es gibt keine Möglichkeit, die Tatsache zu speichern, dass "die Bytes 3 bis 6 gültig sind; bewahren Sie sie auf, wenn Daten aus dem Speicher ankommen". Diese Art von Logik ist zu groß, um in jeder Zeile des Cache-Arrays zu replizieren. Bitte beachten Sie, dass das von Ihnen gefundene PDF ein bestimmtes Verhalten der AMD K6-Mikroarchitekturen beschreibt, das nur Single-Core-fähig ist und einige Modelle nur eine einzelne Cache-Ebene hatten, sodass kein Cache-Kohärenz-Protokoll erforderlich war. Sie beschreiben das K6-III (Modell 9) unter Verwendung von MESI zwischen L1- und L2-Caches.

Eine CPU, die in den Cache schreibt, muss die Daten behalten, bis der Cache bereit ist, sie zu akzeptieren. Es ist jedoch kein Wiederholungs-bis-Erfolg-Prozess. Es ist eher so, als ob der Cache die Speicherhardware benachrichtigt, wenn sie bereit ist, diesen Speicher zu akzeptieren (d. H. Sie hat diese Zeile aktiv und im modifizierten Zustand, wenn der Cache mit anderen Caches unter Verwendung der MESI protocol kohärent ist).

In einer echten CPU, multiple outstanding misses can be in flight at once (auch ohne vollständige spekulative Out-of-Order-Ausführung). Dies wird Miss unter Miss genannt. Die CPU < -> Cache-Verbindung benötigt einen Puffer für jeden ausstehenden Fehler, der parallel unterstützt werden kann, um die Speicherdaten zu speichern. z.B. Ein Kern könnte 8 Puffer haben und 8 ausstehende Lade- oder Speicherfehler unterstützen. Eine 9. Speicheroperation konnte nicht beginnen, bis einer der 8 Puffer verfügbar wurde.Bis dahin müssten Daten in der Speicherwarteschlange der CPU bleiben.

Diese Puffer können zwischen Lade- und Speichervorgängen aufgeteilt werden, oder Speicherpuffer. Das OP berichtet, dass die Suche nach Speicherpuffer viele verwandte Sachen von Interesse gefunden hat; ein Beispiel ist this part of Wikipedia's MESI article.

Der L1-Cache ist wirklich ein Teil eines CPU-Kerns in modernen Hochleistungs-Designs. Es ist sehr eng mit der Speicherordnungslogik integriert und muss in der Lage sein, atomare Operationen wie und viele andere Komplikationen (wie Speicherumordnung) effizient zu unterstützen. Siehe zum Beispiel https://en.wikipedia.org/wiki/Memory_disambiguation#Avoiding_WAR_and_WAW_dependencies.

Einige andere Begriffe:

  • Speicherpuffer
  • Speicherwarteschlange
  • Speicherordnungspuffer
  • Cache-Schreib-Port/Cache-Lese-Port/Cache-Port
  • global sichtbar

entfernt bezogen: An interesting post Untersuchung der adaptiven Ersetzung Politik von Intel IvyBridge L3-Cache, so dass es resistenter gegen die Vernichtung wertvolle Daten beim Scannen einer großen Array.

+0

Kann ich den Namen des Puffers lernen, der die Daten speichert? Ich weiß, dass die CPU mehrere ausstehende Leseanforderungen wegen fehlgeschlagener Statusbehandlungsregister haben kann, was sie zu einem blockierungsfreien Cache macht, aber ich kenne den Namen der Hardware nicht, die als Puffer für Speicherdaten dient, die mit geholt werden sollen Daten aus dem niedrigeren Speicher im Fall AMD K6. Ich würde es schätzen, wenn Sie mir den Namen oder Details oder Beispiele dieser Hardware mitteilen. – menderft

+0

@menderft: "Speicherpuffer" enthält anscheinend diese Bedeutung. Der MESI-Artikel auf Wikipedia [verwendet diesen Begriff, wenn er beschreibt, dass Cache-Miss-Speicher beim Schreiben auf eine ungültige Cache-Zeile warten müssen] (https://en.wikipedia.org/wiki/MESI_protocol#Memory_Barriers). Bei einer Architektur mit starker Speicherordnung müsste eine CPU die Dinge koordinieren, um sicherzustellen, dass Speicher nicht in einer Reihenfolge festgeschrieben werden, die nicht architektonisch zulässig ist. Es muss auch Speicherpuffer für seine eigenen Ladevorgänge ausspionieren, um das Erscheinungsbild der Ausführung eines einzelnen Threads in der richtigen Reihenfolge zu erhalten. Daher sind die Puffer Teil der Speicherwarteschlange. –

+1

Ja, es gibt viele Fragen zu meiner Frage, wenn ich nach dem Speicherpuffer suche. Vielen Dank. – menderft