DE102018214541A1 - Verfahren und vorrichtung zum abbilden von single-static-assignment-anweisungen auf einen datenflussgraphen in einer datenflussarchitektur - Google Patents

Verfahren und vorrichtung zum abbilden von single-static-assignment-anweisungen auf einen datenflussgraphen in einer datenflussarchitektur Download PDF

Info

Publication number
DE102018214541A1
DE102018214541A1 DE102018214541.5A DE102018214541A DE102018214541A1 DE 102018214541 A1 DE102018214541 A1 DE 102018214541A1 DE 102018214541 A DE102018214541 A DE 102018214541A DE 102018214541 A1 DE102018214541 A1 DE 102018214541A1
Authority
DE
Germany
Prior art keywords
instructions
variable
phi
data flow
instruction
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.)
Pending
Application number
DE102018214541.5A
Other languages
English (en)
Inventor
Kent Glossop
Yongzhi Zhang
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 DE102018214541A1 publication Critical patent/DE102018214541A1/de
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/43Checking; Contextual analysis
    • G06F8/433Dependency analysis; Data or control flow analysis
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3867Concurrent instruction execution, e.g. pipeline or look ahead using instruction pipelines
    • G06F9/3869Implementation aspects, e.g. pipeline latches; pipeline synchronisation and clocking
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/76Architectures of general purpose stored program computers
    • G06F15/82Architectures of general purpose stored program computers data or demand driven
    • G06F15/825Dataflow computers
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/44Encoding
    • G06F8/443Optimisation
    • G06F8/4434Reducing the memory space required by the program code
    • G06F8/4435Detection or removal of dead or redundant code
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/45Exploiting coarse grain parallelism in compilation, i.e. parallelism between groups of instructions
    • G06F8/451Code distribution
    • G06F8/452Loops
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3877Concurrent instruction execution, e.g. pipeline or look ahead using a slave processor, e.g. coprocessor

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Hardware Design (AREA)
  • Executing Machine-Instructions (AREA)
  • Devices For Executing Special Programs (AREA)

Abstract

Verfahren, Vorrichtungen, Systeme und Herstellungsartikel zum Abbilden eines Satzes von Anweisungen auf einen Datenflussgraphen werden hierin offenbart. Ein beispielhaftes Gerät beinhaltet einen Variablen-Handler zum Modifizieren einer Variablen in dem Satz von Anweisungen. Die Variable wird mehrere Male in dem Satz von Anweisungen verwendet, und der Satz von Anweisungen liegt in Static-Single-Assignment-Form vor. Die Vorrichtung beinhaltet außerdem einen PHI-Handler zum Ersetzen einer in dem Satz von Anweisungen enthaltenen PHI-Anweisung durch einen Satz von Datenflusskontrollanweisungen und einen Datenflussgraph-Generator zum Abbilden des durch den Variablen-Handler und den PHI-Handler modifizierten Satzes von Anweisungen auf einen Datenflussgraphen, ohne dass die Anweisungen aus der Static-Single-Assignment-Form transformiert werden.

