DE69833936T2 - Verfahren zum Verhindern von Pufferblockade in Datenflussberechnungen - Google Patents

Verfahren zum Verhindern von Pufferblockade in Datenflussberechnungen Download PDF

Info

Publication number
DE69833936T2
DE69833936T2 DE69833936T DE69833936T DE69833936T2 DE 69833936 T2 DE69833936 T2 DE 69833936T2 DE 69833936 T DE69833936 T DE 69833936T DE 69833936 T DE69833936 T DE 69833936T DE 69833936 T2 DE69833936 T2 DE 69833936T2
Authority
DE
Germany
Prior art keywords
input
data
program
inputs
available
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Expired - Lifetime
Application number
DE69833936T
Other languages
English (en)
Other versions
DE69833936D1 (de
Inventor
W. Craig Waltham STANFILL
A. Clifford Cambridge LASSER
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.)
Ab Initio Technology LLC
Original Assignee
Ab Initio Software LLC
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 Ab Initio Software LLC filed Critical Ab Initio Software LLC
Publication of DE69833936D1 publication Critical patent/DE69833936D1/de
Application granted granted Critical
Publication of DE69833936T2 publication Critical patent/DE69833936T2/de
Anticipated expiration legal-status Critical
Expired - Lifetime legal-status Critical Current

Links

Classifications

    • 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/46Multiprogramming arrangements
    • G06F9/52Program synchronisation; Mutual exclusion, e.g. by means of semaphores
    • G06F9/524Deadlock detection or avoidance

