DE69129919T2 - Verfahren zur Kompilierung von Rechnerbefehlen, um Cachespeicherleistung zu verbessern - Google Patents

Verfahren zur Kompilierung von Rechnerbefehlen, um Cachespeicherleistung zu verbessern

Info

Publication number
DE69129919T2
DE69129919T2 DE69129919T DE69129919T DE69129919T2 DE 69129919 T2 DE69129919 T2 DE 69129919T2 DE 69129919 T DE69129919 T DE 69129919T DE 69129919 T DE69129919 T DE 69129919T DE 69129919 T2 DE69129919 T2 DE 69129919T2
Authority
DE
Germany
Prior art keywords
instructions
group
cache
instruction
program
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 - Fee Related
Application number
DE69129919T
Other languages
English (en)
Other versions
DE69129919D1 (de
Inventor
Chi-Hung C/O Int. Octrooibureau B.V. Nl-5656 Aa Eindhoven Chi
Rajiv C/O Int. Octrooibureau B.V. Nl-5656 Aa Eindhoven Gupta
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.)
Koninklijke Philips NV
Original Assignee
Philips Electronics NV
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Philips Electronics NV filed Critical Philips Electronics NV
Publication of DE69129919D1 publication Critical patent/DE69129919D1/de
Application granted granted Critical
Publication of DE69129919T2 publication Critical patent/DE69129919T2/de
Anticipated expiration legal-status Critical
Expired - Fee Related legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/44Encoding
    • G06F8/443Optimisation
    • G06F8/4441Reducing the execution time required by the program code
    • G06F8/4442Reducing the number of cache misses; Data prefetching

Landscapes

  • Engineering & Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Memory System Of A Hierarchy Structure (AREA)
  • Advance Control (AREA)
  • Devices For Executing Special Programs (AREA)

