DE102014109083A1 - Bilden von Anweisungsgruppen basierend auf der Optimierung von Anweisungen bei der Dekodierung - Google Patents

Bilden von Anweisungsgruppen basierend auf der Optimierung von Anweisungen bei der Dekodierung Download PDF

Info

Publication number
DE102014109083A1
DE102014109083A1 DE102014109083.7A DE102014109083A DE102014109083A1 DE 102014109083 A1 DE102014109083 A1 DE 102014109083A1 DE 102014109083 A DE102014109083 A DE 102014109083A DE 102014109083 A1 DE102014109083 A1 DE 102014109083A1
Authority
DE
Germany
Prior art keywords
instruction
optimization
instructions
new
statement
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
DE102014109083.7A
Other languages
English (en)
Inventor
Michael K. Gschwind
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
International Business Machines Corp
Original Assignee
International Business Machines Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by International Business Machines Corp filed Critical International Business Machines Corp
Publication of DE102014109083A1 publication Critical patent/DE102014109083A1/de
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3867Concurrent instruction execution, e.g. pipeline or look ahead using instruction pipelines
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/44Encoding
    • G06F8/443Optimisation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/44Encoding
    • G06F8/443Optimisation
    • G06F8/4441Reducing the execution time required by the program code
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30145Instruction analysis, e.g. decoding, instruction word fields
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30145Instruction analysis, e.g. decoding, instruction word fields
    • G06F9/3016Decoding the operand specifier, e.g. specifier format
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30181Instruction operation extension or modification
    • G06F9/30196Instruction operation extension or modification using decoder, e.g. decoder per instruction set, adaptable or programmable decoders
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3802Instruction prefetching
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3818Decoding for concurrent execution
    • G06F9/3822Parallel decoding, e.g. parallel decode units
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3853Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution of compound instructions

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Advance Control (AREA)
  • Devices For Executing Special Programs (AREA)

Abstract

Anweisungen werden in Anweisungsgruppen basierend auf durchführbaren Optimierungen gruppiert. Eine Anweisung wird erhalten, und es wird bestimmt, ob die Anweisung in eine aktuelle Anweisungsgruppe oder eine andere Anweisungsgruppe aufgenommen werden soll. Die Bestimmung erfolgt auf der Basis davon, ob die Anweisung ein Optimierungskandidat ist, wie eine Optimierung der Anweisung bei der Dekodierung. Wenn bestimmt wird, dass die Anweisung in eine andere Gruppe aufgenommen werden soll, dann wird die andere Gruppe zur Aufnahme der Anweisung gebildet.

