(57)【要約】【課題】命令を並行して実行するプロセッサにおいて、該当命令の指示する論理レジスタに対して、物理レジスタを割り当てる場合、従来より少ない物理レジスタでもプロセッサが効率を落とさず動作するようにする。【解決手段】中間レジスタ・タグを使用し、書き込み結果が特定の値になった書き込み命令について、割り当てた物理レジスタを、命令完了を待たずに解放する仕組みとする。【選択図】      図１
2004318437.tif 000002
【特許請求の範囲】
【請求項１】
論理レジスタへの書き込みを行う命令に対して、未使用の物理レジスタを割り当て、未使用タグ・リストと未使用物理レジスタ・リストとの、それぞれの空きエントリを確認して、該当する論理レジスタと物理レジスタとのアドレスの対応づけをさせる中間レジスタ・タグ・テ−ブルと、
演算結果により前記中間レジスタ・タグ・テ−ブルへの出力変更信号により、割り当てた物理レジスタを開放する命令ウィンドウと、からなることを特徴とするプロセッサ。
【請求項２】
命令の流れに含まれる命令をデコ−ドし、論理レジスタへの書き込み命令を実行するときに、該当する論理レジスタに対して、未使用の物理レジスタを割り当てるプロセッサであって、
未使用タグ・リストと未使用物理レジスタ・リストと物理レジスタ・ファイルを有し、
前記、未使用タグ・リストと未使用物理レジスタ・リストの空きエントリを確認して、割当要求信号と論理レジスタ・アドレスを出力する命令デコーダと、
命令デコーダからの論理レジスタ・アドレスと割当要求とタグ・アドレスを受けて中間レジスタ・タグ・テ−ブルに対してタグ・アドレスを出力し、保持する論理レジスタ・マップと、
中間レジスタ・タグ・テ−ブルの未使用エントリ情報を管理し、出力する未使用タグ・リストと、
演算結果が特定の値になったか、の判定結果を命令ウィンドウと物理レジスタファイルに出力する演算器と、
中間レジスタ・タグ・テ−ブルからの物理レジスタアドレス出力選択を受けた物理レジスタ・  ファイルからの、レジスタの値もしくは特定の値の出力を受けて、命令完了前に中間レジスタ・タグを操作して、割り当てた物理レジスタを解放する、命令ウィンドウと、からなることを特徴とするプロセッサ。
【請求項３】
命令ウィンドウが物理レジスタを解放した後でも、中間レジスタ・タグ・テーブルは、物理レジスタが持っていた特定の値の情報を保持し、その値を出力可能にする、ことを特徴とする請求項２に記載のプロセッサ。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、ス−パ−スカラプロセッサに関し、より特定的には、論理レジスタへの書き込み命令を実行する時に、該当論理レジスタに対して未使用の物理レジスタを割り当てることに関するものである。
【０００２】
【従来の技術】
従来、同一レジスタへの読み書きを伴う複数の命令を、同時に、もしくは順序を入れ替えて実行するプロセッサ（所謂、ス−パ−スカラプロセッサ）では、プログラムの順序通りに命令を発行し（イン・オ−ダ発行）、発行されたと同じ順序で結果が書き込まれる（イン・オ−ダ完了）保証はなく、アウト・オブ・オ−ダ発行、アウト・オブ・オ−ダ完了になることが発生する。
【０００３】
この場合には、命令の対象となるハードウェア資源として、割り当てたレジスタに競合関係が生じ、プログラムの順序通りに命令が実行された結果の値を、後続命令が使用しなければならない「出力依存関係」や、先行命令が使う値を後続命令が破壊しないようにする「逆依存関係」に対応するための方策が必要となる。
【０００４】
この逆依存関係と出力依存関係は、レジスタを含む同じメモリのアドレスを再利用することから生ずるものであるので、メモリ競合と呼ぶのが適切であるが、この対応としては、付加的なレジスタを設け、レジスタと値との間の対応関係を再構築することによりメモリ競合を除去できる。
上記のことは、ス−パ−スカラプロセッサに関する一般的概念の説明であるが、詳細は先行技術文献に挙げた、非特許文献１に記述されており、また、ス−パ−スカラプロセッサの概念に関する説明として、特許文献１及び２においても、非特許文献１が参照されている。
【０００５】
さて、メモリ競合を除去する方法の一つとして、プログラム中で指定される論理レジスタに、物理レジスタを割り当てることが多い。この場合、論理レジスタへの書き込み命令を解釈した時に、該当論理レジスタに別の物理レジスタを割り当てることが行われる。このことにより、発行された命令がアウト・オブ・オ−ダ完了になり、レジスタ読み出し、書き込みの順序が変わっても、そのことによる不正な値の参照を防止できる。
【０００６】
更に、上記の競合関係や依存関係にある命令を、実行可能か否かによらずに命令デコ−ドを続けられるよう、実行ステ−ジとデコ−ドステ−ジを分離し、この実行ステ−ジとデコ−ドステ−ジとの間に命令ウィンドウと呼ぶバッファが設けられる。プロセッサは命令をデコ−ドし、命令ウィンドウに空きがある限り、命令を命令ウィンドウに入れる。と同時に、命令ウィンドウの中から資源競合や依存関係のない、実行可能な命令を探す。つまり、命令ウィンドウは命令を貯めておく場所であり、元のプログラムの順序とは殆ど無関係に、アウト・オブ・オ−ダに、命令ウィンドウから命令が発行されることになる。
【０００７】
このように、命令ウィンドウからアウト・オブ・オ−ダに発行された命令に、該当論理レジスタに別の物理レジスタを割り当てる方法として、図２に従来の仕組みでの、命令処理装置における各種レジスタ類の構成を示す。
図２の命令処理装置の構成において、命令デコ−ダによる命令のデコ−ド結果により、割当要求と論理レジスタアドレスの指示が論理レジスタ・マップになされる。論理レジスタ・マップは、対応づけた物理レジスタアドレスを保持するマップであり、論理レジスタに対応する物理レジスタへ出力選択を指示し、該当物理レジスタのデ−タを出力するものである。未使用物理レジスタ・リストは、命令デコ−ダからの割り当て要求に備えて、使用していない物理レジスタのアドレスをＦＩＦＯのバッファとして保持するものである。
【０００８】
命令デコーダが割当要求信号を出すと、未使用物理レジスタ・リストは割当てる物理レジスタのアドレスを論理レジスタ・マップと命令ウィンドウに通知する。論理レジスタ・マップは命令デコーダが指定したアドレスに、未使用物理レジスタ・リストから入力した物理レジスタ・アドレスを格納し、以前に格納していた物理レジスタ・アドレスを更新元物理レジスタ・アドレスとして、命令ウィンドウに出力する。命令ウィンドウは更新元物理レジスタ・アドレスを命令と関連付けて保存する。命令デコーダが読み出し要求を出した場合、論理レジスタマップは読み出す物理レジスタのアドレスを出力し、物理レジスタ・ファイルがそのレジスタの値を命令ウィンドウに出力する。
【０００９】
命令が完了すると、命令ウィンドウはその命令に関連付けられた更新元物理レジスタ・アドレスを、解放物理レジスタ・アドレスとして出力し、解放物理レジスタ・アドレスは未使用物理レジスタ・リストのＦＩＦＯバッファ−の末尾に登録される。
また、命令実行中は命令ウィンドウにレジスタ割当操作のリストを残しておき、命令が命令ウィンドウから掃きだされるとき、すなわち命令完了時にレジスタ割当操作情報をレジスタ確定状態（ｉｎ−ｏｒｄｅｒ  ｓｔａｔｅ）に反映させる。このことにより、レジスタ確定状態の更新を停止させることを行うだけで、プログラム実行の中断が可能になり、プログラム実行を容易に中断させる一つの方法となる。
【００１０】
なお、図中には示していないが、命令デコーダは命令ウィンドウや未使用物理レジスタ・リスト、各機構の空きポートなどの計算資源を監視し、処理可能な場合にのみレジスタ割当や読出の要求を出す。
上記のように従来は、レジスタ確定状態と実行中の書き込み命令の全てに物理レジスタを割り当てることになり、この場合には、論理レジスタ数より多く、論理レジスタ数と命令ウィンドウ幅の和以下の物理レジスタ数が必要であった。
【００１１】
【特許文献１】
特開平７−３３４３６４号公報（第７−１４頁）
【００１２】
【特許文献２】
特開平８−５０４９７７号公報（第１１頁）
【００１３】
【非特許文献１】
マイク・ジョンソン（Ｍｉｋｅ  Ｊｏｈｎｓｏｎ）“ス−パ−スカラプロセッサ設計”（Ｓｕｐｅｒｓｃａｌａｒ  ｍｉｃｒｏｐｒｏｃｅｓｓｏｒＤｅｓｉｇｎ）：１９９１、プレンティスホ−ル（Ｐｒｅｎｔｉｃｅ−Ｈａｌｌ，Ｉｎｃ．）
【００１４】
【発明が解決しようとする課題】
多数の論理レジスタを備え、多数の命令を同時に実行し、さらに複数のスレッド、実行パスを処理する高機能なプロセッサでは、多数のポートを備えた多数の物理レジスタが必要になる。しかし、多ポート、多エントリのレジスタは複雑で大規模な回路になるため高クロック動作が難しくなる問題を抱えていた。そこで本発明は、書き込み結果が特定の値になった書き込み命令について、割り当てた物理レジスタを、命令完了を待たずに解放する仕組みを提供することにより、従来より少ない物理レジスタでもプロセッサが効率を落とさず動作できるようにすることを目的とする。
【００１５】
【課題を解決するための手段】
本発明によるプロセッサの原理図を、図１に示す。本発明では図１に示すように、物理レジスタ・ファイル４、物理レジスタを指すレジスタ中間レジスタ・タグ・テーブル８、未使用物理レジスタ・リスト６、中間レジスタ・タグを指す論理レジスタ・マップ５、中間レジスタ用の未使用タグ・リスト７で構成され、これらの構成に対応させた命令デコーダ１と命令ウィンドウ２、演算器３に接続する。
【００１６】
本発明では、命令の流れに含まれる命令をデコ−ドし、論理レジスタへの書き込み命令を実行するときに、該当する論理レジスタに対して、未使用の物理レジスタを割り当てるプロセッサであって、未使用タグ・リストと未使用物理レジスタ・リストと物理レジスタ・ファイルを有し、前記、未使用タグ・リストと未使用物理レジスタ・リストの空きエントリを確認して、割当要求信号と論理レジスタ・アドレスを出力する命令デコーダと、命令デコーダからの論理レジスタ・アドレスと割当要求とタグ・アドレスを受けて中間レジスタ・タグ・テ−ブルに対してタグ・アドレスを出力すると共に保持する論理レジスタ・マップと、中間レジスタ・タグ・テ−ブルの未使用エントリ情報を管理し出力する未使用タグ・リストと、  演算結果が特定の値になったかの判定結果を、命令ウィンドウと物理レジスタファイルに出力する演算器と、中間レジスタ・タグ・テ−ブルからの物理レジスタアドレス出力選択を受けた物理レジスタ・  ファイルからのレジスタの値もしくは特定の値の出力を受けて、命令完了前に中間レジスタ・タグを操作して、物理レジスタを解放する、命令ウィンドウと、から構成されるプロセッサとする。
【００１７】
中間レジスタ・タグ・テーブルはタグ・アドレスをキーとするテーブルで、各エントリは物理レジスタ・アドレスと出力選択を保持すると共に、論理レジスタ・マップ、未使用タグ・リストからタグ・アドレスを、未使用物理レジスタ・リストから物理レジスタ・アドレスを、命令デコーダから割当要求信号を、命令ウィンドウから出力変更信号を入力し、物理レジスタ・アドレス、出力選択信号及び解放物理レジスタ・アドレスを出力する。
【００１８】
未使用タグ・リストは中間レジスタ・タグ・アドレスを保持するＦＩＦＯのバッファであり、命令ウィンドウから解放タグ・アドレスを、命令デコーダから割当要求信号を入力し、タグ・アドレスを出力する。
論理レジスタ・マップは論理レジスタ・アドレスをキーとするテーブルで、各エントリは中間レジスタ・タグ・アドレスを格納しており、論理レジスタ・マップは未使用タグ・リストからタグ・アドレスを受け、更新元タグ・アドレスを出力し、命令デコーダから論理レジスタ・アドレスと割当要求信号の入力を受け、タグ・アドレスを出力する。
【００１９】
命令ウィンドウは従来構成に比べ、新たに未使用タグ・リストからタグ・アドレスを、演算器から結果判定信号の入力を受け、新たに解放タグ・アドレスを出力する。演算器は従来構成に比べ、新たに結果判定信号を出力する。命令デコーダは従来構成に比べ、新たに未使用タグ・リスト、中間レジスタ・タグ・テーブルの計算資源監視を行う。物理レジスタ・ファイルは従来構成に比べ、新たに出力選択を入力し、出力選択で指示された場合は特定の値を出力する。
【００２０】
また、請求項３では、命令ウィンドウが物理レジスタを解放した後でも、中間レジスタ・タグ・テーブルは、物理レジスタが持っていた特定の値の情報を保持し、その値を出力可能にするプロセッサとする。
【００２１】
【発明の実施の形態】
以下に、図１により、各段階での詳細動作説明を行う。
（１）物理レジスタ割当時の動作
命令デコーダが割当要求信号を出力すると、論理レジスタ・マップは命令デコーダが指定する論理レジスタ・アドレスに、未使用タグ・リストが出力しているタグ・アドレスを格納する。その際、格納前の値を更新元タグ・レジスタとして次のサイクルで出力する。中間レジスタ・タグ・テーブルは未使用タグ・リストが出力しているタグ・アドレスに、未使用物理レジスタ・リストが出力している物理レジスタ・アドレスを格納し、そのエントリの出力選択を初期化する。命令ウィンドウは未使用タグ・リストが出力しているタグ・アドレス、未使用物理レジスタ・リストが出力している物理レジスタ・アドレス、論理レジスタ・マップが次のサイクルで出力する更新元タグ・アドレスを、命令デコーダが出力する命令情報に関連付けて格納する。また、未使用タグ・リストと未使用物理レジスタ・リストは、出力したアドレスの入ったエントリを削除する。
（２）レジスタ読出し時の動作
命令デコーダが論理レジスタアドレスを指定すると、論理レジスタ・マップは次のサイクルでタグ・アドレスを出力する。中間レジスタ・タグ・テーブルはこれを入力し、さらに次のサイクルで指定されたタグ・アドレスに格納している物理レジスタ・アドレス、出力選択信号を出力する。物理レジスタ・ファイルは出力選択信号が初期値ならば物理レジスタ・アドレスで指定されたレジスタの値を出力し、出力選択信号が特定の値を指定していれば、その値を出力する。
（３）演算終了時の動作
演算器が計算を終えると、演算器は結果と格納すべき物理レジスタ・アドレスを物理レジスタ・ファイルに出力するとともに、結果が特定の値になっていた場合は結果判定信号を命令ウィンドウに出力する。命令ウィンドウは結果判定信号が入されると、中間レジスタ・タグ・テーブルに出力変更信号を出力する。中間レジスタ・タグ・テーブルは指定されたタグの出力選択を指定の値に変更し、タグに割当てていた物理レジスタ・アドレスを解放物理レジスタ・アドレスとして出力する。解放物理レジスタ・アドレスは未使用物理レジスタ・リストの末尾に登録される。
（４）命令完了時の動作
命令が完了すると、命令ウィンドウは格納してある更新元タグ・アドレスを解放タグ・アドレスとして出力する。未使用タグ・リストは解放タグ・アドレスをＦＩＦＯバッファに保存する。また、中間レジスタ・タグ・テーブルは指定されたタグのエントリを解放する。この際、割り当てられた物理レジスタが出力変更されていなければ、そのアドレスを解放物理レジスタ・アドレスとして出力する。解放物理レジスタ・アドレスは未使用物理レジスタ・リストの末尾に登録される。
【００２２】
本発明の詳細動作は上記に述べた通りであるが、以下に、図３に従い、一実施例の説明を行う。本実施例では、６３本の６４ビットレジスタと９６エントリの命令ウィンドウを持ち、４つのスレッドを同時に実行するプロセッサ上の実施とし、各機構のエントリ数、データ幅を模式的に表している。物理レジスタは６４ビットで２５６本とし、中間レジスタ・タグ・テーブルは３４８エントリ、未使用タグ・リストは９ビット３４８エントリ、未使用物理レジスタ・リストは８ビット２５６エントリとする。中間レジスタ・タグ・テーブルのエントリは３ビットの出力選択と８ビットの物理レジスタ・アドレスで構成される。出力選択信号が、０００，００１，０１０，０１１，１１０，１１１の場合はそれぞれレジスタの値が２の補数で０，１，２，３，−２，−１であることを示し、出力選択が１００の場合はまだ演算結果がでていないことを示す。出力選択が１０１の場合、物理レジスタに値が格納されている。なお、出力選択の初期値を１００とする。
【００２３】
従来方式のプロセッサでは、確定状態が〔スレッドあたりの論理レジスタ数〕×〔同時実行スレッド数〕の物理レジスタを保持し、さらに命令ウィンドウ上の命令が命令ウィンドウのエントリ数の物理レジスタを保持する。これらの合計に命令完了から物理レジスタ解放、再利用までの遅延を隠蔽するための余裕を加えた数が、従来方式で必要になる物理レジスタ数である。これに対して、本発明のレジスタ装置では、確定状態、命令ウィンドウ上を問わず、特定の値を持つ物理レジスタを解放する。このため、最悪の場合でも動作するために必要な〔（スレッドあたりの論理レジスタ数）×（同時実行スレッド数）＋１〕以上の物理レジスタがあれば、特定の値を持つ物理レジスタの解放によって命令ウィンドウ上の命令に割り当てる物理レジスタや、性能上の問題で追加が必要な余分の物理レジスタが供給されることを期待できる。
【００２４】
【発明の効果】
従来方式に比べて、物理レジスタ・ファイルの規模を小さくすることができるため、より高速に動作する回路の設計が可能になる。
【図面の簡単な説明】
【図１】本発明の原理説明図
【図２】従来技術の原理説明図
【図３】各機構のエントリ数、データ幅を模式的に表した一実施例
【符号の説明】
１  命令デコーダ
２  命令ウィンドウ
３  演算器
４  物理レジスタ・ファイル
５  論理レジスタ・マップ
６  未使用物理レジスタ・リスト
７  未使用タグ・リスト
８  中間レジスタ・タグ・テーブル
【図１】
2004318437.tif 000003
【図２】
2004318437.tif 000004
【図３】
2004318437.tif 000005