JP2009512089A - データフローマシンにおけるデッドロックを回避するための方法 - Google Patents

データフローマシンにおけるデッドロックを回避するための方法 Download PDF

Info

Publication number
JP2009512089A
JP2009512089A JP2008536544A JP2008536544A JP2009512089A JP 2009512089 A JP2009512089 A JP 2009512089A JP 2008536544 A JP2008536544 A JP 2008536544A JP 2008536544 A JP2008536544 A JP 2008536544A JP 2009512089 A JP2009512089 A JP 2009512089A
Authority
JP
Japan
Prior art keywords
node
data flow
path
loop
digital logic
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
Application number
JP2008536544A
Other languages
English (en)
Inventor
メール、ステファン
ボルグ、ポントゥス
Original Assignee
マイトリオニクス エービー
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by マイトリオニクス エービー filed Critical マイトリオニクス エービー
Publication of JP2009512089A publication Critical patent/JP2009512089A/ja
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F30/00Computer-aided design [CAD]
    • G06F30/30Circuit design
    • G06F30/34Circuit design for reconfigurable circuits, e.g. field programmable gate arrays [FPGA] or programmable logic devices [PLD]
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/448Execution paradigms, e.g. implementations of programming paradigms
    • G06F9/4494Execution paradigms, e.g. implementations of programming paradigms data driven

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Computer Hardware Design (AREA)
  • Physics & Mathematics (AREA)
  • Software Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Evolutionary Computation (AREA)
  • Geometry (AREA)
  • Design And Manufacture Of Integrated Circuits (AREA)
  • Logic Circuits (AREA)
  • Multi Processors (AREA)

Abstract

少なくとも1つの入力または少なくとも1つの出力を備えた機能ノードと、機能ノード間の相互接続を示す接続とを備えるディジタル論理回路を実装するためのディジタル制御パラメータを生成する方法であって、ディジタル論理回路が連続的なトークンがストリーミングされる第1の経路と、トークンがストリーミングされる第2の経路とを備える方法が開示される。該方法は、経路へのデータフローに必要な相対スループットを決定するステップと、経路の1つにバッファを割り当てて経路のスループットを平衡化させるステップと、最小限の数のバッファで必要な相対スループットが得られるまで割り当てられたバッファを除去するステップと、最小限の数のバッファを備えるディジタル論理回路を実装するためのディジタル制御パラメータを生成するステップとを含む。装置、コンピュータ実装ディジタル論理回路、データフローマシン、方法およびコンピュータプログラム製品も開示される。

Description