Description

  • Hintergrund
  • Ein oder mehrere Aspekte beziehen sich im Allgemeinen auf die Verarbeitung in einer Verarbeitungsumgebung und im Besonderen auf die Optimierung der Verarbeitung.
  • Prozessoren führen Anweisungen aus, die die Prozessoren zur Durchführung bestimmter Operationen anweisen. Die Anweisungen können zum Beispiel Bestandteil von Benutzeranwendungen sein, die benutzerdefinierte Aufgaben durchführen oder Bestandteil von Betriebssystemanwendungen, die Services auf Systemebene ausführen.
  • Eine von den Prozessoren verwendete Verarbeitungstechnik zur Verarbeitung der Anweisungen wird als Pipeline-Verarbeitung bezeichnet, in der die Verarbeitung in Phasen ausgeführt wird. Zu den Beispielphasen gehören eine Abrufphase, in der der Prozessor eine Anweisung aus dem Systemspeicher abruft; eine Dekodierungsphase, in der die abgerufene Anweisung dekodiert wird; eine Ausführungsphase, in der die dekodierte Anweisung ausgeführt wird; und eine Abschlussphase, in der die Ausführung der Anweisung abgeschlossen wird, was die Aktualisierung des sich auf die Verarbeitung beziehenden architektonischen Zustands miteinschließt. Andere und/oder unterschiedliche Phasen sind möglich.
  • Um die Verarbeitung in einem Pipeline-Prozessor zu vereinfachen, werden verschiedene Optimierungstechniken eingesetzt. Zu einer solchen Technik gehört die Optimierung der Anweisungen bei der Dekodierung, was die Gelegenheit bietet, die Codeausführung durch die Kombination mehrerer Anweisungen in eine interne Anweisung zu verbessern; die Neukombination mehrerer Anweisung in mehreren/weniger internen Anweisungen; und/oder die Neukombination von mehreren Anweisungen in mehreren internen Anweisungen mit weniger Datenabhängigkeiten.
  • Kurzzusammenfassung
  • Die Nachteile des Standes der Technik werden überwunden und weitere Vorteile werden durch die Bereitstellung eines Computerprogrammprodukts zur Vereinfachung der Verarbeitung in einer Verarbeitungsumgebung bereitgestellt. Das Computerprogrammprodukt weist ein computerlesbares Speichermedium auf, das von einem Verarbeitungsschaltkreis lesbar ist, und das Speichern von Anweisungen zur Ausführung durch den Verarbeitungsschaltkreis zum Ausführen eines Verfahrens. Das Verfahren weist z.B. das Erhalten einer in der Verarbeitungsumgebung auszuführenden Anweisung auf; das Bestimmen, ob die Anweisung in eine aktuelle Anweisungsgruppe oder eine neue Anweisungsgruppe aufgenommen werden soll, wobei die Bestimmung darauf basiert, dass die Anweisung ein Kandidat für die Optimierung mit einer anderen Anweisung gemäß einem Optimierungskriterium ist; basierend auf der Bestimmung, dass die Anweisung in die neue Anweisungsgruppe aufgenommen werden soll, Bilden der neuen Anweisungsgruppe, wobei die neue Anweisungsgruppe die Anweisung und die weitere Anweisung enthält; und basierend auf dem Bilden der neuen Anweisungsgruppe, Ausführen von wenigstens einer der neuen Anweisungsgruppe zugeordneten Anweisung.
  • Verfahren und Systeme, die sich auf einen oder mehrere Aspekte beziehen, werden ebenso im vorliegenden Dokument beschrieben und in den Ansprüchen vertreten. Weiterhin werden ebenso Services, die sich auf einen oder mehrere Aspekte beziehen, im vorliegenden Dokument beschrieben und in den Ansprüchen vertreten.
  • Weitere Merkmale und Vorteile werden durch die in diesem Dokument beschriebenen Techniken verwirklicht. Weitere Ausführungsformen und Aspekte werden in diesem Dokument detailliert beschrieben und als Teil der beanspruchten Aspekte betrachtet.
  • Kurzbeschreibung der verschiedenen Ansichten der Zeichnungen
  • Ein oder mehrere Aspekte werden im Besonderen behandelt und ausdrücklich als Beispiele in den Ansprüchen am Ende der Beschreibung beansprucht. Das Obige und die Ziele, Merkmale und Vorteile von einem oder mehreren Aspekten werden durch die folgende detaillierte Beschreibung in Verbindung mit den begleitenden Zeichnungen deutlich, in denen:
  • 1 eine Ausführungsform einer Verarbeitungsumgebung darstellt, um einen oder mehrere Aspekte einer Gruppierungseinrichtung zur Gruppierung von Anweisungen einzubinden und zu verwenden;
  • 2 weitere Details eines Prozessors der Verarbeitungsumgebung von 1 darstellt;
  • 3 eine Ausführungsform einer Anweisungspipeline eines Prozessors einer Verarbeitungsumgebung darstellt;
  • 4A eine Ausführungsform von Decodern darstellt, mit denen Anweisungen dekodiert werden und Optimierungen bereitgestellt werden;
  • 4B ein Beispiel einer von einem Decoder bereitgestellten Optimierung darstellt;
  • 4C ein weiteres Beispiel einer von einem Decoder bereitgestellten Optimierung darstellt;
  • 5A5B Beispiele von Gruppenbildungen darstellen;
  • 6A eine Ausführungsform der Logik zum Bilden einer Anweisungsgruppe darstellen;
  • 6B eine weitere Ausführungsform der Logik zum Bilden einer Anweisungsgruppe darstellt;
  • 6C eine wiederum weitere Ausführungsform der Logik zum Bilden einer Anweisungsgruppe darstellt;
  • 7A eine Ausführungsform von Logik zum Markieren von Anweisungen darstellt, in der die Markierungen zur Gruppierung der Anweisungen verwendet werden;
  • 7B eine Ausführungsform der Logik darstellt, um eine Anweisungsgruppe basierend auf den Markierungen von 7A zu bilden;
  • 8A8B Beispiele von Gruppenbildungen darstellen;
  • 9 eine weitere Ausführungsform der Logik zum Bilden einer Anweisungsgruppe darstellen;
  • 10A eine weitere Ausführungsform der Logik zum Markieren von Anweisungen darstellt;
  • 10B eine Ausführungsform zum Bilden einer Anweisungsgruppe basierend auf der Markierung von 10A darstellt;
  • 11 ein Beispiel einer Dekodierungslogik darstellt, mit der Anweisungsgruppen gebildet und/oder Anweisungsgruppen optimiert werden;
  • 12 eine Ausführungsform eines Computerprogrammprodukts darstellt;
  • 13 eine Ausführungsform eines Hostcomputersystems darstellt;
  • 14 ein weiteres Beispiel eines Computersystems darstellt;
  • 15 ein anderes Beispiel eines Computersystems darstellt, das ein Computernetzwerk umfasst;
  • 16 eine Ausführungsform von verschiedenen Elementen eines Computersystems darstellt;
  • 17A eine Ausführungsform der Ausführungseinheit des Computersystems von 16 darstellt;
  • 17B eine Ausführungsform der Verzweigungseinheit des Computersystems von 16 darstellt;
  • 17C eine Ausführungsform der Lade-/Speichereinheit des Computersystems von 16 darstellt; und
  • 18 eine Ausführungsform eines emulierten Hostcomputersystems darstellt, um einen oder mehrere Aspekte zu integrieren und zu verwenden.
  • Detaillierte Beschreibung
  • Gemäß einem oder mehreren Aspekten wird eine Gruppierungsfähigkeit bereitgestellt, die auf der Basis durchführbarer Optimierungen, Anweisungen in Anweisungsgruppen gruppiert. Die Gruppen werden z.B. zum Zeitpunkt der Dekodierung oder vor der Dekodierung (beide werden hier als Zeitpunkt der Dekodierung (bzw. im Deutschen „bei der Dekodierung“) bezeichnet) gebildet, und werden daher auch als Dekodierungsgruppen bezeichnet. Die Dekodierungsgruppen werden in einem Aspekt basierend auf durchführbaren Anweisungsoptimierungen zum Zeitpunkt der Dekodierung gebildet.
  • Die Gruppierungsfähigkeit kann in vielen verschiedenen Verarbeitungsumgebungen verwendet werden, in denen unterschiedliche Prozessoren zur Ausführung kommen. Z.B. kann sie mit Prozessoren basierend auf der z/Architecture verwendet werden, die von der International Business Machines Corporation angeboten wird. Einer oder mehrere der Prozessoren können Teil eines Servers sein, wie z.B. dem System z-Server, der die z/Architecture implementiert und von der International Business Machines Corporation angeboten wird. Eine Ausführungsform der z/Architecture wird in einer IBM-Veröffentlichung mit dem Titel „z/Architecture Principles of Operation", IBM-Publikation Nr. SA22-7832-09, Tenth Edition, September 2012 beschrieben, die hierdurch vollständig durch Referenz enthalten ist. In einem Beispiel führen ein oder mehrere Prozessoren ein Betriebssystem aus, wie das Betriebssystem z/OS, das ebenso von der International Business Machines Corporation angeboten wird. IBM, Z/ARCHITECTURE und Z/OS sind eingetragene Markenzeichen der International Business Machines Corporation, Armonk, New York, USA. Andere in diesem Dokument verwendete Namen können eingetragene Markenzeichen, Markenzeichen oder Produktnamen der International Business Machines Corporation oder anderer Unternehmen sein.
  • In einer weiteren Ausführungsform basieren die Prozessoren auf der von der International Business Machines Corporation angebotenen Power Architecture und können Prozessoren der Baureihe Power 700 sein. Eine Ausführungsform der Power Architecture wird in „Power ISA Version 2.07," International Business Machines Corporation, vom 3. Mai 2013 beschrieben, was hierdurch vollständig durch Referenz enthalten ist. POWER ARCHITECTURE ist ein eingetragenes Markenzeichen der International Business Machines Corporation.
  • Ein spezielles Beispiel einer Verarbeitungsumgebung, um einen oder mehrere Aspekte einer Gruppierungseinrichtung einzubinden und zu verwenden, wird mit Bezugnahme auf 1 beschrieben. In diesem bestimmten Beispiel basiert sie Verarbeitungsumgebung auf der von der International Business Machines Corporation angebotenen Power Architecture, was aber nur ein Beispiel darstellt. Ein oder mehrere Aspekte sind auf andere Architekturen anwendbar, die von der International Business Machines Corporation oder anderen Unternehmen angeboten werden.
  • Es wird auf 1 Bezug genommen. Eine Verarbeitungsumgebung 100 weist z.B. eine zentrale Verarbeitungseinheit (CPU) 110 auf, die mit verschiedenen anderen Komponenten durch ein Interconnect (Zusammenschaltung) 112 verbunden ist, darunter z.B. mit einem Festspeicher (ROM, Read-Only Memory) 116, der ein Eingabe/Ausgabe-Grundsystem (BIOS, Basic Input/Output System) aufweist, das bestimmte Grundfunktionen der Verarbeitungsumgebung steuert, einem Direktzugriffsspeicher (RAM, Random Access Memory) 114, einem I/O-Adapter 118 und einem Kommunikationsadapter 120. Beim I/O-Adapter 118 kann es sich um einen SCSI-Adapter (Small Computer System Interface) handeln, der mit einer Speichereinrichtung 121 KOMMUNIZIERT. Der Kommunikationsadapter 120 hat über den Interconnect 112 eine Verbindung zum Netzwerk 122, wodurch die Verarbeitungsumgebung 100 mit anderen Systemen, wie einem Remote-Computer 124 kommunizieren kann.
  • Der Interconnect 112 verfügt auch über Eingabe-/Ausgabeeinrichtungen, die damit über einen Benutzerschnittstellenadapter 126 und einen Anzeigeadapter 136 verbunden sind. Die Tastatur 128, der Trackball 130, die Maus 132 und der Lautsprecher 134 sind alle mit dem Bus 112 über einen Benutzerschnittstellenadapter 126 verbunden. Der Monitor 138 ist mit dem Systembus 112 über einen Anzeigeadapter 136 verbunden. Auf diese Weise erhält die Prozessorumgebung 100 Eingaben, zum Beispiel über die Tastatur 128, den Trackball 130 und/oder die Maus 132, und stellt Ausgaben zum Beispiel über das Netzwerk 122, auf der Speichereinrichtung 121, dem Lautsprecher 134 und/oder der Anzeige 138 als Beispiele bereit. Die in der Verarbeitungsumgebung 100 dargestellten Hardwarekomponenten sind nicht als erschöpfend zu betrachten, sondern stellen vielmehr die beispielhaften Komponenten einer Verarbeitungsumgebung in einer Ausführungsform dar.
  • Der Betrieb der Verarbeitungsumgebung 100 kann durch Programmcode gesteuert werden, wie Firmware und/oder Software, wozu in der Regel zum Beispiel ein Betriebssystem wie AIX® (AIX ist ein Markenzeichen der IBM Corporation) und eine oder mehrere Anwendungen oder Middleware-Programme gehören. Wie in dem vorliegenden Dokument verwendet, beinhaltet Firmware z.B. den Microcode, den Millicode und/oder den Makrocode des Prozessors. Dies beinhaltet z.B. die Anweisungen auf Hardwareebene und/oder Datenstrukturen, die bei der Implementierung von höherem Maschinencode verwendet werden. In einer Ausführungsform beinhaltet dies z.B. proprietären Code, der in der Regel als Microcode bereitgestellt wird, der vertrauenswürdige Software oder Microcode speziell für die zu Grunde liegende Hardware beinhaltet und den Betriebssystemzugriff auf die Systemhardware steuert. Ein solcher Programmcode enthält Anweisungen, die im Folgenden mit Bezugnahme auf 2 erörtert werden.
  • Es wird auf 2 Bezug genommen und weitere Details eines Prozessors 200 (z.B. die zentrale Verarbeitungseinheit 110) der Verarbeitungsumgebung werden erörtert. In einem Beispiel ist der Prozessor ein superskalarer Prozessor, der Anweisungen aus dem Speicher abruft (z.B. RAM 114 von 1) und sie in die Anweisungsablauflogik (ISL, Instruction Sequencing Logic) 204 des Prozessors lädt. Die Anweisungsablauflogik beinhaltet z.B. einen Level 1-Anweisungscache (L1 I-Cache) 206, eine Abruf-Dekodier-Einheit 208, eine Anweisungsschlange 210 und eine Verteilungseinheit 212. In einem Beispiel werden die Anweisungen in den L1 I-Cache 206 von der ISL 204 geladen, und sie werden im L1 I-Cache 206 gehalten, bis sie gebraucht werden, oder werden ersetzt, falls sie nicht benötigt werden. Anweisungen werden aus dem L1 I-Cache 206 abgerufen und werden in einer Ausführungsform in Anweisungsgruppen gruppiert und von der Abruf-Dekodier-Einheit 208 DEKODIERT. Nach Dekodierung der aktuellen Anweisung wird diese in die Anweisungsschlange 210 GELADEN. Die Verteilungseinheit 212 verteilt Anweisungen aus der Anweisungsschlange 210 in die Registerverwaltungseinheit 214 sowie die Abschlusseinheit 221. Die Abschlusseinheit 221 ist mit der allgemeinen Ausführungseinheit 224 und der Registerverwaltungseinheit 214 verbunden und überwacht, wann eine abgesetzte Anweisung abgeschlossen ist.
  • Wenn die Verteilungseinheit 212 eine aktuelle Anweisung verteilt, weist die vereinheitlichte Hauptzuordnungseinheit (Unified Main Mapper) 218 der Registerverwaltungseinheit 214 einem physischen Register in den physischen Registerdateien 232a232n eine logische Zielregisternummer zu, die derzeit keinem logischen Register zugewiesen ist. Das Ziel soll in das angegebene physische Register aus den physischen Registerdateien 232a232n umbenannt werden. Die vereinheitlichte Zuordnungseinheit 218 entfernt das zugewiesene physische Register aus einer Liste 219 der freien physischen Register, die in der vereinheitlichten Zuordnungseinheit 218 GESPEICHERT SIND. Nachfolgende Verweise auf dieses logische Zielregister zeigen auf dasselbe physische Register, bis die Abruf-Dekodier-Einheit 208 eine weitere Anweisung dekodiert, die in dasselbe logische Register schreibt. Die vereinheitlichte Zuordnungseinheit 218 benennt dann die logischen Register auf einen anderen physischen Speicherort um, der aus der Freiliste 219 ausgewählt wurde, und die Zuordnungseinheit wird aktualisiert, um die neuen Daten der logischen-zu-physischen Registerzuordnung einzutragen. Wenn die Daten der logischen-zu-physischen Registerzuordnung nicht mehr benötigt werden, werden die alten Zuordnungen der physischen Register in die Freiliste 219 zurückgegeben. Wenn die Freiliste 219 nicht über ausreichend physische Register verfügt, unterbricht die Verteilungseinheit 212 das Verteilen der Anweisungen, bis die benötigten physischen Register verfügbar sind.
  • Nachdem die Registerverwaltungseinheit 214 die aktuelle Anweisung zugeordnet hat, setzt die Schlange der abzusetzenden Anweisungen 222 die aktuelle Anweisung für die allgemeine Ausführungsengine 224 ab, die die Ausführungseinheiten (EUs, Execution Units) 230a230n enthält. Die Ausführungseinheiten 230a230n bestehen aus verschiedenen Typen, wie Gleitkomma (FP, Floating-point), Festkomma (FX, Fixed-Point) und Laden/Speichern (LS). Die allgemeine Ausführungsengine 224 tauscht Daten mit dem Datenspeicher (wie RAM 114, ROM 116 von 1) über einen Datencache 234 aus. Darüber hinaus kann die Schlange der abzusetzenden Anweisungen 222 Anweisungen vom Typ Gleitkomma, Festkomma und/oder Anweisungen vom Typ Laden/Speichern enthalten. Es versteht sich aber, dass jede beliebige Anzahl und beliebige Arten von Anweisungen verwendet werden können. Bei der Ausführung erhalten die EUs 230a230n die Quelloperandenwerte aus den physischen Speicherorten in den Registerdateien 232a232n und speichern Ergebnisdaten, falls vorhanden, in den Registerdateien 232a232n und/oder im Datencache 234.
  • Die Registerverwaltung 214 weist z.B. auf: (i) Zuordnungseinheitscluster (Mapper Cluster) 215, zu denen die architekturdefinierte-Register-Zuordnungseinheit (Architectures Register Mapper) 216, die vereinheitlichte Hauptzuordnungseinheit 218, die Zwischenregister-Zuordnungseinheit (Intermediate Register Mapper) 220, und (ii) die Schlange der abzusetzenden Anweisungen (Issue Queue) 222 gehören. Das Zuordnungseinheitscluster 215 verfolgt die physischen Register, die den logischen Registern der verschiedenen Anweisungen zugeordnet sind. In einer Ausführungsform verfügt eine architekturdefinierte-Register-Zuordnungseinheit 216 über 16 logische (d. h. physisch nicht zugeordnete) Register eines jeden Typs, die den letzten, gültigen Zustand (d.h. für den ein Checkpoint besteht) der Daten der logischen-zu-physischen Registerzuordnungseinheit speichern. Es sollte aber beachtet werden, dass die unterschiedlichen Prozessorarchitekturen über mehr oder weniger logische Register verfügen können als in der vorliegenden Ausführungsform beschrieben. Die architekturdefinierte-Register-Zuordnungseinheit 216 enthält weiterhin eine Pointerliste (Zeigerliste), die ein physisches Register angibt, das den Checkpoint-Zustand beschreibt. Die physischen Registerdateien 232a232n enthalten in der Regel mehr Register als die Anzahl der Einträge in einer architekturdefinierte-Register-Zuordnungseinheit 216. Es sollte beachtet werden, dass die jeweilige Anzahl der physischen und logischen Register, die in einem Umbenennungszuordnungsschema verwendet werden, variieren kann.
  • Dem gegenüber ist die vereinheitlichte Hauptzuordnungseinheit 218 in der Regel größer (enthält in der Regel bis zu 20 Einträge) als die architekturdefinierte-Register-Zuordnungseinheit 216. Die vereinheitlichte Hauptzuordnungseinheit 218 vereinfacht das Verfolgen des Übergangszustands der logischen-zu-physischen Registerzuordnungen. Der Begriff „Übergang” (transient) bezieht sich auf die Tatsache, dass die vereinheitlichte Hauptzuordnungseinheit 218 die vorläufigen logischen-zu-physischen Registerzuordnungsdaten verfolgt, wenn die Anweisungen außerhalb der Reihenfolge (OoO, Out-of-order) ausgeführt werden. Die Ausführung außerhalb der Reihenfolge erfolgt in der Regel, wenn ältere Anweisungen vorliegen, deren Ausführung länger dauern würde (d.h. die mehr Taktzyklen verwenden) als neuere Anweisungen in der Pipeline. Sollte aber das erwartete Ergebnis einer außerhalb der Reihenfolge ausgeführten Anweisung es notwendig machen, dass es aus einem bestimmten Grund gelöscht wird (z. B. aufgrund einer falschen Verzweigungsprognose), kann der Prozessor zu dem Zustand des Checkpoints zurückkehren, der in der architekturdefinierte-Register-Zuordnungseinheit 216 aufbewahrt wird und die Ausführung ab dem letzten gültigen Zustand wieder aufnehmen.
  • Die vereinheitlichte Hauptzuordnungseinheit 218 stellt die Verknüpfung zwischen den physischen Registern in den physischen Registerdateien 232a232n und der architekturdefinierte-Register-Zuordnungseinheit 216 her. Der qualifizierende Begriff „vereinheitlicht” (unified) bezieht sich auf die Tatsache, dass durch die vereinheitlichte Hauptzuordnungseinheit 218 die Komplexität im Vergleich zur Erstellung angepasster dedizierter Zuordnungseinheiten für jede der Registerdateien 232 (wie allgemeine Register (GPRs), Gleitkommazahlenregister (FPRs), Festkommaregister (FXPs), Ausnahmeregister (XERs, Exception Register), Bedingungsregister (CRs, Condition Register) usw.) vermieden wird.
  • Zusätzlich zum Erstellen eines transienten logischen-zu-physischen Registerzuordnungseinheitseintrags einer außerhalb der Reihenfolge ausgeführten Anweisung verfolgt die vereinheitlichte Hauptzuordnungseinheit 218 auch die Abhängigkeitsdaten (d. h. Anweisungen, die von der Beendigung einer älteren Anweisung in der Pipeline abhängen), was für die Reihenfolge der Anweisungen wichtig ist. Herkömmlicherweise wird eine Anweisung an die Schlange der abzusetzenden Anweisungen 222 übergeben, wenn die vereinheitlichte Hauptzuordnungseinheit 218 in die Übersetzung der logischen-zu-physischen Register einer Anweisung eingetreten ist. Die Schlange der abzusetzenden Anweisungen 222 dient als Gatekeeper, bevor die Anweisung an die Ausführungseinheit 230 zur Ausführung abgesetzt wird. Im Allgemeinen kann eine Anweisung die Schlange der abzusetzenden Anweisungen 222 nicht verlassen, wenn sie davon abhängig ist, dass eine ältere Anweisung beendet wird. Aus diesem Grund verfolgt die vereinheitlichte Hauptzuordnungseinheit 218 die Abhängigkeitsdaten durch Speichern der Positionsdaten der Schlange der abzusetzenden Anweisungen für jede Anweisung, die zugeordnet wird. Nach Ausführung der Anweisung durch die allgemeine Ausführungsengine 224 gilt die Anweisung als „beendet” und wird aus der Schlange der abzusetzenden Anweisungen 222 zurückgezogen.
  • Die Registerverwaltungseinheit 214 kann mehrere Anweisungen aus der Verteilungseinheit 212 in einem einzelnen Zyklus empfangen, um so eine gefüllte Pipeline einzeln abzusetzender Befehle bereitzustellen. Die Verteilung der Anweisungen ist durch die Anzahl der verfügbaren Einträge in der vereinheitlichten Hauptzuordnungseinheit 218 beschränkt. Wenn in einigen Zuordnungssystemen, in denen die Zwischenregister-Zuordnungseinheit 220 fehlt, die vereinheitlichte Hauptzuordnungseinheit 218 über insgesamt 20 Hauptzuordnungseinträge verfügt, können maximal 20 Anweisungen im Augenblick als flüchtig (d. h. nicht in einem Checkpoint gespeichert) vorhanden sein. Somit kann die Verteilungseinheit 212 möglicherweise mehr Anweisungen verteilen als tatsächlich aus der vereinheitlichten Hauptzuordnungseinheit 218 zurückgezogen werden können. Der Grund für diesen Engpass in der vereinheitlichten Hauptzuordnungseinheit 218 liegt in der Tatsache begründet, dass der Eintrag für eine Anweisung in der Zuordnungseinheit herkömmlicherweise erst dann aus der vereinheitlichten Hauptzuordnungseinheit 218 entfernt werden kann, wenn die Anweisung „abgeschlossen” ist (d. h. die Ausführung aller älterer Anweisungen beendet wurde).
  • Gemäß einer Ausführungsform dient die Zwischenregister-Zuordnungseinheit 220 jedoch als nicht zeitkritisches Register, bei dem eine „beendete” aber „unvollständige” Anweisung aus der vereinheitlichten Hauptzuordnungseinheit 218 zurückgenommenen werden kann (d. h. aus der vereinheitlichten Hauptzuordnungseinheit 218 ENTFERNT WERDEN), wenn schließlich der Abschluss der Anweisung erreicht wird. Wenn die Anweisung „abgeschlossen wird”, benachrichtigt die Abschlusseinheit 221 die Zwischenregister-Zuordnungseinheit 220 über den Abschluss. Der Zuordnungseinheitseintrag in der Zwischenregister-Zuordnungseinheit 220 kann dann den definierten damit zusammenhängenden Zustand der architekturdefinierte-Register-Zuordnungseinheit 216 durch Ersetzen des entsprechenden aktuell in der architekturdefinierte-Register-Zuordnungseinheit 216 gespeicherten Eintrags aktualisieren.
  • Weitere Details bezüglich einer Ausführungsform der Zuordnungseinheiten und der zugehörigen Verarbeitung werden in der U.S.-Publikation-Nr. 2013/0086361 mit dem Titel „Scalable Decode-Time Instruction Sequence Optimization of Dependent Instructions, Gschwind et al., veröffentlicht am 4. April 2013, beschrieben, die hier durch Bezugnahme vollständig enthalten ist.
  • Wie oben beschrieben, nutzt der Prozessor 200 zur Ausführung der aus dem Systemspeicher abgerufenen Anweisungen eine Pipeline-Verarbeitung. Weitere Details bezüglich einer Ausführungsform dieser Verarbeitung werden mit Bezugnahme auf 3 beschrieben, in der ein Beispiel einer Prozessor-Pipeline dargestellt ist. In einem Beispiel werden Anweisungen in eine Anweisungsabrufeinheit 300 abgerufen, die z.B. einen Anweisungsabruf (IF, Instruction Fetch) 302, einen Anweisungscache (IC, Instruction Cache) 304 und eine Verzweigungsprognoseeinheit 306 (BP, Branch Prediction Unit) beinhaltet. Die Anweisungsabrufeinheit 300 ist mit einer Gruppenbildungs- und Dekodiereinheit 310 verbunden, die eine oder mehrere Dekodierungsphasen (Dn) 312 sowie eine Übertragungsphase (Xfer) 314 zum Übertragen der dekodierten Anweisung an die Gruppenverteilung (GD, Group Dispatch) 320 beinhaltet. Die Gruppenverteilung 320 ist mit Zuordnungseinheiten (MP) 322 (wie der architekturdefinierte-Register-Zuordnungseinheit 216, der vereinheitlichten Hauptzuordnungseinheit 218 und/oder der Zwischenregister-Zuordnungseinheit 220 von 2) verbunden, die mit einer Verarbeitungseinheit 330 verbunden sind.
  • Die Verarbeitungseinheit 330 stellt die Verarbeitung für verschiedene Anweisungsarten bereit. Z.B. wird in SCHRITT 331 die Verarbeitung für eine Anweisung, die eine Verzweigungsumleitung (BR, Branch Redirect) 337 enthält, dargestellt und beinhaltet z.B. das Absetzen einer Anweisung (ISS, Instruction Issue) 332, das Lesen einer Registerdatei (RF, Register File) 334, die Ausführung (EX, Execute) 336, die Verzweigungsumleitung (BR, Branch Redirect) 337 auf das Abrufen der Anweisung (IF, Instruction Fetch) 302, das Zurückschreiben (WB, Write Back) 346 und die Übertragung (Xfer, Transfer) 348. In SCHRITT 333 wird die Verarbeitung für eine Lade-/Speicher-Anweisung dargestellt, die z.B. beinhaltet das Absetzen der Anweisung 332, das Lesen einer Registerdatei 334, die Berechnung der Adresse (EA) 338, das Ablegen der Daten im Cache (DC, Data Cache) 340, das Formatieren (FMT, Format) 342, das Zurückschreiben 346 und die Übertragung 348. In SCHRITT 335 wird die Verarbeitung für eine Festkommaanweisung dargestellt und beinhaltet z.B. das Absetzen einer Anweisung 332, das Lesen einer Registerdatei (RF, Read File) 335, die Ausführung 336, das Zurückschreiben 346 und die Übertragung 348; und in SCHRITT 337 wird die Verarbeitung für eine Gleitkommaanweisung dargestellt, die z.B. das Absetzen der Anweisung 332, das Lesen der Registerdatei 334, eine Gleitkommaeinheit mit sechs Zyklen (F6) 344, dass Zurückschreiben 346 und die Übertragung 348 beinhaltet. Die Verarbeitung für jede Anweisungsart wird an eine Gruppenfestschreibung (CP, Group Commit) 350 übertragen. Die Ausgabe der Gruppenfestschreibung 340 ist z.B. mit dem Abruf der Anweisung 302 im Falle von Interrupts und Flushes (Wegschreibungen) verbunden.
  • Weitere Details bezüglich einer Ausführungsform der Gruppenbildungs- und Dekodiereinheit 310 werden mit Bezugnahme auf 4A bis 4C beschrieben. Es wird auf 4A Bezug genommen. In einer Ausführungsform sind jeweils mehrere Decoder 402, 404, wie Decoder 0 und Decoder 1 (z. B. Decoder 312 von 3) mit einem Anweisungscache 400 verbunden, der mehrere Anweisungen beinhaltet. In einem Beispiel empfängt der Decoder 400 eine erste Anweisung 0 (I0) aus dem Anweisungscache 400, und der Decoder 404 empfängt eine zweite Anweisung 1 (I1) aus dem Cache. Jeder Decoder weist jeweils einen Anweisungsdecoder 406, 408 auf, um die erste Dekodierung der Anweisungen durchzuführen und Informationen 410, 412, 414 und 416 zur Dekodierung bereitzustellen. Zum Beispiel werden die Informationen 414 und 416 einer Optimierungsanalyse-Engine (OAE, Optimization Analysis Engine) 418 bereitgestellt; und Informationen 410 und 412 werden jeweils Anweisungsoptimierern 422, 420 bereitgestellt.
  • In einer Ausführungsform vergleicht die Optimierungsanalyse-Engine 418 die dekodierten Eigenschaften der Anweisung in den Decodern 402 und 404, um zu bestimmen, ob sie einer von mehreren zusammengesetzten Folgen entsprechen, die Optimierungskandidaten sind. Weiterhin reagiert die Optimierungsanalyse-Engine 418 auf mehrere Steuersignale, um die Erkennung von zusammengesetzten Folgen zu unterdrücken, z.B. wenn ein Konfigurationsbit festgelegt ist. Konfigurationsbits können implementierungsspezifischen Registern entsprechen, um die Anweisungsoptimierung bei der Dekodierung (DTIO, Decode Time Instruction Optimization) für alle oder eine Teilmenge der zusammengesetzten Anweisungen zu deaktivieren, falls ein Designfehler erfasst wurde, wenn bestimmt wurde, dass das Durchführen einer DTIO-Folge nicht mehr zweckmäßig ist, wenn ein Prozessor in einen Einzel-Anweisung-(Verfolgungs-)Modus eintritt usw. Die Optimierungsanalyse-Engine 480 kann eine einzelne Einheit sein, wie in 4A dargestellt, oder kann repliziert, verteilt, aufgeteilt oder anderweitig in einem oder mehrere Decoder 402 und 404 integriert sein. Die Optimierungsanalyse-Engine kann in einem einzelnen großen zusammengesetzten Decoder (z.B. darunter, ohne darauf beschränkt zu sein, einen komplexen Decoder, der eine Optimierungsanalyse-Engine 418, einen Decoder 402 und einen Decoder 404 in einer einzelnen Anordnung aufweist) kombiniert sein, um die Logikoptimierung für Verbesserungen von Schaltkreisdesigns zu vereinfachen.
  • Die Optimierungsanalyse-Engine stellt Informationen bereit, die angeben, ob eine optimierbare zusammengesetzte Folge erfasst wurde, ebenso wie Informationen über die Art der Folge (z.B. welche von mehreren Anweisungen und/oder speziellen Eigenschaften der Folge von der Optimierungslogik des Decoders verwendet werden sollen, um eine optimierte Folge zu erstellen). OAE stellt einem Selektor auch Steuerungslogik bereit, um eine von der ersten Dekodieroperation generierte, nicht optimierte interne Operation (IOP, Internal Operation) oder eine IOP, die einer IOP in einer optimierten DTIO-Folge entspricht, die durch Optimierungslogik unter Steuerung der OAE-Steuerungssignale generiert wurde, und weiteren von Decodern empfangen Informationen, bei denen ein Teilbereich einer zu optimierenden zusammengesetzten Folge dekodiert wurde, wie zum Beispiel Registerspezifikationen, Direktfelder und Befehlscodes, auszuwählen.
  • Die Optimierungsanalyse-Engine 84 ist mit einem Anweisungsoptimierer 420 und einem Anweisungsoptimierer 422 verbunden. Der Anweisungsoptimierer 420 erhält Operanden- und Anweisungsinformationen vom Anweisungsdecoder 408, und der Anweisungsoptimierer 422 erhält Operanden- und Anweisungsinformationen vom Anweisungsdecoder 406.
  • Darüber hinaus sind der Anweisungsoptimierer 420 und der Anweisungsdecoder 406 mit der Auswahllogik 426 verbunden, und der Anweisungsoptimierer 422 und der Anweisungsdecoder 408 sind mit der Auswahllogik 428 verbunden. Die Optimierungsanalyse-Engine 418 kann der Auswahllogik 426, 428 Auswahlinformationen 424 zur Bestimmung bereitstellen, ob die zugehörigen Anweisungen I0 oder I1 die zugehörigen IOP-Anweisungen (iop(0), iop(1)) generieren sollen, oder ob eine optimierte Anweisung verwendet werden soll.
  • Weitere Details einer Ausführungsform eines Optimierers 420 (oder Optimierers 422) werden mit Bezugnahme auf 4B beschrieben. Eine erste Anweisung 450 und eine nächste sequenzielle Anweisung 452 werden als Optimierungskandidaten 454 bestimmt. Die erste Anweisung 450 weist einen Befehlscode (OP1, Opcode), ein Quellregisterfeld (RA1), ein direktes Feld (I1) und ein Ergebniszielfeld (RT1, Result Target Field) auf. Die nächste sequenzielle Anweisung 452 weist einen Befehlscode (OP2), ein Quellregisterfeld (RA2), ein Direktfeld (I2) und ein Ergebniszielfeld (RT2) auf. Wenn sie nicht gemäß einem vordefinierten Optimierungskriterium optimiert wurden, werden sie der Reihenfolge nach ausgeführt (OP1 456 gefolgt von OP2 458). Wenn sie jedoch das Kriterium erfüllen (darunter z.B. dass RT1 = RA2), wird die nächste sequenzielle Anweisung vom Optimierer 420 geändert, um einen verketteten Wert von I1 und I2 zu enthalten, um eine neue nächste sequenzielle Anweisung 462 bereitzustellen, die außerhalb der Reihenfolge bezüglich der ersten Anweisung 460 ausgeführt werden kann. In einer Ausführungsform weist die modifizierte nächste sequenzielle Anweisung einen neuen wirksamen Befehlscode (OP2x) auf.
  • Eine weitere Ausführungsform eines Optimierer 420 (oder Optimierers 422) ist in 4C dargestellt. In diesem Beispiel werden eine erste Anweisung 470 und eine nächste sequenzielle Anweisung 472 als Optimierungskandidaten 474 bestimmt. Die erste Anweisung 470 weist einen Befehlscode (OP1), ein Quellregisterfeld (RA1), ein weiteres Quellregisterfeld (RB1) und ein Ergebniszielfeld (RT1) auf. Die nächste sequenzielle Anweisung 472 weist ein Befehlscodefeld (OP2), ein Quellregisterfeld (RA2), ein weiteres Quellregisterfeld (RB2) und ein Ergebniszielfeld (RT2) auf. Wenn sie nicht gemäß einem vordefinierten Optimierungskriterium optimierbar sind, werden sie der Reihenfolge nach ausgeführt (OP1 480 gefolgt von OP2 482). Wenn sie jedoch das Kriterium erfüllen (darunter z.B. dass RT1 = RA2), wird die nächste sequenzielle Anweisung vom Optimierer 420 geändert, um RB1 aufzunehmen, um eine neue nächste sequenzielle Anweisung 478 zu erzeugen, die außerhalb der Reihenfolge bezüglich der ersten Anweisung 476 ausgeführt werden kann. In einer Ausführungsform weist die modifizierte nächste sequenzielle Anweisung einen neuen wirksamen Befehlscode (OP2x) auf.
  • Wie in dem vorliegenden Dokument beschrieben, ist eine Form der Optimierung die Optimierung der Anweisung bei der Dekodierung, wobei Anweisungen in einer Anweisungsgruppe zum Zeitpunkt der Dekodierung oder vor der Dekodierung optimiert werden (beides wird hierin als Dekodierungszeitpunkt bezeichnet). Eine Anweisungsgruppe weist eine oder mehrere Anweisungen auf, und in den im vorliegenden Dokument beschriebenen Ausführungsformen weist eine Gruppe bis zu vier Anweisungen auf. In anderen Ausführungsformen kann eine Gruppe jedoch mehr oder weniger Anweisungen als die hier beschriebenen Beispiele aufweisen.
  • Die Bildung von Gruppen, die als Gruppenbildung oder Dekodierungsgruppenbildung bezeichnet wird, schränkt die Fähigkeit ein, Anweisungen zu optimieren, wenn sich Anweisungen über mehrere Dekodierungsgruppen erstrecken. Zum Beispiel wird davon ausgegangen, dass eine Add-Immediate-Shift-Anweisung (Direktverschiebungsanweisung, addis) in der Regel mit einer Ladeanweisung (ld) optimiert wird. Wenn, wie in 5A dargestellt, sich die addis-Anweisung in Gruppe 1 und die Ladeanweisung sich in Gruppe 2 befindet, werden die Anweisungen in dieser Ausführungsform nicht optimiert, da sie sich in verschiedenen Gruppen befinden. Wenn, obgleich in einem Optimierungskriterium, auf eine Direktverschiebungsanweisung (addis) eine Ladeanweisung (ld) folgt, wird eine Optimierung durchgeführt. In diesem Szenario ist dies nicht der Fall, da sich die Anweisungen in verschiedenen Dekodierungsgruppen befinden. Gemäß einem Aspekt jedoch werden die Gruppen umgebildet, um die Optimierung der addis-Anweisung aus Gruppe 1 mit der Ladeanweisung aus Gruppe 2 zu ermöglichen, wie in 5B dargestellt.
  • Weitere Details bezüglich der Gruppenbildung werden mit Bezugnahme auf 6A bis 6B beschrieben. Zu Beginn wird ein Beispiel der Gruppenbildung, ohne dabei zu berücksichtigen, ob die Anweisungen optimiert werden können (im vorliegenden Dokument als Optimierungskandidaten bezeichnet), mit Bezugnahme auf 6A beschrieben. Dann wird ein Beispiel der Gruppenbildung basierend auf der Optimierungskandidatur gemäß einem oder mehreren Aspekten mit Bezugnahme auf 6B beschrieben.
  • Mit Bezugnahme auf 6A wird in einer Ausführungsform eine neue leere Gruppe in SCHRITT 600 begonnen. Dann wird eine abgerufene Anweisung zur Anweisungsgruppe in SCHRITT 602 hinzugefügt und in der ABFRAGE 604 bestimmt, ob in der Gruppe mehrere Slots mit Anweisungen vorhanden sind. Wenn in der Gruppe mehrere Anweisungsslots vorhanden sind (z.B. bislang weniger als vier Anweisungen hinzugefügt wurden), dann wird die Verarbeitung in SCHRITT 602 mit dem Hinzufügen einer Anweisung zur Anweisungsgruppe fortgesetzt. Wenn jedoch keine weiteren Anweisungsslots in der Gruppe vorliegen, dann wird in SCHRITT 606 die Anweisungsgruppe durch die Pipeline zur weiteren Verarbeitung weitergeleitet. Darüber hinaus wird in ABFRAGE 608 bestimmt, ob mehrere Anweisungen zu verarbeiten sind. Falls mehrere Anweisungen vorliegen, dann wird die Verarbeitung mit SCHRITT 600 fortgesetzt. Andernfalls ist die Gruppenbildung abgeschlossen.
  • In der speziellen mit Bezugnahme auf 6A beschriebenen Ausführungsform werden Gruppen auf der Basis davon gebildet, ob Anweisungsslots in den Gruppen verfügbar sind, unabhängig von den Anweisungen bzw. davon, ob Optimierungen vorgesehen sein können. Mit Bezugnahme auf 6B wird jedoch eine Ausführungsform einer Gruppenbildung beschrieben, in der eine Anweisungsgruppe basierend darauf gebildet wird, ob Anweisungen optimierbar sind, wie die Optimierung von Anweisungen bei der Dekodierung (DTIO, Decode Time Instruction Optimization).
  • Es wird auf 6B Bezug genommen. Gemäß einem Aspekt wird eine neue leere Anweisungsgruppe in SCHRITT 650 begonnen, und eine abgerufene Anweisung wird in SCHRITT 652 zur Anweisungsgruppe hinzugefügt. Dann wird in ABFRAGE 654 bestimmt, ob mehrere Anweisungsslots in der Gruppe vorhanden sind. Wenn in der Gruppe mehrere Anweisungsslots vorhanden sind, dann werden in ABFRAGE 656 die nächsten zwei oder mehr abgerufenen Anweisungen analysiert, um zu bestimmen, ob sie eine Optimierungsfolge bilden. Zum Beispiel wird mittels vordefinierter Optimierungskriterien bestimmt, ob Anweisungen optimiert werden können (z.B. eine addis-Anweisung gefolgt von einer Ladeanweisung). In einem Beispiel ist die Optimierung eine Optimierung der Anweisung bei der Dekodierung (DTIO), und daher kann die Optimierungsfolge hier als eine DTIO-Folge, ein DTIO-Kandidat oder eine DTIO-Kandidatenfolge bezeichnet werden (d.h. ein Kandidat für die DTIO-Optimierung). Wenn die nächsten Anweisungen keine Optimierungsfolge bilden, dann wird die Verarbeitung mit SCHRITT 652 fortgesetzt. Wenn jedoch die nächsten Anweisungen Optimierungskandidaten sind, dann wird eine neue Gruppe begonnen und die Anweisungen der Optimierungsfolge werden in SCHRITT 650 zur neuen Gruppe hinzugefügt.
  • Es wird zur ABFRAGE 654 zurückgegangen. Wenn keine weiteren Anweisungsslots in der Gruppe vorliegen, dann wird in SCHRITT 658 die Anweisungsgruppe durch die Pipeline zur weiteren Verarbeitung weitergeleitet. Zu dieser Verarbeitung gehört z.B. eine weitere Dekodierung, das Durchführen von Optimierungen und/oder das Ausführen von einer oder mehreren der Gruppe zugeordneten Anweisungen (wie als Beispiele eine Anweisung der Gruppe und/oder eine der Gruppe zugeordnete optimierte Anweisung). Darüber hinaus wird in ABFRAGE 660 bestimmt, ob mehrere Anweisungen zu verarbeiten sind. Falls mehrere Anweisungen zur Verarbeitung vorliegen, dann wird die Verarbeitung mit SCHRITT 650 fortgesetzt. Andernfalls ist diese Ausführungsform der Bildung von Dekodierungsgruppen abgeschlossen.
  • In der oben beschriebenen Ausführungsform werden die Anweisungen analysiert, um zu bestimmen, ob die nächsten Anweisungen in der Folge eine Optimierungsfolge bilden, wie eine DTIO-Folge. In einer anderen Ausführungsform wird die Analyse jedoch reduziert, indem einfach bestimmt wird, ob die nächste Anweisung den Beginn einer möglichen oder potentiellen Optimierungsfolge darstellt. Zum Beispiel, wenn es sich bei der nächsten Anweisung um eine addis-Anweisung handelt, dann wird davon ausgenommen, dass eine Optimierungsfolge vorliegt, ohne dass die Anweisung(en) nach der addis-Anweisung analysiert werden. Wenn die nächste Anweisung den Beginn einer möglichen Optimierungsfolge darstellt, dann wird eine neue Gruppe begonnen. Eine Ausführungsform dieser Logik wird mit Bezugnahme auf 6C beschrieben.
  • In dieser Ausführungsform wird in SCHRITT 670 eine neue leere Gruppe begonnen, und eine abgerufene Anweisung wird in SCHRITT 672 zur Anweisungsgruppe hinzugefügt. Dann wird in ABFRAGE 674 bestimmt, ob mehrere Anweisungsslots in der Gruppe verfügbar sind. Falls mehrere Anweisungsslots in der Gruppe vorhanden sind, wird weiterhin in ABFRAGE 676 bestimmt, ob die nächste Anweisung den Beginn einer möglichen Optimierungsfolge darstellt. Zum Beispiel ist dies die Art der Anweisung, die für eine Optimierung geeignet ist, wie eine addis-Anweisung. In einem Beispiel kann eine Datenstruktur referenziert werden, die solche Anweisungen oder Parameter für solche Anweisungen auflistet und/oder vordefinierte Optimierungskriterium können zur Bestimmung verwendet werden.
  • Wenn bestimmt wird, dass die Anweisung nicht den Beginn einer möglichen Optimierungsfolge darstellt, dann geht die Verarbeitung zu SCHRITT 672 weiter, in dem die Anweisung zur Anweisungsgruppe hinzugefügt wird. Wenn jedoch die nächste Anweisung den Beginn einer möglichen Optimierungsfolge darstellt, dann wird in SCHRITT 670 eine neue Gruppe begonnen.
  • Es wird zur ABFRAGE 674 zurückgegangen. Wenn keine weiteren Anweisungsslots in der Gruppe vorliegen, dann wird in SCHRITT 678 die Anweisungsgruppe durch die Pipeline zur weiteren Verarbeitung weitergeleitet. Darüber hinaus wird in ABFRAGE 680 bestimmt, ob mehrere Anweisungen zu verarbeiten sind. Falls mehrere Anweisungen vorliegen, dann wird die Verarbeitung mit SCHRITT 670 fortgesetzt. Andernfalls ist diese Ausführungsform der Technik zur Bildung von Dekodierungsgruppen abgeschlossen.
  • Wenngleich die Schritte in den 6A bis 6C der Reihe nach dargestellt sind, ist für Fachleute verständlich, dass ein oder mehrere Schritte parallel ausgeführt werden können. Dies gilt auch für andere in dem vorliegenden Dokument beschriebene Logikdiagramme.
  • Wird jedes Mal, wenn eine Anweisung den Beginn einer Optimierungsfolge oder den Beginn einer möglichen Optimierungsfolge darstellt, eine neue Gruppe erstellt, kann dies zu einer schlechten Gruppenbildungsqualität führen, wenn dies im Übermaß erfolgt. Es wird z.B. davon ausgegangen, dass der letzte Slot in einer Gruppe eine Add Immediate Shift-Anweisung (addis) enthalten soll, und es wird festgelegt, dass beim Abruf einer addis-Anweisung eine neue Gruppe begonnen werden soll. Somit ist das letzte Slot der Gruppe leer, und eine neue Gruppe wird begonnen. Die nächste Anweisung ist nun jedoch eine Subtraktionsanweisung, die nicht mit der Add-Immediate-Shift-Anweisung optimiert werden würde. Nun verfügt Gruppe 1 grundlos über ein leeres Slot. Somit wird gemäß einem Aspekt der Beginn einer Optimierungsgruppe im Cache bei einem I-Abruf-Ladevorgang (I-Fetch Load) markiert. Somit wird anstelle der Analyse der Kandidatenfolge bei jedem Abruf der Anweisungen in den Prozessor eine Kandidatenoptimierungsfolge bestimmt, indem weitere Informationen im Anweisungscache gespeichert werden. Wenn dann die I-Abruf-Logik eine Anweisung abruft, erhält sie eine Markierung zusammen mit der Anweisung, die z.B. angibt, dass eine solche Anweisung als erste Anweisung in einer Optimierungsfolge betrachtet wird. In einer Ausführungsform kann die Anweisung als die erste Anweisung in einer Optimierungsfolge markiert sein, selbst wenn dies nicht vollständig bestimmt wurde, jedoch die Möglichkeit dazu besteht. Wenn z.B. festgelegt wird, dass nur eine Teilanalyse durchgeführt wird, bevor die Angabe gemacht wird, aber basierend auf dieser Teilanalyse davon ausgegangen wird, dass die Anweisung die erste Anweisung in einer Optimierungsfolge sein kann, wird sie als Beginn einer Optimierungsfolge markiert. Die Markierung verringert den Verarbeitungsoverhead bei der Analyse der Kandidatenfolgen und kann es ermöglichen, dass weitere umfassendere Analysen durchgeführt werden.
  • Eine Ausführungsform der zur Markierung von Anweisungen zugehörigen Logik wird mit Bezugnahme auf 7A beschrieben. Zu Beginn werden in SCHRITT 700 Anweisungen zum Beispiel vom nächsten Level der Cachehierarchie oder aus dem Systemspeicher erhalten. In ABFRAGE 702 wird bestimmt, ob die Anweisung den Beginn einer Optimierungsfolge darstellt oder als solche betrachtet wird. Dies kann durch vordefinierte Kriterien, eine Datenstruktur, die Listen solcher Anweisungen enthält, oder Parameter, die diese Anweisungen beschreiben, oder durch andere Mittel bestimmt werden.
  • Wenn die Anweisung nicht den Beginn einer Optimierungsfolge darstellt, dann wird in SCHRITT 704 die Anweisung dementsprechend markiert (z.B. als kein Startpunkt einer DTIO-Folge). Die Anweisung wird dann in SCHRITT 706 zusammen mit der Markierung im I-Cache abgelegt.
  • Es wird zur ABFRAGE 702 zurückgegangen. Wenn die Anweisung den Beginn einer Optimierungsfolge darstellt, dann wird die Anweisung in SCHRITT 708 als Startpunkt einer Optimierungsfolge markiert, wie eine DTIO-Folge. In einer Ausführungsform wird eine Anweisung als eine Optimierung oder DTIO-Folge markiert, wenn sie bei der Dekodierung einer weiteren Analyse unterzogen werden soll. Die Verarbeitung wird in SCHRITT 706 fortgesetzt, in dem die Anweisung mit der Markierung im Cache abgelegt wird. Die Markierungen werden dann bei Bildung der Dekodierungsgruppe verwendet, wie mit Bezugnahme auf 7B beschrieben.
  • Mit Bezugnahme auf 7B wird in einer Ausführungsform in SCHRITT 730 anfangs eine neue leere Gruppe begonnen. Dann wird in SCHRITT 732 eine abgerufene Anweisung zur Anweisungsgruppe hinzugefügt. In ABFRAGE 734 wird bestimmt, ob mehrere Anweisungsslots in der Gruppe vorhanden sind. Falls mehrere Anweisungsslots in der Gruppe vorhanden sind, wird weiterhin in ABFRAGE 736 bestimmt, ob die nächste Anweisung als Beginn einer möglichen Optimierungsfolge angegeben ist. Ist dies nicht der Fall, dann geht die Verarbeitung weiter zu SCHRITT 732, in dem die Anweisung zur Anweisungsgruppe hinzugefügt wird. Andernfalls geht die Verarbeitung zu SCHRITT 730 weiter, in dem eine neue leere Gruppe begonnen wird.
  • Es wird zur ABFRAGE 734 zurückgegangen. Wenn keine weiteren Anweisungsslots in der Gruppe vorliegen, dann wird in SCHRITT 738 die Verarbeitung fortgesetzt, in dem die Anweisungsgruppe durch die Pipeline zur weiteren Verarbeitung weitergeleitet wird. Darüber hinaus wird in ABFRAGE 740 bestimmt, ob mehrere Anweisungen zu verarbeiten sind. Ist dies der Fall, dann wird die Verarbeitung in SCHRITT 730 fortgesetzt. Andernfalls ist die Verarbeitung abgeschlossen.
  • In einer Ausführungsform kann der Beginn einer neuen Gruppe für jeden Start einer Optimierungsfolge zu einer schlechten Gruppenbildung führen. Wie z.B. in 8A dargestellt, beinhaltet die erste Gruppe die Add-Immediate-Shift-Anweisung, wie auch die Ladeanweisung, ohne die Logik, dass eine neue Gruppe bei jeder Anweisung begonnen wird, die als Beginn einer Optimierungsfolge betrachtet wird; und die zweite Gruppe enthält die Anweisungen i5 bis i8. Wenn jedoch gemäß einem Aspekt eine neue Gruppe für jede Optimierungsfolge begonnen wird, dann wird eine neue Gruppe bei der Add-Immediate-Shift-Anweisung begonnen, wie in 8B dargestellt. In diesem Szenario gibt es zwei nicht belegte Slots in der ersten Gruppe, die nicht benötigt wurden, da die beiden Anweisungen der Optimierungsfolge in die erste Gruppe passen.
  • Somit wird in einer Ausführungsform eine Logik ausgeführt, um nicht notwendigerweise eine neue Gruppe zu Beginn einer Optimierungsfolge zu beginnen, sondern stattdessen nur für diejenigen, die nicht in eine Gruppe passen. Eine Ausführungsform dieser Logik wird mit Bezugnahme auf 9 beschrieben. Wie dargestellt, wird in SCHRITT 900 eine neue leere Gruppe begonnen, und in SCHRITT 902 wird eine abgerufene Anweisung zur Anweisungsgruppe hinzugefügt. Dann wird in ABFRAGE 904 bestimmt, ob mehrere Anweisungsslots in der Gruppe vorhanden sind. Falls mehrere Anweisungsslots in der Gruppe vorhanden sind, wird weiterhin in ABFRAGE 906 bestimmt, ob die nächste Anweisung einen Optimierungskandidaten (z.B. basierend auf den Markierungen, durch Analyse oder durch andere Techniken) darstellt. Ist dies nicht der Fall, dann geht die Verarbeitung weiter zu SCHRITT 902, und die Anweisung wird zur Anweisungsgruppe hinzugefügt. Wenn jedoch die nächsten Anweisungen einen Optimierungskandidaten bilden, dann erfolgt in ABFRAGE 908 eine weitere Bestimmung, ob die Kandidatenfolge in die aktuelle Gruppe passt. Ist dies der Fall, dann geht die Verarbeitung zu SCHRITT 902 weiter, in dem die Anweisung zur Anweisungsgruppe hinzugefügt wird. Somit werden in diesem Beispiel die Anweisungen der Kandidatenfolge in der aktuellen Gruppe abgelegt. Wenn jedoch die Kandidatenfolge nicht in die aktuelle Gruppe passt, dann geht die Verarbeitung zu SCHRITT 900 weiter, in dem eine neue Gruppe erstellt wird, die die Optimierungsfolge enthält.
  • Es wird zur ABFRAGE 904 zurückgegangen. Wenn keine weiteren Anweisungsslots in der Gruppe vorliegen, dann wird in SCHRITT 910 die Anweisungsgruppe durch die Pipeline zur weiteren Verarbeitung weitergeleitet. Darüber hinaus wird in ABFRAGE 912 bestimmt, ob mehrere Anweisungen zu verarbeiten sind. Falls mehrere Anweisungen zur Verarbeitung vorliegen, dann wird die Verarbeitung mit SCHRITT 900 fortgesetzt. Andernfalls ist dieser Aspekt der Dekodierungslogik abgeschlossen.
  • In wiederum einer weiteren Ausführungsform wird der mögliche Start einer Optimierungsfolge im Cache markiert, wenn Anweisungen in den Cache abgerufen werden, und mit der Länge der Optimierungsfolge annotiert (z.B. die Anzahl der Anweisungen in der Optimierungsfolge). Diese Informationen können dann bei der Gruppenbildung verwendet werden.
  • Eine Ausführungsform der Markierung einer Optimierungsfolge oder einer möglichen Optimierungsfolge wird mit Bezugnahme auf 10A beschrieben. Zu Beginn werden in SCHRITT 1000 Anweisungen zum Beispiel aus dem nächsten Level der Cachehierarchie oder dem Systemspeicher erhalten. Es wird in ABFRAGE 1002 bestimmt, ob die Anweisung den Beginn einer Optimierungsfolge darstellt. Wenn die Anweisung nicht dem Beginn einer Optimierungsfolge darstellt, dann wird in SCHRITT 1004 die Anweisung demgemäß markiert (z.B. als kein Startpunkt einer DTIO-Folge). Die Anweisung wird dann in SCHRITT 1006 im I-Cache zusammen mit der Markierungsinformation abgelegt, die angibt, ob es sich um den Beginn einer Optimierungsfolge handelt, sowie die Länge der Folge angibt.
  • Es wird zur ABFRAGE 1002 zurückgegangen. Wenn die Anweisung den Beginn einer Optimierungsfolge darstellt, dann wird in SCHRITT 1008 die Anweisung dementsprechend markiert, zum Beispiel als Startpunkt einer DTIO einschließlich der Längenangabe, und die Verarbeitung geht zu SCHRITT 1006 weiter, in dem die Anweisungen mit der Markierung (z.B. DTIO und Länge) im Cache abgelegt werden.
  • Eine Ausführungsform der Logik der Verwendung des annotierten Anweisungscaches, der die Optimierungsfolgelänge beinhaltet, wird mit Bezugnahme auf 10B beschrieben. Zu Beginn wird eine leere Gruppe in SCHRITT 1030 begonnen. Dann wird in SCHRITT 1032 eine abgerufene Anweisung zur Anweisungsgruppe hinzugefügt. In ABFRAGE 1034 wird weiterhin bestimmt, ob mehrere Anweisungsslots in der Gruppe vorhanden sind. Ist dies der Fall, dann wird in ABFRAGE 1036 eine weitere Bestimmung vorgenommen, ob die nächste Anweisung als Start einer Optimierungsfolge annotiert ist. Wenn die nächste Anweisung nicht dementsprechend annotiert ist, dann geht die Verarbeitung zu SCHRITT 1032 weiter, in dem die Anweisung zur Anweisungsgruppe hinzugefügt wird. Wenn jedoch die nächste Anweisung als Beginn einer Optimierungsfolge annotiert ist, dann wird in ABFRAGE 1038 basierend auf vor der Dekodierung vorliegenden Informationen (z.B. Länge der Folge) eine weitere Bestimmung vorgenommen, ob die Kandidatenfolge, zu der die Anweisung gehört, ganz in die aktuelle Gruppe passt. Wenn sie in die aktuelle Gruppe passt, dann geht die Verarbeitung zu SCHRITT 1032 weiter, in dem die Anweisung zur Anweisungsgruppe hinzugefügt wird. Andernfalls geht die Verarbeitung zu SCHRITT 1030 weiter, in dem eine neue Gruppe begonnen wird, die die Kandidatenfolge enthält.
  • Es wird zur ABFRAGE 1034 zurückgegangen. Wenn keine weiteren Anweisungsslots in der Gruppe vorliegen, dann wird in SCHRITT 1040 die Anweisungsgruppe durch die Pipeline zur weiteren Verarbeitung weitergeleitet. Darüber hinaus wird in ABFRAGE 1042 bestimmt, ob mehrere Anweisungen zu verarbeiten sind. Falls mehrere Anweisungen zur Verarbeitung vorliegen, dann wird die Verarbeitung mit SCHRITT 1030 fortgesetzt. Andernfalls ist die Verarbeitung abgeschlossen.
  • Wie oben beschrieben, ist in einer Ausführungsform eine Optimierungskandidatenfolge vollständig in einer bestimmten Dekodierungsgruppe enthalten. Die Erfassung und Verarbeitung von Kandidatenfolgen folgt oder verwendet in einer Ausführungsform eine oder mehrere Vorlagen. Wenn mehrere Vorlagen vorhanden sind, die angewendet werden können, dann werden die Vorlagen nach Priorität geordnet.
  • Eine Vorlage ist durch mehrere Anweisungen bestimmt, die im Anweisungsstrom vorhanden sein müssen. Eine Vorlage kann eine Eingabe, eine Bedingung und/oder eine Ausgabe enthalten. Die Eingabe ist eine Folge von Anweisungen, die vorliegen müssen. In einer Ausführungsform liegen die durch eine Vorlage zu optimierenden Anweisungen nebeneinander; d.h. ohne dazwischen angeordnete Anweisungen. In einer anderen Ausführungsform jedoch sind dazwischen angeordnete Anweisungen, die sich nicht auf die Operanden der Vorlagenfolge beziehen oder mit diesen intervenieren, enthalten. Anweisungs-Befehlscodes und -Formate müssen denen der angegebenen Anweisungen entsprechen. Es existieren Operandenbeziehungen, wie dass alle Operanden mit gleichem Namen übereinstimmen müssen (z.B. wenn Operand <R1> an verschiedenen Positionen einer Vorlage vorkommt, müssen alle zugehörigen Operandenfelder damit übereinstimmen). Durch Literale angegebene Variablen (d.h. ein direkt dargestellter Wert, wie eine Registernummer, ein numerischer Wert oder ein anderer direkt angegebener Operand) müssen den Wert aufweisen, der durch das direkt in der Anweisung dargestellte Literal angegeben wird.
  • Optional kann eine Vorlagenbedingung, die eine zu erfüllende Bedingung angibt, vorgesehen werden. Zu den Beispielen von Bedingungen gehören unter anderem, dass eine Konstante, die durch eine Anweisung angegeben wird, eine positive Zahl sein muss, oder dass Register paarweise vorliegen müssen usw., damit eine Vorlage anwendbar ist.
  • Die Ausgabe der Vorlage gibt eine optimierte Ausgabefolge an, die eine oder mehrere Anweisungen, die als interne Operationen (IOPs) bezeichnet werden, und Operanden enthält. Sie können Operandenfelder aus der Vorlage angeben; Funktionen zum Generieren neuer Felder, Werte usw., wie jeweils anwendbar; und/oder können Werte angeben, die in Verbindung mit einer fortlaufenden Folgenummer beibehalten werden müssen.
  • Im Allgemeinen kann in einer Ausführungsform die Optimierung der durch Vorlagen dargestellten Kandidatenfolgen eine bestimmte Syntax aufweisen. Zum Beispiel, wenn die Anweisung 1 der ersten Anweisung einer ersten Kandidatenfolge (i1 = cs1.i1) entspricht, und die Anweisung 2 der zweiten Anweisung der ersten Kandidatenfolge (i2 = cs1.i1) entspricht, und Beziehungen zwischen einer Quelle (src (i2)) und einem Ziel (dst (i1)) bestehen, dann ist die Optimierungsfolge gleich der Optimierung für die erste Kandidatenfolge mit den Anweisungen i1 und i2. Wenn dies nicht wahr ist, dann ist die interne Anweisung 1 die Dekodierung von i1, und die interne Anweisung 2 ist die Dekodierung von i2. Dies wird wie folgt dargestellt:
    Figure DE102014109083A1_0002
  • Ein spezielles Vorlagenbeispiel, in dem zwei 16-Bit-Direktfelder in ein einzelnes 32-Bit-Direktfeld durch Verkettung kombiniert werden und die implizite Vorzeichenerweiterung, die durch eine Add-Immediate-Shift-(addis)-Anweisung/Add-Immediate-(addi)-Anweisung beim Verschieben durchgeführt wird, berücksichtigt wird, lautet wie folgt:
    Figure DE102014109083A1_0003
  • Vorlagen können entweder manuell oder über ein Tool in VHDL-(Very high Speed Integrated Circuits – Hardware Description Language)-Code übersetzt werden. Mit dem Code werden die Anweisungen der Vorlage(n) miteinander abgeglichen; die Beziehungen bezüglich der Abhängigkeit/Wiederverwendung von Operanden abgeglichen; und/oder zugehörige Ausgaben generiert.
  • Ein Beispiel von VHDL-Code für die obige Vorlage lautet:
    Figure DE102014109083A1_0004
    Figure DE102014109083A1_0005
  • In wenigstens einer Ausführungsform weist eine Kandidatenfolge mit x Anweisungen weniger Anweisungen auf als eine Dekodierungsgruppe mit y Anweisungen. Somit kann in einer Ausführungsform VHDL-Code automatisch aus einer Vorlage generiert werden, wenn die gleiche Kandidatenfolge erfasst wird und an der ersten Anweisung, der zweiten Anweisung usw. bis zur (y-x)ten Anweisung optimiert wird.
  • In einem weiteren Vorlagenbeispiel kann mehr als eine Anwendung durch die Optimierung ausgegeben werden, wie im Folgenden gezeigt:
    Figure DE102014109083A1_0006
  • Diese Vorlage kombiniert zwei 16-Bit-Direktfelder in ein einzelnes 32-Bit-Direktfeld durch Verkettung und berücksichtigt die implizite Vorzeichenerweiterung, die durch addis/addi beim Verschieben durchgeführt wird. Diese Form generiert ein Zwischenergebnis für r1, da es durch die nächste Anweisung in der Vorlage nicht überschrieben (nicht zerstört) wird. In einer Ausführungsform weisen Vorlagen parallele Semantiken auf, und logische Eingaberegister müssen ohne Bezugnahme auf beliebige Ausgabeumbenennungsregister umbenannt werden, die durch die Umbenennungslogik für Zielregister zugewiesen werden.
  • Obwohl in den obigen Beispielen zwei Anweisungsfolgen dargestellt werden, können andere Folgen mehr als zwei Anweisungen enthalten und immer noch in der gleichen Dekodierungsgruppe enthalten sein. Ein Beispiel einer n (z.B. 3) Anweisungskandidatenfolge enthält z.B.: addpcis+ r4, pc, upper; addi r4, r4, lower; und lvx* vr2, r0, r4. Diese Folge kann in der folgenden Vorlage dargestellt werden:
    Figure DE102014109083A1_0007
  • Die addpcis-Anweisung dient zur Bereitstellung einer relativen Adressierung eines Programmzählers (PC, Program Counter) in einer bestimmten Architektur wie der POWER ISA. Die addpcis-Anweisung ähnelt addis, führt aber den Wert von PC anstelle der Konstanten 0 ein, wenn das RA-Feld den Wert 0 aufweist. Die Funktion pc_or_gpr übernimmt die Erweiterung der speziellen PC-Falles, da der Fall lvd andernfalls den Operanden RA ähnlich wie alle anderen RA-Operanden als einen Nullwert, der 0 darstellt, behandelt, und die anderen Registerwerte das lokale Register darstellen. Lvd ist keine definierte Anweisung von z.B. der POWER-Architektur, sondern wird als interne Operation verwendet, die eine Ladeanweisung mit einer in der Implementierung definierten Verschiebung beschreibt. In einem Beispiel ist lvx* eine Anweisungsform, die das Basisregister (wie 4 in diesem Beispiel) nach Ausführung der Anweisung als mit einem unspezifizierten Wert belegt definiert. In einem Beispiel ist lvx* die neue Form der Anweisung lvx, die eine letzte Verwendung von wenigstens einem Register angibt (wie z.B. hier als Register definiert, das in der Vorlage als <r1> angegeben wird).
  • Eine Ausführungsform eines Decoders, der Vorlagen zur Verwendung zur Erfassung und/oder Verarbeitung von Anweisungsfolgen enthält, darunter die Durchführung von Optimierungen, wird mit Bezugnahme auf 11 beschrieben. In diesem Beispiel ist die Logik zur Dekodierung der Anweisung 1100 mit einer Anweisungsabrufeinheit 1102 und einer oder mehreren Ausführungseinheiten 1104 verbunden. Die Anweisungsabrufeinheit beinhaltet die Anweisungsabruflogik 1106, die auf ein Anweisungsadressregister (IAR, Instruction Address Register) 1108 verweist. Die Anweisungsabruflogik ruft Anweisungen aus dem Anweisungscache I$ 1110 ab, die an die Dekodiereinheit weitergeleitet werden.
  • Die Dekodiereinheit beinhaltet z.B. Puffer 1114 zur Aufnahme der Anweisungen. Die Puffer 1114 sind mit einer Gruppenbildungseinheit 1116 verbunden. Die Gruppenbildung 1116 ist mit einer Gruppendekodierung 1120 verbunden, die die Vorlagenerfassungslogik 1122, Vorlagenoptimierungslogik 1123 und alte Dekodierungslogik 1126 enthält. Die Vorlagenerfassungslogik 1122, die Vorlagenoptimierungslogik 1123 und die alte Dekodierungslogik 1126 sind mit einem Selektor 1128 verbunden. Die Vorlagenerfassungslogik 1122 ist weiterhin mit dem Ende des Dekodierungsgruppen-(EODG, End of Decode Group)-Speichers (Storage) 1130 verbunden, der die bezüglich der Anweisungen erhaltenen Informationen in einer Dekodierungsgruppe speichert. In einer Ausführungsform sind die Informationen für einen Thread vorgesehen und mit einer Thread-ID verknüpft. Das Ende des Dekodierungsgruppen-Speichers 1130 ist ebenso mit dem Speicher 1132 verbunden, der die Thread-ID für Multithreaded-Umgebungen enthält.
  • Mit der Vorlagenerfassungslogik 1122 wird bestimmt, ob eine Vorlage vorliegt, die eine Optimierung für ausgewählte Anweisungen angibt, und die Vorlagenoptimierung wird zur Durchführung von Optimierungen basierend auf den Vorlagen verwendet. Der Selektor 128 wählt die auszuführenden Anweisungen aus (z.B. optimiert oder nicht).
  • Die Gruppenbildung 116 der Anweisungsdekodierungslogik 1100 wird zur Bildung von Gruppen basierend auf den Vorlagen und/oder zur Durchführung von Optimierungen bei der Dekodierung verwendet.
  • Oben werden im Detail verschiedene Techniken zur Bildung von Anweisungsgruppen beschrieben. Eine oder mehrere der Techniken berücksichtigen, ob Anweisungen optimiert werden können, wenn sie in einer bestimmten Art und Weise gruppiert werden, ebenso wie Optimierungen für die Gruppen selbst (z.B. dass keine Slots ohne Grund leer bleiben usw.).
  • In den hier beschriebenen Logikdiagrammen, die mehrere Unterteilungen (z.B. 7A bis 7B, 10A bis 10B usw.) aufweisen, können in einer weiteren Ausführungsform die Teile in einen Ablauf kombiniert werden. Darüber hinaus können bestimmte Schritte parallel ausgeführt werden, wenngleich die verschiedenen Schritte sequenziell dargestellt werden. Weitere Variationen sind ebenso möglich.
  • Fachleute werden verstehen, dass ein oder mehrere Aspekte als System, Verfahren oder Computerprogrammprodukt ausgeführt werden können. Demgemäß können ein oder mehrere Aspekte die Form einer reinen Hardwareausführungsform annehmen, einer reinen Softwareausführungsform (einschließlich Firmware, speicherresidenter Software, Microcode usw.) oder einer Ausführungsform, die Software- und Hardwareaspekte vereint, die alle im Allgemeinen hier als „Schalkreis“, „Modul“, oder „System“ bezeichnet werden können. Weiterhin kann ein Aspekt bzw. können mehrere Aspekte die Form eines Computerprogrammprodukts annehmen, das in einem computerlesbaren Medium oder mehreren computerlesbaren Medien mit computerlesbarem Programmcode darauf verkörpert ist.
  • Jede Kombination aus einem computerlesbaren Medium oder mehreren computerlesbaren Medien kann verwendet werden. Das computerlesbare Medium kann ein computerlesbares Speichermedium sein. Ein computerlesbares Speichermedium kann zum Beispiel, ohne jedoch darauf beschränkt zu sein, ein elektronisches, magnetisches, optisches, elektromagnetisches, Infrarot- oder Halbleitersystem, -vorrichtung, -einrichtung oder jede geeignete Kombination aus dem Vorhergehenden sein. Zu den weiteren speziellen Beispielen (eine nicht erschöpfende Liste) von computerlesbaren Speichermedien gehören folgende: eine elektrische Verbindung mit einem oder mehreren Kabeln, eine tragbare Computerdiskette, eine Festplatte, Direktzugriffsspeicher (RAM bzw. Random Access Memory), Festspeicher (ROM bzw. Read-only Memory), ein löschbarer programmierbarer Festspeicher (EPROM- oder Flash-Speicher), eine Glasfaser, ein tragbarer Compact Disc-Festspeicher (CD-ROM bzw. Compact Disc Read-only Memory), eine optische Speichereinrichtung, eine magnetische Speichereinrichtung oder jede geeignete Kombination des Vorhergehenden. Im Kontext dieses Dokuments kann ein computerlesbares Speichermedium jedes materielle Medium sein, das ein Programm für die Verwendung durch oder in Verbindung mit einem Anweisungsausführungssystem, einer Anweisungsausführungsvorrichtung oder einer Anweisungsausführungseinrichtung enthalten oder speichern kann.
  • Es wird nun auf 12 Bezug genommen. In einem Beispiel weist ein Computerprogrammprodukt 1200 z.B. eine oder mehrere nicht flüchtige computerlesbare Speichermedien 1202 zum Speichern von computerlesbaren Programmcodemitteln oder Logik 1204 darauf auf, um einen oder mehrere Aspekte bereitzustellen und zu ermöglichen.
  • Auf einem computerlesbaren Medium verkörperter Programmcode kann mit einem angemessenen Medium übertragen werden, darunter, ohne darauf beschränkt zu sein, Funk, Kabel, Glasfaser, HF oder jede geeignete Kombination aus dem Vorhergehenden.
  • Computerprogrammcode zum Ausführen der Operationen für einen oder mehrere Aspekte kann in jeder beliebigen Kombination von wenigstens einer Programmiersprache geschrieben sein, darunter objektorientierte Programmiersprachen wie Java, Smalltalk, C++ oder Ähnliches, und herkömmliche prozedurale Programmiersprachen, wie die Programmiersprache „C“, Assembler oder ähnliche Programmiersprachen. Der Programmcode kann ganz auf dem Computer des Benutzers ausgeführt werden, teilweise auf dem Computer des Benutzers, als eigenständiges Softwarepaket, teilweise auf dem Computer des Benutzers und teilweise auf einem entfernten Computer oder ganz auf dem entfernten Computer oder Server. In dem letzteren Szenario kann der entfernte Computer mit dem Computer des Benutzers über jede Art von Netzwerk verbunden sein, darunter ein lokales Netzwerk (LAN bzw. Local Area Network) oder ein Weitverkehrsnetzwerk (WAN bzw. Wide Area Network) oder die Verbindung kann zu einem externen Computer hergestellt werden (zum Beispiel über das Internet mit einem Internetdienstanbieter).
  • Einer oder mehrere Aspekte werden in diesem Dokument mit Bezugnahme auf Flussdiagrammabbildungen und/oder Blockdiagramme von Verfahren, Vorrichtungen (Systemen) und Computerprogrammprodukten gemäß den Ausführungsformen beschrieben. Es versteht sich, dass jeder Block der Flussdiagrammabbildungen und/oder Blockdiagramme und Kombinationen der Blöcke in den Flussdiagrammabbildungen und/oder Blockdiagrammen durch Computerprogrammanweisungen implementiert werden können. Diese Computerprogrammanweisungen können einem Prozessor eines Standardcomputers, eines Spezialcomputers oder einer anderen programmierbaren Datenverarbeitungsvorrichtung bereitgestellt werden, um eine Maschine zu erzeugen, sodass die Anweisungen, die über den Prozessor des Computers oder einer anderen programmierbaren Datenverarbeitungsvorrichtung ausgeführt werden, Mittel zur Implementierung der im Flussdiagramm und/oder Blockdiagrammblock bzw. -blöcken angegebenen Funktionen/Vorgänge erstellen.
  • Diese Computerprogrammanweisungen können auch in einem computerlesbaren Medium gespeichert werden, das einen Computer, eine andere programmierbare Datenverarbeitungsvorrichtung oder andere Einrichtungen anweisen kann, in einer bestimmten Weise zu funktionieren, sodass die auf dem computerlesbaren Medium gespeicherten Anweisungen ein Produkt erstellen, das Anweisungen aufweist, die die Funktion/den Vorgang implementieren, der/die im Flussdiagramm und/oder Blockdiagrammblock bzw. -blöcken angegeben sind.
  • Die Computerprogrammanweisungen können auch auf einen Computer, eine andere programmierbare Datenverarbeitungsvorrichtung oder andere Einrichtungen geladen werden, um die Durchführung einer Reihe operativer Schritte auf dem Computer oder anderen programmierbaren Vorrichtungen oder anderen Einrichtungen zu veranlassen, um einen computerimplementierten Prozess zu erzeugen, sodass die auf dem Computer oder der programmierbaren Vorrichtung ausgeführten Anweisungen die Prozesse zum Implementieren der Funktionen/Vorgänge bereitstellen, die in dem Flussdiagramm und/oder Blockdiagrammblock bzw. -blöcken angegeben sind.
  • Die Flussdiagramme und die Blockdiagramme in den Abbildungen (FIG.) veranschaulichen die Architektur, Funktionalität und Operation möglicher Implementierungen der Systeme, Verfahren und Computerprogrammprodukte gemäß verschiedener Ausführungsformen von einem oder mehreren Aspekten. In dieser Hinsicht kann jeder Block in den Flussdiagrammen oder in den Blockdiagrammen ein Modul, ein Segment oder einen Codeabschnitt darstellen, der eine oder mehrere ausführbare Anweisungen zur Implementierung der angegebenen logischen Funktion(en) aufweist. Es sollte ebenso beachtet werden, dass in einigen alternativen Implementierungen die im Block angegebenen Funktionen nicht in der in den FIG. angegeben Reihenfolge auftreten können. Zum Beispiel können in Abhängigkeit von der beinhalteten Funktionalität zwei aufeinanderfolgende Blöcke im Wesentlichen gleichzeitig ausgeführt werden, oder Blöcke können manchmal in der umgekehrten Reihenfolge ausgeführt werden. Es sollte auch beachtet werden, dass jeder Block in den Blockdiagramm- und/oder Flussdiagrammabbildungen und die Kombinationen der Blöcke in den Blockdiagramm- und/oder Flussdiagrammabbildungen durch hardwarebasierte Spezialsysteme, die die angegebenen Funktionen oder Vorgänge ausführen, oder Kombinationen von Spezialhardware und Computeranweisungen implementiert werden können.
  • Zusätzlich zum oben Ausgeführten können eine oder mehrere Aspekte von einem Serviceanbieter vorgesehen, angeboten, bereitgestellt, verwaltet, unterstützt usw. werden, der das Management von Kundenumgebungen anbietet. Z.B. kann der Serviceanbieter für einen oder mehrere Kunden Computercode und/oder Computerinfrastruktur erstellen, warten, unterstützen usw., der/die eine oder mehrere Aspekte durchführt. Als Gegenleistung kann der Serviceanbieter eine Bezahlung vom Kunden zum Beispiel im Rahmen eines Abonnements und/oder einer Gebührenvereinbarung erhalten. Darüber hinaus kann der Serviceanbieter alternativ eine Bezahlung aus dem Verkauf von Werbeinhalten an eine oder mehrere Dritte erhalten.
  • In einem Aspekt kann eine Anwendung zur Durchführung von einem oder mehreren Aspekten bereitgestellt werden. Als ein Beispiel umfasst das Deployment einer Anwendung die Bereitstellung der Computerinfrastruktur, die zur Durchführung von einem oder mehreren Aspekten funktionswirksam ist.
  • Als weiterer Aspekt kann eine Computing-Infrastruktur bereitgestellt werden, die die Integration von computerlesbaren Code in ein Computing-System umfasst, in das der Code in Kombination mit dem Computing-System dazu ausgebildet ist, einen oder mehrere Aspekte durchzuführen.
  • Als wiederum weiterer Aspekt kann ein Prozess zur Integration von Computing-Infrastruktur bereitgestellt werden, der die Integration von computerlesbarem Code in einem Computersystem beinhaltet. Das Computersystem weist ein computerlesbares Medium auf, wobei das Computermedium eine oder mehrere Aspekte aufweist. Der Code in Kombination mit dem Computersystem ist dazu ausgebildet, einen oder mehrere Aspekte durchzuführen.
  • Obwohl verschiedene Ausführungsformen oben beschrieben werden, sind es nur Beispiele. Zum Beispiel können Verarbeitungsumgebungen anderer Architekturen einen oder mehrere Aspekte beinhalten und verwenden. Darüber hinaus können Anweisungsgruppen verschiedener Größen gebildet werden und/oder Veränderungen an den Bildungstechniken vorgenommen werden. Darüber hinaus können weitere Vorlagenarten verwendet werden. Es sind viele Variationen möglich.
  • Weiterhin können andere Arten von Computing-Umgebungen von einem oder mehreren Aspekten profitieren. Als Beispiel kann ein zum Speichern und/oder Ausführen von Programmcode geeignetes Datenverarbeitungssystem dienen, das wenigstens zwei Prozessoren enthält, die direkt oder indirekt mit Systemspeicherelementen über einen Systembus gekoppelt sind. Die Systemspeicherelemente können zum Beispiel lokalen Systemspeicher enthalten, der bei der konkreten Ausführung von Programmcode genutzt wird, Massenspeicher und Cache-Systemspeicher, die einen temporären Speicher für wenigsten einen Teil des Programmcodes bereitstellen, damit Code bei der Ausführung nicht so oft aus dem Massenspeicher abgerufen werden muss.
  • Eingabe/Ausgabe (Input/Output) oder I/O-Einrichtungen (einschließlich, ohne darauf beschränkt zu sein, Tastaturen, Monitore, Zeigegeräte, DASD, Bänder, CDs, DVDs, USB-Speichersticks und andere Speichermedien usw.) können mit dem System entweder direkt oder durch zwischengeschaltete I/O-Controller verbunden sein. Netzwerkadapter können ebenso mit dem System verbunden sein, um dem Datenverarbeitungssystem die Verbindung mit anderen Datenverarbeitungssystemen oder entfernten Druckern oder Speichereinrichtungen über zwischengeschaltete private oder öffentliche Netzwerke zu ermöglichen. Modems, Kabelmodems und Ethernetkarten sind nur ein paar der verfügbaren Arten von Netzwerkadaptern.
  • Es wird auf 13 Bezug genommen. Repräsentative Komponenten eines Hostcomputersystems 5000 zur Implementierung von einem oder mehreren Aspekten werden dargestellt. Der repräsentative Hostcomputer 5000 weist eine oder mehrere CPUs 5001 auf, die in Kommunikation mit dem Computer-Systemspeicher (Computer Memory) (d.h. den zentralen Speicher, Central Storage) 5002 stehen, wie auch I/O-Schnittstellen zum Speichern von Medieneinrichtungen 5011 und Netzwerke 5010 zur Kommunikation mit anderen Computern oder SANs und Ähnlichem. Die CPU 5001 ist zu einer Architektur kompatibel, die einen definierten Anweisungssatz und eine architekturdefinierte Funktionalität besitzt. Die CPU 5001 kann über eine dynamische Adressübersetzung (DAT, Dynamic Address Translation) 5003 zur Umwandlung von Programmadressen (virtuellen Adressen) in konkrete Systemspeicheradressen verfügen. Ein DAT weist in der Regel einen Translation Lookaside-Puffer (TLB) 5007 auf, um Übersetzungen im Cache abzulegen, sodass spätere Zugriffe auf den Block des Computer-Systemspeichers 5002 keine Verzögerung der Adressübersetzung nach sich ziehen. In der Regel kommt ein Cache 5009 zwischen dem Computer-Systemspeicher 5002 und dem Prozessor 5001 zum Einsatz. Der Cache 5009 kann hierarchisch sein und einen großen Cache, der für mehr als eine CPU verfügbar ist, und kleinere, schnellere (Low Level) Caches zwischen dem großen Cache und jeder CPU aufweisen. In einigen Implementierungen sind die Low Level-Caches aufgeteilt, um eigene Low Level-Caches zum Abruf von Anweisungen und zum Zugriff auf Daten bereitzustellen. In einer Ausführungsform wird eine Anweisung aus dem Systemspeicher 5002 durch eine Anweisungsabrufeinheit 5004 über einen Cache 5009 abgerufen. Die Anweisung wird in einer Anweisungsdekodiereinheit 5006 dekodiert und (mit anderen Einweisungen in einigen Ausführungsformen) an eine Anweisungsausführungseinheit bzw. Anweisungsausführungseinheiten 5008 weitergeleitet. In der Regel werden verschiedene Ausführungsformen 5008 eingesetzt, zum Beispiel eine arithmetische Ausführungseinheit, eine Gleitkomma-Ausführungseinheit und eine Verzweigungsanweisungs-Ausführungseinheit. Die Anweisung wird dann von der Ausführungseinheit ausgeführt, wobei auf Operanden aus in Anweisungen angegebenen Registern oder Systemspeicher nach Bedarf zugegriffen wird. Wenn auf einen Operanden aus dem Systemspeicher 5002 zugegriffen werden soll (geladen oder gespeichert), verwaltet eine Lade-/Speichereinheit 5005 in der Regel den Zugriff unter Steuerung der ausgeführten Anweisung. Anweisungen können in Hardwareschaltkreisen oder internem Microcode (Firmware) oder durch eine Kombination von beiden ausgeführt werden.
  • Wie angemerkt, weist ein Computersystem Informationen im lokalen (oder Haupt-)Speicher ((Main) Storage) auf, ebenso wie die Adressierung, den Schutz und die Referenz und die Änderungsaufzeichnung. Zu den Aspekten der Adressierung gehören das Format der Adressen, das Konzept der Adressräume, die verschiedenen Adressarten und die Art und Weise, in der eine Adressart in eine andere Adressart übersetzt wird. Zum Hauptspeicher gehören permanent zugewiesene Speicherorte. Der Hauptspeicher stellt dem System die direkt adressierbare Datenspeicherung mit schnellem Zugriff bereit. Sowohl Daten als auch Programme müssen in den Hauptspeicher (von Eingabeeinrichtungen) geladen werden, bevor sie verarbeitet werden können.
  • Der Hauptspeicher kann eine oder mehrere kleinere Pufferspeicher mit schnellerem Zugriff beinhalten, die manchmal als Caches bezeichnet werden. Ein Cache ist in der Regel physisch einer CPU oder einem I/O-Prozessor zugeordnet. Mit Ausnahme hinsichtlich der Leistung sind die Auswirkungen der physischen Gestaltung und die Verwendung verschiedenartiger Speichermedien im Allgemeinen vom Programm nicht nachvollziehbar.
  • Eigene Caches können für Anweisungen und für Datenoperanden unterhalten werden. Informationen in einem Cache werden in fortlaufenden Bytes in einer integralen Begrenzung (Boundary) namens Cacheblock oder Cache-Line (oder kurz ausgedrückt Line) gehalten. Ein Modell kann eine Anweisung EXTRACT CACHE ATTRIBUTE bereitstellen, die die Größe einer Cache-Line in Byte zurückgibt. Ein Modell kann auch die Anweisungen PREFETCH DATA und PREFETCH DATA RELATIVE LONG bereitstellen, was sich auf den Vorababruf von Speicher in den Daten- oder Anweisungscache oder die Freigabe von Daten aus dem Cache auswirkt.
  • Speicher wird als lange horizontale Zeichenfolge von Bits betrachtet. Bei den meisten Operationen erfolgen die Speicherzugriffe in der Reihenfolge von links nach rechts. Die Zeichenfolge von Bits ist in Einheiten von 8 Bit unterteilt. Eine 8-Bit-Einheit wird als Byte bezeichnet, dies ist der Grundbaustein aller Informationsformate. Jeder Byte-Speicherort im Speicher wird durch eine eindeutige nichtnegative Ganzzahl identifiziert, die die Adresse des Byte-Speicherorts oder einfach ausgedrückt die Byte-Adresse ist. Angrenzende Byte-Speicherorte weisen fortlaufende Adressen auf, wobei links mit 0 begonnen und die Folge von links nach rechts fortgesetzt wird. Adressen sind vorzeichenlose binäre Ganzzahlenwerte und bestehen aus 24, 31 oder 64 Bits.
  • Informationen werden zwischen dem Speicher und einer CPU oder einem Channel-Subsystem zu einem Zeitpunkt über ein Byte oder über eine Byte-Gruppe übertra- gen. Sofern nicht andere anderweitig angegeben, wird zum Beispiel in der z/Architecture® eine Byte-Gruppe im Speicher über das am weitesten links stehende Byte der Gruppe adressiert. Der Anzahl der Bytes in der Gruppe wird entweder implizit oder explizit von der durchzuführenden Operation angegeben. Wird eine Byte-Gruppe in einer CPU-Operation verwendet, wird sie als ein Feld bezeichnet. In jeder Byte-Gruppe werden zum Beispiel in der z/Architecture® die Bits in der Reihenfolge von links nach rechts durchnummeriert. In der z/Architecture® werden die am weitesten Links stehenden Bits manchmal als Bits „höherer Ordnung” und die am weitesten rechts stehenden Bits als Bits „niedriger Ordnung” bezeichnet. Die Bit-Nummern sind jedoch keine Speicheradressen. Es können nur Byte adressiert werden. Um ein einzelnes Bit eines Byte im Speicher zu verarbeiten, wird auf das gesamte Byte zugegriffen. Die Bits in einem Byte sind von 0 bis 7 von links nach rechts durchnummeriert (zum Beispiel in der z/Architecture®). Die Bits in einer Adresse können durchnummeriert sein als 8–31 oder 40–63 für 24-Bit-Adressen, oder 1–31 oder 33–63 für 31-Bit-Adressen; für 64-Bit-Adressen sind sie von 0–63 durchnummeriert. In jedem anderen Format fester Länge mit mehreren Bytes werden die Bits, die das Format bilden, fortlaufend ab 0 durchnummeriert. Zum Zwecke der Fehlererfassung und vorzugsweise zur Korrektur können ein oder mehrere Prüfbits mit jedem Byte oder mit einer Byte-Gruppe übertragen werden. Solche Prüfbits werden automatisch von der Maschine generiert und können nicht direkt vom Programm gesteuert werden. Speicherkapazitäten werden als Byte-Zahlenwert angegeben. Wenn die Länge eines Speicher-Operanden-Feldes durch den Befehlscode einer Anweisung impliziert ist, wird davon ausgegangen, dass das Feld eine feste Länge aufweist, was 1, 2, 4, 8 oder 16 Byte lang sein kann. Größere Felder können für einige Anweisungen impliziert werden. Wenn die Länge eines Speicher-Operandenfeldes nicht implizit, sondern explizit angegeben ist, wird davon ausgegangen, dass das Feld eine variable Länge aufweist. Operanden mit variabler Länge können in der Länge in 1-Byte-Schritten variieren (oder bei einigen Anweisungen um das Mehrfache von 2 Byte oder andere Mehrfache). Wenn die Informationen im Speicher abgelegt werden, werden nur die Inhalte der Byte-Speicherorte ersetzt, die in dem angegebenen Feld enthalten sind, selbst wenn der physische Speicherpfad breiter als die Länge des zu speichernden Feldes sein kann.
  • Bestimmte Informationseinheiten befinden sich im Speicher auf einer integralen Grenze. Eine Grenze wird für eine Informationseinheit als integral bezeichnet, wenn die Speicheradresse ein Mehrfaches der Länge der Einheit in Byte ist. Felder mit 2, 4, 8 und 16 Byte an einer integralen Grenze tragen spezielle Bezeichnungen. Ein halbes Wort ist eine Gruppe von zwei aufeinanderfolgenden Bytes an einer 2-Byte-Grenze und ist der Grundbaustein von Anweisungen. Ein Wort ist eine Gruppe von vier aufeinanderfolgenden Bytes in einer 4-Byte-Begrenzung. Ein Doppelwort ist eine Gruppe von acht aufeinanderfolgenden Byte in einer 8-Byte-Begrenzung. Ein Vierfachwort ist eine Gruppe von 16 aufeinanderfolgenden Byte an einer 16-Byte-Begrenzung. Wenn Speicheradressen Halbwörter, Wörter, Doppelwörter und Vierfachwörter angeben, enthält die binäre Darstellung der Adresse jeweils ganz rechts stehende ein, zwei, drei oder vier 0 Bit. Anweisungen müssen in den integralen Begrenzungen von 2 Bytes stehen. Die Speicheroperanden der meisten Anweisungen weisen keine Anforderungen bezüglich der Ausrichtung der Begrenzung auf.
  • Bei Einrichtungen, die eigene Caches für Anweisungen und Datenoperanden implementieren, kann eine wesentliche Verzögerung auftreten, wenn das Programm in eine Caches-Line speichert, aus der Anweisungen nacheinander abgerufen werden, unabhängig davon, ob die Speicherung die darauffolgenden abgerufenen Anweisungen ändert.
  • In einer Ausführungsform kann die Erfindung durch Software ausgeübt werden (manchmal als lizenzierter interner Code, Firmware, Microcode, Millicode, Picocode oder Ähnliches bezeichnet, wobei jeder davon mit einem oder mehreren Aspekten der vorliegenden Erfindung vereinbar ist). Es wird auf 13 Bezug genommen. Der Prozessor 5001 des Hostsystems 5000 kann auf Softwareprogrammcode, der einen oder mehrere Aspekte verkörpert, von den Langzeit-Speichermedieneinrichtungen 5011 zugreifen, wie ein CD-ROM-Laufwerk, ein Bandlaufwerk oder ein Festplattenlaufwerk. Der Softwareprogrammcode kann auf einer beliebigen einer Vielzahl von für die Verwendung mit einem Datenverarbeitungssystem bekannten Medien wie einer Diskette, einer Festplatte oder einer CD-ROM verkörpert werden. Der Code kann auf solchen Medien verteilt wird, oder kann an die Benutzer aus dem Computer-Systemspeicher 5002 oder dem Speicher von einem Computersystem über ein Netzwerk 5010 an andere Computersysteme zur Verwendung durch die Benutzer solcher anderen Systeme verteilt werden.
  • Der Softwareprogrammcode beinhaltet ein Betriebssystem, das die Funktion und Interaktion der verschiedenen Computerkomponenten und eines Anwendungsprogrammes oder mehrerer Anwendungsprogramme steuert. Der Programmcode wird normalerweise von der Speichermedieneinrichtung 5011 seitenweise in einen vergleichsweise schnelleren Computerspeicher 5002 ausgelagert, wo er für die Verarbeitung durch den Prozessor 5001 verfügbar ist. Die Techniken und Verfahren zur Ausführung von Softwareprogrammcode im Systemspeicher, auf physischen Medien und/oder die Verteilung von Softwarecode über Netzwerke sind wohl bekannt und werden im vorliegenden Dokument nicht weiter erörtert. Programmcode, der auf einem beweglichen Medium erstellt und gespeichert wurde (einschließlich, aber nicht beschränkt auf elektronische Speichermodule (RAM), Flash-Speicher, Compact Discs (CDs), DVDs, Magnetband oder Ähnliches) wird häufig als „Computerprogrammprodukt” bezeichnet. Das Computerprogrammprodukt-Medium kann in der Regel von einem Verarbeitungsschaltkreis gelesen werden, vorzugsweise in einem Computersystem zur Ausführung durch den Verarbeitungsschaltkreis.
  • 14 veranschaulicht eine repräsentative Workstation oder ein Server-Hardwaresystem, in dem eine oder mehrere Aspekte ausgeübt sein können. Das System 5020 von 14 weist ein repräsentatives Basiscomputersystem 5021 auf, wie einen Personal Computer, eine Workstation oder einen Server einschließlich optionaler Peripherieeinrichtungen. Das Basiscomputersystem 5021 weist einen oder mehrere Prozessoren 5026 und einen Bus auf, der zur Verbindung und Ermöglichung der Kommunikation zwischen dem Prozessor/den Prozessoren 5026 und den anderen Komponenten des Systems 5021 gemäß bekannter Techniken dient. Der Bus verbindet den Prozessor 5026 mit dem Systemspeicher 5025 und Langzeitspeicher 5027, der zum Beispiel ein Festplattenlaufwerk (einschließlich zum Beispiel ein beliebiges magnetisches Medium, CD, DVD und Flash-Speicher) oder ein Bandlaufwerk beinhalten kann. Das System 5021 kann auch einen Benutzerschnittstellenadapter beinhalten, der den Mikroprozessor 5026 über den Bus mit einer oder mehreren Schnittstelleneinrichtungen verbindet, wie eine Tastatur 5024, eine Maus 5023, einen Drucker/Scanner 5030 und/oder andere Schnittstelleneinrichtungen, die eine beliebige Benutzerschnittstelleneinrichtung sein können, wie ein berührungsempfindlicher Bildschirm, ein digitales Eingabepad usw. Der Bus verbindet auch über einen Anzeigeadapter eine Anzeigeeinrichtung 5022, wie einen LCD-Bildschirm oder einen Monitor mit dem Mikroprozessor 5026.
  • Das System 5021 kann mit anderen Computern oder Computernetzwerken mittels eines Netzwerkadapterkabels kommunizieren, das dazu ausgebildet ist, mit einem Netzwerk 5021 zu kommunizieren 5028. Beispiele von Netzwerkadaptern sind Kommunikationskanäle, Token Ring, Ethernet oder Modems. Alternativ kann das System 5021 mittels einer Funkschnittstelle, wie einer CDPD(Cellular Digital Packet Data)-Karte Daten austauschen. Das System 5021 kann mit anderen Computern in einem lokalen Netzwerk (LAN, Local Area Network) oder einem Weitverkehrsnetzwerk (WAN, Wide Area Network) verknüpft sein, oder das System 5021 kann ein Client in einer Client/Server-Anordnung mit anderen Computern usw. sein. Alle diese Konfigurationen wie auch die entsprechende Kommunikationshardware und -software sind im Stand der Technik bekannt.
  • 15 veranschaulicht ein Datenverarbeitungsnetzwerk 5040, in dem ein oder mehrere Aspekte verkörpert sein können. Das Datenverarbeitungsnetzwerk 5014 kann mehrere einzelne Netzwerke enthalten, wie ein Funknetzwerk und ein kabelbasiertes Netzwerk, von denen jedes mehrere einzelne Workstations 5041, 5042, 5043, 5044 enthält. Darüber hinaus, können, wie für Fachleute ersichtlich ist, ein oder mehrere LANs enthalten sein, wobei ein LAN eine Vielzahl mit einem Hostprozessor verbundene intelligente Workstations aufweisen kann.
  • Es wird weiterhin auf 15 Bezug genommen. Die Netzwerke können auch Mainframe-Computer oder -Server enthalten, wie einen Gateway-Computer (Client-Server 5046) oder einen Anwendungsserver (Fernserver 5048, der auf ein Daten-Repository zugreifen kann und auf den direkt von einer Workstations 5045 zugegriffen werden kann). Ein Gateway-Computer 5046 dient als Einstiegspunkt in jedes einzelne Netzwerk. Ein Gateway ist bei der Verbindung von einem Netzwerkprotokoll mit einem anderen erforderlich. Der Gateway 5046 kann vorzugsweise über ein Kommunikationslink mit einem anderen Netzwerk verbunden sein (zum Beispiel dem Internet 5047). Der Gateway 5046 kann auch direkt mit einer Workstation oder mehreren Workstations 5041, 5042, 5043, 5044 mittels eines Kommunikationslinks verbunden sein. Der Gateway-Computer kann unter Verwendung eines IBM eServerTM System z®-Servers implementiert werden, der von der International Business Machines Corporation erhältlich ist.
  • Es wird auf 14 und 15 Bezug genommen. Der Prozessor 5026 des Systems 5020 kann auf Softwareprogramcode, der einen oder mehrere Aspekte verkörpert, aus den Langzeit-Speichermedieneinrichtungen 5027 zugreifen, wie einem CD-ROM-Laufwerk oder einem Festplattenlaufwerk. Der Softwareprogrammcode kann auf einer beliebigen einer Vielzahl von für die Verwendung mit einem Datenverarbeitungssystem bekannten Medien wie einer Diskette, einer Festplatte oder einer CD-ROM ausgeführt werden. Der Code kann auf solchen Medien verteilt werden, oder kann an die Benutzer 5050, 5051 aus dem Systemspeicher (Memory) oder Speicher (Storage) von einem Computersystem über ein Netzwerk an andere Computersysteme zur Verwendung durch die Benutzer dieser anderen Systeme verteilt werden.
  • Alternativ kann der Programmcode im Systemspeicher 5025 verkörpert sein, und der Prozessor 5026 kann darauf über den Prozessorbus zugreifen. Ein solcher Programmcode beinhaltet ein Betriebssystem, das die Funktion und Interaktion der verschiedenen Computerkomponenten und eines oder mehrerer Anwendungsprogramme 5032 steuert. Der Programmcode wird normalerweise von den Speichermedien 5027 in einen Hochgeschwindigkeits-Systemspeicher 5025 seitenweise ausgelagert, wo er für die Verarbeitung durch den Prozessor 5026 verfügbar ist. Die Techniken und Verfahren zur Ausführung von Softwareprogrammcode im Systemspeicher, auf physischen Medien und/oder die Verteilung von Softwarecode über Netzwerks sind wohl bekannt und werden im vorliegenden Dokument nicht weiter erörtert. Programmcode, der auf einem beweglichen Medium erstellt und gespeichert wurde (einschließlich, aber nicht beschränkt auf elektronische Speichermodule (RAM), Flash-Speicher, Compact Discs (CDs), DVDs, Magnetband oder Ähnliches) wird häufig als „Computerprogrammprodukt” bezeichnet. Das Computerprogrammprodukt-Medium kann in der Regel von einem Verarbeitungsschaltkreis gelesen werden, vorzugsweise in einem Computersystem zur Ausführung durch den Verarbeitungsschaltkreis.
  • Der Cache, der für den Prozessor am besten verfügbar ist (in der Regel schneller und kleiner als andere Prozessorcaches) ist der unterste (L1 oder Level 1) Cache und die Hauptspeichereinheit (Hauptsystemspeicher, Main Memory) ist der höchste Cache (L3, sofern drei Level vorhanden sind). Der Cache auf der untersten Ebene ist oftmals in einen Anweisungscache (I-Cache), der die auszuführenden Maschinenanweisungen enthält, und einen Datencache (D-Cache), der die Datenoperanden enthält, unterteilt.
  • Es wird nun auf 16 Bezug genommen. Eine beispielhafte Prozessorausführungsform ist für den Prozessor 5026 dargestellt. In der Regel werden ein oder mehrere Cache-Level 5053 verwendet, um Systemspeicherblöcke zur Verbesserung der Prozessorleistung zu puffern. Der Cache 5053 ist ein Hochgeschwindigkeitspuffer, der die Cache-Lines der Systemspeicherdaten enthält, die wahrscheinlich verwendet werden. Typische Cache-Lines sind Systemspeicherdaten in 64, 128 oder 256 Byte-Darstellung. Eigene Caches werden oft zum Caching von Anweisungen anstelle des Cachings von Daten genutzt. Die Kohärenz des Caches (Synchronisierung der Line-Kopien im Systemspeicher und in den Caches) wird oft durch verschiedene „Snoop“-Algorithmen bereitgestellt, die im Stand der Technik wohl bekannt sind. Der Hauptsystemspeicher-Speicher 5025 (Main Memory Storage) eines Prozessorsystems wird oftmals als Cache bezeichnet. In einem Prozessorsystem mit vier Leveln an Cache 5053 wird eine Hauptspeichereinheit 5025 manchmal als Level 5(L5)-Cache bezeichnet, da sie in der Regel schneller ist und nur einen Teil des für das Computersystem verfügbaren nichtflüchtigen Speichers (DASD, Band usw.) enthält. Die Hauptspeichereinheit 5025 „legt“ Datenseiten, die seitenweise in die Hauptspeichereinheit 5025 vom Betriebssystem eingelagert und ausgelagert werden, im Cache ab.
  • Ein Programmzähler (Anweisungszähler) 5061 verfolgt die Adresse der aktuellen auszuführenden Anweisung. Ein Programmzähler in einem z/Architecture®-Prozessor weist 64 Bit auf und kann auf 31 oder 24 Bit abgeschnitten werden, um ältere Adressierungsgrenzen zu unterstützen. Ein Programmzähler wird typischerweise in einem PSW (Program Status Word, Programmstatuswort) eines Computers ausgeführt, sodass er während eines Kontextwechsels weiterhin erhalten bleibt. Somit kann ein in Ausführung befindliches Programm mit einem Programmzähler zum Beispiel vom Betriebssystem (Kontextwechsel von der Programmumgebung zur Betriebssystemumgebung) unterbrochen werden. Das PSW des Programms behält den Programmzählerwert bei, wenn das Programm nicht aktiv ist, und der Programmzähler (im PSW) des Betriebssystem wird verwendet, während das Betriebssystem in Ausführung ist. In der Regel wird der Programmzähler im Betrag erhöht, der der Anzahl von Bytes der aktuellen Anweisung entspricht. RISC(Reduced Instruction Set Computing)-Anweisungen haben in der Regel eine feste Länge, während CISC(Complex Instruction Set Computing)-Anweisungen in der Regel eine variable Länge aufweisen. Anweisungen der IBM z/Architecture® sind CISC-Anweisungen mit einer Länge von 2, 4 oder 6 Byte. Der Programmzähler 5061 wird zum Beispiel entweder durch eine Kontextwechseloperation oder eine Verzweigungsoperation einer Verzweigungsanweisung geändert. Bei einer Kontextwechseloperation wird der aktuelle Programmzählerwert im Programmstatuswort zusammen mit anderen Zustandsinformationen über das ausgeführte Programm (wie zum Beispiel Bedingungscodes) gespeichert, und ein neuer Programmzählerwert wird geladen, der auf eine Anweisung eines auszuführenden neuen Programmmoduls zeigt. Eine Verzweigungsoperation wird durchgeführt, damit das Programm Entscheidungen oder Schleifen im Programm machen kann, indem das Ergebnis der Verzweigungsanweisung in den Programmzähler 5061 geladen wird.
  • In der Regel kommt eine Anweisungsabrufeinheit 5055 zum Abrufen der Anweisungen für den Prozessor 5026 zum Einsatz. Die Abrufeinheit ruft entweder „die nächsten sequenziellen Anweisungen”, Zielanweisungen der Verzweigungsanweisungen oder die ersten Anweisungen eines Programms nach einem Kontextwechsel ab. Moderne Anweisungsabrufeinheiten nutzen oft Techniken zum Vorababruf, um in spekulativer Weise Anweisungen vorab abzurufen, basierend auf der Wahrscheinlichkeit, dass die vorab abgerufenen Anweisungen verwendet werden könnten. Zum Beispiel kann eine Abrufeinheit 16 Byte einer Anweisung, die die nächste sequenzielle Anweisung beinhaltet, und weitere Bytes der weiteren sequenziellen Anweisungen abrufen.
  • Die abgerufenen Anweisungen werden dann vom Prozessor 5026 ausgeführt. In einer Ausführungsform werden die abgerufene(n) Anweisung(en) an eine Verteilungseinheit 5056 der Abrufeinheit übergeben. Die Verteilungseinheit dekodiert die Anweisung(en) und leitet Informationen über die dekodierten Anweisung(en) an die entsprechenden Einheiten 5057, 5058, 5060 weiter. Eine Ausführungseinheit 5057 erhält in der Regel Informationen über dekodierte arithmetische Anweisungen von der Anweisungsabrufeinheit 5055 und führt arithmetische Operationen an Operanden gemäß dem Befehlscode der Anweisung durch. Der Ausführungseinheit 5057 werden Operanden vorzugsweise entweder aus dem Systemspeicher 5025, den definierten Registern 5059 oder von einem Direktfeld der ausgeführten Anweisung bereitgestellt. Sofern Ergebnisse der Ausführung gespeichert werden, werden sie entweder im Systemspeicher 5025, den Registern 5059 oder in anderer Maschinenhardware (wie den Kontrollregistern, PSW-Registern und Ähnlichem) gespeichert.
  • Ein Prozessor 5026 weist in der Regel eine oder mehrere Einheiten 5057, 5058, 5060 zum Ausführen der Anweisungsfunktion auf. Es wird auf 17A Bezug genommen. Eine Ausführungseinheit 5057 kann mit definierten allgemeinen Registern 5059, einer Dekodierung-/Verteilungseinheit 5056, einer Lade-/Speichereinheit 5060 und anderen 5065 Prozessoreinheiten über die Schnittstellenlogik 5071 kommunizieren. Eine Ausführungseinheit 5057 kann verschiedene Registerschaltkreise 5067, 5068, 5069 nutzen, um Informationen aufzubewahren, die von der arithmetischen Logikeinheit (ALU, Arithmetic Logic Unit) 5066 verarbeitet werden. Die ALU führt arithmetische Operationen wie die Addition, die Subtraktion, die Multiplikation und Division wie auch logische Funktionen wie AND, OR und exklusives OR (XOR), Rotationen und Verschiebungen durch. Die ALU unterstützt vorzugsweise Spezialoperationen, die designabhängig sind. Andere Schaltkreise können andere definierte Einrichtungen 5072 bereitstellen, darunter zum Beispiel Bedingungscodes und Logik zur Unterstützung der Wiederherstellung. In der Regel wird das Ergebnis einer ALU-Operation in einem Ausgaberegisterschaltkreis 5070 gehalten, der das Ergebnis an eine Vielzahl anderer Verarbeitungsfunktionen weiterleiten kann. Es gibt viele Anordnungen der Prozessoreinheiten, die vorliegende Beschreibung ist nur dazu gedacht, ein repräsentatives Verständnis einer Ausführungsform bereitzustellen.
  • Eine ADD-Anweisung wird zum Beispiel in einer Ausführungseinheit 5057 mit arithmetischer und logischer Funktionalität ausgeführt, während eine Gleitkommaanweisung zum Beispiel in einer Gleitkommaausführung mit spezieller Gleitkomma-Einrichtung ausgeführt wird. Eine Ausführungseinheit bearbeitet vorzugsweise durch eine Anweisung angegebene Operanden, indem eine im Befehlscode definierte Funktion an den Operanden ausgeführt wird. Zum Beispiel kann eine ADD-Anweisung von einer Ausführungseinheit 5057 an Operanden ausgeführt werden, die in zwei Registern 5059 stehen, die durch die Registerfelder der Anweisung angegeben werden.
  • Die Ausführungseinheit 5057 führt die arithmetische Addition an zwei Operanden durch und speichert das Ergebnis in einem dritten Operanden, wobei der dritte Operand ein drittes Register oder eines der beiden Quelleregister sein kann. Die Ausführungseinheit nutzt vorzugsweise eine arithmetische Logikeinheit (ALU) 5066, die dazu ausgestaltet ist, eine Vielzahl von logischen Funktionen, wie Verschieben (Shift), Rotieren (Rotate), And, Or und XOR sowie eine Vielzahl von algebraischer Funktionen wie eine beliebige von der Addition, der Subtraktion, der Multiplikation und der Division durchzuführen. Einige ALUs 5066 sind für skalarer Operationen und einige für Gleitkomma-Operationen ausgelegt. Daten können je nach Architektur im Big Endian (wobei das niedrigstwertige Byte an der höchsten Byte-Adresse steht) oder Little Endian (wobei das niedrigstwertige Byte an der niedrigsten Byte-Adresse steht) vorliegen. Die IBM z/Architecture® verwendet Big Endian. Vorzeichenbehaftete Felder können je nach Architektur Vorzeichen und Betrag, Einerkomplemente oder Zweierkomplemente sein. Eine Zweierkomplementzahl ist dahingehend vorteilhaft, dass die ALU keine Subtraktionseinrichtung entwerfen muss, da entweder ein negativer Wert oder ein positiver Wert im Zweierkomplement in ALU nur eine Addition erfordert. Zahlen werden allgemein in Kurzform angegeben, wobei zum Beispiel ein 12-Bit-Feld eine Adresse eines 4.096-Byte-Blocks definiert und im Allgemeinen als ein 4 KB (Kilobyte) Block beschrieben wird.
  • Es wird auf 17B Bezug genommen. Die Verzweigungsanweisungsinformation zum Ausführen einer Verzweigungsanweisung wird in der Regel zur einer Verzweigungseinheit 5058 gesendet, die oftmals einen Verzweigungsvorhersage-Algorithmus, wie eine Verzweigungshistorientabelle 5028 einsetzt, um das Ergebnis der Verzweigung vorherzusagen, bevor andere bedingte Operationen abgeschlossen werden. Das Ziel der aktuellen Verzweigungsanweisung wird abgerufen und spekulativ ausgeführt, bevor die bedingten Operationen abgeschlossen werden. Wenn die bedingten Operationen abgeschlossen sind, werden die spekulativ ausgeführten Verzweigungsanweisungen basierend auf den Bedingungen der bedingten Operationen und dem vermuteten Ergebnis entweder abgeschlossen oder verworfen. Eine typische Verzweigungsanweisung kann Bedingungscodes testen und zu einer Zieladresse verzweigen, wenn die Verzweigungscodes die Verzweigungsanforderung der Verzweigungsanweisung erfüllen, eine Zieladresse kann basierend kann auf verschiedenen Zahlen berechnet werden, darunter zum Beispiel diejenigen, die in Registerfeldern oder einem Direktfeld der Anweisung stehen. Die Verzweigungseinheit 5058 kann eine ALU 5074 mit einer Vielzahl von Eingaberegisterschaltkreisen 5075, 5076, 5077 und einem Ausgaberegisterschaltkreis 5080 verwenden. Die Verzweigungseinheit 5058 kann zum Beispiel mit allgemeinen Registern 5059, der Dekodierungs-Verteilungs-Einheit 5056 oder anderen Schaltkreisen 5072 kommunizieren.
  • Die Ausführung einer Anweisungsgruppe kann aus verschiedenen Gründen unterbrochen werden, darunter zum Beispiel ein vom Betriebssystem initiierter Kontextwechsel, ein Programmausnahmefehler oder ein Fehler, der einen Kontextwechsel verursacht, ein I/O-Unterbrechungssignal, das einen Kontextwechsel verursacht, oder eine Multithreading-Aktivität von mehreren Programmen (in einer Multithreaded-Umgebung). Eine Kontextwechselaktion speichert vorzugsweise Zustandsinformationen über ein aktuell ausgeführtes Programm und lädt dann Zustandsinformationen über ein weiteres Programm, das gerade aufgerufen wird. Die Zustandsinformationen können zum Beispiel in Hardwareregistern oder im Systemspeicher gespeichert werden. Die Zustandsinformationen umfassen vorzugsweise einen Programmzählerwert, der auf die nächste auszuführende Anweisung zeigt, Bedingungscodes, Systemspeicherübersetzungsinformationen und definierte Registerinhalte. Eine Kontextwechselaktivität kann von Hardwareschaltkreisen, Anwendungsprogrammen, Betriebssystemprogrammen oder Firmware-Code (Microcode, Picocode oder lizenzierter interner Code (LIC, Licensed Internal Code)) alleine oder in Kombination ausgeführt werden.
  • Ein Prozessor greift auf Operanden gemäß der in Anweisungen definierten Verfahren zu. Die Anweisung kann einen Direktoperanden unter Verwendung des Werts eines Anweisungsbereiches bereitstellen, kann ein oder mehrere Registerfelder bereitstellen, die explizit entweder auf allgemeine Register oder spezielle Register (Gleitkommaregister zum Beispiel) zeigen. Die Anweisung kann implizite Register nutzen, die durch ein Befehlscodefeld als Operanden angegeben sind. Die Anweisung kann Systemspeicher-Speicherorte für Operanden nutzen. Ein Systemspeicher-Speicherort eines Operanden kann von einem Register, einem Direktfeld oder einer Kombination aus Registern und Direktfeld bereitgestellt werden, wie zum Beispiel durch die Einrichtung mit langer Verschiebung (Long Displacement Facility) z/Architecture® dargestellt, wobei die Anweisung ein Basisregister, ein Indexregister und ein Direktfeld (Verschiebungsfeld) definiert, die miteinander addiert werden, um die Adresse des Operanden im Speicher bereitzustellen. Der Speicherort impliziert hier in der Regel einen Speicherort im Hauptsystemspeicher (Hauptspeicher, Main Storage), sofern nicht anders angegeben.
  • Es wird auf 17C Bezug genommen. Ein Prozessor greift auf die Speichereinheit unter Verwendung einer Lade-/Speichereinheit 5060 zu. Die Lade-/Speichereinheit 5060 kann eine Ladeoperation durchführen, indem die Adresse des Zieloperanden im Systemspeicher 5053 erhalten wird, und den Operanden in ein Register 5059 oder einen anderen Speicherort im Systemspeicher 5053 laden, oder kann eine Speicherungsoperation durchführen, indem die Adresse des Zieloperanden im Systemspeicher 5053 erhalten und aus einem Register 5059 oder einem anderen Speicherort des Systemspeichers 5053 im Zieloperanden-Speicherort im Systemspeicher 5053 erhaltene Daten gespeichert werden. Die Lade-/Speichereinheit 5060 kann spekulativ arbeiten und kann auf den Speicher in einer Reihenfolge zugreifen, die bezüglich der Anweisungsfolge außerhalb der Reihenfolge ist. Die Lade-/Speichereinheit 5060 muss jedoch für Programme den Anschein wahren, dass Anweisungen der Reihenfolge nach ausgeführt wurden. Eine Lade-/Speichereinheit 5060 kann mit allgemeinen Registern 5059, der Dekodierung-/Verteilungseinheit 5056, der Cache-/Systemspeicherschnittstelle 5053 oder anderen Elementen 5083 kommunizieren und verschiedene Registerschaltkreise, ALUs 5085 und Steuerlogik 5090 zur Berechnung von Speicheradressen aufweisen und die Pipeline-Verarbeitung sequenziell bereitstellen, damit die Operationen geordnet erfolgen. Einige Operationen können außerhalb der Reihenfolge erfolgen, aber die Lade-/Speichereinheit stellt Funktionalität bereit, damit die außerhalb der Reihenfolge durchgeführten Operationen für das Programm als in der Reihenfolge durchgeführt dargestellt werden, wie im Stand der Technik wohl bekannt ist.
  • Adressen, die einem Anwendungsprogramm „dargestellt werden”, werden oftmals als virtuelle Adressen bezeichnet. Virtuelle Adressen werden manchmal als „logische Adressen” und „effektive Adressen” bezeichnet. Diese virtuellen Adressen sind insofern virtuell, als dass sie auf physische Speicherorte im Systemspeicher durch eine von mehreren dynamischen Adressübersetzungs-(DAT, Dynamic Address Translation)-Technologien umgeleitet werden, darunter, ohne darauf beschränkt zu sein, dass eine virtuelle Adresse mit einem Offsetwert einfach mit einem Präfix versehen wird, dass die virtuelle Adresse über eine oder mehrere Übersetzungstabellen übersetzt wird, wobei die Übersetzungstabellen vorzugsweise wenigstens eine Segmenttabelle und eine Seitentabelle allein oder in Kombination aufweisen, wobei die Segmenttabelle vorzugsweise einen Eintrag aufweist, der auf die Seitentabelle zeigt. In der z/Architecture® wird eine Übersetzungshierarchie bereitgestellt, die beinhaltet eine erste Bereichstabelle, eine zweite Bereichstabelle, eine dritte Bereichstabelle, eine Segmenttabelle und eine optionale Seitentabelle. Die Leistung der Adressübersetzung wird oftmals durch Verwendung eines Translation-Lookaside-Puffers (TLB) verbessert, der Einträge aufweist, die eine virtuelle Adresse einem zugehörigen physischen Speicherort im Systemspeicher zuordnen. Der Einträge werden erstellt, wenn DAT eine virtuelle Adresse mithilfe von Übersetzungstabellen übersetzt. In der nachfolgenden Verwendung einer virtuellen Adresse kann dann der Eintrag des schnellen TLB anstelle des langsamen sequenzielle Zugriffs auf die Übersetzungstabelle genutzt werden. TLB-Inhalte können durch eine Vielzahl von Ersetzungsalgorithmen, darunter LRU (Least Recently Used) verwaltet werden.
  • In dem Fall, in dem es sich bei dem Prozessor um einen Prozessor eines Multiprozessorsystems handelt, ist jeder Prozessor dafür verantwortlich, gemeinsam verwendete Ressourcen vorzuhalten, wie I/O, Caches, TLBs und Systemspeicher, die zum Zwecke der Kohärenz gegenseitig gesperrt werden. In der Regel werden „Snoop”-Technologien genutzt, um die Cache-Kohärenz beizubehalten. In einer Snoop-Umgebung kann jede Cache-Line als in einem von einem gemeinsam genutzten Zustand, einem ausschließlichen Zustand, einem veränderten Zustand, einem ungültigen Zustand und Ähnliches befindlich markiert sein, um die gemeinsame Verwendung zu vereinfachen.
  • Die I/O-Einheiten 5054 (16) stellen dem Prozessor zum Beispiel Mittel zum Hinzufügen von Peripherieeinrichtungen wie Bänder, Platten, Drucker, Anzeigeeinrichtungen und Netzwerke bereit. I/O-Einheiten werden dem Computerprogramm oft durch Softwaretreiber zur Verfügung gestellt. In Mainframe-Systemen, wie dem System z® von IBM®, sind Cannel-Adapter und offene Systemadapter die I/O-Einheiten des Mainframes, die die Kommunikation zwischen dem Betriebssystem und den Peripheriegeräten ermöglichen.
  • Weiterhin können andere Arten von Computing-Umgebungen von einem oder mehreren Aspekten profitieren. Als Beispiel kann eine Umgebung einen Emulator (zum Beispiel Software oder andere Emulationsmechanismen) enthalten, in dem eine bestimmte Architektur (darunter zum Beispiel die Ausführung von Anweisungen, definierte Funktionen, wie Adressübersetzungen und definierte Register) oder eine Teilmenge davon emuliert wird (zum Beispiel auf einem nativen Computersystem mit einem Prozessor und Systemspeicher). In solch einer Umgebung können eine oder mehrere Emulationsfunktionen des Emulators eine oder mehrere Aspekte implementieren, selbst wenn ein Computer, der den Emulator ausführt, eine andere Architektur als die emulierten Einrichtungen aufweist. Als ein Beispiel wird im Emulationsmodus die spezielle zu emulierende Anweisung oder Operation dekodiert, und eine zugehörige Emulationsfunktion wird erstellt, um die einzelne Anweisung oder Operation zu implementieren.
  • In einer Emulationsumgebung weist ein Hostcomputer zum Beispiel einen Systemspeicher auf, um Anweisungen und Daten zu speichern; eine Anweisungsabrufeinheit, um Anweisungen aus dem Systemspeicher abzurufen und um optional eine lokale Pufferung für die abgerufene Anweisung bereitzustellen; eine Anweisungsdekodiereinheit zum Empfangen der abgerufenen Anweisungen und zum Bestimmen der Art der abgerufenen Anweisungen; und eine Anweisungsausführungseinheit zum Ausführen der Anweisungen. Die Ausführung kann das Laden von Daten in ein Register aus dem Systemspeicher beinhalten; das Speichern von Daten zurück in den Systemspeicher aus einem Register; oder das Durchführen bestimmter arithmetischer oder logischer Operationen gemäß der Bestimmung durch die Dekodiereinheit. In einem Beispiel wird jede Einheit in der Software implementiert. Zum Beispiel werden die von den Einheiten durchgeführten Operationen als eine oder mehrere Subroutinen in der Emulationssoftware implementiert.
  • Im Besonderen werden in einem Mainframe definierte Maschinenanweisungen von Programmierern verwendet, heute in der Regel „C”-Programmierern, oftmals im Rahmen einer Compileranwendung. Diese in einem Speichermedium gespeicherten Anweisungen können nativ auf einem z/Architecture® IBM®-Server oder alternativ auf Maschinen, die andere Architekturen ausführen, ausgeführt werden. Sie können in bestehenden und zukünftigen IBM®-Mainframe-Servern und anderen IBM®-Maschinen (wie Power-Systems-Servern und xSeries®-Servern) emuliert werden. Sie können in Maschinen, die Linux ausführen, auf verschiedensten Maschinen, die von IBM®, Intel®, AMDTM und anderen hergestellte Hardware verwenden, ausgeführt werden. Neben der Ausführung auf dieser Hardware unter einer z/Architecture®-Architektur können Linux wie auch Maschinen, die Simulationen von Hercules, UMX oder FSI (Fundamental Software, Inc.) verwenden, in denen die Ausführung im Allgemeinen in einem Emulationsmodus erfolgt, verwendet werden. Im Emulationsmodus wird die Emulationssoftware von einem nativen Prozessor ausgeführt, um die Architektur eines emulierten Prozessors zu emulieren.
  • Der native Prozessor führt in der Regel die Emulationssoftware, die entweder Firmware oder ein natives Betriebssystem aufweist, zur Durchführung der Emulation auf dem emulierten Prozessor aus. Die Emulationssoftware ist für den Abruf und die Ausführung von Anweisungen der emulierten Prozessorarchitektur verantwortlich. Die Emulationssoftware unterhält einen emulierten Programmzähler, um die Anweisungsgrenzen zu verfolgen. Die Emulationssoftware kann eine oder mehrere emulierte Maschinenanweisungen zu einem Zeitpunkt abrufen und die einen oder mehreren emulierten Maschinenanweisungen in eine entsprechende Gruppe von nativen Maschinenanweisungen zur Ausführung durch den nativen Prozessor konvertieren. Diese konvertierten Anweisungen können im Cache abgelegt werden, sodass eine schnellere Konvertierung erzielt werden kann. Dennoch muss die Emulationssoftware die Architekturregeln der emulierten Prozessorarchitektur beibehalten, um auf diese Weise sicherzustellen, dass für den emulierten Prozessor geschriebene Betriebssysteme und Anwendungen korrekt funktionieren. Weiterhin muss die Emulationssoftware Ressourcen bereitstellen, die von der emulierten Prozessorarchitektur bestimmt werden, darunter zum Beispiel, ohne darauf beschränkt zu sein, Kontrollregister, allgemeine Register, Gleitkommaregister, eine dynamische Adressübersetzungsfunktion mit zum Beispiel Segmenttabellen und Seitentabellen, Interrupt-Mechanismen, Kontextwechselmechanismen, Time of Day(TOD)-Zeitangaben und definierten Schnittstellen zu I/O-Subsystemen, sodass ein zur Ausführung auf dem emulierten Prozessor ausgelegtes Betriebssystem oder Anwendungsprogramm auf dem nativen Prozessor mit der Emulationssoftware ausgeführt werden kann.
  • Eine bestimmte zu emulierende Anweisung wird dekodiert, und eine Subroutine wird aufgerufen, um die Funktion der einzelnen Anweisung durchzuführen. Eine Emulationssoftware-Funktion, die eine Funktion eines emulierten Prozessors emuliert, wird implementiert, zum Beispiel in einer „C”-Subroutine oder als Treiber, oder einem anderen Verfahren zur Bereitstellung eines Treibers für die spezielle Hardware, wie für Fachleute nach Verstehen der Beschreibung der bevorzugten Ausführungsform nachvollziehbar ist. Verschiedene Patente zur Software- und Hardwareemulation, einschließlich, ohne darauf beschränkt zu sein, das U.S.-amerikanische Patent Nr. 5,551,013 , mit dem Titel „Multiprocessor for Hardware Emulation” von Beausoleil et al.; und das U.S.-amerikanische Patent Nr. 6,009,261 mit dem Titel „Preprocessing of Stored Target Routines for Emulating Incompatible Instructions on a Target Processor” von Scalzi et al; und das U.S.-amerikanische Patent-Nr. 5,574,873 mit dem Titel „Decoding Guest Instruction to Directly Access Emulation Routines that Emulate the Guest Instructions”, von Davidian et al; und das U.S.-amerikanische Patent Nr. 6,308,255 mit dem Titel „Symmetrical Multiprocessing Bus and Chipset Used for Coprocessor Support Allowing Non-Native Code to Run in a System” von Gorishek et al; und das U.S.-amerikanische Patent Nr. 6,463,582 mit dem Titel „Dynamic Optimizing Object Code Translator for Architecture Emulation and Dynamic Optimizing Object Code Translation Method” von Lethin et al; und das U.S.-amerikanische Patent-Nr. 5,790,825 mit dem Titel „Method for Emulating Guest Instructions on a Host Computer Through Dynamic Recompilation of Host Instructions” von Eric Traut, die jeweils hierin durch Referenz vollständig enthalten sind; und viele andere, die eine Vielzahl bekannter Möglichkeiten zur Verwirklichung der Emulation eines für eine andere Maschine definierten Anweisungsformats auf einer Zielmaschine veranschaulichen, sind für die Fachleute verfügbar.
  • In 18 wird ein Beispiel eines emulierten Hostcomputersystems 5092 bereitgestellt, das ein Hostcomputersystem 5000' einer Hostarchitektur emuliert. Im emulierten Hostcomputersystem 5092 ist der Hostprozessor (CPU) 5091 ein emulierter Hostprozessor (oder virtueller Hostprozessor) und weist einen Emulationsprozessor 5093 mit einer anderen nativen Anweisungssatz-Architektur auf als die des Prozessors 5091 des Hostcomputers 5000'. Das emulierte Hostcomputersystem 5092 weist den Speicher 5094 auf, auf den der Emulationsprozessor 5093 zugreifen kann. In der beispielhaften Ausführungsform wird der Systemspeicher 5094 in einen Hostcomputerspeicher-Bereich 5096 und einen Emulationsroutinen-Bereich 5097 unterteilt. Der Hostcomputer-Systemspeicher 5096 ist für Programme des emulierten Hostcomputers 5092 gemäß der Hostcomputerarchitektur verfügbar. Der Emulationsprozessor 5093 führt native Anweisungen eines definierten Anweisungssets einer Architektur aus, die sich von der des emulierten Prozessors 5091 unterscheidet, wobei die nativen Anweisungen aus dem Emulationsroutinenspeicher 5097 erhalten werden, und kann auf eine Hostanweisung zur Ausführung von einem Programm im Hostcomputerspeicher 5096 durch Nutzung einer oder mehrerer in einer Sequenz- und Zugriffs-/Dekodierungsroutine erhaltenen Anweisung(en) zugreifen, die die zugegriffenen Hostanweisung(en) dekodieren kann/können, um eine native Anweisungsausführungsroutine zur Emulation der Funktion der Hostanweisung, auf die zugegriffen wurde, zu bestimmen. Weitere Einrichtungen, die für die Architektur des Hostcomputersystems 5000' definiert sind, können durch definierte Einrichtungsroutinen emuliert werden, einschließlich Einrichtungen wie zum Beispiel allgemeine Register, Kontrollregistern, dynamische Adressübersetzung und Unterstützung des I/O-Subsystems und des Prozessorcaches. Die Emulationsroutinen können auch Funktionen nutzen, die im Emulationsprozessor 5093 verfügbar sind (wie allgemeine Register und die dynamische Übersetzung virtueller Adressen), um die Leistung der Emulationsroutinen zu verbessern. Spezielle Hardware und Off-Load-Engines können ebenso bereitgestellt werden, um den Prozessor 5093 bei der Emulation der Funktion des Hostcomputers 5000' zu unterstützen.
  • Die hier verwendete Terminologie dient nur dem Zweck, bestimmte Ausführungsformen zu beschreiben und ist nicht dazu gedacht, die Erfindung einzuschränken. Wie hier verwendet, sind die Singularformen „ein“, „eine“ und „der“, „die” „das” dazu gedacht, auch die Pluralformen einzuschließen, sofern der Kontext dies nicht klar anderweitig angibt. Es versteht sich, dass der Begriff „aufweist“ oder „aufweisend“, wenn er in dieser Beschreibung verwendet wird, zur Angabe des Vorhandenseins angegebener Merkmale, Ganzzahlen, Schritte, Operationen, Elemente und/oder Komponenten verwendet wird, dies aber nicht das Vorhandensein oder das Hinzufügen eines oder mehrerer Merkmale, einer oder mehrerer Ganzzahlen, einer oder mehrerer Schritte, einer oder mehrerer Operationen, eines oder mehrerer Elemente, einer oder mehrerer Komponenten und/oder Gruppen hiervon ausschließt.
  • Die zugehörigen Strukturen, Materialien, Vorgänge und Entsprechungen aller Mittel oder Schritte zusammen mit den Funktionselementen in den folgenden Ansprüchen sind, falls vorliegend, dazu gedacht, jede beliebige Struktur, jedes beliebige Material oder jeden beliebigen Vorgang einzuschließen, um die Funktion in Kombination mit anderen beanspruchten Elementen wie im Besonderen beansprucht durchzuführen. Die Beschreibung von einem oder mehreren Aspekten wurde zum Zwecke der Veranschaulichung und Beschreibung dargelegt, ist aber nicht dazu gedacht, erschöpfend oder auf die offengelegte Form der Erfindung beschränkt zu sein. Für Fachleute werden viele Veränderungen und Variationen ersichtlich sein, ohne dabei vom Umfang und Geist der Erfindung abzuweichen. Die Ausführungsform wurde gewählt und in der Reihenfolge beschrieben, um die Prinzipien der Erfindung und der praktischen Anwendung am besten zu erklären und um anderen Fachleuten zu ermöglichen, die Erfindung in verschiedenen Ausführungsformen mit verschiedenen Änderungen zu verstehen, wie sie für die bestimmte vorgesehene Verwendung geeignet sind.
  • ZITATE ENTHALTEN IN DER BESCHREIBUNG
  • Diese Liste der vom Anmelder aufgeführten Dokumente wurde automatisiert erzeugt und ist ausschließlich zur besseren Information des Lesers aufgenommen. Die Liste ist nicht Bestandteil der deutschen Patent- bzw. Gebrauchsmusteranmeldung. Das DPMA übernimmt keinerlei Haftung für etwaige Fehler oder Auslassungen.
  • Zitierte Patentliteratur
    • US 5551013 [0157]
    • US 6009261 [0157]
    • US 5574873 [0157]
    • US 6308255 [0157]
    • US 6463582 [0157]
    • US 5790825 [0157]
  • Zitierte Nicht-Patentliteratur
    • „z/Architecture Principles of Operation”, IBM-Publikation Nr. SA22-7832-09, Tenth Edition, September 2012 [0036]
    • „Power ISA Version 2.07,” International Business Machines Corporation, vom 3. Mai 2013 [0037]

