(57)【特許請求の範囲】
【請求項１】
命令をデコードする命令デコード部と、
デコードされた命令を実行する命令実行部と、
デコードされた命令を登録し、登録された命令を実行可能な命令から順に前記命令実行部に投入する命令保持部とを有し、
前記命令保持部は、
デコードされた命令を保持する複数の第１エントリを含む第１保持部と、
前記複数の第１エントリより少ない数の第２エントリを含み、前記複数の第１エントリに保持された命令のうちの一部の命令を登録する第２保持部と、
前記第２保持部が登録する命令を前記複数の第１エントリが保持する命令から選択し、選択した命令を識別する識別情報を前記第２エントリに格納する第１選択部と、
前記第２保持部が登録した命令のうち、実行可能な命令を順次選択して前記命令実行部に投入するとともに、前記命令実行部に投入した命令と前記第２保持部に登録した命令との依存関係を検出する第２選択部と
を有することを特徴とする演算処理装置。
【請求項２】
請求項１に記載の演算処理装置において、
前記第１選択部は、前記複数の第１エントリが保持した命令のうち、前記第２保持部に登録されていない命令のいずれも実行可能でない場合、前記複数の第１エントリに保持された命令であって前記第２保持部に登録されていない命令のうち、前記命令デコード部により最古にデコードされた命令を前記第２保持部に登録する命令として選択する
ことを特徴とする演算処理装置。
【請求項３】
請求項１または請求項２に記載の演算処理装置において、
前記第２保持部は、複数の前記第２エントリを有することを特徴とする演算処理装置。
【請求項４】
請求項３に記載の演算処理装置において、
前記複数の第１エントリの各々は、命令が前記第２保持部に登録されたことを示す登録情報を保持し、
前記第１選択部は、前記複数の第２エントリに空きがなく、前記第２保持部が登録した命令のいずれも実行可能でなく、且つ、前記第２保持部が登録した命令のいずれかが実行可能な状態に遷移する前に前記複数の第１エントリに保持された命令のいずれかが実行可能な状態に遷移した場合、実行可能な状態に遷移した命令を示す識別情報を前記複数の第２エントリのいずれかに上書きする
ことを特徴とする演算処理装置。
【請求項５】
請求項３または請求項４に記載の演算処理装置において、
前記命令デコード部がデコードした命令に含まれる第１情報のうち、命令間の依存関係の検出に使用される第２情報を除いた第３情報を前記複数の第１エントリから受け、前記命令実行部に投入される命令の前記第３情報を前記命令実行部に転送する第３選択部をさらに有し、
前記第１選択部は、前記第２保持部に命令を登録する場合、命令に含まれる前記第２情報を前記複数の第２エントリのいずれかに格納し、
前記第２選択部は、前記命令実行部に命令を投入する場合、前記命令実行部に投入する命令として選択した命令の前記第２情報を前記命令実行部に転送する
ことを特徴とする演算処理装置。
【請求項６】
請求項３ないし請求項５のいずれか１項に記載の演算処理装置において、
前記第１保持部はさらに、所定数の前記第１エントリを含む複数の第３保持部を有し、
前記第１選択部は、前記第２保持部に登録する命令を前記複数の第３保持部から選択して、前記複数の第３保持部の各々から前記第２保持部に命令を登録する
ことを特徴とする演算処理装置。
【請求項７】
命令をデコードする命令デコード部と、デコードされた命令を実行する命令実行部と、デコードされた命令を登録し、登録された命令を実行可能な命令から順に前記命令実行部に投入するとともに、デコードされた命令を保持する複数の第１エントリを含む第１保持部を有する命令保持部とを有する演算処理装置の処理方法において、
前記命令保持部が有する第１選択部が、前記複数の第１エントリより少ない数の第２エントリを含み、前記複数の第１エントリに保持された命令のうちの一部の命令を登録する第２保持部が登録する命令を前記複数の第１エントリが保持する命令から選択し、選択した命令を識別する識別情報を前記第２エントリに格納し、
前記命令保持部が有する第２選択部が、前記第２保持部が登録した命令のうち、実行可能な命令を順次選択して前記命令実行部に投入するとともに、前記命令実行部に投入した命令と前記第２保持部に登録した命令との依存関係を検出する
ことを特徴とする演算処理装置の処理方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、演算処理装置および演算処理装置の処理方法に関する。
【背景技術】
【０００２】
複数の命令を複数のステージに分けてそれぞれ実行するパイプラインを有するプロセッサ等の演算処理装置は、例えば、命令をデコードする命令デコーダ部と、投入された命令を実行する演算部と、デコードされた命令を演算部に発行するリザベーションステーションとを有する（例えば、特許文献１、２参照）。リザベーションステーションは、デコード部から供給される命令を保持し、保持した命令を実行可能な命令から順に演算部に投入する。演算部に実行させる命令の順序をリザベーションステーションで入れ替えることにより、命令の実行効率は、リザベーションステーションを用いない場合に比べて向上する。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開２０００−１０５６９９号公報
【特許文献２】特開２０１１−８７３２号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
また、第１の命令の実行結果が第１の命令に後続する第２の命令で使用される場合、第１の命令の実行結果をレジスタに格納する前に第２の命令の入力として演算部にバイパスすることで、命令の処理効率は、バイパスしない場合に比べて向上する。
【０００５】
例えば、リザベーションステーションは、第１の命令を演算部に投入した場合、リザベーションステーションに保持した各々の命令と第１の命令との間でレジスタの依存関係があるかを検出し、第１の命令の実行結果を使用する第２の命令を検出する。そして、リザベーションステーションは、第２の命令を検出した場合、第２の命令を検出したサイクルの次のサイクルで、第２の命令を演算部に投入する。
【０００６】
なお、リザベーションステーションに保持された各々の命令に対して第１の命令との依存関係を検出する場合、リザベーションステーションに保持される命令の数の増加とともに、第１の命令と他の命令との間の依存関係の検出にかかる時間は増加する。したがって、リザベーションステーションに保持される命令の数が増加した場合、第１の命令が演算部に投入されたサイクル内に命令間の依存関係の検出が終了しない場合がある。この場合、第１の命令が演算部に投入されたサイクルの次のサイクルで第２の命令が演算部に投入されないため、第１の命令が演算部に投入されたサイクルの次のサイクルで第２の命令が演算部に投入される場合に比べて、命令の処理効率は低下する。
【０００７】
１つの側面では、本件開示の演算処理装置および演算処理装置の処理方法は、リザベーションステーションに保持される命令の数が増加した場合でも、命令の処理効率が低下することを抑制することを目的とする。
【課題を解決するための手段】
【０００８】
一観点によれば、演算処理装置は、命令をデコードする命令デコード部と、デコードされた命令を実行する命令実行部と、デコードされた命令を登録し、登録された命令を実行可能な命令から順に命令実行部に投入する命令保持部とを有し、命令保持部は、デコードされた命令を保持する複数の第１エントリを含む第１保持部と、複数の第１エントリより少ない数の第２エントリを含み、複数の第１エントリに保持された命令のうちの一部の命令を登録する第２保持部と、第２保持部が登録する命令を複数の第１エントリが保持する命令から選択し、選択した命令を識別する識別情報を第２エントリに格納する第１選択部と、第２保持部が登録した命令のうち、実行可能な命令を順次選択して命令実行部に投入するとともに、命令実行部に投入した命令と第２保持部に登録した命令との依存関係を検出する第２選択部とを有する。
【０００９】
別の観点によれば、命令をデコードする命令デコード部と、デコードされた命令を実行する命令実行部と、デコードされた命令を登録し、登録された命令を実行可能な命令から順に命令実行部に投入するとともに、デコードされた命令を保持する複数の第１エントリを含む第１保持部を有する命令保持部とを有する演算処理装置の処理方法では、命令保持部が有する第１選択部が、複数の第１エントリより少ない数の第２エントリを含み、前記複数の第１エントリに保持された命令のうちの一部の命令を登録する第２保持部が登録する命令を複数の第１エントリが保持する命令から選択し、選択した命令を識別する識別情報を第２エントリに格納し、命令保持部が有する第２選択部が、第２保持部が登録した命令のうち、実行可能な命令を順次選択して命令実行部に投入するとともに、命令実行部に投入した命令と第２保持部に登録した命令との依存関係を検出する。
【発明の効果】
【００１０】
本件開示の演算処理装置および演算処理装置の処理方法は、リザベーションステーションに保持される命令の数が増加した場合でも、命令の処理効率が低下することを抑制できる。
【図面の簡単な説明】
【００１１】
【図１】演算処理装置および演算処理装置の処理方法の一実施形態を示す図である。
【図２】演算処理装置および演算処理装置の処理方法の別の実施形態を示す図である。
【図３】図２に示したリザベーションステーションの一例を示す図である。
【図４】図３に示した各エントリの状態の一例を示す図である。
【図５】図３に示した各エントリの状態の別の例を示す図である。
【図６】図３に示した各エントリの状態の別の例を示す図である。
【図７】図３に示した選択部の動作の一例を示す図である。
【図８】図２に示した演算処理装置のパイプライン処理の一例を示す図である。
【図９】図２に示した演算処理装置のパイプライン処理の別の例を示す図である。
【発明を実施するための形態】
【００１２】
以下、実施形態について、図面を用いて説明する。
【００１３】
図１は、演算処理装置および演算処理装置の処理方法の一実施形態を示す。図１に示す演算処理装置１０は、例えばＣＰＵ（Central Processing Unit）やＤＳＰ（Digital Signal Processor）等のプロセッサである。演算処理装置１０は、命令ＩＮＳ（ＩＮＳｉ）をデコードする命令デコード部２０と、命令デコード部２０でデコードされた命令ＩＮＳ（ＩＮＳｄ）が登録される命令保持部３０と、デコードされた命令ＩＮＳ（ＩＮＳｅ）を実行する命令実行部８０とを有する。
【００１４】
命令デコード部２０は、例えば、図示しない命令キャッシュから命令ＩＮＳｉを読み出し、読み出した命令ＩＮＳｉをデコードする。そして、命令デコード部２０は、デコードした命令ＩＮＳｄを命令保持部３０に出力する。
【００１５】
命令保持部３０は、命令デコード部２０から供給される命令ＩＮＳｄを保持し、保持した命令ＩＮＳｄを実行可能な命令ＩＮＳｅから順に命令実行部８０に投入するリザベーションステーションの機能を有する。例えば、命令保持部３０は、命令デコード部２０でデコードされた命令ＩＮＳｄを保持する複数のエントリ４２を有する第１保持部４０と、複数のエントリ４２より少ない数の複数のエントリ６２を有する第２保持部６０とを有する。さらに、命令保持部３０は、第１選択部５０と第２選択部７０とを有する。
【００１６】
第１保持部４０は、命令デコード部２０から順次受ける命令ＩＮＳｄを複数のエントリ４２のうちのいずれか（空きエントリ）に保持する。これにより、命令デコード部２０でデコードされた命令ＩＮＳｄは、命令保持部３０に登録される。また、各エントリ４２は、命令デコード部２０からの命令ＩＮＳｄの発行の順番を示した優先度情報等を保持する。なお、命令実行部８０に実行させる命令ＩＮＳｅの順序を入れ替える際の効率は、命令保持部３０に登録される命令ＩＮＳｄの数（すなわち、エントリ４２の数）の増加に伴い向上する。
【００１７】
第１選択部５０は、第２保持部６０に登録する命令ＩＮＳ（ＩＮＳｒ）を複数のエントリ４２に保持された命令ＩＮＳｄから選択する。例えば、第１選択部５０は、複数のエントリ４２に保持された命令ＩＮＳｄのうち、命令デコード部２０で最古にデコードされた命令ＩＮＳｒを、各エントリ４２に保持された優先度情報等に基づいて選択する。そして、第１選択部５０は、選択した命令ＩＮＳｒを示す識別情報を、第２保持部６０内の複数のエントリ６２のいずれかに格納する。これにより、複数のエントリ４２に保持された命令ＩＮＳｄのうちの一部の命令ＩＮＳｒは、第２保持部６０に登録される。
【００１８】
なお、例えば、第２保持部６０に登録された命令ＩＮＳｒに対応する命令ＩＮＳｄは、命令ＩＮＳｄに対応する命令ＩＮＳｅが命令実行部８０で実行されるまでエントリ４２に保持される。すなわち、第１選択部５０は、命令ＩＮＳｒに関する識別情報をエントリ４２からエントリ６２にコピーする。
【００１９】
第２保持部６０は、複数のエントリ４２より少ない数の複数のエントリ６２を有する。エントリ６２に保持された識別情報は、命令間の依存関係を検出する際に使用される。したがって、エントリ４２からエントリ６２に格納される識別情報は、命令ＩＮＳｒに含まれる全ての情報でもよいし、命令ＩＮＳｒのオペランド等を含む一部の情報でもよい。また、各エントリ６２は、命令ＩＮＳｒが実行可能な状態かを示すレディ情報等を保持する。
【００２０】
第２選択部７０は、第２保持部６０に登録された命令ＩＮＳｒのうち、実行可能な命令ＩＮＳｅを順次選択し、選択した命令ＩＮＳｅを命令実行部８０に投入する。さらに、第２選択部７０は、命令実行部８０に投入した命令ＩＮＳｅ（以下、第１の命令ＩＮＳｅとも称する）と第２保持部６０に登録された命令ＩＮＳｒとの依存関係を検出する。例えば、第２選択部７０は、第２保持部６０に登録された各々の命令ＩＮＳｒと命令実行部８０に投入した命令ＩＮＳｅとの間でレジスタの依存関係があるかを検出する。
【００２１】
第２保持部６０内のエントリ６２の数は第１保持部４０内のエントリ４２の数より少ない。このため、第２保持部６０に登録された命令ＩＮＳｒを対象とした命令間の依存関係の検出にかかる時間は、第１保持部４０に登録された命令ＩＮＳｄを対象とした場合に比べて減少する。これにより、命令実行部８０の出力データ（第１の命令ＩＮＳｅの実行結果）を後続する命令ＩＮＳの入力データとして図示しないレジスタ等に格納する前に命令実行部８０にバイパスするバイパス処理の実行効率を向上することができる。この結果、命令ＩＮＳの処理効率を向上することができる。
【００２２】
換言すれば、第１保持部４０に登録された命令ＩＮＳｄ間の依存関係を検出する手法では、バイパス処理の実行効率が低下し、命令ＩＮＳの処理効率が低下する場合がある。例えば、第１選択部５０および第２保持部６０が省かれた構成では、依存関係を検出する際に着目する命令ＩＮＳは、第２保持部６０よりエントリ数の多い第１保持部４０に登録された命令ＩＮＳｄである。このため、第１選択部５０および第２保持部６０が省かれた構成では、第１の命令ＩＮＳが命令実行部８０に投入されたサイクル内に命令間の依存関係の検出が終了しない場合がある。この場合、第１の命令ＩＮＳが命令実行部８０に投入されたサイクルの次のサイクルでは、第１の命令ＩＮＳの実行結果が第１の命令ＩＮＳに後続する第２の命令ＩＮＳで使用される場合でも、第２の命令ＩＮＳは、命令実行部８０に投入されない。
【００２３】
これに対し、命令保持部３０では、依存関係を検出する際に着目する命令ＩＮＳは、第１保持部４０よりエントリ数の少ない第２保持部６０に登録された命令ＩＮＳｒである。したがって、命令間の依存関係の検出にかかる時間が１サイクル以下になるように、第２保持部６０内のエントリ６２の数を設定することにより、第１の命令ＩＮＳｅが命令実行部８０に投入されたサイクル内に命令間の依存関係の検出を終了させることができる。これにより、演算処理装置１０は、命令保持部３０に登録される命令ＩＮＳｄの数が増加した場合でも、第１選択部５０および第２保持部６０が省かれた構成に比べて、命令ＩＮＳの処理効率を向上できる。
【００２４】
このように、命令保持部３０は、命令デコード部２０から順次受ける命令ＩＮＳｄを保持する。これにより、命令デコード部２０でデコードされた命令ＩＮＳｄは、命令保持部３０に登録される。そして、命令保持部３０は、登録された命令ＩＮＳｄを実行可能な命令ＩＮＳｅから順に命令実行部８０に投入する。例えば、命令保持部３０は、実行可能な命令ＩＮＳｅを順次選択し、選択した命令ＩＮＳｅを命令実行部８０に出力する。
【００２５】
命令実行部８０は、実行可能な命令ＩＮＳｅを命令保持部３０から受け、受けた命令ＩＮＳｅを実行する。
【００２６】
なお、演算処理装置１０の構成は、図１に示す例に限定されない。例えば、第２保持部６０は、命令保持部３０の外部に配置されてもよい。また、命令ＩＮＳｅが命令実行部８０に投入されたサイクル内に、第１保持部４０からの識別情報のコピーおよび命令間の依存関係の検出を終了させることができる場合、第２保持部６０内のエントリ６２の数は１つでもよい。
【００２７】
以上、図１に示す実施形態では、命令保持部３０（リザベーションステーション）に保持される命令ＩＮＳの数が増加した場合でも、命令ＩＮＳの処理効率が低下することを抑制できる。
【００２８】
図２は、演算処理装置および演算処理装置の処理方法の別の実施形態を示す。図１で説明した要素と同一または同様の要素については、同一または同様の符号を付し、これ等については、詳細な説明を省略する。なお、図２では、図を見やすくするために、命令制御部４００と実行部７００との間に配置されるラッチ（例えば、図３に示すラッチ部２１０内のラッチ２１１Ａ等）の記載を省略している。
【００２９】
図２に示す演算処理装置１００は、例えば、命令ＩＮＳを複数のステージに分けて実行するパイプラインを有するＣＰＵ等のプロセッサである。
【００３０】
演算処理装置１００は、ＣＰＵコア等のコア部２００を有し、コア部２００は、記憶部３００、命令制御部４００および実行部７００を有する。
【００３１】
記憶部３００は、命令キャッシュ３２０およびデータキャッシュ３１０を有する。命令キャッシュ３２０は、実行部７００が実行する命令ＩＮＳを記憶する。データキャッシュ３１０は、実行部７００で扱うデータを記憶する。例えば、命令キャッシュ３２０およびデータキャッシュ３１０は、キャッシュメモリである。
【００３２】
命令制御部４００は、命令バッファ４１０、命令デコード部４２０、レジスタ管理部４３０、バイパス制御テーブル４４０およびリザベーションステーション５００、６００を有する。また、実行部７００は、演算部７１０、７２０、アドレス生成部７３０、アップデートバッファ７４０およびレジスタ７５０を有する。
【００３３】
命令バッファ４１０は、命令キャッシュ３２０から読み出される命令ＩＮＳｉを保持する複数の領域を有する。例えば、命令バッファ４１０は、命令キャッシュ３２０から順次受ける命令ＩＮＳｉを保持し、保持した命令ＩＮＳｉを命令デコード部４２０に順次転送する。
【００３４】
命令デコード部４２０は、命令キャッシュ３２０から命令バッファ４１０を介して受けた命令ＩＮＳｉをインオーダでデコードする。そして、命令デコード部４２０は、デコードした命令ＩＮＳｄをリザベーションステーション５００またはリザベーションステーション６００にデコード結果に基づいて出力する。
【００３５】
例えば、命令デコード部４２０は、デコードした命令ＩＮＳｄがロード命令やストア命令などのアクセスアドレスの計算を伴うメモリアクセス命令である場合に、命令ＩＮＳｄをリザベーションステーション６００に出力する。また、命令デコード部４２０は、デコードした命令ＩＮＳｄが演算命令（例えば、固定小数点演算命令）である場合に、命令ＩＮＳｄをリザベーションステーション５００に出力する。
【００３６】
ここで、例えば、デコードされた命令ＩＮＳｄは、命令ＩＮＳｄの実行結果が格納されるアップデートバッファ７４０のアドレス、命令ＩＮＳｄで扱うデータが格納されるレジスタ７５０のアドレス、即値、命令ＩＮＳｄを識別するオペコード等を示す情報を有する。
【００３７】
例えば、命令デコード部４２０は、命令ＩＮＳｄをデコードし、命令ＩＮＳｄの実行結果の書き込み先のレジスタ７５０のアドレスに対してアップデートバッファ７４０のアドレスを割り当てる。そして、命令デコード部４２０は、命令ＩＮＳｄの書き込み先として割り当てたアップデートバッファ７４０のアドレス等を示す情報ＡＩＮＦをレジスタ管理部４３０に出力する。以下、アップデートバッファ７４０のアドレスは、ＵＢＡ（Update Buffer Address）とも称される。
【００３８】
なお、情報ＡＩＮＦは、例えば、命令ＩＮＳｄの実行結果の書き込み先として割り当てられたＵＢＡの他に、命令ＩＮＳｄの入力データが格納されるレジスタ７５０のアドレス、命令ＩＮＳｄの実行結果が書き込まれるレジスタ７５０のアドレス等を含む。以下、命令ＩＮＳｄの入力データが格納されるレジスタ７５０のアドレスは、参照先のレジスタ７５０のアドレスとも称され、命令ＩＮＳｄの実行結果が書き込まれるレジスタ７５０のアドレスは、書き込み先のレジスタ７５０のアドレスとも称される。
【００３９】
レジスタ管理部４３０は、アップデートバッファ７４０のアドレスとレジスタ７５０のアドレスとの対応を示すレジスタテーブル４３２を有する。例えば、レジスタ管理部４３０は、命令デコード部４２０から各リザベーションステーション５００、６００に命令ＩＮＳｄが発行される際に、情報ＡＩＮＦを命令デコード部４２０から受ける。そして、レジスタ管理部４３０は、命令デコード部４２０により割り当てられたＵＢＡ（情報ＡＩＮＦに含まれるＵＢＡ）を、書き込み先のレジスタ７５０のアドレスに対応するレジスタテーブル４３２のエントリに登録する。また、レジスタ管理部４３０は、参照先のレジスタ７５０のアドレスに対応するＵＢＡがレジスタテーブル４３２に登録されている場合、参照先のレジスタ７５０のアドレスに対応するＵＢＡをリザベーションステーション５００、６００に出力する。
【００４０】
バイパス制御テーブル４４０は、演算部７１０等の命令実行部の出力データをレジスタ７５０に格納する前に後続する命令ＩＮＳｅの入力データとして演算部７１０等の命令実行部にバイパスするバイパス処理を実現するためのテーブルである。例えば、バイパス制御テーブル４４０は、アップデートバッファ７４０に対応したエントリを有する。バイパス制御テーブル４４０内の各エントリは、バイパス可能となるタイミングで、バイパス可能であることを示す情報（例えば、”１”）に設定される。
【００４１】
例えば、バイパス制御テーブル４４０内の各エントリは、アップデートバッファ７４０を使用する命令ＩＮＳｅがリザベーションステーション５００、６００から実行部７００に投入可能となるタイミングで”1”に設定される。バイパス処理が実行された場合、バイパス処理が実行されない場合に比べて、演算処理装置１００の処理性能を向上させることができる。また、バイパス制御テーブル４４０は、データキャッシュ３１０がキャッシュヒットしたかキャッシュミスしたかを示す情報をデータキャッシュ３１０から受ける。
【００４２】
リザベーションステーション５００、６００は、命令デコード部４２０でデコードされた命令ＩＮＳｄが登録され、登録された命令ＩＮＳｄを実行可能な命令ＩＮＳｅから順に命令実行部（例えば、演算部７１０、７２０等）に投入する命令保持部の一例である。リザベーションステーション５００は、固定小数点演算命令用のリザベーションステーション（ＲＳＥ：Reservation  Station  for  Execution）である。また、リザベーションステーション６００は、メモリアクセス命令用のリザベーションステーション（ＲＳＡ：Reservation  Station  for  Address）である。
【００４３】
例えば、リザベーションステーション５００は、命令デコード部４２０から供給される命令ＩＮＳｄを保持し、保持した命令ＩＮＳｄを実行可能な命令ＩＮＳｅから順に実行部７００（より詳細には、演算部７１０、７２０）に投入する。また、リザベーションステーション６００は、命令デコード部４２０から供給される命令ＩＮＳｄを保持し、保持した命令ＩＮＳｄを実行可能な命令ＩＮＳｅから順に実行部７００（より詳細には、アドレス生成部７３０）に投入する。
【００４４】
リザベーションステーション５００、６００から実行部７００への命令ＩＮＳｅの投入の判断は、各リザベーションステーション５００、６００で実行される。例えば、リザベーションステーション５００、６００は、命令デコード部４２０からの命令ＩＮＳｄの発行時に参照したＵＢＡに対応するバイパス制御テーブル４４０のエントリを参照し、実行部７００に投入可能な命令ＩＮＳｅを検出する。
【００４５】
リザベーションステーション５００、６００の処理により、命令デコード部４２０でデコードされた命令ＩＮＳｄは、プログラム順に拘わらず実行可能な命令ＩＮＳｅからアウトオブオーダで実行される。リザベーションステーション５００の詳細は、図３以降で説明する。
【００４６】
演算部７１０、７２０およびアドレス生成部７３０は、デコードされた命令ＩＮＳを実行する命令実行部の一例である。演算部７１０、７２０は、固定小数点の演算部である。例えば、演算部７１０、７２０は、リザベーションステーション５００から投入される命令ＩＮＳｅに基づく演算（例えば、固定小数点の演算）を、アップデートバッファ７４０、レジスタ７５０等を参照して実行する。また、アドレス生成部７３０は、リザベーションステーション６００から投入される命令ＩＮＳｅに基づく演算（例えば、アドレス計算）を、アップデートバッファ７４０、レジスタ７５０等を参照して実行する。
【００４７】
例えば、レジスタテーブル４３２にＵＢＡが登録されている命令ＩＮＳｅは、アップデートバッファ７４０を参照して実行され、レジスタテーブル４３２にＵＢＡが登録されていない命令ＩＮＳｅは、レジスタ７５０を参照して実行される。
【００４８】
命令ＩＮＳｅの実行結果（例えば、演算命令では、固定小数点の演算結果、メモリアクセス命令では、データキャッシュから読み出されるデータ）は、アップデートバッファ７４０に書き込まれる。なお、命令ＩＮＳｅはアウトオブオーダで実行されるため、演算部７１０等による演算の終了時は、命令ＩＮＳｅの完了時とは限らない。命令ＩＮＳｅの完了は、例えば、図示しないコミットスタックエントリ（ＣＳＥ：Commit Stack Entry）等により実行部７００に通知される。
【００４９】
命令ＩＮＳｅの実行結果は、命令ＩＮＳｅの完了時に、アップデートバッファ７４０からレジスタ７５０に書き込まれる。このため、レジスタテーブル４３２に登録されたＵＢＡは、対応する命令ＩＮＳｅが完了したときに無効にされる。また、リザベーションステーション５００、６００に保持されたＵＢＡ（例えば、レジスタ管理部４３０からリザベーションステーション５００、６００に読み出されたＵＢＡ）のうち、完了した命令ＩＮＳｅに対応するＵＢＡは、破棄される。
【００５０】
なお、演算処理装置１００の構成は、図２に示す例に限定されない。例えば、実行部７００は、演算部７１０、７２０以外に、浮動小数点の演算部を有してもよい。この場合、実行部７００は、浮動小数点の演算部用のリザベーションステーションを有してもよい。
【００５１】
図３は、図２に示したリザベーションステーション５００の一例を示す。なお、図３は、図２に示した命令デコード部４２０が最大で４つの命令ＩＮＳを並列にインオーダでデコードした場合でも対応可能なリザベーションステーション５００を示す。命令デコード部４２０で並列にインオーダでデコードされる命令ＩＮＳの数は、４つに限定されない。また、図３に示すリザベーションステーション５００では、図を見やすくするために、レジスタ管理部４３０から受ける信号、バイパス制御テーブル４４０との間で送受信する信号等に関する記載を省略している。
【００５２】
図３の命令ＩＮＳｄの末尾の括弧内に示した情報ＩＮＦｉは、命令ＩＮＳｄに含まれる情報を示す。例えば、情報ＩＮＦｉは、命令ＩＮＳｄで扱うデータが格納されるアップデートバッファ７４０のアドレス（ＵＢＡ）、命令ＩＮＳｄで扱うデータが格納されるレジスタ７５０のアドレス、即値、オペコード等を含む。また、図３の命令ＩＮＳｒの末尾の括弧内に示した情報ＩＮＦｕは、情報ＩＮＦｉのうちの一部の情報を示す。例えば、情報ＩＮＦｕは、命令間の依存関係の検出に使用される情報（例えば、ＵＢＡ）である。情報ＩＮＦｏは、情報ＩＮＦｉのうちの情報ＩＮＦｕを除いた情報である。例えば、情報ＩＮＦｏは、リザベーションステーション５００では使用されないが、実行部７００で使用される情報である。情報ＰＩＤは、エントリ５２４（５２４Ａ、５２４Ｂ）を識別する識別情報である。
【００５３】
なお、図３では、情報ＰＩＤの流れを分かりやすくするために、リザベーションステーション５００と図２に示した演算部７１０、７２０との間に配置されるラッチ部２１０も記載している。例えば、ラッチ部２１０は、ラッチ２１１（２１１Ａ、２１１Ｂ）、２１２（２１２Ａ、２１２Ｂ）、２１３（２１３Ａ、２１３Ｂ）、２１４（２１４Ａ、２１４Ｂ）を有する。
【００５４】
リザベーションステーション５００は、保持部５２０、５４０と、選択部５１０（５１０Ａ、５１０Ｂ）、５３０、５５０、５６０とを有する。保持部５２０は、所定数のエントリ５２４（５２４Ａ、５２４Ｂ）を含む複数の第３保持部５２２（５２２Ａ、５２２Ｂ）を有する第１保持部の一例である。以下、第３保持部５２２（５２２Ａ、５２２Ｂ）は、保持部５２２（５２２Ａ、５２２Ｂ）とも称される。
【００５５】
選択部５１０Ａは、図２に示した命令デコード部４２０でデコードされた命令ＩＮＳｄを受ける。図３に示す例では、選択部５１０Ａは、最大で４個の命令ＩＮＳｄを互いに同じサイクルに受ける。そして、選択部５１０Ａは、命令デコード部４２０から受けた命令ＩＮＳｄを、保持部５２２Ａ内の複数のエントリ５２４Ａのうちの空きエントリ５２４Ａに登録する。これにより、命令ＩＮＳｄに含まれる情報ＩＮＦｉは、保持部５２２Ａ内の複数のエントリ５２４Ａのいずれかに保持される。
【００５６】
選択部５１０Ｂは、選択部５１０Ａと同一または同様である。例えば、選択部５１０Ｂは、命令デコード部４２０から受けた命令ＩＮＳｄを、保持部５２２Ｂ内の複数のエントリ５２４Ｂのうちの空きエントリ５２４Ａに登録する。なお、命令ＩＮＳｄを保持部５２２Ａと保持部５２２Ｂとのどちらに登録するかは、命令デコード部４２０から指示される。
【００５７】
保持部５２０は、保持部５２２Ａ、５２２Ｂを有する。保持部５２２Ａは、命令デコード部４２０でデコードされた命令ＩＮＳｄを保持する複数のエントリ５２４Ａを有する。例えば、選択部５１０Ａにより選択されたエントリ５２４Ａは、命令デコード部４２０から選択部５１０Ａを介して受けた命令ＩＮＳｄを保持する。これにより、命令デコード部４２０でデコードされた命令ＩＮＳｄは、保持部５２２Ａに登録される。
【００５８】
また、各エントリ５２４Ａは、有効フラグ、レディフラグ、コピーフラグ、オールダーフラグ等の複数のフラグを保持する。有効フラグは、エントリ５２４Ａが有効であることを示す。レディフラグは、命令ＩＮＳｄが実行可能な状態であることを示す。コピーフラグは、登録情報の一例であり、自身のエントリ５２４Ａに登録された命令ＩＮＳｄが保持部５４０に登録されたことを示す。オールダーフラグは、自身のエントリ５２４Ａに登録された命令ＩＮＳｄの命令デコード部２０でのデコードの順番が他のエントリ５２４Ａに登録された命令ＩＮＳｄより古いか否かを示す。例えば、１つのエントリ５２４Ａが保持するオールダーフラグのビット数は、他のエントリ５２４Ａの数に対応する。
【００５９】
保持部５２２Ｂは、保持部５２２Ａと同一または同様である。例えば、選択部５１０Ｂにより選択されたエントリ５２４Ｂは、命令デコード部４２０から選択部５１０Ｂを介して受けた命令ＩＮＳｄを保持する。これにより、命令デコード部４２０でデコードされた命令ＩＮＳｄは、保持部５２２Ｂに登録される。また、各エントリ５２４Ｂは、有効フラグ、レディフラグ、コピーフラグ、オールダーフラグ等の複数のフラグを保持する。
【００６０】
図３に示す例では、保持部５２２Ａ内の複数のエントリ５２４Ａと保持部５２２Ｂ内の複数のエントリ５２４Ｂとが分かれているため、エントリ５２４Ａとエントリ５２４Ｂとを一緒にした構成に比べて、オールダーフラグのビット数を低減することができる。このため、命令デコード部４２０で最古にデコードされた命令ＩＮＳｒを各エントリ５２４Ａ、５２４Ｂに保持されたオールダーフラグ等に基づいて選択する選択部５３０の回路規模の増加を抑制することができる。
【００６１】
選択部５３０は、保持部５４０に登録する命令ＩＮＳｒの選択を複数の保持部５２２（５２２Ａ、５２２Ｂ）で並列に実行して、複数の保持部５２２の各々から保持部５４０に命令ＩＮＳｒを登録する第１選択部の一例である。例えば、選択部５３０は、互いに並列に動作する選択部５３２Ａおよび選択部５３２Ｂを有する。
【００６２】
選択部５３２Ａは、保持部５４０に登録する命令ＩＮＳｒを保持部５２２Ａ内の複数のエントリ５２４Ａに保持された命令ＩＮＳｄから選択する。例えば、選択部５３２Ａは、複数のエントリ５２４Ａに保持された命令ＩＮＳｄのうち、命令デコード部４２０で最古にデコードされた命令ＩＮＳｒを、各エントリ５２４Ａに保持されたオールダーフラグ等に基づいて選択する。そして、選択部５３２Ａは、選択した命令ＩＮＳｒが登録されたエントリ５２４Ａの識別情報ＰＩＤと選択した命令ＩＮＳｒに含まれる一部の情報ＩＮＦｕとを、保持部５４０内の複数のエントリ５４２のいずれかに格納する。
【００６３】
また、選択部５３２Ａは、図２に示したバイパス制御テーブル４４０を参照し、実行可能な命令ＩＮＳｄ（実行部７００に投入可能な命令ＩＮＳｄ）がエントリ５２４Ａに登録されているかを各サイクルで判定する。そして、選択部５３２Ａは、エントリ５２４Ａに登録された命令ＩＮＳｄが実行可能な状態に遷移した場合、実行可能な状態に遷移した命令ＩＮＳｄが登録されたエントリ５２４Ａのレディフラグを実行可能であることを示す情報（例えば、”１”）に設定する。
【００６４】
選択部５３２Ｂは、選択部５３２Ａと同一または同様である。例えば、選択部５３２Ｂは、複数のエントリ５２４Ｂに保持された命令ＩＮＳｄのうち、命令デコード部４２０で最古にデコードされた命令ＩＮＳｒを、各エントリ５２４Ｂに保持されたオールダーフラグ等に基づいて選択する。そして、選択部５３２Ｂは、選択した命令ＩＮＳｒが登録されたエントリ５２４Ｂの識別情報ＰＩＤと選択した命令ＩＮＳｒに含まれる一部の情報ＩＮＦｕとを、保持部５４０内の複数のエントリ５４２のいずれかに格納する。なお、選択部５３０から出力される識別情報ＰＩＤは、選択部５３０（選択部５３２Ａ、５３２Ｂ）で選択した命令ＩＮＳｒを示す情報に対応する。
【００６５】
また、選択部５３２Ｂは、バイパス制御テーブル４４０を参照し、実行可能な命令ＩＮＳｄ（実行部７００に投入可能な命令ＩＮＳｄ）がエントリ５２４Ｂに登録されているかを各サイクルで判定する。そして、選択部５３２Ｂは、エントリ５２４Ｂに登録された命令ＩＮＳｄが実行可能な状態に遷移した場合、実行可能な状態に遷移した命令ＩＮＳｄが登録されたエントリ５２４Ｂのレディフラグを実行可能であることを示す情報（例えば、”１”）に設定する。
【００６６】
このように、選択部５３０は、複数のエントリ５２４に保持された命令ＩＮＳｄのうちの一部の命令ＩＮＳｒを、保持部５４０に登録する。
【００６７】
保持部５４０は、複数のエントリ５２４Ａの数より少なく、かつ、複数のエントリ５２４Ｂの数より少ない数の複数のエントリ５４２を有する。例えば、各エントリ５４２は、選択部５３０で選択された命令ＩＮＳｒに関する情報ＩＮＦｕ、ＰＩＤを保持する。また、各エントリ５４２は、有効フラグ、レディフラグ等の複数のフラグを保持する。
【００６８】
保持部５４０内の複数のエントリ５４２のそれぞれには、保持部５２４Ａ、５２４Ｂからの命令ＩＮＳｒの登録の順番を示す優先順位（例えば、命令ＩＮＳｒのエントリ５４２への登録の順番が古いほど高くなる優先順位）が割り当てられる。例えば、エントリ５４２を識別する識別番号は、優先順位を示す情報として使用されてもよい。
【００６９】
保持部５４０内の複数のエントリ５４２に登録された命令ＩＮＳｒは、選択部５５０により、実行可能な命令ＩＮＳｒのうちの優先順位の高い命令ＩＮＳｅから順に演算部７１０、７２０に投入される。なお、各エントリ５４２に登録された命令ＩＮＳｒは、各エントリ５４２が保持する識別情報ＰＩＤで示されるエントリ５２４に登録された命令ＩＮＳである。
【００７０】
また、各エントリ５４２に登録された命令ＩＮＳｒは、自身のエントリ５４２の優先順位より高い優先順位のエントリ５４２に空きがある場合、自身のエントリ５４２の優先順位より高い優先順位のエントリ５４２に移動する。以下、各エントリ５４２に保持された情報が自身のエントリ５４２の優先順位より高い優先順位のエントリ５４２に移動することは、バブルアップとも称される。図３に示す例では、１サイクルに保持部５２０から保持部５４０に投入される命令ＩＮＳｒの最大数が２つであるため、１サイクルでのバブルアップによる移動量（エントリ数）の最大は、２である。
【００７１】
選択部５５０は、保持部５４０に登録された命令ＩＮＳｒのうちの実行可能な命令ＩＮＳｒを優先順位の高い命令ＩＮＳｅから順に選択する。そして、選択部５５０は、選択した命令ＩＮＳｅを示す識別情報ＰＩＤ（命令ＩＮＳｅに対応する命令ＩＮＳｄが登録されたエントリ５２４の識別情報ＰＩＤ）と選択した命令ＩＮＳｅに含まれる一部の情報ＩＮＦｕとをラッチ部２１０に出力する。これにより、命令ＩＮＳｅは、リザベーションステーション５００からラッチ部２１０を介して図２に示した実行部７００に投入される。
【００７２】
例えば、選択部５５０は、１サイクルに２つの命令ＩＮＳｅを選択した場合、２つの命令ＩＮＳｅをラッチ部２１０を介して図２に示した演算部７１０、７２０にそれぞれ投入する。また、選択部５５０は、１サイクルに１つの命令ＩＮＳｅを選択した場合、命令ＩＮＳｅをラッチ部２１０を介して演算部７１０、７２０のいずれかに投入する。このように、選択部５５０は、演算部７１０等の命令実行部に命令ＩＮＳｅを投入する場合、命令実行部に投入する命令ＩＮＳｅとして選択した命令ＩＮＳｅの情報ＩＮＦｕを命令実行部に転送する。
【００７３】
さらに、選択部５５０は、演算部７１０、７２０に投入した命令ＩＮＳｅと保持部５４０に登録された命令ＩＮＳｒとの依存関係を、各エントリ５４２に保持された情報ＩＮＦｕ（例えば、ＵＢＡ）に基づいて検出する。また、選択部５５０は、バイパス制御テーブル４４０を参照し、実行可能な命令ＩＮＳｒ（実行部７００に投入可能な命令ＩＮＳｒ）がエントリ５４２に登録されているかを各サイクルで判定する。
【００７４】
選択部５６０は、デコードされた命令ＩＮＳｄに含まれる情報ＩＮＦｉのうち、命令間の依存関係の検出に使用される情報ＩＮＦｕを除いた情報ＩＮＦｏを複数のエントリ５２４Ａ、５２４Ｂから受ける。また、選択部５６０は、演算部７１０等の命令実行部に投入される命令ＩＮＳｅを示す識別情報ＰＩＤを選択部５５０からラッチ部２１０（より詳細には、ラッチ部２１０内のラッチ２１１、２１２、２１３）を介して受ける。
【００７５】
そして、選択部５６０は、複数のエントリ５２４Ａ、５２４Ｂから受けた情報ＩＮＦｏのうち、演算部７１０等の命令実行部に投入される命令ＩＮＳｅの情報ＩＮＦｏを、選択部５５０からラッチ部２１０を介して受けた情報ＰＩＤに基づいて選択する。例えば、選択部５６０は、複数のエントリ５２４Ａ、５２４Ｂから受けた情報ＩＮＦｏのうち、選択部５５０からラッチ部２１０を介して受けた情報ＰＩＤに対応する命令ＩＮＳｄの情報ＩＮＦｏを命令ＩＮＳｅの情報ＩＮＦｏとして選択する。そして、選択部５６０は、演算部７１０等の命令実行部に投入される命令ＩＮＳｅの情報ＩＮＦｏをラッチ部２１０（より詳細には、ラッチ部２１０内のラッチ２１４）を介して演算部７１０等の命令実行部に転送する。
【００７６】
このように、命令ＩＮＳｅのうちの情報ＩＮＦｕは、リザベーションステーション５００からラッチ２１１、２１２、２１３、２１４を介して演算部７１０等の命令実行部に転送される。そして、命令ＩＮＳｅのうちの他の情報ＩＮＦｏは、リザベーションステーション５００からラッチ２１４を介して演算部７１０等の命令実行部に転送される。このため、情報ＩＮＦｕ、ＩＮＦｏをリザベーションステーション５００からラッチ２１１、２１２、２１３、２１４を介して演算部７１０等の命令実行部に転送する構成に比べて、ラッチ２１１、２１２、２１３のビット数を低減することができる。この結果、ラッチ部２１０の回路規模の増加を抑制することができる。
【００７７】
なお、リザベーションステーション５００から出力された情報ＩＮＦｕ、ＰＩＤがラッチ２１１、２１２、２１３を通過するまでにかかるサイクルは、レジスタ７５０から読み出すデータ等を決定するサイクルに対応する。
【００７８】
ここで、リザベーションステーション５００を２つに分割した場合、分割した２つのリザベーションステーション（例えば、保持部５２２Ａ、５２２Ｂ）それぞれに演算部７１０、７２０を割り当てることが考えられる。この場合、演算部７１０、７２０に投入されるそれぞれの命令ＩＮＳｅの実行にかかるサイクル数の違い等により、演算部７１０、７２０の一方が占有されるおそれがある。この場合、分割した２つのリザベーションステーション（例えば、保持部５２２Ａ、５２２Ｂ）の一方に実行待ちの命令ＩＮＳｄが詰まる等のエントリの偏りが発生するおそれがある。
【００７９】
これに対し、リザベーションステーション５００では、保持部５４０が保持部５２２Ａ、５２２Ｂで共有されるため、１つの保持部５４０から２つの命令ＩＮＳｅを２つの演算部７１０、７２０にそれぞれ投入することができる。これにより、２つの演算部７１０、７２０の一方が占有された場合でも、２つの演算部７１０、７２０の他方に命令ＩＮＳｅを投入することができ、リザベーションステーション５００の詰まり等の発生を抑制することができる。
【００８０】
なお、図２に示したリザベーションステーション６００の構成は、リザベーションステーション６００からアドレス生成部７３０に１サイクルに投入される命令ＩＮＳｅの数を除いて、リザベーションステーション５００と同一または同様である。また、リザベーションステーション５００の構成は、図３に示す例に限定されない。例えば、保持部５４０内の各エントリ５４２は、オールダーフラグを有してもよい。また、保持部５４０内の各エントリ５４２は、命令ＩＮＳｒの情報ＩＮＦｉ（すなわち、情報ＩＮＦｕと情報ＩＮＦｏの両方）を保持してもよい。この場合、選択部５６０は、省かれてもよい。
【００８１】
図４は、図３に示した各エントリ５２４、５４２の状態の一例を示す。なお、図４は、図３に示した保持部５２０から保持部５４０に命令ＩＮＳｒを登録する場合のリザベーションステーション５００の動作に対応する。図４に示す例では、図３に示した保持部５２２Ａは、１６個のエントリ５２４Ａを有し、保持部５２２Ｂは、１６個のエントリ５２４Ｂを有し、保持部５４０は、８個のエントリ５４２を有する。すなわち、保持部５２０は、エントリ５２４Ａとエントリ５２４Ｂとを合わせて、３２個のエントリ５２４を有する。なお、エントリ５２４、エントリ５４２の数は、図４に示す例に限定されない。
【００８２】
各エントリ５２４は、有効フラグＶ、レディフラグＲ、コピーフラグＣ、オールダーフラグ（図示せず）、情報ＩＮＦｉ等を保持し、各エントリ５４２は、有効フラグＶ、レディフラグＲ、エントリ５２４の識別情報ＰＩＤ、情報ＩＮＦｕ等を保持する。有効フラグＶ、レディフラグＲ、コピーフラグＣの初期状態は、例えば、”０”である。
【００８３】
情報ＰＩＤ０−ＰＩＤ１５は、各エントリ５２４Ｂの識別情報ＰＩＤを示し、情報ＰＩＤ１６−ＰＩＤ３１は、各エントリ５２４Ａの識別情報ＰＩＤを示す。また、情報ＩＮＦｏ０−ＩＮＦｏ１０は、リザベーションステーション５００に登録された１１個の命令ＩＮＳｄのそれぞれの情報ＩＮＦｏを示す。情報ＩＮＦｕ０−ＩＮＦｕ１０は、リザベーションステーション５００に登録された１１個の命令ＩＮＳｄのそれぞれの情報ＩＮＦｕを示す。
【００８４】
識別番号ＰＮＯは、エントリ５４２を識別する識別番号を示す。図４に示す例では、エントリ５４２の識別番号ＰＮＯが大きくなるほど、エントリ５２４からエントリ５４２への命令ＩＮＳｒの登録の順番が古くなり優先順位が高くなる。以下、識別番号ＰＮＯが”ｎ（図４では、ｎは０以上７以下の整数）”のエントリ５４２は、識別番号ＰＮＯ”ｎ”のエントリ５４２とも称される。例えば、識別番号ＰＮＯが”０”のエントリ５４２は、識別番号ＰＮＯ”０”のエントリ５４２とも称される。
【００８５】
有効フラグＶは、エントリ５２４、５４２が有効な場合、”１”に設定され、エントリ５２４、５４２が無効な場合、”０”に設定される。例えば、エントリ５２４の有効フラグＶは、命令デコード部４２０がリザベーションステーション５００に命令ＩＮＳｄを発行したときに、対応するエントリ５２４が有効であることを示す”１”に設定される。そして、エントリ５２４の有効フラグＶは、演算が実行されたときに、対応するエントリ５２４が無効であることを示す”０”に設定される。
【００８６】
図４に示す例では、１６個のエントリ５２４Ａのうち、有効フラグＶが”１”である有効なエントリ５２４Ａは、１サイクル目および２サイクル目とも、識別情報ＰＩＤ１６−ＰＩＤ２１で示されるエントリ５２４Ａである。また、１６個のエントリ５２４Ｂのうち、有効フラグＶが”１”である有効なエントリ５２４Ｂは、１サイクル目および２サイクル目とも、識別情報ＰＩＤ０−ＰＩＤ４で示されるエントリ５２４Ｂである。
【００８７】
レディフラグＲは、エントリ５２４、５４２に登録された命令ＩＮＳｄ、ＩＮＳｒが実行可能な場合、”１”に設定され、エントリ５２４、５４２に登録された命令ＩＮＳｄ、ＩＮＳｒが実行可能でない場合、”０”に設定される。例えば、選択部５３０、５５０は、バイパス制御テーブル４４０を参照してレディフラグＲを設定する。
【００８８】
コピーフラグＣは、エントリ５２４に登録された命令ＩＮＳｄがエントリ５４２に登録された場合、”１”に設定される。なお、例えば、図６に示すように、有効なエントリ５４２の内容が上書きされた場合、上書きによりエントリ５４２から削除された命令ＩＮＳｄを保持しているエントリ５２４のコピーフラグＣは、”０”に設定される。
【００８９】
図４では、オールダーフラグの記載を省略しているため、情報ＩＮＦｏ、ＩＮＦｕの末尾の数字が小さいほど命令デコード部４２０でのデコードの順番が古く優先順位が高いものとして、エントリ５２４からエントリ５４２への命令ＩＮＳｒの登録の動作を説明する。
【００９０】
１サイクル目では、有効なエントリ５２４Ａのうち、命令デコード部４２０で最古にデコードされた命令ＩＮＳｄ（優先順位の最も高い命令ＩＮＳｄ）が登録されたエントリ５２４Ａは、識別情報ＰＩＤ１６で示されるエントリ５２４Ａである。また、識別情報ＰＩＤ１６で示されるエントリ５２４Ａ以外の有効なエントリ５２４Ａ（識別情報ＰＩＤ１７−ＰＩＤ２１で示されるエントリ５２４Ａ）のレディフラグＲは、全て”０”である。このため、識別情報ＰＩＤ１６で示されるエントリ５２４Ａに登録された命令ＩＮＳｄは、エントリ５４２に登録される命令ＩＮＳｒとして選択される（図４（ａ））。
【００９１】
また、有効なエントリ５２４Ｂのうち、命令デコード部４２０で最古にデコードされた命令ＩＮＳｄが登録されたエントリ５２４Ｂは、識別情報ＰＩＤ０で示されるエントリ５２４Ｂである。なお、識別情報ＰＩＤ０で示されるエントリ５２４Ｂ以外の有効なエントリ５２４Ｂ（識別情報ＰＩＤ１−ＰＩＤ４で示されるエントリ５２４Ｂ）のうち、識別情報ＰＩＤ２−ＰＩＤ４で示されるエントリ５２４ＢのレディフラグＲは、”１”である。
【００９２】
このため、識別情報ＰＩＤ０で示されるエントリ５２４Ｂに登録された命令ＩＮＳｄは、エントリ５４２に登録される命令ＩＮＳｒとして選択されない。この場合、レディフラグＲが”１”に設定されたエントリ５２４Ｂに登録された命令ＩＮＳｄのうち、命令デコード部４２０で最古にデコードされた命令ＩＮＳｄがエントリ５４２に登録される命令ＩＮＳｒとして選択される。
【００９３】
例えば、識別情報ＰＩＤ２−ＰＩＤ４で示されるエントリ５２４Ｂのうち、命令デコード部４２０で最古にデコードされた命令ＩＮＳｄ（優先順位の最も高い命令ＩＮＳｄ）が登録されたエントリ５２４Ｂは、識別情報ＰＩＤ２で示されるエントリ５２４Ｂである。このため、識別情報ＰＩＤ２で示されるエントリ５２４Ｂに登録された命令ＩＮＳｄは、エントリ５４２に登録される命令ＩＮＳｒとして選択される（図４（ｂ））。
【００９４】
このように、１サイクル目では、保持部５４０に登録する命令ＩＮＳｒのエントリ５２４として、保持部５２２Ａ、５２２Ｂから識別情報ＰＩＤ１６で示されるエントリ５２４Ａおよび識別情報ＰＩＤ２で示されるエントリ５２４Ｂがそれぞれ選択される。これにより、例えば、識別情報ＰＩＤ１６で示されるエントリ５２４Ａに保持された情報ＩＮＦｕ１と識別情報ＰＩＤ１６は、識別番号ＰＮＯ”１”のエントリ５４２にコピーされる。また、識別情報ＰＩＤ２で示されるエントリ５２４Ｂに保持された情報ＩＮＦｕ３と識別情報ＰＩＤ２は、識別番号ＰＮＯ”０”のエントリ５４２にコピーされる。
【００９５】
２サイクル目では、１サイクル目に選択されたエントリ５２４Ａの識別情報ＰＩＤ１６と、識別情報ＰＩＤ１６で示されるエントリ５２４Ａの情報ＩＮＦｕ１は、識別番号ＰＮＯ”１”のエントリ５４２に記録される。識別情報ＰＩＤ１６で示されるエントリ５２４Ａの情報ＩＮＦｕ１等が識別番号ＰＮＯ”１”のエントリ５４２にコピーされたため、識別情報ＰＩＤ１６で示されるエントリ５２４ＡのコピーフラグＣは、”１”に設定される。また、識別番号ＰＮＯ”１”のエントリ５４２の有効フラグＶおよびレディフラグＲは、識別情報ＰＩＤ１６で示されるエントリ５２４Ａの有効フラグＶおよびレディフラグＲと同じ値（”１”および”０”）にそれぞれ設定される。
【００９６】
同様に、１サイクル目に選択されたエントリ５２４Ｂの識別情報ＰＩＤ２と、識別情報ＰＩＤ２で示されるエントリ５２４Ｂの情報ＩＮＦｕ３は、識別番号ＰＮＯ”０”のエントリ５４２に記録される。識別情報ＰＩＤ２で示されるエントリ５２４Ｂの情報ＩＮＦｕ３等が識別番号ＰＮＯ”０”のエントリ５４２にコピーされたため、識別情報ＰＩＤ２で示されるエントリ５２４ＢのコピーフラグＣは、”１”に設定される。また、識別番号ＰＮＯ”０”のエントリ５４２の有効フラグＶおよびレディフラグＲは、識別情報ＰＩＤ２で示されるエントリ５２４Ｂの有効フラグＶおよびレディフラグＲと同じ値（”１”および”１”）にそれぞれ設定される。
【００９７】
また、保持部５４０に登録する命令ＩＮＳｒのエントリ５２４として、保持部５２２Ａ、５２２Ｂから識別情報ＰＩＤ１７で示されるエントリ５２４Ａおよび識別情報ＰＩＤ３で示されるエントリ５２４Ｂがそれぞれ選択される（図４（ｃ）、（ｄ））。なお、コピーフラグＣが”１”に設定されたエントリ５２４（識別情報ＰＩＤ１６で示されるエントリ５２４Ａ、識別情報ＰＩＤ２で示されるエントリ５２４Ｂ）は、選択の対象から外れる。保持部５４０に登録する命令ＩＮＳｒのエントリ５２４を選択する場合のその他の条件は、１サイクル目と同一または同様である。
【００９８】
例えば、識別情報ＰＩＤ１７で示されるエントリ５２４Ａに保持された情報ＩＮＦｕ４と識別情報ＰＩＤ１７は、識別番号ＰＮＯ”１”のエントリ５４２にコピーされる。また、識別情報ＰＩＤ３で示されるエントリ５２４Ｂに保持された情報ＩＮＦｕ７と識別情報ＰＩＤ３は、識別番号ＰＮＯ”０”のエントリ５４２にコピーされる。なお、識別番号ＰＮＯ”０”のエントリ５４２および識別番号ＰＮＯ”１”のエントリ５４２は、バブルアップにより、エントリ５２４から受ける識別情報ＰＩＤ等の情報を保持可能な空きエントリになる。
【００９９】
例えば、識別番号ＰＮＯ”０”のエントリ５４２および識別番号ＰＮＯ”１”のエントリ５４２に保持された識別情報ＰＩＤ等の情報は、識別番号ＰＮＯ”１”のエントリ５４２より優先順位の高いエントリ５４２に移動する（図４（ｅ）、（ｆ））。なお、識別番号ＰＮＯ”０”のエントリ５４２のレディフラグＲが”１”であるため、識別番号ＰＮＯ”０”のエントリ５４２に登録された命令ＩＮＳｒ（識別情報ＰＩＤ２で示される命令ＩＮＳｄ）は、実行部７００に投入する命令ＩＮＳｅとして選択される。このため、識別番号ＰＮＯ”０”のエントリ５４２に保持された識別情報ＰＩＤ２等の情報の移動先のエントリ５４２の有効フラグＶは、”０”にリセットされる。
【０１００】
ここで、各エントリ５４２に保持された識別情報ＰＩＤ（ＰＩＤ２、ＰＩＤ１６）は、図３で説明したように、実行部７００に投入する命令ＩＮＳｅの情報ＩＮＦｏを保持部５２４Ａ、５２４Ｂから選択する場合に使用される。また、各エントリ５４２に保持された識別情報ＰＩＤは、演算部７１０等による演算の完了時にエントリ５２４の有効フラグＶをリセットする場合にも使用される。
【０１０１】
図５は、図３に示した各エントリ５２４、５４２の状態の別の例を示す。なお、図５は、図４に示した２サイクル目の続きを示す。図５に示す２サイクル目の各エントリ５２４、５４２の状態は、図４に示した２サイクル目の各エントリ５２４、５４２の状態である。したがって、図５では、３サイクル目の各エントリ５２４、５４２の状態を説明する。
【０１０２】
３サイクル目では、情報ＰＩＤ１６、ＩＮＦｕ１は、２サイクル目のバブルアップにより、識別番号ＰＮＯ”１”のエントリ５４２から移動し、識別番号ＰＮＯ”３”のエントリ５４２に保持される。情報ＰＩＤ２、ＩＮＦｕ３は、実行部７００に投入されたため、保持部５４０から消去される。
【０１０３】
また、２サイクル目に選択されたエントリ５２４Ａの識別情報ＰＩＤ１７と、識別情報ＰＩＤ１７で示されるエントリ５２４Ａの情報ＩＮＦｕ４は、識別番号ＰＮＯ”１”のエントリ５４２に記録される。同様に、２サイクル目に選択されたエントリ５２４Ｂの識別情報ＰＩＤ３と、識別情報ＰＩＤ３で示されるエントリ５２４Ｂの情報ＩＮＦｕ７は、識別番号ＰＮＯ”０”のエントリ５４２に記録される。
【０１０４】
そして、２サイクル目と同様の選択方法により、保持部５４０に登録する命令ＩＮＳｒのエントリ５２４が選択される。例えば、保持部５４０に登録する命令ＩＮＳｒのエントリ５２４として、保持部５２２Ａ、５２２Ｂから識別情報ＰＩＤ１８で示されるエントリ５２４Ａおよび識別情報ＰＩＤ４で示されるエントリ５２４Ｂがそれぞれ選択される（図４（ａ）、（ｂ））。
【０１０５】
これにより、例えば、識別情報ＰＩＤ１８で示されるエントリ５２４Ａに保持された情報ＩＮＦｕ５と識別情報ＰＩＤ１８は、識別番号ＰＮＯ”１”のエントリ５４２にコピーされる。また、識別情報ＰＩＤ４で示されるエントリ５２４Ｂに保持された情報ＩＮＦｕ８と識別情報ＰＩＤ４は、識別番号ＰＮＯ”０”のエントリ５４２にコピーされる。
【０１０６】
なお、識別番号ＰＮＯ”０”のエントリ５４２および識別番号ＰＮＯ”１”のエントリ５４２は、保持部５４０内でのバブルアップにより、空きエントリになる。
【０１０７】
例えば、識別番号ＰＮＯ”３”のエントリ５４２に保持された情報ＰＩＤ１６、ＩＮＦｕ１は、識別番号ＰＮＯ”５”のエントリ５４２に移動する（図４（ｃ））。識別番号ＰＮＯ”１”のエントリ５４２に保持された情報ＰＩＤ１７、ＩＮＦｕ４は、識別番号ＰＮＯ”３”のエントリ５４２に移動する（図４（ｄ））。識別番号ＰＮＯ”０”のエントリ５４２に登録された命令ＩＮＳｒ（識別情報ＰＩＤ３で示される命令ＩＮＳｄ）は、実行部７００に投入する命令ＩＮＳｅとして選択される（図４（ｅ））。このため、識別番号ＰＮＯ”０”のエントリ５４２に保持された識別情報ＰＩＤ２等の情報の移動先のエントリ５４２の有効フラグＶは、”０”にリセットされる。
【０１０８】
図６は、図３に示した各エントリ５２４、５４２の状態の別の例を示す。なお、図６は、保持部５４０内の全てのエントリ５４２が埋まっている場合のリザベーションステーション５００の動作に対応する。
【０１０９】
１サイクル目では、保持部５４０内の全てのエントリ５４２は、レディフラグＲが”０”のエントリ５４２で埋まっている。一方、保持部５２２Ａ、５２２Ｂには、有効フラグＶおよびコピーフラグＣがそれぞれ”１”および”０”で、かつ、レディフラグＲが”１”のエントリ５４２が存在する。
【０１１０】
例えば、保持部５２２Ａでは、識別情報ＰＩＤ２０で示されるエントリ５２４Ａの有効フラグＶ、レディフラグＲおよびコピーフラグＣは、それぞれ”１”、”１”および”０”である。また、保持部５２２Ｂでは、識別情報ＰＩＤ４で示されるエントリ５２４Ｂの有効フラグＶ、レディフラグＲおよびコピーフラグＣは、それぞれ”１”、”１”および”０”である。
【０１１１】
この場合、保持部５４０内のエントリ５４２に上書きするエントリ５２４として、識別情報ＰＩＤ２０で示されるエントリ５２４Ａおよび識別情報ＰＩＤ４で示されるエントリ５２４Ｂが保持部５２２Ａ、５２２Ｂからそれぞれ選択される（図６（ａ）、（ｂ））。これにより、例えば、識別情報ＰＩＤ２０で示されるエントリ５２４Ａに保持された情報ＩＮＦｕ９と識別情報ＰＩＤ２０は、識別番号ＰＮＯ”１”のエントリ５４２に上書きされる。また、識別情報ＰＩＤ４で示されるエントリ５２４Ｂに保持された情報ＩＮＦｕ８と識別情報ＰＩＤ４は、識別番号ＰＮＯ”０”のエントリ５４２に上書きされる。
【０１１２】
なお、情報ＩＮＦｕ等が上書きされたエントリ５４２に保持されていた識別情報ＰＩＤで示されるエントリ５２４のコピーフラグＣは、“０”に設定される。例えば、識別番号ＰＮＯ”１”のエントリ５４２および識別番号ＰＮＯ”０”のエントリ５４２に保持されていた識別情報ＰＩＤ１９、ＰＩＤ３で示されるエントリ５２４Ａ、５２４ＢのコピーフラグＣは、次のサイクル（２サイクル目）で“０”に設定される。
【０１１３】
２サイクル目では、１サイクル目に選択されたエントリ５２４Ａの識別情報ＰＩＤ２０と、識別情報ＰＩＤ２０で示されるエントリ５２４Ａの情報ＩＮＦｕ９は、識別番号ＰＮＯ”１”のエントリ５４２に記録される。また、識別番号ＰＮＯ”１”のエントリ５４２の有効フラグＶおよびレディフラグＲは、識別情報ＰＩＤ２０で示されるエントリ５２４Ａの有効フラグＶおよびレディフラグＲと同じ値（”１”および”１”）にそれぞれ設定される。
【０１１４】
同様に、１サイクル目に選択されたエントリ５２４Ｂの識別情報ＰＩＤ４と、識別情報ＰＩＤ４で示されるエントリ５２４Ｂの情報ＩＮＦｕ８は、識別番号ＰＮＯ”０”のエントリ５４２に記録される。また、識別番号ＰＮＯ”０”のエントリ５４２の有効フラグＶおよびレディフラグＲは、識別情報ＰＩＤ４で示されるエントリ５２４Ｂの有効フラグＶおよびレディフラグＲと同じ値（”１”および”１”）にそれぞれ設定される。
【０１１５】
保持部５２２Ａでは、識別情報ＰＩＤ２０で示されるエントリ５２４Ａの情報ＩＮＦｕ９等が識別番号ＰＮＯ”１”のエントリ５４２に上書きされたため、識別情報ＰＩＤ２０で示されるエントリ５２４ＡのコピーフラグＣは、”１”に設定される。また、情報ＩＮＦｕ９等の上書きにより識別番号ＰＮＯ”１”のエントリ５４２から削除された識別情報ＰＩＤ１９で示されるエントリ５２４ＡのコピーフラグＣは、“０”に設定される。
【０１１６】
保持部５２２Ｂでは、識別情報ＰＩＤ４で示されるエントリ５２４Ｂの情報ＩＮＦｕ８等が識別番号ＰＮＯ”０”のエントリ５４２に上書きされたため、識別情報ＰＩＤ４で示されるエントリ５２４ＢのコピーフラグＣは、”１”に設定される。また、情報ＩＮＦｕ８等の上書きにより識別番号ＰＮＯ”０”のエントリ５４２から削除された識別情報ＰＩＤ１３で示されるエントリ５２４ＡのコピーフラグＣは、“０”に設定される。
【０１１７】
これにより、リザベーションステーション５００は、実行可能でない命令ＩＮＳｒで保持部５４０内の全てのエントリ５４２が埋まっている場合でも、実行部７００への命令ＩＮＳｅの投入が滞ることを抑制できる。
【０１１８】
例えば、実行可能でない命令ＩＮＳｒで保持部５４０内の全てのエントリ５４２が埋まっている場合にエントリ５４２への上書きが実行されない手段では、保持部５２０から保持部５４０への命令ＩＮＳｄ（情報ＩＮＦｕ等）のコピーが停止する場合がある。この場合、保持部５２０に登録された命令ＩＮＳｄが保持部５４０に登録された命令ＩＮＳｒより先に実行可能な状態に遷移した場合でも、実行可能な命令ＩＮＳｄは、保持部５４０に空きエントリが発生するまで、保持部５４０にコピーされない。
【０１１９】
これに対し、選択部５３０は、保持部５２０に登録された命令ＩＮＳｄが保持部５４０に登録された命令ＩＮＳｒより先に実行可能な状態に遷移した場合、実行可能な命令ＩＮＳｄを保持部５２０から保持部５４０内のエントリ５４２に上書きする。これにより、実行部７００への命令ＩＮＳｅの投入を効率よく実行することができ、演算処理装置の性能低下を抑制することができる。
【０１２０】
図７は、図３に示した選択部５３２Ａの動作の一例を示す。すなわち、図７は、演算処理装置１００の処理方法（すなわち、演算処理装置１００の制御方法）を示す。なお、図７は、複数のエントリ５２４Ａのうちの１つのエントリ５２４Ａ（以下、着目エントリ５２４Ａとも称する）に対する選択部５３２Ａの動作を示す。選択部５３２Ａは、図７に示す動作を、保持部５２２Ａ内の複数のエントリ５２４Ａのそれぞれに対して並列に実行する。例えば、選択部５３２Ａは、保持部５２２Ａ内の複数のエントリ５２４Ａにそれぞれ対応し、図７に示す動作を並列に実行する複数の選択回路を有してもよい。
【０１２１】
ステップＳ１００では、選択部５３２Ａは、着目エントリ５２４Ａの有効フラグＶおよびコピーフラグＣがそれぞれ”１”および”０”であるか否かを判定する。すなわち、選択部５３２Ａは、着目エントリ５２４Ａ（より詳細には、着目エントリ５２４Ａに保持された情報ＩＮＦｕ、着目エントリ５２４Ａの識別情報ＰＩＤ等）が保持部５４０内のエントリ５４２に既にコピーされたか否かを判定する。
【０１２２】
着目エントリ５２４Ａの有効フラグＶおよびコピーフラグＣがそれぞれ”１”および”０”である場合、選択部５３２Ａの動作は、ステップＳ１１０に移る。一方、着目エントリ５２４Ａの有効フラグＶおよびコピーフラグＣがそれぞれ”１”および”０”でない場合、選択部５３２Ａは、着目エントリ５２４Ａをエントリ５４２にコピーせずに、着目エントリ５２４Ａに関する処理を終了する。
【０１２３】
例えば、着目エントリ５２４Ａの有効フラグＶおよびコピーフラグＣの両方が”１”である場合、選択部５３２Ａは、着目エントリ５２４Ａが保持部５４０内のエントリ５４２に既にコピーされていると判定する。このため、選択部５３２Ａは、着目エントリ５２４Ａをエントリ５４２にコピーせずに、着目エントリ５２４Ａに関する処理を終了する。また、着目エントリ５２４Ａの有効フラグＶが”０”である場合、着目エントリ５２４Ａは空きエントリであるため、選択部５３２Ａは、着目エントリ５２４Ａをエントリ５４２にコピーせずに、着目エントリ５２４Ａに関する処理を終了する。
【０１２４】
ステップＳ１１０では、選択部５３２Ａは、着目エントリ５２４ＡのレディフラグＲが”１”であるか否かを判定する。すなわち、選択部５３２Ａは、着目エントリ５２４Ａに保持された命令ＩＮＳｄが実行可能か否かを判定する。
【０１２５】
ここで、レディフラグＲおよびコピーフラグＣがそれぞれ”１”および”０”のエントリ５２４Ａは、実行可能な命令ＩＮＳｄ（実行部７００に投入可能な命令ＩＮＳｄ）を保持しているが、エントリ５４２にコピーされていないエントリ５２４Ａである。したがって、レディフラグＲが”１”のエントリ５２４Ａに保持された命令ＩＮＳｄは、エントリ５４２に登録された場合、即座に実行部７００に投入可能な命令ＩＮＳｄである。このため、レディフラグＲが”１”のエントリ５２４Ａは、レディフラグＲが”０”のエントリ５２４Ａに比べて、保持部５４０内のエントリ５４２にコピーするエントリ５２４Ａを選択する場合の優先順位が高い。
【０１２６】
着目エントリ５２４ＡのレディフラグＲが”１”である場合、選択部５３２Ａの動作は、ステップＳ１２０に移る。一方、着目エントリ５２４ＡのレディフラグＲが”１”でない場合（すなわち、着目エントリ５２４ＡのレディフラグＲが”０”である場合）、選択部５３２Ａの動作は、ステップＳ２００に移る。
【０１２７】
ステップＳ１２０では、選択部５３２Ａは、有効フラグＶ、レディフラグＲおよびコピーフラグＣがそれぞれ”１”、”１”および”０”のエントリ５２４Ａの中で、着目エントリ５２４Ａが最古のエントリ５２４Ａか否かを判定する。なお、最古のエントリ５２４Ａは、判定対象のエントリ５２４Ａに保持された命令ＩＮＳｄのうち、命令デコード部４２０で最古にデコードされた命令ＩＮＳｄを保持しているエントリ５２４Ａである。
【０１２８】
ステップＳ１２０の判定は、例えば、着目エントリ５２４Ａのオールダーフラグの全ビットと、着目エントリ５２４Ａのオールダーフラグの各ビットに対応するエントリ５２４ＡのレディフラグＲおよびコピーフラグＣとを用いて、実行される。例えば、選択部５３２Ａは、レディフラグＲおよびコピーフラグＣがそれぞれ”１”および”０”で、着目エントリ５２４Ａより古いエントリ５２４Ａが保持部５２２Ａに存在するか否かを判定する。
【０１２９】
なお、着目エントリ５２４Ａより古いエントリ５２４Ａは、命令デコード部４２０でのデコードの順番が着目エントリ５２４Ａに保持された命令ＩＮＳｄより古い命令ＩＮＳｄを保持しているエントリ５２４Ａである。着目エントリ５２４Ａより古いエントリ５２４Ａが保持部５２２Ａに存在するか否かは、着目エントリ５２４Ａのオールダーフラグを参照することにより判定される。
【０１３０】
有効フラグＶ、レディフラグＲおよびコピーフラグＣがそれぞれ”１”、”１”および”０”のエントリ５２４Ａの中で、着目エントリ５２４Ａが最古のエントリ５２４Ａである場合、選択部５３２Ａの動作は、ステップＳ１３０に移る。なお、有効フラグＶ、レディフラグＲおよびコピーフラグＣがそれぞれ”１”、”１”および”０”のエントリ５２４Ａが着目エントリ５２４Ａのみの場合、着目エントリ５２４Ａは、最古のエントリ５２４Ａと判定される。
【０１３１】
一方、有効フラグＶ、レディフラグＲおよびコピーフラグＣがそれぞれ”１”、”１”および”０”のエントリ５２４Ａの中で、着目エントリ５２４Ａが最古のエントリ５２４Ａでない場合、着目エントリ５２４Ａに関する選択部５３２Ａの動作は、終了する。この場合、着目エントリ５２４Ａを除く他エントリ５２４Ａのいずれかがエントリ５４２にコピーされるため、選択部５３２Ａは、着目エントリ５２４Ａをエントリ５４２にコピーせずに、着目エントリ５２４Ａに関する処理を終了する。
【０１３２】
ステップＳ１３０では、選択部５３２Ａは、保持部５４０内の全てのエントリ５４２の有効フラグＶおよびレディフラグＲがそれぞれ”１”および”０”であるか否かを判定する。すなわち、選択部５３２Ａは、保持部５４０内に空きエントリがなく、全てのエントリ５４２のレディフラグＲが”０”であるかを判定する。これにより、着目エントリ５２４Ａをエントリ５４２に上書きするか否かが判定される。
【０１３３】
保持部５４０内の全てのエントリ５４２の有効フラグＶおよびレディフラグＲがそれぞれ”１”および”０”である場合、選択部５３２Ａの動作は、ステップＳ１４０に移る。一方、保持部５４０内の複数のエントリ５４２のいずれかの有効フラグＶおよびレディフラグＲがそれぞれ”１”および”０”でない場合、選択部５３２Ａの動作は、ステップＳ２２０に移る。例えば、保持部５４０内の複数のエントリ５４２のいずれかの有効フラグＶが”０”の場合、ステップＳ２２０においてエントリ５４２に空きが有ると判定され、着目エントリ５２４Ａは、ステップＳ２３０においてエントリ５４２にコピーされる。
【０１３４】
ステップＳ１４０では、選択部５３２Ａは、着目エントリ５２４Ａをエントリ５４２に上書きする。例えば、選択部５３２Ａは、着目エントリ５２４Ａに登録された命令ＩＮＳｄに含まれる一部の情報ＩＮＦｕと着目エントリ５２４Ａを示す識別情報ＰＩＤとを、エントリ５４２に上書きする。この場合、選択部５３２Ａは、上書きによりエントリ５４２から削除された識別情報ＰＩＤで示されるエントリ５２４ＡのコピーフラグＣを”０”に設定する。
【０１３５】
このように、選択部５３２Ａは、複数のエントリ５４２に空きがなく、保持部５４０に登録された命令ＩＮＳｒのいずれも実行可能でない場合、エントリ５２４Ａに保持された実行可能な命令ＩＮＳｄを示す識別情報ＰＩＤ等の情報をエントリ５４２に上書きする。例えば、選択部５３２Ａは、保持部５４０に登録された命令ＩＮＳｒのいずれかが実行可能な状態に遷移する前に複数のエントリ５２４Ａに保持された命令ＩＮＳｄのいずれかが実行可能な状態に遷移した場合、ステップＳ１４０の処理を実行する。そして、上書きにより保持部５４０から削除された命令ＩＮＳ（ＩＮＳｄ）を保持しているエントリ５２４ＡのコピーフラグＣを、命令ＩＮＳｄが保持部５４０に登録されていないことを示す初期状態（”０”）に変更する。
【０１３６】
ステップＳ２００では、選択部５３２Ａは、有効フラグＶ、レディフラグＲおよびコピーフラグＣがそれぞれ”１”、”１”および”０”の他エントリ５２４Ａが存在しないかを判定する。すなわち、選択部５３２Ａは、着目エントリ５２４Ａより優先順位の高い他エントリ５２４Ａが存在しないかを判定する。
【０１３７】
有効フラグＶ、レディフラグＲおよびコピーフラグＣがそれぞれ”１”、”１”および”０”の他エントリ５２４Ａが存在する場合、着目エントリ５２４Ａに関する選択部５３２Ａの動作は、終了する。この場合、他エントリ５２４Ａのいずれかがエントリ５４２にコピーされるため、選択部５３２Ａは、着目エントリ５２４Ａをエントリ５４２にコピーせずに、着目エントリ５２４Ａに関する処理を終了する。
【０１３８】
一方、有効フラグＶ、レディフラグＲおよびコピーフラグＣがそれぞれ”１”、”１”および”０”の他エントリ５２４Ａが存在しない場合、選択部５３２Ａの動作は、ステップＳ２１０に移る。
【０１３９】
ステップＳ２１０では、選択部５３２Ａは、有効フラグＶ、レディフラグＲおよびコピーフラグＣがそれぞれ”１”、”０”および”０”のエントリ５２４Ａの中で、着目エントリ５２４Ａが最古のエントリ５２４Ａか否かを判定する。ステップＳ２１０の判定は、例えば、着目エントリ５２４Ａのオールダーフラグの全ビットと、着目エントリ５２４Ａのオールダーフラグの各ビットに対応するエントリ５２４ＡのレディフラグＲおよびコピーフラグＣとを用いて、実行される。例えば、選択部５３２Ａは、レディフラグＲおよびコピーフラグＣの両方が”０”で、着目エントリ５２４Ａより古いエントリ５２４Ａが保持部５２２Ａに存在するか否かを判定する。
【０１４０】
有効フラグＶ、レディフラグＲおよびコピーフラグＣがそれぞれ”１”、”０”および”０”のエントリ５２４Ａの中で、着目エントリ５２４Ａが最古のエントリ５２４Ａである場合、選択部５３２Ａの動作は、ステップＳ２２０に移る。なお、有効フラグＶ、レディフラグＲおよびコピーフラグＣがそれぞれ”１”、”０”および”０”のエントリ５２４Ａが着目エントリ５２４Ａのみの場合、着目エントリ５２４Ａは、最古のエントリ５２４Ａと判定される。
【０１４１】
一方、有効フラグＶ、レディフラグＲおよびコピーフラグＣがそれぞれ”１”、”０”および”０”のエントリ５２４Ａの中で、着目エントリ５２４Ａが最古のエントリ５２４Ａでない場合、着目エントリ５２４Ａに関する選択部５３２Ａの動作は、終了する。この場合、他エントリ５２４Ａのいずれかがエントリ５４２にコピーされるため、選択部５３２Ａは、着目エントリ５２４Ａをエントリ５４２にコピーせずに、着目エントリ５２４Ａに関する処理を終了する。
【０１４２】
ステップＳ２２０では、選択部５３２Ａは、保持部５４０内のエントリ５４２に空きが有るか否かを判定する。例えば、選択部５３２Ａは、保持部５４０内の複数のエントリ５４２のいずれかの有効フラグＶが”０”であるかを判定する。保持部５４０内のエントリ５４２に空きが有る場合、選択部５３２Ａの動作は、ステップＳ２３０に移る。一方、保持部５４０内のエントリ５４２に空きが無い場合、選択部５３２Ａは、着目エントリ５２４Ａをエントリ５４２にコピーせずに、着目エントリ５２４Ａに関する処理を終了する。
【０１４３】
ステップＳ２３０では、選択部５３２Ａは、着目エントリ５２４Ａをエントリ５４２にコピーする。例えば、選択部５３２Ａは、着目エントリ５２４Ａに登録された命令ＩＮＳｄに含まれる一部の情報ＩＮＦｕと着目エントリ５２４Ａを示す識別情報ＰＩＤとを、エントリ５４２のいずれか（空きエントリ）に格納する。
【０１４４】
このように、選択部５３２Ａは、複数のエントリ５２４に保持された命令ＩＮＳのうち、保持部５４０に登録されていない命令ＩＮＳのいずれも実行可能でない場合でも、保持部５４０に登録する命令ＩＮＳを選択する。例えば、選択部５３２Ａは、複数のエントリ５２４に保持された命令ＩＮＳのうちの保持部５４０に登録されていない命令ＩＮＳのうち、命令デコード部４２０により最古にデコードされた命令ＩＮＳを保持部５４０に登録する命令ＩＮＳとして選択する。
【０１４５】
なお、選択部５３２Ａの動作は、図７に示す例に限定されない。また、選択部５３２Ｂの動作は、選択部５３２Ａの動作（すなわち、図７に示す動作）と同一または同様である。
【０１４６】
図８は、図２に示した演算処理装置１００のパイプライン処理の一例を示す。なお、図８は、命令ＩＮＳ２が実行可能な状態になる前に保持部５４０に登録された場合のパイプライン処理の一例を示す。図８に示した２つの命令ＩＮＳ（ＩＮＳ１、ＩＮＳ２）の間には、レジスタ７５０の依存関係がある。例えば、命令ＩＮＳ１、ＩＮＳ２は、下記の（１）、（２）にそれぞれ示す加算命令である。
【０１４７】
ａｄｄ  ％ｇ１，４，％ｇ２      ‥‥  （１）
ａｄｄ  ％ｇ２，８，％ｇ３      ‥‥  （２）
レジスタｇ１、ｇ２、ｇ３は、例えば、図３に示したレジスタ７５０内に設けられる固定小数点演算レジスタである。命令ＩＮＳ１は、レジスタｇ１に格納されたデータと即値”４”とを加算し、加算結果をレジスタｇ２に格納する加算命令である。命令ＩＮＳ２は、レジスタｇ２に格納されたデータと即値”８”とを加算し、加算結果をレジスタｇ３に格納する加算命令である。命令ＩＮＳ２は、命令ＩＮＳ１の実行結果が書き込まれるレジスタｇ２を参照するため、命令ＩＮＳ１とレジスタ７５０の依存関係がある。また、命令ＩＮＳ１、ＩＮＳ２は、連続する命令列である。
【０１４８】
図８に示した符号Ｄ、ＤＴ、ＰＰ、Ｐ、ＰＴ、Ｂ１、Ｂ２、Ｘは、各パイプラインステージのサイクルを示す。例えば、Ｄ（Decode）サイクルでは、命令ＩＮＳがデコードされ、デコードされた命令ＩＮＳがリザベーションステーション５００に転送される。ＤＴ（Decode Transfer）サイクルでは、Ｄサイクルでデコードされた命令ＩＮＳがリザベーションステーション５００に格納される。ＰＰ（Pre Priority）サイクルでは、保持部５２０に登録された命令ＩＮＳ（より詳細には、命令ＩＮＳの情報ＩＮＦｕ、命令ＩＮＳを示す情報ＰＩＤ等）が保持部５４０にコピーされる。
【０１４９】
Ｐ（Priority）サイクルでは、保持部５４０から実行部７００に投入される命令ＩＮＳが決定される。ＰＴ（Priority Transfer）サイクルでは、Ｐサイクルで決定された命令ＩＮＳが実行部７００に投入される。Ｂ１、Ｂ２（Buffer）サイクルでは、演算に必要なデータが決定される。Ｘ（Execute）サイクルでは、実行部７００が命令ＩＮＳを実行する。Ｘサイクルの次のサイクルでは、リネーミングレジスタへの書き込みが実行される。
【０１５０】
また、図８に示した符号ＢＣＴは、命令ＩＮＳ１に割り当てられたアップデートバッファ７４０のアドレス（レジスタｇ２に対応するＵＢＡ）に対応したエントリを示す。例えば、”１”に設定されたエントリＢＣＴは、命令ＩＮＳ２がバイパス可能であることを示す。
【０１５１】
１サイクル目では、命令ＩＮＳ１のＤサイクルの処理および命令ＩＮＳ２のＤサイクルの処理が実行される。例えば、図３に示した命令デコード部４２０は、命令ＩＮＳ１、ＩＮＳ２をデコードし、デコードした命令ＩＮＳ１、ＩＮＳ２をリザベーションステーション５００に転送する。なお、命令ＩＮＳ１、ＩＮＳ２は、連続した命令列であるが、同時にデコード可能な命令ＩＮＳの数の関係により、Ｄサイクルの処理の実行にずれが生じる場合もある。また、命令ＩＮＳ１、ＩＮＳ２が連続していない場合も、命令ＩＮＳ１、ＩＮＳ２のＤサイクルが互いにずれる場合がある。
【０１５２】
２サイクル目では、命令ＩＮＳ１のＤＴサイクルの処理および命令ＩＮＳ２のＤＴサイクルの処理が実行される。例えば、図３に示した選択部５１０Ａ（あるいは、選択部５１０Ｂ）は、Ｄサイクルにデコードされた命令ＩＮＳ１、ＩＮＳ２を、保持部５２２Ａ内のエントリ５２４Ａ（あるいは、保持部５２２Ｂ内のエントリ５２４Ｂ）に格納する。以下、命令ＩＮＳ１、ＩＮＳ２が保持部５２２Ａ内のエントリ５２４Ａに格納されたものとして演算処理装置１００のパイプライン処理を説明する。
【０１５３】
３サイクル目では、命令ＩＮＳ１のＰＰサイクルの処理および命令ＩＮＳ２のＰＰサイクルの処理が実行される。例えば、図３に示した選択部５３２Ａは、命令ＩＮＳ１、ＩＮＳ２（より詳細には、命令ＩＮＳ１、ＩＮＳ２をそれぞれ示す情報ＰＩＤ等）を、保持部５２２Ａから保持部５４０にコピーする。なお、保持部５４０内のエントリ５４２の空き状況等により、ＤＴサイクルからＰＰサイクルの間が空く場合がある。
【０１５４】
また、図８に示す例では、命令ＩＮＳ１は、先行する命令ＩＮＳとの依存関係がないものとする。すなわち、命令ＩＮＳ１は、保持部５２２Ａに格納されたときには、既に実行可能な状態である。したがって、命令ＩＮＳ１が登録されるエントリ５２４Ａ、５４２のレディフラグＲは、”1”である。一方、命令ＩＮＳ２は、命令ＩＮＳ１とレジスタ７５０の依存関係があり、命令ＩＮＳ１が実行部７００に投入されていないため、命令ＩＮＳ１が登録されるエントリ５２４Ａ、５４２のレディフラグＲは、”０”である。
【０１５５】
４サイクル目では、命令ＩＮＳ１のエントリ５４２のレディフラグＲが”1”であるため、命令ＩＮＳ１のＰサイクルの処理が実行される。例えば、選択部５５０は、実行部７００に投入する命令ＩＮＳとして、命令ＩＮＳ１を選択する。一方、命令ＩＮＳ２は、エントリ５４２のレディフラグＲが”０”であるため、保持部５４２に滞留する。
【０１５６】
また、選択部５５０は、実行部７００に投入する命令ＩＮＳとして決定した命令ＩＮＳ１と保持部５４０に登録された命令ＩＮＳとの依存関係をチェックする。保持部５４０内のエントリ５４２の数が保持部５２２Ａ内のエントリ５２４Ａの数より少ないため、選択部５５０は、命令ＩＮＳ１と命令ＩＮＳ２との依存関係が解消することを命令ＩＮＳ１のＰサイクル中（４サイクル目）に検出できる。
【０１５７】
また、選択部５５０は、エントリＢＣＴを”1”に設定する。なお、図８に示す例では、命令ＩＮＳ１と命令ＩＮＳ２との依存関係が解消することが４サイクル目に検出されるため、命令ＩＮＳ２のバイパスは、エントリＢＣＴを利用せずに実行される。
【０１５８】
５サイクル目では、命令ＩＮＳ１のＰＴサイクルの処理が実行される。例えば、選択部５５０は、Ｐサイクルで選択した命令ＩＮＳ１を示す識別情報ＰＩＤと命令ＩＮＳ１に含まれる一部の情報ＩＮＦｕとを、ラッチ部２１１Ａ、２１１Ｂのいずれかに出力する。また、命令ＩＮＳ２に関しては、命令ＩＮＳ１との依存関係が解消しているため、命令ＩＮＳ２のＰサイクルの処理が実行される。
【０１５９】
６サイクル目以降では、命令ＩＮＳ１のＢ１サイクル、Ｂ２サイクルおよびＸサイクルの処理が順次実行され、命令ＩＮＳ２のＰＴサイクル、Ｂ１サイクル、Ｂ２サイクルおよびＸサイクルの処理が順次実行される。
【０１６０】
このように、選択部５５０は、実行部７００に投入する命令ＩＮＳ１と保持部５２２Ａに登録された全ての命令ＩＮＳとの依存関係をチェックする代わりに、命令ＩＮＳ１と保持部５４０に登録された全ての命令ＩＮＳとの依存関係をチェックする。保持部５４０に登録される命令ＩＮＳの最大数（エントリ５４２の数）は、保持部５２２Ａに登録される命令ＩＮＳの最大数（エントリ５２４Ａの数）より少ない。
【０１６１】
このため、バイパス可能な命令ＩＮＳ（依存関係が解消された命令ＩＮＳ）が保持部５４０に登録されているかを判定する選択部５５０の回路規模の増加を抑制しつつ、演算処理装置１００の周波数を向上することができる。例えば、選択部５５０は、命令ＩＮＳ１と保持部５４０に登録された命令ＩＮＳとの依存関係の検出にかかる時間を、命令ＩＮＳ１と保持部５２２Ａに登録された命令ＩＮＳとの依存関係をチェックする場合に比べて短くできる。この結果、命令ＩＮＳ１のＰサイクルと命令ＩＮＳ１に後続する命令ＩＮＳ２のＰサイクルとを連続して実行することができる。また、選択部５５０等の回路規模の増加を抑制することができるため、消費電力の増加を抑制することもできる。
【０１６２】
図９は、図２に示した演算処理装置１００のパイプライン処理の別の例を示す。なお、図９は、命令ＩＮＳ２が実行可能な状態になった後に保持部５４０に登録された場合のパイプライン処理の一例を示す。命令ＩＮＳ１、ＩＮＳ２は、図８に示した命令ＩＮＳ１、ＩＮＳ２と同一である。例えば、命令ＩＮＳ１は、レジスタｇ１に格納されたデータと即値”４”とを加算し、加算結果をレジスタｇ２に格納する加算命令である。命令ＩＮＳ２は、レジスタｇ２に格納されたデータと即値”８”とを加算し、加算結果をレジスタｇ３に格納する加算命令である。また、命令ＩＮＳ１、ＩＮＳ２は連続する命令列であり、命令ＩＮＳ１と命令ＩＮＳ２とはレジスタ７５０の依存関係がある。
【０１６３】
図９に示した命令ＩＮＳ１、ＩＮＳ２のパイプライン処理は、命令ＩＮＳ２のＰＰサイクル以降のサイクルが実行されるタイミングを除いて、図８と同一または同様である。例えば、命令ＩＮＳ１のパイプライン処理は、図８に示した命令ＩＮＳ１のパイプライン処理と同一または同様である。
【０１６４】
１サイクル目では、図８に示した１サイクル目と同様に、命令ＩＮＳ１のＤサイクルの処理および命令ＩＮＳ２のＤサイクルの処理が実行される。
【０１６５】
２サイクル目では、図８に示した２サイクル目と同様に、命令ＩＮＳ１のＤＴサイクルの処理および命令ＩＮＳ２のＤＴサイクルの処理が実行される。
【０１６６】
３サイクル目では、命令ＩＮＳ１のＰＰサイクルの処理は実行されるが、命令ＩＮＳ２のＰＰサイクルの処理は実行されない。例えば、保持部５４０に空きエントリが存在しない場合、命令ＩＮＳ２より優先順位の高い命令ＩＮＳが保持部５２２Ａに登録されている場合等では、命令ＩＮＳ２を保持部５４０に登録する処理（命令ＩＮＳ２のＰＰサイクルの処理）は実行されない。
【０１６７】
４サイクル目では、命令ＩＮＳ１のＰサイクルの処理が実行され、エントリＢＣＴを”０”から”1”に変更する処理が実行される。例えば、選択部５５０は、エントリＢＣＴを”1”に設定する。
【０１６８】
また、４サイクル目では、実行部７００に投入する命令ＩＮＳとして決定した命令ＩＮＳ１と保持部５４０に登録された命令ＩＮＳとの依存関係をチェックする。なお、４サイクル目での依存関係のチェックは、保持部５４０に登録された命令ＩＮＳを対象に実行される。命令ＩＮＳ２が保持部５４０に登録されていないため、命令ＩＮＳ１と命令ＩＮＳ２との依存関係が解消したことは検出されない。
【０１６９】
５サイクル目では、命令ＩＮＳ１のＰＴサイクルの処理が実行される。また、５サイクル目では、例えば、選択部５３２Ａは、バイパス制御テーブル４４０のエントリＢＣＴを参照し、命令ＩＮＳ２が登録されたエントリ５２４ＡのレディフラグＲを”１”に設定する。このように、バイパス制御テーブル４４０を利用したバイパスでは、バイパス可能かの判定は、エントリＢＣＴの設定（４サイクル目）とエントリＢＣＴからの読み出し（５サイクル目）との２サイクルで実行される。
【０１７０】
６サイクル目では、命令ＩＮＳ１のＢ１サイクルの処理が実行され、命令ＩＮＳ２のＰＰサイクルの処理が実行される。命令ＩＮＳ２のエントリ５２４ＡのレディフラグＲが５サイクル目に”1”に設定されたため、命令ＩＮＳ２は、レディフラグＲが”０”のエントリ５２４Ａに登録された命令ＩＮＳ（他の命令ＩＮＳ）より優先順位が高くなる。このため、例えば、命令ＩＮＳ２を示す情報ＰＩＤ等を保持部５４０のエントリ５４２にコピーする処理（命令ＩＮＳ２のＰＰサイクルの処理）が実行される。なお、保持部５４０内の全てのエントリ５４２のレディフラグＲが”０”の場合、命令ＩＮＳ２を示す情報ＰＩＤ等は、保持部５４０のエントリ５４２に上書きされる。
【０１７１】
７サイクル目では、命令ＩＮＳ２のエントリ５４２のレディフラグＲが”1”であるため、命令ＩＮＳ２のＰサイクルの処理が実行される。なお、図９に示す例では、７サイクル目の保持部５４０には、命令ＩＮＳ２より優先順位の高い命令ＩＮＳは登録されていない。このため、７サイクル目において、命令ＩＮＳ２のＰサイクルの処理が実行される。また、７サイクル目では、命令ＩＮＳ１のＢ２サイクルの処理が実行される。
【０１７２】
８サイクル目では、命令ＩＮＳ１のＸサイクルの処理が実行され、命令ＩＮＳ２のＰサイクルの処理が実行される。９サイクル目以降では、命令ＩＮＳ２のＢ１サイクル、Ｂ２サイクルおよびＸサイクルの処理が順次実行される。
【０１７３】
このように、命令ＩＮＳ１と命令ＩＮＳ２との依存関係が解消したときに、保持部５４０に空きエントリがなく、かつ、全てのエントリ５４２のレディフラグＲが”０”である状態でも、命令ＩＮＳ２のＰＰサイクルの処理は優先的に実行される。これにより、演算処理装置１００は、実効可能な命令ＩＮＳ２が保持部５２４Ａに滞留することを防止できる。
【０１７４】
以上、図２から図９に示す実施形態においても、図１に示した実施形態と同様の効果を得ることができる。例えば、リザベーションステーション５００、６００に保持される命令ＩＮＳの数が増加した場合でも、命令ＩＮＳの処理効率が低下することを抑制できる。
【０１７５】
以上の詳細な説明により、実施形態の特徴点および利点は明らかになるであろう。これは、特許請求の範囲がその精神および権利範囲を逸脱しない範囲で前述のような実施形態の特徴点および利点にまで及ぶことを意図するものである。また、当該技術分野において通常の知識を有する者であれば、あらゆる改良および変更に容易に想到できるはずである。したがって、発明性を有する実施形態の範囲を前述したものに限定する意図はなく、実施形態に開示された範囲に含まれる適当な改良物および均等物に拠ることも可能である。
【符号の説明】
【０１７６】
１０、１００‥演算処理装置；２０、４２０‥命令デコード部；３０‥命令保持部；４０‥第１保持部；４２、６２、５２４、５４２‥エントリ；５０‥第１選択部；６０‥倍２保持部；７０‥第２選択部；８０‥命令実行部；２００‥コア部；２１０‥ラッチ部；３００‥記憶部；３１０‥データキャッシュ；３２０‥命令キャッシュ；４００‥命令制御部；４１０‥命令バッファ；４２０‥命令デコード部；４３０‥レジスタ管理部；４３２‥レジスタテーブル；４４０‥バイパス制御テーブル；５００、６００‥リザベーションステーション；５１０、５３０、５５０、５６０‥選択部；５２０、５４０‥保持部；７００‥実行部；７１０、７２０‥演算部；７３０‥アドレス生成部；７４０‥アップデートバッファ；７５０‥レジスタ
【図１】
0006520416.tif 000002
【図２】
0006520416.tif 000003
【図３】
0006520416.tif 000004
【図４】
0006520416.tif 000005
【図５】
0006520416.tif 000006
【図６】
0006520416.tif 000007
【図７】
0006520416.tif 000008
【図８】
0006520416.tif 000009
【図９】
0006520416.tif 000010