(57)【特許請求の範囲】
【請求項１】
データを保持するレジスタと、レジスタに保持されたデータを入出力対象として演算を実行する演算器とを備え、あるレジスタに保持されたデータを別のレジスタにコピーすることを指示するレジスタ間コピー命令を発行することができるようになっており、命令列に従った処理を順次実行する情報処理装置であって、
前記レジスタ間コピー命令によるデータコピー動作の実行を予約することを記録するコピー情報保持装置を具備し、
そこにおいて、前記レジスタ間コピー命令の実行フェーズにおいて、データコピー動作の実行予約を前記コピー情報保持装置に記録し、実際のデータコピー動作を行わずに実行フェーズを完了することを特徴とした情報処理装置。
【請求項２】
請求項１に記載の情報処理装置において、
レジスタの値を参照する後続命令の解釈フェーズにおいて、前記コピー情報保持装置に記録されたデータコピー動作の予約状態を参照して、先行するレジスタ間コピー命令の操作対象となったレジスタと、前記後続命令によって参照を受けるレジスタの一致を検出したとき、前記レジスタ間コピー命令によって指定されたデータコピー動作と、前記後続命令とを、同時に実行することを特徴とする情報処理装置。
【請求項３】
請求項１または２に記載の情報処理装置において、
レジスタの値を更新する後続命令の解釈フェーズにおいて、前記コピー情報保持装置に記録されたデータコピー動作の予約状態を参照して、先行するレジスタ間コピー命令によってコピー先として指定されたレジスタと、前記後続命令によって更新されるレジスタの一致を検出したとき、前記後続命令がレジスタに保持されているデータの一部のみを更新する命令であれば、前記レジスタ間コピー命令によって指定されたデータコピー動作と前記後続命令を同時に実行し、且つ、実行結果のレジスタに保持されるべき個々のデータごとに、同時に実行された２命令の実行結果のうちいずれか一方を、あらかじめ指定されたパターンに従って選択して、実行結果のレジスタに書き込むことを特徴とする情報処理装置。
【請求項４】
請求項１または２に記載の情報処理装置において、
レジスタの値を更新する後続命令の解釈フェーズにおいて、前記コピー情報保持装置に記録されたデータコピー動作の予約状態を参照して、先行するレジスタ間コピー命令によってコピー先として指定されたレジスタと、前記後続命令によって更新されるレジスタの一致を検出したとき、前記後続命令が、レジスタにその時点で保持されているデータに依存しない新たな値を書き込む命令であり、当該後続命令を実行した後にレジスタに保持されているデータのうちで、当該後続命令を実行する時点でレジスタに保持されていたデータに依存するものがないならば、前記レジスタ間コピー命令によって実行が予約されていたデータコピー動作をキャンセルすることを特徴とする情報処理装置。
【請求項５】
請求項１または２に記載の情報処理装置において、
レジスタの値を更新する後続命令の解釈フェーズにおいて、前記コピー情報保持装置に記録されたデータコピー動作の予約状態を参照して、先行するレジスタ間コピー命令によってコピー元として指定されたレジスタと、前記後続命令によって更新されるレジスタの一致を検出したとき、前記レジスタ間コピー命令によって実行が予約されていたデータコピー動作を即時に実行することを特徴とする情報処理装置。
【請求項６】
請求項１または２に記載の情報処理装置において、
レジスタの値を更新する後続命令の解釈フェーズにおいて、前記コピー情報保持装置に記録されたデータコピー動作の予約状態を参照して、先行するレジスタ間コピー命令によってコピー元として指示されたレジスタと、前記後続命令によって更新されるレジスタの一致を検出したとき、レジスタリネーミング機構によって、前記レジスタ間コピー命令によって、コピー元として指定されたレジスタが参照する物理的なレジスタ番号と、コピー先として指定されたレジスタが参照する物理的なレジスタ番号を入れ替え、前記レジスタ間コピー命令によって指定されたデータコピー動作と、前記後続命令を同時に実行することを特徴とする情報処理装置。
【請求項７】
請求項６に記載の情報処理装置において、
前記後続命令が、レジスタに保持されているデータの一部のみを更新する命令であれば、レジスタに保持されるべき個々のデータごとに、同時に実行された２命令の実行結果のうちいずれか一方を、あらかじめ指定されたパターンに従って選択してレジスタに書き込むことを特徴とする情報処理装置。
【請求項８】
請求項１に記載の情報処理装置において、
前記レジスタ間コピー命令の解釈フェーズにおいて、前記レジスタ間コピー命令の即時実行があらかじめ命令によって指示されていた場合にのみ、実行フェーズにおいて前記レジスタ間コピー命令によるデータコピー動作の実行予約は行わず、実際のデータコピー動作を即時に実行することを特徴とする情報処理装置。
【請求項９】
請求項１〜８のいずれか１項に記載の情報処理装置において、
前記レジスタ間コピー命令によるデータコピー動作の実行予約を記録している前記コピー情報保持装置は、コピー元として指定されたレジスタ番号から、コピー先として指定されたレジスタ番号を得る手段と、コピー先として指定されたレジスタ番号から、コピー元として指定されたレジスタ番号を得る手段とを有することを特徴とする情報処理装置。
【請求項１０】
一連のデータを保持するベクトルレジスタと、ベクトルレジスタに保持されたデータ列を入出力対象として各要素ごとに演算を実行するベクトル演算器とを有し、命令列に従った処理を順次実行する情報処理装置において、
あるベクトルレジスタに保持された一連のデータを別のベクトルレジスタにコピーすることを指示するベクトルレジスタ間コピー命令を発行することができるようになっており、
前記ベクトルレジスタ間コピー命令によるデータコピー動作の実行を予約することを記録するコピー情報保持装置を具備し、
そこにおいて、前記ベクトルレジスタ間コピー命令の実行フェーズにおいて、データコピー動作の実行予約を前記コピー情報保持装置に記録し、実際のデータコピー動作を行わずに実行フェーズを完了することを特徴とした情報処理装置。
【請求項１１】
請求項１０に記載の情報処理装置において、
ベクトルレジスタの値を参照する後続命令の解釈フェーズにおいて、前記コピー情報保持装置に記録されたデータコピー動作の予約状態を参照して、先行するベクトルレジスタ間コピー命令の操作対象となったベクトルレジスタと、前記後続命令によって参照を受けるベクトルレジスタの一致を検出したとき、前記ベクトルレジスタ間コピー命令によって指定されたデータコピー動作と、前記後続命令とを、同時に実行することを特徴とする情報処理装置。
【請求項１２】
請求項１０または１１に記載の情報処理装置において、
ベクトルレジスタに保持された一連のデータのうち、指定された一部のデータのみ値を更新するマスク付き演算命令の解釈フェーズにおいて、前記コピー情報保持装置に記録されたデータコピー動作の予約状態を参照して、先行するベクトルレジスタ間コピー命令によってコピー先として指定されたベクトルレジスタと、前記マスク付き演算命令によって更新されるベクトルレジスタの一致を検出したとき、前記ベクトルレジスタ間コピー命令によって指定されたデータコピー動作と前記マスク付き演算命令を同時に実行し、且つ、実行結果のベクトルレジスタに保持されるべき個々のデータごとに、同時に実行された２命令の実行結果のうちいずれか一方を、あらかじめ指定されたマスクパターンに従って選択して、実行結果のベクトルレジスタに書き込むことを特徴とする情報処理装置。
【請求項１３】
請求項１０または１１に記載の情報処理装置において、
ベクトルレジスタの値を更新する後続命令の解釈フェーズにおいて、前記コピー情報保持装置に記録されたデータコピー動作の予約状態を参照して、先行するベクトルレジスタ間コピー命令によってコピー先として指定されたベクトルレジスタと、前記後続命令によって更新されるベクトルレジスタの一致を検出したとき、前記後続命令がマスク付き演算命令でなければ、前記ベクトルレジスタ間コピー命令によって実行が予約されていたデータコピー動作をキャンセルすることを特徴とする情報処理装置。
【請求項１４】
請求項１０または１１に記載の情報処理装置において、
ベクトルレジスタの値を更新する後続命令の解釈フェーズにおいて、前記コピー情報保持装置に記録されたデータコピー動作の予約状態を参照して、先行するベクトルレジスタ間コピー命令によってコピー元として指定されたベクトルレジスタと、前記後続命令によって更新されるベクトルレジスタの一致を検出したとき、前記ベクトルレジスタ間コピー命令によって実行が予約されていたデータコピー動作を即時に実行することを特徴とする情報処理装置。
【請求項１５】
請求項１０または１１に記載の情報処理装置において、
ベクトルレジスタの値を更新する後続命令の解釈フェーズにおいて、前記コピー情報保持装置に記録されたデータコピー動作の予約状態を参照して、先行するベクトルレジスタ間コピー命令によってコピー元として指示されたベクトルレジスタと、前記後続命令によって更新されるレジスタ名の一致を検出したとき、レジスタリネーミング機構によって、前記ベクトルレジスタ間コピー命令によって、コピー元として指定されたベクトルレジスタが参照する物理的なレジスタ番号と、コピー先として指定されたベクトルレジスタが参照する物理的なレジスタ番号を入れ替え、前記ベクトルレジスタ間コピー命令によって指定されたデータコピー動作と、前記後続命令を同時に実行することを特徴とする情報処理装置。
【請求項１６】
請求項１５に記載の情報処理装置において、
前記後続命令が、ベクトルレジスタに保持されているデータの一部のみを更新するマスク付き命令であれば、各要素ごとに、同時に実行された２命令の実行結果のうちいずれか一方を、あらかじめ指定されたパターンに従って選択してベクトルレジスタに書き込むことを特徴とする情報処理装置。
【請求項１７】
請求項１０に記載の情報処理装置において、
前記ベクトルレジスタ間コピー命令の解釈フェーズにおいて、前記ベクトルレジスタ間コピー命令の即時実行があらかじめ命令によって指示されていた場合にのみ、実行フェーズにおいて前記ベクトルレジスタ間コピー命令によるデータコピー動作の実行予約は行わず、実際のデータコピー動作を即時に実行することを特徴とする情報処理装置。
【請求項１８】
請求項１０〜１７のいずれか１項に記載の情報処理装置において、
前記ベクトルレジスタ間コピー命令によるデータコピー動作の実行予約を記録しているコピー情報保持装置は、コピー元として指定されたベクトルレジスタ番号から、コピー先として指定されたベクトルレジスタ番号を得る手段と、コピー先として指定されたベクトルレジスタ番号から、コピー元として指定されたベクトルレジスタ番号を得る手段とを有することを特徴とする情報処理装置。
【請求項１９】
データを保持するレジスタと、レジスタに保持されたデータを入出力対象として演算を実行する演算器とを具備し、レジスタ間コピー命令と演算命令とを同時に実行する機能を有する情報処理装置における命令実行方法であって、
レジスタ間コピー命令の実行フェーズにおいて前記レジスタ間コピー命令の情報をコピー情報保持装置に記録し、
前記コピー情報保持装置に記録されたレジスタ間コピー命令と同じレジスタを使用する後続命令の実行フェーズにおいて該後続命令と前記レジスタ間コピー命令によるデータコピー動作とを同時に実行する、
各ステップを含むことを特徴とする命令実行方法。
【請求項２０】
請求項１９記載の命令実行方法であって、前記後続命令と前記レジスタ間コピー命令との関係が下記の(ａ)、(ｂ)、(ｃ)の何れであるかを判定し、
（ａ）前記後続命令で更新されるレジスタが前記レジスタ間コピー命令で更新されるレジスタと一致し、かつ、前記後続命令はレジスタに保持されているデータの一部のみを更新する命令である、
（ｂ）前記(ａ)の関係を満たさず、且つ、前記後続命令で参照を受けるレジスタが前記レジスタ間コピー命令で参照を受ける、または、更新されるレジスタと一致する、
（ｃ）前記(ａ)および(ｂ)の関係を満たさず、且つ、前記後続命令で更新されるレジスタが前記レジスタ間コピー命令で参照を受けるレジスタと一致する、
前記(ａ)の関係を満たす場合、前記後続命令と前記レジスタ間コピー命令によるデータコピー動作とを同時に実行し、実行結果のレジスタに保持されるべき個々のデータごとに、双方の実行結果のうちいずれか一方を、あらかじめ指定されたパターンに従って選択してレジスタに書き込み、
前記(ｂ)の関係を満たす場合、前記後続命令と前記レジスタ間コピー命令によるデータコピー動作とを同時に実行し、
前記(ｃ)の関係を満たす場合、前記レジスタ間コピー命令によるデータコピー動作を実行後に前記後続命令を実行する、
ことを特徴とする命令実行方法。
【請求項２１】
請求項２０記載の命令実行方法であって、前記(ｃ)の関係を満たす場合、前記レジスタ間コピー命令によるデータコピー動作を実行後に前記後続命令を実行する代わりに、前記後続命令で更新されるレジスタを前記レジスタ間コピー命令で更新されるレジスタに変更し、前記後続命令がレジスタに保持されているデータの一部のみを更新する命令であれば、前記後続命令と前記レジスタ間コピー命令によるデータコピー動作とを同時に実行し、前記後続命令がレジスタに保持されているデータに依存しない新たな値を書き込む命令であり、当該後続命令を実行した後にレジスタに保持されているデータのうちで、当該後続命令を実行する時点でレジスタに保持されていたデータに依存するものがないならば、前記後続命令のみを実行し、レジスタリネーミング機能によって、前記レジスタ間コピー命令で参照を受けるレジスタと更新されるレジスタとがそれぞれ指し示す物理的なレジスタ番号を互いに入れ替える処理を実行することを特徴とする命令実行方法。
【請求項２２】
請求項２０または２１記載の命令実行方法であって、前記レジスタがベクトルレジスタ、前記演算器がベクトル演算器、ベクトルレジスタに保持されているデータの一部のみを更新する命令がマスク付演算命令であることを特徴とする命令実行方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、データを保持するレジスタ（ソースレジスタ）と別のレジスタ（デスティネーションレジスタ）とを有し、これらのレジスタ間で指定された演算を順次実行する情報処理装置に関し、特にレジスタ間コピー命令から実際のコピー動作までに要する時間を演算の実行時間によって隠蔽し、処理の高速化を図る技術に関する。
【背景技術】
【０００２】
情報処理装置におけるプロセッサは、高速でアクセス可能な小容量のレジスタを内部に有し、演算器はレジスタに保持されたデータを入力として用い、演算結果もまたレジスタに戻して保持することで、高速に動作することが可能となる。プロセッサの動作は命令列によって規定され、プロセッサは順次命令を解釈し、実行する。【０００３】
図１４に従来のプロセッサ構成の一例を示す。命令制御部108は命令キャッシュ109から読み出した命令列を順次解釈して実行する。演算器102は、その入出力としてのレジスタファイル101に接続されており、命令制御部108の指示を受け、指定されたレジスタ105から入力データを受け取り、演算結果を指定されたレジスタ105に戻す。また、命令制御部108はレジスタ105と主記憶装置112間におけるデータの転送を指示することもある。この場合、ロードバッファ111を経由して主記憶112から読み出したデータを指定されたレジスタ105に書き込んだり、ストアバッファ110を経由してレジスタ105に保持されたデータを主記憶112に書き込んだりの処理を行う。【０００４】
プロセッサでは、レジスタに保持された値の複製を作成したり、レジスタに保持された値を次のイテレーションや別のサブルーチンなどで使用するために、しばしばレジスタ間コピー命令が実行される。これは、あるレジスタ（ソースレジスタ）に保持された値と同じ値を、別のレジスタ（デスティネーションレジスタ）に書き込む命令である。レジスタ間コピー命令は、一般にアーキテクチャ上の制限からコンパイラによって挿入され、発行されるものであり、ユーザーから見れば無駄な処理の一部である。実際には演算器を使用していないため、その実行時間は極力小さくなることが望ましい。【０００５】
(第一の従来技術)
命令で指定されるレジスタ間コピーに要する時間を削減するための手段として、これまでに幾つかの提案がなされている。その代表的なものとしては、レジスタの値を実際にコピーせずに、レジスタを参照するためのポインタを書き換えることでデータコピー動作を擬似的に実現する技術が挙げられる。【０００６】
特開平3-37722号公報（特許文献１）には、各レジスタに対応付けられたラベルを書き換えることによってレジスタ間コピー命令を実現する技術が開示されている。これは、命令の指定する論理レジスタ名を、データ実体を格納している物理レジスタ名に変換するレジスタリネーミング機能の一種である。【０００７】
図１５を参照して、従来技術におけるレジスタ間コピーに要する時間の削減に関する概要を説明する。レジスタファイル1501にはデータの実体が格納されており、有効無効記憶装置1502には対応するレジスタ内のデータが有効であれば"1"がセットされる。レジスタコード1503は、命令で指定されるレジスタのデータ実体がレジスタファイル1501中のどの位置にあるかを示す。参照フラグ1504に"1"がセットされていれば、対応する番号のレジスタはレジスタファイル1501中の他の場所を参照している。被参照フラグ1505が"1"にセットされていれば、対応するレジスタファイル1501内のデータは他のレジスタから参照を受けている。【０００８】
レジスタ間コピー命令(1)が発行されると、状態(b)に示されるように、レジスタR1の参照フラグが"1"にセットされ、レジスタコード1503が"2"に設定される。これによって、レジスタR1はレジスタファイル1501中の"2"の場所を参照するようになり、データ実体の移動なしにレジスタ間コピー命令の実行が終了することになる（これに伴って有効無効記憶装置1502、被参照フラグ1505も更新されている）。【０００９】
演算命令(2)の実行によってレジスタR2への書き込みが指示されると、レジスタファイル1501中で有効無効記憶装置1502が"0"に設定されているエントリが検出され、このエントリがレジスタR2に対応付けられる。状態(c)において、演算結果はレジスタファイル1501中の"1"の位置に書き込まれており、レジスタR2のレジスタコード1503は"1"を参照していることを示している。このように、コピーの対象となったデータを更新する命令が発行されると、更新対象となったレジスタ用に別の実体を用意し、更新対象とならなかった側のレジスタに対しては元のデータを保持し続ける。【００１０】
以上のように、レジスタ間コピー命令に対して実際にはデータコピー動作を行わず、ラベルの付け替え等で実現する技術を以下では第一の従来技術と呼ぶことにする。【００１１】
(第二の従来技術)
大量のデータを一度に処理するベクトルプロセッサでは、レジスタ間コピーに要する時間の問題はより深刻である。ベクトルプロセッサでのレジスタ間コピー命令の負荷を軽減する手法の一つとして、特開昭60-144874号公報（特許文献２）に開示された技術が挙げられる。ここでは、演算器に固定的に結合された第一のベクトルレジスタと、演算器と直接結合されていない第二のベクトルレジスタを持つ、ベクトルデータ処理装置が開示されている。このベクトルデータ処理装置では、命令の実行時に第一のベクトルレジスタと第二のベクトルレジスタの両方をデスティネーションレジスタとして指定することで、演算結果を二つのベクトルレジスタに同時に書き込むことができる。これは、演算命令と演算結果をソースとするレジスタ間コピー命令を同時に実行することに等しく、レジスタ間コピー命令の実行に要する時間を削減している。【００１２】
このように、プログラム命令の指定に従ってレジスタ間コピー命令を別の命令と同時に実行することで、データコピーの実行時間を隠蔽する技術を以下では第二の従来技術と呼ぶことにする。この第二の従来技術に類似する技術として、２入力２出力の演算器を備え、複数のムーブ命令を同時に実行するようにした情報処理装置がある（例えば、特開昭07-219769号公報（特許文献３）参照）。【００１３】
(第三の従来技術)
また、特開平1-296345号公報（特許文献４）には、先行する演算命令と後続のレジスタ間コピー命令が同時にデコードされる場合に、演算とデータコピー動作を同時に実行する技術が開示されている。このように、同時に二つ以上の命令を解釈、実行するプロセッサにおいて、演算命令とレジスタ間コピー命令が同時にデコードされた場合、同じ実行フェーズにおいて指定された演算処理と指定されたデータコピー動作を実行する技術を以下では第三の従来技術と呼ぶことにする。
ここに開示された第一〜第三の従来技術には、次のような問題がある。【００１４】
第一の従来技術では、マスク付き演算命令のようなデータの一部だけを更新する命令を備えている情報処理装置に対して適用することができない。【００１５】
マスク付き演算命令は、ベクトルプロセッサにおいてデータ要素と一対一に対応するマスクビットに従って演算を制御する命令を指す。例えばマスクビットが"1"に設定された要素については、演算を実行して結果をデスティネーションレジスタの対応する位置に書き込むが、マスクビットが"0"に設定された要素については演算の実行、結果の書き込みとも行われない。この場合対応する要素は、命令実行前の値がそのまま保持され続けることになる。【００１６】
第一の従来技術においては、コピーされたデータ実体が実際には一つしか存在しない。図１５に示した例で、(2)の演算命令がマスク付きのベクトル演算命令であった状況について説明する。マスク付きベクトル演算命令の実行終了後には、レジスタR1にデータ"Y"、レジスタR2にデータ"Y"の一部を更新した結果（"Y'"とする。）が格納されることが期待される。しかし、前記のように有効無効記憶装置が"0"に設定されているエントリ"1"に対して一部上書きを実行しても、書き込み前のデータが"X"であるため、レジスタR2のデータが期待していた値"Y'"にならない。一方レジスタファイルのエントリ"2"に格納されたデータに対して一部上書きすると、レジスタR2のデータとして"Y'"を得ることができるが、レジスタR1に保持していなければならないデータ"Y"が破壊されてしまう。【００１７】
このように第一の従来技術をベクトルプロセッサに適用した場合には、マスク付き演算の実行時に正しい結果を得ることができないという問題がある。ベクトルプロセッサにおいてはマスク付き演算の実行に備えるため、データ実体を実際にコピーする必要が生じる。【００１８】
また、第二の従来技術では、命令において明示的に演算とコピーを同時に実行することを指定する必要がある。デスティネーションレジスタを複数指定する形式が必須であり、命令セットアーキテクチャがその形式に対応する必要がある。また、コンパイラは演算命令と後続のレジスタ間コピー命令を集約して一命令に変換する機能を持つ必要がある。演算命令とレジスタ間コピー命令との間に分岐命令等が挿入される場合などがあり、この場合コンパイラによるコードの最適化は非常に困難になることもある。【００１９】
さらに、第三の従来技術では、同時に実行できる二つの命令の解読情報が保持されており、かつ、該二つの命令がともに未実行である場合にのみ、該二つの命令が同時に実行可能になる。このためには該二つの命令は命令列中で隣接もしくは近接して配置されている必要があるが、実際の命令列においてはこの条件を満たすことが多いとは言えない。【００２０】
本発明の課題は、レジスタ間コピー命令の実行時間を削減する技術の一つとして、マスク付き演算を備えたベクトルプロセッサなど、データの一部更新を行う命令を備えた情報処理装置にも適用可能な技術を提供することにある。【００２１】
さらに、本発明のもう１つの課題は、上記の技術を従来の命令セットアーキテクチャやコンパイラへの改造なしに、ハードウェア上の改造のみによって実現可能とすることにある。【００２２】
さらに、本発明の更にもう１つの課題は、あるデータを使用する演算命令と、同じデータをコピーするレジスタ間コピー命令とが、命令列中で離れて出現する場合にも、レジスタ間コピー命令の実行時間を削減可能とする技術を提供することにある。
【発明の開示】
【００２３】
上記諸課題を解決する本発明の第１の情報処理装置は、データを保持するレジスタと、レジスタに保持されたデータを入出力対象として演算を実行する演算器とを備え、あるレジスタに保持されたデータを別のレジスタにコピーすることを指示するレジスタ間コピー命令を発行することができるようになっており、命令列に従った処理を順次実行する情報処理装置において、前記レジスタ間コピー命令によるデータコピー動作の実行を予約することを記録するコピー情報保持装置を具備し、そこにおいて、前記レジスタ間コピー命令の実行フェーズにおいて、データコピー動作の実行予約を前記コピー情報保持装置に記録し、実際のデータコピー動作を行わずに実行フェーズを完了することを特徴とする。
【００２４】
本発明の第２の情報処理装置は、上記第１の情報処理装置において、レジスタの値を参照する後続命令の解釈フェーズにおいて、前記コピー情報保持装置に記録されたデータコピー動作の予約状態を参照して、先行するレジスタ間コピー命令の操作対象となったレジスタと、前記後続命令によって参照を受けるレジスタの一致を検出したとき、前記レジスタ間コピー命令によって指定されたデータコピー動作と、前記後続命令とを、同時に実行することを特徴とする。
【００２５】
本発明の第３の情報処理装置は、上記第１または第２の情報処理装置において、レジスタの値を更新する後続命令の解釈フェーズにおいて、前記コピー情報保持装置に記録されたデータコピー動作の予約状態を参照して、先行するレジスタ間コピー命令によってコピー先として指定されたレジスタと、前記後続命令によって更新されるレジスタの一致を検出したとき、前記後続命令がレジスタに保持されているデータの一部のみを更新する命令であれば、前記レジスタ間コピー命令によって指定されたデータコピー動作と前記後続命令を同時に実行し、且つ、実行結果のレジスタに保持されるべき個々のデータごとに、同時に実行された２命令の実行結果のうちいずれか一方を、あらかじめ指定されたパターンに従って選択して、実行結果のレジスタに書き込むことを特徴とする。
【００２６】
本発明の第４の情報処理装置は、上記第１または第２の情報処理装置において、レジスタの値を更新する後続命令の解釈フェーズにおいて、前記コピー情報保持装置に記録されたデータコピー動作の予約状態を参照して、先行するレジスタ間コピー命令によってコピー先として指定されたレジスタと、前記後続命令によって更新されるレジスタの一致を検出したとき、前記後続命令が、レジスタにその時点で保持されているデータに依存しない新たな値を書き込む命令であり、当該後続命令を実行した後にレジスタに保持されているデータのうちで、当該後続命令を実行する時点でレジスタに保持されていたデータに依存するものがないならば、前記レジスタ間コピー命令によって実行が予約されていたデータコピー動作をキャンセルすることを特徴とする。
【００２７】
本発明の第５の情報処理装置は、上記第１または第２の情報処理装置において、レジスタの値を更新する後続命令の解釈フェーズにおいて、前記コピー情報保持装置に記録されたデータコピー動作の予約状態を参照して、先行するレジスタ間コピー命令によってコピー元として指定されたレジスタと、前記後続命令によって更新されるレジスタの一致を検出したとき、前記レジスタ間コピー命令によって実行が予約されていたデータコピー動作を即時に実行することを特徴とする。
【００２８】
本発明の第６の情報処理装置は、上記第１または第２の情報処理装置において、レジスタの値を更新する後続命令の解釈フェーズにおいて、前記コピー情報保持装置に記録されたデータコピー動作の予約状態を参照して、先行するレジスタ間コピー命令によってコピー元として指示されたレジスタと、前記後続命令によって更新されるレジスタの一致を検出したとき、レジスタリネーミング機構によって、前記レジスタ間コピー命令によって、コピー元として指定されたレジスタが参照する物理的なレジスタ番号と、コピー先として指定されたレジスタが参照する物理的なレジスタ番号を入れ替え、前記レジスタ間コピー命令によって指定されたデータコピー動作と、前記後続命令を同時に実行することを特徴とする。
【００２９】
本発明の第７の情報処理装置は、上記第６の情報処理装置において、前記後続命令が、レジスタに保持されているデータの一部のみを更新する命令であれば、レジスタに保持されるべき個々のデータごとに、同時に実行された２命令の実行結果のうちいずれか一方を、あらかじめ指定されたパターンに従って選択してレジスタに書き込むことを特徴とする。
【００３０】
本発明の第８の情報処理装置は、上記第１の情報処理装置において、前記レジスタ間コピー命令の解釈フェーズにおいて、前記レジスタ間コピー命令の即時実行があらかじめ命令によって指示されていた場合にのみ、実行フェーズにおいて前記レジスタ間コピー命令によるデータコピー動作の実行予約は行わず、実際のデータコピー動作を即時に実行することを特徴とする。
【００３１】
本発明の第９の情報処理装置は、上記第１乃至第８の情報処理装置において、前記レジスタ間コピー命令によるデータコピー動作の実行予約を記録している前記コピー情報保持装置は、コピー元として指定されたレジスタ番号から、コピー先として指定されたレジスタ番号を得る手段と、コピー先として指定されたレジスタ番号から、コピー元として指定されたレジスタ番号を得る手段とを有することを特徴とする。
【００３２】
本発明の第１０〜第１８の情報処理装置は、第１〜第９の情報処理装置における構成と同様な構成をベクトルレジスタ、ベクトル演算器、マスク付き演算命令を有するベクトルプロセッサに適用したものである。
【００３３】
本発明の第１の命令実行方法は、データを保持するレジスタと、レジスタに保持されたデータを入出力対象として演算を実行する演算器とを有し、レジスタ間コピー命令と演算命令とを同時に実行する機能を有する情報処理装置における命令実行方法において、レジスタ間コピー命令の実行フェーズにおいて前記レジスタ間コピー命令の情報をコピー情報保持装置に記録し、前記コピー情報保持装置に記録されたレジスタ間コピー命令と同じレジスタを使用する後続命令の実行フェーズにおいて該後続命令と前記レジスタ間コピー命令によるデータコピー動作とを同時に実行することを特徴とする。
【００３４】
本発明の第２の命令実行方法は、上記第１の命令実行方法において、前記後続命令と前記レジスタ間コピー命令との関係が下記の(ａ)、(ｂ)、(ｃ)の何れであるかを判定し、
（ａ）前記後続命令で更新されるレジスタが前記レジスタ間コピー命令で更新されるレジスタと一致し、かつ、前記後続命令はレジスタに保持されているデータの一部のみを更新する命令である。
（ｂ）前記(ａ)の関係を満たさず、且つ、前記後続命令で参照を受けるレジスタが前記レジスタ間コピー命令で参照を受ける、または、更新されるレジスタと一致する。
（ｃ）前記(ａ)および(ｂ)の関係を満たさず、且つ、前記後続命令で更新されるレジスタが前記レジスタ間コピー命令で参照を受けるレジスタと一致する。
前記(ａ)の関係を満たす場合、前記後続命令と前記レジスタ間コピー命令によるデータコピー動作とを同時に実行し、実行結果のレジスタに保持されるべき個々のデータごとに、双方の実行結果のうちいずれか一方を、あらかじめ指定されたパターンに従って選択してレジスタに書き込み、
前記(ｂ)の関係を満たす場合、前記後続命令と前記レジスタ間コピー命令によるデータコピー動作とを同時に実行し、
前記(ｃ)の関係を満たす場合、前記レジスタ間コピー命令によるデータコピー動作を実行後に前記後続命令を実行することを特徴とする。
【００３５】
本発明の第３の命令実行方法は、上記第２の命令実行方法において、前記(ｃ)の関係を満たす場合、前記レジスタ間コピー命令によるデータコピー動作を実行後に前記後続命令を実行する代わりに、前記後続命令の前記更新されるレジスタを前記レジスタ間コピー命令で更新されるレジスタに変更し、前記後続命令がレジスタに保持されているデータの一部のみを更新する命令であれば、前記後続命令と前記レジスタ間コピー命令によるデータコピー動作とを同時に実行し、前記後続命令がレジスタに保持されているデータに依存しない新たな値を書き込む命令であり、当該後続命令を実行した後にレジスタに保持されているデータのうちで、当該後続命令を実行する時点でレジスタに保持されていたデータに依存するものがないならば、前記後続命令のみを実行し、レジスタリネーミング機能によって、前記レジスタ間コピー命令で参照を受けるレジスタと更新されるレジスタとがそれぞれ指し示す物理的なレジスタ番号を互いに入れ替える処理を実行することを特徴とする。
【００３６】
本発明の第４の命令実行方法は、上記第２または第３の命令実行方法において、前記レジスタがベクトルレジスタ、前記演算器がベクトル演算器、ベクトルレジスタに保持されているデータの一部のみを更新する命令がマスク付演算命令であることを特徴とする。
【００３７】
本発明による情報処理装置は、データコピー動作の実行を予約するコピー情報保持装置を設け、レジスタ間コピー命令の実行フェーズにおいては、データコピー動作の予約だけを登録する。そして、後続の命令実行時にレジスタを参照、あるいは、更新する場合には登録されたデータコピー動作の予約状態を確認し、後続命令のソースオペランドとしてデータコピー操作の対象であったデータが利用される場合に、後続命令と予約されているデータコピー動作を同時に実行するように制御する。
【００３８】
また、後続命令のデスティネーションオペランドとして、予約されているデータコピー動作のソースレジスタが指定されている場合には、レジスタリネーミング機能によって、データコピー動作のソースレジスタとデスティネーションレジスタの指し示す物理的なレジスタ番号を互いに入れ替え、後続命令と予約されているデータコピー動作を同時に実行するように制御する。
【００３９】
さらに、後続命令が、マスク付き演算命令のように指定されたデータの一部のみを更新する命令である場合には、後続命令と予約されているデータコピー動作を同時に実行し、かつ、レジスタへの書き込みをマスクビットにしたがって制御して、正しい結果が得られるようにする。
【００４０】
以上の制御により、本発明においては、レジスタ間コピー命令の実行時間を、後続の演算命令と同期させることで隠蔽する情報処理装置が提供される。
【００４１】
本発明によれば、レジスタ間コピー命令によるデータコピー動作の実行を、同じデータを使用する演算命令の実行に同期させることで、レジスタ間コピー命令の実行時間を隠蔽することができる。
【００４２】
また本発明による方式は、従来技術と比較して以下の特徴を有する。すなわち、第一の従来技術のようにデータへのラベルのみを更新する方式と異なり、データ実体を実際にコピーするため、マスク付き演算命令を備えたベクトルプロセッサのように、データの一部のみを更新する演算命令を備えた情報処理装置においても適用可能であるという特徴を有する。但し、本発明に開示した技術は実施例に示したベクトルプロセッサのように、データの一部のみを更新する演算命令を備えた情報処理装置に限定されるものではなく、通常のマイクロプロセッサにおいてそのまま適用することが可能である。
【００４３】
さらに、第二の従来技術と異なり、従来の命令セットアーキテクチャやコンパイラへの改造なしに、ハードウェア上の改造のみによって実現可能であるという特徴を有する。
【００４４】
さらに、第三の従来技術と異なり、対象となるレジスタ間コピー命令と、同じデータを使用する演算命令が、命令列中で離れて出現する場合にも、適用可能であるという特徴を有する。
前記ならびに他の多くの本発明の目的、態様、そして利点は、本発明の原理に合致する好適な具体例が実施の形態として示されている以下の詳細な記述および添付の図面に関連して説明されることにより、当該技術の熟達者であれば明らかに理解されるであろう。
【図面の簡単な説明】
【００４５】
【図１】図１は、本発明の第一の実施例による情報処理装置における主要機能部分の構成を示すブロック図である。
【図２】図２は、本発明の第一の実施例における、コピー情報保持装置の構成例である。
【図３】図３は、本発明の命令制御部が命令解釈フェーズにおいて、コピー情報保持装置の参照・更新にかかる処理を行うためのフローチャート図である。
【図４】図４は、本発明の第一の実施例が実行する命令列の例を示す図である。
【図５】図５は、本発明の命令制御部がレジスタ間コピー命令の実行フェーズにおいて行う、コピー情報保持装置の更新動作の例を示した図である。
【図６】図６は、本発明の第一の実施例における第一の動作例において、命令(2)の実行フェーズにおけるデータの流れを図示したものである。
【図７】図７は、本発明の第一実施例における第三の動作例において、命令(2)の実行フェーズにおけるデータの流れを図示したものである。
【図８】図８は、本発明の第二の実施例による情報処理装置における主要機能部分の構成を示すブロック図である。
【図９】図９は、本発明の第二の実施例における命令制御部が、命令解釈フェーズにおいて、コピー情報保持装置の参照・更新にかかる処理を行うためのフローチャート図である。
【図１０】図１０は、本発明の第二の実施例において、コピー情報保持装置およびレジスタ名変更テーブルの動作例を説明するための図である。
【図１１】図１１は、本発明の第二の実施例における第四の動作例において、命令(2)の実行フェーズにおけるデータの流れを図示したものである。
【図１２】図１２は、本発明の第二の実施例において、コピー情報保持装置およびレジスタ名変更テーブルの別の動作例を説明するための図である。
【図１３】図１３は、本発明の第二の実施例における第五の動作例において、命令(2)の実行フェーズにおけるデータの流れを図示したものである。
【図１４】図１４は、従来技術による情報処理装置における主要機能部分の構成を示すブロック図である。
【図１５】図１５は、従来技術におけるレジスタ間コピー命令の実行時間削減の動作を説明する図である。
【発明を実施するための最良の形態】
【００４６】
以下に、図面を参照して本発明の実施例について説明する。なお、本発明で開示する技術はベクトルプロセッサに限らず適用可能であるが、第一の従来技術における問題点を解決していることをより明確に説明するため、ベクトルプロセッサを例に取って説明する。【００４７】
(第一の実施例)
図１は本発明の第一の実施例による情報処理装置における主要機能部分の構成を示すブロック図である。命令制御部108は命令キャッシュ109から読み出した命令列を順次解釈して実行する。演算器102の入出力はレジスタファイル101に接続されており、命令制御部108の指示を受け、指定されたレジスタ105から入力データを受け取り、演算結果を指定されたレジスタ105に書き戻す。また、命令制御部108はレジスタ105と主記憶装置112間のデータ転送を指示することもある。この場合ロードバッファ111を経由して主記憶装置112から読み出したデータを指定されたレジスタ105に書き込んだり、ストアバッファ110を経由してレジスタ105に保持されたデータを主記憶装置112に書き込んだり等の処理を行う。【００４８】
また、出力選択回路104は、命令制御部108からの指示に従って、任意の1以上のレジスタ105の出力を選択して、演算器102、入力選択回路103およびストアバッファ110のうちの任意の1以上の回路に出力でき、入力選択回路103は、命令制御部108からの指示に従って、出力選択回路104、演算器102およびロードバッファ111のうちの任意の1以上の回路の出力を選択して、任意の1以上のレジスタ105に出力できる。命令制御部108は、出力選択回路104および入力選択回路103における選択動作を制御することにより、レジスタ間コピー命令によるコピー動作と演算命令とを同時に実行する。【００４９】
本発明による情報処理装置は、さらにコピー情報保持装置113を有し、命令制御部108はレジスタ間コピー命令の実行にかかる情報をここに保持し、参照・更新しながらレジスタファイル101、演算器102の動作を制御する。【００５０】
コピー情報保持装置113に保持されているデータについて、図２を用いて説明する。図２はコピー情報保持装置113の実現手段の一例を示している。この例では、コピー情報保持装置113はコピー予約テーブル201とデータ参照テーブル202の二つのテーブルから構成されている。【００５１】
コピー予約テーブル201は、命令セットで指定可能なレジスタの数と同数のエントリを有し、各エントリはレジスタ番号に１対１に対応している。コピー元予約ビット203は、そのエントリが対応するレジスタ番号のレジスタをソースオペランドとして指定するレジスタ間コピー命令が発行されたか否かを示す。コピー元予約ビット203がセットされている場合、予約されているデータコピー動作においてデスティネーションオペランドとして指定されたレジスタ番号がコピー先レジスタ番号204に記録されている。【００５２】
データ参照テーブル202は、命令セットで指定可能なレジスタの数と同数のエントリを有し、各エントリはレジスタ番号に１対１に対応している。コピー先予約ビット205は、そのエントリが対応するレジスタ番号のレジスタをデスティネーションオペランドとして指定するレジスタ間コピー命令が発行されたか否かを示す。コピー先予約ビット205がセットされている場合、予約されているデータコピー動作においてソースオペランドとして指定されたレジスタ番号が、参照レジスタ番号206に記録されている。【００５３】
コピー情報保持装置113は、このように発行済みでデータコピー動作は未実行であるレジスタ間コピー命令の情報を保持しておく装置である。レジスタ間コピー命令において指定されたソースレジスタ番号とデスティネーションレジスタ番号とが相互に参照可能になっていればよく、実現方式については本実施例に記載の方式に限定されるものではない。【００５４】
次に、本実施例の動作を、命令制御部108におけるコピー情報保持装置113の参照・更新動作を中心に説明する。【００５５】
まず、命令制御部108がレジスタの参照・更新を行う命令の、実行前に（つまり解釈フェーズにおいて）行う処理について説明する。図３は解釈フェーズにおける当該処理の動作を示すフローチャートであるが、本発明の特徴的な部分であるコピー情報保持装置113の参照・更新にかかる部分についてのみ記載している。それ以外の部分については通常のマイクロプロセッサの動作と同等であるため、記載を省略している。【００５６】
まず、命令制御部108は状態301において、当該命令でデスティネーションオペランドとして指定されたレジスタのコピー先予約ビット205をチェックする。コピー先予約ビット205が"0"に設定されていた場合には状態302に遷移し、"1"に設定されていた場合には状態304に遷移する。【００５７】
状態304では、当該命令がマスク付き演算命令であるかどうかをチェックする（この判定は明らかに、ベクトルプロセッサに特有のものであり、本発明を通常のマイクロプロセッサに適用する場合には省略される）。マスク付き演算命令であった場合には状態306に遷移し、マスク付き演算命令ではなかった場合には状態305に遷移する。【００５８】
状態306では、当該命令と予約されたレジスタ間コピー命令によって指定されたデータコピー動作を同時に実行する。より具体的には、当該命令のデスティネーションオペランドとして指定されたレジスタの、参照レジスタ番号206に記録されたレジスタ105からデータ（以下、コピーデータ）を出力し、出力選択回路104を経由して入力選択回路103に入力される。また、当該演算命令が同時に実行され、その結果（以下、演算結果）も入力選択回路103に入力される。入力選択回路103では、マスクビット（図示せず）に応じてデータコピー動作の操作対象となったデータと演算結果のいずれかを選択し、当該命令のデスティネーションレジスタに書き込みを行う。【００５９】
状態305においては、過去に予約されたレジスタ間コピー命令の結果を当該命令が上書きすることになるため、過去に予約されたデータコピー動作の実行がキャンセルされる。具体的には、当該コピー先予約ビット205を"0"にリセットし、参照レジスタ番号206に記録されたレジスタの、コピー元予約ビット203を"0"にリセットする。その後、状態302に遷移する。【００６０】
状態302では、当該命令でソースオペランドとして指定されたレジスタのコピー元予約ビット203およびコピー先予約ビット205が"1"にセットされているかをチェックする。いずれかが"1"にセットされていた場合は状態307に遷移し、ともに"0"に設定されていた場合は状態303に遷移する。【００６１】
状態307では、当該命令と、予約されたレジスタ間コピー命令によるデータコピー動作を同時に実行する。より具体的には、ソースレジスタのコピー元予約ビット203が"1"であった場合、ソースレジスタから読み出されたデータを、当該命令の実行に使用すると同時に、出力選択回路104、入力選択回路103を通じて、コピー先レジスタ番号204に指定されたレジスタ105に対して書き込みを行う。また、ソースレジスタのコピー先予約ビット205が"1"であった場合には、参照レジスタ番号206に記録されたレジスタ105から読み出されたデータ（コピー元データ）を、当該命令の実行に使用すると同時に、当該命令のソースレジスタとして指定されたレジスタ105（予約されたレジスタ間コピー命令のデスティネーションレジスタ）に対して書き込みを行う。【００６２】
状態303では、当該命令でデスティネーションオペランドとして指定されたレジスタのコピー元予約ビット203が"1"にセットされているか否かを確認する。"1"にセットされていた場合には状態308に遷移し、"0"にセットされていた場合には状態309に遷移する。【００６３】
状態308は、当該命令が、予約されているデータコピー動作の、コピー元となったレジスタに対する更新命令であることを示している。本実施例の場合、コピー元データの破壊を防止するために、命令制御部108は予約されているデータコピー動作を即時に実行し、次に当該命令を実行するように制御する。予約されていたデータコピー動作が実行されるにあたり、該データコピー動作のコピー元として設定されていたレジスタのコピー元予約ビット203、および該データコピー動作のコピー先として設定されていたレジスタのコピー先予約ビット205が、"0"にリセットされる。【００６４】
状態309は通常の命令実行フェーズであり、当該命令を実行する。【００６５】
次に、命令制御部108がレジスタ間コピー命令の実行フェーズにおいて行う処理について説明する（なお、レジスタ間コピー命令もまた、レジスタの参照・更新を行う命令であるため、実行前に既に図３に示したフローチャートの処理は終了している）。命令制御部108はレジスタ間コピー命令の実行フェーズにおいてコピー情報保持装置113の参照・更新を行う。具体的には、該レジスタ間コピー命令のソースレジスタのコピー元予約ビット203を"1"にセットし、デスティネーションレジスタ番号をコピー先レジスタ番号204に記録する。さらに、デスティネーションレジスタのコピー先予約ビット205を"1"にセットし、ソースレジスタ番号を参照レジスタ番号206に記録する。【００６６】
(第一の動作例)
第一の動作例として、図４(a)に示した命令を実行した場合の動作について、図５、図６を用いて説明する。図４(a)は、順に実行される命令列の一部を抜き出したものである。図５は、命令(1)の実行前後におけるコピー情報保持装置113の状態を示したものである。図６は、命令(2)の実行フェーズにおけるデータの流れを示している。【００６７】
命令(1)はベクトルレジスタ間のコピー命令であり、ベクトルレジスタVR1に保持された各要素をベクトルレジスタVR2の各要素にコピーすることを指示している（レジスタ間コピーを指示する命令は命令セットアーキテクチャにおいてムーブ命令として提供されることが多いため、実施例では"MOV"と記述する）。命令(2)はベクトルレジスタ間の加算命令であり、ベクトルレジスタVR2とベクトルレジスタVR3の各要素を加算し、結果をベクトルレジスタVR4の各要素として格納することを指示している。【００６８】
図５の初期状態（つまり命令(1)の実行前）においては、ベクトルレジスタVR1〜VR4のコピー元予約ビット203、コピー先予約ビット205は全て"0"が設定されている。これは、ベクトルレジスタVR1,VR2に関して、命令(1)に先行するレジスタ間コピー命令によるデータコピー動作は予約されていないことを意味している。【００６９】
命令制御部108は命令(1)を命令キャッシュ109から受け取り、解釈する。まず、命令(1)で指定されたソースレジスタVR1とデスティネーションレジスタVR2について、コピー元予約ビット203とコピー先予約ビット205の状態を確認する。図３において、状態301→302→303→309と遷移し、当該命令のみを通常実行することになる。実行フェーズにおいては、図５に示すようにコピー情報保持装置113の状態を更新する。すなわち、ソースレジスタVR1からデスティネーションレジスタVR2へのデータコピー動作を予約するため、VR1のコピー元予約ビット203に"1"を、VR2のコピー先予約ビット205に"1"をセットする。また、コピー先レジスタ番号204と参照レジスタ番号206の設定を行う。命令制御部108はこれで命令(1)の実行フェーズを終了する。【００７０】
命令制御部108は後続の命令（命令(1)と命令(2)の間に出現する命令）についても図３のフローチャートに沿った処理を行う。命令(1)と命令(2)の間に出現する命令は、ベクトルレジスタVR1,VR2をオペランドとして指定していないものと仮定しており、状態301→302→303→309と遷移し、当該命令のみを通常実行する。【００７１】
次に命令(2)による命令制御部108の動作を説明する。この命令はソースオペランドとして、コピー命令(1)のデスティネーションレジスタであるベクトルレジスタVR2が指定されている。状態301では、デスティネーションレジスタVR4のコピー先予約ビット205を確認し、"0"が設定されているため状態302に遷移する。状態302では、ソースレジスタVR2,VR3のうち、VR2のコピー先予約ビット205が"1"にセットされているため、状態307に遷移し、命令(1)と命令(2)を同時に実行するよう、演算器102およびレジスタファイル101に指示する。【００７２】
図６を参照して、演算の実行時の様子を説明する。
命令(2)のソースオペランドはベクトルレジスタVR2とベクトルレジスタVR3であるが、このうちベクトルレジスタVR2はコピー先予約ビット205が"1"に設定されているため、参照レジスタ番号206に記録されたベクトルレジスタVR1に読み替えられる。ベクトルレジスタVR1の出力は、出力選択回路104によって加算器106へ入力されると同時に、入力選択回路103に入力される。ベクトルレジスタVR3の出力は、出力選択回路104によって加算器106に入力される。加算器106は、二つのベクトルレジスタVR1,VR3からの入力要素をそれぞれ加算して結果を入力選択回路103に送る。入力選択回路103は、ベクトルレジスタVR1から出力選択回路104を経由して受けたデータをベクトルレジスタVR2に書き込み、同時に加算器106の出力データをベクトルレジスタVR4に書き込む。これによって、レジスタ間コピー命令(1)によるデータコピー動作と、加算命令(2)による加算処理が同時に実行され、命令(1)の実行に要する時間は完全に隠蔽されることになる。【００７３】
(第二の動作例)
第二の動作例として、図４(b)に示した命令を実行した場合の動作について説明する。図４(b)は、順に実行される命令列の一部を抜き出したものである。【００７４】
命令(1)の実行にかかる動作は、第一の動作例と変わらない。これによってコピー情報保持装置113の状態は図５の（イ）に示したように更新される。【００７５】
命令(2)による命令制御部108の動作を説明する。この命令はデスティネーションオペランドとして、コピー命令(1)のソースレジスタであるベクトルレジスタVR1が指定されている。状態301では、デスティネーションレジスタVR1のコピー先予約ビット205を確認し、"0"が設定されているため状態302に遷移する。状態302では、ソースレジスタVR3,VR4のコピー元予約ビット203およびコピー先予約ビット205を参照し、全て"0"にセットされているため、状態303に遷移する。状態303では、デスティネーションレジスタVR1のコピー元予約ビット203をチェックし、"1"がセットされているために状態308に遷移する。【００７６】
状態308は、データコピー動作と演算を同時には実行できないことを示している。したがって、命令制御部108は、コピー命令(1)によって予約されていたデータコピー動作の即時実行を指示し、次に命令(2)を実行する。この場合は本実施例による性能上の改善は得られない（後述の第二の実施例ではこの点についても性能改善を図ることができる）。【００７７】
本実施例ではデータコピー動作の実行が遅れることになるため、本発明の実施によって逆に性能が低下する危険性がある。本実施例ではデータコピー動作の遅延実行による性能低下を避けるため、ソフトウェアによってコピー命令の即時実行を強制する機能を有する。命令制御部108は、命令実行フェーズにおいてデータコピー動作の予約登録を行い実際のデータコピー動作を行わないレジスタ間コピー命令と、命令実行フェーズにおいて即時にコピー動作を行う強制レジスタ間コピー命令の２つの命令を解釈、実行できるように構成される。ソフトウェアは、レジスタ間コピー命令の実行後、後続命令において該コピー命令のソースレジスタに対する書き込みを行うことが明らかな場合、レジスタ間コピー命令ではなく強制レジスタ間コピー命令を実行するように命令列を書き換える。【００７８】
(第三の動作例)
第三の動作例として、図４(c)に示した命令を実行した場合の動作について説明する。図４(c)は、順に実行される命令列の一部を抜き出したものである。【００７９】
命令(2)（ADDM）はベクトルレジスタ間のマスク付き加算命令である。別のレジスタに保持されているマスクパターンに従って加算の実行を制御する。この例では、マスクビットが"1"にセットされている要素についてのみ、ベクトルレジスタVR3とベクトルレジスタVR4の該当する要素同士を加算し、結果をベクトルレジスタVR2の対応する要素として格納することを指示している。マスクビットが"0"にセットされている要素については、デスティネーションレジスタVR2のデータは変化しない。【００８０】
命令(1)の実行にかかる動作は、第一の動作例と変わらない。これによってコピー情報保持装置113の状態は図５の（イ）に示したように更新される。【００８１】
命令(2)による命令制御部108の動作を説明する。この命令ではデスティネーションオペランドとして、コピー命令(1)のデスティネーションレジスタであるベクトルレジスタVR2が指定されている。状態301では、デスティネーションレジスタVR2のコピー先予約ビット205を確認し、"1"が設定されているため状態304に遷移する。状態304では当該命令がマスク付き演算命令であるために状態306に遷移し、命令(1)と命令(2)を同時に実行するよう、演算器102およびレジスタファイル101に指示する。【００８２】
演算の実行時の様子を図７を用いて説明する。命令(2)のソースオペランドはベクトルレジスタVR3とベクトルレジスタVR4であり、これらのレジスタから読み出されたデータは順次加算器106に入力される。加算器106は、二つのベクトルレジスタからの入力要素をそれぞれ加算して結果を入力選択回路103に送る。命令(2)のデスティネーションオペランドはベクトルレジスタVR2であるが、コピー先予約ビット205がセットされているため、参照レジスタ番号206で指定されたベクトルレジスタVR1のデータが読み出され、出力選択回路104を経由して入力選択回路103へと入力される。入力選択回路103は、ベクトルレジスタVR1からの出力データと加算器106の出力データを待ち合わせ、マスクレジスタ（図示せず）に格納されたビットパターンに従っていずれかを選択してベクトルレジスタVR2に書き込む。即ち、マスクビットが"1"にセットされている要素については加算器106の出力を選択してベクトルレジスタVR2に書き込み、マスクビットが"0"にセットされている要素についてはベクトルレジスタVR1の出力を選択してベクトルレジスタVR2に書き込む。これによって、命令(1)によるレジスタ間コピー命令と、命令(2)による加算命令が同時に実行され、命令(1)の実行に要する時間は完全に隠蔽されることになる。【００８３】
(第二の実施例)
次に、本発明の第二の実施例について説明する。
本発明の第二の実施例では、レジスタリネーミング機能を備えることで、第一の実施例における、第二の動作例において性能改善が見られないという問題を解決する。【００８４】
第二の動作例は、予約されているデータコピー動作のコピー元レジスタと、後続命令のデスティネーションレジスタが一致した場合に、本発明の第一の実施例では性能改善が期待できないという問題を例示したものである。第二の実施例では、レジスタリネーミング機能によって、予約されているデータコピー動作の、コピー元レジスタ番号とコピー先レジスタ番号がそれぞれ指し示す物理的なレジスタ番号を入れ替えることで、上記レジスタ番号の一致を回避する。以下に第二の実施例の構成および動作の詳細を示すが、以下の説明は本発明の構成、動作手順を限定するものではない。【００８５】
図８は第二の実施例による情報処理装置における主要機能部分の構成を示すブロック図である。基本的な構成は第一の実施例における構成（図１）と変わらないが、命令制御部108は内部にレジスタ名変換テーブル801を備える。レジスタ名変換テーブル801は、命令によって指定される論理レジスタ番号を物理的なレジスタ番号に変換するテーブルである。論理レジスタ番号の指定するエントリに、物理レジスタ番号が記録されている。命令制御部108がレジスタファイル105にアクセスする際、レジスタ名変換テーブル801によって、論理レジスタ番号から物理レジスタ番号への変換が行われる。コピー情報保持装置113の構成は図２と同じである。【００８６】
次に第二の実施例の動作について説明する。【００８７】
図９に、命令制御部108がレジスタの参照・更新を行う命令の、実行前に（つまり解釈フェーズにおいて）行う処理のフローチャートを示す。図３の場合と同様に、本発明の特徴的な部分のみを記載し、通常のマイクロプロセッサの動作と同等である動作については記載を省略している。図９では、状態303においてデスティネーションレジスタのコピー元予約ビットが"1"にセットされていた場合、以降の動作が図３に示した第一の実施例と異なる。以下では図３との差分のみ説明する。【００８８】
状態901では、当該命令のデスティネーションレジスタ名が、予約されたデータコピー動作のソースレジスタ名と同一になっている。命令制御部108はコピー先レジスタ番号204に記録されたレジスタ番号（予約されたデータコピー動作のデスティネーションレジスタ名）を読み出し、命令制御部108内に保持されている当該命令のデスティネーションレジスタ名を、該予約されたコピー命令のデスティネーションレジスタ名に書き換える。これによって、当該命令の結果格納先が変更される。その後、状態902に遷移する。【００８９】
状態902では、当該命令がマスク付き演算命令であるかどうかをチェックする（この判定は明らかに、ベクトルプロセッサに特有のものであり、本発明を通常のマイクロプロセッサに適用する場合には省略される）。マスク付き演算命令であった場合には状態904に遷移し、マスク付き演算命令ではなかった場合には状態903に遷移する。【００９０】
状態903では当該命令を実行する。但し、当該命令のデスティネーションレジスタ名は状態901において既に書き換えられているため、命令制御部108は、命令で指定されたデスティネーションレジスタではなく、書き換えられたデスティネーションレジスタに結果を格納する。この場合は予約されていたデータコピー動作はキャンセルされるが、コピー情報保持装置113のエントリは状態905において削除されるため、この時点ではコピー情報保持装置113への操作は行わない。【００９１】
状態904では、当該命令と、予約されているデータコピー動作を同時実行する。但し、当該命令のデスティネーションレジスタ名は、状態901において既に書き換えられているため、命令制御部108は、命令で指定されたデスティネーションレジスタではなく、書き換えられたデスティネーションレジスタに結果を格納する。入力選択回路103において、データコピー動作の出力結果と当該命令の出力結果を待ち合わせ、設定されたマスクパターンに従って、各要素ごとにいずれか一方を選択してデスティネーションレジスタに書き込む。選択されなかったもう一方の入力は破棄される。終了後、状態905に遷移する。【００９２】
状態905では、まず、コピー情報保持装置113に保持されているデータコピー動作の予約を削除する。具体的には、データ参照テーブル202において当該命令のデスティネーションレジスタ番号（状態901にて書き換え済み）のエントリに対して、コピー先予約ビット205を"0"にリセットし、参照レジスタ番号206を読み出す。コピー予約テーブル201に対しては、該参照レジスタ番号206によって指定されるエントリの、コピー元予約ビット203を"0"にリセットする。次に、レジスタリネーミング機能によって、予約されていたデータコピー動作のソースレジスタ名とデスティネーションレジスタ名を入れ替える。具体的には、まず命令制御部108が、該参照レジスタ番号206と、該参照レジスタ番号206の指定するエントリのコピー先レジスタ番号204を読み出す。次に、レジスタ名変換テーブル801において、該参照レジスタ番号206で指定されたエントリに格納されている値と、該コピー先レジスタ番号204で指定されたエントリに格納されている値を入れ替える。【００９３】
上記以外の動作については、第一の実施例と同じである。【００９４】
次に、第二の実施例における動作例を説明する。【００９５】
(第四の動作例)
まず第四の動作例として、図１０に示す命令列(a)による動作について説明する。命令列(a)は、順に実行される命令列の一部を抜き出したものである。【００９６】
命令(1)の実行にかかる動作は、第一の動作例と変わらない。これによってコピー情報保持装置113の状態は図５の（イ）に示したように更新される。この時点でのレジスタ名変換テーブル801の内容の例を図１１の（ア）に示す。【００９７】
命令(2)による命令制御部108の動作を説明する。この命令はデスティネーションオペランドとして、コピー命令(1)のソースレジスタであるベクトルレジスタVR1が指定されている。状態301では、デスティネーションレジスタVR1のコピー先予約ビット205を確認し、"0"が設定されているため状態302に遷移する。状態302では、ソースレジスタVR3,VR4のコピー元予約ビット203およびコピー先予約ビット205を参照し、全て"0"にセットされているため、状態303に遷移する。状態303では、デスティネーションレジスタVR1のコピー元予約ビット203をチェックし、"1"がセットされているために状態901に遷移する。【００９８】
状態901では、当該命令のデスティネーションレジスタを書き換える。命令制御部108は実行中の命令(2)についてのデスティネーションレジスタ番号を保持する手段（図示せず）を有し、該保持手段には当該命令のデスティネーションレジスタ番号としてVR1が保持されている。命令制御部108は、コピー予約テーブル201のVR1に対応するエントリを検索し、コピー先レジスタ番号204に記録されているレジスタ番号VR2を読み出し、該保持手段に保持されている内容をVR1からVR2に書き換える。【００９９】
当該命令(2)はマスク付き演算命令ではないため、状態902から状態903に遷移する。状態903では当該演算命令(2)を実行する。演算実行時のデータの流れを図１２に示す。ソースオペランドはVR3,VR4が指定されているが、レジスタ名変換テーブル801（図１１（ア））によって物理レジスタ番号PR3,PR4に変換される。命令制御部108は、物理レジスタPR3,
PR4に対してデータの出力を指示し、各データ要素は出力選択回路104を経由して、加算器106に入力される。加算器106は各要素のペアに対して加算を実行し、結果を入力選択回路103に出力する。入力選択回路103が結果を書き込む先は命令制御部108によって指定される。デスティネーションオペランドとしてはVR2が指定されているため、レジスタ名変換テーブルによって物理レジスタ番号PR2に変換され、入力選択回路103は演算結果を物理レジスタPR2に書き込む。【０１００】
当該命令(2)の実行後、状態905においてコピー情報保持装置113に保持されているデータコピー動作の予約を削除する。まず、当該命令(2)のデスティネーションレジスタ番号VR2に対するコピー先予約ビット205を"0"にリセットし、参照レジスタ番号206としてレジスタ番号VR1を読み出す。次に読み出されたVR1をキーとしてコピー予約テーブル201を検索し、該当するコピー元予約ビット203を"0"にリセットし、該当するコピー先レジスタ番号204としてVR2を読み出す。【０１０１】
次にレジスタリネーミング処理を行う。具体的には、参照レジスタ番号206から読み出したレジスタ番号VR1とコピー先レジスタ番号204から読み出されたレジスタ番号VR2によってレジスタ名変換テーブル801を検索し、登録されている値を互いに入れ替える。この場合レジスタ番号VR1のエントリに対しては、物理レジスタ名PR1をPR2に書き換え、レジスタ番号VR2のエントリに対しては物理レジスタ名PR2をPR1に書き換える。これによってレジスタ名変換テーブルの内容は図１１（ア）から（イ）に変化する。【０１０２】
この結果、当該命令(2)によって指定されたデスティネーションレジスタVR1には命令(2)による演算結果が格納され、予約されたレジスタ間コピー命令(1)によって指定されたデスティネーションレジスタVR2には、演算実行前のVR1の内容が格納されたことになる。また、このときレジスタ間コピー命令(1)の実行時間は当該演算命令(2)の実行時間によって隠蔽されている。【０１０３】
(第五の動作例)
次に第五の動作例として、図１０(b)に示した命令を実行した場合の動作について説明する。図１０(b)は、順に実行される命令列の一部を抜き出したものである。【０１０４】
命令(1)の実行にかかる動作は、第一の動作例と変わらない。これによってコピー情報保持装置113の状態は図５の（イ）に示したように更新される。この時点でのレジスタ名変換テーブル801の内容の例を図１１の（ア）に示す。【０１０５】
命令(2)（ADDM）はベクトルレジスタ間のマスク付き加算命令である。別のレジスタに保持されているマスクパターンに従って加算の実行を制御する。この例では、マスクビットが"1"にセットされている要素についてのみ、ベクトルレジスタVR3とベクトルレジスタVR4の該当する要素同士を加算し、結果をベクトルレジスタVR1の対応する要素として格納することを指示している。マスクビットが"0"にセットされている要素については、デスティネーションレジスタVR1のデータは変化しない。【０１０６】
命令(2)による命令制御部108の動作を説明する。この命令はデスティネーションオペランドとして、コピー命令(1)のソースレジスタであるベクトルレジスタVR1が指定されている。状態301では、デスティネーションレジスタVR1のコピー先予約ビット205を確認し、"0"が設定されているため状態302に遷移する。状態302では、ソースレジスタVR3,VR4のコピー元予約ビット203およびコピー先予約ビット205を参照し、全て"0"にセットされているため、状態303に遷移する。状態303では、デスティネーションレジスタVR1のコピー元予約ビット203をチェックし、"1"がセットされているために状態901に遷移する。【０１０７】
状態901では、当該命令のデスティネーションレジスタを書き換える。命令制御部108は実行中の命令(2)についてのデスティネーションレジスタ番号を保持する手段（図示せず）を有し、該保持手段には当該命令のデスティネーションレジスタ番号としてVR1が保持されている。命令制御部108は、データ参照テーブル202のVR1に対応するエントリを検索し、参照レジスタ番号206に記録されているレジスタ番号VR2を読み出し、該保持手段に保持されている内容をVR1からVR2に書き換える。【０１０８】
当該命令(2)はマスク付き演算命令であるため、状態902から状態904に遷移する。状態904では当該演算命令(2)と予約されているデータコピー動作を実行する。データの流れを図１３に示す。ソースオペランドはVR3,VR4が指定されているが、レジスタ名変換テーブル801（図１１（ア））によって物理レジスタ番号PR3,
PR4に変換される。命令制御部108は、物理レジスタPR3,PR4に対してデータの出力を指示し、各データ要素は出力選択回路104を経由して、加算器106に入力される。加算器106は各要素のペアに対して加算を実行し、結果を入力選択回路103に出力する。一方、当該命令(2)のデスティネーションレジスタ番号（状態901で書き換え済み）VR2に対応する参照レジスタ番号206からレジスタ番号VR1を読み出し、レジスタVR1からのデータコピー動作を同時実行する。このため命令制御部108はレジスタ名変換テーブル801によってレジスタ番号VR1を物理レジスタ番号PR1に変換し、レジスタPR1からの出力を指示する。レジスタPR1のデータ要素は出力選択回路104を経由して入力選択回路103に入力される。入力選択回路103が結果を書き込む先は命令制御部108によって指定される。デスティネーションオペランドとしてはVR2が指定されているため、レジスタ名変換テーブルによって物理レジスタ番号PR2に変換される。入力選択回路103は、レジスタPR1からの出力データと加算器106の出力データを待ち合わせ、マスクレジスタ（図示せず）に格納されたビットパターンに従って各要素ごとにいずれかを選択し、レジスタPR2に書き込む。もう一方の書き込まないデータは破棄される。【０１０９】
当該命令(2)と予約されていたデータコピー動作の実行後、状態905においてコピー情報保持装置113に保持されているデータコピー動作の予約を削除する。まず、当該命令(2)のデスティネーションレジスタ番号VR2に対するコピー先予約ビット205を"0"にリセットし、参照レジスタ番号206としてレジスタ番号VR1を読み出す。次に読み出されたVR1をキーとしてコピー予約テーブル201を検索し、該当するコピー元予約ビット203を"0"にリセットし、該当するコピー先レジスタ番号204としてVR2を読み出す。【０１１０】
次にレジスタリネーミング処理を行う。具体的には、参照レジスタ番号206から読み出したレジスタ番号VR1とコピー先レジスタ番号204から読み出されたレジスタ番号VR2によってレジスタ名変更テーブル801を検索し、登録されている値を互いに入れ替える。この場合レジスタ番号VR1のエントリに対しては、物理レジスタ名PR1をPR2に書き換え、レジスタ番号VR2のエントリに対しては物理レジスタ名PR2をPR1に書き換える。これによってレジスタ名変換テーブルの内容は図１１（ア）から（イ）に変化する。【０１１１】
この結果、予約されたレジスタ間コピー命令(1)によって指定されたデスティネーションレジスタVR2には、演算実行前のVR1の内容が格納され、当該命令(2)によって指定されたデスティネーションレジスタVR1には命令(2)によるマスク付き演算結果が格納されたことになる。また、このときレジスタ間コピー命令(1)の実行時間は当該演算命令(2)の実行時間によって隠蔽されている。【０１１２】
(第三の実施例)
本発明のさらに他の実施の形態として、nビット幅の複数のデータをm個連結して(n x m)ビット幅の一つのレジスタとして扱うSIMD命令形式を備えたプロセッサにも適用可能である。SIMD命令形式を備えたプロセッサでは、nビットデータ単位でマスク制御を行うマスク付き演算命令を実行可能である。この場合、第三の動作例においてマスク付き演算命令の結果を書き込む場合、あらかじめ指定されたmビットのマスクパターンに従って、レジスタ内の各nビット幅データについて書き込みを制御する。具体的には、入力選択回路103においてレジスタ間コピー命令の操作対象となったデータと、演算命令による演算結果データを待ち合わせる。入力選択回路103は、各nビット幅データに対し、mビットマスクパターンに従っていずれかを選択してレジスタVR2に書き込む。【０１１３】
(第四の実施例)
また本発明の実施例を、同一レジスタをソースオペランドとして指定する複数のレジスタ間コピー命令を記録できるように拡張することも困難ではない。この場合はコピー先レジスタ番号204に複数のレジスタ番号を記録できるようにし、入力選択回路103において指定された数のコピー先レジスタにデータを出力するように構成すればよい。
以上の説明は本発明の好適な実施の形態の単なる例証であり、本発明の範囲はこれに限定されない。本発明に関する更に多くの変形例や改造例が本発明の範囲を逸脱することなく当該技術の熟達者によって容易に想到され得るであろう。
【産業上の利用可能性】
【０１１４】
本発明によれば、通常のマイクロプロセッサにおいて、ハードウェア上の改造のみによって、レジスタ間コピー命令によるデータコピー動作の実行を、同じデータを使用する演算命令の実行に同期させることで、レジスタ間コピー命令の実行時間を隠蔽することができる。また、対象となるレジスタ間コピー命令と同じデータを使用する演算命令とが命令列中で離れて出現する場合にも適用可能であることから、レジスタ間コピー命令の実行時間を削減させることができる。従って、情報処理装置の高速動作に大いに貢献する。
【図１】
0005051452.tif 000002
【図２】
0005051452.tif 000003
【図３】
0005051452.tif 000004
【図４】
0005051452.tif 000005
【図５】
0005051452.tif 000006
【図６】
0005051452.tif 000007
【図７】
0005051452.tif 000008
【図８】
0005051452.tif 000009
【図９】
0005051452.tif 000010
【図１０】
0005051452.tif 000011
【図１１】
0005051452.tif 000012
【図１２】
0005051452.tif 000013
【図１３】
0005051452.tif 000014
【図１４】
0005051452.tif 000015
【図１５】
0005051452.tif 000016