Description

  • HINTERGRUND
  • Gebiet der Erfindung
  • Diese Erfindung betrifft die Datenverarbeitung und insbesondere komplexe Datenflussberechnungen.
  • Beschreibung des Stands der Technik
  • Komplexe Datenverarbeitungsanwendungen können von Komponenten durch Verbinden der Ausgänge und Eingänge verschiedener Verarbeitungsstufen durch Kommunikationskanäle (beispielsweise TCP/IP) zusammengestellt werden. Im Allgemeinen bieten diese Kommunikationskanäle eine begrenzte Datenpufferkapazität. Wenn der Pufferplatz eines Kanals erschöpft ist, "blockiert" der Kanal, so dass es nicht möglich ist, zusätzliche Daten in den Kanal zu schreiben. In den meisten Fällen ist die Blockade harmlos, beispielsweise wenn der Ausgang eines schnellen Programms mit dem Eingang eines langsameren Programms verbunden ist. Unter diesen Umständen dient die begrenzte Pufferkapazität des Kommunikationskanals dazu, die Berechnung so zu regeln, dass das schnellere Programm dem langsameren Programm nicht zu weit vorauseilt.
  • Unter bestimmten Umständen kann das Blockieren von Kanälen jedoch zu einem als "Blockade" bezeichneten Systemfehler führen. Die 1 und 2 sind Datenflussdiagramme, in denen ein einfaches Beispiel einer Kanalblockade dargestellt ist. Es sei angenommen, dass ein erstes "vorhergehendes" Programm 100 zwei Ausgänge 101, 102 erzeugt und ein zweites "späteres" Programm 103 zwei Eingänge 104, 105 benötigt. Weiter sei angenommen, dass die Ausgänge des vorhergehenden Programms 100 durch zwei Kommunikationskanäle 106, 107 mit den Eingängen des späteren Programms 103 verbunden sind.
  • Im Laufe der Berechnung kann der folgende Satz von Umständen auftreten, wie in 2 dargestellt ist:
    • • Das vorhergehende Programm 100 möchte Daten an seinen ersten Ausgang 101 schreiben.
    • • Das spätere Programm 103 möchte Daten von seinem zweiten Eingang 105 lesen.
    • • Der erste Kommunikationskanal 106 ist voll (sein Pufferplatz ist vollständig gebunden).
    • • Der zweite Kommunikationskanal 107 ist leer (er enthält keine nicht gesendeten Daten).
  • Weder das vorhergehende Programm 100 noch das spätere Programm 103 kann weitere Fortschritte machen, so dass die Berechnung nie abgeschlossen wird. Diese Situation ist allgemein als eine Blockade bekannt und wird in Zusammenhang mit dieser Erörterung als eine "Pufferblockade" bezeichnet.
  • Weil die Möglichkeit einer Pufferblockade zu einem Anwendungsfehler führen kann, wäre ein Verfahren zum Verhindern von Pufferblockaden bei Datenflussberechnungen sehr nützlich. Die vorliegende Erfindung bietet eine Lösung für dieses Problem.
  • US 5 568 614 A beschreibt eine Datenhandhabungsanordnung für ein Computersystem mit einer speziellen Anwendung auf Multimediasysteme.
  • US 4 298 954 A beschreibt eine Pufferspeichervorrichtung, die zwei Puffer aufweist, welche zwischen empfangenden und zuführenden Datensignalen alternieren.
  • Lau F.C.M. u.a. "Propagating Buffer: A New Approach to Deadlock "Freedom in Store-and-Forward Networks", IEEE ONDISC, 1991, S. 804–807, XP002915492 bezeichnet das Problem des Garantierens der Blockadefreiheit in Speicher-und-Weiterleitungs-Netzwerken, welche für Blockaden infolge begrenzten Pufferplatzes an den Knoten anfällig sind.
  • ZUSAMMENFASSUNG
  • Diese Erfindung betrifft eine Technik zum Verhindern von Pufferblockaden für Datenflussberechnungen in einem System, das mindestens einen Kommunikationskanal mit einem Puffer aufweist, wobei die Technik den folgenden Algorithmus implementiert:
    • • Jeder "spätere" Prozess mit mehr als einem Eingang I wird mit einem Pool zusätzlichen Pufferplatzes versehen. Gemäß einer bevorzugten Ausführungsform wird jedem Eingang I eine "verzögerte Eingangswarteschlange" zugeordnet, welche sich auf eine Folge von Datenblöcken in dem zusätzlichen Pufferplatz beziehen kann.
    • • Die Eingänge jedes späteren Prozesses werden in disjunkte Eingangssätze unterteilt, so dass zwei Eingänge im selben Eingangssatz sind, wenn und nur wenn diese Eingänge entweder direkt oder indirekt von einem gemeinsamen "vorhergehenden" Prozess stammen, der durch den Kommunikationskanal mit dem späteren Prozess verbunden ist.
    • • Falls ein späterer Prozess Daten von einem vorhergehenden Prozess über einen Eingang I lesen muss, für den keine Daten verfügbar sind UND falls an irgendeinem anderen Eingang J im selben Eingangssatz Daten verfügbar sind, DANN liest der spätere Prozess kontinuierlich verfügbare Daten von jedem Eingang J und speichert diese Daten in einem zusätzlichen Puffer, der einem solchen Eingang J entspricht, bis die verfügbaren Daten an allen anderen Eingängen J erschöpft sind ODER Daten an dem gewünschten Eingang I verfügbar werden. Gemäß der bevorzugten Ausführungsform geschieht dies durch Zuordnen eines Speicherblocks von dem zusätzlichen Puffer, Füllen dieses Speicherblocks mit Daten und Hinzufügen des Speicherblocks zur verzögerten Eingangswarteschlange. Falls der zusätzliche Puffer voll wird, bricht der spätere Prozess ab, statt eine Blockade zu riskieren.
    • • Falls der spätere Prozess Daten von einem Eingang I lesen muss, bei dem sich Daten in den zusätzlichen Puffern befinden, werden Daten von den zusätzlichen Puffern statt von dem entsprechenden Kommunikationskanal extrahiert.
  • Die Einzelheiten von einer oder mehreren Ausführungsformen der Erfindung sind in der anliegenden Zeichnung und der nachstehenden Beschreibung dargelegt.
  • BESCHREIBUNG DER ZEICHNUNG
  • Es zeigen:
  • die 1 und 2 Datenflussdiagramme, in denen ein einfaches Beispiel der Kanalblockade nach dem Stand der Technik dargestellt ist,
  • die 3, 4, 5 und 6 eine Folge von Datenflussdiagrammen, in denen eine Ausführungsform einer Technik zum Verhindern von Pufferblockaden gemäß der Erfindung dargestellt ist,
  • 7 ein komplexerer Datenflussgraph, auf den die Erfindung angewendet werden kann, und
  • die 8, 9 und 10 eine Folge von Datenflussdiagrammen, in denen eine Ausführungsform einer Technik zum Verhindern von Pufferblockaden für mehrere Daten erzeugende Knoten gemäß der Erfindung dargestellt ist.
  • Gleiche Bezugszahlen und Bezeichnungen in den verschiedenen Darstellungen geben gleiche Elemente an.
  • DETAILLIERTE BESCHREIBUNG
  • Die 3, 4, 5 und 6 sind eine Folge von Datenflussdiagrammen, in denen eine Ausführungsform einer Technik zum Verhindern von Pufferblockaden gemäß der Erfindung dargestellt ist. Pufferblockaden des in 1 dargestellten Typs können durch Implementieren des folgenden Algorithmus verhindert werden:
    • • Jedes "spätere" Programm 103 mit mehr als einem Eingang 104, 105 ist mit einem Pool zusätzlichen Puffer platzes 108 versehen, wobei es sich typischerweise um eine Kombination von Primärspeicher (beispielsweise RAM) und Sekundärspeicher (beispielsweise einer Platte) handelt (3). Gemäß der bevorzugten Ausführungsform ist jedem Eingang 104, 105 eine "verzögerte Eingangswarteschlange". 109, 110 zugeordnet, die sich auf eine Folge von Datenspeicherblöcken in dem zusätzlichen Pufferplatz 108 beziehen kann. Gemäß der bevorzugten Ausführungsform sind die verzögerten Eingangswarteschlangen 109, 110 als SILO-(FIFO)-Warteschlangen konfiguriert.
    • • Falls ein späteres Programm 103 Daten von einem "früheren" Programm 100 über einen Eingang 105, für den keine Daten verfügbar sind, lesen muss, UND falls Daten an einem oder mehreren der anderen Eingänge 104 für das spätere Programm 103 verfügbar sind, DANN liest das spätere Programm 103 kontinuierlich verfügbare Daten von jedem Eingang 104 und speichert diese Daten in entsprechenden Speicherblöcken, die von dem zusätzlichen Pufferplatz 108 (4) zugeordnet wurden, bis die verfügbaren Daten an allen anderen Eingängen 104 erschöpft sind ODER Daten an dem gewünschten Eingang 105 (5) verfügbar werden. Gemäß der bevorzugten Ausführungsform umfasst die Pufferzuordnung das Zuordnen eines Speicherblocks von dem zusätzlichen Pufferplatz 108, das Füllen dieses Speicherblocks mit Daten und das Hinzufügen eines Verweises auf den Speicherblock zur verzögerten Eingangswarteschlange 109. Falls der zusätzliche Pufferplatz 108 voll wird und weitere Daten gepuffert werden müssen, bricht das spätere Programm 103 ab, statt eine Blockade zu riskieren.
    • • Falls das spätere Programm 103 Daten von einem Eingang 104 lesen muss, in dessen verzögerter Eingangswarteschlange 109 sich Daten befinden, werden Daten aus Speicherblöcken, auf die die verzögerte Eingangs warteschlange 109 verweist, statt von dem entsprechenden Kommunikationskanal 106 (6) extrahiert. Wenn die Daten von einem Speicherblock aufgebraucht worden sind, wird der Speicherblock zum zusätzlichen Pufferplatz 108 zurückgeführt.
  • Wenngleich diese Lösung für den einfachen Fall von zwei Programmen 100, 103 erläutert wurde, welche durch ein Paar von Kommunikationskanälen 106, 107 verbunden sind, gilt sie auch für alle azyklischen Datenflussgraphen, unabhängig von der Anzahl von Kommunikationskanäle und Programme und unabhängig von der Komplexität der Konnektivität des Graphen, wobei beispielsweise auf 7 verwiesen sei, wobei es sich um einen komplexeren Datenflussgraphen handelt, auf den die Erfindung angewendet werden kann.
  • Ein praktisches Problem, das bei dem vorstehend dargelegten Verfahren auftritt, besteht darin, dass es manchmal Daten unnötig puffert, wenn es mit mehreren Daten erzeugenden Knoten verwendet wird. Es sei beispielsweise angenommen, dass das Beispiel in 3 erweitert wird, wie in 8 dargestellt ist, indem ein zusätzliches vorhergehendes Programm 111 mit einem einzigen Ausgang 112 hinzugefügt wird, indem ein neuer Eingang 114 zu dem späteren Programm 103 hinzugefügt wird und indem der einzige Ausgang 112 mit einem neuen Kommunikationskanal 113 mit dem neuen Eingang 114 verbunden wird und indem eine verzögerte Eingangswarteschlange 115 gemäß dem vorstehend erörterten Verfahren hinzugefügt wird. Weiterhin sei angenommen, dass das neue Programm 111 Daten mit einer viel niedrigeren Rate erzeugt als das alte Programm 100.
  • Infolge der Tatsache, dass das vorhergehende Doppelkanalprogramm 100 Daten viel schneller erzeugt als das vorhergehende Einzelkanalprogramm 111, stellt das spätere Programm 103 häufig fest, dass Daten an einem der Eingangskanäle 106 oder 107 von dem schnelleren vorhergehenden Programm 100 verfügbar sind, jedoch nicht auf dem Kanal 113 von dem langsameren vorhergehenden Programm 111. Gemäß der vorstehend erwähnten Prozedur verbraucht das spätere Programm 103 die verfügbaren Eingangsdaten auf dem Kanal 106 oder 107 und speichert diese Daten in einer der verzögerten Eingangswarteschlangen 109 oder 110, wie in 9 dargestellt ist.
  • Schließlich kann der zusätzliche Pufferplatz 108 erschöpft werden, wie in 10 dargestellt ist, so dass das spätere Programm 103, unter der Annahme, dass eine Blockade bevorsteht, gezwungen werden kann, die Ausführung abzubrechen. Dies ist ein unvorteilhaftes Ergebnis davon, dass der vorstehend beschriebene Algorithmus den zusätzlichen Pufferplatz 108 verwendet, um die Geschwindigkeitsdifferenz zwischen den Daten erzeugenden Programmen 110 und 111 zu kompensieren, statt eine Blockade zu verhindern.
  • Die Lösung dieses Problems besteht in der Erkenntnis, dass eine Blockade nur in Fällen möglich ist, in denen sich zwei oder mehr Eingänge einen gemeinsamen vorhergehenden Prozess teilen, wobei diese Differenz dazu dient, eine zu einer Blockade neigende Berechnung (1) von einer blockadefreien Berechnung zu unterscheiden.
  • Das bevorzugte Verfahren zum Überwinden dieser Umstände ist das folgende:
    • • Unterteilen der Eingänge jedes späteren Programms in disjunkte Teilsätze oder Unterteilungen, so dass zwei Eingänge genau dann in derselben Unterteilung liegen, falls sie ihre Eingabe entweder direkt oder indirekt von einem gemeinsamen Quellenprogramm erhalten, wobei diese Unterteilung als ein "Eingangssatz" bezeichnet sei.
    • • Modifizieren der vorstehend beschriebenen Prozedur zum Speichern von Daten in einer verzögerten Eingangswarteschlange, so dass sie eine Prozedur mit "umgeleitetem Eingang" aufweist: Falls ein Programm von einem Eingang I lesen möchte, für den keine Daten verfügbar sind, und an einem anderen Eingang J in demselben Eingangssatz Daten verfügbar sind, muss das Programm Daten von dem Eingang J lesen und das Ergeb nis in einer verzögerten Eingangswarteschlange für den Eingang J speichern.
  • Im Fall von 8 weist das spätere Programm 103 zwei Eingangssätze {104, 105} und {114} auf. Es sei angenommen, dass das spätere Programm 103 in eine Situation gerät, in der es vom Eingang 114 lesen möchte, Daten jedoch nur am Eingang 104 oder 105 verfügbar sind, wie in 9 dargestellt ist. Weil die Eingänge 104 und 105 nicht in dem gleichen Eingangssatz sind wie der Eingang 114, werden ihre Daten nicht zu den verzögerten Eingangswarteschlangen 109 oder 110 umgeleitet, sondern das spätere Programm 103 wartet, bis das vorhergehende Programm 111 Daten auf dem Kanal 113 erzeugt, und das spätere Programm 103 liest dann diese Daten und fährt normal fort.
  • Andererseits sei angenommen, dass das spätere Programm 103 vom Eingang 105 lesen möchte und Daten am Eingang 104, jedoch nicht am Eingang 105 verfügbar sind. In diesem Fall wird die Prozedur mit umgeleitetem Eingang infolge der Tatsache aufgerufen, dass die Eingänge 104 und 105 im selben Eingangssatz liegen. Die am Eingang 104 verfügbaren Daten werden für einen späteren Zugriff gepuffert. Die in 3 dargestellte Konfiguration wird auch durch die Prozedur mit umgeleitetem Eingang abgedeckt, weil beide Eingänge 104, 105 zu einem Eingangssatz gehören.
  • Die Eingangssätze können durch einen bevorzugten Algorithmus gefunden werden. Für diesen Algorithmus können beliebige der wohlbekannten Verfahren zum Darstellen von Sätzen bzw. Mengen in der Art eines Bitvektors oder einer verknüpften Liste sowie beliebige der wohlbekannten Verfahren zum Berechnen der Vereinigung und des Schnitts solcher Sätze bzw. Mengen verwendet werden.
    • 1. Zuordnen eines Satzes vorhergehender Programme zu jedem Kommunikationskanal und zu jedem Programm. Jeder solche Satz ist zunächst leer. Falls C ein Kommunikationskanal ist, steht C.upstream für die Programmsätze, die C vorhergehen. Falls P ein Programm ist, steht P.upstream für die Programmsätze, die P vorhergehen.
    • 2. Zuordnen einer Liste von Eingangssätzen zu jedem Programm. Falls P ein Programm ist, steht P.inputsets für die P zugeordneten Eingangssätze.
    • 3. Erzeugen einer topologisch sortierten Liste von Programmen, so dass, falls ein Programm P2 die von einem zweiten Programm P1 erzeugte Eingabe verbraucht, P1 vor P2 in der Liste kommt. Falls keine solche topologisch sortierte Liste erzeugt werden kann, wird der Algorithmus verlassen, wodurch angegeben wird, dass nicht garantiert werden kann, dass die Berechnung blockadefrei ist.
    • 4. Durchlaufen dieser Programmliste vom ersten bis zum letzten Programm, wobei die folgenden Operationen an jedem Programm P ausgeführt werden:
    • a. Erzeugen einer leeren Liste L. Jeder Eintrag von L besteht aus einem Satz von Eingaben und einem Satz vorhergehender Programme. L[i].inputs steht für den Eingangssatz des i-ten Eintrags in L. L[i].upstream steht für den vorhergehenden Programmsatz des i-ten Eintrags in L.
    • b. Für jeden der Eingänge I von P gilt:
    • i. C sei der mit I verbundene Eingangskanal.
    • ii. Für jedes Element L[i] in L gilt:
    • (1) Falls der Schnitt von L[i].upstream mit C.upstream nicht leer ist, setze L[i].upstream = L[i].upstream ∪ C.upstream, addiere I zu L[i].inputs und setze mit dem nächsten Eingang I fort.
    • (2) Falls durch den vorstehenden Schritt kein Element L[i] identifiziert wird, addiere ein neues Element L[i], so dass L[i].upstream = C.upstream ist und L[i].inputs = {I}.
    • c. Für jedes Element L[i] in L setze P.inputsets = P.inputsets + L[i].inputs.
    • d. Für jeden Kommunikationskanal C, der mit einem der Eingänge von P verbunden ist, ist P.upstream = P.upstream ∪ C.upstream.
    • e. Für jeden Kommunikationskanal C, der mit einem der Ausgänge von P verbunden ist, ist C.upstream = P.upstream ∪ {P}.
  • Als ein Beispiel werde auf der Grundlage der in 8 dargestellten Konfiguration mit der Initialisierung der vorhergehenden Prozesssätze für die drei Programme 100, 103 und 111 und für die drei Kommunikationskanäle 106, 107, 113 begonnen. Es wird ein Satz von Eingangssätzen für jedes Programm erzeugt. Hieraus ergibt sich der folgende Zustand:
    Figure 00100001
  • Die Programme werden topologisch sortiert, wodurch als eine Möglichkeit die folgende Liste (100, 111, 103) erzeugt wird.
  • Zuerst wird das vorhergehende Programm 100 verarbeitet. Es hat keine Eingänge, so dass 100.inputsets und 100.upstream leer bleiben. Die Ausgänge des vorhergehenden Programms 100 werden mit den Kanälen 106 und 107 verbunden, so dass 106.upstream und 107.upstream auf {100} gesetzt werden. Hieraus ergibt sich der folgende Zustand:
    Figure 00110001
  • Als nächstes wird das vorhergehende Programm 111 verarbeitet (das nächste Programm in der topologisch sortierten Liste). Das vorhergehende Programm 111 hat keine Eingänge, so dass 111.inputsets leer bleibt. Das vorhergehende Programm 111 weist einen einzigen mit dem Kanal 113 verbundenen Ausgang auf, so dass 113.upstream = {111} ist. Hieraus ergibt sich der folgende Zustand:
    Figure 00110002
  • Schließlich wird das spätere Programm 103 verarbeitet. Es liest von drei Eingängen, nämlich 104, 105, 114. Der Algorithmus erzeugt die folgenden Schritte:
    • • L wird so initialisiert, dass es leer ist. Es sei der erste Eingang I = 104 betrachtet, der mit dem Kanal C = 106 verbunden ist. Weil L leer ist, existiert kein Element L[i], so dass L[i].upstream C.upstream schneidet. Demgemäß wird ein neuer Eintrag in L erzeugt, der aus C.upstream und {I} besteht, woraus sich L = ({100}, {104}) ergibt.
    • • Als nächstes sei der zweite Eingang I = 105 betrachtet, der mit dem Kanal C = 107 verbunden ist. L[1].upstream = {100} und C.upstream = {100}. Diese beiden Sätze überlappen (tatsächlich sind sie zufällig identisch), so dass C.upstream zu L[1].upstream addiert wird und I zu L[1].inputs addiert wird, so dass sich L = ({100}, {104, 105}) ergibt.
    • • Schließlich wird der dritte Eingang I = 114 betrachtet, der mit dem Kanal C = 113 verbunden ist. C.upstream = {111}, und kein Element L[i].upstream schneidet C.upstream, so dass ein neuer Eintrag in I erzeugt wird, der aus C.upstream und {I} besteht. Dies führt zu L = ({100}, {104, 105}), ({111}, {114}).
    • • Sammeln der Eingangssätze von L: d.h. 103.inputsets = {{104, 105}, {114}}.
    • • Schließlich sei jeder mit dem Programm 103 verbundene Eingangskanal C betrachtet und die Vereinigung ihrer vorhergehenden Sätze berechnet. Das Ergebnis wird in P.upstream gespeichert, d.h. 103.upstream = {100, 111}.
  • Dies führt zu dem folgenden Endzustand:
    Figure 00120001
  • Jeder Algorithmus, der das gleiche Ergebnis berechnet, kann verwendet werden. Weiterhin ist es einer Person möglich, die Berechnung zu inspizieren und Eingangssätze manuell zuzuweisen.
  • Es wurde eine Anzahl von Ausführungsformen der vorliegenden Erfindung beschrieben. Dennoch ist zu verstehen, dass verschiedene Modifikationen vorgenommen werden können. Bei spielsweise können andere Pufferzuordnungsschemata für die zusätzlichen Puffer verwendet werden. Demgemäß ist zu verstehen, dass die Erfindung nicht durch die spezifische erläuterte Ausführungsform sondern nur durch den Schutzumfang der anliegenden Ansprüche beschränkt ist.