Description

  • Die vorliegende Erfindung bezieht sich auf Rechnerverarbeitungssysteme, die Befehlscachespeicher benutzen. Insbesondere wird ein Verfahren zur Kompilierung von Befehlen im Befehlsspeicher zur Reduzierung von Befehlscache-Verunreinigung und Befehlscache-Fehltreffern beschrieben.
  • Durch die Verwendung von Befehlscache wurde der Unterschied zwischen der Arbeitsgeschwindigkeit von schnelleren Prozessoren und den langsameren Zugriffszeiten von Befehlsspeichern reduziert. Die Befehle eines Programms werden in Befehlszeilen gruppiert, die in ein Cacheregister vorabgerufen werden. Der Prozessor verweist auf Befehle und führt sie in Übereinstimmung mit dem Programmzähler aus, der den bestimmten auszuführenden Befehl identifiziert. Verwiesene Befehle werden vom Befehlscache zur Ausführung an den Prozessor übertragen. Wenn der Befehlscache aufgrund der Ausführung von Befehlszeilen durch den Prozessor Raum zur Verfügung hat, werden während des nächsten verfügbaren Buszyklus weitere Befehlszeilen vom Programmspeicher in den Befehlscache abgerufen.
  • Die Effizienz dieser Befehlscache-Techniken hängt vom Vorabrufen der nächsten erforderlichen Reihe von Befehlen ab. Wenn der Prozessor auf Befehle verweist, die sich nicht im Cache befinden, kommt es zu einem Cache-Fehltreffer und es wird ein Speicherzyklus benutzt, um die Zeile mit dem verwiesenen Befehl vorabzurufen. Es können auch Befehle in den Befehlscache vorabgerufen werden, auf die nicht durch den Prozessor verwiesen wird. Diese Befehle stellen eine Verunreinigung des Befehlscache dar, durch die der Speicherplatz zur Speicherung anderer benötigter Befehle begrenzt wird. Zu einer Verunreinigung innerhalb einer Zeile kommt es, wenn durch den Prozessor nur auf einige Befehle einer Zeile verwiesen wird.
  • Die meisten Befehlscachespeicher sind nicht groß genug, um komplette Programm zu enthalten. Bedingte Anweisungen und Programmschleifen führen daher immer zu einem Verweisen auf nicht im Cache befindliche Befehle, wenn die Ladesequenz für den Cache sequentiell ist. Diese Ausführungen erfordern einen Speicherzugriff, der den Systembus belastet, während ein Abruf der Zeile mit dem benötigten Befehl stattfindet, so daß die Effizienz des Cachespeichers verringert wird.
  • Ein Prozessor mit einem Befehlscache ist aus der US-Patentschrift 4.200.927 bekannt. Dieser Prozessor ruft mehrere Befehlsströme vorab ab, die bedingten Anweisungen folgen können. Hierbei geht es darum, das Problem der Cache-Fehltreffer zu reduzieren. Um die Cache-Verunreinigung zu verringern, wird die in den bedingten Anweisungen ergriffene Alternative vorhergesagt, so daß keine Ströme vorabgerufen werden, deren Ausführung weniger wahrscheinlich ist.
  • Auf ähnliche Weise befaßt sich auch die europäische Patentanmeldung Nr. 323.140 mit dem Problem der Cache-Verunreinigung durch Vorhersage der in bedingten Anweisungen ergriffenen Alternative.
  • In der europäischen Patentanmeldung Nr. 207.665 wird das Vorabrufen von Befehlen im Pipeline-Verfahren beschrieben. Es wird ein Verfahren der verzögerten Verzweigung vorgestellt, bei dem ein Befehl nach einem bedingten Verzweigungsbefehl immer ausgeführt wird. Die Ausführung von alternativen Befehlen in Abhängigkeit von der Verzweigung wird also verzögert, so daß der Prozessor Zeit bekommt, um den Vorabruf der korrekten Alternative nach dem Verzweigungsbefehl zu starten. Um die verzögerten Verzweigungsbefehle zu nutzen, werden die Anfänge der Schleifen hinter dem Schleifenrückführ-Verzweigungsbefehl dupliziert, wobei der Schleifenrückführbefehl zurück zum zweiten Befehl in der Schleife verzweigt. Auf diese Weise kann eine Cache-Verunreinigung verhindert werden, wenn Befehle, die immer ausgeführt werden müssen und nach einem Verzweigungsbefehl angeordnet werden können, gefunden werden können. Wenn kein solcher Befehl vorliegt, muß eine Leeranweisung nach dem Verzweigungsbefehl ausgeführt werden.
  • Die vorliegende Erfindung hat zur Aufgabe, die Leistung des Befehlscache zu verbessern.
  • Die Erfindung hat genauer zur Aufgabe, die Verunreinigung von Befehls cachespeichern zu reduzieren.
  • Eine weitere Aufgabe der Erfindung besteht darin, Programmbefehle in einer Reihenfolge zu kompilieren, die die Wahrscheinlichkeit eines Cache-Fehltreffers oder einer Cache-Verunreinigung verringert.
  • Diese und andere Aufgaben der Erfindung werden durch ein Verfahren nach Anspruch 1 realisiert. Dieses Verfahren kompiliert die Befehle eines Programm in einer Reihenfolge, die die Leistung des Befehlscache verbessert. Das Programm wird auf Befehle analysiert, die zu einer nicht-sequentiellen Steuerungsübergabe in dem Programm führen. Das Vorhandensein von Verzweigungsanweisungen und Programmschleifen wird ebenso erkannt wie die Befehlsausführungssequenz für diese Bedingungen. Das Programm wird in einer Reihenfolge kompiliert, die zu weniger Cache-Fehltreffern und weniger Cache-Verunreinigung führt.
  • Dank dieser können die Befehlszeilen so zusammengestellt werden, daß entweder die gesamte Zeile ausgeführt wird oder keiner der Befehle in der Zeile ausgeführt wird. Eine partielle Zeilenverunreinigung wird auf diese Weise vermieden. Die Befehle werden in einem Befehlsspeicher umgeordnet, um eine partielle Zeilenverunreinigung zu vermeiden. Verzweigungsbefehle werden so positioniert, daß Zielbefehle mit höherer Wahrscheinlichkeit nach den Entscheidungsbefehlen angeordnet werden. Schleifen von Befehlen werden so im Speicher positioniert, daß sich der Startbefehl im Randbereich einer Zeile befindet.
  • Das Umordnen der Befehle in dem Befehlsspeicher führt zu einer Fragmentierung des Speichers. Der nicht benutzte Speicherplatz kann doppelte Befehle enthalten, die während eines nachfolgenden Programmabschnitts ausgeführt werden müssen.
  • Kurze Beschreibung der Zeichnungen
  • Fig. 1 zeigt eine Darstellung eines Rechnerverarbeitungssystems, das einen Befehlscache nutzt.
  • Fig. 2A zeigt die Kompilierung eines Rechnerprogramms in Befehlszeilen, die Befehlsblöcke enthalten.
  • Fig. 2B zeigt die Befehle aus Fig. 2A umgeordnet in Zeilen, welche weniger Verunreinigung nach sich ziehen als die Kompilierung aus Fig. 2A.
  • Die Fig. 3A und 3B zeigen die Kompilierung von Befehlen, welche eine Programmschleife bilden.
  • Die Fig. 4A und 4B zeigen die Umordnung der Schleifenbefehle aus den Fig. 3A und 3B, um die durch die Schleifen in Anspruch genommene Anzahl von Cache-Zeilen zu reduzieren.
  • Die Fig. 5A und 5B zeigen die Kompilierung von Verzweigungsbefehlen und eine Umordnung der Verzweigungsbefehle, um einen Cache-Fehltreffer zu vermeiden und die Cache-Verunreinigung zu reduzieren.
  • Die Fig. 6A und 6B zeigen die Kompilierung von Verzweigungsbefehlen, die umgeordnet wurden, und den in fragmentierte Speicherzellen eingefügten Duplizierungscode.
  • Fig. 7 zeigt die Grundeinheiten eines Ablaufdiagramms.
  • Die Fig. 8 A und 8B zeigen ein Ablaufdiagramm und einen entsprechenden Umordnungsbaum zur Erzeugung eines Umordnungs-Algorithmus.
  • Die Fig. 9A und 9B zeigen den umgeordneten Code aus Fig. 8 A und seine Speicherung im zentralen Hauptspeicher.
  • Die Fig. 10A und 10B zeigen die mit Hilfe einer zentralen Abhängigkeitsgraphik umzuordnende Programmstruktur.
  • Die Fig. 11A und 11B zeigen eine Steuerungsabhängigkeitsgraphik.
  • Beschreibung der bevorzugten Ausführungsform
  • Fig. 1 zeigt einen Hauptprozessor 11, der einen Befehlscache 13 benutzt.
  • Der Befehlscache 13 schafft eine Schnittstelle zwischen der Zentralspeicherbefehlsquelle 12 und dem viel schnelleren Hauptprozessor 11. Der Befehlscache 13 ruft die in der Zentralspeicherbefehlsquelle 12 gespeicherten Befehlszeilen für den Zugriff durch den Hauptprozessor 11 vorab ab.
  • Wie aus dem Artikel "High Speed Memory Systems" von A. V. Pohm und O. P. Agrawahl, 1983 Reston Publishing Company, Inc., bekannt ist, dienen derartige Befehlscachespeicher als transparente Brücke zwischen dem schnellen Hauptprozessor 11 und der langsameren Zentralspeicherbefehlsquelle 12.
  • Ein zu dem Befehlscache 13 gehörender Vorabruf-Prozessor ruft nacheinander die im Zentralspeicher 12 gespeicherten Befehlszeilen vorab ab. Während eines verfügbaren Buszyklus wird eine Vielzahl von Befehlszeilen von der Zentralspeicherbefehlsquelle 12 zum Befehlscache 13 verschoben. Diese Befehle stehen anschließend zur Ausführung durch den Hauptprozessor 11 zur Verfügung, wenn der Programmzähler des Hauptprozessors 11 auf einen benötigten Befehl verweist.
  • Wie von Systemen dieser Art bekannt, kommt es zu Cache-Fehltreffern, wenn der Hauptprozessor 11 einen Befehl anfordert, der nicht im Befehlscache 13 enthalten ist. Aufgrund des resultierenden Fehltreffers muß der Befehlscache 13 im nächsten verfügbaren Buszyklus den betreffenden verwiesenen Befehl adressieren, der zu einem Fehltreffer für den Befehlscache 13 geführt hat.
  • Die Befehle in der Zentralspeicherbefehlsquelle 12 sind in Befehlszeilen organisiert. Eine Zeile kann zwei oder mehr Befehle umfassen, die als eine Einheit an den Befehlscache 13 übertragen werden müssen. Einzelne Befehle einer Zeile, auf die durch den Hauptprozessor 11 verwiesen wird, stehen zur Ausführung vom Befehlscache 13 aus zur Verfügung.
  • Das obengenannte Problem eines Cache-Fehltreffers belastet den Systembus, weil ein gesonderter Verweis auf die Zentralspeicherbefehlsquelle 12 gefordert wird, so daß der Hauptprozessor aufgehalten wird, bis der erforderliche Befehl zur Verfügung steht. Während des Abrufens des Befehls steht der Bus nicht für andere Aufgaben zur Verfügung, die eventuell durch den Hauptprozessor 11 ausgeführt werden müssen. Das Ergebnis ist eine Herabsetzung der Systemleistung.
  • Cache-Verunreinigung und Cache-Fehltreffer können reduziert werden, indem die Befehle des Programms in der Zentralspeicherbefehlsquelle 12 so umgeordnet werden, daß bei der Ausführung einer Zeile entweder alle Befehle einer Zeile ausgeführt werden oder keiner der Befehle einer Zeile ausgeführt wird. Aus diesem Grunde wird sichergestellt, daß mindestens alle Befehle zumindest einmal ausgeführt werden. Das Abrufen von Befehlen auf Zeilenbasis kann notwendigerweise dazu führen, daß auf einige Befehle der Zeile nicht durch den Hauptprozessor 11 verwiesen wird. Dies führt zu einer Verunreinigung des Befehlscache 13, weil nichtbenutzte Befehle in den Cache aufgenommen wurden und dadurch Speicherplatz in Anspruch nehmen, der dann für andere benötigte Befehle nicht zur Verfügung steht.
  • Zu Cache-Fehltreffern und Cache-Verunreinigung kommt es, weil das ausgeführte Programm nicht vollkommen sequentiell ist. Wenn Schleifen und bedingte Anweisungen angetroffen werden, verweist der Hauptprozessor 11 auf einen Zielbefehl oder kehrt zum Anfang der Schleife zurück, was eine nicht-sequentielle Ausführung ist. Wenn daher Befehle auf einer rein sequentiellen Basis vorabgerufen werden, führen diese Bedingungen zu Cache-Fehltreffern.
  • Die Organisation von Programmbefehlen für die Zentralspeicherbefehlsquelle ist in Fig. 2A schematisch dargestellt. B&sub1;, B&sub2;, B&sub3; und B&sub4; sind Befehlsblöcke. Die Blöcke B&sub2; und B&sub3; sind Pfade eines bedingten Befehls. Der bedingte Befehl befindet sich in Block B&sub1; und die Programmsteuerung geht je nach den Ergebnissen einer geprüften Bedingung entweder auf B&sub2; oder auf B&sub3; über. Ein Mischpfad für jede der Verzweigungen B&sub2; und B&sub3; ist als Block B&sub4; dargestellt.
  • Befehle, die die einzelnen Blöcke darstellen, sind in Zeilen angeordnet, wobei jede Zeile zwei oder mehr Befehle für den Block enthalten kann. Wie in Fig. 2A dargestellt, sind in Block B&sub1; die Zeilen 1 und 2 untergebracht, die alle Befehle für diesen Block enthalten. Block B&sub2; umfaßt Befehle aus Zeile 3 und aus Zeile 4. Zeile 4 enthält zusätzliche Befehle, die den Anfang von Block B&sub3; darstellen. Auf ähnliche Weise enthält Zeile 6 Befehle von Block B&sub3; sowie Anfangsbefehle für Block B&sub4;.
  • Die Programmstruktur führt dazu, daß sechs Zeilen, 1, 2, 3, 4, 6 und 7, benötigt werden, wenn der wahre Zweig B&sub2; ausgeführt werden soll, und daß sechs Zeilen 1, 2, 4, 5, 6 und 7 benötigt werden, wenn der falsche Zweig mit Block B&sub3; ausgeführt werden soll. Es ist klar, daß wenn die wahre Verzweigung eingeschlagen wird, die Zeilen 3 und 4 vorabgerufen werden und eine Verunreinigung in Form von Befehle enthalten, die zu Block B&sub3; gehören und nicht ausgeführt werden.
  • Fig. 2B zeigt die Auswirkung der Umordnung des Codes, damit weniger Zeilen abgerufen werden müssen, um entweder den wahren Zweig B&sub2; oder den falschen Zweig B&sub3; auszuführen. In Fig. 2A ist Zeile 4 auf Befehle begrenzt, die nur zu B&sub2; gehören. Die Zeilen 5 und 6 enthalten Befehle, die nur zu B&sub3; gehören, und Zeile 7 enthält Befehle, die zu Block B&sub4;, dem Mischblock, gehören.
  • Angesichts der Struktur aus Fig. 2A ist klar, daß für den wahren Zweig B&sub2; nur fünf Zeilen, nämlich 1, 2, 3, 4 und 7, und für den falschen Zweig B&sub3; ebenfalls nur fünf Zeilen, d. h. die Zeilen 1, 2, 5, 6 und 7, abgerufen zu werden brauchen.
  • Die sich ergebende Umpositionierung des Codes verbessert die Cacheleistung bei einer Erhöhung der Fragmentierung der Zentralspeicherbefehlsquelle. Das Übriglassen von unbelegtem Speicherplatz innerhalb der Speicherbefehlsquelle 12 er scheint jedoch angesichts des relativ geringen Aufwandes, der für die Schaffung einer zusätzlichen Anzahl von Speicherplätzen erforderlich ist, nur ein geringer Preis dafür zu sein.
  • Die Umordnung von Code innerhalb der Zentralspeicherbefehlsquelle 12 stört die Vorabrufsequenz nicht und kommt der Cacheleistung zugute, da die Verunreinigung reduziert wird und weniger Speicherzyklen benötigt werden, um die gleiche Ausführung zu erreichen.
  • Um eine Methodologie für die Umordnung des Codes zu schaffen, zum Beispiel um die Verunreinigung und Cache-Fehltreffer zu reduzieren, kann eine Steuerungsablaufgraphik benutzt werden, die die Quellen der Cache-Verunreinigung und mögliche Cache-Fehltreffer identifiziert.
  • Die Prozedur erfordert die Identifizierung der in dem Programm enthaltenen Programmschleifen und bedingten Anweisungen. Es werden Umordnungsregeln entwickelt, die die Änderung der Steuerung von einer rein sequentiellen Befehlsausführung in einen Zielbefehl einer bedingten Anweisung oder eine Anfangsschleifenanweisung von Programmschleifen vorwegnehmen.
  • Bezugnehmend auf die Fig. 3A und 3B können allgemeine Umordnungsregeln bestimmt werden, die das Vorabrufen von Befehlszeilen verhindern, welche nicht an der Schleifenausführung beteiligt sind. Programmschleifen werden im allgemeinen mehrmals ausgeführt und während dieser Ausführung ist es wichtig, eine hohe Befehlscacheleistung zu erreichen. Ideal wäre es, wenn der Cache groß genug ist, um den gesamten Schleifenkern zu enthalten. Dies ist jedoch normalerweise nicht üblich, da die Cachegröße begrenzt wird. Dies ist vor allem der Fall, wenn ein Cache in einer Mikroschaltung implementiert wird und nur begrenzter Raum für den Cache zur Verfügung steht.
  • Wie aus Fig. 3A ersichtlich, enthält Zeile 1 Befehle für Block B&sub1; sowie die Anfangsbefehle für Block B&sub2;. Aus diesem Grunde muß während der Ausführung der in Block B&sub2; dargestellten Schleife Zeile 1 zusammen mit den Zeilen 2, 3 und 4 vorliegen, wenn die Schleife zu Block B&sub3; verlassen wird. Diejenigen Befehle in Zeile 1, die zu Block B&sub1; gehören, stellen also eine Verunreinigung des Cache dar.
  • Eine weitere Quelle der Verunreinigung in Fig. 3B ist Zeile 4, die bei jeder Ausführung der Schleife vorabgerufen werden muß. Da diese Schleifen normalerweise häufig ausgeführt werden, führt das kontinuierliche Vorabrufen von Befehlen aus Block B&sub3; zu einer Cache-Verunreinigung.
  • Die Fig. 4A und 4B zeigen jeweils die Schleifen aus den Fig. 3A und 3B, und zwar so umgeordnet, daß eine Verunreinigung des Cache vermieden wird. In Fig. 4A enthält Zeile 1 nur Befehle von Block B&sub1;. Die Schleife ist auf einen Block B&sub2; beschränkt und enthält sämtliche Befehle in den Zeilen 2 und 3. Schließlich beginnt Block B&sub3; in Zeile 4. Fig. 4B zeigt eine ähnliche Umordnung der Schleife aus Fig. 3B.
  • Es ist zu erkennen, daß die Umordnung zu einer Fragmentierung des Hauptspeichers und zu einer Verunreinigung des Cache führt, wobei Zeile 1 nicht vollständig mit Befehlen gefüllt ist. Dieser Programmabschnitt wird jedoch normalerweise nur einmal ausgeführt, und die durch Block B&sub2; identifizierten Programmabschnitte, die mehrmals ausgeführt werden, haben keine Verunreinigung des Cache zur Folge. Um eine geringere Cache-Verunreinigung während der Ausführung der Schleife zu erreichen, wird also eine größere Verunreinigung außerhalb der Schleife in Kauf genommen.
  • Für die Umordnung der Schleife kann zusammengefaßt werden, daß eine Schleife so umgeordnet werden muß, daß sie in einem Zeilenrandbereich beginnt, wenn diese Umordnung die Anzahl der durch die Schleife in Anspruch genommenen Cache- Zeilen um eins reduziert, und wenn die Cache-Zeilengröße größer ist als die Anzahl der Befehle der Schleife, die eine Zeile belegen, welche zu einem anderen Block gehört.
  • Die Umordnung der Schleife führt dazu, daß eine Cache-Zeile weniger abgerufen werden muß, um die Schleife auszuführen. Die Verunreinigung des Cache während der Ausführung wird dadurch reduziert, ebenso wie der Datenverkehr auf dem Bus, wenn auf eine Zeile verwiesen wird, die einen Fehltreffer zur Folge hat, wenn der Prozessor den erforderlichen Befehl nicht im Cache findet. Dadurch wird der Systembus für andere Aufgaben frei, die sonst erforderlich wären, um einen Fehltreffer zu bedienen.
  • Die anderen Bedingungen, die zu einer nicht-sequentiellen Befehlsausführungsfolge führen, betreffen Verzweigungsbefehle. In den Fig. 5A und 5B sind Verzweigungsbefehle dargestellt, die aus ihrem sequentiellen Format aus Fig. 5A zu einem umgeordneten Format in Fig. 5B neu kompiliert wurden. Jede der Verzweigungen enthält einen Block B&sub2; und einen Block B&sub3;. Wenn die wahre Verzweigung B&sub2; eingeschlagen wird, umfaßt die Ausführung dieser Verzweigung Befehle von den Zeilen 1, 2 und 3. Zeile 3 enthält Befehle von Block B&sub3;, welcher die falsche Verzweigung darstellt. Diese zusätzlichen Befehle stellen also eine Verunreinigung des Befehlscache dar. Fig. 5B zeigt, wie diese Verunreinigung entfernt wird. Es wird ermittelt, welche Verzweigung am wahrscheinlichsten ausgeführt wird. In dem Beispiel aus Fig. 5B ist dies Block B&sub2;, die wahre Verzweigung. Der Befehlscode wird so umgeordnet, daß die Zeilen 1, 2 und 3 alle Verzweigungsbefehlscodes enthalten. Die zweite Verzweigung, B&sub3;, wird unmittelbar nach der wahren Verzweigung im durch Zeile 4 definierten Randbereich angeordnet.
  • Die in Zeile 5 von Fig. 5A enthaltene Verunreinigung durch Kombinieren von Befehlen aus Verzweigung B&sub3; mit dem durch Block B&sub4; identifizierten Mischpfad kann ebenfalls eliminiert werden. Fig. 5B zeigt die Begrenzung der zu Block B&sub3; gehörenden Verzweigungsbefehle, so daß diese am Randbereich von Zeile 5 enden.
  • Wird die obige Regel angewendet, kann es zu einer Verunreinigung innerhalb einer Verzweigung B&sub2; oder B&sub3; kommen, wie in Fig. 6A dargestellt. Damit jede der Verzweigungen bei einem Randbereich endet, werden bestimmte Speicherplätze im Speicher leergelassen, die mit e&sub1; und e&sub2; bezeichnet sind und den Zeilen 4 und 7 entsprechen. Diese Speicherplätze können benutzt werden, um Code zu duplizieren, der in Block B&sub4; gefunden würde. Da diese Befehlszeilen aus Block B&sub4; nach Beendigung jedet durch die Blöcke B&sub2; und B&sub3; dargestellten Verzweigung ausgeführt werden müssen, wird der Cache durch diese Duplizierung nicht verunreinigt. Die Anzahl der auf den beiden Pfaden duplizierten Befehle sollte so gewählt werden, daß möglichst wenig unbelegter Speicherplatz auf einem der Pfade zürückbleibt.
  • Als zusätzliche Prozedur zum Vermeiden des Vorabrufens von Befehlen, die zu einer Verunreinigung führen, wäre es möglich, die Zielbefehle in der gleichen Zeile anzuordnen wie den bedingten Befehl, wodurch die Programmausführung verschoben wird. Auf diese Weise wird mit Sicherheit jeder Zielbefehl in einem Vorabruf der bedingten Anweisung enthalten sein.
  • Es kann auch vorteilhaft sein, Befehle an strategischen Speicherplätzen des Hauptprogrammspeichers zu speichern, die für den Hauptprozessor transparent sind, aber durch den Cacheprozessor ausgeführt werden, um Befehle vorabzurufen, die nichtsequentiell sind.
  • Um die Vorteile der Umordnung von Befehlscode zu erhalten, so daß der umgeordnete Code in der Zentralspeicherbefehlsquelle 12 kompiliert wird, kann das Verfahren eine Prozedur umfassen, die die Ablaufgraphik in Teilgraphiken aufteilt und die Umordnungsregeln auf diese Teilgraphiken anwendet. In Fig. 7 ist die grundlegende Einheitenstruktur dieser Ablaufgraphik-Lösung zur Umordnung von Programmbefehlen dargestellt. In der Abbildung sind die folgenden drei Grundformen der Programmstruktur dargestellt: Grundblock, bedingte Struktur und Schleife.
  • Der Grundblock umfaßt diejenigen Befehle, die in Folge ausgeführt werden und keine Quelle der Verunreinigung oder möglicher Cache-Fehltreffer darstellen.
  • Die bedingte Struktur zeigt einen Verzweigungsbefehl mit einem Grund block zum Eintreten in eine von zwei Verzweigungen und mit einem Grundblock zum Mischen der beiden Verzweigungen. Die dritte gezeigte Programmstruktur ist eine Schleife.
  • Aus einer in Fig. 8 A dargestellten Ablaufgraphik kann ein in Fig. 8B dargestellter Umordnungsbaum entwickelt werden, der mit einem entsprechenden Algorithmus zur Umordnung des Codes verwendet wird, wobei der vorhergehende umgeordnete Code genutzt wird, was zu weniger Verunreinigung und weniger Cache-Fehltref fern führt. Bei der Analyse der Ablaufgraphik aus Fig. 8 A zeigt sich, daß dieses Programm eine Anzahl von Grundprogrammstrukturen enthält. Es gibt zwei größere Blockstrukturen für dieses Programm, die mit 12 und 13 bezeichnet sind. Struktur 12 ist eine Verzweigungsroutine, die auch eine durch Block B&sub3; bezeichnete Schleife enthält. Die Anzahl der für einen Block benötigten Zeilen ist ebenfalls in Fig. 8 A dargestellt. Die Ablaufgraphik aus Fig. 8B zeigt die beiden wesentlichen Knotenpunkte als U1 und U2. U2 enthält den Block B&sub5;, der eine Schleife ist. U1 umfaßt alle Blöcke mit der bedingten Verzweigung 12. Diese kann weiter unterteilt werden in untergeordnete Knotenpunkte des Hauptknotenpunktes U1, wie in Fig. 8B dargestellt. Die beiden sequentiellen Blöcke B&sub1; und B&sub4; werden gemeinsam mit den beiden Verzweigungen B&sub2; und B&sub3; innerhalb von Block 12 identifiziert. Nach dieser Diagnose der Ablaufgraphik und ihres Umordnungsbaums können die folgenden Schritte unternommen werden, um die verschiedenen Blöcke umzuordnen.
  • Umordnung (U)
  • Das Ergebnis der Implementierung des obigen Umordnungsverfahrens identifiziert B&sub1; als Grundblock, bei dem keine Umordnung erforderlich ist. Da B&sub2; die bedingte Verzweigung ist, die der wahren Verzweigung entspricht, wird B&sub2; wie in den Fig. 9A und 9B dargestellt entsprechend den obengenannten Prinzipien umgeordnet, wobei Zeilen mit Befehlen für B&sub2; keine Befehle für die andere Verzweigung, B&sub3;, enthalten. Die Cache-Zeilengröße beträgt zehn Befehle, so daß B&sub2; durch zwei Leerbefehle von B&sub3; getrennt wird. In diesem Beispiel wird gezeigt, daß die Cache-Zeilengröße vier beträgt.
  • Fährt man mit jedem der Blöcke fort, läßt sich erkennen, daß die Verzweigung B&sub3; bei dem nächsten Zeilenintervall von B&sub2; folgt, und die durch den Block B&sub5; dargestellte Schleife wird so umgeordnet, daß sie bei einem Zeilenrandbereich beginnt.
  • Als Alternativlösung zu der Ablaufgraphikanalyse für die Umordnung und Kompilierung des Programms kann die Umordnung mit Hilfe einer Steuerungsabhängigkeitsgraphik erfolgen. Bei Verwendung einer Steuerungsabhängigkeitsgraphik wird das Programm in Regionen unterteilt, die aus Anweisungen bestehen, für deren Ausführung identische Steuerungsbedingungen wahr sein müssen. Wenn eine Anweisung in einer Steuerungsregion ausgeführt wird, werden auch die verbleibenden Anweisungen in der Steuerungsregion ausgeführt. Wenn ein Cache Befehlszeilen von Anweisungen der gleichen Steuerungsregion enthält, gibt es also niemals eine Cache-Verunreinigung. Die Steuerungsabhängigkeitsgraphik kann zu einer Programm-Umordnung führen, die möglicherweise weniger Cache-Verunreinigung nach sich zieht als die Umordnung in Über- I einstimmung mit einer Steuerungsablaufgraphik. Die Fig. 9A und 9B zeigen zwei Situationen, in denen die Steuerungsablaufgraphikanalyse die Cache-Verunreinigung nicht eliminieren kann. In Fig. 9A wird die Verunreinigung in Zeile 1 durch die Einbeziehung von Befehlen für die beiden Blöcke B&sub1; und B&sub2; verursacht. Durch die vorher gehende Steuerungsablaufgraphikanalyse wird diese Quelle der Verunreinigung nicht eliminiert. Bei Verwendung der Steuerungsabhängigkeitsgraphik ist jedoch festzustellen, daß die Gruppierung von Befehlen von den beiden Blöcken keine Cache-Verunreinigung verursacht, weil B&sub1; und B&sub4; zu der gleichen Steuerungsregion gehören. Eine weitere Cache-Verunreinigung wird durch unbenutzte Speicherplätze am Ende des Grundblocks B&sub2; in Fig. 9A verursacht. Auch diese Verunreinigung wird mit Hilfe der vorhergehenden Verfahren nicht eliminiert.
  • Die Steuerungsabhängigkeitsgraphik für jede der Programmstrukturen aus den Fig. 10A und 10B ist in den Fig. 11A und 11B dargestellt. Die Steuerungsabhängigkeitsgraphiken veranschaulichen Programmstrukturen, die in der gleichen Steuerungsregion liegen. Befehle können zwischen den Blöcken einer bestimmten Region vor- und zurückgeschoben werden, wenn die entsprechenden Verzweigungsbefehle eingeführt werden. Wenn zum Beispiel Befehle von B&sub4; in einer Zeile mit Befehlen von Block B&sub1; enthalten sind, wird eine bedingte Anweisung aufgenommen, um sicherzustellen, daß alle B&sub1;-Befehle ausgeführt werden, bevor einer der Befehle für B&sub4; ausgeführt wird. Das Verfahren zur Umordnung von Code mit Hilfe der Steuerungsabhängigkeitsgraphik ähnelt dem Verfahren, das in der Steuerungsablaufgraphik angewendet wird, da die innersten Anweisungen, die Regionen auf der untersten Ebene der Steuerungsdatengraphik entsprechen, zuerst verarbeitet werden. Wenn der Code für eine Region nicht in eine ganzzahlige Anzahl von Zeilen paßt, wird versucht, einen solchen Code durch Code-Bewegung in eine ganzzahlige Anzahl von Zeilen einzupassen.
  • Weitere Umordnungsverfahren können eine solche Umordnung von Befehlen von zwei Pfaden eines Verzweigungsbefehls umfassen, daß alle Verzweigungsziele in die gleiche Zeile vorabgerufen werden. Aus diesem Grund enthält eine Cache-Zeile bei jedem Abruf Befehle für beide Pfade.
  • Im umgeordneten Befehlscode kann Speicherplatz von Cache-Direktiven eines fragmentierten Speichers enthalten sein. Die Cache-Direktiven sind spezielle Befehle, die nur für den Cache-Controller sichtbar sind und ansonsten das Abrufen von Befehlen leiten, die vorweggenommen werden.
  • Auf diese Weise wird ein Verfahren für die vorteilhafte Umordnung und Kompilierung von Befehlscodes innerhalb eines Zentralspeichers beschrieben. Die umgeordneten Befehlscodes führen zu weniger Befehlscache-Verunreinigung und weniger Cache-Fehltreffern, ohne die Befehlscache-Vorabrufroutine zu verändern. Der Fachkundige wird weitere Ausführungsformen erkennen, die durch die folgenden Ansprüche ausführlicher beschrieben werden.

