Special über DDR RAM

DDR bis DDR5: Fünf Generationen RAM im direkten Vergleich. (computerbase)

Speicherbandbreite, Takte, Speicher Menge – ist mir klar. So ganz verstehe ich noch nicht, in wie weit geringe Latenzen beim Speicher wichtig sind. Und diese magische Grenze von 7 nm Latenz (Nanosekunden), woher die stammt.

1 Gedanke zu „Special über DDR RAM

  1. Was es mit dieser magischen Grenze auf sich hat weiß ich auch nicht, vielleicht ist es einfach die nächste „volle Nanosekunde“ die es zu unterbieten gilt.

    Warum Latenzen wichtig sind weiß ich schon, mal gucken ob ich’s auch erklären kann :)
    Die CPU bekommt sowohl die Instruktionen die sie verarbeitet (also „Lade Wert aus Speicher-Adresse X in Register1; Lade anderen Wert in Register2; Addiere Register1 und Register2 und packe Ergebnis in Register1; Schreibe Register1 an vorgegebene Adresse im Hauptspeicher“) als auch die Daten selbst die dort verarbeitet werden aus dem Hauptspeicher.
    Beziehungsweise, idealerweise liegen diese schon im CPU-Cache (der kleine Bereiche des Hauptspeichers auf denen man gerade arbeitet zwischenspeichert), aber wenn man Pech hat halt nicht und sie müssen aus dem Hauptspeicher geholt werden.

    https://www.7-cpu.com/cpu/Zen2.html nennt verschiedene Latenzen bei Zen2 (Ryzen 3800X): Zugriff auf den L1 Cache dauert 4-5 Takte, auf L2 12 Takte, auf L3 38 Takte und auf den Hauptspeicher 38 Takte + 66 Nanosekunden – die 38 Takte dürften sich dadurch ergeben, dass vom RAM erstmal in den L3 Cache geladen wird und die CPU dann über diesen auf den Speicher zugreift, diese 66 Nanosekunden müssten auch von der CAS-Latenz abhängen – wobei ich ehrlich gesagt grad nicht herausfinden konnte wie sie sich genau ergeben.
    RAM hat ja häufig noch mehr Latenz-Angaben als nur CAS/CL, z.B. tRAS und RAS-to-CAS (tRCD) (siehe https://de.wikipedia.org/wiki/Dynamic_Random_Access_Memory#Timingparameter_der_internen_Abl%C3%A4ufe).
    „4GHz“ bedeutet übrigens „4 Takte pro Nanosekunde“ oder halt „0,25ns pro Takt“.
    Bei 4GHz sind „38 Takte + 66 Nanosekunden“ also 302 Takte in denen der CPU-Kern auf Daten wartet statt zu rechnen – soweit ich weiß ist dies auch ein Grund dass Hyperthreading usw, also zwei virtuelle Kerne in einem echten, relativ gut funktioniert: Während ein virtueller Kern auf Daten wartet kann der andere rechnen.

    Wie wichtig die Latenz ist, hängt primär von zwei Faktoren ab:
    1. Wie groß ist der CPU Cache (je größer desto wahrscheinlicher ist es, dass der Speicher auf den man zugreifen will schon im Cache ist)
    2. Wie „Cache-Effizient“ ist der Code. Wenn Daten aus dem Hauptspeicher in den Cache geladen werden, wird eine ganze „Cache-Line“ (üblicherweise 64bytes) auf einmal übertragen.
    Außerdem versuchen sowohl die CPU selbst als auch Code-Compiler clever zu sein und zu raten welche Daten man wohl als nächstes braucht und die schonmal zu laden, bevor sie explizit angefragt werden (der Compiler kann dazu „prefetch“ Instruktionen generieren die der CPU sagen „lad diese Adressen schonmal in den Cache, wir brauchen sie vermutlich bald“).
    Dieses Raten funktioniert am besten, wenn man möglichst simple/gleichmäßige Zugriffsmuster hat.
    Das heißt, idealerweise organisiert man seine Daten so dass Speicher auf den man kurz hintereinander zugreifen muss auch hintereinander im Speicher liegt – und idealerweise sind diese Daten möglichst klein und enthalten möglichst wenig weniger relevante Daten dazwischen, die dann (wegen 64byte am Stück) mitgeladen aber dann garnicht genutzt werden und somit nur unnötig Platz im Cache verschwenden.

    Leider ist viel Code nicht so furchtbar Cache effizient (z.B. ist Objektorientierte Programmierung eher hinderlich) und profitiert (trotz immer cleveren Prefetching-Algorithmen in den CPUs) von möglichst geringen Speicherlatenzen.
    Wenn man sich aber mal Artikel anguckt die das testen, z.B. https://www.hardwaretimes.com/impact-of-memory-timings-on-gaming-performance-in-ryzen-3000-cpus-in-depth-benchmarks/ oder https://www.eurogamer.net/articles/digitalfoundry-2020-08-22-does-ram-speed-affect-fps-on-amd-ryzen-memory-frequency-vs-timings?page=2 sind die Unterschiede zwischen unterschiedlichen Speichertakten und -latenzen dann doch nicht soo dramatisch dass ich dafür überteuerten CL14 RAM oder so kaufen würde.

Schreibe einen Kommentar