(57)【要約】【課題】命令の選択に用いる論理を削減することで、演算処理装置の処理性能を向上する。【解決手段】命令実行制御部は、エントリが保持した命令が実行可能かを示す実行可能情報を保持する実行可能情報保持部と、エントリが保持した命令を他のエントリが保持する命令より優先させるかを示す優先情報を保持する保持領域を、エントリの各々に対応して有する優先情報保持部と、エントリが保持する命令を命令実行部で実行可能かの判定結果に基づいて実行可能情報を実行可能情報保持部に書き込む実行可能情報書き込み部と、エントリに格納する命令とエントリに格納済みの命令との優先度の判定結果に基づいて優先情報を優先情報保持部に書き込む優先情報書き込み部と、実行可能情報保持部が保持する実行可能情報と優先情報保持部が保持する優先情報とに基づいて、命令を出力するエントリを決定する出力決定部と、を有する。【選択図】図１
2020091751.tif 000002
【特許請求の範囲】
【請求項１】
命令をデコードする命令デコード部と、
前記命令デコード部がデコードした命令を保持する複数のエントリから実行可能な命令を出力する命令実行制御部と、
前記命令実行制御部が出力する命令を実行する命令実行部と、を有し、
前記命令実行制御部は、
前記複数のエントリの各々が保持した命令が実行可能かを示す実行可能情報を保持する実行可能情報保持部と、
前記複数のエントリの各々が保持した命令を他のエントリが保持する命令の各々より優先させるかを示す優先情報を保持する保持領域を、前記複数のエントリの各々に対応して有する優先情報保持部と、
前記エントリが保持する命令を前記命令実行部で実行可能かを判定し、判定結果に基づいて実行可能情報を前記実行可能情報保持部に書き込む実行可能情報書き込み部と、
前記エントリに格納する命令と前記エントリに格納済みの命令の各々との優先度を判定し、判定結果に基づいて優先情報を前記優先情報保持部に書き込む優先情報書き込み部と、
前記実行可能情報保持部が保持する実行可能情報と前記優先情報保持部が保持する優先情報とに基づいて、命令を出力するエントリを決定する出力決定部と、を有することを特徴とする演算処理装置。
【請求項２】
前記複数のエントリの各々に対応する前記保持領域は、自エントリに保持された命令に対する他の複数のエントリのそれぞれに保持された命令の各々の優先度を優先情報として保持することを特徴とする請求項１に記載の演算処理装置。
【請求項３】
複数の前記命令実行部を有し、
前記実行可能情報保持部は、前記命令実行部毎に設けられ、
前記出力決定部は、命令を実行する命令実行部に対応する実行可能情報保持部が保持する実行可能情報と前記優先情報保持部が保持する優先情報とに基づいて、命令を出力するエントリを決定することを特徴とする請求項１または請求項２に記載の演算処理装置。
【請求項４】
複数の前記命令実行部の各々は、演算命令を実行する演算命令実行部、メモリアクセス命令を実行するメモリアクセス命令実行部または分岐命令の実行を制御する分岐命令実行部のいずれかであることを特徴とする請求項３に記載の演算処理装置。
【請求項５】
前記複数のエントリの各々は、命令と命令に設定された優先度を示す情報とを保持する領域を有し、
前記優先情報書き込み部は、前記エントリに格納する命令に設定された優先度と、前記エントリに格納済みの優先度を示す情報とに基づき、前記優先情報保持部に優先情報を書き込むことを特徴とする請求項１ないし請求項４のいずれか１項に記載の演算処理装置。
【請求項６】
前記出力決定部は、前記実行可能情報保持部が保持する実行可能情報に基づいて、実行可能な命令を保持するエントリを検出し、前記優先情報保持部が保持する優先情報に基づいて、検出したエントリが保持する命令のうち、優先度が最も高い命令の出力を決定することを特徴とする請求項１ないし請求項５のいずれか１項に記載の演算処理装置。
【請求項７】
命令をデコードする命令デコード部と、前記命令デコード部がデコードした命令を保持する複数のエントリから実行可能な命令を出力する命令実行制御部と、前記命令実行制御部が出力する命令を実行する命令実行部と、を有する演算処理装置の制御方法において、
前記命令実行制御部が有する実行可能情報書き込み部が、前記エントリが保持する命令を前記命令実行部で実行可能かを判定し、判定結果に基づいて実行可能情報を実行可能情報保持部に書き込み、
前記命令実行制御部が有する優先情報書き込み部が、前記エントリに格納する命令と前記エントリに格納済みの命令の各々との優先度を判定し、判定結果に基づいて、前記複数のエントリの各々が保持した命令を他のエントリが保持する命令の各々より優先させるかを示す優先情報を優先情報保持部に書き込み、
前記命令実行制御部が有する出力決定部が、前記実行可能情報保持部が保持する実行可能情報と前記優先情報保持部が保持する優先情報とに基づいて、命令を出力するエントリを決定することを、を特徴とする演算処理装置の制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、演算処理装置および演算処理装置の制御方法に関する。
【背景技術】
【０００２】
演算処理装置の性能は、命令のパイプライン処理、命令のアウトオブオーダ実行、命令の投機的実行、レジスタリネーミング、スーパースカラ方式、マルチスレッド方式等の様々な手法により向上される。命令のアウトオブオーダ実行を行うために、演算処理装置は、リザベーションステーションと呼ばれる命令発行キューを持つ。
【０００３】
また、例外処理が発生した場合の元の状態への復帰処理は、演算処理装置の性能の低下を抑止するために重要である。例えば、例外処理の発生を検出した場合、例外処理を発生させた命令より後続のチェックポイント命令の実行により記憶した情報を用いて、チェックポイント命令を実行した状態に論理レジスタの内容が復元される（例えば、特許文献１参照）。
【０００４】
命令の完了の管理に使用されるコミットスタックエントリを用いた命令の完了処理では、命令の実行の完了が判定されるスレッドの１つがコミットスタックエントリから選択され、完了対象エントリに格納される。完了対象エントリに格納されたスレッドの完了が判定された場合、完了が判定されたスレッドのプログラマブルな資源が更新される（例えば、特許文献２参照）。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２００９−７６０８３号公報
【特許文献２】国際公開第２００８／５５８０４号
【発明の概要】
【発明が解決しようとする課題】
【０００６】
例えば、命令デコード部がインオーダでデコードした命令を、アウトオブオーダで演算器等に発行するために、演算処理装置はリザベーションステーションを有する。リザベーションステーションは、命令デコード部がデコードした命令をキューに保持し、キューに保持した命令間での依存関係を判定し、依存関係が解決され、実行可能な命令から発行するべき命令を選択し、演算器等に発行する。
【０００７】
例えば、リザベーションステーションにおいて、キューのエントリ数が多いほど、あるいは、命令を発行する発行口が多いほど、命令の選択に用いる論理は増大し、命令選択時間は長くなる。演算レイテンシは最短で１サイクルなので、命令を毎サイクル発行する必要がある。そのため、キューのエントリ数および発行口の数は、命令の選択時間および依存関係の判定時間により制限される。そして、演算処理装置の処理性能は、キューのエントリ数が少ないほど、あるいは発行口の数が少ないほど低下する。
【０００８】
１つの側面では、本発明は、命令の選択に用いる論理を削減することで、演算処理装置の処理性能を向上することを目的とする。
【課題を解決するための手段】
【０００９】
一つの観点によれば、演算処理装置は、命令をデコードする命令デコード部と、前記命令デコード部がデコードした命令を保持する複数のエントリから実行可能な命令を出力する命令実行制御部と、前記命令実行制御部が出力する命令を実行する命令実行部と、を有し、前記命令実行制御部は、前記複数のエントリの各々が保持した命令が実行可能かを示す実行可能情報を保持する実行可能情報保持部と、前記複数のエントリの各々が保持した命令を他のエントリが保持する命令の各々より優先させるかを示す優先情報を保持する保持領域を、前記複数のエントリの各々に対応して有する優先情報保持部と、前記エントリが保持する命令を前記命令実行部で実行可能かを判定し、判定結果に基づいて実行可能情報を前記実行可能情報保持部に書き込む実行可能情報書き込み部と、前記エントリに格納する命令と前記エントリに格納済みの命令の各々との優先度を判定し、判定結果に基づいて優先情報を前記優先情報保持部に書き込む優先情報書き込み部と、前記実行可能情報保持部が保持する実行可能情報と前記優先情報保持部が保持する優先情報とに基づいて、命令を出力するエントリを決定する出力決定部と、を有する。
【発明の効果】
【００１０】
１つの側面では、本発明は、命令の選択に用いる論理を削減することで、演算処理装置の処理性能を向上することができる。
【図面の簡単な説明】
【００１１】
【図１】一実施形態における演算処理装置の一例を示す図である。
【図２】別の実施形態における演算処理装置の一例を示す図である。
【図３】図２のリザベーションステーションとその周囲のブロックの一部を示す図である。
【図４】図２のリザベーションステーションの一例を示す図である。
【図５】図４のレディフラグ部およびプライオリティ保持部の一例を示す図である。
【図６】図４の発行制御部の動作の一例を示す図である。
【図７】図４のリザベーションステーションの動作の一例を示す図である。
【図８】図４のリザベーションステーションの動作の別の例を示す図である。
【図９】図３のリザベーションステーションの動作フローの一例を示す図である。
【図１０】別の実施形態の演算処理装置におけるリザベーションステーションの一例を示す図である。
【発明を実施するための形態】
【００１２】
以下、図面を用いて実施形態を説明する。
【００１３】
図１は、一実施形態における演算処理装置の一例を示す。図１に示す演算処理装置１００は、命令をデコードする命令デコード部１と、命令実行制御部２と、命令実行制御部２が出力する命令を実行する命令実行部３とを有する。命令実行制御部２は、複数のエントリＥＮＴに保持した命令のうち実行可能な命令を命令実行部３に出力する。命令実行制御部２は、例えば、リザベーションステーションＲＳでもよい。命令実行制御部２は、命令保持部４、実行可能情報保持部５、実行可能情報書き込み部６、優先情報保持部７、優先情報書き込み部８および出力決定部９を有する。
【００１４】
命令保持部４は、命令デコード部１がデコードした命令（デコード結果を示す命令データ）を保持する複数のエントリＥＮＴを有する。なお、エントリＥＮＴの数は、６個に限定されない。以下では、命令デコード部１がデコードにより得たデコード結果を示す命令データは、命令とも称される。
【００１５】
実行可能情報保持部５は、各エントリＥＮＴに対応する領域であって、各エントリＥＮＴが保持した命令が実行可能かを示す実行可能情報Ｒ（Ready）を保持する領域を有する。
実行可能情報書き込み部６は、各エントリＥＮＴが保持する命令に基づいて、エントリＥＮＴが保持する命令の依存関係を判定する。そして、実行可能情報書き込み部６は、依存関係が解決した命令を保持するエントリＥＮＴに対応する実行可能情報保持部５の領域に、命令が命令実行部３に実行可能であることを示す実行可能情報Ｒを書き込む。ここで、依存関係の解決とは、例えば、先行の命令と後続の命令とのデータ依存性がなくなることである。
【００１６】
図１に示す例では、５番目のエントリＥＮＴと２番目のエントリＥＮＴに保持された命令は、実行可能情報保持部５に実行可能情報Ｒが書き込まれているため、依存関係が解決し、命令実行部３で実行可能であることを示す。一方、３番目のエントリＥＮＴに保持された命令は、実行可能情報保持部５に実行可能情報Ｒが書き込まれていないため、依存関係が解決しておらず、命令実行部３で実行可能ではない。
【００１７】
優先情報保持部７は、エントリＥＮＴ毎に、各エントリＥＮＴが保持した命令を他のエントリＥＮＴが保持する命令より優先させるかを示す優先情報Ｐを格納する複数の領域を有する。優先情報保持部７において、優先情報Ｐを格納する各行が保持する優先情報Ｐは、他のエントリＥＮＴが保持する命令に比べて優先度が高いことを示す。
【００１８】
なお、優先情報保持部７に保持される優先情報Ｐは、正方行列として表すことができる。斜線で示される対角成分は、自エントリＥＮＴを示し、優先情報Ｐは書き込まれない。例えば、優先情報保持部７には、優先度が相対的に低いことを示す優先情報／Ｐが優先情報Ｐの代わりに格納されてもよい。この場合、斜線を境とする対称領域は、優先情報Ｐ（または／Ｐ）が互いに反転するだけのため、優先情報保持部７は、斜線の右上の三角の領域または斜線の左下の三角の領域だけを有してもよい。
【００１９】
エントリＥＮＴ５に対応する優先情報保持部７の１行目の優先情報Ｐは、エントリＥＮＴ５が保持する命令の優先度より、エントリＥＮＴ３、２がそれぞれ保持する命令の優先度が高いことを示す。エントリＥＮＴ２に対応する優先情報保持部７の４行目の優先情報Ｐは、エントリＥＮＴ２が保持する命令の優先度より、エントリＥＮＴ３が保持する命令の優先度が高いことを示す。そして、優先情報保持部７に保持された優先情報Ｐより、エントリＥＮＴ３＞ＥＮＴ２＞ＥＮＴ５の順で、優先度が高いことが分かる。
【００２０】
優先情報書き込み部８は、エントリＥＮＴに格納する命令とエントリＥＮＴに格納済みの命令との優先度に基づき、命令の相対的な優先度を判定し、判定結果に基づいて、優先情報保持部７に優先情報Ｐを書き込む。なお、優先情報書き込み部８は、命令のデコード順（すなわち、プログラムの実行順）や、予め優先度が他の命令より高く設定された命令等基づいて優先度を決める。この際、優先情報書き込み部８は、各行の優先度と、行間の優先度とに矛盾がないように、優先情報保持部７に優先情報Ｐを書き込む。これにより、エントリＥＮＴ５−ＥＮＴ０の優先度の順序を一意に決めることができる。
【００２１】
出力決定部９は、優先情報保持部７が保持する優先情報Ｐと実行可能情報保持部５が保持する実行可能情報Ｒとに基づいて、命令を保持するエントリＥＮＴの中から命令を発行するエントリＥＮＴを決定する。例えば、出力決定部９は、優先情報保持部７が保持する優先情報Ｐに基づいて、実行可能情報保持部５が保持する実行可能情報Ｒに対応して命令保持部４が保持する命令のうち、優先度が最も高い命令の出力を決定し、決定した命令を発行する。図１に示す例では、出力決定部９は、優先度が最も高いエントリＥＮＴ３が保持する命令が実行可能でないため発行を抑止し、その代わりに、２番目に優先度が高く、かつ、実行可能なエントリＥＮＴ２が保持する命令を発行する。
【００２２】
以下に、１サイクルで演算の実行が完了する演算命令１、２（演算レイテンシ＝”１”）を順に実行する場合の命令パイプラインの例を示す。
（演算命令１）    Ｐ    Ｂ    Ｘ
（演算命令２）    ｕ    Ｐ    Ｂ    Ｘ
【００２３】
Ｐ（Priority）サイクルは、依存関係が解決した後続の命令のうち、演算実行部に投入する命令を決定するスケジュールと決定した命令を通知するブロードキャストを実行するサイクルである。すなわち、Ｐサイクルでは、依存関係が解決した命令のいずれかが出力決定部９により選択される。Ｂ（Buffer）サイクルは、演算の実行に必要なデータが保持されているレジスタ決定し、レジスタからデータ（ソースオペランド）を読み出すサイクルである。Ｘ（Execute）サイクルは、演算を実行し、演算結果を出力するサイクルである。
【００２４】
Ｐサイクルの１サイクル前に実行される符号ｕの動作は、後続の命令の依存関係を解決したかを判定する動作を示し、例えば、実行可能情報書き込み部６の動作期間を含む。演算レイテンシ＝”１”の命令で、命令パイプラインの動作を隙間なく実行させるためには、後続の演算命令２のＢサイクルを、先行の演算命令１のＸサイクルに合わせる必要がある。このため、後続の演算命令２の依存性を判定する動作”ｕ”は、先行の演算命令１のＰサイクルで実行される。
【００２５】
この例では、演算命令１、２の依存性が解決しているため、演算命令２のＰサイクルは、演算命令１のＢサイクルと同じサイクルに実行される。すなわち、演算レイテンシが”１”の命令を順次実行する場合、先行の演算命令１のＰサイクル中に符号ｕの動作が実行され、後続の演算命令２の発行の可否が判定される。例えば、後続の演算命令２の発行の可否を１サイクルで判定する処理は、Ｂ２Ｂ（Back-to-Back）スケジューリングと称され、命令パイプラインの処理では、タイミングが最も厳しい。このため、例えば、演算処理装置１００のクロックサイクルは、Ｂ２Ｂスケジューリングに掛かる時間に応じて決定される場合がある。
【００２６】
なお、実行可能情報書き込み部６が実行可能情報Ｒを出力しないことを決定した場合、符号ｕの判定動作は、実行可能情報Ｒの出力が決定されるまでサイクル毎に繰り返される。例えば、演算命令２の依存性が解決せず、演算命令１のＢサイクルに演算命令２の符号ｕの動作が実行され、演算命令２のＰサイクルが先行の演算命令１のＸサイクルに実行される場合、命令パイプラインにバブルと呼ばれる何もしないサイクルが発生する。符号ｕの動作が複数サイクルに渡り発生した場合、演算効率が低下する。
【００２７】
以下に、２サイクルで演算の実行が完了する演算命令３、４（演算レイテンシ＝”２”）を順に実行する場合の命令パイプラインの例を示す。
（演算命令３）    Ｐ    Ｂ    Ｘ１  Ｘ２
（演算命令４）          ｕ    Ｐ    Ｂ    Ｘ１  Ｘ２
【００２８】
演算レイテンシ＝”２”の命令では、後続の演算命令４のＢサイクルを、先行の演算命令３のＸ２サイクルに合わせることで、命令パイプラインを隙間なく実行させることができる。このため、後続の演算命令４の依存性を判定する動作”ｕ”は、先行の演算命令３のＢサイクルで実行すればよく、演算レイテンシ＝”１”の命令に比べて余裕がある。
【００２９】
例えば、命令パイプラインの設計において、クロック周波数は、各サイクル（各ステージ）のうち最も処理時間の長いサイクルに依存して決定される。実質的に処理時間が最も長いサイクルは、Ｂ２Ｂスケジューリングを実行するＰサイクルである。Ｂ２Ｂスケジューリングによる処理時間が規定の時間を超える場合、リザベーションステーションの出力ポート数やエントリ数を減らし、あるいは、調停に参加できるエントリＥＮＴを制限することで、回路の論理段数を減らし、処理時間を短縮する必要がある。但し、この場合、リザベーションステーションの処理能力（アウトオブオーダ実行可能な命令数）が低下し、演算処理装置の処理性能が低下してしまう。
【００３０】
また、リザベーションステーションを演算パイプライン毎に設けることで、各リザベーションステーションのエントリ数を削減することができる。これにより、リザベーションステーションにおいて、発行する命令を決定する回路の論理段数を減らし、処理時間を短縮することができる。しかしながら、同種の演算器への命令の割り当てに偏りが発生した場合、演算性能は低下してしまう。また、複数種の演算器（例えば、固定小数点演算器と浮動小数点演算器）のうち、一方の演算器による演算の実行頻度と、他方の演算器による演算の実行頻度とが乖離する場合がある（ワークロードの偏り）。この場合、複数のリザベーションステーションの総エントリ数が目減りして見え、処理性能が劣化してしまう。
【００３１】
図１に示す実施形態では、出力決定部９は、優先情報保持部７が保持する簡易な表形式（行列形式）の優先情報Ｐに基づいて、発行する命令を決定する。これにより、既存のリザベーションステーション等の命令実行制御部に比べて、発行する命令を決定（選択）する回路の論理段数を削減することができる。論理段数の削減により、例えば、Ｂ２Ｂスケジューリングに使える時間に余裕ができ、演算処理装置の命令パイプラインにおいて、命令実行制御部により発行する命令を決めるステージでの遅延時間を短縮することができる。
【００３２】
例えば、Ｂ２Ｂスケジューリングに使える時間に余裕ができた場合、リザベーションステーションのエントリ数を増加することができ、あるいは、調停に参加できるエントリ数を増加することができる。これにより、アウトオブオーダ実行可能な命令数を増やすことができ、演算処理装置１００の処理性能を向上することができる。エントリ数を増やさない場合、演算処理装置１００のクロック周波数をさらに高くすることができ、処理性能を向上することができる。
【００３３】
図２は、別の実施形態における演算処理装置の一例を示す。図３に示す演算処理装置１０２は、命令フェッチ制御部１０、命令キャッシュ部１２、命令バッファ部１４、命令デコード部１６、割り当て部１８、レジスタ管理部２０、コミット制御部２２、分岐制御部２４およびリザベーションステーション２６を有する。また、演算処理装置１０２は、ターゲットアドレス計算器（ＢＲＣＨ）２８、複数のメモリアドレス生成器（ＡＧＵ）３０（３０ａ、３０ｂ）およびストアデータ制御部（ＳＴＤ）３２を有する。さらに、演算処理装置１０２は、複数の固定小数点演算器（ＦＸＵ）３４（３４ａ、３４ｂ）、複数の浮動小数点演算器（ＦＬＵ）３６（３６ａ、３６ｂ）、ロード／ストアキュー３８、メモリ４０およびレジスタファイル４２を有する。以下では、ターゲットアドレス計算器２８、メモリアドレス生成器３０、ストアデータ制御部３２、固定小数点演算器３４および浮動小数点演算器３６は、演算資源とも称される。
【００３４】
リザベーションステーション２６は、命令実行制御部の一例である。ターゲットアドレス計算器２８、メモリアドレス生成器３０ａ、３０ｂ、ストアデータ制御部３２、固定小数点演算器３４ａ、３４ｂおよび浮動小数点演算器３６ａ、３６ｂは、命令実行部の一例である。また、ターゲットアドレス計算器２８は、分岐命令実行部の一例であり、メモリアドレス生成器３０ａ、３０ｂは、メモリアクセス命令実行部の一例であり、固定小数点演算器３４ａ、３４ｂおよび浮動小数点演算器３６ａ、３６ｂは、演算命令実行部の一例である。
【００３５】
例えば、演算処理装置１０２は、スーパースカラ方式のプロセッサであるが、スカラ方式のプロセッサに適用されてもよい。スカラ方式のプロセッサの場合、演算処理装置１０２は、１つのメモリアドレス生成器３０と、１つの固定小数点演算器３４と、１つの浮動小数点演算器３６とを有してもよい。なお、図２に示す演算処理装置１０２の構成は、一例であり、複数の発行口を持つリザベーションステーション２６を含む演算処理装置であれば、他の構成の演算処理装置でもよい。
【００３６】
命令フェッチ制御部１０は、プログラムカウンタＰＣが生成するアドレスまたは分岐制御部２４から受けるアドレスに基づいて、命令をフェッチするためのアドレスを生成し、生成したアドレスを命令キャッシュ部１２に出力する。命令フェッチ制御部１０は、コミット制御部２２から出力される命令の完了を示す情報に基づいてアドレスを更新してもよい。なお、プログラムカウンタＰＣは、命令フェッチ制御部１０の外部に設けられてもよい。
【００３７】
命令キャッシュ部１２は、命令フェッチ制御部１０から受信するアドレスが示す領域に保持された複数の命令を取り出し、取り出した複数の命令を命令バッファ部１４に出力する。例えば、命令キャッシュ部１２は、１次命令キャッシュでもよい。命令キャッシュ部１２は、アドレスに対応する命令を保持していない場合、図示しない下位のメモリから命令を取り出すために、下位のメモリにアクセス要求を出力し、下位のメモリから命令を取り出す。
【００３８】
命令バッファ部１４は、命令キャッシュ部１２から出力される複数の命令を、例えば、プログラム順に保持し、保持した命令のうちの複数の命令（例えば、２命令または４命令）をインオーダで命令デコード部１６に出力する。命令デコード部１６は、命令バッファ部１４から出力される複数の命令をそれぞれデコードし、デコードにより得られた命令データを、インオーダで割り当て部１８およびレジスタ管理部２０に出力する。命令データは、コミット制御部２２のコミットバッファに格納されてもよい。命令データは、命令の種別、命令の実行で使用するレジスタ等の情報を含む。以下では、命令デコード部１６がデコードにより生成した命令データ（デコード結果）は、単に命令とも称される。
【００３９】
割り当て１８は、命令デコード部１６から受けた命令を、命令の種別等に応じて命令を実行する演算資源を割り当て、割り当てを示す情報を含む命令をリザベーションステーション２６に出力する（ディスパッチ）。レジスタ管理部２０は、レジスタファイル４２に含まれるレジスタの依存関係が発生することを避けるため、レジスタの割り当てを変更する。レジスタファイル４２は、命令に含まれるレジスタ番号で指定可能なレジスタ以外に、割り当ての変更に使用されるレジスタを有してもよい。
【００４０】
コミット制御部２２は、リザベーションステーション２６に発行された命令を示す情報をインオーダで保持し、演算器等の演算資源からの命令実行の完了報告等に基づいて、プログラムに記述された順（インオーダ）に命令の完了処理を実行する。例えば、コミット制御部２２は、命令実行の完了を示す情報を命令フェッチ制御部１０およびレジスタ管理部２０に出力する。分岐制御部２４は、分岐命令の実行時にターゲットアドレス計算器２８から受けるアドレスに基づいて、分岐予測を実行し、予測結果を命令フェッチ制御部１０に出力する。すなわち、分岐制御部２４は、分岐予測機構の機能を有する。
【００４１】
リザベーションステーション２６は、ターゲットアドレス計算器２８、メモリアドレス生成器３０ａ、３０ｂ、ストアデータ制御部３２、固定小数点演算器３４ａ、３４ｂおよび浮動小数点演算器３６ａ、３６ｂに共通に設けられる。リザベーションステーション２６は、ダイナミックスケジューラまたはイシューキューとも称さる。リザベーションステーション２６は、割り当て部１８から供給される命令を図示しないキューに保持し、キューに保持した命令の中から、命令間の依存関係が解決された命令を選択する。リザベーションステーション２６は、選択した命令を、命令の種別に応じて、演算資源のいずれかに発行する。このために、リザベーションステーション２６は、演算資源毎に、命令を発行する発行口２７（２７ａ、２７ｂ、２７ｃ、２７ｄ、２７ｅ、２７ｆ、２７ｇ、２７ｈ）を有する。スーパースカラ方式では、例えば、リザベーションステーション２６は、固定小数点演算命令を固定小数点演算器３４ａ、３４ｂに並列に発行する。固定小数点演算器３４ａ、３４ｂは、命令を並列に実行し、実行結果をレジスタに書き込む。
【００４２】
ターゲットアドレス計算器２８は、リザベーションステーション２６から受ける分岐命令とレジスタファイル４２に保持されたアドレスデータとに基づいて、例えば、分岐先のアドレスを計算し、計算したアドレスを分岐制御部２４に出力する。
【００４３】
各メモリアドレス生成器３０ａ、３０ｂは、リザベーションステーション２６から出力されるメモリアクセス命令に基づいてアドレスを生成し、生成したアドレスをロード／ストアキュー３８に出力する。ストアデータ制御部３２は、ストア命令の実行時に、レジスタファイル４２から出力されるデータをロード／ストアキュー３８に出力する。
【００４４】
各固定小数点演算器３４ａ、３４ｂは、リザベーションステーション２６から受ける固定小数点演算命令を実行し、実行結果を、例えば、レジスタファイル４２の固定小数点レジスタに書き込む。各浮動小数点演算器３６ａ、３６ｂは、リザベーションステーション２６から受ける固定小数点演算命令を実行し、実行結果を、例えば、レジスタファイル４２の浮動小数点レジスタに書き込む。以下の説明では、固定小数点演算器３４ａ、３４ｂは、演算器ＦＸＵ３４ａ、３４ｂとも称され、浮動小数点演算器３６ａ、３６ｂは、演算器ＦＬＵ３６ａ、３６ｂとも称される。
【００４５】
ロード／ストアキュー３８は、メモリアドレス生成器３０ａ、３０ｂから出力されるアドレスを使用してメモリ４０にアクセスする機能を有する。また、ロード／ストアキュー３８は、メモリ４０から読み出されるロードデータを保持するロードキューと、メモリ４０に書き込むストアデータを保持するキューとを有する。命令デコード部１６がロード命令をデコードした場合、ロード／ストアキュー３８は、メモリ４０からデータを読み出し、読み出したデータをレジスタファイル４２に格納する。命令デコード部１６がストア命令をデコードした場合、ロード／ストアキュー３８は、レジスタファイル４２から出力され、ストアデータ制御部３２を介して受信するデータをメモリ４０に書き込む。メモリ４０は、例えば、データキャッシュである。レジスタファイル４２は、複数のレジスタを含み、命令に含まれるソースオペランドに対応するレジスタにソースデータを保持し、命令に含まれるディスティネーションオペランドに対応するレジスタに演算結果を保持する。
【００４６】
図３は、図２のリザベーションステーション２６とその周囲のブロックの一部を示す。リザベーションステーション２６は、命令デコード部１６にデコードされ、割り当て部１８により割り当てが決められた命令を、共通のキューに保持する。そして、リザベーションステーション２６は、キューに保持した命令のうち、演算器ＦＸＵ３４ａ、３４ｂ、ＦＬＵ３６ａ、３６ｂ毎に依存関係が解決し、実行が可能になった命令を演算器ＦＸＵ３４ａ、３４ｂまたは演算器ＦＬＵ３６ａ、３６ｂに発行する。演算器ＦＸＵ３４ａ、３４ｂは、命令に基づいて、汎用レジスタＧＰＲ（General  Purpose  Register）４３に保持されたデータを演算し、演算結果を汎用レジスタＧＰＲ４３に格納する。演算器ＦＬＵ３６ａ、３６ｂは、命令に基づいて、浮動小数点レジスタＦＰＲ（Floating  Point  Register）４４に保持されたデータを演算し、演算結果を浮動小数点レジスタＦＰＲ４４に格納する。
【００４７】
演算処理装置１０２は、演算器ＦＸＵ、ＦＬＵ、ターゲットアドレス計算器２８、メモリアドレス生成器３０およびストアデータ制御部３２（以下、演算資源）に共通のリザベーションステーション２６を有する。これにより、リザベーションステーション２６内で命令データを保持する複数のエントリＥＮＴを含むキューを演算資源で共通でき、リザベーションステーション２６の規模を増加することなく、演算資源からみたエントリＥＮＴの数を増加することができる。リザベーションステーション２６のキューを共通化するための回路的な工夫は、図４で説明される。
【００４８】
図４は、図２のリザベーションステーション２６の一例を示す。リザベーションステーションは、ウェイクアップ制御部２６０、選択制御部２７０、複数のエントリＥＮＴを含むキュー２８０および演算資源に対応してそれぞれ設けられる複数の選択部２９０を有する。ウェイクアップ制御部２６０は、レディ書き込み部２６２を有する。選択制御部２７０は、プライオリティ書き込み部２７１、レディフラグ部２７２、プライオリティ保持部２７４および発行制御部２７６を有する。
【００４９】
レディ書き込み部２６２は、実行可能情報書き込み部の一例であり、レディフラグ部２７２は、実行可能情報保持部の一例である。プライオリティ書き込み部２７１は、優先情報書き込み部の一例であり、プライオリティ保持部２７４は、優先情報保持部の一例である。発行制御部２７６は、出力決定部の一例である。
【００５０】
命令デコード部１６がデコードにより生成した命令データは、キュー２８０だけではなく、ウェイクアップ制御部２６０および選択制御部２７０がそれぞれ有する図示しないキューにも分散して保持される。なお、ウェイクアップ制御部２６０、選択制御部２７０およびキュー２８０が保持する命令データに含まれる情報は、互いに重複してもよい。
【００５１】
ウェイクアップ制御部２６０は、命令データに含まれるレジスタアドレス（ソースおよびディスティネーション）と、発行制御部２７６が出力する選択信号ＳＥＬとに基づいて、当該命令と他の命令との間の依存関係（データハザード）をチェックする。また、ウェイクアップ制御部２６０は、パイプライン資源の競合関係（構造ハザード）をチェックしてもよい。ウェイクアップ制御部２６０は、ハザードがない場合またはハザードが解決した場合、選択制御部２７０に命令を選択させるための情報を出力する。
【００５２】
レディ書き込み部２６２は、依存関係が解決した場合、命令の発行が可能になったことを示すレディフラグをレディフラグ部２７２に書き込む指示を選択制御部２７０に出力する。レディフラグの書き込み指示は、演算資源を示す情報を含んでもよい。レディフラグ（レディ状態Ｒ）は、実行可能情報の一例である。
【００５３】
プライオリティ書き込み部２７１は、例えば、命令が有効であることを示すバリッド情報および命令の順序等を示す情報に基づいて、命令の優先度を判定し、判定結果に基づいて優先情報をプライオリティ保持部２７４に出力する。例えば、プログラムにおいて先に実行される命令の優先度を、後に実行される命令の優先度より高くしてもよく、予め設定された優先度の高い命令の優先度を高くしてもよい。
【００５４】
選択制御部２７０は、命令データおよびウェイクアップ制御部２６０から受ける情報を保持し、保持した情報に基づいて、発行する命令を決定する調停動作を実行する。選択制御部２７０は、調停動作により決定した命令を選択部２９０に選択させる選択信号ＳＥＬを、演算資源毎に出力する。選択信号ＳＥＬは、命令を発行したことを示す情報としてウェイクアップ制御部２６０にも供給される。
【００５５】
レディフラグ部２７２は、演算資源毎にレディフラグを格納するフラグ格納領域（図４の縦方向に並ぶ領域）を有する。各フラグ格納領域の領域数は、キュー２８０のエントリＥＮＴの数と同じである。例えば、レディフラグ部２７２は、固定小数点演算器３４ａに実行させる命令に対応して、レディフラグのセット指示を受けたとする。この場合、レディフラグ部２７２は、固定小数点演算器３４ａに対応するフラグ格納領域において、対象の命令が格納されたキュー２８０のエントリＥＮＴに対応する領域に、レディフラグを書き込む。
【００５６】
プライオリティ保持部２７４は、キュー２８０のエントリＥＮＴの各々に対応して、エントリＥＮＴに保持された命令間での相対的な優先度を示す優先情報を保持する。このため、プライオリティ保持部２７４は、エントリＥＮＴ毎に、他のエントリＥＮＴとの間の優先情報を格納する優先度格納行（図５）を有する。換言すれば、プライオリティ保持部２７４は、優先情報を格納する２次元の領域を有する。通常、命令の優先度は、キュー２８０のエントリに対応して１次元の優先情報で決めることができるのに対して、この実施形態では、２次元の優先情報を用いることで、後述するように、発行制御部２７６の論理を軽くすることができる。
【００５７】
発行制御部２７６は、レディフラグ部２７２およびプライオリティ保持部２７４が保持する情報に基づいて、演算資源に発行する命令を、演算資源毎に決定し、発行を決定した命令を保持するキュー２８０のエントリＥＮＴを示す選択信号ＳＥＬを出力する。選択信号ＳＥＬは、演算資源毎に独立に生成される。スーパースカラアーキテクチャでは、例えば、浮動小数点演算器３６ａ、３６ｂに対応する２つの選択信号ＳＥＬが同時に生成されてもよい。
【００５８】
発行制御部２７６は、例えば、レディフラグ部２７２に格納されたレディフラグおよびプライオリティ保持部２７４に保持された優先情報の論理に基づいて、発行する命令を決定する。したがって、発行する命令を決定（選択）するための発行制御部２７６の論理の一部をプライオリティ保持部２７４に置き換えることができ、発行制御部２７６の論理段数を削減することができる。例えば、発行制御部２７６は、ＡＮＤ−ＯＲロジックにより構築することができるため、発行する命令を決定する他の調停回路に比べて論理を軽くすることができる。また、発行制御部２７６の論理にダイナミックロジックを用いることで、キュー２８０のエントリ数を増やした場合にも遅延時間の増加を抑えることができ、Ｂ２Ｂスケジューリングの時間の削減に寄与することができる。
【００５９】
以上より、図１に示す演算処理装置１００と同様に、Ｂ２Ｂスケジューリングに使える時間に余裕ができ、キュー２８０のエントリ数を増加することができる。エントリ数を増加する場合、アウトオブオーダ実行可能な命令数が増えるため、演算処理装置１０２の処理性能を向上することができる。エントリ数を増やさない場合、演算処理装置１０２のクロック周波数をさらに高くすることができ、処理性能を向上することができる。
【００６０】
キュー２８０は、複数の演算資源に共通に設けられ、命令データを保持する所定数のエントリＥＮＴ（例えば、１６個）を有する。すなわち、キュー２８０に複数の演算資源用の命令を混在させることができる。キュー２８０の各エントリＥＮＴの出力は、演算資源のそれぞれに対応する複数の選択部２９０の入力に接続される。例えば、演算資源が８個ある場合（２８、３０ａ、３０ｂ、３２、３４ａ、３４ｂ、３６ａ、３６ｂ）、選択部２９０は８個設けられ、キュー２８０の各エントリＥＮＴの出力は、８個の選択部２９０の入力に並列に接続される。各選択部２９０は、発行制御部２７６から選択信号ＳＥＬを受けた場合、選択信号ＳＥＬが示すキュー２８０のエントリＥＮＴを選択し、エントリＥＮＴが保持している命令データを、対応する演算資源に発行する。
【００６１】
図５は、図４のレディフラグ部２７２およびプライオリティ保持部２７４の一例を示す。レディフラグ部２７２は、図４に示すキュー２８０の１６個のエントリＥＮＴに対応して、レディフラグをそれぞれ格納する１６個の領域を含むフラグ格納領域を、演算資源毎に有する。レディフラグ部２７２の各フラグ格納領域の構成は、図１に示す実行可能情報保持部５の構成と同様である。
【００６２】
プライオリティ保持部２７４は、図４に示すキュー２８０の１６個のエントリＥＮＴに対応して、他のエントリＥＮＴとの間の優先情報を格納する１５個の領域を含む優先度格納行（図５の横方向に並ぶ領域の行）を有する。優先度格納行は、複数のエントリＥＮＴの各々が保持した命令を他のエントリＥＮＴが保持する命令の各々より優先させるかを示す優先情報を保持する保持領域の一例である。
【００６３】
プライオリティ保持部２７４の構成は、図１に示す優先情報保持部７の構成と同様である。なお、プライオリティ保持部２７４は、他のエントリＥＮＴとの間の優先情報を格納する１５個の領域を含む優先度格納列（図５の縦方向に並ぶ領域の列）を有するとも言える。
【００６４】
図６は、図４の発行制御部２７６の動作の一例を示す。換言すれば、図６は、図４のリザベーションステーション２６による命令の発行条件の一例を示す。なお、図６は、演算資源毎の命令の発行条件を示す。
【００６５】
発行制御部２７６は、キュー２８０のエントリＥＮＴのいずれかに保持された命令である発行対象命令に対応してレディフラグ部２７２に保持された情報が、発行可能であるＲＥＡＤＹ状態を示さない場合（Not  READY）、次のように動作する。発行制御部２７６は、プライオリティ保持部２７４に保持された情報にかかわりなく、発行対象命令を発行させる選択信号ＳＥＬを出力しない（図６（ａ）、（ｂ）、（ｃ））。
【００６６】
一方、発行制御部２７６は、キュー２８０のエントリＥＮＴのいずれかに保持された命令である発行対象命令に対応してレディフラグ部２７２に保持された情報が、発行可能であるＲＥＡＤＹ状態を示す場合（READY）、次のように動作する。発行制御部２７６は、発行対象命令の優先度よりも優先度が高い他の命令の１つでもＲＥＡＤＹ状態を示す場合、発行対象命令を発行させる選択信号ＳＥＬを出力しない（図６（ｄ））。発行制御部２７６は、発行対象命令の優先度よりも優先度が高い他の命令の全てがＲＥＡＤＹ状態を示さない場合、発行対象命令を発行させる選択信号ＳＥＬを出力する（図６（ｅ））。また、発行制御部２７６は、発行対象命令の優先度よりも優先度が高い他の命令が１つもない場合、レディフラグ部２７２のＲＥＡＤＹ状態を参照することなく、発行対象命令を発行させる選択信号ＳＥＬを出力する（図６（ｆ））。
【００６７】
図６に示す命令の発行条件Ｓは、式（１）により示される。
Ｓ：＝〜（Ｐ×Ｒ）＆Ｒ  ‥（１）
【００６８】
式（１）の（Ｐ×Ｒ）の”Ｐ”は、他の命令の優先度を示し、（Ｐ×Ｒ）の”Ｒ”は、他の命令のＲＥＡＤＹ状態を示す。”＆”の後の”Ｒ”は、発行対象命令のＲＥＡＤＹ状態を示す。（Ｐ×Ｒ）は、キュー２８０において、発行対象命令を保持するエントリＥＮＴ以外の全てのエントリＥＮＴについて判定される。
【００６９】
式（１）において、（Ｐ×Ｒ）の”Ｐ”は、プライオリティ保持部２７４を参照することで取得され、発行対象命令より優先度が高い場合、”１”であり、発行対象命令より優先度が低い場合、”０”である。式（１）中の２つの”Ｒ”は、レディフラグ部２７２を参照することで取得され、図６のREADYの場合、”１”であり、図６のNot  READYの場合、”０”である。式（１）の符号”〜”は、論理の反転を示す。
【００７０】
そして、式（１）の論理演算の結果である発行条件Ｓが”１”を示す場合、発行対象命令が発行され、発行条件Ｓが”０”を示す場合、発行対象命令は発行されない。発行制御部２７６は、キュー２８０において、命令を保持する全てのエントリＥＮＴ（すなわち、バリッドのエントリＥＮＴ）について、図６の判定（すなわち、式（１）による判定）を実行する。なお、後述するように、マトリックス状のプライオリティ保持部２７４を使用することで、キュー２８０のエントリＥＮＴに保持された命令の優先度を一意に決めることができる。このため、命令を保持する全てのエントリＥＮＴについて図６の判定を実行する場合にも、例えば、誤った優先順で命令が発行されることを抑止することができる。
【００７１】
図７は、図４のリザベーションステーション２６の動作の一例を示す。図７に示すレディフラグ部２７２は、１つの演算資源に対応するフラグ格納領域を示す。
【００７２】
図７では、キュー２８０のエントリＥＮＴ１３、ＥＮＴ１２、ＥＮＴ１０、ＥＮＴ５に命令ＩＮＳ１３、ＩＮＳ１２、ＩＮＳ１０、ＩＮＳ５がそれぞれ保持され、命令ＩＮＳ１３、ＩＮＳ６が、発行可能なレディ状態Ｒ（図６に示したREADY）である。プライオリティ保持部２７４に保持された優先情報から、命令ＩＮＳの発行の優先度は、ＩＮＳ１２＞ＩＮＳ１３＞ＩＮＳ５＞ＩＮＳ１０の順に高い。
【００７３】
プライオリティ保持部２７４において、エントリＥＮＴ１３の優先度格納行に保持されたエントリＥＮＴ１２の”１”は、命令ＩＮＳ１２の優先度が命令ＩＮＳ１３の優先度より高いことを示す。エントリＥＮＴ１２の優先度格納行には、”１”が格納されていないため、命令ＩＮＳ１２の優先度が最も高いことを示す。エントリＥＮＴ１０の優先度格納行に保持されたエントリＥＮＴ１３、ＥＮＴ１２、ＥＮＴ５の”１”は、命令ＩＮＳ１３、ＩＮＳ１２、ＩＮＳ５の優先度が命令ＩＮＳ１０の優先度より高いことを示す。すなわち、命令ＩＮＳ１０の優先度が最も低いことを示す。エントリＥＮＴ５の優先度格納行に保持されたエントリＥＮＴ１３、ＥＮＴ１２の”１”は、命令ＩＮＳ１３、ＩＮＳ１２の優先度が命令ＩＮＳ５の優先度より高いことを示す。エントリＥＮＴ５の優先度格納行において、エントリＥＮＴ１０に対応する領域には”１”が格納されていないため、命令ＩＮＳ５の優先度は、命令ＩＮＳ１０の優先度より高いことが分かる。
【００７４】
図７に示す状態では、発行制御部２７６は、図６に示す判定条件および式（１）にしたがって、優先度が最も高い命令ＩＮＳ１２がレディ状態Ｒでないことから発行を抑止する。発行制御部２７６は、優先度が２番目に高い命令ＩＮＳ１３がレディ状態Ｒであるため発行を決定する。
【００７５】
図８は、図４のリザベーションステーション２６の動作の別の例を示す。図７と同じ動作については、詳細な説明は省略する。図７と同様に、図８に示すレディフラグ部２７２は、１つの演算資源に対応するフラグ格納領域を示す。
【００７６】
図８では、図７に示す状態に対して、命令デコード部１６がデコードした命令ＩＮＳ８がキュー２８０のエントリＥＮＴ８に格納される。レディ書き込み部２６２は、命令ＩＮＳ８が発行可能であると判定し、エントリＥＮＴ８に対応する領域にレディ状態Ｒを書き込む。プライオリティ書き込み部２７１は、他の命令ＩＮＳ１３、ＩＮＳ１２、ＩＮＳ１０、ＩＮＳ５に対する命令ＩＮＳ８の優先度を決定する。例えば、プライオリティ書き込み部２７１は、命令ＩＮＳ８の優先度が、命令ＩＮＳ１３、ＩＮＳ１２の優先度より低く、命令ＩＮＳ１０、ＩＮＳ５の優先度より高いことを決定する。
【００７７】
プライオリティ書き込み部２７１は、決定した優先度にしたがって、エントリＥＮＴ８の優先度格納行におけるエントリＥＮＴ１３、ＥＮＴ１２の領域に”１”を書き込む。また、プライオリティ書き込み部２７１は、エントリＥＮＴ８の優先度格納列におけるエントリＥＮＴ１０、ＥＮＴ５の領域に、”１”を書き込む。
【００７８】
すなわち、プライオリティ書き込み部２７１は、キュー２８０のエントリＥＮＴに命令ＩＮＳが格納される毎に、プライオリティ保持部２７４において、命令ＩＮＳに対応する優先度格納行と、命令ＩＮＳに対応する優先度格納列とが保持する情報を更新する。これにより、プライオリティ保持部２７４に保持された優先情報から、命令ＩＮＳの発行の優先度は、ＩＮＳ１２＞ＩＮＳ１３＞ＩＮＳ５＞ＩＮＳ１０から、ＩＮＳ１２＞ＩＮＳ１３＞ＩＮＳ８＞ＩＮＳ５＞ＩＮＳ１０に更新される。
【００７９】
図８で説明したように、プライオリティ書き込み部２７１は、キュー２８０のエントリＥＮＴに命令ＩＮＳが格納される毎に、命令ＩＮＳが格納されたエントリＥＮＴに対応するプライオリティ保持部２７４の優先度格納行と優先度格納列とを更新する。これにより、発行制御部２７６は、式（１）にしたがって、１ｈｏｔ０で発行する命令ＩＮＳを選択することができる。ここで、１ｈｏｔ０は、エントリＥＮＴのいずれかに格納された命令ＩＮＳが発行されるか、いずれの命令ＩＮＳも発行されないことを示す。すなわち、マトリックス状のプライオリティ保持部２７４を用いる場合にも、命令ＩＮＳの優先順を一意に決定することができ、優先順にしたがって命令ＩＮＳを選択することができる。
【００８０】
図８に示す状態では、発行制御部２７６は、図７と同様に、優先度が最も高い命令ＩＮＳ１２の発行を抑止し、優先度が２番目に高い命令ＩＮＳ１３の発行を決定する。そして、レディ書き込み部２６２およびプライオリティ書き込み部２７１の状態が変わらない場合、発行制御部２７６は、優先度が次に高く、レディ状態Ｒである命令ＩＮＳ８の発行を決定する。
【００８１】
図９は、図３のリザベーションステーション２６の動作フローの一例を示す。すなわち、図９は、演算処理装置１０２の制御方法の一例を示す。図９に示す動作フローは、命令デコード部１６から命令ＩＮＳが発行される毎に実行される。
【００８２】
ステップＳ１０において、ウェイクアップ制御部２６０は、発行制御部２７６が出力する選択信号ＳＥＬを参照する。次に、ステップＳ１２において、ウェイクアップ制御部２６０は、命令ＩＮＳのソースオペランドの依存性をチェックする。次に、ステップＳ１４において、ウェイクアップ制御部２６０は、依存性が解決した場合、選択制御部２７０に自命令ＩＮＳを選択させるための情報を出力し、動作をステップＳ１６に移行し、依存性が解決していない場合、動作をステップＳ１０に戻す。
【００８３】
ステップＳ１６において、選択制御部２７０は、レディフラグ部２７２およびプライオリティ書き込み部２７１に保持された情報に基づいて、発行する自命令ＩＮＳを選択する調停を実行する。次に、ステップＳ１８において、選択制御部２７０は、調停結果に基づいて、発行する自命令ＩＮＳを保持するキュー２８０のエントリＥＮＴに対応する選択信号ＳＥＬを生成する。選択信号ＳＥＬは、選択部２９０とウェイクアップ制御部２６０とに供給される。
【００８４】
なお、演算レイテンシが”１”の命令ＩＮＳを順次実行する場合のＢ２Ｂスケジューリングは、ステップＳ１６およびステップＳ１８で選択信号ＳＥＬが生成されてからステップＳ１０、Ｓ１２、Ｓ１４の動作を完了するまでを１クロックサイクルで実行する必要がある。このため、演算レイテンシが”１”の命令ＩＮＳを順次実行する場合のＢ２Ｂスケジューリングは、タイミング的に最も厳しい。しかしながら、この実施形態では、発行制御部２７６の論理を軽くできるため、例えば、Ｂ２Ｂスケジューリングに使える時間に余裕を持たせることができる。このため、演算処理装置の命令パイプラインにおいて、命令実行制御部により発行する命令ＩＮＳを決めるステージでの遅延時間を短縮することができる。
【００８５】
次に、ステップＳ２０において、選択部２９０は、自命令ＩＮＳを発行可能な場合、動作をステップＳ２２に移行し、自命令ＩＮＳを発行可能でない場合、動作をステップＳ１６に移行する。そして、ステップＳ２２において、リザベーションステーション２６は、自命令ＩＮＳを演算資源に発行し、動作を終了する。
【００８６】
以上、図２から図９に示す実施形態においても、図１から図９に示す実施形態と同様に、Ｂ２Ｂスケジューリングに使える時間に余裕ができた分、リザベーションステーション２６のキュー２８０のエントリ数を増加することができる。あるいは、発行制御部２７６による調停に参加できるエントリ数を増加することができる。これにより、アウトオブオーダ実行可能な命令数を増やすことができ、演算処理装置１０２の処理性能を向上することができる。エントリ数を増やさない場合、演算処理装置１０２のクロック周波数をさらに高くすることができ、処理性能を向上することができる。
【００８７】
さらに、図２から図９に示す実施形態では、図５に示すレディフラグ部２７２とプライオリティ保持部２７４とを含むリザベーションステーション２６を適用することで、リザベーションステーション２６に複数の発行口２７を設けることができる。この際、プライオリティ保持部２７４のサイズを増加することなく、演算資源毎にレディフラグ部２７２のフラグ格納領域を設ければよい。すなわち、発行制御部２７６は、プライオリティ保持部２７４に保持された共通の優先情報に基づいて、演算資源毎に発行する命令ＩＮＳを決定することができる。したがって、リザベーションステーション２６に接続される演算資源の数にかかわらず、発行制御部２７６の負荷をほぼ同じにすることができる。この結果、リザベーションステーション２６に複数の発行口２７を設ける場合にも、演算処理装置１０２の処理性能の低下を抑止することができる。
【００８８】
図４に示したリザベーションステーション２６は、演算資源毎のフラグ格納領域（レディフラグ）と、演算資源に共通のプライオリティ保持部２７４とを有し、発行口２７の増加が発行制御部２７６の動作時間に影響しにくい構成である。このため、発行口２７を増加する場合にも、Ｂ２Ｂスケジューリングの時間の増加を最小限にすることができ、キュー２８０のエントリＥＮＴを減らすことなく発行口２７を増加することができる。発行口２７を増加しない場合には、Ｂ２Ｂスケジューリングの時間に余裕ができるため、余裕時間の論理を使って、キュー２８０のエントリ数を増加することができる。
【００８９】
キュー２８０を複数の演算資源に共通にすることができ、同種の演算資源への命令ＩＮＳの割り当てに偏りが発生する場合や、複数種の演算資源の実行頻度に偏りが発生する場合にも、キュー２８０のエントリＥＮＴを無駄なく使用することができる。換言すれば、演算資源毎にリザベーションステーションを設ける場合に比べて、演算資源から見たエントリＥＮＴの数を増やすことができる。この結果、演算処理装置１０２の処理性能を向上することができる。
【００９０】
図１０は、別の実施形態の演算処理装置におけるリザベーションステーションの一例を示す。図１０に示すリザベーションステーション２６Ａを有する演算処理装置は、例えば、スーパースカラアーキテクチャのプロセッサである。リザベーションステーション２６Ａは、図７と同様のレディフラグ部２７２およびプライオリティ保持部２７４と、図７のキュー２８０に優先フラグＰＲＩが追加されたキュー２８０Ａを有する。図１０に示すリザベーションステーション２６Ａを有する演算処理装置のその他の構成は、図２に示す演算処理装置１０２と同様である。
【００９１】
キュー２８０の各エントリＥＮＴの優先フラグＰＲＩには、通常の優先度を示す”ｎ”または”ｎ”に比べて優先度が高いことを示す”ｈ”のいずれかが格納される。例えば、優先フラグＰＲＩは、１ビットであり、論理０、論理１の一方と他方とが、”ｎ”と”ｈ”に対応する。命令ＩＮＳの優先度が”ｎ”であるか”ｈ”であるかは、命令ＩＮＳ毎に予め設定されている。このため、優先フラグＰＲＩに格納する”ｎ”または”ｈ”は、命令デコード部１６（図２）により決定される。
【００９２】
図１０では、キュー２８０のエントリＥＮＴ１５、ＥＮＴ１４、ＥＮＴ１３、ＥＮＴ１２、ＥＮＴ９、ＥＮＴ６、ＥＮＴ１、ＥＮＴ０に、命令ＩＮＳ１５、ＩＮＳ１４、ＩＮＳ１３、ＩＮＳ１２、ＩＮＳ９、ＩＮＳ６、ＩＮＳ１、ＩＮＳ０がそれぞれ格納される。命令ＩＮＳ１５、ＩＮＳ１４、ＩＮＳ１３、ＩＮＳ１２、ＩＮＳ９、ＩＮＳ６、ＩＮＳ１、ＩＮＳ０の優先度は、それぞれ”ｎ”、”ｎ”、”ｈ”、”ｈ”、”ｈ”、”ｈ”、”ｎ”、”ｎ”である。
【００９３】
例えば、命令デコード部１６は、命令ＩＮＳを２つずつデコードし、デコードした命令ＩＮＳ（デコードにより得た命令データ）を２つずつキュー２８０に格納する。図１０に示す例では、命令デコード部１６は、命令（ＩＮＳ１５、ＩＮＳ１４）、（ＩＮＳ１３、ＩＮＳ１２）、（ＩＮＳ１、ＩＮＳ０）、（ＩＮＳ９、ＩＮＳ６）を、この順でキュー２８０に格納する。
【００９４】
プライオリティ書き込み部２７１（図４）は、命令ＩＮＳがキューに格納された場合、格納された命令ＩＮＳに対応する優先度格納行と優先度格納列とに”１”または”０”を格納する。優先度格納行に着目する場合、キュー２８０に格納された命令ＩＮＳに対する他の命令ＩＮＳの優先度は、”１”では高く、”０”では低い。一方、優先度格納列に着目する場合、キュー２８０に格納された命令ＩＮＳに対する他の命令ＩＮＳの優先度は、”１”では低く、”０”では高い。
【００９５】
以下では、命令ＩＮＳ９、ＩＮＳ６がキュー２８０のエントリＥＮＴ９、ＥＮＴ６にそれぞれ格納された場合について説明する。例えば、命令ＩＮＳ６は、プログラムの実行順では命令ＩＮＳ９より前にある。このため、命令ＩＮＳ６の優先度は、命令ＩＮＳ９の優先度より高い。
【００９６】
プライオリティ書き込み部２７１は、優先度が”ｈ”の命令ＩＮＳ９、ＩＮＳ６に対応する優先度格納行では、優先度が”ｎ”の命令ＩＮＳ１５、ＩＮＳ１４、ＩＮＳ１、ＩＮＳ０に対応する領域に”０”を強制的に格納する。優先度が同じ”ｈ”である命令ＩＮＳ１３、ＩＮＳ１２は、プログラムの実行順が前であり、優先度が高い。このため、プライオリティ書き込み部２７１は、命令ＩＮＳ９、ＩＮＳ６に対応する優先度格納行における命令ＩＮＳ１３、ＩＮＳ１２に対応する領域に”１”を格納する。
【００９７】
プライオリティ書き込み部２７１は、命令ＩＮＳ９に対応する優先度格納行における命令ＩＮＳ６に対応する領域に、優先度が高いことを示す”１”を格納する。プライオリティ書き込み部２７１は、命令ＩＮＳ６に対応する優先度格納行における命令ＩＮＳ９に対応する領域に、優先度が低いことを示す”０”を格納する。
【００９８】
さらに、プライオリティ書き込み部２７１は、命令ＩＮＳ９、ＩＮＳ６に対応する優先度格納列における命令ＩＮＳ１５、ＩＮＳ１４、ＩＮＳ１、ＩＮＳ０に対応する領域に、”１”を強制的に格納する。これは、命令ＩＮＳ１５、ＩＮＳ１４、ＩＮＳ１、ＩＮＳ０の優先度（”ｎ”）が命令ＩＮＳ９、ＩＮＳ６の優先度（”ｈ”）より低いためである。また、プライオリティ書き込み部２７１は、命令ＩＮＳ９、ＩＮＳ６に対応する優先度格納列において、プログラムの実行順が前である命令ＩＮＳ１３、ＩＮＳ１２に対応する領域に、”０”を格納する。
【００９９】
このように、プライオリティ書き込み部２７１は、優先フラグＰＲＩに応じた優先度と、プログラムの順序に応じた優先度とに基づいてプライオリティ保持部２７４に”１”または”０”を書き込む。これにより、命令ＩＮＳ自体に優先度を設定し、特定の命令ＩＮＳをリザベーションステーション２６Ａから優先的に発行する場合にも、リザベーションステーション２６Ａの回路規模が増加することを抑止することができる。
【０１００】
演算処理装置が実行する命令ＩＮＳのうち、ある種の命令ＩＮＳは、リザベーションステーション２６Ａから優先的に発行した方が、演算処理装置全体の処理性能が向上する場合、命令ＩＮＳ自体に優先度が設定されてもよい。この場合、命令デコード部１６（図２）は、デコードした命令ＩＮＳの優先度を判定し、判定結果に応じた情報（”ｎ”または”ｈ”）を、割り当て部１８を介してリザベーションステーション２６Ａに出力する。
【０１０１】
例えば、命令ＩＮＳに設定される優先度毎にリザベーションステーションを設ける場合、優先度毎にキュー２８０が設けられるため、回路規模が大きくなる。これに対して、図１０では、１つのリザベーションステーション２６Ａのキュー２８０により、複数の優先度の命令ＩＮＳを保持することができる。また、プライオリティ保持部２７４は、優先度の数にかかわらず１つを設ければよい。これにより、リザベーションステーション２６Ａの回路規模を削減することができ、演算処理装置のチップサイズを削減することができる。
【０１０２】
なお、優先フラグＰＲＩを複数ビットに拡張し、３通り以上の優先度を設定可能にしてもよい。この場合にも、１つのキュー２８０に３通り以上の優先度を設定することができ、プライオリティ保持部２７４は、優先度の数にかかわらず１つを設ければよい。
【０１０３】
以上、図１０に示す実施形態においても、図１から図９に示す実施形態と同様の効果を得ることができる。さらに、図１０に示す実施形態では、特定の命令ＩＮＳの優先度が他の命令ＩＮＳの優先度と異なる場合にも、１つのリザベーションステーション２６Ａにより、命令ＩＮＳの発行制御を実行することができる。この際、キュー２８０に優先フラグＰＲＩを追加するだけで、図５のプライオリティ保持部２７４をそのまま流用できる。このため、リザベーションステーション２６Ａの回路規模の増加を抑制しつつ、優先度が異なる複数種の命令ＩＮＳの発行制御を実行することができる。
【０１０４】
以上の詳細な説明により、実施形態の特徴点および利点は明らかになるであろう。これは、特許請求の範囲がその精神および権利範囲を逸脱しない範囲で前述のような実施形態の特徴点および利点にまで及ぶことを意図するものである。また、当該技術分野において通常の知識を有する者であれば、あらゆる改良および変更に容易に想到できるはずである。したがって、発明性を有する実施形態の範囲を前述したものに限定する意図はなく、実施形態に開示された範囲に含まれる適当な改良物および均等物に拠ることも可能である。
【符号の説明】
【０１０５】
１        命令デコード部
２        命令実行制御部
３        命令実行部
４        命令保持部
５        実行可能情報保持部
６        実行可能情報書き込み部
７        優先情報保持部
８        優先情報書き込み部
９        出力決定部
１０      命令フェッチ制御部
１２      命令キャッシュ部
１４      命令バッファ部
１６      命令デコード部
１８      割り当て部
２０      レジスタ管理部
２２      コミット制御部
２４      分岐制御部
２６、２６Ａ  リザベーションステーション
２８      ターゲットアドレス計算器（ＢＲＣＨ）
３０      メモリアドレス生成器（ＡＧＵ）
３２      ストアデータ制御部（ＳＴＤ）
３４      固定小数点演算器（ＦＸＵ）
３６      浮動小数点演算器（ＦＬＵ）
３８      ロード／ストアキュー
４０      メモリ
４２      レジスタファイル
１００、１０２  演算処理装置
２６０    ウェイクアップ制御部
２６２    レディ書き込み部
２７０    選択制御部
２７１    プライオリティ書き込み部
２７２    レディフラグ部
２７４    プライオリティ保持部
２７６    発行制御部
２８０、２８０Ａ  キュー
２９０    選択部
ＥＮＴ    エントリ
Ｐ        優先情報
Ｒ        実行可能情報
【図１】
2020091751.tif 000003
【図２】
2020091751.tif 000004
【図３】
2020091751.tif 000005
【図４】
2020091751.tif 000006
【図５】
2020091751.tif 000007
【図６】
2020091751.tif 000008
【図７】
2020091751.tif 000009
【図８】
2020091751.tif 000010
【図９】
2020091751.tif 000011
【図１０】
2020091751.tif 000012