本発明は、ディジタル論理回路の改良に関する。本発明は、特に、ハードウェア領域リソースを適切に使用することで第1のノードから分岐し、第2のノードに収束するデータフロー経路の相対スループットの平衡化に関する。本発明は、上記改良を実行するための装置、方法およびコンピュータプログラム製品に関する。
ディジタル回路を設計する迅速で容易な方法を提供するハードウェア記述のための使いやすいプログラミング言語への多数の異なる手法が近年採用されている。データフローマシンをプログラミングする際に、ハードウェア記述言語とは異なる言語が使用できる。原則として、データフローマシン上で特定のタスクを実行するためのアルゴリズム記述は、記述それ自体を備えていればよいのに対して、集積回路内で直接実行されるアルゴリズム記述はハードウェア内にアルゴリズムの特定の実施の詳細内容を多数含まなければならない。例えば、ハードウェア記述は、最適なクロック周波数を提供するためのレジスタの配置、どの乗算器を使用するかなどに関する情報を含まなければならない。
長年にわたって、データフローマシンは、並列型コンピューティングの優れたモデルとして考えられてきた。したがって、効率的なデータフローマシンを設計する数々の試みがなされてきた。さまざまな理由から、データフローマシンを設計する初期の試みは他の利用可能な並列型コンピューティング技術と比べてコンピュータ性能に関して低い結果しか生んでいなかった。
データフローマシンは、データフローグラフと混同してはならない。プログラムソースコードを翻訳する時には、現在入手可能な大半のコンパイラは、コンパイルされたプログラムの性能を最適化するためにデータフロー解析およびデータフロー記述(データフローグラフ、またはDFGとして周知である)を使用する。アルゴリズム上で実行されるデータフロー解析はデータフローグラフを生成する。データフローグラフは、アルゴリズム内に存在するデータ依存性を示す。より詳細には、データフローグラフは、普通、処理中のデータについてアルゴリズムが実行する特定の動作を示すノードと、グラフ内のノード間の相互接続を示すアークとを含む。したがって、データフローグラフは、特定のアルゴリズムの抽象的な記述であり、アルゴリズムの解析に使用される。他方、データフローマシンは、データフローグラフに基づいてアルゴリズムを実際に実行できる計算マシンである。
データフローマシンは、ノイマン型アーキテクチャ(パーソナルコンピュータ内の通常のプロセッサは、ノイマン型アーキテクチャの一例である)などの制御フロー装置と比較して根本的に異なる方法で動作する。データフローマシンでは、プログラムは、プロセッサによって実行される一連の動作ではなく、特別のデータフロー制御ノードを備えたデータフローグラフである。データは、データフローグラフのアーク上に常駐するトークンとして知られるパケットに構成される。トークンは、ビット、浮動小数点数、アレイなどのアークによって接続されたノード上で演算される任意のデータ構造を含むことができる。データフローマシンのタイプによって、各アークは、最大限、単一のトークン(静的データフローマシン)、固定数のトークン(同期データフローマシン)、または不特定数のトークン(動的データフローマシン)を保持することができる。
データフローマシン内のノードは演算の実行に備えて十分な数の入力アーク上にトークンが出現するのを待つ。トークンが出現すると、ノードは、トークンを消費し、出力アーク上に新しいトークンを生成する。例えば、2つのトークンの追加を実行するノードは、その両方の入力にトークンが現れるまで待ち、これら2つのトークンを消費し、出力アーク上に新たなトークンとして結果 (この場合、入力トークンのデータ合計)を生成する。
CPUでの処理のように、条件分岐に応じて異なる動作を選択してデータを処理するのではなく、データフローマシンは、条件分岐に応じてデータフロー制御ノードを介してさまざまなノードにデータを送信する。したがって、データフローマシンは特定の出力においてトークンを選択的に生成可能なノード(スイッチノードと呼ぶ)と、特定の入力においてトークンを選択的に消費できるノード(マージノードと呼ぶ)を有する。共通データフロー制御ノードの別の例は、データフローからトークンを選択的に除去するゲート−ノードである。他の多くのデータフロー操作ノードも可能である。
グラフ内の各ノードは、潜在的にグラフ内の他のすべてのノードから独立してその動作を実行できる。ノードが関連する入力アーク上にデータを有し、関連する出力アーク上に結果を生成する空間ができると、ノードは動作(発火と呼ばれる)を実行することができる。ノードは、他のノードが発火できるか否かにかかわらず発火する。したがって、制御フロー装置のように、ノードの動作が実行される順序は特にない。データフローグラフ内の動作の実行順序は関係がない。実行順序は、例えば、発火可能なすべてのノードの同時実行である。
上記のように、データフローマシンは、その設計に応じて、普通3つの異なるカテゴリに分類される。すなわち、静的データフローマシン、動的データフローマシン、および同期データフローマシンである。
静的データフローマシンでは、対応するデータフローグラフ内のあらゆるアークはどの瞬間にも単一のトークンしか保持できない。
動的データフローマシンでは、各アークは受信側ノードの受信準備が整うのを待ちながら不特定数のトークンを保持できる。これによって、データフローマシンの設計時には、未知の再帰深度で再帰手順を構築することができる。そのような手順は、再帰時に処理されているデータを反転する場合がある。その結果、再帰完了後の計算実行時にトークンが一致しないことがある。
上記の状況は、プロトコル内のあらゆるトークンのシリアル番号を示すマーカを追加することで処理できる。再帰の内側のトークンのシリアル番号は連続して監視され、トークンが再帰を抜けると再帰の外側のトークンと一致しない限り処理が進まない。
再帰が末端再帰(tail recursion)でない場合、通常の(ノイマン型)プロセッサを用いて再帰を行う場合、コンテキストをスタックに格納するのと同様に、再帰呼び出しごとにコンテキストをバッファ内に格納しなければならない。最後に動的データフローマシンはデータ依存再帰を並列実行できる。
同期データフローマシンは、受信側ノードが準備をしている間、トークンをアーク上で待機させられなくても動作できる。代わりに、各ノードに対するトークンの生成と消費との関係は事前に計算される。この情報を用いて、ノードを配置し、アーク上に同時に常駐できるトークンの数に関するサイズをアークに割り当てる方法を決定できる。従って、各ノードは、後続ノードが消費するだけの数のトークンを確実に生成できる。後続ノードが常にデータを消費するため、あらゆるノードが常にデータを生成するようにシステムを設計できる。この欠点は、この構成にデータ依存再帰などの不確定な遅延が存在できないことである。
データフローマシンは、従来のCPU内で実行されるコンピュータプログラムによって実行されるのが最も一般的である。コンピュータのクラスタが使用されることが多いか、または印刷基板上のCPUのアレイが使用されることが多い。データフローマシンを使用する主要な目的は、その並列処理を利用して実験的なスーパーコンピュータを構築することであった。ハードウェア内で直接データフローマシンを構築するために多くの試みがなされてきた。これは、特定用途向けIC(ASIC)内に多数のプロセッサを作成することで実行された。回路基板上のプロセッサを用いる方法と比べ、この手法の主要な利点は、同じASIC上のプロセッサ間の通信速度が速いことである。現在まで、データフローマシンを計算に使用する試みは商業的に成功していない。
ハードウェア構築には、フィールドプログラマブルゲートアレイ(FPGA)およびその他のプログラマブルロジックデバイス(PLD)も使用することができる。FPGAは、現場で再構成可能なシリコンチップである。FPGAは、小型のランダムアクセスメモリのアレイ、通常は、スタティックランダムアクセスメモリ(SRAM)に基づく。各SRAMは、ブール関数用のルックアップテーブルを保持し、それ故、FPGAは、いかなる論理演算も実行できる。また、FPGAは、同様に構成可能なルーティングリソースを保持し、SRAM相互間の信号の伝送を可能にしている。
シリコンチップの論理演算をSRAMに割り当て、ルーティングリソースを構成することで、FPGAの表面に載るほど小さい任意のハードウェア構造を実装することができる。FPGAは、ASICと比べて同量のシリコン表面上で実装することができる論理演算数がはるかに少ない。FPGAの利点は、SRAMルックアップテーブルに新しい値を入力し、単にルーティングを変更することで任意の他のハードウェア構造にも変更できるという点である。FPGAは、任意のハードウェア構造を受け入れ、通告をうけてからすぐに(100ミリ秒未満で)任意の他のハードウェア構造に変更することができる空のシリコン表面とみなすことができる。
その他の一般的なPLDは、ヒューズリンク方式が可能で、それ故、永久的な構造である。ASICに対するヒューズリンクPLDの主要な利点は、製造が容易な点である。ASICの製造には極めて高価で複雑な工程が必要である。これと対照的に、PLDは、簡単なツールで数分で製造できる。ヒューズリンクPLD、FPGA共に、いくつかの欠点を克服することができるPLDの進化する技術が数多く存在する。
一般に、FPGAのプログラミングには、FPGAのベンダが提供する配置およびルーティングツールを使用しなければならない。配置およびルーティングソフトウェアは、普通、合成ソフトウェアのネットリストまたは直接合成するハードウェア記述言語(HDL)のソースコードを受け付ける。次いで、配置およびルーティングソフトウェアは、プログラミング単位でFPGAのプログラミングに使用する記述ファイル内にディジタル制御パラメータを出力する。その他のPLDにも同様の技術が使用される。
集積回路の設計時には、ハードウェア構造を簡単にする枠組みを提供する状態機械として回路を設計することが一般的である。状態機械は、データが前の計算に応じて種々のパターンで論理演算内を流れる複雑なデータフローを実施する時に特に有用である。
状態機械によってハードウェア要素の再利用が可能になり、回路の物理サイズが最適化される。その結果、集積回路の製造コストが下がる。
多数のプロセッサを備えたスーパーコンピュータをデータフローマシンの形で構築することで、高い並行処理のレベルが達成できる可能性がある。プロセッサを多数のCPUまたは各々が多数の状態機械またはCPUを備える多数のASICから構成する試みがなされてきた。データフローマシンの以前の設計では、ASICに状態機械を組み込んでいた(通常はプロセッサの形で)ため、FPGAなどのプログラマブル論理デバイス内にデータフローマシンを実装する最も単純明快な方法はやはり状態機械の使用であろう。すべてのこれまで知られているデータフローマシンの一般的な特徴は、確立したデータフローグラフのノードが最終的なハードウェア構造において特定のハードウェアユニット(普通、関数ユニット、FUとして知られる)に対応しないことである。代わりに、特定の瞬間にたまたま利用可能なハードウェアユニットは、データフローグラフ内の影響があるノードが指定する計算に使用される。データフローグラフ内の特定のノードを複数回実行する場合、ノード実行のたびに異なる関数ユニットを使用することがある。
さらに、以前のデータフローマシンは、データフローマシンの機能を実行するために、例外なく状態機械またはプロセッサを使用して実装されている。各状態機械は、データフローグラフ内の任意のノードの関数を実行することができる。このことは、各ノードを任意の関数ユニット内で実行するために必要である。各状態機械は、任意のノードの関数を実行できるため、現在実行中のノードとは別のその他のあらゆるノードに必要なハードウェアは休眠状態である。状態機械(時にはトークン操作のための支援ハードウェアを備えた)は、データフローマシンそれ自体の実現であるということに留意されたい。データフローマシンが他の何らかの手段で実装されたり、機能ノード内に状態機械を含むことはない。
高レベル言語でのハードウェア設計は一般に望ましいが、FPGAの場合には特別の利点がある。FPGAは再構成可能であるため、単一のFPGAが多数の異なるハードウェア設計を受け入れることができる。この能力を十分に活用するため、従来のハードウェア記述言語よりもはるかに簡単な設計の記述方法が必要である。FPGAでは、高レベル言語の恩恵は完成した設計の費用効率以上の価値があることがあり、これは、ASICの設計にはあてはまらない。FPGA内にデータフローマシンを構築することで、高レベル言語を用いてFPGAのための効率的なハードウェアを設計することができる。
本明細書に参照により組み込むものとする1997年1月発行の文書「発火を伴うデータフローの表示的意味論(A Denotational Semantics for Dataflow with Firing)」、Edward A.Lee、Electron.Res.Lab.、Univ.California、Berkeley、CA、Memo UCB/ERL M97/3は、データフローマシンの正式な意味論を開示している。この文書に記述された意味論に従って実施されるマシンは当業者がデータフローマシンとして認識する一例である。
本明細書に参照により組み込むものとするWO0159593は、アルゴリズムの高レベルソフトウェアベースの記述のディジタルハードウェア実施へのコンパイルを開示する。プログラミング言語の意味論は、ソフトウェア記述を解析して制御およびデータフローグラフを生成するコンパイルツールの使用を通して解釈される。このグラフは、この時点では最適化、変換および注釈に用いる中間フォーマットである。その結果得られるグラフは、ハードウェア構造のレジスタトランスファレベルまたはネットリストレベル記述に変換される。フローグラフ内のノードが隣接ノードにいつデータを転送するかを決定するために別の制御経路が使用される。制御経路とデータ経路を分離することで並列処理が可能になる。制御経路を用いることで、「波面処理」が達成できる。すなわち、データは制御経路によって制御される波面として実際のハードウェア構造内を通過する。
制御経路の使用は、データ処理中にハードウェアの一部だけを使用できるということを意味する。回路の残りの部分は、第1の波面がフローグラフを通過するのを待っているため、制御経路は新しい波面を送出できる。
データフローマシンは、本明細書に参照により組み込むものとする高レベルソースコード仕様のディジタル論理の記述を生成するための方法を開示するWO2004084086に記載されている。ソースコード仕様の少なくとも一部が、少なくとも1つの入力または1つの出力を備えた機能ノードと、該機能ノード間の相互接続を示す接続とを含む多方向グラフ表現にコンパイルされる。グラフの各機能ノードおよび機能ノード間の各接続に対してハードウェア要素が定義される。最後に、グラフの機能ノードの各々の発火規則が定義される。
上記のデータフローマシンでは、データフローを最適化して性能を改善することが主要な関心事である。したがって、既存のハードウェアの性能を増強する方法が問題である。また、処理におけるデッドロックを回避する方法が問題である。さらに、ハードウェア内に特に自動的にデータフローマシンを実装する方法が問題である。
上記を考慮して、本発明の目的は、上記の問題の1つまたはそれ以上を解決するかまたは少なくとも軽減することである。
本発明の目的は第1のノードから分岐し、第2のノードに収束するデータ経路に関連して性能を向上させることである。
この目的に関連して、本発明は第1のノードで分岐し第2のノードで収束するデータフローを平衡化することでデータフロー内でのノードの停止を回避できるという理解に基づいている。ディジタル論理回路を実装するためのディジタル制御パラメータの生成にこの理解を適用することで、性能を向上させ、および/またはディジタル論理回路が実装されるハードウェアの領域リソースを節約することができる。さらに、本発明は、説明を分かりやすくし、本発明の原理を直ちに理解できるように本開示に提供される例が実際の複雑さを反映していないものの、本発明のディジタル論理回路を実装するのに必要な種類の計算がコンピュータ実装によって容易になるという理解に基づいている。本発明は、さらに、ディジタル論理回路の性能が実装のある部分を高速化することと、実装のある部分を低速化することの両方によって向上するという理解に基づいている。
本発明の第1の態様によれば、少なくとも1つの入力または少なくとも1つの出力を備えた機能ノードと、上記機能ノード間の相互接続を示す接続とを含むディジタル論理回路内にデータフローマシンを実装するためのディジタル制御パラメータを生成するための装置であって、上記ディジタル論理回路が、連続的なトークンがストリーミングされる第1の経路と、上記トークンがストリーミングされる第2の経路とを含み、上記装置が、上記経路へのデータフローの必要な相対スループットのデターミネータと、上記経路のスループットを平衡化させる上記経路の1つへのバッファのアサイナと、最小限の数のバッファで上記必要な相対スループットが得られるまで割り当てられたバッファを除去するように配置された割り当てられたバッファのリムーバと、上記最小限の数のバッファを備える上記ディジタル論理回路を実装するためのディジタル制御パラメータ生成装置とを備える装置が提供される。
これは、上記第1および第2の経路内の停止回数がハードウェアリソースの消費を低減しつつディジタル論理回路全体の性能が低下しないレベルに保たれるということを意味する。
第1および第2の経路は、並列または直列である。
割り当てられたバッファの除去は、上記ディジタル論理回路の上記実施の他の部分、上記経路の相対スループット、および上記ディジタル論理回路の上記実施の残りの相対スループットに対しても利用可能な空間に関して実行することができる。こうして、ディジタル論理回路の全体の性能は向上し、ハードウェアリソースは最適な量だけ使用することができる。
上記経路の少なくとも1つは少なくとも2つの機能ノードを含むことができ、上記機能ノードの第1のノードは、第1の相対スループットを有し、上記ノードの第2のノードは、第2の相対スループットを有し、上記第2の相対スループットは、上記第2の機能ノードの反復またはパイプライン処理によって上記第1の相対スループットに等しいように適合される。これによって、処理経路上の相対スループットの一致が向上し、所与のハードウェアリソースについて全体の性能が向上する。
この原理は、経路が直列であるディジタル論理回路を実施するための装置についても適用できる。ディジタル制御パラメータは、フィールドプログラマブルゲートアレイ(FPGA)を制御してディジタル論理回路を実施することができる。データフローマシンは、高レベルソースコード仕様から生成することができる。この利点は、FPGA用の多数の論理回路を容易に作成でき、FPGAの有用性が大幅に拡大することである。したがって、FPGAを一般のソフトウェアプログラマが超高速の汎用計算装置として使用でき、多数の完全に異なる回路について特定のFPGAを迅速にプログラミングすることができる。ディジタル制御パラメータは、特定用途向けIC(ASIC)またはチップを制御してディジタル論理回路を実施することができる。データフローマシンは、高レベルソースコード仕様から生成できる。この結果、装置のユーザフレンドリで、それ故、効率的な動作が可能になる。
本発明の第2の態様によれば、少なくとも1つの入力または少なくとも1つの出力を備えた機能ノードと、上記機能ノード間の相互接続を示す接続とを含むディジタル論理回路内にデータフローマシンを実施するためのディジタル制御パラメータを生成する方法であって、上記ディジタル論理回路が、連続的なトークンがストリーミングされる第1の経路と、上記トークンがストリーミングされる第2の経路とを含み、上記方法が、上記経路へのデータフローの必要な相対スループットを決定するステップと、上記経路のスループットを平衡化させる上記経路の1つへバッファを割り当てるステップと、最小限の数のバッファで上記必要な相対スループットが得られるまで割り当てられたバッファを除去するステップと、上記最小限の数のバッファを備える上記ディジタル論理回路を実施するためのディジタル制御パラメータを生成するステップとを含む方法が提供される。
上記除去は、上記ディジタル論理回路の上記実装の他の部分、上記経路の相対スループット、および上記ディジタル論理回路の上記実装の残りの相対スループットに対しても利用可能な空間に関して実行することができる。
該方法は、FPGAによってディジタル論理回路を実装するステップを含むことができる。該方法は、特定用途向けIC(ASIC)またはチップによってディジタル論理回路を実施するステップを含むことができる。該方法は、高レベルソースコード仕様からデータフローマシンを生成するステップを含むことができる。
本発明の第3の態様によれば、コンピュータにダウンロードされ、コンピュータによって実行されると、本発明の第2の態様による方法を実行するように配置されたプログラムコードを有するコンピュータプログラム製品が提供される。
本発明の第4の態様によれば、少なくとも1つの入力または少なくとも1つの出力を備えた機能ノードと、上記機能ノード間の相互接続を示す接続とを含むコンピュータ実装可能なディジタル論理回路であって、上記論理回路が、データフローマシン、連続的なトークンがストリーミングされる第1の経路および上記トークンがストリーミングされる第2の経路を実装し、最小限の数の追加バッファを備え、上記経路へのデータフローに必要な相対スループットを決定することと、上記経路の1つにバッファを割り当てて、上記経路のスループットを平衡化させることと、上記必要な相対スループットが得られるまで割り当てられたバッファを除去することとによって上記追加バッファの上記数が最小限にされるコンピュータ実装可能なディジタル論理回路が提供される。
第1および第2の経路は、並列でよい。割り当てられたバッファの除去は、上記ディジタル論理回路の上記実装の他の部分、上記経路の相対スループット、および上記ディジタル論理回路の上記実装の残りの相対スループットに対しても利用可能な空間に関して実行することができる。上記経路の少なくとも1つは、少なくとも2つの機能ノードを含むことができ、上記機能ノードの第1のノードは、第1の相対スループットを有し、上記ノードの第2のノードは、第2の相対スループットを有し、上記第2の相対スループットは、上記第2の機能ノードの反復またはパイプライン処理によって上記第1の相対スループットに等しいように適合される。第1および第2の経路は、直列でよい。該回路は、FPGAによって実装することができる。該回路は、特定用途向けIC(ASIC)またはチップによって実施することができる。データフローマシンを実装するノードおよび接続は、高レベルソースコード仕様から生成することができる。
本発明の第5の態様によれば、少なくとも1つの入力または少なくとも1つの出力を備えた機能ノードと、上記機能ノード間の相互接続を示す接続と、連続的なトークンがストリーミングされる第1の経路と、上記トークンがストリーミングされる第2の経路とを含むデータフローマシンであって、最小限の数の追加バッファを備え、上記経路へのデータフローに必要な相対スループットを決定することと、上記経路の1つにバッファを割り当てて、上記経路のスループットを平衡化させることと、上記必要な相対スループットが得られるまで割り当てられたバッファを除去することとによって上記追加バッファの上記数が最小限にされるデータフローマシンが提供される。
本発明の第6の態様によれば、データフローマシンを実装するディジタル論理回路のバッファの数を決定するための方法であって、連続的なトークンがストリーミングされる第1の経路と上記トークンがストリーミングされる第2の経路とを識別するステップと、上記経路へのデータフローに必要な相対スループットを決定するステップと、上記経路の1つにバッファを割り当てて上記経路のスループットを平衡化させるステップと、最小限の数のバッファで上記必要な相対スループットが得られるまで割り当てられたバッファを除去するステップとを含む方法が提供される。
該方法は、より高速のノード、またはより高速のアルゴリズム、またはこれらの任意の組合せを上記経路の1つに導入してバッファ数を最小化するステップをさらに含むことができる。より高速のノードは、並列またはパイプライン処理を含むことができる。
別の方法としては、該方法は、より小さいノード、またはより要求が少ないアルゴリズム、またはこれらの任意の組合せを上記経路の1つに導入してバッファ数を最小化するステップをさらに含むことができる。より小さいノードは、反復動作、または共用動作、またはこれらの任意の組合せを実行するように配置することができる。
また、本明細書で使用する「共用動作」という用語は、ノードを実装するための1つのハードウェアを他のノードの動作に使用できるという意味である。
本発明の第7の態様によれば、コンピュータにダウンロードされ、コンピュータによって実行されると本発明の第6の態様による方法を実行するように配置されたプログラムコードを有するコンピュータプログラム製品が提供される。
本発明の第8の態様によれば、データフローマシンを実装するノードおよび接続を含むディジタル論理回路内の相対スループットを決定するための方法であって、上記ディジタル論理回路の少なくとも一部分を画定するステップと、上記一部分の各ノードおよび接続に対して相対スループットを決定するステップと、上記ノードおよび接続を通過するデータフロー経路を決定するステップと、各経路を流れるトークンの数を決定するステップと、上記データフロー経路から、各経路およびディジタル論理回路を流れるトークンの数と上記部分の相対スループットとを決定するステップとを含む方法が提供される。
上記部分を画定するステップは、第1のフロー制御ノードと第2のフロー制御ノードとの間の相対スループット領域内のノードおよび接続を決定するステップを含むことができる。フロー制御ノードは、各々ゲート、マージ、非決定的マージ、スイッチ、デュプリケータノード、入力、出力、ソース、シンクまたはこれらの任意の組合せを含むことができる。
本発明の第9の態様によれば、コンピュータにダウンロードされ、コンピュータによって実行されると本発明の第8の態様による方法を実行するように配置されたプログラムコードを有するコンピュータプログラム製品が提供される。
本発明の第2〜第9の態様は、基本的に本発明の第1の態様について上記論証された利点と同様の利点を提供する。
本発明の目的は、ディジタル論理回路におけるデッドロックを回避することである。
この目的に関連して、本発明は、ディジタル論理回路は均一なスループットの領域、すなわち未接続のノードが存在せず、処理ノードへの負荷が平衡化され、他のノードから必要な入力データが提供されるまでどのノードも停止する必要がない領域を含むものと考えることができる。データフローマシンを最適化するため、ハードウェア内のディジタル論理回路の実装にはデータフローグラフを採用してデッドロックを回避することが必要である。これは、決定された均一なスループットの領域からのループ、すなわち、均一なスループットの領域を抜けて決定された均一なスループットの領域外の他の処理ノードに至り、ノードのスループットが低い領域に達し、次に、同じ均一なスループットの領域に再び戻るデータフロー経路を決定することで容易になる。そのようなループは対処しないとデッドロックの原因になり得る。
本発明の第1の態様によれば、少なくとも1つの入力または少なくとも1つの出力を備えた機能ノードと、上記機能ノード間の相互接続を示す接続とを含むディジタル論理回路内にデータフローマシンを実施するためのディジタル制御パラメータを生成するための装置であって、機能ノードと接続の第1のセットが、第1の均一なスループットの領域内に含まれ、上記第1のセットが、上記第1の均一なスループットの領域の第1のノードから上記第1の均一なスループットの領域外の第2の領域へ第1の接続を含み、上記第2の領域が、上記第1の均一なスループットの領域の第2の機能ノードへの第2の接続を含み、上記ディジタル論理回路が、上記第1のノードから上記第2のノードへの上記第2の領域内の上記第1および第2の接続を含む第2の経路を2つのトークンが通過する間に上記第1のノードから上記第2のノードへ上記第1の領域内の第1の経路を通過するトークンの最大数と同じ数の追加バッファを少なくとも備え、上記バッファが、上記第2の経路上に配置されてデッドロックを防止する装置が提供される。
この利点の1つは、バッファが処理中に必要なトークンを利用可能にするという点で、その結果、デッドロックが回避される。
第1および第2の接続、すなわち、第2の経路を含むループによるデッドロックを確実に防止するため、第1および第2のノード間の経路上のバッファの数は、第1の経路を通過するトークンの数を第2の経路を通過するトークンの数で割った値になるように構成することができる。
ループは、エッジ、すなわち、純粋なワイヤのみでもよいが、第1の均一なスループットの領域内のエッジよりスループットが低いことに留意されたい。
第2の領域は、上記第2の経路内の少なくとも1つの機能ノードをさらに備えることができる。
上記1つまたは複数のバッファは、上記第1の均一なスループットの領域に配置することができる。
該装置は、上記ディジタル論理回路の上記実施の他の部分の利用可能な空間および上記ディジタル論理回路の上記実装の残りのスループットに対して上記第1の均一なスループットの領域および上記第2の均一なスループットの領域のスループットを最適化するように配置することができる。この最適化は、上記ディジタル論理回路の機能ノードまたは機能ノードのグループの反復またはパイプライン処理、またはこれらの任意の組合せを含むことができる。
ディジタル制御パラメータは、フィールドプログラマブルゲートアレイ(FPGA)を制御してディジタル論理回路を実装することができる。データフローマシンは、高レベルソースコード仕様から生成することができる。この利点は、FPGA用の多数の論理回路を容易に作成でき、FPGAの有用性が大幅に拡大することである。したがって、FPGAを一般のソフトウェアプログラマが超高速の汎用計算装置として使用でき、多数の完全に異なる回路について特定のFPGAを迅速にプログラミングすることができる。
ディジタル制御パラメータは、特定用途向けIC(ASIC)またはチップ、またはこれらの任意の組合せを制御してディジタル論理回路を実装することができる。
本発明の第2の態様によれば、少なくとも1つの入力または少なくとも1つの出力を備えた機能ノードと、上記機能ノード間の相互接続を示す接続とを含むディジタル論理回路によって実装されるデータフローマシンにおけるデッドロックを防止するための方法であって、1つまたは複数の機能ノードまたは第1の均一なスループットを備えた接続を含む第1の均一なスループットの領域を決定するステップと、上記第1の均一なスループットの領域から1つまたは複数の機能ノードまたは接続を含む第2の領域への第1の接続を決定するステップと、上記第2の領域から上記第1の均一なスループットの領域の第2の接続を決定するステップと、上記第1のノードから上記第2のノードへ上記第2の領域内の上記第1および第2の接続を含む第2の経路を2つのトークンが通過する間に上記第1のノードから上記第2のノードへ上記第1の領域内の第1の経路を通過するトークンの最大数と同じ数のバッファを追加し、上記第2の領域内の上記ディジタル論理回路への上記第2の経路上に上記バッファを配置して上記第1の接続および上記第2の接続によるデッドロックを防止するステップとを含む方法が提供される。
該方法は、第1の経路を通過するトークンの数を第2の経路を通過するトークンの数で割った値になるように第1および第2のノード間の上記経路上のバッファの数を割り当てることができる。
さらに第2の領域は、上記第1および第2の接続とを含む経路内に少なくとも1つの機能ノードを含むことができる。
上記第1の均一なスループットの領域内に1つまたは複数のバッファを追加することができる。
該方法は、さらに、上記ディジタル論理回路の上記実装の他の部分の利用可能な空間に関して、上記第1の均一なスループットの領域および上記第2の領域のスループットと上記ディジタル論理回路の残りのスループットを最適化するステップを含むことができる。この最適化は、上記ディジタル論理回路の機能ノードまたは機能ノードのグループの反復またはパイプライン処理、またはこれらの任意の組合せを含むことができる。
該方法は、FPGAによって前記ディジタル論理回路を実装するステップを含むことができる。該方法は、特定用途向けIC(ASIC)またはチップによってディジタル論理回路を実装するステップを含むことができる。該方法は、高レベルソースコード仕様から前記データフローマシンを生成するステップを含むことができる。
本発明の第3の態様によれば、コンピュータにダウンロードされ、コンピュータによって実行されると本発明の第2の態様による方法を実行するように配置されたプログラムコードを有するコンピュータプログラム製品が提供される。
本発明の第4の態様によれば、データフローマシンを実装する少なくとも1つの入力または少なくとも1つの出力を備えた機能ノードと、上記機能ノード間の相互接続を示す接続とを含むコンピュータ実装可能なディジタル論理回路であって、機能ノードと接続の第1のセットが、第1の均一なスループットの領域内に含まれ、上記第1のセットが上記第1の均一なスループットの領域の第1のノードから上記第1の均一なスループットの領域外の第2の領域への第1の接続を含み、上記第2の領域が上記第1の均一なスループットの領域の第2の機能ノードへの第2の接続を含み、上記ディジタル論理回路が、上記第1のノードから上記第2のノードへの上記第2の領域内の上記第1および第2の接続を含む第2の経路を2つのトークンが通過する間に上記第1のノードから上記第2のノードへ上記第1の領域内の第1の経路を通過するトークンの最大数と同じ数の追加バッファを備え、上記バッファが、上記第2の経路上に配置されて、上記第1の接続および上記第2の接続によるデッドロックを防止するディジタル論理回路が提供される。
この利点は、ソフトウェア支援によって容易に実施でき、データフローマシンの高い性能を可能にするディジタル論理回路である。さらに、本発明の上記各態様に示した利点と同様の利点が得られる。
第1および第2の接続を含むループによるディジタル論理回路におけるデッドロックを確実に防止するため、上記第1および第2のノード間の上記経路上のバッファの数が、第1の経路を通過するトークンの数を前記第2の経路を通過するトークンの数で割った値になるように構成することができる。
第2の領域は、上記第2の経路内の少なくとも1つの機能ノードをさらに備えることができる。上記1つまたは複数のバッファは、上記第1の均一なスループットの領域に配置することができる。
該回路は、上記ディジタル論理回路の上記実装の他の部分の利用可能な空間および上記ディジタル論理回路の上記実装の残りのスループットに対して上記第1の均一なスループットの領域および上記第2の領域のスループットに対して最適化することができる。この最適化は、上記ディジタル論理回路の機能ノードまたは機能ノードのグループの反復またはパイプライン処理、またはこれらの任意の組合せを含むことができる。
該回路は、FPGAによって実装することができる。該回路は、特定用途向けIC(ASIC)またはチップによって実装することができる。データフローマシンを実施するノードおよび接続は、高レベルソースコード仕様から生成することができる。
本発明の第5の態様によれば、少なくとも1つの入力または少なくとも1つの出力を備えた機能ノードと、上記機能ノード間の相互接続を示す接続とを含むデータフローマシンであって、機能ノードと接続の第1のセットが、第1の均一なスループットの領域内に含まれ、上記第1のセットが、上記第1の均一なスループットの領域の第1のノードから上記第1の均一なスループットの領域外の第2の領域への第1の接続を含み、上記第2の領域が、上記第1の均一なスループットの領域の第2の機能ノードへの第2の接続を含み、上記ディジタル論理回路が、上記第1のノードから上記第2のノードへの上記第2の領域内の上記第1および第2の接続を含む第2の経路を2つのトークンが通過する間に、上記第1のノードから上記第2のノードへ上記第1の領域内の第1の経路を通過するトークンの最大数と同じ数の追加バッファを備え、上記バッファが、上記第2の経路上に配置されて、上記第1の接続および上記第2の接続によるデッドロックを防止するデータフローマシンが提供される。
該データフローマシンは、FPGA、ASICまたはチップによって実装することができる。該データフローマシンは、高レベルソースコード仕様から生成することができる。該データフローマシンは、自動生成することができる。
本発明の目的は、特にデータフローマシンを実施することである。
この目的に関連して、本発明は、データフローマシン内のノードが3つの信号セットを有することができるという理解に基づいている。2つのセットは、データ信号およびデータ信号の有効性を表す順方向に動作する信号セットであり、1つのセットは、消費信号を表す逆方向に動作する信号セットである。データ信号の有効性は、ノードのデータ入力および出力に有効な入力データがあるか否かに関する情報を保持し、消費信号は、ノードの出力データが消費されたか、また先行ノードからデータを消費するか否かに関する情報を保持する。これによって、データフローマシンの発火規則を適用することができる。非同期データフローを有効にするには、データフローマシンを実施することで一定の注意を払う必要がある。
本発明の第1の態様によれば、複数のノードと、上記ノードを接続してデータフローマシンを実施する複数の接続とを含むコンピュータ実施可能なディジタル論理回路であって、上記ノードの各々が、入力において提供される先行ノードからの少なくとも1つのデータ信号と、出力において提供される後続ノードへの少なくとも1つのデータ信号とを含む、データ信号用の少なくとも1つの信号セットと、入力において提供される先行ノードからの少なくとも1つのデータ有効信号と、出力において提供される先行ノードからの少なくとも1つのデータ有効信号とを含む、上記データ信号入力および出力上に有効データがあるか否かに関する情報を保持するデータ有効信号用の少なくとも1つの信号セットと、入力において提供される後続ノードからの少なくとも1つの消費信号と、出力において提供される先行ノードへの少なくとも1つの消費信号とを含む、上記データ信号が消費されているか否かに関する情報を保持する消費信号用の少なくとも1つの信号セットとを含み、第1の消費信号に論理的に依存する上記データ有効信号のいずれかへの論理的依存が上記第1の消費信号について除外され、第1の有効データ信号に論理的に依存する上記消費信号のいずれかへの論理的依存が上記第1の有効データ信号について除外されるように上記ノードの各々が配置されるコンピュータ実施可能なディジタル論理回路が提供される。
これは、ノードの提供されるモジュール性のためにディジタル論理回路を自動実装によって提供することができることを意味する。
上記ノードの各々は、第1の数のデータ信号入力と第2の数のデータ信号出力とを含み、上記第1の数の有効データ入力信号と消費入力信号を含み、上記第2の数の有効データ出力信号と消費出力信号とを含むことができる。
これは、データの入力と出力のすべてに対してデータフロー制御が提供されることを意味する。
本発明は、上記データフローマシンの少なくとも一部が非同期であることを可能にする。
ディジタル論理回路の少なくとも一部は、コンピュータによって生成することができる。回路は、フィールドプログラマブルゲートアレイ(FPGA)、特定用途向けIC(ASIC)またはチップ、またはこれらの任意の組合せによって実装することができる。
ノードは、ノードの動作を実行するための組合せ論理、パイプライン、または状態機械、またはこれらの任意の組合せを含むことができる。
データフローマシンを実装するノードおよび接続は、高レベルソースコード仕様から生成することができる。
本発明の第2の態様によれば、データフローマシンを備えるディジタル論理回路をハードウェア内に自動実装するための方法であって、抽象的なデータフローマシンを決定するステップと、上記データフローマシンのノードおよび接続を決定するステップであって、上記ノードの各々が、入力において提供される先行ノードからの少なくとも1つのデータ信号と、出力において提供される後続ノードへの少なくとも1つのデータ信号とを含む、データ信号用の少なくとも1つの信号セットと、入力において提供される先行ノードからの少なくとも1つのデータ有効信号と、出力において提供される先行ノードからの少なくとも1つのデータ有効信号とを含む、上記データ信号入力および出力上に有効データがあるか否かに関する情報を保持するデータ有効信号用の少なくとも1つの信号セットと、入力において提供される後続ノードからの少なくとも1つの消費信号と、出力において提供される先行ノードへの少なくとも1つの消費信号とを含む、上記データ信号が消費されているか否かに関する情報を保持する消費信号用の少なくとも1つの信号セットとを含むステップと、第1の消費信号に論理的に依存する上記データ有効信号のいずれかへの論理的依存が、上記第1の消費信号について除外され、第1の有効データ信号に論理的に依存する上記消費信号のいずれかへの論理的依存が、上記第1の有効データ信号について除外される上記ノードの発火規則を決定するステップと、上記ノード、接続、および発火規則をプログラマブルハードウェアに割り当てるステップとを含む方法が提供される。
該方法は、FPGA、ASICまたはチップ、またはこれらの任意の組合せによってディジタル論理回路を実装するステップをさらに含むことができる。
該方法は、高レベルソースコード仕様から上記データフローマシンを生成するステップをさらに含むことができる。
本発明の第3の態様によれば、ディジタルコンピュータ機能を有する電子装置のメモリ内に直接ロード可能なコンピュータプログラム製品であって、上記電子装置によって実行されると本発明の第2の態様による方法を実行するソフトウェアコード部分を含むコンピュータプログラム製品が提供される。
本発明の第4の態様によれば、本発明の第1の態様によるデータフローマシンを含むディジタル論理回路を実装するためのディジタル制御パラメータを生成するための装置が提供される。該装置は、本発明の第2の態様による方法を実行するように配置される。
ディジタル制御パラメータは、フィールドプログラマブルゲートアレイ(FPGA)を制御してディジタル論理回路を実装することができる。データフローマシンは、高レベルソースコード仕様から生成することができる。この利点は、FPGA用の多数の論理回路を容易に作成でき、FPGAの有用性が大幅に拡大することである。したがって、FPGAを一般のソフトウェアプログラマが超高速の汎用計算装置として使用でき、多数の完全に異なる回路について特定のFPGAを迅速にプログラミングすることができる。
本発明の第2、第3、および第4の態様の利点は、本発明の第1の態様による有利なディジタル論理回路が直ちに可能になるという点である。
本発明の目的は、データフローマシンのループを実装する構造を提供することである。
この目的に関連して、本発明は、データフローマシンの基本機構が、ノードが入力をすべて有する時に動作を実行する、すなわち、入力を消費し、関連する出力(もしあれば)を生成するという理解に基づいている。ノードは、入力が十分になるまでいかなる動作も実行しない。事前に到着した任意の入力は、ノードの動作にとって十分な入力が到着するまでノードの前段のエッジで待機する。ノードの出力エッジが占有されていると、エッジが解放されるまで起動を遅らせる。この機能は、一部のエッジでの初期トークン(値)を用いたforループ内で利用される。
本発明の第1の態様によれば、反復する新しい値の入力と、反復された値の入力と、反復された値の出力とを含むマージノードを備え、マージノードの反復された値の出力に接続された入力を有するループボディ関数ユニットと、ループボディ関数ユニットの出力に接続された反復された値の入力と、マージノードの反復された値の入力に接続された反復された値の出力と、ループを抜ける出力とを含むスイッチノードとを備えるデータフローマシンが提供される。
データフローマシンは、反復する新しい値の入力と、反復された値の入力と、ループボディ関数ユニットの入力に接続された反復された値の出力とを含む第2のマージノードを含むことができる。
データフローマシンは、ループボディ関数ユニットの出力に接続された反復された値の入力と、マージノードの反復された値の入力に接続された反復された値の出力と、ループを抜ける出力とを備える第2のスイッチノードを備えることができる。このマージノードは、存在する唯一のマージノードでよく、または、例えば、foreachループ、forループ、whileループ、do−whileループ、リエントラントループ、またはこれらの任意の組合せを実装するためのマージノードが構造内にいくつか存在する場合、任意のマージノードでよい。ループは、スカラー上で、またはコレクション全体、すなわち、リストまたはベクトル全体を反復することができる。リスト全体を反復するとは、一時に1つの要素がコレクションから取り出されることを意味する。ベクトル全体を反復するとは、コレクションのすべての要素が同時に反復されることを意味する。
ここで、「接続された」という用語は、直接接続された場合と、バッファ、スプリッタ、ジョイナ、デュプリケータ、別のループボディ関数などの1つまたは複数の別の要素を介して接続された場合の両方を意味する。
一般に、特許請求の範囲で使用するすべての用語は、本明細書で特に明示されない限り、技術分野での普通の意味に従って解釈すべきものである。
「ある(a/an)/該(the)[要素、装置、構成要素、手段、ステップ等]」への言及は、明示的に断りのない限り、上記要素、装置、構成要素、手段、ステップ等の少なくとも1つの例を指すものと率直に解釈すべきである。本発明で開示するいかなる方法のステップも、明示的に断りのない限り、開示された順序で厳密に実行される必要はない。
「第1の」、「第2の」、等の用語は、明示的に断りのない限り、異なる要素、手段等を定義するとだけ解釈すべきである。
本発明のその他の目的、特徴および利点は、下記の詳細な開示、添付の特許請求の範囲および図面から明らかになるだろう。
本発明の上記および追加のその他の目的、特徴および利点は、同様の要素に同じ参照番号が使用される添付の図面を参照しながら以下の例示的で非限定的な本発明の好ましい実施形態の詳細な説明を読むことで理解を深めることができる。
図1は、各々が少なくとも1つの入力および/または少なくとも1つの出力を含む複数のノード102、104、106、108、110、112、114を含むデータフローグラフの一部の一例を示す図である。データフローグラフのノード間のデータフローは、アーク101、103、105、107、109、111、113,115、117によって示される。上記ノード102、104、106、108、110、112、114の各々は、それぞれ上記各ノードの入力にあるデータについて実行される論理演算を表す。普通トークンと呼ばれる上記ノードの入力にあるデータは上記アークによって保持されると考えることができ、したがって、上記アークに保持されるデータは、それぞれアークの起点のノードの出力である。図1の例に関して、アーク101上のデータは、ノード102によって処理され、アーク103に出力される。ノード104の入力上にあるアーク103上のデータは、ノード104によって処理され、ノード104からの出力は、アーク105および117に出力される。アーク117は、ノード112に入力されるが、ノード112は、やはりノード112に入力されるアーク111上に関連するデータがないためこのデータを処理できない。したがって、ノード104は、アークおよびノード105、106、107、108、109、110、111を含み、第2の経路130と考えられるアーク117を含む第2の経路に並列の第1の経路120上のノード106、108、110によって対応するデータが処理されるまで処理を停止しなければならない。アーク117上にあるデータに対応するアーク111上のデータがある時には、ノード112はデータを処理し、ノード104は停止状態を解除でき、アーク103上にある次のデータを処理できる。この停止処理によってデータ処理の性能が低下する。本発明のある実施形態によれば、経路120のノード106、108、110の処理時間に対応するいくつかのバッファが追加される。しかし、バッファの数はかなり多くなり、データフローグラフに対応するディジタル論理回路を実装するハードウェア上の利用可能な空間は十分でないことがある。したがって、ディジタル論理回路を実装するための制御パラメータを生成する時には、データ処理の高速化とハードウェア内の、例えば、FPGA上の実装のための利用可能な空間の両方を考慮して最適化が実行される。この最適化は、図2に示す適合データフローグラフをハードウェア内に実装する結果を生むことがある。図2のデータフローグラフは、図1のデータフローグラフに対応するノードおよびアークを含み、図1のアーク117の代わりに、アーク131、133、135、137、139およびバッファ132、134、136、138が提供される。ここで、ディジタル論理回路を実装するためのディジタル制御パラメータを生成するための装置によって考察がなされ、上記装置は、例えば、ノイマン型プロセッサを含み、最適化を実行し制御パラメータを生成するダウンロードされたソフトウェアを備えたコンピュータなどである。それ故、該装置は、また、データフロー解析を実行して、性能および領域消費の両面からバッファの必要性およびバッファ数、ならびにより少ないバッファを割り当てる含意を決定できる。例えば、領域が問題でない場合、例えば、ディジタル論理回路が利用可能なハードウェアリソースと比べて小さい時、バッファ数は性能の観点からのみ最適化される。領域が問題の場合、図1および図2に示す部分が一部にすぎない実装全体は、実装の全体としての性能が領域リソースについて最適化されるように考慮される。本発明のある実施形態による手法は、並列の経路が相対スループットに関して平衡化されるようにバッファを割り当て、2つの並列の経路の所望の相対スループット、すなわち、ディジタル論理回路の他の部分が停止しない程度のスループットを維持しながらできるだけ多くのバッファを除去することである。その場合、実装の他の部分は、いずれにせよ性能を制約し、領域リソースは、データフローグラフ実装の別の部分を新たに最適化することで有効利用できるので、上記の例のバッファの数は、2つのバッファまで低減できる。図1および図2の例は、一方の経路上に処理を含む合理的な数のノードが提供され、他方の経路上にデータを転送するアークだけが提供される簡単なケースを示す。しかし、本発明は、各々が複数のノードを備え、異なる処理時間を必要とする2つの経路上に同等に適用できる。ここで、「チョーク」と言う表現を導入するが、これは、1つの動作または動作のグループにどれ位の処理努力が必要かを示す概念である。チョークは、ノードまたはノードのグループの相対スループットの逆数と考えられる。この表現を定義すると、本発明の本質は並列データフロー経路のチョークを最適化して実装するディジタル論理回路の性能を向上させることとして表現できる。
いくつかの処理、パイプライン処理、反復およびループ処理を実装することが考えられる。つまり、パイプライン処理は、動作のチョークを低減できるが領域リソースの使用を増加させ、動作のデータフローのためにいつも可能であるとは限らない。処理の反復は、チョークを増加させるが、領域リソースの使用を低減する。デッドロックを回避するため、データフロー内のループを考慮する必要がある。
図3は、ノード300から分岐しノード306に収束する第1の経路302および第2の経路304を含むデータフローグラフの一部を示す図である。第1の経路302は、各々が4つの反復を含むノード311、312、313内の3つの動作を含む。したがって、第1の経路のチョークは、3×4、すなわち、12である。第2の経路は、ノード314内に1つの動作を含み、それ故、1のチョークを有する。2つの経路302、304のチョークは、12である。これは、第2の経路304のノード314が、第1の経路の最後のノード313からの結果を待って停止し、ノード306にその結果を処理させなければならないためである。2つの経路302、304を最適化する、すなわち、平衡化して性能を向上させるため、データフローグラフを図4に示すように適合させ、第2の経路のノード311、312、313の動作の反復が図4のノード311’、312’、313’が示すようにパイプライン処理されるようにすることができる。それ故、第2の経路302’のチョークは、3である。図3の第2の経路304のノード314の動作は、図4のノード314’に示すように、2回の反復で実行でき、それ故、いくらかハードウェア領域を節約できる。第2の経路は、チョークが2であるがバッファ315が第2の経路304’に挿入され、第2の経路304’は、チョークが3になる。したがって、停止しなければならないノードはなく、クロック周期ごとに、対応するデータがノード306に提供される。
本発明の手法を適用して多数の順列が可能である。空間の節約のため、ノード314に反復をさらに導入し、および/または経路304にさらにバッファを導入することで経路302、304を平衡化して停止を回避できる。また、第1の経路320内のノードの1つまたは2つのみをパイプライン処理し、第2の経路304の選択した測定値と併用してチョークを平衡化することができる。
ディジタル論理回路は、ASIC,FPGA、またはPLDのプログラミングに用いるディジタル制御パラメータを生成することによって実装される。ディジタル制御パラメータを生成するための装置は、普通、プロセッサと該プロセッサによって実行されるコンピュータプログラムを備える。コンピュータプログラムは、プロセッサが制御パラメータの生成を支援してディジタル論理回路を実装するように配置される。それ故、該装置は、上記の本発明のディジタル制御パラメータを生成するように適合されている。
本発明は、同期システム、非同期システム、および同期および非同期部分の両方を備えるシステムに適用可能である。したがって、相対スループットという用語を使用している。特定のシステムに使用できる相対スループットを表す他の用語は、例えば、帯域幅、チョークなどである。異なる相対スループットを備えた領域は、データフローグラフ全体をノードごとに解析することで画定することができる。発火のたびに、すべてのノードがすべてのアークで同じ数のトークンを生成し消費するわけではない。これは、ゲート、マージ、非決定的マージ、スイッチ、入力、出力、ソース、シンクおよびデュプリケータノードなどのデータフロー制御ノードにあてはまる。そのようなノードは、それぞれ各アーク上で生成され消費されるトークンの数の間にある関係を有する。この関係は、任意のアーク間、入力−出力間、出力−出力間、および入力−入力間にあてはまる。そのようなノードは、均一なスループットを備えた領域の境界を画定する。異なる入力/出力アーク上のアクティビティの関係は、相対スループットの関係を定義する。
相対スループットの平衡化は、スループットを増加させるか、または領域内のハードウェアリソースの使用を減少させて、領域が要求する相対スループットに関してハードウェアの使用が最小限になるようにすることである。目標は、一定量のハードウェアリソースで最大の性能を達成することである。別の目標は、各領域での一定の性能を達成するために使用されるハードウェアリソースの使用を最小限にすることである。
スループットは、より高速のハードウェア要素を使用し、ノード内の動作を実行する別のより高速のアルゴリズムを使用し、ノードを複製して並列またはパイプライン処理を可能にすることで増加できる。バッファの場合、領域を通過するすべての経路が少なくともほぼ等しい数のバッファを有するようにする方法がある。
他方、例えば、サイズが小さいハードウェア要素を使用し、反復機能を使用し、ハードウェアリソースが少なくてすむアルゴリズムを使用し、および/または、同じまたは同様の動作を実行するノードが同じハードウェアリソースを共用できるようにすることでスループットを低減できる。ここで、バッファに関して、すべての経路上のバッファの数が同じではない場合、より並列でない動作が可能になり、性能の低下を意味するが、使用するバッファの数は減る。
バッファの数を増減させてスループットを適合させる理由は、2つに分岐し、再びマージするデータ経路を想像することで示される。一方の経路が長いパイプラインを含み、そこに供給する独立した値が十分ある場合、すなわち、パイプラインが満杯の場合、他方の経路は、1つのトークンしか保持できず、短い経路が満杯の時に経路が分岐するデュプリケータノード内で停止が発生する。短い経路上のトークンは、結合できるようにパイプラインを通るトークンが生成されるのを待つ。したがって、一度に1つの要素だけがパイプライン内で活動状態になる。両方の経路が同じ数のトークンを保持できるならば、パイプラインは満杯になり得る。本発明は、選択した数のバッファが非活動状態になっている時に必要なスループットを選択できるように短い経路上のバッファの数を選択することを提案する。
特定の相対スループットが、最大相対スループットのパーセンテージ(0と1の間の小数)として測定されると仮定すると、特定の相対スループットを達成するのに必要なバッファの数は、最大相対スループットに特定の相対スループットを掛けた値について2つの経路を平衡化するのに必要なバッファの数に等しい。バッファに関して、両方の経路上に同数のバッファが存在すれば、最大相対スループットについて2つの経路が平衡化される。
図5は、均一なスループットの領域1102内の、各々が少なくとも1つの入力および/または少なくとも1つの出力を含む複数のノード1100と均一なスループットの領域1102外の可能なノード1104とを含むディジタル論理回路を表すデータフローグラフの一部の一例を示す図である。上記可能なノード1104は、第2の均一なスループットの領域(図示せず)を形成する複数のノードおよび接続を含むことができる。データフローグラフのノード間のデータフローは、アークで示される。上記ノード1100、1104の各々は、それぞれ上記ノードの入力にあるデータについて実行される論理演算を表す。普通トークンと呼ばれる上記ノードの入力にあるデータは、上記アークによって保持されると考えることができ、したがって、上記アークに保持されるデータは、それぞれアークの起点のノードの出力である。図5の例に関して、均一なスループットの領域1102、すなわち、処理ノードへの負荷が平衡化され、他のノードから必要な入力データが提供されるまでどのノードも停止する必要がない領域は、ノード1100の1つから均一なスループットの領域1102外のノード1104への接続1106と、均一なスループットの領域1102外のノード1104から均一なスループットの領域内のノードへの接続1108、すなわち、均一なスループットの領域を抜け、次に、同じ均一なスループットの領域に再び戻るデータフロー経路を含む。データフローマシンを最適化するために、ハードウェア内のディジタル論理回路の実装にはデッドロックを防止するためのデータフローグラフの適応が必要である。そのようなループは対処しないとデッドロックの原因になり得る。
領域内のすべてのノードは、直接、または他のノードを介して領域の入力と出力の両方に接続しなければならない。ノード1104はオプションであるため、本発明は、均一なスループットの領域1102のあるノードから均一なスループットの領域1102の別のノードへの接続を含む構成を対象とする。
図6は、均一なスループットの領域1102内のノードおよび接続が複合ノード1200と考えられる、図5のデータフローグラフの一部の適合図である。図5の接続1106、1108およびノード1104を含む経路をループ1202とみなすことで、ディジタル論理回路を実装するためのディジタル制御パラメータを生成する時のデッドロックの問題に対処できる。確実にループ1202によるデッドロックが発生しないようにするため、本発明では、複合ノード1200、すなわち、図5の均一なスループット領域1102を通過するトークンの数をループ1202を通過するトークンの数で割った値に等しい数のバッファ1204を複合ノード1200の入力と出力の間のすべての経路上に配置する。本発明をいくつかの実施形態を参照しながら説明してきたが、上記実施形態とは異なる他の実施形態も添付の特許請求の範囲に記載する本発明の範囲に同様に含まれることは当業者には明らかであろう。
本発明は、同期システム、非同期システム、および同期および非同期部分の両方を含むシステムに適用可能である。したがって、相対スループットという用語を使用している。特定のシステムに使用できる相対スループットを表すその他の用語は、例えば、帯域幅、チョークなどである。異なる相対スループットを備えた領域は、データフローグラフ全体をノードごとに解析することで画定できる。発火のたびにすべてのノードがすべてのアークで同じ数のトークンを生成し消費するわけではない。これは、ゲート、マージ、スイッチ、およびデュプリケータノードなどのデータフロー制御ノードにあてはまる。そのようなノードはそれぞれ各アーク上で生成され、消費されるトークンの数の間にある関係を有する。この関係は、任意のアーク間、入力−出力間、出力−出力間、および入力−入力間にあてはまる。そのようなノードは均一なスループットを備えた領域の境界を画定する。異なる入力/出力アーク上のアクティビティの関係は、相対スループットの関係を定義する。
高レベル言語でのハードウェア設計は一般に望ましいが、FPGAの場合には特別の利点がある。FPGAは、再構成可能であるため、単一のFPGAが多数の異なるハードウェア設計を受け入れることができる。この能力を十分に活用するため、従来のハードウェア記述言語よりもはるかに簡単な設計の記述方法が必要である。FPGAでは、高レベル言語の恩恵は、完成した設計の費用効率以上の価値があることがあり、これはASICの設計にはあてはまらない。
ディジタル論理回路内にデータフローマシンを実装するために、各ノードは、ノードが出力においてデータを提供し、入力においてデータを消費する条件を定義する発火規則を備える。より詳細には、発火規則は、データフローグラフ内のデータのフローを制御する機構である。発火規則を用いて、データはノードの入力から出力へ転送され、その間データはノードの関数に従って変換される。ノードの入力から受け取ったデータは、その入力に実際に利用可能なデータがある場合にのみ消費される。これに対応して、データは、データを受け入れる空間があってはじめて出力において生成される。しかし、場合によっては、古いデータが経路を塞いでいても出力においてデータを生成することができる。出力の古いデータは新しいデータに入れ替えられる。
一般的な発火規則に対する仕様は通常、以下の条件を含む。
1)ノードが入力データを消費するためのノードの各入力に対する条件
2)ノードが出力においてデータを生成するためのノードの各出力に対する条件
3)ノードの関数を実行するための条件
上の条件は普通、入力データの値、入力または出力における有効データの存在、入力に適用される関数の結果または関数の状態によって変化するが、原則的にはシステムが利用可能なあらゆるデータによって変化する。本明細書に参照により組み込むものとするEdward A.Lee著の文書「発火を伴うデータフローの表示的意味論(A Denotational Semantics for Dataflow with Firing)」に記述された発火規則の意味論を遵守してもよい。非決定的な動作の場合、ハードウェアに特別の並べ替えおよびトークン照合機能を追加して、非決定的動作後のマシンの動作にトークンの順序が影響しない限り、データフローマシンの決定的動作を確実に行うことができる。
システムのノードの一般的な発火規則を確立することで、専用の制御経路を必要とすることなくさまざまなタイプのプログラムを制御することができる。しかし、特別なケースで、発火規則によって制御フローを実施することができる。別の特別のケースは、ノードの全ての入力においてデータが利用可能なときに限って全てのノードが動作する発火規則がないシステムである。
データフローマシンを作成するツールから自動的にディジタル論理回路を実装することができるためには、ディジタル論理回路の実施にモジュール式手法を適用すると有利である。それ故、異なるタイプのノードが、ノードの特定の機能に適合していても同様の種類のデータフロー制御を提供しなければならない。一般に、データフロー制御の実装に当たっては、消費信号に影響される有効データ信号が前記消費信号に影響してはならず、有効データ信号に影響される消費信号が上記有効データ信号に影響してはならない。
これを達成する簡単な方法は、マシン内の全てのノードについて2方向のうち1つの方向を選択することである。いずれのノードも消費経路に依存する有効経路を含むことができ、またはノードは、有効経路に依存する消費経路を含むことができる。この手法によって組合せループを生成することなくディジタル論理回路内にデータフローマシンを容易に自動作成することができる。
発火規則の関数の具体例を、1つのデータ入力Din0で関数を実行し1つのデータ出力Dout0を与える図7に示すノードによって説明できる。このノードは、データフロー制御のための有効データ入力Vin0、消費データ入力Cout0、データ有効出力Vout0、および消費データ出力Cin0を含む。ここで各信号の表記に留意されたい。「in」は、1つまたは複数の先行ノードへのインタフェース、「out」は、1つまたは複数の後続ノードへのインタフェースを指す。この表記を明細書と添付の図面で一貫して使用する。図では、入力はすべて左側に配置され、出力はすべて右側に配置されていて、先行ノードおよび後続ノードへのインタフェースに従ってまとめられてはいないことに留意されたい。それ故、Cout0は、後続ノードからの入力で、Cin0は先行ノードへの出力である。先行および後続は、データフローに従って解釈する。
図7に示すノードに話を戻すと、このノードは以下のように記述できる。
Figure 2009512089
その他の例として複数のトークンについて関数を実行するノードを挙げる。図8は、オペランドとして2つのトークンで関数が実行される例である。このノードは、以下のように記述できる。
Figure 2009512089
別の例として複数の出力を提供する関数を1つのトークンで実行するノードを挙げる。図9は、関数が2つの出力を与える例である。別の例として条件次第で複数のトークンの1つを出力に移動することで複数の入力トークンのマージを実行するノードを挙げる。図10は、入力トークンが2つの例であり、以下のように記述できる。
Figure 2009512089
別の例として条件次第でノードが複数の出力の1つで入力トークンを生成する、スイッチを実行するノードを挙げる。図11は、出力が2つの例であり、以下のように記述できる。
Figure 2009512089
別の例としてデータが優先順位を付けた各入力のどこにあるかに応じて複数のトークンの1つを出力に移動することで複数の入力トークンの優先マージを実行するノードを挙げる。図12は、入力が2つの例である。このノードは以下のように記述できる。
Figure 2009512089
図13は、条件が真の場合にトークンを通過させる真ゲートを示す。このノードは以下のように記述できる。
Figure 2009512089
図14は、真であれば値を消費し、偽であれば複製を実行するノードを示す。図14で、条件は、条件入力が偽で複製が実行されるが、他の条件では類似の実施形態を実行することができる。図15は、以下に説明するカッター機能(cutter function)を実行するノードを示す。ノードの重要なタイプとして値を通過させる前に格納するバッファがある。バッファのサイズすなわち長さは1つの格納ステップから多数の格納ステップにわたる。図16は、長さが1のバッファノードを示す。より大きいサイズのバッファは入力および出力を管理する制御論理をさらに備える。図17は、いわゆるブールストリーム、すなわち、例えばカウンタが示す数の複数の偽トークンを生成し、次に、新しい真のトークンを生成し、次に、このシーケンスを反復する関数を実行するノードを示す。
図18は、図10に示す2つの値のマージノードと対比できる4つの値のマージノードを示す。このノードは以下のように記述できる。
Figure 2009512089
図19は、図11に示す2つの値のスイッチノードと対比できる4つの値のスイッチノードを示す。このノードは以下のように記述できる。
Figure 2009512089
発火規則の関数の別の例として、条件が偽であればトークンを通過させ、それでなければトークンを除去するいわゆる偽ゲート、すなわち、上記の真ゲートの逆のゲートを含むノードを挙げることができる。このノードは2つのデータ入力と1つのデータ出力とを含む。したがって、このノードは2つの有効データ入力と、2つの消費入力と、1つのデータ有効出力と、1つの消費出力とを含む。有効データ出力は2つの有効データ入力と第1のデータ入力の論理によって形成される。データ出力は第2のデータ入力の値を与えられる。消費入力は第1のデータ入力、消費出力、および2つの有効データ入力の論理によって形成される。ノードの関数は以下のように記述できる。
Figure 2009512089
それ故、各ノードはあらゆる瞬間に正しいデータを提供する追加の信号セットを提供される。第1の追加セットは先行ノードが出力において安定したデータを有することを示す「有効」信号を保持する。同様に、ノードは、その出力においてデータが安定している時にはデータ経路内の後続ノードに「有効」信号を提供する。この手順によって、各ノードは入力におけるデータの状態を決定することができる。
さらに、第2の追加の信号セットは現在のノードが入力で任意の追加データを受け付ける準備ができているか否かを先行ノードに示す「消費」信号を保持する。同様に、ノードはデータ経路内の後続ノードから「消費」信号を受け取る。消費信号を使用することで、特定の経路内のデータのフローを一時的に停止させることができる。これは、ある瞬間のノードが不確定な遅延を含む時間がかかるデータ処理、例えば、ループまたはメモリアクセスを実行している場合、重要である。消費信号の使用は本発明の一実施形態にすぎない。選択したプロトコルに応じていくつかの他の信号を使用できる。例として、[stall]、「ready−to−receive」、「acknowledge」または「not−acknowledge」信号、および信号のHigh、Lowに基づくのではなくパルスまたは遷移に基づく信号がある。その他の信号方式も可能である。「有効」信号を使用することでアーク上のデータの存否を表すことができる。したがって、同期データフローマシンを構成できるだけでなく、静的および動的データフローマシンを構成することもできる。「有効」信号は必ずしも専用信号線として実装される必要はなく、「ヌル」値を表すための特別なデータ値を選択するようないくつかの他の方法においても実装することができる。消費信号に関しては、多くの他の可能な信号方式がある。話を分かりやすくするために、本明細書の残りの部分では、消費および有効信号にのみ言及する。本発明の機能を他の信号方式に拡張することは簡単である。
専用の消費信号線があれば、より高い効率を達成できる。消費信号により、ノードは、下位のアークがその時点において満杯であっても、次のクロック周期において出力トークンを受け取ることができることを知り得る。専用の消費信号線がなければ、ノードは、発火する前に、下位のアーク上に空間が空くまで待たなければならない。これは、アークへのエントリが少なくとも1サイクルおきに空になることを意味し、効率が悪くなる。
図7〜図19は、ノードに対して有効データおよび消費信号を生成する論理回路の例を示す。一般に、発火規則は複雑であり、個々のノードの機能に従って確立されなければならない。
複合データフローマシンの場合、消費線は、信号伝播速度と比較して極めて長いことがある。その結果、消費信号が、機能停止される必要がある経路内のすべてのノードに到達せず、結果的にデータが失われる(すなわち、未処理のデータが新しいデータによって上書きされる)ことが起こり得る。
これはいくつかの方法で解決できる。消費信号伝播経路を極めて注意深く平衡化して、確実に消費信号をすべての目標レジスタに間に合うように到達させることができる。別の方法としては、停止可能なブロックの後段に先入れ先出しバッファを配置してブロック内の消費信号の使用を完全回避する方法がある。最初の方法とは異なり、先入れ先出しを使用してデータがパイプラインを出る時にパイプラインデータを収集する。前者の解決策は、大規模なパイプライン処理されたブロックの場合に実装が極めて困難で時間がかかる。後者は、ブロック内に存在する可能性のあるデータセット全体を保持できる大容量バッファを必要とする。
この制約された信号伝播速度という問題を解決するより良い方法は、図17に示す「カッター」と呼ばれる機能によるものである。カッターは基本的に、後続ノードから消費線を受信し、それを1周期遅らせるレジスタである。これによって、その点の消費信号の組合せ長がカットされる。カッターが有効な消費信号を受信すると、先行ノードからのデータを1処理周期の間バッファに入れ、同時に、消費信号を同じだけ遅延させる。消費信号を遅延させて入力データをバッファに入れることによって、極めて長い消費線が使用された場合であっても、データが失われないことが確保される。
カッターは、データループ、特にパイプライン処理されたデータループの実装を大幅に簡単化する。ここで、データのフローを制御するさまざまなプロトコルでは、消費信号がループを通過するデータと同じ経路をしばしば逆に進むように要求される。その結果、消費信号に対する組合せループが生成される。カッターをループ内に配置することでそのような組合せループを回避でき、そうでなければ実装が困難または不可能になる多くのプロトコルが可能になる。
最後に、カッターは、データフローマシン内のデータ伝播の観点からはトランスペアレントである。これは、カッターを必要に応じて自動的に追加できるという意味である。
専用消費線の代替案は、データを生成するノードがデータ出力が無効であるか否か検査するという方法である。それ故、専用消費ビットは不要であり、これによって長い消費信号線の問題が解決する。しかし、この場合、ノードはデータ出力アーク上のデータが後続ノードによって消費されるまで待機しなければならない。すなわち、発火が遅れることになる。しかし、この方法は高いスループットを要求しないデータフローマシンの領域では実行可能である。
図20a〜図20gは、図に示す本発明の実施形態を示す部分の例である。図20aは、ループサブグラフを指す要素、すなわち、値を処理するためにデータフローマシン内で実行すべき関数を示す。図20bは、式サブグラフ、すなわち、例えば、反復の追跡、ループ条件などの式を生成するデータフローマシンの要素を示す。図20cは、マージノード、ここではifマージ、すなわち、値2104に応じて値2100、2102をマージして結果値2106を生成するノードを示す。図20dは、優先マージノード、すなわち、値2108、2110をマージして結果値2112を生成するノードを示す。結果値2112は存在する値2108、2110の1つである。両方の値2108、2110が存在する場合、右側の値2110が優先される。図20eは、条件2120に応じて値2116、2118から結果値2114を生成する条件マージノードを示す図である。図20fは、条件2128に応じて2124または2126について値2122を生成する条件スイッチを示す。図20gは、所定数の偽の条件とそれに続く1つの真の条件のストリームを生成し、その処理を繰り返すブールストリームノードを示す。
図21は、入力2204またはループ2206において値を獲得する条件マージノード2202を含むforループ2200を示す。反復回数はブールストリーム2208によって決定され、マージノード2202は入力から値を取り出し、ブールストリーム2208が次の真の値の前に偽の条件を生成するように配置された回数だけボディ2210にループさせる。同様のブールストリーム2214によって制御されるスイッチ2212が、出力をボディ2210からループ2206に同じ回数だけ切り替え、次に出力2216に切り替えるのでこのことが可能になる。ここで、反復処理中に一定である値であるコンテキスト値2218がブールストリームによって決定された同じ回数だけデュプリケータ内で複製され、ボディ2210に提供される。
図22は、図21に示すforループに似たforループ2300を示す。forループ2300は反復処理中にリストをエクスポートする機能を提供する。これは、リストの長さを決定する第2のブールストリーム2304によって決定される所定の回数だけ複製される反復の回数を決定する第1のブールストリーム2302からの条件値によって制御されるスイッチ2300によって可能になる。スイッチ2300は第1および第2のブールストリーム2302、2304の決定に従って出力2306上にリストを出力する。この間、リストに見つからない値はゲート(図示せず)に送られ、ゲートはこれらの値を消去する。
図23は、同様の技術を適用し、デュプリケータ2400および2つのブールストリーム2402、2404を用いてリストをインポートするforループを示す。第1のブールストリーム2402は反復回数を決定し、第2のブールストリーム2404はリスト長を決定する。第1のブールストリームから複製された条件、すなわち、リスト長と同じだけの数の真の条件とそれに続けて反復の準備が整うまで偽の条件、という条件は、マージノード2406を制御してリスト全体を読み込ませ、リスト全体の空間を残してバッファ2408内に格納させる。次に、リストは、反復ごとに内部ループ内を循環し、同時にボディ2412に提供される。次に、リストを空にできるように、上記技術で反復回数およびリスト長と一致するように制御されるスイッチ2414が提供される。
図24は、図23に示すforループに似ているがボディ2500を通してリストを循環するforループを示す。これによってリストはループに依存する。
本発明によれば、一般に、2つのタイプのループ、すなわち、1)変数が各反復内でそれ自体に依存するループ依存変数を備えたループ、および2)ループ依存変数がないループ(ループの実際の周回を追跡するカウンタに加えて)を実装することができる。本明細書では一貫してこの種のループを「foreach」ループと呼ぶ。
ループ依存変数を備えたループは2つのサブグループに分割される。すなわち、1a)ループ内の周回回数がループ内で計算されるループ、すなわち、ループを継続するか否かを決定する条件がループ依存変数に依存するループ、本明細書では一貫してこの種のループを「while」ループと呼ぶ。および1b)プログラムの実行中に所定の回数周回するループ、本明細書では一貫してこの種のループを「for」ループと呼ぶ。
[next変数(NXT)]は、ループ依存性を有する変数である。この変数は、反復ごとに「next」値を計算する(おそらくは他の中間計算によって)。「for」および「while」ループは、NXTを有するが、「foreach」は有さない。
「context変数(CTX)」はループ実行中に変化しない変数である。この変数はループ(コンテキスト)から値を取り出し、その値は変化しない。
「re−entrant」ループはパイプライン処理によって複数の反復を同時に実行できるデータ依存ループ(for/while)である。「re−entrant」である「while」ループはタグ付けが必要である。すなわち、パイプライン内の各値にはIDを割り当てなければならない。これによって、ループの終了後に値を分類することができる。ある値に続けてループに入る値にタグ付けをしないと、後者の値のループ周回数の方が少ない場合に、ループは前者の値より前にループを抜けることがある。この結果、非決定的な振る舞いが発生する。
値の「エクスポート」は非ループ依存変数がループから返されることを意味する。値のインポートは値が「CTX」値であることを意味する。
「リスト」は次々にストリーミングされる値のグループ(値のリスト)として扱われる一連のトークンである。
「ベクトル」は完全にブロードパラレルな設計である。これはデータフローマシン内にすべて同時に存在し、すべてアクセス可能な値の集合である。リストおよびベクトルは「コレクション」と呼ばれる。
コレクションにわたって反復する時、反復回数は反復されるコレクション内の要素の数に等しい。反復されるコレクションから反復ごとに1つの要素が読み出される。
リストまたはベクトルにわたって反復するとは、リストの場合、1回に1つの値がループ内に供給されることを意味する。ベクトルの場合、ベクトル内にある要素と同数のループボディが作成されることを意味する。各ボディはベクトル内の各要素を同時に処理する。
コレクションにわたって反復し、CTXからコレクションをインポートし、またはNXT内でコレクションのループ依存の変更をすることができる。
「foreach」は常にコレクションを返す(反復間にはデータ依存性が発生しないので、コレクション内で一度に1つの要素上でのみ動作できる)。
「for」は値(総計値)または値のコレクション(例えば、加算中の現在の総計値)を返すことができる。
同時に反復されるCTX、NTXおよび多数のコレクション内に多数の変数を有することが可能である。
データフローマシンの基本機構は、ノードが入力をすべて有し、入力を消費し、関連する出力(もしあれば)を生成している時にノードは動作を実行するということである。ノードは十分な入力があるまでは動作を実行しない。時間より早く到着した入力があれば、ノードの動作に十分な入力が到着するまでノードの前段のエッジ上で待機する。ノードの出力エッジが占有されていると、エッジが解放されるまで起動を遅らせる。この機能は一部のエッジでの初期トークン(値)を用いたforループ内で利用される。
ループの基本は以下の通りである。
・foreachはソースコレクションにわたって反復し、他のすべての反復と無関係にソースコレクションの各要素についてループボディを実行する。
・forはソースコレクションにわたって反復し、各要素についてループボディを実行し、ループ依存変数内でループ運搬依存性を有する。
・whileは条件が真である限り反復し、ループ依存変数の反復あたり1回ループボディを実行する。
依存性を備えた通常のループは一度に1つの値のセットだけを取り出す。値のセットは計算され、結果が生成されると、ループは新しい値のセットを入力できる状態になる。
例として、基本forループを考察する。
Figure 2009512089
実行後、aは値10を有する。
このループを図25に示す。ただし、ループボディ3104に対する直接の入力3100および出力3102は使用しない。入力3100および出力3102はforループへのコレクション入力/出力である。図の中央最上部の入力3106はnext入力である。この例では、iの初期値(この場合0)はここでループに入る。ループの中央最下部の出力3108はnext出力である。このループの結果はここで現れる。ループボディ3104を示す中央のクラウドはマージ3110から入力を取り出し、それに1を加算し、その結果をスイッチ3112に送る。2つのブールストリーム3114、3115がそれぞれ10個の偽の値を生成し、その後に真の値を1つ生成する。
別の例として、ctx入力を備えたforループを考察する。
Figure 2009512089
実行後、aは値100を有する。
このループを図26に示す。値bはループの反復回数だけ複製され、各反復でiに加えられる。それ以外は、図25を参照して説明した基本ループと同様である。
別の例として、listコレクションから反復するforループを考察する。
Figure 2009512089
実行後、aは値55を有する。
このループを図25に示す。今回、ループボディ3104に直接入力される入力3100を使用する。(<1..10>)にわたって反復されているリストの値は1回に1つの値ずつその入力3100上に送られる。その値は各反復内でマージ3110から値に加えられ、その結果はスイッチ3112に送られる。それ以外は、基本forループと同様である。
別の例として、listコレクションに反復するforループを考察する。
Figure 2009512089
実行後、aは、<1..10>の総計値の現在高、すなわち、値<1、3、6、10、15、21、28、36、45、55>を含むコレクションである。
このループを図25に示す。しかし、クラウドからの直接の出力3102を使用する。これはスイッチノード3112に送られた各値のコピーである。
図27は、図26に示すループと同様のループを示す。今回は、ループで不変の入力は単一の価の代わりにリストである(おそらくインポートされたリストがループボディで使用されている)。リストはループの反復回数だけコピーされる。代替方法として、図27に示す内部ループの代わりに図28に示すようなlist−dupノードを使用することができる。
図29は、図27と同様のループを示す。しかし、ここでは、インポートされたリストはもはやループで不変ではなく、ループの反復のたびに変化する。ループボディはリストの余地を提供する。
図30は、図26と同様のループを示す。しかし、ループ不変の戻り値が追加されている。図31に示すように、outputスイッチに入力された条件が結果リストの長さと同じ回数だけdupノードによって複製される場合、戻り値はリストでもよい。
図32は、vectorループとも呼ばれる完全にアンロールされたループを示す。この場合、このループはforループであり、各ボディはループ依存結果を次のループボディに渡す。list入力はいくつかのベクトル入力である(ベクトルの各要素あたり1つ)。ctxはその値の1つのコピーを各ループボディに配布している。
一度に1つの入力セットでしか動作できない依存性がある通常のループとは異なり、依存性を備えたre−entrantループは最初の独立入力セットの直後に新しい独立入力セットを取り込むことができ、ループ内に空間ができると直ちに新しい入力セットを挿入できる。これによってループはパイプライン処理される。
forループは、図33に示すようにリエントラントにできる。この場合、例えば図25に示すforループが有するinputマージにprioマージが取って代わる。joinおよびsplitノード(下記参照)によって入力値および内部ループカウンタが同時に確実にループに入る。joinおよびsplitノードの効果は複数のリンクされたprioマージノードによって達成されている可能性がある。
図34および図35は、それぞれスカラーおよびリストコンテキスト出力を備えたre−entrant forループを示す。
図36は、部分的にアンロールされた、すなわち、ボディの複数のコピーがあるが、ループの反復数ほどは多くないre−entrant forループを示す。この場合、ループ出口は、反復回数割るループボディのコピー数の数字が付いたループボディの後に配置しなければならない。これは、forループは固定回数だけ反復する(入力コレクション内の要素数だけ反復する)という事実を利用している。
別の例として、基本foreachループを考察する。
Figure 2009512089

