(57)【要約】  少なくとも１つの入力または少なくとも１つの出力を備えた機能ノードと、機能ノード間の相互接続を示す接続とを備えるディジタル論理回路を実装するためのディジタル制御パラメータを生成する方法であって、ディジタル論理回路が連続的なトークンがストリーミングされる第１の経路と、トークンがストリーミングされる第２の経路とを備える方法が開示される。該方法は、経路へのデータフローに必要な相対スループットを決定するステップと、経路の１つにバッファを割り当てて経路のスループットを平衡化させるステップと、最小限の数のバッファで必要な相対スループットが得られるまで割り当てられたバッファを除去するステップと、最小限の数のバッファを備えるディジタル論理回路を実装するためのディジタル制御パラメータを生成するステップとを含む。装置、コンピュータ実装ディジタル論理回路、データフローマシン、方法およびコンピュータプログラム製品も開示される。
2009512089.tif 000002
【特許請求の範囲】
【請求項１】
少なくとも１つの入力または少なくとも１つの出力を備えた機能ノードと、前記機能ノード間の接続とを備えるディジタル論理回路内にデータフローマシンを実装するためのディジタル制御パラメータを生成するための装置であって、前記ディジタル論理回路が、連続的なトークンがストリーミングされる第１の経路と、前記トークンがストリーミングされる第２の経路とを備え、前記装置が、前記経路へのデータフローの必要な相対スループットを判定するように配置されているデターミネータと、前記経路のスループットを平衡化させる前記経路の１つにバッファを割り当てるように配置されるバッファのアサイナと、最小限の数のバッファで前記必要な相対スループットが得られるまで割り当てられたバッファを除去するように配置される割り当てられたバッファのリムーバと、前記最小限の数のバッファを備える前記ディジタル論理回路を実装するように配置されたディジタル制御パラメータ生成装置とを備える装置。
【請求項２】
前記第１および第２の経路が並列である、請求項１に記載の装置。
【請求項３】
割り当てられたバッファの前記除去が、前記ディジタル論理回路の前記実装の他の部分、前記経路の相対スループット、および前記ディジタル論理回路の前記実装の残りの相対スループットに対しても利用可能な空間に関して実行される、請求項１または２に記載の装置。
【請求項４】
前記経路の少なくとも１つが、少なくとも２つの機能ノードを備え、前記機能ノードの第１のノードが、第１の相対スループットを有し、前記ノードの第２のノードが、第２の相対スループットを有し、前記第２の相対スループットが、前記第１の相対スループットに等しいように適合される、請求項１から３のいずれかに記載の装置。
【請求項５】
前記第１および第２の経路が直列である、請求項１から４のいずれかに記載の装置。
【請求項６】
前記ディジタル制御パラメータが、ＦＰＧＡを制御して前記ディジタル論理回路を実装する、請求項１から５のいずれかに記載の装置。
【請求項７】
前記データフローマシンが、高レベルソースコード仕様から生成される、請求項１から６のいずれかに記載の装置。
【請求項８】
前記ディジタル制御パラメータが、特定用途向けＩＣ（ＡＳＩＣ）またはチップ、またはこれらの任意の組合せを制御して、前記ディジタル論理回路を実装する、請求項１から７のいずれかに記載の装置。
【請求項９】
少なくとも１つの入力または少なくとも１つの出力を備えた機能ノードと、前記機能ノード間の相互接続とを示す接続とを備えるディジタル論理回路内にデータフローマシンを実装するためのディジタル制御パラメータを生成する方法であって、前記ディジタル論理回路が、連続的なトークンがストリーミングされる第１の経路と、前記トークンがストリーミングされる第２の経路とを備え、前記方法が
前記経路へのデータフローの必要な相対スループットを決定するステップと、
前記経路のスループットを平衡化させる前記経路の１つへバッファを割り当てるステップと、
最小限の数のバッファで前記必要な相対スループットが得られるまで割り当てられたバッファを除去するステップと、
前記最小限の数のバッファを備える前記ディジタル論理回路を実装するためのディジタル制御パラメータを生成するステップとを含む方法。
【請求項１０】
前記除去が、前記ディジタル論理回路の前記実装の他の部分、前記経路の相対スループット、および前記ディジタル論理回路の前記実装の残りの相対スループットに対しても利用可能な空間に関して実行される、請求項９に記載の方法。
【請求項１１】
前記経路の前記少なくとも１つが、少なくとも２つの機能ノードを備え、前記機能ノードの第１のノードが第１の相対スループットを有し、前記ノードの第２のノードが第２の相対スループットを有し、前記第２の相対スループットを前記第１の相対スループットに等しいように適合させるステップをさらに含む、請求項９または１０に記載の方法。
【請求項１２】
ＦＰＧＡによって前記ディジタル論理回路を実装するステップを含む、請求項９から１１のいずれかに記載の方法。
【請求項１３】
高レベルソースコード仕様から前記データフローマシンを生成するステップをさらに含む、請求項９から１２のいずれかに記載の方法。
【請求項１４】
特定用途向けＩＣ（ＡＳＩＣ）またはチップ、またはこれらの任意の組合せによって前記ディジタル論理回路を実装するステップを含む、請求項９から１３のいずれかに記載の方法。
【請求項１５】
コンピュータにダウンロードされ、コンピュータによって実行されると、請求項９から１４のいずれかに記載の方法を実行するように配置されたプログラムコードを備えるコンピュータプログラム製品。
【請求項１６】
少なくとも１つの入力または少なくとも１つの出力を備えた機能ノードと、データフローマシンを実装する前記機能ノード間の接続とを備えるディジタル論理回路であって、第１の経路が連続的なトークンのストリームを受け取ることができ、第２の経路が前記トークンのストリームを受け取ることができ、前記第２の経路が最小限の数の追加バッファを備えるディジタル論理回路。
【請求項１７】
前記第１および第２の経路が、並列である、請求項１６に記載の回路。
【請求項１８】
割り当てられたバッファの前記最小化が、前記ディジタル論理回路の前記実装の他の部分、前記経路の相対スループット、および前記ディジタル論理回路の前記実装の残りの相対スループットに対しても利用可能な空間に関して実行される、請求項１６または１７に記載の回路。
【請求項１９】
前記経路の少なくとも１つが、少なくとも２つの機能ノードを備え、前記機能ノードの第１のノードが第１の相対スループットを有し、前記ノードの第２のノードが第２の相対スループットを有し、前記第２の相対スループットが前記第１の相対スループットに等しいように適合される、請求項１６から１８のいずれかに記載の回路。
【請求項２０】
前記第１および第２の経路が、直列である、請求項１６から１９のいずれかに記載の回路。
【請求項２１】
ＦＰＧＡによって実装される、請求項１６から２０のいずれかに記載の回路。
【請求項２２】
データフローマシンを実装する前記ノードおよび接続が高レベルソースコード仕様から生成される、請求項１６から２１のいずれかに記載の回路。
【請求項２３】
特定用途向けＩＣ（ＡＳＩＣ）またはチップ、またはこれらの任意の組合せによって実装される、請求項１６か２２のいずれかに記載の回路。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ディジタル論理回路の改良に関する。本発明は、特に、ハードウェア領域リソースを適切に使用することで第１のノードから分岐し、第２のノードに収束するデータフロー経路の相対スループットの平衡化に関する。本発明は、上記改良を実行するための装置、方法およびコンピュータプログラム製品に関する。
【背景技術】
【０００２】
ディジタル回路を設計する迅速で容易な方法を提供するハードウェア記述のための使いやすいプログラミング言語への多数の異なる手法が近年採用されている。データフローマシンをプログラミングする際に、ハードウェア記述言語とは異なる言語が使用できる。原則として、データフローマシン上で特定のタスクを実行するためのアルゴリズム記述は、記述それ自体を備えていればよいのに対して、集積回路内で直接実行されるアルゴリズム記述はハードウェア内にアルゴリズムの特定の実施の詳細内容を多数含まなければならない。例えば、ハードウェア記述は、最適なクロック周波数を提供するためのレジスタの配置、どの乗算器を使用するかなどに関する情報を含まなければならない。
【０００３】
長年にわたって、データフローマシンは、並列型コンピューティングの優れたモデルとして考えられてきた。したがって、効率的なデータフローマシンを設計する数々の試みがなされてきた。さまざまな理由から、データフローマシンを設計する初期の試みは他の利用可能な並列型コンピューティング技術と比べてコンピュータ性能に関して低い結果しか生んでいなかった。
【０００４】
データフローマシンは、データフローグラフと混同してはならない。プログラムソースコードを翻訳する時には、現在入手可能な大半のコンパイラは、コンパイルされたプログラムの性能を最適化するためにデータフロー解析およびデータフロー記述（データフローグラフ、またはＤＦＧとして周知である）を使用する。アルゴリズム上で実行されるデータフロー解析はデータフローグラフを生成する。データフローグラフは、アルゴリズム内に存在するデータ依存性を示す。より詳細には、データフローグラフは、普通、処理中のデータについてアルゴリズムが実行する特定の動作を示すノードと、グラフ内のノード間の相互接続を示すアークとを含む。したがって、データフローグラフは、特定のアルゴリズムの抽象的な記述であり、アルゴリズムの解析に使用される。他方、データフローマシンは、データフローグラフに基づいてアルゴリズムを実際に実行できる計算マシンである。
【０００５】
データフローマシンは、ノイマン型アーキテクチャ（パーソナルコンピュータ内の通常のプロセッサは、ノイマン型アーキテクチャの一例である）などの制御フロー装置と比較して根本的に異なる方法で動作する。データフローマシンでは、プログラムは、プロセッサによって実行される一連の動作ではなく、特別のデータフロー制御ノードを備えたデータフローグラフである。データは、データフローグラフのアーク上に常駐するトークンとして知られるパケットに構成される。トークンは、ビット、浮動小数点数、アレイなどのアークによって接続されたノード上で演算される任意のデータ構造を含むことができる。データフローマシンのタイプによって、各アークは、最大限、単一のトークン（静的データフローマシン）、固定数のトークン（同期データフローマシン）、または不特定数のトークン（動的データフローマシン）を保持することができる。
【０００６】
データフローマシン内のノードは演算の実行に備えて十分な数の入力アーク上にトークンが出現するのを待つ。トークンが出現すると、ノードは、トークンを消費し、出力アーク上に新しいトークンを生成する。例えば、２つのトークンの追加を実行するノードは、その両方の入力にトークンが現れるまで待ち、これら２つのトークンを消費し、出力アーク上に新たなトークンとして結果  （この場合、入力トークンのデータ合計）を生成する。
【０００７】
ＣＰＵでの処理のように、条件分岐に応じて異なる動作を選択してデータを処理するのではなく、データフローマシンは、条件分岐に応じてデータフロー制御ノードを介してさまざまなノードにデータを送信する。したがって、データフローマシンは特定の出力においてトークンを選択的に生成可能なノード（スイッチノードと呼ぶ）と、特定の入力においてトークンを選択的に消費できるノード（マージノードと呼ぶ）を有する。共通データフロー制御ノードの別の例は、データフローからトークンを選択的に除去するゲート−ノードである。他の多くのデータフロー操作ノードも可能である。
【０００８】
グラフ内の各ノードは、潜在的にグラフ内の他のすべてのノードから独立してその動作を実行できる。ノードが関連する入力アーク上にデータを有し、関連する出力アーク上に結果を生成する空間ができると、ノードは動作（発火と呼ばれる）を実行することができる。ノードは、他のノードが発火できるか否かにかかわらず発火する。したがって、制御フロー装置のように、ノードの動作が実行される順序は特にない。データフローグラフ内の動作の実行順序は関係がない。実行順序は、例えば、発火可能なすべてのノードの同時実行である。
【０００９】
上記のように、データフローマシンは、その設計に応じて、普通３つの異なるカテゴリに分類される。すなわち、静的データフローマシン、動的データフローマシン、および同期データフローマシンである。
【００１０】
静的データフローマシンでは、対応するデータフローグラフ内のあらゆるアークはどの瞬間にも単一のトークンしか保持できない。
【００１１】
動的データフローマシンでは、各アークは受信側ノードの受信準備が整うのを待ちながら不特定数のトークンを保持できる。これによって、データフローマシンの設計時には、未知の再帰深度で再帰手順を構築することができる。そのような手順は、再帰時に処理されているデータを反転する場合がある。その結果、再帰完了後の計算実行時にトークンが一致しないことがある。
【００１２】
上記の状況は、プロトコル内のあらゆるトークンのシリアル番号を示すマーカを追加することで処理できる。再帰の内側のトークンのシリアル番号は連続して監視され、トークンが再帰を抜けると再帰の外側のトークンと一致しない限り処理が進まない。
【００１３】
再帰が末端再帰（ｔａｉｌ  ｒｅｃｕｒｓｉｏｎ）でない場合、通常の（ノイマン型）プロセッサを用いて再帰を行う場合、コンテキストをスタックに格納するのと同様に、再帰呼び出しごとにコンテキストをバッファ内に格納しなければならない。最後に動的データフローマシンはデータ依存再帰を並列実行できる。
【００１４】
同期データフローマシンは、受信側ノードが準備をしている間、トークンをアーク上で待機させられなくても動作できる。代わりに、各ノードに対するトークンの生成と消費との関係は事前に計算される。この情報を用いて、ノードを配置し、アーク上に同時に常駐できるトークンの数に関するサイズをアークに割り当てる方法を決定できる。従って、各ノードは、後続ノードが消費するだけの数のトークンを確実に生成できる。後続ノードが常にデータを消費するため、あらゆるノードが常にデータを生成するようにシステムを設計できる。この欠点は、この構成にデータ依存再帰などの不確定な遅延が存在できないことである。
【００１５】
データフローマシンは、従来のＣＰＵ内で実行されるコンピュータプログラムによって実行されるのが最も一般的である。コンピュータのクラスタが使用されることが多いか、または印刷基板上のＣＰＵのアレイが使用されることが多い。データフローマシンを使用する主要な目的は、その並列処理を利用して実験的なスーパーコンピュータを構築することであった。ハードウェア内で直接データフローマシンを構築するために多くの試みがなされてきた。これは、特定用途向けＩＣ（ＡＳＩＣ）内に多数のプロセッサを作成することで実行された。回路基板上のプロセッサを用いる方法と比べ、この手法の主要な利点は、同じＡＳＩＣ上のプロセッサ間の通信速度が速いことである。現在まで、データフローマシンを計算に使用する試みは商業的に成功していない。
【００１６】
ハードウェア構築には、フィールドプログラマブルゲートアレイ（ＦＰＧＡ）およびその他のプログラマブルロジックデバイス（ＰＬＤ）も使用することができる。ＦＰＧＡは、現場で再構成可能なシリコンチップである。ＦＰＧＡは、小型のランダムアクセスメモリのアレイ、通常は、スタティックランダムアクセスメモリ（ＳＲＡＭ）に基づく。各ＳＲＡＭは、ブール関数用のルックアップテーブルを保持し、それ故、ＦＰＧＡは、いかなる論理演算も実行できる。また、ＦＰＧＡは、同様に構成可能なルーティングリソースを保持し、ＳＲＡＭ相互間の信号の伝送を可能にしている。
【００１７】
シリコンチップの論理演算をＳＲＡＭに割り当て、ルーティングリソースを構成することで、ＦＰＧＡの表面に載るほど小さい任意のハードウェア構造を実装することができる。ＦＰＧＡは、ＡＳＩＣと比べて同量のシリコン表面上で実装することができる論理演算数がはるかに少ない。ＦＰＧＡの利点は、ＳＲＡＭルックアップテーブルに新しい値を入力し、単にルーティングを変更することで任意の他のハードウェア構造にも変更できるという点である。ＦＰＧＡは、任意のハードウェア構造を受け入れ、通告をうけてからすぐに（１００ミリ秒未満で）任意の他のハードウェア構造に変更することができる空のシリコン表面とみなすことができる。
【００１８】
その他の一般的なＰＬＤは、ヒューズリンク方式が可能で、それ故、永久的な構造である。ＡＳＩＣに対するヒューズリンクＰＬＤの主要な利点は、製造が容易な点である。ＡＳＩＣの製造には極めて高価で複雑な工程が必要である。これと対照的に、ＰＬＤは、簡単なツールで数分で製造できる。ヒューズリンクＰＬＤ、ＦＰＧＡ共に、いくつかの欠点を克服することができるＰＬＤの進化する技術が数多く存在する。
【００１９】
一般に、ＦＰＧＡのプログラミングには、ＦＰＧＡのベンダが提供する配置およびルーティングツールを使用しなければならない。配置およびルーティングソフトウェアは、普通、合成ソフトウェアのネットリストまたは直接合成するハードウェア記述言語（ＨＤＬ）のソースコードを受け付ける。次いで、配置およびルーティングソフトウェアは、プログラミング単位でＦＰＧＡのプログラミングに使用する記述ファイル内にディジタル制御パラメータを出力する。その他のＰＬＤにも同様の技術が使用される。
【００２０】
集積回路の設計時には、ハードウェア構造を簡単にする枠組みを提供する状態機械として回路を設計することが一般的である。状態機械は、データが前の計算に応じて種々のパターンで論理演算内を流れる複雑なデータフローを実施する時に特に有用である。
【００２１】
状態機械によってハードウェア要素の再利用が可能になり、回路の物理サイズが最適化される。その結果、集積回路の製造コストが下がる。
【００２２】
多数のプロセッサを備えたスーパーコンピュータをデータフローマシンの形で構築することで、高い並行処理のレベルが達成できる可能性がある。プロセッサを多数のＣＰＵまたは各々が多数の状態機械またはＣＰＵを備える多数のＡＳＩＣから構成する試みがなされてきた。データフローマシンの以前の設計では、ＡＳＩＣに状態機械を組み込んでいた（通常はプロセッサの形で）ため、ＦＰＧＡなどのプログラマブル論理デバイス内にデータフローマシンを実装する最も単純明快な方法はやはり状態機械の使用であろう。すべてのこれまで知られているデータフローマシンの一般的な特徴は、確立したデータフローグラフのノードが最終的なハードウェア構造において特定のハードウェアユニット（普通、関数ユニット、ＦＵとして知られる）に対応しないことである。代わりに、特定の瞬間にたまたま利用可能なハードウェアユニットは、データフローグラフ内の影響があるノードが指定する計算に使用される。データフローグラフ内の特定のノードを複数回実行する場合、ノード実行のたびに異なる関数ユニットを使用することがある。
【００２３】
さらに、以前のデータフローマシンは、データフローマシンの機能を実行するために、例外なく状態機械またはプロセッサを使用して実装されている。各状態機械は、データフローグラフ内の任意のノードの関数を実行することができる。このことは、各ノードを任意の関数ユニット内で実行するために必要である。各状態機械は、任意のノードの関数を実行できるため、現在実行中のノードとは別のその他のあらゆるノードに必要なハードウェアは休眠状態である。状態機械（時にはトークン操作のための支援ハードウェアを備えた）は、データフローマシンそれ自体の実現であるということに留意されたい。データフローマシンが他の何らかの手段で実装されたり、機能ノード内に状態機械を含むことはない。
【００２４】
高レベル言語でのハードウェア設計は一般に望ましいが、ＦＰＧＡの場合には特別の利点がある。ＦＰＧＡは再構成可能であるため、単一のＦＰＧＡが多数の異なるハードウェア設計を受け入れることができる。この能力を十分に活用するため、従来のハードウェア記述言語よりもはるかに簡単な設計の記述方法が必要である。ＦＰＧＡでは、高レベル言語の恩恵は完成した設計の費用効率以上の価値があることがあり、これは、ＡＳＩＣの設計にはあてはまらない。ＦＰＧＡ内にデータフローマシンを構築することで、高レベル言語を用いてＦＰＧＡのための効率的なハードウェアを設計することができる。
【００２５】
本明細書に参照により組み込むものとする１９９７年１月発行の文書「発火を伴うデータフローの表示的意味論（Ａ  Ｄｅｎｏｔａｔｉｏｎａｌ  Ｓｅｍａｎｔｉｃｓ  ｆｏｒ  Ｄａｔａｆｌｏｗ  ｗｉｔｈ  Ｆｉｒｉｎｇ）」、Ｅｄｗａｒｄ  Ａ．Ｌｅｅ、Ｅｌｅｃｔｒｏｎ．Ｒｅｓ．Ｌａｂ．、Ｕｎｉｖ．Ｃａｌｉｆｏｒｎｉａ、Ｂｅｒｋｅｌｅｙ、ＣＡ、Ｍｅｍｏ  ＵＣＢ／ＥＲＬ  Ｍ９７／３は、データフローマシンの正式な意味論を開示している。この文書に記述された意味論に従って実施されるマシンは当業者がデータフローマシンとして認識する一例である。
【００２６】
本明細書に参照により組み込むものとするＷＯ０１５９５９３は、アルゴリズムの高レベルソフトウェアベースの記述のディジタルハードウェア実施へのコンパイルを開示する。プログラミング言語の意味論は、ソフトウェア記述を解析して制御およびデータフローグラフを生成するコンパイルツールの使用を通して解釈される。このグラフは、この時点では最適化、変換および注釈に用いる中間フォーマットである。その結果得られるグラフは、ハードウェア構造のレジスタトランスファレベルまたはネットリストレベル記述に変換される。フローグラフ内のノードが隣接ノードにいつデータを転送するかを決定するために別の制御経路が使用される。制御経路とデータ経路を分離することで並列処理が可能になる。制御経路を用いることで、「波面処理」が達成できる。すなわち、データは制御経路によって制御される波面として実際のハードウェア構造内を通過する。
【００２７】
制御経路の使用は、データ処理中にハードウェアの一部だけを使用できるということを意味する。回路の残りの部分は、第１の波面がフローグラフを通過するのを待っているため、制御経路は新しい波面を送出できる。
【００２８】
データフローマシンは、本明細書に参照により組み込むものとする高レベルソースコード仕様のディジタル論理の記述を生成するための方法を開示するＷＯ２００４０８４０８６に記載されている。ソースコード仕様の少なくとも一部が、少なくとも１つの入力または１つの出力を備えた機能ノードと、該機能ノード間の相互接続を示す接続とを含む多方向グラフ表現にコンパイルされる。グラフの各機能ノードおよび機能ノード間の各接続に対してハードウェア要素が定義される。最後に、グラフの機能ノードの各々の発火規則が定義される。
【００２９】
上記のデータフローマシンでは、データフローを最適化して性能を改善することが主要な関心事である。したがって、既存のハードウェアの性能を増強する方法が問題である。また、処理におけるデッドロックを回避する方法が問題である。さらに、ハードウェア内に特に自動的にデータフローマシンを実装する方法が問題である。
【発明の開示】
【発明が解決しようとする課題】
【００３０】
上記を考慮して、本発明の目的は、上記の問題の１つまたはそれ以上を解決するかまたは少なくとも軽減することである。
【００３１】
本発明の目的は第１のノードから分岐し、第２のノードに収束するデータ経路に関連して性能を向上させることである。
【００３２】
この目的に関連して、本発明は第１のノードで分岐し第２のノードで収束するデータフローを平衡化することでデータフロー内でのノードの停止を回避できるという理解に基づいている。ディジタル論理回路を実装するためのディジタル制御パラメータの生成にこの理解を適用することで、性能を向上させ、および／またはディジタル論理回路が実装されるハードウェアの領域リソースを節約することができる。さらに、本発明は、説明を分かりやすくし、本発明の原理を直ちに理解できるように本開示に提供される例が実際の複雑さを反映していないものの、本発明のディジタル論理回路を実装するのに必要な種類の計算がコンピュータ実装によって容易になるという理解に基づいている。本発明は、さらに、ディジタル論理回路の性能が実装のある部分を高速化することと、実装のある部分を低速化することの両方によって向上するという理解に基づいている。
【課題を解決するための手段】
【００３３】
本発明の第１の態様によれば、少なくとも１つの入力または少なくとも１つの出力を備えた機能ノードと、上記機能ノード間の相互接続を示す接続とを含むディジタル論理回路内にデータフローマシンを実装するためのディジタル制御パラメータを生成するための装置であって、上記ディジタル論理回路が、連続的なトークンがストリーミングされる第１の経路と、上記トークンがストリーミングされる第２の経路とを含み、上記装置が、上記経路へのデータフローの必要な相対スループットのデターミネータと、上記経路のスループットを平衡化させる上記経路の１つへのバッファのアサイナと、最小限の数のバッファで上記必要な相対スループットが得られるまで割り当てられたバッファを除去するように配置された割り当てられたバッファのリムーバと、上記最小限の数のバッファを備える上記ディジタル論理回路を実装するためのディジタル制御パラメータ生成装置とを備える装置が提供される。
【００３４】
これは、上記第１および第２の経路内の停止回数がハードウェアリソースの消費を低減しつつディジタル論理回路全体の性能が低下しないレベルに保たれるということを意味する。
【００３５】
第１および第２の経路は、並列または直列である。
【００３６】
割り当てられたバッファの除去は、上記ディジタル論理回路の上記実施の他の部分、上記経路の相対スループット、および上記ディジタル論理回路の上記実施の残りの相対スループットに対しても利用可能な空間に関して実行することができる。こうして、ディジタル論理回路の全体の性能は向上し、ハードウェアリソースは最適な量だけ使用することができる。
【００３７】
上記経路の少なくとも１つは少なくとも２つの機能ノードを含むことができ、上記機能ノードの第１のノードは、第１の相対スループットを有し、上記ノードの第２のノードは、第２の相対スループットを有し、上記第２の相対スループットは、上記第２の機能ノードの反復またはパイプライン処理によって上記第１の相対スループットに等しいように適合される。これによって、処理経路上の相対スループットの一致が向上し、所与のハードウェアリソースについて全体の性能が向上する。
【００３８】
この原理は、経路が直列であるディジタル論理回路を実施するための装置についても適用できる。ディジタル制御パラメータは、フィールドプログラマブルゲートアレイ（ＦＰＧＡ）を制御してディジタル論理回路を実施することができる。データフローマシンは、高レベルソースコード仕様から生成することができる。この利点は、ＦＰＧＡ用の多数の論理回路を容易に作成でき、ＦＰＧＡの有用性が大幅に拡大することである。したがって、ＦＰＧＡを一般のソフトウェアプログラマが超高速の汎用計算装置として使用でき、多数の完全に異なる回路について特定のＦＰＧＡを迅速にプログラミングすることができる。ディジタル制御パラメータは、特定用途向けＩＣ（ＡＳＩＣ）またはチップを制御してディジタル論理回路を実施することができる。データフローマシンは、高レベルソースコード仕様から生成できる。この結果、装置のユーザフレンドリで、それ故、効率的な動作が可能になる。
【００３９】
本発明の第２の態様によれば、少なくとも１つの入力または少なくとも１つの出力を備えた機能ノードと、上記機能ノード間の相互接続を示す接続とを含むディジタル論理回路内にデータフローマシンを実施するためのディジタル制御パラメータを生成する方法であって、上記ディジタル論理回路が、連続的なトークンがストリーミングされる第１の経路と、上記トークンがストリーミングされる第２の経路とを含み、上記方法が、上記経路へのデータフローの必要な相対スループットを決定するステップと、上記経路のスループットを平衡化させる上記経路の１つへバッファを割り当てるステップと、最小限の数のバッファで上記必要な相対スループットが得られるまで割り当てられたバッファを除去するステップと、上記最小限の数のバッファを備える上記ディジタル論理回路を実施するためのディジタル制御パラメータを生成するステップとを含む方法が提供される。
【００４０】
上記除去は、上記ディジタル論理回路の上記実装の他の部分、上記経路の相対スループット、および上記ディジタル論理回路の上記実装の残りの相対スループットに対しても利用可能な空間に関して実行することができる。
【００４１】
該方法は、ＦＰＧＡによってディジタル論理回路を実装するステップを含むことができる。該方法は、特定用途向けＩＣ（ＡＳＩＣ）またはチップによってディジタル論理回路を実施するステップを含むことができる。該方法は、高レベルソースコード仕様からデータフローマシンを生成するステップを含むことができる。
【００４２】
本発明の第３の態様によれば、コンピュータにダウンロードされ、コンピュータによって実行されると、本発明の第２の態様による方法を実行するように配置されたプログラムコードを有するコンピュータプログラム製品が提供される。
【００４３】
本発明の第４の態様によれば、少なくとも１つの入力または少なくとも１つの出力を備えた機能ノードと、上記機能ノード間の相互接続を示す接続とを含むコンピュータ実装可能なディジタル論理回路であって、上記論理回路が、データフローマシン、連続的なトークンがストリーミングされる第１の経路および上記トークンがストリーミングされる第２の経路を実装し、最小限の数の追加バッファを備え、上記経路へのデータフローに必要な相対スループットを決定することと、上記経路の１つにバッファを割り当てて、上記経路のスループットを平衡化させることと、上記必要な相対スループットが得られるまで割り当てられたバッファを除去することとによって上記追加バッファの上記数が最小限にされるコンピュータ実装可能なディジタル論理回路が提供される。
【００４４】
第１および第２の経路は、並列でよい。割り当てられたバッファの除去は、上記ディジタル論理回路の上記実装の他の部分、上記経路の相対スループット、および上記ディジタル論理回路の上記実装の残りの相対スループットに対しても利用可能な空間に関して実行することができる。上記経路の少なくとも１つは、少なくとも２つの機能ノードを含むことができ、上記機能ノードの第１のノードは、第１の相対スループットを有し、上記ノードの第２のノードは、第２の相対スループットを有し、上記第２の相対スループットは、上記第２の機能ノードの反復またはパイプライン処理によって上記第１の相対スループットに等しいように適合される。第１および第２の経路は、直列でよい。該回路は、ＦＰＧＡによって実装することができる。該回路は、特定用途向けＩＣ（ＡＳＩＣ）またはチップによって実施することができる。データフローマシンを実装するノードおよび接続は、高レベルソースコード仕様から生成することができる。
【００４５】
本発明の第５の態様によれば、少なくとも１つの入力または少なくとも１つの出力を備えた機能ノードと、上記機能ノード間の相互接続を示す接続と、連続的なトークンがストリーミングされる第１の経路と、上記トークンがストリーミングされる第２の経路とを含むデータフローマシンであって、最小限の数の追加バッファを備え、上記経路へのデータフローに必要な相対スループットを決定することと、上記経路の１つにバッファを割り当てて、上記経路のスループットを平衡化させることと、上記必要な相対スループットが得られるまで割り当てられたバッファを除去することとによって上記追加バッファの上記数が最小限にされるデータフローマシンが提供される。
【００４６】
本発明の第６の態様によれば、データフローマシンを実装するディジタル論理回路のバッファの数を決定するための方法であって、連続的なトークンがストリーミングされる第１の経路と上記トークンがストリーミングされる第２の経路とを識別するステップと、上記経路へのデータフローに必要な相対スループットを決定するステップと、上記経路の１つにバッファを割り当てて上記経路のスループットを平衡化させるステップと、最小限の数のバッファで上記必要な相対スループットが得られるまで割り当てられたバッファを除去するステップとを含む方法が提供される。
【００４７】
該方法は、より高速のノード、またはより高速のアルゴリズム、またはこれらの任意の組合せを上記経路の１つに導入してバッファ数を最小化するステップをさらに含むことができる。より高速のノードは、並列またはパイプライン処理を含むことができる。
【００４８】
別の方法としては、該方法は、より小さいノード、またはより要求が少ないアルゴリズム、またはこれらの任意の組合せを上記経路の１つに導入してバッファ数を最小化するステップをさらに含むことができる。より小さいノードは、反復動作、または共用動作、またはこれらの任意の組合せを実行するように配置することができる。
【００４９】
また、本明細書で使用する「共用動作」という用語は、ノードを実装するための１つのハードウェアを他のノードの動作に使用できるという意味である。
【００５０】
本発明の第７の態様によれば、コンピュータにダウンロードされ、コンピュータによって実行されると本発明の第６の態様による方法を実行するように配置されたプログラムコードを有するコンピュータプログラム製品が提供される。
【００５１】
本発明の第８の態様によれば、データフローマシンを実装するノードおよび接続を含むディジタル論理回路内の相対スループットを決定するための方法であって、上記ディジタル論理回路の少なくとも一部分を画定するステップと、上記一部分の各ノードおよび接続に対して相対スループットを決定するステップと、上記ノードおよび接続を通過するデータフロー経路を決定するステップと、各経路を流れるトークンの数を決定するステップと、上記データフロー経路から、各経路およびディジタル論理回路を流れるトークンの数と上記部分の相対スループットとを決定するステップとを含む方法が提供される。
【００５２】
上記部分を画定するステップは、第１のフロー制御ノードと第２のフロー制御ノードとの間の相対スループット領域内のノードおよび接続を決定するステップを含むことができる。フロー制御ノードは、各々ゲート、マージ、非決定的マージ、スイッチ、デュプリケータノード、入力、出力、ソース、シンクまたはこれらの任意の組合せを含むことができる。
【００５３】
本発明の第９の態様によれば、コンピュータにダウンロードされ、コンピュータによって実行されると本発明の第８の態様による方法を実行するように配置されたプログラムコードを有するコンピュータプログラム製品が提供される。
【００５４】
本発明の第２〜第９の態様は、基本的に本発明の第１の態様について上記論証された利点と同様の利点を提供する。
【００５５】
本発明の目的は、ディジタル論理回路におけるデッドロックを回避することである。
【００５６】
この目的に関連して、本発明は、ディジタル論理回路は均一なスループットの領域、すなわち未接続のノードが存在せず、処理ノードへの負荷が平衡化され、他のノードから必要な入力データが提供されるまでどのノードも停止する必要がない領域を含むものと考えることができる。データフローマシンを最適化するため、ハードウェア内のディジタル論理回路の実装にはデータフローグラフを採用してデッドロックを回避することが必要である。これは、決定された均一なスループットの領域からのループ、すなわち、均一なスループットの領域を抜けて決定された均一なスループットの領域外の他の処理ノードに至り、ノードのスループットが低い領域に達し、次に、同じ均一なスループットの領域に再び戻るデータフロー経路を決定することで容易になる。そのようなループは対処しないとデッドロックの原因になり得る。
【００５７】
本発明の第１の態様によれば、少なくとも１つの入力または少なくとも１つの出力を備えた機能ノードと、上記機能ノード間の相互接続を示す接続とを含むディジタル論理回路内にデータフローマシンを実施するためのディジタル制御パラメータを生成するための装置であって、機能ノードと接続の第１のセットが、第１の均一なスループットの領域内に含まれ、上記第１のセットが、上記第１の均一なスループットの領域の第１のノードから上記第１の均一なスループットの領域外の第２の領域へ第１の接続を含み、上記第２の領域が、上記第１の均一なスループットの領域の第２の機能ノードへの第２の接続を含み、上記ディジタル論理回路が、上記第１のノードから上記第２のノードへの上記第２の領域内の上記第１および第２の接続を含む第２の経路を２つのトークンが通過する間に上記第１のノードから上記第２のノードへ上記第１の領域内の第１の経路を通過するトークンの最大数と同じ数の追加バッファを少なくとも備え、上記バッファが、上記第２の経路上に配置されてデッドロックを防止する装置が提供される。
【００５８】
この利点の１つは、バッファが処理中に必要なトークンを利用可能にするという点で、その結果、デッドロックが回避される。
【００５９】
第１および第２の接続、すなわち、第２の経路を含むループによるデッドロックを確実に防止するため、第１および第２のノード間の経路上のバッファの数は、第１の経路を通過するトークンの数を第２の経路を通過するトークンの数で割った値になるように構成することができる。
【００６０】
ループは、エッジ、すなわち、純粋なワイヤのみでもよいが、第１の均一なスループットの領域内のエッジよりスループットが低いことに留意されたい。
【００６１】
第２の領域は、上記第２の経路内の少なくとも１つの機能ノードをさらに備えることができる。
【００６２】
上記１つまたは複数のバッファは、上記第１の均一なスループットの領域に配置することができる。
【００６３】
該装置は、上記ディジタル論理回路の上記実施の他の部分の利用可能な空間および上記ディジタル論理回路の上記実装の残りのスループットに対して上記第１の均一なスループットの領域および上記第２の均一なスループットの領域のスループットを最適化するように配置することができる。この最適化は、上記ディジタル論理回路の機能ノードまたは機能ノードのグループの反復またはパイプライン処理、またはこれらの任意の組合せを含むことができる。
【００６４】
ディジタル制御パラメータは、フィールドプログラマブルゲートアレイ（ＦＰＧＡ）を制御してディジタル論理回路を実装することができる。データフローマシンは、高レベルソースコード仕様から生成することができる。この利点は、ＦＰＧＡ用の多数の論理回路を容易に作成でき、ＦＰＧＡの有用性が大幅に拡大することである。したがって、ＦＰＧＡを一般のソフトウェアプログラマが超高速の汎用計算装置として使用でき、多数の完全に異なる回路について特定のＦＰＧＡを迅速にプログラミングすることができる。
【００６５】
ディジタル制御パラメータは、特定用途向けＩＣ（ＡＳＩＣ）またはチップ、またはこれらの任意の組合せを制御してディジタル論理回路を実装することができる。
【００６６】
本発明の第２の態様によれば、少なくとも１つの入力または少なくとも１つの出力を備えた機能ノードと、上記機能ノード間の相互接続を示す接続とを含むディジタル論理回路によって実装されるデータフローマシンにおけるデッドロックを防止するための方法であって、１つまたは複数の機能ノードまたは第１の均一なスループットを備えた接続を含む第１の均一なスループットの領域を決定するステップと、上記第１の均一なスループットの領域から１つまたは複数の機能ノードまたは接続を含む第２の領域への第１の接続を決定するステップと、上記第２の領域から上記第１の均一なスループットの領域の第２の接続を決定するステップと、上記第１のノードから上記第２のノードへ上記第２の領域内の上記第１および第２の接続を含む第２の経路を２つのトークンが通過する間に上記第１のノードから上記第２のノードへ上記第１の領域内の第１の経路を通過するトークンの最大数と同じ数のバッファを追加し、上記第２の領域内の上記ディジタル論理回路への上記第２の経路上に上記バッファを配置して上記第１の接続および上記第２の接続によるデッドロックを防止するステップとを含む方法が提供される。
【００６７】
該方法は、第１の経路を通過するトークンの数を第２の経路を通過するトークンの数で割った値になるように第１および第２のノード間の上記経路上のバッファの数を割り当てることができる。
【００６８】
さらに第２の領域は、上記第１および第２の接続とを含む経路内に少なくとも１つの機能ノードを含むことができる。
【００６９】
上記第１の均一なスループットの領域内に１つまたは複数のバッファを追加することができる。
【００７０】
該方法は、さらに、上記ディジタル論理回路の上記実装の他の部分の利用可能な空間に関して、上記第１の均一なスループットの領域および上記第２の領域のスループットと上記ディジタル論理回路の残りのスループットを最適化するステップを含むことができる。この最適化は、上記ディジタル論理回路の機能ノードまたは機能ノードのグループの反復またはパイプライン処理、またはこれらの任意の組合せを含むことができる。
【００７１】
該方法は、ＦＰＧＡによって前記ディジタル論理回路を実装するステップを含むことができる。該方法は、特定用途向けＩＣ（ＡＳＩＣ）またはチップによってディジタル論理回路を実装するステップを含むことができる。該方法は、高レベルソースコード仕様から前記データフローマシンを生成するステップを含むことができる。
【００７２】
本発明の第３の態様によれば、コンピュータにダウンロードされ、コンピュータによって実行されると本発明の第２の態様による方法を実行するように配置されたプログラムコードを有するコンピュータプログラム製品が提供される。
【００７３】
本発明の第４の態様によれば、データフローマシンを実装する少なくとも１つの入力または少なくとも１つの出力を備えた機能ノードと、上記機能ノード間の相互接続を示す接続とを含むコンピュータ実装可能なディジタル論理回路であって、機能ノードと接続の第１のセットが、第１の均一なスループットの領域内に含まれ、上記第１のセットが上記第１の均一なスループットの領域の第１のノードから上記第１の均一なスループットの領域外の第２の領域への第１の接続を含み、上記第２の領域が上記第１の均一なスループットの領域の第２の機能ノードへの第２の接続を含み、上記ディジタル論理回路が、上記第１のノードから上記第２のノードへの上記第２の領域内の上記第１および第２の接続を含む第２の経路を２つのトークンが通過する間に上記第１のノードから上記第２のノードへ上記第１の領域内の第１の経路を通過するトークンの最大数と同じ数の追加バッファを備え、上記バッファが、上記第２の経路上に配置されて、上記第１の接続および上記第２の接続によるデッドロックを防止するディジタル論理回路が提供される。
【００７４】
この利点は、ソフトウェア支援によって容易に実施でき、データフローマシンの高い性能を可能にするディジタル論理回路である。さらに、本発明の上記各態様に示した利点と同様の利点が得られる。
【００７５】
第１および第２の接続を含むループによるディジタル論理回路におけるデッドロックを確実に防止するため、上記第１および第２のノード間の上記経路上のバッファの数が、第１の経路を通過するトークンの数を前記第２の経路を通過するトークンの数で割った値になるように構成することができる。
【００７６】
第２の領域は、上記第２の経路内の少なくとも１つの機能ノードをさらに備えることができる。上記１つまたは複数のバッファは、上記第１の均一なスループットの領域に配置することができる。
【００７７】
該回路は、上記ディジタル論理回路の上記実装の他の部分の利用可能な空間および上記ディジタル論理回路の上記実装の残りのスループットに対して上記第１の均一なスループットの領域および上記第２の領域のスループットに対して最適化することができる。この最適化は、上記ディジタル論理回路の機能ノードまたは機能ノードのグループの反復またはパイプライン処理、またはこれらの任意の組合せを含むことができる。
【００７８】
該回路は、ＦＰＧＡによって実装することができる。該回路は、特定用途向けＩＣ（ＡＳＩＣ）またはチップによって実装することができる。データフローマシンを実施するノードおよび接続は、高レベルソースコード仕様から生成することができる。
【００７９】
本発明の第５の態様によれば、少なくとも１つの入力または少なくとも１つの出力を備えた機能ノードと、上記機能ノード間の相互接続を示す接続とを含むデータフローマシンであって、機能ノードと接続の第１のセットが、第１の均一なスループットの領域内に含まれ、上記第１のセットが、上記第１の均一なスループットの領域の第１のノードから上記第１の均一なスループットの領域外の第２の領域への第１の接続を含み、上記第２の領域が、上記第１の均一なスループットの領域の第２の機能ノードへの第２の接続を含み、上記ディジタル論理回路が、上記第１のノードから上記第２のノードへの上記第２の領域内の上記第１および第２の接続を含む第２の経路を２つのトークンが通過する間に、上記第１のノードから上記第２のノードへ上記第１の領域内の第１の経路を通過するトークンの最大数と同じ数の追加バッファを備え、上記バッファが、上記第２の経路上に配置されて、上記第１の接続および上記第２の接続によるデッドロックを防止するデータフローマシンが提供される。
【００８０】
該データフローマシンは、ＦＰＧＡ、ＡＳＩＣまたはチップによって実装することができる。該データフローマシンは、高レベルソースコード仕様から生成することができる。該データフローマシンは、自動生成することができる。
【００８１】
本発明の目的は、特にデータフローマシンを実施することである。
【００８２】
この目的に関連して、本発明は、データフローマシン内のノードが３つの信号セットを有することができるという理解に基づいている。２つのセットは、データ信号およびデータ信号の有効性を表す順方向に動作する信号セットであり、１つのセットは、消費信号を表す逆方向に動作する信号セットである。データ信号の有効性は、ノードのデータ入力および出力に有効な入力データがあるか否かに関する情報を保持し、消費信号は、ノードの出力データが消費されたか、また先行ノードからデータを消費するか否かに関する情報を保持する。これによって、データフローマシンの発火規則を適用することができる。非同期データフローを有効にするには、データフローマシンを実施することで一定の注意を払う必要がある。
【００８３】
本発明の第１の態様によれば、複数のノードと、上記ノードを接続してデータフローマシンを実施する複数の接続とを含むコンピュータ実施可能なディジタル論理回路であって、上記ノードの各々が、入力において提供される先行ノードからの少なくとも１つのデータ信号と、出力において提供される後続ノードへの少なくとも１つのデータ信号とを含む、データ信号用の少なくとも１つの信号セットと、入力において提供される先行ノードからの少なくとも１つのデータ有効信号と、出力において提供される先行ノードからの少なくとも１つのデータ有効信号とを含む、上記データ信号入力および出力上に有効データがあるか否かに関する情報を保持するデータ有効信号用の少なくとも１つの信号セットと、入力において提供される後続ノードからの少なくとも１つの消費信号と、出力において提供される先行ノードへの少なくとも１つの消費信号とを含む、上記データ信号が消費されているか否かに関する情報を保持する消費信号用の少なくとも１つの信号セットとを含み、第１の消費信号に論理的に依存する上記データ有効信号のいずれかへの論理的依存が上記第１の消費信号について除外され、第１の有効データ信号に論理的に依存する上記消費信号のいずれかへの論理的依存が上記第１の有効データ信号について除外されるように上記ノードの各々が配置されるコンピュータ実施可能なディジタル論理回路が提供される。
【００８４】
これは、ノードの提供されるモジュール性のためにディジタル論理回路を自動実装によって提供することができることを意味する。
【００８５】
上記ノードの各々は、第１の数のデータ信号入力と第２の数のデータ信号出力とを含み、上記第１の数の有効データ入力信号と消費入力信号を含み、上記第２の数の有効データ出力信号と消費出力信号とを含むことができる。
【００８６】
これは、データの入力と出力のすべてに対してデータフロー制御が提供されることを意味する。
【００８７】
本発明は、上記データフローマシンの少なくとも一部が非同期であることを可能にする。
【００８８】
ディジタル論理回路の少なくとも一部は、コンピュータによって生成することができる。回路は、フィールドプログラマブルゲートアレイ（ＦＰＧＡ）、特定用途向けＩＣ（ＡＳＩＣ）またはチップ、またはこれらの任意の組合せによって実装することができる。
【００８９】
ノードは、ノードの動作を実行するための組合せ論理、パイプライン、または状態機械、またはこれらの任意の組合せを含むことができる。
【００９０】
データフローマシンを実装するノードおよび接続は、高レベルソースコード仕様から生成することができる。
【００９１】
本発明の第２の態様によれば、データフローマシンを備えるディジタル論理回路をハードウェア内に自動実装するための方法であって、抽象的なデータフローマシンを決定するステップと、上記データフローマシンのノードおよび接続を決定するステップであって、上記ノードの各々が、入力において提供される先行ノードからの少なくとも１つのデータ信号と、出力において提供される後続ノードへの少なくとも１つのデータ信号とを含む、データ信号用の少なくとも１つの信号セットと、入力において提供される先行ノードからの少なくとも１つのデータ有効信号と、出力において提供される先行ノードからの少なくとも１つのデータ有効信号とを含む、上記データ信号入力および出力上に有効データがあるか否かに関する情報を保持するデータ有効信号用の少なくとも１つの信号セットと、入力において提供される後続ノードからの少なくとも１つの消費信号と、出力において提供される先行ノードへの少なくとも１つの消費信号とを含む、上記データ信号が消費されているか否かに関する情報を保持する消費信号用の少なくとも１つの信号セットとを含むステップと、第１の消費信号に論理的に依存する上記データ有効信号のいずれかへの論理的依存が、上記第１の消費信号について除外され、第１の有効データ信号に論理的に依存する上記消費信号のいずれかへの論理的依存が、上記第１の有効データ信号について除外される上記ノードの発火規則を決定するステップと、上記ノード、接続、および発火規則をプログラマブルハードウェアに割り当てるステップとを含む方法が提供される。
【００９２】
該方法は、ＦＰＧＡ、ＡＳＩＣまたはチップ、またはこれらの任意の組合せによってディジタル論理回路を実装するステップをさらに含むことができる。
【００９３】
該方法は、高レベルソースコード仕様から上記データフローマシンを生成するステップをさらに含むことができる。
【００９４】
本発明の第３の態様によれば、ディジタルコンピュータ機能を有する電子装置のメモリ内に直接ロード可能なコンピュータプログラム製品であって、上記電子装置によって実行されると本発明の第２の態様による方法を実行するソフトウェアコード部分を含むコンピュータプログラム製品が提供される。
【００９５】
本発明の第４の態様によれば、本発明の第１の態様によるデータフローマシンを含むディジタル論理回路を実装するためのディジタル制御パラメータを生成するための装置が提供される。該装置は、本発明の第２の態様による方法を実行するように配置される。
【００９６】
ディジタル制御パラメータは、フィールドプログラマブルゲートアレイ（ＦＰＧＡ）を制御してディジタル論理回路を実装することができる。データフローマシンは、高レベルソースコード仕様から生成することができる。この利点は、ＦＰＧＡ用の多数の論理回路を容易に作成でき、ＦＰＧＡの有用性が大幅に拡大することである。したがって、ＦＰＧＡを一般のソフトウェアプログラマが超高速の汎用計算装置として使用でき、多数の完全に異なる回路について特定のＦＰＧＡを迅速にプログラミングすることができる。
【００９７】
本発明の第２、第３、および第４の態様の利点は、本発明の第１の態様による有利なディジタル論理回路が直ちに可能になるという点である。
【００９８】
本発明の目的は、データフローマシンのループを実装する構造を提供することである。
【００９９】
この目的に関連して、本発明は、データフローマシンの基本機構が、ノードが入力をすべて有する時に動作を実行する、すなわち、入力を消費し、関連する出力（もしあれば）を生成するという理解に基づいている。ノードは、入力が十分になるまでいかなる動作も実行しない。事前に到着した任意の入力は、ノードの動作にとって十分な入力が到着するまでノードの前段のエッジで待機する。ノードの出力エッジが占有されていると、エッジが解放されるまで起動を遅らせる。この機能は、一部のエッジでの初期トークン（値）を用いたｆｏｒループ内で利用される。
【０１００】
本発明の第１の態様によれば、反復する新しい値の入力と、反復された値の入力と、反復された値の出力とを含むマージノードを備え、マージノードの反復された値の出力に接続された入力を有するループボディ関数ユニットと、ループボディ関数ユニットの出力に接続された反復された値の入力と、マージノードの反復された値の入力に接続された反復された値の出力と、ループを抜ける出力とを含むスイッチノードとを備えるデータフローマシンが提供される。
【０１０１】
データフローマシンは、反復する新しい値の入力と、反復された値の入力と、ループボディ関数ユニットの入力に接続された反復された値の出力とを含む第２のマージノードを含むことができる。
【０１０２】
データフローマシンは、ループボディ関数ユニットの出力に接続された反復された値の入力と、マージノードの反復された値の入力に接続された反復された値の出力と、ループを抜ける出力とを備える第２のスイッチノードを備えることができる。このマージノードは、存在する唯一のマージノードでよく、または、例えば、ｆｏｒｅａｃｈループ、ｆｏｒループ、ｗｈｉｌｅループ、ｄｏ−ｗｈｉｌｅループ、リエントラントループ、またはこれらの任意の組合せを実装するためのマージノードが構造内にいくつか存在する場合、任意のマージノードでよい。ループは、スカラー上で、またはコレクション全体、すなわち、リストまたはベクトル全体を反復することができる。リスト全体を反復するとは、一時に１つの要素がコレクションから取り出されることを意味する。ベクトル全体を反復するとは、コレクションのすべての要素が同時に反復されることを意味する。
【０１０３】
ここで、「接続された」という用語は、直接接続された場合と、バッファ、スプリッタ、ジョイナ、デュプリケータ、別のループボディ関数などの１つまたは複数の別の要素を介して接続された場合の両方を意味する。
【０１０４】
一般に、特許請求の範囲で使用するすべての用語は、本明細書で特に明示されない限り、技術分野での普通の意味に従って解釈すべきものである。
【０１０５】
「ある（ａ／ａｎ）／該（ｔｈｅ）［要素、装置、構成要素、手段、ステップ等］」への言及は、明示的に断りのない限り、上記要素、装置、構成要素、手段、ステップ等の少なくとも１つの例を指すものと率直に解釈すべきである。本発明で開示するいかなる方法のステップも、明示的に断りのない限り、開示された順序で厳密に実行される必要はない。
【０１０６】
「第１の」、「第２の」、等の用語は、明示的に断りのない限り、異なる要素、手段等を定義するとだけ解釈すべきである。
【０１０７】
本発明のその他の目的、特徴および利点は、下記の詳細な開示、添付の特許請求の範囲および図面から明らかになるだろう。
【０１０８】
本発明の上記および追加のその他の目的、特徴および利点は、同様の要素に同じ参照番号が使用される添付の図面を参照しながら以下の例示的で非限定的な本発明の好ましい実施形態の詳細な説明を読むことで理解を深めることができる。
【発明を実施するための最良の形態】
【０１０９】
図１は、各々が少なくとも１つの入力および／または少なくとも１つの出力を含む複数のノード１０２、１０４、１０６、１０８、１１０、１１２、１１４を含むデータフローグラフの一部の一例を示す図である。データフローグラフのノード間のデータフローは、アーク１０１、１０３、１０５、１０７、１０９、１１１、１１３，１１５、１１７によって示される。上記ノード１０２、１０４、１０６、１０８、１１０、１１２、１１４の各々は、それぞれ上記各ノードの入力にあるデータについて実行される論理演算を表す。普通トークンと呼ばれる上記ノードの入力にあるデータは上記アークによって保持されると考えることができ、したがって、上記アークに保持されるデータは、それぞれアークの起点のノードの出力である。図１の例に関して、アーク１０１上のデータは、ノード１０２によって処理され、アーク１０３に出力される。ノード１０４の入力上にあるアーク１０３上のデータは、ノード１０４によって処理され、ノード１０４からの出力は、アーク１０５および１１７に出力される。アーク１１７は、ノード１１２に入力されるが、ノード１１２は、やはりノード１１２に入力されるアーク１１１上に関連するデータがないためこのデータを処理できない。したがって、ノード１０４は、アークおよびノード１０５、１０６、１０７、１０８、１０９、１１０、１１１を含み、第２の経路１３０と考えられるアーク１１７を含む第２の経路に並列の第１の経路１２０上のノード１０６、１０８、１１０によって対応するデータが処理されるまで処理を停止しなければならない。アーク１１７上にあるデータに対応するアーク１１１上のデータがある時には、ノード１１２はデータを処理し、ノード１０４は停止状態を解除でき、アーク１０３上にある次のデータを処理できる。この停止処理によってデータ処理の性能が低下する。本発明のある実施形態によれば、経路１２０のノード１０６、１０８、１１０の処理時間に対応するいくつかのバッファが追加される。しかし、バッファの数はかなり多くなり、データフローグラフに対応するディジタル論理回路を実装するハードウェア上の利用可能な空間は十分でないことがある。したがって、ディジタル論理回路を実装するための制御パラメータを生成する時には、データ処理の高速化とハードウェア内の、例えば、ＦＰＧＡ上の実装のための利用可能な空間の両方を考慮して最適化が実行される。この最適化は、図２に示す適合データフローグラフをハードウェア内に実装する結果を生むことがある。図２のデータフローグラフは、図１のデータフローグラフに対応するノードおよびアークを含み、図１のアーク１１７の代わりに、アーク１３１、１３３、１３５、１３７、１３９およびバッファ１３２、１３４、１３６、１３８が提供される。ここで、ディジタル論理回路を実装するためのディジタル制御パラメータを生成するための装置によって考察がなされ、上記装置は、例えば、ノイマン型プロセッサを含み、最適化を実行し制御パラメータを生成するダウンロードされたソフトウェアを備えたコンピュータなどである。それ故、該装置は、また、データフロー解析を実行して、性能および領域消費の両面からバッファの必要性およびバッファ数、ならびにより少ないバッファを割り当てる含意を決定できる。例えば、領域が問題でない場合、例えば、ディジタル論理回路が利用可能なハードウェアリソースと比べて小さい時、バッファ数は性能の観点からのみ最適化される。領域が問題の場合、図１および図２に示す部分が一部にすぎない実装全体は、実装の全体としての性能が領域リソースについて最適化されるように考慮される。本発明のある実施形態による手法は、並列の経路が相対スループットに関して平衡化されるようにバッファを割り当て、２つの並列の経路の所望の相対スループット、すなわち、ディジタル論理回路の他の部分が停止しない程度のスループットを維持しながらできるだけ多くのバッファを除去することである。その場合、実装の他の部分は、いずれにせよ性能を制約し、領域リソースは、データフローグラフ実装の別の部分を新たに最適化することで有効利用できるので、上記の例のバッファの数は、２つのバッファまで低減できる。図１および図２の例は、一方の経路上に処理を含む合理的な数のノードが提供され、他方の経路上にデータを転送するアークだけが提供される簡単なケースを示す。しかし、本発明は、各々が複数のノードを備え、異なる処理時間を必要とする２つの経路上に同等に適用できる。ここで、「チョーク」と言う表現を導入するが、これは、１つの動作または動作のグループにどれ位の処理努力が必要かを示す概念である。チョークは、ノードまたはノードのグループの相対スループットの逆数と考えられる。この表現を定義すると、本発明の本質は並列データフロー経路のチョークを最適化して実装するディジタル論理回路の性能を向上させることとして表現できる。
【０１１０】
いくつかの処理、パイプライン処理、反復およびループ処理を実装することが考えられる。つまり、パイプライン処理は、動作のチョークを低減できるが領域リソースの使用を増加させ、動作のデータフローのためにいつも可能であるとは限らない。処理の反復は、チョークを増加させるが、領域リソースの使用を低減する。デッドロックを回避するため、データフロー内のループを考慮する必要がある。
【０１１１】
図３は、ノード３００から分岐しノード３０６に収束する第１の経路３０２および第２の経路３０４を含むデータフローグラフの一部を示す図である。第１の経路３０２は、各々が４つの反復を含むノード３１１、３１２、３１３内の３つの動作を含む。したがって、第１の経路のチョークは、３×４、すなわち、１２である。第２の経路は、ノード３１４内に１つの動作を含み、それ故、１のチョークを有する。２つの経路３０２、３０４のチョークは、１２である。これは、第２の経路３０４のノード３１４が、第１の経路の最後のノード３１３からの結果を待って停止し、ノード３０６にその結果を処理させなければならないためである。２つの経路３０２、３０４を最適化する、すなわち、平衡化して性能を向上させるため、データフローグラフを図４に示すように適合させ、第２の経路のノード３１１、３１２、３１３の動作の反復が図４のノード３１１’、３１２’、３１３’が示すようにパイプライン処理されるようにすることができる。それ故、第２の経路３０２’のチョークは、３である。図３の第２の経路３０４のノード３１４の動作は、図４のノード３１４’に示すように、２回の反復で実行でき、それ故、いくらかハードウェア領域を節約できる。第２の経路は、チョークが２であるがバッファ３１５が第２の経路３０４’に挿入され、第２の経路３０４’は、チョークが３になる。したがって、停止しなければならないノードはなく、クロック周期ごとに、対応するデータがノード３０６に提供される。
【０１１２】
本発明の手法を適用して多数の順列が可能である。空間の節約のため、ノード３１４に反復をさらに導入し、および／または経路３０４にさらにバッファを導入することで経路３０２、３０４を平衡化して停止を回避できる。また、第１の経路３２０内のノードの１つまたは２つのみをパイプライン処理し、第２の経路３０４の選択した測定値と併用してチョークを平衡化することができる。
【０１１３】
ディジタル論理回路は、ＡＳＩＣ，ＦＰＧＡ、またはＰＬＤのプログラミングに用いるディジタル制御パラメータを生成することによって実装される。ディジタル制御パラメータを生成するための装置は、普通、プロセッサと該プロセッサによって実行されるコンピュータプログラムを備える。コンピュータプログラムは、プロセッサが制御パラメータの生成を支援してディジタル論理回路を実装するように配置される。それ故、該装置は、上記の本発明のディジタル制御パラメータを生成するように適合されている。
【０１１４】
本発明は、同期システム、非同期システム、および同期および非同期部分の両方を備えるシステムに適用可能である。したがって、相対スループットという用語を使用している。特定のシステムに使用できる相対スループットを表す他の用語は、例えば、帯域幅、チョークなどである。異なる相対スループットを備えた領域は、データフローグラフ全体をノードごとに解析することで画定することができる。発火のたびに、すべてのノードがすべてのアークで同じ数のトークンを生成し消費するわけではない。これは、ゲート、マージ、非決定的マージ、スイッチ、入力、出力、ソース、シンクおよびデュプリケータノードなどのデータフロー制御ノードにあてはまる。そのようなノードは、それぞれ各アーク上で生成され消費されるトークンの数の間にある関係を有する。この関係は、任意のアーク間、入力−出力間、出力−出力間、および入力−入力間にあてはまる。そのようなノードは、均一なスループットを備えた領域の境界を画定する。異なる入力／出力アーク上のアクティビティの関係は、相対スループットの関係を定義する。
【０１１５】
相対スループットの平衡化は、スループットを増加させるか、または領域内のハードウェアリソースの使用を減少させて、領域が要求する相対スループットに関してハードウェアの使用が最小限になるようにすることである。目標は、一定量のハードウェアリソースで最大の性能を達成することである。別の目標は、各領域での一定の性能を達成するために使用されるハードウェアリソースの使用を最小限にすることである。
【０１１６】
スループットは、より高速のハードウェア要素を使用し、ノード内の動作を実行する別のより高速のアルゴリズムを使用し、ノードを複製して並列またはパイプライン処理を可能にすることで増加できる。バッファの場合、領域を通過するすべての経路が少なくともほぼ等しい数のバッファを有するようにする方法がある。
【０１１７】
他方、例えば、サイズが小さいハードウェア要素を使用し、反復機能を使用し、ハードウェアリソースが少なくてすむアルゴリズムを使用し、および／または、同じまたは同様の動作を実行するノードが同じハードウェアリソースを共用できるようにすることでスループットを低減できる。ここで、バッファに関して、すべての経路上のバッファの数が同じではない場合、より並列でない動作が可能になり、性能の低下を意味するが、使用するバッファの数は減る。
【０１１８】
バッファの数を増減させてスループットを適合させる理由は、２つに分岐し、再びマージするデータ経路を想像することで示される。一方の経路が長いパイプラインを含み、そこに供給する独立した値が十分ある場合、すなわち、パイプラインが満杯の場合、他方の経路は、１つのトークンしか保持できず、短い経路が満杯の時に経路が分岐するデュプリケータノード内で停止が発生する。短い経路上のトークンは、結合できるようにパイプラインを通るトークンが生成されるのを待つ。したがって、一度に１つの要素だけがパイプライン内で活動状態になる。両方の経路が同じ数のトークンを保持できるならば、パイプラインは満杯になり得る。本発明は、選択した数のバッファが非活動状態になっている時に必要なスループットを選択できるように短い経路上のバッファの数を選択することを提案する。
【０１１９】
特定の相対スループットが、最大相対スループットのパーセンテージ（０と１の間の小数）として測定されると仮定すると、特定の相対スループットを達成するのに必要なバッファの数は、最大相対スループットに特定の相対スループットを掛けた値について２つの経路を平衡化するのに必要なバッファの数に等しい。バッファに関して、両方の経路上に同数のバッファが存在すれば、最大相対スループットについて２つの経路が平衡化される。
【０１２０】
図５は、均一なスループットの領域１１０２内の、各々が少なくとも１つの入力および／または少なくとも１つの出力を含む複数のノード１１００と均一なスループットの領域１１０２外の可能なノード１１０４とを含むディジタル論理回路を表すデータフローグラフの一部の一例を示す図である。上記可能なノード１１０４は、第２の均一なスループットの領域（図示せず）を形成する複数のノードおよび接続を含むことができる。データフローグラフのノード間のデータフローは、アークで示される。上記ノード１１００、１１０４の各々は、それぞれ上記ノードの入力にあるデータについて実行される論理演算を表す。普通トークンと呼ばれる上記ノードの入力にあるデータは、上記アークによって保持されると考えることができ、したがって、上記アークに保持されるデータは、それぞれアークの起点のノードの出力である。図５の例に関して、均一なスループットの領域１１０２、すなわち、処理ノードへの負荷が平衡化され、他のノードから必要な入力データが提供されるまでどのノードも停止する必要がない領域は、ノード１１００の１つから均一なスループットの領域１１０２外のノード１１０４への接続１１０６と、均一なスループットの領域１１０２外のノード１１０４から均一なスループットの領域内のノードへの接続１１０８、すなわち、均一なスループットの領域を抜け、次に、同じ均一なスループットの領域に再び戻るデータフロー経路を含む。データフローマシンを最適化するために、ハードウェア内のディジタル論理回路の実装にはデッドロックを防止するためのデータフローグラフの適応が必要である。そのようなループは対処しないとデッドロックの原因になり得る。
【０１２１】
領域内のすべてのノードは、直接、または他のノードを介して領域の入力と出力の両方に接続しなければならない。ノード１１０４はオプションであるため、本発明は、均一なスループットの領域１１０２のあるノードから均一なスループットの領域１１０２の別のノードへの接続を含む構成を対象とする。
【０１２２】
図６は、均一なスループットの領域１１０２内のノードおよび接続が複合ノード１２００と考えられる、図５のデータフローグラフの一部の適合図である。図５の接続１１０６、１１０８およびノード１１０４を含む経路をループ１２０２とみなすことで、ディジタル論理回路を実装するためのディジタル制御パラメータを生成する時のデッドロックの問題に対処できる。確実にループ１２０２によるデッドロックが発生しないようにするため、本発明では、複合ノード１２００、すなわち、図５の均一なスループット領域１１０２を通過するトークンの数をループ１２０２を通過するトークンの数で割った値に等しい数のバッファ１２０４を複合ノード１２００の入力と出力の間のすべての経路上に配置する。本発明をいくつかの実施形態を参照しながら説明してきたが、上記実施形態とは異なる他の実施形態も添付の特許請求の範囲に記載する本発明の範囲に同様に含まれることは当業者には明らかであろう。
【０１２３】
本発明は、同期システム、非同期システム、および同期および非同期部分の両方を含むシステムに適用可能である。したがって、相対スループットという用語を使用している。特定のシステムに使用できる相対スループットを表すその他の用語は、例えば、帯域幅、チョークなどである。異なる相対スループットを備えた領域は、データフローグラフ全体をノードごとに解析することで画定できる。発火のたびにすべてのノードがすべてのアークで同じ数のトークンを生成し消費するわけではない。これは、ゲート、マージ、スイッチ、およびデュプリケータノードなどのデータフロー制御ノードにあてはまる。そのようなノードはそれぞれ各アーク上で生成され、消費されるトークンの数の間にある関係を有する。この関係は、任意のアーク間、入力−出力間、出力−出力間、および入力−入力間にあてはまる。そのようなノードは均一なスループットを備えた領域の境界を画定する。異なる入力／出力アーク上のアクティビティの関係は、相対スループットの関係を定義する。
【０１２４】
高レベル言語でのハードウェア設計は一般に望ましいが、ＦＰＧＡの場合には特別の利点がある。ＦＰＧＡは、再構成可能であるため、単一のＦＰＧＡが多数の異なるハードウェア設計を受け入れることができる。この能力を十分に活用するため、従来のハードウェア記述言語よりもはるかに簡単な設計の記述方法が必要である。ＦＰＧＡでは、高レベル言語の恩恵は、完成した設計の費用効率以上の価値があることがあり、これはＡＳＩＣの設計にはあてはまらない。
【０１２５】
ディジタル論理回路内にデータフローマシンを実装するために、各ノードは、ノードが出力においてデータを提供し、入力においてデータを消費する条件を定義する発火規則を備える。より詳細には、発火規則は、データフローグラフ内のデータのフローを制御する機構である。発火規則を用いて、データはノードの入力から出力へ転送され、その間データはノードの関数に従って変換される。ノードの入力から受け取ったデータは、その入力に実際に利用可能なデータがある場合にのみ消費される。これに対応して、データは、データを受け入れる空間があってはじめて出力において生成される。しかし、場合によっては、古いデータが経路を塞いでいても出力においてデータを生成することができる。出力の古いデータは新しいデータに入れ替えられる。
【０１２６】
一般的な発火規則に対する仕様は通常、以下の条件を含む。
１）ノードが入力データを消費するためのノードの各入力に対する条件
２）ノードが出力においてデータを生成するためのノードの各出力に対する条件
３）ノードの関数を実行するための条件
【０１２７】
上の条件は普通、入力データの値、入力または出力における有効データの存在、入力に適用される関数の結果または関数の状態によって変化するが、原則的にはシステムが利用可能なあらゆるデータによって変化する。本明細書に参照により組み込むものとするＥｄｗａｒｄ  Ａ．Ｌｅｅ著の文書「発火を伴うデータフローの表示的意味論（Ａ  Ｄｅｎｏｔａｔｉｏｎａｌ  Ｓｅｍａｎｔｉｃｓ  ｆｏｒ  Ｄａｔａｆｌｏｗ  ｗｉｔｈ  Ｆｉｒｉｎｇ）」に記述された発火規則の意味論を遵守してもよい。非決定的な動作の場合、ハードウェアに特別の並べ替えおよびトークン照合機能を追加して、非決定的動作後のマシンの動作にトークンの順序が影響しない限り、データフローマシンの決定的動作を確実に行うことができる。
【０１２８】
システムのノードの一般的な発火規則を確立することで、専用の制御経路を必要とすることなくさまざまなタイプのプログラムを制御することができる。しかし、特別なケースで、発火規則によって制御フローを実施することができる。別の特別のケースは、ノードの全ての入力においてデータが利用可能なときに限って全てのノードが動作する発火規則がないシステムである。
【０１２９】
データフローマシンを作成するツールから自動的にディジタル論理回路を実装することができるためには、ディジタル論理回路の実施にモジュール式手法を適用すると有利である。それ故、異なるタイプのノードが、ノードの特定の機能に適合していても同様の種類のデータフロー制御を提供しなければならない。一般に、データフロー制御の実装に当たっては、消費信号に影響される有効データ信号が前記消費信号に影響してはならず、有効データ信号に影響される消費信号が上記有効データ信号に影響してはならない。
【０１３０】
これを達成する簡単な方法は、マシン内の全てのノードについて２方向のうち１つの方向を選択することである。いずれのノードも消費経路に依存する有効経路を含むことができ、またはノードは、有効経路に依存する消費経路を含むことができる。この手法によって組合せループを生成することなくディジタル論理回路内にデータフローマシンを容易に自動作成することができる。
【０１３１】
発火規則の関数の具体例を、１つのデータ入力Ｄｉｎ０で関数を実行し１つのデータ出力Ｄｏｕｔ０を与える図７に示すノードによって説明できる。このノードは、データフロー制御のための有効データ入力Ｖｉｎ０、消費データ入力Ｃｏｕｔ０、データ有効出力Ｖｏｕｔ０、および消費データ出力Ｃｉｎ０を含む。ここで各信号の表記に留意されたい。「ｉｎ」は、１つまたは複数の先行ノードへのインタフェース、「ｏｕｔ」は、１つまたは複数の後続ノードへのインタフェースを指す。この表記を明細書と添付の図面で一貫して使用する。図では、入力はすべて左側に配置され、出力はすべて右側に配置されていて、先行ノードおよび後続ノードへのインタフェースに従ってまとめられてはいないことに留意されたい。それ故、Ｃｏｕｔ０は、後続ノードからの入力で、Ｃｉｎ０は先行ノードへの出力である。先行および後続は、データフローに従って解釈する。
【０１３２】
図７に示すノードに話を戻すと、このノードは以下のように記述できる。
【数１】
2009512089.tif 000003
【０１３３】
その他の例として複数のトークンについて関数を実行するノードを挙げる。図８は、オペランドとして２つのトークンで関数が実行される例である。このノードは、以下のように記述できる。
【数２】
2009512089.tif 000004
【０１３４】
別の例として複数の出力を提供する関数を１つのトークンで実行するノードを挙げる。図９は、関数が２つの出力を与える例である。別の例として条件次第で複数のトークンの１つを出力に移動することで複数の入力トークンのマージを実行するノードを挙げる。図１０は、入力トークンが２つの例であり、以下のように記述できる。
【数３】
2009512089.tif 000005
【０１３５】
別の例として条件次第でノードが複数の出力の１つで入力トークンを生成する、スイッチを実行するノードを挙げる。図１１は、出力が２つの例であり、以下のように記述できる。
【数４】
2009512089.tif 000006
【０１３６】
別の例としてデータが優先順位を付けた各入力のどこにあるかに応じて複数のトークンの１つを出力に移動することで複数の入力トークンの優先マージを実行するノードを挙げる。図１２は、入力が２つの例である。このノードは以下のように記述できる。
【数５】
2009512089.tif 000007
【０１３７】
図１３は、条件が真の場合にトークンを通過させる真ゲートを示す。このノードは以下のように記述できる。
【数６】
2009512089.tif 000008
【０１３８】
図１４は、真であれば値を消費し、偽であれば複製を実行するノードを示す。図１４で、条件は、条件入力が偽で複製が実行されるが、他の条件では類似の実施形態を実行することができる。図１５は、以下に説明するカッター機能（ｃｕｔｔｅｒ  ｆｕｎｃｔｉｏｎ）を実行するノードを示す。ノードの重要なタイプとして値を通過させる前に格納するバッファがある。バッファのサイズすなわち長さは１つの格納ステップから多数の格納ステップにわたる。図１６は、長さが１のバッファノードを示す。より大きいサイズのバッファは入力および出力を管理する制御論理をさらに備える。図１７は、いわゆるブールストリーム、すなわち、例えばカウンタが示す数の複数の偽トークンを生成し、次に、新しい真のトークンを生成し、次に、このシーケンスを反復する関数を実行するノードを示す。
【０１３９】
図１８は、図１０に示す２つの値のマージノードと対比できる４つの値のマージノードを示す。このノードは以下のように記述できる。
【数７】
2009512089.tif 000009
【０１４０】
図１９は、図１１に示す２つの値のスイッチノードと対比できる４つの値のスイッチノードを示す。このノードは以下のように記述できる。
【数８】
2009512089.tif 000010
【０１４１】
発火規則の関数の別の例として、条件が偽であればトークンを通過させ、それでなければトークンを除去するいわゆる偽ゲート、すなわち、上記の真ゲートの逆のゲートを含むノードを挙げることができる。このノードは２つのデータ入力と１つのデータ出力とを含む。したがって、このノードは２つの有効データ入力と、２つの消費入力と、１つのデータ有効出力と、１つの消費出力とを含む。有効データ出力は２つの有効データ入力と第１のデータ入力の論理によって形成される。データ出力は第２のデータ入力の値を与えられる。消費入力は第１のデータ入力、消費出力、および２つの有効データ入力の論理によって形成される。ノードの関数は以下のように記述できる。
【数９】
2009512089.tif 000011
【０１４２】
それ故、各ノードはあらゆる瞬間に正しいデータを提供する追加の信号セットを提供される。第１の追加セットは先行ノードが出力において安定したデータを有することを示す「有効」信号を保持する。同様に、ノードは、その出力においてデータが安定している時にはデータ経路内の後続ノードに「有効」信号を提供する。この手順によって、各ノードは入力におけるデータの状態を決定することができる。
【０１４３】
さらに、第２の追加の信号セットは現在のノードが入力で任意の追加データを受け付ける準備ができているか否かを先行ノードに示す「消費」信号を保持する。同様に、ノードはデータ経路内の後続ノードから「消費」信号を受け取る。消費信号を使用することで、特定の経路内のデータのフローを一時的に停止させることができる。これは、ある瞬間のノードが不確定な遅延を含む時間がかかるデータ処理、例えば、ループまたはメモリアクセスを実行している場合、重要である。消費信号の使用は本発明の一実施形態にすぎない。選択したプロトコルに応じていくつかの他の信号を使用できる。例として、［ｓｔａｌｌ］、「ｒｅａｄｙ−ｔｏ−ｒｅｃｅｉｖｅ」、「ａｃｋｎｏｗｌｅｄｇｅ」または「ｎｏｔ−ａｃｋｎｏｗｌｅｄｇｅ」信号、および信号のＨｉｇｈ、Ｌｏｗに基づくのではなくパルスまたは遷移に基づく信号がある。その他の信号方式も可能である。「有効」信号を使用することでアーク上のデータの存否を表すことができる。したがって、同期データフローマシンを構成できるだけでなく、静的および動的データフローマシンを構成することもできる。「有効」信号は必ずしも専用信号線として実装される必要はなく、「ヌル」値を表すための特別なデータ値を選択するようないくつかの他の方法においても実装することができる。消費信号に関しては、多くの他の可能な信号方式がある。話を分かりやすくするために、本明細書の残りの部分では、消費および有効信号にのみ言及する。本発明の機能を他の信号方式に拡張することは簡単である。
【０１４４】
専用の消費信号線があれば、より高い効率を達成できる。消費信号により、ノードは、下位のアークがその時点において満杯であっても、次のクロック周期において出力トークンを受け取ることができることを知り得る。専用の消費信号線がなければ、ノードは、発火する前に、下位のアーク上に空間が空くまで待たなければならない。これは、アークへのエントリが少なくとも１サイクルおきに空になることを意味し、効率が悪くなる。
【０１４５】
図７〜図１９は、ノードに対して有効データおよび消費信号を生成する論理回路の例を示す。一般に、発火規則は複雑であり、個々のノードの機能に従って確立されなければならない。
【０１４６】
複合データフローマシンの場合、消費線は、信号伝播速度と比較して極めて長いことがある。その結果、消費信号が、機能停止される必要がある経路内のすべてのノードに到達せず、結果的にデータが失われる（すなわち、未処理のデータが新しいデータによって上書きされる）ことが起こり得る。
【０１４７】
これはいくつかの方法で解決できる。消費信号伝播経路を極めて注意深く平衡化して、確実に消費信号をすべての目標レジスタに間に合うように到達させることができる。別の方法としては、停止可能なブロックの後段に先入れ先出しバッファを配置してブロック内の消費信号の使用を完全回避する方法がある。最初の方法とは異なり、先入れ先出しを使用してデータがパイプラインを出る時にパイプラインデータを収集する。前者の解決策は、大規模なパイプライン処理されたブロックの場合に実装が極めて困難で時間がかかる。後者は、ブロック内に存在する可能性のあるデータセット全体を保持できる大容量バッファを必要とする。
【０１４８】
この制約された信号伝播速度という問題を解決するより良い方法は、図１７に示す「カッター」と呼ばれる機能によるものである。カッターは基本的に、後続ノードから消費線を受信し、それを１周期遅らせるレジスタである。これによって、その点の消費信号の組合せ長がカットされる。カッターが有効な消費信号を受信すると、先行ノードからのデータを１処理周期の間バッファに入れ、同時に、消費信号を同じだけ遅延させる。消費信号を遅延させて入力データをバッファに入れることによって、極めて長い消費線が使用された場合であっても、データが失われないことが確保される。
【０１４９】
カッターは、データループ、特にパイプライン処理されたデータループの実装を大幅に簡単化する。ここで、データのフローを制御するさまざまなプロトコルでは、消費信号がループを通過するデータと同じ経路をしばしば逆に進むように要求される。その結果、消費信号に対する組合せループが生成される。カッターをループ内に配置することでそのような組合せループを回避でき、そうでなければ実装が困難または不可能になる多くのプロトコルが可能になる。
【０１５０】
最後に、カッターは、データフローマシン内のデータ伝播の観点からはトランスペアレントである。これは、カッターを必要に応じて自動的に追加できるという意味である。
【０１５１】
専用消費線の代替案は、データを生成するノードがデータ出力が無効であるか否か検査するという方法である。それ故、専用消費ビットは不要であり、これによって長い消費信号線の問題が解決する。しかし、この場合、ノードはデータ出力アーク上のデータが後続ノードによって消費されるまで待機しなければならない。すなわち、発火が遅れることになる。しかし、この方法は高いスループットを要求しないデータフローマシンの領域では実行可能である。
【０１５２】
図２０ａ〜図２０ｇは、図に示す本発明の実施形態を示す部分の例である。図２０ａは、ループサブグラフを指す要素、すなわち、値を処理するためにデータフローマシン内で実行すべき関数を示す。図２０ｂは、式サブグラフ、すなわち、例えば、反復の追跡、ループ条件などの式を生成するデータフローマシンの要素を示す。図２０ｃは、マージノード、ここではｉｆマージ、すなわち、値２１０４に応じて値２１００、２１０２をマージして結果値２１０６を生成するノードを示す。図２０ｄは、優先マージノード、すなわち、値２１０８、２１１０をマージして結果値２１１２を生成するノードを示す。結果値２１１２は存在する値２１０８、２１１０の１つである。両方の値２１０８、２１１０が存在する場合、右側の値２１１０が優先される。図２０ｅは、条件２１２０に応じて値２１１６、２１１８から結果値２１１４を生成する条件マージノードを示す図である。図２０ｆは、条件２１２８に応じて２１２４または２１２６について値２１２２を生成する条件スイッチを示す。図２０ｇは、所定数の偽の条件とそれに続く１つの真の条件のストリームを生成し、その処理を繰り返すブールストリームノードを示す。
【０１５３】
図２１は、入力２２０４またはループ２２０６において値を獲得する条件マージノード２２０２を含むｆｏｒループ２２００を示す。反復回数はブールストリーム２２０８によって決定され、マージノード２２０２は入力から値を取り出し、ブールストリーム２２０８が次の真の値の前に偽の条件を生成するように配置された回数だけボディ２２１０にループさせる。同様のブールストリーム２２１４によって制御されるスイッチ２２１２が、出力をボディ２２１０からループ２２０６に同じ回数だけ切り替え、次に出力２２１６に切り替えるのでこのことが可能になる。ここで、反復処理中に一定である値であるコンテキスト値２２１８がブールストリームによって決定された同じ回数だけデュプリケータ内で複製され、ボディ２２１０に提供される。
【０１５４】
図２２は、図２１に示すｆｏｒループに似たｆｏｒループ２３００を示す。ｆｏｒループ２３００は反復処理中にリストをエクスポートする機能を提供する。これは、リストの長さを決定する第２のブールストリーム２３０４によって決定される所定の回数だけ複製される反復の回数を決定する第１のブールストリーム２３０２からの条件値によって制御されるスイッチ２３００によって可能になる。スイッチ２３００は第１および第２のブールストリーム２３０２、２３０４の決定に従って出力２３０６上にリストを出力する。この間、リストに見つからない値はゲート（図示せず）に送られ、ゲートはこれらの値を消去する。
【０１５５】
図２３は、同様の技術を適用し、デュプリケータ２４００および２つのブールストリーム２４０２、２４０４を用いてリストをインポートするｆｏｒループを示す。第１のブールストリーム２４０２は反復回数を決定し、第２のブールストリーム２４０４はリスト長を決定する。第１のブールストリームから複製された条件、すなわち、リスト長と同じだけの数の真の条件とそれに続けて反復の準備が整うまで偽の条件、という条件は、マージノード２４０６を制御してリスト全体を読み込ませ、リスト全体の空間を残してバッファ２４０８内に格納させる。次に、リストは、反復ごとに内部ループ内を循環し、同時にボディ２４１２に提供される。次に、リストを空にできるように、上記技術で反復回数およびリスト長と一致するように制御されるスイッチ２４１４が提供される。
【０１５６】
図２４は、図２３に示すｆｏｒループに似ているがボディ２５００を通してリストを循環するｆｏｒループを示す。これによってリストはループに依存する。
【０１５７】
本発明によれば、一般に、２つのタイプのループ、すなわち、１）変数が各反復内でそれ自体に依存するループ依存変数を備えたループ、および２）ループ依存変数がないループ（ループの実際の周回を追跡するカウンタに加えて）を実装することができる。本明細書では一貫してこの種のループを「ｆｏｒｅａｃｈ」ループと呼ぶ。
【０１５８】
ループ依存変数を備えたループは２つのサブグループに分割される。すなわち、１ａ）ループ内の周回回数がループ内で計算されるループ、すなわち、ループを継続するか否かを決定する条件がループ依存変数に依存するループ、本明細書では一貫してこの種のループを「ｗｈｉｌｅ」ループと呼ぶ。および１ｂ）プログラムの実行中に所定の回数周回するループ、本明細書では一貫してこの種のループを「ｆｏｒ」ループと呼ぶ。
【０１５９】
［ｎｅｘｔ変数（ＮＸＴ）］は、ループ依存性を有する変数である。この変数は、反復ごとに「ｎｅｘｔ」値を計算する（おそらくは他の中間計算によって）。「ｆｏｒ」および「ｗｈｉｌｅ」ループは、ＮＸＴを有するが、「ｆｏｒｅａｃｈ」は有さない。
【０１６０】
「ｃｏｎｔｅｘｔ変数（ＣＴＸ）」はループ実行中に変化しない変数である。この変数はループ（コンテキスト）から値を取り出し、その値は変化しない。
【０１６１】
「ｒｅ−ｅｎｔｒａｎｔ」ループはパイプライン処理によって複数の反復を同時に実行できるデータ依存ループ（ｆｏｒ／ｗｈｉｌｅ）である。「ｒｅ−ｅｎｔｒａｎｔ」である「ｗｈｉｌｅ」ループはタグ付けが必要である。すなわち、パイプライン内の各値にはＩＤを割り当てなければならない。これによって、ループの終了後に値を分類することができる。ある値に続けてループに入る値にタグ付けをしないと、後者の値のループ周回数の方が少ない場合に、ループは前者の値より前にループを抜けることがある。この結果、非決定的な振る舞いが発生する。
【０１６２】
値の「エクスポート」は非ループ依存変数がループから返されることを意味する。値のインポートは値が「ＣＴＸ」値であることを意味する。
【０１６３】
「リスト」は次々にストリーミングされる値のグループ（値のリスト）として扱われる一連のトークンである。
【０１６４】
「ベクトル」は完全にブロードパラレルな設計である。これはデータフローマシン内にすべて同時に存在し、すべてアクセス可能な値の集合である。リストおよびベクトルは「コレクション」と呼ばれる。
【０１６５】
コレクションにわたって反復する時、反復回数は反復されるコレクション内の要素の数に等しい。反復されるコレクションから反復ごとに１つの要素が読み出される。
【０１６６】
リストまたはベクトルにわたって反復するとは、リストの場合、１回に１つの値がループ内に供給されることを意味する。ベクトルの場合、ベクトル内にある要素と同数のループボディが作成されることを意味する。各ボディはベクトル内の各要素を同時に処理する。
【０１６７】
コレクションにわたって反復し、ＣＴＸからコレクションをインポートし、またはＮＸＴ内でコレクションのループ依存の変更をすることができる。
【０１６８】
「ｆｏｒｅａｃｈ」は常にコレクションを返す（反復間にはデータ依存性が発生しないので、コレクション内で一度に１つの要素上でのみ動作できる）。
【０１６９】
「ｆｏｒ」は値（総計値）または値のコレクション（例えば、加算中の現在の総計値）を返すことができる。
【０１７０】
同時に反復されるＣＴＸ、ＮＴＸおよび多数のコレクション内に多数の変数を有することが可能である。
【０１７１】
データフローマシンの基本機構は、ノードが入力をすべて有し、入力を消費し、関連する出力（もしあれば）を生成している時にノードは動作を実行するということである。ノードは十分な入力があるまでは動作を実行しない。時間より早く到着した入力があれば、ノードの動作に十分な入力が到着するまでノードの前段のエッジ上で待機する。ノードの出力エッジが占有されていると、エッジが解放されるまで起動を遅らせる。この機能は一部のエッジでの初期トークン（値）を用いたｆｏｒループ内で利用される。
【０１７２】
ループの基本は以下の通りである。
・ｆｏｒｅａｃｈはソースコレクションにわたって反復し、他のすべての反復と無関係にソースコレクションの各要素についてループボディを実行する。
・ｆｏｒはソースコレクションにわたって反復し、各要素についてループボディを実行し、ループ依存変数内でループ運搬依存性を有する。
・ｗｈｉｌｅは条件が真である限り反復し、ループ依存変数の反復あたり１回ループボディを実行する。
【０１７３】
依存性を備えた通常のループは一度に１つの値のセットだけを取り出す。値のセットは計算され、結果が生成されると、ループは新しい値のセットを入力できる状態になる。
【０１７４】
例として、基本ｆｏｒループを考察する。
【数１０】
2009512089.tif 000012
【０１７５】
実行後、ａは値１０を有する。
【０１７６】
このループを図２５に示す。ただし、ループボディ３１０４に対する直接の入力３１００および出力３１０２は使用しない。入力３１００および出力３１０２はｆｏｒループへのコレクション入力／出力である。図の中央最上部の入力３１０６はｎｅｘｔ入力である。この例では、ｉの初期値（この場合０）はここでループに入る。ループの中央最下部の出力３１０８はｎｅｘｔ出力である。このループの結果はここで現れる。ループボディ３１０４を示す中央のクラウドはマージ３１１０から入力を取り出し、それに１を加算し、その結果をスイッチ３１１２に送る。２つのブールストリーム３１１４、３１１５がそれぞれ１０個の偽の値を生成し、その後に真の値を１つ生成する。
【０１７７】
別の例として、ｃｔｘ入力を備えたｆｏｒループを考察する。  
【数１１】
2009512089.tif 000013
【０１７８】
実行後、ａは値１００を有する。
【０１７９】
このループを図２６に示す。値ｂはループの反復回数だけ複製され、各反復でｉに加えられる。それ以外は、図２５を参照して説明した基本ループと同様である。
【０１８０】
別の例として、ｌｉｓｔコレクションから反復するｆｏｒループを考察する。
【数１２】
2009512089.tif 000014
【０１８１】
実行後、ａは値５５を有する。
【０１８２】
このループを図２５に示す。今回、ループボディ３１０４に直接入力される入力３１００を使用する。（＜１．．１０＞）にわたって反復されているリストの値は１回に１つの値ずつその入力３１００上に送られる。その値は各反復内でマージ３１１０から値に加えられ、その結果はスイッチ３１１２に送られる。それ以外は、基本ｆｏｒループと同様である。
【０１８３】
別の例として、ｌｉｓｔコレクションに反復するｆｏｒループを考察する。
【数１３】
2009512089.tif 000015
【０１８４】
実行後、ａは、＜１．．１０＞の総計値の現在高、すなわち、値＜１、３、６、１０、１５、２１、２８、３６、４５、５５＞を含むコレクションである。
【０１８５】
このループを図２５に示す。しかし、クラウドからの直接の出力３１０２を使用する。これはスイッチノード３１１２に送られた各値のコピーである。
【０１８６】
図２７は、図２６に示すループと同様のループを示す。今回は、ループで不変の入力は単一の価の代わりにリストである（おそらくインポートされたリストがループボディで使用されている）。リストはループの反復回数だけコピーされる。代替方法として、図２７に示す内部ループの代わりに図２８に示すようなｌｉｓｔ−ｄｕｐノードを使用することができる。
【０１８７】
図２９は、図２７と同様のループを示す。しかし、ここでは、インポートされたリストはもはやループで不変ではなく、ループの反復のたびに変化する。ループボディはリストの余地を提供する。
【０１８８】
図３０は、図２６と同様のループを示す。しかし、ループ不変の戻り値が追加されている。図３１に示すように、ｏｕｔｐｕｔスイッチに入力された条件が結果リストの長さと同じ回数だけｄｕｐノードによって複製される場合、戻り値はリストでもよい。
【０１８９】
図３２は、ｖｅｃｔｏｒループとも呼ばれる完全にアンロールされたループを示す。この場合、このループはｆｏｒループであり、各ボディはループ依存結果を次のループボディに渡す。ｌｉｓｔ入力はいくつかのベクトル入力である（ベクトルの各要素あたり１つ）。ｃｔｘはその値の１つのコピーを各ループボディに配布している。
【０１９０】
一度に１つの入力セットでしか動作できない依存性がある通常のループとは異なり、依存性を備えたｒｅ−ｅｎｔｒａｎｔループは最初の独立入力セットの直後に新しい独立入力セットを取り込むことができ、ループ内に空間ができると直ちに新しい入力セットを挿入できる。これによってループはパイプライン処理される。
【０１９１】
ｆｏｒループは、図３３に示すようにリエントラントにできる。この場合、例えば図２５に示すｆｏｒループが有するｉｎｐｕｔマージにｐｒｉｏマージが取って代わる。ｊｏｉｎおよびｓｐｌｉｔノード（下記参照）によって入力値および内部ループカウンタが同時に確実にループに入る。ｊｏｉｎおよびｓｐｌｉｔノードの効果は複数のリンクされたｐｒｉｏマージノードによって達成されている可能性がある。
【０１９２】
図３４および図３５は、それぞれスカラーおよびリストコンテキスト出力を備えたｒｅ−ｅｎｔｒａｎｔ  ｆｏｒループを示す。
【０１９３】
図３６は、部分的にアンロールされた、すなわち、ボディの複数のコピーがあるが、ループの反復数ほどは多くないｒｅ−ｅｎｔｒａｎｔ  ｆｏｒループを示す。この場合、ループ出口は、反復回数割るループボディのコピー数の数字が付いたループボディの後に配置しなければならない。これは、ｆｏｒループは固定回数だけ反復する（入力コレクション内の要素数だけ反復する）という事実を利用している。
【０１９４】
別の例として、基本ｆｏｒｅａｃｈループを考察する。
【数１４】
2009512089.tif 000016
ａは１から１０までの二乗のコレクションである（すなわち、＜１、４、９、１６、２５、３６、４９、６４、８１、１００＞）。
【０１９５】
ｆｏｒｅａｃｈループではループ運搬依存性が許されない。基本形式は図２５に示すｆｏｒループに似ているが、スイッチ／マージのｎｅｘｔ入力と出力とがない。すなわち、簡単な入力と簡単な出力とを備えたループボディクラウドである。反復コレクションは最上部で入力され最下部で出力される。図３７は、ループで不変のコンテキスト入力を備えたｆｏｒｅａｃｈループを示す。
【０１９６】
図３８は、リストの代わりにベクトルにわたって反復する、すなわち、図３２のｆｏｒループ同様の完全にアンロールされたｆｏｒｅａｃｈループを示す。ボディ間で渡されるループ依存値は存在しないことに留意されたい。図３８は、またさまざまなボディに配布されたコンテキスト入力を示す。
【０１９７】
別の例として、基本ｗｈｉｌｅループを考察する。
【数１５】
2009512089.tif 000017
【０１９８】
図３９は、ｗｈｉｌｅループを示す。ｗｈｉｌｅループはコレクションにわたって反復しない。このループは条件が満たされるまで反復する。この条件はｗｈｉｌｅループの起動のたびに異なる場合がある。これは、そうでなければ条件が変化しない（無限ループとなる）ため、ループ依存性があるということを意味する。ｗｈｉｌｅループは式の値が偽になるまで反復するので、固定長ブールストリームを用いて入力マージおよび出力スイッチを制御することはできない。その代わりとして、条件の結果が使用される。それ以外は、ｗｈｉｌｅループは上記のようにコレクション入力／出力を使用しないｆｏｒループときわめて類似している。
【０１９９】
図４０は、図２９のｆｏｒループ同様、ループ依存性がコレクションであるｗｈｉｌｅループを示す。
【０２００】
図４１は、基本ｒｅ−ｅｎｔｒａｎｔ  ｗｈｉｌｅループを示す。しかし、このループは非決定的である。ｗｈｉｌｅループは起動されるたびに異なった回数だけ反復する。これは、入力セットごとに、そのセットが後続のセットと異なる回数繰り返すことがあるという意味である。このため、後の入力セットがそれよりも長く反復している前の入力セットより先にループを抜けることがある。この結果、マシンの他の部分でミスマッチが発生する場合がある。
【０２０１】
非決定的なｗｈｉｌｅの問題を回避するため、図４２に示すタグ付けシステムが採用される。これは各入力セットをタグ、普通は簡単な番号に関連付ける。データがループを抜けると、タグに従ってその結果が分類され、データは順序正しく抜けることができる。そのようなタグ付け方式によって、ローカルな動的データフローマシンは完全に静的なＤｅｎｎｉｓデータフローマシンの状況に存在することができる。タグ付けシステムの外部では、ユニットは静的データフローマシンのように振舞うが、その内部では動的データフローマシンのように振舞う。再編成グラフによってタグをデータに関連付け、タグに結果を保持させられることが好ましい。また、タグバッファ４７１１のサイズがタグの数に等しいことが好ましい。
【０２０２】
図４３は、タグ付け機構を備えたｒｅ−ｅｎｔｒａｎｔ  ｗｈｉｌｅの一例を示す。ここで、タグ番号は０、１、２、３．．．でタグバッファ４７１２のサイズはタグの数に等しい。
【０２０３】
図「ｄｏｗｈｉｌｅ」は、ｒｅｐｅａｔ−ｕｎｔｉｌループとしても知られるｄｏ−ｗｈｉｌｅを実行するデータフローマシンを示す。このループはｗｈｉｌｅループに似ているが、必ずボディを１回実行してから条件を評価する。「ｄｏｗｈｉｌｅ＿ｒｅｅｎｔ」は、タグ付けシステムがないｄｏ−ｗｈｉｌｅループのｒｅ−ｅｎｔｒａｎｔバージョンを示す。ｄｏ−ｗｈｉｌｅはｗｈｉｌｅループ同様、起動のたびに異なる回数反復するので、正しい実行のためにタグ付けシステムをｒｅ−ｅｎｔｒａｎｔ  ｄｏ−ｗｈｉｌｅに追加すべきである。
【０２０４】
図４４は、推測ｉｆ演算を示す。ｉｆマージノードは３つの入力（条件、真分岐および偽分岐）のすべてにデータが揃うまで待機する。次いで条件入力が示す分岐から値を選択する。ｉｆ機能のこの設計は図４５に示すスイッチマージｉｆよりも効率的である。
【０２０５】
図４６は、スイッチおよびマージに分解されたｄｕｐノードを示す。図４７は、ｌｉｓｔ−ｄｕｐのための同様なｄｕｐノードを示す。
【０２０６】
手短に言えば、さまざまなループのタイプの特徴を以下のように説明できる。
・ｆｏｒｅａｃｈループは、ループ依存性を有さず、それ故、ループ依存性変数を有さない。
・ｆｏｒループは少なくとも１つのループ依存性変数を必要とする。
・ｗｈｉｌｅおよびｄｏ−ｗｈｉｌｅループは反復回数を決定する実行時間計算式を有する。
・ｗｈｉｌｅループはゼロ回反復もあるが、ｄｏ−ｗｈｉｌｅループは常に少なくとも１回反復する。
・ｆｏｒｅａｃｈループは常にパイプライン処理が可能である。
・ｆｏｒループおよびｗｈｉｌｅループはリエントラントにできる。
・起動ごとに異なる回数反復するｒｅ−ｅｎｔｒａｎｔループは値の正しい抜け順序を確保するためにタグ付けおよび分類システムを関連付けなければならない。これは、ｗｈｉｌｅ  ｒｅ−ｅｎｔｒａｎｔおよびｄｏ−ｗｈｉｌｅ  ｒｅ−ｅｎｔｒａｎｔにタグ付けが必要なことを意味する。
・ｒｅ−ｅｎｔｒａｎｔ  ｗｈｉｌｅはループボディよりも１回多く条件式を実行する。これは、ループボディが少なくとも１回の反復において空になることを意味する。ｒｅ−ｅｎｔｒａｎｔ  ｄｏ−ｗｈｉｌｅループはループと同じ条件式を含むｉｆ式をその周りに有していてもよい。この場合、ループボディは常に満杯で、ｗｈｉｌｅループと同じ動作を実行する。
【０２０７】
手短に言えば、ループの入力と出力とは以下のように記述できる。
・ループ依存変数はｎｘｔ−ｉｎ入力からループに入り、ｎｅｘｔ−ｏｕｔ出口からループを抜ける。
・ループ不変変数（ループの外側で定義されたループでループを通じて不変である）はｃｔｘ−ｉｎ（またはｉｍｐｏｒｔ）からループに入る。
・ループ不変変数およびループ依存変数から間接的に計算された変数はｃｔｘ−ｏｕｔ（またはｅｘｐｏｒｔ）からループを抜ける。
・コレクションにわたって反復するループは「ｃｏｌｌｅｃｔｉｏｎ  ｉｎ」からコレクションに入る。
・コレクションに結果を戻すループは「ｃｏｌｌｅｃｔｉｏｎ  ｏｕｔ」で結果を戻す。
【０２０８】
手短に言えば、ループのデータタイプは以下のように記述できる。
・ループはスカラーにわたって反復できる。
・コレクションにわたって反復するループはリストまたはベクトルにわたって反復できる。
・リストにわたって反復するとは一度に１つの要素がコレクションから取り出されるという意味である。
・ベクトルにわたって反復するとはコレクションのすべての要素が同時に反復されることを意味する。
【０２０９】
様々なループについて添付の図面を参照しながら説明してきた。概要として、下記の表はさまざまなタイプのループを示す図への参照を示している。表の凡例は以下の通りである。それぞれの図の番号はアルファベット文字の後に丸括弧で示してある。
ｆ：ｆｏｒループ
ｒｆ：ｒｅ−ｅｎｔｒａｎｔ  ｆｏｒループ
ｗ：ｗｈｉｌｅループ
ｒｗ：ｒｅ−ｅｎｔｒａｎｔ  ｗｈｉｌｅループ
ｅ：ｆｏｒｅａｃｈ
【表１】
2009512089.tif 000018
【０２１０】
さらに、以下のコメントはループの特徴を述べている。
・ベクトル上のｆｏｒループは完全にパイプライン処理されているため、常にリエントラントである。これは、もはやループは存在せず、ループが反復したはずの回数分だけ、ボディが配列されていることを意味する。そのような直線の動作は明らかにパイプライン処理が可能である。
【０２１１】
ｊｏｉｎノードはいくつかの値を併記するので１つのものとしてノードを通過できる。ｓｐｌｉｔノードは、以前結合されていた変数を結合された時と同じ左から右の順序で元の個々の値に分割する。
【０２１２】
ｒｅ−ｅｎｔｒａｎｔループは普通、ｐｒｉｏマージで実行される。ｆｏｒループはループ内のパイプライン位置の数と同じ数の初期偽トークンを使用し、同じ回数選択値を複製することでリエントラントにできる。
【０２１３】
ノードはしばしばより小さい部分に分解できる。例えば、スイッチノードはｇａｔｅノードに分解できる。ｇａｔｅノードは１つの条件入力と１つのデータ入力とを有する。また単一のデータ出力を有する。入力上の値は条件入力が真の値を有する場合、出力にコピーされる。条件入力が偽の値を有する場合、入力は消費されるだけで出力は生成されない。ｆａｌｓｅゲートも全く同じであるが、偽の条件を受け取ると値を渡し、真の条件を受け取ると値を消費する。こうして、ｓｗｉｔｃｈノードはｇａｔｅノードで構成される。
【０２１４】
ｔｒｕｅゲートおよびｆａｌｓｅゲートは両方ともスイッチ入力を取り出し、各々専用の出力（スイッチの２つの出力に対応する）を有する。スイッチへの条件入力は２つのゲートに接続される。全体としてはスイッチとして振舞う。
【０２１５】
また、ノードはより大きいノードに組み立てられる。例えば、ｆｏｒループの周囲のマージおよびスイッチは「ｆｏｒループ」ノードに組み立てられる。時には、組み立てられたノードは個々のノードのコレクションよりも効率的に実施することができる。
【０２１６】
以上、本発明を主にいくつかの実施形態を参照しながら説明してきた。しかし、当業者には明らかなように、上記開示した実施形態とは別の実施形態も添付の特許請求の範囲に記載する本発明の範囲内で同様に可能である。
【図面の簡単な説明】
【０２１７】
【図１】データフローグラフの一部を示す図である。
【図２】本発明のある実施形態による最適化後の図１のデータフローグラフの一部を示す図である。
【図３】データフローグラフの一部を示す図である。
【図４】本発明のある実施形態による最適化後の図３のデータフローグラフの一部を示す図である。
【図５】データフローマシンを表すデータフローグラフの一部を示す図である。
【図６】本発明のある実施形態を適用した図１を簡単にした図である。
【図７】本発明で使用するよう適合されたノードを示す図である。
【図８】本発明で使用するよう適合されたノードを示す図である。
【図９】本発明で使用するよう適合されたノードを示す図である。
【図１０】本発明で使用するよう適合されたノードを示す図である。
【図１１】本発明で使用するよう適合されたノードを示す図である。
【図１２】本発明で使用するよう適合されたノードを示す図である。
【図１３】本発明で使用するよう適合されたノードを示す図である。
【図１４】本発明で使用するよう適合されたノードを示す図である。
【図１５】本発明で使用するよう適合されたノードを示す図である。
【図１６】本発明で使用するよう適合されたノードを示す図である。
【図１７】本発明で使用するよう適合されたノードを示す図である。
【図１８】本発明で使用するよう適合されたノードを示す図である。
【図１９】本発明で使用するよう適合されたノードを示す図である。
【図２０ａ】図面に示された本発明の各実施形態を示す部分の例である。
【図２０ｂ】図面に示された本発明の各実施形態を示す部分の例である。
【図２０ｃ】図面に示された本発明の各実施形態を示す部分の例である。
【図２０ｄ】図面に示された本発明の各実施形態を示す部分の例である。
【図２０ｅ】図面に示された本発明の各実施形態を示す部分の例である。
【図２０ｆ】図面に示された本発明の各実施形態を示す部分の例である。
【図２０ｇ】図面に示された本発明の各実施形態を示す部分の例である。
【図２１】さまざまなループを示す図である。
【図２２】さまざまなループを示す図である。
【図２３】さまざまなループを示す図である。
【図２４】さまざまなループを示す図である。
【図２５】さまざまなループを示す図である。
【図２６】さまざまなループを示す図である。
【図２７】さまざまなループを示す図である。
【図２８】さまざまなループを示す図である。
【図２９】さまざまなループを示す図である。
【図３０】さまざまなループを示す図である。
【図３１】さまざまなループを示す図である。
【図３２】さまざまなループを示す図である。
【図３３】さまざまなループを示す図である。
【図３４】さまざまなループを示す図である。
【図３５】さまざまなループを示す図である。
【図３６】さまざまなループを示す図である。
【図３７】さまざまなループを示す図である。
【図３８】さまざまなループを示す図である。
【図３９】さまざまなループを示す図である。
【図４０】さまざまなループを示す図である。
【図４１】さまざまなループを示す図である。
【図４２】さまざまなループを示す図である。
【図４３】さまざまなループを示す図である。
【図４４】さまざまなループを示す図である。
【図４５】さまざまなループを示す図である。
【図４６】さまざまなループを示す図である。
【図４７】さまざまなループを示す図である。
【図１】
2009512089.tif 000019
【図２】
2009512089.tif 000020
【図３】
2009512089.tif 000021
【図４】
2009512089.tif 000022
【図５】
2009512089.tif 000023
【図６】
2009512089.tif 000024
【図７】
2009512089.tif 000025
【図８】
2009512089.tif 000026
【図９】
2009512089.tif 000027
【図１０】
2009512089.tif 000028
【図１１】
2009512089.tif 000029
【図１２】
2009512089.tif 000030
【図１３】
2009512089.tif 000031
【図１４】
2009512089.tif 000032
【図１５】
2009512089.tif 000033
【図１６】
2009512089.tif 000034
【図１７】
2009512089.tif 000035
【図１８】
2009512089.tif 000036
【図１９】
2009512089.tif 000037
【図２０ａ】
2009512089.tif 000038
【図２０ｂ】
2009512089.tif 000039
【図２０ｃ】
2009512089.tif 000040
【図２０ｄ】
2009512089.tif 000041
【図２０ｅ】
2009512089.tif 000042
【図２０ｆ】
2009512089.tif 000043
【図２０ｇ】
2009512089.tif 000044
【図２１】
2009512089.tif 000045
【図２２】
2009512089.tif 000046
【図２３】
2009512089.tif 000047
【図２４】
2009512089.tif 000048
【図２５】
2009512089.tif 000049
【図２６】
2009512089.tif 000050
【図２７】
2009512089.tif 000051
【図２８】
2009512089.tif 000052
【図２９】
2009512089.tif 000053
【図３０】
2009512089.tif 000054
【図３１】
2009512089.tif 000055
【図３２】
2009512089.tif 000056
【図３３】
2009512089.tif 000057
【図３４】
2009512089.tif 000058
【図３５】
2009512089.tif 000059
【図３６】
2009512089.tif 000060
【図３７】
2009512089.tif 000061
【図３８】
2009512089.tif 000062
【図３９】
2009512089.tif 000063
【図４０】
2009512089.tif 000064
【図４１】
2009512089.tif 000065
【図４２】
2009512089.tif 000066
【図４３】
2009512089.tif 000067
【図４４】
2009512089.tif 000068
【図４５】
2009512089.tif 000069
【図４６】
2009512089.tif 000070
【図４７】
2009512089.tif 000071
【国際調査報告】
2009512089.tif 000072
2009512089.tif 000073
2009512089.tif 000074
2009512089.tif 000075
2009512089.tif 000076