以下、図面を用いて実施形態を説明する。
図1は、一実施形態における演算処理装置および演算処理装置の制御方法の一例を示す。図1に示す演算処理装置100は、命令デコード部1、命令実行部2、命令完了制御部3および命令完了保持部4を有する。例えば、演算処理装置100は、スーパースカラ方式のプロセッサである。
命令デコード部1は、命令INSをそれぞれデコードする複数のデコーダ1a、1bを含む。命令デコード部1は、デコーダ1a、1b毎に、命令INSに割り当てる命令番号(0、1、2、3、...)を決める。デコーダ1a、1bは、受信した命令INSを並列にデコードし、デコード結果である命令情報IINF(IINFa、IINFb)をそれぞれ出力する。
命令実行部2は、命令デコード部がデコードした命令INS(IINFa、IINFb)を実行する。なお、命令実行部2は、命令INSをアウトオブオーダで実行してもよい。この場合、演算処理装置100は、命令INSをインオーダで命令デコード部1から受信して保持し、保持した命令をアウトオブオーダで命令実行部2に発行するリザベーションステーションを有してもよい。
命令実行部2の数は、2つ以外でもよい。演算処理装置100が複数の命令実行部2を有する場合、命令実行部2が実行する演算の種類は、互いに同じでもよく、相違してもよい。また、命令実行部2は、メモリアクセス命令を実行するためにメモリに対するアクセスアドレスを生成する機能を有してもよく、分岐命令に対する分岐処理を実行する機能を有してもよい。
命令完了保持部4は、デコーダ1aに対応して設けられる複数の保持領域4aを含む保持ブロックBLKaと、デコーダ1bに対応して設けられる複数の保持領域4bを含む保持ブロックBLKbとを有する。複数の保持領域4aには、命令番号(例えば、偶数)が順次割り当てられる。複数の保持領域4bには、保持領域4aに割り当てられた命令番号とは異なる命令番号(例えば、奇数)が順次割り当てられる。なお、例えば、命令番号=”4”を割り当てる予定の命令をデコーダ1aがデコードしなかった場合、命令番号=”4”は欠番とされる。この場合、デコーダ1bが次にデコードする命令に命令番号=”4”が割り当てられることはない。
命令完了制御部3は、デコーダ1aが生成した命令情報IINFaを、命令番号が一致する保持領域4aに格納し、デコーダ1bが生成した命令情報IINFbを、命令番号が一致する保持領域4bに格納する。また、命令完了制御部3は、命令実行部2が実行した命令INSに対応する命令情報IINFを命令完了保持部4からインオーダで取り出して命令の完了処理を実行する。
図1に示す演算処理装置100では、デコーダ1a、1b毎に、命令INSに割り当てる命令番号が決められ、デコーダ1a、1b毎に、命令情報IINFを格納する保持領域4a、4bが決められている。このため、デコーダ1aが生成した命令情報IINFaは、保持領域4aのいずれかに格納され、保持領域4bに格納されることはない。デコーダ1bが生成した命令情報IINFbは、保持領域4bのいずれかに格納され、保持領域4aに格納されることはない。
したがって、演算処理装置100は、命令完了保持部4の入力側に、命令情報IINFの格納先を保持領域4a、4bのいずれかに切り替える切り替え部と配線とを設けることなく、命令情報IINFを保持領域4a、4bに格納することができる。また、演算処理装置100は、命令完了保持部4の出力側に、保持領域4a、4bのそれぞれから読み出す命令情報IINFの出力先を切り替える切り替え部と配線とを設けることなく、保持領域4a、4bに保持された命令情報IINFを読み出すことができる。
例えば、各命令情報IINFは、数十ビット程度であり、切り替え部および配線を設けた場合、切り替え部の素子数および配線の本数が回路規模に与える影響は大きい。この結果、切り替え部および配線を設ける場合に比べて、演算処理装置100の回路規模の増大を抑制することができる。
図2は、他の演算処理装置110の一例を示す。演算処理装置110は、図1に示す演算処理装置100の命令デコード部1および命令完了制御部3の代わりに命令デコード部5および命令完了制御部6を有している。また、演算処理装置110は、命令完了保持部4の入力側に接続される切り替え部6aと、命令完了保持部4の出力側に接続される切り替え部6bと、切り替え部6a、6bに接続される配線とを有する。
命令デコード部5は、命令INSをそれぞれデコードする複数のデコーダ5a、5bを含む。命令デコード部5は、デコーダ5a、5bがそれぞれデコードする命令INSに割り当てる命令番号をデコード順にしたがって決める。このため、例えば、デコーダ5aが命令INSをデコードしないサイクルでは、デコーダ5bがデコードする命令に偶数の命令番号が割り当てられる場合がある。同様に、デコーダ5aがデコードする命令に奇数の命令番号が割り当てられる場合がある。
このため、命令完了制御部6は、命令情報IINFに含まれる命令番号に基づいて、切り替え部6aを制御し、保持領域4a、4bのいずれかに命令情報IINFを格納する。また、命令完了制御部6は、切り替え部6bを制御し、命令INSの実行が完了した命令情報IINFを保持領域4a、4bのいずれかから取り出して出力する。図2に示す演算処理装置110では、保持領域4a、4bがデコーダ5a、5bに共通に設けられるため、切り替え部6a、6bと配線とが演算処理装置110に設けられる。これにより、図1の演算処理装置100に比べて回路規模が増大する。
以上、図1に示す実施形態では、デコーダ1a、1b毎に命令に割り当てる命令番号を決めることで、デコーダ1aが生成した命令情報IINFaは、保持領域4aに格納され、デコーダ1bが生成した命令情報IINFbは、保持領域4bに格納される。これにより、命令完了保持部4の入力側と出力側に切り替え部および配線を設けなくてよいため、演算処理装置100の回路規模の増大を抑制することができる。
図3は、別の実施形態における演算処理装置の一例を示す。図3に示す演算処理装置102は、例えば、スーパースカラ方式のプロセッサである。
演算処理装置102は、命令フェッチアドレス生成部10、1次命令キャッシュ12、命令バッファ14、命令デコード部16および分岐予測部18およびリザベーションステーション20(201、202、203、204)を有する。また、演算処理装置102は、コミットスタックエントリ24を含む命令完了制御部22、プログラムカウンタ(PC)32、ネクストプログラムカウンタ(NPC)34、オペランドアドレス生成部36および1次データキャッシュ38を有する。さらに、演算処理装置102は、演算器40、42、固定小数点数用のレジスタ44および浮動小数点数用のレジスタ44を有する。なお、コミットスタックエントリ24は、命令完了制御部22の外部に設けられてもよい。演算器40、42は、命令実行部の一例である。
命令フェッチアドレス生成部10は、順次生成されるアドレス、分岐予測部18から受けるアドレスおよびリザベーションステーション204からの情報に基づいて、命令をフェッチするためのアドレスを生成する。命令フェッチアドレス生成部10は、生成したアドレスを1次命令キャッシュ12に出力する。例えば、分岐予測部18による分岐予測ミスに基づいてパイプラインクリアが発生した場合、リザベーションステーション204(RSBR)が出力する正しい分岐先アドレスにより命令フェッチが再開される。
1次命令キャッシュ12は、命令フェッチアドレス生成部10から受信するアドレスが示す領域に保持された命令を取り出し、取り出した命令を命令バッファ14に出力する。1次命令キャッシュ12は、アドレスに対応する命令を保持していない場合、図示しない2次キャッシュから命令を取り出すために、2次キャッシュにアクセス要求を出力する。2次キャッシュは、命令およびデータを保持する。なお、2次キャッシュは、アドレスに対応する命令を保持していない場合、図示しないメインメモリにアクセス要求を出力し、メインメモリから命令を取り出す。
命令バッファ14は、1次命令キャッシュ12から出力される命令を保持し、保持した命令を命令デコード部16に出力する。例えば、命令バッファ14は、4つの命令を並列に命令デコード部16に出力する。
命令デコード部16は、命令バッファ14から出力される複数の命令をそれぞれデコードし、各命令の出力先のリザベーションステーション20(201、202、203、204のいずれか)を決定する。命令デコード部16は、決定したリザベーションステーション20に、デコードにより得られた命令データを発行する。命令データは、デコードスロットDS(図6)が命令をデコードすることで生成するデコード結果であり、命令情報の一例である。
例えば、命令デコード部16は、デコードした命令がメモリアクセス命令(ロード命令またはストア命令)である場合、命令をリザベーションステーション201に投入する。命令デコード部16は、デコードした命令が固定小数点数の演算命令である場合、命令をリザベーションステーション202に投入する。命令デコード部16は、デコードした命令が浮動小数点数の演算命令である場合、命令をリザベーションステーション203に投入する。命令デコード部16は、デコードした命令が分岐命令である場合、命令をリザベーションステーション204に投入する。
また、命令デコード部16は、演算処理装置102で実行するプログラム中の記述の順番にしたがって命令に命令識別子IID(Instruction Identification)およびグループ識別子GID(Group Identification)を割り当てる。命令識別子IIDは、命令に割り当てられる命令番号の一例であり、グループ識別子GIDは、デコードのサイクル毎に割り当てられる命令識別子IIDに対応して割り当てられるグループ番号の一例である。
命令デコード部16は、命令識別子IIDを、デコード結果とともにリザベーションステーション20に出力し、グループ識別子GIDを、デコード結果とともに命令完了制御部22に出力する。命令バッファ14および命令デコード部16は、プログラム中の記述の順番を入れ替えることなく複数の命令を並列に処理する(インオーダ)。以下では、命令識別子IIDは、単にIIDとも称され、グループ識別子GIDは、グループ番号GIDまたはGIDとも称される。
分岐予測部18は、命令フェッチアドレス生成部10により生成されたアドレスに基づいて、分岐命令により分岐が実行されるか否かを予測し、分岐を予測した場合、分岐先アドレスを命令フェッチアドレス生成部10に出力する。
リザベーションステーション201は、命令デコード部16から順次受けるメモリアクセス命令を保持し、保持したメモリアクセス命令を実行可能な順にオペランドアドレス生成部36に出力する。以下では、リザベーションステーション201は、RSA(Reservation Station for Address generation)201とも称される。リザベーションステーション202は、命令デコード部16から順次受ける固定小数点数の演算命令を保持し、保持した演算命令を実行可能な順に演算器40に出力する。以下では、リザベーションステーション202は、RSE(Reservation Station for Execution)202とも称される。
リザベーションステーション203は、命令デコード部16から順次受ける浮動小数点数の演算命令を保持し、保持した演算命令を実行可能な順に演算器42に出力する。以下では、リザベーションステーション203は、RSF(Reservation Station for Floating point)203とも称される。演算器40、42に発行された命令は、プログラムに記述された命令の順番と関係なく実行される(アウトオブオーダ)。
リザベーションステーション204は、命令デコード部16から順次受ける分岐命令を、分岐の判断が可能になるまで保持する。リザベーションステーション204は、分岐命令に基づいて分岐予測部18の分岐予測が成功したか否かを判定し、判定結果に基づいてネクストプログラムカウンタ34の値を更新する。また、リザベーションステーション204は、分岐予測の判定が完了したことを示す情報を分岐予測部18に出力する。以下では、リザベーションステーション204は、RSBR(Reservation Station for BRanch)204とも称される。
命令完了制御部22は、命令デコード部16によりデコードされた命令を、プログラムに記述された命令の順番通りに貯めておくキュー構造のコミットスタックエントリ24を有する。以下では、コミットスタックエントリ24は、CSE24またはCSEとも称される。命令完了制御部22は、CSE24に保持された情報と演算器40、42等からの命令実行の完了報告とに基づいて、命令の完了処理を、プログラムで記述された順に実行する(インオーダ)。すなわち、命令完了制御部22は、アウトオブオーダにより実行が完了した命令に基づいてインオーダで命令の完了処理を実行する。以下では命令の完了処理は、コミットとも称される。
プログラムカウンタ(PC)32は、命令完了制御部22からの指示に基づいて、命令の格納先を示すメモリアドレスを更新し、更新したメモリアドレスを命令フェッチアドレス生成部10に出力する。ネクストプログラムカウンタ(NPC)34は、プログラムカウンタ32が保持するメモリアドレスの次のメモリアドレスを保持する。なお、命令デコード部16が最大で4つの命令を並列にデコードする場合、プログラムカウンタ32の値およびネクストプログラムカウンタ34の値は、完了処理が実行された命令の数に対応して更新される。
オペランドアドレス生成部36は、RSA201から投入されるメモリアクセス命令に基づいてアドレスを生成し、生成したアドレスを一次データキャッシュ38に出力する。1次データキャッシュ38は、オペランドアドレス生成部36からのアドレスによりアクセスされ、データを入出力する。なお、図3では、演算処理装置102は、複数のオペランドアドレス生成部36を有するが、オペランドアドレス生成部36の数は単数でもよい。
1次データキャッシュ38は、1次命令キャッシュ12と同様に、アドレスに対応するデータを保持していない場合、2次キャッシュからデータを取り出すために、2次キャッシュにアクセス要求を出力する。例えば、ロード命令では、1次データキャッシュ38は、取り出したデータをレジスタ44、46のいずれかに格納する。
演算器40は、固定小数点数用の演算器である。演算処理装置102は、命令デコード部16により並列にデコードされた固定小数点数の演算命令を並列に実行するために、複数の演算器40を有してもよい。演算器40は、演算に使用するデータをレジスタ44から取得し、演算結果をレジスタ44に格納する。
演算器42は、浮動小数点数用の演算器である。例えば、演算処理装置102は、命令デコード部16により並列にデコードされた浮動小数点数の演算命令を並列に実行するために、複数の演算器42を有してもよい。演算器42は、演算に使用するデータをレジスタ46から取得し、演算結果をレジスタ46に格納する。
レジスタ44は、演算器40で実行する演算に使用するデータを保持し、演算器40による演算の実行結果を保持する。レジスタ46は、演算器42で実行する演算に使用するデータを保持し、演算器42による演算の実行結果を保持する。
なお、レジスタ44、46は、レジスタファイル構造を有しており、それぞれ複数のレジスタを含む。例えば、レジスタ44、46は、レジスタファイルと、演算結果等をレジスタファイルに格納するまで保持する更新バッファとを共用し、リネーム表等を使用してレジスタを管理する物理レジスタ方式が採用される。なお、レジスタ44、46の各々代わりに、更新バッファとレジスタファイルとが設けられてもよい。
図4は、図3の演算処理装置102のパイプライン処理の一例を示す。なお、パイプライン処理は、図4に示す例に限定されない。例えば、演算処理装置102は、演算命令を、デコードステージD、プライオリティステージP、バッファステージB、演算実行ステージX、命令完了ステージCおよび書き込みステージWを含むパイプライン処理により実行する。かぎ括弧内に示すステージは、命令完了制御部22の動作に関係するパイプライン処理(デコードトランスファステージDT、取り出しステージCM1および完了待ちステージc)を示す。
以下では、デコードステージD、プライオリティステージP、バッファステージB、演算実行ステージX、命令完了ステージCおよび書き込みステージWは、単にステージD、P、B、X、C、Wとも称される。デコードトランスファステージDT、取り出しステージCM1および完了待ちステージcは、単にステージDT、CM1、cとも称される。また、ステージD、P、B、X、C、W、DT、CM1、cが実行されるサイクルは、サイクルD、P、B、X、C、W、DT、CM1、cとも称される。
ステージDでは、命令デコード部16は、命令バッファ14が出力する命令をインオーダでデコードする。そして、命令デコード部16は、デコードした命令を、グループ識別子GIDとともに命令完了制御部22に出力し、デコードした命令を、命令の種別に基づいて、命令識別子IIDとともにリザベーションステーション201、202、203、204に出力する。
ステージPでは、各リザベーションステーション20は、実行が可能となった命令をアウトオブオーダで選択する。なお、演算資源等の使用中等により各リザベーションステーション20が命令を発行できない場合、図4の下側の演算命令のパイプライン処理に示すように、ステージDとステージPの間には、空きサイクルが挿入される。
ステージBでは、演算器40、42等は、ステージPで選択された命令で使用するデータ等をレジスタ44、46等から読み出す。ステージXでは、演算器40、42は、ステージBでレジスタ44、46等から読み出したデータを使用して、ステージPで選択された命令を実行する。
ステージDTでは、命令完了制御部22は、命令デコード部16が出力した命令を、グループIDに対応するCSE24のエントリにインオーダで登録する。なお、図4の下側の演算命令のパイプライン処理に示すように、ステージDとステージPの間に空きサイクルが挿入される場合にも、ステージDTは、ステージDの次のサイクルで実行される。
ステージCM1では、命令完了制御部22は、命令の実行の完了報告に基づいて、CSE24に登録された命令をインオーダで取り出し、図8に示すCSE-WINDOW260にセットする。なお、取り出し対象の命令がCSE24から取り出せない場合、ステージDTとステージCM1との間には空きサイクルが挿入される。
ステージcは、命令の実行の完了報告が発行されるまで(すなわち、ステージXにより命令が完了するまで)挿入される。ステージXに対応するステージcでは、演算器40、42は、演算結果をレジスタ44、46等に格納し、演算の完了を示す完了報告が命令完了制御部22に出力されるのを待つ。なお、例えば、演算例外が発生した場合、演算器40、42は、演算例外の発生を示す情報を命令完了制御部22に出力する。
命令がロード命令またはストア命令の場合、ステージXに対応するステージcにおいて、1次データキャッシュ36は、データ転送が完了したことを示す完了情報が命令完了制御部22に出力されるのを待つ。命令が分岐命令の場合、ステージXに対応するステージcにおいて、RSBR204は、分岐予測部18の分岐予測に対する判定が完了したことを示す完了情報を命令完了制御部22に出力する。そして、命令完了制御部22は、ステージCにおいて、各完了情報に基づいて、インオーダで命令完了の処理を開始する。ステージWでは、プログラムカウンタ32の値およびネクストプログラムカウンタ26の値が更新され、命令の実行に使用したレジスタ44、46等の資源が解放される。
図5は、スーパースカラ方式によるアウトオブオーダ実行の一例を示す。なお、図5では、演算処理装置102は、最大4個の命令を並列に実行する。例えば、命令フェッチアドレス生成部10が出力するアドレスに基づいて1次命令キャッシュ12からインオーダでフェッチされた複数の命令は、命令バッファ14を介して命令デコード部16に出力される。例えば、一次命令キャッシュ12が並列に出力する命令の数は、命令バッファ14が命令デコード部16に並列に出力する命令の数(例えば、4個)より多い。
命令デコード部16は、ステージDにおいて、命令バッファ14から出力される複数の命令をインオーダでそれぞれデコードする。演算器40、42は、命令デコード部16がデコードした複数の命令をアウトオブオーダで実行する。なお、演算器40、42による演算に掛かるサイクル数(ステージXの数)は、命令の種類により異なる。
ここで、並列に実行される4つの命令において、プログラムの記述順が遅い命令の実行が、プログラムの記述順が早い命令の実行より早く完了した場合、プログラムの記述順が早い命令の実行が完了するまでステージWによる命令の完了処理は実行されない。図5に示す例では、プログラムの記述順が最も早い命令(一番上の命令)の実行が完了するまで、命令の完了処理は開始されない。これにより、アウトオブオーダで実行された複数の命令をインオーダで完了させることができる。そして、ステージWにより、命令の実行に使用したレジスタ44、46等の資源が解放され、複数の命令の完了処理(コミット処理)がインオーダで実行され、命令の実行が完了する。
図6は、図3の命令デコード部16の一例を示す。命令デコード部16は、4つのデコードスロットDS(DS0、DS1、DS2、DS3)を含むデコード処理部161、デコードレジスタDR(DR0、DR1、DR2、DR3)およびGID生成部162を有する。各デコードスロットDSは、命令バッファ14から出力される命令をデコードするデコーダの一例である。
各デコードレジスタDRは、例えば、各デコードスロットDSに対応して設けられる。なお、複数のデコードスロットDSに1つのデコードレジスタDRが対応してもよく、1つのデコードスロットDSに複数のデコードレジスタDRが対応してもよい。デコードスロットDSの数は、複数個であれば、4つに限定されない。4つのデコードスロットDSにより、デコードサイクル毎に最大で4つの命令をデコード可能である。以下では、各デコードレジスタDRが、各デコードスロットDSに対応するものとして説明する。
デコード処理部161は、命令バッファ14から並列に出力される複数の命令をインオーダで受信し、デコードスロットDS毎に、命令のデコード、リソースの割り当て、レジスタのリネーミングなどを実行する。各デコードレジスタDRは、バリッドフラグV、リリースフラグRELおよびデータ領域Dを有する。
バリッドフラグVは、対応するデコードスロットDSが命令をデコードした場合に”1”にセットされる。例えば、命令バッファ14から3つの命令を受信した場合、3つのデコードスロットDSに対応するバリッドフラグVは、”1”にセットされ、残りにデコードスロットDSに対応するバリッドフラグVは、”0”にリセットされる。
リリースフラグRELは、対応するデコードスロットDSによりデコードが実行され、命令で使用するリソースなどの条件がそろった場合、”1”にセットされる。データ領域Dには、対応するデコードスロットDSによるデコード結果(命令データD(D0-D3))が格納される。なお、図示していないが、命令デコード部16は、デコードした命令毎に命令識別子IIDを割り当てる。例えば、命令識別子IIDは、CSE24に格納可能な命令の数(128個)に合わせて”0”から”127”のいずれかに設定される。
GID生成部162は、GIDを保持するラッチ163、164、インクリメンタ165およびセレクタ166を有する。ラッチ163は、セレクタ166の出力をラッチする。インクリメンタ165は、ラッチ163から出力される現在のGIDを”1”増加させてセレクタ166に出力する。例えば、インクリメンタ165は、GID=”0”から”31”を巡回的に生成するカウンタである。
セレクタ166は、4入力のアンド回路の出力が論理0の場合、ラッチ163の出力を選択し、GIDを更新しない。セレクタ166は、4入力のアンド回路の出力が論理1の場合、インクリメンタ165の出力を選択することでGIDを更新する。命令デコード部16が命令バッファ14から命令を受信した場合、各デコードレジスタDRの状態は、バリッドフラグV=”1”、リリースフラグREL=”0”になる。そして、命令を発行可能な状態になったとき、バリッドフラグV=”1”、リリースフラグREL=”1”になる。
バリッドフラグV=”0”を除くデコードレジスタDRのいずれかがバリッドフラグV=”1”、リリースフラグREL=”0”の状態の場合、アンド回路の出力は論理0のため、GIDは更新されない。バリッドフラグV=”0”を除くデコードレジスタDRの全てがバリッドフラグV=”1”、リリースフラグREL=”1”の状態になった場合、アンド回路の出力は論理1になり、GIDは更新される。なお、全てのバリッドフラグV0-V3がリセットされている場合にも、GIDは更新される。
図7は、図3の命令完了制御部22の一例を示す。図7に示すステージD、DT、CM1、C、W、Xは、図4に示す各ステージに対応する。命令完了制御部22は、デコードされた命令用のCSE240およびコミット用(完了用)のCSE242を、CSE24として含む。CSE240、242は、命令の完了処理に使用される命令完了保持部の一例である。また、命令完了制御部22は、ラッチ部250、バイパス制御部252、CSE-WINDOW260、命令完了判定部270および命令完了処理部280を有する。CSE-WINDOW260は、実行が完了していない最も古いサイクルの命令に割り当てられたグループ番号GIDに対応する命令データDを保持する命令完了バッファの一例である。実行が完了していない最も古いサイクルの命令に割り当てられたグループ番号GIDは、最古グループ番号の一例である。
CSE240(デコード)は、ラッチ部250を介して命令デコード部16から受信する複数の命令データD(デコード結果:物理アドレスや使用するリソース種等)を、命令デコード部16から指示されたエントリに保持する。ラッチ部250は、命令デコード部16がデコードにより得た複数の命令データD(デコード結果)を保持する。CSE242(コミット)は、演算器40、42、1次データキャッシュ38またはRSBR204等から出力される命令の完了報告を、指示されたエントリに保持する。演算器40、42、1次データキャッシュ38またはRSBR204等から出力される命令の完了報告は、アウトオブオーダで発行されるため、完了報告の発生タイミングは、ばらばらである。CSE240、CSE242の例は、図8から図11に示される。
バイパス制御部252は、例えば、演算器40、42、1次データキャッシュ38またはRSBR204からの完了報告に含まれるIIDを、CSE242に格納される前にCSE-WINDOW260に転送する。これにより、CSE-WINDOW260に同じIIDを含む命令(データ)がセットされている場合、CSE242から完了情報を含むデータが出力される前に、命令の完了処理が実行可能になる。演算器40、42等からの完了報告に含まれるIIDがCSE-WINDOW260にセットされていない場合、CSE242からCSE-WINDOW260への完了情報のセットに基づいて、命令の完了処理が実行される。
CSE-WINDOW260には、命令の実行の完了報告に基づいてCSE240、242からインオーダで取り出される命令データDが、命令の完了候補としてセットされる。CSE-WINDOW260に保持された命令データDは、完了報告に基づいてインオーダで命令完了処理部280に出力される。
命令完了判定部270は、CSE-WINDOW260に保持された複数の命令データDに対応する複数の命令の各々の完了報告が発行されたか否かを監視する。命令完了判定部270は、CSE-WINDOW260に保持された複数の命令データDに対応する複数の命令の各々の完了報告が発行された場合、完了報告が発行された命令の命令データDを命令完了処理部280への出力を制御する。また、命令完了判定部270は、CSE-WINDOW260に保持された全ての命令データDに対応する命令の完了報告が発行された場合、CSE240、242からCSE-WINDOW260に次の命令データDを格納する処理を制御する。
命令完了処理部280は、完了報告に基づいてCSE-WINDOW260から出力される少なくとも1つの命令データDに基づいて、プログラムカウンタPCの更新等をするための情報を出力し、命令の完了処理を実行する。
図8は、図7のCSE240とその関連回路との一例を示す。図7と同じ要素については、図7と同じ符号を付し、詳細な説明は省略される。図8は、図7に示す要素以外に、グループデコード部243、ゲート部244およびセレクタ部245Dを有する。
CSE240は、図6に示すデコードスロットDS(DS0-DS3)に対応する4つの列ブロックCB(CB0-CB3)を有する。なお、図8では、CSE-WINDOW260は、列ブロックCB0-CB3毎に分割して示される。各列ブロックCBは、32個のエントリを有し、4つの列ブロックCBの4つのエントリ(1行)毎にグループ番号GID(図10)が割り当てられる。各列ブロックCBのエントリ内の番号は、エントリに割り当てられたIIDを示す。各エントリは、IIDが割り当てられる保持領域の一例であり、列ブロックCBは、デコードスロットDSに対応する保持ブロックの一例である。
例えば、IID=0、1、2、3に対応する4つのエントリが1つのグループに対応し、IID=4、5、6、7に対応する4つのエントリが別のグループに対応する。各グループは、後述するグループ番号GIDにより識別される。例えば、GID=0は、IID=0、1、2、3に対応するエントリを示し、GID=31は、IID=124、125、126、127に対応するエントリを示す。CSE240のIID、GIDの割り当ての例は、図10に示される。
ラッチ部250は、複数のラッチを有し、列ブロックCBに対応して、命令データD(D0-D3)およびリリースフラグREL(REL0-REL3)の論理をDサイクルで受けて保持する。なお、ラッチおよびレジスタは、特に断らない限り、クロック信号に同期して動作するが、クロック信号の図示は省略される。
グループデコード部243は、命令デコード部16から出力される5ビットのグループ番号GID[4:0]をDサイクルで保持するラッチLTとデコーダGDECとを有する。デコーダGDECは、ラッチLTに保持されたグループ番号GIDを、DTサイクルにデコードし、32本のグループ選択信号GSEL0-GSEL31のいずれか1つを有効レベルに設定する。32本のグループ選択信号GSELは、CSE240の32個のグループにそれぞれ対応する。このように、グループデコード部243は、7ビットのIIDではなく5ビットのGIDを用いて命令データDを格納するエントリを選択できるため、IIDを用いる場合に比べてグループデコード部243の回路規模を削減することができる。
ゲート部244は、列ブロックCB毎に32個のアンド回路を有する。32個のアンド回路の各々は、32個のグループ選択信号GSEL0-31のいずれかと、列ブロックCBに対応するリリースフラグRELとを受ける。リリースフラグREL0-REL3は、命令データD0-D3が有効か無効かを示す。
そして、有効レベルのグループ選択信号GSELに対応するアンド回路からクロックイネーブル信号CLKENが出力され。これにより、クロックイネーブル信号CLKENに対応するエントリにクロック信号が供給され、命令データDがエントリに格納される。クロックイネーブル信号CLKENに対応しないエントリには、クロック信号を受けないため、命令データDは格納されない。すなわち、各列ブロックCBは、対応するリリースフラグRELが有効の場合、グループ選択信号GSELで示されるエントリに、受信した命令データDを格納する。各列ブロックCBは、対応するリリースフラグRELが無効の場合、受信した命令データDの格納を抑止する。
命令完了判定部270は、コミット判定部271、選択信号生成部272およびレジスタ273を有する。コミット判定部271は、各CSE-WINDOW260から受信するコミット状態を示すコミット信号CMTに基づいて、CSE240から次のエントリ(グループ)の命令データDをCSE-WINDOW260に取り込むか否かを判定する。ここで、各CSE-WINDOW260のコミット状態とは、命令の実行の完了報告に対応する情報がセットされた状態である。
コミット判定部271は、受信したコミット信号CMTに基づいて、インオーダでコミット可能な命令(すなわち、IIDが連続する命令)を検出する。そして、コミット判定部271は、CSE-WINDOW260が保持する全ての命令がコミット可能な状態にあった場合、グループコミット信号GCMTを出力する。すなわち、次のエントリの命令データDをCSE-WINDOW260に取り込む場合、コミット判定部271は、グループコミット信号GCMTを各CSE-WINDOW260とレジスタ273とに出力する。
各CSE-WINDOW260は、グループコミット信号GCMTに基づいて生成されるクロックイネーブル信号CLKENを受信し、後述するセレクタ246Dが選択中の命令データDをクロック信号に同期してCM1サイクルで取り込む。なお、グループコミット信号GCMTは、クロックイネーブル信号として各CSE-WINDOW260に供給されてもよい。命令完了判定部270の動作は、図14および図15で説明される。
レジスタ273は、CSE-WINDOW260が保持する命令データDが保持されていたCSE240のグループ番号CGID(GID)を保持する。レジスタ273は、グループコミット信号GCMTに基づいて、グループ番号CGIDを更新する。選択信号生成部272は、グループ番号CGIDに”1”を加えたグループ番号を生成し、生成したグループ番号をデコードして32本のネクストグループ選択信号NGSEL0-NGSEL31のいずれか1つを有効レベルに設定する。ネクストグループ選択信号NGSEL0-NGSEL31は、CSE240の32個のグループにそれぞれ対応している。有効レベルに設定されたネクストグループ選択信号NGSELは、CSE-WINDOW260に次に格納される命令データDのグループ番号を示す。なお、グループ番号CGIDは、”0”から”31”まで巡回的に生成される。
セレクタ部245Dは、各列ブロックCBに対応するセレクタ246D(32:1)を有する。各セレクタ246Dは、対応する列ブロックCBに保持された32個のグループの命令データDと、32個のネクストグループ選択信号NGSEL0-31とを受ける。各セレクタ246Dは、有効レベルのネクストグループ選択信号NGSELに対応する命令データDを選択し、選択した命令データDを各CSE-WINDOW260に出力する。セレクタ246Dは、各保持ブロックCBの複数のエントリが保持する命令データDをグループ番号GIDに基づいて選択し、選択した命令データDをCSE-WINDOW260に出力する選択部の一例である。
なお、各セレクタ246Dの代わりに、8入力から1つを選択する8:1のセレクタと、4入力から1つを選択する4:1セレクタとが設けられてもよい。あるいは、各セレクタ246Dの代わりに、8入力から1つを選択する8:1のセレクタと、2入力から1つを選択する2つの2:1セレクタとが設けられてもよい。
列ブロックCB0-CB3は、命令デコード部16のデコードスロットDS(図6)にそれぞれ対応して設けられる。このため、例えば、デコードスロットDS0から出力された命令データD0は、列ブロックCB0のみに格納され、列ブロックCB1-CB3に格納されない。したがって、ラッチ部250の命令データD0を保持するラッチから列ブロックCB1-CB3のそれぞれに命令データD0を転送する転送経路(配線)を設けることなく、CSE240に命令データD0を格納することができる。また、各列ブロックCB0-CB3に対応して命令データD0-D3を選択するセレクタ等の切り替え部を設けることなく、CSE240に命令データを格納することができる。
さらに、1つの命令データD0は、1つの列ブロックCBのみに格納され、他の列ブロックCBに格納されないため、各セレクタ246Dは、対応する列ブロックCBの32個の命令データDを選択して、CSE-WINDOW260に供給すればよい。すなわち、各セレクタ246Dは、4つの列ブロックCB0-CB3の128個の命令データDを選択しなくてよい。したがって、列ブロックCB1-CB3から各セレクタ246Dに命令データDを転送する転送経路(配線)を設けることなく、CSE-WINDOW260に命令データDを格納することができ、セレクタ246Dの回路規模を抑えることができる。
図9は、図7のCSE242とその関連回路との一例を示す。図7および図8と同じ要素については、図7および図8と同じ符号を付し、詳細な説明は省略される。CSE-WINDOW260および命令完了処理部280と、命令完了判定部270内のコミット判定部271およびレジスタ273は、図8と共通の回路である。なお、CSE242の列ブロックCB0-CB3は、CSE240の列ブロックCB0-CB3とは物理的に異なる回路である。
図9では、演算器40から完了報告を受ける場合について説明するが、演算器42、1次データキャッシュ38およびRSBR204等から受ける完了報告に対しても同様の動作が実行される。図9は、図7に示す要素以外に、ラッチ部253、デコーダ254、IIDマッチ部252A、セレクタ部245Eおよびオア部252Bを有する。
ラッチ部253は、演算器40からアウトオブオーダで完了報告COMP、IID(EIID:7ビット)およびコンディションコードや例外などを示すデータEDを受信する。なお、完了報告COMPは、EIIDが有効であることを示すバリッドフラグでもありデータでもある。完了報告COMPは、完了報告情報の一例である。
デコーダ254は、完了報告COMPを受信した場合、EIIDをデコードする。そして、デコーダ254は、EIIDの下位2ビットから4本の選択信号CBSEL(CBSEL0-CBSEL3)を生成し、EIIDの上位5ビットから32本の選択信号ESEL(ESEL0-ESEL31)を生成する。
選択信号CBSELにより、列ブロックCBのいずれかが選択される。選択信号ESELは、クロックイネーブル信号CLKENとして各列ブロックCBに供給され、クロック信号に同期して選択信号CBSELにより選択された列ブロックCB内のエントリのいずれか1つに完了報告COMPおよびデータEDが格納される。これにより、1サイクル毎にCSE242の1つのエントリに完了報告COMPおよびデータEDが登録される。
CSE242への完了報告COMPの格納は、GIDではなく、IIDに基づいて実行される。これにより、命令デコード部16は、演算器40、42等にGIDを発行せずに、IIDを発行することができ、リザベーションステーション20を含む既存の回路を利用して演算処理装置102を設計することができる。
IIDマッチ部252Aおよびオア部252Bは、バイパス制御部252(図7)として機能する。IIDマッチ部252Aは、完了報告COMPがセットされ、かつ、EIIDが属するGIDと現在のCGID(=GID)とが一致する場合、EIIDに対応するオア部252Bに完了報告COMPおよびデータEDを出力する。ここで、GIDは、7ビットのEIID[6:0]の上位5ビットにより表され、列ブロックCBは、EIID[6:0]の下位2ビットにより表される。IIDマッチ部252Aとオア部252Bとの間を接続する配線BYPSは、バイパス経路の一例である。
これにより、EIIDに対応するCSE-WINDOW260に完了報告COMPおよびデータEDがセットされ、列ブロックCB0-CB3からの完了報告COMPを待つことなく完了処理を開始することができる。すなわち、完了報告COMPおよびデータEDのバイパス機能が実現される。なお、ラッチ部253に格納された情報は、IIDマッチ部252Aの動作にかかわりなく、対象の列ブロックCB0-CB3に格納される。IIDマッチ部252Aは、完了報告COMPとEIIDとの受信に基づいて、EIIDに対応するグループ番号CGIDがCSE-WINDOW260に保持された命令データDに対応するグループ番号GIDと一致するかを判定する判定部の一例である。
コミット判定部271が出力するグループコミット信号GCMT(クロックイネーブル信号CLKENとして使用)は、レジスタ273に供給されるが、CSE-WINDOW260には供給されない。このため、各CSE-WINDOW260は、グループコミット信号GCMTにかかわりなく、毎サイクル、セレクタ246Eが選択中の完了報告COMP、データED、またはIIDマッチ部252Aから出力される完了報告COMP、データEDを取り込む。
選択信号生成部274は、グループ番号CGIDに”1”を加えたグループ番号を生成する。選択信号生成部274は、生成したグループ番号またはグループ番号CGIDをデコードして32本のグループ選択信号GSEL0-GSEL31のいずれか1つを有効レベルに設定する。グループ選択信号GSEL0-GSEL31は、CSE240の32個のグループにそれぞれ対応しており、有効レベルに設定されたグループ選択信号GSELは、CSE-WINDOW260に格納される完了報告COMPおよびデータEDのグループ番号を示す。なお、グループ番号CGIDが”31”の場合、”1”を加えたグループ番号は”0”になる。
セレクタ部245Eは、各列ブロックCBに対応するセレクタ246E(32:1)を有する。各セレクタ246Eは、対応する列ブロックCBに保持された32個のグループの完了報告COMPおよびデータEDと、32個のグループ選択信号GSEL0-31とを受ける。各セレクタ246Eは、有効レベルのグループ選択信号GSELに対応する完了報告COMPおよびデータEDを選択し、選択した完了報告COMPおよびデータEDを各CSE-WINDOW260に出力する。
なお、各セレクタ246Eの代わりに、8入力から1つを選択する8:1のセレクタと、4入力から1つを選択する4:1セレクタが設けられてもよい。あるいは、各セレクタ246Eの代わりに、8入力から1つを選択する8:1のセレクタと、2入力から1つを選択する2つの2:1セレクタが設けられてもよい。
各CSE-WINDOW260は、すでにセットされている完了報告COMPおよびデータEDの上書きが必要なため、毎サイクルCSE240から完了報告COMPおよびデータEDを取り込む。取り込む完了報告COMPおよびデータEDが保持されたグループは、グループ選択信号GSELが、現在のGIDを示すか、次のGIDを示すかにより異なる。
オア部252Bは、列ブロックCB毎に、完了報告COMPおよびデータEDの各ビットに対応するオア回路を有する。オア部252Bは、セレクタ246Eから出力される完了報告COMPおよびデータED、またはIIDマッチ部252Aから出力される完了報告COMPおよびデータEDをCSE-WINDOW260に出力する。なお、オア部252Bは、IIDマッチ部252Aから完了報告COMPを受けた場合、IIDマッチ部252Aから受けるデータEDを優先してCSE-WINDOW260に出力する。
図10は、図7のCSE240、CSE242のIIDの割り当ての一例を示す。CSE240、CSE242は、各エントリのサイズおよび登録される情報が異なることを除き、同様の構成であるため、以下では、CSE240が説明される。CSE240は、0番から31番のグループ番号GIDが割り当てられた32個のグループ領域を有する。各グループ領域は、4つのデコードスロットDSの各々に対応する4つのエントリを有し、各エントリは、1つの命令のデコード結果である命令データD等を保持する。すなわち、CSE240は、命令データDを保持する128個のエントリを有する。
各エントリは、列ブロックCB0から列ブロックCB3にかけて番号が1つずつ増加するIIDが割り当てられる。各エントリ内の数値はIIDを示す。列ブロックCB0に割り当てられるIIDは、グループ番号GIDを4倍した値であり、列ブロックCB2に対応に割り当てられるIIDは、グループ番号GIDを4倍して1を加えた値である。列ブロックCB2に割り当てられるIIDは、グループ番号GIDを4倍して2を加えた値であり、列ブロックCB3に割り当てられるIIDは、グループ番号GIDを4倍して3を加えた値である。
図10に示すCSE240では、デコードスロットDS0がデコードした命令の命令データDは、列ブロックCB0に格納され、デコードスロットDS1がデコードした命令の命令データDは、列ブロックCB1に格納される。デコードスロットDS2がデコードした命令の命令データDは、列ブロックCB2に格納され、デコードスロットDS3がデコードした命令の命令データDは、列ブロックCB3に格納される。これにより、例えば、デコードスロットDS0がデコードした命令データDは、列ブロックCB1-CB3には格納されないため、命令データDを転送する転送経路(配線)の数を減らすことができ、回路規模を抑えることができる。
図11は、図8のCSE240および図9のCSE242に格納される命令データD等の割り当ての一例を示す。図11は、演算処理装置102の制御方法の一例を示す。表中の数値はIIDを示す。この実施形態では、デコードスロットDS0-DS3の各々のデコードにより生成された命令データDが、列ブロックCB0-CB3の各々に格納される。なお、命令デコード部16は、演算器40、42等に通知するためにIIDを生成するが、CSE240にはIIDを通知せず、IIDの代わりにグループ番号GIDを通知する。
CSE240への命令データDの割り当ては、命令デコード部16によりDサイクルに実行され、割り当てに基づいて、DTサイクルでCSEに格納される。例えば、第1サイクルにおいて、命令デコード部16は、命令をそれぞれデコードし、デコードにより得られた4つの命令データDにグループ番号GID=0をインオーダで割り当てる。これにより、デコードサイクル毎に最大で4つの命令にIIDが割り当て可能である。
第2サイクルにおいて、命令デコード部16は、デコードにより得た3つの命令データDにグループ番号GID=1を割り当てる。一方、デコードスロットDS3には命令が割り当てられないため、デコードは保留される。命令が割り当てられない原因として、命令バッファ14から命令が来ていない、あるいは、前の命令との依存関係により命令の発行が抑止される場合などがある。
第3サイクルにおいて、命令デコード部16は、第2サイクルで割り当てされなかった命令を含む4つの命令をインオーダでデコードし、デコードにより得られた4つの命令データDにグループ番号GID=2を割り当てる。この際、命令デコード部16は、第2サイクルで割り当てられなかったIID=7を欠番とし、第3サイクルでは、IID=8からIID=11までを命令データDにそれぞれ割り当てる。これにより、図10で説明したように、各デコードスロットDSで割り当てるIIDを、4の倍数+所定の増分にすることができ、CSE240、CSE242に接続される配線の本数の増加および回路の増加を抑制することができる。
第4サイクルにおいて、命令デコード部16は、4つの命令にグループ番号GID=3を割り当てる。また、命令デコード部16は、命令に使用する資源の割り当てを待つなどにより、IID=14、15に対応する命令の発行をできないため、括弧付きで示すように、これら命令の発行を保留し、グループ番号GIDを更新しない。
第5サイクルにおいて、命令デコード部16は、グループ番号GIDを”3”に維持したまま、第4サイクルで保留した命令(IID=14、15に対応)を再デコードする。この際、命令デコード部16は、第4サイクルと同じデコードスロットDS2、3に、IID=14、15を再度割り当てた命令をデコードする。
すなわち、IID=14が割り当てられる命令は、デコードスロットDS0ではなく、デコードスロットDS2によりデコードされ、IID=15が割り当てられる命令は、デコードスロットDS1ではなく、デコードスロットDS3によりデコードされる。これにより、IID=14、15が割り当てられた命令は、第3サイクルで格納されるはずであった列ブロックCB2、CB3のエントリに格納される。したがって、例えば、デコードスロットDS0から列ブロックCB2に命令データDを転送する配線と転送経路を切り替えるセレクタとを設けることなく、命令データDをCSE240に格納することができる。この結果、CSE240に接続される配線の本数の増加および回路の増加を抑制することができる。
第6サイクルでは、第2サイクルと同様に、命令デコード部16は、デコードにより得た3つの命令データDにグループ番号GID=4を割り当て、デコードスロットDS3に対応するIID=19を欠番にする。第7サイクルにおいても、第2サイクルと同様に、命令デコード部16は、デコードにより得た2つの命令データDにグループ番号GID=5を割り当て、デコードスロットDS0、3に対応するIID=20、23を欠番にする。第8サイクルは、第2サイクルと同様である。
なお、CSE242への完了報告COMPおよびデータED等の割り当ては、演算器40等からのIIDおよび完了報告COMPに基づいて、命令毎に実行されることを除き、CSE240に対する割り当てと同様である。
図12は、図8および図9のCSE-WINDOW260に格納される命令データD等の割り当ての一例を示す。図12は、演算処理装置102の制御方法の一例を示す。表中の数値はIIDを示す。表中の符号(C)は、対応する命令の完了報告が発行された状態(コミット状態)を示し、符号(C)がないものは、対応する命令の完了報告が発行されていないことを示す。グループコミットの欄の”C”は、1つのグループ番号GIDに対応して、CSE-WINDOW260に格納された全ての命令データDがコミットしたことを示す。CSE-WINDOW260に格納された命令のコミットは、命令完了制御部22によりCサイクルに実行される。
この実施形態では、DTサイクルでCSE240に格納された命令データD等に割り当てられたIIDが、CSE-WINDOW260のIIDの割り当てにそのまま引き継がれる。すなわち、図12に示す割り当ては、図11に示す割り当てと同じである。
第1サイクルにおいて、グループ番号GID=0の各命令は、コミットされ、グループ0のコミットが成立する。このため、グループ番号GID=1が割り当てられた3つの命令データD等がCSE240からCSE-WINDOW260に格納される。
第2サイクルにおいて、グループ番号GID=1の各命令は、コミットされ、グループ1のコミットが成立する。このため、グループ番号GID=2が割り当てられた4つの命令データD等がCSE240からCSE-WINDOW260に格納される。
第3サイクルにおいて、グループ番号GID=2の命令のうち、IID=8、9に対応する2つの命令がコミットされるが、IID=10、11に対応する2つの命令はコミットされないため、グループ2のコミットが成立しない。このため、図8に示した命令完了判定部270は、グループ番号GIDを更新せず、IID=10、11に対応する2つの命令がコミットされるのを待つ。
第4サイクルにおいて、IID=10、11に対応する2つの命令がコミットされ、グループ2のコミットが成立する。このため、グループ番号GID=3が割り当てられた4つの命令データD等がCSE240からCSE-WINDOW260に格納される。この後、第1サイクルまたは第3サイクルと同様に、第5サイクル以降の割り当てが実行される。
第3および第4サイクルに示すように、命令完了制御部22は、グループ番号GIDに対応するIIDが割り当てられた命令のいずれかがコミットしない場合、グループ番号GIDを更新せずにコミットしなかった命令のコミットの判定を次のサイクルで実行する。これにより、IID=”10”、”11”に対応する命令データDをCSE-WINDOW260に再セットすることなく、コミットの判定処理を実行することができ、CSE-WINDOW260へのセット動作を簡易に実行することができる。
図12においても、各デコードスロットで割り当てるIIDを、4の倍数+所定の増分にすることで、CSE240とCSE-WINDOW260との間に接続される配線の本数の増加および回路の増加を抑制することができる。
図13は、グループコミットが成立しない場合に、コミットされた命令に対応するCSE-WINDOW260内の情報を無効にする回路の一例を示す。図13は、CSE242に対応するCSE-WINDOW260を示す。
例えば、CSE-WINDOW260に格納する情報が有効か無効かを示すバリッドフラグV(論理1が有効を示す)は、アンド回路ANDを介してCSE-WINDOW260に格納される。CSE-WINDOW260に格納されたバリッドフラグVの論理は、インバータIVを介して反転され、アンド回路ANDに伝達される。このため、CSE-WINDOW260にバリッドフラグV(=論理1)が一度セットされた後、CSE-WINDOW260のバリッドフラグVは論理0に維持される。
これにより、CSE-WINDOW260に保持された複数の命令データD等のいくつかがコミットされずに残った場合、先にコミットした命令データD等が再びコミットされることを抑止することができる。例えば、図12の第4サイクルにおいて、第3サイクルで先にコミットした2つの命令が再びコミットされることを抑止することができ、演算処理装置102の誤動作を抑止することができる。
図14は、命令のデコードに基づいてCSE-WINDOW260をセットする動作の一例を示す。図14は、演算処理装置102の制御方法の一例を示す。図14に示すフローは、図8の命令完了判定部270等により繰り返し実行される。なお、命令の完了報告に基づいてCSE-WINDOW260をセットする動作の例は、図15に示される。
まず、ステップS10において、図8の選択信号生成部272は、グループ番号CGIDに”1”を加えたグループ番号を生成する。グループ番号は、CSE240から次に読み出す命令データD等が保持されたエントリを示す。次に、ステップS12において、選択信号生成部272は、ステップS10で生成したグループ番号をデコードして、ネクストグループ選択信号NGSEL0-31のいずれか1つを有効レベルに設定する。
次に、ステップS14において、命令完了判定部270は、有効レベルに設定されたネクストグループ選択信号NGSELに基づいて、次のグループ番号GIDの命令データD等をセレクタ245に選択させる。次に、ステップS16において、図8のコミット判定部271は、グループコミットが成立した場合、動作をステップS20に移行する。一方、グループコミットが成立しない場合、すなわち、CSE-WINDOW260にセットされた命令データDに対応する命令のいずれかが実行を完了していない場合、動作をステップS18に移行する。例えば、図12に示す第1サイクル、第2サイクル、第4サイクル、第5サイクル、第7サイクル、第8サイクルでは、そのサイクルでグループコミットが成立するため、動作はステップS20に移行される。図13に示す第3サイクル、第6サイクル、第9サイクルでは、そのサイクルではグループコミットが成立しないため、動作はステップS18に移行する。
ステップS18において、図13に示すインバータIVおよびアンド回路ANDは、コミットが成立した命令に対応してCSE-WINDOW260に保持されたバリッドフラグVを無効状態(論理0)に設定し、動作をステップS16に戻す。例えば、図12に示す第3サイクルでは、IID=8、9に対応する命令はコミットされるため、IID=8、9に対応する命令データD等は、無効状態に設定される。ステップS18では、グループ番号GIDは更新されず、CSE240からCSE-WINDOW260への命令データDの転送は抑止される。
グループコミットが成立した場合、ステップS20において、コミット判定部271は、CSE240に対応するCSE-WINDOW260に出力するグループコミット信号GCMTを生成する。これにより、セレクタ部245Dが選択している次のグループ番号GIDの命令データDがCSE-WINDOW260にセットされる。すなわち、グループコミットが成立した場合、CSE-WINDOW260にセットする命令データDに対応するグループ番号GIDが更新される。
次に、ステップS22において、レジスタ273は、グループコミット信号GCMTに基づいて、グループ番号CGIDを更新し、次のグループ番号GIDを出力する。この後、動作は、ステップS10に戻る。
図15は、命令の完了報告に基づいてCSE-WINDOW260をセットする動作の一例を示す。図15は、演算処理装置102の制御方法の一例を示す。図15に示すフローは、図9の命令完了判定部270により繰り返し実行される。
まず、ステップS30において、図9の選択信号生成部274は、グループ番号CGIDに”1”を加えたグループ番号を生成する。グループ番号は、CSE242から次に読み出す完了報告COMPおよびデータEDが保持されたエントリを示す。ステップS30の動作は、図14のステップS10の動作と同様である。
次に、ステップS32において、図9のコミット判定部271は、グループコミットが成立した場合、動作をステップS34に移行し、グループコミットが成立しない場合、動作をステップS42に移行する。ステップS32の動作は、図14のステップS16の動作と同様である。
ステップS34において、選択信号生成部274は、ステップS30で生成したグループ番号をデコードして、グループ選択信号GSELE0-31のいずれか1つを有効レベルに設定する。ステップS34の動作は、図14のステップS12の動作と同様である。
次に、ステップS36において、命令完了判定部270は、有効レベルに設定されたグループ選択信号GSELEに基づいて、次のグループ番号GIDの完了報告COMPおよびデータED等をセレクタ部245Eに選択させる。ステップS36の動作は、図14のステップS14の動作と同様である。
次に、ステップS38において、CSE242に対応するCSE-WINDOW260は、オア部252Bが出力する完了報告COMPおよびデータEDをセットする。次に、ステップS40において、レジスタ273は、図14のステップS20で生成されるグループコミット信号GCMTに基づいて、グループ番号CGIDを更新し、次のグループ番号GIDを出力する。この後、動作は、ステップS30に戻る。なお、ステップS40の動作は、説明を分かりやすくするために、図8のステップS22の動作を重複して示したものであり、図8のステップS22と図9のステップS40がそれぞれ実行されるものではない。
一方、グループコミットが成立しない場合、ステップS42において、選択信号生成部274は、現在のCGIDをデコードして、グループ選択信号GSEL0-31のいずれか1つを有効レベルに設定する。すなわち、CGID(GID)は更新されない。次に、ステップS44において、命令完了判定部270は、有効レベルに設定されたグループ選択信号GSELに基づいて、現在のグループ番号GIDの完了報告COMPおよびデータED等をセレクタ部245Eに選択させる。
次に、ステップS46において、CSE242に対応するCSE-WINDOW260は、オア部252Bが出力する完了報告COMPおよびデータEDをセットする。これにより、各列ブロックCB0-CB3に対応して、新たに発生する完了報告COMPをCSE242からCSE-WINDOW260にセットすることができる。この際、4つのセレクタ246Eに共通のグループ選択信号GSEL0-31を用いることで、完了報告COMPをCSE-WINDOW260にセットする回路を、後述する図16に示す回路に比べて簡易な構成にすることができる。次に、ステップS48において、レジスタ273は、グループコミット信号GCMTを受けないため、グループ番号CGIDを更新することなく、動作をステップS30に戻す。
図16は、他の命令完了制御部におけるCSE240とその関連回路との一例を示す。図8と同一または同様の構成については、同じ符号を付し、詳細な説明は省略する。
図16に示す命令完了制御部は、ラッチ部251、デコーダ255、セレクタ部256、CSE240、セレクタ部247D、CSE-WINDOW260、命令完了処理部280および命令完了判定部275を有する。CSE240、CSE-WINDOW260および命令完了処理部280は、図9と同じである。
ラッチ部251は、命令デコード部16から受信するIIDをラッチする回路が追加されたことを除き、図8に示すラッチ部250と同様である。以下では、ラッチ部251に含まれるラッチは、ラッチ251とも称される。各デコーダ255は、リリースフラグRELが有効な場合、IIDをデコードして命令データDを格納するCSE240のエントリを決定する。各デコーダ255は、決定したエントリに命令データDを格納するための選択信号DSEL(DSEL0-DSEL3)およびESEL(ESEL0-ESEL127)を生成する。
各デコーダ255が生成する選択信号DSEL0-DSEL3の各々は、セレクタ部256の4つのセレクタ257(2570-2573)のいずれかに供給される。例えば、各セレクタ257は、各デコーダ255から出力される4つの選択信号DSELをオア回路で受け、オア回路が出力する選択信号DSELに基づいて、命令データD0-D3のいずれかを選択する。
各デコーダ255が生成する選択信号ESEL0-127は、32本ずつ列ブロックCB0-CB3のそれぞれに供給される。選択信号ESEL0-127は、IID番号に対応しており、CSE240の128個のエントリをそれぞれ対応する。各列ブロックCB0-CB3は、各デコーダ255から出力される4つの選択信号ESELをオア回路で受け、オア回路が出力する選択信号ESELに基づいてクロックイネーブル信号CLKENを生成する。4つの選択信号ESELは、末尾の数字が同じ選択信号ESEL(例えば、4つのESEL0)である。そして、生成したクロックイネーブル信号CLKENに対応するエントリにクロック信号が供給され、命令データD0-D3のいずれかがクロック信号に同期して選択信号ESELが示すエントリに格納される。
例えば、命令データD0を出力するデコードスロットDS0(図6)に対応するラッチ251が、命令データD0とIID=”0”をラッチした場合、セレクタ2570は、選択信号DSEL0に基づいて命令データD0を選択する。列ブロックCB0は、選択信号ESEL0に基づいて、セレクタ2570が選択した命令データD0を、IID=”0”が割り当てられたエントリに格納する。
また、命令データD0を出力するデコードスロットDS0に対応するラッチ251が、命令データD0とIID=”2”をラッチした場合、セレクタ2572は、選択信号DSEL2に基づいて命令データD0を選択する。列ブロックCB2は、選択信号ESEL2に基づいて、セレクタ2572が選択した命令データD0を、IID=”2”が割り当てられたエントリに格納する。
同様に、命令データD3を出力するデコードスロットDS3に対応するラッチ251が、命令データD3とIID=”8”をラッチした場合、セレクタ2570は、選択信号DSEL3に基づいて命令データD3を選択する。列ブロックCB0は、選択信号ESEL124に基づいて、セレクタ2570が選択した命令データD3を、IID=”8”が割り当てられたエントリに格納する。
このように、図16では、デコードスロットDS0-DS3が出力する命令データDが、列ブロックCB0-CB3のいずれにも格納可能である。このため、ラッチ251から格納先の列ブロックCB0-CB3までに命令データDを転送するために”(128+4)×4”本の選択信号の配線が設けられる。また、例えば、数十ビットの各命令データD0-D3を4つのセレクタ257に接続するための配線が設けられる。さらに、デコーダ255とセレクタ257が設けられる。このため、命令データD0をCSE240に格納するための回路規模は、図8に比べて大きくなる。
命令完了判定部275は、選択信号生成部276およびIID(CIDD)を保持するレジスタ277を有する。選択信号生成部276は、4つのCSE-WINDOW260からコミット信号CMTを受信し、受信したコミット信号CMTの数に対応する増分を示す更新信号UPDをレジスタ277に出力し、レジスタ277により更新されたCIDDを受信する。選択信号生成部276は、更新されたCIDDに基づいて、次に、CSE-WINDOW260にセットする命令データDを選択するための選択信号IIDSEL(IIDSEL0-IIDSEL511)を生成する。512本の選択信号IIDSELは、128本ずつ各セレクタ248Dに供給される。これにより、連続する任意の4つのIIDに対応する命令データDを4つのCSE-WINDOW260に格納することが可能になる。
例えば、レジスタ277がCIDD=”2”を出力する場合、選択信号生成部276は、列ブロックCB2のIID=”2”が割り当てられたエントリを左から1番目のセレクタ248Dに選択させる選択信号IIDSELを生成する。選択信号生成部276は、列ブロックCB3のIID=”3”が割り当てられたエントリを左から2番目のセレクタ248Dに選択させる選択信号IIDSELを生成する。選択信号生成部276は、列ブロックCB0のIID=”4”が割り当てられたエントリを左から3番目のセレクタ248Dに選択させる選択信号IIDSELを生成する。そして、選択信号生成部276は、列ブロックCB1のIID=”5”が割り当てられたエントリを左から4番目のセレクタ248Dに選択させる選択信号IIDSELを生成する。
図16では、512本の選択信号IIDSELの配線が設けられ、各列ブロックCB0-CB3の各エントリから4つのセレクタ248Dに数十ビットの命令データDを転送するための配線が設けられる。これにより、CSE240の各エントリが保持する命令データDを4つのCSE-WINDOW260のいずれにも格納可能になる。しかし、命令データD0をCSE-WINDOW260に読み出すための回路規模は、図8に比べて大きくなる。
換言すれば、図8では、列ブロックCB0-CB3がデコードスロットDS0-DS3に対応して設けられ、IIDの欠番を許可するため、各デコードスロットDS0-DS3は、4の倍数+所定の増分のIIDのみを生成すればよい。このため、命令データDを任意の列ブロックCB0-CB3に格納し、取り出す配線が不要になるため、命令完了制御部22の回路規模を図16に比べて削減することができる。
図17は、他の命令完了制御部におけるCSE242とその関連回路との一例を示す。図9と同一または同様の構成については、同じ符号を付し、詳細な説明は省略する。
図17に示す命令完了制御部は、ラッチ部253、デコーダ254、IIDマッチ部253A、CSE242、セレクタ部247E、オア部252B、命令完了判定部275、CSE-WINDOW260および命令完了処理部280を有する。CSE-WINDOW260、命令完了処理部280および命令完了判定部275は、図16と共通の回路である。
ラッチ部253、デコーダ254、CSE242、オア部252BおよびCSE-WINDOW260は、図9と同じである。IIDマッチ部253Aは、レジスタ277から受けるCIID(CIID、CIID+1、CIID+2、CIID+3)の各々をEIDDと比較することを除き、図9に示すIIDマッチ部252Aと同じ機能を有する。IIDマッチ部253Aは、EIIDと一致するCIIDがある場合、バイパス経路BYPSを介して、一致したCIIDに対応するオア部252Bに完了報告COMPとデータEDとを出力する。セレクタ248Eは、選択するビット数が異なることを除き図16に示すセレクタ248Dと同じ機能を有する。
図17においても、図16と同様に、CSE242の各エントリが保持する完了報告COMPおよびデータEDを4つのCSE-WINDOW260のいずれにも格納可能にするために、512本の選択信号IIDSELの配線が設けられる。また、各列ブロックCB0-CB3の各エントリから4つのセレクタ248Eに完了報告COMPおよびデータEDを転送するための配線が設けられる。このため、命令データD0をCSE-WINDOW260に読み出すための回路規模は、図9に比べて大きくなる。換言すれば、図9では、任意の列ブロックCB0-CB3に格納された完了報告COMPおよびデータEDを任意のCSE-WINDOW260に取り出す配線が不要になるため、命令完了制御部22の回路規模を図17に比べて削減することができる。
図18は、図16のCSE240および図17のCSE242に格納される命令データD等の割り当ての一例を示す。図11と同様の割り当てについては、詳細な説明は省略される。表中の数値はIIDを示し、表中の括弧内は命令Dが割り当てられる列ブロックCB0-CB3を示す。
第1サイクルおよび第2サイクルの割り当ては図11の第1サイクルおよび第2サイクルの割り当てと同様である。図18ではIIDの欠番はないため、第3サイクルにおいて、”7”から”10”のIIDに対応するエントリに命令データD等がインオーダで割り当てられる。例えば、デコードスロットDS0による命令データDは、列ブロックCB3に格納され、デコードスロットDS1による命令データDは、列ブロックCB0に格納される。
第4サイクルでも、第3サイクルと同様に、デコードスロットDS0による命令データDは、列ブロックCB3に格納され、デコードスロットDS1により生成された命令データDは、列ブロックCB0に格納される。第4サイクルでは、IID=”13”、”14”に割り当てられた命令データDは、第4サイクルで発行できなかったため、第5サイクルで再度割り当てられる。この場合、第5サイクルでは、IID=”13”、”14”に割り当てられた命令データDは、デコードスロットDS0、DS1によりデコードされる。
この後、第6サイクルから第8サイクルにおいても、IIDが欠番されることなく、命令データDがインオーダで割り当てられる。
図16および図17に示す命令完了制御部では、デコードスロットDSと列ブロックCBとが対応していない。このため、デコードスロットDSにより生成された命令データDは、例えば、表中のデコードスロットDS0の列に示すように、列ブロックCB0だけでなく、列ブロックCB1-CB3にも割り当てられる。これにより、図16に示すように、セレクタ部256部および多数の配線等が設けられる。
なお、CSE242への完了報告COMPおよびデータED等の割り当ては、演算器40等からのIIDおよび完了報告COMPに基づいて、命令毎に実行されることを除き、CSE240に対する割り当てと同様である。
図19は、図16および図17のCSE-WINDOW260に格納される命令データD等の割り当ての一例を示す。図12と同様の割り当てについては、詳細な説明は省略される。表中の左側の数値はIIDを示し、表中の括弧内は命令Dが割り当てられた列ブロックCB0-CB3を示す。表中の右側の”C”は、対応する命令の完了報告が発行された状態(コミット状態)を示し、”C”がないものは、対応する命令の完了報告が発行されていないことを示す。
第1サイクルの割り当ては図12の第1サイクルの割り当てと同様である。第2サイクルでは、IID=”7”に対応する命令は、コミット状態であるが、IID=”6”に対応する命令がコミット状態でないため、コミットされない。この場合、第3サイクルにおいて、IID=”6”から”9”に対応する命令が4つのCSE-WINDOW260に割り当てられる。
第3サイクルでは、IID=”9”に対応する命令がコミット状態でないため、第4サイクルにおいて、IID=”9”から”12”に対応する命令が4つのCSE-WINDOW260に割り当てられる。
図19では、4つのCSE-WINDOW260の全てに命令データD等が順次インオーダで割り当てられるため、図18と同様に、各CSE-WINDOW260には、全ての列ブロックCB0-CB3に保持された命令データD等がセットされる可能性がある。したがって、図16および図17に示すように、多数の配線およびセレクタ部256部等が設けられる。
以上、図3から図15に示す実施形態においても、図1および図2に示す実施形態と同様に、CSE240、CSE242の入力側と出力側に切り替え部および配線を設けなくてよいため、演算処理装置102の回路規模の増大を抑制することができる。
さらに、図3から図15に示す実施形態では、GIDを用いてCSE240のエントリを選択できるため、IIDを用いる場合に比べてグループデコード部243の回路規模を削減することができる。
図12の第3および第4サイクルに示すように、グループ番号GIDに対応するIIDが割り当てられた命令のいずれかがコミットしない場合、グループ番号GIDを更新せずにコミットしなかった命令のコミットの判定が次のサイクルで実行される。これにより、IID=”10”、”11”に対応する命令データDをCSE-WINDOW260に再セットすることなく、コミットの判定処理を実行することができ、CSE-WINDOW260へのセット動作を簡易に実行することができる。
図8に示すCSE240への命令データDの格納をGIDに基づいて実行する場合にも、CSE242への完了報告COMPの格納は、IIDに基づいて実行される。これにより、命令デコード部16は、演算器40、42等にGIDを発行せずに、IIDを発行することができ、リザベーションステーション20を含む既存の回路を利用して演算処理装置102を設計することができる。
グループコミットが成立しない場合、4つのセレクタ246Eに共通のグループ選択信号GSEL0-31を用いて、新たに発生する完了報告COMPをCSE-WINDOW260にセットすることができる。これにより、完了報告COMPをCSE-WINDOW260にセットする回路を、図16に示す回路に比べて簡易な構成にすることができる。
IIDマッチ部252Aを設けることで、完了報告COMPおよびデータEDのバイパス機能を実現することができ、列ブロックCB0-CB3からの完了報告COMPを待つことなく完了処理を開始することができる。
セレクタ246Dを列ブロックCBの各々に対応して設けることで、各セレクタ246Dは、他の列ブロックCBに保持された命令データDを選択しなくてよい。このため、各セレクタ246Dの回路規模および各セレクタ246Dに接続される配線の数を抑えることができる。
命令完了制御部22は、グループ番号GIDに対応するIIDが割り当てられた命令のいずれかがコミットしない場合、グループ番号GIDを更新せずにコミットしなかった命令のコミットの判定を次のサイクルで実行する。これにより、コミットしなかった命令データDをCSE-WINDOW260に再セットすることなく、コミットの判定処理を実行することができ、CSE-WINDOW260へのセット動作を簡易に実行することができる。
命令に割り当てられなかったIIDを欠番とすることで、デコードスロットDS毎に割り当てられるIIDを、重複することなく決めることができる。この結果、CSE240、CSE242に接続される配線の本数の増加および回路の増加を抑制することができる。
図20は、別の実施形態における演算処理装置に含まれるCSE242とその関連回路との一例を示す。図20では、図9のデコーダ254の代わりに、デコーダ254A、アンド部254Bおよびオア部254Cが設けられる。演算処理装置のその他の構成および機能は、図3から図15に示す構成および機能と同様である。すなわち、CSE242に情報を格納する回路構成が、図3に示す演算処理装置102と相違する。
この実施形態では、ラッチ部253に取り込まれた完了報告COMPおよびデータEDは、クロックイネーブル信号CLKENによる制御を使用せずに、各列ブロックCB0-CB3のエントリに格納される。
デコーダ254Aは、ラッチ部253に保持された完了報告COMPとEIIDに基づいて、128個のエントリのいずれかを選択する選択信号DSEL(DSEL0-DSEL127)の1つを有効レベルに設定する。アンド部254Bには、各選択信号DSELに対応して、完了報告COMP用とデータED用のアンド回路が設けられ、オア部254Cには、各選択信号DSELに対応して、完了報告COMP用とデータED用のオア回路が設けられる。
各アンド回路は、対応する選択信号DSELが有効レベルの場合、完了報告COMPまたはデータEDをオア回路に出力する。オア回路は、アンド回路から完了報告COMPまたはデータEDを受けた場合、受けた完了報告COMPまたはデータEDを、対応するエントリに格納する。また、オア回路は、アンド回路から完了報告COMPまたはデータEDのいずれも受けない場合、対応するエントリが出力する完了報告COMPまたはデータEDを、対応するエントリにループバックする。
図20に示す構成では、CSE242の1つのエントリに対して、回路遅延や配線遅延などの要因により、完了報告COMPおよびデータEDを複数のサイクルでばらばらに受信した場合にも、先に受信した情報を失うことなくエントリに保持し続けることができる。
図21は、別の実施形態における演算処理装置に含まれるCSE(コミットスタックエントリ)の一例を示す。CSEは、図8に示すCSE240および図9に示すCSE242のそれぞれに対応する。図21に示すCSEを含む演算処理装置の命令デコード部は、6つのデコードスロットDS0-DS5を有する。すなわち、図21に示すCSEを含む演算処理装置は、例えば、スーパースカラ方式のプロセッサである。CSEおよびデコードスロットDS0-DS5以外の演算処理装置の構成および機能は、図3から図15と同様である。
CSEは、各々が40個のエントリを含む6個の列ブロックCB0-CB5を有し、合計で240個のエントリを有する。各エントリ内の左側の数値はIIDを示し、括弧内の数値は、2進数でのIIDを示す。CSEへのIIDの割り当ては、列ブロックCB6、CB7があると仮定して行われる。すなわち、列ブロックCB6、CB7に割り当てられるべきIIDは欠番とされる。
このように、命令デコード部16が、2のn乗個(nは1以上の整数)でない3つ以上のデコードスロットDSを有する場合、エントリへのIIDの割り当ては、デコードスロットDSの数を2のn乗個と仮定して実行される。そして、存在しないデコードスロットDSが命令をデコードしたと仮定した場合に命令に割り当てられるIIDは欠番とされる。
これにより、列ブロックCB0に割り当てられるIIDは、グループ番号GIDを4倍した値になり、列ブロックCB2に対応に割り当てられるIIDは、グループ番号GIDを4倍して1を加えた値になる。列ブロックCB2に割り当てられるIIDは、グループ番号GIDを4倍して2を加えた値になり、列ブロックCB3に割り当てられるIIDは、グループ番号GIDを4倍して3を加えた値になる。列ブロックCB4に割り当てられるIIDは、グループ番号GIDを4倍して4を加えた値になり、列ブロックCB5に割り当てられるIIDは、グループ番号GIDを4倍して5を加えた値になる。
図21に示すCSEでは、デコードスロットDS0がデコードした命令のデータは、列ブロックCB0に格納され、デコードスロットDS1がデコードした命令のデータは、列ブロックCB1に格納される。デコードスロットDS2がデコードした命令のデータは、列ブロックCB2に格納され、デコードスロットDS3がデコードした命令のデータは、列ブロックCB3に格納される。デコードスロットDS4がデコードした命令のデータは、列ブロックCB4に格納され、デコードスロットDS5がデコードした命令のデータは、列ブロックCB5に格納される。
このように、デコードスロットDSの数が2のべき乗でない場合、デコードスロットDSが2のべき乗個あると仮定し、各列ブロックCBのエントリにIIDを割り当てることで、GIDを、例えば、IIDの上位6ビットと一致させることができる。これにより、IID用のデコーダを設けることなく、GIDを用いて命令データD等を格納するエントリを決定することができる。この結果、CSEに命令データD等を格納するための配線および回路と、CSEからCSE-WINDOWに命令データD等を転送するための配線および回路とを削減することができる。また、列ブロックCBの番号は、IIDの下位3ビットと一致するため、IIDから列ブロックCBの番号を特定することができる。
図22は、他の演算処理装置に含まれるCSE(コミットスタックエントリ)の一例を示す。CSEは、図8に示すCSE240および図9に示すCSE242のそれぞれに対応する。図22に示すCSEを含む演算処理装置の命令デコード部は、6つのデコードスロットDS0-DS5を有する。
CSEの構成は、IIDの割り当てが異なることを除き、図21に示すCSEの構成と同じである。図22では、IIDに欠番はないため、列ブロックCB0から列ブロックCB5にかけて番号が1つずつ増加するIIDが順次割り当てられる。この場合、IIDを用いて命令データD等を格納する列ブロックCBを求めるための専用のデコーダが設けられる。また、IIDを用いて命令データD等を格納するGID(すなわち、エントリ)を求めるための専用のデコーダが設けられる。さらに、CSEの入力側と出力側とに、命令データD等を入力または出力するためのセレクタと多数の配線とが設けられる。この結果、図22のCSEの周辺に設けられる回路の規模は、図21のCSEの周辺に設けられる回路の規模より増大する。
以上、図21に示す実施形態では、命令デコード部16が、2のn乗個(nは1以上の整数)でない数のデコードスロットDSを有する場合にも、IID用のデコーダを設けることなく、IIDを用いて命令データD等を格納するエントリを決定することができる。この結果、CSEに命令データD等を格納するための配線および回路と、CSEからCSE-WINDOWに命令データD等を転送するための配線および回路とを削減することができる。
以上の詳細な説明により、実施形態の特徴点および利点は明らかになるであろう。これは、特許請求の範囲がその精神および権利範囲を逸脱しない範囲で前述のような実施形態の特徴点および利点にまで及ぶことを意図するものである。また、当該技術分野において通常の知識を有する者であれば、あらゆる改良および変更に容易に想到できるはずである。したがって、発明性を有する実施形態の範囲を前述したものに限定する意図はなく、実施形態に開示された範囲に含まれる適当な改良物および均等物に拠ることも可能である。