(57)【要約】【課題】ローカル変更ビットを使用してデータ・ラインのインストール状態を指示する方法を提供すること。【解決手段】マルチプロセッサ・システムは複数の個別のプロセッサを備え、各プロセッサは関連するＬ１キャッシュを備える。また、マルチプロセッサ・システムは、少なくとも１つの共有主メモリと、少なくとも１つの共有Ｌ２キャッシュを備える。本明細書に記載の方法は、データ・ラインをＬ２キャッシュに書き込む方法に関し、ローカル変更ビットを使用してデータ・ラインのインストール状態を指示するステップを含む。【選択図】図２
2007207224.tif 000002
【特許請求の範囲】
【請求項１】
各々が関連するＬ１キャッシュを備える複数の個別のプロセッサと、少なくとも１つの共有主メモリと、少なくとも１つの共有Ｌ２キャッシュとを備えるマルチプロセッサ・システムにおいて、データ・ラインをキャッシュに書き込む方法であって、対応するキャッシュに対し当該キャッシュに格納されたデータ・ラインについてのローカルな変更状態情報を維持するローカル変更ビットに基づいて、前記データ・ラインを新しいキャッシュにインストールするための状態を決定するステップを含む方法。
【請求項２】
最初に第１のプロセッサがデータ・ラインを要求すると、前記共有主メモリから前記データ・ラインを参照するステップと、
第２のプロセッサが前記データ・ラインを要求したとき、前記ローカル変更ビットが、前記第１のプロセッサの前記Ｌ１キャッシュにおいて前記データ・ラインが変更されていないことを示すことを条件として、前記データ・ラインを「読出し専用」として提示させるステップと
を含む、請求項１に記載の方法。
【請求項３】
前記データ・ラインの変更によるすべての格納により、キャッシュ・ディレクトリ・エントリ内の対応する前記ローカル変更ビットをイネーブルにセットするステップを含む、請求項１に記載の方法。
【請求項４】
ローカル・プロセッサのデータ・ラインのフェッチが第１のＬ１キャッシュにおいてミスするが、対応する前記ローカル変更ビットがイネーブルである他のキャッシュにヒットする場合、前記他のキャッシュから前記データ・ラインを削除し、前記データ・ラインを前記ローカル・プロセッサに「排他」でインストールする、請求項１に記載の方法。
【請求項５】
前記他のキャッシュの対応する前記ローカル変更ビットを「オフ」にリセットするステップを含む、請求項４に記載の方法。
【請求項６】
データ・ラインのフェッチがローカル・プロセッサのＬ１データ・キャッシュをミスするが、対応する前記ローカル変更ビットが「オフ」である他のキャッシュにヒットする場合、前記データ・ラインを前記ローカル・プロセッサに「読出し専用」でインストールし、システム内にインストールされた前記データ・ラインの複数のコピーの存在を示すように前記ローカル・プロセッサのＬ１データ・キャッシュ及び前記他のキャッシュの両方のキャッシュ状態を「読出し専用」としてセットする、請求項１に記載の方法。
【請求項７】
前記ローカル・プロセッサのＬ１データ・キャッシュ及び前記他のキャッシュの両方のキャッシュの前記ローカル変更ビットを「オフ」に変更するステップを含む、請求項６に記載の方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、遅い主メモリに格納されたデータの一部が、１つまたは複数の要求元プロセッサと主メモリの間に存在する、より高速なメモリに転送されるメモリ・キャッシングに関し、詳細には、ローカルな変更ビットが、主メモリからキャッシュに選択されたデータを指示するメモリ・キャッシングに関する。
【背景技術】
【０００２】
マルチプロセッサ・システムにおいてデータが最初に参照されるとき、例えば、要求元プロセッサによる「格納（store）」なのか、あるいは単なる「読出し（read）」なのかによって、そのデータが最終的に変更されるかどうかを予測することは困難である。データがキャッシュに「読出し」状態でインストールされ、プロセッサがそのラインを「格納」しない場合は、キャッシュ・コヒーレンシを保証するために余分の遅延が必要になる。すなわち、そのラインの他のすべてのコピーを他のキャッシュから削除しなければならない。
【０００３】
一方、ラインは、例えば「格納」によって変更され、そのラインが「排他」でプロセッサにインストールされると想定される場合もある。しかし、この場合もやはり、そのラインの他のすべてのコピーは、他のキャッシュから削除されることになる。次に、データが両方のプロセッサによって「読出し」専用である場合、すなわち、共有データの場合は、そのラインでキャッシュ間の「綱引き（tug of war）」が生じることになり、結果として性能が低下する。
【発明の開示】
【発明が解決しようとする課題】
【０００４】
したがって、各ラインがどのように使用されるか、すなわち読出し専用かあるいは変更されるかに関して、各ラインがどのように使用されるかを指示するようにソフトウェア・スタック内のすべてのソフトウェアを修正する必要なしに、ソフトウェアにハードウェアを指示させるという効果を得ることが明らかに必要とされている。
【課題を解決するための手段】
【０００５】
このソフトウェアの修正は、ローカルな変更ビットを使用してデータ・ラインのインストール状態を指示する、履歴ベースのインストールによって不要になる。詳細には、システム実装では、メモリからデータ・ラインが最初に第１のプロセッサによって参照されるときに、そのラインをすべてのキャッシュに「排他」で実装して最終的な格納に備える。この時点で、このラインは他のどのプロセッサとも共有されていない。したがって、これは最も効率のよい状態である。
【０００６】
しかし、上記最終的な格納の前、すなわち上記データ・ラインが第１のプロセッサのキャッシュ内において変更されていない状態において、第２のプロセッサがそのラインを要求すると、そのラインは両方のプロセッサに対して「読出し専用」となる。このことは、第１のプロセッサ、すなわち要求元プロセッサによってそのラインが今もまだ使用されているか否か、あるいは第１のプロセッサがそのラインを終了し、現在第２のプロセッサだけがそのデータ・ラインの唯一のユーザであるかどうかには関係しない。
【０００７】
本明細書に記載の方法によれば、対応するキャッシュに対し、当該キャッシュに格納されたデータ・ラインについてのローカルな変更状態情報を維持するローカル変更ビットに基づいて、すなわちデータ・ラインの履歴を使用して、そのデータ・ラインを新しいキャッシュにインストールするための状態が決定される。ラインが第１のプロセッサのキャッシュ内に存在する間に変更された場合は、モデリングは、そのラインが新しいプロセッサによって変更される可能性が高いことを示唆する。しかし、ラインが第１のプロセッサのキャッシュ内に存在する間に変更されなかった場合は、モデリングは、そのラインが同様に新しいプロセッサによって変更されない可能性が高いことを示唆する。
【０００８】
このことは、追加のソフトウェア命令なしで、全体のソフトウェア・スタックに適用される。
【０００９】
各図は、本発明の様々な実施形態および実施例を示すものである。
【発明を実施するための最良の形態】
【００１０】
本明細書で説明するのは、複数の個別のプロセッサを有するマルチプロセッサ・システムである。各プロセッサは関連するＬ１キャッシュを有し、マルチプロセッサ・システムは、少なくとも１つの共有主メモリ、および少なくとも１つの共有Ｌ２キャッシュを有する。本明細書に記載の方法は、データ・ラインをＬ２キャッシュに書き込む方法に関し、ローカルな変更ビットを使用してデータ・ラインのインストール状態を指示するステップを含む。
【００１１】
ローカル変更ビットは、いずれかのキャッシュに格納された各ラインに関連するビットであり、ある特定のキャッシュに格納されたある特定のラインについてのローカルな変更状態情報を維持する。詳細には、ローカル変更ビットは、ある特定のキャッシュに格納されたある特定のラインが、その特定のキャッシュに存在する間に、マルチプロセッサ・システムのいずれかのプロセッサによって変更されたか否かを示すものである。
【００１２】
図１は、プロセッサ１１１およびＬ１キャッシュ１１３、Ｌ２キャッシュ１２１、ならびに主メモリ１３１を含むプロセッサ・システム１０１を示す。システム上で動作するアプリケーションは、主メモリではなくキャッシュからデータをフェッチすることによってこの機能拡張を利用する。キャッシュへの短いアクセス時間のおかげで、アプリケーションの性能は向上する。もちろん、メモリとキャッシュの間のトラフィックは依然として存在するが、それは最小限のものである。
【００１３】
システム１０１は、プロセッサ１１１によって必要とされるデータを、最初に主メモリ１３１からＬ２キャッシュ１２１にコピーし、次いでＬ２キャッシュ１２１からＬ１キャッシュ１１３にコピーし、さらにプロセッサ１１１のレジスタ（図示せず）にコピーする。結果の格納は、その逆向きになる。システムは、最初にデータをプロセッサ１１１からＬ１キャッシュ１１３にコピーし、さらにＬ２キャッシュ１２１にコピーする。キャッシュ・アーキテクチャの詳細に応じて、次にデータは直ちにメモリ１３１にコピーされるか（ライトスルー）、または後ほどコピーされる（ライトバック）。アプリケーションが同じデータを再度必要とする場合で、データがまだＬ１キャッシュ１１３およびＬ２キャッシュ１２１に存在しているか、またはＬ２キャッシュ１２１だけに存在している場合は、データ・アクセス時間は大幅に短縮される。メモリ転送のコストをさらに削減するために、複数の要素がキャッシュにロードされる。転送の単位はキャッシュ・ブロックまたはキャッシュ・ラインと呼ばれる。単一のデータ要素へのアクセスにより、全体のラインがキャッシュに取り込まれる。ラインには、要求された要素が含まれることが保証される。
【００１４】
待ち時間と帯域幅は、キャッシュとメモリに関係する２つの尺度である。そのどちらもが一定ではなく、メモリ階層の個々のコンポーネントに特有のものである。待ち時間は、プロセッサ・サイクルまたはナノ秒の単位で表されることが多い。一方、帯域幅は、通常はメガバイト／秒またはギガバイト／秒の単位で表される。
【００１５】
実際には、メモリ・コンポーネントの待ち時間は、転送単位（一般にはキャッシュ・ライン）の最初の部分をフェッチするために要する時間として測定される。コンポーネントのスピードは階層中の相対的な位置に応じて決まるので、待ち時間は一定にはならない。経験則として、Ｌ１キャッシュ１１３からＬ２キャッシュ１２１、さらに主メモリ１３１へと移るにつれて、待ち時間は増加すると言っても差し支えない。
【００１６】
メモリ・コンポーネントの一部、例えばＬ１キャッシュ１１３は、物理的にプロセッサ１１１上に配置することができる。その利点は、それらの速度がプロセッサ・クロックに比例することである。したがって、このようなコンポーネントの待ち時間を、ナノ秒ではなく、プロセッサ・クロック・サイクルの単位で表すことは意味のあることである。
【００１７】
マイクロプロセッサによっては、Ｌ１キャッシュ１１３として組み込まれた（オンチップの）キャッシュは、必ずしもプロセッサの速度で動作するとは限らない。それらは、プロセッサ・クロックの整数商（１／２、１／３、など）のクロック・レートで動作する。
【００１８】
プロセッサの外部にあるキャッシュ・コンポーネントは通常、まったくまたは部分的にしかプロセッサ・クロック向上の恩恵を受けない。それらのコンポーネントの待ち時間は、通常はナノ秒で示される。主メモリの待ち時間は、ほとんど常にナノ秒で表される。
【００１９】
帯域幅は、メモリ・コンポーネントの漸近速度（asymptotic speed）の尺度である。この数値は、大量のデータをどの程度速く入出力できるかを反映する。待ち時間と同様に、帯域幅も一定ではない。一般に、帯域幅はプロセッサ１１１から１つ離れるごとに減少する。
【００２０】
データ・フェッチのステップ数が削減できる場合は、待ち時間が短縮されることになる。
【００２１】
図２は、Ｌ１キャッシュ２１３ａ、２１３ｂを備えたプロセッサ２１１ａ、２１１ｂ、共有Ｌ２キャッシュ２２１、および主メモリ２３１を備えたシステム２０１を示す。データ・ライン２４１および制御ライン２５１は、それらの通常の機能を実施する。図２に関して、排他ラインがＬ１キャッシュ２１３ａまたは２１３ｂから失効した（age out）とき、Ｌ１キャッシュ２１３ａまたは２１３ｂはＬ２キャッシュ２２１に信号を送り、そのラインが既にＬ１キャッシュ２１３ａまたは２１３ｂに存在しないことを指示する。その結果、Ｌ２キャッシュ２２１が更新されて、そのラインが「非所有（disown）」されたことが示される。すなわち、所有権は、特定のプロセッサから「非所有（unowned）」に変更される。
【００２２】
図２を参照すると、この方法は相互問合せ処理（cross interrogateprocessing）を削減、または場合によっては削除することによって性能を向上する。相互問合せ処理を削除することにより、Ｌ１の置換またはＬ１の失効置換のためにＬ１キャッシュ２１３ａまたは２１３ｂに既に存在しないラインに関する、Ｌ１キャッシュ２１３ａまたは２１３ｂへの相互問合せを送信することが回避される。その結果、他のプロセッサがそのラインを要求したときの待ち時間が短縮されるとともに、他のＬ１キャッシュでの無駄なディレクトリ検索が回避される。
【００２３】
さらに、相互問合せ処理を削除することにより、Ｌ２キャッシュ２２１で置換されるラインに対する、Ｌ１キャッシュ２１３ａまたは２１３ｂへの相互無効化（cross invalidate）の送信も回避される。通常は、あるラインがＬ２キャッシュ２２１から失効するとき、そのラインはＬ１キャッシュ２１３ａまたは２１３ｂにおいても無効化しなければならない。このことにより、Ｌ１キャッシュ２１３ａまたは２１３ｂとＬ２キャッシュ２２１との間のサブセット・ルールが維持される。この２つの無効化により、Ｌ１キャッシュ２１３ａまたは２１３ｂでの通常の処理が混乱することになる。ラインが既にＬ１キャッシュ２１３ａまたは２１３ｂに存在しない場合は、この混乱は不要のものであり性能にマイナスの影響を及ぼす。
【００２４】
本明細書に記載の方法によれば、データ・ラインの履歴を使用して、そのラインを新しいキャッシュにインストールするための状態を決定する。すなわち、ローカル変更ビットを使用して、データ・ラインのインストール状態を指示する。第１のプロセッサのキャッシュに存在している間にラインが変更された場合は、モデリングは、そのラインが新しいプロセッサによって変更される可能性が高いことを示唆する。しかし、ラインが第１のプロセッサのキャッシュに存在する間に変更されなかった場合は、モデリングは、そのラインが同様に新しいプロセッサによって変更されない可能性が高いことを示唆する。
【００２５】
このことは、追加のソフトウェア命令なしで全体のソフトウェア・スタックに適用される。
【００２６】
最初に、すべての格納により、キャッシュ・ディレクトリ・エントリにおいて「値１のローカル変更（locally changed）」ビットがセットされる。すなわち、あるキャッシュ内においてデータ・ラインが変更されると、対応するローカル変更ビットはイネーブルにセットされる。これは、すべてのキャッシュ・データ・ラインに対して存在するグローバル変更ビットに追加される。グローバル変更ビットは、すべての累積された変更でメモリを最終的にリフレッシュする必要があることを示す。
【００２７】
データ・フェッチが、ローカル・プロセッサのデータ・キャッシュはミスするが、他のキャッシュにヒットし、他のキャッシュのローカル変更ビットがイネーブル、いいかえると値１である場合は、そのラインは他のプロセッサ・キャッシュから削除され、その新しいプロセッサに「排他」でインストールされる。さらに、その新しいキャッシュでは、ローカル変更ビットがリセット（オフ）される。このことは、「複数のプロセッサに対する読出し専用」としてインストールされることになる、先行の実施方法とは対照的である。
【００２８】
データ・フェッチが、ローカル・プロセッサのデータ・キャッシュはミスするが、他のキャッシュにヒットし、他のキャッシュのローカル変更ビットが「オフ」、いいかえると値０である場合は、そのラインは、その新しいプロセッサに「読出し専用」でインストールされ、システムにインストールされたこのラインの複数のコピーの存在を指示するように両方のキャッシュ状態がセットされる。ローカル変更ビットは、どちらのキャッシュも「オフ」にセットされる。
【００２９】
このように、ローカル変更ビットを使用して、データ・ラインのインストール状態が指示される。
【００３０】
次に図３乃至図６のフローチャートを参照して、本発明の一実施形態に係る、データ・ラインをキャッシュに書き込む方法を説明する。図３乃至図５は、第１のプロセッサがデータをフェッチする処理の一例を示すフローチャートである。図３のステップ１００において、まずデータ・フェッチが第１のＬ１キャッシュにヒットするか否か判断する。第１のＬ１キャッシュにヒットする場合（ステップ１００：ＹＥＳ）、第１のプロセッサにデータを返す（ステップ１０５）。
【００３１】
第１のＬ１キャッシュにヒットしない場合（ステップ１００：ＮＯ）、データ・フェッチが第１の共有Ｌ２キャッシュにヒットするか否か判断する（ステップ１１０）。第１の共有Ｌ２キャッシュにヒットする場合（ステップ１１０でＹＥＳの場合）の処理は図４を参照して後述する。第１の共有Ｌ２キャッシュにヒットしない場合（ステップ１１０：ＮＯ）、データ・フェッチが第２の共有Ｌ２キャッシュにヒットするか否か判断する（ステップ１１５）。第２の共有Ｌ２キャッシュにヒットする場合（ステップ１１５でＹＥＳの場合）の処理は図５を参照して後述する。
【００３２】
第２の共有Ｌ２キャッシュにヒットしない場合（ステップ１１５：ＮＯ）、主メモリからデータをフェッチする（ステップ１２０）。そして第１のＬ２キャッシュにデータをインストールする（ステップ１２５）。また第１のＬ１キャッシュにデータを「排他的に」インストールする(ステップ１３０)。次に第１のＬ１キャッシュのローカル変更ビットを０にセットする（ステップ１３５）。最後にデータを第１のプロセッサへ返して（ステップ１４０）、処理は終了する。
【００３３】
次に図４を参照して、ステップ１１０で第１の共有Ｌ２キャッシュにヒットする場合の後の処理を説明する。ステップ１４５で、第２のＬ１キャッシュの状態が「排他」であるか否か判断する（ステップ１４５）。第２のＬ１キャッシュの状態が「排他」である場合（ステップ１４５：ＹＥＳ）、更に第２のＬ１キャッシュのローカル変更ビットが１であるか否か判断する（ステップ１５０）。
【００３４】
第２のＬ１キャッシュのローカル変更ビットが１である場合（ステップ１５０：ＹＥＳ）、第２のＬ１キャッシュからデータを削除する（ステップ１５５）。また第２のＬ１キャッシュのローカル変更ビットを０にセットする（ステップ１６０）。次に第１のＬ１キャッシュにデータを「排他的」にインストールする（ステップ１６５）。また第１のＬ１キャッシュのローカル変更ビットを０にセットする（ステップ１７０）。最後に第１のプロセッサにデータを返して（ステップ１７５）、処理は終了する。
【００３５】
一方、第２のＬ１キャッシュのローカル変更ビットが１でない場合（ステップ１５０：ＮＯ）、第２のＬ１キャッシュの状態を「読出し専用」に変更する（ステップ１８０）。また第１のＬ１キャッシュにデータを「読出し専用」でインストールする（ステップ１８５）。そして第１のＬ１キャッシュのローカル変更ビットを０にセットする（ステップ１９０）。最後に第１のプロセッサにデータを返して（ステップ１９５）、処理は終了する。
【００３６】
一方、ステップ１４５において第２のＬ１キャッシュの状態が「排他」でない場合（ステップ１４５：ＮＯ）、第１のＬ１キャッシュにデータを「読出し専用」でインストールする（ステップ２００）。そして第１のプロセッサへデータを返して（ステップ２０５）、処理は終了する。
【００３７】
次に図５を参照して、ステップ１１５で第２の共有Ｌ２キャッシュにヒットする場合の後の処理を説明する。ステップ２１０で、第２のＬ１キャッシュの状態が「排他」であるか否か判断する（ステップ２１０）。第２のＬ１キャッシュの状態が「排他」である場合（ステップ２１０：ＹＥＳ）、更に第２のＬ１キャッシュのローカル変更ビットが１であるか否か判断する（ステップ２１５）。
【００３８】
第２のＬ１キャッシュのローカル変更ビットが１である場合（ステップ２１５：ＹＥＳ）、第２のＬ１キャッシュからデータを削除する（ステップ２２０）。また第２のＬ１キャッシュのローカル変更ビットを０にセットする（ステップ２２５）。更に、第２のＬ２キャッシュからデータを削除する（ステップ２３０）。次に第１のＬ２キャッシュにデータをインストールする（ステップ２３５）。また第１のＬ１キャッシュにデータを「排他的」にインストールする（ステップ２４０）。そして第１のＬ１キャッシュのローカル変更ビットを０にセットする（ステップ２４５）。最後に第１のプロセッサにデータを返して（ステップ２５０）、処理は終了する。
【００３９】
一方、第２のＬ１キャッシュのローカル変更ビットが１でない場合（ステップ２１５：ＮＯ）、第２のＬ１キャッシュの状態を「読出し専用」に変更する（ステップ２５５）。また第１のＬ２キャッシュにデータをインストールする（ステップ２６０）。更に第１のＬ１キャッシュにデータを「読出し専用」でインストールする（ステップ２６５）。そして第１のＬ１キャッシュのローカル変更ビットを０にセットする（ステップ２７０）。最後に第１のプロセッサにデータを返して（ステップ２７５）、処理は終了する。
【００４０】
図６は、第１のプロセッサが第１のＬ１キャッシュ内のデータを変更、言い換えると更新する場合の処理の一例を示すフローチャートである。図６のステップ３００において、第１のＬ１キャッシュ内のデータを更新する（ステップ３００）。次に第１のＬ１キャッシュのローカル変更ビットを１にセットする（ステップ３０５）。その後処理は終了する。
【００４１】
本発明を、特定の好ましい実施形態および例示に関して説明してきたが、それらによって本発明の範囲を制限することを意図したものではなく、本発明の範囲は、添付の特許請求の範囲によってのみ制限されることが意図される。
【図面の簡単な説明】
【００４２】
【図１】プロセッサ、Ｌ１キャッシュおよびＬ２キャッシュ、ならびに主メモリを示す図である。
【図２】Ｌ１キャッシュを備えた２つのプロセッサ、共有キャッシュＬ２、および主メモリを示す図である。
【図３】第１のプロセッサがデータをフェッチする処理の一例を示すフローチャートである。
【図４】第１のプロセッサがデータをフェッチする処理の一例を示すフローチャートである。
【図５】第１のプロセッサがデータをフェッチする処理の一例を示すフローチャートである。
【図６】第１のプロセッサが第１のＬ１キャッシュ内のデータを変更する処理の一例を示すフローチャートである。
【符号の説明】
【００４３】
１０１  プロセッサ・システム
１１１  プロセッサ
１１３  Ｌ１キャッシュ
１２１  Ｌ２キャッシュ
１３１  主メモリ
２０１  システム
２１１ａ  プロセッサ
２１１ｂ  プロセッサ
２１３ａ  Ｌ１キャッシュ
２１３ｂ  Ｌ１キャッシュ
２２１  Ｌ２キャッシュ
２３１  主メモリ
２４１  データ・ライン
２５１  制御ライン
【図１】
2007207224.tif 000003
【図２】
2007207224.tif 000004
【図３】
2007207224.tif 000005
【図４】
2007207224.tif 000006
【図５】
2007207224.tif 000007
【図６】
2007207224.tif 000008