DE69209888T2 - Befehlablaufsteuerung für einen Rechner - Google Patents
Befehlablaufsteuerung für einen RechnerInfo
- Publication number
- DE69209888T2 DE69209888T2 DE69209888T DE69209888T DE69209888T2 DE 69209888 T2 DE69209888 T2 DE 69209888T2 DE 69209888 T DE69209888 T DE 69209888T DE 69209888 T DE69209888 T DE 69209888T DE 69209888 T2 DE69209888 T2 DE 69209888T2
- Authority
- DE
- Germany
- Prior art keywords
- instruction
- block
- instructions
- load
- base register
- 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.)
- Expired - Lifetime
Links
- 238000000034 method Methods 0.000 claims description 10
- 230000009191 jumping Effects 0.000 claims description 6
- 230000004044 response Effects 0.000 claims description 2
- 241000761456 Nops Species 0.000 description 2
- 230000001934 delay Effects 0.000 description 2
- 238000013461 design Methods 0.000 description 2
- 230000006870 function Effects 0.000 description 2
- 230000007246 mechanism Effects 0.000 description 2
- 108010020615 nociceptin receptor Proteins 0.000 description 2
- 238000012827 research and development Methods 0.000 description 2
- XUIMIQQOPSSXEZ-UHFFFAOYSA-N Silicon Chemical compound [Si] XUIMIQQOPSSXEZ-UHFFFAOYSA-N 0.000 description 1
- 230000003416 augmentation Effects 0.000 description 1
- 230000009286 beneficial effect Effects 0.000 description 1
- 230000008901 benefit Effects 0.000 description 1
- 238000010276 construction Methods 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 238000002474 experimental method Methods 0.000 description 1
- 230000008520 organization Effects 0.000 description 1
- 230000008569 process Effects 0.000 description 1
- 229910052710 silicon Inorganic materials 0.000 description 1
- 239000010703 silicon Substances 0.000 description 1
- 230000009466 transformation Effects 0.000 description 1
- 238000000844 transformation Methods 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/3004—Arrangements for executing specific machine instructions to perform operations on memory
- G06F9/30043—LOAD or STORE instructions; Clear instruction
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/44—Encoding
- G06F8/445—Exploiting fine grain parallelism, i.e. parallelism at instruction level
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3836—Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
- G06F9/3842—Speculative instruction execution
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Advance Control (AREA)
- Devices For Executing Special Programs (AREA)
- Executing Machine-Instructions (AREA)
Description
- Die vorliegende Erfindung betrifft eine Befehlablaufsteuerung für einen Rechner und insbesondere eine Befehlablaufsteuerung, die spektulativ den Ablauf bestimmter Kategorien von Ladebefehlen auf eine Weise planen kann, die sich für den Einsatz mit einem Parallel-/Pipeline-Rechner eignet.
- Das Steuern von Befehlsabläufen ist ein Prozeß, bei dem Programmanweisungen umgeordnet oder transformiert werden, bevor sie von einem Prozessor ausgeführt werden, um mögliche Laufzeitverzögerungen zwischen kompilierten Befehlen zu reduzieren. Das Steuern von Befehlsabläufen erfolgt in der Regel auf einer mittleren Sprach- oder Assembliercode-Ebene. Solche Transformationen müssen Datendependenzen erhalten und unterliegen auch anderen Einschränkungen. Dies kann besonders dann von Vorteil sein, wenn für Pipeline- Maschinenarchitekturen kompiliert wird, die durch überlappende Befehlsausführung einen erhöhten Durchsatz ermöglichen. Wenn z. B. eine Verzögerung eines Zyklus zwischen dem Holen und dem Verwenden eines Wertes W eintritt, wäre es wünschenswert, diese Verzögerung mit einem Befehl "abzudecken", der von W unabhängig ist und zur Ausführung "bereit" ist.
- Eine besondere Anwendung der Befehlablaufsteuerung liegt im Bereich der sogenannten RISC-Architektur (Reduced Instruction Set Computer, Rechner mit reduziertem Befehlssatz). Eine Einführung in RISC-Rechner findet sich in folgendem Artikel:
- R1 D.A. Patterson, "Reduced instruction set computers", erschienen in den Communications of the ACM (Jan. 1985), Seite 8-21.
- Das RISC-Konzept für den Bau von Hochgeschwindigkeitsprozessoren, das Ende der siebziger Jahre aufkam, betont die Notwendigkeit der Rationalisierung von Programmbefehlen. Dadurch wurden Befehle neu geordnet, in der Regel auf der mittleren Sprach- oder Assembliercode-Ebene, um das Pipelining voll zu nutzen und dadurch die Geschwindigkeit zu steigern. Die Aufgabe der Befehlablaufsteuerung wird optimierenden Kompilierern aufgebürdet, die den Code für RISC-Prozessoren erzeugen. In der Regel führen die Kompilierer die Befehlablaufsteuerung auf der Ebene der Grundblöcke durch, so daß die meisten Probleme gelöst werden, die sich aus der Pipeline-Struktur von RISC-Prozessoren ergeben.
- Konzepte für die Ablaufsteuerung auf der Befehlsebene für Pipeline-Maschinen sind in folgendem Artikeln beschrieben:
- R2 J.J. Hennessy und T. Gross, "Postpass Code Optimisation of Pipeline Constraints", erschienen in den ACM Transactions on Programming Languages and Systems 5 (Juli 1983), Seite 422-448.
- R3 P.B. Gibbons und 5.5. Muchnick, "Efficient Instruction Scheduling for a Pipelined Architecture", erschienen in den Proceedings of the ACM Symposium on Compiler Construction (Juni 1986).
- R4 H. Warren, "Instruction Scheduling for the IBM RISC System/6000 Processor", erschienen im IBM Journal of Research and Development, Bd. 34, Nr. 1, Jan. 1990, Seite 85-92.
- Während es bei Maschinen mit n Funktionseinheiten darauf ankommt, daß pro Zyklus n Befehle ausgeführt werden können, geht es bei Pipeline-Maschinen darum, in jedem Zyklus einen neuen Befehl aus zugeben, so daß die sogenannten NOPs (Nulloperationen) effektiv entfallen. Bei beiden Maschinentypen wird jedoch vom Kompilierer verlangt, daß er im Code Befehle entdeckt, die datenunabhängig sind und die Erzeugung von Code erlauben, der die Betriebsmittel der Maschine besser nutzt.
- Es war eine verbreitete Ansicht, daß solche datenunabhängigen Befehle innerhalb der Grundblöcke zu finden seien und keine Notwendigkeit bestehe, Befehle über die Grenzen der Grundblöcke hinaus zu verschieben. Ein Grundblock ist eine Sequenz aufeinander folgender Befehle, für die der Steuerungsfluß- ohne Warte- oder Sprungmöglichkeit, außer am Austrittspunkt, am Beginn der Sequenz eintritt und an ihrem Ende austritt. Praktisch alle bisherigen Arbeiten zur Implementierung der Befehlablaufsteuerung konzentrierten sich auf die Ablaufsteuerung innerhalb von Grundblöcken (siehe die obigen Referenzen R2, R3 und R4).
- Doch selbst bei einfachen RISC-Architekturen kann ein so beschränkter Typ der Ablaufsteuerung bei einer Vielzahl von Programmen zu einem Code mit vielen NOPs führen, z. B. bei vielen UNIX-Programmen (UNIX ist ein Warenzeichen der UNIX System Laboratories Inc.) mit vielen kleinen Grundblöcken, die in unvorhersehbaren Sprüngen enden. Bei wissenschaftlichen Programmen, bei denen die Grundblöcke meist größer sind, sind diese Probleme meist nicht so schwerwiegend.
- In letzter Zeit entwickelt sich ein neuer Architekturtyp, der RISC um die Möglichkeit erweitert, pro Zyklus mehrere Befehle auszugeben. Siehe dazu z. B. folgenden Artikel:
- R5 R.D. Groves und R. Oehler, "An IBM second generation RISC processor architecture", erschienen in den Proceedings of the IEEE Conference on Computer Design, (Oktober 1989), Seite 134-137.
- Diese Art der Organisation von Hochgeschwindigkeitsprozessoren, die sogenannte Superskalar- oder Superpipeline- Architektur, stellt an die Kompilierer höhere Anforderungen, da die Befehlablaufsteuerung auf der Grundblockebene nicht ausreicht, um die Erzeugung von Code zu erlauben, der die Betriebsmittel der Maschine im wünschenswerten Umfang nutzt. Siehe dazu z. B. folgenden Artikel:
- R6 N.P. Jouppi und D.W. Wall, "Available instruction-level parallelism for superscalar and superpipelined machines", erschienen in den Proceedings of the Third ASPLOS Conference, (April 1989), Seite 272-282.
- über einen neueren Versuch, der Befehlablaufsteuerung für superskalare Maschinen nachzugehen, wurde in folgendem Artikel berichtet:
- R7 M.C. Golumbic und V. Rainish, "Instruction Scheduling beyond Basic Blocks", erschienen im IBM Journal of Research and Development, Bd. 34, Nr. 1, Jan. 1990, Seite 93-97.
- In diesem Artikel werden Verfahren der Codewiederholung für die Ablaufsteuerung jenseits der Grenzen von Grundblöcken untersucht, die zu erheblichen Verbesserungen der Laufzeit des kompilierten Codes geführt haben. Dem Artikel zufolge könnte diese Codewiederholung auf jeden bedingten Sprung angewendet werden, für den die Wahrscheinlichkeit des Zielweges höher eingeschätzt wird als die des sequentiellen Weges.
- In letzter Zeit wurden verschiedene Konzepte zum Verschieben von Befehlen über Grundblockgrenzen hinweg vergestellt, wie z. B. im folgenden Artikel:
- R8 K. Ebcioglu und T. Nakatani, "A new compilation technique for parallelising loops with unpredictable branches on a VLIW architecture", erschienen in den Proceedings of the Workshop on Languages and Compilers for Parallel Computing, (August 1989), Urbana.
- Allerdings ist der Effekt des Verschiebens von Befehlen über Grundblockgrenzen hinweg begrenzt, wenn der Ablauf der Befehle nicht spekulativ gesteuert werden kann. Spekulative Ablaufsteuerung bedeutet, daß Befehle im voraus ausgeführt werden, bevor ein vorausgegangener bedingter Sprung erfolgt ist. Dadurch werden die Ergebnisse solcher spekulativ geplanter Befehle in der nachfolgenden Programmausführung manchmal nicht verwendet.
- Der Artikel von S. Melvin und Y. Patt, "Exploiting Fine- Grained Parallelism through a Combination of Hardware and Software Techniqus", erschienen in Computer Architecture News, Mai 1991, Bd. 19, Nr. 3, Seite 287-296, enthält eine allgemeine Diskussion dreier mikroarchitektonischer Mechanismen: die dynamische Ablaufsteuerung, bei der die Gruppe der Mikrooperationen, die gemeinsam ausgegeben werden, nicht zwangsläufig dieselbe ist, die dann geplant wird; die spekulative Ausführung, bei der ein Mechanismus vorhanden ist, durch den Sprünge vorhergesagt werden und Operationen in der Maschine ausgegeben werden, bevor die Ergebnisse der Vorhersage bestätigt sind; und die Grundblockvergrößerung, bei der aufgrund der spekulativen Ausführung die Grundblöcke aus der Sicht der Hardware vergrößert werden.
- Eine wichtige Klasse spekulativer Befehle sind spekulative Ladebefehle. Dies liegt daran, daß eine Berechnungssequenz in der Regel damit beginnt, daß Operanden vom Speicher in die Register geladen werden. Wenn jedoch Ladebefehle spekulativ geplant werden, kann es in der Programmausführung durch den Zugriff auf eine nicht vorhandene oder geschützte Speicherstelle zu einer unerwünschten Ablaufunterbrechung kommen.
- Aus R7 ist eine Befehlablaufsteuerung zur Umplanung einer Eingangsbefehlsfolge bekannt, um eine Ausgangsbefehlsfolge zur Ausführung auf einem Rechner zu bilden, wobei die Eingangsbefehlsfolge in Blöcke aufeinander folgender Befehle aufgeteilt ist, für die der Steuerungsfluß ohne Sprung- oder Wartemöglichkeit am Beginn des ersten Blocks eintritt und an seinem Ende austritt, wobei die Befehlablaufsteuerung Befehle spekulativ so planen kann, daß Datendependenzen erhalten bleiben und die umgeplanten Befehle ausgeführt werden, bevor ein bedingter Sprung erfolgt, der den Befehlen in der Eingangsbefehlsfolge vorausgeht, indem Befehle von einem Quellbefehlsblock zu einem Zielbefehlsblock verschoben werden, um die Ausgangsbefehlsfolge zu bilden.
- Das Ziel der vorliegenden Erfindung ist es, die spekulative Planung von Ladebefehlen zu ermöglichen, ohne daß solche Programmunterbrechungen verursacht werden.
- Daher wird gemäß einem ersten Aspekt der vorliegenden Erfindung eine Befehlablaufsteuerung des obigen Typs bereitgestellt, die gekennzeichnet ist durch: eine Logik zum Auswählen eines Ladebefehls als Kandidat für die Umplanung; eine Logik zum Feststellen, ob das Basisregister, das der ausgewählte Ladebefehl nutzt, und/oder dessen Inhalt eine von mehreren Bedingungen erfüllen, und eine Logik zum Verschieben des ausgewählten Ladebefehls von dem Quellblock zum Zielblock als Reaktion auf die Feststellung, daß eine der Bedingungen erfüllt ist.
- Wie sicher die Umplanung eines Kandidaten für einen Ladebefehl ist, kann ermittelt werden, indem anhand der Frage, ob das Basisregister, das der Befehl nutzt, und/oder dessen Inhalt eine von mehreren Bedingungen erfüllen, die Ladebefehle in eine Anzahl von Kategorien eingeteilt werden.
- Eine der Bedingungen kann sein, daß das Basisregister einen Zeiger auf einen Speicherbereich enthält, in dem Adressen von globalen Variablen gespeichert sind. Im allgemeinen kann davon ausgegangen werden, daß die spekulative Umplanung von Ladebefehlen, deren Basisregister einen Zeiger auf einen Speicherbereich, in dem Adressen von globalen Variablen gespeichert sind, keine Programmunterbrechung verursachen.
- Eine andere Bedingung kann sein, daß das Basisregister des gewählten Ladebefehls dasselbe Register ist, das auch als Basisregister eines anderen Ladebefehls innerhalb des Zielblocks verwendet wird, und daß kein Befehl existiert, der den Inhalt dieses Registers auf dem Weg zwischen dein Zielblock und dem Quellblock ändert. In diesem Fall muß die Befehlablaufsteuerung vor und nach jedem Datensegment eines Programms ferner ein Mittel zum Zuweisen einer zusätzlichen Scheinseite umfassen, die im Nur-Lese-Modus definiert werden kann. Wenn die Ausführung eines ähnlichen, aber nicht spekulativen Ladebefehls im Zielblock nicht zu einer Programmunterbrechung führt, kann davon ausgegangen werden, daß auch die Ausführung eines spekulativen Ladebefehls nicht zu einer solchen führt, sofern der Inhalt des Registers nicht bei der Programmausführung zwischen Zielblock und Quellblock geändert wird. Die zusätzliche Scheinseite wird benötigt, um zu verhindern, daß ein spekulativer Ladebefehl einen größeren Versatz aufweist als sein nicht spekulatives Gegenstück und daher Datensegmentgrenzen überschreiten und in einen nicht vorhandenen oder geschützten Bereich führen kann. Diese zusätzlichen Seiten können möglichst im Nur-Lese-Modus definiert werden, so daß durch das Ausführen eines Ladebefehls von den Speicherstellen aus, die zu ihnen gehören, keine Programmunterbrechung verursacht wird.
- Eine dritte Bedingung kann sein, daß der Inhalt des Basisregisters des Ladebefehls gleich null ist und daß er nicht auf dem Weg zwischen Zielblock und Quellblock geändert wird. In diesem Fall kann die Seite null durch das Betriebssystem des Rechners, auf dem der umgeplante Code laufen soll, im Nur-Lese-Modus definiert werden, und eine endliche Zahl von Bytes der Seite null, wie z. B. die ersten 64, können mit Nullen gefüllt werden.
- Die Erfindung ermöglicht es ferner, daß zum Kompilieren von Code, der auf einem Rechner laufen soll, ein Kompilierer bereitgestellt wird, der eine Befehlablaufsteuerung gemäß der Erfindung umfaßt. Außerdem wird ein Rechner bereitgestellt, der eine solche Befehlablaufsteuerung enthält. In einer vorteilhaften Form der Erfindung weist der Rechner eine Superskalar- und/oder Superpipeline-Architektur auf.
- Unter einem anderen Aspekt stellt die Erfindung ein Verfahren zur Neuplanung einer Eingangsprogrammbefehlsfolge bereit, wobei die Eingangsbefehlsfolge in Blöcke aufeinander folgender Befehle aufgeteilt ist, für die der Steuerungsfluß ohne Sprung- oder Wartemöglichkeit am Beginn des ersten Blocks eintritt und an seinem Ende austritt, wobei das Verfahren das spekulative Planen von Befehlen umfaßt, so daß Datendependenzen erhalten bleiben und die umgeplanten Befehle ausgeführt werden, bevor ein bedingter Sprung erfolgt, der den Befehlen in der Eingangsbefehlsfolge vorausgeht, indem Befehle von einem Quellbefehlsblock zu einem Zielbefehlsblock verschoben werden, um eine Ausgangsbefehlsfolge zu bilden, wobei das Verfahren durch folgende Schritte gekennzeichnet ist:
- (a) Auswählen eines Ladebefehls aus dem Quellblock als Kandidat für die Umplanung;
- (b) Feststellen, ob das Basisregister, das der Ladebefehl nutzt, und/oder dessen Inhalt eine von mehreren Bedingungen erfüllt; und, wenn ja,
- (c) Umplanen der Eingangsprogrammbefehlsfolge, so daß der Kandidatenbefehl zum Zielblock verschoben wird.
- Im folgenden wird ein Ausführungsbeispiel der Erfindung unter Bezugnahme auf die beiliegenden Tabellen am Ende der Beschreibung und auf die Zeichnung mit einem schematischen Überblick über eine Befehlabfolgesteuerung gemäß der Erfindung beschrieben.
- In diesem Ausführungsbeispiel der Erfindung bildet die Befehlablaufsteuerung einen Teil eines Kompilierers, speziell eines Kompilierers aus der Familie IBM XL für Rechner des Typs IBM RISC System/6000. (IBM und RISC System/6000 sind Warenzeichen der International Business Machine Corporation.)
- Die Zeichnung zeigt einen schematischen Überblick über eine Befehlabfolgesteuerung 10 gemäß der Erfindung. Die Befehlablaufsteuerung nimmt als Eingabe eine Eingangsbefehlsfolge 12. Die Auswahllogik 14 wählt einen datenunabhängigen Ladebefehl als Kandidaten für die spekulative Umplanung von einem Quellbefehlsblock zu einem Zielbefehlsblock aus. Die Feststellungslogik 16 stellt fest, ob der Ladebefehl in eine von drei Kategorien fällt, indem sie das Basisregister, das der Ladebefehl verwendet, sowie dessen Inhalt untersucht und ermittelt, ob eine der drei Bedingungen 18, die die Kategorien definieren, erfüllt ist. Wenn der Ladebefehl in eine der drei Kategorien fällt, verschiebt die Umplanungslogik 20 den Befehl von dem Quellbefehlsblock zum Zielbefehlsblock, um die Ausgangsbefehlsfolge 22 zu bilden.
- Das Wesen der Kategorien und das Zustandekommen der Bedingungen, die ein Ladebefehl erfüllen muß, um zu einer der Kategorien zu gehören, wird weiter unten ausführlich erörtert. Zuerst jedoch soll ein kurzes Beispiel gegeben werden, um das Konzept spekulativer Ladebefehle zu verdeutlichen.
- Die Tabelle I zeigt einen Auszug aus dem Pseudocode des IBM RISC System/6000, der von dem Kompilierer für die innere Schleife der Funktion XLYGETVALUE erzeugt, die dem Benchmark SPEC LI entnommen ist. Wir gehen hier bei allen Codebeispielen davon aus, daß die Muster des Codes denen ähneln, die der IBM-XL-Kompilierer für den in R5 erörterten Prozessor des IBM RISC System/6000 erzeugt. Die Benchmark- Suite SPEC wurde vor kurzem als Standard für die Messung der Leistung von Workstation-Systemen angenommen. Der Lisp- Interpreter (LI) gehört zu den Benchmark-Programmen, die in der Programmiersprache C geschrieben sind.
- In den Beispielen bedeutet SHADOW4$ einen Speicherzugriff über einen Zeiger. Die Adresse der Speicherstelle, auf die ein Ladebefehl zugreift, wird durch die Summe aus dem Inhalt seines Basisregisters und seinem Versatz berechnet. So greift z. B. L r5=SHADOW4$(r5,8) auf die Speicherstelle bei dem Adreßinhalt (r5)+8 zu.
- Für die Zeitverzögerungen, die in der Prozessor-Pipeline auftreten, wird folgende Struktur angenommen:
- 1. Zwischen einem Ladebefehl und einer anschließenden Nutzung des dadurch geladenen Operanden gibt es eine Verzögerung von einem Zyklus.
- 2. Zwischen einem Vergleichsbefehl und einem anschließenden Sprung unter der Bedingung, die durch den Vergleich gestellt wurde, gibt es eine Verzögerung von drei Zyklen. Tatsächlich gibt es bei dem Prozessor des IBM RISC System/6000 oft keine Verzögerung zwischen einem Vergleich und einem entsprechend bedingten Sprung, wenn dieser Sprung nicht erfolgt. Der Einfachheit halber wird jedoch hier davon ausgegangen, daß die Verzögerung immer eintritt.
- Unter diesen Annahmen führt die Schleife, die in dem in Tabelle I dargestellten Beispiel präsentiert wird, pro Durchgang 14 Zyklen aus. Die Geschwindigkeit dieser Schleife kann nicht gesteigert werden, indem die Befehle innerhalb der beiden Grundblöcke neu geordnet werden.
- Wenn jedoch Befehle spekulativ von dem zweiten Block (B2) zum ersten (B1) verschoben werden, erhalten wir den in Tabelle II dargestellten Code, der acht Zyklen pro Durchgang ausführt und eine verbesserte Version des in Tabelle I dargestellten Codes ist.
- Der Ladebefehl L r5=SHADOW4$(r5,8) wurde nun spekulativ geplant, da ohne Verschiebung dieses Befehls überhaupt kein Befehl verschoben werden kann. Allerdings muß die Frage beantwortet werden, ob dieser Ladebefehl unter irgendwelchen Umständen eine Programmunterbrechung verursachen kann.
- In diesem speziellen Beispiel stellen wir fest, daß es einen weiteren nicht-spekulativen Ladebefehl L r4=SHADOW4$(r5,4) gab, der dasselbe Basisregister mit einem etwas anderen Versatz verwendet. Es kann davon ausgegangen werden, daß diese beiden Ladebefehle verschiedene Felder desselben Datensatzes referenzieren. Daher ist mit großer Gewißheit anzunehmen, daß dieser spekulative Ladebefehl niemals zu einer Programmunterbrechung führen wird. Nachfolgend wird gezeigt, wie diese Beobachtung genutzt werden kann, um eine Software-Umgebung mit der vollen Gewißheit bereitzustellen, daß keine Unterbrechung auftritt.
- Nehmen wir einmal an, daß wir einen Ladebefehl von einem Quellblock wie z. B. B2 zu einem Zielblock B1 verschieben wollen. Wir wollen daher wissen, ob es sicher ist, den Ladebefehl von B2 zu B1 zu verschieben.
- Die Adresse der Speicherstelle, auf die ein Ladebefehl zugreift, wird durch die Summe aus dem Inhalt seines Basisregisters und seinem Versatz berechnet. So greift z. B. L r5=SHADOW4$(r5,8) auf die Speicherstelle bei dem Adreßinhalt (r5)+8 zu. Die Frage der Sicherheit kann daher auch wie folgt formuliert werden: Ist es auch dann zulässig, auf die referenzierte Speicherstelle zuzugreifen, wenn der Befehl sich im Zielblock statt im Quellblock befindet?
- Je nach dem Basisregister, das ein Ladebefehl verwendet, und/oder dessen Inhalt lassen sich drei Kategorien sicherer spekulativer Ladebefehle, d. h. spekulativer Ladebefehle, die niemals zu einer Unterbrechung führen, unterscheiden.
- Diese drei Kategorien sind:
- 1. Globale Ladebefehle, d. h. Ladebefehle für globale Skalarvariablen;
- 2. Ähnliche Ladebefehle, d. h. Ladebefehle, die einem Ladebefehl im Zielblock "ähnlich" sind;
- 3. NULL-Zeiger-Ladebefehle, d. h. Ladebefehle, deren Basisregisterinhalt gleich null ist.
- Diese drei Kategorieren sicherer spekulativer Ladebefehle werden nun nacheinander erörtert.
- In der Umgebung des XL-Kompilierers werden die Adressen der globalen Skalarvariablen in der Ladezeit berechnet und in einem Inhaltsverzeichnis (TOC, Table of Contents) gespeichert. Ein spezielles Register wird für einen Zeiger auf das TOC zugewiesen, so daß es sicher ist, Daten aus den Adressen im TOC zu holen und auf sie zuzugreifen, wenn der Ladebefehl sich nicht im Quellblock, sondern im Zielblock befindet.
- Um globale Ladebefehle zu erkennen, können wir den Ladebefehl auf dessen Basisregister hin durchsuchen, und wenn es sich um das spezielle Register mit dem TOC-Zeiger handelt, können wir davon ausgehen, daß der Ladebefehl sicher ist, und seine spekulative Planung zulassen.
- Bei der Erkennung ähnlicher Ladebefehle geht es darum, einen anderen Ladebefehl im Zielblock zu suchen, der dasselbe Basisregister und einen ähnlichen Versatz verwendet. So sind sich z. B. in dem in Tabelle I dargestellten Beispiel die Ladebefehle L r5=SHADOW4$(r5,8) und L r4=SHADOW4$(r5,4) ähnlich. Außerdem vergewissern wir uns, daß das Basisregister des spekulativen Ladebefehls nicht auf dem Weg vom Zielblock zum Quellblock neu definiert wurde. Mit letzterem meinen wir, daß kein anderer Befehl dem Register auf dem Weg zwischen den Blöcken einen Wert zuweist, d. h. daß der Wert des Registers, der im Quellblock galt, auch im Zielblock noch gilt.
- In diesem Fall gehen wir von folgender Annahme aus: Wenn es zulässig war, einen ähnlichen, aber nicht-spekulativen Ladebefehl im Zielblock auszuführen, dann muß auch die Ausführung des spekulativen Ladebefehls zulässig sein. Diese Annahme setzt eine bestimmte Unterstützung im Verknüpfungseditor voraus, denn es ist möglich, daß ein spekulativer ähnlicher Ladebefehl durch einen größeren Versatz, als ihn sein nicht-spekulatives Gegenstück hat, die Grenzen des Datensegments überschreitet und in einen geschützten oder nicht vorhandenen Bereich führt. Die Lösung dieses Problems besteht darin, im Verknüpfungseditor vor und nach jedem Datensegment des Programms eine zusätzliche Scheinseite zuzuweisen. Diese zusätzlichen Seiten sind im Nur-Lese-Modus definiert, so daß es durch die Ausführung eines Ladebefehls von Speicherstellen aus, die zu ihnen gehören, nicht zu einer Unterbrechung kommen kann.
- Die Unterstützung im Betriebssystem ist erforderlich, weil bei der Ausführung des geplanten Befehls garantiert sein muß, daß nicht auf verbotene Speicherbereiche zugegriffen wird.
- Betrachten wir nun eine neu geordnete Version des Codes, der im vorigen Beispiel verwendet wurde und in der Tabelle III dargestellt ist.
- Die Tabelle III zeigt die drei Grundblöcke B1, B2 und B3 in einer Schleife, und alle Rechenbefehle befinden sich in B3. Nehmen wir einmal an, daß wir Ladebefehle von B3 zu B2 verschieben wollen. Keiner dieser Ladebefehle hat ein ähnliches Gegenstück in B2, so daß sie nicht in die Kategorie der ähnlichen Ladebefehle fallen, und es handelt sich auch nicht um globale Ladebefehle.
- Die ersten zwei Ladebefehle von B3 verwenden jedoch r5 als Basisregister. Zu beachten ist auch, daß r5 in C cr0=r5,0 mit null verglichen wurde und BT OUT1,cr0,0·4/eq das Ergebnis dieses Vergleichs verwendet. Wenn also r5 nicht null ist, führen wir B3 aus, und alle Ladebefehle werden ausgeführt wie benötigt. Wenn aber r5 gleich null ist, soll das Programm die Schleife verlassen, ohne einen der Ladebefehle von B3 auszuführen.
- Wenn die Seite null im Nur-Lese-Modus definiert ist, können solche NULL-Zeiger-Ladebefehle auf die Seite null zugreifen, ohne Programmunterbrechungen zu verursachen. Dadurch können die ersten zwei Ladebefehle von B3 nach B2 verschoben werden, ohne Programmunterbrechungen zu verursachen, wie der Code in Tabelle IV zeigt.
- Der Algorithmus zur Erkennung von NULL-Zeiger-Ladebefehlen läßt sich wie folgt ausdrücken:
- 1. Finde das Basisregister des betreffenden spekulativen Ladebefehls.
- 2. Vergewissere dich, daß das Basisregister auf dem Weg vom Quellblock zum Zielblock nicht neu definiert wurde. (Wie schon bei den ähnlichen Ladebefehlen meinen wir mit letzterem, daß kein anderer Befehl dem Register auf dem Weg zwischen den Blöcken einen Wert zuweist, d. h. daß der Wert des Registers, der im Quellblock galt, auch im Zielblock noch gilt.)
- 3. Finde das bedingte Register, das bei dem Sprung des Zielblocks verwendet wird.
- 4. Finde den Vergleichsbefehl, der dieses bedingte Register setzt.
- 5. Überprüfe, ob der Vergleichsbefehl das Basisregister mit null vergleicht, und wenn ja, verschiebe den Befehl sicher zum Zielblock.
- Zur Unterstützung von NULL-Zeiger-Ladebefehlen wird zuerst die Seite null im Nur-Lese-Modus definiert, so daß NULL- Zeiger-Ladebefehle effektiv darauf zugreifen können, ohne Unterbrechungen zu verursachen.
- Nun fällt der dritte Ladebefehl von B3, L r0=SHADOW4$(r4,4) in keine der Kategorien sicherer spekulativer Ladebefehle, die wir hier beschrieben. Wenn wir jedoch annehmen, daß der durch L r4=SHADOW4$(r5,4) geladene Wert null ist, wird der dritte Ladebefehl wiederum ein NULL-Zeiger-Ladebefehl und darf als solcher nach B2 verschoben werden. Dazu müssen z. B. die ersten 64 Bytes der Seite null mit Nullen gefüllt werden, so daß zusätzliche spekulative Ladebefehle zur Kategorie der NULL-Zeiger-Ladebefehle gehören können.
- Die Tabelle V enthält eine Statistik über die Häufigkeit des Vorkommens der drei Kategorien spekulativer Ladebefehle. XLSYM, XLEVAL und XLDMEM sind drei Quelldateien aus dem Benchmark SPEC LI. Jede von ihnen enthält 20 bis 30 relativ kleine C-Funktionen. In der Spalte SUMME ist die Gesamtzahl der Ladebefehle angegeben, die für eine spekulative Ausführung in Erwägung gezogen wurden, während die Spalten GLOB, ÄHNL und NULL die Anzahl der Ladebefehle enthalten, die für die Klassen der globalen, ähnlichen bzw. NULL-Zeiger- Ladebefehle gefunden wurden. Wie man sieht, fällt der größte Teil der spekulativen Ladebefehle (70-90%) in eine der drei Kategorien und kann daher sicher spekulativ geplant werden.
- Die vorliegende Erfindung ermöglicht somit die Bereitstellung einer Befehlablaufsteuerung, in der die Sicherheit spekulativer Ladebefehle dadurch bestimmt ist, daß sichergestellt wird, daß ein Ladebefehl, der ein Kandidat für eine Umplanung ist, in eine der drei Kategorien fällt. Experimente mit einem Mustercode zeigen, daß ein großer Teil der Ladebefehle auf dieser Grundlage für eine spekulative Ausführung in Frage kommen, wenn eine bestimmte Unterstützung im Betriebssystem verfügbar ist. Dies spart den Siliziumplatz und auch die Designzeit, die nötig sind, um die spekulativen Ladebefehle in der Maschinenarchitektur zu unterstützen, und erhält die Kompatibilität des Objektcodes mit bestehenden Maschinen. TABELLE I
- LOOP:
- L r4=SHADOW4$(r5,4)
- L r0=SHADOW4$(r4,4)
- CL cr1=r3,r0
- BT OUT, cr1, 0·4/eq
- L r5=SHADOW4$(r5,8)
- C cr0=r5,0
- BF LOOP, cr0, 0·4/eq
- return(not found)
- OUT: return(found)
- LOOP:
- L r4=SHADOW4$(r5,4)
- L r5=SHADOW4$(r5,8)
- L r0=SHADOW4$ (r4,4)
- C cr0=r5,0
- CL cr1=r3,r0
- BT OUT,cr1,0·4/eq
- BF LOOP,cr0,0·4/eq
- return(not found)
- OUT: return(found) TABELLE III
- L r4=SHADOW4$(r5,4)
- L r5=SHADOW4$(r5,8)
- L r0=SHADOW4$(r4,4)
- C cr0=r5,0
- CL cr1=r3,r0
- LOOP:
- BT OUT,cr1,0·4/eq
- BT OUT1,cr0,0·4/eq
- L r4=SHADOW4$(r5,4)
- L r5=SHADOW4$(r5,8)
- L r0=SHADOW4$(r4,4)
- C cr0=r5,0
- CL cr1=r3,r0
- B LOOP
- OUT1: return(not found)
- OUT: return(found)
- L r4=SHADOW4$(r5,4)
- L r5=SHADOW4$(r5,8)
- L r0=SHADOW4$(r4,4)
- C cr0=r5,0
- CL cr1=r3,r0
- LOOP:
- BT OUT,cr1,0·4/eq
- L r4=SHADOW4$(r5,4)
- L r5=SHADOW4$(r5,8)
- BT OUT1,cr0,0·4/eq
- L r0=SHADOW4$(r4,4)
- C cr0=r5,0
- CL cr1=r3,r0
- B LOOP
- OUT1: return(not found)
- OUT: return(found) TABELLE V DATEI GLOB ÄHNL NULL SUMME
Claims (10)
1. Eine Befehlablaufsteuerung zur Umplanung einer
Eingangsbefehlsfolge (12), um eine Ausgangsbefehlsfolge
(22) zur Ausführung auf einem Rechner zu bilden, wobei
die Eingangsbefehlsfolge in Blöcke aufeinander folgender
Befehle aufgeteilt ist, für die der Steuerungsfluß ohne
Sprung- oder Wartemöglichkeit am Beginn des ersten
Blocks eintritt und an seinem Ende austritt, wobei die
Befehlablaufsteuerung Befehle spekulativ so planen kann,
daß Datendependenzen erhalten bleiben und die
umgeplanten Befehle ausgeführt werden, bevor ein
bedingter Sprung erfolgt, der den Befehlen in der
Eingangsbefehlsfolge (12) vorausgeht, indem Befehle von
einem Quellbefehlsblock zu einem Zielbefehlsblock
verschoben werden, um die Ausgangsbefehlsfolge (22) zu
bilden, wobei die Befehlablaufsteuerung gekennzeichnet
ist durch:
eine Logik (14) zum Auswählen eines Ladebefehls als
Kandidat für die Umplanung;
eine Logik (16) zum Feststellen, ob das Basisregister,
das der ausgewählte Ladebefehl nutzt, und/oder dessen
Inhalt eine von mehreren Bedingungen (18) erfüllen; und
eine Logik (20) zum Verschieben des ausgewählten
Ladebefehls von dem Quellblock zum Zielblock als
Reaktion auf die Feststellung, daß eine der Bedingungen
erfüllt ist.
2. Eine Befehlablaufsteuerung nach Anspruch 1, bei der eine
der Bedingungen (18) lautet, daß das Basisregister einen
Zeiger auf einen Speicherbereich enthält, in dem
Adressen globaler Variablen gespeichert sind.
3. Eine Befehlablaufsteuerung nach Anspruch 1 oder 2, bei
der eine der Bedingungen (18) lautet, daß sowohl
(a) das Basisregister des ausgewählten Ladebefehls
dasselbe Register ist, das auch als Basisregister eines
anderen Ladebefehls innerhalb des Zielblocks dient, als
auch
(b) kein Befehl existiert, der den Inhalt dieses
Registers auf dem Weg zwischen dem Zielblock und dem
Quellblock ändert,
wobei die Befehlablaufsteuerung ferner ein Mittel zur
Zuweisung einer zusätzlichen, im Nur-Lese-Modus
definierten Leerseite vor und nach jedem Datensegment
eines Programms enthält.
4. Eine Befehlablaufsteuerung nach einem der obigen
Ansprüche zum Bilden einer Ausgangsbefehlsfolge (22) zur
Ausführung auf einem Rechner mit einem Betriebssystem,
bei dem die Seite null im Nur-Lese-Modus definiert ist
und eine endliche Zahl von Bytes der Seite null mit
Nullen gefüllt ist, wobei eine der Bedingungen (18)
lautet, daß sowohl
(a) der Inhalt des Basisregisters des Ladebefehls
gleich null ist als auch
(b) der Inhalt des Basisregisters auf dem Weg zwischen
dem Zielbefehlsblock und dem Quellbefehlsblock nicht
verändert wird.
5. Eine Befehlablaufsteuerung nach Anspruch 4, wobei die
endliche Zahl von Bytes der Seite null die ersten 64
Bytes der Seite null sind.
6. Ein Kompilierer zum Kompilieren von Code zur Ausführung
auf einem Rechner, wobei der Kompilierer eine
Befehlablaufsteuerung nach einem der obigen Ansprüche
enthält.
7. Ein Rechner mit einer Befehlablaufsteuerung nach einem
der Ansprüche 1 bis 5.
8. Ein Rechner nach Anspruch 7 mit Superskalar- und/oder
Superpipeline-Architektur.
9. Ein Verfahren zur Neuplanung einer
Eingangsprogrammbefehlsfolge, wobei die
Eingangsbefehlsfolge (12) in Blöcke aufeinander
folgender Befehle aufgeteilt ist, für die der
Steuerungsfluß ohne Sprung- oder Wartemöglichkeit am
Beginn des ersten Blocks eintritt und an seinem Ende
austritt, wobei das Verfahren das spekulative Planen von
Befehlen umfaßt, so daß Datendependenzen erhalten
bleiben und die umgeplanten Befehle ausgeführt werden,
bevor ein bedingter Sprung erfolgt, der den Befehlen in
der Eingangsbefehlsfolge vorausgeht, indem Befehle von
einem Quellbefehlsblock zu einem Zielbefehlsblock
verschoben werden, um eine Ausgangsbefehlsfolge (22) zu
bilden, wobei das Verfahren durch folgende Schritte
gekennzeichnet ist:
(a) Auswählen (14) eines Ladebefehls aus dem Quellblock
als Kandidat für die Umplanung;
(b) Feststellen (16), ob das Basisregister, das der
Ladebefehl nutzt, und/oder dessen Inhalt eine von
mehreren Bedingungen (18) erfüllt; und, wenn ja,
(c) Umplanen (20) der Eingangsprogrammbefehlsfolge, so
daß der Kandidatenbefehl zum Zielblock verschoben wird.
10. Ein Verfahren nach Anspruch 9, bei dem der
Feststellungsschritt (b) folgende Teilschritte umfaßt:
(b1) Identifizieren des Basisregisters des
Kandidatenbefehls;
(b2) Feststellen, ob ein Befehl existiert, der den
Inhalt des Basisregisters auf dem Weg zwischen dem
Zielblock und dem Quellblock ändert, wobei die Bedingung
als nicht erfüllt gilt, wenn dies der Fall ist;
(b3) Identifizieren des bedingten Registers, das in dem
bedingten- Sprung verwendet wird, der dem Zielblock
vorausgeht;
(b4) Identifizieren des Vergleichsbefehls, der das
bedingte Register setzt;
(b5) Feststellen, ob der Vergleichsbefehl das
Basisregister mit null vergleicht, wobei die Bedingung
als erfüllt gilt, wenn dies der Fall ist.
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
IL98248A IL98248A0 (en) | 1991-05-23 | 1991-05-23 | Instruction scheduler for a computer |
Publications (2)
Publication Number | Publication Date |
---|---|
DE69209888D1 DE69209888D1 (de) | 1996-05-23 |
DE69209888T2 true DE69209888T2 (de) | 1996-10-24 |
Family
ID=11062467
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
DE69209888T Expired - Lifetime DE69209888T2 (de) | 1991-05-23 | 1992-02-06 | Befehlablaufsteuerung für einen Rechner |
Country Status (5)
Country | Link |
---|---|
US (1) | US5526499A (de) |
EP (1) | EP0515016B1 (de) |
JP (1) | JPH0792752B2 (de) |
DE (1) | DE69209888T2 (de) |
IL (1) | IL98248A0 (de) |
Families Citing this family (56)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5778219A (en) * | 1990-12-14 | 1998-07-07 | Hewlett-Packard Company | Method and system for propagating exception status in data registers and for detecting exceptions from speculative operations with non-speculative operations |
DE4237417C2 (de) * | 1992-03-25 | 1997-01-30 | Hewlett Packard Co | Datenverarbeitungssystem |
JPH0844561A (ja) * | 1994-07-28 | 1996-02-16 | Fujitsu Ltd | ブースティング制御方法及びブースティング制御機構を備えたプロセッサ装置 |
US5669001A (en) * | 1995-03-23 | 1997-09-16 | International Business Machines Corporation | Object code compatible representation of very long instruction word programs |
US5625835A (en) * | 1995-05-10 | 1997-04-29 | International Business Machines Corporation | Method and apparatus for reordering memory operations in a superscalar or very long instruction word processor |
US5802337A (en) * | 1995-12-29 | 1998-09-01 | Intel Corporation | Method and apparatus for executing load instructions speculatively |
US5611063A (en) * | 1996-02-06 | 1997-03-11 | International Business Machines Corporation | Method for executing speculative load instructions in high-performance processors |
US5968166A (en) * | 1996-03-22 | 1999-10-19 | Matsushita Electric Industrial Co., Ltd. | Information processing apparatus and method, and scheduling device for reducing inactivity due to wait state |
US5848256A (en) * | 1996-09-30 | 1998-12-08 | Institute For The Development Of Emerging Architectures, L.L.C. | Method and apparatus for address disambiguation using address component identifiers |
US5894576A (en) * | 1996-11-12 | 1999-04-13 | Intel Corporation | Method and apparatus for instruction scheduling to reduce negative effects of compensation code |
US5864692A (en) * | 1996-12-16 | 1999-01-26 | Hewlett-Packard Company | Method and apparatus for protecting memory-mapped devices from side effects of speculative instructions |
US6151704A (en) * | 1997-04-01 | 2000-11-21 | Intel Corporation | Method for optimizing a loop in a computer program by speculatively removing loads from within the loop |
US5999736A (en) * | 1997-05-09 | 1999-12-07 | Intel Corporation | Optimizing code by exploiting speculation and predication with a cost-benefit data flow analysis based on path profiling information |
US6044221A (en) * | 1997-05-09 | 2000-03-28 | Intel Corporation | Optimizing code based on resource sensitive hoisting and sinking |
US6247173B1 (en) | 1997-09-24 | 2001-06-12 | Hewlett-Packard Company | Computer compiler optimizer for reducing computer resource consumption during dependence analysis after loop unrolling |
US6122719A (en) * | 1997-10-31 | 2000-09-19 | Silicon Spice | Method and apparatus for retiming in a network of multiple context processing elements |
US6170083B1 (en) | 1997-11-12 | 2001-01-02 | Intel Corporation | Method for performing dynamic optimization of computer code |
US5987595A (en) * | 1997-11-25 | 1999-11-16 | Intel Corporation | Method and apparatus for predicting when load instructions can be executed out-of order |
US6202204B1 (en) * | 1998-03-11 | 2001-03-13 | Intel Corporation | Comprehensive redundant load elimination for architectures supporting control and data speculation |
US5999732A (en) * | 1998-03-23 | 1999-12-07 | Sun Microsystems, Inc. | Techniques for reducing the cost of dynamic class initialization checks in compiled code |
US6332214B1 (en) * | 1998-05-08 | 2001-12-18 | Intel Corporation | Accurate invalidation profiling for cost effective data speculation |
US6289445B2 (en) | 1998-07-21 | 2001-09-11 | Lsi Logic Corporation | Circuit and method for initiating exception routines using implicit exception checking |
US6189093B1 (en) | 1998-07-21 | 2001-02-13 | Lsi Logic Corporation | System for initiating exception routine in response to memory access exception by storing exception information and exception bit within architectured register |
US6321328B1 (en) * | 1999-03-22 | 2001-11-20 | Hewlett-Packard Company | Processor having data buffer for speculative loads |
US7089404B1 (en) * | 1999-06-14 | 2006-08-08 | Transmeta Corporation | Method and apparatus for enhancing scheduling in an advanced microprocessor |
US7634635B1 (en) | 1999-06-14 | 2009-12-15 | Brian Holscher | Systems and methods for reordering processor instructions |
US6539541B1 (en) | 1999-08-20 | 2003-03-25 | Intel Corporation | Method of constructing and unrolling speculatively counted loops |
US6748589B1 (en) | 1999-10-20 | 2004-06-08 | Transmeta Corporation | Method for increasing the speed of speculative execution |
US6862730B1 (en) * | 2000-04-26 | 2005-03-01 | Lucent Technologies Inc. | Register allocation in code translation between processors |
US6633969B1 (en) | 2000-08-11 | 2003-10-14 | Lsi Logic Corporation | Instruction translation system and method achieving single-cycle translation of variable-length MIPS16 instructions |
GB0025053D0 (en) * | 2000-10-12 | 2000-11-29 | Sgs Thomson Microelectronics | Compiling computer programs including branch instructions |
US6857060B2 (en) | 2001-03-30 | 2005-02-15 | Intel Corporation | System, apparatus and method for prioritizing instructions and eliminating useless instructions |
WO2002101548A1 (en) * | 2001-06-08 | 2002-12-19 | Equator Technologies, Inc. | System for compiling a computer program |
GB2380825B (en) * | 2001-10-12 | 2004-07-14 | Siroyan Ltd | Processors and compiling methods for processors |
US20030101336A1 (en) * | 2001-11-28 | 2003-05-29 | Sun Microsystems, Inc. | Technique for associating instructions with execution events |
US7137111B2 (en) * | 2001-11-28 | 2006-11-14 | Sun Microsystems, Inc. | Aggressive prefetch of address chains |
US7269827B2 (en) * | 2002-10-21 | 2007-09-11 | Intel Corporation | Method and apparatus for compiling code |
US7827543B1 (en) | 2004-02-28 | 2010-11-02 | Oracle America, Inc. | Method and apparatus for profiling data addresses |
US7735073B1 (en) | 2004-02-28 | 2010-06-08 | Oracle International Corporation | Method and apparatus for data object profiling |
US8065665B1 (en) | 2004-02-28 | 2011-11-22 | Oracle America, Inc. | Method and apparatus for correlating profile data |
US7707554B1 (en) | 2004-04-21 | 2010-04-27 | Oracle America, Inc. | Associating data source information with runtime events |
WO2006074576A1 (en) * | 2005-01-14 | 2006-07-20 | Intel Corporation | Method and apparatus for generating execution equivalence information |
US7694286B2 (en) * | 2005-02-10 | 2010-04-06 | International Business Machines Corporation | Apparatus and method for detecting base-register usage conflicts in computer code |
WO2006115219A1 (ja) * | 2005-04-21 | 2006-11-02 | Matsushita Electric Industrial Co., Ltd. | プログラム難読化装置及び難読化方法 |
JP4381459B1 (ja) * | 2008-06-27 | 2009-12-09 | 株式会社東芝 | 情報処理装置、粒度調整方法およびプログラム |
US8612959B2 (en) * | 2011-10-03 | 2013-12-17 | International Business Machines Corporation | Linking code for an enhanced application binary interface (ABI) with decode time instruction optimization |
US8615745B2 (en) * | 2011-10-03 | 2013-12-24 | International Business Machines Corporation | Compiling code for an enhanced application binary interface (ABI) with decode time instruction optimization |
US9626189B2 (en) * | 2012-06-15 | 2017-04-18 | International Business Machines Corporation | Reducing operand store compare penalties |
US10896030B2 (en) | 2017-09-19 | 2021-01-19 | International Business Machines Corporation | Code generation relating to providing table of contents pointer values |
US10884929B2 (en) | 2017-09-19 | 2021-01-05 | International Business Machines Corporation | Set table of contents (TOC) register instruction |
US10725918B2 (en) | 2017-09-19 | 2020-07-28 | International Business Machines Corporation | Table of contents cache entry having a pointer for a range of addresses |
US10705973B2 (en) | 2017-09-19 | 2020-07-07 | International Business Machines Corporation | Initializing a data structure for use in predicting table of contents pointer values |
US10620955B2 (en) | 2017-09-19 | 2020-04-14 | International Business Machines Corporation | Predicting a table of contents pointer value responsive to branching to a subroutine |
US10713050B2 (en) | 2017-09-19 | 2020-07-14 | International Business Machines Corporation | Replacing Table of Contents (TOC)-setting instructions in code with TOC predicting instructions |
US11061575B2 (en) | 2017-09-19 | 2021-07-13 | International Business Machines Corporation | Read-only table of contents register |
US11238360B2 (en) | 2018-02-12 | 2022-02-01 | International Business Machines Corporation | Fast quantum feedback using analog integration and control pulse gating |
Family Cites Families (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US4435753A (en) * | 1980-10-31 | 1984-03-06 | International Business Machines Corporation | Register allocation system using recursive queuing during source code compilation |
US4656582A (en) * | 1985-02-04 | 1987-04-07 | International Business Machines Corporation | Generating storage reference instructions in an optimizing compiler |
JPS62217325A (ja) * | 1986-03-18 | 1987-09-24 | Nec Corp | アセンブラコ−ド最適化方式 |
EP0312764A3 (de) * | 1987-10-19 | 1991-04-10 | International Business Machines Corporation | Datenprozessor mit mehrfachen Ausführungseinheiten zur parallelen Ausführung von mehreren Befehlsklassen |
US5093916A (en) * | 1988-05-20 | 1992-03-03 | International Business Machines Corporation | System for inserting constructs into compiled code, defining scoping of common blocks and dynamically binding common blocks to tasks |
US5202995A (en) * | 1989-10-12 | 1993-04-13 | International Business Machines Corporation | Method for removing invariant branches from instruction loops of a computer program |
US5119495A (en) * | 1989-12-21 | 1992-06-02 | Bull Hn Information Systems Inc. | Minimizing hardware pipeline breaks using software scheduling techniques during compilation |
US5202975A (en) * | 1990-06-11 | 1993-04-13 | Supercomputer Systems Limited Partnership | Method for optimizing instruction scheduling for a processor having multiple functional resources |
JP3032031B2 (ja) * | 1991-04-05 | 2000-04-10 | 株式会社東芝 | ループ最適化方法及び装置 |
-
1991
- 1991-05-23 IL IL98248A patent/IL98248A0/xx unknown
-
1992
- 1992-02-06 EP EP92301003A patent/EP0515016B1/de not_active Expired - Lifetime
- 1992-02-06 DE DE69209888T patent/DE69209888T2/de not_active Expired - Lifetime
- 1992-04-01 JP JP4079844A patent/JPH0792752B2/ja not_active Expired - Fee Related
-
1994
- 1994-12-27 US US08/364,833 patent/US5526499A/en not_active Expired - Fee Related
Also Published As
Publication number | Publication date |
---|---|
EP0515016B1 (de) | 1996-04-17 |
US5526499A (en) | 1996-06-11 |
EP0515016A3 (en) | 1993-08-04 |
IL98248A0 (en) | 1992-06-21 |
JPH0792752B2 (ja) | 1995-10-09 |
DE69209888D1 (de) | 1996-05-23 |
JPH05143332A (ja) | 1993-06-11 |
EP0515016A2 (de) | 1992-11-25 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
DE69209888T2 (de) | Befehlablaufsteuerung für einen Rechner | |
DE68925646T2 (de) | Pipeline-multiprozessorsystem | |
DE4217012C2 (de) | Mit einer Vielzahl von Befehlsströmen und statischer Verschachtelung arbeitender Mikroprozessor | |
DE69311330T2 (de) | Befehlsablauffolgeplanung von einem risc-superskalarprozessor | |
EP0689694B1 (de) | Verfahren zur maschinellen erzeugung von nebenläufig bearbeitbaren befehlsgruppen aus einem programm für superskalare mikroprozessoren | |
DE68928340T2 (de) | Fliessband-Datenprozessor | |
DE68921906T2 (de) | Verfahren für ein Multiprozessorsystem mit sich selbst zuordnenden Prozessoren. | |
DE68927218T2 (de) | Verfahren und Vorrichtung für Zustandskode in einem Zentralprozessor | |
DE19506435C2 (de) | Verfahren und Einrichtung zum Vermeiden von Rückschreibkonflikten zwischen einen gemeinsamen Rückschreibpfad verwendenden Ausführungseinheiten | |
DE69030425T2 (de) | Verfahren und Vorrichtung zur Kompilierung von Rechnerprogrammen mit Registerzuweisung zwischen Prozeduren | |
DE69031100T2 (de) | Interprozessor-Datenabhängigkeit minimierendes Übersetzungsverfahren | |
DE4222776C2 (de) | Parallelverarbeitungseinheit und Verfahren zum Ausführen von Befehlen | |
DE69123629T2 (de) | Maschinenarchitektur für skalaren Verbundbefehlssatz | |
DE3586374T2 (de) | Verfahren zur elimination globaler gemeinsamer unterexpressionen und zur kodeverschiebung in einem optimierenden kompilierer. | |
DE68927946T2 (de) | Verfahren und Vorrichtung für die Synchronisierung von parallelen Prozessoren unter Verwendung einer unscharf definierten Sperre | |
DE3750951T2 (de) | Verfahren zur Kodeerzeugung für Rechner mit beschränktem Befehlssatz. | |
DE19527031C2 (de) | Verzweigungsprozessor für ein Datenverarbeitungssystem und Verfahren zum Betreiben eines Datenverarbeitungssystems | |
DE69831344T2 (de) | Effiziente verarbeitung von gebündelten sprungbefehlen | |
DE19534752A1 (de) | Verfahren und System zum Liefern einer Unterstützung für eine spekulative Ausführung | |
DE69133571T2 (de) | Datenprozessor mit der Fähigkeit, zwei Befehle gleichzeitig auszuführen | |
DE69835425T2 (de) | Verbesserter befehlszuteilungsmechanismus für eine geschützte vliw-architektur | |
CH633643A5 (de) | Verfahren zur blockierungsfreien verzahnten simultanverarbeitung mehrerer aufgaben mittels mehrerer programme in einer datenverarbeitungsanlage. | |
DE112012000303T5 (de) | Dynamische binäre Optimierung | |
DE19945992A1 (de) | Dynamisch optimierender Objektcode-Übersetzer zur Architekturemulation und dynamisches optimierendes Objektcode-Übersetzungsverfahren | |
DE3789490T2 (de) | Steuerungssystem für ein Vektorprozessor. |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
8364 | No opposition during term of opposition | ||
8330 | Complete renunciation |