Claims (15)

  1. Ein Verfahren zur Durchführung einer Verarbeitung in einer Verarbeitungsumgebung, wobei das Verfahren beinhaltet: Erhalten von einem Prozessor einer in der Verarbeitungsumgebung auszuführenden Anweisung; Bestimmen, ob die Anweisung in eine aktuelle Anweisungsgruppe oder eine neue Anweisungsgruppe aufgenommen werden soll, wobei die Bestimmung darauf basiert, ob die Anweisung ein Optimierungskandidat durch eine weitere Anweisung gemäß einem Optimierungskriterium ist; basierend auf der Bestimmung, dass die Anweisung in die neue Anweisungsgruppe aufgenommen werden soll, Bilden der neuen Anweisungsgruppe, wobei die neue Anweisungsgruppe die Anweisung und die weitere Anweisung enthält; und basierend auf dem Bilden der neuen Anweisungsgruppe, Ausführen von wenigstens einer Anweisung, die der neuen Anweisungsgruppe zugeordnet ist.
  2. Das Verfahren nach Anspruch 1, wobei die Bestimmung aufweist, die Bestimmung, ob die Anweisung einen Beginn einer möglichen Optimierungsfolge darstellt, die die Anweisung und die weitere Anweisung enthält, und wobei die Bildung die neue Anweisungsgruppe basierend auf der Anweisung bildet, die den Beginn einer möglichen Optimierungsfolge darstellt.
  3. Das Verfahren nach Anspruch 2, wobei die Bestimmung, ob die Anweisung den Beginn einer möglichen Optimierungsfolge darstellt, ein Prüfen einer der Anweisung zugeordneten Markierung aufweist, wobei die Markierung angibt, ob die Anweisung eine mögliche Optimierungsfolge einleitet.
  4. Das Verfahren nach Anspruch 3, wobei das Verfahren weiterhin aufweist, ein Markieren der Anweisung mit der Markierung, wobei die Markierung eines angibt von: die Anweisung wird als Darstellung des Beginns einer möglichen Optimierungsfolge betrachtet, oder die Anweisung wird nicht als Darstellung des Beginns einer möglichen Optimierungsfolge betrachtet, und wobei die Markierung beim Abrufen der Anweisung durchgeführt wird.
  5. Das Verfahren nach Anspruch 1, wobei das Bestimmen, ob die Anweisung in die aktuelle Anweisungsgruppe oder in die neue Anweisungsgruppe aufgenommen werden soll, weiterhin aufweist: Prüfen, ob eine zu optimierende Anweisungsfolge, die wenigstens die Anweisung und die weitere Anweisung enthält, in die aktuelle Gruppe passt; und Bilden der neuen Gruppe basierend auf der Bestimmung, dass die Anweisung ein Optimierungskandidat ist und die Anweisungsfolge nicht in die aktuelle Gruppe passt.
  6. Das Verfahren nach Anspruch 5, wobei die Prüfung eine Prüfung einer der Anweisung zugeordneten Markierung aufweist, wobei die Markierung eine Länge der Anweisungsfolge angibt.
  7. Das Verfahren nach Anspruch 6, wobei das Verfahren weiterhin aufweist: Bestimmen einer Anzahl von Anweisungen in der Anweisungsfolge; und Markieren der Anweisung mit einer Markierung, die die Anzahl der Anweisungen angibt, wobei die Markierung beim Abruf der Anweisung durchgeführt wird.
  8. Das Verfahren nach Anspruch 1, wobei das Optimierungskriterium in einer oder mehreren Vorlagen angegeben ist, und wobei wenigstens eine Vorlage der einen oder mehreren Vorlagen zur Bestimmung zu verwenden ist, ob die Anweisung ein Optimierungskandidat ist.
  9. Das Verfahren nach Anspruch 1, wobei das Optimierungskriterium die Anweisung und die weitere Anweisung optimiert, indem wenigstens eine interne Operation erstellt wird, die wenigstens einen Teilbereich der Anweisung und wenigstens einen Teilbereich der anderen Anweisung darstellt.
  10. Das Verfahren nach Anspruch 1, wobei die Optimierung bei der Dekodierung durchgeführt wird.
  11. Ein Computersystem zur Durchführung einer Verarbeitung in einer Verarbeitungsumgebung, wobei das Computersystem aufweist: einen Systemspeicher; und einen Prozessor, der mit dem Systemspeicher kommuniziert, wobei das Computersystem dazu ausgestaltet ist, ein Verfahren durchzuführen, wobei das Verfahren aufweist: Erhalten einer in der Verarbeitungsumgebung auszuführenden Anweisung; Bestimmen, ob die Anweisung in eine aktuelle Anweisungsgruppe oder eine neue Anweisungsgruppe aufgenommen werden soll, wobei die Bestimmung darauf basiert, ob die Anweisung ein Optimierungskandidat durch eine weitere Anweisung gemäß einem Optimierungskriterium ist; basierend auf der Bestimmung, dass die Anweisung in die neue Anweisungsgruppe aufgenommen werden soll, Bilden der neuen Anweisungsgruppe, wobei die neue Anweisungsgruppe die Anweisung und die weitere Anweisung enthält; und basierend auf dem Bilden der neuen Anweisungsgruppe, Ausführen von wenigstens einer Anweisung, die der neuen Anweisungsgruppe zugeordnet ist.
  12. Das Computersystem nach Anspruch 11, wobei die Bestimmung aufweist, eine Bestimmung, ob die Anweisung einen Beginn einer möglichen Optimierungsfolge darstellt, die die Anweisung und die weitere Anweisung enthält, und wobei das Bilden die neue Anweisungsgruppe basierend auf der Anweisung bildet, die den Beginn einer möglichen Optimierungsfolge darstellt.
  13. Das Computersystem nach Anspruch 12, wobei die Bestimmung, ob die Anweisung den Beginn einer möglichen Optimierungsfolge darstellt, ein Prüfen einer der Anweisung zugeordneten Markierung umfasst, wobei die Markierung angibt, ob die Anweisung eine mögliche Optimierungsfolge einleitet.
  14. Das Computersystem nach Anspruch 11, wobei das Bestimmen, ob die Anweisung in die aktuelle Anweisungsgruppe oder in die neue Anweisungsgruppe aufgenommen werden soll, weiterhin aufweist: Prüfen, ob eine zu optimierende Anweisungsfolge, die wenigstens die Anweisung und die weitere Anweisung enthält, in die aktuelle Gruppe passt; und Bilden der neuen Gruppe basierend auf der Bestimmung, dass die Anweisung ein Kandidat für eine Optimierung ist und die Anweisungsfolge nicht in die aktuelle Gruppe passt.
  15. Ein Computerprogrammprodukt zur Vereinfachung der Verarbeitung in einer Verarbeitungsumgebung, wobei das Computerprogrammprodukt aufweist: ein computerlesbares Speichermedium, das von einem Verarbeitungsschaltkreis lesbar ist und Anweisungen zur Ausführung durch den Verarbeitungsschaltkreis zum Durchführen eines Verfahrens gemäß einem der Ansprüche 1 bis 10 speichert.
