IP Force 特許公報掲載プロジェクト 2022.1.31 β版

知財求人 - 知財ポータルサイト「IP Force」

▶ インターナショナル・ビジネス・マシーンズ・コーポレーションの特許一覧

特許7758846キャッシュ・メモリ用の複数のコピー・スコーピング・ビット
<>
  • 特許-キャッシュ・メモリ用の複数のコピー・スコーピング・ビット 図1
  • 特許-キャッシュ・メモリ用の複数のコピー・スコーピング・ビット 図2
  • 特許-キャッシュ・メモリ用の複数のコピー・スコーピング・ビット 図3
  • 特許-キャッシュ・メモリ用の複数のコピー・スコーピング・ビット 図4
  • 特許-キャッシュ・メモリ用の複数のコピー・スコーピング・ビット 図5
  • 特許-キャッシュ・メモリ用の複数のコピー・スコーピング・ビット 図6A
  • 特許-キャッシュ・メモリ用の複数のコピー・スコーピング・ビット 図6B
  • 特許-キャッシュ・メモリ用の複数のコピー・スコーピング・ビット 図6C
  • 特許-キャッシュ・メモリ用の複数のコピー・スコーピング・ビット 図7
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2025-10-14
(45)【発行日】2025-10-22
(54)【発明の名称】キャッシュ・メモリ用の複数のコピー・スコーピング・ビット
(51)【国際特許分類】
   G06F 12/0817 20160101AFI20251015BHJP
   G06F 12/0895 20160101ALI20251015BHJP