aは1から10までの二乗のコレクションである(すなわち、<1、4、9、16、25、36、49、64、81、100>)。
foreachループではループ運搬依存性が許されない。基本形式は図25に示すforループに似ているが、スイッチ/マージのnext入力と出力とがない。すなわち、簡単な入力と簡単な出力とを備えたループボディクラウドである。反復コレクションは最上部で入力され最下部で出力される。図37は、ループで不変のコンテキスト入力を備えたforeachループを示す。
図38は、リストの代わりにベクトルにわたって反復する、すなわち、図32のforループ同様の完全にアンロールされたforeachループを示す。ボディ間で渡されるループ依存値は存在しないことに留意されたい。図38は、またさまざまなボディに配布されたコンテキスト入力を示す。
別の例として、基本whileループを考察する。
Figure 2009512089
図39は、whileループを示す。whileループはコレクションにわたって反復しない。このループは条件が満たされるまで反復する。この条件はwhileループの起動のたびに異なる場合がある。これは、そうでなければ条件が変化しない(無限ループとなる)ため、ループ依存性があるということを意味する。whileループは式の値が偽になるまで反復するので、固定長ブールストリームを用いて入力マージおよび出力スイッチを制御することはできない。その代わりとして、条件の結果が使用される。それ以外は、whileループは上記のようにコレクション入力/出力を使用しないforループときわめて類似している。
図40は、図29のforループ同様、ループ依存性がコレクションであるwhileループを示す。
図41は、基本re−entrant whileループを示す。しかし、このループは非決定的である。whileループは起動されるたびに異なった回数だけ反復する。これは、入力セットごとに、そのセットが後続のセットと異なる回数繰り返すことがあるという意味である。このため、後の入力セットがそれよりも長く反復している前の入力セットより先にループを抜けることがある。この結果、マシンの他の部分でミスマッチが発生する場合がある。
非決定的なwhileの問題を回避するため、図42に示すタグ付けシステムが採用される。これは各入力セットをタグ、普通は簡単な番号に関連付ける。データがループを抜けると、タグに従ってその結果が分類され、データは順序正しく抜けることができる。そのようなタグ付け方式によって、ローカルな動的データフローマシンは完全に静的なDennisデータフローマシンの状況に存在することができる。タグ付けシステムの外部では、ユニットは静的データフローマシンのように振舞うが、その内部では動的データフローマシンのように振舞う。再編成グラフによってタグをデータに関連付け、タグに結果を保持させられることが好ましい。また、タグバッファ4711のサイズがタグの数に等しいことが好ましい。
図43は、タグ付け機構を備えたre−entrant whileの一例を示す。ここで、タグ番号は0、1、2、3...でタグバッファ4712のサイズはタグの数に等しい。
図「dowhile」は、repeat−untilループとしても知られるdo−whileを実行するデータフローマシンを示す。このループはwhileループに似ているが、必ずボディを1回実行してから条件を評価する。「dowhile_reent」は、タグ付けシステムがないdo−whileループのre−entrantバージョンを示す。do−whileはwhileループ同様、起動のたびに異なる回数反復するので、正しい実行のためにタグ付けシステムをre−entrant do−whileに追加すべきである。
図44は、推測if演算を示す。ifマージノードは3つの入力(条件、真分岐および偽分岐)のすべてにデータが揃うまで待機する。次いで条件入力が示す分岐から値を選択する。if機能のこの設計は図45に示すスイッチマージifよりも効率的である。
図46は、スイッチおよびマージに分解されたdupノードを示す。図47は、list−dupのための同様なdupノードを示す。
手短に言えば、さまざまなループのタイプの特徴を以下のように説明できる。
・foreachループは、ループ依存性を有さず、それ故、ループ依存性変数を有さない。
・forループは少なくとも1つのループ依存性変数を必要とする。
・whileおよびdo−whileループは反復回数を決定する実行時間計算式を有する。
・whileループはゼロ回反復もあるが、do−whileループは常に少なくとも1回反復する。
・foreachループは常にパイプライン処理が可能である。
・forループおよびwhileループはリエントラントにできる。
・起動ごとに異なる回数反復するre−entrantループは値の正しい抜け順序を確保するためにタグ付けおよび分類システムを関連付けなければならない。これは、while re−entrantおよびdo−while re−entrantにタグ付けが必要なことを意味する。
・re−entrant whileはループボディよりも1回多く条件式を実行する。これは、ループボディが少なくとも1回の反復において空になることを意味する。re−entrant do−whileループはループと同じ条件式を含むif式をその周りに有していてもよい。この場合、ループボディは常に満杯で、whileループと同じ動作を実行する。
手短に言えば、ループの入力と出力とは以下のように記述できる。
・ループ依存変数はnxt−in入力からループに入り、next−out出口からループを抜ける。
・ループ不変変数(ループの外側で定義されたループでループを通じて不変である)はctx−in(またはimport)からループに入る。
・ループ不変変数およびループ依存変数から間接的に計算された変数はctx−out(またはexport)からループを抜ける。
・コレクションにわたって反復するループは「collection in」からコレクションに入る。
・コレクションに結果を戻すループは「collection out」で結果を戻す。
手短に言えば、ループのデータタイプは以下のように記述できる。
・ループはスカラーにわたって反復できる。
・コレクションにわたって反復するループはリストまたはベクトルにわたって反復できる。
・リストにわたって反復するとは一度に1つの要素がコレクションから取り出されるという意味である。
・ベクトルにわたって反復するとはコレクションのすべての要素が同時に反復されることを意味する。
様々なループについて添付の図面を参照しながら説明してきた。概要として、下記の表はさまざまなタイプのループを示す図への参照を示している。表の凡例は以下の通りである。それぞれの図の番号はアルファベット文字の後に丸括弧で示してある。
f:forループ
rf:re−entrant forループ
w:whileループ
rw:re−entrant whileループ
e:foreach
Figure 2009512089
さらに、以下のコメントはループの特徴を述べている。
・ベクトル上のforループは完全にパイプライン処理されているため、常にリエントラントである。これは、もはやループは存在せず、ループが反復したはずの回数分だけ、ボディが配列されていることを意味する。そのような直線の動作は明らかにパイプライン処理が可能である。
joinノードはいくつかの値を併記するので1つのものとしてノードを通過できる。splitノードは、以前結合されていた変数を結合された時と同じ左から右の順序で元の個々の値に分割する。
re−entrantループは普通、prioマージで実行される。forループはループ内のパイプライン位置の数と同じ数の初期偽トークンを使用し、同じ回数選択値を複製することでリエントラントにできる。
ノードはしばしばより小さい部分に分解できる。例えば、スイッチノードはgateノードに分解できる。gateノードは1つの条件入力と1つのデータ入力とを有する。また単一のデータ出力を有する。入力上の値は条件入力が真の値を有する場合、出力にコピーされる。条件入力が偽の値を有する場合、入力は消費されるだけで出力は生成されない。falseゲートも全く同じであるが、偽の条件を受け取ると値を渡し、真の条件を受け取ると値を消費する。こうして、switchノードはgateノードで構成される。
trueゲートおよびfalseゲートは両方ともスイッチ入力を取り出し、各々専用の出力(スイッチの2つの出力に対応する)を有する。スイッチへの条件入力は2つのゲートに接続される。全体としてはスイッチとして振舞う。
また、ノードはより大きいノードに組み立てられる。例えば、forループの周囲のマージおよびスイッチは「forループ」ノードに組み立てられる。時には、組み立てられたノードは個々のノードのコレクションよりも効率的に実施することができる。
以上、本発明を主にいくつかの実施形態を参照しながら説明してきた。しかし、当業者には明らかなように、上記開示した実施形態とは別の実施形態も添付の特許請求の範囲に記載する本発明の範囲内で同様に可能である。
データフローグラフの一部を示す図である。 本発明のある実施形態による最適化後の図1のデータフローグラフの一部を示す図である。 データフローグラフの一部を示す図である。 本発明のある実施形態による最適化後の図3のデータフローグラフの一部を示す図である。 データフローマシンを表すデータフローグラフの一部を示す図である。 本発明のある実施形態を適用した図1を簡単にした図である。 本発明で使用するよう適合されたノードを示す図である。 本発明で使用するよう適合されたノードを示す図である。 本発明で使用するよう適合されたノードを示す図である。 本発明で使用するよう適合されたノードを示す図である。 本発明で使用するよう適合されたノードを示す図である。 本発明で使用するよう適合されたノードを示す図である。 本発明で使用するよう適合されたノードを示す図である。 本発明で使用するよう適合されたノードを示す図である。 本発明で使用するよう適合されたノードを示す図である。 本発明で使用するよう適合されたノードを示す図である。 本発明で使用するよう適合されたノードを示す図である。 本発明で使用するよう適合されたノードを示す図である。 本発明で使用するよう適合されたノードを示す図である。 図面に示された本発明の各実施形態を示す部分の例である。 図面に示された本発明の各実施形態を示す部分の例である。 図面に示された本発明の各実施形態を示す部分の例である。 図面に示された本発明の各実施形態を示す部分の例である。 図面に示された本発明の各実施形態を示す部分の例である。 図面に示された本発明の各実施形態を示す部分の例である。 図面に示された本発明の各実施形態を示す部分の例である。 さまざまなループを示す図である。 さまざまなループを示す図である。 さまざまなループを示す図である。 さまざまなループを示す図である。 さまざまなループを示す図である。 さまざまなループを示す図である。 さまざまなループを示す図である。 さまざまなループを示す図である。 さまざまなループを示す図である。 さまざまなループを示す図である。 さまざまなループを示す図である。 さまざまなループを示す図である。 さまざまなループを示す図である。 さまざまなループを示す図である。 さまざまなループを示す図である。 さまざまなループを示す図である。 さまざまなループを示す図である。 さまざまなループを示す図である。 さまざまなループを示す図である。 さまざまなループを示す図である。 さまざまなループを示す図である。 さまざまなループを示す図である。 さまざまなループを示す図である。 さまざまなループを示す図である。 さまざまなループを示す図である。 さまざまなループを示す図である。 さまざまなループを示す図である。

