(57)【要約】  キャッシュ・ライン追出しポリシーのプログラム制御を可能にするための方法および装置。それぞれ異なるキャッシュ優先度レベルを有するコードの一部を、それらのコードの一部について予期されまたは測定されたアクセス・パターンに基づいてプログラマがマーク付けすることを可能にする機構が提供される。所定の優先度レベルに関連するキャッシュ追出しポリシーを達成する際に支援となる対応するキューが、ソースおよび／またはアセンブリ・レベルのコードから生成された機械コード内に埋め込まれる。異なる優先度がそれぞれに割り当てられた複数のプールにキャッシュ空間を分割するキャッシュ・アーキテクチャが提供される。メモリ・アクセス命令の実行に応答して、適切なキャッシュ・プールが選択され、命令のキュー内に含まれる情報に基づいて探索される。キャッシュ・ミスが生じると、プールに関連したキャッシュ追出しポリシーを使用して、追出されるキャッシュ・ラインがそのプールから選択される。ｎウェイ群連想キャッシュと完全連想キャッシュの両方について、本機構の実装が述べられる。
2008525919.tif 000002
【特許請求の範囲】
【請求項１】
プログラマまたはコンパイラのうちの１つは、キャッシュのための対応するキャッシュ追出しポリシーが使用されるコードの一部を示すことを可能にする段階と、
前記キャッシュからキャッシュ・ラインを追出すため、前記コードのランタイム実行時、前記プログラマまたはコンパイラによって示された前記キャッシュ追出しポリシーを使用する段階と、
を含むことを特徴とする方法。
【請求項２】
指定されたキャッシュ追出しポリシーが適用されるソース・レベルのコードの一部をプログラマが定義することを可能にする段階と、
前記ソース・レベルのコードを機械コードにコンパイルする段階であって、前記機械コードは、前記指定されたキャッシュ追出しポリシーが適用されるソース・レベルの前記コードの一部から導出された機械コードの対応する部分に前記指定されたキャッシュ追出しポリシーを適用する際に支援するための命令を含む、段階と、
をさらに含むことを特徴とする請求項１記載の方法。
【請求項３】
前記プログララマは、前記指定されたキャッシュ追出しポリシーが適用されるソース・レベルの前記コードの一部を、前記ソース・レベルのコード内にこれらの部分を示すためのステートメントを挿入することによって定義することが可能にされることを特徴とする請求項２記載の方法。
【請求項４】
前記プログラマが前記ソース・レベルのコードの選択された部分に第１の優先度レベルを割り当てることを可能にする段階であって、ソース・レベルのコードの他の部分は、初期設定により第２のデフォルト優先度レベルに割り当てられる、段階と、
前記機械コードに含まれるキューに応答して、
前記第１の優先度が割り当てられたソース・レベルのコードの前記選択された部分から導出された機械コードに関係するデータおよび／または命令に対して第１のキャッシュ追出しポリシーを適用し、前記デフォルト優先度レベルが割り当てられた前記ソース・レベルの他の部分から導出された機械コードに関係するデータおよび／または命令に対して第２のキャッシュ追出しポリシーを適用する段階と、
をさらに含むことを特徴とする請求項２記載の方法。
【請求項５】
前記ソース・レベルのコードの前記選択された部分にそれぞれの優先度レベルを前記プログラマが割り当てることを可能にする段階であって、前記それぞれの優先度レベルは、少なくとも３つの異なる優先度レベルを含む、段階と、
前記機械コードに含まれるキューに応答して、
各優先度レベルに割り当てられたソース・レベルのコードの一部に対して、ソース・レベルのコードのそれらの部分から導出された機械コードに関係するデータおよび／または命令のためのそれぞれのキャッシュ追出しポリシーを適用する段階と、
をさらに含むことを特徴とする請求項２記載の方法。
【請求項６】
異なる優先度レベルを有する複数の優先度プールにキャッシュを分割する段階と、
キャッシュ・ラインに含まれるデータおよび／または命令を参照するコードの一部に含まれる少なくとも１つのキューによって指定された特定の優先度プール内のキャッシュ・ラインを選択的にキャッシュする段階と、
をさらに含むことを特徴とする請求項１記載の方法。
【請求項７】
各優先度プールに対してそれぞれのキャッシュ・ライン追出しポリシーを適用する段階、
をさらに含むことを特徴とする請求項６記載の方法。
【請求項８】
前記キャッシュは、ｎ群を有するｎウェイ群連想キャッシュを含み、前記方法は、
前記ｎ群のそれぞれに各優先度プールを割り当てることによって、前記キャッシュを複数の優先度プールに分割する段階、
をさらに含むことを特徴とする請求項６記載の方法。
【請求項９】
キャッシュ・ラインに割り当てられた優先度プールを識別する各キャッシュ・ラインを示す表示を維持する段階、
をさらに含むことを特徴とする請求項６記載の方法。
【請求項１０】
プログラム・コード実行時、選択された優先度プールのサイズが動的に変更されることを可能にする段階、
をさらに含むことを特徴とする請求項６記載の方法。
【請求項１１】
選択されたキャッシュ・プールにキャッシュ・ラインを割り当てるための命令を含む命令セットを提供する段階、
をさらに含むことを特徴とする請求項６記載の方法。
【請求項１２】
前記命令セットは、特定の優先度レベルを有するキャッシュ・プールにキャッシュ・ラインを割り当てるための命令を含むことを特徴とする請求項１１記載の方法。
【請求項１３】
前記命令セットは、特定の優先度レベルを有するキャッシュ・プールにキャッシュ・ラインを割り当てるために使用されるフラグまたはマルチビット・レジスタのうちの１つをセットするための命令を含むことを特徴とする請求項１１記載の方法。
【請求項１４】
前記プログラマまたはコンパイラのうちの前記１つは、前記機械コード対応するアセンブリ言語命令を使用することによって、前記機械コードの選択された部分について特定のキャッシュ追出しポリシーの使用を指定することを可能にする段階、
をさらに含むことを特徴とする請求項１記載の方法。
【請求項１５】
アプリケーション・プログラムの部分に対してメモリ・アクセス・パターンを観察する段階と、
特定のキャッシュ追出しポリシーが適用される前記アプリケーション・プログラムの部分を決定する段階と、
前記アプリケーション・プログラムのこれらの部分をマーク付けする段階と、
マーク付けされた前記アプリケーション・プログラムの部分に対して前記特定のキャッシュ追出しポリシーを適用する際に支援するために使用されるオペ・コードを含む機械コードを生成するために前記アプリケーション・プログラムを再コンパイルする段階と、
をさらに含むことを特徴とする請求項１記載の方法。
【請求項１６】
特定のキャッシュ追出しポリシーが適用される前記アプリケーション・プログラムの前記部分を決定する段階、および、これらの部分をマーク付けする段階は、コード・チューニング・ツールによって自動的に実施されることを特徴とする請求項１５記載の方法。
【請求項１７】
前記キャッシュは、１次（Ｌ１）キャッシュを含むことを特徴とする請求項１記載の方法。
【請求項１８】
前記キャッシュは、２次（Ｌ２）キャッシュを含むことを特徴とする請求項１記載の方法。
【請求項１９】
前記キャッシュは、３次（Ｌ３）キャッシュを含むことを特徴とする請求項１記載の方法。
【請求項２０】
プロセッサ・コアと、
前記プロセッサ・コアに結合されたキャッシュ・コントローラと、
前記キャッシュ・コントローラによって制御され、前記プロセッサ・コアからのデータを受信し、そこにデータを提供するために動作可能に結合され、少なくとも１つのＴＡＧアレイ、および、少なくとも１つのキャッシュ・ライン・アレイを含む第１のキャッシュと、
を含むプロセッサであって、
前記キャッシュ・コントローラは、前記第１のキャッシュを複数のプールに分割し、それぞれのプールに対してそれぞれのキャッシュ追出しポリシーを適用するためにプログラムされることを特徴とするプロセッサ。
【請求項２１】
前記第１のキャッシュは、前記プロセッサに結合された１次（Ｌ１）キャッシュを含むことを特徴とする請求項２０記載のプロセッサ。
【請求項２２】
前記第１のキャッシュは、２次（Ｌ２）キャッシュを含み、前記プロセッサがさらに、
前記プロセッサと前記Ｌ２キャッシュとの間で結合され、前記キャッシュ・コントローラによって制御された１次（ＬＩ）のキャッシュを、
さらに含むことを特徴とする請求項２０記載のプロセッサ。
【請求項２３】
前記キャッシュは、各キャッシュ・ラインに関連する少なくとも１つのプール識別子（ＩＤ）ビットを含み、前記少なくとも１つのプールＩＤビットは、前記キャッシュ・ラインが割り当てられた前記プールを指定するために使用されることを特徴とする請求項２０記載のプロセッサ。
【請求項２４】
前記キャッシュ・コントローラは、少なくとも１つのプールのサイズを動的に変更するため、前記プロセッサ・コアから受信された入力に応答して、キャッシュ・ラインに対する前記少なくとも１つのプールＩＤビットが変更されることを可能にするようにプログラムされることを特徴とする請求項２３記載のプロセッサ。
【請求項２５】
前記キャッシュは、ｎウェイ群連想キャッシュを含むことを特徴とする請求項２０記載のプロセッサ。
【請求項２６】
前記ｎウェイ群連想キャッシュはｎ個のキャッシュ・ラインのグループを含み、キャッシュ・ラインの各グループは、異なるプールに関連し、前記キャッシュ・コントローラは、各プールに対するそれぞれのキャッシュ追出しポリシーを提供することを特徴とする請求項２５記載のプロセッサ。
【請求項２７】
前記プロセッサ・コアは、プールを指定するためのキューを含む少なくとも１つのメモリ・アクセス命令を含む命令セットの実行をサポートし、そのプールに対し前記メモリ・アクセス命令によって参照されるメモリ・アドレスに位置するデータおよび／または命令を含むキャッシュ・ラインが割り当てられ、前記プロセッサ・コアによるこのようなメモリ・アクセス命令の実行は、
キャッシュ・ミスに応答して、前記メモリ・アクセス命令内の前記キューに基づいて新しいキャッシュ・ラインが割り当てられるプールを決定する段階と、
前記プールに割り当てられたキャッシュ追出しポリシーを使用して決定される前記プールから追出す既存のキャッシュ・ラインを選択する段階と、
キャッシュ・ライン内に挿入されるデータ・ブロックを取り出す段階であって、前記データ・ブロックは、前記メモリ・アクセス命令によって参照されたシステム・メモリ内のアドレスに格納されたデータおよび／または命令を含む、段階と、
追出しに選ばれた前記キャッシュ・ラインに前記データ・ブロックをコピーする段階と、
を含む動作を実施することを特徴とする請求項２０記載のプロセッサ。
【請求項２８】
プログラム命令およびデータを格納するために、ＳＤＲＡＭ（同期動的ランダム・アクセス・メモリ）を含むメモリと、
前記メモリへのアクセスを制御するためのメモリ・コントローラと、
前記メモリ・コントローラに結合されたプロセッサであって、
プロセッサ・コア、
前記プロセッサ・コアに結合されたキャッシュ・コントローラ、
前記キャッシュ・コントローラによって制御され、前記プロセッサ・コアからデータを受信し、そこにデータを提供するため動作可能に結合された１次（Ｌ１）キャッシュ、および
前記キャッシュ・コントローラによって制御され、前記プロセッサ・コアからデータを受信し、そこにデータを提供するため動作可能に結合された２次（Ｌ２）キャッシュ、
を含むプロセッサと、
を含むコンピュータ・システムにおいて、
前記キャッシュ・コントローラは、前記Ｌ１およびＬ２のキャッシュの少なくとも１つを複数のプールに分割し、各プールに対してそれぞれのキャッシュ追出しポリシーを適用するためにプログラムされる、
ことを特徴とする、コンピュータ・システム。
【請求項２９】
前記Ｌ２キャッシュは、
ｎ個のキャッシュ・ライン・グループを含むｎウェイ群連想キャッシュを含み、キャッシュ・ラインの各グループは異なるプールと関連し、ここで前記キャッシュ・コントローラは、各プールに対してそれぞれのキャッシュ追出しポリシーを提供することを特徴とする請求項２８記載のコンピュータ・システム。
【請求項３０】
前記Ｌ１キャッシュは、命令キャッシュおよびデータ・キャッシュを含むハーバード・アーキテクチャを含み、ここで前記命令キャッシュ・コントローラは、前記命令キャッシュのためのキャッシュ・ラインを複数のプールに分割するためにプログラムされ、前記キャッシュ・コントローラは、各プールに対してそれぞれのキャッシュ・ライン追出しポリシーを使用することを特徴とする請求項２８記載のコンピュータ、システム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明の分野は、一般には、コンピュータ・システムに関し、限定的にではないが、より詳細には、プログラマ制御のキャッシュ・ライン追出しポリシーをサポートするための技術に関する。
【背景技術】
【０００２】
汎用プロセッサは一般に、それがインストールされたシステムのメモリ階層の一部として、コヒーレント・キャッシュを組み込む。キャッシュは、プロセッサ・コアの近くにある小さい高速のメモリであり、複数のレベルで構成され得る。たとえば、現代のマイクロプロセッサは一般に、１次（Ｌ１）と２次（Ｌ２）の両方のオンダイ・キャッシュを使用し、Ｌ１キャッシュはより小さく高速であり（コアにより近く）いがＬ２キャッシュはより大きいが遅い。キャッシングは、空間的局所性の特性（アクセスされた位置に隣接したアドレスのメモリ位置が同様にアクセスされる可能性が高い）、および時間的局所性（アクセスされたメモリ位置が再びアクセスされる可能性が高い）を使用して、必要なデータおよび命令をプロセッサ・コアの近くに保ち、したがってメモリ・アクセス待ち時間を減少させることによって、プロセッサ上のアプリケーション性能にとって利益をもたらす。
【０００３】
一般に、３つのタイプの全体的キャッシュ手法（各手法を実施するための様々な技術を伴う）がある。これらは、直接マップ型キャッシュ、完全連想キャッシュ、およびＮウェイ群連想キャッシュ（Ｎ−ｗａｙ  ｓｅｔ−ａｓｓｏｃｉａｔｉｖｅ  ｃａｃｈｅ）を含む。直接マップ型キャッシュの下では、それぞれのメモリ位置が、それが他の多くのメモリ位置と共有する単一のキャッシュ・ラインにマップされ、このラインを共有する多くのアドレスのうちの１つだけが、所与のときにそれを使用することができる。これは、概念と実装の両方において、最も単純な技術である。このキャッシュ手法の下では、キャッシュ・ヒットをチェックする回路は高速であり、設計が容易であるが、ヒット率は、柔軟性が低いため、他の設計に比べて比較的に劣る。
【０００４】
完全連想キャッシュの下では、いずれのメモリ位置も、いずれかのキャッシュ・ラインにキャッシュできる。これは、最も複雑な技術であり、ヒットをチェックするとき、洗練された探索アルゴリズムを必要とする。それは、このため、キャッシュ全体の減速につながることがあるが、任意のメモリ・アドレスをキャッシュする非常に多くの選択肢があるので、最良の論理的ヒット率を提供する。
【０００５】
ｎウェイ群連想キャッシュは、直接マップ型と完全連想キャッシュの側面を組み合わせる。この手法の下では、キャッシュは、それぞれｎ個のライン（たとえば、ｎ＝２，４，８など）のセットに分割され、いずれかのメモリ・アドレスが、これらのｎ個のラインのいずれかにキャッシュできる。キャッシュ・ラインのセットは事実上、ｎ個のグループに論理的に分割される。これは、直接マップ型キャッシュに比べて、ヒット率を向上させるが、しかし、（ｎが小さいまま保たれるので）探索面の重大な不利益（ｐｅｎａｌｔｙ）は生じない。
【０００６】
全体として、キャッシュは、時間と共にメモリ・アクセス操作を加速するように設計されている。汎用プロセッサでは、これに従って、様々なタイプのアプリケーションにとってこのキャッシュ手法はかなりうまく働くが、いずれかの単一のアプリケーションにとって例外的にうまくは働き得ない。キャッシュ手法の性能に影響を及ぼす複数の考慮事項がある。サイズおよびアクセス待ち時間など、一部の側面は、コストおよびプロセスの制限によって制限される。たとえば、より大きいキャッシュは、非常に多くの数のトランジスタを使用するので高価であり、したがって半導体サイズと歩留り低下の両方の面で、生産するのにより高価である。アクセス待ち時間は一般に、製造技術、ならびにプロセッサ・コアおよび／またキャッシュのクロック・レート（それぞれについて異なるクロック・レートが使用される場合）によって決まる。
【０００７】
別の重要な考慮事項は、キャッシュ追出しである。キャッシュに新しいデータおよび／または命令を加えるために、１つまたはそれ以上のキャッシュ・ラインが割り当てられる。キャッシュが一杯である場合（通常、起動操作後の場合）、同じ数の既存キャッシュ・ラインを追出されなければならない。一般に追出しポリシーは、ランダム、ＬＲＵ（ｌｅａｓｔ  ｒｅｃｅｎｔｌｙ  ｕｓｅｄ：最長未使用）および擬似ＬＲＵを含む。現在の慣行では、割当ておよび追出しのポリシーは、キャッシュ・コントローラ・ハードウェアによって実装される対応するアルゴリズムによって実施される。これは、一部のタイプのアプリケーションにはよく適し得るが、他のタイプのアプリケーションには性能不良をもたらし、キャッシュ性能レベルがアプリケーション・コードの構造に依存する、柔軟性のない追出しポリシーにつながる。
【０００８】
上記態様、および付随する本発明の利点の多くは、以下の詳細な説明を参照することによってよりよく理解されるようになるように、添付の図面を併せて考慮される場合、より容易に理解されるようになる。図面では、同じ参照符号は、特段の定めがない限り、様々な図のすべてを通して、同様の部分に言及する。
【発明の開示】
【０００９】
プログラマ制御されたキャッシュ・ライン追出しポリシーを可能にするための方法および装置の実施形態が、本明細書で説明される。以下の説明では、本発明の実施形態についての完全な理解を提供するため、複数の具体的な詳細について述べる。しかし、本発明は、特定の詳細のうちの１つまたはそれ以上を伴わず、または他の方法、構成要素、材料などを伴って実施され得ることが当業者には認識されよう。他の例では、よく知られている構造、材料または操作は、本発明の態様を不明瞭にすることを避けるため、詳細には示されまたは述べられていない。
【００１０】
本明細書全体を通して「一実施形態（ｏｎｅ  ｅｍｂｏｄｉｍｅｎｔ、ａｎ  ｅｍｂｏｄｉｍｅｎｔ）」への言及は、実施形態に関連して述べられる特定の特徴、構造または特性が、本発明の少なくとも１つの実施形態に含まれることを意味する。したがって、本明細書全体を通して様々な場所に現れる語句「一実施形態」は、すべて同じ実施形態に言及しているとは限らない。さらに、特定の特徴、構造または特性は、１つまたはそれ以上の実施形態において任意の適切なやり方で組み合わせることができる。
【００１１】
一般的なメモリ階層モデルが、図１に示される。階層の最上部には、プロセッサ１０１内のプロセッサ・レジスタ１００があり、このレジスタは、オペランド、命令オペ・コード、処理結果他など、処理コアによって使用される一時データを格納するために使用される。次のレベルには、一般に少なくともＬ１キャッシュ１０２を含み、また一般にＬ２キャッシュ１０４をさらに含むハードウェア・キャッシュがある。一部のプロセッサは、統合型レベル３（Ｌ３）キャッシュ１０５をも提供する。これらのキャッシュは、何らかの形のＤＲＡＭ（ｄｙｎａｍｉｃ  ｒａｎｄｏｍ  ａｃｃｅｓｓ  ｍｅｍｏｒｙ：ダイナミック・ランダム・アクセス・メモリ）ベースのメモリを一般に含むシステム・メモリ１０６に（キャッシュ・コントローラを介して）結合される。システム・メモリは、ディスク・ドライブなどの１つまたはそれ以上のローカル大容量記憶装置１０８から一般に取り出されるデータ、および／またはテープ／ネットワーク１１０によって示されるバックアップ・ストア（たとえばテープ・ドライブ）内にまたはネットワークを介して格納されたデータなどを格納するために使用される。
【００１２】
より新しい多くのプロセッサは、Ｌ１キャッシュから最近追出されたデータを格納するために使用されるビクティム・キャッシュ（またはビクティム・バッファ）１１２をさらに使用する。このアーキテクチャの下では、追出されたデータ（ビクティム）は、まずビクティム・バッファに、次いでＬ２キャッシュに移動される。ビクティム・キャッシュは、特定のキャッシュ・ラインの１つのコピーだけが様々なプロセッサ・キャッシュ・レベルによって維持される、排他的キャッシュ・アーキテクチャにおいて使用される。
【００１３】
階層の各レベルについての例示的な容量およびアクセス時間情報によって示されるように、階層の最上位近くのメモリは、より速いアクセスおよびより小さいサイズを有し、階層の下部に向かってメモリは、遥かに大きいサイズおよびより遅いアクセスを有する。さらに、メモリ・タイプの記憶単位（バイト）当たりのコストは、アクセス時間のほぼ逆であり、レジスタ・ストレージが最も高価であり、テープ／ネットワーク・ストレージが最も安価である。これらの属性および関連する性能基準を考慮して、コンピュータ・システムは一般に、コスト対性能の均衡を保つように設計される。たとえば、一般にデスクトップのコンピュータは、１６キロバイトのＬ１キャッシュ、２５６キロバイトのＬ２キャッシュを備えたプロセッサを使用し、５１２メガバイトのシステム・メモリを有し得る。対照的に、より高性能のサーバは、Ｉｎｔｅｌ（登録商標）Ｘｅｏｎ（商標）ＭＰプロセッサによって提供されるものなど、遥かに大きいキャッシュを備えたプロセッサを使用し、このプロセッサは、２０キロバイト（データおよび実行トレース）キャッシュ、５１２キロバイトのＬ２キャッシュ、および４メガバイトのＬ３キャッシュを複数ギガバイトのシステム・メモリと共に含み得る。
【００１４】
図１に示されるようなメモリ階層を使用する１つの動機は、コスト／性能の考慮事項に基づいて、異なるメモリ・タイプを分離することである。抽象レベルでは、所与の各レベルは事実上、それより下のレベルのためのキャッシュとして機能する。したがって、システム・メモリ１０６は事実上、大容量記憶装置１０８用のあるタイプのキャッシュであり、大容量記憶装置はさらに、テープ／ネットワーク１１０用のあるタイプのキャッシュとしても機能し得る。
【００１５】
これらの考慮事項に留意して、一般化された従来のキャッシュ使用モデルが、図２に示される。キャッシュ使用は、ブロック２００で開始され、メモリ・アクセス要求が、データ位置識別子を参照する所与のレベルで受信され、このデータ位置識別子は、階層の次のレベルにおいてデータがどこに置かれているかを指定する。たとえば、プロセッサからの一般的なメモリ・アクセスは、対応するプログラム命令を実行することにより取得される、要求されたデータのアドレスを指定する。他のタイプのメモリ・アクセス要求は、より下のレベルで行われ得る。たとえば、オペレーティング・システムは、仮想メモリとして機能するためディスク・ドライブの一部を使用し、それによって、システム・メモリの機能サイズが増加し得る。そうする際に、オペレーティング・システムは、システム・メモリとディスク・ドライブとの間でメモリ・ページを「スワップし」、ページが一時スワップ・ファイル内に格納される。
【００１６】
アクセス要求に応答して、要求されたデータが適応可能なキャッシュ、すなわち階層の次のレベルの（有効な）キャッシュ内にあるかどうかの判断が、判断ブロック２０２で行われる。一般的な言葉で言うと、要求されたデータの存在は「キャッシュ・ヒット」であり、データの不在は「キャッシュ・ミス」となる。プロセッサ要求では、この判断によって、要求されたデータがＬ１キャッシュ１０２内にあるかどうか識別される。Ｌ２キャッシュ要求（対応するキャッシュ・コントローラによって出される）では、判断ブロック２０２によって、データがＬ２キャッシュ内で使用可能であるかどうか判断される。
【００１７】
データが適用可能キャッシュ内で使用可能である場合、判断ブロック２０２への応答はＨＩＴであり、論理はブロック２１０に進み、このブロックで、データがそのキャッシュから、このキャッシュのすぐ上のレベルの要求元に返される。たとえば、要求がプロセッサからＬ１キャッシュ１０２に対して行われ、データがＬ１キャッシュ内にある場合は、それは、プロセッサ（要求元）に返される。しかし、データがＬ１キャッシュ内にない場合は、キャッシュ・コントローラは、第２のデータ・アクセス要求を、このときはＬ１キャッシュからＬ２キャッシュに出す。データがＬ２キャッシュ内にある場合は、それは、Ｌ１キャッシュ、すなわち現在の要求元に返される。当業者に認識されるように、包含的なキャッシュ設計の下では、その後このデータは、Ｌ１キャッシュに書き込まれ、Ｌ１キャッシュからプロセッサに返される。本明細書で示された構成に加えて、一部のアーキテクチャは、並列パスを使用し、Ｌ２キャッシュが、Ｌ１キャッシュとプロセッサに同時にデータを返す。
【００１８】
要求されたデータが適用可能キャッシュ内に存在せず、ＭＩＳＳがもたらされると仮定する。この場合、論理はブロック２０４に進み、（要求されたデータによって）置き換えられるデータの単位が、適用可能なキャッシュ追出しポリシーを使用して決定される。たとえば、ＬＩ、Ｌ２およびＬ３キャッシュでは、記憶単位は「キャッシュ・ライン」である（プロセッサ・キャッシュの記憶単位はブロックとも称され、システム・メモリの置換単位は一般に、メモリ・ページである）。置き換えられる単位は、それがキャッシュから追出されるので、追出される単位を含む。従来のキャッシュ追出しに使用される最も一般的なアルゴリズムは、ＬＲＵ、擬ＬＲＵおよびランダムである。
【００１９】
ブロック２０４の操作と共に、ブロック２０６で、要求されたデータ単位が、次のメモリ・レベルから取り出され、ブロック２０８で、追出された単位を置き換えるために使用される。たとえば、最初の要求がプロセッサによって行われ、要求されたデータが、Ｌ１キャッシュではないが、Ｌ２キャッシュ内で使用可能であると仮定する。Ｌｌキャッシュ・ミスに応答して、ブロック２０４で、Ｌ１キャッシュから追出されるキャッシュ・ラインが、キャッシュ・コントローラによって決定される。並行して、Ｌ２内の要求されたデータを含むキャッシュ・ラインが、追出しに選択されたキャッシュ・ラインの位置でＬ１キャッシュにコピーされ、したがって、追出されたキャッシュ・ラインに取って換わる。キャッシュ・データ単位が置き換えられた後、ブロック２１０で、その単位内に含まれる適用可能データが、要求元に返される。
【００２０】
従来の手法の下では、キャッシュ追出しポリシーは静的である。すなわち、それらは一般に、変更できないキャッシュ・コントローラ・ハードウェア内のプログラムされた論理によって実施される。たとえば、特定のプロセッサ・モデルは、そのキャッシュ・コントローラ論理内に埋め込まれた特定のキャッシュ追出しポリシーを有しており、その追出しポリシーが、プロセッサを使用するシステム内で実行されるすべてのアプリケーションのために使用されることを必要とする。
【００２１】
本発明の実施形態によれば、プログラム制御要素を介してキャッシュ追出しポリシーを制御するための機構が提供される。これによって、プログラマまたはコンパイラは、（ソース・コードから導出される）対応する機械コードの選択された部分、および／またはデータが、プログラム制御追出しポリシーを使用することによってどのようにキャッシュされるかキャッシュ・コントローラに指示するための制御キューをそのソース・コード内に埋め込むことができる。
【００２２】
概要として、プログラム・キャッシュ・ポリシー制御機構の一般的な態様を示すため、本発明の基本的な実施形態についてまず論じる。さらに、この機構によって使用される一般原理を示すため、ハイ・レベル・キャッシュ（たとえばＬ１、Ｌ２またはＬ３キャッシュ）を使用するこの実施形態の実装について述べる。これらの一般原理は、システム・メモリ・レベルなど、他のキャッシュ・レベルで同じように実施され得ることが理解されよう。
【００２３】
図３ａを参照すると、基本的なの実施形態の一実装の下で実施される操作および論理を示すフローチャートが示される。この実装形態の下では、所与のキャッシュ・レベルのストレージ・リソースが、２つのプール、すなわち高優先度プールおよび低優先度プールに分割される。高優先度プールは、プロセッサによって近い将来再びアクセスされる可能性がより高いデータおよび／またはコードを含むキャッシュ・ラインの格納のために使用され、低優先度プールは、この時間フレーム中に再びアクセスされる可能性がより低いデータおよび／またはコードを含むキャッシュ・ラインの格納のために使用される。さらに、高優先度プールは、従来のキャッシュ追出し手法の下では通常追出されるキャッシュ・ラインを格納するために選択される。この実装の追加の態様によれば、要求されたデータを含むブロックがどのプールにキャッシュされるかキャッシュ・コントローラに指示するためのキューが、機械コードに埋め込まれる。
【００２４】
ブロック３００で開始し、メモリ・アクセス・サイクルは、従来の手法と同じように進み、要求元（この実施例ではプロセッサ）が、取り出されるデータおよび／または命令のアドレスを参照するメモリ・アクセス要求を出す。しかし、この要求はさらに、キャッシュ・プール識別子（ＩＤ）を含んでおり、このキャッシュ・プール識別子は、取り出されたデータがキャッシュされるキャッシュ・プールを指定するために使用される。本機構のこの態様を実施するためのさらなる詳細について、以下に述べる。
【００２５】
上記と同様に、メモリ・アクセス要求に応答して、適用可能キャッシュ・レベルは、判断ブロック３０２によって示されるように、データが存在しているかどうかチェックする。一部の実施形態では、以下で述べるように、キャッシュ・プールＩＤは、対応するキャッシュ探索を支援するために使用される。キャッシュＨＩＴが生じる場合は、ブロック３１４で、データが要求元に戻され、サイクルを完了する。しかし、キャッシュＭＩＳＳが生じる場合は、論理は判断ブロック３０４に進み、キャッシュ・プールＩＤが高優先度プールを指定しているか、それとも低優先度プールを指定しているか判断される。
【００２６】
キャッシュ・プールＩＤが高優先度プールを指定する場合は、要求に対応するデータおよび／または命令は、プログラマによって、（従来の追出しポリシーの下では、キャッシュ内にとどまるのに十分なほど頻繁にはアクセスされないが、）アプリケーションの他の部分より頻繁にアクセスされる可能性が高いアプリケーション・プログラムの部分に含まれるものと識別される。したがって、要求されたデータが格納される対応するキャッシュ・ラインを、それらのキャッシュ・ラインが低優先度キャッシュ・ラインに比べて低頻度に追出されるようにマーク付けすることが望まれる。キャッシュ・プールＩＤが低優先度プールを指定する場合は、これは、アプリケーションの関連する部分が、プログラマによって、より低頻度にアクセスされるとみなされていることを示す。一実施形態では、高優先度プールＩＤは、アサートされたビットを含み、低優先度ＩＤは、アサートされていないビットを含む。以下でより詳細に述べるように、一実施形態では、高優先度データおよびコードを含むアプリケーションの部分は、高優先度プール内にキャッシュされるものとマークされ、他のすべてのデータおよびコードは単純に、低優先度プール内に、または初期設定により「デフォルト」プール内にキャッシュされる。
【００２７】
判断ブロック３０４の結果によれば、高優先度プールＩＤを伴う要求が最初に、ブロック３０６によって処理される。このブロックでは、プールのための適用可能キャッシュ追出しポリシー（また関連するアルゴリズム）を使用して、どのデータ・ブロック（キャッシュ・ライン）が置き換えられるかの決定が行われる。一実施形態では、キャッシュ・記憶空間の各部分が、固定サイズの、高および低優先度プールに分割される。この場合、置き換えられるキャッシュ・ラインは、適用可能キャッシュ追出しアルゴリズムを使用して、高最優度プール内のキャッシュ・ラインの中から選択される。たとえば、一実施形態では、ＬＲＵアルゴリズムが、最長未使用のキャッシュ・ラインを高優先度プールから追出すために使用され、他の実施形態は、それだけに限らないが、擬似ＬＲＵやランダム追出しアルゴリズムを含めて、任意選択のアルゴリズムを使用し得る。
【００２８】
別の実施形態では、高および低優先度プールのサイズは可変である。この場合、キャッシュ・コントローラ内の論理は、プログラム指示（たとえばキュー）、および／または、監視されたアクセス・パターンを考慮して、プールの相対サイズが動的に調整され得るように適応される。一実施形態では、キャッシュ・コントローラ論理は、高および低優先度プール要求の観察された比に基づいて、プールの相対サイズを動的に調整するキャッシュ追出しポリシーを使用する。一実施形態では、両方のキャッシュ・プールについて、単一のキャッシュ追出しポリシーが実施される。別の実施形態では、それぞれの２次キャッシュ追出しポリシーが、動的に調整された高および低優先度サブ・プールに適用される。
【００２９】
低優先度プールのエントリは、ブロック３０８で、高優先度プール・エントリと同様に処理される。上記で論じたように、一実施形態では、キャッシュの固定部分は、低優先度プールに割り当てられる。したがって、別個の低優先度プール・キャッシュ追出しポリシーが、キャッシュのこの部分に適用される。やはり上記で論じたように、高および低優先度プールのサイズが動的に調整され得る実施形態では、単一のキャッシュ追出しポリシーがキャッシュ全体に適用されてもよく、あるいは、それぞれの２次キャッシュ追出しポリシーが、動的に調整される高および低優先度サブ・プールに適用されてもよい。
【００３０】
ブロック３０６および３０８（該当する場合）の操作と共に、要求されたデータ・ブロックが、ブロック３１０で、次のメモリ・レベルから取り出され、ブロック３１２で、追出しに選択されたブロックを置き換えるために使用される。Ｌ２からＬ１へのキャッシュ置換またはＬ３からＬ２へのキャッシュ置換の一実施形態では、下位レベル・キャッシュのキャッシュ・ラインが、上位レベル・キャッシュの追出されたキャッシュ・ラインによって以前に占有されていた位置に単にコピーされ、新しい値が、対応するキャッシュ・ライン・タグに挿入される。要求されたデータは、高レベル・キャッシュに書き込まれた後、プロセッサに返される。
【００３１】
高および低優先度プール実施形態について上記で提示された一般原理は、任意の数のキャッシュ優先度レベルをサポートするように拡張され得る。たとえば、図３ｂの実施形態は、１からｎ個のキャッシュ・プール優先度レベルをサポートする。一実施形態では、ｎは、ｎウェイ連想キャッシュのウェイの数である。別の実施形態では、ｎ個のキャッシュ優先度プールが、完全連想キャッシュを使用して実装される。別の実施形態では、ｎ≠ｍとして、ｎ個のキャッシュ優先度プールが、ｍウェイ群連想キャッシュで実装される。
【００３２】
図３ｂの実施形態に戻ると、メモリ・アクセス・サイクルは、図３ａのブロック３００について上記で論じたのと同じように、ブロック３００Ａで開始しているが、キャッシュ・プールを識別するのではなく、キャッシュ優先度レベルを指定するデータが、メモリ・アドレスと共に提供される。判断ブロック３０２によって行われたキャッシュＨＩＴまたはＭＩＳＳの判断に従って、論理は、ブロック３１４または判断ブロック３０５に進む。一実施形態では、キャッシュ・プール優先度レベルは、キャッシュ探索を支援するために使用され、他の実施形態では、キャッシュ・プール優先度レベルは、キャッシュ探索の間、使用されない。
【００３３】
判断ブロック３０５は、対応する優先度レベルについてそれぞれのキャッシュ追出しポリシーを実装するために使用されるｎ個のブロックのうちの１つに論理を分岐させるために使用される。たとえば、キャッシュ・プール優先度レベルが１である場合は、論理はブロック３０６１に進み（ｒｏｕｔｅ）、それが２である場合は、論理はブロック３０６２に進むなどである。一実施形態では、上述したのと同じように、キャッシュは、プール・サイズが互いに等しいことも等しくないこともある、固定のサイズのｎ個のプールに分割される。別の実施形態では、プール・サイズは、現行のアクセス・パターンの考慮事項に鑑みて、動的に調整される。ブロック３０６１〜ｎのそれぞれにおいて、各キャッシュ追出しポリシーが、対応するキャッシュ・プール優先度レベルを考慮して適用される。一般に、それぞれの優先度レベルについて同じタイプのキャッシュ追出しポリシーが適用されてもよく、または異なるレベルについて、それぞれ異なるタイプの追出しポリシー（および対応するアルゴリズム）が実装されてもよい。置き換えられるキャッシュ・ラインがブロック３０６１〜ｎのうちの１つの中の追出しポリシーによって決定された後、ブロック３１０で、要求されたデータが次のメモリ・レベルから取り出され、ブロック３１２で、追出されたキャッシュ・ラインが、図３ａの同じ番号が付けられたブロックについて上記で論じたやり方と同じように置き換えられる。次いで、ブロック３１４で、新しくキャッシュされたデータが、要求元のプロセッサに返される。
【００３４】
一般に、複数の技術のうちの１つが、アプリケーション・コードの各部分のキャッシュ・プール優先度レベルをマーク付けするために使用され得る。しかし、最終的には、キャッシュ優先度レベルの表示は、プロセッサがソース・レベルのコードを実行しないので、ターゲット・プロセッサ上で実行されるのに適した機械レベルのコードに符号化される。以下でより詳細に述べるように、一実施形態では、対応するデータおよび命令がどのプールにキャッシュされるかプロセッサに指示するために、特別のオペ・コードがプロセッサの命令セットに追加される。
【００３５】
一実施形態では、ソース・コードのレベルでマーカが埋め込まれ、機械コード内で、対応するキャッシュ優先度キューの生成がもたらされる。図４を参照すると、このプロセスは、ブロック４００で開始しており、それぞれ異なるコードの一部のためのキャッシュ追出しポリシーを示すため、マーカが、高水準ソース・コード内に挿入される。一実施形態では、高水準コードは、ＣまたはＣ＋＋言語で書かれたプログラミング・コードを含み、マーカは、対応するプラグマ・ステートメントを介して実装される。２優先度レベルのキャッシュ追出しポリシーを達成するための１組の例示的なプラグマ・ステートメントを示す擬似コードが、図５ａに示される。この実施形態では、２つの優先度レベル、すなわち高優先度を示すＯＮ、および低優先度またはデフォルト優先度レベルを示すＯＦＦがある。プラグマ・ステートメント「ＣＡＣＨＥ  ＥＶＩＣＴ  ＰＯＬＩＣＹ  ＯＮ」は、高優先度プールに割り当てられるコードの一部の開始をマーク付けするために使用され、「ＣＡＣＨＥ  ＥＶＩＣＴ  ＰＯＬＩＣＹ  ＯＦＦ」プラグマ・ステートメントは、そのコードの一部の終了をマーク付けするために使用される。
【００３６】
別の実施形態では、プラグマ・ステートメントは、ｎキャッシュ優先度レベルを示すために使用される。たとえば、４つの異なるキャッシュ優先度レベルを達成するためのプラグマ・ステートメントを示す擬似コードが、図５ｂに示される。この場合、プラグマ「ＥＶＩＣＴ＿ＬＥＶＥＬ  １」は、レベル１キャッシュ優先度が適用されるコードの一部の開始を示すために使用され、「ＥＶＩＣＴ＿ＬＥＶＥＬ  ２」は、レベル２キャッシュ優先度が適用されるコードの一部の開始を示すために使用されるなどである。
【００３７】
図５ａおよび図５ｂに示されるこれらのプラグマ・ステートメントは、コンパイラに機械コードを生成するように指示し、この機械コードは、対応するコードおよび／またはデータがどのプールにキャッシュされるか、したがって（間接的には）どのキャッシュ追出しポリシーが使用されるかをプロセッサおよび／またはキャッシュ・コントローラに指示する、埋め込まれたキューを含む。一実施形態では、これは、ブロック４０２に示されるように、従来のメモリ・アクセス・オペ・コードを新しいオペ・コードに置き換えることによって遂行され、この新しいオペ・コードは、プロセッサおよび／またはキャッシュ・コントローラに、対応するコードの一部をキャッシュするためにどのキャッシュ・プール優先度レベルが使用されるべきか伝える手段を提供する。
【００３８】
一実施形態では、それぞれの各キャッシュ優先度レベルについて、明示的なオペ・コードが提供される。たとえば、ある一般的な命令セットの下では、ＭＯＶ命令が、メモリとレジスタとの間でデータを移動させるために使用される。２つのキャッシュ優先度レベルでは、対応するアセンブリ命令は、ＭＯＶ（デフォルトである低優先度キャッシュ・プールを指定、または特別な処理が要求されない）、ＭＯＶＬ（低優先度プールの使用を明示的に指定）およびＭＯＶＨ（高優先度プールの使用を明示的に指定）であり得る。別の実施形態では、それぞれのオペ・コードは、ＭＯＶ１、ＭＯＶ２、ＭＯＶ３他など、それぞれの優先度レベルについて提供される。ｎ優先度レベル実装の一実施形態では、命令は、命令と、ＭＯＶＣｎなどの優先度レベルを定義する属性とを含む。
【００３９】
別の実施形態では、命令は、フラグまたはマルチ・ビット・プールＩＤレジスタを明示的にセットし、クリアするために使用される。この手法の下では、選択されたメモリ・アクセス命令の復号と共に、フラグまたはマルチ・ビット・プールＩＤレジスタがチェックされ、フラグまたはプールＩＤ値は、メモリ・アクセスに対応する適用可能データおよび／または命令をキャッシュするためにどのプールが使用されるべきか識別する。このように、レジスタ値が、特定のプールを識別するために使用でき、現在のアクセスおよび後続のアクセスに関連するデータのキャッシングがそのプールに割り当てられる。プールを変更するために、フラグまたはプールＩＤ値は、それに応じて変更される。１組の例示的な命令形式の下では、ＳＥＴＨＦが高優度プール・フラグをセットするために使用され、ＣＬＲＨＦがフラグ（低優先度またはデフォルト・プールが使用されるべきことを示す）をクリアするために使用される。ｎ優先度レベル実装の一実施形態では、命令は、命令と、ＳＥＴＰ  ｎなどの優先度レベルを定義する属性とを含む。
【００４０】
ブロック４０４に示されるように、ランタイム(実行)時、キャッシュ使用は、実行された機械コード内に含まれる指示キュー（特定のオペ・コードおよび任意選択のオペランド）によって管理される。キャッシュ追出しポリシーを実施するためのハードウェア実装を示す技術について、以下で論じる。
【００４１】
高水準ソース・コード内でプラグマを使用することに加えて、機械レベルのコードの一部が、コード・チューニング・ツールなどを使用して、それぞれ異なる優先度レベルでマーク付けが行なわれる。たとえば、Ｉｎｔｅｌ（登録商標）のＶｔｕｎｅなど、コード・チューニング・ツールが、アプリケーション・プログラムのランタイム使用の間、コード・アクセスを監視するために使用され得る。これらのツールによって、プログラマは、他の部分より頻繁に使用されるコードの一部を識別することができる。さらに、使用サイクルが識別されることもできる。これは、本明細書で述べる諸実施形態によって容易にされ得る、特定のキャッシュ追出しポリシーの実装に特に有益である。たとえば、従来のＬＲＵ追出しアルゴリズムの下では、非常に高アクセスを有するコードの一部がキャッシュにロードされ、最長未使用のキャッシュ・ラインとなるまで、キャッシュ内にとどまる。これは事実上、あるタイプの高優先度キャッシングである。
【００４２】
対照的に、本発明の実施形態によって、プログラマは、既存のキャッシュ全体にわたる追出しアルゴリズムでは効率的に処理されない他のタイプの状態のためのキャッシュ追出しポリシーを達成することができる。たとえば、比較的長い期間にわたってかなり頻繁に使用されるコードの特定の部分（長期の時間局所性）があるが、従来の追出しアルゴリズムの下では、使用間で追出しが行われ続けていると仮定する。一方、他のコードの一部はあまり使用されておらず、最高レベル・キャッシュの使用は実際に逆効果である。これは、様々なプロセッサ・キャッシュ内で１つのデータ・コピーだけが維持される（たとえば、１つのデータ・コピーだけが、一度にＬ１キャッシュとＬ２キャッシュの両方にではないが、そのいずれかに存在する）排他的なキャッシュ設計の下では特に当てはまる。
【００４３】
図６は、実際のアプリケーション使用を観察することから導出されたキャッシュ優先度レベルを有するコードの一部を生成するために実施される操作を図示するフローチャートを示している。このプロセスは、ブロック６００で開始し、ソース・コードが、マーカなしに、従来のやり方でコンパイルされる。ブロック６０２で、コンパイルされたコードについてのメモリ・アクセス・パターンが、適切なコード・チューニング・ツールなどを使用して観察される。次いで、ブロック６０４で、特定のアクセス・パターンを有するコードの一部が、チューニング・ツールを使用して、ユーザの指示の下、またはチューニング・ツールに組み込まれた論理を介して自動的にマーク付けされる。次いで、チューニング・ツールは、（たとえば、本明細書で述べたものに類似の明示的なオペ・コードを介した）埋め込まれたキャッシュ管理指示を伴う命令を含む新しいコードを生成するため、コードを再コンパイルする。
【００４４】
キャッシュ追出しポリシーのプログラム制御をサポートするハードウェア・アーキテクチャの例示的な実施形態が、図７ａ〜ｂおよび図８ａ〜ｃに示される。一般に、これらの実施形態で開示される諸原理は、ｎウェイ群連想キャッシュ・アーキテクチャおよび完全連想キャッシュ・アーキテクチャを含めて、様々なタイプのよく知られているキャッシュ・アーキテクチャで実装され得る。さらに、諸原理は、ユニファイド・キャッシュ（キャッシュおよび同じキャッシュ内のデータ）、およびハーバード・アーキテクチャ・キャッシュ（データ・キャッシュ（Ｄｃａｃｈｅ）および命令キャッシュ（Ｉｃａｃｈｅ）に分割されたキャッシュ）の両方で実装され得る。マルチプレクサ、復号論理、データ・ポートなど、他のキャッシュ構成要素の詳細は、明瞭にするため、図７ａ〜ｂおよび図８ａ〜ｃに示されていないことに留意されたい。これらの構成要素は、アーキテクチャの実際の実装において存在することが、当業者には理解されよう。
【００４５】
図７ａのキャッシュ・アーキテクチャ７００Ａの実施形態は、４ウェイ群連想キャッシュに対応する。一般に、このアーキテクチャは、明瞭にするため、本明細書で詳細に述べられる４ウェイ実装を伴う、ｎウェイ群連想キャッシュを表すものである。このアーキテクチャの主要な構成要素は、プロセッサ７０２と、ひとまとめにしてキャッシュ・コントローラと称される様々なキャッシュ制御要素（その具体的な詳細については以下で述べる）と、一般にブロックとも称される、タグ・アレイおよびキャッシュ・ラインを格納するために使用されるメモリからなる実際のキャッシュ記憶空間自体とを含む。
【００４６】
キャッシュ・アーキテクチャ７００Ａの一般的な操作は、従来の４ウェイ群連想キャッシュによって使用されるものに類似する。メモリ・アクセス要求（対応する命令または命令シーケンスの実行を介して行われる）に応答して、要求によって参照されるアドレスが、キャッシュ・コントローラに転送される。アドレスのフィールドは、ＴＡＧ７０４、ＩＮＤＥＸ７０６およびブロックＯＦＦＳＥＴ７０８に分割される。ＴＡＧ７０４とＩＮＤＥＸ７０６との組合せは、ブロック（またはキャッシュ・ライン）アドレスと一般に称される。またブロックＯＦＦＳＥＴ７０８は、バイト選択またはワード選択フィールドと一般に称される。バイト／ワード選択またはブロック・オフセットの目的は、キャッシュ・ライン内の複数のワードまたはバイトの中から、要求されたワード（一般的）またはバイトを選択することである。たとえば、一般的なキャッシュ・ラインのサイズは８〜１２８バイトである。キャッシュ・ラインが、キャッシュ内でアクセスされ得る最小単位なので、キャッシュ・ラインのさらなる解析によって、要求されたデータが返されることを可能にするための情報を提供することが必要である。所望のワードまたはバイトの位置は、キャッシュ・ラインのベースからオフセットされ、したがって、名前ブロック「オフセット」がある。
【００４７】
一般に、ｌ個の最下位ビットがブロック・オフセット用に使用され、キャッシュ・ラインまたはブロックの幅は、２ｌバイト幅である。次の１組のｍビットは、ＩＮＤＥＸ７０６を含む。このインデックスは、アクセスされるキャッシュ・セットを指定する、オフセットに隣接するアドレス・ビットの部分を含む。それは、図示された実施形態ではｍビット幅であり、したがって、各アレイは、２ｍ個のエントリを保持する。それは、各タグ・アレイ内のタグを検索するために使用され、またオフセットと共に、各キャッシュ・ライン・アレイ内のデータを検索するために使用される。ＴＡＧ７０４のビットは、アドレスの最上位ｎビットを含む。それは、各ＴＡＧアレイ内の対応するＴＡＧを検索するために使用される。
【００４８】
上述のキャッシュ要素はすべて、従来の要素である。これらの要素に加えて、キャッシュ・アーキテクチャ７００Ａは、プール優先度ビット７１０を使用する。プール優先度ビットは、キャッシュ・ラインが探索され、かつ／または追出され／置換される（必要な場合）セットを選択するために使用される。キャッシュ・アーキテクチャ７００Ａの下では、メモリ・アレイの要素は、４つのグループに分割される。それぞれのグループは、ＴＡＧアレイ７１２ｊと、キャッシュ・ライン・アレイ７１４ｊとを含み、ただしｊはグループを識別する（たとえば、グループ１は、ＴＡＧアレイ７１２１と、キャッシュ・ライン・アレイ７１４１とを含む）。
【００４９】
メモリ・アクセス要求に応答して、キャッシュ・アーキテクチャ７００Ａの操作は、以下のように進む。図示された実施形態では、プロセッサ７０２は、メモリ・アドレスを参照するＭＯＶＨ命令７１６を受信する。上記で論じたように、一実施形態では、ＭＯＶＨ命令は、プロセッサ／キャッシュ・コントローラに、対応するキャッシュ・ラインを高優先度プールに格納するように指示する。図示された実施形態では、グループ１、２、３および４は、グループ１〜３が低優先度プール用に使用され、グループ４が高優先度プール用に使用されるように分割される。グループを等しく分割することや、単一のプールを低優先度プール用に使用し、他の３つのプールを高優先度プール用に使用するなど、他の分割手法が、類似のやり方で実装されることもできる。
【００５０】
ＭＯＶＨ命令の実行に応答して、高論理レベル（１）を有する優先度ビットが、プレフィックスとしてアドレスに付加され、キャッシュ・コントローラ論理に提供される。一実施形態では、高優先度ビットは、１つの１ビット・レジスタに格納され、アドレスは、別のｗビット・レジスタに格納され、ただしｗはアドレスの幅である。別の実施形態では、優先度ビットとアドレスとの組合せが、ｗ＋１の幅であるレジスタに格納される。
【００５１】
図７ａに示されるものなど、分離型プール手法の一実施形態では、現在の要求の優先度ビット値に関連するプールを有するグループだけが、キャッシュ・ヒットまたはミスを確認するために探索される必要がある。したがって、ＴＡＧアレイ７１２４だけが、探索される必要がある。図示された実施形態では、ＴＡＧアレイ内の各要素は、有効ビットを含む。このビットは、対応するキャッシュ・ラインが有効かどうか示すために使用され、突合わせのためセットされなければならない。この実施例では、キャッシュ・ミスが発生すると仮定する。
【００５２】
キャッシュ・ミスに応答して、キャッシュ・コントローラは、置き換えられるグループ４からキャッシュ・ラインを選択する。図示された実施形態では、高優先度追出しポリシー７１８および低優先度追出しポリシー７２０として示された高および低優先度プールのそれぞれについて、別個のキャッシュ追出しポリシーが実装される。別の実施形態では、（追出されるキャッシュ・ラインは、優先度レベルによって依然として分離されるが、）共通の追出しポリシーが、両方のプールのために使用され得る。
【００５３】
追出されたキャッシュ・ライン内の修正済みのデータが、追出しの前に、システム・メモリに書き戻されることが重要である。一般的な手法の下では、「ダーティ」ビットが、更新されたキャッシュ・ラインをマーク付けするために使用される。実装に応じて、ダーティ・ビットを伴うキャッシュ・ラインは、システム・メモリに周期的に書き戻すことができ（対応するダーティ・ビットのクリアがその後に続く）、かつ／またはそれは、追出しに応答して書き戻され得る。ダーティ・ビットがクリアされる場合、キャッシュ・ライン追出しに関連する書戻しは必要ない。
【００５４】
追出すキャッシュ・ラインの選択と共に実施される別の操作は、要求されるデータを、下位レベル・メモリ７２２から取り出ことである。この下位レベル・メモリは、現在のキャッシュ・レベルに比べて、図１のメモリ階層内の次に低いレベルを表している。たとえば、キャッシュ・アーキテクチャ７００Ａは、Ｌ１キャッシュに対応することができ、下位レベル・メモリ７２２はＬ２キャッシュを表し、またキャッシュ・アーキテクチャ７００ＡはＬ２キャッシュに対応し、下位レベル・メモリ７２２はシステム・メモリを表すなどである。簡単にするため、要求されたデータが、下位レベル・メモリ７２２に格納されると仮定する。追出すキャッシュ・ラインの選択とさらに関連して、図７ａに示すように、ビクティム・バッファ７２４を使用する排他的キャッシュ・アーキテクチャを有するキャッシュ・アーキテクチャ７００の任意選択の実装の下では、キャッシュ・ラインは、ビクティム・バッファにコピーされる。
【００５５】
要求されたデータがキャッシュ・コントローラに戻されると、データは、追出されたキャッシュ・ラインにコピーされ、対応するＴＡＧおよび有効ビットが、適切なＴＡＧアレイ（現在の実施例ではＴＡＧアレイ７１２４）内で更新される。要求されたデータを単に返すのではなく、要求されたデータに近い、またそれを含むデータの複数の連続したデータ・バイトが返され、そのバイト数はキャッシュ・ライン幅に等しい。たとえば、３２バイトのキャッシュ・ライン幅では、３２個のデータ・バイトが返される。次いで、新しいキャッシュ・ラインに含まれる（元の要求に対応する）ワードが、４：１ブロック選択マルチプレクサ７２８の支援により、キャッシュからプロセッサ７０２用の入力レジスタ７２６に読み込まれる。
【００５６】
キャッシュされていないアドレスに対応する値を書込み、キャッシュ・アーキテクチャ７００Ａ用のキャッシュ・ラインに格納された値を更新することもまた、プール優先度ビットのさらなる使用を除いては、従来の手法と同じように実施される。これは、出力レジスタ７３０に格納されたデータが（最終的に）システム・メモリに書き込まれる、キャッシュの書戻しを伴う。（現在存在するならば）適切なキャッシュ・ラインが、プール優先度ビットによって定義されたプールに関連するグループを使用してまず探索される。検出される場合は、キャッシュ・ラインは、出力レジスタ７３０内のデータで更新され、対応するダーティ・ビット（図示せず）にフラグが立てられる。システム・メモリは引き続き、よく知られている書戻し操作を介して新しい値で更新される。更新されるデータがキャッシュ内に検出されない場合は、一実施形態では、キャッシュ・ラインが、読出し要求について上述したやり方と同じように追出され、更新されるデータを含むブロックが、システム・メモリ（または適宜、次のレベルのキャッシュ）から取り出される。次いで、このブロックは、追出されたキャッシュ・ラインにコピーされ、対応するＴＡＧおよび有効ビット値が、適切なＴＡＧアレイ内で更新される。一部の場合では、システム・メモリの更新時、キャッシング操作をバイパスすることが望まれる。この場合、メモリ・アドレス上のデータは、対応するブロックにキャッシュされずに更新される。
【００５７】
図７ｂのキャッシュ・アーキテクチャ７００Ｂは、図７ａのキャッシュ・アーキテクチャ７００Ａに構成が類似しており、同様の番号が付けられた構成要素は、類似の機能を実施する。このアーキテクチャの下では、４レベル・キャッシュ追出し優先度手法が実装され、この手法は、ｎレベル追出し優先度手法を一般に表している。この手法の下では、各グループが、それぞれのプールに関連付けられ、各プールに、それぞれの優先度レベルが割り当てられる。前の単一の優先度ビットはマルチビット・フィールドで置き換えられ、ビット幅は、２のべき乗に基づいて実装される優先度レベルの数に依存する。たとえば、図７ｂに示された４優先度レベルの場合には、２ビットが使用される。さらに、それぞれの各プールは、プール００追出しポリシー７３２、プール０１追出しポリシー７３４、プール１０追出しポリシー７３６およびプール１０追出しポリシー７３８によって示されるように、関連するプール追出しポリシーを有する。
【００５８】
キャッシュ・アーキテクチャ７００Ｂは、キャッシュ・アーキテクチャ７００Ａについて上述したやり方と同じように働く。しかし、この場合、要求の優先度を識別するプールＩＤ値が、適切なキャッシュ・プール、およびしたがって適切なキャッシュ・セットを識別するために使用される。
【００５９】
キャッシュ・アーキテクチャ７００Ａ，７００Ｂによって提供される特徴の組合せが、同じキャッシュ内で実装され得ることに留意されたい。たとえば、ｎウェイ群連想キャッシュは、ｎ≠ｍとして、ｍ個の優先度レベルを使用し得る。
【００６０】
図８ａ〜ｃは、キャッシュ・ポリシーのプログラム制御をサポートするように拡張された完全連想キャッシュ・アーキテクチャを示している。完全連想キャッシュは、単一群連想キャッシュのように機能する。したがって、（それぞれ図８ａ，８ｂ，８ｃの）キャッシュ・アーキテクチャ８００Ａ、８００Ｂ，８００Ｃはそれぞれ、単一のＴＡＧアレイ７１２と、単一のキャッシュ・ライン・アレイ７１４とを含む。単一の１組のＴＡＧおよびキャッシュ・ラインしかないので、ＩＮＤＥＸは必要なく、したがって、キャッシュ・コントローラに提供される情報はここでは、ブロック・アドレスを表すＴＡＧ８０４と、ブロック・オフセット８０８とを含む。キャッシュ・アーキテクチャ７００Ａに類似のやり方で、図８ａのキャッシュ・アーキテクチャ８００Ａは、プール優先度ビット８１０を使用し、このプール優先度ビットは、上記で論じたプール優先度ビット７１０に類似の機能を実施する。
【００６１】
キャッシュ・アーキテクチャ７００Ａ，７００Ｂとは異なり、キャッシュ・アーキテクチャ８００Ａ，８００Ｂ，８００Ｃはそれぞれ、動的なプール割当てをサポートする。これは、１つまたはそれ以上の優先度ＩＤビットの使用を介して処理され、ビットの数は、実装される所望の優先度粒度よって決まる。たとえば、キャッシュを高および低優先度プールに分割するには単一の優先度ビットが必要であり、キャッシュをｍ個のプールに分割するには、ｌｏｇ２（ｍ）個の優先度ＩＤビットが必要である（たとえば４優先度レベルでは２ビット、８優先度レベルでは３ビットなど）。キャッシュ・グループのサイズが一定なので、１つの優先度レベルのプール割当てを増加すると、別のプールへの類似の減少がもたらされる。
【００６２】
図８ａのキャッシュ・アーキテクチャ８００Ａの下では、単一の優先度ビット・フィールドが各ＴＡＧアレイ・エントリに追加され、優先度ビット列８１２がもたらされる。アクセス要求に応答して、優先度ビット８１０が、アドレスと共にキャッシュ・コントローラに提供される。次いで、ＴＡＧアレイ７１２が、マスクとして優先度ビット列８１２内の値を使用して探索され、したがって検索を向上させ得る。キャッシュ・ミスに応答して、（キャッシュ・アーキテクチャ８００Ａ内の優先度ビット、およびキャッシュ・アーキテクチャ８００Ｂ，８００Ｃ内の優先度ＩＤビットによって定義される）適用可能キャッシュ・プールからのキャッシュ・ラインが、プール追出しポリシーを使用して追出される。追出しポリシーは、キャッシュ・アーキテクチャ８００Ａのための低優先度追出しポリシー８２０および高優先順位追出しポリシー８１８、ならびにキャッシュ・アーキテクチャ８００Ｂ，８００Ｃのためのｍ個の追出しポリシー８２０１−ｍを含む。オプションとして、共通のキャッシュ・ポリシー８２４によって示されるように、（各プールについて別個に実装された）単一のキャッシュ・ポリシーが、これらのキャッシュ・アーキテクチャのそれぞれのために使用され得る。
【００６３】
キャッシュ・ライン追出しの選択と共に、要求されたデータが、キャッシュ・アーキテクチャ７００Ａ，７００Ｂについて上述されたやり方と同じように下位レベル７２２から取り出される。次いで、適用可能ブロックが、キャッシュ・ライン・アレイ７１４の中からの適切なキャッシュ・ラインにコピーされ、次いで適切なワード（要求アドレスに対応する）が、訳語選択マルチプレクサ８１４を介して選択され、入力レジスタ７２６に返される。
【００６４】
実施形態８００Ａ，８００Ｂ，８００Ｃのそれぞれにおいて、各プールのサイズは、プール・サイズ・セレクタ８３０によって管理される。プール・サイズ・セレクタは、キャッシュ活動を考慮してプールのサイズを動的に変更するための論理（たとえばプログラムされた論理を介して実装されたアルゴリズム）を使用する。たとえば、この論理は、プールのうちの１つまたはそれ以上が過度にしばしば追出されているかどうか確かめるために、それぞれのプール内のキャッシュ追出し活動を監視し得る。この場合、そのプールのサイズを増加させ、別のまたは他のプールのサイズを減少させることが有利であり得る。
【００６５】
プールのサイズの変更を達成するための機構は、かなり単純であり、アップグレードしまたはダウングレードするキャッシュ・ラインの選択のために使用されたプロセスは一般に、より複雑である。たとえば、所与のキャッシュ・ラインの優先度レベルを変更するため、ＴＡＧアレイ内のライン内の対応する優先度ビット（または複数の優先度ＩＤビット）は単に、新しい優先度レベルを反映するように変更される。一方、一実施形態では、ＬＲＵや擬似ＬＲＵアルゴリズムによって維持された情報など、キャッシュ・アクティビティ情報を考慮して、選択されたキャッシュ・ラインが、優先度アップグレードまたはダウングレードのために選ばれる。別の実施形態では、キャッシュ・ラインの連続したグループが置き換えられ得る。
【００６６】
キャッシュ・アーキテクチャ８００Ｂ，８００Ｃは、１つのフィールドを除いて同一である。有効ビットを使用するのではなく、キャッシュ・アーキテクチャ８００Ｃは、ＭＥＳＩ（Ｍｏｄｉｆｉｅｄ  Ｅｘｃｌｕｓｉｖｅ  Ｓｈａｒｅｄ  Ｉｎｖａｌｉｄ：変更済み、排他的、共有、無効）プロトコルをサポートする２ビットのＭＥＳＩフィールドを使用する。ＭＥＳＩプロトコルは、スヌープを介してキャッシュ・コヒーレンスを使用するための形式的な機構であり、マルチプロセッサ・アーキテクチャにおいて特に有用である。ＭＥＳＩプロトコルの下では、それぞれのキャッシュ・ラインに、４つのＭＥＳＩ状態のうちの１つが割り当てられる。
【００６７】
変更済み（（Ｍ）ｏｄｉｆｉｅｄ）状態のラインは、１つのキャッシュ内だけで使用可能であり、また修正済みのデータを含み、すなわち、そのデータは、システム・メモリ内の同じアドレスのデータと異なる。Ｍ状態ラインは、バス上でサイクルを送出せずにアクセスできる。
【００６８】
また排他的（（Ｅ）ｘｃｌｕｓｉｖｅ）状態のライン、システム内の１つのキャッシュだけに使用可能であるが、ラインは更新されない。Ｅ状態ラインは、バス・サイクルを生成せずにアクセスできる。Ｅ状態ラインへの書込みによって、ラインが更新された状態になる。
【００６９】
共有（（Ｓ）ｈａｒｅｄ）状態のラインは、ラインが潜在的に他のキャッシュと共有される（すなわち同じラインが、２つ以上のキャッシュ内に存在し得る）ことを示す。Ｓ状態ラインへの読出しは、バス活動を生成しないが、共有のラインへの書込みは、バス上のライトスルー・サイクルを生成する。これによって、他のキャッシュ内でこのラインが無効にされ得る。Ｓ状態ラインへの書込みによって、キャッシュが更新される。Ｓ状態ラインへ書込みは、バスに、所有権のための読出し（ＲＦＯ：Ｒｅａｄ  Ｆｏｒ  Ｏｗｎｅｒｓｈｉｐ、ゼロ・バイト読出し）を発行させ、このＲＦＯは、他のキャッシュに、ライン、およびこのラインの排他的状態への遷移を無効にさせる。次いで、書込みは、上述したように、Ｅ状態ラインへと進み得る。
【００７０】
無効（（Ｉ）ｎｖａｌｉｄ）状態は、ラインがキャッシュ内で使用可能でないことを示す。このラインへの読出しは、ＭＩＳＳをもたらし、プロセッサにライン・フィル（システム・メモリからのラインのフェッチ）を実行させ得る。一実施形態では、無効ラインへの書込みは、プロセッサに、バスへのライトスルー・サイクルを実行させる。一実施形態では、ライトバック・メモリ内の「Ｉ」状態ラインへの書込みがあると、バス上のメモリ読出しによって、キャッシュ内のラインが割り当てられるようになる。これは、「書込み後の割当て」ポリシーである。
【００７１】
命令キャッシュについては、ＭＥＳＩプロトコルの２つの可能な状態（ＳＩ）のために１ビットだけが必要とされることに留意されたい。これは、命令キャッシュが本質的に書込み保護されているからである。キャッシュ・アーキテクチャ８００Ｃ内で使用されるやり方と同様に、ＭＥＳＩフィールドが、キャッシュ・アーキテクチャ７００Ａ，７００Ｂ，７００Ｃ，８００Ａのそれぞれの有効ビット・フィールドの代わりに使用され得る。
【００７２】
図９を参照すると、一般に従来型のコンピュータ９００が示されており、このコンピュータは、デスクトップ・コンピュータ、ワークステーションおよびラップトップ・コンピュータなど、本明細書で述べるキャッシュ・アーキテクチャを有するプロセッサを使用し得る様々なコンピュータ・システムを表している。またコンピュータ７００は、様々なサーバ・アーキテクチャ、ならびに複数のプロセッサを有するコンピュータを包含するものである。
【００７３】
当業者に一般によく知られているように、コンピュータ９００はシャーシ９０２を含んでおり、このシャーシ内に、フロッピー（登録商標）・ディスク・ドライブ９０４（任意選択）、ハード・ディスク・ドライブ９０６と、システム・メモリ９１０、および１つまたはそれ以上のプロセッサ（ＣＰＵ）９１２を含めて適切な集積回路が並べられたマザーボード９０８とがマウントされる。モニタ９１４が、計算機によって実行されるソフトウエア・プログラムおよびプログラム・モジュールによって生成されたグラフィックスおよびテキストを表示するために含まれる。マウス９１６（または他のポインティング装置）が、シャーシ９０２の後部でシリアル・ポート（またはバス・ポートまたはＵＳＢポート）に接続でき、マウス９１６からの信号が、ディスプレイ上のカーソルを制御し、コンピュータ上で実行されるソフトウエア・プログラムおよびモジュールによってモニタ９１４に表示されたテキスト、メニュー・オプション、およびグラフィック要素を選択するためにマザーボードに伝えられる。さらに、コンピュータ上で実行されるソフトウエア・プログラムの実行に影響を及ぼすテキストおよびコマンドのユーザ入力のため、キーボード９１８がマザーボードに結合される。
【００７４】
コンピュータ９００は、ディスク上の実行可能ファイルおよびデータがコンピュータ９００のメモリおよび／またはハード・ドライブ９０６内の記憶域への転送のため読み出され得るように、ＣＤ−ＲＯＭディスクが挿入され得るコンパクト・ディスク読出し専用メモリ（ＣＤ−ＲＯＭ：ｃｏｍｐａｃｔ  ｄｉｓｋ−ｒｅａｄ  ｏｎｌｙ  ｍｅｍｏｒｙ）ドライブ９２２を任意選択で含むこともできる。光記録媒体やＤＶＤドライブなど、他の大容量記憶装置が含まれ得る。
【００７５】
プロセッサ９１２のアーキテクチャの詳細が、図９の上部分に示される。プロセッサ・アーキテクチャは、キャッシュ・コントローラ９３２およびＬ１キャッシュ９３４に結合されたプロセッサ・コア９３０を含む。Ｌ１キャッシュ９３４は、Ｌ２キャッシュ９３６にも結合される。一実施形態では、任意選択のビクティム・キャッシュ９３８が、ＬＩキャッシュとＬ２キャッシュとの間で結合される。一実施形態では、プロセッサ・アーキテクチャはさらに、Ｌ２キャッシュ９３６に結合された任意選択のＬ３キャッシュ９４０を含む。Ｌｌ、Ｌ２、Ｌ３およびビクティム・キャッシュはそれぞれ、キャッシュ・コントローラ９３２によって制御される。図示された実施形態では、Ｌ１キャッシュは、Ｉｃａｃｈｅ９４２およびＤｃａｃｈｅ９４４を含めて、ハーバード・アーキテクチャを使用する。プロセッサ９１２はさらに、システム・メモリ９１０へのアクセスを制御するためのメモリ・コントローラ９４６を含む。
【００７６】
キャッシュ・コントローラ９３２は一般に、本明細書で述べたキャッシュ・アーキテクチャのキャッシュ制御要素を実装するキャッシュ・コントローラを表している。キャッシュ追出しポリシーのプログラム制御をサポートするための本明細書で述べたキャッシュ・アーキテクチャ実施形態によって提供される操作に加えて、キャッシュ・コントローラが、プロセッサの分野の当業者には知られている周知の従来のキャッシュ操作を実施する。
【００７７】
要約において述べられたことを含めて、示された本発明の実施形態についての上記説明は、網羅的なものではなく、または本発明を開示された厳密な形に限定するものではない。本発明の特定の実施形態およびその実施例が、例示のために本明細書で述べられているが、当業者には認識されているように、本発明の範囲内で様々な等価の修正が可能である。
【００７８】
上記の詳細な説明に鑑みて、これらの修正が、本発明に加えられ得る。特許請求の範囲中で使用される用語は、明細書および図面に開示された特定の諸実施形態に本発明を限定するものと解釈すべきでない。そうではなく、本発明の範囲は、請求項解釈の確立された原理に従って解釈すべきである特許請求の範囲によって完全に決定されるものである。
【図面の簡単な説明】
【００７９】
【図１】現代のコンピュータ・システム内で使用される一般的なメモリ階層を示す概略図である。
【図２】従来のキャッシング・プロセス中に実施される操作を示すフローチャートである。
【図３ａ】本発明の一実施形態による、キャッシュが高および低優先度プールに分割される、キャッシュ追出しポリシーのプログラム制御をサポートするキャッシング・プロセスの下で実施される操作および論理を示すフローチャートである。
【図３ｂ】本発明の一実施形態による、それぞれの優先度レベルを有する複数の優先度プールにキャッシュが分割される、キャッシュ追出しポリシーのプログラム制御をサポートするキャッシング・プロセスの下で実施される操作および論理を示すフローチャートである。
【図４】本発明の一実施形態による、プログラム設計、コード生成およびランタイム・フェーズの間に実施される操作であって、優先キャッシングを有するべきアプリケーション・プログラムの部分をプログラマが識別できるようにされ、生成されたプログラム機械コードのランタイムにこうした識別された部分の優先キャッシングが実施される操作を示すフローチャートである。
【図５ａ】本発明の一実施形態による、高いキャッシュ優先度レベルが割り当てられたコードの一部を示すために使用される例示的なプラグマ・ステートメントを示す擬似コード・リスティングの図である。
【図５ｂ】本発明の一実施形態による、複数のキャッシュ優先度レベルに割り当てられたコードの一部を示すために使用される例示的なプラグマ・ステートメントを示す擬似コード・リスティングの図である。
【図６】本発明の一実施形態による、プログラム設計、コード生成およびランタイム・フェーズの間に実施される操作であって、優先キャッシングに適したコードの一部を決定するため元のプログラム・コードのメモリ・アクセス・パターンが監視され、こうした部分が手動でまたは自動的にマーク付けされ、元のコードが、優先キャッシング操作を達成するために使用される置換オペ・コードを含むように再コンパイルされる操作のフローチャートである。
【図７ａ】キャッシュ・ラインのグループのうちの１つが高優先度プールに割り当てられ、残りのキャッシュ・ライン・グループが低優先度プールに割り当てられる、４ウェイ群連想キャッシュ・アーキテクチャの概要図である。
【図７ｂ】各キャッシュ・ライン・グループが、それぞれ異なる優先度レベルを有する各プールに割り当てられる、図７ａの様々なキャッシュ・アーキテクチャを示す概要図である。
【図８ａ】プール優先度ビットを介してキャッシュ・ラインが高または低優先度プールのうちの１つに割り当てられる、完全連想キャッシュ・アーキテクチャの概要図である。
【図８ｂ】マルチ・ビット・プール識別子を使用してキャッシュ・ラインがｍ個の優先度レベルのうちの１つに割り当てられる、完全連想キャッシュ・アーキテクチャの概要図である。
【図８ｃ】ＭＥＳＩ（変更済み、排他的、共有、無効）プロトコルが使用される、図８ｂのキャッシュ・アーキテクチャの任意選択の構成を示す概略図である。
【図９】本明細書に示されるキャッシュ・アーキテクチャ実施形態が実施され得る、例示的なコンピュータ・システムおよびプロセッサを示す概略図である。
【図１】
2008525919.tif 000003
【図２】
2008525919.tif 000004
【図３ａ】
2008525919.tif 000005
【図３ｂ】
2008525919.tif 000006
【図４】
2008525919.tif 000007
【図５ａ】
2008525919.tif 000008
【図５ｂ】
2008525919.tif 000009
【図６】
2008525919.tif 000010
【図７ａ】
2008525919.tif 000011
【図７ｂ】
2008525919.tif 000012
【図８ａ】
2008525919.tif 000013
【図８ｂ】
2008525919.tif 000014
【図８ｃ】
2008525919.tif 000015
【図９】
2008525919.tif 000016
【国際調査報告】
2008525919.tif 000017
2008525919.tif 000018
2008525919.tif 000019
2008525919.tif 000020