Description

  • Diese Erfindung wurde mit staatlicher Unterstützung unter der Vertragsnummer ______ gewährt von ______ gemacht. Der Staat hat bestimmte Rechte an der Erfindung.
  • GEBIET DER OFFENBARUNG
  • Diese Offenbarung betrifft im Allgemeinen Datenflussarchitekturen und im Besonderen Verfahren und Vorrichtungen zum Abbilden von Single-Static-Assignment-Anweisungen auf einen Datenflussgraphen in einer Datenflussarchitektur.
  • HINTERGRUND
  • In den letzten Jahren hat das Bestreben, die Verarbeitungsgeschwindigkeit im Bereich der Informatik zu erhöhen, zu einem verstärkten Interesse an Hardwarebeschleunigern geführt. Hardwarebeschleuniger beinhalten Einheiten von Hardware, die ausgebildet sind, um spezielle Rechenfunktionen durchzuführen. Die Hardware-Einheiten sind in einer Weise miteinander verbunden, die es erlaubt, einen gewünschten Satz von Berechnungen für einen Datensatz durchzuführen. In vielen Fällen sind die Hardware-Einheiten in einer Weise miteinander verbunden, die es erlaubt, eine rechenintensive Verarbeitung bei mehreren Datensätzen gleichzeitig durchzuführen. Die daraus resultierende Nebenläufigkeit kann beeindruckende Verarbeitungsgeschwindigkeiten ergeben, die der Verarbeitungsgeschwindigkeit, die mittels Universalprozessoren, die Softwareanweisungen ausführen, erreichbar ist, gleichkommen und sie teilweise übertreffen.
  • Figurenliste
    • 1 ist ein Blockdiagramm eines beispielhaften Verarbeitungssystems einschließlich eines beispielhaften Compilers.
    • 2 ist ein Blockdiagramm einer beispielhaften Implementierung eines beispielhaften Mapping-Managers des beispielhaften Compilers von 1.
    • 3 ist ein erster Satz von beispielhaften Anweisungen und ein zweiter Satz von beispielhaften Anweisungen, die durch den beispielhaften Loop-Handler des beispielhaften Mapping-Managers von 2 modifiziert werden sollen.
    • 4 ist ein beispielhafter Kontrollabhängigkeitsgraph, der einen vollständigen Kontrollabhängigkeitsbaum enthält.
    • 5 ist ein Ablaufdiagramm, das für beispielhafte maschinenlesbare Anweisungen repräsentativ ist, die ausgeführt werden können, um den beispielhaften Mapping-Manager von 1 und/oder 2 zu implementieren.
    • 6 ist ein Ablaufdiagramm, das für beispielhafte maschinenlesbare Anweisungen repräsentativ ist, die ausgeführt werden können, um den beispielhaften Variablen-Handler von 2 zu implementieren.
    • 7 ist ein Ablaufdiagramm, das für beispielhafte maschinenlesbare Anweisungen repräsentativ ist, die ausgeführt werden können, um den beispielhaften PHI-Handler von 2 zu implementieren.
    • 8 ist ein Blockdiagramm einer beispielhaften Verarbeitungsplattform, die strukturiert ist, um die Anweisungen von 5, 6 und 7 zum Implementieren des beispielhaften Mapping-Managers von 1 und/oder 2 auszuführen.
  • Die Figuren sind nicht maßstabsgetreu. Soweit möglich, werden in einer Zeichnung bzw. den Zeichnungen und begleitenden schriftlichen Beschreibung durchgehend dieselben Bezugszeichen für dieselben oder gleiche Teile verwendet.
  • DETAILLIERTE BESCHREIBUNG
  • Hardwarebeschleuniger werden häufig verwendet, um hohe Verarbeitungsgeschwindigkeiten zu erreichen, die den Verarbeitungsgeschwindigkeiten, die mittels Universalprozessoren, die Softwareanweisungen ausführen, erreichbar sind, gleichkommen und sie sogar übertreffen können. Im Unterschied zu Universalprozessoren verwenden Hardwarebeschleuniger anstelle einer Kontrollflussarchitektur eine Datenflussarchitektur. Dadurch werden die Hardwarebeschleuniger (hierin auch als Datenflussmaschinen bezeichnet) mittels Datenflussgraphen statt konventioneller Softwareanweisungen programmiert. Daher werden konventionelle Softwareanweisungen in einen Datenflussgraphen konvertiert, bevor sie auf einer Datenflussmaschine ausgeführt werden können.
  • Ein Datenflussgraph beinhaltet einen Satz von Funktionseinheiten und die Funktionseinheiten verbindende Kanäle. Jede Variable (in einem gleichwertigen Softwareprogramm) wird einem Kanal zugeordnet. Ein Datenflussgraph wird nicht verwendet, um einen Softwarecode darzustellen, der einer Variablen mehr als einen einzigen Wert zuweist. Daher wird ein Compiler, der ausgebildet ist, um konventionelle Softwareanweisungen in einen Datenflussgraphen zu konvertieren, die Softwareanweisungen zunächst in eine Form konvertieren, die als Static Single Assignment (SSA) bezeichnet wird. Allerdings kann Software in SSA-Form nicht direkt in einen Datenflussgraphen konvertiert werden. Daher transformiert ein herkömmlicher Compiler, nachdem er die Software in SSA-Form konvertiert hat, die SSA-formatierte Software aus der SSA-Form, bevor der Compiler einen Datenflussgraphen zur Ausführung durch die Datenflussmaschine erzeugt. Leider sind Verfahren, die von Compilern zum Transformieren von Software aus der SSA-Form verwendet werden, fehleranfällig und für einige spezielle Architekturen nicht geeignet.
  • 1 ist ein Blockdiagramm eines beispielhaften Verarbeitungssystems 100, einschließend einen beispielhaften Compiler 102. Der Compiler 102 kompiliert einen Satz Softwareanweisungen, die in einem beispielhaften Speicher für Softwareanweisungen 104 zur Ausführung durch eine beispielhafte Datenflussmaschine 106 gespeichert sind. In einigen Beispielen beinhaltet der Compiler 102 einen beispielhaften Static-Single-Assignment(SSA)-Codewandler 108. Der SSA-Codewandler 108 konvertiert die im Speicher für Softwareanweisungen 104 gespeicherten Anweisungen in ein SSA-Format und speichert die Anweisungen im SSA-Format in einem beispielhaften SSA-Speicher 110. Ein beispielhafter Mapping-Manager 112 ordnet die SSA-formatierten Anweisungen einem Datenflussgraphen zu. In einigen Beispielen speichert der Mapping-Manager 112 den Datenflussgraphen in einem beispielhaften Datenflussgraph-Speicher 114 und/oder liefert den Datenflussgraphen an die Datenflussmaschine 106 zur Ausführung.
  • 2 ist ein Blockdiagramm einer beispielhaften Implementierung des beispielhaften Mapping-Managers 112 von 1. In einigen Beispielen beinhaltet der Mapping-Manager 112 einen beispielhaften Anweisungsanalysator 202, einen beispielhaften Variablen-Handler 204 und einen beispielhaften PHI-Handler 206. In einigen Beispielen beinhaltet der beispielhafte Anweisungsanalysator 202 einen beispielhaften Variablenidentifikator 208, einen beispielhaften Variablen-Anweisungsidentifikator 210, einen beispielhaften Schleifenidentifikator 212 und einen beispielhaften PHI-Identifikator 214. Der Anweisungsanalysator 202 überprüft die im SSA-Codespeicher 110 abgelegten SSA-formatierten Anweisungen zum Identifizieren von: 1) ersten Informationen, die vom Variablen-Handler 204 zu verwenden sind, und 2) zweiten Informationen, die vom PHI-Handler 206 zu verwenden sind.
  • Der beispielhafte Variablen-Handler 204 beinhaltet einen beispielhaften Identifikator des frühesten Auftretens 216, einen beispielhaften Variablen-Umbenenner 218, einen beispielhaften Variablen-Kopierer 220 und einen beispielhaften Loop-Handler 222. Der beispielhafte Loop-Handler 222 beinhaltet einen beispielhaften Anweisungsgenerator 226 und einen beispielhaften Anweisungsinserter 228. Wie nachstehend ausführlicher beschrieben, verwendet der Variablen-Handler 204 die erste Information, um sicherzustellen, dass Variable im Code jeweils nur ein einziges Mal verwendet werden, und um ferner sicherzustellen, dass während jedes Durchlaufs der Schleife ein Wert für eine Schleifenvariable erzeugt wird. Der PHI-Handler 206 verwendet die zweite Information, um die PHI-Anweisung Knoten/Funktionen eines Datenflussgraphen zuzuordnen.
  • Der PHI-Handler 206 beinhaltet einen beispielhaften Kontrollabhängigkeitsgraph-Generator 230, einen beispielhaften Baum-Traverser 232, einen beispielhaften Auswahlgenerator 234 und einen beispielhaften Prädikatgenerator 236.
  • Weiter in Bezug auf 2 erfordert eine Static-Single-Assignment(SSA)-Formatierung, dass jede in einem Satz Softwareanweisungen enthaltene Variable nur ein einziges Mal definiert wird. Dieses Erfordernis ist bekannt als die Eigenschaft „einmalige Definition“. Eine Variable wird letztlich zu einem Kanal in dem vom Mapping-Manager 112 zu erstellenden Datenflussgraphen, und jede Verwendung der Variablen in den Anweisungen wird dann einen separaten Verbrauchskanal in dem Datenflussgraphen darstellen. Daher verlangt der Datenflussgraph zusätzlich zur Eigenschaft „einmalige Definition“ auch die Eigenschaft mit der Bezeichnung „einmalige Verwendung“. Als solche erfüllt ein beispielhaftes Softwareprogramm mit dem folgenden Satz von drei Anweisungen: 1) x = a+b; 2) y = x+c; und 3) z = x+d nicht die Eigenschaft der einmaligen Verwendung, da die Variable „x“ dreimal verwendet wird (zum Beispiel erscheint die Variable „x“ in jeder der drei Anweisungen). Daher modifiziert der Mapping-Manager 112 die Anweisungen so, dass Mehrfachverwendungen der Variablen „x“ ausgeschaltet werden. Ebenso wird eine beliebige Variable, die in einer Schleife verwendet, aber außerhalb dieser Schleife definiert wird, durch die Anweisungen ausdrücklich wiederholt (zum Beispiel erzeugen die Anweisungen für jeden Schleifendurchlauf einen Wert für die Variable), so dass die Anweisungen erfolgreich zum Erzeugen eines Datenflussgraphen verwendet werden können.
  • Weiter in Bezug auf 2 analysiert der beispielhafte Variablenidentifikator 208 des beispielhaften Anweisungsanalysators 202 die im SSA-Codespeicher 104 abgelegten Softwareanweisungen, um Variablen in den Softwareanweisungen zu identifizieren, die mehrfach verwendet werden. Beispielhaft identifiziert der Variablenidentifikator 208 beim Analysieren der drei Anweisungen: 1) x = a+b; 2) y = x+c; und 3) z = x+d die Variable „x“ als mehr als einmal verwendet. Darüber hinaus identifiziert der beispielhafte Variablen-Anweisungsidentifikator 210 die im SSA-Codespeicher 104 abgelegten Anweisungen, die die identifizierte Variable (zum Beispiel die Variable „x“) verwenden. Somit identifiziert der Variablen-Anweisungsidentifikator 210 beim Analysieren der drei Anweisungen: 1) x = a+b; 2) y = x+c; und 3) z = x+d alle drei Anweisungen als Anweisungen, die die Variable „x“ verwenden. In einigen Beispielen liefern der Variablenidentifikator 208 und der Variablen-Anweisungsidentifikator 210 Informationen zum Identifizieren der identifizierten Variablen und der identifizierten Anweisungen an den Variablen-Handler 204.
  • Wie oben dargelegt, verwendet der beispielhafte Variablen-Handler 204 in einigen Beispielen erste Informationen (zum Beispiel die identifizierte Variable und die identifizierten Anweisungen), die vom Anweisungsanalysator 202 bereitgestellt wurden, um sicherzustellen, dass jede Variable im SSA-Code nur ein einziges Mal verwendet wird. Um dies zu erreichen, identifiziert der beispielhafte Identifikator des frühesten Auftretens 218 die früheste (zuerst auszuführende) Anweisung des Satzes von identifizierten Anweisungen, die die Variable beinhalten. In dem beispielhaften Satz von drei Anweisungen ist die am frühesten auftretende Anweisung die erste Anweisung (zum Beispiel x = a + b). Darüber hinaus benennt der beispielhafte Variablen-Umbenenner 218 die Variable „x“ um, die in den vom beispielhaften Variablen-Anweisungsidentifikator 210 bereitgestellten identifizierten Anweisungen mit Ausnahme der am frühesten auftretenden identifizierten Anweisung erscheint. Wie in der Anwendung auf die drei beispielhaften Anweisungen lässt der Variablen-Umbenenner 218 die erste Anweisung unangetastet (benennt zum Beispiel die identifizierte Variable nicht um), benennt die Variable „x“ in der zweiten Anweisung um in „x1“ und benennt die Variable „x“ in der dritten Anweisung um in „x2“. Nach der Umbenennungsoperation haben die beispielhaften drei Anweisungen die Form: 1) x = a+b; 2) y = x1+c; und 3) z = x2+d.
  • Darüber hinaus veranlasst der beispielhafte Variablen-Kopierer 220 des beispielhaften Variablen-Handlers 204, dass der Wert der identifizierten Variablen, der in der am frühesten auftretenden Anweisung erzeugt wird, in später auftretende Anweisungen kopiert wird, die die Variable „x“ verwenden. In einigen Beispielen veranlasst der Variablen-Kopierer 220, dass der Wert der identifizierten Variablen, der in der am frühesten auftretenden Anweisung erzeugt wird, in später auftretende Anweisungen kopiert wird, indem er nach der am frühesten auftretenden Anweisung und vor die später auftretenden Anweisungen eine „Kopieranweisung“ einfügt. In einigen Beispielen beinhaltet eine „Kopieranweisung“ zwei oder mehr Argumente. Ein erstes Argument stellt eine Quelle des zu kopierenden Wertes dar, und das eine andere Argument oder die mehreren anderen Argumente stellt bzw. stellen einen Zielort dar, in den der Wert kopiert werden soll. Wie in der Anwendung auf die drei beispielhaften Anweisungen fügt der Variablen-Kopierer 220 eine Anweisung „copy x, x1, x2“ (Kopieren von x, x1, x2) ein, um zu bewirken, dass ein Wert der Variablen „x“ auf die Werte für eine Variable „x1“ und eine Variable „x2“ kopiert wird und als diese Werte verwendet wird. Im Ergebnis der Kopieranweisung wird der Wert der Variablen „x“ als der Wert der Variablen „x1“ und „x2“ verwendet. Somit wird der Wert der identifizierten Variablen, der in der am frühesten auftretenden Anweisung erzeugt wird, in später auftretende Anweisungen kopiert, die die umbenannten Variablen „x1“ und „x2“ verwenden.
  • Nachdem der beispielhafte Variablen-Kopierer 220 den Wert der Variablen „x“ in die umbenannten Versionen der Variablen „x“ (zum Beispiel in die Variablen „x1“ und „x2“) kopiert, veranlasst der beispielhafte Loop-Handler 222, dass die SSA-Anweisungen modifiziert werden. In einigen Beispielen beinhaltet der beispielhafte Loop-Handler 222 einen beispielhaften Anweisungsgenerator 226 und einen beispielhaften Anweisungsinserter 228. Die vom beispielhaften Loop-Handler 222 durchgeführten Modifikationen bewirken, dass die Variablen, die innerhalb einer Schleife verwendet, aber außerhalb der Schleife definiert werden, entsprechenden Werte für jeden Schleifendurchlauf wiederholt erzeugt werden. Die Werte für diese Variablen müssen wiederholt erzeugt werden, da, sobald der einem Schleifendurchlauf entsprechende Wert erzeugt und von Hardware verbraucht ist, ein anderer Wert zum Verbrauch während des nächsten Schleifendurchlaufs (oder am Schleifenausgang, je nachdem, wie die Variable innerhalb der Schleife wirkt) erzeugt werden muss.
  • In einigen Beispielen überprüft der beispielhafte Schleifenidentifikator 212 des beispielhaften Anweisungsanalysators 202 die SSA-Anweisung und identifiziert Schleifen, die Variablenreferenzen beinhalten. In einigen Beispielen identifiziert der Schleifenidentifikator 212 auch einen Schleifenkopf und einen Schleifen-Latch für jede identifizierte Schleife. Der Schleifenidentifikator 212 liefert Informationen über die identifizierten Schleifen an den Anweisungsgenerator-Loop-Handler 222.
  • Der Anweisungsgenerator 226 verwendet die Informationen, um Datenflussanweisungen zu erzeugen, die in die identifizierten Schleifen einzufügen sind. In einigen Beispielen erzeugt der Anweisungsgenerator 226 eine PICK-Anweisung für jede einzelne der Schleifen. Die PICK-Anweisung, die sich als „x = PICK b, x1, x2“ darstellen lässt, ist einer C-Codeanweisung gleichwertig: „x = b? x1 : x2“. Die PICK-Anweisung veranlasst, dass der Wert der Variablen „x“ an „x1“ gesendet wird, wenn der Wert der Variablen „b“ falsch ist. Wenn der Wert der Variablen „b“ nicht falsch ist, wird der Wert der Variablen „x“ an die Variable „x2“ gesendet. Der Anweisungsinserter 222 fügt die PICK-Anweisung am Schleifenkopf ein und veranlasst, dass der Wert der Variablen „x“ von außerhalb der Schleife (im Falle des ersten Durchlaufs) aufgenommen oder von einem durch den Schleifenkörper erzeugten Wert aufgenommen wird.
  • In einigen Beispielen erzeugt der Anweisungsgenerator 226 auch eine SWITCH-Anweisung für jede der Schleifen. Die für eine Schleife erzeugte SWITCH-Anweisung wird am Schleifen-Latch platziert und erhält einen Wert für die Variable und, auf Grundlage einer Schleifenausgang-Bedingung, vermittelt (sendet) entweder den Wert an den Schleifenkopf zum Verbrauch durch die neu eingefügte PICK-Anweisung oder ignoriert den Wert. In einigen Beispielen wird die SWITCH-Anweisung als „x1, x2 = SWITCH b, x“ dargestellt.
  • 3 zeigt zwei beispielhafte Sätze von Anweisungen 300, die eine Schleife darstellen, die mit einer Variablen „V0“ läuft. Ein erster Satz von Anweisungen 302A beinhaltet erste (nicht modifizierte) Loop-Anweisungen 304A und der zweite Satz von Anweisungen 302B beinhaltet zweite (modifizierte) Loop-Anweisungen 304B. Der erste Satz von Anweisungen 302A beinhaltet eine erste Non-Loop-Anweisung (Anweisung außerhalb der Schleife) 308A, in der der Wert von „V0“ als gleich „f(a)“ definiert ist. Die ersten Loop-Anweisungen 304A beinhalten eine beispielhafte erste Loop-Anweisung 310A entsprechend dem Schleifeneingang, eine beispielhafte zweite Loop-Anweisung 312A, bei der die Variable „X“ als gleich dem Wert von „V0“ definiert ist, und eine beispielhafte dritte Loop-Anweisung 314A entsprechend dem Schleifenausgang. Eine beispielhafte zweite Non-Loop-Anweisung 316A folgt dem Ausgang der ersten Loop-Anweisungen 304A.
  • Der zweite Satz von Anweisungen 302B ist eine Version des ersten Satzes von Anweisungen 302A, die durch den Loop-Handler 222 modifiziert wurden. Der zweite Satz von Anweisungen 302B beinhaltet eine erste Non-Loop-Anweisung (Anweisung außerhalb der Schleife) 308B, in der der Wert von „V0“ als gleich „f(a)“ definiert ist. Die zweiten Loop-Anweisungen 304B beinhalten eine beispielhafte Loop-Anweisung 310B entsprechend dem Schleifeneingang, eine beispielhafte zweite Loop-Anweisung 312B, die durch den Loop-Handler 222 erzeugt und eingefügt wird, eine beispielhafte dritte Loop-Anweisung 314B, bei der die Variable „X“ als gleich dem Wert von „V0“ definiert ist, eine beispielhafte vierte Loop-Anweisung 316B, die durch den Loop-Handler 222 erzeugt und eingefügt wird, und eine beispielhafte fünfte Loop-Anweisung 318B entsprechend dem Schleifenausgang. Eine beispielhafte zweite Non-Loop-Anweisung 320B folgt auf die zweiten Loop-Anweisungen 304B.
  • Der erste und der zweite Satz von Anweisungen 302A, 302B werden hierin verwendet, um die Ergebnisse der vom beispielhaften Loop-Handler 222 durchgeführten Operationen zu veranschaulichen. Wie gezeigt, beinhaltet der zweite Satz von Anweisungen 302B Loop-Anweisungen, die durch den Loop-Handler 222 erzeugt und eingefügt worden sind. Beispielsweise ist die zweite Loop-Anweisung 312B eine PICK-Anweisung, „V = PICK b1, V0, V1“, und ist die vierte Loop-Anweisung 316B ist eine SWITCH-Anweisung, „V1, %ign = SWITCH b2, V“. Wie vorstehend beschrieben, veranlasst die PICK-Anweisung, dass der außerhalb der Schleife erzeugte Wert von „V“ im ersten Schleifendurchlauf verwendet wird, und veranlasst, dass der innerhalb des Schleifenkörpers erzeugte Wert von „V“ für spätere Durchläufe verwendet wird. Hingegen veranlasst die SWITCH-Anweisung, dass der Wert für die Variable „V1“ als der Wert für die Variable „V“ am Beginn des nächsten Schleifendurchlaufs definiert wird.
  • Erneut in Bezug auf 3 wird zusätzlich zu dem mit dem SSA-Code betriebenen beispielhaften Variablen-Handler 204 auch der beispielhafte PHI-Handler 206 mit dem SSA-Code betrieben. In einigen Beispielen ist der PHI-Handler 206 ausgebildet, um alle im SSA-Code enthaltenen PHI-Anweisungen zu ersetzen. PHI-Anweisungen werden in einem SSA-formatierten Code verwendet, wenn mehr als eine Variablendefinition einen einzigen Knoten erreicht. Unter solchen Umständen ist der Wert, der der Variablen bei diesem Knoten zugewiesen werden soll, von der Flusssteuerung der codierten Anweisungen abhängig, die beispielsweise mittels Verzweigungsanweisungen vorgegeben werden, die zu dem Knoten hinführen. Eine beispielhafte PHI-Anweisung kann die Form „x = PHI (x3, B3, x4, B4, x5, B5, x6, B6)“ annehmen. In der beispielhaften PHI-Anweisung bezieht sich die Variable „x3“ auf den der Variablen „x3“ beim PHI-Eingabeblock B3 zugewiesenen Wert, bezieht sich die Variable „x4“ auf den der Variablen „x4“ beim PHI-Eingabeblock B4 zugewiesenen Wert, bezieht sich die Variable „x5“ auf den der Variablen „x5“ beim PHI-Eingabeblock B5 zugewiesenen Wert und bezieht sich die Variable „x6“ auf den der Variablen „x6“ beim PHI-Eingabeblock B6 zugewiesenen Wert. Somit kann auf Grundlage der PHI-Anweisung „x“ ein beliebiger der Werte von „x3“, „x4“, „x5“ und „x6“ zugewiesen werden, je nachdem, welcher PHI-Eingabeblock zu der PHI-Anweisung führt.
  • Auch in Bezug auf 4 veranschaulicht ein beispielhafter Kontrollabhängigkeitsgraph 400 einen Kontrollabhängigkeitsbaum, der SSA-Anweisungen darstellt, die die PHI-Anweisung beinhalten. Der Kontrollabhängigkeitsgraph 400 beinhaltet einen beispielhaften Knoten B0, einen beispielhaften Knoten B1, einen beispielhaften Knoten B2, einen beispielhaften Knoten B3, einen beispielhaften Knoten B4, einen beispielhaften Knoten B5, einen beispielhaften Knoten B6 und einen beispielhaften Knoten B7. Wie veranschaulicht, führt der Knoten B0 zu einer Abzweigung entweder zu Knoten B1 oder zu Knoten B2, führt der Knoten B1 zu einer Abzweigung entweder zu Knoten B3 oder zu Knoten B4, führt der Knoten B2 zu einer Abzweigung entweder zum Knoten B5 oder zum Knoten B6 und weist der Knoten B7 einer Variablen „x“ auf Grundlage eines der Knoten B3, B4, B5 oder B6 einen Wert zu. Somit wird der vor dem Knoten B7 (der einen beliebigen der Knoten B3, B4, B5 und B6 einschließen kann) ausgeführte Knoten den der Variablen „x“ am Knoten B7 zuzuweisenden Wert vorgeben. Herkömmliche Verfahren zum Konvertieren von SSA-Code in einen Datenflussgraphen zur Ausführung durch eine Datenflussmaschine beinhalten keine Möglichkeit zum Senken eines PHI-Knotens direkt auf einen Datenflussgraphen. Vielmehr erfordern herkömmliche Verfahren ein Transformieren des SSA-Codes aus dem SSA-Format, um die PHI-Knoten zu eliminieren, bevor die Anweisungen einem Datenflussgraphen zugeordnet werden können. Im Gegensatz dazu behandelt der PHI-Handler 206 des Mapping-Managers 112 von 2 die im SSA-formatierten Code enthaltenen PHI-Anweisungen in einer Weise, die es ermöglicht, dass die PHI-Knoten direkt auf den Datenflussgraphen gesenkt werden.
  • In einigen Beispielen ordnet der beispielhafte PHI-Handler 26 PHI-Anweisungen im SSA-Code einem Datenflussgraphen zu, indem er die PHI-Anweisung einem Baum von PICK-Anweisungen zuordnet. In einigen solchen Beispielen analysiert der beispielhafte PHI-Identifikator 214 des beispielhaften Anweisungsanalysators 202 den SSA-Code, um alle im SSA-Code enthaltenen Instanzen von PHI-Anweisungen zu identifizieren. Wenn eine PHI-Anweisung identifiziert ist, dann liefert der PHI-Identifikator 214 Informationen über die PHI-Anweisung an den beispielhaften Kontrollabhängigkeitsgraph-Generator 230. Der Kontrollabhängigkeitsgraph-Generator 230 verwendet die Informationen von dem PHI-Identifikator 214 sowie den SSA-Code, um einen Kontrollabhängigkeitsgraphen entsprechend dem PHI-Knoten zu erzeugen. Der Kontrollabhängigkeitsgraph veranschaulicht die Knoten, von denen die PHI-Knoten für Eingaben abhängig ist (siehe beispielsweise den beispielhaften Kontrollabhängigkeitsbaum 400 von 4). Als Nächstes durchläuft der beispielhafte Baum-Traverser 232 den Kontrollabhängigkeitsbaum, um die Kontrollabhängigkeitseltern des PHI-Knotens zu identifizieren. Vorausgesetzt, der Kontrollabhängigkeitsgraph bildet einen vollständigen Baum, beginnt der Baum-Traverser 232 an einem Basiseingabeknoten des PHI-Knotens und durchläuft den Kontrollabhängigkeitsbaum aufwärts, bis der entsprechende Wurzelknoten erreicht wird.
  • In einigen Beispielen wird für jedes Kontrollabhängigkeitselternteil, das während des Durchlaufs bis zum Stammknoten aufgefunden wird, eine PICK-Anweisung erzeugt. Beispielsweise kann der Baum-Traverser 232 mit dem Basiseingabeblock B3 beginnen und dann aufwärts bis Knoten B1 laufen. In dem beispielhaften Kontrollabhängigkeitsgraphen von 4 ist der Knoten B1 ein Kontrollabhängigkeitselternteil des Knotens B3. Beim Auffinden des Knotens B1 benachrichtigt der Baum-Traverser 232 den PICK-Generator 234, der daraufhin eine erste PICK-Anweisung erzeugt. Die erste PICK-Anweisung verwendet die Verzweigungsbedingung „b1“, die mit dem Knoten B1 verknüpft ist, um zu steuern, welcher von zwei Werten der Variablen „y1“ zugewiesen wird. Die beiden möglichen Operanden für die PICK-Anweisung beinhalten einen Wert entsprechend der Variablen „x3“, die mit dem Knoten B3 verknüpft ist, oder einen Wert einer noch unbekannten Variablen „?“, die auszufüllen ist, wenn der Baum-Traverser 232 den Knoten B4 erreicht, wie nachfolgend beschrieben. In solchen Beispielen wird die erste PICK-Anweisung als „y1 = PICK b1, x3, ?“ dargestellt. Wie dargelegt, wird „?“ identifiziert, wenn der Baum-Traverser 232 den Kontrollabhängigkeitsgraphen 400 weiter durchläuft.
  • Beispielsweise beginnt der Baum-Traverser 232 als Nächstes beim Basiseingabeknoten B4 und läuft aufwärts bis zum Knoten B1. Beim Antreffen des Kontrollabhängigkeitselternteils B1 benachrichtigt der Baum-Traverser 232 den PICK-Generator 234, der daraufhin die Variable „x4“ in die erste PICK-Anweisung in der Weise einfügt, dass die erste PICK-Anweisung „y1 = PICK b1, x3, x4“ wird. Beim Durchlaufen des Kontrollabhängigkeitsbaums 400 von den Basiseingabeknoten B5 und B6 aus identifiziert der Baum-Traverser 232 das Kontrollabhängigkeitselternteil B2, und der PICK-Generator 234 erzeugt eine zweite PICK-Anweisung, die auf Grundlage einer Verzweigungsbedingung „b2“ einen von zwei den Eingaben „x5“ und „x6“ entsprechenden Werten, die mit den Knoten B5 bzw. B6 verknüpft sind, auswählt. Die zweite PICK-Anweisung wird dargestellt als „y2 = PICK b2, x5, x6“. Beim weiteren Durchlauf den Kontrollabhängigkeitsbaum 400 aufwärts trifft der Baum-Traverser 232 auf den Knoten B0, und der PICK-Generator 234 erzeugt eine dritte PICK-Anweisung, die als „x = PICK b0, y1, y2“ dargestellt wird. Zusätzlich zum Erzeugen der PICK-Anweisungen fügt der PICK-Generator 234 auch die PICK-Anweisungen als einen PICK-Baum in den SSA-Code anstelle der PHI-Anweisung ein. Da der PICK-Baum direkt auf den Datenflussgraphen gesenkt werden kann, kann der resultierende Code jetzt direkt auf den Datenflussgraphen gesenkt werden, ohne dass der SSA-Code aus dem SSA-Format transformiert worden ist.
  • In einigen Beispielen bildet der Kontrollabhängigkeitsgraph keinen vollständigen Baum. In einigen solcher Beispiele benachrichtigt der beispielhafte Kontrollabhängigkeitsgenerator 230 den beispielhaften Prädikatgenerator 236, wenn der Kontrollabhängigkeitsbaum nicht vollständig ist. Der Prädikatgenerator 236 reagiert auf die Benachrichtigung durch Erzeugen eines Prädikats für jeden Eingabeknoten der PHI-Anweisung, die dem unvollständigen Kontrollabhängigkeitsbaum entspricht. Dem Prädikat wird ein Wert von 0 zugeordnet, wenn der entsprechende Eingabeknoten nicht ausgeführt wird, und dem Prädikat wird ein Wert von 1 zugeordnet, wenn der entsprechende Eingabeknoten ausgeführt wird. Der Prädikatgenerator 236 fügt auch eine Hardwareanweisung hinzu, alle erzeugten Prädikate zu kombinieren und der Variablen der PHI-Anweisung auf Grundlage der Prädikate einen Wert zuzuordnen.
  • Wenn der beispielhafte PHI-Handler 206 die Operation beendet hat (zum Beispiel alle PHI-Anweisungen abgearbeitet sind), werden die Anweisungen in ihrer durch den beispielhaften Variablen-Handler 204 und durch den PHI-Handler 206 modifizierten Form an den beispielhaften Datenflussgraph-Generator 238 geliefert. Der Datenflussgraph-Generator 238 verwendet die modifizierten Anweisungen, um einen Datenflussgraphen zu erzeugen, und veranlasst, dass der Datenflussgraph im Datenflussgraph-Speicher 114 zur Ausführung durch die Datenflussmaschine 106 gespeichert wird. Der Vorgang des Erzeugens des Datenflussgraphen wird hierin auch als Zuordnen der modifizierten Anweisungen zu einem Datenflussgraphen und/oder Absenken der modifizierten Anweisung auf einen Datenflussgraphen bezeichnet.
  • Zwar ist in 2 eine beispielhafte Art und Weise des Implementierens des Mapping-Managers 112 von 1 veranschaulicht, doch können eines oder mehrere der in 2 veranschaulichten Elemente, Vorgänge und/oder Vorrichtungen auf eine beliebige andere Weise kombiniert, geteilt, neu angeordnet, ausgelassen, eliminiert und/oder implementiert werden. Ferner können der beispielhafte Anweisungsanalysator 202, der beispielhafte Variablen-Handler 204, der beispielhafte PHI-Handler 206, der beispielhafte Variablenidentifikator 208, der beispielhafte Variablen-Anweisungsidentifikator 210, der beispielhafte Schleifenidentifikator 212, der beispielhafte PHI-Identifikator 214, der beispielhafte Identifikator des frühesten Auftretens 216, der beispielhafte Variablen-Umbenenner 218, der beispielhafte Variablen-Kopierer 220, der beispielhafte Loop-Handler, der beispielhafte Anweisungsgenerator 226, der beispielhafte Anweisungsinserter 228, der Kontrollabhängigkeitsgraph-Generator 230, der beispielhafte Baum-Traverser 232, der beispielhafte PICK-Generator 234, der beispielhafte Prädikatgenerator 236, der beispielhafte Datenflussgraph-Generator 238 und/oder allgemeiner der beispielhafte Mapping-Manager 112 von 1 durch Hardware, Software, Firmware und/oder eine beliebige Kombination von Hardware, Software und/oder Firmware implementiert werden. Daher kann beispielsweise ein beliebiger beispielhafter Anweisungsanalysator 202, beispielhafter Variablen-Handler 204, beispielhafter PHI-Handler 206, beispielhafter Variablenidentifikator 208, beispielhafter Variablen-Anweisungsidentifikator 210, beispielhafter Schleifenidentifikator 212, beispielhafter PHI-Identifikator 214, beispielhafter Identifikator des frühesten Auftretens 216, beispielhafter Variablen-Umbenenner 218, beispielhafter Variablen-Kopierer 220, beispielhafter Loop-Handler, beispielhafte Anweisungsgenerator 226, beispielhafter Anweisungsinserter 228, Kontrollabhängigkeitsgraph-Generator 230, beispielhafter Baum-Traverser 232, beispielhafter PICK-Generator 234, beispielhafter Prädikatgenerator 236, beispielhafter Datenflussgraph-Generator 238 und/oder allgemeiner beispielhafter Mapping-Manager 112 durch eine oder mehrere analoge oder digitale Schaltung(en), logikschaltungen, programmierbaren Prozessor bzw. program-mierbare Prozessoren anwendungsspezifische integrierte Schaltung(en) (ASIC(s)), programmierbare Logikvorrichtung(en) (Programmable Logic Device, PLD) und/oder feldprogrammierbare Logikvorrichtung(en) (Field Programmable Logic Device, FPLD) implementiert werden. Beim Lesen eines beliebigen der Vorrichtungs- oder Systemansprüche dieses Patents zur Einbeziehung einer reinen Software- und/oder Firmware-Implementierung ist mindestens ein beispielhafter Anweisungsanalysator 202, ein beispielhafter Variablen-Handler 204, ein beispielhafter PHI-Handler 206, ein beispielhafter Variablenidentifikator 208, ein beispielhafter Variablen-Anweisungsidentifikator 210, ein beispielhafter Schleifenidentifikator 212, ein beispielhafter PHI-Identifikator 214, ein beispielhafter Identifikator des frühesten Auftretens 216, ein beispielhafter Variablen-Umbenenner 218, ein beispielhafter Variablen-Kopierer 220, ein beispielhafter Loop-Handler, ein beispielhafter Anweisungsgenerator 226, ein beispielhafter Anweisungsinserter 228, Kontrollabhängigkeitsgraph-Generator 230, ein beispielhafter Baum-Traverser 232, ein beispielhafter PICK-Generator 234, ein beispielhafter Prädikatgenerator 236, ein beispielhafter Datenflussgraph-Generator 238 und/oder allgemeiner ein beispielhafter Mapping-Manager 112 hiermit ausdrücklich so definiert, dass er eine nichtflüchtige computerlesbare Speichervorrichtung, eine DVD (Digital Versatile Disk), eine CD (Compact Disk), eine Blu-Ray-Disk usw. einschließlich der Software und/oder Firmware beinhaltet. Ferner kann der beispielhafte Mapping-Manager 112 von 1 eines oder mehrere Elemente, Vorgänge und/oder Vorrichtungen zusätzlich zu oder anstelle von den in 2 veranschaulichten beinhalten und/oder kann mehr als eines oder alle der veranschaulichten Elemente, Vorgänge und Vorrichtungen beinhalten.
  • 5, 6 und 7 zeigen ein Ablaufdiagramm, das für beispielhafte maschinenlesbare Anweisungen zum Implementieren des Mapping-Managers 112 von 1 und/oder 2 repräsentativ ist. In diesem Beispiel stellen die maschinenlesbaren Anweisungen ein Programm zur Ausführung durch einen Prozessor wie der in der nachstehend im Zusammenhang mit 8 erörterten beispielhaften Prozessorplattform 800 gezeigte Prozessor 812 dar. Das Programm kann in Software ausgeführt sein, die in einem nichtflüchtigen computerlesbaren Speichermedium, wie etwa einer CD-ROM, einer Diskette, einer Festplatte, einer DVD (Digital Versatile Disk), einer Blu-Ray-Disk oder einem Speicher die mit dem Prozessor 812 verknüpft sind, gespeichert ist, aber das gesamte Programm und/oder Teile davon könnten alternativ durch eine andere Vorrichtung als den Prozessor 812 ausgeführt werden und/oder in Firmware oder dedizierter Hardware ausgeführt sein. Ferner wird zwar das beispielhafte Programm unter Bezugnahme auf das in 5, 6 und 7 veranschaulichte Ablaufdiagramm beschrieben, doch können alternativ viele andere Verfahren zum Implementieren des beispielhaften Mapping-Managers 112 verwendet werden. Beispielsweise kann die Reihenfolge der Ausführung der Blöcke geändert werden und/oder einige der beschriebenen Blöcke können geändert, weggelassen oder kombiniert werden. Zusätzlich oder alternativ kann ein beliebiger der Blöcke oder können alle Blöcke durch eine oder mehrere Hardwareschaltung(en) (zum Beispiel diskrete und/oder integrierte analoge und/oder digitale Schaltung, ein feldprogrammierbares Gate-Array (FPGA), eine anwendungsspezifische spezifische Schaltung (ASIC), ein Komparator, ein Operationsverstärker (opamp), eine Logikschaltung usw.) implementiert werden, die strukturiert ist bzw. sind, um die entsprechende Operation ohne ausführende Software oder Firmware auszuführen.
  • Wie oben dargelegt, können die beispielhaften Prozesse von 5, 6 und 7 mittels codierter Anweisungen (zum Beispiel computer- und/oder maschinenlesbarer Anweisungen) implementiert werden, die auf einem nichtflüchtigen computer- und/oder maschinenlesbaren Medium wie einem Festplattenlaufwerk, einem Flash-Speicher, einem Festwertspeicher, einer Compact Disk, einer Digital Versatile Disk, einem Zwischenspeicher, einem Direktzugriffsspeicher und/oder einer beliebigen anderen Speichervorrichtung oder Speicherplatte gespeichert sind, auf denen Informationen für eine beliebige Dauer (zum Beispiel für längere Zeiträume, dauerhaft, für kurze Momente, zum vorübergehenden Puffern und/oder zum Zwischenspeichern der Informationen) abgelegt sind. Wie hierin verwendet, ist der Begriff nichtflüchtiges computerlesbares Medium ausdrücklich definiert, um eine beliebige Art einer computerlesbaren Speichervorrichtung und/oder Speicherplatte einzuschließen und um das Verbreiten von Signalen auszuschließen und um Übertragungsmedien auszuschließen. „Beinhalten(d)“ und „aufweisen(d)“ (und alle Formen und Zeitform davon) werden hierin als offene Begriffe verwendet. Daher wird immer, wenn in einem Patentanspruch etwas nach einer beliebigen Form von „beinhalten“ oder „aufweisen“ (zum Beispiel weist auf, beinhaltet, aufweisend, beinhaltend usw.) aufgeführt ist, davon ausgegangen, dass zusätzliche Elemente, Begriffe usw. vorhanden sein können, ohne aus dem Umfang des entsprechenden Patentanspruchs herauszufallen. Wie hierin verwendet, ist die Formulierung „zumindest“, wenn sie als die Übergangsformulierung in einem Oberbegriff eines Patentanspruchs verwendet wird, in derselben Weise offen, wie der Begriff „beinhalten(d)“ und „aufweisen(d)“ offen ist.
  • Das Programm 500 von 5 beginnt bei Block 502, bei dem der beispielhafte Variablenidentifikator 208 (siehe 2) des beispielhaften Anweisungsanalysators 202 (siehe 2) die SSA-formatierten Anweisungen bzw. den SSA-formatierten Code, die bzw. der im beispielhaften SSA-Speicher 110 (siehe 2) gespeichert sind bzw. ist, analysiert, um Variablen zu identifizieren, die im Code mehr als einmal verwendet werden. Darüber hinaus identifiziert der beispielhafte Variablen-Anweisungsidentifikator 210 (siehe 2) die Anweisungen, die die identifizierte Variable enthalten (Block 504). Der beispielhafte Schleifenidentifikator 212 (siehe 2) des Anweisungsanalysators 202 identifiziert Schleifen, die mit einer Variablen laufen (Block 508). In einigen Beispielen bestimmt der Schleifenidentifikator 212 auch einen Kopf für jede identifizierte Schleife und einen Latch für jede identifizierte Schleife. Der beispielhafte PHI-Identifikator 214 (siehe 2) identifiziert PHI-Anweisungen, die in den SSA-formatierten Anweisungen bzw. in dem SSA-formatierten Code enthalten sind (Block 510) .
  • In einigen Beispielen verwendet der beispielhafte Variablen-Handler 204 die durch den Anweisungsanalysator 202 erfassten und bereitgestellten Informationen (zum Beispiel die identifizierten Variablen und die identifizierten Anweisungen, die die Variablen enthalten), um den SSA-formatierten Code zu modifizieren, so dass jede der identifizierten Variablen in dem durch die Anweisungen repräsentierten Programm nur ein einziges Mal verwendet wird (Block 512). Der Variablen-Handler 204 verwendet auch die durch den Anweisungsanalysator erfassten und bereitgestellten Informationen (die identifizierten Schleifen), um die identifizierten Schleifen zu modifizieren (Block 514). In einigen Beispielen sind die Schleifenmodifikationen so ausgebildet, dass jedes Mal, wenn eine Schleife wiederholt wird, ein Wert entsprechend einer in der Schleife verwendeten Variablen erzeugt wird. Zusätzlich modifiziert der beispielhafte PHI-Handler 206 (siehe 2) den SSA-formatierten Code, um alle durch den beispielhaften PHI-Identifikator 214 identifizierten und bereitgestellten PHI-Anweisungen zu entfernen und zu ersetzen. Die resultierenden Anweisungen bzw. der resultierende Code, bei denen bzw. dem die PHI-Anweisungen entfernt und ersetzt wurden, können bzw. kann jetzt direkt auf einen Datenflussgraphen gesenkt werden. Die resultierenden Anweisungen werden an den beispielhaften Datenflussgenerator 238 geliefert (siehe 2), der die Anweisungen verwendet, um einen Datenflussgraphen zu erzeugen (zum Beispiel senkt der Datenflussgraph-Generator 238 die Anweisungen auf einen Datenflussgraphen ab), der durch die Datenflussmaschine 106 ausgeführt werden kann (siehe 1). Danach endet das Programm 500.
  • Das Programm 600 von 6 stellt beispielhafte Anweisungen dar, die verwendet werden können, um einen Block oder mehrere Blöcke von 5 zu implementieren. Das Programm 600 beginnt bei Block 602, bei dem der beispielhafte Identifikator des frühesten Auftretens 216 (siehe 2) des beispielhaften Variablen-Handlers 204 (siehe 2) die durch den Anweisungsidentifikator identifizierte(n) Variable(n) und die durch den Variablen-Anweisungsidentifikator identifizierten Anweisungen verwendet, um eine früheste Instanz zu identifizieren, in der eine identifizierte Variable in einer Anweisung erscheint. In einigen Beispielen meldet der Identifikator des frühesten Auftretens 216 die frühest auftretende Anweisung an den beispielhaften Variablen-Umbenenner 218 (siehe 2). Der Variablen-Umbenenner 218 benennt dann alle Instanzen des Auftretens der Variablen im Code, mit Ausnahme der frühest auftretenden Anweisung, um (Block 604). Der Variablen-Umbenenner 218 wiederholt diese Operation für alle identifizierten Variablen und identifizierten Anweisungen. Im Ergebnis der Umbenennungsoperation wird jede Variable nur ein einziges Mal verwendet. Der beispielhafte Variablen-Kopierer 220 (siehe 2), veranlasst dann, dass der Wert jeder Variablen auf jede umbenannte Instanz der Variablen kopiert wird (Block 606). In einigen Beispielen wird der Wert durch Einfügen einer Kopieranweisung kopiert. Die Blöcke 602, 604 und 606 stellen eine beispielhafte Möglichkeit zum Implementieren des beispielhaften Blocks 512 von 5 dar.
  • Weiter in Bezug auf 6 erzeugt der beispielhafte Loop-Handler 222 (siehe 2) ein Paar von Datenflussanweisungen für jede Schleife, die mit einer Variablen läuft (Block 608). In einigen Beispielen empfängt der Loop-Handler Informationen von dem beispielhaften Schleifenidentifikator 212, der die Schleifen identifiziert, die mit einer Variablen laufen. In einigen Beispielen beinhalten die durch den Loop-Handler erzeugten Anweisungen eine PICK-Anweisung und eine SWITCH-Anweisung. Die PICK-Anweisung wählt einen Wert, der außerhalb des Schleifenkörpers für die Schleifenvariable während eines ersten Schleifendurchlaufs erzeugt wurde. Für die übrigen Schleifendurchläufe wählt die PICK-Anweisung einen Wert, der im Körper der Schleife erzeugt wurde. Die SWITCH-Anweisung vermittelt (sendet) den für die Variable während eines Schleifendurchlaufs erzeugten Wert zurück zum Schleifenkopf zur Verwendung im nächsten Schleifendurchlauf. Der Loop-Handler 222 veranlasst, dass die PICK-Anweisung am Kopf der Schleife eingefügt wird, und der Loop-Handler 222 veranlasst, dass die SWITCH-Anweisung am Loop-Latch eingefügt wird (Block 610). In einigen Beispielen stellt der Variablen-Handler 204 dann seine Tätigkeit ein. In einigen Beispielen wird, wenn der Variablen-Handler 204 seine Tätigkeit einstellt, der PHI-Handler 206 betrieben, um in dem Code enthaltene PHI-Anweisungen zu verarbeiten. In einigen solchen Beispielen wird das Programm 600 nach dem Block 608 und dem Block 610 (die eine beispielhafte Möglichkeit zum Implementieren des beispielhaften Blocks 514 von 5 darstellen) bei dem beispielhaften Block 516 des beispielhaften Programms 500 von 5 fortgesetzt.
  • Das Programm 700 von 7 stellt eine beispielhafte Möglichkeit zum Implementieren des Blocks 516 von 5 dar. Das Programm 700 beginnt bei Block 702, bei dem der beispielhafte Kontrollabhängigkeitsgraph-Generator 230 (siehe 2) eine der durch den beispielhaften PHI-Identifikator 214 identifizierten PHI-Anweisungen auswählt (siehe 2). Der Kontrollabhängigkeitsgraph-Generator 230 verwendet die PHI-Anweisung und damit verknüpfte Abschnitte der SSA-formatierten Anweisungen bzw. des SSA-formatierten Codes, um einen Kontrollabhängigkeitsgraphen auf Grundlage der PHI-Anweisung zu erzeugen. Wenn ein Kontrollabhängigkeitsbaum in dem Kontrollabhängigkeitsgraphen einen vollständigen Baum bildet (bestimmt bei Block 706), dann durchläuft der beispielhafte Baum-Traverser 232 (siehe 2) des beispielhaften PHI-Handlers 206 den Kontrollabhängigkeitsbaum, um Kontrollabhängigkeitseltern von PHI-Eingabeblöcken zu identifizieren, die in der entsprechenden PHI-Anweisung verwendet werden (Block 708). Zusätzlich erzeugt der beispielhafte PICK-Generator 234 (siehe 2) eine PICK-Anweisung, die zwischen zwei PHI-Eingabeblöcken auf Grundlage eines Kontrollabhängigkeitselternteils wählt (Block 710). Der PICK-Generator 234 erzeugt eine PICK-Anweisung für jedes Kontrollabhängigkeitselternteil, wodurch ein Baum von PICK-Anweisungen entsteht. Der PICK-Generator 234 veranlasst, dass der Baum von PICK-Anweisungen anstelle der entsprechenden PHI-Anweisung in den SSA-formatierten Code eingefügt wird (auch bei Block 710). Wenn mehr PHI-Anweisungen zu verarbeiten sind (bestimmt bei Block 716), dann kehrt das Programm 700 zurück zu Block 702 und den darauf folgenden Blöcken.
  • Wenn ein Kontrollabhängigkeitsbaum im Kontrollabhängigkeitsgraphen keinen vollständigen Baum bildet (bestimmt bei Block 706), dann benachrichtigt der beispielhafte Kontrollabhängigkeitsgraph-Generator 704 den beispielhaften Prädikatgenerator 236 (siehe 2), der durch Erzeugen eines Satzes von Prädikaten reagiert (Block 712). Jedes der Prädikate entspricht einer der Eingaben der entsprechenden PHI-Anweisung. Ferner nimmt jedes Prädikat einen Wert „0“ an, wenn die entsprechende Eingabe nicht ausgeführt wird/aktiv ist, und nimmt einen Wert „1“ an, wenn die entsprechende Eingabe ausgeführt wird. Zusätzlich erzeugt der Prädikatgenerator 236 eine Hardware-Anweisung und fügt sie ein, die die Prädikate kombiniert und einen Wert auswählt, der als Eingabe für die PHI-Anweisung auf Grundlage des Prädikats entsprechend einer aktiven (ausgeführten) Eingabe der Eingaben verwendet werden soll (Block 714). Falls noch weitere PHI-Anweisungen zu verarbeiten sind, kehrt die Kontrolle zurück zu dem Block 702. Andernfalls fährt das Programm 700 bei Block 518 des Programms 500 von 5 fort.
  • 8 ist ein Blockdiagramm einer beispielhaften Prozessorplattform 8000, die strukturiert ist, um die Anweisungen von 5, 6 und 7 zum Implementieren des Mapping-Managers 112 von 1 und/oder 2 auszuführen. Die Prozessorplattform 800 kann zum Beispiel ein Server, ein Personal Computer oder eine beliebige andere Art einer Rechenvorrichtung sein.
  • Die Prozessorplattform 800 des veranschaulichten Beispiels schließt einen Prozessor 812 ein. Der Prozessor 812 des veranschaulichten Beispiels ist Hardware. Beispielsweise kann der Prozessor 812 durch eine oder mehrere integrierte Schaltungen, Logikschaltungen, Mikroprozessoren oder Steuereinrichtungen von einer beliebigen gewünschten Familie oder einem beliebigen gewünschten Hersteller implementiert werden. Der Hardware-Prozessor kann eine Vorrichtung auf Halbleiterbasis (zum Beispiel Silikonbasis) sein. In diesem Beispiel implementiert der Prozessor 812 das Beispiel mit dem beispielhaften Anweisungsanalysator 202, dem beispielhaften Variablen-Handler 204, dem beispielhaften PHI-Handler 206, dem beispielhaften Variablenidentifikator 208, dem beispielhaften Variablen-Anweisungsidentifikator 210, dem beispielhaften Schleifenidentifikator 212, dem beispielhaften PHI-Identifikator 214, dem beispielhaften Identifikator des frühesten Auftretens 216, dem beispielhaften Variablen-Umbenenner 218, dem beispielhaften Variablen-Kopierer 220, dem beispielhaften Loop-Handler, dem beispielhaften Anweisungsgenerator 226, dem beispielhaften Anweisungsinserter 228, dem Kontrollabhängigkeitsgraph-Generator 230, dem beispielhaften Baum-Traverser 232, dem beispielhaften PICK-Generator 234, dem beispielhaften Prädikatgenerator 236, dem beispielhaften Datenflussgraph-Generator 238 und/oder allgemeiner dem beispielhaften Mapping-Manager 112.
  • Die Prozessorplattform 812 des veranschaulichten Beispiels schließt einen lokalen Speicher 813 (zum Beispiel einen Cache) ein. Der Prozessor 812 des veranschaulichten Beispiels steht über einen Bus 818 in Kommunikation mit einem Hauptspeicher, einschließend einen flüchtigen Speicher 814 und einen nichtflüchtigen Speicher 816. Der flüchtige Speicher 814 kann durch ein Synchronous Dynamic Random Access Memory (SDRAM), ein Dynamic Random Access Memory (DRAM), ein RAMBUS Dynamic Random Access Memory (RDRAM) und/oder eine beliebige andere Art einer Random-Access-Memory-Vorrichtung umgesetzt werden. Der nichtflüchtige Speicher 816 kann durch einen Flash-Speicher und/oder eine beliebige andere gewünschte Art einer Speichervorrichtung implementiert werden. Der Zugriff auf den Hauptspeicher 814, 816 wird durch einen Speichercontroller gesteuert.
  • Die Prozessorplattform 800 des veranschaulichten Beispiels schließt außerdem eine Schnittstellenschaltung 820 ein. Die Schnittstellenschaltung 820 kann durch eine beliebige Art eines Schnittstellenstandards, beispielsweise eine Ethernet-Schnittstelle, einen Universal Serial Bus (USB) und/oder eine PCI Express-Schnittstelle, implementiert werden.
  • In dem veranschaulichten Beispiel sind eine oder mehrere Eingabevorrichtungen 822 mit der Schnittstellenschaltung 820 verbunden. Die Eingabevorrichtung(en) 822 ermöglicht bzw. ermöglichen es einem Benutzer, Daten und/oder Befehle in den Prozessor 812 einzugeben. Die Eingabevorrichtung(en) kann bzw. können zum Beispiel durch eine Tastatur, eine Schaltfläche, eine Maus, einen Touchscreen, ein Touchpad, einen Trackball, Isopoint und/oder ein Spracherkennungssystem implementiert werden.
  • Eine oder mehrere Ausgabevorrichtungen 824 sind ebenso mit der Schnittstellenschaltung 820 des veranschaulichten Beispiels verbunden. Die Ausgabevorrichtungen 824 können zum Beispiel durch Anzeigevorrichtungen (zum Beispiel eine Leuchtdiode (LED), eine organische Leuchtdiode (OLED), eine Flüssigkristallanzeige, eine Kathodenstrahlröhrenanzeige (CRT), einen Touchscreen und/oder einen Drucker) implementiert werden. Die Schnittstellenschaltung 820 des veranschaulichten Beispiels schließt demnach üblicherweise eine Grafiktreiberkarte, einen Grafiktreiberchip und/oder einen Grafiktreiberprozessor ein.
  • Die Schnittstellenschaltung 820 des veranschaulichten Beispiels schließt außerdem eine Kommunikationsvorrichtung, wie etwa einen Sender, einen Empfänger, einen Sendeempfänger, ein Modem und/oder eine Netzwerkschnittstellenkarte ein, um den Austausch von Daten mit externen Maschinen (zum Beispiel Rechenvorrichtungen jeglicher Art) über ein Netzwerk 826 (zum Beispiel eine Ethernetverbindung, eine Digital Subscriber Line (DSL), eine Telefonleitung, ein Koaxialkabel, ein Mobiltelefonsystem usw.) zu vereinfachen.
  • Die Prozessorplattform 800 des veranschaulichten Beispiels schließt außerdem einen oder mehrere Massenspeicher 828 zum Speichern von Software und/oder Daten ein. Beispiele derartiger Massenspeicher 828 schließen Diskettenlaufwerke, Festplattenlaufwerke, Compact-Disk-Laufwerke, Blu-Ray-Disk-Laufwerke, RAID-Systeme und Digital-Versatile-Disk(DVD)-Laufwerke ein.
  • Die codierten Anweisungen 832 von 5, 6 und 7 können in dem Massenspeicher 828, in dem flüchtigen Speicher 814, in dem nichtflüchtigen Speicher 816 und/oder einem entfernbaren greifbaren computerlesbaren Speichermedium, wie etwa einer CD oder DVD, gespeichert werden.
  • Aus dem Vorstehenden ergibt sich, dass beispielhafte Verfahren, Vorrichtungen und Herstellungsartikel offenbart worden sind, die es ermöglichen, dass ein Computerprogramm in einem Satz SSA-formatierter Anweisungen modifiziert und dann direkt auf einen Datenflussgraphen gesenkt werden kann, ohne dass die Anweisungen aus dem SSA-Format transformiert werden. Bekannte Verfahren zum Transformieren von Anweisungen aus einem SSA-Format sind oft fehlerbehaftet, und bisweilen funktionieren die bekannten Transformationsverfahren nicht. Eine Eliminierung einer Transformation der Anweisungen aus dem SSA-Format führt somit zu größerer Genauigkeit und weniger Fehlern. Da Hardware-Anweisungen, die grundlegende Elemente einer Datenflussarchitektur sind (zum Beispiel die PICK- und SWITCH-Anweisungen), zum Modifizieren der SSA-formatierten Anweisungen verwendet werden, sind darüber hinaus keine zusätzlichen Kosten mit dem Ausführen des resultierenden Datenflussgraphen auf einer Datenflussmaschine verbunden.
  • Die folgenden weiteren Beispiele werden hierin offenbart.
  • Beispiel 1 ist ein Gerät zum Abbilden eines Satzes von Anweisungen auf einen Datenflussgraphen zur Ausführung durch eine Datenflussmaschine. Das Gerät gemäß Beispiel 1 ist ein Variablen-Handler zum Modifizieren einer Variablen in dem Satz von Anweisungen. Die Variable wird in dem Satz von Anweisungen mehrmals verwendet, und der Satz von Anweisungen liegt in einer Static-Single-Assignment-Form vor. Das Gerät gemäß Beispiel 1 beinhaltet außerdem einen PHI-Handler zum Ersetzen einer in dem Satz von Anweisungen enthaltenen PHI-Anweisung durch einen Satz von Datenflusskontrollanweisungen, und einen Datenflussgraph-Generator zum Abbilden des durch den Variablen-Handler und den PHI-Handler modifizierten Satzes von Anweisungen auf einen Datenflussgraphen, ohne dass die Anweisungen aus der Static-Single-Assignment-Form transformiert werden.
  • Beispiel 2 beinhaltet die Vorrichtung gemäß Beispiel 1 und beinhaltet ferner einen Anweisungsanalysator zum Analysieren des Satzes von Anweisungen durch Melden der Variablen, die mehrmals in dem Satz von Anweisungen verwendet wird, an den Variablen-Handler und Melden eines Teilsatzes des Satzes von Anweisungen an den Variablen-Handler. In Beispiel 2 stellt der Teilsatz eine Vielzahl von Istanzen der, in denen die Variable verwendlet wird.
  • Beispiel 3 beinhaltet die Vorrichtung gemäß Anspruch 2. In Beispiel 3 modifiziert der Variablen-Handler die Variable durch Identifizieren einer frühest auftretenden Instanz der Variablen und einer später auftretenden Instanz oder mehrerer später auftretenden Instanzen der Variablen. Darüber hinaus modifiziert der Variablen-Handler die Variable durch Ersetzen der einen später auftretenden Instanz oder der mehreren später auftretenden Instanzen der Variablen durch neue Variablen, die einzigartig sind. Der Variablen-Handler modifiziert die Variable auch durch Kopieren des Wertes der aus der frühest auftretenden Instanz resultierenden Variablen auf die neuen Variablen.
  • Beispiel 4 beinhaltet die Vorrichtung von Beispiel 2. In Beispiel 4 analysiert der Anweisungsanalysator den Satz von Anweisungen durch Melden an den Variablen-Handler, dass die Variable außerhalb einer Schleife definiert und in der Schleife verwendet wird.
  • Beispiel 5 beinhaltet die Vorrichtung gemäß Beispiel 4. In Beispiel 5 modifiziert der Variablen-Handler die Variable durch Einfügen von Datenflusskontrollanweisungen in den Satz von Anweisungen. Die Datenflusskontrollanweisungen beinhalten eine erste Datenflusskontrollanweisung, die wählt zwischen: 1) einem ersten Wert für die Variable und einem zweiten Wert für die Variable, die außerhalb der Schleife erzeugt wird, und 2) einem zweiten Wert für die Variable, die innerhalb der Schleife erzeugt wird. Die Datenflusskontrollanweisungen beinhalten außerdem eine zweite Datenflussanweisung, die auf Grundlage einer Schleifenausgang-Bedingung veranlasst, dass in einem nächsten Durchlauf der Schleife ein dritter Wert der Variablen verwendet wird.
  • Beispiel 6 beinhaltet die Vorrichtung gemäß einem beliebigen der Beispiele 1 bis 5. Die Vorrichtung gemäß Beispiel 6 beinhaltet ferner einen Anweisungsanalysator, der den Satz von Anweisungen analysiert, um an den PHI-Handler die in dem Satz von Anweisungen enthaltene PHI-Anweisung zu melden.
  • Beispiel 7 beinhaltet die Vorrichtung gemäß Beispiel 6. In Beispiel 7 ersetzt der PHI-Handler die PHI-Anweisung durch Datenflusskontrollanweisungen mittels: Bestimmen, ob ein Kontrollabhängigkeitsgraph eines Satzes von PHI-Eingabeblöcken einen vollständigen Baum bildet. Wenn der Kontrollabhängigkeitsgraph des Satzes von PHI-Eingabeblöcken einen vollständigen Baum bildet, dann ordnet die Vorrichtung gemäß Beispiel 7 die PHI-Anweisung einem Baum der Datenflusskontrollanweisungen zu. Die Datenflusskontrollanweisungen wählen jeweilige Werte zum Zuweisen zu jeweiligen Variablen auf Grundlage jeweiliger mit den PHI-Eingabeblöcken verknüpfter Verzweigungsbedingungen aus. Wenn der Kontrollabhängigkeitsgraph des Satzes von PHI-Eingabeblöcken keinen vollständigen Baum bildet, dann bestimmt die Vorrichtung gemäß Beispiel 7 Prädikate für die jeweiligen PHI-Eingabeblöcke und fügt eine Hardware-Anweisung ein. Die Hardware-Anweisung wählt einen dritten Wert zum Zuweisen zu der Variablen aus. Der dritte Wert entspricht einem der PHI-Eingabeblöcke, der ein erfülltes Prädikat aufweist.
  • Beispiel 8 beinhaltet die Vorrichtung gemäß Beispiel 7. In dem Gerät gemäß Beispiel 8 ordnet der PHI-Handler die PHI-Anweisung dem Baum von Datenflusskontrollanweisungen zu, indem er ausgehend von jedem der PHI-Eingabeblöcke einen Kontrollabhängigkeitsbaum des Kontrollabhängigkeitsgraphen aufwärts durchläuft, bis ein Wurzelknoten erreicht und für jeden während des Durchlaufs vorgefundenen kontrollabhängigen übergeordneten Block eine der Datenflusskontrollanweisungen erzeugt wird.
  • Beispiel 9 beinhaltet die Vorrichtung gemäß Beispiel 8. In der Vorrichtung gemäß Beispiel 9 wählt eine erste Datenflusskontrollanweisung entsprechend einer mit einer ersten PHI-Eingabe verknüpften ersten Verzweigungsbedingung zwischen einem ersten Wert entsprechend einer ersten Eingabevariablen der PHI-Anweisung und einem zweiten Wert entsprechend einer zweiten Eingabevariablen der PHI-Anweisung. Ferner entspricht die erste Verzweigungsbedingung einem Kontrollabhängigkeitselternteil eines ersten PHI-Eingabeblocks und eines zweiten PHI-Eingabeblocks.
  • Beispiel 10 beinhaltet ein nichtflüchtiges maschinenlesbares Speichermedium oder mehrere nichtflüchtige maschinenlesbare Speichermedien, beinhaltend Anweisungen, die, wenn sie ausgeführt werden, einen oder mehrere Prozessoren veranlassen, mindestens eine Variable in einem Satz von Variablen zu modifizieren. Die Variable wird in dem Satz von Anweisungen mehrere Male verwendet. Darüber hinaus liegt der Satz von Anweisungen in Static-Single-Assignment-Form vor. Die Anweisungen veranlassen ferner den einen oder die mehreren Prozessoren, eine in dem Satz von Anweisungen enthaltene PHI-Anweisung durch einen Satz von Kontrolldatenflusskontrollanweisungen zu ersetzen und einen Datenflussgraphen auf Grundlage eines Satzes von Anweisungen zu erzeugen, nachdem die Variable modifiziert worden ist und die PHI-Anweisung ersetzt worden ist. In Beispiel 10 kann der Datenflussgraph durch eine Datenflussmaschine ausgeführt werden.
  • Beispiel 11 beinhaltet das eine nichtflüchtige maschinenlesbare Speichermedium oder die mehreren nichtflüchtigen maschinenlesbaren Speichermedien gemäß Beispiel 10. In Beispiel 11 veranlassen die Anweisungen ferner, dass der eine oder die mehreren Prozessoren die Variable identifizieren, die in dem Satz von Anweisungen mehrmals verwendet wird, und dass ein Teilsatz des Satzes von Anweisungen identifiziert wird. Der Teilsatz stellt eine Vielzahl von Instanzen dar, in denen die Variable verwendet wird.
  • Beispiel 12 beinhaltet das eine nichtflüchtige maschinenlesbare Speichermedium oder die mehreren nichtflüchtigen maschinenlesbaren Speichermedien gemäß Beispiel 11. In Beispiel 11 veranlassen die Anweisungen ferner, dass der eine oder die mehreren Prozessoren eine frühest auftretende Instanz der Variablen identifiziert bzw. identifizieren, später auftretende Instanzen der Variablen identifiziert bzw. identifizieren und die jeweiligen später auftretenden Instanzen der Variablen durch jeweilige neue Variable ersetzt bzw. ersetzen. Ferner veranlassen Anweisungen, dass der eine oder die mehreren Prozessoren den Wert der aus der frühest auftretenden Instanz resultierenden Variablen auf die neuen Variablen der später auftretenden Instanzen kopiert bzw. kopieren.
  • Beispiel 13 beinhaltet das eine nichtflüchtige maschinenlesbare Speichermedium oder die mehreren nichtflüchtigen maschinenlesbaren Speichermedien gemäß Beispiel 12. In Beispiel 13 veranlassen die Anweisungen ferner, dass der eine oder die mehreren Prozessoren bestimmt bzw. bestimmen, ob eine außerhalb der Schleife definierte Variable in der Schleife verwendet wird.
  • Beispiel 14 beinhaltet das eine nichtflüchtige maschinenlesbare Speichermedium oder die mehreren nichtflüchtigen maschinenlesbaren Speichermedien gemäß Beispiel 13. In Beispiel 14 veranlassen die Anweisungen ferner, dass der eine oder die mehreren Prozessoren Datenflusskontrollanweisungen in den Satz von Anweisungen einfügt bzw. einfügen. Die Datenflusskontrollanweisungen veranlassen, dass in jeweiligen Durchläufen der Schleife jeweilige Werte für die Variable erzeugt werden.
  • Beispiel 15 beinhaltet das eine nichtflüchtige maschinenlesbare Speichermedium oder die mehreren nichtflüchtigen maschinenlesbaren Speichermedien gemäß Beispiel 13. In Beispiel 14 veranlassen die Anweisungen ferner, dass der eine oder die mehreren Prozessoren eine erste Datenflusskontrollanweisung in den Satz von Anweisungen einfügt bzw. einfügen, wobei die erste Datenflusskontrollanweisung zwischen einem ersten für die Variable zu verwendenden Wert und einem zweiten für die Variable zu verwendenden Wert wählt. Der erste Wert wird außerhalb der Schleife erzeugt und der zweite Wert wird innerhalb der Schleife erzeugt. Die Anweisungen veranlassen ferner, dass der eine oder die mehreren Prozessoren eine zweite Datenflusskontrollanweisung einfügt bzw. einfügen. Die zweite Datenflusskontrollanweisung auf Grundlage einer Schleifenausgang-Bedingung veranlasst, dass in einem nächsten Durchlauf der Schleife ein dritter Wert der Variablen verwendet wird.
  • Beispiel 16 beinhaltet das eine nichtflüchtige maschinenlesbare Speichermedium oder die mehreren nichtflüchtigen maschinenlesbaren Speichermedien gemäß einem beliebigen der Beispiele 10 bis 15. In Beispiel 16 veranlassen die Anweisungen, dass der eine oder die mehreren Prozessoren die PHI-Anweisungen ersetzt bzw. ersetzen, indem er bestimmt bzw. sie bestimmen, ob ein Kontrollabhängigkeitsgraph eines Satzes von PHI-Eingabeblöcken einen vollständigen Baum bildet, und, wenn der Kontrollabhängigkeitsgraph des Satzes von PHI-Eingabeblöcken einen vollständigen Baum bildet, die PHI-Anweisungen einem Baum von Datenflusskontrollanweisungen zuordnet bzw. zuordnen. In Beispiel 16 wählen die Datenflusskontrollanweisungen jeweilige Werte zum Zuweisen zu jeweiligen Variablen auf Grundlage jeweiliger mit den PHI-Eingabeblöcken verknüpfter Verzweigungsbedingungen aus. Die Anweisungen veranlassen ferner, dass der eine oder die mehreren Prozessoren die PHI-Anweisungen ersetzt bzw. ersetzen, indem er bzw. sie, wenn der Kontrollabhängigkeitsgraph des Satzes von PHI-Eingabeblöcken keinen vollständigen Baum bildet, Prädikate für die jeweiligen PHI-Eingabeblöcke bestimmt bzw. bestimmen und eine Hardware-Anweisung einfügt bzw. einfügen. Die Hardware-Anweisung wählt einen dritten Wert zum Zuweisen zu der Variablen aus. Der dritte Wert entspricht dem einen der PHI-Eingabeblöcke, der ein erfülltes Prädikat aufweist.
  • Beispiel 17 beinhaltet das eine nichtflüchtige maschinenlesbare Speichermedium oder die mehreren nichtflüchtigen maschinenlesbaren Speichermedien gemäß Beispiel 16. In Beispiel 16 veranlassen die Anweisungen, dass der eine oder die mehreren Prozessoren die PHI-Anweisungen einem Baum von Datenflusskontrollanweisungen zuordnet bzw. zuordnen, indem er bzw. sie ausgehend von jedem der PHI-Eingabeblöcke einen Kontrollabhängigkeitsbaum aufwärts durchläuft bzw. durchlaufen, bis ein Wurzelknoten erreicht wird, und für jeden während des Durchlaufs vorgefundenen kontrollabhängigen übergeordneten Block eine der Datenflusskontrollanweisungen erzeugt bzw. erzeugen.
  • Beispiel 18 beinhaltet das eine nichtflüchtige maschinenlesbare Speichermedium oder die mehreren nichtflüchtigen maschinenlesbaren Speichermedien gemäß Beispiel 16. In Beispiel 18 wählt eine erste Datenflusskontrollanweisung des Baums von Datenflusskontrollanweisungen entsprechend einer mit einer ersten PHI-Eingabe verknüpften ersten Verzweigungsbedingung zwischen einem ersten Wert entsprechend einer ersten Eingabevariablen der PHI-Anweisung und einem zweiten Wert entsprechend einer zweiten Eingabevariablen der PHI-Anweisung. Die erste Verzweigungsbedingung entspricht einem Kontrollabhängigkeitselternteil eines ersten PHI-Eingabeblocks und eines zweiten PHI-Eingabeblocks.
  • Beispiel 19 ist ein Verfahren zum Erzeugen eines Datenflussgraphen zur Ausführung auf einer Datenflussmaschine. Das Verfahren gemäß Beispiel 19 beinhaltet Modifizieren, und zwar durch Ausführen einer Anweisung mit mindestens einem Prozessor, einer Variablen in einem Satz von Anweisungen. Die Variable wird in dem Satz von Anweisungen mehrmals verwendet. Der Satz von Anweisungen liegt in Static-Single-Assignment-Form vor. Das Verfahren beinhaltet außerdem das Ersetzen, und zwar durch Ausführen einer Anweisung mit mindestens einem Prozessor, einer in einem Satz von Anweisungen mit einem Satz von Datenflusskontrollanweisungen enthaltenen PHI-Anweisung und Erzeugen, und zwar durch Ausführen einer Anweisung mit dem mindestens einen Prozessor, des Datenflussgraphen auf Grundlage des Satzes von Anweisungen, nachdem die Variable modifiziert worden ist und die PHI-Anweisung ersetzt worden ist.
  • Beispiel 20 beinhaltet das Verfahren gemäß Beispiel 19 und beinhaltet ferner Identifizieren der Variablen in dem Satz von Anweisungen und Identifizieren eines Teilsatzes des Satzes von Anweisungen. Der Teilsatz stellt eine Vielzahl von Instanzen dar, in denen die Variable verwendet wird.
  • Beispiel 21 beinhaltet das Verfahren gemäß Beispiel 20. In Beispiel 21 beinhaltet Modifizieren der Variablen Identifizieren einer frühest auftretenden Instanz der Variablen und einer später auftretenden Instanz oder mehrerer später auftretenden Instanzen der Variablen, Ersetzen der einen später auftretenden Instanz oder der mehreren später auftretenden Instanzen der Variablen durch die neuen Variablen, die einzigartig sind, und Kopieren des Wertes der aus der frühest auftretenden Instanz resultierenden Variablen auf die neuen Variablen.
  • Beispiel 22 beinhaltet das Verfahren gemäß Beispiel 21. Beispiel 22 beinhaltet ferner Bestimmen, ob die Variable außerhalb einer Schleife definiert und in der Schleife verwendet wird, und Einfügen von Datenflusskontrollanweisungen in den Satz von Anweisungen. Die Datenflusskontrollanweisungen veranlassen, dass in jeweiligen Durchläufen der Schleife jeweilige Werte für die Variable erzeugt werden.
  • Beispiel 23 beinhaltet das Verfahren gemäß Beispiel 22. Das Verfahren gemäß Beispiel 23 beinhaltet ferner Einfügen einer ersten Datenflusskontrollanweisung in den Satz von Anweisungen. Die erste Datenflusskontrollanweisung wählt zwischen einem ersten für die Variable zu verwendenden Wert und einem zweiten für die Variable zu verwendenden Wert. Der erste Wert wird außerhalb der Schleife erzeugt und der zweite Wert wird innerhalb der Schleife erzeugt. Das Verfahren gemäß Beispiel 23 beinhaltet außerdem Einfügen einer zweiten Datenflusskontrollanweisung, die auf Grundlage einer Schleifenausgang-Bedingung veranlasst, dass in einem nächsten Durchlauf der Schleife ein dritter Wert für die Variable verwendet wird.
  • Beispiel 24 beinhaltet das Verfahren gemäß einem beliebigen der Beispiele 19 bis 23. In dem Verfahren gemäß Beispiel 24 beinhaltet Ersetzen der PHI-Anweisung Bestimmen, ob ein Kontrollabhängigkeitsgraph eines Satzes von PHI-Eingabeblöcken einen vollständigen Baum bildet, und Abbilden der PHI-Anweisung auf einen Baum der Datenflusskontrollanweisungen, wenn der Kontrollabhängigkeitsgraph des Satzes von PHI-Eingabeblöcken einen vollständigen Baum bildet. Die Datenflusskontrollanweisungen wählen jeweilige Werte zum Zuweisen zu jeweiligen Variablen auf Grundlage jeweiliger mit den PHI-Eingabeblöcken verknüpfter Verzweigungsbedingungen aus. In dem Verfahren gemäß Beispiel 24 beinhaltet Ersetzen der PHI-Anweisung ferner, wenn der Kontrollabhängigkeitsgraph des Satzes von PHI-Eingabeblöcken keinen vollständigen Baum bildet, Bestimmen von Prädikaten für die jeweiligen PHI-Eingabeblöcke und Einfügen einer Hardware-Anweisung, wobei die Hardware-Anweisung einen dritten Wert zum Zuordnen zu der Variablen auswählen soll. Der dritte Wert entspricht einem der PHI-Eingabeblöcke, der ein erfülltes Prädikat aufweist.
  • Beispiel 25 beinhaltet das Verfahren gemäß Beispiel 24. In dem Verfahren gemäß Beispiel 25 beinhaltet Abbilden der PHI-Anweisung auf den Baum der Datenflusskontrollanweisungen Durchlaufen, ausgehend von jedem der PHI-Eingabeblöcke, eines Kontrollabhängigkeitsbaums des Kontrollabhängigkeitsgraphen, bis ein Wurzelknoten erreicht wird, und Erzeugen, für jeden während des Durchlaufs vorgefundenen kontrollabhängigen übergeordneten Block, einer der in dem Baum von Datenflusskontrollanweisungen enthaltenen Datenflusskontrollanweisungen.
  • Beispiel 26 beinhaltet das Verfahren gemäß Beispiel 25. In dem Verfahren gemäß Beispiel 26 wählt eine erste Datenflusskontrollanweisung des Baums von Datenflusskontrollanweisungen entsprechend einer mit einer ersten PHI-Eingabe verknüpften ersten Verzweigungsbedingung zwischen einem ersten Wert entsprechend einer ersten Eingabevariablen der PHI-Anweisung und einem zweiten Wert entsprechend einer zweiten Eingabevariablen der PHI-Anweisung. In Beispiel 26 entspricht die erste Verzweigungsbedingung einem Kontrollabhängigkeitselternteil eines ersten PHI-Eingabeblocks und eines zweiten PHI-Eingabeblocks.
  • Beispiel 27 ist ein Gerät beinhaltend Mittel zum Durchführen eines Verfahrens wie in einem beliebigen der Beispiele 19 bis 26 beansprucht.
  • Beispiel 28 ist ein maschinenlesbarer Speicher, beinhaltend maschinenlesbare Anweisungen. Die Anweisungen implementieren, wenn sie ausgeführt werden, ein Verfahren oder realisieren eine Vorrichtung wie in den beliebigen der vorhergehenden Beispiele beschrieben.
  • Beispiel 29 ist eine Vorrichtung zum Abbilden eines Satzes von Anweisungen auf einen Datenflussgraphen zur Ausführung durch eine Datenflussmaschine. Die Vorrichtung gemäß Beispiel 29 beinhaltet Mittel zum Modifizieren einer Variablen in dem Satz von Anweisungen. Die Variable wird in dem Satz von Anweisungen mehrmals verwendet, und der Satz von Anweisungen liegt in Static-Single-Assignment-Form vor. Das Gerät gemäß Beispiel 29 beinhaltet außerdem Mittel zum Ersetzen einer in dem Satz von Anweisungen enthaltenen PHI-Anweisung durch einen Satz von Datenflusskontrollanweisungen und Mittel zum Zuordnen des durch den Variablen-Handler und den PHI-Handler modifizierten Satzes von Anweisungen zu einem Datenflussgraphen, ohne dass die Anweisungen aus der Static-Single-Assignment-Form transformiert werden.
  • Beispiel 30 beinhaltet die Vorrichtung gemäß Beispiel 29 und beinhaltet ferner Mittel zum Analysieren des Satzes von Anweisungen durch Identifizieren der Variablen, die in dem Satz von Anweisungen mehrere Male verwendet wird, und durch Identifizieren eines Teilsatzes des Satzes von Anweisungen. Der Teilsatz stellt eine Vielzahl von Instanzen dar, in denen die Variable verwendet wird.
  • Beispiel 31 beinhaltet die Vorrichtung gemäß Beispiel 30. In Beispiel 31 identifiziert das Mittel zum Modifizieren der Variablen eine frühest auftretende Instanz der Variablen und eine später auftretende Instanz oder mehrere später auftretende Instanzen der Variablen und ersetzt die später auftretenden Instanzen der Variablen durch neue Variablen, die einzigartig sind. Außerdem kopieren die Mittel zum Modifizieren der Variablen den Wert der aus der frühest auftretenden Instanz resultierenden Variablen auf die neuen Variablen.
  • Beispiel 32 beinhaltet die Vorrichtung gemäß Beispiel 30. In Beispiel 32 analysiert das Mittel zum Analysieren des Satzes von Anweisungen den Satz von Anweisungen durch Identifizieren, ob die Variable außerhalb einer Schleife definiert und in der Schleife verwendet wird.
  • Beispiel 33 beinhaltet die Vorrichtung gemäß Beispiel 32. In Beispiel 33 fügt das Mittel zum Modifizieren der Variablen Datenflusskontrollanweisungen in den Satz von Anweisungen ein und beinhalten die Datenflusskontrollanweisungen eine erste Datenflusskontrollanweisung, die wählt zwischen 1) einem ersten Wert für die Variable und einem zweiten Wert für die Variable, die außerhalb der Schleife erzeugt wird, und 2) einem zweiten Wert für die Variable, die innerhalb der Schleife erzeugt wird. Darüber hinaus beinhalten die Datenflusskontrollanweisungen eine zweite Datenflusskontrollanweisung, die auf Grundlage einer Schleifenausgang-Bedingung veranlasst, dass in einem nächsten Durchlauf der Schleife ein dritter Wert der Variablen verwendet wird.
  • Beispiel 34 beinhaltet das Gerät gemäß einem beliebigen der Beispiele 29 bis 33 und beinhaltet außerdem Mittel zum Analysieren des Satzes von Anweisungen zum Identifizieren der in dem Satz von Anweisungen enthaltenen PHI-Anweisung.
  • Beispiel 35 beinhaltet die Vorrichtung gemäß Beispiel 34. In Beispiel 35 ersetzt der PHI-Handler die PHI-Anweisung durch Datenflusskontrollanweisungen, indem er bestimmt, ob ein Kontrollabhängigkeitsgraph eines Satzes von PHI-Eingabeblöcken einen vollständig Baum bildet, und, wenn der Kontrollabhängigkeitsgraph des Satzes von PHI-Eingabeblöcken einen vollständigen Baum bildet, die PHI-Anweisungen einem Baum von Datenflusskontrollanweisungen zuordnet. Die Datenflusskontrollanweisungen wählen jeweilige Werte zum Zuweisen zu jeweiligen Variablen auf Grundlage jeweiliger mit den PHI-Eingabeblöcken verknüpfter Verzweigungsbedingungen aus. Der PHI-Handler ersetzt außerdem die PHI-Anweisung durch Datenflusskontrollanweisungen, indem er, wenn der Kontrollabhängigkeitsgraph des Satzes von PHI-Eingabeblöcken keinen vollständigen Baum bildet, Prädikate für die jeweiligen PHI-Eingabeblöcke bestimmt und eine Hardware-Anweisung einfügt. Die Hardware-Anweisung wählt einen dritten Wert zum Zuweisen zu der Variablen aus. Der dritte Wert entspricht dem einen der PHI-Eingabeblöcke, der ein erfülltes Prädikat aufweist.
  • Beispiel 36 beinhaltet die Vorrichtung gemäß Beispiel 35. In Beispiel 36 ordnet der PHI-Handler die PHI-Anweisung dem Baum von Datenflusskontrollanweisungen zu, indem er, ausgehend von jedem der PHI-Eingabeblöcke, einen Kontrollabhängigkeitsbaum des Kontrollabhängigkeitsgraphen aufwärts durchläuft, bis ein Wurzelknoten erreicht wird, und für jeden während des Durchlaufs vorgefundenen kontrollabhängigen übergeordneten Block eine der Datenflusskontrollanweisungen erzeugt.
  • Beispiel 37 beinhaltet die Vorrichtung gemäß Beispiel 36. In Beispiel 37 wählt eine erste Datenflusskontrollanweisung entsprechend einer mit einer ersten PHI-Eingabe verknüpften ersten Verzweigungsbedingung zwischen einem ersten Wert entsprechend einer ersten Eingabevariablen der PHI-Anweisung und einem zweiten Wert entsprechend einer zweiten Eingabevariablen der PHI-Anweisung. Darüber hinaus entspricht die erste Verzweigungsbedingung einem Kontrollabhängigkeitselternteil eines ersten PHI-Eingabeblocks und eines zweiten PHI-Eingabeblocks.
  • Beispiel 38 ist ein maschinenlesbares Medium einschließlich Code, der, wenn er ausgeführt wird, eine Maschine veranlasst, das Verfahren gemäß einem beliebigen der Beispiele 19 bis 26 durchzuführen.
  • Auch wenn hierin bestimmte beispielhafte Verfahren, Geräte und Artikel zur Herstellung offenbart worden sind, ist der Geltungsbereich dieses Patents nicht darauf beschränkt. Vielmehr deckt dieses Patent alle Verfahren, Vorrichtungen und Artikel zur Herstellung ab, die angemessenerweise in den Bereich der Ansprüche dieses Patents fallen.