Claims (23)

  1. 少なくとも1つの入力または少なくとも1つの出力を備えた機能ノードと、前記機能ノード間の接続とを備えるディジタル論理回路内にデータフローマシンを実装するためのディジタル制御パラメータを生成するための装置であって、前記ディジタル論理回路が、連続的なトークンがストリーミングされる第1の経路と、前記トークンがストリーミングされる第2の経路とを備え、前記装置が、前記経路へのデータフローの必要な相対スループットを判定するように配置されているデターミネータと、前記経路のスループットを平衡化させる前記経路の1つにバッファを割り当てるように配置されるバッファのアサイナと、最小限の数のバッファで前記必要な相対スループットが得られるまで割り当てられたバッファを除去するように配置される割り当てられたバッファのリムーバと、前記最小限の数のバッファを備える前記ディジタル論理回路を実装するように配置されたディジタル制御パラメータ生成装置とを備える装置。
  2. 前記第1および第2の経路が並列である、請求項1に記載の装置。
  3. 割り当てられたバッファの前記除去が、前記ディジタル論理回路の前記実装の他の部分、前記経路の相対スループット、および前記ディジタル論理回路の前記実装の残りの相対スループットに対しても利用可能な空間に関して実行される、請求項1または2に記載の装置。
  4. 前記経路の少なくとも1つが、少なくとも2つの機能ノードを備え、前記機能ノードの第1のノードが、第1の相対スループットを有し、前記ノードの第2のノードが、第2の相対スループットを有し、前記第2の相対スループットが、前記第1の相対スループットに等しいように適合される、請求項1から3のいずれかに記載の装置。
  5. 前記第1および第2の経路が直列である、請求項1から4のいずれかに記載の装置。
  6. 前記ディジタル制御パラメータが、FPGAを制御して前記ディジタル論理回路を実装する、請求項1から5のいずれかに記載の装置。
  7. 前記データフローマシンが、高レベルソースコード仕様から生成される、請求項1から6のいずれかに記載の装置。
  8. 前記ディジタル制御パラメータが、特定用途向けIC(ASIC)またはチップ、またはこれらの任意の組合せを制御して、前記ディジタル論理回路を実装する、請求項1から7のいずれかに記載の装置。
  9. 少なくとも1つの入力または少なくとも1つの出力を備えた機能ノードと、前記機能ノード間の相互接続とを示す接続とを備えるディジタル論理回路内にデータフローマシンを実装するためのディジタル制御パラメータを生成する方法であって、前記ディジタル論理回路が、連続的なトークンがストリーミングされる第1の経路と、前記トークンがストリーミングされる第2の経路とを備え、前記方法が
    前記経路へのデータフローの必要な相対スループットを決定するステップと、
    前記経路のスループットを平衡化させる前記経路の1つへバッファを割り当てるステップと、
    最小限の数のバッファで前記必要な相対スループットが得られるまで割り当てられたバッファを除去するステップと、
    前記最小限の数のバッファを備える前記ディジタル論理回路を実装するためのディジタル制御パラメータを生成するステップとを含む方法。
  10. 前記除去が、前記ディジタル論理回路の前記実装の他の部分、前記経路の相対スループット、および前記ディジタル論理回路の前記実装の残りの相対スループットに対しても利用可能な空間に関して実行される、請求項9に記載の方法。
  11. 前記経路の前記少なくとも1つが、少なくとも2つの機能ノードを備え、前記機能ノードの第1のノードが第1の相対スループットを有し、前記ノードの第2のノードが第2の相対スループットを有し、前記第2の相対スループットを前記第1の相対スループットに等しいように適合させるステップをさらに含む、請求項9または10に記載の方法。
  12. FPGAによって前記ディジタル論理回路を実装するステップを含む、請求項9から11のいずれかに記載の方法。
  13. 高レベルソースコード仕様から前記データフローマシンを生成するステップをさらに含む、請求項9から12のいずれかに記載の方法。
  14. 特定用途向けIC(ASIC)またはチップ、またはこれらの任意の組合せによって前記ディジタル論理回路を実装するステップを含む、請求項9から13のいずれかに記載の方法。
  15. コンピュータにダウンロードされ、コンピュータによって実行されると、請求項9から14のいずれかに記載の方法を実行するように配置されたプログラムコードを備えるコンピュータプログラム製品。
  16. 少なくとも1つの入力または少なくとも1つの出力を備えた機能ノードと、データフローマシンを実装する前記機能ノード間の接続とを備えるディジタル論理回路であって、第1の経路が連続的なトークンのストリームを受け取ることができ、第2の経路が前記トークンのストリームを受け取ることができ、前記第2の経路が最小限の数の追加バッファを備えるディジタル論理回路。
  17. 前記第1および第2の経路が、並列である、請求項16に記載の回路。
  18. 割り当てられたバッファの前記最小化が、前記ディジタル論理回路の前記実装の他の部分、前記経路の相対スループット、および前記ディジタル論理回路の前記実装の残りの相対スループットに対しても利用可能な空間に関して実行される、請求項16または17に記載の回路。
  19. 前記経路の少なくとも1つが、少なくとも2つの機能ノードを備え、前記機能ノードの第1のノードが第1の相対スループットを有し、前記ノードの第2のノードが第2の相対スループットを有し、前記第2の相対スループットが前記第1の相対スループットに等しいように適合される、請求項16から18のいずれかに記載の回路。
  20. 前記第1および第2の経路が、直列である、請求項16から19のいずれかに記載の回路。
  21. FPGAによって実装される、請求項16から20のいずれかに記載の回路。
  22. データフローマシンを実装する前記ノードおよび接続が高レベルソースコード仕様から生成される、請求項16から21のいずれかに記載の回路。
  23. 特定用途向けIC(ASIC)またはチップ、またはこれらの任意の組合せによって実装される、請求項16か22のいずれかに記載の回路。
