演算処理装置
【課題】レジスタウィンドウ方式のレジスタファイルを備え、ウィンドウ切り替え命令の後続命令のアウトオブオーダ実行が可能な演算処理装置の回路規模を削減し、その消費電力も低減する。
【解決手段】MRF10は、レジスタファイル、MRF_RA1及びMRF_RA2と5つの読み出しポートio0、io1、io2、l0、l1を備える。レジスタ制御部210によってMRF_RA1を制御し、それらの読み出しポートから、CWPレジスタ213の値(cwp)で指定されるレジスタウィンドウのインレジスタ/アウトレジスタ、ローカルレジスタのウィンドウを選択出力する。次に、レジスタ制御部210によってMRF_RA2を制御し、該選択出力されたウィンドウのデータと前記レジスタファイルから入力するグローバルレジスタのウィンドウのデータから、演算部30が必要とするレジスタのデータを選択し、該データを演算部30に出力する。
【解決手段】MRF10は、レジスタファイル、MRF_RA1及びMRF_RA2と5つの読み出しポートio0、io1、io2、l0、l1を備える。レジスタ制御部210によってMRF_RA1を制御し、それらの読み出しポートから、CWPレジスタ213の値(cwp)で指定されるレジスタウィンドウのインレジスタ/アウトレジスタ、ローカルレジスタのウィンドウを選択出力する。次に、レジスタ制御部210によってMRF_RA2を制御し、該選択出力されたウィンドウのデータと前記レジスタファイルから入力するグローバルレジスタのウィンドウのデータから、演算部30が必要とするレジスタのデータを選択し、該データを演算部30に出力する。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、レジスタウィンドウ方式のレジスタファイルを備える演算処理装置に係り、特にアウトオブオーダ実行が可能な演算処理装置に関する。
【背景技術】
【0002】
RISC(Reduced Instruction Set Computer)アーキテクチャのプロセッサ(以下、RISCプロセッサと呼ぶ)は、レジスタ−レジスタ演算を中心としており、メモリアクセスを減少することにより処理の高速化を図っている(ロード−ストア・アーキテクチャ)。RISCプロセッサは、上記レジスタ−レジスタ演算の効率化のために大容量のレジスタファイルを備えている。このレジスタファイルとして、サブルーチン呼び出し時の引き数の引渡し(引数の退避/復帰)のオーバーヘッドを削減するように構成されたレジスタウィンドウ方式のレジスタファイルが知られている。
【0003】
図17は、上記レジスタウィンドウ方式のレジスタファイルの構成例を示す図である。
同図に示すレジスタファイル1000は、8本のレジスタウィンドウW0〜W7から成り、これらのレジスタウィンドウW0〜W7は論理的にリング状に連結されている。各レジスタウィンドウWk(k=0〜7)は、W globals(不図示)、Wk outs、Wk ins、及びWk localsの4種類のセグメント(以後、これをウィンドウと呼ぶことにする)を備えている。これら4種類のウィンドウは、いずれも、8個のレジスタから構成されている。W globalsは全てのサブルーチンで共用される8個のグローバルレジスタを備え、Wk localsは各レジスタウィンドウ固有の8個のローカルレジスタを備えている。Wk insは8個のinレジスタ(インレジスタ)を備え、Wk outsは8個のoutレジスタ(アウトレジスタ)を備えている。
【0004】
Wk outsは自ルーチンが呼び出すサブルーチンに引き数を渡すために、Wk insは自ルーチンを呼び出した親ルーチンから引き数を受け取るために使用される。レジスタファイル1000では、Wk insとWk+1 outs及びWk outsとWk−1 insがオーバーラップするように構成されているため、サブルーチンコール時において、引き数の引渡しとそのために使用するレジスタの確保を高速化できる。Wk localsは、各サブルーチン(親ルーチンから呼び出された子ルーチン)が作業用のレジスタセットとして使用する。
【0005】
各サブルーチンは、実行時において、8本のレジスタウィンドウW0〜W7のいずれか一つを使用する。ここで、実行中のサブルーチンが使用するレジスタウィンドウWk(カレントウィンドウと呼ばれる)は、サブルーチンコールが発生する度に右回り(“SAVE”で示された破線の矢印の方向)に前記ウィンドウ2個分回転し、サブルーチンの復帰時に左回り(“RESTORE”で示されたに破線の矢印の方向)に前記ウィンドウ2個分回転するようになっている。
【0006】
レジスタファイル1000においては、各レジスタウィンドウWkは、それぞれに割り当てられたレジスタウィンドウ番号(以下、ウィンドウ番号と呼ぶ)によって管理されている。例えば、レジスタウィンドウWkにはウィンドウ番号kが割り当てられる。実行中のサブルーチンが使用しているレジスタウィンドウWkの番号kはCWP(Current Window
Pointer)に保持される。CWPの値は、SAVE命令の実行もしくはトラップ(trap)発生によってインクリメントされ、RESTORE命令の実行もしくはRETT命令によるトラップからの復帰によってデクリメントされる。図17では、CWPの値は“0”となっており、CWPはレジスタウィンドウW0を指定している。このように、CWPの値を増減させて、カレントウィンドウの切り替えを行う命令を、本明細書では“ウィンドウ切り替え命令”と呼ぶことにする。
【0007】
図17に示すレジスタファイル1000は、8本のレジスタウィンドウWkと1本のウィンドウW globals(不図示)で構成されている。ここで、W globalsは、全てのルーチンで共用されるデータを格納するレジスタセット(ウィンドウ)である。各レジスタウィンドウWkは24個(=8×3)のレジスタを備えており、ウィンドウW globalsは8個のレジスタを備えている。これらのレジスタの内、ウィンドウWk InsとウィンドウWk outsのレジスタが64個(=8×8)オーバーラップしているので、レジスタファイル1000が備えるレジスタの総数は、136個(=8×24+8−64)である。プロセッサ(演算処理装置)の演算器がサブルーチンを実行するためには、レジスタファイル1000のそれら全てのレジスタにデータを読み書きできる必要がある。
【0008】
この場合、このような大きなレジスタファイル1000からデータを読み出す回路の規模と速度が問題となる。この問題を解消するため、図18に示すような構成の演算処理装置が考案されている。
【0009】
図18に示す演算処理装置2000は、マスタレジスタファイル2001(以後、MRF2001と記載)、ワーキングレジスタファイル2002(以後、WRF2002と記載)及び演算器2003から構成されている。演算器2003は、命令を実行する実行部(図中に示す“Execution unit”)と記憶部(図中に示す“Memory unit”)を備えている。
【0010】
一般に、レジスタウィンドウ方式のレジスタファイルは、レジスタウィンドウ数が増えると、具備するレジスタの数が多くなり、演算器にオペランドを高速に供給することが困難となる。このため、図18に示すプロセッサは、全てのレジスタウィンドウ(ウィンドウW globalsも含む)を備えるMRF2001に加えて、このMRF2001内のCWPが指すカレントウィンドウのデータのコピーを保持するWRF2002を備え、演算器2003へのオペランドの供給は、このWRF2002から行うような構成となっている。
【0011】
しかし、演算処理装置2000をこのような構成とした場合、WRF2002にはCWPが指定するカレントウィンドウのデータしか保持されていないため、SAVE命令やRESTORE命令のようなウィンドウ切り替え命令が実行されると、その後続命令で必要となるオペランドをWRF2002から供給できなくなる。このため、MRF2001からWRF2002に必要なレジスタウィンドウのデータを転送する処理が必要となり、この処理が終了するまで、以後の命令の実行はストールするという問題が生じる。
【0012】
また、アウトオブオーダ(out-of-order)実行機能を備えたプロセッサの場合には、命令の実行順序はプログラムの順序とは限らず、処理可能な命令から実行していくが、ウィンドウ切り替え命令に後続する命令は、例え、処理可能になったとしても、該ウィンドウ切り替え命令実行後に、WRF2002に必要なレジスタウィンドウのデータが転送されるまでは実行できない。
【0013】
このような制約は、同時命令発行数が多くアウトオブオーダ実行が可能なスーパースカラ方式のプロセッサでは、非常に大きな性能低下を引き起こす。何故ならば、アウトオブオーダ実行方式のプロセッサでは、多くの命令をフェッチし、バッファにそれらの命令を蓄積しておき、そのバッファからプログラムの実行順序とは関係なく、実行可能な命令から順に実行していくことで、命令実行のスループットを上げているからである。
【0014】
そこで、図19に示すような演算処理装置が考案されている(例えば、特許技術文献1参照)。図19に示す演算処理装置3000では、MRF3001がカレントウィンドウ
のデータに加え、該カレントウィンドウの前後のレジスタウィンドウのデータを保持するようになっている。また、MRF3001とWRF3002の間には、MRF3001からWRF3002にレジスタウィンドウのデータを転送する際に、そのデータを一時的に保持するためのレジスタ群3113(例えば、8バイトのレジスタが8個)が設けられている。
【0015】
このような構成において、演算処理装置3000は、先見転送により、CWP+1及びCWP−1が指すレジスタウィンドウのデータを、予め、MRF3001からWRF3002に転送しておくことによって、ウィンドウ切り替え命令に後続する命令をアウトオブオーダで実行可能となっている。尚、図19において、破線枠CWPはCWPが指定するレジスタウィンドウを、破線枠CWP+1はCWPが指定するレジスタウィンドウの次のレジスタウィンドウを示す。また、破線枠CWP−1はCWPが指定するレジスタウィンドウの一つ前のレジスタウィンドウを示している。
【0016】
ここで、CWPが、現在、レジスタウィンドウW3を指定しているものとする。このとき、WRF3002にはレジスタウィンドウW2、W3、W4が保持されているので、演算器3003はレジスタウィンドウW2〜W4を利用する命令を実行可能である。その後、SAVE命令が実行されると、そのSAVE命令実行後、CWPはレジスタウィンドウW4を指定するようにインクリメントされる。そして、MRF3001からレジスタ群3113を介してWRF3002にレジスタウィンドウW5のデータが転送され、WRF3002にはレジスタウィンドウW3〜W5のデータが保持される。これにより、演算器3003はレジスタウィンドウW3〜W5を使用する命令を実行可能となる。
【0017】
しかしながら、演算処理装置3000においては、WRF3002が3本のレジスタウィンドウを保持するため、WRF3002は64個のレジスタを備える必要がある。また、ラッチ用の前記レジスタ群が8個のレジスタを備えるため、合計72個のレジスタが必要となる。図18の前記演算処理装置2000のWRF2002は1本のレジスタウィンドウのみを保持するため、32個のレジスタを備える。したがって、演算処理装置3000は、レジスタを演算処理装置2000よりも40個多く備えることになり、回路規模が大きくなってしまう。さらに、演算処理装置3000においては、WRF3002と演算器3003にデータを転送するための選択回路(不図示)の面積(回路規模)が大きくなってしまうと共に、演算器3003がWRF3002からデータを読み出す処理速度が低下してしまう。
【0018】
この問題を解消するために、本出願人は、アウトオブオーダ実行方式の命令パイプラインの制御に着目して、WRFにはCWP+1またはCWP−1のいずれか一方のみを転送・保持する構成の情報処理装置を考案した(特許技術文献2参照)。
【0019】
図20に、上記特許技術文献2の情報処理装置4000の構成を示す。図20に示すように、該情報処理装置4000は、CRB(Current window Replace Buffer)4030とCWR(Current Working Register file)4020を備え、CRB4030とCWR4020 とでWRFを構成している。CWR4020はカレントウィンドウのデータを保持するバッファであり、CRB4030はCWR4020 に次に保持されるレジスタウィンドウのデータを格納するバッファである。演算部4040は、アウトオブオーダ実行方式で命令を実行するパイプラインを備えている。制御部4050は、演算部4040によりウィンドウ切り替え命令がデコードされると、CWR4020 に次に保持すべきカレントウィンドウがMRF4010からCRB4030に転送されるように、MRF4010とCWR4020 を制御する。また、制御部4050は、演算部4040が前記ウィンドウ切り替え命令の実行を完了すると、CRB4030に保持されているレジスタウィンドウのデータをCWR4020 に転送させ、CWR4020に該レジスタウィンドウのデータを保持させる。
【0020】
CWR4020は、カレントウィンドウのウィンドウglobals(G)、locals(L)、ins(Io0)及びouts(Io1)の データを保持するレジスタ群4021〜4024を備えている。各レジスタ群は8個のレジスタを備えるので、CWR4020は、32個(=4×8)のレジスタを備える。CRB4030は、カレントウィンドウの次のレジスタウィンドウのデータの内、CWR4020に保持されているデータとオーバーラップしないウィンドウのデータのみを保持するレジスタ群4031、4032を備えている。レジスタ4031は次のレジスタウィンドウのウィンドウlocals(L)のデータを保持し、レジスタ4032は次のレジスタウィンドウのウィンドウins(Io0)またはouts(Io1)のデータを保持する。各レジスタ群4031、4032は8個のレジスタを備えるので、CWR4020は、16個(=8×2)のレジスタを備える。したがって、情報処理装置4000のWRFは48個のレジスタから構成される。
【0021】
このように、特許技術文献2の情報処理装置4000のWRFは、特許技術文献1の演算処理装置3000のWRF3002よりもレジスタの数が24個少ない。このため、情報処理装置4000は、演算処理装置3000よりも回路規模を小さくできる共に消費電力も低減できる。
【特許文献1】特開2003−196086号公報
【特許文献2】特願2005−27504号
【発明の開示】
【発明が解決しようとする課題】
【0022】
しかしながら、前記演算処理装置3000や前記情報処理装置4000は、いずれもMRF内の1つのレジスタウィンドウのコピーを保持する記憶手段(WRFや、CRBとCWR)を設けているため、ハードウェアコストがかかり、回路規模も大きくなる。また、前記情報処理装置3000は、MRF4010とCWR4020との間に設けられたワークバッファ(CRB4030)からCWR4020へのデータ転送に電力を消費する。
【0023】
本発明の目的は、レジスタウィンドウ方式のレジスタファイルを備え、ウィンドウ切り替え命令の後続命令のアウトオブオーダ実行が可能な演算処理装置を、従来よりも小さな回路規模と、より低い消費電力で実現することである。
【課題を解決するための手段】
【0024】
本発明の演算処理装置の第1態様は、レジスタウィンドウを複数備えるレジスタファイルと、前記レジスタファイルに保持されているデータをオペランドとする命令を実行する演算手段と、前記レジスタファイルが備える複数のレジスタウィンドウの中から、カレントウィンドウとなるレジスタウィンドウを指定するアドレス情報を保持するカレントウィンドウポインタ手段と、前記カレントウィンドウの切り替えを指示するウィンドウ切り替え命令がデコードされたとき、前記カレントウィンドウポインタ手段が保持する前記アドレス情報を更新し、前記ウィンドウ切り替え命令のデコードが開始されてからコミットが開始される直前までの間は、前記演算手段が、前記更新前のアドレス情報が指定する第1のレジスタウィンドウのデータと前記更新後のアドレス情報が指定する第2のレジスタウィンドウのデータを、前記レジスタファイルから読み出しできるように制御する制御手段とを備える。
【0025】
上記本発明の演算処理装置の第1態様によれば、従来の演算処理装置のように、レジスタファイルから演算手段が命令実行に必要とするデータを高速に読み出すための記憶手段を設けることなく、前記レジスタファイルから前記演算手段に、命令実行に必要なデータを高速に供給することができる。また、命令パイプラインにおいてアウトオブオーダ実行
が可能となる。
【0026】
本発明の演算処理装置の第2態様は、前記第1態様の演算処理装置において、前記制御手段は、前記ウィンドウ切り替え命令のコミットが開始されたとき、前記演算手段が、前記更新後のアドレス情報が指定する前記第2のレジスタウィンドウのデータのみを、前記レジスタファイルから読み出しできるように制御する。
【0027】
上記本発明の演算処理装置の第2態様によれば、命令パイプラインにおいてインオーダ完了が可能となる。
本発明の演算処理装置の第3態様は、前記第1態様の演算処理装置において、前記制御手段は、前記ウィンドウ切り替え命令のデコード開始からコミット開始の直前まで、前記第1のレジスタウィンドウのデータと前記第2のレジスタウィンドウのデータを前記レジスタファイルから読み出すウィンドウデータ読み出し手段と、前記ウィンドウ切り替え命令のデコード開始からコミット開始の直前まで、該ウィンドウデータ読み出し手段によって読み出された前記第1のレジスタウィンドウと前記第2のレジスタウィンドウに含まれる複数のレジスタのデータの中から、前記演算手段が必要とするレジスタのデータを選択して出力するレジスタデータ選択出力手段とを備える。
【0028】
本発明の演算処理装置の第3態様によれば、ウィンドウデータ読み出し手段とレジスタデータ選択出力手段の作用により、演算手段が命令を実行するために必要なレジスタデータのデータを、レジスタファイルから高速に読み出して、前記演算手段に供給することができる。また、命令パイプラインのアウトオブオーダ実行も可能となる。
【0029】
本発明の演算処理装置の第4態様は、前記第3態様の演算処理装置において、前記ウィンドウデータ読み出し手段は、前記ウィンドウ切り替え命令のコミットが開始されると、前記第2のジスタウィンドウに含まれるレジスタのデータのみを前記レジスタファイルから読み出すことを特徴とする。
【0030】
本発明の演算処理装置の第4態様によれば、前記ウィンドウデータ読み出し手段の作用により、命令パイプラインのアウトオブオーダ実行とインオーダ完了が可能となる。
本発明の演算処理装置の第5態様は、前記第3態様の演算処理装置において、前記レジスタファイルは、前記第1のレジスタウィンドウのデータと前記第2のレジスタウィンドウのデータを出力する複数の読み出しポートを備え、前記ウィンドウデータ読み出し手段は、前記ウィンドウ切り替え命令のデコード開始からコミット開始の直前まで、前記前記第1のレジスタウィンドウのデータと前記第2のレジスタウィンドウのデータを前記複数の読み出しポートから出力し、前記レジスタデータ選択出力手段は、前記ウィンドウ切り替え命令のデコード開始からコミット開始の直前まで、前記複数の読み出しポートから出力される前記第1のレジスタウィンドウのデータと前記第2のレジスタデータウィンドウに含まれる複数のレジスタのデータの中から、前記演算手段が必要とするレジスタのデータのみを選択して出力する。
【0031】
本発明の演算処理装置の第5態様によれば、前記ウィンドウデータ読み出し手段の作用により、レジスタファイルに設けられた読み出しポートから前記演算手段が命令実行に必要なデータを高速に読み出すことができる。また、命令パイプラインにおいてアウトオブオーダ実行が可能となる。
【0032】
上記第5態様の演算処理装置の構成において、例えば、前記複数の読み出しポートの各ポートは、前記第1のレジスタウィンドウのデータ出力と前記第2のレジスタウィンドウのデータ出力に兼用されるようにしてもよい。そして、さらに、例えば、前記複数の読み出しポートの各ポートは、前記ウィンドウ切り替え命令が実行される毎に、前記第1のレ
ジスタウィンドウのデータと前記第2のレジスタウィンドウのデータを交互に切り替え出力するようにしてもよい(前記第5態様の演算処理装置の第1の構成例)。
【0033】
このような構成にすることにより、読み出しポートの本数を少なくすることができる。また、上記第5態様の演算処理装置において、例えば、前記レジスタウィンドウは、親ルーチンと子ルーチンとの間で引き数の授受に使用されるレジスタを備える第1のウィンドウと、個々のルーチンが個別に使用するレジスタを備える第2のウィンドウと、全てのルーチンで共有されるレジスタを備える第3のウィンドウを備え、前記複数の読み出しポートは、前記第1のウィンドウのデータを出力する第1の読み出しポートと、前記第2のウィンドウのデータを出力する第2の読み出しポートを含み、前記第1の読み出しポートの本数と前記第2の読み出しポートの本数は、共に、複数であるような構成にしてもよい(前記第5態様の演算処理装置の第2の構成例)。
【0034】
このような構成にすることにより、レジスタウィンドウがインレジスタ用ウィンドウ(Wk ins)、ローカルレジスタ用ウィンドウ(Wk locals)及びアウトレジスタ用ウィンドウ(Wk outs)から構成され、グローバルレジスタ用ウィンドウ(W globals)を備えるレジスタファイルに適用できる。
【0035】
前記第5態様の演算処理装置の第2の構成例において、例えば、前記ウィンドウデータ読み出し手段は、ウィンドウ切り替え命令のデコード開始からコミットが完了するまでの間は、前記複数の第1の読み出しポートを介して前記第1のレジスタウィンドウと前記第2のレジスタウィンドウに含まれる前記第1のウィンドウのデータを出力し、前記複数の第2の読み出しポートを介して前記第1のレジスタウィンドウと前記第2のレジスタウィンドウに含まれる前記第2のウィンドウのデータを出力するような構成にしてもよい(前記第5態様の演算処理装置に第3の構成例)。
【0036】
このような構成にすることにより、命令パイプラインにおいてアウトオブオーダ実行が可能となる。
前記第5態様の演算処理装置の第3の構成例において、例えば、前記ウィンドウデータ読み出し手段は、ウィンドウ切り替え命令のデコード開始からコミットが完了するまでの間は、全ての前記第1の読み出しポートと全ての前記第2の読み出しポートを介して前記データ出力を行うような構成にしてもよい(前記第5態様の演算処理装置の第4の構成例)。
【0037】
このような構成にすることにより、命令パイプラインにおいてアウトオブオーダ実行を可能としながら、読み出しポートの本数を少なくできる。
前記第5態様の第3または第4の構成例において、例えば、前記ウィンドウデータ読み出し手段は、前記ウィンドウ切り替え命令のコミットが開始されると、前記第1のレジスタウィンドウに含まれる第1のウィンドウのデータのみを前記複数の第1の読み出しポートの一部のポートから出力し、前記第1のレジスタウィンドウに含まれる第2のウィンドウのデータのみを前記複数の第2の読み出しポートの一部のポートから出力するような構成にしてもよい(前記第5態様の演算処理装置の第5構成例)。
【0038】
このような構成にすることにより、命令パイプラインにおいてアウトオブオーダ実行とインオーダ完了が可能となる。
前記演算処理装置の第5構成例において、例えば、前記ウィンドウデータ読み出し手段は、前記ウィンドウ切り替え命令の実行が開始される毎に、前記第1のレジスタウィンドウのデータを出力する前記第1の読み出しポートと、前記第2のレジスタウィンドウのデータを出力する前記第2の読み出しポートを切り替えるような構成にしてもよい。
【0039】
このような構成とすれば、読み出しポートを有効に活用でき、読み出しポートの本数を最小限にできる。
本発明の演算処理装置の第6態様は、前記第5態様の演算処理装置において、前記ウィンドウデータ読み出し手段は、前記ウィンドウ切り替え命令のコミットが開始されると、前記第2のジスタウィンドウのデータのみを前記複数のポートのいずれかのポートから出力する。
【0040】
本発明の演算処理装置の第6態様によれば、前記ウィンドウデータ読み出し手段の作用により、パイプラインにおいてインオーダ完了が可能となる。
本発明の演算処理装置の第7態様は、前記第5または第6態様の演算処理装置において、前記第1の読み出しポートと前記第2の読み出しポートには、それぞれ、前記第1のウィンドウのデータと前記第2のウィンドウのデータが入力されるマルチプレクサが設けられており、前記ウィンドウデータ読み出し手段は、前記第1の読み出しポートと前記第2の読み出しポートの各ポートに設けられたマルチプレクサを制御して、前記第1のレジスタウィンドウと前記第2のレジスタウィンドウに含まれる前記第1のウィンドウのデータと前記第2のウィンドウのデータを該マルチプレクサから選択出力させ、前記レジスタデータ選択出力手段は、前記マルチプレクサから出力される前記第1のウィンドウのデータと前記第2のウィンドウのデータの中から前記演算手段が必要とするレジスタのデータを選択して出力する。
【0041】
本発明の演算処理装置の第8態様は、前記第3〜第7態様の各態様において、前記レジスタデータ選択出力手段は、さらに、前記レジスタファイルから前記演算手段が必要とするデータを読み出して、そのデータを出力させる。
【0042】
本発明の演算処理装置の第8態様によれば、各読み出しポートからのデータ選択出力を、マルチプレクサを制御することにより高速に実行できる。
本発明の演算処理装置の第9態様は、前記第3態様の演算処理装置において、前記制御手段は、さらに、ウィンドウ切り替え命令が実行される度に、前記カレントウィンドウがアドレス順に切り替わってサイクリックに使用されるように、前記カレントウィンドウポインタ手段が保持するアドレス情報を更新するカレントウィンドウポインタ制御手段と、
前記サイクリックに切り替わるアドレス情報の全てのステートに関するステート情報を格納する記憶手段と、前記カレントウィンドウポインタ手段が保持するアドレス情報が更新されたとき、更新後のアウトオブオーダ実行方式に対応するステート情報を前記記憶手段から読み出し、そのステート情報を前記ウィンドウデータ読み出し手段に出力するステート情報出力手段とを備える。
【0043】
前記第9態様の演算処理装置において、前記記憶手段に記憶されるステート情報は、例えば、何回目のサイクリックであるかを示すサイクリック情報とカレントウィンドウのアドレス情報の組である。
本発明の演算処理装置の第9態様によれば、レジスタウィンドウが論理的にリング状に構成されたレジスタファイルからのデータ読み出しを、前記記憶手段に格納されている前記ステート情報を利用して効率的に制御できる。
【0044】
本発明の演算処理装置の第10態様は、前記第1態様の演算処理装置において、前記ウィンドウ切り替え命令のデコード後に、前記ウィンドウ切り替え命令の後続命令を一定サイクルだけストールさせるパイプライン制御手段を備える。
【0045】
本発明の演算処理装置の第10態様の演算処理装置によれば、レジスタファイルから演算手段へのデータ転送に複数サイクル(サイクルは、命令パイプラインのサイクル)を要する場合、ウィンドウ切り替え命令の後続命令のデコードをストールさせることで、該後
続命令を正しく実行できる。
【0046】
本発明の演算処理装置の第11態様の演算処理装置は、前記第1態様の演算処理装置において、さらに、レジスタリネーミングを行うリネームレジスタ手段と、第1の命令と、該第1の命令の後に実行される後続命令が真のデータ依存関係にあるとき、前記第1の命令の実行結果を前記レジスタファイルから読み出し可能となるまで、前記実行結果を前記リネームレジスタ手段が保持するように制御するリネームレジスタ制御手段とを備える。
【0047】
前記第11態様の演算手段において、前記リネームレジスタ制御手段は、例えば、前記第1の命令の実行結果を前記リネームレジスタ手段に格納してから前記レジスタファイルから読み出すまでに複数サイクルを要する場合、前記実行結果を前記レジスタファイルから読み出し可能になるまで、前記実行結果を前記リネームレジスタ手段が保持するように制御する。
【0048】
本発明の演算処理装置の第11態様によれば、レジスタファイルから演算手段へのデータ転送に複数サイクル(サイクルは、パイプラインのサイクル)を要するとき、前記リネームレジスタ手段の前記実行結果を保持しているエントリの開放を遅らせることで、ある命令Aとその命令Aに後続する命令Bとの間に真のデータ依存関係が存在する場合であっても、該命令Bを、命令パイプラインにパイプラインバブルを生じさせずに実行できる。
【発明の効果】
【0049】
本発明によれば、レジスタウィンドウ方式のレジスタファイルからデータを予め読み出しておくためのバッファを設けずに、組み合わせ回路を主要部とする構成で、該レジスタファイルから演算器にオペランドデータを供給できるので、レジスタウィンドウ方式のレジスタファイルを備え、ウィンドウ切り替え命令(レジスタウィンドウ切り替え命令)の後続命令のアウトオブオーダ実行が可能な機能を備えた演算処理装置を、従来よりも小さな回路規模(回路面積)と、より低い消費電力で実現できる。
【発明を実施するための最良の形態】
【0050】
以下、図面を参照しながら本発明の実施形態について説明する。
[概要]
本発明は、上述したレジスタウィンドウ方式のレジスタファイルを有し、アウトオブオーダ実行機能を備えた演算処理装置において、前記MRFからのデータ読み出しを工夫することで、前記WRFを設けることなく、演算部のデータ読み出し速度を確保しながら、ウィンドウ切り替え命令の後続命令のアウトオブオーダ実行も可能にすることを特徴としている。本発明は、このような構成により、演算処理装置の回路面積の削減による消費電力の低減、ワークバッファ間(CWRとCRB間)のデータ転送を無くすことにより消費電力の削減を実現する。
【0051】
本発明の実施形態である演算処理装置の全体構成を図1に示し、図2に本実施形態の演算処理装置の詳細な構成を示す。また、本実施形態の演算処理装置のアウトオブオーダ実行を行う命令パイプラインを図4に示す。
【0052】
本実施形態の構成上の特徴は、従来の演算処理装置とは異なりWRFを備えていないことである。図1に示すMRF10内に、図2に示すように、MRF_RA1(Master Register Read Address 1)、MRF_RA2(Master Register Read Address 2)を設ける。また、制御部20内に、前記MRF_RA1と前記MRF_RA2を制御する制御部(レジスタ制御部210、命令制御部220)を設ける。MRF_RA1の内容は、CWPレジスタ213の値を更新する命令の発行(issue)時もしくはコミット(commit)時に更新される。本実施形態では、このMRF_RA1を用いて、MRF10からCWPレジスタ213で指定されるレジスタウィンドウを読み出す。
【0053】
本実施形態は、図2に示すように、前記特許技術文献2の情報処理装置4000が備えるCRB4030、CWR4020に相当する記憶手段は備えておらず、これらの記憶手段が備えていた機能は、ほとんど、組み合わせ回路で実現されている。MRF_RA2の内容は、命令パイプラインのDispatchステージで決定され、それに続くExecuteステージにおいて演算部30が使用するデータを指示する。
【0054】
このような回路構成を採用したことにより、MRF_RA1またはMRF10に保持されるデータが更新されない限り、MRF_RA2から演算部30まではデータが1サイクルで読み出され、演算部30における命令のアウトオブオーダ実行が可能となる。また、MRF_RA1またはMRF10に保持されるデータが更新されてから、その更新が演算部30への読み出しデータに影響を与えるまでにNサイクルかかるものとすると、MRF_RA1またはMRF10に保持されるデータが更新されてからN−1サイクルだけ、次命令のディスパッチ(Dispatch)をストールさせることで、全ての場合において、演算部30における命令のアウトオブオーダ実行が可能となる。
【0055】
また、命令パイプラインのUpdate Bufferステージにおいて演算結果を一旦保持しておくレジスタ(図2のリオーダバッファ(ROB:Reorder Buffer)31)のデータは、一般にCommitステージで破棄され、MRF10に書き込まれる。このため、演算部30は、その後は、そのデータをMRF10から読み出すが、これをCommitステージのN−1サイクルまでリオーダバッファ31で保持し、前記演算結果を前記リオーダバッファ31から読み出すことによって、上記のようにMRF10に保持されるデータの更新からN−1サイクル分だけディスパッチをストールする必要がなくなる。
【0056】
[構成]
{全体構成}
図1は、本発明の実施形態である演算処理装置の全体構成図である。
同図に示す演算処理装置1は、MRF10、制御部20及び演算部30を備えている。
図1と図19、20を比較すれば分かるように、本実施形態の演算処理装置1は、上述した従来の前記情演算処理装置3000や前記情報処理装置4000と異なり、WRF3002やワークバッファ(CWR4020、CRB4030)を備えていない。本実施形態の演算処理装置1は、制御部20内に設けられた組み合わせ回路(不図示)とMRF10内に設けられたレジスタ(例えば、前記MRF_RA1と前記MRF_RA2)により、CWPで指定されるMRF10内のレジスタウィンドウをアクセスして、該レジスタウィンドウに対するデータの読み出し/書き込みを行う。制御部20は、演算部30に対して命令の演算実行を指示するための信号を出力する。
【0057】
MRF10は、レジスタウィンドウ方式のレジスタファイルであり、その構成は上述した図17に示すMRF4010とほぼ同様である。MRF10内のレジスタウィンドウの指定は、CWPレジスタ(不図示)によって行われる。演算部30は、MRF10内のレジスタウィンドウからデータを読み出し(read)、そのデータを用いて算術演算命令や論理演算命令などを実行する。そして、その命令の実行結果を、MRF10の当該レジスタウィンドウに書き込む(write)。
【0058】
図2は、図1の演算処理装置1の詳細な構成を示す図である。図4は、演算処理装置1が備えるアウトオブオーダ実行の命令パイプラインを示す図である。
{命令パイプラインの構成}
まず、図4に示す命令パイプラインの構成を説明する。図4に示すように、演算処理装置1の命令パイプラインは、Fetchステージ(F)、Issueステージ(D)、D
ispatchステージ(P)、Operand Readステージ(B)、Executeステージ(X)、Update Bufferステージ(U)、及びCommitステージ(W)から構成される。
【0059】
上記各ステージの機能は下記の通りである。
Fetchステージ:メモリから命令を読み出す
Issueステージ:命令をデコードし、そのデコード結果をリザベーションステーションに登録する。
【0060】
Dispatchステージ:リザベーションステーションから命令を発行する
Oerand Readステージ:演算器までオペランドを読み出す
Executeステージ:命令を実行する
Update Bufferステージ:実行結果を待ち合わせる
Commitステージ:命令を完了する
【0061】
Fetchステージはメモリ(不図示)から命令を読み出すステージであり、Issueステージは該命令をデコードし、その結果をリザベーションステーションに登録するステージである。FetchステージとIssueステージは、インオーダで実行される(IO.FD)。
【0062】
Dispatchステージはリザベーションステーション(不図示)から命令を発行するステージであり、Executeステージは前記リザベーションステーションから発行された命令を実行するステージである。また、UpdateBufferステージは、インオーダ完了を実現するために、Executeステージで実行された結果を待ち合わせるステージである。Dispatchステージ、Executeステージ及びUpdateBufferステージは、アウトオブオーダで実行される(OOO.PBXU)。
【0063】
Commitステージは命令を完了するステージである。Commitステージにおいては、前記リザベーションステーションを利用してインオーダ完了を実現する(IO.W)。前記リザベーションステーションは、演算器により実行された命令について、コンプリートしたか否かの情報や実行結果を保存している。Commitステージにおいては、前記リザベーションステーションを参照して、命令をインオーダ完了させる。
このように、演算処理装置1の命令パイプラインは、アウトオブオーダ命令発行/インオーダ完了のアウトオブオーダ処理を実行する構成となっている。
【0064】
{MRF10の構成}
図2に示すように、MRF10は、レジスタファイル100、MRF_RA1及びMRF_RA2を備えている。レジスタファイル100は、前述した図17に示すレジスタファイル1000と同様な構成のオーバーラップウィンドウ方式のレジスタファイルである。したがって、ここでは、詳しい説明は省略する。
【0065】
{制御部20の構成}
図1の制御部20は、図2に示すレジスタ制御部210及び命令制御部220を備えている。
レジスタ制御部210は、ポート割り当て制御部テーブル211、SETレジスタ212、CWPレジスタ213、及びset、cwp制御装置214を備えている。
ポート割り当て制御部テーブル211は、MRF_RA1に設定される値(後述するポート割り当てステート)が格納されているテーブルである。
【0066】
本実施形態のMRF10は、図17に示すMRF4010と同様に、論理的にリング状に構成された8個のレジスタウィンドウを備えている。また、 MRF_RA1(Master Register File Read Address 1)とMRF_RA2(Master Register File Read Address 2)を備えている。また、さらに、5つの読み出しポートl0、l1、io0、io1、io2を備えている。
【0067】
読み出しポートl0、l1は、MRF_RA1で指定されるレジスタウィンドウのローカルレジスタのデータを読み出すためのポートである。読み出しポートl0にはマルチプレクサ231が設けられ、読み出しポートl1にはマルチプレクサ232が設けられている。前記マルチプレクサ231、232には、8個のレジスタウィンドウ(W0〜W7)の各ローカルレジスタ用ウィンドウ(W0 locals〜W7 locals)のローカルレジスタのデータが入力される。
【0068】
読み出しポートio0、io1、io2は、MRF_RA1で指定されるレジスタウィンドウのインレジスタまたはアウトレジスタのデータを読み出すためのポートである。読み出しポートio0にはマルチプレクサ241が設けられ、読み出しポートio1にはマルチプレクサ242が設けられている。また、読み出しポートio2にはマルチプレクサ243が設けられている。前記マルチプレクサ241〜243には、8個のレジスタウィンドウ(W0〜W7)の各インレジスタ/アウトレジスタ用ウィンドウ(W0 ins〜W7 ins、W0 outs〜W7 outs)ののインレジスタ/アウトレジスタのデータが入力される。
【0069】
MRF_RA1は、制御部20から出力される値(後述するポート割り当てステート)を格納するレジスタである。 MRF_RA1に設定される値は、レジスタ制御部210内に設けられたCWPレジスタ213を更新する命令(“ウィンドウ切り替え命令”もしくは“レジスタウィンドウ切り替え命令”と呼ぶ)のIssueステージまたはCommitステージで更新される。演算処理装置1は、このMRF_RA1に設定された値を用いて、CWPレジスタ213の値(カレントウィンドウポインタ値)で指定されるレジスタウィンドウのデータをMRF10から読み出す。
【0070】
MRF_RA2は、演算部30内の演算器(不図示)がオペランド毎に読み出すレジスタの番号を指定するレジスタであり、レジスタ制御部210によって制御される。MRF_RA2は、命令パイプラインのDispatchステージで値が決定され、次のExecuteステージで演算部30が使用するデータ(MRF10から読み出されたレジスタウィンドウのレジスタのデータ)を指示する。
【0071】
{MRF_RA1とMRF_RA2の構成例}
図3(a)は、MRF_RA1の構成例を示す図である。
図3(a)に示すMRF_RA1は、図5に示すポート割り当てステート215(5つのポートID「l0」、「l1」、「io0」、「io1」、「io2」)を格納する領域を備えている。本実施形態のMRF10は、W0〜W7の8本レジスタウィンドウを備えているため、ポートIDl0、l1は、それら8本のレジスタウィンドウW0〜W7の中から一つのローカルレジスタ用ウィンドウ(=8個のローカルレジスタ)を指定するアドレスである。また、ポートIDio0〜io2は、上記8本のレジスタウィンドウW0〜W7の中から一つのインレジスタ/アウトレジスタ用ウィンドウ(=8個のインレジスタ/アウトレジスタ)を指定するアドレスである。したがって、各ポートIDl0、l1、io0、io1、io2の最小構成は3ビットである。
【0072】
図3(b)は、MRF_RA2の構成例を示す図である。
図3(b)に示すMRF_RA2は、MRF10の5つの読み出しポートl0、l1、io0、io1、io2の中から1つのポートを選択するためのアドレス(ポート指定ア
ドレス)と、ウィンドウ内のレジスタを特定するためのアドレス(レジスタ指定アドレス)を格納する領域を備えている。ポート指定アドレスは、上記5つの読み出しポートl0、l1、io0、io1、io2の中から1つを指定するので、最小3ビット構成となる。また、MRF10が備えるレジスタウィンドウが8個のレジスタから構成される場合、レジスタ指定アドレスは、最小3ビット構成となる。したがって、この場合、MRF_RA2は全体で最小6ビット構成となる。
【0073】
MRF10の上記5つの読み出しポートl0、l1、io0、io1、io2のそれぞれに設けられたマルチプレクサは、MRF_RA1から出力される選択信号(前記ポートID)によってその出力が制御される。図4には、CWPレジスタ213の値(cwp)で指定されたレジスタウィンドウiのインレジスタ/アウトレジスタ(in(out)レジスタ)用ウィンドウ251とローカルレジスタ(localレジスタ)用ウィンドウ252が示されている。ここで、“i”はCWPレジスタ213の値(cwp)である。また、グローバルレジスタ(globalレジスタ)用ウィンドウ253も示されている。
【0074】
レジスタウィンドウW0〜W7のinレジスタ/outレジスタ用ウィンドウ251のデータ(8個のローカルレジスタのデータ)は、読み出しポートIo0、io1、io2に出力される。指定されたレジスタウィンドウのlocalレジスタ用ウィンドウ252のデータは、読み出しポートl0、l1に出力される。これらの読み出しポートに出力されたウィンドウデータは、それぞれのポートに設けられたマルチプレクサ241〜243、231、232により選択出力される。
【0075】
上記5つのマルチプレクサ231、232、241〜243から選択出力されるレジスタウィンドウのウィンドウデータは、マルチプレクサ261に入力される。マルチプレクサ261には、グローバルレジスタ用ウィンドウ253のデータも入力される。マルチプレクサ261は、MRF_RA2から出力される選択信号(前記ポート指定アドレスと前記レジスタ指定アドレス)に従って、上記5つのマルチプレクサ231、232、241〜243から選択出力されるウィンドウのデータと前記グローバルレジスタ用ウィンドウ253の中から1つのウィンドウのデータを選択し、さらにその選択されたウィンドウのデータに含まれる8個のレジスタのデータの中から1つを選択する。そして、その選択したレジスタのデータを演算部30に出力する。
【0076】
MRF10は、さらに、マルチプレクサ271を備えている。このマルチプレクサ271は、演算部30から入力されるMRF10に対する書き込みデータ(演算結果など)を当該レジスタに選択出力する。このマルチプレクサ271は、レジスタ制御部210によって制御され、演算部30が指定するレジスタに前記書き込みデータを出力する。
【0077】
本実施形態のように、MRF10が備えるレジスタファイル100を8個のレジスタウィンドウで構成した場合、SAVE命令、RESTORE命令などのウィンドウ切り替え命令でCWPレジスタ213の値(以後、この値を“cwp”と記載する)が変化したときに、物理的には同じレジスタである、切り替わる前のカレントウィンドウのoutレジスタ用ウィンドウ(outs)と切り替わった後のカレントウィンドウのinレジスタ用ウィンドウ(Ins)を、MRF10の同じ読み出しポートに割り当てる組み合わせの全てをカバーする最小のステート数は24である。cwpは“0”〜“7”の8個の値をとるので、“0”〜“7”の値を3回周回すると元のステートに戻る。このため、cwpが“0”〜“7”を3周回って1セットと考える。したがって、SETレジスタ212の値(以後、この値を“set”と記載する)として“0”〜“2”を割り当て、ウィンドウ切り替え命令が実行される毎にこれらの値をサイクリックに変化させる。図5に示すように、上記24種類のステートは、8値(“0”〜“7”)をとりうるcwpと3値(“0”〜“2”)をとりうるsetの値の組み合わせで決定される。本実施形態では、図5に示すように、上記24種類の各ステートに「ポート割り当てステート215」を割り当て、これら24種類のポート割り当てステート215を、setとcwpの値の組み合わせに対応付けてポート割り当て制御部テーブル211に格納する。ポート割り当てステート215は、MRF10の「l0」、「l1」、「io0」、「io1」、「io2」の5つの読み出しポートのID(ポートID)から構成される。これらのポートIDは、MRF_RA1の該当する読み出しポートの出力選択信号となっている。
【0078】
{ポート割り当て制御部テーブル211の構成}
図5は、前記ポート割り当て制御部テーブル211の構成例を示す図である。
図5に示すように、ポート割り当て制御部テーブル211は、24個のエントリを備えており、それらのエントリに上記24種類のステートに関する情報を、ステートの周回順序に対応させて格納している。ポート割り当て制御部テーブル211の各エントリのレコードは、「set」、「cmp」、「ポート割り当てステート215」から構成される。setは上記セットの番号(セット番号)を、cwpはCWPレジスタ213の値、すなわち、カレントウィンドウに指定されているレジスタウィンドウの番号(レジスタウィンドウ番号)を示す。setとcwpの組(set、cwp)は、ポート割り当て制御部テーブル211のインデックスとなっている。
【0079】
ポート割り当てステート215は、図2に示すMRF10の5つの読み出しポートl0、l1、io0、io1、io2に対応する5つのポートIDから構成される。ポートIDl0が読み出しポートl0に、ポートIDl1が読み出しポートl1に、ポートIDio0は読み出しポートio0に、ポートIDio1が読み出しポートio1に、ポートIDio2が読み出しポートio2に対応している。
【0080】
前記ポートIDl0、l1には%lが、前記ポートIDio0〜io2には%iまたは%oが設定される。%l、%i及び%oは、それぞれ、cwpで指定されるMRF10のレジスタウィンドウのローカルレジスタ用ウィンドウ(=8個のローカルレジスタ)、インレジスタ用ウィンドウ(=8個のインレジスタ)及びアウトレジスタ用ウィンドウ(=8個アウトレジスタ)を指定するアドレスである。%lは、MRF10が備える8本のレジスタファイルW0〜W7の中のいずれか一つのローカルレジスタ用ウィンドウ(Wk locals)を指定するアドレスである。%iは、上記8本のレジスタウィンドウW0〜W7の中のいずれか一つのインレジスタ用ウィンドウ(Wk ins)を指定するアドレスである。また、%oは、上記8本のレジスタウィンドウW0〜W7の中のいずれか一つのアウトレジスタ用ウィンドウ(Wk outs)を指定するアドレスである。各ステートにおいて、ポート割り当てステート215における5つのフィールドの内、2つは空欄となっている。この空欄は、“アドレス指定無し”を表す。%lは、MRF10のローカルレジスタの読み出しポートl0、l1のそれぞれに設けられたマルチプレクサ231、232に選択信号として入力する。%iと%oは、MRF10のインレジスタ/アウトレジスタの読み出しポートio0、io1、io2のそれぞれに設けられたマルチプレクサ241〜243に選択信号として入力する。
【0081】
したがって、例えば、(set、cwp)=(0、2)のポート割り当てステート215がMRF_RA1に設定されることにより、MRF10の読み出しポートl0、io2、io0から、それぞれ、%l、%i、%oで指定されるローカルレジスタ用ウィンドウWk locals、インレジスタ用ウィンドウWk ins、アウトレジスタ用ウィンドウWk outsが出力される。この状態のとき、ウィンドウ切り替え命令がデコードされてcwpが“1”だけインクリメントされ、(set、cwp)=(0、3)に遷移すると、MRF10の読み出しポートl1、io0、io1から、それぞれ、%l、%i、%oで指定されるローカルレジスタ用ウィンドウWk locals、インレジスタ用ウィンドウWk ins、アウトレジスタ用ウィンドウWk outsが出力される。この場合、MRF10の読み出しポートl0、io2からは、それぞれ、(set、cwp)=(0、2)のポート割り当てステート215で指定されたローカルレジスタ用ウィンドウWk Locals、インレジスタ用ウィンドウWk Insが出力される。これにより、cwp=2で指定されるレジスタウィンドウW2を使用する前記ウィンドウ切り替え命令の先行命令と、cwp=3で指定されるレジスタウィンドウW3を使用するウィンドウ切り替え命令の後続命令のアウトオブオーダ実行が可能となる。その後、前記ウィンドウ切り替え命令のコミットが開始されると、(set、cwp)=(0、3)のポート割り当てステート215のみが有効となり、MRF10の読み出しポートl0、io2は閉じられる。これにより、前記ウィンドウ切り替え命令の先行命令の実行が禁止される。これは、上述したように、本実施形態の命令パイプラインはインオーダ完了となっているためである。
【0082】
本実施形態では、MRF10にローカルレジスタの読み出しポートを2つ設け、レジスタウィンドウの切り替えが発生する毎に、これら2つの読み出しポートl0、l1から交互にカレントウィンドウのローカルレジスタを読み出す。また、MRF10においては、インレジスタ/アウトレジスタの読み出しポートを3つ設ける。この場合、切り替わる前のカレントウィンドウのアウトレジスタと切り替わった後のカレントウィンドウのインレジスタは物理的に同じレジスタであるので、これらのレジスタは同じ読み出しポートから読み出すようにして、ウィンドウ切り替え命令が実行される毎に、インレジスタの読み出しポートを、io0→io1→io2→io0→io1とサイクリックに切り替える。本実施形態では、図5に示すような形式で、ポート割り当て制御部テーブル211の24個のエントリにポート割り当てステート215を格納することで、このようなMRF10の前記5つの読み出しポートからのウィンドウデータの読み出し制御を可能にしている
set、cwp制御装置214は、SETレジスタ212とCWPレジスタ213の値設定を制御する。レジスタ制御部210には、命令制御部220からウィンドウ切り替え情報が入力される。この情報は、例えば、デコード対象命令がSAVE命令であるか、または、RESTORE命令であるかを示す情報である。set、cwp制御装置214は、デコード対象命令がSAVE命令であれば、cwpを“1”だけインクリメントする。このインクリメントによりcwpが“8”(レジスタウィンドウ数)になれば、cwpを“0”にリセットし、setを“1”だけインクリメントする。このインクリメントによりsetが“3”になれば、setを“0”にリセットする。
【0083】
{set、cwp制御装置214の処理アルゴリズム}
図7と図8に、それぞれ、デコード対象命令がSAVE命令、RESTORE命令であった場合のset、cwp制御装置214の処理フローを示す。
まず、図7のフローチャートを説明する。尚、図7及び図8に示す演算子%は、a%bという式で使用された場合、aをbで除算した場合の剰余を求めることを意味するものである。
【0084】
set、cwp制御装置214は、命令制御部220から入力されたウィンドウ切り替え情報を調べ、デコード対象命令がSAVE命令であるか否か判断する(S11)。そして、SAVE命令でなければ処理を終了する。一方、ステップS11においてSAVE命令であると判断すると、cwpを“1”だけインクリメントし、続いて、そのインクリメント結果をレジスタウィンドウ数(本実施形態の場合、“8”)で除算し、その剰余を求める。そして、その剰余をcwpに設定し、cwpを更新する(S12)。
【0085】
次に、cwpが“0”であるか判断し(S13)、“0”でなければ処理を終了する。一方、ステップS13でcwpが“0”あると判断すると、setを“1”だけインクリメントし、次に、そのインクリメント結果を“3”で除算する。そして、その剰余をsetに設定して、setを更新し(S14)、処理を終了する。
【0086】
次に、図8のフローチャートを説明する。
set、cwp制御装置214は、命令制御部220から入力されたウィンドウ切り替え情報を調べ、デコード対象命令がRESTORE命令であるか否か判断する(S21)。そして、RESTORE命令でなければ処理を終了する。一方、ステップS21においてそのデクリメント結果をレジスタウィンドウ数(本実施形態の場合、“8”)で除算し、その剰余を求める。そして、その剰余をcwpに設定し、cwpを更新する(S12)。
【0087】
次に、cwpが“7”であるか判断し(S13)、“7”でなければ処理を終了する。一方、ステップS13でcwpが“7”あると判断すると、setを“1”だけデクリメントし、次に、そのデクリメント結果を“3”で除算する。そして、その剰余をsetに設定して、setを更新し(S14)、処理を終了する。
【0088】
setとcwpの初期値は“0”である。上記図7と図8の処理により、cwpの値は、SAVE命令がデコードされる毎に“1”インクリメントされ、RESTORE命令がデコードされる毎に“1”デクリメントされる。cwpの値は、SAVE命令のデコードにより“8”になると“0”にリセットされ、RESTORE命令のデコードにより“−1”になると“7”にセットされる。したがって、cwpの値は、“0”〜“7”の範囲を巡回する。また、setの値は、SAVE命令のデコードによりcwpの値が“8”になると、“1”インクリメントされる。また、setの値は、SAVE命令のデコードにより“3”になると“0”にリセットされる。また、さらに、setの値は、RESTORE命令のデコードによりcwpの値が“−1”になると、“1”デクリメントされる。このようにして、setの値は、SAVE命令とRESTORE命令のデコードに応じて、“0”〜“2”の範囲を巡回する。ここで、再び、ポート割り当て制御部テーブル211の説明に戻る。
【0089】
ポート割り当て制御部テーブル211は、図4のSETレジスタ212の値(set)とCWPレジスタ213の値(cwp)が入力されると、それら2つの値の組み合わせ(set、cwp)に対応するエントリに格納されているポート割り当てステート215(l0、l1、io0、io1、io2)を、図4のMRF_RA1に出力する(図6参照)。
【0090】
{命令制御部の構成}
次に、命令制御部220の構成を説明する。
命令制御部220は、ウィンドウ切り替え命令後続命令の実行タイミング制御機能221(以後、実行タイミング制御機能221と記載)、リネームレジスタ開放制御機能222及びMRF_RA2の制御機能223を備えている。
【0091】
実行タイミング制御機能221は、ウィンドウ切り替え命令の後続命令のデコードを、MRF_RA1が更新され、かつ、MRF10からレジスタファイルの読み出しが可能となるまでストールさせる制御機能である。命令制御部220は、この制御機能を用いて、演算部30が上記ストールを実施するように制御する。この制御の詳細は後述する。
【0092】
リネームレジスタ開放制御機能222は、命令の完了によってリネームレジスタ(ROB31)の資源を解放し、新しくデコードされる命令でその開放された資源を使用可能とさせる制御機能である。命令制御部220は、この制御機能を用いて、演算部30が上記リネームレジスタの資源開放を実行するように制御する。
【0093】
MRF_RA2の制御機能223は、命令の中に含まれるオペランドレジスタの番号を
解釈する機能である。命令制御部220は、レジスタ制御部210を介して、MRF_RA2が前記オペランドレジスタ番号で指定されるレジスタのデータを前記読み出しポート261から選択出力させるように制御する。
【0094】
演算部30は、上述した図3の命令パイプライン機構を備える。また、演算部30は、レジスタリネーミングやアウトオブオーダ実行などを支援するハードウェア機構であるリオーダバッファ(ROB)31も備えている。リオーダバッファ31は、レジスタの最新値や更新タグをインオーダで保持し、アウトオブオーダ命令発行、インオーダ完了及びレジスタリネーミングなどを実行するために利用される。リオーダバッファ31は、該レジスタネーミングを行うためのリネームレジスタを備えている。また、リオーダバッファ31は、上述したようにUpdate Bufferステージにおいて演算結果を一旦保持しておく機能を備えている。
【0095】
[動作]
{第1実施形態}
MRF10から演算部30へのレジスタデータの転送に複数サイクルを要する場合には、新しく切り替わったレジスタウィンドウのレジスタデータを読み出せないタイミングが発生する。このような場合の例を、図9を参照しながら説明する。
【0096】
図9は、SAVE命令前後の実行パイプラインの動作を示す図である。
図9において、IO.FDは、インオーダで実行されるFetchステージ(Fステージ)とIssueステージ(Dステージ)を示す。また、OOO.PBXUは、アウトオブオーダで実行されるDispatchステージ(Pステージ)、Operand Readステージ(B ステージ)、Executeステージ(Xステージ)及びUpdate
Bufferステージ(Uステージ)を示す。また、IO.Wは、インオーダ完了するCommitステージ(Wステージ)を示す(以上、図4参照)。
【0097】
図9は、CWPレジスタ213の値が“3”である命令(以下、cwp=3の命令と記載)の後に、SAVE命令を実行し、次にCWPレジスタ213の値が“4”である命令(以下、cwp=4の命令と記載)を実行するパイプライン動作を示している。
【0098】
演算部30は、上記3個の命令列を命令パイプラインで実行する際、IO.FDまでは、CWP=3の命令、SAVE命令、cwp=4の命令の順にインオーダで実行する。このとき、演算部30がDステージでSAVE命令をデコードすると(図9のbの期間でIssueステージを実行すると)、set、cwp制御装置214によりCWPレジスタ213の値がインクリメントされ、CWPレジスタ213の値は“4”となる。これにより、ポート割り当て制御部テーブル211からMRF_RA1に、cwp=4に対応する新しいポート割り当てステート215が送られる。MRF_RA1に該新しいポート割り当てステート215が設定されると、MRF10の前記5つの読み出しポートから、CWPレジスタ213で指定されるレジスタウィンドウのデータ(cwp=4のレジスタウィンドウデータ)が読み出される。このとき、演算部30がcwp=4のレジスタウィンドウデータを読み出し可能となるまで(図9のbの期間が終了するまで)、演算部30がSAVE命令の後続命令(cwp=4の命令)のデコードを一定サイクル分ストールさせ、その実行が開始されないように制御する。尚、図9の動作の詳細は後述する。
【0099】
図10は、ウィンドウ切り替え命令がデコードされたときにおける、該ウィンドウ切り替え命令の後続命令の実行タイミングの例を示す図である。
サイクル1でウィンドウ切り替え命令が演算部30でデコード(D)され、サイクル2で命令制御部220からレジスタ制御部210にMRF_RA1の変更指示信号が送られる(図10のa)。そして、サイクル3、4で、レジスタ制御部210によりMRF_R
A1が更新される(図10のb)。この場合、図10のbで示す期間は、MRF_RA1の更新により、ウィンドウ切り替え命令の後続命令の実行に必要なレジスタウィンドウのデータをMRF_RA1から読み出すことができない。演算部30は、サイクル5(図10のc)以降に、該レジスタウィンドウのデータをMRF10から読み出し可能となる。したがって、この場合、ウィンドウ切り替え命令のデコードが実行されたサイクル1の次のサイクル2においては、前記後続命令のデコードをストールさせる。したがって、この場合、前記後続命令の実行は1サイクルだけストールする。
【0100】
本実施形態では、MRF10から演算部30へのレジスタのデータの転送に複数サイクルを要する場合、MRF10へのデータ書き込みをトリガーとして、そのデータを演算部30が読み出せないタイミングが発生する。演算部30が前記データを読み出せない場合、実行権を割り当てる他の命令がなければ、命令パイプラインにパイプラインバブルが生じる。本実施形態では、このパイプラインバブルをリネームレジスタ(ROB31)の開放を制御することで抑制する。
【0101】
{第2実施形態}
図11は、真のデータ依存関係にある命令を、命令パイプラインにパイプラインバブルが発生しないように、リネームレジスタ(ROB31)の開放を制御する手法を示す図である。図11おいて、%1はレジスタを示す。
【0102】
演算部30が、図11に示す命令A〜Fの命令列を実行するものとする。命令A〜Fは、真のデータ依存関係がある。すなわち、命令Aはレジスタ%1のデータの書き込み命令であり、レジスタ%1を更新する。命令Aの後続命令である命令B〜Fは、いずれもレジスタ%1のデータの読み出し命令であり、レジスタ%1のデータを使用する。
【0103】
図11は、MRF10のレジスタファイル100からのデータの読み出しが1サイクルでできる実装例である。命令は、図4に示す順序でパイプライン処理され、Pステージでレジスタアドレスの転送、Bステージでレジスタのデータの読み出し、Xステージで演算(命令の実行)、Uステージで演算結果(命令の実行結果)のリネームレジスタ(ROB31)への書き込み、WステージでMRF10へのデータ(前記演算結果)書き込みを行う。
【0104】
前記命令列の実行において、命令Aの実行結果はサイクル4においてリネームレジスタ(ROB31)に格納され、サイクル5においてMRF10に格納される。このため、命令Aの実行結果はサイクル6以降において、MRF10から読み出すことができる。したがって、命令Aの後続命令Bは、先行命令Aの実行結果(a)をサイクル3においてバイパスして使用し、後続命令Cはサイクル4において演算結果レジスタ(b)から読み出して使用する。また、後続命令Dは、先行命令Aの実行結果をサイクル5において前記リネームレジスタ(c)から読み出して使用し、後続命令E、Fは、先行命令Aの実行結果を、それぞれ、サイクル6、7においてMRF10(d)から読み出して使用する。
【0105】
{第3実施形態}
次に、レジスタファイル(MRF10)からのデータの読み出しに複数サイクルを要する場合の制御手法を図12に示す。
【0106】
本発明では、MRF10にデータを書き込んだ後、そのデータを一定時間にわたってMRF10から読み出すことができない場合、その期間中においては、MRF10ではなくリネームレジスタ(ROB31)から読み出すように制御する。図12は、MRF10からのデータ読み出しに2サイクルを要する場合の例を示す。
【0107】
図12に示すように、本実施形態の場合、命令パイプラインにおいてWステージを1サイクルではなく2サイクルにし(W1、W2)、この期間中は、リネームレジスタ(ROB31)に命令Aの実行結果を保持する。この結果、命令Aで更新した結果は、サイクル7以降においてMRF10から読み出すことができる。この場合、命令Aの後続命令B、C、Dにおける命令Aの実行結果の読み出しは、図11の場合と同様にして制御される(a、b)。しかし、後続命令Eについては、データを、サイクル6においてMRF10からではなく前記リネームレジスタ(c)から読み出すように制御する。また、命令Fについては、サイクル7において、先行命令Aの実行結果をMRF10(d)から読み出すように制御する。
【0108】
このように、本実施形態では、MRF10からデータを読み出せる開始タイミングは遅れるが、それに伴う問題を、リネームレジスタ(ROB31)の開放を遅らせることで回避させる。
【0109】
{第4実施形態}
本実施形態は、本発明を、8本のレジスタウィンドウを備えるMRF10について、ポート割り当て制御部テーブル211を用いて、ウィンドウ切り替え前後でのMRF10からのデータ読み出し制御に適用したものである。
【0110】
本実施形態におけるMRF10の読み出しポートからのレジスタ読み出し手法を、図5と図13と図14を参照しながら説明する。
MRF10は、ローカルレジスタ、インレジスタ、アウトレジスタ及びグローバルレジスタを備えるが(図2参照)、グローバルレジスタは全てのレジスタウィンドウで共通であり、ウィンドウ切り替えが発生しても影響が出ないため、以後の説明では省略する。
【0111】
本実施形態のMRF10は、ローカルレジスタのデータを読み出すための2つのローカルレジスタポート(l0、l1)と、インレジスタ/アウトレジスタのデータを読み出すための3つのインレジスタ/アウトレジスタ・ポート(io0、io1、io2)を備えている。
【0112】
1つのCWP(Current Window Pointer)に対して、1つのローカルレジスタポートと2つのインレジスタ/アウトレジスタ・ポートを使用する。このため、残りの1つのローカルレジスタポートと1つのインレジスタ/アウトレジスタ・ポートは使用されない。CWPの値が切り替わると、その新たなCWPの値が指定するレジスタウィンドウのローカルレジスタとアウトレジスタ(インレジスタ)の読み出しのため、それぞれのレジスタに使用していないMRF10の読み出しポートを割り当てるようにする。
【0113】
図5に示すように、24ステートで1周期となるため、この周期で、MRF_RA1を制御する。以降の説明では、CWPで図2のCWPレジスタ213を示し、cwpでCWPレジスタ213の値を示す。
【0114】
今、図12の表Aに示すように、(set、cwp)=(0、2)の状態とする。この場合、レジスタ制御部210は、ローカルレジスタはMRF10のl0ポートから、インレジスタはio2ポートから、アウトレジスタはio0ポートから読み出されるように制御する。また、l1ポート、io1ポートからのレジスタ読み出しは行われないように制御する。
【0115】
この状態で、SAVE命令が実行された場合(図14の(1))、cwpが“1”インクリメントされ、(set、cwp)=(0、3)と遷移する(図13の表B参照)。このSAVE命令のデコード(D)のタイミングでMRF_RA1の内容が変更され、SA
VE命令のデコード(D)終了からコミット(W)開始までは、cwp=2でのローカルレジスタはMRF10のl0ポートから、インレジスタのデータは読み出しポートio2から、アウトレジスタのデータは読み出しポートio1から読み出される。また、cwp=3でのローカルレジスタのデータは読み出しポートl1から、インレジスタのデータは読み出しポートio0から、アウトレジスタのデータは読み出しポートio1から読み出される(以上、図13の表B参照)。
【0116】
さらに、SAVE命令がコミット(W)すると、MRF10の読み出しポートl0、読み出しポートio2からのレジスタ読み出しは行われない。これは、コミットを図4で示すようにインオーダで実施するため、プログラムでSAVE命令より前にあるcwp=2の命令が、これ以降、レジスタ参照を行わないためである。本発明は、これに限定されず、状況に応じて、引き続き読み出すようにすることもできる。
【0117】
その後、RESTORE命令が実行されると、cwpが“1”デクリメントされ、(set、cwp)=(0、2)の状態に遷移する。このRESTORE命令のデコード(D)のタイミングでMRF_RA1の内容が変更され、このRESTORE命令が完了するまでの間(図13の表D)、cwp=3でのローカルレジスタのデータはMRF10の読み出しポートl1から、インレジスタのデータはMRF10の読み出しポートIO0から、アウトレジスタのデータはMRF10の読み出しポートio1から読み出される。また、cwp=2でのローカルレジスタのデータはMRF10の読み出しポートl0から、インレジスタのデータはMRF10の読み出しポートio2から、アウトレジスタのデータはMRF10の読み出しポートio0から読み出される。
【0118】
以上のようにして、レジスタ制御部210によりMRF_RA1を制御し、プログラムでウィンドウ切り替え命令を挟んで存在する複数命令のアウトオブオーダ実行を可能にする(図9参照)。尚、図9において、OOO.PBXUは1本の線で示されているが、“cwp=3の命令”と“cwp=4の命令”は複数の命令を表しており、実行開始タイミングも命令数と同数存在する。図9の区間cでは、cwp=3のOOO.PBXUとcwp=4のOOO.PBXUが重なっており、cwp=4の命令がcwp=3の命令よりも早いタイミングで実行開始(アウトオブオーダ実行)が起こりうることを示している。
【実施例】
【0119】
図15は、図2の実施形態を適用した演算処理装置の構成例を示す図である。図15において、図2の構成要素と同一の構成要素には同じ符号並びに名称を付与している。
図15に示す演算処理装置300は、レジスタリネーミングにリオーダバッファ方式を採用している。このレジスタリネーミングはROB(リオーダバッファ)31を利用して行われる。演算処理装置300の固定小数点演算のパイプラインとアドレス演算のパイプラインは、共に、プライオリティ取得(P−stage)、レジスタ読み出し(B−stage)、演算(X−stage)の3ステージで処理されるように構成されている。
【0120】
固定小数点演算のパイプラインは2本ある。一方のパイプラインは、ALU(Arithmetic Logic Unit)、SHIFT演算器(SFT)、乗算器(MPY)、除算器(DVD)、VIS(Virtual Instruction set)演算器を備え、もう一方のパイプラインは、ALUとSHIFT演算器を備える。また、アドレス演算のパイプラインは、固定小数点のパイプラインとは別に2本ある。
【0121】
MRF10は、前述したように、8本のレジスタウィンドウを備えている。プログラムは、カレントウィンドウ(前記cwpで指定されるレジスタウィンドウ)に属するレジスタ上で作業を行い、ウィンドウ切り替えは、主に、サブルーチンの呼び出し、戻りのときに、ウィンドウ切り替え命令で行われる。カレントウィンドウのデータを、MRF10か
ら予め選択しておき、演算を実行する際には、ソースデータ(ソースオペランド)を1サイクルで演算器に供給することを可能にしている。さらに、ウィンドウ切り替え命令のデコードを契機に、切り替え先のウィンドウ(レジスタウィンドウ)のデータも、MRF10から予め選択するような制御を行っており、サブルーチン呼び出しの場合でも、命令が滞ることはない。
【0122】
上記演算処理装置300の構成を、より詳細に説明する。
MRF301は、図2に詳細に示された8本のレジスタウィンドウ(8−Window)をブロックで示したものである。また、マルチプレクサ303は、図2の5個のマルチプレクサ231、232、241〜243を統合して示したものであり、MRF_RA1によって制御される。ROB(リオーダバッファ)31は、リネームレジスタを備え、アウトオブオーダで実行された演算結果を、インオーダでコミットされるまで保持する。ROB31の領域(エントリ)は、デコード時において確保され、コミット時に開放される。該エントリには、例えば、命令が書き込むレジスタのアドレスと、該レジスタの値の組が格納される。
【0123】
図15に示す演算処理装置300は、MRF_RA2によって制御されるマルチプレクサ261の後段に4個のマルチプレクサ311〜314を備えている。これらのマルチプレクサ311〜314には、マルチプレクサ261の出力、1次データキャッシュ(不図示)のデータを保持するレジスタ320の出力及び演算器の演算結果を保持するレジスタ361、362の出力が入力する。前記マルチプレクサ311〜314は、命令制御部220から入力される制御信号に従って、上記複数の入力データの中から一つを選択し、それを、それぞれの後段に設けられたレジスタ321〜324に出力する。すなわち、マルチプレクサ311の出力はレジスタ321に、マルチプレクサ312の出力はレジスタ322に、マルチプレクサ313の出力はレジスタ323に、マルチプレクサ314の出力はレジスタ324に保持される。
【0124】
上記レジスタ321に保持されたデータはマルチプレクサ341に出力され、上記レジスタ322に保持されたデータはマルチプレクサ342に出力される。また、上記レジスタ323に保持されたデータはマルチプレクサ343に出力され、上記レジスタ324に保持されたデータはマルチプレクサ344に出力される。上記マルチプレクサ341〜344には、前記1次データキャッシュのデータもレジスタ320から入力する。上記レジスタ341、342には、さらに、レジスタ361、362に保持されている演算結果も入力する。
【0125】
前記マルチプレクサ341は、前記3つの入力データの中から1つを選択し、それをALU/SFT/VIS演算器331、乗算器(MPY)332または除算器(DVD)333にオペランドデータとして出力する。前記マルチプレクサ342は、前記3つの入力データの中から1つを選択し、それをALU/SFT演算器334にオペランドデータとして出力する。前記マルチプレクサ343は、前記2つの入力データのいずれか一方を選択し、それをアドレス生成器(AGEN)335に出力する。前記マルチプレクサ344は、前記2つの入力データのいずれか一方を選択し、それをアドレス生成器(AGEN)336に出力する。
【0126】
前記ALU/SFT/VIS演算器331、前記乗算器332及び前記除算器333は、演算結果をマルチプレクサ351に出力する。前記ALU/SFT演算器334は、演算結果をマルチプレクサ352に出力する。前記アドレス生成器335は、演算結果(アドレス)をマルチプレクサ353に出力する。前記アドレス生成器336は、演算結果(アドレス)をマルチプレクサ354に出力する。
【0127】
前記マルチプレクサ351は、前記ALU/SFT/VIS演算器331、前記乗算器332及び前記除算器333の演算結果を入力し、それらの演算結果の中から一つを選択し、その選択した演算結果を前記レジスタ361に出力する。前記マルチプレクサ352は、前記ALU/SFT演算器332の演算結果を入力し、それを前記レジスタ362に出力する。前記マルチプレクサ353は、前記アドレス生成器335の演算結果を入力し、それをレジスタ363に出力する。前記マルチプレクサ354は、前記アドレス生成器336の演算結果を入力し、それをレジスタ364に出力する。
【0128】
前記レジスタ361は、前記マルチプレクサ351から入力した演算結果を、前記ROB31、前記マルチプレクサ311〜314及び前記マルチプレクサ341、342に出力する。前記レジスタ362は、前記マルチプレクサ352から入力した演算結果を、前記レジスタ361と同様に、前記ROB31、前記マルチプレクサ311〜314及び前記マルチプレクサ341、342に出力する。
【0129】
前記レジスタ363は、前記マルチプレクサ353から入力した演算結果を、前記1次データキャッシュにアドレス(Address)として出力する。前記レジスタ364は、前記マルチプレクサ354から入力した演算結果を、前記1次データキャッシュにアドレス(Address)として出力する。
【0130】
前記マルチプレクサ341、342の選択出力データは、マルチプレクサ371に出力される。該マルチプレクサ371は、その選択出力データをレジスタ381に出力する。レジスタ381は、前記選択出力データを保持し、それを前記1次データキャッシュにデータ(Data)として出力する。
【0131】
ところで、前記マルチプレクサ311、312、313、314と演算器331〜333、演算器334、演算器335、演算器336との間に設けられたレジスタ321、322、323、324は、図4に示す前記命令パイプラインのBステージとXステージを区切るために設けられている。
【0132】
[本発明が適用可能なレジスタファイルの他の構成例]
本発明が適用可能なレジスタファイルは、MRF10のようなオーバーラップウィンドウ方式のレジスタファイルに限定されない。例えば、図16に示すようなフラット構成の巨大なレジスタファイルにも適用できる。
【0133】
図16に示すレジスタファイル400は、(m+1)個のウィンドウ0〜mが連続して配置された構成となっている。この場合、mは所定値以上の3の倍数である。レジスタファイル400を、3個のレジスタ毎に分割し、各分割領域をウィンドウ(レジスタウィンドウ)とする。すなわち、レジスタ0〜2をウィンドウ0とし、レジスタ3〜5をウィンドウ1とする。同様にして、ウィンドウ2〜nを設定する。ここで、ウィンドウnは、レジスタm−2〜mから構成される。
【0134】
このように、フラットな構成のレジスタファイル400を複数の連続するウィンドウに分割することにより、上記実施形態の演算処理装置1において、レジスタファイル400をMRF10の代替手段として利用することができる。
【0135】
以上、述べたように本実施形態の演算処理装置1は、従来の前記演算処理装置3000や前記情報処理装置4000のようにMRF(前記演算処理装置3000の場合)やCRBとCWR(前記情報処理装置4000の場合)を設けることなく、MRF10内のオーバーラップウィンドウ方式のレジスタファイル100から演算部30に高速にオペランドデータを供給できる。また、本実施形態は、この高速なレジスタファイル100からのデ
ータ読み出しを、MRF10内部にMRF_RA1とMRF_RA2と読み出しポートio0〜io2、l0、l1を設け、MRF10外部に、MRF10からレジスタのデータを読み出すための制御回路(レジスタ制御部210と命令制御部220)を設けることにより実現している。
【0136】
前記レジスタ制御部210は、ポート割り当て制御部テーブル211、SETレジスタ212、CWPレジスタ213及びset、cwp制御装置214から構成されるが、CWPレジスタ213は従来の前記演算処理装置3000や前記情報処理装置4000(以下、まとめて、従来の演算処理装置と記載)も備えていたもの(CWP)であり、MRF_RA1、MRF_RA2、ポート割り当て制御部テーブル211及びSETレジスタ212は、前記従来の演算処理装置が備えている記憶手段(WRFまたはCWRとCRB)に比べ、より小規模な回路で構築できる。
【0137】
また、set、cwp制御装置214は、組み合わせ回路で実現でき、回路規模も小さくできる。また、命令制御部220が備えるウィンドウ切り替え命令後続命令の実行タイミング制御機能221、リネームレジスタ開放制御機能222、MRF_RA2の制御機能223も小規模な組み合わせ回路で実現できる。また、MRF10に設ける読み出しポートも5本(io0〜io2、l0、l1)と小数である。したがって、装置全体で考えた場合、本実施形態の演算処理装置1は、前記従来の演算処理装置よりも回路規模を小さくできる。
【0138】
また、本実施形態の演算処理装置1は、前記従来の演算処理装置よりも回路規模が小さくなり、CRBとCWR間のレジスタウィンドウのデータ転送に要する消費電力も不要となるため、消費電力も前記従来の演算処理装置よりも低い。したがって、本実施形態の演算処理装置1は、前記従来の演算処理装置と同等の機能(ウィンドウ切り替え命令の後続命令のアウトオブオーダ実行機能など)を備えながら、回路規模や消費電力の点で優れている。また、本実施形態は、前記従来の演算処理装置よりも、ハードウェアコストが低い。
【0139】
尚、本発明は、上述した実施形態に限定されるものではなく、本発明の趣旨を逸脱しない範囲内で種々に変形して実施することができる。
したがって、本発明が適用可能なレジスタファイルは上記したレジスタファイルに限定されるものではない。例えば、グローバルレジスタ用のウィンドウを複数本備えるオーバーラップウィンドウ方式のレジスタファイルにも本発明を適用できる。また、ウィンドウ切り替え命令が実行する毎に、カレントウィンドウポインタ(CWP)が指定するカレントウィンドウのアドレスがシリアルではなくランダムに更新される構成のレジスタファイルにも、本発明は適用可能である。
【0140】
(付記1)
レジスタウィンドウを複数備えるレジスタファイルと、
前記レジスタファイルに保持されているデータをオペランドとする命令を実行する演算手段と、
前記レジスタファイルが備える複数のレジスタウィンドウの中から、カレントウィンドウとなるレジスタウィンドウを指定するアドレス情報を保持するカレントウィンドウポインタ手段と、
前記カレントウィンドウの切り替えを指示するウィンドウ切り替え命令がデコードされたとき、前記カレントウィンドウポインタ手段が保持する前記アドレス情報を更新し、前記ウィンドウ切り替え命令のデコードが開始されてからコミットが開始される直前までの間は、前記演算手段が、前記更新前のアドレス情報が指定する第1のレジスタウィンドウのデータと前記更新後のアドレス情報が指定する第2のレジスタウィンドウのデータを、
前記レジスタファイルから読み出しできるように制御する制御手段と、
を備えたことを特徴とする演算処理装置。
(付記2)
付記1記載の演算処理装置であって、
前記制御手段は、前記ウィンドウ切り替え命令のコミットが開始されたとき、前記演算手段が、前記更新後のアドレス情報が指定する前記第2のレジスタウィンドウのデータのみを、前記レジスタファイルから読み出しできるように制御することを特徴とする。
(付記3)
付記1記載の演算処理装置であって、
前記制御手段は、
前記ウィンドウ切り替え命令のデコード開始からコミット開始の直前まで、前記第1のレジスタウィンドウのデータと前記第2のレジスタウィンドウのデータを前記レジスタファイルから読み出すウィンドウデータ読み出し手段と、
前記ウィンドウ切り替え命令のデコード開始からコミット開始の直前まで、該ウィンドウデータ読み出し手段によって読み出された前記第1のレジスタウィンドウと前記第2のレジスタウィンドウに含まれる複数のレジスタのデータの中から、前記演算手段が必要とするレジスタのデータを選択して出力するレジスタデータ選択出力手段と、
を備えることを特徴とする。
(付記4)
付記3記載の演算処理装置であって、
前記ウィンドウデータ読み出し手段は、
前記ウィンドウ切り替え命令のコミットが開始されると、前記第2のジスタウィンドウに含まれるレジスタのデータのみを前記レジスタファイルから読み出すことを特徴とする。
(付記5)
付記3記載の演算処理装置であって、
前記レジスタファイルは、前記第1のレジスタウィンドウのデータと前記第2のレジスタウィンドウのデータを出力する複数の読み出しポートを備え、
前記ウィンドウデータ読み出し手段は、前記ウィンドウ切り替え命令のデコード開始からコミット開始の直前まで、前記前記第1のレジスタウィンドウのデータと前記第2のレジスタウィンドウのデータを前記複数の読み出しポートから出力し、
前記レジスタデータ選択出力手段は、前記ウィンドウ切り替え命令のデコード開始からコミット開始の直前まで、前記複数の読み出しポートから出力される前記第1のレジスタウィンドウのデータと前記第2のレジスタデータウィンドウに含まれる複数のレジスタのデータの中から、前記演算手段が必要とするレジスタのデータのみを選択して出力することを特徴とする。
(付記6)
付記5記載の演算処理装置であって、
前記ウィンドウデータ読み出し手段は、前記ウィンドウ切り替え命令のコミットが開始されると、前記第2のジスタウィンドウのデータのみを前記複数のポートのいずれかのポートから出力することを特徴とする。
(付記7)
付記5記載の演算処理装置であって、
前記複数の読み出しポートの各ポートは、前記第1のレジスタウィンドウのデータ出力と前記第2のレジスタウィンドウのデータ出力に兼用されることを特徴とする。
(付記8)
付記7記載の演算処理装置であって、
前記複数の読み出しポートの各ポートは、前記ウィンドウ切り替え命令が実行される毎に、前記第1のレジスタウィンドウのデータと前記第2のレジスタウィンドウのデータを交互に切り替え出力することを特徴とする。
(付記9)
付記5記載の演算処理装置であって、
前記レジスタウィンドウは、親ルーチンと子ルーチンとの間で引き数の授受に使用されるレジスタを備える第1のウィンドウと、個々のルーチンが個別に使用するレジスタを備える第2のウィンドウと、全てのルーチンで共有されるレジスタを備える第3のウィンドウを備え、
前記複数の読み出しポートは、前記第1のウィンドウのデータを出力する第1の読み出しポートと、前記第2のウィンドウのデータを出力する第2の読み出しポートを含み、前記第1の読み出しポートの本数と前記第2の読み出しポートの本数は、共に、複数であることを特徴とする。
(付記10)
付記9記載の演算処理装置であって、
前記第1のウィンドウは、子ルーチンに渡す引き数を格納する第4のウィンドウと親ルーチンから受け取る引き数を格納する第5のウィンドウとルーチンが専用に使用する第6のウィンドウを備え、前記レジスタウィンドウ内において、前記第4のウィンドウと前記第5のウィンドウは、それぞれ、一方の端と他方の端に配置されることを特徴とする。
(付記11)
付記10記載の演算処理装置であって、
前記レジスタファイルの複数のレジスタウィンドウは論理的に連結されており、互いに隣接する一方のレジスタウィンドウの前記第4のウィンドウと他方のレジスタウィンドウの第5のウィンドウは共有されることを特徴とする。
(付記12)
付記11記載の演算処理装置であって、
前記レジスタファイルの複数のレジスタウィンドウは論理的にリング状に連結されていることを特徴とする。
(付記13)
付記12記載の演算処理装置であって、
前記複数の第1の読み出しポートは、前記第4のウィンドウのデータと前記第5のデータを出力する第1のグループと、前記第6のウィンドウのデータを出力する第2のグループに分けられていることを特徴とする。
(付記14)
付記13記載の演算処理装置であって、
前記第1のグループに属する前記第1の読み出しポートの本数は前記第4のウィンドウと前記第5のウィンドウの総数よりも1つ大きな数であり、前記第2のグループに属する前記第2の読み出しポートの本数は前記第5のウィンドウの個数よりも1つ大きな数であることを特徴とする。
(付記15)
付記11乃至14のいずれか1項に記載の演算処理装置であって、
前記ウィンドウデータ読み出し手段は、前記ウィンドウ切り替え命令が実行される毎に、前記第4乃至第6の各ウィンドウのデータが出力される前記第1の読み出しポートをサイクリックに切り替えることを特徴とする。
(付記16)
付記9乃至15のいずれか1項に記載の演算処理装置であって、
前記ウィンドウデータ読み出し手段は、ウィンドウ切り替え命令のデコード開始からコミットが完了するまでの間は、前記複数の第1の読み出しポートを介して前記第1のレジスタウィンドウと前記第2のレジスタウィンドウに含まれる前記第1のウィンドウのデータを出力し、前記複数の第2の読み出しポートを介して前記第1のレジスタウィンドウと前記第2のレジスタウィンドウに含まれる前記第2のウィンドウのデータを出力することを特徴とする。
(付記17)
付記16記載の演算処理装置であって、
前記ウィンドウデータ読み出し手段は、ウィンドウ切り替え命令のデコード開始からコミットが完了するまでの間は、全ての前記第1の読み出しポートと全ての前記第2の読み出しポートを介して前記データ出力を行うことを特徴とする。
(付記18)
付記16または17記載の演算処理装置であって、
前記ウィンドウデータ読み出し手段は、前記ウィンドウ切り替え命令のコミットが開始されると、前記第1のレジスタウィンドウに含まれる第1のウィンドウのデータのみを前記複数の第1の読み出しポートの一部のポートから出力し、前記第1のレジスタウィンドウに含まれる第2のウィンドウのデータのみを前記複数の第2の読み出しポートの一部のポートから出力することを特徴とする。
(付記19)
付記18記載の演算処理装置であって、
前記ウィンドウデータ読み出し手段は、前記ウィンドウ切り替え命令の実行が開始される毎に、前記第1のレジスタウィンドウのデータを出力する前記第1の読み出しポートと、前記第2のレジスタウィンドウのデータを出力する前記第2の読み出しポートを切り替えることを特徴とする。
(付記20)
付記9乃至19のいずれか1項に記載の演算処理装置であって、
前記第1の読み出しポートと前記第2の読み出しポートには、それぞれ、前記第1のウィンドウのデータと前記第2のウィンドウのデータが入力されるマルチプレクサが設けられており、
前記ウィンドウデータ読み出し手段は、前記第1の読み出しポートと前記第2の読み出しポートの各ポートに設けられたマルチプレクサを制御して、前記第1のレジスタウィンドウと前記第2のレジスタウィンドウに含まれる前記第1のウィンドウのデータと前記第2のウィンドウのデータを該マルチプレクサから選択出力させ、
前記レジスタデータ選択出力手段は、前記マルチプレクサから出力される前記第1のウィンドウのデータと前記第2のウィンドウのデータの中から前記演算手段が必要とするレジスタのデータを選択して出力することを特徴とする。
(付記21)
付記3乃至20のいずれか1項に記載の演算処理装置であって
前記レジスタデータ選択出力手段は、さらに、前記レジスタファイルから前記演算手段が必要とするデータを読み出して、そのデータを出力させることを特徴とする。
(付記22)
付記3記載の演算処理装置であって、
前記制御手段は、さらに、
ウィンドウ切り替え命令が実行される度に、前記カレントウィンドウがアドレス順に切り替わってサイクリックに使用されるように、前記カレントウィンドウポインタ手段が保持するアドレス情報を更新するカレントウィンドウポインタ制御手段と、
前記サイクリックに切り替わるアドレス情報の全てのステートに関するステート情報を格納する記憶手段と、
前記カレントウィンドウポインタ手段が保持するアドレス情報が更新されたとき、更新後のアドレス情報に対応するステート情報を前記記憶手段から読み出し、そのステート情報を前記ウィンドウデータ読み出し手段に出力するステート情報出力手段と、
を備えることを特徴とする。
(付記23)
付記22記載の演算処理装置であって、
前記記憶手段に記憶されるステート情報は、何回目のサイクリックであるかを示すサイクリック情報とカレントウィンドウのアドレス情報の組であることを特徴とする。
(付記24)
付記1記載の演算処理装置であって、さらに、
前記ウィンドウ切り替え命令のデコード後に、前記ウィンドウ切り替え命令の後続命令を一定サイクルだけストールさせるパイプライン制御手段を、
備えることを特徴とする。
(付記25)
付記1記載の演算処理装置であって、さらに、
レジスタリネーミングを行うリネームレジスタ手段と、
第1の命令と、該第1の命令の後に実行される後続命令が真のデータ依存関係にあるとき、前記第1の命令の実行結果を前記レジスタファイルから読み出し可能となるまで、前記実行結果を前記リネームレジスタ手段が保持するように制御するリネームレジスタ制御手段と、
を備えることを特徴とする。
(付記26)
付記25記載の演算処理装置であって、
前記リネームレジスタ制御手段は、前記第1の命令の実行結果を前記リネームレジスタ手段に格納してから前記レジスタファイルから読み出すまでに複数サイクルを要する場合、
前記実行結果を前記レジスタファイルから読み出し可能になるまで、前記実行結果を前記リネームレジスタ手段が保持するように制御することを特徴とする。
(付記27)
付記26記載の演算処理装置であって、
パイプラインのコミットステージを伸ばすことを特徴とする。
(付記28)
付記25または26記載の演算処理装置であって、
前記第1の命令の直後の第1の後続命令は、前記第1の命令の演算結果をバイパスして使用することを特徴とする。
(付記29)
付記25または26記載の演算処理装置であって、
前記第1の後続命令の次の命令である第2の後続命令は、前記第1の命令の演算結果を演算結果レジスタから読み出して使用することを特徴とする。
(付記30)
付記25または26記載の演算処理装置であって、
前記第2の後続命令の次の命令である第3の後続命令は、前記第1の命令の演算結果をリネームレジスタから読み出して使用することを特徴とする。
(付記31)
付記25記載の演算処理装置であって、
前記第1の命令から数えて後ろから4番目に位置する第4の後続命令は、前記第1の命令の演算結果をリネームレジスタから読み出して使用することを特徴とする。
(付記32)
付記1記載の演算処理装置であって、
前記レジスタファイルは、論理的にリング状なレジスタウィンドウを備えることを特徴とする。
(付記33)
付記32記載の演算処理装置であって、
前記レジスタファイルの互いに隣接する2つのレジスタウィンドウの一部のウィンドウは共有されることを特徴とする。
(付記34)
付記32記載の演算処理装置であって、
前記レジスタウィンドウは、親ルーチンと子ルーチンとの間で引き数の授受に使用されるレジスタを備える第1のウィンドウと、個々のルーチンが個別に使用するレジスタを備
える第2のウィンドウと、全てのルーチンで共有されるレジスタを備える第3のウィンドウを備えることを特徴とする。
(付記35)
付記34記載の演算処理装置であって、
前記第1のウィンドウは、子ルーチンに渡す引き数を格納する第4のウィンドウと親ルーチンから受け取る引き数を格納する第5のウィンドウとルーチンが専用に使用する第6のウィンドウを備え、前記レジスタウィンドウ内において、前記第4のウィンドウと前記第5のウィンドウは、それぞれ、一方の端と他方の端に配置されることを特徴とする。
(付記36)
付記35記載の演算処理装置であって、
互いに隣接する一方のレジスタウィンドウの前記第4のウィンドウと他方のレジスタウィンドウの第5のウィンドウは共有されることを特徴とする。
【図面の簡単な説明】
【0141】
【図1】本発明の実施形態である演算処理装置の全体構成図である。
【図2】図1の本実施形態における演算処理装置の詳細な構成を示す図である。
【図3】(a)はMRF_RA1の構成例を示す図、(b)はMRF_RA2の構成例を示す図である。
【図4】本実施形態の演算処理装置における演算部の命令パイプラインを示す図である。
【図5】ポート割り当て制御部テーブルの構成例を示す図である。
【図6】ポート割り当て制御部テーブルからのポート割り当てステートの読み出し方法を説明する図である。
【図7】SAVE命令実行時のcwp、setの更新アルゴリズムを示すフローチャートである。
【図8】RESTORE命令実行時のcwp、setの更新アルゴリズムを示すフローチャートである。
【図9】SAVE命令前後の実行パイプラインの動作を示す図である。
【図10】ウィンドウ切り替え命令のデコード時の後続命令の実行タイミングの例を示す図である。
【図11】真のデータ依存関係にある命令を、命令パイプラインにバブル(パイプラインバブル)が発生しないように、リネームレジスタ(ROB31)の開放を制御する手法を示す図である。
【図12】レジスタファイル(MRF)からのデータの読み出しに複数サイクルを要する場合の制御手法を示す図である。
【図13】ポート割り当て制御部テーブルの活用例を示す図(その1)である。
【図14】ポート割り当て制御部テーブルの活用例を示す図(その2)である。
【図15】図2の実施形態を整数演算ユニットに適用した構成例を示す図である。
【図16】本発明が適用可能な他のレジスタファイルの構成例を示す図である。
【図17】レジスタウィンドウ方式のレジスタファイルの構成例を示す図である。
【図18】従来のレジスタウィンドウ方式のレジスタファイルを備える演算処理装置の構成を示す図(その1)である。
【図19】従来のレジスタウィンドウ方式のレジスタファイルを備える演算処理装置の構成を示す図(その2)である。
【図20】従来のレジスタウィンドウ方式のレジスタファイルを備える情報処理装置の構成を示す図である。
【符号の説明】
【0142】
1 演算処理装置
10 MRF
100 レジスタファイル
231、232、241〜243、261、271 マルチプレクサ
251 inレジスタ/outレジスタ(インレジスタ/アウトレジスタ)用ウィンドウ252 localレジスタ(ローカルレジスタ)用ウィンドウ
253 globalレジスタ(グローバルレジスタ)用ウィンドウ
io0〜io2 インレジスタ/アウトレジスタ・ウィンドウの読み出しポート
l0、l1 ローカルレジスタウィンドの読み出しポート
MRF_RA1、MRF_RA2 レジスタ
20 制御部
210 レジスタ制御部
211 ポート割り当て制御部テーブル
215 ポート割り当てステート
212 SETレジスタ
213 CWPレジスタ
214 set、cwp制御装置
220 命令制御部
221 ウィンドウ切り替え命令の後続命令の実行タイミング制御機能
222 リネームレジスタ開放制御機能
223 MRF_RA2の制御機能
30 演算部30
31 ROB(リオーダバッファ)
301 MRF
303、311〜314、341〜344、351〜354、371 マルチプレクサ
320〜324、361〜364、381 レジスタ
331 ALU/SFT/VIS演算器
332 乗算器(MPY)
333 除算器(DVD)
335、336 アドレス生成器(AGEN)
【技術分野】
【0001】
本発明は、レジスタウィンドウ方式のレジスタファイルを備える演算処理装置に係り、特にアウトオブオーダ実行が可能な演算処理装置に関する。
【背景技術】
【0002】
RISC(Reduced Instruction Set Computer)アーキテクチャのプロセッサ(以下、RISCプロセッサと呼ぶ)は、レジスタ−レジスタ演算を中心としており、メモリアクセスを減少することにより処理の高速化を図っている(ロード−ストア・アーキテクチャ)。RISCプロセッサは、上記レジスタ−レジスタ演算の効率化のために大容量のレジスタファイルを備えている。このレジスタファイルとして、サブルーチン呼び出し時の引き数の引渡し(引数の退避/復帰)のオーバーヘッドを削減するように構成されたレジスタウィンドウ方式のレジスタファイルが知られている。
【0003】
図17は、上記レジスタウィンドウ方式のレジスタファイルの構成例を示す図である。
同図に示すレジスタファイル1000は、8本のレジスタウィンドウW0〜W7から成り、これらのレジスタウィンドウW0〜W7は論理的にリング状に連結されている。各レジスタウィンドウWk(k=0〜7)は、W globals(不図示)、Wk outs、Wk ins、及びWk localsの4種類のセグメント(以後、これをウィンドウと呼ぶことにする)を備えている。これら4種類のウィンドウは、いずれも、8個のレジスタから構成されている。W globalsは全てのサブルーチンで共用される8個のグローバルレジスタを備え、Wk localsは各レジスタウィンドウ固有の8個のローカルレジスタを備えている。Wk insは8個のinレジスタ(インレジスタ)を備え、Wk outsは8個のoutレジスタ(アウトレジスタ)を備えている。
【0004】
Wk outsは自ルーチンが呼び出すサブルーチンに引き数を渡すために、Wk insは自ルーチンを呼び出した親ルーチンから引き数を受け取るために使用される。レジスタファイル1000では、Wk insとWk+1 outs及びWk outsとWk−1 insがオーバーラップするように構成されているため、サブルーチンコール時において、引き数の引渡しとそのために使用するレジスタの確保を高速化できる。Wk localsは、各サブルーチン(親ルーチンから呼び出された子ルーチン)が作業用のレジスタセットとして使用する。
【0005】
各サブルーチンは、実行時において、8本のレジスタウィンドウW0〜W7のいずれか一つを使用する。ここで、実行中のサブルーチンが使用するレジスタウィンドウWk(カレントウィンドウと呼ばれる)は、サブルーチンコールが発生する度に右回り(“SAVE”で示された破線の矢印の方向)に前記ウィンドウ2個分回転し、サブルーチンの復帰時に左回り(“RESTORE”で示されたに破線の矢印の方向)に前記ウィンドウ2個分回転するようになっている。
【0006】
レジスタファイル1000においては、各レジスタウィンドウWkは、それぞれに割り当てられたレジスタウィンドウ番号(以下、ウィンドウ番号と呼ぶ)によって管理されている。例えば、レジスタウィンドウWkにはウィンドウ番号kが割り当てられる。実行中のサブルーチンが使用しているレジスタウィンドウWkの番号kはCWP(Current Window
Pointer)に保持される。CWPの値は、SAVE命令の実行もしくはトラップ(trap)発生によってインクリメントされ、RESTORE命令の実行もしくはRETT命令によるトラップからの復帰によってデクリメントされる。図17では、CWPの値は“0”となっており、CWPはレジスタウィンドウW0を指定している。このように、CWPの値を増減させて、カレントウィンドウの切り替えを行う命令を、本明細書では“ウィンドウ切り替え命令”と呼ぶことにする。
【0007】
図17に示すレジスタファイル1000は、8本のレジスタウィンドウWkと1本のウィンドウW globals(不図示)で構成されている。ここで、W globalsは、全てのルーチンで共用されるデータを格納するレジスタセット(ウィンドウ)である。各レジスタウィンドウWkは24個(=8×3)のレジスタを備えており、ウィンドウW globalsは8個のレジスタを備えている。これらのレジスタの内、ウィンドウWk InsとウィンドウWk outsのレジスタが64個(=8×8)オーバーラップしているので、レジスタファイル1000が備えるレジスタの総数は、136個(=8×24+8−64)である。プロセッサ(演算処理装置)の演算器がサブルーチンを実行するためには、レジスタファイル1000のそれら全てのレジスタにデータを読み書きできる必要がある。
【0008】
この場合、このような大きなレジスタファイル1000からデータを読み出す回路の規模と速度が問題となる。この問題を解消するため、図18に示すような構成の演算処理装置が考案されている。
【0009】
図18に示す演算処理装置2000は、マスタレジスタファイル2001(以後、MRF2001と記載)、ワーキングレジスタファイル2002(以後、WRF2002と記載)及び演算器2003から構成されている。演算器2003は、命令を実行する実行部(図中に示す“Execution unit”)と記憶部(図中に示す“Memory unit”)を備えている。
【0010】
一般に、レジスタウィンドウ方式のレジスタファイルは、レジスタウィンドウ数が増えると、具備するレジスタの数が多くなり、演算器にオペランドを高速に供給することが困難となる。このため、図18に示すプロセッサは、全てのレジスタウィンドウ(ウィンドウW globalsも含む)を備えるMRF2001に加えて、このMRF2001内のCWPが指すカレントウィンドウのデータのコピーを保持するWRF2002を備え、演算器2003へのオペランドの供給は、このWRF2002から行うような構成となっている。
【0011】
しかし、演算処理装置2000をこのような構成とした場合、WRF2002にはCWPが指定するカレントウィンドウのデータしか保持されていないため、SAVE命令やRESTORE命令のようなウィンドウ切り替え命令が実行されると、その後続命令で必要となるオペランドをWRF2002から供給できなくなる。このため、MRF2001からWRF2002に必要なレジスタウィンドウのデータを転送する処理が必要となり、この処理が終了するまで、以後の命令の実行はストールするという問題が生じる。
【0012】
また、アウトオブオーダ(out-of-order)実行機能を備えたプロセッサの場合には、命令の実行順序はプログラムの順序とは限らず、処理可能な命令から実行していくが、ウィンドウ切り替え命令に後続する命令は、例え、処理可能になったとしても、該ウィンドウ切り替え命令実行後に、WRF2002に必要なレジスタウィンドウのデータが転送されるまでは実行できない。
【0013】
このような制約は、同時命令発行数が多くアウトオブオーダ実行が可能なスーパースカラ方式のプロセッサでは、非常に大きな性能低下を引き起こす。何故ならば、アウトオブオーダ実行方式のプロセッサでは、多くの命令をフェッチし、バッファにそれらの命令を蓄積しておき、そのバッファからプログラムの実行順序とは関係なく、実行可能な命令から順に実行していくことで、命令実行のスループットを上げているからである。
【0014】
そこで、図19に示すような演算処理装置が考案されている(例えば、特許技術文献1参照)。図19に示す演算処理装置3000では、MRF3001がカレントウィンドウ
のデータに加え、該カレントウィンドウの前後のレジスタウィンドウのデータを保持するようになっている。また、MRF3001とWRF3002の間には、MRF3001からWRF3002にレジスタウィンドウのデータを転送する際に、そのデータを一時的に保持するためのレジスタ群3113(例えば、8バイトのレジスタが8個)が設けられている。
【0015】
このような構成において、演算処理装置3000は、先見転送により、CWP+1及びCWP−1が指すレジスタウィンドウのデータを、予め、MRF3001からWRF3002に転送しておくことによって、ウィンドウ切り替え命令に後続する命令をアウトオブオーダで実行可能となっている。尚、図19において、破線枠CWPはCWPが指定するレジスタウィンドウを、破線枠CWP+1はCWPが指定するレジスタウィンドウの次のレジスタウィンドウを示す。また、破線枠CWP−1はCWPが指定するレジスタウィンドウの一つ前のレジスタウィンドウを示している。
【0016】
ここで、CWPが、現在、レジスタウィンドウW3を指定しているものとする。このとき、WRF3002にはレジスタウィンドウW2、W3、W4が保持されているので、演算器3003はレジスタウィンドウW2〜W4を利用する命令を実行可能である。その後、SAVE命令が実行されると、そのSAVE命令実行後、CWPはレジスタウィンドウW4を指定するようにインクリメントされる。そして、MRF3001からレジスタ群3113を介してWRF3002にレジスタウィンドウW5のデータが転送され、WRF3002にはレジスタウィンドウW3〜W5のデータが保持される。これにより、演算器3003はレジスタウィンドウW3〜W5を使用する命令を実行可能となる。
【0017】
しかしながら、演算処理装置3000においては、WRF3002が3本のレジスタウィンドウを保持するため、WRF3002は64個のレジスタを備える必要がある。また、ラッチ用の前記レジスタ群が8個のレジスタを備えるため、合計72個のレジスタが必要となる。図18の前記演算処理装置2000のWRF2002は1本のレジスタウィンドウのみを保持するため、32個のレジスタを備える。したがって、演算処理装置3000は、レジスタを演算処理装置2000よりも40個多く備えることになり、回路規模が大きくなってしまう。さらに、演算処理装置3000においては、WRF3002と演算器3003にデータを転送するための選択回路(不図示)の面積(回路規模)が大きくなってしまうと共に、演算器3003がWRF3002からデータを読み出す処理速度が低下してしまう。
【0018】
この問題を解消するために、本出願人は、アウトオブオーダ実行方式の命令パイプラインの制御に着目して、WRFにはCWP+1またはCWP−1のいずれか一方のみを転送・保持する構成の情報処理装置を考案した(特許技術文献2参照)。
【0019】
図20に、上記特許技術文献2の情報処理装置4000の構成を示す。図20に示すように、該情報処理装置4000は、CRB(Current window Replace Buffer)4030とCWR(Current Working Register file)4020を備え、CRB4030とCWR4020 とでWRFを構成している。CWR4020はカレントウィンドウのデータを保持するバッファであり、CRB4030はCWR4020 に次に保持されるレジスタウィンドウのデータを格納するバッファである。演算部4040は、アウトオブオーダ実行方式で命令を実行するパイプラインを備えている。制御部4050は、演算部4040によりウィンドウ切り替え命令がデコードされると、CWR4020 に次に保持すべきカレントウィンドウがMRF4010からCRB4030に転送されるように、MRF4010とCWR4020 を制御する。また、制御部4050は、演算部4040が前記ウィンドウ切り替え命令の実行を完了すると、CRB4030に保持されているレジスタウィンドウのデータをCWR4020 に転送させ、CWR4020に該レジスタウィンドウのデータを保持させる。
【0020】
CWR4020は、カレントウィンドウのウィンドウglobals(G)、locals(L)、ins(Io0)及びouts(Io1)の データを保持するレジスタ群4021〜4024を備えている。各レジスタ群は8個のレジスタを備えるので、CWR4020は、32個(=4×8)のレジスタを備える。CRB4030は、カレントウィンドウの次のレジスタウィンドウのデータの内、CWR4020に保持されているデータとオーバーラップしないウィンドウのデータのみを保持するレジスタ群4031、4032を備えている。レジスタ4031は次のレジスタウィンドウのウィンドウlocals(L)のデータを保持し、レジスタ4032は次のレジスタウィンドウのウィンドウins(Io0)またはouts(Io1)のデータを保持する。各レジスタ群4031、4032は8個のレジスタを備えるので、CWR4020は、16個(=8×2)のレジスタを備える。したがって、情報処理装置4000のWRFは48個のレジスタから構成される。
【0021】
このように、特許技術文献2の情報処理装置4000のWRFは、特許技術文献1の演算処理装置3000のWRF3002よりもレジスタの数が24個少ない。このため、情報処理装置4000は、演算処理装置3000よりも回路規模を小さくできる共に消費電力も低減できる。
【特許文献1】特開2003−196086号公報
【特許文献2】特願2005−27504号
【発明の開示】
【発明が解決しようとする課題】
【0022】
しかしながら、前記演算処理装置3000や前記情報処理装置4000は、いずれもMRF内の1つのレジスタウィンドウのコピーを保持する記憶手段(WRFや、CRBとCWR)を設けているため、ハードウェアコストがかかり、回路規模も大きくなる。また、前記情報処理装置3000は、MRF4010とCWR4020との間に設けられたワークバッファ(CRB4030)からCWR4020へのデータ転送に電力を消費する。
【0023】
本発明の目的は、レジスタウィンドウ方式のレジスタファイルを備え、ウィンドウ切り替え命令の後続命令のアウトオブオーダ実行が可能な演算処理装置を、従来よりも小さな回路規模と、より低い消費電力で実現することである。
【課題を解決するための手段】
【0024】
本発明の演算処理装置の第1態様は、レジスタウィンドウを複数備えるレジスタファイルと、前記レジスタファイルに保持されているデータをオペランドとする命令を実行する演算手段と、前記レジスタファイルが備える複数のレジスタウィンドウの中から、カレントウィンドウとなるレジスタウィンドウを指定するアドレス情報を保持するカレントウィンドウポインタ手段と、前記カレントウィンドウの切り替えを指示するウィンドウ切り替え命令がデコードされたとき、前記カレントウィンドウポインタ手段が保持する前記アドレス情報を更新し、前記ウィンドウ切り替え命令のデコードが開始されてからコミットが開始される直前までの間は、前記演算手段が、前記更新前のアドレス情報が指定する第1のレジスタウィンドウのデータと前記更新後のアドレス情報が指定する第2のレジスタウィンドウのデータを、前記レジスタファイルから読み出しできるように制御する制御手段とを備える。
【0025】
上記本発明の演算処理装置の第1態様によれば、従来の演算処理装置のように、レジスタファイルから演算手段が命令実行に必要とするデータを高速に読み出すための記憶手段を設けることなく、前記レジスタファイルから前記演算手段に、命令実行に必要なデータを高速に供給することができる。また、命令パイプラインにおいてアウトオブオーダ実行
が可能となる。
【0026】
本発明の演算処理装置の第2態様は、前記第1態様の演算処理装置において、前記制御手段は、前記ウィンドウ切り替え命令のコミットが開始されたとき、前記演算手段が、前記更新後のアドレス情報が指定する前記第2のレジスタウィンドウのデータのみを、前記レジスタファイルから読み出しできるように制御する。
【0027】
上記本発明の演算処理装置の第2態様によれば、命令パイプラインにおいてインオーダ完了が可能となる。
本発明の演算処理装置の第3態様は、前記第1態様の演算処理装置において、前記制御手段は、前記ウィンドウ切り替え命令のデコード開始からコミット開始の直前まで、前記第1のレジスタウィンドウのデータと前記第2のレジスタウィンドウのデータを前記レジスタファイルから読み出すウィンドウデータ読み出し手段と、前記ウィンドウ切り替え命令のデコード開始からコミット開始の直前まで、該ウィンドウデータ読み出し手段によって読み出された前記第1のレジスタウィンドウと前記第2のレジスタウィンドウに含まれる複数のレジスタのデータの中から、前記演算手段が必要とするレジスタのデータを選択して出力するレジスタデータ選択出力手段とを備える。
【0028】
本発明の演算処理装置の第3態様によれば、ウィンドウデータ読み出し手段とレジスタデータ選択出力手段の作用により、演算手段が命令を実行するために必要なレジスタデータのデータを、レジスタファイルから高速に読み出して、前記演算手段に供給することができる。また、命令パイプラインのアウトオブオーダ実行も可能となる。
【0029】
本発明の演算処理装置の第4態様は、前記第3態様の演算処理装置において、前記ウィンドウデータ読み出し手段は、前記ウィンドウ切り替え命令のコミットが開始されると、前記第2のジスタウィンドウに含まれるレジスタのデータのみを前記レジスタファイルから読み出すことを特徴とする。
【0030】
本発明の演算処理装置の第4態様によれば、前記ウィンドウデータ読み出し手段の作用により、命令パイプラインのアウトオブオーダ実行とインオーダ完了が可能となる。
本発明の演算処理装置の第5態様は、前記第3態様の演算処理装置において、前記レジスタファイルは、前記第1のレジスタウィンドウのデータと前記第2のレジスタウィンドウのデータを出力する複数の読み出しポートを備え、前記ウィンドウデータ読み出し手段は、前記ウィンドウ切り替え命令のデコード開始からコミット開始の直前まで、前記前記第1のレジスタウィンドウのデータと前記第2のレジスタウィンドウのデータを前記複数の読み出しポートから出力し、前記レジスタデータ選択出力手段は、前記ウィンドウ切り替え命令のデコード開始からコミット開始の直前まで、前記複数の読み出しポートから出力される前記第1のレジスタウィンドウのデータと前記第2のレジスタデータウィンドウに含まれる複数のレジスタのデータの中から、前記演算手段が必要とするレジスタのデータのみを選択して出力する。
【0031】
本発明の演算処理装置の第5態様によれば、前記ウィンドウデータ読み出し手段の作用により、レジスタファイルに設けられた読み出しポートから前記演算手段が命令実行に必要なデータを高速に読み出すことができる。また、命令パイプラインにおいてアウトオブオーダ実行が可能となる。
【0032】
上記第5態様の演算処理装置の構成において、例えば、前記複数の読み出しポートの各ポートは、前記第1のレジスタウィンドウのデータ出力と前記第2のレジスタウィンドウのデータ出力に兼用されるようにしてもよい。そして、さらに、例えば、前記複数の読み出しポートの各ポートは、前記ウィンドウ切り替え命令が実行される毎に、前記第1のレ
ジスタウィンドウのデータと前記第2のレジスタウィンドウのデータを交互に切り替え出力するようにしてもよい(前記第5態様の演算処理装置の第1の構成例)。
【0033】
このような構成にすることにより、読み出しポートの本数を少なくすることができる。また、上記第5態様の演算処理装置において、例えば、前記レジスタウィンドウは、親ルーチンと子ルーチンとの間で引き数の授受に使用されるレジスタを備える第1のウィンドウと、個々のルーチンが個別に使用するレジスタを備える第2のウィンドウと、全てのルーチンで共有されるレジスタを備える第3のウィンドウを備え、前記複数の読み出しポートは、前記第1のウィンドウのデータを出力する第1の読み出しポートと、前記第2のウィンドウのデータを出力する第2の読み出しポートを含み、前記第1の読み出しポートの本数と前記第2の読み出しポートの本数は、共に、複数であるような構成にしてもよい(前記第5態様の演算処理装置の第2の構成例)。
【0034】
このような構成にすることにより、レジスタウィンドウがインレジスタ用ウィンドウ(Wk ins)、ローカルレジスタ用ウィンドウ(Wk locals)及びアウトレジスタ用ウィンドウ(Wk outs)から構成され、グローバルレジスタ用ウィンドウ(W globals)を備えるレジスタファイルに適用できる。
【0035】
前記第5態様の演算処理装置の第2の構成例において、例えば、前記ウィンドウデータ読み出し手段は、ウィンドウ切り替え命令のデコード開始からコミットが完了するまでの間は、前記複数の第1の読み出しポートを介して前記第1のレジスタウィンドウと前記第2のレジスタウィンドウに含まれる前記第1のウィンドウのデータを出力し、前記複数の第2の読み出しポートを介して前記第1のレジスタウィンドウと前記第2のレジスタウィンドウに含まれる前記第2のウィンドウのデータを出力するような構成にしてもよい(前記第5態様の演算処理装置に第3の構成例)。
【0036】
このような構成にすることにより、命令パイプラインにおいてアウトオブオーダ実行が可能となる。
前記第5態様の演算処理装置の第3の構成例において、例えば、前記ウィンドウデータ読み出し手段は、ウィンドウ切り替え命令のデコード開始からコミットが完了するまでの間は、全ての前記第1の読み出しポートと全ての前記第2の読み出しポートを介して前記データ出力を行うような構成にしてもよい(前記第5態様の演算処理装置の第4の構成例)。
【0037】
このような構成にすることにより、命令パイプラインにおいてアウトオブオーダ実行を可能としながら、読み出しポートの本数を少なくできる。
前記第5態様の第3または第4の構成例において、例えば、前記ウィンドウデータ読み出し手段は、前記ウィンドウ切り替え命令のコミットが開始されると、前記第1のレジスタウィンドウに含まれる第1のウィンドウのデータのみを前記複数の第1の読み出しポートの一部のポートから出力し、前記第1のレジスタウィンドウに含まれる第2のウィンドウのデータのみを前記複数の第2の読み出しポートの一部のポートから出力するような構成にしてもよい(前記第5態様の演算処理装置の第5構成例)。
【0038】
このような構成にすることにより、命令パイプラインにおいてアウトオブオーダ実行とインオーダ完了が可能となる。
前記演算処理装置の第5構成例において、例えば、前記ウィンドウデータ読み出し手段は、前記ウィンドウ切り替え命令の実行が開始される毎に、前記第1のレジスタウィンドウのデータを出力する前記第1の読み出しポートと、前記第2のレジスタウィンドウのデータを出力する前記第2の読み出しポートを切り替えるような構成にしてもよい。
【0039】
このような構成とすれば、読み出しポートを有効に活用でき、読み出しポートの本数を最小限にできる。
本発明の演算処理装置の第6態様は、前記第5態様の演算処理装置において、前記ウィンドウデータ読み出し手段は、前記ウィンドウ切り替え命令のコミットが開始されると、前記第2のジスタウィンドウのデータのみを前記複数のポートのいずれかのポートから出力する。
【0040】
本発明の演算処理装置の第6態様によれば、前記ウィンドウデータ読み出し手段の作用により、パイプラインにおいてインオーダ完了が可能となる。
本発明の演算処理装置の第7態様は、前記第5または第6態様の演算処理装置において、前記第1の読み出しポートと前記第2の読み出しポートには、それぞれ、前記第1のウィンドウのデータと前記第2のウィンドウのデータが入力されるマルチプレクサが設けられており、前記ウィンドウデータ読み出し手段は、前記第1の読み出しポートと前記第2の読み出しポートの各ポートに設けられたマルチプレクサを制御して、前記第1のレジスタウィンドウと前記第2のレジスタウィンドウに含まれる前記第1のウィンドウのデータと前記第2のウィンドウのデータを該マルチプレクサから選択出力させ、前記レジスタデータ選択出力手段は、前記マルチプレクサから出力される前記第1のウィンドウのデータと前記第2のウィンドウのデータの中から前記演算手段が必要とするレジスタのデータを選択して出力する。
【0041】
本発明の演算処理装置の第8態様は、前記第3〜第7態様の各態様において、前記レジスタデータ選択出力手段は、さらに、前記レジスタファイルから前記演算手段が必要とするデータを読み出して、そのデータを出力させる。
【0042】
本発明の演算処理装置の第8態様によれば、各読み出しポートからのデータ選択出力を、マルチプレクサを制御することにより高速に実行できる。
本発明の演算処理装置の第9態様は、前記第3態様の演算処理装置において、前記制御手段は、さらに、ウィンドウ切り替え命令が実行される度に、前記カレントウィンドウがアドレス順に切り替わってサイクリックに使用されるように、前記カレントウィンドウポインタ手段が保持するアドレス情報を更新するカレントウィンドウポインタ制御手段と、
前記サイクリックに切り替わるアドレス情報の全てのステートに関するステート情報を格納する記憶手段と、前記カレントウィンドウポインタ手段が保持するアドレス情報が更新されたとき、更新後のアウトオブオーダ実行方式に対応するステート情報を前記記憶手段から読み出し、そのステート情報を前記ウィンドウデータ読み出し手段に出力するステート情報出力手段とを備える。
【0043】
前記第9態様の演算処理装置において、前記記憶手段に記憶されるステート情報は、例えば、何回目のサイクリックであるかを示すサイクリック情報とカレントウィンドウのアドレス情報の組である。
本発明の演算処理装置の第9態様によれば、レジスタウィンドウが論理的にリング状に構成されたレジスタファイルからのデータ読み出しを、前記記憶手段に格納されている前記ステート情報を利用して効率的に制御できる。
【0044】
本発明の演算処理装置の第10態様は、前記第1態様の演算処理装置において、前記ウィンドウ切り替え命令のデコード後に、前記ウィンドウ切り替え命令の後続命令を一定サイクルだけストールさせるパイプライン制御手段を備える。
【0045】
本発明の演算処理装置の第10態様の演算処理装置によれば、レジスタファイルから演算手段へのデータ転送に複数サイクル(サイクルは、命令パイプラインのサイクル)を要する場合、ウィンドウ切り替え命令の後続命令のデコードをストールさせることで、該後
続命令を正しく実行できる。
【0046】
本発明の演算処理装置の第11態様の演算処理装置は、前記第1態様の演算処理装置において、さらに、レジスタリネーミングを行うリネームレジスタ手段と、第1の命令と、該第1の命令の後に実行される後続命令が真のデータ依存関係にあるとき、前記第1の命令の実行結果を前記レジスタファイルから読み出し可能となるまで、前記実行結果を前記リネームレジスタ手段が保持するように制御するリネームレジスタ制御手段とを備える。
【0047】
前記第11態様の演算手段において、前記リネームレジスタ制御手段は、例えば、前記第1の命令の実行結果を前記リネームレジスタ手段に格納してから前記レジスタファイルから読み出すまでに複数サイクルを要する場合、前記実行結果を前記レジスタファイルから読み出し可能になるまで、前記実行結果を前記リネームレジスタ手段が保持するように制御する。
【0048】
本発明の演算処理装置の第11態様によれば、レジスタファイルから演算手段へのデータ転送に複数サイクル(サイクルは、パイプラインのサイクル)を要するとき、前記リネームレジスタ手段の前記実行結果を保持しているエントリの開放を遅らせることで、ある命令Aとその命令Aに後続する命令Bとの間に真のデータ依存関係が存在する場合であっても、該命令Bを、命令パイプラインにパイプラインバブルを生じさせずに実行できる。
【発明の効果】
【0049】
本発明によれば、レジスタウィンドウ方式のレジスタファイルからデータを予め読み出しておくためのバッファを設けずに、組み合わせ回路を主要部とする構成で、該レジスタファイルから演算器にオペランドデータを供給できるので、レジスタウィンドウ方式のレジスタファイルを備え、ウィンドウ切り替え命令(レジスタウィンドウ切り替え命令)の後続命令のアウトオブオーダ実行が可能な機能を備えた演算処理装置を、従来よりも小さな回路規模(回路面積)と、より低い消費電力で実現できる。
【発明を実施するための最良の形態】
【0050】
以下、図面を参照しながら本発明の実施形態について説明する。
[概要]
本発明は、上述したレジスタウィンドウ方式のレジスタファイルを有し、アウトオブオーダ実行機能を備えた演算処理装置において、前記MRFからのデータ読み出しを工夫することで、前記WRFを設けることなく、演算部のデータ読み出し速度を確保しながら、ウィンドウ切り替え命令の後続命令のアウトオブオーダ実行も可能にすることを特徴としている。本発明は、このような構成により、演算処理装置の回路面積の削減による消費電力の低減、ワークバッファ間(CWRとCRB間)のデータ転送を無くすことにより消費電力の削減を実現する。
【0051】
本発明の実施形態である演算処理装置の全体構成を図1に示し、図2に本実施形態の演算処理装置の詳細な構成を示す。また、本実施形態の演算処理装置のアウトオブオーダ実行を行う命令パイプラインを図4に示す。
【0052】
本実施形態の構成上の特徴は、従来の演算処理装置とは異なりWRFを備えていないことである。図1に示すMRF10内に、図2に示すように、MRF_RA1(Master Register Read Address 1)、MRF_RA2(Master Register Read Address 2)を設ける。また、制御部20内に、前記MRF_RA1と前記MRF_RA2を制御する制御部(レジスタ制御部210、命令制御部220)を設ける。MRF_RA1の内容は、CWPレジスタ213の値を更新する命令の発行(issue)時もしくはコミット(commit)時に更新される。本実施形態では、このMRF_RA1を用いて、MRF10からCWPレジスタ213で指定されるレジスタウィンドウを読み出す。
【0053】
本実施形態は、図2に示すように、前記特許技術文献2の情報処理装置4000が備えるCRB4030、CWR4020に相当する記憶手段は備えておらず、これらの記憶手段が備えていた機能は、ほとんど、組み合わせ回路で実現されている。MRF_RA2の内容は、命令パイプラインのDispatchステージで決定され、それに続くExecuteステージにおいて演算部30が使用するデータを指示する。
【0054】
このような回路構成を採用したことにより、MRF_RA1またはMRF10に保持されるデータが更新されない限り、MRF_RA2から演算部30まではデータが1サイクルで読み出され、演算部30における命令のアウトオブオーダ実行が可能となる。また、MRF_RA1またはMRF10に保持されるデータが更新されてから、その更新が演算部30への読み出しデータに影響を与えるまでにNサイクルかかるものとすると、MRF_RA1またはMRF10に保持されるデータが更新されてからN−1サイクルだけ、次命令のディスパッチ(Dispatch)をストールさせることで、全ての場合において、演算部30における命令のアウトオブオーダ実行が可能となる。
【0055】
また、命令パイプラインのUpdate Bufferステージにおいて演算結果を一旦保持しておくレジスタ(図2のリオーダバッファ(ROB:Reorder Buffer)31)のデータは、一般にCommitステージで破棄され、MRF10に書き込まれる。このため、演算部30は、その後は、そのデータをMRF10から読み出すが、これをCommitステージのN−1サイクルまでリオーダバッファ31で保持し、前記演算結果を前記リオーダバッファ31から読み出すことによって、上記のようにMRF10に保持されるデータの更新からN−1サイクル分だけディスパッチをストールする必要がなくなる。
【0056】
[構成]
{全体構成}
図1は、本発明の実施形態である演算処理装置の全体構成図である。
同図に示す演算処理装置1は、MRF10、制御部20及び演算部30を備えている。
図1と図19、20を比較すれば分かるように、本実施形態の演算処理装置1は、上述した従来の前記情演算処理装置3000や前記情報処理装置4000と異なり、WRF3002やワークバッファ(CWR4020、CRB4030)を備えていない。本実施形態の演算処理装置1は、制御部20内に設けられた組み合わせ回路(不図示)とMRF10内に設けられたレジスタ(例えば、前記MRF_RA1と前記MRF_RA2)により、CWPで指定されるMRF10内のレジスタウィンドウをアクセスして、該レジスタウィンドウに対するデータの読み出し/書き込みを行う。制御部20は、演算部30に対して命令の演算実行を指示するための信号を出力する。
【0057】
MRF10は、レジスタウィンドウ方式のレジスタファイルであり、その構成は上述した図17に示すMRF4010とほぼ同様である。MRF10内のレジスタウィンドウの指定は、CWPレジスタ(不図示)によって行われる。演算部30は、MRF10内のレジスタウィンドウからデータを読み出し(read)、そのデータを用いて算術演算命令や論理演算命令などを実行する。そして、その命令の実行結果を、MRF10の当該レジスタウィンドウに書き込む(write)。
【0058】
図2は、図1の演算処理装置1の詳細な構成を示す図である。図4は、演算処理装置1が備えるアウトオブオーダ実行の命令パイプラインを示す図である。
{命令パイプラインの構成}
まず、図4に示す命令パイプラインの構成を説明する。図4に示すように、演算処理装置1の命令パイプラインは、Fetchステージ(F)、Issueステージ(D)、D
ispatchステージ(P)、Operand Readステージ(B)、Executeステージ(X)、Update Bufferステージ(U)、及びCommitステージ(W)から構成される。
【0059】
上記各ステージの機能は下記の通りである。
Fetchステージ:メモリから命令を読み出す
Issueステージ:命令をデコードし、そのデコード結果をリザベーションステーションに登録する。
【0060】
Dispatchステージ:リザベーションステーションから命令を発行する
Oerand Readステージ:演算器までオペランドを読み出す
Executeステージ:命令を実行する
Update Bufferステージ:実行結果を待ち合わせる
Commitステージ:命令を完了する
【0061】
Fetchステージはメモリ(不図示)から命令を読み出すステージであり、Issueステージは該命令をデコードし、その結果をリザベーションステーションに登録するステージである。FetchステージとIssueステージは、インオーダで実行される(IO.FD)。
【0062】
Dispatchステージはリザベーションステーション(不図示)から命令を発行するステージであり、Executeステージは前記リザベーションステーションから発行された命令を実行するステージである。また、UpdateBufferステージは、インオーダ完了を実現するために、Executeステージで実行された結果を待ち合わせるステージである。Dispatchステージ、Executeステージ及びUpdateBufferステージは、アウトオブオーダで実行される(OOO.PBXU)。
【0063】
Commitステージは命令を完了するステージである。Commitステージにおいては、前記リザベーションステーションを利用してインオーダ完了を実現する(IO.W)。前記リザベーションステーションは、演算器により実行された命令について、コンプリートしたか否かの情報や実行結果を保存している。Commitステージにおいては、前記リザベーションステーションを参照して、命令をインオーダ完了させる。
このように、演算処理装置1の命令パイプラインは、アウトオブオーダ命令発行/インオーダ完了のアウトオブオーダ処理を実行する構成となっている。
【0064】
{MRF10の構成}
図2に示すように、MRF10は、レジスタファイル100、MRF_RA1及びMRF_RA2を備えている。レジスタファイル100は、前述した図17に示すレジスタファイル1000と同様な構成のオーバーラップウィンドウ方式のレジスタファイルである。したがって、ここでは、詳しい説明は省略する。
【0065】
{制御部20の構成}
図1の制御部20は、図2に示すレジスタ制御部210及び命令制御部220を備えている。
レジスタ制御部210は、ポート割り当て制御部テーブル211、SETレジスタ212、CWPレジスタ213、及びset、cwp制御装置214を備えている。
ポート割り当て制御部テーブル211は、MRF_RA1に設定される値(後述するポート割り当てステート)が格納されているテーブルである。
【0066】
本実施形態のMRF10は、図17に示すMRF4010と同様に、論理的にリング状に構成された8個のレジスタウィンドウを備えている。また、 MRF_RA1(Master Register File Read Address 1)とMRF_RA2(Master Register File Read Address 2)を備えている。また、さらに、5つの読み出しポートl0、l1、io0、io1、io2を備えている。
【0067】
読み出しポートl0、l1は、MRF_RA1で指定されるレジスタウィンドウのローカルレジスタのデータを読み出すためのポートである。読み出しポートl0にはマルチプレクサ231が設けられ、読み出しポートl1にはマルチプレクサ232が設けられている。前記マルチプレクサ231、232には、8個のレジスタウィンドウ(W0〜W7)の各ローカルレジスタ用ウィンドウ(W0 locals〜W7 locals)のローカルレジスタのデータが入力される。
【0068】
読み出しポートio0、io1、io2は、MRF_RA1で指定されるレジスタウィンドウのインレジスタまたはアウトレジスタのデータを読み出すためのポートである。読み出しポートio0にはマルチプレクサ241が設けられ、読み出しポートio1にはマルチプレクサ242が設けられている。また、読み出しポートio2にはマルチプレクサ243が設けられている。前記マルチプレクサ241〜243には、8個のレジスタウィンドウ(W0〜W7)の各インレジスタ/アウトレジスタ用ウィンドウ(W0 ins〜W7 ins、W0 outs〜W7 outs)ののインレジスタ/アウトレジスタのデータが入力される。
【0069】
MRF_RA1は、制御部20から出力される値(後述するポート割り当てステート)を格納するレジスタである。 MRF_RA1に設定される値は、レジスタ制御部210内に設けられたCWPレジスタ213を更新する命令(“ウィンドウ切り替え命令”もしくは“レジスタウィンドウ切り替え命令”と呼ぶ)のIssueステージまたはCommitステージで更新される。演算処理装置1は、このMRF_RA1に設定された値を用いて、CWPレジスタ213の値(カレントウィンドウポインタ値)で指定されるレジスタウィンドウのデータをMRF10から読み出す。
【0070】
MRF_RA2は、演算部30内の演算器(不図示)がオペランド毎に読み出すレジスタの番号を指定するレジスタであり、レジスタ制御部210によって制御される。MRF_RA2は、命令パイプラインのDispatchステージで値が決定され、次のExecuteステージで演算部30が使用するデータ(MRF10から読み出されたレジスタウィンドウのレジスタのデータ)を指示する。
【0071】
{MRF_RA1とMRF_RA2の構成例}
図3(a)は、MRF_RA1の構成例を示す図である。
図3(a)に示すMRF_RA1は、図5に示すポート割り当てステート215(5つのポートID「l0」、「l1」、「io0」、「io1」、「io2」)を格納する領域を備えている。本実施形態のMRF10は、W0〜W7の8本レジスタウィンドウを備えているため、ポートIDl0、l1は、それら8本のレジスタウィンドウW0〜W7の中から一つのローカルレジスタ用ウィンドウ(=8個のローカルレジスタ)を指定するアドレスである。また、ポートIDio0〜io2は、上記8本のレジスタウィンドウW0〜W7の中から一つのインレジスタ/アウトレジスタ用ウィンドウ(=8個のインレジスタ/アウトレジスタ)を指定するアドレスである。したがって、各ポートIDl0、l1、io0、io1、io2の最小構成は3ビットである。
【0072】
図3(b)は、MRF_RA2の構成例を示す図である。
図3(b)に示すMRF_RA2は、MRF10の5つの読み出しポートl0、l1、io0、io1、io2の中から1つのポートを選択するためのアドレス(ポート指定ア
ドレス)と、ウィンドウ内のレジスタを特定するためのアドレス(レジスタ指定アドレス)を格納する領域を備えている。ポート指定アドレスは、上記5つの読み出しポートl0、l1、io0、io1、io2の中から1つを指定するので、最小3ビット構成となる。また、MRF10が備えるレジスタウィンドウが8個のレジスタから構成される場合、レジスタ指定アドレスは、最小3ビット構成となる。したがって、この場合、MRF_RA2は全体で最小6ビット構成となる。
【0073】
MRF10の上記5つの読み出しポートl0、l1、io0、io1、io2のそれぞれに設けられたマルチプレクサは、MRF_RA1から出力される選択信号(前記ポートID)によってその出力が制御される。図4には、CWPレジスタ213の値(cwp)で指定されたレジスタウィンドウiのインレジスタ/アウトレジスタ(in(out)レジスタ)用ウィンドウ251とローカルレジスタ(localレジスタ)用ウィンドウ252が示されている。ここで、“i”はCWPレジスタ213の値(cwp)である。また、グローバルレジスタ(globalレジスタ)用ウィンドウ253も示されている。
【0074】
レジスタウィンドウW0〜W7のinレジスタ/outレジスタ用ウィンドウ251のデータ(8個のローカルレジスタのデータ)は、読み出しポートIo0、io1、io2に出力される。指定されたレジスタウィンドウのlocalレジスタ用ウィンドウ252のデータは、読み出しポートl0、l1に出力される。これらの読み出しポートに出力されたウィンドウデータは、それぞれのポートに設けられたマルチプレクサ241〜243、231、232により選択出力される。
【0075】
上記5つのマルチプレクサ231、232、241〜243から選択出力されるレジスタウィンドウのウィンドウデータは、マルチプレクサ261に入力される。マルチプレクサ261には、グローバルレジスタ用ウィンドウ253のデータも入力される。マルチプレクサ261は、MRF_RA2から出力される選択信号(前記ポート指定アドレスと前記レジスタ指定アドレス)に従って、上記5つのマルチプレクサ231、232、241〜243から選択出力されるウィンドウのデータと前記グローバルレジスタ用ウィンドウ253の中から1つのウィンドウのデータを選択し、さらにその選択されたウィンドウのデータに含まれる8個のレジスタのデータの中から1つを選択する。そして、その選択したレジスタのデータを演算部30に出力する。
【0076】
MRF10は、さらに、マルチプレクサ271を備えている。このマルチプレクサ271は、演算部30から入力されるMRF10に対する書き込みデータ(演算結果など)を当該レジスタに選択出力する。このマルチプレクサ271は、レジスタ制御部210によって制御され、演算部30が指定するレジスタに前記書き込みデータを出力する。
【0077】
本実施形態のように、MRF10が備えるレジスタファイル100を8個のレジスタウィンドウで構成した場合、SAVE命令、RESTORE命令などのウィンドウ切り替え命令でCWPレジスタ213の値(以後、この値を“cwp”と記載する)が変化したときに、物理的には同じレジスタである、切り替わる前のカレントウィンドウのoutレジスタ用ウィンドウ(outs)と切り替わった後のカレントウィンドウのinレジスタ用ウィンドウ(Ins)を、MRF10の同じ読み出しポートに割り当てる組み合わせの全てをカバーする最小のステート数は24である。cwpは“0”〜“7”の8個の値をとるので、“0”〜“7”の値を3回周回すると元のステートに戻る。このため、cwpが“0”〜“7”を3周回って1セットと考える。したがって、SETレジスタ212の値(以後、この値を“set”と記載する)として“0”〜“2”を割り当て、ウィンドウ切り替え命令が実行される毎にこれらの値をサイクリックに変化させる。図5に示すように、上記24種類のステートは、8値(“0”〜“7”)をとりうるcwpと3値(“0”〜“2”)をとりうるsetの値の組み合わせで決定される。本実施形態では、図5に示すように、上記24種類の各ステートに「ポート割り当てステート215」を割り当て、これら24種類のポート割り当てステート215を、setとcwpの値の組み合わせに対応付けてポート割り当て制御部テーブル211に格納する。ポート割り当てステート215は、MRF10の「l0」、「l1」、「io0」、「io1」、「io2」の5つの読み出しポートのID(ポートID)から構成される。これらのポートIDは、MRF_RA1の該当する読み出しポートの出力選択信号となっている。
【0078】
{ポート割り当て制御部テーブル211の構成}
図5は、前記ポート割り当て制御部テーブル211の構成例を示す図である。
図5に示すように、ポート割り当て制御部テーブル211は、24個のエントリを備えており、それらのエントリに上記24種類のステートに関する情報を、ステートの周回順序に対応させて格納している。ポート割り当て制御部テーブル211の各エントリのレコードは、「set」、「cmp」、「ポート割り当てステート215」から構成される。setは上記セットの番号(セット番号)を、cwpはCWPレジスタ213の値、すなわち、カレントウィンドウに指定されているレジスタウィンドウの番号(レジスタウィンドウ番号)を示す。setとcwpの組(set、cwp)は、ポート割り当て制御部テーブル211のインデックスとなっている。
【0079】
ポート割り当てステート215は、図2に示すMRF10の5つの読み出しポートl0、l1、io0、io1、io2に対応する5つのポートIDから構成される。ポートIDl0が読み出しポートl0に、ポートIDl1が読み出しポートl1に、ポートIDio0は読み出しポートio0に、ポートIDio1が読み出しポートio1に、ポートIDio2が読み出しポートio2に対応している。
【0080】
前記ポートIDl0、l1には%lが、前記ポートIDio0〜io2には%iまたは%oが設定される。%l、%i及び%oは、それぞれ、cwpで指定されるMRF10のレジスタウィンドウのローカルレジスタ用ウィンドウ(=8個のローカルレジスタ)、インレジスタ用ウィンドウ(=8個のインレジスタ)及びアウトレジスタ用ウィンドウ(=8個アウトレジスタ)を指定するアドレスである。%lは、MRF10が備える8本のレジスタファイルW0〜W7の中のいずれか一つのローカルレジスタ用ウィンドウ(Wk locals)を指定するアドレスである。%iは、上記8本のレジスタウィンドウW0〜W7の中のいずれか一つのインレジスタ用ウィンドウ(Wk ins)を指定するアドレスである。また、%oは、上記8本のレジスタウィンドウW0〜W7の中のいずれか一つのアウトレジスタ用ウィンドウ(Wk outs)を指定するアドレスである。各ステートにおいて、ポート割り当てステート215における5つのフィールドの内、2つは空欄となっている。この空欄は、“アドレス指定無し”を表す。%lは、MRF10のローカルレジスタの読み出しポートl0、l1のそれぞれに設けられたマルチプレクサ231、232に選択信号として入力する。%iと%oは、MRF10のインレジスタ/アウトレジスタの読み出しポートio0、io1、io2のそれぞれに設けられたマルチプレクサ241〜243に選択信号として入力する。
【0081】
したがって、例えば、(set、cwp)=(0、2)のポート割り当てステート215がMRF_RA1に設定されることにより、MRF10の読み出しポートl0、io2、io0から、それぞれ、%l、%i、%oで指定されるローカルレジスタ用ウィンドウWk locals、インレジスタ用ウィンドウWk ins、アウトレジスタ用ウィンドウWk outsが出力される。この状態のとき、ウィンドウ切り替え命令がデコードされてcwpが“1”だけインクリメントされ、(set、cwp)=(0、3)に遷移すると、MRF10の読み出しポートl1、io0、io1から、それぞれ、%l、%i、%oで指定されるローカルレジスタ用ウィンドウWk locals、インレジスタ用ウィンドウWk ins、アウトレジスタ用ウィンドウWk outsが出力される。この場合、MRF10の読み出しポートl0、io2からは、それぞれ、(set、cwp)=(0、2)のポート割り当てステート215で指定されたローカルレジスタ用ウィンドウWk Locals、インレジスタ用ウィンドウWk Insが出力される。これにより、cwp=2で指定されるレジスタウィンドウW2を使用する前記ウィンドウ切り替え命令の先行命令と、cwp=3で指定されるレジスタウィンドウW3を使用するウィンドウ切り替え命令の後続命令のアウトオブオーダ実行が可能となる。その後、前記ウィンドウ切り替え命令のコミットが開始されると、(set、cwp)=(0、3)のポート割り当てステート215のみが有効となり、MRF10の読み出しポートl0、io2は閉じられる。これにより、前記ウィンドウ切り替え命令の先行命令の実行が禁止される。これは、上述したように、本実施形態の命令パイプラインはインオーダ完了となっているためである。
【0082】
本実施形態では、MRF10にローカルレジスタの読み出しポートを2つ設け、レジスタウィンドウの切り替えが発生する毎に、これら2つの読み出しポートl0、l1から交互にカレントウィンドウのローカルレジスタを読み出す。また、MRF10においては、インレジスタ/アウトレジスタの読み出しポートを3つ設ける。この場合、切り替わる前のカレントウィンドウのアウトレジスタと切り替わった後のカレントウィンドウのインレジスタは物理的に同じレジスタであるので、これらのレジスタは同じ読み出しポートから読み出すようにして、ウィンドウ切り替え命令が実行される毎に、インレジスタの読み出しポートを、io0→io1→io2→io0→io1とサイクリックに切り替える。本実施形態では、図5に示すような形式で、ポート割り当て制御部テーブル211の24個のエントリにポート割り当てステート215を格納することで、このようなMRF10の前記5つの読み出しポートからのウィンドウデータの読み出し制御を可能にしている
set、cwp制御装置214は、SETレジスタ212とCWPレジスタ213の値設定を制御する。レジスタ制御部210には、命令制御部220からウィンドウ切り替え情報が入力される。この情報は、例えば、デコード対象命令がSAVE命令であるか、または、RESTORE命令であるかを示す情報である。set、cwp制御装置214は、デコード対象命令がSAVE命令であれば、cwpを“1”だけインクリメントする。このインクリメントによりcwpが“8”(レジスタウィンドウ数)になれば、cwpを“0”にリセットし、setを“1”だけインクリメントする。このインクリメントによりsetが“3”になれば、setを“0”にリセットする。
【0083】
{set、cwp制御装置214の処理アルゴリズム}
図7と図8に、それぞれ、デコード対象命令がSAVE命令、RESTORE命令であった場合のset、cwp制御装置214の処理フローを示す。
まず、図7のフローチャートを説明する。尚、図7及び図8に示す演算子%は、a%bという式で使用された場合、aをbで除算した場合の剰余を求めることを意味するものである。
【0084】
set、cwp制御装置214は、命令制御部220から入力されたウィンドウ切り替え情報を調べ、デコード対象命令がSAVE命令であるか否か判断する(S11)。そして、SAVE命令でなければ処理を終了する。一方、ステップS11においてSAVE命令であると判断すると、cwpを“1”だけインクリメントし、続いて、そのインクリメント結果をレジスタウィンドウ数(本実施形態の場合、“8”)で除算し、その剰余を求める。そして、その剰余をcwpに設定し、cwpを更新する(S12)。
【0085】
次に、cwpが“0”であるか判断し(S13)、“0”でなければ処理を終了する。一方、ステップS13でcwpが“0”あると判断すると、setを“1”だけインクリメントし、次に、そのインクリメント結果を“3”で除算する。そして、その剰余をsetに設定して、setを更新し(S14)、処理を終了する。
【0086】
次に、図8のフローチャートを説明する。
set、cwp制御装置214は、命令制御部220から入力されたウィンドウ切り替え情報を調べ、デコード対象命令がRESTORE命令であるか否か判断する(S21)。そして、RESTORE命令でなければ処理を終了する。一方、ステップS21においてそのデクリメント結果をレジスタウィンドウ数(本実施形態の場合、“8”)で除算し、その剰余を求める。そして、その剰余をcwpに設定し、cwpを更新する(S12)。
【0087】
次に、cwpが“7”であるか判断し(S13)、“7”でなければ処理を終了する。一方、ステップS13でcwpが“7”あると判断すると、setを“1”だけデクリメントし、次に、そのデクリメント結果を“3”で除算する。そして、その剰余をsetに設定して、setを更新し(S14)、処理を終了する。
【0088】
setとcwpの初期値は“0”である。上記図7と図8の処理により、cwpの値は、SAVE命令がデコードされる毎に“1”インクリメントされ、RESTORE命令がデコードされる毎に“1”デクリメントされる。cwpの値は、SAVE命令のデコードにより“8”になると“0”にリセットされ、RESTORE命令のデコードにより“−1”になると“7”にセットされる。したがって、cwpの値は、“0”〜“7”の範囲を巡回する。また、setの値は、SAVE命令のデコードによりcwpの値が“8”になると、“1”インクリメントされる。また、setの値は、SAVE命令のデコードにより“3”になると“0”にリセットされる。また、さらに、setの値は、RESTORE命令のデコードによりcwpの値が“−1”になると、“1”デクリメントされる。このようにして、setの値は、SAVE命令とRESTORE命令のデコードに応じて、“0”〜“2”の範囲を巡回する。ここで、再び、ポート割り当て制御部テーブル211の説明に戻る。
【0089】
ポート割り当て制御部テーブル211は、図4のSETレジスタ212の値(set)とCWPレジスタ213の値(cwp)が入力されると、それら2つの値の組み合わせ(set、cwp)に対応するエントリに格納されているポート割り当てステート215(l0、l1、io0、io1、io2)を、図4のMRF_RA1に出力する(図6参照)。
【0090】
{命令制御部の構成}
次に、命令制御部220の構成を説明する。
命令制御部220は、ウィンドウ切り替え命令後続命令の実行タイミング制御機能221(以後、実行タイミング制御機能221と記載)、リネームレジスタ開放制御機能222及びMRF_RA2の制御機能223を備えている。
【0091】
実行タイミング制御機能221は、ウィンドウ切り替え命令の後続命令のデコードを、MRF_RA1が更新され、かつ、MRF10からレジスタファイルの読み出しが可能となるまでストールさせる制御機能である。命令制御部220は、この制御機能を用いて、演算部30が上記ストールを実施するように制御する。この制御の詳細は後述する。
【0092】
リネームレジスタ開放制御機能222は、命令の完了によってリネームレジスタ(ROB31)の資源を解放し、新しくデコードされる命令でその開放された資源を使用可能とさせる制御機能である。命令制御部220は、この制御機能を用いて、演算部30が上記リネームレジスタの資源開放を実行するように制御する。
【0093】
MRF_RA2の制御機能223は、命令の中に含まれるオペランドレジスタの番号を
解釈する機能である。命令制御部220は、レジスタ制御部210を介して、MRF_RA2が前記オペランドレジスタ番号で指定されるレジスタのデータを前記読み出しポート261から選択出力させるように制御する。
【0094】
演算部30は、上述した図3の命令パイプライン機構を備える。また、演算部30は、レジスタリネーミングやアウトオブオーダ実行などを支援するハードウェア機構であるリオーダバッファ(ROB)31も備えている。リオーダバッファ31は、レジスタの最新値や更新タグをインオーダで保持し、アウトオブオーダ命令発行、インオーダ完了及びレジスタリネーミングなどを実行するために利用される。リオーダバッファ31は、該レジスタネーミングを行うためのリネームレジスタを備えている。また、リオーダバッファ31は、上述したようにUpdate Bufferステージにおいて演算結果を一旦保持しておく機能を備えている。
【0095】
[動作]
{第1実施形態}
MRF10から演算部30へのレジスタデータの転送に複数サイクルを要する場合には、新しく切り替わったレジスタウィンドウのレジスタデータを読み出せないタイミングが発生する。このような場合の例を、図9を参照しながら説明する。
【0096】
図9は、SAVE命令前後の実行パイプラインの動作を示す図である。
図9において、IO.FDは、インオーダで実行されるFetchステージ(Fステージ)とIssueステージ(Dステージ)を示す。また、OOO.PBXUは、アウトオブオーダで実行されるDispatchステージ(Pステージ)、Operand Readステージ(B ステージ)、Executeステージ(Xステージ)及びUpdate
Bufferステージ(Uステージ)を示す。また、IO.Wは、インオーダ完了するCommitステージ(Wステージ)を示す(以上、図4参照)。
【0097】
図9は、CWPレジスタ213の値が“3”である命令(以下、cwp=3の命令と記載)の後に、SAVE命令を実行し、次にCWPレジスタ213の値が“4”である命令(以下、cwp=4の命令と記載)を実行するパイプライン動作を示している。
【0098】
演算部30は、上記3個の命令列を命令パイプラインで実行する際、IO.FDまでは、CWP=3の命令、SAVE命令、cwp=4の命令の順にインオーダで実行する。このとき、演算部30がDステージでSAVE命令をデコードすると(図9のbの期間でIssueステージを実行すると)、set、cwp制御装置214によりCWPレジスタ213の値がインクリメントされ、CWPレジスタ213の値は“4”となる。これにより、ポート割り当て制御部テーブル211からMRF_RA1に、cwp=4に対応する新しいポート割り当てステート215が送られる。MRF_RA1に該新しいポート割り当てステート215が設定されると、MRF10の前記5つの読み出しポートから、CWPレジスタ213で指定されるレジスタウィンドウのデータ(cwp=4のレジスタウィンドウデータ)が読み出される。このとき、演算部30がcwp=4のレジスタウィンドウデータを読み出し可能となるまで(図9のbの期間が終了するまで)、演算部30がSAVE命令の後続命令(cwp=4の命令)のデコードを一定サイクル分ストールさせ、その実行が開始されないように制御する。尚、図9の動作の詳細は後述する。
【0099】
図10は、ウィンドウ切り替え命令がデコードされたときにおける、該ウィンドウ切り替え命令の後続命令の実行タイミングの例を示す図である。
サイクル1でウィンドウ切り替え命令が演算部30でデコード(D)され、サイクル2で命令制御部220からレジスタ制御部210にMRF_RA1の変更指示信号が送られる(図10のa)。そして、サイクル3、4で、レジスタ制御部210によりMRF_R
A1が更新される(図10のb)。この場合、図10のbで示す期間は、MRF_RA1の更新により、ウィンドウ切り替え命令の後続命令の実行に必要なレジスタウィンドウのデータをMRF_RA1から読み出すことができない。演算部30は、サイクル5(図10のc)以降に、該レジスタウィンドウのデータをMRF10から読み出し可能となる。したがって、この場合、ウィンドウ切り替え命令のデコードが実行されたサイクル1の次のサイクル2においては、前記後続命令のデコードをストールさせる。したがって、この場合、前記後続命令の実行は1サイクルだけストールする。
【0100】
本実施形態では、MRF10から演算部30へのレジスタのデータの転送に複数サイクルを要する場合、MRF10へのデータ書き込みをトリガーとして、そのデータを演算部30が読み出せないタイミングが発生する。演算部30が前記データを読み出せない場合、実行権を割り当てる他の命令がなければ、命令パイプラインにパイプラインバブルが生じる。本実施形態では、このパイプラインバブルをリネームレジスタ(ROB31)の開放を制御することで抑制する。
【0101】
{第2実施形態}
図11は、真のデータ依存関係にある命令を、命令パイプラインにパイプラインバブルが発生しないように、リネームレジスタ(ROB31)の開放を制御する手法を示す図である。図11おいて、%1はレジスタを示す。
【0102】
演算部30が、図11に示す命令A〜Fの命令列を実行するものとする。命令A〜Fは、真のデータ依存関係がある。すなわち、命令Aはレジスタ%1のデータの書き込み命令であり、レジスタ%1を更新する。命令Aの後続命令である命令B〜Fは、いずれもレジスタ%1のデータの読み出し命令であり、レジスタ%1のデータを使用する。
【0103】
図11は、MRF10のレジスタファイル100からのデータの読み出しが1サイクルでできる実装例である。命令は、図4に示す順序でパイプライン処理され、Pステージでレジスタアドレスの転送、Bステージでレジスタのデータの読み出し、Xステージで演算(命令の実行)、Uステージで演算結果(命令の実行結果)のリネームレジスタ(ROB31)への書き込み、WステージでMRF10へのデータ(前記演算結果)書き込みを行う。
【0104】
前記命令列の実行において、命令Aの実行結果はサイクル4においてリネームレジスタ(ROB31)に格納され、サイクル5においてMRF10に格納される。このため、命令Aの実行結果はサイクル6以降において、MRF10から読み出すことができる。したがって、命令Aの後続命令Bは、先行命令Aの実行結果(a)をサイクル3においてバイパスして使用し、後続命令Cはサイクル4において演算結果レジスタ(b)から読み出して使用する。また、後続命令Dは、先行命令Aの実行結果をサイクル5において前記リネームレジスタ(c)から読み出して使用し、後続命令E、Fは、先行命令Aの実行結果を、それぞれ、サイクル6、7においてMRF10(d)から読み出して使用する。
【0105】
{第3実施形態}
次に、レジスタファイル(MRF10)からのデータの読み出しに複数サイクルを要する場合の制御手法を図12に示す。
【0106】
本発明では、MRF10にデータを書き込んだ後、そのデータを一定時間にわたってMRF10から読み出すことができない場合、その期間中においては、MRF10ではなくリネームレジスタ(ROB31)から読み出すように制御する。図12は、MRF10からのデータ読み出しに2サイクルを要する場合の例を示す。
【0107】
図12に示すように、本実施形態の場合、命令パイプラインにおいてWステージを1サイクルではなく2サイクルにし(W1、W2)、この期間中は、リネームレジスタ(ROB31)に命令Aの実行結果を保持する。この結果、命令Aで更新した結果は、サイクル7以降においてMRF10から読み出すことができる。この場合、命令Aの後続命令B、C、Dにおける命令Aの実行結果の読み出しは、図11の場合と同様にして制御される(a、b)。しかし、後続命令Eについては、データを、サイクル6においてMRF10からではなく前記リネームレジスタ(c)から読み出すように制御する。また、命令Fについては、サイクル7において、先行命令Aの実行結果をMRF10(d)から読み出すように制御する。
【0108】
このように、本実施形態では、MRF10からデータを読み出せる開始タイミングは遅れるが、それに伴う問題を、リネームレジスタ(ROB31)の開放を遅らせることで回避させる。
【0109】
{第4実施形態}
本実施形態は、本発明を、8本のレジスタウィンドウを備えるMRF10について、ポート割り当て制御部テーブル211を用いて、ウィンドウ切り替え前後でのMRF10からのデータ読み出し制御に適用したものである。
【0110】
本実施形態におけるMRF10の読み出しポートからのレジスタ読み出し手法を、図5と図13と図14を参照しながら説明する。
MRF10は、ローカルレジスタ、インレジスタ、アウトレジスタ及びグローバルレジスタを備えるが(図2参照)、グローバルレジスタは全てのレジスタウィンドウで共通であり、ウィンドウ切り替えが発生しても影響が出ないため、以後の説明では省略する。
【0111】
本実施形態のMRF10は、ローカルレジスタのデータを読み出すための2つのローカルレジスタポート(l0、l1)と、インレジスタ/アウトレジスタのデータを読み出すための3つのインレジスタ/アウトレジスタ・ポート(io0、io1、io2)を備えている。
【0112】
1つのCWP(Current Window Pointer)に対して、1つのローカルレジスタポートと2つのインレジスタ/アウトレジスタ・ポートを使用する。このため、残りの1つのローカルレジスタポートと1つのインレジスタ/アウトレジスタ・ポートは使用されない。CWPの値が切り替わると、その新たなCWPの値が指定するレジスタウィンドウのローカルレジスタとアウトレジスタ(インレジスタ)の読み出しのため、それぞれのレジスタに使用していないMRF10の読み出しポートを割り当てるようにする。
【0113】
図5に示すように、24ステートで1周期となるため、この周期で、MRF_RA1を制御する。以降の説明では、CWPで図2のCWPレジスタ213を示し、cwpでCWPレジスタ213の値を示す。
【0114】
今、図12の表Aに示すように、(set、cwp)=(0、2)の状態とする。この場合、レジスタ制御部210は、ローカルレジスタはMRF10のl0ポートから、インレジスタはio2ポートから、アウトレジスタはio0ポートから読み出されるように制御する。また、l1ポート、io1ポートからのレジスタ読み出しは行われないように制御する。
【0115】
この状態で、SAVE命令が実行された場合(図14の(1))、cwpが“1”インクリメントされ、(set、cwp)=(0、3)と遷移する(図13の表B参照)。このSAVE命令のデコード(D)のタイミングでMRF_RA1の内容が変更され、SA
VE命令のデコード(D)終了からコミット(W)開始までは、cwp=2でのローカルレジスタはMRF10のl0ポートから、インレジスタのデータは読み出しポートio2から、アウトレジスタのデータは読み出しポートio1から読み出される。また、cwp=3でのローカルレジスタのデータは読み出しポートl1から、インレジスタのデータは読み出しポートio0から、アウトレジスタのデータは読み出しポートio1から読み出される(以上、図13の表B参照)。
【0116】
さらに、SAVE命令がコミット(W)すると、MRF10の読み出しポートl0、読み出しポートio2からのレジスタ読み出しは行われない。これは、コミットを図4で示すようにインオーダで実施するため、プログラムでSAVE命令より前にあるcwp=2の命令が、これ以降、レジスタ参照を行わないためである。本発明は、これに限定されず、状況に応じて、引き続き読み出すようにすることもできる。
【0117】
その後、RESTORE命令が実行されると、cwpが“1”デクリメントされ、(set、cwp)=(0、2)の状態に遷移する。このRESTORE命令のデコード(D)のタイミングでMRF_RA1の内容が変更され、このRESTORE命令が完了するまでの間(図13の表D)、cwp=3でのローカルレジスタのデータはMRF10の読み出しポートl1から、インレジスタのデータはMRF10の読み出しポートIO0から、アウトレジスタのデータはMRF10の読み出しポートio1から読み出される。また、cwp=2でのローカルレジスタのデータはMRF10の読み出しポートl0から、インレジスタのデータはMRF10の読み出しポートio2から、アウトレジスタのデータはMRF10の読み出しポートio0から読み出される。
【0118】
以上のようにして、レジスタ制御部210によりMRF_RA1を制御し、プログラムでウィンドウ切り替え命令を挟んで存在する複数命令のアウトオブオーダ実行を可能にする(図9参照)。尚、図9において、OOO.PBXUは1本の線で示されているが、“cwp=3の命令”と“cwp=4の命令”は複数の命令を表しており、実行開始タイミングも命令数と同数存在する。図9の区間cでは、cwp=3のOOO.PBXUとcwp=4のOOO.PBXUが重なっており、cwp=4の命令がcwp=3の命令よりも早いタイミングで実行開始(アウトオブオーダ実行)が起こりうることを示している。
【実施例】
【0119】
図15は、図2の実施形態を適用した演算処理装置の構成例を示す図である。図15において、図2の構成要素と同一の構成要素には同じ符号並びに名称を付与している。
図15に示す演算処理装置300は、レジスタリネーミングにリオーダバッファ方式を採用している。このレジスタリネーミングはROB(リオーダバッファ)31を利用して行われる。演算処理装置300の固定小数点演算のパイプラインとアドレス演算のパイプラインは、共に、プライオリティ取得(P−stage)、レジスタ読み出し(B−stage)、演算(X−stage)の3ステージで処理されるように構成されている。
【0120】
固定小数点演算のパイプラインは2本ある。一方のパイプラインは、ALU(Arithmetic Logic Unit)、SHIFT演算器(SFT)、乗算器(MPY)、除算器(DVD)、VIS(Virtual Instruction set)演算器を備え、もう一方のパイプラインは、ALUとSHIFT演算器を備える。また、アドレス演算のパイプラインは、固定小数点のパイプラインとは別に2本ある。
【0121】
MRF10は、前述したように、8本のレジスタウィンドウを備えている。プログラムは、カレントウィンドウ(前記cwpで指定されるレジスタウィンドウ)に属するレジスタ上で作業を行い、ウィンドウ切り替えは、主に、サブルーチンの呼び出し、戻りのときに、ウィンドウ切り替え命令で行われる。カレントウィンドウのデータを、MRF10か
ら予め選択しておき、演算を実行する際には、ソースデータ(ソースオペランド)を1サイクルで演算器に供給することを可能にしている。さらに、ウィンドウ切り替え命令のデコードを契機に、切り替え先のウィンドウ(レジスタウィンドウ)のデータも、MRF10から予め選択するような制御を行っており、サブルーチン呼び出しの場合でも、命令が滞ることはない。
【0122】
上記演算処理装置300の構成を、より詳細に説明する。
MRF301は、図2に詳細に示された8本のレジスタウィンドウ(8−Window)をブロックで示したものである。また、マルチプレクサ303は、図2の5個のマルチプレクサ231、232、241〜243を統合して示したものであり、MRF_RA1によって制御される。ROB(リオーダバッファ)31は、リネームレジスタを備え、アウトオブオーダで実行された演算結果を、インオーダでコミットされるまで保持する。ROB31の領域(エントリ)は、デコード時において確保され、コミット時に開放される。該エントリには、例えば、命令が書き込むレジスタのアドレスと、該レジスタの値の組が格納される。
【0123】
図15に示す演算処理装置300は、MRF_RA2によって制御されるマルチプレクサ261の後段に4個のマルチプレクサ311〜314を備えている。これらのマルチプレクサ311〜314には、マルチプレクサ261の出力、1次データキャッシュ(不図示)のデータを保持するレジスタ320の出力及び演算器の演算結果を保持するレジスタ361、362の出力が入力する。前記マルチプレクサ311〜314は、命令制御部220から入力される制御信号に従って、上記複数の入力データの中から一つを選択し、それを、それぞれの後段に設けられたレジスタ321〜324に出力する。すなわち、マルチプレクサ311の出力はレジスタ321に、マルチプレクサ312の出力はレジスタ322に、マルチプレクサ313の出力はレジスタ323に、マルチプレクサ314の出力はレジスタ324に保持される。
【0124】
上記レジスタ321に保持されたデータはマルチプレクサ341に出力され、上記レジスタ322に保持されたデータはマルチプレクサ342に出力される。また、上記レジスタ323に保持されたデータはマルチプレクサ343に出力され、上記レジスタ324に保持されたデータはマルチプレクサ344に出力される。上記マルチプレクサ341〜344には、前記1次データキャッシュのデータもレジスタ320から入力する。上記レジスタ341、342には、さらに、レジスタ361、362に保持されている演算結果も入力する。
【0125】
前記マルチプレクサ341は、前記3つの入力データの中から1つを選択し、それをALU/SFT/VIS演算器331、乗算器(MPY)332または除算器(DVD)333にオペランドデータとして出力する。前記マルチプレクサ342は、前記3つの入力データの中から1つを選択し、それをALU/SFT演算器334にオペランドデータとして出力する。前記マルチプレクサ343は、前記2つの入力データのいずれか一方を選択し、それをアドレス生成器(AGEN)335に出力する。前記マルチプレクサ344は、前記2つの入力データのいずれか一方を選択し、それをアドレス生成器(AGEN)336に出力する。
【0126】
前記ALU/SFT/VIS演算器331、前記乗算器332及び前記除算器333は、演算結果をマルチプレクサ351に出力する。前記ALU/SFT演算器334は、演算結果をマルチプレクサ352に出力する。前記アドレス生成器335は、演算結果(アドレス)をマルチプレクサ353に出力する。前記アドレス生成器336は、演算結果(アドレス)をマルチプレクサ354に出力する。
【0127】
前記マルチプレクサ351は、前記ALU/SFT/VIS演算器331、前記乗算器332及び前記除算器333の演算結果を入力し、それらの演算結果の中から一つを選択し、その選択した演算結果を前記レジスタ361に出力する。前記マルチプレクサ352は、前記ALU/SFT演算器332の演算結果を入力し、それを前記レジスタ362に出力する。前記マルチプレクサ353は、前記アドレス生成器335の演算結果を入力し、それをレジスタ363に出力する。前記マルチプレクサ354は、前記アドレス生成器336の演算結果を入力し、それをレジスタ364に出力する。
【0128】
前記レジスタ361は、前記マルチプレクサ351から入力した演算結果を、前記ROB31、前記マルチプレクサ311〜314及び前記マルチプレクサ341、342に出力する。前記レジスタ362は、前記マルチプレクサ352から入力した演算結果を、前記レジスタ361と同様に、前記ROB31、前記マルチプレクサ311〜314及び前記マルチプレクサ341、342に出力する。
【0129】
前記レジスタ363は、前記マルチプレクサ353から入力した演算結果を、前記1次データキャッシュにアドレス(Address)として出力する。前記レジスタ364は、前記マルチプレクサ354から入力した演算結果を、前記1次データキャッシュにアドレス(Address)として出力する。
【0130】
前記マルチプレクサ341、342の選択出力データは、マルチプレクサ371に出力される。該マルチプレクサ371は、その選択出力データをレジスタ381に出力する。レジスタ381は、前記選択出力データを保持し、それを前記1次データキャッシュにデータ(Data)として出力する。
【0131】
ところで、前記マルチプレクサ311、312、313、314と演算器331〜333、演算器334、演算器335、演算器336との間に設けられたレジスタ321、322、323、324は、図4に示す前記命令パイプラインのBステージとXステージを区切るために設けられている。
【0132】
[本発明が適用可能なレジスタファイルの他の構成例]
本発明が適用可能なレジスタファイルは、MRF10のようなオーバーラップウィンドウ方式のレジスタファイルに限定されない。例えば、図16に示すようなフラット構成の巨大なレジスタファイルにも適用できる。
【0133】
図16に示すレジスタファイル400は、(m+1)個のウィンドウ0〜mが連続して配置された構成となっている。この場合、mは所定値以上の3の倍数である。レジスタファイル400を、3個のレジスタ毎に分割し、各分割領域をウィンドウ(レジスタウィンドウ)とする。すなわち、レジスタ0〜2をウィンドウ0とし、レジスタ3〜5をウィンドウ1とする。同様にして、ウィンドウ2〜nを設定する。ここで、ウィンドウnは、レジスタm−2〜mから構成される。
【0134】
このように、フラットな構成のレジスタファイル400を複数の連続するウィンドウに分割することにより、上記実施形態の演算処理装置1において、レジスタファイル400をMRF10の代替手段として利用することができる。
【0135】
以上、述べたように本実施形態の演算処理装置1は、従来の前記演算処理装置3000や前記情報処理装置4000のようにMRF(前記演算処理装置3000の場合)やCRBとCWR(前記情報処理装置4000の場合)を設けることなく、MRF10内のオーバーラップウィンドウ方式のレジスタファイル100から演算部30に高速にオペランドデータを供給できる。また、本実施形態は、この高速なレジスタファイル100からのデ
ータ読み出しを、MRF10内部にMRF_RA1とMRF_RA2と読み出しポートio0〜io2、l0、l1を設け、MRF10外部に、MRF10からレジスタのデータを読み出すための制御回路(レジスタ制御部210と命令制御部220)を設けることにより実現している。
【0136】
前記レジスタ制御部210は、ポート割り当て制御部テーブル211、SETレジスタ212、CWPレジスタ213及びset、cwp制御装置214から構成されるが、CWPレジスタ213は従来の前記演算処理装置3000や前記情報処理装置4000(以下、まとめて、従来の演算処理装置と記載)も備えていたもの(CWP)であり、MRF_RA1、MRF_RA2、ポート割り当て制御部テーブル211及びSETレジスタ212は、前記従来の演算処理装置が備えている記憶手段(WRFまたはCWRとCRB)に比べ、より小規模な回路で構築できる。
【0137】
また、set、cwp制御装置214は、組み合わせ回路で実現でき、回路規模も小さくできる。また、命令制御部220が備えるウィンドウ切り替え命令後続命令の実行タイミング制御機能221、リネームレジスタ開放制御機能222、MRF_RA2の制御機能223も小規模な組み合わせ回路で実現できる。また、MRF10に設ける読み出しポートも5本(io0〜io2、l0、l1)と小数である。したがって、装置全体で考えた場合、本実施形態の演算処理装置1は、前記従来の演算処理装置よりも回路規模を小さくできる。
【0138】
また、本実施形態の演算処理装置1は、前記従来の演算処理装置よりも回路規模が小さくなり、CRBとCWR間のレジスタウィンドウのデータ転送に要する消費電力も不要となるため、消費電力も前記従来の演算処理装置よりも低い。したがって、本実施形態の演算処理装置1は、前記従来の演算処理装置と同等の機能(ウィンドウ切り替え命令の後続命令のアウトオブオーダ実行機能など)を備えながら、回路規模や消費電力の点で優れている。また、本実施形態は、前記従来の演算処理装置よりも、ハードウェアコストが低い。
【0139】
尚、本発明は、上述した実施形態に限定されるものではなく、本発明の趣旨を逸脱しない範囲内で種々に変形して実施することができる。
したがって、本発明が適用可能なレジスタファイルは上記したレジスタファイルに限定されるものではない。例えば、グローバルレジスタ用のウィンドウを複数本備えるオーバーラップウィンドウ方式のレジスタファイルにも本発明を適用できる。また、ウィンドウ切り替え命令が実行する毎に、カレントウィンドウポインタ(CWP)が指定するカレントウィンドウのアドレスがシリアルではなくランダムに更新される構成のレジスタファイルにも、本発明は適用可能である。
【0140】
(付記1)
レジスタウィンドウを複数備えるレジスタファイルと、
前記レジスタファイルに保持されているデータをオペランドとする命令を実行する演算手段と、
前記レジスタファイルが備える複数のレジスタウィンドウの中から、カレントウィンドウとなるレジスタウィンドウを指定するアドレス情報を保持するカレントウィンドウポインタ手段と、
前記カレントウィンドウの切り替えを指示するウィンドウ切り替え命令がデコードされたとき、前記カレントウィンドウポインタ手段が保持する前記アドレス情報を更新し、前記ウィンドウ切り替え命令のデコードが開始されてからコミットが開始される直前までの間は、前記演算手段が、前記更新前のアドレス情報が指定する第1のレジスタウィンドウのデータと前記更新後のアドレス情報が指定する第2のレジスタウィンドウのデータを、
前記レジスタファイルから読み出しできるように制御する制御手段と、
を備えたことを特徴とする演算処理装置。
(付記2)
付記1記載の演算処理装置であって、
前記制御手段は、前記ウィンドウ切り替え命令のコミットが開始されたとき、前記演算手段が、前記更新後のアドレス情報が指定する前記第2のレジスタウィンドウのデータのみを、前記レジスタファイルから読み出しできるように制御することを特徴とする。
(付記3)
付記1記載の演算処理装置であって、
前記制御手段は、
前記ウィンドウ切り替え命令のデコード開始からコミット開始の直前まで、前記第1のレジスタウィンドウのデータと前記第2のレジスタウィンドウのデータを前記レジスタファイルから読み出すウィンドウデータ読み出し手段と、
前記ウィンドウ切り替え命令のデコード開始からコミット開始の直前まで、該ウィンドウデータ読み出し手段によって読み出された前記第1のレジスタウィンドウと前記第2のレジスタウィンドウに含まれる複数のレジスタのデータの中から、前記演算手段が必要とするレジスタのデータを選択して出力するレジスタデータ選択出力手段と、
を備えることを特徴とする。
(付記4)
付記3記載の演算処理装置であって、
前記ウィンドウデータ読み出し手段は、
前記ウィンドウ切り替え命令のコミットが開始されると、前記第2のジスタウィンドウに含まれるレジスタのデータのみを前記レジスタファイルから読み出すことを特徴とする。
(付記5)
付記3記載の演算処理装置であって、
前記レジスタファイルは、前記第1のレジスタウィンドウのデータと前記第2のレジスタウィンドウのデータを出力する複数の読み出しポートを備え、
前記ウィンドウデータ読み出し手段は、前記ウィンドウ切り替え命令のデコード開始からコミット開始の直前まで、前記前記第1のレジスタウィンドウのデータと前記第2のレジスタウィンドウのデータを前記複数の読み出しポートから出力し、
前記レジスタデータ選択出力手段は、前記ウィンドウ切り替え命令のデコード開始からコミット開始の直前まで、前記複数の読み出しポートから出力される前記第1のレジスタウィンドウのデータと前記第2のレジスタデータウィンドウに含まれる複数のレジスタのデータの中から、前記演算手段が必要とするレジスタのデータのみを選択して出力することを特徴とする。
(付記6)
付記5記載の演算処理装置であって、
前記ウィンドウデータ読み出し手段は、前記ウィンドウ切り替え命令のコミットが開始されると、前記第2のジスタウィンドウのデータのみを前記複数のポートのいずれかのポートから出力することを特徴とする。
(付記7)
付記5記載の演算処理装置であって、
前記複数の読み出しポートの各ポートは、前記第1のレジスタウィンドウのデータ出力と前記第2のレジスタウィンドウのデータ出力に兼用されることを特徴とする。
(付記8)
付記7記載の演算処理装置であって、
前記複数の読み出しポートの各ポートは、前記ウィンドウ切り替え命令が実行される毎に、前記第1のレジスタウィンドウのデータと前記第2のレジスタウィンドウのデータを交互に切り替え出力することを特徴とする。
(付記9)
付記5記載の演算処理装置であって、
前記レジスタウィンドウは、親ルーチンと子ルーチンとの間で引き数の授受に使用されるレジスタを備える第1のウィンドウと、個々のルーチンが個別に使用するレジスタを備える第2のウィンドウと、全てのルーチンで共有されるレジスタを備える第3のウィンドウを備え、
前記複数の読み出しポートは、前記第1のウィンドウのデータを出力する第1の読み出しポートと、前記第2のウィンドウのデータを出力する第2の読み出しポートを含み、前記第1の読み出しポートの本数と前記第2の読み出しポートの本数は、共に、複数であることを特徴とする。
(付記10)
付記9記載の演算処理装置であって、
前記第1のウィンドウは、子ルーチンに渡す引き数を格納する第4のウィンドウと親ルーチンから受け取る引き数を格納する第5のウィンドウとルーチンが専用に使用する第6のウィンドウを備え、前記レジスタウィンドウ内において、前記第4のウィンドウと前記第5のウィンドウは、それぞれ、一方の端と他方の端に配置されることを特徴とする。
(付記11)
付記10記載の演算処理装置であって、
前記レジスタファイルの複数のレジスタウィンドウは論理的に連結されており、互いに隣接する一方のレジスタウィンドウの前記第4のウィンドウと他方のレジスタウィンドウの第5のウィンドウは共有されることを特徴とする。
(付記12)
付記11記載の演算処理装置であって、
前記レジスタファイルの複数のレジスタウィンドウは論理的にリング状に連結されていることを特徴とする。
(付記13)
付記12記載の演算処理装置であって、
前記複数の第1の読み出しポートは、前記第4のウィンドウのデータと前記第5のデータを出力する第1のグループと、前記第6のウィンドウのデータを出力する第2のグループに分けられていることを特徴とする。
(付記14)
付記13記載の演算処理装置であって、
前記第1のグループに属する前記第1の読み出しポートの本数は前記第4のウィンドウと前記第5のウィンドウの総数よりも1つ大きな数であり、前記第2のグループに属する前記第2の読み出しポートの本数は前記第5のウィンドウの個数よりも1つ大きな数であることを特徴とする。
(付記15)
付記11乃至14のいずれか1項に記載の演算処理装置であって、
前記ウィンドウデータ読み出し手段は、前記ウィンドウ切り替え命令が実行される毎に、前記第4乃至第6の各ウィンドウのデータが出力される前記第1の読み出しポートをサイクリックに切り替えることを特徴とする。
(付記16)
付記9乃至15のいずれか1項に記載の演算処理装置であって、
前記ウィンドウデータ読み出し手段は、ウィンドウ切り替え命令のデコード開始からコミットが完了するまでの間は、前記複数の第1の読み出しポートを介して前記第1のレジスタウィンドウと前記第2のレジスタウィンドウに含まれる前記第1のウィンドウのデータを出力し、前記複数の第2の読み出しポートを介して前記第1のレジスタウィンドウと前記第2のレジスタウィンドウに含まれる前記第2のウィンドウのデータを出力することを特徴とする。
(付記17)
付記16記載の演算処理装置であって、
前記ウィンドウデータ読み出し手段は、ウィンドウ切り替え命令のデコード開始からコミットが完了するまでの間は、全ての前記第1の読み出しポートと全ての前記第2の読み出しポートを介して前記データ出力を行うことを特徴とする。
(付記18)
付記16または17記載の演算処理装置であって、
前記ウィンドウデータ読み出し手段は、前記ウィンドウ切り替え命令のコミットが開始されると、前記第1のレジスタウィンドウに含まれる第1のウィンドウのデータのみを前記複数の第1の読み出しポートの一部のポートから出力し、前記第1のレジスタウィンドウに含まれる第2のウィンドウのデータのみを前記複数の第2の読み出しポートの一部のポートから出力することを特徴とする。
(付記19)
付記18記載の演算処理装置であって、
前記ウィンドウデータ読み出し手段は、前記ウィンドウ切り替え命令の実行が開始される毎に、前記第1のレジスタウィンドウのデータを出力する前記第1の読み出しポートと、前記第2のレジスタウィンドウのデータを出力する前記第2の読み出しポートを切り替えることを特徴とする。
(付記20)
付記9乃至19のいずれか1項に記載の演算処理装置であって、
前記第1の読み出しポートと前記第2の読み出しポートには、それぞれ、前記第1のウィンドウのデータと前記第2のウィンドウのデータが入力されるマルチプレクサが設けられており、
前記ウィンドウデータ読み出し手段は、前記第1の読み出しポートと前記第2の読み出しポートの各ポートに設けられたマルチプレクサを制御して、前記第1のレジスタウィンドウと前記第2のレジスタウィンドウに含まれる前記第1のウィンドウのデータと前記第2のウィンドウのデータを該マルチプレクサから選択出力させ、
前記レジスタデータ選択出力手段は、前記マルチプレクサから出力される前記第1のウィンドウのデータと前記第2のウィンドウのデータの中から前記演算手段が必要とするレジスタのデータを選択して出力することを特徴とする。
(付記21)
付記3乃至20のいずれか1項に記載の演算処理装置であって
前記レジスタデータ選択出力手段は、さらに、前記レジスタファイルから前記演算手段が必要とするデータを読み出して、そのデータを出力させることを特徴とする。
(付記22)
付記3記載の演算処理装置であって、
前記制御手段は、さらに、
ウィンドウ切り替え命令が実行される度に、前記カレントウィンドウがアドレス順に切り替わってサイクリックに使用されるように、前記カレントウィンドウポインタ手段が保持するアドレス情報を更新するカレントウィンドウポインタ制御手段と、
前記サイクリックに切り替わるアドレス情報の全てのステートに関するステート情報を格納する記憶手段と、
前記カレントウィンドウポインタ手段が保持するアドレス情報が更新されたとき、更新後のアドレス情報に対応するステート情報を前記記憶手段から読み出し、そのステート情報を前記ウィンドウデータ読み出し手段に出力するステート情報出力手段と、
を備えることを特徴とする。
(付記23)
付記22記載の演算処理装置であって、
前記記憶手段に記憶されるステート情報は、何回目のサイクリックであるかを示すサイクリック情報とカレントウィンドウのアドレス情報の組であることを特徴とする。
(付記24)
付記1記載の演算処理装置であって、さらに、
前記ウィンドウ切り替え命令のデコード後に、前記ウィンドウ切り替え命令の後続命令を一定サイクルだけストールさせるパイプライン制御手段を、
備えることを特徴とする。
(付記25)
付記1記載の演算処理装置であって、さらに、
レジスタリネーミングを行うリネームレジスタ手段と、
第1の命令と、該第1の命令の後に実行される後続命令が真のデータ依存関係にあるとき、前記第1の命令の実行結果を前記レジスタファイルから読み出し可能となるまで、前記実行結果を前記リネームレジスタ手段が保持するように制御するリネームレジスタ制御手段と、
を備えることを特徴とする。
(付記26)
付記25記載の演算処理装置であって、
前記リネームレジスタ制御手段は、前記第1の命令の実行結果を前記リネームレジスタ手段に格納してから前記レジスタファイルから読み出すまでに複数サイクルを要する場合、
前記実行結果を前記レジスタファイルから読み出し可能になるまで、前記実行結果を前記リネームレジスタ手段が保持するように制御することを特徴とする。
(付記27)
付記26記載の演算処理装置であって、
パイプラインのコミットステージを伸ばすことを特徴とする。
(付記28)
付記25または26記載の演算処理装置であって、
前記第1の命令の直後の第1の後続命令は、前記第1の命令の演算結果をバイパスして使用することを特徴とする。
(付記29)
付記25または26記載の演算処理装置であって、
前記第1の後続命令の次の命令である第2の後続命令は、前記第1の命令の演算結果を演算結果レジスタから読み出して使用することを特徴とする。
(付記30)
付記25または26記載の演算処理装置であって、
前記第2の後続命令の次の命令である第3の後続命令は、前記第1の命令の演算結果をリネームレジスタから読み出して使用することを特徴とする。
(付記31)
付記25記載の演算処理装置であって、
前記第1の命令から数えて後ろから4番目に位置する第4の後続命令は、前記第1の命令の演算結果をリネームレジスタから読み出して使用することを特徴とする。
(付記32)
付記1記載の演算処理装置であって、
前記レジスタファイルは、論理的にリング状なレジスタウィンドウを備えることを特徴とする。
(付記33)
付記32記載の演算処理装置であって、
前記レジスタファイルの互いに隣接する2つのレジスタウィンドウの一部のウィンドウは共有されることを特徴とする。
(付記34)
付記32記載の演算処理装置であって、
前記レジスタウィンドウは、親ルーチンと子ルーチンとの間で引き数の授受に使用されるレジスタを備える第1のウィンドウと、個々のルーチンが個別に使用するレジスタを備
える第2のウィンドウと、全てのルーチンで共有されるレジスタを備える第3のウィンドウを備えることを特徴とする。
(付記35)
付記34記載の演算処理装置であって、
前記第1のウィンドウは、子ルーチンに渡す引き数を格納する第4のウィンドウと親ルーチンから受け取る引き数を格納する第5のウィンドウとルーチンが専用に使用する第6のウィンドウを備え、前記レジスタウィンドウ内において、前記第4のウィンドウと前記第5のウィンドウは、それぞれ、一方の端と他方の端に配置されることを特徴とする。
(付記36)
付記35記載の演算処理装置であって、
互いに隣接する一方のレジスタウィンドウの前記第4のウィンドウと他方のレジスタウィンドウの第5のウィンドウは共有されることを特徴とする。
【図面の簡単な説明】
【0141】
【図1】本発明の実施形態である演算処理装置の全体構成図である。
【図2】図1の本実施形態における演算処理装置の詳細な構成を示す図である。
【図3】(a)はMRF_RA1の構成例を示す図、(b)はMRF_RA2の構成例を示す図である。
【図4】本実施形態の演算処理装置における演算部の命令パイプラインを示す図である。
【図5】ポート割り当て制御部テーブルの構成例を示す図である。
【図6】ポート割り当て制御部テーブルからのポート割り当てステートの読み出し方法を説明する図である。
【図7】SAVE命令実行時のcwp、setの更新アルゴリズムを示すフローチャートである。
【図8】RESTORE命令実行時のcwp、setの更新アルゴリズムを示すフローチャートである。
【図9】SAVE命令前後の実行パイプラインの動作を示す図である。
【図10】ウィンドウ切り替え命令のデコード時の後続命令の実行タイミングの例を示す図である。
【図11】真のデータ依存関係にある命令を、命令パイプラインにバブル(パイプラインバブル)が発生しないように、リネームレジスタ(ROB31)の開放を制御する手法を示す図である。
【図12】レジスタファイル(MRF)からのデータの読み出しに複数サイクルを要する場合の制御手法を示す図である。
【図13】ポート割り当て制御部テーブルの活用例を示す図(その1)である。
【図14】ポート割り当て制御部テーブルの活用例を示す図(その2)である。
【図15】図2の実施形態を整数演算ユニットに適用した構成例を示す図である。
【図16】本発明が適用可能な他のレジスタファイルの構成例を示す図である。
【図17】レジスタウィンドウ方式のレジスタファイルの構成例を示す図である。
【図18】従来のレジスタウィンドウ方式のレジスタファイルを備える演算処理装置の構成を示す図(その1)である。
【図19】従来のレジスタウィンドウ方式のレジスタファイルを備える演算処理装置の構成を示す図(その2)である。
【図20】従来のレジスタウィンドウ方式のレジスタファイルを備える情報処理装置の構成を示す図である。
【符号の説明】
【0142】
1 演算処理装置
10 MRF
100 レジスタファイル
231、232、241〜243、261、271 マルチプレクサ
251 inレジスタ/outレジスタ(インレジスタ/アウトレジスタ)用ウィンドウ252 localレジスタ(ローカルレジスタ)用ウィンドウ
253 globalレジスタ(グローバルレジスタ)用ウィンドウ
io0〜io2 インレジスタ/アウトレジスタ・ウィンドウの読み出しポート
l0、l1 ローカルレジスタウィンドの読み出しポート
MRF_RA1、MRF_RA2 レジスタ
20 制御部
210 レジスタ制御部
211 ポート割り当て制御部テーブル
215 ポート割り当てステート
212 SETレジスタ
213 CWPレジスタ
214 set、cwp制御装置
220 命令制御部
221 ウィンドウ切り替え命令の後続命令の実行タイミング制御機能
222 リネームレジスタ開放制御機能
223 MRF_RA2の制御機能
30 演算部30
31 ROB(リオーダバッファ)
301 MRF
303、311〜314、341〜344、351〜354、371 マルチプレクサ
320〜324、361〜364、381 レジスタ
331 ALU/SFT/VIS演算器
332 乗算器(MPY)
333 除算器(DVD)
335、336 アドレス生成器(AGEN)
【特許請求の範囲】
【請求項1】
レジスタウィンドウを複数備えるレジスタファイルと、
前記レジスタファイルに保持されているデータをオペランドとする命令を実行する演算手段と、
前記レジスタファイルが備える複数のレジスタウィンドウの中から、カレントウィンドウとなるレジスタウィンドウを指定するアドレス情報を保持するカレントウィンドウポインタ手段と、
前記カレントウィンドウの切り替えを指示するウィンドウ切り替え命令がデコードされたとき、前記カレントウィンドウポインタ手段が保持する前記アドレス情報を更新し、前記ウィンドウ切り替え命令のデコードが開始されてからコミットが開始される直前までの間は、前記演算手段が、前記更新前のアドレス情報が指定する第1のレジスタウィンドウのデータと前記更新後のアドレス情報が指定する第2のレジスタウィンドウのデータを、前記レジスタファイルから読み出しできるように制御する制御手段と、
を備えたことを特徴とする演算処理装置。
【請求項2】
請求項1記載の演算処理装置であって、
前記制御手段は、前記ウィンドウ切り替え命令のコミットが開始されたとき、前記演算手段が、前記更新後のアドレス情報が指定する前記第2のレジスタウィンドウのデータのみを、前記レジスタファイルから読み出しできるように制御することを特徴とする。
【請求項3】
請求項1記載の演算処理装置であって、
前記制御手段は、
前記ウィンドウ切り替え命令のデコード開始からコミット開始の直前まで、前記第1のレジスタウィンドウのデータと前記第2のレジスタウィンドウのデータを前記レジスタファイルから読み出すウィンドウデータ読み出し手段と、
前記ウィンドウ切り替え命令のデコード開始からコミット開始の直前まで、該ウィンドウデータ読み出し手段によって読み出された前記第1のレジスタウィンドウと前記第2のレジスタウィンドウに含まれる複数のレジスタのデータの中から、前記演算手段が必要とするレジスタのデータを選択して出力するレジスタデータ選択出力手段と、
を備えることを特徴とする。
【請求項4】
請求項3記載の演算処理装置であって、
前記ウィンドウデータ読み出し手段は、
前記ウィンドウ切り替え命令のコミットが開始されると、前記第2のジスタウィンドウに含まれるレジスタのデータのみを前記レジスタファイルから読み出すことを特徴とする。
【請求項5】
請求項3記載の演算処理装置であって、
前記レジスタファイルは、前記第1のレジスタウィンドウのデータと前記第2のレジスタウィンドウのデータを出力する複数の読み出しポートを備え、
前記ウィンドウデータ読み出し手段は、前記ウィンドウ切り替え命令のデコード開始からコミット開始の直前まで、前記前記第1のレジスタウィンドウのデータと前記第2のレジスタウィンドウのデータを前記複数の読み出しポートから出力し、
前記レジスタデータ選択出力手段は、前記ウィンドウ切り替え命令のデコード開始からコミット開始の直前まで、前記複数の読み出しポートから出力される前記第1のレジスタウィンドウのデータと前記第2のレジスタデータウィンドウに含まれる複数のレジスタのデータの中から、前記演算手段が必要とするレジスタのデータのみを選択して出力することを特徴とする。
【請求項6】
請求項5記載の演算処理装置であって、
前記ウィンドウデータ読み出し手段は、前記ウィンドウ切り替え命令のコミットが開始されると、前記第2のジスタウィンドウのデータのみを前記複数のポートのいずれかのポートから出力することを特徴とする。
【請求項7】
請求項5記載の演算処理装置であって、
前記複数の読み出しポートの各ポートは、前記第1のレジスタウィンドウのデータ出力と前記第2のレジスタウィンドウのデータ出力に兼用されることを特徴とする。
【請求項8】
請求項7記載の演算処理装置であって、
前記複数の読み出しポートの各ポートは、前記ウィンドウ切り替え命令が実行される毎に、前記第1のレジスタウィンドウのデータと前記第2のレジスタウィンドウのデータを交互に切り替え出力することを特徴とする。
【請求項9】
請求項5記載の演算処理装置であって、
前記レジスタウィンドウは、親ルーチンと子ルーチンとの間で引き数の授受に使用されるレジスタを備える第1のウィンドウと、個々のルーチンが個別に使用するレジスタを備える第2のウィンドウと、全てのルーチンで共有されるレジスタを備える第3のウィンドウを備え、
前記複数の読み出しポートは、前記第1のウィンドウのデータを出力する第1の読み出しポートと、前記第2のウィンドウのデータを出力する第2の読み出しポートを含み、前記第1の読み出しポートの本数と前記第2の読み出しポートの本数は、共に、複数であることを特徴とする。
【請求項10】
請求項9記載の演算処理装置であって、
前記ウィンドウデータ読み出し手段は、ウィンドウ切り替え命令のデコード開始からコミットが完了するまでの間は、前記複数の第1の読み出しポートを介して前記第1のレジスタウィンドウと前記第2のレジスタウィンドウに含まれる前記第1のウィンドウのデータを出力し、前記複数の第2の読み出しポートを介して前記第1のレジスタウィンドウと前記第2のレジスタウィンドウに含まれる前記第2のウィンドウのデータを出力することを特徴とする。
【請求項11】
請求項10記載の演算処理装置であって、
前記ウィンドウデータ読み出し手段は、ウィンドウ切り替え命令のデコード開始からコミットが完了するまでの間は、全ての前記第1の読み出しポートと全ての前記第2の読み出しポートを介して前記データ出力を行うことを特徴とする。
【請求項12】
請求項10または11記載の演算処理装置であって、
前記ウィンドウデータ読み出し手段は、前記ウィンドウ切り替え命令のコミットが開始されると、前記第1のレジスタウィンドウに含まれる第1のウィンドウのデータのみを前記複数の第1の読み出しポートの一部のポートから出力し、前記第1のレジスタウィンドウに含まれる第2のウィンドウのデータのみを前記複数の第2の読み出しポートの一部のポートから出力することを特徴とする。
【請求項13】
請求項12記載の演算処理装置であって、
前記ウィンドウデータ読み出し手段は、前記ウィンドウ切り替え命令の実行が開始される毎に、前記第1のレジスタウィンドウのデータを出力する前記第1の読み出しポートと、前記第2のレジスタウィンドウのデータを出力する前記第2の読み出しポートを切り替えることを特徴とする。
【請求項14】
請求項9乃至13のいずれか1項に記載の演算処理装置であって、
前記第1の読み出しポートと前記第2の読み出しポートには、それぞれ、前記第1のウィンドウのデータと前記第2のウィンドウのデータが入力されるマルチプレクサが設けられており、
前記ウィンドウデータ読み出し手段は、前記第1の読み出しポートと前記第2の読み出しポートの各ポートに設けられたマルチプレクサを制御して、前記第1のレジスタウィンドウと前記第2のレジスタウィンドウに含まれる前記第1のウィンドウのデータと前記第2のウィンドウのデータを該マルチプレクサから選択出力させ、
前記レジスタデータ選択出力手段は、前記マルチプレクサから出力される前記第1のウィンドウのデータと前記第2のウィンドウのデータの中から前記演算手段が必要とするレジスタのデータを選択して出力することを特徴とする。
【請求項15】
請求項3乃至14のいずれか1項に記載の演算処理装置であって
前記レジスタデータ選択出力手段は、さらに、前記レジスタファイルから前記演算手段が必要とするデータを読み出して、そのデータを出力させることを特徴とする。
【請求項16】
請求項3記載の演算処理装置であって、
前記制御手段は、さらに、
ウィンドウ切り替え命令が実行される度に、前記カレントウィンドウがアドレス順に切り替わってサイクリックに使用されるように、前記カレントウィンドウポインタ手段が保持するアドレス情報を更新するカレントウィンドウポインタ制御手段と、
前記サイクリックに切り替わるアドレス情報の全てのステートに関するステート情報を格納する記憶手段と、
前記カレントウィンドウポインタ手段が保持するアドレス情報が更新されたとき、更新後のアドレス情報に対応するステート情報を前記記憶手段から読み出し、そのステート情報を前記ウィンドウデータ読み出し手段に出力するステート情報出力手段と、
を備えることを特徴とする。
【請求項17】
請求項16記載の演算処理装置であって、
前記記憶手段に記憶されるステート情報は、何回目のサイクリックであるかを示すサイクリック情報とカレントウィンドウのアドレス情報の組であることを特徴とする。
【請求項18】
請求項1記載の演算処理装置であって、さらに、
前記ウィンドウ切り替え命令のデコード後に、前記ウィンドウ切り替え命令の後続命令を一定サイクルだけストールさせるパイプライン制御手段を備えることを特徴とする。
【請求項19】
請求項1記載の演算処理装置であって、さらに、
レジスタリネーミングを行うリネームレジスタ手段と、
第1の命令と、該第1の命令の後に実行される後続命令が真のデータ依存関係にあるとき、前記第1の命令の実行結果を前記レジスタファイルから読み出し可能となるまで、前記実行結果を前記リネームレジスタ手段が保持するように制御するリネームレジスタ制御手段と、
を備えることを特徴とする。
【請求項20】
請求項19記載の演算処理装置であって、
前記リネームレジスタ制御手段は、前記第1の命令の実行結果を前記リネームレジスタ手段に格納してから前記レジスタファイルから読み出すまでに複数サイクルを要する場合、
前記実行結果を前記レジスタファイルから読み出し可能になるまで、前記実行結果を前記リネームレジスタ手段が保持するように制御することを特徴とする。
【請求項1】
レジスタウィンドウを複数備えるレジスタファイルと、
前記レジスタファイルに保持されているデータをオペランドとする命令を実行する演算手段と、
前記レジスタファイルが備える複数のレジスタウィンドウの中から、カレントウィンドウとなるレジスタウィンドウを指定するアドレス情報を保持するカレントウィンドウポインタ手段と、
前記カレントウィンドウの切り替えを指示するウィンドウ切り替え命令がデコードされたとき、前記カレントウィンドウポインタ手段が保持する前記アドレス情報を更新し、前記ウィンドウ切り替え命令のデコードが開始されてからコミットが開始される直前までの間は、前記演算手段が、前記更新前のアドレス情報が指定する第1のレジスタウィンドウのデータと前記更新後のアドレス情報が指定する第2のレジスタウィンドウのデータを、前記レジスタファイルから読み出しできるように制御する制御手段と、
を備えたことを特徴とする演算処理装置。
【請求項2】
請求項1記載の演算処理装置であって、
前記制御手段は、前記ウィンドウ切り替え命令のコミットが開始されたとき、前記演算手段が、前記更新後のアドレス情報が指定する前記第2のレジスタウィンドウのデータのみを、前記レジスタファイルから読み出しできるように制御することを特徴とする。
【請求項3】
請求項1記載の演算処理装置であって、
前記制御手段は、
前記ウィンドウ切り替え命令のデコード開始からコミット開始の直前まで、前記第1のレジスタウィンドウのデータと前記第2のレジスタウィンドウのデータを前記レジスタファイルから読み出すウィンドウデータ読み出し手段と、
前記ウィンドウ切り替え命令のデコード開始からコミット開始の直前まで、該ウィンドウデータ読み出し手段によって読み出された前記第1のレジスタウィンドウと前記第2のレジスタウィンドウに含まれる複数のレジスタのデータの中から、前記演算手段が必要とするレジスタのデータを選択して出力するレジスタデータ選択出力手段と、
を備えることを特徴とする。
【請求項4】
請求項3記載の演算処理装置であって、
前記ウィンドウデータ読み出し手段は、
前記ウィンドウ切り替え命令のコミットが開始されると、前記第2のジスタウィンドウに含まれるレジスタのデータのみを前記レジスタファイルから読み出すことを特徴とする。
【請求項5】
請求項3記載の演算処理装置であって、
前記レジスタファイルは、前記第1のレジスタウィンドウのデータと前記第2のレジスタウィンドウのデータを出力する複数の読み出しポートを備え、
前記ウィンドウデータ読み出し手段は、前記ウィンドウ切り替え命令のデコード開始からコミット開始の直前まで、前記前記第1のレジスタウィンドウのデータと前記第2のレジスタウィンドウのデータを前記複数の読み出しポートから出力し、
前記レジスタデータ選択出力手段は、前記ウィンドウ切り替え命令のデコード開始からコミット開始の直前まで、前記複数の読み出しポートから出力される前記第1のレジスタウィンドウのデータと前記第2のレジスタデータウィンドウに含まれる複数のレジスタのデータの中から、前記演算手段が必要とするレジスタのデータのみを選択して出力することを特徴とする。
【請求項6】
請求項5記載の演算処理装置であって、
前記ウィンドウデータ読み出し手段は、前記ウィンドウ切り替え命令のコミットが開始されると、前記第2のジスタウィンドウのデータのみを前記複数のポートのいずれかのポートから出力することを特徴とする。
【請求項7】
請求項5記載の演算処理装置であって、
前記複数の読み出しポートの各ポートは、前記第1のレジスタウィンドウのデータ出力と前記第2のレジスタウィンドウのデータ出力に兼用されることを特徴とする。
【請求項8】
請求項7記載の演算処理装置であって、
前記複数の読み出しポートの各ポートは、前記ウィンドウ切り替え命令が実行される毎に、前記第1のレジスタウィンドウのデータと前記第2のレジスタウィンドウのデータを交互に切り替え出力することを特徴とする。
【請求項9】
請求項5記載の演算処理装置であって、
前記レジスタウィンドウは、親ルーチンと子ルーチンとの間で引き数の授受に使用されるレジスタを備える第1のウィンドウと、個々のルーチンが個別に使用するレジスタを備える第2のウィンドウと、全てのルーチンで共有されるレジスタを備える第3のウィンドウを備え、
前記複数の読み出しポートは、前記第1のウィンドウのデータを出力する第1の読み出しポートと、前記第2のウィンドウのデータを出力する第2の読み出しポートを含み、前記第1の読み出しポートの本数と前記第2の読み出しポートの本数は、共に、複数であることを特徴とする。
【請求項10】
請求項9記載の演算処理装置であって、
前記ウィンドウデータ読み出し手段は、ウィンドウ切り替え命令のデコード開始からコミットが完了するまでの間は、前記複数の第1の読み出しポートを介して前記第1のレジスタウィンドウと前記第2のレジスタウィンドウに含まれる前記第1のウィンドウのデータを出力し、前記複数の第2の読み出しポートを介して前記第1のレジスタウィンドウと前記第2のレジスタウィンドウに含まれる前記第2のウィンドウのデータを出力することを特徴とする。
【請求項11】
請求項10記載の演算処理装置であって、
前記ウィンドウデータ読み出し手段は、ウィンドウ切り替え命令のデコード開始からコミットが完了するまでの間は、全ての前記第1の読み出しポートと全ての前記第2の読み出しポートを介して前記データ出力を行うことを特徴とする。
【請求項12】
請求項10または11記載の演算処理装置であって、
前記ウィンドウデータ読み出し手段は、前記ウィンドウ切り替え命令のコミットが開始されると、前記第1のレジスタウィンドウに含まれる第1のウィンドウのデータのみを前記複数の第1の読み出しポートの一部のポートから出力し、前記第1のレジスタウィンドウに含まれる第2のウィンドウのデータのみを前記複数の第2の読み出しポートの一部のポートから出力することを特徴とする。
【請求項13】
請求項12記載の演算処理装置であって、
前記ウィンドウデータ読み出し手段は、前記ウィンドウ切り替え命令の実行が開始される毎に、前記第1のレジスタウィンドウのデータを出力する前記第1の読み出しポートと、前記第2のレジスタウィンドウのデータを出力する前記第2の読み出しポートを切り替えることを特徴とする。
【請求項14】
請求項9乃至13のいずれか1項に記載の演算処理装置であって、
前記第1の読み出しポートと前記第2の読み出しポートには、それぞれ、前記第1のウィンドウのデータと前記第2のウィンドウのデータが入力されるマルチプレクサが設けられており、
前記ウィンドウデータ読み出し手段は、前記第1の読み出しポートと前記第2の読み出しポートの各ポートに設けられたマルチプレクサを制御して、前記第1のレジスタウィンドウと前記第2のレジスタウィンドウに含まれる前記第1のウィンドウのデータと前記第2のウィンドウのデータを該マルチプレクサから選択出力させ、
前記レジスタデータ選択出力手段は、前記マルチプレクサから出力される前記第1のウィンドウのデータと前記第2のウィンドウのデータの中から前記演算手段が必要とするレジスタのデータを選択して出力することを特徴とする。
【請求項15】
請求項3乃至14のいずれか1項に記載の演算処理装置であって
前記レジスタデータ選択出力手段は、さらに、前記レジスタファイルから前記演算手段が必要とするデータを読み出して、そのデータを出力させることを特徴とする。
【請求項16】
請求項3記載の演算処理装置であって、
前記制御手段は、さらに、
ウィンドウ切り替え命令が実行される度に、前記カレントウィンドウがアドレス順に切り替わってサイクリックに使用されるように、前記カレントウィンドウポインタ手段が保持するアドレス情報を更新するカレントウィンドウポインタ制御手段と、
前記サイクリックに切り替わるアドレス情報の全てのステートに関するステート情報を格納する記憶手段と、
前記カレントウィンドウポインタ手段が保持するアドレス情報が更新されたとき、更新後のアドレス情報に対応するステート情報を前記記憶手段から読み出し、そのステート情報を前記ウィンドウデータ読み出し手段に出力するステート情報出力手段と、
を備えることを特徴とする。
【請求項17】
請求項16記載の演算処理装置であって、
前記記憶手段に記憶されるステート情報は、何回目のサイクリックであるかを示すサイクリック情報とカレントウィンドウのアドレス情報の組であることを特徴とする。
【請求項18】
請求項1記載の演算処理装置であって、さらに、
前記ウィンドウ切り替え命令のデコード後に、前記ウィンドウ切り替え命令の後続命令を一定サイクルだけストールさせるパイプライン制御手段を備えることを特徴とする。
【請求項19】
請求項1記載の演算処理装置であって、さらに、
レジスタリネーミングを行うリネームレジスタ手段と、
第1の命令と、該第1の命令の後に実行される後続命令が真のデータ依存関係にあるとき、前記第1の命令の実行結果を前記レジスタファイルから読み出し可能となるまで、前記実行結果を前記リネームレジスタ手段が保持するように制御するリネームレジスタ制御手段と、
を備えることを特徴とする。
【請求項20】
請求項19記載の演算処理装置であって、
前記リネームレジスタ制御手段は、前記第1の命令の実行結果を前記リネームレジスタ手段に格納してから前記レジスタファイルから読み出すまでに複数サイクルを要する場合、
前記実行結果を前記レジスタファイルから読み出し可能になるまで、前記実行結果を前記リネームレジスタ手段が保持するように制御することを特徴とする。
【図1】
【図2】
【図3】
【図4】
【図5】
【図6】
【図7】
【図8】
【図9】
【図10】
【図11】
【図12】
【図13】
【図14】
【図15】
【図16】
【図17】
【図18】
【図19】
【図20】
【図2】
【図3】
【図4】
【図5】
【図6】
【図7】
【図8】
【図9】
【図10】
【図11】
【図12】
【図13】
【図14】
【図15】
【図16】
【図17】
【図18】
【図19】
【図20】
【公開番号】特開2008−234075(P2008−234075A)
【公開日】平成20年10月2日(2008.10.2)
【国際特許分類】
【出願番号】特願2007−69613(P2007−69613)
【出願日】平成19年3月16日(2007.3.16)
【出願人】(000005223)富士通株式会社 (25,993)
【Fターム(参考)】
【公開日】平成20年10月2日(2008.10.2)
【国際特許分類】
【出願日】平成19年3月16日(2007.3.16)
【出願人】(000005223)富士通株式会社 (25,993)
【Fターム(参考)】
[ Back to top ]