(57)【特許請求の範囲】
【請求項１】
ベクトル演算を実行するベクトルプロセッサのベクトルレジスタリネーミング制御方式であって、前記ベクトルレジスタは、１つの論理レジスタに最大２つの物理レジスタが割り当てられるものであり、
前記論理レジスタに対するライトを生じさせた最後の命令のベクトル長を記憶する手段と、
実行する命令のベクトル長と前記論理レジスタに対するライトを生じさせた最後の命令の前記ベクトル長の大小を比較する手段と、
実行する命令のベクトル長と、実行する命令にとってのデスティネーションレジスタである論理レジスタに対するライトを生じさせた最後の命令のベクトル長との大小比較結果に従って、前記デスティネーションレジスタに対する前記物理レジスタの新規割り当てと演算幅とを制御する手段と、
実行する命令のベクトル長と、実行する命令にとってのソースレジスタである論理レジスタに対するライトを生じさせた最後の命令のベクトル長との大小比較結果に従って、前記ソースレジスタに対する前記物理レジスタと前記論理レジスタとの依存関係を生成する手段と、
実行する命令のベクトル長と、実行する命令にとってのデスティネーションレジスタである論理レジスタに対するライトを生じさせた最後の命令のベクトル長との大小比較結果と、前記実行する命令がマスク演算であるか否かに従って、前記デスティネーションレジスタの非更新部分のデータコピーを行うための依存関係を生成する手段とを有する、ベクトルレジスタリネーミング制御方式。
【請求項２】
前記制御する手段は、
実行する命令にとってのデスティネーションレジスタである論理レジスタに対するライトを生じさせた最後の命令の前記ベクトル長と、実行する命令のベクトル長とが等しいとき、又は、実行する命令にとってのデスティネーションレジスタである論理レジスタに対するライトを生じさせた最後の命令の前記ベクトル長より、実行する命令のベクトル長が大きいときには、前記デスティネーションレジスタである前記論理レジスタに対して、新たな物理レジスタを割り当てるとともに、当該論理レジスタに割り当てられていた２つの物理レジスタのうち、当該論理レジスタに対するライトを生じさせた最後の命令の前記ベクトル長を超える部分のデータを保持していたほうの物理レジスタを割り当て、
実行する命令にとってのデスティネーションレジスタである論理レジスタに対するライトを生じさせた最後の命令の前記ベクトル長より、実行する命令のベクトル長が小さいときには、前記デスティネーションレジスタである前記論理レジスタに新たな物理レジスタを割り当てるとともに、それ以外の物理レジスタは割り当てない、請求項１に記載のベクトルレジスタリネーミング制御方式。
【請求項３】
演算に使用するソースレジスタである論理レジスタに２つの物理レジスタが割り当てられており、前記物理レジスタをリードする場合には、
前記ソースレジスタに対する前記物理レジスタと前記論理レジスタとの依存関係を生成する手段は、
実行する命令にとってのソースレジスタである論理レジスタに対するライトを生じさせた最後の命令の前記ベクトル長と、実行する命令のベクトル長とが等しいとき、又は、実行する命令にとってのソースレジスタである論理レジスタに対するライトを生じさせた最後の命令の前記ベクトル長より、実行する命令のベクトル長が小さいときには、前記２つの物理レジスタのうちの前記最後の命令のベクトル長に含まれる部分のデータを保持していたほうの物理レジスタに対して依存関係を生成し、
実行する命令にとってのソースレジスタである論理レジスタに対するライトを生じさせた最後の命令の前記ベクトル長より、実行する命令のベクトル長が大きいときには、前記２つの物理レジスタの両方に対して依存関係を生成する、請求項１又は請求項２に記載のベクトルレジスタリネーミング制御方式。
【請求項４】
前記デスティネーションレジスタの非更新部分のデータコピーを行うための依存関係を生成する手段は、
実行する命令がマスク演算あり命令であり、かつ、実行する命令にとってのデスティネーションレジスタである論理レジスタに対するライトを生じさせた最後の命令のベクトル長と、実行する命令のベクトル長が等しいときには、実行する命令にとってのデスティネーションレジスタである論理レジスタに割り当てられていた２つの物理レジスタのうち、前記最後の命令のベクトル長に含まれる部分のデータを保持していたほうの物理レジスタに対して依存関係を生成し、
実行する命令がマスク演算あり命令であり、かつ、実行する命令にとってのデスティネーションレジスタである論理レジスタに対するライトを生じさせた最後の命令のベクトル長よりも、実行する命令のベクトル長が大きいときには、実行する命令にとってのデスティネーションレジスタである論理レジスタに割り当てられていた２つの物理レジスタの両方に対して依存関係を生成し、
実行する命令がマスク演算あり命令またはマスク演算なし命令のいずれであっても、実行する命令にとってのデスティネーションレジスタである論理レジスタに対するライトを生じさせた最後の命令のベクトル長よりも、実行する命令のベクトル長が小さい場合には、実行する命令にとってのデスティネーションレジスタである論理レジスタに割り当てられていた２つの物理レジスタの両方に対して依存関係を生成する、請求項１乃至請求項３のいずれか一項に記載のベクトルレジスタリネーミング制御方式。
【請求項５】
１つの論理レジスタに最大２つの物理レジスタが割り当てられるベクトルレジスタと、
前記ベクトルレジスタが保持する内容について演算を実行する演算器と、
前記論理レジスタに対するライトを生じさせた最後の命令のベクトル長を記憶する手段と、
実行する命令のベクトル長と前記論理レジスタに対するライトを生じさせた最後の命令の前記ベクトル長の大小を比較する手段と、
実行する命令のベクトル長と、実行する命令にとってのデスティネーションレジスタである論理レジスタに対するライトを生じさせた最後の命令のベクトル長との大小比較結果に従って、デスティネーションレジスタに対する前記物理レジスタの新規割り当てと演算幅とを制御する手段と、
実行する命令のベクトル長と、実行する命令にとってのソースレジスタである論理レジスタに対するライトを生じさせた最後の命令のベクトル長との前記大小比較結果に従って、前記ソースレジスタに対する前記物理レジスタと前記論理レジスタとの依存関係を生成する手段と、
実行する命令のベクトル長と、実行する命令にとってのデスティネーションレジスタである論理レジスタに対するライトを生じさせた最後の命令のベクトル長との大小比較結果と、前記実行する命令がマスク演算であるか否かに従って、前記デスティネーションレジスタの非更新部分のデータコピーを行うための依存関係を生成する手段とを有する、ベクトル演算を実行するベクトルプロセッサ。
【請求項６】
前記制御する手段は、
実行する命令にとってのデスティネーションレジスタである論理レジスタに対するライトを生じさせた最後の命令の前記ベクトル長と、実行する命令のベクトル長とが等しいとき、又は、実行する命令にとってのデスティネーションレジスタである論理レジスタに対するライトを生じさせた最後の命令の前記ベクトル長より、実行する命令のベクトル長が大きいときには、前記デスティネーションレジスタである前記論理レジスタに対して、新たな物理レジスタを割り当てるとともに、当該論理レジスタに割り当てられていた２つの物理レジスタのうち、当該論理レジスタに対するライトを生じさせた最後の命令の前記ベクトル長を超える部分のデータを保持していたほうの物理レジスタを割り当て、
実行する命令にとってのデスティネーションレジスタである論理レジスタに対するライトを生じさせた最後の命令の前記ベクトル長より、実行する命令のベクトル長が小さいときには、前記デスティネーションレジスタである前記論理レジスタに新たな物理レジスタを割り当てるとともに、それ以外の物理レジスタは割り当てず、
前記演算器は、
実行する命令にとってのデスティネーションレジスタである論理レジスタに対するライトを生じさせた最後の命令の前記ベクトル長と、実行する命令のベクトル長とが等しいとき、又は、実行する命令にとってのデスティネーションレジスタである論理レジスタに対するライトを生じさせた最後の命令の前記ベクトル長より、実行する命令のベクトル長が大きいときには、演算幅を前記実行する命令のベクトル長として命令を実行し、
実行する命令にとってのデスティネーションレジスタである論理レジスタに対するライトを生じさせた最後の命令の前記ベクトル長より、実行する命令のベクトル長が小さいときには、演算幅を最大ベクトル長として命令を実行する、請求項５に記載のベクトルプロセッサ。
【請求項７】
前記デスティネーションレジスタの非更新部分のデータコピーを行うための依存関係を生成する手段は、
実行する命令がマスク演算あり命令であり、かつ、実行する命令にとってのデスティネーションレジスタである論理レジスタに対するライトを生じさせた最後の命令のベクトル長と、実行する命令のベクトル長が等しいときには、実行する命令にとってのデスティネーションレジスタである論理レジスタに割り当てられていた２つの物理レジスタのうち、前記最後の命令のベクトル長に含まれる部分のデータを保持していたほうの物理レジスタに対して依存関係を生成し、
実行する命令がマスク演算あり命令であり、かつ、実行する命令にとってのデスティネーションレジスタである論理レジスタに対するライトを生じさせた最後の命令のベクトル長よりも、実行する命令のベクトル長が大きいときには、実行する命令にとってのデスティネーションレジスタである論理レジスタに割り当てられていた２つの物理レジスタの両方に対して依存関係を生成し、
実行する命令がマスク演算あり命令またはマスク演算なし命令のいずれであっても、実行する命令にとってのデスティネーションレジスタである論理レジスタに対するライトを生じさせた最後の命令のベクトル長よりも、実行する命令のベクトル長が小さい場合には、実行する命令にとってのデスティネーションレジスタである論理レジスタに割り当てられていた２つの物理レジスタの両方に対して依存関係を生成する、請求項５又は請求項６に記載のベクトルプロセッサ。
【請求項８】
前記デスティネーションレジスタの非更新部分のデータコピーを行うための依存関係を生成する手段は、
実行する命令がマスク演算あり命令であり、かつ、実行する命令にとってのデスティネーションレジスタである論理レジスタに対するライトを生じさせた最後の命令のベクトル長と、実行する命令のベクトル長が等しいときには、実行する命令にとってのデスティネーションレジスタである論理レジスタに割り当てられていた２つの物理レジスタのうち、前記最後の命令のベクトル長に含まれる部分のデータを保持していたほうの物理レジスタに対して依存関係を生成し、
実行する命令がマスク演算あり命令であり、かつ、実行する命令にとってのデスティネーションレジスタである論理レジスタに対するライトを生じさせた最後の命令のベクトル長よりも、実行する命令のベクトル長が大きい場合には、実行する命令にとってのデスティネーションレジスタである論理レジスタに割り当てられていた２つの物理レジスタの両方に対して依存関係を生成し、
実行する命令がマスク演算あり命令またはマスク演算なし命令のいずれであっても、実行する命令にとってのデスティネーションレジスタである論理レジスタに対するライトを生じさせた最後の命令のベクトル長よりも、実行する命令のベクトル長が小さい場合には、実行する命令にとってのデスティネーションレジスタである論理レジスタに割り当てられていた２つの物理レジスタの両方に対して依存関係を生成する、請求項５乃至請求項７のいずれか一項に記載のベクトルプロセッサ。
【請求項９】
ベクトル演算を実行するベクトルプロセッサのベクトルレジスタリネーミング制御方法であって、前記ベクトルレジスタは、１つの論理レジスタに最大２つの物理レジスタが割り当てられるものであり、
前記論理レジスタに対するライトを生じさせた最後の命令のベクトル長を記憶し、
実行する命令のベクトル長と前記論理レジスタに対するライトを生じさせた最後の命令の前記ベクトル長の大小を比較し、
実行する命令のベクトル長と、実行する命令にとってのデスティネーションレジスタである論理レジスタに対するライトを生じさせた最後の命令のベクトル長との大小比較結果に従って、前記デスティネーションレジスタに対する前記物理レジスタの新規割り当てと演算幅とを制御し、
実行する命令のベクトル長と、実行する命令にとってのデスティネーションレジスタである論理レジスタに対するライトを生じさせた最後の命令のベクトル長との大小比較結果と、前記実行する命令がマスク演算であるか否かに従って、前記デスティネーションレジスタの非更新部分のデータコピーを行うための依存関係を生成する、ベクトルレジスタリネーミング制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ベクトルレジスタリネーミング制御方式、ベクトルプロセッサ、及びベクトルレジスタリネーミング制御方法に関し、特に、ベクトルプロセッサに適したベクトルレジスタのリネーミングを可能にして演算スループットを向上させるベクトルレジスタリネーミング制御方式、このようなベクトルレジスタリネーミング方式を採用したベクトルプロセッサ、及びベクトルレジスタリネーミング制御方法に関する。
【背景技術】
【０００２】
近年、半導体プロセスの微細化によりＬＳＩ（Large-Scale Integrated circuit）に搭載できる論理回路は飛躍的に増加し、ＣＰＵ（Central Processing Unit）の演算性能は向上している。この演算性能の向上は、コア数を増加させるマルチコア化による寄与が大きく、単一コア当たりの性能向上は鈍化しつつある。しかしながら、マルチコア化による性能向上を享受するために必要な並列化が困難なプログラムも多数存在するため、単一コアの性能向上は必須である。
【０００３】
計算機システムにおいてその性能を向上させるためには、単位時間当たりに実行できる命令数を高めることが必要である。特に、持続的な性能(Sustained Performance)の向上のためには、命令発行レート（Instruction Issue Rate）を向上することが必要である。計算機システムにおいて、演算処理は一般にレジスタ間で行われるが、パイプライン処理を用いている場合に、あるレジスタに対する命令を発行した後、同じレジスタが別の命令を実行できるようになるためには一定のマシンサイクルを必要とする。
【０００４】
単一コアの性能向上を行う手法として、以前より命令発行レートを上げ性能向上させる技術として、レジスタリネーミングが広く知られている。レジスタリネーミングは、プログラムが前提とする個数よりも多くの個数のレジスタを用意しておき、プログラム上では同一のレジスタに対するものである複数の命令があるときに、命令の実行時において、プログラムで規定されているレジスタとは別のレジスタを用いるようにするものである。
【０００５】
これにより、先行命令がリードするまで後続命令はライトすることができないといった、Write-After-Read(WAR)依存関係や、先行命令がライトするまで後続命令はライトすることができないといった、Write-after-Write(WAW)依存関係を解消或いは緩和させることを意図したものである。
【０００６】
一般的に行われているレジスタリネーミングでは、ある演算結果を書き込むレジスタに別名を与え、リソースの依存性を緩和する。たとえば、命令Ａが論理リソースＸに対してデータを読み出している途中で、同一の論理リソースＸに対する書き込みを行う後続命令Ｂに関して、論理リソースＸに対して物理リソースＸ１、Ｘ２をそれぞれ命令Ａ、命令Ｂに割り当てておくことで、命令Ｂの実行によるデータの書きつぶしを防ぐことが可能となる。これは命令Ｂの発行制限の緩和を意味し、命令発行レートの向上が見込める。
【０００７】
しかしながら、レジスタリネーミングをベクトルプロセッサに適用しようとする場合には、ベクトルプロセッサには、要素ごとに計算の有無を切り替えるマスク機能が設けられており、単純にはレジスタリネーミングを実現できない、という課題がある。
【０００８】
たとえば前述の命令Ｂにマスクがかかっていた場合、マスク対象の要素には、演算結果の元の値、すなわち命令Ａの実行結果の対応する要素を格納する必要がある。これは、演算がマスクされている以上、あるレジスタに既に書き込まれたデータが、あとに実行される命令で参照される可能性があるからである。
【０００９】
そのため、単純に複数の独立したリソースを命令Ａ、命令Ｂに割り当てるだけで不十分であり、そのリソース間での値の引渡しが必要となり、既存のレジスタリネーミング技術を単純に導入することができなかった。
【００１０】
特許文献１では、ベクトル命令で指定するベクトルレジスタ（論理レジスタ）とベクトルプロセッサが実際に有するベクトルレジスタ（物理レジスタ）とを１対１の関係で対応付けるのではなく、論理レジスタより多くの物理レジスタを用意しておき、ハードウェアで動的に論理レジスタ・物理レジスタ間の対応を管理することが提案されている。特許文献１によれば、同じ論理レジスタを複数のベクトル命令で指定したとしても、相異なる物理レジスタを割当てるので、ベクトル命令の実行が待たされることがなくなり、処理の高速化を図ることができる。
【００１１】
特許文献２は、マスク付き演算を考慮したベクトルレジスタのリネーミング手法に関するものであり、相互に組をなす複数のレジスタを持つ専用回路を用いたレジスタリネーミングする手法が提案されている。特許文献２によれば、マスク付き演算に必要な値のコピーを専用回路で行えるようにすることにより、マスク付き演算を実現しつつベクトルレジスタのリネーミングを実現できる。
【００１２】
特許文献３は、マスク付き演算とベクトル長の変化を考慮したベクトルレジスタのリネーミング手法に関するものであり、マスク付き演算の有無とベクトル長の比較結果とが条件を満たした場合には、デスティネーションとなる論理レジスタが一致する後続の命令に対して同一の物理レジスタを割り当てることが提案されている。特許文献３のリネーミング手法によれば、ベクトルレジスタの利用効率を向上させることができる。
【００１３】
特許文献４では、データの要素毎にリネーミングのポインタリストを設ける手法が提案されている。特許文献４のリネーミング手法によれば、物理レジスタをデータの要素毎に自由にマッピングして、リネーミングレジスタのデータ部分の利用効率を向上させることができる。
【先行技術文献】
【特許文献】
【００１４】
【特許文献１】特開昭６１−２４１８７０号公報
【特許文献２】特開２００７−３３４８１９号公報
【特許文献３】特開２００６−２６８１６８号公報
【特許文献４】特開２０１０−２０５０４９号公報
【発明の概要】
【発明が解決しようとする課題】
【００１５】
しかしながら、上述した背景技術のリネーミング手法には、次のような課題がある。
【００１６】
すなわち、一般的なプロセッサにおいてレジスタのデータ格納領域として採用されているレジスタファイル（ＲＦ：Register File）やＳＲＡＭ（Static Random Access Memory）を使用しつつ、マスク付き演算を考慮したベクトルレジスタリネーミング制御を実現することができないことである。
【００１７】
特許文献１は、一般的なスカラプロセッサに使用されている技術の延長であり、ベクトルプロセッサに広く採用されているマスク付き演算やベクトル長が考慮されていない。このため、特許文献１の手法をベクトルプロセッサにそのまま適用することができない、という課題がある。
【００１８】
特許文献２では、相互にセットをなす複数のレジスタを持つ専用回路が必要である。このため、一般的なプロセッサにおいてレジスタのデータ格納領域として採用されているレジスタファイルやＳＲＡＭを使用することができない、という課題がある。
【００１９】
特許文献３では、マスク付き演算の有無とベクトル長を比較することで条件を満たした場合に、デスティネーションとなる論理レジスタが一致する後続の命令に対して同一の物理レジスタを割り当てる。特許文献３では、同一の物理レジスタを割り当ててしまうため、プログラムに記述された命令を実行する場合には、プログラムに記述された命令を順に実行する、イン・オーダー(In-Order)実行とする、必要がある。プログラムに記述された命令の順序を変更して実行する、アウト・オブ・オーダー(Out-of-Order)実行ができず、イン・オーダーで命令を実行する必要があるため、レジスタのWAR依存関係を解消することができない。
【００２０】
特許文献４では、データ部分の利用効率を向上する代わりに、ポインタリストなどのリネーミングレジスタ管理情報のゲート量が増大する。例えば、データ部分が６４ビット、物理レジスタが３２個、要素数２５６で構成された、３オペランド命令のアーキテクチャを仮定する。この場合、データ部分は６４ビット×２５６要素×３２個＝５１２Ｋビット必要であり、リネーミングレジスタ管理情報部分は３２個の物理レジスタを表すために５ビット×２５６要素×３２個×３オペランド＝１２０Ｋビット必要になる。データ部分と管理情報部分とを全てフリップフロップ（ＦＦ：Flip Flop）で構成する場合は、約４：１の割合になる。データ部分はフリップフロップと比較すると一般的に記憶密度の高いレジスタファイルやＳＲＡＭ（数倍の記憶密度）で構成するため、データ部分と管理情報部分の割合が１：１程度或いはより悪化する可能性がある。そのため、要素数が大きい構成を採用する場合に、レジスタリネーミング管理情報のゲート量が大きな負担になる。
【００２１】
本発明の目的は、マスク付き演算を考慮したベクトルレジスタリネーミングを最適化できていない、という課題を解決できる、マスク付き演算を考慮したベクトルレジスタリネーミング制御方式、及びこれを用いたベクトルプロセッサを提供することにある。
【課題を解決するための手段】
【００２２】
前記目的を達成するため、本発明に係るベクトルレジスタリネーミング制御方式は、ベクトル演算を実行するベクトルプロセッサのベクトルレジスタリネーミング制御方式であって、上記ベクトルレジスタは、１つの論理レジスタに最大２つの物理レジスタが割り当てられるものであり、
上記論理レジスタに対してライトした最後の命令のベクトル長を記憶する手段と、実行する命令のベクトル長と上記論理レジスタに対してライトした最後の命令の上記ベクトル長の大小を比較する手段と、ベクトル長の上記大小比較結果に従って、デスティネーションレジスタに対する上記物理レジスタの新規割り当てと演算幅とを制御する手段と、ベクトル長の上記大小比較結果に従って、ソースレジスタに対する上記物理レジスタと上記論理レジスタとの依存関係を生成する手段と、ベクトル長の上記大小比較結果と上記実行する命令がマスク演算であるか否かに従って、上記デスティネーションレジスタの非更新部分のデータコピーを行うための依存関係を生成する手段とを有する。
【００２３】
本発明に係るベクトルレジスタリネーミング制御方式を用いたベクトルプロセッサは、１つの論理レジスタに最大２つの物理レジスタが割り当てられるベクトルレジスタと、上記ベクトルレジスタが保持する内容について演算を実行する演算器と、上記論理レジスタに対してライトした最後の命令のベクトル長を記憶する手段と、実行する命令のベクトル長と上記論理レジスタに対してライトした最後の命令の上記ベクトル長の大小を比較する手段と、ベクトル長の上記大小比較結果に従って、デスティネーションレジスタに対する上記物理レジスタの新規割り当てと演算幅とを制御する手段と、ベクトル長の上記大小比較結果に従って、ソースレジスタに対する上記物理レジスタと上記論理レジスタとの依存関係を生成する手段と、ベクトル長の上記大小比較結果と上記実行する命令がマスク演算であるか否かに従って、上記デスティネーションレジスタの非更新部分のデータコピーを行うための依存関係を生成する手段とを有する。
【００２４】
本発明に係るベクトルレジスタリネーミング制御方法は、ベクトル演算を実行するベクトルプロセッサのベクトルレジスタリネーミング制御方法であって、上記ベクトルレジスタは、１つの論理レジスタに最大２つの物理レジスタが割り当てられるものであり、
上記論理レジスタに対してライトした最後の命令のベクトル長を記憶し、実行する命令のベクトル長と上記論理レジスタに対してライトした最後の命令の上記ベクトル長の大小を比較し、ベクトル長の上記大小比較結果に従って、デスティネーションレジスタに対する上記物理レジスタの新規割り当てと演算幅とを制御し、ベクトル長の上記大小比較結果に従って、ソースレジスタに対する上記物理レジスタと上記論理レジスタとの依存関係を生成し、ベクトル長の上記大小比較結果と上記実行する命令がマスク演算であるか否かに従って、上記デスティネーションレジスタの非更新部分のデータコピーを行うための依存関係を生成する。
【発明の効果】
【００２５】
本発明のベクトルレジスタリネーミング制御方式、ベクトルプロセッサ、及びベクトルレジスタリネーミング制御方法によれば、ベクトルレジスタリネーミングを最適化して、命令発行性能を最大化できる。
【図面の簡単な説明】
【００２６】
【図１】本発明の第一実施形態によるベクトルプロセッサを用いたベクトル計算機の概略構成を示すブロック図である。本発明の第一実施形態によるベクトルプロセッサのための、ベクトルレジスタリネーミング制御装置を示すブロック図である。
【図２Ａ】ベクトル長を考慮して、マスク演算ありベクトル加算命令ＶＡＤＤＭを実行した場合のベクトルレジスタ更新の一例を示す概念図である。
【図２Ｂ】ベクトル長を考慮して、マスク演算なしベクトル加算命令ＶＡＤＤを実行した場合のベクトルレジスタ更新の一例を示す概念図である。
【図３Ａ】論理レジスタ管理テーブルの第一状態を示す図である。
【図３Ｂ】論理レジスタ管理テーブルの第二状態を示す図である。
【図４Ａ】物理レジスタ管理テーブルの第一状態を示す図である。
【図４Ｂ】物理レジスタ管理テーブルの第二状態を示す図である。
【図４Ｃ】物理レジスタ管理テーブルの第三状態を示す図である。
【図４Ｄ】物理レジスタ管理テーブルの第四状態を示す図である。
【図４Ｅ】物理レジスタ管理テーブルの第五状態を示す図である。
【図５Ａ】マスク演算ありの場合の、ベクトル長の違いによるデスティネーションレジスタの更新の第一例を示す概念図である。
【図５Ｂ】マスク演算ありの場合の、ベクトル長の違いによるデスティネーションレジスタの更新の第二例を示す概念図である。
【図５Ｃ】マスク演算ありの場合の、ベクトル長の違いによるデスティネーションレジスタの更新の第三例を示す概念図である。
【図６Ａ】マスク演算なしの場合の、ベクトル長の違いによるデスティネーションレジスタの更新の第一例を示す概念図である。
【図６Ｂ】マスク演算なしの場合の、ベクトル長の違いによるデスティネーションレジスタの更新の第二例を示す概念図である。
【図６Ｃ】マスク演算なしの場合の、ベクトル長の違いによるデスティネーションレジスタの更新の第三例を示す概念図である。
【図７Ａ】ベクトル長の違いによるソースレジスタのデータリードの第一例を示す概念図である。
【図７Ｂ】ベクトル長の違いによるソースレジスタのデータリードの第二例を示す概念図である。
【図７Ｃ】ベクトル長の違いによるソースレジスタのデータリードの第三例を示す概念図である。
【図８】命令毎の物理レジスタの管理テーブルの一例を示す図である。
【発明を実施するための形態】
【００２７】
本発明の好ましい実施形態及び実施例について、図面を参照しながら詳細に説明する。
【００２８】
〔第一実施形態〕
図１は、本発明の第一実施形態によるベクトルプロセッサを用いたベクトル計算機の概略構成を示すブロック図である。図３Ａは、論理レジスタ管理テーブルの第一状態を示す図である。図４Ａは、物理レジスタ管理テーブルの第一状態を示す図である。図８は、命令毎の物理レジスタの管理テーブルの一例を示す図である。
【００２９】
ベクトル計算機１は図１に示すように、ベクトルプロセッサ１０と、メインメモリ２０とを有する。ベクトルプロセッサ１０は、ベクトルロード、ベクトルストア、ベクトル演算といった「ベクトル命令」を処理するプロセッサである。ベクトルロード命令に応答して、ベクトルプロセッサ１０は、ベクトルデータをメインメモリ２０から読み出す。ベクトルストア命令に応答して、ベクトルプロセッサ１０は、ベクトルデータをメインメモリ２０に書き込む。ベクトル演算命令に応答して、ベクトルプロセッサ１０は、ベクトルデータを用いてベクトル演算を行う。
【００３０】
本実施形態のベクトルプロセッサ１０は、命令制御部１００と、演算部２００とを有する。命令制御部１００は、命令供給部１１０と、命令発行制御部１１１と、レジスタリネーミング制御部１１２と、命令実行制御部１１３とを有する。演算部２００は、複数のベクトルレジスタからなるベクトルレジスタ群２１０と、リード選択部２１１と、演算器群２１２と、ライト選択部２１３とを有する。
【００３１】
命令供給部１１０は、ベクトル命令を信号線１２０を介して命令発行制御部１１１へ発行し、信号線１２１を介してレジスタリネーミング制御部１１２へ発行する。レジスタリネーミング制御部１１２は、図３Ａに示すような論理レジスタ管理テーブルと図４Ａに示すような物理レジスタ管理テーブルとを有する。命令発行制御部１１１は、図８に示した命令毎の物理レジスタ管理テーブルにある各物理レジスタのデータ準備が整ったことを示すレディフラグが全て”１”になった場合に、信号線１４０を介して命令実行制御部１１３へ命令を発行する。命令実行制御部１１３は、命令毎の物理レジスタ管理テーブルの情報に従って信号線１５０を介して、演算部２００の制御を行う。
【００３２】
さらに、ベクトルレジスタ群２１０からリードし信号線２２０を介して、リード選択部２１１へ出力する。リード選択部２１１は、信号線２２１を介して演算器群２１２へデータを出力する。演算器群２１２は演算結果を、信号線２２２を介してライト選択部２１３へ出力する。ライト選択部２１３は演算結果を、信号線２２３を介してベクトルレジスタ群２１０へ出力する。
【００３３】
本実施形態では、ベクトルレジスタ群２１０は、論理レジスタが８個（Ｖ０〜Ｖ７）で、物理レジスタが３２個（ＶＲ０〜ＶＲ３１）で、マスクレジスタが１個で構成されるものとして説明する。各レジスタの要素数は２５６である。図３Ａに示したように、１つの論理ベクトルレジスタに対し最大２つの物理レジスタを割り当てる。さらに、論理レジスタをライトした最後の命令のベクトル長を記憶し管理を行う。
【００３４】
次に、本実施形態によるベクトルレジスタリネーミング制御方式及び制御方法の概要について、説明する。本実施形態では、ベクトル命令を実行可能なプロセッサが、３オペランド形式の命令を実行する場合を例に説明を行う。
【００３５】
例えば、マスク演算ありベクトル加算命令ＶＡＤＤＭ Ｖ０←Ｖ１＋Ｖ２の場合に、Ｖ０：デスティネーションレジスタ、Ｖ１・Ｖ２：ソースレジスタとする。マスク演算ありベクトル加算命令ＶＡＤＤＭ Ｖ０←Ｖ１＋Ｖ２、ベクトル長＝ＶＬｎを例にした本実施形態のベクトルレジスタリネーミング制御方式は、以下のようになる。
【００３６】
＜論理レジスタと物理レジスタの管理＞
１つの論理ベクトルレジスタに対し最大２つの物理レジスタを割り当てる。さらに、論理レジスタをライトした最後の命令のベクトル長を記憶し管理を行う。例えば、論理レジスタＶ０に対して物理レジスタＶＲ０及びＶＲ１を割り当てて、ライトした命令のベクトル長をＶＬ０としたとき、Ｖ０＝（ＶＲ０、ＶＲ１、ＶＬ０）と記述することとする。ここで、ＶＲ０はＶＬ０以内の演算部分、ＶＲ１はＶＬ０より大きい非演算部分を示す。
【００３７】
＜デスティネーションレジスタに対する新規物理レジスタ割り当て＞
ベクトルレジスタへのライト命令が必要な命令では、現在のデスティネーションレジスタＶ０に割り当てられている物理レジスタ（ＶＲ０、ＶＲ１、ＶＬ０）に対して、新たな物理レジスタＶＲｎを割り当てる。実行する命令のベクトル長ＶＬｎとベクトル長ＶＬ０の大小比較により、レジスタの割り当てと命令実行時の演算幅が異なる。
ＶＬｎ＝ＶＬ０の場合：Ｖ０に（ＶＲｎ、ＶＲ１、ＶＬｎ）を割り当てて、演算幅はＶＬｎで命令を実行する。
ＶＬｎ＞ＶＬ０の場合：Ｖ０に（ＶＲｎ、ＶＲ１、ＶＬｎ）を割り当てて、演算幅はＶＬｎで命令を実行する。
ＶＬｎ＜ＶＬ０の場合：Ｖ０に（ＶＲｎ、ＶＲｎ、０）を割り当てて、演算幅は最大ベクトル長で命令を実行する。
【００３８】
＜ソースレジスタ依存関係生成＞
演算に使用するソースレジスタＶ１に割り当てられている物理レジスタをリードする場合を説明する。例えば、演算に使用するソースレジスタＶ１に対して物理レジスタＶＲ２とＶＲ３を割り当てて、リードした命令のベクトル長をＶＬ１としたとき、Ｖ１＝（ＶＲ２、ＶＲ３、ＶＬ１）と記述することとする。演算に使用するソースレジスタＶ２に割り当てられている物理レジスタをリードする場合に対しても、以下と同様の規則になる。
ＶＬｎ＝ＶＬ１の場合：ＶＲ２に対して依存関係を生成する。
ＶＬｎ＞ＶＬ１の場合：ＶＲ２、ＶＲ３に対して依存関係を生成する。
ＶＬｎ＜ＶＬ１の場合：ＶＲ２に対して依存関係を生成する。
【００３９】
＜デスティネーションレジスタ依存関係生成＞
本実施形態のレジスタリネーミングではマスク付き演算とベクトル長を考慮するので、特定のケースでデスティネーションレジスタの依存関係生成が必要になる。依存関係が必要になるケースは、マスク演算あり命令と、マスク演算なし命令かつＶＬｎ＜ＶＬ０の場合である。マスク演算ではマスク＝０になっているデスティネーションレジスタの非更新要素を保持する必要がある。そのため、元のデスティネーションレジスタからデータコピーを行いデータの整合をとる必要があり、デスティネーションレジスタ（Ｖ０）に対する依存関係生成が常に必要になる。ＶＬｎ＜ＶＬ０の場合は新規に割り当てた物理レジスタに全てのデータをまとめるために、マスク付き演算の有無にかかわらず依存関係生成が必要になる。マスク付き演算あり・なし両方に対して詳細に場合分けすることで不要な依存関係の生成を防ぎ、最大の命令発行性能が得られる。
ＶＬｎ＝ＶＬ０の場合：ＶＲ０に対して依存関係を生成する。マスク演算あり命令が対象である。
ＶＬｎ＞ＶＬ０の場合：ＶＲ０、ＶＲ１に対して依存関係を生成する。マスク演算あり命令が対象である。
ＶＬｎ＜ＶＬ０の場合：ＶＲ０、ＶＲ１に対して依存関係を生成する。マスク演算あり命令及びマスク演算なし命令の両方が対象である。
【００４０】
上記説明を行ったベクトルレジスタリネーミングを行うことで、不要な依存関係の生成を防ぎ、命令発行性能を最大化できる。
【実施例】
【００４１】
本発明の実施例の一例として、図１のレジスタリネーミング制御部を有するベクトルプロセッサを用いたベクトル計算機の構成を用いて説明する。また、本実施例で利用する命令は３オペランド形式で、１つのデスティネーションレジスタと２つのソースレジスタを指定可能とする。例えば、マスク演算ありベクトル加算命令ＶＡＤＤＭ Ｖ０←Ｖ１＋Ｖ２の場合に、Ｖ０：デスティネーションレジスタ、Ｖ１・Ｖ２：ソースレジスタとして、Ｖ１とＶ２を加算してＶ０へ格納するものとする。ＶＡＤＤＭ命令はマスク付き演算用のマスクレジスタが指定可能な命令であるが、ベクトルプロセッサが演算する命令にはマスク演算なしのＶＡＤＤ命令も存在し得る。ベクトル長（ＶＬ）は、ベクトル命令において１命令で処理する要素数を設定する値で、図１には図示していないベクトル長設定レジスタの値を使用する。本実施例では、ベクトル長ＶＬ＝０〜２５６の値をとるものとする。ベクトル長設定レジスタは、命令により自由に値の設定変更が可能である。
【００４２】
次に、図２Ａを用いて、マスク演算ありベクトル加算命令ＶＡＤＤＭ  Ｖ０←Ｖ１＋Ｖ２、ベクトル長＝ＶＬ０を実行した場合のレジスタの更新について、説明する。図２Ａは、ベクトル長を考慮して、マスク演算ありベクトル加算命令ＶＡＤＤＭを実行した場合のベクトルレジスタ更新の一例を示す概念図である。ＶＬ０以内の要素は演算部分になり、ＶＬ０より大きい要素は非演算部分となる。演算部分のＶＬ０以内の要素の中でマスク＝１の要素は、Ｖ１＋Ｖ２の加算結果をＶ０に格納する。マスク＝０の要素は、演算対象外で非更新要素となり演算前のＶ０の値を保持する。非演算部分は、演算前のＶ０の値を保持する。
【００４３】
次に、図２Ｂを用いて、マスク演算なしベクトル加算命令ＶＡＤＤ  Ｖ０←Ｖ１＋Ｖ２、ベクトル長＝ＶＬ０を実行した場合のレジスタの更新について説明する。図２Ｂは、ベクトル長を考慮して、マスク演算なしベクトル加算命令ＶＡＤＤを実行した場合のベクトルレジスタ更新の一例を示す概念図である。ＶＬ０以内の要素は演算部分になり、ＶＬ０より大きい要素は非演算部分となる。演算部分はＶ１＋Ｖ２の加算結果をＶ０に格納し、非演算部分は演算前のＶ０の値を保持する。
【００４４】
本実施例では、マスク演算ありベクトル加算命令ＶＡＤＤＭ Ｖ０←Ｖ１＋Ｖ２のレジスタリネーミング動作を中心に説明する。マスク演算なしベクトル加算命令ＶＡＤＤ Ｖ０←Ｖ１＋Ｖ２の動作は、マスク演算ありベクトル加算命令ＶＡＤＤＭ Ｖ０←Ｖ１＋Ｖ２においてマスクが全て１に設定された動作に相当になる。
【００４５】
＜１．論理レジスタと物理レジスタの管理＞
図１の命令供給部１１０は、命令を信号線１２０を介して命令発行制御部１１１へ発行し、信号線１２１を介してレジスタリネーミング制御部１１２へ発行する。レジスタリネーミング制御部１１２は、図３Ａに示した論理レジスタ管理テーブルと図４Ａに示した物理レジスタ管理テーブルを有する。本実施例では、ベクトルレジスタ群２１０は論理レジスタが８個（Ｖ０〜Ｖ７）、物理レジスタが３２個（ＶＲ０〜ＶＲ３１）、マスクレジスタ１個から構成されるとする。図３Ａに示したように、１つの論理ベクトルレジスタに対し最大２つの物理レジスタを割り当てる。さらに、論理レジスタをライトした最後の命令のベクトル長を記憶し管理を行う。例えば、論理レジスタＶ０に対して物理レジスタＶＲ０とＶＲ１を割り当て論理レジスタをライトした最後の命令のベクトル長をＶＬ０とすると、Ｖ０＝（ＶＲ０、ＶＲ１、ＶＬ０）と記述する。ここで、ＶＲ０はＶＬ０以内の演算部分、ＶＲ１はＶＬ０より大きい非演算部分を表す。
【００４６】
＜２．デスティネーションレジスタに対する新規物理レジスタ割り当て＞
図５Ａは、マスク演算ありの場合の、ベクトル長の違いによるデスティネーションレジスタの更新の第一例を示す概念図である。図５Ｂは、マスク演算ありの場合の、ベクトル長の違いによるデスティネーションレジスタの更新の第二例を示す概念図である。図５Ｃは、マスク演算ありの場合の、ベクトル長の違いによるデスティネーションレジスタの更新の第三例を示す概念図である。
【００４７】
図６Ａは、マスク演算なしの場合の、ベクトル長の違いによるデスティネーションレジスタの更新の第一例を示す概念図である。図６Ｂは、マスク演算なしの場合の、ベクトル長の違いによるデスティネーションレジスタの更新の第二例を示す概念図である。図６Ｃは、マスク演算なしの場合の、ベクトル長の違いによるデスティネーションレジスタの更新の第三例を示す概念図である。
【００４８】
レジスタリネーミング制御部１１２に発行され、実行する命令がベクトル加算命令のようにレジスタへのライトを行う命令の場合に、新たな物理レジスタの割り当てが必要になる。物理レジスタ割り当ては、実行する命令のベクトル長ＶＬｎと論理レジスタ管理テーブルに記憶した論理レジスタをライトした最後の命令のベクトル長ＶＬｗの大小比較により動作を決定する。論理レジスタＶｄ＝（ＶＲａ、ＶＲｂ、ＶＬｗ）と割り当てられている場合に、これから実行する命令のデスティネーションレジスタＶｄに新たに物理レジスタＶＲｎを割り当てる場合は以下の規則になる。
ＶＬｎ＝ＶＬｗの場合：Ｖｄに（ＶＲｎ、ＶＲｂ、ＶＬｎ）を割り当てて、演算幅はＶＬｎで命令を実行する。
ＶＬｎ＞ＶＬｗの場合：Ｖｄに（ＶＲｎ、ＶＲｂ、ＶＬｎ）を割り当てて、演算幅はＶＬｎで命令を実行する。
ＶＬｎ＜ＶＬｗの場合：Ｖｄに（ＶＲｎ、ＶＲｎ、０）を割り当てて、演算幅は最大ベクトル長で命令を実行する。
【００４９】
ＶＬｎ＝ＶＬｗ及びＶＬｎ＞ＶＬｗの場合は、図５Ａと図５Ｂに示したように新たに割り当てた物理レジスタＶＲｎに対してＶＬｎ部分のみ演算し結果を格納する。また、非演算部分は更新が不要のため管理テーブルのレジスタ番号ＶＲｂを変更しないことにより不要なコピーを削減する。ＶＬｎ＜ＶＬｗの場合は、図５Ｃに示したように新たに割り当てた物理レジスタＶＲｎに全てのデータをまとめるために最大ベクトル長で命令を実行し元データのコピーを行う。ＶＬｗは初期設定の０にリセットする。同様に、マスク演算なしの場合は図６Ａ、図６Ｂ、図６Ｃに示した動作になる。
【００５０】
より具体的に、例えば、ＶＡＤＤＭ  Ｖ０←Ｖ１＋Ｖ２、ＶＬｎ＝２３０の場合について説明する。デスティネーションレジスタはＶ０になる。図３Ａに示した論理レジスタ管理テーブルを参照し、論理レジスタＶ０＝（ＶＲ０、ＶＲ１、１２８）の情報を得る。次に、図４Ａに示した物理レジスタ管理テーブルを参照し、有効ビット＝０である未使用の物理レジスタＶＲｎを検索し、ＶＲ１６が有効ビット＝０になっているのでＶＲｎ＝ＶＲ１６を割り当てる。この後で、物理レジスタ管理テーブルの情報を更新する。物理レジスタのＶＲ１６の有効ビット＝１にし、ＶＲ１６を論理レジスタＶ０として使用するために論理レジスタとして使用フラグ＝１にし、これまでＶ０に割り当てられていたＶＲ０の論理レジスタとして使用フラグ＝０に変更する。上記操作により、物理レジスタ管理テーブルを図４Ａから図４Ｂの状態に更新する。また、論理レジスタＶ０＝（ＶＲ１６、ＶＲ１、２３０）に変更するため論理レジスタ管理テーブルのＶ０を更新する。上記操作により、論理レジスタ管理テーブルを図３Ａから図３Ｂの状態に更新する。
【００５１】
＜３．ソースレジスタ依存関係生成＞
図７Ａは、ベクトル長の違いによるソースレジスタのデータリードの第一例を示す概念図である。図７Ｂは、ベクトル長の違いによるソースレジスタのデータリードの第二例を示す概念図である。図７Ｃは、ベクトル長の違いによるソースレジスタのデータリードの第三例を示す概念図である。
【００５２】
レジスタリネーミング制御部１１２に発行され、実行する命令がベクトル加算命令のようにソースレジスタを使用する場合について説明する。実行する命令のベクトル長ＶＬｎと論理レジスタ管理テーブルに記憶した論理レジスタをライトした最後の命令のベクトル長ＶＬｓの大小比較により動作を決定する。ソースレジスタである論理レジスタＶｓ１＝（ＶＲｃ、ＶＲｄ、ＶＬｓ）と割り当てられている場合に、以下の規則でレジスタ依存関係を生成する。リードするオペランドが２個の場合に、ソースレジスタである論理レジスタＶｓ２に対しても同じ規則になる。
ＶＬｎ＝ＶＬｓの場合：ＶＲｃに対して依存関係を生成する。
ＶＬｎ＞ＶＬｓの場合：ＶＲｃ、ＶＲｄに対して依存関係を生成する。
ＶＬｎ＜ＶＬｓの場合：ＶＲｃに対して依存関係を生成する。
【００５３】
ＶＬｎ＝ＶＬｓ及びＶＬｎ＜ＶＬｓの場合は、図７Ａと図７Ｃに示したようにＶＬｎ以内のデータのみ演算に使用するためＶＲｃのみ依存関係を生成する。ＶＬｎ＞ＶＬｓの場合は、図７Ｂに示したようにＶＬｓ以内のデータ及びＶＬｓより大きくＶＬｎ以下のデータの両方を演算に使用するためＶＲｃ、ＶＲｄに対して依存関係を生成する。
【００５４】
例えば、ＶＡＤＤＭ  Ｖ０←Ｖ１＋Ｖ２、ＶＬｎ＝２３０の場合について説明する。ソースレジスタはＶ１とＶ２になる。図３Ａに示した論理レジスタ管理テーブルを参照し、論理レジスタＶ１＝（ＶＲ２、ＶＲ３、１２８）と論理レジスタＶ２＝（ＶＲ４、ＶＲ５、１２８）の情報を得る。次に、図４Ｂに示した物理レジスタ管理テーブルを参照し、ＶＲ２、ＶＲ３、ＶＲ４、ＶＲ５の物理レジスタ参照命令数を＋１する。物理レジスタ参照命令数は、物理レジスタを参照する命令の場合に＋１、物理レジスタを参照する命令が終了した場合に−１する。これにより、物理レジスタを参照している命令が存在するかを判断できる。物理レジスタ参照命令数＝０の場合は、どの命令からも参照されていないことを示す。上記操作により、物理レジスタ管理テーブルを図４Ｂから図４Ｃの状態に更新する。
【００５５】
＜４．デスティネーションレジスタ依存関係生成＞
レジスタリネーミング制御部１１２に発行され、実行する命令がベクトル加算命令のようにレジスタへのライトを行う命令の場合に、本実施例のレジスタリネーミングではベクトル長とマスク付き演算を考慮するため特定のケースでデスティネーションレジスタの依存関係生成が必要になる。
【００５６】
依存関係が必要になるケースは、マスク演算あり命令とマスク演算なし命令でＶＬｎ＜ＶＬｗの場合である。マスク演算あり命令では、デスティネーションレジスタのマスク＝０になっている非更新要素のデータを保持する必要がある。そのため、元のデスティネーションレジスタからデータコピーを行いデータの整合をとる必要があり、デスティネーションレジスタに対する依存関係の生成が必要になる。また、マスク演算なし命令でもＶＬｎ＜ＶＬｗの場合は、＜２．デスティネーションレジスタに対する新規物理レジスタ割り当て＞で述べたように、一つの物理レジスタに全てのデータをまとめるためにＶＬｎより大きいデータ部分は元の物理レジスタからデータのコピーが必要になりレジスタ依存関係を生成する。依存関係の生成は、実行する命令のベクトル長ＶＬｎと論理レジスタ管理テーブルに記憶した論理レジスタをライトした最後の命令のベクトル長ＶＬｗの大小比較により動作を決定する。デスティネーションレジスタである論理レジスタＶｄ＝（ＶＲａ、ＶＲｂ、ＶＬｗ）と割り当てられている場合に、以下の規則で依存関係を生成する。マスク演算あり・なし両方に対して詳細に場合分けすることで不要な依存関係の生成を防ぎ、最大の命令発行性能が得られる。
ＶＬｎ＝ＶＬｗの場合：ＶＲａに対して依存関係を生成する。マスク演算あり命令が対象である。
ＶＬｎ＞ＶＬｗの場合：ＶＲａ、ＶＲｂに対して依存関係を生成する。マスク演算あり命令が対象である。
ＶＬｎ＜ＶＬｗの場合：ＶＲａ、ＶＲｂに対して依存関係を生成する。マスク演算あり命令及びマスク演算なし命令の両方が対象である。
【００５７】
ＶＬｎ＝ＶＬｗの場合は、図５Ａに示したようにＶＬｎ以内のデータかつマスク＝０のデータを新たな物理レジスタＶＲｎにコピーする必要があるためＶＲａのみ依存関係を生成する。ＶＬｎ＞ＶＬｗの場合は、図５Ｂに示したようにＶＬｗ以内のデータかつマスク＝０のデータ及びＶＬｗより大きくＶＬｎ以下のデータかつマスク＝０のデータの両方を新たな物理レジスタＶＲｎにコピーする必要がある。そのため、ＶＲａ、ＶＲｂに対して依存関係を生成する。ＶＬｎ＜ＶＬｗの場合は、新たな物理レジスタＶＲｎに全てのデータをまとめるため、図５Ｃに示したようにＶＬｎより大きくＶＬｗ以内のデータかつＶＬｗより大きく最大ベクトル長以下のデータの両方を新たな物理レジスタＶＲｎにコピーする必要がある。そのため、ＶＲａ、ＶＲｂに対して依存関係を生成する。また、マスク演算ありの場合はＶＬｎ以内のデータかつマスク＝０のデータも新たな物理レジスタＶＲｎにコピーする必要がある。
【００５８】
例えば、ＶＡＤＤＭ  Ｖ０←Ｖ１＋Ｖ２、ＶＬｎ＝２３０の場合について説明する。デスティネーションレジスタはＶ０になる。図３Ａに示した論理レジスタ管理テーブルを参照し、論理レジスタＶ０＝（ＶＲ０、ＶＲ１、１２８）の情報を得る。次に、図４Ｃに示した物理レジスタ管理テーブルを参照し、ＶＲ０、ＶＲ１の物理レジスタ参照命令数を＋１する。上記操作により、物理レジスタ管理テーブルを図４Ｃから図４Ｄの状態に更新する。
【００５９】
レジスタリネーミング制御部１１２で上記１．〜４．の処理を行いレジスタリネーミングの処理が終わると、信号線１３０を介して命令発行制御部１１１に通知する。命令発行制御部１１１は図８に示した命令毎の物理レジスタ管理テーブルを有しており、通知する情報はレジスタリネーミング処理により決定した物理レジスタ情報であり命令毎の物理レジスタ管理テーブルへの入力データとなる。
【００６０】
＜５．命令の実行と終了＞
命令発行制御部１１１は図８に示した命令毎の物理レジスタ管理テーブルにある各物理レジスタのデータ準備が整ったことを示すレディフラグが全て１になった場合に、信号線１４０を介して命令実行制御部１１３へ命令を発行する。命令実行制御部１１３は命令毎の物理レジスタ管理テーブルの情報に従って信号線１５０を介して、演算部２００の制御を行う。
【００６１】
例えば、ＶＡＤＤＭ  Ｖ０←Ｖ１＋Ｖ２、ＶＬｎ＝２３０の場合について説明する。図８の命令毎の物理レジスタ管理テーブルより、ソースレジスタＶ１に割り当てられたＶＲ２、ＶＲ３のデータ及びＶ２に割り当てられたＶＲ４、ＶＲ５のデータ及びデスティネーションレジスタＶ０のＶＲ０、ＶＲ１のデータ及びマスクレジスタをベクトルレジスタ群２１０からリードし信号線２２０を介して、リード選択部２１１へ出力する。リード選択部２１１は信号線２２１を介して、演算器群２１２へデータを出力する。演算器はＶＬｗ以内のデータかつマスク＝１の場合はＶＲ２＋ＶＲ４の加算を行い、ＶＬｗ以内のデータかつマスク＝０の場合はＶＲ０のデータをそのまま出力する。また、演算器はＶＬｗより大きくＶＬｎ以下のデータかつマスク＝１の場合はＶＲ３＋ＶＲ５の加算を行い、ＶＬｗより大きくＶＬｎ以下のデータかつマスク＝０の場合はＶＲ１のデータをそのまま出力する。演算器群２１２は演算結果を信号線２２２を介して、ライト選択部２１３へ出力する。ＶＬｎより大きいデータは、非演算部分となるため何もしない。ライト選択部２１３は信号線２２３を介して、演算結果をベクトルレジスタ群２１０へ出力する。デスティネーションレジスタ（ライト）はＶＲ１６のためＶＲ１６へライトする。命令実行制御部１１３は命令が終了すると信号線１４１を介して、命令発行制御部１１１へ通知する。この通知により図８に示したエントリ番号０の有効ビットを１から０へ変更する。また、命令実行制御部１１３は信号線１４２を介して、レジスタリネーミング制御部１１２へ通知する。レジスタリネーミング制御部１１２は、ＶＲ０、ＶＲ１、ＶＲ２、ＶＲ３、ＶＲ４、ＶＲ５の物理レジスタ参照命令数を−１する。ここで、論理レジスタとして使用フラグ＝０かつ物理レジスタ参照命令数＝０の物理レジスタは解放可能となり有効ビット＝０にする。上記操作により、物理レジスタ管理テーブルを図４Ｄから図４Ｅの状態に更新する。上記説明ではマスク演算ありの命令について説明したが、マスク演算なし命令の場合はマスク付き演算に関連する操作は不要である。
【００６２】
以上説明したように、本実施形態及び本実施例によれば、以下に記載するような効果が得られる。
（１）ベクトル命令でマスク付き演算の有無にかかわらずかつベクトル長が変化しても、レジスタリネーミングができる。
（２）実行する命令のベクトル長ＶＬｎと論理レジスタをライトした最後の命令のベクトル長ＶＬｗの大小比較とマスク付き演算の有無という単純な規則で、レジスタリネーミングにおけるデスティネーションレジスタの割り当てとレジスタ依存関係とを生成できる。
（３）上記（２）のベクトル長を比較した結果としてレジスタ間のデータコピーが不要な場合は、論理レジスタと物理レジスタの対応情報のアドレスを変化させないため、レジスタリネーミングを行ってもレジスタ間の不要なコピー動作を削減し省電力化できる。
例えば、プログラムにおいてループ部分の配列に対して演算を実行する場合を考えると、１万回ループする場合に１万＝２５６×３９＋１６で表せるので最大ベクトル長＝２５６で３９回命令実行とベクトル長＝１６で最後或いは最初の１回命令実行の組み合わせになる。そのため、ベクトル長はある程度の回数変化せずに動作するため本機能は非常に有効である。
（４）ベクトル命令のレジスタリネーミングに使用するデータ格納部分に専用の回路が不要で、一般的なプロセッサで採用されているＲＦやＳＲＡＭを使用できる。
（５）必要最低限のレジスタ依存関係のみ生成するため、レジスタリネーミングによる不要な命令発行制限が発生しない。
（６）１個の論理レジスタに対して最大２個の物理レジスタの対応情報だけを制御情報として使用する。これにより、ベクトルレジスタのような１個の論理レジスタの中に複数のデータ要素を持つ場合に、レジスタリネーミング制御部のゲート量を節約できる。例えば、最大ベクトル長ｎの場合に各データの要素毎に制御情報を持つと、１つの論理レジスタに対してｎ個の物理レジスタの対応情報が必要となる。この場合と比較すると、本発明の本実施形態では、レジスタの対応情報は１対２で固定なので、最大ベクトル長が２より大きい場合に効率的になる。
【００６３】
上述した実施形態では、ベクトル命令を実行可能なプロセッサが、３オペランド形式の命令を実行する場合を例に説明を行ったが、本発明はこれに限られるものではない。他のオペランド形式の命令を実行する場合にも、本発明は適用できる。例えば、Fused Multiply ADD(FMA)命令でＶＦＭＡ Ｖ０←Ｖ１＋（Ｖ２＊Ｖ３）を行う４オペランド形式でもよい。
【００６４】
本実施形態ではベクトルプロセッサのベクトル命令で説明を行ったが、一般的なプロセッサにおいてマスク付き演算とベクトル長設定レジスタを持つＳＩＭＤ命令に使用するレジスタでも本実施形態と同様にレジスタネーミングが可能である。
【００６５】
以上、本発明の好ましい実施形態や実施例を説明したが、本発明はこれに限定されるものではない。特許請求の範囲に記載した発明の範囲内で、種々の変形が可能であり、それらも本発明の範囲に含まれることはいうまでもない。例えば、上述した実施形態では、ベクトルレジスタ群２１０の論理レジスタが８個、物理レジスタが３２個、マスクレジスタが１個から構成される場合を例に説明したが、これらの個数は上記実施形態や上記実施例に限定されるものではない。
【００６６】
デスティネーションレジスタに新たな物理レジスタを割り当てる場合の条件について、上述した実施形態では、ＶＬｎ＜ＶＬｗの場合にはＶｄに（ＶＲｎ、ＶＲｎ、０）を割り当てて、演算幅は最大ベクトル長で命令を実行する、ものとして説明した。ＶＬｎ＜ＶＬｗの場合のＶｄに対する物理レジスタの割り当て方法を（ＶＲｎ、ＶＲｎ、０）から（ＶＲａ、ＶＲｎ、０）に変更してもよい。この場合、物理レジスタの解放個数が２→１個に削減されるため制御を簡素化できる。
【００６７】
上記の実施形態や実施例の一部又は全部は、以下の付記のようにも記載されうるが、以下には限られない。
（付記１）ベクトル演算を実行するベクトルプロセッサのベクトルレジスタリネーミング制御方式であって、前記ベクトルレジスタは、１つの論理レジスタに最大２つの物理レジスタが割り当てられるものであり、前記論理レジスタに対してライトした最後の命令のベクトル長を記憶する手段と、実行する命令のベクトル長と前記論理レジスタに対してライトした最後の命令の前記ベクトル長の大小を比較する手段と、ベクトル長の前記大小比較結果に従って、デスティネーションレジスタに対する前記物理レジスタの新規割り当てと演算幅とを制御する手段と、ベクトル長の前記大小比較結果に従って、ソースレジスタに対する前記物理レジスタと前記論理レジスタとの依存関係を生成する手段と、ベクトル長の前記大小比較結果と前記実行する命令がマスク演算であるか否かに従って、前記デスティネーションレジスタの非更新部分のデータコピーを行うための依存関係を生成する手段とを有する、ベクトルレジスタリネーミング制御方式。
（付記２）前記制御する手段は、前記論理レジスタに対してライトした最後の命令の前記ベクトル長と、実行する命令のベクトル長とが等しいとき又は前記論理レジスタに対してライトした最後の命令の前記ベクトル長より、実行する命令のベクトル長が大きいときには、前記デスティネーションレジスタに新たな物理レジスタを割り当てて、前記論理レジスタに対してライトした最後の命令の前記ベクトル長より、実行する命令のベクトル長が小さいときには、前記デスティネーションレジスタに新たな物理レジスタを割り当てる、付記１に記載のベクトルレジスタリネーミング制御方式。
（付記３）前記制御する手段は、前記ソースレジスタに対してライトした最後の命令のベクトル長と、実行する命令のベクトル長とが等しいとき又は前記ソースレジスタに対してライトした最後の命令の前記ベクトル長より、実行する命令のベクトル長が大きいときには、前記デスティネーションレジスタに新たな物理レジスタを割り当てて、前記ソースレジスタに対してライトした最後の命令の前記ベクトル長より、実行する命令のベクトル長が小さいときには、前記デスティネーションレジスタに新たな物理レジスタを割り当てる、付記１に記載のベクトルレジスタリネーミング制御方式。
（付記４）演算に使用するソースレジスタに２つの物理レジスタが割り当てられており、前記物理レジスタをリードする場合には、
前記生成する手段は、前記論理レジスタに対してライトした最後の命令の前記ベクトル長と、実行する命令のベクトル長とが等しいとき又は前記論理レジスタに対してライトした最後の命令の前記ベクトル長より、実行する命令のベクトル長が小さいときには、前記２つの物理レジスタのうちの１つの物理レジスタに対して依存関係を生成し、前記論理レジスタに対してライトした最後の命令の前記ベクトル長より、実行する命令のベクトル長が大きいときには、前記２つの物理レジスタの両方に対して依存関係を生成する、付記１乃至付記３のいずれか一つに記載のベクトルレジスタリネーミング制御方式。
（付記５）前記生成する手段は、マスク演算を含む命令かつ、前記デスティネーションレジスタをリードした最後の命令のベクトル長と、実行する命令のベクトル長が等しいときには、新たに割り当てられた物理レジスタに対して依存関係を生成し、前記デスティネーションレジスタをリードした最後の命令のベクトル長より、実行する命令のベクトル長が小さいときには、新たに割り当てられた物理レジスタに対して依存関係を生成する、付記１乃至付記４のいずれか一つに記載のベクトルレジスタリネーミング制御方式。
（付記６）１つの論理レジスタに最大２つの物理レジスタが割り当てられるベクトルレジスタと、前記ベクトルレジスタが保持する内容について演算を実行する演算器と、前記論理レジスタに対してライトした最後の命令のベクトル長を記憶する手段と、実行する命令のベクトル長と前記論理レジスタに対してライトした最後の命令の前記ベクトル長の大小を比較する手段と、ベクトル長の前記大小比較結果に従って、デスティネーションレジスタに対する前記物理レジスタの新規割り当てと演算幅とを制御する手段と、ベクトル長の前記大小比較結果に従って、ソースレジスタに対する前記物理レジスタと前記論理レジスタとの依存関係を生成する手段と、ベクトル長の前記大小比較結果と前記実行する命令がマスク演算であるか否かに従って、前記デスティネーションレジスタの非更新部分のデータコピーを行うための依存関係を生成する手段とを有する、ベクトル演算を実行するベクトルプロセッサ。
（付記７）前記制御する手段は、前記論理レジスタに対してライトした最後の命令の前記ベクトル長と、実行する命令のベクトル長とが等しいとき又は前記論理レジスタに対してライトした最後の命令の前記ベクトル長より、実行する命令のベクトル長が大きいときには、前記デスティネーションレジスタに新たな物理レジスタを割り当てると共に、前記演算器は、演算幅を前記実行する命令のベクトル長として命令を実行し、
前記制御する手段は、前記論理レジスタに対してライトした最後の命令の前記ベクトル長より、実行する命令のベクトル長が小さいときには、前記デスティネーションレジスタに新たな物理レジスタを割り当てると共に、前記演算器は、演算幅を最大ベクトル長として命令を実行する、付記６に記載のベクトルプロセッサ。
（付記８）前記制御する手段は、前記ソースレジスタに対してライトした最後の命令のベクトル長と、実行する命令のベクトル長とが等しいとき又は前記ソースレジスタに対してライトした最後の命令の前記ベクトル長より、実行する命令のベクトル長が大きいときには、前記デスティネーションレジスタに新たな物理レジスタを割り当てると共に、前記演算器は、演算幅を前記実行する命令のベクトル長として命令を実行し、
前記制御する手段は、前記ソースレジスタに対してライトした最後の命令の前記ベクトル長より、実行する命令のベクトル長が小さいときには、前記デスティネーションレジスタに新たな物理レジスタを割り当てると共に、前記演算器は、演算幅を最大ベクトル長として命令を実行する、付記６に記載のベクトルプロセッサ。
（付記９）演算に使用するソースレジスタに２つの物理レジスタが割り当てられており、前記物理レジスタをリードする場合には、
前記生成する手段は、前記論理レジスタに対してライトした最後の命令の前記ベクトル長と、実行する命令のベクトル長とが等しいとき又は前記論理レジスタに対してライトした最後の命令の前記ベクトル長より、実行する命令のベクトル長が小さいときには、前記２つの物理レジスタのうちの１つの物理レジスタに対して依存関係を生成し、前記論理レジスタに対してライトした最後の命令の前記ベクトル長より、実行する命令のベクトル長が大きいときには、前記２つの物理レジスタの両方に対して依存関係を生成する、付記６乃至付記８のいずれか一つに記載のベクトルプロセッサ。
（付記１０）前記生成する手段は、マスク演算を含む命令かつ、前記デスティネーションレジスタをリードした最後の命令のベクトル長と、実行する命令のベクトル長が等しいときには、新たに割り当てられた物理レジスタに対して依存関係を生成し、前記デスティネーションレジスタをリードした最後の命令のベクトル長より、実行する命令のベクトル長が小さいときには、新たに割り当てられた物理レジスタに対して依存関係を生成する、付記６乃至付記９のいずれか一つに記載のベクトルプロセッサ。
（付記１１）ベクトル演算を実行するベクトルプロセッサのベクトルレジスタリネーミング制御方法であって、前記ベクトルレジスタは、１つの論理レジスタに最大２つの物理レジスタが割り当てられるものであり、前記論理レジスタに対してライトした最後の命令のベクトル長を記憶し、実行する命令のベクトル長と前記論理レジスタに対してライトした最後の命令の前記ベクトル長の大小を比較し、ベクトル長の前記大小比較結果に従って、デスティネーションレジスタに対する前記物理レジスタの新規割り当てと演算幅とを制御し、ベクトル長の前記大小比較結果に従って、ソースレジスタに対する前記物理レジスタと前記論理レジスタとの依存関係を生成し、ベクトル長の前記大小比較結果と前記実行する命令がマスク演算であるか否かに従って、前記デスティネーションレジスタの非更新部分のデータコピーを行うための依存関係を生成する、ベクトルレジスタリネーミング制御方法。
（付記１２）前記論理レジスタに対してライトした最後の命令の前記ベクトル長と、実行する命令のベクトル長とが等しいとき又は前記論理レジスタに対してライトした最後の命令の前記ベクトル長より、実行する命令のベクトル長が大きいときには、前記デスティネーションレジスタに新たな物理レジスタを割り当てて、
前記論理レジスタに対してライトした最後の命令の前記ベクトル長より、実行する命令のベクトル長が小さいときには、前記デスティネーションレジスタに新たな物理レジスタを割り当てる、付記１１に記載のベクトルレジスタリネーミング制御方法。
（付記１３）前記ソースレジスタに対してライトした最後の命令のベクトル長と、実行する命令のベクトル長とが等しいとき又は前記ソースレジスタに対してライトした最後の命令の前記ベクトル長より、実行する命令のベクトル長が大きいときには、前記デスティネーションレジスタに新たな物理レジスタを割り当てて、
前記ソースレジスタに対してライトした最後の命令の前記ベクトル長より、実行する命令のベクトル長が小さいときには、前記デスティネーションレジスタに新たな物理レジスタを割り当てる、付記１１に記載のベクトルレジスタリネーミング制御方法。
（付記１４）演算に使用するソースレジスタに２つの物理レジスタが割り当てられており、前記物理レジスタをリードする場合には、
前記論理レジスタに対してライトした最後の命令の前記ベクトル長と、実行する命令のベクトル長とが等しいとき又は前記論理レジスタに対してライトした最後の命令の前記ベクトル長より、実行する命令のベクトル長が小さいときには、前記２つの物理レジスタのうちの１つの物理レジスタに対して依存関係を生成し、前記論理レジスタに対してライトした最後の命令の前記ベクトル長より、実行する命令のベクトル長が大きいときには、前記２つの物理レジスタの両方に対して依存関係を生成する、付記１１乃至付記１３のいずれか一つに記載のベクトルレジスタリネーミング制御方法。
（付記１５）マスク演算を含む命令かつ、前記デスティネーションレジスタをリードした最後の命令のベクトル長と、実行する命令のベクトル長が等しいときには、新たに割り当てられた物理レジスタに対して依存関係を生成し、前記デスティネーションレジスタをリードした最後の命令のベクトル長より、実行する命令のベクトル長が小さいときには、新たに割り当てられた物理レジスタに対して依存関係を生成する、付記１１乃至付記１４のいずれか一つに記載のベクトルレジスタリネーミング制御方法。
【符号の説明】
【００６８】
１    ベクトル計算機
１０    ベクトルプロセッサ
２０    メインメモリ
１００    命令制御部
１１０    命令供給部
１１１    命令発行制御部
１１２    レジスタリネーミング制御部
１１３    命令実行制御部
１２０、１２１、１３０、１４０、１４１、１４２、１５０、２２０、２２１、２２２、２２３    信号線
２００    演算部
２１０    ベクトルレジスタ群
２１１    リード選択部
２１２    演算器群
２１３    ライト選択部
【図１】
0006020428.tif 000002
【図２Ａ】
0006020428.tif 000003
【図２Ｂ】
0006020428.tif 000004
【図３Ａ】
0006020428.tif 000005
【図３Ｂ】
0006020428.tif 000006
【図４Ａ】
0006020428.tif 000007
【図４Ｂ】
0006020428.tif 000008
【図４Ｃ】
0006020428.tif 000009
【図４Ｄ】
0006020428.tif 000010
【図４Ｅ】
0006020428.tif 000011
【図５Ａ】
0006020428.tif 000012
【図５Ｂ】
0006020428.tif 000013
【図５Ｃ】
0006020428.tif 000014
【図６Ａ】
0006020428.tif 000015
【図６Ｂ】
0006020428.tif 000016
【図６Ｃ】
0006020428.tif 000017
【図７Ａ】
0006020428.tif 000018
【図７Ｂ】
0006020428.tif 000019
【図７Ｃ】
0006020428.tif 000020
【図８】
0006020428.tif 000021