JP2008536544A 2005-10-18 2006-10-18 データフローマシンにおけるデッドロックを回避するための方法 Pending JP2009512089A (ja)

Applications Claiming Priority (5)

Application Number Priority Date Filing Date Title
US72745705P 2005-10-18 2005-10-18
US72745405P 2005-10-18 2005-10-18
US72745205P 2005-10-18 2005-10-18
US72745605P 2005-10-18 2005-10-18
PCT/SE2006/001185 WO2007046749A2 (en) 2005-10-18 2006-10-18 Method for avoiding deadlock in data flow machine

Publications (1)

Publication Number Publication Date
JP2009512089A true JP2009512089A (ja) 2009-03-19

Family

ID=37962918

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2008536544A Pending JP2009512089A (ja) 2005-10-18 2006-10-18 データフローマシンにおけるデッドロックを回避するための方法

Country Status (4)

Country Link
US (1) US20090119484A1 (ja)
EP (1) EP1941354A4 (ja)
JP (1) JP2009512089A (ja)
WO (1) WO2007046749A2 (ja)

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2012164316A (ja) * 2011-02-08 2012-08-30 Maxeler Technologies Ltd ハードウェアストリームプロセッサデザインを生成するための方法、装置およびソフトウェアコード
WO2019188175A1 (ja) * 2018-03-30 2019-10-03 株式会社デンソー デッドロック回避方法、デッドロック回避装置
WO2019188179A1 (ja) * 2018-03-30 2019-10-03 株式会社デンソー デッドロック回避方法、デッドロック回避装置

