(57)【特許請求の範囲】
【請求項１】
下位レベルメモリにおける複数の連続するデータブロックに対応するデータストリームへのアクセスを検出し、
前記アクセスを検出することと、前記データストリームへのキャッシュミスの数が既定の閾値に達していると決定することとに応答して、
前記キャッシュミスの数が前記既定の閾値に達した後に書き込み許可をリクエストする前記データストリームへのアクセスが無い場合、下位レベルメモリから前記データストリームの一部を書き込み許可無しでプリフェッチし、
前記キャッシュミスの数が前記既定の閾値に達した後に書き込み許可をリクエストする前記データストリームへのアクセスがある場合、下位レベルメモリから前記データストリームの一部を書き込み許可付きでプリフェッチするように構成されたプリフェッチユニットを備える、コンピューティングシステム。
【請求項２】
前記アクセスを検出することと、前記データストリームへのキャッシュミスの数が既定の閾値に達していると決定することとに応答して、前記プリフェッチユニットが、
前記アクセスが書き込み許可をリクエストし、前記アクセスが前記キャッシュミスの数を前記既定の閾値に達しさせると決定することに応答して、下位レベルメモリから前記データストリームの一部を書き込み許可付きでプリフェッチするようにさらに構成される、請求項１に記載のコンピューティングシステム。
【請求項３】
前記プリフェッチユニットは、前記アクセスのアドレスと、初期のプリフェッチキャッシュラインのアドレスとの間の整数デルタ値を決定するようにさらに構成されている、請求項１に記載のコンピューティングシステム。
【請求項４】
前記プリフェッチユニットは、前記データストリームに対応する特性データを記憶するようにさらに構成されている、請求項１に記載のコンピューティングシステム。
【請求項５】
特定のデータストリームに対応する前記特性データは、データストリーム識別子（ＩＤ）、各要求リクエストの読み出し／書き込みアクセスタイプ、各要求リクエストのアドレス、要求リクエストのキャッシュヒット／ミス状況、および要求リクエストに対応する初期のプリフェッチアドレスのうちの少なくとも１つを含む、請求項４に記載のコンピューティングシステム。
【請求項６】
前記特性データは表に記憶されており、
回路が、前記キャッシュミスの数が前記既定の閾値に達した後に、書き込み許可をリクエストする前記データストリームへの第１のアクセスを検出することに応答してスティッキ記憶ビットを設定するようにさらに構成されており、
前記スティッキ記憶ビットは一旦設定されると、前記データストリームデータが前記表内に有効な入力を有する間、その設定を維持する、請求項４に記載のコンピューティングシステム。
【請求項７】
前記特性データは表に記憶されており、
前記プリフェッチユニットは、新規のデータストリームのキャッシュミスアドレスが前記表に現在記憶されているデータストリームのアドレスに隣接しないことを検出することに応答して、前記新規のデータストリームを前記表に割り当てるようにさらに構成されている、請求項４に記載のコンピューティングシステム。
【請求項８】
下位レベルメモリにおける複数の連続するデータブロックに対応するデータストリームへのアクセスを検出することと、
前記アクセスを検出することと、前記データストリームへのキャッシュミスの数が既定の閾値に達していると決定することとに応答して、
前記キャッシュミスの数が前記既定の閾値に達した後に書き込み許可をリクエストする前記データストリームへのアクセスが無い場合、下位レベルメモリから前記データストリームの一部を書き込み許可無しでプリフェッチすることと、
前記キャッシュミスの数が前記既定の閾値に達した後に書き込み許可をリクエストする前記データストリームへのアクセスがある場合、下位レベルメモリから前記データストリームの一部を書き込み許可付きでプリフェッチすることと、を含む、方法。
【請求項９】
前記アクセスを検出することと、前記データストリームへのキャッシュミスの数が既定の閾値に達していると決定することとに応答して、前記方法は、
前記アクセスが書き込み許可をリクエストし、前記アクセスが前記キャッシュミスの数を前記既定の閾値に達しさせると決定することに応答して、前記下位レベルメモリからの前記データストリームの一部を書き込み許可付きでプリフェッチすることをさらに含む、請求項８に記載の方法。
【請求項１０】
現在の要求リクエストのアドレスと、初期の隣接しないプリフェッチキャッシュラインのアドレスとの間の整数デルタ値を決定することをさらに含む、請求項８に記載の方法。
【請求項１１】
前記データストリームに対応する特性データを記憶することをさらに含む、請求項８に記載の方法。
【請求項１２】
キャッシュに連結するように構成された第１のインターフェースと、
下位レベルメモリに連結するように構成された第２のインターフェースと、
制御回路とを備えるプリフェッチユニットであって、
前記制御回路は、
前記下位レベルメモリにおける複数の連続するデータブロックに対応するデータストリームへのアクセスを検出することと、前記データストリームへのキャッシュミスの数が既定の閾値に達していると決定することとに応答して、
前記キャッシュミスの数が前記既定の閾値に達した後に書き込み許可をリクエストする前記データストリームへのアクセスが無い場合、下位レベルメモリから前記データストリームの一部を書き込み許可無しでプリフェッチし、
前記キャッシュミスの数が前記既定の閾値に達した後に書き込み許可をリクエストする前記データストリームへのアクセスがある場合、前記下位レベルメモリから前記データストリームの一部を書き込み許可付きでプリフェッチするように構成されている、プリフェッチユニット。
【請求項１３】
前記アクセスを検出することと、前記データストリームへのキャッシュミスの数が既定の閾値に達していると決定することとに応答して、前記制御回路は、
前記アクセスが書き込み許可をリクエストし、前記アクセスが前記キャッシュミスの数を前記既定の閾値に達しさせると決定することに応答して、前記下位レベルメモリから前記データストリームの一部を書き込み許可付きでプリフェッチするようにさらに構成されている、請求項１２に記載のプリフェッチユニット。
【請求項１４】
特定のデータストリームに対応する特性データを記憶するように各々が構成された複数の入力を含む表をさらに備え、特定のデータストリームに対応する前記特性データは、データストリーム識別子（ＩＤ）、各要求リクエストの読み出し／書き込みアクセスタイプ、各要求リクエストのアドレス、要求リクエストのキャッシュヒット／ミス状況、および要求リクエストに対応する初期のプリフェッチアドレスのうちの少なくとも１つを含む、請求項１２に記載のプリフェッチユニット。
【請求項１５】
前記下位レベルメモリからの前記データストリームの一部は、１つ以上の連続するキャッシュラインに対応する、請求項１２に記載のプリフェッチユニット。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、コンピューティングシステムに関するものであり、より具体的には、効率的なキャッシュラインのプリフェッチに関するものである。
【背景技術】
【０００２】
最新のマイクロプロセッサは、各プロセッサがソフトウェアアプリケーションの命令を実行する能力を有する、１つ以上のプロセッサコアまたはプロセッサを含む場合がある。これらのプロセッサは、一般的に、パイプライン型であり、段階間に配置された記憶素子（例えば、レジスタおよび配列）と直列に接続された１つ以上のデータ処理段階を含む。理想的には、全てのクロックサイクルは、パイプラインの各段階における命令が有効に実行される。しかしながら、パイプライン内のストールは、特定のパイプライン段階中に実行されるべき有効な動作を実行しない場合がある。典型的にはマルチサイクルストールであるストールの一例は、データキャッシュミスまたは命令キャッシュミスである。より上位レベルのキャッシュおよび／またはシステムメモリからのデータ検索には、相当な待ち時間となる場合がある。メモリからのデータ検索に必要なプロセッササイクルの総数であるこの待ち時間は、プロセッサの周波数がシステムメモリのアクセスタイムよりも速く増大する場合に、急激に長くなる。
【０００３】
種々の実施形態では、システムメモリは、プロセッサにおいて２つ以上のキャッシュ階層レベルを含んでもよい。システムメモリの階層におけるより最近のレベルは、ダイナミックランダムアクセスメモリ（ＤＲＡＭ）、デュアルインラインメモリモジュール（ｄｉｍｍｓ）、ハードディスクなどへのメモリコントローラによるアクセスを含んでもよい。メモリのこれらのより下位レベルへのアクセスには、相当な数のクロックサイクルが必要となる。マルチコアマイクロプロセッサの多重コアにおいて共有されてもよい複数レベルのキャッシュは、キャッシュヒットが存在するときの待ち時間を短縮するための補助となる。しかしながら、キャッシュサイズが増大し、より最近のレベルのキャッシュ階層がプロセッサコア（複数可）からさらに離れて位置する場合には、リクエストされたメモリラインがキャッシュに存在するか否かを判定する待ち時間はさらに長くなる。ＤＲＡＭアクセスの後に、ヒットしない各キャッシュレベルの順次または並列アクセスに続くメモリリクエストをプロセッサコアが有するべき場合には、メモリリクエストに与えられる全体の待ち時間が重要となる場合がある。
【０００４】
前述の問題に起因する全体の性能低下を軽減するための解決策の１つは、クロックサイクルによって、多重命令の順番になっていない実行を含むキャッシュミスに起因するキャッシュラインフィルトランザクションを重複することである。しかしながら、いくつかのクロックサイクルのストールは、有効な動作を含むストールサイクルの完全な重複を防ぐ場合がある順番通りのリタイアメントのために、プロセッサの性能をなおも減少させる。別の解決策は、現在処理されているデータよりも先に既定数のキャッシュラインの、ＤＲＡＭなどのより下位レベルメモリに推測プリフェッチリクエストを用いることである。このプリフェッチリクエストは、１つ以上のレベルのキャッシュサブシステムへの現在のメモリリクエストと直列であっても、または並行であってもよい。それ故、現在のメモリリクエスト後の、記憶階層から次のメモリリクエストにアクセスする待ち時間は大幅に短縮される場合がある。データは予めメモリコントローラのキャッシュ内に存在してもよく、より前の推測プリフェッチリクエストのためにメモリコントローラに直ぐに到達してもよい。
【０００５】
データストリーム検出のためにデータストリームプリフェッチユニットが用いられてきた。データストリームは、連続するデータブロックを参照する一連のメモリアクセスとして定義されてもよい。連続するデータブロックは、１つ以上の記憶階層レベルに記憶されてもよい。例えば、データブロックはメインメモリに記憶されてもよく、読み出され、かつより上位レベルの記憶階層の１つ以上のキャッシュに送信されてもよい。記憶階層のより下位レベルからより上位レベルへの、この連続するデータブロックの伝達は、キャッシュラインフィルトランザクションの結果でもある。代替的に、この連続するデータブロックの伝達は、プリフェッチトランザクションの結果であってもよい。一例では、画像または画素をシャープにするためのアルゴリズムの実行にデータストリームが用いられる場合がある。このようなアルゴリズムは、以下のループ式、ａ［ｉ］＝ｂ［ｉ］＋ｃ［ｉ］を用いてもよい。
【０００６】
データストリームの検出は、単調増加または単調減少の様態で連続するキャッシュラインの組を参照する一連のメモリアクセスの識別を含んでもよい。データストリームプリフェッチユニットは、データストリームの検出に応答して、現在リクエストされているキャッシュラインよりも先に、既定数のキャッシュラインのプリフェッチを開始してもよい。データストリームプリフェッチユニットは、散在されたロードおよび記憶アクセスを含むデータストリーム（これ以降、混合アクセスデータストリームと称する）を追跡し、ミスアドレスのアクセスタイプ（ロードまたは記憶）を無視する。本明細書に用いられる場合、記憶操作または記憶命令は書き込みアクセスであり、一方、ロードオペレーションまたはロード命令は読み出しアクセスである。それ故、データストリームプリフェッチユニットは、読み出し専用状態において全てのキャッシュラインをプリフェッチする。この読み出し専用状態は、例えば、ＭＯＥＳＩ−キャッシュコヒーレンスプロトコルに関連する場合がある。状態変更リクエストを発行するために、プリフェッチライン上でヒットするプロセッサからの要求アクセスストリームにおける第１の記憶動作が要求される。状態変更リクエストは、キャッシュラインへの書き込み許可を取得する。状態変更リクエストは、キャッシュラインをプリフェッチする利益を低減する。
【発明の概要】
【発明が解決しようとする課題】
【０００７】
前述の内容を考慮して、効率的なキャッシュラインプリフェッチのための効率的な方法およびメカニズムが所望される。
【課題を解決するための手段】
【０００８】
プロセッサにおける効率的なキャッシュラインのプリフェッチのためのシステムおよび方法が開示される。一実施形態では、コンピューティングシステムは、キャッシュ、下位レベルメモリ、非推測要求リクエストを伝達するように構成されたプロセッサコアにおけるロード／記憶バッファ、およびプロセッサコアにおけるプリフェッチユニットを備えている。一例では、画像または画素をシャープにするためのアルゴリズムの実行にデータストリームが用いられてもよい。このようなアルゴリズムは、以下のループ式、ａ［ｉ］＝ｂ［ｉ］＋ｃ［ｉ］を用いてもよい。プリフェッチユニットは、特定のデータストリームに対応する特性データを記憶する。
【０００９】
データストリームの検出は、単調増加または単調減少様態において連続するデータブロックの組を参照する一連のストレージアクセスの識別を含んでもよい。他の既存データストリームのミスアドレスに連続しない初期の対応するミスアドレスは、新規のデータストリームの先頭部でもよい。プリフェッチユニットが新規のデータストリームを検出すると、既定のトレーニング期間に入る場合がある。
【００１０】
特定のデータストリームに関するトレーニング期間が終了すると、プリフェッチユニットは、所与のデータストリームへの第１の書き込みアクセスの検出が無いことに応答し、書き込み許可なしに、下位レベルメモリから所与のデータストリームの一部のプリフェッチを開始してもよい。また、プリフェッチユニットは、トレーニング期間の終了後、所与のデータストリームへの第１の書き込みアクセスの検出に応答して、書き込み許可を取得して、下位レベルメモリから所与のデータストリームの別個の一部のプリフェッチを開始できる。この時の書き込み許可の取得により、後続のプリフェッチされるキャッシュラインにおいて検出される記憶動作に関する後続の状態変更ペナルティを回避する場合がある。それ故、後続の記憶動作を含むキャッシュラインのプリフェッチの利益がなおも保持される。
【００１１】
以下の記述および添付図面を参照して、これらのおよび他の実施形態が明らかとなる。
【図面の簡単な説明】
【００１２】
【図１】例示のマイクロプロセッサの一実施形態を示す一般化されたブロック図である。
【００１３】
【図２】順番になっていない実行を実施する汎用プロセッサコアの一実施形態を示す一般化されたブロック図である。
【００１４】
【図３】メモリリクエストの異なるソースを示すメモリインターフェースの一実施形態を示す一般化されたブロック図である。
【００１５】
【図４】プリフェッチユニットの状態および状況遷移を示す表の一実施形態を示す一般化されたブロック図である。
【００１６】
【図５】プリフェッチユニット内の特性データの記憶の一般化されたブロック図である。
【００１７】
【図６】プロセッサにおける効率的なキャッシュラインのプリフェッチ方法の一実施形態を説明するフローチャートである。
【００１８】
【図７】プロセッサにおける効率的なキャッシュラインのプリフェッチを継続する方法の一実施形態のフローチャートである。
【００１９】
【図８】プロセッサにおける効率的なキャッシュラインのプリフェッチを継続する方法の一実施形態のフローチャートである。
【発明を実施するための形態】
【００２１】
本発明は種々の変形および代替的な形状により影響を受けるが、特定の実施形態が例示として図面により示され、本明細書において詳細に記載される。しかしながら、それに関する図面および詳細な説明が、開示する特定の形状に本発明を限定することを意図せず、それどころか、本発明が添付の特許請求の範囲により定義される本発明の精神および範囲内に含まれる全ての変更、均等物および代替物を含むことを理解するべきである。
【００２２】
以下の説明では、本発明の完全な理解を提供するための多くの具体的な詳細が記載される。しかしながら、これらの具体的な詳細が無くとも、本発明が実行可能であることを当業者は理解するはずである。いくつかの例では、本発明をあいまいにすることを回避するために、周知の回路、構造、および技術は詳細には示されない。
【００２３】
図１を参照すると、例示のプロセッサ１００の一実施形態を示す。プロセッサ１００は、示す実施形態ではマイクロプロセッサであり、メモリコントローラ１２０、インターフェースロジック１４０、１つ以上のプロセシングユニット１１５、クロスバー相互接続ロジック１１６、および共有キャッシュメモリサブシステム１１８を備えてもよく、プロセシングユニット１１５はさらに、１つ以上のプロセッサコア１１２、およびそれに対応するキャッシュメモリサブシステム１１４を備えてもよい。一実施形態では、示されたマイクロプロセッサ１００の機能性は、単一集積回路上に組み込まれる。
【００２４】
インターフェース１４０は、通常、マイクロプロセッサ１００から離れた入力／出力（Ｉ／Ｏ）デバイスとのインターフェースを、共有キャッシュメモリサブシステム１１８およびプロセシングユニット１１５に提供する。本明細書に用いられる場合、番号の後に続く文字により参照される要素は、数字のみにより集合的に参照されてもよい。例えば、プロセシングユニット１１５ａ〜１１５ｂは、プロセシングユニット１１５、またはユニット１１５と集合的に参照されてもよい。Ｉ／Ｏデバイスは、プリンタ、キーボード、モニタ、カメラ、カードリーダ、ハードもしくはフロッピー（登録商標）ディスクドライブまたはドライブコントローラ、ネットワークインターフェースカード、ビデオアクセラレータ、オーディオカード、モデム、汎用インターフェースバス（ＧＰＩＢ）またはフィールドバスインターフェースカードなどの種々のデータ収集カードなどの周辺ネットワークデバイスを含んでもよい。さらに、インターフェース１４０は、他のマイクロプロセッサおよび／または他の処理ノードとの通信に用いられてもよい。インターフェースロジック１４０は、通常、対応するリンクからパケットを受信し、対応するリンク上で送信されるべきパケットをバッファリングするバッファを備えてもよい。マイクロプロセッサ１００への、およびマイクロプロセッサ１００からのパケットの伝達には、任意の適切なフロー制御メカニズムが用いられてもよい。
【００２５】
マイクロプロセッサ１００は、各メモリコントローラ１２０を介して各メモリに連結されてもよい。メモリは任意の適切なメモリ装置を備えてもよい。例えば、メモリは、１つ以上のＲＡＭＢＵＳダイナミックランダムアクセスメモリ（ＤＲＡＭ）、シンクロナスＤＲＡＭ（ＳＤＲＡＭ）、ＤＲＡＭ、スタティックＲＡＭなどを備えてもよい。マイクロプロセッサ１００のアドレス空間は、多重メモリの中で分割されてもよい。各マイクロプロセッサ１００またはマイクロプロセッサ１００を備えるそれぞれの処理ノードは、メモリマップを含んでもよく、これは、どのアドレスがどのメモリにマッピングされるかの判定、そしてそれ故、特定のアドレスに関するメモリリクエストを、どのマイクロプロセッサ１００または処理ノードに対してルーティングするかの判定に用いられる。一実施形態では、アドレスに関するコヒーレンス点は、アドレスに対応するバイトを記憶するメモリに連結されたメモリコントローラ１２０である。メモリコントローラ１２０は、メモリとインターフェース接続するための制御回路を備えてもよい。さらに、メモリコントローラ１２０は、メモリリクエストを待ち行列に入れるためのリクエストキューを含んでもよい。前述に加えて、メモリコントローラ１２０はプリフェッチユニットを含むか、プリフェッチユニットに連結されてもよい。
【００２６】
一般的に、クロスバー相互接続ロジック１１６は、インターフェース１４０に連結されたリンク上で受信した受信制御パケットに応答し、プロセッサコア１１２および／またはキャッシュメモリサブシステム１１４に応答して制御パケット生成し、プローブコマンドを生成し、メモリコントローラ１２０により選択された提供するためのトランザクションに応答してパケットに応答し、マイクロプロセッサを備えた中間ノードに関するパケットを、インターフェースロジック１４０を通して他のノードにルーティングするように構成されている。インターフェースロジック１４０は、パケットを受信し、そのパケットをクロスバー相互接続１１６によって用いられる内部クロックに同期させるロジックを含んでもよい。クロスバー相互接続１１６は、プロセッサコア１１２からのメモリリクエストを、共有キャッシュメモリサブシステム１１８またはメモリコントローラ１２０、およびより下位レベルのメモリサブシステムに伝達するように構成されてもよい。また、クロスバー相互接続１１６は、メモリコントローラ１２０を介して、下位レベルメモリから受信したメモリラインおよび制御信号を、プロセッサコア１１２並びにキャッシュメモリサブシステム１１４および１１８に伝達してもよい。クロスバー相互接続１１６、メモリコントローラ１２０、インターフェース１４０、およびプロセッサユニット１１５間の相互接続バスの実装は、任意の適切な技術を含んでもよい。
【００２７】
キャッシュメモリサブシステム１１４および１１８は、データブロックを記憶するように構成された高速キャッシュメモリを備えてもよい。キャッシュメモリサブシステム１１４は、それぞれのプロセッサコア１１２内で一体化されてもよい。代替的に、キャッシュメモリサブシステム１１４は、所望に応じて、バックサイドキャッシュ構成またはインライン構成でプロセッサコア１１２に連結されてもよい。なおさらに、キャッシュメモリサブシステム１１４は、キャッシュ階層として実施されてもよい。プロセッサコア１１２により近いキャッシュは、所望する場合は、（階層内で）プロセッサコア１１２に一体化されてもよい。一実施形態では、キャッシュメモリサブシステム１１４は、それぞれ、Ｌ２キャッシュ構造を示し、共有キャッシュサブシステム１１８はＬ３キャッシュ構造を示す。
【００２８】
キャッシュメモリサブシステム１１４および共有キャッシュメモリサブシステム１１８の両方が、対応するキャッシュコントローラに連結されたキャッシュメモリを含んでもよい。プロセッサコア１１２は、所定の汎用命令の組に従い命令を実行する回路を含む。例えば、ｘ８６命令の組のアーキテクチャが選択されてもよい。代替的に、アルファ、パワーＰＣ、または任意の他の汎用命令の組のアーキテクチャが選択されてもよい。通常、プロセッサコア１１２は、データおよび命令のためにそれぞれ、キャッシュメモリサブシステム１１４にアクセスする。キャッシュメモリサブシステム１１４または共有キャッシュメモリサブシステム１１８の中にリクエストされたブロックが見つからない場合には、読み出しリクエストが生成されてもよく、不足しているブロックがマッピングされた位置の途中で、メモリコントローラ１２０に送信されてもよい。
【００２９】
図２は順番になっていない実行を実施する汎用プロセッサコア２００の一実施形態を示す。命令キャッシュ（ｉ−キャッシュ）および対応するトランスレーションルックアサイドバッファ（ＴＬＢ）２０２は、ソフトウェアアプリケーションに関する命令、および命令にアクセスするためのアドレスを記憶してもよい。キャッシュ２０２および２２２の両方がプロセッサコア２００内部に配置されてもよく、または例えば、図１のキャッシュメモリサブシステム１１４の中などのように、外側に配置されてもよい。命令フェッチユニット（ＩＦＵ）２０４は、ｉ−キャッシュミスが存在しない場合に、クロックサイクルに従って、ｉ−キャッシュ２０２から多重命令をフェッチすることができる。ＩＦＵ２０４は、ｉ−ＴＬＢのアドレスと比較される場合がある、ｉ−キャッシュ２０２においてフェッチするために、次の命令のアドレスに関するポインタを保持するプログラムカウンタを含んでもよい。ＩＦＵ２０４は、最新のパイプライン段階における実際の結果を実行ユニットが決定する前に、条件命令の結果を予測する分岐予測ユニットをさらに含んでもよい。
【００３０】
復号器ユニット２０６は、多重フェッチ命令のオペコードを復号し、レコーダバッファ２０８などの順番通りのリタイアメントキューに入力を割り当てる場合がある。入力は再順番付けバッファ２０８への割り当て後、整数キュー２１２および浮動小数点キュー２１６に割り当てられる場合がある。ロード／記憶ユニット２２０内での入力キューは、所望する場合、実行ユニット２１０内での割り当て後、またはそれと同時に割り当てられてもよい。実行ユニット２１０および／またはロード／記憶ユニット２２０内での入力の割り当ては、ディスパッチと考えられる。実行ユニット２１０の説明は、メモリアクセスの記述の後に続くであろう。
【００３１】
ロード動作および記憶動作などのメモリアクセスが、ロード／記憶ユニット２２０に発行される。ロード／記憶ユニット２２０は、メモリアクセス命令を実行するためのキューおよびロジックを含んでもよい。また、ロード命令による、正確に最新の記憶命令からの転送データの受信を確実にする検証ロジックが、ロード／記憶ユニット２２０に常駐してもよい。ロード／記憶ユニット２２０は、チップ上において１つ以上のレベルのデータキャッシュ（ｄ−キャッシュ）２２２にメモリアクセスリクエスト２２４を送信してもよい。各レベルのキャッシュは、メモリリクエスト２２４と共にアドレス比較に関するその独自のＴＬＢを有してもよい。各レベルのキャッシュ２２２は、順次の様態でまたは並行の様態で検索されてもよい。リクエストされるメモリラインがキャッシュ２２２において見つからない場合には、次に、キャッシュ１１４および１１８などのような下位レベルのキャッシュメモリ、または場合によってはオフチップメモリに、メモリリクエスト２２４が送信される。順次または並行検索、他のメモリへの可能性のあるリクエスト、およびリクエストされるメモリラインに到着するための待ち時間は、十分な数のクロックサイクルを要求する場合がある。
【００３２】
実行ユニット２１０およびロード／記憶ユニット２２０からの結果は、共通データバス２３０に示されてもよい。この結果は再順番付けバッファ２０８に送信されてもよい。一実施形態では、再順番付けバッファ２０８は、プログラム順序に従う命令の順番通りのリタイアメントを確実にする先入れ先出し（ＦＩＦＯ）キューでもよい。ここで、その結果を受信する命令がリタイアメントのためにマークされる。命令がキューの先頭部である場合には、それは対応するアーキテクチャレジスタファイルに送信される結果を有してもよい。各キュー２１２および２１６は、対応するアーキテクチャレジスタファイルを保持してもよい。アーキテクチャレジスタファイルは、プロセッサコア２００の汎用レジスタのアーキテクチャ状態を保持してもよい。次に、再順番付けバッファ内の命令が順番通りにリタイアしてもよく、そのキュー先頭部のポインタが、プログラムの順番で後続の命令に対して調整されてもよい。
【００３３】
共通データバス２３０における結果は、その結果に関する命令待ち時間のオペランドに値を転送するために、実行ユニット２１０に送信されてもよい。例えば、算術命令が、以前の算術命令の結果に依存するオペランドを有してもよく、またはロード命令が、機能ユニット２１４におけるアドレス生成ユニット（ＡＧＵ）により計算されたアドレスを必要としてもよい。これらの待ち時間命令がそれらのオペランドに関する値を有し、ハードウェアリソースがこの命令を実行するために利用可能な場合には、これらの命令は、キュー２１２および２１６からそれぞれ機能ユニット２１４および２１６またはロード／記憶ユニット２２０の適切なリソースに順番通りでなく発行されてもよい。
【００３４】
コミットされていない、またはリタイアしていないメモリアクセス命令は、ロード／記憶ユニット２２０内に入力を有する。インフライトに関する転送されたデータ値、または最新かつコミットされていないより古い記憶命令からのコミットされていないロード命令は、共通データバス２３０に配置されてもよく、または単にロード／記憶ユニット２２０内のロードバッファへの適切な入力にルーティングされてもよい。
【００３５】
実行ユニット２１０に戻ると、キュー２１２および２１６は、それらのオペランドが利用可能になるのを待つ、対応する整数および浮動小数点命令を記憶してもよい。レジスタリネーミングおよび実行スケジューリングが、キュー２１２および２１６内、または図示しない周囲の対応する回路内で生じてもよい。オペランドが利用可能になり、さらにハードウェアリソースも利用可能になると、命令が、キュー２１２および２１６から、整数機能ユニット２１４、浮動小数点機能ユニット２１８、および／またはロード／記憶ユニット２２０に順番通りでなく発行されてもよい。整数機能ユニット２１４の各組は、加算、減算、アドレス生成、分岐条件命令の結果の決定、乗算、除算などの整数計算機計算のための算術論理演算ユニット（ＡＬＵ）を含んでもよい。浮動小数点機能ユニット２１８は、浮動小数点加算、減算、乗算、除算、平方根、整数から浮動小数点への換算、浮動小数点から整数への換算などを実行する回路を含んでもよい。
【００３６】
一実施形態では、多重整数機能ユニット２１４は、マイクロプロセッサ命令スループットを増大するためにインスタンス化されてもよい。例えば、プロセッサコア２００は、多重ソフトウェアスレッドの実行を実行するように構成されてもよい。マイクロプロセッサ１００、および対応するプロセッサコア２００に対するオペレーティングシステムは、メモリ領域をソフトウェアアプリケーションに割り当てる。ソフトウェアアプリケーションがコンパイルされるときに、アプリケーションは多重プロセスを含んでもよい。このような実施形態では、各プロセスは、メモリ画像、またはアプリケーション実行前の命令およびデータのインスタンスなどのその独自のリソースを所有してもよい。また、各プロセスは、コード、データ、および場合によってはヒープおよびスタックに対処するアドレス空間、データ変数、スタックポインタ、汎用レジスタおよび浮動小数点レジスタ、プログラムカウンタなどの制御レジスタ、ｓｔｄｉｎ、ｓｔｄｏｕｔなどのオペレーティングシステム記述子、ならびにプロセッサの所有者およびプロセスの許可の組といったセキュリティ属性などのプロセス固有情報を含んでもよい。
【００３７】
ソフトウェアアプリケーションの各プロセスは、さらにソフトウェアスレッドに分けられてもよい。最新のマイクロプロセッサの多くは、２つ以上のソフトウェアスレッドを並行実行するように構成される。これらのマイクロプロセッサは、並列実行、およびオペレーティングシステムのカーネルによる割り当てに対して利用可能であり２つ以上のハードウェアスレッドまたはストランドを有してもよい。例えば、マルチスレッドマイクロプロセッサに対して、各整数機能ユニット２１４は、特定のユニット２１４内のハードウェアリソースの利用可能性に応じて、クロックサイクルごとに、特定のスレッドの１つ以上の整数命令を受信してもよい。命令フェッチユニット２０４から整数キュー２１２への回路は、各ユニットのハードウェアを複製することなく、プロセッサコア２００の２つ以上のストランドを管理するように変更されてもよい。例えば、スレッドのアーキテクチャ状態を保持するレジスタは複製されてもよいが、実行ハードウェアリソースは複製されない。
【００３８】
別の実施形態では、プロセッサコア２００のマルチスレッド実行は、単一スレッドの実行のために利用されるクラスタ全体のコピーのインスタンス化を含んでもよく、一実施形態では、復号器ユニット２０６から命令機能ユニット２１４への回路を備える。このような実施形態では、この回路は整数実行クラスタと呼ばれる場合がある。別の実施形態では、浮動小数点コプロセッサは、復号器ユニット２０６から浮動小数点機能ユニット２１８への回路を含んでもよい。この浮動小数点コプロセッサのインスタンス化の数は、整数実行クラスタのインスタンス化の数より少なくてもよい。このような実施形態では、各浮動小数点コプロセッサは２つ以上のスレッドに相当し、一方、各整数実行クラスタは単一の異なるスレッドに相当する。命令フェッチユニット２０４は、コア２００内の多重スレッドを管理する回路を含むことになり、各クラスタに、１つ以上の利用可能な対応する特定のスレッドの命令を供給することになる。この場合では、各クラスタはストランドまたはハードウェアスレッドである。
【００３９】
整数機能ユニット２１４の各コピーに付随するために、浮動小数点ユニット２１８の多重コピーをインスタンス化することが、回路論理の観点から所望されるかもしれないが、ハードウェア実施の観点からは所望されないかもしれない。例えば、浮動小数点機能ユニット（ＦＰＵ）２１８は、多量のオンダイのリアルエステートを消費する複合論理を含んでもよい。また、浮動小数点オペレーションは多くの場合に、プログラムコードでは実行されない。それ故、ハードウェアの設計者は、ダイ上で浮動小数点機能ユニット２１８の独立した高価なコピーを生成する意欲をおこさせないかもしれない。
【００４０】
ここで図３を参照すると、メモリリクエストの異なるソースを示すメモリインターフェース３００の一実施形態が示される。図３に示す構成要素が、構成要素の実際の物理的配置ではなく、構成要素の一般的構成および連結を示すことに留意されたい。図２および図３に用いられる回路およびロジックは、適切な番号が付けられている。物理的配置の例は、図１および図２に示される場合がある。一実施形態では、メモリサブシステム３３０は、付随するミスバッファ３３４をともなう、コンピューティングシステムのオンコアＬ２キャッシュに対応する場合があるキャッシュメモリ３３２を備える。このような実施形態では、オンコアＬ１ｉ−キャッシュ２０２およびＬ１ｄ−キャッシュ２２２は、それぞれのキャッシュ内で失われたメモリ参照命令に関連するアドレスを保持するための関連するオンコアミスバッファを有してもよい。別の実施形態では、キャッシュメモリ３３２は、ミスバッファ３３４内の付随する１つ以上のミスバッファをともなう、Ｌ１ｉ−キャッシュ２０２、Ｌ１ｄ−キャッシュ２２２、Ｌ２ｄ−キャッシュ、およびＬ３ｄ−キャッシュなどのような複数レベルのキャッシュ階層を備えてもよい。他の組み合わせも可能であり、考慮される。下位レベルメモリ３４０は、コンピューティングシステムのメインメモリを備えてもよい。キャッシュメモリ３３２およびプリフェッチユニット３２０の両方が下位レベルメモリ３４０に連結されてもよい。プリフェッチユニット３２０は、メモリサブシステム３３０を介してプリフェッチリクエストを送信してもよく、メモリサブシステム３３０を独立して形成してもよい。プリフェッチユニット３２０は、それ自体がキャッシュヒットおよびキャッシュミスの両方を検出できるように、ミスバッファ３３４内には配置されない。この検出は、より詳細には下記するように、トレーニング状態および伝搬状態の両方のプリフェッチユニット３２０において有効である場合がある。
【００４１】
キャッシュメモリ３３２は、以前のレベルのキャッシュライン全てを含んでもよい。一実施形態では、Ｌ１ｄ−キャッシュ２２２から複雑さを除くために、Ｌ１ｄ−キャッシュはライトスルーキャッシュとして実施されてもよく、Ｌ２キャッシュはメモリ順序およびコヒーレンス発行を管理する。それ故、コア２００内のメモリリクエストは、Ｌ１ｄ−キャッシュ２２２およびキャッシュメモリ３３２などのＬ２キャッシュの両方に送信される。
【００４２】
キャッシュメモリ３３２は、記憶キュー３１０およびロードバッファ３１２両方からの非推測要求リクエストを提供してもよい。キャッシュメモリ３３２はさらに、プリフェッチユニット３２０からの推測プリフェッチリクエストを提供してもよい。プリフェッチユニット３２０からの推測プリフェッチリクエストは、データが実際に必要となるよりも前に、データをキャッシュメモリ３３２に送るように意図されてもよく、これにより、メモリアクセスに関連する待ち時間が短縮する場合がある。
【００４３】
一実施形態では、ミスバッファ３３４は、それらが完了するのが困難な状況に遭遇した場合に、ロード、プリフェッチ、および記憶命令などの全ての読み出しおよび書き込み操作を待ち行列に入れる複数の入力を備える。例えば、リクエストされたキャッシュラインは、キャッシュメモリ３３２に存在しなくてもよい。代替的に、リクエストされたキャッシュラインはキャッシュメモリに存在してもよいが、それは特定のキャッシュコヒーレンス状態を有しない。例えば、キャッシュメモリ３３２内の対応するキャッシュラインがキャッシュコヒーレンスプロトコルの排他状態にない場合に、記憶動作においてキャッシュミスが生じる場合がある。記憶動作を提供するための追加の待ち時間を含む、後続の状態変更リクエストが送信される場合がある。一実施形態では、キャッシュメモリ３３２は、メモリモデルに関する広範囲の命令ポイントとなるように選択されてもよい。メモリモデルの規則に従うために、記憶階層内に広範囲の命令ポイントが必要となる場合がある。この広範囲の命令ポイントは、全ての記憶動作に対する参照として機能する関連するライトスルーＬ１キャッシュと共に、Ｌ２キャッシュでもよいキャッシュメモリ３３２を含んでもよい。キャッシュメモリ３３２は、記憶動作の、一貫性があり、かつ適切な順序を全ての消費者が確認するであろうことが確実になるように機能することの責任を有する。
【００４４】
少なくともＩＦＵ２０２、記憶キュー３１０、ロードバッファ３１２においてメモリリクエストは生成されてもよい。これらのメモリリクエストは要求メモリリクエストと呼ばれてもよい。前述のように、ＩＦＵ２０２は、フェッチするスレッドを選択し、選択されたスレッドに関する命令を、図３の対応するＬ２キャッシュメモリ３３２をともなうＬ１キャッシュに相当する場合があるｉ−キャッシュ２０５からフェッチするように構成されてもよい。記憶キュー３１０は、選ばれたスレッドに関してコミットされた記憶命令のデータを書き出すために、選ばれたスレッドに対して、同じＬ１およびＬ２キャッシュにメモリリクエストを伝達するように構成されてもよい。
【００４５】
ロードバッファ３１２は、実行されるロード命令のデータを読み取るために、選ばれたスレッドに対して同じＬ１およびＬ２キャッシュにメモリリクエストを伝達するように構成されてもよい。データストリームプリフェッチユニット、またはプリフェッチユニット３２０は、現在リクエストされているキャッシュラインよりも先に既定数のキャッシュラインをプリフェッチするために、選ばれたスレッドに対して同じＬ１およびＬ２キャッシュに推測プリフェッチリクエストを伝達するように構成されてもよい。プリフェッチユニット３２０は、データストリームを検出するために用いられてもよい。データストリームは、単調増加または単調減少の様態で連続するキャッシュラインの組を参照する一連のストレージアクセスとして定義されてもよい。それ故、一実施形態では、記憶キュー３１０、ロードバッファ３１２、およびプリフェッチユニット３２０を含む、ＬＳＵ２２０内のプロセッサコア２００の少なくとも３つのソースは、キャッシュインターフェース３２５を介するＬ２キャッシュメモリ３３２へのアクセスを奪い合う。
【００４６】
前述のように、キャッシュメモリ３３２は、記憶キュー３１０およびロードバッファ３１２両方からの非推測要求リクエストを提供してもよい。キャッシュメモリ３３２はさらに、プリフェッチユニット３２０がデータストリームを検出した後に、プリフェッチユニット３２０からの推測プリフェッチリクエストを提供してもよい。メモリサブシステム３３０が提供した各リクエストのヒット／ミス状況は、メモリサブシステム３３０からＬＳＵ２２０に伝達されてもよい。一実施形態では、データストリーム検出およびデータストリームに関するプリフェッチリクエストをいつ開始するかの決定の両方にヒット／ミス状況が用いられてもよい。例えば、プリフェッチユニット３２０は、他の既存データストリームのミスアドレスに連続しないミスアドレスを検出する場合がある。この特定のミスアドレスは、新規のデータストリームの最初の部分である場合がある。この特定のアドレスに近接および連続するミスアドレスが既定数に達すると、トレーニング期間が終わる場合があり、プリフェッチユニットは、この新規のデータストリームに関するデータのプリフェッチを開始する場合がある。
【００４７】
一実施形態では、プリフェッチユニット３２０は、書き込み許可をリクエストしないプリフェッチリクエストを送信する間に、非推測要求リクエストのロードまたは記憶アクセスタイプを検出するように構成されてもよい。この要求リクエストは、ロードおよび記憶アクセスと共に散在される混合アクセスデータストリーム内であってもよい。これにより、プリフェッチユニット３２０は、書き込み許可をリクエストするトレーニング期間の終了後、第１のメモリアクセス動作を検出可能になる。一実施形態では、記憶動作がアクセスしたデータを修正する場合があるように、記憶動作は明示的または暗示的の何れかで書き込み許可をリクエストする動作の一例である。アクセスされたデータを修正する場合がある他の動作は、同様に、明示的にまたは暗示的に書き込み許可をリクエストする場合がある。例えば、読み取り／ロード排他動作に意図するかどちらかのロード動作の一例である。それ故、特定の読み取り型の動作もまた、明示的にまたは暗示的に、書き込み許可をリクエストする場合がある。書き込み許可をリクエストするかかるオペレーションの任意の所望の組み合わせを用いる実施形態が考慮される。種々の実施形態では、検出された動作後の、書き込み許可をリクエストするプリフェッチリクエストは、プリフェッチされたデータに関する書き込み許可の取得を含んでもよいが、一方、このような動作検出前のプリフェッチリクエストは、書き込み許可がなくても、データをプリフェッチする場合がある。このようなアプローチの利用では、以前に検出されたオペレーション後の、書き込み許可をリクエストする推測プリフェッチリクエストは、書き込み許可を取得するための必要からもたらされる最新の状態変更ペナルティを回避する場合がある。
【００４８】
一実施形態では、プリフェッチユニット３２０は、トレーニング期間後の第１の記憶動作において特定のデータストリームが検出されたか否かを追跡するために、各プリフェッチリクエストに関するスティッキ記憶ビットを用いてもよい。このスティッキ記憶ビットは一旦設定されると、プリフェッチユニット３２０が同一のデータストリームに関するロードアクセスをその後検出した場合でさえもその設定を維持できる。対応するスティッキ記憶ビットが、プリフェッチユニット３２０内で特定のデータストリームの入力用に設定されている場合には、それは特定のデータストリームに対応する非推測要求リクエストアドレスセットよりも前に、記憶動作が検出されたことを示す場合がある。続いて、この特定のデータストリームに対応する送信された推測プリフェッチリクエストは、リクエストされたキャッシュラインの書き込み許可をリクエストしてもよい。
【００４９】
ここで図４を参照すると、プリフェッチユニットの状態および状況遷移を示す表３５０の一実施形態が示される。単調増加の様態で連続するキャッシュラインの組を参照するアドレスを追跡するために、汎用キャッシュライン境界アドレスＸ、およびキャッシュライン境界オフセットを用いる。アドレスがロードまたは記憶アクセスタイプのいずれに対応するかが示される。一実施形態では、プリフェッチユニット３２０においてモニタされた特定のデータストリームは、３つの状態、すなわち割り当て、トレーニング、および伝搬のうちの１つを有してもよい。
【００５０】
要求リクエストアドレスが既存データストリームの追跡されたアドレスに一致しない場合には、プリフェッチユニット３２０内に新規のデータストリームを割り当ててもよい。次に、この新規に割り当てられたデータストリームは、トレーニング状態に入る。トレーニング状態では、データストリームがトレーニング期間を経ることにより、後続の要求リクエストミスアドレスを、対応する以前のミスアドレスおよび予期される次の連続するミスアドレスと比較する。後続のミスアドレスの所定数がこのデータストリームに相当すると認識されると、このデータストリームはトレーニング状態から伝搬状態に遷移する。伝搬状態では、プリフェッチユニット３２０は、この同一のデータストリームに属する後続のアクセスを追跡し、現在参照されているキャッシュラインよりも先にキャッシュラインを検索するために推測プリフェッチリクエストを発行してもよい。さらに、対応するスティッキ記憶ビットが設定された場合には、送信された推測プリフェッチリクエストはさらに、プリフェッチされたキャッシュラインの書き込み許可を取得する。スティッキ記憶ビット、プリフェッチ状態、および書き込み許可状態は表３５０に全て示される。
【００５１】
表３５０のデルタフィールドにより、現在の要求リクエストアドレスに関連するプリフェッチアドレスに用いられるオフセットが決定されてもよい。示す例では、アドレスＸ−２は、追跡されるいずれの既存データストリームにも属していないものとして、プリフェッチユニット３２０に認識される場合がある。それ故、新規のデータストリームが割り当てられる。示す例では、簡易化のために、各要求リクエストアドレスがキャッシュミスに相当する。
【００５２】
示す例では、トレーニング状態から伝搬状態への遷移の認定に、既定数の３つのミスアドレスが用いられる。この例での３ミスアドレスは、Ｘ−２、Ｘ−１、およびＸを含む。別の既定数およびさらなる認定は、この遷移に関するシミュレーションに基づいて選ばれてもよい。一旦伝搬状態になると、プリフェッチユニット３２０は、書き込み許可無しに、プリフェッチ列においてＹで示されるプリフェッチリクエストを送信する。
【００５３】
プリフェッチリクエストにより、より下位レベルのメモリからのデータが、Ｌ１キャッシュ、Ｌ２キャッシュ、それらの両方、または他の組み合わせの中にフェッチされるか、取り出される。このデータの取り出しは、そのデータがＬＳＵ２２０によって必要とされるよりも先に行われることが好ましい。プリフェッチする概念は、データアクセスが頻繁に空間の局所性を示すことを認識する。空間局所性の一般的な表現は、少なくとも一つの命令により連続するキャッシュラインが参照されるように、単調増加（または、減少）シーケンスにおいてメモリブロックからのデータがアクセスされるデータストリームである。プリフェッチユニット３２０がデータストリームを検出する場合には、将来の参照が、同じ方向で現在のキャッシュラインに隣接するキャッシュラインのアドレスに対して生成されるであろうことを予測することが適切である場合がある。プリフェッチユニット３２０は、ソフトウェアアプリケーションがこれらを実際に必要とする前に、これらの隣接するキャッシュラインの１つ以上をプロセッサが検索できるようにする。他の実施形態では、プリフェッチユニット３２０が、より下位レベルの記憶階層にも連結される場合があることが留意される。例えば、トレーニングおよび伝搬はＬ２／Ｌ３ヒットおよびミスに基づく場合がある。このような代替手段の多くが可能であり、考慮される。
【００５４】
一実施形態では、プリフェッチユニット３２０内のロジックが１のデルタを計算する。このデルタ値は、第１の推測プリフェッチアドレスＸ＋１と、現在の要求リクエストアドレスＸとの間のオフセットを見出すために用いられてもよい。この例では、既定数のラインである４つのキャッシュラインが、プリフェッチリクエストに対して用いられる。それ故、推測アドレスＸ＋１〜Ｘ＋４が用いられる。別の実施形態では、異なる既定数のキャッシュラインが選ばれてもよい。さらに、この値は各プリフェッチリクエストに関する異なる値に対して計算されてもよい。
【００５５】
アドレスＸ＋２に対応するアクセスと共に、スティッキ記憶ビットが設定される。このスティッキ記憶ビットは、このデータストリームに関する最新のアクセス用の設定を維持する。それ故、対応するプリフェッチリクエストは書き込み許可を取得する。
【００５６】
ここで図５を参照すると、図３のプリフェッチユニット３２０内の特性データのストレージの一実施形態を示す。プリフェッチユニット３２０はデータストリーム配列４１０を含んでもよい。一実施形態では、ＬＳＵ２２０により生成されたアドレスなどの、データストリームの特性データを待ち行列に入れるように各入力４１２は構成されてもよい。別の実施形態では、キャッシュヒット／ミス状況がＬＳＵ２２０に送信されるまで、各入力４１２はアドレスを待ち行列に入れなくてもよい。リクエストアドレスフィールド４２０はこのようなアドレスを保持してもよい。一実施形態では、キャッシュライン境界に対応するアドレスの一部のみを待ち行列に入れてもよい。バイトオフセットに対応するビットは待ち行列に入れられなくてもよい。
【００５７】
特性データは要求リクエストのアクセスタイプ（ロードまたは記憶動作）を含んでもよく、フィールド４２８で待ち行列に入れられてもよい。生成されたアドレスに対応するキャッシュヒット／ミス状況は、フィールド４３０で待ち行列に入れられてもよい。スティッキ記憶ビット値はフィールド４３２において保持されてもよい。代替的に、入力依存性のないスティッキ記憶ビットおよびデータストリーム状態（すなわち、割り当て、トレーニング、伝搬）などの他の状況情報は、各入力４１２に記憶されるのではなく、特定のデータストリーム配列４１０に対応するレジスタにおいて待ち行列に入れられてもよい。
【００５８】
制御ロジック４４０は新規のデータストリームの割り当てを制御してもよい。一実施形態では、制御ロジック４４０は、プリフェッチユニット３２０の中心位置に存在する回路および記憶素子を含んでもよい。代替的な実施形態では、各データストリーム配列４１０は、それ独自の対応する制御ロジックを有してもよい。さらに、制御ロジック４４０はまた、既存データストリームの状況およびアドレス情報を更新してもよい。アドレスがＬＳＵ２２０、または代替的にミスバッファ３３４により伝達されると、各データストリーム配列４１０において、このアドレスとリクエストアドレスフィールド４２０と推測アドレスフィールド４２４との比較が行われてもよい。一致が見出されると、制御ロジック４４０は対応するデータストリーム配列４１０に別の入力を追加してもよい。データストリームの状態（すなわち、割り当て、トレーニング、伝搬）は、状況情報フィールド４３４または個々のレジスタに記憶されてもよい。この状態情報は制御ロジック４４０により更新されてもよい。
【００５９】
一実施形態では、各要求リクエストアドレスおよび各推測プリフェッチアドレスは、オンチップのリアルエステート制限に起因して、データストリーム配列４１０内のフィールド４２０および４２４に別個に記憶されない場合がある。むしろ、アドレスの範囲の記憶にはポインタフィールド４２２および４２６が用いられる場合がある。図３のキャッシュメモリ３３２にプリフェッチリクエストを送信するために、フィールド４２４に対応する推測アドレスが用いられる場合がある。一実施形態では、データストリームが伝搬状態である場合に、これらのプリフェッチリクエストが送信される。
【００６０】
生成されたアドレスがデータストリーム配列４１０内の待ち行列アドレスまたはそれから派生したアドレスに一致しない場合には、新規のデータストリームを生成されてもよい。一実施形態では、この比較から一致しないことが、新規のデータストリームを生成するための唯一の条件である場合がある。別の実施形態では、追加の条件は、生成されたアドレスが、プリフェッチリクエストがこのアドレスに既に送信されたことを示す状況情報をともなう、ミスバッファ３３４の任意の入力内には検出されないことを含んでもよい。他の認定状況が可能であり、考慮される。
【００６１】
制御ロジック４４０により新規のデータストリームが生成されることが決定されると、特定のデータストリーム配列４１０への割り当てが生成される。制御ロジック４４０は、最も長い間使われていない（ＬＲＵ）アルゴリズムなどの任意の所望の置換アルゴリズムを用いて、空配列４１０または上書きするための配列４１０を選択してもよい。
【００６２】
状況情報フィールド４３４は、ストリーム識別値（ＳＩＤ）、アップ／ダウンビット、待ち行列アドレスの先頭部、長さフィールド、および深度フィールドも含んでもよい。長さフィールドおよび待ち行列アドレスの先頭部は、データストリームの境界を定義してもよい。データストリームが最初に割り当てられる場合には、待ち行列フィールドの先頭部は、データストリーム内の第１のキャッシュラインのアドレスを含んでもよい。深度フィールドは対応するデータストリームに（例えば、積極的または保守的に）関連するプリフェッチレベルを示してもよい。この値は、プリフェッチ中に、リクエストのためのキャッシュラインの数を導き出すのに用いられてもよい。キャッシュラインの数は、特定の実施に応じて、プリフェッチごとに異なってもよく、一定数でもよい。
【００６３】
プリフェッチは積極的とるすことができ、または保守的とすることができる。積極性レベルは、プリフェッチの深度、またはコンピュータプログラムにより現在ロードされているか、またはコンピュータプログラム内に記憶されているキャッシュラインよりも先に、リクエストによりプリフェッチされたキャッシュラインの数に反映されてもよい。理想的には、キャッシュミスによる待ち時間ペナルティを回避しつつ、同時に、過度なプリフェッチを引き起こさない十分な数のキャッシュラインがプリフェッチされるように、プリフェッチ実施の深度は最適化される。過度のプリフェッチは、プロセッサに利用可能な所与の現在最大のデータ帯域幅に必要な数よりも多いキャッシュラインのプリフェッチを意味する。
【００６４】
プリフェッチするキャッシュラインの数は、帯域幅に対するメモリ待ち時間の割合を用いて制御ロジック４４０により判定される。メモリに顕著なこの割合よりも大きいプリフェッチリクエストの数により、待ち時間に起因するいかなる間隙も無しに、システムの全体の帯域幅が利用可能になる。並行データストリームの数などの、プリフェッチするキャッシュラインの数の判定には他のファクタが用いられてもよい。一つのデータストリームに対する最適なプリフェッチ深度は、別のデータストリームの最適深度と同じでなくてもよい。制御ロジック４４０は、プリフェッチ深度などのプリフェッチパラメータにわたる動的サポートおよびデータストリームの特定の制御を提供してもよい。図５に示すフィールドは特定の順序で示したが、他の組み合わせも可能であり、追加のフィールドが含まれてもよいことが留意される。フィールド４２０〜４３４に関するビット記憶情報は、連続していても、連続していなくてもよい。同様に、データストリーム配列４１０および制御ロジック４４０の配列は、より優れた設計トレードオフのための他の配置でもよい。
【００６５】
ここで図６を参照すると、プロセッサにおける効率的なキャッシュラインのプリフェッチ方法５００の一実施形態が示される。当業者は方法５００を変更して、代替的な実施形態を導き出してもよい。また、この実施形態のステップは示す逐次的な順序で示される。しかしながら、別の実施形態では、いくつかのステップは示すのとは異なる順序で実施されてもよく、いくつかのステップは並行実行されてもよく、いくつかのステップは他のステップと統合されてもよく、さらにいくつかのステップは無くてもよい。示される実施形態では、プロセッサコア２００は、ブロック５０２において１つ以上のソフトウェアアプリケーション命令を実行してもよい。コア２００は１つ以上のソフトウェアアプリケーションの命令をフェッチする。これらのフェッチされた命令はデコードされ、リネームされてもよい。リネームされた命令は実行のために後で取り上げられる。
【００６６】
ブロック５０４において、メモリ参照命令は要求リクエストをメモリに送信してもよい。一実施形態では、対応するアドレスはプリフェッチユニット３２０に伝達されてもよい。別の実施形態では、ブロック５０６においてキャッシュヒット／ミス状況が既知となるまで、プリフェッチユニット３２０に対応するアドレスを伝達しなくてもよい。アドレスがプリフェッチユニット３２０に伝達されると、このアドレスは、ブロック５０８において、プリフェッチユニット３２０に記憶されている要求リクエストアドレスおよび記憶されている推測アドレスの両方と比較される。
【００６７】
アドレス一致が見つからない場合（条件付きブロック５１０）には、次に、ブロック５１２において、新規のデータストリームがプリフェッチユニット３２０に割り当てられる。前述のような割り当てが実行される前に追加の認定条件が用いられてもよい。ブロック５１４において、この時点で、データストリームは割り当てからトレーニングへの状態遷移を有してもよい。後の比較のために、アップ／ダウンビットの補助により次のアドレスを導き出してもよい。代替的に、アップ／ダウン値が既知でない場合には、１つが単調増大値、もう１つが単調減少値である２つのアドレスが導き出されてもよい。別の実施形態では、データストリームのための導出値を用いた比較が後に実行されるまで、割り当てからトレーニングへの状態遷移が起こらなくてもよい。その後、方法５００の制御フローはブロック５０２に戻る。
【００６８】
アドレス一致が見つかった場合（条件付きブロック５１０）には、ブロック５１６において、データストリームの状態（すなわち、割り当て、トレーニング、伝搬）が検査される。データストリームが、割り当てまたはトレーニング状態のいずれかの、より新規のデータストリームである場合（条件付きブロック５１８）には、方法５００の制御フローはブロックＢに進む。他の場合には、方法５００の制御フローはブロックＡに進む。
【００６９】
ここで図７を参照すると、プロセッサにおける効率的なキャッシュラインのプリフェッチを継続する方法６００の一実施形態が示される。当業者は方法５００と同様に、方法６００を変更して、代替的な実施形態を導き出してもよい。また、この実施形態のステップは示す逐次的な順序で示される。しかしながら、別の実施形態では、いくつかのステップは示されるのとは異なる順序で実施されてもよく、いくつかのステップは並行実行されてもよく、いくつかのステップは他のステップと統合されてもよく、さらにはいくつかのステップは無くてもよい。示される実施形態では、方法６００の制御フローは、伝搬状態であるデータストリーム内のアドレス一致により達成されるブロックＡで開始される。
【００７０】
現在のアクセスが、対応するアドレスに関する第１の要求リクエストアクセスである場合（条件付きブロック６０２）には、対応するデータストリームに関する伝搬ヒットが生じる。本明細書に用いられる場合、伝搬ヒットは、アドレスに基づいて１つ以上のプリフェッチリクエストを生成するデータストリーム（例えば、配列４１０により識別されるデータストリーム）内のアドレス比較の一致、またはヒットを意味する。例えば、状況フィールド４３４に記憶された「伝搬」状態を有する特定のデータストリーム配列４１０の推測アドレスフィールド４２４に記憶された値（または、フィールド４２４およびポインタフィールド４２６から導き出された値）におけるアドレス一致は、伝搬ヒットであってもよい。ブロック６０４において、新規のプリフェッチパラメータを決定されてもよい。例えば、図４の表３５０に示すような新規のデルタ値は計算されてもよい。プリフェッチ深度、または取り出されるべきキャッシュラインの数が一定値で無い場合には、この値もこの時点で計算されてもよい。一実施形態では、制御ロジック４４０は、伝達される要求リクエストアドレスが、この値と各データストリーム配列４１０のフィールド４２０に記憶されたアドレスとを比較することにより、その第１のキャッシュアクセスに利用されることを判定してもよい。その第１のキャッシュアクセスに利用されるアドレスは、フィールド４２０にまだ記憶されていない。ただし、アドレス値は、以前のプリフェッチに基づいてフィールド４２４に記憶されてもよい。
【００７１】
伝達された要求リクエストのアクセスタイプが記憶動作である場合（条件付きブロック６０８）には、ブロック６１６においてスティッキ記憶ビットが設定されてもよい。このスティッキ記憶ビットが一旦設定されると、この設定は維持される。ブロック６１８において、導き出されたプリフェッチパラメータを用いて、１つ以上のプリフェッチリクエストは書き込み許可により送信される。推測アドレスは、現在一致する要求リクエストアドレス、デルタ値、およびプリフェッチ深度値から導き出されてもよい。プリフェッチリクエストは書き込み許可により送信されるため、取り込まれたキャッシュラインのデータを修正する任意の最新の記憶動作は、状態変更リクエストペナルティを受けない。方法６００の制御フローは、次に、ブロックＤに進む。
【００７２】
要求リクエストのアクセスタイプが記憶動作でない場合（条件付きブロック６０８）には、スティッキ記憶ビットの検査が行われる。例えば、データストリーム内の以前の、場合によっては、同じキャッシュラインにおけるより以前の記憶アクセスから、スティッキ記憶ビットが設定された場合（条件付きブロック６１２）には、ブロック６１８において、導き出されたプリフェッチパラメータを用いて、１つ以上のプリフェッチリクエストが書き込み許可により送信される。この場合も、プリフェッチリクエストが書き込み許可を利用して送信されるため、検索されたキャッシュラインにおけるデータを修正する任意の最新の記憶動作は、状態変更リクエストペナルティを受けない。ここでも図４の表３５０を参照すると、アドレスＸ＋３の最初の発生とアドレスＸ＋４の発生とはこのカテゴリに含まれる。これ以外の場合では、スティッキ記憶ビットが設定されない場合（条件付きブロック６１２）は、ブロック６１４において、書き込み許可無しに、導き出されたプリフェッチパラメータを用いて１つ以上のプリフェッチリクエストが送信される。方法６００の制御フローは、次に、ブロックＤに進む。
【００７３】
現在のアクセスが、対応するアドレスに関する第１の要求リクエストアクセスでない場合（条件付きブロック６０２）には、次に、対応するデータストリームに関する非伝搬ヒットが生じる。本明細書に用いられる場合、非伝搬ヒットは、アドレスに基づくいかなるプリフェッチリクエストも生成しないデータストリーム配列（例えば、配列４１０により識別されるデータストリーム）内におけるアドレス比較の一致、またはヒットを意味する。例えば、状況フィールド４３４に記憶された伝搬状態をともなう特定のデータストリーム配列４１０の要求リクエストアドレスフィールド４２０における記憶された値におけるアドレス一致は、非伝搬ヒットであってもよい。ここでも図４の表３５０を参照すると、アドレスＸ＋１の第２の発生とアドレスＸ＋３の第２および第３の発生とは非伝搬ヒットに対応する。スティッキ記憶ビットがこの特定のデータストリーム用に設定される場合（条件付きブロック６１０）には、方法６００の制御フローはブロックＤに進む。この場合、既に事前にプリフェッチされたキャッシュライン内のデータにアクセスが行われるため，プリフェッチリクエストは不要である。また、スティッキビットが既に設定されているため、要求リクエストのアクセスタイプの検査は不要である。これ以外の場合では、スティッキ記憶ビットが設定されていない場合（条件付きブロック６１０）には、方法６００の制御フローは条件付きブロック６０８に進む。ここで要求リクエストのアクセスタイプが検査される。
【００７４】
ここで図８を参照すると、プロセッサにおける効率的なキャッシュラインのプリフェッチを継続する方法７００の一実施形態が示される。当業者は前述の各方法と同様に、方法７００を変更して、代替的な実施形態を導き出してもよい。また、この実施形態のステップは逐次的順序で示される。しかしながら、別の実施形態では、いくつかのステップは示すのとは異なる順序で実施されてもよく、いくつかのステップは並行実行されてもよく、いくつかのステップは他のステップと統合されてもよく、さらにいくつかのステップは無くてもよい。示される実施形態では、方法７００の制御フローは、トレーニング状態であるデータストリーム内のアドレス一致により到達されるブロックＢで開始される。
【００７５】
一実施形態では、要求リクエストがキャッシュヒット状況を有する場合（条件付きブロック７０２）には、ブロック７０４において、アドレスが一致したデータストリームは、更新されたそれ自体の交換戦略を有してもよい。例えば、ＬＲＵアルゴリズムに対応する値は、このデータストリームは最も使用されていないデータストリームであることを表示するために更新されてもよい。さらに、データストリーム状態は、別の状態に遷移するのではなく、トレーニング状態を維持してもよい。方法７００の制御フローは、次に、ブロックＣに進む。
【００７６】
一実施形態では、要求リクエストがキャッシュミス状況を有する場合（条件付きブロック７０２）には、ブロック７０６において、アドレス一致に対応するデータストリーム内の次の入力としてこのアドレスを記憶してもよい。ブロック７０８において、入力の数のカウンタがインクリメントされてもよい。このカウンタは、特定のデータストリームにおいて待ち行列に入っている入力の数を維持してもよい。データストリーム状態がトレーニング状態から伝搬状態にいつ遷移するべきかの決定にこのカウント値が用いられてもよい。一実施形態では、伝達された要求リクエストのアクセスタイプは検査される必要はなく、方法７００の制御フローはブロック７０８から条件付きブロック７１０に進んでもよい。別の実施形態では、このアクセスタイプは検査されてもよく、要求リクエストが記憶動作である場合には、対応するスティッキビットが設定されてもよい。一実施形態では、このスティッキビットが一旦設定されると、その設定は維持され続ける。このような実施は、例えば、データストリームのトレーニング状態において生じた記憶動作が記憶動作を確実に予測することが、最新のデータストリームの伝搬状態において生じる場合があると考えられる場合に用いられてもよい。
【００７７】
入力カウンタの数が既定の閾値に達すると（条件付きブロック７１０）、データストリーム状態が更新される。ブロック７１２において、トレーニング状態から伝搬状態へと、この状態が遷移する。ブロック７１４において、プリフェッチパラメータが決定されてもよい。これらのパラメータはデルタ値およびプリフェッチ深度を含んでもよい。方法７００の制御フローは、次に、ブロックＥに進む。入力カウンタの数が既定の閾値に達しない場合（条件付きブロック７１０）には、方法７００の制御フローは、次に、ブロックＤに進む。
【００７８】
前述の実施形態がソフトウェアを備えてもよいことが留意される。このような実施形態では、方法および／またはメカニズムを実施するプログラム命令は伝達されてもよく、またはコンピュータ可読媒体に記憶される。プログラム命令を記憶するように構成された多くの種類の媒体が利用可能であり、ハードディスク、フロッピー（登録商標）ディスク、ＣＤ−ＲＯＭ、ＤＶＤ、フラッシュメモリ、プログラマブルＲＯＭ（ＰＲＯＭ）、ランダムアクセスメモリ（ＲＡＭ）、および種々の他の形状の揮発性または不揮発性記憶装置が含まれる。さらに、記述されたコンピューティングシステムが、デスクトップコンピュータ、ラップトップコンピュータ、サーバ、携帯用コンピュータ装置、セットトップボックス、ルータなどの任意の適切なデバイスに用いられるプロセッサの一部でもよいことが理解される。
【００７９】
前述の実施形態は相当詳細に記載したが、多くの変更および変形は、当業者が前述の開示を完全に理解すると明らかとなるであろう。以下の特許請求の範囲は全てのこのような変更および変形を含むものとして解釈されることが意図される。
【図１】
0005615927.tif 000002
【図２】
0005615927.tif 000003
【図３】
0005615927.tif 000004
【図４】
0005615927.tif 000005
【図５】
0005615927.tif 000006
【図６】
0005615927.tif 000007
【図７】
0005615927.tif 000008
【図８】
0005615927.tif 000009