(57)【特許請求の範囲】
【請求項１】
主記憶装置とベクトルレジスタとの間に前記主記憶装置から読み出されたベクトルデータを一時的に格納するロードバッファを備え、前記主記憶装置から読み出されたベクトル命令を複数のステージで順次処理するベクトル制御部の命令解読ステージと命令発行ステージとの間に、仕掛かり中のベクトルロード命令が使用するベクトルレジスタが先行するベクトル命令と競合しなくなったことを検出するリソースチェック手段を備え、前記主記憶装置から読み出されたベクトルロード命令の解読時に前記主記憶装置から前記ロードバッファへのベクトルデータの読み出しを起動し、前記ベクトルデータの全要素が前記ロードバッファに格納され次第、前記ベクトルロード命令で使用するベクトルレジスタが先行するベクトル命令で使用するベクトルレジスタと競合しないことが前記リソースチェック手段で検出されていることを条件に、前記ロードバッファから前記ベクトルレジスタへのベクトルデータの転送を開始するベクトル処理装置。
【請求項２】
主記憶装置とこれに接続されたプロセッサとを備え、前記プロセッサは、前記主記憶装置から読み出されたベクトル命令がベクトルロード命令であった場合に前記主記憶装置からのベクトルデータの読み出しを起動するメモリアクセス処理部、前記主記憶装置から読み出されたベクトル命令を複数のステージで順次処理するベクトル制御部、複数のベクトルレジスタと１以上のベクトル演算器と複数のロードバッファとを備えるベクトル処理部を含み、前記ベクトル制御部の命令解読ステージと命令発行ステージとの間に、仕掛かり中のベクトルロード命令が使用するベクトルレジスタが先行するベクトル命令と競合しなくなったことを検出して前記ベクトル処理部に通知するリソースチェック手段を備え、前記ベクトル処理部は、前記主記憶装置から読み出されたベクトルデータを前記メモリアクセス処理部で割り当てられた前記ロードバッファに格納し、ベクトルデータの全要素が前記ロードバッファに格納され次第、前記ベクトルロード命令で使用するベクトルレジスタが先行するベクトル命令で使用するベクトルレジスタと競合しないことが前記ベクトル制御部から通知されていることを条件に、前記ロードバッファから前記ベクトルレジスタへのベクトルデータの転送を開始するベクトルロード管理部を備えることを特徴とするベクトル処理装置。
【請求項３】
ａ）主記憶装置から読み出されたベクトルロード命令の解読時に、前記ベクトルロード命令によって前記主記憶装置から読み出すベクトルデータを一時的に格納するロードバッファを割り当てて、前記主記憶装置から前記ロードバッファへのベクトルデータの読み出しを起動する段階、ｂ）前記ベクトルデータの全要素が前記ロードバッファに格納されたという第１の条件を検出する段階、ｃ）前記ベクトルロード命令で使用するベクトルレジスタが先行するベクトル命令で使用するベクトルレジスタと競合しないという第２の条件を命令解読ステージと命令発行ステージとの間で検出する段階、ｄ）前記第１および第２の条件が成立次第、前記ロードバッファから前記ベクトルレジスタへのベクトルデータの転送を開始する段階、を含むことを特徴とするベクトルロード方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明はベクトル処理装置に関し、特に主記憶装置からベクトルレジスタにベクトルデータをロードするベクトルロード命令の処理方法に関する。
【背景技術】
【０００２】
一般にベクトル処理装置は、主記憶装置からロードしたベクトルデータやベクトル演算中の中間結果などを保持する複数のベクトルレジスタと、ベクトルレジスタに保持されたベクトルデータに対する演算を行うベクトル演算器とを備え、大量のデータを高速に演算することができるようになっている。また、主記憶装置のアクセス速度はベクトル演算の速度に比べて遅いため、ベクトルデータのベクトルレジスタへのロードを高速化するために、主記憶装置とベクトルレジスタとの間にベクトルデータを一時的に格納するロードバッファを備え、ベクトルロード命令の解読時に主記憶装置からロードバッファへのベクトルデータの読み出しを開始させ、ロードバッファからベクトルレジスタへの転送は命令発行順、つまりベクトルロード命令の発行ステージで実施する技術が提案されている（例えば特許文献１参照）。
【特許文献１】特開平２−１０１５７６号公報
【発明の開示】
【発明が解決しようとする課題】
【０００３】
しかし、ロードバッファからベクトルレジスタへの転送をベクトルロード命令の発行ステージで起動する構成では、そのベクトルロード命令に先行するベクトル命令がリソースビジー等の理由で発行ステージに留まっている限り、ロードバッファからベクトルレジスタへの転送を起動することができず、ベクトルロード処理の高速化が図れない。また、ロードバッファからベクトルレジスタへの転送をベクトルロード命令の発行ステージで起動する構成では、複数のベクトルロード命令の処理は命令発行順になり、後続のベクトルロード命令を先行するベクトルロード命令よりも早く処理するといった命令の追越し制御は行えない。
【０００４】
そこで本発明の目的は、ロードバッファからベクトルレジスタへの転送を命令発行順でなく、ロードバッファに全要素が揃い且つ転送先のベクトルレジスタがビジー状態でないという条件が成立した順に実行することのできるベクトル処理装置を提供することにある。
【課題を解決するための手段】
【０００５】
本発明のベクトル処理装置は、主記憶装置とベクトルレジスタとの間に前記主記憶装置から読み出されたベクトルデータを一時的に格納するロードバッファを備え、前記主記憶装置から読み出されたベクトル命令を複数のステージで順次処理するベクトル制御部の命令解読ステージと命令発行ステージとの間に、仕掛かり中のベクトルロード命令が使用するベクトルレジスタが先行するベクトル命令と競合しなくなったことを検出するリソースチェック手段を備え、前記主記憶装置から読み出されたベクトルロード命令の解読時に前記主記憶装置から前記ロードバッファへのベクトルデータの読み出しを起動し、前記ベクトルデータの全要素が前記ロードバッファに格納され次第、前記ベクトルロード命令で使用するベクトルレジスタが先行するベクトル命令で使用するベクトルレジスタと競合しないことが前記リソースチェック手段で検出されていることを条件に、前記ロードバッファから前記ベクトルレジスタへのベクトルデータの転送を開始する。より具体的には、主記憶装置とこれに接続されたプロセッサとを備え、前記プロセッサは、前記主記憶装置から読み出されたベクトル命令がベクトルロード命令であった場合に前記主記憶装置からのベクトルデータの読み出しを起動するメモリアクセス処理部、前記主記憶装置から読み出されたベクトル命令を複数のステージで順次処理するベクトル制御部、複数のベクトルレジスタと１以上のベクトル演算器と複数のロードバッファとを備えるベクトル処理部を含み、前記ベクトル制御部の命令解読ステージと命令発行ステージとの間に、仕掛かり中のベクトルロード命令が使用するベクトルレジスタが先行するベクトル命令と競合しなくなったことを検出して前記ベクトル処理部に通知するリソースチェック手段を備え、前記ベクトル処理部は、前記主記憶装置から読み出されたベクトルデータを前記メモリアクセス処理部で割り当てられた前記ロードバッファに格納し、ベクトルデータの全要素が前記ロードバッファに格納され次第、前記ベクトルロード命令で使用するベクトルレジスタが先行するベクトル命令で使用するベクトルレジスタと競合しないことが前記ベクトル制御部から通知されていることを条件に、前記ロードバッファから前記ベクトルレジスタへのベクトルデータの転送を開始するベクトルロード管理部を備えている。
【０００６】
また本発明のベクトルロード方法は、ａ）主記憶装置から読み出されたベクトルロード命令の解読時に、前記ベクトルロード命令によって前記主記憶装置から読み出すベクトルデータを一時的に格納するロードバッファを割り当てて、前記主記憶装置から前記ロードバッファへのベクトルデータの読み出しを起動する段階、ｂ）前記ベクトルデータの全要素が前記ロードバッファに格納されたという第１の条件を検出する段階、ｃ）前記ベクトルロード命令で使用するベクトルレジスタが先行するベクトル命令で使用するベクトルレジスタと競合しないという第２の条件を命令解読ステージと命令発行ステージとの間で検出する段階、ｄ）前記第１および第２の条件が成立次第、前記ロードバッファから前記ベクトルレジスタへのベクトルデータの転送を開始する段階、を含んで構成される。
【発明の効果】
【０００７】
本発明によれば、ロードバッファからベクトルレジスタへの転送を命令発行順ではなく、ロードバッファに全要素が揃い且つ転送先のベクトルレジスタがビジー状態でないという条件が成立した順に実行することができる。このため、ベクトルロード命令に先行するベクトル命令がリソースビジー等の理由で発行ステージに留まっていても、転送条件が成立次第、ロードバッファからベクトルレジスタへの転送を起動することができるため、ベクトルロード処理の高速化が可能となる。また、複数のベクトルロード命令の処理を命令発行順でなく、転送条件の成立順に行うことができ、後続のベクトルロード命令を先行するベクトルロード命令よりも早く処理するといった命令の追越し制御が可能となる。
【発明を実施するための最良の形態】
【０００８】
図１を参照すると、本発明の実施の形態にかかるベクトル処理装置は、プロセッサ１と主記憶装置７とを含んで構成される。プロセッサ１と主記憶装置７とは、主記憶装置７に記憶された命令をプロセッサ１から読み出すための信号線１０１と、主記憶装置７に記憶されたベクトルデータ等をプロセッサ１から読み出し、逆にプロセッサ１で生成したベクトルデータ等を主記憶装置７に書き込むための信号線１０２によって相互に接続されている。信号線１０２は多重化されており、複数のベクトルロード命令にかかる主記憶装置７からのベクトルデータの読み出し等を並行して行うことができるようになっている。
【０００９】
プロセッサ１は、命令制御部２と、メモリアクセス処理部３と、プロセッサネットワーク部４と、ベクトル制御部５と、ベクトル処理部６とを含んで構成される。
【００１０】
命令制御部２は、主記憶装置７と信号線１０１で接続され、メモリアクセス処理部３と信号線１０３で接続され、ベクトル制御部５と信号線１０４で接続され、信号線１０１を通じて主記憶装置７から読み出した命令を解読する命令解読部２１と、解読された命令がスカラ命令である場合にそのスカラ命令にかかる処理を実行するスカラ処理部２２を有している。また、命令解読部２１は、解読した命令がベクトル命令である場合にはそのベクトル命令を信号線１０４を通じてベクトル制御部５に出力し、更にそのベクトル命令がベクトルロード命令である場合は信号線１０３を通じてメモリアクセス処理部３に対して当該ベクトルロード命令を出力する。ベクトルロード命令には、ロードするベクトルデータの主記憶装置７のアドレスを特定する情報（例えば開始アドレスとベクトルデータの間隔）、ベクトルデータの要素数、ベクトルデータをロードするベクトルレジスタの番号が含まれている。
【００１１】
メモリアクセス処理部３は、主記憶装置７へのアクセスを制御する部分で、命令制御部２と信号線１０３で接続され、プロセッサネットワーク部４と信号線１０５で接続され、ベクトル制御部５と信号線１０６で接続され、ベクトル処理部６と信号線１０７で接続されている。メモリアクセス処理部３は、信号線１０３を通じて命令制御部２から送られてくるメモリアクセスにかかる命令を解読すると共にプロセッサネットワーク部４の状態を管理し、信号線１０５を通じてメモリアクセスリクエストを制御する信号をプロセッサネットワーク部４に送り、主記憶装置７との信号線１０２とベクトル処理部６との信号線１０８との間のデータの行き来を制御する。特にベクトルロード命令に関し、メモリアクセス処理部３は、ベクトル処理部６内に設けられている複数のロードバッファの空き管理を行っており、命令制御部２から信号線１０３を通じてベクトルロード命令を受信すると、このベクトルロード命令用に空き状態の１つのロードバッファを割り当ててそれを使用中状態として管理し、割り当てたロードバッファを一意に識別するバッファ番号を付随してメモリアクセスリクエストを信号線１０５を通じてプロセッサネットワーク部４に発行し、同時に、どのベクトルロード命令に対してどのバッファ番号のロードバッファを割り当てたかを信号線１０６を通じてベクトル制御部５に通知する。また、信号線１０７を通じてベクトル処理部６からバッファ番号を指定したバッファ解放通知を受けると、メモリアクセス処理部３はそのバッファ番号のロードバッファを再び空き状態として管理する。
【００１２】
プロセッサネットワーク部４は、主記憶装置７と信号線１０２で接続され、メモリアクセス処理部３と信号線１０５で接続され、ベクトル処理部６と信号線１０８で接続され、メモリアクセス処理部３から与えられるメモリアクセスリクエストに応じて主記憶装置７とベクトル処理部６との間でベクトルデータをやりとりする。ベクトルロード命令にかかるメモリアクセスリクエストに関し、プロセッサネットワーク部４は、主記憶装置７から読み出したベクトルデータを構成する各要素に、メモリアクセスリクエストに付随するバッファ番号を付随させ、信号線１０８を通じてベクトル処理部６に送出する。信号線１０８は多重化されており、複数のメモリアクセスリクエストにかかるベクトルデータを並行してベクトル処理部６に供給できるようになっている。
【００１３】
ベクトル処理部６は、メモリアクセス処理部３と信号線１０７で接続され、プロセッサネットワーク部４と信号線１０８で接続され、ベクトル制御部５と信号線１０９、１１０で接続され、ベクトルデータに対してベクトル演算を実行する機能を持つ。ベクトル処理部６は、少なくとも１つのベクトルパイプライン演算器６１を備える。ベクトルパイプライン演算器６１は、ベクトルデータを格納する複数のベクトルレジスタ６２と、ベクトルレジスタ６２に格納されたベクトルデータに対してベクトル演算を行う１つ以上のベクトル演算器６３と、主記憶装置７から読み出されたベクトルデータを一時的に格納する複数のロードバッファ６４と、ベクトルロード管理部６５と、ベクトル演算器６３およびロードバッファ６４から出力されるベクトルデータをベクトルレジスタ６２に振り分けるクロスバスイッチ回路６６とを含んで構成される。なお、ベクトル演算されたベクトルデータを主記憶装置７にストアするストアバッファなど、ストアに関連する構成は本発明と直接関係しないため図示を省略している。
【００１４】
ベクトルロード管理部６５は、メモリアクセス処理部３と信号線１０７で接続され、プロセッサネットワーク部４と信号線１０８で接続され、ベクトル制御部５と信号線１０９〜１１１で接続され、信号線１０８を通じて送られてきたベクトルデータの要素を、それに付随するバッファ番号のロードバッファ６４に一旦格納し、その後、ロードバッファ６４に格納されたベクトルデータをベクトルレジスタ６２に転送する。図２にベクトルロード管理部６５の構成例を示す。
【００１５】
図２を参照すると、ベクトルロード管理部６５の一例は、レジスタ群６５１と、レジスタ設定部６５２と、ライト部６５３と、リード部６５４とを含んで構成される。
【００１６】
レジスタ群６５１は、ロードバッファ６４に１対１に対応するレジスタ６５１−０〜６５１−ｎの集合で構成され、各レジスタ６５１−ｉ（ｉ＝０〜ｎ）は、ロードバッファ番号フィールド６５１１、ベクトルレジスタ（ＶＡＲ）番号フィールド６５１２、リソースチェックフラグフィールド６５１３、ライト要素数フィールド６５１４およびリード要素数フィールド６５１５を有する。ロードバッファ番号フィールド６５１１には、ロードバッファ６４のバッファ番号が固定的に設定されている。ベクトルレジスタ番号フィールド６５１２には、ベクトルロード命令でロードするベクトルデータを格納するベクトルレジスタ６２の番号が設定される。リソースチェックフラグフィールド６５１３には、ベクトルロード命令で使用するベクトルレジスタ６２が先行するベクトル命令と競合するか否かを示すリソースチェックフラグが設定される。ライト要素数フィールド６５１４およびリード要素数フィールド６５１５には、ベクトルロード命令でロードするベクトルデータの要素数が初期値として設定される。ライト要素数フィールド６５１４に設定されたライト要素数は、ロードバッファ６４へのベクトルデータ要素の書き込みに応じて減算され、全要素のロードバッファ６４への書き込みが完了すると０となる。リード要素数フィールド６５１５に設定されたリード要素数は、ロードバッファ６４からベクトルレジスタ６２への読み出しに応じて減算され、全要素のロードバッファ６４からの読み出しが完了すると０となる。
【００１７】
レジスタ設定部６５２は、ベクトル制御部５と信号線１０９で接続され、レジスタ群６５１の初期設定等を行う。レジスタ設定部６５２は、信号線１０９を通じてベクトル制御部５から、ロードバッファ番号、ベクトルレジスタ番号および要素数を含むベクトルロード命令情報が伝達されると、そのロードバッファ番号をロードバッファ番号フィールド６５１１に持つレジスタ６５１−ｉのベクトルレジスタ番号フィールド６５１２にベクトルロード命令情報中のベクトルレジスタ番号を設定し、ライト要素数フィールド６５１４およびリード要素数フィールド６５１５にベクトルロード命令情報中の要素数を設定し、リソースチェックフラグフィールド６５１３には、リソースの競合有りを示すフラグ値１を設定する。また、レジスタ設定部６５２は、信号線１０９を通じてベクトル制御部５から、ロードバッファ番号を指定したリソースチェックＯＫ信号が伝達されると、そのロードバッファ番号をロードバッファ番号フィールド６５１１に持つレジスタ６５１−ｉのリソースチェックフラグフィールド６５１３のフラグをリソース競合無しを示す値０に書き換える。
【００１８】
ライト部６５３は、プロセッサネットワーク部４と信号線１０８で接続され、ベクトルデータのロードバッファ６４への書き込みを行う。ライト部６５３は、信号線１０８を通じてプロセッサネットワーク部４からベクトルデータの要素を受信すると、受信した要素に付随するロードバッファ番号を持つロードバッファ６４にその要素を書き込み、そのロードバッファ番号をロードバッファ番号フィールド６５１１に持つレジスタ６５１−ｉのライト要素数フィールド６５１４の値を書き込んだ要素数分だけ減算する。
【００１９】
リード部６５４は、ベクトル制御部５と信号線１０９、１１０で接続され、ロードバッファ６４からベクトルレジスタ６２へのベクトルデータの転送を行う。リード部６５４は、レジスタ設定部６５２によってライト要素数フィールド６５１４が全要素数に初期設定されたレジスタ６５１−ｉについて、そのレジスタのロードバッファ番号フィールド６５１１に設定されたバッファ番号を持つロードバッファ６４のデータを、そのレジスタのベクトルレジスタ番号フィールド６５１２に設定された番号のベクトルレジスタ６２に転送する条件が満足されたかどうかを監視する。（１）ベクトルデータの全要素がロードバッファ６４に格納済みである（ライト要素数フィールド６５１４の値が０である）、（２）先行するベクトル命令とベクトルレジスタが競合しない（リソースチェックフラグフィールド６５１３のフラグ値が０である）、の２つの要件が満たされた場合、転送可能と判断する。
【００２０】
リード部６５４は、或るレジスタ６５１−ｉについて転送可能と判断した場合、信号線１１０を通じてベクトル制御部５に対して、そのレジスタ６５１−ｉのロードバッファ番号フィールド６５１１に設定されたバッファ番号およびベクトルレジスタ番号フィールド６５１２に設定されたベクトルレジスタ番号を指定した転送開始通知を送出した後、ロードバッファ番号フィールド６５１１に設定されたバッファ番号を持つロードバッファ６４に格納されているデータを順次に読み出して、ベクトルレジスタ番号フィールド６５１２に設定された番号のベクトルレジスタ６２にクロスバスイッチ回路６６を通じて書き込んでいく。このとき、ベクトルデータの１要素をロードバッファ６４から読み出す毎に、リード要素数フィールド６５１５の値を１だけ減算する。リード要素数フィールド６５１５の値が０になると、転送完了となり、リード部６５４は、そのレジスタ６５１−ｉのロードバッファ番号フィールド６５１１に設定されたバッファ番号およびベクトルレジスタ番号フィールド６５１２に設定されたベクトルレジスタ番号を指定した転送終了通知を信号線１１０を通じてベクトル制御部５に送出すると同時に、そのレジスタ６５１−ｉのロードバッファ番号フィールド６５１１に設定されたバッファ番号を指定したバッファ解放通知を信号線１０７を通じてメモリアクセス処理部３に送出し、そのレジスタ６５１−ｉのフィールド６５１２〜６５１５を例えばＮＵＬＬに初期化する。
【００２１】
再び図１を参照すると、ベクトル制御部５は、命令制御部２と信号線１０４で接続され、メモリアクセス処理部３と信号線１０６で接続され、ベクトル処理部６と信号線１０９〜１１１で接続され、ベクトル命令の発行制御を行う。このベクトル制御部５は、ベクトル命令の実行サイクルを、命令の解読、オペランドの計算と取り出し、命令の発行などと言った複数のステージに分割し、各ステージの処理を独立したハードウェアが行うことにより、複数のベクトル命令を並列に処理する。このため、ベクトル制御部５は、信号線１０４を通じて命令制御部２から入力されたベクトル命令を解読する命令デコード部５１と、最終ステージである命令発行ステージ用のレジスタ５２との間に、中間の各ステージに存在する命令のデコード情報等を保持する幾つかの命令レジスタ５３、５４、５５と中間のステージにおける処理を実行するデコーダ５６、５７を備えている。なお、ステージの段数はプロセッサのアーキテクチャによって相違する。命令発行部５８は、命令発行ステージのレジスタ５２に格納された命令が発行可能かどうかをチェックし、発行可能でなければ発行可能になるまで待ち、発行可能であれば、信号線１１１を通じてベクトル処理部６に命令発行を通知し、同時に処理に必要な付随情報を通知する。レジスタ５２に格納された命令が発行可能かどうかのチェックは、ベクトル処理部６のベクトルパイプライン演算器６１におけるベクトルレジスタ６２、ベクトル演算器６３等の各リソース毎にそのリソースがビジー状態かどうかを保持するビジーフラグ群５９のビジーフラグのうち、命令発行ステージのレジスタ５２に格納された命令が使用するリソースのビジーフラグがビジー状態でないかどうかに基づいて行う。
【００２２】
本実施の形態においては、ベクトルロード命令については、主記憶装置７から読み出されたベクトルデータの全要素がロードバッファ６４に格納され、且つ、そのベクトルロード命令が使用するリソースが先行するベクトル命令で使用するリソースと競合しなければ、そのベクトルロード命令が命令発行ステージのレジスタ５２に到着するのを待たずに速やかに、ロードバッファ６４からベクトルレジスタ６２への転送を開始させる。ベクトル制御部５のライト・ロードカウンタ部５Ａ、リードカウンタ部５Ｂおよびロード命令情報管理部５Ｃは、そのような制御のために設けられている。
【００２３】
ライト・ロードカウンタ部５Ａは、ベクトル制御部５内で仕掛かり中のベクトル命令でライトまたはロードのために使用されるベクトルレジスタ６２とその使用命令数を管理する。構成例を図３のライト・ロードカウンタ部５Ａのブロックに示す。この例のライト・ロードカウンタ部５Ａは、ベクトル処理部６に存在するベクトルレジスタ６２と１対１に対応するカウント部５Ａ−０〜５Ａ−ｍから構成されるカウンタ５ＡＣを有する。カウンタ５ＡＣの全てのカウント部５Ａ−０〜５Ａ−ｍの初期値は０である。命令デコード部５１で解読された命令がベクトルレジスタ６２へライトする命令またはベクトルレジスタ６２へデータをロードする命令であった場合、カウンタ５ＡＣは、デコード部５１から出力される当該命令が使用するベクトルレジスタ６２の情報に基づいて、そのベクトルレジスタ６２に対応するカウント部５Ａ−ｊ（ｊは０〜ｍ）の値を＋１する。また、命令発行部５８は、命令発行ステージのレジスタ５２の命令の処理が終了すると、その命令がベクトルレジスタ６２へライトする命令またはベクトルレジスタ６２へデータをロードする命令であった場合、その命令で使用したベクトルレジスタ６２のビジーフラグをリセットするタイミングで、ベクトルレジスタ６２の番号をライト・ロードカウンタ部５Ａに通知するようになっており、カウンタ５ＡＣは、通知されたベクトルレジスタ６２に対応するカウント部５Ａ−ｊの値を−１する。
【００２４】
リードカウンタ部５Ｂは、ベクトル制御部５内で仕掛かり中のベクトル命令でリードされるベクトルレジスタ６２とその使用命令数を管理する。構成例を図３のリードカウンタ部５Ｂのブロックに示す。この例のリードカウンタ部５Ｂは、ベクトル処理部６に存在するベクトルレジスタ６２と１対１に対応するカウント部５Ｂ−０〜５Ｂ−ｍから構成されるカウンタ５ＢＣを有する。カウンタ５ＢＣの全てのカウント部５Ｂ−０〜５Ｂ−ｍの初期値は０である。命令デコード部５１で解読された命令がベクトルレジスタ６２をリードする命令であった場合、カウンタ５ＢＣは、デコード部５１から出力される当該命令が使用するベクトルレジスタ６２の情報に基づいて、そのベクトルレジスタ６２に対応するカウント部５Ｂ−ｊの値を＋１する。また、命令発行部５８は、命令発行ステージのレジスタ５２の命令の処理が終了すると、その命令がベクトルレジスタ６２をリードする命令であった場合、その命令で使用したベクトルレジスタ６２のビジーフラグをリセットするタイミングで、ベクトルレジスタ６２の番号をリードカウンタ部５Ｂに通知するようになっており、カウンタ５ＢＣは、通知されたベクトルレジスタ６２に対応するカウント部５Ｂ−ｊの値を−１する。
【００２５】
ロード命令情報管理部５Ｃは、ベクトル制御部５内で仕掛かり中のベクトルロード命令を管理し、ベクトル処理部６のベクトルロード管理部６５に対して必要な情報を通知する部分である。構成例を図３のロード命令情報管理部５Ｃのブロックに示す。この例のロード命令情報管理部５Ｃは、レジスタ群５Ｃ１、リソース情報登録部５Ｃ２およびリソース情報チェック部５Ｃ３を含んで構成される。
【００２６】
レジスタ群５Ｃ１は、ベクトル処理部６に存在するロードバッファ６４に１対１に対応するレジスタ５Ｃ１−０〜５Ｃ１−ｎの集合で構成され、各レジスタ５Ｃ１−ｉ（ｉ＝０〜ｎ）は、ロードバッファ番号フィールド５Ｃ１１、ベクトルレジスタ番号フィールド５Ｃ１２、要素数フィールド５Ｃ１３、ライト・ロードカウンタ値フィールド５Ｃ１４およびリードカウンタ値フィールド５Ｃ１５を有する。ロードバッファ番号フィールド５Ｃ１１には、ロードバッファ６４のバッファ番号が固定的に設定されている。ベクトルレジスタ番号フィールド５Ｃ１２には、ベクトルロード命令でロードするベクトルデータを格納するベクトルレジスタ６２の番号が設定される。要素数フィールド５Ｃ１３には、ベクトルロード命令でロードされるベクトルデータの要素数が設定される。ライト・ロードカウンタ値フィールド５Ｃ１４には、ベクトルレジスタ番号フィールド５Ｃ１２に設定された番号のベクトルレジスタ６２をライトおよびロードに使用するベクトル命令の数が設定される。リードカウンタ値フィールド５Ｃ１５には、ベクトルレジスタ番号フィールド５Ｃ１２に設定された番号のベクトルレジスタ６２をリードに使用するベクトル命令の数が設定される。
【００２７】
リソース情報登録部５Ｃ２は、命令レジスタ５３の出力と、ライト・ロードカウンタ部５Ａの出力と、リードカウンタ部５Ｂの出力とを入力とする。命令レジスタ５３には、命令デコード部５１でデコードされたベクトル命令がベクトルロード命令であった場合に、命令デコード部５１のデコード情報に加えて信号線１０６を通じてメモリアクセス処理部３から通知された当該ベクトルロード命令に割り当てられたロードバッファ６４の番号が保持されている。リソース情報登録部５Ｃ２は、命令レジスタ５３からロードバッファ番号を入力すると、そのロードバッファ番号をロードバッファ番号フィールド５Ｃ１１に持つレジスタ５Ｃ１−ｉのベクトルレジスタ番号フィールド５Ｃ１２および要素数フィールド５Ｃ１３に、命令レジスタ５３から出力されるベクトルレジスタ番号および要素数を設定する。また、ライト・ロードカウンタ部５Ａのカウンタ５ＡＣのカウント部５Ａ−０〜５Ａ−ｍのうち、ベクトルレジスタ番号フィールド５Ｃ１２に設定したベクトルレジスタ番号に対応するカウント部の内容をライト・ロードカウンタ値フィールド５Ｃ１４に設定し、リードカウンタ部５Ｂのカウンタ５ＢＣのカウント部５Ｂ−０〜５Ｂ−ｍのうち、ベクトルレジスタ番号フィールド５Ｃ１２に設定したベクトルレジスタ番号に対応するカウント部の内容をリードカウンタ値フィールド５Ｃ１５に設定する。そして、ロードバッファ番号フィールド５Ｃ１１のロードバッファ番号、ベクトルレジスタ番号フィールド５Ｃ１２に設定したベクトルレジスタ番号、要素数フィールド５Ｃ１３に設定した要素数を含むベクトルロード命令情報を、信号線１０９を通じてベクトルロード管理部６５に出力する。
【００２８】
リソース情報チェック部５Ｃ３は、命令発行部５８からの通知に応じてレジスタ群５Ｃ１のライト・ロードカウンタ値フィールド５Ｃ１４およびリードカウンタ値フィールド５Ｃ１５を更新し、先行するベクトル命令とベクトルレジスタの競合が生じなくなったタイミングで、信号線１０９を通じてベクトルロード管理部６５に対して、ロードバッファ番号を指定したリソースチェックＯＫ信号を送信する。具体的には、命令発行部５８は、命令発行ステージのレジスタ５２の命令の処理を終了すると、その命令がベクトルレジスタ６２へライトする命令またはベクトルレジスタ６２へデータをロードする命令であった場合、その命令で使用したベクトルレジスタ６２のビジーフラグをリセットするタイミングで、そのベクトルレジスタ６２の番号をロード命令情報管理部５Ｃに通知するようになっており、リソース情報チェック部５Ｃ３は、通知されたベクトルレジスタ番号をベクトルレジスタ番号フィールド５Ｃ１２に持つレジスタのライト・ロードカウンタ値フィールド５Ｃ１４の値を１だけ減算する。また、命令発行部５８は、命令発行ステージのレジスタ５２の命令の処理を終了すると、その命令がベクトルレジスタ６２をリードする命令であった場合、その命令で使用したベクトルレジスタ６２のビジーフラグをリセットするタイミングで、そのベクトルレジスタ６２の番号をロード命令情報管理部５Ｃに通知するようになっており、リソース情報チェック部５Ｃ３は、通知されたベクトルレジスタ番号をベクトルレジスタ番号フィールド５Ｃ１２に持つレジスタのリードカウンタ値フィールド５Ｃ１５の値を１だけ減算する。そして、リソース情報チェック部５Ｃ３は、ライト・ロードカウンタ値フィールド５Ｃ１４の値が１で、且つ、リードカウンタ値フィールド５Ｃ１５の値が０となった場合に、そのレジスタのロードバッファ番号フィールド５Ｃ１１に設定されているロードバッファ番号を指定したリソースチェックＯＫ信号を信号線１０９を通じてベクトルロード管理部６５に送信する。
【００２９】
再び図１を参照すると、ロードバッファ番号管理部５Ｄは、信号線１１０を通じてベクトルロード管理部６５から転送開始通知を受けると、その通知に含まれるロードバッファ６４の番号を保持する。このロードバッファ番号管理部５Ｄは、命令発行ステージの命令レジスタ５２に格納されたベクトルロード命令を処理する際に命令発行部５８によって参照される。なお、ロードバッファ番号管理部５Ｄに記憶されたロードバッファ番号は、そのロードバッファ番号のロードバッファを使うベクトルロード命令が命令発行ステージの命令レジスタ５２に格納されたときに、命令発行部５８によって削除される。
【００３０】
ビジーフラグ群５９は、前述したように、ベクトル演算器６３やベクトルレジスタ６２等の各リソース毎にそのリソースがビジー中かどうかを保持しており、基本的には命令発行部５８が命令発行ステージの命令レジスタ５２に格納された命令を発行する際、その命令で使用するリソースをビジー状態に更新し、その命令の実行が終了した時点でビジー状態を解除する。但し、本実施の形態では、ベクトルロード管理部６５側の判断でロードバッファ６４の内容をベクトルレジスタ６２に転送する動作を開始するため、信号線１１０を通じてベクトルロード管理部６５から送られてくる転送開始通知および転送終了通知によってもビジーフラグ群５９が更新される。具体的には、信号線１１０を通じてベクトルロード管理部６５から転送開始通知を受けると、その通知に含まれるベクトルレジスタ６２の番号で特定されるベクトルレジスタをビジー状態に更新し、信号線１１０を通じてベクトルロード管理部６５から転送終了通知を受けると、その通知に含まれるベクトルレジスタ６２の番号で特定されるベクトルレジスタのビジー状態を解除する。
【００３１】
次に本実施の形態にかかるベクトル処理装置の動作を、ベクトルロード命令の処理を中心に説明する。
【００３２】
命令制御部２の命令解読部２１は、主記憶装置７から信号線１０１を通じて読み出した命令がベクトルロード命令であった場合、そのベクトルロード命令を信号線１０３を通じてメモリアクセス処理部３に送出すると同時に、信号線１０４を通じてベクトル制御部５に送出する。以下の説明の便宜上、上記ベクトルロード命令は、主記憶装置７の開始アドレスＸ、アクセスするベクトルデータの間隔Ｄ、要素数１００、ベクトルデータをロードするベクトルレジスタの番号１をパラメータとして持つベクトルロード命令ＶＬＤ１とする。
【００３３】
メモリアクセス処理部３は、複数存在するロードバッファ６４の内から空き状態の１つのロードバッファを確保し、この確保したロードバッファの番号を指定して、命令制御部２から伝達されたベクトルロード命令ＶＬＤ１にかかるメモリアクセスリクエストを信号線１０５を通じてプロセッサネットワーク部４に発行し、同時に前記確保したロードバッファの番号を信号線１０６を通じてベクトル制御部５へ通知する。今、確保されたロードバッファの番号は０であったものとする。
【００３４】
ベクトル制御部５の命令デコード部５１は、ベクトルロード命令ＶＬＤ１を解読し、ベクトルレジスタ番号１および要素数１００などの解読情報と信号線１０６を通じてメモリアクセス処理部３から通知されたロードバッファ番号０の情報とを命令レジスタ５３に格納する。また、ベクトルロード命令であるため、命令デコード部５１は、ライト・ロードカウンタ部５Ａのカウンタ５ＡＣにおけるベクトルレジスタ番号１に対応するカウント部５Ａ−１の値を＋１する。次に、命令レジスタ５３の内容は命令レジスタ５４に格納されると同時にロード命令情報管理部５Ｃに出力される。ロード命令情報管理部５Ｃのリソース情報登録部５Ｃ２は、命令レジスタ５３からロードバッファ番号０が出力されたため、そのロードバッファ番号０をロードバッファ番号フィールド５Ｃ１１に持つレジスタ５Ｃ１−０のベクトルレジスタ番号フィールド５Ｃ１２および要素数フィールド５Ｃ１３に、命令レジスタ５３から出力されたベクトルレジスタ番号１および要素数１００を設定し、ライト・ロード命令カウンタ部５Ａのカウンタ５ＡＣにおけるベクトルレジスタ番号１に対応するカウント部５Ａ−１の値をライト・ロードカウンタ値フィールド５Ｃ１４に設定し、リード命令カウンタ部５Ｂのカウンタ５ＢＣにおけるベクトルレジスタ番号１に対応するカウント部５Ｂ−１の値をリードカウンタ値フィールド５Ｃ１５に設定する。そして、リソース情報登録部５Ｃ２は、ロードバッファ番号０、ベクトルレジスタ番号１、要素数１００の情報を含むベクトルロード命令情報を信号線１０９を通じてベクトルロード管理部６５に通知する。ベクトルロード管理部６５のレジスタ設定部６５２は、ロードバッファ番号０がロードバッファ番号フィールド６５１１に設定されているレジスタ６５１−０におけるベクトルレジスタ番号フィールド６５１２にベクトルレジスタ番号１を設定し、ライト要素数フィールド６５１４およびリード要素数フィールド６５１５に要素数１００を設定し、リソースチェックフラグフィールド６５１３のフラグは値１とする。
【００３５】
ここで、ロード命令情報管理部５Ｃのレジスタ５Ｃ１−０のライト・ロードカウンタ値フィールド５Ｃ１４の値とリードカウンタ値フィールド５Ｃ１５の値とがどのような値になるかは、ベクトルロード命令ＶＬＤ１に先行する仕掛かり中のベクトル命令の種類や数によって決定され、大別すると以下のようなケースに分けられる。
【００３６】
（１）ケース１：ベクトルロード命令ＶＬＤ１が使用するベクトルレジスタと先行命令が使用するベクトルレジスタとが競合しない場合。このときは、ライト・ロードカウンタ値フィールド５Ｃ１４の値は１、リードカウンタ値フィールド５Ｃ１５の値は０になる。
（２）ケース２：ベクトルロード命令ＶＬＤ１が使用するベクトルレジスタと先行命令が使用するベクトルレジスタとが競合する場合。このときは、ベクトルロード命令ＶＬＤ１が使用するベクトルレジスタをライトに使う仕掛かり中のベクトル命令の数をａとすると、ライト・ロードカウンタ値フィールド５Ｃ１４の値はａ＋１であり、ベクトルロード命令ＶＬＤ１が使用するベクトルレジスタをリードに使う仕掛かり中のベクトル命令の数をｂとすると、リードカウンタ値フィールド５Ｃ１５の値はｂである。なお、メモリアクセス処理部３は同じロードバッファ６４を複数のベクトルロード命令に同時に割り当てることがないので、ベクトルロード命令ＶＬＤ１に先行するベクトルロード命令が仕掛かり中であっても、ライト・ロードカウンタ値フィールド５Ｃ１４の値に影響はない。
【００３７】
ケース１の場合、ロード命令情報管理部５Ｃのリソース情報チェック部５Ｃ３は、リソース情報登録部５Ｃ２が登録したレジスタ５Ｃ１−０のライト・ロードカウンタ値フィールド５Ｃ１４の値が１で、且つ、リードカウンタ値フィールド５Ｃ１５の値が０なので、ベクトルロード命令ＶＬＤ１のリソースは仕掛かり中の他のベクトル命令と競合しないと判定し、ロードバッファ番号０を指定したリソースチェックＯＫ信号を信号線１０９を通じてベクトルロード管理部６５に通知する。他方、ケース２の場合、リソース情報チェック部５Ｃ３は、リソース情報登録部５Ｃ２が登録したレジスタ５Ｃ１−０のライト・ロードカウンタ値フィールド５Ｃ１４の値が１になり、且つ、リードカウンタ値フィールド５Ｃ１５の値が０になるのを監視する。ベクトル制御部５においてベクトルロード命令ＶＬＤ１に先行する仕掛かり中のベクトル命令の実行が終了する毎に、命令発行部５８からの通知に応じてリソース情報チェック部５Ｃ３はライト・ロードカウンタ値フィールド５Ｃ１４の値およびリードカウンタ値フィールド５Ｃ１５の値を減算する。そして、レジスタ５Ｃ１−０のライト・ロードカウンタ値フィールド５Ｃ１４の値が１になり、且つ、リードカウンタ値フィールド５Ｃ１５の値が０になると、リソース情報チェック部５Ｃ３は、ベクトルロード命令ＶＬＤ１のリソースは仕掛かり中の他のベクトル命令と競合しないと判定し、ロードバッファ番号０を指定したリソースチェックＯＫ信号を信号線１０９を通じてベクトルロード管理部６５に通知する。
【００３８】
ベクトルロード管理部６５のレジスタ設定部６５２は、通知されたロードバッファ番号０をロードバッファ番号フィールド６５１１に持つレジスタ６５１−０のリソースチェックフラグフィールド６５１３のフラグ値を１から０に変更する。
【００３９】
プロセッサネットワーク部４は、メモリアクセス処理部３から発行されたメモリアクセスリクエストに応じて、主記憶装置７の開始アドレスＸの要素、開始アドレス＋距離Ｄのアドレスの要素、…、最後の要素を順次読み出し、ロードバッファ番号０を添えて信号線１０８経由でベクトルロード管理部６５に送出する。ベクトルロード管理部６５のライト部６５３は、受信した各要素をロードバッファ番号０のロードバッファ６４に格納し、ロードバッファ番号０がロードバッファ番号フィールド６５１１に設定されているレジスタ６５１−０のライト要素数フィールド６５１４の値を順次減算していく。１００要素全てのデータがロードバッファ番号０のロードバッファ６４に格納された時点で、ライト要素数フィールド６５１４の値は０となる。
【００４０】
リード部６５４は、レジスタ６５１−０のライト要素数フィールド６５１４の値が０になったことで全要素がロードバッファ６４に格納されたことを認識し、リソースチェックフラグフィールド６５１３のフラグの値が０か１かを判定する。１であれば０になるのを待ち、０であれば或いは０になれば、クロスバスイッチ回路６６との間のパスが空いていれば直ちに、空いていなければ空き次第、ロードバッファ番号０およびベクトルレジスタ番号１を指定した転送開始通知を信号線１１０を通じてベクトル制御部５に送出する。ベクトル制御部５のロードバッファ番号管理部５Ｄは、ロードバッファ番号０を保持し、ビジーフラグ群５９は、ベクトルレジスタ番号１のベクトルレジスタをビジー状態として管理する。リード部６５４は、転送開始通知を行うと同時にロードバッファ番号０のロードバッファ６４の内容をクロスバスイッチ回路６６を通じてベクトルレジスタ番号１のベクトルレジスタ６２に転送する処理を開始する。
【００４１】
リード部６５４は、１要素を転送する毎に、レジスタ６５１−０のリード要素数フィールド６５１５の値を１だけ減算していき、リード要素数フィールド６５１５の値が０になった時点で転送を終了し、ロードバッファ番号０とベクトルレジスタ番号１を指定した転送終了通知を信号線１１０を通じてベクトル制御部５に送出すると同時に、ロードバッファ番号０を指定したバッファ解放通知を信号線１０７を通じてメモリアクセス処理部３に送出する。ベクトル制御部５のビジーフラグ群５９は、ベクトルレジスタ番号１のベクトルレジスタのビジー状態を解除する。また、メモリアクセス処理部３は、通知されたロードバッファ番号０のロードバッファを空き状態として管理する。
【００４２】
ベクトル制御部５において、ベクトルロード命令ＶＬＤ１は、命令レジスタ５４に格納された後、以降の各ステージで処理され、最終的に命令発行ステージの命令レジスタ５２に格納される。命令発行部５８は、命令レジスタ５２に格納されたベクトルロード命令ＶＬＤ１が使用するロードバッファの番号０（これは命令レジスタ５３から順次持ち回って命令レジスタ５２に保持されている）とロードバッファ番号管理部５Ｄに記憶されているロードバッファ番号とを比較し、ロードバッファ番号管理部５Ｄにロードバッファ番号０が格納されていなければ格納されるのを待ち合わせ、既に格納されているか、待ち合わせ中に格納されたら、ベクトルロード命令ＶＬＤ１の命令発行を行わずにその命令の処理を終了し、ロードバッファ番号０をロードバッファ番号管理部５Ｄから削除する。このように命令発行部５８がベクトルロード命令ＶＬＤ１の命令発行を行わない理由は、ベクトルロード命令ＶＬＤ１が使用するリソースが先行命令のリソースと競合しなくなり、且つ、ベクトルデータの全要素がロードバッファに格納されると、ベクトルロード管理部６５によってベクトルレジスタへの転送が起動されるため、ベクトルロード命令ＶＬＤ１の命令発行処理をあえて命令発行部５８が行う必要がないからである。
【００４３】
このように本実施の形態によれば、ベクトルロード命令ＶＬＤ１が命令発行ステージの命令レジスタ５２に到着するのを待たずに、バッファ番号０のロードバッファ６４からレジスタ番号１のベクトルレジスタ６２への転送を開始できるため、レジスタ番号１のベクトルレジスタ６２を使用する後続のベクトル命令の処理を早めることができると共に、バッファ番号０のロードバッファ６４の解放を早め、処理効率を高めることができる。
【００４４】
以上の説明では、１つのベクトルロード命令ＶＬＤ１に着目したが、複数のベクトルロード命令が連続する場合でも同様の動作が行われる。この場合、本実施の形態では、ベクトルロード命令が命令発行ステージに到着した順でなく、ロードバッファに全要素が揃い且つリソースの競合がなくなった順にベクトルレジスタへの転送が起動されるため、先行するベクトルロード命令よりも先に後続のベクトルロード命令のベクトルデータをベクトルレジスタへ転送することも可能となる。例えば、先行するベクトルロード命令ＶＬＤ１が、自命令で使用するベクトルレジスタを使用する仕掛かり中の先行ベクトル命令の終了を待ち合わせているか、或いは要素数が多いためにロードバッファに全要素が格納されるのを待ち合わせている間に、後続のベクトルロード命令ＶＬＤ２の全要素がロードバッファに格納され且つベクトルロード命令ＶＬＤ２が使用するベクトルレジスタが先行する仕掛かり中のベクトル命令のリソースと競合しない状況に至ると、ベクトルロード管理部６５のリード部６５４は、ベクトルロード命令ＶＬＤ１より先にベクトルロード命令ＶＬＤ２について、ロードバッファからベクトルレジスタへの転送を開始する。
【図面の簡単な説明】
【００４５】
【図１】本発明の実施の形態のブロック図である。
【図２】ベクトルロード管理部の構成例を示すブロック図である。
【図３】ライト・ロードカウンタ部、リードカウンタ部およびロード命令情報管理部の構成例を示すブロック図である。
【符号の説明】
【００４６】
１…プロセッサ
２…命令制御部
３…メモリアクセス処理部
４…プロセッサネットワーク部
５…ベクトル制御部
６…ベクトル処理部
７…主記憶装置
【図１】
0003726092.tif 000002
【図２】
0003726092.tif 000003
【図３】
0003726092.tif 000004