(57)【要約】  同時マルチスレッド（SMT）方式の情報処理装置において、たとえば、２つのスレッド（ストランド）を平行して実行する場合、命令制御装置の分岐リザベーションステーションのエントリを、ストランド０用のエントリと、ストランド１用のエントリに分けて使用する。ストランド０のデータとストランド１のデータをそれぞれのおエントリに振り分けるのは、セレクト回路を切り替えることによる。また、分岐リザベーションステーションからエントリを解放する場合には、１つのストランド内の分岐命令の解放がインオーダーとなるように、セレクト回路でストランドを切り替えて、エントリを解放するようにする。
2008155794.tif 000002
【特許請求の範囲】
【請求項１】
単一のスレッド、あるいは複数のスレッドが実行可能な情報処理装置において、
実行しているスレッドの数を検出するスレッド数検出手段と、
実行しているスレッドの数に応じてエントリをスレッド数分にグループ分けし、各エントリ群を各スレッドに対応させ、スレッドごとに独立してアウトオブオーダーでエントリに格納されている分岐命令の処理を行い、各スレッド内でエントリの解放がインオーダーとなるように、エントリ群を選択してエントリの解放を行なう分岐リザベーションステーション手段と、
を備えることを特徴とする情報処理装置。
【請求項２】
前記分岐リザベーションステーション手段は、一部一分のエントリを使用不可とすることを特徴とする請求項１に記載の情報処理装置。
【請求項３】
前記スレッド数の変化に応じて、動的に、前記分岐リザベーションステーション手段のエントリのグループ分けを行なうことを特徴とする請求項１に記載の情報処理装置。
【請求項４】
単一のスレッド、あるいは複数のスレッドが実行可能な情報処理装置において、
実行しているスレッドの数を検出するスレッド数検出手段と、
実行しているスレッドの数に応じてエントリをスレッド数分にグループ分けし、各エントリ群を各スレッドに対応させ、スレッドごとに独立してアウトオブオーダーでエントリに格納されている分岐遅延命令の処理を行い、各スレッド内でエントリの解放がインオーダーとなるように、エントリ群を選択してエントリの解放を行なう遅延命令スタック手段と、
を備えることを特徴とする情報処理装置。
【請求項５】
前記遅延命令スタック手段は、一部一分のエントリを使用不可とすることを特徴とする請求項４に記載の情報処理装置。
【請求項６】
前記スレッド数の変化に応じて、動的に、前記遅延命令スタック手段のエントリのグループ分けを行なうことを特徴とする請求項４に記載の情報処理装置。
【請求項７】
単一のスレッド、あるいは複数のスレッドが実行可能な情報処理装置において、
実行しているスレッドの数を検出するスレッド数検出手段と、
実行しているスレッドの数に応じてエントリをスレッド数分にグループ分けし、各エントリ群を各スレッドに対応させ、スレッドごとに独立して分岐先アドレスを格納し、エントリ群を選択してエントリの解放を行なう分岐先アドレスバッファ手段と、
を備えることを特徴とする情報処理装置。
【請求項８】
前記分岐先アドレスバッファ手段は、一部一分のエントリを使用不可とすることを特徴とする請求項７に記載の情報処理装置。
【請求項９】
前記スレッド数の変化に応じて、動的に、前記分岐先アドレスバッファ手段のエントリのグループ分けを行なうことを特徴とする請求項４に記載の情報処理装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、情報処理装置に関し、特に、アウトオブオーダー処理で命令制御をおこない、かつ、SMT（Simultaneous Multi Thread）と呼ばれるマルチスレッド処理方式による命令制御を行なう情報処理装置に関する。
【背景技術】
【０００２】
IT技術が急速に進歩し、サーバなどの汎用コンピュータが社会インフラの一部として認識されるなかで、コンピュータに対する性能向上や省電力運用に対する市場の要求はますます大きくなっている。この要求は、コンピュータ内のCPU（中央演算処理装置）に対しても同様である。【０００３】
従来から、命令処理をインオーダー方式からアウトオブオーダー方式へと改良することや、半導体技術の進歩にともなう命令処理回路の改良や動作速度の高周波数化を行うことで、CPUの性能向上を図ってきた。しかしながら、半導体技術の微細化が進むにつれて動作消費電力に対する要件が厳しくなってきていること、増加するトランジスタ数に対する性能向上比の鈍化などから、従来の延長線上での手法では問題解決が難しくなってきている。【０００４】
そのような中で、CPU内のコア数を複数にすることや、一つのコア内で複数の命令スレッドを処理できるようにするなどの手法がとられるようになった。コア内で複数の命令スレッドを処理する手法としてVMT（Vertical Multi Thread）、SMT（Simultaneous Multi Thread、同時マルチスレッド）という方式がある。【０００５】
VMTは、比較的少ないトランジスタ数の追加で複数の命令スレッドを処理できるという利点があるが、同時に複数スレッドを処理できないため、スレッド切り替えが発生した場合にペナルティが発生する。【０００６】
SMTはVMTのようにスレッド切り替えは発生しないがトランジスタ数の増加が大きいこと、トランジスタ数を少なくするためスレッド間で共有する回路を持った場合に、一方のスレッドの処理の遅れが他方のスレッドの処理に影響を与えてしまうというスレッド間での影響が顕在化しまう場合がある。特に、SMTの場合はトランジスタ数の増大は避けられず、増大したトランジスタ数をいかに効率よく使用していくかが課題となる。【０００７】
特許文献１には、マルチスレッドプロセッサにおけるステートマシンに関する技術が記載されている。特許文献２には、マルチスレッドに対応したメモリについて記載されている。特許文献３及び４には、マルチスレッドコンピュータにおいて、欠陥のあるスレッドへのアクセスを不能とする技術が開示されている。
【特許文献１】特表２００３−５１６５７０号公報
【特許文献２】特開平１０−９７４６１号公報
【特許文献３】特開２００２−１０８６３０号公報
【特許文献４】特開２００２−１２３４０２号公報
【発明の開示】
【０００８】
本発明の課題は、情報処理装置、特にSMT方式の情報処理装置において、ハードウェア資源を有効に使用できる命令制御装置を提供することである。
本発明の第１の命令制御装置は、単一のスレッド、あるいは、同時に複数のスレッドが実行可能な情報処理装置の命令制御装置において、実行しているスレッドの数を検出するスレッド数検出手段と、実行しているスレッドの数に応じてエントリをスレッド数分にグループ分けし、各エントリ群を各スレッドに対応させ、スレッドごとに独立してアウトオブオーダーでエントリに格納されている分岐命令の処理を行い、各スレッド内でエントリの解放がインオーダーとなるように、エントリ群を選択してエントリの解放を行なう分岐リザベーションステーション手段とを備えることを特徴とする。
【０００９】
本発明の第２の命令制御装置は、単一のスレッド、あるいは、同時に複数のスレッドが実行可能な情報処理装置の命令制御装置において、実行しているスレッドの数を検出するスレッド数検出手段と、実行しているスレッドの数に応じてエントリをスレッド数分にグループ分けし、各エントリ群を各スレッドに対応させ、スレッドごとに独立してアウトオブオーダーでエントリに格納されている分岐遅延命令の処理を行い、各スレッド内でエントリの解放がインオーダーとなるように、エントリ群を選択してエントリの解放を行なう遅延命令スタック手段とを備えることを特徴とする。
【００１０】
本発明の第３の命令制御装置は、単一のスレッド、あるいは、同時に複数のスレッドが実行可能な情報処理装置の命令制御装置において、実行しているスレッドの数を検出するスレッド数検出手段と、実行しているスレッドの数に応じてエントリをスレッド数分にグループ分けし、各エントリ群を各スレッドに対応させ、スレッドごとに独立して分岐先アドレスを格納し、エントリ群を選択してエントリの解放を行なう分岐先アドレスバッファ手段とを備えることを特徴とする。
【図面の簡単な説明】
【００１１】
【図１】本発明の実施形態の命令制御装置の全体のブロック図である。
【図２】一般的な分岐リザベーションステーションの動作について説明する図である。
【図３】本発明の実施形態に従った分岐リザベーションステーションの動作について説明する図（その１）である。
【図４】本発明の実施形態に従った分岐リザベーションステーションの動作について説明する図（その２）である。
【図５】本発明の実施形態に従った分岐リザベーションステーションの動作について説明する図（その３）である。
【図６】本発明の実施形態に従った分岐リザベーションステーションの動作について説明する図（その４）である。
【図７】遅延命令スタックを説明する図である。
【図８】分岐先アドレスバッファの動作を説明する図（その１）である。
【図９】分岐先アドレスバッファの動作を説明する図（その２）である。
【図１０】RSBRの使用エントリ数の制御について説明する図（その１）である。
【図１１】RSBRの使用エントリ数の制御について説明する図（その２）である。
【図１２】RSBRの使用エントリ数の制御について説明する図（その３）である。
【図１３】RSBRの使用エントリ数の制御について説明する図（その４）である。
【図１４】priority信号を生成する回路のゲート図（その１）を示す。
【図１５】priority信号を生成する回路のゲート図（その２）を示す。
【図１６】priority信号を生成する回路のゲート図（その３）を示す。
【図１７】ストランドがｎ個の場合のRSBRの構成例を示した図である。
【発明を実施するための最良の形態】
【００１２】
本発明の実施形態においては、分岐命令制御のために分岐リザベーションステーションを保有し、コア内で単一スレッドを実行することも複数スレッドを同時実行することも可能な情報処理装置を考える。分岐リザベーションステーションでは、実行パイプラインに投入された分岐命令を制御し、同時に複数の分岐命令をそれぞれ制御している。分岐命令は１命令制御するのに分岐リザベーションステーションのエントリ１個を消費する。同時に制御できる分岐命令数は、分岐リザベーションステーションのエントリ数によって決まる。【００１３】
本発明の実施形態では、単一スレッド実行の場合は、分岐リザベーションステーションのすべてのエントリを分岐制御用に割り振り、複数スレッド実行の場合は、すべてのエントリをそれぞれのスレッドに割り振るようにする。分岐リザベーションステーション内では単一スレッド、複数スレッドともに全てのエントリが割り振り可能であり、実装している資源を余すことなく使用することが出来る。また、複数スレッド実行時には、それぞれのスレッドの分岐命令は独立して制御され、ストランド間調停のための制御回路においても性能影響が出ないようにする。マルチスレッド処理とは別に、イベント発生を起因として、分岐リザベーションステーション内で使用するエントリ数に制限をかけることが出来る。この制御回路は、マルチスレッドのための制御回路と共通回路を使用する。【００１４】
本実施形態による情報処理装置では、SPARC-V9アキテクチャを採用し、命令制御装置はアウトオブオーダー処理でSMTと呼ばれる同時マルチスレッド方式を採用しているものとする。以下では、マルチスレッド実効時の最大スレッド数を２スレッドとして説明するが、３スレッド以上の場合でも同様の回路で実現可能である。また、リザベーションステーション等のエントリ数についても、以下の実施形態に記載してある数でなくとも任意の数でよい。【００１５】
図１は、本発明の実施形態の命令制御装置の全体のブロック図である。
命令制御装置は、分岐予測機構として分岐予測回路（branch history : BRHIS）１０を保有し、分岐命令を制御するための回路として分岐命令制御回路（branch control : BRCTL）１１を保有する。分岐命令制御回路１１は、分岐命令を制御するための分岐リザベーションステーション（reservation station for branch : RSBR）と分岐遅延命令(instruction in the delay slot 若しくは delay instruction)を制御するための遅延命令スタック（delay slot stack : DSS）とを有する。分岐命令制御回路１１では、分岐判定、分岐先アドレスの管理、分岐予測の成否判定、分岐予測失敗時の再命令フェッチ要求、分岐予測失敗時の分岐遅延命令の命令デコーダ１２への再投入といった処理が行われる。分岐先アドレスの管理は分岐命令制御回路１１内での制御と分岐命令制御回路１１の制御下から離れ分岐命令完了までの間の制御とに分けられる。後者の制御のために分岐先アドレスバッファ（target address buffer）１３を保有する。【００１６】
分岐先アドレスバッファ１３は複数のエントリから成り、管理されるのは、分岐判定が完了している命令が分岐する場合の分岐先アドレスである。このほかに、分岐先アドレス計算を行う命令相対分岐アドレス生成回路１４、演算器ユニット１５、命令フェッチ制御回路１６、命令バッファ１７、命令デコーダ１２、命令コミット制御回路１８、プロセスマシンチェック回路１９、キャッシュ部２０が命令制御装置に設けられる。【００１７】
命令フェッチ制御回路１６からの命令フェッチ命令がキャッシュ部２０に与えられ、フェッチされた命令が命令バッファ１７に格納された後、命令デコーダ１２においてフェッチされた命令がデコードされる。命令相対分岐アドレス生成回路１４は、相対分岐命令の分岐先アドレスを生成する。命令デコーダ１２でデコードされた命令が分岐命令である場合には、分岐命令が分岐命令制御回路１１に登録され、実行される。【００１８】
演算ユニット１５は、分岐命令の分岐先アドレスを演算する。分岐予測回路１０は、分岐命令制御回路１１にある分岐命令に対し、命令の分岐先の予測を行い、予測された分岐先アドレスを命令フェッチ制御回路１６に与えて、分岐先命令のプリフェッチを行なわせる。【００１９】
命令コミット制御回路１８は、デコードされた命令の内、実行完了待ち命令を管理する。分岐先アドレスバッファ１３は、確定した分岐命令の分岐先アドレスを管理する。プログラムカウンタ２１、ネクストプログラムカウンタ２２は、実行中の命令のアドレス（もしくは、番地）番号、及び、次の命令のアドレス（もしくは、番地）番号をカウントするカウンタである。これらのカウンタのカウントの契機は、命令コミット制御回路１８から与えられる。プロセスマシンチェック回路１９は、命令バッファ１７、命令デコーダ１２、分岐命令制御回路１１、演算ユニット１５、命令コミット制御回路１８において、並列して実行されるストランドの数を管理し、現在のストランド数をこれらに指示する。分岐先アドレスバッファ１３のエントリがフルになっている場合、分岐命令制御回路１１に、TGT_BUFF_BUSYが入力される。RSBR_PLIDは、分岐命令制御回路１１に、次に処理すべき命令文のＩＤを通知するものである。分岐先アドレスバッファ１３は、分岐先アドレスに飛ぶ必要がある場合に、ネクストプログラムカウンタ２２を更新する。【００２０】
図２は、一般的な分岐リザベーションステーションの動作について説明する図である。
図２では、７個の分岐リザベーションステーション（RSBR）が示されている。RSBR0からRSBR6に向かって、順次新しい命令がセットされる。すなわち、RSBR0に最も古い命令がセットされる。新しいエントリは、命令デコードサイクルでRSBRにセットされる。新しいエントリの作成は、最大２命令が可能である。RSBR内のエントリは、インオーダーで制御され、分岐判定、分岐予測の成否判定・命令再フェッチ要求の制御が行なわれる。制御終了後のエントリ解放は、インオーダーで行なわれ、古いほうから最大２命令が可能となっている。なお、命令再フェッチは、古いほうから最大３命令可能となっている。図２では、エントリをバブルアップ方式で管理しており、開放されたエントリ分だけエントリがバブルアップする。バブルアップ順はRSBR6->RSBR5->RSBR4->RSBR3->RSBR2->RSBR1->RSBR0となる。したがって、RSBR2以降にエントリが存在した場合は、RSBR0,RSBR1のVALIDはそのままとなる場合もある。エントリデータは、バブルアップ処理によって書き換えられる。新しいエントリは、命令でコードサイクル（Ｄサイクル）でリザベーションステーションのエントリに格納される。命令再フェッチ要求は、分岐予測が失敗した場合に、リザベーションステーションに対して発行され、エントリの解放は、命令コミット制御回路１８において、命令の完了処理が終了した場合に、行なわれる。
１）分岐命令制御回路への命令投入および分岐命令制御回路でのエントリ作成について
命令バッファ１７から命令デコーダ（以降デコーダ）１２に対して命令データが供給されると、デコーダ１２で命令がデコードされ、命令バッファ１７から供給された命令種別が判別される。デコーダ１２は、命令バッファ１７から供給された命令の中に分岐命令をみつけると、分岐命令の制御を分岐命令制御回路１１に割り振る。実行パイプラインに投入されたすべての命令は、命令コミット制御回路１８で命令完了まで制御される。命令コミット制御回路１８では、命令順序保障およびレジスタ更新制御が行われる。デコーダ１２は最大４命令の同時デコードが可能であるが、分岐命令制御回路１１では回路の制限により最大２命令の分岐命令が投入される。デコーダ１２から分岐命令制御回路１１へは、制御に必要なデータやタグと共に+D_RSBR_USE, +D_IID[5:0], +D_STRAND_ID, +D_RELという信号が送られる。これらの信号は分岐命令１命令につき１セット送られる。【００２１】
ここで、+D_RSBR_USEは、実行パイプラインに投入された命令がRSBRを使用する命令であることを示す信号である。+D_IIDは、実行パイプラインに投入された命令の命令順序を示す信号である。以下、IIDを命令IDと呼ぶ。+D_STRAND_IDは、実行パイプラインに投入された命令のストランドIDを示す信号である。+D_RELは、実行パイプラインに命令が投入されるとき１となる信号である。【００２２】
図３〜図６は、本発明の実施形態に従った分岐リザベーションステーションの動作について説明する図である。
図３に示す例では、RSBRは合計14エントリで構成されている。これらのエントリは７エントリずつ二つのグループに分けられる。ここでは第一のグループをRSBRL(RSBR0,RSBR1,…,RSBR6、ストランド０),第二のグループをRSBRH(RSBR10,RSBR11,…,RSBR16、ストランド１)とする。【００２３】
実行パイプラインで実行されているスレッド数を判別するため、単一スレッドかマルチスレッドであるかを示すステータス信号が、プロセスマシンチェック回路１９からリザベーションステーションに送られてくる。ここでは、スレッド数は２スレッドで、それぞれストランド０,１と区別することにする。この「０」と「１」が、ストランドIDである。ストランドの区別は、命令制御装置内で判別しやすいように呼称をつけているだけである。【００２４】
続いて、マルチスレッド実行時について説明する。デコーダから命令が投入されると+D_REL=1となり、その命令が分岐命令であった場合には、同時に+D_RSBR_USE=1となる。投入された分岐命令がストランド０であった場合はRSBRL側に、ストランド１であった場合はRSBRH側にエントリが割り振られ、空きエントリに新規エントリが作成される。このストランドの割り振りは逆でも構わない。ただし、同一グループ内のエントリは全て同一ストランドでなければならない。【００２５】
各グループ内のエントリはデコード順で管理されており、例えば、RSBRLの場合、RSBR0から順にRSBR1,2,3,4,5,6とエントリが作成されていく。新規エントリが作成されると、そのエントリが現在有効（使用中）であることを示す信号が+RSBR_VALID=1となる。またエントリには、制御に必要なデータやタグと共に信号+RSBR_IID[5:0], +RSBR_STRAND_IDが登録される。ここで、+RSBR_VALIDは、RSBRエントリが有効であることを示す信号である。+RSBR_IIDは、登録されているエントリ（分岐命令）の命令IDを示す信号である。+RSBR_STRAND_IDは、登録されているエントリ（分岐命令）のストランドIDを示す信号である。これらの信号は、分岐命令制御回路での制御が終了するまで保持される。【００２６】
各グループ内で空きエントリがなくなった場合、そのグループが属しているストランドの新規命令投入を止めるため、分岐命令制御回路からデコーダに対して信号+RSBR_PLID=1が送られる。この信号が送られると、デコーダはそのストランドの命令デコードを一時的に止める。ストランド０の分岐命令を管理しているRSBRLがフル状態になると+RSBR_PLID_STRAND_0=1、ストランド１の分岐命令を管理しているRSBRHがフル状態になると+RSBR_PLID_STRAND_1=1となる。この信号はストランド毎に送られ、すべてのストランドで信号が１となると、デコーダは一時的に停止する。【００２７】
分岐命令制御回路での分岐命令制御が終了すると、終了したエントリは開放され空きエントリができるため、+RSBR_PLID=0となりデコードが再開される。+RSBR_PLIDは、分岐命令制御回路内に空きエントリがなくなったことを示す信号である。+RSBR_PLID_STRAND_0は、ストランド０のRSBRがフルであることを示す信号、+RSBR_PLID_STRAND_1は、ストランド１のRSBRがフルであることを示す信号である。【００２８】
図５を参照して、単一スレッド実行時について説明する。まずRSBRL,RSBRHともにエントリがない状態だとする。デコーダから分岐命令が投入されると、RSBRLに新規エントリが割り振られる（RSBRHでも構わない）。RSBR0,1,2,3,4,5,6とエントリが作成されRSBRLがフル状態になると続けてRSBRHに新規エントリが割り振られる。この時、RSBRLからRSBRHへとグループを跨いでエントリが作成される場合でも、デコーダは停止しない。【００２９】
RSBRHにRSBR10,11,12,13,14,15,16とエントリが作成されフル状態になるとデコーダに対して+RSBR_PLID=1が送られる。送られる信号は、マルチストランド時と同様にストランド毎であり、ストランド０が単一スレッドで実行されている場合は+RSBR_PLID_STRAND_0=1となる（逆の場合もありうる）。+RSBR_PLID=1は、RSBRLのエントリがなくなるまで継続される。RSBRLにエントリがなくなると+RSBR_PLID=0となりデコードが再開され、RSBR0,1,2,3,4,5,6とエントリが作成されていく。単一スレッドの場合はこの繰り返しで、RSBRL->RSBRH->RSBRL->RSBRHと順番にエントリが作成されていく。登録されるエントリデータは、マルチスレッド時も単一スレッド時も同じである。【００３０】
分岐命令制御回路は、分岐命令を制御するためのRSBRのほかに、分岐遅延命令を制御するためのDSS（遅延命令スタック：Delay Slot Stack）を保有する。
図７は、遅延命令スタックを説明する図である。【００３１】
DSS（Delay Slot Stack）もRSBRと同数のエントリ、すなわち、本実施形態の場合、合計14エントリで構成されている。このように、リザベーションステーションRSBRとDSSとは１対１で対応している。DSSのエントリは７エントリずつ，二つのグループに分けられる。第一のグループをDSSL(DSS0,DSS1,…,DSS6),第二のグループをDSSH(DSS10,DSS11,…,DSS16)とする。デコーダから分岐命令制御回路へは、制御に必要なデータやタグと共に+D_DELAY_SLOT,+D_STRAND_ID,+D_RELという信号が送られる。これらの信号は分岐遅延命令１命令につき１セット送られる。ここで、+D_DELAY_SLOTは、実行パイプラインに投入された命令がDSSを使用する命令であることを示す。【００３２】
分岐遅延命令は、分岐命令の次に投入された命令を指すため、そのIIDは必ず[分岐命令IID]+1となる。新規エントリ作成はRSBRの場合と同様の方法によるが、RSBRのようにデコードを停止させるための制御は行わない。【００３３】
分岐命令、分岐遅延命令はストランドに関係なく、同一ストランドでの命令順序さえ守ればどのように命令投入しても構わない。
２）分岐命令制御回路のエントリ消去について
分岐命令制御回路のエントリは、その分岐命令の分岐制御が終了するとエントリから開放される。分岐制御とは、分岐判定・分岐先アドレス確定・分岐予測の成否判定・命令再フェッチ要求とそのアドレス確定の各制御である。エントリから開放されるとは、その分岐命令が分岐命令制御回路の制御下から離れるということであり、そのときエントリは消去される。エントリが消去される条件として、このほかに割り込み処理や、先行命令が命令再フェッチ要求を出した時などがある。【００３４】
分岐制御終了時のエントリ開放について説明する。分岐命令制御回路では、それぞれのエントリの分岐制御は独立しておこなわれる。エントリの開放については分岐命令制御回路で、同一ストランドでの分岐命令順序を守らなければならない。ストランド間においてはそのような制約は一切ない。本実施形態では、分岐命令制御回路からのエントリ開放は、同一ストランドで最大２命令同時に開放することができる。複数ストランドのエントリを同時に開放することも可能ではあるが、実装配線量やトランジスタ数が増大するため本実施形態ではおこなっていない。【００３５】
図４を参照して、マルチスレッド実行時について説明する。分岐命令制御回路は１）で述べたようにデコード順にエントリを作成し管理しているため、エントリでは命令順序が常に保障されている。したがって、RSBRLであればRSBR0,RSBR1から、RSBRHであればRSBR10,RSBR11からエントリが開放される。図４の例では異なるストランドのエントリを同時に開放しないため、常にどちらのグループからエントリを開放するかを決定する必要がある。この処理はRSBRのグループごとにその優先権を決定するものであり、どちらのグループにどのスレッドが割り振られているかは一切関係しない。【００３６】
ここで、RSBRLでRSBR0の開放条件が成立したとする。開放条件が成立すると＋RSBR0_COMPLETE_OR=1となる。このとき、RSBRHでRSBR10の開放条件が成立していない場合は、常にRSBRL側が選択され、+RSBR10_COMPLETE_PRIORITY=0（priority信号が０）となる。この信号は、RSBRL,RSBRHどちらのグループにエントリ開放の優先権があるかを示すもので、+RSBR10_COMPLETE_PRIORITY=0の場合はRSBRLに、+RSBR10_COMPLETE_PRIORITY=1の場合はRSBRHに優先権があることを示す。ここで、+RSBR_COMPLETE_ORは、RSBRエントリの開放条件が成立していることを示す信号である。このpriority信号が２つのセレクト回路に入力されることにより、RSBRLとRSBRHのいずれからエントリを解放するかが選択される。セレクト回路０からは、RSBR0か、RSBR10のエントリが、BR0_COMPとして出力され、セレクト回路１からは、RSBR1か、RSBR11のエントリが、BR1_COMPとして出力される。【００３７】
エントリの開放条件が成立していないとは、分岐判定が終了していない、分岐先アドレスが確定していない、命令再フェッチが必要な場合でフェッチ要求が出せていない、エントリに対応する分岐遅延命令が発行されていない、エントリが存在していない、分岐するエントリで分岐先アドレスバッファに空きがない、のいずれかの場合である。＋RSBR0_COMPLETE_OR=1と+RSBR10_COMPLETE_OR=1が同時に成立した場合は、前サイクルでRSBRLからエントリが開放されていなければ+RSBR10_COMPLETE_PRIORITY=0となり、RSBRLに優先権が渡される。この場合、次サイクルでは必ず+RSBR10_COMPLETE_PRIORITY=1となり、RSBRHに優先権が渡される。RSBRL,RSBRHで開放条件が同時に成立している間は、RSBRL,RSBRH,RSBRL,RSBRH・・・の順で優先権が移動する。RSBRHが優勢権を獲得できるのはRSBRLで開放条件が成立していない、若しくは、前サイクルでRSBRLからエントリが開放されているときである。それ以外の場合はRSBRLに優勢権がある。【００３８】
+RSBR_COMPLETE_OR=1で+RSBR_COMPLETE_PRIOITY=1であると、エントリを開放することができる。エントリの開放時に、同一ストランドでの分岐命令順序を守らなければならないため、RSBR1はRSBR0と、RSBR11はRSBR10と同時にしかエントリの開放は行われない。エントリの開放と同時に、分岐命令制御回路は、そのエントリを消去する。エントリの消去とは、+RSBR_VALIDを１→０にすることである。例えば、RSBR0とRSBR1が同時に開放された場合は、+RSBR0_VALID=1->0,+RSBR1_VALID=1->0となる。【００３９】
本実施形態では、エントリをバブルアップ方式で管理しており、開放されたエントリ分だけエントリがバブルアップする。バブルアップ順はRSBR6->RSBR5->RSBR4->RSBR3->RSBR2->RSBR1->RSBR0となる。RSBRHも同様である。したがって、RSBR2以降にエントリが存在した場合は、RSBR0,RSBR1のVALIDはそのままとなる場合もある。エントリデータは、バブルアップ処理によって書き換えられる。分岐命令制御回路からエントリが開放されると同時に、その情報が命令コミット制御回路に通知される。分岐命令制御回路から開放された分岐命令は、命令コミット制御回路によって制御される。【００４０】
図６を参照して、シングルスレッド時の処理について説明する。エントリの開放については、分岐命令制御回路で同一ストランドでの分岐命令順序を守らなければならないという点は変わらない。シングルスレッド時はストランド選択は発生しないが、１）で述べたようにRSBRL,RSBRHの両方にエントリが存在する場合がある。同一グループ内では命令順序が保障されているが、RSBRL,RSBRHのどちらが先行命令グループであるかを判別する必要がある。これを判別するために前述した+RSBR10_COMPLETE_PRIORITY（priority信号）を使用する。このpriority信号が２つのセレクト回路に入力されることにより、RSBRLとRSBRHのいずれからエントリを解放するかが選択される。セレクト回路０からは、RSBR0か、RSBR10のエントリが、BR0_COMPとして出力され、セレクト回路１からは、RSBR1か、RSBR11のエントリが、BR1_COMPとして出力される。【００４１】
RSBRLにエントリがあり、RSBRHにエントリがない場合は、+RSBR10_COMPLETE_PRIORITY=0とする。一方、RSBRHにエントリがありRSBRLにエントリがない場合は、RSBR10_COMPLETE_PRIORITY=1とする。RSBRL,RSBRHの両方にエントリがある場合は、先行命令グループを指す。例えば、RSBRL,RSBRHの両方にエントリがあり、RSBRLが先行命令グループであるとする。RSBRLが先行命令グループなので、+RSBR10_COMPLETE_PRIORITY=0となる。RSBRLの最後のエントリが開放されると+RSBR10_COMPLETE_PRIORITY=1となる。後はこの繰り返しでRSBRL,RSBRH,RSBRL,RSBRH・・・の順で優先権が移動する。優先権の移動は反対グループのエントリがなくなると発生する。その他の動作についてはシングル時とマルチ時で同一動作である。【００４２】
開放の優先権を指す信号として、上記実施形態では、+RSBR10_COMPLETE_PRIORITYという１本の信号で説明しているが、命令制御装置で３スレッド以上同時に実行する場合は、この信号を実行するスレッド数によって信号数を増やせばよい。具体的に説明すると、本実施形態では、+RSBR10_COMPLETE_PRIORITYはポインタのような概念として設計されているので、２スレッドであれば１ビットで足りる。スレッド数が３スレッドないし４スレッドであれば、１ビット追加して２ビットあれば設計可能であり、[1:0]とし00:スレッド０,01:スレッド１,10:スレッド２,11:スレッド３とすればよい。
３）分岐先アドレスの管理について
分岐命令は、分岐先アドレスの計算方法で２種類に分けることができる。分岐命令アドレスからオペコードで指定された命令数分のアドレスを計算して分岐先アドレスとする命令相対分岐、オペコードで指定されたレジスタを参照して分岐先アドレスを計算するレジスタ相対分岐である。本実施形態では、命令相対分岐は命令相対分岐アドレス生成回路、レジスタ相対分岐は演算ユニットで分岐先アドレスが計算される。命令相対分岐はデコードサイクルでアドレス計算され、デコーダから分岐命令が投入されると同時に分岐先アドレスが分岐命令制御回路に渡される。この時、分岐予測が行われていた場合は、分岐予測アドレスと計算された分岐先アドレスとが比較され、その結果が分岐命令制御回路に通知される。レジスタ相対分岐はデコード後の演算サイクルで計算され、分岐先アドレスが分岐命令制御回路に渡される。分岐予測が行われていた場合は、分岐予測アドレスと計算された分岐先アドレスとが分岐命令制御回路で比較される。分岐命令が分岐命令制御回路下にいる間、分岐先アドレスはエントリ毎にエントリデータとして管理される。【００４３】
分岐命令制御が終了しエントリが開放されると同時に、分岐先アドレスが分岐先アドレスバッファに渡される。渡されるアドレスは分岐判定後、分岐する命令の分岐先アドレスのみである。【００４４】
図８及び図９は、分岐先アドレスバッファの動作を説明する図である。
本実施形態では実装配線量、トランジスタ数を節約するため、分岐先アドレスへ渡されるデータは１命令分としている。分岐先アドレスバッファへは、分岐先アドレスのほかに+COMPLETE_RSBR_IID[5:0],+COMPLETE_RSBR_STRAND_IDが渡される。ここで、+COMPLETE_RSBR_IIDは、分岐先アドレスバッファに渡されるアドレスの命令IDを示す信号である。+COMPLETE_RSBR_STRAND_IDは、分岐先アドレスバッファに渡されるアドレスのストランドIDを示す信号である。【００４５】
分岐先アドレスバッファは、分岐命令が分岐命令制御回路から開放された後、命令がコミット（命令完了）して、PC(program counter),ｎPC(next program counter)が更新されるまで、分岐先アドレスを管理する。分岐する命令がコミットすると、命令コミット制御回路から+LOAD_TARGET_TO_NPC,+COMMIT_STRAND_IDが送られる。分岐先アドレスバッファは、この情報をもとにnPC更新とエントリ消去をする。エントリが消去される条件として、このほかに先行命令による割り込み処理などがある。本実施形態では、分岐する分岐命令によるnPC更新は一サイクルに１ストランド１命令のみとしている。ここで、+LOAD_TARGET_TO_NPCは、分岐した命令がコミットし分岐先アドレスバッファからnPCへの更新を示す信号である。+COMMIT_STRAND_IDは、コミットした命令のストランドIDを示す。【００４６】
分岐先アドレスバッファがフル状態になると+RSBR_TGT_BUFF_BUSY=1となり、分岐命令制御回路から分岐する命令が開放されなくなる。分岐しない命令については開放するが、２）で述べたように、エントリの開放については、分岐命令制御回路で、同一ストランドでの分岐命令順序を守らなければならないという制約があるため、いずれ開放処理が一時停止する可能性がある。分岐先アドレスバッファがフル状態になるのは、分岐する命令の先行命令のコミット処理が遅れることによる影響である。ここで、+RSBR_TGT_BUFF_BUSYは、分岐先アドレスバッファに空きエントリがなくなったことを示す信号である。【００４７】
分岐先アドレスバッファは、合計４エントリで構成されており、それぞれTGT_BUFF_0,TGT_BUFF_1,TGT_BUFF_2,TGT_BUFF_3とする。分岐先アドレスバッファもRSBR等と同様に、エントリはバブルアップ方式で２グループ（TGT_BUFF_0,1とTGT_BUFF_2,3）に分けられる。【００４８】
マルチストランド時（図８）は、TGT_BUFF_0,1にストランド０、TGT_BUFF_2,3にストランド１の分岐先アドレスが割り振られ、バブルアップはTGT_BUFF_1->TGT_BUFF_0,TGT_BUFF_3->TGT_BUFF_2の順である。ネクストプログラムカウンタ（ｎＰＣ）は、各ストランドに設けられており、LOAD_TARGET_TO_NPC信号が入力されると、TGT_BUFF_0のアドレスがストランド０用のｎＰＣを、TGT_BUFF_2のアドレスがストランド１用のｎＰＣを更新するのに用いられる。【００４９】
シングルストランド時(図９）は、TGT_BUFF_0,1,2,3に分岐先アドレスが割り振られ、バブルアップはTGT_BUFF_3->TGT_BUFF_2->TGT_BUFF_1->TGT_BUFF_0の順である。ネクストプログラムカウンタ（ｎＰＣ）は、各ストランドに設けられているが、シングルストランド時には、ストランド１用のｎＰＣは使用されない。LOAD_TARGET_TO_NPC信号が入力されると、TGT_BUFF_0のアドレスがストランド０用のｎＰＣを更新するのに用いられる。【００５０】
以上が、マルチスレッド時とシングルスレッド時のエントリ制御方法である。このほかに、イベント発生時に使用するエントリ数に制限をかけることができる。
具体的には、RSBR,DSS,TGT_BUFFのエントリ数に制限をかけることができる。RSBR,DSSは+PLID_RSBR、TGT_BUFFは+RSBR_TGT_BUFF_BUSYを１にするエントリのフル状態の条件を変えることが可能である。通常は命令処理装置の性能確保のためすべてのエントリを使い切ることを前提としているが、特定条件下において、使用するエントリ数を削減したい場合に使用できる。イベントはどのようなものでも構わないが、例として性能削減したい場合や電力削減したい場合などが考えられる。【００５１】
図１０〜図１３は、RSBRの使用エントリ数の制御について説明する図である。
図１０は、ストランドが２個で、RSBRの使用エントリ数をそれぞれ４つずつに限定した図である。RSBR0〜RSBR3はストランド０（１）が使用し、RSBR10〜RSBR13はストランド１（０）が使用している。RSBR４〜RSBR6とRSBR14〜RSBR16は、未使用のエントリである。図１１は、RSBRの全てのエントリを使用した場合の図である。RSBR0〜RSBR６がストランド０（１）によって使用され、RSBR10〜RSBR16がストランド１（０）によって使用されている。図１２は、ストランドが１つで、RSBRの使用エントリ数を７個に制限した場合の図である。RSBR0〜RSBR6が使用されているが、RSBR10〜RSBR16は使用されていない。図１３は、ストランドが１個で、RSBRの使用エントリ数を制限していない場合を示す。１４個の全てのエントリが使用される。【００５２】
図１４〜図１６は、priority信号を生成する回路のゲート図を示す。
これらの回路は、分岐命令制御回路１１内に設けられる回路である。ストランドが２個の場合の回路（図１４、１５）とストランドが１個の場合の回路（図１６）は、並列して設けられ、ストランドの数にしたがって、どちらかが動作する。【００５３】
図１４、１５が、ストランドが２個の場合であり、図１６が、ストランドが１個の場合である。
以下は、図１４〜図１６において現れる信号名とその説明である。
+RSBR0_VALID：RSBR0のエントリ有効であることを示す。
+RSBR0_RESOLVED：RSBR0の分岐判定が確定していることを示す。
+RSBR0_TAV：RSBR0の分岐先アドレスが確定していることを示す。
+TWO_STRAND_MODE：プロセスマシンチェック回路からの指示信号で実行パイプラインが２スレッド実行（マルチスレッド実行）していることを示す
+RSBR0_TAKEN：RSBR0の分岐判定が確定し、分岐することを示す。
+RSBR0_TGT_BUFF_BUSY：RSBR0が使用する分岐先アドレスバッファに空きエントリが存在していないことを示す。
+RSBR0_COMPLETE：RSBR0のエントリ開放が発生していることを示す。
+RESET_RSBR0_VALID：RSBR0のエントリをリセットしなければならないことを示す。リセット条件は実行パイプラインクリア指示（プロセスマシンチェック回路が指示）、エントリ開放である。RSBR10の信号についても同様である。【００５４】
なお、RSBRの後の数字は、RSBRのエントリの番号を示す。したがって、RSBR0_VALIDは、RSBR0に関する信号であるが、RSBR10_VALIDは、RSBR10に関する信号である。
図１４において、
・２ストランド実行中で、RSBR0エントリの分岐命令の開放条件が揃っていない。
・２ストランド実行中で、RSBR0エントリが分岐する命令であり、且つRSBR0（RSBRL側）が使用できる分岐先アドレスバッファに空きエントリが存在しておらず、エントリ開放ができない。
・２ストランド実行中で、RSBR0エントリの分岐命令が開放された。この条件によりストランド０，１ともに開放条件が揃っているときに、０，１交互に開放することが可能となる。
・RSBR0エントリのリセット要求がきている。
上記いずれかの条件が成立した時に＋RSBR10_COMP_PRIO_TERM＝１となる。【００５５】
図１５において、
・２ストランド実行中で、RSBR10エントリの分岐命令の開放条件が揃っている。
・＋RSBR10_COMP_PRIO_TERM＝１である。
上記、全ての条件が揃ったときに+SET_RSBR10_COMPLETE_PRIORITY＝１となる。
この信号は、前述の+RSBR10_COMPLETE_PRIORITY（priority信号）のセット信号である。RSBRのストランドを選択する信号である+RSBR10_COMPLETE_PRIORITYは、+SET_RSBR10_COMPLETE_PRIORITYの値をラッチ（フリップフロップ）でラッチして、出力したものである。【００５６】
図１６は、ストランドが１個の場合の回路を示す。図１６における信号で、上記で出てきていない信号の意味は、以下の通りである。
+ONE_STRAND_MODE：プロセスマシンチェック回路からの指示信号で実行パイプラインがシングルスレッド実行していることを示す。【００５７】
図１６において、
・シングルスレッド実行中で、RSBR0にエントリが存在していない。
・シングルスレッド実行中で、+RSBR10_COMPLETE_PRIORITYがすでに１である。
・RSBR0エントリのリセット要求がきている。
上記いずれかの条件が揃い、且つRSBR10にエントリが存在しているときに、前述の+SET_RSBR10_COMPLETE_PRIORITY＝１となる。
この信号は+RSBR10_COMPLETE_PRIORITY（priority信号）のセット信号である。+RSBR10_COMPLETE_PRIORITYは、+SET_RSBR10_COMPLETE_PRIORITYの値をラッチ（フリップフロップ）でラッチして、出力したものである。【００５８】
図１７は、ストランドがｎ個の場合のRSBRの構成例を示した図である。
RSBR_COMPLETE_PRIORITY[ｘ：０]は、どのストランドの分岐命令を優先的に開放するかを指示するポインタである。ｘは2^(x+1)≧nにより決まる。分岐命令をリザベーションステーションから開放する場合は、分岐命令制御が完了しており、ポインタの示すストランドから優先的に選択され開放される。命令デコーダから命令が投入されると、ＤサイクルでストランドＩＤがセレクト回路に与えられ、ストランドＩＤに対応したストランドのエントリに命令が格納される。命令コミット制御回路から、RSBR0〜RSBRn0のいずれかについて分岐命令制御が完了したと通知された場合には、RSBR_COMPLETE_PRIORITY[x:0]（セレクト信号）によって、セレクト回路が解放するストランドのエントリを選択し、解放されたエントリをBR_COMPとして出力する。図１７では、スレッド数をｎ個としている。【００５９】
なお、実行パイプライン上で、優先的に実行するストランドがプロセスマシンチェック回路から指示される。指示されるのはシングルスレッド実行か２スレッド実行（マルチスレッド実行）であるか、シングルスレッド実行の場合はストランド０かストランド１のどちらを実行するかである。シングルスレッド実行か、マルチスレッド実行かを決定するのはプロセスマシンチェック回路であるが、考えられる制御としては実行プログラムからの指示によるもの、ハードウェアの故障によりマルチスレッド実行が困難になった場合などが考えられる。シングルスレッド実行か、マルチスレッド実行かを決定する要因については、前述している要因以外でもよい。シングルスレッド実行⇔マルチスレッド実行の切り替え時は、実行パイプライン上の命令が一旦クリアされ、命令フェッチから再実行となる。【００６０】
なお、以上において、スレッド数（ストランド数）の変更があった場合には、これをプロセスマシンチェック回路が検出し、分岐リザベーションステーション、遅延命令スタック、分岐先アドレスバッファに、ストランド数を設定することにより、動的にスレッド数の変更に対応することが出来る。【００６１】
以上のように、複数スレッドを同時に実行する場合には、分岐リザベーションステーション、遅延命令スタック、分岐先アドレスバッファのエントリをスレッド数にグループ分けして、それぞれのスレッドで独立してエントリを使うようにし、単一スレッドのときは、これらのエントリをグループ分けすることなく、当該スレッドで使用するようにする。単一スレッドの場合と複数スレッドの場合で、エントリを適切にグループ分けして試用することにより、無駄に未使用となっているエントリの数を減らすことによって、情報処理装置の持っているハードウェア資源の有効利用を行なうことができる。
【図１】
2008155794.tif 000003
【図２】
2008155794.tif 000004
【図３】
2008155794.tif 000005
【図４】
2008155794.tif 000006
【図５】
2008155794.tif 000007
【図６】
2008155794.tif 000008
【図７】
2008155794.tif 000009
【図８】
2008155794.tif 000010
【図９】
2008155794.tif 000011
【図１０】
2008155794.tif 000012
【図１１】
2008155794.tif 000013
【図１２】
2008155794.tif 000014
【図１３】
2008155794.tif 000015
【図１４】
2008155794.tif 000016
【図１５】
2008155794.tif 000017
【図１６】
2008155794.tif 000018
【図１７】
2008155794.tif 000019
【国際調査報告】
2008155794.tif 000020
2008155794.tif 000021
2008155794.tif 000022
2008155794.tif 000023