(57)【特許請求の範囲】
【請求項１】
複数のベクトルパイプラインを有する命令実行部と、
前記複数のベクトルパイプラインの使用位置を指示する格納ポインタを生成する格納ポインタ生成部と、を有し、
前記ベクトルパイプラインは、ベクトル命令の対象となる要素を格納するベクトルレジスタを有し、
前記格納ポインタ生成部は、前記ベクトル命令と共に範囲情報を受け取り、前記命令実行部にて先行ベクトル命令に続けて処理可能な後続の後続ベクトル命令が存在する場合は、前記先行ベクトル命令及び前記後続ベクトル命令の範囲情報に基づき、当該後続ベクトル命令の対象となる各要素が前記先行ベクトル命令の対象となる各要素に続いて所定のベクトルパイプラインのベクトルレジスタに格納されるよう前記格納ポインタを制御し、
前記命令実行部は、前記格納ポインタに従って、１又は複数のベクトル命令を、前記複数のベクトルパイプラインの一部又は全部により並列処理する、
ベクトル処理装置。
【請求項２】
前記格納ポインタ生成部は、前記ベクトルレジスタに要素を連続して格納するか否かを示す連続格納フラグと、前記ベクトル命令の対象となる要素数を示すベクトル長と、を前記範囲情報として受け取り、前記連続格納フラグ及び前記ベクトル長に基づき前記格納ポインタを生成する、
請求項１記載のベクトル処理装置。
【請求項３】
前記格納ポインタ生成部は、前記連続格納フラグに基づき、前記後続ベクトル命令を前記先行ベクトル命令に続けて処理する場合には、前記先行ベクトル命令におけるベクトル長に前記後続ベクトル命令におけるベクトル長を加算して格納ポインタを更新し、前記後続ベクトル命令を前記先行ベクトル命令に続けて処理しない場合は、先頭の前記ベクトルパイプラインから要素が格納されるよう前記格納ポインタを更新する、
請求項２記載のベクトル処理装置。
【請求項４】
各ベクトルパイプラインは、複数のベクトルレジスタを有するレジスタ列を有し、
前記格納ポインタ生成部は、前記連続格納フラグに基づき、前記後続ベクトル命令を前記先行ベクトル命令に続けて処理する場合には、各ベクトルパイプラインのレジスタ列の全ベクトルレジスタに要素が収納されるまで格納ポインタを更新する
請求項２及び３記載のベクトル処理装置。
【請求項５】
各ベクトルパイプラインは、前記レジスタ列を複数有し、
前記ベクトル命令に応じて前記ベクトルパイプラインの前記レジスタ列への要素の格納及び／又は前記レジスタ列からの要素の読み出しを制御する命令制御部を有する
請求項４記載のベクトル処理装置。
【請求項６】
ベクトル命令の対象となる要素を格納するベクトルレジスタを有する、複数のベクトルパイプラインによりベクトル命令を処理するベクトル処理方法であって、
前記複数のベクトルパイプラインの使用位置を指示する格納ポインタを生成する格納ポインタ生成ステップと、
前記格納ポインタに従って、１又は複数のベクトル命令を、前記複数のベクトルパイプラインの一部又は全部により並列処理する命令実行ステップと、を有し、
前記格納ポインタ生成ステップでは、前記ベクトル命令と共に範囲情報を受け取り、前記命令実行ステップにて先行ベクトル命令に続けて処理可能な後続の後続ベクトル命令が存在する場合は、前記先行ベクトル命令及び前記後続ベクトル命令の範囲情報に基づき、当該後続ベクトル命令の対象となる各要素が前記先行ベクトル命令の対象となる各要素に続いて所定のベクトルパイプラインのベクトルレジスタに格納されるよう前記格納ポインタが制御される、
ベクトル処理方法。
【請求項７】
前記格納ポインタ生成ステップでは、前記ベクトルレジスタに要素を連続して格納するか否かを示す連続格納フラグと、前記ベクトル命令の対象となる要素数を示すベクトル長と、を前記範囲情報として受け取り、前記連続格納フラグ及び前記ベクトル長に基づき前記格納ポインタが生成される、
請求項６記載のベクトル処理方法。
【請求項８】
前記格納ポインタ生成ステップでは、前記連続格納フラグに基づき、前記後続ベクトル命令を前記先行ベクトル命令に続けて処理する場合には、前記先行ベクトル命令におけるベクトル長に前記後続ベクトル命令におけるベクトル長を加算して格納ポインタを更新し、前記後続ベクトル命令を前記先行ベクトル命令に続けて処理しない場合は、先頭の前記ベクトルパイプラインから要素が格納されるよう前記格納ポインタを更新する、
請求項７記載のベクトル処理方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明はベクトル処理装置およびベクトル処理方法に関し、特にベクトル処理の効率性を向上させることが可能なベクトル処理装置およびベクトル処理方法に関する。
【背景技術】
【０００２】
近年のベクトルマシンにおいては、その処理が並列パイプライン化されている。本発明に関連する技術としては、例えば、特許文献１〜５に開示される技術がある。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特表２００８−５３５１１５号公報
【特許文献２】特開平０９−１９８３７４号公報
【特許文献３】特開平０８−３１４８９７号公報
【特許文献４】特開平０１−２０５２６９号公報
【特許文献５】特開昭６１−２９０５７０号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
しかしながら、処理が並列パイプライン化されたベクトルマシンでは、この並列度に満たない要素をベクトル処理する場合には、パイプラインをフルに使い切ることがなく、処理効率が低いものになる。また、短ベクトル長のベクトル命令を繰り返すことでは、実行開始時のオーバーヘッドのために処理効率が低いものになる。このため、ベクトル機における通常の長ベクトル処理と比べて、短ベクトル処理では効率よく処理ができないという問題があった。
【０００５】
本発明は、このような問題点を解決するためになされたものであり、ベクトル処理の効率性を向上することができるベクトル処理装置およびベクトル処理方法を提供することを目的とする。
【課題を解決するための手段】
【０００６】
本発明に係るベクトル処理装置は、ベクトルレジスタの使用要素範囲を特定する情報を含むベクトル命令の実行制御を行う命令制御部と、ベクトルレジスタの使用要素の位置を指示する格納ポインタを生成する格納ポインタ生成部と、複数のベクトルレジスタそれぞれが分散配置されて並列処理を実行する複数のベクトルパイプラインを含む命令実行部と、を備え、前記格納ポインタ生成部は、先行ベクトル命令の要素に続けて後続のベクトル命令列の要素を、前記複数のベクトルレジスタの特定した使用要素範囲に格納できるように、前記ベクトル命令を参照して前記格納ポインタを制御し、前記命令実行部は、前記格納ポインタ生成部によって生成された前記格納ポインタに従って、前記ベクトルレジスタへの要素の格納を行う。
【０００７】
本発明に係るベクトル処理装置のベクトル処理方法は、先行ベクトル命令の要素に続けて後続のベクトル命令列の要素を、複数のベクトルレジスタの特定した使用要素範囲に格納できるように、ベクトル命令を参照して格納ポインタを制御する格納ポインタ生成ステップと、前記格納ポインタに従って、前記ベクトルレジスタへの要素の格納を行う命令実行ステップと、を有する。
【発明の効果】
【０００８】
本発明により、ベクトル処理の効率性を向上することができるベクトル処理装置およびベクトル処理方法を提供することができる。
【図面の簡単な説明】
【０００９】
【図１】実施の形態１にかかるベクトル処理装置の構成を示す図である。
【図２】実施の形態１にかかる格納ポインタ生成部の構成を示す図である。
【図３】実施の形態１にかかる命令実行部の構成を示す図である。
【図４】一般的なベクトルマシンでの処理のようすを説明する図である。
【図５】実施の形態１にかかるベクトル処理装置の処理のようすを説明する図である。
【図６】実施の形態１にかかるベクトルマシンによる処理の効率性を説明する図である。
【図７】本発明にかかるベクトルマシンの本質的部分の構成を示す図である。
【発明を実施するための形態】
【００１０】
以下では、本発明を適用した具体的な実施の形態について、図面を参照しながら詳細に説明する。各図面において、同一又は対応する要素には同一の符号が付されており、説明の明確化のため、必要に応じて重複説明は省略される。
【００１１】
＜発明の実施の形態１＞
［構成の説明］
図１は、本実施の形態に係るベクトル処理装置の構成例を示している。ベクトル処理装置は、命令フェッチ部１０と、デコーダ部２０と、命令制御部３０と、格納ポインタ生成部４０と、命令実行部５０と、メモリ制御部６０と、メモリ７０と、を備える。
【００１２】
命令フェッチ部１０は、メモリ７０からプログラムをフェッチし、デコーダ部２０に対してベクトル命令を送出する。本実施の形態では、ベクトル命令は、連続格納フラグと、ベクトル命令の対象となるベクトルデータのベクトル長と、を含んでいる。命令に連続してベクトルレジスタにベクトル要素の格納を指示するための情報である。ベクトル処理装置は、このような連続格納フラグを用いることで、ベクトルレジスタの使用要素範囲を特定するとともに、先行命令に連続してベクトルレジスタにベクトル要素の格納を指示することができる。
【００１３】
デコーダ部２０は、命令フェッチ部１０から入力されたベクトル命令をデコードする。デコーダ部２０は、入力されたベクトル命令が連続格納フラグを含むベクトル命令である場合には、命令制御部３０に対して、命令（以下、図面においてコマンドとして示す場合がある。）と、連続格納フラグと、ベクトル長と、を送出する。
【００１４】
命令制御部３０は、デコーダ部２０からの命令と、連続格納フラグと、ベクトル長と、に基づいて、命令の実行制御を行う。具体的には、命令制御部３０は、デコーダ部２０からの命令（コマンド）と、連続格納フラグと、ベクトル長と、を受け付けると、ベクトル長（以下、図面において、ＶＬとして示す場合がある。）と連続格納フラグを、後述する格納ポインタ生成部４０に供給する。
【００１５】
また、命令制御部３０は、受け付けた命令（コマンド）の内容がロードなどのメモリアクセスである場合には、メモリ制御部６０に対してメモリアクセス指示を行う。命令制御部３０は、メモリ制御部６０を介して、命令実行部５０のベクトルレジスタとメモリ７０との間での、命令実行に必要なデータのやりとりを制御する。
【００１６】
また、命令制御部３０は、受け付けた命令（コマンド）の内容が命令実行部５０のベクトルレジスタへのベクトル要素格納指示、またはベクトル要素読出し指示である場合には、これら指示を実行するための命令（コマンド）を、命令実行部５０に対して送出する。
【００１７】
また、命令制御部３０は、受け付けた命令（コマンド）の内容が加算などの演算処理である場合には、加算命令を実行するための命令（コマンド）を、命令実行部５０に対して送出する。命令制御部３０は、命令実行部５０に対して、演算器の演算指示を行う。
【００１８】
格納ポインタ生成部４０は、命令制御部３０から入力されるベクトル長と連続格納フラグに基づいて、ベクトルレジスタの使用要素の位置を指示する格納ポインタを生成する。格納ポインタは、前命令によって命令実行部５０のベクトルレジスタに格納したデータ列に連続して、ベクトル要素をベクトルレジスタに格納するために用いられる。格納ポインタは、命令の対象となるベクトルレジスタのベクトル要素の格納位置を示すポインタである。格納ポインタを用いて、命令対象のベクトルレジスタのベクトル要素の開始番号を指示する。
【００１９】
格納ポインタ生成部４０の詳細を、図２を用いて説明する。図２は、格納ポインタ生成部４０の構成例を示している。格納ポインタ生成部４０は、複数のベクトルレジスタ格納ポインタ生成部（ベクトルレジスタ０格納ポインタ生成部４００、ベクトルレジスタ１格納ポインタ生成部４１０、ベクトルレジスタ２格納ポインタ生成部４２０）を備えている。なお、詳細は後述するが、複数のベクトルレジスタ格納ポインタ生成部それぞれは、命令実行部５０の複数のベクトルレジスタそれぞれに対応する。
【００２０】
格納ポインタ生成部４０は、連続格納フラグの内容が、命令実行部５０のベクトルレジスタにベクトル要素を連続して格納することを指示するものである場合、現在保持している格納ポインタの値を、ベクトルレジスタ格納ポインタの値として、命令実行部５０のベクトルレジスタへ送出する。そして、格納ポインタ生成部４０は、現在保持している格納ポインタの値にベクトル長（ＶＬ）を加え、その値を格納ポインタに保持する。なお、格納ポインタの値が、ベクトルレジスタのワード数を超える場合には、その超過分については、０番目の要素位置から格納を続ける。
【００２１】
なお、連続格納フラグの内容が、命令実行部５０のベクトルレジスタにベクトル要素を連続して格納することを指示するものであるか否かは、例えば、命令実行部５０のベクトルレジスタにベクトル要素を連続して格納することを指示するものである場合には、連続格納フラグの値を１とし、命令実行部５０のベクトルレジスタにベクトル要素を連続して格納することを指示するものでない場合には、連続格納フラグの値を０とすることで、示すことができる。また、連続格納フラグの内容は、ベクトル処理装置によって設定される。
【００２２】
図２において例えば、ベクトルレジスタ０格納ポインタ生成部４００は、連続格納フラグの内容が、命令実行部５０のベクトルレジスタにベクトル要素を連続して格納することを指示するものである場合、現在保持している格納ポインタ４０１の値を、ベクトルレジスタ０格納ポインタとして送出する。そして、ベクトルレジスタ０格納ポインタ生成部４００は、格納ポインタ４０１の値にベクトル長（ＶＬ）を加え、その値を格納ポインタ４０１の値として保持する。
【００２３】
一方で、格納ポインタ生成部４０は、連続格納フラグの内容が、命令実行部５０のベクトルレジスタにベクトル要素を連続して格納することを指示するものでない場合、現在保持している格納ポインタの値に替えて、要素０から開始するという情報（値'０'）をベクトルレジスタ格納ポインタの値として、命令実行部５０のベクトルレジスタへ送出する。そして、格納ポインタ生成部４０は、要素番号０にベクトル長（ＶＬ）を加え、その値を格納ポインタに保持する。
【００２４】
図２において例えば、ベクトルレジスタ０格納ポインタ生成部４００は、連続格納フラグの内容が、命令実行部５０のベクトルレジスタにベクトル要素を連続して格納することを指示するものでない場合、現在保持している格納ポインタ４０１の値に替えて、要素０から開始するという情報を、ベクトルレジスタ０格納ポインタの値として送出する。そして、ベクトルレジスタ０格納ポインタ生成部４００は、要素番号０にベクトル長（ＶＬ）を加え、その値を格納ポインタ４０１の値として保持する。
【００２５】
命令実行部５０は、命令制御部３０からの命令（ベクトル要素格納指示、ベクトル要素読み出し指示、演算指示を含む）と、格納ポインタ生成部４０からの格納ポインタと、に基づいて命令を実行する。命令実行部５０は、並列処理を実行する複数のベクトルパイプラインを備えている。各ベクトルパイプランは、複数のベクトルレジスタと、少なくとも１つの演算器と、を含んでいる。複数のベクトルパイプラインのそれぞれに、複数のベクトルレジスタそれぞれが分散配置される。
【００２６】
命令実行部５０の詳細を、図３を用いて説明する。図３は、命令実行部５０の構成例を示している。命令実行部５０は、複数のベクトルパイプライン（図では、ベクトルパイプライン０、ＶＰ１、ＶＰ２、・・・、ＶＰ１５として示す。）を備えている。図において、例えばベクトルパイプライン５００は、複数のベクトルレジスタ５２０〜５６０（図では、ＶＡ０、ＶＡ１、ＶＡ２としてそれぞれ示す。）と、演算器５８０と、を備えている。なお、他のベクトルパイプライン（ＶＰ１、ＶＰ２、・・・、ＶＰ１５）の構成はベクトルパイプライン５００と同様であるため、ここではその詳細な説明を省略する。
【００２７】
ベクトルパイプライン５００のベクトルレジスタ５２０に対して、格納ポインタ生成部４０のベクトルレジスタ０格納ポインタが入力される。ベクトルレジスタ５４０に対して、ベクトルレジスタ１格納ポインタが入力される。ベクトルレジスタ５６０に対して、ベクトルレジスタ２格納ポインタが入力される。
【００２８】
なお、他のベクトルパイプライン（ＶＰ１、ＶＰ２、・・・、ＶＰ１５）が有するベクトルレジスタ（ＶＡ０、ＶＡ１、ＶＡ２）それぞれに対しても、格納ポインタ生成部４０が有する格納ポインタ（ベクトルレジスタ０格納ポインタ、ベクトルレジスタ１格納ポインタ、ベクトルレジスタ２格納ポインタ）それぞれが入力される。
【００２９】
また、以下の説明においては、説明の簡便化のため、複数のベクトルパイプライン（ベクトルパイプライン０、ＶＰ１、ＶＰ２、・・・、ＶＰ１５）それぞれが有するベクトルレジスタ５２０（ＶＡ０）を、"命令実行部５０の０番目のベクトルレジスタ"と総称し、複数のベクトルパイプライン（ベクトルパイプライン０、ＶＰ１、ＶＰ２、・・・、ＶＰ１５）それぞれが有するベクトルレジスタ５４０（ＶＡ１）を、"命令実行部５０の１番目のベクトルレジスタ"と総称し、複数のベクトルパイプライン（ベクトルパイプライン０、ＶＰ１、ＶＰ２、・・・、ＶＰ１５）それぞれが有するベクトルレジスタ５６０（ＶＡ１）を、"命令実行部５０の２番目のベクトルレジスタ"と総称する場合がある。
【００３０】
ベクトルパイプライン５００の複数のベクトルレジスタ５２０〜５６０それぞれは、命令制御部３０からのベクトル要素格納指示に従い、格納ポインタ生成部４０から送られるベクトルレジスタ格納ポインタが示す要素の格納を行う。また、ベクトルレジスタ５２０〜５６０それぞれは、命令制御部３０からのベクトル要素読出し指示に従い、格納ポインタ生成部４０から送られるベクトルレジスタ格納ポインタが示す要素の読出しを行う。
【００３１】
例えば、ベクトルレジスタ５２０は、命令制御部３０からのベクトル要素格納指示に従い、格納ポインタ生成部４０からのベクトルレジスタ０格納ポインタが示す要素の格納を行う。また、ベクトル要素読出し指示に従い、ベクトルレジスタ０格納ポインタが示す要素の読出しを行う。
【００３２】
［動作の説明］
続いて以下では、ベクトル処理装置の動作の一例を、図４〜図６を用いて説明する。本実施の形態では、２次元配列の行列和の演算を例に説明し、以下に、この演算処理を実現するためのプログラムの構成例を示す。なお、以下の例では、ループ回数ｍが、ベクトルマシンのパイプラインの並列度と比較して小さな場合を例に説明する。下記のプログラムは２重のループを用いて構成されている。外側のループはカウンタｉを用いたｎ回のループにより構成され、内側のループはカウンタｊを用いたｍ回のループにより構成されている。
［演算の一例］
for ( i=0 ; i<n ; i++ ) {
for ( j=0 ; j<m ; j++ ) { C[i][j] = A[i][j] + B[i][j] ; }
}
【００３３】
上記プログラムのループ構成に関して、一般的なベクトル機におけるベクトル処理演算では、内側ループｊをベクトル命令に置き換えて構成することが多い。以下に、ベクトル命令に置き換えた後のプログラムの構成例を示す。
［ベクトル処理演算の一例：一般的なプログラムの構成例］
iの値を初期化
LOOP:
ｉの値がｎより小さくなければループから脱出
A[i]のアドレスから、ｍ個分のデータをベクトルロードし、ベクトルレジスタ０へ
B[i]のアドレスから、ｍ個分のデータをベクトルロードし、ベクトルレジスタ１へ
ベクトルレジスタ０とベクトルレジスタ１をｍ回分ベクトル加算し、ベクトルレジスタ２へ
ベクトルレジスタ２の内容を、C[i]のアドレスから、ｍ個分ベクトルストア
LOOPに戻る
【００３４】
一般的なベクトル機でこのようなベクトル処理を演算する際に、ｍの値が小さな場合には、ベクトルレジスタに格納するベクトル長が短くなってしまい、結果としてベクトル加算の効率が落ちてしまうことがある。
具体的に説明する。例えば最大ベクトル長を２５６要素とするベクトル処理システムにおいて、そのシステムのマイクロアーキテクチャが、１６本のベクトルパイプラインを備える構成例を想定する。一般的に、ベクトルレジスタは、１６本のベクトルパイプラインに対して分散して配置される。分散配置される際のルールとしては、例えば、"要素番号を１６で剰余したときに値が０となる要素については、１６本のベクトルパイプラインのうちで０番目のベクトルパイプラインを用いる。要素番号を１６で剰余したときに値が１となる要素については、１番目のベクトルパイプラインを用いる。" という手法が考えられる。
【００３５】
しかし、上記した構成例において例えばｍが８である場合には、上記ベクトル処理演算では、上述した全てのベクトル命令（ベクトルロード、ベクトル加算、ベクトルストア）の実行において、１６本のベクトルパイプラインのうちで８本のベクトルパイプラインのみしか使用されないことになる。このため、残り８本のベクトルパイプラインでは処理が行われないことになり、処理効率の低下をもたらすことになる（図４に示すように、ベクトルパイプライン０〜ベクトルパイプライン７のみしか使用されず、ベクトルパイプライン８〜ベクトルパイプライン１５では処理が行われない。）。
【００３６】
そこで、本実施の形態においては、以下に例示する仕組みを導入することで、複数の短ベクトル処理を、１つの長ベクトル処理としてまとめることを可能とする。具体的には、以下に例示するプログラムの命令列を導入する。
［本実施の形態に係るベクトル処理演算の一例］
iの値を初期化
LOOP:
ｉの値がｎより小さくなければループから脱出
A[i]のアドレスから、ｍ個分のデータをベクトルロードし、ベクトルレジスタ０へ、連続格納フラグが連続格納を示していない・・・命令（１）
A[i+1]のアドレスから、ｍ個分のデータをベクトルロードし、ベクトルレジスタ０へ、連続格納フラグが連続格納を示している・・・命令（２）
B[i]のアドレスから、ｍ個分のデータをベクトルロードし、ベクトルレジスタ１へ、連続格納フラグが連続格納を示していない・・・命令（３）
B[i+1]のアドレスから、ｍ個分のデータをベクトルロードし、ベクトルレジスタ１へ、連続格納フラグが連続格納を示している・・・命令（４）
ベクトルレジスタ０とベクトルレジスタ１を２＊ｍ回分ベクトル加算し、ベクトルレジスタ２へ・・・命令（５）
ベクトルレジスタ２の内容を、C[i]のアドレスから、ｍ個分ベクトルストアし、連続格納フラグが連続格納を示していない・・・命令（６）
ベクトルレジスタ２の内容を、C[i+1]のアドレスから、ｍ個分ベクトルストア、連続格納フラグが連続格納を示している・・・命令（７）
ｉを２インクリメントする
LOOPに戻る
【００３７】
以下、上記プログラムの各命令列に従って、ベクトル処理装置の動作内容を具体的に説明する。プログラム（１）と（２）では、アドレスA[i]とA[i+1]についてのロードが行われる。プログラム（３）と（４）では、アドレスB[i]とB[i+1]についてのロードが行われる。プログラム（５）では、（１）〜（４）でロードされたデータについて、加算処理が行われる。プログラム（６）と（７）では、アドレスC[i]とC[i+1]についてのストアが行われる。
【００３８】
まず、上記プログラムの（１）において、デコーダ部２０は、連続格納フラグが連続格納を示していないベクトルロード命令が入力されると、命令とベクトル長ｍを、命令制御部３０へ送出する。
命令制御部３０は、連続格納を示していない連続格納フラグと、ベクトル長ｍと、をベクトルレジスタ０格納ポインタ生成部４００へ送出する。
ベクトルレジスタ０格納ポインタ生成部４００は、入力された連続格納フラグが連続格納を示していないため、０番目の要素位置から格納を開始するという情報（ベクトルレジスタ０格納ポインタ）を、命令実行部５０の対応するベクトルレジスタ（命令実行部５０の０番目のベクトルレジスタ）へ送出し、また、格納ポインタ４０１の現在値としてベクトル長ｍを保持する。
命令制御部３０は、メモリ７０に記憶されたデータについて、アドレスA[i]からｍ個分のデータをロードするようにメモリ制御部６０に対して指示を送出する。また、命令制御部３０は、命令実行部５０の０番目のベクトルレジスタに対して、要素０から格納するように格納指示を送出する。
【００３９】
次に、上記プログラムの（２）において、デコーダ部２０は、連続格納フラグが連続格納を示すベクトルロード命令が入力されると、命令と、ベクトル長ｍと、連続格納フラグと、を命令制御部３０へ送出する。
命令制御部３０は、連続格納を示す連続格納フラグと、ベクトル長ｍと、をベクトルレジスタ０格納ポインタ生成部４００へ送出する。
ベクトルレジスタ０格納ポインタ生成部４００は、入力された連続格納フラグが連続格納を示すため、格納ポインタ４０１の現在値（ｍ）を、命令実行部５０の０番目のベクトルレジスタへ送出し、また、格納ポインタ４０１の現在値（ｍ）にベクトル長ｍを加え、その値（ｍ＋ｍ＝２＊ｍ）を、格納ポインタ４０１に保持する。
命令制御部３０は、メモリ７０に記憶されたデータについて、アドレスA[i+1]からｍ個分のデータをロードするようにメモリ制御部６０に対して指示を送出する。また、命令制御部３０は、命令実行部５０の０番目のベクトルレジスタに対して、要素ｍから格納するように格納指示を送出する。
【００４０】
上記プログラムの（３）と（４）では、データB[i]とB[i+1]に関するロードが行われる。この処理は、上記（１）と（２）における処理と同様であるため、ここではその詳細な説明を省略する。
【００４１】
次に、上記プログラムの（５）において、デコーダ部２０は、ベクトル加算命令が入力されると、命令とベクトル長２＊ｍを命令制御部３０へ送出する。
命令制御部３０は、連続格納を示していない連続格納フラグと、ベクトル長２＊ｍと、をベクトルレジスタ２格納ポインタ生成部４２０へ送出する。
ベクトルレジスタ２格納ポインタ生成部４２０は、入力された連続格納フラグが連続格納を示していないため、０番目の要素位置から格納を開始するという情報（ベクトルレジスタ２格納ポインタ）を、命令実行部５０の２番目のベクトルレジスタへ送出し、また、格納ポインタ４２１の値としてベクトル長２＊ｍを保持する。
命令制御部３０は、命令実行部５０の０番目のベクトルレジスタと、命令実行部５０の１番目のベクトルレジスタとに対して、２＊ｍ個分の加算指示を送出する。また、命令制御部３０は、命令実行部５０の２番目のベクトルレジスタに対して、要素０から格納するように格納指示を送出する。
【００４２】
次に、上記プログラム（６）において、デコーダ部２０は、連続格納フラグが連続格納を示していないベクトルストア命令が入力されると、命令とベクトル長ｍを、命令制御部３０へ送出する。
命令制御部３０は、連続格納を示していない連続格納フラグと、ベクトル長ｍと、をベクトルレジスタ２格納ポインタ生成部４２０へ送出する。
ベクトルレジスタ２格納ポインタ生成部４２０は、連続格納フラグが連続格納を示していないため、０番目の要素位置から格納を開始するという情報（ベクトルレジスタ２格納ポインタ）を、命令実行部５０の２番目のベクトルレジスタへ送出し、また、格納ポインタ４２１の値としてベクトル長ｍを保持する。
命令制御部３０は、要素０からｍ個分のデータを、メモリ７０におけるアドレスC[i]から開始してストアするように、命令実行部５０の２番目のベクトルレジスタに対してストア指示（ベクトルレジスタへの読み出し指示）を送出する。
【００４３】
プログラム（７）において、デコーダ部２０は、連続格納フラグが連続格納を示すベクトルストア命令が入力されると、命令とベクトル長ｍと連続格納フラグを命令制御部３０へ送出する。
命令制御部３０は、ベクトル長ｍと連続格納フラグをベクトルレジスタ２格納ポインタ生成部４２０へ送出する。
ベクトルレジスタ２格納ポインタ生成部４２０は、入力された連続格納フラグが連続格納を示すため、現在の格納ポインタ４２１の値（ｍ）を命令実行部５０の２番目のベクトルレジスタへ送出し、また、格納ポインタ４２１の現在値（ｍ）にベクトル長ｍを加え、その値（ｍ＋ｍ＝２＊ｍ）を、格納ポインタ４２１に保持する。
命令制御部３０は、要素ｍからｍ個分のデータを、メモリ７０におけるアドレスC[i+1]から開始してストアするように、命令実行部５０の２番目のベクトルレジスタに対してストア指示（ベクトルレジスタへの読み出し指示）を送出する。
【００４４】
以上説明したように、上記のプログラムの例では、２つの短ベクトルを１つの長ベクトルとしてまとめ、このまとめたベクトルに対してベクトル処理を行っている。したがって、例えばベクトル長ｍが８である場合には、図５に示すように、ベクトル加算処理において１６本すべてのベクトルパイプラインが埋まることになるため、高効率なベクトル処理が可能となる。
【００４５】
具体的には、A[i][0]〜A[i][7]の要素が、ベクトルパイプライン０〜ベクトルパイプライン７のベクトルレジスタにかけてそれぞれ格納され、A[i+1][0]〜A[i+1][7]の要素が、ベクトルパイプライン８〜ベクトルパイプライン１５のベクトルレジスタにかけてそれぞれ格納される。また、B[i][0]〜B[i][7]の要素と、B[i+1][0]〜B[i+1][7]の要素と、についても、同様にしてベクトルパイプライン０〜ベクトルパイプライン７と、ベクトルパイプライン８〜ベクトルパイプライン１５に格納される。そして、演算結果C[i][0]〜C[i][7]の要素とC[i+1][0]〜C[i+1][7]の要素が、ベクトルパイプライン０〜ベクトルパイプライン７とベクトルパイプライン８〜ベクトルパイプライン１５にそれぞれ格納される。
【００４６】
また、各ベクトルレジスタの動作について確認すると、上記した一般的なプログラムの構成例では、図６の上図に示すように、一つの短ベクトル毎に加算が行われていたのに対して、本実施の形態に係るプログラムの構成例によれば、図６の下図に示すように、２つの短ベクトルを１つの長ベクトルにまとめて加算を行う。このため、短ベクトルを対象とする演算においても必要なデータを効率よくロードおよびストアすることができ、演算器の利用効率を向上させることができる。
【００４７】
以上説明したように本実施の形態によれば、ベクトルレジスタの使用要素範囲を特定可能なベクトル命令と、ベクトルレジスタの格納ポインタを制御する格納ポインタ生成部と、を設ける。格納ポインタ生成部は、ベクトル命令を参照して、先行命令の要素に続けて後続のベクトル命令列の要素を、ベクトルレジスタの特定した使用要素範囲に格納できるように、格納ポインタを制御する。
これにより、短ベクトル長である連続したベクトル命令の要素を、単一のベクトルレジスタにまとめて格納することができるため、短ベクトル長の命令であっても演算器へと間断なく要素供給することが可能になり、その結果、演算器の利用効率を向上させることができる。
【００４８】
＜発明の実施の形態２＞
本実施の形態では、上述した発明の実施の形態１に係るベクトル処理装置の変形例について説明する。上述した実施の形態１では、２つの短ベクトルを１つにまとめて処理する場合を例に説明したが、より多くの短ベクトルを１つにまとめて処理するものとしてもよい。
【００４９】
本実施の形態では、ベクトル命令は、"A[i]のアドレスからｍ個分のデータをベクトルロードしてベクトルレジスタ０へ格納する短ベクトル処理を複数まとめる"ための連続格納フラグと、"B[i]のアドレスからｍ個分のデータをベクトルロードしてベクトルレジスタ１へ格納する短ベクトル処理を複数まとめる"ための連続格納フラグと、が付帯した連続格納フラグ付き命令である。そして、本実施の形態に係るベクトル処理装置は、連続して格納する要素数が最大ベクトル長を超えない範囲で、このベクトル命令を繰り返すことができる。
【００５０】
例えば、ｍが８で、最大ベクトル長が２５６要素である場合には、最大で３２回この命令を繰り返すことができる。これにより、３２個の短ベクトルを一つの長ベクトルとしてみなすことができる。このため、ベクトルレジスタ０とベクトルレジスタ１のベクトル加算では、８×３２個分のデータを一度に処理することになり、効率性をより向上させたベクトル処理が可能となる。
【００５１】
＜その他の実施の形態＞
上述した実施の形態１では、ベクトルレジスタへの使用要素範囲を特定する情報として、連続格納フラグとベクトル長を用いる例を示した。しかしながら、ベクトルレジスタへの使用要素範囲を特定するための情報、具体的には、"ベクトルレジスタの格納ポインタを制御するための情報"は、"ベクトルレジスタの使用開始要素番号とベクトル長"を用いることで実現されてもよい。また、"ベクトルレジスタの使用開始要素番号と終了要素番号"を用いることで実現されてもよい。
【００５２】
ここで、図７を参照して、本発明の概要を改めて説明する。図７は、本発明にかかるベクトル処理装置の本質的部分のみを抽出して記載したブロック図である。ベクトル処理装置は、ベクトルレジスタの使用要素範囲を特定する情報を含むベクトル命令の実行制御を行う命令制御部３０と、ベクトルレジスタの使用要素の位置を指示する格納ポインタを生成する格納ポインタ生成部４０と、複数のベクトルレジスタそれぞれが分散配置されて並列処理を実行する複数のベクトルパイプラインを含む命令実行部５０と、を備えている。
【００５３】
格納ポインタ生成部４０は、先行ベクトル命令の要素に続けて後続のベクトル命令列の要素を、複数のベクトルレジスタの特定した使用要素範囲に格納できるように、ベクトル命令を参照して格納ポインタを制御する。命令実行部５０は、格納ポインタ生成部によって生成された格納ポインタに従って、ベクトルレジスタへの要素の格納を行う。
【００５４】
上述した複数の実施の形態は、適宜組み合わせることも可能である。さらに、本発明は上述した実施の形態のみに限定されるものではなく、既に述べた本発明の要旨を逸脱しない範囲において種々の変更が可能であることは勿論である。
【００５５】
上記の複数の実施の形態の一部又は全部は、以下の付記のようにも記載され得るが、以下には限られない。
【００５６】
（付記１）
ベクトルレジスタの使用要素範囲を特定する情報を含むベクトル命令の実行制御を行う命令制御部と、
ベクトルレジスタの使用要素の位置を指示する格納ポインタを生成する格納ポインタ生成部と、
複数のベクトルレジスタそれぞれが分散配置されて並列処理を実行する複数のベクトルパイプラインを含む命令実行部と、を備え、
前記格納ポインタ生成部は、先行ベクトル命令の要素に続けて後続のベクトル命令列の要素を、前記複数のベクトルレジスタの特定した使用要素範囲に格納できるように、前記ベクトル命令を参照して前記格納ポインタを制御し、
前記命令実行部は、前記格納ポインタ生成部によって生成された前記格納ポインタに従って、前記ベクトルレジスタへの要素の格納を行う、ベクトル処理装置。
【００５７】
（付記２）
前記命令制御部は、前記ベクトルレジスタに要素を連続して格納するか否かを示す連続格納フラグと、前記ベクトル命令の対象となるベクトルデータのベクトル長と、を含むベクトル命令の実行制御を行い、
前記格納ポインタ生成部は、前記連続格納フラグが前記ベクトルレジスタに要素を連続して格納することを示す場合には、現在保持する格納ポインタを前記実行制御部の前記ベクトルレジスタへ送出し、前記ベクトル長に応じて前記保持する格納ポインタを更新する、付記１に記載のベクトル処理装置。
【００５８】
（付記３）
先行ベクトル命令の要素に続けて後続のベクトル命令列の要素を、複数のベクトルレジスタの特定した使用要素範囲に格納できるように、ベクトル命令を参照して格納ポインタを制御する格納ポインタ生成ステップと、
前記格納ポインタに従って、前記ベクトルレジスタへの要素の格納を行う命令実行ステップと、を有するベクトル処理装置のベクトル処理方法。
【００５９】
（付記４）
前記格納ポインタ生成ステップは、前記ベクトルレジスタに要素を連続して格納するか否かを示す連続格納フラグが前記ベクトルレジスタに要素を連続して格納することを示す場合には、現在保持する格納ポインタを前記実行制御部の前記ベクトルレジスタへ送出し、前記ベクトル命令の対象となるベクトルデータのベクトル長に応じて前記保持する格納ポインタを更新する、付記３に記載のベクトル処理装置のベクトル処理方法。
【符号の説明】
【００６０】
１０  命令フェッチ部、
２０  デコーダ部、
３０  命令制御部、
４０  格納ポインタ生成部、
４００  ベクトルレジスタ０格納ポインタ生成部、
４１０  ベクトルレジスタ１格納ポインタ生成部、
４２０  ベクトルレジスタ２格納ポインタ生成部、
４０１、４１１、４２１  格納ポインタ
５０  命令実行部、
５００  ベクトルパイプライン、
５２０、５４０、５６０  ベクトルレジスタ、
６０  メモリ制御部、
７０  メモリ、
【図１】
0005413473.tif 000002
【図２】
0005413473.tif 000003
【図３】
0005413473.tif 000004
【図４】
0005413473.tif 000005
【図５】
0005413473.tif 000006
【図６】
0005413473.tif 000007
【図７】
0005413473.tif 000008