DE102014109083.7A 2013-06-28 2014-06-27 Bilden von Anweisungsgruppen basierend auf der Optimierung von Anweisungen bei der Dekodierung Pending DE102014109083A1 (de)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US13/931,698 US9348596B2 (en) 2013-06-28 2013-06-28 Forming instruction groups based on decode time instruction optimization
US13/931,698 2013-06-28

Publications (1)

Publication Number Publication Date
DE102014109083A1 true DE102014109083A1 (de) 2014-12-31

Family

ID=52017537

Family Applications (1)

Application Number Title Priority Date Filing Date
DE102014109083.7A Pending DE102014109083A1 (de) 2013-06-28 2014-06-27 Bilden von Anweisungsgruppen basierend auf der Optimierung von Anweisungen bei der Dekodierung

Country Status (3)

Country Link
US (4) US9348596B2 (de)
CN (1) CN104252336B (de)
DE (1) DE102014109083A1 (de)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9940242B2 (en) 2014-11-17 2018-04-10 International Business Machines Corporation Techniques for identifying instructions for decode-time instruction optimization grouping in view of cache boundaries

Families Citing this family (13)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9372695B2 (en) 2013-06-28 2016-06-21 Globalfoundries Inc. Optimization of instruction groups across group boundaries
US9348596B2 (en) * 2013-06-28 2016-05-24 International Business Machines Corporation Forming instruction groups based on decode time instruction optimization
US9877510B2 (en) * 2014-04-04 2018-01-30 Rai Strategic Holdings, Inc. Sensor for an aerosol delivery device
US9733940B2 (en) 2014-11-17 2017-08-15 International Business Machines Corporation Techniques for instruction group formation for decode-time instruction optimization based on feedback
US10095641B2 (en) * 2015-09-23 2018-10-09 Hanan Potash Processor with frames/bins structure in local high speed memory
US9977693B2 (en) 2015-09-23 2018-05-22 Hanan Potash Processor that uses plural form information
US10140122B2 (en) 2015-09-23 2018-11-27 Hanan Potash Computer processor with operand/variable-mapped namespace
US10067878B2 (en) 2015-09-23 2018-09-04 Hanan Potash Processor with logical mentor
US10061511B2 (en) 2015-09-23 2018-08-28 Hanan Potash Computing device with frames/bins structure, mentor layer and plural operand processing
US11093286B2 (en) 2016-04-26 2021-08-17 Hanan Potash Computing device with resource manager and civilware tier
US20180121202A1 (en) * 2016-11-02 2018-05-03 Intel Corporation Simd channel utilization under divergent control flow
US11327766B2 (en) * 2020-07-31 2022-05-10 International Business Machines Corporation Instruction dispatch routing
CN117311817B (zh) * 2023-11-30 2024-03-08 上海芯联芯智能科技有限公司 一种协处理器控制方法、装置、设备及存储介质

Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5551013A (en) 1994-06-03 1996-08-27 International Business Machines Corporation Multiprocessor for hardware emulation
US5574873A (en) 1993-05-07 1996-11-12 Apple Computer, Inc. Decoding guest instruction to directly access emulation routines that emulate the guest instructions
US5790825A (en) 1995-11-08 1998-08-04 Apple Computer, Inc. Method for emulating guest instructions on a host computer through dynamic recompilation of host instructions
US6009261A (en) 1997-12-16 1999-12-28 International Business Machines Corporation Preprocessing of stored target routines for emulating incompatible instructions on a target processor
US6308255B1 (en) 1998-05-26 2001-10-23 Advanced Micro Devices, Inc. Symmetrical multiprocessing bus and chipset used for coprocessor support allowing non-native code to run in a system
US6463582B1 (en) 1998-10-21 2002-10-08 Fujitsu Limited Dynamic optimizing object code translator for architecture emulation and dynamic optimizing object code translation method