Families Citing this family (16)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
SE0300742D0 (sv) * 2003-03-17 2003-03-17 Flow Computing Ab Data Flow Machine
US7724674B2 (en) * 2007-05-16 2010-05-25 Simula Innovations As Deadlock free network routing
JP5552938B2 (ja) * 2010-07-23 2014-07-16 富士通株式会社 禁止ターン決定プログラムおよび禁止ターン決定装置
US8464190B2 (en) 2011-02-17 2013-06-11 Maxeler Technologies Ltd. Method of, and apparatus for, stream scheduling in parallel pipelined hardware
US9977655B2 (en) 2012-03-20 2018-05-22 Massively Parallel Technologies, Inc. System and method for automatic extraction of software design from requirements
US9424168B2 (en) 2012-03-20 2016-08-23 Massively Parallel Technologies, Inc. System and method for automatic generation of software test
US8959494B2 (en) * 2012-03-20 2015-02-17 Massively Parallel Technologies Inc. Parallelism from functional decomposition
US8762946B2 (en) 2012-03-20 2014-06-24 Massively Parallel Technologies, Inc. Method for automatic extraction of designs from standard source code
US9324126B2 (en) 2012-03-20 2016-04-26 Massively Parallel Technologies, Inc. Automated latency management and cross-communication exchange conversion
WO2013185098A1 (en) 2012-06-08 2013-12-12 Massively Parallel Technologies, Inc. System and method for automatic detection of decomposition errors
WO2014152800A1 (en) * 2013-03-14 2014-09-25 Massively Parallel Technologies, Inc. Project planning and debugging from functional decomposition
US10678793B2 (en) * 2016-11-17 2020-06-09 Sap Se Document store with non-uniform memory access aware high performance query processing
EP3382580A1 (en) * 2017-03-30 2018-10-03 Technische Universität Wien Method for automatic detection of a functional primitive in a model of a hardware system
US10965536B2 (en) 2019-03-30 2021-03-30 Intel Corporation Methods and apparatus to insert buffers in a dataflow graph
US11029927B2 (en) 2019-03-30 2021-06-08 Intel Corporation Methods and apparatus to detect and annotate backedges in a dataflow graph
US12045193B2 (en) * 2020-07-07 2024-07-23 Atif Zafar Dynamic processing memory

