DE112013000453B4 - Hauptverzweigungsanweisungen mit Transaktionsspeicher - Google Patents

Hauptverzweigungsanweisungen mit Transaktionsspeicher Download PDF

Info

Publication number
DE112013000453B4
DE112013000453B4 DE112013000453.4T DE112013000453T DE112013000453B4 DE 112013000453 B4 DE112013000453 B4 DE 112013000453B4 DE 112013000453 T DE112013000453 T DE 112013000453T DE 112013000453 B4 DE112013000453 B4 DE 112013000453B4
Authority
DE
Germany
Prior art keywords
processing
stream
instruction
transaction
instructions
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.)
Active
Application number
DE112013000453.4T
Other languages
English (en)
Other versions
DE112013000453T5 (de
Inventor
c/o IBM Corporation Prasky Brian Robert
c/o IBM Corporation Krygowski Christopher Anthony
c/o IBM Corporation Shum Chung-Lung Kevin
c/o IBM Corporation Busaba Fadi Yusuf
c/o IBM Corporation Carlough Steven
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
Priority claimed from US13/362,574 external-priority patent/US9280398B2/en
Priority claimed from US13/362,513 external-priority patent/US9229722B2/en
Application filed by International Business Machines Corp filed Critical International Business Machines Corp
Publication of DE112013000453T5 publication Critical patent/DE112013000453T5/de
Application granted granted Critical
Publication of DE112013000453B4 publication Critical patent/DE112013000453B4/de
Active legal-status Critical Current
Anticipated expiration legal-status Critical

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/30003Arrangements for executing specific machine instructions
    • G06F9/30076Arrangements for executing specific machine instructions to perform miscellaneous control operations, e.g. NOP
    • G06F9/3009Thread control instructions
    • 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/30003Arrangements for executing specific machine instructions
    • G06F9/3004Arrangements for executing specific machine instructions to perform operations on memory
    • 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/30003Arrangements for executing specific machine instructions
    • G06F9/30076Arrangements for executing specific machine instructions to perform miscellaneous control operations, e.g. NOP
    • G06F9/30087Synchronisation or serialisation instructions
    • 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/30185Instruction operation extension or modification according to one or more bits in the instruction, e.g. prefix, sub-opcode
    • 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, look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3851Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution from multiple instruction streams, e.g. multistreaming

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Multimedia (AREA)
  • Advance Control (AREA)
  • Executing Machine-Instructions (AREA)

Abstract

Verfahren zum Ausführen einer Maschinenanweisung in einem ersten Pipeline-Stadium, aufweisend die Schritte:- Empfangen einer Maschinenanweisung durch einen Prozessor zur Ausführung, wobei die Maschinenanweisung entsprechend einer Computerarchitektur zur Ausführung durch Computer definiert ist, wobei die Maschinenanweisung aufweist:o mindestens ein Operationscodefeld zum Angeben eines Operationscodes, wobei der Operationscode eine Verzweigungsoperation definiert; undo mindestens ein Feld zum Festlegen einer Zielposition, zu der verzweigt werden soll; und- Ausführen der Maschinenanweisung in einem ersten Verarbeitungsstrom, wobei das Ausführen aufweist:◯ Starten eines zweiten Verarbeitungsstroms, wobei der zweite Verarbeitungsstrom in einer Beziehung zum ersten Verarbeitungsstrom steht und Hardwareressourcen des ersten Verarbeitungsstroms gemeinsam mit diesem nutzt, wobei durch den zweiten Verarbeitungsstrom Bezug auf den architektonischen Zustand des ersten Verarbeitungsstroms genommen wird;◯ Ermitteln auf der Grundlage des Startens des zweiten Verarbeitungsstroms, ob eine Transaktion für den zweiten Verarbeitungsstrom gestartet werden soll, wobei das Ermitteln auf einem Feld der Maschinenanweisung des ersten Verarbeitungsstroms beruht oder durch Hardware des Prozessors vorgegeben wird;◯ auf der Grundlage des Feststellens, dass die Transaktion gestartet werden soll, Starten der Transaktion für den zweiten Verarbeitungsstrom,▪ wobei die Transaktion eine oder mehrere Anweisungen aufweist, die an der Zielposition beginnen, die unter Verwendung des mindestens einen Feldes der Maschinenanweisung definiert ist, die eine oder mehreren Anweisungen außerhalb der Ausführungsreihenfolge gegenüber einer oder mehreren Anweisungen liegen, die gegenwärtig durch den ersten Verarbeitungsstrom verarbeitet werden, der erste Verarbeitungsstrom die Verarbeitung einer oder mehrerer Anweisungen im Anschluss an die Maschinenanweisung fortsetzt, und wobei Ergebnisse der einen oder mehreren Anweisungen des zweiten Verarbeitungsstroms als Teil der Transaktion als eine atomare Einheit festgeschrieben werden, und▪ wobei die Transaktion nicht endet, bis der erste Verarbeitungsstrom einen vordefinierten Punkt in der Verarbeitung erreicht und der zweite Verarbeitungsstrom zum ersten Verarbeitungsstrom werden soll; und◯ und wobei die Ausführung des zweiten Verarbeitungsstroms in der Weise auf Vermutungen beruht, dass mindestens eine Anweisung der einen oder mehreren Anweisungen des zweiten Verarbeitungsstroms ausgeführt wird, selbst wenn das Erreichen der mindestens einen Anweisung des zweiten Datenstroms durch die Verarbeitung des ersten Datenstroms provisorisch ist;◯ auf der Grundlage des Feststellens, dass die Transaktion nicht gestartet werden soll, Ausführen eines oder mehrerer anderer Pipeline-Stadien und Aussetzen des Freigebens von Ressourcen und Aussetzen des Zurückziehens von Anweisungen aus „Abschluss außerhalb der Reihenfolge“-Tabellen, so dass nur so viele Ressourcen durch den zweiten Verarbeitungsstrom belegt werden, wie der erste Verarbeitungsstrom übergeben hat, so dass der erste Verarbeitungsstrom nicht durch den zweiten Verarbeitungsstrom bis zur Blockade verlangsamt wird.

Description

  • HINTERGRUND
  • Die Erfindung betrifft allgemein Computerprogramme und insbesondere in Computerprogrammen verwendete Verzweigungsanweisungen.
  • Ein Computerprogramm (das auch als „Programm“ oder „Anwendung“ bezeichnet wird) ist eine Abfolge von Anweisungen, die geschrieben wurden, um innerhalb einer Datenverarbeitungsumgebung eine bestimmte Aufgabe durchzuführen. Jede Anweisung führt eine bestimmte Operation wie zum Beispiel Addieren, Subtrahieren, Bewegen, Verschieben, Vergleichen, Speichern und Laden durch, um nur einige wenige Beispiele zu nennen. Die Anweisungen werden durch einen Prozessor nacheinander abgerufen, sofern eine bestimmte Anweisung der Verarbeitung nicht vorgibt, die Abarbeitung an einer anderen Position fortzusetzen. Zum Beispiel kann eine Anweisung, anstatt die nächste Anweisung in der Reihenfolge abzurufen, dem Prozessor vorgeben, eine Anweisung an einer anderen Position im Programm abzurufen. Durchschnittlich weist ein Programm alle vier bis fünf Anweisungen eine Verzweigung auf.
  • Bei einigen Mikroarchitekturen von Computern wird eine Anweisung bis zum Abschluss ausgeführt, bevor die nächste Anweisung beginnt. Dagegen wird bei anderen Mikroarchitekturen die quasiparallele Verarbeitung (Pipelining) verwendet, um die Anzahl von Anweisungen zu erhöhen, die gleichzeitig ausgeführt werden können. Beim Pipelining wird die Verarbeitung einer Anweisung in eine Vielzahl unabhängiger Schritte wie zum Beispiel Abrufen, Decodieren, Zuleiten, Ausgeben, Ausführen, und Abschließen und unter Umständen in andere Schritte aufgeteilt, die in einer Pipeline ausgeführt werden. Sobald der erste Schritt der Anweisung (z.B. Abrufen) in der Pipeline abgeschlossen ist, kann eine weitere Anweisung beginnen, und so weiter.
  • Das Pipelining erleichtert außerdem die Ausführung von Anweisungen außerhalb der Reihenfolge ihrer Positionen im Programm. Zum Beispiel weist der Ausgabeschritt eine zugehörige Ausgabewarteschlange auf, die Anweisungen in der Reihenfolge des Programms empfängt. Die Ausgabewarteschlange ist für das Aufnehmen jeder Anweisung zuständig, bis die von der Anweisung benötigten Daten (z.B. Operanden) zur Verfügung stehen, und gibt anschließend die Anweisung zur Ausführung aus. Falls die Daten für eine Anweisung vor den Daten für eine andere Anweisung zur Verfügung stehen, kann die eine Anweisung vor der anderen Anweisung zur Ausführung ausgesendet werden (Verarbeitung außerhalb der Reihenfolge), selbst wenn die andere Anweisung die erste im Programm ist. Wenn beispielsweise die Anweisungen A, B und C auszuführen sind, wobei A die älteste und C die jüngste ist, wenn B von A abhängt und C nicht von A oder B abhängt, können die Anweisungen in der Reihenfolge A, C, B ausgegeben werden, wodurch die Pipeline mit einer höheren Geschwindigkeit genutzt wird und Anweisungen schneller verarbeitet werden können.
  • Die Verarbeitung außerhalb der Reihenfolge wird jedoch durch ein Außerhalb-der-Reihenfolge-Fenster/eine Außerhalb-der-Reihenfolge-Warteschlange einer endlichen Größe beschränkt, in der bzw. in dem Anweisungen außerhalb der Reihenfolge verarbeitet werden können. Das Ausgabefenster ist normalerweise 100 oder weniger Anweisungen groß, und das Reihenfolgeänderungsfenster, das die Anweisungen wieder in ihrer ursprünglichen Reihenfolge ordnet, ist normalerweise 200 oder weniger Anweisungen groß, wobei die 100 eine Teilmenge der 200 sind.
  • Im Stand der Technik ist aus Porter, L.; Choi, B.; Tullsen, D. M.: Mapping Out a Path from Hardware Transactional Memory to Speculative Multithreading. In: 2009 18th International Conference on Parallel Architectures and Compilation Techniques, 2009, S. 313¬324. - ISSN 1089-795X. https://doi.org/10.1 109/PACT.2009.37 [abgerufen am 16.05.2017] das Abbilden eines Pfades in einem Zwischenspeicher bei spekulativem Multithreading bekannt.
  • Aus Bhowmik, A.; Franklin, M.; Trinh, Q.: A Study of Compiler-Directed Multithreading for Embedded Applications. In: Online Proceedings - MTEAC-5 - Austin, Texas, 2001, S. 1-8. http://cseweb.ucsd.edu/-tullsen/mteac5/ [abgerufen am 16.05.2017] ist eine Betrachtung von Compiler-gesteuertem Multithreading für eingebundene Software bekannt.
  • Aus Niko Demus Baril: Designing NEKO: A Speculative Multithreading Chip Multiprocessor, Dissertation, The University of Tokyo, 2004, S. i, iii-iv, 1-4, 7-17, 20-21, 23-35, 37-38, 48, 55-58, 62, 100, 102, 125-128. URL:
    • http://citeseerx.ist.psu.edu/viewdoc/download? doi=10.1.1.95.7783&rep=rep1&type=pdf [abgerufen am 16.05.2017] ist ein spekulativer Multithreading-Computer auf einem Chip bekannt.
  • Aus Marcuello Pascual, Pedro: Speculative multithreaded processors. TDX (Tesis Doctorals en Xarxa). Catalunya : Universität Politecnica de Catalunya, 16.02.2004. S. i, iii, v-vi, xi-xiii, 8-9, 13-16, 18-19, 21, 23-29, 33, 38, 87-90, 92-95, 100, 102-106, 109, 112, 122, 123-125, 129, 133-134-135, 141-143. - ISBN 8468858196. http://hdl.handle.net/10803/5976 [abgerufen am 16.05.2017] sind spekulative Multithread-Prozessoren bekannt.
  • Aus Martin, Milo: Introduction To Computer Architecture (CIS 501), Unit 10: Hardware Multithreading, University of Pennsylvania, 2010. URL: https://www.cis.upenn.edu/-milom/cis501-Fall10/ [abgerufen am 16.05.2017] ist die Computer-Architektur für Multithreading bekannt.
  • Ausgehend von diesem Stand der Technik stellt sich dem Fachmann die Aufgabe, ein Verfahren anzugeben, bei dem ein spekulativer Thread mit oder ohne Unterstützung durch eine Transaktion gestartet bzw. durchgeführt werden kann.
  • Die Aufgabe wird erfindungsgemäß gelöst durch das Verfahren zum Ausführen einer Maschinenanweisung in einem ersten Pipeline-Stadium nach Anspruch 1, durch das entsprechende System nach Anspruch 19 und durch das entsprechende Computerprogramm nach Anspruch 20. Bevorzugte Ausführungsformen der Erfindung sind Gegenstand der abhängigen Ansprüche.
  • KURZDARSTELLUNG
  • Weitere Merkmale und Vorteile der vorliegenden Erfindung ergeben sich aus der folgenden Beschreibung bevorzugter Ausführungsformen.
  • Figurenliste
  • In der Zeichnung sind bevorzugte Ausführungsformen der Erfindung gezeigt, wobei:
    • 1A eine Ausführungsform einer Datenverarbeitungsumgebung darstellt, in der ein oder mehrere Aspekte der vorliegenden Erfindung enthalten sind und verwendet werden;
    • 1B eine weitere Ausführungsform einer Datenverarbeitungsumgebung darstellt, in der ein oder mehrere Aspekte der vorliegenden Erfindung enthalten sind und verwendet werden;
    • 1C weitere Einzelheiten des Speichers aus 1B gemäß einem Aspekt der vorliegenden Erfindung darstellt;
    • 2A ein Beispiel einer bestehenden Gestaltungsform einer Anweisungspipeline darstellt;
    • 2B ein Beispiel einer weiteren Gestaltungsform einer Anweisungspipeline gemäß einem Aspekt der vorliegenden Erfindung darstellt;
    • 3 ein Beispiel eines Teils eines Programms darstellt, das eine oder mehrere Verzweigungen gemäß einem Aspekt der vorliegenden Erfindung aufweist;
    • 4A ein Beispiel eines Formats einer allgemeinen Verzweigungsanweisung gemäß einem Aspekt der vorliegenden Erfindung darstellt;
    • 4B ein weiteres Beispiel eines Formats einer allgemeinen Verzweigungsanweisung gemäß einem Aspekt der vorliegenden Erfindung darstellt;
    • 5 ein Beispiel einer Logik im Zusammenhang mit der Verarbeitung von Hauptverzweigungen gemäß einem Aspekt der vorliegenden Erfindung darstellt;
    • 6 ein Beispiel einer Logik im Zusammenhang mit der Verarbeitung von Hauptverzweigungen mit Transaktionsspeicher gemäß einem Aspekt der vorliegenden Erfindung darstellt;
    • 7 eine Ausführungsform eines Computerprogrammprodukts darstellt, das einen oder mehrere Aspekte der vorliegenden Erfindung aufweist;
    • 8 eine Ausführungsform eines Host-Computersystems darstellt, in dem ein oder mehrere Aspekte der vorliegenden Erfindung enthalten sind und verwendet werden;
    • 9 ein weiteres Beispiel eines Host-Computersystems darstellt, in dem ein oder mehrere Aspekte der vorliegenden Erfindung enthalten sind und verwendet werden;
    • 10 ein weiteres Beispiel eines Host-Computersystems mit einem Computernetzwerk darstellt, in dem ein oder mehrere Aspekte der vorliegenden Erfindung enthalten sind und verwendet werden;
    • 11 eine Ausführungsform verschiedener Elemente eines Computersystems darstellt, in dem ein oder mehrere Aspekte der vorliegenden Erfindung enthalten sind und verwendet werden;
    • 12A eine Ausführungsform der Ausführungseinheit des Computersystems aus 11 darstellt, in der ein oder mehrere Aspekte der vorliegenden Erfindung enthalten sind und verwendet werden;
    • 12B eine Ausführungsform der Verzweigungseinheit des Computersystems aus 11 darstellt, in der ein oder mehrere Aspekte der vorliegenden Erfindung enthalten sind und verwendet werden;
    • 12C eine Ausführungsform der Lade-/Speicherungseinheit des Computersystems aus 11 darstellt, in der ein oder mehrere Aspekte der vorliegenden Erfindung enthalten sind und verwendet werden; und
    • 13 eine Ausführungsform eines emulierten Host-Computersystems darstellt, in dem ein oder mehrere Aspekte der vorliegenden Erfindung enthalten sind und verwendet werden.
  • AUSFÜHRLICHE BESCHREIBUNG
  • Programme sind in Code (z.B. Quellcode) geschrieben, der die einzelnen auszuführenden Anweisungen enthält. Es gibt Codesegmente (die auch als „Abschnitte“, „Bereiche“ usw. bezeichnet werden), die nicht voneinander abhängen, aber die Start-/Eintrittspunkte dieser Segmente sind durch mehr als den Inhalt des Außerhalb-der-Reihenfolge-Fensters der Hardware getrennt. Da sie anhand der Anzahl der zwischen den beiden Punkten ausgeführten Anweisungen um mehr als den Inhalt des Außerhalb-der-Reihenfolge-Fensters getrennt sind, können bestehende Verzweigungen, die hierin als „Unterverzweigungen“ bezeichnet werden, im Außerhalb-der-Reihenfolge-Fenster des ersten Segments nicht rechtzeitig erreicht werden, um Anweisungen des zweiten Segments in Bezug auf das erste Segment außerhalb der Reihenfolge auszuführen. Zur Lösung dieses Problems werden gemäß einem Aspekt der vorliegenden Erfindung Hauptverzweigungen bereitgestellt, um von einem Code Segment zu einem anderen zu verzweigen, um ein größeres Außerhalb-der-Reihenfolge-Fenster als dasjenige zu ermöglichen, das für die Hardware allein sichtbar ist (d.h., die Codemenge, die in das Außerhalb-der-Reihenfolge-Fenster/in die Außerhalb-der-Reihenfolge-Warteschlange gelangen kann, ist größer, obwohl die physische Größe des Außerhalb-der-Reihenfolge-Fensters/der Außerhalb-der-Reihenfolge-Warteschlange unverändert bleibt (z.B. werden 100 Anweisungen unterstützt, wobei die 100 Anweisungen von mehreren Anweisungs-Threads kommen, wie nachfolgend erläutert wird)).
  • Gemäß einem Aspekt der vorliegenden Erfindung werden Hauptverzweigungsanweisungen bereitgestellt, die die Ausführung zur Verzweigung von einem Codesegment zu einem anderen Codesegment ermöglichen. Diese Anweisungen erzeugen einen neuen Ausführungsdatenstrom bzw. Ausführungs-Thread bei dem anderen Codesegment und ermöglichen dadurch die Ausführung des anderen Codesegments parallel zu dem Codesegment, von dem aus die Verzweigung vorgenommen wurde.
  • Bei einer Ausführungsform beruht die Ausführung des neuen Datenstroms in der Weise auf Vermutungen, dass nicht bekannt ist, ob die Verarbeitung des neuen Datenstroms tatsächlich die Anweisungen des neuen Datenstroms erreicht (d.h., der erste Datenstrom, der den neuen Datenstrom erreicht, ist provisorisch). Es kann sein, dass eine oder mehrere Anweisungen des neuen Datenstroms ausgeführt werden, aber die Verarbeitung des ersten Datenstroms einen anderen Pfad nimmt und den neuen Datenstrom nicht erreicht.
  • Eine Ausführungsform einer Datenverarbeitungsumgebung, bei der eine oder mehrere Aspekte der vorliegenden Erfindung einbezogen und verwendet werden, wird unter Bezug auf 1A beschrieben. Eine Datenverarbeitungsumgebung 100 weist zum Beispiel einen Prozessor 102 (z.B. eine zentrale Verarbeitungseinheit), einen Speicher 104 (z.B. Hauptspeicher) und eine oder mehrere Eingabe-/Ausgabe-Einheiten (E/A-Einheiten) und/oder Schnittstellen 106 auf, die untereinander zum Beispiel über einen oder mehrere Busse 108 und/oder andere Verbindungen verbunden sind.
  • Bei einem Beispiel ist der Prozessor 102 ein z/Architecture®-Prozessor, der Teil eines Servers des Typs System z® bildet, der durch International Business Machines Corporation (IBM®), Armonk, New York, angeboten wird. Im System z®-Server ist die durch International Business Machines angebotene z/Architecture® realisiert, die die logische Struktur und Funktionsweise des Computers festlegt. Eine Ausführungsform der z/Architecture® ist in einer IBM Publikation mit dem Titel „z/Architecture Principles of Operation“, IBM® Publikationsnummer SA22-7832-08, neunte Ausgabe, August 2010, beschrieben. Bei einem Beispiel führt der Prozessor ein Betriebssystem wie zum Beispiel zJOS® aus, das ebenfalls von International Business Machines Corporation angeboten wird. IBM, z/Architecture® und z/OS® sind eingetragene Marken von International Business Machines Corporation, Armonk, New York/USA. Andere hierin verwendete Namen können eingetragene Marken oder Produktnamen von International Business Machines Corporation oder anderen Unternehmen sein.
  • Eine weitere Ausführungsform einer Datenverarbeitungsumgebung, bei der eine oder mehrere Aspekte der vorliegenden Erfindung einbezogen und verwendet werden, wird unter Bezug auf 1B beschrieben. Bei diesem Beispiel weist eine Datenverarbeitungsumgebung 120 beispielsweise eine native (systemeigene) zentrale Verarbeitungseinheit 122, einen Speicher 124 und eine oder mehrere Eingabe-/Ausgabe-Einheiten und/oder Schnittstellen 126 auf, die untereinander zum Beispiel über einen oder mehrere Busse 128 und/oder andere Verbindungen verbunden sind. Beispielsweise kann die Datenverarbeitungsumgebung 120 einen PowerPC®-Prozessor, einen Server des Typs pSeries® oder einen Server des Typs xSeries® aufweisen, die durch International Business Machines Corporation, Armonk, New York, angeboten werden; einen von Hewlett Packard Co., Palo Alto, Kalifornien, angebotenen HP Superdome mit Prozessoren des Typs Intel Itanium II®; und/oder andere Maschinen auf der Grundlage von Architekturen, die von IBM, Hewlett Packard, Intel, Sun Microsystems oder anderen angeboten werden. PowerPC®, pSeries® und xSeries® sind eingetragene Marken von International Business Machines Corporation, Armonk, New York/USA. Intel® und Itanium II® sind eingetragene Marken von Intel Corporation, Santa Clara, Kalifornien.
  • Die native zentrale Verarbeitungseinheit 122 weist ein oder mehrere native Register 130 wie zum Beispiel ein oder mehrere Mehrzweckregister und/oder ein oder mehrere Spezialregister auf, die während der Verarbeitung innerhalb der Umgebung verwendet werden. Diese Register enthalten Informationen, die den Zustand der Umgebung zu jedem beliebigen Zeitpunkt wiedergeben.
  • Darüber hinaus führt die native zentrale Verarbeitungseinheit 122 Anweisungen und Code aus, die im Speicher 124 gespeichert sind. Bei einem bestimmten Beispiel führt die zentrale Verarbeitungseinheit einen Emulatorcode 132 aus, der im Speicher 124 gespeichert ist. Dieser Code ermöglicht der in einer Architektur konfigurierten Datenverarbeitungseinheit, eine andere Architektur zu emulieren. Zum Beispiel ermöglicht der Emulatorcode 132 Maschinen, die auf einer anderen Architektur als der z/Architecture® beruhen, zum Beispiel PowerPC®-Prozessoren, Servern des Typs pSeries®, Servern des Typs xSeries®, Servern des Typs HP Superdome oder anderen, die z/Architecture® zu emulieren und Software und Anweisungen auszuführen, die auf der Grundlage der z/ Architecture* entwickelt wurden.
  • Ferner sind Einzelheiten, die den Emulatorcode 132 betreffen, unter Bezugnahme auf 1C beschrieben. Gastanweisungen 150 weisen Softwareanweisungen (z.B. Maschinenanweisungen) auf, die zur Ausführung in einer anderen Architektur als der der nativen CPU 122 entwickelt wurden. Zum Beispiel können Gastanweisungen 150 entwickelt worden sein, um auf einem z/Architecture-Prozessor 102 ausgeführt zu werden, werden aber stattdessen auf der nativen CPU 122 emuliert, (bei der es sich zum Beispiel um einen Prozessor des Typs Intel® Itanium II® handeln kann). Bei einem Beispiel weist der Emulatorcode 132 eine Anweisungsabrufeinheit 152 auf, um eine oder mehrere Gastanweisungen 150 aus dem Speicher 124 zu empfangen und wahlweise eine lokale Pufferung für die empfangenen Anweisungen bereitzustellen. Außerdem weist er eine Anweisungsumsetzroutine 154 auf, um die Art von Gastanweisung zu ermitteln, die empfangen wurde, und die Gastanweisung in eine oder mehrere native Anweisungen 156 umzusetzen. Diese Umsetzung weist zum Beispiel das Erkennen der Funktion auf, die durch die Gastanweisung durchzuführen ist, und das Auswählen der nativen Anweisung, um diese Funktion durchzuführen.
  • Ferner weist der Emulator 132 eine Emulationssteuerroutine 160 auf, um zu bewirken, dass die nativen Anweisungen ausgeführt werden. Die Emulationssteuerroutine 160 kann die native CPU 122 veranlassen, eine Routine aus nativen Anweisungen auszuführen, die eine oder mehrere zuvor empfangene Gastanweisungen emulieren, und zum Abschluss einer derartigen Ausführung die Steuerung an die Anweisungsabrufroutine zurückzugeben, um das Empfangen der nächsten Gastanweisung oder einer Gruppe von Gastanweisungen zu emulieren. Die Ausführung der nativen Anweisungen 156 kann das Laden von Daten aus dem Speicher 124 in ein Register aufweisen; das Speichern von Daten aus einem Register zurück in den Speicher; oder das Durchführen einer bestimmten Art von Arithmetik- oder Logikoperation, die durch die Umsetzroutine ermittelt wurde.
  • Jede Routine ist zum Beispiel in Software realisiert, die im Speicher gespeichert ist und durch die native zentrale Verarbeitungseinheit 122 ausgeführt wird. Bei anderen Beispielen sind eine oder mehrere der Routinen oder Operationen in Firmware, Hardware, Software oder in einer bestimmten Kombination davon realisiert. Die Register des emulierten Prozessors können unter Verwendung der Register 130 der nativen CPU oder durch Verwendung von Speicherplätzen im Speicher 124 emuliert sein. Bei Ausführungsformen können sich die Gastanweisungen 150, nativen Anweisungen 156 und Emulatorcode im selben Speicher befinden oder auf unterschiedlichen Speichereinheiten ausgelagert sein.
  • Im hierin verwendeten Sinne gehören zur Firmware z.B. der Mikrocode, Millicode und/oder Makrocode des Prozessors. Er weist zum Beispiel die Anweisungen auf Hardwareebene und/oder Datenstrukturen auf, die zur Realisierung eines höheren Maschinencodes verwendet werden. Bei einer Ausführungsform weist er zum Beispiel einen proprietären Code auf, der normalerweise als Mikrocode bereitgestellt wird und vertrauenswürdige Software oder vertrauenswürdigen Mikrocode aufweist, der für die unterlagerte Hardware spezifisch ist und den Zugriff des Betriebssystems auf die Systemhardware steuert.
  • Bei einem Beispiel ist eine Gastanweisung 150, die empfangen, umgesetzt und ausgeführt wird, eine hierin beschriebene Verzweigungsanweisung. Die Verzweigung, bei der es sich bei diesem Beispiel um eine z/Architecture®-Verzweigung handelt, wird aus dem Speicher abgerufen, umgesetzt und als Abfolge nativer Anweisungen 156 (z.B. PowerPC®, pSeries®, xSeries®, Intel® usw.) dargestellt, die ausgeführt werden.
  • Bei einer weiteren Ausführungsform werden eine oder mehrere Anweisungen in einer anderen Architekturumgebung ausgeführt, zu der unter anderem eine Architektur gehört, die in „Intel® 64 and IA-32 Architectures Software Developer's Manual Volume 1“, Bestellnummer 253665-022US , November 2006; „Intel® 64 and IA-32 Architecture Software Developer's Manual Volume 2A“, Bestellnummer 253666-022US , November 2006; in „Intel® Itanium® Architecture Software Developer's Manual Volume 1“, Dokumentennummer 245317-005 , Januar 2006; in „Intel® Itanium® Architecture Software Developer's Manual Volume 2“, Dokumentennummer 245318-005 , Januar 2006; und/oder in „Intel® Itanium® Architecture Software Developer's Manual Volume 3“, Dokumentennummer 245319-005, Januar 2006, beschrieben ist.
  • Bei einer Ausführungsform kann ein Prozessor im gleichzeitigen MultiThreading-Modus (Simultaneous Multithreading, SMT) oder im Einzel-Thread-Modus ausgeführt werden. Im gleichzeitigen Multi-Threeading-Modus kann der Prozessor gleichzeitig mehrere, voneinander unabhängige Ausführungs-Threads ausführen. Ein Thread, wie nachstehend ausführlicher beschrieben wird, kann beim Ausführen einer oder mehrerer Anweisungen eines Computerprogramms verwendet werden.
  • Wie oben beschrieben wird eine Anweisungs-Pipeline, für die unter Bezugnahme auf die 2A bis 2B Beispiele beschrieben werden, verwendet, um die Anweisungen eines Computerprogramms zu verarbeiten. Unter Bezugnahme auf 2A werden bei einer bestehenden Gestaltungsform die folgenden Schritte jeder Anweisung innerhalb der Reihenfolge 200 durchgeführt: Anweisungsabruf (A-Abruf), Anweisungsdecodierung, Gruppierung (z.B. Gruppieren von Anweisungen danach, wie sie auf ihrem Weg in der Pipeline überwacht werden sollen) und Anweisungszuleitung. Das heißt, wenn die Anweisung A die erste im Programm ist und anschließend die Anweisung B folgt, werden Abruf, Decodierung, Gruppierung und Zuleitung der Anweisung A vor den Schritten der Anweisung B durchgeführt. Die Schritte der Anweisung B können jedoch vor dem Abschluss der Schritte der Anweisung A gestartet werden; z.B. kann ein Abruf von Anweisung B beginnen, nachdem ein Abruf von Anweisung A abgeschlossen, aber bevor die Decodierung von Anweisung A abgeschlossen ist. Jeder dieser Schritte kann außerdem bei mehr als einer einzigen Anweisung parallel funktionieren.
  • Die Schritte der Anweisungsausgabe, Anweisungsausführung und des Neuordnens können jedoch außerhalb der Reihenfolge 202 durchgeführt werden. Beispielsweise kann die Anweisung B vor der Anweisung A ausgeführt, aber nicht abgeschlossen werden. Der Abschluss der Anweisung (z.B. Setzen von Prüfpunkten) wird erneut innerhalb einer Reihenfolge 204 durchgeführt, sodass die Anweisung A zum Beispiel vor der Anweisung B abgeschlossen ist. Ein Grund zur Erzwingung des Abschlusses innerhalb der Reihenfolge besteht darin, die exakte Erkennung und Meldung von Ausnahmen bei Anweisungen zu ermöglichen, die sich nicht der Architektur entsprechend verhalten.
  • Gemäß einem Aspekt der vorliegenden Erfindung wird eine weitere Gestaltungsform einer Anweisungs-Pipeline bereitgestellt, bei der ein größerer Teil der Verarbeitung außerhalb der Reihenfolge durchgeführt werden kann. Zum Beispiel können, wie in 2B gezeigt, der Abruf, die Decodierung, Gruppierung, Zuleitung, Ausgabe, Ausführung und Neuordnung außerhalb der Reihenfolge 250 durchgeführt werden, während der komplette Schritt innerhalb der Reihenfolge 252 abgeschlossen wird. Diese Gestaltungsform kann zum Beispiel bei der Verarbeitung von Hauptverzweigungsanweisungen verwendet werden, wie hierin beschrieben wird. (Obwohl hierin verschiedene Anweisungsschritte beschrieben sind, können bei anderen Beispielen mehr oder weniger andersartige Schritte verwendet werden.)
  • Eine Verzweigungsart, die hierin als „Unterverzweigung“ bezeichnet wird, legt die nächste Verzweigung im auszuführenden Programm fest. Diese nächste Anweisung ist nicht die nächste Anweisung in fortlaufender Reihenfolge des Programms, aber dennoch Teil des gegenwärtig ausgeführten Verarbeitungsdatenstroms (z.B. Threads). Das Gegenteil von Unterverzweigungen ist eine andere Verzweigungsart, die als „Hauptverzweigungen“ bezeichnet und gemäß einem weiteren Aspekt der vorliegenden Erfindung bereitgestellt werden. Eine Hauptverzweigung legt einen Codepunkt (Zieladresse) fest, der nicht der nächste in der fortlaufenden Programmreihenfolge ist und keinen Teil des gegenwärtig ausgeführten Verarbeitungsdatenstroms bildet, sondern stattdessen als Teil eines neuen Verarbeitungsdatenstroms (z.B. Thread) ausgeführt wird. Diese Verzweigungsart wird ferner unter Bezugnahme auf 3 beschrieben.
  • Unter Bezugnahme auf 3 ist dort ein Beispiel eines Computerprogramms 300 (oder eines Teils davon) abgebildet, das eine Vielzahl von Anweisungen aufweist. Die erste Anweisung des Computerprogramms ist eine Anweisung A 302. Die Verarbeitung beginnt bei Anweisung A und geht der Reihe nach zu einer Anweisung B 304, einer Anweisung C 306 und einer Anweisung D 310 über. Bei diesem Beispiel ist die Anweisung D eine Öffnen-Anweisung einer Hauptverzweigung zu einem Ziel Y 340. Die Öffnen-Anweisung der Hauptverzweigung wird ausgeführt und bewirkt, dass ein zweiter Datenstrom (der hierin als „untergeordneter Datenstrom“ bezeichnet wird) gestartet/geöffnet wird (zum Beispiel wird auf einem SMT-Prozessor ein zweiter Thread aktiviert, der hierin als „untergeordneter Thread“ bezeichnet wird). Der erste Datenstrom (der hierin als „übergeordneter Datenstrom“ bezeichnet wird, setzt die Verarbeitung einer Anweisung E 312, einer Anweisung F 314 und einer Anweisung G 320 fort. Die Anweisung G verzweigt zu einem Ziel X 322, bei dem eine Anweisung M 324 ausgeführt wird, gefolgt von den Anweisungen N 326 und O 328. Diese Anweisungen werden ebenfalls als Teil des ersten Datenstroms verarbeitet, da die Verzweigung bei Anweisung G eine untergeordnete Verzweigung ist und nicht bewirkt, dass ein weiterer Verarbeitungsdatenstrom gestartet/geöffnet wird.
  • Gemäß einem Aspekt der vorliegenden Erfindung verläuft die Verarbeitung des übergeordneten Datenstroms (d.h. einer oder mehrerer der Anweisungen E, F, G, M, N und O) nach der Öffnen-Anweisung der Hauptverzweigung parallel zur Verarbeitung des untergeordneten Datenstroms (d.h. einer oder mehrerer der Anweisungen: T 342, U 344 und V 346).
  • Bei diesem Beispiel ist die Anweisung O eine zum Ziel Y 340 verzweigende Schließen-Anweisung einer Hauptverzweigung. Die Schließen-Anweisung kennzeichnet, dass der übergeordnete Thread zur Zieladresse der ÖFFNEN-Anweisung der Hauptverzweigung aufgeschlossen hat. An diesem Punkt wird der untergeordnete Thread zum übergeordneten Thread, und die Thread-Ressourcen, die dem bisherigen übergeordneten Thread zugewiesen waren, stehen nun zur weiteren Verarbeitung zur Verfügung (z.B. als weiterer untergeordneter Thread).
  • Die Anzahl verfügbarer Threads hängt von der Architektur des Prozessors ab. Zum Beispiel stehen bei einem SMT-2-Prozessor zwei Threads zur Verfügung, und daher kann ein untergeordneter Thread (der auch als „Assist-Thread“ bezeichnet wird) gestartet werden. Bei einem SMT-4-Prozessor stehen vier Threads zur Verfügung, und daher können drei untergeordnete Threads gestartet werden, die eine weitere Verarbeitung außerhalb der Reihenfolge ermöglichen.
  • Bei einer Ausführungsform werden die Anweisungen des untergeordneten Threads nicht abgeschlossen, bis die Anweisungen des übergeordneten Threads abgeschlossen sind, da Anweisungen bei den hierin beschriebenen beispielhaften Pipeline-Gestaltungsformen innerhalb der Reihenfolge abzuschließen sind. Zum Zeitpunkt des Prüfpunkts der Anweisungen des übergeordneten Threads (z.B. Speichern seines Zustands wie zum Beispiel des architektonischen Zustands) wird der untergeordnete Thread zum übergeordneten Thread, und die Anweisungen, die sich in dem als untergeordneter Thread festgelegten Thread befanden, werden nun zum Setzen von Prüfpunkten freigegeben.
  • Gemäß einem Aspekt der vorliegenden Erfindung kann eine beliebige bestehende oder neue Verzweigungsanweisung einer Anweisungssatzarchitektur als Hauptverzweigungsanweisung sowie als oder anstelle einer Unterverzweigungsanweisung festgelegt werden. Beispielsweise weisen gegenwärtig viele Architekturen eine Anzahl von Verzweigungsanweisungen auf, die verschiedene Verzweigungsoperationen durchführen. Jede dieser Verzweigungsanweisungen (oder eine Teilmenge davon) kann als Hauptverzweigungsanweisung (ÖFFNEN/SCHLIESSEN) und/oder Unterverzweigungsanweisung realisiert sein. Zu diesem Zweck legt das Operationscodefeld oder ein anderes Feld der Verzweigungsanweisung die Art der Verzweigungsanweisung entweder als Hauptverzweigung (z.B. Öffnen-Anweisung einer Hauptverzweigung oder Schließen-Anweisung einer Hauptverzweigung) oder als Unterverzweigung fest.
  • Zum Beispiel könnte eine Verzweigungsanweisung einen von drei unterschiedlichen Operationscodes aufweisen: Unterverzweigungs-Operationscode, Öffnen-Operationscode der Hauptverzweigung oder Schließen-Operationscode der Hauptverzweigung. Obwohl die drei Arten von Verzweigungsanweisungen unterschiedliche Operationscodes aufweisen würden, sind das Format der Anweisungen sowie die Verzweigungsoperation identisch. Der Unterschied liegt in der Art, wie die Anweisung verarbeitet wird. Wenn zum Beispiel ihre Pipeline-Verarbeitung unterschiedlich ist, kann ihre Zieladresse unterschiedlich sein, und ihre Verarbeitung, soweit sie Teil des ursprünglichen Threads oder eines anderen Threads ist, hängt von der Art der Verzweigungsanweisung ab.
  • Bei einem weiteren Beispiel wird anstelle unterschiedlicher Operationscodes ein Feld zur Anweisung hinzugefügt (z.B. ein gesondertes Feld aus den anderen Feldern der Anweisung oder ein Zusatz zu einem der bestehenden Felder wie zum Beispiel das Operationscodefeld oder ein anderes Feld), das die Art der Verzweigungsanweisung anzeigt. Beispielsweise kann ein 2-Bit-Feld verwendet werden, das bei einem bestimmten Beispiel die folgende Bedeutung hat:
    • 00 - untergeordnete Verzweigung; Anweisung verhält sich wie bisher
    • 01 - nicht verwendet
    • 10 - Schließen-Anweisung einer Hauptverzweigung
    • 11 - Öffnen-Anweisung einer Hauptverzweigung
  • Ausführungsformen von Formaten einer allgemeinen Verzweigungsanweisung sind in den 4A bis 4B abgebildet. Wie in 4A dargestellt, weist eine Verzweigungsanweisung 400 mindestens ein Operationscodefeld 402 mit einem Operationscode auf, der die betreffende Verzweigungsanweisung sowie die Art der Verzweigungsanweisung (Öffnen-Anweisung einer Hauptverzweigung, Schließen-Anweisung einer Hauptverzweigung, Unterverzweigung) anzeigt; und ein Zieladressfeld 404, das zur Angabe der Position verwendet wird, zu der die Verzweigungsanweisung springen soll.
  • Bei einem weiteren Beispiel weist eine Verzweigungsanweisung 420 (4B mindestens ein Operationscodefeld 422 mit einem Operationscode auf, der eine bestimmte Verzweigungsanweisung anzeigt, ein Formatfeld 424 zur Bezeichnung der Art der Verzweigungsanweisung (z.B. Öffnen-Anweisung einer Hauptverzweigung, Schließen-Anweisung einer Hauptverzweigung, Unterverzweigung) und ein Zieladressfeld 426 auf. Das Formatfeld 424 kann ein gesondertes Feld oder Teil eines anderen Feldes wie zum Beispiel des Operationscodes sein.
  • Die Zieladressfelder 404, 426 können ein oder mehrere Felder sein, die zur Angabe der Zielposition dienen. Beispielsweise kann es sich um ein Registerfeld handeln, dessen Inhalt eine Adresse der Zielposition angibt; es kann sich um zwei Felder wie zum Beispiel ein Basis-Registerfeld und ein Verschiebungsfeld handeln, bei denen die Inhalte des im Basis-Registerfeld bezeichneten Registers zu den Inhalten des Verschiebungsfeldes addiert werden, um eine Adresse der Zielposition zu erhalten; oder um eine beliebige Kombination von Feldern, Registern usw., die zur Bezeichnung der Zielposition verwendet werden.
  • Ferner kann jede einzelne Verzweigungsanweisung unabhängig davon, ob es sich um eine Hauptverzweigung oder Unterverzweigung handelt, ein oder mehrere Felder aufweisen, um eine bestimmte Verzweigungsanweisung durchzuführen. Wie erwähnt, können viele Verzweigungsanweisungen vorhanden sein, von denen Beispiele in den „Principles of Operation“ beschrieben sind, auf die oben Bezug genommen wird. Bei den in den „Principles of Operation“ beschriebenen Verzweigungsanweisungen wird das jeweilige Format der Verzweigungsanweisung verwendet, aber gemäß einem Aspekt der vorliegenden Erfindung zeigt entweder das Operationscodefeld oder ein anderes Feld, das zum Format hinzugefügt oder an ein bestehendes Feld der Anweisung angehängt wurde, die Art der Verzweigungsanweisung an, z.B. Unterverzweigung, Öffnen-Anweisung einer Hauptverzweigung, Schließen-Anweisung einer Hauptverzweigung.
  • Weitere Einzelheiten in Bezug auf die Verarbeitung von Hauptverzweigungsanweisungen werden unter Bezugnahme auf 5 beschrieben. Diese Verarbeitung wird bei jedem Thread innerhalb eines SMT-Prozessors (z.B. Kerns) durch den Prozessor durchgeführt (z.B. während verschiedener Pipeline-Stadien).
  • Unter Bezugnahme auf 5 wird zunächst eine Anweisung abgerufen und decodiert, und es wird eine Abfrage dahingehend vorgenommen, ob die Anweisung eine Öffnen-Anweisung einer Hauptverzweigung ist, ABFRAGE 500. Wenn das Operationscodefeld oder ein anderes Feld der Anweisung anzeigt, dass es sich nicht um eine Öffnen-Anweisung einer Hauptverzweigung handelt, geht die Verarbeitung zu einem oder mehreren anderen Pipeline-Stadien über.
  • In einem weiteren Pipeline-Stadium wird eine Ermittlung dahingehend vorgenommen, ob sich eine Schließen-Anweisung einer Hauptverzweigung an einem Prüfpunkt (d.h. in einem Abschlussschritt) befindet, ABFRAGE 502. Wenn nicht, geht die Verarbeitung zu einem oder mehreren anderen Pipeline-Stadien über, und während einer derartigen Verarbeitung wird eine weitere Abfrage dahingehend vorgenommen, ob die Verarbeitung gegenwärtig auf eine unvorhergesehene Pipeline-Umleitung (z.B. Verzweigung falsch, Wechsel von Betriebssystemaufgaben) trifft, ABFRAGE 504. Wenn nicht, wird die Anweisung (bzw. werden die Anweisungen) in jedem Pipeline-Stadium verarbeitet, und die Verarbeitung wird anschließend zum nächsten Stadium weitergeschaltet, SCHRITT 506. Die Verarbeitung geht zur nächsten Anweisung über.
  • Unter erneuter Bezugnahme auf ABFRAGE 500 wird, wenn es sich um eine Öffnen-Anweisung einer Hauptverzweigung handelt, ein zweiter Datenstrom (z.B. ein untergeordneter Thread) als gestartet/aktiv gekennzeichnet, SCHRITT 510. Bei einem Beispiel gehört hierzu das Überwachen (z.B. durch einen Zähler), dass gegenwärtig ein weiterer Thread der vorgegebenen Anzahl von Threads verwendet wird. Ferner wird am Ziel der Verzweigung ein zweiter Datenstrom (z.B. ein SMT-Thread des untergeordneten Threads) gestartet, SCHRITT 512. Bei einem Beispiel gehört hierzu das Setzen eines Zeigers oder eines anderen Hinweises, den untergeordneten Thread zu verwenden, sowie bei einem Beispiel das Starten des Anweisungsabrufs und der Verzweigungsvorhersage für den untergeordneten Thread. Da dieser Datenstrom bzw. Thread ein untergeordnetes Element des übergeordneten Elements ist, wird durch das untergeordnete Element bei diesem Beispiel Bezug auf den architektonischen Zustand des übergeordneten Elements genommen. Wenn das untergeordnete Element einen architektonischen Zustand ändert, wird dieser aktualisierte Zustand genau diesem untergeordneten Element zugeordnet. Die Verarbeitung geht anschließend zu einem oder mehreren Pipeline-Stadien über.
  • Unter Bezugnahme auf die ABFRAGE 502 wird, wenn es sich um eine Schließen-Anweisung einer Hauptverzweigung handelt, die einen Prüfpunkt erreicht hat, der zweite Datenstrom (z.B. der untergeordnete Thread) freigegeben, um bei einer oder mehreren Anweisungen seines Datenstroms einen Prüfpunkt zu setzen, die abgeschlossen wurden, SCHRITT 520. Die Zuordnung des übergeordneten Datenstroms (z.B. des übergeordneten SMT-Threads) wird aufgehoben, sodass seine Ressourcen durch einen anderen Datenstrom oder Thread verwendet werden können, SCHRITT 522. Der untergeordnete Datenstrom wird zum übergeordneten Datenstrom (z.B. durch Setzen eines Zeigers oder eines anderen Hinweises, dass es sich um das übergeordnete Element handelt), in dem die Verarbeitung dort fortgesetzt wird, wo gegenwärtig der untergeordnete Thread verarbeitet wird. Das untergeordnete Element wird als abgeschlossen betrachtet, SCHRITT 524. Die Verarbeitung geht anschließend zu einem oder mehreren anderen Pipeline-Stadien über.
  • Unter erneuter Bezugnahme auf die ABFRAGE 504 wird, wenn der übergeordnete Datenstrom (z.B. Thread) auf einen Verzweigung-falsch- oder Betriebssystem-Eingriff trifft, der untergeordnete Datenstrom abgebrochen und ungültig gemacht, SCHRITT 528. Bei einem Beispiel kann jeder untergeordnete Datenstrom unter der Voraussetzung verfügbarer Threads einen weiteren untergeordneten Datenstrom über eine Öffnen-Anweisung einer Hauptverzweigung starten. Somit wird bei Vorliegen mehrerer untergeordneter Datenströme jeder untergeordnete Datenstrom abgebrochen und ungültig gemacht. Es wird ein Hinweis vorgenommen, dass kein aktiver untergeordneter Thread vorliegt, SCHRITT 530, und die Verarbeitung wird bei SCHRITT 506 fortgesetzt. Daher müssen beliebige, durch den untergeordneten Datenstrom ausgeführte oder auszuführende Anweisungen jetzt durch den übergeordneten Datenstrom verarbeitet werden. Des Weiteren muss sie ignoriert werden, nachdem die Verarbeitung auf die zugehörige Schließen-Anweisung der Hauptverzweigung getroffen ist, da die Schließen-Aktion bereits stattgefunden hat. (Bei einer weiteren Ausführungsform werden, wenn mehrere untergeordnete Datenströme vorliegen und einer dieser untergeordneten Datenströme auf eine Verzweigung-falsch-Situation trifft, nur der eine oder die mehreren jüngeren untergeordneten Datenströme abgebrochen.)
  • Bei einem weiteren Aspekt der vorliegenden Erfindung können, wenn eine Öffnen-Anweisung einer Hauptverzweigung zum Verzweigen zu einer Zieladresse genutzt wird, die Anweisungen an der Zieladresse behandelt werden, als würden sie innerhalb einer Transaktion ausgeführt werden, bei der die Ergebnisse der Anweisungen als eine atomare Einheit festgeschrieben („commited“) werden (d.h., alle werden festgeschrieben oder keine). Bei einer Ausführungsform startet die Öffnen-Anweisung der Hauptverzweigung nicht nur einen neuen Datenstrom oder Thread, sondern sie startet auch eine Transaktion über einen Transaktionsspeicher. Der Transaktionsspeicher stellt die Mittel bereit, um festzustellen, dass ein bestimmter Codeblock eine Transaktion ist. Eine Transaktion ermöglicht einem Programm, bei Anweisungen einen Prüfpunkt bei Abschluss zu setzen; nach dem Start der Transaktion wird jedoch der Zustand der Maschine protokolliert, sodass die Maschine/der Prozessor/die Pipeline auf den Eintrittspunkt der Transaktion wiederhergestellt werden kann, wenn die Transaktion nicht abgeschlossen wird. Am Ende der Transaktion werden alle Speicherungsvorgänge im Speicher festgeschrieben. Dies ermöglicht die Wiederherstellung des Zustands des gesamten Systems auf den Punkt, an dem die Transaktion begann. Bei einer Transaktion werden beliebige Änderungen zusammen festgeschrieben. Wenn eine Transaktion abnormal abgebrochen wird, kehrt der Prozessor zu einem Zustand vor dem Starten der Transaktion zurück. Durch Definieren eines neuen untergeordneten Datenstroms als Transaktion kann der untergeordnete Datenstrom parallel zum übergeordneten Datenstrom einen Architekturprüfpunkt durchführen; die untergeordnete Transaktion endet jedoch nicht (TEND), bis das untergeordnete Element zum übergeordneten Element wird. Sollte der übergeordnete Datenstrom auf eine Verzweigung-falsch-Situation treffen, wird der untergeordnete Datenstrom abgebrochen, bei dem es sich um eine Transaktion handelt, und der Zustand der Maschine wird zurückgeführt (wie durch die Definition des Transaktionssteuerung festgelegt), obwohl im untergeordneten Datenstrom keine Aktionen stattfanden.
  • Bei einer Ausführungsform wird die Architektur verändert, sodass die Pipeline feststellen kann, dass über den Transaktionsspeicher eine Transaktion in Bezug auf das Erkennen einer Öffnen-Anweisung einer Hauptverzweigung zu starten ist. Beispielsweise wird ein Operationscode (z.B. 402, 4A) bereitgestellt, der eine Öffnen-Anweisung einer Hauptverzweigung mit Transaktion anzeigt; oder das Formatfeld 424, das ein Teil des Operationscodefeldes oder eines anderen Feldes oder getrennt davon sein kann, weist einen Code auf, der die Öffnen-Anweisung einer Hauptverzweigung mit ausgelöster Transaktion anzeigt.
  • Bei einer weiteren Ausführungsform ist die Auslösung einer Transaktion für eine Öffnen-Anweisung einer Hauptverzweigung von der Architektur unabhängig und unterliegt stattdessen der Steuerung der Hardwarepipeline. Die Hardwaresteuerung des Startens einer Transaktion in Bezug auf die Öffnen-Anweisung der Hauptverzweigung kann eine Öffnen-Anweisung einer Hauptverzweigung als Transaktion über den Transaktionsspeicher auslösen, wenn dies durch die Anweisung nicht angegeben war. Wenn die Hardware verschachtelte Transaktionen unterstützt, kann zum Beispiel nach dem Erkennen einer Öffnen-Anweisung einer Hauptverzweigung unabhängig davon, ob das Format der Öffnen-Anweisung der Hauptverzweigung eine zu startende Transaktion angibt, eine Transaktion, wie durch die Hardware vorgegeben, gestartet werden. Ferner kann Hardware die Verarbeitung einer Öffnen-Anweisung einer Hauptverzweigung zulassen, aber verweigern, dass die Öffnen-Anweisung der Hauptverzweigung als Transaktion ausgelöst wird, selbst wenn dies durch das konzipierte Format der Anweisung angegeben ist. Wenn Ressourcen zur Verarbeitung von Transaktionen in der Maschine zur Neige gehen, kann, obwohl das Format der Öffnen-Anweisung der Hauptverzweigung angibt, eine Transaktion zu starten, zum Beispiel verhindert werden, dass eine Transaktion gestartet wird, sodass die verbleibenden Transaktionsressourcen für beliebige Transaktionen verfügbar bleiben, die bereits im Gange sind. Es existieren noch weitere Beispiele.
  • Ferner finden bei einer Öffnen-Anweisung einer Hauptverzweigung bei einer Ausführungsform die folgenden Aktionen statt: der übergeordnete Datenstrom wird als aktiver Datenstrom zurückgezogen; der untergeordnete Datenstrom wird zum übergeordneten Datenstrom; und wenn die Öffnen-Anweisung der Hauptverzweigung eine Transaktion gestartet hat, befindet sich das Element, das den untergeordneten Datenstrom bildete, nicht mehr in einem Transaktionsspeicherzustand und kehrt in einen klassischen Prozessorverarbeitungszustand zurück (Transaktionsende). Daher kann der Prüfpunktinhalt nicht mehr in einen vorherigen architektonischen Prüfpunktzustand zurückversetzt werden.
  • Eine Ausführungsform der Verarbeitung im Zusammenhang mit einer Verzweigungsanweisung mit Transaktionsspeicher wird unter Bezugnahme auf 6 beschrieben. Um noch einmal darauf hinzuweisen, wird diese Verarbeitung bei jedem Thread in einem SMT-Prozessor und durch die Logik des Prozessors durchgeführt, der die Verzweigungsanweisung verarbeitet.
  • Unter Bezugnahme auf 6 wird eine Ermittlung dahingehend durchgeführt, ob gegenwärtig eine Öffnen-Anweisung einer Hauptverzweigung decodiert wird, ABFRAGE 600. Wenn das Operationscodefeld oder ein anderes Feld der Anweisung anzeigt, dass gegenwärtig keine Öffnen-Anweisung einer Hauptverzweigung decodiert wird, geht die Verarbeitung zu einem oder mehreren anderen Pipeline-Stadien über.
  • In einem weiteren Pipeline-Stadium wird eine Ermittlung dahingehend vorgenommen, ob sich eine Schließen-Anweisung einer Hauptverzweigung an einem Prüfpunkt befindet, ABFRAGE 602. Wenn sich die Schließen-Anweisung der Hauptverzweigung nicht an einem Prüfpunkt befindet, geht die Verarbeitung zu einem oder mehreren anderen Pipeline-Stadien über.
  • Es wird eine weitere Ermittlung dahingehend durchgeführt, ob eine unvorhergesehene Pipeline-Umleitung aufgetreten ist, SCHRITT 604. Wenn nicht, wird die Anweisung (bzw. werden die Anweisungen) in jedem Pipeline-Stadium verarbeitet, und die Verarbeitung wird anschließend zum nächsten Stadium weitergeschaltet, SCHRITT 606. Die Verarbeitung geht zur nächsten Anweisung über, SCHRITT 600.
  • Unter erneuter Bezugnahme auf die ABFRAGE 600 wird, wenn gegenwärtig eine Öffnen-Anweisung einer Hauptverzweigung decodiert wird, gekennzeichnet, dass gegenwärtig ein weiterer Datenstrom (z.B. untergeordneter Datenstrom) gestartet/aktiv wird, SCHRITT 610, und der andere Datenstrom (z.B. Thread) wird am Ziel der Verzweigung gestartet, SCHRITT 612. Ferner wird gemäß einem Aspekt der Erfindung eine Ermittlung dahingehend vorgenommen, ob eine Transaktion gestartet werden soll, ABFRAGE 613. Beispielsweise wird ein Feld der Anweisung (entweder ein bestehendes Feld oder ein neues Feld) verwendet, um anzuzeigen, ob eine Transaktion gestartet werden soll. Als weiteres Beispiel führt die Hardware des Prozessors diese Ermittlung durch, entweder durch Außerkraftsetzen der Anweisung oder anstelle der Anweisung, die ein derartiges Feld aufweist, das anzeigt, dass eine Transaktion gestartet werden soll. Wenn eine Transaktion gestartet werden soll, startet der neue Datenstrom eine Transaktion (TBEGIN), SCHRITT 614. Für den Start der Transaktion wird eine Momentaufnahme des gegenwärtigen Zustands der Maschine verwaltet bzw. vorgenommen, sodass bei einem abnormalen Abbruch der Transaktion der Zustand der Maschine an dem Punkt wiederhergestellt werden kann, an dem die Transaktion begann. Danach oder wenn eine Transaktion nicht gestartet wird, geht die Verarbeitung zu einem oder mehreren anderen Pipeline-Stadien über.
  • Unter erneuter Bezugnahme auf die ABFRAGE 602 wird, wenn die Logik feststellt, dass sich eine Schließen-Anweisung einer Hauptverzweigung an einem Prüfpunkt befindet, eine Ermittlung dahingehend vorgenommen, ob eine Transaktion gestartet wurde, ABFRAGE 616. Wenn eine Transaktion gestartet wurde, endet die Transaktion des untergeordneten Datenstroms (TEND), SCHRITT 618. Ferner wird der angelegte Zustand der Maschine aktualisiert, um den Transaktionsvorgang des unterordneten Elements widerzuspiegeln, SCHRITT 620. Die Zuordnung des übergeordneten Datenstroms (z.B. SMT-Thread) wird aufgehoben, sodass dieser nicht mehr aktiv ist, SCHRITT 622. Der untergeordnete Datenstrom wird zum übergeordneten Datenstrom, und es wird vermerkt, dass das untergeordnete Element nicht mehr aktiv ist, SCHRITT 624. Die Verarbeitung wird in der Pipeline fortgesetzt.
  • Unter Bezugnahme auf die ABFRAGE 616 kann, wenn eine Transaktion nicht gestartet wird, bei beliebigen abgeschlossenen Anweisungen untergeordneter Elemente ein Prüfpunkt gesetzt werden, SCHRITT 621, und die Verarbeitung geht zu SCHRITT 622 über.
  • Unter erneuter Bezugnahme auf die ABFRAGE 604 wird, wenn eine unvorhergesehene Pipeline-Umleitung vorgefunden wurde, eine Ermittlung dahingehend vorgenommen, ob eine Transaktion gestartet wurde, ABFRAGE 626. Wenn eine Transaktion gestartet wurde, wird die Transaktion des untergeordneten Datenstroms abnormal abgebrochen (TABORT), SCHRITT 630. Danach oder wenn eine Transaktion nicht gestartet wurde, wird die Zuordnung des untergeordneten Datenstroms aufgehoben und der Datenstrom ungültig gemacht, SCHRITT 632; und es wird vermerkt, dass das untergeordnete Element nicht mehr aktiv ist, SCHRITT 634. Bei einer Ausführungsform kann sich mehr als ein untergeordneter Datenstrom in Verarbeitung befinden. Wenn die Umleitung beim übergeordneten Element angetroffen wird, werden alle untergeordneten Datenströme abnormal abgebrochen, die eine beliebige Zugehörigkeit zum übergeordneten Element aufweisen, einschließlich des normalen Beendens der Transaktion. Wenn die Umleitung bei einem untergeordneten Element vorliegt, werden beliebige längere untergeordnete Datenströme abnormal abgebrochen, einschließlich des abnormen Beendens der Transaktion. Wenn ferner ein untergeordneter Datenstrom auf einen Interrupt oder einen Ausnahmefehler trifft, stoppt der untergeordnete Datenstrom den Prozess und nimmt den Prozess wieder auf, nachdem er zum übergeordneten Datenstrom wurde. Die Verarbeitung geht zu SCHRITT 606 über.
  • Das Starten des untergeordneten Datenstroms bzw. der untergeordneten Datenströme im Transaktionsspeicher ermöglicht dem untergeordneten Datenstrom bzw. den untergeordneten Datenströmen, weiter ausgeführt zu werden. Ein untergeordneter Datenstrom darf Pipelining-Ressourcen nicht länger zurückhalten, um ein Blockieren im übergeordneten Thread zu verhindern. Ferner kann der untergeordnete Datenstrom Anweisungen aus den „Abschluss außerhalb der Reihenfolge“-Tabellen zurückziehen, deren Größe begrenzt war, sodass sie normalerweise höchstens ca. 200 Anweisungen unterstützten. Bei einer Ausführungsform halten untergeordnete Datenströme nach wie vor einige Grenzwerte hinsichtlich des Umfangs des Abschlusses aufrecht, der als Transaktion durchgeführt werden kann, da Ressourcen alle Speicherdaten aufrechterhalten müssen, die nach dem Abschluss der Transaktion festgeschrieben werden müssen. Die Hardware zur Aufrechterhaltung der Speicherdaten bis zum Transaktionsabschluss ist zum Beispiel in Bezug auf Frequenz, Latenz, Kapazität und/oder Platzierung gemäß Aufstellungsplan erheblich weniger einschränkend als die Ressourcen für die Außerhalb-der-Reihenfolge-Fenster.
  • Oben ist ein Verzweigungsmechanismus beschrieben, der es ermöglicht, ein Codesegment eines Programms gleichzeitig mit mindestens einem anderen Codesegment desselben Programms zu verarbeiten. Bei einem Beispiel wird eine Verzweigungsanweisung bereitgestellt, die einen parallelen Thread (z.B. einen untergeordneten Thread) in dem eingeschlagenen Pfad startet, aber weiterhin in dem nicht eingeschlagenen Pfad ausgeführt wird (z.B. übergeordneter Thread). Der übergeordnete Thread weist Anweisungen auf, um den Thread entweder zu beenden oder ihn mit dem anderen Thread zu vereinen. Bei einer Ausführungsform aktualisiert der untergeordnete Thread den angelegten Zustand (d.h. den für andere Anwendungen, Threads usw. sichtbaren Zustand) nicht, bis der übergeordnete Thread bei der Verarbeitung einen festgelegten Punkt wie zum Beispiel eine Schließen-Anweisung einer Hauptverzweigung erreicht hat. Ferner startet der Thread des eingeschlagenen Pfades bei einer Ausführungsform eine Transaktionsspeicher-Transaktion.
  • Die Verwendung von Hauptverzweigungen ermöglicht, dass Anweisungen außerhalb der Reihenfolge decodiert/zugeleitet werden können, sodass für auszuführende Anweisungen ein größeres Außerhalb-der-Reihenfolge-Fenster bereitgestellt wird. Ohne eine ÖFFNEN-/SCHLIESSEN-Anweisung einer Hauptverzweigung werden Anweisungen innerhalb der Reihenfolge decodiert und zugeleitet, können aber außerhalb der Reihenfolge ausgegeben werden, und sie werden innerhalb der Reihenfolge abgeschlossen.
  • Bei einer Ausführungsform ist der Umfang der Verarbeitung der untergeordneten Datenströme auf die Außerhalb-der-Reihenfolge-Ressourcen beschränkt, die dem Prozessor zur Verfügung stehen. Die untergeordneten Datenströme dürfen, obwohl sie Außerhalb-der-Reihenfolge-Ressourcen verwenden, nicht alle Ressourcen verbrauchen, sodass eine Blockierungssituation entsteht und das übergeordnete Element nicht die Ressourcen erhalten kann, die es benötigt, um Fortschritte zu machen. Diese Begrenzung wird jedoch vermieden, wenn der untergeordnete Datenstrom eine Transaktionsverarbeitung verwendet.
  • Bei einer Ausführungsform wird, wenn eine ÖFFNEN-Anweisung einer Hauptverzweigung angetroffen wird und alle Threads in Gebrauch sind, um Pfade untergeordneter Elemente zu umspannen, die ÖFFNEN-Anweisung der Hauptverzweigung nicht ausgeführt. Dies wird gekennzeichnet, und nachdem die paarige SCHLIESSEN-Anweisung der Hauptverzweigung angetroffen wird, wird sie ebenfalls nicht ausgeführt. Durch Nichtausführen beim SCHLIESSEN findet keine Umschaltung von einem übergeordneten auf einen untergeordneten Thread statt.
  • Bei einem Beispiel bricht ein Neustart des übergeordneten Datenstroms einschließlich eines Abrufdatenstroms des A-Abrufs den untergeordneten Datenstrom der Verarbeitung und beliebige seiner untergeordneten Elemente usw. ab. Ein Neustart in einem untergeordneten Datenstrom bricht sein untergeordnetes Element und beliebige jüngere untergeordnete Elemente, aber nicht das übergeordnete Element ab.
  • Die Hardware (z.B. Transistoren), die eine Prozessor-Pipeline definiert, besteht aus vielen Warteschlangen. Die Warteschlangen weisen eine endliche Größe auf, und derartige Warteschlangen weisen auf, ohne darauf beschränkt zu sein:
    • Cache-Zwischenspeicher-Zeilenadressen, (nach dem Anweisungsabruf) zu decodierende Anweisungen, zuzuleitende Anweisungen, Anweisungen von der Zuleitung zum architektonischen Prüfpunkt, Mehrzweckregister, Verzweigungswarteschlangen und Speicherungswarteschlangen. Ohne Transaktionsverarbeitung verlangt ein Prozessor unter Umständen, eine Teilmenge oder alle diese Warteschlangen der Reihe nach zu leeren, selbst in einem Prozessor außerhalb der Reihenfolge. Die durch einen untergeordneten Datenstrom beanspruchten Ressourcen (z.B. Warteschlangen) können nicht geleert werden, bis der übergeordnete Datenstrom abgeschlossen ist. Wenn der untergeordnete Datenstrom zu viele Ressourcen belegt, hat das übergeordnete Element unter Umständen nicht genügend Ressourcen zur Verfügung, um die Operationen von Anweisungen durchzuführen, die durch die Architektur definiert und durch das Softwareprogramm vorgeschrieben sind. Eine derartige Blockierungssituation muss verhindert werden, in der das untergeordnete Element Ressourcen bis zu dem Punkt nicht verwenden kann, an dem dem übergeordneten Element genügend Ressourcen zur Verfügung stehen, sodass das übergeordnete Element Fortschritte machen kann. Damit das untergeordnete Element seine Ressourcennutzung begrenzen kann, muss es wissen, wie viele Ressourcen für seine Nutzung zur Verfügung stehen. Dieser Ressourcenumfang kann entweder in der Hardware fest verdrahtet sein, oder der übergeordnete Thread kann dem untergeordneten Element mitteilen, wie viele Ressourcen zur Verwendung verfügbar sind. Ferner kann das übergeordnete Element einen kleineren Umfang von Ressourcen mitteilen, die für das untergeordnete Element zur Verfügung stehen, sodass, obwohl das untergeordnete Element das übergeordnete Element nicht blockiert, das untergeordnete Element nicht so viele Ressourcen verwendet, dass die Fortschrittsgeschwindigkeit des übergeordneten Elements zum Schneckentempo verlangsamt wird.
  • Bei einer weiteren Ausführungsform kann eine Verzweigungsvorhersage entlang eines untergeordneten Datenstroms in der Weise verlaufen, als würde sie entlang zweier unabhängiger Threads verlaufen, zum Beispiel in einer SMT-2-Umgebung. Die Verzweigungsvorhersage kann verwendet werden, um vorherzusagen, ob eine Verzweigung vorzunehmen ist, und/oder, um die Zielposition dieser Verzweigung vorherzusagen.
  • Unter Bezugnahme auf 7 weist ein Computerprogrammprodukt 700 unter anderem ein oder mehrere nichtflüchtige computerlesbare Speichermedien 702 auf, um darauf computerlesbare Programmcodemittel bzw. -logik 704 zu speichern, um einen oder mehrere Aspekte der vorliegenden Erfindung bereitzustellen oder zu ermöglichen.
  • Unter Bezugnahme auf 8 sind dort charakteristische Komponenten eines Host-Computersystems 5000 dargestellt, die einen oder mehrere Aspekte der vorliegenden Erfindung realisieren. Der charakteristische Host-Computer 5000 weist eine oder mehrere CPUs 5001 auf, die in Verbindung mit einem Computerspeicher (d.h. heißt Hauptspeicher) 5002 stehen, sowie E/A-Schnittstellen zu Speichermedieneinheiten 5011 und Netzwerken 5010 zum Datenaustausch mit anderen Computern oder SANs und dergleichen. Die CPU 5001 ist zu einer Architektur konform, die einen angelegten Anweisungssatz und eine angelegte Funktionalität aufweist. Die CPU 5001 kann eine dynamische Adressumsetzung (Dynamic Address Translation, DAT) 5003 zum Umwandeln von Programmadressen (virtuellen Adressen) in reale Speicheradressen aufweisen. Eine DAT weist normalerweise einen Adressumsetzpuffer (Translation Lookaside Buffer, TLB) 5007 zum Zwischenspeichern von Umsetzungen auf, sodass spätere Zugriffe auf den Block des Computerspeichers 5002 keine Verzögerung der Adressumsetzung erfordern. Normalerweise wird ein Cache-Zwischenspeicher 5009 zwischen dem Computerspeicher 5002 und dem Prozessor 5001 genutzt. Der Cache-Zwischenspeicher 5009 kann hierarchisch sein und einen großen Cache-Zwischenspeicher, der mehr als einer CPU zur Verfügung steht, und kleinere, schnellere Cache-Zwischenspeicher (einer unteren Ebene) zwischen dem großen Cache-Zwischenspeicher und jeder CPU aufweisen. Bei einigen Realisierungsformen sind Cache-Zwischenspeicher unterer Ebenen aufgeteilt, um getrennte Cache-Zwischenspeicher unterer Ebenen zum Abrufen von Anweisungen und für Datenzugriffe bereitzustellen. Bei einer Ausführungsform wird eine Anweisung durch eine Anweisungs-Abrufeinheit 5004 über einen Cache-Zwischenspeicher 5009 aus dem Speicher 5002 abgerufen. Die Anweisung wird in einer Anweisungs-Decodiereinheit 5006 decodiert und einer Anweisungs-Ausführungseinheit bzw. Anweisungs-Ausführungseinheiten 5008 zugeleitet (bei einigen Ausführungsformen zusammen mit anderen Anweisungen). Normalerweise werden mehrere Ausführungseinheiten 5008 genutzt, zum Beispiel eine Arithmetik-Ausführungseinheit, eine Gleitkomma-Ausführungseinheit und eine Verzweigungsanweisungs-Ausführungseinheit. Die Anweisung wird durch die Ausführungseinheit ausgeführt, indem je nach Bedarf auf Operanden in Registern oder im Speicher zugegriffen wird, die bzw. der in der Anweisung angegeben sind bzw. ist. Wenn auf einen Operanden aus dem Speicher 5002 zugegriffen (geladen oder gespeichert) werden muss, verarbeitet normalerweise eine Lade-/Speicherungseinheit 5005 den Zugriff unter der Steuerung der Anweisung, die gegenwärtig ausgeführt wird. Anweisungen können in Hardwareschaltungen oder in internem Mikrocode (Firmware) oder durch eine Kombination aus beidem ausgeführt werden.
  • Getrennte Cache-Zwischenspeicher können für Anweisungen und für Datenoperanden vorgehalten sein. Informationen innerhalb eines Cache-Zwischenspeichers werden in zusammenhängenden Bytes in einer integralen Grenze gehalten, die als „Cache-Block“ oder „Cache-Zeile“ (oder in der Kurzform als „Zeile“) bezeichnet werden. Ein Modell kann eine „EXTRACT CACHE ATTRIBUTE“-Anweisung bereitstellen, die die Größe einer Cache-Zeile in Bytes zurückgibt. Ein Modell kann außerdem eine „PREFETCH DATA“- und „PREFETCH DATA RELATIVE LONG“-Anweisung bereitstellen, die sich auf das Vorab-Abrufen von Speicher in den Daten- oder Anweisungs-Cache-Zwischenspeicher oder auf das Freigeben von Daten im Cache-Zwischenspeicher auswirken.
  • Der Software-Programmcode weist ein Betriebssystem auf, das die Funktion und Interaktion der verschiedenen Computerkomponenten und eines oder mehrerer Anwendungsprogramme steuert. Der Programmcode wird normalerweise von der Speichermedieneinheit 5011 auf den relativ schnelleren Computerspeicher 5002 ausgelagert, wo er zur Verarbeitung durch den Prozessor 5001 zur Verfügung steht. Die Techniken und Verfahren zum Verkörpern von Software-Programmcode im Speicher und auf physischen Medien und/oder zum Verteilen von Softwarecode über Netzwerke sind allgemein bekannt und werden hierin nicht weiter erläutert. Programmcode wird, wenn er auf einem materiellen Medium (zu denen, ohne darauf beschränkt zu sein, elektronische Speichermodule (RAM), Flash-Speicher, Compact Discs (CDs), DVDs, Magnetband und dergleichen gehören) oftmals als „Computerprogrammprodukt“ bezeichnet. Das Medium des Computerprogrammprodukts kann normalerweise durch eine Verarbeitungsschaltung, vorzugsweise in einem Computersystem, zur Ausführung durch die Verarbeitungsschaltung gelesen werden.
  • 9 veranschaulicht ein charakteristisches Workstation- oder Server-Hardwaresystem, in dem ein oder mehrere Aspekte der vorliegenden Erfindung praktisch umgesetzt sein können. Das System 5020 aus 9 weist ein charakteristisches Basis-Computersystem 5021 wie zum Beispiel einen Personal Computer, eine Workstation oder einen Server einschließlich optionaler Peripherieeinheiten auf. Das Basis-Computersystem 5021 weist einen oder mehrere Prozessoren 5026 und einen Bus auf, der genutzt wird, um die Datenübertragung zwischen dem Prozessor bzw. den Prozessoren 5026 und den anderen Komponenten des Systems 5021 anhand bekannter Techniken zu vermitteln und zu aktivieren. Der Bus verbindet die Prozessoren 5026 mit einem Speicher 5025 und einem Langzeitspeicher 5027, zu dem beispielsweise ein Festplattenlaufwerk (einschließlich zum Beispiel eines beliebigen aus magnetischen Medien, CD, DVD und Flash-Speicher) oder ein Bandlaufwerk gehören können. Das System 5021 könnte außerdem einen Benutzerschnittstellenadapter aufweisen, der den Mikroprozessor 5026 über den Bus mit einer oder mehreren Schnittstelleneinheiten wie zum Beispiel mit einer Tastatur 5024, einer Maus 5023, einem Drucker/Scanner 5030 und/oder mit anderen Schnittstelleneinheiten verbindet, bei denen es sich um eine beliebige Benutzerschnittstelleneinheit wie zum Beispiel einen berührungsempfindlicher Bildschirm, ein Digital-Eingabe-Pad usw. handeln kann. Der Bus verbindet außerdem eine Anzeigeeinheit 5022 wie zum Beispiel einen LCD-Bildschirm oder -Monitor über einen Anzeigeadapter mit dem Mikroprozessor 5026.
  • Das System 5021 kann Daten mit anderen Computern oder Netzwerken aus Computern über einen Netzwerkadapter austauschen, der mit einem Netzwerk 5029 Daten austauschen kann 5028. Beispielhafte Netzwerkadapter sind Datenübertragungskanäle, Token Ring, Ethernet oder Modems. Alternativ kann das System 5021 unter Verwendung einer drahtlosen Schnittstelle wie zum Beispiel einer CDPD-Karte (CDPD = Cellular Digital Packet Data) Daten austauschen. Das System 5021 kann derartigen anderen Computern in einem Local Area Network (LAN) oder in einem Wide Area Network (WAN) zugeordnet sein, oder das System 5021 kann ein Client in einer Client/Server-Anordnung mit einem anderen Computer usw. sein. Alle diese Konfigurationen sowie die entsprechende Hardware und Software zur Datenübertragung sind in der Technik bekannt.
  • 10 veranschaulicht ein Datenverarbeitungsnetzwerk 5040, in dem ein oder mehrere Aspekte der vorliegenden Erfindung praktisch umgesetzt sein können. Das Datenverarbeitungsnetzwerk 5040 kann eine Vielzahl einzelner Netzwerke wie zum Beispiel ein drahtloses Netzwerk oder ein kabelgebundenes Netzwerk aufweisen, von denen jedes eine Vielzahl einzelner Workstations 5041, 5042, 5043, 5044 aufweisen kann. Darüber hinaus wird dem Fachmann klar sein, dass hierzu ein oder mehrere LANs gehören können, wobei ein LAN eine Vielzahl intelligenter Workstations aufweisen kann, die mit einem Host-Prozessor verbunden sind.
  • Unter fortgesetzter Bezugnahme auf 10 können die Netzwerke auch Großrechner oder Server wie zum Beispiel einen Gateway-Computer (Client-Server 5046) oder Anwendungsserver aufweisen (entfernt angeordneter Server 5048, der auf einen Datenspeicher zugreifen kann und auf den außerdem von einer Workstation 5045 direkt zugegriffen werden kann). Ein Gateway-Computer 5046 dient als Eintrittspunkt in jedes einzelne Netzwerk. Ein Gateway wird benötigt, wenn ein Vernetzungsprotokoll mit einem anderen verbunden werden soll. Das Gateway 5046 kann mithilfe einer Datenaustauschverbindung vorzugsweise mit einem anderen Netzwerk (zum Beispiel mit dem Internet 5047) verbunden sein. Das Gateway 5046 kann unter Verwendung einer Datenaustauschverbindung auch direkt mit einer oder mehreren Workstations 5041, 5042, 5043, 5044 verbunden sein. Der Gateway-Computer kann unter Nutzung eines Servers vom Typ IBM eServer™ System z® realisiert sein, der bei International Business Machines Corporation erhältlich ist.
  • Unter gleichzeitiger Bezugnahme auf 9 und 10 kann durch den Prozessor 5026 des Systems 5020 auf Software-Programmiercode, der einen oder mehrere Aspekte der vorliegenden Erfindung verkörpern kann, von den Langzeit-Speichermedieneinheiten 5027 wie zum Beispiel von einem CD-ROM-Laufwerk oder Festplattenlaufwerk zugegriffen werden. Der Software-Programmiercode kann auf einem beliebigen einer Vielfalt von bekannten Medien wie zum Beispiel auf einer Diskette, einem Festplattenlaufwerk oder einer CD-ROM verkörpert sein, die für die Verwendung bei einem Datenverarbeitungssystem bekannt sind. Der Code kann auf derartigen Medien verteilt sein, oder er kann aus dem Speicher auf die Benutzer 5050, 5051 oder aus dem Speicher eines Computersystems über ein Netzwerk auf andere Computersysteme verteilt werden, um durch Benutzer derartiger anderer Systeme verwendet zu werden.
  • Alternativ kann der Programmiercode im Speicher 5025 verkörpert sein, und durch den Prozessor 5026 kann unter Verwendung des Prozessorbusses darauf zugegriffen werden. Derartiger Software-Programmiercode weist ein Betriebssystem auf, das die Funktion und Interaktion der verschiedenen Computerkomponenten und eines oder mehrerer Anwendungsprogramme 5032 steuert. Der Programmcode wird normalerweise vom Speichermedium 5027 auf den schnellen Speicher 5025 ausgelagert, wo er zur Verarbeitung durch den Prozessor 5026 zur Verfügung steht. Die Techniken und Verfahren zum Verkörpern von Software-Programmiercode im Speicher und auf physischen Medien und/oder zum Verteilen von Softwarecode über Netzwerke sind allgemein bekannt und werden hierin nicht weiter erläutert. Programmcode wird, wenn er auf einem materiellen Medium (zu denen, ohne darauf beschränkt zu sein, elektronische Speichermodule (RAM), Flash-Speicher, Compact Discs (CDs), DVDs, Magnetband und dergleichen gehören) oftmals als „Computerprogrammprodukt“ bezeichnet. Das Medium des Computerprogrammprodukts kann normalerweise durch eine Verarbeitungsschaltung, vorzugsweise in einem Computersystem, zur Ausführung durch die Verarbeitungsschaltung gelesen werden.
  • Der Cache-Zwischenspeicher, der für den Prozessor am leichtesten verfügbar ist (normalerweise schneller und kleiner als andere Cache-Zwischenspeicher des Prozessors) ist der unterste Cache-Zwischenspeicher (L1-Cache-Zwischenspeicher bzw. Cache-Zwischenspeicher der Ebene eins) und der Hauptspeicher ist der Cache-Zwischenspeicher der höchsten Ebene (L3, sofern 3 Ebenen vorhanden sind). Der Cache-Zwischenspeicher der untersten Ebene ist oftmals in einen Anweisungs-Cache-Zwischenspeicher (Instruction Cache, I-Cache) unterteilt, der auszuführende Maschinenanweisungen enthält, und in einen Daten-Cache-Zwischenspeicher (Data Cache, D-Cache), der Datenoperanden enthält.
  • Unter Bezugnahme auf 11 ist dort eine beispielhafte Prozessorausführungsform des Prozessors 5026 abgebildet. Normalerweise werden eine oder mehrere Ebenen des Cache-Zwischenspeichers 5053 genutzt, um Speicherblöcke zu puffern und so das Betriebsverhalten des Prozessors zu verbessern. Der Cache-Zwischenspeicher 5053 ist ein schneller Puffer, der Cache-Zeilen von Speicherdaten enthält, die wahrscheinlich verwendet werden. Typische Cache-Zeilen sind Speicherdaten mit 64, 128 oder 256 Bytes. Getrennte Cache-Zwischenspeicher werden öfter zum Zwischenspeichern von Anweisungen als zum Zwischenspeichern von Daten genutzt. Die Kohärenz von Cache-Zwischenspeichern (Synchronisation zwischen Kopien von Zeilen im Speicher und den Cache-Zwischenspeichern) wird oftmals durch verschiedene Durchsuchungsalgorithmen („Snoop“-Algorithmen) bereitgestellt, die in der Technik allgemein bekannt sind. Der Hauptspeicher 5025 eines Prozessorsystems wird oftmals als „Cache-Zwischenspeicher“ bezeichnet. In einem Prozessorsystem mit 4 Ebenen von Cache-Zwischenspeicher 5053 wird der Hauptspeicher 5025 manchmal als „Cache-Zwischenspeicher der Ebene 5“ (L5-Cache Zwischenspeicher) bezeichnet, da er normalerweise schneller ist und nur einen Teil des nichtflüchtigen Speichers (DASD, Band usw.) enthält, die einem Computersystem zur Verfügung steht. Der Hauptspeicher 5025 dient zum Zwischenspeichern von Datenseiten, die durch das Betriebssystem im Hauptspeicher 5025 abgelegt und aus diesem ausgelagert werden.
  • Ein Programmzähler (Anweisungszähler 5061) überwacht die Adresse der aktuellen auszuführenden Anweisung. Ein Programmzähler in einem z/Architecture®-Prozessor ist 64 Bit breit und kann in der Breite auf 31 oder 24 Bit verkleinert werden, um frühere Grenzen der Adressierung zu unterstützen. Ein Programmzähler ist normalerweise in einem Programmstatuswort (Program Status Word, PSW) eines Computers verkörpert, sodass er bei einer Kontextumschaltung bestehen bleibt. Daher kann ein in Abarbeitung befindliches Programm, das einen Programmzählerwert aufweist, zum Beispiel durch das Betriebssystem unterbrochen werden (Kontextumschaltung von der Programmumgebung zur Betriebssystemumgebung). Das PSW des Programms verwaltet einen Programmzählerwert, während das Programm nicht aktiv ist, und der Programmzähler (im PSW) des Betriebssystems wird verwendet, während das Betriebssystem ausgeführt wird. Normalerweise wird der Programmzähler um einen Betrag erhöht, der gleich der Anzahl von Bytes der aktuellen Anweisung ist. RISC-Anweisungen (RISC = Reduced Instruction Set Computing) weisen normalerweise eine feste Länge auf, während CISC-Anweisungen (CISC = Complex Instruction Set Computing) normalerweise eine variable Länge aufweisen. Anweisungen der IBM z/Architecture® sind CISC-Anweisungen mit einer Länge von 2, 4 oder 6 Bytes. Der Programmzähler 5061 wird zum Beispiel entweder durch eine Kontextumschaltoperation oder durch eine Verzweigung-eingeschlagen-Operation einer Verzweigungsanweisung geändert. Bei einer Kontextumschaltoperation wird der aktuelle Programmzählerwert zusammen mit anderen Zustandsinformationen über das gegenwärtig ausgeführte Programm (wie zum Beispiel Bedingungscodes) im Programmstatuswort gespeichert, und ein neuer Programmzählerwert wird geladen, der auf eine Anweisung eines auszuführenden neuen Programmmoduls zeigt. Eine Verzweigung-eingeschlagen-Operation wird durchgeführt, um dem Programm zu ermöglichen, Entscheidungen zu treffen oder innerhalb des Programms eine Schleife zu durchlaufen, indem das Ergebnis der Verzweigungsanweisung in den Programmzähler 5061 geladen wird.
  • Normalerweise wird eine Programmabrufeinheit 5055 genutzt, um im Auftrag des Prozessors 5026 Anweisungen abzurufen. Die Abrufeinheit ruft entweder „nächstfolgende Anweisungen“, Zielanweisungen von Verzweigung-eingeschlagen-Anweisungen oder erste Anweisungen eines Programms nach einer Kontextumschaltung ab. Moderne Anweisungsabrufeinheiten nutzen oftmals Vorababruf-Techniken, um auf der Grundlage der Wahrscheinlichkeit, dass die vorab abgerufenen Anweisungen verwendet werden könnten, Anweisungen auf Vermutungen beruhend abzurufen. Beispielsweise kann eine Abrufeinheit 16 Bytes einer Anweisung abrufen, die die nächstfolgende Anweisung aufweist, sowie weitere Bytes von weiteren nachfolgenden Anweisungen.
  • Die abgerufenen Anweisungen werden anschließend durch den Prozessor 5026 ausgeführt. Bei einer Ausführungsform werden die abgerufenen Anweisungen an eine Zuleitungseinheit 5056 der Abrufeinheit übergeben. Die Zuleitungseinheit decodiert die Anweisungen und leitet Informationen über die decodierten Anweisungen an entsprechende Einheiten 5057, 5058, 5060 weiter. Eine Ausführungseinheit 5057 empfängt normalerweise Informationen über decodierte Arithmetikanweisungen von der Anweisungsabrufeinheit 5055 und führt Arithmetikoperationen an Operanden anhand des Operationscodes der Anweisung durch. Operanden werden der Ausführungseinheit 5057 vorzugsweise entweder aus dem Speicher 5025, aus angelegten Registern 5059 oder aus einem unmittelbaren Feld der gegenwärtig ausgeführten Anweisung bereitgestellt. Ergebnisse der Ausführung werden, wenn sie gespeichert werden, entweder im Speicher 5025, in den Registern 5059 oder in anderer Maschinenhardware (wie zum Beispiel in den Steuerregistern, PSW-Registern und dergleichen) gespeichert.
  • Ein Prozessor 5026 enthält normalerweise eine oder mehrere Einheiten 5057, 5058, 5060 zum Ausführen der Funktion der Anweisung. Unter Bezugnahme auf 12A kann eine Ausführungseinheit 5057 über eine Schnittstellenlogik 5071 Daten mit angelegten allgemeinen Registern 5059, einer Decodierungs-/Zuleitungseinheit 5056, einer Lade-/Speicherungseinheit 5060 und anderen 5065 Prozessoreinheiten austauschen. Eine Ausführungseinheit 5057 kann mehrere Registerschaltungen 5067, 5068, 5069 nutzen, um Informationen zu speichern, an denen die Arithmetik-Logik-Einheit (Arithmetic Logic Unit, ALU) Operationen durchführt. Die ALU führt Arithmetikoperationen wie zum Beispiel Addieren, Subtrahieren, Multiplizieren und Dividieren sowie logische Funktionen wie zum Beispiel AND, OR und EXLUSIVE OR (XOR), Vertauschen und Verschieben durch. Vorzugsweise unterstützt die ALU spezialisierte Operationen, die von der Gestaltung der Schaltung abhängen. Andere Schaltungen können andere angelegte Einrichtungen 5072 bereitstellen, zu denen beispielsweise Bedingungscodes und Logik zur Unterstützung von Wiederherstellungen gehören. Normalerweise wird das Ergebnis einer ALU-Operation in einer Ausgaberegisterschaltung 5070 gespeichert, die das Ergebnis an eine Vielfalt anderer Verarbeitungsfunktionen weiterleiten kann. Es gibt viele Anordnungen von Prozessoreinheiten, und die vorliegende Beschreibung ist lediglich dazu gedacht, ein allgemeines Verständnis einer Ausführungsform zu ermöglichen.
  • Eine ADD-Anweisung würde beispielsweise in einer Ausführungseinheit 5057 ausgeführt werden, die eine arithmetische und logische Funktionalität aufweist, während eine Gleitkommaanweisung zum Beispiel in einer Gleitkomma-Ausführungseinheit ausgeführt würde, die eine spezialisierte Gleitkommafunktion aufweist. Vorzugsweise führt eine Ausführungseinheit Operationen an Operanden durch, die durch eine Anweisung angegeben werden, indem an den Operanden eine mittels Operationscode definierte Funktion durchgeführt wird. Beispielsweise kann eine ADD-Anweisung durch die Ausführungseinheit 5057 an Operanden ausgeführt werden, die in zwei Registern 5059 vorgefunden werden, die durch Registerfelder der Anweisung angegeben werden.
  • Die Ausführungseinheit 5057 führt eine 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 Quellregister sein kann. Die Ausführungseinheit nutzt vorzugsweise eine Arithmetik-Logik-Einheit (ALU) 5066, die eine Vielfalt logischer Funktionen wie zum Beispiel Verschieben, Vertauschen, AND, OR und XOR sowie eine Vielfalt algebraischer Funktionen durchführen kann, zu denen Addieren, Subtrahieren, Multiplizieren und Dividieren gehören. Einige ALUs 5066 sind für Skalaroperationen und einige für Gleitkommaoperationen ausgelegt. Je nach Architektur können Daten im Big-Endian-Format (bei dem sich das niedrigstwertige Byte an der höchsten Byteadresse befindet) oder im Little-Endian-Format (bei dem sich das niedrigstwertige Bit an der niedrigsten Byteadresse befindet) vorliegen. Die IBM z/Architecture® weist das Big-Endian-Format auf. Je nach Architektur können vorzeichenbehaftete Felder als Vorzeichen und Größenordnung, Einerkomplement oder Zweierkomplement vorliegen. Eine Zahl in Form des Zweierkomplements ist in der Weise vorteilhaft, dass die ALU keine Subtraktionsfunktion bilden muss, da entweder ein negativer Wert oder ein positiver Wert im Zweierkomplement lediglich eine Addition innerhalb der ALU erfordert. Zahlen werden üblicherweise in Kurzform beschrieben, wobei ein 12-Bit-Feld eine Adresse eines Blocks mit 4.096 Bytes definiert, der üblicherweise zum Beispiel als 4-kByte-Block (kByte = Kilobyte) beschrieben wird.
  • Unter Bezugnahme auf 12B werden Verzweigungsanweisungsinformationen zum Ausführen einer Verzweigungsanweisung normalerweise an eine Verzweigungseinheit 5058 gesendet, die oftmals einen Verzweigungsvorhersagealgorithmus wie zum Beispiel eine Verzweigungsverlaufstabelle (Branch History Table, BHT) 5082 nutzt, um das Ergebnis der Verzweigung vorherzusagen, bevor andere bedingte Operationen abgeschlossen sind. Das Ziel der aktuellen Verzweigungsanweisung wird abgerufen und auf der Grundlage von Vermutungen ausgeführt, bevor die bedingten Operationen abgeschlossen sind. Wenn die bedingten Operation abgeschlossen sind, werden die auf Vermutungen beruhend ausgeführten Verzweigungsanweisungen auf der Grundlage der Bedingungen der bedingten Operation oder des vermuteten Ergebnisses entweder abgeschlossen oder verworfen. Eine typische Verzweigungsanweisung kann Bedingungscodes prüfen und zu einer Zieladresse verzweigen, wenn die Bedingungscodes die Verzweigungsanforderung der Verzweigungsanweisung erfüllen, eine Zieladresse kann auf der Grundlage mehrerer Zahlen einschließlich derjenigen berechnet werden, die zum Beispiel in Registerfeldern oder in einem unmittelbaren Feld der Anweisung vorgefunden wurden. Die Verzweigungseinheit 5058 kann eine ALU 5074 nutzen, die eine Vielzahl von Eingangsregisterschaltungen 5075, 5076, 5077 und eine Ausgangsregisterschaltung 5080 aufweist. Die Verzweigungseinheit 5058 kann zum Beispiel mit allgemeinen Registern 5059, mit der Decodierungs-Zuleitungseinheit 5056 oder mit anderen Schaltungen 5073 Daten austauschen,
  • Unter Bezugnahme auf 12C greift ein Prozessor unter Verwendung einer Lade-/Speicherungseinheit 5060 auf einen Speicher zu. Die Lade-/Speicherungseinheit 5060 kann eine Ladeoperation durchführen, indem sie die Adresse des Zieloperanden in einem Speicher 5053 empfängt und den Operanden in ein Register 5059 oder an einer anderen Position des Speichers 5053 lädt, oder sie kann eine Speicherungsoperation durchführen, indem sie die Adresse des Zieloperanden im Speicher 5053 empfängt und Daten an der Position des Zieloperanden 5053 speichert, die sie von einem Register 5059 oder von einer anderen Position des Speichers 5053 empfangen hat. Die Lade-/Speicherungseinheit 5060 kann auf Vermutungen beruhend arbeiten, und sie kann in einer Abfolge auf den Speicher zugreifen, die in Bezug auf die Abfolge der Anweisungen außerhalb der Reihenfolge liegt, aber die Lade-/Speicherungseinheit 5060 muss für Programme den Eindruck aufrechterhalten, dass Anweisungen innerhalb der Reihenfolge ausgeführt wurden. Eine Lade-/Speicherungseinheit 5060 kann mit allgemeinen Registern 5059, mit der Decodierungs-/Zuleitungseinheit 5056, Cache-Zwischenspeicher-/Speicherschnittstelle 5053 oder anderen Elementen 5083 Daten austauschen und weist verschiedene Registerschaltungen, ALUs 5085 und eine Steuerlogik (CTL) 5090 auf, um Speicheradressen zu berechnen und die Reihenfolgeplanung der Pipeline bereitzustellen, sodass die Reihenfolge der Operationen eingehalten wird. Einige Operationen können außerhalb der Reihenfolge liegen, aber die Lade-/Speicherungseinheit stellt eine Funktionalität bereit, um für das Programm den Eindruck zu erzeugen, dass die außerhalb der Reihenfolge liegenden Operationen innerhalb der Reihenfolge ausgeführt wurden, wie in der Technik allgemein bekannt ist.
  • Vorzugsweise werden Adressen, die ein Anwendungsprogramm „sieht“, oftmals als „virtuelle Adressen“ bezeichnet. Virtuelle Adressen werden manchmal als „logische Adressen“ und „effektive Adressen“ bezeichnet. Diese virtuellen Adressen sind in der Weise virtuell, dass sie durch eine aus einer Vielfalt von Technologien zur dynamischen Adressumsetzung (DAT) auf eine physische Speicherposition umgeleitet werden, einschließlich, ohne darauf beschränkt zu sein, des Voranstellens eines Offset-Wertes vor eine virtuelle Adresse, des Umsetzens der virtuellen Adressen über eine oder mehrere Umsetzungstabellen, wobei die Umsetzungstabellen vorzugsweise mindestens eine Segmenttabelle und eine Seitentabelle allein oder in Kombination aufweisen, wobei die Segmenttabelle einen Eintrag aufweist, der auf die Seitentabelle zeigt. Bei der z/Architecture® wird eine Umsetzungshierarchie bereitgestellt, einschließlich einer ersten Tabelle einer Region, einer zweiten Tabelle einer Region, einer dritten Tabelle einer Region, einer Segmenttabelle und einer optionalen Seitentabelle. Das Betriebsverhalten der Adressumsetzung wird oftmals durch Nutzung eines Adressumsetzpuffers (TLB) verbessert, der Einträge aufweist, die eine virtuelle Adresse einer zugehörigen physischen Speicherposition zuordnen. Die Einträge werden erzeugt, wenn die DAT eine virtuelle Adresse unter Verwendung der Umsetzungstabellen umsetzt. Die nachfolgende Verwendung der virtuellen Adresse kann dann den Eintrag des schnelleren TLB anstelle der langsamen aufeinanderfolgenden Zugriffe auf Umsetzungstabellen nutzen. Der TLB-Inhalt kann durch eine Vielfalt von Ersetzungsalgorithmen einschließlich LRU (Least Recently Used, am längsten nicht verwendet) verwaltet werden
  • Wenn der Prozessor ein Prozessor eines Mehrprozessorsystems ist, ist jeder Prozessor dafür zuständig, gemeinsam genutzte Ressourcen wie zum Beispiel E/A, Cache-Zwischenspeicher, TLBs und Speicher aus Kohärenzgründen gesperrt zu halten. Normalerweise werden zur Verwaltung der Kohärenz von Cache-Zwischenspeichern Durchsuchungstechnologien („Snoop“-Technologien) genutzt. In einer Durchsuchungsumgebung kann jede Cache-Zeile als in einem beliebigen aus einem gemeinsam genutzten Zustand, einem ausschließlichen Zustand, einem geänderten Zustand, einem ungültigen Zustand und dergleichen markiert werden, um die gemeinsame Nutzung zu erleichtern.
  • E/A-Einheiten 5054 (11) stellen dem Prozessor Mittel bereit, um Peripherieeinheiten anzuhängen, zu denen Band, Platte, Drucker, Anzeigeeinheiten und Netzwerke gehören. E/A-Einheiten werden dem Computerprogramm oftmals durch Softwaretreiber bereitgestellt. Bei Großrechnern wie zum Beispiel dem System z® von IBM® sind Kanaladapter und Adapter offener Systeme E/A-Einheiten des Großrechners, die den Datenaustausch zwischen dem Betriebssystem und Peripherieeinheiten bereitstellen.
  • In 13 ist ein Beispiel eines emulierten Host-Computersystems 5092 bereitgestellt, das ein Host-Computersystem 5000' einer Host-Architektur emuliert. In dem emulierten Host-Computersystem 5092 ist der Host-Prozessor (CPU) 5091 ein emulierter Host-Prozessor (bzw. virtueller Host-Prozessor) und weist einen Emulationsprozessor 5093 mit einer anderen Architektur des nativen Anweisungssatzes als der des Prozessors 5091 des Host-Computers 5000' auf. Das emulierte Host-Computersystem 5092 weist einen Speicher 5094 auf, der für den Emulationsprozessor 5093 zugänglich ist. Bei der beispielhaften Ausführungsform ist der Speicher 5094 in einen Teil für Host-Computerspeicher 5096 und in einen Teil für Emulationsroutinen 5097 unterteilt. Der Host-Computerspeicher 5096 steht entsprechend der Architektur des Host-Computers Programmen des emulierten Host-Computers 5092 zur Verfügung. Der Emulationsprozessor 5093 führt native Anweisungen eines angelegten Anweisungssatzes einer Architektur aus, die sich von der des emulierten Prozessors 5091 unterscheidet, wobei die nativen Anweisungen von einem Speicher 5097 für emulierte Routinen empfangen werden, und kann von einem Programm im Host-Computerspeicher 5096 zwecks Ausführung auf eine Host-Anweisung zugreifen, indem eine oder mehrere Anweisungen genutzt werden, die in einer Reihenfolge- und Zugriffs-/Decodierroutine empfangen wurden, die die Host-Anweisungen decodieren kann, auf die zugegriffen wurde, um eine Ausführungsroutine für native Anweisungen zum Emulieren der Funktion der Host-Anweisung zu ermitteln, auf die zugegriffen wurde. Andere Einrichtungen, die für die Architektur des Host-Computersystems 5000' definiert sind, können durch Routinen für angelegte Einrichtungen emuliert werden, zu denen Einrichtungen wie zum Beispiel Mehrzweckregister, Steuerregister, Unterstützung für die dynamische Adressumsetzung und E/A-Subsysteme sowie Prozessor-Cache-Zwischenspeicher gehören. Die Emulationsroutinen können auch von Funktionen profitieren, die im Emulationsprozessor 5093 zur Verfügung stehen (wie zum Beispiel allgemeine Register und die dynamische Umsetzung virtueller Adressen), um das Betriebsverhalten der Emulationsroutinen zu verbessern. Spezielle Hardware und ausgelagerte Module können ebenso bereitgestellt sein, um den Prozessor 5093 beim Emulieren der Funktion des Host-Computers 5000' zu unterstützen.

Claims (20)

  1. Verfahren zum Ausführen einer Maschinenanweisung in einem ersten Pipeline-Stadium, aufweisend die Schritte: - Empfangen einer Maschinenanweisung durch einen Prozessor zur Ausführung, wobei die Maschinenanweisung entsprechend einer Computerarchitektur zur Ausführung durch Computer definiert ist, wobei die Maschinenanweisung aufweist: o mindestens ein Operationscodefeld zum Angeben eines Operationscodes, wobei der Operationscode eine Verzweigungsoperation definiert; und o mindestens ein Feld zum Festlegen einer Zielposition, zu der verzweigt werden soll; und - Ausführen der Maschinenanweisung in einem ersten Verarbeitungsstrom, wobei das Ausführen aufweist: ◯ Starten eines zweiten Verarbeitungsstroms, wobei der zweite Verarbeitungsstrom in einer Beziehung zum ersten Verarbeitungsstrom steht und Hardwareressourcen des ersten Verarbeitungsstroms gemeinsam mit diesem nutzt, wobei durch den zweiten Verarbeitungsstrom Bezug auf den architektonischen Zustand des ersten Verarbeitungsstroms genommen wird; ◯ Ermitteln auf der Grundlage des Startens des zweiten Verarbeitungsstroms, ob eine Transaktion für den zweiten Verarbeitungsstrom gestartet werden soll, wobei das Ermitteln auf einem Feld der Maschinenanweisung des ersten Verarbeitungsstroms beruht oder durch Hardware des Prozessors vorgegeben wird; ◯ auf der Grundlage des Feststellens, dass die Transaktion gestartet werden soll, Starten der Transaktion für den zweiten Verarbeitungsstrom, ▪ wobei die Transaktion eine oder mehrere Anweisungen aufweist, die an der Zielposition beginnen, die unter Verwendung des mindestens einen Feldes der Maschinenanweisung definiert ist, die eine oder mehreren Anweisungen außerhalb der Ausführungsreihenfolge gegenüber einer oder mehreren Anweisungen liegen, die gegenwärtig durch den ersten Verarbeitungsstrom verarbeitet werden, der erste Verarbeitungsstrom die Verarbeitung einer oder mehrerer Anweisungen im Anschluss an die Maschinenanweisung fortsetzt, und wobei Ergebnisse der einen oder mehreren Anweisungen des zweiten Verarbeitungsstroms als Teil der Transaktion als eine atomare Einheit festgeschrieben werden, und ▪ wobei die Transaktion nicht endet, bis der erste Verarbeitungsstrom einen vordefinierten Punkt in der Verarbeitung erreicht und der zweite Verarbeitungsstrom zum ersten Verarbeitungsstrom werden soll; und ◯ und wobei die Ausführung des zweiten Verarbeitungsstroms in der Weise auf Vermutungen beruht, dass mindestens eine Anweisung der einen oder mehreren Anweisungen des zweiten Verarbeitungsstroms ausgeführt wird, selbst wenn das Erreichen der mindestens einen Anweisung des zweiten Datenstroms durch die Verarbeitung des ersten Datenstroms provisorisch ist; ◯ auf der Grundlage des Feststellens, dass die Transaktion nicht gestartet werden soll, Ausführen eines oder mehrerer anderer Pipeline-Stadien und Aussetzen des Freigebens von Ressourcen und Aussetzen des Zurückziehens von Anweisungen aus „Abschluss außerhalb der Reihenfolge“-Tabellen, so dass nur so viele Ressourcen durch den zweiten Verarbeitungsstrom belegt werden, wie der erste Verarbeitungsstrom übergeben hat, so dass der erste Verarbeitungsstrom nicht durch den zweiten Verarbeitungsstrom bis zur Blockade verlangsamt wird.
  2. Verfahren nach Anspruch 1, wobei mindestens eine Anweisung der einen oder mehreren Anweisungen, die im zweiten Verarbeitungsstrom ausgeführt werden, zumindest teilweise parallel zu einer oder mehreren Anweisungen verarbeitet werden, die im ersten Verarbeitungsstrom verarbeitet werden.
  3. Verfahren nach Anspruch 1, wobei die Zuordnung des ersten Verarbeitungsstroms aufgehoben wird, nachdem der erste Verarbeitungsstrom eine Anweisung erreicht hat, die eine Zielposition einer Anweisung des zweiten Verarbeitungsstroms aufweist.
  4. Verfahren nach Anspruch 3, wobei die durch den ersten Verarbeitungsstrom erreichte Anweisung eine Schließen-Anweisung einer Hauptverzweigung aufweist.
  5. Verfahren nach Anspruch 4, ferner aufweisend: - auf der Grundlage der Schließen-Anweisung der Hauptverzweigung Setzen eines Prüfpunktes bei einer oder mehreren abgeschlossenen Anweisungen, sofern zutreffend, des zweiten Verarbeitungsstroms; und - Umwandeln des zweiten Verarbeitungsstroms in einen neuen ersten Verarbeitungsstrom.
  6. Verfahren nach Anspruch 1, wobei der zweite Verarbeitungsstrom einen untergeordneten Thread in einem Prozessor mit gleichzeitigem Multithreading aufweist und der erste Verarbeitungsstrom einen übergeordneten Thread in dem Prozessor mit gleichzeitigem Multithreading aufweist.
  7. Verfahren nach Anspruch 1, wobei die Maschinenanweisung eine Öffnen-Anweisung einer Hauptverzweigung aufweist, und wobei die Maschinenanweisung ein Verzweigungsartfeld aufweist, das zur Anzeige dient, dass die Maschinenanweisung eine Öffnen-Anweisung einer Hauptverzweigung ist.
  8. Verfahren nach Anspruch 7, wobei das Verzweigungsartfeld eines der folgenden ist: der Operationscode; ein Teil des Operationscodes; oder ein von Operationscode getrenntes Feld.
  9. Verfahren nach Anspruch 1, wobei die mindestens eine Anweisung der einen oder mehreren Anweisungen des zweiten Verarbeitungsstroms in Bezug auf die mindestens eine Anweisung des ersten Verarbeitungsstroms außerhalb der Reihenfolge decodiert und zugeleitet wird.
  10. Verfahren nach Anspruch 9, wobei die mindestens eine Anweisung auch außerhalb der Reihenfolge ausgeführt, aber innerhalb der Reihenfolge abgeschlossen wird.
  11. Verfahren nach Anspruch 1, ferner aufweisend das Starten eines dritten Verarbeitungsstroms durch den zweiten Verarbeitungsstrom auf der Grundlage der Ausführung einer Öffnen-Anweisung einer Hauptverzweigung im zweiten Verarbeitungsstrom.
  12. Verfahren nach Anspruch 1, ferner aufweisend das Neustarten des ersten Verarbeitungsstroms, wobei das Neustarten den zweiten Verarbeitungsstrom abbricht.
  13. Verfahren nach Anspruch 1, ferner aufweisend das Steuern der Verwendung von Ressourcen durch den zweiten Verarbeitungsstrom, um zu verhindern, dass der zweite Verarbeitungsstrom den Fortschritt des ersten Verarbeitungsstroms behindert.
  14. Verfahren nach Anspruch 1, wobei das Starten des zweiten Verarbeitungsstroms das Starten der Transaktionsausführung einer Transaktion für den zweiten Verarbeitungsstrom aufweist, sodass die Transaktion die Ausführung der einen oder mehreren Anweisungen ab der Zielposition aufweist, und wobei das Starten der Transaktion das Aufnehmen eine Momentaufnahme eines gegenwärtigen Zustands des Prozessors aufweist.
  15. Verfahren nach Anspruch 14, ferner aufweisend: - Ermitteln auf der Grundlage eines Feldes der Maschinenanweisung, ob die Transaktion gestartet werden soll; und - wobei das Starten der Transaktion auf das Feststellen einer Anzeige beruht, dass die Anweisung gestartet werden soll.
  16. Verfahren nach Anspruch 14, ferner aufweisend: - Ermitteln durch Hardware, ob die Transaktion gestartet werden soll; und wobei das Starten der Transaktion auf das Feststellen einer Anzeige beruht, dass die Anweisung gestartet werden soll.
  17. Verfahren nach Anspruch 16, wobei das Ermitteln durch Hardware ein Feld der Maschinenanweisung außer Kraft setzt, das anzeigt, ob die Transaktion gestartet werden soll.
  18. Verfahren nach Anspruch 14, wobei die Zuordnung des ersten Verarbeitungsstroms aufgehoben wird, nachdem der erste Verarbeitungsstrom eine Anweisung erreicht hat, die eine Zielposition einer Anweisung des zweiten Verarbeitungsstroms aufweist, wobei die durch den ersten Verarbeitungsstrom erreichte Anweisung eine Schließen-Anweisung einer Hauptverzweigung ist, und wobei das Verfahren ferner aufweist: - auf der Grundlage der Verarbeitung der Schließen-Anweisung der Hauptverzweigung Beenden der Transaktion des zweiten Verarbeitungsstroms und Aktualisieren des Zustands, um die Transaktion widerzuspiegeln; und - Umwandeln des zweiten Verarbeitungsstroms in einen neuen ersten Verarbeitungsstrom.
  19. System, das Mittel aufweist, die so gestaltet sind, dass sie alle Schritte des Verfahrens nach beliebigen der vorhergehenden Ansprüche ausführen.
  20. Computerprogramm, das Anweisungen zum Ausführen aller Schritte des Verfahrens nach beliebigen der vorhergehenden Verfahrensansprüche aufweist, wenn das Computerprogramm auf einem Computersystem ausgeführt wird.
DE112013000453.4T 2012-01-31 2013-01-23 Hauptverzweigungsanweisungen mit Transaktionsspeicher Active DE112013000453B4 (de)

Applications Claiming Priority (5)

Application Number Priority Date Filing Date Title
US13/362,513 2012-01-31
US13/362,574 US9280398B2 (en) 2012-01-31 2012-01-31 Major branch instructions
US13/362,574 2012-01-31
US13/362,513 US9229722B2 (en) 2012-01-31 2012-01-31 Major branch instructions with transactional memory
PCT/EP2013/051227 WO2013113595A1 (en) 2012-01-31 2013-01-23 Major branch instructions with transactional memory

Publications (2)

Publication Number Publication Date
DE112013000453T5 DE112013000453T5 (de) 2014-09-11
DE112013000453B4 true DE112013000453B4 (de) 2023-05-17

Family

ID=47624055

Family Applications (1)

Application Number Title Priority Date Filing Date
DE112013000453.4T Active DE112013000453B4 (de) 2012-01-31 2013-01-23 Hauptverzweigungsanweisungen mit Transaktionsspeicher

Country Status (4)

Country Link
CN (1) CN104081343B (de)
DE (1) DE112013000453B4 (de)
GB (1) GB2513516A (de)
WO (1) WO2013113595A1 (de)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10019264B2 (en) * 2016-02-24 2018-07-10 Intel Corporation System and method for contextual vectorization of instructions at runtime

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US3665022A (en) 1969-09-02 1972-05-23 Shionogi & Co Degradation of side chain in sapogenins
US3666022A (en) 1970-11-23 1972-05-30 Edward A Bailey Striking bar
US5317005A (en) 1990-07-19 1994-05-31 Schering Agrochemicals Limited Pyrimidinyl and triazinyl herbicides
US5318005A (en) 1991-10-17 1994-06-07 Wolfgang Mayer Apparatus for cutting plate-shaped workpieces and for edge processing thereof

Family Cites Families (15)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO1994027215A1 (en) 1993-05-07 1994-11-24 Apple Computer, Inc. Method for decoding guest instructions for a host computer
US5551013A (en) 1994-06-03 1996-08-27 International Business Machines Corporation Multiprocessor for hardware emulation
US5812811A (en) * 1995-02-03 1998-09-22 International Business Machines Corporation Executing speculative parallel instructions threads with forking and inter-thread communication
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
US5907702A (en) * 1997-03-28 1999-05-25 International Business Machines Corporation Method and apparatus for decreasing thread switch latency in a multithread processor
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
US6594755B1 (en) * 2000-01-04 2003-07-15 National Semiconductor Corporation System and method for interleaved execution of multiple independent threads
JP3641997B2 (ja) * 2000-03-30 2005-04-27 日本電気株式会社 プログラム変換装置及び方法並びに記録媒体
WO2003007153A2 (en) * 2001-07-13 2003-01-23 Sun Microsystems, Inc. Facilitating efficient join operations between a head thread and a speculative thread
US20040154010A1 (en) * 2003-01-31 2004-08-05 Pedro Marcuello Control-quasi-independent-points guided speculative multithreading
US7930695B2 (en) * 2006-04-06 2011-04-19 Oracle America, Inc. Method and apparatus for synchronizing threads on a processor that supports transactional memory
US9146745B2 (en) * 2006-06-29 2015-09-29 Intel Corporation Method and apparatus for partitioned pipelined execution of multiple execution threads
US20100162247A1 (en) * 2008-12-19 2010-06-24 Adam Welc Methods and systems for transactional nested parallelism

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US3665022A (en) 1969-09-02 1972-05-23 Shionogi & Co Degradation of side chain in sapogenins
US3666022A (en) 1970-11-23 1972-05-30 Edward A Bailey Striking bar
US5317005A (en) 1990-07-19 1994-05-31 Schering Agrochemicals Limited Pyrimidinyl and triazinyl herbicides
US5318005A (en) 1991-10-17 1994-06-07 Wolfgang Mayer Apparatus for cutting plate-shaped workpieces and for edge processing thereof

Non-Patent Citations (6)

* Cited by examiner, † Cited by third party
Title
Bhowmik, A.; Franklin, M.; Trinh, Q.: A Study of Compiler-Directed Multithreading for Embedded Applications. In: Online Proceedings - MTEAC-5 - Austin, Texas, 2001, S. 1-8. http://cseweb.ucsd.edu/~tullsen/mteac5/ [abgerufen am 16.05.2017]
Kholodiv, Igor: CIS-77 Introduction to Computer Systems, Week 6: Instruction Format Design, Bristol Community College. URL: http://www.c-jump.com/CIS77/CIS77syllabus.htm, Archiviert in http://www.archive.org am 21.01.2010 [abgerufen am 25.05.2021]
Marcuello Pascual, Pedro: Speculative multithreaded processors. TDX (Tesis Doctorals en Xarxa). Catalunya : Universitat Politecnica de Catalunya, 16.02.2004. S. i, iii, v-vi, xi-xiii, 8-9, 13-16, 18-19, 21, 23-29, 33, 38, 87-90, 92-95, 100, 102-106, 109, 112, 122, 123-125, 129, 133-134-135, 141-143. - ISBN 8468858196. http://hdl.handle.net/10803/5976 [abgerufen am 16.05.2017]
Martin, Milo: Introduction To Computer Architecture (CIS 501), Unit 10: Hardware Multithreading, University of Pennsylvania, 2010. URL: https://www.cis.upenn.edu/~milom/cis501-Fall10/ [abgerufen am 16.05.2017]
Niko Demus Barli: Designing NEKO: A Speculative Multithreading Chip Multiprocessor, Dissertation, The University of Tokyo, 2004, S. i, iii-iv, 1-4, 7-17, 20-21, 23-35, 37-38, 48, 55-58, 62, 100, 102, 125-128. URL: http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.95.7783&rep=rep1&type=pdf [abgerufen am 16.05.2017]
Porter, L.; Choi, B.; Tullsen, D. M.: Mapping Out a Path from Hardware Transactional Memory to Speculative Multithreading. In: 2009 18th International Conference on Parallel Architectures and Compilation Techniques, 2009, S. 313-324. - ISSN 1089-795X. https://doi.org/10.1109/PACT.2009.37 [abgerufen am 16.05.2017]

Also Published As

Publication number Publication date
CN104081343B (zh) 2016-08-17
WO2013113595A1 (en) 2013-08-08
CN104081343A (zh) 2014-10-01
DE112013000453T5 (de) 2014-09-11
GB2513516A (en) 2014-10-29
GB201414684D0 (en) 2014-10-01

Similar Documents

Publication Publication Date Title
DE102018130441A1 (de) Einrichtung, Verfahren und Systeme mit konfigurierbarem räumlichem Beschleuniger
DE112007003801B3 (de) Vorrichtung mit einer speichereinheit und einer logik zur bereitstellung eines effizienten mechanismus‘ für transaktionalspeicherausführungen in out-of-order-prozessoren
DE112005003098B4 (de) Verfahren und Vorrichtung zum Zugreifen auf einen physikalischen Speicher von einer CPU oder einem Prozessorelement mit hoher Leistung
DE102014108753A1 (de) Vorhersageeinheiten-Datenstruktur zur Verwendung bei der Verarbeitung im Pipelinesystem
DE102014108785A1 (de) Vorausschauendes abrufen und decodieren bei ausgewählten anweisungen
DE102018005216A1 (de) Prozessoren, Verfahren und Systeme für einen konfigurierbaren, räumlichen Beschleuniger mit Transaktions- und Wiederholungsmerkmalen
DE112010004322T5 (de) Vorhersagen und Vermeiden von Operand-Speichervorgang-Vergleich-Gefahren in Mikroprozessoren mit abweichender Reihenfolge
DE102018126650A1 (de) Einrichtung, verfahren und systeme für datenspeicherkonsistenz in einem konfigurierbaren räumlichen beschleuniger
DE102015002383A1 (de) Verfahren und Vorrichtung zum Implementieren einer dynamischen Out-of-order-Prozessorpipeline
DE112018006124B4 (de) ZUSAMMENFÜHREN VON EINTRÄGEN GLOBALER ABSCHLUSSTABELLEN IN EINEM OoO-PROZESSOR
DE112013002956T5 (de) Vorabladen von Verzweigungsvorhersagen
DE102010035603A1 (de) Bereitstellen von Hardwareunterstützung für gemeinsam benutzten virtuellen Speicher zwischen physischem Lokal- und Fernspeicher
DE112013003731T5 (de) Neue befehls- und hocheffiziente Mikroarchitektur zum ermöglichen einer sofortigen Kontextumschaltung für Benutzerebenen-Threading
DE102010053088A1 (de) Sammeln und Streuen mehrerer Datenelemente
DE112011100715T5 (de) Hardware-hilfs-thread
DE102014108738A1 (de) Vorausschauendes Abrufen und Decodieren bei ausgewählten Rückkehranweisungen
DE202016009016U1 (de) Befehle und Logik für wiederkehrende benachbarte Sammlungen
DE102014119281A1 (de) Prozessor mit virtualisierter befehlssatzstruktur & verfahren
DE112014000252T5 (de) Anweisung "Vector floating point test data class immediate"
DE102014109083A1 (de) Bilden von Anweisungsgruppen basierend auf der Optimierung von Anweisungen bei der Dekodierung
DE112013005466T5 (de) Anweisung "Vector generate mask"
DE102018002525A1 (de) Hybridatomaritätsunterstützung für einen binärübersetzungsbasierten mikroprozessor
DE112013004800T5 (de) Anweisung zur Bitverschiebung nach links mit Ziehen von Einsen in niedrigwertigere Bit
DE112018004388T5 (de) Globale speicher- und ladeoperationen von konfigurationsstatusregistern
DE112013005500T5 (de) Anweisung zum Drehen und Einfügen eines Vektorelements unter einer Maske

Legal Events

Date Code Title Description
R012 Request for examination validly filed
R016 Response to examination communication
R018 Grant decision by examination section/examining division
R084 Declaration of willingness to licence
R020 Patent grant now final