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 PDF

Info

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
Application number
DE10297279T
Other languages
English (en)
Inventor
Youfeng Palo Alto Wu
Li-Ling Cupertino Chen
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.)
Intel Corp
Original Assignee
Intel Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Intel Corp filed Critical Intel Corp
Publication of DE10297279T5 publication Critical patent/DE10297279T5/de
Ceased 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/445Exploiting fine grain parallelism, i.e. parallelism at instruction level
    • 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

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.

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 Rechensystems 100. Das Verarbeitungssystem 100 enthält den Prozessor 120 und Speicher 130. Der Prozessor 120 ist ein Prozessor, der Software kompilieren und den sich ergebenden Objektcode ausführen kann. Der Prozessor 120 kann auch ein Prozessor sein, der zur gleichzeitigen spekulativen Ausführung von Code auf zwei Strängen fähig ist. Prozessor 120 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 Verarbeitungssystem 100 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 Prozessor 120 lesbaren Maschinenmedium sein. Der Speicher 130 kann Anweisungen zur Durchführung der Ausführung der verschiedenen Verfahrensausführungsformen der vorliegenden Erfindung speichern.
  • Der Speicher 130 speichert ein Programm 104, einen Compiler 118 zum kompilieren des Programms 104 und Erstellen von Objektcode, und einen Puffer 102 zum Speichern von historischen Daten bezüglich vorheriger Ausführungen des Objektcodes. Bei einer Ausführungsform enthält der Compiler 118 einen Kandidatenwähler 106, einen Rechner 108 für spezialisierte Werte, einen Bereichsbildner 110 und einen Optimierer 118.
  • Der Kandidatenwähler 106 ist für die Analyse des Programms 104 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 Puffer 102 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 Programm 104 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 Programm 104 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 Bereichsbildner 110 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ädiktor 114 und Pufferspeicher 116. Der Bereichsprädiktor 114 ist für die Steuerung der Ausführung der optimierten Bereiche verantwortlich. Vom Pufferspeicher 116 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 Pufferspeicher 116 (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 Pufferspeicher 116 werden verworfen.
  • 2 ist ein Flußdiagramm einer Ausführungsform eines Verfahrens 200 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 Vorgang 200 mit der Untersuchung des Programms durch die Verarbeitungslo gik, um mögliche Kandidaten für Wertespezialisierung zu identifizieren (Verarbeitungsblock 204). 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 mit 3 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 mit 4 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 auf 3 stellt der Code 310 einen Teil eines Quellenprogramms dar. Der Graph 312 ist der ursprüngliche Kontrollflußgraph entsprechend dem Code 310. FFR 302 wird durch Entfernen von zwei seltenen Verzweigungen B3 und B6 gebildet. Nach der Darstellung in 3 weist FFR 302 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 Graphen 312 mit zwei Abbruchanweisungen 306. Jede Abbruchanweisung 306 kann die Ausführung von FFR 302 anhalten ("kill FFR 302"), wenn der seltene Code während der spekulativen Ausführung des Checker-Codes 304 angetroffen wird. Durch eine Anweisung 308 "notice FFR" wird die Ausführung des Checker-Codes 304 angehalten. Die Anweisung 308 notice FFR wird an diese Stelle des Checker-Codes 304 gesetzt, da die nachfolgende Ausführung des Checker-Codes 304 keine seltenen Verzweigungen enthält. Die Anweisung 308 notice FFR erlaubt die Zweckbestimmung der von FFR 402 erzeugten Ergebnisse, wenn sie beendet sind.
  • 4 zeigt die Bildung eines FFR mit der Verwendung von Setzanweisungen (assert instructions). Bezugnehmend auf 4 enthält der FFR 402 Setzanweisungen 408 und 406, die sich aus seltenen Verzweigungen 314 und 316 im ursprünglichen Graphen 312 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 FFR 402 und löst die Ausführung des Checker-Codes 304 aus.
  • Es ist zu bemerken, daß, obwohl 3 und 4 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 Vorgang 500 beim Verarbeitungsblock 504, 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 (Verarbeitungsblock 508). 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 Entscheidungskasten 514 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 (Verarbeitungsblock 516). Als Alternative wird der Teilkontrollflußgraph des infragekommenden Bereichs dupliziert, um einen infragekommenden FFR zu bilden (Verarbeitungsblock 518).
  • 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 (Verarbeitungsblock 522) und Blöcke 514518 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 in 3 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 Code 602 eine Nurlese-Anordnung ist, und eine Schleife 604 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 Schleife 604 auf diesen Wert hoher Wahrscheinlichkeit für die Summe (z.B. auf Eintausend) spezialisiert werden. Die Teilbereichs-Wertespezialisierung kann zur Erstellung eines FFR 606 benutzt werden. FFR 606 ist ein spezialisierter Bereich, da er einen speziellen Wert für den Teilbereich 604 benutzt und seine gesamte Berechnung für andere Werte überspringt. Die Berechnung für andere Werte wird in einem Checker-Code 608 im Block 610 behandelt. Der Checker-Code 608 läuft auf einem getrennten Strang ab. Wenn die Ausführung der Schleife 604 zwanzigmal wiederholt ist, wird eine Anweisung notice FFR ausgeführt, die die weitere Ausführung des Checker-Codes 604 anhält. Wenn die Schleife 604 weniger oder mehr als zwanzigmal wiederholt wird, dann wird eine Abbruchanweisung ausgeführt, um FFR 606 auszulöschen und der Checker-Code 608 fährt mit der Ausführung des in Block 610 gezeigten Codes fort.
  • 7 ist ein Blockdiagramm eines Verfahrens 700 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 Vorgang 700 damit, daß die Verarbeitungslogik ein Werteprofil für einen möglichen Teilbereichskandidaten definiert (Verarbeitungsblock 704) und bestimmt, ob der mögliche Teilbereichskandidat für Wertespezialisierung qualifiziert ist (Verarbeitungsblock 706). 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 Verarbeitungsblock 710 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:
    Figure 00220001
  • 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 Verarbeitungsblock 712 wird auch Checker-Code erstellt, der wie in 6 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 auf 8 enthält der Be reich des Codes 802 eine Ladeanweisung 804. Es wird angenommen, daß der geladene Wert der Ladeanweisung 804 häufig gleich Einhundert ist. Wenn das Häufigkeitsverhältnis der Ladeanweisung 804 einen vordefinierten Schwellwert überschreitet, kann der geladene Wert von Einhundert als spezialisierter Wert für die Ladeanweisung 804 ausgewählt werden. Unter Verwendung dieses spezialisierten Wertes kann die Ladeanweisung 804 in im Bereich 806 gezeigte vorbelastete Verzweigungen umgewandelt werden. Auf Grundlage der vorbelasteten Verzweigungen wird ein FFR 808 erstellt. Im FFR 808 wird die Ladeanweisung eliminiert und der ladeabhängige Code kann früh verlegt werden, um die Leistung zu verbessern. Ein Checker-Code 810 enthält so die Verzweigungen mit hoher Wahrscheinlichkeit als auch die Verzweigungen mit niedriger Wahrscheinlichkeit aus dem Code 806. Der Checker-Code 810 kann durch herkömmliche Werteweiterleitung optimiert werden, woraus sich ein neuer Checker-Code 812 ergibt.
  • Man beachte, daß, obwohl der spezialisierte Code 806 eine Ladeanweisung vor der Arbeitsverzweigung "IF(v=1000)" enthält, der FFR-Bereich 808 nur den spezialisierten Code enthält. Während der FFR-Bildung wurde die Arbeitsverzweigung (durch Einfügen einer Abbruchanweisung im Checker-Code 810) 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 FFR 808. 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 Verfahrens 900 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 Verfahren 900 damit, daß die Verarbeitungslogik ein Werteprofil für einen möglichen Ladeanweisungskandidaten definiert (Verarbeitungsblock 904) und bestimmt, ob der mögliche Ladeanweisungskandidat für Wertespezialisierung qualifiziert ist (Verarbeitungsblock 906). 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:
    Figure 00250001
  • 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 Verarbeitungsblock 912 wird auch ein Checker-Code erstellt, der sowohl die Verzweigungen mit hoher Wahrscheinlichkeit als auch die mit niedriger Wahrscheinlichkeit wie in 8 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)

  1. 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.
  2. Verfahren nach Anspruch 1, wobei jeder der Mehrzahl von optimierten Bereichen ein Fast-Forward-Bereich (FFR – Fast Forward Region) ist.
  3. 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.
  4. 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.
  5. 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.
  6. Verfahren nach Anspruch 1, wobei jeder der Mehrzahl optimierter Bereiche einen vereinfachten Kontrollfluß aufweist.
  7. 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.
  8. 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.
  9. 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.
  10. Verfahren nach Anspruch 1, wobei die Gruppe von Kandidaten eine oder mehrere Ladeanweisungen enthält.
  11. 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.
  12. Verfahren nach Anspruch 1, wobei die Gruppe von Kandidaten einen oder mehrere Teilbereiche von Code enthält.
  13. 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.
  14. 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.
  15. Vorrichtung nach Anspruch 14, wobei jeder der Mehrzahl optimierter Bereiche ein Fast-Forward-Bereich (FFR – Fast Forward Region) ist.
  16. 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.
  17. 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.
  18. 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.
  19. Vorrichtung nach Anspruch 14, wobei die Gruppe von Kandidaten eine oder mehrere Ladeanweisungen enthält.
  20. 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.
  21. Vorrichtung nach Anspruch 14, wobei die Gruppe von Kandidaten einen oder mehrere Teilbereiche von Code enthält.
  22. 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.
  23. 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.
  24. System nach Anspruch 23, wobei jeder der Mehrzahl optimierter Bereiche ein Fast-Forward-Bereich (FFR – Fast Forward Region) ist.
  25. 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.
  26. System nach Anspruch 23, wobei die Gruppe von Kandidaten eine oder mehrere Ladeanweisungen enthält.
  27. System nach Anspruch 23, wobei die Gruppe von Kandidaten einen oder mehrere Teilbereiche von Code enthält.
  28. 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.
  29. Computerlesbares Medium nach Anspruch 28, wobei die Gruppe von Kandidaten eine oder mehrere Ladeanweisungen enthält.
  30. Computerlesbares Medium nach Anspruch 28, wobei die Gruppe von Kandidaten einen oder mehrere Teilbereiche von Code enthält.
DE10297279T 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 Ceased DE10297279T5 (de)

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)

* Cited by examiner, † Cited by third party
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)

* Cited by examiner, † Cited by third party
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

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