(57)【要約】本発明は、パイプラインプロセッサシステムにおけるパイプラインスループットを促進するための方法及び装置に関し、限定ではないがより詳細には、非プログラマブルプロセッサの同期パイプラインを通るパイプラインスループットを促進するための方法及び装置に関する。少なくとも１つのプロデューサプロセス／コンシューマプロセスのペアを含む同期パイプラインシステムにおけるパイプラインスループットを促進する方法であって、前記プロデューサプロセス／コンシューマプロセスのペアを制御するステップであって、前記プロデューサプロセス及び前記コンシューマプロセスが依存関係を壊すことなく非同期で実行されることを可能にするステップを含む方法。【選択図】  図４
2008532171.tif 000002
【特許請求の範囲】
【請求項１】
少なくとも１つのプロデューサプロセス／コンシューマプロセスのペアを含む同期パイプラインシステムにおけるパイプラインスループットを促進する方法であって、
前記プロデューサプロセス／コンシューマプロセスのペアを制御するステップであって、
前記プロデューサプロセス及び前記コンシューマプロセスが依存関係を壊すことなく非同期で実行されることを可能にするステップ
を含む方法。
【請求項２】
前記制御するステップは、
前記プロデューサプロセス／コンシューマプロセスのペアの前記依存関係を監視すると共に、該依存関係を壊すという結果にはならない所定のパイプライン動作状況で、前記プロデューサプロセス／コンシューマプロセスのペアの非同期のオペレーションを可能にするステップ
を含む
請求項１に記載の方法。
【請求項３】
前記所定のパイプライン動作状況は、
前記プロデューサ及び前記コンシューマが互いに依存しない場合の動作状態
を含む
請求項２に記載の方法。
【請求項４】
前記動作状態は、
前記コンシューマプロセスが、前記プロデューサプロセスよりも同期進み（sync-ahead）で実行される状態
を含み、
前記コンシューマプロセスは、前記プロデューサプロセスによって実行されているタスクよりも古いタスクを実行している
請求項３に記載の方法。
【請求項５】
前記動作状態は、
前記プロデューサプロセスが、前記コンシューマプロセスよりも同期進みで実行される状態
を含み、
前記プロデューサプロセスは、前記コンシューマプロセスによって実行されているタスクよりも古いタスクを実行している
請求項３に記載の方法。
【請求項６】
前記制御するステップは、
プロセス間オペレーションを制御するステップ
を含む
請求項１に記載の方法。
【請求項７】
前記プロセス間オペレーションは、前記プロデューサプロセスと前記コンシューマプロセスとの間のデータ転送のバッファリングであり、
該バッファリングを制御するステップは、
前記プロデューサプロセスが前記コンシューマプロセスよりも同期進みで実行されている時にデータ転送のさらなるバッファリング遅延を導入するステップ
を含む
請求項６に記載の方法。
【請求項８】
前記バッファリングを制御するステップは、
前記プロデューサプロセスが前記コンシューマプロセスよりもどれだけの時間分同期進みで実行されているかに従って、前記さらなるバッファリング遅延の時間を変化させるステップ
を含む
請求項７に記載の方法。
【請求項９】
プロセスストール領域（process stall domain）を実施するステップ
をさらに含み、
前記プロデューサプロセス及び前記コンシューマプロセスのペアの少なくとも一方は、単独でストールされる
請求項１に記載の方法。
【請求項１０】
同期を維持するために、前記プロデューサプロセスと前記コンシューマプロセスとの間のランタイム相対時間距離を調整するステップ
をさらに含む請求項１に記載の方法。
【請求項１１】
個々のプロセスがタスクを起動した時及び終了した時にフラグを立て、前記個々のプロセスが実施している前記タスクの追跡を可能にするステップ
をさらに含む請求項１に記載の方法。
【請求項１２】
前記個々のプロセスの前記フラグを立てることを利用し、あるプロセスが別のプロセスに依存しているか否かを判断するステップ
を含む請求項１１に記載の方法。
【請求項１３】
少なくとも１つのプロデューサプロセッサ／コンシューマプロセッサのペアを備える同期パイプラインシステムにおけるパイプラインスループットを促進する装置であって、
前記プロデューサプロセッサ／コンシューマプロセッサのペアを制御するように構成され、前記プロデューサプロセッサ及び前記コンシューマプロセッサが依存関係を壊すことなく非同期で実行されることを可能にする制御手段
を備える装置。
【請求項１４】
前記制御手段は、前記プロデューサプロセッサ／コンシューマプロセッサのペアの前記依存関係を監視すると共に、該依存関係を壊すという結果にはならない所定のパイプライン動作状況で、前記プロデューサプロセッサ／コンシューマプロセッサのペアの非同期のオペレーションを可能にするように構成されている
請求項１３に記載の装置。
【請求項１５】
前記所定のパイプライン動作状況は、
前記プロデューサ及び前記コンシューマが互いに依存しない場合の動作状態
を含む
請求項１４に記載の装置。
【請求項１６】
前記動作状態は、
前記コンシューマプロセッサが、前記プロデューサプロセッサよりも同期進みで実行される状態
を含み、
前記コンシューマプロセッサは、前記プロデューサプロセッサによって実行されているタスクよりも古いタスクを実行している
請求項１５に記載の装置。
【請求項１７】
前記動作状態は、
前記プロデューサプロセッサが、前記コンシューマプロセッサよりも同期進みで実行される状態
を含み、
前記プロデューサプロセッサは、前記コンシューマプロセッサによって実行されているタスクよりも古いタスクを実行している
請求項１５に記載の装置。
【請求項１８】
前記コンシューマプロセッサが前記プロデューサプロセッサよりも同期進みで実行されている時にデータ転送のさらなるバッファリング遅延を実施するように構成されるバッファ
をさらに備える請求項１３に記載の装置。
【請求項１９】
前記制御手段は、前記プロデューサプロセッサが前記コンシューマプロセッサよりもどれだけの時間分同期進みで実行されているかに従って、前記さらなるバッファリング遅延の時間を変化させるように前記バッファを制御するよう構成されている
請求項１８に記載の装置。
【請求項２０】
前記制御手段は、プロセッサストール領域を実施するように構成され、プロセッサを単独でストールする
請求項１３に記載の装置。
【請求項２１】
前記制御手段は、同期を維持するために、前記プロデューサプロセッサと前記コンシューマプロセッサとの間のランタイム相対時間距離を調整するように構成されている
請求項２０に記載の装置。
【請求項２２】
前記制御手段は、個々のプロセッサがタスクを起動している時及び終了している時にフラグを立てると共に、タスクの該起動及び／又は該終了が個々のプロセッサによって実施されている時を追跡するように構成されている
請求項１３に記載の装置。
【請求項２３】
前記制御手段は、前記フラグを立てることを利用して、或るプロセスが別のプロセスに依存しているか否かを判断するように構成されている
請求項２２に記載の装置。
【請求項２４】
請求項１に記載の方法を実施するように同期パイプラインを制御するよう構成されるコンピュータプログラムを提供する
コンピュータ可読媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、パイプラインプロセッサシステムにおけるパイプラインスループットを促進するための方法及び装置に関し、限定ではないがより詳細には、非プログラマブルプロセッサの同期パイプラインを通るパイプラインスループットを促進するための方法及び装置に関する。
【背景技術】
【０００２】
コンピューティング環境において、パイプラインは、いくつかのステップでタスクを実行する一連の機能ユニット又はプロセッサである。各プロセッサは、バッファに記憶されている入力を取り込んで、バッファに記憶される出力を生成する。したがって、或るプロセッサの出力バッファは、次のプロセッサの入力バッファである。この構成によって、パイプラインのプロセッサは、並列に動作することが可能になり、したがって、次の入力が入ることができる前に各入力がパイプライン全体を通過しなければならない場合よりも、大きなスループットが与えられる。バッファに出力するプロセッサは通例「プロデューサ」と呼ばれ、バッファから入力を受け取るプロセッサは通例「コンシューマ」と呼ばれる。パイプラインは、一般に、複数のプロデューサプロセッサ／コンシューマプロセッサのペアを有し、通例は多くのプロデューサプロセッサ／コンシューマプロセッサのペアを有する。
【０００３】
パイプラインは多くのアルゴリズムに使用される。これらの多くのアルゴリズムには、特に（これらに限定されるものではないが）、イメージングの分野、オーディオ／ビデオの分野、及び無線の分野で使用されるアルゴリズムが含まれる。これらのアルゴリズムは、通例、非常に高性能となるように実施されなければならない。高性能オペレーションのためのパイプラインプロセッサは、多くの場合ハードウェアで実施され、これらのハードワイヤ化されたプロセッサは、非プログラマブルプロセッサとして知られている。
【０００４】
パイプラインシステムのすべてのプロセッサは、相互と共時的に動作してプロセッサ間のデータ依存性を満たすようにスケジューリングされ、且つ、ハードワイヤ化されている（同期スケジューリングと呼ばれる）。プロセッサ内コントローラは、各プロセッサ内の実行を処理する。単一のプロセッサ間コントローラ又はパイプラインコントローラは、指定された時刻にプロセッサでタスクを起動することや、パイプラインが次のタスクを受け付ける準備ができていることの報告等、システムレベルの制御を処理する。
【０００５】
ランタイムにおいて、オペレーションは、いくつかのプロセッサに対してストールを生成する場合がある。ストールは、或るプロセッサを他のプロセッサと非同期にし、その結果、実行が不正確になる。このような同期変動は、パイプラインにとって重大な問題である。
【０００６】
パイプラインコントローラの１つのソリューションは、いずれか１つのプロセッサに対するストールについてあらゆるプロセッサをストールさせる、パイプラインの共通ストール領域（common stall domain）又は単一ストール領域（single stall domain）を操作することである。これは、パイプラインスループットのオペレーションを停止する影響を有する一方、プロセッサは、ストールされて相互に同期する状態に戻される。この手法は、パイプラインのスループットに深刻な悪影響を与え、全体の性能を大幅に低減させる可能性がある。単一ストール領域のソリューションは、最後のタスクをパイプラインからフラッシュする特別な「フラッシュ」コマンド及び回路部も必要とする。
【特許文献１】米国特許第５７８７２７２号
【特許文献２】米国特許第６３７０６００号
【特許文献３】米国特許第５４５２４６１号
【特許文献４】米国特許第５３１７７３４号
【特許文献５】米国特許第５５３５３８７号
【発明の開示】
【発明が解決しようとする課題】
【０００７】
本発明は、上述した背景からなされたものであって、非プログラマブルプロセッサの同期パイプラインを通るパイプラインスループットを促進するために改良された方法及び装置を提供することを目的とする。
【課題を解決するための手段】
【０００８】
少なくとも１つのプロデューサプロセス／コンシューマプロセスのペアを含む同期パイプラインシステムにおけるパイプラインスループットを促進する方法の一実施の形態においては、その実施の形態は、プロデューサプロセス／コンシューマプロセスのペアを制御するステップであって、それによって、それらのプロデューサプロセス及びコンシューマプロセスが依存関係を壊すことなく非同期で実行されることを可能にする、制御するステップを含む。
【０００９】
本発明の特徴及び利点は、添付図面を参照する、単なる例としての本発明の一実施形態の以下の説明から明らかになる。
【発明を実施するための最良の形態】
【００１０】
本発明の方法及び装置の一実施形態を詳細に説明する前に、従来の同期パイプラインのオペレーションを図１及び図２に関して説明する。
【００１１】
イメージングの分野、オーディオ／ビデオの分野、及び無線の分野の多くのアルゴリズムは、一連の計算を使用して構築されている。各計算は、論理計算ブロックとしてコード化される。外部からのデータがいくつかのブロックに入力され、これらのブロックの計算出力がいくつかの後続のブロックに供給され、その結果が最終ブロックから出力される。
【００１２】
これらのアルゴリズムは、非常に高性能となるように実施されなければならない。最も一般的な方法の１つは、アルゴリズムの論理計算ブロックをハードウェアで実施することである。これらのハードワイヤ化されているブロックのそれぞれは、計算を実行する非プログラマブルプロセッサである。プロセッサ間には、中間バッファ又はプロセッサ間バッファ（ＩＰＢ）が存在し、別のプロセッサへ供給される或るプロセッサの出力を保持する。バッファを介して接続されるプロセッサにより形成される全体のシステムは、非循環有向グラフ、すなわちＤＡＧとみなすことができる。ＤＡＧのノードは、プロセッサを表し、或るプロセッサから別のプロセッサへの有向エッジは、プロセッサ間のプロデューサ−コンシューマ関係を表す。エッジは、１つ又は２つ以上のプロセッサ間バッファ、すなわちＩＰＢが存在することを暗に意味する。
【００１３】
システムのスループットは、（出力データレート（output_data_rate）／入力データレート（input_data_rate））である。ここで、入力及び出力は、システムの境界において観測される。高スループットの要件は、システムレベル並列性（system level parallelism）と呼ばれる、プロセッサ間の並列実行を必要とする。スループットを増加させることのほかに、システムが、逐次実行の場合のようにプロセッサ間ですべてのデータをバッファリングする必要がない場合、高スループットの要件は、ＩＰＢのサイズを削減する。高スループットは、さらにタスクのパイプライン化によって達成することができる。タスクは、或るデータセットに対するシステムの１つの完結した実行を表す。タスク間にデータフローは存在せず、したがって、タスクは相互に独立している。パイプライン化システムは、いくつかの古いタスクがまだシステムで動作している場合であっても、次のタスクを受け付けることができる。システムのプロセッサはそれ自体でパイプラインステージとみなすことができ、タスクの実行は、前のステージから後のステージへ進む。図１は、ＤＡＧを示している。図２は、システムレベル並列性及びタスクパイプライン化を示している。これらの図において、ｐ１、ｐ２、ｐ３はプロセッサであり、ｔ１、ｔ２はタスクである。
【００１４】
プロセッサｐ１、ｐ２、ｐ３は、プロデューサ／コンシューマのペアを形成する。ｐ１は、ｐ２（コンシューマ）のデータのプロデューサである。ｐ３は、プロセッサｐ２（プロデューサ）からのデータのコンシューマである。加えて、ｐ３は、プロセッサｐ１のコンシューマでもある。有向エッジは、ＩＰＢ１、ＩＰＢ２、ＩＰＢ３を介して接続されている。
【００１５】
最小タスク間インターバル（minimum inter task interval）（ＭＩＴＩ）は、パイプライン設計を駆動するスループットインジケータである。パイプラインは、スループットを満たすようにあらゆるＭＩＴＩサイクルで新しいタスクを受け付けることができるべきである。同期パイプライン設計は、プロセッサオペレーションのスケジュールを作成し、最小のＩＰＢを設計し、各プロセッサの起動時刻を指定する。スケジュールは、あらゆるタスクについて同じである。オペレーションのスケジュールは、ハードワイヤ化され、非プログラマブルプロセッサを構築する。プロセッサ内コントローラは、プロセッサの内部でスケジュールを実行する。起動時刻は、依存関係を満たすために、プロセッサ間の（クロックサイクルでの）相対時間間隔又は相対時間距離を暗黙的に指定する。システムには、指定された起動時刻にプロセッサを起動するパイプラインコントローラが存在する。また、パイプラインコントローラは、ＭＩＴＩサイクル後に次のタスクを受け付ける準備ができていることを外部世界に信号で伝える。指定された相対時間距離からのずれが±１サイクルであっても、場合によっては実行が不正確になる可能性があることから、スケジュールはタイトであると言われる。
【００１６】
一例を考える。スケジュールは、プロセッサｐ１がｐ２よりも「ｄ」サイクル進んでいなければならないことを指定するものとする。ｐ１がｐ２よりも＞ｄサイクル進んで実行されている場合、本発明者らは、ｐ１がｐ２よりも同期進みであると言う。ｐ２がｐ１よりも＞ｄ遅れて実行されている場合、本発明者らは、ｐ２がｐ１よりも同期進みであると言う。これらの双方の場合には、（ｐ１，ｐ２）ペアは、非同期であると言われる。それ以外のすべての状況の下では、（ｐ１，ｐ２）ペアは同期していると言われる。
【００１７】
パイプラインの実行中、いくつかのプロセッサにおけるオペレーションが、そのプロセッサに対するストールを生成する場合がある。或るプロセッサに対するストールによって、そのプロセッサは他のプロセッサに対して非同期になり、その結果、実行は不正確となる。パイプラインコントローラの単一ストール領域のソリューションは、パイプラインのすべてのプロセッサを共通ストール領域の下に有することになる。パイプラインコントローラは、いずれかのプロセッサに対するストールについても、パイプラインのあらゆるプロセッサをストールし、したがって、相対時間距離が維持される。起動時刻カウンタ及びＭＩＴＩカウンタは、ストールしていないサイクルのみをカウントし、したがって、正確さが保証される。ランタイムストールは、スループットに深刻な影響を与える。単一ストール領域のソリューションは、最も簡単であるが、性能を非常に低下させる。
【００１８】
次に、図２に関して本発明の一実施形態を説明することにする。この実施形態では、プロセッサは、パイプラインのオペレーションを混乱させることなく、時に非同期な実行を可能にすることができる。
【００１９】
図３では、ハードワイヤ化されているプロセッサの同期パイプラインが、参照符号１０によって包括的に表されている。この図には、パイプライン１０の１つのセクションのみが示されている。これは、プロデューサプロセッサｐ１及びコンシューマプロセッサｐ２を示している。パイプラインコントローラ１１も示されている。また、ＩＰＢ１２も示され、加えて、本発明のこの実施形態では、さらなるプロセッサ間素子１３も示されている。パイプラインコントローラ１１は、プロセッサｐ１及びｐ２と通信することができ、また、さらなるプロセッサ間素子１３とも通信することができる。複数のプロセッサが存在する実際の実施態様では、パイプラインの各プロデューサ／コンシューマのペアの間にさらなるプロセッサ間素子１３が含まれることになり、パイプラインコントローラは、各プロデューサ／コンシューマのペアに加えて追加のプロセッサ間素子も制御することに留意されたい。
【００２０】
この実施形態において、この例ではパイプラインコントローラ１１である制御手段は、プロデューサプロセッサｐ１及びコンシューマプロセッサｐ２のペアを制御して、それらのプロセッサが依存関係を壊すことなく非同期で動作することを可能にするように構成されている。パイプラインコントローラ１１は、プロデューサ／コンシューマのペアの依存関係を監視し、多くの動作状況において非同期オペレーションを可能にする。或る動作状況は、コンシューマプロセッサが、プロデューサプロセッサよりも同期進みで実行され、プロデューサプロセッサによって実行されているタスクよりも古いタスクを実行している状態を含む。
【００２１】
別の動作状態は、プロデューサプロセッサがコンシューマプロセッサよりも同期進みで実行されている状態を含み、プロデューサプロセッサは、プロデューサプロセッサによって実行されているタスクよりも古いタスクを実行している。
【００２２】
さらなるプロセッサ間素子１３は、この実施形態では、バッファであり、これは、プロデューサプロセッサがコンシューマプロセッサよりも同期進みで実行されている時のデータ転送のさらなるバッファリング遅延を実施するように構成されている。
【００２３】
パイプラインコントローラは、実際には、タイトにスケジューリングされている同期パイプラインの柔軟なパイプラインコントローラとして動作する。或るプロセッサがストールを得ても、いくつかの状況下では、他のプロセッサが実行されることが可能になる。これは、時にプロセッサを非同期にする可能性があるが、本発明者らは、それでも、正確な実行を有する。この手法は、パイプラインが被らなければならない全体の遅延を削減し、したがって、単一ストール領域のソリューションを上回る性能改善を提供する。
【００２４】
非同期実行
本発明者らは、まず、本発明者らがプロセッサの非同期実行をいつ、どのように可能にするかを説明する。この実施形態では、依存関係は、いかなるプロデューサ／コンシューマのペアについても壊されず、これによって、さらに、システム全体の正確さが促進される。
【００２５】
コンシューマｃ（図３のｐ２）が、プロデューサｐ（図３のｐ１）よりも同期進みで実行される場合、コンシューマｃは、まだ書き込まれていないＩＰＢ値を読み出す場合がある。しかしながら、ｃがｐのタスクよりも古いタスクを実行している場合、ｐは、ｃが必要とするすべての値をすでに生成していることになる。したがって、ｃは、ｐのストールを無視することができ、同期進みで進むことができる。次に、ｐがｃよりも同期進みで実行される場合、ｐは、まだ読み出されていないＩＰＢ値を上書きする場合がある。しかしながら、ｐがｃのタスクよりも古いタスクを実行している場合、ｐは、（ｃがタスクを完了すると）ＩＰＢへの書き込みをそれ以上生成しない。したがって、ｐは、ｃのストールを無視することができ、同期進みで進むことができる。プロセッサｐ１がｐ２よりも古いタスクを実行していることは、ｐ１がｐ２に依存していないことを暗に意味する。依存関係（ｐ１，ｐ２）（dep(p1, p2)）は、その値が、ｐ１がこの時点においてｐ２に依存しているか否かを指定するブール変数である。
【００２６】
プロデューサｐがコンシューマｃのタスクよりも古いタスクを実行することは、正当ではあるが、稀である。ｐがｃよりも同期進みで実行される機会をより多く設けるために、本発明者らは以下のことを提案する。プロデューサとＩＰＢ１２との間において、本発明者らは、或る特別なバッファ、すなわちＥＢ１３を設ける。ＥＢ１３が一杯でない場合、ｐがｃよりも同期進みで実行されることを可能にすることができる。ｐがｃよりも同期進みである場合の書き込みはＥＢに与えられ、したがって、読み出し前のＩＰＢデータの上書きが回避される。ＥＢ１３のデータは、適切な時にＩＰＢ１２に移動し、コンシューマは、常にＩＰＢ１２から読み出しを行う。
【００２７】
プロセッサストールの信号伝達
パイプラインコントローラ１１は、実行するのが安全でない時にプロセッサをストールする。パイプラインコントローラ１１は、あらゆるプロデューサ／コンシューマのペアの間のランタイム相対時間距離と、コンシューマのプロデューサに対する変化する依存関係及びその逆と、ＥＢ状態（一杯又は一杯でない）とに関する情報を有する。この情報を使用して、パイプラインコントローラ１１は、ストール信号をプロセッサへ発行する。
ストール（Ｐ）=自己ストール（Ｐ）OR（すべてのプロデューサｉについてＰへの供給ＯＲ（プロデューサｉによるストール（Ｐ）））OR（すべてのコンシューマｊについてＰからの読み出しOR（コンシューマｊによるストール（Ｐ）））OR（タスク完了（Ｐ）&!起動（Ｐ））
【００２８】
Ｐは、自身のオペレーションによってストールすることもあるし、Ｐのプロデューサ又はコンシューマにより誘発されてストールすることもある。Ｐの現在のタスクが完了し（レベルであるタスク完了信号によって示される）、且つ、起動（パルス入力信号）がＰに発行されない場合に、Ｐはストールしなければならない。
コンシューマｊによるストール（Ｐ）=依存関係（Ｐ，ｊ）&同期進み（Ｐ，ｊ）&ＰからｊへのＥＢが一杯（P_to_j_eb_full）
プロデューサｉによるストール（Ｐ）=依存関係（Ｐ，ｉ）&同期進み（Ｐ，ｉ）
【００２９】
相対時間距離の維持及びＭＩＴＩの順守（honoring）
パイプラインコントローラ１１は、ランタイムにおいて、あらゆるプロデューサ（ｐ）／コンシューマｃのペアの間の相対時間距離ｒを維持する。ｒの計算は示す通りである（注：それらはｉｆ条件であって、ｅｌｓｅｉｆ条件ではない）。
if（ストール（ｐ））ｒ--;if（ストール（ｃ））ｒ++;if（終了（ｐ））ｒ+=ａ（ｐ）;if（終了（ｃ））ｒ-=ａ（ｃ）;
【００３０】
ｒをａ（ｐ）だけインクリメントすること、及び、ｒをａ（ｃ）だけディクリメントすることは説明を要する。ＭＩＴＩを順守することは、プロセッサが、依存関係を壊すことなくあらゆるタスクを確実に実行するようにすることである。本発明者らのソリューションは、ＭＩＴＩを保証するいかなる明示的な制御をも有しない。本発明者らは、ｒを操作することによってこれを達成し、ストール回路部は、安全になるまでプロセッサをストールする。ａ（Ｐ）＝ＭＩＴＩ−実行時間（Ｐ）は、プロセッサＰが、ＭＩＴＩを順守するためにタスク間でアイドル状態でなければならないサイクル数を表す。ｒをａ（ｐ）だけインクリメントすることによって、同期進み（ｐ，ｃ）が信号で伝達され、したがって、安全になるまでｐはストールされる。ｒをａ（ｃ）だけディクリメントすることによって、同期進み（ｃ，ｐ）が信号で伝達され、したがって、安全になるまでｃはストールされる。
【００３１】
プロセッサの起動及びパイプラインの準備
ここで、本発明者らは、プロセッサを起動する方法、及び、パイプラインが次のタスクを受け付ける準備ができていることを信号で伝達する方法を説明する。プロセッサにおけるタスクの起動及び終了はイベントを表すものとする。スケジュールから、プロセッサにおける起動イベント及び終了イベントの次第に増加する順序を得ることができる。イベント時刻の非減少順によるこのようなイベントの順序は、イベント順序（event_order）又はｅｏｒｄｅｒとして知られている。本発明者らは、たとえ非同期の実行を可能にしても、どのタスクの実行もｅｏｒｄｅｒの通りに行われるように制限する。この決定論的な実行によって、単純なトークンパッシングメカニズムを使用してプロセッサを起動することが可能になるだけでなく、（起動イベント及び終了イベントを使用する）単純なロジックがプロセッサ間の依存関係を追跡することも可能になる。
【００３２】
トークンパッシングメカニズムは、タスクごとに＜イベント＞可能トークン（allow_<event> token）を有することによって実施することができる。最初の起動プロセッサは、パイプラインに対する起動コマンドで起動可能トークン（allow_start token）を得る。プロセッサがタスクを終了し、自身のイベントについて＜イベント＞可能トークンを有し、且つ、そのプロセッサのｅｏｒｄｅｒの後続のもの（eorder_successor）がトークンを受け付ける準備ができている場合に、プロセッサはイベント（起動又は終了）を実行することができる。最後の条件は、ｅｏｒｄｅｒの次のイベントを可能にするために渡されたトークンが決して失われないことを保証するものである。起動可能トークンストレージ及び終了可能トークンストレージ（それぞれ１ビット）は、プロセッサごとに存在する。
【００３３】
ｅｏｒｄｅｒの最初の起動プロセッサが起動可能トークンを保持していない場合に、パイプラインが次のタスクを受け付ける準備ができていることは、信号（レベル信号）で伝達される。
【００３４】
起動は、プロセッサ間の所望の時間距離を考慮しないことに留意されたい。パイプラインの準備ができていることの信号による伝達は、ＭＩＴＩを考慮しない。これらは、安全になるまでプロセッサをストールするパイプラインコントローラのストール決定モジュール（前述）によって自動的に処理される。
【００３５】
依存関係の計算
依存関係（ｐ，ｃ）及び依存関係（ｃ，ｐ）は、プロデューサ／コンシューマのペアごとに保持される。ペアの間の依存関係は、多くのタスクのスケジュールを作成し、安定した状態を検査することによって求めることができる。依存関係（ｐ１，ｐ２）は、時に、ｐ１がｐ２のタスクと同じタスク又はｐ２のタスクよりも新しいタスクを実行している時に存在し、ｐ１がｐ２のタスクよりも古いタスクを実行している時は存在しない。実行中、依存関係は、プロセッサにおける起動イベント及び終了イベントを使用して容易に追跡することができる。たとえば、図２において、依存関係（ｐ１，ｐ２）は、起動（ｐ２）において開始し、終了（ｐ１）において終了する。すべてのタイプのプロデューサ／コンシューマのスケジュールについて依存関係決定ロジックを計算することができる。
【００３６】
本発明者らのソリューションは、単一ストール領域と共に存在するフラッシュ問題を解決する。いくつかのプロセッサが、（決して来ることはない）（最後＋１）番目のタスクの起動を待機してストールすると、最後のタスクをまだ実行しているプロセッサも、共通ストール領域によってストールする。最後のタスクは、特別なフラッシュ入力信号及び回路部を使用してフラッシュされる。本発明者らのソリューションは、依存関係変数が偽を示す時に、最後のタスクを自動的に排出又はフラッシュする。
【００３７】
ＥＢコントローラ
ＥＢコントローラは、あらゆるＥＢ１３と共に存在する。ＩＰＢの書き込みは、常にＥＢコントローラを通る。ｐがｃよりも同期進みである場合、ＥＢコントローラはＥＢに書き込みを行う。ｐがｃよりも同期進みでない場合、ＥＢコントローラは、ＩＰＢへデータを通過させる。ＥＢは、タイムスタンプが付けられるデータを有するＦＩＦＯとしてモデル化される。データがＥＢに最初に書き込まれる時、タイムスタンプ＝ｒ（ｐ，ｃ）−ｄ（ｐ，ｃ）である。ここでそれぞれ、ｒはランタイムであり、ｄは指定された相対時間距離である。ＥＢのデータアイテムのタイムスタンプは、コンシューマの非ストールサイクルごとに１つずつ減少される。ＥＢ  ＦＩＦＯの先頭データのタイムスタンプが０になると、そのデータは、コンシューマと同期しており、その先頭はＩＰＢへフラッシュされる。コンシューマは常にＩＰＢから読み出しを行う。
【００３８】
パイプライン性能は、ＥＢ  ＦＩＦＯの深さと共に増加する。一方、本発明者らは、ランダムなストールで１０個のタスクを実行する２つのプロセッサ及び１つのＩＰＢのパイプラインにおいて、ちょうど１のＥＢサイズで２０％〜２５％の改善（単一ストール領域を上回る）を見出した。
【００３９】
次に、本発明の一実施形態に従って制御されるプロデューサ／コンシューマのペアのオペレーションの一例を図４を参照して説明する。
【００４０】
各クロックサイクル２０において、パイプラインコントローラ１１は、図４の概観に示すようなアルゴリズムを実行する。２１において、プロデューサ及びコンシューマ（図３のｐ１及びｐ２）が同期しているか否かについての判断が行われる。イエスである場合（Ｙ）、オペレーションは問題がなく、ランタイム相対時間距離更新ステップ２２が実行される。このルーチンは、次のクロックサイクル２０を待つ。
【００４１】
ｐ及びｃが同期していないとの判断がステップ２１で行われた場合（Ｎ）、このルーチンはステップ２３に進む。ステップ２３において、ｃがｐよりも同期進みであるか否かについての判断が行われる。イエスである場合、ステップ２４において、ｃがｐに依存しているか否かについての判断が行われる。依存関係（ｃ，ｐ）は、上述した状態について求められる。すなわち、ｃがｐよりも古いタスクを実行している場合、ｃは、同期進みで実行を継続することができる。すなわち、ｃはｐに依存しない。この場合（Ｎ）、ｃはｐに依存せず、このルーチンの次のステップは、ｃとｐとの間のランタイム相対時間距離を更新することである（ステップ２２）。
【００４２】
一方、ステップ２４において、ｃがｐに依存する（すなわち、ｃは、ｐよりも古いタスクを実行していない）場合、ステップ２５において、ｃは、同期を維持するためにストールされる。次に、ランタイム相対時間距離がステップ２２において調整され、次のクロックサイクル２０が待機される。
【００４３】
ステップ２３において、ｃがｐよりも同期進みでないと判断された場合、ステップ２６において、ｐがｃよりも同期進みで実行されていると仮定され、ｐがｃに依存しているか否かについての判断が行われる。ｐがｃのタスクよりも古いタスクを実行している状況では、ｐはｃに依存せず、そうである場合（Ｎ）、ｐ及びｃはオペレーションを継続することができ、ランタイム相対時間距離２２が更新され、次のクロックサイクル２０が待機される。
【００４４】
一方、ｐがｃに依存する場合（一般にはそうである）、ステップ２７において、ＥＢに空きがあるか否かについての判断が行われる。ＥＢに空きがある場合（Ｙ）、ＥＢには、或るスループットで（at throughput）プロデューサからデータがロードされ、ＥＢは、依存関係を壊すことなく継続することができる。ランタイム相対時間距離２２が更新され、次のクロックサイクル２０が待機される。
【００４５】
ランタイム相対時間距離の調整は、ストール（ｐ）、ストール（ｃ）、終了（ｐ）、及び終了（ｃ）に依存する。終了（ｐ）及び終了（ｃ）において、ＭＩＴＩ要件を保証するために、調整が必要とされる。この理由から、ランタイム相対時間距離調整ブロックが毎サイクル実行される。
【００４６】
一方、ステップ２７において、ＥＢが一杯であると判断された場合、プロセッサｐは、ステップ２８において単独でストールされる。
【００４７】
したがって、パイプラインが動作を継続し、ストールが、図４に関して解説した状況でのみ実施されることが分かる。一方、ストールは、（パイプライン単位ではなく）個々の単位で実施され、その結果、パイプラインは、すべてのプロセスがストールされない限り、全体として動作し続ける。上述したように、システムのオペレーションは、フラッシュを自動的に行わせるので、フラッシュプロセスは必要とされない。
【００４８】
上述した実施形態は、パイプラインにおけるハードワイヤ化されている同期プロセッサに関する。本発明は、ソフトウェアパイプラインにもまったく同様に適用することができ、ハードウェアに限定されるものではない。
【００４９】
当業者に明らかな変更及び変形は、本発明の範囲内にあるとみなされる。
【図面の簡単な説明】
【００５０】
【図１】非プログラマブルプロセッサの従来の同期パイプラインのオペレーションを示す図である。
【図２】非プログラマブルプロセッサの従来の同期パイプラインのオペレーションを示す図である。
【図３】本発明の一実施形態によるパイプライン構成の図である。
【図４】本発明の一実施形態のオペレーションを示すフロー図である。
【符号の説明】
【００５１】
１・・・中間バッファ（プロセッサ間バッファ）
２・・・中間バッファ（プロセッサ間バッファ）
３・・・中間バッファ（プロセッサ間バッファ）
１０・・・パイプライン
１１・・・パイプラインコントローラ
１２・・・中間バッファ（プロセッサ間バッファ）
１３・・・さらなるプロセッサ間素子（特別なバッファ）
【図１】
2008532171.tif 000003
【図２】
2008532171.tif 000004
【図３】
2008532171.tif 000005
【図４】
2008532171.tif 000006
【国際調査報告】
2008532171.tif 000007