DarkSoul schrieb:
Und wo kommt dann der Geschwindigkeitsvorteil her, wenn sich der Inhalt nicht auf 2 Riegel verteilt?
Auf wenn das RAM in DRAM für "Random Access Memory" steht, ist der Zugriff auf DRAMs nicht ganz so "wahlfrei" wie man es sich theoretisch wünschen würde. Um auf eine bestimme Speicheraddresse zuzugreifen, muss im schlechtesten Fall eine recht komplexer Zyklus durchlaufen werden:
- Row (Zeile) aktivieren. Dabei werden alle Speicherzellen der Zeile in einen RAM internen Pufferspeicher ausgelesen. Leider zerstört diese Vorgang den Inhalt der Zeile
- Column(Spalte) schreiben oder lesen. Dabei wird aus der Zeile eine Speicheraddresse ausgewählt und an/vom Speichercontroller übertragen
- Row zurückschreiben in die DRAM Speichermatrix, dabei wird der im ersten Schritt zerstörte Inhalt wiederhergestellt
Diese ganze Zyklus ist, wenn man ihn komplett durchführt, recht langsam, ungefähr 32ns, eine Ewigkeit für moderne Prozessoren. Daher hat man schon vor langem angefangen, dass zu optimieren. Man hält dafür eine Zeile solange wie möglich "offen", greift dann nur noch auf die Spalten zu, und liest außerdem nicht eine einzelne Adresse, sondern eine Folge von Adressen, durch einen sogenannten "Burst". Das geschieht dann mit dem Speichertakt (bzw. bei DDR (Double Data Rate) mit dem doppelten Speichertakt). Daher ist die Cache Latency (CL) zusammen mit dem Speichertakt der wichtigste Wert bei der Klassifizierung von DRAMs,
Eine 3200CL16 Modul braucht 16 Takte um das erste Word eine Spalte zu liefern, dann folgen die weiteren mit eben 3200MT/s dahinter. Erleichtert wird das ganze dadurch, dass die CPU niemals direkt auf das DRAM zugreift, sondern immer über die Caches. Es wird dabei immer mindestens eine Cacheline geschrieben oder gelesen. Eine Cacheline ist meist 64 Bytes groß, das sind 512 Bits. Bei einem 64Bit breiten Modul ist ein Burst mithin mindestens 8 Zyklen lang. Durch DDR sind das 4 Speichertakte. Daran sieht man auch, dass die Wartezeit (CL=16) 4 mal so lang wie die Übertragung ist.
"Teuer" wird es immer dann, wenn man die Row wechseln muss. Daher haben moderne RAMS mehrere Bänke, meist 4, dadurch kann man bis zu 4 Reihen gleichzeitig offen halten. Wenn man dann noch mehrere "Ranks" hat, kann man noch mehr verteilen. Hier muss man beachten, dass all diese Zeilen, Spalten, Bänke und Ranks festen Bits der Speicheraddresse zugordnet sind, d.h. die Frage ob einer neue Aktivierung erforderlich ist, ergibt sich aus dem Zugriff von alleine.
Dual Channel heißt einfach, dass man zwei Speichercontroller hat, die komplett unabhängig voneinander arbeiten. Aber auch hier ist die Adresszuordnung fest eingestellt, man kann sich also nicht aussuchen, ob Kanal 1 oder 2 verwendet wird. Meist werden die beiden Kanäle "interleaved" auf abwechselnden Adressen verwendet, d.h. z.B. Adresse 0-7 liegt in Bank 0, Adresse 8-15 in Bank 1, dann 16-23 wieder in Bank 0, usw.
Achtung: Das ist nur als Beispiel zu verstehen, wie das Channel Interleaving in aktuellen Intel oder AMD Prozessoren aussieht, habe ich jetzt nicht geprüft.
Um die Ausgangsfrage zu beantworten: Durch die Verschränkung der Adressen wird der adressierbare Speicher gleichmäßig auf die RAM Module, Bänke und Kanäle verteilt. Dadurch wird sichergestellt, das, zumindest im statistischen Mittel, die die Hardware gleichmäßig ausgelastet ist.
DarkSoul schrieb:
Ich glaube nicht, dass Windows die Riegel wahlweise im Single oder Dual Channel ansteuern kann, das muss doch vom BIOS vorgegeben werden und Windows setzt da nur drauf auf. Hat jemand eine Quelle dazu?
All das oben beschriebene wird direkt von der Hardware ausgeführt. Windows hat da gar nichts mit zu tun, das "merkt" davon noch nicht mal was. Das BIOS wirkt insofern mit, als dass es die Konfiguration der Hardware (z.B. Memory Timings) übernimmt.
Es gibt nicht "eine" Quelle die das alles beschreibt.
Manches steht die Datasheets der Prozessoren, bei Intel kommt man da über ark.intel.com ganz einfach ran, bei AMD ist es leider nicht so leicht. Von RAM Herstellern wie Micron gibt es auch Datenblätter. Anderes lernt man in Büchern zu Computerarchitektur.
Hier ist ein netter Artikel zu Memory Timings:
https://www.gamersnexus.net/guides/3333-memory-timings-defined-cas-latency-trcd-trp-tras