(57)【要約】  ２つの“Ｎｍ”ビットのデータワード（Ａ，Ｂ）の間の順序関係を示す比較出力（ＧＥ）を備えた、前記２つのデータワードのための比較器ユニット（１０）であって、前記比較器ユニットの機能は、第１のデータワード（Ａ）の可能な連続した値と関連付けられた行と、第２のデータワード（Ｂ）の可能な連続した値と関連付けられた列とを含む論理テーブルによって表され、各行は、前記行と同じ値に関連付けられた前記列との交点において“１”を含むと共に、該“１”の後には、一連の“０”が続き、前記一連の“０”の後には、循環的に前記行を完成する一連の“１”が続いており、“０”の数が、各行に関して同じであると共に、前記データワードの最大値（１５）の半分より小さいことを特徴とする。
2013539144.tif 000002
【特許請求の範囲】
【請求項１】
２つの“Ｎｍ”ビットのデータワード（Ａ，Ｂ）の間の順序関係を示す比較出力（ＧＥ）を備えた、前記２つのデータワードのための比較器ユニット（１０）であって、
前記比較器ユニットの機能は、第１のデータワード（Ａ）の可能な連続した値と関連付けられた行と、第２のデータワード（Ｂ）の可能な連続した値と関連付けられた列とを含む論理テーブルによって表され、
各行は、前記行と同じ値に関連付けられた前記列との交点において“１”を含むと共に、該“１”の後には、一連の“０”が続き、
前記一連の“０”の後には、循環的に前記行を完成する一連の“１”が続いており、“０”の数が、各行に関して同じであると共に、前記データワードの最大値（１５）の半分より小さい
ことを特徴とする比較器ユニット。
【請求項２】
各ベクトルが“Ｎｍ”の倍数である複数のビットを有する構成要素を含む、半順序関係に従った２つの前記ベクトルのための比較器であって、
キャリー伝搬端子（Ｃｏ，Ｃｉ）を通してチェーン状に接続された、複数の、請求項１に記載の比較器ユニット（１０）と、
２つの連続したユニットの前記キャリー伝搬端子の間に配置されると共に、ベクトルの構成要素の間の境界を定義する信号（Ｓ）のアクティブ状態（１）に応答して、前記連続したユニットの間の前記キャリーの伝搬を遮断するように構成されたゲート（１２）と、
前記比較出力（ＧＥ）に配置されると共に、前記境界を定義する信号（Ｓ）の非アクティブ状態（０）に応答して、前記比較出力の状態を抑制するように構成されたゲート（１４）と
を備えることを特徴とする比較器。
【請求項３】
各ユニット（１０）は、前記ユニットに提示された前記データワードの相当性を示す相当性出力（Ｅ）を備えると共に、
前記比較器は、前記ユニットの全ての比較出力（ＧＥ）がアクティブであると共に、少なくとも１つのユニットの前記相当性出力（Ｅ）が非アクティブである時に限り、アクティブ表示を設定するように構成されたロジックを備える
ことを特徴とする請求項２に記載の比較器。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、マルチタスクシステムにおいて、特にデータ依存性制御を含み得るデータフロー処理のタスクの実行の文脈において、相互依存タスクの実行をスケジュールすることに関係する。
【背景技術】
【０００２】
マルチタスクにおいて多発する問題は、タスクのスケジューリング、すなわちタスクに関する全ての条件が満たされる時における各タスクの実行である。データフロータイプの処理の場合は、これらの条件は、タスクによって消費されるデータの利用可能性、及びタスクによって生成されたデータを収容するための空間の利用可能性を含む。
【０００３】
例えばグラフ構築、及びナビゲーションに基づいてタスクをスケジュールする様々な方法がある。いくらかの方法は、性能を最適化しようと試みる一方、他のものは、動作安定性に取り組む。動作安定性に取り組む方法は、例えば、方法が２つのタスクの各々の実行が他方のタスクの実行に依存すると判定するのでこれらのタスクを実行することができない状況において起こるデッドロックの発生を減少させるか、もしくは消去しようと試みる。
【０００４】
米国特許出願公開第２００８／０００５３５７号明細書は、性能を最適化するためにデータフロー処理に適用できる方法を説明する。その方法は、グラフ、及びトークン循環（token circulation）の構築に基づいている。タスクは、別のタスクによって生成されたトークンを有している場合にのみ実行され得る。そのタスクが実行される場合に、そのトークンは次のタスクに渡される。その方法は、動作安定性を保証する条件（constraint）を考慮しない計算モデルの極めて単純な実装である。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】米国特許出願公開第２００８／０００５３５７号明細書
【非特許文献】
【０００６】
【非特許文献１】“M. Raynal”及び“M. Singhal”、“Logical time: capturing causality in distributed systems”、IEEE Computer 29 (2)、1996
【非特許文献２】“C. Fidge”、“Logical time in distributed computing systems”、IEEE Computer 24 (8)、1991
【非特許文献３】“P. A. S. Ward”、“An offline algorithm for dimension-bound analysis”、Proceeding of the 1999 IEEE International Conference on Parallel Processing、ページ128-136
【発明の概要】
【発明が解決しようとする課題】
【０００７】
従って、良好な性能と動作安定性の両方を有するスケジューリング方法の必要性が存在する。
【課題を解決するための手段】
【０００８】
この必要性は、マルチタスクシステム上でのいくらかの相互依存タスクの実行方法であって、各タスクに、前記タスクの現在の発生（occurrence：生起）、及び前記現在の発生が依存する他のタスクのセットの発生を示す論理時刻ベクトル（logical time vector）を関連付けるステップと、もし第１のベクトルの全ての構成要素が第２のベクトルのそれぞれの構成要素より大きいか、あるいは第２のベクトルのそれぞれの構成要素に等しいと共に、前記第１のベクトルの少なくとも１つの構成要素が前記第２のベクトルのそれぞれの構成要素より完全に大きいならば、前記第１のベクトルが前記第２のベクトルより大きいと考えられるように、論理時刻ベクトルのセットに関する半順序（partial order）を定義するステップと、前記半順序関係（partial order relation）に従って、前記論理時刻ベクトルを比較するステップと、その論理時刻ベクトルが前記論理時刻ベクトルの他のどれよりも大きくないならば、前記タスクを実行するステップと、前記タスクの新しい発生に関して、前記ベクトルの少なくとも１つの構成要素の値を増加させることによって、実行された前記タスク（Ｔ）の前記論理時刻ベクトルを更新するステップとを含む方法によって解決される。
【０００９】
実施例によれば、前記方法は、前記タスクの発生を実行するために満たされるべき条件の数を示す依存状態カウンタを、各タスクに関連付けるステップと、前記タスクの依存状態カウンタがゼロに到達する場合に前記タスクの実行を計画するステップと、タスクが実行された場合に、実行された前記タスクの前記論理時刻ベクトルより大きい論理時刻ベクトルを有する各他のタスクの前記依存状態カウンタの値を減少させるステップと、実行された前記タスクの前記論理時刻ベクトルを更新するステップと、実行された前記タスクの前記論理時刻ベクトルより小さい論理時刻ベクトルを有する各他のタスクに関して、実行された前記タスクの前記依存状態カウンタの値を増加させるステップと、実行された前記タスクの前記論理時刻ベクトルより大きい論理時刻ベクトルを有する各他のタスクの前記依存状態カウンタの値を増加させるステップとを含む。
【００１０】
実施例によれば、現在のタスクの前記論理時刻ベクトルは、各可能なタスクと関連付けられた構成要素を含む。前記現在のタスクと関連付けられた前記構成要素は、前記現在のタスクの発生番号を含む。別のタスクと関連付けられた構成要素は、前記現在のタスクが実行され得る前に完了されるべきである前記他のタスクの発生を識別すると共に、ゼロの構成要素は、前記現在のタスクが前記ゼロの構成要素と関連付けられたタスクに依存していないことを示す。
【００１１】
方法の実行を加速するために、プロセッサシステムは、２つの“Ｎｍ”ビットのデータワードの間の順序関係を示す比較出力を備えた、前記２つのデータワードのためのハードウェア比較器ユニットを備え得ると共に、前記比較器ユニットの機能は、第１のデータワードの可能な連続した値と関連付けられた行と、第２のデータワードの可能な連続した値と関連付けられた列とを含む論理テーブルによって表され、各行は、前記行と同じ値に関連付けられた前記列との交点において“１”を含むと共に、該“１”の後には、一連の“０”が続く。前記一連の“０”の後には、循環的に前記行を完成する一連の“１”が続いており、“０”の数が、各行に関して同じであると共に、前記データワードの最大値の半分より小さい。
【００１２】
各ベクトルが“Ｎｍ”の倍数である複数のビットを有する構成要素を含む、半順序関係に従った２つの前記ベクトルのための比較器は、キャリー伝搬端子（carry propagation terminal：桁上げ伝搬端子）を通してチェーン状に接続された、複数の、上述のタイプの比較器ユニットと、２つの連続したユニットの前記キャリー伝搬端子の間に配置されると共に、ベクトルの構成要素の間の境界を定義する信号のアクティブ状態に応答して、前記連続したユニットの間の前記キャリーの伝搬を遮断するように構成されたゲートと、前記比較出力に配置されると共に、前記境界を定義する信号の非アクティブ状態に応答して、前記比較出力の状態を抑制するように構成されたゲートとを備える。
【００１３】
実施例によれば、各ユニットは、前記ユニットに提示された前記データワードの相当性を示す相当性出力を備えると共に、前記比較器は、前記ユニットの全ての比較出力がアクティブであると共に、少なくとも１つのユニットの前記相当性出力が非アクティブである時に限り、アクティブ表示を設定するように構成されたロジックを備える。
【００１４】
他の利点及び特徴は、代表的な目的のためにのみ提供され、そして添付の図面に表された、本発明の特定の実施例の下記の説明から更に明らかに明白になるであろう。
【図面の簡単な説明】
【００１５】
【図１】データフロー処理において実行するための一連のタスクの単純な例を示す図である。
【図２】図１の各タスクの異なる発生の間の依存性を示すグラフである。
【図３】タスクの各発生がタスクの発生の間の依存性を識別するために使用される論理時刻ベクトルによって分類される図２のグラフに対応する図である。
【図４】いくらかのタスク発生に関する異なる実行時刻を有する図３のグラフを示す図である。
【図５】２つの代替タスクの実行を有するデータフロー処理における一連のタスクの例を示す図である。
【図６】図５のタスクの発生が論理時刻ベクトルによって分類されるグラフである。
【図７】論理時刻ベクトル及び依存状態カウンタ値によって分類された、図５に対応する処理に関する代表的な実行トレースを示すグラフである。
【図８】実行トレースの別の場合を示すグラフである。
【図９】半順序に従ってベクトルを比較するための比較器の実施例を概略的に示す図である。
【発明を実施するための形態】
【００１６】
マルチタスクシステムにおける、特にデータフロー処理のタスクにおけるタスクの発生の始まりにおいて満たされなければならない条件を追跡するために、本開示は、各タスクに関して、タスクの依存状態（dependency：従属関係）を表す論理時刻ベクトル（logical time vector）を保存することを提供する。
【００１７】
これ以降、用語「タスク」は、処理ステップの一般的なセットを示す。専門用語であるタスクの「実行」またはタスクの「発生」は、特定のデータセットに関するタスクの実行のことを指す。（データフロー処理において、同じタスクの連続した発生は、引き継ぐフロー(incoming flow)の連続するデータセットに関して実行される。）論理時刻ベクトルは、各タスクと関連付けられると共に、タスクの現在の発生の依存状態（dependency：従属関係）を反映する。
【００１８】
論理時刻ベクトルは、論文「“M. Raynal”及び“M. Singhal”、“Logical time: capturing causality in distributed systems”、IEEE Computer 29 (2)、1996」及び「“C. Fidge”、“Logical time in distributed computing systems”、IEEE Computer 24 (8)、1991」において紹介されている。
【００１９】
異なる（distinct）チャネルを通してイベントを受け取った各処理が、原因として、それらの順序を付け直すことができるように、半順序関係（partial order relation）と関連付けられた論理時刻ベクトルが、１つの処理から別の処理に送信されたイベントの時期を定める（date：時点、日時を定める）ために使用された。すなわち、従来、論理時刻ベクトルは、イベントを識別すると共に、相対的にイベントの時期（date）を定めるために、通常使用される。
【００２０】
これ以降で理解されることになるように、この明細書では、論理時刻ベクトルは、いつタスクが実行され得るかを判定するために使用される。言い換えれば、論理時刻ベクトルは、タスクの実行順序を強制する（constrain：強要する）、すなわち将来イベントを計画して実行するために使用される。
【００２１】
論理時刻ベクトルのこの利用法は、データフロー処理の例と共に、下記で更に詳細に説明されることになる。
【００２２】
図１は、基本のデータフロー処理を表す。タスクＡは、データをタスクＢに提供し、タスクＢは、データを処理すると共に、結果をタスクＣに提供する。この例では、それらのタスクは、３サイクルの深さを有するＦＩＦＯバッファを通してそれらのデータを伝達する。
【００２３】
これらのタスクの実行の条件は、下記のとおりである。タスクＡは、第１のバッファが満杯（full）でない場合のみ実行し得る。タスクＢは、第１のバッファが空（empty）ではないと共に、第２のバッファが満杯（full）でない場合のみ実行し得る。タスクＣは、第２のバッファが空（empty）ではない場合のみ実行し得る。
【００２４】
図２は、タスクＡ、タスクＢ、及びタスクＣの発生の間の依存状態を示すグラフである。それらの行は、タスクＡ、タスクＢ、及びタスクＣに対応する。行の中の連続した円（circle）は、円の中に示されたように、同じタスクの連続した発生（occurrence：生起）に対応する。それらの列は、簡単にするために、タスクの各発生が１サイクルで完了すると仮定した場合の、連続した実行サイクルに対応する。
【００２５】
矢印は、依存している（dependent：従属している）発生を接続する。各矢印は、“前に発生しなければならない”ことを意味する。すなわち、図示されたグラフにおいて、各矢印は、右を指し示すべきであり、それは、左を指し示すことができないと共に、垂直であり得ない。実線（solid）の矢印は、タスクの実行の順序によって与えられた依存状態を示す。点線の矢印は、バッファの（制限された）深さによって与えられた依存状態を示す。
【００２６】
タスクＡの第１の発生は、タスクＢの第１の発生の前に実行されるべきであるので、そして、タスクＢの第１の発生は、タスクＣの第１の発生の前に起こらなければならないので、それらの発生は、１つの行から次の行まで、１サイクルを単位としてオフセットされる。
【００２７】
図３は、ここで説明される方法に従ってタスクの各発生が論理時刻ベクトルによって分類されている図２のグラフを示す。論理時刻ベクトルは、各タスクと関連付けられると共に、タスクの各発生の終りに更新される。これらのベクトルの更新が、値を増加させることに対応するので、これらのベクトルは、更に、Ｈと表示されて「論理的クロック」と呼ばれ得る。
【００２８】
分かりやすいように、各ベクトルもしくはクロックＨがマルチタスクシステム上で実行可能な各タスクと関連付けられた構成要素を含む、理解するための最も単純な場合が説明される。論理時刻ベクトルの従来の使用の場合に、タスクの数と比較して構成要素の数を最適化するための技術が存在し、そのような技術がここで同様に適用できる。そのような技術の例は、［“P. A. S. Ward”、“An offline algorithm for dimension-bound analysis”、Proceeding of the 1999 IEEE International Conference on Parallel Processing、ページ128-136］において説明されている。
【００２９】
従って、図３では、それぞれタスクＡ、タスクＢ、及びタスクＣに割り当てられた３つのベクトル“Ｈ（Ａ）”、ベクトル“Ｈ（Ｂ）”、及びベクトル“Ｈ（Ｃ）”が存在すると共に、各ベクトルは、それぞれタスクＡ、タスクＢ、及びタスクＣに割り当てられた３つの構成要素を有している。
【００３０】
タスク“Ｔｊ”と関連付けられたベクトル“Ｈ（Ｔｊ）”のタスク“Ｔｉ”と関連付けられた構成要素“ｈｉ”は、例えば、タスク“Ｔｊ”の現在の発生の実行にとって必要なタスク“Ｔｉ”の発生を含む。拡大解釈すれば、タスク“Ｔｊ”と関連付けられた構成要素“ｈｊ”は、現在実行中のタスク“Ｔｊ”の発生を含む。ゼロの（null：無効の）構成要素が示すのは、ベクトルと関連付けられたタスクの現在の発生が、ゼロの構成要素と関連付けられたタスクに依存しないということである。
【００３１】
例えば、実行サイクル“ｔ７”に関して図３において確認されたように、タスクＡに対応するベクトル“Ｈ（Ａ）”の第１の構成要素は７を含み、それはタスクＡの現在の発生である。タスクＡのこの発生は、第１のバッファ（図１）が少なくとも１つの利用可能な場所を有すること、すなわちタスクＢの第４の発生がメモリバッファからデータを消費したことを必要とし、ベクトル“Ｈ（Ａ）”におけるタスクＢと関連付けられた（第２の）構成要素は４を含む。タスクＢの第４の発生は、第２のバッファが少なくとも１つの利用可能な場所を有すること、すなわちタスクＣの第１の発生がこのバッファからデータを消費したことを必要とし、ベクトル“Ｈ（Ａ）”におけるタスクＣと関連付けられた（第３の）構成要素は１を含む。
【００３２】
各ベクトルは、熟考した発生から他のタスクのそれぞれの最も近い発生まで矢印を後ろにたどることによって、グラフから組み立てられる。従って、ベクトル“Ｈ（Ｂ）”は、時刻ｔ７において、（６，６，３）を含むと共に、ベクトル“Ｈ（Ｃ）”は、（５，５，５）を含む。もし後ろにたどるべきそのような矢印が存在しないならば、その構成要素は、ゼロ（null：ヌル）であり、それは、タスクＡ及びタスクＢの第１の発生に関する場合である。
【００３３】
ベクトルの構築は、タスクを実施するアプリケーションプログラムの実行において達成することが容易である。ある発生（タスクＡに関する６番目、タスクＢに関する３番目、タスクＣに関する１番目）を越えると、各構成要素は、関連するタスクの各実行で系統的に値が増やされるように思われる。それは、初期値を前もって定義すると共にベクトルの条件を更新するために十分であり、初期値を前もって定義すると共にベクトルの条件を更新することは、タスクの依存状態を記述するグラフの種類に応じてコンパイラによって実行され得る。これらの条件は、“ｋ番目の発生から始まるベクトルＸの増分構成要素ｘi”の形式で表される。それらのベクトルは、共有メモリに保存されると共に、各タスクがアプリケーションにより記録されるスケジューラによって、更新される。
【００３４】
例えば、図３におけるベクトル“Ｈ（Ａ）”の初期値及び更新条件は、下記のように定義され得る。
【００３５】
【数１】
2013539144.tif 000003
【００３６】
ここで、そのような論理時刻ベクトルを有効に利用するために、半順序関係がこれらのベクトルのセットに関して定義される。２つのベクトルＸ（ｘ０，ｘ２，・・・ｘｎ）とＹ（ｙ０，ｙ１，・・・ｙｎ）との間の半順序関係は、“０”と“ｎ”との間のどのような“ｉ”においても、“ｘｉ≦ｙｉ”であり、“０”と“ｎ”との間に“ｘｊ＜ｙｊ”であるような“ｊ”が存在する時に限り、“Ｘ＜Ｙ”が真であるとして定義される。
【００３７】
この順序関係は、それが全てのベクトルを順序付けるとは限らないので、“半（partial：部分的な、不完全な）”と呼ばれている。いくらかの場合において、ベクトルＸ及びＹは共通点がなく、それは“Ｘ｜｜Ｙ”によって示される。
【００３８】
ここで、タスクＴａが実行を待っていると共に、現在の時刻にこのタスクが実行され得るかどうかを判定する必要があると仮定する。この判定のために、タスクＴａの現在のベクトルが、他のタスクの現在のベクトルのそれぞれと比較される。他のタスクＴが何であっても、次の条件が満たされさえすれば、タスクＴａは実行され得る。
【００３９】
【数２】
2013539144.tif 000004
【００４０】
条件は、更に、下記のように示されることになる。
【００４１】
【数３】
2013539144.tif 000005
【００４２】
もし少なくとも１つの他のタスクＴが“Ｈ（Ｔａ）＞Ｈ（Ｔ）”を与えるならば、全ての条件がタスクＴａを実行するために満たされているとは限らず、従って、タスクＴａは待つべきである。
【００４３】
単純化した場合に対応する図３のグラフにおいて、３番目からの各列におけるベクトルは、ペアによって（ペアごとに）比較不能であるように思われる。これは、各々の対応するタスクが並列に実行され得ることを意味する。
【００４４】
第１の列は、タスクＡのみが実行され得ることを意味する“Ｈ（Ｃ）＞Ｈ（Ｂ）＞Ｈ（Ａ）”を形成する。
【００４５】
第２の列は、タスクＡとタスクＢは並列に実行され得るが、しかしタスクＣは待たなければならないことを意味する“Ｈ（Ｃ）＞Ｈ（Ｂ）、Ｈ（Ｂ）｜｜Ｈ（Ａ）及びＨ（Ａ）｜｜Ｈ（Ｃ）”を形成する。
【００４６】
更に現実的な状況において、タスクは多かれ少なかれ遅れて到着すると共に、それらは多かれ少なかれ実行するのに時間がかかる。
【００４７】
図４は、更に現実に近い状況を例証するように修正された図３のグラフを示す。タスクＢの最初の２つの発生は、他の発生の長さの２倍持続する。それに続いて、タスクＣの最初の発生は１サイクルの遅延で始まり、タスクＣの第２の発生は、２サイクルの遅延で始まると共に、タスクＡの第５の発生は、１サイクルの遅延で始まる。
【００４８】
タスクの論理時刻ベクトルは、関連するタスクの実行のために必要とされるサイクル数の間変わらないままであり、それはタスクＢの最初の２つの発生に関して見られ得る。タスクが終了するときに、ベクトルは更新される。従って、第５列におけるタスクＡ及びタスクＢに関して見られるように、ベクトルの新しい値は関連するタスクの終りに有効になると共に、タスクの新しい発生を待っている間は変わらない。（これは、タスクＢ及びタスクＣの最初の発生の実行を待っている間も同様である。）
【００４９】
論理時刻ベクトルの利用法は、このグラフによって更によく理解されるであろう。第３の列は、“Ｈ（Ｃ）＞Ｈ（Ｂ）”を形成する。従って、図３の場合と異なり、タスクＣは、まだ開始し得ない。タスクＣは、第４の列において開始し得ると共に、ここで、それらのベクトルは、ペアによって（ペアごとに）比較不能になる。
【００５０】
第５の列は、“Ｈ（Ａ）＞Ｈ（Ｂ）”及び“Ｈ（Ｃ）＞Ｈ（Ｂ）”を形成する。従って、タスクＡ及びタスクＣは、タスクＢが実行する間待たなければならない。タスクＡ及びタスクＣは、第６の列において実行され得ると共に、ここで、それらのベクトルは、ペアによって（ペアごとに）比較不能になる。
【００５１】
グラフがこのように無限に伸びると共に、従って、あらゆる遅延を有するあらゆる長さの発生に適合し得ることは明白である。これは、デッドロックがないことを保証する。
【００５２】
以前に言及されたように、論理時刻ベクトルは、構成要素の系統的な値の増加によって更新される。構成要素が無限になることは実際には考えられない。むしろ、構成要素の折り返し（folding：ひだ形成）メカニズムが、整数の部分集合（subset）に適した半順序に基づいて提供される。ベクトルの構成要素は、従って、Ｍを法として定義されると共に、２つのベクトルＸ（ｘ０，ｘ２，・・・ｘｎ）とＹ（ｙ０，ｙ１，・・・ｙｎ）との間の半順序関係が、どのような“ｉ”においても、“ｘｉ＝ｙｉ”または“ｘｉ⊂ｙｉ”であり、“ｘｊ⊂ｙｊ”であるような“ｊ”が存在する時に限り、“Ｘ＜Ｙ”が真であるとして定義され、“ｘ＜ｙ及びｙ−ｘ≦Ｓ”であるか、または“ｘ＞ｙ及びＭ−ｘ＋ｙ≦Ｓ”である時に限り、関係“ｘ⊂ｙ”が真であるとして定義される。
【００５３】
Ｍ及びＳは、“２Ｓ＜Ｍ”であるような整数であると共に、Ｍは、ベクトルの構成要素の間の最大のオフセットより大きい。図３の場合は、７番目の発生が提供するベクトルＨ（Ａ）に関して、最大のオフセットは６である。この最大のオフセットは、全ての初期条件が考慮される瞬間から、すなわち全てのベクトルの全ての構成要素の値が増加される瞬間から判定される。
【００５４】
図３の例では、“Ｍ＝８”及び“Ｓ＝３”において、ベクトルの構成要素は値“７”から折り返される。タスクＡに関するグラフの最後の２つのベクトルは、従って、（０，５，２）及び（１，６，３）によって表されると共に、タスクＢに関するグラフの最後のベクトルは、（０，０，５）によって表される。
【００５５】
各構成要素の８つの可能な値を円周上に置くと、上記のように定義された“より小さい”という関係である“⊂”による構成要素の比較は、値ｘが、円周上後に続く３個（Ｓ個）の値のそれぞれより小さく、そして、前にある４個（“Ｍ−Ｓ−１”個）の値のそれぞれより大きいようになる。一例は下記のようになる。
【００５６】
【数４】
2013539144.tif 000006
【００５７】
上記で示された方法論によれば、タスクが実行され得るかどうかを判定するために、各実行サイクルで、各タスクの論理時刻ベクトルは、他のタスクの各々のベクトルと比較される。タスクの数が増える場合、これはかなりの計算資源に相当する（represent：を表す）と共に、タスクの数によって、比較の数は二次的に増加する。更に、たとえタスクが実行され得ることを比較の結果が示すとしても、タスクが利用可能な計算資源を与えられてすぐに実行されることができないことは起こり得る（この状況では、タスクは実行可能と言われる。）。実行可能なタスクのリストを管理することが、従って必要であり得る。
【００５８】
計算資源を減少させるために、そして実行可能なタスクの計画を促進するために、“Ｋ”で表示されると共に、タスクが実行可能になる前に満たされるべき条件の数を内容が代表する依存状態カウンタが、各タスクに関連付けられる。実際には、カウンタの内容は、まだ満たされていない条件の数と等しくなり得ると共に、その内容がゼロの状態になる場合に、そのタスクは実行可能になる。
【００５９】
依存状態カウンタを更新するために、下記の手順が適用され得る。
【００６０】
システムの初期化において、“Ｈ（Ｔ）：＝Ｈ０（Ｔ）”及び“Ｋ（Ｔ）：＝０”とし、ここで、Ｈ０（Ｔ）は、タスクＴに関する開始ベクトルであり、例えば、図３の例では、タスクＡの場合（１，０，０）であり、タスクＢの場合（１，１，０）であり、タスクＣの場合（１，１，１）である。
【００６１】
その場合に、スケジューラプロセスは、依存状態カウンタの内容を監視すると共に、カウンタがゼロである各タスクの実行を開始するか、または、並列にタスクを実行するための資源が不十分であるならば、これらのタスクの実行を計画する。
【００６２】
タスクＴが終了するときはいつでも、下記の４つのステップが、原子的に（atomically）、すなわちタスクの新しい発生が実行される前に、実行される。
【００６３】
１．“Ｈ（Ｔａ）＞Ｈ（Ｔ）”を有する各他のタスクＴａに関して、“Ｋ（Ｔａ）：＝Ｋ（Ｔａ）−１”を実行する。すなわち、ちょうど終了したタスクＴは、各々のこれらのタスクＴａが実行可能になる条件の内の１つを満たす。
２．タスクＴの新しい発生に関してベクトルＨ（Ｔ）を更新する。以前に言及されたように、これは、発生の数が初期条件における構成要素に関するしきい値のセットに到達する場合に、ベクトルの各構成要素の値を増加させることによって達成され得る。
３．“Ｈ（Ｔ）＞Ｈ（Ｔａ）”を有する各他のタスクＴａに関して、“Ｋ（Ｔ）：＝Ｋ（Ｔ）＋１”を実行する。すなわち、タスクＴの新しい発生の実行に関する全ての条件が識別されると共に、それらは、タスクＴの依存状態カウンタにおいて明らかにされる。
４．“Ｈ（Ｔａ）＞Ｈ（Ｔ）”を有する各他のタスクＴａに関して、“Ｋ（Ｔａ）：＝Ｋ（Ｔａ）＋１”を実行する。すなわち、タスクＴの新しい発生によって生成された新しい条件が、他のタスクＴａに関して識別されると共に、それらは、これらの他のタスクの依存状態カウンタにおいて明らかにされる。
【００６４】
依存状態カウンタは、ハードウェアにおいて実現され得ると共に、ゼロ内容検出器（null content detection circuit）によって、並列に（in parallel：同時に）監視され得る。論理時刻ベクトルは、前述の規則に従ってカウンタの値を増加させると共に減少させるように構成されたハードウェア比較器に連結された、専用のレジスタに保存され得る。（当然ながら、システム上で実行されるべきアプリケーションに含まれる多数の異なるタスクを処理するための、ベクトル専用の十分な量のハードウェアカウンタ及びレジスタが、提供されることになる。）この場合、システムソフトウェア（スケジューラ）は、専用のレジスタ内のベクトルの更新のみに関与する（のみを担当する）と共に、カウンタの比較及び更新はハードウェアアクセラレーション（hardware acceleration：ハードウェアの加速）によって実行される。
【００６５】
例えば、依存状態カウンタは、差し迫った（imminent）実行の指標（indicator：インジケータ）であると共に、それらは、従って、データプリフェッチ（prefetch：先取り）動作を制御するために使用され得る。更に、比較の数はタスクの数によって直線的に増加するように思われる。
【００６６】
図５は、２つの代替のタスク実行を有するデータフロー処理（dataflow process）におけるタスクの系列の更に複雑な例を示す。図１のタスクＢは、ここでは、２つのタスクＢ及びタスクＢ’を含み、タスクＡが終了するときに、それらの内の１つが実行のために選択される。タスクＡの発生によって生成された各データワードは、選択要素（selection element）ＳＥＬを通して、タスクＢ及びタスクＢ’の内の１つに経路指定される。その選択は、同様にタスクＡによって生成されると共に、タスクＡ、タスクＢ、及びタスクＣの間に配置されたＦＩＦＯと同じ深さのＦＩＦＯに入れられる制御ワードＣＴＬによって操作される。この制御ワードＣＴＬは、タスクＣへの供給のために、アクティブなタスクＢまたはアクティブなタスクＢ’の出力を選択する結合要素（merge element）ＭＲＧによって、同時に取り入れられる。
【００６７】
図６は、（図３のグラフのように）タスクの発生が同じ長さを有すると共に遅延を有さないと仮定された、図５のケースに対応する依存状態のグラフである。論理時刻ベクトルの値は、発生を表すノードの中に示される。ベクトルは、ここでは、４つの構成要素を有している。更に、８を法として定義された構成要素を有する、折り返されたベクトル表記法が使用される。
【００６８】
明瞭にするために、必ずしも全ての依存状態の矢印が示されるとは限らない。各タスクの第１の発生及び第４の発生からの矢印のみが示されると共に、他の矢印のセットが１つの発生から次の発生までのコピーであるということがわかる。依存状態は、図３におけるタスクＢの発生に到着する矢印、または図３におけるタスクＢの発生から離れる矢印は、ここでは、タスクＢとタスクＢ’のそれぞれに複写されることを考慮して、図３のグラフに関する方法と同じ方法で組み込まれる。更に、矢印が、タスクＢの各発生からタスクＢ’の次の発生に向けて離れると共に、矢印が、タスクＢ’の各発生からタスクＢの次の発生に向けて離れる。
【００６９】
図５のフローの特殊性は、タスクＢ及びタスクＢ’の内の１つだけがタスクＡとタスクＣとの間で実行されることである。上記で説明された方法論においてこれを考慮するために、これらの２つのタスクの内の１つが実行されるたびに、タスクＢとタスクＢ’の両方が同時に実行されると仮定されている。すなわち、タスクＢまたはタスクＢ’の各実行において、両方のタスクのベクトルが更新されると共に、依存状態カウンタＫを使用する場合に、両方のタスクのカウンタが同様に更新される。
【００７０】
図７は、図６のグラフによる処理の代表的な実行トレースを示す。実線のノードは、実行されつつあるか、もしくは実行されたタスクの発生に対応する。点線のノードは、実行を待つ発生に対応する。依存状態の矢印だけが、発生の実行の終りにおいて、すなわちベクトルＨ及びカウンタＫが計算されるときに現れる。各ノードは、値が上記で説明された４つの原子的な（atomic：分割できない、極小の）ステップを通して更新される論理時刻ベクトル及び依存状態カウンタＫの対応する値（corresponding value）を含む。
【００７１】
タスクＡ、タスクＢ、タスクＢ’、及びタスクＣのカウンタＫの初期値を決定するために、各タスクが完了されたということ、そしてベクトルＨがその初期値に更新されたということが仮定されている。カウンタ更新ステップ３を各タスクに適用する際に、カウンタは、それぞれ、０、１、１、及び３に初期化される。
【００７２】
開始時に、タスクＡの３つの発生が、連続３サイクルにわたって実行される。これらの発生の第１の発生は、完了するために３つのサイクルを要するタスクＢの第１の発生を開始する。ベクトル及び依存状態カウンタの観点から、タスクＢ’の第１の発生がタスクＢの第１の発生と同時に進行すると考えられる。
【００７３】
タスクＡの第４の発生、タスクＢ／タスクＢ’、実際にはタスクＢ’の第２の発生、及びタスクＣの第１の発生は、第５のサイクルにおいて開始し得る。タスクＢ及びタスクＢ’が同時に第４のサイクルで終了すると見なすと、第５のサイクルのタスクＣのカウンタＫは、カウンタ更新ステップ１を、１度はタスクＢのために、そして１度はタスクＢ’にために、２回適用することによって、２だけ値が減少される。
【００７４】
タスクＡの第４の発生は６サイクルを要し、タスクＢ’の第２の発生は１サイクルを要し、タスクＣの第１の発生は２サイクルを要する。
【００７５】
第８のサイクルにおいて、タスクＡの第４の発生がまだ進行中である一方、タスクＢ／タスクＢ’（実際にはタスクＢ）の第３の発生が終わり、そしてタスクＣの第２の発生が開始されている。タスクＢ／タスクＢ’（実際にはタスクＢ’）の第４の発生は、タスクＡの第４の発生が完了することになる第１１のサイクルを待つ。
【００７６】
今までのところ説明されたタスク実行の例において、カウンタ更新ステップ４の使用は、明らかにされなかった。
【００７７】
図８は、ステップ４が有益である２つのタスクＡ及びＢの実行の単純な例のトレースである。図７と同じ表現の慣例が使用される。タスクＡの各発生は、３つのデータワードを生成し、それらの各々は、タスクＢの異なる（distinct）発生によって消費される。更に、タスクＡとタスクＢとの間のＦＩＦＯが３つのデータワードの深さを有しており、タスクＡの各発生がＦＩＦＯで利用可能な空間の全てを必要とすると仮定されている。従って、タスクＡの第２の発生は、タスクＢの第３の発生が最終的にＦＩＦＯの空間を解放するまで、開始し得ない。
【００７８】
ここでは、タスクＡの発生を開始することがタスクＢの３つの連続した発生の実行に支配されるので、ベクトルＨ（Ａ）の第２の構成要素が、タスクＡの発生の各実行において、３だけ値を増やされる点に注意が必要である。更に、ベクトルＨ（Ｂ）の第１の構成要素が、タスクＢの発生の毎回の第３の実行の後で値を増やされる点に注意が必要である。これは、タスクＢの３つの連続した発生がタスクＡの同じ発生に支配されることを示す。
【００７９】
タスクＢの第１の発生の終りに４つの依存状態カウンタの更新ステップを適用することは、“Ｔ＝Ｂ”及び“Ｔａ＝Ａ”として、下記の関係を形成する。
【００８０】
１．Ｈ（Ａ）＝（２，３）＞Ｈ（Ｂ）＝（１，１）＝＞Ｋ（Ａ）：＝Ｋ（Ａ）−１＝０；
２．Ｈ（Ｂ）：＝（１，２）；
３．Ｈ（Ｂ）＞Ｈ（Ａ）が偽であり、Ｋ（Ｂ）は変化しないままである。
４．Ｈ（Ａ）＝（２，３）＞Ｈ（Ｂ）＝（１，２）＝＞Ｋ（Ａ）：＝Ｋ（Ａ）＋１＝１、ステップ１において一時的に変更されたＫ（Ａ）のオリジナルの正しい値が回復される。
【００８１】
これらの４つのステップは、ステップ１が提供するＫの一時的な値がステップ４においてオリジナルの値に回復されると共に、作動可能タスクのリストに影響を及ぼさないように、原子的に（atomically）実行される。
【００８２】
カウンタ更新ステップ１、３、及び４のそれぞれにおいて、”Ｎ−１”個の論理時刻ベクトルの比較が実行され、ここで“Ｎ”はタスクの数であり、各ベクトルの比較は、Ｎ個のベクトル構成要素まで、２つずつ比較することを必要とする。構成要素の比較の数は、従って、タスクの数によって二次的に増加する。これらの操作は、スケジューラプロセスによってソフトウェアにおいて実行され得るが、しかし、ソフトウェアリソースを節約するために、これにハードウェアのサポートを提供することが望ましいであろう。
【００８３】
半順序を使用する比較演算、及び好ましい実施例において折り返しによって抑制された構成要素に、従来のデジタル型比較器は適当ではない。
【００８４】
図９は、これらのニーズを満たし得る、論理時刻ベクトルＨＡ及びＨＢに関する比較器の実施例の第１の反復の要素を示す。
【００８５】
論理時刻ベクトルは、抑制されたビットの数“Ｎｖ”、例えば６４ビットで定義されるということ、そして、このベクトルの各構成要素が、最小値“Ｎｍ”、例えば４ビットの倍数であるプログラム可能なビットの数で定義され得るということが仮定されている。この数“Ｎｍ”は、ベクトルの構成要素の最大の数を決定する。従って、６４ビットのベクトル、及び構成要素当たり４ビットの最小値に関して、多くても１６個の４ビットの構成要素、そして４ビットの倍数によって定義されたより少ない構成要素を有するあらゆる組み合わせを定義することができる。
【００８６】
図９の比較器は、チェーン状に接続された一連の比較器ユニット１０を備える。各ユニット１０は、２つのベクトルＨＡ及びＨＢから比較するために、２つの４ビットの構成要素を処理する。各ユニット１０は、その外部端子に関して、入力Ａと入力Ｂの２の補数（〜Ｂ＋１）とを合計する減算器に基づく比較器に関連付けられ得る。従って、ユニット１０は、比較されるべき構成要素のそれぞれのための入力に加えて、キャリー（carry：桁上げ）入力“Ｃｉ”、キャリー（carry：桁上げ）出力“Ｃｏ”、“Ａ＝Ｂ”であるかどうかを示す出力“Ｅ”、そして“Ａ≧Ｂ”であるかどうかを示す出力“ＧＥ”を備える。
【００８７】
第１のアプローチとして、説明を単純化するために、ユニット１０が従来の比較器であると考える。更に下記で論じられたように、ユニットの論理テーブルは、折り返された値を比較するために修正されることになる。
【００８８】
２つの６４ビットワードの比較器を構築するように、ユニット１０は、それらのキャリー（carry：桁上げ）出力“Ｃｏ”及びキャリー（carry：桁上げ）入力“Ｃｉ”によってチェーン状に接続される。ベクトルの構成要素の間の境界がＡＮＤゲート１２を用いて定義されるように、ゲート１２は、ユニットの各キャリー出力“Ｃｏ”と次のユニットのキャリー入力“Ｃｉ”との間に配置される。第１のユニットのキャリー入力は、０を受け取る（キャリーが考慮されない）。
【００８９】
各ゲート１２は、アクティブ状態（１）が構成要素の間の境界を定めるそれぞれの信号“Ｓ（Ｓ０，Ｓ１，Ｓ２．．．）”によって制御される。信号“Ｓ”のアクティブ状態は、ゲート１２を遮断し、それによって、対応するユニット１０のキャリーは次のユニットに送られず、そして、次のユニットは、比較を伝搬させず、次のユニットは従って独立した比較を行う。
【００９０】
非アクティブである（アクティブでない）信号“Ｓ”（０）は、ゲート１２を開くと共に、キャリーの伝搬を可能にすることによって、２つのユニット１０をチェーン状に接続させる。これらの２つのユニットは、従って、同じベクトルの構成要素と関連付けられる。
【００９１】
図９の描写において、もし４つの信号“Ｓ”が非アクティブである場合、４つのユニット１０は、単一の１６ビットの構成要素と関連付けられる。もし信号“Ｓ１”及び“Ｓ３”がアクティブであるならば、ユニットは、２つの異なる８ビットの構成要素と関連付けられる。もし信号“Ｓ”の全てがアクティブであるならば、各ユニットは、異なる４ビットの構成要素と関連付けられる。
【００９２】
更に、各信号“Ｓ”は、対応するＯＲゲート１４の反転入力に印加されると共に、ＯＲゲート１４の第２の入力は、対応するユニット１０の出力“ＧＥ”を受け取る。信号“Ｓ”が非アクティブであるときに、ゲート１４は、ユニットの出力“ＧＥ”を伝搬させないと共に、この出力は、無視され得る中間の比較結果に対応する。信号“Ｓ”がアクティブであるユニットのみ、その出力“ＧＥ”が対応するゲート１４によって伝搬されることが分かると共に、この出力は、現在のユニット及びチェーン状に接続された前のユニット（信号“Ｓ”が非アクティブであるユニット）によって生成された比較結果を統合する。
【００９３】
ゲート１４の出力は、ＡＮＤゲート１６に到達すると共に、もし全てのユニット１０の出力“ＧＥ”がアクティブになるならば、すなわち、ベクトルＨＡの各構成要素がベクトルＨＢの対応する構成要素より大きいか、またはベクトルＨＢの対応する構成要素に等しい（ＨＡ≧ＨＢ）ならば、従って、その出力はアクティブになる。（信号“Ｓ＝０”によって遮断されるゲート１４の出力は、実際には“１”になり、従って、それらは、他のゲート１４の出力に影響を及ぼさない。）
【００９４】
反転されたユニット１０の出力“Ｅ”は、ＯＲゲート１８に到達する。従って、出力“Ｅ”の内の少なくとも１つが非アクティブであるならば、すなわち、ベクトルＨＡ及びベクトルＨＢの少なくとも一組の構成要素に関して不均衡が存在するならば（ＨＡ≠ＨＢ）、ゲート１８の出力はアクティブになる。
【００９５】
ゲート１６及びゲート１８の出力は、ＡＮＤゲート２０に到達する。従って、もしベクトルＨＡの全ての構成要素が、ベクトルＨＢのそれぞれの構成要素より大きいか、あるいはベクトルＨＢのそれぞれの構成要素に等しく（ゲート１６がアクティブ）、そしてベクトルＨＡとベクトルＨＢの少なくとも２つのそれぞれの構成要素が等しくない（従って一方が絶対に他方より大きい）ならば、ゲート２０はアクティブな信号（ＨＡ＞ＨＢ）を提供する。このように、ベクトルの比較は、半順序関係（partial order relation）に従って獲得される。
【００９６】
ユニット１０が折り返された構成要素を比較する方法が定義されることが残っている。ユニットが４ビットワードＡ及びＢを処理する例に関連して、各ユニット１０の出力が下記のとおりに定義され得る。
【００９７】
・もし“Ａ＋〜Ｂ＋Ｃｉ＞１５（＝２４−１）”であるならば、“Ｃｏ＝１”であり、これは、比較するために使用される加算器におけるキャリービットの従来の定義に対応する。
・もし“Ａ＝Ｂ”ならば、“Ｅ＝１”である。
・もし“Ａ⊇Ｂ”であるならば、“Ｇ＝１”であり、ここで“⊇”は、Ｍ（ここではＭ＝１６）を法として折り返された値に対する操作に関して以前に与えられた定義による“より大きいか、または等しい”という順序関係である。
【００９８】
下記のテーブルは、折り返しの一例に関して、１０進法で示された、Ａ及びＢの全ての可能な値に基づく、出力“ＧＥ”の値を提供する。
【００９９】
【表１】
2013539144.tif 000007
【０１００】
従来の比較器において、対角線上の値を含む、下へ向かって行く対角線より下に位置した値は全て１であり、また対角線より上に位置した値は全て０である。ここで使用される比較器では、太字で示されたように、（Ａ，Ｂ）＝（８，０）と（Ａ，Ｂ）＝（１５，７）との間を境界とする左下すみ（lower left corner）は、“０”のみを含み、（Ａ，Ｂ）＝（０，９）と（Ａ，Ｂ）＝（６，１５）との間を境界とする右上すみ（upper right corner）は、“１”のみを含む。別の方法で表すと、各行は、対角線の“１”に続いて８個の連続した“０”を含み、その後に８個の連続した“１”が続き、値のパターンは、それが行を循環的に満たすようになる。
【０１０１】
この例は、折り返された値（ここでは“２Ｓ＜Ｍ”）の間の半順序関係の一般的な定義における“Ｓ＝７（＝８−１）”に対応する。“Ｓ”の値を減少させることは、行における連続した“０”の数を減少させると共に、“１”の数を増加させる。例えば、“Ｓ＝５”は、各行において６個の連続した“０”、及び１０個の連続した“１”を生成する。
【０１０２】
もしｎ個のユニット１０が４ｎビットの構成要素に対応するようにチェーン状に接続されるならば、各ユニット１０は４ビットで独立して作動するが、値は１５で抑制される（bounded）ので、キャリーの伝搬のおかげで、チェーン状に一緒に接続された全てのユニットは、“２４ｎ−１”で抑制された（bounded）４ｎビットの値に対して動作する。
【０１０３】
もしベクトルの構成要素の数が比較器の容量より大きい場合、それにもかかわらず、下記の方法において、いくらかの追加の要素によって、いくらかのサイクルにおいて比較器を使用して、比較を行うことが可能である。
【０１０４】
第１のサイクルの間、構成要素の最初のセットが比較される。ゲート２０の出力は、無視されると共に、ゲート１６及びゲート１８の出力の状態は、次のサイクルの間、例えばフリップフロップ内に保存される。
【０１０５】
次のサイクルにおいて、構成要素の新しいセットが比較器に提示される。ＯＲゲート１８は、追加の入力として、その出力の以前に保存された状態“（ＨＡ≠ＨＢ）−１”を受け取る。従って、もし不均衡が前のサイクルにおいて検出されたならば、この検出は現在のサイクルに与えられる。更に、追加のＡＮＤゲート２２が、ゲート１６とゲート２０との間に挿入される。ゲート２２の出力は、ゲート１６の出力、及びこの出力の以前に保存された状態“（ＨＡ≧ＨＢ）−１”がアクティブである場合にのみアクティブになる。
【０１０６】
ゲート２０の出力は、比較器によって全ての構成要素を処理するのに十分なサイクル数の後で考慮に入れられることになる。
【０１０７】
前述の説明が、状態“１”をアクティブ状態、そして状態“０”を非アクティブ状態として言及するが、これらの状態の性質が、結果を変えずに、論理回路を応用することによって交換され得るということが理解される。
【符号の説明】
【０１０８】
１０    比較器ユニット
１２    ＡＮＤゲート
１４    ＯＲゲート
１６    ＡＮＤゲート
１８    ＯＲゲート
２０    ＡＮＤゲート
２２    ＡＮＤゲート
【図１】
2013539144.tif 000008
【図２】
2013539144.tif 000009
【図３】
2013539144.tif 000010
【図４】
2013539144.tif 000011
【図５】
2013539144.tif 000012
【図６】
2013539144.tif 000013
【図７】
2013539144.tif 000014
【図８】
2013539144.tif 000015
【図９】
2013539144.tif 000016
【国際調査報告】
2013539144.tif 000017
2013539144.tif 000018
2013539144.tif 000019
2013539144.tif 000020
2013539144.tif 000021
2013539144.tif 000022