(57)【特許請求の範囲】
【請求項１】
複数のソース・レジスタを含む複数のレジスタ値が記憶されたレジスタ・ファイルと、
命令を発行し、かつ、該命令で処理されるソース・レジスタのアドレスおよび処理された結果となる宛先レジスタのアドレスを発行するユニットと、
前記命令を受け取って、命令を実行するユニットと、
ソース・レジスタが復元されるレジスタ・キャッシュと、
前記ソース・レジスタのアドレスを受け取り、ソース・レジスタの復元、および、前記実行するユニットへのソース・レジスタの読み出しを制御する回路と
を含むマイクロプロセッサ。
【請求項２】
前記制御する回路が、
前記ソース・レジスタの復元の順序を記憶するキューと、
前記キューにしたがってレジスタ・ファイルのソース・レジスタの復元および実行するユニットへの読み出しを制御する手段と、
前記レジスタ・キャッシュのソース・レジスタの状態を記憶するフラグと、
を含む請求項１に記載のマイクロプロセッサ。
【請求項３】
前記レジスタ・キャッシュのソース・レジスタとレジスタ・ファイルのソース・レジスタとを選択する回路と、
前記レジスタ・ファイルから選択する回路にソース・レジスタを送るための読み出しバスと、
前記読み出しバスから分岐し、レジスタ・キャッシュに接続される復元用バスとを含む請求項１または２に記載のマイクロプロセッサ。
【請求項４】
前記実行するユニットとレジスタ・キャッシュとが複数のソース・レジスタバスで接続されており、該ソース・レジスタバスの１本に前記選択する回路が介在する請求項３に記載のマイクロプロセッサ。
【請求項５】
前記実行するユニットで処理されたソース・レジスタの結果である宛先レジスタをレジスタ・キャッシュに書き込むために、該実行するユニットとソース・レジスタとを接続する宛先レジスタバスを含む請求項１乃至４に記載のマイクロプロセッサ。
【請求項６】
前記宛先レジスタバスが、レジスタ・キャッシュとレジスタ・ファイルに接続されるように分岐している請求項５に記載のマイクロプロセッサ。
【請求項７】
前記レジスタ・ファイルにおいて、連続したソース・レジスタのアドレスの内、最初のアドレスを指定するポインタを含む請求項１乃至６に記載のマイクロプロセッサ。
【請求項８】
前記レジスタ・キャッシュが複数である請求項１乃至７に記載のマイクロプロセッサ。
【請求項９】
レジスタ・ファイルに記憶された複数のソース・レジスタを処理する方法であって、
前記ソース・レジスタを処理するための命令を発行するステップと、
前記命令で処理されるソース・レジスタのアドレスおよび処理された結果となる宛先レジスタのアドレスを発行するステップと、
発行された前記命令で処理されるソース・レジスタのアドレスを受け取り、該アドレスのソース・レジスタをレジスタ・キャッシュへ復元するステップと、
発行された前記命令で処理されるソース・レジスタのアドレスを受け取り、命令が実行されるユニットへ該アドレスのソース・レジスタを転送するステップと、
前記命令を実行するステップと
を含む処理方法。
【請求項１０】
前記復元するステップと転送するステップは同時に実行される請求項９に記載の処理方法。
【請求項１１】
前記復元するステップによって復元されたソース・レジスタを前記命令が実行されるユニットへ転送するステップを含む請求項９または１０に記載の処理方法。
【請求項１２】
前記実行するステップによって処理された結果をレジスタ・キャッシュに書き込むステップを含む請求項９乃至１１に記載の処理方法。
【請求項１３】
前記書き込むステップと同時に、前記結果をレジスタ・ファイルに書き込む請求項１２に記載の処理方法。
【請求項１４】
前記レジスタ・ファイルにおいて、連続したソース・レジスタのアドレスの内、最初のアドレスを指定するステップを含む請求項９乃至１３に記載の処理方法。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、レジスタ・ファイル（レジスタ群）に格納されるコンテンツ（以下、レジスタ値と呼ぶ）をキャッシュするレジスタ・キャッシュを有するマイクロプロセッサおよびレジスタ・ファイルとレジスタ・キャッシュ間のレジスタ値の退避（セーブ）と復元（リストア）に関する。
【０００２】
【従来の技術】
一般に、マイクロプロセッサにはレジスタ・ファイルが備えられている。レジスタ・ファイルは複数のレジスタ値を記憶する。レジスタ値の中で、マイクロプロセッサの実行ユニットでの演算に使用されるレジスタ値をソース・レジスタと呼ぶ。
【０００３】
命令セットで使用されるソース・レジスタが増加すると、レジスタ・ファイルが大型化する。命令セットは、マイクロプロセッサにおいて使用される命令の集合である。レジスタ・ファイルは実行ユニットの性能要求から多ポート化が必要である。レジスタ・ファイルの大型化によるコストの増加やパフォーマンスの低下の問題が生じる。
【０００４】
その問題を解決するための手段として、レジスタ・ファイルは少ポートにし、そのポートの一部を多ポートのレジスタ・キャッシュに復元するマイクロプロセッサが知られている。なお、ポートは、マイクロプロセッサのある手段で同時に読み書きできるソース・レジスタの数である。
【０００５】
図５に示すように、マイクロプロセッサ５０の構成は、複数のソース・レジスタ１１を含む複数のレジスタ値が記憶されたレジスタ・ファイル１２と、命令、および、その命令による演算で使用されるソース・レジスタ１１および演算された結果となる宛先レジスタのアドレスを発行する命令制御・発行ユニット１４と、命令を受け取って、命令を実行する実行ユニット１６と、ソース・レジスタ１１が復元されるレジスタ・キャッシュ１８と、を含む。
【０００６】
しかし、割り込みなどによるタスクの切り替えにより、レジスタ・キャッシュの退避／復元の作業が発生する。すなわち、レジスタ・キャッシュの内容（現在のタスクのコンテキスト）をレジスタ・ファイル１２へ退避する作業が必要となる。一般的にこれら一連の作業はマイクロプロセッサ５０のプログラム実行を停止して行われるため、プログラムの実行性能を低下させる。
【０００７】
これらレジスタ・キャッシュ１８でのソース・レジスタ１１の退避／復元からプログラムの実行開始までの時間であるミス・ペナルティを低減する方法として、マイクロプロセッサ５０の要求するソース・レジスタ１１からレジスタ・キャッシュ１８を復元する要求データ先送り（Requested data first/Critical data first）手法がある。この手法では、マイクロプロセッサ５０の要求するソース・レジスタ１１を最初に復元する。レジスタ・キャッシュ１８に復元開始とともにマイクロプロセッサ５０はプログラムを実行開始できる。
【０００８】
図６に示すように、要求データ先送り手法ではマイクロプロセッサ５０の要求するソース・レジスタ１１から順次復元する。そのため、以下の問題が発生する。
【０００９】
マイクロプロセッサ５０の要求するソース・レジスタ１１の順番がレジスタ・キャッシュ１８への復元の順番と必ずしも一致しないため、マイクロプロセッサ５０がプログラム実行開始後、再び停止する可能性がある。例えば、復元をおこないたいソース・レジスタ１１が最後の方にある場合に停止する可能性があり、図６においては、命令▲２▼が必要とするソース・レジスタＲ０，Ｒ１の復元まで時間があり、ソース・レジスタＲ０，Ｒ１を復元するまで停止する。また、ソース・レジスタ１１の処理結果である宛先レジスタとしてレジスタ・キャッシュ１８に書き込む場合でも、図６のソース・レジスタＲ５，Ｒ６のように１度復元を行うため、処理に無駄が生じている。
【００１０】
【発明が解決しようとする課題】
本発明の目的は、プログラムの実行性能の低下を防止するマイクロプロセッサおよびソース・レジスタの処理方法を提供することである。
【００１１】
【課題を解決するための手段】
本発明のマイクロプロセッサの要旨は、複数のソース・レジスタを含む複数のレジスタ値が記憶されたレジスタ・ファイルと、命令を発行し、かつ、該命令で処理されるソース・レジスタのアドレスおよび処理された結果となる宛先レジスタのアドレスを発行するユニットと、前記命令を受け取って、命令を実行するユニットと、ソース・レジスタが復元されるレジスタ・キャッシュと、前記ソース・レジスタのアドレスを受け取り、ソース・レジスタの復元、および、前記実行するユニットへのソース・レジスタの読み出しを制御する回路と、を含む。制御する回路によって、ソース・レジスタの復元や実行するユニットへの送信を制御することによって、プログラムの実行性能を低下させることなく、命令による演算をおこなうことができる。
【００１２】
本発明のソース・レジスタの処理方法は、ソース・レジスタを用いて演算をおこなうための命令を発行するステップと、前記命令で用いられるソース・レジスタのアドレスおよび命令で処理された結果となる宛先レジスタのアドレスを発行するステップと、前記アドレスのソース・レジスタをレジスタ・キャッシュへ復元するステップと、前記命令が実行されるユニットへソース・レジスタを転送するステップと、前記命令を実行するステップと、を含む。
【００１３】
【発明の実施の形態】
本発明のマイクロプロセッサおよびソース・レジスタの処理方法について図面を使用して説明する。なお、本明細書および図１から図４において、符号Ｒ０，Ｒ１，Ｒ２，Ｒ３，Ｒ４，Ｒ５，Ｒ６，Ｒ７は、それぞれ符号１１または宛先レジスタを示す。
【００１４】
図１に示すようには、本発明のマイクロプロセッサ１０は、複数のソース・レジスタ１１を含むレジスタ値が記憶されたレジスタ・ファイル１２と、命令を発行し、かつ、その命令による演算で使用されるソース・レジスタ１１のアドレスおよび命令で処理された結果である宛先レジスタのアドレスを発行する命令制御・発行ユニット１４と、命令を受け取って、命令を実行する実行ユニット１６と、ソース・レジスタ１１が復元されるレジスタ・キャッシュ１８と、アドレスを受け取り、ソース・レジスタ１１の復元、および、実行ユニット１６へのソース・レジスタ１１の読み出しを制御するキャッシュ復元制御回路２０と、を含む。
【００１５】
ソース・レジスタ１１は、実行ユニット１６での演算に使用されるレジスタ値である。また、レジスタ値の中に宛先レジスタも含まれる。
【００１６】
レジスタ・キャッシュ１８は、宛先レジスタも書き込まれる。宛先レジスタは、レジスタ・キャッシュ１８に記憶後、レジスタ・キャッシュ１８に復元されたソース・レジスタ１１と同様に扱う。
【００１７】
図２に示すように、キャッシュ復元制御回路２０は、ソース・レジスタ１１の復元順序を記憶するキュー２２と、そのキュー２２にしたがってソース・レジスタ１１の復元、および実行ユニット１６への読み出しを制御する手段２４と、レジスタ・キャッシュ１８へのソース・レジスタ１１の状態を記憶するフラグ２６と、を含む。なお、フラグ２６が記憶するソース・レジスタ１１の状態には、復元されたソース・レジスタ１１と、書き込まれた後の宛先レジスタが含まれる。
【００１８】
命令制御・発行ユニット１４は、最大１サイクルに１命令を発行するインオーダー発行インオーダー完了のスカラープロセッサである。命令制御・発行ユニット１４とキャッシュ復元制御回路２０とは複数のバス２１で接続されており、例えば２つのソース・レジスタ１１と１つの宛先レジスタのアドレスがキャッシュ復元制御回路２０に転送される。宛先レジスタは、実行ユニット１６での処理結果である。
【００１９】
さらに本発明は、レジスタ・キャッシュ１８に復元されたソース・レジスタ１１とレジスタ・ファイル１２に記憶されたソース・レジスタ１１とを選択する選択回路２８と、レジスタ・ファイル１２から選択回路２８にソース・レジスタ１１を送るための読み出しバス３０と、読み出しバス３０から途中で分岐し、レジスタ・キャッシュ１８に接続された復元用バス３２と、を含む。２本のバス３０，３２によって、選択回路２８とレジスタ・キャッシュ１８とに同時にソース・レジスタ１１を送ることができる。
【００２０】
実行ユニット１６とレジスタ・キャッシュ１８とは複数のソース・レジスタバス３４ａ，３４ｂで接続される。例えば２本のソース・レジスタバス３４ａ，３４ｂで接続されており、１本のソース・レジスタバス３４ｂに選択回路２８が介在する。選択回路２８によって、レジスタ・ファイル１２に記憶されたソース・レジスタ１１かレジスタ・キャッシュ１８に復元されたソース・レジスタ１１を選択して、実行ユニット１６に送ることができる。選択回路２８は、キャッシュ復元制御回路２０によって、上述の選択が制御される。また、複数のソース・レジスタバス３４ａ，３４ｂによって、レジスタ・キャッシュ１８から実行ユニット１６に同時に複数のソース・レジスタ１１を送ることができる。
【００２１】
宛先レジスタをレジスタ・キャッシュ１８に書き込むために、実行ユニット１６とレジスタ・キャッシュ１８とを接続する宛先レジスタバス３６を含む。
【００２２】
宛先レジスタバス３６は、分岐して、宛先レジスタバス３６ｂによってレジスタ・ファイル１２に接続されても良い。分岐することによって、レジスタ・キャッシュ１８に実行ユニット１６での処理結果である宛先レジスタを書き込むと同時に、レジスタ・ファイル１２にも書き込むことができる。したがって、タスクの切り替え時に、レジスタ・キャッシュ１８のソース・レジスタ１１をレジスタ・ファイル１２に退避させる作業が発生しない。
【００２３】
レジスタ・ファイル１２において、連続したレジスタ値のアドレスの内、最初のアドレスを指定するコンテキスト・ポインタ（ＣＰ）３８を含む。このレジスタ値には、ソース・レジスタ１１や宛先レジスタが含まれる。例えば、図においては、命令セットで規定されるレジスタ値はＲ０からＲ７の８個である。コンテキスト・ポインタ３８が示した任意のアドレスがＲ０であり、このＲ０から連続した８個のレジスタ値が、レジスタ・キャッシュ１８に復元されることになる。コンテキスト・ポインタ３８が示す任意のアドレスは、タスクの切り替え時に変更される。
【００２４】
次に、本発明のマイクロプロセッサ１０を使用したソース・レジスタ１１の処理方法について説明する。▲１▼タスクの切り替え後、コンテキスト・ポインタ３８でレジスタ・ファイル１２におけるアドレスを指定する。▲２▼命令制御・発行ユニット１４が命令を発行、および／または、その命令で処理されるソース・レジスタ１１のアドレスおよび命令で処理された結果である宛先レジスタのアドレスを発行する。▲３▼レジスタ・ファイル１２のソース・レジスタ１１をレジスタ・キャッシュ１８へ復元する。▲４▼レジスタ・ファイル１２のソース・レジスタ１１を実行ユニット１６へ転送する。▲５▼実行ユニット１６が、転送されたソース・レジスタ１１を用いて命令を実行する。▲６▼命令の演算結果を宛先レジスタとしてレジスタ・キャッシュ１８に書き込む。なお、▲６▼の工程を行うときの宛先レジスタは、レジスタ・キャッシュ１８に書き込み後、ソース・レジスタ１１と同様に扱う。また、初めて▲１▼から▲６▼の工程を行うとき、キャッシュ復元制御回路２０は▲３▼と▲４▼を同時に行うように制御する。▲２▼において、命令およびアドレスを同時に発行せず、アドレスのみを先に発行しても良い。
【００２５】
▲２▼から▲６▼の工程は、任意の回数繰り返してもよい。▲２▼から▲６▼の工程を繰り返したとき、Ａ．キャッシュ復元制御回路２０は、▲３▼や▲６▼の工程によってレジスタ・キャッシュ１８に実行ユニット１６で使用されるソース・レジスタ１１が存在する場合、レジスタ・キャッシュ１８のソース・レジスタ１１を実行ユニット１６へ転送するように制御する。Ｂ．レジスタ・キャッシュ１８に実行ユニット１６で使用するソース・レジスタ１１がない場合、キャッシュ復元制御回路２０は、▲３▼および▲４▼の工程を同時に行うように制御する。キャッシュ復元制御回路２０は、選択回路２８、レジスタ・キャッシュ１８、およびレジスタ・ファイル１２を制御することによって、上記Ａ，Ｂが可能となる。
【００２６】
また、▲６▼の工程で、宛先レジスタをレジスタ・キャッシュ１８に書き込むと同時に、その宛先レジスタをレジスタ・ファイル１２に書き込んでも良い。
【００２７】
さらに、▲２▼の工程で処理がストップした場合、レジスタ・キャッシュ１８に復元されていないソース・レジスタ１１またはソース・レジスタ１１の処理結果として宛先レジスタとしてレジスタ・キャッシュ１８に書き込まれていないレジスタ値を、レジスタ・キャッシュ１８に復元する。
【００２８】
以上の工程において、キャッシュ復元制御回路２０の動作を図２で具体的に説明する。なお、図２の処理は、従来技術の図６で示した命令と同じ命令による処理である。タスク切り替えによってコンテキスト・ポインタ３８の値ＣＰがＣＰ１からＣＰ２に変更される。レジスタ・キャッシュ１８の内容が無効になる。このとき、キャッシュ復元制御回路２０のフラグ２６の値も全て「０」（無効）にセットされる（状態１）。
【００２９】
命令▲１▼が発行される前に、命令▲１▼のソース・レジスタＲ３のアドレス“３”と宛先レジスタＲ４のアドレス“４”が命令制御・発行ユニット１４よりキャッシュ復元制御回路２０に転送される（状態２）。キャッシュ復元制御回路２０では、ソース・レジスタＲ３のアドレス“３”がキュー２２に送られ、宛先レジスタＲ４のアドレス“４”に対応するフラグ２６が「１」（有効）にセットされる。
【００３０】
命令▲１▼に関して上記の操作が終了すると、命令▲１▼の発行いかんにかかわらず、命令▲２▼に対して同様の操作が行われる。図２においては、ソース・レジスタＲ０，Ｒ１のアドレス“０”、“１”をキュー２２に送り、宛先レジスタＲ５のアドレス“５”に対応するフラグ２６を「１」にセットする（状態３）。図２において、命令▲３▼以降も同様の操作が繰り返される（状態４以降）。
【００３１】
キュー２２は命令制御・発行ユニット１４より転送されるソース・レジスタ１１のアドレスを格納していくが、その際、対応するフラグ２６を参照し、フラグ２６が「１」にセットされていれば、キュー２２に格納しない。
【００３２】
復元を制御する手段２４は、キュー２２の順序に従い該当ソース・レジスタ１１の復元を制御するが、該当ソース・レジスタ１１が実行ユニット１６の要求するものであれば、同時に実行ユニット１６に転送するように制御する。
【００３３】
復元が終了すれば、そのソース・レジスタ１１のアドレスに対応するフラグ２６を「１」にセットする。
【００３４】
キュー２２が空の場合、レジスタ値Ｒ０よりフラグ２６を参照し、フラグ２６が「０」のレジスタ値を復元し、フラグ２６を「１」にセットする。
【００３５】
以上の操作によって全てのフラグ２６が「１」にセットされれば、レジスタ・キャッシュ２６への復元操作は終了する。
【００３６】
上記の実施形態によれば、例えば、図３に示すように命令▲２▼、▲３▼またはそれ以降の命令の発行、完了は、図６に示す要求データ先送り手法と比較して、不要な復元がないため、早くできる。なお、図３は図２や図６で示す命令と同じ命令による処理である。ソース・レジスタ１１の復元と実行ユニット１６のソース・レジスタ１１の読み出しを同じサイクルにすることができ、また、宛先レジスタに対応するレジスタ値の復元を省略することが可能であるため、ソース・レジスタ１１の復元を短時間で行うことができる。
【００３７】
図４に本発明の他の構成を示す。このマイクロプロセッサ４０は、レジスタ・キャッシュ１８が複数にしている。各レジスタ・キャッシュ１８をバンクとして扱うと、マイクロプロセッサ４０はバンク方式で動作する。タスク切り替え時にバンクを切り替えることによって、すぐに復元作業を始めることができる。すなわち、あるレジスタ・キャッシュ１８に復元されたソース・レジスタ１１を退避せずに、他のレジスタ・キャッシュ１８にソース・レジスタ１１の復元を行う。また、復元を行っているときに過去に使用されたレジスタ・キャッシュ１８に復元されたソース・レジスタ１１を退避することができる。したがって、図１の構成と同様に、プログラムの実行性能を落とすことなくソース・レジスタ１１の処理を行うことができる。
【００３８】
以上、本発明の実施の形態について説明したが、本発明は上記の実施形態に限定されることはない。その他、本発明は、主旨を逸脱しない範囲で当業者の知識に基づき種々の改良、修正、変更を加えた態様で実施できるものである。
【００３９】
【発明の効果】
本発明によれば、タスク切り替え後、レジスタ・キャッシュの復元完了を待つことなくプログラムの実行を開始できる。また、マイクロプロセッサの要求するソース・レジスタの順番に依存することなく、プログラムの連続実行が可能である。レジスタ・キャッシュ全体の復元サイクルも短縮できるため、プログラムの実行性能の向上が可能である。
【図面の簡単な説明】
【図１】本願発明のマイクロプロセッサの回路構成を示す図である。
【図２】キャッシュ復元制御回路におけるソース・レジスタの制御を示す図である。
【図３】キャッシュ・レジスタにおけるソース・レジスタの復元状態を示す図である。
【図４】マイクロプロセッサの他の実施形態を示す図であり、レジスタ・キャッシュを複数にした図である。
【図５】従来技術のマイクロプロセッサの回路構成を示す図である。
【図６】図５のマイクロプロセッサにおけるソース・レジスタの復元状態を示す図である。
【符号の説明】
１０，４０，５０：マイクロプロセッサ
１１：ソース・レジスタ
１２：レジスタ・ファイル
１４：命令制御・発行ユニット
１６：実行ユニット
１８：レジスタ・キャッシュ
２０：キャッシュ復元制御回路
２１：アドレスを送るバス
２２：キュー
２４：制御する手段
２６：フラグ
２８：選択回路
３０：読み出しバス
３２：復元用バス
３４，３４ａ，３４ｂ：ソース・レジスタバス
３６，３６ｂ：宛先レジスタバス
３８：コンテキスト・ポインタ
【図１】
0003659941.tif 000002
【図２】
0003659941.tif 000003
【図３】
0003659941.tif 000004
【図４】
0003659941.tif 000005
【図５】
0003659941.tif 000006
【図６】
0003659941.tif 000007