Claims (10)

  1. Verfahren zum Verhindern von Pufferblockaden für Datenflussberechnungen in einem System, das mindestens einen Kommunikationskanal (106) mit einem Puffer aufweist, welches die folgenden Schritte aufweist: (a) Bereitstellen eines zusätzlichen Puffers für jeden Eingang (104, 105) eines späteren Prozesses (103), (b) Unterteilen der Eingänge jedes späteren Prozesses (103) in disjunkte Eingangssätze, so dass zwei Eingänge im selben Eingangssatz sind, wenn und nur wenn diese Eingänge entweder direkt oder indirekt von einem gemeinsamen vorhergehenden Prozess (100) stammen, der durch den Kommunikationskanal (106) mit dem späteren Prozess (103) verbunden ist, (c) Versuchen, Daten über einen Eingang I in einem Eingangssatz aus einem vorhergehenden Prozess (100) in einen späteren Prozess (103) zu lesen, (d) Lesen der verfügbaren Daten von jedem Eingang J und Speichern dieser Daten im zusätzlichen Puffer, der diesem Eingang J entspricht, bis die verfügbaren Daten an allen solchen Eingängen J erschöpft sind oder Daten am Eingang I verfügbar werden, falls gegenwärtig keine Daten vom Eingang I verfügbar sind und falls an irgendeinem anderen Eingang J im selben Eingangssatz Daten verfügbar sind.
  2. Verfahren nach Anspruch 1 mit dem weiteren Schritt: Abbrechen des späteren Prozesses (103), falls ein zusätzlicher Puffer voll wird und weitere Daten gespeichert werden müssen.
  3. Verfahren nach Anspruch 1 mit dem weiteren Schritt: Lesen gespeicherter Daten in den späteren Prozess (103) aus dem zusätzlichen Puffer, der einem Eingang I entspricht, bevor Daten direkt vom Eingang I gelesen werden.
  4. Verfahren nach Anspruch 1 mit den weiteren Schritten: Bereitstellen eines Pool-Blockspeichers (108), Zuordnen jedes zusätzlichen Puffers von einem oder mehreren Speicherblöcken und Bezugnehmen auf jeden zugeordneten zusätzlichen Puffer in einer verzögerten Eingangswarteschlange (109, 110).
  5. Verfahren nach Anspruch 4 mit den weiteren Schritten: Lesen gespeicherter Daten in den späteren Prozess (103) aus den Speicherblöcken des zusätzlichen Puffers entsprechend einem Eingang I vor dem direkten Lesen von Daten vom Eingang I und Zurückgeben jedes gelesenen Speicherblocks zum Pool von Speicherblöcken (108).
  6. Computerprogramm, welches sich auf einem computerlesbaren Medium befindet, zum Verhindern von Pufferblockaden für Datenflussberechnungen in einem System, das mindestens einen Kommunikationskanal (106) mit einem Puffer aufweist, welches Befehle aufweist, um einen Computer zu veranlassen: (a) einen zusätzlichen Puffer für jeden Eingang (104, 105) eines späteren Prozesses (103) bereitzustellen, (b) die Eingänge jedes späteren Prozesses (103) in disjunkte Eingangssätze zu unterteilen, so dass zwei Eingänge im selben Eingangssatz sind, wenn und nur wenn diese Eingänge entweder direkt oder indirekt von einem gemeinsamen vorhergehenden Prozess (100) stammen, der durch den Kommunikationskanal (106) mit dem späteren Prozess (103) verbunden ist, (c) zu versuchen, Daten über einen Eingang I in einem Eingangssatz aus einem vorhergehenden Prozess (100) in einen späteren Prozess (103) zu lesen, (d) die verfügbaren Daten von jedem Eingang J zu lesen und diese Daten im zusätzlichen Puffer, der diesem Eingang J entspricht, zu speichern, bis die verfügbaren Daten an allen solchen Eingängen J erschöpft sind oder Daten am Eingang I verfügbar werden, falls gegenwärtig keine Daten vom Eingang I verfügbar sind und falls an irgendeinem anderen Eingang J im selben Eingangssatz Daten verfügbar sind.
  7. Programm nach Anspruch 6, welches weiter Befehle aufweist, um einen Computer zu veranlassen, folgendes auszuführen: Abbrechen des späteren Prozesses (103), falls ein zusätzlicher Puffer voll wird und weitere Daten gespeichert werden müssen.
  8. Programm nach Anspruch 6, welches weiter Befehle aufweist, um einen Computer zu veranlassen, folgendes auszuführen: Lesen gespeicherter Daten in den späteren Prozess (103) aus dem zusätzlichen Puffer, der einem Eingang I entspricht, bevor Daten direkt vom Eingang I gelesen werden.
  9. Programm nach Anspruch 6, welches weiter Befehle aufweist, um einen Computer zu veranlassen, folgendes auszuführen: Bereitstellen eines Pool-Blockspeichers (108), Zuordnen jedes zusätzlichen Puffers von einem oder mehreren Speicherblöcken und Bezugnehmen auf jeden zugeordneten zusätzlichen Puffer in einer verzögerten Eingangswarteschlange (109, 110).
  10. Programm nach Anspruch 9, welches weiter Befehle aufweist, um einen Computer zu veranlassen, folgendes auszuführen: Lesen gespeicherter Daten in den späteren Prozess (103) aus den Speicherblöcken des zusätzlichen Puffers entsprechend einem Eingang I vor dem direkten Lesen von Daten vom Eingang I und Zurückgeben jedes gelesenen Speicherblocks zum Pool von Speicherblöcken (108).
