JP6001873B2 - 並列パイプライン化ハードウェアにおけるストリームスケジューリング方法および装置 - Google Patents

並列パイプライン化ハードウェアにおけるストリームスケジューリング方法および装置 Download PDF

Info

Publication number
JP6001873B2
JP6001873B2 JP2012031618A JP2012031618A JP6001873B2 JP 6001873 B2 JP6001873 B2 JP 6001873B2 JP 2012031618 A JP2012031618 A JP 2012031618A JP 2012031618 A JP2012031618 A JP 2012031618A JP 6001873 B2 JP6001873 B2 JP 6001873B2
Authority
JP
Japan
Prior art keywords
hardware
data path
stream
data
clock cycle
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.)
Active
Application number
JP2012031618A
Other languages
English (en)
Other versions
JP2012174268A (ja
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 JP2012174268A publication Critical patent/JP2012174268A/ja
Application granted granted Critical
Publication of JP6001873B2 publication Critical patent/JP6001873B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/44Encoding
    • G06F8/443Optimisation
    • 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30076Arrangements for executing specific machine instructions to perform miscellaneous control operations, e.g. NOP
    • G06F9/30079Pipeline control instructions, e.g. multicycle NOP
    • 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]

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Computer Hardware Design (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Software Systems (AREA)
  • Evolutionary Computation (AREA)
  • Geometry (AREA)
  • Advance Control (AREA)
  • Image Processing (AREA)

Description

本発明はパイプライン化ハードウェアにおけるストリームスケジューリング方法および装置に関する。特に、本発明はパイプライン化並列ストリームプロセッサに対するハードウェア設計の発生方法および装置に関する。
コンピュータシステムは特定の物理的システム、領域またはイベントの計算モデルを実装するのにしばしば使用される。一般的に、このような計算モデルは多数のデータエリアまたはデータポイントに対して反復数値計算を解く必要がある。それには極めて多数の計算を行う必要があり、大量の計算リソースが消耗され必要な計算を完全に実施するのにかなりの期間を要する。
しばしば、中央処理装置(CPU)のようなプロセッサが大概のコンピューティングシステム内で見られる。しかしながら、CPUはこのような計算を処理することはできるが、強力な計算システムを使用しない限り所要期間は法外なものとなることがある。
伝統的に、コンピューティングシステムの性能はCPUの動作周波数を高め(すなわち、CPUが毎秒実施できる演算数を増加することにより)かつ単位面積当りより多くのトランジスタを収容できるようにCPU上の個別のトランジスタのサイズを縮小することにより向上されてきた。しかしながら、電力の制約により、将来はCPU周波数を高くしても僅かな性能改善しか実現されない。さらに、リソグラフィプロセスおよび材料機能の制限によりトランジスタのサイズを縮小することは次第に困難になってきている。
専門家のコンピューティングアプリケーションに対するコンピュータシステムの速度を高めるための代替方法は、付加的すなわち専門家ハードウェアアクセラレータを使用することである。これらのハードウェアアクセラレータは利用可能なコンピューティングパワーを高め、それに伴って計算を実施するのに要する時間を短縮する。特定のケースでは、専門家ハードウェアアクセラレータは高度な並列アプリケーションの性能を一桁以上高めることができる。
適切なシステムのこのような1つの例は専用ローカルメモリを有するストリーム処理アクセラレータである。アクセラレータはPeripheral Component Interconnect Express(PCI−E)のようなバスを介してコンピュータに接続されるアド・インカード上に配置することができる。次に、数値計算の大部分を専門的なアクセラレータにより処理することができる。
有用なタイプのストリームプロセッサアクセラレータをField Programmable Gate Arrays(FPGA)を使用して実装することができる。FPGAはデジタルロジックを実装することができるリプログラマブルハードウェアチップである。FPGAには内在機能は無く、代わりに、適切なソフトウエアエレメントを使用して構成することができる複数のゲート、フリップフロップおよびメモリエレメントを含んでいる。
FPGAの回路図の例が図1に示されている。異なるタイプのFPGAチップを使用することもできるが、より大きくより演算機能が豊富なFPGAがより望ましい。
FPGA10はプログラマブル半導体デバイスを含んでおり、それはプログラマブルリコンフィギャブルインターコネクト14(図1では網掛け部分として示されている)を介して接続される構成可能ロジックブロック(CLB)12のマトリクスを含んでいる。FPGA10に対してデータを出し入れするために、複数の入力パッド16および出力パッド18が設けられている。
CLB12はFPGA10の基本的な論理ユニットである。典型的なCLB12の回路図が図2に示されている。CLB12は典型的に4または6入力ルックアップテーブル(LUT)20を含む構成可能なスイッチマトリクスを含み、場合によって、それもおよそ32ビットまでの小型バツファ、何かの専門的な回路(たとえば、マルチプレクサ)、一時的メモリストレージおよび出力24として機能する1つ以上のフリップフロップユニット22として構成することができる。さらに、FPGA10は複数のブロックメモリユニット26を含んでいる。ブロックメモリユニット26はFPGA10内でストレージバッファとして使用することができるアドレス可能なメモリユニットを含んでいる。FPGA10当り一定量のバッファスペースが利用可能である。したがって、それは慎重に割り当てられなければならない。
各CLB12のLUT20は多様な機能、たとえば、NANDおよびXORのような論理ゲート、またはより複雑な機能を実施するように構成することができる。典型的なFPGAは10までのLUT20を含むことができる。CLB12は並列に動作して数値集約的な計算に対する強力なリソースを提供する。
FPGAベースストリームプロセッサは入力から出力までのパスに沿った1つ以上のハードウェアユニット内にマッピングされた計算機能を含んでいる。次に、FPGAはハードウェアユニットを介してデータアイテムをストリーミングすることにより計算を実施する。各ハードウェアユニットは必要な計算を完了するための特定の期間を必要とする。これはハードウェアユニットのレーテンシとして知られており、一般的にハードウェアユニットが計算を完了するのに要するクロックサイクル数の観点から定義される。計算が完了すると、データはさらなるハードウェアユニットまたは出力へ「ダウンストリーム」移行する。回路の各部分が計算中の任意のポイントにおいてデータストリーム内の1つの対応するデータアイテムの演算を実施するため、ストリーミングアーキテクチュアは計算デバイスを効率的に利用する。
図3はFPGAのCLB12を使用してその上にストリームプロセッサを実装するように生成されたこのようなストリーミングアーキテクチュアの例を示す。図3はFPGAストリームプロセッサ10上に実装することができる4入力16−i、4出力18−iストリームコンピューティングエンジンを示す。
入力16−iおよび出力18−i間に計算データパス30が設けられている。計算データパス30はハードウェア内で表現される時のアルゴリズムのグラフィック表現である。計算データパス30はカーネルとも呼ばれる。典型的なFPGA10はおびただしい数の並列カーネルを含むことができる。
計算データパス30はCLB12および他のロジックを使用して実装することができ、算術演算32(1つ以上のLUT20内で実施される)およびバッファメモリ26を含んでいる。言い換えると、各演算ユニット32はFPGA上でハードウェアエレメント(1つ以上のハードウェアユニットを含むことができる)としてハードウェア内に実装される。バッファメモリ26はブロックRAM(ブロックメモリユニット26により提供される)または分散RAM(LUT20またはフリップフロップ22を使用して利用可能とされたメモリを含む)を含むことができる。図からお判りのように、計算データパス30はデータを並列処理するように配置される。
動作において、データはFPGAストリームプロセッサ10のCLB12を介してストリーミングされ、ストリーミングされる時にデータに算術演算が行われる。
しばしば、FPGA回路は回路図または、たとえば、Verilogのようなハードウェア記述言語(HDL)を使用して設計される。HDLはFPGAハードウェアに対する合成可能な仕様(synthesizable specifications)を書くのに使用される。シミュレーションプログラムが実行され、それによりFPGAの所望する空間的および時間的構成は、FPGAの動作を物理的に生成される前に正確にモデル化できるように、シミュレートすることができる。HDLは平行性(コンカレンシとしても知られる)を表すためのシンタクスを含んでおり時間の明示的な概念を含むことができる。
例として、図4(a)および4(b)は単純なストリーミングデータパスを定義するグラフを例示している。グラフはストリームプロセッサの一部としてハードウェア内に実装される所望する処理操作(たとえば、畳み込みのような数学計算)を表している。グラフは処理操作をクロックサイクルの関数としてのタイムドメイン内の並列構造として表わし、データはクロックサイクルが増加するにつれデータパスに沿って入力から出力へ「流れる」。データパスはストリーミングされたデータに処理操作を実施する個別オブジェクト(すなわち、ノード)を含んでいる。個別オブジェクトはFPGA上にストリームプロセッサの一部として実装されるハードウェアエレメントに直接対応する。ハードウェアエレメントは物理的FPGA上に1つ以上のハードウェアユニット(CLBのような)を含むことができる。
図4(a)は単一出力42を有する3入力(A、BおよびC)データパス40を示している。データパス40は一対のノード44、46を含んでいる。この例では、ノード44、46は加算器を含んでいる。ノード44、46は入力A、B、C、ノード44、46および出力42間の「エッジ」48(すなわち、インターコネクト)により入力および出力間に接続されている。
図4(a)(および後続図)に示すように、ノード44、46およびエッジ48はデータパス40内に複数の分岐を定義する。一般的に、データパスは特定のプロセス操作または機能を表し、その中をデータが流れるパイプライン回路として実装される。カーネルは直接データの計算はしないが異なる時点においてその機能を変えるようにデータパスを構成することができる。これらの分岐は他の分岐に依存することがあり、あるいは特定のデータパスにより実施されるバルク計算の性質に応じて独立または半独立とすることができる。
しかしながら、判り易くするためにデータパスという用語はカーネルに対応するが、2つ以上のカーネルに亘ってデータパスを分割するのも本発明の範囲内に入る。当業者ならば、ここに定義された用語の範囲は容易にお判りと思われる。
方程式として表現すると、所望する計算は次のようになる。
(A+B)+C=Output
したがって、ノード46において結果を入力Cに加算する前に、ノード44において入力AおよびBを加算することが望ましい。しかしながら、このデータパス40は間違った計算を生成することがある。それは、各ノード44、46には特定のレーテンシ、すなわち、結果がデータパス40の次のステージに解放される前に加算器44、46が計算を完了するのに要するプロセッサ時間、が関連付けられているためである。言い換えると、データはデータパス40中をロックステップ式に伝播し−各ノード44、46にレーテンシが関連付けられている。一般的には、全ノードにグローバルクロックが配布され(たとえば、100MHzで実行する)、各ノードのレーテンシがクロックサイクル数で測定される。
その結果、一度データが入力A、BおよびCに同時に入力されると、データ入力Aおよびデータ入力Bは入力データCが加算器46に到達するのと同時に加算器44に到達する。その結果、加算器46は入力データCをどの値にも加算しようとせず(加算器44からの値がまだ到達していないため)、間違った結果を生成する。加算器46が2つの実際値を加算することができる後のクロックサイクルに対しては、加算器44から加算器46に到達するデータは入力Cから直接加算器46に到達するデータよりも1サイクル遅れるため、やはり間違った数が加算される。
図4(b)はこの問題へのハードウェアソリューションを示している。ソリューションは入力Cおよび加算器46間のエッジ48にバッファリング50を追加することである。これにより入力Cから入力されるデータに1サイクルの遅延が加えられ、加算器44からのデータ(すなわち、入力AおよびBの積)は入力Cからのデータと同時に加算器46に到達する。
したがって、正しい時間的方法で機能するデータパスまたはデータストリームを生成するためのバッファリングを挿入することが適切なHDLの必要な特徴である。多くの場合、HDLのユーザは適切なバッファリングを指定する必要がある。しかしながら、HDLはデータパスを発生して実際のFPGA上のハードウェア内に実装することができるが、FPGA上のデータパスウェイの最適化はあまり配慮されていない。
レーテンシを配慮した回路を構築するための2つの既知の方法は、As Soon As Possible(ASAP)およびAs Late As Possible(ALAP)である。ASAPでは、全入力のサイクルが揃えられる、すなわち、全入力が同じ任意のサイクル(それは計算の開始時に0サイクルとすることができる)に揃えられる。しかしながら、この要求条件は、データパスの異なる分岐に沿った異なる入力レーテンシと共に、入力レーテンシのミスマッチにつながることがある。したがって、このような場合、図4(b)に示すようなバッファリングが必要となる。バッファリングに利用可能なメモリはFPGA10上で制限されるため、しばしば所要バッファリング量を低減することが望まれる。
対照的に、ALAP方式は出力から開始するデータパスを開発する。ALAPを使用して前記した例を解析すると、図4(c)に示すデータパスが与えられる。図からお判りのように、入力Cは1のレーテンシ単位だけ前方にシフトされている。したがって、入力Cおよび加算器46間のエッジ内にもはやバッファは必要ない。その結果、ブロックメモリ26のような貴重なチップリソースをこの方法により省くことができる。
しかしながら、この方法は特定の状況にしか適切ではない。図4(d)はデータパス54を示している。データパス54は図4(c)のデータパス52に対応するが、ここでは、追加出力56が追加されている。図からお判りのように、出力56は元の出力から−1のレーテンシだけオフセットされている、すなわち、第2の出力56において所望される結果はA+Bからのもの(すなわち、加算器44からの結果)であり、そのため加算器46が計算(A+B)+Cを実施するのを待つ必要がない。
しかしながら、ALAPは全出力が同じオフセットを有することを必要とするため、このデータパス配列はALAPを使用して生成することができない。これはデータパスが出力で開始して生成されるため、出力が予定されるポイントを予め定めなければならないためである。したがって、図4(d)に示すデータパス54を実装するのに、図4(e)に示す回路が必要となる。図からお判りのように、出力は全て同じオフセットであることを保証するために、追加バッファ58が必要とされる。追加バッファが必要なければ次善の構成となり、リソースは過剰かつ非有益に使用される。
US−A−7,000,213 US−A−6,941,541
"Synthesis and Optimizationof Digital Circuit",G.DeMicheli,McGraw−Hill,1994 "ASC:A Stream Compiler for Computing With FPGA"O.Mencer,IEEE Transactions On Computer Aided DesignOf Integrated Circuits And Systems 2006,Vol 25;No.9,pages1603−161 "A Formal Approach to the Scheduling Problem in High Level Synthesis".C.T.Hwand et al,IEEE Transaction on Computer−Aided Design;Vol 10;No 4;1991 "Minimizing Buffer Requirements under Rate−Optimal Schedule in Regular Dataflow Networks",R.Govindarajan et al.ACAPS Technical Memo 69,Feb 1994,MCGill University "ILP−Based Scheduling with Time and Resource Constraints in High Level Synthesis",S.Chaudhuri and R.Walker,Proc.VLSI Design ’94,pp.17−25 "Rate Optimal VLSI design from data flow graph",Oh et al,submissions for 35th Design Automation Conference,DAC 98 "Scheduling alrorithm for high−level synthesis"Govindarajan,Term Paper,Dept ECECS,University of Cincinnati,March 17 1995
図4(d)に示すデータパス54に対して、ASAPもALAPも最小限のリソースを使用してこの設計を最適にスケジュールすることができない。したがって、FPGAを使用して実装することができるような大規模パイプライン化ハードウェアに対して最適化されたデータパスを発生する最適化された方法が必要とされている。より最適化された各データパスがFPGA内にあり、一定量のブロックRAM26を有する定められたFPGAに対してより多くのデータパスを収容することができる。その結果、FPGAの処理パワーはその上に形成されたデータパスの効率的アーキテクチュアにより有効に引き上げることができる。
関連するシステムにおいてこれらの問題に取り組む試みがなされている。非特許文献1はマルチサイクルアーキテクチュアの文脈におけるスケジューリング操作について説明している。これは数サイクルに亘って操作を拡げながら全体レーテンシを最小限に抑えることに取り組んでいる。
非特許文献2はパイプライン化アーキテクチュアにおいてスケジューリングを使用するHDLを説明している。しかしながら、FPGAデータパスレイアウトの構成を最適化する規定はない。
アルゴリズム記述の最適化がハイレベル合成の分野で知られている。ハイレベル合成は所望する挙動のアルゴリズム記述を解釈してその挙動を実装するハードウェアを生成する自動化された設計プロセスである。開始点はANSICのような言語内のハイレベル記述であり、次にこれはコントロールデータフローグラフ(CDFG)に翻訳される。CDFG内の操作は複数のコントロールステップへマッピングされ、次に同じハードウェアリソースを使用して異なるアルゴリズム操作を異なるコントロールステップにおいて実装する意図で操作を実行するためにリソースが割り当てられる。
ハイレベル合成法の例は非特許文献3、特許文献1、特許文献2、非特許文献4、非特許文献5、非特許文献6、および非特許文献7で見つけることができる。しかしながら、前記した例のいずれも最適化された並列パイプライン化ストリームプロセッサハードウェア設計のスケジューリングまたはFPGA上へのそれらの実装には関連していない。
前記したように、計算ユニットまたはノードは慎重に配置されたバッファリングにより修正されない限りデータがずれてめちゃくちゃになってしまうことがあるレーテンシを有している。回路にバッファリングを追加してレーテンシをバランスさせれば簡単であるが、しばしばこれは次善策であり典型的なFPGA上に提供される有限量のバッファリングメモリを過度に使用する結果となる。
したがって、これまでは、FPGA上に実装することができるような並列パイプライン化ハードウェアのデータパス構造を最適化するための既知の方式およびハードウェアは、効率的なストリームスケジューリングによりFPGAの利用可能なリソースを最適化して完全に利用することができないという技術的問題に苦しんでいる。
本発明の第1の側面に従って、パイプライン化並列ストリームプロセッサに対するハードウェア設計の発生方法が提供され、この方法は、コンピューティングデバイス上で、前記パイプライン化並列ストリームプロセッサの一部としてハードウェア内に実装されるプロセスを指示する処理操作を定義するステップと、コンピューティングデバイス上で、タイムドメイン内の並列構造としての前記処理操作をクロックサイクルの関数として表わすグラフを定義するステップと、を含み、前記グラフは前記パイプライン化並列ストリームプロセッサに対するハードウェア設計として実装される少なくとも1つのデータパスを含み、かつデータ値がその中をストリーミングできるように構成された複数の並列分岐を含み、前記または各データパスが少なくとも1つの入力と、少なくとも1つの出力と、前記パイプライン化並列ストリームプロセッサの一部としてハードウェア内に実装されるハードウェアエレメントに直接対応する少なくとも1つの個別オブジェクトとを含むものとして表現され、前記または各個別オブジェクトは1クロックサイクル以上機能を実行するように動作することができ、かつ予め定義されたレーテンシが関連付けられており、前記予め定義されたレーテンシは前記ハードウェアエレメントが前記機能を実行するのに必要な時間を表し、前記データ値は増加するクロックサイクルの関数として前記データパス中を少なくとも1つの入力から少なくとも1つの出力まで伝播し、さらに、コンピューティングデバイス上で、少なくとも1つのデータパスおよび前記グラフの関連付けられたレーテンシを1組の代数線形不等式として定義するステップと、コンピューティングデバイス上で、前記1組の線形不等式を解くステップと、コンピューティングデバイス上で、前記解かれた線形不等式を使用して前記グラフ内の少なくとも1つのデータパスを最適化して最適化されたグラフを作り出すステップと、コンピューティングデバイス上で、前記最適化されたグラフを利用して前記パイプライン化並列ストリームプロセッサとしてハードウェア内に実装する最適化されたハードウェア設計を定義するステップと、を含んでいる。
このような方法を提供することにより、ストリームプロセッサに対するハードウェア設計の最適化は、最適解を作り出すのに整数線形計画法を使用することができる代数最適化問題と見なすことができる。これによりハードウェア設計は、パイプライン化並列ストリームプロセッサとしてハードウェア内に実装される時に、ハードウェアプラットフォームの利用可能なリソースを完全に利用することができる。実施例では、各個別オブジェクトのレーテンシは知られており予め定義されている。これは個別オブジェクトにより表わされるハードウェアエレメント(1つ以上のハードウェアユニットを含む)が既知のレーテンシを有するためである。その結果、実施例では、予め定義されたレーテンシは一定値を有する固定レーテンシである。
一実施例では、前記処理操作は前記パイプライン化並列ストリームプロセッサとしてハードウェア内に実装される数学関数または計算を含んでいる。
一実施例では、前記または各ハードウェアエレメントが前記パイプライン化並列ストリームプロセッサ上に1つ以上のハードウェアユニットを含んでいる。
一実施例では、前記または各ハードウェアエレメントが予め定められた数学関数を実施するように構成される。
一実施例では、前記最適化ステップは前記データパスをスケジュールするのに必要なバッファリングの量を最小限に抑えるステップを含んでいる。
一実施例では、データパスを最適化する前記ステップは、さらに、所望により、前記データパスの少なくともいくつかの分岐にバッファリングを挿入するステップを含んでいる。
一実施例では、前記バッファリングは前記パイプライン化並列ストリームプロセッサ上のメモリユニットを表す。
一実施例では、前記バッファリングは全体グラフに対して最小限に抑えられる。
一実施例では、前記最適化ステップは、さらに、2つ以上のバッファを併合して単一バッファとするステップを含んでいる。
一実施例では、前記最適化ステップは、さらに、単一バッファを前記少なくとも1つのデータパスの2つ以上の分岐に割り当てるステップを含んでいる。
一実施例では、前記グラフは複数の入力と複数の出力を含み、各入力および各出力は前記少なくとも1つのデータパスの少なくとも1つの分岐に接続されている。
一実施例では、前記入力はサイクルが揃えられていない。一実施例では、前記出力はサイクルが揃えられていない。
一実施例では、前記グラフは前記パイプライン化並列ストリームプロセッサとしてハードウェア内に実装される複数の並列データパスを含んでおり、前記解答および最適化ステップは前記複数の並列データパスの各々に対して実施される。
一実施例では、この方法は、さらに、コンピューティングデバイス上で、データパス内の特定のポイントにある少なくとも1つのストリームオフセットオブジェクトを提供するステップを含み、前記ストリームオフセットオブジェクトは、特定のクロックサイクルおよびデータパス内の前記特定のポイントに対して、前記特定のクロックサイクルとは異なるクロックサイクルからのデータ値にアクセスするように動作することができる。
一実施例では、前記少なくとも1つのストリームオフセットオブジェクトは前記特定のクロックサイクルの前のクロックサイクルからのデータ値にアクセスするように動作することができる。
一実施例では、前記少なくとも1つのストリームオフセットオブジェクトは前記特定のクロックサイクルの後のクロックサイクルからのデータ値にアクセスするように動作することができる。
一実施例では、前記少なくとも1つのストリームオフセットオブジェクトは予め選定されたクロックサイクル数だけ前記特定のクロックサイクルからオフセットされたクロックサイクルからのデータ値にアクセスするように動作することができる。
一実施例では、前記少なくとも1つのストリームオフセットオブジェクトは変数に依存する数クロックサイクル数だけ前記特定のクロックサイクルからオフセットされたクロックサイクルからのデータ値にアクセスするように動作することができる。
一実施例では、前記変数の値は前記最適化されたハードウェア設計が前記パイプライン化並列ストリームプロセッサとしてハードウェア内に実装された後で指定される。
一実施例では、前記変数の値は前記処理操作が前記パイプライン化並列ストリームプロセッサ上で実行される前に指定される。
本発明の第2の側面に従って、ストリームプロセッサに対するハードウェア設計を発生する方法が提供され、この方法は、コンピューティングデバイス上で、前記ストリームプロセッサの一部としてハードウェア内に実装されるプロセスを指示する処理操作を定義するステップと、コンピューティングデバイス上で、タイムドメイン内の前記処理操作を表わすグラフをクロックサイクルの関数として定義するステップとを含み、前記グラフは前記ストリームプロセッサの一部としてハードウェア内に実装されかつデータをその中にストリーミングできるように構成された少なくとも1つのデータパスを含み、前記または各データパスが少なくとも1つの入力と、少なくとも1つの出力と少なくとも1つの個別オブジェクトとを含み、前記データは前記データパス中を少なくとも1つの入力から少なくとも1つの出力まで増加するクロックサイクルの関数として伝播し、さらに、コンピューティングデバイス上で、データパス内の特定のポイントにある少なくとも1つのストリームオフセットオブジェクトを提供するステップを含み、前記ストリームオフセットオブジェクトは、特定のクロックサイクルおよびデータパス内の前記特定のポイントに対して、前記特定のクロックサイクルとは異なるクロックサイクルからのデータ値にアクセスするように動作することができ、さらに、コンピューティングデバイス上で、前記グラフ内の少なくとも1つのデータパスを最適化して最適化されたグラフを作り出すステップと、コンピューティングデバイス上で、前記最適化されたグラフを利用してハードウェア内に実装する最適化されたハードウェア設計を前記ストリームプロセッサとして定義するステップと、を含んでいる。
一実施例では、前記少なくとも1つのストリームオフセットオブジェクトは前記特定のクロックサイクルの前のクロックサイクルからのデータ値にアクセスするように動作することができる。
一実施例では、前記少なくとも1つのストリームオフセットオブジェクトは前記特定のクロックサイクルの後のクロックサイクルからのデータ値にアクセスするように動作することができる。
一実施例では、前記少なくとも1つのストリームオフセットオブジェクトは予め選定されたクロックサイクル数だけ前記特定のクロックサイクルからオフセットされたクロックサイクルからのデータ値にアクセスするように動作することができる。
一実施例では、前記少なくとも1つのストリームオフセットオブジェクトは変数に依存する数クロックサイクル数だけ前記特定のクロックサイクルからオフセットされたクロックサイクルからのデータ値にアクセスするように動作することができる。
一実施例では、前記変数は前記最適化されたハードウェア設計が前記ストリームプロセッサとしてハードウェア内に実装された後で指定される。
一実施例では、前記変数の値は前記処理操作が前記ストリームプロセッサ上で実行される前に指定される。
一実施例では、最適化ステップは、さらに、コンピューティングデバイス上で、前記グラフの前記少なくとも1つのデータパスを1組の代数線形不等式として定義するステップと、コンピューティングデバイス上で、前記1組の線形不等式を解くステップと、コンピューティングデバイス上で、前記解かれた線形不等式を使用して前記グラフ内の少なくとも1つのデータパスを最適化して最適化されたグラフを作り出すステップと、を含んでいる。
一実施例では、前記ストリームプロセッサはField Programmable Gate Array またはApplication Specific Integrated Circuit上に実装される。
一実施例では、この方法は、さらに、前記ストリームプロセッサが前記処理操作を実施できるように前記ストリームプロセッサ上に前記最適化されたハードウェア設計を形成するステップを含んでいる。
本発明の第3の側面に従って、第1または第2の側面の方法を使用して発生された設計を有する、Field Programmable Gate Array、Application Specific Integrated Circuitまたはプログラマブルロジックデバイスが提供される。
本発明の第4の側面に従って、ハードウェアストリームプロセッサを発生するシステムが提供され、このシステムは第1または第2の側面の一方の方法を実行して発生された設計を有するプログラマブルロジックデバイスのプログラミング命令のリストを発生するようにされたプロセッサを含んでいる。
本発明の第5の側面に従って、プログラマブルロジックデバイスを作る方法が提供され、方法の第1または第2の側面を使用して設計を発生するステップと、発生された設計を具現するようにロジックデバイスをプログラミングするステップと、を含んでいる。
本発明の第6の側面に従って、コンピュータ上で実行する時、第1または第2の側面のステップを実行するようにされたコンピュータプログラムが提供される。
本発明の第7の側面に従って、コンピュータ読取可能媒体上に格納された第6の側面に従ったコンピュータプログラムが提供される。
本発明の第8の側面に従って、第1または第2の側面の方法を使用して発生された設計を有するField Programmable Gate Array、他のプログラマブルロジックデバイス、またはApplication Specific Integrated Circuitが提供される。
本発明の第9の側面に従って、ハードウェアストリームプロセッサ設計を発生するシステムが提供され、このシステムは第1または第2の側面の方法を実行して発生された設計を有するプログラマブルロジックデバイスのプログラミング命令のリストを発生するようにされたプロセッサを含んでいる。
本発明の第10の側面に従って、第3の側面に従ったField Programmable Gate Array、Application Specific Integratedまたはプログラマブルロジックデバイスを含むアクセラレータカードが提供される。
本発明の第11の側面に従って、中央処理装置、メモリ、および第10の側面に従った少なくとも1つのアクセラレータカードを含むコンピューティングデバイスが提供される。
本発明の第12の側面に従って、第1または第2の側面のステップを実施するための1つ以上のソフトウエア部分を含む、プログラマブル処理装置により実行可能なコンピュータプログラムプロダクトが提供される。
本発明の第13の側面に従って、第12の側面に従ったコンピュータプログラムプロダクトがその上に格納されているコンピュータ使用可能記憶媒体が提供される。
FPGAデバイスの回路図である。 図1のFPGAベースストリームプロセッサの一部を形成するプログラマブルロジックブロックを示す回路図である。 FPGAベースストリームプロセッサの可能な計算構造の例の回路図である。 エラーを発生する結果となる単純なデータパスを例示するグラフの例を示す図である。 正しい計算を保証するためにバッファリングが追加されるASAPを使用してスケジュールされた単純なデータパスの例を示す図である。 ALAP技術を使用してスケジュールされた単純なデータパスの例を示す図である。 2つの出力を含む所望する単純なデータパスの例を示す図である。 ALAP技術を使用して作り出された図4(d)のデータパスの例を示す図である。 2つのノードおよび関連付けられたレーテンシの例を示す図である。 追加記号のある図4aの例を示す図である。 prevの使用例を示す図である。 prevのさらなる使用例を示す図である。 ストリームオフセットの使用を示す図である。 ストリームオフセットの使用を示す図である。 ストリームオフセットの使用を示す図である。 バッファタッピングおよびフォールディングの使用を示す図である。 ループの使用を示す図である。 可変オフセットの使用およびそれらの実装を示す図である。 可変オフセットの使用およびそれらの実装を示す図である。 可変オフセットの使用およびそれらの実装を示す図である。 本発明の方法を実施するコンピューティング装置の略図である。 本発明の方法のフロー図を示す図である。 本発明の方法を使用して作り出されたストリーム処理ハードウェアで使用するのに適したコンピュータ装置の略図である。
次に、添付図を参照して本発明の実施例を詳細に説明する。前記したように、ストリームコンピューティングは大量のデータを算術演算ハードウェアで処理するための効率的な方法である。しかしながら、ストリームコンピューティングデバイスの性能はしばしばブロックメモリ26等のチップリソースにより制限される。
コンピュートまたはアリスマティック等のハードウェアエレメントのレーテンシ、および計算の前の値を将来の計算のために保持する必要性により、バッファリングを挿入しなければならない。バッファリングの非効率的使用によりFPGA10上のメモリは過剰に消費される結果となる。これにより、FPGA10内に実装することができるデータパスまたはカーネルの数が制限される。
しかしながら、このバッファリングの配置に対して多くのオプションがある。バッファリングを最適に配置することはグローバルな最適化問題と考えることができる。これに関して、整数線形計画法を使用して最適解を作り出すことができる。
前記したように、グラフはデータパスを使用してアルゴリズムをタイムドメイン内の並列構造として記述して所望するアルゴリズムを表わす方法である。データパスはエッジにより接続されたノードのグループからなる数学的構造としてグラフィカルに表現することができる。ノードは演算ユニットまたは計算ユニットのような個別オブジェクトを表す。エッジは2つのノード間の接続を表す。言い換えると、ノードは演算を表しエッジは各演算の出力がもう1つの演算の入力へ供給される場所を表す。
ノードおよびエッジは共に属性を持つことができる。たとえば、ノードは関連付けられたレーテンシのような特定の性質を有することができる。さらに、エッジは関連付けられた方向を有することができる。
典型的なFPGA10はいくつかの個別データパスを含んでいる。典型的なFPGA10上のデータパスの数は典型的に10以下である。しかしながら、各データパスはおびただしい数の並列分岐を含むことができ、それは典型的に合計10から10の計算エレメントを含んでいる。これにより、大規模な並列計算を実施することができる。これらのデータパスの各々について考えると、FPGA上のデータ分岐を含むおびただしい数のデータパスのグローバル最小化の最適解が求められる。
図5は本発明の基礎となる原理を示している。図5は2つのノード102、104を示している。ノード102は入力106および出力108を有する。ノード104は入力110および出力112を有する。2つのノード102、104はエッジ114により互いに接続されている。エッジ114はノード102の出力108およびノード104の入力110間に延在している。
ノード102は「親」ノードmでありノード104は「子」ノードnである。データは時間T(m)に「親」ノードm102に到達する。ノード102は計算ユニットを含むため、受信データに計算を実施するための有限量の時間が必要である。このような計算はLUT、シフトレジスタまたは他のエレメントを含むことがある。計算を実施するのに必要な時間は「親」ノードm102のレーテンシとして知られておりλ(m)として定義される。ノード102、104はFPGA10上の1つ以上のハードウェアユニット(たとえば、CLB12)を表し、それに対応し、そのレーテンシは実際のハードウェアのそれに対応する。
したがって、データは時間T(n)に「子」ノードn104に到達する。したがって、T(n)はデータが親mの入力106に到達する時間T(m)、プラス「親」ノードm102のレーテンシλ(m)以上でなければならない。時間T(n)はエッジ114のレーテンシがゼロである時のみT(m)プラスλ(m)に等しい。一般的には、エッジはいかなるフリップフロップも含まずノード間の接続を表すにすぎないため、レーテンシが無い。以下の説明では、ノードはレーテンシを有するものとして説明される。しかしながら、別の定式化を利用してエッジはレーテンシを有するものとして定義されたり、ノードとエッジの両方にレーテンシが関連付けられたりすることがある。
さらに、出力レーテンシに加えられることにより入力レーテンシを考慮することもできるが、これらの例では全入力レーテンシがゼロと仮定される。
したがって、Nのノードがあるところでは、図5の構成は式(1)に記載されているように代数表現することができる。
次に、図4(a)の例を取ると、1組の線形不等式を作り出すことができる。図6は図4(a)のデータパスを表しているが、各ノードにn1からn5間の参照番号を割り当てている追加記号がある。
次に、図6に示すように、図4(a)および図6のデータパス40は、式(2)に記載されているように、追加操作が1サイクルのレーテンシを有するものと仮定すると、一連の線形制約として表わすことができる。
これらの線形制約に加え、我々は式(3)に記載されているようにこれらの制約を満たすのに必要なバッファリングの総数の1次式を定式化することもできる。
式(3)のバッファリングの総数に対するこの式は整数線形プログラミングソルバー、たとえば、GNU Linear Programming Kit(GLPK)を使用して式(2)の制約の存在下で最適に最小化することができる。この最小化の結果は合計バッファリングが最小限となるようなグラフ内の全ノードに対するT(n)に対する固定値の「スケジュール」である。バッファリングが最小化されるとFPGA10におけるブロックメモリ使用量も最小化される。前記したように、ブロックメモリ使用量はしばしばFPGA設計の制限因子である。
本発明により最適化することができるデータパスの他の1つの重要な特徴は「perv」すなわち前の値として知られているものである。pervにより前の値を計算において使用することができる、たとえば、ストリーム内で10サイクル振り返るためにサイズ10のprevを使用する。たとえば、方程式(4)における計算を取ると、

これは次のように記述することができる。
一般的に、prevはゼロレーテンシのバッファとして実装される。バッファサイズはデータ上に導入される遅延であり、前の値を出力に存在させる。これは図7(a)に例示されており、方程式(5)を実装する。したがって、前記したことを達成するには、ゼロレーテンシの2つのバッファ((図7(a)ではprev(1)のラベルが付されている)を提供し、さらに、加算器ノードのレーテンシが与えられた時にデータパスを正しくスケジュールするために、レーテンシ1の単一バッファを提供して、合計バッファカウントを3とする必要がある。
対照的に、本発明のprevはストリーム内で後向きのストリームオフセットとして定義することができ、負レーテンシを有するノードを識別するのと同等である。したがって、本発明では、スケジューリングはグローバルに最適化することができ図7(a)のデータパスは図7(b)の配列で置換することができる。図からお判りのように、ダイヤモンド形ノードとして示されている、ストリームオフセットを使用してこの回路がスケジュールされゼロバッファリングを必要とする。これは、第2の加算器ノードに対して必要な遅延を提供するのに第1の加算器ノードのレーテンシが使用されており、その結果追加バッファリングが必要とされないためである。
言い換えると、ストリームオフセットノードを使用しても直接ハードウェアを作り出せることはないが、スケジューリング後にデータは正しい場所で正確な量だけオフセットされる。個別レーテンシのいくつかは相殺され実装レーテンシを利用することができるため、これは非常に効率的である。
さらに一般的タイプの機能はディスカードである。下記の代数式の例において、
方程式prev(a)+(a)を実装する回路は第1のサイクル上に無効な結果を発生し、それはprev機能が1つの出力を1サイクル遅らせ、第1のサイクル上でaだけが加算器に達しprev(a)は達しないためである。したがって、第1のサイクルは無効データを含んでいる。これはディスカードを使用して取り組むことができ、それは第1の(無効)結果を単純に廃棄して次の結果を出力へ通す。prevがデータストリームの前の値に対する要求であれば、ディスカードは「将来」値を要求していると考えることができる。
こうして、prevおよびディスカードは共にストリームオフセットとして一般化することができる。したがって、所望するオフセットnを有する変数aに対して、prevまたはディスカードは次のように表わすことができ、

そのため、例として、方程式(8)を取ると、

方程式(8)は新しい定式化の元で次のように書くことができ、

最適化プロセスの実際的な例として、方程式(10)を取ると、

これは一般的なケースであり、本発明において次のように表わすことができる。
これに対するデータパスが図8(a)に示されており、スケジュールされたデータパス構成が図8(b)に示されている。図からお判りのように、この配列において合計28のバッファリングが必要である。加算器の1サイクルレーテンシが考慮されているため、割り当てられたバッファはサイズ20および10ではなくサイズ19および9であることに注意していただきたい。
このバッファリングはタップアンドフォールドとして知られるさらなるプロセスによりさらに低減することができる。
図8(c)は「タッピング」の例を示す。この例では、19および9の別個のバッファが9の共通バッファおよび10のさらなるバッファにより置換されており、9のバッファが省かれる。
さらに、図8(d)は「フォールディング」の例を示し、2つのバッファが1つに結合される。別個のバッファ割当てにより異なるメモリリソースが割り当てられることがあるため、これは重要である。説明すると、ブロックメモリはしばしば18Kbitまたは36Kbit単位で割り当てられる。バッファが割り当てられると、バッファの全体が利用されるかまたはその一部だけしか利用されないかは無関係となる。より小さなバッファに対して、アクセスはバッファ変化にアドレス指定されてバッファの一部だけしか使用されない。しかしながら、バッファの残りを他のデータパスが使用することはできない。したがって、バッファを「フォールド」すなわち簡略化できることはリソース管理において重要である。
本発明の方法はループを処理するように動作することもできる。このタイプのデータパスパイプライン内に帰還が含まれておれば、依存関係ループが導入される。データが1サイクル内でループの回路全体を完了できなければ、これは特定のパイプライン内に問題を提起する。
伝統的に、これらの問題はバッファを挿入して解決される。通常これは手動でバッファサイズを回路のレーテンシに対してバランスさせデータをスケジュールして行われる。
しかしながら、本方法によりこの問題を考慮すると、スケジューリング一次方程式を満たすために、全体ループのレーテンシをゼロにしなければならない。これは負のストリームオフセットを挿入すれば可能である。負のストリームオフセットが十分大きければ、回路はソースコードから期待される結果を与える。さもなくば、コンパイルが失敗する。しかしながら、失敗によりユーザへ貴重な帰還が提供される。たとえば、コンパイルが失敗すると、これはループが可能ではないことを示す。他の方法で必要なバッファの手動挿入が排除され、全ループのレーテンシが考慮されるため必要なバッファメモリの量が最適化される。本発明を使用して形成されたループの例が図9に示されている。
いくつかの状況において、固定レーテンシを使用するのは適切ではない。このような状況は、たとえば、1行以上オフセットされた多次元データセット内のポイントにアクセスしたいが、データセットの実際のサイズが最初に知られていない場合に生じることがある。これは可変レーテンシが有用である時−データパスをコンパイルする時にサイズが知られていない2または3次元データブロック内のポイントにアクセスするためにオフセットを使用する時である。
例として、100×100データポイントの2次元ブロックについて考える。この場合、前の行のポイントにアクセスするのに−100のオフセットが必要である。しかしながら、データパスをコンパイルする時にブロックのディメンジョンが知られていなければ、異なる行のデータを選択するオフセットを提供することはできない。
しかしながら、たとえコンパイルする時にサイズが知られていなくても、ブロックディメンジョンを代数的にnx×nyとして記述することができる。したがって、異なる行にアクセスするのに−nxのオフセットが必要である。さらに、代数レーテンシはそれらを個別の係数に分解して最適化することができる。次に、これらのシステムを独立に解くことができる。たとえば、次式(12)に記載された代数不等式を有するものと仮定すると、
これらの式はnxおよびnxyに対する値が知られていないため線形ソルバーを使用して直接解くことができない。これに対処するために、我々はnx、nxyおよび式の定数部だけに関する1組の個別の不等式へ、それぞれ、分解してそれを解くことができる。式(12)に対して、これは次のように行われる。


および
nx、nxyおよび定数部に対する不等式が解かれると、加算を使用してそれらを結合して、次のようなグラフに対する最終「スケジュール」を発生することができる。
可変オフセットがnxである場合、nxに対するスケジュール(図10(b)に示す)と一緒に定数に対するスケジュールが作り出されて(図10(a))結合され、その結果図10(c)に示すスケジュールが与えられる。このようなオフセットは本発明の方法において容易に実装することができ、FPGAをコンパイルする時(すなわち、ストリームプロセッサに対するハードウェア設計をFPGA内に実装する時)にデータブロックの実際のサイズが知られていないFPGA設計を作り出すためのより高い柔軟性が与えられる。
チップ上の物理的バッファメモリをnxの最大許容サイズに対して割り当てることができ、実行時により小さい値のnxが必要であればバッファの一部だけを利用することができる。しかしながら、nxの指定された最小および最大値が与えられると、発生された回路は最少量のバッファリングを最適に含んでいる。
次に、図11および12を参照して、本発明の実装について説明する。
ステップ300:ライブラリを初期化する
本発明の方法は標準コンピューティング装置400またはWindows(登録商標)やLinux(登録商標)のようなオペレーティングシステムを実行する他のプログラムドまたはプログラマブル装置で実行することができる。
この実施例では、本方法はJava(登録商標)ライブラリを利用するアプリケーション402として実装される。しかしながら、他の言語を使用することもでき、それらは当業者には自明である。たとえば、アプリケーションはC、C++または任意他の適切なプログラミング言語で実行することができる。
アプリケーション402はコンピューティング装置400のユーザがコマンドを入力してアプリケーションにアクセスできるようにするグラフィカルユーザインターフェイス(GUI)406を有している。
ステップ300において、アプリケーションおよびJavaライブラリが初期化される。次にこの方法はステップ302へ進む。
ステップ302:データ式を指定する
GUI406を介して、ユーザは所望するデータフローを式として指定する。これはadd(add(a,b),c)のようなコマンドを含むことができる。例として、ユーザは式(18)に定義されているような典型的な2D断面畳み込みを処理したいことがある。式(18)は、簡潔にするため、速記用語を使用し、
bはmul(a,b)が2入力を有する複数のノードを生成することを意味し、
a+bはadd(a,b)が2入力を有するaddノードを生成することを意味し、
a[b]はstreamOffset(a,b)が1入力およびbのオフセットを有するストリームオフセットノードを生成することを意味する。

ここに、oは出力であり、iは入力でありnxはデータセット内の高速次元(fast dimension)の可変サイズである。
これらのコマンドおよび式が入力されると、本方法はステップ304へ進む。
ステップ304:グラフを作り出す
ステップ302においてコマンドが入力されると、アプリケーション402はJavaライブラリ404を利用してJavaオブジェクトにより表わされるグラフを作り出す。式(18)において前記した例を使用して、これはグラフを次のように発生する。

本方法は次にステップ306へ進む。
ステップ306:レーテンシ情報を抽出して処理する
ステップ306において、ステップ304で作り出されたグラフ内のレーテンシ情報が抽出される。式(18)に示された例を取るために、レーテンシが次のように作り出される。

次に、本方法はステップ308へ進む。
ステップ308:線形不等式およびバッファリング式を定義する
ステップ302に記載したようなグラフの定義およびステップ306で定義または仮定された関連するレーテンシから、本方法は次に各データパスを定義する1組の線形不等式を発生する。式(18)の例を使用して、これはグラフ内のノードに対するレーテンシの定数部に対する制約とバッファリング式の下記の組合せを提供する。

また、nxに対する下記の制約とバッファリング式を提供する。

一度制約が線形不等式のグループとして設定されると、本方法はステップ310へ進む。
ステップ310:線形不等式を解く
ステップ310において、そこで発生された線形不等式が解かれる。線形不等式はそれらを整数線形プログラミング(ILP)ソルバーへ通して実行することにより解くことができる。このような線形(linear system)は、たとえば、GNU LinearProgramming Kit(GLPK)を使用して解くことができる。こうして、ここで使用された例を取ると、下記の式(19)は定数とnxの両方に対して最小化される。

最小化の結果から下記のパイプラインスケジュールが作り出される。

次に、本方法はステップ312へ進む。
ステップ312:グラフにバッファリングを挿入する
ステップ310で計算された最小化されたスケジュールが決定されると、このスケジュールはそれを満たすバッファノードを挿入することによりグラフに適用される。定義された前記例を使用するために、これは次のようにバッファリングを作り出す。

次に、本方法はステップ314へ進む。
ステップ314:バッファリングを最適化する
さまざまな最適化パスをデータパス上で実行することができる。前記したように、これはタップおよびフォールド操作を含むことができる。フォールド操作はそこで2つのバッファが端と端をつないで見えて1つのより長いバッファへ併合される操作である。
前記したように、タッピングは同じノード出力から来て異なるノード入力へ行く2つのバッファが存在するところである。この場合、バッファは2つのチェーンバッファへ変換することができる。たとえば、長さがMおよびNでM>Nである2つのバッファを長さがNのバッファとそれに続く長さが(M−N)のバッファへ変換することができる。これは無駄になるスペースを使用することにより多くのオンチップメモリを節約することができる。
前記した例において、ノード0(全長5)から出てくる3つのバッファを長さ1の1つのバッファとそれに続く長さ2(全長3)の1つのバッファへタッピングすることができる。この値3はB0の最終値に対応する。
スケジュールが定義されると、本方法はステップ316へ進む。
ステップ316:グラフをコンパイルする
最適化されたスケジュールが決定されると、グラフは次に物理的FPGAを形成できるようなフォーマットへコンパイルすることができる。コンパイラおよびコンパイル方法は公知であり、当業者ならば本発明で使用できるソフトウエア、ハードウェアおよび実装が容易にお判りであろう。次に、本方法はステップ318へ進む。
ステップ318:FPGA設計を作り出す
ステップ316においてグラフが正しいフォーマットにコンパイルされていると、ストリームプロセッサに対するFPGA設計が形成される。次に、FPGA設計を随意使用して最適化されたデータパス(またはカーネル)およびデータフローをハードウェア内に実装することができる。FPGA設計がFPGAチップまたはデバイス上のハードウェア内に形成されていると、エンドユーザは必要に応じてそれを使用してステップ302で定義されたストリーム計算を行うことができる。
図13は本発明の方法を使用して形成されたFPGA設計502を使用することができるコンピューティングデバイス500の略図を示す。コンピューティングデバイス500は中央処理装置(CPU)504、メインメモリ506およびデータバス508を含んでいる。
CPU504は任意適切な形状をとることができコンピューティングデバイス500上で実行するコンピュータプログラムの命令を実施するプロセッサを含んでいる。従来技術でよく知られているように、CPU504はコンピューティングデバイス500の機能を実施する主な要素である。CPU504はそれに電力を供給しかつそれをコンピューティングデバイス500内の他のコンポーネントに接続するのに必要なコンタクトを含むマザーボード(図示せず)上に一般的に配置される。
メインメモリ506はCPU504に関連づけられており、RAMのエリアを含んでいる。RAMはデータのビットがキャパシタまたはトランジスタゲート内に電荷として格納されるSRAM、ダイナミックRAM(DRAM)の形をとることができ、あるいは任意他の適切なメモリタイプとすることができる。多くのコンピューティングアプリケーションに対して一般的であるように、メインメモリ506は複数のSRAMまたはDRAMモジュールとして提供することができる。これらのモジュールは破損したりより大きな記憶容量が必要である時に迅速に置換することができる。メインメモリ506はコンピューティングデバイス500の一部を形成するマザーボードを介してCPU504と通信することができる。
データバス508は追加デバイスをコンピューティングデバイス500に接続してそのコンポーネントと通信できるようにする。データバス508は任意適切な形、たとえば、Peripheral Component Interconnect Express(PCI−E)データバスの形をとることができる。データバス508はマザーボード搭載周辺装置にリンクするマザーボード・レベルインターコネクトおよびアド・インカードに対する拡張カードインターフェイスとして機能する。
FPGA502は、この例では、アクセラレータカード510である。アクセラレータカード510はデータバス508に接続するように構成され、たとえば、PCI−Eデータバスに接続するのに適したインターコネクトを含むPCI−Eフォーマット拡張カードとすることができる。
判り易くするために、下記の例には単一アクセラレータカード510しか含まれていないが、当業者ならば本発明の方法に従って形成されたFPGA502を含む追加アクセラレータカードを含んで追加計算力を提供できることが容易にお判りであろう。たとえば、4つのアクセラレータカード510を1つのシステム内に並列に含んで、各カードがCPU504と通信しかつ互いに通信するようにすることができる。あるいは、複数のFPGAデバイス502を単一アクセラレータカード510上に提供することができる。
当業者ならばバリエーションがお判りであろう。たとえば、ここで説明された例はFPGAベースストリームプロセッサに対するハードウェア設計の発生に関連しているが、本発明は他のプログラマブルロジックデバイスまたは特定用途集積回路(ASIC)にも応用できる。当業者ならば本発明の範囲内に入る代替デバイスが容易にお判りであろう。
特に図示された例を参照して本発明の実施例を説明してきた。特定の例を図示し詳細に説明してきたが、図面および詳細な説明は本発明を開示された特定の形に限定するものではない。本発明の範囲内で説明された例を変更および修正できることをお判り願いたい。
10 FPGA
12 CLB
14 インターコネクト
16 入力パッド
18 出力パッド
20 LUT
22 フリップフロップユニット
24 一時的メモリストレージおよび出力
26 ブロックメモリユニット
30、40、52、54 データパス
32 算術演算
42、56、108、112 出力
44、46、102、104 ノード
48、114 エッジ
9、10、19、50、58 バッファ
106、110 入力
400、500 コンピューティング装置
402 アプリケーション
404 Javaライブラリ
406 GUI
502 FPGA設計
504 CPU
506 メインメモリ
508 データバス
510 アクセラレータカード

Claims (33)

  1. パイプライン化並列ストリームプロセッサに対するハードウェア設計を発生する方法であって、前記方法は、
    コンピューティングデバイス上で、前記パイプライン化並列ストリームプロセッサの一部としてハードウェア内に実装されるプロセスを指示する処理操作を定義するステップと、
    コンピューティングデバイス上で、前記処理操作をタイムドメイン内の並列構造として表わすグラフをクロックサイクルの関数として定義するステップであって、前記グラフは前記パイプライン化並列ストリームプロセッサに対するハードウェア設計として実装される少なくとも1つのデータパスを含み、かつデータ値がその中をストリーミングできるように構成された複数の並列分岐を含み、前記または各データパスは少なくとも1つの入力、少なくとも1つの出力、前記パイプライン化並列ストリームプロセッサの一部としてハードウェア内に実装されるハードウェアエレメントに直接対応する少なくとも1つの個別オブジェクトを含むものとして表わされ、前記または各個別オブジェクトは1クロックサイクル以上機能を実行するように動作することができ、かつ予め定義されたレーテンシが関連付けられており、前記予め定義されたレーテンシは前記ハードウェアエレメントが前記機能を実行するのに要する時間を表し、前記データ値は増加するクロックサイクルの関数として前記データパス中を少なくとも1つの入力から少なくとも1つの出力まで伝播するステップと、
    コンピューティングデバイス上で、前記少なくとも1つのデータパスおよび前記グラフの関連付けられたレーテンシを1組の代数線形不等式として定義するステップと、
    コンピューティングデバイス上で、前記1組の代数線形不等式を解くステップと、
    コンピューティングデバイス上で、前記解かれた線形不等式を使用して前記グラフ内の前記少なくとも1つのデータパスを最適化して最適化されたグラフを作り出すステップと、
    コンピューティングデバイス上で、前記最適化されたグラフを利用してハードウェア内に実装する最適化されたハードウェア設計を前記パイプライン化並列ストリームプロセッサとして定義するステップと、
    さらに、コンピューティングデバイス上で、データパス内の特定のポイントにある少なくとも1つのストリームオフセットオブジェクトを提供するステップを含み、
    前記ストリームオフセットオブジェクトは、特定のクロックサイクルおよびデータパス内の前記特定のポイントに対して、前記特定のクロックサイクルとは異なるクロックサイクルからのデータ値へアクセスするように動作することができ、そして、
    前記少なくとも1つのストリームオフセットオブジェクトは前記特定のクロックサイクルから変数に依存するクロックサイクル数だけオフセットしたクロックサイクルからのデータ値へアクセスするように動作することができ、前記変数の値は前記最適化されたハードウェア設計が前記パイプライン化並列ストリームプロセッサとしてハードウェア内に実装された後で指定される、
    方法。
  2. 請求項1記載の方法であって、前記処理操作は前記パイプライン化並列ストリームプロセッサとしてハードウェア内に実装される数学関数または計算を含む方法。
  3. 請求項1または2記載の方法であって、前記または各ハードウェアエレメントは前記パイプライン化並列ストリームプロセッサ上に1つ以上のハードウェアユニットを含む方法。
  4. 請求項1、2または3記載の方法であって、前記または各ハードウェアエレメントは予め定められた数学関数を実施するように構成されている方法。
  5. 請求項1から4のいずれか1項記載の方法であって、前記最適化ステップは前記データパスをスケジュールするのに必要なバッファリングの量を最小化するステップを含む方法。
  6. 請求項1から5のいずれか1項記載の方法であって、前記最小化ステップは、さらに、
    必要ならば、前記データパスの少なくともいくつかの分岐にバッファリングを挿入するステップを含む方法。
  7. 請求項5または6記載の方法であって、前記バッファリングは前記パイプライン化並列ストリームプロセッサ上のメモリユニットを表す方法。
  8. 請求項5、6または7記載の方法であって、前記バッファリングは全体グラフに対して最小化される方法。
  9. 請求項5から8のいずれか1項記載の方法であって、前記最適化ステップは、さらに、2つ以上のバッファを併合して単一バッファとするステップを含む方法。
  10. 請求項5から9のいずれか1項記載の方法であって、前記最適化ステップは、さらに、前記少なくとも1つのデータパスの2つ以上の分岐に単一バッファを割り当てるステップを含む方法
  11. 請求項1から10のいずれか1項記載の方法であって、前記グラフは複数の入力および複数の出力を含み、各入力および各出力は前記少なくとも1つのデータパスの少なくとも1つの分岐に接続されている方法。
  12. 請求項11記載の方法であって、前記入力はサイクルが揃えられていない方法。
  13. 請求項11または12記載の方法であって、前記出力はサイクルが揃えられていない方法。
  14. 請求項1から13のいずれか1項記載の方法であって、前記グラフは前記パイプライン化並列ストリームプロセッサとしてハードウェア内に実装される複数の並列データパスを含み、前記解答および最適化ステップは前記複数の並列データパスの各々に対して実施される方法。
  15. 請求項1から14のいずれか一項記載の方法であって、前記少なくとも1つのストリームオフセットオブジェクトは前記特定のクロックサイクルの前のクロックサイクルからのデータ値へアクセスするように動作することができる方法。
  16. 請求項1から14のいずれか一項記載の方法であって、前記少なくとも1つのストリームオフセットオブジェクトは前記特定のクロックサイクルの後のクロックサイクルからのデータ値へアクセスするように動作することができる方法。
  17. 請求項1から16のいずれか1項記載の方法であって、前記少なくとも1つのストリームオフセットオブジェクトは前記特定のクロックサイクルから予め選定されたクロックサイクル数だけオフセットしたクロックサイクルからのデータ値へアクセスするように動作することができる方法。
  18. 請求項1から17のいずれか一項記載の方法であって、前記処理操作が前記パイプライン化並列ストリームプロセッサ上で実行される前に指定される方法。
  19. ストリームプロセッサに対するハードウェア設計を発生する方法であって、前記方法は、
    コンピューティングデバイス上で、前記ストリームプロセッサの一部としてハードウェア内に実装されるプロセスを指示する処理操作を定義するステップと、
    コンピューティングデバイス上で、タイムドメイン内の前記処理操作を表わすグラフをクロックサイクルの関数として定義するステップであって、前記グラフは前記ストリームプロセッサの一部としてハードウェア内に実装されかつデータがその中をストリーミングできるように構成された少なくとも1つのデータパスを含み、前記または各データパスは少なくとも1つの入力、少なくとも1つの出力、および少なくとも1つの個別オブジェクトを含み、前記データは増加するクロックサイクルの関数として前記データパス中を少なくとも1つの入力から少なくとも1つの出力まで伝播するステップと、
    コンピューティングデバイス上で、データパス内の特定のポイントにある少なくとも1つのストリームオフセットオブジェクトを提供するステップであって、前記ストリームオフセットオブジェクトは、特定のクロックサイクルおよび前記データパス内の前記特定のポイントに対して、前記特定のクロックサイクルとは異なるクロックサイクルからのデータ値へアクセスするように動作することができるステップと、
    コンピューティングデバイス上で、前記グラフ内の前記少なくとも1つのデータパスを最適化して最適化されたグラフを作り出すステップと、
    コンピューティングデバイス上で、前記最適化されたグラフを利用して前記ストリームプロセッサとしてハードウェア内に実装される最適化されたハードウェア設計を定義するステップと、を含み、
    前記少なくとも1つのストリームオフセットオブジェクトは前記特定のクロックサイクルから変数に依存するクロックサイクル数だけオフセットされたクロックサイクルからのデータ値へアクセスするように動作することができ、前記変数は前記最適化されたハードウェア設計が前記ストリームプロセッサの一部としてハードウェア内に実装された後で指定される、
    方法。
  20. 請求項19記載の方法であって、前記少なくとも1つのストリームオフセットオブジェクトは前記特定のクロックサイクルの前のクロックサイクルからのデータ値へアクセスするように動作することができる方法。
  21. 請求項19記載の方法であって、前記少なくとも1つのストリームオフセットオブジェクトは前記特定のクロックサイクルの後のクロックサイクルからのデータ値へアクセスするように動作することができる方法。
  22. 請求項1920または21のいずれか1記載の方法であって、前記少なくとも1つのストリームオフセットオブジェクトは前記特定のクロックサイクルから予め選定されたクロックサイクル数だけオフセットされたクロックサイクルからのデータ値へアクセスするように動作することができる方法。
  23. 請求項19から21のいずれか一項記載の方法であって、前記変数の値は前記処理操作が前記ストリームプロセッサ上で実行される前に指定される方法。
  24. 請求項19から23のいずれか一項記載の方法であって、前記最適化は、さらに、
    コンピューティングデバイス上で、前記グラフの前記少なくとも1つのデータパスを1組の代数線形不等式として定義するステップと、
    コンピューティングデバイス上で、前記1組の代数線形不等式を解くステップと、
    コンピューティングデバイス上で、前記解かれた線形不等式を使用して前記グラフ内の前記少なくとも1つのデータパスを最適化して最適化されたグラフを作り出すステップと、を含む方法。
  25. 請求項1から18のいずれか1項記載の方法であって、前記パイプライン化並列ストリームプロセッサはフィールド プログラマブル ゲート アレイまたは特定用途集積回路上に実装される方法。
  26. 請求項19から24のいずれか1項記載の方法であって、前記ストリームプロセッサはフィールド プログラマブル ゲート アレイまたは特定用途集積回路上に実装される方法。
  27. 請求項1から18のいずれか1項記載の方法であって、さらに、前記パイプライン化並列ストリームプロセッサが前記処理操作を実施するように動作できるように前記最適化されたハードウェア設計を前記ストリームプロセッサ上に形成するステップを含む方法。
  28. 請求項19から25のいずれか1項記載の方法であって、さらに、前記ストリームプロセッサが前記処理操作を実施するように動作できるように前記最適化されたハードウェア設計を前記ストリームプロセッサ上に形成するステップを含む方法。
  29. プログラマブルロジックデバイスを作る方法であって、
    請求項1から26のいずれか1項の方法を使用して設計を発生するステップと、
    発生された設計を具現するように前記ロジックデバイスをプログラミングするステップと、を含む方法。
  30. コンピュータ上で実行されると請求項1から26のいずれか1項記載のステップを実行するようにされているコンピュータプログラム。
  31. 請求項30記載のコンピュータプログラムであって、コンピュータ読取可能媒体上に格納されたコンピュータプログラム。
  32. 請求項1から26のいずれか1項記載の方法を使用して発生された設計を有するフィールド プログラマブル ゲート アレイ、特定用途集積回路または他のプログラマブルロジックデバイス。
  33. ハードウェアストリームプロセッサを発生するシステムであって、前記システムは、
    請求項1から26のいずれか1項記載の方法を実行して前記発生された設計を有するプログラマブルロジックデバイスをプログラミングする命令のリストを発生するステップを含む方法。
JP2012031618A 2011-02-17 2012-02-16 並列パイプライン化ハードウェアにおけるストリームスケジューリング方法および装置 Active JP6001873B2 (ja)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US13/029,696 US8464190B2 (en) 2011-02-17 2011-02-17 Method of, and apparatus for, stream scheduling in parallel pipelined hardware
US13/029,696 2011-02-17

Publications (2)

Publication Number Publication Date
JP2012174268A JP2012174268A (ja) 2012-09-10
JP6001873B2 true JP6001873B2 (ja) 2016-10-05

Family

ID=45524278

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2012031618A Active JP6001873B2 (ja) 2011-02-17 2012-02-16 並列パイプライン化ハードウェアにおけるストリームスケジューリング方法および装置

Country Status (4)

Country Link
US (2) US8464190B2 (ja)
EP (1) EP2490141B1 (ja)
JP (1) JP6001873B2 (ja)
GB (1) GB2488195A (ja)

Families Citing this family (17)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP2370946A4 (en) 2008-12-15 2012-05-30 Exegy Inc METHOD AND DEVICE FOR HIGH-SPEED PROCESSING OF FINANCIAL MARKET DEFINITIONS
US8972923B2 (en) * 2011-02-08 2015-03-03 Maxeler Technologies Ltd. Method and apparatus and software code for generating a hardware stream processor design
US9367658B2 (en) * 2011-06-22 2016-06-14 Maxeler Technologies Ltd. Method and apparatus for designing and generating a stream processor
US20130046912A1 (en) * 2011-08-18 2013-02-21 Maxeler Technologies, Ltd. Methods of monitoring operation of programmable logic
US8671371B1 (en) * 2012-11-21 2014-03-11 Maxeler Technologies Ltd. Systems and methods for configuration of control logic in parallel pipelined hardware
US8701069B1 (en) * 2012-11-21 2014-04-15 Maxeler Technologies, Ltd. Systems and methods for optimizing allocation of hardware resources to control logic in parallel pipelined hardware
US9934043B2 (en) 2013-08-08 2018-04-03 Linear Algebra Technologies Limited Apparatus, systems, and methods for providing computational imaging pipeline
US9727113B2 (en) 2013-08-08 2017-08-08 Linear Algebra Technologies Limited Low power computational imaging
US11768689B2 (en) 2013-08-08 2023-09-26 Movidius Limited Apparatus, systems, and methods for low power computational imaging
US10001993B2 (en) 2013-08-08 2018-06-19 Linear Algebra Technologies Limited Variable-length instruction buffer management
US9910675B2 (en) 2013-08-08 2018-03-06 Linear Algebra Technologies Limited Apparatus, systems, and methods for low power computational imaging
JP6072383B1 (ja) * 2016-03-10 2017-02-01 三菱電機株式会社 高位合成装置、高位合成方法及び高位合成プログラム
US10460704B2 (en) 2016-04-01 2019-10-29 Movidius Limited Systems and methods for head-mounted display adapted to human visual mechanism
US10152566B1 (en) * 2016-09-27 2018-12-11 Altera Corporation Constraint based bit-stream compression in hardware for programmable devices
US9661052B1 (en) * 2016-10-14 2017-05-23 International Business Machines Corporation Reconfiguring a streaming application to reduce latency mismatches
US10949947B2 (en) 2017-12-29 2021-03-16 Intel Corporation Foveated image rendering for head-mounted display devices
US11301295B1 (en) * 2019-05-23 2022-04-12 Xilinx, Inc. Implementing an application specified as a data flow graph in an array of data processing engines

Family Cites Families (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2002123563A (ja) * 2000-10-13 2002-04-26 Nec Corp コンパイル方法および合成装置ならびに記録媒体
US7000213B2 (en) 2001-01-26 2006-02-14 Northwestern University Method and apparatus for automatically generating hardware from algorithms described in MATLAB
US6934938B2 (en) 2002-06-28 2005-08-23 Motorola, Inc. Method of programming linear graphs for streaming vector computation
US6941541B2 (en) 2002-07-19 2005-09-06 Hewlett-Packard Development Company, L.P. Efficient pipelining of synthesized synchronous circuits
US7107199B2 (en) * 2002-10-31 2006-09-12 Hewlett-Packard Development Company, L.P. Method and system for the design of pipelines of processors
US7478377B2 (en) 2004-06-07 2009-01-13 International Business Machines Corporation SIMD code generation in the presence of optimized misaligned data reorganization
US7395531B2 (en) 2004-06-07 2008-07-01 International Business Machines Corporation Framework for efficient code generation using loop peeling for SIMD loop code with multiple misaligned statements
US7305649B2 (en) 2005-04-20 2007-12-04 Motorola, Inc. Automatic generation of a streaming processor circuit
JP2009512089A (ja) 2005-10-18 2009-03-19 マイトリオニクス エービー データフローマシンにおけるデッドロックを回避するための方法
US7454597B2 (en) * 2007-01-02 2008-11-18 International Business Machines Corporation Computer processing system employing an instruction schedule cache
US7817655B1 (en) 2008-10-30 2010-10-19 Xilinx, Inc. Determining sizes of FIFO buffers between functional blocks in an electronic circuit

Also Published As

Publication number Publication date
US20130173890A1 (en) 2013-07-04
GB201122363D0 (en) 2012-02-01
US20120216019A1 (en) 2012-08-23
EP2490141A2 (en) 2012-08-22
GB2488195A (en) 2012-08-22
JP2012174268A (ja) 2012-09-10
US8689156B2 (en) 2014-04-01
EP2490141B1 (en) 2019-06-12
US8464190B2 (en) 2013-06-11
EP2490141A3 (en) 2012-12-19

Similar Documents

Publication Publication Date Title
JP6001873B2 (ja) 並列パイプライン化ハードウェアにおけるストリームスケジューリング方法および装置
Hauck et al. Reconfigurable computing: the theory and practice of FPGA-based computation
Coussy et al. GAUT: A High-Level Synthesis Tool for DSP Applications: From C Algorithm to RTL Architecture
Ku et al. High level synthesis of ASICs under timing and synchronization constraints
US8671371B1 (en) Systems and methods for configuration of control logic in parallel pipelined hardware
US8739101B1 (en) Systems and methods for reducing logic switching noise in parallel pipelined hardware
US8701069B1 (en) Systems and methods for optimizing allocation of hardware resources to control logic in parallel pipelined hardware
Guo et al. Analysis and optimization of the implicit broadcasts in FPGA HLS to improve maximum frequency
Koul et al. Aha: An agile approach to the design of coarse-grained reconfigurable accelerators and compilers
Casseau et al. Design of multi-mode application-specific cores based on high-level synthesis
Liu et al. Unified buffer: Compiling image processing and machine learning applications to push-memory accelerators
Zhou et al. Khronos: Fusing Memory Access for Improved Hardware RTL Simulation
Rykunov Design of asynchronous microprocessor for power proportionality
Sadasue et al. LLVM-C2RTL: C/C++ based system level RTL design framework using LLVM compiler infrastructure
Dutta et al. A holistic approach for tightly coupled reconfigurable parallel processors
Mehdipour et al. A design scheme for a reconfigurable accelerator implemented by single-flux quantum circuits
Nielsen et al. Behavioral synthesis of asynchronous circuits using syntax directed translation as backend
Ayala-Rincón et al. Prototyping time-and space-efficient computations of algebraic operations over dynamically reconfigurable systems modeled by rewriting-logic
Daigneault et al. Fast description and synthesis of control-dominant circuits
Horváth et al. A proposed synthesis method for application-specific instruction set processors
Toi et al. High-level synthesis challenges for mapping a complete program on a dynamically reconfigurable processor
Cong et al. A variation-tolerant scheduler for better than worst-case behavioral synthesis
Horváth et al. A proposed novel description language in digital system modeling
Chinnadurai et al. Survey On Scheduling And Allocation In High Level Synthesis
Hannig et al. Parallelization approaches for hardware accelerators–loop unrolling versus loop partitioning

Legal Events

Date Code Title Description
A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20120607

A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20150209

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20160114

A601 Written request for extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A601

Effective date: 20160414

A601 Written request for extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A601

Effective date: 20160614

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20160714

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20160803

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20160902

R150 Certificate of patent or registration of utility model

Ref document number: 6001873

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250