Ist der sequentielle Zugriff im L1- und L2-Cache sowie im DRAM schneller als der wahlfreie Zugriff?

Ist der sequentielle Zugriff im L1- und L2-Cache sowie im DRAM schneller als der wahlfreie Zugriff?

Ist der sequentielle Zugriff im L1-, L2-Cache und DRAM aufgrund der Möglichkeit, Read-Ahead einzurichten, schneller als der wahlfreie Zugriff? Ich weiß, dass dies bei Festplatten natürlich um Größenordnungen schneller ist.

Antwort1

JA, einige gleich, aber nicht genau gleich.

Laut Handbuch des Prozessors :-)
http://www.intel.com/content/dam/doc/manual/64-ia-32-architectures-optimization-manual.pdf

Es gibt spezielles Hardware-Prefetching, und ein Programmierer kann es anweisen, es vorzuladen. Außerdem gibt es Möglichkeiten, wie es mit Datenblockgröße arbeitet, von denen ein aufmerksamer Programmierer profitieren könnte. Außerdem können dieselben Hardware- oder Softwaremethoden, die leicht falsch ausgeführt werden, dazu führen, dass das Prefetching immer wieder verworfen wird, und solche Dinge variieren bei verschiedenen Prozessoren.

Daten werden in die höheren Ebenen verschoben, vorausgesetzt, sie werden benötigt (z. B. Vorauslesen), und die Daten sind dort, weil sie innerhalb der Blockgröße liegen, die sie in diese Ebenen verschieben (Sequenz kann hilfreich sein).
Der Prozessor weiß, welchen Befehlssatz er dort angegeben hat oder welche Aufgaben er ausführen wird, und bereitet die Daten vor.

2.1.5.4 Daten-Prefetching Daten können spekulativ in den L1-DCache geladen werden, indem Software-Prefetching, Hardware-Prefetching oder eine beliebige Kombination aus beidem verwendet wird. . . .

--

Streamer: Dieser Prefetcher überwacht Lese-Anfragen aus dem L1-Cache auf aufsteigende und absteigende Adressfolgen. Zu den überwachten Lese-Anfragen zählen L1-DCache-Anfragen, die durch Lade- und Speichervorgänge und durch die Hardware-Prefetcher initiiert werden, sowie L1-ICache-Anfragen zum Abrufen von Code. Wenn ein Vorwärts- oder Rückwärtsstrom von Anfragen erkannt wird, werden die erwarteten Cache-Zeilen vorab abgerufen. Vorab abgerufene 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 mit den vielen zukunftsweisenden Funktionen ist endlos.

Beginnen Sie auf Seite 60 des verlinkten Dokuments.

https://stackoverflow.com/questions/1922249/c-cache-aware-programming Bei Stack Overflow sind Links zu weiteren PDFs verfügbar, und ich bin sicher, dass es dort noch viel mehr Informationen dazu gibt.

Die Daten dazu und zur Technik sind zu lang, um sie hier zu veröffentlichen, und all das „Wie das in der Realität funktioniert“ von den Programmierern wäre auch zu lang. Nicht nur, dass ich es kaum verstehe. Nachdem ich das gelesen habe (und die Informationen für Programmierer), ist es kein Wunder, dass eine Software, die fast dasselbe tut, 50-mal schneller sein kann als eine andere. Die Dinge könnten sorgfältig gemacht und getestet und erneut getestet werden, um die ultimative Optimierung zu erreichen, oder sie könnten ein paar Dinge übersehen und trotzdem normal sein.

undNEIN, RAM ist vollständig wahlfrei zugänglich, es gibt nur winzige Latenzzeiten, es ist „RAM“, den eine Festplatte für vorausschauende Lesevorgänge verwendet, und Burst-Übertragungen sind um ein Vielfaches schneller, als von den Platten gelesen werden kann. Sequenzialität ist bei Festplatten enorm wichtig, da die Kopfbewegung Zeit braucht und dann keine Daten von der Platte zieht. Nachdem der Kopf an der Position angekommen ist, muss er warten, bis die Daten in der Rotation auftauchen.
Mit vorausschauendem Lesen der Festplatte kann sie Daten in derselben Rotation ziehen und so viele Millisekunden Zeit sparen.

Es erfordert vielleicht sehr viel Vorstellungskraft :-), anzunehmen, dass es zwischen den beiden irgendetwas Ähnliches gibt.

verwandte Informationen