Claims (15)

1. Verfahren zur Verbesserung der Befehlscacheleistung eines Rechnerprogrammiersystems zur Ausführung von Programmbefehlen (1, 2, 3, 4, 5, 6, 7), wobei das Verfahren gekennzeichnet ist durch die folgenden Schritte:
- Bestimmen einer Reihenfolge der Ausführung der genannten Programmierbefehle (1, 2, 3, 4, 5, 6, 7);
- Speichern der genannten Programmbefehle (1, 2, 3, 4, 5, 6, 7) entsprechend Gruppen (B&sub1;, B&sub2;, B&sub3;, B&sub4;), wobei jede Gruppe eine Vielzahl von Befehlen enthält, die sequentiell ausgeführt werden, wobei der Schritt der Speicherung folgendes umfaßt:
- Positionieren einer Gruppe (B&sub1;, B&sub2;, B&sub3;, B&sub4;) auf eine solche Weise in einem Programmspeicher (12), daß beim Einlesen der Gruppe in einen Befehlscache (13) die Gruppe bei einem Cache-Zeilenrandbereich beginnt; und
- wenn die Länge der Gruppe (B 1, B&sub2;, B&sub3;, B&sub4;) nicht mit einer ganzzahligen Anzahl von Cache-Zeilen übereinstimmt, Speichern von Positionsjustierinformationen am Ende der Gruppe.
2. Verfahren nach Anspruch 1, wobei die Positionsjustierinformation ein Leerraum ist.
3. Verfahren nach Anspruch 1, wobei die Positionsjustierinformation Befehlsinformationen von einer nachfolgenden Gruppe enthält.
4. Verfahren nach Anspruch 1, wobei die Gruppe (B&sub1;, B&sub2;, B&sub3;, B&sub4;) eine Folge von Befehlen (1, 2, 3, 4, 5, 6, 7) umfaßt; die durch Auswertung einer Bedingung innerhalb eines bedingten Verzweigungsbefehls erreichbar ist.
5. Verfahren nach Anspruch 1, wobei die Gruppe (B&sub1;, B&sub2;, B&sub3;, B&sub4;) Befehle innerhalb ein und derselben Schleife umfaßt.
6. Verfahren nach Anspruch 1, wobei der genannte Bestimmungsschritt durch einen Quellcode-Compiler durchgeführt wird, der die genannten Programmbefehle kompiliert.
7. Verfahren nach Anspruch 1, wobei eine erste der genannten Gruppen (B&sub2;) Befehle enthält, die erreichbar sind, wenn die Auswertung einer Bedingung eines bedingten Verzweigungsbefehls ein erstes Ergebnis liefert;
eine zweite der genannten Gruppen (B&sub3;) Befehle enthält, die erreichbar sind, wenn die Auswertung der Bedingung ein zweites Ergebnis liefert; und
der Positionierschritt folgendes umfaßt:
Positionieren der ersten Gruppe (B&sub2;) in dem Programmspeicher auf eine solche Weise, daß wenn die erste Gruppe in den Befehlscache (13) gelesen wird, die erste Gruppe an einem ersten Cache-Zeilenrandbereich beginnt; und
Positionieren der zweiten Gruppe (B&sub3;) in dem Programmspeicher auf eine solche Weise, daß wenn die zweite Gruppe in den Befehlscache (13) gelesen wird, die zweite Gruppe an einem zweiten Cache-Zeilenrandbereich beginnt, wobei dieser zweite Cache-Zeilenrandbereich nach dem Ende der ersten Gruppe (B&sub2;) angeordnet ist.
8. Verfahren nach Anspruch 7, das weiterhin den Schritt des gemeinsamen Vorabrufens der ersten und der zweiten Gruppe (B&sub2;, B&sub3;) in den Befehlscache nach dem Vorabrufen des bedingten Verzweigungsbefehls umfaßt.
9. Verfahren nach Anspruch 7, das weiterhin einen Schritt umfaßt, in dem entschieden wird, daß die genannte erste Gruppe (B&sub2;) eine wahrscheinlichere Auswertung der Bedingung darstellt.
10. Verfahren nach Anspruch 7, das weiterhin den Schritt des Positionierens von Befehlen (7), die automatisch auf die Ausführung der ersten oder der zweiten Gruppe folgen, zwischen einem Ende der ersten Gruppe (B&sub2;) und einem Anfang der zweiten Gruppe (B&sub3;) umfaßt.
11. Verfahren nach Anspruch 1, wobei die genannten Bestimmungs- und Speicherungsschritte durch einen Quellcode-Compiler ausgeführt werden;
wobei der genannte Bestimmungsschritt weiterhin folgendes umfaßt:
Identifizieren von Blöcken (B&sub1;, B&sub2;, B&sub3;, B&sub4;) von Befehlen in dem genannten Rechnerprogramm, wobei die Blöcke jeweils eine Schleife, eine als Ergebnis der Auswertung einer bedingten Verzweigung erreichbare Gruppe oder einen Grundblock von sequentiellen Befehlen darstellen; und
Bilden einer Darstellung, welche einer Ablaufgraphik des genannten Rechnerprogramms entspricht, wobei diese Ablaufgraphik eine Reihe von Knotenpunkten enthält, die jeweils einen der genannten identifizierten Blöcke darstellen, und eine Reihe von untergeordneten Knotenpunkten, welche Blöcke identifizieren, die in den genannten Blöcken enthalten sind; und
wobei der genannte Positionierschritt weiterhin Positionierbefehle enthält, die den Knotenpunkten in dem Programmspeicher entsprechen, so daß jeder Knotenpunkt an einem Cache-Zeilenrandbereich beginnt, wenn solche Befehle in den Befehlscache geladen werden.
12. Verfahren nach Anspruch 1, wobei die genannten Bestimmungs- und Speicherungsschritte durch einen Quellcode-Compiler ausgeführt werden;
der genannte Bestimmungsschritt weiterhin die Bildung einer Darstellung umfaßt, die einer Steuerungsabhängigkeitsgraphik entspricht, welche das genannte Programm in Regionen unterteilt, wobei jede Region Befehle enthält, für deren Ausführung identische Bedingungen wahr sein müssen; und
der genannte Positionierschritt weiterhin Positionierbefehle enthält, die Regionen in dem Programmspeicher entsprechen, so daß jede Region an einem Cache-Zeilenrandbereich beginnt, wenn diese Befehle in den Befehlscache geladen werden.
13. Verfahren nach Anspruch 1, wobei die genannten Bestimmungs- und Speicherungsschritte durch einen Quellcode-Compiler ausgeführt werden;
der Speicherungsschritt weiterhin das Kombinieren von Befehlen umfaßt, die zu Zielbefehlen einer bedingten Verzweigungsanweisung gehören, so daß die kombinierten Befehle an einem Cache-Zeilenrandbereich beginnen, wenn sie in den Befehlscache gelesen werden.
14. Verfahren nach Anspruch 1, wobei mindestens eine der Gruppen an einer Sprungeintrittsstelle beginnt und der genannte Positionierschritt folgendes umfaßt: Positionieren der Gruppen im Programmspeicher auf eine solche Weise, daß der Abstand zwischen einem Beginn jeder Nichtletzten-Gruppe und einem Beginn einer nächsten Gruppe ein ganzzahliges Vielfaches des Abstands zwischen auf einanderfolgenden Zeilen in einem Cachespeicher ist; und
wenn die Länge der Gruppe nicht mit einer ganzzahligen Apzahl von Cachezeilen übereinstimmt, Speichern von Positionsjustierinformationen am Ende der Gruppe.
15. Verfahren nach Anspruch 11 oder 12, das weiterhin folgendes umfaßt: Untersuchen jeder Zeile in dem genannten Befehlscache auf Vorhandensein einer Datenabhängigkeit, die die Programmausführungsfolge für die genannten Befehle identifiziert; und Vorabrufen der genannten Anweisungen entsprechend der genannten Ausführungsfolge.
DE69129919T 1990-03-27 1991-03-25 Verfahren zur Kompilierung von Rechnerbefehlen, um Cachespeicherleistung zu verbessern Expired - Fee Related DE69129919T2 (de)

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
US07/500,627 US5303377A (en) 1990-03-27 1990-03-27 Method for compiling computer instructions for increasing instruction cache efficiency