Family Cites Families (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
AU8495098A (en) * 1997-07-16 1999-02-10 California Institute Of Technology Improved devices and methods for asynchronous processing

Non-Patent Citations (3)

* Cited by examiner, † Cited by third party
Title
CSNG200100091033; 柴田裕一郎ほか: 'DRAM混載型仮想ハードウェアHOSMIIの構成と性能' 情報処理学会シンポジウム論文集 Vol.98 No.7, 199806, 303-310頁, 社団法人情報処理学会 *
JPN6012024328; Mitrajit CHATTERJEE et al.: 'Buffer Assignment Algorithms on Data Driven ASICs' IEEE Transactions on Computers vol. 49, no. 1, 200001, pages16-32, IEEE *
JPN6012024329; 柴田裕一郎ほか: 'DRAM混載型仮想ハードウェアHOSMIIの構成と性能' 情報処理学会シンポジウム論文集 Vol.98 No.7, 199806, 303-310頁, 社団法人情報処理学会 *

Cited By (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2012164316A (ja) * 2011-02-08 2012-08-30 Maxeler Technologies Ltd ハードウェアストリームプロセッサデザインを生成するための方法、装置およびソフトウェアコード
WO2019188175A1 (ja) * 2018-03-30 2019-10-03 株式会社デンソー デッドロック回避方法、デッドロック回避装置
WO2019188179A1 (ja) * 2018-03-30 2019-10-03 株式会社デンソー デッドロック回避方法、デッドロック回避装置
JP2019179416A (ja) * 2018-03-30 2019-10-17 株式会社デンソー デッドロック回避方法、デッドロック回避装置
JP2019179412A (ja) * 2018-03-30 2019-10-17 株式会社デンソー デッドロック回避方法、デッドロック回避装置
JP7039365B2 (ja) 2018-03-30 2022-03-22 株式会社デンソー デッドロック回避方法、デッドロック回避装置
JP7064367B2 (ja) 2018-03-30 2022-05-10 株式会社デンソー デッドロック回避方法、デッドロック回避装置

Also Published As

Publication number Publication date
EP1941354A2 (en) 2008-07-09
WO2007046749A2 (en) 2007-04-26
US20090119484A1 (en) 2009-05-07
EP1941354A4 (en) 2010-01-27
WO2007046749A3 (en) 2007-06-14

Similar Documents

Publication Publication Date Title
JP2009512089A (ja) データフローマシンにおけるデッドロックを回避するための方法
JP6059413B2 (ja) 再構成可能命令セル・アレイ
EP1609078B1 (en) Data flow machine
US9158575B2 (en) Multithreaded processor array with heterogeneous function blocks communicating tokens via self-routing switch fabrics
Cronquist et al. Specifying and compiling applications for RaPiD
Coussy et al. GAUT: A High-Level Synthesis Tool for DSP Applications: From C Algorithm to RTL Architecture
JP5762440B2 (ja) 高効率の埋め込み型均一マルチコアプラットフォーム用のタイルベースのプロセッサアーキテクチャーモデル
JP2006522406A5 (ja)
US11709664B2 (en) Anti-congestion flow control for reconfigurable processors
US11816560B2 (en) Performance estimation-based resource allocation for reconfigurable architectures
JP2016526220A (ja) プログラム可能な最適化を有するメモリネットワークプロセッサ
JP2004506261A (ja) パイプラインctプロトコルおよびct通信
WO2006115635A2 (en) Automatic configuration of streaming processor architectures
US20210081691A1 (en) Efficient Execution of Operation Unit Graphs on Reconfigurable Architectures Based on User Specification
GB2488021A (en) A method for generating a hardware stream processor design
US11308025B1 (en) State machine block for high-level synthesis
Vakili et al. Evolvable multi-processor: a novel MPSoC architecture with evolvable task decomposition and scheduling
Ax et al. System-level analysis of network interfaces for hierarchical mpsocs
Cathey et al. A reconfigurable distributed computing fabric exploiting multilevel parallelism
WO2003071418A2 (en) Method and device for partitioning large computer programs
US20240037061A1 (en) Sorting the Nodes of an Operation Unit Graph for Implementation in a Reconfigurable Processor
US20240069770A1 (en) Multiple contexts for a memory unit in a reconfigurable data processor
Lin et al. Utilizing custom registers in application-specific instruction set processors for register spills elimination
Haro Ruiz Design and implementation of an architecture-aware hardware runtime for heterogeneous systems
Vitkovskiy Memory hierarchy and data communication in heterogeneous reconfigurable SoCs

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20091014

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20120515

A02 Decision of refusal

Free format text: JAPANESE INTERMEDIATE CODE: A02

Effective date: 20121012