(57)【要約】【課題】ループバッファ部に実質的に保持可能な命令数を増加することで、命令実行部による命令の実行のスループットを向上する。【解決手段】演算処理装置は、命令デコード部がデコードした命令の中から、繰り返し実行されるループ処理の対象命令を抽出する命令抽出部と、命令抽出部が抽出した対象命令の各々が格納される複数のエントリを有するループバッファ部と、対象命令をループバッファ部の複数のエントリの１つに格納するとともに、複数の対象命令で使用する命令実行部の資源が重複しない場合、複数の対象命令を融合して１つの対象命令とし、ループバッファ部の複数のエントリの１つに格納する命令処理部と、命令デコード部が出力する命令またはループバッファ部が出力する対象命令のいずれかを選択し、選択した命令を命令実行部に出力する命令選択部とを有する。【選択図】図１
2020077333.tif 000002
【特許請求の範囲】
【請求項１】
命令をデコードする命令デコード部と、
前記命令デコード部がデコードした命令を実行する命令実行部と、
前記命令デコード部がデコードした命令の中から、繰り返し実行されるループ処理の対象命令を抽出する命令抽出部と、
前記命令抽出部が抽出した対象命令の各々が格納される複数のエントリを有するループバッファ部と、
前記対象命令を前記ループバッファ部の前記複数のエントリの１つに格納するとともに、複数の対象命令で使用する前記命令実行部の資源が重複しない場合、前記複数の対象命令を融合して１つの対象命令とし、前記ループバッファ部の前記複数のエントリの１つに格納する命令処理部と、
前記命令デコード部が出力する命令または前記ループバッファ部が出力する対象命令のいずれかを選択し、選択した命令を前記命令実行部に出力する命令選択部と、を有することを特徴とする演算処理装置。
【請求項２】
命令の実行に使用する情報を保持するレジスタを含むレジスタファイルと、
命令の実行中に前記レジスタの代わりに使用するエントリを含むバッファ部と、
前記命令デコード部が出力する命令毎または前記ループバッファ部が出力する対象命令毎に前記バッファ部の割り当てを制御する割り当て制御部と、を有することを特徴とする請求項１に記載の演算処理装置。
【請求項３】
前記命令デコード部が出力する命令または前記ループバッファ部が出力する対象命令を保持する複数のエントリを含み、アウトオブオーダで実行が完了された命令の完了処理をインオーダで実行する完了制御部を有することを特徴とする請求項１または請求項２に記載の演算処理装置。
【請求項４】
前記命令抽出部および前記命令処理部の動作は、前記ループバッファ部に格納される前の対象命令の前記命令実行部による動作と並列に実行されることを特徴とする請求項１ないし請求項３のいずれか１項に記載の演算処理装置。
【請求項５】
前記演算処理装置は、さらに、対象命令と他の対象命令とを１つの命令として実行可能かを示す融合情報が、前記命令デコード部が出力する対象命令とともに格納される命令保持部を有し、
前記命令抽出部は、抽出した対象命令を前記命令保持部に格納し、１つの命令として実行可能な複数の対象命令に対応して融合情報を前記命令保持部に格納し、
前記命令処理部は、前記命令保持部が保持する融合情報に基づいて、複数の対象命令を１つの対象命令に融合し、融合した対象命令を前記ループバッファ部に格納することを特徴とする請求項１ないし請求項４のいずれか１項に記載の演算処理装置。
【請求項６】
前記演算処理装置は、さらに、１つの命令として実行可能な複数の対象命令を示す情報が格納されるリスト部を有し、
前記命令抽出部は、前記リスト部を参照することで、対象命令を融合情報とともに前記命令保持部に格納するかを決定することを特徴とする請求項５に記載の演算処理装置。
【請求項７】
前記ループバッファ部の各エントリは、複数の対象命令を融合した命令の一部である基準命令を保持する領域と、基準命令を補う付随情報を保持する領域と、を有し、
前記命令処理部は、１つの命令として実行可能な複数の対象命令を表す基準命令と付随情報とを前記ループバッファ部に格納することを特徴とする請求項１ないし請求項６のいずれか１項に記載の演算処理装置。
【請求項８】
命令をフェッチするアドレスを生成するアドレス生成部と、
前記アドレス生成部が生成したアドレスに基づいて分岐命令の分岐先のアドレスを予測することで、ループ処理を予測する分岐予測部と、を有し、
前記命令抽出部は、前記分岐予測部がループ処理を予測したことに基づいて、ループ処理の対象命令を抽出することを特徴とする請求項１ないし請求項７のいずれか１項に記載の演算処理装置。
【請求項９】
前記命令抽出部が、比較結果に応じてコンディションコードを設定する比較命令と、前記比較命令に続く条件分岐命令とを対象命令として抽出した場合、前記命令処理部は、前記比較命令と前記条件分岐命令とを１つの対象命令として融合することを特徴とする請求項１ないし請求項８のいずれか１項に記載の演算処理装置。
【請求項１０】
演算処理装置が有する命令デコード部が、命令をデコードし、
前記演算処理装置が有する命令実行部が、前記命令デコード部がデコードした命令を実行し、
前記演算処理装置が有する命令抽出部が、前記命令デコード部がデコードした命令の中から、繰り返し実行されるループ処理の対象命令を抽出し、
前記演算処理装置が有する命令処理部が、前記対象命令を前記演算処理装置が有するループバッファ部の複数のエントリの１つに格納するとともに、複数の対象命令で使用する前記命令実行部の資源が重複しない場合、前記複数の対象命令を融合して１つの対象命令とし、前記ループバッファ部の前記複数のエントリの１つに格納し、
前記演算処理装置が有する命令選択部が、前記命令デコード部が出力する命令または前記ループバッファ部が出力する対象命令のいずれかを選択し、選択した命令を前記命令実行部に出力することを特徴とする演算処理装置の制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、演算処理装置および演算処理装置の制御方法に関する。
【背景技術】
【０００２】
命令のループ処理を実行するループ命令や分岐命令を分岐先の命令とともにループバッファに格納し、分岐命令による分岐が成立した場合、ループバッファから命令を読み出して実行する演算処理装置が提案されている（例えば、特許文献１、２参照）。また、ループバッファが出力する命令を実行する場合、分岐予測部、命令バッファ部および命令デコード部等の動作を停止する演算処理装置が提案されている（例えば、特許文献３参照）。命令バッファ内の複数の命令がパイプラインで同時に実行可能な場合、パイプラインに出力する制御信号を変換して、複数の命令が実行された場合と同じ処理をパイプラインに実行させる演算処理装置が提案されている（例えば、特許文献４参照）。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開２０１５−２１９８２３号公報
【特許文献２】特開２００６−３０９３３７号公報
【特許文献３】特開２０１８−５４８８号公報
【特許文献４】特開平１０−１０５３９９号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
ループバッファに格納可能な命令の数は、ループバッファのエントリ数以下である。このため、分岐命令の実行に基づいて分岐する分岐先の命令から分岐命令までの命令数がループバッファのエントリ数を超える場合、ループバッファを使用することができない。また、ループバッファに格納可能な命令数を増加するためにループバッファのエントリ数を増加させる場合、ループバッファの規模とループバッファを制御する回路の規模とが増大し、演算処理装置のチップサイズは増大する。
【０００５】
１つの側面では、本発明は、ループバッファ部に実質的に保持可能な命令数を増加することで、命令実行部による命令の実行のスループットを向上することを目的とする。
【課題を解決するための手段】
【０００６】
一つの観点によれば、演算処理装置は、命令をデコードする命令デコード部と、前記命令デコード部がデコードした命令を実行する命令実行部と、前記命令デコード部がデコードした命令の中から、繰り返し実行されるループ処理の対象命令を抽出する命令抽出部と、前記命令抽出部が抽出した対象命令の各々が格納される複数のエントリを有するループバッファ部と、前記対象命令を前記ループバッファ部の前記複数のエントリの１つに格納するとともに、複数の対象命令で使用する前記命令実行部の資源が重複しない場合、前記複数の対象命令を融合して１つの対象命令とし、前記ループバッファ部の前記複数のエントリの１つに格納する命令処理部と、前記命令デコード部が出力する命令または前記ループバッファ部が出力する対象命令のいずれかを選択し、選択した命令を前記命令実行部に出力する命令選択部とを有する。
【発明の効果】
【０００７】
１つの側面では、本発明は、ループバッファ部に実質的に保持可能な命令数を増加することで、命令実行部による命令の実行のスループットを向上することができる。
【図面の簡単な説明】
【０００８】
【図１】一実施形態における演算処理装置の一例を示す図である。
【図２】図１の演算処理装置の動作の一例を示す図である。
【図３】図１の演算処理装置を含む情報処理システムの一例を示す図である。
【図４】別の実施形態における演算処理装置の一例を示す図である。
【図５】図４の演算処理装置が実行するプログラムの一例を示す図である。
【図６】図４の共有処理部およびループキャッシュ部に格納される情報の一例を示す図である。
【図７】図４の共有命令デコード部および共有処理部の動作の一例を示す図である。
【図８】図４のコミット制御部の動作の一例を示す図である。
【図９】別の実施形態の演算処理装置における共有処理部およびループキャッシュ部に格納される情報の一例を示す図である。
【発明を実施するための形態】
【０００９】
以下、図面を用いて実施形態を説明する。
【００１０】
図１は、一実施形態における演算処理装置の一例を示す。図１に示す演算処理装置１００は、命令デコード部１、命令抽出部２、命令処理部４、ループバッファ部５、命令選択部６および命令実行部７を有する。演算処理装置１００は、複数の命令を並列にフェッチし、フェッチした複数の命令を並列に実行するスーパースカラ方式のプロセッサでもよく、スカラ方式等の他の方式のプロセッサでもよい。
【００１１】
命令デコード部１は、図示しない１次命令キャッシュ等のメモリからフェッチされた命令をデコードし、デコードした命令（デコード結果）を出力する。命令抽出部２は、命令デコード部１がデコードした命令の中から、繰り返し実行されるループ処理の対象命令を抽出する。例えば、ループ処理の対象命令は、分岐命令の分岐先のアドレスを予測する分岐予測部（図示せず）により予測されてもよい。この場合、命令抽出部２は、分岐予測部の予測にしたがってループ処理の対象命令を抽出する。
【００１２】
命令処理部４は、命令抽出部２が抽出した対象命令をループバッファ部５のエントリ５ａの１つに格納する。但し、命令処理部４は、命令抽出部２が抽出した複数の対象命令が１つの命令として実行可能な場合、複数の対象命令を融合して１つの対象命令とし、融合により得られた対象命令をループバッファ部５のエントリ５ａの１つに格納する。例えば、融合可能な複数の対象命令は、比較結果に応じてコンディションコードレジスタにコンディションコードを設定する比較命令と、比較命令に続く条件分岐命令である。融合可能な複数の命令は、比較命令と条件分岐命令とに限定されない。例えば、複数の対象命令の融合により得られる１つの対象命令が、命令実行部７内の資源を競合させることなく実行可能な場合、複数の対象命令は融合可能である。
【００１３】
ループバッファ部５は、命令抽出部２が抽出した対象命令または命令処理部４による融合により得られた対象命令が格納される複数のエントリ５ａを有する。ループバッファ部５は、ループ処理の対象命令のエントリ５ａへの格納が完了した場合、エントリ５ａに格納された対象命令を、ループ処理の実行が解除されるまで命令選択部６に順次出力する。ループ処理の実行は、例えば、条件分岐命令による分岐条件の成立によりループ処理が繰り返される場合、分岐条件の不成立により解除される。
【００１４】
命令選択部６は、命令デコード部１が出力する命令またはループバッファ部５が出力する対象命令のいずれかを選択し、選択した命令を命令実行部７に出力する。命令選択部６は、ループバッファ部５への対象命令の格納が完了していない場合、命令デコード部１が出力する命令を選択する。命令選択部６は、ループバッファ部５への対象命令の格納が完了した場合、ループバッファ部５が出力する命令を選択する。例えば、ループバッファ部５への対象命令の格納が完了したか否かは、ループバッファ部５から命令選択部６に通知されてもよく、命令処理部４から命令選択部６に通知されてもよい。
【００１５】
そして、命令実行部７は、命令選択部６を介して受信する命令デコード部１からの命令またはループバッファ部５からの命令を実行し、命令の実行結果を出力する。例えば、命令実行部７は、演算命令を実行する演算器および分岐命令による分岐先を判定する判定部等を有する。
【００１６】
図２は、図１の演算処理装置１００の動作の一例を示す。すなわち、図２は、演算処理装置１００の制御方法の一例を示す。図２において、白い四角は、ループ処理の対象命令でない通常の命令を示し、網掛けの四角、丸、三角は、ループ処理の対象命令を示す。網掛けの２つの丸は、１つの対象命令に融合可能な対象命令を示し、網掛けの三角は、分岐命令の一種である条件分岐命令を示す。黒丸は、融合された対象命令を示す。なお、１つの対象命令に融合可能な対象命令は、３つ以上でもよい。
【００１７】
三角の条件分岐命令は、直前の四角の命令の実行結果に応じて設定されるコンディションコードの値に基づいて、分岐条件が成立したか否かを判断する。例えば、三角の条件分岐命令は、分岐条件の成立時にループ処理の対象命令群の先頭の命令に分岐する命令である。なお、条件分岐命令は、分岐条件の不成立時にループ処理の対象命令群の先頭の命令に分岐する命令でもよい。
【００１８】
図２では、説明を簡単にするために、演算処理装置１００は、フェッチした命令をインオーダで実行するものとする。図２に示す例では、演算処理装置１００は、２つの白い四角の命令をフェッチして実行した後、ループ処理の対象の５つの命令を繰り返し実行する。例えば、図示しない分岐予測部等は、連続する複数のアドレスの命令が繰り返しフェッチされることに基づいて、ループ処理が継続することを予測した場合、条件分岐命令のデコードタイミングに合わせてタグ情報ＬＯＯＰ＿ＴＡＧを２回出力する。命令選択部６は、２回目のタグ情報ＬＯＯＰ＿ＴＡＧが出力されるまで、命令デコード部１がデコードした命令（デコード結果）を選択し、選択した命令を命令実行部７に出力する。なお、ループ処理が継続することは、命令抽出部２や他の回路により検出されてもよい。
【００１９】
命令抽出部２は、最初のタグ情報ＬＯＯＰ＿ＴＡＧが出力されてから次のタグ情報ＬＯＯＰ＿ＴＡＧが出力されるまでに受信する命令をループ処理の対象命令として抽出する。例えば、命令抽出部２は、抽出した対象命令を命令保持部３に格納してもよい。命令保持部３は、命令抽出部２の内部または命令処理部４の内部に設けられてもよい。
【００２０】
命令処理部４は、命令抽出部２が抽出した対象命令をループバッファ部５のエントリ５ａの１つに格納する。但し、連続する複数の対象命令で使用する命令実行部７の資源が重複せず、連続する複数の対象命令を１つの命令として実行可能な場合、命令処理部４は、複数の対象命令を融合して１つの対象命令する。そして、命令処理部４は、融合した対象命令をループバッファ部５のエントリ５ａの１つに格納する。命令処理部４が複数の対象命令を融合して１つの対象命令にすることで、ループバッファ部５のエントリに保持する対象命令の数を実質的に増加することができる。換言すれば、ループバッファ部５のエントリ５ａの使用効率を向上することができる。
【００２１】
なお、命令抽出部２および命令処理部４の動作は、ループバッファ部５に格納される前の対象命令の命令実行部７による動作と並列に実行される。すなわち、命令抽出部２および命令処理部４の動作は、対象命令の命令実行部７による動作のバックグラウンドで実行される。換言すれば、命令抽出部２および命令処理部４は、図１に示すように、ループ処理の対象命令以外の通常命令を命令デコード部１から命令実行部７に転送する経路とは別の経路に設けられる。このため、命令抽出部２および命令処理部４の動作により、演算処理装置１００の処理性能が低下することを抑止することができる。
【００２２】
ループバッファ部５は、ループ処理の対象命令が格納された場合、保持した対象命令を繰り返し出力する。命令選択部６は、ループバッファ部５から対象命令が出力される場合、命令デコード部１から出力される命令の選択を抑止し、ループバッファ部５から出力される対象命令を選択する。命令選択部６の動作に示す下向きまたは上向きの矢印は、命令選択部６が命令を選択することを示す。
【００２３】
命令実行部７は、命令選択部６が選択した命令を実行する。この際、命令実行部７は、融合により得られた１つの対象命令を実行することで、２つの対象命令を順次実行する場合に比べて命令の実行のスループットを向上することができる。ループ処理の対象命令は、繰り返し実行される可能性が高いため、命令の実行のスループットの向上の寄与度は高い。また、命令がアウトオブオーダにより実行される場合、命令の実行順を入れ替えるために使用する各種資源の使用効率を向上することができる。例えば、レジスタリネーミングに使用される更新バッファのエントリの使用効率を向上することができ、命令の実行の完了処理を実行するコミット処理に使用されるエントリの使用効率を向上することができる。この結果、命令実行部７による命令の実行のスループットを向上することができる。
【００２４】
図３は、図１の演算処理装置１００を含む情報処理システムの一例を示す。例えば、図５に示す情報処理システムは、サーバ１０００である。サーバ１０００は、複数の演算処理装置１００、複数のメインメモリ２００およびインターコネクト制御部３００を有する。例えば、演算処理装置１００は、中央演算処理装置（ＣＰＵ；Central  Processing  Unit）であり、インターコネクト制御部３００に接続される。各メインメモリ２００は、対応する演算処理装置１００に接続される。インターコネクト制御部３００は、ハードディスク装置または通信装置等の外部装置に接続され、外部装置に対して入出力制御を実行する。
【００２５】
以上、図１から図３に示す実施形態では、ループバッファ部５のエントリ５ａに保持する対象命令の数を実質的に増加することができ、ループバッファ部５のエントリ５ａの使用効率を向上することができる。このため、繰り返し実行される可能性が高いループ処理の対象命令の実行のスループットを、複数の対象命令を融合しない場合に比べて向上することができる。命令抽出部２および命令処理部４の動作は、対象命令の命令実行部７による実行のバックグラウンドで実行されるため、演算処理装置１００の処理性能が低下することを抑止することができる。命令がアウトオブオーダにより実行される場合、命令の実行順を入れ替えるために使用される各種資源の使用効率を向上することができる。この結果、命令実行部７による命令の実行のスループットを向上することができ、演算処理装置１００の処理性能を向上することができる。
【００２６】
図４は、別の実施形態における演算処理装置の一例を示す。図１から図３で説明した要素と同一または同様の要素および機能については、詳細な説明は省略される。図４に示す演算処理装置１０２は、例えば、スーパースカラ方式のプロセッサである。また、演算処理装置１０２を含む情報処理システムは、図３と同様の構成であり、図３のＣＰＵの符号を１０２に置き換えることで実現される。
【００２７】
演算処理装置１０２は、命令フェッチアドレス生成部１０、分岐予測部１２、１次命令キャッシュ１４、２次キャッシュ１６、命令バッファ部１８、命令デコード部２０、共有命令デコード部２２、共有処理部２４およびループキャッシュ部２６を有する。演算処理装置１０２は、セレクタ部２８、レジスタリネーミング部３０、リザベーションステーション３２（３２１、３２２、３２３、３２４）、コミット制御部３４およびプログラムカウンタ３６を有する。演算処理装置１０２は、オペランドアドレス生成部３８、１次データキャッシュ４０、演算器４２、４４、更新バッファ４６、４８およびレジスタファイル５０、５２を有する。更新バッファ４６およびレジスタファイル５０は、固定小数点数のデータを保持し、更新バッファ４８およびレジスタファイル５２は浮動小数点数のデータを保持する。
【００２８】
命令フェッチアドレス生成部１０は、命令をフェッチするアドレスを生成するアドレス生成部の一例である。共有命令デコード部２２は、ループ処理の対象命令を抽出する命令抽出部の一例であり、共有処理部２４は、複数の対象命令を１つの対象命令に融合する命令処理部の一例である。ループキャッシュ部２６は、ループバッファ部の一例であり、セレクタ部２８は、命令選択部の一例である。レジスタリネーミング部３０、リザベーションステーション３２、コミット制御部３４、オペランドアドレス生成部３８、演算器４２、４４、更新バッファ４６、４８およびレジスタファイル５０、５２は、命令実行部の一例である。
【００２９】
また、レジスタリネーミング部３０は、更新バッファ４６、４８の割り当てを制御する割り当て制御部の一例である。更新バッファ４６は、命令の実行中にレジスタファイル５０内のレジスタの代わりに使用するエントリを含むバッファ部の一例である。コミット制御部３４は、命令デコード部２０またはループキャッシュ部２６が出力する命令を保持する複数のエントリを含む完了制御部の一例である。
【００３０】
命令フェッチアドレス生成部１０は、分岐予測部１２からアドレスを受けない場合、内部で順次生成するアドレスに基づいて、１次命令キャッシュ１４からの命令のフェッチに使用するアドレスを生成する。また、命令フェッチアドレス生成部１０は、分岐予測部１２からアドレスを受けた場合、分岐予測部１２から受けたアドレスに基づいて、１次命令キャッシュ１４からの命令のフェッチに使用するアドレスを生成する。なお、分岐ミスが発生した場合や各種のエラーが発生し、命令の実行をキャンセルするために命令パイプラインをクリアする場合、プログラムカウンタ３６の値を使用して命令のフェッチが再開される。
【００３１】
分岐予測部１２は、命令フェッチアドレス生成部１０が生成したアドレスに基づいて、分岐命令による分岐が実行されるか否かを予測し、分岐を予測した場合、分岐先アドレスを命令フェッチアドレス生成部１０に出力する。例えば、分岐予測部１２は、所定数の命令が繰り返されるループ処理が続くことを予測した場合、ループ処理の対象アドレスが一巡するまで、ループ処理の対象アドレスを順次出力する。この場合、分岐予測部１２は、ループ処理の対象アドレスの最大値（条件分岐命令の格納アドレス）とともにタグ情報ＬＯＯＰ＿ＴＡＧを出力する。分岐予測部１２は、その後、分岐先の対象アドレスを順次出力し、対象アドレスの最大値とともにタグ情報ＬＯＯＰ＿ＴＡＧを再び出力する。ループ処理の対象命令を含むプログラムの例は、図５で説明される。
【００３２】
１次命令キャッシュ１４は、命令フェッチアドレス生成部１０から受信するアドレスで示される領域に保持された命令を取り出し、取り出した命令を命令バッファ部１８に出力する。なお、タグ情報ＬＯＯＰ＿ＴＡＧは、対象の条件分岐命令とともに命令バッファ部１８に出力される。１次命令キャッシュ１４が保持する命令として、演算器４２、４４を使用して演算を実行する演算命令、メモリアクセス命令または分岐命令等がある。１次命令キャッシュ１４は、アドレスに対応する命令を保持していない場合、２次キャッシュ１６から命令を取り出すために、２次キャッシュ１６にアクセス要求を出力する。２次キャッシュは、命令およびデータを保持する。
【００３３】
２次キャッシュ１６は、アクセス要求に基づいて、アドレスに対応して保持している命令を取り出し、取り出した命令を１次命令キャッシュ１４に出力する。２次キャッシュ１６は、アドレスに対応する命令を保持していない場合、メインメモリ２００から命令を取り出すために、メインメモリ２００にアクセス要求を出力する。例えば、メインメモリ２００は、演算処理装置１０２を含む半導体チップとは別の半導体チップに含まれる。
【００３４】
命令バッファ部１８は、１次命令キャッシュ１４から出力される複数の命令を並列に保持し、保持した命令を命令デコード部２０に並列に出力する。例えば、命令バッファ部１８は、４つの命令を並列に命令デコード部２０に出力する。なお、１次命令キャッシュ１４から命令バッファ部１８に並列に出力される命令の数は、４つより多い。タグ情報ＬＯＯＰ＿ＴＡＧは、対象の条件分岐命令とともに命令デコード部２０に出力される。
【００３５】
命令デコード部２０は、命令バッファ部１８から出力される複数の命令を並列にデコードする複数のデコードスロットを有する。特に限定されないが、デコードスロットの数は４つである。各デコードスロットは、各命令を実行する演算器４２、４４等に対応するリザベーションステーション３２（３２１、３２２、３２３、３２４）を決定する。各デコードスロットは、命令の発行先のリザベーションステーション３２を示す情報等を命令に付加し、情報を付加した命令をセレクタ部２８および共有命令デコード部２２に出力する。なお、命令デコード部２０は、デコードする命令がタグ情報ＬＯＯＰ＿ＴＡＧを含む場合、デコード結果とともにタグ情報ＬＯＯＰ＿ＴＡＧを出力する。
【００３６】
また、命令デコード部２０は、演算処理装置１０２で実行するプログラム中の記述の順番にしたがって命令に命令識別子（ＩＩＤ：Instruction  Identification）を割り振り、割り振った命令識別子を、デコードした命令（デコード結果）とともに出力する。命令識別子はコミット制御部３４で使用される。なお、命令バッファ部１８および命令デコード部２０は、プログラム中の記述の順番を入れ替えることなく複数の命令を並列に処理する（インオーダ）。
【００３７】
共有命令デコード部２２は、命令デコード部２０からタグ情報ＬＯＯＰ＿ＴＡＧを含む命令を受信した場合、次のタグ情報ＬＯＯＰ＿ＴＡＧを含む命令を受信するまで、命令がループキャッシュ部２６のエントリの１つを共有可能かどうかの判定を実行する。最初のタグ情報ＬＯＯＰ＿ＴＡＧとともに受信する命令から次のタグ情報ＬＯＯＰ＿ＴＡＧとともに受信する命令までは、ループ処理の対象命令である。
【００３８】
例えば、共有命令デコード部２２は、命令デコード部２０によりデコードされた連続する複数の対象命令が、ループキャッシュ部２６、レジスタリネーミング部３０およびコミット制御部３４において１つの対象命令と同等に扱えるかを判定する。そして、共有命令デコード部２２は、複数の対象命令を１つの対象命令と同等に扱えるかを示す共有フラグＳＦＬＧ（図６）とともに、命令デコード部２０から受信した対象命令を共有処理部２４に格納する。例えば、共有命令デコード部２２は、複数の対象命令を並列に共有処理部２４に格納する。共有フラグＳＦＬＧは、対象命令と他の対象命令とが１つの命令として実行可能かを示す融合情報の一例である。換言すれば、共有フラグＳＦＬＧは、対象命令と他の対象命令とを融合させた場合、演算器４２、４４および更新バッファ４６、４８等の資源を競合することなく使用できるか否かを示す。
【００３９】
共有処理部２４は、共有命令デコード部２２により格納された対象命令をループキャッシュ部２６の複数のエントリの１つに格納する。また、共有処理部２４は、複数の対象命令を１つの命令として実行可能な場合、複数の対象命令を融合して１つの対象命令とし、ループキャッシュ部２６の複数のエントリの１つに格納する。これにより、ループキャッシュ部２６の１つのエントリを複数の対象命令で共有することができ、ループキャッシュ部２６のエントリの使用効率を向上することができる。なお、共有処理部２４は、融合可能な複数の対象命令と、融合により得られる１つの対象命令との関係を示す情報を保持し、保持している情報に基づいて、複数の対象命令を融合して１つの対象命令としてもよい。
【００４０】
ループキャッシュ部２６は、命令が格納される複数のエントリを有する。ループキャッシュ部２６は、ループ処理の対象命令のエントリへの格納が完了したことに基づいて、エントリに保持した対象命令をセレクタ部２８に順次出力する。ループキャッシュ部２６のエントリに保持される命令は、プログラムの記述順にしたがっている（インオーダ）。
【００４１】
例えば、ループキャッシュ部２６は、ループ処理の対象命令のエントリへの格納が完了したことを、共有命令デコード部２２または共有処理部２４からの通知に基づいて判定する。例えば、共有命令デコード部２２は、共有処理部２４を介してタグ情報ＬＯＯＰ＿ＴＡＧをループキャッシュ部２６に出力する。そして、ループキャッシュ部２６は、タグ情報ＬＯＯＰ＿ＴＡＧを２回受信したことに基づいて、ループ処理の対象命令がエントリに格納されたことを判定する。
【００４２】
セレクタ部２８は、ループキャッシュ部２６からの対象命令を受信しない場合、命令デコード部２０から出力される命令を選択してレジスタリネーミング部３０に出力する。セレクタ部２８は、ループキャッシュ部２６から対象命令を受信した場合、ループキャッシュ部２６から出力される対象命令を選択してレジスタリネーミング部３０に出力する。
【００４３】
レジスタリネーミング部３０は、アウトオブオーダ実行を可能にするために、命令の実行時に、命令オペランドで指定されるレジスタファイル５０（または５２）内のレジスタの代わりに使用する更新バッファ４６（または４８）のエントリを割り当てる。そして、レジスタリネーミング部３０は、割り当てた更新バッファ４６（または４８）のエントリを示す情報とともに、セレクタ部２８から転送される命令を、命令を実行するリザベーションステーション３２に出力する。なお、セレクタ部２８から出力される命令は、命令をどのリザベーションステーション３２に出力するかを示す情報を含む。
【００４４】
例えば、命令デコード部２０がデコードした命令がメモリアクセス命令（ロード命令またはストア命令）である場合、命令はリザベーションステーション（ＲＳＡ）３２１に投入される。命令デコード部２０がデコードした命令が固定小数点数の演算命令である場合、命令はリザベーションステーション３２２（ＲＳＥ）に投入される。命令デコード部２０がデコードした命令が浮動小数点数の演算命令である場合、命令はリザベーションステーション３２３（ＲＳＦ）に投入される。命令デコード部２０がデコードした命令が分岐命令である場合、命令はリザベーションステーション３２４（ＲＳＢＲ）に投入される。
【００４５】
また、命令デコード部２０は、演算処理装置１０２で実行するプログラム中の記述の順番にしたがって命令に命令識別子（ＩＩＤ：Instruction  Identification）を割り振り、割り振った命令識別子をコミット制御部３４に出力する。
【００４６】
リザベーションステーション３２１は、命令デコード部２０から順次受けるメモリアクセス命令を保持し、保持したメモリアクセス命令を実行可能な順にオペランドアドレス生成部３８に出力する。以下では、リザベーションステーション３２１は、ＲＳＡ（Reservation  Station  for  Address  generation）３２１とも称される。リザベーションステーション３２２は、命令デコード部２０から順次受ける固定小数点数の演算命令を保持し、保持した演算命令を実行可能な順に演算器４２に出力する。以下では、リザベーションステーション３２２は、ＲＳＥ（Reservation  Station  for  Execution）３２２とも称される。
【００４７】
リザベーションステーション３２３は、命令デコード部２０から順次受ける浮動小数点数の演算命令を保持し、保持した演算命令を実行可能な順に演算器４４に出力する。以下では、リザベーションステーション３２３は、ＲＳＦ（Reservation  Station  for  Floating  point）３２３とも称される。リザベーションステーション３２４は、命令デコード部２０から順次受ける分岐命令を、分岐の判断ができるようになるまで保持する。以下では、リザベーションステーション３２４は、ＲＳＢＲ（Reservation  Station  for  BRanch）３２４とも称される。リザベーションステーション３２１、３２２、３２３に保持された命令は、それぞれ命令の実行の準備が整ったものから対応するオペランドアドレス生成部３８、演算器４２、４４のいずれかに発行される。そして、演算器４２、４４に発行された命令は、プログラムに記述された命令の順番と関係なく実行される（アウトオブオーダ）。
【００４８】
コミット制御部３４は、レジスタリネーミング部３０を介して受信する命令を、プログラムに記述された順番通りに貯めておくキュー構造の保持部と、完了処理を実行する完了処理部とを有する。キュー構造の保持部は、複数のエントリを含む。完了処理部は、保持部に保持された情報と演算器４２、４４等からの命令実行の完了報告等とに基づいて、命令の完了処理を、プログラムで記述された順に実行する（インオーダ）。
【００４９】
なお、コミット制御部３４の保持部に保持される命令は、ループキャッシュ部２６を介さずに命令デコード部２０から出力される命令、あるいは、ループキャッシュ部２６から出力される命令の何れかである。以下では、コミット制御部３４は、ＣＳＥ（Commit  Stack  Entry）３０とも称される。コミット制御部３４は、アウトオブオーダにより実行が完了した命令に基づいてインオーダで命令の完了処理を実行する完了制御部の一例である。以下では命令の完了処理は、コミットとも称される。
【００５０】
プログラムカウンタ３６は、コミット制御部３４からの指示に基づいて、命令の格納先を示すメモリアドレスを更新し、更新したメモリアドレスを命令フェッチアドレス生成部１０に出力する。
【００５１】
オペランドアドレス生成部３８は、ＲＳＡ３２１から投入されるメモリアクセス命令に基づいてアドレスを生成し、生成したアドレスを一次データキャッシュ４０に出力する。１次データキャッシュ４０は、オペランドアドレス生成部３８からのアドレスによりアクセスされ、データを入出力する。なお、図３では、演算処理装置１０２は、複数のオペランドアドレス生成部３８を有するが、オペランドアドレス生成部３８の数は単数でもよい。
【００５２】
１次データキャッシュ４０は、１次命令キャッシュ１４と同様に、アドレスに対応するデータを保持していない場合、２次キャッシュ１６からデータを取り出すために、２次キャッシュ１６にアクセス要求を出力する。例えば、ロード命令では、１次データキャッシュ４０は、取り出したデータを更新バッファ４６、４８のいずれかに格納する。
【００５３】
演算器４２は、固定小数点数用の演算器である。演算処理装置１０２は、命令デコード部２０により並列にデコードされた固定小数点数の演算命令を並列に実行するために、複数の演算器４２を有してもよい。演算器４２は、演算に使用するデータを更新バッファ４６またはレジスタファイル５０から取得し、演算結果を更新バッファ４６に格納する。
【００５４】
演算器４４は、浮動小数点数用の演算器である。例えば、演算処理装置１０２は、命令デコード部２０により並列にデコードされた浮動小数点数の演算命令を並列に実行するために、複数の演算器４４を有してもよい。演算器４４は、演算に使用するデータを更新バッファ４８またはレジスタファイル５２から取得し、演算結果を更新バッファ４８に格納する。なお、演算器４４は、積和演算、整数演算、論理演算等を実行する演算器を含んでもよい。
【００５５】
更新バッファ４６は、演算器４２で実行する演算に使用するデータを保持する複数のエントリと、エントリとレジスタファイル５０内のレジスタとの対応付けを管理する管理部とを有する。更新バッファ４８は、演算器４４で実行する演算に使用するデータを保持する複数のエントリと、エントリとレジスタファイル５２内のレジスタとの対応付けを管理する管理部とを有する。
【００５６】
レジスタファイル５０は、演算器４２で実行する演算に使用するデータを保持し、演算器４２による演算の実行結果を保持する複数のエントリを有する。レジスタファイル５２は、演算器４４で実行する演算に使用するデータを保持し、演算器４４による演算の実行結果を保持する複数のエントリを有する。
【００５７】
例えば、演算処理装置１０２は、６４ビット構成の３２個の固定小数点レジスタを含むレジスタファイル５０と、５１２ビット構成の３２個の浮動小数点レジスタを含むレジスタファイル５２とを有する。なお、レジスタファイル５０、５２の各レジスタの個数とビット構成は、上記以外でもよい。また、浮動小数点数用のレジスタファイル５２のレジスタのビット構成は、可変にされてもよい。
【００５８】
なお、図４に示す演算処理装置１０２の回路要素は、図示しないフリップフロップにより複数のステージに分割され、演算処理装置１０２は、パイプライン処理を実行する。例えば、パイプラインのステージとして、デコードステージ、デコードトランスファステージ、プライオリティステージ、プライオリティトランスファステージ、バッファステージ、実行ステージおよびライトバックステージがある。
【００５９】
デコードステージでは、命令デコード部２０による命令のデコードが実行される。デコードトランスファステージでは、命令デコード部２０によりデコードされた命令がＲＳＥ３２２、ＲＳＦ３２３等に発行される。プライオリティステージでは、例えば、ＲＳＥ３２２により、演算器４２に発行する命令が決定される。
【００６０】
プライオリティトランスファステージでは、例えば、ＲＳＥ３２２から演算器４２に命令が発行される。バッファステージでは、演算に使用するオペランドが更新バッファ４６またはレジスタファイル５０等から読み出される。実行ステージでは、演算器４２による演算が実行される。ライトバックステージでは、演算器４２による演算の結果が更新バッファ４６に格納される。
【００６１】
図５は、図４の演算処理装置１０２が実行するプログラムの一例を示す。説明を分かりやすくするために、図５では、ループ処理の対象命令のみが示される。図５に示す命令は、いわゆるアセンブリ言語形式での記述である。図５に示すプログラムの記述は、特定の命令セットアーキテクチャを示すものではない。レジスタＸ０、Ｘ１、Ｘ３、Ｘ４、Ｘ５は、レジスタファイル５０またはレジスタファイル５２に含まれる。
【００６２】
１行目の”ＬＯＯＰ”は、８行目の条件分岐命令ＢＮＥ（Branch  Not  Equal）の条件分岐が成立した場合の分岐先を示すラベルである。１行目では、レジスタＸ４、Ｘ５が保持するデータを加算し、加算結果をレジスタＸ３に格納する加算命令ＡＤＤが実行される。
【００６３】
２行目では、１６ビットの即値＃ＡをレジスタＸ０に格納するムーブ命令ＭＯＶａが実行される。３行目では、レジスタＸ０が保持するデータを左（上位側）に１６ビットシフトした後（ＬＳＬ１６）、１６ビットの即値＃ＢをレジスタＸ０に格納するムーブ命令ＭＯＶｂが実行される。ムーブ命令ＭＯＶｂでは、レジスタＸ０の即値＃Ｂが格納されるビット以外のビット値は維持される。
【００６４】
４行目から６行目にも命令が存在するが、図示および説明は省略される。例えば、４行目から６行目の少なくとも何れかには、演算結果等をレジスタＸ０またはレジスタＸ１に格納する命令が記述されてもよい。
【００６５】
７行目では、レジスタＸ０、Ｘ１が保持する値の差を算出し、算出した差に基づいてコンディションコードを設定する比較命令ＣＭＰが実行される。８行目では、比較命令ＣＭＰの実行により設定されたコンディションコード（この例ではゼロフラグ）が”０”以外の場合にラベルＬＯＯＰで示されるアドレスに分岐する条件分岐命令ＢＮＥが実行される。例えば、ラベルＬＯＯＰの値は、プログラムカウンタＰＣの値に対する相対値である。
【００６６】
命令が演算命令の場合、命令デコード部２０は、アウトオブオーダ実行するためにどの資源（リザベーションステーション３２、演算器４２、４４等）を使用するかを示す情報を出力する。また、命令デコード部２０は、何の演算（加算、減算、乗算、除算、論理演算等）を実行するかを示す情報を出力する。さらに、命令デコード部２０は、何のデータを演算オペランドに使用するか、あるいは、即値を使用するかを示す情報を出力する。以下では、命令のデコード結果に基づいて、命令デコード部２０が命令の実行に使用する資源等を指定するために出力する情報は、命令とも称される。
【００６７】
命令が演算命令の場合、演算処理装置１０２は、レジスタリネーミングを実行する。レジスタリネーミングでは、演算処理装置１０２は、更新バッファ４６、４８のどのエントリに書き込むかを決定する。また、演算処理装置１０２は、演算に使用するオペランドデータを更新バッファ４６のどのエントリから読み出すか、あるいはレジスタファイル５０、５２から読み出すかを決定する。
【００６８】
さらに、演算処理装置１０２は、演算の実行の完了に基づいて命令のコミット処理を実行する。例えば、演算処理装置１０２は、更新バッファ４６、４８が保持する演算結果をレジスタファイル５０、５２に書き込む。なお、演算処理装置１０２は、命令の実行を中断させる例外等が発生した場合、例外処理を実行する。
【００６９】
一方、命令が条件分岐命令の場合、命令デコード部２０は、分岐先のアドレスを生成するためのオフセット値を出力し、分岐の成立の条件を示す情報を出力する。条件分岐命令では、レジスタファイル５０、５２は使用されないため、レジスタリネーミングは実行されない。但し、演算処理装置１０２は、条件分岐命令の分岐条件を生成する演算命令であって、条件分岐命令の直前に実行される演算命令を認識して分岐処理を制御する回路を、レジスタリネーミングの処理回路とは別に持ち、条件分岐命令の実行時に動作させる。
【００７０】
演算処理装置１０２は、条件分岐命令の実行の完了に基づく命令のコミット処理では、分岐条件が成立した場合、プログラムカウンタ３６を更新して、プログラムカウンタ３６が分岐先のアドレスを示すようにする。また、演算処理装置１０２は、分岐予測をミスした場合、パイプラインをクリアする。
【００７１】
このように、演算命令と条件分岐命令とでは、レジスタリネーミング、命令コミットのそれぞれについて、命令デコード部２０が出力する情報が異なり、動作する回路が異なる。このため、演算命令と条件分岐命令とは、命令の種類によっては、並列に実行させることが可能である。また、複数の演算命令においても、演算器４２が共有でき、使用するレジスタが重複せず、更新バッファ４６のエントリが重複しない場合、並列に実行させることが可能な場合がある。
【００７２】
図５に示すプログラムにおいて、比較命令ＣＭＰは、演算器４２を使用して実行される。条件分岐命令ＢＮＥは、ＲＳＢＲ３２４がコンディションコードを参照することで実行され、演算器４２、更新バッファ４６およびレジスタファイル５０等の資源は使用しない。したがって、比較命令ＣＭＰおよび条件分岐命令ＢＮＥは、更新バッファ４６等の資源が競合されることがなく、ループキャッシュ部２６のエントリの１つに格納した場合にも、コミット制御部３４によりコミット処理を正常に実行することができる。また、２行目と３行目のムーブ命令ＭＯＶａ、ＭＯＶｂは、１つの３２ビットの即値のムーブ命令と等価であるため、ループキャッシュ部２６のエントリの１つに格納した場合にも、使用する資源が重複することはなく、コミット処理を正常に実行することができる。
【００７３】
図６は、図４の共有処理部２４およびループキャッシュ部２６に格納される情報の一例を示す。図６では、命令デコード部２０が図５に示すプログラムに含まれる命令（図示していない命令も含む）をデコードするとする。共有命令デコード部２２は、命令デコード部２０から並列に出力される４つのデコード結果（命令）に基づいて、使用する資源が重複しない複数の命令があるか否かを判定するデコード動作を実行する。使用する資源が重複しない複数の命令は、融合可能な命令である。なお、共有命令デコード部２２および共有処理部２４は、複数の命令に対する処理を並列に実行する。
【００７４】
共有処理部２４は、共有命令デコード部２２から出力される対象命令を保持する命令保持部２４ａを有する。命令保持部２４ａは、共有フラグＳＦＬＧと、デコードされた命令とを格納する領域を含む複数のエントリを有する。なお、命令保持部２４ａは、共有処理部２４の外部に設けられてもよく、その場合、共有命令デコード部２２内に設けられてもよい。
【００７５】
ループキャッシュ部２６は、基準命令と付随情報とを格納する領域を含む複数のエントリを有する。基準命令の領域には、デコードされた命令または使用する資源が重複しない複数の命令のうちの一部である基準となる命令が格納される。付随情報の領域には、使用する資源が重複しない複数の命令のうちの基準命令に含まれないオペランド等の情報が格納される。すなわち、付随情報の領域には、基準命令を補う情報が格納され、基準命令と付随情報とにより、使用する資源が重複しない複数の命令が表される。
【００７６】
共有命令デコード部２２は、命令デコード部２０からタグ情報ＬＯＯＰ＿ＴＡＧを受信した場合、タグ情報ＬＯＯＰ＿ＴＡＧとともに受信した命令の次の命令を命令保持部２４ａの１番目のエントリに格納する。そして、共有命令デコード部２２は、次のタグ情報ＬＯＯＰ＿ＴＡＧとともに受信する命令より前に受信する命令を、命令保持部２４ａの２番目のエントリから順に格納する。
【００７７】
また、共有命令デコード部２２は、命令保持部２４ａに命令を格納する場合、連続する複数の命令で使用する資源が重複しない（すなわち、１つの命令に融合可能）か否かを判断する。共有命令デコード部２２は、使用する資源が重複しないと判断した複数の命令のうち最後の命令を除く命令を格納した命令保持部２４ａのエントリの共有フラグＳＦＬＧを”１”に設定する。なお、使用する資源が重複しないことを示す共有フラグＳＦＬＧの値は、”１”に限定されない。
【００７８】
例えば、共有命令デコード部２２は、使用する資源が重複しない複数の命令の組み合わせを示す共有命令リスト２２ａを有しており、共有命令リスト２２ａに含まれる組み合わせの命令を命令デコード部２０から受信した場合、使用する資源が重複しないと判断する。共有命令リスト２２ａは、１つの命令として実行可能な複数の対象命令を示す情報が格納されるリスト部の一例である。共有命令デコード部２２は、共有命令リスト２２ａに保持された情報と、命令デコード部２０から受信した複数の連続する命令の情報とを比較することにより、使用する資源が重複するか否かを判定することができる。
【００７９】
例えば、共有命令デコード部２２は、２番目のムーブ命令ＭＯＶａと３番目のムーブ命令ＭＯＶｂとを融合した場合、使用する資源が重複しないと判断し、ムーブ命令ＭＯＶａを格納した２番目のエントリの共有フラグＳＦＬＧを”１”に設定する。また、共有命令デコード部２２は、７番目の比較命令ＣＭＰと８番目の条件分岐命令ＢＮＥとを融合した場合、使用する資源が重複しないと判断し、比較命令ＣＭＰを格納した７番目のエントリの共有フラグＳＦＬＧを”１”に設定する。
【００８０】
共有処理部２４は、タグ情報ＬＯＯＰ＿ＴＡＧを２回受信したことに基づいて、ループ処理の対象命令が命令保持部２４ａのエントリに格納されたと判断し、命令保持部２４ａに保持された命令を共有する処理を実行する。まず、共有処理部２４は、命令保持部２４ａの１番目のエントリの共有フラグＳＦＬＧが”０”であるため、１番目のエントリが保持する加算命令ＡＤＤをループキャッシュ部２６の１番目のエントリの基準命令の領域に格納する。この場合、付随情報の領域には何も格納されない。
【００８１】
次に、共有処理部２４は、命令保持部２４ａの２番目のエントリの共有フラグＳＦＬＧが”１”であるため、命令保持部２４ａの３番目のエントリが保持する情報を参照する。共有処理部２４は、３番目のエントリの共有フラグＳＦＬＧが”０”であるため、２番目のムーブ命令ＭＯＶａと３番目のムーブ命令ＭＯＶｂとを融合した場合、使用する資源が重複しないと判断する。このように、共有処理部２４は、共有フラグＳＦＬＧの”１”を検出した場合、次に共有フラグＳＦＬＧの”０”を検出する命令までを、融合後の命令で使用する資源が重複しない命令であると判断する。使用する資源が重複するか否かを判定する共有フラグＳＦＬＧを格納する領域を命令保持部２４ａに設けることで、共有処理部２４は、１つの命令に融合する命令を容易に識別することができる。
【００８２】
共有処理部２４は、使用する資源が重複しないムーブ命令ＭＯＶａ、ＭＯＶｂが３２ビットの即値のムーブ命令ＭＯＶと等価であると判定し、ムーブ命令ＭＯＶをループキャッシュ部２６の２番目のエントリに格納する。例えば、共有処理部２４は、ムーブ命令ＭＯＶとオペランドＸ０とを基準命令の領域に格納し、３２ビットの即値＃ＡＢを付随情報の領域に格納する。すなわち、２つのムーブ命令ＭＯＶａ、ＭＯＶｂを１つの命令として融合し、ループキャッシュ部２６のエントリの１つを２つの命令で共有する処理が実行される。
【００８３】
共有処理部２４は、命令保持部２４ａの４番目から６番目のエントリの共有フラグＳＦＬＧが”０”であるため、これらエントリに保持された命令を、ループキャッシュ部２６の３番目から５番目のエントリに順次格納する。付随情報の領域には何も格納されない。
【００８４】
次に、共有処理部２４は、命令保持部２４ａの７番目のエントリの共有フラグＳＦＬＧが”１”であるため、命令保持部２４ａの８番目のエントリが保持する情報を参照する。共有処理部２４は、８番目のエントリの共有フラグＳＦＬＧが”０”であるため、７番目の比較命令ＣＭＰと８番目の条件分岐命令ＢＮＥとを融合した場合、使用する資源が重複しないと判断する。
【００８５】
共有処理部２４は、８番目の条件分岐命令ＢＮＥをループキャッシュ部２６の６番目のエントリの基準命令の領域に格納し、７番目の比較命令ＣＭＰのオペランドＸ０、Ｘ１を６番目のエントリの付随情報の領域に格納する。すなわち、比較命令ＣＭＰと条件分岐命令ＢＮＥとを１つの命令として融合し、ループキャッシュ部２６のエントリの１つを２つの命令で共有する処理が実行される。
【００８６】
例えば、共有処理部２４は、基準命令の領域に共有フラグＳＦＬＧが”０”のエントリに保持された命令を格納し、付随情報の領域に共有フラグＳＦＬＧが”１”のエントリに保持された命令のオペランドを格納すればよい。これにより、共有処理部２４は、複雑な処理を行うことなく、ループキャッシュ部２６への命令の格納処理を実行することができる。
【００８７】
そして、ループ処理の対象命令が、プログラムの記述順に沿って、ループキャッシュ部２６のエントリに格納される。図６では、２つのムーブ命令ＭＯＶａ、ＭＯＶｂが１つの命令としてループキャッシュ部２６の２番目のエントリに格納され、比較命令ＣＭＰと条件分岐命令ＢＮＥとが１つの命令としてループキャッシュ部２６の６番目のエントリに格納される。これにより、ループキャッシュ部２６のエントリ数を増加することなく（すなわち、回路規模を増大することなく）、ループキャッシュ部２６に実質的に格納可能な命令数を増加することができる。
【００８８】
ループキャッシュ部２６は、タグ情報ＬＯＯＰ＿ＴＡＧを２回受信したことに基づいて、ループ処理の対象命令がエントリに格納されたと判断し、エントリに保持した命令をセレクタ部２８に順次出力する動作を開始する。ループキャッシュ部２６は、エントリに保持した命令をセレクタ部２８に出力している間、ループキャッシュ部２６からの命令を選択する指示をセレクタ部２８に出力する。
【００８９】
なお、条件分岐命令ＢＮＥの条件分岐が成立せず、ループ処理から抜ける場合、ループキャッシュ部２６に保持された基準命令および付随情報等は無効化される。このため、分岐予測部１２が、新たにループ処理が続くことを予測した場合、新たなループ処理の対象命令がループキャッシュ部２６に格納される。
【００９０】
セレクタ部２８は、ループキャッシュ部２６からの指示に基づいて、命令デコード部２０から出力される命令の選択を停止し、ループキャッシュ部２６から出力される命令を選択し、選択した命令をレジスタリネーミング部３０に出力する。なお、ループキャッシュ部２６から出力される命令は、命令の転送先であるリザベーションステーション３２を示す情報を含む。
【００９１】
レジスタリネーミング部３０は、セレクタ部２８から転送される命令に基づいて、命令毎に、命令オペランドで指定されるレジスタ毎に更新バッファ４６（または４８）のエントリを割り当てる。また、例えば、ループキャッシュ部２６の２番目のエントリに保持された基準命令および付随情報は、３２ビットの即値のムーブ命令ＭＯＶに相当する。ＲＳＥ３２２は、セレクタ部２８およびレジスタリネーミング部３０を介して３２ビットの即値のムーブ命令ＭＯＶに相当する基準命令および付随情報を受信する。
【００９２】
ＲＳＥ３２２は、受信した基準命令および付随情報に基づいて、演算器４２に３２ビットの即値のムーブ命令ＭＯＶを実行させるための情報を出力する。これにより、２つのムーブ命令ＭＯＶａ、ＭＯＶｂを１つのムーブ命令ＭＯＶとして実行させることができる。ＲＳＥ３２２が受信する情報は、レジスタＸ０に対応して更新バッファ４６のどのエントリを使用するかを示す情報を含む。２つのムーブ命令ＭＯＶａ、ＭＯＶｂを１つのムーブ命令ＭＯＶに融合することで、使用する更新バッファ４６のエントリの数を少なくできるため、実質的に使用可能な更新バッファ４６のエントリ数を増加することができる。換言すれば、更新バッファ４６、４８のエントリ数を増やして回路規模を増大することなく、更新バッファ４６、４８で使用可能なエントリ数を増加することができる。
【００９３】
ループキャッシュ部２６の６番目のエントリに保持された基準命令（条件分岐命令ＢＮＥ）は、セレクタ部２８およびレジスタリネーミング部３０を介してＲＳＢＲ３２４に転送される。また、ループキャッシュ部２６の６番目のエントリに保持された付随情報（比較命令ＣＭＰのオペランド）は、セレクタ部２８およびレジスタリネーミング部３０を介してＲＳＥ３２２に転送される。ＲＳＥ３２２は、転送された付随情報に基づいて、演算器４２に比較命令ＣＭＰ（コンディションコードを設定機能付きの減算）を実行させるための制御情報を出力する。
【００９４】
演算器４２は、比較命令ＣＭＰを実行し、実行結果に基づいてコンディションコードを設定する。ＲＳＢＲ３２４は、コンディションコードを参照し、分岐条件が成立するか否かを判定し、判定結果に基づいてプログラムカウンタ３６を更新する。このように、演算処理装置１０２内の資源を競合させることなく、比較命令ＣＭＰと条件分岐命令ＢＮＥとを１つの命令として実行させることができる。
【００９５】
なお、ループキャッシュ部２６が命令を保持していない場合、命令デコード部２０が出力する命令（デコード結果）は、共有命令デコード部２２および共有処理部２４を通ることなく、セレクタ部２８を介してレジスタリネーミング部３０に出力される。すなわち、ループキャッシュ部２６に格納される命令以外の命令は、共有命令デコード部２２および共有処理部２４を通ることなく、セレクタ部２８を介してレジスタリネーミング部３０に出力される。
【００９６】
例えば、最初のタグ情報ＬＯＯＰ＿ＴＡＧが分岐予測部１２から出力された場合、ループ処理の対象命令は、ループキャッシュ部２６に格納されていない。このため、ループ処理の対象命令は、通常の命令と同様に、命令デコード部２０からセレクタ部２８を介してレジスタリネーミング部３０に出力され、実行される。そして、ループキャッシュ部２６に格納される命令を実行中に、共有命令デコード部２２による共有処理部２４への命令の格納と、共有処理部２４によるループキャッシュ部２６への命令の格納とがバックグラウンドで実行される。すなわち、共有命令デコード部２２および共有処理部２４の追加により、パイプラインに新たなステージが追加されることはなく、演算処理装置１０２の処理性能が低下することはない。
【００９７】
ループキャッシュ部２６への命令の格納後、ループキャッシュ部２６に格納された命令（付随情報を含む）がセレクタ部２８を介してレジスタリネーミング部３０に出力され、実行される。このとき、共有命令デコード部２２および共有処理部２４は動作を停止している。したがって、演算処理装置１０２による命令の実行時間に、共有命令デコード部２２および共有処理部２４の動作時間は含まれないため、演算の実行時間が延びることを抑止することができる。この結果、命令毎に資源の共有が可能か否かを判定する場合に比べて、演算処理装置１０２のスループットを向上することができる。
【００９８】
これに対して、例えば、命令デコード部２０の前に、複数の命令が同時に実行可能か否かを判定するプリデコード部を設ける場合、プリデコード部の処理のためにパイプラインの段数が増加するため、スループットが低下してしまう。
【００９９】
図７は、図４の共有命令デコード部２２および共有処理部２４の動作の一例を示す。すなわち、図７は、演算処理装置１０２の制御方法の一例を示す。図７に示す動作は、共有命令デコード部２２が、分岐予測部１２からのタグ情報ＬＯＯＰ＿ＴＡＧを、命令デコード部２０を介して受信したことに基づいて開始される。
【０１００】
まず、ステップＳ１０において、共有命令デコード部２２は、２回目のタグ情報ＬＯＯＰ＿ＴＡＧを受信するまで、命令デコード部２０から出力される命令（デコード結果）を共有処理部２４の命令保持部２４ａに順次格納する。なお、命令の命令保持部２４ａへの格納は、ステップＳ１６とともに実行されてもよい。
【０１０１】
次に、ステップＳ１２において、共有命令デコード部２２は、命令デコード部２０から出力された命令（デコード結果）をデコードし、融合後に使用する資源が重複しない連続する複数の命令があるか否かを判定する。次に、ステップＳ１４において、共有命令デコード部２２は、融合後に使用する資源が重複しない連続する複数の命令がある場合、動作をステップＳ１６に移行する。共有命令デコード部２２は、融合後に使用する資源が重複しない連続する複数の命令がない場合、動作をステップＳ１８に移行する。
【０１０２】
ステップＳ１６において、共有命令デコード部２２は、融合後に使用する資源が重複しないという条件に合致した複数の命令のうち、最後の命令を除く前側（先頭側）の命令を格納した命令保持部２４ａのエントリに共有フラグＳＦＬＧを設定する。この後、動作はステップＳ１８に移行される。ステップＳ１６までの動作により、命令保持部２４ａのエントリは、例えば、図６に示す状態になる。
【０１０３】
ステップＳ１８において、共有処理部２４は、命令を保持した命令保持部２４ａのエントリに共有フラグＳＦＬＧが設定されている場合、動作をステップＳ２０に移行し、共有フラグＳＦＬＧが設定されていない場合、動作をステップＳ２２に移行する。ステップＳ２０において、共有処理部２４は、融合後に使用する資源が重複しない連続する複数の命令を融合してループキャッシュ部２６のエントリの１つに格納するために、基準命令と付随情報を生成し、動作をステップＳ２２に移行する。
【０１０４】
ステップＳ２２において、共有処理部２４は、条件に合致した複数の命令を基準命令および付随情報としてループキャッシュ部２６のエントリの１つに格納し、他の命令の各々をループキャッシュ部２６のエントリの１つに格納し、動作を終了する。
【０１０５】
例えば、ステップＳ１８、Ｓ２０、Ｓ２２の動作は、図６に示す命令保持部２４ａのエントリ毎に実行される。そして、ステップＳ１８、Ｓ２０、Ｓ２２の動作を繰り返し実行することにより、ループキャッシュ部２６のエントリは、例えば、図６に示す状態になる。この後、ループキャッシュ部２６は、エントリに保持された命令（基準命令、または、基準命令と付随情報）をセレクタ部２８に順次出力する。
【０１０６】
図８は、図４のコミット制御部３４の動作の一例を示す。すなわち、図８は、演算処理装置１０２の制御方法の一例を示す。図８に示す動作は、例えば、所定の周期で繰り返し実行される。
【０１０７】
まず、ステップＳ３０において、コミット制御部３４は、命令を受信した場合、動作をステップＳ３２に移行し、命令を受信していない場合、動作をステップＳ３８に移行する。ステップＳ３２において、コミット制御部３４は、受信した命令をキューに格納し、動作をステップＳ３４に移行する。
【０１０８】
ここで、例えば、コミット制御部３４は、図６に示した２つのムーブ命令ＭＯＶａ、ＭＯＶｂを１つの命令（基準命令と付随情報）として受信し、受信した命令を保持部のエントリの１つに格納する。また、コミット制御部３４は、図６に示した比較命令ＣＭＰと条件分岐命令ＢＮＥとを１つの命令（基準命令と付随情報）として受信し、受信した命令をエントリの１つに格納する。このため、複数の命令が１つの命令としてループキャッシュ部２６に格納された場合、コミット制御部３４のキューに保持可能な実質的な命令数を増加することができる。換言すれば、コミット制御部３４のキューの容量を増やして回路規模を増大することなく、コミット制御部３４が保持可能な実質的な命令数を増加することができる。
【０１０９】
ステップＳ３４において、コミット制御部３４は、受信した命令が付随情報を含む場合、共有処理部２４で融合された命令であると判定し、動作をステップＳ３６に移行する。コミット制御部３４は、受信した命令が付随情報を含まない場合、動作をステップＳ３８に移行する。
【０１１０】
ステップＳ３６において、コミット制御部３４は、２つの命令を融合した付随情報を含む命令の実行の完了に基づくコミット処理において、プログラムカウンタ３６の更新量を、共有した命令数に応じて変更し、動作をステップＳ３８に移行する。例えば、１つの命令の完了によりプログラムカウンタ３６が”４”更新される場合、付随情報を含む命令が２つの命令を共有している場合、プログラムカウンタ３６は”８”更新される。付随情報を含む命令が３つの命令を共有した場合、プログラムカウンタ３６は、”１２”更新される。例えば、プログラムカウンタ３６の更新量は、命令識別子に対応させてコミット制御部３４の保持部に保持される。
【０１１１】
ステップＳ３８において、コミット制御部３４は、命令の完了通知を受信した場合、動作をステップＳ４０に移行し、命令の完了通知を受信しない場合、動作を終了する。ステップＳ４０において、コミット制御部３４は、命令の実行の完了に基づいて、命令の実行に使用した資源を回収するコミット処理を実行し、動作をステップＳ４２に移行する。ステップＳ４２において、コミット制御部３４は、プログラムカウンタ３６を更新し、動作を終了する。上述したように、プログラムカウンタ３６の更新量は、命令を融合したか否かにより異なり、また、融合した命令数により異なる。
【０１１２】
以上、図４から図８に示す実施形態においても、図１から図３に示す実施形態と同様に、ループキャッシュ部２６のエントリ数を増加することなく、ループキャッシュ部２６に実質的に格納可能な命令数を増加することができる。したがって、繰り返し実行される可能性が高いループ処理の対象命令の実行のスループットを、複数の対象命令を融合しない場合に比べて向上することができる。共有命令デコード部２２および共有処理部２４の動作を、対象命令の実行のバックグラウンドで実行されるため、演算処理装置１０２の処理性能が低下することを抑止することができる。
【０１１３】
さらに、図４から図８に示す実施形態では、連続する複数の対象命令を１つの対象命令に融合することで、命令の実行に使用する更新バッファ４６、４８のエントリ数を少なくでき、実質的に使用可能な更新バッファ４６のエントリ数を増加することができる。また、複数の対象命令を１つの対象命令に融合することで、コミット制御部３４のキューの容量を増やして回路規模を増大することなく、コミット制御部３４が保持可能な実質的な命令数を増加することができる。
【０１１４】
図９は、別の実施形態の演算処理装置における共有処理部およびループキャッシュ部に格納される情報の一例を示す。図６で説明した要素と同一または同様の要素については、詳細な説明は省略される。図９の動作を実行する共有命令デコード部２２および共有処理部２４を有する演算処理装置は、共有命令デコード部２２および共有処理部２４の機能が異なることを除き、図４に示す演算処理装置１０２と同様の構成と機能とを有する。また、図９の動作を実行する共有命令デコード部２２および共有処理部２４を有する演算処理装置を含む情報処理システムは、図３と同様の構成である。共有処理部２４の構成は、図６に示す共有処理部２４と同じであり、ループキャッシュ部２６の構成および機能は、図６に示すループキャッシュ部２６と同じである。
【０１１５】
図９では、共有命令デコード部２２は、命令デコード部２０から出力されるムーブ命令ＭＯＶａ、シフト命令ＳＦＴおよび加算命令ＡＤＤを、プログラムの記述順に命令保持部２４ａのエントリに格納する。シフト命令ＳＦＴは、レジスタＸ０が保持するデータを１６ビット左にシフトする命令である。加算命令ＡＤＤは、レジスタＸ０が保持するデータと１６ビットの即値＃Ｂとを加算し、加算結果をレジスタＸ０に格納する命令である。
【０１１６】
共有命令デコード部２２は、命令デコード部２０からタグ情報ＬＯＯＰ＿ＴＡＧを受信した場合、タグ情報ＬＯＯＰ＿ＴＡＧとともに受信した命令の次の命令を命令保持部２４ａの１番目のエントリに格納する。そして、共有命令デコード部２２は、次のタグ情報ＬＯＯＰ＿ＴＡＧとともに受信する命令より前に受信する命令を、命令保持部２４ａの２番目のエントリから順に格納する。
【０１１７】
共有命令デコード部２２は、共有命令リストに基づいて、ムーブ命令ＭＯＶａ、シフト命令ＳＦＴおよび加算命令ＡＤＤを融合した場合、使用する資源が重複しないと判断する。そして、共有命令デコード部２２は、融合後に使用する資源が重複しないと判断した命令ＭＯＶａ、ＳＦＴ、ＡＤＤのうち最後の命令ＡＤＤを除く命令ＭＯＶａ、ＳＦＴを格納したエントリの共有フラグＳＦＬＧを”１”に設定する。共有処理部２４の各エントリに格納されるその他の情報は、図６と同様である。
【０１１８】
共有処理部２４は、図６と同様に、タグ情報ＬＯＯＰ＿ＴＡＧを２回受信したことに基づいて、ループ処理の対象命令がエントリに格納されたと判断し、命令保持部２４ａに保持された命令を共有する処理を実行する。以下では、図６で説明した動作と相違する点について説明される。
【０１１９】
共有処理部２４は、２番目のエントリの共有フラグＳＦＬＧが”１”であるため、３番目のエントリが保持する情報を参照する。共有処理部２４は、３番目のエントリの共有フラグＳＦＬＧが”１”であるため、４番目のエントリが保持する情報を参照する。共有処理部２４は、４番目のエントリの共有フラグＳＦＬＧが”０”であるため、２番目のムーブ命令ＭＯＶａ、３番目のシフト命令ＳＦＴおよび４番目の加算命令ＡＤＤを融合した場合に、使用する資源が重複しないと判断する。
【０１２０】
また、共有処理部２４は、ムーブ命令ＭＯＶａ、シフト命令ＳＦＴおよび加算命令ＡＤＤが３２ビットの即値のムーブ命令ＭＯＶと等価であると判定する。そして、共有処理部２４は、図６と同様に、ループキャッシュ部２６において、ムーブ命令ＭＯＶとオペランドＸ０とを２番目のエントリの基準命令の領域に格納し、３２ビットの即値＃ＡＢを２番目のエントリの付随情報の領域に格納する。すなわち、ムーブ命令ＭＯＶａ、シフト命令ＳＦＴおよび加算命令ＡＤＤが１つの命令として融合され、ループキャッシュ部２６のエントリの１つを３つの命令で共有する処理が実行される。
【０１２１】
この実施形態では、３つの命令が１つの命令として融合されるため、共有処理部２４は、７番目の比較命令ＣＭＰと８番目の条件分岐命令ＢＮＥとに対応する情報を、ループキャッシュ部２６の５番目のエントリに格納する。すなわち、図６に比べて、ループキャッシュ部２６の使用効率はさらに向上する。
【０１２２】
ループキャッシュ部２６は、タグ情報ＬＯＯＰ＿ＴＡＧを２回受信したことに基づいて、ループ処理の対象命令がエントリに格納されたと判断し、エントリに保持した命令を繰り返しセレクタ部２８に出力する動作を開始する。ループキャッシュ部２６は、エントリに保持した命令を繰り返しセレクタ部２８に出力する間、ループキャッシュ部２６からの命令を選択する指示をセレクタ部２８に出力する。
【０１２３】
図６と同様に、ループキャッシュ部２６の２番目のエントリに保持された基準命令および付随情報は、３２ビットの即値のムーブ命令ＭＯＶに相当する。ＲＳＥ３２２は、セレクタ部２８およびレジスタリネーミング部３０を介して３２ビットの即値のムーブ命令ＭＯＶに相当する基準命令および付随情報を受信する。ＲＳＥ３２２は、受信した基準命令および付随情報に基づいて、演算器４２に３２ビットの即値のムーブ命令ＭＯＶを実行させるための情報を出力する。これにより、ムーブ命令ＭＯＶａ、シフト命令ＳＦＴおよび加算命令ＡＤＤ（３つの命令）を１つのムーブ命令ＭＯＶとして実行させることができる。以上、図９に示す実施形態においても、図１から図８に示す実施形態と同様の効果を得ることができる。
【０１２４】
以上の詳細な説明により、実施形態の特徴点および利点は明らかになるであろう。これは、特許請求の範囲がその精神および権利範囲を逸脱しない範囲で前述のような実施形態の特徴点および利点にまで及ぶことを意図するものである。また、当該技術分野において通常の知識を有する者であれば、あらゆる改良および変更に容易に想到できるはずである。したがって、発明性を有する実施形態の範囲を前述したものに限定する意図はなく、実施形態に開示された範囲に含まれる適当な改良物および均等物に拠ることも可能である。
【符号の説明】
【０１２５】
１        命令デコード部
２        命令抽出部
３        命令保持部
４        命令処理部
５        ループバッファ部
５ａ      エントリ
６        命令選択部
７        命令実行部
１０      命令フェッチアドレス生成部
１２      分岐予測部
１４      １次命令キャッシュ
１６      ２次キャッシュ
１８      命令バッファ部
２０      命令デコード部
２２      共有命令デコード部
２２ａ    共有命令リスト
２４      共有処理部
２４ａ    命令保持部
２６      ループキャッシュ部
２８      セレクタ部
３０      レジスタリネーミング部
３２１、３２２、３２３、３２４  リザベーションステーション
３４      コミット制御部
３６      プログラムカウンタ
３８      オペランドアドレス生成部
４０      １次データキャッシュ
４２、４４  演算器
４６、４８  更新バッファ
５０、５２  レジスタファイル
１００、１０２  演算処理装置
【図１】
2020077333.tif 000003
【図２】
2020077333.tif 000004
【図３】
2020077333.tif 000005
【図４】
2020077333.tif 000006
【図５】
2020077333.tif 000007
【図６】
2020077333.tif 000008
【図７】
2020077333.tif 000009
【図８】
2020077333.tif 000010
【図９】
2020077333.tif 000011