(57)【要約】      （修正有）【課題】浮動小数点レジスタのリネーミングレジスタ不足の発生を減少させる、浮動小数点演算命令の演算時に例外を検出しても命令完了時に例外処理を発生しないことが設定された演算処理装置を提供する。【解決手段】浮動小数点レジスタはアーキテクチャレジスタまたはリネーミングレジスタのいずれかに割り当てられる複数のエントリを含み、演算実行制御部は浮動小数点演算命令の発行と演算終了前に浮動小数点演算の終了報告を出力し、命令完了制御部は浮動小数点演算終了報告によりリネーミングレジスタの解放を指示する。命令デコーダはリネーミングレジスタ解放指示の受信により、浮動小数点演算の実行結果を格納するアーキテクチャレジスタに割り当てられた第１のエントリをリネーミングレジスタに割り当て、演算においてリネーミングレジスタに割り当てられた第２のエントリを実行結果を格納するアーキテクチャレジスタに割り当てる。【選択図】図２
2019215694.tif 000002
【特許請求の範囲】
【請求項１】
浮動小数点演算命令の演算時に例外を検出しても命令完了時に例外処理を発生しないことが設定された演算処理装置であって、
浮動小数点演算を行う演算器と、
複数のエントリを含み、前記複数のエントリのそれぞれはアーキテクチャレジスタまたはリネーミングレジスタのいずれかに割り当てられる浮動小数点レジスタと、
前記浮動小数点演算命令を発行するとともに、前記演算器による前記浮動小数点演算が終了する前に前記浮動小数点演算の終了報告を出力する演算実行制御部と、
前記終了報告を受信して、命令の実行を完了すると、前記リネーミングレジスタの解放を指示する命令完了制御部と、
前記指示を受信するとともに、前記浮動小数点演算の実行結果を格納するアーキテクチャレジスタに割り当てられた第１のエントリをリネーミングレジスタに割り当て、前記浮動小数点演算においてリネーミングレジスタに割り当てられた第２のエントリを前記浮動小数点演算の実行結果を格納するアーキテクチャレジスタに割り当てる命令デコーダと、
を備える演算処理装置。
【請求項２】
前記演算実行制御部は、前記浮動小数点演算命令のソースオペランドのデータが確定したとき、前記終了報告を出力する請求項１記載の演算処理装置。
【請求項３】
前記演算処理装置に浮動小数点演算命令の演算時に例外を検出したら命令完了時に例外処理を発生することが設定されている場合、前記命令完了制御部は、前記終了報告を受信してから所定時間経過後に前記リネーミングレジスタの解放を指示する請求項１または２記載の演算処理装置。
【請求項４】
浮動小数点演算命令の演算時に例外を検出しても命令完了時に例外処理を発生しないことが設定され、複数のエントリを含み、前記複数のエントリのそれぞれはアーキテクチャレジスタまたはリネーミングレジスタのいずれかに割り当てられる浮動小数点レジスタを有する演算処理装置の制御方法であって、
前記演算処理装置が有する演算器が浮動小数点演算を行い、
前記演算処理装置が有する演算実行制御部が、前記浮動小数点演算命令を発行するとともに、前記演算器による前記浮動小数点演算が終了する前に前記浮動小数点演算の終了報告を出力し、
前記演算処理装置が有する命令完了制御部が、前記終了報告を受信して、命令の実行を完了するとともに、前記リネーミングレジスタの解放を指示し、
前記演算処理装置が有する命令デコーダが、前記指示を受信するとともに、前記浮動小数点演算の実行結果を格納するアーキテクチャレジスタに割り当てられた第１のエントリをリネーミングレジスタに割り当て、前記浮動小数点演算においてリネーミングレジスタに割り当てられた第２のエントリを前記浮動小数点演算の実行結果を格納するアーキテクチャレジスタに割り当てる
演算処理装置の制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、演算処理装置および演算処理装置の制御方法に関する。
【背景技術】
【０００２】
プログラムの命令を機械語プログラムにおける命令の並び順に関わらず、実行可能な命令から実行するアウト・オブ・オーダー（out-of-order）実行することが可能な演算処理装置において、アーキテクチャレジスタ(汎用レジスタ（ＧＰＲ：General Purpose Register）、浮動小数点レジスタ（ＦＰＲ：Floating Point Register）)とリネーミングレジスタ（Renaming Register）とが分離してレジスタを構成している場合がある。その場合、当該演算処理装置は、アウト・オブ・オーダー実行した演算命令の実行の結果をリネーミングレジスタに格納した後に、機械語プログラムにおける命令の並び順であるイン・オーダーで命令の完了を行う。当該装置は、命令の完了時に、リネーミングレジスタから実行の結果を読み出して、アーキテクチャレジスタに格納する。
【０００３】
転送命令を検出すると、ソースレジスタに関するリネーミングレジスタをデスティネーションレジスタに再割り当てすることで、転送命令の実行を行うことなく、命令の処理を高速に行う技術が知られている（例えば、特許文献１参照）。また、ハードウェアを複雑にすることなく、かつ柔軟性のあるレジスタ・リネーム処理を行う技術が知られている（例えば、特許文献２参照）。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特表２００２−５２０７２９号公報
【特許文献２】特開２００２−１７５１８１号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
ＨＰＣ(High Performance Computing)系のアプリケーションでは、プログラムを高速に動作させるために、浮動小数点演算命令の演算時に例外（例えば、ゼロ除算、オーバーフロー、またはアンダーフロー等）を検出しても命令完了時に例外処理を発生しないことを、ソフトウェアから設定することが可能な場合がある。例えば、ＡＲＭ（登録商標）アーキテクチャの場合は、ＦＰＣＲ(Floating-point Control Register)に定義されている各例外処理の発生をマスクすることが可能である。この浮動小数点演算命令の例外を全てマスクする設定がされているときは、浮動小数点レジスタを使用する命令が多く実行されることが予想される。
【０００６】
プログラムの命令をアウト・オブ・オーダー実行することが可能な演算処理装置において、浮動小数点レジスタに格納する命令は、浮動小数点のリネーミングレジスタを割り当てる。リネーミングレジスタは、命令デコード時に割り当てて、命令完了時に解放するために、実行の時間が長いとリネーミングレジスタを割り当てている時間が長くなる。実行の時間が長くなる原因としては、命令間のデータの依存関係がある場合などがある。このために、浮動小数点のリネーミングレジスタを多く使用するプログラムの場合は、浮動小数点のリネーミングレジスタのエントリ数が不足することが発生する。リネーミングレジスタの数が不足すると、新たにリネーミングレジスタを割り当てることができないために、命令デコードが停止する。命令デコードが停止すると、命令実行部に命令が供給されないために、実行の効率が低下し、性能低下に繋がる。
【０００７】
１つの側面において、本発明は、浮動小数点レジスタのリネーミングレジスタの不足の発生を減少させることを目的とする。
【課題を解決するための手段】
【０００８】
実施の形態の演算処理装置は、  浮動小数点演算命令の演算時に例外を検出しても命令完了時に例外処理を発生しないことが設定される。前記演算処理装置は、演算器と、浮動小数点レジスタと、演算実行制御部と、命令完了制御部と、命令デコーダと、を有する。
【０００９】
前記演算器は、浮動小数点演算を行う。
【００１０】
前記浮動小数点レジスタは、複数のエントリを含み、前記複数のエントリのそれぞれはアーキテクチャレジスタまたはリネーミングレジスタのいずれかに割り当てられる。
【００１１】
前記演算実行制御部は、前記浮動小数点演算命令を発行するとともに、前記演算器による前記浮動小数点演算が終了する前に前記浮動小数点演算の終了報告を出力する。
【００１２】
前記命令完了制御部は、前記終了報告を受信して、命令の実行を完了すると、前記リネーミングレジスタの解放を指示する。
【００１３】
前記命令デコーダは、前記指示を受信するとともに、前記浮動小数点演算の実行結果を格納するアーキテクチャレジスタに割り当てられた第１のエントリをリネーミングレジスタに割り当てる。前記命令デコーダは、前記浮動小数点演算においてリネーミングレジスタに割り当てられた第２のエントリを前記浮動小数点演算の実行結果を格納するアーキテクチャレジスタに割り当てる。
【発明の効果】
【００１４】
実施の形態によれば、浮動小数点レジスタのリネーミングレジスタの不足の発生を減少させることができる。
【図面の簡単な説明】
【００１５】
【図１】比較例のＣＰＵのコアの構成図である。
【図２】比較例の浮動小数点演算命令の動作を示す図である。
【図３】比較例の浮動小数点演算命令の完了の動作のフローチャートである。
【図４】実施の形態のシステムの構成図である。
【図５】実施の形態のコアの構成図である。
【図６】浮動小数点物理レジスタの構成の例を示す図である。
【図７】浮動小数点物理レジスタのアーキテクチャレジスタとリネーミングレジスタの切り替えを示す図である。
【図８】実施の形態の浮動小数点演算命令の動作を示す図である。
【図９】命令完了制御部の詳細な構成図である。
【図１０】実施の形態の浮動小数点演算命令の完了の動作のフローチャートである。
【図１１】浮動小数点演算時に例外を検出しても例外処理を発生しないことが設定されているときの命令完了の動作のタイミングチャートである。
【図１２】浮動小数点演算時に例外を検出したら例外処理を発生することが設定されているときの命令完了の動作のタイミングチャートである。
【図１３】ＦＰＳＲ更新回路の詳細な構成図である。
【図１４】ＦＰＳＲの更新の動作のタイミングチャートである。
【図１５】ＦＰＳＲを読み出す命令の動作のタイミングチャートである。
【発明を実施するための形態】
【００１６】
以下、図面を参照しながら実施の形態について説明する。
【００１７】
最初に比較例について説明し、その後、実施の形態について説明する。
【００１８】
図１は、比較例のＣＰＵ（Central Processing Unit）のコアの構成図である。
【００１９】
ＣＰＵ（不図示）は、複数のコアを含み、図１は複数のコアのうちの１つのコア１１の構成を示す。
【００２０】
コア１１は、命令デコーダ２１、演算実行制御部２２、命令完了制御部２３、浮動小数点演算器２４、浮動小数点リネーミングレジスタ２５、浮動小数点レジスタ２６、ＦＰＣＲ（Floating-point Control Register）２７、ＦＰＳＲ（Floating-point Status Register）２８、およびＰＣ（Program Counter）２９を含む。
【００２１】
演算実行制御部２２は浮動小数点演算命令のオペランドデータが揃った命令を浮動小数点演算器２４に発行する。発行された命令は、オペランドデータを浮動小数点リネーミングレジスタ２５や浮動小数点レジスタ２６から読み出して浮動小数点演算器２４に入力する。
【００２２】
浮動小数点演算器２４は演算の実行を開始して、演算の実行が終了すると、演算実行制御部２２は、命令完了制御部２３に演算命令の実行が終了したことを報告する。浮動小数点演算器２４は演算の実行の終了時に、演算の結果を浮動小数点リネーミングレジスタ２５に格納する。また、演算の例外を検出したときは、浮動小数点演算器２４は命令完了制御部２３に演算例外を検出したことを報告する。
【００２３】
命令完了制御部２４は、プログラムにおける命令の並び順に命令の完了を行う。命令完了制御部２４は、浮動小数点演算命令が完了すると、浮動小数点リネーミングレジスタ２５から演算の結果を読み出して、浮動小数点レジスタ２６に格納する。
【００２４】
図２は、比較例の浮動小数点演算命令の動作を示す図である。
【００２５】
図２において、時間軸は左から右方向である。ＦＰＣＲ２７には、浮動小数点演算命令の演算時に例外を検出しても命令完了時に例外処理を発生しないことが設定されている。
【００２６】
命令デコーダ２１は、浮動小数点演算命令をデコードし、浮動小数点リネーミングレジスタ２５のうちのあるエントリをリーミングレジスタに割り当てる。
【００２７】
演算実行制御部２２は、浮動小数点演算命令を発行し、浮動小数点演算器２４は、浮動小数点演算命令の実行を開始する。
【００２８】
浮動小数点演算命令の実行が終了すると、演算実行制御部２２は、命令完了制御部２３に実行終了報告を送る。また、浮動小数点演算器２４は、浮動小数点演算命令の実行結果をリーミングレジスタに格納する。
【００２９】
命令完了制御部２３は、実行終了報告を受信し、命令完了制御を行う。命令完了制御において、命令完了制御部２３は、命令デコーダ２１にリネーミングレジスタの解放を指示する。
【００３０】
命令完了制御部２３は、ＦＰＳＲ２８、ＰＣ２９の更新を行う。また、命令完了制御部２３は、リーミングレジスタから浮動小数点演算命令の実行結果を読み出して、浮動小数点レジスタ２６に格納する（浮動小数点レジスタの更新）。また、命令デコーダ２１は、リネーミングレジスタの解放の指示を受信すると、上記の割り当てたリーミングレジスタを解放する。
【００３１】
図３は、比較例の浮動小数点演算の完了の動作のフローチャートである。
【００３２】
演算実行制御部２２は、浮動小数点演算命令を浮動小数点演算器２４に発行する。浮動小数点演算器２４は、浮動小数点演算命令の実行を開始し（ステップＳ５１）、演算実行制御部２２は、浮動小数点演算命令の実行が終了時（ステップＳ５２）に、演算実行制御部２２から命令完了制御部２３に演算の終了報告を送る（ステップＳ５３）。
【００３３】
命令完了制御部２３は、命令の完了対象であるかをチェックして（ステップＳ５４）、完了対象である場合（ステップＳ５４：Ｙｅｓ）は、命令完了制御を行う（ステップＳ５５）。プログラムにおける命令の並び順に、完了を行うために、完了対象でない場合があり（ステップＳ５４：Ｎｏ）、その場合は、完了対象になるまで、待つ処理を行う。命令完了制御部２３は、命令完了すると、資源（ＦＰＳＲ２８、ＰＣ２９）の更新や浮動小数点リネーミングレジスタ２５の解放処理を行う。
【００３４】
浮動小数点リネーミングレジスタ２５の不足を解消する方法として、浮動小数点リネーミングレジスタ２５のエントリ数の増加や浮動小数点演算命令の実行レイテンシを短縮することが考えられる。しかしながら、浮動小数点リネーミングレジスタ２５のエントリ数の増加は、増加する回路が多いために、ＣＰＵの面積への影響が発生する可能性がある。ＣＰＵの面積の増加は、コストの増加に繋がる。また、命令の実行レイテンシの短縮は、周波数の低下に繋がる可能性が発生するために、性能低下に繋がる。
【００３５】
図４は、実施の形態のシステムの構成図である。
【００３６】
システム１００は、ノード１０１−ｉ（ｉ＝１〜ｎ）を有する。各ノード１０１−ｉは、少なくとも１つ以上の他のノード１０１−ｉと接続しており、互いに通信可能である。
【００３７】
ノード１０１−１は、ＣＰＵ１１０、メモリ２０１、およびＩ／Ｏ(Input/Output)３０１を含む。尚、ノード１０１−２〜１０１−ｎの構成は、ノード１０１−１の構成と同様であるため説明は省略する。
【００３８】
ＣＰＵ１１０は、コア１１１−ｊ（ｊ＝１〜ｍ）、ＭＡＣ（Memory Access Controller）１１２、ＬＬ（Last Level）キャッシュ１１３、およびインターコネクト部１１４を含む。ＣＰＵ１１０は、演算処理装置の一例である。
【００３９】
コア１１１−ｊは、各種演算処理を行う。
【００４０】
ＭＡＣ１１２は、メモリ２０１の読み書きの制御を行う。
【００４１】
ＬＬキャッシュ１１３は、コア１１１−ｊが利用可能な共用のキャッシュである。
【００４２】
インターコネクト部１１４は、ノード１０１−２〜１０１−ｎのうち１つ以上のノードと接続し、データの送受信を行う。
【００４３】
メモリ２０１は、ノード１０１−１が使用するデータやプログラム等を記憶する。ＣＰＵ１１０は、メモリ２０１に記憶されているデータを読み書きして、各種処理を実行する。
【００４４】
Ｉ／Ｏ３０１は、ノード１０１−１の内部または外部の装置（不図示）と接続するインターフェースである。
【００４５】
図５は、実施の形態のコアの構成図である。
【００４６】
図５では、コア１１１−１の構成を示す。尚、コア１１１−２〜１１１−ｍの構成は、コア１１１−１の構成と同様であるので、説明は省略する。
【００４７】
コア１１１−１は、命令フェッチアドレス生成器１１５、１次命令キャッシュ１１６、命令バッファ１１７、命令デコーダ１２１、メモリアクセス実行制御部１３１、オペランドアドレス生成器１３２、１次データキャッシュ１３３、演算実行制御部１４１、固定小数点演算器１４２、浮動小数点演算器１４３、固定小数点物理レジスタ１５１、浮動小数点物理レジスタ１６１、命令完了制御部１７１、ＦＰＣＲ１８１、ＦＰＳＲ１８２、ＰＣ１８３、分岐実行制御部１９１、および分岐予測機構１９２を有する。
【００４８】
固定小数点物理レジスタ１５１および浮動小数点物理レジスタ１６１は、アーキテクチャレジスタとリネーミングレジスタで構成する物理レジスタ方式である。つまり、固定小数点物理レジスタ１５１および浮動小数点物理レジスタ１６１は、リネーミングレジスタとアーキテクチャレジスタが混在しているレジスタである。物理レジスタ方式は、実行の結果を物理レジスタに格納すると、命令の完了時に実行の結果の移動が発生しない。
【００４９】
命令フェッチを行うために、命令フェッチアドレス生成器１１５は選択した命令アドレスに対して命令フェッチリクエストを発行し、命令バッファ１１７は１次命令キャッシュ１１６からフェッチしてきた命令を格納する。命令バッファ１１７はプログラムにおける命令の並び順に命令デコーダ１２１に命令の供給を行い、命令デコーダ１２１はプログラムにおける命令の並び順に命令のデコード処理を行い、命令を発行する。
【００５０】
命令デコーダ２１は、デコードする命令の種類に従って、命令の実行を制御するメモリアクセス実行制御部１３１、固定小数点演算と浮動小数点演算を制御する演算実行制御部１４１、分岐実行制御部１９１に必要なエントリを作成する。命令デコーダ１２１は、全てのデコードされた命令に対して、命令の完了を制御する命令完了制御部１７１に含まれるコミットスタックエントリ（ＣＳＥ）にエントリを作成する。また、実行結果を格納する固定小数点物理レジスタ１５１と浮動小数点物理レジスタ１６１は、それぞれアーキテクチャレジスタとリネーミングレジスタで構成される。固定小数点物理レジスタ１５１のリネーミングレジスタは、固定小数点リネーミングレジスタと表記する場合がある。浮動小数点物理レジスタ１６１のリネーミングレジスタは、浮動小数点リネーミングレジスタと表記する場合がある。
【００５１】
デコードされた命令がメモリアクセス実行制御部１３１、演算実行制御部１４１にエントリを作成する場合には、命令デコーダ２１は、固定小数点物理レジスタ１５１のリネーミングレジスタと浮動小数点物理レジスタ１６１のリネーミングレジスタにレジスタを割り当てるレジスタリネーミング処理を行う。演算実行制御部１４１で実行に必要なソースオペランドが揃った命令から実行することで、アウト・オブ・オーダー実行を行うことが可能となる。実行結果を命令デコード時に割り当てられた固定小数点リネーミングレジスタと浮動小数点リネーミングレジスタに格納する。演算実行制御部１４１から、アウト・オブ・オーダーで実行された命令は、命令完了制御部１７１の制御によりプログラムにおける命令の並び順に命令の完了を行い、完了した命令に対してのみ、ＰＣなどのプログラマブルな資源の更新を行う。また、リネーミングレジスタとアーキテクチャレジスタが混在した物理レジスタ方式において、命令でコーダ１２１は、演算結果を格納したリネーミングレジスタとして扱っている物理レジスタのアドレスをアーキテクチャレジスタに変更する。
【００５２】
命令完了制御部１４１は、ＣＳＥのエントリの最も古い順から命令完了を行うことで、プログラム順に命令を完了することが可能となる。命令完了制御部１４１は、１サイクルで同時に完了することが可能な最大数の命令をＣＳＥから選択する。命令完了制御部１４１は、選択したエントリを命令の完了対象のエントリとして、完了制御を行う。命令デコード時に、ＣＳＥに登録するエントリ番号(ＩＩＤ:Instruction ID)が与えられる。ＩＩＤは、演算実行制御部１４１に送られ、命令の実行が終了したときに、ＩＩＤが示すＣＳＥのエントリ番号に実行の終了報告を格納することで、実行が終了した命令を特定することが可能となる。
【００５３】
ＦＰＣＲ１８１には、浮動小数点演算命令の演算時に例外を検出したときに、命令完了時に演算例外を発生するかしないかを示す情報が設定される。ＦＰＣＲ１８１には、複数の例外が定義されており、各例外に対して、命令完了時に、例外を発生するか否かをソフトウェアが設定することが可能である。
【００５４】
実施の形態では、ＦＰＣＲ１８１で設定可能な例外を全て、発生しないと設定されているとする。ただし、ＦＰＣＲ１８１の設定にかかわらず、浮動小数点演算時に演算例外を検出したことを専用のアーキテクチャレジスタであるＦＰＳＲ１８２に格納する。
【００５５】
浮動小数点演算命令の演算時に例外を検出した場合は、浮動小数点演算命令の実行が終了したときに、浮動小数点演算器１４３から命令完了制御部１７１に、演算の例外を検出したことを報告する。また、演算実行制御部１４１から命令完了制御部１７１に演算の終了報告とＩＩＤを送るタイミングから固定サイクル後に、浮動小数点演算器１４２から例外を検出したことが命令完了制御部１７１に送られてくる。このために、命令完了制御部１７１は、浮動小数点演算命令が例外を検出したことをＣＳＥのエントリに格納することが可能になる。そして、命令完了制御部１７１は、命令完了時に、ＣＳＥのエントリに演算例外を検出したことを読み出してＦＰＳＲ１８２を更新する。ＦＰＳＲ１８２の更新は、命令完了時になるために、命令完了制御部１７１は、プログラムカウンタなどと同じタイミングで更新する。
【００５６】
図６は、浮動小数点物理レジスタの構成の例を示す図である。
【００５７】
浮動小数点物理レジスタ１６１は、浮動小数点数を格納する。浮動小数点物理レジスタ１６１は、複数のエントリを含み、各エントリには、各エントリを識別する物理レジスタ番号が割り当てられている。
【００５８】
浮動小数点物理レジスタ１６１は、アーキテクチャレジスタとリネーミングレジスタを含む。浮動小数点物理レジスタ１６１の各エントリは、アーキテクチャレジスタまたはリネーミングレジスタのいずれかに割り当てられる（設定される）。また、エントリに割り当てられるアーキテクチャレジスタまたはリネーミングレジスタは、命令デコーダ１２１により適宜変更可能である。アーキテクチャレジスタは、プログラムから観測することが可能なレジスタである。リネーミングレジスタは、プログラムから観測することができないレジスタで、ハードウェアが命令を実行した結果を格納するレジスタである。
【００５９】
浮動小数点物理レジスタ１６１のエントリのうち、アーキテクチャレジスタ以外は、リネーミングレジスタとして扱われる。リネーミングレジスタは命令のデコード時に割り当てられ、命令の実行の結果を格納する。リネーミングレジスタは、命令が完了すると、アーキテクチャレジスタになる。更新前にアーキテクチャレジスタとして扱われていた浮動小数点物理レジスタ１６１のエントリは、更新後にリネーミングレジスタとして扱われる。
【００６０】
命令デコードから発行された浮動小数点演算命令は、演算実行制御部１４１に登録される。演算実行制御部１４１は、命令を実行するためのソースオペランドのデータが演算開始タイミングで揃うことを判断したら、命令を発行して演算の実行を開始する。演算の実行は、演算実行制御部１４１で制御される。
【００６１】
図６では、物理レジスタ番号が０、１、３、７７のエントリがリネーミングレジスタ、物理レジスタ番号が２、７５，７６のエントリがアーキテクチャレジスタとしてそれぞれ設定されている。
【００６２】
図７は、浮動小数点物理レジスタのアーキテクチャレジスタとリネーミングレジスタの切り替えを示す図である。
【００６３】
ここで、浮動小数点物理レジスタ１６１の物理レジスタ番号がＡ番のエントリを物理レジスタＡ番と表記する。
【００６４】
図７の左上側に示す浮動小数点物理レジスタ１６１において、浮動小数点物理レジスタ１６１の物理レジスタ番号が２４番のエントリ（物理レジスタ２４番）が、アーキテクチャレジスタの５番として管理されている（ステップＳ５０１）。このときに、命令デコーダ１２１は、アーキテクチャレジスタの５番を更新する浮動小数点演算命令Ａを命令デコードし（ステップＳ５０２）、物理レジスタ６７番をリネーミングレジスタとして割り当てる（ステップＳ５０３）。
【００６５】
図７の左下側に示す浮動小数点物理レジスタ１６１は、アーキテクチャレジスタとリネーミングレジスタの切り替え後の状態を示している。浮動小数点演算器１４３での浮動小数点演算命令Ａの実行中に、浮動小数点演算命令Ａが命令完了すると、命令デコーダ１２１は物理レジスタ６７番をアーキテクチャレジスタの５番に割り当てる（ステップＳ５０４）。一方、アーキテクチャレジスタの５番であった物理レジスタ２４番は、リネーミングレジスタとして、解放される（ステップＳ５０５）。物理レジスタ２４番は、新たにリネーミングレジスタとして割り当てられるまでは、無効なレジスタとして管理される。その後、リネーミングレジスタを使用する命令Ｂが命令デコードされたときに、物理レジスタ２４番は、リネーミングレジスタとして割り当てられる（ステップＳ５０６）。命令Ａの完了後、命令Ａの実行結果は、物理レジスタ６７番に格納される（ステップＳ５０７）。
【００６６】
比較例において、アーキテクチャレジスタとリネーミングレジスタの切り替えを行う場合、命令Ａの完了後に命令Ａの実行結果が物理レジスタ６７番に格納された後に、物理レジスタ６７番はリネーミングレジスタからアーキテクチャレジスタの５番に割り当てられ、物理レジスタ２４番は、リネーミングレジスタとして、解放される。
【００６７】
一方、実施の形態では、命令Ａの実行中（すなわち命令Ａの実行の終了前）に、命令Ａを完了して、アーキテクチャレジスタの５番であった物理レジスタ２４番は、リネーミングレジスタとして、解放される。すなわち、実施の形態では、物理レジスタ２４番はリネーミングレジスタとして、比較例に比べて早く解放される、それにより、実施の形態では、リネーミングレジスタのエントリ数が不足するのを抑止できる。
【００６８】
図８は、実施の形態の浮動小数点演算命令の動作を示す図である。
【００６９】
図８において、時間軸は左から右方向である。ＦＰＣＲ１８１には、浮動小数点演算命令の演算時に例外を検出しても命令完了時に例外処理を発生しないことが設定されている。図８では、図７と同様に浮動小数点演算命令によりアーキテクチャレジスタの５番を更新する場合を説明する。浮動小数点物理レジスタ１６１の物理レジスタ番号が２４番のエントリ（物理レジスタ２４番）が、アーキテクチャレジスタの５番として管理されているとする。
【００７０】
命令デコーダ１２１は、浮動小数点演算命令をデコードし、浮動小数点物理レジスタ１６１のうちの物理レジスタ６７番をリネーミングレジスタに割り当てる。
【００７１】
演算実行制御部１８１は、浮動小数点演算命令を発行し、浮動小数点演算器１４３は、浮動小数点演算命令の実行を開始する。
【００７２】
浮動小数点演算命令の演算実行制御部１８１は、浮動小数点演算命令の演算時に例外を検出しても命令完了時に例外処理を発生しない設定のときは、実行する命令が、命令を完了して、アーキテクチャレジスタをリネーミングレジスタとして解放した後に、後続の命令によって当該リネーミングレジスタのエントリに演算結果を先に格納されることがないことが確定したタイミングで、命令完了制御部１７１に浮動小数点演算命令の実行の終了を報告する。それにより、浮動小数点演算命令の実行の終了を待たずに、命令の完了を行うことを可能とする。このために、演算レイテンシによって、実行の終了を報告するタイミングは異なる。また、最も早い浮動小数点演算命令の実行の終了を報告するタイミングは、実行する浮動小数点演算命令のソースオペランドのデータが確定したタイミングになる。
【００７３】
浮動小数点演算命令の実行が開始されると、演算実行制御部１４１は、演算の実行の終了を待たずに、命令完了制御部１７１に実行終了報告を送る。命令完了制御部１７１は、実行終了報告を受信し、命令の完了対象であるかをチェックする。命令完了制御部１７１は、完了対象である場合、浮動小数点演算命令の演算時に例外を検出しても命令完了時に例外を発生しない設定のときは、命令完了制御を行う。命令完了制御において、命令完了と判断した場合、命令完了制御部１７１は、命令デコーダ１２１にリネーミングレジスタの解放を指示する。また、命令完了制御部１７１は、ＰＣ１８３の更新を行う。
【００７４】
また、命令完了制御部１７１は、浮動小数点演算命令の演算例外を発生する設定のときは、浮動小数点演算器から演算例外が送られてくる可能性があるために、演算終了まで命令完了を抑止する制御を行う。命令完了を抑止する期間を経過すると、命令完了制御を行うことで、演算例外を発生する設定のときは、比較例と同じ命令完了の動作になる。
【００７５】
命令デコーダ１２１は、命令完了制御部１７１からリネーミングレジスタの解放の指示を受信すると、浮動小数点演算命令において更新対象のアーキテクチャレジスタの５番である物理レジスタ２４番をリネーミングレジスタとして解放する。さらに、命令デコーダ１２１は、リネーミングレジスタに割り当てられた物理レジスタ６７番をアーキテクチャレジスタの５番に割り当てる。
【００７６】
浮動小数点演算器１４３は、浮動小数点演算命令の実行結果を新たにアーキテクチャレジスタの５番に割り当てられた物理レジスタ６７番に格納する（浮動小数点物理レジスタ更新）。
【００７７】
浮動小数点演算命令の演算時に例外を検出しても命令完了時に例外を発生しない設定のときは、浮動小数点演算命令の完了時に、演算例外を検出したことをＦＰＳＲ１８２に格納する必要ある。浮動小数点演算命令の演算時の例外は、演算処理が終了したときに浮動小数点演算器１４３が検出して、命令完了制御部１７１に報告する。この場合、浮動小数点演算命令が完了した後に、浮動小数点演算命令の演算例外が報告されることになるために、命令の完了時に、ＦＰＳＲ１８２を更新することはできない。このために、命令完了制御部１７１が浮動小数点演算命令の演算時に例外を検出したことをＦＰＳＲ１８２に更新するタイミングを、命令の完了のタイミングより遅くする制御を行う。また、浮動小数点演算命令の演算時に例外を検出したことを格納するＦＰＳＲは１８２、レジスタリネーミング処理を行わないために、ＦＰＳＲ１８２を読み出す場合は、全ての命令が完了してから読み出し処理を行う。しかし、例外を検出したことを格納したＦＰＳＲ１８２の更新のタイミングが命令の完了より遅くなったために、ＦＰＳＲ１８２を読み出す場合に、ＦＰＳＲ１８２の更新が完了してから読み出しを開始する制御を行う。
【００７８】
図９は、命令完了制御部の詳細な構成図である。
【００７９】
命令完了制御部１７１は、ＣＳＥ１７２、完了対象命令部１７３、命令完了判断部１７４、比較回路１７５、ＣＳＥ出力ポインタ１７６、命令完了抑止部１７７、およびＦＰＳＲ更新回路１７８を有する。
【００８０】
ＣＳＥ１７２は、命令デコードされた命令を示す情報をＩＩＤが指すエントリ番号に格納している。ＣＳＥ１７２は、ＣＳＥ出力ポインタ１７６が指すエントリ番号を先頭にして、１サイクルで同時に完了することが可能な最大数の命令を示す情報を完了対象命令部１７３に出力する。
【００８１】
演算実行制御部１４１は、例えば、浮動小数点演算命令の実行の終了を命令完了制御部１７１に報告するタイミングをソースオペランドのデータが確定したタイミングの次のサイクルにする。命令完了制御部１７１は、ＦＰＣＲ１８１に浮動小数点演算時に例外を検出しても命令完了時に例外処理を発生しないことが設定されているとき、演算実行制御部１４１から演算の終了報告を受け取った命令が完了可能な場合は、最短のタイミングで命令完了制御を行う。
【００８２】
しかし、ＦＰＣＲ１８１に浮動小数点演算時に例外を検出したら命令完了時に例外処理を発生することが設定されているとき、命令完了可能な場合であったとしても、例外を検出する可能性がある。そのために、命令完了制御部１７１は、演算命令が終了して、例外が命令完了制御部１７１に送られてくる可能性があるタイミングまで、命令完了を抑止する制御を行う。
【００８３】
演算実行制御部１４１は、演算の終了報告時に、ＩＩＤと共に、命令完了制御部１７１に演算命令のレイテンシを示す情報を送り、命令完了制御部１７１は、命令完了の抑止の判断に使用する。
【００８４】
比較回路１７５は、命令完了対象のＩＩＤを示すＣＳＥ出力ポインタ１７６の出力と演算実行制御部１４１から実行の終了報告と共に送られてきたＩＩＤとを比較し、演算命令が、次のサイクルで命令完了の対象のＩＩＤであるかをチェックする。ＣＳＥ出力ポインタ１７６と演算実行制御部１４１からのＩＩＤとが一致する場合、当該ＩＩＤは次のサイクルで命令完了の対象のＩＩＤである、比較回路１７５は、比較結果を完了対象命令部１７３および命令完了抑止部１７７に出力する。
【００８５】
完了対象命令部１７３は、比較回路１７５の出力（比較結果）に基づいて、次のサイクルで命令完了対象の命令を命令完了判断部１７４およびＦＰＳＲ更新回路１７８に通知する。完了対象命令部１７３は、比較結果がＩＩＤと一致することを示すとき、次のサイクルで命令完了対象の命令のＩＩＤを命令完了判断部１７４およびＦＰＳＲ更新回路１７８に通知する。
【００８６】
次のサイクルで命令完了対象の場合で、ＦＰＣＲ１８１に浮動小数点演算時に例外を検出しても命令完了時に例外処理を発生しないことが設定されているときは、命令完了判断部１７４は、次のサイクルで命令完了制御を行う。命令完了制御において、命令完了判断部１７４は、命令デコーダ１２１にリネーミングレジスタの解放を指示する。
【００８７】
一方、命令完了抑止部１７７は、ＦＰＣＲ１８１に浮動小数点演算時に例外を検出したら命令完了時に例外処理を発生することが設定されているときは、次のサイクルで命令完了制御を抑止する制御信号を命令完了判断部１７４に出力する。このとき、この浮動小数点演算命令より前の命令は、命令完了制御を行うことが可能である。また、命令完了抑止部１７７は、演算実行制御部１４１から実行の終了報告とIIDと共に送られてきた演算命令のレイテンシによって、命令完了制御を抑止する期間を決定し、当該期間中、命令完了制御を抑止する制御信号を命令完了判断部１７４に出力し続ける。
【００８８】
図１０は、実施の形態の浮動小数点演算命令の完了の動作のフローチャートである。
【００８９】
演算実行制御部１４１は、浮動小数点演算の実行開始の命令を発行し、浮動小数点演算器１４３は、浮動小数点演算を開始する（ステップＳ５１１）。演算実行制御部１４１は、浮動小数点演算器１４３による浮動小数点演算の終了前に、命令完了制御部１７１に演算の終了報告を送る（ステップＳ５１２）。
【００９０】
命令完了制御部１７１は、演算実行制御部１４１から送られてきた演算の終了報告を受信し、終了報告された浮動小数点演算の命令が次サイクルで命令完了対象になるかを判定（ステップＳ５１３）。詳細には、命令完了制御部１７１は、演算実行制御部１４１から受信した演算の命令のＩＩＤと命令完了対象のＩＩＤを示すＣＳＥ出力ポインタ１７６の出力と比較して、終了報告された浮動小数点演算の命令が次サイクルに命令完了対象になるかを判断する。命令完了対象である場合（ステップＳ５１３：Ｙｅｓ）、命令完了制御部１７１は、ＦＰＣＲ１８１に浮動小数点演算時に例外を検出したら例外処理を発生することが設定されているか判定する（ステップＳ５１４）。
【００９１】
ＦＰＣＲ１８１に浮動小数点演算時に例外を検出しても例外処理を発生しないことが設定されているとき（ステップＳ５１４：Ｎｏ）、命令完了制御部１７１は、次サイクルで命令完了制御を行い、命令を完了する（ステップＳ５１７）。命令完了制御において、命令完了制御部１７１は、命令デコーダ１２１に、リネーミングレジスタの解放を指示する。命令デコーダ１２１は、指示を受信すると、リネーミングレジスタを解放する。すなわち、命令デコーダ１２１は、浮動小数点演算において更新対象のアーキテクチャレジスタとして割り当てられていた浮動小数点物理レジスタ１６１のエントリをリネーミングレジスタにする。
【００９２】
ＦＰＣＲ１８１に浮動小数点演算時に例外を検出したら例外処理を発生することが設定されているとき（ステップＳ５１４：Ｙｅｓ）、命令完了制御部１７１は、終了報告を受信してから所定の抑止時間が経過したか判定する（ステップＳ５１５）。所定の抑止時間が経過していない場合（ステップＳ５１５：Ｎｏ）、命令完了制御部１７１は、命令完了を抑止する（ステップＳ５１６）。すなわち、命令完了制御部１７１は、浮動小数点演算器１４３から演算例外が送られてくる場合があるために、演算例外が送られてくる可能性があるタイミングまで、命令完了を抑止する。
【００９３】
演算実行制御部１４１から演算命令の終了報告と同時に送られてくる演算命令のレイテンシから演算器から命令完了制御部１７１に演算例外が送られてくる可能性がある期間（タイミング）が確定できる。命令完了制御部１７１は、演算実行制御部１４１から送られてきた演算命令のレイテンシを所定の抑止時間として用いる。
【００９４】
命令完了を抑止する所定の抑止時間が経過する（ステップＳ５１５：Ｙｅｓ）、すなわち、浮動小数点演算器１４３から演算例外が送られてくる可能性がある期間が終了すると、命令完了制御部１７１は、命令完了を行う（ステップＳ５１７）。このとき、命令完了制御部１７１は、浮動小数点演算器１４３から演算例外が送られてきた場合は、演算例外を発生し、浮動小数点演算器１４３から演算例外が送られてこなかった場合は、次の命令の完了制御を行う。
【００９５】
図１１は、浮動小数点演算時に例外を検出しても例外処理を発生しないことが設定されているときの命令完了の動作のタイミングチャートである。
【００９６】
図１１は、上から順に、サイクル、演算実行処理、命令完了処理、演算終了報告、命令完了対象、命令完了抑止、演算例外検出設定を示す。
【００９７】
図１１では、浮動小数点演算時に例外を検出しても例外処理を発生しないことが設定されているため、演算例外検出設定と命令完了抑止は、Ｌ（Ｌｏｗ）となっている。
【００９８】
図１１は、浮動小数点演算命令のレイテンシが６サイクルの命令で、演算開始から最短で命令完了するときの動作を示す。Ｘ１〜Ｘ６（サイクル１〜６）は浮動小数点演算器１４３による浮動小数点演算の実行を示す。Ｘ１が成立すると、演算のオペランドデータが揃ったことになるために、演算実行制御部１４１はＸ２（サイクル２）で、演算の終了報告を命令完了制御部１７１に送る。このときに、演算実行制御部１４１は、演算の終了報告と同時に、演算命令のＩＩＤと演算レイテンシが６サイクルであることを命令完了制御部１７１に送る。命令完了制御部１７１は、演算の終了報告の命令が次サイクルで命令完了対象である場合は、命令完了制御（Ｃ：サイクル３）を行い、資源の更新（Ｗ：サイクル４）を行う。演算が終了すると、浮動小数点演算器１４３は、浮動小数点物理レジスタ１６１の更新（Ｕ：サイクル７）を行う。
【００９９】
尚、浮動小数点演算命令より前の命令が完了していないときは、命令完了対象にならない場合あり、この場合は、命令完了制御部１７１は命令完了対象になるまで待つ。
【０１００】
図１２は、浮動小数点演算時に例外を検出したら例外処理を発生することが設定されているときの命令完了の動作のタイミングチャートである。
【０１０１】
図１２は、上から順に、サイクル、演算実行処理、命令完了処理、演算終了報告、命令完了対象、命令完了抑止、演算例外検出設定を示す。
【０１０２】
図１２では、浮動小数点演算時に例外を検出したら例外処理を発生することが設定されているため、演算例外検出設定は、Ｈ（Ｈｉ）となっている。
【０１０３】
図１２は、浮動小数点演算命令のレイテンシが６サイクルの命令で、演算開始から最短で命令完了するときの動作を示す。演算実行制御部１４１から命令完了制御部１７１に送られてくるタイミングと情報は、図１１と同様である。命令完了制御部１７１は、演算の終了報告の命令が次サイクルで命令完了対象である場合は、浮動小数点演算器１４３から演算の例外が命令完了制御部１７１に送られてくる可能性がある浮動小数点物理レジスタ１６１の更新（Ｕ：サイクル７）まで命令完了を抑止する制御を行う。すなわち、命令完了抑止部１７７の出力（命令完了抑止）をＨにする。演算命令のレイテンシが６サイクルであるために、命令完了の抑止期間は、５サイクル（サイクル３〜７）になる。命令完了を抑止する期間が終了すると、命令完了制御部１７１は、命令完了制御（Ｃ：サイクル８）を行う。このときに、命令完了制御部１７１は、浮動小数点演算器１４３から演算例外が送られてきた場合は、演算例外を検出する。命令完了制御部１７１は、資源の更新を行う（Ｗ：サイクル９）。
【０１０４】
図１３は、ＦＰＳＲ更新回路の詳細な構成図である。
【０１０５】
図１３は、浮動小数点演算命令のレイテンシが６サイクルである場合を示す。
【０１０６】
ＦＰＳＲ更新回路１７８は、フリップフロップ１７８１−ｋ（ｋ＝１〜５）および比較回路１７８２−ｋを有する。尚、フリップフロップ１７８１−１〜１７８１−５は、Ｗ１〜Ｗ５を表記する場合がある。
【０１０７】
フリップフロップ１７８１−１〜１７８１−４は、それぞれサイクル毎に自身が格納しているデータをフリップフロップ１７８１−２〜１７８１−５に出力する。フリップフロップ１７８１−ｋは、入力されたデータを格納する。フリップフロップ１７８１−５は、演算の例外を受信すると、演算の例外を検出したことをＦＰＳＲ１８２に格納する。また、フリップフロップ１７８１−１〜１７８１−４は、それぞれサイクル毎に自身が格納しているデータを比較回路１７８２−２〜１７８２−５にデータを出力する。
【０１０８】
比較回路１７８２−１には、完了対象命令部１７３から命令完了対象のＩＩＤ（すなわち、ＣＳＥ出力ポインタ１７６の出力が示すＩＩＤ）が入力される。また、フリップフロップ１７８１−１には、命令完了判断部１７４から命令完了対象のＩＩＤが入力される。比較回路１７８２−２〜１７８２−５には、フリップフロップ１７８１−１〜１７８１−４から命令完了対象のＩＩＤ（すなわち、ＣＳＥ出力ポインタ１７６の出力が示すＩＩＤ）が入力される。
【０１０９】
演算実行制御部１４１は、浮動小数点演算器１４３による浮動少数点演算が終了したら、再度、実行の終了報告とＩＩＤを命令完了制御部１７１に送る。演算実行制御部１４１が出力したＩＩＤは、比較回路１７８２−ｋに入力される。
【０１１０】
演算の例外が発生した場合、浮動小数点演算器１４３は、演算の例外を命令完了制御部１８２の比較回路１７８２−ｋに送る。
【０１１１】
比較回路１７８２−ｋは、命令完了対象のＩＩＤ（すなわち、ＣＳＥ出力ポインタ１７６の出力が示すＩＩＤ）と、演算実行制御部１４１から送られてくるＩＩＤとを比較する。比較回路１７８２−ｋは、一致したときに、浮動小数点演算器１４３からの演算の例外の信号を取り込み（演算例外キャプチャ）、演算の例外を出力する。
【０１１２】
ＦＰＣＲ１８１に浮動小数点演算時に例外を検出しても命令完了時に例外処理を発生しないことが設定されているとき、浮動小数点演算命令の完了タイミングを早くすると、浮動小数点演算命令の例外が浮動小数点演算器１４３から命令完了制御部１７１に送られてくる前に、命令完了していることが起こる。ＦＰＣＲ１８１の設定にかかわらず、浮動小数点演算時に例外が検出された場合に例外を検出したことを格納するＦＰＳＲ１８２を更新する必要がある。
【０１１３】
しかし、浮動小数点演算命令の実行の終了を待たずに命令の完了を行うと、ＦＰＳＲ１８２の更新が正しく行うことができない。このために、ＦＰＳＲ更新回路１８２が命令完了後に、ＦＰＳＲ１８２の更新を可能にすることで、ＦＰＳＲ１８２の更新を正しく行う。
【０１１４】
演算実行制御部１４１は、浮動小数点演算器１４３による浮動少数点演算が終了したら、再度、実行の終了報告とＩＩＤを命令完了制御部１７１に送る。演算実行制御部１４１が出力したＩＩＤは、比較回路１７８２−ｋに入力される。また、演算の例外が発生した場合、浮動小数点演算器１４３は演算の例外を命令完了制御部１８２の比較回路１７８２−ｋに送る。比較回路１７８２−ｋは、命令完了するタイミングから完了対象命令部１７３からの命令完了対象のＩＩＤと演算実行制御部１４１から送られてくるＩＩＤを比較する。比較回路１７８２−ｋは、一致したときに、浮動小数点演算器１４３からの演算の例外の信号を取り込み（演算例外キャプチャ）、演算の例外を出力する。これにより、命令の完了後にＦＰＳＲ１８２の更新をすることが可能となる。
【０１１５】
図１４は、ＦＰＳＲの更新の動作のタイミングチャートである。
【０１１６】
図１４は、上から順に、サイクル、演算実行処理、命令完了処理、演算例外キャプチャ、ＦＰＳＲ更新指示、ＦＰＳＲを示す。
【０１１７】
図１４は、浮動小数点演算命令のレイテンシが６サイクルの命令で、演算開始から最短で命令完了するときの動作を示す。図１４は、ＦＰＣＲ１８１に浮動小数点演算時に例外を検出しても例外処理を発生しないことが設定されているときに、浮動小数点演算命令の命令完了の後にＦＰＳＲ１８２を更新する動作を示す。
【０１１８】
Ｘ１〜Ｘ６（サイクル１〜６）は、浮動小数点演算器１４３による浮動小数点演算の実行を示す。Ｘ１が成立すると、演算のオペランドデータが揃ったことになるために、演算実行制御部１４１はＸ２（サイクル２）で、演算の終了報告を命令完了制御部１７１に送る。このときに、演算実行制御部１４１は、演算の終了報告と同時に、演算命令のＩＩＤと演算レイテンシが６サイクルであることを命令完了制御部１７１に送る。命令完了制御部１７１は、演算の終了報告の命令が次サイクルで命令完了対象である場合は、命令完了制御（Ｃ：サイクル３）を行う。命令完了制御に伴い、ＦＰＳＲ１７８に命令完了対象の命令のＩＩＤが入力され、フリップフロップ１７８１−ｋが更新される（Ｗ１〜Ｗ５：サイクル４〜サイクル８）。
【０１１９】
演算実行制御部１４１は、浮動小数点演算器１４３による浮動少数演算が終了したら、再度、実行の終了報告とＩＩＤを命令完了制御部１７１に送る（サイクル７）。演算実行制御部１４１が出力したＩＩＤは、比較回路１７８２−ｋに入力される。
【０１２０】
また、浮動小数点演算器１４３は、浮動小数点演算時に例外を検出したため、演算終了時に演算の例外を命令完了制御部１４１のＦＰＳＲ更新回路１７８の比較回路１７８２−ｋに出力する。
【０１２１】
浮動小数点演算器１４３から演算の例外が比較回路１７８２−ｋに送られるタイミングで、比較回路１７８２−４において、演算実行制御部１４１から演算命令のＩＩＤとフリップフロップ１７８１−４からのＩＩＤとが一致する。比較回路１７８２−４は、ＩＩＤの一致を検出すると、浮動小数点演算器１４３からの演算の例外の信号を取り込み（演算例外キャプチャ）、演算の例外をフリップフロップ１７８１−５に出力する。フリップフロップ１７８１−５は、演算の例外を受信すると、演算の例外をＦＰＳＲ１８２に出力し（ＦＰＳＲ更新指示）、演算の例外を検出したことをＦＰＳＲ１８２に格納する（サイクル８）。これにより、ＦＰＳＲ１８２の格納データは、「Ａ」から演算の例外の検出を示す「Ｂ」となる。
【０１２２】
次にＦＰＳＲ１８２からデータを読み出す命令の実行について説明する。
【０１２３】
コア１１１−１がＦＰＳＲ１８２を直接読み出す命令を実行するときは、ＦＰＳＲ１８２を直接読み出す命令の直前の命令が全て完了しないと、命令のデコードを行わない制御を行う。これは、ＦＰＳＲ１８２を直接読み出す命令がプログラムの先頭になると実行開始される。命令デコーダ１２１は、ＣＳＥ１７２に１つもエントリが存在しない状態のときに、ＦＰＳＲ１８２を直接読み出す命令のデコードを行う。
【０１２４】
しかし、ＦＰＳＲ１８２の更新する命令がＦＰＳＲ１８２を更新する前に命令完了をした場合に、命令デコーダ１２１がＦＰＳＲ１８２を直接読み出す命令のデコードを開始すると、ＦＰＳＲ１８２を更新する前に、ＦＰＳＲ１８２から読み出しを行ってしまい、正しいデータを読み出すことができない。
【０１２５】
このために、命令デコーダ１２１は、ＦＰＳＲ１８２を更新する命令を命令デコードするときに、ＦＰＳＲ１８２を更新する命令を命令デコードしたことを示す信号を有効にして、ＦＰＳＲ１８２を更新する命令に割り当てたＩＩＤを保持する。そして、命令デコーダ１２１は、保持したＩＩＤがＦＰＳＲ１８２を更新するＩＩＤと一致したときに、ＦＰＳＲ１８２を更新する命令を命令デコードしたことを示す信号を無効にする。命令デコーダ１２１は、ＦＰＳＲ１８２を更新する命令を命令デコードしたことを示す信号が無効であるときに、ＦＰＳＲ１８２を直接読み出す命令を命令デコードすることが可能とする。なお、保持したＩＩＤのＦＰＳＲ１８２を更新する前に、命令デコーダ１２１が新しいＦＰＳＲ１８２を更新する命令を命令デコードすると、保持したＩＩＤは、新しいＦＰＳＲ１８２を更新する命令のＩＩＤに上書きされる。それまで、保持していたＩＩＤの命令がＦＰＳＲ１８２を更新しても、ＩＩＤが一致しないために、ＦＰＳＲ１８２を更新する命令を命令デコードしたことを示す信号は無効にならない。この制御を行うことで、ＦＰＳＲ１８２を直接読み出す命令の直前の命令がＦＰＳＲ１８２を更新する命令である場合に、ＦＰＳＲ１８２の更新が完了してから、正しいＦＰＳＲ１８２の値を読み出すことが可能となる。また、ＦＰＳＲ１８２を直接読み出す命令は、ＦＰＳＲ１８２を更新しない命令がＣＳＥ１７２に存在する場合においても、ＦＰＳＲ１８２を直接読み出す命令を実行することが可能になる。
【０１２６】
図１５は、ＦＰＳＲを読み出す命令の動作のタイミングチャートである。
【０１２７】
図１５は、上から順に、サイクル、演算実行処理、命令完了処理、ＦＰＳＲ更新指示、ＦＰＳＲ、ＦＰＳＲ読み出し命令の処理、命令デコード抑止を示す。
【０１２８】
図１５は、浮動小数点演算命令のレイテンシが６サイクルの命令で、演算開始から最短で命令完了するときの動作を示す。図１５は、ＦＰＣＲ１８１に浮動小数点演算時に例外を検出しても例外処理を発生しないことが設定されているときに、ＦＰＳＲ１８２を読み出す動作を示す。図１５は、ＦＰＳＲ１８２を読み出す命令の直前の命令でＦＰＳＲ１８２を更新する場合を示す。図１５において、図１４と同様にＦＰＳＲ１８２が更新されるとする。
【０１２９】
命令デコーダ１２１は、ＦＰＳＲ１８２を更新する浮動小数点演算命令を命令デコードしたときに、ＦＰＳＲ１８２を更新する命令を命令デコードしたことを示す信号を有効にする。ＦＰＳＲ１８２を更新する命令を命令デコードしたことを示す信号が有効である場合、命令デコーダ１２１は、ＦＰＳＲ１８２を読み出す命令を、命令デコード抑止信号が有効であるため、命令デコードしない。
【０１３０】
図１５において、ＦＰＳＲ１８２を更新する最後の浮動小数点演算命令のレイテンシが６サイクルの命令が、ＦＰＳＲ１８２を更新するサイクルがＷ５（サイクル８）である。このとき、ＦＰＳＲ１８２を更新する命令のＩＩＤと命令デコードで保持しているＩＩＤが一致するために、ＦＰＳＲ１８２を更新する命令が全て完了したことになり、ＦＰＳＲ１８２を更新する命令が命令デコードしたことを示す信号が無効になり、命令デコード抑止が終了になる。このために、命令デコーダ１２１は、ＦＰＳＲ１８２を読み出す命令の命令デコード（Ｄ）が可能となる。サイクル９で命令デコード抑止はＬとなったので、ＦＰＳＲ１８２を読み出す命令は、命令デコード（Ｄ）され、サイクル９でＦＰＳＲ１８２のデータが読み出される。このように、命令デコードされたＦＰＳＲ１８２を読み出す命令は、最新のＦＰＳＲ１８２の値を正しく読み出すことが可能になる。
【０１３１】
また、浮動小数点演算命令のレイテンシが長いレイテンシの命令が存在する場合、浮動小数点演算命令の実行の終了を命令完了制御に報告するタイミングをソースオペランドのデータが確定したタイミングの次のサイクル(X2)にすると、演算結果を格納する浮動小数点リネーミングレジスタを後続の命令に割り当ててしまうことが発生する。このために、実行する命令の演算レイテンシが長い命令の場合、演算実行制御部１４１から命令完了制御部１７１に演算の終了報告を送るタイミングは、ソースオペランドのデータが確定したタイミングではないことが望ましい。命令完了によって解放されたリネーミングレジスタを後続の命令が新規に割り当てられて、演算レイテンシが長い命令の演算が終了するまでに、演算を実行して結果をリネーミングレジスタに格納すると、命令の順番を間違うことが発生する。このために、演算実行制御部１４１は、実行する命令が演算レイテンシの長い命令の場合、後続の命令がリネーミングレジスタに格納することが発生しないタイミングで、演算の終了報告を命令完了制御部１７１に報告する。これにより、浮動小数点演算命令を正しく実行することが可能となる。
【０１３２】
実施の形態のＣＰＵによれば、浮動小数点演算命令の演算時に例外を検出しても命令完了時に例外処理を発生しない設定のときに、浮動小数点演算命令の完了を早くして、浮動小数点のリネーミングレジスタの割り当て期間を短縮する。それにより、実施の形態のＣＰＵは、浮動小数点のリネーミングレジスタの不足の発生を減少させることができる。
【０１３３】
以上の実施の形態に関し、さらに以下の付記を開示する。
（付記１）
浮動小数点演算命令の演算時に例外を検出しても命令完了時に例外処理を発生しないことが設定された演算処理装置であって、
浮動小数点演算を行う演算器と、
複数のエントリを含み、前記複数のエントリのそれぞれはアーキテクチャレジスタまたはリネーミングレジスタのいずれかに割り当てられる浮動小数点レジスタと、
前記浮動小数点演算命令を発行するとともに、前記演算器による前記浮動小数点演算が終了する前に前記浮動小数点演算の終了報告を出力する演算実行制御部と、
前記終了報告を受信して、命令の実行を完了すると、前記リネーミングレジスタの解放を指示する命令完了制御部と、
前記指示を受信するとともに、前記浮動小数点演算の実行結果を格納するアーキテクチャレジスタに割り当てられた第１のエントリをリネーミングレジスタに割り当て、前記浮動小数点演算においてリネーミングレジスタに割り当てられた第２のエントリを前記浮動小数点演算の実行結果を格納するアーキテクチャレジスタに割り当てる命令デコーダと、
を備える演算処理装置。
（付記２）
前記演算実行制御部は、前記浮動小数点演算命令のソースオペランドのデータが確定したとき、前記終了報告を出力する付記１記載の演算処理装置。
（付記３）
前記演算処理装置に浮動小数点演算命令の演算時に例外を検出したら命令完了時に例外処理を発生することが設定されている場合、前記命令完了制御部は、前記終了報告を受信してから所定時間経過後に前記リネーミングレジスタの解放を指示する付記１または２記載の演算処理装置。
（付記４）
浮動小数点演算命令の演算時に例外を検出しても命令完了時に例外処理を発生しないことが設定され、複数のエントリを含み、前記複数のエントリのそれぞれはアーキテクチャレジスタまたはリネーミングレジスタのいずれかに割り当てられる浮動小数点レジスタを有する演算処理装置の制御方法であって、
前記演算処理装置が有する演算器が浮動小数点演算を行い、
前記演算処理装置が有する演算実行制御部が、前記浮動小数点演算命令を発行するとともに、前記演算器による前記浮動小数点演算が終了する前に前記浮動小数点演算の終了報告を出力し、
前記演算処理装置が有する命令完了制御部が、前記終了報告を受信して命令の実行を完了すると、前記リネーミングレジスタの解放を指示し、
前記演算処理装置が有する命令デコーダが、前記指示を受信するとともに、前記浮動小数点演算の実行結果を格納するアーキテクチャレジスタに割り当てられた第１のエントリをリネーミングレジスタに割り当て、前記浮動小数点演算においてリネーミングレジスタに割り当てられた第２のエントリを前記浮動小数点演算の実行結果を格納するアーキテクチャレジスタに割り当てる
演算処理装置の制御方法。
（付記５）
前記演算実行制御部は、前記浮動小数点演算命令のソースオペランドのデータが確定したとき、前記終了報告を出力する付記４記載の制御方法。
（付記６）
前記演算処理装置に浮動小数点演算命令の演算時に例外を検出したら命令完了時に例外処理を発生することが設定されている場合、前記命令完了制御部は、前記終了報告を受信してから所定時間経過後に前記リネーミングレジスタの解放を指示する付記４または５記載の制御方法。
【符号の説明】
【０１３４】
１００    システム
１０１    ノード
１１１    コア
１１２    ＭＡＣ
１１３    ＬＬキャッシュ
１１４    インターコネクト部
１１５    命令フェッチアドレス生成器
１１６    １次命令キャッシュ
１１７    命令バッファ
１２１    命令デコーダ
１３１    メモリアクセス実行制御部
１３２    オペランドアドレス生成器
１３３    １次データキャッシュ
１４１    演算実行制御部
１４２    固定小数点演算器
１４３    浮動小数点演算器
１５１    固定小数点物理レジスタ
１６１    浮動小数点物理レジスタ
１７１    命令完了制御部
１７２    ＣＳＥ
１７３    完了対象命令部
１７４    命令完了判断部
１７５    比較回路
１７６    ＣＳＥ出力ポインタ
１７７    命令完了抑止部
１７８    ＦＰＳＲ更新回路
１８１    ＦＰＣＲ
１８２    ＦＰＳＲ
１８３    ＰＣ
１９１    分岐実行制御部
１９２    分岐予測機構
２０１    メモリ
３０１    Ｉ／Ｏ
１７８１    フリップフロップ
１７８２    比較回路
【図１】
2019215694.tif 000003
【図２】
2019215694.tif 000004
【図３】
2019215694.tif 000005
【図４】
2019215694.tif 000006
【図５】
2019215694.tif 000007
【図６】
2019215694.tif 000008
【図７】
2019215694.tif 000009
【図８】
2019215694.tif 000010
【図９】
2019215694.tif 000011
【図１０】
2019215694.tif 000012
【図１１】
2019215694.tif 000013
【図１２】
2019215694.tif 000014
【図１３】
2019215694.tif 000015
【図１４】
2019215694.tif 000016
【図１５】
2019215694.tif 000017
【手続補正書】
【提出日】平成31年3月28日(2019.3.28)
【手続補正１】
【補正対象書類名】明細書
【補正対象項目名】００２６
【補正方法】変更
【補正の内容】
【００２６】
命令デコーダ２１は、浮動小数点演算命令をデコードし、浮動小数点リネーミングレジスタ２５のうちのあるエントリをリネーミングレジスタに割り当てる。
【手続補正２】
【補正対象書類名】明細書
【補正対象項目名】００２８
【補正方法】変更
【補正の内容】
【００２８】
浮動小数点演算命令の実行が終了すると、演算実行制御部２２は、命令完了制御部２３に実行終了報告を送る。また、浮動小数点演算器２４は、浮動小数点演算命令の実行結果をリネーミングレジスタに格納する。
【手続補正３】
【補正対象書類名】明細書
【補正対象項目名】００３０
【補正方法】変更
【補正の内容】
【００３０】
命令完了制御部２３は、ＦＰＳＲ２８、ＰＣ２９の更新を行う。また、命令完了制御部２３は、リネーミングレジスタから浮動小数点演算命令の実行結果を読み出して、浮動小数点レジスタ２６に格納する（浮動小数点レジスタの更新）。また、命令デコーダ２１は、リネーミングレジスタの解放の指示を受信すると、上記の割り当てたリネーミングレジスタを解放する。
【手続補正４】
【補正対象書類名】明細書
【補正対象項目名】００５０
【補正方法】変更
【補正の内容】
【００５０】
命令デコーダ１２１は、デコードする命令の種類に従って、命令の実行を制御するメモリアクセス実行制御部１３１、固定小数点演算と浮動小数点演算を制御する演算実行制御部１４１、分岐実行制御部１９１に必要なエントリを作成する。命令デコーダ１２１は、全てのデコードされた命令に対して、命令の完了を制御する命令完了制御部１７１に含まれるコミットスタックエントリ（ＣＳＥ）にエントリを作成する。また、実行結果を格納する固定小数点物理レジスタ１５１と浮動小数点物理レジスタ１６１は、それぞれアーキテクチャレジスタとリネーミングレジスタで構成される。固定小数点物理レジスタ１５１のリネーミングレジスタは、固定小数点リネーミングレジスタと表記する場合がある。浮動小数点物理レジスタ１６１のリネーミングレジスタは、浮動小数点リネーミングレジスタと表記する場合がある。
【手続補正５】
【補正対象書類名】明細書
【補正対象項目名】００５１
【補正方法】変更
【補正の内容】
【００５１】
デコードされた命令がメモリアクセス実行制御部１３１、演算実行制御部１４１にエントリを作成する場合には、命令デコーダ１２１は、固定小数点物理レジスタ１５１のリネーミングレジスタと浮動小数点物理レジスタ１６１のリネーミングレジスタにレジスタを割り当てるレジスタリネーミング処理を行う。演算実行制御部１４１で実行に必要なソースオペランドが揃った命令から実行することで、アウト・オブ・オーダー実行を行うことが可能となる。実行結果を命令デコード時に割り当てられた固定小数点リネーミングレジスタと浮動小数点リネーミングレジスタに格納する。演算実行制御部１４１から、アウト・オブ・オーダーで実行された命令は、命令完了制御部１７１の制御によりプログラムにおける命令の並び順に命令の完了を行い、完了した命令に対してのみ、ＰＣなどのプログラマブルな資源の更新を行う。また、リネーミングレジスタとアーキテクチャレジスタが混在した物理レジスタ方式において、命令でコーダ１２１は、演算結果を格納したリネーミングレジスタとして扱っている物理レジスタのアドレスをアーキテクチャレジスタに変更する。
【手続補正６】
【補正対象書類名】明細書
【補正対象項目名】００７７
【補正方法】変更
【補正の内容】
【００７７】
浮動小数点演算命令の演算時に例外を検出しても命令完了時に例外を発生しない設定のときは、浮動小数点演算命令の完了時に、演算例外を検出したことをＦＰＳＲ１８２に格納する必要がある。浮動小数点演算命令の演算時の例外は、演算処理が終了したときに浮動小数点演算器１４３が検出して、命令完了制御部１７１に報告する。この場合、浮動小数点演算命令が完了した後に、浮動小数点演算命令の演算例外が報告されることになるために、命令の完了時に、ＦＰＳＲ１８２を更新することはできない。このために、命令完了制御部１７１が浮動小数点演算命令の演算時に例外を検出したことをＦＰＳＲ１８２に更新するタイミングを、命令の完了のタイミングより遅くする制御を行う。また、浮動小数点演算命令の演算時に例外を検出したことを格納するＦＰＳＲ１８２は、レジスタリネーミング処理を行わないために、ＦＰＳＲ１８２を読み出す場合は、全ての命令が完了してから読み出し処理を行う。しかし、例外を検出したことを格納したＦＰＳＲ１８２の更新のタイミングが命令の完了より遅くなったために、ＦＰＳＲ１８２を読み出す場合に、ＦＰＳＲ１８２の更新が完了してから読み出しを開始する制御を行う。
【手続補正７】
【補正対象書類名】明細書
【補正対象項目名】００８４
【補正方法】変更
【補正の内容】
【００８４】
比較回路１７５は、命令完了対象のＩＩＤを示すＣＳＥ出力ポインタ１７６の出力と演算実行制御部１４１から実行の終了報告と共に送られてきたＩＩＤとを比較し、演算命令が、次のサイクルで命令完了の対象のＩＩＤであるかをチェックする。ＣＳＥ出力ポインタ１７６と演算実行制御部１４１からのＩＩＤとが一致する場合、当該ＩＩＤは次のサイクルで命令完了の対象のＩＩＤである。比較回路１７５は、比較結果を完了対象命令部１７３および命令完了抑止部１７７に出力する。
【手続補正８】
【補正対象書類名】明細書
【補正対象項目名】００９９
【補正方法】変更
【補正の内容】
【００９９】
尚、浮動小数点演算命令より前の命令が完了していないときは、命令完了対象にならない場合があり、この場合は、命令完了制御部１７１は命令完了対象になるまで待つ。
【手続補正９】
【補正対象書類名】明細書
【補正対象項目名】０１１０
【補正方法】変更
【補正の内容】
【０１１０】
演算の例外が発生した場合、浮動小数点演算器１４３は、演算の例外を命令完了制御部１７１の比較回路１７８２−ｋに送る。
【手続補正１０】
【補正対象書類名】明細書
【補正対象項目名】０１１３
【補正方法】変更
【補正の内容】
【０１１３】
しかし、浮動小数点演算命令の実行の終了を待たずに命令の完了を行うと、ＦＰＳＲ１８２の更新が正しく行うことができない。このために、ＦＰＳＲ更新回路１７８が命令完了後に、ＦＰＳＲ１８２の更新を可能にすることで、ＦＰＳＲ１８２の更新を正しく行う。
【手続補正１１】
【補正対象書類名】明細書
【補正対象項目名】０１１４
【補正方法】変更
【補正の内容】
【０１１４】
演算実行制御部１４１は、浮動小数点演算器１４３による浮動少数点演算が終了したら、再度、実行の終了報告とＩＩＤを命令完了制御部１７１に送る。演算実行制御部１４１が出力したＩＩＤは、比較回路１７８２−ｋに入力される。また、演算の例外が発生した場合、浮動小数点演算器１４３は演算の例外を命令完了制御部１７１の比較回路１７８２−ｋに送る。比較回路１７８２−ｋは、命令完了するタイミングから完了対象命令部１７３からの命令完了対象のＩＩＤと演算実行制御部１４１から送られてくるＩＩＤを比較する。比較回路１７８２−ｋは、一致したときに、浮動小数点演算器１４３からの演算の例外の信号を取り込み（演算例外キャプチャ）、演算の例外を出力する。これにより、命令の完了後にＦＰＳＲ１８２の更新をすることが可能となる。
【手続補正１２】
【補正対象書類名】明細書
【補正対象項目名】０１２０
【補正方法】変更
【補正の内容】
【０１２０】
また、浮動小数点演算器１４３は、浮動小数点演算時に例外を検出したため、演算終了時に演算の例外を命令完了制御部１７１のＦＰＳＲ更新回路１７８の比較回路１７８２−ｋに出力する。
【手続補正１３】
【補正対象書類名】明細書
【補正対象項目名】０１２１
【補正方法】変更
【補正の内容】
【０１２１】
浮動小数点演算器１４３から演算の例外が比較回路１７８２−ｋに送られるタイミングで、比較回路１７８２−５において、演算実行制御部１４１から演算命令のＩＩＤとフリップフロップ１７８１−４からのＩＩＤとが一致する。比較回路１７８２−５は、ＩＩＤの一致を検出すると、浮動小数点演算器１４３からの演算の例外の信号を取り込み（演算例外キャプチャ）、演算の例外をフリップフロップ１７８１−５に出力する。フリップフロップ１７８１−５は、演算の例外を受信すると、演算の例外をＦＰＳＲ１８２に出力し（ＦＰＳＲ更新指示）、演算の例外を検出したことをＦＰＳＲ１８２に格納する（サイクル８）。これにより、ＦＰＳＲ１８２の格納データは、「Ａ」から演算の例外の検出を示す「Ｂ」となる。