Laufende Programme in Cache und Registern

2087
tony_sid

In meiner Klasse für Betriebssysteme wurde uns ein Bild gezeigt, das eine Hierarchie des Speichers zeigt, angefangen von den teuersten und schnellsten oben und den niedrigsten und langsamsten unten. Ganz oben waren Register und darunter Cache. Der Professor sagte, der beste Ort für die Ausführung von Programmen sei der Cache. Ich habe mich gefragt, warum Programme nicht in Registern ausgeführt werden können. Wie kann sich ein Programm auch in den Cache laden? Ist der Cache nicht etwas, das von der CPU gesteuert wird und automatisch ohne Software-Steuerung funktioniert?

0

4 Antworten auf die Frage

3
Rich Homolka

Dies ist eine sehr komplizierte Frage, erwarten Sie ein paar Antworten, da die Antworten anderer besser sind :)

Der Professor sagte, der beste Ort für die Ausführung von Programmen sei der Cache.

Denken Sie daran, dass der Cache viele Male teurer ist als normaler Arbeitsspeicher. Damals, als ein "großer" Computer 8 MB (keine Gigs, Megabytes) hatte, konnte man feststellen, dass alle Computer "Cache" waren (technisch gesehen handelt es sich dabei um einen speziellen RAM-Typ namens SRAM), aber sie waren teurer. Jetzt haben Sie Heimcomputer mit 4 GB Speicher, 4 GB SRAM, die mit dem Chip verkabelt sind, wären SEHR teuer. Außerdem haben Sie viele intelligente Leute, die mit Programmen und Compilern spielen, um den Cache optimal zu nutzen. Mit dem richtigen Caching-Algorithmus erhalten Sie 95% des Cache-Nutzens bei einem geringen Prozentsatz der Kosten. Natürlich sind die Vermutungen nicht immer richtig. Google 'Branchenvorhersage' für weitere Informationen.

Ich habe mich gefragt, warum Programme nicht in Registern ausgeführt werden können.

Register sind das, was eigentlich Daten und Adressen lädt und speichert. Betrachten Sie sie als Taxis. Sie können Dinge hin und her liefern, was sie liefern, sind Ihre Programmdaten und Adressen. Jeder Teil Ihres Programms, der ausgeführt wird, durchläuft ein Register.

Ich nehme an, Sie fragen, warum Sie nicht einfach aus den Registern laufen können. Ein Grund - es gibt so wenige von ihnen. Klassische Intel x86-Register werden in Bytes gezählt, die Programme werden jedoch in Megabytes (Gigabytes) angegeben. Sie wären eine recht reiche Person, wenn Sie einen Chip hätten, der MS-Word aus den Registern führen könnte.

Wie kann sich ein Programm auch in den Cache laden?

Das Programm nicht. Das Betriebssystem führt das Programm aus und verwendet den Memory Management Unit-Chip, um die Programmbereiche aus dem normalen RAM zu laden. Während dies der Fall ist, ist die MMU intelligent und legt einen Teil des Speichers auch in den Cache. Mit der Idee, dass ich sie gerade verwendet habe, muss ich sie möglicherweise bald wieder verwenden.

Ist der Cache nicht etwas, das von der CPU gesteuert wird und automatisch ohne Software-Steuerung funktioniert?

Ja, technisch gesehen ist der Speicherverwaltungschip nicht die CPU. Früher war dies ein separater Chip, aber jetzt ist er Teil des CPU-Blocks, um die Kommunikation zu beschleunigen.

2
yhw42

Ihre Programme wechseln sich jetzt abwechselnd mit den Registern und den Caches ab, wahrscheinlich unter der Anleitung Ihres Betriebssystem-Kernels.

Wenn Sie möchten, dass Ihr Programm eine Nummer nimmt und immer und immer wieder eine Nummer hinzufügt, können Sie dies wahrscheinlich in den Registern tun. Die Register sind sehr klein und speichern jeweils eine Zahl, und der übliche x86-Prozessor hat 16 davon (8 Ganzzahlen und 8 Fließpunkte).

Wenn Sie ein kleines Programm haben, das in den Cache passt (und das Betriebssystem es nicht zwischendurch austauschen muss, um andere Aufgaben zu erledigen), wird es ebenfalls aus dem Cache ausgeführt.

Die meisten Softwareprogramme sind heutzutage viel größer als der Cache. Sie möchten, dass Ihr Computer an vielen Dingen gleichzeitig arbeitet, z. B. das Aktualisieren der Uhr und das Indizieren Ihres Laufwerks oder das Erstellen dieser Webseite. Das bedeutet, dass viele Male pro Sekunde das nächste Element in den Cache eingelagert werden muss, damit es ein wenig bearbeitet werden kann (als Wechselkontext bezeichnet).

Sie können mehr über Caches und Register lesen .

1
heavyd

