-
STELLUNGNAHME BEZÜGLICH REGIERUNGSFÖRDERUNG
-
Diese Erfindung wurde mit Hilfe von Regierungsförderung nach Vertragsnummer H98230A-13-D-0124, die vom Verteidigungsministerium gewährt wurde, gemacht. Die Regierung hat gewisse Rechte an dieser Erfindung.
-
TECHNISCHES GEBIET
-
Diese Offenbarung bezieht sich im Allgemeinen auf eine Technologie zum Konvertieren eines Computerprogramms von einer Architektur in eine andere. Insbesondere bezieht sich diese Offenbarung auf Verfahren und Vorrichtungen, die Steuerabhängigkeitsgraphen verwenden, um Steuerflussprogramme automatisch in Datenflussprogramme zu konvertieren.
-
HINTERGRUND
-
Ein Datenverarbeitungssystem (DPS) kann Hardware- und Softwarekomponenten umfassen. Die Hardwarekomponenten können einen Prozessor, einen Direktzugriffsspeicher (RAM) und nichtflüchtige Speicher (NVS) umfassen. Die Softwarekomponenten können viele verschiedene Arten von Computerprogrammen umfassen. Das DPS kann die Softwarekomponenten ausführen, indem es sie von dem NVS in den RAM kopiert und sie dann auf dem Prozessor ausführt.
-
Ein Prozessor kann über seine Designarchitektur und über seine Befehlssatzarchitektur (ISA) beschrieben werden. Herkömmliche Prozessoren folgen typischerweise der Neumann-Architektur, der Harvard-Architektur, der modifizierten Harvard-Architektur oder ähnlichen Architekturen. Nach einer beliebigen dieser Architekturen kann die Designarchitektur für den Prozessor oder die Verarbeitungseinheit eine arithmetisch-logische Einheit und eine Steuereinheit umfassen, wobei die Steuereinheit einen Programmzähler beinhaltet. Um ein Ausführen eines Programms zu starten, wird die Adresse für den ersten Befehl in diesem Programm in den Programmzähler geladen. Der Prozessor ruft dann den Befehl an dieser Adresse ab, führt den Befehl aus und inkrementiert den Programmzähler, damit er auf den nächsten sequentiellen Befehl in dem Programm weist. Der Prozessor kann diesen Abrufzyklus wiederholen, bis der letzte Befehl des Programms ausgeführt worden ist. Das Programm kann allerdings einen Steuerungstransferbefehl (z. B. einen Verzweigungsbefehl) verwenden, um die Ausführungsabfolge zu ändern. Ein Steuerungstransferbefehl kann auch als ein „Steuerflussbefehl“ bezeichnet werden. Zum Beispiel kann ein Verzweigungsbefehl (oder ein weiterer Steuerflussbefehl) den Prozessor dazu veranlassen, den Inhalt des Programmzählers mit der Adresse eines Befehls, der sich von dem nächsten sequentiellen Befehl unterscheidet, ersetzen. Zusätzlich kann ein Steuerflussbefehl in Abhängigkeit von dem Wahrheitsgehalt einiger Annahmen Modifikationen an dem Programmzähler vornehmen (z. B. zweige ab, falls der Inhalt spezifischer Register nicht gleich null ist). Folglich kann das Programm unter verschiedenen Bedingungen verschiedene Befehlssequenzen ausführen. Einige herkömmlichen Steuerflussbefehle umfassen bedingte Anweisungen (z. B. if then else (wenn dann sonst)) und Schleifenanweisungen (z. B. for (für), while (solange)).
-
Für die Zwecke dieser Offenbarung kann ein Computerbefehl zum direkt Steuern oder Ändern des Steuerflusses als ein „Steuerflussbefehl“ bezeichnet werden. Viele verschiedene Sprachen stellen viele verschiedene Arten von Steuerflussbefehlen bereit. Eine kleine Auswahl von Steuerflussbefehlen umfasst ohne Einschränkung Befehle wie (a) if then else (b) for (c) while (d) branch (zweige ab) (e) branch if equal (zweige ab falls gleich).
-
In ähnlicher Weise kann eine Computersprache, die Steuerflussbefehle enthält, als eine „Steuerflusssprache“ bezeichnet werden und ein Computerprogramm, das in einer Steuerflusssprache implementiert oder geschrieben ist, kann als „Steuerflussprogramm“ bezeichnet werden. Der Prozessor, der eine oder mehrere Steuerflusssprachen oder -programme unterstützt, kann als „Steuerflussprozessor“ bezeichnet werden und eine „Steuerflussarchitektur“ aufweisen.
-
Figurenliste
-
- 1 ist ein Blockdiagramm eines Ausführungsbeispiels eines Datenverarbeitungssystems mit Komponenten, das einen Datenflussprozessor und einen Datenflusskonvertierer umfasst.
- 2 ist ein Blockdiagramm mit Ausführungsbeispielen verschiedener Graphen, die von dem Datenflusskonvertierer verwendet werden, um ein Steuerflussprogramm in ein Datenflussprogramm zu konvertieren.
- 3 zeigt ein Ablaufdiagramm eines Ausführungsbeispiels eines Prozesses zum Erzeugen eines Steuerabhängigkeitsgraphs.
- 4 zeigt ein Ablaufdiagramm eines Ausführungsbeispiels eines Prozesses zum Identifizieren von Steuerabhängigkeitsregionen.
- 5 zeigt ein Ablaufdiagramm eines Ausführungsbeispiels eines Prozesses zum Erzeugen eines Datenflussgraphen.
- 6 zeigt ein Ausführungsbeispiel eines Datenflussgraphen.
- 7 zeigt ein weiteres Ausführungsbeispiel eines Steuerflussgraphen.
- 8 zeigt ein weiteres Ausführungsbeispiel eines Steuerabhängigkeitsgraphen.
-
Beschreibung von Ausführungsformen
-
Herkömmliche Prozessoren sind typischerweise Steuerflussprozessoren. Informatiker sind allerdings momentan dabei, Prozessoren zu entwickeln, die es ermöglichen, Programme ohne Steuerflussbefehle auszuführen. Insbesondere entwickeln Informatiker einen Prozessortyp, der keinen Programmzähler verwendet, um den Ablauf der Programmausführung zu steuern. Genauer gesagt steuert der Prozessor, anstelle den Ausführungsablauf basierend auf einem Programmzähler zu steuern, den Ausführungsablauf basierend auf der Verfügbarkeit von Daten, auf die von den Befehlen des Programms verwiesen wird. Dieser Designtyp kann als eine „Datenflussarchitektur“ bezeichnet werden. Ähnlich kann ein Prozessor mit einer Datenflussarchitektur als „Datenflussprozessor“ bezeichnet werden. Ebenso ist für die Zwecke dieser Offenbarung eine Datenflusssprache eine Computersprache mit Befehlen zum Manipulieren von Daten, aber ohne Steuerflussbefehle. Ähnlich ist ein Datenflussbefehl ein Computerbefehl aus einer Datenflusssprache und ein Datenflussprogramm ist ein Computerprogramm, das in einer Datenflusssprache verkörpert oder codiert ist. Dementsprechend ist ein Datenflussprozessor dazu in der Lage, Datenflussprogramme auszuführen und Datenflussprogramme verwenden keine Steuerflussbefehle.
-
Um ein Computerprogramm direkt auf einem Prozessor auszuführen, kann die Architektur für den Prozessor es erfordern, dass das Programm in Maschinensprache oder Maschinencode ausgedrückt wird. Die Maschinensprachversion oder der Maschinensprachausdruck eines Programmes kann als Ausdruck niedrigster Ebene betrachtet werden. Softwareentwickler allerdings schreiben oder erdenken üblicherweise Programme in Sprachen höherer Ebene wie beispielsweise Assembler, C etc. Der Ausdruck höchster Ebene eines Programms kann als der „Quellcode“ für das Programm bezeichnet werden. Die Softwareentwickler können dann Dienstprogramm wie Compiler, Assembler und Linker verwenden, um den Quellcode für ein Programm in einen Ausdruck niedrigerer Ebene für dieses Programm zu konvertieren. Solche Dienstprogramme können im Allgemeinen als „Übersetzer“ bezeichnet werden.
-
Zusätzlich können Softwareentwickler Übersetzer verwenden, um Code von einer Sprache in eine andere zu übersetzen, wobei keine dieser Sprachen notwendigerweise auf einer niedrigeren Ebene sein muss als die andere. Der Code, der als Eingabe dient, kann trotzdem als der „Quellcode“ oder das „Quellprogramm“ bezeichnet werden und der Code, der erzeugt wird, kann als „Objektcode“ bezeichnet werden.
-
Zusätzlich oder alternativ kann ein Dienstprogramm, das als „Interpretierer“ bezeichnet wird, dazu verwendet werden, einen Ausdruck hoher Ebene eines Programms oder eines Prozessors auszuführen. Zum Beispiel kann ein Maschinensprachausdruck des Interpretierers direkt auf dem Prozessor ausgeführt werden und der Ausdruck hoher Ebene des Programms kann auf dem Interpretierer ausgeführt werden.
-
Um ein Computerprogramm zu erschaffen, das eine bestimmte Aufgabe oder eine Menge von Aufgaben durchführt, kann es für einen Softwareentwickler einfacher sein, das Programm als ein Steuerflussprogramm zu schreiben als als ein Datenflussprogramm. Zusätzlich existieren schon viele verschiedene Typen von Steuerflussprogrammen und es kann wünschenswert sein, viele dieser Programme in Datenflussprogramme zu konvertieren, um die konvertierten Programme dazu zu befähigen, auf Datenflussprozessoren zu laufen. Wie oben angegeben bezieht sich die vorliegende Offenbarung auf eine Technologie zum automatischen Konvertieren von Steuerflussprogrammen in Datenflussprogramme. Insbesondere bezieht sich die vorliegende Offenbarung wie unten genauer beschrieben auf Verfahren und eine Vorrichtung, die Steuerabhängigkeitsgraphen verwenden, um Steuerflussprogramme in Datenflussprogramme zu konvertieren.
-
Insbesondere kann ein Dienstprogramm, das als Datenflusskonvertierer bekannt ist, dazu verwendet werden, ein Steuerflussprogramm in ein Datenflussprogramm zu konvertieren. Und wie unten genauer beschrieben kann der Datenflusskonvertierer als Teil des Konvertierungsprozesses verschiedene Teile des Steuerflussprogramms unterschiedlichen Steuerabhängigkeitsregionen zuordnen. Der Datenflusskonvertierer kann dann jede Definition und jeden Gebrauch jeder Variablen in dem Steuerflussprogramm berücksichtigen. Wenn sich die Definition in einer anderen Region befindet als die Anwendung, kann der Datenflusskonvertierer bestimmen, dass ein bestimmter Datenflussbefehl benötigt wird. Wie nachfolgend angegeben kann dieser Befehl als ein Schaltbefehl (Switch) bezeichnet werden. Wie unten genauer beschrieben kann der Schaltbefehl basierend auf einer Verzweigungsbedingung des Definitionsbereichs einen Wert in einen bestimmten Kanal leiten. Darüber hinaus kann es der hierin beschriebene Ansatz dem Datenflusskonvertierer ermöglichen zu vermeiden, unnötige Datenflussbefehle einzufügen, und dadurch den Datenflussgraphen klein halten.
-
Diese Offenbarung zeigt ein Ausführungsbeispiel, in der der Datenflusskonvertierer als Teil eines Compilers implementiert ist. Wie unten genauer beschrieben kann in anderen Ausführungsformen der Datenflusskonvertierer allerdings als Teil eines anderen Typs von Dienstprogramm oder als ein autonomes Dienstprogramm implementiert sein.
-
1 ist ein Blockdiagramm eines Ausführungsbeispiels eines Datenverarbeitungssystems 100 mit Komponenten, die einen Datenflussprozessor (DFP) 20 und einen Datenflusskonvertierer 32 umfassen. Der DFP 20 ist ein Prozessor, der den Ablauf der Ausführung basierend auf der Verfügbarkeit von Daten, auf die durch die Befehle eines Computerprogramms verwiesen wird, steuert, anstatt den Ablauf der Ausführung basierend auf einem Programmzähler zu steuern. Mit anderen Worten verwendet der Datenflussprozessor 20 eine Datenflussarchitektur. In der Ausführungsform von 1 umfasst der DFP 20 zahlreiche unterschiedliche Verarbeitungselemente (PEs) 22. Ein PE in einem Datenflussprozessor kann auch „Datenflusskern“ (DFC) genannt werden. Dementsprechend sind DFC 22 dazu fähig, Datenflussbefehle auszuführen. Der DFP 20 umfasst auch zahlreiche verschiedene Kommunikationskanäle 24, die es zumindest einigen der DFCs ermöglichen, mit zumindest einigen anderen DFC zu kommunizieren.
-
Ebenso ist zu Zwecken dieser Offenbarung ein Kommunikationskanal eine Datenspeicherkomponente innerhalb eines DFP, auf die von mehreren DFCs geschrieben und von der von mehreren DFCs gelesen werden kann. Zu Zwecken dieser Offenbarung sollte, wenn es der Kontext nicht klar anders erfordert, ein „Kanal“ so verstanden werden, dass er sich auf einen Kommunikationskanal in einem DFP bezieht. Ein Kanal kann in mancher Hinsicht wie ein Register arbeiten. Der primäre Zweck eines Kanals ist typischerweise allerdings, als Puffer zu dienen, um Eingaben mit ihrem Verbraucher zu verbinden. Typischerweise verbrauchen oder produzieren Datenflussbefehle mindestens einen Kanal.
-
Wie oben gezeigt basiert der Ablauf der Ausführung in dem DFP 20 auf der Verfügbarkeit der Daten, die in die Befehle des Datenflussprogramms eingespeist werden. Somit wird jeder DFC 22 in dem DFP 20 durch seine Eingaben gesteuert.
-
In einer Ausführungsform ist jeder DFC 22 relativ einfach, wobei ein einzelner Kern nur 16 oder weniger Befehle unterstützt. Ebenso können verschiedene DFCs in dem DFP 20 in der Lage sein, verschiedene Sätze von Datenflussbefehlen auszuführen. Dementsprechend kann der DFP 20 auch als „Datenflussbeschleuniger“ (DFA) bezeichnet werden. Somit ist ein DFA eine integrierte Schaltung mit zahlreichen DFCs und zahlreichen Kanälen zum Verknüpfen der DFCs.
-
Ferner kann ein DFA dynamisch konfigurierbar sein. Als Beispiel kann der DFP 20 einen DFA-Manager und verschiedene feldprogrammierbare Gatteranordnungen (FPGA) oder ähnliche Einrichtungen umfassen und der DFA-Manager kann diese Einrichtungen dazu verwenden, dynamisch die Anzahl der DFCs 22, die Typen der DFCs 22, die Anzahl der Kanäle 24 und andere Aspekte des DFP 20 zu konfigurieren oder umzukonfigurieren. Der DFA-Manager kann den DFP 20 beispielsweise basierend auf einem Datenflussgraphen konfigurieren. Und um den Typ eines DFC zu ändern, kann der DFA-Manager ein oder mehrere FPGA (oder ähnliche Einrichtungen) in dem DFC konfigurieren, um den DFC von einem „ADDIER“-Kern für eine Anwendung zu einem „MULTIPLIZIER“-Kern für eine weitere Anwendung zu ändern. In einer Ausführungsform oder einem Szenario kann der DFP 20 Hunderte (z. B. 512) DFCs und Hunderte (z. B. 512) Kanäle umfassen. In anderen Ausführungsformen oder Szenarios kann der DFP 20 eine größere oder kleinere Anzahl von DFCs und Kanälen aufweisen. Und wie oben gezeigt kann in einer Ausführungsform oder einem Szenario die Anzahl der DFCs und Kanäle dynamisch für verschiedene Anwendungen geändert werden.
-
In der Ausführungsform von 1 umfasst das DPS 100 auch einen herkömmlichen Steuerflussprozessor (CFP) 10, sowie einen NVS 14 und einen RAM 12. Der CFP 10 und der DFP 20 können dazu fähig sein, von dem RAM 12 und dem NVS 14 zu lesen und darauf zu schreiben.
-
Der NVS 14 enthält einen Compiler 30 und der Compiler 30 umfasst einen Datenflusskonvertierer 32. Der Compiler 30 kann auf dem CFP 10 ausgeführt werden. Zum Beispiel kann der CFP 10 den Compiler 30 von dem NVS 14 in den RAM 12 kopieren und der CFP 10 kann dann den Compiler 30 aus dem RAM 12 heraus ausführen. In der Ausführungsform von 1 enthält der NVS 14 zudem ein Steuerflussprogramm 40, das in ein Datenflussprogramm 54 konvertiert werden soll. Dieses Datenflussprogramm ist als Quellprogramm 40 gezeigt. Wie unten genauer beschrieben kann der Compiler 30, wenn der Compiler 30 ausführt, den Datenflusskonvertierer 32 dazu verwenden, das Quellprogramm 40 in das Datenflussprogramm 54 zu konvertieren. Zum Beispiel kann der Compiler 30 wie gezeigt das Quellprogramm 40 von dem NVS 14 in den RAM 12 kopieren und der Compiler 30 kann dann den Datenflusskonvertierer 32 verwenden, um das Quellprogramm 40 in das Datenflussprogramm 54 zu konvertieren. Das Datenflussprogramm kann dann auf dem DFP 20 ausgeführt werden. Zusätzlich oder alternativ kann der Compiler 30 das Datenflussprogramm 54 für zukünftige Verwendung von dem RAM 12 in den NVS 14 kopieren.
-
Das DPS 100 kann auch verschiedene zusätzliche Komponenten wie etwa einen Netzschnittstellencontroller (NIC) 16 zum Kommunizieren mit anderen DPS über ein Netz etc. umfassen.
-
Das Quellprogramm 40 umfasst zahlreiche Steuerflussbefehle. Das Datenflussprogramm 54 umfasst keine Steuerflussbefehle. Allerdings sind das Quellprogramm 40 und das Datenflussprogramm 54 unterschiedliche Repräsentationen oder Verkörperungen von Code, um dieselbe Aufgabe oder dieselben Aufgaben zu erfüllen. Folglich können aus einem Blickwinkel das Quellprogramm 40 und das Datenflussprogramm 54 als verschiedene Ausführungsformen oder Implementierungen desselben Programms verstanden werden. Zusätzlich kann wie unten genauer beschrieben der Datenflusskonvertierer 32 eine oder mehrere Zwischenrepräsentationen (IR) dieses Programms erzeugen. Solche IR können auch als verschiedene Ausführungsformen oder Implementierungen desselben Programms verstanden werden.
-
Wie oben gezeigt ist in der Ausführungsform von 1 der Datenflusskonvertierer 32 als Teil des Compilers 30 implementiert. In einer Ausführungsform oder einem Szenario wird der Compiler 30 dazu verwendet, Programme im Voraus zu kompilieren, wobei Objektcode produziert wird, der später ausgeführt werden kann. In einer alternativen Ausführungsform oder einem alternativen Szenario kann ein Datenflusskonvertierer Teil eines Just-in-Time-Compilers (JIT-Compilers) oder entsprechenden Interpretierers sein, der den Quellcode für ein Programm in Objektcode konvertiert, während das Programm läuft. Ebenso befindet sich in der Ausführungsform von 1 der Compiler 30 im Allgemeinen in dem NVS 14 und das DPS 100 lädt den Compiler 30 in den RAM 12 und führt den Compiler 30 aus dem RAM 12 heraus aus, wenn der Compiler 30 benötigt wird. In einer weiteren Ausführungsform kann ein DPS einen Compiler auf einem Prozessor laufen lassen, ohne den Compiler in den RAM zu laden. Zum Beispiel kann der Compiler aus dem Speicher heraus auf dem Prozessor ausgeführt werden.
-
Zu Zwecken dieser Offenbarung ist ein Übersetzer ein Computerprogramm, das in einem anderen Programm (dem „Eingabecode“) in einer Sprache liest und ein entsprechendes Programm (den „Ausgabecode“) ausgibt. Zum Beispiel sind Compiler und Interpretierer Typen von Übersetzern. Zu Zwecken dieser Offenbarung kann der Eingabecode für einen Übersetzer als „Quellcode“ bezeichnet werden und der Ausgabecode kann als „Objektcode“ bezeichnet werden. Ebenso ist zu Zwecken dieser Offenbarung ein Compiler ein Typ eines Übersetzers, der ein Programm in einer Sprache hoher Ebene (z. B. C) als Eingabe akzeptiert und ein entsprechendes Programm in einer Sprache niedrigerer Ebene (z. B. Assemblercode) ausgibt. Obwohl 1 den Datenflusskonvertierer 32 als Teil eines Compilers zeigt, kann in anderen Ausführungsformen ein Datenflusskonvertierer zudem als unabhängiger Übersetzer, als Teil anderer Übersetzertypen (z. B. ein Quell-zu-Quell-Übersetzer) oder komplett als Teil eines weiteren Programmtyps (z. B. ein Stück Mikrocode in einer Firmware, die Binärübersetzung von Steuerflusscode in Datenflusscode vornimmt) arbeiten. Zu Zwecken dieser Offenbarung ist ein Datenflusskonvertierer ein Programm, das ein Steuerflussprogramm in ein Datenflussprogramm konvertiert. Ferner beschreibt die vorliegende Offenbarung einen Datenflusskonvertierer, der solche Konvertierungen basierend auf Eingaben durchführt, die einen Steuerabhängigkeitsgraphen umfassen.
-
2 ist ein Blockdiagramm von Ausführungsbeispielen von verschiedenen Graphen und dergleichen, die von dem Datenflusskonvertierer 32 verwendet werden, um das Steuerflussprogramm 40 in das Datenflussprogramm 54 zu konvertieren. Insbesondere zeigt 2 einen Steuerflussgraphen 42, einen Steuerabhängigkeitsgraphen 44, eine Steuerabhängigkeitsregionsliste 46 und einen Datenflussgraphen 50.
-
Zu Zwecken der Veranschaulichung verwendet diese Offenbarung einen Pseudocode, um eine beispielhafte Befehlssauflistung für das Quellprogramm
40 darzustellen. Insbesondere kann das Quellprogramm
40 die folgende Sequenz von Befehlen enthalten:
-
In dem obigen Pseudocode ist der Operator% ein Modulooperator. Als Teil des Prozesses des Konvertierens des Quellprogramms
40 in das Steuerflussprogramm
54 kann der Datenflusskonvertierer
32 ein oder mehrere IRs des Quellprogramms
40 erzeugen. Eine IR („IR#1“) kann die folgende Sequenz von Befehlen enthalten:
-
Eine nachfolgende IR („IR#2“) kann Befehle aus IR#1 wie folgt in Basisblöcke (BBs) gruppieren:
-
Im obigen Beispiel kann IR#2 eine Syntax verwenden, die der Syntax ähnelt, die für eine IR von der Compiler-Infrastruktur verwendet wird, die mit den Namen oder Marken „Low Level Virtual Machine“ oder „LLVM“ bezeichnet wird.
-
Der Datenflusskonvertierer 32 kann dann den Steuerflussgraphen 42 basierend auf IR#2 erzeugen. Zu Zwecken dieser Offenbarung ist ein Steuerflussgraph für ein Programm eine Repräsentation dieses Programms, das alle möglichen oder möglichen Steuerungstransfers zwischen den Befehlen oder BBs des Programms identifiziert oder veranschaulicht. Zum Beispiel veranschaulicht der Steuerflussgraph 42 in 2 die möglichen Steuerflüsse für das Quellprogramm 40 wie folgt:
- • Steuerung kann von BB#0 entweder zu BB#1 oder BB#2 übergehen;
- • Steuerung kann von BB#1 nur zu BB#3 übergehen;
- • Steuerung kann von BB#3 entweder zu BB#4 oder BB#5 übergehen;
- • Steuerung kann von BB#4 nur zu BB#6 übergehen;
- • Steuerung kann von BB#5 nur zu BB#6 übergehen;
- • Steuerung kann von BB#6 entweder zu BB#3 oder BB#2 übergehen; und
- • Steuerung geht von BB#2 nicht zu irgendeinem anderen Block über.
-
Zu Veranschaulichungszwecken ist der Steuerflussgraph 42 jedoch in einer vereinfachten Form dargestellt. In der Praxis kann der Datenflusskonvertierer 32 zusätzliche Elemente in den Steuerflussgraphen (und möglicherweise in ein oder mehrere IRs für das Quellenprogramm) aufnehmen, um Grenzfälle und andere Situationen zu behandeln. Zum Beispiel kann der Datenflusskonvertierer 32 einen „Stamm-“BB, einen „Austritts“-BB und eine Kante von dem Stamm-BB zu dem Austritts-BB einfügen. Ein solcher Stamm-BB kann auch als Pseudo-Eingangs-BB bezeichnet werden. Eine weniger vereinfachte Version eines Steuerflussgraphs wird nachstehend in Bezug auf 7 beschrieben.
-
Darüber hinaus kann ein Steuerflussgraph in einer Textform oder einer visuellen Form vorliegen. 2 zeigt eine visuelle Form des Steuerflussgraphen 42. Zusätzlich oder alternativ kann der Datenflusskonvertierer 32 eine Textform für den Steuerflussgraphen 42 verwenden. Jede geeignete Datenstruktur oder Kombination von Datenstrukturen kann verwendet werden, um einen Steuerflussgraphen in Textform zu beschreiben. Zum Beispiel kann der Datenflusskonvertierer 32 den Steuerflussgraphen 42 im DPS 100 unter Verwendung von einem oder mehreren Datensätzen, Arrays, Zeigern oder irgendeiner anderen geeigneten Datenstruktur oder Kombination von Datenstrukturen speichern.
-
Der Datenflusskonvertierer 32 kann dann den Steuerflussgraphen 42 verwenden, um (in einer Textform, in einer visuellen Form oder in beiden Formen) den Steuerabhängigkeitsgraphen 44 für das Quellprogramm 40 zu erzeugen. Zu Zwecken dieser Offenbarung ist ein Steuerabhängigkeitsgraph für ein Programm eine Repräsentation dieses Programms, die einige oder alle Steuerflussabhängigkeiten zwischen Befehlen oder BBs in diesem Programm gemäß einer bestimmten Definition von „Steuerabhängigkeit“ identifiziert oder veranschaulicht.
-
Insbesondere kann gemäß der vorliegenden Offenbarung der Datenflusskonvertierer 32 eine sehr spezielle Definition der Steuerabhängigkeit verwenden, um zu bestimmen, welche Blöcke von sich selbst oder von anderen Blöcken steuerabhängig sind. Diese Definition kann mit den folgenden Regeln ausgedrückt werden:
- 1. Wenn zwei Punkte (A, B) eines Programms gegeben sind und mehr als ein Weg von A bis zu dem Ende existiert, wobei ein Weg durch B verläuft und der andere nicht, dann ist B von A abhängig.
- 2. Ein Punkt ist (a) ein Befehl oder ein Basisblock oder (b) eine Instanz oder Iteration in einer Schleife eines Befehls oder eines Basisblocks.
-
Zudem verwendet der Datenflusskonvertierer 32 gemäß der vorliegenden Offenbarung folgende Regel zum Erzeugen der Steuerabhängigkeitsgraphen:
- Es existiert genau dann eine Kante von A nach B in dem Steuerabhängigkeitsgraphen, wenn B von A abhängig ist.
-
Zu Zwecken dieser Offenbarung kann dann, wenn der Punkt B von dem Punkt A steuerabhängig ist, der Punkt A als „Elter“ des Punktes B bezeichnet werden. Wenn Punkt B direkt von dem Punkt A steuerabhängig ist, kann Punkt A als „direkter Elter“ von Punkt B bezeichnet werden. Wenn jedoch die Steuerabhängigkeit nicht unmittelbar (oder „direkt“) ist, kann Punkt A als der „indirekte Elter“ von Punkt B bezeichnet werden.
-
Da verschiedene Instanzen eines Befehls oder BB in einer Schleife als unterschiedliche Punkte betrachtet werden können, kann ein Befehl oder BB auch ein Elter von sich selbst sein. Zum Beispiel hat BB#6 in dem Steuerabhängigkeitsgraph 44 die folgenden direkten Elternknoten: BB#0 und BB#6.
-
3 zeigt ein Ablaufdiagramm eines Ausführungsbeispiels eines Prozesses zum Erzeugen eines Steuerabhängigkeitsgraphen. Zum leichteren Verständnis veranschaulicht 3 einen vereinfachten Prozess. Fachleute werden erkennen, dass der Prozess in der Praxis deutlich abgewandelt werden kann, um die Effizienz usw. zu erhöhen. In einer Ausführungsform kann ein Datenflusskonvertierer einen Prozess wie den in dem Artikel von Ron Cytron et al. mit dem Titel „Kompakte Repräsentationen für Steuerabhängigkeit“ (im Folgenden „Cytron“) beschriebenen verwenden, um einen Steuerabhängigkeitsgraphen zu erzeugen. Cytron sorgt jedoch für sogenannte „schwache Regionen“. Im Gegensatz dazu kann gemäß der vorliegenden Offenbarung der Datenflusskonvertierer 32 einen Prozess verwenden, der für starke Regionen sorgt.
-
Der Prozess von 3 kann beginnen, nachdem der Datenflusskonvertierer 32 IR#2 und den Steuerflussgraphen 42 erzeugt hat. In einer Ausführungsform verwendet der Datenflusskonvertierer 32 IR#2 und den Steuerflussgraphen 42, um die in 3 dargestellten Bestimmungen durchzuführen, wie es durch die gestrichelten Pfeile in 2 veranschaulicht ist, die von dem Quellenprogramm 40 und dem Steuerflussgraphen 42 zu dem Steuerabhängigkeitsgraphen 44 führen. Wie in Block 210 von 3 gezeigt kann der Datenflusskonvertierer 32 dann das Erzeugen des Steuerabhängigkeitsgraphen 44 durch Bestimmen, ob der Datenflusskonvertierer 32 alle BBs auf Abhängigkeit analysiert hat, beginnen. Insbesondere kann der Datenflusskonvertierer 32 bestimmen, ob schon alle möglichen primären BBs in dem Steuerflussgraphen 42 analysiert worden sind. Wenn noch nicht alle möglichen primären BBs analysiert worden sind, kann der Datenflusskonvertierer 32 dann einen BB auswählen, der als primärer BB (oder „Punkt A“) zu betrachten ist, wie es in Block 212 gezeigt ist. Wie in Block 220 gezeigt kann der Datenflusskonvertierer 32 dann bestimmen, ob alle möglichen sekundären BBs in Verbindung mit diesem primären BB analysiert worden sind. Wenn es keine möglichen sekundären BBs zu analysieren (oder keine weiteren möglichen sekundären BBs zu analysieren) gibt, kann der Prozess zu Block 210 und möglicherweise 212 zurückkehren, wobei der Datenflusskonvertierer 32 möglicherweise einen neuen BB auswählt, der als primärer BB dient.
-
Wenn es jedoch mindestens einen möglichen sekundären BB zu analysieren gibt, kann der Datenflusskonvertierer 32 einen möglichen sekundären BB auswählen, der als der sekundäre BB (oder „Punkt B“) zu betrachten ist, wie es in Block 222 gezeigt ist. Der sekundäre BB kann (a) ein anderer BB als der primäre BB oder (b) eine andere Instanz des primären BB in einer Schleife sein.
-
Wie in Block 230 gezeigt kann der Datenflusskonvertierer 32 dann bestimmen, ob irgendein Weg in dem Steuerflussgraphen 42 von dem primären BB zu dem Ende des Programms den sekundären BB enthält. Als Antwort auf eine positive Bestimmung kann der Datenflusskonvertierer 32 dann bestimmen, ob irgendein Weg von dem primären BB zu dem Ende des Programms den sekundären BB nicht enthält, wie es in Block 240 gezeigt ist. Als Antwort auf positive Bestimmungen in Block 230 und 240 kann der Datenflusskonvertierer 32 den sekundären BB als von der primären BB steuerabhängig kennzeichnen, wie es in Block 242 gezeigt ist. Der Prozess von 3 kann dann zu Block 220 zurückkehren, wo der Datenflusskonvertierer 32 bestimmt, ob nun alle möglichen sekundären BBs analysiert worden sind.
-
Alternativ kann der Prozess als Antwort auf eine negative Bestimmung in Block 230 oder 240 zu Block 220 zurückkehren. Wenn zusätzliche mögliche sekundäre BBs analysiert werden müssen, kann der Datenflusskonvertierer 32 diese BBs wie oben beschrieben analysieren. Und nachdem alle möglichen sekundären BBs analysiert worden sind, kann der Prozess von Block 220 zu Block 210 übergehen, wo der Datenflusskonvertierer 32 einen neuen BB auswählt, der als der primäre BB zu betrachten ist, falls noch irgendwelche solche BBs in Betracht zu ziehen sind, wie es oben angegeben ist. Nachdem alle BBs auf ihre Abhängigkeit analysiert worden sind, kann der Datenflusskonvertierer 32 die Ergebnisse als Steuerabhängigkeitsgraph 44 speichern, wie es in Block 244 gezeigt ist, und der Prozess kann enden.
-
Wenn beispielsweise BB#0 als der primäre BB und BB#1 als der sekundäre BB betrachtet werden, kann der Datenflusskonvertierer 32 bestimmen, dass ein Weg von BB#0 zu dem Ende existiert, der durch BB#1 verläuft, und ein anderer Weg von BB#0 zu dem Ende existiert, der nicht durch BB#1 verläuft. Folglich kann der Datenflusskonvertierer 32 BB#1 als von BB#0 steuerabhängig kennzeichnen. Und wenn eine Instanz oder Iteration von BB#6 als der primäre BB und eine weitere Instanz oder Iteration von BB#6 als der sekundäre BB betrachtet wird, kann der Datenflusskonvertierer 32 bestimmen, dass ein Weg von der ersten Iteration von BB#6 zu dem Ende existiert, der durch eine zweite Iteration von BB#6 verläuft, und ein weiterer Weg von der ersten Iteration BB#6 zu dem Ende existiert, ohne eine zweite Iteration von BB#6 zu durchlaufen. Folglich kann der Datenflusskonvertierer 32 BB#6 und von sich selbst steuerabhängig kennzeichnen.
-
Der Datenflusskonvertierer 32 kann somit den Steuerabhängigkeitsgraphen 44 erzeugen und der Steuerabhängigkeitsgraph 44 kann alle Steuerabhängigkeiten zwischen den BBs des Quellprogramms 40 identifizieren. Zum Beispiel gibt der Steuerabhängigkeitsgraph 44 an, dass BB#0 und BB#2 aus IR#2 nicht von anderen BBs steuerabhängig sind. Der Steuerabhängigkeitsgraph 44 identifiziert auch die folgenden Abhängigkeiten:
- • BB#1 ist steuerabhängig von BB#0.
- • BB#6 ist steuerabhängig von sich selbst und BB#0.
- • BB#3 ist steuerabhängig von BB#0 und BB#6.
- • BB#4 ist steuerabhängig von BB#3.
- • BB#5 ist steuerabhängig von BB#3.
-
Der Datenflusskonvertierer 32 kann dann alle Steuerabhängigkeitsregionen in dem Quellprogramm 40 identifizieren. Ferner kann der Datenflusskonvertierer 32 die folgende Regel verwenden, um das Konzept der Steuerabhängigkeitsregion zu definieren:
- Eine Steuerabhängigkeitsregion ist eine Sequenz von einem oder mehreren Basisblöcken in einem Steuerflussprogramm, wobei (a) jeder Basisblock in der Sequenz von dem gleichen Eltern-Basisblock direkt steuerabhängig ist und (b) jeder Basisblock in der Sequenz die gleiche Ausführungshäufigkeit aufweist.
-
4 zeigt ein Ablaufdiagramm eines Ausführungsbeispiels eines Prozesses zum Identifizieren von Steuerabhängigkeitsregionen. In einer Ausführungsform verwendet der Datenflusskonvertierer 32 den Steuerabhängigkeitsgraphen 44, um die in 4 dargestellten Bestimmungen durchzuführen, wie es in 2 durch den gestrichelten Pfeil dargestellt ist, der von dem Steuerabhängigkeitsgraphen 44 zu der Steuerabhängigkeitsregionsliste 46 führt. Der Prozess von 4 kann bei Block 320 damit beginnen, dass der Datenflusskonvertierer 32 bestimmt, ob alle möglichen primären BBs in dem Steuerabhängigkeitsgraphen 44 berücksichtigt worden sind. Wenn mögliche primäre BBs zu berücksichtigen sind, kann der Datenflusskonvertierer 32 einen dieser BBs auswählen, der als primärer BB zu betrachten ist, wie es in Block 322 gezeigt ist. Wie in Block 330 gezeigt kann der Datenflusskonvertierer 32 dann bestimmen, ob alle möglichen sekundären BBs in Verbindung mit diesem primären BB berücksichtigt worden sind. Wenn alle möglichen sekundären BBs bereits berücksichtigt worden sind, kann der Prozess zu Block 320 zurückkehren und der Datenflusskonvertierer 32 kann mit Block 322 fortfahren, um einen neuen primären BB auszuwählen, wenn noch mögliche primäre BBs zu berücksichtigen sind.
-
Unter erneuter Bezugnahme auf Block 330 kann der Datenflusskonvertierer 32 allerdings dann, wenn irgendwelche möglichen sekundären BBs noch zu berücksichtigen sind, einen dieser BBs auswählen, der als sekundäres BB zu betrachten ist, wie es in Block 332 gezeigt ist. Wie in Block 340 gezeigt kann der Datenflusskonvertierer 32 dann bestimmen, ob die primären und sekundären BBs identische Gruppen von Elternknoten in dem Steuerabhängigkeitsgraphen 44 aufweisen. Als Antwort auf eine positive Bestimmung kann der Datenflusskonvertierer 32 dann bestimmen, ob der primäre und sekundäre BB die gleiche Ausführungshäufigkeit haben, wie es in Block 350 gezeigt ist. In einer Ausführungsform enthält der Steuerabhängigkeitsgraph 44 beispielsweise Daten zum Identifizieren von Schleifen- und Verzweigungsbedingungen und anderen Aspekten des Quellprogramms 40 und ein Datenflusskonvertierer 32 nutzt diese Daten, um die Ausführungshäufigkeit zu bestimmen. Zum Beispiel kann der Steuerabhängigkeitsgraph 44 Daten zum Identifizieren von Merkmalen wie denen, die in dem Datenflussgraphen 50 gezeigt sind, enthalten. Wenn der primäre und der sekundäre BB die gleichen Elternknoten und die gleiche Ausführungshäufigkeit aufweisen, kann der Datenflusskonvertierer 32 wie in Block 354 gezeigt dem primären BB und dem sekundären BB dieselbe Steuerabhängigkeitsregion zuweisen. Wenn jedoch wie in Block 352 gezeigt der primäre und sekundäre BB nicht die gleichen Elternknoten und die gleiche Ausführungshäufigkeit haben, kann der Datenflusskonvertierer 32 den primären BB und den sekundären BB unterschiedlichen Steuerabhängigkeitsregionen zuordnen.
-
Der Prozess kann dann zu Block 320 zurückkehren, wobei der Datenflusskonvertierer 32 jeden verbleibenden BB wie oben angegeben einer Steuerabhängigkeitsregion zuweist. Nachdem alle BBs Regionen zugewiesen worden sind, kann der Datenflusskonvertierer 32 die resultierende Steuerabhängigkeitsregionsliste 46 speichern, wie es in Block 356 gezeigt ist, und der Prozess kann dann enden.
-
In einer Ausführungsform oder einem Szenario kann der Datenflusskonvertierer 32 jedem BB für das Quellprogramm 40 eine separate Steuerabhängigkeitsregion zuweisen, da keiner der BBs sowohl (a) identische Eltern-BBs als auch (b) die gleiche Ausführungshäufigkeit aufweist. In anderen Ausführungsformen oder Szenarien können jedoch zwei oder mehr BBs zu derselben Steuerabhängigkeitsregion gehören. Zum Beispiel kann ein Steuerflussprogramm zwei Basisblöcke A und C, die keine Schleife aufweisen, und einen dazwischenliegenden Basisblock B, der eine Schleife aufweist, enthalten und die Basisblöcke A und C können zu derselben Steuerabhängigkeitsregion gehören.
-
Der Datenflusskonvertierer 32 kann dann den Steuerabhängigkeitsgraphen 44, die Steuerabhängigkeitsregionsliste 46 und andere Datenquellen verwenden, um einen Datenflussgraphen zu erzeugen, der dem Quellenprogramm 40 entspricht.
-
5 zeigt ein Ablaufdiagramm einer beispielhaften Ausführungsform eines Prozesses zum Erzeugen eines Datenflussgraphen. In einer Ausführungsform verwendet der Datenflusskonvertierer 32 IR#2, den Steuerabhängigkeitsgraph 44 und die Steuerabhängigkeitsregionsliste 46, um die in 5 dargestellten Bestimmungen durchzuführen, wie es in 2 durch die gestrichelten Pfeile dargestellt ist, die von dem Quellprogramm 40, dem Steuerabhängigkeitsgraphen 44 und der Steuerabhängigkeitsregionsliste 46 zu dem Datenflussgraphen 50 führen. Der Prozess von 5 kann in Block 410 damit beginnen, dass der Datenflusskonvertierer 32 jeder Verwendung jeder Variablen in dem Quellprogramm eine Region zuweist. Zum Beispiel kann der Datenflusskonvertierer 32 IR#2 verwenden, um jede Verwendung jeder Variablen und den Steuerabhängigkeitsgraphen 44 zu identifizieren, um zu bestimmen, in welcher Region sich jede Verwendung befindet. Wie in Block 420 gezeigt kann der Datenflusskonvertierer 32 dann bestimmen, ob bereits alle Quellbefehle in IR#2 analysiert worden sind. Wenn irgendwelche Quellbefehle noch nicht analysiert worden sind, kann der Datenflusskonvertierer 32 einen zu analysierenden Quellbefehl auswählen, wie es in Block 422 gezeigt ist. Wie in Block 430 gezeigt kann der Datenflusskonvertierer 32 dann bestimmen, ob alle Variablen in dem ausgewählten Befehl bereits analysiert worden sind. Wenn irgendeine dieser Variablen noch nicht analysiert worden ist, kann der Datenflusskonvertierer 32 eine zu analysierende Variable auswählen, wie es in Block 432 gezeigt ist.
-
Wie in Block 440 gezeigt kann der Datenflusskonvertierer 32 dann bestimmen, ob die Region, in der die Variable definiert worden ist, dieselbe Region wie die Region ist, in der die Variable verwendet wird. Wenn diese Regionen verschieden sind, kann der Datenflusskonvertierer 32 einen Schaltbefehl in den Datenflussgraphen 50 einfügen, wie es in Block 442 gezeigt ist. (Der Schaltbefehl ist nachstehend ausführlicher beschrieben.) Wenn diese Regionen jedoch gleich sind, kann der Datenflusskonvertierer 32 von Block 440 zu Block 430 zurückkehren, wo der Datenflusskonvertierer 32 eine andere Variable aus dem ausgewählten zu analysierenden Befehl auswählt (wenn irgendeine übrig ist), wie es oben angegeben ist.
-
Sobald alle Variablen aus dem ausgewählten Befehl analysiert worden sind, kann der Prozess von Block 430 zu Block 420 zurückkehren, wo der Datenflusskonvertierer 32 einen anderen zu analysierenden Befehl (falls vorhanden) auswählt, wie es oben angegeben ist. Sobald alle Befehle und alle Variablen in diesen Befehlen berücksichtigt worden sind, kann der Datenflusskonvertierer 32 die Ergebnisse als Datenflussgraph 50 speichern, wie es in Block 450 gezeigt ist, und der Prozess kann dann enden.
-
Zu Zwecken dieser Offenbarung ist ein Schaltbefehl ein Befehl in dem Befehlssatz für DFP
20, der (a) einen Steuerkanal, einen Eingabekanal und zwei Ausgabekanäle benennt; (b) die Werte aus dem Steuerkanal und dem Eingabekanal verbraucht; (c) einen der Ausgabekanäle basierend auf dem Steuerkanal auswählt; und (d) den Wert aus dem Eingabekanal auf dem ausgewählten Ausgabekanal erzeugt. Ein Schaltbefehl kann auch einfach als „Switch“ bezeichnet werden. In einer Ausführungsform kann der Schaltbefehl die folgende Syntax verwenden:
wobei:
- Ci der Eingabekanal ist,
- Ctrl der Steuerkanal ist und
- C1, C2 die Ausgabekanäle sind.
-
Außerdem kann der Schaltbefehl letztlich die folgende Semantik anwenden:
-
Zu Zwecken dieser Offenbarung ist zudem ein Pick-Befehl ein Befehl in dem Befehlssatz für den DFP 20, der (a) einen Steuerkanal, zwei Eingabekanäle und einen Ausgabekanal benennt; (b) basierend auf dem Steuerkanal einen der Eingabekanäle auswählt; (c) die Werte aus dem Steuerkanal und dem ausgewählten Eingabekanal verbraucht; und (d) den Wert aus dem ausgewählten Eingabekanal auf dem Ausgabekanal erzeugt. Ein Pick-Befehl kann auch einfach als „Pick“ bezeichnet werden.
-
6 zeigt ein Ausführungsbeispiel des Datenflussgraphen 50. Wie oben angegeben kann der Datenflusskonvertierer 32 einen Datenflussgraphen 50 basierend auf Eingabedaten wie etwa dem Steuerflussgraphen 42 unter Verwendung eines Prozesses wie dem in 5 veranschaulichten erzeugen Der Datenflussgraph 50 zeigt einen Abschnitt des Datenflussgraphen 50, der sich auf die Variable x bezieht. Der Datenflussgraph 50 kann auch zusätzliche Informationen (nicht dargestellt), die zu allen anderen Variablen in dem Quellprogramm 40 gehören, oder alle Variablen in einer Zwischenrepräsentation des Quellprogramms 40 (z. B. IR#2) enthalten.
-
In 6 ist jeder Schaltbefehl (z. B. „B0: Switch“) mit einem Trapez mit breiter Basis dargestellt. 6 enthält auch Rauten zur Darstellung boolescher Operationen. 6 enthält auch Rechtecke zur Darstellung von Operationen wie Zuweisung und Arithmetik. 6 enthält auch Pick-Befehle. Jeder Pick-Befehl ist mit einem Trapez mit einer breiten Basis dargestellt. Jeder Pick-Befehl ist zudem mit einem anderen Index (z. B. Pick1) versehen, um die Bezugnahme zu erleichtern.
-
6 enthält auch verschiedene Kommunikationskanalkennungen (CCIs) zum Identifizieren von Kanälen, die durch Befehle erzeugt oder verbraucht werden. In 6 ist jede CCI mit einem Pfeil dargestellt, der von dem Befehl, der den Wert für diese CCI erzeugt, zu dem Befehl, der den Wert für diese CCI verwendet, führt. Zu Veranschaulichungszwecken zeigt 6 (a) Steuerkanal-CCIs, die Picks und Switches von der Seite eingeben, (b) eingehende (oder „verbrauchte“) CCIs, die von oben eintreten, und (c) ausgehende (oder „erzeugte“) CCIs, die unten heraustreten. Zu Veranschaulichungszwecken kennzeichnet 6 zudem Eingabekanäle für Picks und Ausgabekanäle für Switches mit „T“ und „F“, um Kanäle darzustellen, die basierend auf booleschen Steuerkanälen ausgewählt werden. In anderen Ausführungsformen oder Szenarien können jedoch andere Arten von Steuerkanälen verwendet werden. In einer Ausführungsform sind die Kommunikationskanäle zudem unempfindlich gegenüber Latenz. Solche Kommunikationskanäle können als „latenzunempfindliche Kanäle“ (LICs) bezeichnet werden.
-
In 6 ist jeder Switch mit der Kennung für den BB bezeichnet, der den Befehl oder die Befehle enthält, die der Datenflusskonvertierer 32 letztlich in diesen Switch konvertiert oder übersetzt hat. Zum Beispiel identifiziert „B0: Switch“ BB#0 aus IR#2 als den BB, der diesem Switch entspricht.
-
Nach dem Erzeugen des Datenflussgraphen
50 kann der Datenflusskonvertierer
32 dann den Datenflussgraphen
50 verwenden, um das Datenflussprogramm
54 zu erzeugen. Der folgende Pseudocode veranschaulicht ein beispielhaftes Datenflussprogramm
54, das auf dem Datenflussgraphen
50 basiert:
-
7 zeigt ein weiteres Ausführungsbeispiel eines Steuerungsflussgraphen, um weiter zu veranschaulichen, wie der Datenflusskonvertierer 32 arbeitet. In 7 ist der Steuerungsflussgraph 150 weniger vereinfacht als der Steuerflussgraph 42 in 2. Zum Beispiel enthält der Steuerflussgraph 150 elf BBs, einschließlich der BBs, die mit „1“ bis „9“ bezeichnet sind, sowie einen Pseudo-Stamm-BB mit „0“ bezeichnet und einen Austritts-BB mit „10“ bezeichnet. Die BBs entsprechen im Allgemeinen einem Quellcode, der nicht dargestellt ist. Jeder BB enthält jedoch einen Text, um den Typ der Operation oder Operationen zu identifizieren, die von diesem BB ausgeführt werden sollen. Außerdem ist der Text in den BBs ein Pseudocode, in dem einzelne Buchstaben mit dem Präfix % (z. B. „%x“) virtuelle Register bezeichnen und die Zeichenfolge „phi“ eine Pseudofunktion bezeichnet. Obwohl Zuweisungen im Allgemeinen die Form „%a =%b op %c“ annehmen können (wobei „op“ irgendeine Art von binärem Operator sein kann, wie z. B. ADD, MUL, DIV), kann der Pseudocode das Ziel (z „%a“) weglassen, wenn ein oder mehrere Operanden, die von der Zuweisung verwendet werden, für die Diskussion relevant sind und das Ziel nicht so relevant ist. In ähnlicher Weise kann das Ziel für eine Funktion weggelassen werden, wenn eine oder mehrere von der Funktion verwendete Variablen für die Diskussion relevant sind und das Ziel nicht so relevant ist.
-
Insbesondere zeigt der Steuerflussgraph 510 den Steuerfluss wie folgt:
- • Steuerung kann von 0 entweder zu 1 oder zu 10 übergehen
- • Steuerung kann von 1 entweder zu 9 oder zu 4 übergehen
- • Steuerung geht von 9 zu 2 über
- • Steuerung geht von 2 zu 3 über
- • Steuerung kann von 3 entweder zu 5 oder zu 6 übergehen
- • Steuerung geht von 5 zu 7 über
- • Steuerung geht von 6 zu 7 über
- • Steuerung kann von 7 entweder zu 8 oder zu 2 übergehen
- • Steuerung geht von 8 zu 4 über
- • Steuerung geht von 4 zu 10 über
-
Zudem zeigt der Steuerflussgraph 510, dass %x in 2 definiert und in 7 und 4 verwendet wird.
-
8 stellt ein weiteres Ausführungsbeispiel eines Steuerabhängigkeitsgraphen dar, um weiter zu veranschaulichen, wie der Datenflusskonvertierer 32 arbeitet. Insbesondere zeigt 8 einen Steuerabhängigkeitsgraphen 610, der von dem Datenflusskonvertierer 32 basierend auf dem Steuerflussgraphen 510 erzeugt wird. 8 zeigt beispielsweise, dass die Blöcke 1 und 4 nicht von irgendwelchen anderen Blöcken steuerabhängig sind, dass Block 7 die von sich selbst und von Block 1 steuerabhängig ist usw.
-
In einer Ausführungsform oder einem Szenario kann der Datenflusskonvertierer 32 jeden BB in dem Steuerabhängigkeitsgraphen 610 einer separaten Steuerabhängigkeitsregion zuweisen. Wenn der Datenflusskonvertierer 32 beispielsweise bestimmt, dass die Schleife von 7 nach 2 in dem Steuerflussgraphen 510 eine Endlosschleife sein könnte, kann der Datenflusskonvertierer 32 bestimmen, dass die BBs 1 und 4 nicht die gleiche Ausführungshäufigkeit haben, und der Datenflusskonvertierer 32 kann daher die BBs 1 und 4 verschiedenen Steuerabhängigkeitsregionen zuordnen. Folglich kann der Datenflusskonvertierer 32 bestimmen, dass keiner der BBs sowohl (a) identische Eltern-BBs als auch (b) die gleiche Ausführungshäufigkeit aufweist.
-
In einer weiteren Ausführungsform oder einem weiteren Szenario kann der Datenflusskonvertierer 32 jeden BB in dem Steuerabhängigkeitsgraphen 610 - abgesehen von BBs 1 und 4 - einer separaten Steuerabhängigkeitsregion zuweisen und der Datenflusskonvertierer 32 kann die BBs 1 und 4 der gleichen Steuerabhängigkeitsregion zuweisen. Wenn der Datenflusskonvertierer 32 beispielsweise bestimmen kann, dass die Schleife von 7 nach 2 in dem Steuerflussgraphen 510 keine Endlosschleife ist, kann der Datenflusskonvertierer 32 die BBs 1 und 4 derselben Steuerabhängigkeitsregion zuweisen, da diese BBs (a) identische Eltern-BBs und (b) die gleiche Ausführungshäufigkeit aufweisen.
-
Der folgende Text beschreibt, wie der Datenflusskonvertierer 32 den Steuerabhängigkeitsgraphen 610 verwenden kann, um einen Datenflussgraphen und ein entsprechendes Datenflussprogramm zu erzeugen. Zum Beispiel kann der Datenflusskonvertierer 32 bestimmen, dass (a) %z in 7 verwendet wird und in 2 definiert wird und (b) 7 nicht steuerabhängig von 2 ist. Folglich kann der Datenflusskonvertierer 32 bestimmen, dass für %z, das in 7 verwendet wird, kein Switch erforderlich ist.
-
Zudem kann der Datenflusskonvertierer 32 bestimmen, dass (a)%w in 7 verwendet und in 1 definiert wird und (b) 7 von 1 steuerabhängig ist. (Oder allgemeiner, der Datenflusskonvertierer 32 kann bestimmen, ob 1 irgendeinen Block dominiert, von dem 7 steuerabhängig ist.) Folglich kann der Datenflusskonvertierer 32 bestimmen, dass ein Switch für %w, das in 7 verwendet wird, benötigt wird. Der Datenflusskonvertierer 32 kann dann den Steuerabhängigkeitsgraphen 610 von unten nach oben durchgehen, um den naheliegendsten Block zu finden, von dem 7 steuerabhängig ist, um den Switch in diesen Block einzufügen. Der Datenflusskonvertierer 32 kann dann einen Switch in diesen Block einfügen. In der Ausführungsform von 8 ist 7 direkt von 1 steuerabhängig. Folglich kann der Datenflusskonvertierer 32 einen Switch für % w bei 1 einfügen.
-
Unter Verwendung des gleichen Ansatzes für% w, das in 6 verwendet wird, kann der Datenflusskonvertierer 32 einen Switch für % w bei 3 einfügen.
-
Außerdem kann der Datenflusskonvertierer 32 bestimmen, dass (a) %z in 8 verwendet wird und in 2 definiert wird und (b) 2 in dem Steuerabhängigkeitsgraphen 610 niedriger liegt als 8. Insbesondere ist 2 eine Ebene niedriger als 8. Normalerweise ist die Definition ist auf der gleichen oder einer höheren Ebene als die Verwendung, es sei denn, es gibt eine Rückwärtskante (die falls nötig etabliert werden könnte). Um %z für 8 zu handhaben, kann der Datenflusskonvertierer 32 in dem Steuerabhängigkeitsgraphen 610 2 auf die gleiche Ebene wie 8 verfolgen. In dieser Ablaufverfolgung ist 7 (was ein Schleifenriegelblock und eine Schlinge ist) auf der gleichen Ebene wie 8. Folglich kann der Datenflusskonvertierer 32 einen Switch für %z bei 7 einfügen.
-
Außerdem kann der Datenflusskonvertierer 32 bestimmen, dass (a) %x in 2 verwendet und in 7 definiert wird, und (b) 2 von 7 steuerabhängig ist. Folglich kann der Datenflusskonvertierer 32 einen Switch für %x bei 7 einfügen.
-
Ferner kann der Datenflusskonvertierer 32 bestimmen, dass (a) %x in 4 verwendet und in 7 definiert wird. Dies ist ein weiterer Fall, in dem die Verwendung auf einer höheren Ebene als die Definition liegt. Ähnlich wie die Verwendung von %z in 8 wandert der Datenflusskonvertierer 32 in dem Steuerabhängigkeitsgraphen 610 eine Ebene nach oben, findet bei 7 eine Schlinge und fügt dort einen Switch für %x ein.
-
Wie beschrieben worden ist, verwendet ein Datenflusskonvertierer eine spezifische Definition der Steuerabhängigkeit, um einen Steuerabhängigkeitsgraphen zu erzeugen, und der Datenflusskonvertierer verwendet dann den Steuerabhängigkeitsgraphen, um einen Datenflussgraphen und ein Datenflussprogramm zu erzeugen. Unter Verwendung des hierin beschriebenen Ansatzes kann der Datenflusskonvertierer einen Datenflussgraphen erzeugen, der kleiner ist als die Datenflussgraphen, die von anderen Arten von Dienstprogrammen erzeugt werden. Dieser relativ kleine Datenflussgraph kann es dem Datenflusskonvertierer ermöglichen, ein Datenflussprogramm zu erzeugen, das ebenfalls relativ klein ist. Folglich kann das Datenflussprogramm mit weniger Mehraufwand ausgeführt werden als das Datenflussprogramm von anderen Arten von Dienstprogrammen. Zum Beispiel kann das Datenflussprogramm kleiner sein und es kann weniger Energie verbrauchen.
-
Im Gegensatz dazu erfordern andere Dienstprogramme möglicherweise Änderungen an dem Steuerflussgraphen. Solche Änderungen sind jedoch fehleranfällig und solche Änderungen können sogar unmöglich sein (z. B. wenn das Programm Ausnahmen auslösen kann). Solche Änderungen können im Vergleich zu einem Datenflussprogramm, das gemäß der vorliegenden Offenbarung erzeugt wird, zudem zusätzliche Berechnungen erfordern. Zum Beispiel kann ein Steuerflussgraph geändert werden, um eine „if-Anweisung“ in einen Code zu konvertieren, der beide Zweige berechnet. Jedoch verschwendet die Berechnung beider Zweige typischerweise Energie.
-
Ein Datenflusskonvertierer gemäß der vorliegenden Offenbarung kann eine Codeverdopplung vermeiden. Wenn ein Dienstprogramm Codeverdopplung verwendet, kann das resultierende Datenflussprogramm größer sein. Und wenn dieses Programm auf den Datenflussprozessor abgebildet wird, kann das Programm mehr Siliziumplatz belegen, es kann mehr Energie verbrauchen und es kann im Vergleich zu einem Steuerflussprogramm, das zumindest einen Teil der Codeverdopplung vermeidet, länger dauern, es auszuführen. Außerdem kann der vorliegende Datenflusskonvertierer den Konvertierungsprozess schneller abschließen als andere Arten von Dienstprogrammen.
-
Angesichts der hierin beschriebenen und veranschaulichten Prinzipien und Ausführungsbeispielen wird erkannt werden, dass die dargestellten Ausführungsformen in Anordnung und Detail abgewandelt werden können, ohne von diesen Prinzipien abzuweichen. Wenn Ausdrücke wie „eine Ausführungsform“, „eine andere Ausführungsform“ oder dergleichen hierin verwendet werden, sollen diese Ausdrücke zudem im Allgemeinen auf Möglichkeiten der Ausführungsform verweisen und sollen die Erfindung nicht auf bestimmte Konfigurationen von Ausführungsformen beschränken. Wie hierin verwendet können diese Ausdrücke die gleiche Ausführungsform oder verschiedene Ausführungsformen betreffen, und diese Ausführungsformen sind mit anderen Ausführungsformen kombinierbar.
-
Zudem kann sich diese Offenbarung auf Befehle, Funktionen, Prozeduren, Datenstrukturen, Anwendungsprogramme, Mikrocode, Konfigurationseinstellungen und andere Datenarten beziehen. Wie oben beschrieben kann eine Maschine oder Vorrichtung dann, wenn auf die Daten durch die Maschine oder Vorrichtung zugegriffen wird, antworten, indem sie Aufgaben durchführt, abstrakte Datentypen oder Hardwarekontexte niedriger Ebene definiert und/oder andere Operationen durchführt. Zum Beispiel kann ein Datenspeicher, RAM und/oder Flash-Speicher verschiedene Befehlssätze enthalten, die, wenn sie ausgeführt werden, verschiedene Operationen durchführen. Solche Befehlssätze können im Allgemeinen als Software bezeichnet werden. Und Software, die während des Hochfahrprozess verwendet wird, kann wie oben gezeigt als Firmware bezeichnet werden. Software, die in nichtflüchtigem Speicher gespeichert ist, kann auch als Firmware bezeichnet werden. Zusätzlich können Begriffe wie „Programm“ und „Modul“ im Allgemeinen dazu verwendet werden, einen weiten Bereich von Softwarekonstrukten, die Anwendungen, Routinen, Treiber, Unterprogramme, Prozesse und andere Typen von Softwarekomponenten umfassen, abzudecken. Jede geeignete Betriebsumgebung und Programmiersprache (oder Kombination von Betriebsumgebungen und Programmiersprachen) kann dazu verwendet werden, um die hierin beschriebenen Softwarekomponenten zu implementieren.
-
Alternative Ausführungsformen umfassen für Maschinen zugängliche Medien, die Befehle oder Steuerlogik zum Durchführen der hierin beschriebenen Operationen codieren. Solche Ausführungsformen können auch als Programmprodukte bezeichnet werden. Solche für Maschinen zugängliche Medien umfassen ohne Einschränkung physische Speichermedien wie beispielsweise Magnetplatten, optische Platten, RAM, Nur-Lese-Speicher (ROM) etc., wie auch Prozessoren, Controller und andere Komponenten, die RAM, ROM und/oder andere Speichereinrichtungen enthalten. Zu Zwecken dieser Offenbarung kann der Begriff „ROM“ im Allgemeinen dazu verwendet werden, nichtflüchtige Speichervorrichtungen wie löschbaren programmierbaren ROM (EPROM), elektrisch löschbaren programmierbaren ROM (EEPROM), Flash-ROM, Flash-Speicher etc. zu bezeichnen.
-
Es sollte ebenso verstanden werden, dass die hierin gezeigten Hardware- und Softwarekomponenten funktionale Elemente repräsentieren, die möglichst in sich abgeschlossen sind, so dass jedes im Wesentlichen unabhängig von den anderen entworfen, konstruiert oder aktualisiert werden kann. In alternativen Ausführungsformen können viele der Komponenten als Hardware, Software oder einer Kombination aus Hardware und Software zum Bereitstellen der hierin beschriebenen und gezeigten Funktionalitäten implementiert sein. In einigen Ausführungsformen können Teile oder die Gesamtheit der Steuerlogik zum Implementieren der beschriebenen Operationen in Hardwarelogik (z. B. als Teil eines Chips mit integrierter Schaltung, eine programmierbare Gatteranordnung (PGA), eine anwendungsspezifische integrierte Schaltung (ASIC) etc.) implementiert sein.
-
Es sollte ebenfalls verstanden werden, dass jedes spezielle Softwaremodul mehr als eine Komponente umfassen kann. Zum Beispiel kann ein Bootcode-Hauptmodul zwei oder mehr Komponenten umfassen und diese Komponenten können zusammenarbeiten, um die Operationen des Bootcode-Hauptmoduls wie beispielsweise das Hochfahren eines OS zu erledigen.
-
Ebenso können Befehle für mehrere Komponenten in einem nichttransitorischen, für Maschinen zugänglichen Medium gespeichert sein. In mindestens einer anderen Ausführungsform können zwei oder mehr nichttransitorische, für Maschinen zugängliche Medien dazu verwendet werden, die Befehle für die relevanten Komponenten zu speichern. Zum Beispiel können Befehle für eine Komponente in einem Medium gespeichert werden und Befehle für eine weitere Komponente können in einem weiteren Medium gespeichert werden. Alternativ kann ein Teil der Befehle für eine Komponente in einem Medium gespeichert werden und der Rest der Befehle für diese Komponente (wie auch Befehle für andere Komponenten) kann in einem oder mehreren anderen Medien gespeichert werden. Befehle können auch in einer verteilten Umgebung verwendet werden und können lokal und/oder entfernt für den Zugriff durch Ein- oder Mehrkernprozessormaschinen gespeichert werden.
-
Ebenso können Anwendungen und/oder andere Daten, die oben in einem Ausführungsbeispiel als in einer bestimmten Vorrichtung befindlich beschrieben sind, in anderen Ausführungsformen in einer oder mehreren anderen Vorrichtungen befindlich sein. Und Rechenoperationen, von denen oben beschrieben ist, dass sie in einem Ausführungsbeispiel in einer bestimmten Vorrichtung ausgeführt werden, können in anderen Ausführungsformen durch eine oder mehrere andere Vorrichtungen ausgeführt werden.
-
Die vorliegenden Lehren können in vielen verschiedenen Arten von Datenverarbeitungssystemen zum Vorteil verwendet zu werden. Beispielhafte Datenverarbeitungssysteme können ohne Einschränkung die folgenden umfassen: Beschleuniger, Ein-Chip-Systeme (SOC), am Körper tragbare Vorrichtungen, tragbare Vorrichtungen, Smartphones, Telefone, Unterhaltungsvorrichtungen wie Audiovorrichtungen, Videovorrichtungen, Audio-/Videovorrichtungen (z. B. Fernsehen und Beistellkästen), Fahrzeugverarbeitungssysteme, persönliche digitale Assistenten (PDA), Tablets, Laptops, tragbare Computer, PCs, Arbeitsplatzrechner, Server, Client-Server-Systeme, verteilte Rechensysteme, Supercomputer, Rechensysteme mit hoher Leistung, Rechencluster, Großrechner, Mini-Computer und andere Vorrichtungen zum Verarbeiten oder Übermitteln von Informationen. Dementsprechend sollten, wenn es nicht explizit anders spezifiziert oder durch den Kontext anders erfordert wird, Verweise auf irgendeinen bestimmten Typ von Datenverarbeitungssystem (z. B. einen PC) so verstanden werden, dass sie ebenso andere Typen von Datenverarbeitungssystemen umfassen. Ebenso müssen, solange es nicht ausdrücklich anders spezifiziert ist, Komponenten, die als miteinander gekoppelt, in Kommunikation miteinander, antwortend aufeinander oder dergleichen beschrieben sind, nicht in kontinuierlicher Kommunikation miteinander sein und müssen nicht direkt miteinander gekoppelt sein. Ähnlich können dann, wenn beschrieben ist, dass eine Komponente Daten aus einer weiteren Komponente empfängt oder Daten dorthin sendet, diese Daten durch eine oder mehrere zwischengeschaltete Komponenten gesendet oder empfangen werden, solange es nicht ausdrücklich anders spezifiziert ist. Zusätzlich können manche Komponenten des Datenverarbeitungssystems als Adapterkarten mit Schnittstellen (z. B. einem Verbinder) zum Kommunizieren mit einem Bus implementiert sein. Alternativ können Vorrichtungen oder Komponenten als eingebettete Controller unter Verwendung von Komponenten wie programmierbaren oder nichtprogrammierbaren logischen Vorrichtungen oder Arrays, ASICs, eingebetteten Computern, Smartcards und dergleichen implementiert sein. Zu Zwecken dieser Offenbarung umfasst der Begriff „Bus“ Wege, die von mehr als zwei Vorrichtungen gemeinsam genutzt werden können, sowie Punkt-zu-Punkt-Wege. Ebenso kann zum Zweck dieser Offenbarung ein Prozessor auch als Verarbeitungseinheit, Verarbeitungselement, CPU etc. bezeichnet werden.
-
Ebenso könnten, obwohl ein oder mehrere Beispielprozesse in Bezug auf bestimmte Operationen, die in einer bestimmten Sequenz durchgeführt werden, beschrieben worden sind, zahlreiche Abwandlungen an diesen Prozessen vorgenommen werden, um zahlreiche alternative Ausführungsformen der vorliegenden Erfindung abzuleiten. Zum Beispiel können alternative Ausführungsformen Prozesse, die weniger als alle der offengelegten Operationen umfassen, Prozesse, die zusätzliche Operationen verwenden, und Prozesse, in denen die individuellen Operationen, die hierin offengelegt sind, kombiniert, unterteilt, neu angeordnet oder anderweitig verändert sind, umfassen.
-
Im Hinblick auf die breite Vielfalt nützlicher Permutationen, die einfach aus den hierin beschriebenen Beispielausführungsformen abgeleitet werden können, ist diese genaue Beschreibung dazu gedacht, nur beispielhaft zu sein und sollte nicht als beschränkend für den Geltungsbereich angesehen werden.
-
Die folgenden Beispiele gehören zu weiteren Ausführungsformen.
-
Beispiel A1 ist ein Datenverarbeitungssystem mit Technologie zum automatischen Konvertieren eines Steuerflussprogramms in ein Datenflussprogramm. Das Datenverarbeitungssystem umfasst einen Prozessor, ein nichttransitorisches maschinenzugängliches Medium, das auf den Prozessor anspricht, und einen Übersetzer, der in dem maschinenlesbaren Medium gespeichert ist. Wenn der Übersetzer von dem Datenverarbeitungssystem ausgeführt wird, ermöglicht er es dem Datenverarbeitungssystem, (a) automatisch einen Steuerabhängigkeitsgraphen für ein Steuerflussprogramm zu erzeugen; (b) automatisch einen Datenflussgraphen zumindest teilweise basierend auf dem Steuerabhängigkeitsgraphen zu erzeugen; und (c) automatisch ein Datenflussprogramm zumindest teilweise basierend auf dem Datenflussgraphen zu erzeugen.
-
Beispiel A2 ist ein Datenverarbeitungssystem gemäß Beispiel A1, wobei, wenn der Übersetzer ausgeführt wird, er es dem Datenverarbeitungssystem ermöglicht, (a) automatisch Variablen verschiedenen Steuerabhängigkeitsregionen in dem Steuerflussprogramm zuzuordnen; (b) automatisch für mindestens eine bestimmte Variable in dem Steuerflussprogramm zu bestimmen, ob die Variable in einer Steuerabhängigkeitsregion definiert wird und in einer anderen Steuerabhängigkeitsregion verwendet wird; und (c) als Antwort auf eine Bestimmung, dass die Variable in einer Steuerabhängigkeitsregion definiert wird und in einer anderen Steuerabhängigkeitsregion verwendet wird, automatisch einen Schaltbefehl in das Datenflussprogramm einzufügen.
-
Beispiel A3 ist ein Datenverarbeitungssystem gemäß Beispiel A2, wobei der Schaltbefehl Folgendes benennt: (i) einen Steuerkanal zum Empfangen eines Steuerwerts, (ii) einen Eingabekanal zum Empfangen eines Eingabewerts und (iii) mindestens zwei Ausgabekanäle. Der Schaltbefehl ist auch dazu ausgelegt, die folgenden Operationen durchzuführen, wenn er ausgeführt wird: (a) Auswählen eines der Ausgabekanäle zumindest teilweise basierend auf dem Steuerwert; und (b) Erzeugen des Eingabewerts auf dem ausgewählten Ausgabekanal.
-
Beispiel A4 ist ein Datenverarbeitungssystem gemäß Beispiel A3, wobei der Schaltbefehl zudem dazu ausgelegt ist, den Steuerwert und den Eingabewert zu verbrauchen, wenn er ausgeführt wird.
-
Beispiel A5 ist ein Datenverarbeitungssystem gemäß Beispiel A1, wobei, wenn der Übersetzer ausgeführt wird, er dem Datenverarbeitungssystem Folgendes ermöglicht: (a) automatisches Identifizieren von Steuerabhängigkeiten zwischen Basisblöcken, wobei jede Steuerabhängigkeit einen steuerabhängigen Basisblock und einen Eltern-Basisblock umfasst; (b) automatisches Bestimmen der Ausführungshäufigkeit für Basisblöcke; und (c) automatisches Erzeugen einer Liste von Steuerabhängigkeitsregionen zumindest teilweise basierend auf den Bestimmungen, (i) ob jeder Basisblock in einer Sequenz von Basisblöcken direkt steuerabhängig von dem gleichen Eltern-Basisblock ist, und (ii) ob jeder Basisblock in der Sequenz die gleiche Ausführungshäufigkeit aufweist. Beispiel A5 kann auch die Merkmale von einem oder mehreren der Beispiele A2 bis A4 enthalten.
-
Beispiel A6 ist ein Datenverarbeitungssystem gemäß Beispiel A1, wobei das Steuerflussprogramm mindestens zwei Punkte (A, B) und ein Ende aufweist. Die Operation des automatischen Erzeugens des Steuerabhängigkeitsgraphen umfasst zudem: (i) Bestimmen, ob mehr als ein Weg von Punkt A bis zu dem Ende existiert; (ii) falls mehr als ein Weg von Punkt A bis zu dem Ende existiert, Bestimmen, ob einer der Wege den Punkt B durchläuft und ein anderer der Wege den Punkt B nicht durchläuft; (iii) als Antwort auf das Bestimmen, dass (a) mehr als ein Weg von Punkt A bis zu dem Ende existiert und (b) einer der Wege B durchläuft und ein anderer der Wege Punkt B nicht durchläuft, Kennzeichnen des Punktes B als steuerabhängig von Punkt A; und (iv) Aufnehmen einer Kante von Punkt A zu Punkt B in dem Steuerabhängigkeitsgraphen genau dann, wenn Punkt B von Punkt A steuerabhängig ist. Beispiel A6 kann auch die Merkmale von einem oder mehreren der Beispiele A2 bis A5 enthalten.
-
Beispiel A7 ist ein Datenverarbeitungssystem gemäß Beispiel A6, wobei Punkt A und Punkt B jeweils mindestens ein Element aus der folgenden Gruppe umfassen: (a) einen Befehl aus dem Steuerflussprogramm; (b) eine Instanz eines Befehls aus dem Steuerflussprogramm in einer Schleife; (c) einen Basisblock aus dem Steuerflussprogramm; und (d) eine Instanz eines Basisblocks aus dem Steuerflussprogramm in einer Schleife.
-
Beispiel A8 ist ein Datenverarbeitungssystem gemäß Beispiel A1, wobei der Übersetzer einen Compiler umfasst. Beispiel A8 kann auch die Merkmale von einem oder mehreren der Beispiele A2 bis A7 umfassen.
-
Beispiel A9 ist ein Datenverarbeitungssystem gemäß Beispiel A1, wobei der Prozessor einen Steuerflussprozessor umfasst, das Datenverarbeitungssystem ferner einen Datenflussprozessor umfasst und der Übersetzer Steuerflussbefehle enthält, die von dem Steuerflussprozessor ausgeführt werden sollen. Außerdem ermöglicht es der Übersetzer, wenn er von dem Steuerflussprozessor ausgeführt wird, dem Datenverarbeitungssystem, das Datenflussprogramm in dem maschinenlesbaren Medium zu speichern. Außerdem umfasst das Steuerflussprogramm eine Steuerflussversion eines Quellprogramms und das Datenflussprogramm umfasst eine Datenflussversion des Quellprogramms. Das Datenflussprogramm ermöglicht es dem Datenverarbeitungssystem, die Datenflussversion des Quellprogramms auf dem Datenflussprozessor auszuführen. Beispiel A9 kann auch die Merkmale von einem oder mehreren der Beispiele A2 bis A8 umfassen.
-
Beispiel B1 ist eine Vorrichtung zum automatischen Konvertieren eines Steuerflussprogramms in ein Datenflussprogramm. Die Vorrichtung umfasst ein nichttransitorisches maschinenlesbares Medium und einen in dem maschinenlesbaren Medium gespeicherten Übersetzer. Der Übersetzer ermöglicht, wenn er von einem Datenverarbeitungssystem ausgeführt wird, dem Datenverarbeitungssystem Folgendes: (a) automatisches Erzeugen eines Steuerabhängigkeitsgraphen für ein Steuerflussprogramm; (b) automatisches Erzeugen eines Datenflussgraphen zumindest teilweise basierend auf dem Steuerabhängigkeitsgraphen; und (c) automatisches Erzeugen eines Datenflussprogramms zumindest teilweise basierend auf dem Datenflussgraphen.
-
Beispiel B2 ist eine Vorrichtung gemäß Beispiel B1, wobei der Übersetzer, wenn er ausgeführt wird, dem Datenverarbeitungssystem Folgendes ermöglicht: (a) automatisches Zuordnen von Variablen zu unterschiedlichen Steuerabhängigkeitsregionen in dem Steuerflussprogramm; (b) für mindestens eine bestimmte Variable in dem Steuerflussprogramm, automatisches Bestimmen, ob die Variable in einer Steuerabhängigkeitsregion definiert wird und in einer anderen Steuerabhängigkeitsregion verwendet wird; und (c) als Antwort auf eine Bestimmung, dass die Variable in einer Steuerabhängigkeitsregion definiert wird und in einer anderen Steuerabhängigkeitsregion verwendet wird, automatisches Einfügen eines Schaltbefehls in das Datenflussprogramm.
-
Beispiel B3 ist eine Vorrichtung gemäß Beispiel B2, wobei der Schaltbefehl Folgendes benennt: (i) einen Steuerkanal zum Empfangen eines Steuerwerts, (ii) einen Eingabekanal zum Empfangen eines Eingabewerts und (iii) mindestens zwei Ausgabekanäle. Der Schaltbefehl ist auch dazu ausgelegt, die folgenden Operationen durchzuführen, wenn er ausgeführt wird: (a) Auswählen eines der Ausgabekanäle zumindest teilweise basierend auf dem Steuerwert; und (b) Erzeugen des Eingabewerts auf dem ausgewählten Ausgabekanal.
-
Beispiel B4 ist eine Vorrichtung gemäß Beispiel B3, wobei der Schaltbefehl zudem dazu ausgelegt ist, den Steuerwert und den Eingabewert zu verbrauchen, wenn er ausgeführt wird.
-
Beispiel B5 ist eine Vorrichtung gemäß Beispiel B1, wobei der Übersetzer, wenn er ausgeführt wird, dem Datenverarbeitungssystem Folgendes ermöglicht: (a) automatisches Identifizieren von Steuerabhängigkeiten zwischen Basisblöcken, wobei jede Steuerabhängigkeit einen steuerabhängigen Basisblock und einen Eltern-Basisblock umfasst; (b) automatisches Bestimmen einer Ausführungshäufigkeit für Basisblöcke; und (c) automatisches Erzeugen einer Liste von Steuerabhängigkeitsregionen zumindest teilweise basierend auf den Bestimmungen, (i) ob jeder Basisblock in einer Sequenz von Basisblöcken direkt von dem gleichen Eltern-Basisblock steuerabhängig ist und (ii) ob jeder Basisblock in der Sequenz die gleiche Ausführungshäufigkeit aufweist. Beispiel B5 kann auch die Merkmale von einem oder mehreren der Beispiele B2 bis B4 umfassen.
-
Beispiel B6 ist eine Vorrichtung gemäß Beispiel B1, wobei das Steuerflussprogramm mindestens zwei Punkte (A, B) und ein Ende aufweist. Die Operation des automatischen Erzeugens des Steuerabhängigkeitsgraphen umfasst zudem: (i) Bestimmen, ob mehr als ein Weg von Punkt A bis zu dem Ende existiert; (ii) falls mehr als ein Weg von Punkt A bis zu dem Ende existiert, Bestimmen, ob einer der Wege den Punkt B durchläuft und ein anderer der Wege den Punkt B nicht durchläuft; (iii) als Antwort auf das Bestimmen, dass (a) mehr als ein Weg von Punkt A bis zu dem Ende existiert und (b) einer der Wege Punkt B durchläuft und ein anderer der Wege Punkt B nicht durchläuft, Kennzeichnen des Punktes B als steuerabhängig von Punkt A; und (iv) Aufnehmen einer Kante von Punkt A zu Punkt B in dem Steuerabhängigkeitsgraphen genau dann, wenn Punkt B von Punkt A steuerabhängig ist. Beispiel B6 kann auch die Merkmale von einem oder mehreren der Beispiele B2 bis B5 enthalten.
-
Beispiel B7 ist eine Vorrichtung gemäß Beispiel B6, wobei Punkt A und Punkt B jeweils mindestens ein Element aus der folgenden Gruppe umfassen: (a) einen Befehl aus dem Steuerflussprogramm; (b) eine Instanz eines Befehls aus dem Steuerflussprogramm in einer Schleife; (c) einen Basisblock aus dem Steuerflussprogramm; und (d) eine Instanz eines Basisblocks aus dem Steuerflussprogramm in einer Schleife.
-
Beispiel B8 ist eine Vorrichtung gemäß Beispiel B1, wobei der Übersetzer einen Compiler umfasst. Beispiel B8 kann auch die Merkmale von einem oder mehreren der Beispiele B2 bis B7 umfassen.
-
Beispiel B9 ist eine Vorrichtung gemäß Beispiel B1, wobei der Übersetzer Steuerflussbefehle enthält, die von einem Steuerflussprozessor in dem Datenverarbeitungssystem ausgeführt werden sollen. Außerdem ermöglicht es der Übersetzer es dann, wenn er von dem Steuerflussprozessor ausgeführt wird, dem Datenverarbeitungssystem, das Datenflussprogramm in dem maschinenlesbaren Medium zu speichern. Außerdem umfasst das Steuerflussprogramm eine Steuerflussversion eines Quellprogramms und das Datenflussprogramm umfasst eine Datenflussversion des Quellprogramms. Das Datenflussprogramm ermöglicht es einer Einrichtung mit einem Datenflussprozessor, die Datenflussversion des Quellprogramms auf dem Datenflussprozessor auszuführen. Beispiel B9 kann auch die Merkmale von einem oder mehreren der Beispiele B2 bis B8 umfassen.
-
Beispiel C1 ist ein Verfahren zum automatischen Konvertieren eines Steuerflussprogramms in ein Datenflussprogramm. Das Verfahren umfasst: (a) Verwenden eines in einem Datenverarbeitungssystem ausgeführten Übersetzers zum automatischen Erzeugen eines Steuerabhängigkeitsgraphen für ein Steuerflussprogramm; (b) Verwenden des in dem Datenverarbeitungssystem ausgeführten Übersetzers zum automatischen Erzeugen eines Datenflussgraphen zumindest teilweise basierend auf dem Steuerabhängigkeitsgraphen; und (c) Verwenden des in dem Datenverarbeitungssystem ausgeführten Übersetzers zum automatischen Erzeugen eines Datenflussprogramms zumindest teilweise basierend auf dem Datenflussgraphen.
-
Beispiel C2 ist ein Verfahren gemäß Beispiel C1, das ferner umfasst: Verwenden des in dem Datenverarbeitungssystem ausgeführten Übersetzers zum automatischen Ausführen von Operationen umfasst, die Folgendes umfassen: (a) Zuordnen von Variablen zu unterschiedlichen Steuerabhängigkeitsregionen in dem Steuerflussprogramm; (b) für mindestens eine bestimmte Variable in dem Steuerflussprogramm, automatisches Bestimmen, ob die Variable in einer Steuerabhängigkeitsregion definiert wird und in einer anderen Steuerabhängigkeitsregion verwendet wird; und (c) als Antwort auf eine Bestimmung, dass die Variable in einer Steuerabhängigkeitsregion definiert wird und in einer anderen Steuerabhängigkeitsregion verwendet wird, Einfügen eines Schaltbefehls in das Datenflussprogramm.
-
Beispiel C3 ist ein Verfahren gemäß Beispiel C2, wobei der Schaltbefehl Folgendes benennt: (i) einen Steuerkanal zum Empfangen eines Steuerwerts, (ii) einen Eingabekanal zum Empfangen eines Eingabewerts und (iii) mindestens zwei Ausgabekanäle. Der Schaltbefehl ist auch dazu ausgelegt, die folgenden Operationen durchzuführen, wenn er ausgeführt wird: (a) Auswählen eines der Ausgabekanäle zumindest teilweise basierend auf dem Steuerwert; und (b) Erzeugen des Eingabewerts auf dem ausgewählten Ausgabekanal.
-
Beispiel C4 ist ein Verfahren gemäß Beispiel C3, wobei der Schaltbefehl zudem dazu ausgelegt ist, den Steuerwert und den Eingabewert zu verbrauchen, wenn er ausgeführt wird.
-
Beispiel C5 ist ein Verfahren gemäß Beispiel C1, das ferner ein Verwenden des in dem Datenverarbeitungssystem ausgeführten Übersetzers zum automatischen Durchführen von Operationen umfasst, die umfassen: (a) Identifizieren von Steuerabhängigkeiten zwischen Basisblöcken, wobei jede Steuerabhängigkeit einen steuerabhängigen Basisblock und einen Eltern-Basisblock umfasst; (b) Bestimmen einer Ausführungshäufigkeit für Basisblöcke; und (c) Erzeugen einer Liste von Steuerabhängigkeitsregionen zumindest teilweise basierend auf den Bestimmungen, (i) ob jeder Basisblock in einer Sequenz von Basisblöcken direkt von dem gleichen Eltern-Basisblock steuerabhängig ist und (ii) ob jeder Basisblock in der Sequenz die gleiche Ausführungshäufigkeit aufweist.. Beispiel C5 kann auch die Merkmale von einem oder mehreren der Beispiele C2 bis C4 umfassen.
-
Beispiel C6 ist ein Verfahren gemäß Beispiel C1, wobei das Steuerflussprogramm mindestens zwei Punkte (A, B) und ein Ende aufweist. Die Operation des automatischen Erzeugens des Steuerabhängigkeitsgraphen umfasst zudem: (i) Bestimmen, ob mehr als ein Weg von Punkt A bis zu dem Ende existiert; (ii) falls mehr als ein Weg von Punkt A bis zu dem Ende existiert, Bestimmen, ob einer der Wege den Punkt B durchläuft und ein anderer der Wege den Punkt B nicht durchläuft; (iii) als Antwort auf das Bestimmen, dass (a) mehr als ein Weg von Punkt A bis zu dem Ende existiert und (b) einer der Wege Punkt B durchläuft und ein anderer der Wege Punkt B nicht durchläuft, Kennzeichnen des Punktes B als steuerabhängig von Punkt A; und (iv) Aufnehmen einer Kante von Punkt A zu Punkt B in dem Steuerabhängigkeitsgraphen genau dann, wenn Punkt B von Punkt A steuerabhängig ist. Beispiel C6 kann auch die Merkmale von einem oder mehreren der Beispiele C2 bis C5 enthalten.
-
Beispiel C7 ist ein Verfahren gemäß Beispiel C6, wobei Punkt A und Punkt B jeweils mindestens ein Element aus der folgenden Gruppe umfassen: (a) einen Befehl aus dem Steuerflussprogramm; (b) eine Instanz eines Befehls aus dem Steuerflussprogramm in einer Schleife; (c) einen Basisblock aus dem Steuerflussprogramm; und (d) eine Instanz eines Basisblocks aus dem Steuerflussprogramm in einer Schleife.
-
Beispiel C8 ist ein Verfahren gemäß Beispiel C1, wobei der Übersetzer einen Compiler umfasst. Beispiel C8 kann auch die Merkmale von einem oder mehreren der Beispiele C2 bis C7 umfassen.
-
Beispiel C9 ist ein Verfahren gemäß Beispiel C1, wobei der Übersetzer Steuerflussbefehle enthält, die von einem Steuerflussprozessor in dem Datenverarbeitungssystem ausgeführt werden sollen. Außerdem umfasst das Steuerflussprogramm eine Steuerflussversion eines Quellprogramms und das Datenflussprogramm umfasst eine Datenflussversion des Quellprogramms. Außerdem umfasst das Verfahren ferner ein Ausführen der Datenflussversion des Quellprogramms auf einem Datenflussprozessor. Beispiel C9 kann auch die Merkmale von einem oder mehreren der Beispiele C2 bis C8 umfassen.
-
Beispiel D ist mindestens ein maschinenzugängliches Medium, das Computerbefehle zum automatischen Konvertieren eines Steuerflussprogramms in ein Datenflussprogramm enthält. Die Computerbefehle befähigen die Vorrichtung als Antwort auf die Ausführung in einer Vorrichtung dazu, ein Verfahren gemäß einem der Beispiele C1 bis C9 durchzuführen.
-
Beispiel E ist ein Datenverarbeitungssystem mit Technologie zum automatischen Konvertieren eines Steuerflussprogramms in ein Datenflussprogramm. Das Datenverarbeitungssystem umfasst ein Verarbeitungselement, mindestens ein maschinenzugängliches Medium, das auf das Verarbeitungselement anspricht; und Computerbefehle, die zumindest teilweise in dem mindestens einen maschinenzugänglichen Medium gespeichert sind. Die Computerbefehle befähigen das Datenverarbeitungssystem als Antwort auf die Ausführung dazu, ein Verfahren gemäß einem der Beispiele C1 bis C9 durchzuführen.
-
Beispiel F ist ein Datenverarbeitungssystem mit einer Technologie zum automatischen Konvertieren eines Steuerflussprogramms in ein Datenflussprogramm. Das Datenverarbeitungssystem umfasst Mittel zum Durchführen des Verfahrens nach einem der Beispiele C1 bis C9.