(57)【特許請求の範囲】
【請求項１】
分岐命令における分岐先の分岐予測に基づき、主記憶装置から読み出されたベクトルロード命令を発行する命令発行部と、
前記発行されたベクトルロード命令に基づく複数のベクトルデータを前記主記憶装置から取得するための複数の取得要求の発行を開始するデータ取得部と、
前記ベクトルロード命令に基づくベクトル演算に用いられるベクトルデータを保持するベクトルレジスタと、
前記分岐命令による分岐先が確定した後に、前記分岐予測の成否を判定する判定部と、
前記判定部により、前記分岐予測が成功したと判定された場合、前記複数の取得要求に基づく全てのベクトルデータを取得し終えた後に、前記ベクトルレジスタに対して当該全てのベクトルデータを転送し、前記分岐予測が失敗したと判定された場合、前記データ取得部により発行された取得要求により取得されたベクトルデータを廃棄するベクトルロード管理部と、
を備え、
前記発行されたベクトルロード命令以前に複数の分岐命令が存在し、
前記ベクトルロード管理部は、前記分岐予測の成否の判定結果を記憶するための記憶部を備え、
前記判定結果は、分岐先が未確定である分岐命令数を示す分岐情報と、前記分岐予測が失敗したことを示す予測失敗情報とからなり、
前記命令発行部は、前記ベクトルロード命令を発行する際に、当該ベクトルロード命令以前の分岐命令数を前記ベクトルロード管理部へ通知し、
前記判定部は、前記複数の分岐命令のそれぞれに対応する分岐先が確定する度に、前記分岐予測の成否を判定し、
前記ベクトルロード管理部は、
前記命令発行部から通知された分岐命令数を前記分岐情報として前記記憶部へ格納し、
前記判定部により前記分岐予測の成否が判定される度に、前記記憶部に記憶された判定結果を更新し、
前記判定部により前記分岐予測が成功したと判定された場合、前記記憶部に格納された分岐情報を減算し、
前記判定部により前記分岐予測が失敗したと判定された場合、前記記憶部に格納された予測失敗情報を有効と更新し、
前記判定部により全ての分岐命令における前記分岐予測の判定が完了し、かつ、前記全てのベクトルデータを取得し終えた後に、前記記憶部に記憶された前記分岐情報が０であり、かつ、前記予測失敗情報が無効である場合に、前記全てのベクトルデータを転送し、
前記予測失敗情報が有効である場合に、前記データ取得部により発行された取得要求により取得されたベクトルデータを廃棄する、
プロセッサ。
【請求項２】
前記ベクトルロード管理部は、
前記複数の取得要求により取得された複数のベクトルデータを保持するロードバッファをさらに備え、
前記取得要求によりベクトルデータが取得される度に、当該取得されたベクトルデータを前記ロードバッファへ格納し、
前記判定部により前記分岐予測が成功したと判定された場合、前記ロードバッファに格納された全てのベクトルデータを、前記ベクトルレジスタへ転送し、その後、当該ロードバッファを解放し、
前記判定部により前記分岐予測が失敗したと判定された場合、前記ロードバッファを解放する
ことを特徴とする請求項１に記載のプロセッサ。
【請求項３】
前記ベクトルロード管理部は、
前記判定部により前記分岐予測が失敗したと判定された以後に、前記データ取得部による未発行の取得要求の発行を停止する
ことを特徴とする請求項２に記載のプロセッサ。
【請求項４】
プロセッサが、
分岐命令における分岐先の分岐予測に基づき、主記憶装置から読み出されたベクトルロード命令を発行し、
前記発行されたベクトルロード命令に基づく複数のベクトルデータを前記主記憶装置から取得するための複数の取得要求の発行を開始し、
前記分岐命令による分岐先が確定した後に、前記分岐予測の成否を判定し、
前記分岐予測が成功したと判定された場合、前記複数の取得要求に基づく全てのベクトルデータを取得し終えた後に、前記ベクトルロード命令に基づくベクトル演算に用いられるベクトルレジスタに対して当該全てのベクトルデータを転送し、
前記分岐予測が失敗したと判定された場合、前記発行された取得要求により取得されたベクトルデータを廃棄するベクトルロード命令の実行方法であって、
前記発行されたベクトルロード命令以前に複数の分岐命令が存在し、
前記プロセッサは、前記分岐予測の成否の判定結果を記憶するための記憶部を備え、
前記判定結果は、分岐先が未確定である分岐命令数を示す分岐情報と、前記分岐予測が失敗したことを示す予測失敗情報とからなり、
前記プロセッサが、
前記ベクトルロード命令を発行する際に、当該ベクトルロード命令以前の分岐命令数を通知し、
前記通知された分岐命令数を前記分岐情報として前記記憶部へ格納し、
前記複数の分岐命令のそれぞれに対応する分岐先が確定する度に、前記分岐予測の成否を判定し、
前記分岐予測の成否が判定される度に、前記記憶部に記憶された判定結果を更新し、
前記分岐予測が成功したと判定された場合、前記記憶部に格納された分岐情報を減算し、
前記分岐予測が失敗したと判定された場合、前記記憶部に格納された予測失敗情報を有効と更新し、
全ての分岐命令における前記分岐予測の判定が完了し、かつ、前記全てのベクトルデータを取得し終えた後に、前記記憶部に記憶された前記分岐情報が０であり、かつ、前記予測失敗情報が無効である場合に、前記全てのベクトルデータを転送し、
前記予測失敗情報が有効である場合に、前記取得要求により取得されたベクトルデータを廃棄する、
ベクトルロード命令の実行方法。
【請求項５】
前記プロセッサが、
前記取得要求によりベクトルデータが取得される度に、前記複数の取得要求により取得された複数のベクトルデータを保持するロードバッファへ、当該取得されたベクトルデータを格納し、
前記分岐予測が成功したと判定された場合、前記ロードバッファに格納された全てのベクトルデータを、前記ベクトルレジスタへ転送し、その後、当該ロードバッファを解放し、
前記分岐予測が失敗したと判定された場合、前記ロードバッファを解放する
ことを特徴とする請求項４に記載のベクトルロード命令の実行方法。
【請求項６】
前記プロセッサが、
前記分岐予測が失敗したと判定された以後に、未発行の前記取得要求の発行を停止する
ことを特徴とする請求項５に記載のベクトルロード命令の実行方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、プロセッサ及びベクトルロード命令の実行方法に関し、特に、ベクトルロード命令を投機的に実行するためのプロセッサ及びベクトルロード命令の実行方法に関する。
【背景技術】
【０００２】
一般に、ベクトル処理装置は、複数のベクトルレジスタと、ベクトル演算器とを備える。ここで、複数のベクトルレジスタは、主記憶装置からロードしたベクトルデータやベクトル演算中の中間結果などを保持する。また、ベクトル演算器は、ベクトルレジスタに保持されたベクトルデータに対する演算を行う。そして、上述したベクトル処理装置は、複数のベクトルレジスタとベクトル演算器とにより、大量のデータを高速に演算することができるようになっている。
【０００３】
また、一般的に、主記憶装置のアクセス速度は、ベクトル演算の速度に比べて遅い。そのため、上述したベクトル処理装置は、ベクトルデータのベクトルレジスタへのロードを高速化するために、主記憶装置とベクトルレジスタとの間にベクトルデータを一時的に格納するロードバッファを備えている。そして、上述したベクトル処理装置は、ベクトルロード命令の解読時に主記憶装置からロードバッファへのベクトルデータの読み出しを開始させている。
【０００４】
そして、特許文献１には、ロードバッファからベクトルレジスタへの転送を命令発行順でなく、ロードバッファに全要素が揃い、かつ、転送先のベクトルレジスタがビジー状態でないという条件が成立した順に実行することのできるベクトル処理装置に関する技術が開示されている。
【０００５】
特許文献１にかかるベクトル処理装置におけるベクトルロード命令の実行方法は、以下の流れである。まず、ベクトル処理装置は、ベクトルロードデータを一時的に格納するロードバッファの確保を行う。次に、ベクトル処理装置は、メモリアクセスを行う。そして、ベクトル処理装置は、メモリから受信されるベクトルデータの全要素をロードバッファに格納する。続いて、ベクトル処理装置は、ベクトルレジスタにデータの転送を行う。その後、ベクトル処理装置は、後続のベクトル命令を実行する。
【０００６】
また、一般に、パイプライン処理における分岐命令後のスカラ命令については、当該分岐命令における分岐先を予測する分岐予測処理を行うことで、パイプライン処理を効率的に行うことができる。その場合、分岐予測に基づく分岐先のスカラ命令を投機的に実行し、分岐予測に成功した場合には、当該投機的に実行されたスカラ命令を継続して実行することができ、処理の待ち時間を減らすことができる。また、仮に、分岐予測に失敗した場合であっても、新たに正しい分岐先を実行し直すことで正しい結果を得ることができる。
【先行技術文献】
【特許文献】
【０００７】
【特許文献１】特許第３７２６０９２号公報
【発明の概要】
【発明が解決しようとする課題】
【０００８】
しかしながら、分岐命令後のベクトルロード命令について、単純に投機的な実行をすると、分岐予測に失敗した場合に、後続のベクトル命令が誤って使用してしまう可能性がある。例えば、投機的にベクトルロード命令を発行した場合、メモリアクセスによって得られたベクトルデータをロードバッファに格納後、例え、分岐予測に失敗した場合であっても、投機的な実行により取得されたベクトルデータがベクトルレジスタに転送されてしまう。
【０００９】
そのため、例えば、特許文献１にかかるベクトル処理装置において、分岐命令より後のベクトルロード命令を実行するには、分岐命令における分岐先の確定を待つ必要があった。つまり、特許文献１では、投機的にベクトルロード命令を実行することができず、メモリアクセスのレイテンシ分だけ性能が低下するという問題点があった。
【００１０】
本発明は、このような問題点を解決するためになされたものであり、ベクトルロード命令を投機的に実行して、メモリアクセスのレイテンシを隠蔽するためのプロセッサ及びベクトルロード命令の実行方法を提供することを目的とする。
【課題を解決するための手段】
【００１１】
本発明の第１の態様にかかるプロセッサは、分岐命令における分岐先の分岐予測に基づき、主記憶装置から読み出されたベクトルロード命令を発行する命令発行部と、前記発行されたベクトルロード命令に基づく複数のベクトルデータを前記主記憶装置から取得するための複数の取得要求の発行を開始するデータ取得部と、前記ベクトルロード命令に基づくベクトル演算に用いられるベクトルデータを保持するベクトルレジスタと、前記分岐命令による分岐先が確定した後に、前記分岐予測の成否を判定する判定部と、前記判定部により、前記分岐予測が成功したと判定された場合、前記複数の取得要求に基づく全てのベクトルデータを取得し終えた後に、前記ベクトルレジスタに対して当該全てのベクトルデータを転送し、前記分岐予測が失敗したと判定された場合、前記データ取得部により発行された取得要求により取得されたベクトルデータを廃棄するベクトルロード管理部と、を備える。
【００１２】
本発明の第２の態様にかかるベクトルロード命令の実行方法は、分岐命令における分岐先の分岐予測に基づき、主記憶装置から読み出されたベクトルロード命令を発行し、前記発行されたベクトルロード命令に基づく複数のベクトルデータを前記主記憶装置から取得するための複数の取得要求の発行を開始し、前記分岐命令による分岐先が確定した後に、前記分岐予測の成否を判定し、前記分岐予測が成功したと判定された場合、前記複数の取得要求に基づく全てのベクトルデータを取得し終えた後に、前記ベクトルロード命令に基づくベクトル演算に用いられるベクトルレジスタに対して当該全てのベクトルデータを転送し、前記分岐予測が失敗したと判定された場合、前記発行された取得要求により取得されたベクトルデータを廃棄する。
【発明の効果】
【００１３】
本発明により、ベクトルロード命令を投機的に実行して、メモリアクセスのレイテンシを隠蔽するためのプロセッサ及びベクトルロード命令の実行方法を提供することができる。
【図面の簡単な説明】
【００１４】
【図１】本発明の実施の形態１にかかるプロセッサの構成を示すブロック図である。
【図２】本発明の実施の形態１にかかるベクトルロード命令の実行方法の処理の流れを示すフローチャートである。
【図３】本発明の実施の形態２にかかるベクトル処理装置の構成を示すブロック図である。
【図４】本発明の実施の形態２にかかる命令制御部の動作を説明するためのフローチャートである。
【図５】本発明の実施の形態２にかかるベクトルロード管理部の構成の一例を示すブロック図である。
【図６】本発明の実施の形態２にかかるレジスタ設定部の動作を説明するためのフローチャートである。
【図７】本発明の実施の形態２にかかるライト部の動作を説明するためのフローチャートである。
【図８】本発明の実施の形態２にかかるベクトル処理装置の動作を説明するためのフローチャートである。
【図９】本発明の実施の形態３にかかるベクトルロード管理部の構成の一例を示すブロック図である。
【図１０】本発明の実施の形態３にかかるレジスタ設定部の動作を説明するためのフローチャートである。
【図１１】本発明の実施の形態３にかかるライト部の動作を説明するためのフローチャートである。
【発明を実施するための形態】
【００１５】
以下では、本発明を適用した具体的な実施の形態について、図面を参照しながら詳細に説明する。各図面において、同一要素には同一の符号が付されており、説明の明確化のため、必要に応じて重複説明は省略する。
【００１６】
＜発明の実施の形態１＞
図１は、本発明の実施の形態１にかかるプロセッサ１０の構成を示すブロック図である。プロセッサ１０は、パイプライン処理に基づき、主記憶装置７から各種命令を読み出し、当該命令を実行する。主記憶装置７は、例えば、ＲＡＭ（Random Access Memory）等の記憶装置である。プロセッサ１０は、少なくとも命令発行部１１と、データ取得部１２と、判定部１３と、ベクトルロード管理部１４と、ベクトルレジスタ１５とを備える。
【００１７】
命令発行部１１は、分岐命令における分岐先の分岐予測に基づき、主記憶装置７から読み出されたベクトルロード命令を発行する。データ取得部１２は、発行されたベクトルロード命令に基づく複数のベクトルデータを主記憶装置７から取得するための複数の取得要求の発行を開始する。ベクトルレジスタ１５は、ベクトルロード命令に基づくベクトル演算に用いられるベクトルデータを保持する。判定部１３は、分岐命令による分岐先が確定した後に、分岐予測の成否を判定する。ベクトルロード管理部１４は、判定部１３により分岐予測が成功したと判定された場合、複数の取得要求に基づく全てのベクトルデータを取得し終えた後に、ベクトルレジスタ１５に対して当該全てのベクトルデータを転送する。また、ベクトルロード管理部１４は、判定部１３により分岐予測が失敗したと判定された場合、データ取得部１２により発行された取得要求により取得されたベクトルデータを廃棄する。
【００１８】
図２は、本発明の実施の形態１にかかるベクトルロード命令の実行方法の処理の流れを示すフローチャートである。まず、命令発行部１１は、分岐予測に基づくベクトルロード命令を発行する（Ｓ１１）。すなわち、命令発行部１１は、事前に、主記憶装置７から読み出した分岐命令について、分岐先を予測する。そして、命令発行部１１は、当該予測した分岐先に基づき、主記憶装置７から命令を読み出す。ここでは、読み出された命令がベクトルロード命令であるものとする。
【００１９】
次に、データ取得部１２は、ベクトルデータの取得要求を発行する（Ｓ１２）。ここでは、ベクトルロード命令に指定された複数のベクトルデータのうち一部を主記憶装置７から取得するための取得要求が発行される。その後、データ取得部１２は、当該取得要求のリプライとしてベクトルデータを取得する（Ｓ１３）。
【００２０】
続いて、データ取得部１２は、ベクトルロード命令に指定された全てのベクトルデータが取得済みか否かを判定する（Ｓ１４）。未取得のベクトルデータが存在する場合、ステップＳ１２へ進む。そして、全てのベクトルデータが取得済みとなった場合、ステップＳ１５へ進む。
【００２１】
ここで、判定部１３は、分岐予測の成否を判定する（Ｓ１５）。尚、判定部１３は、上述した分岐命令による分岐先が確定した後であれば、ステップＳ１２乃至Ｓ１４と並行して判定しても構わない。
【００２２】
ステップＳ１５において、分岐予測が成功したと判定された場合、ベクトルロード管理部１４は、取得されたベクトルデータをベクトルレジスタ１５へ転送する（Ｓ１６）。一方、ステップＳ１５において、分岐予測が失敗したと判定された場合、ベクトルロード管理部１４は、取得されたベクトルデータを廃棄する（Ｓ１７）。つまり、この場合、ベクトルロード管理部１４は、ベクトルレジスタ１５への転送を行わない。
【００２３】
このように、本発明の実施の形態１により、ステップＳ１１において投機的に実行されたベクトルロード命令について、分岐予測が成功した場合には、遅滞なく後続の処理を進めることができる。また、分岐予測が失敗した場合であっても、投機的に実行されたベクトルロード命令により取得されたベクトルデータを廃棄し、後続の処理対象から除外するため、誤ったデータによるベクトル命令を実行させることがない。つまり、処理結果の正確性を保つことができる。そのため、ベクトルロード命令を投機的に実行して、メモリアクセスのレイテンシを隠蔽することができる。
【００２４】
＜発明の実施の形態２＞
図３は、本発明の実施の形態２にかかるベクトル処理装置の構成を示すブロック図である。本発明の実施の形態２にかかるベクトル処理装置は、プロセッサ１と、主記憶装置７とを含む。
【００２５】
プロセッサ１と主記憶装置７とは、信号線１０１と、信号線１０２とによって相互に接続されている。信号線１０１は、主記憶装置７に記憶された命令をプロセッサ１から読み出すための信号線である。また、信号線１０２は、主記憶装置７に記憶されたベクトルデータ等をプロセッサ１からの読み出しや、プロセッサ１で生成したベクトルデータ等を主記憶装置７に書き込むための信号線である。尚、信号線１０２を多重化することで、複数のベクトルロード命令による主記憶装置７からのベクトルデータの読出し等を並列に行う事もできる。
【００２６】
プロセッサ１は、命令制御部２と、メモリアクセス処理部３と、プロセッサネットワーク部４と、ベクトル制御部５と、ベクトル処理部６とを含む。
【００２７】
命令制御部２は、主記憶装置７と信号線１０１で接続され、メモリアクセス処理部３と信号線１０３で接続され、ベクトル制御部５と信号線１０４で接続されている。また、命令制御部２は、命令解読部２１と、スカラ処理部２２とを備える。命令解読部２１は、信号線１０１を通じて主記憶装置７から読み出した命令を解読する。また、スカラ処理部２２は、解読された命令がスカラ命令である場合に、当該スカラ命令にかかる処理を実行する。
【００２８】
命令解読部２１は、例えば、内部のレジスタ（不図示）等に、予め分岐レベルを保持しているものとする。分岐レベルとは、読み出された命令が、何個目の分岐命令の後の命令であるかを示すものである。尚、ここでは、分岐レベルの初期値を"０"とする。つまり、分岐レベルが"０"である場合は、当該命令は、分岐命令の外にあることを示す。また、分岐レベルが"１"である場合は、当該命令は、分岐命令の後であることを示す。さらに、分岐レベルが"２"以上である場合は、当該命令は、複数の分岐命令の後であることを示す。
【００２９】
また、命令解読部２１は、解読した命令がスカラ命令である場合、当該スカラ命令をスカラ処理部２２へ出力する。さらに、命令解読部２１は、解読した命令がスカラ命令のうち条件分岐命令である場合、当該条件分岐命令における分岐先を予測する。そして、命令解読部２１は、信号線１０１を通じて主記憶装置７から、当該予測した分岐先を次の命令として読み出す。ここで、命令解読部２１は、以降の命令の分岐レベルに、例えば"１"を加算する。また、命令解読部２１は、当該条件分岐命令における分岐先が確定し、予測した分岐先が正しかった場合、つまり、分岐予測に成功した場合、には、分岐レベルを"１"減算する。一方、命令解読部２１は、分岐予測に失敗した場合、分岐レベルが"１"以上の命令を廃棄する。
【００３０】
そして、命令解読部２１は、解読した命令がベクトル命令である場合には、そのベクトル命令を信号線１０４によりベクトル制御部５に出力する。更に、命令解読部２１は、前記ベクトル命令がベクトルロード命令である場合は、信号線１０３を通じてメモリアクセス処理部３に対して当該ベクトルロード命令を出力する。ここで、ベクトルロード命令には、ロードするベクトルデータの主記憶装置７のアドレスを特定する情報（例えば開始アドレスとベクトルデータの間隔）、ベクトルデータの要素数、ベクトルデータをロードするベクトルレジスタの番号等が含まれている。特に、命令解読部２１は、当該ベクトルロード命令に上述した分岐レベルを含めて出力する。
【００３１】
また、スカラ処理部２２は、命令解読部２１により解読されたスカラ命令が条件分岐命令である場合、当該条件分岐命令を実行し、分岐先を確定し、確定した分岐先が命令解読部２１により予測した分岐先と等しいか否かを判定する。予測した分岐先と等しいと判定した場合、スカラ処理部２２は、分岐予測結果を成功とする。また、予測した分岐先と等しくないと判定した場合、スカラ処理部２２は、分岐予測結果を失敗とする。そして、スカラ処理部２２は、信号線１０３を通じてメモリアクセス処理部３へ当該分岐予測結果を出力する。
【００３２】
ここで、図４のフローチャートを用いて、本発明の実施の形態２にかかる命令制御部２の動作を説明する。まず、命令解読部２１は、主記憶装置７から命令を読み出す（Ｓ２０１）。ここでは、読み出した命令がスカラ命令であるものとする。次に、命令解読部２１は、読み出した命令が条件分岐命令であるか否かを判定する（Ｓ２０２）。読み出した命令が条件分岐命令であると判定した場合、命令解読部２１は、分岐レベルに"１"を加算する（Ｓ２０３）。そして、命令解読部２１は、当該条件分岐命令による分岐先について分岐予測を行う（Ｓ２０４）。
【００３３】
その後、スカラ処理部２２は、当該条件分岐命令を実行する（Ｓ２０５）。そして、スカラ処理部２２は、分岐先を確定する（Ｓ２０６）。ここで、スカラ処理部２２は、分岐予測した分岐先と確定した分岐先とが一致するか否かを判定する（Ｓ２０７）。一致すると判定した場合、スカラ処理部２２は、分岐予測結果に"成功"を設定する（Ｓ２０８）。そして、スカラ処理部２２は、メモリアクセス処理部３に対して分岐予測結果を出力する（Ｓ２０９）。このとき、命令解読部２１は、分岐レベルを"１"減算する（Ｓ２１０）。
【００３４】
また、ステップＳ２０７において、一致しないと判定した場合、スカラ処理部２２は、分岐予測結果に"失敗"を設定する（Ｓ２１１）。そして、スカラ処理部２２は、メモリアクセス処理部３に対して分岐予測結果を出力する（Ｓ２１２）。このとき、命令解読部２１は、分岐レベルが"１"以上の命令を廃棄する（Ｓ２１３）。
【００３５】
また、ステップＳ２０４の後、スカラ処理部２２と並行して、命令解読部２１は、分岐予測に基づく分岐先から命令を読み出す（Ｓ２１４）。そして、命令解読部２１は、読み出した命令がベクトルロード命令であるか否かを判定する（Ｓ２１５）。ベクトルロード命令であると判定した場合、命令解読部２１は、ステップＳ２０３により算出された分岐レベルを含めて当該ベクトルロード命令をメモリアクセス処理部３へ出力する（Ｓ２１６）。
【００３６】
ステップＳ２０２において、読み出した命令が条件分岐命令ではないと判定した場合、又は、ステップＳ２１５において、読み出した命令がベクトルロード命令ではないと判定した場合、命令解読部２１及びスカラ処理部２２は、命令に応じた通常の処理を行う（Ｓ２１７）。
【００３７】
このように、命令解読部２１は、条件分岐命令について予測した分岐先がベクトルロード命令であっても、当該ベクトルロード命令を主記憶装置７から読み出す。そのため、ベクトル処理部６は、メモリアクセス処理部３及びベクトル制御部５を経由して当該ベクトルロード命令を受け付け、当該ベクトルロード命令を投機的に実行することとなる。これにより、ベクトル処理部６は、投機的に実行しているベクトルロード命令について、分岐予測結果に応じた処理を行うことができる。
【００３８】
図３に戻って説明する。メモリアクセス処理部３は、命令制御部２と信号線１０３で接続され、プロセッサネットワーク部４と信号線１０５で接続され、ベクトル制御部５と信号線１０６で接続され、ベクトル処理部６と信号線１０７で接続されている。また、メモリアクセス処理部３は、主記憶装置７へのアクセスを制御する部分である。
【００３９】
すなわち、メモリアクセス処理部３は、信号線１０３を通じて命令制御部２から送られてくるメモリアクセスにかかる命令を解読する。同時に、メモリアクセス処理部３は、プロセッサネットワーク部４の状態を管理する。そのため、メモリアクセス処理部３は、信号線１０５を通じてメモリアクセスリクエストを制御する信号をプロセッサネットワーク部４に送る。これにより、メモリアクセス処理部３は、プロセッサネットワーク部４における主記憶装置７との信号線１０２を介したデータの行き来と、ベクトル処理部６との信号線１０８を介したデータの行き来とを制御する。
【００４０】
また、メモリアクセス処理部３は、ロードバッファ管理部３１を備える。ロードバッファ管理部３１は、ベクトルロード命令に関して、ベクトル処理部６内に設けられている複数のロードバッファ６４の使用状態の管理を行う。
【００４１】
具体的には、まず、メモリアクセス処理部３は、命令制御部２から信号線１０３を通じてベクトルロード命令を受信する。次に、ロードバッファ管理部３１は、当該ベクトルロード命令用に空き状態の１つのロードバッファを割り当てる。つまり、ロードバッファ管理部３１は、当該割り当てたロードバッファを使用中状態として管理する。このとき、メモリアクセス処理部３は、受信したベクトルロード命令に関する情報、特に分岐レベルを、信号線１０６を通じてベクトル制御部５へ出力する。また、メモリアクセス処理部３は、命令制御部２から分岐予測結果を受信した場合に、信号線１０６を通じてベクトル制御部５へ当該分岐予測結果を出力する。
【００４２】
そして、メモリアクセス処理部３は、信号線１０５を通じてプロセッサネットワーク部４に対して、メモリアクセスリクエストを発行する。このとき、メモリアクセス処理部３は、当該発行するメモリアクセスリクエストに、割り当てたロードバッファを一意に識別するバッファ番号を付随する。
【００４３】
同時に、メモリアクセス処理部３は、どのベクトルロード命令に対してどのバッファ番号のロードバッファを割り当てたかを信号線１０６を通じてベクトル制御部５に通知する。言い換えると、メモリアクセス処理部３は、ベクトルロード命令とロードバッファとの対応関係をベクトル制御部５に通知する。
【００４４】
また、メモリアクセス処理部３は、信号線１０７を通じてベクトル処理部６からバッファ番号を指定したバッファ解放通知を受ける。このとき、メモリアクセス処理部３は、そのバッファ番号のロードバッファ６４を再び空き状態として管理する。
【００４５】
ベクトル制御部５は、命令制御部２と信号線１０４で接続され、メモリアクセス処理部３と信号線１０６で接続され、ベクトル処理部６と信号線１０９及び１１０で接続されている。そして、ベクトル制御部５は、ベクトル命令の発行制御を行う。
【００４６】
特に、ベクトル制御部５は、信号線１０６を通じてメモリアクセス処理部３から受け付けたベクトルロード命令に関する情報、特に分岐レベルを、信号線１０９を通じてベクトル処理部６へ出力する。また、ベクトル制御部５は、メモリアクセス処理部３から受け付けた分岐予測結果を、信号線１０９を通じてベクトル処理部６へ出力する。
【００４７】
尚、ベクトル制御部５のその他の具体的な構成は、例えば、特許文献１に開示されたものを用いても構わない。
【００４８】
プロセッサネットワーク部４は、主記憶装置７と信号線１０２で接続され、メモリアクセス処理部３と信号線１０５で接続され、ベクトル処理部６と信号線１０８で接続されている。また、プロセッサネットワーク部４は、メモリアクセス処理部３から与えられるメモリアクセスリクエストに応じて、主記憶装置７とベクトル処理部６との間でベクトルデータをやりとりする。このとき、メモリアクセスリクエストの投機又は非投機のいずれかにかかわらず、プロセッサネットワーク部４は、全要素分のメモリアクセスリクエストが主記憶装置７に発行される。
【００４９】
ベクトルロード命令にかかるメモリアクセスリクエストに関し、プロセッサネットワーク部４は、信号線１０８を通じてベクトル処理部６に対して、主記憶装置７から読み出したベクトルデータを構成する各要素を送出する。このとき、プロセッサネットワーク部４は、各要素に、メモリアクセスリクエストに付随するバッファ番号を付随させる。尚、信号線１０８を多重化することによって、複数のメモリアクセスリクエストにかかるベクトルデータを並行してベクトル処理部６に供給できるようにもできる。
【００５０】
ベクトル処理部６は、メモリアクセス処理部３と信号線１０７で接続され、プロセッサネットワーク部４と信号線１０８で接続され、ベクトル制御部５と信号線１０９及び１１０で接続されている。ベクトル処理部６は、ベクトルデータに対してベクトル演算を実行する機能を持つ。また、ベクトル処理部６は、信号線１０９を通じてベクトル制御部５から受け付けた分岐レベルと、分岐予測結果とに基づいて、当該ベクトルロード命令における投機又は非投機の状態を管理する。
【００５１】
ベクトル処理部６は、少なくとも１つのベクトルパイプライン演算器６１を備える。ベクトルパイプライン演算器６１は、複数のベクトルレジスタ６２と、１つ以上のベクトル演算器６３と、複数のロードバッファ６４と、ベクトルロード管理部６５と、クルスパスイッチ６６とを含む。
【００５２】
複数のベクトルレジスタ６２のそれぞれは、ベクトルデータを格納する。ベクトル演算器６３は、複数のベクトルレジスタ６２に格納されたベクトルデータに対してベクトル演算を行う。ロードバッファ６４は、主記憶装置７から読み出されたベクトルデータを一時的に格納する。クロスバスイッチ回路６６は、ベクトル演算器６３及びロードバッファ６４から出力されるベクトルデータをベクトルレジスタ６２に振り分ける。尚、ベクトル演算されたベクトルデータを主記憶装置７にストアするストアバッファなど、ストアに関連する構成は、本発明と直接関係しないため図示を省略している。
【００５３】
ベクトルロード管理部６５は、メモリアクセス処理部３と信号線１０７で接続され、プロセッサネットワーク部４と信号線１０８で接続され、ベクトル制御部５と信号線１０９及び１１０で接続されている。ロードバッファ６４は、信号線１０８を通じて送られてきたベクトルデータの要素を、それに付随するバッファ番号のロードバッファ６４に一時的に格納する。その後、ベクトルロード管理部６５は、ロードバッファ６４に格納されたベクトルデータをベクトルレジスタ６２に転送する。
【００５４】
図５は、本発明の実施の形態２にかかるベクトルロード管理部６５の構成の一例を示すブロック図である。ベクトルロード管理部６５は、レジスタ群６５１と、レジスタ設定部６５２と、ライト部６５３と、リード部６５４とを含む。
【００５５】
レジスタ群６５１は、ロードバッファ６４に１対１に対応するレジスタ６５１−０、・・・、６５１−ｎの集合で構成される。各レジスタ６５１−ｉ（ｉ＝０〜ｎ）は、ロードバッファ番号フィールド６５１１、分岐レベルフィールド６５１２、キャンセルフラグフィールド６５１３、ベクトルレジスタ（ＶＡＲ）番号フィールド６５１４、ライト要素数フィールド６５１５、リード要素数フィールド６５１６及び使用可否フラグフィールド６５１７を有する。
【００５６】
ロードバッファ番号フィールド６５１１には、ロードバッファ６４のバッファ番号が固定的に設定される。分岐レベルフィールド６５１２には、ロードバッファ番号を確保したベクトルロード命令に対応した分岐レベルが設定される。キャンセルフラグフィールド６５１３には、分岐レベルが"０"でなく、かつ、分岐予測の失敗が報告されたときに"１"が設定される。ベクトルレジスタ番号フィールド６５１４には、ベクトルロード命令でロードするベクトルデータを格納するベクトルレジスタ６２の番号が設定される。ライト要素数フィールド６５１５及びリード要素数フィールド６５１６には、ベクトルロード命令情報中の要素数が設定される。使用可否フラグフィールド６５１７には、ロードバッファ６４に格納したベクトルデータが使用可能、つまり、ベクトルレジスタ６２へ転送可能である場合に"１"が設定される。
【００５７】
レジスタ設定部６５２は、ベクトル制御部５と信号線１０９で接続され、メモリアクセス処理部３と信号線１０７で接続されている。また、レジスタ設定部６５２は、レジスタ群６５１の初期設定や分岐レベルの管理を行う。また、レジスタ設定部６５２は、レジスタ６５１−ｉのバッファ解放通知を送る。これに伴い、メモリアクセス処理部３は、解放通知を受けたロードバッファ６４の解放を行う。
【００５８】
ここで、レジスタ設定部６５２におけるレジスタ群６５１の初期設定処理について説明する。まず、レジスタ設定部６５２は、信号線１０９を通じてベクトル制御部５から、ロードバッファ番号、分岐レベル、ベクトルレジスタ番号、要素数を含むベクトルロード命令情報を受け付ける。このとき、レジスタ設定部６５２は、受け付けたロードバッファ番号をロードバッファ番号フィールド６５１１に持つレジスタ６５１−ｉを特定する。そして、レジスタ設定部６５２は、特定されたレジスタ６５１−ｉの分岐レベルフィールド６５１２に、受け付けたベクトルロード命令の分岐レベルを設定する。併せて、レジスタ設定部６５２は、ベクトルレジスタ番号フィールド６５１４に、受け付けたベクトルロード命令情報中のベクトルレジスタ番号を設定する。さらに、レジスタ設定部６５２は、ライト要素数フィールド６５１５及びリード要素数フィールド６５１６に、受け付けたベクトルロード命令情報中の要素数を設定する。また、レジスタ設定部６５２は、キャンセルフラグフィールド６５１３に"０"を設定する。
【００５９】
続いて、図６のフローチャートを用いて、本発明の実施の形態２にかかるレジスタ設定部６５２におけるレジスタ群６５１の更新処理を説明する。まず、レジスタ設定部６５２は、信号線１０９を通じてベクトル制御部５から、分岐予測結果を受け付ける（Ｓ３１）。次に、レジスタ設定部６５２は、受け付けた分岐予測結果が成功であるか失敗であるかを判定する（Ｓ３２）。そして、分岐予測結果が成功であると判定した場合、レジスタ設定部６５２は、分岐レベルフィールド６５１２の値を"１"減算する（Ｓ３３）。また、ステップＳ３２において、分岐予測結果が失敗であると判定した場合、レジスタ設定部６５２は、分岐レベルフィールド６５１２に"０"を設定し、キャンセルフラグフィールド６５１３に"１"を設定する（Ｓ３４）。尚、ステップＳ３３及びＳ３４において、レジスタ設定部６５２は、レジスタ６５１−０〜６５１−ｎの全てのレジスタを対象として値を更新する。
【００６０】
図５に戻って説明する。ライト部６５３は、プロセッサネットワーク部４と信号線１０８で接続されている。また、ライト部６５３は、ベクトルデータのロードバッファ６４への書き込みを行う。ここで、図７のフローチャートを用いて、本発明の実施の形態２にかかるライト部６５３の動作を説明する。
【００６１】
まず、ライト部６５３は、信号線１０８を通じてプロセッサネットワーク部４からベクトルデータの要素を受信する（Ｓ４０１）。次に、ライト部６５３は、受信した要素に付随するロードバッファ番号をロードバッファ番号フィールド６５１１に持つレジスタ６５１−ｉを特定する（Ｓ４０２）。そして、ライト部６５３は、当該特定したレジスタ６５１−ｉのキャンセルフラグフィールド６５１３が"０"であるか否かを判定する（Ｓ４０３）。ここで判定を行う理由は、ここまでの間に、分岐予測が失敗したことが判明していた場合、レジスタ設定部６５２によりキャンセルフラグフィールド６５１３が"１"に設定されている可能性があるためである（図６のステップＳ３４）。
【００６２】
キャンセルフラグフィールド６５１３が"０"である場合、ライト部６５３は、受信した要素に付随するロードバッファ番号を持つロードバッファ６４を特定する（Ｓ４０４）。そして、ライト部６５３は、当該特定したロードバッファ６４に、当該ベクトルデータの要素を書き込む（Ｓ４０５）。その後、ライト部６５３は、当該特定したレジスタ６５１−ｉのライト要素数フィールド６５１５の値を、書き込んだ要素数分だけ減算する（Ｓ４０７）。
【００６３】
また、キャンセルフラグフィールド６５１３が"１"である場合、ライト部６５３は、当該特定したロードバッファ６４に、当該ベクトルデータの要素の書き込みを行わずに、当該ベクトルデータの要素を廃棄する（Ｓ４０６）。その後、ライト部６５３は、当該特定したレジスタ６５１−ｉのライト要素数フィールド６５１５の値を、受信した要素数分だけ減算する（Ｓ４０７）。
【００６４】
そして、ライト部６５３は、全要素が取得済みか否か、つまり、全要素の書き込みが終了したか否かを判定する（Ｓ４０８）。未取得の要素が存在する場合、ステップＳ４０１へ進む。また、全要素が取得済みである場合、ステップＳ４０９へ進む。
【００６５】
尚、当該特定したレジスタ６５１−ｉの分岐レベルフィールド６５１２が"０"であるか否かにかかわらず、ライト部６５３は、当該特定したロードバッファ６４に、その要素を書き込む。そして、ライト部６５３は、当該特定したレジスタ６５１−ｉのライト要素数フィールド６５１５の値を、書き込んだ要素数分だけ減算することとなる。
【００６６】
続いて、ライト部６５３は、当該特定したレジスタ６５１−ｉのキャンセルフラグフィールド６５１３が"０"であるか否かを判定する（Ｓ４０９）。ここでも、上述と同様に、分岐予測が失敗したことが判明していた場合、レジスタ設定部６５２によりキャンセルフラグフィールド６５１３が"１"に設定されている可能性があるためである。ステップＳ４０９において、キャンセルフラグフィールド６５１３が"０"であると判定された場合、ライト部６５３は、さらに、当該特定したレジスタ６５１−ｉの分岐レベルフィールド６５１２が"０"であるか否かを判定する（Ｓ４１０）。ここまでの間に、全ての分岐予測が成功したことが判明していた場合、レジスタ設定部６５２により分岐レベルフィールド６５１２が"０"まで減算されている可能性があるためである（図６のステップＳ３３）。または、元々、非投機のベクトルロード命令である場合も分岐レベルフィールド６５１２が"０"である。
【００６７】
ステップＳ４１０において、分岐レベルフィールド６５１２が"０"以外であると判定された場合、ステップＳ４０９へ戻る。このとき、所定期間、処理を待機しても構わない。そして、その間に、全ての分岐予測が成功したことが判明した場合には、ステップＳ４１１へ進むことができる。
【００６８】
その場合、ライト部６５３は、当該特定したレジスタ６５１−ｉの使用可否フラグフィールド６５１７を"１"に設定する（Ｓ４１１）。尚、ステップＳ４０９において、キャンセルフラグフィールド６５１３が"１"であると判定された場合、ライト部６５３は、使用可否フラグフィールド６５１７の更新を行わない。
【００６９】
図５に戻って説明する。リード部６５４は、ベクトル制御部５と信号線１１０で接続されている。また、リード部６５４は、ロードバッファ６４からベクトルレジスタ６２へのベクトルデータの転送を行う。
【００７０】
リード部６５４は、レジスタ設定部６５２によりライト要素数フィールド６５１５が全要素数に初期設定されたレジスタ６５１−ｉについて、そのレジスタのロードバッファ番号フィールド６５１１に設定されたバッファ番号を持つロードバッファ６４のデータを、そのレジスタのベクトルレジスタ番号フィールド６５１４に設定された番号のベクトルレジスタ６２に転送する条件が満足されたか否かを判定する。
【００７１】
このとき、ベクトルデータの全要素がロードバッファ６４に格納済みである（すなわち、使用可否フラグフィールド６５１７の値が"１"である）場合に、リード部６５４は、転送可能と判定する。ここで、レジスタ群６５１に使用可否フラグフィールド６５１７を用いなくてもよい。その場合、キャンセルフラグフィールド６５１３が"０"であり、ライト要素数フィールド６５１５が"０"である場合に、リード部６５４は、転送可能と判定すればよい。但し、レジスタ群６５１に使用可否フラグフィールド６５１７を用いることにより、当該判定処理のコストを軽減し、処理を高速に行うことができる。
【００７２】
リード部６５４は、あるレジスタ６５１−ｉについて転送可能と判定した場合、信号線１１０を通じてベクトル制御部５に対して、転送開始通知を送出する。このとき、リード部６５４は、そのレジスタ６５１−ｉのロードバッファ番号フィールド６５１１に設定されたバッファ番号及びベクトルレジスタ番号フィールド６５１２に設定されたベクトルレジスタ番号を、転送開始通知に含める。
【００７３】
その後、リード部６５４は、ロードバッファ番号フィールド６５１１に設定されたバッファ番号を持つロードバッファ６４に格納されているデータを順次に読み出す。併せて、リード部６５４は、ベクトルレジスタ番号フィールド６５１４に設定された番号のベクトルレジスタ６２にクロスバスイッチ回路６６を通じて、読み出したデータを書き込む。このとき、リード部６５４は、ベクトルデータの１要素をロードバッファ６４から読み出す毎に、リード要素数フィールド６５１６の値を１ずつ減算する。
【００７４】
リード要素数フィールド６５１６の値が"０"になった場合、転送完了となり、リード部６５４は、信号線１１０を通じてベクトル制御部５に対して、転送終了通知を送出する。このとき、リード部６５４は、そのレジスタ６５１−ｉのロードバッファ番号フィールド６５１１に設定されたバッファ番号及びベクトルレジスタ番号フィールド６５１４に設定されたベクトルレジスタ番号を、転送終了通知に含める。
【００７５】
同時に、リード部６５４は、信号線１０７を通じてメモリアクセス処理部３に対して、バッファ解放通知を送出する。このとき、リード部６５４は、そのレジスタ６５１−ｉのロードバッファ番号フィールド６５１１に設定されたバッファ番号を、バッファ解放通知に含める。そして、リード部６５４は、そのレジスタ６５１−ｉのフィールド６５１２〜６５１７を例えば、ＮＵＬＬに初期化する。
【００７６】
ここで、キャンセルフラグフィールド６５１３が"１"であり、ライト要素数フィールド６５１５が"０"である場合、投機的に実行されたベクトルロード命令がキャンセルされたことを示す。そのため、リード部６５４は、信号線１１０を通じてベクトル制御部５に対して、転送終了通知を送出する。このとき、リード部６５４は、そのレジスタ６５１−ｉのロードバッファ番号フィールド６５１１に設定されたバッファ番号及びベクトルレジスタ番号フィールド６５１４に設定されたベクトルレジスタ番号を、転送終了通知に含める。
【００７７】
同時に、リード部６５４は、信号線１０７を通じてメモリアクセス処理部３に対して、バッファ解放通知を送出する。このとき、リード部６５４は、そのレジスタ６５１−ｉのロードバッファ番号フィールド６５１１に設定されたバッファ番号を、バッファ解放通知に含める。そして、リード部６５４は、そのレジスタ６５１−ｉのフィールド６５１２〜６５１７を例えばＮＵＬＬに初期化する。
【００７８】
次に、図８のフローチャートを用いて、図３の本発明の実施の形態２にかかるベクトル処理装置の動作を説明する。まず、プロセッサ１は、主記憶装置７から命令を読出し、命令解読部２１によりスカラ命令かベクトル命令かの判定を行う（Ｓ５０１）。命令解読部２１によりスカラ命令であると判定した場合、スカラ処理部２２は、当該スカラ命令を実行する（Ｓ５０２）。
【００７９】
また、ステップＳ５０１において、命令解読部２１によりベクトル命令であると判定した場合、メモリアクセス処理部３のロードバッファ管理部３１は、ロードバッファの確保を行う（Ｓ５０３）。
【００８０】
そして、メモリアクセス処理部３は、プロセッサネットワーク部４を介して、主記憶装置７にベクトルロード命令を発行する（Ｓ５０４）。ベクトルロード命令の発行と同時に、ロードバッファ管理部３１は、ベクトル制御部５を介してベクトル処理部６内のベクトルロード管理部６５に、各種情報の登録を行う。例えば、レジスタ設定部６５２は、分岐レベルを分岐レベルフィールド６５１２に初期設定する。
【００８１】
この後、スカラ処理部２２は、任意のタイミングで、ベクトルロード命令の前の分岐命令における分岐予測結果をベクトル処理部６に対して出力する。そして、ベクトルロード管理部６５は、図６に示したように、スカラ処理部２２から受け付けた分岐予測結果に応じて、分岐レベルフィールド６５１２及びキャンセルフラグフィールド６５１３を更新する。
【００８２】
ここで、ベクトルロード管理部６５は、登録された各種情報内の分岐レベルフィールド６５１２を参照して、発行されたベクトルロード命令の分岐レベルの判定を行う（Ｓ５０５）。分岐レベルが"０"であった場合、ベクトルロード管理部６５は、該当ベクトルロードの全要素数分のリプライがあったか否かの判定を行う（Ｓ５０６）。
【００８３】
全要素数のリプライが受信されていない場合、ベクトルロード管理部６５は、全要素数分のリプライの受信を待ち、再度、ステップＳ５０６を実行する。また、全要素数のリプライが受信されていた場合、ベクトルロード管理部６５は、ロードバッファ６４からベクトルレジスタ６２へクロスバスイッチ６６を介してベクトルデータを転送する（Ｓ５０７）。続いて、ベクトルロード管理部６５は、使用が完了したロードバッファ番号のロードバッファ解放通知をメモリアクセス処理部３に出力する。そして、ロードバッファ管理部３１は、ロードバッファの解放を行う（Ｓ５０８）。
【００８４】
また、ステップＳ５０５において、分岐レベルが"０"でなかった場合、ベクトルロード管理部６５は、該当ベクトルロードの全要素数分のリプライがあったか否かの判定を行う（Ｓ５０９）。全要素数のリプライが受信されていない場合、ベクトルロード管理部６５は、全要素数分のリプライの受信を待ち、再度、ステップＳ５０９を実行する。
【００８５】
また、全要素数のリプライが受信されていた場合、ベクトルロード管理部６５は、キャンセルフラグが"０"であるか否かを判定する（Ｓ５１０）。つまり、分岐予測が失敗したことにより、キャンセルフラグに"１"が設定されているか否かを判定する。キャンセルフラグが"１"である場合、ベクトルロード管理部６５は、キャンセルされたロードバッファ番号のロードバッファ解放通知をメモリアクセス処理部３に出力する。そして、ロードバッファ管理部３１は、ロードバッファの解放を行う（Ｓ５０８）。
【００８６】
ステップＳ５１０において、キャンセルフラグが"０"である場合、ベクトルロード管理部６５は、分岐レベルが"０"であるか否かを判定する（Ｓ５１１）。分岐レベルが"０"でなかった場合、全ての分岐命令における分岐予測結果の受信を待ち、再度、ステップＳ５１０を実行する。
【００８７】
ステップＳ５１１において、分岐レベルが"０"であった場合、ベクトルロード管理部６５は、ロードバッファ６４からベクトルレジスタ６２へクロスバスイッチ６６を介してベクトルデータを転送する（Ｓ５０７）。続いて、ベクトルロード管理部６５は、使用が完了したロードバッファ番号のロードバッファ解放通知をメモリアクセス処理部３に出力する。そして、ロードバッファ管理部３１は、ロードバッファの解放を行う（Ｓ５０８）。
【００８８】
以上のことから、本発明の実施の形態２における効果を説明する。第１の効果は、投機的にベクトルロード命令を発行する事により、分岐予測が成功した場合にメモリアクセスのレイテンシが隠蔽できるため性能を向上できることである。第２の効果は、分岐予測失敗した場合は、ベクトルレジスタにデータの転送を行わないことにより、投機的に実行したベクトルロード命令が分岐予測失敗した場合であっても、後続の命令を問題なく実行できることである。
【００８９】
また、本発明の実施の形態２は、次のように言い換えることができる。まず、ベクトルロード管理部６５は、実施の形態１にかかるベクトルロード管理部１４に加えて、複数の取得要求により取得された複数のベクトルデータを保持するロードバッファ６４を備える。そして、ベクトルロード管理部６５は、取得要求によりベクトルデータが取得される度に、当該取得されたベクトルデータをロードバッファ６４へ格納する。その後、分岐予測が成功したと判定された場合、ベクトルロード管理部６５は、ロードバッファ６４に格納された全てのベクトルデータを、ベクトルレジスタ６２へ転送し、その後、ロードバッファ６４を解放する。また、分岐予測が失敗したと判定された場合、ベクトルロード管理部６５は、ロードバッファ６４を解放する。
【００９０】
さらに、本発明の実施の形態２は、発行されたベクトルロード命令以前に複数の分岐命令が存在する場合に対応することができる。ベクトルロード管理部６５は、分岐予測の成否の判定結果を記憶するレジスタ群６５１を備える。また、スカラ処理部２２は、複数の分岐命令のそれぞれに対応する分岐先が確定する度に、分岐予測の成否を判定する。そして、ベクトルロード管理部６５は、スカラ処理部２２により分岐予測の成否が判定される度に、レジスタ群６５１に記憶された判定結果を更新する。その後、スカラ処理部２２により全ての分岐命令における分岐予測の判定が完了し、かつ、全てのベクトルデータを取得し終えた後に、レジスタ群６５１に記憶された判定結果が全ての分岐予測の成功を示す場合に、リード部６５４は、全てのベクトルデータを転送する。
【００９１】
さらにまた、上述した判定結果は、分岐先が未確定である分岐命令数を示す分岐情報と、分岐予測が失敗したことを示す予測失敗情報とを含むものということができる。分岐情報とは、例えば、上述した分岐レベルに相当する。また、予測失敗情報とは、例えば、上述したキャンセルフラグに相当する。そして、命令制御部２は、ベクトルロード命令を発行する際に、当該ベクトルロード命令以前の分岐命令数を、メモリアクセス処理部３及びベクトル制御部５を介して、ベクトルロード管理部６５へ通知する。そして、レジスタ設定部６５２は、命令発行部２から通知された分岐命令数を上述した分岐情報としてレジスタ群６５１へ格納する。また、スカラ処理部２２により分岐予測が成功したと判定された場合、レジスタ設定部６５２は、レジスタ群６５１に格納された分岐情報を減算する。スカラ処理部２２により分岐予測が失敗したと判定された場合、レジスタ設定部６５２は、レジスタ群６５１に格納された予測失敗情報を有効と更新する。例えば、キャンセルフラグに"１"が設定されたことが相当する。
【００９２】
また、スカラ処理部２２により全ての分岐命令における分岐予測の判定が完了し、かつ、全てのベクトルデータを取得し終えた後に、レジスタ群６５１に記憶された分岐情報が"０"であり、かつ、予測失敗情報が無効である場合に、リード部６５４は、全てのベクトルデータを転送する。また、スカラ処理部２２により全ての分岐命令における分岐予測の判定が完了し、かつ、全てのベクトルデータを取得し終えた後に、予測失敗情報が有効である場合に、リード部６５４は、メモリアクセス処理部３により発行された取得要求により取得されたベクトルデータを廃棄する。
【００９３】
＜発明の実施の形態３＞
続いて、本発明の実施の形態３にかかるベクトル処理装置は、実施の形態２にかかるベクトルロード管理部６５に変更を加えたものである。すなわち、本発明の実施の形態３にかかるベクトルロード管理部６５ａは、分岐予測が失敗したと判定された以後に、メモリアクセス処理部３による未発行のメモリアクセスリクエストの発行を停止するものである。これにより、投機的に実行されたベクトルロード命令について、主記憶装置７からベクトルデータを取得中に分岐予測の失敗となった場合に、以後のベクトルデータの取得を行わず、ライト部６５３は、ロードバッファ６４への書込みも行わない。そのため、実施の形態２に比べてより投機的に実行されたベクトルロード命令の停止を行うことができる。よって、処理の効率化を図ることができる。そこで、以下では、実施の形態２との違いを中心に説明する。また、本発明の実施の形態３のその他の構成は、実施の形態２と同等であるため、同一の符号を付し、詳細な説明を省略する。
【００９４】
図９は、本発明の実施の形態３にかかるベクトルロード管理部６５ａの構成の一例を示すブロック図である。ベクトルロード管理部６５ａは、実施の形態２のベクトルロード管理部６５と比べて、レジスタ群６５１、レジスタ設定部６５２及びライト部６５３が、レジスタ群６５１ａ、レジスタ設定部６５２ａ及びライト部６５３ａに置き換わったものである。レジスタ群６５１ａは、ライト要素数フィールド６５１５及びリード要素数フィールド６５１６に代えて、要素数フィールド６５１８及び要素数カウンタフィールド６５１９を有する。要素数フィールド６５１８は、ベクトルロード命令の全要素数が設定される。要素数カウンタフィールド６５１９は、格納済み及び転送済みの要素数をカウントした値が設定される。
【００９５】
レジスタ設定部６５２ａは、ベクトルロード命令情報を受け付けた場合、初期設定処理として、ベクトルロード情報中の要素数を要素数フィールド６５１８に設定し、要素数カウンタフィールド６５１９に"０"を設定する。
【００９６】
また、図１０のフローチャートを用いて、本発明の実施の形態３にかかるレジスタ設定部６５２ａにおけるレジスタ群６５１ａの更新処理を説明する。尚、図６と同等の処理については、同一の符号を付し、説明を省略する。ここでは、ステップＳ３２において、分岐予測結果が失敗であると判定した場合、レジスタ設定部６５２ａは、メモリアクセス処理部３によりメモリアクセスリクエストの全てが発行済みか否かを判定する（Ｓ３５）。つまり、レジスタ設定部６５２ａは、メモリアクセス処理部３がベクトルロード命令の全要素を、プロセッサネットワーク部４に信号線１０５を通じて送出し終わったか否かを判定する。
【００９７】
ステップＳ３５において、全てが発行済みと判定した場合、レジスタ設定部６５２ａは、キャンセルフラグフィールド６５１３に"１"を設定する（Ｓ３６）。このとき、分岐レベルフィールド６５１２が"０"以外のレジスタが更新の対象となる。
【００９８】
また、ステップＳ３５において、未発行のメモリアクセスリクエストが存在すると判定した場合、すなわち、メモリアクセス処理部３が、分岐レベルが０でないベクトルロード命令の送出を行っている場合、レジスタ設定部６５２ａは、要素数フィールド６５１８の値を、メモリアクセス処理部３が発行済みのメモリアクセスリクエスト数に更新する（Ｓ３７）。また、レジスタ設定部６５２ａは、メモリアクセス処理部３に対して、未発行のメモリアクセスリクエストの発行を停止させる（Ｓ３８）。その後、レジスタ設定部６５２ａは、キャンセルフラグフィールド６５１３に"１"を設定する（Ｓ３６）。
【００９９】
図９に戻って説明する。ライト部６５３ａは、プロセッサネットワーク部４と信号線１０８で接続されている。また、ライト部６５３ａは、ベクトルデータのロードバッファ６４への書き込みを行う。ここで、図１１のフローチャートを用いて、本発明の実施の形態３にかかるライト部６５３ａの動作を説明する。尚、図７と同等の処理については、同一の符号を付し、説明を省略する。
【０１００】
ここでは、ステップＳ４０５の後、ライト部６５３ａは、特定したレジスタ６５１−ｉの要素数カウンタフィールド６５１９の値を、書き込んだ要素数分だけ加算する（Ｓ４０７ａ）。そして、ライト部６５３ａは、要素数フィールド６５１８の値と、要素数カウンタフィールド６５１９の値とが一致するか否かを判定する（Ｓ４０８ａ）。一致しない場合、ステップＳ４０１へ進む。また、一致する場合、ステップＳ４０９へ進む。
【０１０１】
ここで、主記憶装置７からベクトルデータを取得中に分岐予測の失敗となった場合には、図１０のステップＳ３７において、要素数フィールド６５１８の値が、発行済みのメモリアクセスリクエスト数に更新される。つまり、初期設定値より小さい値となる。一方、図１１のステップＳ４０７ａにおいて、要素数カウンタフィールド６５１９の値は、"０"から書込み要素数分が加算されていく、つまり、要素数カウンタフィールド６５１９の値については、発行済みのメモリアクセスリクエスト数のうち取得済みのベクトルデータの要素数に更新される。また、図１０のステップＳ３８において、分岐予測の失敗となった以後、メモリアクセス処理部３から未発行のメモリアクセスリクエストの発行が停止される。そのため、ライト部６５３ａは、発行済みのメモリアクセスリクエストのリプライのみを受け付け、ロードバッファ６４へベクトルデータを書き込むことになるが、投機的に実行されているベクトルロード命令に指定された全てのベクトルデータをロードバッファ６４に格納する必要はなくなる。よって、ライト部６５３ａが受信したベクトルデータをロードバッファ６４へ格納する処理の回数を軽減することができる。また、このとき、図１０のステップＳ３６において、キャンセルフラグフィールド６５１３が"１"に設定されている。
【０１０２】
そのため、主記憶装置７からベクトルデータを取得中に分岐予測の失敗となった場合には、ライト部６５３ａは、使用可否フラグフィールド６５１７の設定は行わない。また、全ての分岐予測に成功した場合には、投機的に実行されているベクトルロード命令に指定された全てのベクトルデータをロードバッファ６４に格納するまで、ステップＳ４０１乃至Ｓ４０８ａが繰り返し実行される。その結果、初期設定の要素数フィールド６５１８の値と、要素数カウンタフィールド６５１９の値とが一致することとなる。よって、図７と同様に、ステップＳ４１１により、ライト部６５３ａは、使用可否フラグフィールド６５１７を"１"に設定する。そして、以後、リード部６５４は、ロードバッファ６４に格納されたベクトルデータをベクトルレジスタ６２へ転送することで、正しい値によりベクトル演算を行わせることができる。
【０１０３】
このように、本発明の実施の形態３では、分岐予測の失敗により投機的に実行されたベクトルロード命令がキャンセルされた場合に、ロードバッファの解放が早くなるケースが起こり得る。その場合、後続のベクトルロード命令の発行を早く行うことで、更なる性能向上を行う事ができる。また、余分なメモリアクセスリクエストを発行しないことによる消費電力低減という新たな効果を奏する。
【０１０４】
＜その他の発明の実施の形態＞
本発明によるベクトルロード命令の投機実行方法は、分岐予測結果を待たずにベクトルロード命令を投機的に実行する事により、分岐予測が成功した際のロード命令によるメモリアクセスのレイテンシを隠蔽する事で性能を向上させることができる。また、分岐予測が失敗した場合に、投機的に実行したベクトルロード命令によるロードデータをベクトルレジスタに格納せずに廃棄する事により、誤ったデータによりベクトル命令の実行を防止することができる。
【０１０５】
すなわち、ロードバッファの確保を行う際に、分岐レベルをベクトルロード管理部に通知する。そして、ベクトルロード管理部は、分岐レベルとキャンセルフラグを同時に管理する機能を備える。その後、分岐命令による分岐先が確定したときに、分岐予測の成否が判明する。分岐予測が成功した場合、ベクトルロード管理部は、管理している分岐レベルに対して、分岐レベルのデクリメントを行う。その結果、分岐レベルが"０"になった命令について、ベクトルロード管理部は、非投機の命令として処理する。また、分岐予測が失敗した場合、ベクトルロード管理部は、投機的な実行により確保したロードバッファに対応するキャンセルフラグを有効にする。これにより、以後、投機のベクトルロードのデータがメモリから転送されたとしても、ロードバッファからベクトルレジスタにデータを転送せずに廃棄する。そして、全要素分のデータの廃棄が完了した後、ロードバッファの解放を行う。これにより、後続のベクトル命令が誤ってデータを使用する事がなくなる。そのため、投機的にベクトルロードを実行できるようになる。よって、メモリアクセスのレイテンシを隠蔽する事ができる。
【０１０６】
または、本発明にかかるプロセッサを次のように言うこともできる。当該プロセッサは、ロードバッファを確保し、投機的にベクトルロード命令を発行し、ロードデータをロードバッファに格納する。そして、全ロードデータのリプライが主記憶装置から返却され、当該発行されたベクトルロード命令が非投機であることが確定した場合、当該プロセッサは、レジスタにロードデータを転送し、ロードバッファを解放する。また、分岐予測が失敗した場合には、当該プロセッサは、レジスタにロードデータの転送を行わずに、ロードバッファを解放する。
【０１０７】
さらに、当該プロセッサが有するベクトルロード管理部は、分岐レベル及びキャンセルフラグにより、投機的に実行されるベクトルロード命令を管理する。
【０１０８】
また、当該プロセッサは、ロードバッファを確保し、ベクトルロード命令を投機的に発行している最中に、分岐予測が失敗した場合、投機的に発行しているベクトルロード命令の発行を中断する。そして、当該プロセッサは、発行したリクエスト数を管理する事によって、ロードバッファの解放を早めることができる。
【０１０９】
さらに、本発明は上述した実施の形態のみに限定されるものではなく、既に述べた本発明の要旨を逸脱しない範囲において種々の変更が可能であることは勿論である。
【符号の説明】
【０１１０】
１  プロセッサ
２  命令制御部
２１  命令解読部
２２  スカラ処理部
３  メモリアクセス処理部
３１  ロードバッファ管理部
４  プロセッサネットワーク部
５  ベクトル制御部
６  ベクトル処理部
６１  ベクトルパイプライン演算器
６２  ベクトルレジスタ
６３  ベクトル演算器
６４  ロードバッファ
６５  ベクトルロード管理部
６５ａ  ベクトルロード管理部
６５１  レジスタ群
６５１−０  レジスタ
６５１−１  レジスタ
６５１−ｎ  レジスタ
６５１ａ  レジスタ群
６５１ａ−０  レジスタ
６５１ａ−１  レジスタ
６５１ａ−ｎ  レジスタ
６５１１  ロードバッファ番号フィールド
６５１２  分岐レベルフィールド
６５１３  キャンセルフラグフィールド
６５１４  ベクトルレジスタ番号フィールド
６５１５  ライト要素数フィールド
６５１６  リード要素数フィールド
６５１７  使用可否フラグフィールド
６５１８  要素数フィールド
６５１９  要素数カウンタフィールド
６５２  レジスタ設定部
６５２ａ  レジスタ設定部
６５３  ライト部
６５３ａ  ライト部
６５４  リード部
６６  クルスパスイッチ
７  主記憶装置
１０１  信号線
１０２  信号線
１０３  信号線
１０４  信号線
１０５  信号線
１０６  信号線
１０７  信号線
１０８  信号線
１０９  信号線
１１０  信号線
１０  プロセッサ
１１  命令発行部
１２  データ取得部
１３  判定部
１４  ベクトルロード管理部
１５  ベクトルレジスタ
【図１】
0005240270.tif 000002
【図２】
0005240270.tif 000003
【図３】
0005240270.tif 000004
【図４】
0005240270.tif 000005
【図５】
0005240270.tif 000006
【図６】
0005240270.tif 000007
【図７】
0005240270.tif 000008
【図８】
0005240270.tif 000009
【図９】
0005240270.tif 000010
【図１０】
0005240270.tif 000011
【図１１】
0005240270.tif 000012