DE10297279T5 - Verfahren und Vorrichtung zum Durchführen von Compiler-Transformation von Softwarecode unter Verwendung von Fast-Forward-Bereichen und Wertespezialisierung - Google Patents
Verfahren und Vorrichtung zum Durchführen von Compiler-Transformation von Softwarecode unter Verwendung von Fast-Forward-Bereichen und Wertespezialisierung Download PDFInfo
- Publication number
- DE10297279T5 DE10297279T5 DE10297279T DE10297279T DE10297279T5 DE 10297279 T5 DE10297279 T5 DE 10297279T5 DE 10297279 T DE10297279 T DE 10297279T DE 10297279 T DE10297279 T DE 10297279T DE 10297279 T5 DE10297279 T5 DE 10297279T5
- Authority
- DE
- Germany
- Prior art keywords
- candidates
- group
- code
- candidate
- areas
- 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.)
- Ceased
Links
Classifications
-
- 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
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/44—Encoding
- G06F8/443—Optimisation
Landscapes
- Engineering & Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Devices For Executing Special Programs (AREA)
Abstract
Verfahren mit folgenden Schritten:
Identifizieren einer Mehrzahl von möglichen Kandidaten für Wertespezialisierung in Softwarecode;
Auswählen einer Gruppe von Kandidaten aus der Mehrzahl möglicher Kandidaten auf Grundlage eines jedem der Mehrzahl von möglichen Kandidaten zugeordneten Werteprofils;
Bestimmen von spezialisierten Daten für jeden Kandidaten in der Gruppe von Kandidaten unter Verwendung eines entsprechenden Werteprofils; und
Bilden einer Mehrzahl von optimierten Bereichen auf Grundlage entsprechender spezialisierter Daten, wobei jeder der Mehrzahl von optimierten Bereichen einen oder mehrere Kandidaten aus der Gruppe von Kandidaten enthält.
Identifizieren einer Mehrzahl von möglichen Kandidaten für Wertespezialisierung in Softwarecode;
Auswählen einer Gruppe von Kandidaten aus der Mehrzahl möglicher Kandidaten auf Grundlage eines jedem der Mehrzahl von möglichen Kandidaten zugeordneten Werteprofils;
Bestimmen von spezialisierten Daten für jeden Kandidaten in der Gruppe von Kandidaten unter Verwendung eines entsprechenden Werteprofils; und
Bilden einer Mehrzahl von optimierten Bereichen auf Grundlage entsprechender spezialisierter Daten, wobei jeder der Mehrzahl von optimierten Bereichen einen oder mehrere Kandidaten aus der Gruppe von Kandidaten enthält.
Description
- Verwandte Anmeldungen
- Die vorliegende Anmeldung steht mit der am --- eingereichten US-Patentanmeldung Nr. --- mit dem Titel "Fastforward: Aggressive Compiler Optimization With Hardware Support" (Fastforward: Agressive Compiler-Optimierung mit Hardwareunterstützung) und der am --- eingereichten US-Patentanmeldung Nr. --- mit dem Titel "Region Formation For Computation Reuse" (Bereichsbildung für die Wiederberechnung) im Zusammenhang, die dem Rechtsnachfolger der vorliegenden Anmeldung zugewiesen und hierdurch durch Bezugnahme aufgenommen ist.
- Erfindungsgebiet
- Die vorliegende Erfindung betrifft allgemein Compiler und insbesondere Compiler, die Softwarecode auf Grundlage von Wertespezialisierung optimieren können.
- Stand der Technik
- Im allgemeinen ist das Ergebnis der Verwendung eines Compilers für einen Durchlauf (One-Pass Compiler) Objektcode, der viel weniger wirkungsvoll abläuft, als es der Fall sein würde, wenn bei seiner Kompilierung mehr Mühe aufgewandt worden wäre. Es ist daher wünschenswert, Objektcode zu optimieren.
- In einem Artikel mit dem Titel "rePlay: A Hardware Framework for Dynamic Program Optimization" (rePlay: Ein Hardwarerahmen für dynamische Programmoptimierung) CRHC Technical Report Draft, Dezember 1999 von Sanjay J. Pa tel und Steven S. Lumetta ist ein Optimierungsverfahren mit der Bezeichnung "rePlay" offenbart. rePlay ist jedoch hauptsächlich auf Hardware angewiesen, um Bereiche zu bilden und die Bereiche zur Laufzeit zu optimieren. Diese Abhängigkeit von Hardware kann unrealistisch sein, da viele Optimierungen kompliziert sein können und bedeutsame Hardware- und Software-Kompilierungszeit erfordern.
- Andere Optimierungsverfahren einschließlich von teilweiser Redundanzbeseitigung (PRE – Partial Redundancy Elimination) und teilweiser Beseitigung von ungenutztem Code (PDE – Partial Dead-Code Elimination) können manchmal ebenfalls unwirksam sein und sind sehr aufwendig zu implementieren. PDE ist in "Path profile guided partial dead Code elimiunation using predication" (Durch Wegprofil geführte teilweise Beseitigung von ungenutztem Code unter Verwendung von Aussage), Parallel Architectures and Compilation Techniques, 1997 von Rajiv Gupta, David E. Benson und Jesse Z. Fang offenbart.
- Weiterhin ist ein Optimierungsverfahren mit der Bezeichnung "Superblock" in "The Superblock: An Effective Technique for VLIW and Superscalar Compilation" (Der Superblock: Ein wirkungsvolles Verfahren für VLIW- und Superskalar-Kompilierung), The Journal of Supercomputing, Kluwer Academic Publishers, 1993, Seiten 229–248, von Wen-mei W. Hwu et al. offenbart. Daten- und Steuerungsfluß für Optimierung und Zeitplanung sind allgemein in einem Superblock vereinfacht. Ein Superblock ist jedoch immer noch ein Bereich mit mehreren Ausgängen. Die Optimierung und Zeitplanung muß sich daher mit Fragen wie Seitenaustritt und Spekulation befassen.
- Kurze Beschreibung der Zeichnungen
- Die vorliegende Erfindung wird beispielhafterweise und nicht als Begrenzung in den Figuren der beiliegenden Zeichnungen dargestellt, in denen sich gleiche Bezugs ziffern auf gleichartige Elemente beziehen und in denen:
-
1 ein Blockdiagramm einer Ausführungsform eines Rechensystems ist; -
2 ein Flußdiagramm einer Ausführungsform eines Verfahrens zur Durchführung von Compiler-Transformation von Programmcode auf Grundlage von Wertespezialisierung ist; -
3 die Bildung eines FFR und die Verwendung von Abbruchanweisungen in einem Checker-Code darstellt; -
4 die Bildung eines FFR und die Verwendung von Setzanweisungen in einem Checker-Code darstellt; -
5 ein Flußdiagramm einer Ausführungsform eines Verfahrens zur Bildung von FFR ist; -
6 die Transformation von Programmcode auf Grundlage von Teilbereichs-Wertespezialisierung darstellt; -
7 ein Blockdiagramm eines Verfahrens zur Bereitstellung von Compiler-Transformation von Programmcode auf Grundlage von Wertespezialisierung eines Teilbereichs ist; -
8 die Transformation von Programmcode auf Grundlage von Ladewertspezialisierung darstellt; und -
9 ein Blockdiagramm eines Verfahrens zur Bereitstellung von Compiler-Transformation von Programmcode auf Grundlage von Wertespezialisierung einer Ladeanweisung ist. - Beschreibung von Ausführungsformen
- Es wird ein Verfahren und eine Vorrichtung zur Durchführung von Compiler-Transformation von Softwarecode auf Grundlage von Wertespezialisierung beschrieben.
- Einige Teile der folgenden ausführlichen Beschreibungen werden als Algorithmen und symbolische Darstellungen von Operationen an Datenbit in einem Computerspeicher dargestellt. Diese algorithmischen Beschreibungen und Darstellungen sind die von Fachleuten der Datenverarbeitungstechnik benutzten Mittel, um die Substanz ihrer Arbeit anderen Fachleuten in dieser Technik am wirkungsvollsten zu vermitteln. Ein Algorithmus wird hier und im allgemeinen als eine konsequente Folge von Schritten angesehen, die zu einem gewünschten Ergebnis führen. Die Schritte sind diejenigen, die physikalische Manipulationen physikalischer Mengen erfordern. Diese Mengen nehmen gewöhnlich aber nicht unbedingt die Form von elektrischen oder magnetischen Signalen an, die gespeichert, übertragen, kombiniert, verglichen und sonstwie manipuliert werden können. Es hat sich gelegentlich als zweckdienlich erwiesen, hauptsächlich aus Gründen gemeinsamer Nutzung, diese Signale als Bit, Werte, Elemente, Symbole, Zeichen, Glieder, Nummern oder dergleichen zu bezeichnen.
- Man sollte jedoch nicht vergessen, daß alle diese und ähnliche Begriffe mit den entsprechenden physikalischen Mengen in Verbindung stehen müssen und nur auf diese Mengen angewandte zweckdienliche Etikette sind. Wenn nicht besonders sonstwie wie aus den nachfolgenden Besprechungen offenbar angegeben, sollen in der gesamten vorliegenden Erfindung Besprechungen, bei denen Begriffe wie "Verarbeitung" oder "Rechnung" oder "Berechnung" oder "Bestimmung" oder "Anzeige" oder dergleichen auf die Handlungen und Vorgänge eines Computersystems oder einer ähnlichen elektronischen Rechenvorrichtung Bezug nehmen, das oder die Daten, die als physikalische (elektronische) Mengen in den Registern und Speichern des Computersystems dargestellt sind, manipuliert und in andere Daten transformiert, die auf ähnliche Weise als physikalische Mengen in den Speichern oder Registern des Computersystems oder anderen derartigen Informationsspeicherungs-, Übertragungs- oder Anzeigevorrichtungen dargestellt sind.
- Auch betrifft die vorliegende Erfindung eine Vorrichtung zur Durchführung der hiesigen Operationen. Diese Vorrichtung kann besonders für die erforderten Zwecke konstruiert sein oder sie kann einen durch ein im Computer gespeichertes Computerprogramm selektiv aktivierten oder umkonfigurierten Universalcomputer umfassen. Ein solches Computerprogramm kann in einem maschinenlesbaren Speichermedium wie beispielsweise irgendeiner Plattenart einschließlich von Disketten, optischen Platten, CD-ROM und magnetooptischen Platten, Festwertspeichern (ROM), Direktzugriffsspeichern (RAM), EPROM, EEPROM, magnetischen oder optischen Karten oder irgendeiner Art von zur Speicherung von elektronischen Anweisungen geeigneten Medien, die jeweils an einen Computersystembus angekoppelt sind, gespeichert sein, ist aber nicht darauf begrenzt. Anweisungen sind unter Verwendung von einer oder mehreren Verarbeitungsvorrichtungen (z.B. Prozessoren, Zentraleinheiten usw.) ausführbar.
- Die hier dargestellten Algorithmen und Anzeigen beziehen sich nicht von selbst auf irgendeinen bestimmten Computer oder eine sonstige Vorrichtung. Verschiedene Universalmaschinen können mit Programmen gemäß der hiesigen Lehre benutzt werden, oder es kann sich als zweckdienlich erweisen, mehr spezialisierte Vorrichtungen zur Durchführung der erforderlichen Verfahrensschritte zu konstruieren. Die erforderliche Struktur für mehrere dieser Maschinen wird aus der untenstehenden Beschreibung offenbar. Zusätzlich wird die vorliegende Erfindung nicht unter Bezugnahme auf irgendeine bestimmte Programmiersprache beschrieben. Man wird erkennen, daß verschiedene Programmiersprachen benutzt werden können, um die Lehre der hier beschriebenen Erfindung zu implementieren.
- In der nachfolgenden ausführlichen Beschreibung der Ausführungsformen wird auf die beiliegenden Zeichnungen bezug genommen, die beispielhafterweise bestimmte Ausführungsformen zeigen, in denen die Erfindung ausgeübt werden kann. In den Zeichnungen beschreiben gleiche Ziffern im wesentlichen gleichartige Komponenten in den verschiedenen Ansichten. Diese Ausführungsformen werden ausführlich genug beschrieben, um dem Fachmann die Ausübung der Erfindung zu ermöglichen. Es können andere Ausführungsformen benutzt werden und strukturelle, logische und elektrische Änderungen ausgeführt werden, ohne von dem Rahmen der vorliegenden Erfindung abzuweichen. Weiterhin versteht sich, daß die verschiedenen Ausführungsformen der Erfindung, obwohl sie unterschiedlich sind, sich nicht unbedingt gegenseitig ausschließen. Beispielsweise kann ein bestimmtes Merkmal, eine bestimmte Struktur oder eine bestimmte Eigenschaft, die in einer Ausführungsform beschrieben ist, in anderen Ausführungsformen enthalten sein. Die nachfolgende ausführliche Beschreibung soll daher nicht in einem begrenzenden Sinn aufgefaßt werden und der Rahmen der vorliegenden Erfindung wird nur durch die beiliegenden Ansprüche zusammen mit dem vollen Rahmen von Entsprechungen, zu denen diese Ansprüche berechtigt sind, definiert.
- Übersicht
- Das Verfahren und die Vorrichtung der vorliegenden Erfindung bieten einen Mechanismus zur Durchführung von Compiler-Transformation auf Grundlage von Wertespezialisierung. Ein Programm kann Ausdrücke aufweisen, die die meiste Zeit bestimmte Werte annehmen. Wertespezialisierung richtet sich auf das Austauschen dieser Aus drücke gegen Werte, die wahrscheinlich das Ergebnis dieser Ausdrücke sein werden, wodurch der Steuerungs- und Datenfluß des Programms vereinfacht wird.
- Bei einer Ausführungsform wird ein Programm untersucht, um mögliche Kandidaten für Wertespezialisierung innerhalb des Codes zu identifizieren. Die möglichen Kandidaten können Teilbereiche von Code oder besondere Anweisungen sein (z.B. eine Ladeanweisung, die einen Wert aus dem Speicher in ein Register einliest). Beim Identifizieren von möglichen Kandidaten für Wertespezialisierung können verschiedene Faktoren in Betracht gezogen werden. Beispielsweise muß ein möglicher Kandidat unter Umständen einen vorhersagbaren Steuerungs- und Datenfluß aufweisen und/oder sich auf dem kritischen Weg befinden (d.h. häufig benutzt werden).
- Als nächstes wird für jeden möglichen Kandidaten unter Verwendung von entsprechenden historischen Daten ein Werteprofil definiert. Bei einer Ausführungsform, bei der ein möglicher Kandidat ein Teilbereich ist, umfassen historische Daten Mengen von eingebundenen Werten (live-in-values) und Mengen von externen Werten (live-out-values), die sich aus vorherigen Ausführungen dieses Teilbereichs ergaben. Bei einer weiteren Ausführungsform, bei der ein möglicher Kandidat eine Ladeanweisung ist, umfassen historische Daten Werte, die während vorheriger Ausführungen der Ladeanweisung aus der angegebenen Speicheradresse geladen wurden.
- Auf Grundlage ihrer Werteprofile werden mögliche Kandidaten bewertet und diejenigen mit Werten hoher Wahrscheinlichkeit, die einem vordefinierten Schwellwert genügen, werden einer Gruppe von ausgewählten Kandidaten hinzugefügt. Für jeden der ausgewählten Kandidaten werden seine Werte hoher Wahrscheinlichkeit als spezialisierte Werte bezeichnet. Beispielsweise sind jedem infragekommenden Teilbereich seine häufigsten eingebundenen und häufigsten externen Werte zugeordnet. Jeder infragekommenden Ladeanweisung ist ihr häufigster geladener Wert zugeordnet.
- Weiterhin werden spezialisierte Werte dazu benutzt, optimierte Bereiche zu bilden, die entsprechende ausgewählte Kandidaten enthalten. Bei einer Ausführungsform beginnt die Bildung optimierter Bereiche mit der Abänderung des Ursprungscodes, um für jeden ausgewählten Kandidaten die Verzweigungen zu erstellen, die unter Verwendung der diesen Kandidaten zugeordneten spezialisierten Werte stark in einer Richtung beeinflußt sind. Als nächstes werden Bereiche mit vereinfachtem Steuerungs- und Datenfluß definiert. Bei einer Ausführungsform sind diese Bereiche Fast-Forward-Bereiche (FFR – Fast-Forward regions), die unter Verwendung der beeinflußten Verzweigungen spezialisiert sind. Bei einer Ausführungsform werden FFR durch Aufnahme der beeinflußten Verzweigungen und Austauschen der Verzweigungen mit hoher Wahrscheinlichkeit gegen entsprechende spezialisierte Werte und Außerachtlassung der Verzweigungen mit niedriger Wahrscheinlichkeit spezialisiert. Als Alternative werden FFR durch Verwendung von Setzanweisungen spezialisiert, um die Verzweigungen mit niedriger Wahrscheinlichkeit zu fördern, und, unter Verwendung von spezialisierten Daten, die Verzweigungen mit hoher Wahrscheinlichkeit zu ersetzen. Als nächstes werden die sich ergebenden Bereiche optimiert.
- Danach wird für jeden optimierten Bereich Ursprungscode zur Ausführung auf einem getrennten Ablaufstrang (Thread) vorbereitet, um Richtigkeit zu garantieren, wenn ein Wert mit niedriger Wahrscheinlichkeit während der Ausführung auftritt.
- Dementsprechend erlaubt die Wertespezialisierung dem Compiler die Erstellung von Bereichen mit vereinfachtem Steuerungs- und Datenfluß, wodurch aggressivere Optimierung des Codes durch den Compiler ermöglicht wird. Beispielsweise kann die Verwendung von Wertespeziali sierung die Beseitigung von zusätzlichem ungenutztem Code ergeben (z.B. wenn die Verzweigung mit niedriger Wahrscheinlichkeit entfernt wird, kann der von der Verzweigungsbedingung abhängige Code ebenfalls tot werden). Zusätzlich kann ein vereinfachter Steuerungsfluß die Notwendigkeit für Spekulation und Kompensationscode in vielen Fällen beseitigen und kann die Anzahl von aktiven Variablen und damit Registerdruck verringern. Weiterhin werden große Bereiche für Zeitplanung ausgewählt und ergeben daher einen besseren IPC-Parameter (Instruction per Cycle – Anweisung pro Zyklus). All diese und sonstige Vorteile ergeben eine bedeutsame Verbesserung der Programmleistung.
-
1 ist ein Blockdiagramm einer Ausführungsform eines Rechensystems100 . Das Verarbeitungssystem100 enthält den Prozessor120 und Speicher130 . Der Prozessor120 ist ein Prozessor, der Software kompilieren und den sich ergebenden Objektcode ausführen kann. Der Prozessor120 kann auch ein Prozessor sein, der zur gleichzeitigen spekulativen Ausführung von Code auf zwei Strängen fähig ist. Prozessor120 kann eine beliebige Art von Prozessor sein, der zur Ausführung von Software fähig ist, wie beispielsweise ein Mikroprozessor, ein Digitalsignalprozessor, eine Mikrosteuerung oder dergleichen. Das Verarbeitungssystem100 kann ein Personalcomputer (PC), Großrechner, Hand-PC, tragbarer Rechner, Set-Top-Box oder sonstiges anderes System sein, das Software enthält. - Der Speicher
130 kann eine Festplatte, eine Diskette, ein Direktzugriffspeicher (RAM), ein Nurlesespeicher (ROM), ein Flash-Speicher oder eine sonstige Art von durch den Prozessor120 lesbaren Maschinenmedium sein. Der Speicher130 kann Anweisungen zur Durchführung der Ausführung der verschiedenen Verfahrensausführungsformen der vorliegenden Erfindung speichern. - Der Speicher
130 speichert ein Programm104 , einen Compiler118 zum kompilieren des Programms104 und Erstellen von Objektcode, und einen Puffer102 zum Speichern von historischen Daten bezüglich vorheriger Ausführungen des Objektcodes. Bei einer Ausführungsform enthält der Compiler118 einen Kandidatenwähler106 , einen Rechner108 für spezialisierte Werte, einen Bereichsbildner110 und einen Optimierer118 . - Der Kandidatenwähler
106 ist für die Analyse des Programms104 verantwortlich, um mögliche Kandidaten für Wertespezialisierung zu identifizieren. Bei dieser Analyse werden verschiedene Faktoren in Betracht gezogen. Bei einer Ausführungsform, bei der ein möglicher Kandidat eine Ladeanweisung ist, bestehen die Hauptfaktoren darin, ob sich die Ladeanweisung auf dem kritischen Weg des Kontrollflusses des Programms befindet und ob die Ladeanweisung eine Nurlese-Anweisung ist. Bei einer anderen Ausführungsform, bei der ein möglicher Kandidat ein Teilbereich ist, muß ein qualifizierter Teilbereich mindestens eine Anweisung enthalten, sich auf dem kritischen Weg befinden und Live-In- und Live-Out-Register aufweisen. Zusätzlich sollte ein infragekommender Teilbereich keine Speicheraktualisierungsanweisungen (z.B. Speicheranweisungen) und Funktionsaufrufanweisung enthalten und seine Ladeanweisungen sollten auf Nurlese-Ladeanweisungen usw. begrenzt sein. - Der Rechner
108 für spezialisierte Werte ist dafür verantwortlich, ein Werteprofil für jeden der möglichen Kandidaten auf Grundlage von im Puffer102 gespeicherten entsprechenden historischen Daten zu definieren. Die entsprechenden historischen Daten umfassen Wertemengen bezüglich vorheriger Ausführungen des möglichen Kandidaten. Wenn beispielsweise der mögliche Kandidat ein Teilbereich ist, umfassen die entsprechenden historischen Daten mehrere Wertemengen ihrer Live-In-Register und Live-Out-Register, die während vorheriger Ausführungen des Teilbereichs im Programm104 aufge zeichnet wurden. Wenn der mögliche Kandidat eine Ladeanweisung ist, enthalten die entsprechenden historischen Daten mehrere geladene Werte, die während vorheriger Ausführungen der Ladeanweisungen im Programm104 aufgezeichnet wurden. - Als nächstes benutzt der Rechner
108 für spezialisierte Werte die Werteprofile zur Bestimmung, welche der möglichen Kandidaten für Weiterverarbeitung ausgewählt werden sollten. Bei einer Ausführungsform wird der mögliche Kandidat für Weiterverarbeitung ausgewählt, wenn seine häufigsten historischen Daten ein höheres Häufigkeitsverhältnis als ein vorbestimmter Schwellwert aufweisen, wie ausführlicher unten beschrieben wird. Bei jedem ausgewählten Kandidaten werden dann seine häufigsten Daten als spezialisierte Daten bezeichnet. - Vom Bereichsbildner
110 werden die spezialisierten Daten jedes Kandidaten dazu benutzt, einen Bereich mit vereinfachten Kontroll- und Datenflußgraphen zu bilden. Jeder Bereich kann einen einzigen Kandidaten oder mehrere Kandidaten enthalten. Bei einer Ausführungsform wird ein Fast-Forward-Verfahren wie ausführlicher unten beschrieben zum Bilden der Bereiche benutzt. Als Alternative kann ein beliebiges anderes in der Technik bekanntes Compilerverfahren benutzt werden, wenn dieses Compilerverfahren in der Lage ist, Bereiche mit vereinfachtem Kontroll- und Datenfluß während der Zeit der Programmkompilierung auf Grundlage von entsprechenden Spezialisierungswerten zu bilden. - Sobald die Bereiche gebildet sind, werden sie vom Optimierer
112 optimiert, um einen wirkungsvolleren Code zu erstellen. Weiterhin wird bei einer Ausführungsform vom Bereichsbildner110 jeder optimierte Bereich ausgewertet, um zu bestimmen, ob der Nutzen der Verwendung des optimierten Bereichs größer als der mit der Benutzung des optimierten Bereichs verbundene Aufwand ist. Wenn der Aufwand höher als der Nutzen ist, wird der opti mierte Bereich verworfen. Bei einer Ausführungsform wird nach Beenden der optimierten Bereiche Ursprungscode für jeden optimierten Bereich zur nachfolgenden Ausführung auf einem getrennten Strang vorbereitet, um Richtigkeit zu garantieren, wenn während der Ausführung des Programms ein Wert mit niedriger Wahrscheinlichkeit auftritt. Bei einer Ausführungsform werden der Ursprungscode und ein entsprechender optimierter Bereich gleichzeitig auf zwei spekulativen Strängen ausgeführt. - Bei einer Ausführungsform enthält der Prozessor
120 einen Bereichsprädiktor114 und Pufferspeicher116 . Der Bereichsprädiktor114 ist für die Steuerung der Ausführung der optimierten Bereiche verantwortlich. Vom Pufferspeicher116 werden die während der Ausführung jedes optimierten Bereichs erzeugten Ergebnisse zeitweilig gespeichert. Wenn die Ausführung des Ursprungscodes bestätigt, daß die Ergebnisse des optimierten Bereichs richtig sind, können die Ergebnisse im Pufferspeicher116 (nach Erzeugung der Ergebnisse) zweckgebunden werden. Wenn während der Ausführung des Ursprungscodes ein Wert mit niedriger Wahrscheinlichkeit auftritt, wird die Ausführung des optimierten Bereichs unterbrochen und die Ergebnisse in Pufferspeicher116 werden verworfen. -
2 ist ein Flußdiagramm einer Ausführungsform eines Verfahrens200 zur Durchführung von Compiler-Transformation von Programmcode auf Grundlage von Wertespezialisierung. Der Vorgang kann durch Verarbeitungslogik durchgeführt werden, die Hardware (z.B. Schaltungen, fest zugeordnete Logik usw.), Software (wie die auf einem Universalrechnersystem oder einer fest zugeordneten Maschine gefahrene) oder eine Kombination von beiden umfassen kann. - Bezugnehmend auf
2 beginnt der Vorgang200 mit der Untersuchung des Programms durch die Verarbeitungslo gik, um mögliche Kandidaten für Wertespezialisierung zu identifizieren (Verarbeitungsblock204 ). Die möglichen Kandidaten können Teilbereiche von Code oder besondere Anweisungen (z.B. eine Ladeanweisung, die einen Wert von einem Speicher in ein Register verlegt) sein. Wie ausführlicher oben beschrieben, werden bei der Identifizierung von möglichen Kandidaten für Wertespezialisierung verschiedene Faktoren in Betracht gezogen (z.B. ob ein möglicher Kandidat einen vorhersagbaren Datenfluß aufweist, ob er sich auf einem kritischen Weg befindet usw.). - Beim Verarbeitungsblock
206 wählt die Verarbeitungslogik eine Gruppe von Spezialisierungskandidaten aus den möglichen Kandidaten unter Verwendung von mit möglichen Kandidaten verbundenen Werteprofilen aus. Ein Werteprofil wird unter Verwendung einer entsprechenden Menge von historischen Daten definiert. Bei einer Ausführungsform, bei der ein möglicher Kandidat ein Teilbereich ist, umfassen historische Daten Mengen von Live-In-Werten und Mengen von Live-Out-Werten, die sich aus vorherigen Ausführungen dieses Teilbereichs ergaben. Bei einer anderen Ausführungsform, bei der ein möglicher Kandidat eine Ladeanweisung ist, umfassen historische Daten Werte, die aus der in der Ladeanweisung angegebenen Speicheradresse während vorherigen Ausführungen der Ladeanweisung geladen wurden. - Bei einer Ausführungsform wird jeder mögliche Kandidat auf Grundlage seines Werteprofils ausgewertet und eine Entscheidung getroffen, ob seine häufigsten historischen Daten einen vordefinierten Schwellwert erfüllen (d.h. ob seine Menge von historischen Daten Werte mit hoher Wahrscheinlichkeit umfaßt). Wenn diese Entscheidung positiv ist, wird der mögliche Kandidat einer Gruppe von ausgewählten Kandidaten hinzugefügt. Als Alternative wird der mögliche Kandidat verworfen.
- Beim Verarbeitungsblock
208 identifiziert die Verarbeitungslogik spezialisierte Werte für jeden ausgewählten Kandidaten. Die spezialisierten Werte enthalten einen oder mehrere Werte mit hoher Wahrscheinlichkeit, die aus den historischen Daten ausgewählt werden. Beispielsweise enthalten die spezialisierten Daten für jeden infragekommenden Teilbereich seine häufigsten Live-in-Werte und entsprechenden häufigsten Live-Out-Werte. Die spezialisierten Daten für jede infragekommende Ladeanweisung umfassen ihre häufigsten geladenen Werte. - Bei einer Ausführungsform wird beim Verarbeitungsblock
210 der Ursprungscode jedes Kandidaten von der Verarbeitungslogik in Verzweigungen abgeändert (z.B. durch Durchführung einer Prüfung der Validierung von angenommenen Werten), die stark in einer Richtung vorbelastet sind, unter Verwendung der spezialisierten Werte dieses Kandidaten, wie ausführlicher unten beschrieben wird. - Beim Verarbeitungsblock
212 bildet die Verarbeitungslogik Bereiche, die entsprechende ausgewählte Kandidaten enthalten. Diese Bereiche weisen einen vereinfachten Kontroll- und Datenfluß auf. Bei einer Ausführungsform sind diese Bereiche Fast-Forward-Bereiche (FFR – Fast-Forward regions), die unter Verwendung der vorbelasteten Verzweigungen spezialisiert sind. Bei einer Ausführungsform werden FFR durch Aufnahme der vorbelasteten Verzweigungen und Austauschen der Verzweigungen mit hoher Wahrscheinlichkeit gegen entsprechende spezialisierte Werte und Außerachtlassung der Verzweigungen mit niedriger Wahrscheinlichkeit, wie ausführlicher unten in Verbindung mit3 beschrieben wird, spezialisiert. Als Alternative werden FFR durch Verwendung von Setzanweisungen spezialisiert, um die Verzweigungen mit niedriger Wahrscheinlichkeit zu fördern und, durch Verwendung von spezialisierten Daten, die Verzweigungen mit hoher Wahrscheinlichkeit zu ersetzen, wie ausführlicher unten in Verbindung mit4 beschrieben wird. - Als nächstes werden die sich ergebenden Bereiche optimiert.
- Beim Verarbeitungsblock
214 wird der jedem optimierten Bereich entsprechende Ursprungscode zur Ausführung auf einem getrennten Strang vorbereitet, um Richtigkeit zu garantieren, wenn während der Ausführung ein Wert mit niedriger Wahrscheinlichkeit auftritt. - Danach werden am Verarbeitungsblock
216 die erstellten Verzweigungen, die nicht in irgendeinem der optimierten Bereiche enthalten sind, entfernt, um den entsprechenden Ursprungscode wiederherzustellen. - Fast-Forward-Verfahren
- Das Fast-Forward-Verfahren ist ein Compiler-Verfahren, das zum Bilden von (als Fast-Forward-Bereiche bzw. FFR bezeichneten) spezialisierten Bereichen von häufig ausgeführten Codes durch Außerachtlassen von selten ausgeführten Bedingungen benutzt wird. Die Richtigkeit wird durch Benutzung von spekulativer mehrsträngiger Hardware und Compiler-Transformation zur Behandlung von seltenem Code garantiert. Ein Beispiel von Spezialisierung ist die Beseitigung von Verzweigungen mit niedriger Wahrscheinlichkeit. Das heißt, der Compiler bildet einen FFR, indem er eine Kopie eines Teilkontrollflußgraphen herstellt und Verzweigungen niedriger Wahrscheinlichkeit aus dem FFR beseitigt. Für jeden der im FFR beseitigten Verzweigungen fügt der Compiler entweder eine Setzanweisung in FFR ein oder fügt eine Abbruchanweisung in den Ursprungscode ein. Der Compiler wählt die entsprechende Anweisung durch Vergleichen von mit der Verwendung jeder Anweisung verbundenen Nutzen aus. Der Nutzen sind größtenteils von den mit jeder Anweisung verbundenen geplanten Zyklen abhängig. Beispielsweise ist es nützlicher, eine Abbruchanweisung zu haben, wenn ihr Zyklus zu Beginn der Ausführung vorkommt. Wenn die Ausführung der Anweisung zu einem spä teren Zeitpunkt geplant ist, würde die Benutzung einer Setzanweisung nützlicher sein.
- Der Ursprungscode (und gegebenenfalls Abbruchanweisungen) bilden den Checker-Code. Der Checker-Code wird auf einem Checker genannten, getrennten Strang ausgeführt.
-
3 zeigt die Bildung eines FFR und die Verwendung von Abbruchanweisungen in einem Checker-Code. Bezugnehmend auf3 stellt der Code310 einen Teil eines Quellenprogramms dar. Der Graph312 ist der ursprüngliche Kontrollflußgraph entsprechend dem Code310 . FFR302 wird durch Entfernen von zwei seltenen Verzweigungen B3 und B6 gebildet. Nach der Darstellung in3 weist FFR302 einen vereinfachten Kontroll- und Datenfluß auf und erlaubt dadurch dem Compiler, wirkungsvollere und aggressivere Optimierung durchzuführen. - In der Checker-Code
304 beruht auf dem ursprünglichen Graphen312 mit zwei Abbruchanweisungen306 . Jede Abbruchanweisung306 kann die Ausführung von FFR302 anhalten ("kill FFR302 "), wenn der seltene Code während der spekulativen Ausführung des Checker-Codes304 angetroffen wird. Durch eine Anweisung308 "notice FFR" wird die Ausführung des Checker-Codes304 angehalten. Die Anweisung308 notice FFR wird an diese Stelle des Checker-Codes304 gesetzt, da die nachfolgende Ausführung des Checker-Codes304 keine seltenen Verzweigungen enthält. Die Anweisung308 notice FFR erlaubt die Zweckbestimmung der von FFR402 erzeugten Ergebnisse, wenn sie beendet sind. -
4 zeigt die Bildung eines FFR mit der Verwendung von Setzanweisungen (assert instructions). Bezugnehmend auf4 enthält der FFR402 Setzanweisungen408 und406 , die sich aus seltenen Verzweigungen314 und316 im ursprünglichen Graphen312 ergeben. Eine Setzanweisung kann entweder eine Aussage der entfernten Verzweigung als einzigen Operanden nehmen oder das Quellenregister des entfernten Checkers als Operanden nehmen. Die Setzanweisung zündet, wenn die Aussage wahr wird oder das Quellenregister einen Wert NAT (Not a Thing) aufweist. Eine gezündete Setzanweisung beendet die Ausführung von FFR402 und löst die Ausführung des Checker-Codes304 aus. - Es ist zu bemerken, daß, obwohl
3 und4 Beispiele von Zweigspezialisierung darstellen, die hier gebotene Beschreibung von FFR-Bildung auch auf Wertespezialisierung zutrifft. - Jeder infragekommende FFR ist allgemein ein Bereich mit einem einzigen Eingang und einem einzigen Ausgang, nachdem alle kalten Ränder (cold edges) entfernt worden sind. Ein infragekommender FFR kann interne Verzweigungen (einschließlich von Rückschleifverzweigungen) oder eine Gruppe von Blöcken umfassen, die keine Funktionsaufrufe enthalten und durch bedingungslose Verzweigungen, interne Verzweigungen (einschließlich Rückschleifverzweigungen) verbunden sind. Es ist zu beachten, daß es viele Arten von Codeoptimierung gibt, die wirkungsvoller sind, wenn sie auf Bereiche mit einem einzigen Eingang und einem einzigen Ausgang angewandt werden, als auf Bereiche mit komplizierteren Strukturen.
- Dementsprechend sollte ein infragekommender FFR eine hohe Wahrscheinlichkeit von Vollendung aufweisen (d.h. eine geringe Wahrscheinlichkeit des Auftretens eines Seitenausgangs) und gute Gelegenheiten für Optimierungen.
-
5 ist ein Flußdiagramm einer Ausführungsform eines Vorgangs zum Bilden von FFR. Der Vorgang kann durch Verarbeitungslogik durchgeführt werden, die Hardware (z.B. Schaltungen, fest zugeordnete Logik usw.), Software (wie die auf einem Universalrechnersystem oder einer fest zugeordneten Maschine gefahrenen) oder eine Kombination von beiden umfassen kann. - Bezugnehmend auf
5 beginnt der Vorgang500 beim Verarbeitungsblock504 , wo die Verarbeitungslogik standardmäßige verfügbare Optimierungen (einschließlich von Randprofilierungsrückkopplung und Planung) auf das Programm anwendet, um den bestmöglichen Basiscode vor Auswahl und Bildung von infragekommenden FFR für das Programm bereitzustellen. Basiscode ist der Ursprungscode, der keine FFR enthält. Weiterhin ist zu beachten, daß ein FFR nur dann ausgewählt und gebildet wird, wenn der Bereich eine Verbesserung gegenüber dem Basiscode bieten kann, aus dem der Bereich abgeleitet ist. - Als nächstes definiert die Verarbeitungslogik weiterhin infragekommende Bereiche und bildet FFR aus den infragekommenden Bereichen. Beim Definieren eines infragekommenden Bereichs wird zuerst ein Keimblock für einen infragekommenden Bereich ausgewählt (Verarbeitungsblock
506 ). Ein typischer Keimblock sollte häufig ausgeführt werden, sollte eine hoch vorbelastete Verzweigungsanweisung enthalten, sollte nicht bereits in anderen infragekommenden Bereichen enthalten sein und sollte keine Vorgängerblöcke aufweisen, die als Keimblock ausgewählt werden können. Nach seiner Auswahl wird der Keimblock dupliziert und in einen infragekommenden Bereich erweitert (Verarbeitungsblock508 ). Der infragekommende Bereich sollte eine Anzahl von Anforderungen erfüllen. Beispielsweise sollte der infragekommende Bereich einen Haupteingang und einen Hauptausgang aufweisen, sein Kontrollfluß sollte mit sehr hoher Wahrscheinlichkeit (d.h. hoher Wahrscheinlichkeit der Vollendung) vom Haupteingang zum Hauptausgang reichen, usw. Zusätzlich kann der infragekommende Bereich eine Anzahl von Seitenausgängen aufweisen, aber jeder seiner Seitenausgänge sollte eine sehr niedrige Ausgangswahrscheinlichkeit aufweisen (z.B. <0,5%). - Beim Verarbeitungsblock
510 wird jeder infragekommende Bereich auf Nutzen und Aufwand analysiert (z.B. unter Verwendung von Informationen wie beispielsweise Ausgangswahrscheinlichkeit und Zyklen auf dem kritischen Weg). Bei einer Ausführungsform kann während der Analyse ein Bereich getrimmt werden, um den Aufwand zu verringern. Wenn die Analyse abgeschlossen ist, wird beim Entscheidungskasten514 eine Bestimmung getroffen, ob der Nutzen der Verwendung des infragekommenden Bereichs immer noch niedriger als der Aufwand ist, der sich aus der Verwendung des infragekommenden Bereichs ergeben könnte. Wenn die Bestimmung positiv ist, wird der infragekommende Bereich verworfen (Verarbeitungsblock516 ). Als Alternative wird der Teilkontrollflußgraph des infragekommenden Bereichs dupliziert, um einen infragekommenden FFR zu bilden (Verarbeitungsblock518 ). - Weiterhin wird eine Bestimmung getroffen, ob noch weitere infragekommenden Bereiche analysiert werden müssen (Entscheidungskasten
520 ). Wenn die Bestimmung positiv ist, wird ein nächster infragekommender Bereich analysiert (Verarbeitungsblock522 ) und Blöcke514 –518 werden für den nächsten infragekommenden Bereich durchgeführt. Der obenerwähnte Vorgang wird für jeden verbleibenden infragekommenden Bereich wiederholt. - Sobald alle FFR gebildet sind (d.h. die im Entscheidungskasten
520 getroffene Bestimmung ist positiv), werden sie wie in3 gezeigt mit dem Kontrollflußgraphen mit den Anweisungen Fast-Forward und Warten-Zweckbestimmen verbunden. Danach werden auf jeden der infragekommenden FFR bereichsbasierende Optimierungen angewandt. Weiterhin werden globale Optimierungen auf das gesamte Programm angewandt, indem jeder FFR als eine atomare Operation behandelt wird. Nach Optimierungen wird der eigentliche Nutzen jedes infragekommenden FFR gegenüber dem Ursprungscode verglichen. Ein infragekommender FFR wird verworfen, wenn sein Nutzen nicht den Aufwand überwiegt. - Teilbereichsbasierende Wertespezialisierung
- Wie oben beschrieben, kann der Compiler den Programmcode auf Grundlage von Teilbereichs-Wertespezialisierung transformieren.
6 zeigt die Transformation von Programmcode auf Grundlage von Teilbereichs-Wertespezialisierung. - Bezugnehmend auf
6 wird angenommen, daß die Anordnung A in einem Bereich von Code602 eine Nurlese-Anordnung ist, und eine Schleife604 oft zwanzigmal wiederholt wird und denselben Ausgangswert erzeugt (z.B. Summe = 1000). Wenn das mit diesem Ausgangswert verbundene Häufigkeitsverhältnis einen vordefinieren Schwellwert überschreitet, kann die Schleife604 auf diesen Wert hoher Wahrscheinlichkeit für die Summe (z.B. auf Eintausend) spezialisiert werden. Die Teilbereichs-Wertespezialisierung kann zur Erstellung eines FFR606 benutzt werden. FFR606 ist ein spezialisierter Bereich, da er einen speziellen Wert für den Teilbereich604 benutzt und seine gesamte Berechnung für andere Werte überspringt. Die Berechnung für andere Werte wird in einem Checker-Code608 im Block610 behandelt. Der Checker-Code608 läuft auf einem getrennten Strang ab. Wenn die Ausführung der Schleife604 zwanzigmal wiederholt ist, wird eine Anweisung notice FFR ausgeführt, die die weitere Ausführung des Checker-Codes604 anhält. Wenn die Schleife604 weniger oder mehr als zwanzigmal wiederholt wird, dann wird eine Abbruchanweisung ausgeführt, um FFR606 auszulöschen und der Checker-Code608 fährt mit der Ausführung des in Block610 gezeigten Codes fort. -
7 ist ein Blockdiagramm eines Verfahrens700 zur Bereitstellung von Compiler-Transformation von Programmcode auf Grundlage von Wertespezialisierung eines Teilbereichs. Der Vorgang kann durch Verarbeitungslogik durchgeführt werden, die Hardware (z.B. Schaltungen, fest zugeordnete Logik usw.), Software (wie die auf einem Universalrechnersystem oder einer fest zugeordneten Maschine gefahrene) oder eine Kombination von beiden umfassen kann. - Bezugnehmend auf
7 beginnt der Vorgang700 damit, daß die Verarbeitungslogik ein Werteprofil für einen möglichen Teilbereichskandidaten definiert (Verarbeitungsblock704 ) und bestimmt, ob der mögliche Teilbereichskandidat für Wertespezialisierung qualifiziert ist (Verarbeitungsblock706 ). Das nachfolgende Beispiel zeigt, wie die Qualifizierung eines Teilbereichs R durchgeführt wird. - Für einen infragekommenden Teilbereich R wird angenommen, daß seine Live-In-Register LVI(R) und seine Live-Out-Register LVO(R) sind. Die Menge von Werten im LVI(R) am Eingang des Teilbereichs R sind die Werte der Live-In-Menge. Die Menge von Werten im LVO(R) am Ausgang des Teilbereichs R sind die Werte der Live-Out-Menge. Der Werteprofil besteht aus den folgenden Informationen:
F1(I): die Häufigkeit der Menge von Live-In- und Live-Out-Werten, die die höchste Auftrittswahrscheinlichkeit während der Ausführung des Teilbereichs R aufweisen;
F(R): die Gesamtzahl historischer Mengen von Live-In- und Live-Out-Werten für den Teilbereich R;
VI(R): die Werte der Live-In-Menge mit hoher Wahrscheinlichkeit;
VO(R): die Werte der Live-Out-Menge mit hoher Wahrscheinlichkeit. - Der Teilbereich R wird für Spezialisierung ausgewählt, wenn das Häufigkeitsverhältnis einen vorbestimmten Schwellwert überschreitet. Das heißt, der Teilbereich R wird ausgewählt, wenn F1(R)/F(R)>Schwellwert (z.B. 99%).
- Als nächstes werden im Verarbeitungsblock
708 die spezialisierten Werte für den ausgewählten Teilbereich bestimmt. In dem obenbeschriebenen Beispiel sind die spezialisierten Werte VI(R) und VO(R). Im Verarbeitungsblock710 wird die Wertespezialisierung zur Erstellung von vorbelasteten Verzweigungen für den ausgewählten Teilbereich benutzt. Beispielsweise können für den Teilbereich R aus dem obenbeschriebenen Beispiel die folgenden vorbelasteten Verzweigungen (unter Verwendung eines Sammelvergleichs LVI(R)=VI(R) als Kurzformel für eine Reihe einfacher Vergleiche rl=cl&&r2=c2&&...rk≈ck für LVI(R)={r1, r2, ..., rk} und VI(R)={c1, c2, ..., ck}) erzeugt werden: - Das Häufigkeitsverhältnis von FI(R)/F(R) wird der Verzweigung aus der IF-Anweisung an den spezialisierten Code zugewiesen. Da FI(R)/F(R)>Schwellwert (z.B. 99%), ist diese Verzweigung hoch vorbelastet.
- Die vorbelasteten Verzweigungen werden dann bei der Bildung eines FFR benutzt, der den Teilbereich R enthält (Verarbeitungsblock
710 ). Im Verarbeitungsblock712 wird auch Checker-Code erstellt, der wie in6 dargestellt sowohl Verzweigungen mit hoher Wahrscheinlichkeit als auch Verzweigungen mit niedriger Wahrscheinlichkeit umfaßt. - Ladewertspezialisierung
-
8 zeigt die Transformation von Programmcode auf Grundlage von Ladewertspezialisierung (Load Value Specialization). Bezugnehmend auf8 enthält der Be reich des Codes802 eine Ladeanweisung804 . Es wird angenommen, daß der geladene Wert der Ladeanweisung804 häufig gleich Einhundert ist. Wenn das Häufigkeitsverhältnis der Ladeanweisung804 einen vordefinierten Schwellwert überschreitet, kann der geladene Wert von Einhundert als spezialisierter Wert für die Ladeanweisung804 ausgewählt werden. Unter Verwendung dieses spezialisierten Wertes kann die Ladeanweisung804 in im Bereich806 gezeigte vorbelastete Verzweigungen umgewandelt werden. Auf Grundlage der vorbelasteten Verzweigungen wird ein FFR808 erstellt. Im FFR808 wird die Ladeanweisung eliminiert und der ladeabhängige Code kann früh verlegt werden, um die Leistung zu verbessern. Ein Checker-Code810 enthält so die Verzweigungen mit hoher Wahrscheinlichkeit als auch die Verzweigungen mit niedriger Wahrscheinlichkeit aus dem Code806 . Der Checker-Code810 kann durch herkömmliche Werteweiterleitung optimiert werden, woraus sich ein neuer Checker-Code812 ergibt. - Man beachte, daß, obwohl der spezialisierte Code
806 eine Ladeanweisung vor der Arbeitsverzweigung "IF(v=1000)" enthält, der FFR-Bereich808 nur den spezialisierten Code enthält. Während der FFR-Bildung wurde die Arbeitsverzweigung (durch Einfügen einer Abbruchanweisung im Checker-Code810 ) entfernt und infolgedessen wurde die dieser Verzweigung vorangehende Ladeanweisung ebenfalls eliminiert, da diese Verzweigung der einzige Verwendungszweck des geladenen Wertes war. Wenn (anstatt der Abbruchanweisung) eine Setzanweisung benutzt wird, verbleibt die Ladeanweisung im FFR808 . Durch den FFR werden jedoch der spezialisierte Code und die Ladeanweisung unabhängig voneinander gemacht. Das heißt, der spezialisierte Code kann parallel zu der Ladeanweisung ausgeführt werden. Da die Ladeoperation mehrere Zyklen braucht, kann der dem spezialisierten Code folgende Code ebenfalls vor Abschluß der Ausführung der Ladeanweisung ausgeführt werden, wodurch die Anzahl von Zyklen verringert wird. -
9 ist ein Blockdiagramm eines Verfahrens900 zur Bereitstellung von Compiler-Transformation von Programmcode auf Grundlage von Wertespezialisierung einer Ladeanweisung. Das Verfahren kann durch Verarbeitungslogik durchgeführt werden, die Hardware (z.B. Schaltungen, fest zugeordnete Logik usw.), Software (wie die auf einem Universalrechnersystem oder einer fest zugeordneten Maschine ablaufende) oder eine Kombination von beiden umfassen kann. - Bezugnehmend auf
9 beginnt das Verfahren900 damit, daß die Verarbeitungslogik ein Werteprofil für einen möglichen Ladeanweisungskandidaten definiert (Verarbeitungsblock904 ) und bestimmt, ob der mögliche Ladeanweisungskandidat für Wertespezialisierung qualifiziert ist (Verarbeitungsblock906 ). Im folgenden Beispiel wird dargestellt, wie die Qualifizierung der Ladeanweisung I durchgeführt wird. - Für eine infragekommende Ladeanweisung I wird angenommen, daß das durch das Laden definierte Register LO(I) ist. Das Werteprofil besteht aus den folgenden Informationen:
F1(I): die Häufigkeit eines geladenen Wertes, der die höchste Wahrscheinlichkeit des Auftretens während der Ausführung der Ladeanweisung I aufweist
F(I): die Gesamtzahl historisch geladener Werte für die Ladeanweisung I;
V(I): der geladene Wert mit hoher Wahrscheinlichkeit. - Die Ladeanweisung I wird für Spezialisierung ausgewählt, wenn das Häufigkeitsverhältnis einen vorbestimmten Schwellwert überschreitet. Das heißt, Ladeanweisung I wird ausgewählt, wenn F1(I)/F(I)>Schwellwert (z.B. 99%).
- Als nächstes wird im Verarbeitungsblock
908 der spezialisierte Wert für die ausgewählte Ladeanweisung bestimmt. In dem obenbeschriebenen Beispiel ist der spezialisierte Wert V(I). - Im Verarbeitungsblock
910 wird die Wertespezialisierung zur Erstellung von vorbelasteten Verzweigungen für die ausgewählte Ladeanweisung benutzt. Beispielsweise nehme man an, daß die Speicheradresse in der Ladeanweisung ADDR(I) ist. Auf Grundlage des spezialisierten Wertes können die folgenden vorbelasteten Verzweigungen erstellt werden: - Das Frequenzverhältnis von F1(R)/F(R) wird der Verzweigung aus der IF-Anweisung an den spezialisierten Code zugewiesen. Da F1(R)/F(R)>Schwellwert (z.B. 99%), ist diese Verzweigung hoch vorbelastet.
- Die Verzweigung mit hoher Wahrscheinlichkeit wird dann bei der Bildung eines FFR benutzt, der den Teilbereich R enthält (Verarbeitungsblock
910 ). Am Verarbeitungsblock912 wird auch ein Checker-Code erstellt, der sowohl die Verzweigungen mit hoher Wahrscheinlichkeit als auch die mit niedriger Wahrscheinlichkeit wie in8 dargestellt enthält. - Bei einer Ausführungsform wird, wenn der FFR (z.B. aufgrund seines unzureichenden Nutzens) verworfen wird, der abgeänderte Code wiederhergestellt, um vorbelastete Verzweigungen zu entfernen.
- Es versteht sich, daß die obige Beschreibung beispielhaft und nicht beschränkend sein soll. Dem Fachmann werden bei dem Lesen und Verstehen der obigen Beschreibung viele andere Ausführungsformen offenbar sein. Der Umfang der Erfindung sollte daher unter Bezugnahme auf die beiliegenden Ansprüche zusammen mit dem vollen Umfang von Entsprechungen, zu denen diese Ansprüche berechtigt sind, bestimmt werden.
- Zusammenfassung
- Es werden ein Verfahren und eine Vorrichtung zur Bereitstellung von Compiler-Transformation von Code unter Verwendung von Bereichen mit vereinfachtem Daten- und Kontrollfluß und Wertespezialisierung beschrieben. Bei einer Ausführungsform umfaßt das Verfahren das Identifizieren einer Mehrzahl möglicher Kandidaten für Wertespezialisierung in dem Code, das Auswählen einer Gruppe von Kandidaten aus der Mehrzahl von möglichen Kandidaten auf Grundlage eines mit jedem möglichen Kandidaten verbundenen Werteprofils und das Bestimmen von spezialisierten Daten für jeden ausgewählten Kandidaten unter Verwendung eines entsprechenden Werteprofils. Das Verfahren umfaßt weiterhin das Bilden einer Mehrzahl von optimierten Bereichen auf Grundlage entsprechender spezialisierter Daten. Jeder optimierte Bereich enthält einen oder mehrere ausgewählte Kandidaten.
Claims (30)
- Verfahren mit folgenden Schritten: Identifizieren einer Mehrzahl von möglichen Kandidaten für Wertespezialisierung in Softwarecode; Auswählen einer Gruppe von Kandidaten aus der Mehrzahl möglicher Kandidaten auf Grundlage eines jedem der Mehrzahl von möglichen Kandidaten zugeordneten Werteprofils; Bestimmen von spezialisierten Daten für jeden Kandidaten in der Gruppe von Kandidaten unter Verwendung eines entsprechenden Werteprofils; und Bilden einer Mehrzahl von optimierten Bereichen auf Grundlage entsprechender spezialisierter Daten, wobei jeder der Mehrzahl von optimierten Bereichen einen oder mehrere Kandidaten aus der Gruppe von Kandidaten enthält.
- Verfahren nach Anspruch 1, wobei jeder der Mehrzahl von optimierten Bereichen ein Fast-Forward-Bereich (FFR – Fast Forward Region) ist.
- Verfahren nach Anspruch 2, weiterhin mit dem Schritt des Erstellens eines jedem FFR zugeordneten Checker-Codes zur spekulativen Ausführung auf einem getrennten Strang, wobei der Checker-Code den jedem FFR entsprechenden ursprünglichen Code umfaßt.
- Verfahren nach Anspruch 3, wobei der FFR eine oder mehrere Setzanweisungen (Assert Instructions) zum Abbrechen der Ausführung des FFR und Auslösen der Ausführung des Checker-Codes, wenn andere Daten als die spezialisierten Daten während der Ausführung des FFR auftreten, enthält.
- Verfahren nach Anspruch 3, wobei der Checker-Code eine oder mehrere Abbruchanweisungen (Abort Instructions) zum Anhalten der Ausführung des FFR, wenn andere Daten als die spezialisierten Daten während der Ausführung des Checker-Codes auftreten, enthält.
- Verfahren nach Anspruch 1, wobei jeder der Mehrzahl optimierter Bereiche einen vereinfachten Kontrollfluß aufweist.
- Verfahren nach Anspruch 1, wobei Auswählen der Gruppe von Kandidaten weiterhin folgende Schritte umfaßt: Definieren eines Werteprofils für jeden der Mehrzahl von möglichen Kandidaten auf Grundlage von jedem der Mehrzahl von möglichen Kandidaten zugeordneten historischen Daten; Analysieren jedes Werteprofils zum Suchen nach einer Menge von mit der höchsten Häufigkeit im Werteprofil auftretenden historischen Daten; Bestimmen, ob die höchste Häufigkeit größer als ein vordefinierter Häufigkeitsschwellwert ist; wenn die Häufigkeit größer als der Schwellwert ist, Hinzufügen eines entsprechenden möglichen Kandidaten zu der Gruppe ausgewählter Kandidaten; und wenn die Häufigkeit nicht größer als der Schwellwert ist, Verwerfen des entsprechenden möglichen Kandidaten.
- Verfahren nach Anspruch 1, wobei die spezialisierten Daten jedes Kandidaten eine Menge von mit der höchsten Häufigkeit in einem Werteprofil eines entsprechenden möglichen Kandidaten der Mehrzahl der möglichen Kandidaten auftretenden historischen Daten ist.
- Verfahren nach Anspruch 1, wobei das Bilden einer Mehrzahl von optimierten Bereichen folgende Schritte umfaßt: Abändern von Ursprungscode zur Erstellung einer vorbelasteten Verzweigung für jeden Kandidaten in der Gruppe von Kandidaten unter Verwendung der spezialisierten Daten; Definieren der Mehrzahl von Optimierungsbereichen unter Verwendung entsprechender vorbelasteter Verzweigungen; Vergleichen eines mit der Benutzung jedes der Mehrzahl von Optimierungsbereichen verbundenen Nutzens mit einem mit der Benutzung jedes der Mehrzahl von Optimierungsbereichen verbundenen Aufwand; und Verwerfen jedes der Mehrzahl von Optimierungsbereichen, wenn der Aufwand gegenüber dem Nutzen überwiegt.
- Verfahren nach Anspruch 1, wobei die Gruppe von Kandidaten eine oder mehrere Ladeanweisungen enthält.
- Verfahren nach Anspruch 10, wobei auf jede der Ladeanweisung bezogene spezialisierte Daten ein geladener Wert sind, der mit der größten Häufigkeit in einem mit jeder der Ladeanweisungen verbundenen Werteprofil auftrat.
- Verfahren nach Anspruch 1, wobei die Gruppe von Kandidaten einen oder mehrere Teilbereiche von Code enthält.
- Verfahren nach Anspruch 12, wobei auf jeden der Teilbereiche bezogene spezialisierte Daten die häufigste Menge von Live-In-Werten und die häufigste Menge von Live-Out-Werten in einem jedem der Teilbereiche zugeordneten Werteprofil enthalten.
- Vorrichtung mit folgendem: einem Kandidatenwähler zum Identifizieren einer Mehrzahl möglicher Kandidaten für Wertespezialisierung in Softwarecode; einem Rechner für spezialisierte Werte zur Auswahl einer Gruppe von Kandidaten aus der Mehrzahl möglicher Kandidaten auf Grundlage eines jedem der Mehrzahl von möglichen Kandidaten zugeordneten Werteprofils und zur Bestimmung von spezialisierten Daten für jeden Kandidaten in der Gruppe von Kandidaten unter Verwendung eines entsprechenden Werteprofils; und einem Bereichsbildner zum Bilden einer Mehrzahl optimierter Bereiche auf Grundlage entsprechender spezialisierter Daten, wobei jeder der Mehrzahl optimierter Bereiche einen oder mehrere Kandidaten aus der Gruppe von Kandidaten enthält.
- Vorrichtung nach Anspruch 14, wobei jeder der Mehrzahl optimierter Bereiche ein Fast-Forward-Bereich (FFR – Fast Forward Region) ist.
- Vorrichtung nach Anspruch 14, wobei der Rechner für spezialisierte Werte die Gruppe von Kandidaten durch folgende Schritte auszuwählen hat: Definieren eines Werteprofils für jeden der Mehrzahl möglicher Kandidaten auf Grundlage von jedem der Mehrzahl möglicher Kandidaten zugeordneten historischen Daten, Analysieren jedes Werteprofils zum Suchen nach einem oder mehreren historischen Werten, die mit der höchsten Häufigkeit in dem Werteprofil auftreten, Bestimmen, ob die höchste Häufigkeit größer als ein vordefinierter Häufigkeitsschwellwert ist, Hinzufügen eines entsprechenden möglichen Kandidaten zur Gruppe ausgewählter Kandidaten, wenn die Häufigkeit größer als der Schwellwert ist, und Verwerfen des entsprechenden möglichen Kandidaten, wenn die Häufigkeit nicht größer als der Schwellwert ist.
- Vorrichtung nach Anspruch 14, wobei die spezialisierten Daten jedes Kandidaten ein oder mehrere historische Werte sind, die mit der höchsten Häufigkeit im Werteprofil eines entsprechenden möglichen Kandidaten der Mehrzahl möglicher Kandidaten auftreten.
- Vorrichtung nach Anspruch 14, wobei der Bereichsbildner eine Mehrzahl optimierter Bereiche durch folgende Schritte zu bilden hat: Abändern von Ursprungscode zur Erstellung vorbelasteter Verzweigungen für jeden Kandidaten in der Gruppe von Kandidaten unter Verwendung der spezialisierten Daten; Definieren der Mehrzahl von Optimierungsbereichen unter Verwendung entsprechender vorbelasteter Verzweigungen; Vergleichen eines mit der Benutzung jedes der Mehrzahl von Optimierungsbereichen verbundenen Nutzens mit einem mit der Benutzung jedes der Mehrzahl von Optimierungsbereichen verbundenen Aufwand; und Verwerfen jedes der Mehrzahl von Optimierungsbereiche, wenn der Aufwand gegenüber dem Nutzen überwiegt.
- Vorrichtung nach Anspruch 14, wobei die Gruppe von Kandidaten eine oder mehrere Ladeanweisungen enthält.
- Vorrichtung nach Anspruch 19, wobei auf jede der Ladeanweisung bezogene spezialisierte Daten ein geladener Wert sind, der mit der größten Häufigkeit in einem mit jeder der Ladeanweisungen verbundenen Werteprofil auftrat.
- Vorrichtung nach Anspruch 14, wobei die Gruppe von Kandidaten einen oder mehrere Teilbereiche von Code enthält.
- Vorrichtung nach Anspruch 21, wobei auf jeden der Teilbereiche bezogene spezialisierte Daten die häufigste Menge von Live-In-Werten und die häufigste Menge von Live-Out-Werten in einem jedem der Teilbereiche zugeordneten Werteprofil enthalten.
- System mit folgendem: einem Compiler zum Verbessern der Leistung von Softwarecode durch Auswählen einer Mehrzahl von Kandidaten für Wertespezialisierung aus dem Softwarecode auf Grundlage eines mit jedem der Mehrzahl von Kandidaten verbundenen Werteprofils, durch Bestimmen von spezialisierten Daten für jeden ausgewählten Kandidaten unter Verwendung eines entsprechenden Werteprofils, und durch Bilden einer Mehrzahl von optimierten Bereichen, die eine oder mehrere der ausgewählten Kandidaten abdecken, auf Grundlage von entsprechenden spezialisierten Daten; einem Speicher zum Speichern des Softwarecodes und des Compilers; und einem an den Speicher angekoppelten Prozessor zur Ausführung des Compilers.
- System nach Anspruch 23, wobei jeder der Mehrzahl optimierter Bereiche ein Fast-Forward-Bereich (FFR – Fast Forward Region) ist.
- System nach Anspruch 23, wobei die spezialisierten Daten jedes Kandidaten ein oder mehrere historische Werte sind, die mit der höchsten Häufigkeit in den hi storischen Werten eines entsprechenden möglichen Kandidaten der Mehrzahl möglicher Kandidaten auftreten.
- System nach Anspruch 23, wobei die Gruppe von Kandidaten eine oder mehrere Ladeanweisungen enthält.
- System nach Anspruch 23, wobei die Gruppe von Kandidaten einen oder mehrere Teilbereiche von Code enthält.
- Computerlesbares Medium, das Anweisungen bereitstellt, die bei ihrer Ausführung auf einem Prozessor bewirken, daß der Prozessor die folgenden Operationen durchführt: Identifizieren einer Mehrzahl von möglichen Kandidaten für Wertespezialisierung in Softwarecode; Auswählen einer Gruppe von Kandidaten aus der Mehrzahl möglicher Kandidaten auf Grundlage eines jedem der Mehrzahl von möglichen Kandidaten zugeordneten Werteprofils; Bestimmen von spezialisierten Daten für jeden Kandidaten in der Gruppe von Kandidaten unter Verwendung eines entsprechenden Werteprofils; und Bilden einer Mehrzahl von optimierten Bereichen auf Grundlage entsprechender spezialisierter Daten, wobei jeder der Mehrzahl von optimierten Bereichen einen oder mehrere Kandidaten aus der Gruppe von Kandidaten enthält.
- Computerlesbares Medium nach Anspruch 28, wobei die Gruppe von Kandidaten eine oder mehrere Ladeanweisungen enthält.
- Computerlesbares Medium nach Anspruch 28, wobei die Gruppe von Kandidaten einen oder mehrere Teilbereiche von Code enthält.
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US09/969,962 | 2001-09-29 | ||
US09/969,962 US7039909B2 (en) | 2001-09-29 | 2001-09-29 | Method and apparatus for performing compiler transformation of software code using fastforward regions and value specialization |
PCT/US2002/027985 WO2003029972A2 (en) | 2001-09-29 | 2002-08-30 | Method and apparatus for perfforming compiler transformation of software code using fastforward regions and value specialization |
Publications (1)
Publication Number | Publication Date |
---|---|
DE10297279T5 true DE10297279T5 (de) | 2004-09-23 |
Family
ID=25516231
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
DE10297279T Ceased DE10297279T5 (de) | 2001-09-29 | 2002-08-30 | Verfahren und Vorrichtung zum Durchführen von Compiler-Transformation von Softwarecode unter Verwendung von Fast-Forward-Bereichen und Wertespezialisierung |
Country Status (6)
Country | Link |
---|---|
US (1) | US7039909B2 (de) |
CN (1) | CN1284080C (de) |
AU (1) | AU2002332811A1 (de) |
DE (1) | DE10297279T5 (de) |
GB (1) | GB2398141A (de) |
WO (1) | WO2003029972A2 (de) |
Families Citing this family (37)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6748589B1 (en) | 1999-10-20 | 2004-06-08 | Transmeta Corporation | Method for increasing the speed of speculative execution |
US7257810B2 (en) * | 2001-11-02 | 2007-08-14 | Sun Microsystems, Inc. | Method and apparatus for inserting prefetch instructions in an optimizing compiler |
US7234136B2 (en) * | 2001-11-02 | 2007-06-19 | Sun Microsystems, Inc. | Method and apparatus for selecting references for prefetching in an optimizing compiler |
US7219352B2 (en) * | 2002-04-15 | 2007-05-15 | Microsoft Corporation | Methods and apparatuses for facilitating processing of interlaced video images for progressive video displays |
US7143403B2 (en) * | 2002-06-18 | 2006-11-28 | Hewlett-Packard Development Company, L.P. | System and method for merging control flow paths |
US7065759B2 (en) * | 2002-06-18 | 2006-06-20 | Hewlett-Packard Development Company, L.P. | System and method for assigning basic blocks to computer control flow paths |
US6970985B2 (en) | 2002-07-09 | 2005-11-29 | Bluerisc Inc. | Statically speculative memory accessing |
US7467377B2 (en) * | 2002-10-22 | 2008-12-16 | Intel Corporation | Methods and apparatus for compiler managed first cache bypassing |
US7366932B2 (en) * | 2002-10-30 | 2008-04-29 | Stmicroelectronics, Inc. | Method and apparatus to adapt the clock rate of a programmable coprocessor for optimal performance and power dissipation |
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 |
US7643675B2 (en) * | 2003-08-01 | 2010-01-05 | Microsoft Corporation | Strategies for processing image information using a color information data structure |
US20050114850A1 (en) | 2003-10-29 | 2005-05-26 | Saurabh Chheda | Energy-focused re-compilation of executables and hardware mechanisms based on compiler-architecture interaction and compiler-inserted control |
US7996671B2 (en) | 2003-11-17 | 2011-08-09 | Bluerisc Inc. | Security of program executables and microprocessors based on compiler-architecture interaction |
US8607209B2 (en) * | 2004-02-04 | 2013-12-10 | Bluerisc Inc. | Energy-focused compiler-assisted branch prediction |
EP2365472A3 (de) * | 2004-07-29 | 2013-09-25 | Microsoft Corporation | Bildverarbeitung unter Verwendung linearer Lichtwerte und anderer Bildverarbeitungsoptimierungen |
CA2711718C (en) * | 2004-09-25 | 2015-03-24 | Aware, Inc. | Crc counter normalization |
US20070130114A1 (en) * | 2005-06-20 | 2007-06-07 | Xiao-Feng Li | Methods and apparatus to optimize processing throughput of data structures in programs |
US7774769B2 (en) * | 2005-09-22 | 2010-08-10 | Intel Corporation | Transmitting trace-specific information in a transformed application |
US20070294181A1 (en) * | 2006-05-22 | 2007-12-20 | Saurabh Chheda | Flexible digital rights management with secure snippets |
US20080126766A1 (en) | 2006-11-03 | 2008-05-29 | Saurabh Chheda | Securing microprocessors against information leakage and physical tampering |
DE102007056528B3 (de) * | 2007-11-16 | 2009-04-02 | Seereal Technologies S.A. | Verfahren und Vorrichtung zum Auffinden und Verfolgen von Augenpaaren |
US8561026B2 (en) * | 2007-11-27 | 2013-10-15 | International Business Machines Corporation | Method, apparatus and computer program for facilitating the improvement of a user interface |
US9043774B2 (en) * | 2008-02-12 | 2015-05-26 | William G. Bently | Systems and methods for information flow analysis |
US9317399B2 (en) | 2012-09-28 | 2016-04-19 | Synopsys, Inc. | Policy evaluation based upon dynamic observation, static analysis and code change history |
US10713069B2 (en) | 2008-09-04 | 2020-07-14 | Synopsys, Inc. | Software and hardware emulation system |
US9009689B2 (en) * | 2010-11-09 | 2015-04-14 | Intel Corporation | Speculative compilation to generate advice messages |
US20130031537A1 (en) * | 2011-07-28 | 2013-01-31 | International Business Machines Corporation | Specialized Function Implementation Using Code Frequency Profiling |
US8671397B2 (en) * | 2011-09-27 | 2014-03-11 | International Business Machines Corporation | Selective data flow analysis of bounded regions of computer software applications |
US10365900B2 (en) | 2011-12-23 | 2019-07-30 | Dataware Ventures, Llc | Broadening field specialization |
US9032376B2 (en) | 2012-09-28 | 2015-05-12 | Synopsys, Inc. | Static analysis of computer code to determine impact of change to a code component upon a dependent code component |
US9367314B2 (en) * | 2013-03-15 | 2016-06-14 | Intel Corporation | Converting conditional short forward branches to computationally equivalent predicated instructions |
US9223714B2 (en) | 2013-03-15 | 2015-12-29 | Intel Corporation | Instruction boundary prediction for variable length instruction set |
WO2014154917A1 (es) * | 2013-03-27 | 2014-10-02 | Intel Corporation | Mecanismo para facilitar la fusión dinámica y eficaz de instrucciones informáticas en programas de software |
US9182955B1 (en) * | 2014-06-06 | 2015-11-10 | Microsoft Technology Licensing, Llc | Data-dependent control flow reduction |
WO2016161130A1 (en) * | 2015-04-02 | 2016-10-06 | Dataware Ventures, Llc | Field specialization systems and methods for improving program performance |
KR102472131B1 (ko) * | 2015-09-03 | 2022-11-29 | 삼성전자주식회사 | 쉐이더 프로그램을 생성하는 방법 및 장치 |
US10733099B2 (en) | 2015-12-14 | 2020-08-04 | Arizona Board Of Regents On Behalf Of The University Of Arizona | Broadening field specialization |
Family Cites Families (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5764885A (en) * | 1994-12-19 | 1998-06-09 | Digital Equipment Corporation | Apparatus and method for tracing data flows in high-speed computer systems |
US6170083B1 (en) * | 1997-11-12 | 2001-01-02 | Intel Corporation | Method for performing dynamic optimization of computer code |
JP2924882B1 (ja) * | 1998-01-27 | 1999-07-26 | 日本電気株式会社 | 論理シミュレーションモデルの作成方法および装置ならびに記録媒体 |
US6175948B1 (en) * | 1998-02-05 | 2001-01-16 | Motorola, Inc. | Method and apparatus for a waveform compiler |
US6609248B1 (en) * | 1999-06-30 | 2003-08-19 | Microsoft Corporation | Cross module representation of heterogeneous programs |
US6779114B1 (en) * | 1999-08-19 | 2004-08-17 | Cloakware Corporation | Tamper resistant software-control flow encoding |
US6487716B1 (en) * | 1999-10-08 | 2002-11-26 | International Business Machines Corporation | Methods and apparatus for optimizing programs in the presence of exceptions |
US6968542B2 (en) * | 2000-06-16 | 2005-11-22 | Hewlett-Packard Development Company, L.P. | Method for dynamically identifying pseudo-invariant instructions and their most common output values on frequently executing program paths |
-
2001
- 2001-09-29 US US09/969,962 patent/US7039909B2/en not_active Expired - Fee Related
-
2002
- 2002-08-30 DE DE10297279T patent/DE10297279T5/de not_active Ceased
- 2002-08-30 AU AU2002332811A patent/AU2002332811A1/en not_active Abandoned
- 2002-08-30 CN CN02819243.5A patent/CN1284080C/zh not_active Expired - Fee Related
- 2002-08-30 WO PCT/US2002/027985 patent/WO2003029972A2/en not_active Application Discontinuation
- 2002-08-30 GB GB0407203A patent/GB2398141A/en not_active Withdrawn
Also Published As
Publication number | Publication date |
---|---|
WO2003029972A2 (en) | 2003-04-10 |
WO2003029972A8 (en) | 2004-11-04 |
CN1284080C (zh) | 2006-11-08 |
WO2003029972A3 (en) | 2004-02-26 |
GB2398141A (en) | 2004-08-11 |
US20030066061A1 (en) | 2003-04-03 |
GB0407203D0 (en) | 2004-05-05 |
CN1571954A (zh) | 2005-01-26 |
US7039909B2 (en) | 2006-05-02 |
AU2002332811A1 (en) | 2003-04-14 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
DE10297279T5 (de) | Verfahren und Vorrichtung zum Durchführen von Compiler-Transformation von Softwarecode unter Verwendung von Fast-Forward-Bereichen und Wertespezialisierung | |
EP0689694B1 (de) | Verfahren zur maschinellen erzeugung von nebenläufig bearbeitbaren befehlsgruppen aus einem programm für superskalare mikroprozessoren | |
DE112005003852B4 (de) | Verfahren und Vorrichtung zum Vektorisieren mehrerer Eingabebefehle | |
DE112005002317B4 (de) | Verfahren für die Verarbeitung von Abhängigkeitsketten | |
DE4222776C2 (de) | Parallelverarbeitungseinheit und Verfahren zum Ausführen von Befehlen | |
DE19535084A1 (de) | Verfahren und Vorrichtung zur dynamischen Optimierung von durch ein Computersystem gemanagten Geschäftsprozessen | |
DE19534752A1 (de) | Verfahren und System zum Liefern einer Unterstützung für eine spekulative Ausführung | |
DE10393260T5 (de) | Nachdurchgangs-Binäranpassung für eine auf Software basierende spekulative Vorberechnung | |
DE2234867A1 (de) | Anordnung in datenverarbeitungsanlagen zum steuern der verarbeitung zweier voneinander unabhaengiger programme | |
DE19860062A1 (de) | Verfahren der erzwungenen Registerteilung für die Konstruktion von leistungsarmen VLSI | |
DE19934424A1 (de) | Verfahren, Vorrichtung und Computer-Programm-Produkt zur Optimierung von Registern in einem Stapel unter Verwendung eines Register-Zuordners | |
DE102012224363A1 (de) | Informationsverarbeitungssystem mit Hardware- und Softwarevorablesezugriff | |
DE10306051B4 (de) | Verfahren zum Optimieren der Verarbeitung von Befehlen durch einen Prozessor und Prozessoren zur Durchführung der Verfahren | |
DE102017210126A1 (de) | Parallelisierungsverfahren, Parallelisierungswerkzeug und fahrzeuginterne Vorrichtung | |
DE10256990A1 (de) | Programmcodegenerator und Programm | |
DE102005001679B4 (de) | Mikroprozessor-Einrichtung, und Verfahren zur Branch-Prediktion für conditional Branch-Befehle in einer Mikroprozessor-Einrichtung | |
DE102010053558A1 (de) | Relationales Modellieren zur Leistungsanalyse von Mehrkernprozessoren unter Verwendung virtueller Tasks | |
DE202016008006U1 (de) | Generierung von Integrationstests im Kleinen | |
WO2012062595A1 (de) | Verfahren und vorrichtung zum bewerten von software-parallelisierung | |
WO2007096244A1 (de) | Verfahren zur prozessoptimierung | |
DE102017209285A1 (de) | Parallelization method, parallelization tool, and in-vehicle device | |
EP0468980B1 (de) | Verfahren zur feststellung von durch vektorbefehle eines vektorrechners ersetzbare zyklen innerhalb von befehlsschleifen von für von neumann rechner geschriebene programme | |
EP3433152A1 (de) | Verfahren zur auswertung von umfelddaten in einem steuergerät eines kraftfahrzeugs, steuergerät und kraftfahrzeug | |
DE102022200160A1 (de) | Verfahren zum Optimieren eines Prozesses | |
DE112016007281B4 (de) | Ausführungsvorrichtung für zustandsübergangsdiagramme |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
OP8 | Request for examination as to paragraph 44 patent law |
Ref document number: 10297279 Country of ref document: DE Date of ref document: 20040923 Kind code of ref document: P |
|
8131 | Rejection |