(57)【要約】複数のスレッドを同時マルチスレッド方式で動作するための命令実行制御装置において、アーキテクチャレジスタ（２２−０，２２−１）をスレッドごとに備え、レジスタファイル（２０）から機能の実行に必要なオペランドデータを読み出す場合に、あらかじめレジスタファイル（２０）から読み出すスレッドを選択する選択回路（３２，２４）を設ける。早い段階でアーキテクチャレジスタの選択を行うことが可能となり、アーキテクチャレジスタを選択する部分の回路は増えるが、回路の配線量については読み出すスレッドのアーキテクチャレジスタの選択を行っていることで削減をすることが可能となる。
2008155799.tif 000002
【特許請求の範囲】
【請求項１】
アウト・オブ・オーダー実行を処理するための演算処理と主記憶オペランドアドレス生成を制御するリザベーションステーションと、
機能の実行によって得られるデータを格納するレジスタ更新バッファと、
複数のスレッドが同時マルチスレッド方式で動作するための、スレッドごとのアーキテクチャレジスタと、同時に読み出すことのできるスレッド数がアーキテクチャレジスタのスレッド数より少ないスレッド数に制限する読み出しスレッド選択回路とを有するレジスタファイルと、
前記リザベーションステーションのエントリの実行により、前記レジスタファイルからオペランドデータを読み出すときは、前記エントリの実行前に、前記エントリの読み出しスレッドを選択して、前記読出しスレッド選択回路を制御するスレッド選択回路とを有し、
前記エントリの演算又はオペランド生成の実行時に、前記スレッド選択回路で選択されたスレッドのアーキテクチャレジスタからオペランドデータを読み出すことを
特徴とする命令実行制御装置。
【請求項２】
請求項１の命令実行制御装置において、
前記リザベーションステーションは、演算とオペランドアドレス生成に必要なオペランドデータを、前記レジスタ更新バッファや即値から読み出す場合には、同時に読み出すことのできるスレッド数を制限しないことを
特徴とする命令実行制御装置。
【請求項３】
請求項１の命令実行制御装置において、
前記リザベーションステーションの前記エントリによる命令の実行によって得られるデータを、前記レジスタ更新バッファに格納して、前記リザベーションステーションから実行した命令が完了した時に、前記レジスタ更新バッファのオペランドデータを、前記アーキテクチャレジスタに格納することを
特徴とする命令実行制御装置。
【請求項４】
請求項１の命令実行制御装置において、
前記リザベーションステーションは、
前記リザベーションステーションのエントリが、前記レジスタファイルからオペランドデータを読み出す必要のあるかを判定し、且つ前記スレッド選択回路で選択されたエントリのスレッドと一致するかを判定し、前記エントリが、前記レジスタファイルからの読み出しが必要で、前記スレッドと一致したエントリを、前記実行のため選択することを
特徴とする命令実行制御装置。
【請求項５】
請求項４の命令実行制御装置において、
前記リザベーションステーションは、
前記判定により、機能の実行に必要なオペランドデータを前記レジスタ更新バッファから読み出し、即値を使用することができるエントリを、エントリのスレッドに関係なく実行するエントリに選択することを
特徴とする命令実行制御装置。
【請求項６】
請求項１の命令実行制御装置において、
前記スレッド選択回路は、
前記レジスタファイルから読み出すことのできるスレッドを、特定のスレッドに限定しなければならないこと検出して、前記特定のスレッドを選択することを
特徴とする命令実行制御装置。
【請求項７】
請求項６の命令実行制御装置において、
前記スレッド選択回路は、
前記レジスタファイルから読み出すことのできるスレッドを、特定のスレッドに限定する必要がないこと検出して、動作しているスレッドを示す信号により、動作していないスレッドの選択を禁止することを
特徴とする命令実行制御装置。
【請求項８】
請求項６の命令実行制御装置において、
前記スレッド選択回路は、
前記レジスタファイルから読み出すことのできるスレッドを、特定のスレッドに限定する必要がないこと検出して、動作しているスレッドで、リザベーションステーションのエントリに１つも実行できない状態であるスレッドが存在するかを判定し、前記スレッドが存在すると判定した時に、動作している他のスレッドのエントリから発行できる状態であるスレッドが存在する場合、１つも発行できない状態であるスレッドのスレッド選択を禁止する
ことを特徴とする命令実行制御装置。
【請求項９】
請求項６の命令実行制御装置において、
前記スレッド選択回路は、
前記レジスタファイルから読み出すことのできるスレッドを、特定のスレッドに限定する必要がないこと検出して、一定期間完了できない命令がリザベーションステーションのエントリに存在するかを判定し、前記エントリが存在すると判定した場合、一定間隔で、前記完了できていないスレッドのエントリを選択する
ことを特徴とする命令実行制御装置。
【請求項１０】
請求項６の命令実行制御装置において、
前記スレッド選択回路は、
前記レジスタファイルから読み出すことのできるスレッドを、特定のスレッドに限定する必要がないこと検出して、前記スレッド選択回路で選択されていない時間が最も長いスレッドを選択する
ことを特徴とする命令実行制御装置。
【請求項１１】
リザベーションステーションにより、演算器及び主記憶オペランド生成器に、アウト・オブ・オーダー実行の処理を制御するステップと、
前記実行によって得られるデータを、レジスタ更新バッファに格納するステップと、
前記リザベーションステーションのエントリの実行により、前記レジスタファイルからオペランドデータを読み出すときは、前記エントリの実行前に、前記エントリの読み出しスレッドを選択するステップと、
同時マルチスレッド方式のスレッドごとのアーキテクチャレジスタと、同時に読み出すことのできるスレッド数がアーキテクチャレジスタのスレッド数より少ないスレッド数に制限する読み出しスレッド選択回路とを有するレジスタファイルを、前記読み出しスレッドで選択するステップと、
前記エントリの演算又はオペランド生成の実行時に、前記スレッド選択回路で選択されたスレッドのアーキテクチャレジスタからオペランドデータを読み出すステップとを有することを
特徴とする命令実行制御方法。
【請求項１２】
請求項１１の命令実行制御方法において、
前記演算とオペランドアドレス生成に必要なオペランドデータを、前記レジスタ更新バッファや即値から読み出す場合には、同時に読み出すことのできるスレッド数の制限を禁止するステップを更に有することを
特徴とする命令実行制御方法。
【請求項１３】
請求項１１の命令実行制御方法において、
前記エントリによる命令の実行によって得られるデータを、前記レジスタ更新バッファに格納して、前記エントリの命令が完了した時に、前記レジスタ更新バッファのオペランドデータを、前記アーキテクチャレジスタに格納するステップを更に有することを
特徴とする命令実行制御方法。
【請求項１４】
請求項１１の命令実行制御方法において、
前記制御ステップは、
前記リザベーションステーションのエントリが、前記レジスタファイルからオペランドデータを読み出す必要のあるかを判定するステップと、
前記スレッド選択回路で選択されたエントリのスレッドと一致するかを判定するステップと、
前記エントリが、前記読み出しが必要で、前記スレッドと一致したエントリを、前記実行のため選択するステップとを有することを
特徴とする命令実行制御方法。
【請求項１５】
請求項１４の命令実行制御方法において、
前記制御ステップは、
前記判定により、機能の実行に必要なオペランドデータを前記レジスタ更新バッファから読み出し、即値を使用することができるエントリを、エントリのスレッドに関係なく実行するエントリに選択するステップを有することを
特徴とする命令実行制御方法。
【請求項１６】
請求項１１の命令実行制御方法において、
前記スレッド選択ステップは、
前記レジスタファイルから読み出すことのできるスレッドを、特定のスレッドに限定しなければならないこと検出して、前記特定のスレッドを選択するステップからなることを
特徴とする命令実行制御方法。
【請求項１７】
請求項１６の命令実行制御方法において、
前記スレッド選択ステップは、
前記レジスタファイルから読み出すことのできるスレッドを、特定のスレッドに限定する必要がないこと検出して、動作しているスレッドを示す信号により、動作していないスレッドの選択を禁止するステップからなることを
特徴とする命令実行制御方法。
【請求項１８】
請求項１６の命令実行制御方法において、
前記スレッド選択ステップは、
前記レジスタファイルから読み出すことのできるスレッドを、特定のスレッドに限定する必要がないこと検出して、動作しているスレッドで、リザベーションステーションのエントリに１つも実行できない状態であるスレッドが存在するかを判定するステップと、
前記スレッドが存在すると判定した時に、動作している他のスレッドのエントリから発行できる状態であるスレッドが存在する場合、１つも発行できない状態であるスレッドのスレッド選択を禁止するステップとからなる
ことを特徴とする命令実行制御方法。
【請求項１９】
請求項１６の命令実行制御方法において、
前記スレッド選択ステップは、
前記レジスタファイルから読み出すことのできるスレッドを、特定のスレッドに限定する必要がないこと検出して、一定期間完了できない命令がリザベーションステーションのエントリに存在するかを判定するステップと、
前記エントリが存在すると判定した場合、一定間隔で、前記完了できていないスレッドのエントリを選択するステップからなる
ことを特徴とする命令実行制御方法。
【請求項２０】
請求項１６の命令実行制御方法において、
前記スレッド選択ステップは、
前記レジスタファイルから読み出すことのできるスレッドを、特定のスレッドに限定する必要がないこと検出して、前記スレッド選択回路で選択されていない時間が最も長いスレッドを選択するステップからなる
ことを特徴とする命令実行制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、複数のスレッドが、同時マルチスレッド方式で動作して、アウト・オブ・オーダー処理で、命令制御を行う命令実行制御装置及び命令実行制御方法に関し、特に、同時マルチスレッド方式で動作するレジスタファイルの読み出し制御を行う命令実行制御装置及び命令実行制御方法に関する。
【背景技術】
【０００２】
ＣＰＵ（Central Processor Unit）の処理の高速化が、要求されている。このため、従来から様々な技術を使用してＣＰＵの処理を向上させてきた。その方法として、パイプライン処理や、並列に処理を行うスーパースカラ方式や、プログラム命令の順番通りに実行を行わずに、入力データが揃った命令から実行を行うアウト・オブ・オーダー実行方式がある。【０００３】
アウト・オブ・オーダー実行方式は、先の命令処理に必要なデータが揃っていなくても、後の命令処理に必要なデータが揃っていた場合、後の命令から先に実行するＣＰＵの性能を向上するための技術である（例えば、特許文献１参照）。【０００４】
例えば、プログラムに記述された順に命令を処理する場合に、先の命令処理１が、メモリアクセスを伴う命令であり、後の命令処理２が、メモリアクセスを伴わない命令であると仮定すると、命令処理１のメモリアクセスと並行して、命令処理２を実行し、命令処理２の実行後、メモリアクセスの終了した命令処理１を実行する。【０００５】
さらに、単一のプログラムを走行するのではなく、複数のプログラムを走行することで、ＣＰＵの処理を向上させるマルチスレッド方式も提案されている（例えば、特許文献２参照）。【０００６】
複数のプログラムを走行するマルチスレッド方式は、ＣＰＵのプログラマブルな資源を、複数組用意しておくことで、ソフトウェアから見ると、見掛け上は、複数のＣＰＵに見えるために、複数のプログラムを実行することが可能となる構造である。【０００７】
図１６は、従来のＣＰＵの構成図である。ＣＰＵは、主記憶１１１、命令キャッシュ１１２、命令デコーダ１１３、リザベーションステーション１１４、演算実行ユニット１１５、アーキテクチャレジスタ１１６を備える。このリザベーションステーション１１４は、機能の実行に必要なオペランドデータを、アーキテクチャレジスタ１１６から読み出して、演算ユニット１１５の演算処理や主記憶オペランドアドレス生成処理の制御を行う。【０００８】
アーキテクチャレジスタ１１６は、一時的にオペランドデータを記憶するものであり、ＣＰＵの一部として、演算速度と同等の読み出し、書き込み速度を要求されるため、メモリでなく、巨大なレジスタで構成される。例えば、トランジスタの量を少なくして、高密度で実装できるレジスタファイルで構成している。【０００９】
このマルチスレッドの方式の１つとして、ＶＭＴ(Vertical
Multi Threading)方式がある。この方式は、同時に、１つのプログラムしか走行できないが、長時間のデータ待ちが発生したときや、一定の時間の間隔などで、プログラムを切り替えて走行する。ＶＭＴ方式の回路量は、プログラマブルな資源を、プログラムの数分用意しなければならないが、同時に、１つのプログラムが走行するために、追加する回路量も少なく、実現が容易である。【００１０】
図１６で説明すると、レジスタファイル１１６を、スレッド毎のアーキテクチャレジスタで構成し、プログラムの切り替えに応じて、一方のアーキテクチャレジスタをアクテイブ、他方のアーキテクチャレジスタをスリープに設定し、走行プログラムに対応したアーキテクチャレジスタからオペランドデータを読み出す。【００１１】
一方、別のマルチスレッドの方式として、複数のプログラムを同時に走行する同時マルチスレッド方式(ＳＭＴ方式）がある。この方式は、複数のプログラムが同時に走行するために、単一のプログラムが走行していたときよりも、回路の制御が複雑になることや、リソースの増加が予想されるが、同時に複数のプログラムが走行するために、効率よく回路を使用することが可能となる。【００１２】
この同時マルチスレッド方式でも、複数のスレッドのアーキテクチャレジスタをレジスタファイルで構成し、この複数のスレッドのアーキテクチャレジスタから、該当するスレッドのオペランドデータを読み出す必要がある。
【特許文献１】特開２００７−８７１０８号公報
【特許文献２】特表２００６−５０２５０４号公報（ＷＯ２００４／０３４２０９号）
【発明の開示】
【発明が解決しようとする課題】
【００１３】
このように、同時マルチスレッド方式では、複数のスレッドのアーキテクチャレジスタをレジスタファイルで構成し、且つ同時に複数のプログラムを走行するため、機能の実行に必要なオペランドデータを読み出すためには、単一スレッドでの走行より、アーキテクチャレジスタを選択する回路量が増加する。又、同時に異なるスレッドのオペランドデータを読み出す場合には、回路の配線量が増加するおそれがある。【００１４】
このため、単一スレッドの場合と比べて、レジスタファイルの読み出し周波数を向上することは難しくなる。これにより、演算速度が向上するように、アウト・オブ・オーダー方式や、同時マルチスレッド方式を採用しても、ＣＰＵの性能向上を図ることが、困難であるという問題が生じる。【００１５】
従って、本発明の目的は、同時マルチスレッド方式の処理において、複数のスレッドのアーキテクチャレジスタを構成するレジスタファイルから、機能の実行に必要なオペランドデータを、高速に読み出すための命令実行制御装置及び命令実行制御方法を提供することにある。【００１６】
又、本発明の他の目的は、レジスタファイルを、複数のスレッドのアーキテクチャレジスタを構成しても、レジスタファイルからの読み出しのための回路量や配線量の増加を、より少なくするための命令実行制御装置及び命令実行制御方法を提供することにある。【００１７】
更に、本発明の別の目的は、レジスタファイルを、複数のスレッドのアーキテクチャレジスタを構成しても、レジスタファイルからの読み出しのための回路量や配線量の増加を、より少なくし、同時マルチスレッド処理の周波数を向上するための命令実行制御装置及び命令実行制御方法を提供することにある。
【課題を解決するための手段】
【００１８】
この目的の達成のため、本発明の命令実行制御装置は、アウト・オブ・オーダー実行を処理するための演算処理と主記憶オペランドアドレス生成を制御するリザベーションステーションと、機能の実行によって得られるデータを格納し、且つプログラムからは観測されないレジスタ更新バッファと、複数のスレッドが同時マルチスレッド方式で動作するための、スレッドごとのアーキテクチャレジスタと、同時に読み出すことのできるスレッド数がアーキテクチャレジスタのスレッド数より少ないスレッド数に制限する読み出しスレッド選択回路とを有するレジスタファイルと、前記リザベーションステーションのエントリの実行により、前記レジスタファイルからオペランドデータを読み出すときは、前記エントリの実行前に、前記エントリの読み出しスレッドを選択して、前記読出しスレッド選択回路を制御するスレッド選択回路とを有し、前記エントリの演算又はオペランド生成の実行時に、前記スレッド選択回路で選択されたスレッドのアーキテクチャレジスタからオペランドデータを読み出す。【００１９】
又、本発明の命令実行制御方法は、リザベーションステーションにより、演算器及び主記憶オペランド生成器に、アウト・オブ・オーダー実行の処理を制御するステップと、前記実行によって得られるデータを、プログラムからは観測されないレジスタ更新バッファに格納するステップと、前記リザベーションステーションのエントリの実行により、前記レジスタファイルからオペランドデータを読み出すときは、前記エントリの実行前に、前記エントリの読み出しスレッドを選択するステップと、同時マルチスレッド方式のスレッドごとのアーキテクチャレジスタと、同時に読み出すことのできるスレッド数がアーキテクチャレジスタのスレッド数より少ないスレッド数に制限する読み出しスレッド選択回路とを有するレジスタファイルを、前記読み出しスレッドで選択するステップと、前記エントリの演算又はオペランド生成の実行時に、前記スレッド選択回路で選択されたスレッドのアーキテクチャレジスタからオペランドデータを読み出すステップとを有する。【００２０】
更に、本発明では、好ましくは、前記リザベーションステーションは、演算とオペランドアドレス生成に必要なオペランドデータを、前記レジスタ更新バッファや即値から読み出す場合には、同時に読み出すことのできるスレッド数を制限しない。【００２１】
更に、本発明では、好ましくは、前記リザベーションステーションは、前記エントリによる命令の実行によって得られるデータを、前記レジスタ更新バッファに格納して、前記エントリの命令が完了した時に、前記レジスタ更新バッファのオペランドデータを、前記アーキテクチャレジスタに格納する。【００２２】
更に、本発明では、好ましくは、前記リザベーションステーションは、前記リザベーションステーションのエントリが、前記レジスタファイルからオペランドデータを読み出す必要のあるかを判定し、且つ前記スレッド選択回路で選択されたエントリのスレッドと一致するかを判定し、前記エントリが、前記読み出しが必要で、前記スレッドと一致したエントリを、前記実行のため選択する。【００２３】
更に、本発明では、好ましくは、前記リザベーションステーションは、前記判定により、機能の実行に必要なオペランドデータを前記レジスタ更新バッファから読み出し、即値を使用することができるエントリを、エントリのスレッドに関係なく実行するエントリに選択する。【００２４】
更に、本発明では、好ましくは、前記スレッド選択回路は、前記レジスタファイルから読み出すことのできるスレッドを、特定のスレッドに限定しなければならないこと検出して、前記特定のスレッドを選択する。【００２５】
更に、本発明では、好ましくは、前記スレッド選択回路は、前記レジスタファイルから読み出すことのできるスレッドを、特定のスレッドに限定する必要がないこと検出して、動作しているスレッドを示す信号により、動作していないスレッドの選択を禁止する。【００２６】
更に、本発明では、好ましくは、前記スレッド選択回路は、前記レジスタファイルから読み出すことのできるスレッドを、特定のスレッドに限定する必要がないこと検出して、動作しているスレッドで、リザベーションステーションのエントリに１つも実行できない状態であるスレッドが存在するかを判定し、前記スレッドが存在すると判定した時に、動作している他のスレッドのエントリから発行できる状態であるスレッドが存在する場合、１つも発行できない状態であるスレッドのスレッド選択を禁止する。【００２７】
更に、本発明では、好ましくは、前記スレッド選択回路は、前記レジスタファイルから読み出すことのできるスレッドを、特定のスレッドに限定する必要がないこと検出して、一定期間完了できない命令がリザベーションステーションのエントリに存在するかを判定し、前記エントリが存在すると判定した場合、一定間隔で、前記完了できていないスレッドのエントリを選択する。【００２８】
更に、本発明では、好ましくは、前記スレッド選択回路は、前記レジスタファイルから読み出すことのできるスレッドを、特定のスレッドに限定する必要がないこと検出して、前記スレッド選択回路で選択されていない時間が最も長いスレッドを選択する。
【発明の効果】
【００２９】
複数のスレッドを同時マルチスレッド方式で動作する場合、アーキテクチャレジスタをスレッドごとに備え、レジスタファイルから機能の実行に必要なオペランドデータを読み出す場合に、あらかじめレジスタファイルから読み出すスレッドを選択しておくため、早い段階でアーキテクチャレジスタの選択を行うことが可能となる。アーキテクチャレジスタを選択する部分の回路は増えるが、回路の配線量については読み出すスレッドのアーキテクチャレジスタの選択を行っていることで削減をすることが可能となる。【００３０】
又、リザベーションステーションのエントリで、アーキテクチャレジスタ以外からオペランドデータを読み出す場合には、アーキテクチャレジスタから読み出す場合とは異なり、すべてのスレッドが同時に読み出し、同時に読み出すスレッドには制限されることなく読み出すことが可能である。
【図面の簡単な説明】
【００３１】
【図１】本発明の情報処理装置の一実施の形態のブロック図である。
【図２】本発明の一実施の形態の命令実行制御装置の構成図である。
【図３】図２の命令実行制御装置の詳細構成図である。
【図４】図２の命令実行制御装置のレジスタファイルの構成図である。
【図５】図４のレジスタファイルの説明図である。
【図６】図３のリザベーションステーションのエントリの実行選択処理フロー図である。
【図７】図３のエントリ生成回路のエントリ登録時の実行選択処理フロー図である。
【図８】図３の命令実行制御装置によるアーキテクチャレジスタ更新処理の説明図である。
【図９】図３のスレッド選択回路のスレッド選択処理フロー図である。
【図１０】図９のエントリ状態によるスレッド選択処理フロー図である。
【図１１】図９の完了命令待ち時のスレッド選択処理の説明図である。
【図１２】図１１のスレッド選択処理フロー図である。
【図１３】図９の第１、第２の選択方法のためのスレッド選択回路の回路図である。
【図１４】図９の第３の選択方法のためのスレッド選択回路の回路図である。
【図１５】図９の第４の選択方法のためのスレッド選択回路の回路図である。
【図１６】従来の命令実行制御装置の説明図である。
【符号の説明】
【００３２】
１  命令フェッチアドレス生成器
２  １次命令キャッシュ
３  命令バッファ
４  命令デコーダ
５，６，７,８  リザベーションステーション
１０  オペランドアドレス生成器
１２、１５  演算器
１３，１６  更新バッファ
１４、１７  レジスタ
２０  レジスタファイル
２２−０，２２−１  アーキテクチャレジスタ
２４  読み出しスレッド選択回路
２６  オペランドデータ選択回路
３２  スレッド選択回路
３４  実行エントリ選択回路
３６  レジスタ読み出しＩＤバッファ
【発明を実施するための最良の形態】
【００３３】
以下、本発明の実施の形態を、図面に従い、情報処理装置、命令実行制御装置の全体構成、命令実行制御装置、スレッド選択回路、他の実施の形態の順で説明する。しかし、本発明は、下記実施の形態に限らず、種々の変形が可能である。【００３４】
（情報処理装置）
図１は、本発明の情報処理装置の一実施の形態の全体図である。図１に示すように、１次命令キャッシュ２と、１次データキャッシュ１１は、図示しない主記憶に接続された２次キャッシュに接続する。【００３５】
命令フェッチを行うために、命令フェッチアドレス生成器１は、命令アドレスを選択し、選択された命令アドレスに対して命令フェッチリクエストを、１次命令キャッシュ２に与える。１次命令キャッシュ２からフェッチされた命令は、命令バッファ３に格納される。命令バッファ３からプログラムの順番通りに、命令デコーダ４に、命令の供給を行う。【００３６】
命令デコーダ４は、プログラムの順番通りに命令のデコードを行う。命令デコーダ４は、デコードする命令の種類に従って、命令の実行を制御する主記憶オペランドアドレス生成用リザベーションステーションユニット（ＲＳＡ:Reservation Station for Address generate）５、固定小数点演算用リザベーションステーションユニット（ＲＳＥ:Reservation
Station for Execute）６、浮動小数点演算用リザベーションステーションユニット（ＲＳＦ:Reservation Station for
Floating）７、分岐命令用リザベーションステーションユニット（ＲＳＢＲ:Reservation Station for BRanch）８に、必要なエントリを作成する。【００３７】
即ち、命令デコーダ４は、フェッチしてきた命令を、イン・オーダーでデコードし、デコードされた命令は、機能の実行を制御するリザベーションステーションユニット５，６，７，８，９に、命令の種類によって、それぞれ格納される。そして、リザベーションステーションユニットは、演算用のリザベーションステーションユニット６，７と、主記憶オペランドアドレス生成用のリザベーションステーションユニット５を備える。【００３８】
また、全てのデコードされた命令に対して、命令の完了を制御するコミットスタックエントリ（ＣＳＥ:Commit Stack Entry）９に、エントリを作成する。【００３９】
デコードされた命令が、ロード命令であった場合には、ＲＳＡ５にエントリを作成し、ＲＳＡ５は、オペランドアドレス生成器１０にオペランドアドレスの生成を指示し、１次データキャッシュ１１から対応するデータを、ロード命令の種類によって、固定小数点更新バッファ（ＧＵＢ:General Update Buffer）１３と、浮動小数点更新バッファ（ＦＵＢ:Floating Update Buffer）１６に読み出す。【００４０】
又、デコードされた命令が、ＲＳＥ６，ＲＳＦ７にエントリを作成した場合には、各々演算器１２，１５を動作し、対応する演算処理を行う。デコードされた命令が、ＲＳＡ５、ＲＳＥ６，ＲＳＦ７にエントリを作成する場合に、ＧＵＢ１３とＦＵＢ１６に対応するレジスタリネームを行うことで、アウト・オブ・オーダー実行を行うことが可能となり、実行結果は、ＧＵＢ１３、ＦＵＢ１６に格納される。【００４１】
リザベーションステーション５，６，７により、アウト・オブ・オーダーで実行された命令は、ＣＳＥ９の制御により、プログラムの順番通りに、命令の完了を行う。そして、完了した命令に対してのみ、固定小数点レジスタ１４や浮動小数点レジスタ１７やプログラムカウンタ（ＰＣ、ＮＥＸＴ＿ＰＣ）１８，１９などのプログラマブルな資源の更新を行う。【００４２】
分岐予測機構２１は、分岐命令用リザベーションステーション８からの命令により、分岐予測を行い、命令フェッチアドレス生成器１を制御する。【００４３】
ここで、ここで、スレッド毎に備えられているプログラマブルな資源であるアーキテクチャレジスタの固定小数点レジスタ１４と浮動小数点レジスタ１７については、多くのレジスタがあるために、レジスタファイル２０で構成されている。しかし、スレッド毎に備えられているプログラマブルな資源であるネクストプログラムカウンタ１８とプログラムカウンタ１９については、小さいレジスタなために、レジスタファイルを用いることはなく、実装されている。【００４４】
従って、後述するように、リザベーションステーションユニット５，６，７，８により、演算サイクル毎に、スレッドを選択し、選択されたスレッドのエントリの実行を、オペランドアドレス生成器１０、演算器１２，１５に指示し、且つレジスタファイル２０から選択されたスレッドのオペランドデータの読み出し、書込みを行い、同時マルチスレッド処理を実行する。【００４５】
（命令実行制御装置の全体構成）
図２は、本発明の命令実行制御装置の一実施の形態のブロック図であり、図１のＲＳＥ５、ＲＳＥ６，ＲＳＦ７及びレジスタファイル２０の詳細図を示す。【００４６】
この実施の形態では、２つのスレッド（スレッド０と１）が同時に動作する場合について説明するが、スレッド数が３つ以上になっても実現は可能である。【００４７】
図２において、図１で示したものと同一のものは、同一の記号で示してあり、リザベーションステーションユニット５，６，７は、スレッド選択回路３２と、実行エントリ選択回路３４とに接続される。【００４８】
このリザベーションステーションユニット５，６，７のエントリは、スレッド０と１とを共有して使用する。即ち、エントリは、エントリのスレッドを示すスレッドＩＤ、オペランドデータをアーキテクチャレジスタから読み出すことを示す信号と読み出しアドレス、レジスタ更新バッファから読み出すことを示す信号と読み出しアドレス、命令デコード時に命令ごとに割り当てられる命令の番号を示す命令識別子などを格納している。【００４９】
２つのスレッドのアーキテクチャレジスタ２２−０，２２−１は、同時に読み出すことの可能なスレッドと、同時に書き込むことの可能なスレッドとが１つになるレジスタファイル２０で構成される。読み出しスレッドと書き込みスレッドは、同じスレッドである必要はない。【００５０】
図２に示すように、レジスタファイル２０は、スレッド０と１のアーキテクチャレジスタ２２−０，２２−１と、読み出しスレッド選択回路２４と、読み出しオペランド選択回路２６とで構成される。【００５１】
スレッド選択回路３２が、読み出しスレッドを選択し、読み出しスレッドＩＤを読み出しスレッド選択回路２４に送る。読み出しスレッド選択回路２４は、読み出しスレッドＩＤが指すスレッドのアーキテクチャレジスタ２２−０，２２−１を選択する。そして、実行エントリ選択回路３４から実行エントリに含まれる読み出しアドレスが、読み出しオペランドデータ選択回路２６に送られる。【００５２】
読み出しオペランドデータ選択回路２６は、読み出しアドレスに従って、機能の実行回路１０，１２，１５に必要な部分のデータを読み出して、機能の実行に使用する。実行エントリ選択回路３４は、リザベーションステーションから実行するエントリを選択し、選択されたエントリが、レジスタファイル２０、レジスタ更新バッファ１３，１６、即値レジスタ２８のから、機能の実行に必要な部分のデータを読み出して、機能の実行を行う。【００５３】
この動作を説明する。複数のスレッドが同時マルチスレッド方式で動作する場合、リザベーションステーション５，６，７のエントリ構成は、スレッド間で共有する。そして、アーキテクチャレジスタ２２−０，２２−１は、スレッドごとに備えられ、レジスタファイル２０で構成される。【００５４】
レジスタファイル２０から機能の実行に必要なオペランドデータを読み出す場合に、スレッド選択回路３２のレジスタ読み出しＩＤにより、あらかじめレジスタファイル２０から読み出すスレッドを選択しておく。さらに、読み出すスレッドの数を、アーキテクチャレジスタ２２−０，２２−１のスレッド数より少ないスレッド数に制限する。【００５５】
レジスタファイル２０は、読み出すスレッドがあらかじめ決まっていることにより、実行エントリ選択回路３４で実行エントリが選択される前の早い段階で、アーキテクチャレジスタ２２−０，２２−１の選択を行うことが可能となる。【００５６】
アーキテクチャレジスタ２２−０，２２−１を選択する部分の回路２４は、増えるが、回路の配線量は、読み出すスレッドのアーキテクチャレジスタの選択を行っていることで、削減することが可能となる。これは、機能の実行を行うときに、オペランド選択４２，４８で実行に必要なデータの選択を行うが、読み出すスレッドのアーキテクチャレジスタの選択を行わない場合にしたときには、アーキテクチャレジスタからスレッド分のオペランドデータがオペランド選択４２、４８に送ることになる。読み出すスレッドのアーキテクチャレジスタの選択を行っていることで、オペランド選択４２、４８に送る配線量を少なくすることが可能となる。【００５７】
このように、レジスタファイル２０から読み出すスレッドをあらかじめ決めることにより、レジスタファイル２０から必要なオペランドデータを、効率よく読み出すことが可能となり、従来の半導体技術よりも良い半導体を使用した場合には、従来の周波数を超えられる可能性が生じてくる。【００５８】
スレッド選択回路３２は、あらかじめレジスタファイル２０から読み出すためのスレッドを選択する。機能の実行が異なるリザベーションステーションが、例えば、ＲＳＡ５，ＲＳＥ６が、同一のレジスタファイル２０からオペランドデータを読み出す場合は、レジスタファイル２０備えられているスレッド選択回路２４に従って、読み出し制御されるために、リザベーションステーション５，６の実行するエントリがレジスタファイル２０からオペランドデータを読み出すときのスレッドは、同一のスレッドとなる。【００５９】
又、リザベーションステーションユニット５，６，７のエントリで、アーキテクチャレジスタ２２−０，２２−１以外からオペランドデータを読み出す場合には、アーキテクチャレジスタから読み出す場合とは異なり、すべてのスレッドが、同時に読み出すことができる。【００６０】
即ち、アーキテクチャレジスタ２２−０，２２−１以外では、機能の実行によって得られるデータを、プログラムからは観測されないワークレジスタで構成されたレジスタ更新バッファ１３，１６や即値レジスタ２８を使用する。これらのレジスタを、オペランドデータとして使用する場合には、同時に読み出すスレッドは、制限されることなく、読み出すことができる。【００６１】
（命令実行制御装置）
図２の命令実行制御装置を詳細に説明する。図３は、図２のリザベーションステーションのブロック図、図４は、図２のレジスタファイル及び機能実行回路のブロック図、図５は、図４のレジスタファイルの説明図、図６は、図３のリザベーションステーションのエントリの実行選択動作の説明図、図７は、図３のエントリ生成回路のエントリ登録時の動作説明図である。【００６２】
図３乃至図７は、図１の浮動小数点用リザベーションステーションユニット７を除くＲＳＡ５，ＲＳＥ６のブロックを示す。尚、図１の浮動小数点用リザベーションステーションユニット７も同様の構成であり、同様のレジスタファイルを別に持つ。ただし、ＣＷＲとＣＲＢは備えていないために、アーキテクチャレジスタ（浮動小数点レジスタ１７）のレジスタファイルから機能の実行に必要なオペランドデータを読み出して機能の実行を行う。【００６３】
図３に示すように、演算用リザベーションステーションユニット６は、エントリ生成回路６０と、演算用リザベーションステーション６２と、実行エントリ選択回路６４とを有する。【００６４】
同様に、主記憶オペランド生成用リザベーションステーションユニット５は、エントリ生成回路５０と、主記憶オペランド生成用リザベーションステーション５２と、実行エントリ選択回路５４とを有する。【００６５】
スレッド選択回路３２は、スレッド選択方法の１つとして、命令デコーダ４でデコードされた命令のスレッドＩＤを受け、後述するように、スレッドを選択し、エントリ生成回路５０，６０、リザベーションステーション５２，６２、レジスタ読み出しＩＤバッファ３６に、選択スレッドを通知する。【００６６】
リザベーションステーション５２，６２は、図６で説明するように、アウト・オブ・オーダーの実行を実現するため、各サイクルで、スレッド選択回路３２からの選択スレッドＩＤを受け、必要なオペランドデータの準備ができたエントリから実行するように、エントリに優先度を付す。【００６７】
実行エントリ選択回路５４，６４は、リザベーションステーション５２，６２に登録されたエントリから、実行するエントリを選択し、演算器１２等へ出力する。実行する準備のできたエントリが同時に幾つもある場合には、実行エントリ選択回路５４，６４は、エントリの古いものから順番に、選択して実行する。【００６８】
同様に、エントリ生成回路６０は、図７で説明するように、リザベーションステーション５２，６２にエントリを登録する段階で、スレッド選択回路３２からの選択スレッドＩＤを受け、必要なオペランドデータの準備ができたエントリから実行するように、エントリに優先度を付す。【００６９】
この優先度の制御を行うため、スレッド選択回路３２は、実行エントリ選択回路５４，６４が、リザベーションステーション５２，６２のエントリを選択する１サイクル前に、スレッドを選択する。この選択スレッドＩＤは、レジスタ読み出しＩＤバッファ３６を得て、レジスタファイル２０へ送られるため、レジスタファイル２０の読み出すスレッドが、あらかじめ決まっている。【００７０】
このため、実行エントリ選択回路５４，６４で、実行エントリが選択される前の早い段階で、アーキテクチャレジスタ２２−０，２２−１の選択を行うことが可能となる。【００７１】
図６により、リザベーションステーション５２，６２のエントリの実行選択動作を説明する。リザベーションステーション５２，６２は、登録された有効なエントリに対し、そのエントリが、実行に必要なオペランドデータをアーキテクチャレジスタから読み出すエントリかを調べる（Ｓ１０）。【００７２】
そのエントリが、オペランドデータをアーキテクチャレジスタから読み出すエントリと判定した場合には、そのエントリのＩＤが、実行エントリ選択回路５４，６４の１サイクル前のサイクルで、レジスタファイルから読み出すスレッドを選択するスレッド選択回路３２で選択されたスレッドのＩＤと一致するエントリであるかを判定する（Ｓ１２）。【００７３】
ステップＳ１２で、そのエントリＩＤが、選択されたスレッドのＩＤと一致すると判定した場合には、次サイクルでの実行エントリ選択回路５４，６４で選択される可能性のあるエントリと判定し、そのエントリにフラグ「１」を付す（Ｓ１４）。【００７４】
一方、そのエントリのＩＤが、選択されたスレッドのＩＤと一致しないと判定した場合には、そのエントリは、次サイクルでの実行エントリ選択回路５４，６４で選択される可能性がないエントリと判定し、そのエントリのフラグを「０」とする（Ｓ１６）。【００７５】
ステップＳ１０で、実行に必要なオペランドデータをアーキテクチャレジスタ以外のレジスタ更新バッファから読み出す場合や即値を使用するエントリと判定された場合には、リザベーションステーション５２，６２のエントリのスレッドに関係なく、実行可能である。このため、リザベーションステーション５２，６２は、実行する準備ができたエントリであるかを判定する（Ｓ１８）。【００７６】
実行する準備ができたエントリと判定した場合には、次サイクルでの実行エントリ選択回路５４，６４で選択される可能性のあるエントリと判定し、そのエントリにフラグ「１」を付す（Ｓ１４）。【００７７】
実行する準備が整ってないエントリと判定した場合には、次サイクルでの実行エントリ選択回路５４，６４で選択される可能性のないエントリと判定し、そのエントリにフラグ「０」を付す（Ｓ１６）。【００７８】
このようにして、リザベーションステーション５２，６２に登録されたエントリが、オペランドデータをレジスタファイルから読み出すエントリかを調べ、読み出すエントリと判定すると、選択スレッドのエントリかを調べ、選択スレッドのエントリであると、次サイクルで実行選択可能性あるエントリとして、識別される。【００７９】
このため、次サイクルで、実行エントリ選択回路５４，６４で選択されて、実行することが可能である。これにより、スレッドＩＤで、アーキテクチャレジスタを先に選択しても、次サイクルで実行されるエントリと一致し、同時マルチスレッド方式を円滑に実行できる。【００８０】
このような優先付けは、多段で行うと、より早く、レジスタファイルの選択が可能となる。例えば、図４、図８で説明するカレントウィンド方式に、好適である。【００８１】
図７により、エントリ生成回路による５０，６０により、優先付け動作を説明する。図７は、命令がデコードされ、エントリ生成回路５０，６０が、リザベーションステーション５２，６２に新しくエントリを登録するサイクルのエントリ選択動作である。エントリ生成回路５０，６０は、命令デコーダ４からリザベーションステーション５２，６２にエントリを作成する命令を受けると、登録するエントリが、実行に必要なオペランドデータをアーキテクチャレジスタから読み出すエントリかを調べる（Ｓ２０）。【００８２】
そのエントリが、オペランドデータをアーキテクチャレジスタから読み出すエントリと判定した場合には、そのエントリのＩＤが、このサイクルで、レジスタファイルから読み出すスレッドを選択するスレッド選択回路３２で選択されたスレッドのＩＤと一致するエントリであるかを判定する（Ｓ２２）。【００８３】
ステップＳ２２で、そのエントリＩＤが、選択されたスレッドのＩＤと一致すると判定した場合には、次サイクルでの実行エントリ選択回路５４，６４で選択される可能性のあるエントリと判定し、そのエントリにフラグ「１」を付す（Ｓ２４）。【００８４】
一方、そのエントリのＩＤが、選択されたスレッドのＩＤと一致しないと判定した場合には、そのエントリは、次サイクルでの実行エントリ選択回路５４，６４で選択される可能性がないエントリと判定し、そのエントリのフラグを「０」とする（Ｓ２６）。【００８５】
ステップＳ２０で、実行に必要なオペランドデータをアーキテクチャレジスタ以外のレジスタ更新バッファから読み出す場合や即値を使用するエントリと判定された場合には、登録するエントリのスレッドに関係なく、実行可能である。このため、エントリ生成回路５０，６０は、実行する準備ができたエントリであるかを判定する（Ｓ２８）。【００８６】
実行する準備ができたエントリと判定した場合には、次サイクルでの実行エントリ選択回路５４，６４で選択される可能性のあるエントリと判定し、そのエントリにフラグ「１」を付す（Ｓ２４）。【００８７】
実行する準備が整ってないエントリと判定した場合には、次サイクルでの実行エントリ選択回路５４，６４で選択される可能性のないエントリと判定し、そのエントリにフラグ「０」を付す（Ｓ２６）。【００８８】
このようにして、エントリ生成回路５０，６０が、リザベーションステーション５２，６２に、エントリを登録するサイクルで、登録するエントリが、オペランドデータをレジスタファイルから読み出すエントリかを調べ、読み出すエントリと判定すると、選択スレッドのエントリかを調べ、選択スレッドのエントリであると、次サイクルで実行選択可能性あるエントリとして、識別される。【００８９】
このため、次サイクルで、実行エントリ選択回路５４，６４で選択されて、実行することが可能である。これにより、スレッドＩＤで、アーキテクチャレジスタを先に選択しても、次サイクルで実行されるエントリと一致し、同時マルチスレッド方式を円滑に実行できる。【００９０】
次に、図５により、アウト・オブ・オーダー方式のレジスタファイル２０のアーキテクチャレジスタのレジスタ構成を説明する。スレッドごとに備えられているアーキテクチャレジスタ２２−０，２２−１は、巨大なレジスタで構成されている。【００９１】
一方、このアーキテクチャレジスタの内、命令を実行するのに必要なレジスタの場所は、スレッドごとに備えられているカレントウィンドウポインタ（ＣＷＰ）が指す部分に限定される。このため、カレントウィンドウポインタ（ＣＷＰ）が指すレジスタの部分を、アーキテクチャレジスタ２２Ａからコピーしたものを、カレントウィンドウレジスタ（ＣＷＲ）２２Ｃに格納する。【００９２】
このアーキテクチャレジスタ２２ＡからＣＷＲ２２Ｃにコピーするために、アーキテクチャレジスタ２２ＡからＣＷＲ置換バッファ（ＣＲＢ）２２Ｂに１度格納した後、ＣＷＲ２２Ｃに格納する。【００９３】
カレントウィンドウポインタ（ＣＷＰ）のレジスタ部分が、ＣＷＲ２２Ｃに格納されたときに、ＣＲＢ２２Ｂには、カレントウィンドウポインタ（ＣＷＰ）の前後１つのレジスタの１部分が格納される。例えば、カレントウィンドウポインタＣＷＰ＝１の場合には、ＣＷＲ２２Ｃは、アーキテクチャレジスタ２２ＡのＣＷＰ＝１の３つのブロックを格納され、ＣＲＢ２２Ｂは、アーキテクチャレジスタ２２ＡのＣＷＰ＝０の上の２つのブロック、又はＣＷＰ＝２の下の２つのブロックを格納される。【００９４】
ＣＷＲ２２ＣとＣＲＢ２２Ｂは、スレッドごとに備えられ、アーキテクチャレジスタ２２Ａと同様に、同時に読み出すことの可能なスレッドが１つであるレジスタファイルで構成される。【００９５】
リザベーションステーション５，６，７から、アーキテクチャレジスタ２２から必要なオペランドデータを読み出すことは、ＣＷＲ２２Ｃからオペランドデータを読み出すことになる。ただし、カレントウィンドウポインタを変更する命令（例えば、ＳＡＶＥ，ＲＥＳＴＯＲＥ命令など）を実行している間には、ＣＲＢ２２Ｂからオペランドデータを読み出す場合もある。【００９６】
巨大なアーキテクチャレジスタに対して、このようなレジスタ構成により、アウト・オブ・オーダー命令実行方式において、データリードのスループットを向上し、且つレジスタ量を削減できる（例えば、特開２００７−８７１０８号公報参照）。【００９７】
このようなレジスタファイルの構成例におけるオペランドデータによる機能実行のためのブロック図を、図４に示す。図４において、図２、図３、図５で示したものと同一のものは、同一の記号で示してある。【００９８】
図４に示すように、レジスタファイル２０は、図５で説明したように、スレッド毎のアーキテクチャレジスタ２２−０Ａ，２２−１Ａと、スレッド毎のＣＲＢ２２−０Ｂ，２２−１Ｂと、スレッド毎のＣＷＲ２２−０Ｃ、２２−１Ｃとを有する。ＣＲＢ２２−０Ｂ，２２−１Ｂの各々は、読み出しスレッド選択回路２４と、読み出しオペランドデータ選択回路２６とを備える。同様に、ＣＷＲ２２−０Ｃ，２２−１Ｃの各々は、読み出しスレッド選択回路２４と、読み出しオペランドデータ選択回路２６とを備える。【００９９】
そして、レジスタ読み出しスレッドＩＤバッファ３６のレジスタ読み出しスレッドＩＤが、ＣＲＢ２２−０Ｂ，２２−１Ｂ、ＣＷＲ２２−０Ｃ,２２−１Ｃの各々の読み出しスレッド選択回路２４に与えられる。又、実行エントリ選択回路５４からの選択エントリ（オペランドアドレスを含む）が、ＣＲＢ２２−０Ｂ，２２−１Ｂ，ＣＷＲ２２−０Ｃ，２２−１Ｃ，レジスタ更新バッファ１３、即値レジスタ２８、ラッチ回路４６の各々に与えられる。【０１００】
更に、実行エントリ選択回路６４からの選択エントリ（オペランドアドレスを含む）が、ＣＲＢ２２−０Ｂ，２２−１Ｂ，ＣＷＲ２２−０Ｃ，２２−１Ｃ，レジスタ更新バッファ１３、即値レジスタ２８、ラッチ回路４０の各々に与えられる。【０１０１】
このため、レジスタ読み出しＩＤと、実行エントリ選択回路５４，６４で選択されたエントリとに従って、ＣＷＲ２２−０Ｃ,２２−１Ｃ，ＣＲＢ２２−０Ｂ,２２−１Ｂ，レジスタ更新バッファ１３、即値２８の中からオペランドデータが読み出される。そして、これらオペランドデータから、オペランド選択回路４２，４８が、機能の実行に必要なオペランドデータを選択して、ラッチ回路４４，４９を介し、演算器１２又はオペランドアドレス生成器１０に与え、エントリで指定された機能の実行を行う。【０１０２】
この場合も、エントリの選択サイクル前に、スレッドＩＤが選択され、ＣＲＢ２２−０Ｂ又はＣＲＢ２２−１Ｂのいずれか、ＣＷＲ２２−０Ｃ又は２２−１Ｃのいずれかが、スレッドＩＤで選択されているので、エントリの選択により、直ちに、指定されたオペランドデータを読み出すことができる。【０１０３】
又、このレジスタ更新バッファ１３から、実行に必要なオペランドデータを読み出す場合には、レジスタ更新バッファ１３のエントリのアドレスを用いて、読み出すことができる。このために、同時に異なるスレッドのオペランドデータを読み出すことができる。【０１０４】
従って、リザベーションステーション５，６のエントリが、機能の実行に必要なオペランドデータを、レジスタ更新バッファ１３から読み出すことを含むエントリを実行する場合には、アーキテクチャレジスタ２２−０Ａ（２２−１Ａ）から読み出すと同様に、レジスタファイル２２から読み出すスレッドＩＤに制限する必要はなく、毎サイクル、実行する準備ができたエントリを、実行エントリ選択回路５４，６４で選択することが可能となる。【０１０５】
次に、図８により、機能の実行からアーキテクチャレジスタの更新処理を説明する。演算器１２やオペランドアドレス生成器１０による機能の実行は、アーキテクチャレジスタ２２−０Ａ,２２−１Ａ以外のレジスタ更新バッファ１３からオペランドデータ読み出したり、即値２８を使用して、実行することが可能である。【０１０６】
図８に示すように、レジスタ更新バッファ１３は、機能の実行によって得られる結果のデータを格納するプログラムからは、観測されないレジスタであり、エントリは、スレッド０と１で共有して使用することができる。【０１０７】
レジスタ更新バッファ１３に書き込まれた実行の結果データは、実行した命令が完了するまで、レジスタ更新バッファ１３にデータを保持する。そして、命令が完了したときに（図１のＣＳＥ９からの命令完了が発せられたときに）、レジスタ更新バッファ１３からデータを読み出し、アーキテクチャレジスタ２２−０Ａ（２２−１Ａ）とＣＷＲ２２−０Ｃ（２２−１Ｃ）に、データを書き込む処理を行う。【０１０８】
後続の命令は、アーキテクチャレジスタ２２−０Ａ（２２−１Ａ）に、機能の実行の結果が書き込まれるまで（命令が実行してから完了するまでの間）は、レジスタ更新バッファ１３から、オペランドデータを読み出して、機能の実行を行うことが可能である。【０１０９】
（スレッド選択回路）
次に、前述のスレッドを選択するスレッド選択回路３２を説明する。図９は、スレッド選択回路３２のスレッド選択方法の説明図、図１０は、図９の第３の選択方法の説明図、図１１、図１２は、図９の第４の選択方法の説明図、図１３乃至図１５は、スレッド選択回路３２の回路図である。【０１１０】
図９に示すように、レジスタ読み出しＩＤのスレッド選択回路３２の選択方法は、４種類あり、この選択条件に当てはまると、次サイクルレジスタ読み出しＩＤが決定する。４種類の選択条件に当てはまらない場合には、レジスタ読み出しＩＤの反対スレッドを、次サイクルのレジスタ読み出しＩＤに選択する（Ｓ３８）。【０１１１】
先ず、第１の選択方法は、スレッドを限定する必要のあるかを判定する（Ｓ３０）。この第１の選択方法は、スレッド選択回路３２で、最も優先される選択であり、スレッドを限定する必要がある場合には、必ず、スレッド選択回路３２は、限定するスレッドを選択する。レジスタの読み出しスレッドを限定する必要がある場合とは、カレントウィンドウポインタが変更されたときである。【０１１２】
即ち、図５で説明したように、新たにカレントウィンドウポインタＣＷＰが変更されたときに、変更のあったスレッドのカレントウィンドウポインタと前後のポインタが指すレジスタ部分が、アーキテクチャレジスタ２２Ａから読み出される。【０１１３】
そして、ＣＲＢ２２Ｂに書き込み、ＣＲＢ２２Ｂから読み出して、ＣＷＲ２２Ｃに書き込むことで、新しいウィンドウポインタのＣＷＲ２２Ｃを用意することが可能となる。【０１１４】
カレントウィンドウポインタＣＷＰが変更されて、新しいウィンドウポインタの状態にするまでのレジスタの移動処理中は、アーキテクチャレジスタ２２Ａの読み出しと、ＣＲＢ２２Ｂの読み出しと書き込みと、ＣＷＲ２２Ｃへの書き込みを行うスレッドについては、カレントウィンドウポインタを変更したスレッドが優先される。このため、レジスタファイル２２の読み書きすることが可能なスレッドは、カレントウィンドウポインタを変更するスレッドに制限される。【０１１５】
従って、レジスタの移動処理中は、レジスタの移動処理中のスレッドと、レジスタファイル２２から読み出すスレッドを選択するスレッド選択回路３２で選択するスレッドとが一致する必要がある。尚、レジスタの移動処理は、同時に、１つのスレッドのみが、処理することが可能であり、２つのスレッドが、同時に処理することは、できないように制御される。【０１１６】
このように、レジスタの移動処理中によるレジスタファイル２２の読み書きのスレッドが制限されている間は、レジスタの移動処理中のスレッドと同じスレッドをスレッド選択回路３２で必ず選択するように制御する。このため、リザベーションステーションの実行するエントリで、アーキテクチャレジスタ２２からオペランドデータを読み出すエントリは、レジスタの移動処理中のスレッドと一致する。このように、レジスタの移動処理中のスレッド選択回路３２は、レジスタの移動処理中のスレッドに限定して選択するように動作する。【０１１７】
又、カレントウィンドウポインタＣＷＰを変更する命令が実行されている途中の処理では、カレントウィンドウポインタＣＷＰが変更されるまでは、リザベーションステーションにより、アーキテクチャレジスタからオペランドデータを読み出す場合に、ＣＲＢ２２Ｂからオペランドデータを読み出すことがある。【０１１８】
このときに、反対のスレッドが、カレントウィンドウポインタを変更して、ＣＲＢ２２Ｂ、ＣＷＲ２２Ｃの読み書きのスレッドが、カレントウィンドウポインタＣＷＰを制限しているときに、リザベーションステーションからカレントウィンドウポインタを変更する命令の実行中に、ＣＲＢ２２Ｂからオペランドデータを読み出すことがないように、スレッド選択回路３２は、カレントウィンドウポインタを変更しているスレッドを選択する。【０１１９】
次に、スレッドを特定のスレッドに限定しないときのスレッドの選択方法は３つある。スレッドを特定のスレッドに限定しないときの１つ目の選択方法（第２の選択方法）は、スレッド選択回路３２が、動作しているスレッドが単一のスレッドのときには、動作しているスレッドを選択する（Ｓ３２）。【０１２０】
スレッドを、特定のスレッドに限定しないときの２つ目の選択方法（第３の選択方法）は、発行できないエントリが存在する場合に、発行できないスレッドと反対のスレッドを選択する方法である（Ｓ３４）。即ち、演算用と主記憶オペランドアドレス生成用のリザベーションステーション５２，６２のエントリに、１つでも実行できる状態のエントリが存在しているときに、反対のスレッドが、１つも実行できない状態であるときには、１つでも実行できる状態のスレッドを選択する。【０１２１】
図１０により、第３の選択方法を詳細に説明する。【０１２２】
リザベーションステーション５２，６２のエントリが実行できる状態というのは、スレッド別に、エントリが有効であり、インターロックがかかっていない状態であるか、もしくは、エントリが空状態であっても、次のサイクルで、エントリが有効になる可能性がある状態のことである。【０１２３】
リザベーションステーション５２，６２のエントリには、エントリが実行する準備ができている場合でも、実行することができないように制御する（インターロック）ことが可能な情報を、エントリの１つの信号として備えている。【０１２４】
この信号が１度セットされると、このエントリは、実行エントリ選択回路５４，６４で選択されることはなく、実行することができない状態となり、リセットされると、実行することが可能となり、実行エントリ選択回路５４，６４で選択される。【０１２５】
スレッド０のエントリが有効であり、インターロックがかかっていない状態であるか、もしくは、エントリが空状態であっても、次のサイクルで、エントリが有効になる可能性がある状態を検出すると、スレッド１のエントリが有効であり、インターロックがかかっていない状態であるか、もしくは、エントリが空状態であっても、次のサイクルで、エントリが有効になる可能性がある状態であるかを判定する（Ｓ４０）。そして、スレッド１のエントリが有効、インターロックなし又はエントリが有効になる可能性がある場合（ＹＥＳ）には、この第３の選択方法でのスレッド選択を行わない。【０１２６】
次に、スレッド１のエントリが有効でない、インターロック有り又はエントリが有効になる可能性がない場合（ＮＯ）には、スレッド０で、スレッドのエントリをすべてクリアする信号が発行されたかを判定し、クリアする信号が発行されたスレッド０については、この選択回路でスレッド選択を行わない（Ｓ４２）。クリア信号がスレッド０に発行されていない場合には、スレッド０を選択する。【０１２７】
逆に、スレッド１のエントリが有効であり、インターロックがかかっていない状態であるか、もしくは、エントリが空状態であっても、次のサイクルで、エントリが有効になる可能性がある状態を検出すると、スレッド０のエントリが有効であり、インターロックがかかっていない状態であるか、もしくは、エントリが空状態であっても、次のサイクルで、エントリが有効になる可能性がある状態であるかを判定する（Ｓ４２）。そして、スレッド０のエントリが有効、インターロックなし又はエントリが有効になる可能性がある場合（ＹＥＳ）には、この第３の選択方法でのスレッド選択を行わない。【０１２８】
次に、スレッド０のエントリが有効でない、インターロック有り又はエントリが有効になる可能性がない場合（ＮＯ）には、スレッド１で、スレッドのエントリをすべてクリアする信号が発行されたかを判定し、クリアする信号が発行されたスレッド１については、この選択回路でスレッド選択を行わない（Ｓ４６）。クリア信号がスレッド１に発行されていない場合には、スレッド１を選択する。【０１２９】
図９に戻り、スレッドを特定のスレッドに限定しないときの３つ目の選択方法（第４の選択方法）は、図１１に示すように、実行待ちで、一定期間完了することができない状態でいる命令が検出されたときに、その完了できない状態の命令が、リザベーションステーションのエントリに存在する場合には、一定間隔で、完了できない状態の命令のスレッドを、スレッド選択回路３２で選択する（Ｓ３６）。この選択回路は、２つのスレッドが動作しているときに有効である。【０１３０】
図１２により、詳細に説明する。最後に完了した命令のスレッドと反対のスレッドが、一定期間１命令も完了することができない状態でいるのかを検出する（Ｓ５０，Ｓ５２）。検出しない場合（ＮＯ）には、この方法でスレッド選択を行わない。【０１３１】
一方、検出したときに（ＹＥＳ）、後述するスレッドＩＤの操作期間かを判定し、操作期間でなければ、この方法でスレッド選択を行わない（Ｓ５４）。【０１３２】
逆に、操作期間であれば、演算用のリザベーションステーションの有効なエントリの命令識別子と、完了できない状態の命令の命令識別子とが一致するエントリが、リザベーションステーションのエントリに存在するかを判定する（Ｓ５６）。【０１３３】
存在すれば、クリア信号が発行されていない条件で、完了できない状態の命令のスレッドを、スレッド選択回路で選択する（Ｓ５８,Ｓ６０）。【０１３４】
さらに、この状態で、スレッド選択回路で選択するスレッドは、図１１に示したように、一定間隔で、スレッドを選択する。スレッド選択期間中は、スレッド選択回路３２で選択するように動作して、スレッド選択期間中でないときは、スレッド選択を行わない（Ｓ５４）。【０１３５】
スレッド別に分かれているスレッドのエントリを、すべてクリアする信号が発行された場合には、クリアする信号が発行されたスレッドについては、この選択回路で、スレッド選択を行わない（Ｓ５８,Ｓ６０）。【０１３６】
前述のスレッド選択回路３２は、論理回路で構成される。図１５の回路は、３は、第４の選択方法を実現する回路であり、その出力が、図１４の回路の入力となる。図１４の回路は、第３の選択方法を実現する回路であり、その出力が、図１３の回路の入力となる。図１３の回路は、第１、第２の選択方法を実現する回路であり、最終的なスレッド選択ＩＤ（ＴＨＲＥＡＤ＿ＩＤ）を出力する。【０１３７】
図１３の最終段の回路は、出力ＡＮＤゲート３２０と、１入力反転型ＡＮＤゲート３２２と、１入力反転型で、出力反転型ＡＮＤゲート３２４と、一対のＯＲゲート３２６，３２８とを有する。【０１３８】
図１３において、+FORCE_THREAD_0と、+FORCE_THREAD_1とが、レジスタの移動処理中を示す信号であり、スレッドを限定する必要のある場合を示す。この信号がオンになると、ＯＲゲート３２６，３２８の出力と、この信号とにより、ＡＮＤゲート３２２，３２４から、オンになったスレッドが、スレッド選択回路３２で選択される。即ち、図９のステップＳ３０で説明した第１の選択方法が実行される。なお、この２つの信号が同時にオンになることはない。【０１３９】
又、図１３において、+THREAD_0_ONLY_ACTIVEと、+THREAD_1_ONLY_ACTIVEとが、単一スレッドで動作しているときに動作しているスレッドを示す信号である。なお、この２つの信号が同時にオンになることはない。この信号がオンになると、ＯＲゲート３２６又は３２８と、ＡＮＤゲート３２２，３２４から、オンになったスレッドが、スレッド選択回路３２で選択される。図９のステップＳ３２の第２の選択方法が実行される。【０１４０】
尚、図１３の回路において、+RS_VALID_NOT_INTLCK_THREAD_0_ONLY信号と、+RS_VALID_NOT_INTLCK_THREAD_1_ONLY信号とは、図１４の第３の選択方法による出力であり、+RSE_COMP_WAIT_THREAD_0と、+RSE_COMP_WAIT_THREAD_1は、図１５の第４の選択方法の出力である。【０１４１】
次に、図１４の第３の選択方法を実現する回路は、一対の１入力反転型ＡＮＤゲート３３０，３３２と、一対の１入力反転型ＡＮＤゲート３３４，３３６と、一対のＯＲゲート３３８，３４０とを有する。【０１４２】
図１４において、+RSE_VALID_NOT_INTLCK_OR_THREAD_0が、演算用リザベーションステーションのエントリに、スレッド０の有効なエントリで、インターロックしていないエントリが１つでもあることを示す信号である。【０１４３】
又、+RSA_VALID_NOT_INTLCK_OR_THREAD_0が、主記憶オペランドアドレス生成用リザベーションステーションのエントリに、スレッド０の有効なエントリで、インターロックしていないエントリが１つでもあることを示す信号である。【０１４４】
更に、+IWR_VALID_OR_THREAD_0が、命令デコーダからスレッド０の命令がデコードされることを示す信号である。これらのどれか１つの信号がオンであれば、ＯＲゲート３３８から、リザベーションステーションのスレッド０のエントリには、実行できるエントリが存在することを示している。【０１４５】
そして、ＯＲゲート３４０からのスレッド１のこの信号がオフのときで、スレッド０のエントリをクリアすることを示す信号+CLEAR_PIPELINE_THREAD_0がオフのときに、ＡＮＤゲート３３４を経て、ＡＮＤゲート３３０から+RS_VALID_NOT_INTLCK_THREAD_0_ONLYが出力され、図１３のＯＲゲート３２８に入力される。このため、図１３の回路は、スレッド０を選択する。【０１４６】
スレッド１を選択する場合も同様の回路構成である。即ち、+RSE_VALID_NOT_INTLCK_OR_THREAD_1が、演算用リザベーションステーションのエントリに、スレッド１の有効なエントリで、インターロックしていないエントリが１つでもあることを示す信号である。【０１４７】
又、+RSA_VALID_NOT_INTLCK_OR_THREAD_1が、主記憶オペランドアドレス生成用リザベーションステーションのエントリに、スレッド１の有効なエントリで、インターロックしていないエントリが１つでもあることを示す信号である。【０１４８】
更に、+IWR_VALID_OR_THREAD_1が、命令デコーダからスレッド１の命令がデコードされることを示す信号である。これらのどれか１つの信号がオンであれば、ＯＲゲート３４０から、リザベーションステーションのスレッド１のエントリには、実行できるエントリが存在することを示している。【０１４９】
そして、ＯＲゲート３３８からのスレッド０のこの信号がオフのときで、スレッド１のエントリをクリアすることを示す信号+CLEAR_PIPELINE_THREAD_1がオフのときに、ＡＮＤゲート３３６を経て、ＡＮＤゲート３３２から+RS_VALID_NOT_INTLCK_THREAD_1_ONLYが出力され、図１３のＯＲゲート３２６に入力される。このため、図１３の回路は、スレッド１を選択する。【０１５０】
次に、図１５は、第４の選択方法を実現するためのスレッド０を選択する回路を示す。図１５の回路は、エントリ存在検出回路３４８−１〜３４８−ｎと、ＯＲゲート３４４と、ＡＮＤゲート３４６と、１入力反転型ＡＮＤゲート３４２で構成される。【０１５１】
エントリ存在検出回路３４８−１は、次に完了する命令の命令識別子を示す信号、+CSE_OUT_PTR_THREAD_0と、演算用のリザベーションステーションの０番のエントリの命令識別子を示す信号+RSE_0_IIDとの一致を検出する一致回路３５０−１と、演算用リザベーションステーションの０番のエントリがスレッド０で有効であることを示す信号+RSE_0_VALID_THREAD_0と、一致回路３５０−１の出力のＡＮＤを演算するＡＮＤゲート３５２−１とで構成される。【０１５２】
従って、エントリ存在検出回路３４８−１の出力が、オンのときには、スレッド０の先頭の命令が、演算用のリザベーションステーションに存在することを示す。この存在検出回路は、演算用のリザベーションステーションのエントリｎ個分設けられており、ＯＲゲート３４４により、どれかのエントリが成立した場合には、スレッド０の先頭の命令が、演算用のリザベーションステーションに存在することを示す信号を出力する。【０１５３】
一方、ＡＮＤゲート３４６には、最後に完了した命令のスレッドがスレッド１を示す信号+LAST_COMMIT_THREAD_ID_1と、先頭の命令が演算待ち状態を示す信号+TOQ_EU_COMP_WAIT_THREAD_0と、一定期間スレッド０の命令が完了していないことを示す信号+WARNING_TO_COMMIT_THREAD_0と、スレッド選択回路で選択する期間であることを示す信号+RSE_COMP_WAIT_MODEが入力されている。【０１５４】
これら全ての入力信号がオンとなり、且つクリアする信号を示す+CLEAR_PIPELINE_THREAD_0がオフのときに、ＯＲゲート３４４からのスレッド０の先頭の命令が演算用のリザベーションステーションに存在する信号が出力していれば、ＡＮＤゲート３４２から+RSE_COMP_WAIT_THREAD_0信号がアサートされる。【０１５５】
この信号は、図１３のＯＲゲート３２８に入力し、図１３の回路で、スレッド０を選択する。【０１５６】
尚、図１５は、スレッド０の選択回路のみを示すが、スレッド１を選択する場合も、同様の選択回路である。【０１５７】
更に、上記にあげた４つの種類のどのパターンも選択するスレッドがなかった場合には、図９のステップＳ３８で説明したように、同時に動作するスレッドが２つのスレッドのために、レジスタ読み出しＩＤが示すスレッドと反対のスレッドを次サイクルレジスタ読み出しＩＤとする。【０１５８】
図１３の回路では、レジスタ読み出しＩＤを示す信号+GPR_READ_THREAD_IDの極性を反対にした信号を、スレッド１側を選択する論理にＯＲするＯＲゲート３２６に入力することで、前述した全ての条件が成立しない場合には、次サイクルレジスタ読み出しＩＤは、レジスタ読み出しＩＤの反対スレッドを選択することが可能となる。【０１５９】
（他の実施の形態）
前述の実施の形態では、２つのスレッド（スレッド０と１）が同時に動作する同時マルチスレッド方式で説明したが、３つ以上のスレッドが同時に動作するものにも適用できる。同様に、アーキテクチャレジスタを、図５のカレントウィンドポインタによる分割レジスタ構成で説明したが、他の構成のものにも適用できる。【０１６０】
以上、本発明を実施の形態により説明したが、本発明の趣旨の範囲内において、本発明は、種々の変形が可能であり、本発明の範囲からこれらを排除するものではない。
【産業上の利用可能性】
【０１６１】
複数のスレッドを同時マルチスレッド方式で動作する場合、アーキテクチャレジスタをスレッドごとに備え、レジスタファイルから機能の実行に必要なオペランドデータを読み出す場合に、あらかじめレジスタファイルから読み出すスレッドを選択しておくため、早い段階でアーキテクチャレジスタの選択を行うことが可能となる。アーキテクチャレジスタを選択する部分の回路は増えるが、回路の配線量については読み出すスレッドのアーキテクチャレジスタの選択を行っていることで削減をすることが可能となる。【０１６２】
又、リザベーションステーションのエントリで、アーキテクチャレジスタ以外からオペランドデータを読み出す場合には、アーキテクチャレジスタから読み出す場合とは異なり、すべてのスレッドが同時に読み出し、同時に読み出すスレッドには制限されることなく読み出すことが可能である。
【図１】
2008155799.tif 000003
【図２】
2008155799.tif 000004
【図３】
2008155799.tif 000005
【図４】
2008155799.tif 000006
【図５】
2008155799.tif 000007
【図６】
2008155799.tif 000008
【図７】
2008155799.tif 000009
【図８】
2008155799.tif 000010
【図９】
2008155799.tif 000011
【図１０】
2008155799.tif 000012
【図１１】
2008155799.tif 000013
【図１２】
2008155799.tif 000014
【図１３】
2008155799.tif 000015
【図１４】
2008155799.tif 000016
【図１５】
2008155799.tif 000017
【図１６】
2008155799.tif 000018
【手続補正書】
【提出日】平成21年8月7日(2009.8.7)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
アウト・オブ・オーダー実行を処理するための演算処理と主記憶オペランドアドレス生成を制御するリザベーションステーションと、
機能の実行によって得られるデータを格納するレジスタ更新バッファと、
複数のスレッドが同時マルチスレッド方式で動作するための、スレッドごとのアーキテクチャレジスタと、同時に読み出すことのできるスレッド数がアーキテクチャレジスタのスレッド数より少ないスレッド数に制限する読み出しスレッド選択回路とを有するレジスタファイルと、
前記リザベーションステーションのエントリの実行により、前記レジスタファイルからオペランドデータを読み出すときは、前記エントリの実行前に、前記エントリの読み出しスレッドを選択して、前記読出しスレッド選択回路を制御するスレッド選択回路とを有し、
前記エントリの演算又はオペランド生成の実行時に、前記スレッド選択回路で選択されたスレッドのアーキテクチャレジスタからオペランドデータを読み出すことを
特徴とする命令実行制御装置。
【請求項２】
請求項１の命令実行制御装置において、
前記リザベーションステーションは、演算とオペランドアドレス生成に必要なオペランドデータを、前記レジスタ更新バッファや即値から読み出す場合には、同時に読み出すことのできるスレッド数を制限しないことを
特徴とする命令実行制御装置。
【請求項３】
請求項１の命令実行制御装置において、
前記リザベーションステーションの前記エントリによる命令の実行によって得られるデータを、前記レジスタ更新バッファに格納して、前記リザベーションステーションから実行した命令が完了した時に、前記レジスタ更新バッファのオペランドデータを、前記アーキテクチャレジスタに格納することを
特徴とする命令実行制御装置。
【請求項４】
請求項１の命令実行制御装置において、
前記リザベーションステーションは、
前記リザベーションステーションのエントリが、前記レジスタファイルからオペランドデータを読み出す必要のあるかを判定し、且つ前記スレッド選択回路で選択されたエントリのスレッドと一致するかを判定し、前記エントリが、前記レジスタファイルからの読み出しが必要で、前記スレッドと一致したエントリを、前記実行のため選択することを
特徴とする命令実行制御装置。
【請求項５】
請求項４の命令実行制御装置において、
前記リザベーションステーションは、
前記判定により、機能の実行に必要なオペランドデータを前記レジスタ更新バッファから読み出し、即値を使用することができるエントリを、エントリのスレッドに関係なく実行するエントリに選択することを
特徴とする命令実行制御装置。
【請求項６】
請求項１の命令実行制御装置において、
前記スレッド選択回路は、
前記レジスタファイルから読み出すことのできるスレッドを、特定のスレッドに限定しなければならないこと検出して、前記特定のスレッドを選択することを
特徴とする命令実行制御装置。
【請求項７】
請求項６の命令実行制御装置において、
前記スレッド選択回路は、
前記レジスタファイルから読み出すことのできるスレッドを、特定のスレッドに限定する必要がないこと検出して、動作しているスレッドを示す信号により、動作していないスレッドの選択を禁止することを
特徴とする命令実行制御装置。
【請求項８】
請求項６の命令実行制御装置において、
前記スレッド選択回路は、
前記レジスタファイルから読み出すことのできるスレッドを、特定のスレッドに限定する必要がないこと検出して、動作しているスレッドで、リザベーションステーションのエントリに１つも実行できない状態であるスレッドが存在するかを判定し、前記スレッドが存在すると判定した時に、動作している他のスレッドのエントリから発行できる状態であるスレッドが存在する場合、１つも発行できない状態であるスレッドのスレッド選択を禁止する
ことを特徴とする命令実行制御装置。
【請求項９】
請求項６の命令実行制御装置において、
前記スレッド選択回路は、
前記レジスタファイルから読み出すことのできるスレッドを、特定のスレッドに限定する必要がないこと検出して、一定期間完了できない命令がリザベーションステーションのエントリに存在するかを判定し、前記エントリが存在すると判定した場合、一定間隔で、前記完了できていないスレッドのエントリを選択する
ことを特徴とする命令実行制御装置。
【請求項１０】
リザベーションステーションにより、演算器及び主記憶オペランド生成器に、アウト・オブ・オーダー実行の処理を制御するステップと、
前記実行によって得られるデータを、レジスタ更新バッファに格納するステップと、
前記リザベーションステーションのエントリの実行により、前記レジスタファイルからオペランドデータを読み出すときは、前記エントリの実行前に、前記エントリの読み出しスレッドを選択するステップと、
同時マルチスレッド方式のスレッドごとのアーキテクチャレジスタと、同時に読み出すことのできるスレッド数がアーキテクチャレジスタのスレッド数より少ないスレッド数に制限する読み出しスレッド選択回路とを有するレジスタファイルを、前記読み出しスレッドで選択するステップと、
前記エントリの演算又はオペランド生成の実行時に、前記スレッド選択回路で選択されたスレッドのアーキテクチャレジスタからオペランドデータを読み出すステップとを有することを
特徴とする命令実行制御方法。
【国際調査報告】
2008155799.tif 000019
2008155799.tif 000020
2008155799.tif 000021
2008155799.tif 000022