Frage:
Der genaue Grund, warum DRAM langsamer schreibt als liest?
Caladan
2011-07-29 06:46:35 UTC
view on stackexchange narkive permalink

Ich möchte nur sicherstellen, dass meine Fakten klar sind.

In den alten Tagen, als ich ein Teenager war und das Internet außerhalb der Wissenschaft unbekannt war, erinnere ich mich an das Lernen (das wurde mir nicht beigebracht per se), dass das Schreiben in den DRAM langsamer ist als das Lesen, da das Laden oder Entladen der Kondensatoren in jeder DRAM-Speicherzelle einige Zeit in Anspruch nimmt.

Ist dies immer noch der Fall oder war es jemals?

Whoops - Ich dachte, Sie haben versucht, Ihre vorherige Frage zu bearbeiten. Entschuldigung für den Lärm ...
Fünf antworten:
tyblu
2011-07-29 09:23:28 UTC
view on stackexchange narkive permalink

Ja, das ist immer noch der Fall. Das Prinzip hinter dem DRAM ist das eines Kondensators (einfach 1 kleiner und ein großer Transistor), während das hinter dem SRAM ein Latch ist, der aus einigen (mehr) Transistoren besteht. DRAM hat mehr Kapazität. Wenn Sie davon ausgehen, dass sie die gleiche * Eingangsimpedanz haben, ist es einfach zu erkennen, dass die RC-Verzögerung des DRAM langsamer ist als die des SRAM.

DRAM ist jedoch billig, daher lieben wir es immer noch. SRAM ist großartig, also lieben wir es auch.

DRAM:

(Quelle: emrl.de ) sub>

SRAM:

* (Das werden sie wahrscheinlich nicht - es ist wirklich auf die Leseschaltung abgestimmt, aber wen interessiert das? .)

Ich denke, sie wollten etwas über die nicht symmetrischen Lese- und Schreibzeiten im DRAM wissen, nicht über den Vergleich mit dem SRAM.
supercat
2011-07-29 20:16:51 UTC
view on stackexchange narkive permalink

Für einen Lesezyklus für einen "traditionellen" DRAM musste eine Zeile aus dem Speicherarray in den Zeilenpuffer gelesen und unverändert zurückgeschrieben werden. Für einen Schreibzyklus musste eine Zeile gelesen, geändert und dann zurückgeschrieben werden. Im Allgemeinen konnte man eine Zeile im Speicher erst ändern, nachdem sie gelesen worden war. Es wäre möglich gewesen, einen DRAM zu entwerfen, der ein "Tag" -Bit für jeden adressierbaren Ort enthielt, so dass man bereits vor dem Lesen mit dem Schreiben einer Zeile beginnen konnte, und die "markierten" Orte würden die gelesenen Daten in der Zeile automatisch überschreiben Puffer, aber ich weiß nicht, dass ein Hersteller dies jemals getan hat. Es wäre auch möglich gewesen, eine ganze Zeile auf einmal zu schreiben, ohne sie überhaupt zu lesen, aber mir ist auch nicht bekannt, dass ein Hersteller dies getan hat.

davidcary
2012-02-06 15:54:25 UTC
view on stackexchange narkive permalink

Mein Verständnis ist, dass "Lesen" und "Schreiben" identische Timings für einen typischen DRAM haben.

Vielleicht hat Ihnen jemand von "Flash-Speicher" -Zeitpunkten erzählt Relativ schnelle Lesezeiten, aber viel längere Schreibzeiten. Beispielsweise erfordert das Lesen eines Datensektors (bei 75 MHz) mit einem seriellen Numonyx M25P80-VMW6G 75-MHz-8-Mbit-Flash 7 Millisekunden, während das Löschen und Schreiben neuer Daten in einen Sektor normalerweise erforderlich ist 0,6 Sekunden (max. 3 Sekunden).

