JP2006522406A5 - - Google Patents
Download PDFInfo
- Publication number
- JP2006522406A5 JP2006522406A5 JP2006507967A JP2006507967A JP2006522406A5 JP 2006522406 A5 JP2006522406 A5 JP 2006522406A5 JP 2006507967 A JP2006507967 A JP 2006507967A JP 2006507967 A JP2006507967 A JP 2006507967A JP 2006522406 A5 JP2006522406 A5 JP 2006522406A5
- Authority
- JP
- Japan
- Prior art keywords
- data
- data flow
- node
- hardware components
- nodes
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
- 238000010304 firing Methods 0.000 claims description 36
- 230000015654 memory Effects 0.000 claims description 30
- 238000004590 computer program Methods 0.000 claims description 9
- 238000003860 storage Methods 0.000 claims description 6
- 230000000875 corresponding Effects 0.000 claims description 3
- 231100000486 side effect Toxicity 0.000 description 20
- 230000003068 static Effects 0.000 description 12
- 238000000034 method Methods 0.000 description 9
- 230000004913 activation Effects 0.000 description 7
- UIIMBOGNXHQVGW-UHFFFAOYSA-M buffer Substances [Na+].OC([O-])=O UIIMBOGNXHQVGW-UHFFFAOYSA-M 0.000 description 7
- 101700062627 A1H Proteins 0.000 description 6
- 101700084722 A1H1 Proteins 0.000 description 6
- 101700061511 A1H2 Proteins 0.000 description 6
- 101700048824 A1H3 Proteins 0.000 description 6
- 101700051538 A1H4 Proteins 0.000 description 6
- 101700051076 A1HA Proteins 0.000 description 6
- 101700015578 A1HB1 Proteins 0.000 description 6
- 101700027417 A1HB2 Proteins 0.000 description 6
- 101700018074 A1I1 Proteins 0.000 description 6
- 101700039128 A1I2 Proteins 0.000 description 6
- 101700004404 A1I4 Proteins 0.000 description 6
- 101700073726 A1IA1 Proteins 0.000 description 6
- 101700075321 A1IA2 Proteins 0.000 description 6
- 101700022939 A1IA3 Proteins 0.000 description 6
- 101700022941 A1IA4 Proteins 0.000 description 6
- 101700023549 A1IA5 Proteins 0.000 description 6
- 101700040959 A1IA6 Proteins 0.000 description 6
- 101700061864 A1IA7 Proteins 0.000 description 6
- 101700071702 A1IA8 Proteins 0.000 description 6
- 101700015972 A1IB1 Proteins 0.000 description 6
- 101700078659 A1IB2 Proteins 0.000 description 6
- 101700076103 A1IB3 Proteins 0.000 description 6
- 101700056046 A1IB4 Proteins 0.000 description 6
- 101700081488 A1IB5 Proteins 0.000 description 6
- 101700062266 A1IB6 Proteins 0.000 description 6
- 101700002220 A1K Proteins 0.000 description 6
- 101700015324 A1KA Proteins 0.000 description 6
- 101700008193 A1KA1 Proteins 0.000 description 6
- 101700010369 A1KA2 Proteins 0.000 description 6
- 101700013447 A1KA3 Proteins 0.000 description 6
- 101700081640 A1KA4 Proteins 0.000 description 6
- 101700057270 A1KA5 Proteins 0.000 description 6
- 101700087084 A1KA6 Proteins 0.000 description 6
- 101700065792 A1KB Proteins 0.000 description 6
- 101700048210 A1KB1 Proteins 0.000 description 6
- 101700046590 A1KB2 Proteins 0.000 description 6
- 101700009736 A1KB3 Proteins 0.000 description 6
- 101700011865 A1KC Proteins 0.000 description 6
- 101700080679 A1L Proteins 0.000 description 6
- 101700051073 A1L1 Proteins 0.000 description 6
- 101700052658 A1L2 Proteins 0.000 description 6
- 101700008597 A1L3 Proteins 0.000 description 6
- 101700026671 A1LA Proteins 0.000 description 6
- 101700012330 A1LB1 Proteins 0.000 description 6
- 101700036775 A1LB2 Proteins 0.000 description 6
- 101700060504 A1LC Proteins 0.000 description 6
- 101700050006 A1MA1 Proteins 0.000 description 6
- 101700050259 A1MA2 Proteins 0.000 description 6
- 101700050664 A1MA3 Proteins 0.000 description 6
- 101700003843 A1MA4 Proteins 0.000 description 6
- 101700003604 A1MA5 Proteins 0.000 description 6
- 101700001262 A1MA6 Proteins 0.000 description 6
- 101700041596 A1MB Proteins 0.000 description 6
- 101700049125 A1O Proteins 0.000 description 6
- 101700017240 A1OA Proteins 0.000 description 6
- 101700024712 A1OA1 Proteins 0.000 description 6
- 101700028879 A1OA2 Proteins 0.000 description 6
- 101700032345 A1OA3 Proteins 0.000 description 6
- 101700087028 A1OB Proteins 0.000 description 6
- 101700062393 A1OB1 Proteins 0.000 description 6
- 101700081359 A1OB2 Proteins 0.000 description 6
- 101700071300 A1OB3 Proteins 0.000 description 6
- 101700031670 A1OB4 Proteins 0.000 description 6
- 101700030247 A1OB5 Proteins 0.000 description 6
- 101700014295 A1OC Proteins 0.000 description 6
- 101700068991 A1OD Proteins 0.000 description 6
- 101700008688 A1P Proteins 0.000 description 6
- 101700071148 A1X1 Proteins 0.000 description 6
- 101700020518 A1XA Proteins 0.000 description 6
- 101700017295 A1i3 Proteins 0.000 description 6
- 101700011284 A22 Proteins 0.000 description 6
- 101700067615 A311 Proteins 0.000 description 6
- 101700064616 A312 Proteins 0.000 description 6
- 101710005568 A31R Proteins 0.000 description 6
- 101710005570 A32L Proteins 0.000 description 6
- 101700044316 A331 Proteins 0.000 description 6
- 101700045658 A332 Proteins 0.000 description 6
- 101700004768 A333 Proteins 0.000 description 6
- 101700007547 A3X1 Proteins 0.000 description 6
- 101700079274 A411 Proteins 0.000 description 6
- 101700063825 A412 Proteins 0.000 description 6
- 101700039137 A413 Proteins 0.000 description 6
- 101710005559 A41L Proteins 0.000 description 6
- 101700056514 A42 Proteins 0.000 description 6
- 101700003484 A421 Proteins 0.000 description 6
- 101700048250 A422 Proteins 0.000 description 6
- 101700060284 A423 Proteins 0.000 description 6
- 101700086421 A424 Proteins 0.000 description 6
- 101710008954 A4A1 Proteins 0.000 description 6
- 101700004929 A611 Proteins 0.000 description 6
- 101700001981 A612 Proteins 0.000 description 6
- 101700009064 A71 Proteins 0.000 description 6
- 101700020790 AX1 Proteins 0.000 description 6
- 101710003793 B1D1 Proteins 0.000 description 6
- 101700038578 B1H Proteins 0.000 description 6
- 101700025656 B1H1 Proteins 0.000 description 6
- 101700025455 B1H2 Proteins 0.000 description 6
- 101700058885 B1KA Proteins 0.000 description 6
- 101700028285 B1KB Proteins 0.000 description 6
- 101700058474 B1LA Proteins 0.000 description 6
- 101700031600 B1LB Proteins 0.000 description 6
- 101700004835 B1M Proteins 0.000 description 6
- 101700054656 B1N Proteins 0.000 description 6
- 101700022877 B1O Proteins 0.000 description 6
- 101700046587 B1Q Proteins 0.000 description 6
- 101700010385 B1R Proteins 0.000 description 6
- 101700032784 B1R1 Proteins 0.000 description 6
- 101700012097 B1R2 Proteins 0.000 description 6
- 101700072176 B1S Proteins 0.000 description 6
- 101700045578 B1S1 Proteins 0.000 description 6
- 101700052720 B1S2 Proteins 0.000 description 6
- 101700046810 B1S3 Proteins 0.000 description 6
- 101700016166 B1T1 Proteins 0.000 description 6
- 101700008274 B1T2 Proteins 0.000 description 6
- 101700085024 B1U1 Proteins 0.000 description 6
- 101700070037 B1U2 Proteins 0.000 description 6
- 101700039556 B1V Proteins 0.000 description 6
- 101700001301 B2H Proteins 0.000 description 6
- 101700011411 B2I Proteins 0.000 description 6
- 101700043400 B2I1 Proteins 0.000 description 6
- 101700013212 B2I2 Proteins 0.000 description 6
- 101700037945 B2I3 Proteins 0.000 description 6
- 101700013584 B2I4 Proteins 0.000 description 6
- 101700076307 B2I5 Proteins 0.000 description 6
- 101700070759 B2J Proteins 0.000 description 6
- 101700047017 B2J1 Proteins 0.000 description 6
- 101700086457 B2J2 Proteins 0.000 description 6
- 101700030756 B2K Proteins 0.000 description 6
- 101700011185 B2KA1 Proteins 0.000 description 6
- 101700034482 B2KA2 Proteins 0.000 description 6
- 101700059671 B2KA3 Proteins 0.000 description 6
- 101700051428 B2KA4 Proteins 0.000 description 6
- 101700067858 B2KB1 Proteins 0.000 description 6
- 101700021477 B2KB2 Proteins 0.000 description 6
- 101700041272 B2KB3 Proteins 0.000 description 6
- 101700026045 B2KB4 Proteins 0.000 description 6
- 101700027558 B2KB5 Proteins 0.000 description 6
- 101700032261 B2KB6 Proteins 0.000 description 6
- 101700073146 B2KB7 Proteins 0.000 description 6
- 101700079550 B2KB8 Proteins 0.000 description 6
- 101700056037 B2KB9 Proteins 0.000 description 6
- 101700036551 B2KBA Proteins 0.000 description 6
- 101700055440 B2KBB Proteins 0.000 description 6
- 101700077277 B2KBC Proteins 0.000 description 6
- 101700056297 B2KBD Proteins 0.000 description 6
- 101700079394 B2KBE Proteins 0.000 description 6
- 101700075860 B2L1 Proteins 0.000 description 6
- 101700067766 B2L2 Proteins 0.000 description 6
- 101700017463 B31 Proteins 0.000 description 6
- 101700004120 B312 Proteins 0.000 description 6
- 101700005607 B32 Proteins 0.000 description 6
- 101710025734 BIB11 Proteins 0.000 description 6
- 101700041598 BX17 Proteins 0.000 description 6
- 101700045280 BX2 Proteins 0.000 description 6
- 101700043880 BX3 Proteins 0.000 description 6
- 101700046017 BX4 Proteins 0.000 description 6
- 101700016678 Bx8 Proteins 0.000 description 6
- 101710025150 DTPLD Proteins 0.000 description 6
- 101710005624 MVA131L Proteins 0.000 description 6
- 101710005633 MVA164R Proteins 0.000 description 6
- 101700060028 PLD1 Proteins 0.000 description 6
- 101710009126 PLDALPHA1 Proteins 0.000 description 6
- 101710005563 VACWR168 Proteins 0.000 description 6
- 101700084597 X5 Proteins 0.000 description 6
- 101700062487 X6 Proteins 0.000 description 6
- 230000001934 delay Effects 0.000 description 5
- 239000000203 mixture Substances 0.000 description 5
- XUIMIQQOPSSXEZ-UHFFFAOYSA-N silicon Chemical compound [Si] XUIMIQQOPSSXEZ-UHFFFAOYSA-N 0.000 description 5
- 229910052710 silicon Inorganic materials 0.000 description 5
- 239000010703 silicon Substances 0.000 description 5
- 230000003139 buffering Effects 0.000 description 4
- 238000004891 communication Methods 0.000 description 4
- 238000010276 construction Methods 0.000 description 4
- 238000010586 diagram Methods 0.000 description 4
- 238000005206 flow analysis Methods 0.000 description 4
- 230000001360 synchronised Effects 0.000 description 4
- 230000001276 controlling effect Effects 0.000 description 3
- 230000001419 dependent Effects 0.000 description 3
- 230000011664 signaling Effects 0.000 description 3
- 230000000903 blocking Effects 0.000 description 2
- 230000014509 gene expression Effects 0.000 description 2
- 238000004519 manufacturing process Methods 0.000 description 2
- 230000004044 response Effects 0.000 description 2
- 230000015572 biosynthetic process Effects 0.000 description 1
- 238000006243 chemical reaction Methods 0.000 description 1
- 239000002131 composite material Substances 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 230000001747 exhibiting Effects 0.000 description 1
- 238000007667 floating Methods 0.000 description 1
- 239000012464 large buffer Substances 0.000 description 1
- 239000003550 marker Substances 0.000 description 1
- 238000005457 optimization Methods 0.000 description 1
- 238000003672 processing method Methods 0.000 description 1
- 230000000644 propagated Effects 0.000 description 1
- 238000004088 simulation Methods 0.000 description 1
- 230000001340 slower Effects 0.000 description 1
- 230000002194 synthesizing Effects 0.000 description 1
- 230000001131 transforming Effects 0.000 description 1
Description
(技術分野)
一般に、本発明は、データ処理方法および装置に関し、特に、細粒度並列処理および大規模パイプライン深度を使用するデータ・フロー・マシンにより、ディジタル・ハードウェアにおける高速データ処理を実行するための方法および装置に関するものである。
一般に、本発明は、データ処理方法および装置に関し、特に、細粒度並列処理および大規模パイプライン深度を使用するデータ・フロー・マシンにより、ディジタル・ハードウェアにおける高速データ処理を実行するための方法および装置に関するものである。
ディジタル回路を設計するための迅速で容易な方法を提供するために、近年、ハードウェア記述のための使いやすいプログラミング言語に対する多くの異なる方法が使用されている。データ・フロー・マシンをプログラムする場合、ハードウェア記述言語とは異なる言語が使用されるかもしれない。原則として、データ・フロー・マシン上の特定のタスクを実行するためのアルゴリズム記述は、記述そのものを含みさえすればよいが、集積回路において直接実行されるべきアルゴリズム記述は、ハードウェアにおけるアルゴリズムの特定の実現の多くの詳細を含まなければならない。例えば、ハードウェア記述は、最適なクロック周波数を提供するためのレジスタの配置や、どの乗算器を使用するか、等に関する情報を含まなければならない。
長年の間、データ・フロー・マシンは並列計算処理に対する優秀なモデルとして考えられてきており、従って、効率的なデータ・フロー・マシンを設計するための多くの試みが行われてきた。様々な理由により、データ・フロー・マシンを設計しようとする初期の試みは、他の使用可能な並列計算処理技術と比較して、計算性能に関して悪い結果を出してきた。
データ・フロー・マシンは、データ・フロー・グラフと混同されるべきでない。プログラム原始コードを翻訳する場合、今日使用可能なほとんどのコンパイラは、コンパイルされたプログラムの性能を最適化するために、データ・フロー解析およびデータ・フロー記述(データ・フロー・グラフ、あるいはDFGとして知られている)を使用している。アルゴリズム上で実行されたデータ・フロー解析は、データ・フロー・グラフを生成する。データ・フロー・グラフは、アルゴリズム内に存在するデータ従属性を示す。より具体的には、データ・フロー・グラフは、通常、処理されているデータ上でアルゴリズムが実行する特定の動作を示すノード、およびグラフにおけるノード間の相互接続を示すアーク、を含む。データ・フロー・グラフは従って、特定のアルゴリズムの要約記述であり、アルゴリズムを解析するために使用される。他方、データ・フロー・マシンは、データ・フロー・グラフに基づき、実際にアルゴリズムを実行することができる計算機械である。
データ・フロー・マシンは、ノイマン型アーキテクチャ(パーソナル・コンピュータにおける通常のプロセッサはノイマン型アーキテクチャの1例である)のような制御フロー装置と比較すると、非常に異なる方法で動作する。データ・フロー・マシンにおいては、プログラムは、プロセッサによって実行されるべき一連の動作ではなく、特別なデータ・フロー制御ノードを伴うデータ・フロー・グラフである。データは、データ・フロー・グラフのアーク上に存在するトークンとして知られるパケットに編成される。トークンは、ビット、浮動小数点数、配列、等のような、アークによって接続されるノードによって動作されるべき任意のデータ構造を含むことができる。データ・フロー・マシンの型によって、各アークは、最大限、単一のトークン(静的データ・フロー・マシン)、固定数のトークン(同期データ・フロー・マシン)、あるいは不特定数のトークン(動的データ・フロー・マシン)、を保持することができる。
データ・フロー・マシンにおけるノードは、それらの動作を実行することができるように、トークンが十分な数の入力アーク上に現れるのを待ち、トークンが現れるとこれらのトークンを消費し、それらの出力アーク上に新しいトークンを生成する。例えば、2つのトークンの加算を実行するノードは、その双方の入力上にトークンが現れるまで待ち、これらの2つのトークンを消費し、それから結果(この場合、入力トークンのデータの合計)を、その出力アーク上に新しいトークンとして生成する。
CPUにおいて実行されるように、条件付き分岐によりデータ上で実行する異なる動作を選択するのではなく、データ・フロー・マシンは、条件付き分岐によりデータ・フロー制御ノードを介してデータを異なるノードに方向付ける。従って、データ・フロー・マシンは、特定の出力上に選択的にトークンを生成することができるノード(スイッチ・ノードと呼ばれる)、および、特定の入力上のトークンを選択的に消費することができるノード(併合ノードと呼ばれる)を有する。一般的なデータ・フロー制御ノードの他の例は、データ・フローから選択的にトークンを除去するゲート・ノードである。多くの他のデータ・フロー操作ノードもまた、可能である。
グラフにおける各ノードは、グラフにおける全ての他のノードから独立してその動作を潜在的に実行することができる。ノードがその適切な入力アーク上にデータを有するとすぐ、そして、その適切な出力アーク上に結果を生成する空間があれば、ノードはその動作を実行することができる(発火として知られている)。ノードは、他のノードが発火できるかどうかに関わらず、発火する。従って、制御フロー装置におけるような、ノードの動作が実行される特定の順序はない。データ・フロー・グラフにおける動作の実行の順序は、関連性がない。実行の順序は、例えば、発火することができる全てのノードの同時実行であることもできる。
上記のように、データ・フロー・マシンは、その設計により、通常3つの異なる分類に分けられる。静的データ・フロー・マシン、動的データ・フロー・マシン、および同期データ・フロー・マシン。
静的データ・フロー・マシンにおいて、対応するデータ・フロー・グラフにおける全てのアークは、全ての時点において単一のトークンのみを保持することができる。
動的データ・フロー・マシンにおいて、各アークは、受信ノードがトークンを受信する準備ができるのを待つ間、不特定数のトークンを保持することができる。このことにより、データ・フロー・マシンを設計する時には再帰深度が不明である再帰的手続きの構築が可能になる。このような手続きは、再帰において処理されているデータを逆にするかもしれない。このことは、再帰が終了した後に計算を実行する時、トークンのマッチングが間違っているという結果になるかもしれない。
上記の状況は、プロトコルにおける全てのトークンの通し番号を示すマーカを追加することで処理することができる。再帰の内側のトークンの通し番号は、連続的に監視され、トークンが再帰を抜ける時、再帰の外側のトークンとマッチしない限り、進むことができない。
再帰が末端再帰でない場合、再帰が通常の(ノイマン型の)プロセッサの使用により実行される場合にコンテキストがスタック上に記憶されるのと同様に、コンテキストは全ての再帰呼出しにおいてバッファに格納されなければならない。最後に、動的データ・フロー・マシンは、データ依存再帰を並行して実行することができる。
同期データ・フロー・マシンは、受信ノードが自身を準備している間トークンをアーク上で待機させる能力がなくても、動作することができる。代わりに、各ノードに対するトークンの生成と消費との間の関係は、前もって計算される。この情報をもって、どのようにノードを配置するかを決定し、同時にアーク上に存在するかもしれないトークンの数に関してアークに大きさを割り当てることができる。従って、各ノードが後続のノードが消費するのと同じ数のトークンを生成することを保証することができる。システムはそれから、後続のノードが常にデータを消費するので、全てのノードが常にデータを生成することができるよう設計することができる。欠点は、データ依存再帰のようなどんな不確定の遅延も、構成において存在することができないことである。
データ・フロー・マシンは、最も一般的には、従来のCPUにおいて実行されるコンピュータ・プログラムによって実施される。しばしばコンピュータのクラスタが使用され、あるいは何らかのプリント回路板上のCPUの配列が使用される。データ・フロー・マシンを使用する主な目的は、それらの並列処理を利用して実験的なスーパコンピュータを構築することである。データ・フロー・マシンをハードウェアに直接構築する多くの試みがなされてきた。このことは、特定用途向け集積回路(ASIC)においていくつかのプロセッサを作成することによって行われてきた。回路板上のプロセッサを使用することに対するこの方法の主な利点は、同じASIC上のプロセッサ間のより速い通信速度である。今日まで、計算処理のためにデータ・フロー・マシンを使用するどの試みも、商業的に成功していない。
書替え可能ゲートアレイ(FPGA)および他のプログラム可能論理デバイス(PLD)もまた、ハードウェア構築のために使用することができる。FPGAは、急いで再構成可能なシリコン・チップである。これらは、小さなランダム・アクセス・メモリ、通常、スタティック・ランダム・アクセス・メモリ(SRAM)のアレイに基づいている。各SRAMは、ブール関数のためのルックアップ・テーブルを保持し、従ってFPGAがどんな論理演算も実行することが可能となる。FPGAはまた、同様に構成可能な経路指定資ソースを保持し、信号がSRAMからSRAMへと渡ることを可能にしている。
シリコン・チップの論理演算をSRAMに割り当て、経路指定資ソースを構成することによって、FPGA表面上に適合するのに十分小さい任意のハードウェア構成を実現することができる。FPGAは、ASICと比較して、同じ広さのシリコン表面上に、かなりより少ない論理演算を実現することができる。FPGAの利点は、単にSRAMルックアップ・テーブルに新しい値を入れ、経路指定を変更することによって、任意の他のハードウェア構成に変更することができることである。FPGAは、任意のハードウェア構成を受け入れることができ、任意の他のハードウェア構成に非常に短時間(100ミリ秒より短い時間)で変更することができる、空のシリコン表面として見なすことができる。
他の一般的なPLDは、ヒューズ・リンクされていてもよく、従って永久的に構成されている。ヒューズ・リンクされたPLDのASICに対する主な利点は、構成が容易なことである。ASICを製造するためには、非常に高価で複雑な処理が要求される。対照的にPLDは、簡単なツールによって数分で構成することができる。ヒューズ・リンクされたPLDおよびFPGAの双方に対して、不利益のいくつかを克服することができる、PLDのためのいくつかの発展した技術がある。
一般に、FPGAをプログラムするためには、FPGAの販売者によって提供される位置および経路ツールを使用しなければならない。位置および経路ソフトウェアは通常、合成ソフトウェアからのネットリストか、あるいはハードウェア記述言語が直接合成するハードウェア記述言語(HDL)からの原始コードを受け取る。位置および経路ソフトウェアはそれから、プログラミング装置においてFPGAをプログラムするために使用される記述ファイルに、ディジタル制御パラメータを出力する。同様の技術が、他のPLDに対して使用されている。
集積回路を設計する場合、回路を状態機械として設計することが一般的な実現である。状態機械はハードウェアの構築を簡素化するフレームワークを提供するからである。状態機械は、データが先の計算によって多様なパターンで論理演算を通って流れる、データの複雑なフローを実現する場合に特に有用である。
状態機械はまた、ハードウェア構成要素の再使用を可能にし、従って回路の物理的な大きさを最適化する。このことにより、集積回路をより低いコストで製造することが可能になる。
専用ハードウェアを使用するデータ・フロー・マシンの従来の構築は、状態機械あるいは専用CPUを互いに接続することに基づいている。CPUは、状態機械の特別な場合である。これらはしばしば専用経路指定論理と、そしてある場合には専用メモリと接続される。より具体的には、データ・フロー・マシンの初期の設計において、状態機械は、データ・フロー・マシンの動作をエミュレートするために使用されている。さらに、初期のデータ・フロー・マシンはまた一般に、動的データ・フロー・マシンの形式であり、特殊トークン・マッチングおよび再順序付け構成要素がしばしば使用されている。
米国特許第5,021,947号は、上記による多重処理システムを開示し、このシステムは、3次元構造において512個までの要素プロセッサ(PE)を配置することによって、データ・フロー・マシンをエミュレートする。各PEは、プログラムおよびデータの記憶のためのそれ自身のCPUおよびローカル・メモリを有する完全なVLSI実現コンピュータを構成する。データは、処理されるべきデータ、同様に、宛先PEを識別するアドレスおよびPE内のアクターを識別するアドレスの双方を含むデータ・パケットの形式において、異なるPE間で転送される。さらに、PEを相互に接続する通信ネットワークが、信頼性が高いように設計され、誤転送されたメッセージに対する自動再試行、分散バス裁定、代替経路パケット経路指定、その他を有する。加えて、コンピュータのモジュラー性質により、スループットおよび信頼性要求の範囲を満足させるように、より多くの要素プロセッサを加えることができる。
従って、米国特許第5,021,947号によるエミュレートされたデータ・フロー・マシンの構造は非常に複雑であり、既にデータ・フロー・グラフに表されたデータ・フロー構造を十分に利用していない。また、マシン内を前や後ろに転送されているパケットの監視は、より余分な論理回路の追加を意味する。
ヴェルドチアその他による文献「同質のデータ・フロー・グラフ・モデルを使用する条件付および反復構造」もまた、同質のデータのフローを獲得するために配置された1組のプロセッサを含むデータ・フロー・マシンを開示している。データ・フロー・マシンは、「アルファ」と呼ばれる装置において実現され、「アルファ」は、同じ著者による文献「静的データ・フロー・モデルのためのアクター・ハードウェア設計」に開示されている。しかし、これらの文献によって開示されるマシンは、初期に確立されたデータ・フロー・グラフの構造に関して最適化されていない。つまり、多くのステップはデータ・フロー・グラフを確立した後に実行されるが、これらのステップは、コンピュータあるいは状態マシンの形式におけるハードウェア装置の使用により、マシンを実現に適するようにするものである。従って、これらの文献により開示されるマシンは、1組の同一のハードウェア装置(コンピュータ)を通る同質のデータのフローを容易にするが、計算効率に関して最適な方法において、ハードウェアにおいてどのようにデータ・フロー・グラフを実装するかは開示していない。
データ・フロー・マシンの形式において多数のプロセッサを有するスーパコンピュータを構築することによって、高度な並列処理を達成することができると期待されている。プロセッサが、多数のCPUあるいは多数のASICから成り、各々が多くの状態機械を含むようにする試みがなされてきた。初期のデータ・フロー・マシンの設計は、ASICにおける(通常プロセッサの形式における)状態機械の使用を含んでいたので、FPGAのようなプログラム可能論理デバイスにおいてデータ・フロー・マシンを実現する最も簡単な方法もまた、状態機械を使用することであった。全ての既知のデータ・フロー・マシンに対する一般的な特徴は、確立されたデータ・フロー・グラフのノードは、最終的なハードウェア実装における特定のハードウェア装置(一般に機能単位、FUとして知られている)に対応しないことである。代わりに、特定の時点において偶然使用可能となったハードウェア装置が、データ・フロー・グラフにおいて影響されたノードによって特定された計算を実行するために使用される。データ・フロー・グラフにおける特定のノードが1回以上実行される予定の場合、異なる機能単位が、ノードが実行されるたびに使用されてもよい。
さらに、従来のデータ・フロー・マシンは全て、データ・フロー・マシンの機能を実行するために、状態機械あるいはプロセッサの使用によって実装されてきた。各状態機械は、データ・フロー・グラフにおける任意のノードの機能を実行することができる。このことは、各ノードが任意の機能単位において実行されることができるようにするために必要である。各状態機械は任意のノードの機能を実行することができるので、現在実行しているノード以外の任意の他のノードに対して要求されるハードウェアは休眠状態となる。状態機械(トークン操作のための支援ハードウェアを有することもある)は、データ・フロー・マシンそれ自体の実現であることに留意されたい。データ・フロー・マシンがいくつかの他の手段によって実現され、偶然その機能ノードにおいて状態機械を含むようになったわけではない。
今日使用されているほとんどのプログラミング言語は、いわゆる命令型言語、例えば、ジャバ、フォートラン、およびベーシックのような言語である。これらの言語は、並列処理を緩めることなくデータ・フローとして書き換えることは不可能か、あるいは少なくとも非常に難しい。
代わりに、命令型言語ではなく機能言語を使用すると、データ・フロー・マシンの設計が簡単になる。機能言語は、参照透明性と呼ばれる特徴を呈することに特徴がある。このことは、直接の構成要素表現の意味あるいは値のみが、より大きい複合表現の意味を決定することにおいて重要であることを意味する。表現は、それらが同じ意味を有する場合そしてその場合のみ等しいので、参照透明性は、等しい副表現は、より大きい表現のコンテキストにおいて交換でき、等しい結果を得ることができることを意味する。
動作の実行が、出力データを提供する以外に影響を与える場合(例えば、動作の実行の間のディスプレイ上の読出し)、それは参照透明ではない。動作の実行から生ずる結果が、動作を実行しない場合の結果と同じではないからである。参照透明言語において書かれたプログラムへのあるいはからの全ての通信は、副作用(例えば、メモリ・アクセス、読出し、その他)と呼ばれる。
高レベル言語によるハードウェアの設計は一般的には望ましいが、FPGAの場合には特別な利点がいくつか存在する。FPGAは再構成可能であるので、単一のFPGAは、多くの異なるハードウェア設計を許容可能である。この機能を十分利用するためには、従来のハードウェア記述言語よりもより簡単な設計を特定する方法が必要である。ASICの設計においてはそう言えるか否か不明であるが、FPGAについては、高レベル言語の利益は、完成した設計の効果の面でコストを上回るとさえ言えるかもしれない。
国際特許第0159593号は、ディジタル・ハードウェア実装へのアルゴリズムの高レベルのソフトウェア・ベース記述のコンパイルを開示している。プログラミング言語のセマンティクスは、コンパイル・ツールの使用を通して翻訳され、コンパイル・ツールは、ソフトウェア記述を解析して制御およびデータ・フロー・グラフを生成する。このグラフはここで、最適化、変換、および注釈のために使用される中間形式である。結果としてのグラフはそれから、ハードウェア実装のレジスタ・トランスファ・レベルあるいはネットリスト・レベル記述のいずれかに翻訳される。個別の制御経路が、フロー・グラフにおけるノードがいつデータを隣接するノードに転送するかを決定するために使用される。並列処理は、制御経路およびデータ経路を分けることによって達成することができる。制御経路を使用することにより、「ウェーブフロント処理」を達成することができ、このことは、データが、制御経路によって制御されるウェーブフロントとして、実際のハードウェア実装を通って流れることを意味する。
制御経路の使用は、データ処理を実行している間、ハードウェアの一部のみを使用することができることを意味する。回路の残りの部分は、制御経路が新しいウェーブフロントを送り出すことができるように、最初のウェーブフロントがフロー・グラフを通って経過するのを待っている。
米国特許第6145073号は、予め設計され検査されたデータ駆動ハードウェア・コアを開示し、このコアは、単一のチップ上に大規模なシステムを作成するために組み立てられる。トークンは、1ビット作動可能信号および1ビット要求信号によって、専用接続を通してコア間を同時に転送される。作動可能−要求信号ハンドシェークは、トークン転送にとって必要十分である。また、接続されたコアの各々は、少なくとも有限状態機械の複雑さでなければならない。最後に、一般的な発火メカニズムの概念はないので、データのフローの条件付再方向付けは実行することができない。従って、どんなデータ・フロー・マシンもこのシステムと共に構築することはできない。むしろ、コア間のデータ交換のためのプロトコルは、最大限コア内においてパイプラインを保持することに焦点を当てている。
ミハイ・ブディウによる文献「特定用途向けハードウェア:CPUなしでの計算処理」は、汎用計算処理のためのアーキテクチャを開示し、このアーキテクチャは、特定用途向けハードウェアを作成するために再構成可能ハードウェアとコンパイラ技術を組み合わせている。各静的プログラム命令は、専用ハードウェア実装によって表されている。プログラムは、分割位相抽象機械(SAM)と呼ばれる小さなフラグメントに分解され、このSAMは、状態機械としてハードウェアに合成され、相互接続ネットワークによって組み合わされる。プログラムの実行の間、SAMは次の3つの状態のうちの1つであることができる:非活動、活動、あるいは受動。トークンは異なるSAM間で受け渡され、これらのトークンはSAMが実行を開始できるようにする。このことは、同時に数個のSAMのみが実際のデータ処理を実行できることを意味し、残りのSAMは、トークンが実行を可能にするまで待機している。この手続きにより、低電力消費が達成されるが、同時に、計算処理能力は低下する。
本発明は、データ処理システムの性能を向上させるための方法を提供しようとするものである。
より具体的には、本発明の目的は、データ・フロー・マシンをハードウェアにおいて実装し、超並列処理を獲得することによって、システムの計算能力を増加させることである。
本発明の他の目的は、使用可能なハードウェア資源の使用を改善すること、つまり、使用可能な論理回路(ゲート、スイッチ、その他)のより大きい部分を同時に使用することができるようにすることである。
本目的は、高レベル原始コード仕様からディジタル論理の記述を生成するための方法によって達成される。本方法において、原始コード仕様の少なくとも一部は、少なくとも1つの入力あるいは1つの出力を有する機能ノード、および機能ノード間の相互接続を示す接続を含む、多次元有向グラフ表現にコンパイルされる。さらに、ハードウェア構成要素が、グラフの各機能ノードに対して定義され、ここでハードウェア構成要素は、機能ノードによって定義される機能を表す。追加ハードウェア構成要素が、機能ノード間の各接続に対して定義され、ここで追加ハードウェア構成要素は、第1の機能ノードから第2の機能ノードへのデータの転送を表す。最後に、グラフの機能ノードの各々に対する発火規則が定義され、ここで発火規則は、機能ノードがその出力においてデータを提供しその入力においてデータを消費する条件を定義する。
また、本発明の目的は、異なる機能単位間のデータのフローを可能にするために専用制御経路を使用することにより、従来技術のデータ・フロー・マシンにおける計算処理効率における制限を克服することである。加えて、本発明によるハードウェア実装は、外部メモリとの頻繁な通信を必要とすることなく、データ・フロー・マシンにおいて効率的にデータを記憶する結果、従来技術の解決策と比較して計算処理能力を増加させることができる。
本発明は、従って、専用相互接続CPUあるいは高水準データ交換プロトコルを必要とせずに、効率的な方法で、データ・フロー・グラフによって記述される機能をハードウェアに実装する。本発明は、データ・フロー・マシンとRTL(レジスタ・トランスファ・レベル)論理との間のセマンティクスにおける類似性を最大限に使用する。つまり、組合せ論理がCPUの代わりに使用され、ハードウェア・レジスタがRAM(ランダム・アクセス・メモリ)、バックプレーン、あるいはイーサネット(登録商標)・ネットワークの代わりに使用される。
本発明のさらなる目的は、高レベル・プログラミング言語記述からのシリコン・ハードウェアの設計を可能にすることである。高レベル・プログラミング言語とは、特定の型のハードウェアにおけるアルゴリズムの実装ではなく、それ自体におけるアルゴリズムの記述に焦点を当てているプログラミング言語である。高レベル・プログラミング言語と、その言語で書かれたプログラムから自動的に集積回路記述を設計する機能があれば、集積回路の設計のためにソフトウェア工学技術を使用することが可能になる。このことは、低コストであるいはコストをかけずに、多くの異なるハードウェア設計と共に再構成することのできる、FPGAおよび他の再構成可能PLDにとって特に有益である。
多くの異なる、容易に作成できるハードウェア設計から利益を受けるのとは別に、FPGAおよび他のPLDは、高レベル言語からのハードウェア記述の自動設計から効率における利益を受けることができる。システムが大容量並列処理を利用することができれば、可能な限り大部分のPLDを有意義な演算で満たすことができ、性能が非常に高くなる。このことは、通常できるだけ小さな設計を作成することに焦点を当てている従来のハードウェア設計とは対照的である。
本発明によって、機能ノードを含むグラフ表現からディジタル論理回路を実装するためのディジタル制御パラメータを生成する方法が提供される。機能ノードは、少なくとも1つの入力あるいは少なくとも1つの出力、および機能ノード間の相互接続を示す接続を含む。その方法は、少なくとも第1および第2の機能ノードについての組み合わされたハードウェア構成要素を特定するディジタル制御パラメータを定義することを含む。そのディジタル制御パラメータは、第1および第2の機能ノードの両方の機能を実行するための組み合わされたハードウェア構成要素を特定する。また、その方法は、第1および第2の機能ノードの組み合せから得られるハードウェア構成要素についての発火規則を特定するディジタル制御パラメータを定義することを含む。
生成されたディジタル制御パラメータは、第1の機能ノードの少なくとも1つの出力と第2の機能ノードの少なくとも1つの入力との間の直接接続を特定してもよい。
その方法は、第1および第2の機能ノードの発火規則と異なる組み合わされたハードウェア構成要素についての発火規則を特定するディジタル制御パラメータを定義することを含んでよい。
グラフ表現は、高レベル原始コードの仕様から生成されてもよい。
本発明によって、機能ノードを含むグラフ表現からディジタル論理回路を実装するためのディジタル制御パラメータを生成する装置が提供される。機能ノードは、少なくとも1つの入力あるいは少なくとも1つの出力、および機能ノード間の相互接続を示す接続を含む。その装置は、少なくとも第1および第2の機能ノードについての組み合わされたハードウェア構成要素を特定するディジタル制御パラメータを定義するよう適合される。ディジタル制御パラメータは、第1および第2の機能ノードの両方の機能を実行するための組み合わされたハードウェア構成要素を特定する。また、その装置は、第1および第2の機能ノードの組み合わせから得られるハードウェア構成要素についての発火規則を特定するディジタル制御パラメータを定義するよう適合される。
その装置は、第1の機能ノードの少なくとも1つの出力と第2の機能ノードの少なくとも1つの入力との間の直接接続を特定するディジタル制御パラメータを定義するよう適合されてもよい。
その装置は、第1および第2の機能ノードの発火規則と異なる組み合わされたハードウェア構成要素についての発火規則を特定するディジタル制御パラメータを定義するよう適合されてもよい。
本発明によって、ディジタル・コンピュータの機能を有する電子デバイスのメモリに直接読み込み可能なコンピュータ・プログラム製品が提供される。そのコンピュータ・プログラム製品は、少なくとも1つの入力あるいは少なくとも1つの出力を含む機能ノードを含むグラフ表現からディジタル論理回路を実装するためのディジタル制御パラメータ、および機能ノード間の相互接続を示す接続を生成し、少なくとも第1および第2の機能ノードについての組み合わされたハードウェア構成要素を特定するディジタル制御パラメータを定義するためのソフトウェア・コード部分を含む。また、そのコンピュータ・プログラム製品は、第1および第2の機能ノードの組み合わせから得られるハードウェア構成要素についての発火規則を特定するディジタル制御パラメータを定義するためのソフトウェア・コード部分を含む。その製品は、電子デバイスによって実行される。
そのコンピュータ・プログラム製品は、コンピュータ読み取り可能な媒体上に実装されてもよい。
本発明によって、データ・フロー・マシンにおける第1および第2の相互接続されたハードウェア構成要素の起動を有効にする方法が提供される。その方法は、第1のディジタル・データ要素を伴う第1のハードウェア構成要素を提供することを含む。第1のハードウェア構成要素における第1のディジタル・データ要素の提供によって、第1のハードウェア構成要素の起動が有効になる。また、その方法は、第1のハードウェア構成要素から第2のハードウェア構成要素への第1のディジタル・データ要素の転送を含む。第2のハードウェア構成要素における第1のディジタル・データ要素の受け取りによって、第2のハードウェア構成要素の起動が有効になり、第1のハードウェア構成要素からの第1のディジタル・データ要素の引渡しにより第1のハードウェア構成要素の起動が無効になる。
第1のハードウェア構成要素は、第1のディジタル・データ要素の引渡し後に第2のディジタル・データ要素を提供されてもよい。
ディジタル・データ要素は、第1のハードウェア要素内に生成されてもよい。
ディジタル・データ要素は、離れたハードウェア要素内に生成され、第1のハードウェア構成要素へ転送されてもよい。
ディジタル・データ要素は、第2のハードウェア構成要素から引渡され、第1のハードウェア構成要素へ戻されてもよい。
本発明によって、第1および第2の相互接続されたハードウェア構成要素を含むデータ・フロー・マシンが提供される。第1のハードウェア構成要素は、第1のディジタル・データ要素を提供される。データ・フロー・マシンは、第1のハードウェア構成要素内に第1のディジタル・データ要素が存在すると、起動を有効にされるよう適合される。第1のハードウェア構成要素は、第1のディジタル・データ要素を第1のハードウェア構成要素から第2のハードウェア構成要素へ転送するよう適合される。第2のハードウェア構成要素は、少なくとも第1のディジタル・データ要素の受け取りの結果として起動を有効にされるよう適合される。第1のハードウェア構成要素は、ディジタル・データ要素の引渡しの結果として起動を無効にされるよう適合される。
第1のハードウェア構成要素は、第1のディジタル・データ要素の第2のハードウェア構成要素への転送の後に、第2のディジタル・データ要素を提供されるよう適合されてもよい。
第1のハードウェア構成要素は、ディジタル・データ要素を生成するよう適合されてもよい。
第1のハードウェア構成要素は、離れたハードウェア構成要素からディジタル・データ要素を受け取るよう適合されてもよい。
ディジタル・データ要素は、第2のハードウェア構成要素から引き渡され、第1のハードウェア構成要素へ戻されてもよい。
データ・フロー・マシンは、ASIC、FPGA、CPLD、あるいは他のPLDの手段によって実装されてもよい。
本発明によって、データ・フロー・マシンにおけるデータの完全性を保証する方法が提供される。データ・パスがデータ・フロー・マシン内に提供されるように構成される少なくとも第1および第2のハードウェア構成要素へ接続された少なくとも1つの引き止め線が、引き止め線上で引き止め信号が有効である場合に、処理サイクルの間、第1のハードウェア構成要素から第2のハードウェア構成要素へのデータ・パスにおいて進行するデータのフローを中断するために提供される。その方法は、第1のオン・チップ・メモリ要素の第1の入力において第2のハードウェア構成要素から引き止め信号を受け取ることと、第2のオン・チップ・メモリ要素の第1の入力において第1のハードウェア構成要素からデータを受け取ることと、少なくとも1つの処理サイクルについて第1および第2のオン・チップ・メモリ要素において受け取ったデータおよび受け取った引き止め信号をバッファリングすることと、第1のオン・チップ・メモリ要素の第1の出力において第1のハードウェア構成要素へバッファされたデータを提供することと、第2のオン・チップ・メモリの第1の出力において第2のハードウェア構成要素へバッファされたデータを提供することと、を含む。
本発明によって、データ・フロー・マシン内のデータの完全性を保証する装置が提供される。データ・パスがデータ・フロー・マシン内に提供されるように構成される少なくとも第1および第2のハードウェア構成要素へ接続された少なくとも1つの引き止め線が、引き止め線上で引き止め信号が有効である場合に、処理サイクルの間、第1のハードウェア構成要素から第2のハードウェア構成要素へのデータ・パスにおいて進行するデータのフローを中断するために提供される。その装置は、第1のオン・チップ・メモリ要素の第1の入力において第2のハードウェア構成要素から引き止め信号を受け取り、第2のオン・チップ・メモリ要素の第1の入力において第1のハードウェア構成要素からデータを受け取り、少なくとも1つの処理サイクルについて第1および第2のオン・チップ・メモリ要素において受け取ったデータおよび受け取った引止め信号をバッファリングし、第1のオン・チップ・メモリ要素の第1の出力において第1のハードウェア構成要素へバッファされたデータを提供し、第2のオン・チップ・メモリの第1の出力において第2のハードウェア構成要素へバッファされたデータを提供するよう適合されてもよい。
本発明によって、少なくとも1つの入力あるいは少なくとも1つの出力を有する機能ノードと、機能ノード間の相互接続を示す接続とを含むグラフ表現からディジタル論理回路を実装するためのディジタル制御パラメータを生成する方法が提供される。その方法は、機能ノードあるいは機能ノード間の接続についてのハードウェア構成要素の少なくとも第1の組を特定するディジタル制御パラメータを定義することを含む。また、その方法は、データ要素が第1のハードウェア構成要素の組に入るのと同じ順序で、第1のハードウェア構成要素の組から削除されるように、少なくとも第1のハードウェア構成要素の組から削除されるデータ要素を並べる、少なくとも1つの再順序付けハードウェア構成要素を特定するディジタル制御パラメータを定義する。
その方法は、機能ノード間の少なくとも1つの接続について並列に独立してアクセスされ得るオン・チップ・メモリ要素を特定するディジタル制御パラメータを定義することを含んでもよい。
その方法は、機能ノード間の少なくとも1つの接続についてディジタル・レジスタを特定するディジタル制御パラメータを定義することを含んでもよい。
その方法は、機能ノード間の少なくとも1つの接続について少なくとも1つのフリップフロップを特定するディジタル制御パラメータを定義することを含んでもよい。
その方法は、機能ノード間の少なくとも1つの接続について少なくとも1つのラッチを特定するディジタル制御パラメータを定義することを含んでもよい。
本発明によって、少なくとも1つの入力あるいは少なくとも1つの出力、および機能ノード間の相互接続を示す接続を有する機能ノードを含むグラフ表現からディジタル論理回路を実装するためのディジタル制御パラメータを生成するためのソフトウェア・コードの部分を含む、ディジタル・コンピュータ機能を有する電子デバイスのメモリへ直接読み込み可能なコンピュータ・プログラム製品が提供される。その方法は、機能ノードあるいは機能ノード間の接続について少なくとも第1のハードウェア構成要素の組を特定するディジタル制御パラメータを定義することを含む。また、その方法は、製品が電子デバイスによって実行される際、データ要素が第1のハードウェア構成要素の組へ入るのと同じ順序で、第1のハードウェア構成要素の組から削除されるように、少なくとも第1のハードウェア構成要素の組から削除されたデータ要素を並べる少なくとも1つの再順序付けハードウェア構成要素を特定するディジタル制御パラメータを定義することを含む。
本発明によって、少なくとも1つの入力あるいは少なくとも1つの出力、および機能ノード間の相互接続を示す接続を有する機能ノードを含むグラフ表現からディジタル論理回路を実装するディジタル制御パラメータを生成するための装置が提供される。その装置は、機能ノードあるいは機能ノード間の接続についての少なくとも第1のハードウェア構成要素の組を特定するディジタル制御パラメータを定義するよう適合される。また、その装置は、データ要素が第1のハードウェア構成要素の組に入るのと同じ順序で第1のハードウェア構成要素の組から削除されるように、少なくとも第1のハードウェア構成要素の組から削除されるデータ要素を並べる、少なくとも1つの再順序付けハードウェア構成要素を特定するディジタル制御パラメータを定義するよう適合される。
本発明によって、データ・フロー・マシンが提供される。そのデータ・フロー・マシンは、データ転送を実行する第1のハードウェア構成要素の組と、データ要素が第1のハードウェア構成要素の組に入るのと同じ順序で第1のハードウェア構成要素の組から削除されるように少なくとも第1のハードウェア構成要素から削除されるデータ要素を並べる少なくとも1つの再順序付けハードウェア構成要素とを含む。
本発明の他の目的、特徴および利点は、以下の好ましい実施例の詳細な説明からより明白となるであろう。
本発明の好ましい実施例は、付随する図面を参照しながら以下に説明される。
一般に、原始コード・プログラムのデータ・フロー・グラフへの変換は、データ・フロー解析によって行われる。データ・フロー解析を実行するための単純な方法は次のようなものである。プログラムの全ての出力から開始する。各出力の直接のソースを見つける。それが動作である場合、動作をノードと置き換え、アークと共に出力に加える。ソースが変数である場合、変数をアークと置き換え出力に結合させる。完全に特定された入力を欠く全てのアークおよびノードに対して繰り返す。
図1aは、それ自体知られているデータ・フロー・グラフを示している。解りやすくするために、本文章において用語ノードは、データ・フロー・グラフにおける機能ノードを示すよう使用される。3つの処理レベルが本図において示されている。最上部ノード101、102、103は、それらの入力において、1つあるいは複数のソースからの入力データを受信し、このデータはグラフを通って流れる間に処理される。最上部ノードによって実行される実際の数学的、論理的あるいは手続き的機能は、データ・フロー・グラフが起ソースとする原始コードに依存するので、各実装に対して特定である。例えば、第1のノード101は、2つの入力からのデータの単純な加算を実行してもよく、第2のノード102は、第2の入力において受信されたデータからの第1の入力において受信されたデータの減算を実行してもよく、第3のノード103は、例えば、その入力において受信されたデータの2による固定乗算を実行してもよい。各ノードに対する入力の数、各ノードにおいて実行される実際の処理、その他は、もちろん、異なる実装に対して異なり、上記の例に制限されない。1つのノードは、例えばより複雑な計算を実行してもよく、あるいは外部メモリにアクセスしさえしてもよい。このことは以下に説明される。
データは、第1のノード・レベルから第2のノード・レベルに流れていて、この場合、ノード101および102からのデータは、ノード101および102の出力からノード104の入力に転送される。上記の説明に従い、ノード104は、その入力において受信した情報に基づき特定のタスクを実行する。
第2のレベルにおける処理の後、データはノード104の出力からノード105の第1の入力に転送される。ノード105は第3のレベルに位置する。図1から解るように、レベル1におけるノード103の出力からのデータは、ノード105の第2の入力において受信される。ノード103と105との間には第2のレベルのノードは存在しないという事実は、ノード103からのデータは、ノード105の第1の入力においてデータが使用可能になる前に、ノード105の第2の入力において使用可能になることを意味する(各ノードにおいて等しい組合せ遅延があると仮定する)。この状況を効率的に処理するために、各ノードは、ノードがその出力においてデータを提供する条件を定義する、発火規則を備える。
より具体的には、発火規則は、データ・フロー・グラフにおけるデータのフローを制御するメカニズムである。発火規則を使用することにより、データがノードの機能により変換されている間、データはノードの入力から出力に転送される。ノードの入力からのデータの消費は、その入力において使用可能なデータが本当にある場合にのみ起こることができる。相応して、経路をふさいでいる先の計算からのデータが無い場合のみ、データが出力において作成されることができる(つまり、後続のノードは先のデータ項目を消費していなければならない)。しかし、何らかの場合には、古いデータが経路をふさいでいても、出力においてデータを作成することが可能である。出力における古いデータはその場合、新しいデータに置き換えられる。
一般的な発火規則に対する仕様は通常、以下の条件を含む。
1)ノードが入力データを消費するための、ノードの各入力に対する条件
2)ノードが出力においてデータを作成するための、ノードの各出力に対する条件
3)ノードの機能を実行するための条件
1)ノードが入力データを消費するための、ノードの各入力に対する条件
2)ノードが出力においてデータを作成するための、ノードの各出力に対する条件
3)ノードの機能を実行するための条件
条件は通常、入力データの値、入力あるいは出力における有効データの存在、入力に適用された機能の結果、あるいは機能の状態、に依存するが、原則として、システムが使用可能な任意のデータに依存してもよい。
システムのノード101から105に対する一般的な発火規則を確立することにより、専用制御経路を必要とすることなく、多様な型のプログラムを制御することが可能になる。しかし、発火規則により、いくつかの特別な場合には、制御フローを実現することが可能である。他の特別な場合は、発火規則のないシステムであり、ここで全てのノード101から105は、ノード101から105の全ての入力においてデータが使用可能である場合にのみ動作する。
発火規則の機能の特定の例は、併合ノードを通して挙げることができる。このノードにより、制御フローを必要とせずに、データのフローを制御することが可能である。併合ノードは通常、2つのデータ入力を有し、そのうちの1つからデータが選択される。さらに併合ノードは、どのデータ入力からデータを取り出すかを選択するために使用される制御入力を有する。最後に併合ノードは、選択された入力データ値が配信される1つのデータ出力を有する。
例えば、ノードが2つの入力、TおよびFを有すると仮定する。ノードを制御している条件は入力C上で受信され、結果は出力Rにおいて提供される。以下の発火規則は、1つの入力においてのみデータが使用可能であっても、ノードの出力においてデータを作成する。この場合、例えばC=1であれば、入力Fにおいてデータが存在する必要はない。つまり、ノードの入力においてデータを消費するための条件は、以下のものである。
(C=1 AND T=x) OR (C=0 AND F=x)
ここで、xは有効値の存在を意味する。
(C=1 AND T=x) OR (C=0 AND F=x)
ここで、xは有効値の存在を意味する。
さらに、ノードの出力においてデータを提供するための条件は、
(C=1 AND T=x) OR (C=0 AND F=x)
であり、ノードの関数は、
R = IF (C==1) T ELSE F
である。
(C=1 AND T=x) OR (C=0 AND F=x)
であり、ノードの関数は、
R = IF (C==1) T ELSE F
である。
データ・フローを制御するための他の型のノードは、スイッチである。スイッチ・ノードは通常、2つの出力TおよびF、1つのデータ入力D、および1つの制御入力Cを有する。ノードは、データがデータ入力および制御入力において使用可能な場合、その出力の1つにおいてデータを提供する。入力からのデータを消費するための条件は、
C=x AND D=x
であり、出力においてデータを提供するための条件は、
T:C=1 AND D=x
F:C=0 AND D=x
であり、ノードの関数は、
T = IF (C==1) D
F = IF (C==0) D
である。
C=x AND D=x
であり、出力においてデータを提供するための条件は、
T:C=1 AND D=x
F:C=0 AND D=x
であり、ノードの関数は、
T = IF (C==1) D
F = IF (C==0) D
である。
上記の推論に従い、全ての種類の可能性のあるノードに対する発火規則を確立することが可能である。例えば、真ゲート(1つのデータ入力D、1つの制御入力C、1つの出力R、および関数R=IF(C==1)D)、非決定性優先権併合(2つのデータ入力D1およびD2、1つの出力R、および関数R=IF(D1)D1 ELSE IF(D2)D2)、加算(2つのデータ入力D1およびD2、1つの出力R、および関数R=D1+D2)、複製(1つのデータ入力D、1つの制御入力C、1つの出力R、および関数R=D)、そして、ブールストリーム(入力なし、1つの出力R、および関数
R = IF (state==n) set state=0,return 1
ELSE increment state,return 0
である。
R = IF (state==n) set state=0,return 1
ELSE increment state,return 0
である。
しかし、ノードの機能とは独立して、その入力においてデータ処置した後、ノード105は、その出力において処理しているデータの最終値を提供する。この場合、5つの入力におけるデータは単一の出力におけるデータを作成した。
データ・フロー・マシンのセマンティクスをよく調べると、これらのセマンティクスは、ディジタル回路が動作する方法、特にレジスタ・トランスファ・レベル(RTL)において動作する方法に非常に似ていることが解る。データ・フロー・マシンにおいて、データはアーク上に存在し、データ上に何らかの動作を実行する機能ノードによって、1つのアークから他のアークに渡される。ディジタル回路においては、データはレジスタに存在し、データ上に何らかの機能を実行する組合せ論理によって、レジスタ間を渡される。データ・フロー・マシンのセマンティクスとディジタル回路の動作との間にこのような緊密な類似性があるので、データ・フロー・マシンを直接ディジタル回路に実装することが可能である。このことは、データ・フロー・マシンを通るデータの伝播は、データ・フロー・マシンの動作を実行するための状態機械のようなシミュレーション装置を必要とせずに、ディジタル回路内に実装することができることを意味する。代わりに、データ・フロー・マシンは、ノードを組合せ論理に置き換え、アークをレジスタあるいは独立して並行してアクセスされることができる他の高速記憶素子に置き換えることによって、直接実装することができる。
このことの利点は主に、実行速度である。このような実装は、プロセッサあるいは他の状態機械を通した実装よりも、より高いレベルの並列処理を使用することができるであろう。それはより容易にパイプラインすることができ、並列処理はより細かい細分性を有するレベルとなることができる。データ・フロー・マシン自体を実装するために状態機械の使用を避けても、データ・フロー・マシンのノードが状態機械を含むことはできることに留意されたい。
本発明の代替記述は、特殊なレジスタ−ノードがデータ・フロー・グラフの機能ノード間に挿入され、エッジは単純なワイヤとして実現されることである。解りやすくするために、用語は、機能ノード、レジスタ・ノードおよびエッジを使用するのではなく、ノードは組合せ論理として、エッジはレジスタとして、本発明を説明する。
図2は、本発明の第1の単純な実施例を示している。より具体的には、本図は、図1のデータ・フロー・グラフのハードウェア実装を概略的に示している。図1の機能ノード101から105は、ノード201から205に置き換えられ、これらのノードは図1のデータ・フロー・グラフにおいて定義される数学あるいは論理機能を実行する。この機能は、組合せ論理によって実行することができるが、例えば状態機械あるいは何らかのパイプライン装置によっても実行することができる。
図2において、ワイヤおよびレジスタ206から215あるいはフリップフロップのような高速並列データ記憶ハードウェアが、図1の異なるノード間の接続に置き換わっている。ノード201から205の出力において提供されたデータは、他のノード201から205への即時あるいは後の転送のために、レジスタ206から215に格納される。本図から理解されるように、レジスタ213により、ノード201および202からのデータがノード204において処理されている間、ノード203からの出力値を格納することが可能となる。異なるノード201から205間で使用可能なレジスタ206から215がない場合、いくつかのノードの入力におけるデータは、同じ経路上の先行ノードにおける異なる組合せ遅延のために、不安定(値が変化する)となるかもしれない。
例えば、第1の組のデータが(レジスタ206から210を介して)ノード201から203の入力において提供されたと仮定する。ノードにおける処理の後、データは、ノード201から203の出力において使用可能となる。ノード201および202はそれからデータをノード204に提供し、一方ノード203はデータをノード205に提供する。ノード205はまたノード204からのデータも受信するので、データは、ノード205に転送される前にノード204において処理されなければならない。データがノード204を通って伝播される前に、新しいデータがノード201から203の入力において提供された場合、ノード203の出力は変わったかもしれない。従って、ノード205の入力におけるデータは、もはや正しくない。つまり、ノード204によって提供されるデータは、ノード205によって提供されるデータと比較して、より前の時点からのものである。
上記の推論は単純化された推論である。実際においては、異なるノードに提供されるデータが正しいことを保証するために、高度クロッキング方式、通信プロトコル、追加ノード/レジスタ、あるいは追加論理回路が必要である。問題に対する最も簡単な解決策が図3に示され、ここでは、追加ノード316およびその関連するレジスタ317がデータ経路中に挿入されている。ノード316は、NOP(ノー・オペレーション)を実行し、従ってその入力において提供されるデータを変更しない。ノード316を挿入することによって、グラフの全てのデータ経路において同じ長さが得られる。その結果、203と205との間のアークが、今や2つの構成要素を保持することができる。
他の方法が図4aに示され、ここで各ノード401は、全ての時点において正しいデータを提供するための追加信号線を備えている。第1の追加線は「有効」信号402を運び、この信号は、先行ノードがそれらの出力において安定したデータを有することを示す。同様にノード401は、ノード401の出力におけるデータが安定したものである場合、「有効」信号403をデータ経路における後続のノードに提供する。この手続きにより、各ノードは、その入力におけるデータの状態を決定することができる。
さらに、第2の追加線は「機能停止」信号404を運び、この信号は、現行ノード401がその入力においてどんな追加データも受信する準備ができていないことを先行ノードに示す。同様に、ノード401もまた、「機能停止」線405をデータ経路における後続ノードから受信する。機能停止線を使用することにより、特定の経路におけるデータのフローを一時的に停止することが可能である。このことは、ノードが、ある時間事例において、ループあるいはメモリ・アクセスのような時間のかかるデータ処理を実行し、不確定な遅延を生ずる場合に重要である。機能停止信号の使用は単に、本発明の1つの実施例である。選択されたプロトコルにより、いくつかの他の信号を使用することができる。例として、「消費済みデータ」、「受信可」、「応答」、あるいは「非応答」信号、および高あるいは低信号ではなくパルスあるいは遷移に基づく信号、がある。他の信号方式もまた可能である。「有効」信号の使用により、アーク上にデータが存在することあるいは存在しないことを表すことができる。従って、同期データ・フロー・マシンを構築することが可能なだけでなく、静的および動的データ・フロー・マシンも構築することができる。「有効」信号は必ずしも専用信号線として実現される必要はなく、「ヌル」値を表すための特別なデータ値を選択するような、いくつかの他の方法においても実装することができる。機能停止信号に関しては、多くの他の可能な信号方式がある。解りやすくするために、本文書の残りの部分では、機能停止および有効信号にのみ言及する。本発明の機能を他の信号方式に拡張することは簡単である。
特定の機能停止信号があれば、より効率を高めることができる。機能停止信号により、ノードは、下位のアークがその時点において一杯であっても、次のクロックサイクルにおいて出力トークンを受け取ることができることを知ることができる。機能停止信号がなければ、ノードは、発火する前に、下位のアーク上に有効データがなくなるまで待たなければならない。このことは、アークは、少なくとも1サイクルおきに空であることを意味し、従って効率が悪くなる。
図4bは、ノード401に対して、有効402、403および機能停止404、405信号を生成するための論理回路の1例を示している。本図に示される回路は、データが全ての入力上で使用可能な場合に発火するノードにおいて使用される。一般に、発火規則はより複雑であってもよく、個別のノード401の機能に従って確立されなければならない。
図4cは相応して、データ・フロー・マシンにおけるノード間のレジスタ406において使用される論理回路の1例を示している。この回路は、宛先ノードがまだデータを受け取る準備ができていない場合、レジスタがそのデータを保持し、このことをソースノードに信号を送って知らせることを保証する。回路はまた、レジスタが空の場合、あるいは宛先ノードがレジスタの現在の内容を受け取ろうとしている場合、新しいデータを受け取る。本図においては、解りやすくするために、1つのデータ入力407および1つのデータ出力408のみが示されている。しかし、入力および出力の実際の数は、システムのバス幅(つまり、トークンが何ビット幅であるか)によることを強調しておく。
複合データ・フロー・マシンの場合において、機能停止線は、信号伝播速度と比較して非常に長くなるかもしれない。このことは、機能停止信号が、機能停止される必要がある経路にある全てのノードに到達せず、結果としてのデータが失われる(つまり、まだ処理されていないデータが新しいデータによって上書きされる)という結果になるかもしれない。
この状況を解決するためには2つの一般的な方法がある。1つの方法は、機能停止信号伝播経路を非常に注意深く均衡がとれるようにし、機能停止信号が全ての目的レジスタに時間に間に合うように到達することを保証することである。他の方法は、先入れ先出しバッファを停止可能なブロックの後に置き、ブロック内の機能停止信号の使用を完全に避けることである。代わりに、先入れ先出しが、データがパイプラインを出る時にパイプライン・データを収集するために、使用される。前者の解決策は、大規模なパイプラインされたブロックのために実装するには非常に難しく時間がかかる。後者は、ブロック内に存在する可能性のある全ての組のデータを保持することができる大きなバッファを必要とする。
この限られた信号伝播速度という問題を解決するより良い方法は、図6に示される「機能停止カッタ」と呼ばれる特徴による。機能停止カッタは基本的に、後続のノードから機能停止線を受信し、それを1サイクル遅らせるレジスタである。このことは、その点での機能停止信号の組合せ長をカットする。機能停止カッタが有効な機能停止信号を受信すると、それは先行ノードからのデータを1処理サイクルの間バッファに入れ、同時に、機能停止信号を同じ分遅らせる。機能停止信号を遅らせ入力データをバッファに入れることにより、非常に長い機能停止線が使用された場合であっても、データは失われないことが保証される。
機能停止カッタは、データ・ループ、特にパイプラインされたデータ・ループの実現を非常に簡単にすることができる。この場合、データのフローを制御するための多様なプロトコルは、機能停止信号が、ループを通るデータと同じ経路をしばしば逆にとることを要求する。このことは、機能停止信号に対する組合せループを生成する。機能停止カッタをループ内に置くことによって、このような組合せループを避けることができ、そうでなければ実現が困難あるいは不可能であろう多くのプロトコルが可能となる。
最後に、機能停止カッタは、データ・フロー・マシンにおけるデータ伝播の観点からは透過である。このことは、機能停止カッタを、自動的に必要な場所に追加することができることを意味する。
図5aは、本発明のさらに他の実施例を示している。ここで、グラフにおけるデータ経路は、ノード併合により等しくされている。グローバル・クロック信号を使用する設計に対しては、可能な限り高いクロック周波数は、最も遅い処理装置によって決定される。このことは、より高い周波数において動作する能力を有する全ての処理装置が、最も遅い装置によって設定される周波数において動作するよう制限されることを意味する。この理由により、どの装置も他の装置を遅くすることがないように、等しいあるいはほぼ等しい大きさの処理装置を獲得することが望ましい。グローバル・クロック信号を使用しない設計に対してであっても、分岐した計算における2つのデータ経路が等しい長さを持つ、つまり各データ経路に存在するノードの数が同じであることは有益である。データ経路が等しい長さであることを保証することによって、2つの分岐における計算が同じ速度で実行される。
図5aに見られるように、図3の2つのノード304および305は、1つのノード504に併合されている。上記のように、このことは、異なるデータ経路の長さを等しくするために、あるいは設計の全体的な処理速度を最適化するために行ってもよい。
ノード併合は、いくつかのノード間のレジスタを除去することによって実行される。ここで、併合されたノードがより大きくなるにつれ、ノードの数は減少する。選択されたノードを組織的に併合することにより、ノードの組合せ深度は実質的に等しくなり、異なるノード間の処理速度は等しくされる。
ノードが併合されると、それらの個別の機能もまた併合される。このことは、異なる論理素子を中間レジスタ無しに接続することによって行われる。ノードが併合されると、要求された場合にノードがそれらの出力においてデータを提供するために、新しい発火規則が決定されなければならない。
より具体的には、図5bに示されるように、2つのノード507、508を併合する場合、新しいノード509は、元のノードが有していた入力および出力アークの数から、組み合わされた2つのノード507、508を接続していたアークを引いたものと同じ数の入力および出力アークを有するよう作成される。上記のように、加算、乗算、等のような基本的な機能ノードに対して、発火規則は、全ての入力上にデータがある場合に発火し、全ての出力はデータを受信するために開放されている(以下にnm発火規則と呼ばれる発火規則)。2つのこのようなノード507、508を併合した結果、3つの入力および1つの出力を有する新しいノード509ができる。加算からの2つの入力、乗算からの2つの入力、および2つのノード間の接続において使用される1つの入力は、併合されたノードに対する3つの入力となる。加算からの1つの出力、乗算からの1つの出力、および2つのノードを接続するのに使用される1つの出力は、併合されたノードからの1つの出力となる。併合されたノードに対する発火規則は、発火するためにその3つの入力全てにおけるデータを要求する。実際、nm発火規則を有するノードのどんな併合も、それ自体nm発火規則を有するが、入力および出力の数は変化しているであろう。元の2つのノード507、508の機能は、先にそれらを接続していたアークに従って、第1の組合せブロックからの出力を、他の組合せブロックの入力に直接接続することによって併合される。先にノード間のアークを表していたレジスタは除去される。その結果、より大きい組合せブロックとなる。
従って、例えば算術関数を実行するノードのような、その入力において常にデータを要求し、その出力において常にデータを提供するノードに対して、併合されたノードに対する発火規則は、元のノードに対するものと同じものとなる。
上記のように、機能プログラミング言語の使用は、データ・フロー・マシンにおいて超並列処理を達成するために不可欠である。本発明により、副作用に関する問題は、トークンにより処理される。インスタンス・トークンと呼ばれる特殊なトークンを使用することにより、副作用への可能性のあるアクセスの数、同様に、これらのアクセスが発生する順序を制御することができる。
副作用を使用しようと欲する全てのノードは、通常のデータ入力とは別に、問題となっている副作用に関連するインスタンス・トークンのための専用データ入力を持たなければならない。インスタンス・トークンのためのデータ入力とは別に、それはまた、インスタンス・トークンのための出力も持たなければならない。インスタンス・トークンのためのデータ経路は、データ・フロー・マシンにおける他のデータ経路として機能する。つまり、ノードは、その特定の動作を実行することができる前に、全ての適切な入力上にデータを持たなければならない。
副作用へのアクセスを必要とするノードに対する発火規則は、ノードがそのインスタンス・トークン入力上にデータ(つまり、インスタンス・トークン自体)を持たなければならないということである。副作用へのアクセスが完了すると、ノードはその出力においてインスタンス・トークンを解放する。この出力は次ぎに、同じ副作用へのアクセスを必要とする後続のノードのインスタンス・トークン入力に接続されてもよい。この手続きにより、インスタンス・トークン経路が、特定の副作用へのアクセスを必要とする全てのノード間で確立される。インスタンス・トークン経路は、ノードが副作用へのアクセスを得る順序を決定する。
従って、特定の副作用(例えば、メモリあるいは標識)に対して、そのインスタンス・トークン経路に沿って動いている1つあるいは複数のインスタンス・トークンがある。一連の全てのノードは、副作用へのアクセスを得るためにその入力上にデータを有する必要があるので、インスタンス・トークン・データ経路上のデータ要素の数を制限する(つまり、インスタンス・トークンの数を制限する)ことにより、副作用への同時アクセスの数を制限することが可能である。1つのインスタンス・トークンのみが、特定の時点においてインスタンス・トークン経路上に存在するよう許される場合、副作用は、同時に2つあるいはそれ以上のノードからアクセスされることはないことが保証される。さらに、副作用がアクセスされる順序は、インスタンス・トークン経路によって明確に決定される。一定の状況の間1つ以上のノードが副作用へのアクセスを得るようすることが安全な場合、1つ以上のインスタンス・トークンを同時に経路に導入することが可能である。インスタンス・トークン経路を分割し、インスタンス・トークンを分割の双方の経路に複製することも安全かもしれない。
例えば、副作用としてメモリにアクセスする時、双方の経路がメモリからの読出しのみを含む場合、通常インスタンス・トークン経路を分割することが安全であろう。この場合、メモリへの同時アクセスは、メモリ制御装置によって任意に決定されるが、読出しに対する実行の順序は互いに影響しないので、このことは安全である。対照的に、2つの経路が書込みを含む場合、2つの書込みが実際に実行された順序は必須である。それは、メモリが最終的にどの値を保持するかを決定するからである。このような場合、インスタンス・トークン経路は、安全に分割することができない。
一本のインスタンス・トークン経路上にいくつかのインスタンス・トークンを続けて置くことは、通常、パイプライン化された計算の異なる「世代」によるメモリへのアクセスを表すであろう。例えば、2つの世代が、それらがメモリの同じ部分をアクセスしないことにおいて、関連性がないと知られている場合、多数のインスタンス・トークンを続けて挿入することは安全である。
いくつかの異なる副作用(例えば、メモリあるいは他の入力あるいは出力装置)へのアクセスを続けて置くこともまた可能である。このことには、経路上の各インスタンス・トークンに対して、各副作用へのアクセスの順序を明確に決定するという効果がある。例えば、入力装置からの読出しは、インスタンス・トークン経路上において、出力装置への書込みの前に置くことができる。いくつかのインスタンス・トークンが経路上に同時に存在する場合、読出しおよび書込みに対する全体的な順序は決定的でないかも知れないが、経路上の各個別のインスタンス・トークンに対しては、副作用間で明確な順序付けがあるであろう。
最後に、ディジタル回路を設計する場合、異なる型のデータ・フロー・マシンを混合させることができる。例えば、データ依存回数の反復を伴うループは、その部分以外は静的である静的データ・フロー・マシン内の動的データ・フロー・マシン部分とすることができる。このように、反復は並行して実行することができ、このことは静的データ・フロー・マシンにはできないことである。静的データ・フロー・マシンのこのような局所的動的部分は、動的データ・フロー・マシンの完全なタグ・マッチング・システムが無くても動作することができる。代わりに、トークンが、それらが入ったのと同じ順序で動的部分を出て行くことを保証しさえすればよい。マシンの残りの部分は静的でありトークンを再順序付けしないので、このことはトークンをマッチさせる。
再帰に入る各トークンに通し番号をタグ付けし、順序を外れて再帰を終了するトークン収集するためにバッファを使用することによって、再帰が終了した後にトークンを正しい順序に再配置することが可能である。より具体的には、バッファは再帰ステップの後に配置される。トークンが順序を外れて再帰を抜ける場合、トークンは、より小さい通し番号を持つ全てのトークンが再帰を抜けるまでバッファ内に置かれる。従って、バッファの大きさが、いくつのトークンが順序を外れて再帰を抜けることができるかを決定し、トークンを再帰の完了の後に正しく配置することができることを保証する。一定の場合、再帰を抜けるトークンの順序が適切でないことを知ることができる。例えば、再帰を抜けるトークンの値の単純な合計が実行される場合である。このような場合、データ・トークンへの通し番号のタグ付けおよびバッファの双方が省略されてもよい。
データ依存ループは別として、ローカル・タグ・マッチングおよび再順序付け方式の使用は、他の型の再順序付けノードあるいは副グラフに対しても使用することができる。
本発明は、好ましい実施例を参照しながら上に説明されてきた。しかし、ここに開示される以外の実施例も、付随する請求項によって定義される本発明の範囲内において可能である。
Claims (25)
- 少なくとも1つの入力あるいは少なくとも1つの出力を有する機能ノード、および上記機能ノード間の相互接続を示す接続を含むグラフ表現から、データ・フロー・マシンを形成するディジタル論理回路を実装するための、ディジタル制御パラメータを生成する方法であって、
上記グラフの上記機能ノードの機能を実行する第1のハードウェア構成要素の組を特定するディジタル制御パラメータであって、対応する機能ノードの機能のみを実行する各ハードウェア構成要素を特定する上記ディジタル制御パラメータを生成することと、
上記機能ノード間の接続に従って上記第1のハードウェア構成要素の組の上記ハードウェア構成要素間でデータの転送を有効にするために特定される第2のハードウェア構成要素の組を特定するディジタル制御パラメータを生成することと、
上記第1のハードウェア構成要素の組の少なくとも1つのハードウェア構成要素に対する発火規則を実行するための電子回路を特定するディジタル制御パラメータを生成することと、
を特徴とする、上記方法。 - 請求項1に記載の方法であって、
上記グラフ表現は有向グラフであることを特徴とする、上記方法。 - 請求項1あるいは2に記載の方法であって、
上記グラフ表現は、高レベル原始コード仕様から生成されていることを特徴とする、上記方法。 - 請求項1から3に記載の方法であって、
上記機能ノード間の少なくとも1つの接続に対して、独立して並列してアクセスされることができる記憶素子を特定するディジタル制御パラメータを生成することを特徴とする、上記方法。 - 請求項1から4に記載の方法であって、
上記機能ノード間の少なくとも1つの接続に対して、ディジタル・レジスタ、少なくとも1つのフリップフロップおよび/または少なくとも1つのラッチを特定するディジタル制御パラメータを生成することを特徴とする、上記方法。 - 請求項1から5に記載の方法であって、
少なくとも1つの機能ノードに対して、組合せ論理を特定するディジタル制御パラメータを生成することを特徴とする、上記方法。 - 請求項1から5に記載の方法であって、
少なくとも1つの機能ノードに対して、少なくとも1つの状態マシンを特定するディジタル制御パラメータを定義することを特徴とする、上記方法。 - 請求項1から5に記載の方法であって、
少なくとも1つの機能ノードに対して、少なくとも1つのパイプライン化されたデバイスを特定するディジタル制御パラメータを定義することを特徴とする、上記方法。 - 少なくとも1つの入力あるいは少なくとも1つの出力を有する機能ノード、および上記機能ノード間の相互接続を示す接続を含むグラフ表現からディジタル論理回路を実装するための、ディジタル制御パラメータを生成するための装置であって、
上記グラフの上記機能ノードの機能を実行する第1のハードウェア構成要素の組を特定するディジタル制御パラメータであって、対応する機能ノードの機能のみを実行する各ハードウェア構成要素を特定する上記ディジタル制御パラメータを生成し、
上記機能ノード間の接続に従って上記第1のハードウェア構成要素の組のハードウェア構成要素間でデータの転送を有効にするために特定される第2のハードウェア構成要素の組を特定するディジタル制御パラメータを生成し、
上記第1のハードウェア構成要素の組の少なくとも1つのハードウェア構成要素に対する発火規則を実行するための電子回路を特定するディジタル制御パラメータを生成することを特徴とする、上記装置。 - 請求項9に記載の装置であって、
上記グラフ表現は有向グラフであることを特徴とする、上記装置。 - 請求項9または10に記載の装置であって、
上記グラフ表現は、高レベル原始コード仕様から生成されていることを特徴とする、上記装置。 - 請求項9から11に記載の装置であって、
上記機能ノード間の少なくとも1つの接続に対して、独立して並列してアクセスされることができる記憶素子を特定するディジタル制御パラメータを生成するよう適合されていることを特徴とする、上記装置。 - 請求項9から12に記載の装置であって、
上記機能ノード間の少なくとも1つの接続に対して、ディジタル・レジスタ、少なくとも1つのフリップフロップおよび/または少なくとも1つのラッチを特定するディジタル制御パラメータを生成するよう適合されていることを特徴とする、上記装置。 - 請求項9から13に記載の装置であって、
少なくとも1つの機能ノードに対して、組合せ論理を特定するディジタル制御パラメータを生成するよう適合されていることを特徴とする、上記装置。 - 請求項9から13に記載の装置であって、
少なくとも1つの機能ノードに対して、少なくとも1つの状態マシンを特定するディジタル制御パラメータを生成するよう適合されていることを特徴とする、上記装置。 - 請求項9から13に記載の装置であって、
少なくとも1つの機能ノードに対して、少なくとも1つのパイプライン化されたデバイスを特定するディジタル制御パラメータを生成するよう適合されていることを特徴とする、上記装置。 - データ・フロー・マシンであって、
データ転送を実行するよう適合されている第1のハードウェア構成要素の組と、
上記第1のハードウェア構成要素の組を相互接続する第2のハードウェア構成要素の組と、
上記第1のハードウェア構成要素の組の各々に対して、少なくともひとつの発火規則を確率する電子回路と、を含み、
上記第1のハードウェア構成要素の組の各ハードウェア構成要素は、1つの特定のデータ転送のみを実行するよう適合されていることを特徴とする、上記データ・フロー・マシン。 - 請求項17に記載のデータ・フロー・マシンであって、
上記第2のハードウェア構成要素の組の少なくともひとつの構成要素は、独立して平行してアクセスされることができる記憶素子の形式であることを特徴とする、上記データ・フロー・マシン。 - 請求項17および18に記載のデータ・フロー・マシンであって、
上記第2のハードウェア構成要素の組の少なくとも1つの要素は、レジスタ、フリップフロップまたはラッチの形式であることを特徴とする、上記データ・フロー・マシン。 - 請求項17から19に記載のデータ・フロー・マシンであって、
上記第1のハードウェア構成要素の組の少なくとも1つの要素は、組合せ論理の形式であることを特徴とする、上記データ・フロー・マシン。 - 請求項17から19に記載のデータ・フロー・マシンであって、
上記第1のハードウェア構成要素の組の少なくとも1つの要素は、少なくとも1つの状態マシンの形式であることを特徴とする、上記データ・フロー・マシン。 - 請求項17から19に記載のデータ・フロー・マシンであって、
上記第1のハードウェア構成要素の組の少なくとも1つの要素は、パイプライン化されたデバイスの形式であることを特徴とする、上記データ・フロー・マシン。 - 請求項17から22に記載のデータ・フロー・マシンであって、
上記データ・フロー・マシンは、ASIC、FPGA、CPLD、あるいは他のPLDの手段によって実装されることを特徴とする、上記データ・フロー・マシン。 - ディジタル・コンピュータの機能を有する電子デバイスのメモリに直接読み込み可能なコンピュータ・プログラム製品であって、
上記製品が上記電子デバイスによって実行される際に、請求項1から8のいずれかに記載のステップを実行するためのソフトウェア・コード部分を含む、上記コンピュータ・プログラム製品。 - コンピュータ読み込み可能な媒体上に実装された、請求項24に記載のコンピュータ・プログラム製品。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
SE0300742A SE0300742D0 (sv) | 2003-03-17 | 2003-03-17 | Data Flow Machine |
PCT/SE2004/000394 WO2004084086A1 (en) | 2003-03-17 | 2004-03-17 | Data flow machine |
Publications (2)
Publication Number | Publication Date |
---|---|
JP2006522406A JP2006522406A (ja) | 2006-09-28 |
JP2006522406A5 true JP2006522406A5 (ja) | 2007-05-17 |
Family
ID=20290710
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2006507967A Pending JP2006522406A (ja) | 2003-03-17 | 2004-03-17 | データ・フロー・マシン |
Country Status (6)
Country | Link |
---|---|
US (1) | US20060101237A1 (ja) |
EP (1) | EP1609078B1 (ja) |
JP (1) | JP2006522406A (ja) |
CN (1) | CN1781092A (ja) |
SE (1) | SE0300742D0 (ja) |
WO (1) | WO2004084086A1 (ja) |
Families Citing this family (31)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7571303B2 (en) * | 2002-10-16 | 2009-08-04 | Akya (Holdings) Limited | Reconfigurable integrated circuit |
US7769569B2 (en) | 2004-09-02 | 2010-08-03 | Logiccon Design Automation Ltd. | Method and system for designing a structural level description of an electronic circuit |
CN101179516B (zh) * | 2006-11-10 | 2010-06-09 | 北京航空航天大学 | 基于有向图的数据分发方法 |
US9733914B2 (en) * | 2009-06-01 | 2017-08-15 | National Instruments Corporation | Loop parallelization analyzer for data flow programs |
US8510709B2 (en) * | 2009-06-01 | 2013-08-13 | National Instruments Corporation | Graphical indicator which specifies parallelization of iterative program code in a graphical data flow program |
US9152668B1 (en) * | 2010-01-29 | 2015-10-06 | Asana, Inc. | Asynchronous computation batching |
WO2013100783A1 (en) | 2011-12-29 | 2013-07-04 | Intel Corporation | Method and system for control signalling in a data path module |
US10331583B2 (en) | 2013-09-26 | 2019-06-25 | Intel Corporation | Executing distributed memory operations using processing elements connected by distributed channels |
CN110149801A (zh) * | 2015-05-05 | 2019-08-20 | 华为技术有限公司 | 用于在处理系统中进行数据流图转换的系统和方法 |
CN106155755B (zh) * | 2015-06-03 | 2020-06-23 | 上海红神信息技术有限公司 | 程序编译方法和程序编译器 |
US10572376B2 (en) | 2016-12-30 | 2020-02-25 | Intel Corporation | Memory ordering in acceleration hardware |
US10558575B2 (en) | 2016-12-30 | 2020-02-11 | Intel Corporation | Processors, methods, and systems with a configurable spatial accelerator |
US10515049B1 (en) | 2017-07-01 | 2019-12-24 | Intel Corporation | Memory circuits and methods for distributed memory hazard detection and error recovery |
US10469397B2 (en) | 2017-07-01 | 2019-11-05 | Intel Corporation | Processors and methods with configurable network-based dataflow operator circuits |
US10515046B2 (en) | 2017-07-01 | 2019-12-24 | Intel Corporation | Processors, methods, and systems with a configurable spatial accelerator |
US11086816B2 (en) | 2017-09-28 | 2021-08-10 | Intel Corporation | Processors, methods, and systems for debugging a configurable spatial accelerator |
US10496574B2 (en) | 2017-09-28 | 2019-12-03 | Intel Corporation | Processors, methods, and systems for a memory fence in a configurable spatial accelerator |
US10564980B2 (en) * | 2018-04-03 | 2020-02-18 | Intel Corporation | Apparatus, methods, and systems for conditional queues in a configurable spatial accelerator |
US11307873B2 (en) | 2018-04-03 | 2022-04-19 | Intel Corporation | Apparatus, methods, and systems for unstructured data flow in a configurable spatial accelerator with predicate propagation and merging |
US10891240B2 (en) | 2018-06-30 | 2021-01-12 | Intel Corporation | Apparatus, methods, and systems for low latency communication in a configurable spatial accelerator |
US11200186B2 (en) | 2018-06-30 | 2021-12-14 | Intel Corporation | Apparatuses, methods, and systems for operations in a configurable spatial accelerator |
US10853073B2 (en) | 2018-06-30 | 2020-12-01 | Intel Corporation | Apparatuses, methods, and systems for conditional operations in a configurable spatial accelerator |
US10678724B1 (en) | 2018-12-29 | 2020-06-09 | Intel Corporation | Apparatuses, methods, and systems for in-network storage in a configurable spatial accelerator |
WO2020168474A1 (zh) * | 2019-02-20 | 2020-08-27 | 深圳大学 | 提升数据流机运行效率的方法、装置、设备及存储介质 |
US10915471B2 (en) | 2019-03-30 | 2021-02-09 | Intel Corporation | Apparatuses, methods, and systems for memory interface circuit allocation in a configurable spatial accelerator |
US10965536B2 (en) | 2019-03-30 | 2021-03-30 | Intel Corporation | Methods and apparatus to insert buffers in a dataflow graph |
US10817291B2 (en) | 2019-03-30 | 2020-10-27 | Intel Corporation | Apparatuses, methods, and systems for swizzle operations in a configurable spatial accelerator |
US11029927B2 (en) | 2019-03-30 | 2021-06-08 | Intel Corporation | Methods and apparatus to detect and annotate backedges in a dataflow graph |
US11037050B2 (en) | 2019-06-29 | 2021-06-15 | Intel Corporation | Apparatuses, methods, and systems for memory interface circuit arbitration in a configurable spatial accelerator |
US11907713B2 (en) | 2019-12-28 | 2024-02-20 | Intel Corporation | Apparatuses, methods, and systems for fused operations using sign modification in a processing element of a configurable spatial accelerator |
WO2021211911A1 (en) * | 2020-04-16 | 2021-10-21 | Blackswan Technologies Inc. | Artificial intelligence cloud operating system |
Family Cites Families (36)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH0632056B2 (ja) * | 1985-05-31 | 1994-04-27 | 松下電器産業株式会社 | デ−タ処理装置 |
JPS61276032A (ja) * | 1985-05-31 | 1986-12-06 | Matsushita Electric Ind Co Ltd | 情報処理装置 |
US5021947A (en) * | 1986-03-31 | 1991-06-04 | Hughes Aircraft Company | Data-flow multiprocessor architecture with three dimensional multistage interconnection network for efficient signal and data processing |
US4814978A (en) * | 1986-07-15 | 1989-03-21 | Dataflow Computer Corporation | Dataflow processing element, multiprocessor, and processes |
US4972315A (en) * | 1987-03-10 | 1990-11-20 | Mitsubishi Denki Kabushiki Kaisha | Data flow machine |
JPH03500461A (ja) * | 1988-07-22 | 1991-01-31 | アメリカ合衆国 | データ駆動式計算用のデータ流れ装置 |
US5661661A (en) * | 1990-12-21 | 1997-08-26 | Synopsys, Inc. | Method for processing a hardware independent user description to generate logic circuit elements including flip-flops, latches, and three-state buffers and combinations thereof |
US5666296A (en) * | 1991-12-31 | 1997-09-09 | Texas Instruments Incorporated | Method and means for translating a data-dependent program to a data flow graph with conditional expression |
US5491640A (en) * | 1992-05-01 | 1996-02-13 | Vlsi Technology, Inc. | Method and apparatus for synthesizing datapaths for integrated circuit design and fabrication |
US5297073A (en) * | 1992-08-19 | 1994-03-22 | Nec Electronics, Inc. | Integer divide using shift and subtract |
JP3706397B2 (ja) * | 1994-06-06 | 2005-10-12 | シャープ株式会社 | データ駆動型情報処理装置 |
JPH08101861A (ja) * | 1994-09-30 | 1996-04-16 | Toshiba Corp | 論理回路合成装置 |
US6077315A (en) * | 1995-04-17 | 2000-06-20 | Ricoh Company Ltd. | Compiling system and method for partially reconfigurable computing |
US5764951A (en) * | 1995-05-12 | 1998-06-09 | Synopsys, Inc. | Methods for automatically pipelining loops |
US5854929A (en) * | 1996-03-08 | 1998-12-29 | Interuniversitair Micro-Elektronica Centrum (Imec Vzw) | Method of generating code for programmable processors, code generator and application thereof |
US5838583A (en) * | 1996-04-12 | 1998-11-17 | Cadence Design Systems, Inc. | Optimized placement and routing of datapaths |
US5974411A (en) * | 1997-02-18 | 1999-10-26 | Sand Technology Systems International, Inc. | N-way processing of bit strings in a dataflow architecture |
US6606588B1 (en) * | 1997-03-14 | 2003-08-12 | Interuniversitair Micro-Elecktronica Centrum (Imec Vzw) | Design apparatus and a method for generating an implementable description of a digital system |
US5966534A (en) * | 1997-06-27 | 1999-10-12 | Cooke; Laurence H. | Method for compiling high level programming languages into an integrated processor with reconfigurable logic |
JP3850531B2 (ja) * | 1997-10-21 | 2006-11-29 | 株式会社東芝 | 再構成可能な回路の設計装置、及び再構成可能な回路装置 |
US6075935A (en) * | 1997-12-01 | 2000-06-13 | Improv Systems, Inc. | Method of generating application specific integrated circuits using a programmable hardware architecture |
RU2148857C1 (ru) * | 1998-02-20 | 2000-05-10 | Бурцев Всеволод Сергеевич | Вычислительная система |
US6145073A (en) * | 1998-10-16 | 2000-11-07 | Quintessence Architectures, Inc. | Data flow integrated circuit architecture |
US6625797B1 (en) * | 2000-02-10 | 2003-09-23 | Xilinx, Inc. | Means and method for compiling high level software languages into algorithmically equivalent hardware representations |
JP3722351B2 (ja) * | 2000-02-18 | 2005-11-30 | シャープ株式会社 | 高位合成方法およびその実施に使用される記録媒体 |
JP3796390B2 (ja) * | 2000-04-27 | 2006-07-12 | シャープ株式会社 | データ駆動型情報処理装置 |
KR100345009B1 (ko) * | 2000-08-14 | 2002-07-20 | 주식회사 에이디칩스 | 비동기식 제어부의 생성 방법 |
US20020178432A1 (en) * | 2000-08-17 | 2002-11-28 | Hyungwon Kim | Method and system for synthesizing a circuit representation into a new circuit representation having greater unateness |
JP2002123563A (ja) * | 2000-10-13 | 2002-04-26 | Nec Corp | コンパイル方法および合成装置ならびに記録媒体 |
AU2002347870A1 (en) * | 2001-10-11 | 2003-04-22 | California Institute Of Technology | Method and system for compiling circuit designs |
JP4082653B2 (ja) * | 2001-11-15 | 2008-04-30 | 松下電器産業株式会社 | 高位合成方法および高位合成装置 |
JP2005528792A (ja) * | 2002-06-03 | 2005-09-22 | コーニンクレッカ フィリップス エレクトロニクス エヌ ヴィ | 再構成可能な集積回路 |
US7065665B2 (en) * | 2002-10-02 | 2006-06-20 | International Business Machines Corporation | Interlocked synchronous pipeline clock gating |
US6983456B2 (en) * | 2002-10-31 | 2006-01-03 | Src Computers, Inc. | Process for converting programs in high-level programming languages to a unified executable for hybrid computing platforms |
WO2004072796A2 (en) * | 2003-02-05 | 2004-08-26 | Arizona Board Of Regents | Reconfigurable processing |
EP1941354A4 (en) * | 2005-10-18 | 2010-01-27 | Mitrionics Ab | METHOD AND DEVICE FOR IMPLEMENTING DIGITAL LOGIC CIRCUITS |
-
2003
- 2003-03-17 SE SE0300742A patent/SE0300742D0/xx unknown
-
2004
- 2004-03-17 JP JP2006507967A patent/JP2006522406A/ja active Pending
- 2004-03-17 WO PCT/SE2004/000394 patent/WO2004084086A1/en active Application Filing
- 2004-03-17 CN CNA2004800113714A patent/CN1781092A/zh active Pending
- 2004-03-17 EP EP04721412.7A patent/EP1609078B1/en not_active Expired - Lifetime
-
2005
- 2005-09-16 US US11/227,997 patent/US20060101237A1/en not_active Abandoned
Similar Documents
Publication | Publication Date | Title |
---|---|---|
EP1609078B1 (en) | Data flow machine | |
JP2006522406A5 (ja) | ||
Coussy et al. | GAUT: A High-Level Synthesis Tool for DSP Applications: From C Algorithm to RTL Architecture | |
Benini et al. | Network-on-chip architectures and design methods | |
JP4391935B2 (ja) | 散在しているプロセッサと通信要素を備える処理システム | |
Gokhale et al. | Reconfigurable computing: Accelerating computation with field-programmable gate arrays | |
Butts et al. | A structural object programming model, architecture, chip and tools for reconfigurable computing | |
US7409533B2 (en) | Asynchronous communication among hardware object nodes in IC with receive and send ports protocol registers using temporary register bypass select for validity information | |
US20090119484A1 (en) | Method and Apparatus for Implementing Digital Logic Circuitry | |
JP2016526220A (ja) | プログラム可能な最適化を有するメモリネットワークプロセッサ | |
US11709664B2 (en) | Anti-congestion flow control for reconfigurable processors | |
Gajski et al. | Essential issues in codesign | |
Cortadella et al. | Elastic systems | |
Bergmann et al. | QUKU: a dual-layer reconfigurable architecture | |
Cortadella et al. | RTL synthesis: From logic synthesis to automatic pipelining | |
US7496869B1 (en) | Method and apparatus for implementing a program language description of a circuit design for an integrated circuit | |
Rodionov et al. | Fine-grained interconnect synthesis | |
Chattopadhyay et al. | Language-driven exploration and implementation of partially re-configurable ASIPs | |
Davis | Synthesizing asynchronous circuits: Practice and experience | |
Cathey et al. | A reconfigurable distributed computing fabric exploiting multilevel parallelism | |
Kashani et al. | A 475 MHz Manycore FPGA Accelerator for RTL Simulation | |
Horak | A high-throughput, low-power asynchronous mesh-of-trees interconnection network for the explicit multi-threading (xmt) parallel architecture | |
Dérutin et al. | Design of a scalable network of communicating soft processors on FPGA | |
Fiorentino | Architectural Exploration of KeyRing Self-Timed Processors | |
Maniraj | Analysis of asynchronous routers for network-on-chip applications |