Family Cites Families (76)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5179702A (en) 1989-12-29 1993-01-12 Supercomputer Systems Limited Partnership System and method for controlling a highly parallel multiprocessor using an anarchy based scheduler for parallel execution thread scheduling
US5504932A (en) * 1990-05-04 1996-04-02 International Business Machines Corporation System for executing scalar instructions in parallel based on control bits appended by compounding decoder
US5303356A (en) * 1990-05-04 1994-04-12 International Business Machines Corporation System for issuing instructions for parallel execution subsequent to branch into a group of member instructions with compoundability in dictation tag
US5448746A (en) * 1990-05-04 1995-09-05 International Business Machines Corporation System for comounding instructions in a byte stream prior to fetching and identifying the instructions for execution
US5175856A (en) 1990-06-11 1992-12-29 Supercomputer Systems Limited Partnership Computer with integrated hierarchical representation (ihr) of program wherein ihr file is available for debugging and optimizing during target execution
CA2038264C (en) * 1990-06-26 1995-06-27 Richard James Eickemeyer In-memory preprocessor for a scalable compound instruction set machine processor
IL100990A (en) * 1991-02-27 1995-10-31 Digital Equipment Corp Multilingual optimization compiler that uses Gladi in the production of a multi-pass cipher
JPH0628324A (ja) * 1992-07-06 1994-02-04 Toshiba Corp 並列計算機及びコンパイラ
CA2123442A1 (en) 1993-09-20 1995-03-21 David S. Ray Multiple execution unit dispatch with instruction dependency
US5999737A (en) 1994-03-01 1999-12-07 Digital Equipment Corporation Link time optimization via dead code elimination, code motion, code partitioning, code grouping, loop analysis with code motion, loop invariant analysis and active variable to register analysis
US5832260A (en) * 1995-12-29 1998-11-03 Intel Corporation Processor microarchitecture for efficient processing of instructions in a program including a conditional program flow control instruction
US6000028A (en) 1996-01-29 1999-12-07 Digital Equipment Corporation Means and apparatus for maintaining condition codes in an unevaluated state
US5815719A (en) 1996-05-07 1998-09-29 Sun Microsystems, Inc. Method and apparatus for easy insertion of assembler code for optimization
US5854933A (en) 1996-08-20 1998-12-29 Intel Corporation Method for optimizing a computer program by moving certain load and store instructions out of a loop
JP3327818B2 (ja) 1997-08-29 2002-09-24 松下電器産業株式会社 プログラム変換装置及び記録媒体
US6260190B1 (en) * 1998-08-11 2001-07-10 Hewlett-Packard Company Unified compiler framework for control and data speculation with recovery code
JP3437932B2 (ja) 1999-01-05 2003-08-18 インターナショナル・ビジネス・マシーンズ・コーポレーション 配列レンジ・チェックのためのコード生成方法及び装置、並びにバージョニング方法及び装置
US6185669B1 (en) * 1999-02-18 2001-02-06 Hewlett-Packard Company System for fetching mapped branch target instructions of optimized code placed into a trace memory
US6286094B1 (en) * 1999-03-05 2001-09-04 International Business Machines Corporation Method and system for optimizing the fetching of dispatch groups in a superscalar processor
US6711670B1 (en) 1999-10-14 2004-03-23 Hewlett-Packard Development Company, L.P. System and method for detecting data hazards within an instruction group of a compiled computer program
US6651164B1 (en) 1999-10-14 2003-11-18 Hewlett-Packard Development Company, L.P. System and method for detecting an erroneous data hazard between instructions of an instruction group and resulting from a compiler grouping error
US7257806B1 (en) 1999-10-21 2007-08-14 Hewlett-Packard Development Company, L.P. System and method for efficiently passing information between compiler and post-compile-time software
US6609190B1 (en) * 2000-01-06 2003-08-19 International Business Machines Corporation Microprocessor with primary and secondary issue queue
US6986128B2 (en) * 2000-01-07 2006-01-10 Sony Computer Entertainment Inc. Multiple stage program recompiler and method
CA2321018A1 (en) 2000-09-27 2002-03-27 Ibm Canada Limited-Ibm Canada Limitee Optimizing compilation by forward store movement
US7028286B2 (en) 2001-04-13 2006-04-11 Pts Corporation Methods and apparatus for automated generation of abbreviated instruction set and configurable processor architecture
US7356673B2 (en) * 2001-04-30 2008-04-08 International Business Machines Corporation System and method including distributed instruction buffers for storing frequently executed instructions in predecoded form
TW536684B (en) * 2001-06-20 2003-06-11 Sunplus Technology Co Ltd Micro-controller architecture capable of increasing the code density by changeable instruction format
US7395408B2 (en) * 2002-10-16 2008-07-01 Matsushita Electric Industrial Co., Ltd. Parallel execution processor and instruction assigning making use of group number in processing elements
CA2430383A1 (en) 2003-05-30 2004-11-30 Ibm Canada Limited - Ibm Canada Limitee Efficiently releasing locks when an exception occurs
US7367023B2 (en) 2003-07-10 2008-04-29 International Business Machines Corporation Method and apparatus for generating computer programming code selectively optimized for execution performance and not optimized for serviceability
US7802076B2 (en) 2004-06-24 2010-09-21 Intel Corporation Method and apparatus to vectorize multiple input instructions
US20050289530A1 (en) * 2004-06-29 2005-12-29 Robison Arch D Scheduling of instructions in program compilation
US7480902B2 (en) 2004-07-08 2009-01-20 Intel Corporation Unwind information for optimized programs
JP4783005B2 (ja) 2004-11-25 2011-09-28 パナソニック株式会社 プログラム変換装置、プログラム変換実行装置およびプログラム変換方法、プログラム変換実行方法。
GB2424727B (en) 2005-03-30 2007-08-01 Transitive Ltd Preparing instruction groups for a processor having a multiple issue ports
US20070050605A1 (en) * 2005-08-29 2007-03-01 Bran Ferren Freeze-dried ghost pages
US8214191B2 (en) * 2005-08-29 2012-07-03 The Invention Science Fund I, Llc Cross-architecture execution optimization
US20070050604A1 (en) * 2005-08-29 2007-03-01 Searete Llc, A Limited Liability Corporation Of The State Of Delaware Fetch rerouting in response to an execution-based optimization profile
US7681019B1 (en) * 2005-11-18 2010-03-16 Sun Microsystems, Inc. Executing functions determined via a collection of operations from translated instructions
US7797517B1 (en) * 2005-11-18 2010-09-14 Oracle America, Inc. Trace optimization via fusing operations of a target architecture operation set
US7925860B1 (en) 2006-05-11 2011-04-12 Nvidia Corporation Maximized memory throughput using cooperative thread arrays
US7865885B2 (en) 2006-09-27 2011-01-04 Intel Corporation Using transactional memory for precise exception handling in aggressive dynamic binary optimizations
US20080177980A1 (en) 2007-01-24 2008-07-24 Daniel Citron Instruction set architecture with overlapping fields
US20090204791A1 (en) 2008-02-12 2009-08-13 Luick David A Compound Instruction Group Formation and Execution
US7882335B2 (en) * 2008-02-19 2011-02-01 International Business Machines Corporation System and method for the scheduling of load instructions within a group priority issue schema for a cascaded pipeline
US8095779B2 (en) 2008-02-19 2012-01-10 International Business Machines Corporation System and method for optimization within a group priority issue schema for a cascaded pipeline
US20090210666A1 (en) * 2008-02-19 2009-08-20 Luick David A System and Method for Resolving Issue Conflicts of Load Instructions
US8214814B2 (en) 2008-06-24 2012-07-03 International Business Machines Corporation Sharing compiler optimizations in a multi-node system
JP2010039536A (ja) 2008-07-31 2010-02-18 Panasonic Corp プログラム変換装置、プログラム変換方法およびプログラム変換プログラム
US9690591B2 (en) 2008-10-30 2017-06-27 Intel Corporation System and method for fusing instructions queued during a time window defined by a delay counter
EP2404254B1 (de) * 2009-03-02 2015-11-11 Nxp B.V. Software-schutz
US8171224B2 (en) 2009-05-28 2012-05-01 International Business Machines Corporation D-cache line use history based done bit based on successful prefetchable counter
US8429635B2 (en) 2009-10-28 2013-04-23 International Buisness Machines Corporation Controlling compiler optimizations
CN101739236B (zh) * 2009-12-08 2013-04-10 北京派瑞根科技开发有限公司 信息设备的信息处理方法
WO2012144374A1 (ja) 2011-04-21 2012-10-26 ルネサスエレクトロニクス株式会社 データプロセッサ
US9021155B2 (en) 2011-06-01 2015-04-28 International Business Machines Corporation Fibre channel input/output data routing including discarding of data transfer requests in response to error detection
US9830156B2 (en) 2011-08-12 2017-11-28 Nvidia Corporation Temporal SIMT execution optimization through elimination of redundant operations
US9286072B2 (en) 2011-10-03 2016-03-15 International Business Machines Corporation Using register last use infomation to perform decode-time computer instruction optimization
US9329869B2 (en) 2011-10-03 2016-05-03 International Business Machines Corporation Prefix computer instruction for compatibily extending instruction functionality
US8756591B2 (en) 2011-10-03 2014-06-17 International Business Machines Corporation Generating compiled code that indicates register liveness
US8612959B2 (en) 2011-10-03 2013-12-17 International Business Machines Corporation Linking code for an enhanced application binary interface (ABI) with decode time instruction optimization
US8615745B2 (en) 2011-10-03 2013-12-24 International Business Machines Corporation Compiling code for an enhanced application binary interface (ABI) with decode time instruction optimization
US10078515B2 (en) 2011-10-03 2018-09-18 International Business Machines Corporation Tracking operand liveness information in a computer system and performing function based on the liveness information
US9354874B2 (en) 2011-10-03 2016-05-31 International Business Machines Corporation Scalable decode-time instruction sequence optimization of dependent instructions
US9292291B2 (en) 2012-03-28 2016-03-22 International Business Machines Corporation Instruction merging optimization
US9323530B2 (en) 2012-03-28 2016-04-26 International Business Machines Corporation Caching optimized internal instructions in loop buffer
US9354888B2 (en) 2012-03-28 2016-05-31 International Business Machines Corporation Performing predecode-time optimized instructions in conjunction with predecode time optimized instruction sequence caching
US9280348B2 (en) * 2012-03-28 2016-03-08 International Business Machines Corporation Decode time instruction optimization for load reserve and store conditional sequences
US9513915B2 (en) 2012-03-28 2016-12-06 International Business Machines Corporation Instruction merging optimization
US9268572B2 (en) 2012-12-11 2016-02-23 International Business Machines Corporation Modify and execute next sequential instruction facility and instructions therefor
US9372695B2 (en) * 2013-06-28 2016-06-21 Globalfoundries Inc. Optimization of instruction groups across group boundaries
US9348596B2 (en) * 2013-06-28 2016-05-24 International Business Machines Corporation Forming instruction groups based on decode time instruction optimization
US9710278B2 (en) * 2014-09-30 2017-07-18 International Business Machines Corporation Optimizing grouping of instructions
US9940242B2 (en) * 2014-11-17 2018-04-10 International Business Machines Corporation Techniques for identifying instructions for decode-time instruction optimization grouping in view of cache boundaries
US9733940B2 (en) * 2014-11-17 2017-08-15 International Business Machines Corporation Techniques for instruction group formation for decode-time instruction optimization based on feedback

