Was ist ein Register?

Wenn Sie sich nicht besonders für Computer interessieren, wird Ihnen die Annahme verziehen, dass die einzigen Formen des Speichers in einem Computer die Festplatte und der Arbeitsspeicher waren. Diejenigen unter Ihnen, die sich für Computer interessieren, wissen wahrscheinlich, dass dies nicht der Fall ist und dass die Die CPU verfügt auch über eine Reihe von Caches, mit denen Daten aus dem RAM zwischengespeichert werden, damit die CPU darauf zugreifen kann Schneller. All dies sind beworbene Funktionen, vor allem, weil die Geschwindigkeit und/oder Kapazität ein anständiges Verkaufsargument ist und sich im Allgemeinen auf das Leistungsniveau auswirkt.

Es gibt jedoch tatsächlich eine andere Speicherebene. So sehr Sie vielleicht denken, dass sich der L1-Cache so nah wie möglich am eigentlichen Verarbeitungskern befindet, gibt es eine weitere höhere Ebene in der Speicherhierarchie. Dies sind die CPU-Register. Der Grund, warum diese nicht wirklich beworben oder erwähnt werden, ist, dass sie überhaupt nicht wirklich geändert werden. Technisch gesehen könnten sie es sein, aber die Anzahl und Größe der Register ist tatsächlich grundlegend für die Architektur. Das bedeutet, dass alle x86-64-CPUs die gleiche Anzahl von Registern haben. Sie werden nicht vermarktet, weil sie kein konkurrierender Punkt sind.

Was macht ein Register?

Ein Register ist ein schnell verfügbarer Speicherplatz für den Prozessor. Der Zugriff auf ein Register erfolgt sofort ohne Latenz, während selbst der L1-Cache in modernen CPUs eine Latenz von etwa 4-5 Zyklen aufweist. Diese Unmittelbarkeit des Zugriffs deutet auf den Anwendungsfall für Register hin. Register werden verwendet, um die Befehle zu speichern, die aktiv von der CPU verarbeitet werden. Sie speichern auch Datenpunkte, die verarbeitet werden sollen. Einige Register sind für allgemeine Zwecke, während andere einen sehr spezifischen Zweck haben. Ein Beispiel für ein Spezialregister wäre der Programmzähler, in dem der Prozessor seine Position in seiner Programmsequenz verfolgt.

Viele Register gelten als für Benutzer zugänglich. Dies bedeutet jedoch nicht, dass der Benutzer eines Computers wählen kann, welchen Wert er eingeben möchte. Dies bedeutet, dass die laufende Software Daten spezifizieren kann, die in diese Register geladen werden sollen. Eine kleinere Anzahl von Registern ist intern, was bedeutet, dass Software sie überhaupt nicht ansprechen kann. Das Befehlsregister, das den gerade ausgeführten Befehl speichert, ist ein Beispiel für ein internes Register.

Umbenennung registrieren

Während eine CPU-Architektur möglicherweise nur eine einzige Konfiguration von Registern zulässt, gibt es tatsächlich eine kleine Nuance. Alle modernen CPUs verwenden die Registerumbenennung. Dies ist eine Technik, bei der Sie mehr physikalische Register haben und diese verwenden können, um Daten vorab zu laden oder Daten zu speichern, die sich auf einen Befehl außerhalb der Reihenfolge beziehen, der andernfalls überschrieben worden wäre. Wenn die CPU an den Punkt gelangt, an dem sie die Daten in den zusätzlichen Registern benötigt, benennt sie sie einfach um, sodass sie adressierbar sind, und macht gleichzeitig ein zuvor adressierbares Register unadressierbar.

Der Prozess der Registerumbenennung kann für die Ausführung außerhalb der Reihenfolge sehr hilfreich sein. Wenn beispielsweise eine Speicherstelle so programmiert ist, dass sie gelesen und dann beschrieben wird, und die Anweisungen in dieser Reihenfolge ausgeführt wurden, ist dies in Ordnung. Wenn jedoch die Befehle neu geordnet werden, um zuerst das Schreiben auszuführen, würde der Lesebefehl den falschen Wert erhalten. Um dies zu verhindern, wird der zu lesende Originalwert in einem unbenutzten Register gespeichert, das dann umbenannt wird, wenn der entsprechende Befehl bearbeitet wird.

Fazit

Register sind die höchste Stufe in der Speicherhierarchie. Sie sind der einzige Teil, der direkt von der CPU adressiert werden kann und keine Latenz hat. Register werden verwendet, um die Daten zu speichern, die aktiv von der CPU ausgeführt werden. Sie werden auch verwendet, um andere Datenpunkte wie den Programmzähler zu speichern, der verfolgt, welche Anweisung als nächste ausgeführt wird. Bei der x86-64-Architektur mit 16 Mehrzweckregistern und entweder 16 oder 32 Gleitkommaregistern ist eine sehr begrenzte Anzahl von Registern verfügbar, je nachdem, ob AVX-512 unterstützt wird.