(57)【要約】方法は、キャッシュ（１０４）を備えるプロセスシステム（１００）において、スレッドに関する要求キャッシュアクセスを監視し、スレッドに関するサンプリングキャッシュアクセスのセットのターゲットとされるキャッシュラインに対して、第１方向に隣接するキャッシュラインを対象とするスレッドに関する要求キャッシュアクセスの数である第１ランニングカウントを維持することを含む。方法は、さらに、第１ランニングカウントが第１閾値（２２８）を超えていることを判定したことに応じて、受信したスレッドに関する要求キャッシュアクセスが当該要求キャッシュアクセスによってターゲットとされるキャッシュラインに対して第１方向に隣接するキャッシュラインに関するプリフェッチ要求（２３４）をトリガする、第１プリフェッチモード（１２８）を有効にすることを含む。【選択図】図１
2019521408.tif 000002
【特許請求の範囲】
【請求項１】
キャッシュ（１０４）を備えるプロセスシステム（１００）において、
スレッドに関する要求キャッシュアクセスを監視し、前記スレッドに関するサンプリングキャッシュアクセスのセットのターゲットとされるキャッシュラインに対して、第１方向に隣接するキャッシュラインを対象とする前記スレッドに関する要求キャッシュアクセスの数である第１ランニングカウントを維持することと、
前記第１ランニングカウントが第１閾値（２２８）を超えていることを判定したことに応じて、受信した前記スレッドに関する要求キャッシュアクセスが、当該要求キャッシュアクセスによってターゲットとされるキャッシュラインに対して前記第１方向に隣接するキャッシュラインに関するプリフェッチ要求（２３４）をトリガする、第１プリフェッチモード（１２８）を有効にすることと、を含む、
方法。
【請求項２】
前記第１方向は次のキャッシュライン方向を含む、
請求項１の方法。
【請求項３】
前記第１方向は前のキャッシュライン方向を含む、
請求項１の方法。
【請求項４】
前記サンプリングキャッシュアクセスを含むサンプリングキャッシュアクセスのセットを決定するために、サンプリングスキーム（２０５）に従って前記スレッドに関するキャッシュアクセスをサンプリングすることをさらに含む、
請求項１の方法。
【請求項５】
前記サンプリングスキームは、前記キャッシュにおいてキャッシュヒットをもたらすキャッシュアクセスに対して、前記キャッシュにおいてキャッシュミスをもたらすキャッシュアクセスのサンプリングを優先する、
請求項４の方法。
【請求項６】
前記第１プリフェッチモードが有効になっていること、及び、前記スレッドに関する要求キャッシュアクセスを受信したことに応じて、前記要求キャッシュアクセスによってターゲットとされるキャッシュラインに対して前記第１方向に隣接するキャッシュラインを識別し、前記識別されたキャッシュラインに関するプリフェッチ要求（２３４）を発行することをさらに含む、
請求項１の方法。
【請求項７】
前記第１プリフェッチモードが有効になっていること、前記スレッドに関する要求キャッシュアクセスを受信したこと、及び、前記要求キャッシュアクセスに応じて前記処理システムの別のプリフェッチャ（１３０，１３２）がプリフェッチ要求を発行しないという指標に応じて、前記要求キャッシュアクセスによってターゲットとされるキャッシュラインに対して前記第１方向に隣接するキャッシュラインを識別し、前記識別されたキャッシュラインに関するプリフェッチ要求を発行することと、
前記第１プリフェッチモードが有効になっていること、前記スレッドに関する要求キャッシュアクセスを受信したこと、及び、前記要求キャッシュアクセスに応じて前記処理システムの別のプリフェッチャがプリフェッチ要求を発行するという指標に応じて、前記要求キャッシュアクセスによってターゲットとされるキャッシュラインに対して前記第１方向に隣接するキャッシュラインの発行を抑制することと、をさらに含む、
請求項１の方法。
【請求項８】
前記スレッドに関する要求キャッシュアクセスを監視し、前記スレッドに関するサンプリングキャッシュアクセスのセットのターゲットとされるキャッシュラインに対して、第２方向に隣接するキャッシュラインを対象とする前記スレッドに関する要求キャッシュアクセスの数である第２ランニングカウントを維持することと、
前記第２ランニングカウントが第２閾値を超えていることを判定したことに応じて、受信した前記スレッドに関する要求キャッシュアクセスが、当該要求キャッシュアクセスによってターゲットとされるキャッシュラインに対して前記第２方向に隣接するキャッシュラインに関するプリフェッチ要求をトリガする、第２プリフェッチモードを有効にすることと、をさらに含む、
請求項１の方法。
【請求項９】
システム（１００）であって、
キャッシュアクセスを処理するキャッシュコントローラ（１１８）を備えるキャッシュ（１０４）と、
前記キャッシュコントローラに接続されたアップ／ダウンプリフェッチャ（１２８）であって、前記アップ／ダウンプリフェッチャは、スレッドに関する要求キャッシュアクセスを監視し、前記スレッドに関するサンプリングキャッシュアクセスのセットのターゲットとされるキャッシュラインに対して、第１方向に隣接するキャッシュラインを対象とする前記スレッドに関する要求キャッシュアクセスの数である第１ランニングヒットカウントを維持し、前記第１ランニングヒットカウントが第１閾値を超えていることを判定したことに応じて、受信した前記スレッドに関する要求キャッシュアクセスが、当該要求キャッシュアクセスによってターゲットとされるキャッシュラインに対して前記第１方向に隣接するキャッシュラインに関するプリフェッチ要求（２３４）をキャッシュコントローラにトリガする、第１プリフェッチモードを実行する、アップ／ダウンプリフェッチャ（１２８）と、を備える、
システム（１００）。
【請求項１０】
前記第１方向は次のキャッシュライン方向を含む、
請求項９のシステム。
【請求項１１】
前記第１方向は前のキャッシュライン方向を含む、
請求項９のシステム。
【請求項１２】
前記アップ／ダウンプリフェッチャは、
前記サンプリングキャッシュアクセスを含むサンプリングキャッシュアクセスのセットを決定するために、サンプリングスキーム（２０５）に従って前記スレッドに関するキャッシュアクセスをサンプリングするサンプリングモジュール（２０２）を含む、
請求項９のシステム。
【請求項１３】
前記アップ／ダウンプリフェッチャは、
前記サンプリングモジュールに接続されたアドレスバッファ（２０４）であって、前記サンプリングキャッシュアクセスによってターゲットとされるキャッシュラインに関連するアドレスを記憶するように構成された複数のエントリ（２１４）を有するアドレスバッファ（２０４）と、
前記アドレスバッファに接続され、複数のエントリ（２１６）を有するヒットバッファ（２０６）であって、前記アドレスバッファの対応するエントリに関連し、前記スレッドに関する要求キャッシュアクセスの回数を表す第１ヒットカウントを記憶するように構成されている前記ヒットバッファの各エントリは、前記アドレスバッファの関連するエントリに記憶されたアドレスによって表されるキャッシュラインに対して前記第１方向に隣接するキャッシュラインをターゲットとしている、ヒットバッファ（２０６）と、を備える、
請求項１２のシステム。
【請求項１４】
前記アップ／ダウンプリフェッチャは、
前記ヒットバッファに接続されたヒット合計モジュール（２０８）であって、前記ヒットバッファの複数のエントリの前記第１ヒットカウントの合計に基づいて、前記第１ランニングヒットカウントを決定する、ヒット合計モジュール（２０８）を備える、
請求項１３のシステム。
【請求項１５】
前記アップ／ダウンプリフェッチャは、
前記ヒット合計モジュールに接続された比較モジュール（２１０）であって、前記第１閾値に対する前記第１ランニングヒットカウントの比較に応じて、第１プリフェッチモードの実行を有効にする比較モジュール（２１０）を備える、
請求項１４のシステム。
【請求項１６】
前記アップ／ダウンプリフェッチャは、
前記スレッドに関する要求キャッシュアクセスを監視し、前記スレッドに関するサンプリングキャッシュアクセスのセットのターゲットとされるキャッシュラインに対して、第２方向に隣接するキャッシュラインを対象とする前記スレッドに関する要求キャッシュアクセスの数である第２ランニングヒットカウントを維持し、
前記第２ランニングヒットカウントが第２閾値を超えていることを判定したことに応じて、受信した前記スレッドに関する要求キャッシュアクセスが、当該要求キャッシュアクセスによってターゲットとされるキャッシュラインに対して前記第２方向に隣接するキャッシュラインに関するプリフェッチ要求をキャッシュコントローラにトリガする、第２プリフェッチモードを実行する、
請求項９のシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本開示は、概して、処理システムに関し、より具体的には、処理システムにおけるデータのプリフェッチに関する。
【背景技術】
【０００２】
データプリフェッチは、メモリに記憶されたデータへのアクセスに関連する待機状態又は他の遅延を低減するために、処理システムにおいて頻繁に利用されている。一般的に、処理システムは、１つ以上のプリフェッチャを用いてデータアクセスを監視し、監視されたデータアクセスから近い将来に処理システムによって必要とされるデータアクセスを予測し、低レベルキャッシュ又はシステムメモリから予測データの投機的フェッチ（speculative fetching）を開始する。従来のプリフェッチャは、通常、スレッドによるデータアクセスのパターンにおいて「ストライド」又は「ストリーム」を識別することを試み、このストライド又はストリームを使用して、要求される次のデータを予測する。しかしながら、多くの場合、係る従来のプリフェッチャは、典型的には、サイズ制限（例えば、プリフェッチャが記憶可能なアクセス「履歴」の量）、所定のメモリページ内で動作するストリームの数、又は、常にではないが頻繁にローカルキャッシュ内でヒットするストリームの結果として、「動作の遅い（slow-moving）」ストライドパターン又はストリームパターンを正確に検出することができない。結果として、従来のプリフェッチャは、データの投機的プリフェッチに関する適切な基礎としての役割を果たし得る、他の有効なストライド又はストリームを識別することができない場合がある。
【０００３】
本開示は、添付の図面を参照することによって、より良く理解することができ、その多くの特徴及び利点が当業者に明らかになるであろう。異なる図面における同じ参照記号の使用は、類似又は同一のアイテムを示す。
【図面の簡単な説明】
【０００４】
【図１】いくつかの実施態様による、アップ／ダウンプリフェッチャを使用する処理システムのブロック図である。
【図２】いくつかの実施態様による、図１のアップ／ダウンプリフェッチャの実施例を示すブロック図である。
【図３】いくつかの実施態様による、図１及び図２のアップ／ダウンプリフェッチャの動作方法を示すフロー図である。
【図４】いくつかの実施態様による、図１及び図２のアップ／ダウンプリフェッチャを含むプリフェッチャのセットを使用するプリフェッチ方法を示すフロー図である。
【発明を実施するための形態】
【０００５】
本明細書に説明されるように、処理システムは、スレッドによるデータアクセスの「動作の遅い」ストライドパターン又はストリームパターンを識別し、このように識別されたストライドパターン又はストリームパターンに基づいて投機的プリフェッチアクセスを生成するために、アップ／ダウンプリフェッチャ（ＵＤＰ）を使用する。少なくとも１つの実施形態では、ＵＤＰは、スレッドによってアクセスされるデータセットが比較的ゆっくりと昇順又は降順にアクセスされている場合を識別しようと試みる。ＵＤＰは、スレッドの要求キャッシュアクセス（キャッシュヒット及びキャッシュミスの両方）をサンプリングし、サンプリングされた要求キャッシュアクセスによってターゲットとされたキャッシュラインのアドレスをアドレスバッファに記憶することによって、上記の識別を行う。同時に、ＵＤＰによって観察される要求キャッシュアクセス毎に、ＵＤＰは、要求キャッシュアクセスが、アドレスバッファ内のアドレスによって表されるキャッシュラインに隣接するキャッシュライン宛てであるかどうかを判定する。要求キャッシュアクセスのアドレスが、バッファされたアドレスエントリのキャッシュラインに対して上方向（すなわち、より高いメモリアドレス）に隣接するキャッシュラインを対象とする場合には、バッファされたアドレスエントリに関連するアップ（＋）ヒットカウントがインクリメントされる。同様に、要求キャッシュアクセスのアドレスが、バッファされたアドレスエントリのキャッシュラインに対して下方向（すなわち、より低いメモリアドレス）に隣接するキャッシュラインを対象とする場合には、バッファされたアドレスエントリに関連するダウン（−）ヒットカウントがインクリメントされる。
【０００６】
ＵＤＰは、指定された数の要求キャッシュアクセスが評価された後、又は、別のトリガイベントに応じて、アップヒットカウントの全ての値を合計し、ダウンヒットカウントの全ての値を合計して、アップヒットカウントの合計及びダウンヒットカウントの合計の各々を判定する。アップヒットカウントの合計が指定された閾値以上である場合、ＵＤＰは、「アップ」プリフェッチを有効にし、スレッドによる要求キャッシュアクセス毎に、要求キャッシュアクセスによってターゲットとされたキャッシュラインの上方向に隣接するキャッシュラインのプリフェッチをトリガする。同様に、ダウンヒットカウントの合計が指定された閾値（アップカウントの閾値と同じであってもよいし、異なっていてもよい）以上である場合、ＵＤＰは、「ダウン」プリフェッチを有効にし、スレッドによる要求キャッシュアクセス毎に、要求キャッシュアクセスによってターゲットとされたキャッシュラインの下方向に隣接するキャッシュラインのプリフェッチをトリガする。いくつかの実施形態では、ＵＤＰは、アッププリフェッチ又はダウンプリフェッチが、場合によっては、他のプリフェッチャが要求キャッシュアクセスに応じてプリフェッチをトリガしなかった場合にのみトリガされるように、他のプリフェッチャと協働する。
【０００７】
ここで、図１を参照すると、本開示の少なくとも１つの実施形態によるアップ／ダウンプリフェッチを使用する処理システム１００が示されている。処理システム１００は、例えば、サーバ、デスクトップコンピュータ、ノートコンピュータ、タブレットコンピュータ、コンピューティング可能携帯電話（例えば、「スマートフォン」）、コンピューティング可能時計や他のウェアラブルアイテム、パーソナルデジタルアシスタント（ＰＤＡ）、ゲーム機等の様々なコンピューティング可能電子デバイスの何れかによって実装することができる。図示された例では、処理システム１００は、少なくとも１つの計算複合体（compute complex）１０２と、キャッシュ階層１０４と、メモリコントローラ１０６と、を含み、メモリコントローラ１０６は、処理システム１００の残りの部分と「オンチップ」であるか、又は、外部構成要素として実装されるシステムメモリ１０８に接続されてもよい。
【０００８】
計算複合体１０２は、図示された例では４つのプロセッサコア１１１，１１２，１１３，１１４等の１つ以上のプロセッサコアを含む。プロセッサコアは、中央処理ユニット（ＣＰＵ）コア、グラフィックス処理ユニット（ＧＰＵ）コア、デジタル信号プロセッサ（ＤＳＰ）コア、又は、これらの組み合わせを含むことができる。キャッシュ階層１０４は、メモリ１０８からアクセスされたデータであって、１つ以上のプロセッサコア１１１〜１１４によるアクセスのために一時的に記憶されるデータをキャッシュする１つ以上のレベルのキャッシュを含む。この特定の例では、キャッシュ階層１０４は、４つのレベル１（Ｌ１）キャッシュ１２１，１２２，１２３，１２４のセットと、レベル２（Ｌ２）キャッシュ１１６と、を含み、Ｌ１のキャッシュ１２１〜１２４の各々は、プロセッサコア１１１〜１１４の何れか１つに対応するプライベートキャッシュであり、計算複合体１０２の一部である。一方、Ｌ２キャッシュ１１６は、プロセッサコア１１１〜１１４間で共有される。別のキャッシュレベルのキャッシュ（レベル３（Ｌ３）キャッシュ等）も同様に使用可能であることが理解されるであろう。この例では、本明細書で説明されるアップ／ダウンプリフェッチプロセスは、Ｌ２キャッシュレベルで行われる。しかしながら、アップ／ダウンプリフェッチプロセスは、Ｌ２キャッシュレベルに限定されず、代わりに、本明細書で提供されるガイドラインを使用して、Ｌ１キャッシュレベル又はＬ３キャッシュレベル等の任意のキャッシュレベルで実施され得ることが理解されるであろう。
【０００９】
Ｌ２キャッシュ１１６は、コントローラ１１８と、タグアレイ及び対応するデータアレイ（本明細書では、まとめて「データ／タグアレイ１２０」と呼ぶ）と、プリフェッチブロック１２６と、を含む。コントローラ１１８は、データ／タグアレイ１２０内のＬ２キャッシュ１１６にキャッシュされたキャッシュラインに関するデータ／タグアレイ１２０のエントリを維持し、Ｌ１キャッシュ１２１〜１２４及びメモリコントローラ１０６からのプローブ及び他のキャッシュアクセスを処理するように動作する。プリフェッチブロック１２６は、Ｌ２キャッシュ１１６によって処理される要求キャッシュアクセスを監視し、Ｌ２コントローラ１１８によって適切に処理される投機的プリフェッチ要求をトリガするための１つ以上のプリフェッチャを含む。このため、プリフェッチブロック１２６は、少なくともアップ／ダウンプリフェッチャ（ＵＤＰ）１２８を含む。図示された例では、プリフェッチブロック１２６は、従来のストリームパターン分析に基づいて投機的プリフェッチをトリガするように動作するストリームプリフェッチャ１３０と、従来のストライドパターン分析に基づいて投機的プリフェッチをトリガするように動作するストライドプリフェッチャ１３２と、をさらに含む。
【００１０】
一般的な動作概要として、キャッシュ階層１０４は、プロセッサコア１１１〜１１４によって使用されるデータを一時的にキャッシュするように動作する。いくつかの実施形態では、要求キャッシュアクセスに応じて、すなわち、プロセッサコア１１１〜１１４の何れか１つからのデータに関する特定の非投機的要求に応じて、データがキャッシュされる。係るキャッシュ要求アクセスは、キャッシュ階層１０４を介して、低レベルキャッシュ（Ｌ２キャッシュ１１６）から高レベルキャッシュ（Ｌ１キャッシュ１２１〜１２４）に伝わる。各キャッシュレベルにおいて、当該レベルのキャッシュがプローブ（検査）され、要求されたデータの有効なコピーが当該レベルでキャッシュされているか否かが判別される。有効なコピーが存在する場合、キャッシュヒットが通知され、データのコピーがプローブ元又は要求元に提供される。有効なコピーが存在しない場合、キャッシュミスが通知され、キャッシュアクセスは、次の高いキャッシュレベルに伝えられて当該プロセスが繰り返される。要求データがキャッシュ階層１０４に存在しない場合、メモリコントローラ１０６は、システムメモリ１０８から要求データにアクセスするようにタスクされ、システムメモリ１０８からアクセスされたデータは、キャッシュ階層１０４内の１つのキャッシュにキャッシュされる。
【００１１】
同時に、プリフェッチブロック１２６のプリフェッチャ１２８，１３０，１３２は、Ｌ２コントローラ１１８によって処理されるキャッシュアクセスのストリーム（このストリームは矢印１３４で表され、本明細書では「ストリーム１３４」と呼ばれる）を監視する。プリフェッチャ１２８，１３０，１３２の各々は、計算複合体１０２で実行されるスレッド毎に対応するアクセスパターンを検出しようと試み、特定のアクセスパターンが検出された場合に、検出されたアクセスパターンに従って投機的プリフェッチ要求の発行を開始する。いくつかの実施形態では、プリフェッチャ１２８，１３０，１３２は、プリフェッチャ１２８，１３０，１３２のサブセット（例えば、１つだけ）が、要求キャッシュアクセスから投機的プリフェッチをトリガできるように、プリフェッチ活動を優先順位付け又は調整する。上述したように、ストリームプリフェッチャ１３０及びストライドプリフェッチャ１３２は、周知の従来のプリフェッチ技術を利用する。ＵＤＰ１２８のパターン検出及びプリフェッチ開始プロセスの例は、図２〜図４を参照して以下に詳細に説明される。
【００１２】
図２は、少なくとも１つの実施形態による処理システム１００のＵＤＰ１２８の例示的構成を示す図である。図示された実施形態では、ＵＤＰ１２８は、サンプリングモジュール２０２と、１つ以上のスレッド特有のアップ／ダウンカウントコンポーネント２０３と、を含む。すなわち、ＵＤＰ１２８は、アップ／ダウンカウントコンポーネント２０３の特定の数のインスタンスを実装することができ、各インスタンスは、計算複合体１０２で実行される対応するスレッドへの割り当てに利用可能である。したがって、ＵＤＰ１２８がアップ／ダウンカウントコンポーネント２０３の４つのインスタンスを実装する場合、最大４つのスレッドをＵＤＰ１２８によって個別に追跡することができる。サンプリングモジュール２０２は、Ｌ２キャッシュ１１６におけるキャッシュアクセスのストリーム１３４を監視するコントローラ１１８に接続された入力と、ストリーム１３４のキャッシュアクセスをサンプリングモジュール２０２がサンプリングするサンプリングスキームを表すサンプリングスキーム構成データ２０５を受信する入力と、サンプリングされたキャッシュアクセスに関連する特定のスレッドのアップ／ダウンカウントコンポーネント２０３のインスタンスに対する各サンプリングキャッシュアクセスを対象とするキャッシュラインを表すメモリアドレス（又はその一部）を提供する出力と、を含む。
【００１３】
アップ／ダウンカウントコンポーネント２０３の各インスタンスは、アップ／ダウンアドレスバッファ２０４と、アップ／ダウンヒットバッファ２０６と、ヒット制御モジュール２０７と、ヒット合計モジュール２０８と、比較モジュール２１０と、プリフェッチ発行モジュール２１２と、を含む。アップ／ダウンアドレスバッファ２０４は、複数のエントリ２１４（例えば、１６エントリ）を有するコンテンツアドレス可能メモリ（ＣＡＭ）を含み、各エントリ２１４は、メモリアドレスの少なくとも一部を記憶するように構成されている。例示すると、この例では、ＵＤＰ１２８は、キャッシュラインに基づいて動作し、４８ビットの物理アドレスの６〜４７ビット（すなわち、ＰＡ［４７：６］）がメモリ内のデータのキャッシュラインのアドレスを指すと仮定すると（一方、ＰＡ［５：０］はキャッシュライン内のバイトを指す）、識別されたキャッシュアクセス（以下に説明する）の物理アドレス部分ＰＡ［４７：６］は、アップ／ダウンアドレスバッファ２０４の対応するエントリ２１４に記憶されてもよい。ヒット合計モジュール２０８は、複数のエントリ２１６（各エントリ２１６は、アップ／ダウンアドレスバッファ２０４のエントリ２１４のうち対応する１つのエントリに関連付けられており、２つのサブエントリを含む）と、対応するエントリ２１４に記憶されたアドレスのアップヒットカウントを記憶するアップヒットカウントサブエントリ２１８と、対応するエントリ２１４に記憶されたアドレスのダウンヒットカウントを記憶するダウンヒットカウントサブエントリ２２０と、を含む。
【００１４】
例示の便宜上、ヒット合計モジュール２０８及び比較モジュール２１０の各々の単一のインスタンスが図２に示されているが、各アップ／ダウンカウントコンポーネント２０３は、２つのインスタンス（ヒット合計モジュール２０８及び比較モジュール２１０）と、アップヒットカウントサブエントリ２１８のアップヒットカウントを使用して「アップ」ヒットの数を集計及び評価するための１つのヒット合計モジュール２０８及び比較モジュール２１０と、ダウンヒットカウントサブエントリ２２０のダウンヒットカウントを使用して「ダウン」ヒットの数を集計及び評価するためのもう１つのヒット合計モジュール２０８及び比較モジュール２１０と、を含む。アップ／ダウンヒットコンポーネント２０３に実装される２つのヒット合計モジュール２０８の各々は、マルチプレクサ２２２と、加算器モジュール２２４と、集計モジュール２２６と、を含む。マルチプレクサ２２２は、複数の入力（各々が対応するサブエントリ２１８，２２０に接続されている）と、加算器モジュール２２４の入力に接続された出力と、を有する。加算器モジュール２２４は、集計モジュール２２６の入力に接続された出力と、集計モジュール２２６の出力に接続された入力と、を含む。集計モジュール２２６は、後述するように、アップ／ダウンヒットバッファ２０６に表されるアップヒット又はダウンヒットの合計数を表すランニングアップヒットカウント又はランニングダウンヒットカウントを記憶するラッチ又は他のストレージコンポーネントを含むことができる。比較モジュール２１０は、トリガイベントに応じて、集計モジュール２２６に記憶されているランニングアップ／ダウンヒットカウントを、指定された閾値２２８（例えば、コンフィギュレーションレジスタ、ハードコード等に記憶され得る閾値）と比較するように動作し、これに応じて有効／無効信号２３０を制御する。
【００１５】
プリフェッチ発行モジュール２１２は、有効／無効信号２３０を受信する入力と、ストリーム１３４のキャッシュアクセスを受信する入力と、これらの入力に基づいてプリフェッチ要求を選択的に発行する出力と、を含む。さらに、いくつかの実施形態では、ＵＤＰ１２８の動作は、プリフェッチブロック１２６の他のプリフェッチャ１３０，１３２の動作と調整され、この場合、プリフェッチ発行モジュール２１２は、プリフェッチ状態情報２３２を他のプリフェッチャから受信する入力を含み、プリフェッチ状態情報２３２は、もう１つのプリフェッチャが、ストリーム１３４内で観察された要求キャッシュアクセスのプリフェッチ要求を有しているかどうか、又は、それを発行するかどうかを示す。
【００１６】
図３は、いくつかの実施態様による、図２のＵＤＰ１２８の動作の方法３００を示すフロー図である。図示されるように、ＵＤＰ１２８の動作は、キャッシュアクセス監視プロセス３０１と、ヒットカウントプロセス３０２と、アッププリフェッチ制御プロセス３０３と、ダウンプリフェッチ制御プロセス３０４と、を含む少なくとも４つの個別のプロセスが並行して実行されることを含む。一般的な概要として、プロセス３０１，３０２は、スレッドに関するＵＤＰ１２８の繰り返しトレーニングを表しており、プロセス３０３，３０４は、プロセス３０１、３０２中に取得されたトレーニング情報に基づいて、スレッドに関するアップ／ダウンプリフェッチを有効にするか無効にするかについて、ＵＤＰ１２８によって繰り返して使用される決定プロセスを表している。
【００１７】
キャッシュアクセス監視プロセス３０１は、ＵＤＰ１２８がキャッシュアクセスのストリーム１３４を監視し、そこからキャッシュアクセスをサンプリングし、それに応じてアップ／ダウンアドレスバッファ２０４を更新するプロセスを表す。したがって、ブロック３１１において、サンプリングモジュール２０２は、サンプリングスキーム構成データ２０５によって指定されたサンプリングスキームに基づいて、キャッシュアクセスをストリーム１３４からサンプリングする。少なくとも１つの実施形態では、サンプリングは、キャッシュヒット及びキャッシュミスの両方から行われるが、キャッシュミスは、投機的プリフェッチデータの必要性をより示す傾向があるので、サンプリングスキームにおいて強調されるか優先順位付けされ得る。また、より高いキャッシュレベル（例えば、Ｌ１キャッシュ１２１〜１２４）からの投機的プリフェッチを表すキャッシュアクセスは、一般的に、サンプリングから除外される。さらに、サンプリングキャッシュアクセスの割合は、アップ／ダウンアドレスバッファ２０４内のエントリ２１４の数、ＵＤＰ１２８によって検出されるのが予想されるアクセスパターンの「割合」等を含むいくつかの考慮事項に基づくことができる。一例として、サンプリングスキームは、投機的プリフェッチを表す全てのキャッシュアクセスを低レベルキャッシュから除去し、Ｌ２キャッシュ１１６におけるキャッシュヒットである８つのキャッシュアクセスのうち７つのキャッシュアクセスを除去し、フィルタリングされたキャッシュアクセスストリームから５１２回のキャッシュアクセスのうち１回のキャッシュアクセスのサンプリングを行うようにサンプリングモジュール２０２を構成する。
【００１８】
そのように選択されたサンプリングキャッシュアクセスにより、ブロック３１２において、サンプリングモジュール２０２は、サンプリングキャッシュアクセスによってターゲットとされたキャッシュラインのメモリアドレス部ＰＡ［４７：６］をアップ／ダウンアドレスバッファ２０４のエントリ２１４に書き込む。少なくとも１つの実施形態では、アップ／ダウンアドレスバッファ２０４は、ラウンドロビン又は先入れ先出し（ＦＩＦＯ）方式で動作し、全てのエントリ２１４が満たされると、最も古いエントリ２１４が、新たなサンプリングキャッシュアクセスによってターゲットとされるキャッシュラインのメモリアドレス部分で上書きするために選択される。しかしながら、エントリ２１４を上書きすることは、ブロック３１３，３１４によって表されるプロセスをトリガして、上書きされたエントリ２１４に関連するアップ／ダウンヒットカウントを、スレッドに関して維持されているランニングアップヒットカウント及びランニングダウンヒットカウントに組み込む。このプロセスは、エントリのアップ／ダウンヒットカウントを生成するプロセスの説明に続いて、以下に説明される。何れにしても、サンプリングキャッシュアクセスが処理された後、プロセス３０１は、ストリーム１３４からサンプリングされる次のキャッシュアクセスのために、ブロック３１１に戻る。
【００１９】
ここで、ヒットカウントプロセス３０２を参照すると、このプロセスは、アップ／ダウンアドレスバッファ２０４に表されたキャッシュラインに隣接するキャッシュラインをターゲットとするキャッシュアクセスの数をカウントする役割を果たす。したがって、ヒット制御モジュール２０７は、キャッシュアクセスのストリーム１３４を監視する。要求キャッシュアクセスが検出されると、ブロック３２１において、ヒット制御モジュール２０７は、キャッシュアクセスがアップ／ダウンアドレスバッファ２０４に表されたキャッシュラインの何れかに隣接するキャッシュラインをターゲットとしているかどうかを判定する。このプロセスを行うために、ヒット制御モジュール２０７は、要求キャッシュアクセスによってターゲットとされるキャッシュラインの物理メモリアドレス部分Ａを判定し、アップ／ダウンアドレスバッファ２０４内で２つのルックアップを行う。ブロック３２２での第１ルックアップは、要求キャッシュアクセスによってターゲットとされるキャッシュラインに以前に隣接していた（すなわち、下方向に隣接している）キャッシュラインのアドレスを表すメモリアドレス部分Ａ−１に関するものであり、ブロック３２３での第２ルックアップは、要求キャッシュアクセスによってターゲットとされるキャッシュラインに続いて隣接する（すなわち、上方向に隣接する）キャッシュラインのアドレスを表すメモリアドレス部分Ａ＋１に関するものである。説明を容易にするために、ブロック３２２及びブロック３２３が連続して発生するように示されているが、これらのブロックによって表されるルックアップは同時に行われてもよいことに留意されたい。
【００２０】
ブロック３２２によって表されるように、第１ルックアップがアップ／ダウンアドレスバッファ２０４のエントリ２１４にヒットした場合には、ヒットエントリ２１４に表されるキャッシュラインの直後のキャッシュラインに対する要求キャッシュアクセスであったことを示す。すなわち、要求キャッシュアクセスは、ヒットエントリ２１４によって表されるキャッシュラインから「上」又はその直後のキャッシュラインをターゲットとしたものである。したがって、これに応じて、ヒット制御モジュール２０７は、ブロック３２４において、ヒットエントリ２１４に関連するアップヒットカウントサブエントリ２１８に記憶されたアップヒットカウントをインクリメントする。すなわち、ヒット制御モジュール２０７は、要求キャッシュアクセスが、アップ／ダウンアドレスバッファ２０４に表されるキャッシュラインから「上」の１つのキャッシュラインを対象とすることを識別し、これに応じて、この一致を記録するためにアップ／ダウンアドレスバッファ２０４のキャッシュラインのアップヒットカウントを１つだけインクリメントする。或いは、ブロック３２３に示すように、第２ルックアップがアップ／ダウンアドレスバッファ２０４のエントリ２１４にヒットする場合には、ヒットエントリ２１４に表されたキャッシュラインの直前のキャッシュラインに対する要求キャッシュアクセスであったことを示す。すなわち、要求キャッシュアクセスは、ヒットエントリ２１４によって表されるキャッシュラインから「下」又はその直前のキャッシュラインをターゲットとしたものである。したがって、これに応じて、ヒット制御モジュール２０７は、ブロック３２５において、ヒットエントリ２１４に関連するダウンヒットカウントサブエントリ２２０に記憶されたダウンヒットカウントをインクリメントする。すなわち、ヒット制御モジュール２０７は、要求キャッシュアクセスが、アップ／ダウンアドレスバッファ２０４に表されるキャッシュラインから「下」の１つのキャッシュラインを対象とすることを識別し、これに応じて、この一致を記録するためにアップ／ダウンアドレスバッファ２０４のキャッシュラインのダウンヒットカウントを１つだけインクリメントする。両方のルックアップがミスした場合には、要求キャッシュアクセスは、アップ／ダウンアドレスバッファ２０４に表されるキャッシュラインの何れかに直接隣接するキャッシュラインを対象としていないため、アップ／ダウンヒットカウントに影響を及ぼさないことを示している。
【００２１】
処理３０２によって示されるように、アップヒットカウントサブエントリ２１８に記憶されたアップヒットカウントは、アップヒットカウントサブエントリ２１８に関連するエントリ２１４によって表されるキャッシュラインから「上」のキャッシュラインをターゲットとする要求キャッシュアクセスの発生数を表す。ダウンヒットカウントサブエントリ２２０に記憶されたダウンヒットカウントは、アップヒットカウントサブエントリ２１８に関連するエントリ２１４によって表されるキャッシュラインから「下」のキャッシュラインをターゲットとする要求キャッシュアクセスの発生数に相当するように表す。このように、有効なキャッシュラインアドレスを記憶するエントリ２１４が上書きされる前に、このキャッシュラインに関連するアップヒットカウント及びダウンヒットカウントは、スレッドのランニングアップヒットカウント及びランニングダウンヒットカウントの各々に含まれる。したがって、プロセス３０１に戻り、サンプリングモジュール２０２が新たなサンプリングキャッシュアクセスのキャッシュラインアドレスをアップ／ダウンアドレスバッファ２０４の識別されたエントリ２１４に記憶する場合、ブロック３１３において、サンプリングモジュール２０２は、有効なキャッシュラインが識別されたエントリ２１４に上書きされようとしているかどうかを判別する。上書きされない場合、未だ考慮されていない有効なアップ／ダウンヒットカウントがないので、キャッシュラインアドレスは、さらなるアクション無しにエントリ２１４に記憶され得る。
【００２２】
しかしながら、識別されたエントリ２１４に既に記憶された有効なキャッシュラインアドレスがある場合、ブロック３１４において、有効なキャッシュラインの上書きは、識別されたエントリ２１４に関連するサブエントリ２１８，２２０のアップヒットカウント及びダウンヒットカウントの各々をランニングアップヒットカウント及びランニングダウンヒットカウントに組み込むように、ヒット合計モジュール２０８のトリガイベントとして動作し得る。したがって、アップヒットカウントの場合、サンプリングモジュール２０２は、識別されたエントリ２１４のインデックスを、ランニングアップヒットカウントに関するヒット合計モジュール２０８のマルチプレクサ２２２に通知する。これに応じて、マルチプレクサ２２２は、この同じインデックスでアップヒットカウントサブエントリ２１８に記憶されたアップヒットカウントにアクセスし、アクセスのアップヒットカウントを加算器モジュール２２４に転送する。次に、加算器モジュール２２４は、このアップヒットカウントを、集計モジュール２２６内に記憶されたランニングヒットカウントの現在の値に加算し、その結果を、そこに記憶されたランニングヒットカウントに対する更新として集計モジュール２２６に記憶する。同様の処理がヒット合計モジュール２０８によって実行され、ヒット合計モジュール２０８は、示されたインデックスでサブエントリ２２０に記憶されたランニングダウンヒットカウント及びダウンヒットカウントに関するランニングダウンヒットカウントを維持する。さらに、アップヒットカウント及びダウンヒットカウントがランニングアップヒットカウント及びランニングダウンヒットカウントにそれぞれ追加された後に、インデックスのサブエントリ２１８，２２０は、新たなキャッシュラインアドレスが対応するエントリ２１４に記憶されるために、ゼロにリセットされる。
【００２３】
上述したように、プロセス３０３，３０４は、アップ／ダウンヒット合計モジュール２０８に記憶されたランニングアップ／ダウンヒットカウントに基づいて、アッププリフェッチ及びダウンプリフェッチを周期的に選択的に有効／無効にするプロセスを表す。プロセス３０３は、アッププリフェッチを有効にするプロセスを表す。したがって、プロセス３０１のブロック３１１、又は、いくつかの他のトリガイベント（例えば、カウントダウンタイマのアクティブ化）において特定の数のキャッシュアクセスがプロセス３０１のブロック３１１でサンプリングされた後に、「アップ」インスタンスに関する比較モジュール２１０が有効になる。有効になると、ブロック３３１において、比較モジュール２１０は、現在のランニングアップヒットカウントを集計モジュール２２６から受信し、現在のランニングヒットカウントを「アップ」キャッシュラインヒットに関する特定の閾値２２８と比較する。少なくとも１つの実施形態では、特定の閾値２２８は、スレッドのアップキャッシュラインヒットの数に関する水準を表す。例示のために、閾値２２８は、アッププリフェッチが有効になる前に、４８個のアップヒットに設定されてもよい。特定の閾値２２８の特定の値は、モデリング、経験的分析等によって選択されてもよい。デフォルトでは、アッププリフェッチは無効であり、ブロック３３２に示すように、ランニングアップヒットカウントが閾値２２８未満の間、アッププリフェッチは無効のままであり、プロセス３０３は別のポーリングサイクルの間繰り返される。しかしながら、ブロック３３３に示すように、ランニングアップヒットカウントが閾値２２８以上に上昇すると、アッププリフェッチを有効にするのに適しているとみなされる最小数のアップキャッシュラインヒットが発生し、比較モジュール２１０は、アッププリフェッチがスレッドに対して有効になったことを示すように、アッププリフェッチに関する有効／無効信号２３０を生成する。
【００２４】
プロセス３０４は、ダウンプリフェッチを有効にするためのプロセスを表し、プロセス３０３と同様の方法で進行する。したがって、プロセス３０１のブロック３１１で特定の数のキャッシュアクセスがサンプリングされた後に、「ダウン」インスタンスに関する比較モジュール２１０が有効になる。プロセス３０４のキャッシュアクセスの特定の数がプロセス３０３における数と異なる場合があることに留意されたい。有効になると、「ダウン」インスタンスに関する比較モジュール２１０は、ポーリングサイクルを開始する。ポーリングサイクル毎に、ブロック３４１において、比較モジュール２１０は、現在のランニングダウンヒットカウントを集計モジュール２２６から受信し、現在のランニングダウンカウントを、「ダウン」キャッシュラインヒットに関する特定の閾値２２８と比較する。「ダウン」キャッシュラインヒットに関する閾値２２８が「アップ」キャッシュラインヒットに関する閾値２２８と異なる場合があることに留意されたい。アッププリフェッチと同様に、ダウンプリフェッチは、デフォルトで無効にされてもよく、ブロック３４２に示すように、ランニングダウンヒットカウントが閾値２２８未満の間、ダウンプリフェッチは無効のままであり、プロセス３０４は別のポーリングサイクルの間繰り返される。しかしながら、ブロック３４３に示すように、ランニングダウンヒットカウントが閾値２２８以上に上昇すると、ダウンプリフェッチを有効にするのに適しているとみなされる最小数のダウンキャッシュラインヒットが発生し、比較モジュール２１０は、ダウンプリフェッチがスレッドに対して有効になったことを示すように、ダウンプリフェッチに関する有効／無効信号２３０を生成する。
【００２５】
図４は、少なくとも１つの実施態様による、図３の処理３０１〜３０４と連携するプリフェッチ発行モジュール２１２の動作の方法４００を示すフロー図である。上述したように、プリフェッチブロック１２６のＵＤＰ１２８及び他のプリフェッチャ１３０，１３２は、スレッドに関するキャッシュアクセスのパターンを検出し、これらのパターンから、スレッドによって必要と予測されるデータを投機的に予測し、この予測されたデータに関する投機的プリフェッチ要求を発行するように動作する。特に、ＵＤＰ１２８は、スレッドがデータのブロックを通って移動し、「アップ」シーケンス（すなわち、より低いメモリアドレスからより高いメモリアドレスまで、隣接するキャッシュラインにアクセスすること）又は「ダウン」シーケンス（すなわち、より高いメモリアドレスからより低いメモリアドレスまで、隣接するキャッシュラインにアクセスすること）の何れかとして順番にキャッシュラインにアクセスする比較的動作の遅いパターンを検出するように動作する。係るパターンが検出されると、プロセス３０３，３０４で表されるように、ＵＤＰ１２８は、アッププリフェッチ又はダウンプリフェッチの何れかを検出されたパターンの方向から適切に有効にし、スレッドに関して検出された要求キャッシュアクセス毎に、隣接するキャッシュラインに関する投機的プリフェッチを選択的にトリガする。
【００２６】
したがって、方法４００は、ブロック４０２で開始し、プリフェッチ発行モジュール２１２において、スレッドに関する要求キャッシュアクセスの受信又は通知を開始する。ブロック４０４において、プリフェッチ発行モジュール２１２は、「アップ」インスタンスに関する有効／無効信号２３０の状態と、「ダウン」インスタンスに関する有効／無効信号２３０の状態と、を評価して、アッププリフェッチ又はダウンプリフェッチの何れが有効にされているかどうかを判定する。上述したように、ブロック４０５に示すように、スレッドに関連するアップ／ダウンカウントコンポーネント２０３は、以前の隣接するキャッシュラインにヒットする要求キャッシュアクセスの数のランニングカウント（ランニングダウンヒットカウント）と、次に隣接するキャッシュラインにヒットするデマンドキャッシュアクセスの数のランニングカウント（ランニングアップヒットカウント）とを維持し、ランニングアップヒットカウント又はランニングダウンヒットカウントの何れかがその関連する閾値２２８を超えると、対応する隣接アクセスパターンが検出され、アッププリフェッチ又はダウンプリフェッチの何れかが有効になる。少なくとも１つの実施形態では、２つのプリフェッチモードのうち１つのみが任意の所定の時間で有効にされてもよく、この場合、他のプリフェッチモードの有効化が抑制される。
【００２７】
アッププリフェッチ及びダウンプリフェッチの何れも有効にならない場合、ブロック４０６において、プリフェッチ発行モジュール２１２は、ブロック４０２で受信された要求キャッシュアクセスに応じたアクションをとらない。それ以外の場合、アッププリフェッチ又はダウンプリフェッチの何れかが有効である場合、ブロック４０８において、プリフェッチ発行モジュール２１２は、プリフェッチブロック１２６のプリフェッチャ１２８，１３０，１３２によって交換されるプリフェッチ状態情報２３２を分析して、ブロック４０２で受信される要求キャッシュアクセスに応じて、もう１つのプリフェッチャがプリフェッチ要求を発行するかどうかを判定する。少なくとも１つの実施形態では、ＵＤＰ１２８は、プリフェッチャ１３０，１３２に対する「バックアップ」プリフェッチャとして動作し、これらのプリフェッチャの１つが、プリフェッチャが要求キャッシュアクセスに関するプリフェッチ要求を有している又はこれを発行することを通知する場合、ブロック４０６で再び示すように、ＵＤＰ１２８は、さらなるアクションをとらないことによって、それ自体のプリフェッチ要求の発行を抑制する。
【００２８】
それ以外の場合、ＵＤＰ１２８がプリフェッチャ１３０，１３２に対して優先されない場合、又は、他のプリフェッチャが要求キャッシュアクセスを処理していない場合、ブロック４１０において、プリフェッチ発行モジュール２１２は、何れのタイプのプリフェッチがスレッドに関してＵＤＰ１２８で有効になるかを判定する。アッププリフェッチが有効にされる場合、ブロック４１２において、プリフェッチ発行モジュール２１２は、ブロック４０２で受信される要求キャッシュアクセスのターゲットとなるキャッシュラインの後に隣接する（すなわち、上方向に隣接する）キャッシュラインに関する投機的プリフェッチ要求２３４（図２）を発行する。逆に、ダウンプリフェッチが有効にされる場合、ブロック４１４において、プリフェッチ発行モジュール２１２は、ブロック４０２で受信される要求キャッシュアクセスのターゲットとなるキャッシュラインの前に隣接する（すなわち、下方向に隣接する）キャッシュラインに関する投機的プリフェッチ要求２３４（図２）を発行する。ブロック４１２又はブロック４１４の何れかで発行されるプリフェッチ要求２３４の結果として、隣接するキャッシュラインは、Ｌ２キャッシュ１１６にプリフェッチされ、検出された隣接アクセスパターンが正確であれば計算複合体１０２によって利用可能になり、隣接するキャッシュラインに関するキャッシュアクセスがキャッシュミスを生じさせ、これにより、隣接するキャッシュラインがシステムメモリ１０８からフェッチされるまでスレッドを待機状態にする場合に生じる遅延を低減又は排除する。したがって、独立したプリフェッチャ又は他のプリフェッチャに対するバックアップとして機能するＵＤＰ１２８は、従来のストライド／ストリームプリフェッチャによって検出される、かなり多くのアクセスに亘る（すなわち、かなり「動作の遅い」）隣接アクセスパターンを識別するように動作することができ、これにより、キャッシュ階層１０４が、より効率的なデータアクセス及び処理に関する計算複合体１０２のデータアクセスの必要性をより良好に予測することを可能にする。
【００２９】
いくつかの実施形態では、上述した装置及び技術は、図１〜図４を参照して上述した処理システム等の１つ以上の集積回路（ＩＣ）デバイス（集積回路パッケージ又はマイクロチップとも呼ばれる）を含むシステムに実装される。これらのＩＣデバイスの設計及び製造には、電子設計自動化（ＥＤＡ）及びコンピュータ支援設計（ＣＡＤ）ソフトウェアツールを使用することができる。これらの設計ツールは、通常、１つ以上のソフトウェアプログラムとして表される。１つ以上のソフトウェアプログラムは、コンピュータシステムによって実行可能なコードを含み、コンピュータシステムを操作して、１つ以上のＩＣデバイスの回路を表すコード上で動作し、回路を製造する製造システムを設計又は適合させるプロセスの少なくとも一部を実行する。このコードには、命令、データ、又は、命令及びデータの組み合わせが含まれる。設計ツール又は製造ツールを表すソフトウェア命令は、通常、コンピューティングシステムにアクセス可能なコンピュータ可読記憶媒体に記憶される。同様に、ＩＣデバイスの設計又は製造の１つ以上のフェーズを表すコードは、同じコンピュータ可読記憶媒体又は異なるコンピュータ可読記憶媒体に記憶され、これらからアクセスされてもよい。
【００３０】
非一時的なコンピュータ可読記憶媒体は、使用中にコンピュータシステムによってアクセス可能であり、命令及び／又はデータをコンピュータシステムに提供する任意の非一時的な記憶媒体又は非一時的な記憶媒体の組み合わせを含むことができる。係る記憶媒体には、限定はしないが、光媒体（例えば、コンパクトディスク（ＣＤ）、デジタル多用途ディスク（ＤＶＤ）、ブルーレイ（登録商標））、磁気媒体（例えば、フロッピー（登録商標）ディスク、磁気テープ又は磁気ハードドライブ）、揮発性メモリ（例えば、ランダムアクセスメモリ（ＲＡＭ）又はキャッシュ）、不揮発性メモリ（例えば、読取専用メモリ（ＲＯＭ）又はフラッシュメモリ）、微小電気機械システム（ＭＥＭＳ）ベースの記憶媒体が含まれる。コンピュータ可読記憶媒体は、コンピューティングシステム（例えば、システムＲＡＭ又はＲＯＭ）に埋設されてもよいし、コンピューティングシステム（例えば、磁気ハードドライブ）に固定的に取り付けられてもよいし、コンピューティングシステム（例えば、光ディスク又はユニバーサルシリアルバス（ＵＳＢ）ベースのフラッシュメモリ）に取り外し可能に取り付けられてもよく、有線又は無線ネットワーク（例えば、ネットワークアクセス可能ストレージ（ＮＡＳ））を介してコンピュータシステムに接続されてもよい。
【００３１】
いくつかの実施形態では、上述した技術の特定の態様は、ソフトウェアを実行する処理システムの１つ以上のプロセッサによって実施されてもよい。ソフトウェアは、非一時的なコンピュータ可読記憶媒体に記憶されてもよいし、有形に具体化された実行可能な命令の１つ以上のセットを含む。ソフトウェアは、１つ以上のプロセッサによって実行されると、１つ以上のプロセッサを操作して、上述した技術の１つ以上の態様を実行する命令及びデータを含むことができる。非一時的なコンピュータ可読記憶媒体は、例えば、磁気若しくは光ディスクストレージデバイス、フラッシュメモリ等のソリッドステートストレージデバイス、キャッシュ、ランダムアクセスメモリ（ＲＡＭ）、他の不揮発性メモリデバイス等を含むことができる。非一時的なコンピュータ可読記憶媒体に記憶される実行可能な命令は、ソースコード、アセンブリ言語コード、オブジェクトコード、又は、１つ以上のプロセッサによって解釈若しくは他の方法で実行可能な他の命令フォーマットであってもよい。
【００３２】
一般的な説明において上記で説明したアクティビティ又は要素の全てが必要であるとは限らず、特定のアクティビティ若しくはデバイスの一部が必要でなくてもよいこと、１つ以上のさらなるアクティビティが実行され得ること、１つ以上のさらなる要素が説明されたものに加えて含まれることと、に留意されたい。また、アクティビティが列挙される順序は、必ずしも、そのアクティビティが行われる順序ではない。さらに、これらの概念は、特定の実施形態を参照して説明されている。しかし、当業者であれば、以下の特許請求の範囲に記載された本発明の範囲から逸脱することなく、様々な修正及び変更を行うことができることを理解するであろう。したがって、明細書及び図は、限定的な意味ではなく例示的な意味で考慮されるべきであり、このような変更の全ては、本発明の範囲に含まれることが意図される。
【００３３】
利益、他の利点及び問題に対する解決手段は、特定の実施形態に関して上述されている。しかし、何れかの利益、利点若しくは解決手段を発生させ得る、又は、顕著になる可能性のある機能は、何れか又は全ての重要な、必須の、不可欠な特徴と解釈されるべきではない。さらに、開示された発明は、本明細書の教示の利益を享受する当業者には明らかであるが、異なるが同等の方法で修正され実施され得るので、上述した特定の実施形態は例示に過ぎない。以下の特許請求の範囲に記載されているもの以外の、ここに示された構成又は設計の詳細に制限はない。したがって、上述した特定の実施形態は、変更又は修正されてもよく、そのような変更の全てが開示された発明の範囲にあると考えられることが明らかである。したがって、本明細書で求められる保護は、以下の特許請求の範囲に記載されている。
【図１】
2019521408.tif 000003
【図２】
2019521408.tif 000004
【図３】
2019521408.tif 000005
【図４】
2019521408.tif 000006
【手続補正書】
【提出日】平成31年1月30日(2019.1.30)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
キャッシュ（１０４）を備えるプロセスシステム（１００）において、
スレッドに関する要求キャッシュアクセスを監視し、前記スレッドに関するサンプリングキャッシュアクセスのセットのターゲットとされるキャッシュラインに対して、第１方向に隣接するキャッシュラインを対象とする前記スレッドに関する要求キャッシュアクセスの数である第１ランニングカウントを維持することと、
前記第１ランニングカウントが第１閾値（２２８）を超えていることを判定したことに応じて、受信した前記スレッドに関する要求キャッシュアクセスが、当該要求キャッシュアクセスによってターゲットとされるキャッシュラインに対して前記第１方向に隣接するキャッシュラインに関するプリフェッチ要求（２３４）をトリガする、第１プリフェッチモード（１２８）を有効にすることと、を含む、
方法。
【請求項２】
前記第１方向は次のキャッシュライン方向を含む、
請求項１の方法。
【請求項３】
前記第１方向は前のキャッシュライン方向を含む、
請求項１の方法。
【請求項４】
前記サンプリングキャッシュアクセスを含むサンプリングキャッシュアクセスのセットを決定するために、サンプリングスキーム（２０５）に従って前記スレッドに関するキャッシュアクセスをサンプリングすることをさらに含む、
請求項１の方法。
【請求項５】
前記サンプリングスキームは、前記キャッシュにおいてキャッシュヒットをもたらすキャッシュアクセスに対して、前記キャッシュにおいてキャッシュミスをもたらすキャッシュアクセスのサンプリングを優先する、
請求項４の方法。
【請求項６】
前記第１プリフェッチモードが有効になっていること、及び、前記スレッドに関する要求キャッシュアクセスを受信したことに応じて、前記要求キャッシュアクセスによってターゲットとされるキャッシュラインに対して前記第１方向に隣接するキャッシュラインを識別し、前記識別されたキャッシュラインに関するプリフェッチ要求（２３４）を発行することをさらに含む、
請求項１の方法。
【請求項７】
前記第１プリフェッチモードが有効になっていること、前記スレッドに関する要求キャッシュアクセスを受信したこと、及び、前記要求キャッシュアクセスに応じて前記処理システムの別のプリフェッチャ（１３０，１３２）がプリフェッチ要求を発行しないという指標に応じて、前記要求キャッシュアクセスによってターゲットとされるキャッシュラインに対して前記第１方向に隣接するキャッシュラインを識別し、前記識別されたキャッシュラインに関するプリフェッチ要求を発行することと、
前記第１プリフェッチモードが有効になっていること、前記スレッドに関する要求キャッシュアクセスを受信したこと、及び、前記要求キャッシュアクセスに応じて前記処理システムの別のプリフェッチャがプリフェッチ要求を発行するという指標に応じて、前記要求キャッシュアクセスによってターゲットとされるキャッシュラインに対して前記第１方向に隣接するキャッシュラインに関するプリフェッチ要求の発行を抑制することと、をさらに含む、
請求項１の方法。
【請求項８】
前記スレッドに関する要求キャッシュアクセスを監視し、前記スレッドに関するサンプリングキャッシュアクセスのセットのターゲットとされるキャッシュラインに対して、第２方向に隣接するキャッシュラインを対象とする前記スレッドに関する要求キャッシュアクセスの数である第２ランニングカウントを維持することと、
前記第２ランニングカウントが第２閾値を超えていることを判定したことに応じて、受信した前記スレッドに関する要求キャッシュアクセスが、当該要求キャッシュアクセスによってターゲットとされるキャッシュラインに対して前記第２方向に隣接するキャッシュラインに関するプリフェッチ要求をトリガする、第２プリフェッチモードを有効にすることと、をさらに含む、
請求項１の方法。
【請求項９】
システム（１００）であって、
キャッシュアクセスを処理するキャッシュコントローラ（１１８）を備えるキャッシュ（１０４）と、
前記キャッシュコントローラに接続されたアップ／ダウンプリフェッチャ（１２８）であって、前記アップ／ダウンプリフェッチャは、スレッドに関する要求キャッシュアクセスを監視し、前記スレッドに関するサンプリングキャッシュアクセスのセットのターゲットとされるキャッシュラインに対して、第１方向に隣接するキャッシュラインを対象とする前記スレッドに関する要求キャッシュアクセスの数である第１ランニングヒットカウントを維持し、前記第１ランニングヒットカウントが第１閾値を超えていることを判定したことに応じて、受信した前記スレッドに関する要求キャッシュアクセスが、当該要求キャッシュアクセスによってターゲットとされるキャッシュラインに対して前記第１方向に隣接するキャッシュラインに関するプリフェッチ要求（２３４）をキャッシュコントローラにトリガする、第１プリフェッチモードを実行する、アップ／ダウンプリフェッチャ（１２８）と、を備える、
システム（１００）。
【請求項１０】
前記第１方向は次のキャッシュライン方向を含む、又は、前記第１方向は前のキャッシュライン方向を含む、
請求項９のシステム。
【請求項１１】
前記アップ／ダウンプリフェッチャは、
前記サンプリングキャッシュアクセスを含むサンプリングキャッシュアクセスのセットを決定するために、サンプリングスキーム（２０５）に従って前記スレッドに関するキャッシュアクセスをサンプリングするサンプリングモジュール（２０２）を含む、
請求項９のシステム。
【請求項１２】
前記アップ／ダウンプリフェッチャは、
前記サンプリングモジュールに接続されたアドレスバッファ（２０４）であって、前記サンプリングキャッシュアクセスによってターゲットとされるキャッシュラインに関連するアドレスを記憶するように構成された複数のエントリ（２１４）を有するアドレスバッファ（２０４）と、
前記アドレスバッファに接続され、複数のエントリ（２１６）を有するヒットバッファ（２０６）であって、前記アドレスバッファの対応するエントリに関連し、前記スレッドに関する要求キャッシュアクセスの回数を表す第１ヒットカウントを記憶するように構成されている前記ヒットバッファの各エントリは、前記アドレスバッファの関連するエントリに記憶されたアドレスによって表されるキャッシュラインに対して前記第１方向に隣接するキャッシュラインをターゲットとしている、ヒットバッファ（２０６）と、を備える、
請求項１１のシステム。
【請求項１３】
前記アップ／ダウンプリフェッチャは、
前記ヒットバッファに接続されたヒット合計モジュール（２０８）であって、前記ヒットバッファの複数のエントリの前記第１ヒットカウントの合計に基づいて、前記第１ランニングヒットカウントを決定する、ヒット合計モジュール（２０８）を備える、
請求項１２のシステム。
【請求項１４】
前記アップ／ダウンプリフェッチャは、
前記ヒット合計モジュールに接続された比較モジュール（２１０）であって、前記第１閾値に対する前記第１ランニングヒットカウントの比較に応じて、第１プリフェッチモードの実行を有効にする比較モジュール（２１０）を備える、
請求項１３のシステム。
【請求項１５】
前記アップ／ダウンプリフェッチャは、
前記スレッドに関する要求キャッシュアクセスを監視し、前記スレッドに関するサンプリングキャッシュアクセスのセットのターゲットとされるキャッシュラインに対して、第２方向に隣接するキャッシュラインを対象とする前記スレッドに関する要求キャッシュアクセスの数である第２ランニングヒットカウントを維持し、
前記第２ランニングヒットカウントが第２閾値を超えていることを判定したことに応じて、受信した前記スレッドに関する要求キャッシュアクセスが、当該要求キャッシュアクセスによってターゲットとされるキャッシュラインに対して前記第２方向に隣接するキャッシュラインに関するプリフェッチ要求をキャッシュコントローラにトリガする、第２プリフェッチモードを実行する、
請求項９のシステム。
【国際調査報告】
2019521408.tif 000007
2019521408.tif 000008