Prozessoren verwenden sowohl Daten- als auch Befehls-Caches, um die Anzahl langsamer Zugriffe auf den Hauptspeicher zu reduzieren. Obwohl mir klar ist, dass der Zweck des Datencaches darin besteht, häufig verwendete Datenelemente (z. B. Elemente in einem Array oder innerhalb einer Schleife) zu speichern, kann ich nicht sehen, was genau der Befehlscache speichert, um die Speicherzugriffszeiten zu verkürzen.
In der obigen Abbildung haben wir ein Beispiel für einen „addi“-Befehl, der einen konstanten Wert zu dem im Mehrzweckregister „r2“ gespeicherten Wert addiert und das Ergebnis in das Mehrzweckregister „r1“ schreibt.
Was genau wird nach Ausführung dieser Anweisung im Cache gespeichert?
Vielen Dank im Voraus.
Es speichert buchstäblich Maschinencodezeilen aus dem Programmspeicher (auch bekannt als die gesamte Anweisung, die Sie in Ihrem ursprünglichen Post schreiben.
Die Tatsache, dass Sie sogar das "Speichern aller möglichen Opcodes im Cache" diskutieren, weist auf ein tieferes Missverständnis hin. Es hat keine Bedeutung, über das Speichern aller möglichen Operationscodes im Cache (oder einem anderen Speicher) zu sprechen. Alle möglichen Opcodes, die der Prozessor ausführen kann, sind in der Logikschaltung des Prozessors fest verdrahtet. Sie werden nirgendwo "gespeichert".
Der Anweisungs-Cache speichert die zuletzt verwendeten Anweisungen und ihre Adressen, sodass eine Anweisung, wenn sie wiederholt werden muss, nicht aus dem Hauptspeicher abgerufen werden muss – dies geht viel schneller.
Wenn beispielsweise eine Schleife zum ersten Mal ausgeführt wird, werden die Anweisungen aus dem Hauptspeicher abgerufen und gleichzeitig in den Cache gestellt. Bei nachfolgenden Iterationen der Schleife können die Befehle dann schnell aus dem schnellen Cache-Speicher abgerufen werden.
Die Adressen werden im Cache zusammen mit Informationen gespeichert, die angeben, ob der Cache auf dem neuesten Stand ist, sodass die CPU-Steuerung weiß, ob sie die zwischengespeicherten Anweisungen verwenden kann oder zum Hauptspeicher gehen muss.
Der Instruktionscache speichert die einzelnen Instruktionen für die CPU des aktuell ausgeführten Programms. Es ist das Programm selbst. Der Hauptspeicher ist oft zu langsam (oder hat zu viel Latenz), um die CPU jedes Mal mit der nächsten Anweisung versorgen zu können, wenn sie für eine bereit ist. Aus diesem Grund wird ein schneller Cache in der Nähe der CPU verwendet, das ist der Befehls-Cache.
Dmitri Grigorjew