(57)【特許請求の範囲】
【請求項１】
パイプライン化並列ストリームプロセッサに対するハードウェア設計を発生する方法であって、前記方法は、
コンピューティングデバイス上で、前記パイプライン化並列ストリームプロセッサの一部としてハードウェア内に実装されるプロセスを指示する処理操作を定義するステップと、
コンピューティングデバイス上で、前記処理操作をタイムドメイン内の並列構造として表わすグラフをクロックサイクルの関数として定義するステップであって、前記グラフは前記パイプライン化並列ストリームプロセッサに対するハードウェア設計として実装される少なくとも１つのデータパスを含み、かつデータ値がその中をストリーミングできるように構成された複数の並列分岐を含み、前記または各データパスは少なくとも１つの入力、少なくとも１つの出力、前記パイプライン化並列ストリームプロセッサの一部としてハードウェア内に実装されるハードウェアエレメントに直接対応する少なくとも１つの個別オブジェクトを含むものとして表わされ、前記または各個別オブジェクトは１クロックサイクル以上機能を実行するように動作することができ、かつ予め定義されたレーテンシが関連付けられており、前記予め定義されたレーテンシは前記ハードウェアエレメントが前記機能を実行するのに要する時間を表し、前記データ値は増加するクロックサイクルの関数として前記データパス中を少なくとも１つの入力から少なくとも１つの出力まで伝播するステップと、
コンピューティングデバイス上で、前記少なくとも１つのデータパスおよび前記グラフの関連付けられたレーテンシを１組の代数線形不等式として定義するステップと、
コンピューティングデバイス上で、前記１組の代数線形不等式を解くステップと、
コンピューティングデバイス上で、前記解かれた線形不等式を使用して前記グラフ内の前記少なくとも１つのデータパスを最適化して最適化されたグラフを作り出すステップと、
コンピューティングデバイス上で、前記最適化されたグラフを利用してハードウェア内に実装する最適化されたハードウェア設計を前記パイプライン化並列ストリームプロセッサとして定義するステップと、
さらに、コンピューティングデバイス上で、データパス内の特定のポイントにある少なくとも１つのストリームオフセットオブジェクトを提供するステップを含み、
前記ストリームオフセットオブジェクトは、特定のクロックサイクルおよびデータパス内の前記特定のポイントに対して、前記特定のクロックサイクルとは異なるクロックサイクルからのデータ値へアクセスするように動作することができ、そして、
前記少なくとも１つのストリームオフセットオブジェクトは前記特定のクロックサイクルから変数に依存するクロックサイクル数だけオフセットしたクロックサイクルからのデータ値へアクセスするように動作することができ、前記変数の値は前記最適化されたハードウェア設計が前記パイプライン化並列ストリームプロセッサとしてハードウェア内に実装された後で指定される、
方法。
【請求項２】
請求項１記載の方法であって、前記処理操作は前記パイプライン化並列ストリームプロセッサとしてハードウェア内に実装される数学関数または計算を含む方法。
【請求項３】
請求項１または２記載の方法であって、前記または各ハードウェアエレメントは前記パイプライン化並列ストリームプロセッサ上に１つ以上のハードウェアユニットを含む方法。
【請求項４】
請求項１、２または３記載の方法であって、前記または各ハードウェアエレメントは予め定められた数学関数を実施するように構成されている方法。
【請求項５】
請求項１から４のいずれか１項記載の方法であって、前記最適化ステップは前記データパスをスケジュールするのに必要なバッファリングの量を最小化するステップを含む方法。
【請求項６】
請求項１から５のいずれか１項記載の方法であって、前記最小化ステップは、さらに、
必要ならば、前記データパスの少なくともいくつかの分岐にバッファリングを挿入するステップを含む方法。
【請求項７】
請求項５または６記載の方法であって、前記バッファリングは前記パイプライン化並列ストリームプロセッサ上のメモリユニットを表す方法。
【請求項８】
請求項５、６または７記載の方法であって、前記バッファリングは全体グラフに対して最小化される方法。
【請求項９】
請求項５から８のいずれか１項記載の方法であって、前記最適化ステップは、さらに、２つ以上のバッファを併合して単一バッファとするステップを含む方法。
【請求項１０】
請求項５から９のいずれか１項記載の方法であって、前記最適化ステップは、さらに、前記少なくとも１つのデータパスの２つ以上の分岐に単一バッファを割り当てるステップを含む方法
【請求項１１】
請求項１から１０のいずれか１項記載の方法であって、前記グラフは複数の入力および複数の出力を含み、各入力および各出力は前記少なくとも１つのデータパスの少なくとも１つの分岐に接続されている方法。
【請求項１２】
請求項１１記載の方法であって、前記入力はサイクルが揃えられていない方法。
【請求項１３】
請求項１１または１２記載の方法であって、前記出力はサイクルが揃えられていない方法。
【請求項１４】
請求項１から１３のいずれか１項記載の方法であって、前記グラフは前記パイプライン化並列ストリームプロセッサとしてハードウェア内に実装される複数の並列データパスを含み、前記解答および最適化ステップは前記複数の並列データパスの各々に対して実施される方法。
【請求項１５】
請求項１から１４のいずれか一項記載の方法であって、前記少なくとも１つのストリームオフセットオブジェクトは前記特定のクロックサイクルの前のクロックサイクルからのデータ値へアクセスするように動作することができる方法。
【請求項１６】
請求項１から１４のいずれか一項記載の方法であって、前記少なくとも１つのストリームオフセットオブジェクトは前記特定のクロックサイクルの後のクロックサイクルからのデータ値へアクセスするように動作することができる方法。
【請求項１７】
請求項１から１６のいずれか１項記載の方法であって、前記少なくとも１つのストリームオフセットオブジェクトは前記特定のクロックサイクルから予め選定されたクロックサイクル数だけオフセットしたクロックサイクルからのデータ値へアクセスするように動作することができる方法。
【請求項１８】
請求項１から１７のいずれか一項記載の方法であって、前記処理操作が前記パイプライン化並列ストリームプロセッサ上で実行される前に指定される方法。
【請求項１９】
ストリームプロセッサに対するハードウェア設計を発生する方法であって、前記方法は、
コンピューティングデバイス上で、前記ストリームプロセッサの一部としてハードウェア内に実装されるプロセスを指示する処理操作を定義するステップと、
コンピューティングデバイス上で、タイムドメイン内の前記処理操作を表わすグラフをクロックサイクルの関数として定義するステップであって、前記グラフは前記ストリームプロセッサの一部としてハードウェア内に実装されかつデータがその中をストリーミングできるように構成された少なくとも１つのデータパスを含み、前記または各データパスは少なくとも１つの入力、少なくとも１つの出力、および少なくとも１つの個別オブジェクトを含み、前記データは増加するクロックサイクルの関数として前記データパス中を少なくとも１つの入力から少なくとも１つの出力まで伝播するステップと、
コンピューティングデバイス上で、データパス内の特定のポイントにある少なくとも１つのストリームオフセットオブジェクトを提供するステップであって、前記ストリームオフセットオブジェクトは、特定のクロックサイクルおよび前記データパス内の前記特定のポイントに対して、前記特定のクロックサイクルとは異なるクロックサイクルからのデータ値へアクセスするように動作することができるステップと、
コンピューティングデバイス上で、前記グラフ内の前記少なくとも１つのデータパスを最適化して最適化されたグラフを作り出すステップと、
コンピューティングデバイス上で、前記最適化されたグラフを利用して前記ストリームプロセッサとしてハードウェア内に実装される最適化されたハードウェア設計を定義するステップと、を含み、
前記少なくとも１つのストリームオフセットオブジェクトは前記特定のクロックサイクルから変数に依存するクロックサイクル数だけオフセットされたクロックサイクルからのデータ値へアクセスするように動作することができ、前記変数は前記最適化されたハードウェア設計が前記ストリームプロセッサの一部としてハードウェア内に実装された後で指定される、
方法。
【請求項２０】
請求項１９記載の方法であって、前記少なくとも１つのストリームオフセットオブジェクトは前記特定のクロックサイクルの前のクロックサイクルからのデータ値へアクセスするように動作することができる方法。
【請求項２１】
請求項１９記載の方法であって、前記少なくとも１つのストリームオフセットオブジェクトは前記特定のクロックサイクルの後のクロックサイクルからのデータ値へアクセスするように動作することができる方法。
【請求項２２】
請求項１９、２０または２１のいずれか１記載の方法であって、前記少なくとも１つのストリームオフセットオブジェクトは前記特定のクロックサイクルから予め選定されたクロックサイクル数だけオフセットされたクロックサイクルからのデータ値へアクセスするように動作することができる方法。
【請求項２３】
請求項１９から２１のいずれか一項記載の方法であって、前記変数の値は前記処理操作が前記ストリームプロセッサ上で実行される前に指定される方法。
【請求項２４】
請求項１９から２３のいずれか一項記載の方法であって、前記最適化は、さらに、
コンピューティングデバイス上で、前記グラフの前記少なくとも１つのデータパスを１組の代数線形不等式として定義するステップと、
コンピューティングデバイス上で、前記１組の代数線形不等式を解くステップと、
コンピューティングデバイス上で、前記解かれた線形不等式を使用して前記グラフ内の前記少なくとも１つのデータパスを最適化して最適化されたグラフを作り出すステップと、を含む方法。
【請求項２５】
請求項１から１８のいずれか１項記載の方法であって、前記パイプライン化並列ストリームプロセッサはフィールド  プログラマブル  ゲート  アレイまたは特定用途集積回路上に実装される方法。
【請求項２６】
請求項１９から２４のいずれか１項記載の方法であって、前記ストリームプロセッサはフィールド  プログラマブル  ゲート  アレイまたは特定用途集積回路上に実装される方法。
【請求項２７】
請求項１から１８のいずれか１項記載の方法であって、さらに、前記パイプライン化並列ストリームプロセッサが前記処理操作を実施するように動作できるように前記最適化されたハードウェア設計を前記ストリームプロセッサ上に形成するステップを含む方法。
【請求項２８】
請求項１９から２５のいずれか１項記載の方法であって、さらに、前記ストリームプロセッサが前記処理操作を実施するように動作できるように前記最適化されたハードウェア設計を前記ストリームプロセッサ上に形成するステップを含む方法。
【請求項２９】
プログラマブルロジックデバイスを作る方法であって、
請求項１から２６のいずれか１項の方法を使用して設計を発生するステップと、
発生された設計を具現するように前記ロジックデバイスをプログラミングするステップと、を含む方法。
【請求項３０】
コンピュータ上で実行されると請求項１から２６のいずれか１項記載のステップを実行するようにされているコンピュータプログラム。
【請求項３１】
請求項３０記載のコンピュータプログラムであって、コンピュータ読取可能媒体上に格納されたコンピュータプログラム。
【請求項３２】
請求項１から２６のいずれか１項記載の方法を使用して発生された設計を有するフィールド  プログラマブル  ゲート  アレイ、特定用途集積回路または他のプログラマブルロジックデバイス。
【請求項３３】
ハードウェアストリームプロセッサを発生するシステムであって、前記システムは、
請求項１から２６のいずれか１項記載の方法を実行して前記発生された設計を有するプログラマブルロジックデバイスをプログラミングする命令のリストを発生するステップを含む方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明はパイプライン化ハードウェアにおけるストリームスケジューリング方法および装置に関する。特に、本発明はパイプライン化並列ストリームプロセッサに対するハードウェア設計の発生方法および装置に関する。
【背景技術】
【０００２】
コンピュータシステムは特定の物理的システム、領域またはイベントの計算モデルを実装するのにしばしば使用される。一般的に、このような計算モデルは多数のデータエリアまたはデータポイントに対して反復数値計算を解く必要がある。それには極めて多数の計算を行う必要があり、大量の計算リソースが消耗され必要な計算を完全に実施するのにかなりの期間を要する。
【０００３】
しばしば、中央処理装置（ＣＰＵ）のようなプロセッサが大概のコンピューティングシステム内で見られる。しかしながら、ＣＰＵはこのような計算を処理することはできるが、強力な計算システムを使用しない限り所要期間は法外なものとなることがある。
【０００４】
伝統的に、コンピューティングシステムの性能はＣＰＵの動作周波数を高め（すなわち、ＣＰＵが毎秒実施できる演算数を増加することにより）かつ単位面積当りより多くのトランジスタを収容できるようにＣＰＵ上の個別のトランジスタのサイズを縮小することにより向上されてきた。しかしながら、電力の制約により、将来はＣＰＵ周波数を高くしても僅かな性能改善しか実現されない。さらに、リソグラフィプロセスおよび材料機能の制限によりトランジスタのサイズを縮小することは次第に困難になってきている。
【０００５】
専門家のコンピューティングアプリケーションに対するコンピュータシステムの速度を高めるための代替方法は、付加的すなわち専門家ハードウェアアクセラレータを使用することである。これらのハードウェアアクセラレータは利用可能なコンピューティングパワーを高め、それに伴って計算を実施するのに要する時間を短縮する。特定のケースでは、専門家ハードウェアアクセラレータは高度な並列アプリケーションの性能を一桁以上高めることができる。
【０００６】
適切なシステムのこのような１つの例は専用ローカルメモリを有するストリーム処理アクセラレータである。アクセラレータはＰｅｒｉｐｈｅｒａｌ  Ｃｏｍｐｏｎｅｎｔ  Ｉｎｔｅｒｃｏｎｎｅｃｔ  Ｅｘｐｒｅｓｓ（ＰＣＩ−Ｅ）のようなバスを介してコンピュータに接続されるアド・インカード上に配置することができる。次に、数値計算の大部分を専門的なアクセラレータにより処理することができる。
【０００７】
有用なタイプのストリームプロセッサアクセラレータをＦｉｅｌｄ  Ｐｒｏｇｒａｍｍａｂｌｅ  Ｇａｔｅ  Ａｒｒａｙｓ（ＦＰＧＡ）を使用して実装することができる。ＦＰＧＡはデジタルロジックを実装することができるリプログラマブルハードウェアチップである。ＦＰＧＡには内在機能は無く、代わりに、適切なソフトウエアエレメントを使用して構成することができる複数のゲート、フリップフロップおよびメモリエレメントを含んでいる。
【０００８】
ＦＰＧＡの回路図の例が図１に示されている。異なるタイプのＦＰＧＡチップを使用することもできるが、より大きくより演算機能が豊富なＦＰＧＡがより望ましい。
【０００９】
ＦＰＧＡ１０はプログラマブル半導体デバイスを含んでおり、それはプログラマブルリコンフィギャブルインターコネクト１４（図１では網掛け部分として示されている）を介して接続される構成可能ロジックブロック（ＣＬＢ）１２のマトリクスを含んでいる。ＦＰＧＡ１０に対してデータを出し入れするために、複数の入力パッド１６および出力パッド１８が設けられている。
【００１０】
ＣＬＢ１２はＦＰＧＡ１０の基本的な論理ユニットである。典型的なＣＬＢ１２の回路図が図２に示されている。ＣＬＢ１２は典型的に４または６入力ルックアップテーブル（ＬＵＴ）２０を含む構成可能なスイッチマトリクスを含み、場合によって、それもおよそ３２ビットまでの小型バツファ、何かの専門的な回路（たとえば、マルチプレクサ）、一時的メモリストレージおよび出力２４として機能する１つ以上のフリップフロップユニット２２として構成することができる。さらに、ＦＰＧＡ１０は複数のブロックメモリユニット２６を含んでいる。ブロックメモリユニット２６はＦＰＧＡ１０内でストレージバッファとして使用することができるアドレス可能なメモリユニットを含んでいる。ＦＰＧＡ１０当り一定量のバッファスペースが利用可能である。したがって、それは慎重に割り当てられなければならない。
【００１１】
各ＣＬＢ１２のＬＵＴ２０は多様な機能、たとえば、ＮＡＮＤおよびＸＯＲのような論理ゲート、またはより複雑な機能を実施するように構成することができる。典型的なＦＰＧＡは１０５までのＬＵＴ２０を含むことができる。ＣＬＢ１２は並列に動作して数値集約的な計算に対する強力なリソースを提供する。
【００１２】
ＦＰＧＡベースストリームプロセッサは入力から出力までのパスに沿った１つ以上のハードウェアユニット内にマッピングされた計算機能を含んでいる。次に、ＦＰＧＡはハードウェアユニットを介してデータアイテムをストリーミングすることにより計算を実施する。各ハードウェアユニットは必要な計算を完了するための特定の期間を必要とする。これはハードウェアユニットのレーテンシとして知られており、一般的にハードウェアユニットが計算を完了するのに要するクロックサイクル数の観点から定義される。計算が完了すると、データはさらなるハードウェアユニットまたは出力へ「ダウンストリーム」移行する。回路の各部分が計算中の任意のポイントにおいてデータストリーム内の１つの対応するデータアイテムの演算を実施するため、ストリーミングアーキテクチュアは計算デバイスを効率的に利用する。
【００１３】
図３はＦＰＧＡのＣＬＢ１２を使用してその上にストリームプロセッサを実装するように生成されたこのようなストリーミングアーキテクチュアの例を示す。図３はＦＰＧＡストリームプロセッサ１０上に実装することができる４入力１６−ｉ、４出力１８−ｉストリームコンピューティングエンジンを示す。
【００１４】
入力１６−ｉおよび出力１８−ｉ間に計算データパス３０が設けられている。計算データパス３０はハードウェア内で表現される時のアルゴリズムのグラフィック表現である。計算データパス３０はカーネルとも呼ばれる。典型的なＦＰＧＡ１０はおびただしい数の並列カーネルを含むことができる。
【００１５】
計算データパス３０はＣＬＢ１２および他のロジックを使用して実装することができ、算術演算３２（１つ以上のＬＵＴ２０内で実施される）およびバッファメモリ２６を含んでいる。言い換えると、各演算ユニット３２はＦＰＧＡ上でハードウェアエレメント（１つ以上のハードウェアユニットを含むことができる）としてハードウェア内に実装される。バッファメモリ２６はブロックＲＡＭ（ブロックメモリユニット２６により提供される）または分散ＲＡＭ（ＬＵＴ２０またはフリップフロップ２２を使用して利用可能とされたメモリを含む）を含むことができる。図からお判りのように、計算データパス３０はデータを並列処理するように配置される。
【００１６】
動作において、データはＦＰＧＡストリームプロセッサ１０のＣＬＢ１２を介してストリーミングされ、ストリーミングされる時にデータに算術演算が行われる。
【００１７】
しばしば、ＦＰＧＡ回路は回路図または、たとえば、Ｖｅｒｉｌｏｇのようなハードウェア記述言語（ＨＤＬ）を使用して設計される。ＨＤＬはＦＰＧＡハードウェアに対する合成可能な仕様（ｓｙｎｔｈｅｓｉｚａｂｌｅ  ｓｐｅｃｉｆｉｃａｔｉｏｎｓ）を書くのに使用される。シミュレーションプログラムが実行され、それによりＦＰＧＡの所望する空間的および時間的構成は、ＦＰＧＡの動作を物理的に生成される前に正確にモデル化できるように、シミュレートすることができる。ＨＤＬは平行性（コンカレンシとしても知られる）を表すためのシンタクスを含んでおり時間の明示的な概念を含むことができる。
【００１８】
例として、図４（ａ）および４（ｂ）は単純なストリーミングデータパスを定義するグラフを例示している。グラフはストリームプロセッサの一部としてハードウェア内に実装される所望する処理操作（たとえば、畳み込みのような数学計算）を表している。グラフは処理操作をクロックサイクルの関数としてのタイムドメイン内の並列構造として表わし、データはクロックサイクルが増加するにつれデータパスに沿って入力から出力へ「流れる」。データパスはストリーミングされたデータに処理操作を実施する個別オブジェクト（すなわち、ノード）を含んでいる。個別オブジェクトはＦＰＧＡ上にストリームプロセッサの一部として実装されるハードウェアエレメントに直接対応する。ハードウェアエレメントは物理的ＦＰＧＡ上に１つ以上のハードウェアユニット（ＣＬＢのような）を含むことができる。
【００１９】
図４（ａ）は単一出力４２を有する３入力（Ａ、ＢおよびＣ）データパス４０を示している。データパス４０は一対のノード４４、４６を含んでいる。この例では、ノード４４、４６は加算器を含んでいる。ノード４４、４６は入力Ａ、Ｂ、Ｃ、ノード４４、４６および出力４２間の「エッジ」４８（すなわち、インターコネクト）により入力および出力間に接続されている。
【００２０】
図４（ａ）（および後続図）に示すように、ノード４４、４６およびエッジ４８はデータパス４０内に複数の分岐を定義する。一般的に、データパスは特定のプロセス操作または機能を表し、その中をデータが流れるパイプライン回路として実装される。カーネルは直接データの計算はしないが異なる時点においてその機能を変えるようにデータパスを構成することができる。これらの分岐は他の分岐に依存することがあり、あるいは特定のデータパスにより実施されるバルク計算の性質に応じて独立または半独立とすることができる。
【００２１】
しかしながら、判り易くするためにデータパスという用語はカーネルに対応するが、２つ以上のカーネルに亘ってデータパスを分割するのも本発明の範囲内に入る。当業者ならば、ここに定義された用語の範囲は容易にお判りと思われる。
方程式として表現すると、所望する計算は次のようになる。
（Ａ＋Ｂ）＋Ｃ＝Ｏｕｔｐｕｔ
【００２２】
したがって、ノード４６において結果を入力Ｃに加算する前に、ノード４４において入力ＡおよびＢを加算することが望ましい。しかしながら、このデータパス４０は間違った計算を生成することがある。それは、各ノード４４、４６には特定のレーテンシ、すなわち、結果がデータパス４０の次のステージに解放される前に加算器４４、４６が計算を完了するのに要するプロセッサ時間、が関連付けられているためである。言い換えると、データはデータパス４０中をロックステップ式に伝播し−各ノード４４、４６にレーテンシが関連付けられている。一般的には、全ノードにグローバルクロックが配布され（たとえば、１００ＭＨｚで実行する）、各ノードのレーテンシがクロックサイクル数で測定される。
【００２３】
その結果、一度データが入力Ａ、ＢおよびＣに同時に入力されると、データ入力Ａおよびデータ入力Ｂは入力データＣが加算器４６に到達するのと同時に加算器４４に到達する。その結果、加算器４６は入力データＣをどの値にも加算しようとせず（加算器４４からの値がまだ到達していないため）、間違った結果を生成する。加算器４６が２つの実際値を加算することができる後のクロックサイクルに対しては、加算器４４から加算器４６に到達するデータは入力Ｃから直接加算器４６に到達するデータよりも１サイクル遅れるため、やはり間違った数が加算される。
【００２４】
図４（ｂ）はこの問題へのハードウェアソリューションを示している。ソリューションは入力Ｃおよび加算器４６間のエッジ４８にバッファリング５０を追加することである。これにより入力Ｃから入力されるデータに１サイクルの遅延が加えられ、加算器４４からのデータ（すなわち、入力ＡおよびＢの積）は入力Ｃからのデータと同時に加算器４６に到達する。
【００２５】
したがって、正しい時間的方法で機能するデータパスまたはデータストリームを生成するためのバッファリングを挿入することが適切なＨＤＬの必要な特徴である。多くの場合、ＨＤＬのユーザは適切なバッファリングを指定する必要がある。しかしながら、ＨＤＬはデータパスを発生して実際のＦＰＧＡ上のハードウェア内に実装することができるが、ＦＰＧＡ上のデータパスウェイの最適化はあまり配慮されていない。
【００２６】
レーテンシを配慮した回路を構築するための２つの既知の方法は、Ａｓ  Ｓｏｏｎ  Ａｓ  Ｐｏｓｓｉｂｌｅ（ＡＳＡＰ）およびＡｓ  Ｌａｔｅ  Ａｓ  Ｐｏｓｓｉｂｌｅ（ＡＬＡＰ）である。ＡＳＡＰでは、全入力のサイクルが揃えられる、すなわち、全入力が同じ任意のサイクル（それは計算の開始時に０サイクルとすることができる）に揃えられる。しかしながら、この要求条件は、データパスの異なる分岐に沿った異なる入力レーテンシと共に、入力レーテンシのミスマッチにつながることがある。したがって、このような場合、図４（ｂ）に示すようなバッファリングが必要となる。バッファリングに利用可能なメモリはＦＰＧＡ１０上で制限されるため、しばしば所要バッファリング量を低減することが望まれる。
【００２７】
対照的に、ＡＬＡＰ方式は出力から開始するデータパスを開発する。ＡＬＡＰを使用して前記した例を解析すると、図４（ｃ）に示すデータパスが与えられる。図からお判りのように、入力Ｃは１のレーテンシ単位だけ前方にシフトされている。したがって、入力Ｃおよび加算器４６間のエッジ内にもはやバッファは必要ない。その結果、ブロックメモリ２６のような貴重なチップリソースをこの方法により省くことができる。
【００２８】
しかしながら、この方法は特定の状況にしか適切ではない。図４（ｄ）はデータパス５４を示している。データパス５４は図４（ｃ）のデータパス５２に対応するが、ここでは、追加出力５６が追加されている。図からお判りのように、出力５６は元の出力から−１のレーテンシだけオフセットされている、すなわち、第２の出力５６において所望される結果はＡ＋Ｂからのもの（すなわち、加算器４４からの結果）であり、そのため加算器４６が計算（Ａ＋Ｂ）＋Ｃを実施するのを待つ必要がない。
【００２９】
しかしながら、ＡＬＡＰは全出力が同じオフセットを有することを必要とするため、このデータパス配列はＡＬＡＰを使用して生成することができない。これはデータパスが出力で開始して生成されるため、出力が予定されるポイントを予め定めなければならないためである。したがって、図４（ｄ）に示すデータパス５４を実装するのに、図４（ｅ）に示す回路が必要となる。図からお判りのように、出力は全て同じオフセットであることを保証するために、追加バッファ５８が必要とされる。追加バッファが必要なければ次善の構成となり、リソースは過剰かつ非有益に使用される。
【先行技術文献】
【特許文献】
【００３０】
【特許文献１】ＵＳ−Ａ−７，０００，２１３
【特許文献２】ＵＳ−Ａ−６，９４１，５４１
【非特許文献】
【００３１】
【非特許文献１】“Ｓｙｎｔｈｅｓｉｓ  ａｎｄ  Ｏｐｔｉｍｉｚａｔｉｏｎｏｆ  Ｄｉｇｉｔａｌ  Ｃｉｒｃｕｉｔ”，Ｇ．ＤｅＭｉｃｈｅｌｉ，ＭｃＧｒａｗ−Ｈｉｌｌ，１９９４
【非特許文献２】“ＡＳＣ：Ａ  Ｓｔｒｅａｍ  Ｃｏｍｐｉｌｅｒ  ｆｏｒ  Ｃｏｍｐｕｔｉｎｇ  Ｗｉｔｈ  ＦＰＧＡ”Ｏ．Ｍｅｎｃｅｒ，ＩＥＥＥ  Ｔｒａｎｓａｃｔｉｏｎｓ  Ｏｎ  Ｃｏｍｐｕｔｅｒ  Ａｉｄｅｄ  ＤｅｓｉｇｎＯｆ  Ｉｎｔｅｇｒａｔｅｄ  Ｃｉｒｃｕｉｔｓ  Ａｎｄ  Ｓｙｓｔｅｍｓ  ２００６，Ｖｏｌ  ２５；Ｎｏ．９，ｐａｇｅｓ１６０３−１６１
【非特許文献３】“Ａ  Ｆｏｒｍａｌ  Ａｐｐｒｏａｃｈ  ｔｏ  ｔｈｅ  Ｓｃｈｅｄｕｌｉｎｇ  Ｐｒｏｂｌｅｍ  ｉｎ  Ｈｉｇｈ  Ｌｅｖｅｌ  Ｓｙｎｔｈｅｓｉｓ”．Ｃ．Ｔ．Ｈｗａｎｄ  ｅｔ  ａｌ，ＩＥＥＥ  Ｔｒａｎｓａｃｔｉｏｎ  ｏｎ  Ｃｏｍｐｕｔｅｒ−Ａｉｄｅｄ  Ｄｅｓｉｇｎ；Ｖｏｌ  １０；Ｎｏ  ４；１９９１
【非特許文献４】“Ｍｉｎｉｍｉｚｉｎｇ  Ｂｕｆｆｅｒ  Ｒｅｑｕｉｒｅｍｅｎｔｓ  ｕｎｄｅｒ  Ｒａｔｅ−Ｏｐｔｉｍａｌ  Ｓｃｈｅｄｕｌｅ  ｉｎ  Ｒｅｇｕｌａｒ  Ｄａｔａｆｌｏｗ  Ｎｅｔｗｏｒｋｓ”，Ｒ．Ｇｏｖｉｎｄａｒａｊａｎ  ｅｔ  ａｌ．ＡＣＡＰＳ  Ｔｅｃｈｎｉｃａｌ  Ｍｅｍｏ  ６９，Ｆｅｂ  １９９４，ＭＣＧｉｌｌ  Ｕｎｉｖｅｒｓｉｔｙ
【非特許文献５】“ＩＬＰ−Ｂａｓｅｄ  Ｓｃｈｅｄｕｌｉｎｇ  ｗｉｔｈ  Ｔｉｍｅ  ａｎｄ  Ｒｅｓｏｕｒｃｅ  Ｃｏｎｓｔｒａｉｎｔｓ  ｉｎ  Ｈｉｇｈ  Ｌｅｖｅｌ  Ｓｙｎｔｈｅｓｉｓ”，Ｓ．Ｃｈａｕｄｈｕｒｉ  ａｎｄ  Ｒ．Ｗａｌｋｅｒ，Ｐｒｏｃ．ＶＬＳＩ  Ｄｅｓｉｇｎ  ’９４，ｐｐ．１７−２５
【非特許文献６】“Ｒａｔｅ  Ｏｐｔｉｍａｌ  ＶＬＳＩ  ｄｅｓｉｇｎ  ｆｒｏｍ  ｄａｔａ  ｆｌｏｗ  ｇｒａｐｈ”，Ｏｈ  ｅｔ  ａｌ，ｓｕｂｍｉｓｓｉｏｎｓ  ｆｏｒ  ３５ｔｈ  Ｄｅｓｉｇｎ  Ａｕｔｏｍａｔｉｏｎ  Ｃｏｎｆｅｒｅｎｃｅ，ＤＡＣ  ９８
【非特許文献７】“Ｓｃｈｅｄｕｌｉｎｇ  ａｌｒｏｒｉｔｈｍ  ｆｏｒ  ｈｉｇｈ−ｌｅｖｅｌ  ｓｙｎｔｈｅｓｉｓ”Ｇｏｖｉｎｄａｒａｊａｎ，Ｔｅｒｍ  Ｐａｐｅｒ，Ｄｅｐｔ  ＥＣＥＣＳ，Ｕｎｉｖｅｒｓｉｔｙ  ｏｆ  Ｃｉｎｃｉｎｎａｔｉ，Ｍａｒｃｈ  １７  １９９５
【発明の概要】
【発明が解決しようとする課題】
【００３２】
図４（ｄ）に示すデータパス５４に対して、ＡＳＡＰもＡＬＡＰも最小限のリソースを使用してこの設計を最適にスケジュールすることができない。したがって、ＦＰＧＡを使用して実装することができるような大規模パイプライン化ハードウェアに対して最適化されたデータパスを発生する最適化された方法が必要とされている。より最適化された各データパスがＦＰＧＡ内にあり、一定量のブロックＲＡＭ２６を有する定められたＦＰＧＡに対してより多くのデータパスを収容することができる。その結果、ＦＰＧＡの処理パワーはその上に形成されたデータパスの効率的アーキテクチュアにより有効に引き上げることができる。
【００３３】
関連するシステムにおいてこれらの問題に取り組む試みがなされている。非特許文献１はマルチサイクルアーキテクチュアの文脈におけるスケジューリング操作について説明している。これは数サイクルに亘って操作を拡げながら全体レーテンシを最小限に抑えることに取り組んでいる。
【００３４】
非特許文献２はパイプライン化アーキテクチュアにおいてスケジューリングを使用するＨＤＬを説明している。しかしながら、ＦＰＧＡデータパスレイアウトの構成を最適化する規定はない。
【００３５】
アルゴリズム記述の最適化がハイレベル合成の分野で知られている。ハイレベル合成は所望する挙動のアルゴリズム記述を解釈してその挙動を実装するハードウェアを生成する自動化された設計プロセスである。開始点はＡＮＳＩＣのような言語内のハイレベル記述であり、次にこれはコントロールデータフローグラフ（ＣＤＦＧ）に翻訳される。ＣＤＦＧ内の操作は複数のコントロールステップへマッピングされ、次に同じハードウェアリソースを使用して異なるアルゴリズム操作を異なるコントロールステップにおいて実装する意図で操作を実行するためにリソースが割り当てられる。
【００３６】
ハイレベル合成法の例は非特許文献３、特許文献１、特許文献２、非特許文献４、非特許文献５、非特許文献６、および非特許文献７で見つけることができる。しかしながら、前記した例のいずれも最適化された並列パイプライン化ストリームプロセッサハードウェア設計のスケジューリングまたはＦＰＧＡ上へのそれらの実装には関連していない。
【００３７】
前記したように、計算ユニットまたはノードは慎重に配置されたバッファリングにより修正されない限りデータがずれてめちゃくちゃになってしまうことがあるレーテンシを有している。回路にバッファリングを追加してレーテンシをバランスさせれば簡単であるが、しばしばこれは次善策であり典型的なＦＰＧＡ上に提供される有限量のバッファリングメモリを過度に使用する結果となる。
【００３８】
したがって、これまでは、ＦＰＧＡ上に実装することができるような並列パイプライン化ハードウェアのデータパス構造を最適化するための既知の方式およびハードウェアは、効率的なストリームスケジューリングによりＦＰＧＡの利用可能なリソースを最適化して完全に利用することができないという技術的問題に苦しんでいる。
【課題を解決するための手段】
【００３９】
本発明の第１の側面に従って、パイプライン化並列ストリームプロセッサに対するハードウェア設計の発生方法が提供され、この方法は、コンピューティングデバイス上で、前記パイプライン化並列ストリームプロセッサの一部としてハードウェア内に実装されるプロセスを指示する処理操作を定義するステップと、コンピューティングデバイス上で、タイムドメイン内の並列構造としての前記処理操作をクロックサイクルの関数として表わすグラフを定義するステップと、を含み、前記グラフは前記パイプライン化並列ストリームプロセッサに対するハードウェア設計として実装される少なくとも１つのデータパスを含み、かつデータ値がその中をストリーミングできるように構成された複数の並列分岐を含み、前記または各データパスが少なくとも１つの入力と、少なくとも１つの出力と、前記パイプライン化並列ストリームプロセッサの一部としてハードウェア内に実装されるハードウェアエレメントに直接対応する少なくとも１つの個別オブジェクトとを含むものとして表現され、前記または各個別オブジェクトは１クロックサイクル以上機能を実行するように動作することができ、かつ予め定義されたレーテンシが関連付けられており、前記予め定義されたレーテンシは前記ハードウェアエレメントが前記機能を実行するのに必要な時間を表し、前記データ値は増加するクロックサイクルの関数として前記データパス中を少なくとも１つの入力から少なくとも１つの出力まで伝播し、さらに、コンピューティングデバイス上で、少なくとも１つのデータパスおよび前記グラフの関連付けられたレーテンシを１組の代数線形不等式として定義するステップと、コンピューティングデバイス上で、前記１組の線形不等式を解くステップと、コンピューティングデバイス上で、前記解かれた線形不等式を使用して前記グラフ内の少なくとも１つのデータパスを最適化して最適化されたグラフを作り出すステップと、コンピューティングデバイス上で、前記最適化されたグラフを利用して前記パイプライン化並列ストリームプロセッサとしてハードウェア内に実装する最適化されたハードウェア設計を定義するステップと、を含んでいる。
【００４０】
このような方法を提供することにより、ストリームプロセッサに対するハードウェア設計の最適化は、最適解を作り出すのに整数線形計画法を使用することができる代数最適化問題と見なすことができる。これによりハードウェア設計は、パイプライン化並列ストリームプロセッサとしてハードウェア内に実装される時に、ハードウェアプラットフォームの利用可能なリソースを完全に利用することができる。実施例では、各個別オブジェクトのレーテンシは知られており予め定義されている。これは個別オブジェクトにより表わされるハードウェアエレメント（１つ以上のハードウェアユニットを含む）が既知のレーテンシを有するためである。その結果、実施例では、予め定義されたレーテンシは一定値を有する固定レーテンシである。
【００４１】
一実施例では、前記処理操作は前記パイプライン化並列ストリームプロセッサとしてハードウェア内に実装される数学関数または計算を含んでいる。
【００４２】
一実施例では、前記または各ハードウェアエレメントが前記パイプライン化並列ストリームプロセッサ上に１つ以上のハードウェアユニットを含んでいる。
【００４３】
一実施例では、前記または各ハードウェアエレメントが予め定められた数学関数を実施するように構成される。
【００４４】
一実施例では、前記最適化ステップは前記データパスをスケジュールするのに必要なバッファリングの量を最小限に抑えるステップを含んでいる。
【００４５】
一実施例では、データパスを最適化する前記ステップは、さらに、所望により、前記データパスの少なくともいくつかの分岐にバッファリングを挿入するステップを含んでいる。
【００４６】
一実施例では、前記バッファリングは前記パイプライン化並列ストリームプロセッサ上のメモリユニットを表す。
【００４７】
一実施例では、前記バッファリングは全体グラフに対して最小限に抑えられる。
【００４８】
一実施例では、前記最適化ステップは、さらに、２つ以上のバッファを併合して単一バッファとするステップを含んでいる。
【００４９】
一実施例では、前記最適化ステップは、さらに、単一バッファを前記少なくとも１つのデータパスの２つ以上の分岐に割り当てるステップを含んでいる。
【００５０】
一実施例では、前記グラフは複数の入力と複数の出力を含み、各入力および各出力は前記少なくとも１つのデータパスの少なくとも１つの分岐に接続されている。
【００５１】
一実施例では、前記入力はサイクルが揃えられていない。一実施例では、前記出力はサイクルが揃えられていない。
【００５２】
一実施例では、前記グラフは前記パイプライン化並列ストリームプロセッサとしてハードウェア内に実装される複数の並列データパスを含んでおり、前記解答および最適化ステップは前記複数の並列データパスの各々に対して実施される。
【００５３】
一実施例では、この方法は、さらに、コンピューティングデバイス上で、データパス内の特定のポイントにある少なくとも１つのストリームオフセットオブジェクトを提供するステップを含み、前記ストリームオフセットオブジェクトは、特定のクロックサイクルおよびデータパス内の前記特定のポイントに対して、前記特定のクロックサイクルとは異なるクロックサイクルからのデータ値にアクセスするように動作することができる。
【００５４】
一実施例では、前記少なくとも１つのストリームオフセットオブジェクトは前記特定のクロックサイクルの前のクロックサイクルからのデータ値にアクセスするように動作することができる。
【００５５】
一実施例では、前記少なくとも１つのストリームオフセットオブジェクトは前記特定のクロックサイクルの後のクロックサイクルからのデータ値にアクセスするように動作することができる。
【００５６】
一実施例では、前記少なくとも１つのストリームオフセットオブジェクトは予め選定されたクロックサイクル数だけ前記特定のクロックサイクルからオフセットされたクロックサイクルからのデータ値にアクセスするように動作することができる。
【００５７】
一実施例では、前記少なくとも１つのストリームオフセットオブジェクトは変数に依存する数クロックサイクル数だけ前記特定のクロックサイクルからオフセットされたクロックサイクルからのデータ値にアクセスするように動作することができる。
【００５８】
一実施例では、前記変数の値は前記最適化されたハードウェア設計が前記パイプライン化並列ストリームプロセッサとしてハードウェア内に実装された後で指定される。
【００５９】
一実施例では、前記変数の値は前記処理操作が前記パイプライン化並列ストリームプロセッサ上で実行される前に指定される。
【００６０】
本発明の第２の側面に従って、ストリームプロセッサに対するハードウェア設計を発生する方法が提供され、この方法は、コンピューティングデバイス上で、前記ストリームプロセッサの一部としてハードウェア内に実装されるプロセスを指示する処理操作を定義するステップと、コンピューティングデバイス上で、タイムドメイン内の前記処理操作を表わすグラフをクロックサイクルの関数として定義するステップとを含み、前記グラフは前記ストリームプロセッサの一部としてハードウェア内に実装されかつデータをその中にストリーミングできるように構成された少なくとも１つのデータパスを含み、前記または各データパスが少なくとも１つの入力と、少なくとも１つの出力と少なくとも１つの個別オブジェクトとを含み、前記データは前記データパス中を少なくとも１つの入力から少なくとも１つの出力まで増加するクロックサイクルの関数として伝播し、さらに、コンピューティングデバイス上で、データパス内の特定のポイントにある少なくとも１つのストリームオフセットオブジェクトを提供するステップを含み、前記ストリームオフセットオブジェクトは、特定のクロックサイクルおよびデータパス内の前記特定のポイントに対して、前記特定のクロックサイクルとは異なるクロックサイクルからのデータ値にアクセスするように動作することができ、さらに、コンピューティングデバイス上で、前記グラフ内の少なくとも１つのデータパスを最適化して最適化されたグラフを作り出すステップと、コンピューティングデバイス上で、前記最適化されたグラフを利用してハードウェア内に実装する最適化されたハードウェア設計を前記ストリームプロセッサとして定義するステップと、を含んでいる。
【００６１】
一実施例では、前記少なくとも１つのストリームオフセットオブジェクトは前記特定のクロックサイクルの前のクロックサイクルからのデータ値にアクセスするように動作することができる。
【００６２】
一実施例では、前記少なくとも１つのストリームオフセットオブジェクトは前記特定のクロックサイクルの後のクロックサイクルからのデータ値にアクセスするように動作することができる。
【００６３】
一実施例では、前記少なくとも１つのストリームオフセットオブジェクトは予め選定されたクロックサイクル数だけ前記特定のクロックサイクルからオフセットされたクロックサイクルからのデータ値にアクセスするように動作することができる。
【００６４】
一実施例では、前記少なくとも１つのストリームオフセットオブジェクトは変数に依存する数クロックサイクル数だけ前記特定のクロックサイクルからオフセットされたクロックサイクルからのデータ値にアクセスするように動作することができる。
【００６５】
一実施例では、前記変数は前記最適化されたハードウェア設計が前記ストリームプロセッサとしてハードウェア内に実装された後で指定される。
【００６６】
一実施例では、前記変数の値は前記処理操作が前記ストリームプロセッサ上で実行される前に指定される。
【００６７】
一実施例では、最適化ステップは、さらに、コンピューティングデバイス上で、前記グラフの前記少なくとも１つのデータパスを１組の代数線形不等式として定義するステップと、コンピューティングデバイス上で、前記１組の線形不等式を解くステップと、コンピューティングデバイス上で、前記解かれた線形不等式を使用して前記グラフ内の少なくとも１つのデータパスを最適化して最適化されたグラフを作り出すステップと、を含んでいる。
【００６８】
一実施例では、前記ストリームプロセッサはＦｉｅｌｄ  Ｐｒｏｇｒａｍｍａｂｌｅ  Ｇａｔｅ  Ａｒｒａｙ  またはＡｐｐｌｉｃａｔｉｏｎ  Ｓｐｅｃｉｆｉｃ  Ｉｎｔｅｇｒａｔｅｄ  Ｃｉｒｃｕｉｔ上に実装される。
【００６９】
一実施例では、この方法は、さらに、前記ストリームプロセッサが前記処理操作を実施できるように前記ストリームプロセッサ上に前記最適化されたハードウェア設計を形成するステップを含んでいる。
【００７０】
本発明の第３の側面に従って、第１または第２の側面の方法を使用して発生された設計を有する、Ｆｉｅｌｄ  Ｐｒｏｇｒａｍｍａｂｌｅ  Ｇａｔｅ  Ａｒｒａｙ、Ａｐｐｌｉｃａｔｉｏｎ  Ｓｐｅｃｉｆｉｃ  Ｉｎｔｅｇｒａｔｅｄ  Ｃｉｒｃｕｉｔまたはプログラマブルロジックデバイスが提供される。
【００７１】
本発明の第４の側面に従って、ハードウェアストリームプロセッサを発生するシステムが提供され、このシステムは第１または第２の側面の一方の方法を実行して発生された設計を有するプログラマブルロジックデバイスのプログラミング命令のリストを発生するようにされたプロセッサを含んでいる。
【００７２】
本発明の第５の側面に従って、プログラマブルロジックデバイスを作る方法が提供され、方法の第１または第２の側面を使用して設計を発生するステップと、発生された設計を具現するようにロジックデバイスをプログラミングするステップと、を含んでいる。
【００７３】
本発明の第６の側面に従って、コンピュータ上で実行する時、第１または第２の側面のステップを実行するようにされたコンピュータプログラムが提供される。
【００７４】
本発明の第７の側面に従って、コンピュータ読取可能媒体上に格納された第６の側面に従ったコンピュータプログラムが提供される。
【００７５】
本発明の第８の側面に従って、第１または第２の側面の方法を使用して発生された設計を有するＦｉｅｌｄ  Ｐｒｏｇｒａｍｍａｂｌｅ  Ｇａｔｅ  Ａｒｒａｙ、他のプログラマブルロジックデバイス、またはＡｐｐｌｉｃａｔｉｏｎ  Ｓｐｅｃｉｆｉｃ  Ｉｎｔｅｇｒａｔｅｄ  Ｃｉｒｃｕｉｔが提供される。
【００７６】
本発明の第９の側面に従って、ハードウェアストリームプロセッサ設計を発生するシステムが提供され、このシステムは第１または第２の側面の方法を実行して発生された設計を有するプログラマブルロジックデバイスのプログラミング命令のリストを発生するようにされたプロセッサを含んでいる。
【００７７】
本発明の第１０の側面に従って、第３の側面に従ったＦｉｅｌｄ  Ｐｒｏｇｒａｍｍａｂｌｅ  Ｇａｔｅ  Ａｒｒａｙ、Ａｐｐｌｉｃａｔｉｏｎ  Ｓｐｅｃｉｆｉｃ  Ｉｎｔｅｇｒａｔｅｄまたはプログラマブルロジックデバイスを含むアクセラレータカードが提供される。
【００７８】
本発明の第１１の側面に従って、中央処理装置、メモリ、および第１０の側面に従った少なくとも１つのアクセラレータカードを含むコンピューティングデバイスが提供される。
【００７９】
本発明の第１２の側面に従って、第１または第２の側面のステップを実施するための１つ以上のソフトウエア部分を含む、プログラマブル処理装置により実行可能なコンピュータプログラムプロダクトが提供される。
【００８０】
本発明の第１３の側面に従って、第１２の側面に従ったコンピュータプログラムプロダクトがその上に格納されているコンピュータ使用可能記憶媒体が提供される。
【図面の簡単な説明】
【００８１】
【図１】ＦＰＧＡデバイスの回路図である。
【図２】図１のＦＰＧＡベースストリームプロセッサの一部を形成するプログラマブルロジックブロックを示す回路図である。
【図３】ＦＰＧＡベースストリームプロセッサの可能な計算構造の例の回路図である。
【図４（ａ）】エラーを発生する結果となる単純なデータパスを例示するグラフの例を示す図である。
【図４（ｂ）】正しい計算を保証するためにバッファリングが追加されるＡＳＡＰを使用してスケジュールされた単純なデータパスの例を示す図である。
【図４（ｃ）】ＡＬＡＰ技術を使用してスケジュールされた単純なデータパスの例を示す図である。
【図４（ｄ）】２つの出力を含む所望する単純なデータパスの例を示す図である。
【図４（ｅ）】ＡＬＡＰ技術を使用して作り出された図４（ｄ）のデータパスの例を示す図である。
【図５】２つのノードおよび関連付けられたレーテンシの例を示す図である。
【図６】追加記号のある図４ａの例を示す図である。
【図７（ａ）】ｐｒｅｖの使用例を示す図である。
【図７（ｂ）】ｐｒｅｖのさらなる使用例を示す図である。
【図８（ａ）】ストリームオフセットの使用を示す図である。
【図８（ｂ）】ストリームオフセットの使用を示す図である。
【図８（ｃ）】ストリームオフセットの使用を示す図である。
【図８（ｄ）】バッファタッピングおよびフォールディングの使用を示す図である。
【図９】ループの使用を示す図である。
【図１０（ａ）】可変オフセットの使用およびそれらの実装を示す図である。
【図１０（ｂ）】可変オフセットの使用およびそれらの実装を示す図である。
【図１０（ｃ）】可変オフセットの使用およびそれらの実装を示す図である。
【図１１】本発明の方法を実施するコンピューティング装置の略図である。
【図１２】本発明の方法のフロー図を示す図である。
【図１３】本発明の方法を使用して作り出されたストリーム処理ハードウェアで使用するのに適したコンピュータ装置の略図である。
【発明を実施するための形態】
【００８２】
次に、添付図を参照して本発明の実施例を詳細に説明する。前記したように、ストリームコンピューティングは大量のデータを算術演算ハードウェアで処理するための効率的な方法である。しかしながら、ストリームコンピューティングデバイスの性能はしばしばブロックメモリ２６等のチップリソースにより制限される。
【００８３】
コンピュートまたはアリスマティック等のハードウェアエレメントのレーテンシ、および計算の前の値を将来の計算のために保持する必要性により、バッファリングを挿入しなければならない。バッファリングの非効率的使用によりＦＰＧＡ１０上のメモリは過剰に消費される結果となる。これにより、ＦＰＧＡ１０内に実装することができるデータパスまたはカーネルの数が制限される。
【００８４】
しかしながら、このバッファリングの配置に対して多くのオプションがある。バッファリングを最適に配置することはグローバルな最適化問題と考えることができる。これに関して、整数線形計画法を使用して最適解を作り出すことができる。
【００８５】
前記したように、グラフはデータパスを使用してアルゴリズムをタイムドメイン内の並列構造として記述して所望するアルゴリズムを表わす方法である。データパスはエッジにより接続されたノードのグループからなる数学的構造としてグラフィカルに表現することができる。ノードは演算ユニットまたは計算ユニットのような個別オブジェクトを表す。エッジは２つのノード間の接続を表す。言い換えると、ノードは演算を表しエッジは各演算の出力がもう１つの演算の入力へ供給される場所を表す。
【００８６】
ノードおよびエッジは共に属性を持つことができる。たとえば、ノードは関連付けられたレーテンシのような特定の性質を有することができる。さらに、エッジは関連付けられた方向を有することができる。
【００８７】
典型的なＦＰＧＡ１０はいくつかの個別データパスを含んでいる。典型的なＦＰＧＡ１０上のデータパスの数は典型的に１０以下である。しかしながら、各データパスはおびただしい数の並列分岐を含むことができ、それは典型的に合計１０２から１０５の計算エレメントを含んでいる。これにより、大規模な並列計算を実施することができる。これらのデータパスの各々について考えると、ＦＰＧＡ上のデータ分岐を含むおびただしい数のデータパスのグローバル最小化の最適解が求められる。
【００８８】
図５は本発明の基礎となる原理を示している。図５は２つのノード１０２、１０４を示している。ノード１０２は入力１０６および出力１０８を有する。ノード１０４は入力１１０および出力１１２を有する。２つのノード１０２、１０４はエッジ１１４により互いに接続されている。エッジ１１４はノード１０２の出力１０８およびノード１０４の入力１１０間に延在している。
【００８９】
ノード１０２は「親」ノードｍでありノード１０４は「子」ノードｎである。データは時間Ｔ（ｍ）に「親」ノードｍ１０２に到達する。ノード１０２は計算ユニットを含むため、受信データに計算を実施するための有限量の時間が必要である。このような計算はＬＵＴ、シフトレジスタまたは他のエレメントを含むことがある。計算を実施するのに必要な時間は「親」ノードｍ１０２のレーテンシとして知られておりλ（ｍ）として定義される。ノード１０２、１０４はＦＰＧＡ１０上の１つ以上のハードウェアユニット（たとえば、ＣＬＢ１２）を表し、それに対応し、そのレーテンシは実際のハードウェアのそれに対応する。
【００９０】
したがって、データは時間Ｔ（ｎ）に「子」ノードｎ１０４に到達する。したがって、Ｔ（ｎ）はデータが親ｍの入力１０６に到達する時間Ｔ（ｍ）、プラス「親」ノードｍ１０２のレーテンシλ（ｍ）以上でなければならない。時間Ｔ（ｎ）はエッジ１１４のレーテンシがゼロである時のみＴ（ｍ）プラスλ（ｍ）に等しい。一般的には、エッジはいかなるフリップフロップも含まずノード間の接続を表すにすぎないため、レーテンシが無い。以下の説明では、ノードはレーテンシを有するものとして説明される。しかしながら、別の定式化を利用してエッジはレーテンシを有するものとして定義されたり、ノードとエッジの両方にレーテンシが関連付けられたりすることがある。
【００９１】
さらに、出力レーテンシに加えられることにより入力レーテンシを考慮することもできるが、これらの例では全入力レーテンシがゼロと仮定される。
【００９２】
したがって、Ｎのノードがあるところでは、図５の構成は式（１）に記載されているように代数表現することができる。
【数１】
0006001873.tif 000002
【００９３】
次に、図４（ａ）の例を取ると、１組の線形不等式を作り出すことができる。図６は図４（ａ）のデータパスを表しているが、各ノードにｎ１からｎ５間の参照番号を割り当てている追加記号がある。
【００９４】
次に、図６に示すように、図４（ａ）および図６のデータパス４０は、式（２）に記載されているように、追加操作が１サイクルのレーテンシを有するものと仮定すると、一連の線形制約として表わすことができる。
【数２】
0006001873.tif 000003
【００９５】
これらの線形制約に加え、我々は式（３）に記載されているようにこれらの制約を満たすのに必要なバッファリングの総数の１次式を定式化することもできる。
【数３】
0006001873.tif 000004
【００９６】
式（３）のバッファリングの総数に対するこの式は整数線形プログラミングソルバー、たとえば、ＧＮＵ  Ｌｉｎｅａｒ  Ｐｒｏｇｒａｍｍｉｎｇ  Ｋｉｔ（ＧＬＰＫ）を使用して式（２）の制約の存在下で最適に最小化することができる。この最小化の結果は合計バッファリングが最小限となるようなグラフ内の全ノードに対するＴ（ｎ）に対する固定値の「スケジュール」である。バッファリングが最小化されるとＦＰＧＡ１０におけるブロックメモリ使用量も最小化される。前記したように、ブロックメモリ使用量はしばしばＦＰＧＡ設計の制限因子である。
【００９７】
本発明により最適化することができるデータパスの他の１つの重要な特徴は「ｐｅｒｖ」すなわち前の値として知られているものである。ｐｅｒｖにより前の値を計算において使用することができる、たとえば、ストリーム内で１０サイクル振り返るためにサイズ１０のｐｒｅｖを使用する。たとえば、方程式（４）における計算を取ると、
【数４】
0006001873.tif 000005
これは次のように記述することができる。
【数５】
0006001873.tif 000006
【００９８】
一般的に、ｐｒｅｖはゼロレーテンシのバッファとして実装される。バッファサイズはデータ上に導入される遅延であり、前の値を出力に存在させる。これは図７（ａ）に例示されており、方程式（５）を実装する。したがって、前記したことを達成するには、ゼロレーテンシの２つのバッファ（（図７（ａ）ではｐｒｅｖ（１）のラベルが付されている）を提供し、さらに、加算器ノードのレーテンシが与えられた時にデータパスを正しくスケジュールするために、レーテンシ１の単一バッファを提供して、合計バッファカウントを３とする必要がある。
【００９９】
対照的に、本発明のｐｒｅｖはストリーム内で後向きのストリームオフセットとして定義することができ、負レーテンシを有するノードを識別するのと同等である。したがって、本発明では、スケジューリングはグローバルに最適化することができ図７（ａ）のデータパスは図７（ｂ）の配列で置換することができる。図からお判りのように、ダイヤモンド形ノードとして示されている、ストリームオフセットを使用してこの回路がスケジュールされゼロバッファリングを必要とする。これは、第２の加算器ノードに対して必要な遅延を提供するのに第１の加算器ノードのレーテンシが使用されており、その結果追加バッファリングが必要とされないためである。
【０１００】
言い換えると、ストリームオフセットノードを使用しても直接ハードウェアを作り出せることはないが、スケジューリング後にデータは正しい場所で正確な量だけオフセットされる。個別レーテンシのいくつかは相殺され実装レーテンシを利用することができるため、これは非常に効率的である。
【０１０１】
さらに一般的タイプの機能はディスカードである。下記の代数式の例において、
【数６】
0006001873.tif 000007
【０１０２】
方程式ｐｒｅｖ（ａ）＋（ａ）を実装する回路は第１のサイクル上に無効な結果を発生し、それはｐｒｅｖ機能が１つの出力を１サイクル遅らせ、第１のサイクル上でａだけが加算器に達しｐｒｅｖ（ａ）は達しないためである。したがって、第１のサイクルは無効データを含んでいる。これはディスカードを使用して取り組むことができ、それは第１の（無効）結果を単純に廃棄して次の結果を出力へ通す。ｐｒｅｖがデータストリームの前の値に対する要求であれば、ディスカードは「将来」値を要求していると考えることができる。
【０１０３】
こうして、ｐｒｅｖおよびディスカードは共にストリームオフセットとして一般化することができる。したがって、所望するオフセットｎを有する変数ａに対して、ｐｒｅｖまたはディスカードは次のように表わすことができ、
【数７】
0006001873.tif 000008
そのため、例として、方程式（８）を取ると、
【数８】
0006001873.tif 000009
方程式（８）は新しい定式化の元で次のように書くことができ、
【数９】
0006001873.tif 000010
最適化プロセスの実際的な例として、方程式（１０）を取ると、
【数１０】
0006001873.tif 000011
これは一般的なケースであり、本発明において次のように表わすことができる。
【数１１】
0006001873.tif 000012
【０１０４】
これに対するデータパスが図８（ａ）に示されており、スケジュールされたデータパス構成が図８（ｂ）に示されている。図からお判りのように、この配列において合計２８のバッファリングが必要である。加算器の１サイクルレーテンシが考慮されているため、割り当てられたバッファはサイズ２０および１０ではなくサイズ１９および９であることに注意していただきたい。
【０１０５】
このバッファリングはタップアンドフォールドとして知られるさらなるプロセスによりさらに低減することができる。
【０１０６】
図８（ｃ）は「タッピング」の例を示す。この例では、１９および９の別個のバッファが９の共通バッファおよび１０のさらなるバッファにより置換されており、９のバッファが省かれる。
【０１０７】
さらに、図８（ｄ）は「フォールディング」の例を示し、２つのバッファが１つに結合される。別個のバッファ割当てにより異なるメモリリソースが割り当てられることがあるため、これは重要である。説明すると、ブロックメモリはしばしば１８Ｋｂｉｔまたは３６Ｋｂｉｔ単位で割り当てられる。バッファが割り当てられると、バッファの全体が利用されるかまたはその一部だけしか利用されないかは無関係となる。より小さなバッファに対して、アクセスはバッファ変化にアドレス指定されてバッファの一部だけしか使用されない。しかしながら、バッファの残りを他のデータパスが使用することはできない。したがって、バッファを「フォールド」すなわち簡略化できることはリソース管理において重要である。
【０１０８】
本発明の方法はループを処理するように動作することもできる。このタイプのデータパスパイプライン内に帰還が含まれておれば、依存関係ループが導入される。データが１サイクル内でループの回路全体を完了できなければ、これは特定のパイプライン内に問題を提起する。
【０１０９】
伝統的に、これらの問題はバッファを挿入して解決される。通常これは手動でバッファサイズを回路のレーテンシに対してバランスさせデータをスケジュールして行われる。
【０１１０】
しかしながら、本方法によりこの問題を考慮すると、スケジューリング一次方程式を満たすために、全体ループのレーテンシをゼロにしなければならない。これは負のストリームオフセットを挿入すれば可能である。負のストリームオフセットが十分大きければ、回路はソースコードから期待される結果を与える。さもなくば、コンパイルが失敗する。しかしながら、失敗によりユーザへ貴重な帰還が提供される。たとえば、コンパイルが失敗すると、これはループが可能ではないことを示す。他の方法で必要なバッファの手動挿入が排除され、全ループのレーテンシが考慮されるため必要なバッファメモリの量が最適化される。本発明を使用して形成されたループの例が図９に示されている。
【０１１１】
いくつかの状況において、固定レーテンシを使用するのは適切ではない。このような状況は、たとえば、１行以上オフセットされた多次元データセット内のポイントにアクセスしたいが、データセットの実際のサイズが最初に知られていない場合に生じることがある。これは可変レーテンシが有用である時−データパスをコンパイルする時にサイズが知られていない２または３次元データブロック内のポイントにアクセスするためにオフセットを使用する時である。
【０１１２】
例として、１００×１００データポイントの２次元ブロックについて考える。この場合、前の行のポイントにアクセスするのに−１００のオフセットが必要である。しかしながら、データパスをコンパイルする時にブロックのディメンジョンが知られていなければ、異なる行のデータを選択するオフセットを提供することはできない。
【０１１３】
しかしながら、たとえコンパイルする時にサイズが知られていなくても、ブロックディメンジョンを代数的にｎｘ×ｎｙとして記述することができる。したがって、異なる行にアクセスするのに−ｎｘのオフセットが必要である。さらに、代数レーテンシはそれらを個別の係数に分解して最適化することができる。次に、これらのシステムを独立に解くことができる。たとえば、次式（１２）に記載された代数不等式を有するものと仮定すると、
【数１２】
0006001873.tif 000013
【０１１４】
これらの式はｎｘおよびｎｘｙに対する値が知られていないため線形ソルバーを使用して直接解くことができない。これに対処するために、我々はｎｘ、ｎｘｙおよび式の定数部だけに関する１組の個別の不等式へ、それぞれ、分解してそれを解くことができる。式（１２）に対して、これは次のように行われる。
【数１３】
0006001873.tif 000014
【数１４】
0006001873.tif 000015
および
【数１５】
0006001873.tif 000016
【０１１５】
ｎｘ、ｎｘｙおよび定数部に対する不等式が解かれると、加算を使用してそれらを結合して、次のようなグラフに対する最終「スケジュール」を発生することができる。
【数１６】
0006001873.tif 000017
【０１１６】
可変オフセットがｎｘである場合、ｎｘに対するスケジュール（図１０（ｂ）に示す）と一緒に定数に対するスケジュールが作り出されて（図１０（ａ））結合され、その結果図１０（ｃ）に示すスケジュールが与えられる。このようなオフセットは本発明の方法において容易に実装することができ、ＦＰＧＡをコンパイルする時（すなわち、ストリームプロセッサに対するハードウェア設計をＦＰＧＡ内に実装する時）にデータブロックの実際のサイズが知られていないＦＰＧＡ設計を作り出すためのより高い柔軟性が与えられる。
【０１１７】
チップ上の物理的バッファメモリをｎｘの最大許容サイズに対して割り当てることができ、実行時により小さい値のｎｘが必要であればバッファの一部だけを利用することができる。しかしながら、ｎｘの指定された最小および最大値が与えられると、発生された回路は最少量のバッファリングを最適に含んでいる。
【０１１８】
次に、図１１および１２を参照して、本発明の実装について説明する。
【０１１９】
ステップ３００：ライブラリを初期化する
本発明の方法は標準コンピューティング装置４００またはＷｉｎｄｏｗｓ（登録商標）やＬｉｎｕｘ（登録商標）のようなオペレーティングシステムを実行する他のプログラムドまたはプログラマブル装置で実行することができる。
【０１２０】
この実施例では、本方法はＪａｖａ（登録商標）ライブラリを利用するアプリケーション４０２として実装される。しかしながら、他の言語を使用することもでき、それらは当業者には自明である。たとえば、アプリケーションはＣ、Ｃ＋＋または任意他の適切なプログラミング言語で実行することができる。
【０１２１】
アプリケーション４０２はコンピューティング装置４００のユーザがコマンドを入力してアプリケーションにアクセスできるようにするグラフィカルユーザインターフェイス（ＧＵＩ）４０６を有している。
【０１２２】
ステップ３００において、アプリケーションおよびＪａｖａライブラリが初期化される。次にこの方法はステップ３０２へ進む。
【０１２３】
ステップ３０２：データ式を指定する
ＧＵＩ４０６を介して、ユーザは所望するデータフローを式として指定する。これはａｄｄ（ａｄｄ（ａ，ｂ），ｃ）のようなコマンドを含むことができる。例として、ユーザは式（１８）に定義されているような典型的な２Ｄ断面畳み込みを処理したいことがある。式（１８）は、簡潔にするため、速記用語を使用し、
ａ＊ｂはｍｕｌ（ａ，ｂ）が２入力を有する複数のノードを生成することを意味し、
ａ＋ｂはａｄｄ（ａ，ｂ）が２入力を有するａｄｄノードを生成することを意味し、
ａ［ｂ］はｓｔｒｅａｍＯｆｆｓｅｔ（ａ，ｂ）が１入力およびｂのオフセットを有するストリームオフセットノードを生成することを意味する。
【数１８】
0006001873.tif 000018
ここに、ｏは出力であり、ｉは入力でありｎｘはデータセット内の高速次元（ｆａｓｔ  ｄｉｍｅｎｓｉｏｎ）の可変サイズである。
【０１２４】
これらのコマンドおよび式が入力されると、本方法はステップ３０４へ進む。
【０１２５】
ステップ３０４：グラフを作り出す
ステップ３０２においてコマンドが入力されると、アプリケーション４０２はＪａｖａライブラリ４０４を利用してＪａｖａオブジェクトにより表わされるグラフを作り出す。式（１８）において前記した例を使用して、これはグラフを次のように発生する。
【表１】
0006001873.tif 000019
本方法は次にステップ３０６へ進む。
【０１２６】
ステップ３０６：レーテンシ情報を抽出して処理する
ステップ３０６において、ステップ３０４で作り出されたグラフ内のレーテンシ情報が抽出される。式（１８）に示された例を取るために、レーテンシが次のように作り出される。
【表２】
0006001873.tif 000020
次に、本方法はステップ３０８へ進む。
【０１２７】
ステップ３０８：線形不等式およびバッファリング式を定義する
ステップ３０２に記載したようなグラフの定義およびステップ３０６で定義または仮定された関連するレーテンシから、本方法は次に各データパスを定義する１組の線形不等式を発生する。式（１８）の例を使用して、これはグラフ内のノードに対するレーテンシの定数部に対する制約とバッファリング式の下記の組合せを提供する。
【表３】
0006001873.tif 000021
また、ｎｘに対する下記の制約とバッファリング式を提供する。
【表４】
0006001873.tif 000022
一度制約が線形不等式のグループとして設定されると、本方法はステップ３１０へ進む。
【０１２８】
ステップ３１０：線形不等式を解く
ステップ３１０において、そこで発生された線形不等式が解かれる。線形不等式はそれらを整数線形プログラミング（ＩＬＰ）ソルバーへ通して実行することにより解くことができる。このような線形（ｌｉｎｅａｒ  ｓｙｓｔｅｍ）は、たとえば、ＧＮＵ  ＬｉｎｅａｒＰｒｏｇｒａｍｍｉｎｇ  Ｋｉｔ（ＧＬＰＫ）を使用して解くことができる。こうして、ここで使用された例を取ると、下記の式（１９）は定数とｎｘの両方に対して最小化される。
【数１９】
0006001873.tif 000023
最小化の結果から下記のパイプラインスケジュールが作り出される。
【表５】
0006001873.tif 000024
次に、本方法はステップ３１２へ進む。
【０１２９】
ステップ３１２：グラフにバッファリングを挿入する
ステップ３１０で計算された最小化されたスケジュールが決定されると、このスケジュールはそれを満たすバッファノードを挿入することによりグラフに適用される。定義された前記例を使用するために、これは次のようにバッファリングを作り出す。
【表６】
0006001873.tif 000025
次に、本方法はステップ３１４へ進む。
【０１３０】
ステップ３１４：バッファリングを最適化する
さまざまな最適化パスをデータパス上で実行することができる。前記したように、これはタップおよびフォールド操作を含むことができる。フォールド操作はそこで２つのバッファが端と端をつないで見えて１つのより長いバッファへ併合される操作である。
【０１３１】
前記したように、タッピングは同じノード出力から来て異なるノード入力へ行く２つのバッファが存在するところである。この場合、バッファは２つのチェーンバッファへ変換することができる。たとえば、長さがＭおよびＮでＭ＞Ｎである２つのバッファを長さがＮのバッファとそれに続く長さが（Ｍ−Ｎ）のバッファへ変換することができる。これは無駄になるスペースを使用することにより多くのオンチップメモリを節約することができる。
【０１３２】
前記した例において、ノード０（全長５）から出てくる３つのバッファを長さ１の１つのバッファとそれに続く長さ２（全長３）の１つのバッファへタッピングすることができる。この値３はＢ０の最終値に対応する。
スケジュールが定義されると、本方法はステップ３１６へ進む。
【０１３３】
ステップ３１６：グラフをコンパイルする
最適化されたスケジュールが決定されると、グラフは次に物理的ＦＰＧＡを形成できるようなフォーマットへコンパイルすることができる。コンパイラおよびコンパイル方法は公知であり、当業者ならば本発明で使用できるソフトウエア、ハードウェアおよび実装が容易にお判りであろう。次に、本方法はステップ３１８へ進む。
【０１３４】
ステップ３１８：ＦＰＧＡ設計を作り出す
ステップ３１６においてグラフが正しいフォーマットにコンパイルされていると、ストリームプロセッサに対するＦＰＧＡ設計が形成される。次に、ＦＰＧＡ設計を随意使用して最適化されたデータパス（またはカーネル）およびデータフローをハードウェア内に実装することができる。ＦＰＧＡ設計がＦＰＧＡチップまたはデバイス上のハードウェア内に形成されていると、エンドユーザは必要に応じてそれを使用してステップ３０２で定義されたストリーム計算を行うことができる。
【０１３５】
図１３は本発明の方法を使用して形成されたＦＰＧＡ設計５０２を使用することができるコンピューティングデバイス５００の略図を示す。コンピューティングデバイス５００は中央処理装置（ＣＰＵ）５０４、メインメモリ５０６およびデータバス５０８を含んでいる。
【０１３６】
ＣＰＵ５０４は任意適切な形状をとることができコンピューティングデバイス５００上で実行するコンピュータプログラムの命令を実施するプロセッサを含んでいる。従来技術でよく知られているように、ＣＰＵ５０４はコンピューティングデバイス５００の機能を実施する主な要素である。ＣＰＵ５０４はそれに電力を供給しかつそれをコンピューティングデバイス５００内の他のコンポーネントに接続するのに必要なコンタクトを含むマザーボード（図示せず）上に一般的に配置される。
【０１３７】
メインメモリ５０６はＣＰＵ５０４に関連づけられており、ＲＡＭのエリアを含んでいる。ＲＡＭはデータのビットがキャパシタまたはトランジスタゲート内に電荷として格納されるＳＲＡＭ、ダイナミックＲＡＭ（ＤＲＡＭ）の形をとることができ、あるいは任意他の適切なメモリタイプとすることができる。多くのコンピューティングアプリケーションに対して一般的であるように、メインメモリ５０６は複数のＳＲＡＭまたはＤＲＡＭモジュールとして提供することができる。これらのモジュールは破損したりより大きな記憶容量が必要である時に迅速に置換することができる。メインメモリ５０６はコンピューティングデバイス５００の一部を形成するマザーボードを介してＣＰＵ５０４と通信することができる。
【０１３８】
データバス５０８は追加デバイスをコンピューティングデバイス５００に接続してそのコンポーネントと通信できるようにする。データバス５０８は任意適切な形、たとえば、Ｐｅｒｉｐｈｅｒａｌ  Ｃｏｍｐｏｎｅｎｔ  Ｉｎｔｅｒｃｏｎｎｅｃｔ  Ｅｘｐｒｅｓｓ（ＰＣＩ−Ｅ）データバスの形をとることができる。データバス５０８はマザーボード搭載周辺装置にリンクするマザーボード・レベルインターコネクトおよびアド・インカードに対する拡張カードインターフェイスとして機能する。
【０１３９】
ＦＰＧＡ５０２は、この例では、アクセラレータカード５１０である。アクセラレータカード５１０はデータバス５０８に接続するように構成され、たとえば、ＰＣＩ−Ｅデータバスに接続するのに適したインターコネクトを含むＰＣＩ−Ｅフォーマット拡張カードとすることができる。
【０１４０】
判り易くするために、下記の例には単一アクセラレータカード５１０しか含まれていないが、当業者ならば本発明の方法に従って形成されたＦＰＧＡ５０２を含む追加アクセラレータカードを含んで追加計算力を提供できることが容易にお判りであろう。たとえば、４つのアクセラレータカード５１０を１つのシステム内に並列に含んで、各カードがＣＰＵ５０４と通信しかつ互いに通信するようにすることができる。あるいは、複数のＦＰＧＡデバイス５０２を単一アクセラレータカード５１０上に提供することができる。
【０１４１】
当業者ならばバリエーションがお判りであろう。たとえば、ここで説明された例はＦＰＧＡベースストリームプロセッサに対するハードウェア設計の発生に関連しているが、本発明は他のプログラマブルロジックデバイスまたは特定用途集積回路（ＡＳＩＣ）にも応用できる。当業者ならば本発明の範囲内に入る代替デバイスが容易にお判りであろう。
【０１４２】
特に図示された例を参照して本発明の実施例を説明してきた。特定の例を図示し詳細に説明してきたが、図面および詳細な説明は本発明を開示された特定の形に限定するものではない。本発明の範囲内で説明された例を変更および修正できることをお判り願いたい。
【符号の説明】
【０１４３】
１０  ＦＰＧＡ
１２  ＣＬＢ
１４  インターコネクト
１６  入力パッド
１８  出力パッド
２０  ＬＵＴ
２２  フリップフロップユニット
２４  一時的メモリストレージおよび出力
２６  ブロックメモリユニット
３０、４０、５２、５４  データパス
３２  算術演算
４２、５６、１０８、１１２  出力
４４、４６、１０２、１０４  ノード
４８、１１４  エッジ
９、１０、１９、５０、５８  バッファ
１０６、１１０  入力
４００、５００  コンピューティング装置
４０２  アプリケーション
４０４  Ｊａｖａライブラリ
４０６  ＧＵＩ
５０２  ＦＰＧＡ設計
５０４  ＣＰＵ
５０６  メインメモリ
５０８  データバス
５１０  アクセラレータカード
【図１】
0006001873.tif 000026
【図２】
0006001873.tif 000027
【図３】
0006001873.tif 000028
【図４（ａ）】
0006001873.tif 000029
【図４（ｂ）】
0006001873.tif 000030
【図４（ｃ）】
0006001873.tif 000031
【図４（ｄ）】
0006001873.tif 000032
【図４（ｅ）】
0006001873.tif 000033
【図５】
0006001873.tif 000034
【図６】
0006001873.tif 000035
【図７（ａ）】
0006001873.tif 000036
【図７（ｂ）】
0006001873.tif 000037
【図８（ａ）】
0006001873.tif 000038
【図８（ｂ）】
0006001873.tif 000039
【図８（ｃ）】
0006001873.tif 000040
【図８（ｄ）】
0006001873.tif 000041
【図９】
0006001873.tif 000042
【図１０（ａ）】
0006001873.tif 000043
【図１０（ｂ）】
0006001873.tif 000044
【図１０（ｃ）】
0006001873.tif 000045
【図１１】
0006001873.tif 000046
【図１２】
0006001873.tif 000047
【図１３】
0006001873.tif 000048