Das Wort Banking wird bei der Anwendung auf Register auf zwei verschiedene Arten verwendet.
Bankregister für die Interrupt-Behandlung
Der Sinn, mit dem sich die StackOverflow-Frage befasst, ähnelt der Verwendung beim (Speicher-) Bank-Switching (das von einigen 8-Bit- und 16-Bit-Prozessoren verwendet wird) in der Funktion . Die Namen einer Registersammlung werden einer anderen physischen Registersammlung zugeordnet. ARMv7 stellt eine zusätzliche Bank für 7 seiner 16 GPRs und fünf weitere Bänke für das Stapelzeigerregister und das Verknüpfungsregister bereit (ARM verwendet das Verknüpfungsregister, um den PC zu speichern, der für die Rückkehr vom Interrupt verwendet werden soll). Itanium bietet eine zusätzliche Bank für 16 seiner 31 statischen GPRs. (MIPS stellt ganze Sätze von 31 GPRs bereit, die als "Schattenregistersätze" bezeichnet werden.)
Im Gegensatz zur Speicherbankumschaltung besteht der Hauptzweck dieser Art von Registerbanking (in der Regel) nicht darin, den adressierbaren Speicher zu erweitern, sondern eine schnellere Interrupt-Verarbeitung bereitzustellen, indem das Speichern von Registerwerten, das Laden von vom Interrupt-Handler verwendeten Werten und das Wiederherstellen des Originals vermieden werden Werte registrieren und die Interrupt-Behandlung vereinfachen.
(Wenn der Stapel der Anwendung zum Speichern des Registerzustands verwendet wird, besteht die Möglichkeit, dass der für diesen Stapel zugewiesene Speicher überläuft und eine Ausnahme generiert wird, die das Speichern des Zustands auf irgendeine Weise verarbeiten muss Eskalierte die Berechtigung des Interrupt-Handlers, aber nicht von der Anwendung, und die Anwendung schreibt effektiv auf eine Seite, für die sie keine Schreibberechtigung besitzt. Einige ABIs haben dieses Problem vermieden, indem sie ein oder mehrere Register als über Interrupts hinweg flüchtig definiert haben Handler zum Laden eines Zeigers zum Speichern des Status, ohne den Anwendungsstatus zu beeinträchtigen
(Es wurde vorgeschlagen, solche Registerbänke als feste Fenster zu verwenden, um die Anzahl der verfügbaren Register zu erhöhen, z. B. "Erhöhen der Anzahl der effektiven Register in einem Prozessor mit geringem Stromverbrauch unter Verwendung einer Fensterregisterdatei", Rajiv A. Ravindran et al., 2003. Man könnte auch eine Ähnlichkeit mit dem Register-Stack bemerken, der verwendet wird, um den Overhead beim Speichern und Wiederherstellen von Registern für Funktionsaufrufe wie in Itanium und SPARC [der den Begriff "Registerfenster" verwendet] zu vermeiden, obwohl diese Mechanismen typischerweise die Registernamen verschieben, anstatt sie zu vertauschen aus.)
In Bezug auf die Hardware können Bankregister implementiert werden, indem die Register beim Befehlsdecodieren umbenannt werden. Für das relativ komplexe Bankensystem von ARM wäre dies wahrscheinlich der bevorzugte Mechanismus. Für ein einfacheres Bankensystem wie das von Itanium verwendete mit einer einzelnen zusätzlichen Bank mit einer Potenz von zwei Registern kann es sinnvoll sein, die Umbenennung in die Indexierung der Registerdatei selbst einzubeziehen. (Dies wäre natürlich nicht kompatibel mit bestimmten Umbenennungsarten, die zur Unterstützung der Ausführung von Fehlern in der Reihenfolge verwendet werden.)
Indem erkannt wird, dass nicht gleichzeitig auf verschiedene Banken zugegriffen wird, kann durch eine clevere Optimierung mit diesem Mechanismus der (drahtgebundene) Flächenaufwand einer hoch portierten Registerdatei durch Verwendung von "3D-Registern" verringert werden. (Diese Technik wurde im Zusammenhang mit den SPARC-Registerfenstern "Eine dreidimensionale Registerdatei für superskalare Prozessoren", Tremblay et al., 1995, vorgeschlagen, und eine Variante wurde von Intel für SoEMT verwendet - "The Multi-Threaded, Parity-Protected" 128-Wort-Registerdateien auf einem Dual-Core-Prozessor der Itanium-Familie ", Fetzer et al., 2005.)
Banking zur Erhöhung der Anzahl möglicher Zugriffe
Der zweite Sinn, in dem der Begriff Banking für Register verwendet wird, bezieht sich auf die Aufteilung eines Registersatzes in Gruppen (Banken), auf die jeweils parallel zugegriffen werden kann. Durch die Verwendung von vier Bänken wird die maximale Anzahl der unterstützten Zugriffe um den Faktor vier erhöht, sodass jede Bank bei einer bestimmten effektiven Zugriffsanzahl weniger Zugriffsports unterstützen kann (Verringerung des Flächen- und Energieverbrauchs). In dem Maße, in dem die Zugriffe in einem bestimmten Zyklus nicht gleichmäßig auf die Banken verteilt sind, wird die maximale Anzahl der Zugriffe nicht erreicht. Selbst bei einer großen Anzahl von Banken im Verhältnis zur gewünschten Zugriffsanzahl können Bankenkonflikte im schlimmsten Fall die tatsächliche Zugriffsanzahl auf die Anzahl der von einer einzelnen Bank bereitgestellten Ports beschränken.
Es gab viele wissenschaftliche Artikel über Registerdateien ( Google Scholar-Suche)), und es wurden verschiedene allgemeine Techniken vorgeschlagen, um die Auswirkungen von Bankenkonflikten zu verringern. Die naheliegendste Methode besteht darin, Anweisungen zu puffern (wie dies bei der Ausführung außerhalb der Reihenfolge der Fall ist), um eine statistische Mittelung von Bankenkonflikten zu erhalten. Es ist auch möglich, einen Registeroperanden zu lesen, bevor der Befehl zur Ausführung bereit ist (z. B. wenn ein anderer Operand noch nicht bereit ist oder eine strukturelle Gefahr die Ausführung verzögert). Die Zuordnung von Registern zu Banken kann Informationen über die erwartete Verwendung nutzen, um die Wahrscheinlichkeit von Konflikten zu verringern. (Software kann dabei helfen, Register bevorzugt in der erwarteten Weise zu verwenden.) Bei Verwendung von virtuellen physischen Registernamen ist es möglich, die Zuweisung von physischen Registernamen (und damit Banken) zu verzögern, bis der Wert im Register gespeichert ist.
Diese Art von Banking wird manchmal als Pseudo-Multiporting bezeichnet, da sie die Illusion einer größeren Anzahl von Zugangsports erzeugt. Diese Technik wird üblicherweise für Caches verwendet, da die physikalische Struktur aus anderen Gründen häufig in separate Speicherfelder aufgeteilt wird.
(Eine Alternative zu einem solchen Banking ist das Replizieren der Registerdatei. Wenn Sie zwei Kopien der Registerdatei verwenden, benötigt jede Kopie die Hälfte der Leseports, obwohl die gleiche Anzahl von Schreibports erforderlich ist. Diese Technik wurde in POWER2 und Alpha 21264 verwendet und wird häufig in Hochleistungsprozessoren verwendet.)
Zusammenfassung
Es kann hilfreich sein, diese beiden Arten von Bankgeschäften als temporäres Bankgeschäft zu unterscheiden, bei dem die Bankauswahl über die Zeit verteilt ist (wie bei den Bankregistern von ARM für schnelle Interrupts), und als räumliches Bankgeschäft, bei dem der Bankzugriff zeitgleich, aber räumlich verteilt sein kann.
Temporal Banking ist in der Regel mit Software verbunden und wird verwendet, um den Overhead (und die Komplexität) von Interrupts zu reduzieren. (Konzeptionell ähnelt das Thread-Switching in einem Switch-on-Event-MultiThreaded-Prozessor der Interrupt-Behandlung und kann ähnliche Mechanismen verwenden, um den Overhead zu reduzieren.)
Spatial Banking ist seltener Bestandteil des ISA (obwohl Itanium das Laden und Speichern von Gleitkomma-Registerpaaren für die Verwendung gerader und ungerader Registernummern benötigt - was aufgrund der Verwendung der Registerrotation nicht garantiert ist -, sodass ein triviales Zwei-Banken-Design das Extra bietet Registerdateizugriffsanforderungen) und wird verwendet, um die Kosten für die Bereitstellung einer größeren Anzahl von Registerzugriffen pro Zyklus zu reduzieren.