Ist in L1, L2-Cache und DRAM der sequentielle Zugriff schneller als der Direktzugriff?

1457
Binary

Ist in L1, L2-Cache und DRAM der sequentielle Zugriff schneller als der Direktzugriff, weil Read-Ahead möglich ist? Ich weiß, dass bei HDDs dies natürlich um Größenordnungen schneller ist.

1

1 Antwort auf die Frage

2
Psycogeek

JA, manche gleich, aber nicht genau.

Laut Handbuch für den Verarbeiter :-)
http://www.intel.com/content/dam/doc/manual/64-ia-32-architectures-optimization-manual.pdf

Es gibt spezielle Hardware-Prefetching-Vorgänge, und ein Programmierer kann ihm einen Prefetch-Vorgang mitteilen. Außerdem gibt es Möglichkeiten, die Daten in Blockgröße zu verwenden, von denen ein bewusster Programmierer Vorteile ziehen kann. Die gleiche Hardware- oder Softwaremethode, die geringfügig falsch ausgeführt wurde, kann dazu führen, dass der Prefetch immer und immer wieder geworfen wird, und diese Faktoren variieren für verschiedene Prozessoren.

Das Verschieben von Daten in die höheren Ebenen wird vorausgesetzt, dass dies erforderlich ist (z. B. Read-Ahead). Die Daten sind dort vorhanden, da sie innerhalb der Blockgröße liegen, in die sie sich in diese Ebenen bewegen (eine Sequenz kann hilfreich sein).
Der Prozessor, der weiß, welcher Befehlssatz er dort gespeichert hat, oder die Liste der zu erledigenden Aufgaben, bereitet die Daten auf.

2.1.5.4 Daten-Prefetching Daten können durch Software-Prefetching, Hardware-Prefetching oder eine beliebige Kombination der beiden Daten spekulativ in den L1-DCache geladen werden. . . .

-

Streamer: Dieser Prefetcher überwacht Leseanforderungen aus dem L1-Cache auf aufsteigende und absteigende Adressenfolgen. Zu den überwachten Leseanforderungen gehören L1-DCache-Anforderungen, die durch Lade- und Speicheroperationen und durch die Hardware-Prefetchers initiiert werden, und L1-ICache-Anforderungen für den Code-Abruf. Wenn ein Vorwärts- oder Rückwärtsstrom von Anforderungen erkannt wird, werden die erwarteten Cache-Zeilen vorabgerufen. Die abgerufenen Cache-Zeilen müssen sich auf derselben 4K-Seite befinden. . . .

-

Wide Dynamic Execution  Smart Memory Access - prefetches data  Branch Prediction Unit  Instruction Fetch Unit  Instruction PreDecode  

Die Liste wird mit vielen Funktionen fortgesetzt, die weiterdenken.

Beginnen Sie auf Seite 60 des verknüpften Dokuments.

https://stackoverflow.com/questions/1922249/c-cache-aware-programming Weitere PDF-Dateien sind bei Stack Overflow verlinkt, und ich bin sicher, weitere Informationen dazu gibt es.

Die Daten dazu und die Technik sind zu lang, um hier zu posten, und all das "Wie funktioniert das in der Realität" von den Programmierern wäre auch zu lang. Nicht nur, dass ich es kaum verstehe. Nach dem Lesen dieser Informationen (und der Programmiererdaten) ist es kein Wunder, dass eine Software fast das Gleiche macht, 50-mal schneller sein kann als eine andere. Die Dinge könnten akribisch durchgeführt und getestet und erneut getestet werden, um die ultimative Optimierung zu erreichen, oder sie könnten vermisse ein paar Dinge und sei normal.

& NO, RAM ist vollständig wahlfreier Zugriff, es gibt nur winzige Mengen an Latenz, es ist "Ram", den eine Festplatte für Read-Ahead-Aktionen verwendet und Burst-Transfers um ein Vielfaches schneller sind, als von den Platten gelesen werden können . Auf Festplatten ist die Sequentialität äußerst wichtig, da die Kopfbewegung Zeit erfordert und dann keine Daten vom Plattenteller abgezogen werden. Nachdem der Kopf am Ort angekommen ist, muss er warten, bis die Daten in der Rotation auftauchen.
Bei Vorauslesen der Festplatte werden möglicherweise Daten mit derselben Rotation abgerufen, was viele Millisekunden Zeit spart.

Es könnte eine riesige Strecke in der Vorstellung sein :-) Angenommen, es gibt etwas Ähnliches an der 2.

DRAM ist nicht * perfekt * Direktzugriff, ein Lesen von einer offenen DRAM-Seite / Zeile ist schneller als wenn die Bank keine Seite / Zeile offen hat (da ein Zeile ACTIVATE-Befehl von der Bank verarbeitet werden muss), viel weniger, wenn eine andere Seite / Die Zeile ist in derselben DRAM-Bank geöffnet (da diese Bank einen PRECHARGE-Befehl verarbeiten muss, bevor der Zeilenbefehl ACTIVATE eine neue Seite öffnen kann). Paul A. Clayton vor 9 Jahren 3