DE69833936T 1997-04-28 1998-04-28 Verfahren zum Verhindern von Pufferblockade in Datenflussberechnungen Expired - Lifetime DE69833936T2 (de)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US847909 1997-04-28
US08/847,909 US6088716A (en) 1997-04-28 1997-04-28 Method for preventing buffer deadlock in dataflow computations
PCT/US1998/008559 WO1998049628A2 (en) 1997-04-28 1998-04-28 Method for preventing buffer deadlock in dataflow computations

Publications (2)

Publication Number Publication Date
DE69833936D1 DE69833936D1 (de) 2006-05-11
DE69833936T2 true DE69833936T2 (de) 2006-12-28

Family

ID=25301795

Family Applications (1)

Application Number Title Priority Date Filing Date
DE69833936T Expired - Lifetime DE69833936T2 (de) 1997-04-28 1998-04-28 Verfahren zum Verhindern von Pufferblockade in Datenflussberechnungen

Country Status (12)

Country Link
US (1) US6088716A (de)
EP (1) EP0985180B1 (de)
JP (1) JP3310304B2 (de)
AT (1) ATE321304T1 (de)
AU (1) AU7168598A (de)
CA (1) CA2288892C (de)
CY (1) CY1106438T1 (de)
DE (1) DE69833936T2 (de)
DK (1) DK0985180T3 (de)
ES (1) ES2256937T3 (de)
PT (1) PT985180E (de)
WO (1) WO1998049628A2 (de)