Publications (2)

Publication Number Publication Date
DE69129919D1 DE69129919D1 (de) 1998-09-10
DE69129919T2 true DE69129919T2 (de) 1999-03-11

Family

ID=23990252

Family Applications (1)

Application Number Title Priority Date Filing Date
DE69129919T Expired - Fee Related DE69129919T2 (de) 1990-03-27 1991-03-25 Verfahren zur Kompilierung von Rechnerbefehlen, um Cachespeicherleistung zu verbessern

Country Status (4)

Country Link
US (1) US5303377A (de)
EP (1) EP0449368B1 (de)
JP (1) JPH04225431A (de)
DE (1) DE69129919T2 (de)

Families Citing this family (30)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH04263323A (ja) * 1991-02-18 1992-09-18 Nec Corp 機械語命令列並べ換え方式
US5457799A (en) * 1994-03-01 1995-10-10 Digital Equipment Corporation Optimizer for program loops
US5689712A (en) * 1994-07-27 1997-11-18 International Business Machines Corporation Profile-based optimizing postprocessors for data references
JPH0877021A (ja) * 1994-09-01 1996-03-22 Fujitsu Ltd 割込処理装置および方法
US5796989A (en) * 1995-03-20 1998-08-18 Apple Computer, Inc. Method and system for increasing cache efficiency during emulation through operation code organization
US6314561B1 (en) 1995-04-12 2001-11-06 International Business Machines Corporation Intelligent cache management mechanism
US5805863A (en) * 1995-12-27 1998-09-08 Intel Corporation Memory pattern analysis tool for use in optimizing computer program code
US6091897A (en) * 1996-01-29 2000-07-18 Digital Equipment Corporation Fast translation and execution of a computer program on a non-native architecture by use of background translator
US6301652B1 (en) * 1996-01-31 2001-10-09 International Business Machines Corporation Instruction cache alignment mechanism for branch targets based on predicted execution frequencies
TW470915B (en) * 1996-03-12 2002-01-01 Matsushita Electric Ind Co Ltd Optimization apparatus which removes transfer instructions by a global analysis of equivalence relations
US5761515A (en) * 1996-03-14 1998-06-02 International Business Machines Corporation Branch on cache hit/miss for compiler-assisted miss delay tolerance
US6038398A (en) * 1997-05-29 2000-03-14 Hewlett-Packard Co. Method and apparatus for improving performance of a program using a loop interchange, loop distribution, loop interchange sequence
EP0921464A1 (de) * 1997-12-05 1999-06-09 Texas Instruments Incorporated Cachespeicheroptimierung für Programmschleifen
US6282706B1 (en) * 1998-02-10 2001-08-28 Texas Instruments Incorporated Cache optimization for programming loops
US6141732A (en) * 1998-03-24 2000-10-31 Novell, Inc. Burst-loading of instructions into processor cache by execution of linked jump instructions embedded in cache line size blocks
US6240500B1 (en) 1998-06-08 2001-05-29 Compaq Computer Corporation Method for dynamically placing procedures of a program in a memory
JP2000020319A (ja) * 1998-06-30 2000-01-21 Canon Inc プログラム実行装置、その制御方法および記憶媒体
US6230260B1 (en) 1998-09-01 2001-05-08 International Business Machines Corporation Circuit arrangement and method of speculative instruction execution utilizing instruction history caching
US6243807B1 (en) * 1998-10-20 2001-06-05 Pc-Tel, Inc. Optimizing cache data load required for functions in loop routine by sequentially collecting data in external memory for single block fetch
US6237065B1 (en) * 1999-05-14 2001-05-22 Hewlett-Packard Company Preemptive replacement strategy for a caching dynamic translator
US6675374B2 (en) 1999-10-12 2004-01-06 Hewlett-Packard Development Company, L.P. Insertion of prefetch instructions into computer program code
US7299458B2 (en) * 2002-10-31 2007-11-20 Src Computers, Inc. System and method for converting control flow graph representations to control-dataflow graph representations
US20050044538A1 (en) * 2003-08-18 2005-02-24 Srinivas Mantripragada Interprocedural computing code optimization method and system
JP4934267B2 (ja) * 2003-10-17 2012-05-16 パナソニック株式会社 コンパイラ装置
US8612957B2 (en) * 2006-01-26 2013-12-17 Intel Corporation Scheduling multithreaded programming instructions based on dependency graph
US8266605B2 (en) * 2006-02-22 2012-09-11 Wind River Systems, Inc. Method and system for optimizing performance based on cache analysis
US8037466B2 (en) 2006-12-29 2011-10-11 Intel Corporation Method and apparatus for merging critical sections
US8484630B2 (en) * 2008-12-23 2013-07-09 International Business Machines Corporation Code motion based on live ranges in an optimizing compiler
US9524178B2 (en) * 2013-12-30 2016-12-20 Unisys Corporation Defining an instruction path to be compiled by a just-in-time (JIT) compiler
US9696973B1 (en) 2016-02-24 2017-07-04 Semmle Limited Compilation cache with imports scanner

