(57)【要約】      （修正有）【課題】Ｌ２キャッシュなどの中間キャッシュからどのデータをまずエビクトすべきかを判定する機構を提供する。【解決手段】データキャッシュ内のキャッシュラインに格納されたデータ４１４は、そのデータの再利用可能性を反映するデータクラスに基づいて分類される。データクラスは、タグストア４１２に格納され、タグストア内の各タグは、データキャッシュ内の単一のキャッシュラインに対応する。コマンドに関連するデータのためにキャッシュラインを予約する時に、タグルックアップユニットは、エビクトすべきデータを判定するために、タグストア内のデータクラスを調べる。低い再利用可能性を有するデータは、高い再利用可能性を有するデータより高い優先順位でエビクトされる。有利なことに、より低い再利用可能性を有するデータクラスに属するデータをエビクトすることは、システム内のキャッシュミスの回数を減らす。【選択図】図４
2010123130.tif 000002
【特許請求の範囲】
【請求項１】
１つ又は複数のクライアント及び外部メモリに結合された中間キャッシュからデータをエビクト（ｅｖｉｃｔ）するシステムであって、
１つ又は複数のデータキャッシュユニットと、
前記１つ又は複数のデータキャッシュユニットに関連する複数のキャッシュラインのそれぞれの異なるエントリを格納するように構成されたタグストアユニットと、
前記１つ又は複数のデータキャッシュユニット及び前記タグストアユニットに結合されたタグルックアップユニットと
を備え、
前記タグストアユニットにおいて、各エントリが、前記エントリに対応する前記キャッシュラインに格納されたデータに関連するエビクションクラス（ｅｖｉｃｔｉｏｎ  ｃｌａｓｓ）を示すタグと、前記エントリに対応する前記キャッシュライン内の前記データがクリーン（ｃｌｅａｎ）かつアンピンド（ｕｎｐｉｎｎｅｄ）であるどうかを示す状態部分とを含み、前記エビクションクラスは、前記エントリに対応する前記キャッシュラインに格納された前記データが前記１つ又は複数のクライアントによって再利用される可能性を示し、
タグルックアップユニットが、
関連するメモリアドレスを含むコマンドをクライアントから受け取り、
前記メモリアドレスに基づいて前記コマンドに関連するデータを格納するために前記１つ又は複数のデータキャッシュユニット内の１つ又は複数のキャッシュラインを識別し、
前記１つ又は複数のキャッシュラインに対する相対的なキャッシュミスがあることを判定し、
前記１つ又は複数のキャッシュラインのうちの少なくとも１つに対応する前記タグストアユニット内の前記エントリに含まれる前記少なくとも１つのキャッシュラインに格納された前記データに関連する前記エビクションクラスに基づいて前記少なくとも１つのキャッシュラインに常駐するデータをエビクトする
ように構成されている、システム。
【請求項２】
前記状態部分が、有効（ｖａｌｉｄ）フラグ、ダーティ（ｄｉｒｔｙ）フラグ、及びピンド（ｐｉｎｎｅｄ）フラグを含む、請求項１に記載のシステム。
【請求項３】
前記少なくとも１つのキャッシュラインに対応する前記タグストアユニット内の前記エントリに含まれる前記タグが、前記少なくとも１つのキャッシュラインに格納された前記データがｅｖｉｃｔ−ｆｉｒｓｔクラスに属することを示し、
前記エントリに含まれる前記状態部分が、前記少なくとも１つのキャッシュラインに格納されたデータが、クリーンかつアンピンドであることを示し、
前記タグルックアップユニットが、前記少なくとも１つのキャッシュライン内の前記データが前記１つ又は複数のキャッシュライン内の最長時間未使用（ｌｅａｓｔ  ｒｅｃｅｎｔｌｙ  ｕｓｅｄ）、クリーン、アンピンド、そしてｅｖｉｃｔ−ｆｉｓｔデータであることを判定し、その後、前記少なくとも１つのキャッシュライン内の前記データをエビクトするように構成されている、請求項１に記載のシステム。
【請求項４】
前記少なくとも１つのキャッシュラインに対応する前記タグストアユニット内の前記エントリに含まれる前記タグが、前記少なくとも１つのキャッシュラインに格納された前記データがｅｖｉｃｔ−ｎｏｒｍａｌクラスに属することを示し、
前記エントリに含まれる前記状態部分が、前記少なくとも１つのキャッシュラインに格納されたデータがクリーンかつアンピンドであることを示し、
前記タグルックアップユニットが、前記少なくとも１つのキャッシュライン内の前記データが前記１つ又は複数のキャッシュライン内の最長時間未使用、クリーン、アンピンド、そしてｅｖｉｃｔ−ｎｏｒｍａｌデータであることを判定し、その後、前記少なくとも１つのキャッシュライン内の前記データをエビクトするように構成されている、請求項１に記載のシステム。
【請求項５】
前記タグルックアップユニットが、前記コマンドに関連する前記データがｅｖｉｃｔ−ｌａｓｔクラスに属することを判定するように構成され、
前記少なくとも１つのキャッシュラインに対応する前記タグストアユニット内の前記エントリに含まれる前記タグが、前記少なくとも１つのキャッシュラインに格納された前記データがｅｖｉｃｔ−ｌａｓｔクラスに属することを示し、
前記エントリに含まれる前記状態部分が、前記少なくとも１つのキャッシュラインに格納されたデータがクリーンかつアンピンドであることを示し、
前記タグルックアップユニットが、前記少なくとも１つのキャッシュライン内の前記データが前記１つ又は複数のキャッシュライン内の最長時間未使用、クリーン、アンピンド、そしてｅｖｉｃｔ−ｌａｓｔデータであることを判定し、その後、前記少なくとも１つのキャッシュライン内の前記データをエビクトするように構成されている、請求項１に記載のシステム。
【請求項６】
前記少なくとも１つのキャッシュラインに格納された前記データが、ｅｖｉｃｔ−ｌａｓｔクラスに属し、
前記タグルックアップユニットが、ｅｖｉｃｔ−ｎｏｒｍａｌクラスに属するものとして前記データを再分類するように構成され、
前記少なくとも１つのキャッシュラインに対応する前記タグストアユニット内の前記エントリに含まれる前記状態部分が、前記少なくとも１つのキャッシュラインに格納されたデータがクリーンかつアンピンドであることを示し、
前記タグルックアップユニットが、前記少なくとも１つのキャッシュライン内の前記データが前記１つ又は複数のキャッシュライン内の最長時間未使用、クリーン、アンピンド、そしてｅｖｉｃｔ−ｎｏｒｍａｌデータであることを判定し、その後、前記少なくとも１つのキャッシュライン内の前記データをエビクトするようにさらに構成されている、請求項１に記載のシステム。
【請求項７】
タグルックアップユニットが、前記少なくとも１つのキャッシュラインに常駐するデータに関するクリーン通知をフレームバッファ論理に送り、前記コマンドに関連する前記データのために前記少なくとも１つのキャッシュラインを予約するようにさらに構成されている、請求項１に記載のシステム。
【請求項８】
１つ又は複数のクライアントと、
中間キャッシュと、
前記中間キャッシュに結合された外部メモリと、
前記１つ又は複数のクライアントを前記中間キャッシュに結合するクロスバーユニットと
を備え、
前記中間キャッシュは、
１つ又は複数のデータキャッシュユニットと、
前記１つ又は複数のデータキャッシュユニットに関連する複数のキャッシュラインのそれぞれの異なるエントリを格納するように構成されたタグストアユニットであって、各エントリは、前記エントリに対応する前記キャッシュラインに格納されたデータに関連するエビクションクラスを示すタグと、前記エントリに対応する前記キャッシュライン内の前記データがクリーンかつアンピンドであるかどうかを示す状態部分とを含み、前記エビクションクラスは、前記エントリに対応する前記キャッシュラインに格納された前記データが前記１つ又は複数のクライアントによって再利用される可能性を示す、タグストアユニットと、
前記１つ又は複数のデータキャッシュユニットに結合されたタグルックアップユニットと
を含み、
前記タグルックアップユニットは、
関連するメモリアドレスを含むコマンドをクライアントから受け取り、
前記メモリアドレスに基づいて前記コマンドに関連するデータを格納するために前記１つ又は複数のデータキャッシュユニット内の１つ又は複数のキャッシュラインを識別し、
前記１つ又は複数のキャッシュラインに対して相対的なキャッシュミスがあることを判定し、
前記１つ又は複数のキャッシュラインのうちの少なくとも１つに対応する前記タグストアユニット内の前記エントリに含まれる前記少なくとも１つのキャッシュラインに格納された前記データに関連する前記エビクションクラスに基づいて前記少なくとも１つのキャッシュラインに常駐するデータをエビクトする
ように構成されている、コンピューティングデバイス。
【請求項９】
前記状態部分は、有効フラグ、ダーティフラグ、及びピンドフラグを含む、請求項８に記載のコンピューティングデバイス。
【請求項１０】
タグルックアップユニットが、前記少なくとも１つのキャッシュラインに常駐する前記データに関するクリーン通知をフレームバッファ論理に送り、前記コマンドに関連する前記データのために前記少なくとも１つのキャッシュラインを予約するようにさらに構成されている、請求項８に記載のコンピューティングデバイス。
【発明の詳細な説明】
【技術分野】
【０００１】
[0001]本発明は、全般的にはメモリ管理の分野に関し、より具体的には複数クラスデータキャッシュポリシーに関する。
【背景技術】
【０００２】
[0002]ある処理ユニット内のメモリサブシステムの１つの要素は、レベル２キャッシュメモリ（本明細書では「Ｌ２キャッシュ」と称する）である。Ｌ２キャッシュは、外部メモリ（たとえば、フレームバッファメモリ）とメモリサブシステムの内部クライアント（本明細書では「クライアント」と称する）との間の中間点として働く大きいオンチップメモリである。Ｌ２キャッシュは、さまざまなクライアントによって使用されるデータを一時的に格納する。このデータを、外部メモリ（本明細書では「ＤＲＡＭ」と称する）から取り出すか、外部メモリに書き込むことができる。クライアントは、ある種の動作を実行している間にＬ２キャッシュに格納されたデータを再利用することができる。
【０００３】
[0003]読取り動作中に、クライアントは、現在Ｌ２キャッシュに格納されておらず、したがってＤＲＡＭから取り出されなければならないデータをＬ２キャッシュに要求する場合がある。データをＤＲＡＭから取り出さなければならない読取り動作は、データがＬ２キャッシュから直接に取り出される読取り動作より大幅に多くのクロックサイクルで処理される。したがって、全体的なシステム性能は、多数の読取り動作についてデータをＤＲＡＭから取り出さなければならない場合に、深刻な影響を受ける可能性がある。しかし、Ｌ２キャッシュに割り振られるメモリ空間は限られているので、Ｌ２キャッシュに常駐するデータは、クライアントによって送出される将来の読取り動作又は書込み動作用のメモリ空間を解放するために、日常的にエビクト（ｅｖｉｃｔ）される必要がある。Ｌ２キャッシュに常駐するデータが、十分に頻繁にはエビクトされない場合には、将来の読取り動作及び書込み動作を、これらの動作を処理するためのＬ２キャッシュ内の空間ができるまでストールさせなければならない。やはり、そのような力学は、全体的なシステム性能に大きく影響する可能性がある。
【０００４】
[0004]従来のエビクション（ｅｖｉｃｔｉｏｎ）方式は、通常、最長時間未使用（ｌｅａｓｔ  ｒｅｃｅｎｔｌｙ  ｕｓｅｄ）のデータがキャッシュからエビクトされるポリシーを実施する。しかし、データの使用パターンが変化する、ある種のシステムでは、そのような手法は、将来の読取り動作及び書込み動作のための場所をあけるためにデータをすばやくエビクトすることと、外部メモリへのデータ要求を回避できるようにするためにデータが再利用されるのに十分に長くキャッシュ内に留まることを可能にすることとの間の適当なバランスをとることができない。
【発明の概要】
【発明が解決しようとする課題】
【０００５】
[0005]前述に示されているように、当技術分野で必要なものは、Ｌ２キャッシュなどの中間キャッシュからどのデータをまずエビクトすべきかを判定する、より効率的な機構である。
【課題を解決するための手段】
【０００６】
[0006]本発明の一実施形態は、１つ又は複数のクライアント及び外部メモリに結合された中間キャッシュからデータをエビクトする方法を示す。この方法は、関連するメモリアドレスを含むコマンドをクライアントから受け取るステップと、メモリアドレスに基づいてコマンドに関連するデータを格納するために中間キャッシュ内の１つ又は複数のキャッシュラインを識別するステップと、１つ又は複数のキャッシュラインに対する相対的なキャッシュミスがあることを判定するステップと、１つ又は複数のキャッシュラインに常駐するデータに関連する１つ又は複数のエビクションクラス（ｅｖｉｃｔｉｏｎ  ｃｌａｓｓ）に基づいて、１つ又は複数のキャッシュラインに常駐するデータの少なくとも一部をエビクトさせるかコマンドをストールさせるステップとを含み、各エビクションクラスは、エビクションクラスに関連するデータが前記クライアント又は異なるクライアントによって再利用される異なる可能性を反映する。
【０００７】
[0007]開示される方法の１つの利益は、データキャッシュに格納されたデータに関連するデータクラスが、入ってくる読取りコマンド又は書込みコマンドに関連するデータのための場所をあける時に、再利用に関する最も低い可能性を有するデータをタグルックアップユニットがエビクトすることを可能にすることである。データをエビクトするこの機構は、システム内のクライアントによって再利用され得るデータの早期エビクションから生じるキャッシュミスの回数を減らす。
【０００８】
[0008]本発明の上で列挙された特徴を詳細に理解できる形で、上で短く要約された本発明のより特定の説明を、実施形態を参照することによって有することができ、これらの実施形態のいくつかは、添付図面に示されている。しかし、添付図面が、本発明の通常の実施形態のみを示し、したがって、本発明の範囲を限定すると考えられてはならないことに留意されたい。というのは、本発明が、他の同等に有効な実施形態を許すことができるからである。
【図面の簡単な説明】
【０００９】
【図１】本発明の１つ又は複数の態様を実施するように構成されたコンピュータシステムを示すブロック図である。
【図２】本発明の一実施形態による、図１のコンピュータシステムの並列処理サブシステムを示すブロック図である。
【図３Ａ】本発明の一実施形態による、図２のＰＰＵのうちの１つの中のＧＰＣを示すブロック図である。
【図３Ｂ】本発明の一実施形態による、図２のＰＰＵのうちの１つの中のパーティションユニットを示すブロック図である。
【図４】本発明の一実施形態による、図３Ｂのパーティションユニットを示す詳細なブロック図である。
【図５Ａ】本発明の一実施形態による、図４のデータキャッシュに出入りするデータのフローを管理する方法ステップを示す流れ図である。
【図５Ｂ】本発明の一実施形態による、図４のデータキャッシュに出入りするデータのフローを管理する方法ステップを示す流れ図である。
【図５Ｃ】本発明の一実施形態による、図４のデータキャッシュに出入りするデータのフローを管理する方法ステップを示す流れ図である。
【図５Ｄ】本発明の一実施形態による、図４のデータキャッシュに出入りするデータのフローを管理する方法ステップを示す流れ図である。
【発明を実施するための形態】
【００１０】
[0015]次の説明では、本発明のより完全な理解を提供するために、多数の特定の詳細を示す。しかし、本発明をこれらの特定の詳細のうちの１つ又は複数を伴わずに実践できることは、当業者に明白であろう。他の場合には、本発明を不明瞭にすることを避けるために、周知の特徴は説明しない。
【００１１】
システムの概要
[0016]図１は、本発明の１つ又は複数の態様を実施するように構成されたコンピュータシステム１００を示すブロック図である。コンピュータシステム１００は、バスパスを介しメモリブリッジ１０５を介して通信する中央処理装置（ＣＰＵ）１０２及びシステムメモリ１０４を含む。メモリブリッジ１０５を、図１に示されているようにＣＰＵ  １０２に統合することができる。代替案では、メモリブリッジ１０５を、バスを介してＣＰＵ  １０２に接続された、従来のデバイス、たとえばノースブリッジチップとすることができる。メモリブリッジ１０５は、通信パス１０６（たとえば、ＨｙｐｅｒＴｒａｎｓｐｏｒｔリンク）を介してＩ／Ｏ（入出力）ブリッジ１０７に接続される。Ｉ／Ｏブリッジ１０７は、たとえばサウスブリッジチップとすることができるが、１つ又は複数のユーザ入力デバイス１０８（たとえば、キーボード、マウス）からユーザ入力を受け取り、その入力をパス１０６及びメモリブリッジ１０５を介してＣＰＵ  １０２に転送する。並列処理サブシステム１１２が、バス又は他の通信パス１１３（たとえば、ＰＣＩ  Ｅｘｐｒｅｓｓ、Ａｃｃｅｌｅｒａｔｅｄ  Ｇｒａｐｈｉｃｓ  Ｐｏｒｔ、又はＨｙｐｅｒＴｒａｎｓｐｏｒｔリンク）を介してメモリブリッジ１０５に結合され、一実施形態では、並列処理サブシステム１１２は、ピクセルをディスプレイデバイス１１０（たとえば、従来のＣＲＴ又はＬＣＤベースのモニタ）に送達するグラフィックスサブシステムである。システムディスク１１４も、Ｉ／Ｏブリッジ１０７に接続される。スイッチ１１６は、Ｉ／Ｏブリッジ１０７と、ネットワークアダプタ１１８並びにさまざまなアドインカード１２０及び１２１などの他のコンポーネントとの間の接続を提供する。ＵＳＢ又は他のポート接続、ＣＤドライブ、ＤＶＤドライブ、フィルムレコーディングデバイス、及び類似物を含む他のコンポーネント（明示的には図示せず）をも、Ｉ／Ｏブリッジ１０７に接続することができる。図１のさまざまなコンポーネントを相互接続する通信パスを、ＰＣＩ（Ｐｅｒｉｐｈｅｒａｌ  Ｃｏｍｐｏｎｅｎｔ  Ｉｎｔｅｒｃｏｎｎｅｃｔ）、ＰＣＩ  Ｅｘｐｒｅｓｓ（ＰＣＩ−Ｅ）、ＡＧＰ（Ａｃｃｅｌｅｒａｔｅｄ  Ｇｒａｐｈｉｃｓ  Ｐｏｒｔ）、ＨｙｐｅｒＴｒａｎｓｐｏｒｔ、又は任意の他のバス若しくはポイントツーポイント通信プロトコル（複数可）などの任意の適切なプロトコルを使用して実施することができ、異なるデバイスの間の接続は、当技術分野で既知のように異なるプロトコルを使用することができる。
【００１２】
[0017]一実施形態では、並列処理サブシステム１１２は、たとえば、ビデオ出力回路網を含む、グラフィックス及びビデオ処理用に最適化された回路網を組み込まれ、グラフィックス処理ユニット（ＧＰＵ）を構成する。もう１つの実施形態では、並列処理サブシステム１１２は、本明細書で詳細に説明される、基礎になる計算アーキテクチャを保存しながら汎用処理用に最適化された回路網を組み込まれる。もう１つの実施形態では、並列処理サブシステム１１２を、メモリブリッジ１０５、ＣＰＵ  １０２、及びＩ／Ｏブリッジ１０７などの１つ又は複数の他のシステム要素と統合して、システムオンチップ（ＳｏＣ）を形成することができる。
【００１３】
[0018]本明細書で示されるシステムが、例示的であり、変形形態及び修正形態が可能であることを了解されたい。ブリッジの個数及び配置を含む接続トポロジを、望み通りに変更することができる。たとえば、いくつかの実施形態で、システムメモリ１０４は、ブリッジを介するのではなく直接にＣＰＵ  １０２に接続され、他のデバイスは、メモリブリッジ１０５及びＣＰＵ  １０２を介してシステムメモリ１０４と通信する。他の代替トポロジでは、並列処理サブシステム１１２は、メモリブリッジ１０５にではなくＩ／Ｏブリッジ１０７又は直接にＣＰＵ  １０２に接続される。さらに他の実施形態では、ＣＰＵ  １０２、Ｉ／Ｏブリッジ１０７、並列処理サブシステム１１２、及びメモリブリッジ１０５のうちの１つ又は複数を、１つ又は複数のチップに集積することができる。本明細書で示される特定のコンポーネントは、オプションであり、たとえば、任意の個数のアドインカード又は周辺デバイスをサポートすることができる。いくつかの実施形態では、スイッチ１１６が除去され、ネットワークアダプタ１１８並びにアドインカード１２０及び１２１は、Ｉ／Ｏブリッジ１０７に直接に接続される。
【００１４】
[0019]図２に、本発明の一実施形態による、並列処理サブシステム１１２を示す。図示されているように、並列処理サブシステム１１２は、１つ又は複数の並列処理ユニット（ＰＰＵ）２０２を含み、ＰＰＵ  ２０２のそれぞれは、ローカル並列処理（ＰＰ）メモリ２０４に結合される。一般に、並列処理サブシステムは、複数Ｕ個のＰＰＵを含み、Ｕ≧１である（本明細書では、同様のオブジェクトの複数のインスタンスを、オブジェクトを識別する符号及び必要な場合にインスタンスを識別する括弧で括られた数を用いて表す）。ＰＰＵ  ２０２及び並列処理メモリ２０４を、プログラマブルプロセッサ、特定用途向け集積回路（ＡＳＩＣ）、又はメモリデバイスなどの１つ又は複数の集積回路デバイスを使用して、或いは任意の他の技術的に実現可能な形で実施することができる。
【００１５】
[0020]もう一度図１を参照すると、いくつかの実施形態で、並列処理サブシステム１１２内のＰＰＵ  ２０２の一部又はすべてが、レンダリングパイプラインを有するグラフィックスプロセッサであり、このレンダリングパイプラインは、ＣＰＵ  １０２及び／又はシステムメモリ１０４によって供給されるグラフィックスデータからのピクセルデータの生成、ピクセルデータを格納し、更新するためのローカル並列処理メモリ２０４（たとえば従来のフレームバッファを含むグラフィックスメモリとして使用することができる）との相互作用、ディスプレイデバイス１１０へのピクセルデータの送達、及び類似物に関するさまざまなタスクを実行するように構成され得る。いくつかの実施形態では、並列処理サブシステム１１２は、グラフィックスプロセッサとして動作する１つ又は複数のＰＰＵ  ２０２及び汎用計算に使用される１つ又は複数の他のＰＰＵ  ２０２を含むことができる。ＰＰＵは、同一又は異なるものとすることができ、各ＰＰＵは、それ自体の専用並列処理メモリデバイス（複数可）を有することができ、或いは、専用並列処理メモリデバイス（複数可）を有しないものとすることができる。１つ又は複数のＰＰＵ  ２０２が、ディスプレイデバイス１１０にデータを出力することができ、或いは、各ＰＰＵ  ２０２が、１つ又は複数のディスプレイデバイス１１０にデータを出力することができる。
【００１６】
[0021]動作中に、ＣＰＵ  １０２は、コンピュータシステム１００のマスタプロセッサであり、他のシステムコンポーネントの動作を制御し、調整する。具体的に言うと、ＣＰＵ  １０２は、ＰＰＵ  ２０２の動作を制御するコマンドを発行する。いくつかの実施形態では、ＣＰＵ  １０２は、各ＰＰＵ  ２０２用のコマンドのストリームをコマンドバッファ（図１及び図２のいずれにも明示的には図示せず）に書き込み、このコマンドバッファは、システムメモリ１０４内、並列処理メモリ２０４内、又はＣＰＵ  １０２とＰＰＵ  ２０２との両方からアクセス可能な別のストレージ位置に配置され得る。ＰＰＵ  ２０２は、コマンドバッファからコマンドストリームを読み取り、その後、ＣＰＵ  １０２の動作に対して相対的に非同期にコマンドを実行する。ＣＰＵ  １０２は、ＰＰＵ  ２０２がコマンドバッファ内のコマンドに応答して読み取ることのできるデータバッファをも作成することができる。各コマンドバッファ及びデータバッファを、ＰＰＵ  ２０２のそれぞれによって読み取ることができる。
【００１７】
[0022]戻って図２を参照すると、各ＰＰＵ  ２０２は、Ｉ／Ｏ（入出力）ユニット２０５を含み、このＩ／Ｏユニット２０５は、通信パス１１３を介してコンピュータシステム１００の残りと通信し、この通信パス１１３は、メモリブリッジ１０５に（又は、１つの代替実施形態では、ＣＰＵ  １０２に直接に）接続される。コンピュータシステム１００の残りへのＰＰＵ  ２０２の接続を、変更することもできる。いくつかの実施形態では、並列処理サブシステム１１２は、コンピュータシステム１００の拡張スロットに挿入できるアドインカードとして実施される。他の実施形態では、ＰＰＵ  ２０２を、メモリブリッジ１０５又はＩ／Ｏブリッジ１０７などのバスブリッジと共に単一チップ上に集積することができる。さらに他の実施形態では、ＰＰＵ  ２０２の一部の又はすべての要素を、ＣＰＵ  １０２と共に単一チップ上に集積することができる。
【００１８】
[0023]一実施形態では、通信パス１１３は、ＰＣＩ−Ｅリンクであり、このＰＣＩ−Ｅリンクでは、当技術分野で既知のように、専用レーンが各ＰＰＵ  ２０２に割り振られる。他の通信パスを使用することもできる。Ｉ／Ｏユニット２０５は、通信パス１１３での送信用のパケット（又は他の信号）を生成し、また、通信パス１１３からのすべての入ってくるパケット（又は他の信号）を受け取り、入ってくるパケットをＰＰＵ  ２０２の適当なコンポーネントに向ける。たとえば、処理タスクに関するコマンドを、ホストインターフェース２０６に向けることができ、メモリ動作（たとえば、並列処理メモリ２０４からの読取り又はこれへの書込み）に関するコマンドを、メモリクロスバーユニット２１０に向けることができる。ホストインターフェース２０６は、各コマンドバッファを読み取り、コマンドバッファによって指定される作業をフロントエンド２１２に出力する。
【００１９】
[0024]各ＰＰＵ  ２０２は、高並列処理アーキテクチャ（ｈｉｇｈｌｙ  ｐａｒａｌｌｅｌ  ｐｒｏｃｅｓｓｉｎｇ  ａｒｃｈｉｔｅｃｔｕｒｅ）を有利に実施する。詳細に示されているように、ＰＰＵ  ２０２（０）は、複数Ｃ個の一般処理クラスタ（ＧＰＣ）２０８を含む処理クラスタアレイ２３０を含み、ここで、Ｃ≧１である。各ＧＰＣ  ２０８は、多数（たとえば、数百個又は数千個）のスレッドを同時に実行することができ、ここで、各スレッドは、プログラムのインスタンスである。さまざまな応用例では、異なるＧＰＣ  ２０８を、異なるタイプのプログラムを処理するために又は異なるタイプの計算を実行するために割り振ることができる。たとえば、グラフィックス応用例では、ＧＰＣ  ２０８の第１セットを、テッセレーション動作を実行し、パッチのプリミティブトポロジを作るために割り振ることができ、ＧＰＣ  ２０８の第２セットを、プリミティブトポロジのパッチパラメータを評価するためにテッセレーションシェーディングを実行し、頂点位置及び他の頂点ごとの属性を判定するために割り振ることができる。ＧＰＣ  ２０８の割り振りは、プログラム又は計算のタイプごとに生じる作業負荷に依存して変更することができる。代替案では、ＧＰＣ  ２０８を、異なる処理タスクの間で切り替えるのにタイムスライス方式を使用して処理タスクを実行するために割り振ることができる。
【００２０】
[0025]ＧＰＣ  ２０８は、作業分配ユニット２００を介して、実行すべき処理タスクを受け取り、この作業分配ユニット２００は、処理タスクを定義するコマンドをフロントエンドユニット２１２から受け取る。処理タスクは、処理されるデータ、たとえば、表面（パッチ）データ、プリミティブデータ、頂点データ、及び／又はピクセルデータ、並びに状態パラメータ及びデータをどのように処理すべきか（たとえば、どのプログラムを実行すべきか）を定義するコマンドへのポインタを含む。作業分配ユニット２００は、処理タスクに対応するポインタをフェッチするように構成されてもよく、フロントエンド２１２からポインタを受け取ってもよく、或いは、フロントエンド２１２から直接にデータを受け取ってもよい。いくつかの実施形態では、インデックスが、アレイ内のデータの位置を指定する。フロントエンド２１２は、コマンドバッファによって指定される処理が開始される前に、ＧＰＣ  ２０８が有効な状態に構成されることを保証する。
【００２１】
[0026]ＰＰＵ  ２０２が、グラフィックス処理に使用されるときに、たとえば、各パッチの処理作業負荷は、複数のＧＰＣ  ２０８へのテッセレーション処理の分配を可能にするために、ほぼ等しいサイズのタスクに分割される。作業分配ユニット２００を、処理のために複数のＧＰＣ  ２０８にタスクを供給できる周波数でタスクを出力するように構成することができる。本発明のいくつかの実施形態では、ＧＰＣ  ２０８の諸部分は、異なるタイプの処理を実行するように構成される。たとえば、第１部分を、頂点シェーディング及びトポロジ生成を実行するように構成することができ、第２部分を、テッセレーション及び幾何シェーディングを実行するように構成することができ、第３部分を、レンダリングされたイメージを作るためにスクリーン空間内でピクセルシェーディングを実行するように構成することができる。異なるタイプの処理タスクを実行するためにＧＰＣ  ２０８の諸部分を割り振る能力は、これらの異なるタイプの処理タスクによって作られるデータのすべての膨張及び収縮に効率的に対処する。ＧＰＣ  ２０８によって作られる中間データをバッファリングして、データが下流ＧＰＣ  ２０８によって受け入れられるレートがデータが上流ＧＰＣ  ２０８によって作られるレートに遅れる場合に、最小限のストールを伴って、中間データがＧＰＣ  ２０８の間で伝送されることを可能にすることができる。
【００２２】
[0027]メモリインターフェース２１４を、並列処理メモリ２０４の部分にそれぞれが結合される複数Ｄ個のメモリパーティションユニットに区分することができ、ここで、Ｄ≧１である。並列処理メモリ２０４の各部分は、一般に、１つ又は複数のメモリデバイス（たとえば、ＤＲＡＭ  ２２０）を含む。当業者は、ＤＲＡＭ  ２２０を他の適切なストレージデバイスに置換することができ、ＤＲＡＭ  ２２０を全体的に従来の設計とすることができることを了解するであろう。したがって、詳細な説明は省略する。フレームバッファ又はテクスチャマップなどのレンダターゲットを、ＤＲＡＭ  ２２０にまたがって格納し、パーティションユニット２１５が並列処理メモリ２０４の使用可能帯域幅を効率的に使用するために各レンダターゲットの諸部分を並列に書き込むことを可能にすることができる。
【００２３】
[0028]ＧＰＣ  ２０８のいずれもが、並列処理メモリ２０４内のパーティションユニット２１５のいずれかに書き込まれるデータを処理することができる。クロスバーユニット２１０は、各ＧＰＣ  ２０８の出力を、さらなる処理のために任意のパーティションユニット２１４の入力又は別のＧＰＣ  ２０８にルーティングするように構成される。ＧＰＣ  ２０８は、クロスバーユニット２１０を介してメモリインターフェース２１４と通信して、さまざまな外部メモリデバイスから読み取り、或いはこれらに書き込む。一実施形態では、クロスバーユニット２１０は、Ｉ／Ｏユニット２０５と通信するためのメモリインターフェース２１４への接続、並びにローカル並列処理メモリ２０４への接続を有し、これによって、異なるＧＰＣ  ２０８内の処理コアがシステムメモリ１０４又はＰＰＵ  ２０２にローカルではない他のメモリと通信することを可能にする。クロスバーユニット２１０は、仮想チャネルを使用して、ＧＰＣ  ２０８とパーティションユニット２１５との間のトラフィックストリームを分離することができる。
【００２４】
[0029]やはり、ＧＰＣ  ２０８をプログラムして、線形及び非線形のデータ変換、ビデオ及び／又はオーディオデータのフィルタリング、モデリング動作（たとえば、オブジェクトの位置、速度、及び他の属性を判定するための物理法則の適用）、イメージレンダリング動作（たとえば、テッセレーションシェーダ、頂点シェーダ、幾何シェーダ、及び／又はピクセルシェーダプログラム）などを含むがこれらに限定はされないさまざまな応用に関する処理タスクを実行することができる。ＰＰＵ  ２０２は、システムメモリ１０４及び／又はローカル並列処理メモリ２０４から内部（オンチップ）メモリにデータを転送し、そのデータを処理し、結果をシステムメモリ１０４及び／又はローカル並列処理メモリ２０４に戻って書き込むことができ、システムメモリ１０４及び／又はローカル並列処理メモリ２０４では、そのようなデータに、ＣＰＵ  １０２又は別の並列処理サブシステム１１２を含む他のシステムコンポーネントによってアクセスすることができる。
【００２５】
[0030]ＰＰＵ  ２０２に、ローカルメモリなしを含む、任意の量のローカル並列処理メモリ２０４を与えることができ、ＰＰＵ  ２０２は、ローカルメモリ及びシステムメモリを任意の組合せで使用することができる。たとえば、ＰＰＵ  ２０２を、ユニファイドメモリアーキテクチャ（ＵＭＡ）実施形態でグラフィックスプロセッサとすることができる。そのような実施形態では、専用のグラフィックス（並列処理）メモリがほとんど又は全く設けられず、ＰＰＵ  ２０２は、システムメモリを排他的に又はほとんど排他的に使用する。ＵＭＡ実施形態では、ＰＰＵ  ２０２を、ブリッジチップ若しくはプロセッサチップに統合することができ、或いは、ブリッジチップ又は他の通信手段を介してＰＰＵ  ２０２をシステムメモリに接続する高速リンク（たとえば、ＰＣＩ−Ｅ）を有するディスクリートチップとして提供することができる。
【００２６】
[0031]上で注記したように、任意の個数のＰＰＵ  ２０２を、並列処理サブシステム１１２に含めることができる。たとえば、複数のＰＰＵ  ２０２を、単一のアドインカード上に設けることができ、或いは、複数のアドインカードを、通信パス１１３に接続することができ、或いは、１つ又は複数のＰＰＵ  ２０２を、ブリッジチップに統合することができる。マルチＰＰＵシステム内のＰＰＵ  ２０２は、互いに同一又は異なるものとすることができる。たとえば、異なるＰＰＵ  ２０２が、異なる個数の処理コア、異なる量のローカル並列処理メモリなどを有することができる。複数のＰＰＵ  ２０２が存在する場合に、これらのＰＰＵを、並列に動作させて、単一のＰＰＵ  ２０２を用いて可能なものより高いスループットでデータを処理することができる。１つ又は複数のＰＰＵ  ２０２を組み込んだシステムを、デスクトップパーソナルコンピュータ、ラップトップパーソナルコンピュータ、又はハンドヘルドパーソナルコンピュータ、サーバ、ワークステーション、ゲーム機、組み込みシステム、及び類似物を含むさまざまな構成及びフォームファクタで実施することができる。
【００２７】
処理クラスタアレイの概要
[0032]図３Ａは、本発明の一実施形態による、図２のＰＰＵ  ２０２のうちの１つの中のＧＰＣ  ２０８のブロック図である。各ＧＰＣ  ２０８を、多数のスレッドを並列に実行するように構成することができ、ここで、用語「スレッド」は、入力データの特定のセットに対して実行される特定のプログラムのインスタンスを指す。いくつかの実施形態で、単一命令複数データ（ＳＩＭＤ）命令発行技法が、複数の独立の命令ユニットを提供せずに多数のスレッドの並列実行をサポートするのに使用される。他の実施形態では、単一命令複数スレッド（ＳＩＭＴ）技法が、ＧＰＣ  ２０８の各１つの中の処理エンジンのセットに命令を発行するように構成された共通命令ユニットを使用する、多数の全般的に同期化されたスレッドの並列実行をサポートするのに使用される。すべての処理エンジンが通常は同一の命令を実行するＳＩＭＤ実行体制とは異なって、ＳＩＭＴ実行は、異なるスレッドが所与のスレッドプログラムを通る分岐する実行パスにより簡単に従うことを可能にする。当業者は、ＳＩＭＤ処理体制が、ＳＩＭＴ処理体制の機能サブセットを表すことを理解するであろう。
【００２８】
[0033]グラフィックス応用では、ＧＰＣ  ２０８を、プリミティブセットアップ、ラスタ化、及びｚ枝刈りを含むことができるがこれらに限定はされないスクリーン空間グラフィックス処理機能を実行するプリミティブエンジンを実施するように構成することができる。プリミティブエンジンは、作業分配ユニット２００から処理タスクを受け取り、処理タスクがプリミティブエンジンによって実行される動作を必要としないときには、処理タスクは、プリミティブエンジンを通ってパイプラインマネージャ３０５に渡される。ＧＰＣ  ２０８の動作は、処理タスクをストリーミングマルチプロセッサ（ＳＰＭ）３１０に分配するパイプラインマネージャ３０５を介して有利に制御される。パイプラインマネージャ３０５を、ＳＰＭ  ３１０によって出力される処理されたデータの宛先を指定することによって、作業分配クロスバ３３０を制御するように構成することもできる。
【００２９】
[0034]一実施形態では、各ＧＰＣ  ２０８は、複数Ｍ個のＳＰＭ  ３１０を含み、ここで、Ｍ≧１であり、各ＳＰＭ  ３１０は、１つ又は複数のスレッドグループを処理するように構成される。また、各ＳＰＭ  ３１０は、パイプライン化することのできる機能ユニット（たとえば、算術論理ユニットなど）の同一のセットを有利に含み、当技術分野で既知のように、前の命令を終了する前に新しい命令を発行することを可能にする。機能ユニットの任意の組合せを提供することができる。一実施形態では、機能ユニットは、整数算術及び浮動小数点算術（たとえば、加算及び乗算）、比較演算、ブール演算（ＡＮＤ、ＯＲ、ＸＯＲ）、ビットシフト、及びさまざまな代数関数（たとえば、線形補間、三角関数、指数関数、及び対数関数など）の計算を含むさまざまな演算をサポートし、同一の機能ユニットハードウェアを活用して、異なる演算を実行することができる。
【００３０】
[0035]特定のＧＰＣ  ２０８に送られる一連の命令は、本明細書で前に定義したようにスレッドを構成し、あるＳＰＭ  ３１０内の並列処理エンジン（図示せず）にまたがるある個数の同時に実行されるスレッドの集合を、本明細書では「スレッドグループ」と称する。本明細書で使用される時に、「スレッドグループ」は、異なる入力データに対して同一のプログラムを同時に実行するスレッドのグループを指し、グループの各スレッドは、あるＳＰＭ  ３１０内の異なる処理エンジンに割り当てられる。スレッドグループは、ＳＰＭ  ３１０内の処理エンジンの個数より少数のスレッドを含むことができ、その場合に、いくつかの処理エンジンは、そのスレッドグループが処理されている時のサイクル中にアイドルになる。スレッドグループは、ＳＰＭ  ３１０内の処理エンジンの個数より多数のスレッドを含むこともでき、その場合に、処理は、複数のクロックサイクルにまたがって行われる。各ＳＰＭ  ３１０は、Ｇ個までのスレッドグループを同時にサポートすることができるので、Ｇ×Ｍ個のスレッドグループを、任意の所与の時にＧＰＣ  ２０８内で実行していることができることになる。
【００３１】
[0036]排他的ローカルアドレス空間が、各スレッドから使用可能であり、共有されるＣＴＡごとのアドレス空間が、ＣＴＡ内のスレッドの間でデータを渡すのに使用される。スレッドごとのローカルアドレス空間及びＣＴＡごとのアドレス空間に格納されたデータは、Ｌ１キャッシュ３２０に格納され、エビクションポリシー（ｅｖｉｃｔｉｏｎ  ｐｏｌｉｃｙ）を使用して、Ｌ１キャッシュ３２０内のデータを保存することを優先することができる。各ＳＰＭ  ３１０は、ロード動作及びストア動作を実行するのに使用される対応するＬ１キャッシュ３２０内の空間を使用する。各ＳＰＭ  ３１０は、すべてのＧＰＣ  ２０８の間で共有され、スレッドの間でデータを転送するのに使用され得るパーティションユニット２１５内のＬ２キャッシュにもアクセスできる。最後に、ＳＰＭ  ３１０は、オフチップ「グローバル」メモリにもアクセスでき、このオフチップ「グローバル」メモリは、たとえば、並列処理メモリ２０４及び／又はシステムメモリ１０４を含むことができる。Ｌ２キャッシュを使用して、グローバルメモリに書き込まれ、これから読み取られるデータを格納することができる。ＰＰＵ  ２０２の外部のすべてのメモリを、グローバルメモリとして使用できることを理解されたい。
【００３２】
[0037]グラフィックス応用では、ＧＰＣ  ２０８を、各ＳＰＭ  ３１０がテクスチャマッピング動作、たとえばテクスチャサンプル位置の判定、テクスチャデータの読取り、及びテクスチャデータのフィルタリングを実行するためにテクスチャユニット３１５に結合されるように構成することができる。テクスチャデータは、必要に応じて、メモリインターフェース２１４を介して読み取られ、Ｌ２キャッシュ、並列処理メモリ２０４、又はシステムメモリ１０４からフェッチされる。テクスチャユニット３１５を、内部キャッシュにテクスチャデータを格納するように構成することができる。いくつかの実施形態では、テクスチャユニット３１５は、Ｌ１キャッシュ３２０に結合され、テクスチャデータは、Ｌ１キャッシュ３２０に格納される。各ＳＰＭ  ３１０は、処理されたタスクをさらなる処理のために別のＧＰＣ  ２０８に供給するために、又はクロスバーユニット２１０を介して、Ｌ２キャッシュ、並列処理メモリ２０４、若しくはシステムメモリ１０４に処理されたタスクを格納するために、処理されたタスクを作業分配クロスバ３３０に出力する。プリＲＯＰ（プリラスタ演算）３２５は、ＳＰＭ  ３１０からデータを受け取り、データをパーティションユニット２１５内のＲＯＰユニットに向け、カラーブレンディングに関する最適化を実行し、ピクセルカラーデータを編成し、アドレス変換を実行する。
【００３３】
[0038]本明細書で説明されるコアアーキテクチャが、例示的であり、変形形態及び修正形態が可能であることを了解されたい。任意の個数の処理エンジン、たとえばプリミティブエンジン３０４、ＳＰＭ  ３１０、テクスチャユニット３１５、又はプリＲＯＰ３２５を、ＧＰＣ  ２０８内に含めることができる。さらに、１つのＧＰＣ  ２０８だけが図示されているが、ＰＰＵ  ２０２は、任意の個数のＧＰＣ  ２０８を含むことができ、このＧＰＣ  ２０８は、有利なことに機能的に互いに類似し、その結果、実行挙動は、どのＧＰＣ  ２０８が特定の処理タスクを受け取るかに依存しなくなる。さらに、各ＧＰＣ  ２０８は、別々の別個の処理エンジン、Ｌ１キャッシュ３２０などを使用して、他のＧＰＣ  ２０８と独立に有利に動作する。
【００３４】
[0039]図３Ｂは、本発明の一実施形態による、図２のＰＰＵ  ２０２のうちの１つの中のパーティションユニット２１５のブロック図である。図示されているように、パーティションユニット２１５は、Ｌ２キャッシュ３５０、フレームバッファ（ＦＢ）３５５、及びラスタ演算ユニット（ＲＯＰ）３６０を含む。Ｌ２キャッシュ３５０は、クロスバーユニット２１０及びＲＯＰ  ３６０から受け取られるロード動作及びストア動作を実行するように構成された読取り／書込みキャッシュである。読取りミス及び緊急のライトバック要求が、処理のためにＬ２キャッシュ３５０によってＦＢ  ３５５に出力される。ダーティ更新も、日和見主義の処理のためにＦＢ  ３５５に送られる。ＦＢ  ３５５は、並列処理メモリ２０４と直接にインターフェースし、読取り要求及び書込み要求を出力し、並列処理メモリ２０４から読み取られたデータを受け取る。
【００３５】
[0040]グラフィックス応用で、ＲＯＰ  ３６０は、ステンシル、ｚテスト、ブレンディング、及び類似物などのラスタ演算を実行し、グラフィックスメモリでの格納のために処理されたグラフィックスデータとしてピクセルデータを出力する、処理ユニットである。本発明のいくつかの実施形態では、ＲＯＰ  ３６０は、パーティションユニット２１５ではなく各ＧＰＣ  ２０８内に含まれ、ピクセルフラグメントデータではなくピクセル読取り要求及びピクセル書込み要求が、クロスバーユニット２１０を介して送られる。
【００３６】
[0041]処理されたグラフィックスデータを、ディスプレイデバイス１１０に表示するか、ＣＰＵ  １０２又は並列処理サブシステム１１２内の処理エンティティのうちの１つによるさらなる処理のためにルーティングすることができる。各パーティションユニット２１５は、ラスタ演算の処理を分散するためにＲＯＰ  ３６０を含む。いくつかの実施形態では、ＲＯＰ  ３６０を、メモリに書き込まれるｚデータ又はカラーデータを圧縮し、メモリから読み取られるｚデータ又はカラーデータを伸長するように構成することができる。
【００３７】
[0042]当業者は、図１、２、３Ａ、及び３Ｂに記載されたアーキテクチャが、決して本発明の範囲を限定しないことと、本明細書で教示される技法を、本発明の範囲から逸脱せずに、１つ又は複数のＣＰＵ、１つ又は複数のマルチコアＣＰＵ、１つ又は複数のＰＰＵ  ２０２、１つ又は複数のＧＰＣ  ２０８、１つ又は複数のグラフィックス処理ユニット又は特殊目的処理ユニット、或いは類似物を限定なしに含むすべての正しく構成された処理ユニットで実施できることとを理解するであろう。
【００３８】
データクラスベースのエビクションポリシー
[0043]図４は、本発明の一実施形態による、図３Ｂのパーティションユニット２１５の詳細なブロック図である。図示されているように、パーティションユニット２１５は、Ｌ２キャッシュ３５０、ＦＢ  ３５５、及びＲＯＰ  ３６０を含む。Ｌ２キャッシュ３５０は、Ｌ２キャッシュスライス４０２を含む。図３Ｂに関連して説明したように、Ｌ２キャッシュ３５０を、読取りコマンド及び書込みコマンドのより効率的な処理のために複数のスライスに分割することができる。Ｌ２キャッシュスライス４０２は、Ｌ２キャッシュ３５０の１つのそのようなスライスである。Ｌ２キャッシュスライス４０２は、クロスバコマンドバッファ４０４、ＲＯＰコマンドバッファ４０６、アービタ４０８、タグルックアップユニット４１０、タグストア４１２、データキャッシュ４１４、読取りデータバッファ４１６、及び書込みデータバッファ４１８を含む。
【００３９】
[0044]動作中に、Ｌ２キャッシュスライス４０２は、ＧＰＣ  ２０８及びＲＯＰ  ３６０など、並列処理サブシステム１１２内のさまざまなクライアントから読取りコマンド及び書込みコマンドを受け取る。ＧＰＣ  ２０８から受け取られる読取りコマンド及び書込みコマンドは、クロスバーユニット２１０を介して送られる。書込みコマンドの場合には、書込みコマンドに関連するデータも、Ｌ２キャッシュスライス４０２に送られる。
【００４０】
[0045]Ｌ２キャッシュスライス４０２によって受け取られる各読取りコマンド又は各書込みコマンドは、データキャッシュ４１４内のキャッシュラインのセットに関連するメモリアドレスを含み、ここに、読取りコマンド又は書込みコマンドに関連するデータを格納することができる。一実施形態では、データキャッシュ４１４は、物理的にインデクシングされタグ付けされる６４ＫＢのセットアソシアティブデータキャッシュである。データキャッシュ４１４は、４つのセグメントに分割され、各セグメントは、３２個のロウを有し、各ロウは、３２Ｂの１６個のキャッシュラインを有する。キャッシュラインは、読取りコマンド及び書込みコマンドに関連するデータが格納される、データキャッシュ４１４内の物理位置である。任意の所与のクロックサイクルに、データキャッシュ４１４内のキャッシュラインは、空である場合があり、常駐データを含む場合があり、或いは、進行中のコマンドのために予約されている場合がある。本発明の一実施形態では、コマンドに関連するデータのサイズに起因して、複数のキャッシュラインが、コマンドに関連するデータを格納するために予約される必要がある場合がある。本明細書で説明する技法は、複数のキャッシュラインに格納されなければならないデータに簡単に拡張することができる。
【００４１】
[0046]Ｌ２キャッシュスライス４０２によって受け取られる読取りコマンド又は書込みコマンドは、受け取られたコマンドに関連するデータのデータクラスをも含む。コマンドに関連するデータのデータクラスは、特定のコマンドを送るクライアントによって決定され、本明細書でより詳細に説明するように、並列処理サブシステム１１２内でのそのデータの再利用可能性を反映する。
【００４２】
[0047]クロスバコマンドバッファ４０４は、クロスバーユニット２１０に結合され、異なるＧＰＣ  ２０８からクロスバーユニット２１０を介して読取りコマンド及び書込みコマンドを受け取るように構成される。ＲＯＰコマンドバッファ４０６は、ＲＯＰ  ３６０に結合され、ＲＯＰ  ３６０から読取りコマンド及び書込みコマンドを受け取るように構成される。クロスバコマンドバッファ４０４及びＲＯＰコマンドバッファ４０６は、ＦＩＦＯ（先入れ先出し）バッファである、すなわち、これらのコマンドバッファによって受け取られたコマンドは、コマンドがクロスバーユニット２１０又はＲＯＰ  ３６０から受け取られる順序で出力される。クロスバコマンドバッファ４０４及びＲＯＰコマンドバッファ４０６は、アービタ４０８にも結合される。アービタ４０８は、クロスバコマンドバッファ４０４又はＲＯＰコマンドバッファ４０６から所与のコマンドを選択し、選択されたコマンドを処理のためにタグルックアップユニット４１０に送るのに、標準的なアービトレーション技法を使用するように構成される。
【００４３】
[0048]タグルックアップユニット４１０は、アービタ４０８から受け取られたコマンドに関連するデータに関してデータキャッシュ４１４内にキャッシュライン可用性があるかどうかを判定するように構成される。タグルックアップユニット４１０は、可能な場合に、データキャッシュ４１４内に常駐するデータをエビクトさせることによって、新たに受け取られた読取りコマンド又は書込みコマンドに関連するデータのためにキャッシュラインを使用可能にするようにも構成される。データキャッシュ４１４内の１つ又は複数のキャッシュラインがそのようなデータのために使用可能になった後に、タグルックアップユニット４１０は、コマンドに関連するデータのためにデータキャッシュ４１４内の識別されたキャッシュラインを予約するように構成される。
【００４４】
[0049]データキャッシュ４１４内の各キャッシュラインは、タグストア４１２内に対応するエントリを有し、タグストア内の各エントリは、状態部分及びタグ部分を含む。タグストア内のエントリの状態部分は、そのエントリに対応するキャッシュラインの特定の状態を示す。エントリの状態部分は、有効（ｖｏｌｉｄ）、ダーティビット（ｄｉｒｔｙ  ｂｉｔ）、及びピンドビット（ｐｉｎｎｅｄ  ｂｉｔ）を含む。セットされている時に、有効ビットは、その特定のエントリに対応するキャッシュラインが有効なデータを格納することを示す。セットされている時に、ダーティビットは、その特定のエントリに対応するキャッシュラインがダーティデータを格納することを示す。セットされている時に、ピンドビットは、その特定のエントリに対応するキャッシュラインがピンドデータ（ｐｉｎｎｅｄ  ｄａｔａ）すなわち、Ｌ２キャッシュ３５０によって現在使用されつつあるデータを格納することを示す。エントリのタグ部分は、その特定のエントリに関連するキャッシュライン内に格納されたデータのデータクラスを含む。本明細書で前に示したように、Ｌ２キャッシュ３５０のキャッシュセマンティクスは、３つのデータクラスすなわちｅｖｉｃｔ＿ｆｉｒｓｔ（最初にエビクト）、ｅｖｉｃｔ＿ｎｏｒｍａｌ（通常のエビクト）、及びｅｖｉｃｔ＿ｌａｓｔ（最後にエビクト）を含むように拡張される。ｅｖｉｃｔ＿ｆｉｒｓｔデータクラスに属するデータキャッシュ４１４内のキャッシュライン内に格納されたデータは、通常、Ｌ２キャッシュ３５０を使用するクライアントのいずれかによる再利用可能性をほとんど又は全く有しない。再利用の低い可能性のゆえに、このデータを、後続キャッシュミスを引き起こす高いリスクを伴わずに、他のデータのために場所をあけるためにデータキャッシュ４１４からすばやくエビクトすることができる。ｅｖｉｃｔ＿ｎｏｒｍａｌデータクラスに属するデータキャッシュ４１４内のキャッシュライン内に格納されたデータは、通常、Ｌ２キャッシュ３５０を使用するクライアントによる再利用可能性を多少有する。再利用可能性のゆえに、このデータを、多数の後続キャッシュミスを引き起こさずに、ｅｖｉｃｔ＿ｆｉｒｓｔデータクラスに属するデータより低い優先順位でエビクトすることができる。ｅｖｉｃｔ＿ｌａｓｔデータクラスに属するデータキャッシュ４１４内のキャッシュライン内に格納されたデータは、通常、Ｌ２キャッシュ３５０を使用するクライアントによる高い再利用可能性を有する。再利用の高い可能性のゆえに、このデータを、他のデータのために場所をあけるためにデータキャッシュ４１４からエビクトしてはならない。というのは、これが、後続キャッシュミスの高いリスクをもたらすからである。他の実施形態では、Ｌ２キャッシュ３５０セマンティクスを、並列処理サブシステム１１２の要件に基づいて他のデータクラスを含むように拡張することができる。
【００４５】
[0050]キャッシュラインに格納されたデータは、「クリーン（ｃｌｅａｎ）」又は「ダーティ（ｄｉｒｔｙ）」、及び「ピンド（ｐｉｎｎｅｄ）」又は「アンピンド（ｕｎｐｉｎｎｅｄ）」としても分類される。格納されたデータは、そのデータが並列処理メモリ２０４内の対応するデータとコヒーレントである場合に、クリーンであると考えられる。格納されたデータは、そのデータが並列処理メモリ２０４内の対応するデータとコヒーレントではない場合に、ダーティであると考えられる。周知のとおり、ダーティデータは、エビクトされる前にクリーンにされなければならない。アンピンドデータ（ｕｎｐｉｎｎｅｄ  ｄａｔａ）は、現在使用されつつあるのではない、データキャッシュ４１４のキャッシュラインに格納されたデータを構成する。ピンドデータは、Ｌ２によって現在使用されつつある、データキャッシュ４１４のキャッシュラインに格納されたデータを構成する。ピンドデータは使用中なので、このデータをエビクトしてはならない。常駐データを有するデータキャッシュ４１４内のキャッシュラインに関連するタグストア４１２内のエントリの有効ビットは、セットされる。常駐データを有しないデータキャッシュ４１４内のキャッシュラインに関連するタグストア４１２内のエントリの有効ビットは、クリアされる。
【００４６】
[0051]読取りコマンドの場合に、読取りデータバッファ４１６は、データキャッシュ４１４から受け取られた処理された読取りコマンドに関連するデータが、場合に応じてクロスバーユニット２１０又はＲＯＰ  ３６０を介してＧＰＣ  ２０８に送り返されるまで、そのデータを格納するように構成される。書込みコマンドの場合に、書込みデータバッファ４１８は、場合に応じてクロスバーユニット２１０又はＲＯＰ  ３６０を介してＧＰＣ  ２０８から受け取られた書込みコマンドに関連するデータがデータキャッシュ４１４内の対応する予約されたキャッシュラインに送られるまで、そのデータを格納するように構成される。
【００４７】
[0052]本明細書で前に示したように、アービタ４０８からコマンドを受け取る時に、タグルックアップユニット４１０は、受け取られたコマンドに関連するデータが潜在的に格納されている可能性があるデータキャッシュ４１４内のキャッシュラインのセットを識別するように構成される。キャッシュラインのこのセットは、本明細書では「識別されたキャッシュライン」と称するが、標準的なセットアソシアティブキャッシング技法を使用して読取りコマンド又は書込みコマンドに含まれるメモリアドレスに基づいて判定される（このメモリアドレスは、データがそこから読み取られる又はデータが最終的にそこに書き込まれる、並列処理メモリ２０４内の実際の位置を示す）。読取りコマンドの場合に、タグルックアップユニット４１０は、次に、コマンドに関連するデータが識別されたキャッシュラインのうちの１つに現在常駐しているかどうかを判定する。そうである場合には（これはキャッシュヒットがあることを意味する）、タグルックアップユニット４１０は、要求されたデータをデータキャッシュ４１４から読取りデータバッファ４１６に送らせ、読取りデータバッファ４１６では、データが要求するクライアントに返されるまで、データが格納される。書込みコマンドの場合に、タグルックアップユニット４１０は、まず、コマンドに関連するデータが、識別されたキャッシュラインのうちの１つに現在常駐しているデータを上書きできるかどうかを判定する。そうである場合には（やはりキャッシュヒットがあることを意味する）、タグルックアップユニット４１０は、書込みデータバッファ４１８内に格納されたコマンドに関連するデータを、データキャッシュ４１４の関連する位置に書き込ませる。
【００４８】
[0053]キャッシュミスの場合（コマンドに関連するデータが識別されたキャッシュラインのうちの１つに常駐しない（読取りコマンドの場合）又はそれに書き込めない（書込みコマンドの場合）ことを意味する）に、タグルックアップユニット４１０は、識別されたキャッシュラインのうちの１つが空であるかどうかを判定する。識別されたキャッシュラインのうちの１つが空である場合には、タグルックアップユニット４１０は、読取りコマンド又は書込みコマンドに関連するデータのために、その空のキャッシュラインを予約する。識別されたキャッシュラインのどれもが空ではない場合には、タグルックアップユニット４１０は、識別されたキャッシュラインに常駐するデータのデータクラスに基づいて、一連のキャッシュエビクションポリシーを実施する。
【００４９】
[0054]タグルックアップ４１０ユニットは、まず、識別されたキャッシュラインのそれぞれに関連するタグストア４１２内のエントリを調べて、キャッシュラインのいずれかが、クリーン、アンピンド、及びｅｖｉｃｔ＿ｆｉｒｓｔである常駐データを有するかどうかを判定する。クリーン、アンピンド、及びｅｖｉｃｔ＿ｆｉｒｓｔである常駐データを有するキャッシュラインに関連するタグストア４１２内のエントリの状態部分は、セットされた有効ビット、クリアされたダーティビット、及びクリアされたピンドビットを有しなければならない。そのようなエントリのタグ部分は、関連するキャッシュラインに格納されたデータがｅｖｉｃｔ＿ｆｉｒｓｔデータクラスに属することを示さなければならない。そのようなキャッシュラインが存在する場合には、タグルックアップユニット４１０は、最長時間未使用のクリーン、アンピンド、及びｅｖｉｃｔ＿ｆｉｒｓｔのデータをデータキャッシュ４１４からエビクトする。データをエビクトした後に、タグルックアップユニット４１０は、結果の空のキャッシュラインをコマンドに関連するデータのために予約する。
【００５０】
[0055]識別されたキャッシュラインに常駐するデータのどれもが、クリーン、アンピンド、及びｅｖｉｃｔ＿ｆｉｒｓｔではない場合には、タグルックアップ４１０は、識別されたキャッシュラインのそれぞれに関連するタグストア４１２内のエントリを調べて、キャッシュラインのいずれかがクリーン、アンピンド、及びｅｖｉｃｔ＿ｎｏｒｍａｌである常駐データ（有効ビットをセットされた）を有するかどうかを判定する。クリーン、アンピンド、及びｅｖｉｃｔ＿ｎｏｒｍａｌである常駐データを有するキャッシュラインに関連するタグストア４１２内のエントリの状態部分は、セットされた有効ビット、クリアされたダーティビット、及びクリアされたピンドビットを有しなければならない。そのようなエントリのタグ部分は、関連するキャッシュラインに格納されたデータがｅｖｉｃｔ＿ｎｏｒｍａｌデータクラスに属することを示さなければならない。そのようなキャッシュラインが存在する場合に、タグルックアップユニット４１０は、最長時間未使用のクリーン、アンピンド、及びｅｖｉｃｔ＿ｎｏｒｍａｌのデータをデータキャッシュ４１４からエビクトする。データをエビクトした後に、タグルックアップユニット４１０は、結果の空のキャッシュラインをコマンドに関連するデータのために予約する。
【００５１】
[0056]一実施形態では、識別されたキャッシュラインに常駐するデータのどれもが、クリーン、アンピンド、及びｅｖｉｃｔ＿ｆｉｒｓｔのデータでもクリーン、アンピンド、及びｅｖｉｃｔ＿ｎｏｒｍａｌのデータでもない場合に、そのコマンドは、識別されたキャッシュラインのうちの１つに常駐するデータをデータキャッシュ４１４からエビクトできるようになるまで、ストールされる。
【００５２】
[0057]代替実施形態では、識別されたキャッシュラインに常駐するデータのどれもが、クリーン、アンピンド、及びｅｖｉｃｔ＿ｆｉｒｓｔのデータでもクリーン、アンピンド、及びｅｖｉｃｔ＿ｎｏｒｍａｌのデータでもない場合に、タグルックアップユニット４１０は、コマンドに関連するデータがｅｖｉｃｔ＿ｌａｓｔデータクラスに関連するかどうかを判定する。コマンドに関連するデータがｅｖｉｃｔ＿ｌａｓｔデータクラスに属さない場合には、そのコマンドは、識別されたキャッシュラインのうちの１つに常駐するデータをデータキャッシュ４１４からエビクトできるようになるまで、ストールされる。しかし、コマンドに関連するデータがｅｖｉｃｔ＿ｌａｓｔデータクラスに属する場合には、タグルックアップ４１０は、識別されたキャッシュラインのそれぞれに関連するタグストア４１２内のエントリを調べて、キャッシュラインの１つがクリーン、アンピンド、及びｅｖｉｃｔ＿ｌａｓｔである常駐データを有するかどうかを判定する。クリーン、アンピンド、及びｅｖｉｃｔ＿ｌａｓｔである常駐データを有するキャッシュラインに関連するタグストア４１２内のエントリの状態部分は、セットされた有効ビット、クリアされたダーティビット、及びクリアされたピンドビットを有しなければならない。そのようなエントリのタグ部分は、関連するキャッシュラインに格納されたデータがｅｖｉｃｔ＿ｌａｓｔデータクラスに属することを示さなければならない。一実施形態では、そのようなキャッシュラインが存在する場合に、タグルックアップユニット４１０は、最長時間未使用のクリーン、アンピンド、及びｅｖｉｃｔ＿ｌａｓｔのデータをデータキャッシュ４１４からエビクトする。データをエビクトした後に、タグルックアップユニット４１０は、結果の空のキャッシュラインをコマンドに関連するデータのために予約する。
【００５３】
[0058]他の実施形態では、ｅｖｉｃｔ＿ｌａｓｔデータクラスに属するデータをデータキャッシュ４１４からエビクトできない場合に、タグルックアップユニット４１０は、最長時間未使用のクリーン、アンピンド、及びｅｖｉｃｔ＿ｌａｓｔのデータをクリーン、アンピンド、及びｅｖｉｃｔ＿ｎｏｒｍａｌのデータに再分類する。関連するキャッシュラインに常駐するデータのデータクラスを変更することによって、タグルックアップユニット４１０は、上で示したキャッシュエビクションポリシーに基づいてその常駐データをエビクトすることができる。次に、タグルックアップユニット４１０は、最長時間未使用のクリーン、アンピンド、ｅｖｉｃｔ＿ｎｏｒｍａｌのデータをデータキャッシュ４１４からエビクトする。ｅｖｉｃｔ＿ｎｏｒｍａｌデータをエビクトした後に、タグルックアップユニット４１０は、本明細書で前に説明したように、空のキャッシュラインをコマンドに関連するデータのために予約する。
【００５４】
[0059]コマンドに関連するデータのためにキャッシュラインを予約するために、タグルックアップユニット４１０は、予約されるキャッシュラインに関連するエントリ内のピンドビットをセットする。次に、タグルックアップユニット４１０は、コマンドに関連するデータのデータクラス及び予約されるキャッシュラインのメモリアドレスタグを反映するように、予約されるキャッシュラインに関連するエントリ内のタグ部分を更新する。適当なキャッシュラインが予約された後に、読取りコマンドに関して、タグルックアップユニット４１０は、読取りコマンドに関連するデータに関するデータ要求をＦＢ  ３５５に送る。ＦＢ  ３５５は、読取りコマンドに関連するデータを、将来のクロックサイクルに、予約されたキャッシュラインに送る。書込みコマンドに関して、書込みコマンドに関連するデータは、書込みデータバッファ４１８から送られ、予約されたキャッシュラインに格納される。次に、タグルックアップユニット４１０は、書込みコマンドに関連するデータのデータクラスに基づいて、そのデータを並列処理メモリ２０４内にも格納しなければならないかどうかを判定する。データを並列処理メモリ２０４内に格納しなければならない場合には、タグルックアップユニット４１０は、ダーティデータ通知をＦＢ  ３５５に送る。タグルックアップユニット４１０は、予約されたキャッシュラインに関連するエントリ内のダーティビットをもセットする。それに応答して、ＦＢ  ３５５は、データを予約されたキャッシュラインから並列処理メモリ２０４に、将来のクロックサイクルに送る。データが受け取られた後に、ピンドビットが、クリアされる。
【００５５】
[0060]他の実施形態では、タグストア４２２内のエントリの状態部分を、エントリに対応するキャッシュライン内のデータがクリーンでアンピンドである時を示すための単一ビットなどを限定なしに含む、任意の技術的に実現可能な形で実施することができる。したがって、当業者は、本明細書の説明に含まれるもののどれもが、本発明の範囲を限定することを意図されていないことを理解するであろう。
【００５６】
[0061]ある種の実施形態では、読取りコマンドを、並列処理サブシステム１１２内のクライアントによってＬ２キャッシュスライス４０２に送ることができ、ここで、これらのコマンドに関連するデータは、本明細書で前に説明したようにＦＢ  ３５５に結合された並列処理メモリ２０４から取り出されるのではなく、システムメモリ１０４又はコンピュータシステム１００内の別のＧＰＵ（又はＰＰＵ）に関連するメモリから取り出され、一時的にデータキャッシュ４１４に格納される。同様に、ある種の実施形態では、書込みコマンドを、ＧＰＣ  ２０８又はＲＯＰ  ３６０によってＬ２キャッシュスライス４０２に送ることができ、ここで、これらのコマンドに関連するデータは、本明細書で前に説明したようにＦＢ  ３５５に結合された並列処理メモリ２０４に書き込まれるのではなく、システムメモリ１０４又はコンピュータシステム１００内の別のＧＰＵ（又はＰＰＵ）に関連するメモリに書き込まれる前に、データキャッシュ４１４に一時的に格納される。すべてのそのような実施形態で、読取りコマンド又は書込みコマンドに関連するデータがデータキャッシュ４１４内にキャッシングされ、データキャッシュ４１４からエビクトされる形は、本明細書で説明されるように、変更されないままになる。したがって、すべてのそのような実施形態が、本発明の範囲に含まれる。
【００５７】
[0062]図５Ａ〜５Ｄに、本発明の一実施形態による、図４のデータキャッシュ４１４に出入りするデータのフローを管理する方法ステップの流れ図を示す。方法ステップを、図１〜４に関連して説明するが、当業者は、この方法ステップを任意の順序で実行するように構成されたすべてのシステムが本発明の範囲に含まれることを理解するであろう。
【００５８】
[0063]方法５００は、ステップ５０２で開始され、ここで、Ｌ２キャッシュスライス４０２が、システム１００内のクライアントから読取りコマンド又は書込みコマンドを受け取る。図４に関連して説明したように、Ｌ２キャッシュスライス４０２によって受け取られる各コマンドは、そのコマンドに関連するデータが格納されている可能性があるデータキャッシュ４１４内に配置されたキャッシュラインのセットに関連するメモリアドレスを含む。Ｌ２キャッシュスライス４０２によって受け取られるコマンドは、そのコマンドに関連するデータのデータクラスをも含む。ステップ５０４では、コマンドを、場合に応じて、クロスバコマンドバッファ４０４又はＲＯＰコマンドバッファ４０６に格納する。
【００５９】
[0064]ステップ５０６で、コマンドが書込みコマンドである場合に、方法５００は、ステップ５０８に進み、ここで、コマンドに関連するデータを、Ｌ２キャッシュスライス４０２によって受け取り、書込みデータバッファ４１８に格納する。ステップ５０６で、コマンドが読取りコマンドである場合には、方法５００は、ステップ５１０に直接に進む。ステップ５１０では、ステップ５０２でＬ２キャッシュスライス４０２によって受け取られたコマンドを、標準的なアービトレーション技法を使用してアービタ４０８によって選択し、処理のためにタグルックアップユニット４１０に送る。
【００６０】
[0065]ステップ５１２では、タグルックアップ４１０ユニットは、選択されたコマンドに関連するデータが格納されている可能性があるデータキャッシュ４１４内のキャッシュラインのセットを、コマンドに含まれるメモリアドレスに基づき、セットアソシアティブキャッシング技法を使用して、識別する。やはり、キャッシュラインのこのセットを、「識別されたキャッシュライン」と称する。ステップ５１４では、タグルックアップユニット４１０は、キャッシュミスがあるかどうかを判定する。コマンドに関連するデータが、識別されたキャッシュラインのうちの１つに現在常駐していない場合に、キャッシュミスがある。キャッシュミスの場合には、方法ステップ５００は、ステップ５１６に進む。
【００６１】
[0066]ステップ５１６では、タグルックアップユニット４１０は、識別されたキャッシュラインのうちの１つが空である（そのキャッシュラインが現在使用可能であることを意味する）かどうかを判定する。識別されたキャッシュラインのどれもが空ではない（そのキャッシュラインが現在はダーティ又はピンドであることを意味する）場合には、方法５００は、ステップ５１８に進む。ステップ５１８では、タグルックアップユニット４１０は、識別されたキャッシュラインに対応するタグストア４１２内のタグを調べて、これらのキャッシュラインのうちでクリーン、アンピンド、及びｅｖｉｃｔ＿ｆｉｒｓｔデータクラスである常駐データを有するものがある場合に、それがどのキャッシュラインであるかを判定する。キャッシュラインのどれもが、クリーン、アンピンド、及びｅｖｉｃｔ＿ｆｉｒｓｔデータクラスである常駐データを有しない場合には、方法５００はステップ５２０に進む。ステップ５２０では、タグルックアップユニット４１０は、識別されたキャッシュラインに対応するタグストア内のタグを調べて、これらのキャッシュラインのうちでクリーン、アンピンド、及びｅｖｉｃｔ＿ｎｏｒｍａｌデータクラスである常駐データを有するものがある場合に、それがどのキャッシュラインであるかを判定する。キャッシュラインのどれもが、クリーン、アンピンド、及びｅｖｉｃｔ＿ｎｏｒｍａｌである常駐データを有しない場合には、方法５００はステップ５２２に進む。
【００６２】
[0067]ステップ５２２では、タグルックアップユニット４１０は、コマンドに含まれるデータクラスを調べて、コマンドに関連するデータがｅｖｉｃｔ＿ｌａｓｔデータクラスのデータであるかどうかを判定する。コマンドに関連するデータのデータクラスがｅｖｉｃｔ＿ｌａｓｔデータクラスである場合には、方法５００は、ステップ５２４に進み、ここで、タグルックアップユニット４１０は、識別されたキャッシュラインに対応するタグストア４１２内のタグを調べて、これらのキャッシュラインのうちでクリーン、アンピンド、及びｅｖｉｃｔ＿ｌａｓｔデータクラスである常駐データを有するものがある場合に、それがどのキャッシュラインであるかを判定する。識別されたキャッシュラインのうちの１つ又は複数が、クリーン、アンピンド、及びｅｖｉｃｔ＿ｌａｓｔデータクラスである常駐データを有する場合には、クリーン、アンピンド、及びｅｖｉｃｔ＿ｌａｓｔクラスである最長時間未使用の常駐データを有するキャッシュラインが、エビクションのために選択される。
【００６３】
[0068]ステップ５２６では、タグルックアップユニット４１０は、選択されたキャッシュラインを、コマンドに関連するデータのために予約する。図４に関連して説明したように、キャッシュラインをコマンドに関連するデータのために予約するために、タグルックアップユニット４１０は、選択されたキャッシュラインに関連するエントリ内の有効ビット部分をセットする。次に、タグルックアップユニットは、コマンドに関連するデータのデータクラスを反映するように、選択されたキャッシュラインに関連するエントリ内のタグ部分を更新する。
【００６４】
[0069]ステップ５２８では、タグルックアップユニット４１０は、コマンドが書込みコマンドであるかどうかを判定する。コマンドが書込みコマンドである場合には、方法５００はステップ５３０に進み、ここで、書込みコマンドに関連するデータを、書込みデータバッファ４１８から予約されたキャッシュラインに送る。ステップ５３２では、タグルックアップユニット４１０は、コマンドに関連するデータのデータクラスを分析して、そのデータを格納のために外部メモリに送らなければならないかどうかを判定する。一実施形態では、ｅｖｉｃｔ＿ｌａｓｔデータクラスのデータは、キューイングされたデータであり、格納のために外部メモリに送られてはならないが、ｅｖｉｃｔ＿ｆｉｒｓｔデータクラス及びｅｖｉｃｔ＿ｎｏｒｍａｌデータクラスのデータは、格納のために外部メモリに送られなければならない。データを格納のために外部メモリに送らなければならない場合には、ステップ５３４で、タグルックアップユニット４１０は、ダーティデータ通知をフレームバッファ論理３５５に送る。フレームバッファ論理３５５は、このダーティデータを効率的なクロックサイクルに外部メモリに送る。ステップ５３２で、タグルックアップユニット４１０が、データを格納のために外部メモリに送ってはならないと判定する場合には、方法５００は終了する。
【００６５】
[0070]戻ってステップ５３０を参照すると、コマンドが読取りコマンドである場合には、方法５００は、ステップ５３６に進み、ここで、タグルックアップユニット４１０は、データ要求通知をフレームバッファ論理３５５に送る。フレームバッファ論理３５５は、要求されたデータを、効率的なクロックサイクルに、ステップ５２６で予約されたキャッシュラインに送る。その後、方法５００は終了する。
【００６６】
[0071]戻ってステップ５２４を参照すると、キャッシュラインのどれもがクリーン、アンピンド、及びｅｖｉｃｔ＿ｌａｓｔデータクラスである常駐データを有しない場合には、ステップ５２５でコマンドをストールさせ、方法５００は、本明細書で前に説明したステップ５１６に戻る。同様に、戻ってステップ５２２を参照すると、コマンドに関連するデータのデータクラスがｅｖｉｃｔ＿ｌａｓｔではない場合には、ステップ５２５でコマンドをストールさせ、方法５００は、本明細書で前に説明したステップ５１６に戻る。
【００６７】
[0072]戻ってステップ５２０を参照すると、識別されたキャッシュラインのうちの１つ又は複数が、クリーン、アンピンド、及びｅｖｉｃｔ＿ｎｏｒｍａｌデータクラスの常駐データを有する場合には、クリーン、アンピンド、及びｅｖｉｃｔ＿ｎｏｒｍａｌデータクラスの最長時間未使用の常駐データを有するキャッシュラインが、エビクションのために選択される。その後、方法５００は、本明細書で前に説明したステップ５２６に直接に進む。同様に、戻ってステップ５１８を参照すると、識別されたキャッシュラインのうちの１つ又は複数が、クリーン、アンピンド、及びｅｖｉｃｔ＿ｆｉｒｓｔデータクラスの常駐データを有する場合には、クリーン、アンピンド、及びｅｖｉｃｔ＿ｆｉｒｓｔデータクラスの最長時間未使用の常駐データを有するキャッシュラインが、エビクションのために選択される。その後、方法５００は、本明細書で前に説明したステップ５２６に直接に進む。
【００６８】
[0073]戻ってステップ５１６を参照すると、データキャッシュ４１４内のキャッシュラインが使用可能である場合には、方法５００は、本明細書で前に説明したステップ５２８に直接に進む。最後に、戻ってステップ５１４を参照すると、キャッシュヒット（キャッシュミスではなく）がある場合には、方法５００は、ステップ５３８に直接に進む。ステップ５３８では、タグルックアップユニット４１０は、コマンドが書込みコマンドであるかどうかを判定する。コマンドが書込みコマンドである場合には、方法５００はステップ５４０に進み、ここで、書込みコマンドに関連するデータを、書込みデータバッファ４１８から既に予約されているキャッシュラインに送る。ステップ５３８で、コマンドが読取りコマンドである場合には、ステップ５４２で、タグルックアップユニット４１０は、既に予約されたキャッシュラインに格納されたデータを読取りデータバッファ４１６に送らせる。ステップ５４４では、読取りデータバッファ４１６からのデータを、ステップ５０２で読取りコマンドを送ったクライアントに送る。
【００６９】
[0074]要するに、クライアントによってＬ２キャッシュスライスに送られる各読取りコマンド又は各書込みコマンドは、その特定のコマンドに関連するデータのメモリアドレス及びデータクラスを含む。Ｌ２キャッシュスライス内のタグルックアップユニットは、そのようなコマンドに含まれるメモリアドレスを分析して、そのコマンドに関連するデータが格納されている可能性がある潜在的なキャッシュラインのセットを判定する。タグルックアップユニットは、潜在的キャッシュラインのそれぞれに関連する、タグストアに格納されたタグをも分析して、コマンドに関連するデータのために予約されている可能性がある少なくとも１つのキャッシュラインを識別する。潜在的キャッシュラインのうちの１つが空である場合には、タグルックアップユニットは、要求されたデータ又は書き込まれるデータのためにそのキャッシュラインを予約する。特定のコマンドのためにキャッシュラインを予約する時に、タグルックアップユニットは、そのコマンドに関連するデータのデータクラスを、そのキャッシュラインに対応するタグストア内のエントリのタグ部分に格納する。
【００７０】
[0075]しかし、識別されたキャッシュラインのどれもが空ではない場合には、タグルックアップユニットは、識別されたキャッシュラインのいずれかが、クリーン、アンピンドであり、ｅｖｉｃｔ＿ｆｉｒｓｔデータクラスに属する常駐データを有するかどうかを判定する。識別されたラインのうちの１つ又は複数のデータが、これらの判断基準のすべてを満足する場合には、タグルックアップユニットは、最長時間未使用のクリーン、アンピンド、ｅｖｉｃｔ＿ｆｉｒｓｔのデータをエビクトし、関連するキャッシュラインを要求されたデータ又は書き込まれるデータのために予約する。識別されたキャッシュラインのデータの中に、これらの判断基準のすべてを満足するものがない場合には、タグルックアップユニットは、識別されたキャッシュラインのいずれかが、クリーン、アンピンドであり、ｅｖｉｃｔ＿ｎｏｒｍａｌデータクラスに属する常駐データを有するかどうかを判定する。識別されたラインのうちの１つ又は複数のデータが、これらの判断基準のすべてを満足する場合には、タグルックアップユニットは、最長時間未使用のクリーン、アンピンド、ｅｖｉｃｔ＿ｎｏｒｍａｌのデータをエビクトし、関連するキャッシュラインを要求されたデータ又は書き込まれるデータのために予約する。識別されたキャッシュラインのデータの中に、これらの判断基準のすべてを満足するものがない場合には、読取りコマンド又は書込みコマンドは、識別されたラインのうちの１つのデータをエビクトできるようになるまで、ストールされる。
【００７１】
[0076]有利なことに、データキャッシュに格納されたデータに関連するデータクラスは、タグルックアップユニットが、読取りコマンド又は書込みコマンドに関連するデータのために場所をあける時に、再利用の最も低い可能性を有するデータをエビクトすることを可能にする。データエビクションのこの機構は、システム内のクライアントによって再利用できるデータの早期エビクションから生じるキャッシュミスの回数を減らす。さらに、データキャッシュを使用して、頻繁に再利用されるが、外部メモリに送られる必要がないデータを、適当なデータクラスをそのデータにアタッチすることによって格納することができる。これは、そのデータを格納するための追加データストレージ構造の必要を除去する。
【００７２】
[0077]前述は、本発明の実施形態を対象とするが、本発明の他の実施形態及びさらなる実施形態を、本発明の基本的な範囲から逸脱せずに考案することができる。たとえば、本発明の諸態様を、ハードウェア又はソフトウェアで、或いはハードウェア及びソフトウェアの組合せで実施することができる。本発明の一実施形態を、コンピュータシステムと共に使用されるプログラム製品として実施することができる。プログラム製品のプログラム（複数可）は、実施形態の機能（本明細書で説明した方法を含む）を定義し、さまざまなコンピュータ可読記憶媒体に含めることができる。例示的なコンピュータ可読記憶媒体は、（ｉ）その上に情報が永久的に格納される書込み不能記憶媒体（たとえば、ＣＤ−ＲＯＭドライブによって読取り可能なＣＤ−ＲＯＭディスク、フラッシュメモリ、ＲＯＭチップ、又は任意のタイプのソリッドステート不揮発性半導体メモリなどのコンピュータ内の読取り専用メモリデバイス）及び（ｉｉ）その上に変更可能な情報が格納される書込み可能記憶媒体（たとえば、ディスケットドライブ内のフロッピディスク、ハードディスクドライブ、又は任意のタイプのソリッドステートランダムアクセス半導体メモリ）を含むが、これらに限定はされない。そのようなコンピュータ可読記憶媒体は、本発明の機能を指示するコンピュータ可読命令を担持する時に、本発明の実施形態である。したがって、本発明の範囲は、添付の特許請求の範囲によって決定される。
【符号の説明】
【００７３】
１００  コンピュータシステム
１０２  中央処理装置（ＣＰＵ）
１０４  システムメモリ
１０５  メモリブリッジ
１０６  通信パス
１０７  Ｉ／Ｏ（入出力）ブリッジ
１０８  ユーザ入力デバイス
１１０  ディスプレイデバイス
１１２  並列処理サブシステム
１１３  通信パス
１１４  システムディスク
１１６  スイッチ
１１８  ネットワークアダプタ
１２０  アドインカード
１２１  アドインカード
２００  作業分配ユニット
２０２  並列処理ユニット（ＰＰＵ）
２０４  ローカル並列処理（ＰＰ）メモリ
２０５  Ｉ／Ｏ（入出力）ユニット
２０６  ホストインターフェース
２０８  一般処理クラスタ（ＧＰＣ）
２１０  メモリクロスバーユニット
２１２  フロントエンド
２１４  メモリインターフェース
２１５  パーティションユニット
２２０  ＤＲＡＭ
２３０  処理クラスタアレイ
３０４  プリミティブエンジン
３０５  パイプラインマネージャ
３１０  ストリーミングマルチプロセッサ（ＳＰＭ）
３１５  テクスチャユニット
３２０  Ｌ１キャッシュ
３２５  プリＲＯＰ（プリラスタ演算）
３３０  作業分配クロスバ
３５０  Ｌ２キャッシュ
３５５  フレームバッファ（ＦＢ）
３６０  ラスタ演算ユニット（ＲＯＰ）
４０２  Ｌ２キャッシュスライス
４０４  クロスバコマンドバッファ
４０６  ＲＯＰコマンドバッファ
４０８  アービタ
４１０  タグルックアップユニット
４１２  タグストアユニット
４１４  データキャッシュ
４１６  読取りデータバッファ
４１８  書込みデータバッファ
５００  方法
【図１】
2010123130.tif 000003
【図２】
2010123130.tif 000004
【図３Ａ】
2010123130.tif 000005
【図３Ｂ】
2010123130.tif 000006
【図４】
2010123130.tif 000007
【図５Ａ】
2010123130.tif 000008
【図５Ｂ】
2010123130.tif 000009
【図５Ｃ】
2010123130.tif 000010
【図５Ｄ】
2010123130.tif 000011
【外国語明細書】
2010123130000001.pdf