Claims (25)

  1. Vorrichtung zum Abbilden eines Satzes von Anweisungen auf einen Datenflussgraphen zur Ausführung durch eine Datenflussmaschine: ein Variablen-Handler zum Modifizieren einer Variablen in dem Satz von Anweisungen, wobei die Variable in dem Satz von Anweisungen mehrmals verwendet wird, wobei der Satz von Anweisungen in Static-Single-Assignment-Form vorliegt; ein PHI-Handler zum Ersetzen einer in dem Satz von Anweisungen enthaltenen PHI-Anweisung durch einen Satz von Datenflusskontrollanweisungen; und ein Datenflussgraph-Generator zum Abbilden des durch den Variablen-Handler und den PHI-Handler modifizierten Satzes von Anweisungen auf einen Datenflussgraphen ohne Transformieren der Anweisungen aus der Static-Single-Assignment-Form.
  2. Vorrichtung nach Anspruch 1, ferner beinhaltend: einen Anweisungsanalysator zum Analysieren des Satzes von Anweisungen durch: Melden der Variablen, die in dem Satz von Anweisungen mehrmals verwendet wird, an den Variablen-Handler; und Melden eines Teilsatzes des Satzes von Anweisungen an den Variablen-Handler, wobei der Teilsatz eine Vielzahl von Instanzen darstellt, in denen die Variable verwendet wird.
  3. Vorrichtung nach Anspruch 2, wobei der Variablen-Handler die Variable modifizieren soll, und zwar durch: Identifizieren einer frühest auftretenden Instanz der Variablen und einer später auftretenden Instanz oder mehrerer später auftretenden Instanzen der Variablen; Ersetzen der einen später auftretenden Instanz oder der mehreren später auftretenden Instanzen der Variablen durch neue Variable, wobei die neuen Variablen einzigartig sind; und Kopieren des Wertes der aus der frühest auftretenden Instanz resultierenden Variablen auf die neuen Variablen.
  4. Vorrichtung nach Anspruch 2, wobei der Anweisungsanalysator den Satz von Anweisungen durch Melden an den Variablen-Handler, dass die Variable außerhalb einer Schleife definiert und in der Schleife verwendet wird, analysieren soll.
  5. Vorrichtung nach Anspruch 4, wobei der Variablen-Handler die Variable durch Einfügen der Datenflusskontrollanweisungen in den Satz von Anweisungen modifizieren soll, wobei die Datenflusskontrollanweisungen beinhalten sollen: eine erste Datenflusskontrollanweisung, wobei die erste Datenflusskontrollanweisung wählen soll zwischen 1) einem ersten Wert für die Variable und einem zweiten Wert für die Variable, die außerhalb der Schleife erzeugt wird, und 2) einem zweiten Wert für die Variable, die innerhalb der Schleife erzeugt wird; und eine zweite Datenflussanweisung, wobei die zweite Datenflussanweisung auf Grundlage einer Schleifenausgang-Bedingung veranlasst, dass in einem nächsten Durchlauf der Schleife ein dritter Wert der Variablen verwendet wird.
  6. Vorrichtung nach einem beliebigen der Ansprüche 1 bis 5, ferner beinhaltend: einen Anweisungsanalysator zum Analysieren des Satzes von Anweisungen, das Analysieren des Satzes von Anweisungen zum Melden der in dem Satz von Anweisungen enthaltenen PHI-Anweisung an den PHI-Handler.
  7. Vorrichtung nach Anspruch 6, wobei der PHI-Handler die PHI-Anweisung durch Datenflusskontrollanweisungen ersetzen soll, und zwar durch: Bestimmen, ob ein Kontrollabhängigkeitsgraph eines Satzes von PHI-Eingabeblöcken einen vollständigen Baum bildet; wenn der Kontrollabhängigkeitsgraph des Satzes von PHI-Eingabeblöcken einen vollständigen Baum bildet, Abbilden der PHI-Anweisung auf einen Baum der Datenflusskontrollanweisungen, wobei die Datenflusskontrollanweisungen jeweilige Werte zum Zuweisen zu jeweiligen Variablen auf Grundlage jeweiliger mit den PHI-Eingabeblöcken verknüpfter Verzweigungsbedingungen auswählen sollen; und wenn der Kontrollabhängigkeitsgraph des Satzes von PHI-Eingabeblöcken keinen vollständigen Baum bildet, Bestimmen von Prädikaten für die jeweiligen PHI-Eingabeblöcke und Einfügen einer Hardware-Anweisung, wobei die Hardware-Anweisung einen dritten Wert zum Zuordnen zu der Variablen auswählen soll, wobei der dritte Wert dem einem der PHI-Eingabeblöcke entspricht, der ein erfülltes Prädikat aufweist.
  8. Nichtflüchtiges maschinenlesbares Speichermedium oder mehrere nichtflüchtige maschinenlesbare Speichermedien, beinhaltend Anweisungen, die, wenn sie ausgeführt werden, einen oder mehrere Prozessoren veranlassen, mindestens: eine Variable in einem Satz von Anweisungen zu modifizieren, wobei die Variable in dem Satz von Anweisungen mehrmals verwendet wird, wobei der Satz von Anweisungen in Static-Single-Assignment-Form vorliegt; eine in dem Satz von Anweisungen enthaltene PHI-Anweisung durch einen Satz von Kontrolldatenflusskontrollanweisungen zu ersetzen und einen Datenflussgraphen auf Grundlage des Satzes von Anweisungen zu erzeugen, nachdem die Variable modifiziert worden ist und die PHI-Anweisung ersetzt worden ist, wobei der Datenflussgraph durch eine Datenflussmaschine ausgeführt werden kann.
  9. Nichtflüchtiges maschinenlesbares Speichermedium oder mehrere nichtflüchtige maschinenlesbare Speichermedien nach Anspruch 8, wobei die Anweisungen ferner den einen oder die mehreren Prozessoren veranlassen: die Variable zu identifizieren, die in dem Satz von Anweisungen mehrmals verwendet wird, und einen Teilsatz des Satzes von Anweisungen zu identifizieren, wobei der Teilsatz eine Vielzahl von Instanzen darstellt, in denen die Variable verwendet wird.
  10. Nichtflüchtiges maschinenlesbares Speichermedium oder mehrere nichtflüchtige maschinenlesbare Speichermedien nach Anspruch 9, wobei die Anweisungen ferner den einen oder die mehreren Prozessoren veranlassen: eine frühest auftretende Instanz der Variablen zu identifizieren; später auftretende Instanzen der Variablen zu identifizieren; die jeweiligen später auftretenden Instanzen der Variablen durch jeweilige neue Variablen zu ersetzen; und den Wert der aus der frühest auftretenden Instanz resultierenden Variablen auf die neuen Variablen der später auftretenden Instanzen zu kopieren.
  11. Nichtflüchtiges maschinenlesbares Speichermedium oder mehrere nichtflüchtige maschinenlesbare Speichermedien nach Anspruch 10, wobei die Anweisungen ferner den einen oder die mehreren Prozessoren veranlassen zu bestimmen, ob eine außerhalb einer Schleife definierte Variable in der Schleife verwendet wird.
  12. Nichtflüchtiges maschinenlesbares Speichermedium oder mehrere nichtflüchtige maschinenlesbare Speichermedien nach Anspruch 11, wobei die Anweisungen ferner den einen oder die mehreren Prozessoren veranlassen: Datenflusskontrollanweisungen in den Satz von Anweisungen einzufügen, wobei die Datenflusskontrollanweisungen veranlassen sollen, dass in jeweiligen Durchläufen der Schleife jeweilige Werte für die Variable erzeugt werden.
  13. Nichtflüchtiges maschinenlesbares Speichermedium oder mehrere nichtflüchtige maschinenlesbare Speichermedien nach Anspruch 11, wobei die Anweisungen ferner den einen oder die mehreren Prozessoren veranlassen: eine erste Datenflusskontrollanweisung in den Satz von Anweisungen einzufügen, wobei die erste Datenflusskontrollanweisung zwischen einem ersten für die Variable zu verwendenden Wert und einem zweiten für die Variable zu verwendenden Wert wählen soll, wobei der erste Wert außerhalb der Schleife erzeugt wird und der zweite Wert innerhalb der Schleife erzeugt wird; und eine zweite Datenflussanweisung einzufügen, wobei die zweite Datenflussanweisung auf Grundlage einer Schleifenausgang-Bedingung veranlasst, dass in einem nächsten Durchlauf der Schleife ein dritter Wert für die Variablen verwendet wird.
  14. Nichtflüchtiges maschinenlesbares Speichermedium oder mehrere nichtflüchtige maschinenlesbare Speichermedien nach einem beliebigen der Ansprüche 8 bis 13, wobei die Anweisungen den einen oder die mehreren Prozessoren veranlassen, die PHI-Anweisungen zu ersetzen, und zwar durch: Bestimmen, ob ein Kontrollabhängigkeitsgraph eines Satzes von PHI-Eingabeblöcken einen vollständigen Baum bildet; wenn der Kontrollabhängigkeitsgraph des Satzes von PHI-Eingabeblöcken einen vollständigen Baum bildet, Abbilden der PHI-Anweisung auf einen Baum von Datenflusskontrollanweisungen, wobei die Datenflusskontrollanweisungen jeweilige Werte zum Zuweisen zu jeweiligen Variablen auf Grundlage jeweiliger mit den PHI-Eingabeblöcken verknüpfter Verzweigungsbedingungen auswählen sollen; und wenn der Kontrollabhängigkeitsgraph des Satzes von PHI-Eingabeblöcken keinen vollständigen Baum bildet, Bestimmen von Prädikaten für die jeweiligen PHI-Eingabeblöcke und Einfügen einer Hardware-Anweisung, wobei die Hardware-Anweisung einen dritten Wert zum Zuordnen zu der Variablen auswählen soll, wobei der dritte Wert dem einem der PHI-Eingabeblöcke entspricht, der ein erfülltes Prädikat aufweist.
  15. Nichtflüchtiges maschinenlesbares Speichermedium oder mehrere nichtflüchtige maschinenlesbare Speichermedien nach Anspruch 14, wobei die Anweisungen den einen oder die mehreren Prozessoren veranlassen, die PHI-Anweisungen auf einen Baum von Datenflusskontrollanweisungen abzubilden, und zwar durch: Durchlaufen, ausgehend von jedem der PHI-Eingabeblöcke, eines Kontrollabhängigkeitsbaums des Kontrollabhängigkeitsgraphen aufwärts, bis ein Wurzelknoten erreicht wird; und Erzeugen, für jeden während des Durchlaufs vorgefundenen kontrollabhängigen übergeordneten Block, einer der Datenflusskontrollanweisungen.
  16. Verfahren zum Erzeugen eines Datenflussgraphen zur Ausführung auf einer Datenflussmaschine, das Verfahren beinhaltend: Modifizieren, durch Ausführen einer Anweisung mit mindestens einem Prozessor, einer Variablen in einem Satz von Anweisungen, wobei die Variable mehrere Male in dem Satz von Anweisungen verwendet wird, wobei der Satz von Anweisungen in Static-Single-Assignment-Form vorliegt; Ersetzen, durch Ausführen einer Anweisung durch mindestens einen Prozessor, einer in dem Satz von Anweisungen enthaltenen PHI-Anweisung durch einen Satz von Datenflusskontrollanweisungen; und Erzeugen, durch Ausführen einer Anweisung durch den mindestens einen Prozessor, des Datenflussgraphen auf Grundlage des Satzes von Anweisungen, nachdem die Variable modifiziert worden ist und die PHI-Anweisung ersetzt worden ist.
  17. Verfahren nach Anspruch 16, ferner beinhaltend: Identifizieren der Variablen in dem Satz von Anweisungen; und Identifizieren eines Teilsatzes des Satzes von Anweisungen, wobei der Teilsatz eine Vielzahl von Instanzen darstellt, in denen die Variable verwendet wird.
  18. Verfahren nach Anspruch 17, wobei das Modifizieren der Variablen beinhaltet: Identifizieren einer frühest auftretenden Instanz der Variablen und einer später auftretenden Instanz oder mehrerer später auftretenden Instanzen der Variablen; Ersetzen der einen später auftretenden Instanz oder der mehreren später auftretenden Instanzen der Variablen durch neue Variablen, wobei die neuen Variablen einzigartig sind; und Kopieren des Wertes der aus der frühest auftretenden Instanz resultierenden Variablen auf die neuen Variablen.
  19. Verfahren nach Anspruch 18, ferner beinhaltend: Bestimmen, ob die Variable außerhalb einer Schleife definiert und in der Schleife verwendet wird; und Einfügen von Datenflusskontrollanweisungen in den Satz von Anweisungen, wobei die Datenflusskontrollanweisungen veranlassen, dass in jeweiligen Durchläufen der Schleife jeweilige Werte für die Variable erzeugt werden.
  20. Verfahren nach Anspruch 19, ferner beinhaltend: Einfügen einer ersten Datenflusskontrollanweisung in den Satz von Anweisungen, wobei die erste Datenflusskontrollanweisung zwischen einem ersten für die Variable zu verwendenden Wert und einem zweiten für die Variable zu verwendenden Wert wählen soll, wobei der erste Wert außerhalb der Schleife und der zweite Wert innerhalb der Schleife erzeugt wird; und Einfügen einer zweiten Datenflussanweisung, wobei die zweite Datenflussanweisung auf Grundlage einer Schleifenausgang-Bedingung veranlassen soll, dass in einem nächsten Durchlauf der Schleife ein dritter Wert für die Variable verwendet wird.
  21. Verfahren nach einem beliebigen der Ansprüche 17 bis 20, wobei Ersetzen der PHI-Anweisung beinhaltet: Bestimmen, ob ein Kontrollabhängigkeitsgraph eines Satzes von PHI-Eingabeblöcken einen vollständigen Baum bildet; wenn der Kontrollabhängigkeitsgraph des Satzes von PHI-Eingabeblöcken einen vollständigen Baum bildet, Abbilden der PHI-Anweisung auf einen Baum von Datenflusskontrollanweisungen, wobei die Datenflusskontrollanweisungen jeweilige Werte zum Zuweisen zu jeweiligen Variablen auf Grundlage jeweiliger mit den PHI-Eingabeblöcken verknüpfter Verzweigungsbedingungen auswählen sollen; und wenn der Kontrollabhängigkeitsgraph des Satzes von PHI-Eingabeblöcken keinen vollständigen Baum bildet: Bestimmen von Prädikaten für die jeweiligen PHI-Eingabeblöcke; und Einfügen einer Hardware-Anweisung, wobei die Hardware-Anweisung einen dritten Wert zum Zuweisen zu der Variablen auswählen soll, wobei der dritte Wert dem einem der PHI-Eingabeblöcke entspricht, der ein erfülltes Prädikat aufweist.
  22. Verfahren nach Anspruch 21, wobei das Abbilden der PHI-Anweisung auf den Baum von Datenflusskontrollanweisungen beinhaltet: Durchlaufen, ausgehend von jedem der PHI-Eingabeblöcke, eines Kontrollabhängigkeitsbaums des Kontrollabhängigkeitsgraphen, bis ein Wurzelknoten erreicht wird; und Erzeugen, für jeden während des Durchlaufs vorgefundenen kontrollabhängigen übergeordneten Block, einer der Datenflusskontrollanweisungen, die in dem Baum von Datenflusskontrollanweisungen enthalten sind.
  23. Vorrichtung zum Abbilden eines Satzes von Anweisungen auf einen Datenflussgraphen zur Ausführung durch eine Datenflussmaschine: Mittel zum Modifizieren einer Variablen in dem Satz von Anweisungen, wobei die Variable mehrere Male in dem Satz von Anweisungen verwendet wird, wobei der Satz von Anweisungen in Static-Single-Assignment-Form vorliegt; Mittel zum Ersetzen einer in dem Satz von Anweisungen enthaltenen PHI-Anweisung durch einen Satz von Datenflusskontrollanweisungen; und Mittel zum Abbilden des durch das Mittel zum Modifizieren der Variablen und das Mittel zum Ersetzen der PHI-Anweisungen modifizierten Satzes von Anweisungen auf einen Datenflussgraphen, ohne dass die Anweisungen aus der Static-Single-Assignment-Form transformiert werden.
  24. Vorrichtung nach Anspruch 23, ferner beinhaltend: Mittel zum Analysieren des Satzes von Anweisungen durch: Identifizieren der Variablen, die in dem Satz von Anweisungen mehrmals verwendet wird; und Identifizieren eines Teilsatzes des Satzes von Anweisungen, wobei der Teilsatz eine Vielzahl von Instanzen darstellt, in denen die Variable verwendet wird.
  25. Vorrichtung nach Anspruch 24, wobei das Mittel zum Modifizieren der Variablen die Variable modifizieren soll, und zwar durch: Identifizieren einer frühest auftretenden Instanz der Variablen und einer später auftretenden Instanz oder mehrerer später auftretenden Instanzen der Variablen; Ersetzen der einen später auftretenden Instanz oder der mehreren später auftretenden Instanzen der Variablen durch neue Variablen, wobei die neuen Variablen einzigartig sind; und Kopieren des Wertes der aus der frühest auftretenden Instanz resultierenden Variablen auf die neuen Variablen.