Patent Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5574873A (en) 1993-05-07 1996-11-12 Apple Computer, Inc. Decoding guest instruction to directly access emulation routines that emulate the guest instructions
US5551013A (en) 1994-06-03 1996-08-27 International Business Machines Corporation Multiprocessor for hardware emulation
US5790825A (en) 1995-11-08 1998-08-04 Apple Computer, Inc. Method for emulating guest instructions on a host computer through dynamic recompilation of host instructions
US6009261A (en) 1997-12-16 1999-12-28 International Business Machines Corporation Preprocessing of stored target routines for emulating incompatible instructions on a target processor
US6308255B1 (en) 1998-05-26 2001-10-23 Advanced Micro Devices, Inc. Symmetrical multiprocessing bus and chipset used for coprocessor support allowing non-native code to run in a system
US6463582B1 (en) 1998-10-21 2002-10-08 Fujitsu Limited Dynamic optimizing object code translator for architecture emulation and dynamic optimizing object code translation method

Non-Patent Citations (2)

* Cited by examiner, † Cited by third party
Title
"Power ISA Version 2.07," International Business Machines Corporation, vom 3. Mai 2013
"z/Architecture Principles of Operation", IBM-Publikation Nr. SA22-7832-09, Tenth Edition, September 2012

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9940242B2 (en) 2014-11-17 2018-04-10 International Business Machines Corporation Techniques for identifying instructions for decode-time instruction optimization grouping in view of cache boundaries
US10061705B2 (en) 2014-11-17 2018-08-28 International Business Machines Corporation Identifying instructions for decode-time instruction optimization grouping in view of cache boundaries

