(57)【特許請求の範囲】
【請求項１】
キャッシュと、
前記キャッシュに結合され、且つ前記キャッシュにアクセスする書き込みオペレーションをバッファするように構成された書き込みバッファであって、各エントリが書き込みオペレーションをキャッシュブロックの粒度で結合するように構成された複数のエントリを含む当該書き込みバッファと、
前記書き込みバッファに結合される制御回路を備えた装置であって、
前記制御回路は、
当該制御回路が適用する１以上のフラッシュ指標に応答して及び前記書き込みバッファの閾値フルネスレベルに達したことに応答して、前記複数のエントリのうちの１以上のエントリからの結合書き込みオペレーションを前記キャッシュの下の次のレベルのメモリに送信させるように前記書き込みバッファを構成させ、
前記書き込みバッファ内のアクティビティに応答して、前記１以上のフラッシュ指標を動的に修正し、
前記１以上のフラッシュ指標を動的に修正することにより、前記制御回路が前記書き込みバッファから前記次のレベルのメモリへの結合書き込みオペレーションの送信を引き起こす頻度が変更され、
前記１以上のフラッシュ指標が、前記複数のエントリの各エントリ内の崩壊状態を含み、該崩壊状態が、前記エントリ内の結合書き込みオペレーションにおいて少なくとも１つの崩壊した書き込みが検出されたか否かを示し、前記崩壊した書き込みとは、以前の書き込みオペレーションによって前記エントリに書き込まれたデータを上書きする書き込みオペレーションのことであり、
前記制御回路が、前記閾値フルネスレベルに達した崩壊状態にない使用中のバッファエントリの数に応答して、前記１又はそれ以上の結合書き込みオペレーションの送信を引き起こす、ことを特徴とする装置。
【請求項２】
前記制御回路が、第１のエントリへの前記崩壊した書き込みを検出し、崩壊していることを示すように前記第１のエントリの第１の崩壊状態を修正する、請求項１に記載の装置。
【請求項３】
前記複数のエントリの各エントリに対応する年齢カウンタをさらに含み、前記制御回路が、前記年齢カウンタが第２の閾値に達したことに応答して、前記複数のエントリのうちの第２のエントリ内の崩壊状態を、崩壊していないことを示すように修正するとともに、前記第２のエントリ内で書き込みオペレーションがヒットしたことに応答して、前記年齢カウンタをリセットする、請求項２に記載の装置。
【請求項４】
前記１以上のフラッシュ指標が、前記書き込みバッファの閾値フルネスレベルを含み、  前記制御回路は、前記書き込みバッファ内の使用中のエントリ数が前記閾値フルネスレベルに達したことに応答して、前記１以上の結合書き込みオペレーションを送信するとともに、バッファフルイベントを検出したことに応答して、前記閾値を引き下げる、請求項１に記載の装置。
【請求項５】
前記制御回路は、前記バッファフルイベントの発生を伴わずに所定数の書き込みオペレーションが受け取られたことに応答して、前記閾値フルネスレベルを引き上げる、請求項４に記載の装置。
【請求項６】
記憶オペレーションを実行し、該記憶オペレーションに応答して前記書き込みオペレーションを生成するプロセッサコアと、
前記書き込みバッファから前記結合書き込みオペレーションを受け取るように結合されるとともに、内部に記憶したキャッシュブロックを前記結合書き込みオペレーションで更新する第２レベルキャッシュとを備え、
前記キャッシュがライトスルーキャッシュである、請求項１〜５の何れか１項に記載の装置。
【請求項７】
制御回路が、
書き込みバッファ内のアクティビティをモニタするステップであって、前記書き込みバッファの第１のエントリ内でヒットし、そして前記第１のエントリ内で既に更新されている少なくとも１つのバイトを更新する第１の書き込みオペレーションを検出することを含む当該モニタするステップと、
前記アクティビティに応答して、該制御回路が維持する１以上のフラッシュ指標を修正するステップであって、前記１以上のフラッシュ指標が各エントリ内の状態を含み、前記検出を示す前記第１のエントリ内の状態を設定することを含む当該修正するステップと、
書き込みオペレーションを記憶している書き込みバッファエントリの数を閾値フルネスレベルと比較するステップであって、前記第１のエントリが前記数から除外される当該比較するステップと、
前記１以上のフラッシュ指標及び前記比較によって示される前記書き込みバッファの閾値フルネスレベルに達したことに応答して、前記書き込みバッファ内の少なくとも１つのバッファエントリからの次のレベルのメモリに書き込むべき１以上の書き込みオペレーションを生じさせるステップとを実行し、
前記１以上のフラッシュ指標を修正することにより、前記次のレベルのメモリに書き込むべき前記１以上の書き込みオペレーションを生じさせる頻度が変更されることを特徴とする方法。
【請求項８】
前記アクティビティが、前記書き込みバッファを満たさない第１の数の連続書き込みオペレーションを含み、
前記１以上のフラッシュ指標が前記閾値フルネスレベルを含み、
前記修正するステップが、前記閾値フルネスレベルを引き上げることを含む、請求項７に記載の方法。
【請求項９】
前記アクティビティがバッファフルイベントを含み、
前記修正するステップが前記閾値フルネスレベルを引き下げることを含む、請求項８に記載の方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、プロセッサの分野に関し、より詳細には、キャッシュ内の結合書き込みバッファに関する。
【背景技術】
【０００２】
多くの場合、プロセッサは、上位のライトスルーキャッシュ（Ｌ１キャッシュなど）に書き込まれた書き込みオペレーションを取り込んで、下位のキャッシュ（Ｌ２キャッシュなど）を更新する前にこれらの書き込みをバッファするための結合書き込みバッファを実装する。結合書き込みバッファは、同じキャッシュブロック内のデータを対象とする２又はそれ以上の書き込みオペレーションを結合し、従ってＬ２キャッシュへの書き込みを減らすものである。
【０００３】
結合書き込みバッファは、特定の期間にわたって書き込みオペレーションを蓄積することができる。１又はそれ以上の結合書き込みバッファエントリからの書き込みオペレーションをいつフラッシュすべきかに関する判断は、帯域幅とパフォーマンスの間のトレードオフである。結合書き込みバッファに書き込みオペレーションをバッファすると、帯域幅効率を向上させることができる。一方、データのバッファ期間が長過ぎれば、下位のキャッシュ又はメモリにプッシュする必要があるデータが結合書き込みバッファ内に残るので、パフォーマンスが悪化する場合がある。
【発明の概要】
【課題を解決するための手段】
【０００４】
ある実施形態では、結合書き込みバッファが、バッファエントリから書き込みオペレーションをいつ送信すべきかを判断するための１又はそれ以上のフラッシュ指標を維持するように構成される。結合書き込みバッファは、書き込みバッファ内のアクティビティに応答してフラッシュ指標を動的に修正し、書き込みバッファから次に低いレベルのメモリに書き込みオペレーションを送信させる条件を修正するように構成することができる。従って、検出されたアクティビティに基づいてパフォーマンス／帯域幅のトレードオフを動的に調整することができる。
【０００５】
１つの実施構成では、フラッシュ指標が、書き込みバッファエントリを「崩壊」として分類することを含むことができる。崩壊した書き込みバッファエントリ、及びそのバッファエントリ内の崩壊した書き込みオペレーションは、バッファエントリ内の以前の書き込みオペレーションによって書き込まれたデータを上書きした少なくとも１つの書き込みオペレーションを含むことができる。このようなエントリは、以前のデータを上書きする書き込みオペレーションを蓄積し続けることができ、従ってこれらのデータの少なくとも一部を、すぐに再びアクセスすべきでない一時データとすることができる。例えば、書き込みバッファエントリ内の書き込みオペレーションを、レジスタを他のデータの記憶に利用できるようにするためにプロセッサからのレジスタ値が書き込まれる、メモリ内のレジスタスピル領域の一部とすることができる。書き込みバッファフルネスが、１又はそれ以上の書き込みバッファエントリ内の結合書き込みオペレーションが次のレベルのメモリに送信される指定閾値に達したかどうかを判断する際には、崩壊した書き込みバッファエントリを考慮しなくてもよい。この閾値計算では、バッファ内の崩壊したエントリを一時的に無視することができる。
【０００６】
別の実施構成では、結合書き込みバッファが、バッファフルネスの閾値をフラッシュ指標として維持することができる。バッファは、バッファフルイベントをモニタすることができる。バッファフルイベントが検出された場合、現在のアクティビティレベルに対して閾値が高すぎる可能性があるので、これを引き下げることができる。一方、いくつかの連続する書き込みオペレーションがバッファフルイベントを検出することなくバッファに受け入れられた場合、閾値が低すぎる可能性があるので、これを引き上げることができる。従って、時間とともに検出される実際のバッファフルネスに基づいて閾値を調整することができる。
【０００７】
以下の詳細な説明では添付図面を参照するが、ここでこれらの図面について簡単に説明する。
【図面の簡単な説明】
【０００８】
【図１】プロセッサコア、キャッシュ及び書き込み結合バッファの１つの実施形態を示すブロック図である。
【図２】結合書き込みバッファの１つの実施形態のオペレーションを高レベルで示すフロー図である。
【図３】結合書き込みバッファの１つの実施形態を示すブロック図である。
【図４】図３に示す結合書き込みバッファの、書き込みオペレーションを受け取ったことに応答する１つの実施形態のオペレーションを示すフロー図である。
【図５】図３に示す結合書き込みバッファの、フラッシュ指標を評価するための１つの実施形態のオペレーションを示すフロー図である。
【図６】結合書き込みバッファの別の実施形態を示すブロック図である。
【図７】図６に示す結合書き込みバッファの、書き込みオペレーションを受け取ったことに応答する１つの実施形態のオペレーションを示すフロー図である。
【図８】システムの１つの実施形態を示すブロック図である。
【発明を実施するための形態】
【０００９】
本発明は、様々な修正及び代替形態が可能であるが、図面には本発明の特定の実施形態を一例として示し、本明細書ではこれらについて詳細に説明する。しかしながら、図面及びこれらに対する詳細な説明は、開示する特定の形態に本発明を限定することを意図するものではなく、むしろ添付の特許請求の範囲によって定められる本発明の思想及び範囲内にある全ての修正物、同等物及び代替物を含むことを意図するものであると理解されたい。本明細書で使用する表題は構成目的のものにすぎず、説明の範囲を限定するために使用することを意味するものではない。本出願を通じて使用する「ｍａｙ（〜できる）」という用語は、強制的な意味の（すなわち、〜しなければならない（ｍｕｓｔ）を意味する）ものではなく、許容的な意味（すなわち、可能性を有すること（ｈａｖｉｎｇ  ｔｈｅ  ｐｏｔｅｎｔｉａｌ  ｔｏ）を意味する）で使用される。同様に、「含む（ｉｎｃｌｕｄｅ、ｉｎｃｌｕｄｉｎｇ、及びｉｎｃｌｕｄｅｓ）」という用語は、限定するわけではないがｉｎｃｌｕｄｉｎｇを意味する。
【００１０】
様々なユニット、回路、又はその他の構成要素について、（１又は複数の）タスクを実行する「ように構成される（ｃｏｎｆｉｇｕｒｅｄ  ｔｏ）」と記載することがある。このような文脈では、「ように構成される」という表現は、オペレーション中に１又は複数のタスクを実行する「回路を有する」ことを一般に意味する包括的な構造の記述である。従って、これらのユニット／回路／構成要素は、ユニット／回路／構成要素が現在オンでない場合でもタスクを実行するように構成することができる。通常、「ように構成される」に相当する構造を成す回路としては、ハードウェア回路を挙げることができる。同様に、説明の都合上、様々なユニット／回路／構成要素について、１又は複数のタスクを実行する、と記載することもある。このような記載は、「ように構成される」という表現を含むと解釈すべきである。１又はそれ以上のタスクを実行するように構成されたユニット／回路／構成要素について記述することは、このユニット／回路／構成要素に対して米国特許法第１１２条第６項の解釈を行使することを明確に意図するものではない。
【００１１】
ここで図１を参照すると、プロセッサコア１０、第１レベル（Ｌ１）データキャッシュ１２、第２レベル（Ｌ２）インターフェイスユニット１４、及びＬ２キャッシュ１６の１つの実施形態のブロック図を示している。Ｌ２インターフェイスユニット１４は、フィルバッファ１８及び結合書き込みバッファ（ＣＷＢ）２０を含むことができる。ＣＷＢ２０は、１又はそれ以上のフラッシュ指標２２を維持するように構成することができる。プロセッサコア１０は、Ｌ１データキャッシュ１２に結合され、このＬ１データキャッシュ１２は、Ｌ２インターフェイスユニット１４に結合される。Ｌ２インターフェイスユニット１４は、Ｌ２キャッシュ１６にさらに結合され、このＬ２キャッシュ１６は、メモリ階層内の次のレベルのメモリ（図１には図示せず）にさらに結合することができる。
【００１２】
プロセッサコア１０は、あらゆる命令セットアーキテクチャを実装することができ、この命令セットアーキテクチャ内で定義される命令を実行するための回路を含むことができる。様々な実施形態では、プロセッサコア１０が、スーパスカラ又はスカラ、スーパパイプライン又はパイプライン、アウトオブオーダ又はインオーダ、投機的又は非投機的などを含むあらゆるマイクロアーキテクチャを実装することができる。様々な実施形態では、必要に応じてマイクロコーディング技術を利用してもよく、又は利用しなくてもよい。
【００１３】
プロセッサコア１０により実装される命令セットアーキテクチャは、メモリからプロセッサ（プロセッサのレジスタなど）にデータを転送するように定義される明示的ロード命令、及びプロセッサからメモリにデータを転送するように定義される明示的ストア命令を規定することができる。様々な実施形態では、どちらの転送もキャッシュ内で完了することができる。これとは別に又はこれに加えて、命令セットアーキテクチャは、（例えば、メモリオペランド上で非ロード／ストアオペレーションを実行する命令のための）非明示的ロード及びストアを規定することもできる。従って、プロセッサコア１０は、ロードオペレーション又はストアオペレーションを実行又は実施すると言うことができる。これらのロード／ストアオペレーションは、明示的命令又は非明示的ロード／ストアから導出することができる。
【００１４】
プロセッサコア１０は、ロードオペレーションに応答して読み取りオペレーションを生成し、ストアオペレーションに応答して書き込みオペレーションを生成するように構成することができる。これらの読み取り／書き込みオペレーションを、１又はそれ以上のレベルのキャッシュ及びメインメモリシステムを含むメモリ階層に伝えることができる。キャッシュは、メインメモリサブシステムにも記憶されるデータをキャッシュすることができ、メモリ階層内のデータは、メインメモリシステムに対応するメモリアドレス空間内に定められるメモリアドレスによって識別される。例えば、図１の実施形態では、Ｌ１及びＬ２キャッシュを、メモリ階層内のメモリのレベルとすることができる。メインメモリレベル及び任意にキャッシュの１又はそれ以上の追加レベルを含むさらなるレベルが存在することができる。他の実施形態では、Ｌ２キャッシュ１６を含まなくてもよく、Ｌ１キャッシュからの次のレベルのメモリをメインメモリサブシステムとすることができる。一般に、読み取り／書き込みオペレーションは、最上位（プロセッサコア１０に最も近いレベル）からメモリ階層に入ることができ、オペレーションが完了するまで１つのレベルから次のレベルへとプログラムすることができる。メインメモリサブシステムは、メモリ階層内の最も低いレベルとすることができる。データは、大容量記憶装置（ディスクドライブなど）又はネットワーク装置などの様々な周辺装置によってメインメモリサブシステムとの間を移動することができるが、このデータがこれらの装置上のメモリアドレスによって識別されることはない（例えば、大容量記憶装置は、この装置上にデータを位置付けるための独自のアドレス空間を有することができ、又はネットワーク装置が接続されたネットワークは、そのネットワーク上の装置を識別する独自のアドレス空間を含むことができる）。
【００１５】
読み取りオペレーションは、読み取り用のデータがメモリ階層（例えば、あらゆるレベルのキャッシュ又はメインメモリサブシステム）から戻された時に完了することができ、書き込みオペレーションは、プロセッサコア１０が書き込みデータを送信することを通じて完了することができる。書き込みオペレーションは、アドレス、書き込みサイズの指示（バイト単位など）、及び書き込みデータを含むことができる。書き込みオペレーションは、他の書き込み属性（キャッシュ能力、一貫性など）を含むこともできる。
【００１６】
データキャッシュ１２は、あらゆる容量及び構成（ダイレクトマップ、セットアソシアティブなど）を実装することができる。データキャッシュ１２は、キャッシュ内の記憶容量の割り当て及び割り当て解除をキャッシュブロック単位で行うように構成することができる。キャッシュブロックは、（３２バイト、６４バイト、１２８バイトなどの）あらゆるサイズを有することができ、メモリ内のブロックサイズの自然アドレス境界に整列することができる（例えば、３２バイトのキャッシュブロックは、３２バイト境界に整列することができ、６４バイトのキャッシュブロックは、６４バイト境界に整列することができ、以下同様である）。
【００１７】
図示の実施形態では、データキャッシュ１２がライトスルー（ＷＴ）型である。ライトスルーキャッシュでは、キャッシュ内のキャッシュブロックを更新することに加え、キャッシュ内でヒットした書き込みオペレーションが次のレベルのメモリに伝えられる。キャッシュミスした書き込みオペレーションも、次のレベルのメモリに伝えられる。一方、ライトバックキャッシュ（又はストアインキャッシュ）は、記憶されたキャッシュブロックを更新して、書き込みオペレーションを伝えないことがある。代わりに、更新されたキャッシュブロックがキャッシュから排出された時に、これを最終的に次のレベルのメモリに書き込むことができる。
【００１８】
Ｌ２インターフェイスユニット１４は、Ｌ１データキャッシュ１２から書き込みオペレーションを受け取ることができ、読み取りキャッシュミスを（フィル要求として）受け取ることもできる。Ｌ２インターフェイスユニット１４は、書き込みオペレーションをＣＷＢ２０に記憶してフィル要求をフィルバッファ１８に記憶するように構成することができる。フィル要求は、Ｌ２キャッシュ１６（及び必要に応じて下位のメモリ階層）に送信することができ、フィルデータは、Ｌ１データキャッシュ１２に戻してそこに書き込むことができる。
【００１９】
ＣＷＢ２０は、書き込みオペレーションをバッファし、これらを様々な時点でＬ２キャッシュ１６に送信することができる。書き込みオペレーションは、キャッシュ１２内でヒットしてその中のキャッシュブロックを更新したライトスルー書き込みを含むことができる。書き込みオペレーションは、データキャッシュ１２内でミスしたライトスルー書き込みを含むこともできる。ＣＷＢ２０は、複数のバッファエントリを含むことができる。各バッファエントリは、キャッシュブロックの粒度で書き込みオペレーションを記憶するように構成することができる。すなわち、メモリ内のキャッシュブロック境界に整列したキャッシュブロックサイズのエンティティにエントリを割り当てることができる。この割り当てられたエントリには、キャッシュブロック内のあらゆる書き込みを記憶することができる。キャッシュブロック内の最初の書き込みオペレーションにより、ＣＷＢ２０がエントリを割り当てることができるようになり、アドレス及びキャッシュブロック内のどのバイトが更新されたかについての指示（バイトマスクなど）とともに書き込みデータをバッファに記憶することができる。次の書き込みオペレーションをバッファにマージし、キャッシュブロック内の適当なバイトにデータを書き込んでバイトマスクを更新することができる。
【００２０】
ＣＷＢ２０は、１又はそれ以上の結合書き込みオペレーションをバッファエントリからＬ２キャッシュ１６にいつ送信すべきかを判断するための１又はそれ以上のフラッシュ指標２２を蓄積するように構成することができる。ＣＷＢ２０は、書き込みバッファ内のアクティビティをモニタしてフラッシュ指標２２を決定するように構成することができる。従って、一般に、フラッシュ指標は、結合書き込みオペレーションを次のレベルのメモリにいつ送信すべきか（或いは、１又は複数の書き込みバッファエントリをいつフラッシュすべきか）を判断するためにＣＷＢ２０が使用できる動的に生成されるデータとすることができる。フラッシュ指標は動的に生成されるので、結合書き込みオペレーションがフラッシュされる頻度は、検出された書き込みバッファのアクティビティに基づいて時間とともに変化することができる。すなわち、フラッシュ指標を書き込みバッファのフルネス（すなわち、総バッファエントリ数と比較した使用中のバッファエントリ数）とともに使用して、１又はそれ以上の結合書き込みオペレーションを次のレベルのメモリにいつ送信すべきかを判断することができる。
【００２１】
例えば、１つの実施形態では、フラッシュ指標が、崩壊した書き込みバッファエントリの検出を含むことができる。崩壊した書き込みバッファエントリとは、少なくとも１つの書き込みオペレーションがマージされたエントリ、及び以前の書き込みオペレーションによって書き込まれた書き込みデータの少なくとも１バイトが書き込みオペレーションによって上書きされたエントリとすることができる。例えば、キャッシュブロック内のどのバイトが更新されたかを示すようにバイトマスクが維持されている場合、書き込みオペレーションがエントリにマージされた場合には崩壊した書き込みを検出することができ、このマージする書き込みオペレーションに起因して設定されたであろうバイトマスクの少なくとも１ビットが既に設定されている。他の実施形態では、（ワード、ダブルワードなどの）他のレベルのキャッシュブロックの粒度で崩壊を検出することができる。他の実施形態では、書き込みにより更新された全てのバイトが、崩壊した書き込み前に設定された対応するマスクビットを有する場合にのみ、崩壊した書き込みを検出することができる。すなわち、崩壊した書き込みがマージされる前及び後でバイトバスクが同じ値である場合、崩壊した書き込みを検出することができる。
【００２２】
ＣＷＢ２０は、書き込みバッファのフルネスを検出する際に、崩壊した書き込みバッファエントリを検討から外すように構成することができる。例えば、ＣＷＢ２０を、これがフルに近付いた時に（例えば、フルネスの閾値レベルが満たされた時に）１又はそれ以上の書き込みバッファエントリから結合書き込みオペレーションを送信するように構成することができる。フラッシュ書き込みエントリに関する書き込みバッファのフルネスを決定する際には、崩壊した書き込みバッファエントリが検討されないので、書き込みバッファは、書き込みバッファ内で崩壊した書き込みバッファエントリが検出された時の方が、書き込みバッファ内で崩壊した書き込みバッファエントリが検出されなかった時よりも（使用中のエントリの観点から）フルになりやすい傾向となり得る。１つの実施形態では、一定の又はプログラム可能な閾値を使用して、ＣＷＢ２０がフルに近付いていると判断することができる。崩壊状態にあるエントリを差し引いて、使用中のエントリ数をこの閾値と比較することができる。閾値に達する（例えば、閾値が満たされる又はこれを超える）と、ＣＷＢ２０は、１又はそれ以上の書き込みバッファエントリをフラッシュすることができる。ある実施形態では、閾値に達したことに応答して、ＣＷＢ２０が１つの書き込みバッファエントリをフラッシュすることができ、使用中の書き込みバッファエントリの数が閾値よりも低くなるまで書き込みバッファエントリをフラッシュし続けることができる。他の実施形態では、同時に複数の書き込みバッファエントリをフラッシュすることができる。崩壊した書き込みバッファエントリは、フルネス閾値に向けてカウントされないので、崩壊した書き込みバッファエントリが存在しない時よりも書き込みバッファエントリをフラッシュする頻度が低くなる場合がある。
【００２３】
書き込みバッファエントリのフラッシングは、１又はそれ以上の結合書き込みオペレーションに関与することができる。例えば、エントリ内の連続する更新バイトの組毎に１つの書き込みオペレーションを生成することができる。エントリ内に非更新バイトのギャップが存在する場合、複数の書き込みオペレーションを送信することができる。他の実施形態では、キャッシュブロック内のどのバイトを更新すべきかを識別するバイトマスク又はその他の指示とともに、書き込みエントリにつき１つの結合書き込みオペレーションを送信することができる。さらに他の実施形態では、所与のサイズの書き込み（ワードなど）を生成することができる。
【００２４】
別の実施形態では、フラッシュ指標２２が、閾値を含むことができる。この閾値は、書き込みバッファフルイベントの検出に基づいて動的に修正することができる。書き込みバッファフルイベントは、書き込みバッファが実際にフルである（全てのバッファエントリが書き込みオペレーションに割り当てられている）旨を示すことができる。従って、ＣＷＢ２０は、閾値に基づいて書き込みエントリをフラッシュすることができ、バッファフルイベントを検出して閾値を修正すべき旨を示すことができる。例えば、バッファフルイベントが検出された場合、ＣＷＢ２０は、閾値が高すぎる（例えば、バッファフルに近すぎる）ことにより、エントリのフラッシングを完了できる前に書き込みバッファが満たされてしまうと判断することができる。フルバッファは、プロセッサコアのパフォーマンスに影響を与えることがある。従って、バッファフルイベントに応答して閾値を引き下げることができる。一方、バッファフルイベントを検出することなく特定数の書き込みオペレーションがバッファに書き込まれた場合、閾値が低すぎる（例えば、バッファフルから遠すぎる）可能性があり、これを引き上げることができる。
【００２５】
従って、バッファがフルに近付いているか又はそうでないかに基づいて、閾値を時間とともに適合させることができる。トラフィックによってバッファが満たされる速度が速い場合、閾値を下げることができる。このようにして、バッファ内に書き込みをバックアップせずに、プロセッサコア１０を失速させることができる。トラフィックによってバッファが満たされる速度がそれほど速くない場合、閾値を上げることができる。従って、バッファが書き込みオペレーションを長く記憶できるようにして、Ｌ２キャッシュ１６内のトラフィック（及び消費電力）を低下させることができる。すなわち、閾値を変更することにより、書き込みバッファエントリからＬ２キャッシュ１６に書き込みを送信する頻度を増減することができる。
【００２６】
他の実施形態では、（フルの書き込みキャッシュブロックがどれほどの頻度でバッファされるか、バッファ内のスヌープヒットなどの）他のフラッシュ指標を蓄積することができる。同様に、これらの指標に基づいて、Ｌ２キャッシュ１６に書き込みバッファエントリをフラッシングする頻度を修正することもできる。例えば、（システム内の他のプロセッサコア又は回路が、書き込まれたデータを使用していることを示す）スヌープヒットが検出されている場合、フラッシングの頻度を高めることができる。
【００２７】
いくつかの実施形態では、ＣＷＢ２０に記憶された書き込みオペレーションが、キャッシュ不可能な書き込みオペレーションをさらに含むことがある。このキャッシュ不可能な書き込みオペレーションは、書き込み結合可能な場合もあり、上述したライトスルー書き込みと同様のバッファエントリにマージすることができる。他のキャッシュ不可能な書き込みオペレーションは、書き込み結合可能でない場合もある（又はキャッシュ不可能な書き込みの書き込み結合をサポートしていない場合がある）。このような場合、各キャッシュ不可能な書き込みオペレーションに、ＣＷＢ２０内の独自の別個のエントリを割り当てることができる。他の実施形態では、キャッシュ不可能な書き込みオペレーションを異なる書き込みバッファに記憶することができる。
【００２８】
Ｌ２キャッシュ１６は、データキャッシュ１２に関する上記の説明と同様の、いずれのサイズ及び構成であってもよい。様々な実施形態では、Ｌ２キャッシュ１６がライトバックであっても、又はライトスルーであってもよい。Ｌ２キャッシュ１６は、様々な実施形態においてメインメモリサブシステム又は第３レベル（Ｌ３）キャッシュとすることができる、次のレベルのメモリへのインターフェイスをさらに含むことができる。
【００２９】
なお、結合書き込みバッファ（ＣＷＢ）２０を、同様にメモリ階層の他のレベル間に含めることもできる。例えば、ライトスルーであるあらゆるキャッシュレベルの下にＣＷＢ２０を含めることができる。なお、ある実施形態では、プロセッサコア１０、Ｌ１データキャッシュ１２、及びＬ２インターフェイス１４（フィルバッファ１８及びＣＷＢ２０を含む）を、ともにプロセッサとして統合することができる。他の実施形態では、Ｌ２インターフェイス１４を、別のプロセッサコア１０／Ｌ１データキャッシュ１２と共有することができる。さらに他の実施形態では、Ｌ２キャッシュ１６をプロセッサに統合することができ、及び／又はその他の構成要素を（例えば、チップ構成上のシステムに）統合することができる。
【００３０】
次に図２を参照すると、ＣＷＢ２０の１つの実施形態のオペレーションを示すフロー図を示している。理解を容易にするために、特定の順序でブロックを示しているが、他の順序を使用することもできる。これらのブロックは、ＣＷＢ２０の組み合わせ論理回路内で同時に実行することができる。ブロック、ブロックの組み合わせ、及び／又は全体としてのフロー図は、複数のクロックサイクルにわたってパイプライン化することができる。ＣＷＢ２０は、図２に示すオペレーションを実施するように構成することができる。
【００３１】
ＣＷＢ２０は、書き込みバッファ内のアクティビティをモニタするように構成することができる（ブロック３０）。例えば、ＣＷＢ２０は、バッファのフルネス、バッファにマージされた書き込みオペレーションの数、崩壊した書き込みなどをモニタすることができる。検出されたアクティビティが、ＣＷＢ２０により維持されるフラッシュ指標の変化を示す場合（判定ブロック３２、「はい」の支脈）、ＣＷＢ２０は、このフラッシュ指標を修正することができる（ブロック３４）。バッファ状態と（単複の）フラッシュ指標２２の組み合わせが、１又はそれ以上のバッファエントリのフラッシュを示す場合（判定ブロック３６、「はい」の支脈）、ＣＷＢ２０を、１又はそれ以上のバッファエントリからＬ２キャッシュ１６に１又はそれ以上の結合書き込みオペレーションを送信するように構成することができる（ブロック３８）。より一般的には、メモリ階層内の次のレベルのメモリに書き込みオペレーションを送信することができる。
【００３２】
ここで図３を参照すると、ＣＷＢ２０の１つの実施形態のブロック図を示している。図３の実施形態では、ＣＷＢ２０が、書き込みバッファ４２に結合された制御回路４０を含む。バッファ４２は、Ｌ１データキャッシュ１２から書き込みオペレーションを受け取り、Ｌ２キャッシュ１６に（又はより一般的にはメモリ階層内の次のレベルのメモリに）結合書き込みオペレーションを提供するように結合される。制御回路４０は、崩壊年齢（ＣＡｇｅ）閾値、年齢閾値、及びフル閾値をそれぞれ記憶できるレジスタ４４Ａ〜４４Ｃの組を含む。レジスタ４４Ａ〜４４Ｃは、一般に１つのレジスタ又は複数のレジスタとして実装することができ、いくつかの実施形態では、プログラム可能に取り扱うことができるソフトウェアとすることができる。他の実施形態では、閾値の１又はそれ以上を固定することができる。
【００３３】
図３には、バッファ４２内の例示的なエントリ４６Ａ〜４６Ｂを示しており、各エントリは、アドレスフィールド（Ａ）、データフィールド（Ｄ）、バイトマスクフィールド（Ｂｙｔｅ  Ｍａｓｋ）、年齢カウンタフィールド（Ａｇｅ  Ｃｔｒ）、及び崩壊状態フィールド（Ｃｏｌｌａｐｓｅｄ）を含む。バッファ４２には、図示のエントリと同様の追加エントリを含めることもできる。総合すると、全てのエントリにわたる崩壊状態が、フラッシュ指標２２を表すことができる。アドレスフィールドは、エントリ内に表されるキャッシュブロックのアドレスを記憶することができ、データフィールドは、データキャッシュブロックのストレージを含むことができるが、キャッシュブロック全体が有効でないこともある。すなわち、このエントリは、いずれかの所与の時点における有効データの部分的キャッシュブロックを記憶することができる。バイトマスクフィールドは、キャッシュブロック内の各バイトのビットを含むことができる。このビットは、対応するバイトがデータフィールド内で有効であるかどうか（すなわち、エントリ内に表される書き込みオペレーションによってバイトが書き込まれたかどうか）を示すことができる。１つの実施形態では、マスクビットを、バイトが有効であることを示すように設定し、無効を示すようにクリアすることができるが、他の実施形態では、これらのセット及びクリア状態に逆の意味を使用することができる。年齢カウンタは、エントリの年齢を示すことができる。最初は、この年齢カウンタをゼロに設定することができ、バッファ４２内に書き込みが存在するクロックサイクル毎に、又は書き込みオペレーションがバッファ４２に提供される毎に増分することができる。他の実施形態では、年齢カウンタを規定値に初期化／リセットして減分することができる。崩壊状態は、エントリが崩壊しているかどうかを示すことができる。すなわち、崩壊状態は、エントリに関して少なくとも１つの崩壊した書き込みが検出されたかどうかを示すことができる。崩壊状態は、例えば、設定時にはエントリが崩壊していることを示し、クリア時にはエントリが崩壊していないことを示すビットとすることができる（逆も同様）。他の実施形態では、他の状態指示を使用することができる。
【００３４】
ここで図４を参照すると、図３に示すＣＷＢ２０の、データキャッシュ１２から書き込みオペレーションを受け取ったことに応答する１つの実施形態のオペレーションを示すフロー図を示している。理解を容易にするために、特定の順序でブロックを示しているが、他の順序を使用することもできる。これらのブロックは、ＣＷＢ２０の組み合わせ論理回路内で同時に実行することができる。ブロック、ブロックの組み合わせ、及び／又は全体としてのフロー図は、複数のクロックサイクルにわたってパイプライン化することができる。ＣＷＢ２０、特に制御回路４０は、図４に示すオペレーションを実施するように構成することができる。
【００３５】
ＣＷＢ２０は、書き込みオペレーションのアドレスと書き込みバッファ４２内のアドレスを（キャッシュラインの粒度で）比較するように構成することができる。例えば、書き込みバッファ４２内のエントリのアドレスフィールドを、内容参照可能メモリ（ＣＡＭ）として実装することができる。バッファエントリ内で書き込みオペレーションがヒットした（すなわち、エントリによって表されるキャッシュブロック内に書き込みオペレーションが存在する−判定ブロック５０、「はい」の支脈）場合、制御回路４０を、エントリ内の年齢カウンタをリセットするように構成することができる（ブロック５２）。従って、この実施形態では、最新の書き込みオペレーションがエントリにマージされたので、年齢カウンタをエントリの年齢とすることができる。以前の書き込みオペレーションによって既にエントリに書き込まれていた少なくとも１つのバイトが、この書き込みオペレーションによって上書きされた場合（判定ブロック５４、「はい」の支脈）、制御回路４０を、崩壊状態を設定して崩壊を示すように構成することができる（ブロック５６）。制御回路４０は、バイトマスクを更新して、ヒットしたエントリのデータフィールドにデータが書き込まれるようにするよう構成することができる。
【００３６】
バッファ４２内で書き込みオペレーションがミスした場合（判定ブロック５０、「いいえ」の支脈）、制御回路４０を、この書き込みオペレーションに新たな（現在未使用の）エントリを割り当てるように構成することができる（ブロック６０）。制御回路４０は、この割り当てたエントリを、書き込みオペレーションに対応する情報で初期化することができる（ブロック６２）。具体的には、制御回路４０は、割り当てたエントリが書き込みオペレーションのアドレス及びデータで更新されるようにし、書き込みによって更新されたバイトを示すようにバイトマスクを設定し、年齢カウンタをクリアし、崩壊状態をクリアすることができる。書き込みバッファがフルである（すなわち、現在未使用のエントリが存在しない）場合、制御回路４０は、Ｌ１データキャッシュ１２／プロセッサ１０をバックプレッシャー制御して、エントリが利用可能になるまで書き込みオペレーションを失速させることができる。
【００３７】
判定ブロック５４及び崩壊状態設定５６は、図３に示すＣＷＢ２０の実施形態の判定ブロック３２及びブロック３４にそれぞれ相当することができる。
【００３８】
ここで図５を参照すると、図３に示すＣＷＢ２０の、バッファエントリを評価してフラッシュイベントを判断するための１つの実施形態のオペレーションを示すフロー図を示している。理解を容易にするために、特定の順序でブロックを示しているが、他の順序を使用することもできる。これらのブロックは、ＣＷＢ２０の組み合わせ論理回路内で同時に実行することができる。ブロック、ブロックの組み合わせ、及び／又は全体としてのフロー図は、複数のクロックサイクルにわたってパイプライン化することができる。ＣＷＢ２０、特に制御回路４０は、図５に示すオペレーションを実施するように構成することができる。
【００３９】
制御回路４０は、フルカウントを、使用中のエントリ数から崩壊したエントリ数を差し引いたものとして判断するように構成することができる（ブロック７０）。すなわち、フルカウントは、非崩壊エントリの数とすることができる。フルカウントがフル閾値４４Ｃに達した場合（判定ブロック７２、「はい」の支脈）、制御回路４０を、１又はそれ以上のエントリからＬ２キャッシュ１６又はメモリ階層の次のレベルに結合書き込みオペレーションを送信するように構成することができる（ブロック７４）。制御回路４０は、いずれかのエントリを選択してＬ２キャッシュ１６に書き込みオペレーションを送信するように構成することができる。例えば、ある実施形態では、制御回路４０が、崩壊したエントリではない（年齢カウンタによって示される）最も古いエントリを選択することができる。別の実施形態では、年齢に基づく選択に関して、崩壊したエントリ及び崩壊していないエントリの両方を検討することができる。別の実施形態では、エントリを先入れ先出し（ＦＩＦＯ）順のエントリ割り当てでフラッシュすることができる。この実施形態では、ブロック７０及び７２の組み合わせがブロック３６に相当することができ、ブロック７４がブロック３８に相当することができる。別の実施形態では、使用中のエントリ（崩壊及び非崩壊の両方）の総数と比較すべき（フル閾値よりも高い）さらなる閾値を定義することができる。使用中のエントリの総数が、このさらなる閾値に達した場合、制御回路４０を、１又はそれ以上のバッファエントリからＬ２キャッシュ１６に結合書き込みオペレーションを送信するように構成することができる（ブロック７４）。
【００４０】
図５に示すフロー図の残りは、バッファ４２内の各バッファエントリに（例えば、各バッファエントリに同時に）適用することができる。年齢カウンタが崩壊年齢閾値４４Ａに達した場合（判定ブロック７６、「はい」の支脈）、制御回路４０を、エントリ内の崩壊状態をリセットして非崩壊を示すように構成することができる（ブロック７８）。従って、この実施形態では、エントリに対する書き込みヒット毎に年齢カウンタがリセットされるので、エントリに対する別の書き込みヒットを伴わずに、崩壊年齢閾値に等しいクロックサイクル数が経過した後には、崩壊したエントリは、もはや崩壊とは見なされなくなる。年齢カウンタが年齢閾値４４Ｂに達した場合（判定ブロック８０、「はい」の支脈）、制御回路４０を、エントリをフラッシュして、そのエントリの１又はそれ以上の結合書き込みオペレーションを送信するように構成することができる（ブロック８２）。この実施形態では、ブロック８０及び８２が、ブロック３６及び３８にさらにそれぞれ相当することができる。
【００４１】
ここで図６を参照すると、ＣＷＢ２０の別の実施形態のブロック図を示している。図６の実施形態では、ＣＷＢ２０が、書き込みバッファ９２に結合された制御回路９０を含む。バッファ９２は、Ｌ１データキャッシュ１２から書き込みオペレーションを受け取り、Ｌ２キャッシュ１６に結合書き込みオペレーションを提供するように結合される。制御回路９０は、書き込み閾値、書き込みカウント、及びフル閾値をそれぞれ記憶できるレジスタ９４Ａ〜９４Ｃの組を含む。レジスタ９４Ａ〜９４Ｃは、一般に１つのレジスタ又は複数のレジスタとして実装することができ、いくつかの実施形態では、プログラム可能に取り扱うことができるソフトウェアとすることができる。他の実施形態では、書き込み閾値を固定することができる。
【００４２】
図６の実施形態では、書き込みカウント９４Ｂ及びフル閾値９４Ｃの組み合わせをフラッシュ指標２２とすることができる。書き込みカウント９４Ｂは、最新のバッファフルイベント以後にバッファ９２に記憶された書き込みオペレーションの総数とすることができる。この実施形態では、フル閾値９４Ｃを、フラッシュが実行される前に使用中であるべきバッファエントリの閾値とすることができる。以下で説明するように、フル閾値９４Ｃは、書き込みバッファのアクティビティに基づいて変化することができる。
【００４３】
図６には、例示的なエントリ９６Ａ〜９６Ｂを示している。図示のエントリと同様の追加エントリを含めることもできる。図６の実施形態は、図３に関連して上述した同じフィールドと同様の、アドレスフィールド（Ａ）、データフィールド（Ｄ）、バイトマスクフィールド（Ｂｙｔｅ  Ｍａｓｋ）、及び年齢カウンタ（Ａｇｅ  Ｃｔｒ）フィールドを含む。
【００４４】
図７は、図６に示すＣＷＢ２０の、書き込みオペレーションを受け取ったことに応答する１つの実施形態のオペレーションを示すフロー図である。理解を容易にするために、特定の順序でブロックを示しているが、他の順序を使用することもできる。これらのブロックは、ＣＷＢ２０の組み合わせ論理回路内で同時に実行することができる。ブロック、ブロックの組み合わせ、及び／又は全体としてのフロー図は、複数のクロックサイクルにわたってパイプライン化することができる。ＣＷＢ２０、特に制御回路４０は、図７に示すオペレーションを実施するように構成することができる。図６の実施形態は、図７に示すオペレーションに加え、バッファ９２内のヒット又はミスを検出すること、図４のブロック５０、５２、５８、６０及び６２に示すようにエントリを更新すること、及び同様に図５のブロック７２及び７４を実施することができる。任意に、いくつかの実施形態では、図６の実施形態が、図５のブロック８０及び８２を実施することもできる。
【００４５】
制御回路９０は、受け取った書き込みオペレーションがバッファ９２を満たしているかどうかを判断するように構成することができる（判定ブロック１００）。例えば、受け取った書き込みオペレーションがバッファ９２内でミスし、この受け取った書き込みオペレーションに最後の未使用エントリが割り当てられている場合、バッファ９２はフルである。そうである場合（判定ブロック１００、「はい」の支脈）、制御回路９０を、フル閾値９４Ｃを引き下げて（ブロック１０２）書き込みカウント９４Ｂをクリアする（ブロック１０４）ように構成することができる。一方（判定ブロック１００、「いいえ」の支脈）、受け取った書き込みオペレーションがフルイベントを引き起こさない場合、制御回路９０を、書き込みカウント９４Ｂを増分するように構成することができる（ブロック１０６）。書き込みカウントが書き込み閾値に達した場合（判定ブロック１０８、「はい」の支脈）、制御回路９０を、フル閾値を引き上げるように構成することができる。この実施形態では、図７のフロー図が、図３のブロック３２及び３４に相当することができる。
【００４６】
従って、この実施形態では、エントリのフラッシュを引き起こしてフルイベントの発生を防ぐようにフル閾値を動的に修正しながら（この実施形態においてフルカウントが使用中のエントリ数であるブロック７２及び７４に示すように）、ＣＷＢ２０内で検出されたトラフィックに基づいてできるだけ十分なバッファ９２が得られるようにすることができる。書き込みカウントはいずれの所望の方法で判断してもよい。例えば、所与のパーセンテージの書き込みオペレーションが書き込みバッファエントリにマージされると予想される場合、書き込みカウントを、キャッシュブロック当たりの書き込みオペレーション数（キャッシュブロック内のワード数など）と、書き込みバッファのエントリ数と、マージ率との積に等しくすることができる。
【００４７】
次に図８を参照すると、システム３５０の１つの実施形態のブロック図を示している。図示の実施形態では、システム３５０が、外部メモリ３５２に結合された集積回路３５８の少なくとも１つのインスタンスを含む。外部メモリ３５２は、図１に関連して上述したメインメモリサブシステムを形成することができる。集積回路３５８は、少なくとも図１に示すプロセッサコア１０及びＬ１データキャッシュ１２を含むことができ、Ｌ２インターフェイスユニット１４及びＬ２キャッシュ１６の一方又は両方を含むことができる。集積回路３５８は、必要に応じてその他の構成要素をさらに含むことができる。集積回路３５８は、１又はそれ以上の周辺機器３５４及び外部メモリ３５２に結合される。集積回路３５８への供給電圧、並びにメモリ３５２及び／又は周辺機器３５４への１又はそれ以上の供給電圧を供給する電源３５６が設けられる。いくつかの実施形態では、集積回路３５８の複数のインスタンスを含むことができる（及び同様に複数の外部メモリ３５２を含むこともできる）。
【００４８】
メモリ３５２は、動的ランダムアクセスメモリ（ＤＲＡＭ）、同期ＤＲＡＭ（ＳＤＲＡＭ）、ダブルデータレート（ＤＤＲ、ＤＤＲ２、ＤＤＲ３など）、ＳＤＲＡＭ（ｍＤＤＲ３などのモバイル版ＳＤＲＡＭ、及び／又はＬＰＤＤＲ２などの低電力版ＳＤＲＡＭを含む）、ＲＡＭＢＵＳ  ＤＲＡＭ（ＲＤＲＡＭ）、静的ＲＡＭ（ＳＲＡＭ）などのいずれの種類のメモリであってもよい。１又はそれ以上のメモリ素子を回路基板上に結合して、シングルインラインメモリモジュール（ＳＩＭＭ）、デュアルインラインメモリモジュール（ＤＩＭＭ）などのメモリモジュールを形成することができる。或いは、これらの素子を、集積回路３５８にチップオンチップ構成、パッケージオンパッケージ構成、又はマルチチップモジュール構成で装着することもできる。
【００４９】
周辺機器３５４は、システム３５０の種類に応じてあらゆる所望の回路を含むことができる。例えば、１つの実施形態では、システム３５０を（携帯情報端末（ＰＤＡ）、スマートフォンなどの）モバイル装置とすることができ、周辺機器３５４が、ＷｉＦｉ、ブルートゥース、セルラー、全地球測位システムなどの様々な種類の無線通信用の装置を含むことができる。周辺機器３５４は、ＲＡＭ記憶装置、固体記憶装置又はディスク記憶装置を含む追加の記憶装置を含むこともできる。周辺機器３５４は、タッチディスプレイ画面又はマルチタッチディスプレイ画面を含むディスプレイ画面、キーボード又はその他の入力装置、マイク、スピーカ、などのユーザインターフェイス装置を含むことができる。他の実施形態では、システム３５０が、（デスクトップパーソナルコンピュータ、ラップトップ、ワークステーション、ネットトップなどの）いずれの種類のコンピュータシステムであってもよい。
【００５０】
上記の開示を完全に理解すると、当業者には数多くの変形例及び修正例が明らかになるであろう。以下の特許請求の範囲は、全てのこのような変形例及び修正例を含むものとして解釈されることを意図している。
【符号の説明】
【００５１】
１０  プロセッサコア
１２  Ｌ１データキャッシュ（ＷＴ）
１４  Ｌ２インターフェイスユニット
１６  Ｌ２キャッシュ
１８  フィルバッファ
２０  ＣＷＢ
２２  フラッシュ指標
【図１】
0005621048.tif 000002
【図２】
0005621048.tif 000003
【図３】
0005621048.tif 000004
【図４】
0005621048.tif 000005
【図５】
0005621048.tif 000006
【図６】
0005621048.tif 000007
【図７】
0005621048.tif 000008
【図８】
0005621048.tif 000009