(57)【要約】【課題】  従来のデータ駆動プロセッサの利点を維持しつつ逐次処理を効率よく実行することができるデータ処理装置を提供する。【解決手段】  このデータ処理装置は、入力パケット又はプログラムカウンタに基づいて命令メモリからデータ駆動命令又は制御駆動命令をフェッチする命令フェッチ部と、発行された命令をデコードし、制御駆動命令の場合には、更に、レジスタへのアクセス及びデータハザード検出時のレジスタリネーミングを行う命令デコード部と、デコードされた命令を待合せメモリ中に待機させ、発火可能な命令中の一つの命令を選択して発火させる発火制御部と、発火した命令に応じた演算を実行し、演算結果を、データ駆動命令の場合には命令フェッチ部に送出する一方、制御駆動命令の場合には発火制御部にフォワーディングする実行ユニットと、演算結果をレジスタに書込むライトバック部と、を具備する。【選択図】      図３
2005108086.tif 000002
【特許請求の範囲】
【請求項１】
データ駆動プログラムと制御駆動プログラムとを同一パイプライン上で命令単位に多重処理するデータ処理装置であって、パイプライン処理を行うプロセシングエレメントが、
入力パケット又はプログラムカウンタに基づいて命令メモリからデータ駆動命令又は制御駆動命令をフェッチしてパケットとして発行する命令フェッチ部と、
前記命令フェッチ部から発行された命令をデコードするとともに、制御駆動命令の場合には、更に、レジスタへのアクセス及びデータハザード検出時のレジスタリネーミングを行った後、デコードされた命令をパケットとして出力する命令デコード部と、
前記命令デコード部によってデコードされた命令を待合せメモリ中に待機させ、発火可能な命令中の一つの命令を選択しパケットとして出力することにより、命令を発火させる制御を行う発火制御部と、
前記発火制御部によって発火せしめられた命令に応じた演算を実行し、演算結果をパケットとして、データ駆動命令の場合には前記命令フェッチ部に送出し、制御駆動命令の場合には前記発火制御部にフォワーディングする実行ユニットと、
前記実行ユニットによって実行された制御駆動命令の演算結果を関連するレジスタに書込むライトバック部と、
を具備するデータ処理装置。
【請求項２】
複数のプロセシングエレメントが設けられ、前記実行ユニットの出力パケットが第一パケット転送スイッチを介して一つのプロセシングエレメント内の命令フェッチ部に転送される、請求項１に記載のデータ処理装置。
【請求項３】
前記発火制御部と前記実行ユニットとの組が複数個設けられ、前記命令デコード部の出力パケットが第二パケット転送スイッチを介して当該命令に適した実行ユニットに対応する発火制御部に転送される、請求項１に記載のデータ処理装置。
【請求項４】
前記命令フェッチ部は、データ駆動命令と制御駆動命令とが同時にフェッチ可能な場合に、データ駆動命令を優先してフェッチする、請求項１に記載のデータ処理装置。
【請求項５】
前記命令フェッチ部は、連続してフェッチされたデータ駆動命令の数が設定値を超えた場合に、制御駆動命令を優先してフェッチする、請求項４に記載のデータ処理装置。
【請求項６】
前記命令デコード部は、入力された命令に対し、該待合せメモリに当該命令を格納するための領域を確保する処理を行う、請求項１に記載のデータ処理装置。
【請求項７】
前記命令デコード部は、制御駆動命令の場合、デスティネーションレジスタに対して書込み予約を行う、請求項１に記載のデータ処理装置。
【請求項８】
前記発火制御部は、データ駆動命令の場合、入力パケット中のカラー及び命令番号に基づいて発火可能な状態を検出する一方、制御駆動命令の場合、前記実行ユニットからフォワーディングされるパケット中のリネーミング後レジスタ名に基づいてソースオペランド値の到着を検出することにより発火可能な状態を検出する、請求項１に記載のデータ処理装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、データ駆動（data-driven）プログラムと制御駆動（control-driven）プログラムとを同一パイプライン上で命令単位に多重処理するデータ処理装置（data processor）に関する。
【背景技術】
【０００２】
データ駆動プロセッサ(data-driven processor)では、データ依存関係に基づき命令の発行（issue）及び実行（execution）が行われる。すなわち、任意の命令は、そのソースオペランドを生成する命令から演算結果を受け渡された時点で発行される。そして、演算に必要なソースオペランドが全て揃った時点でその命令は発火され、演算が行われる。また、動的データ駆動原理に基づき、実行中のプログラムごとに一意な識別子（カラー）を付与することによって、文脈切替えのオーバヘッドのない多重処理を命令単位で可能にしている。本明細書では、カラーによって識別される、個々の実行中のプログラムをプロセスと呼ぶ。本明細書でのデータ駆動プロセッサとは、動的データ駆動原理に基づくアーキテクチャを採用するプロセッサを指すものとする。
【０００３】
データ駆動プロセッサは、図１に示す通り、複数のプロセシングエレメント（Processing Element；ＰＥ）と、ＰＥ間を結合するパケット転送スイッチ（Switch；ＳＷ）とからなる。データ駆動プロセッサの一つのＰＥは、発火制御部（Firing Control；ＦＣ）、実行ユニット（Execution Unit；ＥＸ）及びプログラム記憶部（Program Storage；ＰＳ）の３つの機能ブロックからなる。それぞれの機能ブロックは、複数のパイプラインステージに細分化可能である。なお、発火制御部（ＦＣ）には待合せメモリ（Matching Memory；ＭＭ）が接続され、また、プログラム記憶部（ＰＳ）には命令メモリ（Instruction Memory；ＩＭ）が接続される。さらに、実行ユニット（ＥＸ）には、データメモリ（Data Memory；ＤＭ）が接続される。このパイプライン上を各命令がパケットとして循環することでプログラムが実行される。このため、図１に示されるパイプラインは、循環パイプラインと呼ばれる。
【０００４】
まず、パケット転送スイッチ（ＳＷ）を経て、パケットがＰＥに入力される。このとき、パケットは、カラー、演算コード、オペランド、及びプログラム中の命令を一意に識別する命令番号から構成される。発火制御部（ＦＣ）は、入力パケットの命令番号及びカラーをキーとして待合わせメモリ（ＭＭ）を参照し、発火検出、すなわち、命令実行に必要なオペランドが全て揃ったか否かを判定する。発火不成立の場合には、当該パケットのオペランドが待合わせメモリ（ＭＭ）に格納される。一方、発火成立の場合には、オペランド対を保持するパケットが生成されて、実行ユニット（ＥＸ）に転送される。
【０００５】
実行ユニット（ＥＸ）では、演算コードに基づき命令が実行される。次に、プログラム記憶部（ＰＳ）では、現在の命令番号をアドレスとして、演算結果を消費する命令の命令番号及び演算コードを命令メモリ（ＩＭ）からフェッチする。プログラム記憶部（ＰＳ）から出力されたパケットは、パケット転送スイッチ（ＳＷ）を経て、フェッチされた命令を実行すべきＰＥに転送される。
【０００６】
データ駆動プロセッサは、問題に内在する多様な粒度の並列性を自然に抽出することができ、またオーバヘッドなく多重処理することができるなどの利点を有する。
【０００７】
図１に示したデータ駆動プロセッサでは、任意の命令は、そのソースオペランドを生成する命令の実行が完了して初めて発行される。このため、データ依存関係のある命令をパイプライン処理することができない。ゆえに、データ依存関係のある命令が実行されるまでに、循環パイプライン一周分の遅延が生じる。循環パイプラインの段数をＮとし、プログラムの並列度をｃとすると、そのＣＰＩ（Cycle Per Instruction）は、ｍａｘ（１，Ｎ／ｃ）になる。このため、問題の並列度がシステム中のパイプライン段数より少ない場合、パイプラインの処理効率が低下する。
【０００８】
このように、従来のデータ駆動プロセッサでは、任意の命令は、そのソースオペランドを生成する命令の実行が完了するまで発行されないため、データ依存関係にある命令が実行されるまでにパイプラインの段数分の遅延が生じ、その結果、プログラム中の逐次処理部がボトルネックとなっている。
【０００９】
従来、データ駆動に制御駆動を導入して逐次処理の性能を向上する試みがなされてきた。強連結枝モデルでは、強連結ブロックと呼ばれる部分プログラムの全ての入力が揃った時点で、パイプラインを占有してその強連結ブロックを実行する。強連結ブロック外の命令の実行を除外するため、命令の先行制御が容易となる。更に、強連結ブロック内のトークンを格納するためのレジスタが利用可能となるため、演算結果のコピーや待合せオーバヘッドを削減することができる。その一方で、従来のデータ駆動プロセッサが有する、命令単位の多重処理による遅延の隠蔽、及び個々のプロセスの応答性の維持という利点が阻害される。
【発明の開示】
【発明が解決しようとする課題】
【００１０】
本発明は、上述した問題点に鑑みてなされたものであり、その目的は、従来のデータ駆動プロセッサの利点を維持しつつ逐次処理を効率よく実行することができるデータ処理装置を提供することにある。
【課題を解決するための手段】
【００１１】
上記目的を達成するために、本発明の第一の面（aspect）によれば、データ駆動プログラムと制御駆動プログラムとを同一パイプライン上で命令単位に多重処理するデータ処理装置であって、パイプライン処理を行うプロセシングエレメントが、入力パケット又はプログラムカウンタに基づいて命令メモリからデータ駆動命令又は制御駆動命令をフェッチしてパケットとして発行する命令フェッチ部と、前記命令フェッチ部から発行された命令をデコードするとともに、制御駆動命令の場合には、更に、レジスタへのアクセス及びデータハザード検出時のレジスタリネーミングを行った後、デコードされた命令をパケットとして出力する命令デコード部と、前記命令デコード部によってデコードされた命令を待合せメモリ中に待機させ、発火可能な命令中の一つの命令を選択しパケットとして出力することにより、命令を発火させる制御を行う発火制御部と、前記発火制御部によって発火せしめられた命令に応じた演算を実行し、演算結果をパケットとして、データ駆動命令の場合には前記命令フェッチ部に送出し、制御駆動命令の場合には前記発火制御部にフォワーディングする実行ユニットと、前記実行ユニットによって実行された制御駆動命令の演算結果を関連するレジスタに書込むライトバック部と、を具備するデータ処理装置が提供される。
【００１２】
また、本発明の第二の面によれば、前記第一の面によるデータ処理装置において、複数のプロセシングエレメントが設けられ、前記実行ユニットの出力パケットが第一パケット転送スイッチを介して一つのプロセシングエレメント内の命令フェッチ部に転送される。
【００１３】
また、本発明の第三の面によれば、前記第一の面によるデータ処理装置において、前記発火制御部と前記実行ユニットとの組が複数個設けられ、前記命令デコード部の出力パケットが第二パケット転送スイッチを介して当該命令に適した実行ユニットに対応する発火制御部に転送される。
【００１４】
また、本発明の第四の面によれば、前記第一の面によるデータ処理装置において、前記命令フェッチ部は、データ駆動命令と制御駆動命令とが同時にフェッチ可能な場合に、データ駆動命令を優先してフェッチする。
【００１５】
また、本発明の第五の面によれば、前記第四の面によるデータ処理装置において、前記命令フェッチ部は、連続してフェッチされたデータ駆動命令の数が設定値を超えた場合に、制御駆動命令を優先してフェッチする。
【００１６】
また、本発明の第六の面によれば、前記第一の面によるデータ処理装置において、前記命令デコード部は、入力された命令に対し、該待合せメモリに当該命令を格納するための領域を確保する処理を行う。
【００１７】
また、本発明の第七の面によれば、前記第一の面によるデータ処理装置において、前記命令デコード部は、制御駆動命令の場合、デスティネーションレジスタに対して書込み予約を行う。
【００１８】
また、本発明の第八の面によれば、前記第一の面によるデータ処理装置において、前記発火制御部は、データ駆動命令の場合、入力パケット中のカラー及び命令番号に基づいて発火可能な状態を検出する一方、制御駆動命令の場合、前記実行ユニットからフォワーディングされるパケット中のリネーミング後レジスタ名に基づいてソースオペランド値の到着を検出することにより発火可能な状態を検出する。
【発明の効果】
【００１９】
本発明によるデータ処理装置は、データ依存関係に基づき命令発行されるデータ駆動プログラムと、プログラムカウンタに基づき逐次的に命令発行される制御駆動プログラムとを同一パイプライン上で命令単位に多重処理する。本発明によれば、データ駆動プログラムによる並列処理の有効性の確保、制御駆動プログラムの導入による逐次処理の効率向上、及びデータ駆動プログラムと制御駆動プログラムとの多重処理時におけるパイプラインの公平な共有化を図ることができる。
【発明を実施するための最良の形態】
【００２０】
本発明によるデータ処理装置は、データ駆動プログラムと制御駆動プログラムとを同一パイプライン上で命令単位に多重処理する。そのため、プログラムは、図２に示されるように、処理対象の並列化が可能な箇所については従来通りデータ駆動プログラムにより表現する一方、並列化が困難な逐次処理部については命令を逐次的に並べた制御駆動プログラムにより表現することによって、作成される。データ駆動プログラムの命令（データ駆動命令）は、図１に示したデータ駆動プロセッサと同様に、データ依存関係に基づき発行される。一方、制御駆動プログラムの命令（制御駆動命令）はプログラムカウンタ（Program Counter；ＰＣ）に基づき逐次的に発行される。本発明によるデータ処理装置においては、このように異なる駆動原理に基づき発行されるデータ駆動プログラム及び制御駆動プログラムの各命令が、パイプラインを共有し、相互に干渉することなく実行される。
【００２１】
本発明は、逐次処理部を制御駆動プログラムとして表現することによって、計算の局所性を活用可能としている。まず、ＰＣに基づく命令発行によって、データ依存関係がある命令を連続的に発行することができる。このため、更に演算結果のフォワーディング（forwarding）を併用することによって、依存関係のある命令をパイプライン処理することが可能になる。命令の先行制御（advanced control）と比較すると、命令発行のスループットが向上するため、データ依存関係があってもパイプライン処理することができる命令の数が増加する。次に、レジスタを用いることが可能となるため、データ駆動プログラムに特有な演算結果のコピーや分岐時のデータ流制御のオーバヘッドを削減することができる。
【００２２】
以上から、制御駆動プログラムの導入によって、逐次処理の効率が従来のデータ駆動プロセッサより大幅に向上する。本発明によるデータ処理装置は、並列処理部と逐次処理部とが異なる駆動原理に基づき実行されるという点で強連結枝モデルと共通する。しかし、従来法は、別個のパイプラインを持つ手法が主であり、これに対し本発明は、データ駆動プログラムと制御駆動プログラムが命令単位で多重処理されるため、チップ上の資源を共有できる、各プロセスのスケジューリングが公平に行える、如何なる要求に対しても即時にプロセスを起動することが可能である、といった利点が有る。以下、本明細書では、実行中のデータ駆動プログラムをデータ駆動プロセス、実行中の制御駆動プログラムを制御駆動プロセスとそれぞれ呼称する。
【００２３】
また、本発明では、データ駆動プロセスと制御駆動プロセスとの間の資源分配が重要となる。データ駆動プロセスは、処理対象の並列度の分のみパイプラインステージを占有する。一方、制御駆動プロセスは、処理対象の並列度に関わらずパイプラインを占有していく。したがって、データ駆動プロセスの並列度がパイプライン長より小さいならば、データ駆動プロセスの実行時に生じる空き資源を制御駆動プロセスに割当てる。一方、データ駆動プロセスの並列度がパイプライン長以上である場合には、制御駆動プロセスが飢餓（starvation）状態に陥ることを防ぐため制御駆動プロセスに一定の比率で資源を割当てる。本実施形態では、この比率を１／（パイプライン長＋１）としている。
【００２４】
本発明によるデータ処理装置は、データ駆動プログラムと制御駆動プログラムとを命令単位で多重処理するため、制御駆動プログラムのデータハザードを静的なコードスケジューリングで解消することは困難である。更に制御駆動プログラムの実行時に複数命令を同時発行することを考慮し、本実施形態では、データ駆動プロセッサの発火制御部を、スーパスカラプロセッサで広く用いられるリザベーションステーションとしても利用可能なように拡張したアーキテクチャを採用する。
【００２５】
図３は、本発明によるデータ処理装置の一実施形態を示すブロック図であって、本発明に係るアーキテクチャのパイプラインの基本構成を示すものである。この図に示されるように、本実施形態に係るデータ処理装置は、複数のプロセシングエレメント（Processing Element；ＰＥ）１０と、それらを接続する第一パケット転送スイッチ（ＳＷ１）８０とを具備する。
【００２６】
そして、各ＰＥ１０は、６種の機能ブロック、すなわち、命令フェッチ部（Instruction Fetch；ＩＦ）１００、命令デコード部（Instruction Decode；ＩＤ）２００、第二パケット転送スイッチ（ＳＷ２）３００、発火制御部（Firing Control；ＦＣ）４００、実行ユニット（Execution Unit；ＥＸ）５００、及びライトバック部（Write Back；ＷＢ）６００を備える。本実施形態においては、発火制御部（ＦＣ）４００と実行ユニット（ＥＸ）５００との組が複数個設けられ、命令デコード部（ＩＤ）２００の出力パケットが第二パケット転送スイッチ（ＳＷ２）３００を介して当該パケット中の命令（演算）に適した実行ユニット（ＥＸ）５００に対応する発火制御部（ＦＣ）４００に転送されるように構成されている。
【００２７】
なお、命令フェッチ部（ＩＦ）１００には命令メモリ（Instruction Memory；ＩＭ）１８０が接続され、命令デコード部（ＩＤ）２００にはレジスタ群（ＲＥＧ）２８０が接続され、また、発火制御部（ＦＣ）４００には待合せメモリ（Matching Memory；ＭＭ）４８０が接続されている。さらに、実行ユニット（ＥＸ）５００には、データメモリ（図示せず）が接続される場合がある。
【００２８】
後述するように、制御駆動プログラムの実行時に命令デコード部（ＩＤ）２００でデータハザードが検出された場合、レジスタリネーミング（register renaming）が行われ、実行ユニット（ＥＸ）５００からソースオペランドを生成する命令の演算結果がフォワーディングされるまで、当該命令は発火制御部（ＦＣ）４００（詳細には、ＦＣに接続されたＭＭ４８０）で待機する。
【００２９】
図１に示されるデータ駆動プロセッサと比較し、本実施形態で新たに追加される主なハードウェアは、レジスタ群（ＲＥＧ）２８０と、実行ユニット（ＥＸ）５００から発火制御部（ＦＣ）４００（すなわちＭＭ４８０）に演算結果をフォワーディングするパスとである。その他の多くのハードウェアは、データ駆動プロセスと制御駆動プロセスとの間で共通に用いられる。以下、本明細書では、データ駆動プロセスに属するパケットをデータ駆動パケットと、制御駆動プロセスに属するパケットを制御駆動パケットと、それぞれ呼称する。また、本実施形態では、一個のＰＥにつき制御駆動プロセスを同時に一つまで実行可能である。異なるＰＥで実行される制御駆動プロセス間のデータ転送は、制御駆動プログラムの命令としてデータ駆動パケット生成命令を用意しデータをデータ駆動パケットとして送信する。または、異なるＰＥ間でメモリを共有することによって行う。以下、各機能ブロックの構成及び基本動作について説明する。
【００３０】
まず、命令フェッチ部（ＩＦ）１００の概略構成及び基本動作について説明する。ＩＦは、命令メモリ（ＩＭ）１８０から命令をフェッチし、その命令を命令デコード部（ＩＤ）２００に対して発行する。図４に命令の基本形式を示す。データ駆動プログラムの命令は、基本的に、図４（Ａ）に示されるように、制御駆動プログラムか否かを示す制御駆動フラグ（Control-driven Flag）ＣＦ（＝０）、当該命令の演算コード（Operation Code）ＯＰＣ、当該命令とデータ依存関係にある命令を指す次命令番号（Next Instruction Number）ＮＩＮＯ、及び当該命令の演算結果が次命令において左オペランド（第一オペランド）となるか又は右オペランド（第二オペランド）となるかを示す次ポートフラグＮＬ／Ｒである。一方、制御駆動プログラムの命令は、基本的に、図４（Ｂ）に示されるように、制御駆動フラグＣＦ（＝１）、演算コードＯＰＣ、デスティネーションレジスタＲＤ、第一ソースレジスタＲＳ０、及び第二ソースレジスタＲＳ１からなる。
【００３１】
命令フェッチ部（ＩＦ）１００の概略構成が図５に示される。最初に、データ駆動命令の場合の基本動作について説明する。例えば、図６に示されるデータフローグラフのノードＡに係る命令が、ある実行ユニット（ＥＸ）５００で実行されて、その演算結果Ｄ０がデータ駆動パケットに格納されて第一パケット転送スイッチ（ＳＷ１）８０に送られるものとする。
【００３２】
その場合に実行ユニット（ＥＸ）５００によって出力されるデータ駆動パケットは、図７（Ｄ）に示されるように、カラーＣＯＬＯＲ、次命令番号ＮＩＮＯ、次ポートフラグＮＬ／Ｒ、及び演算結果ＤＡＴＡを収容する。図６におけるノードＡの演算結果Ｄ０をＤＡＴＡとして含むパケットは、ＮＩＮＯとして、演算結果Ｄ０が入力されるノードＢに対応する命令番号を保持し、ＮＬ／Ｒとして、演算結果Ｄ０が入力されるポートＬに対応する値を保持する。なお、本実施形態においては、命令番号は、ＰＥ番号及びノード番号で構成され、そのため、第一パケット転送スイッチ（ＳＷ１）８０は、実行ユニット（ＥＸ）５００からの出力パケット中のＰＥ番号に基づいて、対応するＰＥ１０に当該パケットを転送する。
【００３３】
実行ユニット（ＥＸ）５００からデータ駆動パケットを受信したＰＥ１０内の命令フェッチ部（ＩＦ）１００は、そのパケット中の次命令番号ＮＩＮＯ（詳細には、次命令番号ＮＩＮＯ中のノード番号）をアドレスとして、アドレス選択回路１１０を介して命令メモリ（ＩＭ）１８０を参照し、図４（Ａ）に示されるデータ駆動命令をフェッチし、データ駆動パケットを形成して、後段の命令デコード部（ＩＤ）２００に送る。
【００３４】
命令フェッチ部（ＩＦ）１００によって出力されるデータ駆動パケットは、図７（Ａ）に示されるように、制御駆動フラグＣＦ（＝０）、カラーＣＯＬＯＲ、命令番号ＩＮＯ、ポートフラグＬ／Ｒ、演算コードＯＰＣ、オペランド値ＤＡＴＡ、次命令番号ＮＩＮＯ、及び次ポートフラグＮＬ／Ｒを収容する。例えば、図６中のデータＤ０に対して命令フェッチ部（ＩＦ）１００が出力するデータ駆動パケットにおいては、ＩＮＯ、Ｌ／Ｒ及びＯＰＣはノードＢに関するものとなり、ＮＩＮＯ及びＮＬ／ＲはノードＣに関するものとなる。すなわち、ＩＦに入力されたパケットにおけるＮＩＮＯ及びＮＬ／Ｒの内容は、ＩＦの出力パケットにおけるＩＮＯ及びＬ／Ｒに引き継がれる。
【００３５】
一方、制御駆動命令の場合、命令フェッチ部（ＩＦ）１００は、プログラムカウンタ（ＰＣ）１２０の値をアドレスとして、アドレス選択回路１１０を介して命令メモリ（ＩＭ）１８０を参照し、図４（Ｂ）に示される制御駆動命令をフェッチし、制御駆動パケットを形成して、後段の命令デコード部（ＩＤ）２００に送る。命令フェッチ部（ＩＦ）１００によって出力される制御駆動パケットは、図８（Ａ）に示されるように、制御駆動フラグＣＦ（＝１）、演算コードＯＰＣ、デスティネーションレジスタＲＤ、第一ソースレジスタＲＳ０、及び第二ソースレジスタＲＳ１を収容する。
【００３６】
命令フェッチ部（ＩＦ）１００は、データ駆動命令と制御駆動命令とを同時にフェッチ可能な場合に、アドレス選択回路１１０により一方の命令を選択してフェッチするが、並列処理性能に優れるデータ駆動プログラムの利点を維持するため、原則として、データ駆動命令を優先してフェッチする。ただし、制御駆動命令の最低発行頻度を保証するため、連続してフェッチされたデータ駆動命令の数が設定値を超えた場合に、制御駆動命令を優先してフェッチする。
【００３７】
すなわち、データ駆動プロセスと制御駆動プロセスとの間の資源共有を実現するため、命令フェッチ部（ＩＦ）１００は、連続発行されたデータ駆動プロセスの命令数を記録するカウンタ（図示せず）を備える。このカウンタは、データ駆動プロセスの命令を発行する毎にインクリメントされ、制御駆動プロセスの命令を発行するとリセットされる。ＩＦは、カウンタの値がパイプライン長より小さい場合は、データ駆動プロセスの命令を優先的に発行する。すなわち、ＩＦに入力パケットが到着している場合はデータ駆動プロセスの命令をＩＤに発行する。ＩＦへの入力パケットが存在せず、かつ実行中の制御駆動プロセスが存在する場合のみ、制御駆動プロセスの命令をＰＣに基づき発行する。これにより、データ駆動プロセスの実行時に生じる空き資源が制御駆動プロセスに自然に割当てられる。一方、カウンタ値がパイプライン長以上となった場合は、データ駆動プロセスの並列度がパイプライン長以上であることを示す。したがって、この場合には、制御駆動プロセスの命令を優先的に発行する。これにより、制御駆動プロセスの命令は、最低でも“パイプライン長＋１”サイクルに１回発行されることが保証される。
【００３８】
制御駆動プロセスの起動は、データ駆動プロセスから専用の起動パケットを発行することによって行われる。このとき、起動パケットは、実行すべき制御駆動プログラムの先頭の命令アドレス（次命令番号ＮＩＮＯ）と、制御駆動プログラムへ受け渡す引数を１語保持している。データ駆動プロセスから制御駆動プロセスに受け渡すデータが２語以上存在する場合は、互いのプロセスはメモリを共有しているため、起動パケット中の引数としてアドレスを与え、メモリ経由でデータを受け渡す。
【００３９】
制御駆動プロセスの起動パケットがＩＦに到着すると、実行中の制御駆動プロセスが存在するか否かに応じて以下のように動作する。実行中の制御駆動プロセスが存在しない場合には、到着した起動命令が指し示す制御駆動プログラムの実行を開始する。すなわち、起動パケット中の次命令番号ＮＩＮＯに従って制御駆動命令をフェッチし、制御駆動パケットをＩＤに送信する。同時にプログラムカウンタ（ＰＣ）を次に発行すべき命令のアドレスに更新する。一方、実行中の制御駆動プロセスが既に存在する場合には、新しく起動された制御駆動プロセスは実行待ち状態に入る。すなわち、当該起動パケットを専用のハードウェアＦＩＦＯ（制御駆動プロセスキュー）１３０に格納する。先に実行されていた制御駆動プロセスの実行が終了すると、制御駆動プロセスキューから起動命令が一つ取り出され、新しい制御駆動プロセスの実行が開始される。
【００４０】
一方、制御駆動プロセスからデータ駆動プロセスにデータを受け渡すため、データ駆動パケットの生成命令が制御駆動プログラムに用意されている。生成されるデータ駆動パケットには、実行すべきデータ駆動プログラムの命令アドレス（次命令番号ＮＩＮＯ）及び、データ駆動プログラムへ受け渡す引数を１語保持する。制御駆動プログラムでは、データ駆動パケットの生成命令を任意の位置で任意の回数、使用することができる。
【００４１】
次に、命令デコード部（ＩＤ）２００の概略構成及び基本動作について説明する。ＩＤは、入力パケット中の演算コードＯＰＣをデコードし、更に待合せメモリ（ＭＭ）４８０に当該命令を格納するための領域を確保する。ここで待ち合わせメモリの領域は、待ち合わせメモリのエントリ毎にそのエントリが使用中か否かを示すフラグ（ＢＵＳＹフラグ）を設けることによって管理される。すなわち、ＩＤは、ＢＵＳＹフラグが有効でないエントリを検出し、そのＢＵＳＹフラグをセットする。このとき、待合わせメモリに確保された領域のアドレスをＭＭＡ（Matching Memory Address）と表記する。また、セットされたＢＵＳＹフラグは、対応するエントリを確保していた命令の実行が完了した時点でリセットされる。
【００４２】
図７（Ａ）に示されるデータ駆動パケットが入力された場合、命令デコード部（ＩＤ）２００は、図７（Ｂ）に示されるデータ駆動パケットを出力する。すなわち、この出力パケットは、制御駆動フラグＣＦ（＝０）、カラーＣＯＬＯＲ、命令番号ＩＮＯ、ポートフラグＬ／Ｒ、デコードされた演算コード（Decoded Operation Code）ＤＯＰＣ、オペランド値ＤＡＴＡ、次命令番号ＮＩＮＯ、次ポートフラグＮＬ／Ｒ、及び当該命令のＭＭＡを収容する。
【００４３】
一方、入力パケットが図８（Ａ）に示される制御駆動パケットの場合、命令デコード部（ＩＤ）２００は、更に、レジスタ群（ＲＥＧ）２８０にアクセスする。制御駆動プログラムのデータハザードを解消するため、リザベーションステーションを用いたスーパスカラプロセッサと同様の、レジスタリネーミングのための機構が各レジスタに設けられている。ここで、レジスタ群の構成が図９に示される。
【００４４】
ソースレジスタにアクセスした際に、有効フラグ（Valid Flag）ＶＦが無効を表す場合には、レジスタの値ＶＡＬＵＥが確定していないことを示す。この場合には、その値の代わりとして、そのレジスタに値を書込もうとしている命令に一意に対応する識別子が読み込まれる。図９に示されるように、本実施形態は、この識別子としてＭＭＡを用いる。そして、発火制御部（ＦＣ）４００は、ＭＭＡをタグとして値がフォワーディングされるまで待合せを行う。ＩＤは、更に、デスティネーションレジスタに対し、書込み予約を行う。すなわち、ＩＤは、まずデスティネーションレジスタのＶＦを無効化し、更に、当該命令のＭＭＡをデスティネーションレジスタに書込む。
【００４５】
かくして、命令デコード部（ＩＤ）２００は、図８（Ａ）に示される制御駆動パケットが入力された場合、図８（Ｂ）に示される制御駆動パケットを出力する。すなわち、この出力パケットは、制御駆動フラグＣＦ（＝１）、デコードされた演算コードＤＯＰＣ、デスティネーションレジスタＲＤ、リネーム後第一ソースレジスタＭＭＡ０又は第一ソースオペランド値ＤＡＴＡ０、リネーム後第二ソースレジスタＭＭＡ１又は第二ソースオペランド値ＤＡＴＡ１、及び当該命令のＭＭＡを収容する。また、出力パケットには、リネーム後第一ソースレジスタＭＭＡ０又は第一ソースオペランド値ＤＡＴＡ０のいずれが収容されているかを示すフラグＦ０と、リネーム後第二ソースレジスタＭＭＡ１又は第二ソースオペランド値ＤＡＴＡ１のいずれが収容されているかを示すフラグＦ１と、が含まれる。
【００４６】
命令デコード部（ＩＤ）２００によって作成されたデータ駆動パケット（図７（Ｂ））又は制御駆動パケット（図８（Ｂ））は、第二パケット転送スイッチ（ＳＷ２）３００に送られる。ＳＷ２は、入力パケット中のデコードされた演算コードＤＯＰＣに基づいて、当該命令に適した実行ユニット（ＥＸ）５００に対応する発火制御部（ＦＣ）４００に入力パケットを転送する。
【００４７】
次に、発火制御部（ＦＣ）４００の概略構成及び基本動作について説明する。ＦＣの概略構成が待合せメモリ（ＭＭ）とともに図１０に示される。ＦＣに送信された命令パケットは、そのソースオペランドが全て揃うまで、待合わせメモリにおいて待機せしめられる。待合わせメモリは、ＣＡＭ（Content Addressable Memory）によって構成され、タグ部とデータ部とからなる。
【００４８】
データ駆動プロセスの場合、各命令のソースオペランドは常にＩＤからパケットとして送信されるため、１パケットの入力に対し同時に発火可能となる命令数は高々１である。従来のデータ駆動プロセッサでは、発火成立後すぐにＥＸにパケットを送出することができるため、待合わせメモリに一つのソースオペランドを格納することができれば十分であった。しかし、制御駆動プロセスの場合には、ＩＤで確定していなかったソースオペランドはＥＸからＦＣにフォワーディングされる。このとき、複数の命令が同一のレジスタを参照している場合、１つの演算結果のフォワーディングによって複数の命令が同時に発火可能となる。このため、本実施形態では、待合わせメモリを、発火可能となった命令のバッファとしても用いる。すなわち、待合わせメモリ中に二つのソースオペランドを格納することができるようにされている。更に命令が発火可能か否かを示すフラグ（Enable Flag；ＥＦ）を設ける。
【００４９】
データ駆動パケット（図７（Ｂ））が入力された際には、まず、待合わせ相手が待合わせメモリ中に存在するか否かをチェックする。すなわち、図１０に示されるように、入力パケット中の制御駆動フラグＣＦ、カラーＣＯＬＯＲ及び命令番号ＩＮＯをキーとして待合わせメモリの各エントリのタグ部を検索する。
【００５０】
待合わせ相手が存在しない場合、すなわち、ＣＦ、ＣＯＬＯＲ及びＩＮＯが一致するエントリが存在しない場合には、ＩＤで確保されたＭＭＡが指し示すアドレスに当該入力パケットを格納し、更に当該エントリのＶＬＦ（Valid Line Flag）を有効にする。なお、入力パケット中のオペランド値ＤＡＴＡは、入力パケットが保持するポートフラグＬ／Ｒに従って、そのエントリ中のＤＡＴＡ０又はＤＡＴＡ１として格納され、ＶＦ０（Valid Flag 0）又はＶＦ１（Valid Flag 1）が有効にされる。待合わせ相手が存在する場合、すなわち、ＣＦ、ＣＯＬＯＲ及びＩＮＯが一致するエントリが存在する場合は、ポートフラグＬ／Ｒに従って、そのエントリのＶＦ０及びＤＡＴＡ０、又はＶＦ１及びＤＡＴＡ１が更新され、更に、ＥＦが有効にされる。
【００５１】
制御駆動パケット（図８（Ｂ））が入力された場合において、ソースオペランドが揃っていないとき、すなわち、入力パケット中のフラグＦ０又はＦ１の少なくとも一方が０のときには、ＩＤで確保されたＭＭＡが指し示すアドレスに当該パケットを格納し、更にＶＬＦ（Valid Line Flag）を有効にする。そして、後述するように、ソースオペランドを生成する命令の演算結果が実行ユニット（ＥＸ）５００からフォワーディングされるまで待合せが行われる。
【００５２】
演算結果がＥＸからフォワーディングされると、図１０に示されるように、制御駆動フラグＣＦとその演算結果を生成した命令のＭＭＡとをキーとして、待合わせメモリの各エントリのタグ部を検索する。そして、入力されたＣＦ及びＭＭＡと、タグ部のＣＦ及びＭＭＡ０又はＭＭＡ１と、が一致するエントリを検出する。ここで、ＭＭＡ０はソースレジスタＲＳ０を書込み予約している命令のＭＭＡであり、ＭＭＡ１はソースレジスタＲＳ１を書込み予約している命令のＭＭＡである。ＭＭＡ０と一致した場合は、エントリのＶＦ０を更新し、更に、フォワーディングされた演算結果でオペランド値ＤＡＴＡ０を更新する。同様に、ＭＭＡ１と一致した場合は、ＶＦ１及びＤＡＴＡ１を更新する。ソースオペランドが全て揃った場合は、更にＥＦを有効にする。
【００５３】
制御駆動パケット（図８（Ｂ））が入力された場合において、ソースオペランドが揃っているとき、すなわち、入力パケット中のフラグＦ０及びＦ１の双方がともに１のときには、ＩＤで確保された待合わせメモリのアドレス（ＭＭＡ）に当該入力パケットを格納し、そのアドレス中の命令が有効であることを示すＶＬＦを有効にする。更に、発火可能であることを示すＥＦを有効にする。
【００５４】
各エントリのフラグＥＦは、信号としてセレクタ回路４１０に送られ、その中のプライオリティエンコーダ４１２に基づき、発行許可信号ＧＲＡＮＴ０〜ＧＲＡＮＴｎの中の一つがアクティブにされる。かくして、発行許可された命令が後段の実行ユニット（ＥＸ）５００に送られる。
【００５５】
発火制御部（ＦＣ）４００から出力されるデータ駆動パケットは、図７（Ｃ）に示されるように、制御駆動フラグＣＦ（＝０）、カラーＣＯＬＯＲ、デコードされた演算コードＤＯＰＣ、第一オペランド値ＤＡＴＡ０、第二オペランド値ＤＡＴＡ１、次命令番号ＮＩＮＯ、及び次ポートフラグＮＬ／Ｒを収容する。一方、発火制御部（ＦＣ）４００から出力される制御駆動パケットは、図８（Ｃ）に示されるように、制御駆動フラグＣＦ（＝１）、デコードされた演算コードＤＯＰＣ、デスティネーションレジスタＲＤ、第一オペランド値ＤＡＴＡ０、第二オペランド値ＤＡＴＡ１、及び当該命令のＭＭＡを収容する。
【００５６】
次に、実行ユニット（ＥＸ）５００について説明する。ＥＸは、発火制御部（ＦＣ）４００からデータ駆動パケット（図７（Ｃ））又は制御駆動パケット（図８（Ｃ））を受信し、そのパケット中の第一オペランド値ＤＡＴＡ０及び第二オペランド値ＤＡＴＡ１を使用して、デコード済み演算コードＤＯＰＣで指定された演算を実行する。
【００５７】
入力パケットが図７（Ｃ）に示されるデータ駆動パケットの場合、ＥＸによる演算結果は、第一パケット転送スイッチ（ＳＷ１）８０を介して命令フェッチ部（ＩＦ）１００に、図７（Ｄ）に示されるデータ駆動パケットとして送信される。すなわち、そのパケットは、カラーＣＯＬＯＲ、次命令番号ＮＩＮＯ、次ポートフラグＮＬ／Ｒ、及び演算結果ＤＡＴＡを収容する。
【００５８】
一方、入力パケットが図８（Ｃ）に示される制御駆動パケットの場合、ＥＸによる演算結果は、発火制御部（ＦＣ）４００へとフォワーディングされ、待合せメモリ（ＭＭ）４８０に書込まれる。その制御駆動パケットは、図８（Ｄ）に示されるように、制御駆動フラグＣＦ（＝１）、演算結果ＤＡＴＡ、及びリネーム後レジスタＭＭＡを収容する。更に、図８（Ｅ）に示されるように、制御駆動フラグＣＦ（＝１）、演算結果ＤＡＴＡ、及びデスティネーションレジスタＲＤを保持する制御駆動パケットが、ライトバック部（ＷＢ）６００へと送られる。
【００５９】
ライトバック部（ＷＢ）６００は、図８（Ｅ）に示される制御駆動パケットを受信すると、レジスタ群（ＲＥＧ）２８０にアクセスし、パケット中のＲＤによって指定されるレジスタ（当該命令によって書込み予約されているデスティネーションレジスタ）の値をパケット中のＤＡＴＡを用いて更新するとともに、そのレジスタ内のフラグＶＦを有効にする。
【００６０】
以上、本発明の実施形態について述べてきたが、もちろん本発明はこれに限定されるものではなく、様々な実施形態を採用することが可能である。
【図面の簡単な説明】
【００６１】
【図１】データ駆動プロセッサの基本構成を示す図である。
【図２】データ駆動プログラム及び制御駆動プログラムの例を示す図である。
【図３】本発明によるデータ処理装置の一実施形態を示すブロック図である。
【図４】（Ａ）はデータ駆動命令の基本形式を、（Ｂ）は制御駆動命令の基本形式を、それぞれ示す図である。
【図５】命令フェッチ部（ＩＦ）１００の構成を示すブロック図である。
【図６】データフローグラフを例示する図である。
【図７】（Ａ）、（Ｂ）、（Ｃ）及び（Ｄ）は、それぞれ、命令フェッチ部（ＩＦ）、命令デコード部（ＩＤ）、発火制御部（ＦＣ）及び実行ユニット（ＥＸ）が出力するデータ駆動パケットを示す図である。
【図８】（Ａ）、（Ｂ）及び（Ｃ）は、それぞれ、命令フェッチ部（ＩＦ）、命令デコード部（ＩＤ）及び発火制御部（ＦＣ）が出力する制御駆動パケットを示す図であり、（Ｄ）及び（Ｅ）は、それぞれ、実行ユニット（ＥＸ）から発火制御部（ＦＣ）へ、及び実行ユニット（ＥＸ）からライトバック部（ＷＢ）へ、送られる制御駆動パケットを示す図である。
【図９】レジスタ群（ＲＥＧ）２８０の構成を示す図である。
【図１０】発火制御部（ＦＣ）４００の構成を待合せメモリ（ＭＭ）４８０とともに示すブロック図である。
【符号の説明】
【００６２】
１０…プロセシングエレメント（Processing Element；ＰＥ）
８０…第一パケット転送スイッチ（ＳＷ１）
１００…命令フェッチ部（Instruction Fetch；ＩＦ）
１８０…命令メモリ（Instruction Memory；ＩＭ）
２００…命令デコード部（Instruction Decode；ＩＤ）
２８０…レジスタ群（ＲＥＧ）
３００…第二パケット転送スイッチ（ＳＷ２）
４００…発火制御部（Firing Control；ＦＣ）
４８０…待合せメモリ（Matching Memory；ＭＭ）
５００…実行ユニット（Execution unit；ＥＸ）
６００…ライトバック部（Write Back；ＷＢ）
【図１】
2005108086.tif 000003
【図２】
2005108086.tif 000004
【図３】
2005108086.tif 000005
【図４】
2005108086.tif 000006
【図５】
2005108086.tif 000007
【図６】
2005108086.tif 000008
【図７】
2005108086.tif 000009
【図８】
2005108086.tif 000010
【図９】
2005108086.tif 000011
【図１０】
2005108086.tif 000012