【FI】
G06F12/0817
G06F12/0895 114
G06F12/0895 120
【請求項の数】 20
(21)【出願番号】P 2024504193
(86)(22)【出願日】2022-08-15
(65)【公表番号】
(43)【公表日】2024-08-08
(86)【国際出願番号】 EP2022072750
(87)【国際公開番号】W WO2023020985
(87)【国際公開日】2023-02-23
【審査請求日】2025-01-16
(31)【優先権主張番号】17/407,228
(32)【優先日】2021-08-20
(33)【優先権主張国・地域又は機関】US
(73)【特許権者】
【識別番号】390009531
【氏名又は名称】インターナショナル・ビジネス・マシーンズ・コーポレーション
【氏名又は名称原語表記】INTERNATIONAL BUSINESS MACHINES CORPORATION
【住所又は居所原語表記】New Orchard Road, Armonk, New York 10504, United States of America
(74)【代理人】
【識別番号】100112690
【弁理士】
【氏名又は名称】太佐 種一
(74)【代理人】
【識別番号】100120710
【弁理士】
【氏名又は名称】片岡 忠彦
(72)【発明者】
【氏名】イ、チュンゴン
(72)【発明者】
【氏名】ウォルタース、クレイグ
(72)【発明者】
【氏名】バンダムラヴリ、ラム サイ マノジュ
(72)【発明者】
【氏名】ブロンソン、ティモシー
(72)【発明者】
【氏名】アレクサンダー、グレゴリー
【審査官】下林 義明
(56)【参考文献】
【文献】特表2015-503130(JP,A)
【文献】特開2007-207151(JP,A)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 12/08 - 12/128
(57)【特許請求の範囲】
【請求項1】
コンピュータ実行方法であって、
キャッシュ・メモリ・システム内のキャッシュ・ラインの共有のスコープを指示するキャッシュ・メモリのマルチコピー・スコープ・ディレクトリ状態にアクセスすることと、
前記マルチコピー・スコープ・ディレクトリ状態に基づいて、前記キャッシュ・メモリ・システム内の前記キャッシュ・ラインの共有のスコープを決定することであって、前記マルチコピー・スコープ・ディレクトリ状態が、前記キャッシュ・メモリ・システム内の複数のスコープを列挙する、前記決定することと、
前記共有のスコープを使用して、前記共有のスコープ内で識別された共有スコープより大きいスコープを有する1つまたは複数のキャッシュ・メモリへのクエリの数を低減させることと、
前記キャッシュ・メモリ・システム内の前記キャッシュ・ラインの共有スコープの変化を検出したことに基づいて、前記キャッシュ・メモリの前記マルチコピー・スコープ・ディレクトリ状態をアップデートすることと
を含む、コンピュータ実行方法。
【請求項2】
より小さいスコープを有する前記共有のスコープが、前記キャッシュ・メモリ・システム内に前記より大きいスコープを有する前記共有のスコープのサブセットである、請求項1に記載のコンピュータ実行方法。
【請求項3】
前記共有のスコープが、最小スコープとしてのチップ・スコープ、モジュール・スコープ、ドロワー・スコープ、および、最大スコープとしてのシステム・スコープを含む、請求項2に記載のコンピュータ実行方法。
【請求項4】
リクエスト・キャッシュが前記キャッシュ・ラインの共有コピーをリクエストしたと決定したことに基づいて、スヌープ・スコープを最小スコープにセットすることと、
今までにクエリを送られたことがない現在のスヌープ・スコープ内の1つまたは複数のリモート・キャッシュ・メモリにクエリを送ることと、
前記キャッシュ・ラインの介入マスタ・コピーが、前記現在のスヌープ・スコープのリモート・キャッシュ・メモリ内で見つかったか、または転送状態の前記キャッシュ・ラインに遭遇したかを決定することと、
前記リクエスト・キャッシュに前記キャッシュ・ラインの共有コピーをインストールすること、および前記キャッシュ・ラインの前記介入マスタ・コピーが、前記現在のスヌープ・スコープのリモート・キャッシュ・メモリ内で見つかったか、または前記転送状態の前記キャッシュ・ラインに遭遇したことに基づいて、前記キャッシュ・ラインのマスタ・コピーを保持するディレクトリ・エントリの状態をアップデートすることと
をさらに含む、請求項1に記載のコンピュータ実行方法。
【請求項5】
前記キャッシュ・メモリから前記キャッシュ・ラインをフェッチすること、および初期のスヌープ・スコープ内で前記キャッシュ・ラインが見つからなかった後、共有非マスタ状態の前記キャッシュ・ラインの1つまたは複数のコピーが見つかったことに基づいて、リクエスト・キャッシュ・ディレクトリをアップデートすることと、
前記キャッシュ・ラインの少なくとも1つのリモート・ソーシング・ディレクトリをアップデートすることと
をさらに含む、請求項4に記載のコンピュータ実行方法。
【請求項6】
リクエスト・キャッシュが前記キャッシュ・ラインの排他コピーをリクエストしたことに基づいて、前記リクエスト・キャッシュが前記キャッシュ・ラインの介入マスタ共有コピーを有するかどうか決定することと、
ディレクトリ・スコープを含む最小スヌープ・スコープ内の全てのキャッシュ・メモリ内の前記キャッシュ・ラインの無効化をリクエストすることと、
リクエスト・コア内の前記キャッシュ・ライン用のリクエスト・キャッシュ・ディレクトリを排他状態にアップデートすることと
をさらに含む、請求項1に記載のコンピュータ実行方法。
【請求項7】
リクエスト・キャッシュが前記キャッシュ・ラインの前記介入マスタ共有コピーを有していないと決定したことに基づいて、現在のスヌープ・スコープを前記最小スヌープ・スコープにセットすることと、
今までにクエリを送られたことがない前記現在のスヌープ・スコープ内の1つまたは複数のリモート・キャッシュにクエリを送ることと、
前記現在のスヌープ・スコープ内の前記キャッシュ・ラインの共有非介入マスタ・コピーに基づいて、リモート・キャッシュ・ディレクトリを無効状態にアップデートすることと、
前記キャッシュ・ラインの介入マスタ・コピーが前記現在のスヌープ・スコープ内のリモート・キャッシュ内に見つからず、最高スヌープ・スコープに達したと決定したことに基づいて、前記キャッシュ・ライン用の前記リクエスト・キャッシュ・ディレクトリを前記排他状態にアップデートすることと、
前記キャッシュ・ラインの前記介入マスタ・コピーが前記現在のスヌープ・スコープ内の前記リモート・キャッシュ内に見つからず、前記最高スヌープ・スコープに達していないと決定したことに基づいて、前記現在のスヌープ・スコープを次に大きいスヌープ・スコープにセットすることと
をさらに含む、請求項6に記載のコンピュータ実行方法。
【請求項8】
前記キャッシュ・ライン用の前記リモート・キャッシュ・ディレクトリを前記無効状態にアップデートすること、および前記現在のスヌープ・スコープ内で前記キャッシュ・ラインの前記排他コピーを有する前記リモート・キャッシュを見つけたこと、および前記現在のスヌープ・スコープ内の前記リモート・キャッシュ内で前記キャッシュ・ラインの前記介入マスタ・コピーが見つからないと決定したことに基づいて、前記排他状態の前記キャッシュ・ラインの前記排他コピーをインストールすることと、
前記キャッシュ・ライン用の前記リモート・キャッシュ・ディレクトリを前記無効状態にアップデートすること、および前記現在のスヌープ・スコープ内で前記キャッシュ・ラインの前記介入マスタ共有コピーを有する前記リモート・キャッシュを見つけたことに基づいて、前記キャッシュ・ライン用の前記リクエスト・キャッシュ・ディレクトリを前記排他状態にアップデートすることであって、前記リモート・キャッシュ内の前記ディレクトリ・スコープが、前記現在のスヌープ・スコープより小さいか等しい、前記アップデートすることと
をさらに含む、請求項7に記載のコンピュータ実行方法。
【請求項9】
前記キャッシュ・ライン用の前記リモート・キャッシュ・ディレクトリを前記無効状態にアップデートすること、および前記リモート・キャッシュ内の前記ディレクトリ・スコープが前記現在のスヌープ・スコープより大きいことに基づいて、今までクエリを送られたことがない前記リモート・キャッシュ内の前記ディレクトリ・スコープより大きい前記最小スヌープ・スコープ内で前記リモート・キャッシュに前記クエリを送ることと、
前記キャッシュ・ライン用の前記リモート・キャッシュ・ディレクトリを前記無効状態にアップデートすることと、
前記キャッシュ・ライン用の前記リクエスト・キャッシュ・ディレクトリを前記排他状態にアップデートすることと
をさらに含む、請求項8に記載のコンピュータ実行方法。
【請求項10】
1次スコープが前記キャッシュ・ラインの前記介入マスタ・コピーを含まず、2次スコープが前記キャッシュ・ラインの前記介入マスタ・コピーを含み、より大きいスコープ・ブロードキャストが開始されたことを検出したことに基づいて、全システム状態が解決される前に前記キャッシュ・ラインの前記介入マスタ・コピーを使用すること
をさらに含む、請求項7に記載のコンピュータ実行方法。
【請求項11】
システムであって、
複数のプロセッサと、
キャッシュ・メモリ・システムと、
キャッシュ・コントローラであって、
前記キャッシュ・メモリ・システム内のキャッシュ・ラインの共有のスコープを指示するキャッシュ・メモリのマルチコピー・スコープ・ディレクトリ状態にアクセスすること、
前記マルチコピー・スコープ・ディレクトリ状態に基づいて、前記キャッシュ・メモリ・システム内の前記キャッシュ・ラインの共有のスコープを決定することであって、前記マルチコピー・スコープ・ディレクトリ状態が、前記キャッシュ・メモリ・システム内の複数のスコープを列挙する、前記決定すること、
前記共有のスコープを使用して、前記共有のスコープ内で識別された共有スコープより大きいスコープを有する1つまたは複数のキャッシュ・メモリへのクエリの数を低減させること、および
前記キャッシュ・メモリ・システム内の前記キャッシュ・ラインの共有スコープの変化を検出したことに基づいて、前記キャッシュ・メモリの前記マルチコピー・スコープ・ディレクトリ状態をアップデートすること
を含む動作を実施するように構成された、キャッシュ・コントローラと
を備える、システム。
【請求項12】
より小さいスコープを有する前記共有のスコープが、前記キャッシュ・メモリ・システム内に前記より大きいスコープを有する前記共有のスコープのサブセットである、請求項11に記載のシステム。
【請求項13】
前記共有のスコープが、最小スコープとしてのチップ・スコープ、モジュール・スコープ、ドロワー・スコープ、および、最大スコープとしてのシステム・スコープを含む、請求項12に記載のシステム。
【請求項14】
前記キャッシュ・コントローラが、
リクエスト・キャッシュが前記キャッシュ・ラインの共有コピーをリクエストしたと決定したことに基づいて、スヌープ・スコープを最小スコープにセットすることと、
今までにクエリを送られたことがない現在のスヌープ・スコープ内の1つまたは複数のリモート・キャッシュ・メモリにクエリを送ることと、
前記キャッシュ・ラインの介入マスタ・コピーが、前記現在のスヌープ・スコープのリモート・キャッシュ・メモリ内で見つかったか、または転送状態の前記キャッシュ・ラインに遭遇したかを決定することと、
前記リクエスト・キャッシュに前記キャッシュ・ラインの共有コピーをインストールすること、および前記キャッシュ・ラインの前記介入マスタ・コピーが、前記現在のスヌープ・スコープのリモート・キャッシュ・メモリ内で見つかったか、または前記転送状態の前記キャッシュ・ラインに遭遇したことに基づいて、前記キャッシュ・ラインのマスタ・コピーを保持するディレクトリ・エントリの状態をアップデートすることと
を含む動作を実施するように構成される、請求項11に記載のシステム。
【請求項15】
前記キャッシュ・コントローラが、
前記キャッシュ・メモリから前記キャッシュ・ラインをフェッチすること、および初期のスヌープ・スコープ内で前記キャッシュ・ラインが見つからなかった後、共有非マスタ状態の前記キャッシュ・ラインの1つまたは複数のコピーが見つかったことに基づいて、リクエスト・キャッシュ・ディレクトリをアップデートすることと、
前記キャッシュ・ラインの少なくとも1つのリモート・ソーシング・ディレクトリをアップデートすることと
を含む動作を実施するように構成される、請求項14に記載のシステム。
【請求項16】
前記キャッシュ・コントローラが、
リクエスト・キャッシュが前記キャッシュ・ラインの排他コピーをリクエストしたことに基づいて、前記リクエスト・キャッシュが前記キャッシュ・ラインの介入マスタ共有コピーを有するかどうか決定することと、
ディレクトリ・スコープを含む最小スヌープ・スコープ内の全てのキャッシュ・メモリ内の前記キャッシュ・ラインの無効化をリクエストすることと、
リクエスト・コア内の前記キャッシュ・ライン用のリクエスト・キャッシュ・ディレクトリを排他状態にアップデートすることと
を含む動作を実施するように構成される、請求項11に記載のシステム。
【請求項17】
前記キャッシュ・コントローラが、
リクエスト・キャッシュが前記キャッシュ・ラインの前記介入マスタ共有コピーを有していないと決定したことに基づいて、現在のスヌープ・スコープを前記最小スヌープ・スコープにセットすることと、
今までにクエリを送られたことがない現在のスヌープ・スコープ内の1つまたは複数のリモート・キャッシュにクエリを送ることと、
前記現在のスヌープ・スコープ内の前記キャッシュ・ラインの共有非介入マスタ・コピーに基づいて、リモート・キャッシュ・ディレクトリを無効状態にアップデートすることと、
前記キャッシュ・ラインの介入マスタ・コピーが前記現在のスヌープ・スコープ内のリモート・キャッシュ内に見つからず、最高スヌープ・スコープに達したと決定したことに基づいて、前記キャッシュ・ライン用の前記リクエスト・キャッシュ・ディレクトリを前記排他状態にアップデートすることと、
前記キャッシュ・ラインの前記介入マスタ・コピーが前記現在のスヌープ・スコープ内の前記リモート・キャッシュ内に見つからず、前記最高スヌープ・スコープに達していないと決定したことに基づいて、前記現在のスヌープ・スコープを次に大きいスヌープ・スコープにセットすることと
を含む動作を実施するように構成される、請求項16に記載のシステム。
【請求項18】
前記キャッシュ・コントローラが、
前記キャッシュ・ライン用の前記リモート・キャッシュ・ディレクトリを前記無効状態にアップデートすること、および前記現在のスヌープ・スコープ内で前記キャッシュ・ラインの前記排他コピーを有する前記リモート・キャッシュを見つけたこと、および前記現在のスヌープ・スコープ内の前記リモート・キャッシュ内で前記キャッシュ・ラインの前記介入マスタ・コピーが見つからないと決定したことに基づいて、前記排他状態の前記キャッシュ・ラインの前記排他コピーをインストールすることと、
前記キャッシュ・ライン用の前記リモート・キャッシュ・ディレクトリを前記無効状態にアップデートすること、および前記現在のスヌープ・スコープ内で前記キャッシュ・ラインの前記介入マスタ共有コピーを有する前記リモート・キャッシュを見つけたことに基づいて、前記キャッシュ・ライン用の前記リクエスト・キャッシュ・ディレクトリを前記排他状態にアップデートすることであって、前記リモート・キャッシュ内の前記ディレクトリ・スコープが、前記現在のスヌープ・スコープより小さいか等しい、前記アップデートすることと
を含む動作を実施するように構成される、請求項17に記載のシステム。
【請求項19】
前記キャッシュ・コントローラが、
前記キャッシュ・ライン用の前記リモート・キャッシュ・ディレクトリを前記無効状態にアップデートすること、および前記リモート・キャッシュ内の前記ディレクトリ・スコープが前記現在のスヌープ・スコープより大きいことに基づいて、今までクエリを送られたことがない前記リモート・キャッシュ内の前記ディレクトリ・スコープより大きい前記最小スヌープ・スコープ内で前記リモート・キャッシュに前記クエリを送ることと、
前記キャッシュ・ライン用の前記リモート・キャッシュ・ディレクトリを前記無効状態にアップデートすることと、
前記キャッシュ・ライン用の前記リクエスト・キャッシュ・ディレクトリを前記排他状態にアップデートすることと
を含む動作を実施するように構成される、請求項18に記載のシステム。
【請求項20】
ンピュータ・プログラであって、1つまたは複数のプロセッサに、請求項1ないし10のいずれか一項に記載のコンピュータ実行方法を実行させる、コンピュータ・プログラ
【発明の詳細な説明】
【技術分野】
【0001】
本発明は一般にデータ処理に関し、より詳細には、対称型マルチプロセッシング・コンピュータのキャッシュ・メモリ用の複数のコピー・スコーピング・ビットに関する。
【背景技術】
【0002】
現代の高性能コンピュータ・システムは、典型的には、多くの計算ノードを伴うマルチノードの対称型マルチプロセッシング(「SMP」:symmetric multiprocessing)コンピュータとして実装される。SMPは、マルチプロセッサ・コンピュータ・ハードウェア・アーキテクチャであり、2つ以上の、典型的にはさらに多くの、同一のプロセッサが、単一の共有メイン・メモリに接続され、単一のオペレーティング・システムによって制御される。今日、ほとんどのマルチプロセッサ・システムが、SMPアーキテクチャを使用している。マルチコア・プロセッサの場合、SMPアーキテクチャはコアに適用され、コアを別個のプロセッサとして扱う。プロセッサは、バス、クロスバー・スイッチ、メッシュ・ネットワーク、および同様のものを使用して相互接続されてもよい。各計算ノードは、典型的には、いくつかのプロセッサを含み、プロセッサのそれぞれは、少なくともいくつかのローカル・メモリを有してもよく、ローカル・メモリのうちの少なくともいくつかは、キャッシュ・メモリで加速される。キャッシュ・メモリは、各プロセッサにローカルであること、2つ以上のプロセッサにまたがって共有される計算ノードにローカルであること、またはノード全体に共有されることが可能である。これらのアーキテクチャの全てが、別個のキャッシュ間のキャッシュ・コヒーレンスの維持を必要とする。
【0003】
キャッシュ・コヒーレンシを維持することは、SMPアーキテクチャ内で、より多くのキャッシュ・メモリが相互接続されるので、時間のかかるプロセスになるおそれがある。システムの全体を通して、キャッシュ・ラインのコピーが置かれる場所を決定するための、複数のキャッシュ・メモリの問い合わせは、結果として、問い合わせがシステムを通じて伝搬するのを待ち、問い合わせへの応答を待っている間、遅延を延長させるおそれがあり、これにより、システム性能を低下させる。
【発明の概要】
【0004】
本発明の1つまたは複数の実施形態による、コンピュータ実行方法は、キャッシュ・メモリ・システム内のキャッシュ・ラインの共有のスコープを指示するキャッシュ・メモリのマルチコピー・スコープ・ディレクトリ状態にアクセスすることと、マルチコピー・スコープ・ディレクトリ状態に基づいて、キャッシュ・メモリ・システム内のキャッシュ・ラインの共有のスコープを決定することであって、マルチコピー・スコープ・ディレクトリ状態が、キャッシュ・メモリ・システム内の複数のスコープを列挙する、決定することとを含む。共有のスコープは、共有のスコープ内で識別された共有スコープより大きいスコープを有する1つまたは複数のキャッシュ・メモリへのクエリの数を低減させるために使用される。キャッシュ・メモリのマルチコピー・スコープ・ディレクトリ状態は、キャッシュ・メモリ・システム内のキャッシュ・ラインの共有スコープの変化を検出したことに基づいてアップデートされる。利点は、キャッシュ・メモリ・システムにおけるより速いアップデートを含むことができる。
【0005】
本発明の追加または代替の実施形態によれば、より小さいスコープを有する共有のスコープは、キャッシュ・メモリ・システム内により大きいスコープを有する共有のスコープのサブセットであることが可能である。利点は、スコープの範囲のための共有を確立することを含むことができる。
【0006】
本発明の追加または代替の実施形態によれば、共有のスコープは、最小スコープとしてのチップ・スコープ、モジュール・スコープ、ドロワー・スコープ、および、最大スコープとしてのシステム・スコープを含むことができる。利点は、システム構成要素の階層に関連付けられたスコープの確立を含むことができる。
【0007】
本発明の追加または代替の実施形態によれば、動作は、リクエスト・キャッシュがキャッシュ・ラインの共有コピーをリクエストしたと決定したことに基づいて、スヌープ・スコープ(snoop scope)を最小スコープにセットすることと、今までにクエリを送られたことがない現在のスヌープ・スコープ内の1つまたは複数のリモート・キャッシュ・メモリにクエリを送ることと、キャッシュ・ラインの介入マスタ・コピー(intervention master copy)が、現在のスヌープ・スコープのリモート・キャッシュ・メモリ内で見つかったか、または転送状態(forward state)のキャッシュ・ラインに遭遇したかを決定することと、リクエスト・キャッシュにキャッシュ・ラインの共有コピーをインストールすること、およびキャッシュ・ラインの介入マスタ・コピーが、現在のスヌープ・スコープのリモート・キャッシュ・メモリ内で見つかったか、または転送状態のキャッシュ・ラインに遭遇したことに基づいて、キャッシュ・ラインのマスタ・コピーを保持するディレクトリ・エントリの状態をアップデートすることとを含むことができる。利点は、リクエストおよび応答時間を低減させるために、次第に大きくなるスコープを通じてキャッシュ・ラインの共有コピーをリクエストすることを含むことができる。
【0008】
本発明の追加または代替の実施形態によれば、動作は、キャッシュ・メモリからキャッシュ・ラインをフェッチすること、および初期のスヌープ・スコープ内でキャッシュ・ラインが見つからなかった後、共有非マスタ状態のキャッシュ・ラインの1つまたは複数のコピーが見つかったことに基づいて、リクエスト・キャッシュ・ディレクトリをアップデートすることと、キャッシュ・ラインの少なくとも1つのリモート・ソーシング・ディレクトリをアップデートすることとを含むことができる。利点は、より効率的なキャッシュ管理のためにディレクトリの状態を維持することを含むことができる。
【0009】
本発明の追加または代替の実施形態によれば、動作は、リクエスト・キャッシュがキャッシュ・ラインの排他コピーをリクエストしたことに基づいて、リクエスト・キャッシュがキャッシュ・ラインの介入マスタ共有コピーを有するかどうか決定することと、ディレクトリ・スコープを含む最小スヌープ・スコープ内の全てのキャッシュ・メモリ内のキャッシュ・ラインの無効化をリクエストすることと、リクエスト・コア内のキャッシュ・ライン用のリクエスト・キャッシュ・ディレクトリを排他状態にアップデートすることとを含むことができる。利点は、スコープ情報を使用した共有キャッシュ・ラインの状態管理を含むことができる。
【0010】
本発明の追加または代替の実施形態によれば、動作は、リクエスト・キャッシュがキャッシュ・ラインの介入マスタ共有コピーを有していないと決定したことに基づいて、現在のスヌープ・スコープを最小スヌープ・スコープにセットすることと、今までにクエリを送られたことがない現在のスヌープ・スコープ内の1つまたは複数のリモート・キャッシュにクエリを送ることと、現在のスヌープ・スコープ内のキャッシュ・ラインの共有非介入マスタ・コピーに基づいて、リモート・キャッシュ・ディレクトリを無効状態にアップデートすることと、キャッシュ・ラインの介入マスタ・コピーが現在のスヌープ・スコープ内のリモート・キャッシュ内に見つからず、最高スヌープ・スコープに達したと決定したことに基づいて、キャッシュ・ライン用のリクエスト・キャッシュ・ディレクトリを排他状態にアップデートすることと、キャッシュ・ラインの介入マスタ・コピーが現在のスヌープ・スコープ内のリモート・キャッシュ内に見つからず、最高スヌープ・スコープに達していないと決定したことに基づいて、現在のスヌープ・スコープを次に大きいスヌープ・スコープにセットすることとを含むことができる。利点は、キャッシュ状態管理用のスコープに基づく段階的なクエリを含むことができる。
【0011】
本発明の追加または代替の実施形態によれば、動作は、キャッシュ・ライン用のリモート・キャッシュ・ディレクトリを無効状態にアップデートすること、および現在のスヌープ・スコープ内でキャッシュ・ラインの排他コピーを有するリモート・キャッシュを見つけたこと、および現在のスヌープ・スコープ内のリモート・キャッシュ内でキャッシュ・ラインの介入マスタ・コピーが見つからないと決定したことに基づいて、排他状態のキャッシュ・ラインの排他コピーをインストールすることと、キャッシュ・ライン用のリモート・キャッシュ・ディレクトリを無効状態にアップデートすること、および現在のスヌープ・スコープ内でキャッシュ・ラインの介入マスタ共有コピーを有するリモート・キャッシュを見つけたことに基づいて、キャッシュ・ライン用のリクエスト・キャッシュ・ディレクトリを排他状態にアップデートすることであって、リモート・キャッシュ内のディレクトリ・スコープが、現在のスヌープ・スコープより小さいか等しい、アップデートすることとを含むことができる。利点は、複数のキャッシュ内のキャッシュ・ラインの排他コピーを管理することを含むことができる。
【0012】
本発明の追加または代替の実施形態によれば、動作は、キャッシュ・ライン用のリモート・キャッシュ・ディレクトリを無効状態にアップデートすること、およびリモート・キャッシュ内のディレクトリ・スコープが現在のスヌープ・スコープより大きいことに基づいて、今までクエリを送られたことがないリモート・キャッシュ内のディレクトリ・スコープより大きい最小スヌープ・スコープ内でリモート・キャッシュにクエリを送ることと、キャッシュ・ライン用のリモート・キャッシュ・ディレクトリを無効状態にアップデートすることと、キャッシュ・ライン用のリクエスト・キャッシュ・ディレクトリを排他状態にアップデートすることとを含むことができる。利点は、複数のスコープ内のキャッシュ・ディレクトリを管理することを含むことができる。
【0013】
本発明の追加または代替の実施形態によれば、動作は、1次スコープがキャッシュ・ラインの介入マスタ・コピーを含まず、2次スコープがキャッシュ・ラインの介入マスタ・コピーを含み、より大きいスコープ・ブロードキャストが開始されたことを検出したことに基づいて、全システム状態が解決される前にキャッシュ・ラインの介入マスタ・コピーを使用することを含むことができる。利点は、キャッシュ・ラインの介入マスタ・コピーの早期使用を含むことができる。
【0014】
本発明の他の実施形態は、コンピュータ・システムおよびコンピュータ・プログラム製品で上述の方法の特徴を実施する。
【0015】
本発明の技術を通じて、追加の技術的特徴および利益が実現される。本発明の実施形態および態様が本明細書で詳細に説明され、特許請求される主題の一部とみなされる。より良く理解するために、詳細な説明および図面を参照する。
【0016】
本明細書に記載の排他的権利の詳細は、本明細書の結論における特許請求の範囲において具体的に指摘され、明確に特許請求される。本発明の実施形態の前述および他の特徴および利点は、添付の図面と併用して行われる以下の詳細な説明から明らかである。
【図面の簡単な説明】
【0017】
図1】本発明の1つまたは複数の実施形態による、分散型対称型マルチプロセッシング(SMP)システムの図である。
図2】本発明の1つまたは複数の実施形態による、キャッシュ・メモリ用の複数のコピー・スコーピング・ビットを利用する分散型対称型マルチプロセッシング(SMP)システムのブロック図である。
図3】本発明の1つまたは複数の実施形態による、キャッシュ・メモリの複数のスコープのブロック図である。
図4】本発明の1つまたは複数の実施形態による、キャッシュ・メモリ用の複数のコピー・スコーピング・ビットを使用するための方法の流れ図である。
図5】本発明の1つまたは複数の実施形態による、キャッシュ・ラインの共有コピーをリクエストするための方法の流れ図である。
図6A】本発明の1つまたは複数の実施形態による、キャッシュ・ラインの排他コピーをリクエストするための方法の流れ図である。
図6B】本発明の1つまたは複数の実施形態による、キャッシュ・ラインの排他コピーをリクエストするための方法の流れ図である。
図6C】本発明の1つまたは複数の実施形態による、キャッシュ・ラインの排他コピーをリクエストするための方法の流れ図である。
図7】本発明の1つまたは複数の実施形態による、コンピュータ・システムのブロック図である。
【発明を実施するための形態】
【0018】
本明細書に描写された図は例示である。本発明の思想から逸脱しない、本明細書に記載の図または動作に対する多くの変形形態が可能である。例えば、アクションは、異なる順序で実施可能であり、またはアクションは、追加、削除、もしくは修正可能である。また、用語「連結される」およびその変形形態は、2つの要素間に通信経路があることを表し、要素間に介在する要素/接続がない要素間の直接的な接続を示唆しない。これらの変形形態の全ては、本明細書の一部であるとみなされる。
【0019】
本発明の1つまたは複数の実施形態は、SMP環境においてキャッシュ・メモリ用の複数のコピー・スコーピング・ビットを使用するためのシステムおよび方法を提供する。複数のコピー・スコーピング・ビットは、例えばSMP環境における、ラテラル・キャッシュにまたがるキャッシュ・ラインの共有のスコープを定義することができる。本明細書にさらに記載のように、複数のコピー・スコーピング・ビットは、レイテンシを低減させ、キャッシュ・ラインのキャッシュ状態変更の性能を向上させることができる。
【0020】
キャッシュ・ライン管理への伝統的アプローチは、変更-排他-共有-無効(MESI)プロトコルを使用して、いくつかのルールを適用することによって、キャッシュ・ラインを共有状態から排他状態にアップデートすることができる。変更状態は、キャッシュ・ラインが、関連付けられたキャッシュ内だけに存在し、変更されており、したがって、メイン・メモリに格納された値とは異なることを指示することができる。排他状態は、キャッシュ・ラインが、関連付けられたキャッシュ内だけに存在し、変更されておらず、したがって、値がメイン・メモリにマッチすることを指示することができる。共有状態は、キャッシュ・ラインが、1つまたは複数の他のキャッシュに格納されてもよく、変更されておらず、したがって、値がメイン・メモリにマッチすることを指示することができる。無効状態は、キャッシュ・ラインが無効であることを指示することができ、例えば、中身は、使用されないはずであり、上書き可能である。他のプロトコルの変形形態は、転送状態を追加したMESIFプロトコル、所有状態(owned state)を追加したMOESIプロトコル、および他のこのような変形形態を含む。キャッシュが、複数のシステム構成要素にわたって分散された場合、システムのコヒーレント状態を解決するためにシステム・レベルの問い合わせが使用可能である。キャッシュ・ラインを共有状態から排他状態に切り換えるために、システム内のキャッシュ・ラインの全てのコピーが典型的に無効化される。このアプローチは、キャッシュ・コヒーレンシを維持するように正しく機能することができるが、より大きいシステムにおいて性能が非効率になることがある。例えば、システム全体の問い合わせは、典型的には、結果として、バス使用およびインターフェース帯域幅を非効率にする。システム全体の問い合わせは、また、結果として、コントローラ・リソースを消費し、動作のレイテンシを増加させるおそれがある。
【0021】
実施形態は、例えば、キャッシュ・ラインを共有状態から排他状態に切り換えるときの、システム・レベルの問い合わせのインパクトを低減させることができる。マルチビット共有状態を使用してスコープ追跡を拡大することによって、共有のスコープは、システム内で定義可能である。強化されたスコープ情報は、システム・レベルの問い合わせを、低減されたドメイン・スコープに低減させる、システム・コヒーレンス・プロトコルを確立するために使用可能である。例えば、レベル3キャッシュなど、同じレベルのキャッシュが、チップ・スコープ、モジュール・スコープ、およびドロワー・スコープで、システム全体に分散されてもよい。この例では、チップ・スコープ・キャッシュは、同じチップの複数の処理コア間に分散されたチップ・レベルのキャッシュを指すことができる。モジュール・スコープ・キャッシュは、同じカードまたは基板上の2つのチップなど、複数のチップが同じモジュールに接続されたキャッシュをグループ化することができる。ドロワー・スコープ・キャッシュは、カードまたは基板のドロワーなど、複数のモジュールが一緒に接続されたキャッシュを物理的または論理的なグループにグループ化することができ、ドロワー内のカードまたは基板は、モジュールとみなされる。システム・スコープ・キャッシュは、複数のドロワーなど、システム内の全てのキャッシュを一緒にグループ化することができる。実施形態は、スコープ内にキャッシュ・ラインがどの程度近くにあるかに応じて、レイテンシおよびアクセス時間がシステム内で変動する可能性があることを認識している。例えば、同じチップ内のキャッシュ・ラインにアクセスすることは、同じモジュール上の異なるチップ内のキャッシュ・ラインにアクセスするより速くなる可能性がある。同様に、同じモジュール内のキャッシュ・ラインにアクセスすることは、異なるモジュール内のキャッシュ・ラインにアクセスするより速くなる可能性がある。アクセスおよび応答時間は、ドロワー間で増加する可能性がある。
【0022】
問い合わせ時間は、キャッシュ・ラインが最後にどこからフェッチされたかに基づいて、キャッシュ・ラインの共有コピーの近さを指示する多重コピー・スコープ・ディレクトリ・ビットを維持することによって低減可能である。例えば、全てのコピーがローカル・チップを含んでいることを、スコープ・ビットが指示する場合、リクエスタは、チップ・スコープ以外に問い合わせる必要はなく、システムの全問い合わせに関連付けられた遅延を回避する。同様に、全てのコピーがモジュールを含んでいることを、スコープ・ビットが指示する場合、リクエスタは、モジュール・スコープ以外に問い合わせる必要はない。全てのコピーがドロワーを含んでいることを、スコープ・ビットが指示する場合、リクエスタは、ドロワー・スコープ以外に問い合わせる必要はない。キャッシュ・ラインは、システムの中を移動するので、複数のコピー・スコープ状態は、再収集が発生すると同時に確認およびクリーンアップされた最も遠いスコープを反映するために、絶えずアップデートされることが可能である。
【0023】
全てのコピーがローカル・チップに含まれていることを、複数のコピー・スコープ・ビットが指示するとき、システムにあえて乗り出す(venture out into)必要はない。したがって、ファブリック・ブロードキャストが抑制されることが可能である。全てのコピーがローカル・チップに含まれるわけではないことを、複数のコピー・スコープ・ビットが指示する場合、ドロワー全体のブロードキャストが行われることが可能である。全てのコピーがローカル・モジュール内に含まれることをスコープ・ビットが指示する場合、リクエスタは、全てのリモート・チップからの応答を待つ必要がないことにより、この情報を活用することができる。全てのコピーがローカル・モジュール内に含まれるわけではない場合、リクエスタは、ドロワーの応答を待つ。全てのコピーがローカル・ドロワー内に含まれるわけではないことを、ドロワーの応答が指示する場合、例えば複数のドロワーなど、次のレベルをサーチするために、システム全体の問い合わせが行われることが可能である。リクエスタは、キャッシュ・ラインの全てのコピーを見つけ、無効化するために、どの程度までシステムにあえて乗り出すか決定するための、1つのスコーピング・レベルから別のスコーピング・レベルへの情報を構築することができる。
【0024】
複数コピー・ビットの状態、リクエスト・タイプ、および構造上のデザインに応じて、チップ・スコープの失敗時に、ドロワー全体のブロードキャストが先を見越して実施されることが可能である。全てのコピーがローカル・モジュール内に含まれることをビットが指示する場合、リクエスタは、先を見越したドロワーの問い合わせが行われた場合に全てのリモート・チップからの応答を待つ必要がないことにより、この情報を活用することができる。全てのコピーがローカル・モジュール内に含まれるわけではないシナリオでは、リクエスタは、ドロワーの応答を待たなければならない。通常の一貫性フローの一部としてリクエストがシステムをトラバースすると同時に、スコーピング情報が集約される。
【0025】
実施形態では、システムは、チップ・コンテインメントを指示するための状態を含む、マルチコピー・スコープ・ディレクトリ状態を維持することができる。ファブリックは、他のコピーがチップ・スコープの外部にないので、システムにあえて乗り出す必要を抑制することができる。リクエスタがリモート・チップからの応答を待つ必要がないので、動作のレイテンシが低減されることが可能になる。さらに、ローカル・チップの外部のリモート・キャッシュに問い合わせる必要がないので、帯域幅が節約され、コントローラのビジー・タイムが低減されることが可能である。
【0026】
全てのコピーがローカル・チップに含まれていない場合、ドロワー全体のブロードキャストが行われることが可能である。シブリング・チップに問い合わせ、全てのコピーがローカル・モジュール内に含まれることを複数のコピー・スコープ・ビットが指示すると決定すると、リクエスタは、他の全てのリモート・チップからの応答を待つ必要がないことにより、この情報を活用することができる。コントローラおよびバスの利用は、このようなケースでは著しく低減されないこともあるが、動作のレイテンシが低減される可能性がある。全てのコピーがローカル・ドロワーに含まれるわけではないことを、ドロワーの応答からのスコーピング・ビットが指示する場合、マルチドロワー・スコープなどの、次のスコーピング・レベルをサーチするために、システム全体のブロードキャストが行われることが可能である。一部のバス構成は、シブリング・チップの問い合わせをローカル・チップの問い合わせと同時に可能にすることができる。キャッシュ・ラインの全てのコピーがローカル・モジュール内に含まれる場合、さらにあえてシステムに乗り出す必要はない。したがって、ドロワー全体のブロードキャストが抑制されることが可能である。
【0027】
図1は、1つまたは複数の実施形態による、分散型対称型マルチプロセッシング(SMP)システム100(以後「システム100」)を描写している。システム100は、4つの処理単位、すなわち「ドロワー」を含むことができる。各ドロワー102、104、106、108は、この例では、8つの(8)マイクロプロセッサ(CP)チップ(CP0~CP7)を含む。各CPチップは、8つの(8)コアを含むことができる。CPチップ内の各コアは、プライベートL1キャッシュ(命令キャッシュおよびデータ・キャッシュ両方を含む)を含む。これらのプライベートL1キャッシュは、セミプライベートL2キャッシュによって支援される。セミプライベートL2キャッシュは、オンチップの仮想レベル3(L3)キャッシュを提供するために、対話することができる。各ドロワー102、104、106、108は、仮想レベル4(L4)キャッシュを提供する完全接続トポロジを有する8つまでのCPチップを含む。仮想L3および仮想L4キャッシュは、チップ内およびドロワー内の独立した物理的なL2キャッシュをクラスタ化するチップ・キャッシング技術のセットを通じて、統合型共有ビクティム・キャッシュとして機能するように実現可能である。
【0028】
仮想L3/L4キャッシュは、CPチップ内のL2キャッシュのグループ/クラスタ、CPチップのグループ、またはピア・キャッシュからキャッシュ・ラインを立ち退かせるためのドロワー、あるいはその組合せを定義することによって実現可能である。つまり、キャッシュ・ラインは、規定の置換ポリシに従って、L2キャッシュの定義されたグループ/クラスタ内のピアL2に第1のL2から立ち退かされることが可能である。実施形態は、複数のコピー・スコーピング・ビットを使用して、仮想キャッシュまたは物理キャッシュを利用することができる。
【0029】
図2は、本発明の1つまたは複数の実施形態による、キャッシュ・メモリ・システム201を有する分散型対称型マルチプロセッシング(SMP)システム200のブロック図を描写している。システム200は、4つのドロワー240-0、240-1、240-2、240-3を含む。各ドロワーは、ドロワー240-0に関して記載されたものと同じ構成要素を含む。ドロワー240-0は、8つのCPチップ202-0~202-7を含む。各CPチップ202は、8つのコア204を含み、各コア204は、プライベート・レベル1(L1)キャッシュ206を有する。各コア204は、セミプライベート・レベル2(L2)キャッシュ208も利用する。キャッシュ・メモリ・システム201は、L1、L2、L3、L4などのレベルの階層を通じて、およびドロワー240-0、240-1、240-2、240-3などの物理的なロケーションにまたがって分散された、キャッシュ・メモリを含むことができる。
【0030】
ピアのL2キャッシュ(「ラテラル・キャッシュ」と呼ばれることもある)は、キャッシュ・クラスタ214に分割可能である。各ドロワー240は、キャッシュ・ライン用に利用される1つまたは複数のキャッシュ・クラスタ214を含むことができる。例示的な例は、キャッシュ・クラスタ214の1つの構成を示しているが、1つまたは複数の実施形態では、キャッシュ・クラスタ214は、グループ/クラスタ内のL2キャッシュをドロワー全体に含む任意のタイプの構成で、任意の数のL2キャッシュを含むことができる。キャッシュは、同じドロワー240-0内、または他のドロワー240-1、240-2、240-3内で、クラスタ化可能である。キャッシュ・ラインは、1つまたは複数の処理コア204によって、フェッチまたはアップデート可能である。キャッシュ管理ポリシは、メイン・メモリ220に対するキャッシュ・クラスタ214間のキャッシュの中身および状態を管理するためのキャッシュ・コントローラ212を使用して、実現可能である。CPチップ202上のラテラル・キャッシュ208に対する置換ポリシは、優先的であることが可能である。この例ではCPチップ202上に8つあるので、CPチップ202は、2つ以上の定義済みのキャッシュ・クラスタ214を有することができる。
【0031】
実施形態では、仮想キャッシュとして実装されるか、物理キャッシュとして実装されるかに関わらず、キャッシュ・クラスタ214内のL2キャッシュ208内、またはL3もしくはL4キャッシュ内など、非プライベートな1つまたは複数のキャッシュ・レベルの共有キャッシュ・ラインを管理するために、複数のコピー・スコーピング・ビットが使用されることが可能である。キャッシュ・コントローラ212は、システム200全体の複数のコピー・スコーピング・ビットの使用を管理することができる。
【0032】
図3は、1つまたは複数の実施形態による、キャッシュ・メモリの複数のスコープ300のブロック図を描写している。図3は、ドロワー・スコープ302内の複数のコア(コア0からコア63まで)のL3キャッシュのためのキャッシュ・スコープの例を例示している。図3の例では、モジュール・スコープ304は、ドロワー・スコープ302より小さく、複数のチップ・スコープ306を含んでいる。コア0、コア1、コア2、コア3、コア4、コア5、コア6、コア7のL3キャッシュは全て、同じチップ・スコープ306内にあることが可能であり、その一方で、コア8、コア9、コア10、コア11、コア12、コア13、コア14、およびコア15のL3キャッシュは、異なるチップ・スコープ306内にあるが、コア0~コア7のL3キャッシュと同じモジュール・スコープ304内にある。コア16~コア63のL3キャッシュは、コア0~コア15とは異なるチップ・スコープ306およびモジュール・スコープ304内にある。例えば、コア0~コア7のL3キャッシュを含むチップ・スコープ306は、図2のCPチップ202-0に対応させることができ、コア8~コア15のL3キャッシュは、図2のCPチップ202-1に対応させることができ、CPチップ202-0および202-1は、同じモジュール・スコープ304内にある。図2のキャッシュ・コントローラ212は、各キャッシュを管理するためのキャッシュ・ディレクトリ・ビットをセットおよびチェックすることができる。
【0033】
図3の例では、コア0のL3キャッシュは、キャッシュ・ラインの共有コピーをリクエストするリクエスト・キャッシュであることが可能である。キャッシュ・ラインのコピーは、例えば、コア6、コア13、およびコア33のL3キャッシュ内で、共有されてもよい。コア0に対して、コア6のL3キャッシュは、同じチップ・スコープ306内のキャッシュ・メモリであり、コア13のL3キャッシュは、同じモジュール・スコープ304内のリモート・キャッシュ・メモリであり、コア33のL3キャッシュは、同じドロワー・スコープ302内のリモート・キャッシュ・メモリである。コア0のL3キャッシュのキャッシュ・ラインの唯一の共有コピーがコア6内にあった場合、システム全体またはドロワー全体のキャッシュ・チェックが回避されるはずなので、応答時間が改善されるはずである。例えばコア13のL3キャッシュのための、共有キャッシュ・ラインの最大スコープが、モジュール・スコープ304であった場合、システム全体またはドロワー全体のチェックを実施するのではなく、モジュール・スコープ304内でのみチェックすることによって、応答時間が改善される可能性がある。ドロワー・スコープ302が最も広いスコープである場合、図2のドロワー240-1、240-2、240-3に対するものなど、システム全体のチェックを回避することによって、応答時間が改善されることがある。
【0034】
図3の例では、コア0のL3キャッシュは、コア0のL3キャッシュ内のキャッシュ・ライン311の共有のスコープを指示するマルチコピー・スコープ・ディレクトリ状態310を有する。各キャッシュ・ラインは、図2のメイン・メモリ220など、別のメモリ・ソースからのデータのコピーを含む複数の関連付けられたキャッシュ・エントリを含むことができる。各キャッシュ用のディレクトリは、ステータスを定義する状態情報、および各キャッシュ・ラインの共有のスコープを含むことができる。同様に、コア6のL3キャッシュは、コア6のL3キャッシュ内のキャッシュ・ライン313の共有のスコープを指示するマルチコピー・スコープ・ディレクトリ状態312を有する。コア13のL3キャッシュは、コア13のL3キャッシュ内のキャッシュ・ライン315の共有のスコープを指示するマルチコピー・スコープ・ディレクトリ状態314を有する。コア33のL3キャッシュは、コア33のL3キャッシュ内のキャッシュ・ライン317の共有のスコープを指示するマルチコピー・スコープ・ディレクトリ状態316を有する。L3キャッシュに格納された、各関連付けられたキャッシュ・ライン311、313、315、317に対する、マルチコピー・スコープ・ディレクトリ状態310、312、314、316のビットでエンコード可能なキャッシュ状態の例が、テーブル1に例示されており、マルチコピー・スコープ・ディレクトリ状態310、312、314、316は、図2のキャッシュ・メモリ・システム201のL3キャッシュなど、キャッシュ・メモリ・システムを有する複数のスコープを列挙することができる。
【0035】
【表1】
【0036】
テーブル1では、排他状態は、介入マスタを意味し、最小ディレクトリ・スコープとして扱われる。より小さいスコープを有する共有のスコープは、キャッシュ・メモリ・システム内により大きいスコープを有する共有のスコープのサブセットであり、例えば、スコープ階層を形成する。この例では、チップ・スコープは、最小共有スコープであり、システム・スコープは、最大共有スコープである。キャッシュ内のライン毎に、キャッシュ・ディレクトリ内にディレクトリ・エントリがある。システムに含まれるキャッシュ毎に、キャッシュ・ディレクトリがある。一部のシステムは、追跡のためのキャッシュレス・ディレクトリを有してもよい。実施形態は、ディレクトリ・エントリを使用することができ、キャッシュレス・ディレクトリを有するシステムにおいて作動させることができる。
【0037】
チップ、モジュール、ドロワー、およびシステム・スコープの使用は、例示的な実施形態である。これらは、複数のスコープへのキャッシュの任意の階層型グループ化を表すことができる。
【0038】
説明のために、スヌープ・スコープは、スヌープ可能なスコープである。例えば、チップ、ドロワー、およびシステム・スコープにおいてのみスヌープ可能であってもよい。マルチコピー・スコープ(またはディレクトリ・スコープ)は、ディレクトリで表現可能なスコープである。これは、スヌープ・スコープ、またはスヌープ・スコープのサブセットでもよい。例えば、モジュール・スコープは、スヌープ・スコープであるドロワー・スコープのサブセットであることが可能である。
【0039】
介入マスタは、システム内の、またはMESIFプロトコルを使用する場合、転送状態のキャッシュ・ラインに遭遇した際の、キャッシュ・ラインの最も新しくキャッシュされたコピーである。これは、1つまたは複数コピーが存在するときの、所与のキャッシュされたラインのための、システムにおけるコヒーレンシの最高点を形成する。したがって、非介入マスタ・ラインは、古くなったディレクトリ状態を有しているとみなされる。
【0040】
キャッシュ・ライン・リクエストは、様々なソースから受け取られてもよい。例えば、キャッシュ・ラインは、(例えば、簡素なディレクトリ状態を使用するキャッシュ・チップ・スコープに専用の)チップ・スコープを有するメモリから第1のキャッシュに入ることができる。さらに、キャッシュ・ラインは、チップ・スコープ内に残っているか、2つのキャッシュによって共有される、スコープ内の別のキャッシュによってフェッチされることが可能である。キャッシュ・ラインは、他のキャッシュが無効化された排他的な意図でチップ・スコープ内の別のキャッシュによってフェッチされることが可能であり、リクエスト・キャッシュは、チップ・スコープを有する排他的なキャッシュ・ラインをインストールすることができる。
【0041】
別の例として、キャッシュ・ラインは、モジュール・スコープになるモジュール内の別のキャッシュによってフェッチされることが可能であり、モジュール・スコープは、ソース・キャッシュおよび宛先キャッシュ両方に対して指示されることが可能である。キャッシュ・ラインは、モジュール内のさらに別のキャッシュによって排他的な意図でフェッチされ、他のコピーが無効化された排他的なチップ・スコープに戻されることが可能である。
【0042】
利益は、チップ・スコープ状態を返すチップ・ディレクトリ・ルックアップにより、フェッチスヌープ・スコープをチップ内に限定することを含むことができる。他のタイプのシステムでは、これは、結果として最大スコープ・ブロードキャストになり、全てのリモート・コピーが無効化されるまで、リクエスタへの応答を遅延させてもよい。実施形態は、リクエスト・プロセッサによって経験されるレイテンシを低減させるだけでなく、最大スコープ・ブロードキャストおよび全ての関連付けられたパケットも取り除くことができ、システム内の他のリクエストへのシステム・リソース可用性を改善する。さらに、トラフィックの低減が全システム・レベルで観察される代わりに、システムの部分的なサブセットに対するトラフィックの低減が観察されることが可能である。
【0043】
図4は、本発明の1つまたは複数の実施形態による、キャッシュ・メモリ用の複数のコピー・スコーピング・ビットを使用するための方法400の流れ図を描写している。方法400の少なくとも一部分は、例えば、図7に示されているプロセッサ701によって、実行可能である。さらに、方法400は、図1および図2のシステム100、200で実行可能である。例えば、方法400は、図2のキャッシュ・コントローラ212によって実施可能である。方法400は、ブロック402に示されているように、キャッシュ・メモリ・システム内のキャッシュ・ラインの共有のスコープを指示するキャッシュ・メモリのマルチコピー・スコープ・ディレクトリ状態にアクセスすることを含む。スコープ共有は、図3のキャッシュ・ライン311、313、315、317など、図3の複数のスコープ300の例に描写されたように、様々なレベルでチェック可能である。ブロック404において、方法400は、マルチコピー・スコープ・ディレクトリ状態に基づいて、キャッシュ・メモリ・システム内のキャッシュ・ラインの共有のスコープを決定することを含み、マルチコピー・スコープ・ディレクトリ状態が、キャッシュ・メモリ・システム内の複数のスコープを列挙する。ブロック406において、方法400は、共有のスコープを使用して、共有のスコープ内で識別された共有スコープより大きいスコープを有する1つまたは複数のキャッシュ・メモリへのクエリの数を低減させることを含む。ブロック408において、方法400は、キャッシュ・メモリ・システム内のキャッシュ・ラインの共有スコープの変化を検出したことに基づいて、キャッシュ・メモリのマルチコピー・スコープ・ディレクトリ状態をアップデートすることを含む。
【0044】
追加のプロセスまたはステップあるいはその両方が、方法400にさらに含まれてもよい。図4に描写されたプロセスが例を表していること、および、本開示の範囲から逸脱することなく、他のプロセスが追加されてもよく、または、既存のプロセスが、除去、修正、もしくは再配置されてもよいことを理解されたい。
【0045】
図5は、本発明の1つまたは複数の実施形態による、キャッシュ・ラインの共有コピーをリクエストするための方法500の流れ図を描写している。方法500は、例えば、図2のキャッシュ・コントローラ212によって実施可能である。
【0046】
図3のコア0のL3キャッシュ内のキャッシュ・ラインなどのラインの共有コピーを、リクエスト・キャッシュがリクエストするとき、ブロック502において、現在のスヌープ・スコープが、最小スヌープ・スコープにセットされる。ブロック504において、今までにクエリを送られたことがない現在のスヌープ・スコープ内のリモート・キャッシュにクエリが送られる。ブロック506において、キャッシュ・ラインの介入マスタ・コピーが、現在のスヌープ・スコープのリモート・キャッシュ内で見つかったか、または転送状態のキャッシュ・ラインに遭遇したかを決定するためのチェックが実施される。
【0047】
ブロック506において、介入マスタ・コピーが、現在のスヌープ・スコープ内のリモート・キャッシュ内で見つかったか、または転送状態のキャッシュ・ラインが遭遇された場合、ブロック508において、リクエスト・キャッシュにキャッシュ・ラインの共有コピーがインストールされる。キャッシュ・ラインのリクエスト・コピー用のディレクトリ・エントリは、介入マスタ・コピーになるようにアップデート可能であり、キャッシュ・ラインのリモート・キャッシュ・コピー用のディレクトリ・エントリは、共有非マスタ・コピーとしてアップデート可能である。ブロック510において、キャッシュ・ラインのマスタ・コピーを保持するディレクトリ・エントリの状態は、リモート・キャッシュ・ディレクトリ内で見つかったディレクトリ・スコープのより大きいスコープであるディレクトリ・スコープ、または、リクエスト・キャッシュおよびリモート・キャッシュ両方を含む最小ディレクトリ・スコープを反映するようにアップデート可能である。
【0048】
ブロック506において、介入マスタ・コピーが現在のスヌープ・スコープ内で見つからなかった場合、ブロック512において、これが最高スヌープ・スコープであるかどうか決定するためのチェックが実施される。最高スヌープ・スコープである場合、ブロック514において、メモリからキャッシュ・ラインがフェッチされる。必要に応じて、フェッチに応答してシステム内のキャッシュ・メモリからの応答を待つことが実施可能である。共有非マスタ状態のいずれかのキャッシュが見つかった場合、ブロック516において、キャッシュ・ライン用のリクエスト・キャッシュ・ディレクトリは、リクエスト・コア、および共有非マスタ状態の全ての見つかったコピーを含む、最低スコープ・ディレクトリ状態で共有される介入マスタにアップデート可能である。そうでない場合、リクエスト・キャッシュ・ディレクトリは、キャッシュ・ラインの排他状態にアップデート可能である。したがって、初期のスヌープ・スコープがキャッシュ・ラインを見つけなかった場合、キャッシュ・ラインが次のスヌープ・スコープ内で見つかった場合、ディレクトリ状態は、適宜アップデートされる。ディレクトリ・アップデートは、キャッシュ・ラインの少なくとも1つのリモート・ソーシング・ディレクトリをアップデートすることを含むことができる。
【0049】
ブロック512において、これが最高スヌープ・スコープでない場合、ブロック518において、現在のスヌープ・スコープは、次に大きいスヌープ・スコープにセットされ、フローは、ブロック504に戻る。
【0050】
図6A図6B図6Cは、1つまたは複数の実施形態による、キャッシュ・ラインの排他コピーをリクエストするための方法600の流れ図をまとめて描写している。方法600は、例えば、図2のキャッシュ・コントローラ212によって実施可能である。結合されたプロセス・フローとして描写されているが、本発明の実施形態では、方法600の一部が除去、再分割、結合、または拡大されることも可能である。
【0051】
リクエスト・キャッシュがラインの排他コピーをリクエストするとき、ブロック602において、リクエスト・キャッシュがキャッシュ・ラインの介入マスタ共有コピーを有するかどうか決定するためのチェックが実施されることが可能である。例えば、図3のコア0のL3キャッシュが、リクエスト・キャッシュであることが可能である。リクエスト・キャッシュがキャッシュ・ラインの介入マスタ共有コピーを有する場合、ブロック604において、ディレクトリ・スコープを含む最小スヌープ・スコープ内の全てのキャッシュ内のキャッシュ・ラインの無効化がリクエストされることが可能である。キャッシュ・ラインが無効化されたことを、ディレクトリ・スコープ内の全てのキャッシュが指示するまで、待つことが実施されてもよい。ブロック606において、リクエスト・コアにおけるキャッシュ・ライン用のディレクトリが排他状態にアップデートされる。
【0052】
ブロック602において、リクエスト・キャッシュが、キャッシュ・ラインの介入マスタ共有コピーを有していない場合、ブロック608において、現在のスヌープ・スコープが、最小スヌープ・スコープにセットされる。ブロック610において、今までにクエリを送られたことがない現在のスヌープ・スコープ内のリモート・キャッシュにクエリが送られる。現在のスヌープ・スコープ内でキャッシュ・ラインの共有非介入マスタ・コピーが見つかったリモート・キャッシュ毎に、ブロック612において、リモート・キャッシュのディレクトリが無効状態にセットされることが可能である。ブロック614において、キャッシュ・ラインの介入マスタ・コピーが現在のスヌープ・スコープ内のリモート・キャッシュ内で見つかった場合、方法600は、ブロック616~622のうちの1つまたは複数を実施可能である。
【0053】
ブロック616において、キャッシュ・ライン用のリモート・キャッシュ・ディレクトリが無効状態にアップデートされ、現在のスヌープ・スコープ内にキャッシュ・ラインの排他コピーを有するリモート・キャッシュを見つけたことに基づいて、排他状態のリクエスト・キャッシュ・ディレクトリにキャッシュ・ラインの排他コピーがインストールされる。
【0054】
ブロック618において、キャッシュ・ライン用のリモート・キャッシュ・ディレクトリが無効状態にアップデートされることが可能であり、現在のスヌープ・スコープ内にキャッシュ・ラインの介入マスタ共有コピーを有するリモート・キャッシュを見つけたことに基づいて、キャッシュ・ライン用のリクエスト・キャッシュ・ディレクトリが排他状態にアップデートされ、リモート・キャッシュ内のディレクトリ・スコープは、現在のスヌープ・スコープより小さいか等しい。例えば、リモート・キャッシュ内のディレクトリ・スコープで指示されたスコープ内の全てのキャッシュが問い合わされるまで、待つことが実施される。別の可能性として、リモート・キャッシュおよびリクエスト・キャッシュ両方を含む最小ディレクトリ・スコープ内の全てのキャッシュが問い合わされるまで、待つことが実施されてもよい。
【0055】
ブロック620において、キャッシュ・ライン用のリモート・キャッシュ・ディレクトリが無効状態にアップデート可能であり、リモート・キャッシュ内のディレクトリ・スコープが現在のスヌープ・スコープより大きいことに基づいて、今までにクエリを送られたことがないリモート・キャッシュ内のディレクトリ・スコープより大きい最小スヌープ・スコープ内のリモート・キャッシュにクエリが送られることが可能である。
【0056】
ブロック622において、リモート・キャッシュ内のディレクトリ・スコープより大きい最小スヌープ・スコープ内でキャッシュ・ラインの共有非介入マスタ・コピーが見つかったリモート・キャッシュ毎に、キャッシュ・ライン用のリモート・キャッシュ・ディレクトリが無効状態にアップデートされ、キャッシュ・ライン用のリクエスト・キャッシュ・ディレクトリが排他状態にアップデートされる。リモート・キャッシュ内のディレクトリ・スコープ内の全てのキャッシュが問い合わされるまで、待つことを実施されることが可能である。
【0057】
ブロック614において、現在のスヌープ・スコープ内のリモート・キャッシュ内で介入マスタ・コピーが見つからなかった場合、ブロック624において、最高スヌープ・スコープに達したか決定される。最高スヌープ・スコープに達した場合、ブロック626において、キャッシュ・ライン用のリクエスト・キャッシュ・ディレクトリが排他状態にアップデートされる。最高スヌープ・スコープに達していない場合、ブロック628において、現在のスヌープ・スコープが次に大きいスヌープ・スコープにセットされ、プロセス・フローは、ブロック610に戻る。キャッシュ・ラインの介入マスタ・コピーは、1次スコープがキャッシュ・ラインの介入マスタ・コピーを含まず、2次スコープがキャッシュ・ラインの介入マスタ・コピーを含み、より大きいスコープ・ブロードキャストが開始されたことを検出したことに基づいて、全システム状態が解決される前に使用可能である。
【0058】
ここで図7に移ると、一実施形態によるコンピュータ・システム700が全体的に示されている。コンピュータ・システム700は、本明細書に記載のような、様々な通信技術を利用した、任意の数のコンピューティング・デバイスおよびネットワーク、ならびにその組合せを備える、または採用する、あるいはその両方の、電子的なコンピュータ・フレームワークであることが可能である。コンピュータ・システム700は、容易に拡大縮小可能であること、拡張可能であること、およびモジュール方式であることが可能であり、異なるサービスに変更すること、または他とは無関係のいくつかの特徴を再構成することができる。コンピュータ・システム700は、例えば、サーバ、デスクトップ・コンピュータ、ラップトップ・コンピュータ、タブレット・コンピュータ、またはスマートフォンでもよい。一部の例では、コンピュータ・システム700は、クラウド・コンピューティング・ノードでもよい。コンピュータ・システム700は、コンピュータ・システムによって実行される、プログラム・モジュールなど、コンピュータ・システム実行可能命令の一般的な文脈で説明されてもよい。一般に、プログラム・モジュールは、特定のタスクを実施するか、特定の抽象データ型を実行する、ルーチン、プログラム、オブジェクト、コンポーネント、ロジック、データ構造などを含んでもよい。コンピュータ・システム700は、通信ネットワークを通じてリンクされたリモート処理デバイスによってタスクが実施される分散型クラウド・コンピューティング環境で実践されてもよい。分散型クラウド・コンピューティング環境では、プログラム・モジュールは、メモリ・ストレージ・デバイスを含むローカルおよびリモート両方のコンピュータ・システム・ストレージ媒体に置かれてもよい。
【0059】
図7に示されているように、コンピュータ・システム700には、1つまたは複数の中央処理ユニット(CPU:central processing unit)701a、701b、701c等(まとめてまたは全体的にプロセッサ701と呼ばれる)がある。プロセッサ701は、シングルコア・プロセッサ、マルチコア・プロセッサ、コンピューティング・クラスタ、または任意の数の他の構成であることが可能である。プロセッサ701は、処理回路とも呼ばれ、システム・バス702を介してシステム・メモリ703および様々な他の構成要素に連結される。システム・メモリ703は、リード・オンリ・メモリ(ROM:read only memory)704およびランダム・アクセス・メモリ(RAM:random access memory)705を含むことができる。ROM704は、システム・バス702に連結され、コンピュータ・システム700の特定の基本機能を制御する、基本入出力システム(BIOS)を有してもよい。RAMは、プロセッサ701による使用のためにシステム・バス702に連結されたリード・ライト・メモリである。システム・メモリ703は、動作中に前記命令の動作のための一時的なメモリ空間を提供する。システム・メモリ703は、ランダム・アクセス・メモリ(RAM)、リード・オンリ・メモリ、フラッシュ・メモリ、または任意の他の適切なメモリ・システムを含むことができる。
【0060】
コンピュータ・システム700は、システム・バス702に連結された入出力(I/O)アダプタ706および通信アダプタ707を備える。I/Oアダプタ706は、ハードディスク708、または任意の他の類似の構成要素、あるいはその両方と通信するスモール・コンピュータ・システム・インターフェース(SCSI)アダプタでもよい。I/Oアダプタ706およびハードディスク708は、本明細書ではまとめて、マス・ストレージ710と呼ばれる。
【0061】
コンピュータ・システム700で実行するためのソフトウェア711は、マス・ストレージ710に格納されてもよい。マス・ストレージ710は、プロセッサ701によって可読の有形ストレージ媒体の例であり、ソフトウェア711は、様々な図を参照しながら本明細書で後述されるように、コンピュータ・システム700を動作させるためのプロセッサ701による実行用の命令として格納される。コンピュータ・プログラム製品の例、およびこのような命令の実行は、本明細書でより詳細に論じられる。通信アダプタ707は、システム・バス702をネットワーク712と相互接続し、ネットワーク712は外部ネットワークでもよく、コンピュータ・システム700が他のこのようなシステムと通信することを可能にする。1つの実施形態では、システム・メモリ703およびマス・ストレージ710の一部分が、図7に示されている様々な構成要素の機能を協調させるためのオペレーティング・システムをまとめて格納し、オペレーティング・システムは、IBM Corporationのz/OSまたはAIXオペレーティング・システムなど、任意の適切なオペレーティング・システムでもよい。z/OSおよびAIXはIBM Corporationの商標です。
【0062】
追加の入出力デバイスが、ディスプレイ・アダプタ715およびインターフェース・アダプタ716を介してシステム・バス702に接続されているように示されている。1つの実施形態では、アダプタ706、707、715、および716は、中間のバス・ブリッジ(図示せず)を介してシステム・バス702に接続された1つまたは複数のI/Oバスに接続されてもよい。ディスプレイ719(例えば、スクリーンまたはディスプレイ・モニタ)は、ディスプレイ・アダプタ715によってシステム・バス702に接続され、ディスプレイ・アダプタ715は、グラフィックス負荷の大きなアプリケーションの性能を改善するためのグラフィックス・コントローラ、およびビデオ・コントローラを含んでもよい。キーボード721、マウス722、スピーカ723等は、インターフェース・アダプタ716を介してシステム・バス702に相互接続可能であり、インターフェース・アダプタ716は、例えば、複数のデバイス・アダプタを単一の集積回路に統合したスーパーI/Oチップを含んでもよい。ハードディスク・コントローラ、ネットワーク・アダプタ、およびグラフィックス・アダプタなどの周辺デバイスを接続するのに適切なI/Oバスは、典型的には、ペリフェラル・コンポーネント・インターコネクト(PCI)などの、共通プロトコルを含む。したがって、図7に構成されたように、コンピュータ・システム700は、プロセッサ701の形の処理能力と、システム・メモリ703およびマス・ストレージ710を含むストレージ能力と、キーボード721およびマウス722などの入力手段と、スピーカ723およびディスプレイ719を含む出力能力とを含む。
【0063】
一部の実施形態では、通信アダプタ707は、特にインターネット・スモール・コンピュータ・システム・インターフェースなどの、任意の適切なインターフェースまたはプロトコルを使用してデータを伝送することができる。ネットワーク712は、特にセルラー・ネットワーク、無線ネットワーク、ワイド・エリア・ネットワーク(WAN)、ローカル・エリア・ネットワーク(LAN)、またはインターネットでもよい。外部コンピューティング・デバイスが、ネットワーク712を通じてコンピュータ・システム700に接続してもよい。一部の例では、外部コンピューティング・デバイスは、外部ウェブサーバまたはクラウド・コンピューティング・ノードでもよい。
【0064】
図7のブロック図は、コンピュータ・システム700が、図7に示されている構成要素の全てを含むべきであることを指示することを意図するものではないことを理解されたい。むしろ、コンピュータ・システム700は、図7に例示されていない任意の適切なより少ないまたは追加の構成要素(例えば、追加のメモリ構成要素、組み込み型コントローラ、モジュール、追加のネットワーク・インターフェース等)を含むことができる。さらに、コンピュータ・システム700に関する本明細書に記載の実施形態は、任意の適切なロジックで実行されてもよく、本明細書で呼ばれるようなロジックは、様々な実施形態における、任意の適切なハードウェア(例えば、特にプロセッサ、組み込み型コントローラ、もしくは特定用途向け集積回路)、ソフトウェア(例えば、特にアプリケーション)、ファームウェア、または、ハードウェア、ソフトウェア、およびファームウェアの任意の適切な組合せを含むことができる。
【0065】
技術的効果は、コンピュータ化されたシステム性能の改善を含むことができる。例えば、複数のコピー・スコーピング・ビットの使用を通じて、システム内の共有のスコープを知ることによって、システムは、キャッシュ・コヒーレンシを維持するために、リクエスタがどの程度、あえて乗り出す必要があるかを動的に決定することができる。これは、共有から排他へのライン・コンバージョンのためのイベント・レイテンシの解像度を低減させることができ、したがって、システムにおけるこれらの動作の全体性能を改善する。システム全体の問い合わせ、およびシステム全体の応答を待つことを回避することによって、バス使用量およびインターフェース帯域幅を改善することができ、キャッシュ・ラインの複数のコピーを無効化するときの、コントローラのビジー・タイムを低減させることができる。
【0066】
本発明の様々な実施形態は、関連する図面を参照しながら本明細書で説明される。本発明の代替実施形態は、本発明の範囲から逸脱することなく考案されることが可能である。以下の説明および図面において、要素の間の様々な接続および位置関係(例えば、上、下、隣、等)が説明される。これらの接続または位置関係あるいはその両方は、別途指定のない限り、直接的または間接的であることが可能であり、本発明は、この点に関して、限定することを意図するものではない。したがって、エンティティの連結は、直接的または間接的連結を指すことができ、エンティティ間の位置関係は、直接的または間接的位置関係であることが可能である。その上、本明細書に記載の様々なタスクおよびプロセスのステップは、本明細書で詳細に記載されていない追加のステップまたは機能を有する、より包括的な手順またはプロセスに組み込まれることが可能である。
【0067】
本明細書に記載の方法のうちの1つまたは複数は、データ信号に基づいて論理機能を実行するための論理ゲートを有する個別の論理回路、適切な組合せ論理ゲートを有する特定用途向け集積回路(ASIC)、プログラム可能ゲート・アレイ(PGA)、フィールド・プログラマブル・ゲート・アレイ(FPGA)等、当技術分野でそれぞれよく知られている任意の技術または技術の組合せで、実行可能である。
【0068】
簡潔さのために、本発明の態様の実施および使用に関係のある従来の技術は、本明細書で詳細に説明されることもされないこともある。特に、本明細書に記載の様々な技術的特徴を実施するためのコンピューティング・システムおよび特定のコンピュータ・プログラムの様々な態様が、よく知られている。したがって、簡潔さのために、多くの従来の実装形態の詳細は、本明細書では簡潔に言及されるだけであるか、あるいは、よく知られたシステムもしくはプロセスまたはその両方の詳細を提供することなく全面的に省略される。
【0069】
一部の実施形態では、様々な機能または行為は、所与のロケーションで、または、1つもしくは複数の装置もしくはシステムの動作と共に、あるいはその両方で、実施可能である。一部の実施形態では、所与の機能または行為の一部は、第1のデバイスまたはロケーションにおいて実施可能であり、残りの機能または行為は、1つまたは複数の追加のデバイスまたはロケーションにおいて実施可能である。
【0070】
本明細書で使用される専門用語は、特定の実施形態を説明するためのものにすぎず、限定することを意図するものではない。本明細書で使用されるように、単数形「a」、「an」、および「the」は、別途文脈が明白に指示しない限り、複数形も同様に含むことを意図している。用語「備える(comprises)」または「備える(comprising)」あるいはその両方は、本明細書で使用されるとき、述べられた特徴、整数、ステップ、動作、要素、または構成要素、あるいはその組合せの存在を指定するが、1つまたは複数の他の特徴、整数、ステップ、動作、要素構成要素、またはそのグループ、あるいはその組合せの存在または追加を排除しないことがさらに理解されよう。
【0071】
下記の特許請求の範囲における全ての手段またはステップおよび機能要素の対応する構造、材料、行為、および同等物は、具体的に特許請求されるような他の請求要素と組み合わせて機能を実施するためのいずれかの構造、材料、または行為を含むことを意図している。本開示は、例示および説明のために提示されてきたが、網羅的であること、または開示の形式に限定されることを意図するものではない。本開示の範囲および思想から逸脱しない多くの変更形態および変形形態が当業者には明らかであろう。実施形態は、本開示の原理および実用的な用途を最も良く説明するために、および、想定される特定の使用に適するような様々な修正を伴う様々な実施形態についての開示を、他の当業者が理解できるようにするために、選ばれ、記載された。
【0072】
本明細書で描写された図は例示である。本開示の思想から逸脱しない、記載された図またはステップ(もしくは動作)に対する多くの変形形態が存在する可能性がある。例えば、アクションは、異なる順序で実施可能であるか、またはアクションは、追加、削除、もしくは修正可能である。また、用語「連結される」は、2つの要素間の信号経路を有することを表し、介在要素/接続が間にない要素間の直接接続を示唆していない。これらの変形形態の全ては、本開示の一部であるとみなされる。
【0073】
以下の定義および省略形は、特許請求の範囲および本明細書の解釈のために使用されることになる。本明細書で使用されるように、用語「備える(comprises)」、「備える(comprising)」、「含む(includes)」、「含む(including)」、「有する(has)」、「有する(having)」、「収める(contains)」、もしくは「収める(containing)」、またはこれらの他の任意の変形形態は、非排他的な包含を含めることを意図している。例えば、要素のリストを含む構造、混合、プロセス、方法、項目、または装置は、必ずしもこれらの要素にだけ限定されるのではなく、明確に列挙されていない、またはこのような構成物、混合、プロセス、方法、項目、もしくは装置に内在しない他の要素を含むことができる。
【0074】
追加として、用語「例示的」は、「例、事例、または例示として機能すること」を意味するために本明細書で使用される。「例示的」として本明細書で説明される任意の実施形態またはデザインは、他の実施形態またはデザインより好ましいまたは有利なものとして必ずしも解釈されるべきではない。用語「少なくとも1つ」および「1つまたは複数」は、1以上の任意の整数、すなわち1、2、3、4等を含むものと理解されている。用語「複数」は、2以上の任意の整数、すなわち2、3、4、5等を含むものと理解されている。用語「接続」は、間接的「接続」および直接的「接続」両方を含むことができる。
【0075】
用語「約(about)」、「実質的に(substantially)」、「およそ(approximately)」、およびこれらの変形形態は、本出願を提出したときに利用可能な機器に基づく特定の量の測定値に関連付けられたある程度の誤差を含むことを意図している。例えば、「約(about)」は、±8%もしくは5%の範囲、または所与の値の2%を含むことができる。
【0076】
本発明は、統合の任意の可能な技術的詳細レベルにおけるシステム、方法、またはコンピュータ・プログラム製品、あるいはその組合せでもよい。コンピュータ・プログラム製品は、本発明の態様をプロセッサに実行させるためのコンピュータ可読プログラム命令を有するコンピュータ可読ストレージ媒体(または複数の媒体)を含んでもよい。
【0077】
コンピュータ可読ストレージ媒体は、命令実行デバイスによる使用のための命令を保持および格納可能な有形デバイスであることが可能である。コンピュータ可読ストレージ媒体は、例えば、電子ストレージ・デバイス、磁気ストレージ・デバイス、光ストレージ・デバイス、電磁気ストレージ・デバイス、半導体ストレージ・デバイス、または前述の任意の適切な組合せでもよいがこれらに限定されない。コンピュータ可読ストレージ媒体のより具体的な例の完全に網羅されていないリストは、ポータブル・コンピュータ・ディスケット、ハードディスク、ランダム・アクセス・メモリ(RAM)、リード・オンリ・メモリ(ROM)、消去可能プログラマブル・リード・オンリ・メモリ(EPROMまたはフラッシュ・メモリ)、スタティック・ランダム・アクセス・メモリ(SRAM)、ポータブル・コンパクト・ディスク・リード・オンリ・メモリ(CD-ROM)、デジタル・バーサタイル・ディスク(DVD)、メモリ・スティック、フロッピー(R)・ディスク、命令を記録したパンチ・カードまたは溝内隆起構造などの機械的にエンコードされたデバイス、および前述の任意の適切な組合せを含む。本明細書で使用されるようなコンピュータ可読ストレージ媒体は、電波もしくは他の自由に伝搬する電磁波、導波路もしくは他の伝送媒体を通じて伝搬する電磁波(例えば、光ファイバ・ケーブルを通過する光パルス)、またはワイヤを通じて伝送される電気信号など、本質的に一時的な信号であると解釈されるべきではない。
【0078】
本明細書に記載のコンピュータ可読プログラム命令は、コンピュータ可読ストレージ媒体からそれぞれのコンピューティング/処理デバイスに、あるいは、例えば、インターネット、ローカル・エリア・ネットワーク、ワイド・エリア・ネットワーク、もしくはワイヤレス・ネットワーク、またはその組合せといったネットワークを介して外部コンピュータまたは外部ストレージ・デバイスに、ダウンロード可能である。ネットワークは、銅伝送ケーブル、光伝送ファイバ、ワイヤレス伝送、ルータ、ファイアウォール、スイッチ、ゲートウェイ・コンピュータ、またはエッジ・サーバ、あるいはその組合せを備えてもよい。各コンピューティング/処理デバイスのネットワーク・アダプタ・カードまたはネットワーク・インターフェースは、コンピュータ可読プログラム命令をネットワークから受け取り、それぞれのコンピューティング/処理デバイス内のコンピュータ可読ストレージ媒体に格納するためにコンピュータ可読プログラム命令を転送する。
【0079】
本発明の動作を実行するためのコンピュータ可読プログラム命令は、アセンブラ命令、インストラクション・セット・アーキテクチャ(ISA)命令、機械語命令、機械依存命令、マイクロコード、ファームウェア命令、状態設定データ、集積回路用の構成データ、または、Smalltalk(R)、C++、もしくは同様のものなどのオブジェクト指向プログラミング言語、および「C」プログラミング言語もしくは類似のプログラミング言語などの手続き型プログラミング言語を含む1つもしくは複数のプログラミング言語の任意の組合せで書かれたソース・コードもしくはオブジェクト・コードでもよい。コンピュータ可読プログラム命令は、全面的にユーザのコンピュータ上で、または、部分的にユーザのコンピュータ上で、スタンド・アロンのソフトウェア・パッケージとして、あるいは、部分的にユーザのコンピュータ上かつ部分的にリモート・コンピュータ上で、または全面的にリモート・コンピュータもしくはサーバ上で実行してもよい。後者のシナリオでは、リモート・コンピュータは、ローカル・エリア・ネットワーク(LAN)もしくはワイド・エリア・ネットワーク(WAN)を含む任意のタイプのネットワークを通じてユーザのコンピュータに接続されてもよく、または接続は、(例えば、インターネット・サービス・プロバイダを使用してインターネットを通じて)外部コンピュータに対して行われてもよい。一部の実施形態では、プログラム可能論理回路、フィールド・プログラマブル・ゲート・アレイ(FPGA)、またはプログラマブル・ロジック・アレイ(PLA)を含む電子回路は、本発明の態様を実施するために、コンピュータ可読プログラム命令の状態情報を利用して電子回路を個別化することによって、コンピュータ可読プログラム命令を実行してもよい。
【0080】
本発明の態様は、本発明の実施形態による方法、装置(システム)、およびコンピュータ・プログラム製品のフローチャート図またはブロック図あるいはその両方を参照しながら本明細書で説明される。フローチャート図またはブロック図あるいはその両方の各ブロック、ならびにフローチャート図またはブロック図あるいはその両方におけるブロックの組合せは、コンピュータ可読プログラム命令によって実行可能であることが理解されよう。
【0081】
これらのコンピュータ可読プログラム命令は、コンピュータまたは他のプログラム可能データ処理装置のプロセッサを介して実行する命令が、フローチャートまたはブロック図あるいはその両方の1つまたは複数のブロックで指定された機能/行為を実行するための手段を作り出すべく、機械を生み出すために汎用コンピュータ、専用コンピュータ、または他のプログラム可能データ処理装置のプロセッサに提供されてもよい。これらのコンピュータ可読プログラム命令はまた、フローチャートまたはブロック図あるいはその両方の1つまたは複数のブロックで指定された機能/行為の態様を実行する命令を含む製品を、命令を格納したコンピュータ可読ストレージ媒体が備えるべく、コンピュータ可読ストレージ媒体に格納されてもよく、コンピュータ、プログラム可能データ処理装置、または他のデバイス、あるいはその組合せに特定の様式で機能するように指図可能である。
【0082】
コンピュータ可読プログラム命令はまた、コンピュータ、他のプログラム可能装置、または他のデバイス上で実行する命令が、フローチャートまたはブロック図あるいはその両方の1つまたは複数のブロックで指定された機能/行為を実行するべく、コンピュータ実行処理を生み出すために、コンピュータ、他のプログラム可能装置、または他のデバイスで一連の動作ステップを実施するために、コンピュータ、他のプログラム可能データ処理装置、または他のデバイスにロードされてもよい。
【0083】
図中のフローチャートおよびブロック図は、本発明の様々な実施形態によるシステム、方法、およびコンピュータ・プログラム製品の可能な実装形態のアーキテクチャ、機能、および動作を示す。この点に関して、フローチャートまたはブロック図の中の各ブロックは、指定の論理機能を実施するための1つまたは複数の実行可能命令を含む、命令のモジュール、セグメント、または一部を表してもよい。一部の代替実装形態では、ブロックに記された機能は、図に記された順序とは無関係に行われてもよい。例えば、連続して示された2つのブロックは、実際には、実質的に同時に実行されてもよく、またはブロックは、ときには、含まれる機能に応じて逆の順序で実行されてもよい。ブロック図またはフローチャート図あるいはその両方の各ブロック、および、ブロック図またはフローチャート図あるいはその両方におけるブロックの組合せは、指定の機能もしくは行為を行うか、または、専用ハードウェアとコンピュータ命令との組合せを実行する、専用ハードウェア・ベースのシステムによって実行可能であることにも留意されたい。
【0084】
本発明の様々な実施形態の説明は、例示のために提示されてきたが、網羅的であること、または、開示された実施形態に限定されることを意図するものではない。説明された実施形態の範囲および思想から逸脱することなく、多くの変更形態および変形形態が当業者には明らかであろう。本明細書で使用される専門用語は、実施形態の原理、実用的用途、もしくは市場で見つかる技術に対する技術的改善を最もよく説明するように、または、本明細書に記載の実施形態を他の当業者が理解できるように、選ばれた。
図1
図2
図3
図4
図5
図6A
図6B
図6C
図7