(57)【特許請求の範囲】
【請求項１】
主記憶装置に記憶されたデータをキャッシュメモリに保持させるプリフェッチ命令を実行する演算処理装置において、
命令をデコードする命令デコード部と、
前記命令デコード部がデコードした命令に基づいて、演算を実行する演算部と、
前記命令デコード部がデコードした命令のうち、前記主記憶装置に対するメモリアクセスを実行させるメモリアクセス命令と前記プリフェッチ命令とを保持する命令保持部と、
前記命令デコード部がデコードしたメモリアクセス命令が前記キャッシュメモリに保持されたデータに対する対象メモリアクセス命令であるかを予測する予測部と、
前記予測部が予測した前記対象メモリアクセス命令に対応するプリフェッチ命令であって、前記対象メモリアクセス命令の実行前に実行される対応プリフェッチ命令を前記命令保持部が保持する場合、前記対応プリフェッチ命令の前記演算部による実行を抑止する抑止部と
を有することを特徴とする演算処理装置。
【請求項２】
請求項１に記載の演算処理装置において、
前記命令デコード部は、前記メモリアクセス命令と前記プリフェッチ命令との対応を示す識別情報がそれぞれ付加された前記メモリアクセス命令および前記プリフェッチ命令をデコードし、
前記命令保持部は、前記識別情報が付加された前記プリフェッチ命令を、前記識別情報とともに保持し、
前記抑止部は、前記対象メモリアクセス命令に付加された識別情報に対応する対応識別情報が付加された前記対応プリフェッチ命令を前記命令保持部が保持する場合、前記対応プリフェッチ命令の前記演算部による実行を抑止する
ことを特徴とする演算処理装置。
【請求項３】
請求項１または請求項２に記載の演算処理装置において、
前記命令保持部は、前記プリフェッチ命令が有効か無効かを示す抑止情報を前記プリフェッチ命令とともに保持し、
前記抑止部は、前記対応プリフェッチ命令を前記命令保持部が保持する場合、前記対応プリフェッチ命令に対応して前記命令保持部に保持された抑止情報を、無効を示す状態に設定する
ことを特徴とする演算処理装置。
【請求項４】
主記憶装置に記憶されたデータをキャッシュメモリに保持させるプリフェッチ命令を実行する演算処理装置の制御方法において、
前記演算処理装置が有する命令デコード部が、命令をデコードし、
前記演算処理装置が有する演算部が、前記命令デコード部がデコードした命令に基づいて、演算を実行し、
前記演算処理装置が有する命令保持部が、前記命令デコード部がデコードした命令のうち、前記主記憶装置に対するメモリアクセスを実行させるメモリアクセス命令と前記プリフェッチ命令とを保持し、
前記演算処理装置が有する予測部が、前記命令デコード部がデコードしたメモリアクセス命令が前記キャッシュメモリに保持されたデータに対する対象メモリアクセス命令であるかを予測し、
前記演算処理装置が有する抑止部が、前記予測部が予測した前記対象メモリアクセス命令に対応するプリフェッチ命令であって、前記対象メモリアクセス命令の実行前に実行される対応プリフェッチ命令を前記命令保持部が保持する場合、前記対応プリフェッチ命令の前記演算部による実行を抑止する
ことを特徴とする演算処理装置の制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、演算処理装置および演算処理装置の制御方法に関する。
【背景技術】
【０００２】
ＣＰＵ（Central Processing Unit）等の演算処理装置は、命令をデコードするデコード部と、デコードされた命令に基づいて演算を実行する演算部と、演算部と主記憶装置との間に配置されたキャッシュメモリとを有する。演算部は、主記憶装置またはキャッシュメモリに記憶されたデータを参照して、演算を実行する。キャッシュメモリは、主記憶装置が記憶するデータの一部を保持する。
【０００３】
演算処理装置は、演算処理装置と同一の半導体装置の内部にあり、同一のクロックで動作するキャッシュメモリに記憶されたデータを参照することにより、主記憶装置に記憶されたデータを参照する場合に比べて、データを参照するときの待ち時間を短縮できる。すなわち、演算処理装置は、主記憶装置に記憶された参照対象のデータをキャッシュメモリに予めフェッチするプリフェッチを実行することにより、データを参照する場合の待ち時間を短縮できる。
【０００４】
プリフェッチの実現方法として、ソフトウェアによるプリフェッチ（ソフトウェアプリフェッチ）と、ハードウェアによるプリフェッチ（ハードウェアプリフェッチ）とが知られている。ソフトウェアプリフェッチでは、プログラムのコンパイル装置は、ソースプログラムを演算処理装置で実行可能なオブジェクトプログラムに変換する際に、プリフェッチを実行するプリフェッチ命令をオブジェクトプログラムに挿入する。そして、演算処理装置は、プリフェッチ命令に基づいて、プリフェッチを実行する（例えば、特許文献１−３参照）。
【０００５】
一方、ハードウェアプリフェッチでは、ハードウェアプリフェッチ機構等のハードウェアが演算処理装置内に設けられる。例えば、ハードウェアプリフェッチ機構は、アクセス先が規則的に変化するメモリアクセスが実行されると判定した場合、次にアクセスされるデータを予測し、主記憶装置に記憶されたデータを予めフェッチする。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開２００３−２２３３５９号公報
【特許文献２】特表２０１１−１５０６９１号公報
【特許文献３】特開２００２−２４００７号公報
【発明の概要】
【発明が解決しようとする課題】
【０００７】
演算処理装置により参照されるデータが格納先された領域のアドレスは、プログラムの実行時に確定する。このため、ソースプログラムをオブジェクトプログラムに変換する段階では、コンパイル装置は、プリフェッチ命令の要否を判別できない。例えば、キャッシュメモリに記憶されたデータに対するプリフェッチ命令がオブジェクトプログラムに挿入される場合がある。この場合、キャッシュメモリに記憶されたデータをあらためて主記憶装置からキャッシュメモリにフェッチする余計なプリフェッチ命令が実行され、命令数の増加、バスの消費量の増加による転送速度の低下等の性能低下を引き起こすおそれがある。すなわち、余計なプリフェッチ命令が実行された場合、演算処理装置の性能が低下するおそれがある。
【０００８】
１つの側面では、本件開示の演算処理装置および演算処理装置の制御方法は、余計なプリフェッチ命令によるメモリアクセスを低減することを目的とする。
【課題を解決するための手段】
【０００９】
一観点によれば、主記憶装置に記憶されたデータをキャッシュメモリに保持させるプリフェッチ命令を実行する演算処理装置は、命令をデコードする命令デコード部と、命令デコード部がデコードした命令に基づいて、演算を実行する演算部と、命令デコード部がデコードした命令のうち、主記憶装置に対するメモリアクセスを実行させるメモリアクセス命令とプリフェッチ命令とを保持する命令保持部と、命令デコード部がデコードしたメモリアクセス命令がキャッシュメモリに保持されたデータに対する対象メモリアクセス命令であるかを予測する予測部と、予測部が予測した対象メモリアクセス命令に対応するプリフェッチ命令であって、対象メモリアクセス命令の実行前に実行される対応プリフェッチ命令を命令保持部が保持する場合、対応プリフェッチ命令の演算部による実行を抑止する抑止部とを有する。
【００１０】
別の観点によれば、主記憶装置に記憶されたデータをキャッシュメモリに保持させるプリフェッチ命令を実行する演算処理装置の制御方法では、演算処理装置が有する命令デコード部が、命令をデコードし、演算処理装置が有する演算部が、命令デコード部がデコードした命令に基づいて、演算を実行し、演算処理装置が有する命令保持部が、命令デコード部がデコードした命令のうち、主記憶装置に対するメモリアクセスを実行させるメモリアクセス命令とプリフェッチ命令とを保持し、演算処理装置が有する予測部が、命令デコード部がデコードしたメモリアクセス命令がキャッシュメモリに保持されたデータに対する対象メモリアクセス命令であるかを予測し、演算処理装置が有する抑止部が、予測部が予測した対象メモリアクセス命令に対応するプリフェッチ命令であって、対象メモリアクセス命令の実行前に実行される対応プリフェッチ命令を命令保持部が保持する場合、対応プリフェッチ命令の演算部による実行を抑止する。
【発明の効果】
【００１１】
本件開示の演算処理装置および演算処理装置の制御方法は、余計なプリフェッチ命令によるメモリアクセスを低減できる。
【図面の簡単な説明】
【００１２】
【図１】演算処理装置および演算処理装置の制御方法の一実施形態を示す図である。
【図２】演算処理装置および演算処理装置の制御方法の別の実施形態を示す図である。
【図３】図２に示した命令保持部、予測部および抑止部の一例を示す図である。
【図４】余計なプリフェッチ命令の実行が抑止される場合の一例を示す図である。
【図５】図２に示した演算処理装置の動作の一例を示す図である。
【図６】図２に示した命令保持部の動作の一例を示す図である。
【発明を実施するための形態】
【００１３】
以下、実施形態について、図面を用いて説明する。
【００１４】
図１は、演算処理装置および演算処理装置の制御方法の一実施形態を示す。この実施形態の演算処理装置１は、主記憶装置１００に記憶されたデータをキャッシュメモリ７に転送するプリフェッチを実行するＣＰＵ（Central Processing Unit）等のプロセッサである。
【００１５】
プリフェッチの実現方法として、ソフトウェアによるプリフェッチ（ソフトウェアプリフェッチ）が用いられる。なお、プリフェッチの実現方法として、ソフトウェアプリフェッチと、ハードウェアによるプリフェッチ（ハードウェアプリフェッチ）との両方が用いられてもよい。
【００１６】
ソフトウェアプリフェッチでは、主記憶装置１００に記憶されたデータをキャッシュメモリ７に保持させるプリフェッチ命令が、ソースプログラムを演算処理装置１で実行可能なオブジェクトプログラムに変換するコンパイル処理時に生成される。また、コンパイル処理では、プリフェッチ命令を生成する場合、主記憶装置１００に対するメモリアクセスを実行させるメモリアクセス命令とプリフェッチ命令との対応を示す識別情報を、メモリアクセス命令およびプリフェッチ命令にそれぞれ付加する。以下、識別情報は、識別子とも称される。
【００１７】
識別情報の付加は、識別情報付きのメモリアクセス命令等を新たに追加することにより実現されてもよいし、メモリアクセス命令等のオペランドに識別情報を追加することにより実現されてもよい。以下、識別情報が付加された命令は、識別子付き命令とも称される。例えば、識別情報が付加されたメモリアクセス命令は、識別子付きメモリアクセス命令とも称される。
【００１８】
メモリアクセス命令は、主記憶装置１００に記憶されたデータをロードするロード命令、データを主記憶装置１００にストアするストア命令等である。プリフェッチ命令は、ロード命令に対応して生成されてもよいし、ストア命令に対応して生成されてもよい。例えば、演算処理装置１は、ストア対象のデータが記憶される領域を示すアドレスのデータを主記憶装置１００からキャッシュメモリ７にロードした後にキャッシュメモリ７を介してデータを主記憶装置１００にストアするストア命令を実行する場合がある。この場合、プリフェッチ命令は、ストア命令に対応して生成されてもよい。なお、以下では、動作を分かりやすくするために、プリフェッチ命令に関連する演算処理装置１等の動作を、ロード命令に対応して生成されるプリフェッチ命令を例にして説明する。
【００１９】
主記憶装置１００には、演算処理装置１により実行されるオブジェクトプログラム、演算処理装置１による演算で使用されるデータ、演算結果等が記憶される。演算処理装置１は、命令デコード部２、演算部３、命令保持部４、予測部５、抑止部６およびキャッシュメモリ７を有する。キャッシュメモリ７は、主記憶装置１００が記憶するデータの一部を保持する。
【００２０】
命令デコード部２は、命令が記憶されている命令キャッシュ等から命令を読み出し、読み出した命令をデコードする。そして、命令デコード部２は、デコードした命令を演算部３、命令保持部４等に出力する。例えば、命令デコード部２は、固定小数点演算命令、浮動小数点演算命令等の演算命令を演算部３に出力し、メモリアクセス命令（ロード命令、ストア命令）およびプリフェッチ命令を命令保持部４に出力する。
【００２１】
演算部３は、メモリアクセス命令、プリフェッチ命令等を実行するロード／ストア処理部、演算命令を実行する演算器等を有し、命令デコード部２でデコードされた命令に基づいて演算を実行する。例えば、演算部３は、命令デコード部２でデコードされた命令に基づいて、キャッシュメモリ７に保持されたデータを参照して演算を実行する。そして、演算部３は、演算結果をキャッシュメモリ７に保持させる。
【００２２】
命令保持部４は、命令デコード部２でデコードされた命令のうち、主記憶装置１００に対するメモリアクセスを実行させるメモリアクセス命令とプリフェッチ命令とを、命令デコード部２から受ける。そして、命令保持部４は、命令デコード部２から受けたメモリアクセス命令とプリフェッチ命令とを保持する。
【００２３】
予測部５は、命令デコード部２でデコードされたメモリアクセス命令がキャッシュメモリ７に保持されたデータに対する対象メモリアクセス命令であるかを予測する。例えば、予測部５は、実行された複数のメモリアクセス命令によるそれぞれのメモリアクセスがキャッシュヒットしたかキャッシュミスしたかを示す履歴に基づいて、予測対象のメモリアクセス命令によるメモリアクセスがキャッシュヒットするかを予測する。以下、メモリアクセスがキャッシュヒットしたかキャッシュミスしたかを示す履歴は、キャッシュ履歴とも称される。
【００２４】
抑止部６は、キャッシュメモリ７に保持されたデータに対するアクセスであると予測された対象メモリアクセス命令に対応するプリフェッチ命令である対応プリフェッチ命令が命令保持部４に存在する場合、対応プリフェッチ命令の演算部３による実行を抑止する。すなわち、抑止部６は、予測部５が予測した対象メモリアクセス命令に対応するプリフェッチ命令である対応プリフェッチ命令を命令保持部４が保持する場合、対応プリフェッチ命令の演算部３による実行を抑止する。
【００２５】
ここで、例えば、データＡをロードするロード命令ＡとデータＢをロードするロード命令Ｂとがソースプログラムに含まれる場合、ロード命令Ｂに対応するプリフェッチ命令Ｂとロード命令Ａに対応するプリフェッチ命令Ａとがコンパイル処理時に生成される。プリフェッチ命令の実行により、プリフェッチ命令に対応するロード命令でロードされるデータの格納先を示すアドレスに所定のアドレス量を加算したアドレスを含む１キャッシュライン分のデータが主記憶装置１００からキャッシュメモリ７にロードされる。
【００２６】
このため、例えば、所定のアドレス量が１キャッシュラインの容量に対応するアドレス量の整数倍である場合、キャッシュヒットするメモリアクセスであると予測されたメモリアクセス命令に対応するプリフェッチ命令は、余計なプリフェッチ命令である。例えば、所定のアドレス量が１キャッシュラインの容量に対応するアドレス量の整数倍で、データＡとデータＢとが互いに同じキャッシュラインに保持される場合、プリフェッチ命令Ｂとプリフェッチ命令Ａとで互いに同じデータがロードされる。
【００２７】
このため、演算処理装置１は、キャッシュヒットするメモリアクセスであると予測したメモリアクセス命令に対応するプリフェッチ命令の実行を余計なプリフェッチ命令と判定し、余計なプリフェッチ命令の実行を抑止する。なお、余計なプリフェッチ命令が実行された場合、命令数の増加、バスの消費量の増加による転送速度の低下等の性能低下を引き起こすおそれがある。すなわち、余計なプリフェッチ命令が実行された場合、演算処理装置の性能が低下するおそれがある。演算処理装置１は、余計なプリフェッチ命令の実行を抑止できるため、演算処理装置の性能が低下することを抑止できる。
【００２８】
例えば、抑止部６は、キャッシュヒットすると予測部５で予測されたメモリアクセス命令に付加された識別情報に一致する識別情報が付加されたプリフェッチ命令（余計なプリフェッチ命令）を無効にする。これにより、余計なプリフェッチ命令の実行が抑止され、余計なプリフェッチ命令によるメモリアクセスを低減することができる。なお、演算処理装置１の構成および演算処理装置１の制御方法は、図１に示す例に限定されない。
【００２９】
以上、図１に示す実施形態では、演算処理装置１は、キャッシュヒットすると予測したメモリアクセス命令に対応するプリフェッチ命令の実行を余計なプリフェッチ命令と判定し、余計なプリフェッチ命令の実行を抑止する。これにより、図１に示す実施形態では、余計なプリフェッチ命令によるメモリアクセスを低減できる。この結果、図１に示す実施形態では、演算処理装置の性能が低下することを抑制できる。
【００３０】
図２は、演算処理装置および演算処理装置の制御方法の別の実施形態を示す。図１で説明した要素と同一または同様の要素については、同一または同様の符号を付し、これ等については、詳細な説明を省略する。この実施形態の演算処理装置１０は、例えば、主記憶装置１００に記憶されたデータをキャッシュメモリ７０に転送するプリフェッチを実行するＣＰＵ等のプロセッサである。プリフェッチの実現方法として、ソフトウェアプリフェッチが用いられる。なお、プリフェッチの実現方法として、ソフトウェアプリフェッチとハードウェアプリフェッチとの両方が用いられてもよい。
【００３１】
演算処理装置１０は、命令デコード部２０、演算部３０、命令保持部４０、予測部５０、抑止部６０およびキャッシュメモリ７０を有する。命令デコード部２０、演算部３０、命令保持部４０、予測部５０、抑止部６０およびキャッシュメモリ７０は、図１に示した命令デコード部２、演算部３、命令保持部４、予測部５、抑止部６およびキャッシュメモリ７と同一または同様である。例えば、キャッシュメモリ７０は、主記憶装置１００が記憶するデータの一部を保持する。
【００３２】
命令デコード部２０は、命令が記憶されている命令キャッシュ等から命令を読み出し、読み出した命令をデコードし、デコードした命令を各命令処理用のポート（リザベーションステーション３４、命令保持部４０等）に登録する。例えば、命令デコード部２０は、メモリアクセス命令とプリフェッチ命令との対応を示す識別情報がそれぞれ付加されたメモリアクセス命令およびプリフェッチ命令をデコードする。そして、命令デコード部２０は、デコードしたメモリアクセス命令およびプリフェッチ命令を命令保持部４０に登録する。
【００３３】
また、命令デコード部２０は、識別子付き命令をデコードした際、識別子付き命令の格納先を示すプログラムカウンタ値、アクセス対象のデータの格納先を示す論理アドレス、識別情報（識別子）等を抽出する。プログラムカウンタ値および識別情報は、予測部５０および抑止部６０にそれぞれ通知される。なお、識別情報は、図４に示すように、コンパイル処理に、メモリアクセス命令およびプリフェッチ命令にそれぞれ付加される。
【００３４】
演算部３０は、ロード／ストア処理部３２、複数のリザベーションステーション３４および複数の演算器３６を有し、命令デコード部２０でデコードされた命令に基づいて演算を実行する。ロード／ストア処理部３２は、メモリアクセス命令（ロード命令、ストア命令）およびプリフェッチ命令を命令保持部４０から受け、データのアクセス処理を命令保持部４０から受けた命令に基づいて実行する。データのアクセス処理は、データのロード、データのストア、プリフェッチ等の処理である。
【００３５】
複数のリザベーションステーション３４は、複数の演算器３６にそれぞれ対応して設けられる。リザベーションステーション３４は、命令デコード部２０でデコードされた命令のうち、演算命令（固定小数点演算命令、浮動小数点演算命令等）を受け、命令デコード部２０から受けた演算命令を保持する。そして、リザベーションステーション３４は、実行可能な状態の演算命令を演算器３６に出力する。演算器３６は、対応するリザベーションステーション３４から受けた演算命令に基づいて、キャッシュメモリ７０に保持されたデータを参照して演算を実行する。そして、演算器３６は、演算結果をキャッシュメモリ７０に保持させる。
【００３６】
命令保持部４０は、命令デコード部２０でデコードされた命令のうち、主記憶装置１００に対するメモリアクセスを実行させるメモリアクセス命令とプリフェッチ命令とを保持する。命令保持部４０は、ロード／ストア処理部３２によるデータのアクセス処理の順番を変更する際の緩衝用のバッファとして使用されてもよい。すなわち、命令保持部４０は、リザベーションステーションとして使用されてもよい。ロード／ストア処理部３２によるデータのアクセス処理が演算器３４による演算とは別のパイプラインで実行される場合、演算器３４による演算と依存関係のないデータのアクセス処理は、演算器３４による演算  と並行して実行可能である。なお、命令保持部４０、予測部５０および抑止部６０の詳細は、図３で説明する。
【００３７】
演算処理装置１０の構成および演算処理装置１０の制御方法は、図２に示す例に限定されない。例えば、演算処理装置１０は、複数の命令保持部４０を有してもよい。また、命令保持部４０は、演算部３０内に設けられてもよい。また、プリフェッチ命令専用の命令保持部が設けられてもよい。
【００３８】
図３は、図２に示した命令保持部４０、予測部５０および抑止部６０の一例を示す。
【００３９】
命令保持部４０は、ロード命令、ストア命令、プリフェッチ命令等の複数の命令を保持するキュー構造のバッファである。例えば、命令保持部４０は、メモリアクセス命令とプリフェッチ命令との対応を示す識別情報と、命令の種類を示す命令コードと、命令のアクセス先を示すアドレスと、抑止情報とを記憶する。このように、命令保持部４０は、識別情報が付加されたプリフェッチ命令を、識別情報とともに保持する。
【００４０】
図３の識別情報の列に記載した識別情報”ｉｄ１”、”ｉｄ２”、”ｉｄ３”、”ｉｄ４”は、各命令の識別子を示す。図３の命令コードの列に記載した命令コード”０１”、”１０”、”１１”は、ロード命令、ストア命令、プリフェッチ命令をそれぞれ示す。図３のアドレスの列に記載したアドレス”ＣＬ１”、”ＣＬ２”、”ＣＬ３”、”ＣＬ４”は、ロード命令等によりアクセスされるキャッシュラインを示す。図３の抑止情報の列に記載した論理値”０”、”１”は、命令保持部４０に保持された命令が無効か有効かを示す。例えば、抑止情報が論理値”０”に設定された命令は、無効な命令であり、実行されない。
【００４１】
例えば、演算処理装置１０は、命令保持部４０に保持された命令のうち、読み出し用のポインタ（以下、読み出しポインタとも称する）で指定された領域に保持された命令を選択し、選択した命令に従ってデータにアクセスする。アクセス処理が実行された命令が保持されていた領域には、メモリアクセス命令またはプリフェッチ命令が新規に登録される。メモリアクセス命令またはプリフェッチ命令が新規に保持される領域は、書き込み用のポインタ（以下、書き込みポインタとも称する）により指定される。
【００４２】
読み出しポインタの値は、読み出しポインタで指定された領域に保持された命令が実行される度に更新される。この際、抑止情報が論理値”０”に設定された命令は、スキップされる。抑止情報が論理値”０”に設定されたことによりスキップされた命令が保持されていた領域には、メモリアクセス命令またはプリフェッチ命令が新規に登録される。
【００４３】
予測部５０は、履歴レジスタ５２、排他的論理和回路５４ａ、連結部５４ｂ、パターン履歴テーブル５６および予測結果出力部５８を有する。なお、予測部５０内の信号に付した符号の括弧内に示したｊ、ｋは、正の整数である。
【００４４】
履歴レジスタ５２は、実行された複数のメモリアクセス命令によるそれぞれのメモリアクセスがキャッシュヒットしたかキャッシュミスしたかを示す履歴情報ＲＩＮＦを保持するキャッシュ履歴レジスタ部の一例である。図３の例では、履歴レジスタ５２は、ｋ段のシフトレジスタであり、過去ｋ回のメモリアクセス命令の履歴情報ＲＩＮＦ［ｋ−１：０］を保持する。シフトレジスタの各段の保持部（例えば、フリップフロック）に保持した履歴情報ＲＩＮＦは、メモリアクセス命令が実行される度に１つシフトする。履歴レジスタ５２の１段目の保持部（例えば、フリップフロック）に保持された履歴情報ＲＩＮＦ［０］は、履歴レジスタ５２に保持された履歴情報ＲＩＮＦ［ｋ−１：０］の中で、最新のメモリアクセスに対する履歴情報である。
【００４５】
排他的論理和回路５４ａおよび連結部５４ｂは、メモリアクセス命令が格納されたアドレスを示すプログラムカウンタ値ＰＣＶと履歴情報ＰＩＮＦとに基づいて、インデックスを生成するインデックス生成部の一例である。排他的論理和回路５４ａは、ｋビットの履歴情報ＲＩＮＦ［ｋ−１：０］を履歴レジスタ５２から受け、ｋビットのプログラムカウンタ値ＰＣＶ［ｋ＋ｊ−１：ｊ］を命令デコード部２０から受ける。そして、排他的論理和回路５４ａは、履歴情報ＲＩＮＦ［ｋ−１：０］とプログラムカウンタ値ＰＣＶ［ｋ＋ｊ−１：ｊ］との排他的論理和を演算し、演算結果ＥＸＯＦ［ｋ−１：０］を連結部５４ｂに出力する。なお、プログラムカウンタ値ＰＣＶ［ｋ＋ｊ−１：ｊ］は、メモリアクセス命令が格納されたアドレスを示すプログラムカウンタ値ＰＣＶ（０ビット目が最下位ビット）のうちのｊビット目から”ｋ＋ｊ−１”ビット目のデータである。
【００４６】
連結部５４ｂは、ｋビットの演算結果ＥＸＯＦ［ｋ−１：０］を排他的論理和回路５４ａから受け、ｊビットのプログラムカウンタ値ＰＣＶ［ｊ−１：０］を命令デコード部２０から受ける。そして、連結部５４ｂは、演算結果ＥＸＯＦ［ｋ−１：０］とプログラムカウンタ値ＰＣＶ［ｊ−１：０］とを連結して”ｋ＋ｊ”ビットのインデックスＩＮＤＸ［ｋ＋ｊ−１：０］を生成する。インデックスＩＮＤＸ［ｋ＋ｊ−１：０］の上位ｋビットは、演算結果ＥＸＯＦ［ｋ−１：０］であり、インデックスＩＮＤＸ［ｋ＋ｊ−１：０］の下位ｊビットは、プログラムカウンタ値ＰＣＶ［ｊ−１：０］である。なお、プログラムカウンタ値ＰＣＶ［ｊ−１：０］は、メモリアクセス命令が格納されたアドレスを示すプログラムカウンタ値ＰＣＶのうちの０ビット目から”ｊ−１”ビット目のデータである。
【００４７】
パターン履歴テーブル５６は、キャッシュヒットの頻度を示す予測パターン情報ＢＣＶをインデックスＩＮＤＸ毎に保持するパターン保持部の一例である。パターン履歴テーブル５６は、例えば、２ビットの飽和カウンタをインデックスＩＮＤＸ毎に有し、飽和カウンタの値を予測パターン情報ＢＣＶとしてインデックスＩＮＤＸ毎に保持する。２ビットの飽和カウンタの値は、メモリアクセス命令がキャッシュヒットしたかキャッシュミスしたかの結果に応じて、”００”、”０１”、”１０”、”１１”の４つの状態のいずれかに遷移する。
【００４８】
例えば、カウンタ値”００”は、第１キャッシュミス状態を示し、カウンタ値”０１”は、第１キャッシュミス状態よりキャシュミスする可能性が低い第２キャッシュミス状態を示す。また、カウンタ値”１０”は、第２キャッシュヒット状態を示し、カウンタ値”１１”は、第２キャッシュヒット状態よりキャシュヒットする可能性が高い第１キャッシュヒット状態を示す。
【００４９】
この場合、２ビットの飽和カウンタの値は、メモリアクセス命令がキャッシュヒットする度に１つカウントアップし、メモリアクセス命令がキャッシュミスする度に１つカウントダウンする。なお、２ビットの飽和カウンタの値が”００”である場合、２ビットの飽和カウンタの値は、メモリアクセス命令がキャッシュミスしても、”００”に維持される。また、２ビットの飽和カウンタの値が”１１”である場合、２ビットの飽和カウンタの値は、メモリアクセス命令がキャッシュヒットしても、”１１”に維持される。
【００５０】
このように、メモリアクセス命令が実行される度に、実行されたメモリアクセス命令のプログラムカウンタ値ＰＣＶを用いて生成されたインデックスＩＮＤＸに対応する予測パターン情報ＢＣＶの値は、２ビットの飽和カウンタにより更新される。
【００５１】
予測結果出力部５８は、パターン履歴テーブル５６に保持された予測パターン情報ＢＣＶのうち、予測対象のメモリアクセス命令に対応する予測パターン情報ＢＣＶを受ける。すなわち、予測結果出力部５８は、予測対象のメモリアクセス命令のプログラムカウンタ値ＰＣＶを用いて生成されたインデックスＩＮＤＸに対応する予測パターン情報ＢＣＶを、パターン履歴テーブル５６から受ける。そして、予測結果出力部５８は、パターン履歴テーブル５６から受けた予測パターン情報ＢＣＶに基づいて、予測対象のメモリアクセス命令が対象メモリアクセス命令であるかを示す予測結果情報ＰＩＮＦを抑止部６０に出力する。
【００５２】
なお、対象メモリアクセス命令は、図１で説明したように、キャッシュメモリ７０に保持されたデータに対するメモリアクセス命令である。すなわち、対象メモリアクセス命令は、キャッシュヒットするメモリアクセス命令である。
【００５３】
例えば、予測結果出力部５８は、予測パターン情報ＢＣＶが第１キャッシュヒット状態（ＢＣＶ＝１１）または第２キャッシュヒット状態（ＢＣＶ＝１０）を示している場合、論理値”１”の予測結果情報ＰＩＮＦを抑止部６０に出力する。論理値”１”の予測結果情報ＰＩＮＦは、予測対象のメモリアクセス命令が対象メモリアクセス命令であると予測されたことを示す。また、予測結果出力部５８は、予測パターン情報ＢＣＶが第１キャッシュミス状態（ＢＣＶ＝００）または第２キャッシュミス状態（ＢＣＶ＝０１）を示している場合、論理値”０”の予測結果情報ＰＩＮＦを抑止部６０に出力する。論理値”０”の予測結果情報ＰＩＮＦは、予測対象のメモリアクセス命令が対象メモリアクセス命令でないと予測されたことを示す。
【００５４】
抑止部６０は、レジスタ６２および複数の判定部６４を有する。レジスタ６２は、無効化の対象であるプリフェッチ命令を示す命令コード”１１”が設定される。命令コード（図３では、”１１”）のレジスタ６２への設定は、例えば、コンパイル処理の実行時やランタイムに、一度実行されればよい。
【００５５】
複数の判定部６４は、命令保持部４０に保持される複数の命令にそれぞれ対応する複数の抑止情報をそれぞれ更新する。各判定部６４は、比較部６５、６６、論理積回路６７および否定論理積回路６８を有する。
【００５６】
比較部６５は、命令デコード部２０が識別情報ＩＤＩＮＦ付きのメモリアクセス命令（ロード命令またはストア命令）をデコードした場合、メモリアクセス命令に付加された識別情報ＩＤＩＮＦを命令デコード部２０から受ける。そして、比較部６５は、命令保持部４０の対応する領域に保持された識別情報（例えば、ｉｄ１）と命令デコード部２０から受けた識別情報ＩＤＩＮＦとを比較し、比較結果を論理積回路６７に出力する。命令保持部４０に保持された識別情報と命令デコード部２０から受けた識別情報ＩＤＩＮＦとが一致した場合、比較結果として論理値”１”が論理積回路６７に出力される。命令保持部４０に保持された識別情報と命令デコード部２０から受けた識別情報ＩＤＩＮＦとが一致しない場合、比較結果として論理値”０”が論理積回路６７に出力される。
【００５７】
比較部６６は、命令保持部４０の対応する領域に保持された命令コード（例えば、”１１”）とレジスタ６２に設定された命令コード（例えば、”１１”）とを比較し、比較結果を論理積回路６７に出力する。命令保持部４０に保持された命令コードとレジスタ６２に設定された命令コードとが一致した場合、比較結果として論理値”１”が論理積回路６７に出力される。命令保持部４０に保持された命令コードとレジスタ６２に設定された命令コードとが一致しない場合、比較結果として論理値”０”が論理積回路６７に出力される。
【００５８】
論理積回路６７は、比較部６５から受けた信号と比較部６６から受けた信号との論理積を演算し、演算結果を否定論理積回路６８に出力する。すなわち、論理積回路６７は、命令デコード部２０から抑止部６０に転送された識別情報ＩＤＩＮＦに一致する識別情報が付加されたプリフェッチ命令が命令保持部４０に存在する場合、論理値”１”を否定論理積回路６８に出力する。
【００５９】
否定論理積回路６８は、予測結果情報ＰＩＮＦを予測部５０（より詳細には、予測結果出力部５８）から受ける。そして、否定論理積回路６８は、予測部５０から受けた予測結果情報ＰＩＮＦと論理積回路６７から受けた信号との否定論理積を演算し、演算結果を命令保持部４０に出力する。これにより、命令保持部４０に保持された抑止情報のうち、判定部６４に対応する領域に保持された抑止情報は、否定論理積回路６８の演算結果が示す論理値に更新される。
【００６０】
このように、抑止部６０は、対象メモリアクセス命令に付加された識別情報ＩＤＩＮＦに対応する識別情報が付加された対応プリフェッチ命令が命令保持部４０に存在する場合、対応プリフェッチ命令の演算部３０による実行を抑止する。
【００６１】
なお、命令保持部４０、予測部５０および抑止部６０の構成は、図３に示す例に限定されない。例えば、予測部５０のパターン履歴テーブル５６は、２ビットの飽和カウンタ以外の方法で予測パターン情報ＢＣＶを更新してもよい。また、予測部５０は、キャッシュヒットまたはキャッシュミスの周期的な変化に基づいて、予測対象のメモリアクセス命令が対象メモリアクセス命令であるかを予測してもよい。あるいは、予測部５０は、予測対象のメモリアクセス命令と同じプログラムカウンタ値ＰＣＶのメモリアクセス命令の履歴（ローカル履歴）に基づいて、予測対象のメモリアクセス命令が対象メモリアクセス命令であるかを予測してもよい。
【００６２】
また、例えば、レジスタ６２、比較部６６および論理積回路６７は、抑止部６０から省かれてもよい。正常な動作では、メモリアクセス命令に付加された識別情報ＩＤＩＮＦは、命令保持部４０に存在するメモリアクセス命令に付加された識別情報と重ならないように割り当てられる。このため、正常な動作では、命令保持部４０に存在する命令のうち、命令デコード部２０から抑止部６０に転送された識別情報ＩＤＩＮＦに一致する識別情報が付加された命令は、プリフェッチ命令であると判定されてもよい。
【００６３】
また、命令保持部４０に命令を保持する段階より前の段階（例えば、命令をデコードする段階）で余計なプリフェッチ命令の実行を抑止する機会があれば、命令保持部４０に命令を保持する段階より前の段階で余計なプリフェッチ命令の実行を抑止してもよい。
【００６４】
図４は、余計なプリフェッチ命令の実行が抑止される場合の一例を示す。図４の例では、キャッシュメモリ７０の各キャッシュラインＣＬ（ＣＬｍ、ＣＬｎ、ＣＬｏ、ＣＬｐ、Ｌｑ）の容量は、１２８バイトである。また、データＡ、Ｂ、Ｃは、構造体Ｓの要素であり、互いに近いメモリ領域に配置される。データＸ、Ｙ、Ｚは、構造体Ｒの要素であり、互いに近いメモリ領域に配置される。ソースプログラムＳＰＲＧは、構造体Ｓの複数の要素Ａ、Ｂ、Ｃと構造体Ｒの複数の要素Ｘ、Ｙ、Ｚとを同一のループ内でアクセスするプログラムである。
【００６５】
データＡ、Ｂ、Ｃ、Ｘ、Ｙ、Ｚが格納される領域のアドレスは、プログラム（ソースプログラムＳＰＲＧを変換したオブジェクトプログラム）の実行時に確定する。したがって、ソースプログラムをオブジェクトプログラムに変換する段階では、コンパイル装置は、データＡ、Ｂ、Ｃ、Ｘ、Ｙ、ＺがどのキャッシュラインＣＬに配置されるか分からない。このため、コンパイル装置は、データＡ、Ｂ、Ｃ、Ｘ、Ｙ、Ｚの各ロード命令（ｌｏａｄ）に対応したプリフェッチ命令（ｐｒｅｆｅｔｃｈ）をオブジェクトプログラムに挿入する。
【００６６】
また、コンパイラ装置は、ロード命令とプリフェッチ命令との対応を示す識別情報（例えば、ｉｄ１）を、ロード命令およびプリフェッチ命令に付加する。プリフェッチ命令の挿入対象のデータは、コンパイラに指示を与える最適化制御行やプラグマ等により指定される。最適化制御行はＦＯＲＴＲＡＮで用いられ、プラグマはＣ言語等で用いられる。ユーザは、構造体Ｓ内の要素をプリフェッチ命令の挿入対象のデータとして指定する最適化制御行（例えば、「!ocl prefetch_cancel_bypredict(S)」）をソースプログラムＳＰＲＧ内に記述してもよい。なお、プリフェッチ命令の挿入は、翻訳オプション（例えば、「-Kprefetch_cancel_bypredict」）で指定されてもよい。
【００６７】
ここで、図４の例では、データＢ、Ｃは、互いに同じキャシュラインＣＬｎに配置される。また、各データは、データＡ、Ｂ、Ｘ、Ｙ、Ｃ、Ｚの順でアクセスされる。データＡ、Ｂ、Ｘ、Ｙは、互いに異なるキャッシュラインＣＬに配置されるため、ランダムな最初のアクセスでキャッシュミスする。この場合、データＡ、Ｂ、Ｘ、Ｙの各ロード命令に対応する各プリフェッチ命令は、有効なプリフェッチ命令である。
【００６８】
データＣは、データＢと同じキャッシュラインＣＬｎに配置されるため、キャッシュヒットする。この場合、データＣのロード命令（ｌｏａｄ  ａｄｄｒ（ｃ）、ｉｄ５）に対応するプリフェッチ命令（ｐｒｅｆｅｔｃｈ    ａｄｄｒ（ｃ＋１２８）、ｉｄ５）は、余計なプリフェッチ命令である。このため、抑止部６０は、余計なプリフェッチ命令（ｐｒｅｆｅｔｃｈ    ａｄｄｒ（ｃ＋１２８）、ｉｄ５）の実行を抑止する。
【００６９】
構造体ＳのデータＡ、Ｂ、Ｃが繰り返しアクセスされる場合、繰り返しアクセスされるデータＡのアドレス間隔は一定間隔とは限らないが、データＡ、Ｂ、Ｃ間のアドレス間隔は、一定に維持される。この場合、データＣに対するアクセスがキャッシュヒットするかキャッシュミスするかの予測は、直前のロード命令（データＡ、Ｂ、Ｘ、Ｙのロード命令）のキャッシュ履歴（キャッシュヒットしたかキャッシュミスしたかの履歴）に依存する。例えば、予測部５０は、図３で説明したように、キャッシュ履歴（履歴情報ＲＩＮＦ）を保持する履歴レジスタ５２等を用いて、データＣに対するアクセスがキャッシュヒットするかキャッシュミスするかを予測する。
【００７０】
図４の例では、予測部５０は、データＣのロード命令（ｌｏａｄ  ａｄｄｒ（ｃ）、ｉｄ５）によるアクセスはキャッシュヒットすると予測する。このため、抑止部６０は、命令保持部４０に保持された抑止情報のうち、データＣのロード命令に対応するプリフェッチ命令に対応する抑止情報を論理値“０”（無効を示す論理値）に設定する。これにより、余計なプリフェッチ命令（ｐｒｅｆｅｔｃｈ    ａｄｄｒ（ｃ＋１２８）、ｉｄ５）の実行が抑止され、余計なプリフェッチ命令によるメモリアクセスが低減される。
【００７１】
なお、配列の値をもとに間接アクセスする場合においても、メモリアクセスがキャッシュヒットするかキャッシュミスするかの予測は、直前のロード命令のキャッシュ履歴に依存する。このため、配列の値をもとに間接アクセスする場合においても、演算処理装置１０は、予測部５０の予測結果に基づいて、余計なプリフェッチ命令の実行を抑止できる。
【００７２】
図５は、図２に示した演算処理装置１０の動作の一例を示す。なお、図５は、演算処理装置１０の制御方法の一形態を示す。図５の動作は、余計なプリフェッチ命令を無効にする際の演算処理装置１０の動作に対応する。図５の動作は、ハードウェアのみで実現されてもよく、ハードウェアをソフトウェアにより制御することにより実現されてもよい。
【００７３】
ステップＳ１００では、命令デコード部２０は、図２で説明したように、命令が記憶されている命令キャッシュ等から命令を読み出し、読み出した命令をデコードする。これにより、命令の格納先を示すプログラムカウンタ値ＰＣＶ、アクセス対象のデータの格納先を示す論理アドレス等が抽出される。なお、識別子付き命令がデコードされた場合、プログラムカウンタ値ＰＣＶ、アクセス対象のデータの格納先を示す論理アドレス、識別情報（識別子ＩＤＩＮＦ）が抽出される。
【００７４】
ステップＳ１１０では、命令デコード部２０は、ステップＳ１００でデコードした命令が識別子付きメモリアクセス命令（識別子付きロード命令、識別子付きストア命令）であるかを判定する。ステップＳ１００でデコードした命令が識別子付きメモリアクセス命令である場合、演算処理装置１０の動作は、ステップＳ１２０に移る。一方、ステップＳ１００でデコードした命令が識別子付きメモリアクセス命令でない場合、余計なプリフェッチ命令を無効にする処理（演算処理装置１０の動作）は、終了する。
【００７５】
ステップＳ１２０では、命令デコード部２０は、図２で説明したように、ステップＳ１００でデコードした識別子付きメモリアクセス命令の格納先を示すプログラムカウンタ値ＰＣＶと識別子ＩＤＩＮＦとを予測部５０および抑止部６０にそれぞれ通知する。
【００７６】
ステップＳ１３０では、予測部５０は、図３で説明したように、ステップＳ１００でデコードした識別子付きメモリアクセス命令によるアクセスがキャッシュヒットするかを予測する。すなわち、予測部５０は、ステップＳ１００でデコードした識別子付きメモリアクセス命令がキャッシュメモリ７０に保持されたデータに対する対象メモリアクセス命令であるかを予測する。そして、予測部５０は、予測結果ＨＩＮＦを抑止部６０に通知する。
【００７７】
ステップＳ１４０では、抑止部６０は、図３で説明したように、予測結果ＨＩＮＦ（ステップＳ１３０の予測処理の結果）が論理値“１”であるかを判定する。すなわち、抑止部６０は、ステップＳ１００でデコードした識別子付きメモリアクセス命令によるアクセスがキャッシュヒットすると予測されたかを判定する。予測結果ＨＩＮＦが論理値“１”（キャッシュヒット）である場合、演算処理装置１０の動作は、ステップＳ１５０に移る。一方、予測結果ＨＩＮＦが論理値“１”でない場合、余計なプリフェッチ命令を無効にする処理（演算処理装置１０の動作）は、終了する。
【００７８】
ステップＳ１５０では、抑止部６０は、図３で説明したように、命令保持部４０に保持された識別子（図３に示したｉｄ）のいずれかとステップＳ１００でデコードした識別子付きメモリアクセス命令の識別子ＩＤＩＮＦとが互いに一致するかを判定する。すなわち、抑止部６０は、キャッシュメモリ７０に保持されたデータに対するアクセスであると予測された対象メモリアクセス命令に対応する対応プリフェッチ命令が命令保持部４０に存在するか判定する。
【００７９】
命令保持部４０に保持された識別子のいずれかと識別子付きメモリアクセス命令の識別子ＩＤＩＮＦとが互いに一致する場合、演算処理装置１０の動作は、ステップＳ１６０に移る。一方、識別子付きメモリアクセス命令の識別子ＩＤＩＮＦが命令保持部４０に保持された識別子のいずれかにも一致しない場合、余計なプリフェッチ命令を無効にする処理（演算処理装置１０の動作）は、終了する。
【００８０】
ステップＳ１６０では、抑止部６０は、図３で説明したように、ステップＳ１００でデコードした識別子付きメモリアクセス命令の識別子ＩＤＩＮＦに一致した識別子が付加されたプリフェッチ命令に対応する抑止情報を論理値“０”（無効を示す状態）に設定する。これにより、余計なプリフェッチ命令は無効になり、余計なプリフェッチ命令の実行は抑止される。なお、予測部５０による予測（ステップＳ１３０での予測）が外れた場合、プリフェッチ命令が実行されないだけであり、後続のロード命令によりデータは、取得される。
【００８１】
演算処理装置１０の動作は、図５に示す例に限定されない。例えば、互いに同じキャッシュラインＣＬにアクセスする複数のプリフェッチ命令が命令保持部４０に存在する場合に複数のプリフェッチ命令の１つ以外を無効にする処理（以下、重複解消処理とも称する）が追加されてもよい。
【００８２】
ここで、重複解消処理を実行することにより、例えば、連続して実行されるロード命令によりアクセスされるデータが互いに同じキャッシュラインＣＬに配置される場合、余計なプリフェッチ命令の実行が抑止される。しかし、重複解消処理は、連続して実行されるロード命令によりアクセスされるデータが互いに異なるキャッシュラインＣＬに配置される場合（例えば、図４に示したデータＡ、Ｂ、Ｘ、Ｙ、Ｃ、Ｚ等）に対応していない。重複解消処理を実行しても、余計なプリフェッチ命令の実行が抑止されない場合を、図４に示したアクセスを例にして説明する。
【００８３】
図４に示したデータＣのロード命令に対応する余計なプリフェッチ命令とデータＢのロード命令に対応するプリフェッチ命令とが同時に命令保持部４０に存在する期間がない場合、重複解消処理を実行しても、余計なプリフェッチ命令の実行は抑止されない。例えば、図４に示したデータＣのロード命令に対応する余計なプリフェッチ命令が命令保持部４０に保持される前にデータＢのロード命令に対応するプリフェッチ命令が実行された場合、重複解消処理を実行しても、余計なプリフェッチ命令の実行は抑止されない。
【００８４】
これに対し、演算処理装置１０は、メモリアクセス命令によるアクセスがキャシュヒットするかを命令のデコード時に予測し、キャシュヒットと予測したメモリアクセス命令に対応する余計なプリフェッチ命令を識別情報を用いて検出する。このため、演算処理装置１０は、データＣのロード命令に対応する余計なプリフェッチ命令とデータＢのロード命令に対応するプリフェッチ命令とが同時に命令保持部４０に存在していない場合でも、余計なプリフェッチ命令の実行を抑止できる。
【００８５】
このように、演算処理装置１０は、メモリアクセス命令によるアクセスがキャシュヒットするかをメモリアクセス命令を命令保持部４０に保持する前に予測する。そして、演算処理装置１０は、メモリアクセス命令がキャッシュヒットすると予測した場合、キャシュヒットと予測したメモリアクセス命令に対応する余計なプリフェッチ命令の実行を抑止する。
【００８６】
動的に獲得した領域（構造体、配列、ポインタアクセス等）にアクセスするデータとの依存関係、アドレス配置等がコンパイル処理時に分からない場合、コンパイル処理時に保守的に挿入されたプリフェッチ命令は、余計なプリフェッチ命令になる場合がある。この場合でも、演算処理装置１０は、キャシュヒットするかを予測可能な規則性のあるデータアクセス（ランダムアクセスや連続アクセス）において、余計なプリフェッチ命令の実行を抑止できる。余計なプリフェッチ命令の実行がハードウェアで自動的に抑止されるため、ソフトウェアを再構築する必要がない。
【００８７】
余計なプリフェッチ命令の実行が抑止され、適切なプリフェッチ命令が実行されるため、演算処理装置１０の性能を向上することができる。例えば、余計なプリフェッチ命令の実行によるハード資源の浪費（パイプライン資源の消費、バンド幅の消費等)を防ぐことができ、演算処理装置１０の実行効率を向上させることができる。これにより、プログラムを高速化することができる。
【００８８】
図６は、図２に示した命令保持部４０の動作の一例を示す。
【００８９】
ステップＳ２００では、命令保持部４０は、読み出しポインタが示す領域に保持した要素（図３に示した識別情報、命令コード、アドレス、抑止情報）を参照する。
【００９０】
ステップＳ２１０では、命令保持部４０は、ステップＳ２００で参照した抑止情報が論理値”０”（無効を示す状態）であるかを判定する。抑止情報が論理値”０”である場合、命令保持部４０の動作は、ステップＳ２２０に移る。一方、抑止情報が論理値”０”でない場合、命令保持部４０の動作は、ステップＳ２３０に移る。
【００９１】
ステップＳ２２０では、命令保持部４０は、読み出しポインタを次の要素の領域を示す値に更新する。そして、命令保持部４０の動作は、ステップＳ２００に戻る。すなわち、抑止情報が論理値”０”に設定された命令は、スキップされる。抑止情報が論理値”０”に設定されたことによりスキップされた命令が保持されていた領域には、メモリアクセス命令またはプリフェッチ命令が新規に登録される。
【００９２】
ステップＳ２３０では、命令保持部４０は、読み出しポインタが示す領域の命令（ステップＳ２００で参照した命令）をロード／ストア処理部３２に転送する。これにより、データのアクセス処理が、読み出しポインタが示す領域の命令に基づいて実行される。アクセス処理が実行された命令が保持されていた領域には、メモリアクセス命令またはプリフェッチ命令が新規に登録される。
【００９３】
読み出しポインタは、データのアクセス処理と並行して更新されるため、ＮＯＰ（No Operation）のような無意味なサイクルを消費せずに、次の命令（命令保持部４０内の要素）を示す値に更新される。これにより、命令保持部４０は、データのアクセス処理が実行されるタイミングが遅れることを抑止できる。
【００９４】
以上、図２から図６に示した実施形態においても、図１に示した実施形態と同様の効果を得ることができる。例えば、図２から図６に示した実施形態では、演算処理装置１０は、キャッシュヒットするメモリアクセスであると予測したメモリアクセス命令に対応するプリフェッチ命令の実行を余計なプリフェッチ命令と判定し、余計なプリフェッチ命令の実行を抑止する。これにより、図２から図６に示した実施形態では、余計なプリフェッチ命令によるメモリアクセスを低減でき、演算処理装置の性能が低下することを抑制できる。
【００９５】
また、図２から図６に示した実施形態では、命令保持部４０に保持された抑止情報が論理値”０”に設定された命令は、スキップされる。これにより、演算処理装置１０は、ＮＯＰのような無意味なサイクルを消費せずに、データのアクセス処理を実行できる。この結果、図２から図６に示した実施形態では、データのアクセス処理が実行されるタイミングが遅れることを抑止できる。
【００９６】
以上の実施形態において説明した発明を整理して、付記として開示する。
（付記１）
主記憶装置に記憶されたデータをキャッシュメモリに保持させるプリフェッチ命令を実行する演算処理装置において、
命令をデコードする命令デコード部と、
前記命令デコード部がデコードした命令に基づいて、演算を実行する演算部と、
前記命令デコード部がデコードした命令のうち、前記主記憶装置に対するメモリアクセスを実行させるメモリアクセス命令と前記プリフェッチ命令とを保持する命令保持部と、
前記命令デコード部がデコードしたメモリアクセス命令が前記キャッシュメモリに保持されたデータに対する対象メモリアクセス命令であるかを予測する予測部と、
前記予測部が予測した前記対象メモリアクセス命令に対応するプリフェッチ命令である対応プリフェッチ命令を前記命令保持部が保持する場合、前記対応プリフェッチ命令の前記演算部による実行を抑止する抑止部と
を有することを特徴とする演算処理装置。
（付記２）
付記１に記載の演算処理装置において、
前記命令デコード部は、前記メモリアクセス命令と前記プリフェッチ命令との対応を示す識別情報がそれぞれ付加された前記メモリアクセス命令および前記プリフェッチ命令をデコードし、
前記命令保持部は、前記識別情報が付加された前記プリフェッチ命令を、前記識別情報とともに保持し、
前記抑止部は、前記対象メモリアクセス命令に付加された識別情報に対応する対応識別情報が付加された前記対応プリフェッチ命令を前記命令保持部が保持する場合、前記対応プリフェッチ命令の前記演算部による実行を抑止する
ことを特徴とする演算処理装置。
（付記３）
付記１または付記２に記載の演算処理装置において、
前記命令保持部は、前記プリフェッチ命令が有効か無効かを示す抑止情報を前記プリフェッチ命令とともに保持し、
前記抑止部は、前記対応プリフェッチ命令を前記命令保持部が保持する場合、前記対応プリフェッチ命令に対応して前記命令保持部に保持された抑止情報を、無効を示す状態に設定する
ことを特徴とする演算処理装置。
（付記４）
付記１ないし付記３のいずれか１項に記載の演算処理装置において、
前記予測部は、
実行された複数のメモリアクセス命令によるそれぞれのメモリアクセスがキャッシュヒットしたかキャッシュミスしたかを示す履歴情報を保持するキャッシュ履歴レジスタ部と、
前記メモリアクセス命令が格納されたアドレスを示すプログラムカウンタ値と前記履歴情報とに基づいて、インデックスを生成するインデックス生成部と、
キャッシュヒットの頻度を示す予測パターン情報を前記インデックス毎に保持するパターン保持部と、
前記パターン保持部に保持された前記予測パターン情報のうち、予測対象のメモリアクセス命令のプログラムカウンタ値を用いて生成されたインデックスに対応する予測パターン情報に基づいて、前記予測対象のメモリアクセス命令が前記対象メモリアクセス命令であるかを示す予測結果情報を前記抑止部に出力する予測結果出力部とを有する
ことを特徴とする演算処理装置。
（付記５）
付記１ないし付記４のいずれか１項に記載の演算処理装置において、
前記演算部は、前記メモリアクセス命令および前記プリフェッチ命令を実行するロード／ストア処理部を有する
ことを特徴とする演算処理装置。
（付記６）
主記憶装置に記憶されたデータをキャッシュメモリに保持させるプリフェッチ命令を実行する演算処理装置の制御方法において、
前記演算処理装置が有する命令デコード部が、命令をデコードし、
前記演算処理装置が有する演算部が、前記命令デコード部がデコードした命令に基づいて、演算を実行し、
前記演算処理装置が有する命令保持部が、前記命令デコード部がデコードした命令のうち、前記主記憶装置に対するメモリアクセスを実行させるメモリアクセス命令と前記プリフェッチ命令とを保持し、
前記演算処理装置が有する予測部が、前記命令デコード部がデコードしたメモリアクセス命令が前記キャッシュメモリに保持されたデータに対する対象メモリアクセス命令であるかを予測し、
前記演算処理装置が有する抑止部が、前記予測部が予測した前記対象メモリアクセス命令に対応するプリフェッチ命令である対応プリフェッチ命令を前記命令保持部が保持する場合、前記対応プリフェッチ命令の前記演算部による実行を抑止する
ことを特徴とする演算処理装置の制御方法。
【００９７】
以上の詳細な説明により、実施形態の特徴点および利点は明らかになるであろう。これは、特許請求の範囲がその精神および権利範囲を逸脱しない範囲で前述のような実施形態の特徴点および利点にまで及ぶことを意図するものである。また、当該技術分野において通常の知識を有する者であれば、あらゆる改良および変更に容易に想到できるはずである。したがって、発明性を有する実施形態の範囲を前述したものに限定する意図はなく、実施形態に開示された範囲に含まれる適当な改良物および均等物に拠ることも可能である。
【符号の説明】
【００９８】
１、１０‥演算処理装置；２、２０‥命令デコード部；３、３０‥演算部；４、４０‥命令保持部；５、５０‥予測部；６、６０‥抑止部；７、７０‥キャシュメモリ；３２‥ロード／ストア処理部；３４‥リザベーションステーション；３６‥演算器；５２‥履歴レジスタ；５４ａ‥排他的論理和回路；５４ｂ‥連結部；５６‥パターン履歴テーブル；５８‥予測結果出力部；６２‥レジスタ；６４‥判定部；６５、６６‥比較部；６７‥論理積回路；６８‥否定論理積回路；１００‥主記憶装置
【図１】
0006488711.tif 000002
【図２】
0006488711.tif 000003
【図３】
0006488711.tif 000004
【図４】
0006488711.tif 000005
【図５】
0006488711.tif 000006
【図６】
0006488711.tif 000007