Ich weiß, warum DRAM langsamer zu schreiben als zu lesen ist, aber warum ist das Schreiben im L1- und L2-Cache-RAM langsamer?

DRAM ist langsamer zu schreiben als zu lesen, weil es Zeit braucht, eine DRAM-Speicherzelle entweder zu laden oder zu entladen. Aber was ist mit dem SRAM in den L1- und L2-Caches meines Prozessors? Es ist auch langsamer zu schreiben, aber AFAIK, SRAM ist ein verriegelter Speicher, der auf Gates basiert.

Warum also die langsamere SRAM-Schreibgeschwindigkeit?

Danke.

Es wäre schön, das Programm (Name und Link), mit dem Sie die fraglichen Beobachtungen gemacht haben, und einige tatsächliche Details über das Setup, in dem Sie dieses Verhalten beobachten, wie das CPU-Modell usw., anzugeben.
Tatsächlich ist das Lesen von DRAM aufwändiger als das Schreiben. Tatsächlich zerstört das Lesen einer DRAM-Zelle ihre Ladung, und das Neuschreiben der Zelle ist Teil des Lesevorgangs . Ich bin also ziemlich skeptisch gegenüber Ihrer Behauptung, dass DRAM-Schreibvorgänge langsamer sind als Lesevorgänge. Hast du eine Quelle?

Antworten (3)

Sind Sie wirklich sicher, dass die Caches langsamer schreiben als lesen? Ich vermute, was Sie gehört haben, war der Gesamtbetrieb, nicht nur die SRAM-Lese- oder Schreibzeit. Das Schreiben in einen Cache ist eine teurere Operation, da schließlich in den langsameren Speicher geschrieben werden muss, der den Cache unterstützt. Es bedeutet auch, dass ein Cache-Block nicht einfach wiederverwendet werden kann, ohne ihn vorher zu leeren, wenn in ihn geschrieben wurde und dieser Schreibvorgang nicht zurück in den Hauptspeicher propagiert wurde.

Der eigentliche Schreibvorgang ist wahrscheinlich genauso schnell, aber der gesamte Schreibprozess und all die Dinge, die letztendlich in Gang gesetzt werden, sind länger.

Korrektur, der L1 schreibt so schnell wie er liest, aber der L2 schreibt langsamer. Jetzt, wo ich darüber nachdenke, hat die 4-Wege-Set-Assoziativität des L2-Cache wahrscheinlich auch eine Verzögerung, um auszuwählen, wohin geschrieben werden soll, während beim Lesen wahrscheinlich alle vier Sets ausgelesen und dann ausgewählt werden. Aber ja, ich stimme zu, dass ein neues Datum alles verdrängen wird, was da ist, und das wird zu einer Verzögerung führen. Übrigens habe ich dieses Dienstprogramm verwendet, um zu messen, wie mein RAM funktioniert: home.comcast.net/~fbui/bandwidth.html

In einem Cache-Speichersystem stellt die zum physikalischen Lesen oder Schreiben von Daten aus dem Cache-RAM erforderliche Zeit nur einen Teil der Zeit dar, die zum Durchführen eines Cache-Lese- oder -Schreibzugriffs erforderlich ist. Besonders in einem Mehrprozessorsystem ist es außerdem notwendig, zu bestimmen, was der Cache bei einem gegebenen Zugriff tun soll. Betrachten Sie beispielsweise einen satzassoziativen Cache, der vierfach assoziativ ist und auf vier Speicherbänke aufgeteilt ist. Wenn der Prozessor eine Leseanforderung durchführt, weiß der Cache-Controller sofort, dass die Daten, wenn sie sich im Cache befinden, von einer bekannten Adresse in einer von vier Bänken stammen müssen. Der Cache-Controller könnte sofort eine Leseanforderung an alle vier Bänke parallel initiieren (ohne die Ausgangsfreigabe zu treiben), bevor er bestimmt, welcher Chip, falls vorhanden, tatsächlich die Daten enthält. Mindestens drei der Banken werden nutzlose Daten abrufen, aber das nutzlose Abrufen von Daten ist harmlos (abgesehen davon, dass etwas Strom verschwendet wird). Wichtig ist, dass die Speicher zu dem Zeitpunkt, zu dem der Controller herausfindet, welche Bank (falls vorhanden) die Daten enthält und die Ausgabefreigabe steuert, bereits einige Zeit gehabt haben, um die Zugriffsanforderung zu verarbeiten.

