(57)【要約】【課題】  ベクトル演算装置で、複数の同種演算の計算式を1つの計算式として高速に処理ができるようにする。【解決手段】  複数のベクトルパイプでは、複数のベクトル演算がそれぞれ並列に処理され、ベクトルパイプが有するベクトルレジスタは、ベクトル演算対象となるデータが一時蓄積されると共に、当該データに基づくベクトル演算結果が一時蓄積され、データ転送部は、ベクトル演算対象となるデータをメモリからベクトルレジスタに複写転送すると共に、ベクトル演算結果をベクトルレジスタからメモリに複写転送し、このデータ転送部がアクセスするメモリの領域を指定する際に、ベクトルパイプ毎にメモリの指定領域が異なるようにする。また、ベクトル演算器による演算の際に用いるベクトルの要素数がベクトルパイプ毎に異なるようにする。【選択図】  図１
2006251978.tif 000002
【特許請求の範囲】
【請求項１】
ベクトル演算対象となるデータを蓄積すると共に、当該データに基づくベクトル演算結果を蓄積するメモリと、
複数のベクトル演算をそれぞれ並列に処理する複数のベクトルパイプと
を備え、
前記ベクトルパイプは、
前記ベクトル演算対象となるデータを一時蓄積すると共に、当該データに基づくベクトル演算結果を一時蓄積するベクトルレジスタと、
前記ベクトル演算対象となるデータを前記メモリから前記ベクトルレジスタに複写転送すると共に、前記ベクトル演算結果を前記ベクトルレジスタから前記メモリに複写転送するデータ転送部と、
このデータ転送部がアクセスする前記メモリの領域を指定する配列情報蓄積部と
を備えたベクトル演算装置において、
前記配列情報蓄積部は、前記ベクトルパイプ毎に前記メモリの指定領域が異なるように領域指定情報を保持する手段を備えた
ことを特徴とするベクトル演算装置。
【請求項２】
複数の前記ベクトルパイプは、前記ベクトル演算器による演算の際に用いるベクトルの要素数を指定するベクトル長蓄積部を備え、
このベクトル長蓄積部は、前記ベクトルパイプ毎に前記要素数が異なるように要素数指定情報を保持する手段を備えた
請求項１記載のベクトル演算装置。
【請求項３】
２以上の前記ベクトルレジスタについて、その一方はスカラデータとして他方は演算オペラントとして用いるように前記ベクトル演算器に指示する手段を備え、
前記ベクトル演算器は、前記指示を受けて、指定された一方の前記ベクトルレジスタの先頭に格納されているデータをスカラデータとして複数回読み出し、他方の前記ベクトルレジスタの演算オペラントとしての各要素と当該スカラデータとに基づき演算を行う手段を備えた
請求項１または２記載のベクトル演算装置。
【請求項４】
第一のベクトルパイプの第一のベクトル演算器に第一のベクトルレジスタ群から供給されるデータが、第二のベクトルパイプの第二のベクトル演算器にも入力データとして供給され、
前記第二のベクトルパイプに前記第一のベクトルパイプから供給されるデータを入力データとして用いるように前記第二のベクトル演算器に指示する手段を備え、
前記第一のベクトルパイプの前記第一のベクトル演算器は、前記第二のベクトル演算器に対する前記指示を受けて、前記第一のベクトルレジスタ群からデータを読み出し演算を行うと共に、前記第二のベクトルパイプにも当該データを供給する手段を備え、
前記第二のベクトルパイプの前記第二のベクトル演算器は、前記指示を受けて、前記第一のベクトルパイプから供給されるデータを入力データとして用いる手段を備えた
請求項１または２記載のベクトル演算装置。
【請求項５】
前記第一のベクトルパイプの前記第一のベクトル演算器から前記第二のベクトルパイプの前記第二のベクトル演算器に供給するデータの数を指定する最大ベクトル長蓄積部を備え、
前記第一のベクトルパイプの前記第一のベクトル演算器は、前記第二のベクトルパイプの前記第二のベクトル演算器に供給するデータの数を前記最大ベクトル長蓄積部で指定される数にする手段を備えた
請求項２または４記載のベクトル演算装置。
【請求項６】
各ベクトルパイプの前記ベクトル演算器は、総和を含むリダクション演算を指示されたときには、それぞれ、自己が含まれる前記ベクトルパイプの前記ベクトルレジスタから供給されるデータを演算し当該ベクトルレジスタに演算結果を出力する手段を備えた
請求項１または２記載のベクトル演算装置。
【請求項７】
１番目の前記ベクトルパイプの前記データ転送部に前記ベクトルレジスタのデータを前記メモリに複写転送するように指示する手段と、
１番目の前記ベクトルパイプの前記データ転送部の前記複写転送が完了したことを検知して、２番目の前記ベクトルパイプの前記データ転送部に前記ベクトルレジスタのデータを前記メモリに複写転送するように指示する手段と、
以降順に各ベクトルパイプの前記データ転送部に逐次的に複写転送を行うように指示する手段と
を備えた請求項１または２記載のベクトル演算装置。
【請求項８】
メモリには、ベクトル演算対象となるデータを蓄積すると共に、当該データに基づくベクトル演算結果が蓄積され、
複数のベクトルパイプでは、複数のベクトル演算がそれぞれ並列に処理され、
前記ベクトルパイプが有するベクトルレジスタは、前記ベクトル演算対象となるデータが一時蓄積されると共に、当該データに基づくベクトル演算結果が一時蓄積され、
データ転送部は、前記ベクトル演算対象となるデータを前記メモリから前記ベクトルレジスタに複写転送すると共に、前記ベクトル演算結果を前記ベクトルレジスタから前記メモリに複写転送し、
配列情報蓄積部は、このデータ転送部がアクセスする前記メモリの領域を指定する
ベクトル演算装置に適用されるベクトル演算方法において、
前記配列情報蓄積部は、前記ベクトルパイプ毎に前記メモリの指定領域が異なるように領域指定情報を保持する
ことを特徴とするベクトル演算方法。
【請求項９】
前記ベクトル演算器による演算の際に用いるベクトルの要素数が前記ベクトルパイプ毎に異なるように保持される請求項８記載のベクトル演算方法。
【請求項１０】
２以上の前記ベクトルレジスタについて、その一方はスカラデータとして他方は演算オペラントとして用いるように前記ベクトル演算器に指示し、
前記ベクトル演算器は、前記指示を受けて、指定された一方の前記ベクトルレジスタの先頭に格納されているデータをスカラデータとして複数回読み出し、他方の前記ベクトルレジスタの演算オペラントとしての各要素と当該スカラデータとに基づき演算を行う
請求項８または９記載のベクトル演算方法。
【請求項１１】
第一のベクトルパイプの第一のベクトル演算器に第一のベクトルレジスタ群から供給されるデータが、第二のベクトルパイプの第二のベクトル演算器にも入力データとして供給され、
前記第二のベクトルパイプに前記第一のベクトルパイプから供給されるデータを入力データとして用いるように前記第二のベクトル演算器に指示し、
前記第一のベクトルパイプの前記第一のベクトル演算器は、前記第二のベクトル演算器に対する前記指示を受けて、前記第一のベクトルレジスタ群からデータを読み出し演算を行うと共に、前記第二のベクトルパイプにも当該データを供給し、
前記第二のベクトルパイプの前記第二のベクトル演算器は、前記指示を受けて、前記第一のベクトルパイプから供給されるデータを入力データとして用いる
請求項８または９記載のベクトル演算方法。
【請求項１２】
前記第一のベクトルパイプの前記第一のベクトル演算器から前記第二のベクトルパイプの前記第二のベクトル演算器に供給するデータの数が指定され、
前記第一のベクトルパイプの前記第一のベクトル演算器は、前記第二のベクトルパイプの前記第二のベクトル演算器に供給するデータの数を指定される数にする
請求項９または１１記載のベクトル演算方法。
【請求項１３】
各ベクトルパイプの前記ベクトル演算器は、総和を含むリダクション演算を指示されたときには、それぞれ、自己が含まれる前記ベクトルパイプの前記ベクトルレジスタから供給されるデータを演算し当該ベクトルレジスタに演算結果を出力する
請求項８または９記載のベクトル演算方法。
【請求項１４】
１番目の前記ベクトルパイプの前記データ転送部に前記ベクトルレジスタのデータを前記メモリに複写転送するように指示し、
１番目の前記ベクトルパイプの前記データ転送部の前記複写転送が完了したことを検知して、２番目の前記ベクトルパイプの前記データ転送部に前記ベクトルレジスタのデータを前記メモリに複写転送するように指示し、
以降順に各ベクトルパイプの前記データ転送部に逐次的に複写転送を行うように指示する
請求項８または９記載のベクトル演算方法。
【請求項１５】
情報処理装置にインストールすることにより、その情報処理装置に、
ベクトル演算対象となるデータを蓄積すると共に、当該データに基づくベクトル演算結果を蓄積するメモリに相応する機能と、
複数のベクトル演算をそれぞれ並列に処理する複数のベクトルパイプに相応する機能と
を実現させ、
前記ベクトルパイプに相応する機能として、
前記ベクトル演算対象となるデータを一時蓄積すると共に、当該データに基づくベクトル演算結果を一時蓄積するベクトルレジスタに相応する機能と、
前記ベクトル演算対象となるデータを前記メモリから前記ベクトルレジスタに複写転送すると共に、前記ベクトル演算結果を前記ベクトルレジスタから前記メモリに複写転送するデータ転送部に相応する機能と、
このデータ転送部がアクセスする前記メモリの領域を指定する配列情報蓄積部に相応する機能と
を実現させるプログラムにおいて、
前記配列情報蓄積部に相応する機能として、前記ベクトルパイプ毎に前記メモリの指定領域が異なるように領域指定情報を保持する機能を実現させる
ことを特徴とするプログラム。
【請求項１６】
複数の前記ベクトルパイプに相応する機能として、前記ベクトル演算器による演算の際に用いるベクトルの要素数を指定するベクトル長蓄積部に相応する機能を実現させ、
このベクトル長蓄積部に相応する機能として、前記ベクトルパイプ毎に前記要素数が異なるように要素数指定情報を保持する機能を実現させる
請求項１５記載のプログラム。
【請求項１７】
２以上の前記ベクトルレジスタについて、その一方はスカラデータとして他方は演算オペラントとして用いるように前記ベクトル演算器に指示する機能を実現させ、
前記ベクトル演算器に相応する機能として、前記指示を受けて、指定された一方の前記ベクトルレジスタの先頭に格納されているデータをスカラデータとして複数回読み出し、他方の前記ベクトルレジスタの演算オペラントとしての各要素と当該スカラデータとに基づき演算を行う機能を実現させる
請求項１５または１６記載のプログラム。
【請求項１８】
第一のベクトルパイプの第一のベクトル演算器に第一のベクトルレジスタ群から供給されるデータが、第二のベクトルパイプの第二のベクトル演算器にも入力データとして供給され、
前記第二のベクトルパイプに前記第一のベクトルパイプから供給されるデータを入力データとして用いるように前記第二のベクトル演算器に指示する機能を実現させ、
前記第一のベクトルパイプの前記第一のベクトル演算器に相応する機能として、前記第二のベクトル演算器に対する前記指示を受けて、前記第一のベクトルレジスタ群からデータを読み出し演算を行うと共に、前記第二のベクトルパイプにも当該データを供給する機能を実現させ、
前記第二のベクトルパイプの前記第二のベクトル演算器に相応する機能として、前記指示を受けて、前記第一のベクトルパイプから供給されるデータを入力データとして用いる機能を実現させる
請求項１５または１６記載のプログラム。
【請求項１９】
前記第一のベクトルパイプの前記第一のベクトル演算器から前記第二のベクトルパイプの前記第二のベクトル演算器に供給するデータの数を指定する最大ベクトル長蓄積部に相応する機能を実現させ、
前記第一のベクトルパイプの前記第一のベクトル演算器に相応する機能として、前記第二のベクトルパイプの前記第二のベクトル演算器に供給するデータの数を前記最大ベクトル長蓄積部で指定される数にする機能を実現させる
請求項１６または１８記載のプログラム。
【請求項２０】
各ベクトルパイプの前記ベクトル演算器に相応する機能として、総和を含むリダクション演算を指示されたときには、それぞれ、自己が含まれる前記ベクトルパイプの前記ベクトルレジスタから供給されるデータを演算し当該ベクトルレジスタに演算結果を出力する機能を実現させる
請求項１５または１６記載のプログラム。
【請求項２１】
１番目の前記ベクトルパイプの前記データ転送部に前記ベクトルレジスタのデータを前記メモリに複写転送するように指示する機能と、
１番目の前記ベクトルパイプの前記データ転送部の前記複写転送が完了したことを検知して、２番目の前記ベクトルパイプの前記データ転送部に前記ベクトルレジスタのデータを前記メモリに複写転送するように指示する機能と、
以降順に各ベクトルパイプの前記データ転送部に逐次的に複写転送を行うように指示する機能と
を実現させる請求項１５または１６記載のプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明はベクトル演算機能を有するコンピュータ上で配列に対する演算をベクトル演算により実行する方法および装置に関し、特に同種の複数のベクトル演算を一括して実行するベクトル演算方法および装置に関する。
【背景技術】
【０００２】
従来、ベクトル演算機能を有するコンピュータ上で、配列に対する演算をベクトル演算により実行する方法において、各々独立して計算可能な複数の同種の計算式を高速化の対象とし、その複数の計算式における左辺に表れる配列同士および右辺に現れる配列同士をそれぞれ組にして、同じ組の配列毎に１つの入力用ベクトルレジスタにメモリから複写して、複数の演算式を１回の演算で済ませて高速化する方法が、特許文献１に開示されている。
【０００３】
この従来技術におけるベクトル演算装置の例を図３２に示す。この例のベクトル演算装置は、ＣＰＵ１０１と、メモリ１０２を備える。ＣＰＵ１０１は、ベクトル演算機能を持った演算装置であり、命令解釈部１１１、配列情報蓄積部１１２、ベクトルパイプ１１４−１とベクトルパイプ１１４−２とを含んでいる。ベクトルパイプ１１４−１とベクトルパイプ１１４−２はそれぞれ、ベクトルレジスタセット１２１−１、１２１−２、データ転送部１２３−１、１２３−２、ベクトル演算器１２４−１、１２４−２とを含む。ベクトルレジスタセット１２１−１、１２１−２はベクトルレジスタＶａ（１２２ａ−１、１２２ａ−２）、ベクトルレジスタＶｂ（１２２ｂ−１、１２２ｂ−２）、ベクトルレジスタＶｃ（１２２ｃ−１、１２２ｃ−２）を有している。
【０００４】
命令解釈部１１１は、メモリ１０２からベクトルロードやベクトルストア等の複写命令、ベクトル演算命令等の命令コードをフェッチし、解読して、配列情報蓄積部１１２を制御し、またベクトルパイプ１１４−１およびベクトルパイプ１１４−２内の各モジュールを制御する機能を有する。
【０００５】
配列情報蓄積部１１２は、命令解釈部１１１が複写命令を実行したときに、その命令で指定されるアクセスするメモリ１０２の領域を保持し、その情報を両データ転送部１２３−１と１２３−２に出力する。
【０００６】
各ベクトルパイプ１１４−１、１１４−２のデータ転送部１２３−１、１２３−２は、ベクトルロード命令に従って、配列情報蓄積部１１２に格納された値で指定されるメモリ１０２の領域のデータを、それぞれのベクトルレジスタセット１２１−１と１２１−２内の任意のベクトルレジスタ１２２ａ−１、１２２ａ−２、１２２ｂ−１、１２２ｂ−２、１２２ｃ−１、１２２ｃ−２に複写する手段である。
【０００７】
このとき、ベクトルレジスタ１２２ａ−１、１２２ｂ−１、１２２ｃ−１には奇数番目のデータが、ベクトルレジスタ１２２ａ−２、１２２ｂ−２、１２２ｃ−２には偶数番目のデータが複写される。またその逆に、ベクトルストア命令に従って、両ベクトルパイプ１１４−１と１１４−２の任意のベクトルレジスタ１２２ａ−１、１２２ａ−２、１２２ｂ−１、１２２ｂ−２、１２２ｃ−１、１２２ｃ−２に格納された内容を配列情報蓄積部１１２に格納された値で指定されるメモリ１０２の領域に格納する処理を司る。このときも、ベクトルレジスタ１２２ａ−１、１２２ｂ−１、１２２ｃ−１のデータはメモリ１０２の領域の奇数番目に、ベクトルレジスタ１２２ａ−２、１２２ｂ−２、１２２ｃ−２のデータはメモリ１０２の領域の偶数番目に複写される。
【０００８】
各ベクトルパイプ１１４−１、１１４−２のベクトル演算器１２４−１、１２４−２は、ベクトルレジスタセット１２１−１、１２１−２内のベクトルレジスタ１２２ａ−１、１２２ａ−２、１２２ｂ−１、１２２ｂ−２、１２２ｃ−１、１２２ｃ−２のいずれか二つから供給されるデータを演算し、その演算結果をベクトルレジスタセット１２１−１、１２１−２内のベクトルレジスタ１２２ａ−１、１２２ａ−２、１２２ｂ−１、１２２ｂ−２、１２２ｃ−１、１２２ｃ−２のいずれか一つに格納する処理を司る。
【０００９】
この従来技術では、図３３に示すようなプログラムが存在し配列Ａ〜Ｆのサイズが４であった場合に、次のように動作して、複数の同種演算の計算式を一つの演算の計算式として処理し、高速化を実現している。
【００１０】
ステップ１で、命令解釈部１１１において開始アドレスを配列Ｂの先頭アドレス、要素数を４とするメモリ１０２上のデータをベクトルレジスタＶａ（１２２ａ−１、１２２ａ−２）の先頭にベクトルロードする命令が実行されると、メモリ１０２の領域情報が配列情報蓄積部１１２に渡される。また、配列情報蓄積部１１２から両データ転送部１２３−１と１２３−２に該領域情報が伝えられ、命令解釈部１１１から複写命令の指示が両データ転送部１２３−１と１２３−２に出される。
【００１１】
両データ転送部１２３−１と１２３−２は、メモリ１０２上の指定された領域の４個のデータをベクトルレジスタＶａ（１２２ａ−１、１２２ａ−２）に複写する。ベクトルレジスタＶａ（１２２ａ−１）の１番目にはＢ（１）が、２番目にはＢ（３）が格納される。ベクトルレジスタＶａ（１２２ａ−２）の１番目にはＢ（２）が、２番目にはＢ（４）が格納される。
【００１２】
ステップ２で、命令解釈部１１１において開始アドレスを配列Ｅの先頭アドレス、要素数を４とするメモリ１０２上のデータをベクトルレジスタＶａ（１２２ａ−１、１２２ａ−２）の５番目以降にベクトルロードする命令が実行されると、メモリ１０２の領域情報が配列情報蓄積部１１２に渡される。また、配列情報蓄積部１１２から両データ転送部１２３−１と１２３−２に該領域情報が伝えられ、命令解釈部１１１から複写命令の指示が両データ転送部１２３−１と１２３−２に出される。両データ転送部１２３−１と１２３−２は、メモリ１０２上の指定された領域の４個のデータをベクトルレジスタＶａ（１２２ａ−１、１２２ａ−２）の５番目以降に複写する。ベクトルレジスタＶａ（１２２ａ−１）の３番目にはＥ（１）が格納され、４番目にはＥ（３）が格納される。ベクトルレジスタＶａ（１２２ａ−２）の３番目にはＥ（２）が格納され、４番目にはＥ（４）が格納される。
【００１３】
これら二つのステップ１と２により、二つの配列ＢとＥのデータがベクトルレジスタＶａ（１２２ａ−１、１２２ａ−２）に複写される。このときベクトルレジスタＶａ（１２２ａ−１）とベクトルレジスタＶａ（１２２ａ−２）に格納されているデータを図３４に示す。図中「−」は不定値を示す。
【００１４】
ステップ３で、命令解釈部１１１において開始アドレスを配列Ｃの先頭アドレス、要素数を４とするメモリ１０２上のデータをベクトルレジスタＶｂ（１２２ｂ−１、１２２ｂ−２）の先頭にベクトルロードする命令が実行されると、メモリ１０２の領域情報が配列情報蓄積部１１２に渡される。
【００１５】
また、配列情報蓄積部１１２から両データ転送部１２３−１と１２３−２に該領域情報が伝えられ、命令解釈部１１１から複写命令の指示が両データ転送部１２３−１と１２３−２に出される。両データ転送部１２３−１と１２３−２は、メモリ１０２上の指定された領域の４個のデータをベクトルレジスタＶｂ（１２２ｂ−１、１２２ｂ−２）に複写する。ベクトルレジスタＶｂ（１２２ｂ−１）の１番目にはＣ（１）が、２番目にはＣ（３）が格納される。ベクトルレジスタＶｂ（１２２ｂ−２）の１番目にはＣ（２）が、２番目にはＣ（４）が格納される。
【００１６】
ステップ４で、命令解釈部１１１において開始アドレスを配列Ｆの先頭アドレス、要素数を４とするメモリ１０２上のデータをベクトルレジスタＶｂ（１２２ｂ−１、１２２ｂ−２）の５番目以降にベクトルロードする命令が実行されると、メモリ１０２の領域情報が配列情報蓄積部１１２に渡される。また、配列情報蓄積部１１２から両データ転送部１２３−１と１２３−２に該領域情報が伝えられ、命令解釈部１１１から複写命令の指示が両データ転送部１２３−１と１２３−２に出される。両データ転送部１２３−１と１２３−２は、メモリ１０２上の指定された領域の４個のデータをベクトルレジスタＶｂ（１２２ｂ−１、１２２ｂ−２）の５番目以降に複写する。ベクトルレジスタＶｂ（１２２ｂ−１）の３番目にはＦ（１）が格納され、４番目にはＦ（３）が格納される。ベクトルレジスタＶｂ（１２２ｂ−２）の３番目にはＦ（２）が格納され、４番目にはＦ（４）が格納される。
【００１７】
ステップ５で、命令解釈部１１１においてベクトル長を８、演算の種類を足し算、入力をベクトルレジスタＶａ（１２２ａ−１、１２２ａ−２）とベクトルレジスタＶｂ（１２２ｂ−１、１２２ｂ−１）、出力をベクトルレジスタＶｃ（１２２ｃ−１、１２２ｃ−２）とする命令が実行されると、その情報が両ベクトル演算器１２４−１とベクトル演算器１２４−２に伝えられる。ベクトル演算器１２４−１は、ベクトルレジスタＶａ（１２２ａ−１）とベクトルレジスタＶｂ（１２２ｂ−１）から４（指定されたベクトル長をパイプ数で割った値）個のデータをそれぞれ読み出し足し算を行って、演算結果をベクトルレジスタＶｃ（１２２ｃ−１）に格納する。ベクトル演算器１２４−２も同様に演算を行う。
【００１８】
ステップ６で、命令解釈部１１１において開始アドレスを配列Ａの先頭アドレス、要素数を４とするベクトルレジスタＶｃ（１２２ｃ−１、１２２ｃ−２）の先頭からデータをメモリ１０２にベクトルストアする命令が実行されると、メモリ１０２の領域情報が配列情報蓄積部１１２に渡される。
【００１９】
また、配列情報蓄積部１１２から両データ転送部１２３−１と１２３−２に該領域情報が伝えられ、命令解釈部１１１から複写命令の指示が両データ転送部１２３−１と１２３−２に出される。両データ転送部１２３−１と１２３−２は、ベクトルレジスタＶｃ（１２２ｃ−１、１２２ｃ−２）のデータをメモリ１０２上の指定された領域に複写する。これにより、メモリ１０２の配列Ａの領域に配列Ｂと配列Ｅを足し算した結果が格納される。
【００２０】
ステップ７で、命令解釈部１１１において開始アドレスを配列Ｄの先頭アドレス、要素数を４とするベクトルレジスタＶｃ（１２２ｃ−１、１２２ｃ−２）の５番目からデータをメモリ１０２にベクトルストアする命令が実行されると、メモリ１０２の領域情報が配列情報蓄積部１１２に渡される。
【００２１】
また、配列情報蓄積部１１２から両データ転送部１２３−１と１２３−２に該領域情報が伝えられ、命令解釈部１１１から複写命令の指示が両データ転送部１２３−１と１２３−２に出される。両データ転送部１２３−１と１２３−２は、ベクトルレジスタＶｃ（１２２ｃ−１、１２２ｃ−２）の５番目以降のデータをメモリ１０２上の指定された領域に複写する。これにより、メモリ１０２の配列Ｄの領域に配列Ｃと配列Ｆを足し算した結果が格納される。
【００２２】
従来技術はこのように動作することで、図３３に示す複数の同種演算の計算式を一つの演算の計算式として処理することを可能とし、高速化を実現することができる。
【００２３】
しかし、特許文献１に示された従来技術では、図３５に示すようなプログラムで配列データとスカラデータの演算の場合には適用することが出来なかった。また図３６に示すようなプログラムで演算の引数の片方が同じ（図ではＣ（Ｉ））場合には、配列Ｃを２回メモリ１０２からベクトルレジスタ１２２に複写する必要があり、高速化の障害となっていた。
【００２４】
また、図３７に示すようなプログラムで、総和などのリダクション演算の場合にも適用することができなかった。それは、ベクトル演算装置における総和演算が、ベクトルレジスタ１２２内の有効なデータ全てに対して行われてしまうことによる。例えば上記したステップ１の動作でベクトルレジスタＶａ（１２２ａ−１）にはデータＢ（１）、Ｂ（３）、Ｅ（１）、Ｅ（３）が格納されているため、総和演算を行うと、Ｂ（１）＋Ｂ（３）＋Ｅ（１）＋Ｅ（３）が計算されてしまい、配列Ｂの総和と配列Ｅの総和をそれぞれ求めることができなかった。
【００２５】
また、従来技術はデータの更新順序の保障という点でも問題を有している。図３３に示すプログラムの配列Ａおよび配列Ｄの更新順序は、Ａ（１）、Ｄ（１）、Ａ（２）、Ｄ（２）、Ａ（３）、Ｄ（３）、Ａ（４）、Ｄ（４）である。一般に配列Ａと配列Ｄの領域が独立であれば順序を意識せずに実行が可能であるが、重なりがあり順序を維持する必要がある場合が存在する。
【００２６】
従来のベクトル演算装置は、ベクトルストアが実行されたときに、メモリ１０２において、データ転送部１２３−１と１２３−２が出力する書き込みを整列して順序を保障していた。例えば、上記ステップ４での書き込みでは、メモリ１０２は、ベクトルレジスタＶｃ（１２２ｃ−１）の１番目の要素、ベクトルレジスタＶｃ（１２２ｃ−２）の一番目の要素、ベクトルレジスタＶｃ（１２２ｃ−１）の２番目の要素、ベクトルレジスタＶｃ（１２２ｃ−２）の２番目の要素、ベクトルレジスタＶｃ（１２２ｃ−１）の３番目の要素、…という順で書き込みを行うことを保障していた。
【００２７】
そのため、従来技術を用いた場合の配列ＡとＤの更新順序は、Ａ（１）、Ａ（２）、Ａ（３）、Ａ（４）、Ｄ（１）、Ｄ（２）、Ｄ（３）、Ｄ（４）となり、プログラムの実行順序と異なっていた。
【００２８】
以上の従来の動作手順を図３８のフローチャートに示す。
【００２９】
【特許文献１】特開平０２−２３６７７５号公報
【発明の開示】
【発明が解決しようとする課題】
【００３０】
第１の問題点は、複数の同種演算の計算式があって、演算の片方が配列でもう片方がスカラデータの場合には、１つの計算式として高速に処理ができないという点にある。
【００３１】
本発明の第１の目的は、複数の同種演算の計算式があって、演算の片方が配列でもう片方がスカラデータの場合にも、１つの計算式として高速に処理が可能なベクトル演算装置および方法を提供することにある。
【００３２】
第２の問題点は、複数の同種演算の計算式があって演算のオペラントの片方が同じ配列をさす場合に、１つの計算式として高速に処理するためにその同じ配列を複数回メモリからベクトルレジスタに複写する必要があり、高速に処理が出来ないという点にある。
【００３３】
本発明の第２の目的は、複数の同種演算の計算式があって演算のオペラントの片方が同じ配列をさす場合に、その同じ配列をメモリからベクトルレジスタに１回の複写で済ませ、１つの計算式として高速に処理が可能なベクトル演算装置および方法を提供することにある。
【００３４】
第３の問題点は、複数の同種演算の計算式があってもその演算が総和などのリダクション演算の場合には、１つの計算式として高速に処理できないという点にある。
【００３５】
本発明の第３の目的は、複数の同種演算の計算式があってその演算が総和などのリダクション演算の場合にも、１つの計算式として高速に処理が可能なベクトル演算装置および方法を提供することにある。
【００３６】
第４の問題点は、複数の同種演算の計算式があっても、実行順序がプログラムと同一にならないという点である。
【００３７】
本発明の第４の目的は、複数の同種演算の計算式があっても、１つの計算式として高速に処理が可能で且つ実行順序をプログラムと同一にすることができるベクトル演算装置および方法を提供することにある。
【課題を解決するための手段】
【００３８】
本発明の第一の観点は、ベクトル演算対象となるデータを蓄積すると共に、当該データに基づくベクトル演算結果を蓄積するメモリと、複数のベクトル演算をそれぞれ並列に処理する複数のベクトルパイプとを備え、前記ベクトルパイプは、前記ベクトル演算対象となるデータを一時蓄積すると共に、当該データに基づくベクトル演算結果を一時蓄積するベクトルレジスタと、前記ベクトル演算対象となるデータを前記メモリから前記ベクトルレジスタに複写転送すると共に、前記ベクトル演算結果を前記ベクトルレジスタから前記メモリに複写転送するデータ転送部と、このデータ転送部がアクセスする前記メモリの領域を指定する配列情報蓄積部とを備えたベクトル演算装置である。
【００３９】
ここで、本発明の特徴とするところは、前記配列情報蓄積部は、前記ベクトルパイプ毎に前記メモリの指定領域が異なるように領域指定情報を保持する手段を備えたところにある。
【００４０】
また、複数の前記ベクトルパイプは、前記ベクトル演算器による演算の際に用いるベクトルの要素数を指定するベクトル長蓄積部を備え、このベクトル長蓄積部は、前記ベクトルパイプ毎に前記要素数が異なるように要素数指定情報を保持する手段を備えることができる。
【００４１】
また、２以上の前記ベクトルレジスタについて、その一方はスカラデータとして他方は演算オペラントとして用いるように前記ベクトル演算器に指示する手段を備え、前記ベクトル演算器は、前記指示を受けて、指定された一方の前記ベクトルレジスタの先頭に格納されているデータをスカラデータとして複数回読み出し、他方の前記ベクトルレジスタの演算オペラントとしての各要素と当該スカラデータとに基づき演算を行う手段を備えることができる。
【００４２】
これにより、複数の同種演算の計算式があって、演算の片方が配列でもう片方がスカラデータの場合にも、１つの計算式として高速に処理が可能となる。
【００４３】
また、第一のベクトルパイプの第一のベクトル演算器に第一のベクトルレジスタ群から供給されるデータが、第二のベクトルパイプの第二のベクトル演算器にも入力データとして供給され、前記第二のベクトルパイプに前記第一のベクトルパイプから供給されるデータを入力データとして用いるように前記第二のベクトル演算器に指示する手段を備え、前記第一のベクトルパイプの前記第一のベクトル演算器は、前記第二のベクトル演算器に対する前記指示を受けて、前記第一のベクトルレジスタ群からデータを読み出し演算を行うと共に、前記第二のベクトルパイプにも当該データを供給する手段を備え、前記第二のベクトルパイプの前記第二のベクトル演算器は、前記指示を受けて、前記第一のベクトルパイプから供給されるデータを入力データとして用いる手段を備えることができる。
【００４４】
また、前記第一のベクトルパイプの前記第一のベクトル演算器から前記第二のベクトルパイプの前記第二のベクトル演算器に供給するデータの数を指定する最大ベクトル長蓄積部を備え、前記第一のベクトルパイプの前記第一のベクトル演算器は、前記第二のベクトルパイプの前記第二のベクトル演算器に供給するデータの数を前記最大ベクトル長蓄積部で指定される数にする手段を備えることができる。
【００４５】
これにより、複数の同種演算の計算式があって演算のオペラントの片方が同じ配列をさす場合に、その同じ配列をメモリからベクトルレジスタに１回の複写で済ませ、１つの計算式として高速に処理が可能となる。
【００４６】
また、各ベクトルパイプの前記ベクトル演算器は、総和を含むリダクション演算を指示されたときには、それぞれ、自己が含まれる前記ベクトルパイプの前記ベクトルレジスタから供給されるデータを演算し当該ベクトルレジスタに演算結果を出力する手段を備えることができる。
【００４７】
これにより、複数の同種演算の計算式があってその演算が総和などのリダクション演算の場合にも、１つの計算式として高速に処理が可能となる。
【００４８】
また、１番目の前記ベクトルパイプの前記データ転送部に前記ベクトルレジスタのデータを前記メモリに複写転送するように指示する手段と、１番目の前記ベクトルパイプの前記データ転送部の前記複写転送が完了したことを検知して、２番目の前記ベクトルパイプの前記データ転送部に前記ベクトルレジスタのデータを前記メモリに複写転送するように指示する手段と、以降順に各ベクトルパイプの前記データ転送部に逐次的に複写転送を行うように指示する手段とを備えることができる。
【００４９】
これにより、複数の同種演算の計算式があっても、１つの計算式として高速に処理が可能で且つ実行順序をプログラムと同一にすることができる。
【００５０】
本発明の第二の観点は、メモリには、ベクトル演算対象となるデータを蓄積すると共に、当該データに基づくベクトル演算結果が蓄積され、複数のベクトルパイプでは、複数のベクトル演算がそれぞれ並列に処理され、前記ベクトルパイプが有するベクトルレジスタは、前記ベクトル演算対象となるデータが一時蓄積されると共に、当該データに基づくベクトル演算結果が一時蓄積され、データ転送部は、前記ベクトル演算対象となるデータを前記メモリから前記ベクトルレジスタに複写転送すると共に、前記ベクトル演算結果を前記ベクトルレジスタから前記メモリに複写転送し、配列情報蓄積部は、このデータ転送部がアクセスする前記メモリの領域を指定するベクトル演算装置に適用されるベクトル演算方法である。
【００５１】
ここで、本発明の特徴とするところは、前記配列情報蓄積部は、前記ベクトルパイプ毎に前記メモリの指定領域が異なるように領域指定情報を保持するところにある。
【００５２】
また、前記ベクトル演算器による演算の際に用いるベクトルの要素数が前記ベクトルパイプ毎に異なるように保持されることが望ましい。
【００５３】
また、２以上の前記ベクトルレジスタについて、その一方はスカラデータとして他方は演算オペラントとして用いるように前記ベクトル演算器に指示し、前記ベクトル演算器は、前記指示を受けて、指定された一方の前記ベクトルレジスタの先頭に格納されているデータをスカラデータとして複数回読み出し、他方の前記ベクトルレジスタの演算オペラントとしての各要素と当該スカラデータとに基づき演算を行うことができる。
【００５４】
また、第一のベクトルパイプの第一のベクトル演算器に第一のベクトルレジスタ群から供給されるデータが、第二のベクトルパイプの第二のベクトル演算器にも入力データとして供給され、前記第二のベクトルパイプに前記第一のベクトルパイプから供給されるデータを入力データとして用いるように前記第二のベクトル演算器に指示し、前記第一のベクトルパイプの前記第一のベクトル演算器は、前記第二のベクトル演算器に対する前記指示を受けて、前記第一のベクトルレジスタ群からデータを読み出し演算を行うと共に、前記第二のベクトルパイプにも当該データを供給し、前記第二のベクトルパイプの前記第二のベクトル演算器は、前記指示を受けて、前記第一のベクトルパイプから供給されるデータを入力データとして用いることができる。
【００５５】
また、前記第一のベクトルパイプの前記第一のベクトル演算器から前記第二のベクトルパイプの前記第二のベクトル演算器に供給するデータの数が指定され、前記第一のベクトルパイプの前記第一のベクトル演算器は、前記第二のベクトルパイプの前記第二のベクトル演算器に供給するデータの数を指定される数にすることができる。
【００５６】
また、各ベクトルパイプの前記ベクトル演算器は、総和を含むリダクション演算を指示されたときには、それぞれ、自己が含まれる前記ベクトルパイプの前記ベクトルレジスタから供給されるデータを演算し当該ベクトルレジスタに演算結果を出力することができる。
【００５７】
また、１番目の前記ベクトルパイプの前記データ転送部に前記ベクトルレジスタのデータを前記メモリに複写転送するように指示し、１番目の前記ベクトルパイプの前記データ転送部の前記複写転送が完了したことを検知して、２番目の前記ベクトルパイプの前記データ転送部に前記ベクトルレジスタのデータを前記メモリに複写転送するように指示し、以降順に各ベクトルパイプの前記データ転送部に逐次的に複写転送を行うように指示することができる。
【００５８】
本発明の第三の観点は、情報処理装置にインストールすることにより、その情報処理装置に、ベクトル演算対象となるデータを蓄積すると共に、当該データに基づくベクトル演算結果を蓄積するメモリに相応する機能と、複数のベクトル演算をそれぞれ並列に処理する複数のベクトルパイプに相応する機能とを実現させ、前記ベクトルパイプに相応する機能として、前記ベクトル演算対象となるデータを一時蓄積すると共に、当該データに基づくベクトル演算結果を一時蓄積するベクトルレジスタに相応する機能と、前記ベクトル演算対象となるデータを前記メモリから前記ベクトルレジスタに複写転送すると共に、前記ベクトル演算結果を前記ベクトルレジスタから前記メモリに複写転送するデータ転送部に相応する機能と、このデータ転送部がアクセスする前記メモリの領域を指定する配列情報蓄積部に相応する機能とを実現させるプログラムである。
【００５９】
ここで、本発明の特徴とするところは、前記配列情報蓄積部に相応する機能として、前記ベクトルパイプ毎に前記メモリの指定領域が異なるように領域指定情報を保持する機能を実現させるところにある。
【００６０】
また、複数の前記ベクトルパイプに相応する機能として、前記ベクトル演算器による演算の際に用いるベクトルの要素数を指定するベクトル長蓄積部に相応する機能を実現させ、このベクトル長蓄積部に相応する機能として、前記ベクトルパイプ毎に前記要素数が異なるように要素数指定情報を保持する機能を実現させることができる。
【００６１】
また、２以上の前記ベクトルレジスタについて、その一方はスカラデータとして他方は演算オペラントとして用いるように前記ベクトル演算器に指示する機能を実現させ、前記ベクトル演算器に相応する機能として、前記指示を受けて、指定された一方の前記ベクトルレジスタの先頭に格納されているデータをスカラデータとして複数回読み出し、他方の前記ベクトルレジスタの演算オペラントとしての各要素と当該スカラデータとに基づき演算を行う機能を実現させることができる。
【００６２】
また、第一のベクトルパイプの第一のベクトル演算器に第一のベクトルレジスタ群から供給されるデータが、第二のベクトルパイプの第二のベクトル演算器にも入力データとして供給され、前記第二のベクトルパイプに前記第一のベクトルパイプから供給されるデータを入力データとして用いるように前記第二のベクトル演算器に指示する機能を実現させ、前記第一のベクトルパイプの前記第一のベクトル演算器に相応する機能として、前記第二のベクトル演算器に対する前記指示を受けて、前記第一のベクトルレジスタ群からデータを読み出し演算を行うと共に、前記第二のベクトルパイプにも当該データを供給する機能を実現させ、前記第二のベクトルパイプの前記第二のベクトル演算器に相応する機能として、前記指示を受けて、前記第一のベクトルパイプから供給されるデータを入力データとして用いる機能を実現させることができる。
【００６３】
また、前記第一のベクトルパイプの前記第一のベクトル演算器から前記第二のベクトルパイプの前記第二のベクトル演算器に供給するデータの数を指定する最大ベクトル長蓄積部に相応する機能を実現させ、前記第一のベクトルパイプの前記第一のベクトル演算器に相応する機能として、前記第二のベクトルパイプの前記第二のベクトル演算器に供給するデータの数を前記最大ベクトル長蓄積部で指定される数にする機能を実現させることができる。
【００６４】
また、各ベクトルパイプの前記ベクトル演算器に相応する機能として、総和を含むリダクション演算を指示されたときには、それぞれ、自己が含まれる前記ベクトルパイプの前記ベクトルレジスタから供給されるデータを演算し当該ベクトルレジスタに演算結果を出力する機能を実現させることができる。
【００６５】
また、１番目の前記ベクトルパイプの前記データ転送部に前記ベクトルレジスタのデータを前記メモリに複写転送するように指示する機能と、１番目の前記ベクトルパイプの前記データ転送部の前記複写転送が完了したことを検知して、２番目の前記ベクトルパイプの前記データ転送部に前記ベクトルレジスタのデータを前記メモリに複写転送するように指示する機能と、以降順に各ベクトルパイプの前記データ転送部に逐次的に複写転送を行うように指示する機能とを実現させることができる。
【００６６】
これにより、汎用の情報処理装置を用いて本発明のベクトル計算装置を実現させることができる。
【発明の効果】
【００６７】
本発明によれば、複数の同種演算の計算式があって、演算の片方が配列でもう片方がスカラデータの場合にも、１つの計算式として高速に処理が可能となる。また、複数の同種演算の計算式があって演算のオペラントの片方が同じ配列をさす場合に、その同じ配列をメモリからベクトルレジスタに１回の複写で済ませ、１つの計算式として高速に処理が可能となる。また、複数の同種演算の計算式があってその演算が総和などのリダクション演算の場合にも、１つの計算式として高速に処理が可能となる。また、複数の同種演算の計算式があっても、１つの計算式として高速に処理が可能で且つ実行順序をプログラムと同一にすることができる。
【発明を実施するための最良の形態】
【００６８】
本発明実施例のベクトル演算装置を図１を参照して説明する。図１は本実施例のベクトル演算装置のブロック構成図である。
【００６９】
本実施例は、図１に示すように、ベクトル演算対象となるデータを蓄積すると共に、当該データに基づくベクトル演算結果を蓄積するメモリ５２と、複数のベクトル演算をそれぞれ並列に処理する複数のベクトルパイプ６４−１、６４−２とを備え、ベクトルパイプ６４−１、６４−２は、前記ベクトル演算対象となるデータを一時蓄積すると共に、当該データに基づくベクトル演算結果を一時蓄積するベクトルレジスタ７２ａ−１、７２ｂ−１、７２ｃ−１、７２ａ−２、７２ｂ−２、７２ｃ−２と、前記ベクトル演算対象となるデータをメモリ５２からベクトルレジスタ７２ａ−１、７２ｂ−１、７２ｃ−１、７２ａ−２、７２ｂ−２、７２ｃ−２に複写転送すると共に、前記ベクトル演算結果をベクトルレジスタ７２ａ−１、７２ｂ−１、７２ｃ−１、７２ａ−２、７２ｂ−２、７２ｃ−２からメモリ５２に複写転送するデータ転送部７３−１、７３−２と、このデータ転送部７３−１、７３−２がアクセスするメモリ５２の領域を指定する配列情報蓄積部７５−１、７５−２とを備えたベクトル演算装置である。
【００７０】
ここで、本実施例の特徴とするところは、配列情報蓄積部７５−１、７５−２は、ベクトルパイプ６４−１、６４−２毎にメモリ５２の指定領域が異なるように領域指定情報を保持する手段を備えたところにある。
【００７１】
また、複数のベクトルパイプ６４−１、６４−２は、ベクトル演算器７４−１、７４−２による演算の際に用いるベクトルの要素数を指定するベクトル長蓄積部７６−１、７６−２を備え、このベクトル長蓄積部７６−１、７６−２は、ベクトルパイプ６４−１、６４−２毎に前記要素数が異なるように要素数指定情報を保持する手段を備える。
【００７２】
また、２以上の前記ベクトルレジスタ７２ａ−１、７２ｂ−１、７２ｃ−１、７２ａ−２、７２ｂ−２、７２ｃ−２について、その一方はスカラデータとして他方は演算オペラントとして用いるようにベクトル演算器７４−１、７４−２に指示する手段を命令解釈部６１に備え、ベクトル演算器７４−１、７４−２は、前記指示を受けて、指定された一方のベクトルレジスタの先頭に格納されているデータをスカラデータとして複数回読み出し、他方のベクトルレジスタの演算オペラントとしての各要素と当該スカラデータとに基づき演算を行う手段を備える。
【００７３】
また、ベクトルパイプ６４−１のベクトル演算器７４−１にベクトルレジスタ（７２ａ−１、７２ｂ−１、７２ｃ−１）群からなるベクトルレジスタセット７１−１から供給されるデータが、ベクトルパイプ６４−２のベクトル演算器７４−２にも入力データとして供給され、ベクトルパイプ６４−２にベクトルパイプ６４−１から供給されるデータを入力データとして用いるようにベクトル演算器７４−２に指示する手段を命令解釈部６１に備え、ベクトルパイプ６４−１のベクトル演算器７４−１は、ベクトル演算器７４−２に対する前記指示を受けて、ベクトルレジスタセット７１−１からデータを読み出し演算を行うと共に、ベクトルパイプ６４−２にも当該データを供給する手段を備え、ベクトルパイプ６４−２のベクトル演算器７４−２は、前記指示を受けて、ベクトルパイプ６４−１から供給されるデータを入力データとして用いる手段を備える。
【００７４】
また、ベクトルパイプ６４−１のベクトル演算器７４−１からベクトルパイプ６４−２のベクトル演算器７４−２に供給するデータの数を指定する最大ベクトル長蓄積部６２を備え、ベクトルパイプ６４−１のベクトル演算器７４−１は、ベクトルパイプ６４−２のベクトル演算器７４−２に供給するデータの数を最大ベクトル長蓄積部６２で指定される数にする手段を備える。
【００７５】
また、各ベクトルパイプ６４−１、６４−２のベクトル演算器７４−１、７４−２は、総和を含むリダクション演算を指示されたときには、それぞれ、自己が含まれるベクトルパイプ６４−１、６４−２のベクトルレジスタ７２ａ−１、７２ｂ−１、７２ｃ−１、７２ａ−２、７２ｂ−２、７２ｃ−２から供給されるデータを演算し当該ベクトルレジスタ７２ａ−１、７２ｂ−１、７２ｃ−１、７２ａ−２、７２ｂ−２、７２ｃ−２に演算結果を出力する手段を備える。
【００７６】
また、１番目のベクトルパイプ６４−１のデータ転送部７３−１にベクトルレジスタ７２ａ−１、７２ｂ−１、７２ｃ−１のデータをメモリ５２に複写転送するように指示する手段と、１番目のベクトルパイプ６４−１のデータ転送部７３−１の前記複写転送が完了したことを検知して、２番目のベクトルパイプ６４−２のデータ転送部７３−２にベクトルレジスタ７２ａ−２、７２ｂ−２、７２ｃ−２のデータをメモリ５２に複写転送するように指示する手段と、さらに、複数のベクトルパイプ６４−３、６４−４、…が有る場合には、以降順に各ベクトルパイプのデータ転送部に逐次的に複写転送を行うように指示する手段とを命令解釈部６１に備える。
【００７７】
本発明の実施の形態について図面を参照して詳細に説明する。
本発明によるベクトル演算装置の例を図１に示す。この例のベクトル演算装置は、ＣＰＵ５１と、メモリ５２を備える。ＣＰＵ５１は、ベクトル演算機能を持った演算装置であり、命令解釈部６１、最大ベクトル長蓄積部６２、ベクトルパイプ６４−１とベクトルパイプ６４−２とを含んでいる。ベクトルパイプ６４−１とベクトルパイプ６４−２はそれぞれ、ベクトルレジスタセット７１−１、７１−２、データ転送部７３−１、７３−２、ベクトル演算器７４−１、７４−２、配列情報蓄積部７５−１、７５−２、ベクトル長蓄積部７６−１、７６−２とを含む。ベクトルレジスタセット７１−１、７１−２は、ベクトルレジスタＶａ（７２ａ−１、７２ａ−２）、ベクトルレジスタＶｂ（７２ｂ−１、７２ｂ−２）、ベクトルレジスタＶｃ（７２ｃ−１、７２ｃ−２）からなるベクトルレジスタ群を有している。
【００７８】
命令解釈部６１は、メモリ５２からベクトルロードやベクトルストア等の複写命令、ベクトル演算命令、配列情報指定命令、ベクトル長指定命令、最大ベクトル長指定命令等の命令コードをフェッチし、解読して、最大ベクトル長蓄積部６２、ベクトルパイプ６４−１およびベクトルパイプ６４−２内の各モジュールを制御する機能を有する。
【００７９】
各ベクトルパイプ６４−１、６４−２の配列情報蓄積部７５−１、７５−２は、命令解釈部６１が配列情報指定命令を実行したときに、その命令で指定されるアクセスするメモリ５２の領域を保持し、その情報をデータ転送部７３−１、７３−２に出力する。
【００８０】
各ベクトルパイプ６４−１、６４−２のベクトル長蓄積部７６−１、７６−２は、命令解釈部６１がベクトル長指定命令を実行したときに、その命令で指定されるベクトル長を保持し、その情報をベクトル演算器７４−１、７４−２に出力する。
【００８１】
各ベクトルパイプ６４−１、６４−２のデータ転送部７３−１、７３−２は、ベクトルロード命令に従って、配列情報蓄積部７５−１、７５−２に格納された値で指定されるメモリ５２の領域のデータを、ベクトルレジスタセット７１−１、７１−２内の任意のベクトルレジスタ７２ａ−１、７２ｂ−１、７２ｃ−１、７２ａ−２、７２ｂ−２、７２ｃ−２に複写する手段である。また、その逆に、ベクトルストア命令に従って、任意のベクトルレジスタ７２ａ−１、７２ｂ−１、７２ｃ−１、７２ａ−２、７２ｂ−２、７２ｃ−２に格納された内容を配列情報蓄積部７５−１、７５−２に格納された値で指定されるメモリ５２の領域に格納する処理を司る。
【００８２】
各ベクトルパイプ６４−１、６４−２のベクトル演算器７４−１、７４−２は、ベクトルレジスタセット７１−１、７１−２内の任意の二つのベクトルレジスタ７２ａ−１、７２ｂ−１、７２ｃ−１、７２ａ−２、７２ｂ−２、７２ｃ−２から供給されるデータを演算し、その演算結果をベクトルレジスタセット７１−１、７１−２内の任意一つのベクトルレジスタに格納する処理を司る。
【００８３】
また、このベクトル演算装置では、ベクトルパイプ６４−１とベクトルパイプ６４−２とで異なる機能を有する。
【００８４】
ベクトル演算器７４−１は、ベクトル長蓄積部７６−１で示される個数のデータをベクトルレジスタセット７１−１内のベクトルレジスタ７２ａ−１、７２ｂ−１、７２ｃ−１のいずれか二つから読み出し演算を行うのに加えて、同時に片方のベクトルレジスタから最大ベクトル長蓄積部６２で示される個数のデータを読み出し、他のベクトルパイプ６４−２のベクトル演算器７４−２に供給する。
【００８５】
ベクトル演算器７４−２は、ベクトルパイプ６４−１のベクトルレジスタセット７１−１から供給されるデータ、あるいはベクトルレジスタセット７１−２内のベクトルレジスタ７２ａ−２、７２ｂ−２、７２ｃ−２のいずれか二つから供給されるデータを演算し、その演算結果をベクトルレジスタセット７１−２内のベクトルレジスタ７２ａ−２、７２ｂ−２、７２ｃ−２のいずれか一つに格納する処理を司る。
【００８６】
図２に本実施形態の配列情報蓄積部７５−１、７５−２の例を示す。配列情報蓄積部７５−１、７５−２は、有効ビット８１、開始アドレス８２、要素数８３の３つのデータを保持している。
【００８７】
（動作例１）
次に、この実施の形態における動作を説明する。
【００８８】
図３に示すようなプログラムが存在し配列Ａ〜Ｆのサイズが４であった場合の動作を説明する。まず、初期状態では配列情報蓄積部７５−１と７５−２は図４に示すように空の状態、すなわち有効ビット８１が両方とも０でその他は不定（図中の−）にある。また、図５にベクトルレジスタセット７１−１と７１−２の状態を示す。全てのベクトルレジスタ７２ａ−１、７２ｂ−１、７２ｃ−１、７２ａ−２、７２ｂ−２、７２ｃ−２に不定の値（図中の「−」）が格納されている。
【００８９】
ステップ１で、命令解釈部６１において指定ベクトルパイプを６４−１、開始アドレスを配列Ｂの先頭アドレス、要素数を３とする配列情報指定命令が実行されると、ベクトルパイプ６４−１の配列情報蓄積部７５−１にその情報が通知される。配列情報蓄積部７５−１は図６に示す状態に遷移する。
【００９０】
ステップ２で、命令解釈部６１において指定ベクトルパイプを６４−２、開始アドレスを配列Ｅの先頭アドレス、要素数を３とする配列情報指定命令が実行されると、ベクトルパイプ６４−２の配列情報蓄積部７５−２にその情報が通知される。配列蓄積部７５−２は図７に示す状態に遷移する。
【００９１】
ステップ３で、命令解釈部６１において配列情報蓄積部７５−１と７５−２に格納された情報を用いたメモリ５２からベクトルレジスタＶａ（７２ａ−１、７２ａ−２）への複写命令が実行されると、その情報が両データ転送部７３−１と７３−２に伝えられる。データ転送部７３−１は配列情報蓄積部７５−１に格納された情報を用いてメモリ５２上の指定された領域のデータを、データ転送部７３−２は配列情報蓄積部７５−２格納された情報を用いてメモリ５２上の指定された領域のデータを、それぞれベクトルレジスタＶａ（７２ａ−１と７２ａ−２）に複写する。ベクトルレジスタセット７１−１および７１−２は図８に示す状態に遷移する。また、配列蓄積部７５−１と７５−２は初期化され図４に示す状態に戻る。
【００９２】
ステップ４で、命令解釈部６１において指定ベクトルパイプを６４−１、開始アドレスを配列Ｃの先頭アドレス、要素数を３とする配列情報指定命令が実行されると、ベクトルパイプ６４−１の配列情報蓄積部７５−１にその情報が通知される。配列蓄積部７５−１は図９に示す状態に遷移する。
【００９３】
ステップ５で、命令解釈部６１において指定ベクトルパイプを６４−２、開始アドレスを配列Ｆの先頭アドレス、要素数を３とする配列情報指定命令が実行されると、ベクトルパイプ６４−２の配列情報蓄積部７５−２にその情報が通知される。配列情報蓄積部７５−２は図１０に示す状態に遷移する。
【００９４】
ステップ６で、命令解釈部６１において配列情報蓄積部７５−１と７５−２に格納された情報を用いたメモリ５２からベクトルレジスタＶｂ（７２ｂ−１、７２ｂ−２）への複写命令が実行されると、その情報が両データ転送部７３−１と７３−２に伝えられる。データ転送部７３−１は配列情報蓄積部７５−１に格納された情報を用いてメモリ５２上の指定された領域のデータを、データ転送部７３−２は配列情報蓄積部７５−２に格納された情報を用いてメモリ５２上の指定された領域のデータを、それぞれベクトルレジスタＶｂ（７２ｂ−１と７２ｂ−２）に複写する。ベクトルレジスタセット７１−１および７１−２は図１１に示す状態に遷移する。また、配列蓄積部７５−１と７５−２は初期化され図４に示す状態に戻る。
【００９５】
ステップ７で、命令解釈部６１において指定ベクトルパイプを６４−１、要素数を３とするベクトル長指定命令が実行されると、ベクトルパイプ６４−１のベクトル長蓄積部７５−１にその情報が通知される。ベクトル長蓄積部７６−１は値「３」を保持する。
【００９６】
ステップ８で、命令解釈部６１において指定ベクトルパイプを６４−２、要素数を３とするベクトル長指定命令が実行されると、ベクトルパイプ６４−２のベクトル長蓄積部７５−２にその情報が通知される。ベクトル長蓄積部７５−２は値「３」を保持する。
【００９７】
ステップ９で、命令解釈部６１において要素数を３とする最大ベクトル長指定命令が実行されると、最大ベクトル長蓄積部６２にその情報が通知される。最大ベクトル長蓄積部６２は値「３」を保持する。
【００９８】
ステップ１０で、命令解釈部６１において、演算の種類を足し算、入力として配列を保持するベクトルレジスタＶａ（７２ａ−１、７２ａ−２）と配列を保持するベクトルレジスタＶｂ（７２ｂ−１、７２ｂ−２）、出力をベクトルレジスタＶｃ（７２ｃ−１、７２ｃ−２）とする命令が実行されると、その情報が両ベクトル演算器７４−１と７４−２に伝えられる。ベクトル演算器７４−１はベクトルレジスタＶａ（７２ａ−１）とベクトルレジスタＶｂ（７２ｂ−１）からそれぞれベクトル長蓄積部７６−１が示す３個のデータを読み出し足し算を行って、演算結果をベクトルレジスタＶｃ（７２ｃ−１）に格納する。
【００９９】
最大ベクトル長蓄積部６２の値は「３」でベクトル長蓄積部７６−１が保持する値と一致するので、ここではベクトルレジスタＶｂ（７２ｂ−１）からのさらなる読み出しは行わず処理を終了する。ベクトル演算器７４−２はベクトルレジスタＶａ（７２ａ−２）とベクトルレジスタＶｂ（７２ｂ−２）からそれぞれベクトル長蓄積部７５−２が示す３個のデータを読み出し足し算を行って、演算結果をベクトルレジスタＶｃ（７２ｃ−２）に格納する。ベクトルレジスタセット７１−１および７１−２は図１２に示す状態に遷移する。
【０１００】
ステップ１１で、命令解釈部６１において指定ベクトルパイプを６４−１、開始アドレスを配列Ａの先頭アドレス、要素数を３とする配列情報指定命令が実行されると、ベクトルパイプ６４−１の配列情報蓄積部７５−１にその情報が通知される。配列情報蓄積部７５−１は図１３に示す状態に遷移する。
【０１０１】
ステップ１２で、命令解釈部６１において指定ベクトルパイプを６４−２、開始アドレスを配列Ｄの先頭アドレス、要素数を３とする配列情報指定命令が実行されると、ベクトルパイプ６４−２の配列情報蓄積部７５−２にその情報が通知される。配列情報蓄積部７５−２は図１４に示す状態に遷移する。
【０１０２】
ステップ１３で、命令解釈部６１において配列情報蓄積部７５−１と７５−２に格納された情報を用いたベクトルレジスタＶｃ（７２ｃ−１、７２ｃ−２）からメモリ５２への複写命令が実行されると、その情報が両データ転送部７３−１と７３−２に伝えられる。データ転送部７３−１はベクトルレジスタＶｃ（７２ｃ−１）に格納された値を配列情報蓄積部７５−１に格納された情報で示されるメモリ５２上の領域に、データ転送部７３−２はベクトルレジスタＶｃ（７２ｃ−２）に格納された値を配列情報蓄積部７５−２に格納された情報で示されるメモリ５２上の領域に複写する。
【０１０３】
以上のように動作することで、複数の同種演算の計算式があって、演算の左辺に現れる配列同士および右辺に現れる配列同士を組として、一つの計算式として高速に処理ができる。
【０１０４】
以上の動作例１の手順を図１５にフローチャートとして示す。
【０１０５】
（動作例２）
つぎに、図１６に示すプログラムで、配列Ａ、Ｂ、Ｄ、Ｅのサイズが４でＣとＦがスカラデータの場合の動作を説明する。まず、初期状態では配列情報蓄積部７５−１と７５−２は図４に示すように空の状態、すなわち有効ビット８１が両方とも０でその他は不定（図中の−）にある。また、図５にベクトルレジスタセット７１−１と７１−２の状態を示す。
【０１０６】
全てのベクトルレジスタ７２に不定の値（図中の「−」）が格納されている。
【０１０７】
ステップ１から３は動作例１と同一であるのでここでは省略する。これらのステップ１〜３では、ベクトルレジスタＶａ（７２ａ−１、７２ａ−２）に配列ＢとＥのデータがロードされる。
【０１０８】
ステップ４で、命令解釈部６１において指定ベクトルパイプを６４−１、開始アドレスをＣのアドレス、要素数を１とする配列情報指定命令が実行されると、ベクトルパイプ６４−１の配列情報蓄積部７５−１にその情報が通知される。配列蓄積部７５−１は図１７に示す状態に遷移する。
【０１０９】
ステップ５で、命令解釈部６１において指定ベクトルパイプを６４−２、開始アドレスをＦのアドレス、要素数を１とする配列情報指定命令が実行されると、ベクトルパイプ６４−２の配列情報蓄積部７５−２にその情報が通知される。配列蓄積部７５−２は図１８に示す状態に遷移する。
【０１１０】
ステップ６で、命令解釈部６１において配列情報蓄積部７５−１と７５−２に格納された情報を用いたメモリ５２からベクトルレジスタＶｂ（７２ｂ−１、７２ｂ−２）への複写命令が実行されると、その情報が両データ転送部７３−１と７３−２に伝えられる。データ転送部７３−１は配列情報蓄積部７５−１に格納された情報を用いてメモリ５２上の指定された領域のデータを、データ転送部７３−２は配列情報蓄積部７５−２に格納された情報を用いてメモリ５２上の指定された領域のデータを、それぞれベクトルレジスタＶｂ（７２ｂ−１）と（７２ｂ−２）に複写する。ベクトルレジスタセット７１−１および７１−２は図１９に示す状態に遷移する。また、配列情報蓄積部７５−１と７５−２は初期化され図４に示す状態に戻る。
【０１１１】
ステップ７から９は動作例１の７から９と同一であるのでここでは省略する。これらのステップ７〜９ではベクトル長蓄積部７６と最大ベクトル長蓄積部６２に値「３」が設定される。
【０１１２】
ステップ１０で、命令解釈部６１において、演算の種類を足し算、入力として配列を保持するベクトルレジスタＶａ（７２ａ−１、７２ａ−１）とスカラデータを保持するベクトルレジスタＶｂ（７２ｂ−１、７２ｂ−２）、出力をベクトルレジスタＶｃ（７２ｃ−１、７２ｃ−２）とする命令が実行されると、その情報が両ベクトル演算器７４−１と７４−２に伝えられる。動作例１のステップ１０の演算命令とは、演算の片方の指定が、ベクトルレジスタ７２に格納された配列ではなくスカラデータを用いるように指定している点が異なる。ベクトル演算器７４−１はベクトルレジスタＶａ（７２ａ−１）からベクトル長蓄積部７６−１が示す３個のデータを読み出し、ベクトルレジスタＶｂ（７２ｂ−１）の先頭のデータを３回読み出し、足し算を行って、演算結果をベクトルレジスタＶｃ（７２ｃ−１）に格納する。
【０１１３】
最大ベクトル長蓄積部６２の値は「３」でベクトル長蓄積部７６−１が保持する値と一致するので、ここではベクトルレジスタＶｂ（７２ｂ−１）からのさらなる読み出しは行わず処理を終了する。ベクトル演算器７４−２はベクトルレジスタＶａ（７２ａ−２）からベクトル長蓄積部７６−２が示す３個のデータを読み出し、ベクトルレジスタＶｂ（７２ｂ−２）の先頭のデータを３回読み出し、足し算を行って、演算結果をベクトルレジスタＶｃ（７２ｃ−２）に格納する。ベクトルレジスタセット７１−１および７１−２は図２０に示す状態に遷移する。
【０１１４】
ステップ１１からステップ１３は動作例１のステップ１１から１３と同一であるのでここでは省略する。これらのステップ１１〜１３ではベクトルレジスタＶｃ（７２ｃ−１、７２ｃ−２）に格納された演算結果が、メモリ５２の配列ＡとＤの領域に複写される。
【０１１５】
以上のように動作することで、複数の同種演算の計算式があっても、一つの計算式として高速に処理できる。
【０１１６】
なお、動作例２の手順を示すフローチャートは、図１５に示した動作例１の手順を示すフローチャートと共通である。
【０１１７】
（動作例３）
次に、図２１に示すプログラムで、配列Ａ〜Ｅのサイズが４の場合の動作を説明する。まず、初期状態では配列情報蓄積部７５−１と７５−２は図４に示すように空の状態、すなわち有効ビット８１が両方とも０でその他は不定（図中の−）にある。また、図５にベクトルレジスタセット７１−１と７１−２の状態を示す。全てのベクトルレジスタ７２に不定の値（図中の「−」）が格納されている。
【０１１８】
ステップ１から３は動作例１と同一であるのでここでは省略する。これらのステップ１〜３では、ベクトルレジスタＶａ（７２ａ−１、７２ｂ−２）に配列ＢとＥのデータがロードされる。
【０１１９】
ステップ４で、命令解釈部６１において指定ベクトルパイプを６４−１、開始アドレスを配列Ｃのアドレス、要素数を３とする配列情報指定命令が実行されると、ベクトルパイプ６４−１の配列情報蓄積部７５−１にその情報が通知される。配列情報蓄積部７５−１は図９に示す状態に遷移する。
【０１２０】
ステップ５で、命令解釈部６１において配列情報蓄積部７５−１と７５−２に格納された情報を用いたメモリ５２からベクトルレジスタＶｂ（７２ｂ−１、７２ｂ−２）への複写命令が実行されると、その情報が両データ転送部７３−１と７３−２に伝えられる。データ転送部７３−１は配列情報蓄積部７５−１に格納された情報を用いてメモリ５２上の指定された領域のデータを、データ転送部７３−２は配列情報蓄積部７５−２に格納された情報を用いてメモリ５２上の指定された領域のデータを、それぞれベクトルレジスタＶｂ（７２ｂ−１）と（７２ｂ−２）に複写する。ベクトルレジスタセット７１−１および７１−２は図２２に示す状態に遷移する。また、配列情報蓄積部７５−１と７５−２は初期化され図４に示す状態に戻る。
【０１２１】
ステップ６から８は動作例１の７から９と同一であるのでここでは省略する。これらのステップ６〜８ではベクトル長蓄積部７６と最大ベクトル長蓄積部６２に値「３」が設定される。
【０１２２】
ステップ９で、命令解釈部６１において、演算の種類を足し算、入力として配列を保持するベクトルレジスタＶａ（７２ａ−１、７２ａ−２）と配列を保持するベクトルパイプ６４−１のベクトルレジスタＶｂ（７２ｂ−１）、出力をベクトルレジスタＶｃ（７２ｃ−１、７２ｃ−２）とする命令が実行されると、その情報が両ベクトル演算器７４−１と７４−２に伝えられる。動作例１のステップ１０の演算命令とは、演算の片方の指定が、全てのベクトルパイプ６４−１、６４−２で、ベクトルパイプ６４−１のベクトルレジスタＶｂ（７２ｂ−１）を用いるように指定している点が異なる。ベクトル演算器７４−１はベクトルレジスタＶａ（７２ａ−１）とベクトルレジスタＶｂ（７２ｂ−１）からそれぞれベクトル長蓄積部７６−１が示す３個のデータを読み出し足し算を行って、演算結果をベクトルレジスタＶｃ（７２ｃ−１）に格納する。
【０１２３】
最大ベクトル長蓄積部６２の値は「３」でベクトル長蓄積部７６−１が保持する値と一致するので、ここではベクトルレジスタＶｂ（７２ｂ−１）からのさらなる読み出しは行わず処理を終了する。また、このとき、ベクトルパイプ６４−１のベクトル演算器７４−１がベクトルレジスタＶｂ（７２ｂ−１）から読み出した３個のデータは他のベクトルパイプ６４−２のベクトル演算器７４−２にも供給される。ベクトル演算器７４−２はベクトルレジスタＶａ（７２ａ−２）から読み出す３個のデータとベクトルパイプ６４−１から渡される３個のデータの足し算を行って、演算結果をベクトルレジスタＶｃ（７２ｃ−２）に格納する。ベクトルレジスタセット７１−１および７１−２は図２３に示す状態に遷移する。
【０１２４】
ステップ１０からステップ１２は動作例１のステップ１１から１３と同一であるのでここでは省略する。これらのステップ１０〜１２ではベクトルレジスタＶｃ（７２ｃ−１、７２ｃ−２）に格納された演算結果が、メモリ５２の配列ＡとＤの領域に複写される。
【０１２５】
以上のように動作することで、複数の同種演算の計算式があって、演算の片方が同じ配列をさす場合にも、配列Ｃを複数回メモリ５２からベクトルレジスタＶｂに複写することなく、一つの計算式として高速に処理できる。
【０１２６】
なお、動作例３の手順を示すフローチャートは、図１５に示す動作例１の手順を示すフローチャートの内で、ステップ５を省略したものと同様である。
【０１２７】
（動作例４）
つぎに、図２４に示すプログラムで、配列Ｂ、Ｅのサイズが４で、ＡとＤがスカラデータである場合の動作を説明する。まず、初期状態では配列情報蓄積部７５−１と７５−２は図４に示すように空の状態、すなわち有効ビット８１が両方とも０でその他は不定（図中の−）にある。また、図５にベクトルレジスタセット７１−１と７１−２の状態を示す。全てのベクトルレジスタ７２に不定の値（図中の「−」）が格納されている。
【０１２８】
ステップ１からステップ３は動作例１と同一であるのでここでは省略する。これらのステップ１〜３では、ベクトルレジスタＶａ（７２ａ−１、７２ａ−ｂ）に配列ＢとＥのデータがロードされる。
【０１２９】
ステップ４からステップ６は動作例１のステップ７から９と同一であるのでここでは省略する。これらのステップ４〜６ではベクトル長蓄積部７６と最大ベクトル長蓄積部６２に値「３」が設定される。
【０１３０】
ステップ７で、命令解釈部６１において、演算の種類を総和演算、入力として配列を保持するベクトルレジスタＶａ（７２ａ−１、７２ａ−２）、出力をベクトルレジスタＶｂ（７２ｂ−１、７２ｂ−２）とする命令が実行されると、その情報が両ベクトル演算器７４−１と７４−２に伝えられる。ベクトル演算器７４−１はベクトルレジスタＶａ（７２ａ−１）からベクトル長蓄積部７５−１が示す３個のデータを読み出し総和演算を行って、演算結果をベクトルレジスタＶｃ（７２ｃ−１）に格納する。
【０１３１】
ベクトル演算器７４−２はベクトルレジスタＶａ（７２ａ−２）からベクトル長蓄積部７６−２が示す３個のデータを読み出し総和演算を行って、演算結果をベクトルレジスタＶｃ（７２ｃ−２）に格納する。ベクトルレジスタセット７１−１および７１−２は図２５に示す状態に遷移する。
【０１３２】
ステップ８で、命令解釈部６１において指定ベクトルパイプを６４−１、開始アドレスをＡのアドレス、要素数を１とする配列情報指定命令が実行されると、ベクトルパイプ６４−１の配列情報蓄積部７５−１にその情報が通知される。配列情報蓄積部７５−１は図２６に示す状態に遷移する。
【０１３３】
ステップ９で、命令解釈部６１において指定ベクトルパイプを６４−２、開始アドレスをＤのアドレス、要素数を１とする配列情報指定命令が実行されると、ベクトルパイプ６４−２の配列情報蓄積部７５−２にその情報が通知される。配列情報蓄積部７５−２は図２７に示す状態に遷移する。
【０１３４】
ステップ１０で、命令解釈部６１において配列情報蓄積部７５−１と７５−２に格納された情報を用いたメモリ５２からベクトルレジスタＶｃ（７２ｃ−１、７２ｃ−２）への複写命令が実行されると、その情報が両データ転送部７３−１と７３−２に伝えられる。データ転送部７３−１は配列情報蓄積部７５−１に格納された情報を用いてメモリ５２上の指定された領域のデータを、データ転送部７３−２は配列情報蓄積部７５−２に格納された情報を用いてメモリ５２上の指定された領域のデータを、それぞれベクトルレジスタＶｃ（７２ｃ−１）と（７２ｃ−２）に複写する。ベクトルレジスタセット７１−１および７１−２は図２８に示す状態に遷移する。また、配列情報蓄積部７５−１と７５−２は初期化され図４に示す状態に戻る。
【０１３５】
ステップ１１で、命令解釈部６１において指定ベクトルパイプを６４−１、要素数を１とするベクトル長指定命令が実行されると、ベクトルパイプ６４−１のベクトル長蓄積部７６−１にその情報が通知される。ベクトル長蓄積部７６−１は値「１」を保持する。
【０１３６】
ステップ１２で、命令解釈部６１において指定ベクトルパイプを６４−２、要素数を１とするベクトル長指定命令が実行されると、ベクトルパイプ６４−２のベクトル長蓄積部７６−２にその情報が通知される。ベクトル長蓄積部７６−２は値「１」を保持する。
【０１３７】
ステップ１３で、命令解釈部６１において要素数を１とする最大ベクトル長指定命令が実行されると、最大ベクトル長蓄積部６２にその情報が通知される。最大ベクトル長蓄積部６２は値「１」を保持する。
【０１３８】
ステップ１４で、命令解釈部６１において、演算の種類を足し算、入力として配列を保持するベクトルレジスタＶｂ（７２ｂ−１、７２ｂ−２）と配列を保持するベクトルレジスタＶｃ（７２ｃ−１、７２ｃ−２）、出力をベクトルレジスタＶｃ（７２ｃ−１、７２ｃ−２）とする命令が実行されると、その情報が両ベクトル演算器７４−１と７４−２に伝えられる。ベクトル演算器７４−１はベクトルレジスタＶｂ（７２ｂ−１）とベクトルレジスタＶｃ（７２ｃ−１）からそれぞれベクトル長蓄積部７６−１が示す１個のデータを読み出し足し算を行って、演算結果をベクトルレジスタＶｃ（７２ｃ−１）に格納する。
【０１３９】
最大ベクトル長蓄積部６２の値は「１」でベクトル長蓄積部７６−１が保持する値と一致するので、ここではベクトルレジスタＶｃ（７２ｃ−１）からのさらなる読み出しは行わず処理を終了する。ベクトル演算器７４−２はベクトルレジスタＶｂ（７２ｂ−２）とベクトルレジスタＶｃ（７２ｃ−２）からそれぞれベクトル長蓄積部７６−２が示す１個のデータを読み出し足し算を行って、演算結果をベクトルレジスタＶｃ（７２ｃ−２）に格納する。ベクトルレジスタセット７１−１および７１−２は図２９に示す状態に遷移する。
【０１４０】
ステップ１５で、命令解釈部６１において指定ベクトルパイプを６４−１、開始アドレスをＡのアドレス、要素数を１とする配列情報指定命令が実行されると、ベクトルパイプ６４−１の配列情報蓄積部７５−１にその情報が通知される。配列情報蓄積部７５−１は図２６に示す状態に遷移する。
【０１４１】
ステップ１６で、命令解釈部６１において指定ベクトルパイプを６４−２、開始アドレスをＤのアドレス、要素数を１とする配列情報指定命令が実行されると、ベクトルパイプ６４−２の配列情報蓄積部７５−２にその情報が通知される。配列情報蓄積部７５−２は図２７に示す状態に遷移する。
【０１４２】
ステップ１７で、命令解釈部６１において配列情報蓄積部７５−１と７５−２に格納された情報を用いたベクトルレジスタＶｃ（７２ｃ−１、７２ｃ−２）からメモリ５２への複写命令が実行されると、その情報が両データ転送部７３−１と７３−２に伝えられる。データ転送部７３−１はベクトルレジスタＶｃ（７２ｃ−１）に格納された値を配列情報蓄積部７５−１に格納された情報で示されるメモリ５２上の領域に、データ転送部７３−２はベクトルレジスタＶｃ（７２ｃ−２）に格納された値を配列情報蓄積部７５−２に格納された情報で示されるメモリ５２上の領域に複写する。
【０１４３】
以上のように動作することで、複数の同種演算の計算式があって、演算の種類が総和などのリダクション演算であっても、一つの計算式として高速に処理ができる。
【０１４４】
以上の動作例４の手順を図３０のフローチャートに示す。
【０１４５】
（動作例５）
動作例１のステップ１３でベクトルレジスタＶｃ（７２ｃ−１、７２ｃ−２）に格納されたデータをメモリ５２の配列ＡとＤに複写する命令が実行されているが、その更新順序はＡ（１）、Ｄ（１）、Ａ（２）、Ｄ（２）、Ａ（３）、Ｄ（３）となりプログラムの順序と一致する。
【０１４６】
次に、図３１に示すプログラムで、配列ＡとＤの更新順序がＡ（１）、Ａ（２）、Ａ（３）、Ｄ（１）、Ｄ（２）、Ｄ（３）の場合上記ステップ１３のみ次のように変更することで実行順序をプログラムの順序と一致させることができる。
【０１４７】
命令解釈部６１において配列情報蓄積部７５−１と７５−２に格納された情報を用いたベクトルレジスタＶｃ（７２ｃ−１、７２ｃ−２）からメモリ５２への逐次複写命令が実行されると、その情報がまずデータ転送部７３−１に伝えられる。動作例１のステップ１３の複写命令とは逐次を指定している点が異なる。データ転送部７３−１はベクトルレジスタＶｃ（７２ｃ−１）に格納された値を配列情報蓄積部７５−１に格納された情報で示されるメモリ５２上の領域に複写する。命令解釈部６１がデータ転送部７３−１の処理完了を検出すると、次にデータ転送部７３−２に複写命令の実行を指示する。データ転送部７３−２はベクトルレジスタＶｃ（７２ｃ−２）に格納された値を配列情報蓄積部７５−２に格納された情報で示されるメモリ５２上の領域に複写する。このように動作することで、データの更新順序はＡ（１）、Ａ（２）、Ａ（３）、Ｄ（１）、Ｄ（２）、Ｄ（３）となり、プログラムと同一になる。
【０１４８】
以上のように動作することで、複数の同種演算の計算式があって、１つの計算式として高速に処理が可能で且つ実行順序をプログラムと同一にすることができる。
【０１４９】
（実施形態の変形）
また、本実施形態のベクトルパイプの数は２に限定されることはなく２以上の任意の数にすることが可能である。
【０１５０】
また、本実施形態の命令解釈部６１がどのように各ベクトルパイプ６４−１、６４−２の配列情報蓄積部７５−１、７５−２に値を設定するかは、上記の実施の形態で説明した方式に制限されることはない。
【産業上の利用可能性】
【０１５１】
本発明によれば、従来と比較して高速処理を行うことができるベクトル演算装置を実現することができる。
【図面の簡単な説明】
【０１５２】
【図１】本実施例のベクトル演算装置の構成を示す図。
【図２】本実施例のベクトル演算装置の配列情報蓄積部の構成を示す図。
【図３】動作例１を説明するのに用いたプログラムを示す図。
【図４】動作例１の配列情報蓄積部の初期状態を示す図。
【図５】動作例１のベクトルレジスタセットの初期状態を示す図。
【図６】動作例１の配列情報蓄積部の状態を示す図。
【図７】動作例１の配列情報蓄積部の状態を示す図。
【図８】動作例１のベクトルレジスタセットの状態を示す図。
【図９】動作例１の配列情報蓄積部の状態を示す図。
【図１０】動作例１の配列情報蓄積部の状態を示す図。
【図１１】動作例１のベクトルレジスタセットの状態を示す図。
【図１２】動作例１のベクトルレジスタセットの状態を示す図。
【図１３】動作例１の配列情報蓄積部の状態を示す図。
【図１４】動作例１の配列情報蓄積部の状態を示す図。
【図１５】動作例１の動作手順を示すフローチャート。
【図１６】動作例２を説明するのに用いたプログラムを示す図。
【図１７】動作例２の配列情報蓄積部の状態を示す図。
【図１８】動作例２の配列情報蓄積部の状態を示す図。
【図１９】動作例２のベクトルレジスタセットの状態を示す図。
【図２０】動作例２のベクトルレジスタセットの状態を示す図。
【図２１】動作例３を説明するのに用いたプログラムを示す図。
【図２２】動作例３のベクトルレジスタセットの状態を示す図。
【図２３】動作例３のベクトルレジスタセットの状態を示す図。
【図２４】動作例４を説明するのに用いたプログラムを示す図。
【図２５】動作例４のベクトルレジスタセットの状態を示す図。
【図２６】動作例４の配列情報蓄積部の状態を示す図。
【図２７】動作例４の配列情報蓄積部の状態を示す図。
【図２８】動作例４のベクトルレジスタセットの状態を示す図。
【図２９】動作例４のベクトルレジスタセットの状態を示す図。
【図３０】動作例４の動作手順を示すフローチャート。
【図３１】動作例５を説明するのに用いたプログラムを示す図。
【図３２】従来のベクトル演算装置の構成を示す図。
【図３３】従来のベクトル演算装置の動作を説明するのに用いたプログラムを示す図。
【図３４】従来のベクトル演算装置のベクトルレジスタＶａ１２２ａの状態を示す図。
【図３５】従来のベクトル演算装置では高速化できないプログラムを示す図。
【図３６】従来のベクトル演算装置では高速化できないプログラムを示す図。
【図３７】従来のベクトル演算装置では高速化できないプログラムを示す図。
【図３８】従来例の動作手順を示すフローチャート。
【符号の説明】
【０１５３】
５１、１０１  ＣＰＵ
５２、１０２  メモリ
６１、１１１  命令解釈部
６２  最大ベクトル長蓄積部
６４−１、６４−２、１１４−１、１１４−２  ベクトルパイプ
７１−１、７１−２、１２１−１、１２１−２  ベクトルレジスタセット
７２ａ−１、７２ｂ−１、７２ｃ−１、７２ａ−２、７２ｂ−２、７２ｃ−２、１２２ａ−１、１２２ｂ−１、１２２ｃ−１、１２２ａ−２、１２２ｂ−２、１２２ｃ−２  ベクトルレジスタ
７３−１、７３−２、１２３−１、１２３−２  データ転送部
７４−１、７４−２、１２４−１、１２４−２  ベクトル演算器
７５−１、７５−２、１１２  配列情報蓄積部
７６−１、７６−２  ベクトル長蓄積部
８１  有効ビット
８２  開始アドレス
８３  要素数
【図１】
2006251978.tif 000003
【図２】
2006251978.tif 000004
【図３】
2006251978.tif 000005
【図４】
2006251978.tif 000006
【図５】
2006251978.tif 000007
【図６】
2006251978.tif 000008
【図７】
2006251978.tif 000009
【図８】
2006251978.tif 000010
【図９】
2006251978.tif 000011
【図１０】
2006251978.tif 000012
【図１１】
2006251978.tif 000013
【図１２】
2006251978.tif 000014
【図１３】
2006251978.tif 000015
【図１４】
2006251978.tif 000016
【図１５】
2006251978.tif 000017
【図１６】
2006251978.tif 000018
【図１７】
2006251978.tif 000019
【図１８】
2006251978.tif 000020
【図１９】
2006251978.tif 000021
【図２０】
2006251978.tif 000022
【図２１】
2006251978.tif 000023
【図２２】
2006251978.tif 000024
【図２３】
2006251978.tif 000025
【図２４】
2006251978.tif 000026
【図２５】
2006251978.tif 000027
【図２６】
2006251978.tif 000028
【図２７】
2006251978.tif 000029
【図２８】
2006251978.tif 000030
【図２９】
2006251978.tif 000031
【図３０】
2006251978.tif 000032
【図３１】
2006251978.tif 000033
【図３２】
2006251978.tif 000034
【図３３】
2006251978.tif 000035
【図３４】
2006251978.tif 000036
【図３５】
2006251978.tif 000037
【図３６】
2006251978.tif 000038
【図３７】
2006251978.tif 000039
【図３８】
2006251978.tif 000040