Family Cites Families (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4200927A (en) * 1978-01-03 1980-04-29 International Business Machines Corporation Multi-instruction stream branch processing mechanism
US4755966A (en) * 1985-06-28 1988-07-05 Hewlett-Packard Company Bidirectional branch prediction and optimization
US4965724A (en) * 1987-03-05 1990-10-23 Oki Electric Industry Co., Ltd. Compiler system using reordering of microoperations to eliminate interlocked instructions for pipelined processing of assembler source program
JPH0769812B2 (ja) * 1987-12-29 1995-07-31 富士通株式会社 データ処理装置
JP2738692B2 (ja) * 1988-01-29 1998-04-08 株式会社日立製作所 並列化コンパイル方法
US4991088A (en) * 1988-11-30 1991-02-05 Vlsi Technology, Inc. Method for optimizing utilization of a cache memory

Also Published As

Publication number Publication date
DE69129919D1 (de) 1998-09-10
EP0449368A3 (en) 1992-03-18
JPH04225431A (ja) 1992-08-14
EP0449368A2 (de) 1991-10-02
US5303377A (en) 1994-04-12
EP0449368B1 (de) 1998-08-05

Similar Documents

Publication Publication Date Title
DE69129919T2 (de) Verfahren zur Kompilierung von Rechnerbefehlen, um Cachespeicherleistung zu verbessern
DE69132675T2 (de) Parallelfliessband-Befehlsverarbeitungssystem für sehr lange Befehlswörter
DE19945992B4 (de) Dynamisch optimierender Objektcode-Übersetzer zur Architekturemulation und dynamisches optimierendes Objektcode-Übersetzungsverfahren
DE69209888T2 (de) Befehlablaufsteuerung für einen Rechner
DE69622305T2 (de) Verfahren und Gerät für einen optimierenden Kompiler
DE3650696T2 (de) Paralleles prozessorsystem und zugehöriges verfahren zur behandlung von natürlichen nebenläufigkeiten
DE69224084T2 (de) Rechneranordnung mit Mehrfachpufferdatencachespeicher und Verfahren dafür
DE69615445T2 (de) Kompilierer zur Verbesserung der Leistung von Datencachespeichern
DE69715328T2 (de) System und Verfahren zur Parallelisierung der Durchführung von Speichertransaktionen mittels mehreren Speichermodellen
DE69031991T2 (de) Verfahren und Gerät zur Beschleunigung von Verzweigungsbefehlen
DE69129569T2 (de) Maschine mit sehr langem Befehlswort für leistungsfähige Durchführung von Programmen mit bedingten Verzweigungen
DE69322683T2 (de) Verfahren und Vorrichtung zur Durchführung eines pseudo-LRU Cachespeicherersetzungsschemas mit einer Verriegelungsfunktion
EP0689694B1 (de) Verfahren zur maschinellen erzeugung von nebenläufig bearbeitbaren befehlsgruppen aus einem programm für superskalare mikroprozessoren
DE3751306T2 (de) Re-Assoziationsverfahren zur Kodeoptimierung.
DE69131472T2 (de) Verfahren zum Vorsehen eines synchronisierten Datencachespeicherbetriebs für Prozessoren in einer parallelen Verarbeitungsanordnung und parallele Verarbeitungsanordnung zur Durchführung des Verfahrens
DE69415126T2 (de) Gegenflusspipelineprozessor
DE19527031C2 (de) Verzweigungsprozessor für ein Datenverarbeitungssystem und Verfahren zum Betreiben eines Datenverarbeitungssystems
DE69623146T2 (de) Verfahren und Vorrichtung zum Koordinieren der Benutzung von physikalischen Registern in einem Mikroprozessor
DE69130723T2 (de) Verarbeitungsgerät mit Speicherschaltung und eine Gruppe von Funktionseinheiten
DE69832932T2 (de) Programmkonvertiergerät für konstantenrekonstruierenden VLIW Prozessor
DE69705654T2 (de) Optimierungsverfahren unter Verwendung von globaler Analyse zur Eliminierung redundanter Transferbefehle
DE4345028A1 (de) Vorrichtung zur Reduzierung von Verzögerungen aufgrund von Verzweigungen
DE69429762T2 (de) Verfahren und Vorrichtung zur Befehlsteuerung in einem Pipelineprozessor
DE10306051B4 (de) Verfahren zum Optimieren der Verarbeitung von Befehlen durch einen Prozessor und Prozessoren zur Durchführung der Verfahren
DE19824289A1 (de) Pipelineverarbeitungsmaschine

Legal Events

Date Code Title Description
8364 No opposition during term of opposition
8327 Change in the person/name/address of the patent owner

Owner name: KONINKLIJKE PHILIPS ELECTRONICS N.V., EINDHOVEN, N

8339 Ceased/non-payment of the annual fee