Bei einer Schreibanforderung kann der Cache-Controller jedoch nicht mit der Durchführung einer Speicheroperation beginnen, bis er weiß, welcher Chip beschrieben werden soll. Eine nutzlose Lektüre ist harmlos; man kann effektiv "egal" sagen und die irrtümlich abgerufenen Daten verwerfen. Ein nutzloses Schreiben kann jedoch nicht rückgängig gemacht werden. Es ist daher wichtig, dass Daten erst geschrieben werden, nachdem der Controller herausgefunden hat, wohin der Schreibvorgang gehen soll.

Wenn man nur Speicherschreibvorgänge durchführen würde, könnte man sie so schnell wie Lesevorgänge durchführen, indem man den Prozess Pipeline-verarbeitet. In Zyklus n würde der Controller herausfinden, wohin im Speicher Byte n gehen sollte, während Byte n-1 an die im vorherigen Zyklus berechnete Stelle geschrieben wurde. Sehr wenige Situationen beinhalten jedoch viele aufeinanderfolgende Speicherschreibvorgänge ohne dazwischenliegende Lesevorgänge. Wenn das eigentliche Schreiben in den Speicher im Zyklus nach einer Schreibanforderung erfolgt und der Prozessor während dieses Zyklus einen Lesevorgang ausführen möchte, muss der Lesevorgang warten.

Schreibvorgänge werden in vielen Fällen weiter verzögert durch die Tatsache, dass viele Systeme es nicht zulassen, dass Speicherbytes einzeln geschrieben werden. Ein System kann einen 64-Bit-Bus zwischen dem Cache und dem Hauptspeicher haben und erfordert möglicherweise, dass der Hauptspeicher nur in 64-Bit-Blöcken geschrieben wird. Wenn der Code ein einzelnes Byte schreiben möchte, müssen 64 Bit aus dem RAM gelesen, ein Byte in den Cache geschrieben und die 64 Bit zu einem späteren Zeitpunkt wieder in den RAM geschrieben werden. Es kann möglich sein, dass ein Cache den Schreibvorgang durchführt, während die Daten aus dem Haupt-RAM abgerufen werden, und dann, sobald die Haupt-RAM-Daten verfügbar sind, nur die 56 ungeschriebenen Bits vom Hauptspeicherbus in den Cache kopiert, aber eine solche Logik fügt hinzu Komplexität. In vielen Fällen ist es einfacher, das Schreiben einfach zu verzögern, bis die Cache-Zeile aus dem RAM gelesen wurde.

In Mehrprozessorsystemen werden die Dinge noch komplizierter durch die Tatsache, dass zwei Prozessoren wiederholt dieselbe Cache-Zeile ohne Störung lesen können, aber wenn ein Prozessor eine Cache-Zeile schreibt, darf dem anderen Prozessor nicht erlaubt werden, diese Cache-Zeile bis zum ersten zu verwenden Prozessor hat sie in den Haupt-RAM geschrieben und der zweite Prozessor hat sie gelesen, oder der erste Prozessor hat die darin enthaltenen Daten über andere Mittel an den zweiten Prozessor geliefert. Eine Folge von Operationen, die ausschließlich aus Lesevorgängen besteht, wird viel schneller ausgeführt als eine Folge von Vorgängen, die aus einer Mischung von Lese- und Schreibvorgängen besteht (wobei zu beachten ist, dass in vielen Fällen Operationen, die scheinbar nur Schreibvorgänge beinhalten, tatsächlich sowohl Lese- als auch Schreibvorgänge beinhalten ). Das Problem ist nicht so sehr, dass die Schreibvorgänge selbst langsamer sind,

Die Webseite für dieses BandwidthProgramm, auf die Sie Ihre Beobachtung offenbar stützen, die Sie in Ihrer ursprünglichen Frage nicht erwähnen, beantwortet Ihre Frage im Abschnitt „Kommentare“ unter der Überschrift „Computer “, Beobachtung 6 .

Wenn sich der L2-Cache im Write-Through-Modus befindet, ist das L2-Schreiben sehr langsam und entspricht eher den Schreibgeschwindigkeiten des Hauptspeichers.

Normalerweise ist der L2-Cache also schneller, aber wenn sich der L2-Cache im Write-Through- Modus ( alternative Erklärung von Oracle ) befindet, ist das reine Schreiben nicht schneller, aber wenn dann auf denselben Speicher zugegriffen wird, wird er schnell abgerufen als es wurde bereits zwischengespeichert.

Wenn Sie die angegebenen Grafiken und Tabellen überprüft hätten, würden Sie feststellen, dass sich die meisten Computer normalerweise so verhalten, wie Sie es erwarten würden, je näher der Speicher an der CPU ist, desto schneller ist er (wobei die CPU am schnellsten ist) registers.