(57)【要約】【課題】演算処理装置及び演算処理装置の制御方法において、プリフェッチを効率的に制御して性能を向上することを目的とする。【解決手段】  演算処理装置は、生成されたプリフェッチ要求に対し、前記プリフェッチ要求を生成した要求元を判別する識別子を付加するプリフェッチ生成回路と、前記識別子毎に前記プリフェッチ要求が、第１のキャッシュメモリより下位階層に設けられた第２のキャッシュメモリにヒットするキャッシュヒットが一定回数観測されたことを契機として、前記第２のキャッシュメモリの階層におけるプリフェッチのうち前記要求元からのプリフェッチのみを抑止する情報を前記プリフェッチ生成回路へ出力するキャッシュ制御回路とを備える。【選択図】図１
2020013362.tif 000002
【特許請求の範囲】
【請求項１】
生成されたプリフェッチ要求に対し、前記プリフェッチ要求を生成した要求元を判別する識別子を付加するプリフェッチ手段と、
前記識別子毎に前記プリフェッチ要求が、第１のキャッシュメモリより下位階層に設けられた第２のキャッシュメモリにヒットするキャッシュヒットが一定回数観測されたことを契機として、前記第２のキャッシュメモリの階層におけるプリフェッチのうち前記要求元からのプリフェッチのみを抑止する情報を前記プリフェッチ手段に出力する制御手段と、
を備えたことを特徴とする、演算処理装置。
【請求項２】
前記プリフェッチ手段は、メモリアクセス要求とアドレスから生成したメモリアクセス情報を監視して、アクセスパターンから前記プリフェッチ要求を生成し、
前記制御手段は、
前記プリフェッチ要求に対する前記第２のキャッシュメモリの検索の結果、ヒットした場合、前記プリフェッチ要求と前記識別子に対応するプリフェッチ制御テーブルの抑止カウンタの値をインクリメントし、
前記抑止カウンタの値が閾値を超えた場合、前記プリフェッチを抑止する情報を前記識別子と共にプリフェッチ手段に出力し、
前記プリフェッチ手段は、前記抑止する情報に基づいて、前記識別子のプリフェッチを抑止する、
ことを特徴とする、請求項１記載の演算処理装置。
【請求項３】
前記メモリアクセス要求は、ロード命令又はストア命令であることを特徴とする、請求項２記載の演算処理装置。
【請求項４】
前記制御手段は、前記第２のキャッシュメモリへのプリフェッチを既に抑止している識別子について、前記第１のキャッシュメモリへのプリフェッチがミスして、更に前記第２のキャッシュメモリにミスするキャッシュミスが一定回数観測されたことを契機として、前記第２のキャッシュメモリの階層における当該プリフェッチを再開する情報を前記プリフェッチ手段に出力する、
ことを特徴とする、請求項１乃至３のいずれか１項記載の演算処理装置。
【請求項５】
前記プリフェッチ手段は、
前記第２のキャッシュメモリへのプリフェッチを既に抑止している識別子について、プリフェッチ要求を前記第１のキャッシュメモリに出力するのと同時に当該識別子を前記制御手段に出力し、
当該プリフェッチ要求に対する前記第１のキャッシュメモリの検索の結果、ミスした場合、当該プリフェッチ要求を前記第２のキャッシュメモリ及び前記制御手段に出力し、
前記制御手段は、
当該プリフェッチ要求に対する前記第２のキャッシュメモリの検索の結果、ミスした場合、前記識別子に対応するプリフェッチ制御テーブルの再開カウンタ及びプリフェッチ抑止フラグを取得して、前記再開カウンタをインクリメントし、
前記再開カウンタの値が閾値を超えた場合、前記プリフェッチ抑止フラグをリセットし、同時に再開要求を再開する識別子と共に前記プリフェッチ手段に出力し、
前記プリフェッチ手段は、
前記再開要求を前記識別子と共に受信すると、当該識別子のプリフェッチを再開する、
ことを特徴とする、請求項１乃至４のいずれか１項記載の演算処理装置。
【請求項６】
前記要求元は、プログラムが使用する複数の変数のアクセスパターンのうちの１つに対応させたプリフェッチを生成することを特徴とする、請求項１乃至５のいずれか１項記載の演算処理装置。
【請求項７】
プロセッサコア及びキャッシュ制御回路を備えた演算処理装置の制御方法であって、
前記プロセッサコアのプリフェッチ生成回路が、生成されたプリフェッチ要求に対し、前記プリフェッチ要求を生成した要求元を判別する識別子を付加し、
前記キャッシュ制御回路の抑止及び再開回路が、前記識別子毎に前記プリフェッチ要求が第１のキャッシュメモリより下位階層に設けられた第２のキャッシュメモリにヒットするキャッシュヒットが一定回数観測されたことを契機として、前記プリフェッチ生成回路に前記第２のキャッシュメモリの階層におけるプリフェッチのうち前記要求元からのプリフェッチのみを抑止させる、
ことを特徴とする、演算処理装置の制御方法。
【請求項８】
前記プリフェッチ生成回路が、メモリアクセス要求とアドレスから生成したメモリアクセス情報を監視して、アクセスパターンから前記プリフェッチ要求を生成し、
前記抑止及び再開回路が、
前記プリフェッチ要求に対する前記第２のキャッシュメモリの検索の結果、ヒットした場合、前記プリフェッチ要求と前記識別子に対応するプリフェッチ制御テーブルの抑止カウンタの値をインクリメントし、
前記抑止カウンタの値が閾値を超えた場合、前記プリフェッチを抑止する情報を前記識別子と共にプリフェッチ生成回路に出力し、
前記プリフェッチ生成回路が、前記抑止する情報に基づいて、前記識別子のプリフェッチを抑止する、
ことを特徴とする、請求項７記載の演算処理装置の制御方法。
【請求項９】
前記メモリアクセス要求は、ロード命令又はストア命令であることを特徴とする、請求項８記載の演算処理装置の制御方法。
【請求項１０】
前記抑止及び再開回路が、前記第２のキャッシュメモリへのプリフェッチを既に抑止している識別子について、前記第１のキャッシュメモリへのプリフェッチがミスして、更に前記第２のキャッシュメモリにミスするキャッシュミスが一定回数観測されたことを契機として、前記プリフェッチ生成回路に前記第２のキャッシュメモリの階層における当該プリフェッチを再開させる、
ことを特徴とする、請求項７乃至９のいずれか１項記載の演算処理装置の制御方法。
【請求項１１】
前記プリフェッチ生成回路が、
前記第２のキャッシュメモリへのプリフェッチを既に抑止している識別子について、プリフェッチ要求を前記第１のキャッシュメモリに出力するのと同時に当該識別子を前記抑止及び再開回路に出力し、
当該プリフェッチ要求に対する前記第１のキャッシュメモリの検索の結果、ミスした場合、当該プリフェッチ要求を前記第２のキャッシュメモリ及び前記抑止及び再開回路に出力し、
前記抑止及び再開回路が、
当該プリフェッチ要求に対する前記第２のキャッシュメモリの検索の結果、ミスした場合、前記識別子に対応するプリフェッチ制御テーブルの再開カウンタ及びプリフェッチ抑止フラグを取得して、前記再開カウンタをインクリメントし、
前記再開カウンタの値が閾値を超えた場合、前記プリフェッチ抑止フラグをリセットし、同時に再開要求を再開する識別子と共に前記プリフェッチ生成回路に出力し、
前記プリフェッチ生成回路が、
前記再開要求を前記識別子と共に受信すると、当該識別子のプリフェッチを再開する、
ことを特徴とする、請求項７乃至１０のいずれか１項記載の演算処理装置の制御方法。
【請求項１２】
前記要求元は、プログラムが使用する複数の変数のアクセスパターンのうちの１つに対応させたプリフェッチを生成することを特徴とする、請求項７乃至１１のいずれか１項記載の演算処理装置の制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、演算処理装置及び演算処理装置の制御方法に関する。
【背景技術】
【０００２】
ＣＰＵ（Central Processing Unit）等の演算処理装置（又は、プロセッサ）が使用するデータは、一般的には主記憶装置に格納されている。しかし、大容量の主記憶装置（又は、メインメモリ）へのアクセスには時間を要するため、より短い時間でアクセス可能な演算処理装置内の小容量のキャッシュメモリにデータの一部を保持する。キャッシュメモリを使用することで、レイテンシを小さくして処理の高速化を図ることができる。
【０００３】
演算処理装置がデータを必要とした時に、当該データが既にキャッシュメモリに保持されている場合、小さいレイテンシで処理を実行できる。一方、必要とするデータがキャッシュメモリに保持されていない場合には、演算処理装置の演算制御部に最も近いキャッシュメモリまでデータを移動しなければならない。演算処理装置がデータを必要とすることが確定してからこのようなデータの移動を開始した場合、レイテンシが大きくなる。このため、データが必要となることを事前予測して、主記憶装置からキャッシュメモリにデータを予め移動しておく、プリフェッチを行う。このプリフェッチにより、演算処理装置の処理を高速化できる。
【０００４】
キャッシュメモリは、複数のキャッシュメモリを組み合わせた階層構造を有する場合がある。一般的に、階層構造を有するキャッシュメモリは、演算制御部に近い階層レベルのキャッシュメモリほど容量が小さいがアクセスが高速であり、主記憶装置に近い階層レベルのキャッシュメモリほど容量が大きいがアクセスが低速である。キャッシュメモリの階層レベルは、一般的には演算制御部に近い方からレベル１（Ｌ１）,レベル２（Ｌ２），...等と表現される。
【０００５】
プリフェッチ要求は、夫々の階層レベルのキャッシュメモリに対して実行できるようになっている。主記憶装置は、全てのデータを保持しているが、最も低速なキャッシュメモリに比べても更に低速である。データを要求した時に、当該データが全ての階層レベルのキャッシュメモリのいずれにも保持されておらず、主記憶装置からデータを移動する場合のレイテンシが最大となる。上位階層レベルのキャッシュメモリがデータを保持している場合ほど、レイテンシは小さくなる。従って、演算処理装置の性能向上には、必要となるデータを最上位の階層レベルＬ１のＬ１キャッシュメモリにプリフェッチで予め移動しておくことが望ましい。
【０００６】
しかし、Ｌ１キャッシュメモリは、Ｌ１キャッシュメモリの特性上、容量が小さいため、プリフェッチするタイミングが早すぎると、データが実際に必要となるまでに容量不足になってしまう。Ｌ１キャッシュメモリが容量不足になると、Ｌ１キャッシュメモリに他のデータを書き込むために、プリフェッチされているデータがＬ１キャッシュメモリから追い出されてしまう。一方、Ｌ１キャッシュメモリへのプリフェッチを、必要とするデータが下位階層レベルのＬ２キャッシュメモリに保持されていない状態で行うと、より下位の階層レベルのキャッシュメモリや主記憶装置にまでアクセスが発生する。このため、レイテンシが大きくなってしまい、演算処理装置がデータを必要とするまでにデータの移動が完了せず、プリフェッチによる演算処理装置の性能向上の効果は小さい。
【０００７】
上記の如きプリフェッチのタイミングによって生じうる不都合を解消する手法が提案されている。この提案手法では、最初は容量に余裕がある下位の階層レベルのキャッシュメモリへのプリフェッチを要求しておき、その後に上位の階層レベルのキャッシュメモリへのプリフェッチを時間差で順次要求する。これにより、データが必要となる付近のタイミングで、データを最も高速なＬ１キャッシュメモリに移動する。
【０００８】
このように階層レベルを指示する手法のプリフェッチを行う際、指示された階層レベルのキャッシュメモリが要求されたデータを既に保持している場合がある。既にデータを保持している階層レベルのキャッシュメモリへのプリフェチは冗長である。しかし、ある階層レベルのキャッシュメモリへのプリフェッチが冗長であることが判明するまでは、冗長なプリフェッチに関連した処理が実行されてしまう。冗長なプリフェッチに関連した処理が実行されると、当該処理により他の処理が停滞して演算処理装置の全体性能が低下したり、性能向上に寄与しない処理が実行されることで消費電力が増大したりしてしまう。
【０００９】
プログラムコードに明示的に指示をするプリフェッチは、ソフトウェアプリフェッチ（ＳＷＰＦ：Software Prefetch）と呼ばれる。また、プログラムコードの内容に関わらず、ハードウェアにより自動生成されるプリフェッチは、ハードウェアプリフェッチ（ＨＷＰＦ：Hardware Prefetch）と呼ばれる。冗長なＨＷＰＦを減らすための従来技術の一例として、冗長ＨＷＰＦの発行を複数回カウントすると、タイマを使用して一定期間経過までＨＷＰＦを抑止する技術がある（例えば、特許文献２参照）。
【００１０】
一般的に、ＨＷＰＦは、複数のアクセスパターン毎に夫々独立して生成可能である。例えば、複数の変数を使用するプログラムでは、夫々の変数のアクセスパターンに対応させたＨＷＰＦを、複数同時に生成できる。しかし、従来技術では、ＨＷＰＦが自己の階層レベルのキャッシュメモリにヒットした回数を測定し、一定の閾値に達すると全ＨＷＰＦの発行を画一的に抑止している。このため、抑止の原因となったＨＷＰＦとは別のアクセスパターンに基づいて生成されるＨＷＰＦの発行も抑止されしまうため、演算処理装置の性能向上に有効なプリフェッチが抑止されてしまい、演算処理装置の性能が低下してしまう。
【先行技術文献】
【特許文献】
【００１１】
【特許文献１】ＷＯ２００８／０９３３９９号公報
【特許文献２】特開２０１７−１９１５０３号公報
【発明の概要】
【発明が解決しようとする課題】
【００１２】
従来の演算処理装置では、プリフェッチを効率的に制御することが難しいため、演算処理装置の性能を向上することが難しい。
【００１３】
そこで、１つの側面では、プリフェッチを効率的に制御して性能を向上可能な演算処理装置及び演算処理装置の制御方法を提供することを目的とする。
【課題を解決するための手段】
【００１４】
１つの案によれば、生成されたプリフェッチ要求に対し、前記プリフェッチ要求を生成した要求元を判別する識別子を付加するプリフェッチ手段と、前記識別子毎に前記プリフェッチ要求が、第１のキャッシュメモリより下位階層に設けられた第２のキャッシュメモリにヒットするキャッシュヒットが一定回数観測されたことを契機として、前記第２のキャッシュメモリの階層におけるプリフェッチのうち前記要求元からのプリフェッチのみを抑止する情報を前記プリフェッチ手段に出力する制御手段と、を備えた演算処理装置が提供される。
【発明の効果】
【００１５】
一態様によれば、プリフェッチを効率的に制御して演算処理装置の性能を向上することができる。
【図面の簡単な説明】
【００１６】
【図１】ＨＷＰＦ抑止処理の一例を説明する模式図である。
【図２】ＨＷＰＦ再開処理の一例を説明する模式図である。
【図３】プロセッサコアが２個設けられたプロセッサの一例を模式的に示す図である。
【図４】第１実施例におけるプロセッサコアの一例を示すブロック図である。
【図５】第１実施例における２次キャッシュ制御回路及び主記憶装置の一例を示すブロック図である。
【図６】図４に示すＨＷＰＦ生成回路の一例を示すブロック図である。
【図７】図５に示すＨＷＰＦ抑止及び再開回路の一例を示すブロック図である。
【図８】図６に示すアクセスパターン監視ユニットの構成例を示す図である。
【図９】図７に示すプリフェッチ制御テーブルの構成例を示す図である。
【図１０】図７に示す判定回路の処理の一例を説明するフローチャートである。
【図１１】抑止及び再開カウンタのインクリメント条件の一例を説明する図である。
【図１２】第２実施例におけるＨＷＰＦ生成回路の一例を示すブロック図である。
【図１３】図１２に示すアクセスパターン監視ユニットの構成例を示す図である。
【図１４】第２実施例におけるプロセッサコアの一例を示すブロック図である。
【図１５】第２実施例における２次キャッシュ制御回路の一例を示すブロック図である。
【図１６】第２実施例における３次キャッシュ制御回路及び主記憶装置の一例を示すブロック図である。
【図１７】抑止及び再開カウンタのインクリメント条件の一例を説明する図である。
【発明を実施するための形態】
【００１７】
開示の演算処理装置及び演算処理装置の制御方法では、冗長なプリフェッチを抑止して、プリフェッチを効率的に制御する。例えば、生成されたプリフェッチ要求に対し、当該プリフェッチ要求を生成した要求元を判別する識別子を付加し、識別子毎にキャッシュヒットが一定回数観測されたことを契機として、同じ階層のプリフェッチのうち識別子が示す要求元からのプリフェッチのみを抑止する。
【００１８】
抑止されているプリフェッチのうち、有効なプリフェッチのみを再開して、効率的なキャッシュ制御を実現しても良い。この場合、例えば所定階層へのプリフェッチを既に抑止している識別子について、プリフェッチが所定階層及び下位の階層のキャッシュメモリにミスするキャッシュミスを観測する。プリフェッチが所定階層のキャッシュメモリにミスし、更に下位の階層のキャッシュメモリにミスするキャッシュミスが一定回数観測されたことを契機として、当該下位の階層へのプリフェッチを再開しても良い。
【００１９】
以下に、開示の演算処理装置及び演算処理装置の制御方法の各実施例を図面と共に説明する。
【実施例】
【００２０】
[第１実施例]
第１実施例では、演算処理装置の一例である、ＣＰＵ等のプロセッサが、２階層の階層構造を有するキャッシュメモリ、即ち、Ｌ１（Level-1:一次）キャッシュメモリ及びＬ２（Level-2:二次）キャッシュメモリを備える。以下の説明では、Ｌ１キャッシュメモリへのハードウェアプリフェッチ（ＨＷＰＦ）をＬ１ＨＷＰＦと表記し、Ｌ２キャッシュメモリへのＨＷＰＦをＬ２ＨＷＰＦと表記する。
【００２１】
プロセッサが、Ｌ１キャッシュメモリ及びＬ２キャッシュメモリを備えている場合のＬ２ＨＷＰＦを抑止及び再開する処理の一例を、図１及び図２と共に説明する。図１は、ＨＷＰＦ抑止処理の一例を説明する模式図であり、図２は、ＨＷＰＦ再開処理の一例を説明する模式図である。図１及び図２において、プロセッサのプロセッサコア１は、ロードストア部１２０と、ＨＷＰＦ生成回路１３と、Ｌ１キャッシュメモリ１５とを有する。ロードストア部１２０は、後述するロードストアユニットとキャッシュアクセスパイプラインを含む。プロセッサコア１には、Ｌ２キャッシュメモリ２４及び２次キャッシュ制御回路２が接続されている。２次キャッシュ制御回路２は、後述するＨＷＰＦ抑止及び再開回路等を含み、ＨＷＰＦ抑止及び再開回路は、後述するプリフェッチ制御テーブル等を含む。２次キャッシュ制御回路２は、Ｌ２キャッシュメモリ２４を含んでも良い。
【００２２】
Ｌ２ＨＷＰＦを抑止する処理は、図１において例えば以下の手順ｐ１〜ｐ５に従って実行する。
【００２３】
ｐ１：ロードストア部１２０において、キャッシュアクセスパイプラインが、ロードストアユニットからのメモリアクセス要求の一例であるロード／ストア（ＬＤ／ＳＴ：Load/Store）要求とＬＤ／ＳＴアドレスとから、メモリアクセス情報を生成する。ロードストア部１２０は、メモリアクセス情報をＨＷＰＦ生成回路１３に出力する。
【００２４】
ｐ２：ＨＷＰＦ生成回路１３が、ロードストア部１２０のキャッシュアクセスパイプラインからのメモリアクセス情報を監視して、アクセスパターンからプリフェッチ要求を生成する。プリフェッチ要求は、例えばロード（ＬＤ）命令で使用したアドレスに一定値を加算したアドレスを、加算する値を更新しながら一定周期で生成すること等して生成可能であるが、プリフェッチ要求の生成方法自体は特に限定されない。プリフェッチは、Ｌ２ＨＷＰＦ，Ｌ１ＨＷＰＦの順で発行するため、ＨＷＰＦ生成回路１３は初めにＬ２ＨＷＰＦ要求を生成する。Ｌ２ＨＷＰＦ要求であるため、要求する階層ＬｖはＬｖ＝２である。ＨＷＰＦ生成回路１３がＬ２ＨＷＰＦ要求と同時に生成する監視ユニットＩＤは、ＨＷＰＦ生成回路１３が有する複数のアクセスパターン監視ユニットのうち、Ｌ２ＨＷＰＦを生成した要求元のアクセスパターン監視ユニットを識別するためのＩＤである。この例では、監視ユニットＩＤ＝１である。ＨＷＰＦ生成回路１３は、Ｌ２ＨＷＰＦ要求をＬ２キャッシュメモリ２４及び２次キャッシュ制御回路２に出力し、監視ユニットＩＤ＝１を２次キャッシュ制御回路２に出力する。
【００２５】
ＨＷＰＦは、複数のアクセスパターン毎に夫々独立して生成可能であり、例えば複数の変数を使用するプログラムでは、夫々の変数のアクセスパターンに対応させたＨＷＰＦを、複数同時に生成できる。ＨＷＰＦ生成回路１３の複数のアクセスパターン監視ユニットは、例えば複数のアクセスパターンに対応させたプリフェッチを生成する要求元になる。監視ユニットＩＤは、プリフェッチ要求を生成した要求元を判別する識別子（ＩＤ）の一例である。
【００２６】
ｐ３：Ｌ２ＨＷＰＦ要求に対するＬ２キャッシュメモリ２４の検索の結果、Ｌ２キャッシュメモリ２４にヒットした場合、２次キャッシュ制御回路２のＨＷＰＦ抑止及び再開回路がＬ２キャッシュヒットの通知を受ける。この場合、ＨＷＰＦ抑止及び再開回路は、手順ｐ２で入力されたＬ２ＨＷＰＦ要求と監視ユニットＩＤ＝１に対応するプリフェッチ制御テーブルの抑止カウンタの値をインクリメントする。
【００２７】
ｐ４：プリフェッチ制御テーブルの抑止カウンタの値が閾値を超えた場合、ＨＷＰＦ抑止及び再開回路がＬ２ＨＷＰＦを抑止するためのＬ２ＨＷＰＦ抑止要求を、監視ユニットＩＤ＝１と共にＨＷＰＦ生成回路１３へ通知する。
【００２８】
ｐ５：ＨＷＰＦ生成回路１３は、Ｌ２ＨＷＰＦ抑止要求に基づいて、監視ユニットＩＤ＝１のアクセスパターン監視ユニットのＬ２ＨＷＰＦを抑止する。この結果、監視ユニットＩＤ＝１のアクセスパターン監視ユニットは、Ｌ２ＨＷＰＦ再開要求があるまでＬ１ＨＷＰＦのみを発行可能となる。これにより、Ｌ２キャッシュメモリ２４にヒットする冗長なＬ２ＨＷＰＦを抑止することができる。一方、監視ユニットＩＤ＝１以外の監視ユニットＩＤのアクセスパターン監視ユニットは、対応する階層ＬｖのＨＷＰＦ抑止要求がなければＬ１ＨＷＰＦ，Ｌ２ＨＷＰＦを発行可能である。
【００２９】
ＨＷＰＦ生成回路１３は、生成されたプリフェッチ要求に対し、当該プリフェッチ要求を生成した要求元を判別する識別子（ＩＤ）を付加するプリフェッチ手段の一例を形成する。また、２次キャッシュ制御回路２のＨＷＰＦ抑止及び再開回路は、制御手段の一例を形成する。制御手段は、識別子（ＩＤ）毎にプリフェッチ要求が、Ｌ１キャッシュメモリ１５より下位階層に設けられたＬ２キャッシュメモリ２４にヒットするキャッシュヒットを観測する。制御手段は、当該キャッシュヒットが一定回数観測されたことを契機として、Ｌ２キャッシュメモリ２４の階層Ｌｖ＝２におけるプリフェッチのうち要求元からのプリフェッチのみを抑止する情報の一例である信号をプリフェッチ手段へ出力する。
【００３０】
このように、従来のようにＨＷＰＦを画一的に抑止する仕組みを改善し、アクセスパターン毎に、冗長なＨＷＰＦのみを選択的に抑止することで、プリフェッチを効率的に制御することが可能となる。これにより、必要なプリフェッチ要求は維持しつつ、アクセスパターン毎に冗長で不要なプリフェッチのみを抑止して、プロセッサの性能を向上できる。
【００３１】
一方、Ｌ２ＨＷＰＦを抑止した後、再開する処理は、図２において例えば以下の手順ｐ６〜ｐ１０に従って実行する。ここでは、一例として、ＨＷＰＦ生成回路１３のＬ２ＨＷＰＦを抑止されている、監視ユニットＩＤ＝１のアクセスパターン監視ユニットからＬ１ＨＷＰＦが生成される場合を説明する。
【００３２】
ｐ６：この場合、ＨＷＰＦ生成回路１３が、Ｌ１ＨＷＰＦ要求を生成する。Ｌ１ＨＷＰＦ要求を生成するので、要求する階層ＬｖはＬｖ＝１である。また、ＨＷＰＦ生成回路１３が、Ｌ１ＨＷＰＦ要求と同時に監視ユニットＩＤ＝１を生成する。ＨＷＰＦ生成回路１３は、Ｌ１ＨＷＰＦ要求をＬ１キャッシュメモリ１５に出力し、監視ユニットＩＤ＝１を２次キャッシュ制御回路２に出力する。Ｌ１ＨＷＰＦ要求に対するＬ１キャッシュメモリ１５の検索の結果、Ｌ１キャッシュメモリ１５にヒットした場合、Ｌ１ＨＷＰＦは終了する。
【００３３】
ｐ７：Ｌ１ＨＷＰＦ要求に対するＬ１キャッシュメモリ１５の検索の結果、ミスした場合、Ｌ１キャッシュメモリ１５が、要求する階層ＬｖはＬｖ＝１のままで、Ｌ１ＨＷＰＦ要求をＬ２キャッシュメモリ２４及び２次キャッシュ制御回路２に出力する。
【００３４】
ｐ８：Ｌ１ＨＷＰＦ要求に対するＬ２キャッシュメモリ２４の検索の結果、ミスした場合、２次キャッシュ制御回路２のＨＷＰＦ抑止及び再開回路がＬ２キャッシュミスの通知を受ける。この場合、ＨＷＰＦ抑止及び再開回路は、Ｌ１ＨＷＰＦ要求を受け取ると、監視ユニットＩＤ＝１に対応するプリフェッチ制御テーブルの再開カウンタ及びプリフェッチ抑止フラグを取得する。また、ＨＷＰＦ抑止及び再開回路は、Ｌ２キャッシュミスの場合、プリフェッチ制御テーブルの再開カウンタをインクリメントする。なお、Ｌ１ＨＷＰＦ要求に対するＬ２キャッシュメモリ２４の検索の結果、Ｌ２キャッシュメモリ２４にヒットした場合、Ｌ２キャッシュメモリ２４に対するＬ１ＨＷＰＦは終了する。
【００３５】
ｐ９：再開カウンタの値が閾値を超えた場合、ＨＷＰＦ抑止及び再開回路がプリフェッチ抑止フラグをリセットし、同時にＬ２ＨＷＰＦ再開要求をＬ２ＨＷＰＦを再開するアクセスパターン監視ユニットの監視ユニットＩＤ＝１と共にＨＷＰＦ生成回路１３へ通知する。
【００３６】
ｐ１０：ＨＷＰＦ生成回路１３は、Ｌ２ＨＷＰＦ再開要求を監視ユニットＩＤ＝１と共に受信した場合、監視ユニットＩＤ＝１のアクセスパターン監視ユニットがＬ２ＨＷＰＦを再開する。これにより、Ｌ１ＨＷＰＦがプリフェッチしたいデータがＬ２キャッシュメモリ２４に保持されておらず、Ｌ１ＨＷＰＦに先行して発行することがプロセッサの性能向上に有効になったことを確認できたＬ２ＨＷＰＦを再開できる。
【００３７】
２次キャッシュ制御回路２のＨＷＰＦ抑止及び再開回路は、プリフェッチを再開する情報の一例である信号を上記プリフェッチ手段へ出力する、制御手段の一例を形成する。制御手段は、Ｌ２キャッシュメモリ２４へのプリフェッチを既に抑止している識別子（ＩＤ）について、Ｌ１キャッシュメモリ１５へのプリフェッチがミスして、更にＬ２キャッシュメモリ２４にミスするキャッシュミスを観測する。制御手段は、当該キャッシュミスが一定回数観測されたことを契機として、Ｌ２キャッシュメモリ２４の階層Ｌｖ＝２における当該プリフェッチを再開する情報の一例である信号を上記プリフェッチ手段へ出力する。
【００３８】
ところで、従来技術では、タイマを用いた一定期間の経過を契機として抑止したＨＷＰＦの発行を再開しているが、当該一定期間を最適なプリフェッチ抑止期間に設定することは困難である。抑止していたＨＷＰＦの発行を一定期間後に再開する場合、当該一定期間が最適なプリフェッチ抑止期間より長く設定されてしまうと、本来であればＨＷＰＦが有効である期間にＨＷＰＦが抑止されてしまうため、演算処理装置の性能が低下してしまう。
【００３９】
これに対し、本実施例では、抑止したＨＷＰＦの発行を従来技術のように画一的に再開する仕組みを改善する。具体的には、アクセスパターン毎に抑止したＨＷＰＦのうち、再度冗長から有効に遷移したＨＷＰＦのみの発行を再開することで、効率的なキャッシュ制御を実現することができる。これにより、アクセスパターン毎に抑止したプリフェッチが再度有効になったことを検出してから当該プリフェッチの発行を再開して、プロセッサの性能を向上することができる。
【００４０】
図３は、プロセッサコアが２個設けられたプロセッサの一例を模式的に示す図である。図３中、図１及び図２と同一部分には同一符号を付し、その説明は省略する。この例では、プロセッサは、２階層の階層構造を有するキャッシュメモリ、即ち、Ｌ１キャッシュメモリ１５及びＬ２キャッシュメモリ２４を備える。図３に示すように、Ｌ１キャッシュメモリ１５は、２個のプロセッサコア１に夫々１個ずつ備えられ、２個のプロセッサコア１が１個のＬ２キャッシュメモリ２４を共有する。
【００４１】
次に、プロセッサの各部を、図４〜図７と共により詳細に説明する。先ず、プロセッサの各部の入力と出力を説明し、後に、プロセッサの各部の処理を説明する。
【００４２】
図４は、第１実施例におけるプロセッサコアの一例を示すブロック図である。プロセッサコア１は、演算処理装置の一例である、ＣＰＵ等のプロセッサを形成する。この例では、説明の便宜上、プロセッサコア１のコアＩＤ＝Ｎであるが、プロセッサに同じ構成のプロセッサコア１を複数個設けても良い。例えば、図３に示すようにプロセッサコア１を２個設けたプロセッサの場合、後述するように、一方のプロセッサコア１のコアＩＤ＝０として、他方のプロセッサコア１のコアＩＤ＝１としても良い。プロセッサは、２階層の階層構造を有するキャッシュメモリを備え、この例では２つの階層レベルはＬ１，Ｌ２である。
【００４３】
プロセッサコア１は、演算制御部１１と、ロードストアユニット１２と、ＨＷＰＦ生成回路１３と、キャッシュアクセスパイプライン１４と、Ｌ１キャッシュメモリ１５とを有する。ロードストアユニット１２とキャッシュアクセスパイプライン１４とは、図１及び図２に示すロードストア部１２０の一例を形成する。
【００４４】
演算制御部１１は、データ要求Ｓ００１を出力してロードストアユニット１２に入力する。ＨＷＰＦ生成回路１３には、図５と共に後述する２次キャッシュ制御回路２からの抑止及び再開監視ユニットＩＤ_Ｓ２０６−Ｎと、ＨＷＰＦ抑止信号Ｓ２０７−Ｎと、ＨＷＰＦ再開信号Ｓ２０８−Ｎと、抑止ＨＷＰＦレベル（Ｌｖ．）Ｓ２０９−Ｎとが入力される。Ｌ１キャッシュメモリ１５には、２次キャッシュ制御回路２からのＬ２読出データＳ３１０が入力される。Ｌ１キャッシュメモリ１５が出力するＬ１読出データＳ００７は、ロードストアユニット１２に入力し、Ｌ１キャッシュメモリ１５が出力するＬ１キャッシュヒット信号Ｓ００６は、キャッシュアクセスパイプライン１４に入力する。ロードストアユニット１２が出力するロードストア（ＬＤ／ＳＴ：Load/Store）要求Ｓ００２及びＬＤ／ＳＴアドレスＳ００３は、キャッシュアクセスパイプライン１４に入力する。ＨＷＰＦ生成回路１３は、ＨＷＰＦ要求Ｓ１０２と、ＨＷＰＦアドレスＳ１０３と、監視ユニットＩＤ_Ｓ１０４と、カウンタリセット信号Ｓ１０５と、ＨＷＰＦＬｖＳ１０６とを出力し、キャッシュアクセスパイプライン１４に入力する。キャッシュアクセスパイプライン１４は、Ｌ１書込データＳ００４及びＬ１アクセスアドレスＳ００５をＬ１キャッシュメモリ１５に入力する。キャッシュアクセスパイプライン１４は、要求種別信号Ｓ０１１−Ｎと、アドレス信号Ｓ０１２−Ｎと、監視ユニットＩＤ_Ｓ０１３−Ｎと、カウンタリセット信号Ｓ０１４−Ｎと、プリフェッチ階層信号Ｓ０１５−Ｎとを出力して２次キャッシュ制御回路２に入力する。
【００４５】
図５は、第１実施例における２次キャッシュ制御回路及び主記憶装置の一例を示すブロック図である。図５は、プロセッサにプロセッサコア１が図３に示すように２個設けられる場合の２次キャッシュ制御回路２の構成を、主記憶装置と共に示す。なお、プロセッサコア１が１個の場合は、プロセッサコア１に供給される信号等は、例えばコアＩＤ＝０用の信号に限られ、プロセッサコア１から供給される信号等は、例えばコアＩＤ＝０のプロセッサコア１からの信号に限られる。
【００４６】
図５に示す２次キャッシュ制御回路２は、応答コア選択回路２１，２２と、ＦＩＦＯ（First-In-First-Out）回路２３と、Ｌ２キャッシュメモリ２４と、主記憶要求生成回路２５と、ＨＷＰＦ抑止及び再開回路２６とを有する。
【００４７】
この例では、コアＩＤ＝０であるプロセッサコア１とコアＩＤ＝１であるプロセッサコア１の計２個のプロセッサコア１が、２次キャッシュ制御回路２を介して主記憶装置３に接続可能である。コアＩＤ＝０であるプロセッサコア１からの要求種別信号Ｓ０１１−０と、アドレス信号Ｓ０１２−０と、監視ユニットＩＤ_Ｓ０１３−０と、カウンタリセット信号Ｓ０１４−０と、プリフェッチ階層信号Ｓ０１５−０とは、ＦＩＦＯ回路２３に入力される。コアＩＤ＝１であるプロセッサコア１からの要求種別信号Ｓ０１１−１と、アドレス信号Ｓ０１２−１と、監視ユニットＩＤ_Ｓ０１３−１と、カウンタリセット信号Ｓ０１４−１と、プリフェッチ階層信号Ｓ０１５−１とは、ＦＩＦＯ回路２３に入力される。ＦＩＦＯ回路２３が出力する要求コアＩＤ_Ｓ３０６は、応答コア選択回路２１に入力する。ＦＩＦＯ回路２３が出力するアクセスアドレスＳ３０１は、Ｌ２キャッシュメモリ２４及び主記憶装置３に入力する。ＦＯＦＯ２３が出力するＨＷＰＦ要求Ｓ３０２と、監視ユニットＩＤ_Ｓ３０３と、カウンタリセット信号Ｓ３０４と、プリフェッチ階層信号Ｓ３０５と、要求コアＩＤ_Ｓ３０６とは、ＨＷＰＦ抑止及び再開回路２６に入力する。
【００４８】
Ｌ２キャッシュメモリ２４が出力するＬ２キャッシュヒット信号Ｓ３０７は、主記憶要求生成回路２５及びＨＷＰＦ抑止及び再開回路２６に入力する。主記憶要求生成回路２５が出力する主記憶データ要求Ｓ３０８は、主記憶装置３に入力する。主記憶装置３が出力する主記憶読出データＳ３０９は、Ｌ２キャッシュメモリ２４に入力する。ＨＷＰＦ抑止及び再開回路２６が出力する抑止及び再開監視ユニットＩＤ_Ｓ２０６と、ＨＷＰＦ抑止信号Ｓ２０７と、ＨＷＰＦ再開信号Ｓ２０８と、抑止ＨＷＰＦＬｖ．Ｓ２０９と、抑止及び再開コアＩＤ_Ｓ２１０とは、応答コア選択回路２２に入力する。応答コア選択回路２２は、抑止及び再開監視ユニットＩＤ_Ｓ２０６−０と、ＨＷＰＦ抑止信号Ｓ２０７−０と、ＨＷＰＦ再開信号Ｓ２０８−０と、抑止ＨＷＰＦＬｖ．Ｓ２０９−０とをコアＩＤ＝０であるプロセッサコア１に入力する。また、応答コア選択回路２２は、抑止及び再開監視ユニットＩＤ_Ｓ２０６−１と、ＨＷＰＦ抑止信号Ｓ２０７−１と、ＨＷＰＦ再開信号Ｓ２０８−１と、抑止ＨＷＰＦＬｖ．Ｓ２０９−１とをコアＩＤ＝１であるプロセッサコア１に入力する。
【００４９】
図６は、図４に示すＨＷＰＦ生成回路の一例を示すブロック図である。ＨＷＰＦ生成回路１３は、デマルチプレクサ（ＤＭＵＸ：Demultiplexer）回路１３１と、選択部１３２と、ＦＷＰＦ情報生成回路１３３とを有する。選択部１３２は、Ｍ個のアクセスパターン監視ユニット１３２０−１〜１３２０−Ｍと、ユニット選択回路１３２１とを有する。
【００５０】
図６に示すＤＭＵＸ回路１３１には、図５に示す２次キャッシュ制御回路２からの抑止及び再開監視ユニットＩＤ_Ｓ２０６と、ＨＷＰＦ抑止信号Ｓ２０７と、ＨＷＰＦ再開信号Ｓ２０８と、抑止ＨＷＰＦＬｖ．Ｓ２０９とが入力される。ＤＭＵＸ回路１３１は、抑止フラグ更新信号Ｓ１０７を出力し、各アクセスパターン監視ユニット１３２０−１〜１３２０−Ｍに入力する。各アクセスパターン監視ユニット１３２０−１〜１３２０−Ｍには、図４に示すキャッシュアクセスパイプライン１４からのメモリアクセス情報Ｓ００８が入力される。ユニット選択回路１３２１は、アクセスパターン監視ユニット１３２０−１〜１３２０−Ｍのうち選択されたアクセスパターン監視ユニットのプリフェッチ情報Ｓ１０１を出力してＨＷＰＦ情報生成回路１３３に入力する。ＨＷＰＦ情報生成回路１３３は、ＨＷＰＦ要求Ｓ１０２と、ＨＷＰＦアドレスＳ１０３と、監視ユニットＩＤ_Ｓ１０４と、カウンタリセット信号Ｓ１０５と、ＨＷＰＦＬｖＳ１０６とを含むＨＷＰＦ情報を出力し、プロセッサコア１のキャッシュアクセスパイプライン１４に入力する。ＨＷＰＦ情報は、プリフェッチ要求の一例であるＨＷＰＦ要求Ｓ１０２に、当該プリフェッチ要求を生成した要求元のアクセスパターン監視ユニットを判別する識別子（ＩＤ）の一例である監視ユニットＩＤ_Ｓ１０４が付加されている。
【００５１】
図７は、図５に示すＨＷＰＦ抑止及び再開回路の一例を示すブロック図である。ＨＷＰＦ抑止及び再開回路２６は、閾値設定回路２６１と、判定回路２６２と、加算回路２６３と、左シフト回路２６４と、テーブル選択回路２６５と、デマルチプレクサ（ＤＥＭＵＸ：Demultiplexer）回路２６６と、プリフェッチ制御テーブル２６７とを有する。左シフト回路２６４は、例えば入力される要求コアＩＤ_Ｓ３０６の各ビットを左へ所定ビット数分シフトして出力する。
【００５２】
図５に示すＦＩＦＯ回路２３が出力する監視ユニットＩＤ_Ｓ３０３は、加算回路２６３及び判定回路２６２に入力される。ＦＩＦＯ回路２３が出力する要求コアＩＤ_Ｓ３０６は、左シフト回路２６４及び判定回路２６２に入力される。ＦＩＦＯ回路２３が出力するプリフェッチ要求Ｓ３０２と、カウンタリセット信号Ｓ３０４と、ＨＷＰＦＬｖＳ３０５と、Ｌ２キャッシュメモリ２４が出力するキャッシュヒット信号Ｓ３０７とは、判定回路２６２に入力される。閾値設定回路２６１は、プリフェッチ抑止閾値Ｓ２０４と、プリフェッチ再開閾値Ｓ２０５とを出力し、判定回路２６２に入力する。閾値設定回路２６１は、プリフェッチ抑止閾値Ｓ２０４と、プリフェッチ再開閾値Ｓ２０５とを予め格納した記憶装置であっても良い。また、閾値設定回路２６１は、外部信号Ｓ５００によりプリフェッチ抑止閾値Ｓ２０４と、プリフェッチ再開閾値Ｓ２０５とを設定されても良い。判定回路は、抑止フラグ、抑止カウンタ、及び再開カウンタの各更新値Ｓ２０３を出力し、ＤＥＭＵＸ回路２６６に入力する。
【００５３】
加算回路２６３は、監視ユニットＩＤ_Ｓ３０３と、左シフト回路２６４の出力とを加算したテーブルエントリ選択信号Ｓ２０１を出力し、テーブル選択回路２６５及びＤＥＭＵＸ回路２６６に入力する。加算回路２６３及び左シフト回路２６４は、プリフェッチ制御テーブル２６７内の各テーブルの各エントリを参照するための情報を生成する回路の一例を形成する。プリフェッチ制御テーブル２６７は、「監視ユニット数×コア数」個のテーブルを含む。ここで、「監視ユニット数」は、プロセッサコア１当たりのアクセスパターン監視ユニット１３２０−１〜１３２０−Ｍの個数Ｍである。「コア数」はプロセッサが有するプロセッサコア１の個数（この例では２個）である。テーブル選択回路２６５は、テーブルエントリ選択信号Ｓ２０１に応じて、ＤＥＭＵＸ回路２６６の出力に応じたプリフェッチ制御テーブル２６７の出力を選択し、抑止フラグ、抑止カウンタ、及び再開カウンタの各値Ｓ２０２を出力して判定回路２６２に入力する。判定回路２６２は、抑止及び再開監視ユニットＩＤ_Ｓ２０６と、ＨＷＰＦ抑止信号Ｓ２０７と、ＨＷＰＦ再開信号Ｓ２０８と、抑止ＨＷＰＦＬｖ．Ｓ２０９と、抑止及び再開コアＩＤ_Ｓ２１０とを出力し、応答コア選択回路２２に入力する。
【００５４】
図８は、図６に示すアクセスパターン監視ユニットの構成例を示す図である。アクセスパターン監視ユニット１３２０−ｉ（ｉ＝１〜Ｍ）には、アクセスパターン監視ユニット自身の監視ユニットＩＤ（アクセスパターン監視ユニットＩＤ）と、アクセスパターン監視対象のプリフェッチアドレスと、既にプリフェッチを発行した発行回数を含む。アクセスパターン監視ユニット１３２０−ｉは更に、各階層へＨＷＰＦ要求をする際に加算するプリフェッチ距離と、本実施例で用いるＨＷＰＦ抑止及び再開回路２６からのＬ２ＨＷＰＦ抑止フラグとを含む。この例では、プリフェッチ距離は、Ｌ１ＨＷＰＦ距離と、Ｌ２ＨＷＰＦ距離とを含む。Ｍ個のアクセスパターン監視ユニット１３２０−１〜１３２０−Ｍは、夫々異なるプリフェッチ情報を格納し、独立してプリフェッチ情報を生成する。
【００５５】
プリフェッチ情報を生成するために保持する情報、当該情報を保持するためにプロセッサのロードストアユニット１２等から通知する情報、新規の情報を登録したりプリフェッチの生成を開始したりする契機の情報は、適宜決定すれば良い。一般的に、これらの情報はプログラム中のロード／ストア（ＬＤ／ＳＴ）命令がアクセスしたアドレス、Ｌ１キャッシュメモリ１５へのヒット回数、過去のデータアクセス履歴とそのアドレス変分等から決定される。本実施例では、図７に示すＨＷＰＦ抑止及び再開回路２６への入力元となる図６に示すＳ１０４，Ｓ１０５，Ｓ１０６に相当する信号を生成できれば、情報を決定するための具体的な回路構成は特に限定されない。
【００５６】
図９は、図７に示すプリフェッチ制御テーブルの構成例を示す図である。図９に示すように、プリフェッチ制御テーブル２６７は、プロセッサコア１のコアＩＤ毎に、アクセスパターン監視ユニット１３２０−１〜１３２０−Ｍの個数Ｍのエントリ数を有する。また、プリフェッチ制御テーブル２６７は、エントリ毎に、監視ユニットＩＤ、抑止フラグ、抑止カウンタ及び再開カウンタを含む。監視ユニットＩＤは、対応するエントリが管理しているアクセスパターン監視ユニットのＩＤである。抑止フラグは、監視ユニットＩＤが示す要求元からの要求を抑止しているか否かを示すフラグである。抑止カウンタ及び再開カウンタは、状態遷移に使用するＨＷＰＦの抑止及び再開を判断するためのカウンタである。
【００５７】
次に、本実施例において、図４及び図５に示す構成でＬ２ＨＷＰＦを抑止する処理の一例をより詳細に説明する。なお、図４及び図５においては、Ｌ１キャッシュメモリ１５からＬ２キャッシュメモリ２４へと、Ｌ２キャッシュメモリ２４から主記憶装置３へのデータ書き込みに関連した信号等の図示は省略する。データを書き込む際の制御は、キャッシュメモリをライトバック方式又はライトスルー方式のどちらを採用するかで挙動が異なる。しかし、本実施例ではどちらの方式を採用していても実施可能な一般的なプロセッサと同様の制御を行うため、データを書き込む際の制御の説明は省略する。
【００５８】
Ｌ２ＨＷＰＦを抑止する処理は、例えば以下の手順Ｐ１〜Ｐ４に従って実行する。
【００５９】
Ｐ１：図４に示すプロセッサコア１の演算制御部１１からのデータ要求Ｓ００１に応答して、ロードストアユニット１２がＬＤ／ＳＴ要求信号Ｓ００２とＬＤ／ＳＴアドレスＳ００３を出力し、キャッシュアクセスパイプライン１４に投入する。ＬＤ／ＳＴ要求信号Ｓ００２には、データ要求Ｓ００１が発生したことがセットされ、ＬＤ／ＳＴアドレスＳ００３には、ロード／ストア先のアドレスがセットされる。書き込みを伴う（即ち、書き込みが必要な）ストア命令の場合には、キャッシュアクセスパイプライン１４からＬ１書き込みデータＳ００４のセットも行う。
【００６０】
Ｐ２：キャッシュアクセスパイプライン１４が、ロード／ストア（ＬＤ／ＳＴ）命令を処理した際の情報をＨＷＰＦ生成回路１３へメモリアクセス情報Ｓ００８で通知する。このメモリアクセス情報Ｓ００８の通知に応答して、図６に示すＨＷＰＦ生成回路１３が、Ｍ個備えるアクセスパターン監視ユニット１３２０−１〜１３２０−Ｍの中から、プリフェッチを生成可能な状態にあるアクセスパターン監視ユニットを選択する。自プロセッサコア１に入力されたＨＷＰＦ抑止信号Ｓ２０７が１にセットされた場合、選択部１３２がＤＥＭＵＸ回路１３１が同時に通知された抑止及び再開アクセスパターン監視ユニットＩＤ_Ｓ２０６の指すアクセスパターン監視ユニットを選択する。また、選択部１３２が、選択したアクセスパターン監視ユニットが保持するプリフェッチ情報をプリフェッチ情報Ｓ１０１にセットする。プリフェッチを生成可能な状態にあるアクセスパターン監視ユニットが複数存在する場合は、例えば優先順位等の予め決められたルールに従って、プリフェッチを生成可能な状態にある１つのアクセスパターン監視ユニットを選択すれば良い。ユニット選択回路１３２１が、プリフェッチを生成可能な状態にある１つのアクセスパターン監視ユニットを選択する。また、アクセスパターン監視ユニットの選択と同時に、メモリアクセス情報Ｓ００８に従って、各アクセスパターン監視ユニット１３２０−１〜１３２０−Ｍに対してプリフェッチ情報の新規登録又は更新を行うこともできる。ＨＷＰＦ情報生成回路１３３が、選択されたアクセスパターン監視ユニットのプリフェッチ情報Ｓ１０１から、ＨＷＰＦ要求Ｓ１０２、ＨＷＰＦアドレスＳ１０３、監視ユニットＩＤ_Ｓ１０４、カウンタリセット信号Ｓ１０５、及びＨＷＰＦＬＶ_Ｓ１０６を生成する。ＨＷＰＦ要求Ｓ１０２は、プリフェッチ要求が有効であることを示す。ＨＷＰＦアドレスＳ１０３は、プリフェッチ先を示す。監視ユニットＩＤ_Ｓ１０４は、アクセスパターン監視ユニットの監視ユニットＩＤを示す。カウンタリセット信号Ｓ１０５は、既にプリフェッチを発行した回数が０回の場合にＨＷＰＦ要求を新規開始することを示す。ＨＷＰＦＬｖ．Ｓ１０６は、プリフェッチ先がｎ階層のキャッシュであることを示すＨＷＰＦ階層信号である。既にＨＷＰＦ抑止及び再開回路２６によって抑止通知のあった階層へＨＷＰＦを生成しようとする場合、当該ＨＷＰＦは発行されない。
【００６１】
信号Ｓ１０２，Ｓ１０３，Ｓ１０４，Ｓ１０５は、ＨＷＰＦ要求が有効な場合にキャッシュアクセスパイプライン１４に投入する。このキャッシュアクセスパイプライン１４は、本実施例ではロードストア命令と共有されているため、同時に発生した場合には待ち合わせを行い逐次的に処理を行う。この仕組はパイプライン自体を複数個備える等の方法もあり、待ち合わせを行い逐次的に処理を行う場合におけるハードウェア構成及びその制御方法は、本実施例においては特に限定されない。
【００６２】
キャッシュアクセスパイプライン１４では、逐次的にロードストア又はプリフェッチ要求を処理する。パイプライン処理において、Ｌ２ＨＷＰＦの場合は、Ｌ１キャッシュヒットによらず必ずＬ２キャッシュメモリ２４へ要求する。それ以外の要求（ロード、ストア、Ｌ１ＨＷＰＦ）では、当該要求から与えられたアドレス（Ｓ００３又はＳ１０３から選択）をＳ００５にセットし、Ｌ１キャッシュメモリ１５にデータが保持されているかを検索し、Ｌ１キャッシュヒット信号Ｓ００６をセットする。
【００６３】
Ｌ１キャッシュヒットの場合、ロード命令ではＳ００７にＬ１キャッシュメモリ１５から読み出したデータをセットし、ストア命令ではＳ００４のデータをＬ１キャッシュメモリ１５に書き込み、Ｌ１ＨＷＰＦでは、階層レベルＬ２へのプリフェッチ要求を中止する。
【００６４】
Ｌ１キャッシュミス、又は要求がＬ２ＨＷＰＦであった場合、Ｌ２キャッシュメモリ２４へ要求を行う。ロード命令、ストア命令、プリフェッチのいずれであるかを要求種別信号Ｓ０１１−Ｎにセットし、アドレス信号（Ｓ００３又はＳ１０３）をＳ０１２−Ｎにセットする。要求がプリフェッチである場合、ＨＷＰＦ生成回路１３が生成した信号Ｓ１０４，Ｓ１０５，Ｓ１０６をＳ０１３−Ｎ，Ｓ０１４−Ｎ，Ｓ０１５−Ｎまでキャッシュアクセスパイプライン１４経由でセットする。ここで、Ｌ２キャッシュメモリ２４を共有している２個のプロセッサコア１に対して、コアＩＤ（０又は１）を付与しておき、コアＩＤ＝０からの信号はＳ０１１−０，Ｓ０１２−０，...、コアＩＤ＝１からの信号はＳ０１１−１，Ｓ０１２−１，...とする。この例では信号が２系列あるが、２次キャッシュ制御回路２側では、どちらのプロセッサコア１からの要求であるかを判別可能である。
【００６５】
Ｌ２キャッシュメモリ２４は、コアＩＤ＝０,コアＩＤ＝１の複数プロセッサコア１から同時に要求を受け付けるため、調停機能を設ける。本実施例では、ＦＩＦＯ（First-In-First-Out）回路を用いて要求を一度蓄積し、要求を１つずつ取り出して処理する調停方式を採用する。
【００６６】
Ｐ３：図５に示す２次キャッシュ制御回路２において、ＦＩＦＯ回路２３に蓄積された要求のうち、１つの要求を取り出して各信号に選択された情報をセットする。どちらのプロセッサコア１による要求であるかは、同時にＦＩＦＯ回路２３に格納しておき、ＦＩＦＯ回路２３から読み出されたときにコアＩＤとして要求コアＩＤ_Ｓ３０６にセットする。プリフェッチに関連した信号としては、コアＩＤ＝０に対応するＳ０１３−０，Ｓ０１４−０，Ｓ０１５−０ 及びコアＩＤ＝１に対応するＳ０１３−１，Ｓ０１４−１，Ｓ０１５−１がＦＩＦＯ回路２３に入力される。
【００６７】
ＦＩＦＯ回路２３から要求を取り出すと、そのアクセスアドレス信号Ｓ３０１を使ってＬ２キャッシュメモリ２４を検索し、Ｌ２キャッシュヒット信号Ｓ３０７を生成する。このＬ２キャッシュヒット信号Ｓ３０７は、ＨＷＰＦ抑止及び再開回路２６にも通知される。Ｌ２キャッシュヒット、かつ、Ｌ１キャッシュメモリ１５にデータを返す必要があるＬＤ／ＳＴ要求及びＬ１ＨＷＰＦの場合、Ｌ２キャッシュメモリ２４からデータをＳ３１０に読み出す。その後、応答コア選択回路２５が、要求コアＩＤ_Ｓ３０６によってどちらのプロセッサコア１にデータを返すかを選択し、コアＩＤ＝０の場合Ｓ３１０−０に、コアＩＤ＝１の場合Ｓ３１０−１にＳ３１０の値をセットする。
【００６８】
Ｐ４：Ｌ２キャッシュミスの場合、主記憶装置３への主記憶データ要求Ｓ３０８を有効にセットし、アクセスアドレスＳ３０１と共に主記憶装置３にデータを要求する。
【００６９】
この処理と並行して、ＦＩＦＯ回路２３からプリフェッチが選択された場合、図５中、ＨＷＰＦ要求信号Ｓ３０２、要求コアＩＤ_Ｓ３０６と共に、ＦＩＦＯ回路２３から出力された信号Ｓ３０３，Ｓ３０４，Ｓ３０５をＨＷＰＦ抑止及び再開回路２６に入力する。信号Ｓ３０３，Ｓ３０４，Ｓ３０５は、プリフェッチに関連した信号である。
【００７０】
ＨＷＰＦ抑止及び再開回路２６は、図７において例えば以下の手順Ｐ２１〜Ｐ２５に従ってＬ２ＨＷＰＦの抑止及び再開を制御する。図７中、閾値設定回路２６１からの抑止閾値Ｓ２０４は、自己階層レベルへのプリフェッチを抑止するための閾値であり、自己階層レベルのキャッシュヒットした回数がこの値を超えるとＨＷＰＦを抑止する。図７中、閾値設定回路２６１からのプリフェッチ再開閾値Ｓ２０５は、自己階層レベルへのＨＷＰＦを再開するための閾値であり、上位階層レベルへのＨＷＰＦが自己階層レベルのキャッシュにミスした回数がこの値を超えると自己階層レベルへのＨＷＰＦを再開する。
【００７１】
Ｐ２１：図７において、プリフェッチ制御テーブル２６７内の各テーブルの各エントリを参照するための情報を生成する回路が、監視ユニットＩＤ_Ｓ３０３及び要求コアＩＤ_Ｓ３０６の組からテーブルエントリ選択信号Ｓ２０１を生成する。テーブルエントリ選択信号Ｓ２０１は、例えば監視ユニットＩＤ_Ｓ３０３を下位インデックス（加算回路２６３でそのまま加算）、要求コアＩＤ_Ｓ３０６を上位インデックス（左シフト回路２６４で監視ユニットＩＤのビット幅分左シフトして加算）として生成できる。テーブル選択回路２６５が、テーブルエントリ選択信号Ｓ２０１を用いて、対応するプリフェッチ制御テーブル２６７のエントリを選択する。選択された抑止フラグ、抑止カウンタ、及び再開カウンタの値は、抑止フラグ、抑止カウンタ、及び再開カウンタの各値Ｓ２０２にセットする。
【００７２】
Ｐ２２：図７において、判定回路２６２は、各値Ｓ２０２に加えて、Ｓ３０２，Ｓ３０３，Ｓ３０４，Ｓ３０５，Ｓ３０６，Ｓ２０４，Ｓ２０５から、プリフェッチの抑止及び再開判定と抑止カウンタ及び再開カウンタの更新値の生成を行う。
【００７３】
図１０は、図７に示す判定回路の処理の一例を説明するフローチャートである。また、図１１は、抑止及び再開カウンタのインクリメント条件の一例を説明する図である。抑止カウンタのインクリメント条件は、その階層のキャッシュメモリへのＨＷＰＦ要求がキャッシュヒットしたこと、即ち、冗長なプリフェッチであったことを意味している。一方、再開カウンタのインクリメント条件は、Ｌ１ＨＷＰＦで要求しているアドレスがＬ２キャッシュメモリ２４でもミスしていることを意味し、Ｌ２ＨＷＰＦを再開すれば性能向上できることを意味している。図１１に示す例では、抑止カウンタインクリメント条件は、抑止フラグが０、かつ、プリフェッチ要求の階層が自己階層と等しい、かつ、自己階層のキャッシュメモリにキャッシュヒットすることである。また、再開カウンタインクリメント条件は、抑止フラグが１、かつ、プリフェッチ要求の階層が自己階層より上位階層、かつ、自己階層のキャッシュメモリにキャッシュミスすることである。
【００７４】
図１０において、ステップ２６２１では、判定回路２６２がプリフェッチ制御テーブル２６７から要求コアＩＤ及び監視ユニットＩＤに対応する抑止フラグの状態と、抑止カウンタ及び再開カウンタを取得する。ステップ２６２２では、判定回路２６２がカウンタリセット信号Ｓ３０４が入力されたか否かを判定する。ステップ２６２２の判定結果がＮｏであると、ステップ２６２３では、判定回路２６２が図１１に示す抑止カウンタインクリメント条件が成立するか否かを判定し、判定結果がＹｅｓであると処理はステップ２６２４へ進む。ステップ２６２４では、判定回路２６２が抑止カウンタを１だけインクリメントする。ステップ２６２５では、判定回路２６２が抑止カウンタの値が抑止の閾値を超えたか否かを判定し、判定結果がＹｅｓであると処理はステップ２６２６へ進み、判定結果がＮｏであると処理は終了する。ステップ２６２６では、判定回路２６２がプリフェッチを抑止し、再開カウンタの値を０に設定し、処理は終了する。
【００７５】
ステップ２６２２の判定結果がＹｅｓであると、処理はステップ２６２７へ進む。ステップ２６２７では、判定回路２６２が抑止カウンタ及び再開カウンタの値を夫々０にリセットすると共に、抑止フラグを０にリセットし、処理は終了する。
【００７６】
ステップ２６２３の判定結果がＮｏであると、処理はステップＳ２６２８へ進む。ステップ２６２８では、判定回路２６２が図１１に示す再開カウンタインクリメント条件が成立するか否かを判定し、判定結果がＹｅｓであると処理はステップ２６２９へ進み、判定結果がＮｏであると処理は終了する。ステップ２６２９では、判定回路２６２が再開カウンタを１だけインクリメントする。ステップ２６３０では、判定回路２６２が再開カウンタの値が再開の閾値を超えたか否かを判定し、判定結果がＹｅｓであると処理はステップ２６３１へ進み、判定結果がＮｏであると処理は終了する。ステップ２６３１では、判定回路２６２がプリフェッチを再開し、抑止カウンタの値を０に設定すると共に、抑止フラグを０にリセットし、処理は終了する。
【００７７】
Ｐ２３：図７において、ＤＥＭＵＸ回路２６６が、テーブルエントリ選択信号Ｓ２０１を用いて更新対象のエントリを選択し、抑止フラグ、抑止カウンタ及び再開カウンタの各更新値Ｓ２０３をプリフェッチ制御テーブル２６７に格納する。
【００７８】
Ｐ２４：抑止フラグの値が０から１になった場合、判定回路２６２が、ＨＷＰＦ抑止信号Ｓ２０７を１にセットし、抑止及び再開監視ユニットＩＤ_Ｓ２０６に監視ユニットＩＤ_Ｓ３０３と同値をセットする。また、判定回路２６２が、抑止及び再開コアＩＤ_Ｓ２１０に要求コアＩＤ_Ｓ３０６と同値をセットする。抑止ＨＷＰＦＬｖ．Ｓ２０９は、抑止する対象のＨＷＰＦの階層を指示するための信号であり、本実施例では固定的に２となる。判定回路２６２は、抑止及び再開コアＩＤ_Ｓ２１０のコアＩＤに従って、抑止及び再開監視ユニットＩＤ_Ｓ２０６とＨＷＰＦ抑止信号Ｓ２０７の値をセットする。具体的には、判定回路２６２は、Ｓ２０６，Ｓ２０７の値を、コアＩＤ＝０の場合はＳ２０６−０とＳ２０７−０にセットし、コアＩＤ＝１の場合はＳ２０６−１とＳ２０７−１にセットする。
【００７９】
Ｐ２５：抑止フラグが１から０になった場合、判定回路２６２が、ＨＷＰＦ再開信号Ｓ２０８を１にセットし、抑止及び再開監視ユニットＩＤ_Ｓ２０６に監視ユニットＩＤ_Ｓ３０３と同値をセットする。また、判定回路２６２が、抑止及び再開コアＩＤ_Ｓ２１０に要求コアＩＤ_Ｓ３０６と同値をセットする。判定回路２６２は、抑止及び再開コアＩＤ_Ｓ２１０に従って、抑止及び再開監視ユニットＩＤ_Ｓ２０６及びＨＷＰＦ再開信号Ｓ２０８の値をセットする。具体的には、判定回路２６２は、Ｓ２０６，Ｓ２０８の値を、コアＩＤ＝０の場合はＳ２０６−０，Ｓ２０８−０にセットし、コアＩＤ＝１の場合はＳ２０６−１，Ｓ２０８−１にセットする。
【００８０】
ＨＷＰＦ生成回路１３は、自プロセッサコア１に入力されたＨＷＰＦ抑止信号Ｓ２０７−Ｎが１にセットされた場合、同時に通知された抑止及び再開アクセスパターン監視ユニットＩＤ_Ｓ２０６−Ｎの指すアクセスパターン監視ユニット１３２０−ｉをＤＥＭＵＸ回路１３１で選択する。また、ＨＷＰＦ生成回路１３は、抑止ＨＷＰＦＬｖ．Ｓ２０９で指示された階層へのＨＷＰＦ抑止フラグ、この例ではＬ２ＨＷＰＦ抑止フラグを、抑止フラグ更新信号Ｓ１０７によりセットする。ＨＷＰＦ生成回路１３は、自プロセッサコア１に入力されたＨＷＰＦ再開信号Ｓ２０８−Ｎが１にセットされた場合、同時に通知された抑止及び再開アクセスパターン監視ユニットＩＤ_Ｓ２０６−Ｎの指すアクセスパターン監視ユニット１３２０−ｉをＤＥＭＵＸ回路１３１で選択する。更に、ＨＷＰＦ生成回路１３は、抑止フラグ更新信号Ｓ１０７によりＬ２ＨＷＰＦ抑止フラグをリセットする。これにより、ＨＷＰＦ抑止及び再開回路２６は、ＨＷＰＦ生成回路１３によるＬ２ＨＷＰＦの抑止及び再開を制御することができる。
【００８１】
本実施例では、アクセスパターン毎に、冗長なプリフェッチを抑止して、プリフェッチを効率的に制御することができる。具体的には、プリフェッチ要求に、当該プリフェッチ要求を生成した要求元を判別する識別子を付加し、識別子毎にプリフェッチ要求がキャッシュメモリにヒットするキャッシュヒットを観測する。そして、当該キャッシュヒットが一定回数観測されたことを契機として、要求元のＩＤからのプリフェッチのみを抑止する。
【００８２】
また、本実施例では、アクセスパターン毎に抑止されているプリフェッチのうち、有効なプリフェッチのみを再開して、効率的なキャッシュ制御を実現することもできる。具体的には、自己階層レベルへのプリフェッチを既に抑止している識別子について、例えばプリフェッチがキャッシュメモリにミスするキャッシュミスが一定回数観測されたことを契機としてプリフェッチを再開する。
【００８３】
本実施例では、ＨＷＰＦの対象をＬ２キャッシュメモリ２４としたが、ＨＷＰＦの対象とするキャッシュメモリの階層レベルは特に限定されない。
【００８４】
なお、本実施例は、ｎ＝２以上のｎ階層のキャッシュメモリにＨＷＰＦ抑止及び再開回路２６を備え、ｎ階層へのプリフェッチを抑止する場合に一般化できる。ただし、最上位階層であるＬ１キャッシュメモリ１５には、Ｌ１キャッシュメモリ１５よりも上位階層へのプリフェッチ要求が存在しないため、本実施例をそのまま適用することはできない。しかし、抑止されているアクセスパターン監視ユニットの監視ユニットＩＤに対応するＬＤ／ＳＴ要求等を０次階層へのＬ０ＨＷＰＦとして読み替え、ＨＷＰＦの再開の契機として利用することで、本実施例の一般化が可能である。
【００８５】
例えば、ｎ階層のうち、第１次（Ｌ１）キャッシュメモリは、演算制御部と第２次（Ｌ２）キャッシュメモリとの間でデータを授受する。第ｎ次（Ｌｎ）キャッシュメモリは、第（ｎ−１）次（Ｌ（ｎ−１））キャッシュメモリと主記憶装置との間でデータを授受する。第２次（Ｌ２）キャッシュメモリから第（ｎ−１）次（Ｌ（ｎ−１））キャッシュメモリまでのキャッシュメモリは、夫々上位階層のキャッシュメモリと下位階層のキャッシュメモリとの間でデータを授受する。
[第２実施例]
第２実施例では、２個のプロセッサコアが１個のＬ２キャッシュメモリを共有し、更にその２個のＬ２メモリが１個のＬ３（Level-3:三次）キャッシュメモリを共有する。つまり、プロセッサは、３階層の階層構造を有するキャッシュメモリ、即ち、Ｌ１キャッシュメモリ１５、Ｌ２キャッシュメモリ２４、及びＬ３キャッシュメモリ３３を備える。Ｌ１キャッシュメモリ１５は、２個のプロセッサコア１に夫々１個ずつ備えられ、２個のプロセッサコア１が１個のＬ２キャッシュメモリ２４を共有する。更に、２個のＬ２キャッシュメモリがＬ３キャッシュメモリを共有する。以下に、３階層のＨＷＰＦの抑止及び再開を制御する例を説明する。なお、プロセッサが４階層以上の階層構造を有するキャッシュメモリを備える場合の構成及び動作は、本実施例の構成及び動作を一般化することから容易に理解できるので、それらの図示及び説明は省略する。
【００８６】
図１２は、第２実施例におけるＨＷＰＦ生成回路の一例を示すブロック図であり、図１３は、図１２に示すアクセスパターン監視ユニットの構成例を示す図である。図１１及び図１２中、図６及び図８と同一部分には同一符号を付し、その説明は省略する。
【００８７】
図１２に示すＨＷＰＦ生成回路１３Ａは、図６に示すＨＷＰＦ生成回路１３の構成に基づいており、Ｌ１ＨＷＰＦを再開するための抑止中ユニット信号を追加出力する。ＨＷＰＦ生成回路１３Ａは、ＤＭＵＸ回路１３１と、選択部１３２Ａと、ＦＷＰＦ情報生成回路１３３Ａとを有する。選択部１３２Ａは、Ｍ個のアクセスパターン監視ユニット１３２０−１Ａ〜１３２０−ＭＡと、ユニット選択回路１３２１Ａとを有する。アクセスパターン監視ユニット１３２０−ｉＡ（ｉ＝１〜Ｍ）は、図１３に示す構成を有する。図１３に示すアクセスパターン監視ユニット１３２０−ｉＡは、図８の構成に加え、Ｌ３ＨＷＰＦ距離、Ｌ１ＨＷＰＦ抑止フラグ、及びＬ３ＨＷＰＦ抑止フラグを含む。図１３の構成は、各階層へＨＷＰＦ要求をする際に加算するプリフェッチ距離が、Ｌ３ＨＷＰＦ距離を更に含む。また、図１３の構成は、本実施例で用いるＨＷＰＦ抑止及び再開回路２６Ａ，２６Ａ−１，２６ＢからのＬ１ＨＷＰＦ抑止フラグ、Ｌ２ＨＷＰＦ抑止フラグ、Ｌ３ＨＷＰＦ抑止フラグを含む。Ｍ個のアクセスパターン監視ユニット１３２０−１Ａ〜１３２０−ＭＡは、夫々異なるプリフェッチ情報を格納し、独立してプリフェッチ情報を生成する。図１２に示すＨＷＰＦ生成回路１３Ａは、図１３に示す構成のアクセスパターン監視ユニット１３２０−１Ａ〜１３２０−ＭＡを用いてＨＷＰＦ要求Ｓ１０２及びＨＷＰＦＬｖ．Ｓ１０６を出力することで、Ｌ１ＨＷＰＦ，Ｌ２ＨＷＰＦ，Ｌ３ＨＷＰＦを要求する。
【００８８】
各階層へのＨＷＰＦを抑止を制御するＨＷＰＦ抑止及び再開回路２６Ａ，２６Ａ−１，２６Ｂの構成は、図７に示すＨＷＰＦ抑止及び再開回路２６の構成と同じで良く、図７に示すプリフェッチ制御テーブル２６７の構成も図８と同じで良いため、これらの説明は省略する。本実施例では、アクセスパターン監視ユニット１３２０−ｉＡがＬ３ＨＷＰＦ距離、Ｌ１ＨＷＰＦ抑止フラグ、及びＬ３ＨＷＰＦ抑止フラグを更に含む。また、以下に説明するような構成を用いることで、任意のｎ次階層へのＨＷＰＦを抑止することが可能である。
【００８９】
図１４は、第２実施例におけるプロセッサコアの一例を示すブロック図であり、図１５は、第２実施例における２次キャッシュ制御回路の一例を示すブロック図である。図１６は、第２実施例における３次キャッシュ制御回路及び主記憶装置の一例を示すブロック図である。図１４、図１５、及び図１６中、図４及び図５と同一部分には同一符号を付し、その説明は省略する。
【００９０】
図１４に示すプロセッサコア１Ａは、図４に示すプロセッサコア１の構成に基づいており、図１２に示すＨＷＰＦ生成回路１３Ａ、キャッシュアクセスパイプライン１４Ａ、ＦＩＦＯ回路１８、（Ｌ１）ＨＷＰＦ抑止及び再開回路２６Ａ等を有する。ＨＷＰＦ生成回路１３Ａは、ロード／ストア（ＬＤ／ＳＴ）命令用と共有であるキャッシュアクセスパイプライン１４Ａが出力するメモリアクセス情報を監視して、アクセスパターンから階層レベルＬｖ＝１，２のプリフェッチ要求を生成する。ＨＷＰＦ抑止及び再開回路２６Ａは、図７に示すＨＷＰＦ抑止及び再開回路２６の構成に基づいている。
【００９１】
図１５に示す２次キャッシュ制御回路２Ａは、図５に示す２次キャッシュ制御回路２の構成に基づいており、Ｌ１ＨＷＰＦ抑止のための図７に示すＨＷＰＦ抑止及び再開回路２６の構成基づく（Ｌ２）ＨＷＰＦ抑止及び再開回路２６Ａ−１を有する。図１５に示す２次キャッシュ制御回路２Ａは、応答コア選択回路２１，２２Ａと、ＦＩＦＯ回路２３Ａと、Ｌ２キャッシュメモリ２４と、Ｌ３要求生成回路２５Ａと、ＨＷＰＦ抑止及び再開回路２６Ａ−１と、ＦＩＦＯ回路２９とを有する。
【００９２】
図１６は、３次キャッシュ制御回路２Ｂの構成を、主記憶装置３と共に示す。図１６に示す３次キャッシュ制御回路２Ｂは、図５に示す２次キャッシュ制御回路２の構成に基づいており、Ｌ１ＨＷＰＦ抑止のための図７に示すＨＷＰＦ抑止及び再開回路２６の構成基づく（Ｌ３）ＨＷＰＦ抑止及び再開回路２６Ｂを有する。図１６に示す３次キャッシュ制御回路２Ｂは、応答コア選択回路２１Ｂ，２２Ｂと、ＦＩＦＯ回路２３Ｂと、Ｌ３キャッシュメモリ３３と、主記憶要求生成回路２５Ｂと、ＨＷＰＦ抑止及び再開回路２６Ｂとを有する。
【００９３】
先ず、Ｌ１ＨＷＰＦの抑止及び再開処理を説明する。図１４に示すＨＷＰＦ抑止及び再開回路２６Ａは、１個のプロセッサコア１Ａに対して１個設けられる。このため、プリフェッチ制御テーブル２６７は、アクセスパターン監視ユニット１３２０−１Ａ〜１３２０−ＭＡの個数Ｍに等しいエントリ数を保持する。Ｌ１ＨＷＰＦの抑止は、上記第１実施例に示したＬ２ＨＷＰＦに関する処理と同様に行う。具体的には、Ｌ１ＨＷＰＦが自己階層レベルのＬ１キャッシュメモリ１５にヒットするキャッシュヒットが一定回数観測されたことを契機として、図１２に示すＨＷＰＦ生成回路１３ＡにＬ１ＨＷＰＦ抑止通知を行う。
【００９４】
上記第１実施例では、Ｌ２ＨＷＰＦの再開カウンタの制御に、自己階層レベルよりも上位階層レベルのプリフェッチ要求が自己階層レベルへ到着したことを用いる。しかし、Ｌ１ＨＷＰＦは、自己階層レベルが最上位の階層レベルであるため、上記第１実施例をそのまま適用することはできない。そこで、本実施例では、ロード／ストア（ＬＤ／ＳＴ）命令のＬ１キャッシュミスを用いる。
【００９５】
以下の説明では、必要なことが確定はしていないが事前予測して行う要求を、プリフェッチ要求と呼ぶのに対し、ロード／ストア（ＬＤ／ＳＴ）命令によるキャッシュメモリへの読み書き要求は、実際に必要なことが確定しているためデマンド要求と呼ぶものとする。
【００９６】
この例では、Ｌ１ＨＷＰＦの再開カウンタのインクリメント条件を、デマンド要求のキャッシュミスに起因させるように変更する。また、抑止及び再開の制御に用いる監視ユニットＩＤは、本来ＨＷＰＦではないデマンド要求には付与されていないが、ＨＷＰＦ生成回路１３Ａはデマンド要求の実行中に入力されたメモリアクセス情報Ｓ００８を監視する。監視した情報が、既に抑止中であるアクセスパターン監視ユニットに対応している場合には、対応する監視ユニットＩＤをＨＷＰＦ抑止中監視ユニットＩＤ_Ｓ１０８としてプロセッサコア１ＡのＨＷＰＦ抑止及び再開回路２６Ａに通知する。ＨＷＰＦ抑止及び再開回路２６Ａは、要求種別がＨＷＰＦの場合は監視ユニットＩＤにＨＷＰＦ生成に基づいて生成されたＨＷＰＦ生成監視ユニットＩＤ_Ｓ１０４を用いる。ＨＷＰＦ抑止及び再開回路２６Ａは、要求種別がデマンドの場合はＨＷＰＦ生成回路１３Ａから通知された、現在のデマンド要求に対応するＨＷＰＦ抑止中監視ユニットＩＤ_Ｓ１０８を用いる。なお、デマンド要求に対応する抑止中の監視ユニットＩＤが存在しない場合は、該当するアクセスパターン監視ユニットがなかったことを通知して誤動作を防ぐ。
【００９７】
Ｌ１ＨＷＰＦの抑止及び再開カウンタの制御の条件は、例えば図１７に示す如くである。図１７は、抑止及び再開カウンタのインクリメント条件の一例を説明する図である。図１７に示すように、抑止カウンタインクリメント条件は、抑止フラグが０、かつ、プリフェッチ要求の階層が自己階層と等しい、かつ、自己階層のキャッシュメモリにキャッシュヒットすることである。一方、再開カウンタインクリメント条件は、抑止フラグが１、かつ、要求種別がデマンド、かつ、自己階層のキャッシュ目持ちにキャッシュミスすることである。
【００９８】
ＨＷＰＦ生成回路１３Ａへの通知に、ＨＷＰＦ抑止及び再開回路２６Ａによる抑止及び再開信号と、Ｌ２キャッシュメモリ２４から通知された抑止及び再開信号との間で順序調停を行う必要がある。このため、この例では２次キャッシュ制御回路２ＡにＦＩＦＯ回路２９を設ける。Ｌ２キャッシュメモリ２４から通知された抑止及び再開信号は、上記第１実施例とは異なり、Ｌ２キャッシュメモリ２４に関する抑止及び再開信号又はＬ３キャッシュメモリ３３に関する抑止及び再開信号のいずれかである。Ｌ２キャッシュメモリ２４に関する抑止及び再開信号又はＬ３キャッシュメモリ３３に関する抑止及び再開信号は、Ｌ２キャッシュメモリ２４中でＦＩＦＯ回路２９により順序調停され出力されたいずれかの信号である。
【００９９】
２次キャッシュ制御回路２によるＬ２ＨＷＰＦの抑止及び再開処理は、上記第１実施例の場合と同様に実行できるため、上記第１実施例からの変更点のみを説明する。Ｌ２キャッシュメモリ２４に関連する処理の上記第１実施例からの変更点は、Ｌ２キャッシュメモリ２４にミスした場合に、Ｌ３要求生成回路２５Ａが主記憶装置３ではなくＬ３キャッシュメモリ３３へのＬ３要求信号Ｓ３０８を生成する点である。変更点は更に、ＦＩＦＯ回路２３Ａが、ＨＷＰＦである場合にＨＷＰＦ生成回路１３Ａからの信号Ｓ３０２−Ｌ２〜Ｓ３０６−Ｌ２を付加する点である。２次キャッシュ制御回路２Ａは、これらの信号を用いてＬ３キャッシュメモリ３３へのＬ３要求信号Ｓ３０８を、ＦＩＦＯ回路２３ＡからのＬ３アクセスアドレスＳ３０１と共に生成する。
【０１００】
３次キャッシュ制御回路２ＡによるＬ３ＨＷＰＦの抑止及び再開処理は、Ｌ２キャッシュメモリ２４から通知されたＨＷＰＦ情報を用いて、第１実施例のＬ２ＨＷＰＦの抑止及び再開処理と同様に実行できる。Ｌ３ＨＷＰＦの抑止処理では、Ｌ３ＨＷＰＦのＬ３キャッシュヒットによる抑止カウンタと抑止フラグの管理、及び抑止フラグセット時のＬ２キャッシュメモリ２４を経由した発行元のプロセッサコア１Ａ内のＨＷＰＦ生成回路１３ＡへのＬ３ＨＷＰＦ抑止通知を行う。Ｌ３ＨＷＰＦの再開処理では、Ｌ２ＨＷＰＦのＬ３キャッシュミスによる再開カウンタと抑止フラグの管理、及び抑止フラグリセット時のＬ２キャッシュメモリ２４を経由した発行元プロセッサコア１Ａ内のＨＷＰＦ生成回路１３ＡへのＬ３ＨＷＰＦ再開通知を行う。
【０１０１】
上記の如く、本実施例では、Ｌ１ＨＷＰＦ,Ｌ２ＨＷＰＦ,Ｌ３ＨＷＰＦの夫々について、上記第１実施例と同様の処理を独立に適用することが可能である。
【０１０２】
上記の各実施例によれば、必要なプリフェッチ要求は維持しつつ、冗長で不要なプリフェッチのみを抑止することで、プロセッサの性能を向上できる。また、抑止したプリフェッチの発行は、再度有効になったことを検出して再開させることで、効率的なキャッシュ制御を実現することもできる。このような効率的なキャッシュ制御によっても、プロセッサの性能を向上できる。
【０１０３】
以上の実施例を含む実施形態に関し、更に以下の付記を開示する。
（付記１）
生成されたプリフェッチ要求に対し、前記プリフェッチ要求を生成した要求元を判別する識別子を付加するプリフェッチ手段と、
前記識別子毎に前記プリフェッチ要求が、第１のキャッシュメモリより下位階層に設けられた第２のキャッシュメモリにヒットするキャッシュヒットが一定回数観測されたことを契機として、前記第２のキャッシュメモリの階層におけるプリフェッチのうち前記要求元からのプリフェッチのみを抑止する情報を前記プリフェッチ手段に出力する制御手段と、
を備えたことを特徴とする、演算処理装置。
（付記２）
前記プリフェッチ手段は、メモリアクセス要求とアドレスから生成したメモリアクセス情報を監視して、アクセスパターンから前記プリフェッチ要求を生成し、
前記制御手段は、
前記プリフェッチ要求に対する前記第２のキャッシュメモリの検索の結果、ヒットした場合、前記プリフェッチ要求と前記識別子に対応するプリフェッチ制御テーブルの抑止カウンタの値をインクリメントし、
前記抑止カウンタの値が閾値を超えた場合、前記プリフェッチを抑止する情報を前記識別子と共にプリフェッチ手段に出力し、
前記プリフェッチ手段は、前記抑止する情報に基づいて、前記識別子のプリフェッチを抑止する、
ことを特徴とする、付記１記載の演算処理装置。
（付記３）
前記メモリアクセス要求は、ロード命令又はストア命令であることを特徴とする、付記２記載の演算処理装置。
（付記４）
前記制御手段は、前記第２のキャッシュメモリへのプリフェッチを既に抑止している識別子について、前記第１のキャッシュメモリへのプリフェッチがミスして、更に前記第２のキャッシュメモリにミスするキャッシュミスが一定回数観測されたことを契機として、前記第２のキャッシュメモリの階層における当該プリフェッチを再開する情報を前記プリフェッチ手段に出力する、
ことを特徴とする、付記１乃至３のいずれか１項記載の演算処理装置。
（付記５）
前記プリフェッチ手段は、
前記第２のキャッシュメモリへのプリフェッチを既に抑止している識別子について、プリフェッチ要求を前記第１のキャッシュメモリに出力するのと同時に当該識別子を前記制御手段に出力し、
当該プリフェッチ要求に対する前記第１のキャッシュメモリの検索の結果、ミスした場合、当該プリフェッチ要求を前記第２のキャッシュメモリ及び前記制御手段に出力し、
前記制御手段は、
当該プリフェッチ要求に対する前記第２のキャッシュメモリの検索の結果、ミスした場合、前記識別子に対応するプリフェッチ制御テーブルの再開カウンタ及びプリフェッチ抑止フラグを取得して、前記再開カウンタをインクリメントし、
前記再開カウンタの値が閾値を超えた場合、前記プリフェッチ抑止フラグをリセットし、同時に再開要求を再開する識別子と共に前記プリフェッチ手段に出力し、
前記プリフェッチ手段は、
前記再開要求を前記識別子と共に受信すると、当該識別子のプリフェッチを再開する、
ことを特徴とする、付記１乃至４のいずれか１項記載の演算処理装置。
（付記６）
前記要求元は、プログラムが使用する複数の変数のアクセスパターンのうちの１つに対応させたプリフェッチを生成することを特徴とする、付記１乃至５のいずれか１項記載の演算処理装置。
（付記７）
２個のプロセッサコアを備え、
前記２個のプロセッサコアの夫々は、１個の前記第１のキャッシュメモリ及び１個の前記プリフェッチ手段を有し、
前記２個のプロセッサコアで１個の前記第２のキャッシュメモリを共有する、
ことを特徴とする、付記１乃至６のいずれか１項記載の演算処理装置。
（付記８）
前記第２のキャッシュメモリより下位階層に設けられた第３のキャッシュメモリを備え、
２個の前記第２のキャッシュメモリで、１個の前記第３のキャッシュメモリを共有する、
ことを特徴とする、付記７記載の演算処理装置。
（付記９）
プロセッサコア及びキャッシュ制御回路を備えた演算処理装置の制御方法であって、
前記プロセッサコアのプリフェッチ生成回路が、生成されたプリフェッチ要求に対し、前記プリフェッチ要求を生成した要求元を判別する識別子を付加し、
前記キャッシュ制御回路の抑止及び再開回路が、前記識別子毎に前記プリフェッチ要求が第１のキャッシュメモリより下位階層に設けられた第２のキャッシュメモリにヒットするキャッシュヒットが一定回数観測されたことを契機として、前記プリフェッチ生成回路に前記第２のキャッシュメモリの階層におけるプリフェッチのうち前記要求元からのプリフェッチのみを抑止させる、
ことを特徴とする、演算処理装置の制御方法。
（付記１０）
前記プリフェッチ生成回路が、メモリアクセス要求とアドレスから生成したメモリアクセス情報を監視して、アクセスパターンから前記プリフェッチ要求を生成し、
前記抑止及び再開回路が、
前記プリフェッチ要求に対する前記第２のキャッシュメモリの検索の結果、ヒットした場合、前記プリフェッチ要求と前記識別子に対応するプリフェッチ制御テーブルの抑止カウンタの値をインクリメントし、
前記抑止カウンタの値が閾値を超えた場合、前記プリフェッチを抑止する情報を前記識別子と共にプリフェッチ生成回路に出力し、
前記プリフェッチ生成回路が、前記抑止する情報に基づいて、前記識別子のプリフェッチを抑止する、
ことを特徴とする、付記９記載の演算処理装置の制御方法。
（付記１１）
前記メモリアクセス要求は、ロード命令又はストア命令であることを特徴とする、付記１０記載の演算処理装置の制御方法。
（付記１２）
前記抑止及び再開回路が、前記第２のキャッシュメモリへのプリフェッチを既に抑止している識別子について、前記第１のキャッシュメモリへのプリフェッチがミスして、更に前記第２のキャッシュメモリにミスするキャッシュミスが一定回数観測されたことを契機として、前記プリフェッチ生成回路に前記第２のキャッシュメモリの階層における当該プリフェッチを再開させる、
ことを特徴とする、付記９乃至１１のいずれか１項記載の演算処理装置の制御方法。
（付記１３）
前記プリフェッチ生成回路が、
前記第２のキャッシュメモリへのプリフェッチを既に抑止している識別子について、プリフェッチ要求を前記第１のキャッシュメモリに出力するのと同時に当該識別子を前記抑止及び再開回路に出力し、
当該プリフェッチ要求に対する前記第１のキャッシュメモリの検索の結果、ミスした場合、当該プリフェッチ要求を前記第２のキャッシュメモリ及び前記抑止及び再開回路に出力し、
前記抑止及び再開回路が、
当該プリフェッチ要求に対する前記第２のキャッシュメモリの検索の結果、ミスした場合、前記識別子に対応するプリフェッチ制御テーブルの再開カウンタ及びプリフェッチ抑止フラグを取得して、前記再開カウンタをインクリメントし、
前記再開カウンタの値が閾値を超えた場合、前記プリフェッチ抑止フラグをリセットし、同時に再開要求を再開する識別子と共に前記プリフェッチ生成回路に出力し、
前記プリフェッチ生成回路が、
前記再開要求を前記識別子と共に受信すると、当該識別子のプリフェッチを再開する、
ことを特徴とする、付記９乃至１２のいずれか１項記載の演算処理装置の制御方法。
（付記１４）
前記要求元は、プログラムが使用する複数の変数のアクセスパターンのうちの１つに対応させたプリフェッチを生成することを特徴とする、付記９乃至１３のいずれか１項記載の演算処理装置の制御方法。
（付記１５）
前記演算処理装置が備える２階層のキャッシュメモリのうち、前記第１のキャッシュメモリを２個のプロセッサコアの夫々に１個ずつ含め、
前記２個のプロセッサコアで１個の前記第２のキャッシュメモリを共有させる、
ことを特徴とする、付記９乃至１４のいずれか１項記載の演算処理装置の制御方法。
（付記１６）
２個の前記第２のキャッシュメモリで、前記第２のキャッシュメモリより下位階層に設けられた１個の第３のキャッシュメモリを共有させる、
ことを特徴とする、付記１５記載の演算処理装置の制御方法。
【０１０４】
以上、開示の演算処理装置及び演算処理装置の制御方法を実施例により説明したが、本発明は上記実施例に限定されるものではなく、本発明の範囲内で種々の変形及び改良が可能であることは言うまでもない。
【符号の説明】
【０１０５】
１，１Ａ      プロセッサコア
２，２Ａ      ２次キャッシュ制御回路
２Ｂ    ３次キャッシュ制御回路
３      主記憶装置
１１      演算制御部
１２      ロードストアユニット
１３，１３Ａ      ＨＷＰＦ生成回路
１４，１４Ａ      キャッシュアクセスパイプライン
１５      Ｌ１キャッシュメモリ
１８，２３，２３Ａ，２３Ｂ，２９      ＦＩＦＯ回路
２１，２１Ａ，２１Ｂ，２２，２２Ａ，２２Ｂ      応答コア選択回路
２４      Ｌ２キャッシュメモリ
２５，２５Ｂ      主記憶要求生成回路
２５Ａ      Ｌ３要求生成回路
２６，２６Ａ，２６−１，２６Ｂ      ＨＷＰＦ抑止及び再開回路
３３      Ｌ３キャッシュメモリ
１２０      ロードストア部
１３１      ＤＭＵＸ回路
１３２，１３２Ａ      選択部
１３３，１３３Ａ      ＨＷＰＦ情報生成回路
２６１      閾値設定回路
２６２      判定回路
２６３      加算回路
２６４      左シフト回路
２６５      テーブル選択回路
２６６      ＤＭＵＸ回路
２６７      プリフェッチ制御テーブル
１３２１，１３２１Ａ      ユニット選択回路
１３２２−１〜１３２２−Ｍ      アクセスパターン監視ユニット
１３２２−１Ａ〜１３２２−ＭＡ      アクセスパターン監視ユニット
【図１】
2020013362.tif 000003
【図２】
2020013362.tif 000004
【図３】
2020013362.tif 000005
【図４】
2020013362.tif 000006
【図５】
2020013362.tif 000007
【図６】
2020013362.tif 000008
【図７】
2020013362.tif 000009
【図８】
2020013362.tif 000010
【図９】
2020013362.tif 000011
【図１０】
2020013362.tif 000012
【図１１】
2020013362.tif 000013
【図１２】
2020013362.tif 000014
【図１３】
2020013362.tif 000015
【図１４】
2020013362.tif 000016
【図１５】
2020013362.tif 000017
【図１６】
2020013362.tif 000018
【図１７】
2020013362.tif 000019