Also Published As

Publication number Publication date
US9361108B2 (en) 2016-06-07
CN104252336B (zh) 2018-01-02
US20150006852A1 (en) 2015-01-01
US20150082008A1 (en) 2015-03-19
US9678757B2 (en) 2017-06-13
US9678756B2 (en) 2017-06-13
US20160253182A1 (en) 2016-09-01
CN104252336A (zh) 2014-12-31
US20160253176A1 (en) 2016-09-01
US9348596B2 (en) 2016-05-24

Similar Documents

Publication Publication Date Title
DE102014109083A1 (de) Bilden von Anweisungsgruppen basierend auf der Optimierung von Anweisungen bei der Dekodierung
DE102014108785A1 (de) Vorausschauendes abrufen und decodieren bei ausgewählten anweisungen
DE102014108753A1 (de) Vorhersageeinheiten-Datenstruktur zur Verwendung bei der Verarbeitung im Pipelinesystem
DE112018003584B4 (de) Vorhersagen eines inhaltsverzeichnis-zeigerwerts in reaktion auf ein verzweigen auf eine subroutine
DE112013001442T5 (de) Kopieren von Zeichendaten, die ein Abschlusszeichen aufweisen, von einer Speicherposition zu einer anderen
DE102018006757A1 (de) Festkomma-zu-gleitkomma-umwandlung
DE112013001466T5 (de) Vergleichen von Gruppen von Zeichendaten, die Abschlusszeichen aufweisen
DE102018125257A1 (de) Defragmentierter und effizienter mikrooperationscache
DE112015001548T5 (de) Partitionsmobilität für Partitionen mit erweitertem Code
DE112017004911T5 (de) Anweisung und Logik für die Erkennung eines numerischen Ansammlungsfehlers
DE102014108738A1 (de) Vorausschauendes Abrufen und Decodieren bei ausgewählten Rückkehranweisungen
DE202016009016U1 (de) Befehle und Logik für wiederkehrende benachbarte Sammlungen
DE102014004563A1 (de) Befehle und Logik zur Bereitstellung verbesserter Paging-Fähigkeiten für Secure Enclave-Seitencaches
DE112013003743T5 (de) Beschleunigte spurübergreifende Vektorreduzierungsbefehle
DE112012007119T5 (de) Threadmigration-Unterstützung für Kerne unterschiedlicher Architektur
DE112013004867T5 (de) Befehl und Logik zum Bereitstellen von Push-Puffer-Kopier- und Speicher-Funktionalität
CN102906700B (zh) 用于阻止虚拟处理器的多功能指令的指令功能的功能虚拟化工具
DE112013002956T5 (de) Vorabladen von Verzweigungsvorhersagen
DE102018001229A1 (de) Beschleunigerschaltung mit variabler Wortlänge für ein neuronales Netzwerk
DE112016004960T5 (de) Befehl und logik, um informationen im voraus aus einem beständigen speicher zu holen
CN104956364A (zh) 向量异常码
DE102014003563A1 (de) Fusionierbare befehle und logik zum versehen mit or-test- und and-test-funktionalität unter benutzen von mehrfachtestquellen
CN104956323A (zh) 向量伽罗瓦域乘法求和与累加指令
DE112013007702T5 (de) Befehl und Logik für den Speicherzugriff in einer geclusterten Maschine mit breiter Ausführung
DE102018002525A1 (de) Hybridatomaritätsunterstützung für einen binärübersetzungsbasierten mikroprozessor

Legal Events

Date Code Title Description
R012 Request for examination validly filed
R082 Change of representative

Representative=s name: SPIES & BEHRNDT PATENTANWAELTE PARTG MBB, DE

Representative=s name: LIFETECH IP SPIES & BEHRNDT PATENTANWAELTE PAR, DE

R082 Change of representative

Representative=s name: SPIES & BEHRNDT PATENTANWAELTE PARTG MBB, DE

R016 Response to examination communication
R084 Declaration of willingness to licence