(57)【特許請求の範囲】
【請求項１】
ベクトルパイプライン処理によりベクトル演算を行うベクトル型計算機であって、
ベクトルギャザー命令又はベクトルスキャッター命令に対するアドレスの依存元命令を実行する固定小数点演算の演算結果を固有小数点演算器から入力し、その演算結果を用いてベクトル要素の最小値及び最大値を判定する最小値最大値判定手段と、
前記最小値最大値判定手段で判定されたベクトル要素の最小値及び最大値を保持する最小値最大値保持手段と、
前記ベクトルギャザー命令又は前記ベクトルスキャッター命令を実行する際に、前記最小値最大値保持手段に保持されている最小値及び最大値から、前記ベクトルギャザー命令又は前記ベクトルスキャッター命令のアドレスのアクセス範囲を特定し、前記ベクトルギャザー命令又は前記ベクトルスキャッター命令の追い越し制御を行う手段と
を備えることを特徴とするベクトル型計算機。
【請求項２】
前記最小値最大値判定手段の処理は、固定小数点演算のターンアラウンドタイムが浮動小数点演算処理のターンアラウンドタイムより短いことにより生じた余力時間に行うことを特徴とする請求項１に記載のベクトル型計算機。
【請求項３】
さらに、前記最小値最大値保持手段に保持されているベクトル要素の最小値及び最大値が有効か無効かを示す手段を設けることを特徴とする請求項１又は２に記載のベクトル型計算機。
【請求項４】
さらに、ベクトルレジスタへのロードデータからベクトル要素の最小値及び最大値を判定する第２の最小値最大値判定器を設けることを特徴とする請求項１から３の何れかに記載のベクトル型計算機。
【請求項５】
ベクトルパイプライン処理によりベクトル演算を行うベクトル型計算機の命令制御方法において、
ベクトルギャザー命令又はベクトルスキャッター命令に対するアドレスの依存元命令を実行する固定小数点演算の演算結果を固有小数点演算器から入力し、その演算結果を用いてベクトル要素の最小値及び最大値を判定する工程と、
前記判定されたベクトル要素の最小値及び最大値を保持する工程と、
前記ベクトルギャザー命令又は前記ベクトルスキャッター命令を実行する際に、前記保持されている最小値及び最大値から、前記ベクトルギャザー命令又は前記ベクトルスキャッター命令のアドレスのアクセス範囲を特定し、前記ベクトルギャザー命令又は前記ベクトルスキャッター命令の追い越し制御を行う工程と
を含むことを特徴とするベクトル型計算機の命令制御方法。
【請求項６】
さらに、前記保持されているベクトル要素の最小値及び最大値が有効か無効かを示す工程を設けることを特徴とする請求項５に記載のベクトル型計算機の命令制御方法。
【請求項７】
さらに、ベクトルレジスタへのロードデータからベクトル要素の最小値及び最大値を判定する第２の最小値及び最大値を判定する工程を設けることを特徴とする請求項５又は６に記載のベクトル型計算機の命令制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ベクトルパイプライン処理によりベクトル演算を行うベクトル型計算機及びベクトル型計算機の命令制御方法に関するもので、特に、ベクトルギャザー命令やベクトルスキャッター命令の追い越し制御に関する。
【背景技術】
【０００２】
一般に、命令処理の高速化を目的としたベクトル処理方式においては、メモリアクセス系の命令で先行するストア命令の領域に後続に発行されるロード系の命令のアクセス領域が重なっていない場合、後続のロード系の命令のメモリアクセスを先に実行させ、メモリアクセスの高速化を図るような追い越し制御が行われている。この種のベクトルストア命令追い越し制御は、例えば、特許文献１に記載されているように、リクエスト受付時にメモリをアクセスするアドレス及び領域が判明しているようなベクトルストアとロード系命令が追い越し制御の対象になっている。
【０００３】
これに対して、ベクトルギャザー命令やベクトルスキャッター命令では、ベクトルレジスタの各要素を実行アドレスとしてメモリにアクセスするため、命令実行時のアクセス領域の算出及び追い越し判定が煩雑になる。
【０００４】
図１６はベクトルギャザー命令の説明図を示し、図１７はベクトルスキャッター命令の説明図を示すものである。ベクトルギャザー命令は、図１６に示すように、ソースオペランドのベクトルレジスタ５１１の各要素にはロード先のアドレスが格納されており、このベクトルレジスタ５１１で指し示されるアドレスのデータを、ディスティネーションのベクトルレジスタ５１３の対応する要素に格納するように、メモリからデータをロードするものである。図１６に示すように、この場合のメモリ空間５１２のアクセスは不規則になる。
【０００５】
また、ベクトルスキャター命令は、図１７に示すように、ソースオペランドのベクトルレジスタ６１１には各要素のストアすべきデータ本体が格納され、ソースオペランドのベクトルレジスタ６１３には各要素のストア先のアドレスが格納され、ソースオペランドのベクトルレジスタ６１３で指し示されるアドレスにソースオペランドのベクトルレジスタ６１１のデータをストアするように、メモリにデータをストアするものである。この場合、図１７に示すように、メモリ空間６１２は不規則になる。
【０００６】
そこで、ベクトルギャザー命令やベクトルスキャッター命令に関しては、例えば特許文献２に示されているように、コンパイラによる静的なアドレス依存解析によって、追い越し制御が行われている。
【先行技術文献】
【特許文献】
【０００７】
【特許文献１】特開平９−２３１２０３号公報
【特許文献２】特開２００２−３２３６１号公報
【発明の概要】
【発明が解決しようとする課題】
【０００８】
しかしながら、特許文献２に示されるような、コンパイラによる静的なアドレス依存解析による追い越し制御では、静的な解析が不可能な場合には、追い越し制御ができないという問題がある。
【０００９】
すなわち、特許文献２では、コンパイラによる静的なアドレス依存解析により、ベクトルギャザー命令やベクトルスキャッター命令のアドレス範囲を特定し、アクセス範囲の先頭アドレスと終端アドレスを同命令に付加することで、リストベクトルの追い越し制御を実現している。特に、特許文献２で想定している命令列は配列のアクセスであり、配列本体の先頭アドレスと終端アドレスをリストベクトル命令に付加することで、アクセス範囲の特定をしている。
【００１０】
図１８は、ベクトルギャザー命令やベクトルスキャッター命令の静的な解析と動的な解析とを比較した説明図である。ベクトルギャザー命令やベクトルスキャッター命令では、ベクトルロード命令やベクトルストア命令と異なり、メモリアクセスに規則性がないため、アドレス依存の検出が難しい。静的な解析の場合、実際にベクトルギャザー命令やベクトルスキャッター命令でアクセスする範囲がアドレスＡ［４］からＡ［ｎ−３］までであるにもかかわらず、コンパイラの段階で、どの要素にアクセスするかわからなかった場合、依存する（チェックする）アドレスは、アクセスする可能性のあるアドレスＡ［０］からＡ［ｎ］にする必要がある。追い越しは、静的な解析による依存性チェックができたときの特殊な場合に限定される。また、配列などで静的な依存解析ができたとしても、依存アドレス範囲を実際よりも大きく取ることがある。これに対して、動的な解析では、依存する（チェックする）アドレスは静的な解析時より範囲が狭くなるため、可能になる追い越しのパターンが増える。
【００１１】
上述の課題を鑑み、本発明は、ベクトルギャザー命令やベクトルスキャッター命令に対して、動的な追い越し制御が行えるベクトル型計算機及びベクトル型計算機の命令制御方法を提供することを目的とする。
【課題を解決するための手段】
【００１２】
上述の課題を解決するために、本発明は、ベクトルパイプライン処理によりベクトル演算を行うベクトル型計算機であって、ベクトルギャザー命令又はベクトルスキャッター命令に対するアドレスの依存元命令を実行する固定小数点演算の演算結果を固有小数点演算器から入力し、その演算結果を用いてベクトル要素の最小値及び最大値を判定する最小値最大値判定手段と、最小値最大値判定手段で判定されたベクトル要素の最小値及び最大値を保持する最小値最大値保持手段と、ベクトルギャザー命令又はベクトルスキャッター命令を実行する際に、最小値最大値保持手段に保持されている最小値及び最大値から、ベクトルギャザー命令又はベクトルスキャッター命令のアドレスのアクセス範囲を特定し、ベクトルギャザー命令又はベクトルスキャッター命令の追い越し制御を行う手段とを備えることを特徴とする。
【００１３】
本発明は、ベクトルパイプライン処理によりベクトル演算を行うベクトル型計算機の命令制御方法であって、ベクトルギャザー命令又はベクトルスキャッター命令に対するアドレスの依存元命令を実行する固定小数点演算の演算結果を固有小数点演算器から入力し、その演算結果を用いてベクトル要素の最小値及び最大値を判定する工程と、判定されたベクトル要素の最小値及び最大値を保持する工程と、ベクトルギャザー命令又はベクトルスキャッター命令を実行する際に、保持されている最小値及び最大値から、ベクトルギャザー命令又はベクトルスキャッター命令のアドレスのアクセス範囲を特定し、ベクトルギャザー命令又はベクトルスキャッター命令の追い越し制御を行う工程とを含むことを特徴とする。
【発明の効果】
【００１４】
本発明によれば、固定小数点演算の演算結果を用いてベクトル要素の最小値及び最大値を判定することで、ベクトルギャザー命令又はベクトルスキャッター命令での実際のアクセス範囲を動的に特定することができ、これにより、ベクトルギャザー命令又はベクトルスキャッター命令の追い越し制御を行うことができる。このように、ベクトルギャザー命令やベクトルスキャッター命令の動的なアドレス依存検出を可能とするため、静的なアドレス依存検出方法に比べて、可能になる追い越し制御のパターンが増加する。これは、静的な解析で追い越し判定ができないベクトルギャザー命令やベクトルスキャッター命令においても追い越しができる可能性が生まれるためである。また、アクセス範囲をリストベクトルの最小値及び最大値から検出するため、正確なアクセス範囲を特定できる。すなわち、静的依存解析方法と比較し、検出する依存アクセス範囲が狭くなるため、追い越し判定をパスする可能性が増加する。
【図面の簡単な説明】
【００１５】
【図１】本発明の第１の実施形態のベクトル型計算機の構成を示すブロック図である。
【図２】ベクトルレジスタ群に含まれる１つのベクトルレジスタを示す説明図である。
【図３】本発明の第１の実施形態におけるベクトルパイプラインを示す説明図である。
【図４】ベクトルレジスタとベクトルパイプラインとのより具体的な接続関係を示す説明図である。
【図５】本発明の第１の実施形態における最小値最大値判定器の詳細を示すブロック図である。
【図６】ベクトルギャザー命令がベクトルストア命令を追い越すパターンの説明図である。
【図７】ベクトルギャザー命令がベクトルストア命令を追い越すような処理をフローチャートで説明したものである。
【図８】ベクトルロード命令がベクトルスキャッター命令を追い越すパターンの説明図である。
【図９】固定小数点演算と浮動小数点演算とのタイミング関係を示す説明図である。
【図１０】本発明の第２の実施形態のベクトル型計算機の構成を示すブロック図である。
【図１１】本発明の第２の実施形態の動作を示すフローチャートである。
【図１２】本発明の第３の実施形態のベクトル型計算機の構成を示すブロック図である。
【図１３】マスク付演算の説明図である。
【図１４】ＶＬ長の説明図である。
【図１５】本発明の第３の実施形態でマスク付演算問題及びＶＬ長変更問題を回避するような処理を行う場合のフローチャートである。
【図１６】ベクトルギャザー命令の説明図である。
【図１７】ベクトルスキャッター命令の説明図である。
【図１８】ベクトルギャザー命令やベクトルスキャッター命令の静的な解析と動的な解析とを比較した説明図である。
【発明を実施するための形態】
【００１６】
以下、本発明の実施の形態について図面を参照しながら説明する。
＜第１の実施形態＞  
図１は、本発明の第１の実施形態のベクトル型計算機の構成を示すブロック図である。図１に示すように、本発明の第１の実施形態のベクトル型計算機は、ベクトルレジスタ群１１と、固定小数点演算器１２と、浮動小数点演算器１３と、ロードバッファ１４と、メモリアクセスバッファ１５と、メモリアクセスユニット１６とを備えている。これらの機能は、通常のベクトル型計算機と同様である。さらに、本発明の第１の実施形態のベクトル型計算機は、最小値最大値判定器２１と、最小値／最大値保持レジスタ２２と、演算結果レジスタ２３及び２４とを備えている。
【００１７】
ベクトルレジスタ群１１は、複数本のベクトルレジスタからなるベクトル演算用のレジスタ群である。１つのベクトルレジスタは、複数の要素（１２８〜５１２個）から構成されている。また、本発明の第１の実施形態においては、ベクトルレジスタには、本体レジスタ部３０と共に、そのベクトル要素の最小値及び最大値を保持する最小値／最大値レジスタ部３１が設けられている。
【００１８】
図２は、ベクトルレジスタ群１１に含まれる１つのベクトルレジスタを示す説明図である。ベクトルレジスタ群１１にベクトルレジスタが１２８本あるというときには、図２に示すようなセットが１２８個あることになる。
【００１９】
図２において、１つのベクトルレジスタは、本体レジスタ部３０と、最小値／最大値レジスタ部３１とから構成される。本体レジスタ部３０には、各ベクトル要素Ｖ（０）、Ｖ（１）、Ｖ（２）、…、Ｖ（ｎ）が格納される。最小値／最大値レジスタ部３１には、これらのベクトル要素Ｖ（０）、Ｖ（１）、Ｖ（２）、…、Ｖ（ｎ）の中の最小値（Ｖ．ｍｉｎ）及び最大値（Ｖ．ｍａｘ）が格納される。最小値／最大値レジスタ部３１は隠しレジスタとなっている。この最小値（Ｖ．ｍｉｎ）及び最大値（Ｖ．ｍａｘ）は、ベクトルギャザー命令やベクトルスキャッター命令の追い越し制御の際に、アクセス範囲を特定するのに用いられる。
【００２０】
図１において、ベクトルレジスタ群１１の上下には、それぞれのユニットを接続する接続網１７及び１８が組み込まれている。接続網１７は、演算結果やロードデータの書き込み先選択回路である。接続網１８は、レジスタから演算器、又はメモリアクセスバッファ１５へのデータの送り先選択回路である。
【００２１】
固定小数点演算器１２は、固定小数点演算を実行するものである。浮動小数点演算器１３は、浮動小数点演算を実行するものである。
【００２２】
ロードバッファ１４は、メモリアクセスユニット１６から返されたロードデータを一時的に保持するバッファである。メモリアクセスバッファ１５は、メモリアクセスユニット１６へ送るストアアドレス、ストアデータ、又はロードアドレスを一時的に保持するバッファである。
【００２３】
メモリアクセスユニット１６は、主記憶（図示せず）にアクセスするユニットである。また、本発明の第１の実施形態では、メモリアクセスユニット１６は、追い越し判定機能を保持している。
【００２４】
最小値最大値判定器２１は、固定小数点演算器１２からの出力結果からベクトル構成要素の最小値及び最大値を求めるものである。ベクトルギャザー命令やベクトルスキャッター命令のアクセスするメモリ空間のアドレスは、先行する依存元命令の固定小数点演算の結果から得られることが多い。そこで、本発明の第１の実施形態では、固定小数点演算器１２の演算出力から、最小値最大値判定器２１により、ベクトル要素の最小値及び最大値を求めるようにしている。
【００２５】
なお、ベクトルギャザー命令やベクトルスキャッター命令のアクセスアドレスは整数型データであるため、浮動小数点演算器１３の出力側には、最大値最小値判定器を設ける必要はない。
【００２６】
最小値／最大値保持レジスタ２２は、最小値最大値判定器２１で算出された最小値及び最大値を保持するレジスタである。最小値最大値判定器２１で算出された最大値及び最小値は、最小値／最大値保持レジスタ２２に一次保持された後に、ベクトルレジスタ群１１に含まれるベクトルレジスタの最小値／最大値レジスタ部３１に転送される。
【００２７】
演算結果レジスタ２３及び２４は、持ち回り演算を行い、最小値最大値判定器２１の出力のタイミング調停をしている。
【００２８】
図３は、本発明の第１の実施形態におけるベクトルパイプラインを示す説明図である。図３に示すように、各ベクトルパイプライン＃０、＃１、＃２、＃３、＃４、＃５、＃６、＃７は、加減算／シフト、乗算、除算、論理演算などの演算器を有する構成とされている。この例では、ベクトルパイプライン＃０〜＃７の８セットのパイプラインがある。それぞれのパイプライン＃０〜＃７は、ベクトルレジスタの要素番号Ｖ（ｎ）〜Ｖ（ｎ＋７）に接続されている。
【００２９】
つまり、図４は、ベクトルレジスタとベクトルパイプライン＃０、＃１、＃２、＃３、＃４、＃５、＃６、＃７とのより具体的な接続関係を示す説明図である。図４において、ベクトルレジスタの要素Ｖ（０），Ｖ（８）はベクトルパイプライン＃０に接続されており、ベクトルレジスタの要素Ｖ（１），Ｖ（９）はベクトルパイプライン＃１に接続されており、以降、最大要素数まで繰り返し続く。すなわち、要素番号によって、接続されているベクトルパイプラインが異なることになる。
【００３０】
図５は、本発明の第１の実施形態における最小値最大値判定器２１の詳細を示すブロック図である。図５に示すように、最小値最大値判定器２１は、最小値判定部５１と、レジスタ５２と、パイプ間最小判定部５３と、最大値判定部６１と、レジスタ６２と、パイプ間最大判定部６３とから構成される。
【００３１】
前述したように、ベクトルギャザー命令や、ベクトルスキャッター命令のアクセスアドレスは固定小数点（整数型データ）であり、固定小数点演算器１２は、固定小数点演算の実行時には毎サイクル演算結果を出力する。
【００３２】
ただし、通常複数のベクトルパイプラインを保持するため、ベクトルパイプライン＃０の固定小数点演算器１２からの出力は、要素番号Ｖ（０），Ｖ（８），Ｖ（１６），Ｖ（２４）、…に対する演算結果が出力であり、ベクトルパイプライン＃１の固定小数点演算器１２からの出力は、要素番号Ｖ（１），Ｖ（９），Ｖ（１７），Ｖ（２５）、…に対する演算結果が出力である。
【００３３】
図５において、最小値判定部５１は、固定小数点演算器１２からの出力のうち、最小のものを検出する。レジスタ５２は、最小値判定部５１で検出された最小値を保持するレジスタである。毎サイクル演算結果が出力されるため、実際の比較は、レジスタ５２に保持されている値と、固定小数点演算器１２の出力結果の間で行われ、より小さい値が再度レジスタ５２に記憶される。
【００３４】
最大値判定部６１は、固定小数点演算器１２からの出力のうち、最大のものを検出する。レジスタ６２は、最大値判定部６１で検出された最大値を保持するレジスタである。毎サイクル演算結果が出力されるため、実際の比較は、レジスタ６２に保持されている値と、固定小数点演算器１２の出力結果の間で行われ、より大きい値が再度レジスタ６２に記憶される。
【００３５】
このような比較において、各ベクトルパイプライン内部での最大値、最小値が検出されることになる。例えば、ベクトルパイプライン＃０では、要素Ｖ（０），Ｖ（８）、Ｖ（１６）、Ｖ（２４）．Ｖ（３２）、Ｖ（４０）、Ｖ（４８）、…のうちの最大値、最小値が検出される。
【００３６】
前述したとおり、ベクトル計算機では、複数のベクトルパイプラインを保持しているため、全要素のうちの最小値、最大値は、さらにそのパイプライン間で比較する必要がある。パイプ間最小判定部５３及びパイプ間最大判定部６３は、パイプライン間における最小値、最大値を検出する回路である。なお、パイプ間最小判定及びパイプ間最大判定は、毎サイクル動作する必要はなく、各パイプラインにおける最終要素が完了するタイミングで実行されればよい。
【００３７】
パイプ間最小判定部５３、パイプ間最大判定部６３で決定された、全要素中の最大値、最小値は、最小値／最大値保持レジスタ２２に格納される。そして、演算結果の最終要素のライトバックタイミングと同じタイミングで、最小値／最大値保持レジスタ２２から、ベクトルレジスタ群１１に含まれるベクトルレジスタの最小値／最大値レジスタ部３１にライトバックされる。
【００３８】
図１に示すように、本発明の第１の実施形態のベクトル型計算機には、最小値最大値判定器２１が設けられ、この最小値最大値判定器２１により、固定小数点演算器１２からの出力結果から、ベクトル要素の最小値及び最大値が求められる。これにより、ベクトルギャザー命令やベクトルスキャッター命令のアクセス範囲を特定でき、ベクトルギャザー命令やベクトルスキャッター命令の追い越し制御が可能になる。このことについて、以下に説明する。
【００３９】
なお、以下の説明では、ＶＳＴはベクトルストア命令を示し、ＶＬＤはベクトルロード命令を示し、ＶＡＤＸはベクトル加算命令を示し、ＶＧＴはベクトルギャザー命令を示し、ＶＳＣはベクトルスキャッター命令を示している。また、＄ｖ０、＄ｖ１、＄ｖ２、…は、ベクトルレジスタのインデックスを示し、ｓ０、ｓ１、ｓ２、…は、スカラレジスタのインデックスを示している。
【００４０】
先ず、本発明の第１の実施形態において、ベクトルギャザー命令がベクトルストア命令を追い越すパターンについて説明する。
【００４１】
図６は、ベクトルギャザー命令がベクトルストア命令を追い越すパターンの説明図である。図６に示すように、本発明の第１の実施形態のベクトル型計算機により、以下の命令列が実行されるとする。
【００４２】
ＶＳＴ  ＄ｖ０，８，＄ｖ６８；
ＶＡＤＸ  ＄ｖ７，＄ｓ４２，＄ｖ１；
…
ＶＧＴ  ＄ｖ８，＄ｖ７
【００４３】
この命令列では、最初に命令（ＶＳＴ  ＄ｖ０，８，＄ｖ６８）がある。この命令は、通常のベクトルストア命令であるため、ストアするアクセス範囲は容易に算出できる。図６では、先行するベクトルストア命令のアクセス範囲は、アドレス（ＶＳＴ．Ｌｏｗ）からアドレス（ＶＳＴ．Ｈｉｇｈ）のメモリ空間である。
【００４４】
次の命令（ＶＡＤＸ  ＄ｖ７，＄ｓ４２，＄ｖ１）は、ベクトル加算命令である。この命令では、ベクトルレジスタ（＄ｖ１）の全要素に、スカラレジスタ（＄ｓ４２）の内容を加算し、結果をベクトルレジスタ（＄ｖ７）に格納する。この命令がベクトルギャザー命令に対するアドレスの依存元命令となる。
【００４５】
このとき、ベクトル加算命令の演算は固定小数点演算器１２で行われ、ベクトルギャザー命令のアクセスするメモリ空間は、最小値最大値判定器２１により、固定小数点演算器１２の演算結果から求めることができる。すなわち、ベクトルレジスタ（＄ｖ７）の要素数が２５６の場合には、固定小数点演算器１２で、ベクトルレジスタ（＄ｖ１）の内容とスカラレジスタ（＄ｓ４２）の内容とを加算した結果の２５６個の要素のうちの最小値（＄ｖ７．ｍｉｍ）及び最大値（＄ｖ７．ｍａｘ）が、ベクトルギャザー命令のアクセスするメモリ空間に対応する。この最小値（＄ｖ７．ｍｉｍ）及び最大値（＄ｖ７．ｍａｘ）は、固定小数点演算器１２の演算結果から、最小値最大値判定器２１により算出される。そして、最小値最大値判定器２１で算出された最小値（＄ｖ７．ｍｉｍ）及び最大値（＄ｖ７．ｍａｘ）は、最小値／最大値保持レジスタ２２から、ベクトルレジスタ群１１に含まれるベクトルレジスタの最小値／最大値レジスタ部３１にセットされる。
【００４６】
その後、次の命令（ＶＧＴ  ＄ｖ８，＄ｖ７）により、ベクトル加算命令で計算したベクトルレジスタ（＄ｖ７）を使って、ベクトルギャザー命令が実行される。このとき、ベクトルレジスタ（＄ｖ７）の値だけでなく、最小値／最大値レジスタ部３１にセットされている最小値（＄ｖ７．ｍｉｍ）及び最大値（＄ｖ７．ｍａｘ）も読み出される。この最小値（＄ｖ７．ｍｉｍ）及び最大値（＄ｖ７．ｍａｘ）は、ベクトルギャザー命令でアクセスする最下位アドレスと最上位アドレスを示していることになる。これにより、ベクトルギャザー命令のアクセス範囲が認識することができる。
【００４７】
図６では、先行するベクトルストア命令のアクセス範囲はアドレス（ＶＳＴ．Ｌｏｗ）からアドレス（ＶＳＴ．Ｈｉｇｈ）であり、後続のベクトルギャザー命令のアクセス範囲はアドレス（Ｖ７．ｍｉｎ）からアドレス（Ｖ７．ｍａｘ）である。この場合、先行ベクトルストア命令のアクセスする最上位アドレス（ＶＳＴ．Ｈｉｇｈ）が、後続ベクトルギャザー命令の最下位アドレス（ｖ７．ｍｉｎ）よりも下のアドレス空間であるため、後続のベクトルギャザー命令が先行するベクトルストア命令を追い越すことは可能である。
【００４８】
後続のベクトルギャザー命令が先行するベクトルストア命令を追い越す制御は、ベクトルストア命令をベクトルロード命令が追い越すときの判定処理と同様になり、ベクトルギャザー命令においても先行するベクトルストア命令を追い越すことが可能になる。なお、追い越し判定の方法としては、周知の方法を用いることができる。
【００４９】
このときの処理をフローチャートを用いて説明する。図７は、図６に示したような処理により、ベクトルギャザー命令がベクトルストア命令を追い越すような処理をフローチャートで説明したものである。
【００５０】
図７において、最初に、先行するベクトルストア命令（ＶＳＴ）が発行される。図６では、この命令は（ＶＳＴ  ＄ｖ０，８，＄ｖ６８）である（ステップＳ１０１）。今回の命令列では、このベクトルストア命令が、後続のベクトルギャザー命令に追い越しされる可能性がある。ベクトルストア命令が発行されると、このベクトルストア命令は、メモリアクセスバッファ１５を経由し、メモリアクセスユニット１６に送られる。なお、ベクトルストア命令は即時発行されない場合（例えば、投機実行中の場合）、この命令は、発行可能になるまでメモリアクセスユニット１６で保持されている。
【００５１】
次に、依存元命令である固定小数点演算が実行される（ステップＳ１０２）。図６では、この命令は（ＶＡＤＸ  ＄ｖ７，＄ｓ４２，＄ｖ１）である。このベクトル加算命令は、固定小数点演算器１２で実行される。
【００５２】
また、このとき、最小値最大値判定器２１により、固定小数点演算器１２から出力される値から、ベクトル要素内の最小値（Ｖ．ｍｉｎ）及び最大値（Ｖ．ｍａｘ）が求められる（ステップＳ１０３）。そして、ベクトル加算命令の演算結果と、最小値（Ｖ．ｍｉｎ）及び最大値（Ｖ．ｍａｘ）がベクトルレジスタにライトバックされる（ステップＳ１０４）。
【００５３】
次に、後続のベクトルギャザー命令（ＶＧＴ）が実行される。図６では、この命令は（ＶＧＴ  ＄ｖ８，＄ｖ７）である。このとき、ベクトルレジスタのロードアドレスの値が格納されている本体レジスタ部３０のデータだけでなく、このベクトルレジスタに付加された対応する最小値／最大値レジスタ部３１から、最小値（Ｖ．ｍｉｎ）及び最大値（Ｖ．ｍａｘ）のデータも同時に読み出される（ステップＳ１０５）。この最小値（Ｖ．ｍｉｎ）及び最大値（Ｖ．ｍａｘ）のデータは、ベクトルギャザー命令と共に、メモリアクセスバッファ１５を経由して、メモリアクセスユニット１６に送られる。
【００５４】
メモリアクセスユニット１６で、最小値（Ｖ．ｍｉｎ）及び最大値（Ｖ．ｍａｘ）のデータを利用し、先行ベクトルストア命令との追い越し判定が行われる（ステップＳ１０６）。
【００５５】
次に、本発明の第１の実施形態において、ベクトルロード命令がベクトルスキャッター命令を追い越すパターンについて説明する。
【００５６】
図８は、ベクトルロード命令がベクトルスキャッター命令を追い越すパターンの説明図である。図８に示すように、本発明の第１の実施形態のベクトル型計算機により、以下の命令列が実行されるとする。
【００５７】
ＶＡＤＸ  ＄ｖ７，＄ｓ４２，＄ｖ１；
ＶＳＣ  ＄ｖ７，＄ｖ３；
…
ＶＬＤ  ＄ｖ８，８，＄ｓ１０；
【００５８】
図８において、最初の命令（ＶＡＤＸ  ＄ｖ７，＄ｓ４２，＄ｖ１）は、ベクトル加算命令である。この命令では、ベクトルレジスタ（＄ｖ１）の全要素にスカラレジスタ（＄ｓ４２）の内容を加算し、その結果をベクトルレジスタ（＄ｖ７）に格納している。この命令がベクトルスキャッター命令に対するアドレスの依存元命令となる。
【００５９】
このとき、最小値最大値判定器２１により、ベクトル加算演算後のベクトルレジスタ（＄ｖ７）の全ての要素中の最小値（ｖ７．ｍｉｎ）及び最大値（ｖ７．ｍａｘ）が算出される。そして、最小値最大値判定器２１で算出された全要素中の最小値（＄ｖ７．ｍｉｍ）及び最大値（＄ｖ７．ｍａｘ）は、最小値／最大値保持レジスタ２２から、ベクトルレジスタ群１１中のベクトルレジスタの最小値／最大値レジスタ部３１にセットされる。
【００６０】
次の命令（ＶＳＣ  ＄ｖ７，＄ｓ３）は、ベクトルスキャッター命令である。このベクトルスキャッター命令は、ベクトルレジスタ（＄ｖ７）をアクセスして実行される。このときのアクセス範囲は、ベクトルレジスタ群１１の最小値／最大値レジスタ部３１にセットされている最小値（ｖ７．ｍｉｎ）及び最大値（ｖ７．ｍａｘ）により確定されている。このため、後続のベクトルロード命令がベクトルスキャッター命令を追い越す判定が可能である。
【００６１】
図８では、先行するベクトルスキャター命令のアクセス範囲はアドレス（Ｖ７．ｍｉｎ）からアドレス（Ｖ７．ｍａｘ）であり、後続のベクトルロード命令のアクセス範囲はアドレス（ＶＬＤ．Ｌｏｗ）からアドレス（ＶＬＤ．Ｈｉｇｈ）である。この場合、先行するベクトルスキャター命令のアクセスする最下位アドレス（Ｖ７．ｍｉｎ）が、後続のベクトルロード命令の最上位アドレス（ＶＬＤ．Ｈｉｇｈ）よりも上のアドレス空間であるため、後続のベクトルロード命令が先行するベクトルスキャター命令を追い越すことは可能である。
【００６２】
なお、図６では、ベクトルギャザー命令がベクトルストア命令を追い越すパターン、図８では、ベクトルロード命令がベクトルスキャッター命令を追い越すパターンを記載したが、両方で、最小値（Ｖ．ｍａｘ）及び最大値（Ｖ．ｍｉｎ）を利用したパターン、すなわち、ベクトルギャザー命令がベクトルスキャッター命令を追い越すパターンも同じ論理で制御が可能である。
【００６３】
このように、本発明の第１の実施形態のベクトル型計算機には、最小値最大値判定器２１により、固定小数点演算器１２の演算結果からベクトル要素の最小値（Ｖ．ｍａｘ）及び最大値（Ｖ．ｍｉｎ）を求めることにより、ベクトルギャザー命令やベクトルスキャッター命令でのアクセス範囲が特定できる。これにより、ベクトルギャザー命令やベクトルスキャッター命令で追い越しし制御が可能になる。
【００６４】
本発明の第１の実施形態では、ベクトルギャザー命令やベクトルスキャター命令の追い越し制御のアーキテクチャを、次の２つの特徴を利用して実現している。１つの目の特徴は、ベクトルギャザー命令やベクトルスキャッター命令のアドレスになりうるのは、必ず固定小数点数（整数）であり、その殆どは固定小数点演算器１２から出力される固定小数点演算であるということである。このため、固定小数点演算器１２の演算結果から、ベクトルレジスタの全要素中の最小値及び最大値を求めている。
【００６５】
２つ目の特徴は、ベクトル演算器は制御の簡易化のために、固定小数点演算のＴＡＴ（ターンアラウンドタイム）と浮動小数点演算のＴＡＴを合わせているということである。すなわち、固定小数点演算では、ＴＡＴ後半の数Ｔ間は、持ち回りを行っているため、余力がある。以上の２点を鑑みると、タイミングの調停時間に当該演算結果の最大値・最小値を割り出すことが可能である。
【００６６】
図９は、固定小数点演算と浮動小数点演算とのタイミング関係を示す説明図である。固定小数点演算は１Ｔ（サイクル）程度で演算が終了するのに対して、浮動小数点演算は例えば４Ｔ（サイクル）程度演算時間がかかる。ベクトル演算器はＴＡＴ（ターンアラウンドタイム）を重視する演算器であること、また、大量のデータを扱い、制御の簡単化をする必要があることなどから、通常、図９（Ａ）に示すように、固定小数点演算のＴＡＴと浮動小数点演算のＴＡＴとを合わせている。一般的なベクトル型計算機では、このようにタイミング調停を行っている。
【００６７】
これに対して、図９（Ｂ）は、本発明の第1の実施形態での最大値最小値算出のタイミングを示している。本発明の第１の実施形態では、固定小数点演算は浮動小数点演算に対してＴＡＴの余力があるので、その時間に最小値最大値判定器２１で最小値及び最大値を計算し、その結果をベクトルギャザー命令やベクトルスキャター命令の追い越し制御に使っている。すなわち、本発明の第1の実施形態では、最小値最大値判定器２１を設けたとしても、全体のＴＡＴが長くなることはない。
【００６８】
＜第２の実施形態＞
次に、本発明の第２の実施形態について説明する。上述の第１の実施形態では、ベクトルギャザー命令又はベクトルスキャッター命令のアドレスの依存元命令は、固定小数点演算としていた。依存元命令が固定小数点演算であるため、図９に示したように、固定小数点演算と浮動小数点演算とのＴＡＴの違いを利用して、最小値最大値判定器２１で、固定小数点演算器１２の演算結果から、最大値最小値を求めることができる。
【００６９】
ベクトルギャザー命令や、スキャッター命令のアクセスアドレスの多くは、このような固定小数点演算によって求められることが多いが、ロードしたベクトルレジスタのデータを使って、ベクトルギャザー命令やスキャッター命令を行うこともある。例えば、以下のような命令列を実行することが考えられる。
【００７０】
ＶＬＤ  ＄ｖ７，８，＄ｓ１０；
ＶＧＴ  ＄ｖ８，＄ｖ７；
【００７１】
この例では、最初の命令（ＶＬＤ  ＄ｖ７，８，＄ｓ１０）で、ベクトルレジスタ（＄ｖ７）にデータをロードし、そのベクトルレジスタ（＄ｖ７）でベクトルギャザー命令が行われる。この場合、図１に示した第１の実施形態では、固定小数点演算器１２を介して演算が行われないため、最小値（Ｖ．ｍｉｎ）及び最大値（Ｖ．ｍａｘ）のデータの算出ができないことになる。
【００７２】
本発明の第２の実施形態では、ベクトルロード命令を実行する時にも最小値及び最大値を算出する機構を設けることで、依存元命令が固定小数点演算でない場合でも、対処できるようにしている。
【００７３】
図１０は、本発明の第２の実施形態のベクトル型計算機の構成を示すブロック図である。図１０において、ベクトルレジスタ群１１１、固定小数点演算器１１２、浮動小数点演算器１１３、ロードバッファ１１４、メモリアクセスバッファ１１５、メモリアクセスユニット１１６、最小値最大値判定器１２１、最小値／最大値保持レジスタ１２２、演算結果レジスタ１２３及び１２４は、図１に示した第１の実施形態におけるベクトルレジスタ群１１、固定小数点演算器１２、浮動小数点演算器１３、ロードバッファ１４、メモリアクセスバッファ１５、メモリアクセスユニット１６、最小値最大値判定器２１、最小値／最大値保持レジスタ２２、演算結果レジスタ２３及び２４と同様である。また、図１０において、本体レジスタ部１３０、最小値／最大値レジスタ部１３１は、図１に示した第１の実施形態における本体レジスタ部３０、最小値／最大値レジスタ部３１と同様である。
【００７４】
この第２の実施形態では、さらに、最小値最大値判定器１２５が設けられている。最小値最大値判定器１２５は、ロードデータがロードバッファ１１４を経由してベクトルレジスタ群１１１に書き込まれる途中において、ベクトル要素の最小値及び最大値を判定している。
【００７５】
図１１は、本発明の第２の実施形態の動作を示すフローチャートである。図１１に示す本発明の第２の実施形態の処理と、図７に示した第１の実施形態の処理とは基本的に同じであり、図７におけるステップＳ１０１〜Ｓ１０６と、図１１におけるステップＳ２０１〜Ｓ２０６とがそれぞれ対応している。図７に示した第１の実施形態と、図１１に示す本発明の第２の実施形態の処理とでは、ステップＳ１０２及びステップＳ１０３の処理と、ステップＳ２０２及びステップＳ２０３の処理が異なっている。
【００７６】
すなわち、図７に示した第１の実施形態のステップＳ１０２では、依存元命令が固定小数点演算であり、ステップＳ１０３の要素内の最大値最小値算出を行うユニットが固定小数点演算器１２の演算結果から要素内の最小値及び最大値を求める最小値最大値判定器２１とされていたが、図１１に示す第２の実施形態では、ステップＳ２０２の依存元命令がベクトルロード命令であり、ステップＳ２０３の要素内の最大値最小値算出を行うユニットがロードバッファ１１４からのロードデータから最小値及び最大値を求める最小値最大値判定器１２５に変更されている。
【００７７】
以上説明したように、本発明の第２の実施形態には、ロードバッファ１１４を経由してベクトルレジスタ群１１１に書き込まれるロードデータからベクトル要素の最小値及び最大値を判定する最小値最大値判定器１２５が設けられている。このため、依存元命令がロード命令の場合でも、ベクトルギャザー命令又はベクトルスキャッター命令の追い越し制御を行うことができる。
【００７８】
＜第３の実施形態＞  
次に、本発明の第３の実施形態について説明する。図１２は、本発明の第３の実施形態のベクトル型計算機の構成を示すブロック図である。図１２において、ベクトルレジスタ群２１１、固定小数点演算器２１２、浮動小数点演算器２１３、ロードバッファ２１４、メモリアクセスバッファ２１５、メモリアクセスユニット２１６、最小値最大値判定器２２１、最小値／最大値保持レジスタ２２２、演算結果レジスタ２２３及び２２４、最小値最大値判定器２２５は、第２の実施形態におけるベクトルレジスタ群１１１、固定小数点演算器１１２、浮動小数点演算器１１３、ロードバッファ１１４、メモリアクセスバッファ１１５、メモリアクセスユニット１１６、最小値最大値判定器１２１、最小値／最大値保持レジスタ１２２、演算結果レジスタ１２３及び１２４、最小値最大値判定器１２５と同様である。
【００７９】
この第３の実施形態では、ベクトルレジスタ２１１中のベクトルレジスタには、本体レジスタ部２３０と最小値／最大値レジスタ部２３１とを設けると共に、さらに、有効／無効レジスタ部２３２を設けるようにしている。有効／無効レジスタ部２３２は、最小値／最大値レジスタ部２３１にセットされている最小値及び最大値が有効か無効かを示している。有効／無効レジスタ部２３２は、例えば、Ｖａｌｉｄビットからなり、このＶａｌｉｄビットが立っていれば有効を示し、Ｖａｌｉｄビットが立っていなければ無効を示す。
【００８０】
本発明の第３の実施形態では、固定小数点演算器２１２からベクトルレジスタ２１１への書き戻し時に、最小値／最大値レジスタ部２３１の設定と共に、最小値／最大値レジスタ部２３１が有効か無効かを示す有効／無効レジスタ部２３２が有効にセットされ、それ以外のときには、無効にセットされる。これにより、ベクトルギャザー命令又はベクトルスキャッター命令は、有効／無効レジスタ部２３２の有効に設定されているときのみ追い越し判定をすることができる。それ以外の時には、動的追い越し判定は行わない。
【００８１】
また、ここまでの説明においては、単純なケースでの最大値、最小値検出、すなわち、固定小数点演算器からの出力の単純な最大値最小値検出か、ロードバッファからベクトルレジスタに過去戻す際の単純な最大値最小値検出を基本に説明をしてきた。
【００８２】
しかしながら、通常ベクトル計算機では、図１３に示すようなマスク付演算が存在する。マスク付演算とは、マスクレジスタの有効な要素にのみ演算を行うというものである。図１３では、要素番号０、１、４、６はマスクビットが立っているため、演算を実施しディスティネーションレジスタが更新され、要素番号２，３、５，７については、演算は実施するものの、ディスティネーションレジスタの更新が行われないという演算である。
【００８３】
この場合には、固定小数点演算器２１２の出力結果で判定している最小値最大値判定器２２１の判定結果が実際のベクトルレジスタの全要素中の最大値最小値と一致しないことになる。よって、この場合にも、有効／無効レジスタ部２３２で、最小値／最大値レジスタ部２３１を無効とし、誤動作を起こさないようにガードがかけられる。
【００８４】
また、ベクトル型計算機では、プログラム中に可変することができるＶＬ長という機能が存在する。ＶＬ長とはベクトルレジスタのうちの、どの要素数までの計算を行うかを示すものである。図１４にＶＬ長の説明図を示す。この例では、最大ＶＬ長Ｎに対して、演算ＶＬ長が１２８に設定されている。このときのベクトル演算は最大要素数Ｎに対してではなく、１２８個の要素に対して行われるため、計算される要素は要素番号０から１２７までである。
【００８５】
ＶＬ長の変化がないときは問題はないが、プログラム中でＶＬ長の変更を実施できるため、例えば、図６の命令列のケースにおいて、ベクトル加算命令の実行中のＶＬ長が１２８でベクトルギャザー命令のＶＬ長が２５６になった場合には、判定した最大値最小値が実際と合わないことになる。よって、ＶＬ長の変化があった場合においては、全ベクトルレジスタに対応する有効／無効レジスタ部２３２を無効に設定するようにし、誤動作を起こさないようにガードがかけられる。
【００８６】
なお、通常、ベクトル加算命令のＶＬ長が１２８でベクトルギャザー命令のＶＬ長を２５６にすることはない。反対に、ベクトル加算命令のＶＬ長が２５６でベクトルギャザー命令のＶＬ長を１２８にすることはありうる。前者の場合は、誤動作を起こし、後者の場合は、特に問題は起こさないが、処理の単純化のために、ＶＬ長変更のときには、すべての有効／無効レジスタ部２３２の有効ビットで、最小値／最大値レジスタ部２３１を無効化するようにした方が良い。
【００８７】
上記のマスク付演算問題、及び、ＶＬ長変更問題に対しては、有効／無効レジスタ部２３２の制御によって最小値／最大値レジスタ部２３１の有効／無効を設定することで、これを回避することができる。
【００８８】
図１５は、本発明の第３の実施形態で、マスク付演算問題、及び、ＶＬ長変更問題を回避するような処理を行う場合のフローチャートである。図１５の処理のうち、ステップＳ３０１からステップＳ３０３までは、前述の図７におけるステップＳ１０１からステップＳ１０３例と同じである。
【００８９】
次に実行した依存元命令がマスク演算であったか否かが確認される（ステップＳ３０４）。マスク演算であった場合には、最大値最小値が正しくないため、有効／無効レジスタ部２３２は無効にされる（ステップＳ３０６）。そして、その後のベクトルギャザー・ベクトルスキャッター命令では、最小値／最大値レジスタ部２３１の最小値／最大値は利用されずに、本発明で提案する追い越し制御は行われないで、処理が進められる（ステップＳ３０７／Ｓ３０８）。
【００９０】
ステップＳ３０４で、マスク演算でない場合には、これまで説明したとおり、ベクトルレジスタに演算結果と最大値最小値がライトバックされ、有効／無効レジスタ部２３２を有効に設定される（ステップＳ３０５）。その後、ＶＬ長の変更があったか否かがチェックされる（ステップＳ３０９）。ＶＬ長の変更がなければ、最小値／最大値レジスタ部２３１は正しい最大値最小値を示しているので、ステップＳ３１０，Ｓ３１１に進みベクトルギャザー、スキャッター命令において動的な依存検出による追い越し制御が実施される。
【００９１】
ステップＳ３０９において、ＶＬ長の変更を確認した場合には、ステップＳ３１２に進み、全ベクトルレジスタに対応する最小値／最大値レジスタ部２３１が無効化される。そして、その後のベクトルギャザー・ベクトルスキャッター命令では、最小値／最大値レジスタ部２３１は利用されずに、追い越し制御は行わないで、処理が進められる（ステップＳ３０７、テップＳ３０８）。
【００９２】
本発明は、上述した実施形態に限定されるものではなく、この発明の要旨を逸脱しない範囲内で様々な変形や応用が可能である。
【産業上の利用可能性】
【００９３】
本発明は、ベクトルギャザー・ベクトルスキャッター命令をもつベクトル型計算機だけでなく、ベクトルギャザー・ベクトルスキャッター命令と同等の機能をもつＳＩＭＤ（Ｓｉｎｇｌｅ  Ｉｎｓｔｒｕｃｔｉｏｎ  Ｍｕｌｔｉｐｌｅ  Ｄａｔａ）命令を実装しているスカラ型計算機への応用も可能である。
【符号の説明】
【００９４】
１１，１１１，２１１：ベクトルレジスタ群
１２，１１２，２１２：固定小数点演算器
１３，１１３，２１３：浮動小数点演算器
１４，１１４，２１４：ロードバッファ
１５，１１５，２１５：メモリアクセスバッファ
１６，１１６，２１６：メモリアクセスユニット
１７，１８，１１７，２１８：接続網
２１，１２１，２２１：最小値最大値判定器
２２，１２２，２２２：最小値／最大値保持レジスタ
２３，２４，１２３，１２４，２２３，２２４：演算結果レジスタ
３０，１３０，２３０：本体レジスタ部
３１，１３１，２３１：最小値／最大値レジスタ部
５１：最小値判定部
５２：レジスタ
５３：パイプ間最小判定部
６１：最大値判定部
６２：レジスタ
６３：パイプ間最大判定部
１３２，２３２：有効／無効レジスタ部
【図１】
0005573134.tif 000002
【図２】
0005573134.tif 000003
【図３】
0005573134.tif 000004
【図４】
0005573134.tif 000005
【図５】
0005573134.tif 000006
【図６】
0005573134.tif 000007
【図７】
0005573134.tif 000008
【図８】
0005573134.tif 000009
【図９】
0005573134.tif 000010
【図１０】
0005573134.tif 000011
【図１１】
0005573134.tif 000012
【図１２】
0005573134.tif 000013
【図１３】
0005573134.tif 000014
【図１４】
0005573134.tif 000015
【図１５】
0005573134.tif 000016
【図１６】
0005573134.tif 000017
【図１７】
0005573134.tif 000018
【図１８】
0005573134.tif 000019