Unterschied zwischen 2-Wege- und 4-Wege-Caches?

Ich verstehe dieses Bild nicht ganz:

Geben Sie hier die Bildbeschreibung ein

Wenn die Daten- und Befehls-Caches getrennt sind, bedeutet das nicht, dass diese CPU kein von Neumann-Modell, sondern ein Harvard-Modell ist?

Und was bedeutet es, dass ein Cache 2-Wege und ein Cache 4-Wege ist?

Die "Weg"-ness eines Caches bezieht sich auf seine Assoziativität.

Antworten (2)

Nein, getrennte Caches machen aus einer von Neumann-Maschine keine Harvard-Maschine; beide Caches repräsentieren immer noch denselben externen Speicher. Die Trennung der Caches für Anweisungen und Daten verbessert jedoch die Leistung, indem verhindert wird, dass sich die beiden Streams gegenseitig stören.

Die Set-Assoziativität oder "Weg"-ness eines Caches ist einfach ein Indikator für die Leistung (Trefferrate). Es bezieht sich auf die Anzahl der Aliase für einen bestimmten Cache-Slot, die im Cache gehalten werden können, bevor einer von ihnen ersetzt werden muss. Im Allgemeinen wird ein Cache mit höherer Assoziativität eine bessere Leistung bei den meisten typischen Arten von Code haben, auf Kosten einer komplexeren Steuerlogik.

Die Assoziativität ist kein Leistungsindikator. Stattdessen führt eine höhere Set-Assoziativität zu einer besseren Leistung.
@Dave, "Alias" bezieht sich auf?
@Pacerier: Eine Teilmenge der Speicheradressenbits (normalerweise LSBs) wird verwendet, um einen bestimmten Steckplatz im Cache auszuwählen oder zu "indizieren". Die verbleibenden Adressbits (normalerweise MSBs und als "Tag" bezeichnet) können jeden beliebigen Wert annehmen, und der Satz von Speicherstellen, die sie darstellen, wird für diesen Cache-Slot als "Alias" bezeichnet.

Wenn in einer echten Von-Neuman-Architektur eine Anweisung in den Speicher schreibt, wo die nachfolgende Anweisung gespeichert ist, sollte diese Änderung die nächste Anweisung beeinflussen, die von dem Prozessor ausgeführt wird. Ein solches Verhalten wurde von vielen älteren Von Neuman-Prozessoren wie dem 6502, Z80 und 68000 gezeigt. Viele neuere Prozessoren, einschließlich des ursprünglichen 8088, weichen jedoch etwas von diesem Modell ab; manche weichen mehr ab als andere.

Beim 8088 überlappt die Ausführung eines Befehls in einigen Fällen das Abrufen nachfolgender Befehle, so dass zu dem Zeitpunkt, zu dem ein Befehl die Ausführung beendet, bereits ein oder mehrere folgende Befehle abgerufen wurden. Der Prozessor bemüht sich nicht, diesen Zustand zu erkennen, aber ein Verzweigungs- oder Sprungbefehl löscht den Prefetch-Puffer. Folglich sind Änderungen am Codespeicher garantiert wirksam, wenn eine Verzweigung oder ein Sprung vor den geänderten Anweisungen ausgeführt wird. Solche Maschinen passen nicht ganz zum Von-Neuman-Modell, aber das Hinzufügen eines jmp in den wenigen Fällen, in denen natürlicherweise kein solcher auftritt, ist im Allgemeinen kein Problem.

Bei einigen anderen Prozessoren (z. B. Motorola 68040) gibt es einen Code-Speicher-Cache, der kürzlich ausgeführte Befehle enthält; Wenn sich eine Anweisung im Cache befindet, werden die Inhalte der entsprechenden Hauptspeicherstelle und alle an diesen Inhalten vorgenommenen Änderungen ignoriert, wenn die Anweisung beim nächsten Versuch, sie auszuführen, noch im Cache ist. Solche Prozessoren erfordern häufig, dass einige explizite Maßnahmen ergriffen werden, um den Cache zwischen dem Schreiben in einen Speicherbereich und jedem Versuch, dort Code auszuführen, zu löschen. Solche Maschinen können als signifikant vom Von-Neuman-Modell abweichend angesehen werden, da das Erscheinen des sekundären Caches das Programmverhalten beeinflusst.

Heutzutage besteht das normale Verhalten oft darin, getrennte Code- und Daten-Caches zu haben, aber eine Schaltung zu haben, die erkennt, wenn eine Speicherstelle, die im Code-Cache vorhanden ist, geschrieben wird. Während es möglich wäre, den Code-Flash einfach entsprechend zu aktualisieren, um den Schreibvorgang widerzuspiegeln, ist es in der Praxis oft einfacher, einfach die Teile des Code-Cache zu löschen, die veraltete Daten enthalten könnten. Solche Situationen treten nicht allzu oft auf, und die Zeit, die für die Bearbeitung aufgewendet wird, macht wahrscheinlich selten einen erheblichen Bruchteil der gesamten Ausführungszeit aus.