Families Citing this family (29)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5909681A (en) 1996-03-25 1999-06-01 Torrent Systems, Inc. Computer system and computerized method for partitioning data for parallel processing
US7164422B1 (en) * 2000-07-28 2007-01-16 Ab Initio Software Corporation Parameterized graphs with conditional components
US7167850B2 (en) * 2002-10-10 2007-01-23 Ab Initio Software Corporation Startup and control of graph-based computation
CA2891196C (en) * 2003-06-25 2018-03-20 Ab Initio Technology Llc Computer-aided parallelizing of computation graphs
US20080052687A1 (en) * 2003-11-03 2008-02-28 Agustin Gonzales-Tuchmann Development environment for data transformation applications
US7461236B1 (en) * 2005-03-25 2008-12-02 Tilera Corporation Transferring data in a parallel processing environment
US7877350B2 (en) * 2005-06-27 2011-01-25 Ab Initio Technology Llc Managing metadata for graph-based computations
US7716630B2 (en) * 2005-06-27 2010-05-11 Ab Initio Technology Llc Managing parameters for graph-based computations
US7822615B2 (en) * 2005-06-27 2010-10-26 Ab Initio Technology Llc Translating expressions in a computing environment
US7231237B2 (en) * 2005-08-31 2007-06-12 Motorola, Inc. Wireless communication device with strategically positioned antenna
US7870556B2 (en) * 2006-05-16 2011-01-11 Ab Initio Technology Llc Managing computing resources in graph-based computations
CA2657233C (en) 2006-08-10 2016-06-21 Ab Initio Software Llc Distributing services in graph-based computations
US9053072B2 (en) * 2007-01-25 2015-06-09 Hewlett-Packard Development Company, L.P. End node transactions at threshold-partial fullness of storage space
CN107423046B (zh) 2007-07-26 2021-08-06 起元技术有限责任公司 用于处理基于图的计算的方法、系统以及计算机可读介质
US8595391B1 (en) * 2008-03-14 2013-11-26 Xilinx, Inc. Automatic queue sizing for dataflow applications
US20090282042A1 (en) * 2008-05-12 2009-11-12 Expressor Software Method and system for managing the development of data integration projects to facilitate project development and analysis thereof
KR20150038758A (ko) 2009-02-13 2015-04-08 아브 이니티오 테크놀로지 엘엘시 태스크 실행 관리
US8667329B2 (en) * 2009-09-25 2014-03-04 Ab Initio Technology Llc Processing transactions in graph-based applications
CA2801573C (en) 2010-06-15 2018-08-14 Ab Initio Technology Llc Dynamically loading graph-based computations
US9003084B2 (en) 2011-02-18 2015-04-07 Ab Initio Technology Llc Sorting
US8447901B2 (en) 2011-02-18 2013-05-21 Ab Initio Technology Llc Managing buffer conditions through sorting
US10108521B2 (en) 2012-11-16 2018-10-23 Ab Initio Technology Llc Dynamic component performance monitoring
US9507682B2 (en) 2012-11-16 2016-11-29 Ab Initio Technology Llc Dynamic graph performance monitoring
US9274926B2 (en) 2013-01-03 2016-03-01 Ab Initio Technology Llc Configurable testing of computer programs
WO2015085152A1 (en) 2013-12-05 2015-06-11 Ab Initio Technology Llc Managing interfaces for dataflow graphs composed of sub-graphs
US10657134B2 (en) 2015-08-05 2020-05-19 Ab Initio Technology Llc Selecting queries for execution on a stream of real-time data
EP3394739B1 (de) 2015-12-21 2020-11-11 AB Initio Technology LLC Erzeugung einer subgraph-schnittstelle
JP7064367B2 (ja) * 2018-03-30 2022-05-10 株式会社デンソー デッドロック回避方法、デッドロック回避装置
JP7039365B2 (ja) * 2018-03-30 2022-03-22 株式会社デンソー デッドロック回避方法、デッドロック回避装置

