(57)【要約】【課題】ハードウェア量の増大やレジスタ制御の複雑さを抑制しつつ、システム性能を向上可能なベクトル演算装置を提供する。【解決手段】ベクトル演算装置は、レジスタ、レジスタのデータを用いベクトル演算する演算器、及び演算結果データを格納可能なデータバッファを備える演算部と、演算部へベクトル演算命令を発する命令発行部及びデータバッファ管理情報を保持するデータバッファ管理部を備える演算制御部とを具備する。命令発行部は、同一レジスタでの複数の命令の依存関係に基づき、第１命令と第２命令とが順番変更可能な場合、演算結果データをデータバッファに格納するよう第２命令を編集する。データバッファ管理部は、第２命令に基づいて、データバッファの出力先レジスタ及び第１命令の情報を管理情報に格納する。演算器は、第２命令に基づき、ベクトル演算して演算結果データを出力する。データバッファは、演算結果データを格納する。【選択図】図７
2010218076.tif 000002
【特許請求の範囲】
【請求項１】
ベクトル演算が可能な演算部と、
前記演算部を制御する演算制御部と
を具備し、
前記演算部は、
複数のレジスタと、
前記複数のレジスタに格納されたデータを用いてベクトル演算を実行する複数の演算器と、
前記複数の演算器の演算結果データを一時的に格納可能なデータバッファと
を備え、
前記演算制御部は、
前記演算部へベクトル演算に関する複数の命令を発行する命令発行部と、
前記データバッファの管理に関する管理情報を保持するデータバッファ管理部と
を備え、
前記命令発行部は、前記複数のレジスタのうちの同一レジスタにおける前記複数の命令の依存関係に基づいて、前記複数の命令のうち、第１命令と第２命令との間で順番変更が可能な場合、演算結果データを前記データバッファに格納するように前記第２命令を編集して発行し、
前記データバッファ管理部は、前記編集された第２命令の発行に基づいて、前記データバッファの出力先レジスタ及び前記順番変更の変更相手である前記第１命令の情報を前記管理情報に格納し、
前記複数の演算器のうちの一つは、前記編集された第２命令に基づいて、前記複数のレジスタの少なくとも一つのデータを用いてベクトル演算を実行して演算結果データを出力し、
前記データバッファは、前記出力された演算結果データを一時的に格納する
ベクトル演算装置。
【請求項２】
請求項１に記載のベクトル演算装置において、
前記命令発行部は、前記第１命令を発行し、
前記複数の演算器のうちの一つは、前記第１命令に基づいて、前記複数のレジスタの少なくとも一つのデータを用いたベクトル演算を実行して演算結果データを前記複数のレジスタいずれかへ出力し、
前記データバッファ管理部は、前記管理情報を参照して、前記発行された第１命令が前記変更相手であることを検出して、前記管理情報に格納し、
前記命令発行部は、前記管理情報を参照して、前記データバッファに格納された演算結果データを、前記出力先レジスタに出力する出力命令を発行し、
前記データバッファ管理部は、前記出力命令の発行に応答して、前記管理情報をリセットし、
前記出力命令に基づいて、前記データバッファに格納された前記演算結果データは、前記出力先レジスタである前記複数のレジスタのいずれかに出力され、
前記複数の演算器のうちの一つは、前記第１命令及び前記第２命令を除く前記複数の命令に基づいて、前記複数のレジスタの少なくとも一つのデータを用いたベクトル演算を実行して演算結果データを出力する
ベクトル演算装置。
【請求項３】
請求項１に記載のベクトル演算装置において、
前記データバッファ管理部は、前記複数の命令のうちの第３命令について、前記複数のレジスタのうちの前記第３命令が対象とするレジスタと、前記出力先レジスタとが等しい場合、前記管理情報に基づいて、前記データバッファの演算結果データが使用可能か否かを判定し、
前記命令発行部は、前記データバッファの演算結果データが使用可能な場合、前記データバッファの演算結果データを使用するように前記第３命令を編集して発行し、
前記編集された第３命令に基づいて、前記データバッファの演算結果データが前記第３命令での出力先へ出力され、
前記命令発行部は、前記第１命令を発行し、
前記複数の演算器は、前記第１命令に基づいて、前記複数のレジスタの少なくとも一つのデータを用いたベクトル演算を実行して演算結果データを前記複数のレジスタいずれかへ出力し、
前記データバッファ管理部は、前記管理情報を参照して、前記発行された第１命令が前記変更相手であることを検出して、前記管理情報に格納し、
前記命令発行部は、前記管理情報を参照して、前記データバッファに格納された演算結果データを、前記出力先レジスタに出力する出力命令を発行し、
前記データバッファ管理部は、前記出力命令の発行に応答して、前記管理情報をリセットし、
前記出力命令に基づいて、前記データバッファに格納された前記演算結果データは、前記出力先レジスタである前記複数のレジスタのいずれかに出力される
ベクトル演算装置。
【請求項４】
請求項１に記載のベクトル演算装置において、
前記データバッファ管理部は、前記複数の命令のうちの第３命令について、前記複数のレジスタのうちの前記第３命令が対象とするレジスタと、前記出力先レジスタとが等しい場合、前記管理情報に基づいて、前記データバッファの演算結果データが使用可能か否かを判定し、
前記命令発行部は、前記データバッファの演算結果データが使用可能な場合、前記データバッファの演算結果データを使用するように前記第３命令を編集して発行し、
前記編集された第３命令に基づいて、前記データバッファの演算結果データが前記第３命令での出力先へ出力され、
前記命令発行部は、前記第１命令を発行し、
前記データバッファ管理部は、前記管理情報を参照して、前記発行された第１命令が前記変更相手であることを検出して、前記管理情報に格納し、
前記命令発行部は、前記管理情報を参照して、前記データバッファに格納された演算結果データを、前記出力先レジスタに出力する出力命令を発行し、
前記データバッファ管理部は、前記出力命令の発行に応答して、前記管理情報をリセットし、
前記出力命令に基づいて、前記データバッファに格納された演算結果データは、前記出力先レジスタである前記複数のレジスタのいずれかに出力され、
前記複数の演算器は、前記第１命令に基づいて、前記複数のレジスタのデータを用いたベクトル演算を実行して演算結果データを出力する
ベクトル演算装置。
【請求項５】
請求項１乃至４のいずれか一項に記載のベクトル演算装置において、
前記複数の命令の依存関係は、同一レジスタに対して先行命令が読み出しで後続命令が書き込みの関係、又は、同一レジスタに対して先行命令が書き込みで後続命令が書き込みの関係、である
ベクトル演算装置。
【請求項６】
ベクトル演算装置を用いたベクトル演算方法であって、
ここで、前記ベクトル演算装置は、
複数のレジスタと、
前記複数のレジスタに格納されたデータを用いてベクトル演算を実行する複数の演算器と、
前記複数の演算器の演算結果データを一時的に格納可能なデータバッファと
を備え、
前記複数のレジスタのうちの同一レジスタにおける前記複数の命令の依存関係に基づいて、前記複数の命令のうち、第１命令と第２命令との間で順番変更が可能な場合、演算結果データを前記データバッファに格納するように前記第２命令を編集して発行するステップと、
前記編集された第２命令の発行に基づいて、前記データバッファの出力先レジスタ及び前記順番変更の変更相手である前記第１命令の情報を、前記データバッファの管理に関する管理情報に格納するステップと、
前記複数の演算器のうちの一つにより、前記編集された第２命令に基づいて、前記複数のレジスタの少なくとも一つのデータを用いてベクトル演算を実行して演算結果データを出力するステップと、
前記データバッファに、前記出力された演算結果データを一時的に格納するステップと
を具備する
ベクトル演算方法。
【請求項７】
請求項６に記載のベクトル演算方法において、
前記第１命令を発行ステップと、
前記複数の演算器のうちの一つにより、前記第１命令に基づいて、前記複数のレジスタの少なくとも一つのデータを用いたベクトル演算を実行して演算結果データを前記複数のレジスタいずれかへ出力するステップと、
前記管理情報を参照して、前記発行された第１命令が前記変更相手であることを検出して、前記管理情報に格納するステップと、
前記管理情報を参照して、前記データバッファに格納された演算結果データを、前記出力先レジスタに出力する出力命令を発行するステップと、
前記出力命令の発行に応答して、前記管理情報をリセットするステップと、
前記出力命令に基づいて、前記データバッファに格納された前記演算結果データを、前記出力先レジスタである前記複数のレジスタのいずれかに出力するステップと、
前記複数の演算器のうちの一つにより、前記第１命令及び前記第２命令を除く前記複数の命令に基づいて、前記複数のレジスタの少なくとも一つのデータを用いたベクトル演算を実行して演算結果データを出力するステップと
を更に具備する
ベクトル演算方法。
【請求項８】
請求項６に記載のベクトル演算方法において、
前記複数の命令のうちの第３命令について、前記複数のレジスタのうちの前記第３命令が対象とするレジスタと、前記出力先レジスタとが等しい場合、前記管理情報に基づいて、前記データバッファの演算結果データが使用可能か否かを判定するステップと、
前記データバッファの演算結果データが使用可能な場合、前記データバッファの演算結果データを使用するように前記第３命令を編集して発行するステップと、
前記編集された第３命令に基づいて、前記データバッファの演算結果データを前記第３命令での出力先へ出力するステップと、
前記第１命令を発行ステップと、
前記複数の演算器により、前記第１命令に基づいて、前記複数のレジスタの少なくとも一つのデータを用いたベクトル演算を実行して演算結果データを前記複数のレジスタいずれかへ出力するステップと、
前記管理情報を参照して、前記発行された第１命令が前記変更相手であることを検出して、前記管理情報に格納するステップと、
前記管理情報を参照して、前記データバッファに格納された演算結果データを、前記出力先レジスタに出力する出力命令を発行ステップと、
前記出力命令の発行に応答して、前記管理情報をリセットするステップと、
前記出力命令に基づいて、前記データバッファに格納された前記演算結果データを、前記出力先レジスタである前記複数のレジスタのいずれかに出力するステップと
を更に具備する
ベクトル演算方法。
【請求項９】
請求項６に記載のベクトル演算方法において、
前記複数の命令のうちの第３命令について、前記複数のレジスタのうちの前記第３命令が対象とするレジスタと、前記出力先レジスタとが等しい場合、前記管理情報に基づいて、前記データバッファの演算結果データが使用可能か否かを判定するステップと、
前記データバッファの演算結果データが使用可能な場合、前記データバッファの演算結果データを使用するように前記第３命令を編集して発行するステップと、
前記編集された第３命令に基づいて、前記データバッファの演算結果データを前記第３命令での出力先へ出力するステップと、
前記第１命令を発行するステップと、
前記データバッファ管理部は、前記管理情報を参照して、前記発行された第１命令が前記変更相手であることを検出して、前記管理情報に格納するステップと、
前記管理情報を参照して、前記データバッファに格納された演算結果データを、前記出力先レジスタに出力する出力命令を発行するステップと、
前記出力命令の発行に応答して、前記管理情報をリセットするステップと、
前記出力命令に基づいて、前記データバッファに格納された演算結果データを、前記出力先レジスタである前記複数のレジスタのいずれかに出力するステップと、
前記複数の演算器により、前記第１命令に基づいて、前記複数のレジスタの少なくとも一つのデータを用いたベクトル演算を実行して演算結果データを出力するステップと
を更に具備する
ベクトル演算方法。
【請求項１０】
請求項６乃至９のいずれか一項に記載のベクトル演算方法において、
前記複数の命令の依存関係は、同一レジスタに対して先行命令が読み出しで後続命令が書き込みの関係、又は、同一レジスタに対して先行命令が書き込みで後続命令が書き込みの関係、である
ベクトル演算方法。
【請求項１１】
ベクトル演算装置を用いたベクトル演算方法を、コンピュータとしての前記ベクトル演算装置に実行させるプログラムであって、
ここで、前記ベクトル演算装置は、
ベクトル演算が可能な演算部と、
前記演算部を制御する演算制御部と
を具備し、
前記演算部は、
複数のレジスタと、
前記複数のレジスタに格納されたデータを用いてベクトル演算を実行する複数の演算器と、
前記複数の演算器の演算結果データを一時的に格納可能なデータバッファと
を備え、
前記演算制御部は、
前記演算部へベクトル演算に関する複数の命令を発行する命令発行部と、
前記データバッファの管理に関する管理情報を保持するデータバッファ管理部と
を備え、
前記命令発行部が、前記複数のレジスタのうちの同一レジスタにおける前記複数の命令の依存関係に基づいて、前記複数の命令のうち、第１命令と第２命令との間で順番変更が可能な場合、演算結果データを前記データバッファに格納するように前記第２命令を編集して発行するステップと、
前記データバッファ管理部が、前記編集された第２命令の発行に基づいて、前記データバッファの出力先レジスタ及び前記順番変更の変更相手である前記第１命令の情報を、前記データバッファの管理に関する管理情報に格納するステップと
を具備し、
前記複数の演算器のうちの一つは、前記編集された第２命令に基づいて、前記複数のレジスタの少なくとも一つのデータを用いてベクトル演算を実行して演算結果データを出力し、
前記データバッファは、前記出力された演算結果データを一時的に格納する
プログラム。
【請求項１２】
請求項１１に記載のプログラムにおいて、
前記命令発行部が、前記第１命令を発行ステップと、
前記データバッファ管理部が、前記管理情報を参照して、前記発行された第１命令が前記変更相手であることを検出して、前記管理情報に格納するステップと、
前記命令発行部が、前記管理情報を参照して、前記データバッファに格納された演算結果データを、前記出力先レジスタに出力する出力命令を発行するステップと、
前記データバッファ管理部が、前記出力命令の発行に応答して、前記管理情報をリセットするステップと
を更に具備し、
前記複数の演算器のうちの一つが、前記第１命令に基づいて、前記複数のレジスタの少なくとも一つのデータを用いたベクトル演算を実行して演算結果データを前記複数のレジスタいずれかへ出力し、
前記出力命令に基づいて、前記データバッファに格納された前記演算結果データが、前記出力先レジスタである前記複数のレジスタのいずれかに出力され、
前記複数の演算器が、前記第１命令及び前記第２命令を除く前記複数の命令に基づいて、前記複数のレジスタの少なくとも一つのデータを用いたベクトル演算を実行して演算結果データを出力する
プログラム。
【請求項１３】
請求項１１に記載のプログラムにおいて、
前記データバッファ管理部が、前記複数の命令のうちの第３命令について、前記複数のレジスタのうちの前記第３命令が対象とするレジスタと、前記出力先レジスタとが等しい場合、前記管理情報に基づいて、前記データバッファの演算結果データが使用可能か否かを判定するステップと、
前記命令発行部が、前記データバッファの演算結果データが使用可能な場合、前記データバッファの演算結果データを使用するように前記第３命令を編集して発行するステップと、
前記命令発行部が、前記第１命令を発行ステップと、
前記データバッファ管理部が、前記管理情報を参照して、前記発行された第１命令が前記変更相手であることを検出して、前記管理情報に格納するステップと、
前記命令発行部が、前記管理情報を参照して、前記データバッファに格納された演算結果データを、前記出力先レジスタに出力する出力命令を発行ステップと、
前記データバッファ管理部が、前記出力命令の発行に応答して、前記管理情報をリセットするステップと
を更に具備し、
前記編集された第３命令に基づいて、前記データバッファの演算結果データが前記第３命令での出力先へ出力され、
前記複数の演算器が、前記第１命令に基づいて、前記複数のレジスタの少なくとも一つのデータを用いたベクトル演算を実行して演算結果データを前記複数のレジスタいずれかへ出力し、
前記出力命令に基づいて、前記データバッファに格納された前記演算結果データが、前記出力先レジスタである前記複数のレジスタのいずれかに出力される
プログラム。
【請求項１４】
請求項１１に記載のプログラムにおいて、
前記データバッファ管理部が、前記複数の命令のうちの第３命令について、前記複数のレジスタのうちの前記第３命令が対象とするレジスタと、前記出力先レジスタとが等しい場合、前記管理情報に基づいて、前記データバッファの演算結果データが使用可能か否かを判定するステップと、
前記命令発行部が、前記データバッファの演算結果データが使用可能な場合、前記データバッファの演算結果データを使用するように前記第３命令を編集して発行するステップと、
前記命令発行部が、前記第１命令を発行するステップと、
前記データバッファ管理部が、前記管理情報を参照して、前記発行された第１命令が前記変更相手であることを検出して、前記管理情報に格納するステップと、
前記命令発行部が、前記管理情報を参照して、前記データバッファに格納された演算結果データを、前記出力先レジスタに出力する出力命令を発行するステップと、
前記データバッファ管理部が、前記出力命令の発行に応答して、前記管理情報をリセットするステップと
を更に具備し、
前記編集された第３命令に基づいて、前記データバッファの演算結果データが前記第３命令での出力先へ出力され、
前記出力命令に基づいて、前記データバッファに格納された演算結果データが、前記出力先レジスタである前記複数のレジスタのいずれかに出力され、
前記複数の演算器が、前記第１命令に基づいて、前記複数のレジスタの少なくとも一つのデータを用いたベクトル演算を実行して演算結果データを出力する
プログラム。
【請求項１５】
請求項１１乃至１４のいずれか一項に記載のプログラムにおいて、
前記複数の命令の依存関係は、同一レジスタに対して先行命令が読み出しで後続命令が書き込みの関係、又は、同一レジスタに対して先行命令が書き込みで後続命令が書き込みの関係、である
プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ベクトル演算装置及びベクトル演算方法に関する。
【背景技術】
【０００２】
ベクトル演算装置が知られている。図１は、ベクトル演算装置の構成の一例を示すブロック図である。このベクトル演算装置は、演算部１０１と、演算制御部１０２と、演算制御パス１０３とを具備する。演算部１０１は、ベクトル演算が可能である。演算制御部１０２は、命令発行制御を行い、演算部１０１を制御する。演算制御パス１０３は、演算部１０１と演算制御部１０２とを接続し、演算制御部１０２から演算部１０１に対して制御信号を送る。
【０００３】
演算部１０１は、ＶＲ０＿１１１−０〜ＶＲｎ＿１１１−ｎ（図１ではｎ＝３とする。以下同じ。）と、演算器０＿１１２−０〜演算器ｍ＿１１２−ｍ（図１ではｍ＝１とする。以下同じ。）と、クロスバ１１３と、ストアセレクタ１１６と、定数部１１７と、定数パス１１８−０〜１１８−ｍと、ＶＲリードパス１１９−０〜１１９−ｎと、演算結果パス１０１Ａ−０〜１０１Ａ−ｍと、バイパスパス１０１Ｂ−０〜１０１Ｂ−ｍと、ＶＲライトパス１０１Ｃ−０〜１０１Ｃ−ｎと、ストアパス１０１Ｅとを備える。
【０００４】
ＶＲ（ベクトルレジスタ）０＿１１１−０〜ＶＲｎ＿１１１−ｎ（図１ではｎ＝３とする。以下同じ。）は、複数の要素数で構成され、演算のオペランドとなるベクトルデータを保持する。演算器０＿１１２−０〜演算器ｍ＿１１２−ｍ（図１ではｍ＝１とする。以下同じ。）は、ＶＲ０＿１１１−０〜ＶＲｎ＿１１１−ｎのデータ、又は定数を用いてベクトル演算が可能である。演算器０＿１１２−０〜演算器ｍ＿１１２−ｍの個数は、ＶＲ０＿１１１−０〜ＶＲｎ＿１１１−ｎの個数と同数である必要はない。クロスバ１１３は、演算器０＿１１２−０〜演算器ｍ＿１１２−ｍの演算結果を、ＶＲ０＿１１１−０〜ＶＲｎ＿１１１−ｎのうちの任意のＶＲへ振り分ける。ストアセレクタ１１６は、ＶＲ０＿１１１−０〜ＶＲｎ＿１１１−ｎのデータをメモリに書き込む際、ＶＲ０＿１１１−０〜ＶＲｎ＿１１１−ｎから読み出したデータを選択する。定数部１１７は、定数を使用した演算を行う場合、定数を発生させる。ここでは、ＶＲの数は４（ｎ＝３）、演算器の数は２（ｍ＝１）とする。
【０００５】
定数パス１１８−０〜１１８−ｍは、演算器０＿１１２−０〜演算器ｍ＿１１２−ｍに、演算に用いる定数を供給する。ＶＲリードパス１１９−０〜１１９−ｎは、ＶＲ０＿１１１−０〜ＶＲｎ＿１１１−ｎと演算器０＿１１２−０〜演算器ｍ＿１１２−ｍ及びストアセレクタ１１６とを接続する。演算結果パス１０１Ａ−０〜１０１Ａ−ｍは、演算器０＿１１２−０〜演算器ｍ＿１１２−ｍとクロスバ１１３とを接続する。バイパスパス１０１Ｂ−０〜１０１Ｂ−ｍは、演算結果パス１０１Ａ−０〜１０１Ａ−ｍそれぞれに対応し、１つの演算結果パス１０１Ａを全ての演算器０＿１１２−０〜演算器ｍ＿１１２−ｍに接続し、演算結果を入力オペランドとして演算器０＿１１２−０〜演算器ｍ＿１１２−ｍに供給する。ＶＲライトパス１０１Ｃ−０〜１０１Ｃ−ｎは、クロスバ１１３とＶＲ０＿１１１−０〜ＶＲｎ＿１１１−ｎとを接続する。ストアパス１０１Ｅは、ストアセレクタ１１６からメモリアクセス部（図示されず）にストアデータを送る。
【０００６】
演算制御部１０２は、命令の発行によって、演算部１の制御を行う命令発行部１２１を備える。
命令発行部１２１は、バイパス部２１３と発行部２１４とを含む。バイパス部２１３は、ＶＲ０＿１１１−０〜ＶＲｎ＿１１１−ｎを介さずに、バイパスパス部１０１Ｂ−０〜１０１Ｂ−ｍから演算器０＿１１２−０〜演算器ｍ＿１１２−ｍへデータを供給し、バイパス演算を制御する。発行部２１４は、全ての命令の発行を行う。
【０００７】
次に、図１の場合において、同一のＶＲに対して、先行Ｒｅａｄ、後続Ｗｒｉｔｅ（Ｗｒｉｔｅ  ａｆｔｅｒ  Ｒｅａｄ、以下Ｒ−Ｗと略す）の依存関係の場合の動作について説明する。ここで対象となる３命令を、以下の３命令とする。ここでは、以下の３命令において、ＶＲ０に関し、命令１で読み出し、命令２で書き込みを行い、命令２での書き込みを命令３で読み出す演算を行う。命令２と命令３と間は、真の依存関係となり、順序保障が必要となる。
命令１：ＶＲ０とＶＲ１をベクトル加算し、結果をＶＲ２に格納
（ｖｆａｄ：ＶＲ２←ＶＲ０、ＶＲ１）。
命令２：定数ＣとＶＲ３をベクトル乗算し、結果をＶＲ０に格納
（ｖｆｍｐ：ＶＲ０←定数Ｃ、ＶＲ３）。
命令３：ＶＲ０とＶＲ１をベクトル加算し、結果をＶＲ３に格納
（ｖｆａｄ：ＶＲ３←ＶＲ０、ＶＲ１）。
ここでは各命令で演算する要素数は４とする。また、命令２の演算結果は、ＶＲを介して命令３へ供給されるものとする。
【０００８】
次に、図１のベクトル演算装置の動作について説明する。図２は、図１のベクトル演算装置の動作を示すフローチャートである。Ｓ１０１で、発行部２１４において、命令間の依存関係を分析する。命令１と命令２との間にＲ−Ｗの依存関係が有ると判別され、命令２と命令３との間に、先行Ｗｒｉｔｅ、後続Ｒｅａｄ（Ｒｅａｄ  ａｆｔｅｒ  Ｗｒｉｔｅ、以下Ｗ−Ｒと略す）の依存関係が有ると判別される。命令１は、命令１より先行する命令との依存関係が無いため、Ｓ１０２へ進む。命令２、命令３は、自身より先行する命令との依存関係が検出されなくなるまで、時刻毎にＳ１０１を繰り返す。以降、命令１の動作を説明する。
【０００９】
Ｓ１０２で、バイパス部２１３にて、バイパス演算が可能か判定される。ここでは、命令１はＶＲからオペランドデータを読み出すため、バイパスは不可能と判定され、Ｓ１０８に進む。Ｓ１０８で、発行部２１４において、演算リソースの状態から、命令１が発行可能か判定する。発行可能な場合は、Ｓ１０９へ進む。発行が不可能な場合は、Ｓ１０１へ戻る。Ｓ１０９で、発行部２１４にて、命令１が発行される。このとき、演算制御パス１０３を通じ、ＶＲ０とＶＲ１の内容を演算器０で演算し、演算結果をＶＲ２へ書き込む指示が、演算部１０１へ送られる。Ｓ１１０で、命令１が使用するＶＲが読み出される。Ｓ１０６で、命令１の演算（ＶＲ０とＶＲ１をベクトル加算）が行われる。Ｓ１０７で、命令１の演算結果が、ＶＲに書き込まれる（結果をＶＲ２に格納）。命令２、命令３に関しても、命令１と同様のフローに従って処理される。
【００１０】
次に、上記命令１、２、３の動作について説明をする。図３は、図２の動作における命令１、２、３の動作を示すタイムチャートである。この図は、命令１、２におけるＲ−Ｗの依存関係、命令２、３におけるＷ−Ｒの依存関係を示している。時刻１０で、命令１（ｖｆａｄ）に関し、Ｓ１０１、Ｓ１０２、Ｓ１０８、Ｓ１０９が処理され、命令１が発行される。図中、「１  ｖｆａｄ」は、発行された命令が命令１：ｖｆａｄであることを示している。その後、時刻１３で、命令１によりＶＲ０、ＶＲ１の読み出しが始まり、演算が開始される。命令１は４要素であるため、４時刻連続して、ＶＲの読み出しと演算が行われる。図中、「ＶＲ０  Ｒｅａｄ  Ｓｔａｒｔ」はＶＲ０からのデータの読み出しが始まることを示している。また、「ＶＲ０、ＶＲ１」は演算器への入力がＶＲ０、ＶＲ１のデータであること、「１  ｖｆａｄ」は実行される演算が命令１：ｖｆａｄであることをそれぞれ示している。そして、時刻２０で、命令１の演算結果のＶＲ２への書き込みが始まる。図中、「ＶＲ２」は演算結果の書き込み先がＶＲ２であることを示している。
【００１１】
時刻１２で、命令２（ｖｆｍｐ）に関し、Ｓ１０１、Ｓ１０２、Ｓ１０８、Ｓ１０９が処理され、命令２が発行される。以降の命令２の動作は、命令１を２時刻遅らせたものと同様である。その後、時刻１９で、命令３（ｖｆａｄ）に関し、Ｓ１０１、Ｓ１０２、Ｓ１０８、Ｓ１０９が処理され、命令３が発行される。以降の命令２の動作は、命令１を９時刻遅らせたものと同様である。命令２に関し、時刻２２でＶＲ０に書き込みが開始され、命令３に関し、時刻２２でＶＲ０を読み出しが開始される。
命令１、２、３が発行される順序は、ＶＲの依存関係により、命令順となっている。
【００１２】
次に、図１のベクトル演算装置の場合において、同一ＶＲに対して、先行でＷｒｉｔｅ、後続でＷｒｉｔｅ（Ｗｒｉｔｅ  ａｆｔｅｒ  Ｗｒｉｔｅ、以下Ｗ−Ｗと略す）の依存関係の場合の動作について説明する。ここで対象となる３命令を、以下の３命令とする。ここでは、以下の３命令において、ＶＲ０に関し、命令１で書き込み、命令２で書き込みを行い、命令３で読み出す演算を行う。ただし、命令２と命令３との間は、真の依存関係となり、順序保障が必要となる。
命令１：ＶＲ０とＶＲ１をベクトル加算し、結果をＶＲ０に格納
（ｖｆａｄ：ＶＲ０←ＶＲ０、ＶＲ１）
命令２：定数ＣとＶＲ３をベクトル乗算し、結果をＶＲ０に格納
（ｖｆｍｐ：ＶＲ０←定数Ｃ、ＶＲ３）
命令３：ＶＲ０とＶＲ１をベクトル加算し、結果をＶＲ３に格納
（ｖｆａｄ：ＶＲ３←ＶＲ０、ＶＲ１）
ここでは各命令で演算する要素数は４とする。
【００１３】
次に、図１のベクトル演算装置の動作について、図２のフローチャートを用いて説明する。この動作は、Ｒ−Ｗ依存の動作の説明にて、Ｒ−ＷをＷ−Ｗと読み替えた場合と同様である。
【００１４】
次に、上記命令１、２、３の動作について説明をする。図４は、図２の動作における命令１、２、３の動作を示すタイムチャートである。この図は、命令１、２におけるＷ−Ｗの依存関係、命令２、３におけるＷ−Ｒの依存関係を示している。
時刻１０で、図３で示したＲ−Ｗ依存と同様に、命令１（ｖｆａｄ）が発行される。時刻１３で、Ｒ−Ｗ依存関係の場合と同様に命令１によりＶＲ０、ＶＲ１の読み出しが始まり、演算が開始される。図中、「ＶＲ０、ＶＲ１」は演算器への入力がＶＲ０、ＶＲ１のデータであること、「１  ｖｆａｄ」は実行される演算が命令１：ｖｆａｄであることをそれぞれ示している。時刻２０では、Ｒ−Ｗ依存関係の場合と同様に命令１の演算結果のＶＲ０への書き込みが始まる。図中、「ＶＲ０」は演算結果の書き込み先がＶＲ０であることを示している。また、「ＶＲ０  Ｗｒｉｔｅ  Ｓｔａｒｔ」はＶＲ０へのデータの書き込みが始まることを示している。時刻２３では、命令１の演算結果のＶＲ０への書き込みが終わる。
【００１５】
時刻１４で、図３で示したＲ−Ｗ依存と同様に、命令２（ｖｆｍｐ）が発行される。以降の命令２の動作は、命令１を４時刻遅らせたものと同様である。時刻２１で、図３で示したＲ−Ｗ依存と同様に、命令３（ｖｆａｄ）が発行される。以降の命令３の動作は、命令１を１１時刻遅らせたものと同様である。
命令１に関し、時刻２３でＶＲ０へ書き込みが終了し、命令２に関し、時刻２４でＶＲ０へ書き込みが開始され、命令３に関し、時刻２４でＶＲ０から読み出しが開始される。
命令１、２、３が発行される順序は、ＶＲの依存関係により、命令順となっている。
【００１６】
次に、図１の場合において、同一ＶＲに対して、Ｗ−Ｗ依存の動作、及び、ストア命令の動作について説明する。ここで、対象となる３命令を、以下の３命令とする。ここでは、以下の３命令において、ＶＲ０に関し、命令１で書き込み、命令２で書き込みを行い、命令３で読み出す演算を行う。ただし、命令２と命令３間は、真の依存関係となり、順序保障が必要となる。
命令１：ＶＲ０とＶＲ１をベクトル加算し、結果をＶＲ０に格納
（ｖｆａｄ：ＶＲ０←ＶＲ０、ＶＲ１）
命令２：定数ＣとＶＲ３をベクトル乗算し、結果をＶＲ０に格納
（ｖｆｍｐ：ＶＲ０←定数Ｃ、ＶＲ３）
命令３：ＶＲ０をメモリにストア
（ｖｓｔ：Ｍ←ＶＲ０）
ここでは各命令で演算する要素数は４とする。
【００１７】
次に、図１のベクトル演算装置の動作について、図２のフローチャートを用いて説明する。これは、Ｗ−Ｗ依存動作の説明と同様である。ただし、Ｓ１０６で、ストアパス使用、Ｓ１０７でメモリへ送出と読み替える。
【００１８】
次に、上記命令１、２、３の動作について説明をする。図５は、図２の動作における命令１、２、３の動作を示すタイムチャートである。この図は、命令１、２におけるＷ−Ｗの依存関係、及び命令３がストア命令である場合の命令２、３におけるＲ−Ｗの依存関係の動作を示している。時刻１０で、図４で示したＷ−Ｗ依存と同様に、命令１（ｖｆａｄ）が発行される。以降の命令１の動作は、図４で示したＷ−Ｗ依存と同様である。時刻１４で、図４で示したＷ−Ｗ依存と同様に、命令２（ｖｆｍｐ）が発行される。以降の命令２の動作は、図４で示したＷ−Ｗ依存と同様である。時刻２１で、図４で示したＷ−Ｗ依存と同様に、命令３（ｖｓｔ）が発行される。時刻２４で、Ｓ１１０が処理され、ＶＲ０が読み出される。時刻２８で、Ｓ１０６、Ｓ１０７が処理される。ＶＲ０から読み出したデータは、ストアパスを経由し、メモリへ送られる。命令１に関し、時刻２３でＶＲ０へ書き込みが終了し、命令２に関し、時刻２４でＶＲ０へ書き込みが開始され、命令３に関し、時刻２４でＶＲ０から読み出しが開始される。
命令１、２、３が発行される順序は、ＶＲの依存関係により、命令順となっている。
【００１９】
次に、図１の場合において、バイパス演算の動作について説明する。ここで対象となる３命令を、以下の３命令とする。ここでは、以下の３命令において、ＶＲ０に関し、命令１で読み出し、命令２で書き込みを行い、命令３で読み出す演算を行う。ただし、命令２と命令３間は、真の依存関係となり、順序保障が必要となる。
命令１：ＶＲ０とＶＲ１をベクトル加算し、結果をＶＲ２に格納
（ｖｆａｄ：ＶＲ２←ＶＲ０、ＶＲ１）
命令２：定数ＣとＶＲ３をベクトル乗算し、結果をＶＲ０に格納
（ｖｆｍｐ：ＶＲ０←定数Ｃ、ＶＲ３）
命令３：ＶＲ０とＶＲ１をベクトル加算し、結果をＶＲ３に格納
（ｖｆａｄ：ＶＲ３←ＶＲ０、ＶＲ１）
ここでは、各命令で演算する要素数は４とする。
【００２０】
次に、図１のベクトル演算装置の動作について、図２のフローチャートを用いて説明する。これは、命令１、２に関し、Ｒ−Ｗ依存と同様である。命令３に関し、次のフローで動作する。
Ｓ１０１で、命令２の発行後、依存関係が無くなり、Ｓ１０２へ進む。Ｓ１０２で、バイパス部２１３にて、バイパス演算が可能か判定される。ここでは、命令３は命令２の演算結果を、バイパスパス１０１Ｂ−０〜１０１Ｂ−１経由で受け取るバイパス演算が可能と判定され、Ｓ１０３へ進む。バイパス演算が不可能な場合は、Ｓ１０８へ進み、Ｒ−Ｗ依存の命令３と同様である。
【００２１】
Ｓ１０３で、発行部２１４において、演算リソースの状態から、命令３がバイパス演算として発行可能か判定する。発行可能な場合は、Ｓ１０４へ進む。発行が不可能な場合は、Ｓ１０１へ戻る。Ｓ１０４で、発行部２１４にて、命令３が発行される。このとき、演算制御パス１０３を通じ、バイパスパス１０１Ｂ−１からのデータ及びＶＲ１の内容を用いて、演算器０＿１１２−０で演算し、演算結果をＶＲ３へ書き込む指示が、演算部１へ送られる。Ｓ１０５で、命令３のＶＲ０に相当するデータは、バイパスパス１０１Ｂ−１を使用して演算器０_１１２−０へ供給され、ＶＲ１が読み出される。Ｓ１０６で、命令３の演算が行われる。Ｓ１０７で、命令３の演算結果が、ＶＲに書き込まれる。
【００２２】
次に、上記命令１、２、３の動作について説明をする。図６は、図２の動作における命令１、２、３の動作を示すタイムチャートである。この図は、命令１、２におけるＲ−Ｗの依存関係、命令２、３におけるＷ−Ｒの依存関係で、かつバイパス演算の動作を示している。
時刻１０で、図３で示したＲ−Ｗ依存と同様に、命令１（ｖｆａｄ）が発行される。図中、「１  ｖｆａｄ」は、発行された命令が命令１：ｖｆａｄであることを示している。その後、時刻１３で、命令１によりＶＲ０、ＶＲ１の読み出しが始まり、演算が開始される。命令１は４要素であるため、４時刻連続して、ＶＲの読み出しと演算が行われる。図中、「ＶＲ０  Ｒｅａｄ  Ｓｔａｒｔ」はＶＲ０からのデータの読み出しが始まることを示している。また、「ＶＲ０、ＶＲ１」は演算器への入力がＶＲ０、ＶＲ１のデータであること、「１  ｖｆａｄ」は実行される演算が命令１：ｖｆａｄであることをそれぞれ示している。そして、時刻２０で、命令１の演算結果のＶＲ２への書き込みが始まる。図中、「ＶＲ２」は演算結果の書き込み先がＶＲ２であることを示している。
【００２３】
時刻１２で、図３で示したＲ−Ｗ依存と同様に、命令２（ｖｆｍｐ）が発行される。以降の命令２の動作は、命令１を２時刻遅らせたものと同様である。時刻１７で、命令３に関し、Ｓ１０１、Ｓ１０２、Ｓ１０３、Ｓ１０４が処理され、命令３（ｖｆａｄ）が発行される。時刻２０で、命令３に関し、Ｓ１０５、Ｓ１０６が処理され、ＶＲ０に相当するデータは、バイパスパス１０１Ｂ−１を使用して演算器０＿１１２−０へ供給され、ＶＲ１が読み出される。演算器０＿１１２−０では、命令３の演算が行われる。時刻２７で、命令３に関し、Ｓ１０６−Ｓ１０７が処理され、ＶＲ３に演算結果が書き込まれる。
【００２４】
特開２００６−２６８１６８号公報にベクトル命令管理回路、ベクトル処理装置、ベクトル命令管理方法、ベクトル処理方法、ベクトル命令管理プログラム、および、ベクトル処理プログラムが開示されている。このベクトル命令管理回路は、以下の動作を行う手段を有する。入力した後続ベクトル命令により書き込みが指定された論理ベクトルレジスタと同一論理ベクトルレジスタに書き込みを行う先行ベクトル命令が存在しなければ、事前に設定された論理にしたがって、後続ベクトル命令の論理ベクトルレジスタ番号に対し物理ベクトルレジスタ番号を割り付ける。同一論理ベクトルレジスタに書き込みを行う１以上の先行ベクトル命令が存在すれば、後続ベクトル命令のマスクフラグが有効を示しているか、または、後続ベクトル命令のベクトル長≦（あるいは、＜）最新先行ベクトル命令のベクトル長であると、後続ベクトル命令の論理ベクトルレジスタ番号に対し最新先行ベクトル命令に割り付けられたものと同一の物理ベクトルレジスタ番号を割り付ける。後続ベクトル命令のマスクフラグが有効を示しておらず、かつ、後続ベクトル命令のベクトル長≦（あるいは、＜）最新先行ベクトル命令のベクトル長でないと、後続ベクトル命令の論理ベクトルレジスタ番号に対し実行中のすべての先行ベクトル命令に割り付けられた物理ベクトルレジスタ番号とは異なる物理ベクトルレジスタ番号を割り付ける。
【００２５】
特開平５−２２４９２７号公報（対応米国特許：ＵＳ５５１１１７２（Ａ））にプロセッサが開示されている。このプロセッサは、複数の実行ユニットを有し、メモリにある命令列の命令を並列に処理する。
このプロセッサは、命令種別判別手段と、命令並列発行手段と、分岐判定手段と、実行結果管理手段とを備える。命令種別判別手段は、実行前の命令列に含まれ、条件が他の命令に依存する条件分岐命令の種類を判別する。命令並列発行手段は、分岐の成否が決定されるまでの間、条件分岐命令の種類に応じて、実行ユニットに対して、分岐先の命令列及び／又は後続する命令列の命令を実行ユニットに対して並列発行する。分岐判定手段は、前記条件分岐が依存する他の命令が実行されたとき、条件分岐命令の分岐の成否を判定する。実行結果管理手段は、条件分岐命令の分岐の成否の判定結果によって、命令列の実行結果の有効無効を識別する。
【００２６】
特開平７−３３４４８７号公報にベクトル演算装置が開示されている。このベクトル演算装置は、ベクトルデータを保持する複数のベクトルレジスタと、前記ベクトルレジスタから得た複数のベクトルデータに対する演算を実行する幾つかのベクトル演算器と、前記ベクトルレジスタおよび前記ベクトル演算器を用いた演算の実行状態を管理して続く命令の実行を指示する命令実行管理部とを有する。このベクトル演算装置は、（Ａ）第１の選択回路と、（Ｂ）第２の選択回路と、（Ｃ）タイミング指示手段と、（Ｄ）第１の選択制御手段と、（Ｅ）第２の選択制御手段と、を備える。第１の選択回路は、前記ベクトル演算器に入力される第１の入力データを前記ベクトル演算器の第１の入力に対応させた第１のベクトルレジスタの読出しデータと前記第１のベクトルレジスタへの書込みデータとを選択する。第２の選択回路は、前記ベクトル演算器に入力される第２の入力データを前記ベクトル演算器の第２の入力に対応させた第２のベクトルレジスタの読出しデータと前記第２のベクトルレジスタへの書込みデータとを選択する。タイミング指示手段は、前記命令実行管理部にあって実行しようとする命令が連続にデータを処理する命令であり、先行する命令の結果の書込みデータを前記ベクトルレジスタの１つに書込むときに、書込まれるタイミングを示すタイミング指示回路が複数の前記ベクトルレジスタに対応してそれぞれ存在する。第１の選択制御手段は、前記命令実行管理部にあって実行しようとする命令が前記ベクトル演算器の使用命令であり、前記ベクトル演算器の第１の入力データとして使用する前記ベクトルレジスタが先行する命令により書込み動作を行っているときには、前記タイミング指示手段からの信号により前記第１の選択回路を前記第１のベクトルレジスタへの書込みデータ側に切替える。第２の選択制御手段は、前記命令実行管理部にあって実行しようとする命令が前記ベクトル演算器の使用命令であり、前記ベクトル演算器の第２の入力データとして使用する前記ベクトルレジスタが先行する命令により書込み動作を行っているときには、前記タイミング指示手段からの信号により前記第２の選択回路を前記第２のベクトルレジスタへの書込みデータ側に切替える。
【００２７】
特開平１０−４０１０５号公報（対応米国特許：ＵＳ６２９８４３５（Ｂ１））にリネーム・レジスタを割り付ける方法及びプロセッサが開示されている。このプロセッサは、一組のＮ個の物理リネーム・レジスタと、前記Ｎ個の物理リネーム・レジスタのうちの一つが命令の結果を受け取り得る状態になる前に、前記Ｎ個の物理リネーム・レジスタのうちの一つを該命令に割り付ける事前割り付け回路とを含む。
【先行技術文献】
【特許文献】
【００２８】
【特許文献１】特開２００６−２６８１６８号公報
【特許文献２】特開平５−２２４９２７号公報
【特許文献３】特開平７−３３４４８７号公報
【特許文献４】特開平１０−４０１０５号公報
【発明の概要】
【発明が解決しようとする課題】
【００２９】
ベクトル演算装置におけるレジスタリネーミングとして、論理レジスタ以外にリネームレジスタを用いる方法、又は、論理レジスタ以外に論理レジスタのｎ倍の物理レジスタを用いる方法がある。いずれの方法でも、論理レジスタ数に対して、多くのレジスタを必要としている。そのため、この多くのレジスタが必要なことがハードウェア量の増大を招いていた。加えて、この多くのレジスタが必要なことがレジスタ番号を管理する制御を非常に複雑にしていた。
【００３０】
本発明の目的は、ハードウェア量の増大やレジスタ制御の複雑さを抑制しながら、システム性能を向上させることが可能なベクトル演算装置及びベクトル演算方法を提供することにある。
【課題を解決するための手段】
【００３１】
本発明のベクトル演算装置は、ベクトル演算が可能な演算部と、演算部を制御する演算制御部とを具備する。演算部は、複数のレジスタと、複数のレジスタに格納されたデータを用いてベクトル演算を実行する複数の演算器と、複数の演算器の演算結果データを一時的に格納可能なデータバッファとを備える。演算制御部は、演算部へベクトル演算に関する複数の命令を発行する命令発行部と、データバッファの管理に関する管理情報を保持するデータバッファ管理部とを備える。命令発行部は、複数のレジスタのうちの同一レジスタにおける複数の命令の依存関係に基づいて、複数の命令のうち、第１命令と第２命令との間で順番変更が可能な場合、演算結果データをデータバッファに格納するように第２命令を編集して発行する。データバッファ管理部は、編集された第２命令の発行に基づいて、データバッファの出力先レジスタ及び順番変更の変更相手である第１命令の情報を管理情報に格納する。複数の演算器のうちの一つは、編集された第２命令に基づいて、複数のレジスタの少なくとも一つのデータを用いてベクトル演算を実行して演算結果データを出力する。データバッファは、出力された演算結果データを一時的に格納する。
【００３２】
本発明のベクトル演算装置を用いたベクトル演算方法において、ベクトル演算装置は、複数のレジスタと、複数のレジスタに格納されたデータを用いてベクトル演算を実行する複数の演算器と、複数の演算器の演算結果データを一時的に格納可能なデータバッファとを備える。本発明のベクトル演算方法は、複数のレジスタのうちの同一レジスタにおける複数の命令の依存関係に基づいて、複数の命令のうち、第１命令と第２命令との間で順番変更が可能な場合、演算結果データを前記データバッファに格納するように第２命令を編集して発行するステップと、編集された第２命令の発行に基づいて、データバッファの出力先レジスタ及び順番変更の変更相手である第１命令の情報を、データバッファの管理に関する管理情報に格納するステップと、複数の演算器のうちの一つにより、編集された第２命令に基づいて、複数のレジスタの少なくとも一つのデータを用いてベクトル演算を実行して演算結果データを出力するステップと、データバッファに、出力された演算結果データを一時的に格納するステップとを具備する。
【００３３】
本発明のベクトル演算装置を用いたベクトル演算方法をコンピュータとしての前記ベクトル演算装置に実行させるプログラムにおいて、ベクトル演算装置は、ベクトル演算が可能な演算部と、演算部を制御する演算制御部とを具備する。演算部は、複数のレジスタと、複数のレジスタに格納されたデータを用いてベクトル演算を実行する複数の演算器と、複数の演算器の演算結果データを一時的に格納可能なデータバッファとを備える。演算制御部は、演算部へベクトル演算に関する複数の命令を発行する命令発行部と、データバッファの管理に関する管理情報を保持するデータバッファ管理部とを備える。本発明のコンピュータは、命令発行部が、複数のレジスタのうちの同一レジスタにおける複数の命令の依存関係に基づいて、複数の命令のうち、第１命令と第２命令との間で順番変更が可能な場合、演算結果データを前記データバッファに格納するように第２命令を編集して発行するステップと、データバッファ管理部が、編集された第２命令の発行に基づいて、データバッファの出力先レジスタ及び順番変更の変更相手である第１命令の情報を、データバッファの管理に関する管理情報に格納するステップとを具備する。このとき、複数の演算器のうちの一つは、編集された第２命令に基づいて、複数のレジスタの少なくとも一つのデータを用いてベクトル演算を実行して演算結果データを出力し、データバッファは、出力された演算結果データを一時的に格納する。
【発明の効果】
【００３４】
本発明により、ハードウェア量の増大やレジスタ制御の複雑さを抑制しながら、システム性能を向上させることが可能なベクトル演算装置及びベクトル演算方法を提供することができる。
【図面の簡単な説明】
【００３５】
【図１】図１はベクトル演算装置の構成の一例を示すブロック図である。
【図２】図２は図１のベクトル演算装置の動作を示すフローチャートである。
【図３】図３は図２のベクトル演算装置の動作における各命令の動作を示すタイムチャートである。
【図４】図４は図２のベクトル演算装置の動作における各命令の動作を示すタイムチャートである。
【図５】図５は図２のベクトル演算装置の動作における各命令の動作を示すタイムチャートである。
【図６】図６は図２のベクトル演算装置の動作における各命令の動作を示すタイムチャートである。
【図７】図７は本発明の第１の実施の形態に係るベクトル演算装置の構成を示すブロック図である。
【図８Ａ】図８Ａは情報保持部が保持するデータを示すテーブルである。
【図８Ｂ】図８Ｂは情報保持部が保持するデータの内容の一例を示すテーブルである。
【図８Ｃ】図８Ｃは情報が登録された情報保持部が保持するデータの内容を示すテーブルである。
【図８Ｄ】図８ＤはＲｅａｄｙビットがセットされた情報保持部が保持するデータの内容を示すテーブルである。
【図９Ａ】図９Ａはエントリ制御部の動作表を示すテーブルである。
【図９Ｂ】図９ＢはＲｅａｄｙビット操作に関するＩＤ比較部の動作表を示すテーブルである。
【図９Ｃ】図９Ｃは発行許可部の動作表を示すテーブルである。
【図９Ｄ】図９ＤはＶＲ番号比較部の動作表を示すテーブルである。
【図９Ｅ】図９Ｅはバイパス検出部の動作表を示すテーブルである。
【図１０】図１０は本発明の実施の形態に係るベクトル演算装置の動作を示すフローチャートである。
【図１１】図１１は本発明の実施の形態に係るベクトル演算装置の動作を示すフローチャートである。
【図１２】図１２は本発明の実施の形態に係るベクトル演算装置の動作を示すフローチャートである。
【図１３】図１３は図７のベクトル演算装置の動作における各命令の動作を示すタイムチャートである。
【図１４】図１４は図７のベクトル演算装置の動作における各命令の動作を示すタイムチャートである。
【図１５】図１５は本発明の第２の実施の形態に係るベクトル演算装置の構成を示すブロック図である。
【図１６】図１６は本発明の第２の実施の形態に係るベクトル演算装置の動作を示すフローチャートである。
【図１７】図１７は図１５のベクトル演算装置の動作における各命令の動作を示すタイムチャートである。
【図１８】図１８は本発明の第３の実施の形態に係るベクトル演算装置の構成を示すブロック図である。
【図１９】図１９は本発明の第３の実施の形態に係るベクトル演算装置の動作を示すフローチャートである。
【図２０】図２０は図１８のベクトル演算装置の動作における各命令の動作を示すタイムチャートである。
【発明を実施するための形態】
【００３６】
以下、本発明のベクトル演算装置及びベクトル演算方法の実施の形態に関して、添付図面を参照して説明する。
【００３７】
（第１の実施の形態）
まず、本発明の第１の実施の形態に係るベクトル演算装置の構成について説明する。図７は、本発明の第１の実施の形態に係るベクトル演算装置の構成を示すブロック図である。このベクトル演算装置は、演算部１と、演算制御部２と、演算制御パス３とを具備する。演算部１は、ベクトル演算が可能である。演算制御部２は、命令の発行制御を行い、演算部１を制御する。演算制御パス３は、演算部１と演算制御部２とを接続し、演算制御部２から演算部１に対して制御信号を送る。
【００３８】
演算部１、演算制御部２、及び演算制御パス３とは、ハードウェア、ソフトウェア、及びハードウェアとソフトウェアとの組み合わせのいずれかにより実現可能である。例えば、演算部１及び演算制御パス３はそれらの機能を有する回路として、演算制御部２はＣＰＵやメインメモリと協働し、その機能を有するプログラムとして実現可能である。
【００３９】
演算部１は、ＶＲ０＿１１−０〜ＶＲｎ＿１１−ｎ（図７ではｎ＝３とする。以下同じ。）と、演算器０＿１２−０〜演算器ｍ＿１２−ｍ（図７ではｍ＝１とする。以下同じ。）と、クロスバ１３と、演算結果セレクタ１４と、データバッファ１５と、ストアセレクタ１６と、定数部１７と、定数パス１８−０〜１８−ｍと、ＶＲリードパス１９−０〜１９−ｎと、演算結果パス１Ａ−０〜１Ａ−ｍと、バイパスパス１Ｂ−０〜１Ｂ−ｍと、ＶＲライトパス１Ｃ−０〜１Ｃ−ｎと、バッファパス１Ｄと、ストアパス１Ｅと、セレクトパス１Ｆとを備える。
【００４０】
ＶＲ（ベクトルレジスタ）０＿１１−０〜ＶＲｎ＿１１−ｎ（図７ではｎ＝３とする。以下同じ。）は、複数のワード（以下、要素数ともいう）で構成され、演算の対象（以下、オペランドともいう）となるベクトルデータを保持する。ＶＲ０＿１１−０〜ＶＲｎ＿１１−ｎに対しては、命令で指定された数の要素を１マシンサイクル（以下、時刻ともいう）に１要素ずつ読み出し、書き込みが可能である。
【００４１】
演算器０＿１２−０〜演算器ｍ＿１２−ｍ（図７ではｍ＝１とする。以下同じ。）は、ＶＲ０＿１１−０〜ＶＲｎ＿１１−ｎのデータ、又は定数を用いてベクトル演算が可能である。演算器０＿１２−０〜演算器ｍ＿１２−ｍは、複数のオペランドが入力可能であり、各オペランドとして１時刻に１要素のベクトルデータ、もしくは、定数を受け取り、１時刻に１要素の演算結果を出力する事が可能である。演算器０＿１２−０〜演算器ｍ＿１２−ｍの個数は、ＶＲ０＿１１−０〜ＶＲｎ＿１１−ｎの個数と同数である必要はない。
【００４２】
演算結果セレクタ１４は、演算器０＿１２−０〜演算器ｍ＿１２−ｍの演算結果を選択し、後述のデータバッファ１５へ出力する。データバッファ１５は、複数ＶＲ分の容量を持ち、演算結果セレクタ１４の選択したデータを保持し、演算結果を一時的に保持する。
【００４３】
クロスバ１３は、演算器０＿１２−０〜演算器ｍ＿１２−ｍの演算結果、又は、後述のデータバッファ１５からのデータを、ＶＲ０＿１１−０〜ＶＲｎ＿１１−ｎのうちの任意のＶＲへ振り分ける。ストアセレクタ１６は、ＶＲ０＿１１−０〜ＶＲｎ＿１１−ｎのデータをメモリに書き込む際、ＶＲ０＿１１−０〜ＶＲｎ＿１１−ｎから読み出したデータを選択し、後述のストアパス１Ｅへ出力する。定数部１７は、定数を使用した演算を行う場合に、定数を発生させる。
【００４４】
定数パス１８−０〜１８−ｍは、定数部１７から、演算器０＿１２−０〜演算器ｍ＿１２−ｍそれぞれに対し、演算に用いる定数を供給する。ＶＲリードパス１９−０〜１９−ｎは、ＶＲ０＿１１−０〜ＶＲｎ＿１１−ｎと、演算器０＿１２−０〜演算器ｍ＿１２−ｍ及びストアセレクタ１６とを接続する。演算結果パス１Ａ−０〜１Ａ−ｍは、演算器０＿１２−０〜演算器ｍ＿１２−ｍと、クロスバ１３及び演算結果セレクタ１４とを接続する。バイパスパス１Ｂ−０〜１Ｂ−ｍは、演算結果パス１Ａ−０〜１Ａ−ｍそれぞれに対応して設けられ、１つの演算結果パスを全ての演算器へ接続して、演算結果を入力オペランドとして演算器に供給する。ＶＲライトパス１Ｃ−０〜１Ｃ−ｎは、クロスバ１３とＶＲ０＿１１−０〜ＶＲｎ＿１１−ｎとを接続する。バッファパス１Ｄは、データバッファ１５とクロスバ１３とを接続する。ストアパス１Ｅは、ストアセレクタ１６からメモリアクセス部（図示せず）にストアデータを送る。セレクトパス１Ｆは、演算結果セレクタ１４とデータバッファ１５とを接続する。
【００４５】
本実施の形態（図７）においては、ＶＲの数は４（ｎ＝３）とし、演算器の数は２（ｍ＝１）とする。また、ＶＲ０（１１−０）及びＶＲ１（１１−１）は、演算器０（１２−０）のそれぞれ第１オペランド及び第２オペランドとして接続されるものとする。同様に、ＶＲ２（１１−２）及びＶＲ３（１１−３）は、演算器１（１２−１）のそれぞれ第１オペランド及び第２オペランドとして接続されるものとする。そして、演算器０（１２−０）及び演算器１（１２−１）は、接続されているＶＲ及び定数を用いたベクトル演算が可能とする。
【００４６】
また、後続の演算は、先行する演算の演算結果がＶＲに書き込まれる前に、バイパスパス１Ｂ−０〜１Ｂ−１を経由して当該演算結果をオペランドデータとして受け取り、演算を実行することが可能である。このように、少なくとも１つのオペランドとして、ＶＲを経由せずに演算結果を受け取って行われる演算を、バイパス演算とする。すなわち、演算器は、ＶＲのデータ、演算器の演算結果、又は定数を用いてもベクトル演算が可能である。
【００４７】
演算制御部２は、命令発行部２１と、データバッファ管理部２２とを備える。命令発行部２１は、命令の発行によって、演算部１の制御を行う。データバッファ管理部２２は、データバッファ１５に格納されているデータの情報を保持する。そして、データバッファ１５からＶＲ０＿１１−０〜ＶＲｎ＿１１−ｎへの書き込み可能な条件を判別し、データバッファ１５の管理を行う。
【００４８】
命令発行部２１は、ＩＤ付加部２１１と、編集部２１２と、バイパス部２１３と、発行部２１４とを含む。ＩＤ付加部２１１は、全ての命令に対し、命令の識別番号（以下、命令ＩＤという）を付加する。編集部２１２は、データバッファ１５を使用した演算を行う場合、演算結果の書き込み先を命令で指定されたＶＲ０＿１１−０〜ＶＲｎ＿１１−ｎから、データバッファ１５に変更する。また、データバッファ管理部２２に保持されている情報を編集し、データバッファ１５から特定のＶＲ０＿１１−０〜ＶＲｎ＿１１−ｎへ書き込むための命令を生成する。バイパス部２１３は、ＶＲ０＿１１−０〜ＶＲｎ＿１１−ｎを介さずに、バイパスパス１Ｂ−０〜１Ｂ−ｍから演算器０＿１２−０〜演算器ｍ＿１２−ｍへデータを供給し、バイパス演算を制御する。発行部２１４は、データバッファ１５を使用の有無を問わず、全ての命令の発行を行う。発行部２１４は、命令間の依存関係を分析、判定する。発行部２１４は、演算リソース（例示：演算部１内の各ＶＲ、各演算器、各パスの使用状態）の状態に基づいて、命令２が命令１を追い越して発行が可能か否かや、後述されるライトバック命令が発行可能か否かを判定する。
【００４９】
データバッファ管理部２２は、情報保持部２２１と、エントリ制御部２２２と、ＩＤ比較部２２３と、発行許可部２２４とを含む。情報保持部２２１は、データバッファ１５に格納されているデータの情報の保持する。エントリ制御部２２２は、情報保持部２２１を参照して、データバッファ１５のエントリの有無を判別して使用可不可を判別する。ＩＤ比較部２２３は、命令発行部２１が発行した命令の命令ＩＤと、情報保持部２２１に保持している命令ＩＤとを比較する。発行許可部２２４は、情報保持部２２１を参照して、データバッファ１５内のデータをＶＲへ書き込む事が可能か判断する。
【００５０】
図８Ａは、情報保持部２２１が保持するデータを示すテーブルである。情報保持部２２１は、Ｖビット、ターゲットＶＲ、有効要素数、自命令ＩＤ、依存命令ＩＤ、及び、Ｒｅａｄｙビットの各フィールドに情報を保持する。Ｖビットは、情報保持部２２１の保持している情報の有効か無効かを示す。有効なら１、無効なら０となる。ターゲットＶＲは、データバッファ１５を使用した命令の書き込み先ＶＲ番号を格納し、データバッファ１５内のデータの書き込み先ＶＲ番号となる。有効要素数は、データバッファ１５内に格納されているデータの有効な要素数の情報を格納する。データバッファ１５を使用する命令による演算は、有効要素数が示す要素数分が行われたことになる。自命令ＩＤは、データバッファ１５を使用した命令の命令ＩＤを格納する。依存命令ＩＤは、データバッファ１５を使用した命令と、依存関係を持つ命令の命令ＩＤを格納する。Ｒｅａｄｙビットは、自命令ＩＤと依存命令ＩＤが一致したことを示す。一致したら１、一致しなければ０とする。情報保持部２２１は、複数のエントリを持ち、図８Ａで示す情報を各エントリに登録可能である。ここでは、１エントリとする。
【００５１】
図９Ａは、エントリ制御部２２２の動作表を示すテーブルである。Ｖは、情報保持部２２１に保持しているＶビットを意味する。ＩＤ一致は、情報保持部２２１に保持している自命令ＩＤと、命令発行部２１が発行した命令ＩＤを比較し、一致すれば１、一致しなければ０とする。Ｂｕｆ使用指示は、命令発行部２１が発行した命令に、データバッファ１５を使用する指示があれば１、指示がなければ０とする。エントリ操作は、Ｖ、ＩＤ一致、Ｂｕｆ使用指示で決定され、情報保持部２２１へ新規に情報を登録する場合はセット、情報保持部２２１を無効化する場合はリセットとする。この動作表（図９Ａ）に従うと、Ｖが０、かつ、Ｂｕｆ使用指示がある場合、情報保持部２２１のエントリに情報をセットする。Ｖが１、かつ、ＩＤ一致があれば、情報保持部２２１のエントリをリセットする。この動作表において、アスタリスク“＊”は、“Ｄｏｎ‘ｔ  ｃａｒｅ”とする（以下、各動作表で、同様である）。
【００５２】
図９Ｂは、Ｒｅａｄｙビット操作に関するＩＤ比較部２２３の動作表を示すテーブルである。Ｖは、情報保持部２２１に保持しているＶビットを示す。ＩＤ一致は、情報保持部２２１に保持している依存命令ＩＤと、命令発行部２１が発行した命令ＩＤを比較し、一致すれば１、一致しなければ０とする。Ｒｅａｄｙ操作は、Ｖ、ＩＤ一致で決定され、情報保持部２２１に保持しているＲｅａｄｙビットを１にするときにセットとする。この動作表（図９Ｂ）に従うと、Ｖが１、かつ、ＩＤ一致があれば、Ｒｅａｄｙビットをセットする。
【００５３】
図９Ｃは、発行許可部２２４の動作表を示すテーブルである。Ｖは、情報保持部２２１に保持しているＶビットを示す。Ｒｅａｄｙは、情報保持部２２１に保持しているＲｅａｄｙビットを示す。発行判定は、Ｖ、Ｒｅａｄｙで決定され、情報保持部２２１に保持している情報に基づいて、データバッファ１５内のデータをＶＲに書き込む動作の許可を意味する。この動作表に従うと、Ｖが１、かつ、Ｒｅａｄｙビットが１であれば、発行判定を許可とする。
【００５４】
次に、本実施の形態に係るベクトル演算装置の動作について説明する。ここでは、演算部１は、ＶＲ４個、演算器２個の構成を有するとする。命令フォーマット、システム構成、命令発行を制御する際の演算リソースの状態および発行可能な条件については、本発明の本質では無く、本明細書に接した当業者ならば容易に理解できるために省略する。また、ここでは、情報保持部２２１のエントリ数は１とする。
【００５５】
なお、本発明において、ＶＲの個数、演算器の個数は、上記の場合に限定されない。例えば、ＶＲの個数をＶＲ０〜ＶＲ７の８個（ｎ＝７）にし、ＶＲ０とＶＲ１のペア、又は、ＶＲ４とＶＲ５のペアを演算器０＿１２−０の第１オペランドと第２オペランドとし、ＶＲ２とＶＲ３のペア、又は、ＶＲ６とＶＲ７のペアを演算器１＿１２−１の第１オペランドと第２オペランドとする構成も可能である。
【００５６】
また、更に、演算器の個数を演算器０〜演算器３の４個（ｍ＝３）にし、ＶＲ０とＶＲ１を演算器０の第１オペランドと第２オペランドとし、ＶＲ２とＶＲ３を演算器１の第１オペランドと第２オペランドとし、ＶＲ４とＶＲ５を演算器２の第１オペランドと第２オペランドとし、ＶＲ６とＶＲ７を演算器３の第１オペランドと第２オペランドとする構成も可能である。
【００５７】
このとき、ＶＲの個数ｎ、演算器の個数ｍに対応して、演算結果パス１Ａ−０〜１Ａ−ｍ、バイパスパス１Ｂ−０〜１Ｂ−ｍ、ＶＲリードパス１Ｃ−０〜１Ｃ−ｎの接続関係と、クロスバ１３、演算結果セレクタ１４、ストアセレクタ１６の接続関係が変化する。
【００５８】
更に、本発明は、１個の演算器のオペランドが上記の場合のような２個に限定されるものではない。すなわち、１個の演算器に対して、１個のオペランドや３個以上のオペランドを有していてもよい。
【００５９】
はじめに、ベクトル演算装置の動作に関し、同一ＶＲに対し、先行命令で読み出し（Ｒｅａｄ）、後続命令で書き込む（Ｗｒｉｔｅ）依存関係の場合の動作について説明する。ここでは、以下の３命令において、ＶＲ０に関し、命令１で読み出し、命令２で書き込みを行い、命令２での書き込みを命令３で読み出す演算を行う。命令２と命令３間は、真の依存関係となり、順序保障が必要となる。
命令１：ＶＲ０とＶＲ１をベクトル加算し、結果をＶＲ２に格納
（ｖｆａｄ：ＶＲ２←ＶＲ０、ＶＲ１）
命令２：定数ＣとＶＲ３をベクトル乗算し、結果をＶＲ０に格納
（ｖｆｍｐ：ＶＲ０←定数Ｃ、ＶＲ３）
命令３：ＶＲ０とＶＲ１をベクトル加算し、結果をＶＲ３に格納
（ｖｆａｄ：ＶＲ３←ＶＲ０、ＶＲ１）
ここでは各命令で演算する要素数は４とする。
【００６０】
図１０は、本発明の第１の実施の形態に係るベクトル演算装置の動作を示すフローチャートである。まず、ステップＳ１１で、ＩＤ付加部２１１が、各命令にＩＤを付加する。ここでは、命令１、２、３のＩＤはそれぞれ１、２、３とする。次に、ステップＳ１２で、発行部２１４が、命令間の依存関係を分析する。命令１と命令２との間に、先行Ｒｅａｄ、後続Ｗｒｉｔｅ（Ｗｒｉｔｅ  ａｆｔｅｒ  Ｒｅａｄ、以下Ｒ−Ｗと略す）の依存関係、命令２と命令３間に、先行Ｗｒｉｔｅ、後続Ｒｅａｄ（Ｒｅａｄ  ａｆｔｅｒ  Ｗｒｉｔｅ、以下Ｗ−Ｒと略す）の依存関係があると判る。ここでは、Ｒ−Ｗの依存関係の有無に着目する。命令１と命令２と間には、Ｒ−Ｗの依存関係が有ると判別され、ステップＳ１３に進む。Ｒ−Ｗの依存関係が無ければ、ステップＳ２０（後述）へ進む。
【００６１】
ステップＳ１３で、エントリ制御部２２２が、情報保持部２２１を参照し、データバッファ１５が未使用状態か判定する。未使用状態であれば、データバッファ１５が使用可能と判断し、ステップＳ１４に進む。空きが無ければ、ステップＳ１９（後述）へ進む。図８Ｂは、情報保持部２２１が保持するデータの内容の一例を示す。この場合、Ｖは０、その他の内容はアスタリスク“＊”、すなわち“Ｄｏｎ‘ｔ  ｃａｒｅ”である。すなわち、Ｖが０なので、データバッファ１５が使用可能と判断される。
【００６２】
ステップＳ１４で、発行部２１４は、演算リソースの状態（例示：演算部１内の各ＶＲ、各演算器、各パスの使用状態）から、命令２が命令１を追い越して発行が可能か判定する。命令２が命令１を追い越して発行可能な場合には、ステップＳ１５へ進む。追い越し発行が不可能な場合には、ステップＳ１９へ進む。ステップＳ１５で、編集部２１２が、命令２による演算結果をデータバッファ１５に書き込むために必要な編集を、その命令２に対して行う。ステップＳ１６で、発行部２１４が、命令２を発行する。このとき、演算制御パス３を通じ、定数とＶＲ３の内容を、演算器（ここでは、演算器１＿１２−１とする）で演算し、演算結果をデータバッファ１５に書き込む指示（以下、データバッファ使用指示）が、命令２として演算部１へ送られる。
【００６３】
続いて、ステップＳ１７で、エントリ制御部２２２が、図９Ａの動作表に従い、Ｖが０、命令２がデータバッファ使用指示付きで発行されたので、エントリ操作をセットと判断する。このセットにより、情報保持部２２１に、命令２に関する情報が登録される。図８Ｃは、その状態において情報保持部２２１が保持するデータの内容を示す。このとき、Ｖに１、ターゲットＶＲに０（命令２より）、有効要素数に４、自命令ＩＤに２、依存命令ＩＤに１、Ｒｅａｄｙビットに０がそれぞれセットされる。そして、ステップＳ１８で、演算部１が命令２を実行し、命令２の演算結果をデータバッファ１５へ書き込む。
【００６４】
このとき演算部１の演算部１＿１２−１は、次のような動作を実行する。演算に使用するデータは、ＶＲ３＿１１−３から１時刻に１要素、連続して読み出される。ＶＲ３＿１１−３からのデータは、ＶＲリードパス１９−３を経由して、演算器１＿１２−１へオペランドデータとして供給される。定数Ｃは、定数部１７から定数パス１８−１を経由して演算器１＿１２−１へ供給される。演算器１＿１２−１は、ＶＲリードパス１９−３及び定数パス１８−１からのオペランドデータを順次ベクトル演算し、演算結果を演算結果パス１Ａ−１へ出力する。演算結果セレクタ１４は、演算結果パス１Ａ−１のデータを選択する。データバッファ１５は、演算結果セレクタ１４の選択したデータを書き込む。この一連の動作は、要素数４個分を連続して行われる。
【００６５】
ステップＳ１９で、ステップＳ１３でデータバッファ１５に空きが無い場合、又は、ステップＳ１４で追い越し発行が不可能な場合、命令２は命令１を追い越して発行されない。また、ステップＳ２０で、ステップＳ１２で依存性が無い場合、図１のベクトル演算装置と同様の発行制御を行う。
【００６６】
次に、上記プロセスにおける命令２の発行後の演算制御部２の動作、すなわち、ステップＳ１６後における演算制御部２での命令ＩＤの比較について説明する。図１１は、命令２の発行後の命令ＩＤの比較動作を示すフローチャートである。上記ステップＳ１６において命令１を追い越して命令２が発行され、その後に命令１が発行される。すなわち、ステップＳ２１で、命令発行部２１が、命令１を発行する。この命令１の発行により、演算部１は、命令１を実行する。次に、ステップＳ２２で、ＩＤ比較部２２３が、情報保持部２２１に保持している依存命令ＩＤ（図８Ｃ）と、命令発行部２１で発行された命令の命令ＩＤとを比較する。そして、ＩＤ比較部２２３が、ＩＤ一致を検出した場合、図９Ｂの動作表に従い、Ｒｅａｄｙビットのセットを判定する。ＩＤが一致すればステップＳ２３へ進む。ここでは、命令１が発行されているので命令ＩＤは１であり、一方依存命令ＩＤは図８Ｃに示すように１である。従って、ＩＤ比較部２２３は、ＩＤ一致を検出し、図９Ｂの動作表に従い、Ｒｅａｄｙビットのセットを判定する。ステップＳ２３で、情報保持部２２１は、Ｒｅａｄｙビットに１をセットする。図８Ｄは、この状態において情報保持部２２１が保持するデータの内容を示す。図８Ｃのデータに対してＲｅａｄｙビットに１がセットされた状態となる。なお、ステップＳ２２でＩＤが一致しなければステップＳ２４へ進む。ステップＳ２４、ステップＳ２５は、後述される。
【００６７】
このとき演算部１では、次のような動作により命令１を実行する。演算に使用するデータは、ＶＲ０＿１１−０及びＶＲ１＿１１−１から１時刻に１要素がデータとして連続して読み出される。ＶＲ０＿１１−０及びＶＲ１＿１１−１から読み出されたデータは、それぞれＶＲリードパス１９−０及びＶＲリードパス１９−１を経由し、演算器０＿１２−０へ第１オペランド及び第２オペランドとして供給される。演算器０＿１２−０は各オペランドデータを順次ベクトル演算し、演算結果を演算結果バス１Ａ−０へ出力する。クロスバ１３は、そのデータを受信し、命令１で指定されたＶＲ（ここではＶＲ２＿１１−２）へ、その受信したデータを送信する。その送信されたデータは、クロスバ１３からＶＲライトパス１Ｃ−２を経由し、ＶＲ０＿１１−２に書き込まれる。この一連の動作は、要素数４個分を連続して行われる。
【００６８】
次に、Ｒｅａｄｙビット点灯（ステップＳ２３）後の演算制御部２の動作、すなわち、データバッファ１５からの読み出しと、ＶＲへの書き込みの制御について説明する。図１２は、Ｒｅａｄｙビット点灯後のデータバッファ１５からの読み出し制御、及び、ＶＲへの書き込み制御を示すフローチャートである。まず、ステップＳ３１で、発行許可部２２４が、情報保持部２２１のＲｅａｄｙビットが点灯しているか（１がセットされているか）判定する。点灯していればステップＳ３２へ進む。点灯していなければ、時刻毎に点灯の判定を繰り返す。次に、ステップＳ３２で、発行許可部２２４が、Ｒｅａｄｙビットの点灯を確認すると、図９Ｃに示す動作表に従い、データバッファ１５のデータを読み出し、ＶＲへ書き込む命令（以下、ライトバック命令という）の発行を許可し、命令発行部２１へ通知する。ここでは、情報保持部２２１のターゲットＶＲに０が登録されているため（図８Ｄ）、ライトバック命令によりＶＲ０への書き込みが行われることになる。ただし、ライトバック命令の命令ＩＤは、データバッファ１５のデータを生成した演算の元々の命令である命令２と同じである。
【００６９】
次に、ステップＳ３３で、発行部２１４が、演算部１の状態（例示：演算部１内の各ＶＲ、各演算器、各パスの使用状態）から、ライトバック命令が発行可能か判定する。発行可能な場合は、ステップＳ３４へ進む。発行が不可能な場合は、ステップＳ３１に戻る。ステップＳ３４で、編集部２１２が、情報保持部２２１の情報（図８Ｄ）を、ライトバック命令に必要なフォーマットに編集する。このとき、ターゲットＶＲは書き込み先ＶＲ番号として、有効要素数はデータの要素数となる。ステップＳ３５で、発行部２１４が、ライトバック命令を発行する。このとき、演算制御パス３を通じ、データバッファ１５の内容を、ＶＲ０へ書き込む指示がライトバック命令として、演算部１へ送られる。ステップＳ３６で、データバッファ１５からデータが読み出される。ステップＳ３７で、演算部１は、ステップＳ３６で読み出されたデータを指定されたＶＲ（ＶＲ０）へ書き込む。
【００７０】
このとき演算部１では、次のような動作によりライトバック命令を実行する。まず、データバッファ１５から１時刻に１要素がデータとして連続して読み出される。データバッファ１５から読み出されたデータは、バッファパス１Ｄを経由し、クロスバ１３へ送信される。クロスバ１３は、そのデータを受信し、ライトバック命令で指定されたＶＲ（ここではＶＲ０＿１１−０）へ、その受信したデータを送信する。その送信されたデータは、クロスバ１３からＶＲライトパス１Ｃ−０を経由し、ＶＲ０＿１１−０に書き込まれる。
【００７１】
次に、図１１のフローチャートにて、ライトバック命令の発行（ステップＳ３５）後の演算制御部２の動作、すなわち、データバッファ管理部２２の制御について説明する。
ステップＳ２１で、命令発行部２１がライトバック命令を発行する。ここでは、命令ＩＤ（自命令ＩＤ）が２で、ＶＲ０（ターゲットＶＲ）へのライトバック命令が発行されたものとする。ステップＳ２２で、ＩＤ比較部２２３が、情報保持部２２１に保持している情報（図８Ｄ）の依存命令ＩＤと、命令発行部２１で発行された命令のＩＤを比較する。ここではＩＤは一致しないため、ステップＳ２４へ進む。
【００７２】
ステップＳ２４では、ＩＤ比較部２２３が、情報保持部２２１に保持している自命令ＩＤと、命令発行部２１で発行された命令のＩＤを比較する。ＩＤの一致が検出された場合には、ステップＳ２５へ進む。ＩＤ一致が検出されない場合には、ステップＳ２２へ戻る。この場合、ＩＤ比較部２２３は、情報保持部２２１に保持している自命令ＩＤと、命令発行部２１で発行された命令のＩＤの一致を検出する。ステップＳ２５で、エントリ管理部２２２は、図９Ａの動作表に従い、エントリ操作を行う。このとき、Ｖは１、ステップＳ２４でＩＤ一致が検出されたため、エントリをリセットする。エントリのリセットとは、情報保持部２２１のＶを０にし、そのエントリを無効化することである。図８Ｂに情報保持部２２１の内容を示す。エントリ制御部２２２の制御により、リセットされため、Ｖは０となる。
【００７３】
上記ライトバック命令の発行後、命令発行部２１は命令３を発行する。このとき演算部１では、次のような動作により命令３を実行する。演算に使用するデータは、ＶＲ０＿１１−０及びＶＲ１＿１１−１から１時刻に１要素がデータとして連続して読み出される。ＶＲ０＿１１−０及びＶＲ１＿１１−１から読み出されたデータは、それぞれＶＲリードパス１９−０及びＶＲリードパス１９−１を経由し、演算器０＿１２−０へ第１オペランド及び第２オペランドとして供給される。演算器０＿１２−０は各オペランドデータを順次ベクトル演算し、演算結果を演算結果バス１Ａ−０へ出力する。クロスバ１３は、そのデータを受信し、命令３で指定されたＶＲ（ここではＶＲ３＿１１−３）へ、その受信したデータを送信する。その送信されたデータは、クロスバ１３からＶＲライトパス１Ｃ−３を経由し、ＶＲ０＿１１−３に書き込まれる。この一連の動作は、要素数４個分を連続して行われる。
【００７４】
次に、上記命令１、２、３の動作について図１３、図１０、図１１、図１２を参照して説明する。ここで、図１３は、図７のベクトル演算装置の動作における命令１、２、３の動作を示すタイムチャートである。ここでは、時刻０より前に、命令１、２、３に対し、ＩＤ付加部２１１において、命令ＩＤがそれぞれ１、２、３と付加され（ステップＳ１１）、発行部２１４に到達しているものとする。また、ここでは要素数を４とし、ＶＲからの読み出し、書き込みは要素数分の時間を要する。先頭要素のＶＲ読み出しからＶＲ書き込みまでの時間（以下、演算レイテンシという）は７時刻とする。
【００７５】
時刻０で、ステップＳ１２、ステップＳ１３、ステップＳ１４、ステップＳ１５、ステップＳ１６、ステップＳ１７が処理される。発行部２１４が、命令２を発行して、演算部１においてデータバッファ１５が使用される。図中、「２  ｖｆｍｐ」は、発行された命令が命令２：ｖｆｍｐであることを示している。
【００７６】
時刻３で、ＶＲ３＿１１−３からデータの読み出しが開始され、そのデータ及び定数Ｃが演算器１＿１２−１へ供給され、演算が開始される。ＶＲ３＿１１−３からのデータの読み出し、そのデータ及び定数Ｃの演算器１＿１２−１への供給、及び、演算器１＿１２−１での演算は、要素数分の時間連続して行われる。ここでは、要素数４なので４時刻間（時刻３〜時刻６）、行われる。また、命令発行（時刻０）の２時刻後（時刻３）から、ＶＲ３のデータの読み出し、そのデータ及び定数の演算器３への供給が開始されるものとする。図中、「Ｃ、ＶＲ３」は演算器への入力が定数Ｃ及びＶＲ３のデータであること、「２  ｖｆｍｐ」は実行される演算が命令２：ｖｆｍｐであることをそれぞれ示している。
【００７７】
時刻８で、ステップＳ１８が処理される。データバッファ１５への書き込みが行われ、要素数分連続して時刻１１まで行われる。ここでは、演算の開始から５時刻後（時刻８）にデータバッファ１５への書き込みが行われるものとする。図中、「Ｗｒｉｔｅデータバッファ」は演算結果をデータバッファ１５へ書き込むことを示している。
【００７８】
時刻１０で、ステップＳ２１、ステップＳ２２、ステップＳ２３が処理される。発行部２１４が、命令１を発行し、情報保持部２２１の依存命令ＩＤと、発行部２１４が発行した命令ＩＤが一致し、Ｒｅａｄｙビットがセットされる。図中、「１  ｖｆａｄ」は、発行された命令が命令１：ｖｆａｄであることを示している。
【００７９】
時刻１１で、ステップＳ３１、ステップＳ３２、ステップＳ３３、ステップＳ３４、ステップＳ３５が処理される。Ｒｅａｄｙビットの点灯が確認され、発行許可部２１が発行を許可し、ＶＲ０へ書き込むライトバック命令（以下、図中では「ＷＢ命令」）が発行される。更に、ステップＳ２１、ステップＳ２２、ステップＳ２４、ステップＳ２５が処理される。情報保持部２２１の自命令ＩＤと、発行部２１４が発行したライトバック命令の命令ＩＤが一致し、情報保持部２２１のエントリをリセットする。
【００８０】
時刻１４で、ステップＳ３６が処理される。データバッファ１５の読み出しが開始される。図中、「Ｒｅａｄデータバッファ」はデータバッファ１５からデータを読み出すこと、「ＶＲ０」は読み出し先がＶＲ０であることをそれぞれ示している。
時刻１６で、ステップＳ３７が処理される。データバッファ１５から読み出されたデータの、ＶＲ０への書き込みが開始される。図中、「ＶＲ０  Ｗｒｉｔｅ  Ｓｔａｒｔ」はデータバッファ１５のデータのＶＲ０への書き込みが開始されることを示している。
【００８１】
時刻１３で、命令１によりＶＲ０、ＶＲ１の読み出しが開始され、演算が開始される。命令１は４要素であるため、４時刻連続して、ＶＲの読み出しと演算が行われる。図中、「ＶＲ０  Ｒｅａｄ  Ｓｔａｒｔ」はＶＲ０からのデータの読み出しが開始されることを示している。また、「ＶＲ０、ＶＲ１」は演算器への入力がＶＲ０、ＶＲ１のデータであること、「１  ｖｆａｄ」は実行される演算が命令１：ｖｆａｄであることをそれぞれ示している。
時刻２０で、命令１の演算結果のＶＲ２への書き込みが開始される。図中、「ＶＲ２」は演算結果の書き込み先がＶＲ２であることを示している。
【００８２】
時刻１４で、命令３の命令が発行される。図中、「３  ｖｆａｄ」は、発行された命令が命令３：ｖｆａｄであることを示している。
時刻１７で、命令３によりＶＲ０とＶＲ１の読み出しが開始され、演算が開始される。図中、「ＶＲ０  Ｒｅａｄ  Ｓｔａｒｔ」はＶＲ０からのデータの読み出しが開始されることを示している。また、「ＶＲ０、ＶＲ１」は演算器への入力がＶＲ０、ＶＲ１のデータであること、「３  ｖｆａｄ」は実行される演算が命令３：ｖｆａｄであることをそれぞれ示している。
時刻２４で、命令３の演算結果のＶＲ３への書き込みが開始される。図中、「ＶＲ３」は演算結果の書き込み先がＶＲ３であることを示している。
【００８３】
本実施の形態では、ＶＲ０に関し、Ｒ−Ｗ依存関係にある命令１と命令２において、命令２がデータバッファ１５を使用し、命令１を追い越して発行される。先行する命令１のＶＲ０読み出し後に、命令２によるＶＲ０書き込みがライトバック命令を用いてデータバッファ１５から行われることになり、ＶＲ０に関し順序保障されている。命令２の結果を使う命令３は、時刻１４で発行される。
【００８４】
すなわち、図１３に示すように、演算制御部２において時刻０で命令２の発行に関する処理が実行される。その命令２に対応して、演算部１において時刻３〜時刻８で命令２に関する処理（処理すべき複数の要素のうちの先頭の第１要素）が実行される。
その後、演算制御部２において、時刻１０で命令１の発行に関する処理が実行され、時刻１１で命令２の演算結果についてライトバック命令の発行に関する処理が実行され、時刻１４で命令３の発行に関する処理が実行される。
それら命令１、命令２に関するライトバック命令、及び命令３に対応して、演算部１において、時刻１３〜時刻２０で命令１に関する処理（第１要素）が実行され、時刻１４〜時刻１６でライトバック命令に関する処理（第１要素）が実行され、時刻１７〜時刻２４で命令３に関する処理（第１要素）が実行される。
【００８５】
次に、図７のベクトル演算装置の場合において、同一ＶＲに対して、先行でＷｒｉｔｅ、後続でＷｒｉｔｅ（Ｗｒｉｔｅ  ａｆｔｅｒ  Ｗｒｉｔｅ、以下Ｗ−Ｗと略す）の依存関係の場合の動作について説明する。ここでは、以下の３命令において、ＶＲ０に関し、命令１で書き込み、命令２で書き込みを行い、命令３で読み出す演算を行う。ただし、命令２と命令３間は、真の依存関係となり、順序保障が必要となる。
命令１：ＶＲ０とＶＲ１をベクトル加算し、結果をＶＲ０に格納
（ｖｆａｄ  ＶＲ０←ＶＲ０、ＶＲ１）
命令２：定数ＣとＶＲ３をベクトル乗算し、結果をＶＲ０に格納
（ｖｆｍｐ  ＶＲ０←定数Ｃ、ＶＲ３）
命令３：ＶＲ０とＶＲ１をベクトル加算し、結果をＶＲ３に格納
（ｖｆａｄ  ＶＲ３←ＶＲ０、ＶＲ１）  
ここでは各命令で演算する要素数は４とする。
【００８６】
次に、図７のベクトル演算装置の動作について、図１０のフローチャートで説明する。
ステップＳ１１は、Ｒ−Ｗ依存関係の場合の動作と同様である。ステップＳ１２で、発行部２１４が、命令間の依存関係を分析する。命令１と命令２との間に、Ｗ−Ｗの依存関係、命令２と命令３との間に、Ｗ−Ｒ依存関係があると判る。ここでは、Ｗ−Ｗの依存関係の有無に着目する。命令１と命令２との間には、Ｗ−Ｗ依存関係が有ると判別され、ステップＳ１３に進む。Ｗ−Ｗ依存関係が無ければ、ステップＳ２０に進む。ステップＳ１３からステップＳ２０は、Ｒ−Ｗ依存関係の場合と同様である。
【００８７】
次に、図７のベクトル演算装置の動作について、図１１のフローチャートにて、命令２の発行後の命令ＩＤの比較について説明する。ステップＳ２１からステップＳ２３は、Ｒ−Ｗ依存関係の場合と同様である。
【００８８】
次に、図７のベクトル演算装置の動作について、図１２のフローチャートにて、Ｒｅａｄｙビット点灯後のデータバッファ１５からの読み出しと、ＶＲへの書き込みの制御について説明する。ステップＳ３１からステップＳ３７は、Ｒ−Ｗ依存関係の場合と同様である。
【００８９】
次に、図７のベクトル演算装置の動作について、図１１のフローチャートにて、ライトバック命令の発行後のデータバッファ管理部２２の制御について説明する。ステップＳ２１からステップＳ２５は、Ｒ−Ｗ依存関係の場合と同様である。
【００９０】
次に、上記命令１、２、３の動作について図１４、図１０、図１１、図１２を参照して説明する。図１４は、図７のベクトル演算装置の動作における命令１、２、３の動作を示すタイムチャートである。ここでは、時刻０より前に、命令１、２、３に対し、ＩＤ付加部２１１において、命令ＩＤがそれぞれ１、２、３と付加され（ステップＳ１１）、発行部２１４に到達しているものとする。また、ここでは要素数、演算レイテンシは、Ｒ−Ｗ依存関係の場合と同様である。
【００９１】
時刻０、３、８、１０は、Ｒ−Ｗ依存関係の場合と同様である。
【００９２】
時刻１１で、ステップＳ３１、ステップＳ３２、ステップＳ３３が処理され、ライトバック命令は、ステップＳ３３では発行不可能と判断される。Ｒ−Ｗ依存関係の場合と同様に、Ｒｅａｄｙビットの点灯が確認され、発行許可部２２４により発行が許可される。
【００９３】
時刻１３で、Ｒ−Ｗ依存関係の場合と同様に命令１による演算が開始される。図中、「ＶＲ０、ＶＲ１」は演算器への入力がＶＲ０、ＶＲ１のデータであること、「１  ｖｆａｄ」は実行される演算が命令１：ｖｆａｄであることをそれぞれ示している。
時刻２０では、Ｒ−Ｗ依存関係の場合と同様に命令１の演算結果のＶＲ０への書き込みが開始される。図中、「ＶＲ０」は演算結果の書き込み先がＶＲ０であることを示している。また、「ＶＲ０  Ｗｒｉｔｅ  Ｓｔａｒｔ」はＶＲ０へのデータの書き込みが開始されることを示している。
時刻２３では、命令１の演算結果のＶＲ２への書き込みが終わる。
【００９４】
時刻１９で、ステップＳ３３で発行可能と判断されて、ステップＳ３４、Ｓ３５が処理される。ＶＲ０へ書き込むライトバック命令が発行される。更に、ステップＳ２１、ステップＳ２２、ステップＳ２４、ステップＳ２５が処理される。情報保持部２２１の自命令ＩＤと、発行部２１４が発行したライトバック命令の命令ＩＤが一致し、情報保持部２２１のエントリをリセットする。
【００９５】
時刻２２で、ステップＳ３６が処理される。データバッファ１５からのデータの読み出しが開始される。図中、「Ｒｅａｄデータバッファ」はデータバッファ１５からのデータの読み出しが始まること、「ＶＲ０」は読み出し先がＶＲ０であることをそれぞれ示している。
時刻２４で、ステップＳ３７が処理される。データバッファ１５から読み出されたデータの、ＶＲ０への書き込みが開始される。図中、「ＶＲ０  Ｗｒｉｔｅ  Ｓｔａｒｔ」はデータバッファ１５からのデータのＶＲ０への書き込みが開始されることを示している。
【００９６】
時刻２１で、命令３の命令が発行される。図中、「３  ｖｆａｄ」は、発行された命令が命令３：ｖｆａｄであることを示している。
時刻２４で、命令３により、ＶＲ０とＶＲ１のデータの読み出しが開始され、演算が開始される。図中、「ＶＲ０  Ｒｅａｄ  Ｓｔａｒｔ」はＶＲ０からのデータの読み出しが開始されることを示している。また、「ＶＲ０、ＶＲ１」は演算器への入力がＶＲ０、ＶＲ１のデータであること、「３  ｖｆａｄ」は実行される演算が命令３：ｖｆａｄであることをそれぞれ示している。
時刻３１で、命令３の演算結果のＶＲ３への書き込みが開始される。図中、「ＶＲ３」は演算結果の書き込み先がＶＲ３であることを示している。
【００９７】
本実施の形態では、ＶＲ０に関し、Ｗ−Ｗ依存関係にある命令１と命令２において、先行する命令１のＶＲ０書き込み終了直後に、後続の命令２のＶＲ０書き込みがライトバック命令を用いて行われることになり、ＶＲ０の依存関係は守られている。また、命令２の結果を使う命令３は、ライトバック命令の発行時刻１９の後の時刻２１で発行される。
【００９８】
すなわち、図１４に示すように、演算制御部２において時刻０で命令２の発行に関する処理が実行される。その命令２に対応して、演算部１において時刻３〜時刻８で命令２に関する処理（処理すべき複数の要素のうちの先頭の第１要素）が実行される。
その後、演算制御部２において、時刻１０で命令１の発行に関する処理が実行され、時刻１９で命令２の演算結果についてライトバック命令の発行に関する処理が実行され、時刻２１で命令３の発行に関する処理が実行される。
それら命令１、命令２に関するライトバック命令、及び命令３に対応して、演算部１において、時刻１３〜時刻２０で命令１に関する処理（第１要素）が実行され、時刻２２〜時刻２４でライトバック命令に関する処理（第１要素）が実行され、時刻２４〜時刻３１で命令３に関する処理（第１要素）が実行される。
【００９９】
上記（図１０など）に示すように、本実施の形態のベクトル演算装置は、ベクトル演算が可能な演算部と、演算部を制御する演算制御部とを具備している。演算部は、複数のレジスタと、複数のレジスタに格納されたデータを用いてベクトル演算を実行する複数の演算器と、複数の演算器の演算結果データを一時的に格納可能なデータバッファとを備えている。演算制御部は、演算部へベクトル演算に関する複数の命令を発行する命令発行部と、データバッファの管理に関する管理情報を保持するデータバッファ管理部とを備えている。命令発行部は、複数の命令に基づいて、複数のレジスタのうちの同一レジスタにおける複数の命令の依存関係を判定する。データバッファ管理部は、依存関係がある場合、管理情報に基づいて、データバッファの使用が可能か否かを判定する。命令発行部は、データバッファの使用が可能な場合、演算部の状態に基づいて、複数の命令のうち、第１命令と第２命令との間で順番変更が可能か否かを判定する。命令発行部は、順番変更が可能な場合、演算結果データをデータバッファに格納するように第２命令を編集して発行する。データバッファ管理部は、編集された第２命令の発行に基づいて、データバッファの出力先レジスタ及び順番変更の変更相手である第１命令の情報を管理情報に格納する。複数の演算器のうちの一つは、編集された第２命令に基づいて、ベクトル演算を実行して演算結果データを出力する。データバッファは、出力された演算結果データを一時的に格納する。
【０１００】
更に、上記（図１１、図１２など）に示すように、本実施の形態のベクトル演算装置は、命令発行部は、第１命令を発行する。複数の演算器は、第１命令に基づいて、複数のレジスタのデータを用いたベクトル演算を実行して演算結果データを複数のレジスタいずれかへ出力する。データバッファ管理部は、管理情報を参照して、発行された第１命令が変更相手であることを検出して、管理情報に格納する。命令発行部は、管理情報を参照して、データバッファに格納された演算結果データを、出力先レジスタに出力する出力命令を発行する。データバッファ管理部は、出力命令の発行に応答して、管理情報をリセットする。出力命令に基づいて、データバッファに格納された演算結果データは、出力先レジスタである複数のレジスタのいずれかに出力される。複数の演算器は、第１命令及び第２命令を除く複数の命令に基づいて、複数のレジスタのデータを用いたベクトル演算を実行して演算結果データを出力する。
【０１０１】
本実施の形態は、以下の効果を有する。
第１の効果は、ＶＲのＲ−Ｗ依存関係、及び、Ｗ−Ｗ依存関係のある後続命令が、先行命令を追い越して命令発行することが可能となり、システム性能の向上が図れることである。その理由は、データバッファ１５に演算結果を一時的に保持することで、レジスタリネーミングと同様の効果が得られるからである。
【０１０２】
第２の効果は、第１の効果で追い越した後続命令の演算結果を使用する命令の発行が早められ、システム性能の向上が図れることである。その理由は、データバッファ１５に後続命令の演算結果を一時的に保持することで、第１の効果で先行命令のＶＲリードの直後に、後続命令による演算結果のＶＲライトが行われるため、後続命令の演算結果を使用する命令によるＶＲリードのタイミングを早めることが可能となるからである。
【０１０３】
（第２の実施の形態）
まず、本発明の第２の実施の形態に係るベクトル演算装置の構成について説明する。図１５は、本発明の第２の実施の形態に係るベクトル演算装置の構成を示すブロック図である。このベクトル演算装置は、図７に示す第１の実施の形態に係るベクトル演算装置に、以下の構成を追加／変更している。
【０１０４】
演算制御部２のデータバッファ管理部２２は、更に、ＶＲ番号比較部２２５を備える。ＶＲ番号比較部２２５は、情報保持部２２１に保持しているターゲットＶＲ番号と、発行部２１４内にある命令の読み出しＶＲ番号とを比較し、ＶＲ番号の一致を検出する。
【０１０５】
また、演算部１は、更に、ストアパスセレクタ１Ｇと、ストアデータバッファパス１Ｈと、ストアセレクタパス１Ｊと、ストアパス１Ｋとを備える。ストアパスセレクタ１Ｇは、ストアセレクタ１６及びデータバッファ１５からのデータを選択する。ストアデータバッファパス１Ｈは、データバッファ１５とストアパスセレクタ１Ｇとを接続する。ストアセレクタパス１Ｊは、ストアセレクタ１６とストアパスセレクタ１Ｇとを接続する。ストアパス１Ｋはストアパスセレクタ１Ｇからメモリアクセス部（図示せず）にストアデータを送る（図７に示す第１の実施の形態に係るストアパス１Ｅは使用されていない）。
【０１０６】
図９Ｄは、ＶＲ番号比較部２２５の動作表を示すテーブルである。Ｖは、情報保持部２２１に保持しているＶビットを示す。ＶＲ番号比較は、情報保持部２２１に保持しているターゲットＶＲ番号と、発行部２１４内にある（後続）命令の読み出しＶＲ番号を比較し、一致していれば１、一致していなければ０とする。データ供給は、ＶとＶＲ番号比較で決定され、データバッファ１５に保持しているデータを、後続の命令のオペランドとして供給できる場合は、可能となる。この動作表（図９Ｄ）に従うと、Ｖが１、かつ、ＶＲ番号が一致していれば、データバッファ１５に保持しているデータを、後続の命令のオペランドとして供給可能となる。
【０１０７】
次に、本実施の形態に係るベクトル演算装置の動作について説明する。まず、Ｗ−Ｗ依存関係の場合の動作と、メモリへの書き込み命令（以下、ストア命令という）の動作について説明する。ここでは、以下の３命令において、ＶＲ０に関し、命令１で書き込み、命令２で書き込みを行い、命令３で読み出す演算を行う。ただし、命令２と命令３間は、真の依存関係となり、順序保障が必要となる。
命令１：ＶＲ０とＶＲ１をベクトル加算し、結果をＶＲ０に格納
（ｖｆａｄ  ＶＲ０←ＶＲ０、ＶＲ１）
命令２：定数ＣとＶＲ３をベクトル乗算し、結果をＶＲ０に格納
（ｖｆｍｐ  ＶＲ０←定数Ｃ、ＶＲ３）
命令３：ＶＲ０をメモリにストア
（ｖｓｔ  Ｍ←ＶＲ０）
ここでは各命令で演算する要素数は４とする。
【０１０８】
図１０のフローチャートで、動作の説明を行う。ステップＳ１１からステップＳ２０は、第１の実施の形態のＷ−Ｗ依存関係の場合と同様である。
【０１０９】
次に、命令３の動作について説明する。図１６は、命令３の動作を示すフローチャートである。ステップＳ４１で、ＶＲ番号比較部２２５が、情報保持部２２１に保持しているターゲットＶＲ番号と、発行部２１４内にある命令の読み出しＶＲ番号とを比較する。ＶＲ番号比較部２２５は、図９Ｄの動作表に従い、ＶＲ番号の一致を検出し、データバッファ１５からデータ供給が可能かを判定する。命令３が発行部２１４に存在する場合、ＶＲ番号比較部２２５がＶＲ番号の一致を検出し、データバッファ１５から命令３がストアするデータの供給が可能と判定される。一致しない場合には、時刻毎に判定を繰り返す。ステップＳ４２で、発行部２１４が、演算部１の状態から、命令３が発行可能か判定する。発行可能な場合には、ステップＳ４３へ進む。発行が不可能な場合は、ステップＳ４１に戻る。
【０１１０】
ステップＳ４３で、編集部２１２が、命令３を、データバッファ１５のデータを使用するために必要なフォーマットに編集する。このとき、命令３によりメモリに書き込まれるデータは、データバッファ１５に格納されているデータ、有効要素数はデータの要素数となる。ステップＳ４４で、発行部２１４が、命令３を発行する。このとき、発行部２１４が、演算制御パス３を通じ、データバッファ１５の内容を命令３のストアデータとして供給する指示が、演算部１へ送られる。ステップＳ４５で、データバッファ１５からデータが読み出される。ステップＳ４６で、ストアパスセレクタ１Ｇが、ストアデータバッファパス１Ｈを選択する。データバッファ１５からの読み出しデータは、ストアデータバッファパス１Ｈを経由しストアパス１Ｋへ送られる。ストアパスセレクタ１Ｇでは、ストアデータバッファパス１Ｈを選択し、ストアパス１Ｋを経由してメモリへ書き込まれる。
【０１１１】
図１１のフローチャートにおいて、ステップＳ２１からステップＳ２５は、第１の実施の形態のＷ−Ｗ依存関係の場合と同様である。
【０１１２】
図１２のフローチャートにおいて、ステップＳ３１からステップＳ３７は、第１の実施の形態のＷ−Ｗ依存関係の場合と同様である。
【０１１３】
次に、上記命令１、２、３の動作について図１７、図１０、図１１、図１２、図１６を参照して説明する。ここで、図１７は、図１５のベクトル演算装置の動作における命令１、２、３の動作を示すタイムチャートである。ここでは、時刻０より前に、命令１、２、３に対し、ＩＤ付加部２１１において、命令ＩＤがそれぞれ１、２、３と付加され（ステップＳ１１）、発行部２１４に到達しているものとする。また、ここでは要素数、演算レイテンシは、第１の実施の形態のＷ−Ｗ依存関係の場合と同様である。
【０１１４】
時刻０で、ステップＳ１２、ステップＳ１３、ステップＳ１４、ステップＳ１５、ステップＳ１６、ステップＳ１７が処理される。発行部２１４が、命令２を発行して、演算部１においてデータバッファ１５が使用される。図中、「２  ｖｆｍｐ」は、発行された命令が命令２：ｖｆｍｐであることを示している。
【０１１５】
時刻３での命令２の処理は、第１の実施の形態のＷ−Ｗ依存関係の場合と同様である。
時刻８での命令２の処理は、第１の実施の形態のＷ−Ｗ依存関係の場合と同様である。
【０１１６】
時刻５で、命令３に関し、ステップＳ４１からステップＳ４４が処理される。命令３はデータバッファ１５を読み出す命令として、発行される。図中、「３  ｖｓｔ」は、発行された命令が命令３：ｖｓｔであることを示している。
時刻８で、命令３に対するデータバッファ１５からのデータ供給が開始され、ストアデータバッファパス１Ｈにデータが送られる。この時、ストアパスセレクタ１Ｇでは、ストアデータバッファパス１Ｈ側が選択され、ストアパス１Ｋに、データバッファ１５からのデータが送られる。図中、「Ｒｅａｄデータバッファ」はデータバッファ１５からデータを読み出すことを示している。また、「ＶＲ０」は演算器への入力がＶＲ０のデータであること、「３  ｖｓｔ」は実行される演算が命令３：ｖｓｔであることをそれぞれ示している。
時刻１２で、メモリへデータが送られる。ここでは、データバッファ１５の読み出しの４時刻後にメモリへデータが送られるものとする。図中、「メモリ」はデータの送信先がメモリであることを示している。
【０１１７】
時刻１０以降の命令１の処理は、第１の実施の形態のＷ−Ｗ依存関係の場合と同様である。
【０１１８】
時刻１９以降のＶＲ０へのライトバック命令の処理は、第１の実施の形態のＷ−Ｗ依存関係の場合と同様である。
【０１１９】
すなわち、図１７に示すように、演算制御部２において、時刻０で命令２の発行に関する処理が実行され、時刻５で命令３の発行に関する処理が実行される。
その命令２、及び命令３に対応して、演算部１において、時刻３〜時刻８で命令２に関する処理（処理すべき複数の要素のうちの先頭の第１要素）が実行され、時刻８〜時刻１２で命令３に関する処理（第１要素）が実行される。
その後、演算制御部２において、時刻１０で命令１の発行に関する処理が実行され、時刻１９で命令２の演算結果についてライトバック命令の発行に関する処理が実行される。
それら命令１、及び命令２に関するライトバック命令に対応して、演算部１において、時刻１３〜時刻２０で命令１に関する処理（第１要素）が実行され、時刻２２〜時刻２４でライトバック命令に関する処理（第１要素）が実行される。
【０１２０】
上記（図１０など）に示すように、本実施の形態のベクトル演算装置は、ベクトル演算が可能な演算部と、演算部を制御する演算制御部とを具備している。演算部は、複数のレジスタと、複数のレジスタに格納されたデータを用いてベクトル演算を実行する複数の演算器と、複数の演算器の演算結果データを一時的に格納可能なデータバッファとを備えている。演算制御部は、演算部へベクトル演算に関する複数の命令を発行する命令発行部と、データバッファの管理に関する管理情報を保持するデータバッファ管理部とを備えている。命令発行部は、複数の命令に基づいて、複数のレジスタのうちの同一レジスタにおける複数の命令の依存関係を判定する。データバッファ管理部は、依存関係がある場合、管理情報に基づいて、データバッファの使用が可能か否かを判定する。命令発行部は、データバッファの使用が可能な場合、演算部の状態に基づいて、複数の命令のうち、第１命令と第２命令との間で順番変更が可能か否かを判定する。命令発行部は、順番変更が可能な場合、演算結果データをデータバッファに格納するように第２命令を編集して発行する。データバッファ管理部は、編集された第２命令の発行に基づいて、データバッファの出力先レジスタ及び順番変更の変更相手である第１命令の情報を管理情報に格納する。複数の演算器のうちの一つは、編集された第２命令に基づいて、ベクトル演算を実行して演算結果データを出力する。データバッファは、出力された演算結果データを一時的に格納する。
【０１２１】
更に、上記（図１１、図１２、図１６など）に示すように、本実施の形態のベクトル演算装置は、データバッファ管理部は、複数の命令のうちの第３命令について、複数のレジスタのうちの第３命令が対象とするレジスタと、出力先レジスタとが等しい場合、管理情報に基づいて、データバッファの演算結果データが使用可能か否かを判定する。命令発行部は、データバッファの演算結果データが使用可能な場合、演算部の状態に基づいて、データバッファの演算結果データを使用するように第３命令を編集して発行する。編集された第３命令に基づいて、データバッファの演算結果データが第３命令での出力先へ出力される。命令発行部は、第１命令を発行する。複数の演算器は、第１命令に基づいて、複数のレジスタのデータを用いたベクトル演算を実行して演算結果データを複数のレジスタいずれかへ出力する。データバッファ管理部は、管理情報を参照して、発行された第１命令が変更相手であることを検出して、管理情報に格納する。命令発行部は、管理情報を参照して、データバッファに格納された演算結果データを、出力先レジスタに出力する出力命令を発行する。データバッファ管理部は、出力命令の発行に応答して、管理情報をリセットする。出力命令に基づいて、データバッファに格納された演算結果データは、出力先レジスタである複数のレジスタのいずれかに出力される。
【０１２２】
本実施の形態は、以下の効果を有する。
まず、第１の実施の形態に示される第１〜第２の効果を得ることができる。加えて、第３の効果として、ストア命令に対しても、データバッファ１５からデータ供給を行うことで、ストア命令の実行タイミングを早めることが可能となり、システム性能の向上が図れることである。
【０１２３】
（第３の実施の形態）
まず、本発明の第３の実施の形態に係るベクトル演算装置の構成について説明する。図１８は、本発明の第３の実施の形態に係るベクトル演算装置の構成を示すブロック図である。このベクトル演算装置は、図１５に示す第２の実施の形態に係るベクトル演算装置に、以下の構成を追加／変更している。
【０１２４】
演算制御部２のデータバッファ管理部２２は、更に、バイパス検出部２２６を備える。バイパス検出部２２６は、データバッファ１５にあるデータを、後続演算のオペランドとしてデータ供給が可能かを検出する。
【０１２５】
また、演算部１は、更に、データバッファバイパスパス１Ｌを備える。データバッファバイパスパス１Ｌは、バッファパス１Ｄから各演算器の第１オペランド及び第２オペランドとしてデータを供給可能である。
【０１２６】
図９Ｅは、バイパス検出部２２６の動作表を示すテーブルである。Ｖは、情報保持部２２１に保持しているＶビットを示す。データ供給は、ＶＲ番号比較部２２５において、図９Ｄの動作表のデータ供給を示す。図９Ｄの動作表に従い、データ供給が可能であれば１、可能でなければ０とする。パス未使用は、データバッファバイパスパス１Ｌの使用状況を示す。データバッファバイパスパス１Ｌが他の演算で未使用であれば１、使用中であれば０とする。バイパス判定は、Ｖ、データ供給、パス未使用で決定される。後続命令は、データバッファ１５に保持しているデータを用いて、バイパス演算が可能な場合は、可能となる。図９Ｅの動作表に従うと、Ｖが１、かつ、データ供給が１、かつ、パス未使用が１であれば、後続命令は、データバッファ１５に保持しているデータを用いて、バイパス演算が可能となる。
【０１２７】
次に、次に、本実施の形態に係るベクトル演算装置の動作について説明する。まず、後続の演算命令のオペランドデータとして、データバッファ１５からデータの供給を行う演算について説明する。ここでは、以下の３命令において、ＶＲ０に関し、命令１で読み出し、命令２で書き込みを行い、命令３で読み出す演算を行う。ただし、命令２と命令３間は、真の依存関係となり、順序保障が必要となる。命令３は、データバッファ１５のデータを用いたバイパス演算（以下、バッファバイパス演算という）を行う。
命令１：ＶＲ０とＶＲ１をベクトル加算し、結果をＶＲ２に格納
（ｖｆａｄ  ＶＲ２←ＶＲ０、ＶＲ１）
命令２：定数ＣとＶＲ３をベクトル乗算し、結果をＶＲ０に格納
（ｖｆｍｐ  ＶＲ０←定数Ｃ、ＶＲ３）
命令３：ＶＲ０とＶＲ１をベクトル加算し、結果をＶＲ３に格納
（ｖｆａｄ  ＶＲ３←ＶＲ０、ＶＲ１）
ここでは、各命令で演算する要素数は４とする。
【０１２８】
また、命令１と命令２との間に、Ｗ−Ｗ依存関係がある場合（例えば、命令１がＶＲ０に書き込む）も、バッファバイパス演算に関しては同様に可能である。
【０１２９】
図１０のフローチャートで、動作の説明を行う。ステップＳ１１からステップＳ２０は、第１の実施の形態のＲ−Ｗ依存関係の場合と同様である。
【０１３０】
図１１のフローチャートにおいて、ステップＳ２１からステップＳ２５は、第１の実施の形態のＲ−Ｗ依存関係の場合と同様である。
【０１３１】
次に、命令３の動作について説明する。図１９は、命令３の動作を示すフローチャートである。ステップＳ５１で、ＶＲ番号比較部２２５は、情報保持部２２１に保持しているターゲットＶＲ番号と、発行部２１４内にある命令の読み出しＶＲ番号とを比較する。ＶＲ番号比較部２２５は、図９Ｄの動作表に従い、ＶＲ番号の一致を検出し、データバッファ１５からデータ供給が可能かを判定する。命令３が発行部２１４に存在する場合、ＶＲ番号比較部２２５はＶＲ番号の一致を検出する。一致を検出しなければ、時刻毎に判定を繰り返す。ステップＳ５２で、バイパス判定部２２６は、命令３がバッファバイパス可能か判定する。バイパス判定部２２６は、図９Ｅの動作表に従い、命令３がバッファバイパス演算が可能と判定さする。バッファバイパス演算が不可能と判定した場合、ステップＳ５１に戻る。ステップＳ５３で、発行部２１４が、演算部１の状態から、命令３がバッファバイパス演算として発行可能か判定する。発行可能な場合、ステップＳ５４へ進む。発行が不可能な場合は、ステップＳ５１に戻る。
【０１３２】
ステップＳ５４で、編集部２１２が、命令３を、バッファバイパス演算に必要なフォーマットに編集する。このとき、編集部２１２は、データバッファ１５からオペランドデータが供給される読み出しＶＲ番号を、データバッファ１５からの読み出しと変更する。ステップＳ５５で、発行部２１４が、命令３を発行する。このとき演算制御パス３を通じ、データバッファ１５の内容を読み出し、命令３のオペランドデータとして扱う指示が、演算部１へ送られる。
【０１３３】
ステップＳ５６で、データバッファ１５からデータが読み出される。ステップＳ５７で、ステップＳ５６のデータは、データバッファ−バイパスパス１Ｌを経由し、命令３が使用する演算器へ供給され、命令３は、バッファバイパス演算として演算される。
【０１３４】
図１２のフローチャートにおいて、ステップＳ３１からステップＳ３７は、第１の実施の形態のＲ−Ｗ依存関係の場合と同様である。
【０１３５】
次に、上記命令１、２、３の動作について図２０、図１０、図１１、図１２、図１９を参照して説明する。ここで、図２０は、図１８の動作における命令１、２、３の動作を示すタイムチャートである。ここでは、時刻０より前に、命令１、２、３に対し、ＩＤ付加部２１１において、命令ＩＤがそれぞれ１、２、３と付加され（ステップＳ１１）、発行部２１４に到達しているものとする。ここでは要素数、演算レイテンシは、第１の実施の形態のＲ−Ｗ依存関係の場合と同様である。
【０１３６】
時刻０で、ステップＳ１２、ステップＳ１３、ステップＳ１４、ステップＳ１５、ステップＳ１６、ステップＳ１７が処理される。発行部２１４が、命令２を発行し、演算部１においてデータバッファ１５が使用される。図中、「２  ｖｆｍｐ」は、発行された命令が命令２：ｖｆｍｐであることを示している。
【０１３７】
時刻３での命令２の処理は、第１の実施の形態のＲ−Ｗ依存関係の場合と同様である。
時刻８での命令２の処理は、第１の実施の形態のＲ−Ｗ依存関係の場合と同様である。
【０１３８】
時刻５で、命令３に関し、ステップＳ５１からステップＳ５５が処理される。命令３は、バッファバイパス演算する命令として発行される。図中、「３  ｖｆａｄ」は、発行された命令が命令３：ｖｆａｄであることを示している。
時刻８で、命令３に対するデータバッファ１５からのデータ供給が開始され、データバッファバイパスパス１Ｌを経由し、命令３が使用する演算器へデータが送られる。図中、「Ｒｅａｄデータバッファ」はデータバッファ１５からデータを読み出すことを示している。また、「ＶＲ０、ＶＲ１」は演算器への入力がＶＲ０、ＶＲ１のデータであること、「３  ｖｆａｄ」は実行される演算が命令３：ｖｆａｄであることをそれぞれ示している。
時刻１５で、命令３の演算結果がＶＲ３に書き込まれる。図中、「ＶＲ３」はデータの書き込み先がＶＲ３であることを示している。
【０１３９】
時刻１０以降の命令１の処理は、第１の実施の形態のＲ−Ｗ依存関係の場合と同様である。
時刻１１以降のライトバック命令の処理は、第１の実施の形態のＲ−Ｗ依存関係の場合と同様である。
【０１４０】
すなわち、図２０に示すように、演算制御部２において、時刻０で命令２の発行に関する処理が実行され、時刻５で命令３の発行に関する処理が実行される。
その命令２、及び命令３に対応して、演算部１において、時刻３〜時刻８で命令２に関する処理（処理すべき複数の要素のうちの先頭の第１要素）が実行され、時刻８〜時刻１５で命令３に関する処理（第１要素）が実行される。
その後、演算制御部２において、時刻１０で命令１の発行に関する処理が実行され、時刻１１で命令２の演算結果についてライトバック命令の発行に関する処理が実行される。
それら命令１、及び命令２に関するライトバック命令に対応して、演算部１において、時刻１３〜時刻２０で命令１に関する処理（第１要素）が実行され、時刻１４〜時刻１６でライトバック命令に関する処理（第１要素）が実行される。
【０１４１】
また、命令１と命令２との間にＷ−Ｗ依存関係がある場合も、バッファバイパス演算に関しては同様に可能である。この場合、第１の実施の形態のＲ−Ｗ依存関係を、第１の実施の形態のＷ−Ｗ依存関係と読み替える。
【０１４２】
上記（図１０など）に示すように、本実施の形態のベクトル演算装置は、ベクトル演算が可能な演算部と、演算部を制御する演算制御部とを具備している。演算部は、複数のレジスタと、複数のレジスタに格納されたデータを用いてベクトル演算を実行する複数の演算器と、複数の演算器の演算結果データを一時的に格納可能なデータバッファとを備えている。演算制御部は、演算部へベクトル演算に関する複数の命令を発行する命令発行部と、データバッファの管理に関する管理情報を保持するデータバッファ管理部とを備えている。命令発行部は、複数の命令に基づいて、複数のレジスタのうちの同一レジスタにおける複数の命令の依存関係を判定する。データバッファ管理部は、依存関係がある場合、管理情報に基づいて、データバッファの使用が可能か否かを判定する。命令発行部は、データバッファの使用が可能な場合、演算部の状態に基づいて、複数の命令のうち、第１命令と第２命令との間で順番変更が可能か否かを判定する。命令発行部は、順番変更が可能な場合、演算結果データをデータバッファに格納するように第２命令を編集して発行する。データバッファ管理部は、編集された第２命令の発行に基づいて、データバッファの出力先レジスタ及び順番変更の変更相手である第１命令の情報を管理情報に格納する。複数の演算器のうちの一つは、編集された第２命令に基づいて、ベクトル演算を実行して演算結果データを出力する。データバッファは、出力された演算結果データを一時的に格納する。
【０１４３】
更に、上記（図１１、図１２、図１９など）に示すように、本実施の形態のベクトル演算装置は、前記データバッファ管理部は、前記複数の命令のうちの第３命令について、前記複数のレジスタのうちの前記第３命令が対象とするレジスタと、前記出力先レジスタとが等しい場合、前記管理情報に基づいて、前記データバッファの演算結果データが使用可能か否かを判定する。前記命令発行部は、前記データバッファの演算結果データが使用可能な場合、前記演算部の状態に基づいて、前記データバッファの演算結果データを使用するように前記第３命令を編集して発行する。前記編集された第３命令に基づいて、前記データバッファの演算結果データが前記第３命令での出力先へ出力する。前記命令発行部は、前記第１命令を発行する。前記データバッファ管理部は、前記管理情報を参照して、前記発行された第１命令が前記変更相手であることを検出して、前記管理情報に格納する。前記命令発行部は、前記管理情報を参照して、前記データバッファに格納された演算結果データを、前記出力先レジスタに出力する出力命令を発行する。前記データバッファ管理部は、前記出力命令の発行に応答して、前記管理情報をリセットする。前記出力命令に基づいて、前記データバッファに格納された演算結果データは、前記出力先レジスタである前記複数のレジスタのいずれかに出力される。前記複数の演算器は、前記第１命令に基づいて、前記複数のレジスタのデータを用いたベクトル演算を実行して演算結果データを出力する。
【０１４４】
本実施の形態は、以下の効果を有する。
まず、第１の実施の形態及び第２の実施の形態に示される第１〜第３の効果を得ることができる。加えて、第４の効果として、データバッファ１５から後続演算へのデータ供給を行うことで、後続演算の実行タイミングを早める事が可能となり、システム性能の向上が図れることである。
【０１４５】
以上示されるように、本発明は複数のワード（要素）で構成されているベクトルレジスタを使用したベクトル演算において、レジスタリネーミング用のレジスタを用いずに、レジスタリネーミングと同等の機能を有するベクトル演算装置を提供することが出来る。
【０１４６】
本発明のプログラム、データ構造は、コンピュータ読取可能な記憶媒体に記録され、その記憶媒体から情報処理装置に読み込まれても良い。
【０１４７】
本発明は上記各実施の形態に限定されず、本発明の技術思想の範囲内において、各実施の形態は適宜変形又は変更され得ることは明らかである。なお、技術的な矛盾の発生しない限り、各実施の形態に記載された技術は、他の実施の形態に単独で又は組み合わせて適用することが可能である。
【符号の説明】
【０１４８】
１、１０１    演算部
２、１０２    演算制御部
３、１０３    演算制御パス
１１、１１−０〜１１−ｎ、１１１−０〜１１１−ｎ    ＶＲ０〜ＶＲｎ
１２、１２−０〜１２−ｍ、１１２−０〜１１２−ｍ    演算器０〜演算器ｍ
１３、１１３    クロスバ
１４、    演算結果セレクタ
１５、    データバッファ
１６、１１６    ストアセレクタ
１７、１１７    定数部
１８、１８−０〜１８−ｍ、１１８−０〜１１８−ｍ    定数パス
１９、１９−０〜１９−ｎ、１１９−０〜１１９−ｎ    ＶＲリードパス
２１、１２１    命令発行部
２２    データバッファ管理部
２１１    ＩＤ付加部
２１２    編集部
２１３    バイパス部
２１４    発行部
２２１    情報保持部
２２２    エントリ制御部
２２３    ＩＤ比較部
２２４    発行許可部
２２５    ＶＲ番号比較部
２２６    バイパス検出部
１Ａ−０〜１Ａ−ｍ、１０１Ａ−０〜１０１Ａ−ｍ    演算結果パス
１Ｂ−０〜１Ｂ−ｍ、１０１Ｂ−０〜１０１Ｂ−ｍ    バイパスパス
１Ｃ−０〜１Ｃ−ｎ、１０１Ｃ−０〜１０１Ｃ−ｎ    ＶＲライトパス
１Ｄ    バッファパス
１Ｅ、１０１Ｅ    ストアパス
１Ｆ    セレクトパス
１Ｌ    データバッファバイパスパス
１Ｇ    ストアパスセレクタ
１Ｈ    ストアデータバッファパス
１Ｊ    ストアセレクタパス
１Ｋ    ストアパス
【図１】
2010218076.tif 000003
【図２】
2010218076.tif 000004
【図３】
2010218076.tif 000005
【図４】
2010218076.tif 000006
【図５】
2010218076.tif 000007
【図６】
2010218076.tif 000008
【図７】
2010218076.tif 000009
【図８Ａ】
2010218076.tif 000010
【図８Ｂ】
2010218076.tif 000011
【図８Ｃ】
2010218076.tif 000012
【図８Ｄ】
2010218076.tif 000013
【図９Ａ】
2010218076.tif 000014
【図９Ｂ】
2010218076.tif 000015
【図９Ｃ】
2010218076.tif 000016
【図９Ｄ】
2010218076.tif 000017
【図９Ｅ】
2010218076.tif 000018
【図１０】
2010218076.tif 000019
【図１１】
2010218076.tif 000020
【図１２】
2010218076.tif 000021
【図１３】
2010218076.tif 000022
【図１４】
2010218076.tif 000023
【図１５】
2010218076.tif 000024
【図１６】
2010218076.tif 000025
【図１７】
2010218076.tif 000026
【図１８】
2010218076.tif 000027
【図１９】
2010218076.tif 000028
【図２０】
2010218076.tif 000029