(57)【要約】【課題】１命令で複数のアドレスに対してメモリアクセスを行うメモリアクセス命令を高速に実行することができる演算処理装置を提供することを課題とする。【解決手段】演算処理装置は、１命令で複数のアドレスに対してメモリアクセスを行うメモリアクセス命令を実行する演算処理装置であって、前記メモリアクセス命令のアクセス対象である複数のアドレスの間隔がすべて同じであるかを検出する検出部（１０９）と、前記複数のアドレスの間隔がすべて同じである場合、前記メモリアクセス命令を１命令としてデコードし、前記複数のアドレスの間隔が同じでない場合、前記メモリアクセス命令を複数の命令としてデコードするデコード部（１０３）と、前記デコード部がデコードした命令に応じて、メモリアクセスを行うメモリアクセス部（１０６）とを有する。【選択図】図１
2018194946.tif 000002
【特許請求の範囲】
【請求項１】
１命令で複数のアドレスに対してメモリアクセスを行うメモリアクセス命令を実行する演算処理装置であって、
前記メモリアクセス命令のアクセス対象である複数のアドレスの間隔がすべて同じであるかを検出する検出部と、
前記複数のアドレスの間隔がすべて同じである場合、前記メモリアクセス命令を１命令としてデコードし、前記複数のアドレスの間隔が同じでない場合、前記メモリアクセス命令を複数の命令としてデコードするデコード部と、
前記デコード部がデコードした命令に応じて、メモリアクセスを行うメモリアクセス部と
を有することを特徴とする演算処理装置。
【請求項２】
さらに、前記検出部が、前記複数のアドレスの間隔がすべて同じであることを検出した場合、前記複数のアドレスの間隔がすべて同じであることを履歴テーブルに登録する制御部を有し、
前記デコード部は、前記履歴テーブルに前記複数のアドレスの間隔がすべて同じであることが登録されている場合、前記メモリアクセス命令を１命令としてデコードし、前記履歴テーブルに前記複数のアドレスの間隔がすべて同じであることが登録されていない場合、前記メモリアクセス命令を複数の命令に分解してデコードすることを特徴とする請求項１に記載の演算処理装置。
【請求項３】
前記制御部は、前記メモリアクセス命令のアドレス毎に、前記複数のアドレスの間隔がすべて同じであることを前記履歴テーブルに登録することを特徴とする請求項２に記載の演算処理装置。
【請求項４】
前記メモリアクセス命令は、前記複数のアドレスを記憶する第１のレジスタの番号を含み、
前記制御部は、前記第１のレジスタの番号毎に、前記複数のアドレスの間隔がすべて同じであることを前記履歴テーブルに登録することを特徴とする請求項２に記載の演算処理装置。
【請求項５】
前記検出部は、前記複数のアドレスの間隔を検出し、
前記制御部は、前記検出部が、前記複数のアドレスの間隔がすべて同じであることを検出した場合、前記複数のアドレスの間隔がすべて同じであること及び前記複数のアドレスの間隔を前記履歴テーブルに登録し、
前記メモリアクセス部は、前記履歴テーブルに前記複数のアドレスの間隔がすべて同じであることが登録されている場合、前記履歴テーブルに登録されている前記複数のアドレスの間隔に応じて、メモリアクセスを行うことを特徴とする請求項２〜４のいずれか１項に記載の演算処理装置。
【請求項６】
前記履歴テーブルに前記複数のアドレスの間隔がすべて同じであることが登録されていない場合、前記検出部は、前記メモリアクセス命令の前記複数のアドレスの間隔がすべて同じであるか否かを検出し、前記検出部が、前記複数のアドレスの間隔がすべて同じであることを検出した場合、前記制御部は、前記複数のアドレスの間隔がすべて同じであることを前記履歴テーブルに登録することを特徴とする請求項２〜５のいずれか１項に記載の演算処理装置。
【請求項７】
前記履歴テーブルに前記複数のアドレスの間隔がすべて同じであることが登録されている場合、前記デコード部は、前記メモリアクセス命令を１命令としてデコードし、前記検出部は、前記メモリアクセス命令の前記複数のアドレスの間隔がすべて同じであるか否かを検出し、前記検出部が、前記複数のアドレスの間隔が同じでないことを検出した場合、前記メモリアクセス命令のデコードに基づくメモリアクセスを取り消し、前記制御部は、前記履歴テーブルの登録を削除し、前記デコード部は、前記メモリアクセス命令を複数の命令に分解してデコードすることを特徴とする請求項２〜６のいずれか１項に記載の演算処理装置。
【請求項８】
前記メモリアクセス命令は、前記メモリアクセス命令によりロードする複数のアドレスのデータを書き込む又は前記メモリアクセス命令によりストアするデータを記憶する第２のレジスタの番号を含み、
前記第２のレジスタの番号に対して前記複数のアドレスの間隔がすべて同じであることが前記履歴テーブルに登録されている場合、前記制御部は、前記履歴テーブルの登録を削除することを特徴とする請求項４に記載の演算処理装置。
【請求項９】
前記演算処理装置は、１命令で１個のアドレスに対してメモリアクセスを行うスカラーアクセス命令を実行し、
前記スカラーアクセス命令は、前記スカラーアクセス命令によりロードする１個のアドレスのデータを書き込む又は前記メモリアクセス命令によりストアするデータを記憶する第３のレジスタの番号を含み、
前記第３のレジスタの番号に対して前記複数のアドレスの間隔がすべて同じであることが前記履歴テーブルに登録されている場合、前記制御部は、前記履歴テーブルの登録を削除することを特徴とする請求項４又は８に記載の演算処理装置。
【請求項１０】
さらに、前記デコード部が前記メモリアクセス命令を１命令としてデコードした場合、前記メモリアクセス部の制御の下、前記複数のアドレスに対して並列にアクセスするメモリを有することを特徴とする請求項１〜９のいずれか１項に記載の演算処理装置。
【請求項１１】
前記メモリは、
各アドレスのデータを記憶する複数のメモリバンクと、
前記アドレスに応じて、前記メモリバンクを選択する第１の選択部と、
前記アドレスに応じて、前記メモリバンク内のアドレスを選択する第２の選択部と、
前記第１の選択部及び前記第２の選択部により選択されたアドレスに対してデータをロード又はストアするマルチプレクサとを有することを特徴とする請求項１０に記載の演算処理装置。
【請求項１２】
１命令で複数のアドレスに対してメモリアクセスを行うメモリアクセス命令を実行する演算処理装置の制御方法であって、
前記演算処理装置が有する検出部が、前記メモリアクセス命令のアクセス対象である複数のアドレスの間隔がすべて同じであるかを検出し、
前記演算処理装置が有するデコード部が、前記複数のアドレスの間隔がすべて同じである場合、前記メモリアクセス命令を１命令としてデコードし、前記複数のアドレスの間隔が同じでない場合、前記メモリアクセス命令を複数の命令としてデコードし、
前記演算処理装置が有するメモリアクセス部が、前記デコード部がデコードした命令に応じて、メモリアクセスを行うことを特徴とする演算処理装置の制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、演算処理装置及び演算処理装置の制御方法に関する。
【背景技術】
【０００２】
同時アクセス可能な複数のメモリブロックを有するデータメモリとの間でデータを遣り取りする複数のベクトルパイプラインを有する演算処理装置が知られている（特許文献１参照）。演算処理装置は、基本パターンのデータサイズを決める第１パラメータと、基本パターンにおける有効なデータ数を決める第２パラメータとに基づき、データメモリに対するストライドアクセスを行う。
【０００３】
また、プロセッサからのアクセスに基づき、メモリの動作を制御するメモリコントローラが知られている（特許文献２参照）。履歴格納回路は、プロセッサがアクセスするデータのアドレスが非連続である非連続アクセスの履歴情報を格納する。非連続アクセス予測回路は、履歴情報に基づき、非連続アクセスを予測する。アドレス出力回路は、非連続アクセスの予測に基づいて、メモリから読み出すデータの読み出しアドレスを出力する。データ格納回路は、読み出しアドレスに基づきメモリから読み出されたデータを格納する。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２０１２−１２８５５９号公報
【特許文献２】特開２００６−２１５７９９号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
演算処理装置は、ストライドアクセスを実行するには、ストライドアクセスを実行しない場合よりも長時間を要する。
【０００６】
１つの側面では、本発明の目的は、１命令で複数のアドレスに対してメモリアクセスを行うメモリアクセス命令を高速に実行することができる演算処理装置及び演算処理装置の制御方法を提供することである。
【課題を解決するための手段】
【０００７】
演算処理装置は、１命令で複数のアドレスに対してメモリアクセスを行うメモリアクセス命令を実行する演算処理装置であって、前記メモリアクセス命令のアクセス対象である複数のアドレスの間隔がすべて同じであるかを検出する検出部と、前記複数のアドレスの間隔がすべて同じである場合、前記メモリアクセス命令を１命令としてデコードし、前記複数のアドレスの間隔が同じでない場合、前記メモリアクセス命令を複数の命令としてデコードするデコード部と、前記デコード部がデコードした命令に応じて、メモリアクセスを行うメモリアクセス部とを有する。
【発明の効果】
【０００８】
１つの側面では、１命令で複数のアドレスに対してメモリアクセスを行うメモリアクセス命令を高速に実行することができる。
【図面の簡単な説明】
【０００９】
【図１】図１は、第１の実施形態による演算処理装置の構成例を示す図である。
【図２】図２は、メモリアクセス処理ユニットがデータキャッシュメモリに対してロードを行う処理を説明するための図である。
【図３】図３は、ストライドアクセス検出回路の構成例を示す図である。
【図４】図４は、履歴テーブルの構成例を示す図である。
【図５】図５は、データキャッシュメモリの構成例を示す図である。
【図６】図６は、第１の実施形態による演算処理装置の制御方法を示すフローチャートである。
【図７】図７は、アドレス演算を示す図である。
【図８】図８は、第２の実施形態による履歴テーブルの構成例を示す図である。
【図９】図９は、第２の実施形態による演算処理装置の制御方法を示すフローチャートである。
【発明を実施するための形態】
【００１０】
（第１の実施形態）
図１は、第１の実施形態による演算処理装置の構成例を示す図である。演算処理装置は、命令キャッシュメモリ１０１と、命令フェッチユニット１０２と、命令デコードユニット１０３と、レジスタファイル１０４と、実効アドレス値演算器１０５と、メモリアクセス処理ユニット１０６と、データキャッシュメモリ１０７とを有する。演算処理装置は、さらに、履歴テーブル１０８と、ストライドアクセス検出回路１０９と、制御回路１１０とを有する。制御回路１１０は、演算処理装置内の各ユニットを制御する。
【００１１】
命令キャッシュメモリ１０１は、図８のインダイレクトアクセス命令８００と、演算命令８０５と、を含む命令を記憶する。インダイレクトアクセス命令８００は、ロード命令又はストア命令である。インダイレクトアクセス命令８００は、オペコード８０１と、ディスティネーションレジスタ番号８０２と、ベースレジスタ番号８０３と、インデックスレジスタ番号８０４とを有する。オペコード８０１は、命令の種類を示す。ディスティネーションレジスタ番号８０２と、ベースレジスタ番号８０３と、インデックスレジスタ番号８０４は、レジスタファイル１０４内の複数のレジスタのうちのいずれかの番号である。ベースレジスタ番号８０３及びインデックスレジスタ番号８０４は、アクセス対象のアドレスを記憶するレジスタの番号である。その詳細は、後に図７を参照しながら説明する。ディスティネーションレジスタ番号８０２は、ロードしたデータを書き込むレジスタの番号又はストアするデータを記憶するレジスタの番号である。演算命令８０５は、算術演算、論理演算、レジスタ間のデータ移動を行う命令である。演算命令８０５は、オペコード８０６と、ディスティネーションレジスタ番号８０７と、第１ソースオペランドレジスタ番号８０８と、第２ソースオペランドレジスタ番号８０９と、を有する。オペコード８０６は、実行する命令の種類を示す。ディスティネーションレジスタ番号８０７と第１ソースオペランドレジスタ番号８０８と第２ソースオペランドレジスタ番号８０９は、それぞれ、レジスタファイル１０４内の複数のレジスタのうちいずれかの番号である。第１ソースオペランドレジスタ番号８０８と第２ソースオペランドレジスタ番号８０９は、それぞれ、演算器に入力するデータを記憶するレジスタの番号である。ディスティネーションレジスタ番号８０７は、演算した結果を書き込むレジスタの番号である。
【００１２】
命令フェッチユニット１０２は、命令キャッシュメモリ１０１に記憶されている命令１２１をフェッチし、そのフェッチした命令１２２を命令デコードユニット１０３に出力し、そのフェッチした命令のアドレス１１１を履歴テーブル１０８に出力する。命令デコードユニット１０３は、ヒット信号１１８及びストライド幅１１９を入力し、命令１２２をデコードし、ストライド幅１１９及びオペコード１１２を実効アドレス値演算器１０５に出力し、レジスタ番号１１３をレジスタファイル１０４に出力する。ヒット信号１１８及びストライド幅１１９については、後述する。オペコード１１２は、図８のオペコード８０１に対応する。レジスタ番号１１３は、ディスティネーションレジスタ番号８０２、ベースレジスタ番号８０３及びインデックスレジスタ番号８０４に対応する。
【００１３】
レジスタファイル１０４は、複数のレジスタを有し、レジスタ番号１１３に応じたオペランド１１４を実効アドレス値演算器１０５に出力する。例えば、レジスタファイル１０４は、ディスティネーションレジスタ番号８０２の他、図７に示すように、ベースレジスタ番号８０３が示すスカラーレジスタに記憶されているベースアドレス７０１と、インデックスレジスタ番号８０４が示すベクトルレジスタに記憶されている第１〜第４のインデックスアドレス７１１〜７１４を実効アドレス値演算器１０５に出力する。スカラーレジスタは、１個の値を記憶するレジスタである。ベクトルレジスタは、複数の値を記憶するレジスタである。
【００１４】
実効アドレス値演算器１０５は、ストライド幅１１９、オペコード１１２及びオペランド１１４を入力し、ストライド幅１１９、実効アドレス１１５及びオペランド１１４をメモリアクセス処理ユニット１０６に出力する。実効アドレス値演算器１０５は、図７に示すように、加算器７０３〜７０６を有する。加算器７０３は、ベースアドレス７０１及び第１のインデックスアドレス７１１を加算し、第１の実効アドレス７２１を出力する。加算器７０４は、ベースアドレス７０１及び第２のインデックスアドレス７１２を加算し、第２の実効アドレス７２２を出力する。加算器７０５は、ベースアドレス７０１及び第３のインデックスアドレス７１３を加算し、第３の実効アドレス７２３を出力する。加算器７０６は、ベースアドレス７０１及び第４のインデックスアドレス７１４を加算し、第４の実効アドレス７２４を出力する。実効アドレス値演算器１０５は、第１〜第４の実効アドレス７２１〜７２４を、実効アドレス１１５としてメモリアクセス処理ユニット１０６及びストライドアクセス検出回路１０９に出力する。
【００１５】
メモリアクセス処理ユニット１０６は、ストライド幅１１９、実効アドレス１１５及びオペランド１１４及びオペコード１１２を入力し、データキャッシュメモリ１０７に対してデータのロード又はストアを行う。
【００１６】
図２は、メモリアクセス処理ユニット１０６がデータキャッシュメモリ１０７に対してロードを行う処理を説明するための図である。例えば、第１の実効アドレス７２１が「５」であり、第２の実効アドレス７２２が「３」であり、第３の実効アドレス７２３が「１３」であり、第４の実効アドレス７２４が「７」である。レジスタファイル１０４は、ディスティネーションレジスタ番号８０２が示すベクトルレジスタ２０１を有する。
【００１７】
オペコード１１２がロード命令を示す場合、メモリアクセス処理ユニット１０６は、データキャッシュメモリ１０７の５番地のデータＦをロードしてベクトルレジスタ２０１の第１の領域に書き込み、データキャッシュメモリ１０７の３番地のデータＤをロードしてベクトルレジスタ２０１の第２の領域に書き込み、データキャッシュメモリ１０７の１３番地のデータＮをロードしてベクトルレジスタ２０１の第３の領域に書き込み、データキャッシュメモリ１０７の７番地のデータＨをロードしてベクトルレジスタ２０１の第４の領域に書き込む。
【００１８】
オペコード１１２がストア命令を示す場合、メモリアクセス処理ユニット１０６は、ベクトルレジスタ２０１の第１の領域に記憶されているデータＦをデータキャッシュメモリ１０７の５番地にストアし、ベクトルレジスタ２０１の第２の領域に記憶されているデータＤをデータキャッシュメモリ１０７の３番地にストアし、ベクトルレジスタ２０１の第３の領域に記憶されているデータＮをデータキャッシュメモリ１０７の１３番地にストアし、ベクトルレジスタ２０１の第４の領域に記憶されているデータＨをデータキャッシュメモリ１０７の７番地にストアする。
【００１９】
演算処理装置は、データレベル並列性を活用するために、ＳＩＭＤ（Single Instruction Multiple Data streams）演算を行うことができる。また、演算処理装置は、ＳＩＭＤ演算が適用できる割合を向上させるため、インダイレクトアクセス命令８００を実行することができる。インダイレクトアクセス命令８００は、上記のように、１命令で複数の実効アドレス７２１〜７２４にメモリアクセスを行う命令であり、１命令で複数の独立したメモリアクセスが可能な命令である。
【００２０】
一般的には、命令デコードユニット１０３は、１個のインダイレクトアクセス命令を複数のスカラーアクセス命令に分解してデコードし、メモリアクセス処理ユニット１０６は、その複数のスカラーアクセス命令を実行する。スカラーアクセス命令は、１命令で１個のアドレスにメモリアクセスを行う命令である。例えば、図２の場合、命令デコードユニット１０３は、複数のアドレス（５番地、３番地、１３番地及び７番地）にアクセスを行うインダイレクトアクセス命令を、５番地にアクセスするスカラーアクセス命令と３番地にアクセスするスカラーアクセス命令と１３番地にアクセスするスカラーアクセス命令と７番地にアクセスするスカラーアクセス命令に分解してデコードする。すなわち、命令デコードユニット１０３は、１個のインダイレクトアクセス命令を複数のスカラーアクセス命令としてデコードする。メモリアクセス処理ユニット１０６は、その４個のスカラーアクセス命令を順に実行する。しかし、この実行は、メモリアクセス速度が低速になってしまう課題がある。以下、インダイレクトアクセス命令を高速に実行する演算処理装置の制御方法を説明する。
【００２１】
ストライドアクセス検出回路１０９は、アドレス検出部であり、実効アドレス値演算器１０５から実効アドレス１１５を入力し、インダイレクトアクセス命令の複数の実効アドレス１１５の間隔がすべて同じであるか否かを検出する。また、ストライドアクセス検出回路１０９は、検出した実効アドレス１１５の間隔が履歴テーブル１０８から出力されたストライド幅１１９と一致しているかについて、比較して検証する。以下、図３を参照しながら、ストライドアクセス検出回路１０９の構成を説明する。
【００２２】
図３は、ストライドアクセス検出回路１０９の構成例を示す図である。ストライドアクセス検出回路１０９は、減算器３０５，３０６，３０７と、比較器３０８，３０９，３１０と、論理和演算回路（ＯＲ回路）３１１と、論理積演算回路（ＡＮＤ回路）３１２と、を有する。実効アドレス１１５は、上記のように、第１の実効アドレス７２１と、第２の実効アドレス７２２と、第３の実効アドレス７２３と、第４の実効アドレス７２４を含む。
【００２３】
減算器３０５は、第２の実効アドレス７２２から第１の実効アドレス７２１を減算し、その減算結果を、第１の実効アドレス７２１と第２の実効アドレス７２２の間隔として出力する。減算器３０６は、第３の実効アドレス７２３から第２の実効アドレス７２２を減算し、その減算結果を、第２の実効アドレス７２２と第３の実効アドレス７２３の間隔として出力する。減算器３０７は、第４の実効アドレス７２４から第３の実効アドレス７２３を減算し、その減算結果を、第３の実効アドレス７２３と第４の実効アドレス７２４の間隔として出力する。
【００２４】
比較器３０８は、減算器３０５の出力値とストライド幅１１９とを比較し、減算器３０５の出力値とストライド幅１１９の結果とが一致する場合には１を出力し、減算器３０５の出力値とストライド幅１１９とが一致しない場合には０を出力する。比較器３０９は、減算器３０５及び減算器３０６の出力値を比較し、減算器３０５及び減算器３０６の出力値が同じである場合には１を出力し、減算器３０５及び減算器３０６の出力値が異なる場合には０を出力する。比較器３１０は、減算器３０６及び減算器３０７の出力値を比較し、減算器３０６及び減算器３０７の出力値が同じである場合には１を出力し、減算器３０６及び減算器３０７の出力値が異なる場合には０を出力する。
【００２５】
論理和演算回路３１１は、比較器３０８の出力値と制御信号１２０との論理和値を出力する。制御信号１２０が１の場合には、比較器３０８の結果にかかわらず、論理和演算回路３１１の出力は常に１となる。制御信号１２０が０の場合には、論理和演算回路３１１の出力は比較器３０８の出力と同値になり、比較器３０８の出力値が１の場合には、論理和演算回路３１１は１を出力し、比較器３０８の出力値が０の場合には、論理和演算回路３１１は０を出力する。
【００２６】
論理積演算回路３１２は、制御信号１２０が１である場合、比較器３０９及び３０１０の出力値の論理積値をストライド検出信号１１６として出力する。減算器３０５は、減算結果をストライド幅１１７として出力する。第１〜第４の実効アドレス７２１〜７２４の間隔がすべて同じである場合には、ストライド検出信号１１６が１になり、その時の第１〜第４の実効アドレス７２１〜７２４の間隔がストライド幅１１７である。第１〜第４の実効アドレス７２１〜７２４の間隔が同じでない場合には、ストライド検出信号１１６が０になる。以下、ストライド検出信号１１６が１である時のインダイレクトアクセス命令をストライドアクセス命令と呼ぶ。ストライドアクセス検出回路１０９は、実効アドレス１１５を入力し、ストライド検出信号１１６を制御回路１１０に出力し、ストライド幅１１７を履歴テーブル１０８に出力する。また、論理積演算回路３１２は、制御信号１２０が０である場合、比較器３０８、比較器３０９及び比較器３１０の出力値の論理積値をストライド検出信号１１６として出力する。第１〜第４の実効アドレス７２１〜７２４のアドレスの間隔がすべて同じ、かつ、ストライド幅１１９の値と同じである場合には、ストライド検出信号１１６を１として出力する。第１〜第４の実効アドレス７２１〜７２４のアドレスの間隔がすべて同じではない、又は、ストライド幅１１９と同じ値でない場合には、ストライド検出信号１１６は０となる。このようにストライドアクセス検出回路１０９は、制御信号１２０によって動作を変えることができる。なお、実効アドレス７２１〜７２４が４個の場合を例に説明したが、４個に限定されない。
【００２７】
図１において、制御回路１１０は、ストライド検出信号１１６が１の場合、履歴テーブル１０８に対して、命令アドレス１１１毎にストライド幅１１７を登録することができる。以下、図４を参照しながら、履歴テーブル１０８の構成を説明する。
【００２８】
図４は、履歴テーブル１０８の構成例を示す図である。履歴テーブル１０８は、エントリ部４００及び比較器４０４を有する。命令アドレス１１１は、タグアドレス４１１及びインデックスアドレス４１２を有する。タグアドレス４１１は、命令アドレス１１１の上位アドレスである。インデックスアドレス４１２は、命令アドレス１１１の下位アドレスである。
【００２９】
まず、履歴テーブル１０８への登録方法を説明する。制御回路１１０は、ストライド検出信号１１６が１の場合、インデックスアドレス４１２が示すエントリ部４００内のエントリに対して、有効を示す有効フラグ４０１を書き込み、タグアドレス４１１をタグアドレス４０２として書き込み、ストライド幅１１７をストライド幅４０３として書き込む。すなわち、制御回路１１０は、インダイレクトアクセス命令のインデックスアドレス４１２毎に、複数のアドレスの間隔がすべて同じであることを示す有効フラグ４０１、タグアドレス４０２及びストライド幅４０３を履歴テーブル１０８のエントリ部４００に登録する。
【００３０】
次に、履歴テーブル１０８の検索方法を説明する。履歴テーブル１０８が命令アドレス１１１を入力すると、制御回路１１０は、インデックスアドレス４１２が示すエントリ部４００内のエントリに記憶されている有効フラグ４０１、タグアドレス４０２及びストライド幅４０３を読み出す。比較器４０４は、読み出された有効フラグ４０１が有効を示し、かつ読み出されたタグアドレス４０２とタグアドレス４１１が同じ場合には、１のヒット信号１１８を出力し、それ以外の場合には、０のヒット信号１１８を出力する。また、履歴テーブル１０８は、読み出されたストライド幅４０３をストライド幅１１９として出力する。履歴テーブル１０８は、ヒット信号１１８及びストライド幅１１９を命令デコードユニット１０３に出力する。ストライド幅１１９は、命令デコードユニット１０３、実効アドレス値演算器１０５及びメモリアクセス処理ユニット１０６を介して、データキャッシュメモリ１０７に出力される。
【００３１】
なお、履歴テーブル１０８は、ダイレクトマップの構造を例に説明したが、セットアソシアティブやフルアソシアティブの構造でもよい。
【００３２】
インダイレクトアクセス命令がストライドアクセス命令である場合、メモリアクセス処理ユニット１０６は、データキャッシュメモリ１０７に対して高速にアクセスすることができる。以下、図５を参照しながら、その詳細を説明する。
【００３３】
図５は、データキャッシュメモリ１０７の構成例を示す図である。データキャッシュメモリ１０７は、８個のメモリバンク５００と、行デコーダ５０３と、列デコーダ５０４と、マルチプレクサ５０５とを有する。
【００３４】
複数のメモリバンク５００は、各アドレスのデータを記憶する。列デコーダ５０４は、選択部であり、実効アドレス１１５及びストライド幅１１９に応じて、下位アドレス選択信号５０２を出力し、メモリバンク５００を選択する。行デコーダ５０３は、選択部であり、実効アドレス１１５に応じて、上位アドレス選択信号５０１を出力し、選択されたメモリバンク５００内のアドレスを選択する。マルチプレクサ５０５は、ストライド幅１１９に応じて、列デコーダ５０４及び行デコーダ５０３により選択されたアドレスに対してデータをロード又はストアする。
【００３５】
まず、実効アドレス１１５が０番地、１番地、２番地、３番地であるストライドアクセス命令（ロード命令）の場合を例に説明する。このストライドアクセス命令は、連続する４個のアドレスのアクセス命令である。実効アドレス１１５の先頭アドレスは０番地であり、ストライド幅１１９は１である。行デコーダ５０３は、０の上位アドレス選択信号５０１を出力し、列デコーダ５０４は、０、１、２及び３の下位アドレス選択信号５０２を出力する。メモリバンク５００は、第１行において、第１〜第４列に記憶されている０番地〜３番地のデータをロードしてマルチプレクサ５０５に出力する。マルチプレクサ５０５は、その０番地〜３番地のデータを出力する。そして、メモリアクセス処理ユニット１０６は、その０番地〜３番地のデータをベクトルレジスタ２０１に書き込む。
【００３６】
また、ストア命令の場合、マルチプレクサ５０５は、ベクトルレジスタ２０１内の４個のデータを第１〜第４列のメモリバンク５００に出力する。メモリバンク５００は、第１行において、第１〜第４列の０番地〜３番地に４個のデータをストアする。
【００３７】
次に、実効アドレス１１５が８番地、１０番地、１２番地、１４番地であるストライドアクセス命令（ロード命令）の場合を例に説明する。実効アドレス１１５の先頭アドレスは８番地であり、ストライド幅１１９は２である。行デコーダ５０３は、８の上位アドレス選択信号５０１を出力し、列デコーダ５０４は、０、２、４及び６の下位アドレス選択信号５０２を出力する。メモリバンク５００は、第２行において、第１、第３、第５及び第７列に記憶されている８番地、１０番地、１２番地、１４番地のデータをロードしてマルチプレクサ５０５に出力する。マルチプレクサ５０５は、その８番地、１０番地、１２番地、１４番地のデータを出力する。そして、メモリアクセス処理ユニット１０６は、その８番地、１０番地、１２番地、１４番地のデータをベクトルレジスタ２０１に書き込む。
【００３８】
また、ストア命令の場合、マルチプレクサ５０５は、ベクトルレジスタ２０１内の４個のデータを第１、第３、第５及び第７列のメモリバンク５００に出力する。メモリバンク５００は、第２行において、第１、第３、第５及び第７列の８番地、１０番地、１２番地、１４番地に４個のデータをストアする。
【００３９】
なお、図５には、説明の簡単のために、ストライド幅１１９が２以下の場合のメモリバンク５００の構成を説明したが、メモリバンク数を増やすことにより、ストライド幅１１９が３以上のメモリバンク５００の構成にすることもできる。
【００４０】
以上のように、データキャッシュメモリ１０７は、ストライドアクセス命令の場合、メモリアクセス処理ユニット１０６の制御の下、複数の実効アドレス１１５に対して並列にアクセスすることができる。したがって、インダイレクトアクセス命令がストライドアクセス命令である場合、メモリアクセス処理ユニット１０６は、データキャッシュメモリ１０７に対して高速にアクセスすることができる。
【００４１】
図６は、第１の実施形態による演算処理装置の制御方法を示すフローチャートである。ステップＳ６０１では、命令フェッチユニット１０２は、命令キャッシュメモリ１０１に記憶されているインダイレクトアクセス命令１２１をフェッチし、そのフェッチしたインダイレクトアクセス命令１２２を命令デコードユニット１０３に出力し、そのフェッチしたインダイレクトアクセス命令１２１のアドレス１１１を履歴テーブル１０８に出力する。
【００４２】
次に、ステップＳ６０２では、履歴テーブル１０８は、制御回路１１０の制御の下、図４に示すように、アドレス１１１に応じて、ヒット信号１１８及びストライド幅１１９を出力する。履歴テーブル１０８は、読み出された有効フラグ４０１が有効を示し、かつ読み出されたタグアドレス４０２とタグアドレス４１１が同じ場合には、１のヒット信号１１８を出力し、それ以外の場合には、０のヒット信号１１８を出力する。ヒット信号１１８が１である場合には、アドレス１１１に対応するインダイレクトアクセス命令がストライドアクセス命令であり、インダイレクトアクセス命令の複数のアドレスの間隔がすべて同じであることを意味する。ヒット信号１１８が０である場合には、アドレス１１１に対応するインダイレクトアクセス命令がストライドアクセス命令ではなく、インダイレクトアクセス命令の複数のアドレスの間隔が同じでないか、又は、アドレス１１１に対応するインダイレクトアクセス命令が初めてフェッチされたことを意味する。
【００４３】
次に、ステップＳ６０３では、命令デコードユニット１０３は、ヒット信号１１８が１及び０のいずれかであるのかを判定する。そして、命令デコードユニット１０３は、ヒット信号１１８が１であると判定した場合には、インダイレクトアクセス命令がストライドアクセス命令であると予測し、ステップＳ６０９に処理を進める。また、命令デコードユニット１０３は、ヒット信号１１８が０であると判定した場合には、インダイレクトアクセス命令がストライドアクセス命令ではないと予測し、ステップＳ６０４に処理を進める。
【００４４】
ステップＳ６０４では、命令デコードユニット１０３は、インダイレクトアクセス命令を複数のスカラーアクセス命令に分解してデコードする。例えば、図２に示すように、インダイレクトアクセス命令が５番地、３番地、１３番地及び７番地のアドレスを有する場合、命令フェッチユニット１０２は、そのインダイレクトアクセス命令を、５番地のスカラーアクセス命令、３番地のスカラーアクセス命令、１３番地のスカラーアクセス命令、及び７番地のスカラーアクセス命令に分解してデコードする。すなわち、命令デコードユニット１０３は、１個のインダイレクトアクセス命令を複数のスカラーアクセス命令としてデコードする。そして、命令デコードユニット１０３は、オペコード１１２及びレジスタ番号１１３を出力する。レジスタファイル１０４は、レジスタ番号１１３に応じて、オペランド１１４を実効アドレス値演算器１０５に出力する。
【００４５】
次に、ステップＳ６０５では、実効アドレス値演算器１０５は、オペコード１１２及びオペランド１１４に応じて、実効アドレス１１５及びオペランド１１４を出力する。メモリアクセス処理ユニット１０６は、オペコード１１２、実効アドレス１１５及びオペランド１１４に応じて、データキャッシュメモリ１０７に対して、複数のスカラーアクセス命令に対応するメモリアクセスを順に行う。複数のスカラーアクセス命令がロード命令の場合、メモリアクセス処理ユニット１０６は、データキャッシュメモリ１０７からデータをロードし、そのロードしたデータをレジスタファイル１０４内のレジスタに書き込む。複数のスカラーアクセス命令がストア命令の場合、メモリアクセス処理ユニット１０６は、レジスタファイル１０４内のレジスタに記憶されているデータをデータキャッシュメモリ１０７にストアする。
【００４６】
次に、ステップＳ６０６において、制御回路１１０は、制御信号１２０を１としてストライドアクセス検出回路１０９に出力する。ストライドアクセス検出回路１０９は、図３に示すように、複数の実効アドレス１１５の間隔がすべて同じであるか否かを検出し、ストライド検出信号１１６及びストライド幅１１７を出力する。複数の実効アドレス１１５の間隔がすべて同じである場合には、ストライド検出信号１１６が１になり、複数の実効アドレス１１５の間隔が同じでない場合には、ストライド検出信号１１６が０になる。
【００４７】
次に、ステップＳ６０７では、制御回路１１０は、ストライド検出信号１１６が１及び０のいずれであるのかを判定する。そして、制御回路１１０は、ストライド検出信号１１６が１であると判定した場合には、ステップＳ６０８に処理を進め、ストライド検出信号１１６が０であると判定した場合には、処理を終了し、次の命令の処理を繰り返す。
【００４８】
ステップＳ６０８では、制御回路１１０は、図４に示すように、履歴テーブル１０８において、インデックスアドレス４１２が示すエントリ部４００内のエントリに対して、有効を示す有効フラグ４０１を書き込み、タグアドレス４１１をタグアドレス４０２として書き込み、ストライド幅１１７をストライド幅４０３として書き込む。その後、制御回路１１０は、処理を終了し、次の命令の処理を繰り返す。
【００４９】
ステップＳ６０９〜Ｓ６１２は、インダイレクトアクセス命令がストライドアクセス命令であると予測して行う処理である。ステップＳ６０９では、命令デコードユニット１０３は、インダイレクトアクセス命令（ストライドアクセス命令）を１命令として内部命令にデコードする。そして、命令デコードユニット１０３は、ストライド幅１１９、オペコード１１２及びレジスタ番号１１３を出力する。レジスタファイル１０４は、レジスタ番号１１３に応じて、オペランド１１４を実効アドレス値演算器１０５に出力する。
【００５０】
次に、ステップＳ６１０では、実効アドレス値演算器１０５は、ストライド幅１１９、オペコード１１２及びオペランド１１４に応じて、ストライド幅１１９、実効アドレス１１５及びオペランド１１４を出力する。メモリアクセス処理ユニット１０６は、ストライド幅１１９、オペコード１１２、実効アドレス１１５及びオペランド１１４に応じて、データキャッシュメモリ１０７に対して、ストライドアクセス命令のアクセスを行う。ストライドアクセス命令がロード命令の場合、メモリアクセス処理ユニット１０６は、データキャッシュメモリ１０７から複数のアドレスのデータを並列にロードし、そのロードしたデータをレジスタファイル１０４内のレジスタに並列に書き込む。ストライドアクセス命令がストア命令の場合、メモリアクセス処理ユニット１０６は、レジスタファイル１０４内のレジスタに記憶されている複数のアドレスのデータをデータキャッシュメモリ１０７に並列にストアする。
【００５１】
次に、ステップＳ６１１において、制御回路１１０は、制御信号１２０を０としてストライドアクセス検出回路１０９に出力する。ストライドアクセス検出回路１０９は、予測の成功又は失敗を検証するため、図３に示すように、複数の実効アドレス１１５の間隔がすべて同じであり、かつ、複数の実効アドレス１１５間のアドレスの間隔と履歴テーブル１０８から出力されたストライド幅１１９が同じであるか否かを検出し、ストライド検出信号１１６を出力する。複数の実効アドレス１１５間のアドレスの間隔がすべて同じであり、かつ、複数の実効アドレス１１５間のアドレスの間隔と履歴テーブル１０８から出力されたストライド幅１１９が同じである場合には、ストライド検出信号１１６が１になり、複数の実効アドレス１１５の間隔が同じではない場合、又は、複数の実効アドレス１１５間のアドレスの間隔と履歴テーブル１０８から出力されたストライド幅１１９が同じでない場合には、ストライド検出信号１１６が０になる。例えば、履歴テーブル１０８への登録時には、第１〜第４のアドレス７２１〜７２４の間隔がすべて同じであったが、その後、インデックスレジスタ番号８０４が示すベクトルレジスタに記憶されている第１〜第４のインデックスアドレス７１１〜７１４が書き換えられる場合がある。その場合、第１〜第４のアドレス７２１〜７２４の間隔が同じでなくなり、ストライド検出信号１１６が０になる場合がある。
【００５２】
次に、ステップＳ６１２では、制御回路１１０は、ストライド検出信号１１６が１及び０のいずれであるのかを判定する。そして、制御回路１１０は、ストライド検出信号１１６が０であると判定した場合には、予測失敗であるので、ステップＳ６１３に処理を進め、ストライド検出信号１１６が１であると判定した場合には、予測成功であるので、処理を終了し、次の命令の処理を繰り返す。
【００５３】
次に、ステップＳ６１３では、制御回路１１０は、予測が失敗したので、演算処理装置の各ユニットに対して、上記のストライドアクセス命令のメモリアクセス処理を取り消す処理を行う。
【００５４】
次に、ステップＳ６１４では、制御回路１１０は、予測が失敗したので、履歴テーブル１０８の上記のアドレス１１１に対応するエントリを削除する。
【００５５】
次に、ステップＳ６１５では、命令デコードユニット１０３は、インダイレクトアクセス命令を複数のスカラーアクセス命令に分解してデコードする。すなわち、命令デコードユニット１０３は、１個のインダイレクトアクセス命令を複数のスカラーアクセス命令としてデコードする。そして、命令デコードユニット１０３は、オペコード１１２及びレジスタ番号１１３を出力する。レジスタファイル１０４は、レジスタ番号１１３に応じて、オペランド１１４を実効アドレス値演算器１０５に出力する。
【００５６】
次に、ステップＳ６１６では、実効アドレス値演算器１０５は、オペコード１１２及びオペランド１１４に応じて、実効アドレス１１５及びオペランド１１４を出力する。メモリアクセス処理ユニット１０６は、ステップＳ６０５と同様に、オペコード１１２、実効アドレス１１５及びオペランド１１４に応じて、データキャッシュメモリ１０７に対して、複数のスカラーアクセス命令に対応するメモリアクセスを順に行う。その後、制御回路１１０は、処理を終了し、次の命令の処理を繰り返す。
【００５７】
以上のように、演算処理装置は、履歴テーブル１０８を用いることにより、命令のデコード前に、インダイレクトアクセス命令がストライドアクセス命令であるか否かを予測することができる。これにより、命令デコードユニット１０３は、インダイレクトアクセス命令がストライドアクセス命令である場合にはストライドアクセス命令を１命令としてデコードし、インダイレクトアクセス命令がストライドアクセス命令でない場合には複数のスカラーアクセス命令に分解してデコードする。すなわち、インダイレクトアクセス命令がストライドアクセス命令でない場合、命令デコードユニット１０３は、１個のインダイレクトアクセス命令を複数のスカラーアクセス命令としてデコードする。
【００５８】
例えば、インダイレクトアクセス命令がｎ個のアドレスを有する場合には、命令デコードユニット１０３は、そのインダイレクトアクセス命令をｎ個のスカラーアクセス命令に分解してデコードする。すなわち、インダイレクトアクセス命令がｎ個のアドレスを有する場合、命令デコードユニット１０３は、１個のインダイレクトアクセス命令をｎ個のスカラーアクセス命令としてデコードする。インダイレクトアクセス命令がストライドアクセス命令である場合、命令デコードユニット１０３は、そのストライドアクセス命令を１命令としてデコードするので、最大でｎ倍の速度向上を得ることができる。通常、ｎは、２〜１６である。ｎが大きいほど、この効果は増大する。インダイレクトアクセス命令がストライドアクセス命令である場合、メモリアクセス処理ユニット１０６は、データキャッシュメモリ１０７に対して高速にアクセスすることができる。
【００５９】
（第２の実施形態）
図８は、第２の実施形態による履歴テーブル１０８の構成例を示す図である。以下、本実施形態が第１の実施形態と異なる点を説明する。インダイレクトアクセス命令８００は、上記のように、オペコード８０１と、ディスティネーションレジスタ番号８０２と、ベースレジスタ番号８０３と、インデックスレジスタ番号８０４とを有する。また、演算命令８０５は、オペコード８０６と、ディスティネーションレジスタ番号８０７と、第１ソースオペランドレジスタ番号８０８と、第２ソースオペランドレジスタ番号８０９と、を有する。ディスティネーションレジスタ番号８０２と、ベースレジスタ番号８０３と、インデックスレジスタ番号８０４と、ディスティネーションレジスタ番号８０７と、第１ソースオペランドレジスタ番号８０８と、第２ソースオペランドレジスタ番号８０９は、レジスタファイル１０４内の複数のレジスタのうちのいずれかの番号である。ベースレジスタ番号８０３及びインデックスレジスタ番号８０４は、アクセス対象のアドレスを記憶するレジスタの番号である。第１ソースオペランドレジスタ番号８０８と第２ソースオペランドレジスタ番号８０９は、演算命令の入力対象のデータを記憶するレジスタの番号である。ディスティネーションレジスタ番号８０２は、ロードしたデータを書き込むレジスタの番号、又はストアするデータを記憶するレジスタの番号である。ディスティネーションレジスタ番号８０７は、演算結果を書き込むレジスタの番号である。
【００６０】
履歴テーブル１０８は、エントリ部８１０を有し、命令フェッチユニット１０２がフェッチしたインダイレクトアクセス命令８００内のディスティネーションレジスタ番号８０２及びインデックスレジスタ番号８０４を入力する。制御回路１１０は、レジスタファイル１０４内のレジスタ番号毎に、複数のアドレスの間隔がすべて同じであることを示す有効フラグ８１１及びストライド幅８１２を履歴テーブル１０８のエントリ部８１０に登録する。
【００６１】
まず、履歴テーブル１０８への登録方法を説明する。制御回路１１０は、ストライド検出信号１１６が１の場合、インデックスレジスタ番号８０４が示すエントリ部８１０内のエントリに対して、有効を示す有効フラグ８１１を書き込み、ストライド幅１１７をストライド幅８１２として書き込む。
【００６２】
また、インダイレクトアクセス命令がロード命令の場合、そのロード命令が実効されると、メモリアクセス処理ユニット１０６は、ディスティネーションレジスタ番号８０２が示すレジスタに対して、ロードしたデータを書き込む。演算命令の場合、その演算が実行されるとディスティネーションレジスタ番号８０７が示すレジスタに対して演算結果を書き込む。その結果、ディスティネーションレジスタ番号８０２及びディスティネーションレジスタ番号８０７が示すレジスタの値が書き換えられてしまう。そこで、制御回路１１０は、ディスティネーションレジスタ番号８０２及びディスティネーションレジスタ番号８０７のエントリを履歴テーブル１０８から削除する。これにより、履歴テーブル１０８を用いた予測の失敗を防止することができる。
【００６３】
次に、履歴テーブル１０８の検索方法を説明する。履歴テーブル１０８がフェッチしたインダイレクト命令を入力すると、制御回路１１０は、インデックスレジスタ番号８０４が示すエントリ部８１０内のエントリに記憶されている有効フラグ８１１及びストライド幅８１２をそれぞれヒット信号１１８及びストライド幅１１９として出力する。履歴テーブル１０８は、有効フラグ８１１が有効を示す場合には、１のヒット信号１１８を出力し、有効フラグ８１１が無効を示す場合には、０のヒット信号１１８を出力する。
【００６４】
図９は、第２の実施形態による演算処理装置の制御方法を示すフローチャートである。ステップＳ９０１では、命令フェッチユニット１０２は、命令キャッシュメモリ１０１に記憶されている命令１２１をフェッチし、そのフェッチした命令１２２を命令デコードユニット１０３及び履歴テーブル１０８に出力する。
【００６５】
次に、ステップＳ９０２では、命令デコードユニット１０３は、命令１２２をデコードする。次に、ステップＳ９０３では、命令デコードユニット１０３は、命令１２２がインダイレクトアクセス命令及び演算命令のいずれであるのかを判定する。そして、命令デコードユニット１０３は、命令１２２がインダイレクトアクセス命令であると判定した場合には、ステップＳ９０４に処理を進め、命令１２２が演算命令であると判定した場合には、ステップＳ９１９に処理を進める。
【００６６】
次に、ステップＳ９０４では、履歴テーブル１０８は、制御回路１１０の制御の下、図８に示すように、アクセス命令１２２のインデックスレジスタ番号８０４に応じて、ヒット信号１１８及びストライド幅１１９を出力する。履歴テーブル１０８は、読み出された有効フラグ８１１が有効を示す場合には、１のヒット信号１１８を出力し、読み出された有効フラグ８１１が無効を示す場合には、０のヒット信号１１８を出力する。ヒット信号１１８が１である場合には、アクセス命令１２２がストライドアクセス命令であり、インダイレクトアクセス命令の複数のアドレスの間隔がすべて同じであることを意味する。ヒット信号１１８が０である場合には、アクセス命令１２２がストライドアクセス命令ではなく、インダイレクトアクセス命令の複数のアドレスの間隔が同じでないか、アクセス命令１２２が初めてフェッチされたことを意味する。
【００６７】
次に、ステップＳ９０５では、命令デコードユニット１０３は、ヒット信号１１８が１及び０のいずれかであるのかを判定する。そして、命令デコードユニット１０３は、ヒット信号１１８が１であると判定した場合には、インダイレクトアクセス命令がストライドアクセス命令であると予測し、ステップＳ９１４に処理を進める。また、命令デコードユニット１０３は、ヒット信号１１８が０であると判定した場合には、インダイレクトアクセス命令がストライドアクセス命令ではないと予測し、ステップＳ９０６に処理を進める。
【００６８】
ステップＳ９０６では、命令デコードユニット１０３は、１個のインダイレクトアクセス命令を複数のスカラーアクセス命令に分解してデコードする。すなわち、命令デコードユニット１０３は、１個のインダイレクトアクセス命令を複数のスカラーアクセス命令としてデコードする。そして、命令デコードユニット１０３は、オペコード１１２及びレジスタ番号１１３を出力する。レジスタファイル１０４は、レジスタ番号１１３に応じて、オペランド１１４を実効アドレス値演算器１０５に出力する。
【００６９】
次に、ステップＳ９０７では、履歴テーブル１０８は、制御回路１１０の制御の下、図８に示すように、ディスティネーションレジスタ番号８０２に応じて、ヒット信号１１８及びストライド幅１１９を出力する。
【００７０】
次に、ステップＳ９０８では、制御回路１１０は、ヒット信号１１８が１及び０のいずれであるのかを判定する。そして、制御回路１１０は、ヒット信号１１８が１であると判定した場合には、ステップＳ９０９に処理を進め、ヒット信号１１８が０であると判定した場合には、ステップＳ９１０に処理を進める。
【００７１】
ステップＳ９０９では、制御回路１１０は、ディスティネーションレジスタ番号８０２に対応するエントリを履歴テーブル１０８から削除し、ステップＳ９１０に処理を進める。
【００７２】
ステップＳ９１０では、実効アドレス値演算器１０５は、オペコード１１２及びオペランド１１４に応じて、実効アドレス１１５及びオペランド１１４を出力する。メモリアクセス処理ユニット１０６は、図６のステップＳ６０５と同様に、オペコード１１２、実効アドレス１１５及びオペランド１１４に応じて、データキャッシュメモリ１０７に対して、複数のスカラーアクセス命令に対応するメモリアクセスを順に行う。
【００７３】
次に、ステップＳ９１１では、ストライドアクセス検出回路１０９は、図３に示すように、複数の実効アドレス１１５の間隔がすべて同じであるか否かを検出し、ストライド検出信号１１６及びストライド幅１１７を出力する。複数の実効アドレス１１５の間隔がすべて同じである場合には、ストライド検出信号１１６が１になり、複数の実効アドレス１１５の間隔が同じでない場合には、ストライド検出信号１１６が０になる。例えばアクセス命令（ストライドアクセス命令）１２１が初めてフェッチされた場合には、ストライド検出信号１１６が１になる。
【００７４】
次に、ステップＳ９１２では、制御回路１１０は、ストライド検出信号１１６が１及び０のいずれであるのかを判定する。そして、制御回路１１０は、ストライド検出信号１１６が１であると判定した場合には、ステップＳ９１３に処理を進め、ストライド検出信号１１６が０であると判定した場合には、処理を終了し、次の命令の処理を繰り返す。
【００７５】
ステップＳ９１３では、制御回路１１０は、図８に示すように、履歴テーブル１０８において、アクセス命令１２２のインデックスレジスタ番号８０４が示すエントリ部８１０内のエントリに対して、有効を示す有効フラグ８１１を書き込み、ストライド幅１１７をストライド幅８１２として書き込む。その後、制御回路１１０は、処理を終了し、次の命令の処理を繰り返す。
【００７６】
ステップＳ９１４では、命令デコードユニット１０３は、インダイレクトアクセス命令（ストライドアクセス命令）を１命令として内部命令にデコードする。そして、命令デコードユニット１０３は、ストライド幅１１９、オペコード１１２及びレジスタ番号１１３を出力する。レジスタファイル１０４は、レジスタ番号１１３に応じて、オペランド１１４を実効アドレス値演算器１０５に出力する。
【００７７】
次に、ステップＳ９１５では、履歴テーブル１０８は、制御回路１１０の制御の下、図８に示すように、ディスティネーションレジスタ番号８０２に応じて、ヒット信号１１８及びストライド幅１１９を出力する。
【００７８】
次に、ステップＳ９１６では、制御回路１１０は、ヒット信号１１８が１及び０のいずれであるのかを判定する。そして、制御回路１１０は、ヒット信号１１８が１であると判定した場合には、ステップＳ９１７に処理を進め、ヒット信号１１８が０であると判定した場合には、ステップＳ９１８に処理を進める。
【００７９】
ステップＳ９１７では、制御回路１１０は、ディスティネーションレジスタ番号８０２に対応するエントリを履歴テーブル１０８から削除し、ステップＳ９１８に処理を進める。
【００８０】
ステップＳ９１８では、実効アドレス値演算器１０５は、ストライド幅１１９、オペコード１１２及びオペランド１１４に応じて、ストライド幅１１９、実効アドレス１１５及びオペランド１１４を出力する。メモリアクセス処理ユニット１０６は、図６のステップＳ６１０と同様に、ストライド幅１１９、オペコード１１２、実効アドレス１１５及びオペランド１１４に応じて、データキャッシュメモリ１０７に対して、ストライドアクセス命令のアクセスを行う。その後、制御回路１１０は、処理を終了し、次の命令の処理を繰り返す。
【００８１】
ステップＳ９１９では、命令デコードユニット１０３は、演算命令をデコードし、ステップＳ９１５に処理を進める。ステップＳ９１５では、履歴テーブル１０８は、制御回路１１０の制御の下、図８に示すように、演算命令のディスティネーションレジスタ番号８０７に応じて、ヒット信号１１８及びストライド幅１１９を出力する。次に、ステップＳ９１６では、制御回路１１０は、ヒット信号１１８が１及び０のいずれであるのかを判定する。そして、制御回路１１０は、ヒット信号１１８が１であると判定した場合には、ステップＳ９１７に処理を進め、ヒット信号１１８が０であると判定した場合には、ステップＳ９１８に処理を進める。ステップＳ９１７では、制御回路１１０は、演算命令のディスティネーションレジスタ番号８０７に対応するエントリを履歴テーブル１０８から削除し、ステップＳ９１８に処理を進める。ステップＳ９１８では、演算命令は、第１ソースオペランドレジスタ番号８０８が示すデータと第２ソースオペランドレジスタ番号８０９が示すデータを入力とし、オペコード１１２が示す演算を行い、演算結果をディスティネーションレジスタ番号８０７が示すレジスタに書き込む。その後、制御回路１１０は、処理を終了し、次の命令の処理を繰り返す。
【００８２】
以上のように、インダイレクトアクセス命令がストライドアクセス命令である場合、メモリアクセス処理ユニット１０６は、データキャッシュメモリ１０７に対して高速にアクセスすることができる。
【００８３】
また、制御回路１１０は、ディスティネーションレジスタ番号８０２が示すエントリを履歴テーブル１０８から削除するので、第１の実施形態のような予測の失敗を防止できる。これにより、演算処理装置は、図６のステップＳ６１１のストライドアクセスの検証処理、及びステップＳ６１３〜Ｓ６１６のストライドアクセス命令の実行の取り消し処理を行う必要がなくなる。
【００８４】
また、ストライドアクセス検出回路１０９は、ステップＳ９１１の履歴テーブル１０８への登録時のみ動作する。この場合、ストライド幅１１９との比較は不要になるため、比較器３０８と論理和演算回路３１１と制御信号１２０は不要になる。さらに、ステップＳ９０６において、命令デコードユニット１０３は、インダイレクトアクセス命令を複数のスカラーアクセス命令に分解してデコードするので、演算処理装置は、低速動作となる。そのため、ストライドアクセス検出回路１０９は、低速動作の回路でよいので、コストを低減できる。
【００８５】
なお、上記実施形態は、何れも本発明を実施するにあたっての具体化の例を示したものに過ぎず、これらによって本発明の技術的範囲が限定的に解釈されてはならないものである。すなわち、本発明はその技術思想、又はその主要な特徴から逸脱することなく、様々な形で実施することができる。
【符号の説明】
【００８６】
１０１  命令キャッシュメモリ
１０２  命令フェッチユニット
１０３  命令デコードユニット
１０４  レジスタファイル
１０５  実効アドレス値演算器
１０６  メモリアクセス処理ユニット
１０７  データキャッシュメモリ
１０８  履歴テーブル
１０９  ストライドアクセス検出回路
１１０  制御回路
【図１】
2018194946.tif 000003
【図２】
2018194946.tif 000004
【図３】
2018194946.tif 000005
【図４】
2018194946.tif 000006
【図５】
2018194946.tif 000007
【図６】
2018194946.tif 000008
【図７】
2018194946.tif 000009
【図８】
2018194946.tif 000010
【図９】
2018194946.tif 000011