Family Cites Families (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4298954A (en) * 1979-04-30 1981-11-03 International Business Machines Corporation Alternating data buffers when one buffer is empty and another buffer is variably full of data
US5204965A (en) * 1985-08-20 1993-04-20 Schlumberger Technology Corporation Data processing system using stream stores
CA2084575C (en) * 1991-12-31 1996-12-03 Chris A. Dinallo Personal computer with generalized data streaming apparatus for multimedia devices
DE4321776C1 (de) * 1993-06-30 1994-12-08 Siemens Ag Verfahren zum Bilden und Analysieren von informationselementeorientierten Signalisierungsmeldungen in Kommunikationseinrichtungen
US5568614A (en) * 1994-07-29 1996-10-22 International Business Machines Corporation Data streaming between peer subsystems of a computer system
US5790893A (en) * 1996-06-05 1998-08-04 International Business Machines Corporation Segmented concurrent receive/transfer interface using shared RAM storage

Also Published As

Publication number Publication date
DK0985180T3 (da) 2006-07-17
ATE321304T1 (de) 2006-04-15
PT985180E (pt) 2006-07-31
WO1998049628A2 (en) 1998-11-05
ES2256937T3 (es) 2006-07-16
JP3310304B2 (ja) 2002-08-05
WO1998049628A3 (en) 1999-03-11
CA2288892A1 (en) 1998-11-05
CY1106438T1 (el) 2011-10-12
EP0985180A1 (de) 2000-03-15
EP0985180B1 (de) 2006-03-22
US6088716A (en) 2000-07-11
AU7168598A (en) 1998-11-24
DE69833936D1 (de) 2006-05-11
CA2288892C (en) 2003-09-09
EP0985180A4 (de) 2000-08-16
JP2001500656A (ja) 2001-01-16

Similar Documents

Publication Publication Date Title
DE69833936T2 (de) Verfahren zum Verhindern von Pufferblockade in Datenflussberechnungen
DE2234867C2 (de) Anordnung in einer Datenverarbeitungsanlage zum Steuern der Verarbeitung zweier voneinander unabhängiger Befehlsfolgen
DE2224537C2 (de) Einrichtung und Verfahren zur Instruktionsauswahl in einem Fließbandprozessor
DE2505843A1 (de) Datenverarbeitungsanlage mit datenstromgesteuerter simultanverarbeitung
DE19903633A1 (de) Implementierung von Boolescher Erfüllbarkeit mit nichtchronologischer Rückwärtsverarbeitung in rekonfigurierbarer Hardware
DE3606869A1 (de) Vorrichtung zur datenkompression
DE602004008911T2 (de) Verfahren und system um die reihenfolge von paketen mit hilfe eines zwischenspeichers zu gewährleisten
DE1774052B1 (de) Rechner
DE19526008A1 (de) Vertikal partitionierter, primärer Befehls-Cache-Speicher
DE112016003598T5 (de) Gleichzeitige Massenverarbeitung von baumbasierten Datenstrukturen
DE2912073A1 (de) Stapelspeicheranordnung zur kurzzeitigen speicherung von informationen bei nichtabsetzbarkeit dieser informationen in einem datenverarbeitungssystem
DE2739525C2 (de) Rechner
DE3307194C2 (de)
DE10063915B4 (de) Informationsverarbeitungsgerät, das eine Mehrzweckverarbeitung und Transaktionsverarbeitung ausführt
DE69831308T2 (de) Verfahren zur übersetzung eines atm-zellenkopfs
DE3025167C2 (de) Datenverarbeitungseinrichtung
DE102016111497A1 (de) Halbleitervorrichtung
DE10219161A1 (de) Vorrichtung und Verfahren zum Umrechnen eines Terms
DE2507405C2 (de) Anordnung zum Synchronisieren gleichzeitig auszuführender Tasks für Peripheriegeräte einer Datenverarbeitungsanlage
DE2750126B2 (de)
EP1038235B1 (de) Vorrichtung zum hierarchischen verbinden einer mehrzahl von funktionseinheiten in einem prozessor
DE112012002268B4 (de) Modifizieren von Paketen zum Einsparen von Speicherplatz
DE1524211C3 (de) Datenverarbeitungsanlage
DE2223257A1 (de) Sichtanzeigegeraet
DE69922889T2 (de) Verfahren und vorrichtung zur kontrolle der bitratenkonformität von datumzellen

Legal Events

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

Owner name: AB INITIO SOFTWARE LLC, LEXINGTON, MASS., US

8327 Change in the person/name/address of the patent owner

Owner name: AB INITIO TECHNOLOGY LLC, LEXINGTON, MASS., US