(57)【要約】【課題】本発明はプロセッサ装置における演算パイプラインを効率的に利用できるようにする。【解決手段】本発明によれば、複数のＲＳを設ける場合には、ＲＳと演算パイプラインとの基本的な対応付けを行っておき、さらに２つのＲＳで組を構成して、当該組における片方のＲＳが演算パイプラインに命令をディスパッチできなくなると、他方のＲＳが代わりに命令をディスパッチしたり、自分が保持する命令を他方に渡したりする。さらに、１つのＲＳを設ける場合には、ＲＳ内の複数のエントリをグループに分け、演算パイプラインへの命令のディスパッチ頻度や命令の保持状態によってグループ分けを動的に変更することにより、演算パイプラインを効率的に利用するようにする。なお、ＲＳ内の複数のエントリのグループ分けによっては、あたかも複数のＲＳが各演算パイプラインに割り当てられているような構成も可能である。【選択図】図１
2010282668.tif 000002
【特許請求の範囲】
【請求項１】
複数のエントリを有する１つのリザベーションステーションと、
複数の演算パイプラインと、
を有し、
前記複数のエントリの各々には、優先順位が設定されており、
前記優先順位が上位のエントリに空きが存在する場合には、前記優先順位が下位のエントリの命令が前記優先順位が上位のエントリに移動され、
前記複数のエントリは、前記演算パイプラインの数と同数のグループに分けられており、
各前記グループは、いずれかの前記演算パイプラインに対応付けられており、
各前記グループに属するエントリに格納される命令数の差、又は各前記グループから命令がディスパッチされる頻度の差が所定レベル以上となった場合に、前記複数のエントリのうち上位所定数のエントリで前記グループが再構成される
プロセッサ装置。
【請求項２】
複数のエントリを有する１つのリザベーションステーションと、
複数の演算パイプラインと、
前記リザベーションステーションと前記複数の演算パイプラインとを接続するためのスイッチング部と、
前記スイッチング部に対する制御部と、
を有し、
前記複数のエントリの各々には、優先順位が設定されており、
前記優先順位が上位のエントリに空きが存在する場合には、前記優先順位が下位のエントリの命令が前記優先順位が上位のエントリに移動され、
全て又は一部のエントリに前記演算パイプラインが対応付けられており、
前記演算パイプラインが対応付けられているエントリは、対応付けられている前記演算パイプライン毎にグループ化されており、
前記制御部が、
前記複数のエントリの各々が、前記複数の演算パイプラインのいずれかに対応付けられており、同一の演算パイプラインに対応付けられているエントリのいずれかから当該演算パイプラインに命令を出力可能なように前記スイッチング部を制御する第１のモードと、
前記複数のエントリのうち上位所定数のエントリの各々が、前記複数の演算パイプラインのいずれかに対応付けられており、同一の演算パイプラインに対応付けられているエントリのいずれかから当該演算パイプラインに命令を出力可能なように前記スイッチング部を制御する第２のモードと
を、各前記グループに属するエントリに格納される命令数の差、又は各前記グループから命令がディスパッチされる頻度の差が所定レベル以上となった場合に切り替える
プロセッサ装置。
【請求項３】
前記上位所定数に応じて前記第２のモードが複数のモードに分けられることを特徴とする請求項２記載のプロセッサ装置。
【請求項４】
前記同一の演算パイプラインに対応付けられているエントリが、優先順位が上位のエントリから下位のエントリへ連続する所定数のエントリである請求項２記載のプロセッサ装置。
【請求項５】
複数のエントリを有する１つのリザベーションステーションと、
複数の演算パイプラインと、
を有し、
前記複数のエントリの各々には、優先順位が設定されており、
前記優先順位が上位のエントリに空きが存在する場合には、前記優先順位が下位のエントリの命令が前記優先順位が上位のエントリに移動され、
前記複数のエントリは、前記演算パイプラインの数と同数のグループに分けられており、
同一のグループにおいて、ディスパッチ可能な命令を格納しており且つ優先順位が最も高いエントリから、当該グループに対応する演算パイプラインに命令をディスパッチする
プロセッサ装置。
【請求項６】
前記グループが、前記演算パイプラインの数おきの優先順位を有するエントリで構成される請求項５記載のプロセッサ装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、多重化された演算パイプラインとデコードされた命令を一時的に保持するためのリザベーションステーションとを有する、アウト・オブ・オーダ方式のスーパースカラ・プロセッサ装置に関する。
【背景技術】
【０００２】
近年、命令デコーダと演算パイプラインの間にリザベーションステーションと呼ばれるバッファを設け、そこに一旦格納した命令群のうち実行条件が整った命令をプログラム上の命令並び順序に関係なく選択し（アウト・オブ・オーダ方式と呼ぶ）、多重化された演算パイプラインのいずれかに発行する方式が、多くのプロセッサで採用されている。また演算器を有効に利用するための技術であるマルチスレッド処理方式も、市場のプロセッサ装置で採用されはじめている。しかしながら、これらには以下のような問題がある。
（１）リザベーションステーションを１つ用意し、そこから複数のパイプラインへ命令を発行するのが、最も効率の良い演算パイプラインの利用に繋がる。しかし、並列度を上げるために、リザベーションステーションのエントリ数を増やしてパイプラインへ送る命令の選択の幅を増やすと、多数のエントリから複数個の発行命令を選択するための論理の実装が非常に複雑になるという問題がある。この複雑さに対処するため、演算パイプラインの段数を増やして対処する、或いはクロックスピード向上を控えることで対処する方法があるが、これらの方法は本来の目的である性能向上に反する方向である。
（２）リザベーションステーションを分割し、１つのリザベーションステーションのエントリ数を、発行命令を選択できる程度に抑えると、（１）の問題は解決される。しかし、命令選択のレンジが狭くなり、並列度の向上の制限となるという問題がある。
（３）リザベーションステーションを分割する構成を採用すると、従来技術では、デコーダからリザベーションステーションに送る段階で、演算が行われる演算パイプラインが固定される。このような場合には、デコーダにおける命令送付先リザベーションステーション決定アルゴリズムの優劣により、演算パイプラインにおけるバブルの発生に差がでてしまう。ワークロード毎に有効なアルゴリズムが異なるため、その時々において動的な最適化が必要となる。なお、デコーダは元々ロジックが複雑であり、さらに複雑度を増すことは、性能を低下させることになる。
（４）マルチスレッド方式と呼ばれる処理方式（互いに依存関係が無い複数本のジョブが、演算パイプラインを共有する方式）では、ジョブ間に特性の違いに基づく潜在的な命令並列度の違いがある。その結果、リザベーションステーションから演算パイプラインへ発行できる頻度が異なる。複数のリザベーションステーションがあり、各々が特定の演算パイプラインと繋がっている場合、リザベーションステーションへの命令格納を適切に行うことが、マルチスレッド方式では特に必要である。しかし、この方式のプロセッサ装置は、デコーダの処理が、従来の方式（すなわち、シングルスレッド方式）より複雑であり、演算パイプラインの段数を変えずに、ジョブの特性を考慮したリザベーションステーションへの命令送付の最適化を行うことは困難である。従って、リザベーションステーションの側で、演算パイプラインへの命令送付時に最適化を行う手段が必要である。
【０００３】
なお、例えば、特開２０００−１０５６９９号公報には、データ処理における並列性を向上させ、命令が実行を待機する時間を減少させ処理速度を増加させるための技術が開示されている。具体的には、分散型リザベーションステーションを有するデータ処理システムが提供され、当該分散型リザベーションステーションはマイクロプロセサ命令の形態におけるコードの基本ブロックを格納する。従って、コードの基本ブロックは幾つかの分散型リザベーションステーションに分散させることが可能である。これにより、各分散型リザベーションステーションにおけるエントリの数が減少され、命令が実行されるための待ち時間を減少させ、処理速度が向上されるとされる。本公報では、複数のリザベーションステーションが複数の演算器に対応付けられており、どのリザベーションステーションからどの演算器に命令を出力するのかを決定するアルゴリズムが複雑になる。
【０００４】
また、特開２０００−１８１７０７号公報には、情報処理装置において命令処理を高速に実行するために順序を外れた命令実行を可能にする命令処理装置の物量を低減し高速動作を可能とする技術が開示されている。具体的には、解読済みで実行ユニットに発行されていない複数個の命令を一時格納する手段を設けた情報処理装置の命令制御装置であって、格納手段は各エントリの順序がその格納する命令の解読された順序を示すように構成され、エントリから命令が発行されるそのエントリーが消去され、未発行命令を含むエントリが連続した順序でエントリを構成するようにエントリ間で格納情報が移動する。そして、そのエントリ間の移動量が最大で同時に解読されうる命令数に等しい。本公報では、リザベーションステーションの各エントリからいずれの実行ユニットにも命令を出力できるようになっており、各エントリからいずれの実行ユニットを出力するかを決定するロジックが複雑になるという問題がある。
【０００５】
また、特開２００２−２０７５９５号公報には、リオーダバッファ等を使用してアウトオブオーダ実行を行うプロセッサにおいて、リオーダバッファを効率良く使用するための技術が開示されている。具体的には、演算ユニット、ストアユニット、ロードユニット等の各機能ユニットは、リオーダバッファのエントリ番号（ＷＲＢ番号）を用いて、当該エントリに格納された命令の自ユニットにおける処理の終了をリオーダバッファに通知する。但し、ロードユニットは、発行されたロード命令の最新の投機状態を分岐ユニットから出力される分岐予測成功／失敗信号に基づいて管理し、分岐予測が失敗した分岐命令の後続のロード命令についてはその処理が終了してもＷＲＢ番号によるリオーダバッファへの通知は行わない。これにより、リオーダバッファは、分岐予測が失敗した分岐命令の後続のロード命令を格納してあるエントリを即再利用することができるとされる。本公報には、１つのリザベーションステーションに対して複数の機能ユニットが設けられる例が示されている。但し、機能ユニット毎に異なるリザベーションステーションを設けても良いし、いくつかの機能ユニットのグループ毎に共通の１つのリザベーションステーションを設けても良いとされている。
【０００６】
特開２００２−５５８１４号公報には、各エントリが特定の演算器に対応付けられている例が示されている。
【先行技術文献】
【特許文献】
【０００７】
【特許文献１】特開２０００−１０５６９９号公報
【特許文献２】特開２０００−１８１７０７号公報
【特許文献３】特開２００２−２０７５９５号公報
【特許文献４】特開２００２−５５８１４号公報
【非特許文献】
【０００８】
【非特許文献１】David A. Patterson , John L. Hennessy, Computer architecture: a quantitative approach, Morgan Kaufmann Publishers Inc., San Francisco, CA, 1990
【発明の概要】
【発明が解決しようとする課題】
【０００９】
上で述べたように、リザベーションステーションのエントリ数が多くなると、そこから実行条件の整った複数個の命令を選択するロジックは複雑であり、実装する際には性能向上とのトレードオフが発生する。また、複数のリザベーションステーションから、効率よく命令を発行していくためには、リザベーションステーションに命令を格納する段階で、高度な動的最適化が必要となる。これは既に現在でも複雑な実装のデコーダを、さらに複雑にする結果になる。
【００１０】
従って、本発明の目的は、デコーダの命令発行ロジックやリザベーションステーションから演算パイプラインへの命令送出ロジックの複雑度を上げることなく、多重化された演算パイプラインの効率的な利用を可能とする新規なリザベーションステーションを有するプロセッサ装置を提供することである。
【課題を解決するための手段】
【００１１】
本発明の第１の態様に係るプロセッサ装置は、複数のエントリを有する複数のリザベーションステーションと、複数の演算パイプラインと、複数のリザベーションステーションに対する制御部とを有する。そして、通常モードにおいて、複数のリザベーションステーションのうち第１のリザベーションステーションと、複数の演算パイプラインのうち第１の演算パイプラインとが対応付けられており、通常モードにおいて、複数のリザベーションステーションのうち第１のリザベーションステーション以外の第２のリザベーションステーションと、複数の演算パイプラインのうち第１の演算パイプライン以外の第２の演算パイプラインとが対応付けられている。また、第１のリザベーションステーションから第１の演算パイプラインに対して命令のディスパッチが行われないという特定の動作モードを制御部が検出した場合、制御部は、第２のリザベーションステーションに対して、第２の演算パイプラインに加えて第１の演算パイプラインに命令をディスパッチするように制御を行うものである。
【００１２】
このようにすれば、第１のリザベーションステーションから第１の演算パイプラインに対して命令のディスパッチが行われないという特定の動作モード（例えば数回連続でディスパッチされない場合など）において、特別に第２のリザベーションステーションから第１の演算パイプラインに命令がディスパッチされるようになる。すなわち、命令送出ロジックの複雑度を上げることなく、演算パイプラインの有効利用が図られる。
【００１３】
また、上で述べた制御部は、第１及び第２のリザベーションステーションからディスパッチの有無を表す信号を受信して通常モード又は特定の動作モードのいずれかを検出するようにしてもよい。その際、特定の動作モードにおいて、第２のリザベーションステーションから第１の演算パイプラインに命令をディスパッチした後に、第１のリザベーションステーションにおいてディスパッチ可能な命令をいずれかのエントリに有する場合には、第１のリザベーションステーションが、ディスパッチ有りを表す信号を制御部に出力するようにしてもよい。簡単なロジックにより、次サイクルで通常モードに戻すためである。
【００１４】
さらに、第２のリザベーションステーションから第２の演算パイプラインに対して命令のディスパッチが行われないという第２の特定のモードを制御部が検出した場合、制御部は、第１のリザベーションステーションに対して、第１の演算パイプラインに加えて第２の演算パイプラインに命令をディスパッチするように制御を行うようにしてもよい。このように第１及び第２のリザベーションステーションが互いに補い合うような構成であってもよい。
【００１５】
本発明の第２の態様に係るプロセッサ装置は、複数のエントリを有する複数のリザベーションステーションと、複数の演算パイプラインと、複数のリザベーションステーションに対する制御部とを有する。そして、通常モードにおいて、複数のリザベーションステーションのうち第１のリザベーションステーションと、複数の演算パイプラインのうち第１の演算パイプラインとが対応付けられており、通常モードにおいて、複数のリザベーションステーションのうち第１のリザベーションステーション以外の第２のリザベーションステーションと、複数の演算パイプラインのうち第１の演算パイプライン以外の第２の演算パイプラインとが対応付けられている。また、第２のリザベーションステーションが空となった又は第１のリザベーションステーションのエントリに格納されている命令の数が第２のリザベーションステーションのエントリに格納されている命令の数より所定数以上多いという特定の動作モードを制御部が検出した場合、制御部は、第１のリザベーションステーションに対して、第１のリザベーションステーションのエントリに格納されている命令を第２のリザベーションステーションに移動させるように制御するものである。
【００１６】
このように、第２のリザベーションステーションが空となった又は第１のリザベーションステーションのエントリに格納されている命令の数が第２のリザベーションステーションのエントリに格納されている命令の数より所定数以上多いという特定の動作モードにおいて、第１のリザベーションステーションのエントリに格納されている命令を第２のリザベーションステーションに移動させるようする。すなわち、デコーダにおける、リザベーションステーションに対する命令割当ロジックの複雑度を上げることなく、演算パイプラインの有効利用が図られる。
【００１７】
また、上で述べた特定の動作モードが、第２のリザベーションステーションから第２の演算パイプラインに対して命令のディスパッチが行われないという状態がさらに検出された場合に特定されるようにしてもよい。空でなく、ディスパッチ可能な命令を保持していれば、命令をリザベーションステーション間で移動させる必要がないためである。
【００１８】
さらに、上で述べた制御部は、第１及び第２のリザベーションステーションから対応する演算パイプラインへのディスパッチの有無を表す信号を受信するようにしてもよい。その際、特定の動作モードにおいて、第１のリザベーションステーションから第２のリザベーションステーションに命令を移動させた後に、第２のリザベーションステーションが、ディスパッチ有りを表す信号を制御部に出力するようにしてもよい。簡単なロジックにより、次サイクルで通常モードに戻すためである。
【００１９】
さらに、第１のリザベーションステーションから第１の演算パイプラインに対して命令のディスパッチが行われないという第２の特定の動作モードを制御部が検出した場合、制御部は、第２のリザベーションステーションに対して、第２の演算パイプラインに加えて第１の演算パイプラインに命令をディスパッチするように制御を行うようにしてもよい。第１の態様と第２の態様とを組み合わせると、演算パイプラインをより効率的に利用することができるようになる。
【００２０】
本発明の第３の態様に係るプロセッサ装置は、複数のエントリを有する１つのリザベーションステーションと、複数の演算パイプラインとを有する。そして、複数のエントリの各々には、優先順位が設定されており、優先順位が上位のエントリに空きが存在する場合には、優先順位が下位のエントリの命令が優先順位が上位の空きエントリに移動され、上記複数のエントリは、演算パイプラインの数と同数のグループに分けられており、各グループは、いずれかの演算パイプラインに対応付けられている。また、各グループに属するエントリに格納される命令数の差、又は各グループから命令が、対応する演算パイプラインに対しディスパッチされる頻度の差が所定レベル以上となった場合に、複数のエントリのうち上位所定数のエントリで上記グループが再構成される。
【００２１】
このようにすれば、１つのリザベーションステーションを用いる場合においても、各グループに属するエントリに格納される命令数の差、又は各グループから命令がディスパッチされる頻度の差が所定レベル以上となった場合には、各グループを構成するエントリが再構成されるため、効率的な命令のディスパッチが行われるようになる。すなわち、リザベーションステーションから演算パイプラインへの命令送出ロジックを複雑化することなく、演算パイプラインの効率的な利用が図られるようになる。マルチスレッド処理方式を採用する場合であっても有用である。
【００２２】
本発明の第４の態様に係るプロセッサ装置は、複数のエントリを有する１つのリザベーションステーションと、複数の演算パイプラインと、リザベーションステーションと複数の演算パイプラインとを接続するためのスイッチング部と、スイッチング部に対する制御部とを有する。そして、複数のエントリの各々には、優先順位が設定されており、優先順位が上位のエントリに空きが存在する場合には、優先順位が下位のエントリの命令が優先順位が上位のエントリに移動される。また、上で述べた制御部が、（１）複数のエントリの各々が、複数の演算パイプラインのいずれかに対応付けられており、同一の演算パイプラインに対応付けられているエントリのいずれかから当該演算パイプラインに命令を出力可能なように前記スイッチング部を制御する第１のモードと、（２）複数のエントリのうち上位所定数のエントリの各々が、複数の演算パイプラインのいずれかに対応付けられており、同一の演算パイプラインに対応付けられているエントリのいずれかから当該演算パイプラインに命令を出力可能なようにスイッチング部を制御する第２のモードとを、各グループに属するエントリに格納される命令数の差、又は各グループから、対応する演算パイプラインに対して命令がディスパッチされる頻度の差が所定レベル以上となった場合に切り替える。
【００２３】
このように第１のモードと第２のモードとを切り替えることにより、命令送出ロジックを複雑化させることなく、演算パイプラインの利用効率を向上させることができる。マルチスレッド処理方式を採用する場合であっても有用である。
【００２４】
また、上位所定数に応じて第２のモードが複数のモードに分けられるようにしてもよい。より効率的に古い命令を演算パイプラインに出力するためである。
【００２５】
さらに、同一の演算パイプラインに対応付けられているエントリが、優先順位が上位のエントリから下位のエントリへ連続する所定数のエントリであるようにしてもよい。
【００２６】
また、各グループに属するエントリに格納される命令数の差、又は各グループから命令がディスパッチされる頻度の差が所定レベル以上となった場合を、リザベーションステーションにおける特定のエントリに格納されている命令の次サイクルにおける状態に応じて切り替えるようにしてもよい。
【００２７】
本発明の第５の態様に係るプロセッサ装置は、複数のエントリを有する１つのリザベーションステーションと、複数の演算パイプラインとを有する。そして、複数のエントリの各々には、優先順位が設定されており、優先順位が上位のエントリに空きが存在する場合には、優先順位が下位のエントリの命令が優先順位が上位のエントリに移動され、上記複数のエントリは、演算パイプラインの数と同数のグループに分けられており、同一のグループにおいて、ディスパッチ可能な命令を格納しており且つ優先順位が最も高いエントリから、当該グループに対応する演算パイプラインに命令をディスパッチするようになっている。
【００２８】
このような構成であれば、グループを構成するエントリを、その優先順位が集中しないように分散させれば、空きエントリの増減に対しても演算パイプラインのバブルが発生しないようにすることができる。より効率的に古い命令を演算パイプラインに出力するためである。
【００２９】
また、上で述べたグループが、演算パイプラインの数おきの優先順位を有するエントリで構成されるようにしてもよい。
【００３０】
また、第１又は第２の態様を、第３乃至第５の態様に適用することも可能である。
【図面の簡単な説明】
【００３１】
【図１】本発明の実施の形態におけるプロセッサ装置の機能ブロック図である。
【図２】本発明の第１の実施の形態における概念図である。
【図３】第１の実施の形態におけるリザベーションステーションの回路例を示す図である。
【図４】第１の実施の形態における処理フローを示す図である。
【図５】本発明の第２の実施の形態における概念図である。
【図６】第２の実施の形態におけるリザベーションステーションの回路例を示す図である。
【図７】第２の実施の形態におけるリザベーションステーションの回路例を示す図である。
【図８】第２の実施の形態における処理フローを示す図である。
【図９】（ａ）及び（ｂ）は、本発明の第３の実施の形態における概念図である。
【図１０】第３の実施の形態における回路例を示す図である。
【図１１】第３の実施の形態における処理フローを示す図である。
【図１２】第３の実施の形態においてモードを決定するためのテーブルを示す図である。
【図１３】（ａ）及び（ｂ）は、本発明の第４の実施の形態における概念図である。
【図１４】第４の実施の形態における回路例を示す図である。
【図１５】（ａ）及び（ｂ）は、従来技術におけるスループットを説明するための図である。
【図１６】（ａ）乃至（ｃ）は、第４の実施の形態におけるスループットを説明するための図である。
【発明を実施するための形態】
【００３２】
図１に本発明の実施の形態におけるプロセッサ装置１００の機能ブロック図を示す。本実施の形態に係るプロセッサ装置１００は、フェッチ部と、発行部と、ディスパッチ部と、レジスタ部と、実行部と、メモリ部と、コミット部とを有する。フェッチ部は、図示しないフェッチパイプライン部と、１次命令キャッシュ部１０１と分岐予測部１０２とを含む。発行部は、デコーダ１０３とレジスタリネーム制御部１０４とを含む。ディスパッチ部は、ＬＤ／ＳＴ（Load/Store）用リザベーションステーション（ＲＳ）１０５と、整数演算用ＲＳ１０６と、整数ＲＳ制御部１０７と、浮動小数点ＲＳ制御部１０８と、浮動小数点演算用ＲＳ１０９と、分岐演算用ＲＳ１１０とを含む。レジスタ部は、整数演算リネーミングレジスタ１１１と、整数演算用レジスタ１１２と、浮動小数点演算用レジスタ１１３と、浮動小数点演算用リネーミングレジスタ１１４とを含む。実行部は、ＬＤ／ＳＴパイプ１１５及び１１６と、整数系演算器１１７及び１１８と、浮動小数点演算器１１９及び１２０とを含む。メモリ部は、フェッチ用ポート部１２１と、ストア用ポート部１２２と、ストアリタイア制御部１２３と、１次データキャッシュ部１２５と、２次キャッシュ部１２４とを含む。コミット部は、リタイア制御部１２７と、プログラムカウンタ制御部１２８と、制御レジスタ１２９とを含む。
【００３３】
次に、図１に示したプロセッサ装置１００における、機能ブロック間の代表的な接続について説明する。フェッチパイプ部は、１次命令キャッシュ部１０１と、二次キャッシュ部１２４と、分岐予測部１０２と、デコーダ１０３と、図示していないが、プログラムカウンタとに接続されている。また、分岐予測部１０２は、分岐演算用ＲＳ１１０と、図示していないがリタイア制御部に接続されている。さらに、デコーダ１０３は、ＬＤ／ＳＴ用ＲＳ１０５に接続される。なお、図示していないが、デコーダ１０３は、整数演算用ＲＳ１０６、浮動小数点演算用ＲＳ１０９と、レジスタリネーム制御部１０４と、リタイア制御部１２７と、フェッチ用ポート部１２１と、ストア用ポート部１２２と、ストアリタイア制御部１２３にも接続されている。また、レジスタリネーム制御部１０４は、ＬＤ／ＳＴ用ＲＳ１０５と、整数演算用ＲＳ１０６と、浮動小数点演算用ＲＳ１０９と、図示されていないが、リネーミングレジスタとレジスタとに接続されている。なお、整数演算用ＲＳ１０６と、浮動小数点演算用ＲＳ１０９と、分岐演算用ＲＳ１１０とは、リタイア制御部１２７に接続されている。また、図１では、第１及び第２の実施の形態を念頭にして、整数演算用ＲＳ１０６と浮動小数点演算用ＲＳ１０９とを複数設ける例を示している。しかし、第３及び第４の実施の形態のように整数演算用ＲＳ１０６と浮動小数点演算用ＲＳ１０９とを１つずつ設けるようにしても良い。また、第２の実施の形態では、図１に示すように、整数演算用ＲＳ１０６同士、浮動小数点演算用ＲＳ１０９同士も接続されている。
【００３４】
整数演算用ＲＳ１０６には整数ＲＳ制御部１０７が接続されており、浮動小数点演算用ＲＳ１０９には浮動小数点ＲＳ制御部１０８が接続されている。また、整数ＲＳ制御部１０７は、整数演算用ＲＳ１０６内の状態判定及び選択部からの出力信号を受け取るようになっている。同様に、浮動小数点ＲＳ制御部１０８は、浮動小数点演算用ＲＳ１０９内の状態判定及び選択部からの出力信号を受け取るようになっている。
【００３５】
また、ＬＤ／ＳＴ用ＲＳ１０５は、整数演算リネーミングレジスタ１１１に接続されている。そして、整数演算用ＲＳ１０６は、整数演算リネーミングレジスタ１１１と、整数演算用レジスタ１１２とに接続されている。また、浮動小数点演算用ＲＳ１０９は、浮動小数点演算用レジスタ１１３と、浮動小数点演算用リネーミングレジスタ１１４とに接続されている。整数演算リネーミングレジスタ１１１と、浮動小数点演算用リネーミングレジスタ１１４とには、１次データキャッシュ部１２５も接続されている。さらに、整数演算リネーミングレジスタ１１１には、整数系演算器１１７及び１１８が接続されており、浮動小数点演算用リネーミングレジスタ１１４には、浮動小数点演算器１１９及び１２０が接続されている。
【００３６】
整数演算リネーミングレジスタ１１１は、整数演算用レジスタ１１２と、ＬＤ／ＳＴパイプ１１５及び１１６と、整数系演算器１１７及び１１８とに接続されている。整数演算用レジスタ１１２も、同様にＬＤ／ＳＴパイプ１１５及び１１６と、整数系演算器１１７及び１１８とに接続されている。さらに、浮動小数点演算用リネーミングレジスタ１１４は、浮動小数点演算用レジスタ１１３と、浮動小数点演算器１１９及び１２０とに接続されている。浮動小数点演算用レジスタ１１３は、浮動小数点演算器１１９及び１２０に接続されている。
【００３７】
ＬＤ／ＳＴパイプ１１５及び１１６は、フェッチ用ポート部１２１及びストア用ポート部１２２に接続され、整数系演算器１１７及び１１８は、ストアリタイア制御部１２３に接続されている。また、浮動小数点演算器１１９及び１２０は、ストアリタイア制御部１２３に接続されている。
【００３８】
フェッチ用ポート部１２１、ストア用ポート部１２２、及びストアリタイア制御部１２３は、１次データキャッシュ部１２５に接続されている。１次データキャッシュ部１２５は、２次キャッシュ部１２４とも接続されている。２次キャッシュ部１２４は、プロセッサ装置１００内のシステムバス１２６とも接続されている。さらに、リタイア制御部１２７は、プログラムカウンタ制御部１２８と制御レジスタ１２９とに接続されている。
【００３９】
図１に示したプロセッサ装置１００の各機能及び動作については、整数演算用ＲＳ１０６、整数ＲＳ制御部１０７、浮動小数点ＲＳ制御部１０８、及び浮動小数点演算用ＲＳ１０９以外の部分については、従来と同様であるからここでは説明を省略する。なお、本願では、図１に示したプロセッサ装置１００全体の命令処理ステージだけではなく、リザベーションステーション以降の命令処理ステージについても、演算パイプラインと呼ぶものとする。
【００４０】
［実施の形態１］
図２に、第１の実施の形態における概念図を示す。図２には、第１のリザベーションステーションＲＳ−Ａと、第２のリザベーションステーションＲＳ−Ｂとが設けられており、第１のリザベーションステーションＲＳ−Ａは原則として演算パイプラインＡに対応付けられており、第２のリザベーションステーションＲＳ−Ｂは原則として演算パイプラインＢに対応付けられているとする。このように、リザベーションステーションと演算パイプラインとが１対１対応している場合には、リザベーションステーションに保持されている命令のうちいずれの命令を演算パイプラインに出力すべきか判断する処理が簡単になるという利点を有する。一方でリザベーションステーションにディスパッチ可能な命令がない場合には演算パイプラインに命令をディスパッチできないため、演算パイプラインにバブルが発生して実行効率が落ちてしまう。そこで、図２に示したように、例えば第１のリザベーションステーションＲＳ−Ａと、第２のリザベーションステーションＲＳ−Ｂとを１つの組として設定し、第１のリザベーションステーションＲＳ−Ａにおいてディスパッチ可能な命令が存在しない場合には、第２のリザベーションステーションＲＳ−Ｂが、ディスパッチ可能であって優先度が高い命令を２つ選択して、最も優先度が高い命令を対応する演算パイプラインＢに送出すると共に、点線で示したように２番目に優先度が高い命令を演算パイプラインＡに送出するようにする。このような構成を採用することにより、演算パイプラインの効率的な利用が図られるようになる。
【００４１】
図２に示した本実施の形態の概要を実装するために、例えば整数演算用ＲＳ１０６ａ（整数演算用ＲＳ１０６は、整数演算用ＲＳ１０６ａ及び整数演算用ＲＳ１０６ｂを含むものとする）は、図３に示すような構成を有する。整数演算用ＲＳ１０６ａは、第１乃至第ｎのエントリ１０６１乃至１０６３と、例えばＡＮＤ回路である回路１０６４乃至１０６６と、状態判定及び選択部１０６７と、第１のセレクタ１０６８と、第２のセレクタ１０６９とを有する。図３では、デコーダ１０３などとの接続線は省略されている。エントリ１０６１乃至１０６３には、演算パイプラインへのディスパッチの可否を判定するためのビットと、オペランド情報と、データの参照元・定義先などのデータが保持されている。第１のエントリ１０６１においてディスパッチの可否判定に用いられるビット格納部は回路１０６４に接続され、第２のエントリ１０６２においてディスパッチの可否判定に用いられるビット格納部は回路１０６５に接続され、第ｎのエントリ１０６３においてディスパッチの可否判定に用いられるビット格納部は回路１０６６に接続されている。また、第１乃至第ｎのエントリ１０６１乃至１０６３は、それぞれ第１及び第２のセレクタ１０６８及び１０６９の入力に接続されている。状態判定及び選択部１０６７は、回路１０６４乃至１０６６の出力と第１及び第２のセレクタ１０６８及び１０６９の制御入力と、整数ＲＳ制御部１０７とに接続されている。第１のセレクタ１０６８は、当該整数演算用ＲＳ１０６ａに対応する演算パイプラインに接続されており、第２のセレクタ１０６９は、整数演算用ＲＳ１０６ｂに対応する演算パイプラインに接続されている。
【００４２】
第１のエントリ１０６１においてディスパッチの可否判定に用いられるビットは回路１０６４でＡＮＤ演算され、全てのビットが１であれば、ディスパッチ可能を表すオン信号が状態判定及び選択部１０６７に出力される。第２のエントリ１０６２乃至第ｎのエントリ１０６３についても同様である。整数ＲＳ制御部１０７が通常モード（対応する演算パイプラインにのみ命令を送出するモード）を指示している場合には、状態判定及び選択部１０６７は、オン信号を出力した回路に対応するエントリのうち、優先順位の最も高いエントリに格納されているデータ（命令）を対応する演算パイプラインにディスパッチさせるように第１のセレクタ１０６８に指示する。そうすると、ディスパッチ可能な命令を保持する最優先エントリから、対応する演算パイプラインに当該命令が出力される。例えば第１のエントリ１０６１の優先順位が最も高く、第ｎのエントリ１０６３の優先順位が最も低いものとする。なお、通常モードにおいては、第２のセレクタ１０６９に選択指示を行うことはない。また、状態判定及び選択部１０６７は、回路１０６４乃至１０６６のいずれもがディスパッチ不可を表すオフ信号を出力している、すなわちいずれのエントリにもディスパッチ可能な命令が存在しないという状態を検出する場合もある。このような場合には、第１のセレクタ１０６８にもディスパッチの指示を行わない。その後、状態判定及び選択部１０６７は、ディスパッチを行ったか否かを表す信号を整数ＲＳ制御部１０７に出力する。
【００４３】
一方、整数ＲＳ制御部１０７が特別モード（隣の演算パイプラインにも命令を送出するモード）を指示すると、状態判定及び選択部１０６７は、オン信号を出力した回路に対応するエントリのうち、優先順位の最も高いエントリに格納されているデータ（命令）を対応する演算パイプラインにディスパッチさせるように第１のセレクタ１０６８に指示すると共に、オン信号を出力した回路に対応するエントリのうち、２番目に優先度の高いエントリに格納されているデータ（命令）を隣の演算パイプライン（ここでは整数演算用ＲＳ１０６ｂに対応付けられた演算パイプライン）にディスパッチさせるように第２のセレクタ１０６９に指示する。そうすると、ディスパッチ可能な命令を保持する最優先エントリから、対応する演算パイプラインに当該命令が出力され、ディスパッチ可能な命令を保持する２番目の優先度を有するエントリから、隣の演算パイプラインに当該命令が出力される。なお、ディスパッチ可能な命令が１つしかなければ、対応する演算パイプラインにのみ当該命令に出力する。ディスパッチ可能な命令が１つもなければ、いずれの演算パイプラインにも出力は行わない。状態判定及び選択部１０６７は、ディスパッチを行ったか否かを表す信号を整数ＲＳ制御部１０７に出力する。
【００４４】
なお、浮動小数点演算用ＲＳ１０９及び浮動小数点ＲＳ制御部１０８についても同様の処理を行う。また、命令が演算パイプラインに送出されると、下位のエントリに格納された命令が上位の空きエントリに移動される。
【００４５】
図３に示したリザベーションステーションの詳細動作を図４に示す。なお、処理モード＝０は通常モードを表し、処理モード＝１は特別モードであって第１のリザベーションステーションＲＳ−Ａから第２のリザベーションステーションＲＳ−Ｂに対応付けられた演算パイプラインＢにも命令を送出するモードであり、処理モード＝２も特別モードであって第２のリザベーションステーションＲＳ−Ｂから第１のリザベーションステーションＲＳ−Ａに対応付けられた演算パイプラインＡにも命令を送出するモードである。
【００４６】
まず、整数ＲＳ制御部１０７は、処理モード＝０と初期化する（ステップＳ１）。そして、処理モード＝０であるか判断する（ステップＳ３）。処理モード＝０であれば、各リザベーションステーションの状態判定及び選択部１０６７に通常モードであることを指示する。第１のリザベーションステーションＲＳ−Ａ及び第２のリザベーションステーションＲＳ−Ｂの各々の状態判定及び選択部１０６７は、エントリ番号の小さい（優先度の高い）順に送出の条件（命令の依存関係及び演算資源の空き）を上で述べた回路１０６４乃至１０６６の出力信号により確認し、送出の条件を満たした、最初のエントリの命令を第１のセレクタ１０６８に指示を行って対応する演算パイプラインに送出させる（ステップＳ５）。当然、送出の条件を満たした命令が存在しない場合には、ディスパッチを行わない。
【００４７】
また、第１のリザベーションステーションＲＳ−Ａ及び第２のリザベーションステーションＲＳ−Ｂの各々の状態判定及び選択部１０６７は、ディスパッチの有無を表す信号を整数ＲＳ制御部１０７に送出する（ステップＳ７）。整数ＲＳ制御部１０７は、第１のリザベーションステーションＲＳ−Ａのディスパッチ状態を表す管理変数ＣＡの値、第２のリザベーションステーションＲＳ−Ｂのディスパッチ状態を表す管理変数ＣＢの値を、ディスパッチの有無を表す信号に基づき更新する（ステップＳ９）。すなわち、ディスパッチ有りを表す信号を受信すると、管理変数（ＣＡ又はＣＢ）＝０と更新する。また、ディスパッチ無しを表す信号を受信すると、管理変数（ＣＡ又はＣＢ）＝管理変数（ＣＡ又はＣＢ）＋１と更新する。そして、整数ＲＳ制御部１０７は、ＣＡ及びＣＢの値に応じて処理モードを更新する（ステップＳ１１）。ＣＡ＝０且つＣＢ≧３であれば処理モードを１に設定し、ＣＡ≧３且つＣＢ＝０であれば処理モードを２に設定する。それ以外の場合は処理モードを０に設定する。すなわち、いずれかのリザベーションステーションから演算パイプラインへ命令が送出されているが、他方のリザベーションステーションから３回連続で命令が送出されていない状態を検出しようとしている。このように発行可能な命令に偏りが生じてしまっている場合（格納された命令の数に偏りがある場合及び格納された命令の特徴が異なっている場合などを含む）、それを是正するために処理モードを変更する。処理モード＝１であれば、以下で詳細に説明するように第１のリザベーションステーションＲＳ−Ａから演算パイプラインＡ及びＢに命令がディスパッチされる第１の特別なモードとなる。一方、処理モード＝２であれば、以下で詳細に説明するように第２のリザベーションステーションＲＳ−Ｂから演算パイプラインＡ及びＢに命令がディスパッチされる第２の特別なモードとなる。そしてステップＳ１１の後にステップＳ３に戻る。
【００４８】
またステップＳ３において処理モード＝０ではないと判断された場合、処理モード＝１であるか判断する（ステップＳ１３）。もし、処理モード＝１であれば、リザベーションステーションＲＳ−Ａにおける状態判定及び選択部１０６７は、エントリ番号の小さい（優先度の高い）順に送出の条件（命令の依存関係及び演算資源の空き）を上で述べた回路１０６４乃至１０６６の出力信号により確認し、送出の条件を満たした、最初のエントリの命令を第１のセレクタ１０６８に指示を行って対応する第１の演算パイプラインＡへ送出させる（ステップＳ１５）。当然送出の条件を満たした命令が存在しない場合には、ディスパッチを行わない。次に、第１のリザベーションステーションＲＳ−Ａにおける状態判定及び選択部１０６７は、さらに送出の条件を上で述べた回路１０６４乃至１０６６の出力信号により確認し、送出の条件を満たした、２番目のエントリの命令を第２のセレクタ１０６９に指示を行って第２の演算パイプラインＢへ送出させる（ステップＳ１７）。そして、第１のリザベーションステーションＲＳ−Ａにおける状態判定及び選択部１０６７は、ディスパッチを行っていればディスパッチ有りを表す信号を、ディスパッチを行っていなければディスパッチなしを表す信号を整数ＲＳ制御部１０７に送出する（ステップＳ１９）。一方、第２のリザベーションステーションＲＳ−Ｂにおける状態判定及び選択部１０６７は、エントリ番号の小さい（優先度の高い）順に送出の条件（命令の依存関係及び演算資源の空き）を上で述べた回路１０６４乃至１０６６の出力信号により確認し、送出の条件を満たした命令が存在していれば、ディスパッチすることなくディスパッチ有りを表す信号を整数ＲＳ制御部１０７に送出する（ステップＳ２１）。なお、送出の条件を満たした命令が存在していない場合には、ディスパッチなしを表す信号が整数ＲＳ制御部１０７に送出される。その後ステップＳ９に移行する。ステップＳ２１でディスパッチ有りを表す信号を送出すると、ステップＳ９でＣＢ＝０に設定されるので、処理モードが０に戻り、第２のリザベーションステーションＲＳ−Ｂから演算パイプラインＢへ命令がディスパッチされるようになる。
【００４９】
さらにステップＳ１３において処理モード＝１ではないと判断されると処理モード＝２であり、リザベーションステーションＲＳ−Ｂにおける状態判定及び選択部１０６７は、エントリ番号の小さい（優先度の高い）順に送出の条件（命令の依存関係及び演算資源の空き）を上で述べた回路１０６４乃至１０６６の出力信号により確認し、送出の条件を満たした、最初のエントリの命令を第１のセレクタ１０６８を介して対応する第２の演算パイプラインＢへ送出させる（ステップＳ２３）。当然送出の条件を満たした命令が存在しない場合には、ディスパッチを行わない。次に、第２のリザベーションステーションＲＳ−Ｂにおける状態判定及び選択部１０６７は、さらに送出の条件を上で述べた回路１０６４乃至１０６６の出力信号により確認し、送出の条件を満たした、２番目のエントリの命令を第２のセレクタ１０６９に指示して第１の演算パイプラインＡへ送出させる（ステップＳ２５）。そして、第２のリザベーションステーションＲＳ−Ｂにおける状態判定及び選択部１０６７は、ディスパッチを行っていればディスパッチ有りを表す信号を、ディスパッチを行っていなければディスパッチなしを表す信号を整数ＲＳ制御部１０７に送出する（ステップＳ２７）。一方、第１のリザベーションステーションＲＳ−Ａにおける状態判定及び選択部１０６７は、エントリ番号の小さい（優先度の高い）順に送出の条件（命令の依存関係及び演算資源の空き）を上で述べた回路１０６４乃至１０６６の出力信号により確認し、送出の条件を満たした命令が存在していれば、ディスパッチすることなくディスパッチ有りを表す信号を整数ＲＳ制御部１０７に送出する（ステップＳ２９）。なお、送出の条件を満たした命令が存在していない場合には、ディスパッチなしを表す信号が整数ＲＳ制御部１０７に送出される。その後ステップＳ９に移行する。ステップＳ２９でディスパッチ有りを表す信号を送出すると、ステップＳ９でＣＡ＝０に設定されるので、処理モードが０に戻り、第１のリザベーションステーションＲＳ−Ａから演算パイプラインＡへ命令がディスパッチがなされるようになる。
【００５０】
このように処理モード＝１となれば、第２のリザベーションステーションＲＳ−Ｂは論理的に演算パイプラインから分離され、処理モード＝２となれば、第１のリザベーションステーションＲＳ−Ａは論理的に演算パイプラインから分離される。このように本実施の形態では、リザベーションステーションの状態に応じて使用できないリザベーションステーションを分離して、命令をディスパッチ可能なリザベーションステーションを有効に利用することにより演算パイプラインの有効利用を可能とするものである。
【００５１】
なお、図４に示した処理フローにおける処理モードの決定方法は一例であって管理変数に対する閾値は別の値を用いることも可能である。
【００５２】
［実施の形態２］
図５に、第２の実施の形態における概念図を示す。図５には、第１のリザベーションステーションＲＳ−Ａと、第２のリザベーションステーションＲＳ−Ｂとが設けられており、第１のリザベーションステーションＲＳ−Ａは演算パイプラインＡに対応付けられており、第２のリザベーションステーションＲＳ−Ｂは演算パイプラインＢに対応付けられているとする。よって、リザベーションステーションにディスパッチ可能な命令がない場合には演算パイプラインに命令をディスパッチできないため、演算パイプラインにバブルが発生して実行効率が落ちてしまうという問題がある。そこで、図５に示したように、例えば第１のリザベーションステーションＲＳ−Ａと、第２のリザベーションステーションＲＳ−Ｂとを１つの組として設定し、第２のリザベーションステーションＲＳ−Ｂにおいてディスパッチ可能な命令が存在しない場合には、第１のリザベーションステーションＲＳ−Ａは、所定個数の命令を選択して、図中矢印で示すように、当該命令を第２のリザベーションステーションＲＳ−Ｂに移動させる。このような構成を採用することにより、演算パイプラインの効率的な利用が図られるようになる。
【００５３】
図５に示した本実施の形態に係る概要を実装するために、例えば整数演算用ＲＳ１０６ａ（整数演算用ＲＳ１０６は、整数演算用ＲＳ１０６ａ及び整数演算用ＲＳ１０６ｂを含むものとする）は、図６及び図７に示すような構成を有する。
【００５４】
まず図６に通常モードにおける構成を示す。通常モードにおいて用いられる整数演算用ＲＳ１０６ａの構成要素は、第１乃至第Ｎのエントリ１０７１乃至１０７４と、例えばＡＮＤ回路である回路１０７５乃至１０７８と、状態判定及び選択部１０７９と、セレクタ１０８３とを含む。図６では、デコーダ１０３などとの接続線は省略されている。エントリ１０７１乃至１０７４には、演算パイプラインへのディスパッチの可否を判定するためのビットと、オペランド情報と、データの参照元・定義先などのデータが保持されている。第１のエントリ１０７１においてディスパッチの可否判定に用いられるビット格納部は回路１０７５に接続され、第２のエントリ１０７２においてディスパッチの可否判定に用いられるビット格納部は回路１０７６に接続され、第Ｎ−１のエントリ１０７３においてディスパッチの可否判定に用いられるビット格納部は回路１０７７に接続され、第Ｎのエントリ１０７４においてディスパッチの可否判定に用いられるビット格納部は回路１０７８に接続されている。また、第１乃至第Ｎのエントリ１０７１乃至１０７４は、それぞれセレクタ１０８３に接続されている。状態判定及び選択部１０７９は、回路１０７５乃至１０７８の出力とセレクタ１０８３の制御入力と、整数ＲＳ制御部１０７とに接続されている。セレクタ１０８３の出力は、当該整数演算用ＲＳ１０６ａに対応する演算パイプラインに接続されている。
【００５５】
第１のエントリ１０７１においてディスパッチの可否判定に用いられるビットは回路１０７５でＡＮＤ演算され、全てのビットが１であれば、ディスパッチ可能を表すオン信号が状態判定及び選択部１０７９に出力される。第２のエントリ１０７２乃至第Ｎのエントリ１０７４についても同様である。整数ＲＳ制御部１０７が通常モード（命令を他のリザベーションステーションに移動させることなく、対応する演算パイプラインに命令を送出するモード）を指示している場合には、状態判定及び選択部１０７９は、オン信号を出力した回路に対応するエントリのうち、優先順位の最も高いエントリに格納されているデータ（命令）を、対応する演算パイプラインにディスパッチさせるようにセレクタ１０８３に指示する。そうすると、ディスパッチ可能な命令を保持する最優先エントリから、対応する演算パイプラインに当該命令が出力される。例えば第１のエントリ１０７１の優先順位が最も高く、第Ｎのエントリ１０７４の優先順位が最も低いものとする。また、状態判定及び選択部１０７９は、回路１０７５乃至１０７８のいずれもがディスパッチ不可を表すオフ信号を出力している、すなわちいずれのエントリにもディスパッチ可能な命令が存在しないという状態を検出する場合もある。このような場合には、セレクタ１０８３にもディスパッチの指示を行わない。状態判定及び選択部１０７９は、ディスパッチを行ったか否かを表す信号を整数ＲＳ制御部１０７に出力する。
【００５６】
次に図７に特別モードにおける構成を示す。特別モードにおいて用いられる整数演算用ＲＳ１０６ａの構成要素は、第１乃至第Ｎのエントリ１０７１乃至１０７４と、例えばＡＮＤ回路である回路１０７５乃至１０７８と、状態判定及び選択部１０７９と、第１のセレクタ１０８０乃至第ｍのセレクタ１０８１とを含む。図６と同じ構成については同じ参照番号が付されている。また、図６と同様に図７ではデコーダ１０３などとの接続線は省略されている。図６との違いは、第１乃至第ｍのセレクタ１０８０乃至１０８１が設けられている点にある。第１のセレクタ１０８０の入力は、第１のエントリ１０７１からＸ（設計仕様において一意に決められる正の整数）個の奇数番号エントリと接続されている。図７の例では、第１のエントリ１０７１と第Ｎ−１のエントリ１０７３とが接続されている。また、第１のセレクタ１０８０の出力は、隣の整数演算用ＲＳ１０６ｂにおける先頭エントリに接続されている。また、第ｍのセレクタ１０８１の入力は、第ｍ以降のエントリのうち奇数番号エントリが接続されている。図７の例では、第Ｎ−１のエントリ１０７３が接続されている。第ｍのセレクタ１０８１の出力は、隣の整数演算用ＲＳ１０６ｂにおける第ｍのエントリに接続されている。
【００５７】
状態判定及び選択部１０７９は、整数ＲＳ制御部１０７から特別モードが指示されており且つ整数ＲＳ制御部１０７又は隣の整数演算用ＲＳ１０６ｂから当該整数演算用ＲＳ１０６ｂが空であることを通知されると、図６に示した構成による演算パイプラインへの命令のディスパッチとは別に、回路１０７５乃至回路１０７８からの信号を基に奇数番号エントリのうち命令を格納している上位ｍ個のエントリを選択し、第１乃至第ｍのセレクタ１０８０乃至１０８１に、選択エントリに格納された命令を隣の整数演算用ＲＳ１０６ｂにおける第１乃至第ｍのエントリに出力するように命令する。なお、状態判定及び選択部１０７９には、各セレクタに接続されているエントリの番号（ＩＤ）が登録されており、どのセレクタにどの選択エントリに格納されている命令を送出させるかを上位エントリから決定して、各セレクタにいずれのエントリから命令を送出させるか指示する。これにより、空となった隣の整数演算用ＲＳ１０６ｂにおける第１のエントリから第ｍのエントリまで命令が格納されるようになる。なお、整数演算用ＲＳ１０６ａにおける状態判定及び選択部１０７９は、整数ＲＳ制御部１０７に対して対応する演算パイプラインに命令のディスパッチを行った場合にはディスパッチ有りを表す信号を出力し、ディスパッチを行っていない場合にはディスパッチなしを表す信号を出力する。一方、整数演算用ＲＳ１０６ｂにおける状態判定及び選択部１０７９は、整数ＲＳ制御部１０７に対して、ディスパッチを行っていなくとも整数演算用ＲＳ１０６ａから命令を受領した場合には、ディスパッチ有りを表す信号を送出する。
【００５８】
このように本実施の形態においても隣接するリザベーションステーションにおいて保持する命令数に偏りが発生した場合には、演算パイプラインの有効利用を図るため、リザベーションステーション間において命令の移動を行う。なお、上での例では片方のリザベーションステーションが空になることを要件としていたが、例えば保持する命令数の差が所定数以上となった場合に、命令の移動を行うようにしてもよい。この際移動先のバッファで、エントリ１からエントリＮまでが、エントリに命令が格納された順番を守る構造になっている場合は、移動により追加される命令が、この順番を損わないことへの配慮が必要である。
【００５９】
図６及び図７に示したリザベーションステーションの詳細動作を図８に示す。なお、処理モード＝０は通常モードを表し、処理モード＝１は特別モードであって第１のリザベーションステーションＲＳ−Ａから第２のリザベーションステーションＲＳ−Ｂに命令を移動させるモードであり、処理モード＝２も特別モードであって第２のリザベーションステーションＲＳ−Ｂから第１のリザベーションステーションＲＳ−Ａに命令を移動させるモードである。
【００６０】
まず、整数ＲＳ制御部１０７は、処理モード＝０と初期化する（ステップＳ３１）。そして、処理モード＝０であるか判断する（ステップＳ３３）。処理モード＝０であれば、各リザベーションステーションの状態判定及び選択部１０７９に通常モードであることを通知する。第１のリザベーションステーションＲＳ−Ａ及び第２のリザベーションステーションＲＳ−Ｂの各々の状態判定及び選択部１０７９は、エントリ番号の小さい（優先度の高い）順に送出の条件（命令の依存関係及び演算資源の空き）を上で述べた回路１０７５乃至１０７８の出力信号により確認し、送出の条件を満たした、最初のエントリの命令をセレクタ１０８３に指示して対応する演算パイプラインに送出させる（ステップＳ３５）。いずれの命令もディスパッチ不可である場合には、演算パイプラインには出力されない。
【００６１】
また、第１のリザベーションステーションＲＳ−Ａ及び第２のリザベーションステーションＲＳ−Ｂの各々の状態判定及び選択部１０７９は、ディスパッチの有無を表す信号を整数ＲＳ制御部１０７に送出する（ステップＳ３７）。例えば、上位の空きエントリに下位エントリから命令を移動させる処理及びデコーダ１０３から命令を空きエントリに格納する処理を行った後に、自リザベーションステーションにおいて格納している命令数を整数ＲＳ制御部１０７に出力するようにしても良い。
【００６２】
整数ＲＳ制御部１０７は、第１のリザベーションステーションＲＳ−Ａのディスパッチ状態を表す管理変数ＣＡの値、第２のリザベーションステーションＲＳ−Ｂのディスパッチ状態を表す管理変数ＣＢの値を、ディスパッチの有無を表す信号に基づき更新する（ステップＳ３９）。すなわち、ディスパッチ有りを表す信号を受信すると、管理変数（ＣＡ又はＣＢ）＝０と更新する。また、ディスパッチ無しを表す信号を受信すると、管理変数（ＣＡ又はＣＢ）＝管理変数（ＣＡ又はＣＢ）＋１と更新する。そして、整数ＲＳ制御部１０７は、ＣＡ及びＣＢの値に応じて処理モードを更新する（ステップＳ４１）。ＣＡ＝０且つＣＢ＝３であれば処理モードを１に設定し、ＣＡ＝３且つＣＢ＝０であれば処理モードを２に設定する。すなわち、いずれかのリザベーションステーションから命令が送出されているが、他方のリザベーションステーションから３回連続で命令が送出されていない状態を検出している。このように発行可能な命令に偏りが生じてしまっている場合（格納された命令の数に偏りがある場合などを含む）、それを是正するために処理モードを変更する。処理モード＝１であれば、以下で詳細に説明するように第１のリザベーションステーションＲＳ−Ａから第２のリザベーションステーションＲＳ−Ｂに命令が移動される第１の特別なモードとなる。一方、処理モード＝２であれば、以下で詳細に説明するように第２のリザベーションステーションＲＳ−Ｂから第１のリザベーションステーションＲＳ−Ａに命令が移動される第２の特別なモードとなる。そしてステップＳ４１の後にステップＳ３３に戻る。
【００６３】
またステップＳ３３において処理モード＝０ではないと判断された場合、処理モード＝１であるか判断する（ステップＳ４３）。もし、処理モード＝１であれば、第１のリザベーションステーションＲＳ−Ａにおける状態判定及び選択部１０７９は、エントリ番号の小さい（優先度の高い）順に送出の条件（命令の依存関係及び演算資源の空き）を上で述べた回路１０７５乃至１０７８の出力信号により確認し、送出の条件を満たした、最初のエントリの命令をセレクタ１０８３に指示して対応する第１の演算パイプラインＡへ送出させる（ステップＳ４５）。一方、第２のリザベーションステーションＲＳ−Ｂの状態判定及び選択部１０７９は、自己の全エントリが空となっているか判断し、空となっている場合には、整数ＲＳ制御部１０７を経由して又は直接隣の第１のリザベーションステーションＲＳ−Ａに空であることを表す信号を出力する。第１のリザベーションステーションの状態判定及び選択部１０７９は、整数ＲＳ制御部１０７又は第２のリザベーションステーションＲＳ−Ｂの状態判定及び選択部１０７９から、第２のリザベーションステーションＲＳ−Ｂが空であることを表す信号を受け取ると、奇数番号のエントリであってエントリ番号の小さい順にｍ個の命令を、第１乃至第ｍのセレクタ１０８０乃至１０８１を介して第２のリザベーションステーションＲＳ−Ｂのｍ個のエントリに移動させる（ステップＳ４７）。第１のリザベーションステーションＲＳ−Ａに、ｍ個存在しない場合には、移動させられる分だけ移動させる。
【００６４】
そして、第１のリザベーションステーションＲＳ−Ａにおける状態判定及び選択部１０７９は、ディスパッチを行っていればディスパッチ有りを表す信号を、ディスパッチを行っていなければディスパッチなしを表す信号を整数ＲＳ制御部１０７に送出する（ステップＳ４９）。一方、第２のリザベーションステーションＲＳ−Ｂにおける状態判定及び選択部１０７９は、第１のリザベーションステーションＲＳ−Ａから命令を受け取って自エントリに命令を格納した場合には、ディスパッチすることなくディスパッチ有りを表す信号を整数ＲＳ制御部１０７に送出する（ステップＳ５１）。なお、第１のリザベーションステーションＲＳ−Ａから命令を受け取らなかった場合には、ディスパッチなしを表す信号を整数ＲＳ制御部１０７に送出する。その後ステップＳ３９に移行する。ステップＳ５１でディスパッチ有りを表す信号を送出すると、ステップＳ３９でＣＢ＝０に設定されるので、処理モードが０に戻り、ディスパッチ可能な命令があれば第２のリザベーションステーションＲＳ−Ｂから演算パイプラインＢへ命令がディスパッチされるようになる。
【００６５】
さらにステップＳ４３において処理モード＝１ではないと判断されると処理モード＝２であり、第２のリザベーションステーションＲＳ−Ｂにおける状態判定及び選択部１０７９は、エントリ番号の小さい（優先度の高い）順に送出の条件（命令の依存関係及び演算資源の空き）を上で述べた回路１０７５乃至１０７８の出力信号により確認し、送出の条件を満たした、最初のエントリの命令をセレクタ１０８３に指示して対応する第２の演算パイプラインＢへ送出させる（ステップＳ５３）。いずれの命令もディスパッチ不可である場合には演算パイプラインには出力されない。一方、第１のリザベーションステーションＲＳ−Ａの状態判定及び選択部１０７９は、自己の全エントリが空となっているか判断し、空となっている場合には、整数ＲＳ制御部１０７を経由して又は直接隣の第２のリザベーションステーションＲＳ−Ｂに空であることを表す信号を出力する。第２のリザベーションステーションＲＳ−Ｂの状態判定及び選択部１０７９は、整数ＲＳ制御部１０７又は第１のリザベーションステーションＲＳ−Ａの状態判定及び選択部１０７９から、第１のリザベーションステーションＲＳ−Ａが空であることを表す信号を受け取ると、奇数番号のエントリであってエントリ番号の小さい順にｍ個の命令を、第１乃至第ｍのセレクタ１０８０乃至１０８１を介して第１のリザベーションステーションＲＳ−Ａのｍ個のエントリに移動させる（ステップＳ５５）。第２のリザベーションステーションＲＳ−Ｂにｍ個の命令が存在しない場合には、移動させられる分だけ移動させる。
【００６６】
そして、第２のリザベーションステーションＲＳ−Ｂにおける状態判定及び選択部１０７９は、ディスパッチを行っていればディスパッチ有りを表す信号を、ディスパッチを行っていなければディスパッチなしを表す信号を整数ＲＳ制御部１０７に送出する（ステップＳ５７）。一方、第１のリザベーションステーションＲＳ−Ａにおける状態判定及び選択部１０７９は、第２のリザベーションステーションＲＳ−Ｂから命令を受け取って自エントリに命令を格納した場合には、ディスパッチすることなくディスパッチ有りを表す信号を整数ＲＳ制御部１０７に送出する（ステップＳ５９）。なお、第２のリザベーションステーションＲＳ−Ｂから命令を受け取らなかった場合には、ディスパッチなしを表す信号が整数ＲＳ制御部１０７に送出する。その後ステップＳ３９に移行する。ステップＳ５９でディスパッチ有りを表す信号を送出すると、ステップＳ３９でＣＡ＝０に設定されるので、処理モードが０に戻り、ディスパッチ可能な命令があれば第１のリザベーションステーションＲＳ−Ａから演算パイプラインＡへ命令がディスパッチされるようになる。
【００６７】
このように演算パイプラインに命令がディスパッチされず、リザベーションステーションにおけるエントリが空になった場合には、演算パイプラインが利用されないため利用効率が落ちる。そこで、隣のリザベーションステーションから命令を移動させて、演算パイプラインにバブルを減らして演算パイプラインの利用効率を改善する。
【００６８】
なお、図８のフローでは、空となった上位エントリに下位エントリから命令を移動させる処理及びデコーダ１０３が命令を発効する処理については触れていないが、例えばステップＳ３９以降に行えばよい。
【００６９】
また、図８のフローでは、演算パイプラインに命令がディスパッチされないことを検出してモードを切り替えるようにしているが、モードを管理することなくリザベーションステーションの命令数（空であるか又は隣のリザベーションステーションに格納された命令数との差が所定数以上であるか）に応じて命令の移動を行うようにしても良い。また、命令を移動させるか否かを、ディスパッチ可能な命令が存在しないという判断基準にする場合もある。
【００７０】
さらに、第１の実施の形態と第２の実施の形態とを組み合わせることも可能である。すなわち、例えば３回連続してディスパッチが行われず、特別なモードに移行した場合には、隣のリザベーションステーションから命令をディスパッチさせると共に、ディスパッチされない理由がリザベーションステーションが空である場合には、命令も移動させるというものである。
【００７１】
［実施の形態３］
図９（ａ）及び（ｂ）に本発明の第３の実施の形態に係る概要図を示す。本実施の形態においては、第１及び第２の実施の形態とは異なりリザベーションステーションを１つだけ設ける場合、すなわち集中型リザベーションステーションを取り扱う。図９（ａ）の例では、リザベーションステーションは、エントリＲＳ０乃至ＲＳ１５の１６個のエントリを含む。そしてリザベーションステーションのほとんど全てに命令が格納されている通常モードでは、エントリＲＳ０乃至ＲＳ３は演算パイプラインＡに対応し、エントリＲＳ４乃至ＲＳ７は演算パイプラインＢに対応し、エントリＲＳ８乃至ＲＳ１１は演算パイプラインＣに対応し、エントリＲＳ１２乃至ＲＳ１５は演算パイプラインＤに対応するように、演算パイプラインと同数の論理的なグループが定義される。リザベーションステーションにおいて各エントリには優先度が設定されており、図９（ａ）及び（ｂ）においては最も優先度が高いものは、エントリＲＳ０であり、エントリ番号が大きくなるにつれ優先度が下がるものとする。グループ内では、発行可能な命令のうち、優先度の最も高いエントリに格納されている命令が、演算パイプラインにディスパッチされる。また、上位のエントリにおいて空きが発生した場合には、下位のエントリの命令が上位のエントリに移動させられる。
【００７２】
しかし、例えばマルチスレッド方式を採用していると、各スレッドにおいて命令の依存関係などが異なりリザベーションステーションにおけるエントリの各グループから演算パイプラインにディスパッチできる命令の数も異なっている。また、リザベーションステーションにデコーダから出力される命令数もその時々に応じて異なっている。従って、常に図９（ａ）に示したようにリザベーションステーションの全エントリに命令が格納されるわけではなく、また依存関係が解消されない命令が多いと、演算パイプラインＡのバブルが多くなる。そこで、リザベーションステーションにおける命令数、リザベーションステーションから命令がディスパッチされる頻度などに基づき、エントリのグループ構成を動的に変更することによって、演算パイプラインの有効利用を図るものである。具体的には図９（ｂ）に示すように、エントリＲＳ０乃至ＲＳ２により第１のグループを構成し、演算パイプラインＡに対応付け、エントリＲＳ３乃至ＲＳ５により第２のグループを構成し、演算パイプラインＢに対応付け、エントリＲＳ６及びＲＳ７により第３のグループを構成し、演算パイプラインＣに対応付け、エントリＲＳ８及びＲＳ９により第４のグループを構成し、演算パイプラインＤに対応付ける。エントリＲＳ１０乃至ＲＳ１５については、いずれの演算パイプラインにも対応付けられずに、動作は休止状態となる。しかし、ディスパッチ可能な命令が少ない状態等では問題は無く、より古い命令が上位のエントリに移動され、優先的に演算パイプラインにディスパッチされるようになるため、命令の迅速な実行が実現される。
【００７３】
図９（ａ）及び（ｂ）に示した本実施の形態に係る概念を実装する際における回路例を図１０に示す。なお、図１の機能ブロック図において整数演算用ＲＳ１０６及び浮動小数点演算用ＲＳ１０９を複数設ける例を示したが、上でも述べたが本実施の形態では１つの整数演算用ＲＳ１０６、１つの浮動小数点演算用ＲＳ１０９が設けられている。以下、整数演算用ＲＳ１０６を例に示すが、浮動小数点演算用ＲＳ１０９でも同様である。
【００７４】
本実施の形態では、整数演算用ＲＳ１０６は、１６のエントリＲＳ０乃至ＲＳ１５と、セレクタ１１０１乃至１１３７などを含む。各エントリは、格納している命令がディスパッチ可能か否かを判断することができるものとする。デコーダ１０３は、４つの出力を有しているが、いずれもセレクタ１１０１乃至１１１６の入力に接続されている。また、上位のエントリに空きが生じた場合下位のエントリから命令を移動させるが、本実施の形態では４レベル上位のエントリまで命令を移動させることができるものとする。従って、エントリＲＳ１５に格納された命令は、エントリＲＳ１１、ＲＳ１２、ＲＳ１３及びＲＳ１４に移動させることができる。このため、エントリＲＳ１５は、エントリＲＳ１４に接続されているセレクタ１１１５の入力と、エントリＲＳ１３に接続されているセレクタ１１１４の入力と、エントリＲＳ１２に接続されているセレクタ１１１３の入力と、エントリＲＳ１１に接続されているセレクタ１１１２の入力と、接続されている。同様にして、エントリＲＳ１４に格納された命令は、エントリＲＳ１３、ＲＳ１２、ＲＳ１１及びＲＳ１０に移動させることができるようにするため、エントリＲＳ１３に接続されているセレクタ１１１４の入力と、エントリＲＳ１２に接続されているセレクタ１１１３の入力と、エントリＲＳ１１に接続されているセレクタ１１１２の入力と、エントリＲＳ１０に接続されているセレクタ１１１１の入力と、接続されている。また、エントリＲＳ１３に格納された命令は、エントリＲＳ１２、ＲＳ１１、ＲＳ１０及びＲＳ９に移動させることができるようにするため、エントリＲＳ１２に接続されているセレクタ１１１３の入力と、エントリＲＳ１１に接続されているセレクタ１１１２の入力と、エントリＲＳ１０に接続されているセレクタ１１１１の入力と、エントリＲＳ９に接続されているセレクタ１１１０の入力と、接続されている。エントリＲＳ１２に格納された命令は、エントリＲＳ１１、ＲＳ１０、ＲＳ９及びＲＳ８に移動させることができるようにするため、エントリＲＳ１１に接続されているセレクタ１１１２の入力と、エントリＲＳ１０に接続されているセレクタ１１１１の入力と、エントリＲＳ９に接続されているセレクタ１１１０の入力と、エントリＲＳ８に接続されているセレクタ１１０９の入力と、接続されている。エントリＲＳ１１に格納された命令は、エントリＲＳ１０、ＲＳ９、ＲＳ８及びＲＳ７に移動させることができるようにするため、エントリＲＳ１０に接続されているセレクタ１１１１の入力と、エントリＲＳ９に接続されているセレクタ１１１０の入力と、エントリＲＳ８に接続されているセレクタ１１０９の入力と、エントリＲＳ７に接続されているセレクタ１１０８の入力と、接続されている。エントリＲＳ１０に格納された命令は、エントリＲＳ９、ＲＳ８、ＲＳ７及びＲＳ６に移動させることができるようにするため、エントリＲＳ９に接続されているセレクタ１１１０の入力と、エントリＲＳ８に接続されているセレクタ１１０９の入力と、エントリＲＳ７に接続されているセレクタ１１０８の入力と、エントリＲＳ６に接続されているセレクタ１１０７の入力と、接続されている。エントリＲＳ９に格納された命令は、エントリＲＳ８、ＲＳ７、ＲＳ６及びＲＳ５に移動させることができるようにするため、エントリＲＳ８に接続されているセレクタ１１０９の入力と、エントリＲＳ７に接続されているセレクタ１１０８の入力と、エントリＲＳ６に接続されているセレクタ１１０７の入力と、エントリＲＳ５に接続されているセレクタ１１０６の入力と、接続されている。エントリＲＳ８に格納された命令は、エントリＲＳ７、ＲＳ６、ＲＳ５及びＲＳ４に移動させることができるようにするため、エントリＲＳ７に接続されているセレクタ１１０８の入力と、エントリＲＳ６に接続されているセレクタ１１０７の入力と、エントリＲＳ５に接続されているセレクタ１１０６の入力と、エントリＲＳ４に接続されているセレクタ１１０５の入力と、接続されている。エントリＲＳ７に格納された命令は、エントリＲＳ６、ＲＳ５、ＲＳ４及びＲＳ３に移動させることができるようにするため、エントリＲＳ６に接続されているセレクタ１１０７の入力と、エントリＲＳ５に接続されているセレクタ１１０６の入力と、エントリＲＳ４に接続されているセレクタ１１０５の入力と、エントリＲＳ３に接続されているセレクタ１１０４の入力と、接続されている。エントリＲＳ６に格納された命令は、エントリＲＳ５、ＲＳ４、ＲＳ３及びＲＳ２に移動させることができるようにするため、エントリＲＳ５に接続されているセレクタ１１０６の入力と、エントリＲＳ４に接続されているセレクタ１１０５の入力と、エントリＲＳ３に接続されているセレクタ１１０４の入力と、エントリＲＳ２に接続されているセレクタ１１０３の入力と、接続されている。エントリＲＳ５に格納された命令は、エントリＲＳ４、ＲＳ３、ＲＳ２及びＲＳ１に移動させることができるようにするため、エントリＲＳ４に接続されているセレクタ１１０５の入力と、エントリＲＳ３に接続されているセレクタ１１０４の入力と、エントリＲＳ２に接続されているセレクタ１１０３の入力と、エントリＲＳ１に接続されているセレクタ１１０２の入力と、接続されている。エントリＲＳ４に格納された命令は、エントリＲＳ３、ＲＳ２、ＲＳ１及びＲＳ０に移動させることができるようにするため、エントリＲＳ３に接続されているセレクタ１１０４の入力と、エントリＲＳ２に接続されているセレクタ１１０３の入力と、エントリＲＳ１に接続されているセレクタ１１０２の入力と、エントリＲＳ０に接続されているセレクタ１１０１の入力と、接続されている。エントリＲＳ３に格納された命令は、エントリＲＳ２、ＲＳ１、及びＲＳ０に移動させることができるようにするため、エントリＲＳ２に接続されているセレクタ１１０３の入力と、エントリＲＳ１に接続されているセレクタ１１０２の入力と、エントリＲＳ０に接続されているセレクタ１１０１の入力と、接続されている。エントリＲＳ２に格納された命令は、エントリＲＳ１、及びＲＳ０に移動させることができるようにするため、エントリＲＳ１に接続されているセレクタ１１０２の入力と、エントリＲＳ０に接続されているセレクタ１１０１の入力と、接続されている。エントリＲＳ１に格納された命令は、エントリＲＳ０に移動させることができるようにするため、エントリＲＳ０に接続されているセレクタ１１０１の入力と接続されている。
【００７５】
セレクタ１１０１は、エントリＲＳ０が空になると、エントリＲＳ１乃至ＲＳ４のうち命令を保持しており且つ優先度の最も高いエントリからの出力を選択するか、エントリＲＳ１乃至ＲＳ４のうちいずれのエントリも命令を保持していない場合にはデコーダ１０３からの４つの出力のうち最優先のものを選択して、選択した出力に係る命令をエントリＲＳ０に格納させる。セレクタ１１０１自身ではなく、エントリＲＳ０における状態判定部などが命令出力元を選択し、それに応じてセレクタ１１０１が動作するようにしても良い。以下同じである。セレクタ１１０２は、エントリＲＳ１が空になると、エントリＲＳ２乃至ＲＳ５のうち命令を保持しており且つ優先度の最も高いエントリからの出力を選択するか、エントリＲＳ２乃至ＲＳ５のうちいずれのエントリも命令を保持していない場合にはデコーダ１０３からの４つの出力のうち最優先のもの（既に選択されているものを除く。以下同じ）を選択して、選択した出力に係る命令をエントリＲＳ１に格納させる。セレクタ１１０３は、エントリＲＳ２が空になると、エントリＲＳ３乃至ＲＳ６のうち命令を保持しており且つ優先度の最も高いエントリからの出力を選択するか、エントリＲＳ３乃至ＲＳ６のうちいずれのエントリも命令を保持していない場合にはデコーダ１０３からの４つの出力のうち最優先のものを選択して、選択した出力に係る命令をエントリＲＳ２に格納させる。セレクタ１１０４は、エントリＲＳ３が空になると、エントリＲＳ４乃至ＲＳ７のうち命令を保持しており且つ優先度の最も高いエントリからの出力を選択するか、エントリＲＳ４乃至ＲＳ７のうちいずれのエントリも命令を保持していない場合にはデコーダ１０３からの４つの出力のうち最優先のものを選択して、選択した出力に係る命令をエントリＲＳ３に格納させる。セレクタ１１０５は、エントリＲＳ４が空になると、エントリＲＳ５乃至ＲＳ８のうち命令を保持しており且つ優先度の最も高いエントリからの出力を選択するか、エントリＲＳ５乃至ＲＳ８のうちいずれのエントリも命令を保持していない場合にはデコーダ１０３からの４つの出力のうち最優先のものを選択して、選択した出力に係る命令をエントリＲＳ４に格納させる。セレクタ１１０６は、エントリＲＳ５が空になると、エントリＲＳ６乃至ＲＳ９のうち命令を保持しており且つ優先度の最も高いエントリからの出力を選択するか、エントリＲＳ６乃至ＲＳ９のうちいずれのエントリも命令を保持していない場合にはデコーダ１０３からの４つの出力のうち最優先のものを選択して、選択した出力に係る命令をエントリＲＳ５に格納させる。セレクタ１１０７は、エントリＲＳ６が空になると、エントリＲＳ７乃至ＲＳ１０のうち命令を保持しており且つ優先度の最も高いエントリからの出力を選択するか、エントリＲＳ７乃至ＲＳ１０のうちいずれのエントリも命令を保持していない場合にはデコーダ１０３からの４つの出力のうち最優先のものを選択して、選択した出力に係る命令をエントリＲＳ６に格納させる。セレクタ１１０８は、エントリＲＳ７が空になると、エントリＲＳ８乃至ＲＳ１１のうち命令を保持しており且つ優先度の最も高いエントリからの出力を選択するか、エントリＲＳ８乃至ＲＳ１１のうちいずれのエントリも命令を保持していない場合にはデコーダ１０３からの４つの出力のうち最優先のものを選択して、選択した出力に係る命令をエントリＲＳ７に格納させる。
【００７６】
セレクタ１１０９は、エントリＲＳ８が空になると、エントリＲＳ９乃至ＲＳ１２のうち命令を保持しており且つ優先度の最も高いエントリからの出力を選択するか、エントリＲＳ９乃至ＲＳ１２のうちいずれのエントリも命令を保持していない場合にはデコーダ１０３からの４つの出力のうち最優先のものを選択して、選択した出力に係る命令をエントリＲＳ８に格納させる。セレクタ１１１０は、エントリＲＳ９が空になると、エントリＲＳ１０乃至ＲＳ１３のうち命令を保持しており且つ優先度の最も高いエントリからの出力を選択するか、エントリＲＳ１０乃至ＲＳ１３のうちいずれのエントリも命令を保持していない場合にはデコーダ１０３からの４つの出力のうち最優先のものを選択して、選択した出力に係る命令をエントリＲＳ９に格納させる。セレクタ１１１１は、エントリＲＳ１０が空になると、エントリＲＳ１１乃至ＲＳ１４のうち命令を保持しており且つ優先度の最も高いエントリからの出力を選択するか、エントリＲＳ１１乃至ＲＳ１４のうちいずれのエントリも命令を保持していない場合にはデコーダ１０３からの４つの出力のうち最優先のものを選択して、選択した出力に係る命令をエントリＲＳ１０に格納させる。セレクタ１１１２は、エントリＲＳ１１が空になると、エントリＲＳ１２乃至ＲＳ１５のうち命令を保持しており且つ優先度の最も高いエントリからの出力を選択するか、エントリＲＳ１２乃至ＲＳ１５のうちいずれのエントリも命令を保持していない場合にはデコーダ１０３からの４つの出力のうち最優先のものを選択して、選択した出力に係る命令をエントリＲＳ１１に格納させる。セレクタ１１１３は、エントリＲＳ１２が空になると、エントリＲＳ１３乃至ＲＳ１５のうち命令を保持しており且つ優先度の最も高いエントリからの出力を選択するか、エントリＲＳ１３乃至ＲＳ１５のうちいずれのエントリも命令を保持していない場合にはデコーダ１０３からの４つの出力のうち最優先のものを選択して、選択した出力に係る命令をエントリＲＳ１２に格納させる。セレクタ１１１４は、エントリＲＳ１３が空になると、エントリＲＳ１４及びＲＳ１５のうち命令を保持しており且つ優先度の最も高いエントリからの出力を選択するか、エントリＲＳ１４及びＲＳ１５のうちいずれのエントリも命令を保持していない場合にはデコーダ１０３からの４つの出力のうち最優先のものを選択して、選択した出力に係る命令をエントリＲＳ１３に格納させる。セレクタ１１１５は、エントリＲＳ１４が空になると、エントリＲＳ１５からの出力を選択するか、エントリＲＳ１５が命令を保持していない場合にはデコーダ１０３からの４つの出力のうち最優先のものを選択して、選択した出力に係る命令をエントリＲＳ１４に格納させる。セレクタ１１１６は、エントリＲＳ１５が空になると、デコーダ１０３からの４つの出力のうち最優先のものを選択して、選択した出力に係る命令をエントリＲＳ１５に格納させる。エントリＲＳｉに命令を格納する場合、デコーダ１０３からの４つの出力の命令を格納する場合がある。複数のエントリが、デコーダ１０３からの命令を格納する場合には、エントリ１１０１から１１１６の順番で、デコーダ１０３からの命令の優先順位の高いものを格納する。優先順位の高いエントリに格納がきまった命令は、下位の優先順位のエントリへの格納対象とはならない。
【００７７】
エントリＲＳ０乃至ＲＳ２は、整数ＲＳ制御部１０７に接続されており、整数ＲＳ制御部１０７は、エントリＲＳ０乃至ＲＳ２からの出力に応じて動作モードを、Ｙ，Ｒ，Ｂ及びＧのいずれかに設定する。そして、動作モードＹであれば、整数ＲＳ制御部１０７は、セレクタ１１２１乃至１１２４をイネーブルする。さらに、動作モードＲであれば、整数ＲＳ制御部１０７は、セレクタ１１２５乃至１１２８をイネーブルする。動作モードＢであれば、整数ＲＳ制御部１０７は、セレクタ１１２９乃至１１３２をイネーブルする。動作モードＧであれば、整数ＲＳ制御部１０７は、セレクタ１１３３をイネーブルする。
【００７８】
セレクタ１１２１の入力はエントリＲＳ０乃至ＲＳ３に接続され、セレクタ１１２２の入力はエントリＲＳ４乃至ＲＳ７に接続され、セレクタ１１２３の入力はエントリＲＳ８乃至ＲＳ１１に接続され、セレクタ１１２４の入力はエントリＲＳ１２乃至ＲＳ１５に接続されている。セレクタ１１２１は、セレクタ１１３４に接続されており、ディスパッチ可能な命令を保持しているエントリのうち最も優先度の高いエントリの命令を、セレクタ１１３４を介して演算パイプラインＡに出力する。セレクタ１１２２は、セレクタ１１３５に接続されており、ディスパッチ可能な命令を保持しているエントリのうち最も優先度の高いエントリの命令を、セレクタ１１３５を介して演算パイプラインＢに出力する。さらに、セレクタ１１２３は、セレクタ１１３６に接続されており、ディスパッチ可能な命令を保持しているエントリのうち最も優先度の高いエントリの命令を、セレクタ１１３６を介して演算パイプラインＣに出力する。セレクタ１１２４は、セレクタ１１３７に接続されており、ディスパッチ可能な命令を保持しているエントリのうち最も優先度の高いエントリの命令を、セレクタ１１３７を介して演算パイプラインＤに出力する。
【００７９】
このように動作モードＹであれば、エントリＲＳ０乃至ＲＳ３、エントリＲＳ４乃至ＲＳ７、エントリＲＳ８乃至ＲＳ１１、エントリＲＳ１２乃至ＲＳ１５により、グループが構成されている。
【００８０】
また、セレクタ１１２５の入力はエントリＲＳ０乃至ＲＳ２に接続され、セレクタ１１２６の入力はエントリＲＳ３乃至ＲＳ５に接続され、セレクタ１１２７の入力はエントリＲＳ６乃至ＲＳ８に接続され、セレクタ１１２８の入力はエントリＲＳ９乃至ＲＳ１２に接続されている。セレクタ１１２５は、セレクタ１１３４に接続されており、ディスパッチ可能な命令を保持しているエントリのうち最も優先度の高いエントリの命令を、セレクタ１１３４を介して演算パイプラインＡに出力する。セレクタ１１２６は、セレクタ１１３５に接続されており、ディスパッチ可能な命令を保持しているエントリのうち最も優先度の高いエントリの命令を、セレクタ１１３５を介して演算パイプラインＢに出力する。セレクタ１１２７は、セレクタ１１３６に接続されており、ディスパッチ可能な命令を保持しているエントリのうち最も優先度の高いエントリの命令を、セレクタ１１３６を介して演算パイプラインＣに出力する。セレクタ１１２８は、セレクタ１１３７に接続されており、ディスパッチ可能な命令を保持しているエントリのうち最も優先度の高いエントリの命令を、セレクタ１１３７を介して演算パイプラインＤに出力する。
【００８１】
このように動作モードＲであれば、エントリＲＳ０乃至ＲＳ２、エントリＲＳ３乃至ＲＳ５、エントリＲＳ６乃至ＲＳ８、エントリＲＳ９乃至ＲＳ１２により、グループが構成されている。
【００８２】
さらに、セレクタ１１２９の入力はエントリＲＳ０及びＲＳ１に接続され、セレクタ１１３０の入力はエントリＲＳ２及びＲＳ３に接続され、セレクタ１１３１の入力はエントリＲＳ４及びＲＳ５に接続され、セレクタ１１３２の入力はエントリＲＳ６乃至ＲＳ９に接続されている。セレクタ１１２９は、セレクタ１１３４に接続されており、ディスパッチ可能な命令を保持しているエントリのうち最も優先度の高いエントリの命令を、セレクタ１１３４を介して演算パイプラインＡに出力する。セレクタ１１３０は、セレクタ１１３５に接続されており、ディスパッチ可能な命令を保持しているエントリのうち最も優先度の高いエントリの命令を、セレクタ１１３５を介して演算パイプラインＢに出力する。セレクタ１１３１は、セレクタ１１３６に接続されており、ディスパッチ可能な命令を保持しているエントリのうち最も優先度の高いエントリの命令を、セレクタ１１３６を介して演算パイプラインＣに出力する。セレクタ１１３２は、セレクタ１１３７に接続されており、ディスパッチ可能な命令を保持しているエントリのうち最も優先度の高いエントリの命令を、セレクタ１１３７を介して演算パイプラインＤに出力する。
【００８３】
このように動作モードＢであれば、エントリＲＳ０及びＲＳ１、エントリＲＳ２及びＲＳ３、エントリＲＳ４及びＲＳ５、エントリＲＳ６乃至ＲＳ９により、グループが構成されている。
【００８４】
また、エントリＲＳ０は直接セレクタ１１３４に接続されており、エントリＲＳ１は直接セレクタ１１３５に接続されており、エントリＲＳ２は直接セレクタ１１３６に接続されており、セレクタ１１３３の入力はエントリＲＳ３乃至ＲＳ６に接続されている。セレクタ１１３３は、セレクタ１１３７に接続されており、ディスパッチ可能な命令を保持しているエントリのうち最も優先度の高いエントリの命令を、セレクタ１１３７を介して演算パイプラインＤに出力する。
【００８５】
このように動作モードＧであれば、エントリＲＳ０、エントリＲＳ１、エントリＲＳ２、エントリＲＳ３乃至ＲＳ６によりグループが構成されている。
【００８６】
次に図１１及び図１２を用いて図１０に示した整数演算用ＲＳ１０６及び整数ＲＳ制御部１０７等の詳細な動作を説明する。まず、整数演算用ＲＳ１０６は、動作モード初期値をＧに設定する（ステップＳ６１）。次に、動作モード値（Ｙ／Ｒ／Ｂ／Ｇ）に従って、対応するセレクタ・グループをイネーブルする（ステップＳ６３）。動作モードがＹであればセレクタ１１２１乃至１１２４をイネーブルし、動作モードがＲであればセレクタ１１２５乃至１１２８をイネーブルし、動作モードがＢであればセレクタ１１２９乃至１１３２をイネーブルし、動作モードがＧであればセレクタ１１３３をイネーブルする。
【００８７】
そして、動作モードで一意に決まるリザベーションステーションの各グループにおいて、エントリ番号の小さい（優先度の高い）順に送出の条件（命令の依存関係及び演算資源の空き）を確認し、送出の条件を満たした、最初のエントリの命令を、対応する演算パイプラインに送出させる（ステップＳ６５）。同時に、エントリＲＳ０、ＲＳ１及びＲＳ２は、すでにデータの依存関係が解消されているか、次のサイクルでバイパス操作によりデータの依存関係が解消される（○）、解消されない（×）又はエントリ空き（△）のいずれかを表す信号を整数ＲＳ制御部１０７に出力する（ステップＳ６７）。
【００８８】
整数ＲＳ制御部１０７は、エントリＲＳ０乃至ＲＳ２からの信号を受け取り、依存関係の解消状況及びエントリの空き状況に応じて動作モード値を設定する（ステップＳ６９）。動作モード値は、図１２に示すテーブルに基づいて設定される。図１２は、ＲＳ０、ＲＳ１及びＲＳ２の状態組合せに応じてモード値が定義されている。テーブルにおいて「−」は、いずれの場合でも良いことを表す。また、最後の３行はその他の具体的状態組合せを示す。このように、３つのエントリの状態で、エントリの空き状況、エントリから演算パイプラインへの命令ディスパッチ状況、若しくはその両方を推定し、それに応じて適切な動作モードを特定する。処理は、その後ステップＳ６３に戻る。なお、上位エントリに空きが生じた場合における下位エントリからの命令の移動（バブルアップとも呼ぶ）及びデコーダ１０３からの命令の発行については、従来と同じであるから図１１では説明を省略しているが、例えばステップＳ６９と同時又はその後に実行する。
【００８９】
以上述べたように、エントリの空き状況、エントリから演算パイプラインへの命令ディスパッチの状況などに応じて、エントリのグループ構成を動的に変更することにより、古い命令を優先的に実行させ、且つ演算パイプラインを効率的に利用できるようになる。
【００９０】
なお、図１１及び図１２は、一例であって、モードの数、ＲＳ制御部が参照するエントリの数は、変更することが可能である。但し、場合によっては複雑さが増加してしまい、ペナルティを払う必要が生ずる場合もある。また、図１２に示したテーブルの内容についても、モード数、ＲＳ制御部が参照するエントリの数などを変更しなかったとしても、チューニングによっては変わる場合もある。
【００９１】
さらに、ステップＳ６５とステップＳ６７については同時に行うような例を示しているが、ステップＳ６５とステップＳ６７を同時に行うことなく、ステップＳ６５を実施し且つバブルアップを実行した後にエントリＲＳ０乃至ＲＳ２に格納された命令に対してステップＳ６７を実行するようにしても良い。さらに、ステップＳ６７において、レジスタベースで命令の依存関係が解消されている場合も、データの依存関係が解消される（○）ことを表す信号をＲＳ制御部に出力しても良い。
【００９２】
［実施の形態４］
図１３（ａ）及び（ｂ）に本発明の第４の実施の形態に係る概要図を示す。本実施の形態は、物理的に１つのリザベーションステーションを、論理的に複数のリザベーションステーションに見せて使用する機構に関するものである。
【００９３】
図１３（ａ）及び（ｂ）の例では、１つのリザベーションステーションに１６のエントリＲＳ０乃至ＲＳ１５を設け、グループ１を構成するエントリＲＳ０、ＲＳ４、ＲＳ８及びＲＳ１２をセレクタＳＬ４を介して演算パイプラインＡに接続し、グループ２を構成するエントリＲＳ１、ＲＳ５、ＲＳ９及びＲＳ１３をセレクタＳＬ３を介して演算パイプラインＢに接続し、グループ３を構成するエントリＲＳ２、ＲＳ６、ＲＳ１０及びＲＳ１４をセレクタＳＬ２を介して演算パイプラインＣに接続し、グループ４を構成するエントリＲＳ３、ＲＳ７、ＲＳ１１及びＲＳ１５をセレクタＳＬ１を介して演算パイプラインＤに接続する。なお、エントリＲＳ０の方が優先度が上位であり、エントリＲＳ１５の方が優先度が下位であるものとする。そして、各セレクタでは、ディスパッチ可能な命令を保持するエントリのうち最も高い優先度を有するエントリが保持する命令を演算パイプラインに出力するように動作する。また、上位のエントリから命令がディスパッチされると、下位のエントリから上位の空きエントリに命令が移動される。
【００９４】
このような構成を採用すると、図１３（ａ）のように全エントリに命令が格納されていない場合、すなわち図１３（ｂ）のようにエントリＲＳ１１乃至ＲＳ１５に命令が格納されていないような場合であっても、各演算パイプラインにはいずれかのエントリがセレクタを介して接続されているため、演算パイプラインのバブルを最小限に抑えることができる。
【００９５】
図１４に本実施の形態に係る詳細な回路例を示す。図１４ではエントリ数が９のリザベーションステーションを用いる例が示されている。本実施の形態におけるリザベーションステーションは、エントリＲＳ０乃至ＲＳ８、セレクタ１２０１乃至１２１２などを含む。デコーダ１０３の２つの出力は、それぞれセレクタ１２０１乃至１２０９に接続されている。また、本実施の形態では全ての下位エントリから上位エントリへ命令を移動させることができるようになっている。すなわち、エントリＲＳ８に接続されているセレクタ１２０９の入力には、デコーダ１０３の出力のみが接続されているが、エントリＲＳ７に接続されているセレクタ１２０８の入力には、エントリＲＳ８とデコーダ１０３の出力とが接続されている。エントリＲＳ６に接続されているセレクタ１２０７の入力には、エントリＲＳ７及びＲＳ８とデコーダ１０３の出力とが接続されている。エントリＲＳ５に接続されているセレクタ１２０６の入力には、エントリＲＳ６乃至ＲＳ８とデコーダ１０３の出力とが接続されている。エントリＲＳ４に接続されているセレクタ１２０５の入力には、エントリＲＳ５乃至ＲＳ８とデコーダ１０３の出力とが接続されている。エントリＲＳ３に接続されているセレクタ１２０４の入力には、エントリＲＳ４乃至ＲＳ８とデコーダ１０３の出力とが接続されている。エントリＲＳ２に接続されているセレクタ１２０３の入力には、エントリＲＳ３乃至ＲＳ８とデコーダ１０３の出力とが接続されている。エントリＲＳ１に接続されているセレクタ１２０２の入力には、エントリＲＳ２乃至ＲＳ８とデコーダ１０３の出力とが接続されている。エントリＲＳ０に接続されているセレクタ１２０１の入力には、エントリＲＳ１乃至ＲＳ８とデコーダ１０３の出力とが接続されている。
【００９６】
セレクタ１２０１は、エントリＲＳ１乃至ＲＳ８のうち空でなく且つ優先順位が最も高いエントリの命令、または当該命令が存在しない場合にはデコーダ１０３が発行した命令を、エントリＲＳ０に出力する。セレクタ１２０１自身ではなく、エントリＲＳ０における状態判定部などが命令出力元を選択し、それに応じてセレクタ１２０１が動作するようにしても良い。以下同じである。同様に、セレクタ１２０２は、エントリＲＳ２乃至ＲＳ８のうち空でなく且つ優先順位が最も高いエントリの命令、または当該命令が存在しない場合にはデコーダ１０３が発行した命令を、エントリＲＳ１に出力する。セレクタ１２０３は、エントリＲＳ３乃至ＲＳ８のうち空でなく且つ優先順位が最も高いエントリの命令、または当該命令が存在しない場合にはデコーダ１０３が発行した命令を、エントリＲＳ２に出力する。セレクタ１２０４は、エントリＲＳ４乃至ＲＳ８のうち空でなく且つ優先順位が最も高いエントリの命令、または当該命令が存在しない場合にはデコーダ１０３が発行した命令を、エントリＲＳ３に出力する。セレクタ１２０５は、エントリＲＳ５乃至ＲＳ８のうち空でなく且つ優先順位が最も高いエントリの命令、または当該命令が存在しない場合にはデコーダ１０３が発行した命令を、エントリＲＳ４に出力する。セレクタ１２０６は、エントリＲＳ６乃至ＲＳ８のうち空でなく且つ優先順位が最も高いエントリの命令、または当該命令が存在しない場合にはデコーダ１０３が発行した命令を、エントリＲＳ５に出力する。セレクタ１２０７は、エントリＲＳ７及びＲＳ８のうち空でなく且つ優先順位が最も高いエントリの命令、または当該命令が存在しない場合にはデコーダ１０３が発行した命令を、エントリＲＳ６に出力する。セレクタ１２０８は、エントリＲＳ８のうち空でなく且つ優先順位が最も高いエントリの命令、または当該命令が存在しない場合にはデコーダ１０３が発行した命令を、エントリＲＳ７に出力する。
【００９７】
エントリＲＳ０、ＲＳ３及びＲＳ６はセレクタ１２１０の入力に接続され、エントリＲＳ１、ＲＳ４及びＲＳ７はセレクタ１２１１の入力に接続され、エントリＲＳ２、ＲＳ５及びＲＳ８はセレクタ１２１２の入力に接続されている。セレクタ１２１０は、ディスパッチ可能な命令を保持しており且つ最も優先度が高いエントリが保持している命令を演算パイプラインＡに出力する。セレクタ１２１１は、ディスパッチ可能な命令を保持しており且つ最も優先度が高いエントリが保持している命令を演算パイプラインＢに出力する。さらに、セレクタ１２１２は、ディスパッチ可能な命令を保持しており且つ最も優先度が高いエントリが保持している命令を演算パイプラインＣに出力する。
【００９８】
本実施の形態では、命令数、命令のディスパッチ頻度などに基づいてモードの切り替えを行うまでもなく、各演算パイプラインに複数のエントリが上位から下位に分散して割り当てられているので、演算パイプラインの有効利用が図られる。
【００９９】
より具体的に本実施の形態の動作及び効果を考察する。例えば、図１５（ａ）に示すように、スレッドＡとスレッドＢとが存在しており、スレッドＡの命令を１つのリザベーションステーションから対応する演算パイプラインに、スレッドＢの命令を他の１つのリザベーションステーションから対応する演算パイプラインに出力するものとする。この際、スレッドＡについては、各命令について依存関係があり、１つの命令につき完全に演算が終了しない限り次の命令を実行できず、スレッドＢについてはそのような制限はないものとする。図１５（ａ）のような従来のリザベーションステーションの構成であれば、図１５（ｂ）に示すように、第８サイクル完了時までにスレッドＢについてはＢ−ｉ６までしか実行できない。
【０１００】
一方、図１６（ａ）に示すように本実施の形態に係る構成を採用して、１つのリザベーションステーションを用い、２つの演算パイプラインに命令をエントリのグループ毎に出力するものとした場合、図１６（ｂ）に示すように第８サイクル完了時にＢ−ｉ１０まで実行することができる。なお、図１６（ａ）に示すように、リザベーションステーションに初期的にスレッドＡの命令Ａ−ｉ１乃至Ａ−ｉ３とスレッドＢの命令Ｂ−ｉ１乃至Ｂ−ｉ３とが交互に、さらにＢ−ｉ４乃至Ｂ−ｉ６が順番に蓄えられている場合、まず第１サイクルの開始時に演算パイプラインＡにはスレッドＡの命令Ａ−ｉ１が出力され、演算パイプラインＢにスレッドＢの命令Ｂ−ｉ１が出力される。従って図１６（ｃ）に示すように、リザベーションステーションには、第１サイクルでは、バブルアップ及びデコーダからの命令発行により、命令Ａ−ｉ２及びＡ−ｉ３、命令Ｂ−ｉ２乃至Ｂ−ｉ７が保持されるようになる。なお、命令Ｂ−ｉ７がデコーダにより新たに発行された命令である。
【０１０１】
そして、第２サイクルの開始時に、演算パイプラインＡについては、命令Ａ−ｉ２及びＡ−ｉ３を出力できないので、命令Ｂ−ｉ４が出力され、演算パイプラインＢには、命令Ｂ−ｉ２が出力される。従って、第２サイクルでは、バブルアップ及びデコーダからの命令発行により、リザベーションステーションにおいて、命令Ａ−ｉ２及びＡ−ｉ３、命令Ｂ−ｉ３，Ｂ−ｉ５乃至Ｂ−ｉ８が保持されるようになる。なお、命令Ｂ−ｉ８がデコーダにより新たに発行された命令である。その後、第３サイクルの開始時に、演算パイプラインＡについては、命令Ａ−ｉ２を出力できないので、命令Ｂ−ｉ３が出力され、演算パイプラインＢには命令Ａ−ｉ３を出力できないので、命令Ｂ−ｉ５が出力される。従って、第３サイクルでは、バブルアップ及びデコーダからの命令発行により、リザベーションステーションにおいて、命令Ａ−ｉ２及びＡ−ｉ３、命令Ｂ−ｉ６乃至Ｂ−ｉ９が保持されるようになる。なお、命令Ｂ−ｉ９がデコーダにより新たに発行された命令である。
【０１０２】
さらにその後、第４サイクルの開始時に、演算パイプラインＡについては、命令Ａ−ｉ２が出力できるようになったのでこれが出力され、演算パイプラインＢには命令Ａ−ｉ３を出力できないので、命令Ｂ−ｉ７が出力される。従って、第４サイクルでは、バブルアップ及びデコーダからの命令発行により、リザベーションステーションにおいて、命令Ａ−ｉ３、命令Ｂ−ｉ６、命令Ｂ−ｉ８乃至Ｂ−ｉ１０が保持されるようになる。なお、命令Ｂ−ｉ１０がデコーダにより新たに発行された命令である。さらにその後、第５サイクルの開始時に、演算パイプラインＡについては、命令Ａ−ｉ３を出力することができないので命令Ｂ−ｉ８が出力され、演算パイプラインＢには命令Ｂ−ｉ６が出力される。従って、第５サイクルでは、リザベーションステーションにおいて、バブルアップにより、命令Ａ−ｉ３、命令Ｂ−ｉ９及びＢ−ｉ１０が保持されるようになる。さらにその後、第６サイクルの開始時に、演算パイプラインＡについては、命令Ａ−ｉ３を出力することができないので命令Ｂ−ｉ１０が出力され、演算パイプラインＢには命令Ｂ−ｉ９が出力される。従って、第６サイクルでは、リザベーションステーションにおいて、バブルアップにより、命令Ａ−ｉ３のみが保持されるようになる。そして、第７サイクルになると、命令Ａ−ｉ３が出力可能となって、演算パイプラインＡに出力される。以上のように、明らかに本実施の形態の方が従来の方式よりスループットが向上している。
【０１０３】
以上本発明の実施の形態を説明したが、本発明はこれに限定されるものではない。例えば、第１の実施の形態に係る構成を、例えば第３の実施の形態の１つのエントリに適用するようにしても良い。同様に、第１の実施の形態に係る構成を、例えば第４の実施の形態の１つのエントリに適用するようにしても良い。さらに、図で示した回路サイズは説明の都合により決定されているので、実際のプロセッサ装置において適用する場合に、その数については任意で設定することが可能である。
【０１０４】
また、第１及び第２の実施の形態では、２つのリザベーションステーションを組にして、片方に演算パイプラインに対してディスパッチを行えない状態が発生すると、他方のリザベーションステーションが代わりにディスパッチを行うか、命令の移動を行うようにしているが、３以上のリザベーションステーションを組にするようにしても良い。
【図１】
2010282668.tif 000003
【図２】
2010282668.tif 000004
【図３】
2010282668.tif 000005
【図４】
2010282668.tif 000006
【図５】
2010282668.tif 000007
【図６】
2010282668.tif 000008
【図７】
2010282668.tif 000009
【図８】
2010282668.tif 000010
【図９】
2010282668.tif 000011
【図１０】
2010282668.tif 000012
【図１１】
2010282668.tif 000013
【図１２】
2010282668.tif 000014
【図１３】
2010282668.tif 000015
【図１４】
2010282668.tif 000016
【図１５】
2010282668.tif 000017
【図１６】
2010282668.tif 000018