DE102018214541.5A 2017-09-29 2018-08-28 Verfahren und vorrichtung zum abbilden von single-static-assignment-anweisungen auf einen datenflussgraphen in einer datenflussarchitektur Pending DE102018214541A1 (de)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US15/721,454 US10346144B2 (en) 2017-09-29 2017-09-29 Methods and apparatus to map single static assignment instructions onto a data flow graph in a data flow architecture
US15/721,454 2017-09-29

Publications (1)

Publication Number Publication Date
DE102018214541A1 true DE102018214541A1 (de) 2019-04-04

Family

ID=65728148

Family Applications (1)

Application Number Title Priority Date Filing Date
DE102018214541.5A Pending DE102018214541A1 (de) 2017-09-29 2018-08-28 Verfahren und vorrichtung zum abbilden von single-static-assignment-anweisungen auf einen datenflussgraphen in einer datenflussarchitektur

Country Status (3)

Country Link
US (1) US10346144B2 (de)
CN (1) CN109582368A (de)
DE (1) DE102018214541A1 (de)

Families Citing this family (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10776087B2 (en) * 2018-06-25 2020-09-15 Intel Corporation Sequence optimizations in a high-performance computing environment
CN111857815A (zh) * 2019-04-24 2020-10-30 华为技术有限公司 指令处理的方法及装置
CN111930680B (zh) * 2020-09-17 2021-02-23 北京清微智能科技有限公司 一种可重构阵列映射方法和装置

Family Cites Families (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH0814817B2 (ja) * 1986-10-09 1996-02-14 株式会社日立製作所 自動ベクトル化方法
US6072952A (en) * 1998-04-22 2000-06-06 Hewlett-Packard Co. Method and apparatus for coalescing variables
US8296748B2 (en) * 2008-07-24 2012-10-23 Intel Corporation Method and system for intermediate representation of source code

Also Published As

Publication number Publication date
CN109582368A (zh) 2019-04-05
US20190102151A1 (en) 2019-04-04
US10346144B2 (en) 2019-07-09

Similar Documents

Publication Publication Date Title
DE102018214541A1 (de) Verfahren und vorrichtung zum abbilden von single-static-assignment-anweisungen auf einen datenflussgraphen in einer datenflussarchitektur
DE202013012465U1 (de) End-to-End-Exposition von nativen Datentypen an Drittanbieteranwendungen
DE202014010938U1 (de) Omega-Namen: Namenserzeugung und -ableitung
DE112013005993T5 (de) Verfahren, Vorrichtung und computerlesbares Medium für eine optimale Bestimmung von Daten-Teilmengen
DE112018001789T5 (de) Systeme und verfahren zum durchführen von datenverarbeitungsoperationen unter verwendung von parallelität variabler grade
DE112020003431T5 (de) Automatisches umwandeln eines programms, das in einer prozeduralen programmiersprache geschrieben ist, in einen datenflussgraphen, sowie zugehörige systeme und verfahren
DE102021204550A1 (de) Verfahren zum Erzeugen wenigstens eines Datensatzes zum Trainieren eines Algorithmus maschinellen Lernens
DE202016008006U1 (de) Generierung von Integrationstests im Kleinen
EP1622022A1 (de) Automatische Erzeugung von Testfällen
DE102009041098A1 (de) Verfahren zur Kennzeichnung eines in einem Computerspeichersystem enthaltenden Computerprogrammabschnitts
DE102012210482A1 (de) Verfahren und System zum Migrieren von Geschäftsprozessinstanzen
EP1202166B1 (de) System zur Verifikation von Software-Anwendungsmodellen in Ketten von Software-Entwurfswerkzeugen
AT522281A1 (de) Verfahren zur Charakterisierung des Betriebszustands eines Computersystems
DE102020203951A1 (de) Verfahren zur dynamischen Datenminimierung eines Datensatzes mittels Whitelisting
DE10325843B4 (de) Verfahren, Drucksystem, Computer und Computerprogramm zum Verwalten von Resourcen zur Verwendung in einem resourcenbasierten Dokumentendatenstrom
DE112020003888T5 (de) De-identifizierungscode für organisationsübergreifendes fehlerbehebungswissen
WO2010034548A1 (de) Testmodul und verfahren zum testen einer o/r-abbildungs-middleware
DE112020000536T5 (de) Erweiterbares überspringen von daten
EP2757466B1 (de) Computerimplementiertes Verfahren zum Generieren von Computerprogrammcode
EP2682866B1 (de) Verfahren zur Umsetzung von Datenformaten
WO2014131430A1 (de) Verfahren zur modellbasierten softwareentwicklung von programmen mit datenbankzugriff
DE102012202603B3 (de) Verfahren zur modellbasierten Softwareentwicklung von Programmen mit Datenbankzugriff
DE10300541A1 (de) Erzeugen einer ausführbaren Datei
DE112016005141T5 (de) Systeme und verfahren zum ableiten von orientierungspunkttrennzeichen zurprotokollanalyse
DE112021004637T5 (de) Transformieren von operationen eines computerprogramms zur ausführung in einer datenbank