webentwicklung-frage-antwort-db.com.de

warum werden separate icache und dcache benötigt

Kann jemand bitte erklären, was wir durch einen separaten Befehls-Cache und einen Daten-Cache gewinnen können. Jeder Hinweis auf einen guten Link, der dies erklärt, wird ebenfalls geschätzt.

20
Venom

Der Hauptgrund ist: Leistung. Ein weiterer Grund ist der Stromverbrauch.

Separate dCache und iCache ermöglichen das parallele Abrufen von Anweisungen und Daten.

Anweisungen und Daten haben unterschiedliche Zugriffsmuster.

Schreibvorgänge in iCache sind selten. CPU-Entwickler optimieren den iCache und die CPU-Architektur basierend auf der Annahme, dass Codeänderungen selten sind. Im AMD Software Optimization Guide für 10h- und 12h-Prozessoren } heißt es:

Die Vordecodierung beginnt, wenn der L1-Befehls-Cache gefüllt ist. Predecode-Informationen werden neben dem Befehlscache generiert und gespeichert.

Die Intel Nehalem-CPU verfügt über einen Loopback-Puffer. Zusätzlich verfügt die Sandy Bridge-CPU über einen µop-Cache Die Mikroarchitektur von Intel, AMD und VIA CPUs . Beachten Sie, dass es sich hierbei um Features handelt, die sich auf Code beziehen, und in Bezug auf Daten keine direkten Gegenstücke haben. Sie wirken sich positiv auf die Leistung aus und da Intel CPU-Entwickler die "Einführung" von Funktionen "verbietet", die zu einem übermäßigen Anstieg des Stromverbrauchs führen, profitieren sie vermutlich auch vom gesamten Stromverbrauch.

Die meisten CPUs verfügen über ein Datenweiterleitungsnetzwerk (Speicher für Lastweiterleitung). Es gibt kein "Store to Load Forwarding" in Bezug auf Code, einfach weil Code viel seltener als Daten geändert wird.

Code zeigt andere Muster als Daten.

Die meisten CPUs heute verfügen jedoch über einen einheitlichen L2-Cache, der sowohl Code als auch Daten enthält. Der Grund dafür ist, dass separate L2I- und L2D-Caches das Transistorbudget sinnlos verbrauchen würden, ohne messbare Leistungsgewinne zu erzielen.

(Sicher ist der Grund für die Trennung von iCache und dCache nicht die Komplexität reduziert, denn wenn der Grund geringer wäre, würde es keine Pipelines in den aktuellen CPU-Designs geben. Eine CPU mit Pipelining ist dies komplexer als eine CPU ohne Pipelining. Wir möchten die Komplexität erhöhen. Fakt ist: Der nächste CPU-Entwurf ist (normalerweise) komplexer als der vorherige Entwurf.)

19
user811773

Es hängt davon ab, mit welchen Funktionseinheiten der CPU in erster Linie auf diesen Cache zugegriffen wird. Da die ALU und die FPU auf den Datencache zugreifen, auf den der Decodierer und der Scheduler auf den Befehlscache zugreifen, und das Pipelining häufig die gleichzeitige Arbeit des Befehlsprozessors und der Ausführungseinheit ermöglicht, würde die Verwendung eines einzelnen Caches einen Konflikt zwischen diesen beiden Komponenten verursachen. Durch das Trennen verlieren wir etwas Flexibilität und erhalten die Möglichkeit, dass diese beiden Hauptkomponenten des Prozessors gleichzeitig Daten aus dem Cache abrufen.

5
Dan

Ein Grund dafür ist die reduzierte Komplexität. Sie können einen gemeinsam genutzten Cache implementieren, der mehrere Zeilen gleichzeitig oder asynchron abrufen kann (siehe Hit-Under-Miss). Dies macht den Cache-Controller jedoch viel komplizierter.

Ein weiterer Grund ist die Ausführungsstabilität. Wenn Sie über eine bekannte Menge an icache und dcache verfügen, kann das Zwischenspeichern von Daten das Cache-System nicht an Anweisungen hindern, die in einem vereinfachten, gemeinsam genutzten Cache auftreten können.

Und wie Dan feststellte, erleichtert die Trennung die Pipelines, ohne die Komplexität des Controllers zu erhöhen.

2
rsaxvc

Da die MEM- und FETCH-Stufen des Prozessors gleichzeitig auf den L1-Cache zugreifen können (angenommen, kombiniert), kann es zu Konflikten kommen, denen die Priorität eingeräumt wird (dies kann zu einem Leistungsengpass werden). Eine Möglichkeit, dies zu beheben, besteht darin, einen L1-Cache mit zwei Leseports zu erstellen. Wenn Sie jedoch die Anzahl der Ports erhöhen, wird der Cache-Bereich quadratisch vergrößert und der Stromverbrauch erhöht. 

Wenn der L1-Cache der kombinierte ist, besteht außerdem die Möglichkeit, dass einige Datenblöcke Blöcke ersetzen, die wichtige Anweisungen enthalten und auf die zugegriffen werden kann. Diese Vertreibungen und der darauf folgende Cache-Fehler können die Gesamtleistung beeinträchtigen.

Die meiste Zeit holt der Prozessor die Befehle sequenziell ab (einige Ausnahmen wie gezielte Ziele, Sprünge usw.), wodurch der Befehls-Cache mehr räumliche Lokalität und somit eine gute Trefferquote bietet. Wie in anderen Antworten erwähnt, gibt es auch kaum Schreibvorgänge in den ICache (selbstmodifizierender Code wie JIT-Compiler). So können separate Icache- und Dcache-Designs unter Berücksichtigung ihrer Zugriffsmuster und anderer Komponenten wie Laden/Speichern von Warteschlangen, Schreibpuffern usw. optimiert werden.

1
user1669844

Es gibt im Allgemeinen zwei Arten von Architekturen: 1. von neuman-Architektur und 2. die Harward-Architektur. Die Harward-Architektur verwendet zwei separate Speicher. Weitere Informationen hierzu finden Sie auf dieser Arm-Seite http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.faqs/ka3839.html

0
programer