Mit anderen Worten, das Schreiben dieses Flash-Speichers dauert normalerweise 85-mal so lange wie das Lesen, und im schlimmsten Fall dauert das Schreiben eines Sektors mehr als 400-mal so lange wie das Lesen. ( Dies berücksichtigt nicht einmal die Ineffizienzen der Teilsektoraktualisierung.

Nach meiner Erfahrung nimmt die Zeit zum Löschen und Umschreiben eines bestimmten Flash-Sektors mit jedem Lösch- / Umschreibungszyklus weiter zu Lesezeiten bleiben konstant.

Verwandte Themen: ["Heute habe ich gelesen, dass die Flash-Schreibleistung mit der Verwendung abnimmt. Ich bin ein starker Benutzer. Soll ich mein Verhalten ändern?"] (Http://android.stackexchange.com/questions/116791/today-i-read-das-Flash-Schreib-Leistung-verringert-mit-Gebrauch-im-a-Heavy-User)
W5VO
2012-02-06 21:49:40 UTC
view on stackexchange narkive permalink

Der Grund, warum das Schreiben des DRAM länger dauert, liegt in der Empfindlichkeit des DRAM-Bits und in der Art und Weise, wie die Arrays verkabelt sind. Im Wesentlichen machen diese beiden Parameter es erforderlich, einen Lesevorgang durchzuführen, bevor Daten geschrieben werden.

Speicherarrays, einschließlich DRAM, sind normalerweise in einem Raster angeordnet. Die Ausgänge jedes Bits sind vertikal verbunden, und die Freigabesignale für jedes Bit sind horizontal verbunden. Um ein Datenbit zu lesen, verbindet das horizontale Freigabesignal oder die Wortleitung die gesamte Zeile mit den vertikalen Drähten, die als Bitleitungen bekannt sind. Selbst wenn Sie nur ein einzelnes Bit in einem großen Array möchten, müssen Sie auf die gesamte Zeile zugreifen. Diese verringerte Flexibilität beim Routing ist notwendig, um die gewünschte Dichte in Speicherarrays zu erreichen. DRAM ist im Wesentlichen ein Array von Kondensatoren mit Schaltern. Bei der Auslegung dieser Kondensatoren machen sie nur einen Bruchteil der parasitären Verdrahtungskapazitäten der vertikalen Bitleitungen aus. Mit den Bitleitungen verbundene Verstärker können die kleine Spannungsänderung erkennen, die auftritt, wenn eine geladene DRAM-Zelle mit der Bitleitung verbunden ist, und sie auf einen logischen Wert verstärken, den andere Schaltungen und Chips verwenden können. Aufgrund der Ladungsteilung der Bitleitungskapazität und der DRAM-Zellenkapazität werden die Daten auf einem DRAM-Bit bei jedem Zugriff effektiv gelöscht. Wenn Sie ein einzelnes DRAM-Bit lesen möchten, müssen Sie den Wert in dasselbe Bit zurückschreiben. Somit wird jedes Mal, wenn Sie aus dem DRAM lesen, der Zyklus gelesen und dann geschrieben.

Aufgrund der Gitternatur von Speicherarrays ist die Anzahl der Bits in einer Zeile normalerweise viel größer als die Wortgröße des Arrays. Dies bedeutet, dass, wenn Sie ein Wort aus einer Zeile lesen oder schreiben möchten, Bits durch die Wortzeile aktiviert werden, die Sie nicht lesen oder schreiben möchten. Diese Daten werden zerstört, wenn nichts unternommen wird, um sie zu erhalten. Das heißt, wenn Sie lesen, müssen Sie die gesamte Zeile lesen und die gesamte Zeile zurückschreiben. Zum Schreiben müssen Sie die gesamte Zeile lesen und dann die gelesenen Daten zusammen mit den Daten, die Sie schreiben möchten, zurückschreiben. Somit wird die Prozedur zum Schreiben von Daten in das Array gelesen und dann geschrieben.

Wir sehen also, dass die Vorgehensweise beim Lesen und Schreiben im Wesentlichen gleich ist: Lesen Sie zuerst eine Zeile und schreiben Sie dann den neuen Inhalt zurück. Das Lesen erfolgt zuerst, sodass die Daten zuerst verfügbar gemacht werden können, wenn es sich bei dem Prozess um ein Mehrzyklusereignis handelt. Das Schreiben kann am längsten dauern, da das Schreiben erst am Ende des Prozesses erfolgt. In der Vergangenheit war dies möglicherweise ein mehrzyklischer Prozess, aber ich habe Verstärker zum Lesen gesehen, die zurückschreiben, sobald sie den Wert kennen, der sie effektiv zum Binden zum Lesen und Schreiben macht.

Hast du dir meine Antwort angesehen? Glaubst du, mein Verständnis scheint richtig zu sein?
Ja, ich habe mir deine Antwort angesehen. Es scheint richtig zu sein, aber ich hatte das Gefühl, dass das "Lesen vor dem Schreiben" gerechtfertigt sein musste. Sie werden möglicherweise auch von einem modernen DRAM-Design überrascht sein, mit dem dieses Problem praktisch behoben wurde. Ich wollte keine alte Frage ausgraben, habe aber beim Öffnen nicht genau genug aufgepasst.
Es ist lange her, dass ich mir DRAMs angesehen habe, obwohl ich lange gedacht habe, dass in DRAM-Chips etwas Cache-Speicher enthalten sein sollte. Ich bin mir nicht sicher, ob ein Prozess zum Herstellen eines signifikanten Volumens an statischem Cache das Hinzufügen vieler Schritte erfordern würde, die ansonsten für das Herstellen des dynamischen Speicherteils des Chips nutzlos wären, aber es scheint, einen Cache zu haben, der eine ganze Zeile gleichzeitig abrufen könnte vorteilhaft. Andererseits wäre der physische Bus zwischen dem DRAM und dem Prozessor-Cache wahrscheinlich eine Grenze.
LEMUEL ADANE
2011-07-29 14:36:13 UTC
view on stackexchange narkive permalink

Beim Schreiben laden und entladen Sie den winzigen Kondensator wie Zellen im DRAM. Ein Kondensator entspricht einem Bit. Stellen Sie sich also vor, Sie haben 1 Gigabyte dieser Zellen. Das Laden und Entladen dauert länger als das Lesen dieser Zellen.

Das Lesen lädt und entlädt die Zellen um fast genau den gleichen Betrag. Wenn die Halbschiene bei 2,50 Volt liegt (Annahme zur Vereinfachung der Zahlen), wird eine programmierte "0" als 0,10 Volt oder weniger geschrieben und als 2,48 Volt zurückgelesen, während eine programmierte "1" als 4,90 Volt oder darüber und geschrieben wird zurücklesen als 2,52 Volt. Wenn Sie eine "1" in eine "0" ändern, muss die Kappe von 2,52 Volt auf 0,10 Volt entladen werden. Wenn Sie eine Null lesen und dann aktualisieren, damit sie wieder lesbar ist, muss sie von 2,48 auf 0,10 entladen werden. Kein großer Unterschied.


Diese Fragen und Antworten wurden automatisch aus der englischen Sprache übersetzt.Der ursprüngliche Inhalt ist auf stackexchange verfügbar. Wir danken ihm für die cc by-sa 3.0-Lizenz, unter der er vertrieben wird.
Loading...