Ihre Programme werden von Registern ausgeführt! Sie laufen auch aus dem Cache. Alle diese Dinge helfen, Ihren Computer schneller laufen zu lassen. Der größte limitierende Faktor ist die Größe. Es gibt sehr begrenzte CPU-Register. Die typische x86-Maschine verfügt nur über 8 32-Bit-Register, in denen die CPU die Daten speichert, an denen sie arbeitet. Wie Sie wissen, ist der Zugriff auf das Register sehr schnell, jedoch können aufgrund der begrenzten Größe nur wenige Daten in den Registern gespeichert werden.

Der Cache ist insofern ähnlich, als er in der Größe begrenzt ist. Kleinere Caches (z. B. L1) werden zuerst von der CPU auf Daten geprüft. Wenn die Daten nicht in diesem Cache gefunden werden, werden nachfolgende Caches (L2, L3 usw.) geprüft. Jede Ebene des Caches wird schrittweise größer und der Zugriff wird langsamer. Wenn bis zum Ende der Überprüfung aller Caches die Daten noch nicht gefunden wurden, muss die CPU die Daten aus dem RAM ziehen.

Softwareanwendungen haben normalerweise keine explizite Kontrolle darüber, was in den Registern oder im Cache abgelegt wird, es sei denn, die Anwendung ist ein Low-Level-Treiber oder eine ähnliche Anwendung.

1
Paul A. Clayton

Ich habe mich gefragt, warum Programme nicht in Registern ausgeführt werden können.

Die meisten Befehlssatzarchitekturen (ISAs) unterstützen die Indirektion in Registern nicht. Das heißt, die Registeradressen werden als Konstanten in der Anweisung codiert. (Diese Einschränkung vereinfacht das Pipelining erheblich.)

Caches haben auch den Vorteil, dass sie mikroarchitektonische Merkmale sind, dh Größe und andere Merkmale sind nur für die Software in Bezug auf die Leistung sichtbar. Dies ermöglicht verschiedene Implementierungen einer ISA, verschiedene Größen zu verwenden, ua ohne Verlust der binären Kompatibilität, z. B. für unterschiedliche Leistungs- oder Anwendungsziele oder zur Anpassung von Änderungen in der Balance der Kompromisse aufgrund von Änderungen in der Fertigungstechnologie.

Mit zunehmender Anzahl sichtbarer Software-Register neigt der Nutzen des Compilermanagements außerdem relativ zu den Kosten für die Compilerkomplexität und die Kompilierungszeit, insbesondere für Programme mit komplexem Steuerungsfluss. Wenn mehrere Registerebenen verwendet werden (wie in Cray-1), um eine schnelle kleine Gruppe von Registern zu ermöglichen, wird die Compilerregisterzuordnungskomplexität erhöht.

Darüber hinaus wird die Größe eines Allzweckregisters typischerweise durch die Größe des Adressraums festgelegt, während die Größe einer Cachezeile (vergleichbarer Gegenstand für Caches) Kompromisse des Tag-Overheads und der erwarteten räumlichen Lokalität der Referenz einschließt (größere Cachezeilen) Daten in der Nähe vorab abrufen, aber die Bandbreite und der Speicher werden verschwendet, wenn die Daten nicht verwendet werden, während sie im Cache gespeichert sind beeinflusst durch die Zeilengröße), falsche Freigabe (wo ein Prozessor an einen Ort in der Nähe eines Ortes schreibt, den ein anderer Prozessor liest; große Cache-Zeilen führen zu falschen Kommunikationsabhängigkeiten) usw.

Wie kann sich ein Programm auch in den Cache laden? Ist der Cache nicht etwas, das von der CPU gesteuert wird und automatisch ohne Software-Steuerung funktioniert?

Der Cache wird von der CPU gesteuert, die Software kann jedoch Elemente explizit vorab in den Cache laden (und die Itanium-ISA unterstützt nicht temporale Cache-Level_N-Hinweise, damit die Hardware die Cache-Zuordnung und den Cache-Ersatz besser verwalten kann). Gewöhnliche Speicherzugriffe laden das angeforderte Element und die Elemente innerhalb der natürlich ausgerichteten Cachezeile in den L1-Cache, und diese Cachezeile bleibt normalerweise - mit Ausnahme von Kohärenz-Ungültigmachungen - so lange bestehen, bis die CPU sie durch eine andere Cachezeile ersetzt Daten, die von einem anderen - möglicherweise spekulativen - Speicherzugriff oder Hardware-Prefetch angefordert werden; so Software hat einige Fähigkeit, Cache - Inhalte zu verwalten.

Software kann auch das Wissen über bestimmte Merkmale eines Cache-Systems (Cache-bewusste Algorithmen und Datenstrukturen) oder die allgemeinen Eigenschaften, die die meisten Cache-Systeme ( Cache-Compadious Algorithmen ) gemeinsam nutzen, nutzen, um die Häufigkeit von Cache-Fehlern (wo Elemente abgerufen werden müssen) zu reduzieren aus dem Speicher oder einer Ebene des Cache-Speichers