以下、実施形態について、図面を用いて説明する。
図1は、演算処理装置および演算処理装置の処理方法の一実施形態を示す。図1に示す演算処理装置10は、例えばCPU(Central Processing Unit)やDSP(Digital Signal Processor)等のプロセッサである。演算処理装置10は、命令INS(INSi)をデコードする命令デコード部20と、命令デコード部20でデコードされた命令INS(INSd)が登録される命令保持部30と、デコードされた命令INS(INSe)を実行する命令実行部80とを有する。
命令デコード部20は、例えば、図示しない命令キャッシュから命令INSiを読み出し、読み出した命令INSiをデコードする。そして、命令デコード部20は、デコードした命令INSdを命令保持部30に出力する。
命令保持部30は、命令デコード部20から供給される命令INSdを保持し、保持した命令INSdを実行可能な命令INSeから順に命令実行部80に投入するリザベーションステーションの機能を有する。例えば、命令保持部30は、命令デコード部20でデコードされた命令INSdを保持する複数のエントリ42を有する第1保持部40と、複数のエントリ42より少ない数の複数のエントリ62を有する第2保持部60とを有する。さらに、命令保持部30は、第1選択部50と第2選択部70とを有する。
第1保持部40は、命令デコード部20から順次受ける命令INSdを複数のエントリ42のうちのいずれか(空きエントリ)に保持する。これにより、命令デコード部20でデコードされた命令INSdは、命令保持部30に登録される。また、各エントリ42は、命令デコード部20からの命令INSdの発行の順番を示した優先度情報等を保持する。なお、命令実行部80に実行させる命令INSeの順序を入れ替える際の効率は、命令保持部30に登録される命令INSdの数(すなわち、エントリ42の数)の増加に伴い向上する。
第1選択部50は、第2保持部60に登録する命令INS(INSr)を複数のエントリ42に保持された命令INSdから選択する。例えば、第1選択部50は、複数のエントリ42に保持された命令INSdのうち、命令デコード部20で最古にデコードされた命令INSrを、各エントリ42に保持された優先度情報等に基づいて選択する。そして、第1選択部50は、選択した命令INSrを示す識別情報を、第2保持部60内の複数のエントリ62のいずれかに格納する。これにより、複数のエントリ42に保持された命令INSdのうちの一部の命令INSrは、第2保持部60に登録される。
なお、例えば、第2保持部60に登録された命令INSrに対応する命令INSdは、命令INSdに対応する命令INSeが命令実行部80で実行されるまでエントリ42に保持される。すなわち、第1選択部50は、命令INSrに関する識別情報をエントリ42からエントリ62にコピーする。
第2保持部60は、複数のエントリ42より少ない数の複数のエントリ62を有する。エントリ62に保持された識別情報は、命令間の依存関係を検出する際に使用される。したがって、エントリ42からエントリ62に格納される識別情報は、命令INSrに含まれる全ての情報でもよいし、命令INSrのオペランド等を含む一部の情報でもよい。また、各エントリ62は、命令INSrが実行可能な状態かを示すレディ情報等を保持する。
第2選択部70は、第2保持部60に登録された命令INSrのうち、実行可能な命令INSeを順次選択し、選択した命令INSeを命令実行部80に投入する。さらに、第2選択部70は、命令実行部80に投入した命令INSe(以下、第1の命令INSeとも称する)と第2保持部60に登録された命令INSrとの依存関係を検出する。例えば、第2選択部70は、第2保持部60に登録された各々の命令INSrと命令実行部80に投入した命令INSeとの間でレジスタの依存関係があるかを検出する。
第2保持部60内のエントリ62の数は第1保持部40内のエントリ42の数より少ない。このため、第2保持部60に登録された命令INSrを対象とした命令間の依存関係の検出にかかる時間は、第1保持部40に登録された命令INSdを対象とした場合に比べて減少する。これにより、命令実行部80の出力データ(第1の命令INSeの実行結果)を後続する命令INSの入力データとして図示しないレジスタ等に格納する前に命令実行部80にバイパスするバイパス処理の実行効率を向上することができる。この結果、命令INSの処理効率を向上することができる。
換言すれば、第1保持部40に登録された命令INSd間の依存関係を検出する手法では、バイパス処理の実行効率が低下し、命令INSの処理効率が低下する場合がある。例えば、第1選択部50および第2保持部60が省かれた構成では、依存関係を検出する際に着目する命令INSは、第2保持部60よりエントリ数の多い第1保持部40に登録された命令INSdである。このため、第1選択部50および第2保持部60が省かれた構成では、第1の命令INSが命令実行部80に投入されたサイクル内に命令間の依存関係の検出が終了しない場合がある。この場合、第1の命令INSが命令実行部80に投入されたサイクルの次のサイクルでは、第1の命令INSの実行結果が第1の命令INSに後続する第2の命令INSで使用される場合でも、第2の命令INSは、命令実行部80に投入されない。
これに対し、命令保持部30では、依存関係を検出する際に着目する命令INSは、第1保持部40よりエントリ数の少ない第2保持部60に登録された命令INSrである。したがって、命令間の依存関係の検出にかかる時間が1サイクル以下になるように、第2保持部60内のエントリ62の数を設定することにより、第1の命令INSeが命令実行部80に投入されたサイクル内に命令間の依存関係の検出を終了させることができる。これにより、演算処理装置10は、命令保持部30に登録される命令INSdの数が増加した場合でも、第1選択部50および第2保持部60が省かれた構成に比べて、命令INSの処理効率を向上できる。
このように、命令保持部30は、命令デコード部20から順次受ける命令INSdを保持する。これにより、命令デコード部20でデコードされた命令INSdは、命令保持部30に登録される。そして、命令保持部30は、登録された命令INSdを実行可能な命令INSeから順に命令実行部80に投入する。例えば、命令保持部30は、実行可能な命令INSeを順次選択し、選択した命令INSeを命令実行部80に出力する。
命令実行部80は、実行可能な命令INSeを命令保持部30から受け、受けた命令INSeを実行する。
なお、演算処理装置10の構成は、図1に示す例に限定されない。例えば、第2保持部60は、命令保持部30の外部に配置されてもよい。また、命令INSeが命令実行部80に投入されたサイクル内に、第1保持部40からの識別情報のコピーおよび命令間の依存関係の検出を終了させることができる場合、第2保持部60内のエントリ62の数は1つでもよい。
以上、図1に示す実施形態では、命令保持部30(リザベーションステーション)に保持される命令INSの数が増加した場合でも、命令INSの処理効率が低下することを抑制できる。
図2は、演算処理装置および演算処理装置の処理方法の別の実施形態を示す。図1で説明した要素と同一または同様の要素については、同一または同様の符号を付し、これ等については、詳細な説明を省略する。なお、図2では、図を見やすくするために、命令制御部400と実行部700との間に配置されるラッチ(例えば、図3に示すラッチ部210内のラッチ211A等)の記載を省略している。
図2に示す演算処理装置100は、例えば、命令INSを複数のステージに分けて実行するパイプラインを有するCPU等のプロセッサである。
演算処理装置100は、CPUコア等のコア部200を有し、コア部200は、記憶部300、命令制御部400および実行部700を有する。
記憶部300は、命令キャッシュ320およびデータキャッシュ310を有する。命令キャッシュ320は、実行部700が実行する命令INSを記憶する。データキャッシュ310は、実行部700で扱うデータを記憶する。例えば、命令キャッシュ320およびデータキャッシュ310は、キャッシュメモリである。
命令制御部400は、命令バッファ410、命令デコード部420、レジスタ管理部430、バイパス制御テーブル440およびリザベーションステーション500、600を有する。また、実行部700は、演算部710、720、アドレス生成部730、アップデートバッファ740およびレジスタ750を有する。
命令バッファ410は、命令キャッシュ320から読み出される命令INSiを保持する複数の領域を有する。例えば、命令バッファ410は、命令キャッシュ320から順次受ける命令INSiを保持し、保持した命令INSiを命令デコード部420に順次転送する。
命令デコード部420は、命令キャッシュ320から命令バッファ410を介して受けた命令INSiをインオーダでデコードする。そして、命令デコード部420は、デコードした命令INSdをリザベーションステーション500またはリザベーションステーション600にデコード結果に基づいて出力する。
例えば、命令デコード部420は、デコードした命令INSdがロード命令やストア命令などのアクセスアドレスの計算を伴うメモリアクセス命令である場合に、命令INSdをリザベーションステーション600に出力する。また、命令デコード部420は、デコードした命令INSdが演算命令(例えば、固定小数点演算命令)である場合に、命令INSdをリザベーションステーション500に出力する。
ここで、例えば、デコードされた命令INSdは、命令INSdの実行結果が格納されるアップデートバッファ740のアドレス、命令INSdで扱うデータが格納されるレジスタ750のアドレス、即値、命令INSdを識別するオペコード等を示す情報を有する。
例えば、命令デコード部420は、命令INSdをデコードし、命令INSdの実行結果の書き込み先のレジスタ750のアドレスに対してアップデートバッファ740のアドレスを割り当てる。そして、命令デコード部420は、命令INSdの書き込み先として割り当てたアップデートバッファ740のアドレス等を示す情報AINFをレジスタ管理部430に出力する。以下、アップデートバッファ740のアドレスは、UBA(Update Buffer Address)とも称される。
なお、情報AINFは、例えば、命令INSdの実行結果の書き込み先として割り当てられたUBAの他に、命令INSdの入力データが格納されるレジスタ750のアドレス、命令INSdの実行結果が書き込まれるレジスタ750のアドレス等を含む。以下、命令INSdの入力データが格納されるレジスタ750のアドレスは、参照先のレジスタ750のアドレスとも称され、命令INSdの実行結果が書き込まれるレジスタ750のアドレスは、書き込み先のレジスタ750のアドレスとも称される。
レジスタ管理部430は、アップデートバッファ740のアドレスとレジスタ750のアドレスとの対応を示すレジスタテーブル432を有する。例えば、レジスタ管理部430は、命令デコード部420から各リザベーションステーション500、600に命令INSdが発行される際に、情報AINFを命令デコード部420から受ける。そして、レジスタ管理部430は、命令デコード部420により割り当てられたUBA(情報AINFに含まれるUBA)を、書き込み先のレジスタ750のアドレスに対応するレジスタテーブル432のエントリに登録する。また、レジスタ管理部430は、参照先のレジスタ750のアドレスに対応するUBAがレジスタテーブル432に登録されている場合、参照先のレジスタ750のアドレスに対応するUBAをリザベーションステーション500、600に出力する。
バイパス制御テーブル440は、演算部710等の命令実行部の出力データをレジスタ750に格納する前に後続する命令INSeの入力データとして演算部710等の命令実行部にバイパスするバイパス処理を実現するためのテーブルである。例えば、バイパス制御テーブル440は、アップデートバッファ740に対応したエントリを有する。バイパス制御テーブル440内の各エントリは、バイパス可能となるタイミングで、バイパス可能であることを示す情報(例えば、”1”)に設定される。
例えば、バイパス制御テーブル440内の各エントリは、アップデートバッファ740を使用する命令INSeがリザベーションステーション500、600から実行部700に投入可能となるタイミングで”1”に設定される。バイパス処理が実行された場合、バイパス処理が実行されない場合に比べて、演算処理装置100の処理性能を向上させることができる。また、バイパス制御テーブル440は、データキャッシュ310がキャッシュヒットしたかキャッシュミスしたかを示す情報をデータキャッシュ310から受ける。
リザベーションステーション500、600は、命令デコード部420でデコードされた命令INSdが登録され、登録された命令INSdを実行可能な命令INSeから順に命令実行部(例えば、演算部710、720等)に投入する命令保持部の一例である。リザベーションステーション500は、固定小数点演算命令用のリザベーションステーション(RSE:Reservation Station for Execution)である。また、リザベーションステーション600は、メモリアクセス命令用のリザベーションステーション(RSA:Reservation Station for Address)である。
例えば、リザベーションステーション500は、命令デコード部420から供給される命令INSdを保持し、保持した命令INSdを実行可能な命令INSeから順に実行部700(より詳細には、演算部710、720)に投入する。また、リザベーションステーション600は、命令デコード部420から供給される命令INSdを保持し、保持した命令INSdを実行可能な命令INSeから順に実行部700(より詳細には、アドレス生成部730)に投入する。
リザベーションステーション500、600から実行部700への命令INSeの投入の判断は、各リザベーションステーション500、600で実行される。例えば、リザベーションステーション500、600は、命令デコード部420からの命令INSdの発行時に参照したUBAに対応するバイパス制御テーブル440のエントリを参照し、実行部700に投入可能な命令INSeを検出する。
リザベーションステーション500、600の処理により、命令デコード部420でデコードされた命令INSdは、プログラム順に拘わらず実行可能な命令INSeからアウトオブオーダで実行される。リザベーションステーション500の詳細は、図3以降で説明する。
演算部710、720およびアドレス生成部730は、デコードされた命令INSを実行する命令実行部の一例である。演算部710、720は、固定小数点の演算部である。例えば、演算部710、720は、リザベーションステーション500から投入される命令INSeに基づく演算(例えば、固定小数点の演算)を、アップデートバッファ740、レジスタ750等を参照して実行する。また、アドレス生成部730は、リザベーションステーション600から投入される命令INSeに基づく演算(例えば、アドレス計算)を、アップデートバッファ740、レジスタ750等を参照して実行する。
例えば、レジスタテーブル432にUBAが登録されている命令INSeは、アップデートバッファ740を参照して実行され、レジスタテーブル432にUBAが登録されていない命令INSeは、レジスタ750を参照して実行される。
命令INSeの実行結果(例えば、演算命令では、固定小数点の演算結果、メモリアクセス命令では、データキャッシュから読み出されるデータ)は、アップデートバッファ740に書き込まれる。なお、命令INSeはアウトオブオーダで実行されるため、演算部710等による演算の終了時は、命令INSeの完了時とは限らない。命令INSeの完了は、例えば、図示しないコミットスタックエントリ(CSE:Commit Stack Entry)等により実行部700に通知される。
命令INSeの実行結果は、命令INSeの完了時に、アップデートバッファ740からレジスタ750に書き込まれる。このため、レジスタテーブル432に登録されたUBAは、対応する命令INSeが完了したときに無効にされる。また、リザベーションステーション500、600に保持されたUBA(例えば、レジスタ管理部430からリザベーションステーション500、600に読み出されたUBA)のうち、完了した命令INSeに対応するUBAは、破棄される。
なお、演算処理装置100の構成は、図2に示す例に限定されない。例えば、実行部700は、演算部710、720以外に、浮動小数点の演算部を有してもよい。この場合、実行部700は、浮動小数点の演算部用のリザベーションステーションを有してもよい。
図3は、図2に示したリザベーションステーション500の一例を示す。なお、図3は、図2に示した命令デコード部420が最大で4つの命令INSを並列にインオーダでデコードした場合でも対応可能なリザベーションステーション500を示す。命令デコード部420で並列にインオーダでデコードされる命令INSの数は、4つに限定されない。また、図3に示すリザベーションステーション500では、図を見やすくするために、レジスタ管理部430から受ける信号、バイパス制御テーブル440との間で送受信する信号等に関する記載を省略している。
図3の命令INSdの末尾の括弧内に示した情報INFiは、命令INSdに含まれる情報を示す。例えば、情報INFiは、命令INSdで扱うデータが格納されるアップデートバッファ740のアドレス(UBA)、命令INSdで扱うデータが格納されるレジスタ750のアドレス、即値、オペコード等を含む。また、図3の命令INSrの末尾の括弧内に示した情報INFuは、情報INFiのうちの一部の情報を示す。例えば、情報INFuは、命令間の依存関係の検出に使用される情報(例えば、UBA)である。情報INFoは、情報INFiのうちの情報INFuを除いた情報である。例えば、情報INFoは、リザベーションステーション500では使用されないが、実行部700で使用される情報である。情報PIDは、エントリ524(524A、524B)を識別する識別情報である。
なお、図3では、情報PIDの流れを分かりやすくするために、リザベーションステーション500と図2に示した演算部710、720との間に配置されるラッチ部210も記載している。例えば、ラッチ部210は、ラッチ211(211A、211B)、212(212A、212B)、213(213A、213B)、214(214A、214B)を有する。
リザベーションステーション500は、保持部520、540と、選択部510(510A、510B)、530、550、560とを有する。保持部520は、所定数のエントリ524(524A、524B)を含む複数の第3保持部522(522A、522B)を有する第1保持部の一例である。以下、第3保持部522(522A、522B)は、保持部522(522A、522B)とも称される。
選択部510Aは、図2に示した命令デコード部420でデコードされた命令INSdを受ける。図3に示す例では、選択部510Aは、最大で4個の命令INSdを互いに同じサイクルに受ける。そして、選択部510Aは、命令デコード部420から受けた命令INSdを、保持部522A内の複数のエントリ524Aのうちの空きエントリ524Aに登録する。これにより、命令INSdに含まれる情報INFiは、保持部522A内の複数のエントリ524Aのいずれかに保持される。
選択部510Bは、選択部510Aと同一または同様である。例えば、選択部510Bは、命令デコード部420から受けた命令INSdを、保持部522B内の複数のエントリ524Bのうちの空きエントリ524Aに登録する。なお、命令INSdを保持部522Aと保持部522Bとのどちらに登録するかは、命令デコード部420から指示される。
保持部520は、保持部522A、522Bを有する。保持部522Aは、命令デコード部420でデコードされた命令INSdを保持する複数のエントリ524Aを有する。例えば、選択部510Aにより選択されたエントリ524Aは、命令デコード部420から選択部510Aを介して受けた命令INSdを保持する。これにより、命令デコード部420でデコードされた命令INSdは、保持部522Aに登録される。
また、各エントリ524Aは、有効フラグ、レディフラグ、コピーフラグ、オールダーフラグ等の複数のフラグを保持する。有効フラグは、エントリ524Aが有効であることを示す。レディフラグは、命令INSdが実行可能な状態であることを示す。コピーフラグは、登録情報の一例であり、自身のエントリ524Aに登録された命令INSdが保持部540に登録されたことを示す。オールダーフラグは、自身のエントリ524Aに登録された命令INSdの命令デコード部20でのデコードの順番が他のエントリ524Aに登録された命令INSdより古いか否かを示す。例えば、1つのエントリ524Aが保持するオールダーフラグのビット数は、他のエントリ524Aの数に対応する。
保持部522Bは、保持部522Aと同一または同様である。例えば、選択部510Bにより選択されたエントリ524Bは、命令デコード部420から選択部510Bを介して受けた命令INSdを保持する。これにより、命令デコード部420でデコードされた命令INSdは、保持部522Bに登録される。また、各エントリ524Bは、有効フラグ、レディフラグ、コピーフラグ、オールダーフラグ等の複数のフラグを保持する。
図3に示す例では、保持部522A内の複数のエントリ524Aと保持部522B内の複数のエントリ524Bとが分かれているため、エントリ524Aとエントリ524Bとを一緒にした構成に比べて、オールダーフラグのビット数を低減することができる。このため、命令デコード部420で最古にデコードされた命令INSrを各エントリ524A、524Bに保持されたオールダーフラグ等に基づいて選択する選択部530の回路規模の増加を抑制することができる。
選択部530は、保持部540に登録する命令INSrの選択を複数の保持部522(522A、522B)で並列に実行して、複数の保持部522の各々から保持部540に命令INSrを登録する第1選択部の一例である。例えば、選択部530は、互いに並列に動作する選択部532Aおよび選択部532Bを有する。
選択部532Aは、保持部540に登録する命令INSrを保持部522A内の複数のエントリ524Aに保持された命令INSdから選択する。例えば、選択部532Aは、複数のエントリ524Aに保持された命令INSdのうち、命令デコード部420で最古にデコードされた命令INSrを、各エントリ524Aに保持されたオールダーフラグ等に基づいて選択する。そして、選択部532Aは、選択した命令INSrが登録されたエントリ524Aの識別情報PIDと選択した命令INSrに含まれる一部の情報INFuとを、保持部540内の複数のエントリ542のいずれかに格納する。
また、選択部532Aは、図2に示したバイパス制御テーブル440を参照し、実行可能な命令INSd(実行部700に投入可能な命令INSd)がエントリ524Aに登録されているかを各サイクルで判定する。そして、選択部532Aは、エントリ524Aに登録された命令INSdが実行可能な状態に遷移した場合、実行可能な状態に遷移した命令INSdが登録されたエントリ524Aのレディフラグを実行可能であることを示す情報(例えば、”1”)に設定する。
選択部532Bは、選択部532Aと同一または同様である。例えば、選択部532Bは、複数のエントリ524Bに保持された命令INSdのうち、命令デコード部420で最古にデコードされた命令INSrを、各エントリ524Bに保持されたオールダーフラグ等に基づいて選択する。そして、選択部532Bは、選択した命令INSrが登録されたエントリ524Bの識別情報PIDと選択した命令INSrに含まれる一部の情報INFuとを、保持部540内の複数のエントリ542のいずれかに格納する。なお、選択部530から出力される識別情報PIDは、選択部530(選択部532A、532B)で選択した命令INSrを示す情報に対応する。
また、選択部532Bは、バイパス制御テーブル440を参照し、実行可能な命令INSd(実行部700に投入可能な命令INSd)がエントリ524Bに登録されているかを各サイクルで判定する。そして、選択部532Bは、エントリ524Bに登録された命令INSdが実行可能な状態に遷移した場合、実行可能な状態に遷移した命令INSdが登録されたエントリ524Bのレディフラグを実行可能であることを示す情報(例えば、”1”)に設定する。
このように、選択部530は、複数のエントリ524に保持された命令INSdのうちの一部の命令INSrを、保持部540に登録する。
保持部540は、複数のエントリ524Aの数より少なく、かつ、複数のエントリ524Bの数より少ない数の複数のエントリ542を有する。例えば、各エントリ542は、選択部530で選択された命令INSrに関する情報INFu、PIDを保持する。また、各エントリ542は、有効フラグ、レディフラグ等の複数のフラグを保持する。
保持部540内の複数のエントリ542のそれぞれには、保持部524A、524Bからの命令INSrの登録の順番を示す優先順位(例えば、命令INSrのエントリ542への登録の順番が古いほど高くなる優先順位)が割り当てられる。例えば、エントリ542を識別する識別番号は、優先順位を示す情報として使用されてもよい。
保持部540内の複数のエントリ542に登録された命令INSrは、選択部550により、実行可能な命令INSrのうちの優先順位の高い命令INSeから順に演算部710、720に投入される。なお、各エントリ542に登録された命令INSrは、各エントリ542が保持する識別情報PIDで示されるエントリ524に登録された命令INSである。
また、各エントリ542に登録された命令INSrは、自身のエントリ542の優先順位より高い優先順位のエントリ542に空きがある場合、自身のエントリ542の優先順位より高い優先順位のエントリ542に移動する。以下、各エントリ542に保持された情報が自身のエントリ542の優先順位より高い優先順位のエントリ542に移動することは、バブルアップとも称される。図3に示す例では、1サイクルに保持部520から保持部540に投入される命令INSrの最大数が2つであるため、1サイクルでのバブルアップによる移動量(エントリ数)の最大は、2である。
選択部550は、保持部540に登録された命令INSrのうちの実行可能な命令INSrを優先順位の高い命令INSeから順に選択する。そして、選択部550は、選択した命令INSeを示す識別情報PID(命令INSeに対応する命令INSdが登録されたエントリ524の識別情報PID)と選択した命令INSeに含まれる一部の情報INFuとをラッチ部210に出力する。これにより、命令INSeは、リザベーションステーション500からラッチ部210を介して図2に示した実行部700に投入される。
例えば、選択部550は、1サイクルに2つの命令INSeを選択した場合、2つの命令INSeをラッチ部210を介して図2に示した演算部710、720にそれぞれ投入する。また、選択部550は、1サイクルに1つの命令INSeを選択した場合、命令INSeをラッチ部210を介して演算部710、720のいずれかに投入する。このように、選択部550は、演算部710等の命令実行部に命令INSeを投入する場合、命令実行部に投入する命令INSeとして選択した命令INSeの情報INFuを命令実行部に転送する。
さらに、選択部550は、演算部710、720に投入した命令INSeと保持部540に登録された命令INSrとの依存関係を、各エントリ542に保持された情報INFu(例えば、UBA)に基づいて検出する。また、選択部550は、バイパス制御テーブル440を参照し、実行可能な命令INSr(実行部700に投入可能な命令INSr)がエントリ542に登録されているかを各サイクルで判定する。
選択部560は、デコードされた命令INSdに含まれる情報INFiのうち、命令間の依存関係の検出に使用される情報INFuを除いた情報INFoを複数のエントリ524A、524Bから受ける。また、選択部560は、演算部710等の命令実行部に投入される命令INSeを示す識別情報PIDを選択部550からラッチ部210(より詳細には、ラッチ部210内のラッチ211、212、213)を介して受ける。
そして、選択部560は、複数のエントリ524A、524Bから受けた情報INFoのうち、演算部710等の命令実行部に投入される命令INSeの情報INFoを、選択部550からラッチ部210を介して受けた情報PIDに基づいて選択する。例えば、選択部560は、複数のエントリ524A、524Bから受けた情報INFoのうち、選択部550からラッチ部210を介して受けた情報PIDに対応する命令INSdの情報INFoを命令INSeの情報INFoとして選択する。そして、選択部560は、演算部710等の命令実行部に投入される命令INSeの情報INFoをラッチ部210(より詳細には、ラッチ部210内のラッチ214)を介して演算部710等の命令実行部に転送する。
このように、命令INSeのうちの情報INFuは、リザベーションステーション500からラッチ211、212、213、214を介して演算部710等の命令実行部に転送される。そして、命令INSeのうちの他の情報INFoは、リザベーションステーション500からラッチ214を介して演算部710等の命令実行部に転送される。このため、情報INFu、INFoをリザベーションステーション500からラッチ211、212、213、214を介して演算部710等の命令実行部に転送する構成に比べて、ラッチ211、212、213のビット数を低減することができる。この結果、ラッチ部210の回路規模の増加を抑制することができる。
なお、リザベーションステーション500から出力された情報INFu、PIDがラッチ211、212、213を通過するまでにかかるサイクルは、レジスタ750から読み出すデータ等を決定するサイクルに対応する。
ここで、リザベーションステーション500を2つに分割した場合、分割した2つのリザベーションステーション(例えば、保持部522A、522B)それぞれに演算部710、720を割り当てることが考えられる。この場合、演算部710、720に投入されるそれぞれの命令INSeの実行にかかるサイクル数の違い等により、演算部710、720の一方が占有されるおそれがある。この場合、分割した2つのリザベーションステーション(例えば、保持部522A、522B)の一方に実行待ちの命令INSdが詰まる等のエントリの偏りが発生するおそれがある。
これに対し、リザベーションステーション500では、保持部540が保持部522A、522Bで共有されるため、1つの保持部540から2つの命令INSeを2つの演算部710、720にそれぞれ投入することができる。これにより、2つの演算部710、720の一方が占有された場合でも、2つの演算部710、720の他方に命令INSeを投入することができ、リザベーションステーション500の詰まり等の発生を抑制することができる。
なお、図2に示したリザベーションステーション600の構成は、リザベーションステーション600からアドレス生成部730に1サイクルに投入される命令INSeの数を除いて、リザベーションステーション500と同一または同様である。また、リザベーションステーション500の構成は、図3に示す例に限定されない。例えば、保持部540内の各エントリ542は、オールダーフラグを有してもよい。また、保持部540内の各エントリ542は、命令INSrの情報INFi(すなわち、情報INFuと情報INFoの両方)を保持してもよい。この場合、選択部560は、省かれてもよい。
図4は、図3に示した各エントリ524、542の状態の一例を示す。なお、図4は、図3に示した保持部520から保持部540に命令INSrを登録する場合のリザベーションステーション500の動作に対応する。図4に示す例では、図3に示した保持部522Aは、16個のエントリ524Aを有し、保持部522Bは、16個のエントリ524Bを有し、保持部540は、8個のエントリ542を有する。すなわち、保持部520は、エントリ524Aとエントリ524Bとを合わせて、32個のエントリ524を有する。なお、エントリ524、エントリ542の数は、図4に示す例に限定されない。
各エントリ524は、有効フラグV、レディフラグR、コピーフラグC、オールダーフラグ(図示せず)、情報INFi等を保持し、各エントリ542は、有効フラグV、レディフラグR、エントリ524の識別情報PID、情報INFu等を保持する。有効フラグV、レディフラグR、コピーフラグCの初期状態は、例えば、”0”である。
情報PID0−PID15は、各エントリ524Bの識別情報PIDを示し、情報PID16−PID31は、各エントリ524Aの識別情報PIDを示す。また、情報INFo0−INFo10は、リザベーションステーション500に登録された11個の命令INSdのそれぞれの情報INFoを示す。情報INFu0−INFu10は、リザベーションステーション500に登録された11個の命令INSdのそれぞれの情報INFuを示す。
識別番号PNOは、エントリ542を識別する識別番号を示す。図4に示す例では、エントリ542の識別番号PNOが大きくなるほど、エントリ524からエントリ542への命令INSrの登録の順番が古くなり優先順位が高くなる。以下、識別番号PNOが”n(図4では、nは0以上7以下の整数)”のエントリ542は、識別番号PNO”n”のエントリ542とも称される。例えば、識別番号PNOが”0”のエントリ542は、識別番号PNO”0”のエントリ542とも称される。
有効フラグVは、エントリ524、542が有効な場合、”1”に設定され、エントリ524、542が無効な場合、”0”に設定される。例えば、エントリ524の有効フラグVは、命令デコード部420がリザベーションステーション500に命令INSdを発行したときに、対応するエントリ524が有効であることを示す”1”に設定される。そして、エントリ524の有効フラグVは、演算が実行されたときに、対応するエントリ524が無効であることを示す”0”に設定される。
図4に示す例では、16個のエントリ524Aのうち、有効フラグVが”1”である有効なエントリ524Aは、1サイクル目および2サイクル目とも、識別情報PID16−PID21で示されるエントリ524Aである。また、16個のエントリ524Bのうち、有効フラグVが”1”である有効なエントリ524Bは、1サイクル目および2サイクル目とも、識別情報PID0−PID4で示されるエントリ524Bである。
レディフラグRは、エントリ524、542に登録された命令INSd、INSrが実行可能な場合、”1”に設定され、エントリ524、542に登録された命令INSd、INSrが実行可能でない場合、”0”に設定される。例えば、選択部530、550は、バイパス制御テーブル440を参照してレディフラグRを設定する。
コピーフラグCは、エントリ524に登録された命令INSdがエントリ542に登録された場合、”1”に設定される。なお、例えば、図6に示すように、有効なエントリ542の内容が上書きされた場合、上書きによりエントリ542から削除された命令INSdを保持しているエントリ524のコピーフラグCは、”0”に設定される。
図4では、オールダーフラグの記載を省略しているため、情報INFo、INFuの末尾の数字が小さいほど命令デコード部420でのデコードの順番が古く優先順位が高いものとして、エントリ524からエントリ542への命令INSrの登録の動作を説明する。
1サイクル目では、有効なエントリ524Aのうち、命令デコード部420で最古にデコードされた命令INSd(優先順位の最も高い命令INSd)が登録されたエントリ524Aは、識別情報PID16で示されるエントリ524Aである。また、識別情報PID16で示されるエントリ524A以外の有効なエントリ524A(識別情報PID17−PID21で示されるエントリ524A)のレディフラグRは、全て”0”である。このため、識別情報PID16で示されるエントリ524Aに登録された命令INSdは、エントリ542に登録される命令INSrとして選択される(図4(a))。
また、有効なエントリ524Bのうち、命令デコード部420で最古にデコードされた命令INSdが登録されたエントリ524Bは、識別情報PID0で示されるエントリ524Bである。なお、識別情報PID0で示されるエントリ524B以外の有効なエントリ524B(識別情報PID1−PID4で示されるエントリ524B)のうち、識別情報PID2−PID4で示されるエントリ524BのレディフラグRは、”1”である。
このため、識別情報PID0で示されるエントリ524Bに登録された命令INSdは、エントリ542に登録される命令INSrとして選択されない。この場合、レディフラグRが”1”に設定されたエントリ524Bに登録された命令INSdのうち、命令デコード部420で最古にデコードされた命令INSdがエントリ542に登録される命令INSrとして選択される。
例えば、識別情報PID2−PID4で示されるエントリ524Bのうち、命令デコード部420で最古にデコードされた命令INSd(優先順位の最も高い命令INSd)が登録されたエントリ524Bは、識別情報PID2で示されるエントリ524Bである。このため、識別情報PID2で示されるエントリ524Bに登録された命令INSdは、エントリ542に登録される命令INSrとして選択される(図4(b))。
このように、1サイクル目では、保持部540に登録する命令INSrのエントリ524として、保持部522A、522Bから識別情報PID16で示されるエントリ524Aおよび識別情報PID2で示されるエントリ524Bがそれぞれ選択される。これにより、例えば、識別情報PID16で示されるエントリ524Aに保持された情報INFu1と識別情報PID16は、識別番号PNO”1”のエントリ542にコピーされる。また、識別情報PID2で示されるエントリ524Bに保持された情報INFu3と識別情報PID2は、識別番号PNO”0”のエントリ542にコピーされる。
2サイクル目では、1サイクル目に選択されたエントリ524Aの識別情報PID16と、識別情報PID16で示されるエントリ524Aの情報INFu1は、識別番号PNO”1”のエントリ542に記録される。識別情報PID16で示されるエントリ524Aの情報INFu1等が識別番号PNO”1”のエントリ542にコピーされたため、識別情報PID16で示されるエントリ524AのコピーフラグCは、”1”に設定される。また、識別番号PNO”1”のエントリ542の有効フラグVおよびレディフラグRは、識別情報PID16で示されるエントリ524Aの有効フラグVおよびレディフラグRと同じ値(”1”および”0”)にそれぞれ設定される。
同様に、1サイクル目に選択されたエントリ524Bの識別情報PID2と、識別情報PID2で示されるエントリ524Bの情報INFu3は、識別番号PNO”0”のエントリ542に記録される。識別情報PID2で示されるエントリ524Bの情報INFu3等が識別番号PNO”0”のエントリ542にコピーされたため、識別情報PID2で示されるエントリ524BのコピーフラグCは、”1”に設定される。また、識別番号PNO”0”のエントリ542の有効フラグVおよびレディフラグRは、識別情報PID2で示されるエントリ524Bの有効フラグVおよびレディフラグRと同じ値(”1”および”1”)にそれぞれ設定される。
また、保持部540に登録する命令INSrのエントリ524として、保持部522A、522Bから識別情報PID17で示されるエントリ524Aおよび識別情報PID3で示されるエントリ524Bがそれぞれ選択される(図4(c)、(d))。なお、コピーフラグCが”1”に設定されたエントリ524(識別情報PID16で示されるエントリ524A、識別情報PID2で示されるエントリ524B)は、選択の対象から外れる。保持部540に登録する命令INSrのエントリ524を選択する場合のその他の条件は、1サイクル目と同一または同様である。
例えば、識別情報PID17で示されるエントリ524Aに保持された情報INFu4と識別情報PID17は、識別番号PNO”1”のエントリ542にコピーされる。また、識別情報PID3で示されるエントリ524Bに保持された情報INFu7と識別情報PID3は、識別番号PNO”0”のエントリ542にコピーされる。なお、識別番号PNO”0”のエントリ542および識別番号PNO”1”のエントリ542は、バブルアップにより、エントリ524から受ける識別情報PID等の情報を保持可能な空きエントリになる。
例えば、識別番号PNO”0”のエントリ542および識別番号PNO”1”のエントリ542に保持された識別情報PID等の情報は、識別番号PNO”1”のエントリ542より優先順位の高いエントリ542に移動する(図4(e)、(f))。なお、識別番号PNO”0”のエントリ542のレディフラグRが”1”であるため、識別番号PNO”0”のエントリ542に登録された命令INSr(識別情報PID2で示される命令INSd)は、実行部700に投入する命令INSeとして選択される。このため、識別番号PNO”0”のエントリ542に保持された識別情報PID2等の情報の移動先のエントリ542の有効フラグVは、”0”にリセットされる。
ここで、各エントリ542に保持された識別情報PID(PID2、PID16)は、図3で説明したように、実行部700に投入する命令INSeの情報INFoを保持部524A、524Bから選択する場合に使用される。また、各エントリ542に保持された識別情報PIDは、演算部710等による演算の完了時にエントリ524の有効フラグVをリセットする場合にも使用される。
図5は、図3に示した各エントリ524、542の状態の別の例を示す。なお、図5は、図4に示した2サイクル目の続きを示す。図5に示す2サイクル目の各エントリ524、542の状態は、図4に示した2サイクル目の各エントリ524、542の状態である。したがって、図5では、3サイクル目の各エントリ524、542の状態を説明する。
3サイクル目では、情報PID16、INFu1は、2サイクル目のバブルアップにより、識別番号PNO”1”のエントリ542から移動し、識別番号PNO”3”のエントリ542に保持される。情報PID2、INFu3は、実行部700に投入されたため、保持部540から消去される。
また、2サイクル目に選択されたエントリ524Aの識別情報PID17と、識別情報PID17で示されるエントリ524Aの情報INFu4は、識別番号PNO”1”のエントリ542に記録される。同様に、2サイクル目に選択されたエントリ524Bの識別情報PID3と、識別情報PID3で示されるエントリ524Bの情報INFu7は、識別番号PNO”0”のエントリ542に記録される。
そして、2サイクル目と同様の選択方法により、保持部540に登録する命令INSrのエントリ524が選択される。例えば、保持部540に登録する命令INSrのエントリ524として、保持部522A、522Bから識別情報PID18で示されるエントリ524Aおよび識別情報PID4で示されるエントリ524Bがそれぞれ選択される(図4(a)、(b))。
これにより、例えば、識別情報PID18で示されるエントリ524Aに保持された情報INFu5と識別情報PID18は、識別番号PNO”1”のエントリ542にコピーされる。また、識別情報PID4で示されるエントリ524Bに保持された情報INFu8と識別情報PID4は、識別番号PNO”0”のエントリ542にコピーされる。
なお、識別番号PNO”0”のエントリ542および識別番号PNO”1”のエントリ542は、保持部540内でのバブルアップにより、空きエントリになる。
例えば、識別番号PNO”3”のエントリ542に保持された情報PID16、INFu1は、識別番号PNO”5”のエントリ542に移動する(図4(c))。識別番号PNO”1”のエントリ542に保持された情報PID17、INFu4は、識別番号PNO”3”のエントリ542に移動する(図4(d))。識別番号PNO”0”のエントリ542に登録された命令INSr(識別情報PID3で示される命令INSd)は、実行部700に投入する命令INSeとして選択される(図4(e))。このため、識別番号PNO”0”のエントリ542に保持された識別情報PID2等の情報の移動先のエントリ542の有効フラグVは、”0”にリセットされる。
図6は、図3に示した各エントリ524、542の状態の別の例を示す。なお、図6は、保持部540内の全てのエントリ542が埋まっている場合のリザベーションステーション500の動作に対応する。
1サイクル目では、保持部540内の全てのエントリ542は、レディフラグRが”0”のエントリ542で埋まっている。一方、保持部522A、522Bには、有効フラグVおよびコピーフラグCがそれぞれ”1”および”0”で、かつ、レディフラグRが”1”のエントリ542が存在する。
例えば、保持部522Aでは、識別情報PID20で示されるエントリ524Aの有効フラグV、レディフラグRおよびコピーフラグCは、それぞれ”1”、”1”および”0”である。また、保持部522Bでは、識別情報PID4で示されるエントリ524Bの有効フラグV、レディフラグRおよびコピーフラグCは、それぞれ”1”、”1”および”0”である。
この場合、保持部540内のエントリ542に上書きするエントリ524として、識別情報PID20で示されるエントリ524Aおよび識別情報PID4で示されるエントリ524Bが保持部522A、522Bからそれぞれ選択される(図6(a)、(b))。これにより、例えば、識別情報PID20で示されるエントリ524Aに保持された情報INFu9と識別情報PID20は、識別番号PNO”1”のエントリ542に上書きされる。また、識別情報PID4で示されるエントリ524Bに保持された情報INFu8と識別情報PID4は、識別番号PNO”0”のエントリ542に上書きされる。
なお、情報INFu等が上書きされたエントリ542に保持されていた識別情報PIDで示されるエントリ524のコピーフラグCは、“0”に設定される。例えば、識別番号PNO”1”のエントリ542および識別番号PNO”0”のエントリ542に保持されていた識別情報PID19、PID3で示されるエントリ524A、524BのコピーフラグCは、次のサイクル(2サイクル目)で“0”に設定される。
2サイクル目では、1サイクル目に選択されたエントリ524Aの識別情報PID20と、識別情報PID20で示されるエントリ524Aの情報INFu9は、識別番号PNO”1”のエントリ542に記録される。また、識別番号PNO”1”のエントリ542の有効フラグVおよびレディフラグRは、識別情報PID20で示されるエントリ524Aの有効フラグVおよびレディフラグRと同じ値(”1”および”1”)にそれぞれ設定される。
同様に、1サイクル目に選択されたエントリ524Bの識別情報PID4と、識別情報PID4で示されるエントリ524Bの情報INFu8は、識別番号PNO”0”のエントリ542に記録される。また、識別番号PNO”0”のエントリ542の有効フラグVおよびレディフラグRは、識別情報PID4で示されるエントリ524Bの有効フラグVおよびレディフラグRと同じ値(”1”および”1”)にそれぞれ設定される。
保持部522Aでは、識別情報PID20で示されるエントリ524Aの情報INFu9等が識別番号PNO”1”のエントリ542に上書きされたため、識別情報PID20で示されるエントリ524AのコピーフラグCは、”1”に設定される。また、情報INFu9等の上書きにより識別番号PNO”1”のエントリ542から削除された識別情報PID19で示されるエントリ524AのコピーフラグCは、“0”に設定される。
保持部522Bでは、識別情報PID4で示されるエントリ524Bの情報INFu8等が識別番号PNO”0”のエントリ542に上書きされたため、識別情報PID4で示されるエントリ524BのコピーフラグCは、”1”に設定される。また、情報INFu8等の上書きにより識別番号PNO”0”のエントリ542から削除された識別情報PID13で示されるエントリ524AのコピーフラグCは、“0”に設定される。
これにより、リザベーションステーション500は、実行可能でない命令INSrで保持部540内の全てのエントリ542が埋まっている場合でも、実行部700への命令INSeの投入が滞ることを抑制できる。
例えば、実行可能でない命令INSrで保持部540内の全てのエントリ542が埋まっている場合にエントリ542への上書きが実行されない手段では、保持部520から保持部540への命令INSd(情報INFu等)のコピーが停止する場合がある。この場合、保持部520に登録された命令INSdが保持部540に登録された命令INSrより先に実行可能な状態に遷移した場合でも、実行可能な命令INSdは、保持部540に空きエントリが発生するまで、保持部540にコピーされない。
これに対し、選択部530は、保持部520に登録された命令INSdが保持部540に登録された命令INSrより先に実行可能な状態に遷移した場合、実行可能な命令INSdを保持部520から保持部540内のエントリ542に上書きする。これにより、実行部700への命令INSeの投入を効率よく実行することができ、演算処理装置の性能低下を抑制することができる。
図7は、図3に示した選択部532Aの動作の一例を示す。すなわち、図7は、演算処理装置100の処理方法(すなわち、演算処理装置100の制御方法)を示す。なお、図7は、複数のエントリ524Aのうちの1つのエントリ524A(以下、着目エントリ524Aとも称する)に対する選択部532Aの動作を示す。選択部532Aは、図7に示す動作を、保持部522A内の複数のエントリ524Aのそれぞれに対して並列に実行する。例えば、選択部532Aは、保持部522A内の複数のエントリ524Aにそれぞれ対応し、図7に示す動作を並列に実行する複数の選択回路を有してもよい。
ステップS100では、選択部532Aは、着目エントリ524Aの有効フラグVおよびコピーフラグCがそれぞれ”1”および”0”であるか否かを判定する。すなわち、選択部532Aは、着目エントリ524A(より詳細には、着目エントリ524Aに保持された情報INFu、着目エントリ524Aの識別情報PID等)が保持部540内のエントリ542に既にコピーされたか否かを判定する。
着目エントリ524Aの有効フラグVおよびコピーフラグCがそれぞれ”1”および”0”である場合、選択部532Aの動作は、ステップS110に移る。一方、着目エントリ524Aの有効フラグVおよびコピーフラグCがそれぞれ”1”および”0”でない場合、選択部532Aは、着目エントリ524Aをエントリ542にコピーせずに、着目エントリ524Aに関する処理を終了する。
例えば、着目エントリ524Aの有効フラグVおよびコピーフラグCの両方が”1”である場合、選択部532Aは、着目エントリ524Aが保持部540内のエントリ542に既にコピーされていると判定する。このため、選択部532Aは、着目エントリ524Aをエントリ542にコピーせずに、着目エントリ524Aに関する処理を終了する。また、着目エントリ524Aの有効フラグVが”0”である場合、着目エントリ524Aは空きエントリであるため、選択部532Aは、着目エントリ524Aをエントリ542にコピーせずに、着目エントリ524Aに関する処理を終了する。
ステップS110では、選択部532Aは、着目エントリ524AのレディフラグRが”1”であるか否かを判定する。すなわち、選択部532Aは、着目エントリ524Aに保持された命令INSdが実行可能か否かを判定する。
ここで、レディフラグRおよびコピーフラグCがそれぞれ”1”および”0”のエントリ524Aは、実行可能な命令INSd(実行部700に投入可能な命令INSd)を保持しているが、エントリ542にコピーされていないエントリ524Aである。したがって、レディフラグRが”1”のエントリ524Aに保持された命令INSdは、エントリ542に登録された場合、即座に実行部700に投入可能な命令INSdである。このため、レディフラグRが”1”のエントリ524Aは、レディフラグRが”0”のエントリ524Aに比べて、保持部540内のエントリ542にコピーするエントリ524Aを選択する場合の優先順位が高い。
着目エントリ524AのレディフラグRが”1”である場合、選択部532Aの動作は、ステップS120に移る。一方、着目エントリ524AのレディフラグRが”1”でない場合(すなわち、着目エントリ524AのレディフラグRが”0”である場合)、選択部532Aの動作は、ステップS200に移る。
ステップS120では、選択部532Aは、有効フラグV、レディフラグRおよびコピーフラグCがそれぞれ”1”、”1”および”0”のエントリ524Aの中で、着目エントリ524Aが最古のエントリ524Aか否かを判定する。なお、最古のエントリ524Aは、判定対象のエントリ524Aに保持された命令INSdのうち、命令デコード部420で最古にデコードされた命令INSdを保持しているエントリ524Aである。
ステップS120の判定は、例えば、着目エントリ524Aのオールダーフラグの全ビットと、着目エントリ524Aのオールダーフラグの各ビットに対応するエントリ524AのレディフラグRおよびコピーフラグCとを用いて、実行される。例えば、選択部532Aは、レディフラグRおよびコピーフラグCがそれぞれ”1”および”0”で、着目エントリ524Aより古いエントリ524Aが保持部522Aに存在するか否かを判定する。
なお、着目エントリ524Aより古いエントリ524Aは、命令デコード部420でのデコードの順番が着目エントリ524Aに保持された命令INSdより古い命令INSdを保持しているエントリ524Aである。着目エントリ524Aより古いエントリ524Aが保持部522Aに存在するか否かは、着目エントリ524Aのオールダーフラグを参照することにより判定される。
有効フラグV、レディフラグRおよびコピーフラグCがそれぞれ”1”、”1”および”0”のエントリ524Aの中で、着目エントリ524Aが最古のエントリ524Aである場合、選択部532Aの動作は、ステップS130に移る。なお、有効フラグV、レディフラグRおよびコピーフラグCがそれぞれ”1”、”1”および”0”のエントリ524Aが着目エントリ524Aのみの場合、着目エントリ524Aは、最古のエントリ524Aと判定される。
一方、有効フラグV、レディフラグRおよびコピーフラグCがそれぞれ”1”、”1”および”0”のエントリ524Aの中で、着目エントリ524Aが最古のエントリ524Aでない場合、着目エントリ524Aに関する選択部532Aの動作は、終了する。この場合、着目エントリ524Aを除く他エントリ524Aのいずれかがエントリ542にコピーされるため、選択部532Aは、着目エントリ524Aをエントリ542にコピーせずに、着目エントリ524Aに関する処理を終了する。
ステップS130では、選択部532Aは、保持部540内の全てのエントリ542の有効フラグVおよびレディフラグRがそれぞれ”1”および”0”であるか否かを判定する。すなわち、選択部532Aは、保持部540内に空きエントリがなく、全てのエントリ542のレディフラグRが”0”であるかを判定する。これにより、着目エントリ524Aをエントリ542に上書きするか否かが判定される。
保持部540内の全てのエントリ542の有効フラグVおよびレディフラグRがそれぞれ”1”および”0”である場合、選択部532Aの動作は、ステップS140に移る。一方、保持部540内の複数のエントリ542のいずれかの有効フラグVおよびレディフラグRがそれぞれ”1”および”0”でない場合、選択部532Aの動作は、ステップS220に移る。例えば、保持部540内の複数のエントリ542のいずれかの有効フラグVが”0”の場合、ステップS220においてエントリ542に空きが有ると判定され、着目エントリ524Aは、ステップS230においてエントリ542にコピーされる。
ステップS140では、選択部532Aは、着目エントリ524Aをエントリ542に上書きする。例えば、選択部532Aは、着目エントリ524Aに登録された命令INSdに含まれる一部の情報INFuと着目エントリ524Aを示す識別情報PIDとを、エントリ542に上書きする。この場合、選択部532Aは、上書きによりエントリ542から削除された識別情報PIDで示されるエントリ524AのコピーフラグCを”0”に設定する。
このように、選択部532Aは、複数のエントリ542に空きがなく、保持部540に登録された命令INSrのいずれも実行可能でない場合、エントリ524Aに保持された実行可能な命令INSdを示す識別情報PID等の情報をエントリ542に上書きする。例えば、選択部532Aは、保持部540に登録された命令INSrのいずれかが実行可能な状態に遷移する前に複数のエントリ524Aに保持された命令INSdのいずれかが実行可能な状態に遷移した場合、ステップS140の処理を実行する。そして、上書きにより保持部540から削除された命令INS(INSd)を保持しているエントリ524AのコピーフラグCを、命令INSdが保持部540に登録されていないことを示す初期状態(”0”)に変更する。
ステップS200では、選択部532Aは、有効フラグV、レディフラグRおよびコピーフラグCがそれぞれ”1”、”1”および”0”の他エントリ524Aが存在しないかを判定する。すなわち、選択部532Aは、着目エントリ524Aより優先順位の高い他エントリ524Aが存在しないかを判定する。
有効フラグV、レディフラグRおよびコピーフラグCがそれぞれ”1”、”1”および”0”の他エントリ524Aが存在する場合、着目エントリ524Aに関する選択部532Aの動作は、終了する。この場合、他エントリ524Aのいずれかがエントリ542にコピーされるため、選択部532Aは、着目エントリ524Aをエントリ542にコピーせずに、着目エントリ524Aに関する処理を終了する。
一方、有効フラグV、レディフラグRおよびコピーフラグCがそれぞれ”1”、”1”および”0”の他エントリ524Aが存在しない場合、選択部532Aの動作は、ステップS210に移る。
ステップS210では、選択部532Aは、有効フラグV、レディフラグRおよびコピーフラグCがそれぞれ”1”、”0”および”0”のエントリ524Aの中で、着目エントリ524Aが最古のエントリ524Aか否かを判定する。ステップS210の判定は、例えば、着目エントリ524Aのオールダーフラグの全ビットと、着目エントリ524Aのオールダーフラグの各ビットに対応するエントリ524AのレディフラグRおよびコピーフラグCとを用いて、実行される。例えば、選択部532Aは、レディフラグRおよびコピーフラグCの両方が”0”で、着目エントリ524Aより古いエントリ524Aが保持部522Aに存在するか否かを判定する。
有効フラグV、レディフラグRおよびコピーフラグCがそれぞれ”1”、”0”および”0”のエントリ524Aの中で、着目エントリ524Aが最古のエントリ524Aである場合、選択部532Aの動作は、ステップS220に移る。なお、有効フラグV、レディフラグRおよびコピーフラグCがそれぞれ”1”、”0”および”0”のエントリ524Aが着目エントリ524Aのみの場合、着目エントリ524Aは、最古のエントリ524Aと判定される。
一方、有効フラグV、レディフラグRおよびコピーフラグCがそれぞれ”1”、”0”および”0”のエントリ524Aの中で、着目エントリ524Aが最古のエントリ524Aでない場合、着目エントリ524Aに関する選択部532Aの動作は、終了する。この場合、他エントリ524Aのいずれかがエントリ542にコピーされるため、選択部532Aは、着目エントリ524Aをエントリ542にコピーせずに、着目エントリ524Aに関する処理を終了する。
ステップS220では、選択部532Aは、保持部540内のエントリ542に空きが有るか否かを判定する。例えば、選択部532Aは、保持部540内の複数のエントリ542のいずれかの有効フラグVが”0”であるかを判定する。保持部540内のエントリ542に空きが有る場合、選択部532Aの動作は、ステップS230に移る。一方、保持部540内のエントリ542に空きが無い場合、選択部532Aは、着目エントリ524Aをエントリ542にコピーせずに、着目エントリ524Aに関する処理を終了する。
ステップS230では、選択部532Aは、着目エントリ524Aをエントリ542にコピーする。例えば、選択部532Aは、着目エントリ524Aに登録された命令INSdに含まれる一部の情報INFuと着目エントリ524Aを示す識別情報PIDとを、エントリ542のいずれか(空きエントリ)に格納する。
このように、選択部532Aは、複数のエントリ524に保持された命令INSのうち、保持部540に登録されていない命令INSのいずれも実行可能でない場合でも、保持部540に登録する命令INSを選択する。例えば、選択部532Aは、複数のエントリ524に保持された命令INSのうちの保持部540に登録されていない命令INSのうち、命令デコード部420により最古にデコードされた命令INSを保持部540に登録する命令INSとして選択する。
なお、選択部532Aの動作は、図7に示す例に限定されない。また、選択部532Bの動作は、選択部532Aの動作(すなわち、図7に示す動作)と同一または同様である。
図8は、図2に示した演算処理装置100のパイプライン処理の一例を示す。なお、図8は、命令INS2が実行可能な状態になる前に保持部540に登録された場合のパイプライン処理の一例を示す。図8に示した2つの命令INS(INS1、INS2)の間には、レジスタ750の依存関係がある。例えば、命令INS1、INS2は、下記の(1)、(2)にそれぞれ示す加算命令である。
add %g1,4,%g2 ‥‥ (1)
add %g2,8,%g3 ‥‥ (2)
レジスタg1、g2、g3は、例えば、図3に示したレジスタ750内に設けられる固定小数点演算レジスタである。命令INS1は、レジスタg1に格納されたデータと即値”4”とを加算し、加算結果をレジスタg2に格納する加算命令である。命令INS2は、レジスタg2に格納されたデータと即値”8”とを加算し、加算結果をレジスタg3に格納する加算命令である。命令INS2は、命令INS1の実行結果が書き込まれるレジスタg2を参照するため、命令INS1とレジスタ750の依存関係がある。また、命令INS1、INS2は、連続する命令列である。
図8に示した符号D、DT、PP、P、PT、B1、B2、Xは、各パイプラインステージのサイクルを示す。例えば、D(Decode)サイクルでは、命令INSがデコードされ、デコードされた命令INSがリザベーションステーション500に転送される。DT(Decode Transfer)サイクルでは、Dサイクルでデコードされた命令INSがリザベーションステーション500に格納される。PP(Pre Priority)サイクルでは、保持部520に登録された命令INS(より詳細には、命令INSの情報INFu、命令INSを示す情報PID等)が保持部540にコピーされる。
P(Priority)サイクルでは、保持部540から実行部700に投入される命令INSが決定される。PT(Priority Transfer)サイクルでは、Pサイクルで決定された命令INSが実行部700に投入される。B1、B2(Buffer)サイクルでは、演算に必要なデータが決定される。X(Execute)サイクルでは、実行部700が命令INSを実行する。Xサイクルの次のサイクルでは、リネーミングレジスタへの書き込みが実行される。
また、図8に示した符号BCTは、命令INS1に割り当てられたアップデートバッファ740のアドレス(レジスタg2に対応するUBA)に対応したエントリを示す。例えば、”1”に設定されたエントリBCTは、命令INS2がバイパス可能であることを示す。
1サイクル目では、命令INS1のDサイクルの処理および命令INS2のDサイクルの処理が実行される。例えば、図3に示した命令デコード部420は、命令INS1、INS2をデコードし、デコードした命令INS1、INS2をリザベーションステーション500に転送する。なお、命令INS1、INS2は、連続した命令列であるが、同時にデコード可能な命令INSの数の関係により、Dサイクルの処理の実行にずれが生じる場合もある。また、命令INS1、INS2が連続していない場合も、命令INS1、INS2のDサイクルが互いにずれる場合がある。
2サイクル目では、命令INS1のDTサイクルの処理および命令INS2のDTサイクルの処理が実行される。例えば、図3に示した選択部510A(あるいは、選択部510B)は、Dサイクルにデコードされた命令INS1、INS2を、保持部522A内のエントリ524A(あるいは、保持部522B内のエントリ524B)に格納する。以下、命令INS1、INS2が保持部522A内のエントリ524Aに格納されたものとして演算処理装置100のパイプライン処理を説明する。
3サイクル目では、命令INS1のPPサイクルの処理および命令INS2のPPサイクルの処理が実行される。例えば、図3に示した選択部532Aは、命令INS1、INS2(より詳細には、命令INS1、INS2をそれぞれ示す情報PID等)を、保持部522Aから保持部540にコピーする。なお、保持部540内のエントリ542の空き状況等により、DTサイクルからPPサイクルの間が空く場合がある。
また、図8に示す例では、命令INS1は、先行する命令INSとの依存関係がないものとする。すなわち、命令INS1は、保持部522Aに格納されたときには、既に実行可能な状態である。したがって、命令INS1が登録されるエントリ524A、542のレディフラグRは、”1”である。一方、命令INS2は、命令INS1とレジスタ750の依存関係があり、命令INS1が実行部700に投入されていないため、命令INS1が登録されるエントリ524A、542のレディフラグRは、”0”である。
4サイクル目では、命令INS1のエントリ542のレディフラグRが”1”であるため、命令INS1のPサイクルの処理が実行される。例えば、選択部550は、実行部700に投入する命令INSとして、命令INS1を選択する。一方、命令INS2は、エントリ542のレディフラグRが”0”であるため、保持部542に滞留する。
また、選択部550は、実行部700に投入する命令INSとして決定した命令INS1と保持部540に登録された命令INSとの依存関係をチェックする。保持部540内のエントリ542の数が保持部522A内のエントリ524Aの数より少ないため、選択部550は、命令INS1と命令INS2との依存関係が解消することを命令INS1のPサイクル中(4サイクル目)に検出できる。
また、選択部550は、エントリBCTを”1”に設定する。なお、図8に示す例では、命令INS1と命令INS2との依存関係が解消することが4サイクル目に検出されるため、命令INS2のバイパスは、エントリBCTを利用せずに実行される。
5サイクル目では、命令INS1のPTサイクルの処理が実行される。例えば、選択部550は、Pサイクルで選択した命令INS1を示す識別情報PIDと命令INS1に含まれる一部の情報INFuとを、ラッチ部211A、211Bのいずれかに出力する。また、命令INS2に関しては、命令INS1との依存関係が解消しているため、命令INS2のPサイクルの処理が実行される。
6サイクル目以降では、命令INS1のB1サイクル、B2サイクルおよびXサイクルの処理が順次実行され、命令INS2のPTサイクル、B1サイクル、B2サイクルおよびXサイクルの処理が順次実行される。
このように、選択部550は、実行部700に投入する命令INS1と保持部522Aに登録された全ての命令INSとの依存関係をチェックする代わりに、命令INS1と保持部540に登録された全ての命令INSとの依存関係をチェックする。保持部540に登録される命令INSの最大数(エントリ542の数)は、保持部522Aに登録される命令INSの最大数(エントリ524Aの数)より少ない。
このため、バイパス可能な命令INS(依存関係が解消された命令INS)が保持部540に登録されているかを判定する選択部550の回路規模の増加を抑制しつつ、演算処理装置100の周波数を向上することができる。例えば、選択部550は、命令INS1と保持部540に登録された命令INSとの依存関係の検出にかかる時間を、命令INS1と保持部522Aに登録された命令INSとの依存関係をチェックする場合に比べて短くできる。この結果、命令INS1のPサイクルと命令INS1に後続する命令INS2のPサイクルとを連続して実行することができる。また、選択部550等の回路規模の増加を抑制することができるため、消費電力の増加を抑制することもできる。
図9は、図2に示した演算処理装置100のパイプライン処理の別の例を示す。なお、図9は、命令INS2が実行可能な状態になった後に保持部540に登録された場合のパイプライン処理の一例を示す。命令INS1、INS2は、図8に示した命令INS1、INS2と同一である。例えば、命令INS1は、レジスタg1に格納されたデータと即値”4”とを加算し、加算結果をレジスタg2に格納する加算命令である。命令INS2は、レジスタg2に格納されたデータと即値”8”とを加算し、加算結果をレジスタg3に格納する加算命令である。また、命令INS1、INS2は連続する命令列であり、命令INS1と命令INS2とはレジスタ750の依存関係がある。
図9に示した命令INS1、INS2のパイプライン処理は、命令INS2のPPサイクル以降のサイクルが実行されるタイミングを除いて、図8と同一または同様である。例えば、命令INS1のパイプライン処理は、図8に示した命令INS1のパイプライン処理と同一または同様である。
1サイクル目では、図8に示した1サイクル目と同様に、命令INS1のDサイクルの処理および命令INS2のDサイクルの処理が実行される。
2サイクル目では、図8に示した2サイクル目と同様に、命令INS1のDTサイクルの処理および命令INS2のDTサイクルの処理が実行される。
3サイクル目では、命令INS1のPPサイクルの処理は実行されるが、命令INS2のPPサイクルの処理は実行されない。例えば、保持部540に空きエントリが存在しない場合、命令INS2より優先順位の高い命令INSが保持部522Aに登録されている場合等では、命令INS2を保持部540に登録する処理(命令INS2のPPサイクルの処理)は実行されない。
4サイクル目では、命令INS1のPサイクルの処理が実行され、エントリBCTを”0”から”1”に変更する処理が実行される。例えば、選択部550は、エントリBCTを”1”に設定する。
また、4サイクル目では、実行部700に投入する命令INSとして決定した命令INS1と保持部540に登録された命令INSとの依存関係をチェックする。なお、4サイクル目での依存関係のチェックは、保持部540に登録された命令INSを対象に実行される。命令INS2が保持部540に登録されていないため、命令INS1と命令INS2との依存関係が解消したことは検出されない。
5サイクル目では、命令INS1のPTサイクルの処理が実行される。また、5サイクル目では、例えば、選択部532Aは、バイパス制御テーブル440のエントリBCTを参照し、命令INS2が登録されたエントリ524AのレディフラグRを”1”に設定する。このように、バイパス制御テーブル440を利用したバイパスでは、バイパス可能かの判定は、エントリBCTの設定(4サイクル目)とエントリBCTからの読み出し(5サイクル目)との2サイクルで実行される。
6サイクル目では、命令INS1のB1サイクルの処理が実行され、命令INS2のPPサイクルの処理が実行される。命令INS2のエントリ524AのレディフラグRが5サイクル目に”1”に設定されたため、命令INS2は、レディフラグRが”0”のエントリ524Aに登録された命令INS(他の命令INS)より優先順位が高くなる。このため、例えば、命令INS2を示す情報PID等を保持部540のエントリ542にコピーする処理(命令INS2のPPサイクルの処理)が実行される。なお、保持部540内の全てのエントリ542のレディフラグRが”0”の場合、命令INS2を示す情報PID等は、保持部540のエントリ542に上書きされる。
7サイクル目では、命令INS2のエントリ542のレディフラグRが”1”であるため、命令INS2のPサイクルの処理が実行される。なお、図9に示す例では、7サイクル目の保持部540には、命令INS2より優先順位の高い命令INSは登録されていない。このため、7サイクル目において、命令INS2のPサイクルの処理が実行される。また、7サイクル目では、命令INS1のB2サイクルの処理が実行される。
8サイクル目では、命令INS1のXサイクルの処理が実行され、命令INS2のPサイクルの処理が実行される。9サイクル目以降では、命令INS2のB1サイクル、B2サイクルおよびXサイクルの処理が順次実行される。
このように、命令INS1と命令INS2との依存関係が解消したときに、保持部540に空きエントリがなく、かつ、全てのエントリ542のレディフラグRが”0”である状態でも、命令INS2のPPサイクルの処理は優先的に実行される。これにより、演算処理装置100は、実効可能な命令INS2が保持部524Aに滞留することを防止できる。
以上、図2から図9に示す実施形態においても、図1に示した実施形態と同様の効果を得ることができる。例えば、リザベーションステーション500、600に保持される命令INSの数が増加した場合でも、命令INSの処理効率が低下することを抑制できる。
以上の詳細な説明により、実施形態の特徴点および利点は明らかになるであろう。これは、特許請求の範囲がその精神および権利範囲を逸脱しない範囲で前述のような実施形態の特徴点および利点にまで及ぶことを意図するものである。また、当該技術分野において通常の知識を有する者であれば、あらゆる改良および変更に容易に想到できるはずである。したがって、発明性を有する実施形態の範囲を前述したものに限定する意図はなく、実施形態に開示された範囲に含まれる適当な改良物および均等物に拠ることも可能である。