Warum ist das Laden von Datenblöcken in den CPU-Cache eine effiziente Art der Verarbeitung?

515
user3324945

Ich weiß, dass das Laden von Anweisungen in den Cache die Verarbeitungsgeschwindigkeit insgesamt erhöht. Ist die Antwort auf die Frage mit Organisation und Geschwindigkeit verbunden?

-1
Kannst du etwas näher erläutern, was du willst? Da dies wie eine Programmierfrage aussieht, müssen Sie sich an einem Netzwerkstandort befinden. LPChip vor 10 Jahren 0
Ich betrachte nicht die Besonderheiten des Cache-Managements. Ich möchte die Antwort auf die Hauptfrage sehr allgemein user3324945 vor 10 Jahren 0
@ user3324945 - Die obige Frage ist nicht klar. Ich würde auch sagen, dass es tatsächlich sehr ineffizient ist, Datenblöcke zu verarbeiten. Ihre eigentliche Frage ist nicht so klar. Ramhound vor 10 Jahren 0
Meine Antwort auf ["Warum würden Computer Daten und Anweisungen aus dem Hauptspeicher in Blöcke zwischenspeichern, wenn dies bedeutet, dass ein einzelner Cache-Miss möglicherweise viel überschreibt" (http://stackoverflow.com/q/22446371) (eine geschlossene Frage) kann Ihre Frage ausreichend beantworten. Paul A. Clayton vor 9 Jahren 0

1 Antwort auf die Frage

-1
mrpete

Zuerst die "Brocken" Teil Ihrer Frage ...

Normalerweise geschieht die Speicherverwaltung mit Speicherfuttern. Es ist nicht sinnvoll, den Speicher Byte für Byte zu verwalten. Dies liegt daran, dass Sie zum Verwalten eines Speicherblocks eine Datenstruktur benötigen, die Informationen zu diesem Speicherblock enthält. Lassen Sie uns eine wilde Vermutung annehmen und sagen, dass diese Datenstruktur 24 Byte lang ist. Sie würden keine 24-Byte-Datenstruktur verwenden, um 1 Byte Speicher zu verwalten. Sie wollen "Wirtschaftlichkeit". Andernfalls bekommen Sie einen unglaublich hohen Aufwand. Stattdessen verwalten Sie 1 KByte / 32 KBytes / 1 MByte / was auch immer.

Wenn also Speicher verschoben wird (z. B. in die Auslagerungsdatei), erfolgt dies in Blöcken, und dieselbe Methode gilt für den Cache.

Um Wikipedia zu zitieren: "Daten werden zwischen Speicher und Cache in Blöcken fester Größe übertragen, die als Cache-Zeilen bezeichnet werden. Wenn eine Cache-Zeile aus dem Speicher in den Cache kopiert wird, wird ein Cache-Eintrag erstellt."

Der Cache-Eintrag ist ein Beispiel für die zuvor erwähnte Datenstruktur.

Denken Sie daran, dass Programmanweisungen, die in den Cache gelangen, auf dieselbe Art und Weise wie Daten eingelesen werden. Die oben genannten Wörter "Daten werden übertragen" bedeuten auch "Anweisungen werden übertragen".

Schauen Sie sich den Wikipedia-Eintrag unten an. Es hat mehr Infos.

http://en.wikipedia.org/wiki/CPU_cache

======

Und nun eine allgemeinere Antwort zum CPU-Cache.

Hauptsächlich geschieht die Beschleunigung, weil die CPU beim Zugriff auf den Cache die Anweisungen / Daten erhält. VIEL! schneller als beim Zugriff auf den Hauptspeicher.

Hier ist ein Beispiel. Sie haben eine Schleife in einem Programm codiert. Beim ersten Durchlauf wird dieser Speicherabschnitt in den Cache geladen. Sie beginnen am Anfang der Schleife und gelangen schließlich zum Ende der Schleife. Dann geht es wieder nach oben. Angenommen, die gesamte Schleife passt in den Cache (Normalzustand), wenn sich diese Anweisungen zum zweiten Mal um den Cache befinden, und es sind keine weiteren Befehlsabrufe für diese Schleife erforderlich. Das beschleunigt die Dinge wirklich. Wenn die Schleife beendet ist, wird sie im Cache möglicherweise von einem anderen Abschnitt des Programms, der ausgeführt werden muss, überschrieben.

Ähnliches gilt für Daten. Wenn eine Struktur / Gruppe von Variablen / etc. häufig referenziert oder aktualisiert wird, bleibt sie für einige Zeit im Cache. Schließlich wird der Speicherplatz im Datencache an eine andere Struktur / Gruppe von Variablen usw. übergeben, da auf dieses Programm häufig zugegriffen wird.