(57)【要約】【課題】コンピューティング・システム内でキャッシュされたデータを転送することに関連するオーバーヘッドを防ぐか、または減らすことができる方法またはシステムを提供する。【解決手段】方法およびシステムが、キャッシュ・ラインのフェッチに関連付けられたプロセッサの介入を受信することに基づいて、キャッシュ・ラインを、可能性のあるホット・キャッシュ・ラインまたは確認されたホット・キャッシュ・ラインとして検出する。この方法およびシステムは、ホット・キャッシュ・ラインに関連する動作のアクションを抑制することを含む。関連する方法およびシステムは、介入を検出し、それに応じて、介入通知を別のプロセッサに通信する。代替の方法およびシステムは、アプリケーションの介入イベントに関連付けられたホット・データ・オブジェクトを検出する。この方法およびシステムは、ホット・データ・オブジェクトに関連する動作のアクションを抑制できる。代替の方法およびシステムは、データ・オブジェクトに関連付けられた介入を検出して通信できる。【選択図】図４
2020523674.tif 000002
【特許請求の範囲】
【請求項１】
キャッシュの競合を管理するための方法であって、
第１のキャッシュ・ラインの第１のコピーを取得するための第１のフェッチ要求に関連付けられた介入通知を受信することと、
前記第１のキャッシュ・ラインに関連して、前記介入通知に少なくとも部分的に基づいて、前記第１のキャッシュ・ラインが可能性のあるホット・キャッシュ・ラインであることを示す第１のホット・ライン状態を記録することと、
前記第１のキャッシュ・ラインが可能性のあるホット・キャッシュ・ラインであることを示す前記記録された第１のホット・ライン状態に少なくとも部分的に基づいて、動作を実行することに関連付けられたアクションを抑制することであって、前記動作が前記第１のキャッシュ・ラインに関連付けられている、前記抑制することと
を含んでいる、方法。
【請求項２】
前記第１のフェッチ要求が第１のプロセッサに関連付けられ、
前記介入通知が、前記第１のキャッシュ・ラインの前記第１のコピーを含んでいる第２のプロセッサにさらに関連付けられる、請求項１に記載の方法。
【請求項３】
前記介入通知を前記受信することが、前記第２のプロセッサが前記介入通知を通信すること、および前記第１のプロセッサが前記介入通知を受信することを含んでおり、
前記アクションを前記抑制することが、前記第１のプロセッサが前記アクションを抑制することを含んでいる、請求項２に記載の方法。
【請求項４】
前記第１および第２のプロセッサがプロセッサ間ネットワークによって結合され、
前記介入通知を前記受信することが、前記プロセッサ間ネットワークが前記介入通知を前記第２のプロセッサから受信することと、前記プロセッサ間ネットワークが前記介入通知を前記第１のプロセッサに通信することと、前記第１のプロセッサが前記介入通知を前記プロセッサ間ネットワークから受信することとを含んでいる、請求項２に記載の方法。
【請求項５】
前記方法が、前記第１のキャッシュ・ラインの第２のコピーを取得するための第２のフェッチ要求を受信することと、前記第２のフェッチ要求を受信することに応答して、前記第１のキャッシュ・ラインに関連して、前記第１のキャッシュ・ラインが確認されたホット・キャッシュ・ラインであることを示す第２のホット・ライン状態を記録することとをさらに含んでおり、
前記第２のホット・ライン状態を前記記録することが、前記第１のキャッシュ・ラインが可能性のあるホット・キャッシュ・ラインであることを示す前記記録された第１のホット・ライン状態に少なくとも部分的に基づき、
前記アクションを前記抑制することが、前記第１のキャッシュ・ラインが確認されたホット・キャッシュ・ラインであることを示す前記記録された第２のホット・ライン状態に少なくとも部分的に基づく、請求項１に記載の方法。
【請求項６】
前記第２のフェッチ要求を前記受信することが、プロセッサ間ネットワークが前記第２のフェッチ要求を第１のプロセッサから受信することと、前記プロセッサ間ネットワークが前記第２のフェッチ要求を第２のプロセッサに通信することと、前記第２のプロセッサが前記プロセッサ間ネットワークから前記第２のフェッチ要求を受信することとを含んでいる、請求項５に記載の方法。
【請求項７】
前記動作が、プロセッサによって命令を実行することに関連付けられ、前記アクションを前記抑制することが、命令の投機的実行を抑制することと、前記第１のキャッシュ・ラインのフェッチを抑制することと、前記第１のキャッシュ・ラインの使用を抑制することと、命令の不規則な順序での実行を抑制することと、前記第１のキャッシュ・ラインの第３のコピーを取得するための第３のフェッチ要求に対する応答を受信するためのより多くの時間を許可する命令の発行を抑制することと、前記第１のキャッシュ・ラインに関連付けられた命令を再試行することとのうちの少なくとも１つを含んでいる、請求項１に記載の方法。
【請求項８】
前記方法がホット・ライン・テーブルをさらに含んでおり、
前記ホット・ライン・テーブルが各キャッシュ・ラインに関連付けられたエントリを含んでおり、
前記ホット・ライン・テーブルの各エントリが、前記第１のホット・ライン状態および第２のホット・ライン状態のうちの少なくとも１つを含んでおり、前記第２のホット・ライン状態が、前記各キャッシュ・ラインが確認されたホット・キャッシュ・ラインであることを示す、請求項１に記載の方法。
【請求項９】
前記ホット・ライン・テーブル内の各エントリが各カウンタをさらに含んでおり、
前記方法が、
第２のキャッシュ・ラインが、可能性のあるホット・キャッシュ・ラインおよび確認されたホット・キャッシュ・ラインのうちの少なくとも１つであることを決定することと、
前記第２のキャッシュ・ラインが前記ホット・ライン・テーブルの前記エントリに含まれていないことを決定することと、
前記第２のキャッシュ・ラインが前記ホット・ライン・テーブルの前記エントリに含まれていないことの決定に応答して、前記第２のキャッシュ・ラインに関連して、再利用するための前記ホット・ライン・テーブルの一致するエントリを選択することであって、前記一致するエントリが、前記第２のキャッシュ・ラインと異なる第３のキャッシュ・ラインに対応し、前記一致するエントリを前記選択することが、前記一致するエントリに含まれている前記カウンタの値に少なくとも部分的に基づく、前記選択することとをさらに含んでいる、請求項８に記載の方法。
【請求項１０】
前記方法が、
前記一致するエントリに含まれているカウンタの前記値を初期値に設定することと、
前記第３のキャッシュ・ラインが、選択された期間内に、前記第３のキャッシュ・ラインの第１のコピーを含んでいるコンピューティング・システムのコンポーネントによって参照されなかったことに基づいて、前記一致するエントリに含まれている前記カウンタの前記値をデクリメントすることと、
前記第３のキャッシュ・ラインが、前記第３のキャッシュ・ラインの前記第１のコピーを含んでいない前記コンピューティング・システムのコンポーネントによって参照されたことに基づいて、前記一致するエントリに含まれている前記カウンタの前記値をインクリメントすることとをさらに含んでおり、
前記一致するエントリを前記選択することが、前記一致するエントリに含まれている前記カウンタの前記値が、前記ホット・ライン・テーブルの代替のエントリに含まれている各カウンタの値より小さいということに少なくとも部分的に基づく、請求項９に記載の方法。
【請求項１１】
キャッシュの競合を管理するためのシステムであって、前記システムが、
コンピューティング・システムに含まれている複数のプロセッサに含まれている第１のプロセッサと、
競合抑制回路とを備えており、
前記第１のプロセッサが、第１のキャッシュ・ラインの第１のコピーをフェッチするための第１のフェッチ要求に関連付けられた介入通知を受信することと、前記介入通知に応答して、前記第１のキャッシュ・ラインが可能性のあるホット・キャッシュ・ラインであることを示す第１のホット・ライン状態を記録することとを実行するように構成され、
前記競合抑制回路が、前記第１のキャッシュ・ラインに関連付けられた動作を実行する前記第１のプロセッサに関連付けられたアクションを決定することと、前記第１のキャッシュ・ラインが可能性のあるホット・キャッシュ・ラインであることを示す前記第１のホット・ライン状態に少なくとも部分的に基づいて、前記第１のアクションを抑制するための抑制指示を前記第１のプロセッサに通信することとを実行するように構成され、
前記第１のプロセッサが、前記抑制指示に応答して前記アクションを抑制するようにさらに構成される、システム。
【請求項１２】
前記第１のプロセッサが、前記第１のキャッシュ・ラインの第２のコピーをフェッチするための、第２のプロセッサに関連付けられた第２のフェッチ要求を受信することと、前記第２のフェッチ要求に応答して、前記第１のキャッシュ・ラインが可能性のあるホット・キャッシュ・ラインであることを示す前記第１のホット・ライン状態に少なくとも部分的に基づいて、前記第１のキャッシュ・ラインが確認されたホット・キャッシュ・ラインであることを示す第２のホット・ライン状態を記録することとを実行するようにさらに構成され、
前記競合抑制回路が、前記アクションを決定することと、前記第１のキャッシュ・ラインが確認されたホット・キャッシュ・ラインであることを示す前記第２のホット・ライン状態に少なくとも部分的に基づいて、前記抑制指示を前記第１のプロセッサに通信することとを実行するようにさらに構成される、請求項１１に記載のシステム。
【請求項１３】
前記動作が、前記第１のプロセッサによって命令を実行することに関連付けられ、前記アクションを前記抑制することが、命令の投機的実行を抑制することと、前記第１のキャッシュ・ラインのフェッチを抑制することと、前記第１のキャッシュ・ラインの使用を抑制することと、命令の不規則な順序での実行を抑制することと、前記第１のキャッシュ・ラインの第３のコピーを取得するための第３のフェッチ要求に対する応答を受信するためのより多くの時間を許可する命令の発行を抑制することと、前記第１のキャッシュ・ラインに関連付けられた命令を再試行することとのうちの少なくとも１つを含んでいる、請求項１１に記載のシステム。
【請求項１４】
前記システムがホット・ライン・テーブルをさらに含んでおり、
前記ホット・ライン・テーブルが各キャッシュ・ラインに関連付けられたエントリを含んでおり、
前記ホット・ライン・テーブルの各エントリが、前記第１のホット・ライン状態および第２のホット・ライン状態のうちの少なくとも１つを含んでおり、
前記第２のホット・ライン状態が、前記各キャッシュ・ラインが確認されたホット・キャッシュ・ラインであることを示す、請求項１１に記載のシステム。
【請求項１５】
前記ホット・ライン・テーブル内の各エントリが各カウンタをさらに含んでおり、
前記第１のプロセッサが、
第２のキャッシュ・ラインが、可能性のあるホット・キャッシュ・ラインおよび確認されたホット・キャッシュ・ラインのうちの少なくとも１つであることを決定することと、
前記第２のキャッシュ・ラインが前記ホット・ライン・テーブルの前記エントリに含まれていないことを決定することと、
前記第２のキャッシュ・ラインが前記ホット・ライン・テーブルの前記エントリに含まれていないことの決定に応答して、前記第２のキャッシュ・ラインに関連して、再利用するための前記ホット・ライン・テーブルの一致するエントリを選択することであって、前記一致するエントリが、第３のキャッシュ・ラインに対応し、前記一致するエントリを選択することが、前記一致するエントリに含まれている前記カウンタの値に少なくとも部分的に基づく、前記選択することと
を実行するようにさらに構成される、請求項１４に記載のシステム。
【請求項１６】
前記第１のプロセッサが、
前記一致するエントリに含まれている前記カウンタを初期値に初期化することと、
選択された期間内に、前記第１のプロセッサが前記第３のキャッシュ・ラインを使用しなかったことに基づいて、前記一致するエントリに含まれている前記カウンタの前記値をデクリメントすることと、
第２のプロセッサが前記第３のキャッシュ・ラインを使用したことに基づいて、前記一致するエントリに含まれている前記カウンタの前記値をインクリメントすることと
を実行するようにさらに構成され、
前記第１のプロセッサが、前記一致するエントリに含まれている前記カウンタの前記値が、前記ホット・ライン・テーブルの代替のエントリに含まれている各カウンタの値より小さいということに少なくとも部分的に基づいて、前記一致するエントリを選択するようにさらに構成される、請求項１５に記載のシステム。
【請求項１７】
前記ホット・ライン・テーブルの各エントリが命令タグをさらに含んでおり、
前記ホット・ライン・テーブルの各エントリ内の前記命令タグが、前記ホット・ライン・テーブルの前記各エントリに対応するキャッシュ・ラインに関連付けられた命令に対応する第１の値を含んでおり、
前記ホット・ライン・テーブルの各エントリ内の前記命令タグが、前記タグが無効であることを示す第２の値を含んでおり、
前記第１のプロセッサが、前記ホット・ライン・テーブルの前記各エントリに対応する前記キャッシュ・ラインに関連付けられた第１の命令をフラッシュすることと、前記第１のプロセッサが、前記ホット・ライン・テーブルの前記各エントリに対応する前記キャッシュ・ラインに関連付けられた第２の命令を完了することとのうちの少なくとも１つに応答して、前記第１のプロセッサが、前記ホット・ライン・テーブル内の前記各エントリの前記命令タグを無効な値に設定するようにさらに構成される、請求項１４に記載のシステム。
【請求項１８】
前記システムがプロセッサ間ネットワークをさらに含んでおり、
前記プロセッサ間ネットワークが、前記介入通知を前記複数のプロセッサのうちの第２のプロセッサから受信することと、前記介入通知を前記第１のプロセッサに通信することとを実行するように構成され、
前記第１のプロセッサが、前記介入通知を前記プロセッサ間ネットワークから受信するようにさらに構成される、請求項１１に記載のシステム。
【請求項１９】
前記プロセッサ間ネットワークが対称型マルチプロセッシング・ネットワークを含んでいる、請求項１８に記載のシステム。
【請求項２０】
前記システムが介入回路をさらに含んでおり、
前記介入回路が、前記第１のプロセッサおよび前記第１のプロセッサに通信可能に結合されたプロセッサ間ネットワークのうちの少なくとも１つに含まれており、
前記介入回路が、前記介入通知を受信し、それに応じて、前記介入通知を前記第１のプロセッサに通信するように構成され、
前記第１のプロセッサが、前記介入通知を前記介入回路から受信するようにさらに構成される、請求項１１に記載のシステム。
【請求項２１】
前記システムがプロセッサ間ネットワークをさらに含んでおり、
前記プロセッサ間ネットワークが、前記第２のフェッチ要求を前記第２のプロセッサから受信し、前記第２のフェッチ要求を前記第１のプロセッサに通信するように構成され、
前記第１のプロセッサが、前記第２のフェッチ要求を前記プロセッサ間ネットワークから受信するようにさらに構成される、請求項１２に記載のシステム。
【請求項２２】
メモリの競合を示すための方法であって、
キャッシュ・ラインをフェッチするための第１の要求を受信することと、
前記第１の要求に応答して、第１のキャッシュが前記キャッシュ・ラインの第１のコピーを含んでいることを決定することと、
前記キャッシュ・ラインの第１の状態が排他的状態を含んでいることを決定することと、
前記キャッシュ・ラインが前記排他的状態を含んでいることに基づいて、前記第１の要求が前記キャッシュ・ラインの前記第１のコピーに関連付けられた介入を引き起こしたことの通知を通信することと
を含んでいる、方法。
【請求項２３】
前記キャッシュ・ラインの第２の状態が共有状態を含んでおり、前記方法が、
前記キャッシュ・ラインをフェッチすることの第２の要求を受信することであって、前記第２の要求が前記キャッシュ・ラインの読み取り専用の使用に関連付けられている、前記受信することと、
前記第２の要求に応答して、第２のキャッシュが前記キャッシュ・ラインの第２のコピーを含んでいることを決定することと、
前記キャッシュ・ラインの第２の状態が共有状態を含んでいることを決定することと、
前記キャッシュ・ラインの前記読み取り専用の使用に関連付けられた前記第２の要求、および前記キャッシュ・ラインが前記共有状態を有していることに少なくとも部分的に基づいて、前記第２の要求が前記キャッシュ・ラインの前記第２のコピーに関連付けられた介入を引き起こさなかったことの通知を通信することと
をさらに含んでいる、請求項２２に記載の方法。
【請求項２４】
コンピューティング・システムに含まれている複数のプロセッサのうちの第１のプロセッサと、介入回路とを備えている、キャッシュの競合を示すためのシステムであって、
前記第１のプロセッサが、
キャッシュ・ラインの第１のコピーをフェッチすることの第１の要求を受信し、前記第１の要求に応答して、第１のキャッシュに含まれている、前記キャッシュ・ラインの第１のコピーを識別することと、
前記キャッシュ・ラインが排他的ライン状態を有していることを決定することと、
前記排他的ライン状態および前記第１のキャッシュに含まれている前記第１のコピーに少なくとも部分的に基づいて、介入状態を生成することと
を実行するように構成され、
前記介入回路が、
前記第１のプロセッサから前記介入状態を受信することと、
前記介入状態に少なくとも部分的に基づいて、介入通知を生成することと、
前記介入通知を、前記複数のプロセッサのうちの第２のプロセッサに通信することと
を実行するように構成される、システム。
【請求項２５】
前記システムがプロセッサ間ネットワークをさらに含んでおり、
前記介入回路が、前記介入通知を前記プロセッサ間ネットワークに通信するようにさらに構成され、
前記プロセッサ間ネットワークが、前記介入通知を受信し、それに応じて、前記介入通知を前記第２のプロセッサに通信するように構成される、請求項２４に記載のシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本開示は、キャッシュを採用するコンピューティング・システムに関する。より詳細には、本開示は、キャッシュに格納できるコンピューティング・システム内の共有データを管理することに関する。本開示は、メモリのキャッシュ・ラインであるか、または分散コンピューティング・システム内のデータ・オブジェクトなどのデータの代替の形態であることができる、データに関する。
【背景技術】
【０００２】
コンピューティング・システム内のプロセッサは、例えば、プロセッサによって（例えば命令の実行において）使用される命令またはデータあるいはその両方に対するアクセス待ち時間を改善するなどのために、ローカル・キャッシュを採用できる。しかし、データを共有している複数のプロセッサは、そのデータに関して、プロセッサ間で競合を引き起こすことがある。この競合は、さまざまなプロセッサ内のキャッシュ間でのデータの転送の頻度における増加をもたらす可能性があり、特に、あるプロセッサが他のプロセッサによって共有されているキャッシュ・ラインを変更する場合、他のプロセッサのキャッシュに関してインコヒーレント・データ問題を引き起こし、他のプロセッサが変更されたキャッシュ・ラインのコピーをフェッチすることが必要になる。キャッシュ・ラインなどのデータの転送の頻度の増加は、プログラムの進行を制限するか、または遅らせること、またはデータの使用とは対照的に、データの転送にかかる相対的時間を増やすこと、あるいはその両方を引き起こす可能性がある。プロセッサ間のキャッシュ・ラインの転送には、関連するオーバーヘッド（例えば、転送待ち時間、バスまたはプロセッサ間リンクの利用など）がある。プロセッサ間のデータの転送の高い（または増加した）頻度は、それに応じて、関連するオーバーヘッドを増やす。このオーバーヘッドは、プロセッサまたはコンピューティング・システム全体あるいはその両方の性能を制限するか、または低下させる可能性がある。
【０００３】
Institute of Electrical and Electronic Engineers（ＩＥＥＥ）によって１９８４年１月１日に公開された"A Low-Overhead Coherence Solution for Multiprocessors with Private Cache Memories", by Mark S. Papamarcos and Janak H. Patel（以下では、「Papamarcos」）には、マルチプロセッサ・システム内のプロセッサのローカル・キャッシュ間のキャッシュ・ラインの転送の影響が記載されている。例えば、Papamarcosは、「図Ｉに示されているプロセッサごとにプライベート・キャッシュ」を備えているマルチプロセッサ・システム内のキャッシュ・メモリの設計に関して、「この構成は、周知のデータ整合性問題またはキャッシュ・コヒーレンス問題による悪影響を受ける」と説明している。Papamarcosはさらに、「コヒーレンス問題を解決するための最も単純な方法は、キャッシュに書き込まれているブロックのアドレスがシステム全体に送信されるように要求することである」が、「明らかに、無効化トラフィックが急速に増加する」と述べている。Papamarcosは、キャッシュ無効化要求を減らすための解決策を、「すべての不必要な無効化要求を、発生の時点で削除することができる。したがって、バスのトラフィックがキャッシュ・ミスに減らされる」と説明している。
【０００４】
Papamarcosは、無効化要求に関連するバスのトラフィックに起因するオーバーヘッドに対処しているが、競合しているプロセッサ間の競合の影響を受けるキャッシュ・ラインを転送すること、および特に、競合の影響を受け、キャッシュ・ライン・ミスに関連するキャッシュ・ラインを転送することに関連するオーバーヘッドの増加に対処するための解決策が、依然として必要である。
【０００５】
キャッシュ・ラインなどのデータを共有しているプロセッサと同様に、コンピューティング・システム内で実行されているアプリケーションは、アプリケーションによって使用されるデータ・オブジェクト（例えば、ファイルまたはインターネット・ページの一部）へのアクセス待ち時間を改善するなどのために、キャッシュを採用できる。しかし、特に、あるアプリケーションが共有データを変更し、他のアプリケーションのキャッシュ内で保持されているデータのコピーにおいてインコヒーレント・データ問題を引き起こす場合に、コンピューティング・システム内の共有データは、そのデータを共有しているアプリケーション間の競合の影響を受ける可能性がある。この競合は、さまざまなアプリケーションのキャッシュ間のデータ・オブジェクトの転送の頻度における増加を引き起こすことがあり、次に、コンピューティング・システム内のデータをキャッシュすることに関連するオーバーヘッド（例えば、転送待ち時間、ネットワーク利用など）を増やすことがある。データを共有しているプロセッサと同様の方法で、アプリケーション間のデータ・オブジェクトの転送の頻度の増加は、オーバーヘッドにおける増加に対応することがあり、次に、アプリケーションまたはコンピューティング・システム全体あるいはその両方の性能を制限するか、または低下させることがある。
【先行技術文献】
【非特許文献】
【０００６】
【非特許文献１】"A Low-Overhead Coherence Solutionfor Multiprocessors with Private Cache Memories", by Mark S. Papamarcos and Janak H. Patel, published January 1, 1984 by the Institute of Electrical and Electronic Engineers (IEEE)
【発明の概要】
【発明が解決しようとする課題】
【０００７】
キャッシュ内の共有データ（例えば、コンピューティング・システム内のプロセッサによって共有されているメモリ・キャッシュ・ライン内のキャッシュ中のプロセッサ命令のオペランド・データ、またはコンピューティング・システムのアプリケーションによって共有されているキャッシュ中のデータ・オブジェクト、あるいはその両方）の転送に関連するオーバーヘッドは、プロセッサ、アプリケーションまたはコンピューティング・システムあるいはその組合せの性能を制限するか、または低下させる可能性がある。したがって、コンピューティング・システム内でキャッシュされたデータを転送することに関連するオーバーヘッドを防ぐか、または減らすことができる方法またはシステムあるいはその両方に対する必要性が存在する。本開示の実施形態は、そのような目的を達成することができる。
【課題を解決するための手段】
【０００８】
本開示の実施形態によれば、キャッシュの競合を管理するための方法が、キャッシュ・ラインの第１のコピーを取得するための第１のフェッチ要求に関連付けられた介入通知を受信することを含む。介入通知に基づいて、この方法は、キャッシュ・ラインに関連して、キャッシュ・ラインが可能性のあるホット・キャッシュ・ライン（hot cache line）であることを示す第１の状態を記録することを含む。この方法は、キャッシュ・ラインが可能性のあるホット・キャッシュ・ラインであることを示す記録された第１の状態に基づいて、キャッシュ・ラインに関連付けられた動作を実行することに関連付けられたアクションを抑制することをさらに含む。
【０００９】
この方法は、キャッシュ・ラインの第２のコピーを取得するための第２のフェッチ要求を受信することと、キャッシュ・ラインに関連して、第２のフェッチ要求に応答して、キャッシュ・ラインが可能性のあるホット・キャッシュ・ラインであることを示す記録された第１の状態に基づき、キャッシュ・ラインが確認されたホット・キャッシュ・ラインであることを示す第２の状態を記録することとを、さらに含むことができる。この方法は、キャッシュ・ラインが確認されたホット・キャッシュ・ラインであることを示す記録された第２の状態に基づいて、キャッシュ・ラインに関連付けられた動作を実行することに関連付けられたアクションを抑制することを含むことができる。
【００１０】
一部の実施形態では、第１のフェッチ要求は、キャッシュ・ラインを使用している複数のプロセッサのうちの第１のプロセッサに関連付けられる。介入通知は、キャッシュ・ラインの第１のコピーを含んでいる、キャッシュ・ラインを使用している複数のプロセッサのうちの第２のプロセッサにさらに関連付けられる。そのような実施形態では、介入通知を受信することが、第２のプロセッサが介入通知を通信し、第１のプロセッサが介入通知を受信することを含んでおり、第１および第２の状態を記録することが、第１のプロセッサが第１および第２の状態を記録することを含んでおり、動作を実行することに関連付けられたアクションを抑制することが、第１のプロセッサがアクションを抑制することを含んでいる。
【００１１】
この方法は、各キャッシュ・ラインに関連付けられたエントリを含んでいるホット・ライン・テーブル（hot line table）を任意選択的に含む。ホット・ライン・テーブルの各エントリは、第１の状態を記録するためのコンポーネント、第２の状態を記録するためのコンポーネント、各キャッシュ・ラインの属性、および各キャッシュ・ラインに関連付けられた動作のうちの少なくとも１つを含む。
【００１２】
本開示の代替の実施形態によれば、キャッシュの競合を管理するためのシステムが、コンピューティング・システムに含まれている複数のプロセッサに含まれている第１のプロセッサと、競合抑制回路とを備える。第１のプロセッサは、キャッシュ・ラインの第１のコピーをフェッチするための第１のフェッチ要求に関連付けられた介入通知を受信することと、介入通知に応答して、キャッシュ・ラインが可能性のあるホット・キャッシュ・ラインであることを示す第１の状態を記録することとを実行するように構成される。
【００１３】
システムの実施形態によれば、競合抑制回路が、キャッシュ・ラインに関連付けられた動作を実行する第１のプロセッサに関連付けられたアクションを決定することと、キャッシュ・ラインが可能性のあるホット・キャッシュ・ラインであることを示す第１の状態に基づいて、抑制指示を第１のプロセッサに通信することとを実行するように構成される。抑制指示は、アクションを抑制することの指示を含む。第１のプロセッサは、抑制指示に応答してアクションを抑制するようにさらに構成される。
【００１４】
一部の実施形態では、第１のプロセッサが、第２のフェッチ要求を受信することと、キャッシュ・ラインの第２のコピーをフェッチすることと、第２のフェッチ要求に応答して、キャッシュ・ラインが可能性のあるホット・キャッシュ・ラインであることを示す第１の状態に基づいて、第２の状態を記録することとを実行するように、さらに構成され得る。第２の状態は、キャッシュ・ラインが確認されたホット・キャッシュ・ラインであることを示す。そのような実施形態では、抑制回路が、キャッシュ・ラインが確認されたホット・キャッシュ・ラインであることを示す第２の状態に基づいて抑制指示をシグナリングするように、さらに構成され得る。
【００１５】
一部の実施形態では、システムが、プロセッサ間ネットワークをさらに備え、このプロセッサ間ネットワークは、介入通知を複数のプロセッサのうちの第２のプロセッサから受信するように構成される。プロセッサ間ネットワークは、介入通知を第１のプロセッサに通信するようにさらに構成され、第１のプロセッサは、介入通知をプロセッサ間ネットワークから受信するようにさらに構成される。また、一部の実施形態では、アクションを抑制することが、命令の投機的実行を抑制することと、キャッシュ・ラインのフェッチを抑制することと、キャッシュ・ラインの使用を抑制することと、命令の不規則な順序での実行を抑制することと、キャッシュ・ラインの第３のコピーを取得するための第３のフェッチ要求に対する応答を受信するためのより多くの時間を許可する命令の発行を抑制することと、キャッシュ・ラインに関連付けられた命令を再試行することとのうちの１つまたは複数を含む。
【００１６】
本開示のさらに他の実施形態によれば、メモリの競合を示すための方法が、キャッシュ・ラインをフェッチすることの第１の要求を受信することと、第１の要求に応答して、第１のキャッシュがキャッシュ・ラインの第１のコピーを含んでいることを決定することとを含む。この方法は、キャッシュ・ラインの第１の状態が排他的状態を含んでいることを決定することをさらに含む。キャッシュ・ラインが排他的状態を含んでいることに基づいて、この方法は、第１の要求がキャッシュ・ラインの第１のコピーに関連付けられた介入を引き起こしたことの通知を通信することをさらに含む。
【００１７】
本開示の他の実施形態では、キャッシュの競合を示すためのシステムが、コンピューティング・システムに含まれている複数のプロセッサのうちの第１のプロセッサと、介入回路とを備える。第１のプロセッサは、キャッシュ・ラインの第１のコピーをフェッチするための第１の要求を受信することと、第１の要求に応答して、第１のキャッシュ内のキャッシュ・ラインの第１のコピーを識別することとを実行するように構成される。第１のプロセッサは、キャッシュ・ラインが排他的ライン状態（exclusive line status）を有していることを決定し、排他的ライン状態および第１のキャッシュに含まれている第１のコピーに基づいて介入状態を生成するように、さらに構成される。介入回路は、介入状態を第１のプロセッサから受信することと、介入状態に基づいて第１の介入通知を生成することと、第１の介入通知を、複数のプロセッサのうちの第２のプロセッサに通信することとを実行するように構成される。
【００１８】
キャッシュ・ラインのフェッチに関連付けられた介入に基づいてホット・キャッシュ・ラインを決定し、ホット・キャッシュ・ラインに関連付けられたアクションまたは動作を抑制することによって、本開示の実施形態は、キャッシュ・ラインの転送を防ぐか、またはキャッシュ・ラインの転送の頻度を減らすことができる。キャッシュ・ラインの転送を防ぐこと、またはキャッシュ・ラインの転送の頻度を減らすこと、あるいはその両方によって、キャッシュ・ラインの転送に関連付けられたオーバーヘッドを制限するか、または減らすことができ、プロセッサまたはコンピューティング・システムあるいはその両方がより高いレベルの性能を実現できるようにする。
【００１９】
実施形態は、コンピューティング・システム内のアプリケーションによって使用されるホット・データ・オブジェクト（hot data objects）を検出するための方法およびシステムを含むことができる。この方法およびシステムは、データ・オブジェクトのコピーを要求しているコンピューティング・システムのアプリケーションに関連付けられた介入通知を受信することに基づいて、可能性のあるホット・データ・オブジェクトを識別することができる。一部の実施形態では、方法およびシステムは、データ・オブジェクトに対する第２の要求を受信することと、第２の要求に基づいて、データ・オブジェクトが確認されたホット・データ・オブジェクトであることを決定することとを含むことができる。この方法およびシステムは、データ・オブジェクトが可能性のあるホット・データ・オブジェクトまたは確認されたホット・データ・オブジェクトであることに基づいて、データ・オブジェクトに関連付けられた動作のアクションを抑制することができる。
【００２０】
上記の概要は、本開示の各実施形態例もすべての実装も説明するよう意図されていない。
【００２１】
本出願に含まれている図面は、本明細書に組み込まれ、本明細書の一部を形成する。各図面は、説明と共に本開示の実施形態を示し、本開示の原理を説明するのに役立つ。各図面は、特定の実施形態の単なる例であり、本開示を制限していない。
【図面の簡単な説明】
【００２２】
【図１】本開示の態様に従って例示的なプロセッサ・コアを示すブロック図である。
【図２】本開示の態様に従って例示的なコンピュータを示すブロック図である。
【図３】本開示の態様に従ってキャッシュ・ラインを転送する例を示すブロック図である。
【図４】本開示の態様に従って例示的なホット・ライン・テーブルを示すブロック図である。
【図５】本開示の態様に従って、介入を処理するための例示的な方法を示すフローチャートである。
【図６】本開示の態様に従って、介入を通信するための例示的な方法を示すフローチャートである。
【図７】本開示の態様に従って、ホット・ライン・テーブルを変更するための例示的な方法を示すフローチャートである。
【図８】本開示の態様に従って、ホット・キャッシュ・ラインを処理するための例示的な方法を示すフローチャートである。
【図９】本開示の態様に従って、ホット・キャッシュ・ラインに関連付けられた動作を処理するための例示的なシステムを示すフローチャートである。
【図１０】本開示の態様に従って、キャッシュ・ラインを処理するための例示的なシステムを示すブロック図である。
【図１１】本開示の態様に従って、データ・オブジェクトを処理するための例示的なシステムを示すブロック図である。
【図１２】本開示の態様に従って、キャッシュ・ラインまたはデータ・オブジェクトあるいはその両方を処理するための別の例示的なコンピューティング・システムを示すブロック図である。
【発明を実施するための形態】
【００２３】
本発明は、さまざまな変更および代替の形態を受け入れるが、その詳細が、図面において例として示されており、詳細に説明される。しかし、本発明を説明されている特定の実施形態に限定することが意図されていないということが、理解されるべきである。反対に、本発明の思想および範囲に含まれるすべての変更、同等のもの、および代替手段を対象にすることが意図されている。
【００２４】
本開示（the present disclosure ）（以下では、「本開示（the disclosure）と呼ぶ」）の態様は、コンピューティング・システムに関連している。より詳細な態様は、コンピューティング・システム内のキャッシュ間でデータ（複数のプロセッサによって共有されているメモリ・キャッシュ・ライン、または複数のアプリケーション（または同じアプリケーションのインスタンス）によって共有されているデータ・オブジェクト、あるいはその両方など）を転送することに関連している。本開示は、コンピューティング・システム内の特定のデータを、プロセッサまたはアプリケーションあるいはその両方の間での高度な競合の影響を受けているとして、または「ホット」キャッシュ・ラインもしくは「ホット」データ・オブジェクトとして識別するための、方法およびシステムを特徴とする。
【００２５】
本開示は、一部の環境下で、ホット・キャッシュ・ラインとして識別されたキャッシュ・ラインに基づいて特定のデータ転送を防ぐことができる、方法およびシステムをさらに特徴とする。したがって、本開示の実施形態（以下では、「実施形態」と呼ぶ）は、データをキャッシュすることに関連するコンピューティング・システム内のオーバーヘッドを防ぐか、または減らすことができる。キャッシュに関連するオーバーヘッドを防ぐことまたは減らすことあるいはその両方は、プロセッサ、アプリケーション、またはコンピューティング・システム全体、あるいはその組合せの性能にとって有利であることがある。
【００２６】
コンピューティング・システム内のキャッシュ・メモリは、データ（例えば、コンピュータ命令、またはコンピュータ命令のオペランド）を、メイン・メモリ（または、例えば分散コンピューティング・システム内のデータをホストするストレージ・デバイス）などの他のメモリと比較してアクセス待ち時間（メモリ内のデータを読み取るためまたは書き込むための時間）が少ないメモリ内に配置することによって、プロセッサ、アプリケーション、またはコンピューティング・システム、あるいはその組合せの性能を改善することができる。コンピューティング・システム内で、メイン・メモリは、システム内のプロセッサによって実行されるプログラムまたはプログラムによって使用されるデータあるいはその両方を格納することができる。コンピューティング・システム内のストレージ要素は、コンピューティング・システム（例えば、分散コンピューティング・システムなど）内のアプリケーションによって使用されるデータを格納（または「ホスト」）できる。
【００２７】
キャッシュ・メモリまたはキャッシュ・メモリの組合せ（例えば、キャッシュ・メモリの階層）あるいはその両方は、命令によって使用されるデータまたは命令の実行においてその他の方法でプロセッサによって使用されるデータをキャッシュするプロセッサの例を使用して、メイン・メモリまたはその他の（アクセス待ち時間がより多い）メモリなどの別のメモリ内のデータへのより少ないアクセス待ち時間をプロセッサに提供することができる。
【００２８】
キャッシュ・メモリは、プロセッサ内、またはプロセッサと別のメモリ（例えば、別のキャッシュ・メモリまたはメイン・メモリあるいはその両方を含む）の間、あるいはその両方に含めることができ、メイン・メモリにその他の方法で格納されたデータのコピーを格納することができる。例えば、プロセッサは、ローカル（または「レベル１」（Ｌ１））キャッシュを含むことができ、コンピューティング・システムは、プロセッサ（またはプロセッサのローカル・キャッシュ）と別のメモリ（例えば、メイン・メモリ）の間に、「レベル２」（Ｌ２）キャッシュおよび「レベル３」（Ｌ３）キャッシュなどの追加のキャッシュを含むことができる。
【００２９】
本開示を説明する目的で、ただし実施形態を制限するよう意図されずに、「ローカル・キャッシュ」とは、Ｌ１キャッシュなどの、特定のプロセッサに含まれている（または、特定のプロセッサに「局在する」）キャッシュのことを指す。しかし、実施形態において、本開示の範囲内で、プロセッサがＬ１キャッシュ以外の構造または要素あるいはその両方にデータのコピーを格納できるということは、当業者にとって明らかであろう。さらに、本開示の例は、プロセッサによって命令のオペランドとして使用されるデータを主にキャッシュする（すなわち、格納する）キャッシュを示す。しかしそれは、やはり、実施形態を制限するよう意図されておらず、本開示の範囲が、命令のオペランド・データを含んでいるキャッシュに制限されないということ、ならびに本開示が、命令のオペランド以外のデータ（例えば、プロセッサのさまざまな要素またはコンピューティング・システムのその他のコンポーネントあるいはその両方によって使用されるプロセッサの命令またはデータあるいはその両方、またはコンピューティング・システムのアプリケーションによって使用されるデータ・オブジェクト、あるいはその組合せなど）をキャッシュする実施形態を包含するということが、当業者によって理解されるであろう。
【００３０】
実施形態では、データは、メイン・メモリなどのメモリ内の特定の位置に関連付けられた特定のデータ量（例えば、１２８バイトまたは２５６バイト）の「キャッシュ・ライン」単位で、キャッシュ内で構造化され得る。プロセッサによって実行される命令のオペランドは、データのキャッシュ・ライン内に含まれる、データのより小さい単位（例えば、４バイト、８バイト、または１６バイト）であることができる。したがって、命令のオペランド・データのコピーをキャッシュに含めるということは、完全なキャッシュ・ライン（すなわち、キャッシュ・ライン内のデータ）のコピーをキャッシュに含めるということを、含むことができる。本明細書において使用されるとき、「キャッシュ・ライン」とは、参照の文脈から明らかであろうように、データのキャッシュ・ラインに対応するメモリ内またはキャッシュ内あるいはその両方の位置、ならびにそのキャッシュ・ライン内に格納されたデータのことを、交換可能なように指す。
【００３１】
プロセッサは、特定のキャッシュ・ライン内のメモリ位置を参照する命令をプロセッサが実行するときなどに、キャッシュ・ラインのコピーがローカル・キャッシュに含まれているかどうかを決定することができる。プロセッサが、キャッシュ・ラインのコピーをローカル・キャッシュ内に格納（「キャッシュ」）している場合、プロセッサは、キャッシュ・ラインのキャッシュされたコピー内からのデータを使用できる。プロセッサが、キャッシュ・ラインのキャッシュされたコピーを含んでいない場合、プロセッサは、「キャッシュ・ミス」を招くことがある。キャッシュ・ミスに応答して、プロセッサは、キャッシュ・ラインを、対応するメモリ位置から、別のキャッシュから、またはキャッシュ・ラインの有効な（例えば、変更されていないか、また代替として、直前に変更された）コピーをローカル・キャッシュに含んでいる別のプロセッサから、あるいはその組合せからフェッチすることができる。
【００３２】
実施形態では、複数のプロセッサが、メモリ内の同じキャッシュ・ライン内のデータを使用する（すなわち、共有する）ことができる。例えば、対称型マルチプロセッシング（ＳＭＰ：Symmetric Multi-Processing）コンピューティング・システムの実施形態は、複数のプロセッサ上でプログラムを実行することができ、異なるプロセッサが、メイン・メモリ内の同じキャッシュ・ラインに格納されたデータ、またはキャッシュ・ラインのキャッシュされたコピー（すなわち、キャッシュ・メモリに格納されたデータのキャッシュ・ラインのコピー）にアクセスするプログラムを実行することができる。
【００３３】
本明細書において使用されるとき、「プロセッサ」とは、例えば、パイプライン型プロセッサまたはマルチサイクル・プロセッサあるいはその両方、グラフィックス・プロセッシング・ユニット（ＧＰＵ：graphical processing units）、またはニューラル・ネットワーク、あるいはその組合せを含む、キャッシュに格納されたデータを使用するか、または使用することができるコンピューティング・デバイスの任意の形態または構成あるいはその両方のことを指す。また、本明細書において使用されるとき、「コンピューティング・システム」とは、１つまたは複数のキャッシュに格納されたデータを利用するプロセッサを採用しているコンピューティング・システムのことを指す。しかしこれは、実施形態を制限するよう意図されておらず、本開示の範囲内で、実施形態がプロセッサのその他の種類またはアーキテクチャあるいはその両方を採用できるということが、当業者によって理解されるであろう。
【００３４】
実施形態では、コンピューティング・システム内の２つ以上のプロセッサが、同じキャッシュ・ラインのコピーをローカル・キャッシュ内に含むことができる。例えば、実施形態は、共有されたメモリ位置を含むことができ、それらのメモリ位置は、同じであるか、または同じキャッシュ・ラインに含まれるメモリ位置であることができ、異なるプロセッサ上で実行される異なるプログラムまたは特定のプログラムの異なる部分によって使用され得る。複数のプロセッサが、キャッシュ・ラインのそれらの個別のコピーに格納されたデータを、そのコピーからデータを読み取るが変更しない（すなわち、キャッシュ・ラインを読み取り専用の目的で使用する）などのために、同時に使用することができる。実施形態では、読み取り専用の目的で（キャッシュ・ラインを使用しているすべてのプロセッサのうちの）複数のプロセッサによって共通して使用されるキャッシュ・ラインは、関連する「共有」状態を有することができ、キャッシュ・ラインが共有状態を有している間、複数のプロセッサのいずれかが、そのキャッシュ・ラインのコピーを各プロセッサのローカル・キャッシュに含むことができる。さらに、実施形態では、同じキャッシュ・ラインのコピーを含んでいるプロセッサがそのキャッシュ・ラインを変更しない場合、プロセッサの各々がそのキャッシュ・ライン内のデータを使用している間、キャッシュ・ラインのすべてのコピーが有効なままであることができる。しかし、そのキャッシュ・ラインのコピーを含んでいるいずれかのプロセッサがそのコピー内のデータを変更する場合、他のすべてのプロセッサは、そのキャッシュ・ラインの無効な（例えば、変更されていない）コピーを含む。
【００３５】
実施形態は、２つ以上のプロセッサによって使用される可能性がある特定のキャッシュ・ラインに対する排他的権限（または「排他性」）を有することを、特定のプロセッサ（本明細書では「制御」プロセッサと呼ばれる）に許可することができる。実施形態では、キャッシュ・ラインに対して排他性を有するプロセッサは、キャッシュ・ラインの状態を共有から「排他的」に変更することができる。一部の実施形態では、キャッシュ・ラインが排他的状態を有している間、制御プロセッサは、ローカル・キャッシュ内のそのキャッシュ・ライン内のデータを変更することができる。
【００３６】
実施形態では、制御プロセッサによって排他的状態に保たれているキャッシュ・ラインに対する別のプロセッサによるキャッシュ・ライン・フェッチ要求は、本明細書において「介入」と呼ばれる状態を引き起こすことができる。介入は、一部の実施形態では、制御プロセッサに、キャッシュ・ラインの状態を排他的から共有に（例えば、読み取り／書き込みから読み取り専用に）変更する（または「降格する」）こと、キャッシュ・ラインを要求元プロセッサ（および、任意選択的に別のキャッシュまたはメモリ）に転送すること、または制御プロセッサのローカル・キャッシュ内のキャッシュ・ラインのコピーを無効化すること、あるいはその組合せを実行させることができる。キャッシュ内のキャッシュ・ラインを「無効化する」ことは、プロセッサに、そのキャッシュ・ラインに含まれているデータのさらなる使用を、そのデータがプロセッサのローカル・キャッシュ内に存在しているときに、抑制する（例えば、遅延させるか、または中止する）ことと、代わりに、そのキャッシュ・ライン内のデータを使用する任意の動作のために、そのキャッシュ・ラインを新たにフェッチすることとを、実行させることができる。
【００３７】
キャッシュ・ライン・フェッチ要求を満たすなどのために、キャッシュ・ラインをあるプロセッサから別のプロセッサに（または別のキャッシュもしくはメモリに、あるいはその両方に）転送することは、コンピューティング・システム内のオーバーヘッドを伴うことがあり、このオーバーヘッドが、プロセッサまたはコンピューティング・システム全体あるいはその両方の性能に対して悪影響を与えることがある。キャッシュ・ライン転送のオーバーヘッド（以下では、「オーバーヘッド」と呼ぶ）の例としては、キャッシュ・ラインを転送するための増加した相互接続の利用（例えば、バス、プロセッサ間リンク、またはメモリ間リンク、あるいはその組合せの利用）、要求元プロセッサがキャッシュ・ラインを使用する１つまたは複数の命令の実行を完了するための（転送の完了を待つ）増加した命令実行待ち時間、転送を管理および実行するための、制御プロセッサおよび要求元プロセッサのうちの１つまたは両方における増加したプロセッサまたはキャッシュあるいはその両方の利用などが挙げられる。オーバーヘッドの影響は、プロセッサ間の距離（例えば、介在するメモリ要素または相互接続（バスおよびリンクなど）あるいはその両方の数）が増えるにつれて、増加する可能性がある。オーバーヘッドの影響は、パイプライン型プロセッサなどの、特定のタイプのプロセッサにおいて増加する可能性がある。
【００３８】
複数のプロセッサによって頻繁に使用される（すなわち、高度な競合が存在する）キャッシュ・ラインは、「ホット」キャッシュ・ラインと呼ぶことができる。実施形態では、ホット・キャッシュ・ラインを検出し、ホット・キャッシュ・ラインに関連するオーバーヘッドを防ぐか、または減らすためのアクションを実行することによって、プロセッサまたはコンピューティング・システムあるいはその両方の性能を改善できる。したがって、本開示の方法およびシステムは、可能性のあるホット・キャッシュ・ラインおよび確認されたホット・キャッシュ・ラインを検出して、それらのキャッシュ・ラインを含んでいる動作のアクションを抑制し（例えば、遅延させるか、または中止し）、ホット・キャッシュ・ラインの転送を防ぐか、もしくは減らすこと、またはホット・キャッシュ・ラインを使用しているか、もしくはホット・キャッシュ・ラインに依存している命令のプロセッサの実行を改善し、プロセッサ間のキャッシュ・ラインの転送に関連するオーバーヘッドを防ぐか、もしくは減らすこと、あるいはその両方のことを行い、それによって、プロセッサまたはコンピューティング・システムあるいはその両方の性能を改善する。同様に、本開示の方法およびシステムは、コンピューティング・システム内で可能性のあるホット・データ・オブジェクトおよび確認されたホット・データ・オブジェクトを検出して、それらのデータ・オブジェクトを含んでいる動作のアクションを抑制し（例えば、遅延させるか、または中止し）、ホット・データ・オブジェクトの転送を防ぐか、もしくは減らすこと、またはホット・キャッシュ・オブジェクトを使用しているか、もしくはホット・キャッシュ・オブジェクトに依存しているアプリケーションの性能を改善し、アプリケーションのキャッシュ間のデータ・オブジェクトの転送に関連するオーバーヘッドを防ぐか、もしくは減らすこと、あるいはその両方のことを行い、それによって、コンピューティング・システムの性能を改善する。
【００３９】
本開示はそのようなアプリケーションに必ずしも限定されないが、この文脈を使用するさまざまな例の説明を通じて、本開示のさまざまな態様が理解されてよい。
【００４０】
図１は、さまざまな実施形態に従ってプロセッサの処理要素になることができるプロセッサ・コアの例を示している。例を説明する目的で、ただし実施形態を制限するよう意図されずに、コア１１０は、ＳＭＰコンピューティング・システム内のパイプライン型プロセッサであると考えられ得る。コア１１０は、命令パイプライン１１４および処理スレッド１１６Ａ〜１１６Ｄ（「スレッド１１６」と総称される）を備えている。実施形態では、スレッド１１６は、例えば、コア１１０によって実行される命令の特定のシーケンスの実行コンテキスト（例えば、さまざまな状態または属性あるいはその両方）をそれぞれ記録する。
【００４１】
実施形態では、プロセッサ・コアは、プロセッサ・チップのコンポーネントであることができ、このチップは、同じタイプまたは異なるタイプの複数のコアを含むことができる。実施形態は、１つまたは複数のプロセッサ・チップをプロセッサ・モジュールに含むことができる。本明細書において使用されるとき、ローカル・キャッシュを含んでいる「プロセッサ」に加えて、「プロセッサ」とは、スレッド、コア、チップ、モジュール、または任意のその他の構成、あるいはその組合せのいずれかのことを、交換可能なようにさらに指している。
【００４２】
実施形態では、パイプライン１１４などの命令パイプラインは、コア１１０などのプロセッサが、実行のさまざまな各段階で複数の命令を同時に実行できるようにする。説明のために、パイプライン１１４は、例示的なパイプライン１５０などの命令パイプラインのインスタンスであることができる。パイプライン１５０は、プロセッサが複数の命令または単一の命令の一部を同時に実行するために、複数の命令処理ユニットを備えている。図１は、フェッチ段Ｆ１〜Ｆ４を備えているフェッチ・ユニット１６０と、デコード段Ｄ１〜Ｄ４を備えているデコード・ユニット１６２と、発行段Ｉ１〜Ｉ４を備えている発行ユニット１６４と、実行段Ｅ１〜Ｅ４を備えている実行ユニット（実行／Ｌ１）１６６と、完了段Ｃ１〜Ｃ４を備えている命令完了ユニット（完了／拒否）１６８とを備えているように、パイプライン１５０を示している。
【００４３】
４つの段をそれぞれ含んでいる５つのユニットを備えている例示的なパイプライン１５０が示されているが、これは、実施形態を制限するよう意図されていない。実施形態は、図１のパイプライン１５０の例と比較して、実行パイプライン内に追加の（または、より少ない）ユニットを含むことができ、各ユニット内に追加の（または、より少ない）段を含むことができる。「深い」パイプラインは、図１の例に示されているものより多いパイプラインのユニット、または１ユニット当たりの段、あるいはその両方を含むことができる、プロセッサのパイプラインの例である。
【００４４】
実施形態では、コアによって実行されている命令は、１５０などの命令パイプライン内を連続的に進むことができる。フェッチ・ユニット１６０は、フェッチ段Ｆ１〜Ｆ４を使用して、実行用の複数の命令をフェッチすることができる。例えば、フェッチ・ユニット１６０によってフェッチされた命令は、デコード段Ｄ１〜Ｄ４を使用する同時デコードのために、デコード・ユニット１６２に進むことができる。デコードされた命令は、実行のために、発行ユニット１６４の発行段Ｉ１〜Ｉ４を介して発行され得る。発行された命令は、実行ユニット１６６に進むことができ、実行段Ｅ１〜Ｅ４が、算術論理演算ユニット（ＡＬＵ：Arithmetic Logic Unit）もしくはその他の計算ユニットの動作の実行、または命令のメモリのオペランドの読み込みもしくは格納、あるいはその組合せなどの、それらの発行された命令の特定の実行アクションを実行することができる。完了／拒否ユニット１６８の完了段Ｃ１〜Ｃ４は、パイプライン１５０の他のユニットからの命令を完了するか、またはフラッシュもしくは終了するか、あるいかその組合せを実行することができる。実施形態では、パイプライン型プロセッサは、命令パイプラインを備えているユニットの段を用いて、複数の命令または命令の一部を同時に処理することができる。
【００４５】
実施形態は、非パイプライン型プロセッサ（例えば、マルチサイクル・プロセッサ）を利用することができ、それらのプロセッサは、ローカル・キャッシュを含むことができる。あるオペランドがローカル・キャッシュ内でキャッシュされていない場合、プロセッサは、キャッシュ・ミス処理を開始できる。そのような非パイプライン型の実施形態では、キャッシュ・ミス処理が、それらのオペランドを使用している命令、またはそれらのオペランドを使用している命令の結果に依存することのある命令、あるいはその両方の命令の実行を停止すること、または遅延させることを、さらに含むことができる。
【００４６】
代替の実施形態は、図１に示されているようなパイプライン型プロセッサを利用することができ、ローカル・キャッシュは、命令パイプラインの読み込み／格納ユニットなどの、パイプライン内のユニットのコンポーネントであることができる。例えば、図１では、ローカル・キャッシュＬ１  １５２が、実行パイプ（実行／Ｌ１）１６６内の実行ユニット（または段）Ｅ１のコンポーネントとして示されている。図に示されていないが、実施形態は、ローカル（例えば、Ｌ１）キャッシュをそれぞれ含むことができる命令パイプラインの複数の実行ユニットまたはその他のユニットあるいはその両方を含むことができる。
【００４７】
実施形態では、Ｌ１  １５２は、例示的なキャッシュ１２０によって示されているようなキャッシュのインスタンスであることができる。キャッシュ１２０は、制御ユニットである制御１２６およびメモリ１２２を備えている。メモリ１２２は、キャッシュ・ライン１２４Ａ〜１２４Ｄ（「ライン１２４」と総称される）を含んでおり、これらのキャッシュ・ラインは、実施形態では、コア１１０によって使用されているキャッシュ・ラインのコピーを格納することができる。制御１２６は、実施形態では、ライン１２４の各々の状態または内容あるいはその両方を管理するように動作することができる。
【００４８】
キャッシュは、図１の例ではディレクトリ１２８として示されている、キャッシュ・ディレクトリを含むことができる。実施形態では、キャッシュ・ディレクトリは、キャッシュに格納されているキャッシュ・ラインの識別情報（例えば、メモリ・アドレス、またはメモリ・アドレスのサブセットもしくはハッシュ）を記録することができる。キャッシュ・ディレクトリは、最も近い（または代替として、最も遠い）参照された時間または参照された回数などの、キャッシュに含まれているキャッシュ・ラインに関するその他の情報を含むことができる。キャッシュ・ディレクトリは、キャッシュに格納されたキャッシュ・ラインの各々に関連付けられた状態を含むことができる。そのような状態は、例えば、キャッシュ・ラインが共有状態と排他的状態のいずれを有しているか、キャッシュ・ラインが有効である（例えば、変更されていないか、または直前に変更されたコピーを含んでいる）かどうか、どのプロセッサか（例えば、ローカル・キャッシュが複数のコアによって共有されている場合、プロセッサ・チップ内のどのコアか）、およびキャッシュ・ラインのその他の属性またはキャッシュ内のキャッシュ・ラインの使用率あるいはその両方を含むことができる。
【００４９】
実行段Ｅ１または他の段Ｅ２〜Ｅ４あるいはその両方（または他のユニットの段あるいはその両方）は、キャッシュ・ライン内のデータをいつ使用するか、オペランドがローカル・キャッシュ（１５２など）に格納されているかどうかを、決定することができる。Ｅ１〜Ｅ４のうちの１つの実行段が、オペランドがＬ１  １５２内でキャッシュされていないということを決定した場合、コア１１０の実行段またはその他のコンポーネントが、キャッシュ・ミス処理を開始できる。実施形態では、キャッシュ・ミス処理が、それらのオペランドを使用している命令（または命令の一部）、またはそれらのオペランドを使用している命令の結果に依存することのある命令、あるいはその両方の命令の実行を停止すること、または遅延させることを、さらに含むことができる。
【００５０】
図１は、キャッシュ１２０のインスタンスの例としてＬ１  １５２を示しているが、例示的なキャッシュ１２０のインスタンス、またはキャッシュのその他の実施形態、あるいはその両方が、プロセッサ・コア内の包含に限定されないということ、およびコア１１０内に含まれているか、またはコア１１０の外部にある、コンピューティング・システム内のさまざまなキャッシュのいずれかが、例示的なキャッシュ１２０などのキャッシュのインスタンスになることができるということが、当業者にとって明らかであろう。さらに、例示的なキャッシュ１２０は、４つのキャッシュ・ラインのエントリを含んでいるメモリ１２２を示しているが、これは、実施形態を限定するよう意図されていない。
【００５１】
一部の実施形態では、１１０などのプロセッサ・コアが、不規則な順序で、または投機的に、あるいはその両方で、命令または命令の一部を実行できる。不規則な順序での実行は、命令の他の一部またはプログラム内の他の命令の完了を待つために実行を遅延させずに、実行ユニット（または、パイプライン内の実行ユニットもしくはその他のユニットの段）が使用可能になったときにすぐに、プロセッサが命令またはプログラムの一部を実行することを許可できる。このようにして、プロセッサは、そのパイプラインのユニットまたは段あるいはその両方のほとんどまたはすべてをビジーに維持し、計算スループットを改善することができる。
【００５２】
投機的実行は、プロセッサが命令（または命令の一部）の実行を完了するであろうという可能性に基づいて、プロセッサが命令または命令の一部の実行を開始することを許可できる。例えば、プロセッサは、プログラム内の特定の分岐経路に従う１つまたは複数の命令を、その経路を決定する条件テストを実行する前に、プログラムがその分岐を選択する可能性に基づいて、投機的に実行できる。このようにして、プロセッサは、その他の方法ではアイドル状態にある要素（例えば、パイプラインのユニットまたは段あるいはその両方）を利用することができ、他の命令（または命令の一部）の実行が完了したときに、投機的に実行された命令（または命令の一部）の結果を使用できる場合に、より高い計算スループットを達成することができる。
【００５３】
実施形態では、プロセッサ間ネットワークによって、プロセッサ、キャッシュ、またはメモリ、あるいはその組合せを結合できる。プロセッサ間ネットワークの実施形態は、ＳＭＰネットワークを含むことができる。本開示の実施例を説明する目的で、ただし実施形態を制限するよう意図されずに、本明細書では、「ＳＭＰネットワーク」は、コンピューティング・システム内のプロセッサ、メモリ、またはキャッシュ、あるいはその組合せを結合するのに適していると当業者によって理解されるであろうような、ＳＭＰネットワークおよびプロセッサ間ネットワークの任意の代替の形態のことを、交換可能なように指す。
【００５４】
図２は、プロセッサ間ネットワークを介してキャッシュおよびメモリに相互接続された複数のプロセッサを含んでいる例示的なコンピュータを示している。実施形態では、ＳＭＰネットワークが、プロセッサ、キャッシュ、またはメモリ、あるいはその組合せの間で、データまたは論理信号あるいはその両方（例えば、状態インジケータ、プロトコル・コマンド、または応答、あるいはその組合せなど）を交換するように動作することができる。一部の実施形態では、ＳＭＰネットワークは、さまざまなキャッシュまたはプロセッサあるいはその両方のキャッシュ・ラインに格納された特定のメモリ位置を認識できる。
【００５５】
図２に示されているように、コンピュータ２００は、ＳＭＰネットワーク２２０によって相互接続された、プロセッサ・チップ２１０Ａおよびプロセッサ・チップ２１０Ｂ（以下では、「チップ２１０」と呼ぶ）、Ｌ２  ２３０、ならびにメモリ２４０を含んでいる。チップ２１０Ａおよびチップ２１０Ｂは、プロセッサのコア２１２Ａ〜２１２Ｈ（以下では、「コア２１２」と呼ぶ）を含んでいる。本開示を説明する目的で、ただし実施形態を制限するよう意図されずに、コア２１２は、図１のコア１１０に類似するコアであると考えられ、ローカル・キャッシュおよびパイプラインを含むことができる。
【００５６】
やはり本開示を説明する目的で、ただし実施形態を制限するよう意図されずに、Ｌ２  ２３０は、図１のキャッシュ１２０に類似するキャッシュであると考えられ、制御ユニットおよびメモリを含むことができる。コア２１２およびＬ２  ２３０に含まれているキャッシュ、ならびにメモリは、キャッシュ・ラインに構造化され得る。さらに、Ｌ２  ２３０およびメモリ２４０が、図２では単一の要素として示されているが、実施形態では、Ｌ２  ２３０またはメモリ２４０あるいはその両方が、さまざまな数またはタイプあるいはその両方のメモリ、あるいはメモリに含まれているキャッシュ、階層的に接続されたキャッシュもしくはメモリまたはその両方、または互いに並列に接続されたキャッシュもしくはメモリまたはその両方、あるいはその組合せなどのメモリの構成、あるいはその組合せを含むことができるということが、当業者によって理解されるであろう。したがって、本明細書において使用されるとき、「Ｌ１」とは、プロセッサに統合されているか、または含まれているキャッシュの任意の形態のことをさらに指しており、「Ｌ２」とは、ローカル・キャッシュと別のより高いレベルのキャッシュ（例えば、Ｌ３）またはメイン・メモリあるいはその両方との間に接続された、任意の次のレベルのキャッシュ（またはキャッシュの構成または組合せ）のことをさらに指している。
【００５７】
前述したように、メモリまたはキャッシュあるいはその両方を、特定のサイズのキャッシュ・ラインとして構造化することができる。例えば、メモリ２４０をキャッシュ・ラインとして構造化することができ、それらのキャッシュ・ラインのサイズは、例えば１２８バイトであることができる。実施形態では、プロセッサは、ローカル・キャッシュなどのキャッシュを含むことができ、メモリのキャッシュ・ラインに格納されているデータのコピーを、Ｌ１キャッシュに格納することができる。例えば、メモリ２４０はキャッシュ・ライン２４６を含み、キャッシュ・ライン２４６は、位置２４２および２４４にデータをさらに含む。実施形態では、位置２４２または２４４あるいはその両方は、プロセッサによって使用される最小サイズの単位（例えば、１バイト）のデータから、キャッシュ・ライン２４６を含んでいるデータの量（例えば、１２８バイト）まで（このデータの量を含む）の、任意の単位のデータのメモリ２４０内の位置であることができる。
【００５８】
図２の例では、ＳＭＰネットワーク２２０が、接続２２２およびキャッシュ要求−応答２２４を含んでいる。実施形態では、接続２２２は、コア２１０をＬ２  ２３０またはメモリ２４０あるいはその両方と相互接続するように動作することができる。キャッシュ要求−応答２２４は、コンピュータ２００のキャッシュ管理要素（cache management element）を表す。実施形態では、キャッシュ管理要素が、キャッシュ・ライン・フェッチ要求またはキャッシュ・ライン・フェッチ応答あるいはその両方を処理することができる。キャッシュ要求−応答２２４などのキャッシュ管理要素の実施形態は、どのプロセッサまたはキャッシュあるいはその両方がメモリのキャッシュ・ライン（例えば、メモリ２４０のライン２４２）のコピーを含んでいるか、そのようなキャッシュ・ラインの状態（例えば、共有もしくは排他的、または読み取り専用もしくは読み取り／書き込み）、またはプロセッサがキャッシュ・ラインのフェッチに関連する介入を招いたかどうか（およびどのプロセッサが介入を招いたか）、あるいはその組合せについての認識を、さらに含むことができる。
【００５９】
図２の例は、相互接続２１４を用いて接続２２２に接続されているコア２１２、相互接続２１６を用いて接続２２２に接続されているＬ２  ２３０、および相互接続２１８を用いて接続２２２に接続されているメモリ２４０を示している。実施形態では、接続２２２、または相互接続２１４、２１６、および２１８、あるいはその両方は、バス、ポイントツーポイント・リンク、またはクロス・バー・スイッチ、あるいはその任意の組合せもしくは構成を含むことができる。例えば、接続２２２は、クロスバー・スイッチまたはパケット・スイッチであることができ、相互接続２１４、２１６、および２１８は、接続２２２との入力接続または出力接続あるいはその両方を切り替えるために接続された、ポイントツーポイント・リンクであることができる。代替の実施形態では、接続２２２はバスであることができ、相互接続２１４、２１６、および２１８は、接続２２２を含んでいるバスとのバス接続であるか、またはそのようなバスの拡張部分であるか、あるいはその両方であることができる。
【００６０】
他の実施形態では、接続２２２、または相互接続２１４、２１６、および２１８、あるいはその両方は、バス、リンク、またはスイッチ、あるいはその組合せを含むことができる。例えば、図に示されていないが、２１２Ａ〜２１２Ｄなどのプロセッサ・チップのコアが、チップ２１０Ａの内部で（バス、リンク、またはスイッチ、あるいはその組合せなどを用いて）互いに相互接続することができるということ、および相互接続２１４がチップ２１０Ａと接続２２２の間の単一の接続であることができるということは、当業者にとって明らかであろう。接続２２２、ならびにプロセッサ・コア、チップ、モジュール、またはキャッシュおよびメモリ、あるいはその組合せを接続する方式が、バス、リンク、またはスイッチ、あるいはその組合せなどの、当技術分野において知られているような相互接続機構のさまざまなタイプ、組合せ、または構成、あるいはその組合せを含むことができるということ、およびそれらを集中化された要素、分散された要素、カスケード接続された要素、またはネストされた要素、あるいはその組合せとして構成できるということは、当業者にとってさらに明らかであろう。
【００６１】
ＳＭＰネットワークまたはそのコンポーネントあるいはその両方は、複数のキャッシュのうちのキャッシュ・ラインの状態を制御すること、または維持すること、あるいはその両方を行うことができる。説明するために、図２の例では、キャッシュ要求−応答２２４は、ＳＭＰネットワーク内のキャッシュ要求／応答機能を表し、ＳＭＰネットワークを用いて相互接続されたプロセッサ、キャッシュ、またはメモリ、あるいはその組合せの間で、キャッシュ・ライン・フェッチの要求、応答、または介入、あるいはその組合せを処理することに関連付けられ得る。そのような機能は、例えば、プロセッサ、キャッシュ、もしくはメモリ、またはその組合せの間で、キャッシュ・ライン位置を認識すること、キャッシュ・ライン・フェッチ処理を認識すること、またはキャッシュ・ライン・フェッチ処理に参加すること、あるいはその組合せを含むことができる。一部の実施形態では、プロセッサは、他のプロセッサのキャッシュ・ライン要求の「スヌープ」を実行することができ、このようにして、ミスが生じたキャッシュ・ラインのコピーを含んでいる別のプロセッサを認識することができ、一部の実施形態では、コピーを含んでいることが知られた別のプロセッサに対して、キャッシュ・ライン・フェッチを直接要求することができる。
【００６２】
実施形態は、図２のキャッシュ要求−応答２２４によって示されているような、集中化されたユニット内に、キャッシュ・ライン要求／応答機能を実装することができる。他の実施形態では、キャッシュ・ライン要求／応答機能が、プロセッサ、キャッシュ、またはメモリ、あるいはその組合せの間で分散され得る。実施形態では、１つまたは複数のコアまたはチップあるいはその両方が、一部のキャッシュ・ライン要求／応答機能を実行することができ、１つまたは複数のキャッシュが、他のキャッシュ・ライン要求／応答機能を実行することができる。図２の例を使用すると、コア２１２、またはチップ２１０、または１つまたは複数のキャッシュ（例えば、コア２１２のローカル・キャッシュまたはＬ２  ２３０あるいはその両方）、あるいはその組合せのうちの１つまたは複数が、キャッシュ・ライン要求／応答機能を実行することができる。コア２１２は、各ローカル・キャッシュ内に存在するキャッシュ・ラインの状態をそれぞれ維持することができ、Ｌ２  ２３０またはキャッシュ要求−応答２２４あるいはその両方も、コア２１２のさまざまなローカル・キャッシュ内にキャッシュされているキャッシュ・ラインの認識または状態あるいはその両方を維持することができる。コア２１２またはＬ２  ２３０あるいはその両方は、各ローカル・キャッシュ内またはＬ２  ２３０内あるいはその両方に存在するキャッシュ・ラインの状態を維持することができ、一方、キャッシュ要求−応答２２４は、コア２１２の間で、プロセッサに向けられたキャッシュ・ライン・フェッチに関連付けられた介入を受信すること、または処理すること、あるいはその両方を行うことができる。
【００６３】
本明細書において使用されるとき、「ＳＭＰネットワーク」とは、全体としてのＳＭＰネットワーク（例えば、ＳＭＰネットワーク２２０）およびＳＭＰネットワークのコンポーネント（例えば、キャッシュ要求−応答２２４）、プロセッサ（例えば、チップ２００またはコア２１２あるいはその両方）、またはキャッシュ・ライン要求および応答に関連付けられた機能を実行して使用されるキャッシュ（例えば、コア２１２のローカル・キャッシュまたはＬ２  ２３０あるいはその両方）、あるいはその組合せのことを、交換可能なように指す。引き続き図２の例を参照すると、ＳＭＰネットワーク２２０は、接続２２２などを用いて、コア２１２、Ｌ２  ２３０、またはメモリ２４０、あるいはその組合せの間で通信をルーティングすることができる。ＳＭＰネットワーク２２０は、コアからのキャッシュ・ライン・フェッチ要求、キャッシュ・ライン・フェッチ応答、または介入通知、あるいはその組合せを受信することができ、それらを、コア２１２、Ｌ２  ２３０、またはメモリ２４０の間でルーティングすることができる。ＳＭＰネットワーク２２０は、特定のキャッシュ・ラインのコピーを含んでいるさまざまなキャッシュ内の位置、またはそれらのキャッシュ・ラインの状態（特定のキャッシュ・ラインが複数のプロセッサ間で共有されているか、または特定のプロセッサによる変更を受けているか、あるいはその両方が行われているかどうかなど）、あるいはその組合せを認識することができる。
【００６４】
実施形態では、プロセッサは、メモリ・キャッシュ・ラインのキャッシュされたコピーを使用して、１つまたは複数の命令に関して、データを操作することができる。例えば、図２を参照すると、コア２１２Ａは、メモリ２４０内の位置２４２でデータを使用する命令を実行することができ、コア２１２Ａのローカル・キャッシュ内のキャッシュ・ライン２４６のコピー内の位置２４２でデータを使用することができる。実施形態では、プロセッサが、命令の処理（例えば、実行）において使用されるそのキャッシュ・ラインに関してキャッシュ・ミスを招いた場合、プロセッサはキャッシュ・ラインのフェッチを開始することができ、このフェッチは、コンピューティング・システム内の別のキャッシュから、またはメモリから、キャッシュ・ラインのコピーを取得することができる。例えば、再び図２を参照すると、コア２１２Ａがキャッシュ・ライン２４６内のデータを使用するが、キャッシュ・ライン２４６のコピーをローカル・キャッシュにまだ含んでいない場合、コア２１２Ａは、キャッシュ・ライン２４６をフェッチするための要求を開始できる。実施形態では、キャッシュ・ラインのフェッチを開始することが、コアがキャッシュ・ラインに関する情報（例えば、メモリ・アドレス、あるいは共有もしくは排他的使用、または代替として読み取り専用もしくは読み取り／書き込みとして要求されているかどうか、あるいはその両方）をＳＭＰネットワークに通信することを含むことができる。代替の実施形態では、キャッシュ・ラインのフェッチを開始することが、コアがキャッシュ・ラインに関する情報を、キャッシュ・ラインの有効なコピーを含んでいることが知られているシステムの別のコンポーネント（例えば、別のコア、キャッシュ、またはメモリ）に直接通信することを含むことができる。
【００６５】
前述したように、実施形態では、一部の環境下で（例えば、キャッシュ・ラインが共有状態を有している場合）、コンピューティング・システム内の複数のプロセッサが、プロセッサの各ローカル・キャッシュ内のキャッシュ・ラインのコピーをキャッシュできる。キャッシュ・ライン・フェッチ要求の処理において、この要求は、コピーを含んでいるプロセッサのうちの１つからキャッシュ・ラインのコピーを提供することによって、満たされ得る。例えば、コア２１２Ａは、キャッシュ・ライン２４６のコピーを要求することができ、コア２１２のうちの別のコアのローカル・キャッシュがキャッシュ・ラインの有効なコピーを含んでいる場合、キャッシュ・ライン２４６のコピーを、そのコアのローカル・キャッシュからコア２１２Ａに転送して、フェッチ要求を満たすことができる。しかし、別のコアがキャッシュ・ライン２４６の有効なコピーを含んでいないが、Ｌ２  ２３０が有効なコピーを含んでいる場合、キャッシュ・ライン２４６のコピーを、Ｌ２  ２３０からコア２１２Ａに転送して、フェッチ要求を満たすことができる。コンピューティング・システム内のキャッシュがキャッシュ・ライン２４６の有効なコピーを含んでいない場合、キャッシュ・ライン２４６のコピーを、メモリ２４０からコア２１２Ａに転送して、フェッチ要求を満たすことができる。
【００６６】
図２の例から、プロセッサ、キャッシュ、またはメモリ、あるいはその組合せの間でキャッシュ・ラインを転送することが、それらの要素またはそれらの要素を相互接続している要素（例えば、ＳＭＰネットワーク）あるいはその両方の関連する利用を含んでいるということが、理解され得る。キャッシュ・ラインを転送することは、例えば、キャッシュ・ラインの転送を完了するための待ち時間に関連付けられた命令サイクルの数、データ転送の帯域幅もしくはスループット、または計算の帯域幅もしくはスループット、あるいはその組合せに関して、関連する「オーバーヘッド」を含んでいることがある。実施形態では、オーバーヘッドは、キャッシュ・ラインを転送するためのデータ・バス、プロセッサ間リンク、またはメモリ間リンク、あるいはその組合せの増加した利用、要求元プロセッサがキャッシュ・ラインを使用する１つまたは複数の命令の実行を完了するための（転送の完了を待つ）増加した命令実行待ち時間、転送を管理および実行するための、増加したプロセッサまたはプロセッサ内のキャッシュあるいはその両方の利用を含んでいることがある。
【００６７】
転送待ち時間（フェッチ要求に従ってキャッシュ・ラインを受信するために必要な時間）は、フェッチ要求を満たすためにどの要素（例えば、特定のキャッシュまたはメモリ）がキャッシュ・ラインのコピーを提供するかに基づいて、増加する可能性がある。例えば、キャッシュ・ラインを、異なるチップ内のコアから、またはプロセッサに局在していない別のキャッシュから転送することは、キャッシュ・ラインを同じチップ内のコアまたは要求元プロセッサに近い（少ない相互接続を有する）キャッシュから転送することと比べて、非常に多い待ち時間を含んでいることがある。多い転送待ち時間は、プロセッサが、動作を実行するため、またはそのキャッシュ・ライン内のデータを使用する命令を完了するために、より長く待つことを引き起こすことがあり、それによって、プロセッサの性能が低下する可能性がある。例えば、プロセッサのローカル・キャッシュに含まれていないデータをフェッチすることは、数百または数千という多くのプロセッサ実行サイクルに相当し得る。
【００６８】
実施形態では、キャッシュ・ラインが複数のプロセッサによって使用される場合、プロセッサは、そのキャッシュ・ライン内のデータを使用するときに、プロセッサ間でそのキャッシュ・ラインの転送を要求することができる。一部の環境下では、制御プロセッサがキャッシュ・ラインを含むことができ、別のプロセッサがそのキャッシュ・ラインを要求できる。キャッシュ・ラインを転送することによって介入を引き起こすことができ、この介入はさらに、制御プロセッサがその後、そのキャッシュ・ラインの使用を完了する（例えば、そのキャッシュ・ラインを使用する１つまたは複数の命令の実行を完了する）ためにキャッシュ・ラインを再フェッチしなければならなくなるように、制御プロセッサに、そのキャッシュ・ラインの使用（例えば、そのキャッシュ・ライン内のデータの変更）を完了する前に、そのキャッシュ・ラインを降格または無効化させることができる。
【００６９】
その他の環境下では、プロセッサは、共有状態を有するキャッシュ・ラインのコピーを含むことができ、別のプロセッサが、そのキャッシュ・ラインに対する排他性を取得して、制御プロセッサになることができる。例えば、実施形態では、フェッチがキャッシュ・ラインの変更に関連付けられていることを示す、プロセッサによるキャッシュ・ラインのフェッチは、無効化通知を含むことができる。実施形態は、無効化指示をすべてのプロセッサに（例えば、ブロードキャストとして）通信するか、キャッシュ・ラインのコピーを含んでいることが知られているすべてのプロセッサに（例えば、マルチキャストとして）通信するか、またはコピーを含んでいることが知られている特定のプロセッサに通信することができる。これは、介入の別の形態をもたらすことができ、プロセッサがそのキャッシュ・ラインに対する排他性を取得することの結果として、そのキャッシュ・ラインのコピーを含んでいる他のプロセッサは、それらのコピーを無効化しなければならない可能性がある。キャッシュ・ラインのそれらのコピーを無効化することによって、プロセッサはその後、そのキャッシュ・ラインを再フェッチすることが必要になることがある。キャッシュ・ラインをそれらのプロセッサに再び転送することは、そのキャッシュ・ラインに関連するオーバーヘッドを著しく増やす可能性がある。さらに、このように、これらのプロセッサのうちの１つまたは複数がキャッシュ・ラインを再フェッチすることは、場合によっては制御プロセッサがそのキャッシュ・ラインの使用を完了する前に、制御プロセッサに、そのキャッシュ・ラインを降格または無効化させることができ、さらに、制御プロセッサがそのキャッシュ・ラインを再フェッチすることを引き起こす。
【００７０】
したがって、キャッシュ・ラインを使用している複数のプロセッサに関連するキャッシュ・ライン・フェッチを減らすことは、プロセッサまたはコンピューティング・システム全体あるいはその両方の性能にとって有利であり得る。特に、キャッシュ・ラインをフェッチすることに関連する介入は、そのキャッシュ・ラインがホット・キャッシュ・ラインであることの指示であり得る。下で説明されているように、実施形態は、介入イベントを利用して、キャッシュ・ラインを、可能性のあるホット・キャッシュ・ラインまたは確認されたホット・キャッシュ・ラインとして識別できる。そのような識別に基づいて、実施形態は、可能性のあるホット・キャッシュ・ラインまたは確認されたホット・キャッシュ・ラインを使用することに関連するアクションを実行して、そのようなキャッシュ・ラインのフェッチを減らし、それによって、前述した関連する性能上の優位性を得ることができる。
【００７１】
図３は、実施形態に一致して、ただし制限するよう意図されずに、プロセッサ間の例示的な介入を示している。本開示を説明する目的で、図３は、図２のコンピュータ２００のサブセットを使用して例を説明している。図２のコア２１２Ａおよび２１２Ｅが図３に示されており、それぞれ、ローカル・キャッシュＬ１  ３０２Ａおよび３０２Ｂを含んでいる。例示的な介入を説明するために、図３では、Ｌ１  ３０２Ｂ内でキャッシュされた（例えば、格納された）メモリ２４０のキャッシュ・ライン３０４のコピーをライン３０４Ｅとして含んでいる、コア２１２Ｅが示されており、コア２１２Ｅは、キャッシュ・ライン３０４に対する排他性を有していると考えられる。
【００７２】
コア２１２Ａは、キャッシュ・ライン３０４に関して（例えば、１つまたは複数の命令を実行することに関連する）キャッシュ・ミスを招く可能性があり、３０５で、コア２１２Ａは、キャッシュ・ライン３０４をフェッチすることの要求をＳＭＰネットワーク２２０に通信する。ＳＭＰネットワーク２２０は、コア２１２Ｅがキャッシュ・ライン３０４のコピーを含んでいることを認識することができ、３０６で、ＳＭＰネットワーク２２０は、Ｌ１  ３０２Ｂに格納されているライン３０４Ｅとして、キャッシュ・ライン３０４のコピーを取得できる。
【００７３】
前述したように、実施形態では、キャッシュ・ラインを制御プロセッサからフェッチすることが、制御プロセッサに対する介入を引き起こすことができる。実施形態は、フェッチが介入を引き起こしたことの指示を、キャッシュ・ライン・フェッチ応答内に、またはキャッシュ・ライン・フェッチ応答と共に、含めることができる。引き続き例示的なフローを参照すると、３０７で、コア２１２Ｅが、キャッシュ・ライン３０４のコピーであるライン３０４ＥをＳＭＰネットワーク２２０に提供し、コア２１２Ｅは、３０７で、フェッチがコア２１２Ｅに対する介入を引き起こしたことをＳＭＰネットワーク２２０に示すことができる。
【００７４】
３０８で、ＳＭＰネットワーク２２０は、３０５でのキャッシュ・フェッチ要求に対する応答をコア２１２Ａに通信する。コア２１２Ａへのこの応答は、コア２１２Ｅからライン３０４Ｅとして取得されたキャッシュ・ライン３０４のコピーを含むことができる。次にコア２１２Ａは、キャッシュ・ライン３０４のコピーをライン３０４ＡとしてＬ１  ３０２Ａに格納することができる。実施形態では、３０８での応答は、コア２１２Ｅに対する介入に対応する介入通知を含むことができる。代替の実施形態では、コア２１２Ａは、３０５でのフェッチ要求に対する応答とは別に、介入通知を受信することができる。実施形態では、介入通知は、任意選択的に、介入を招いたプロセッサ（例えば、２１２Ｅ）の識別情報を含むことができる。
【００７５】
一部の実施形態では、介入を受けているプロセッサ（例えば、コア２１２Ｅ）またはＳＭＰネットワークあるいはその両方が、介入の指示を複数のプロセッサに通信（例えば、ブロードキャストまたはマルチキャスト）できる。代替として実施形態では、プロセッサが、他のプロセッサの要求または応答あるいはその両方をスヌープし、キャッシュ・ライン・フェッチが別のプロセッサに対して介入を引き起こした（または引き起こした可能性がある）ということを決定できる。例えば、３０７で、コア２１２Ｅは、キャッシュ・ライン３０４に対する介入を受けたということを、複数のプロセッサにブロードキャストすることができる。代替として、例えば、３０７または３０８あるいはその両方で、ＳＭＰネットワーク２２０は、キャッシュ・ライン３０４に対する介入を受けたということを、複数のプロセッサにブロードキャストすることができる。別の例では、別のコア（図３に示されていない）が、３０５で行われたコア２１２Ａのキャッシュ・ライン要求または３０８での応答あるいはその両方をスヌープし、その要求または応答あるいはその両方に基づいて、コア２１２Ｅがキャッシュ・ライン３０４に関して介入を受けたということを決定できる。
【００７６】
別の例示的な介入では、説明のために図３を使用すると、キャッシュ・ライン３０４を、共有状態を有しながら、ライン３０４ＥとしてＬ１  ３０２Ｂに格納することができる。実施形態では、複数のプロセッサが、同じキャッシュ・ライン（例えば、キャッシュ・ライン３０４）のコピーを共有状態と共にローカル・キャッシュに含むことができ、どのプロセッサがキャッシュ・ライン３０４のコピーを提供するべきかを決定するために、さまざまな基準を適用できる。例えば、コア２１２Ｅ以外のコア（図示されていない）がキャッシュ・ライン３０４のコピーを含むことができ、コア２１２Ｅが、他のコアと比較してコア２１２Ａにコピーを転送するためのより少ないアクセス待ち時間を有しているため、コピーを提供するためにコア２１２Ｅを選択することができる。
【００７７】
引き続き例示的な代替の介入を参照すると、３０５で、コア２１２Ａが、キャッシュ・ライン３０４をフェッチして、キャッシュ・ライン３０４に対する排他性を取得する（例えば、キャッシュ・ライン３０４を変更する）ことを要求できる。３０６で、コア２１２Ｅは、キャッシュ・ライン３０４Ｅに対する、キャッシュ・ライン３０４のフェッチに関連する、コア２１２Ａ専用の要求を受信することができ、コア２１２Ｅは、Ｌ１  ３０２Ｂ内のライン３０４Ｅを無効化することに対応する介入を受けることができる。
【００７８】
３０７で、コア２１２Ｅは、介入通知をＳＭＰネットワーク２２０に（または代替として、コア２１２Ａに直接）通信することができる。実施形態では、介入通知は、ライン３０４Ｅを含んでいる応答に含めることができ、または代替として、ライン３０４Ｅを含んでいる応答とは無関係に通信することができる。実施形態では、介入通知は、３０７で、または３０７に関連して、コア２１２Ａに通信され得る。実施形態は、代替として、介入をすべてのプロセッサに通信する（例えば、ブロードキャストする）か、またはプロセッサのサブセット（キャッシュ・ライン３０４のコピーを含んでいるプロセッサのみなど）に（例えば、マルチキャストによって）通信することができる。一部の実施形態では、プロセッサが、他のプロセッサの要求または応答あるいはその両方をスヌープし、そのキャッシュ・ライン専用のキャッシュ・ライン・フェッチが別のプロセッサに対して介入を引き起こした（または引き起こした可能性がある）ということを決定できる。さらに他の実施形態では、専用のキャッシュ・ラインをフェッチすることの要求が、コピーを含んでいるプロセッサに（または代替として、すべてのプロセッサに）向けられた無効化通知を含むことができ、この無効化通知は、受信側プロセッサに、この無効化をキャッシュ・ラインのそれらのコピーに対応する介入に関連付けさせることができる。
【００７９】
実施形態では、図１、図２、および図３の前述の例などにおいて、プロセッサは、キャッシュ・ラインのコピーまたはキャッシュ・ラインに対する排他性あるいはその両方を取得することができるが、そのキャッシュ・ライン内のデータをすぐに使用しないことがある。例えば、プロセッサは、キャッシュ・ライン内のデータの投機的命令実行、または不規則な順序での命令実行、あるいはその両方に使用するために、そのキャッシュ・ラインをフェッチできるが、数百または数千という多くの命令実行サイクルの間、そのキャッシュ・ラインを使用する（例えば、データを読み込むため、または格納するための）動作を完了しないことがある。別の例では、キャッシュ・ラインの使用を完了することは、別の命令の実行結果に依存することがある。一部の環境下では、この他の命令自体が、完了するために数百または数千の命令を必要とし、それが、データをプロセッサ専用のキャッシュ・ラインに格納するのを遅延させることがある。例えば、命令が、キャッシュ内に無い異なるキャッシュ・ラインからデータを読み込んで格納する場合、命令が、完了するために別のプロセッサまたはプログラムのアクションに依存するバリア命令である場合、または命令が、本質的に複雑で長時間続く場合、命令はローカル・キャッシュ内のキャッシュ・ラインの使用を遅延させることがある。
【００８０】
プロセッサがキャッシュ・ラインのローカル・コピー内のデータを使用すること、または使用するのを完了することを遅延させる状況では、プロセッサがそのキャッシュ・ラインの使用を完了する前に、他のプロセッサがそのキャッシュ・ラインを要求する可能性が増すことがある。実施形態は、可能性のあるホット・キャッシュ・ラインを検出することができ、可能性のあるホット・キャッシュ・ラインとしてのキャッシュ・ラインの認識に基づいて、キャッシュ・ラインの不必要なフェッチを防ぐためのアクション（命令の発行アクションまたは実行アクションあるいはその両方を抑制するなど）を実行するか、またはキャッシュ・ライン・フェッチに対する応答のためにより多くの時間を許可するか、あるいはその両方を実行することができる。前述したように、キャッシュ・ラインに関連付けられた介入は、キャッシュ・ラインがホット・キャッシュ・ラインであることを示すことができ、実施形態は、介入通知を有利に利用して、キャッシュ・ラインを可能性のあるホット・キャッシュ・ラインまたは確認されたホット・キャッシュ・ラインあるいはその両方として識別することができる。
【００８１】
図４は、キャッシュ・ラインを可能性のあるホット・キャッシュ・ラインまたは確認されたホット・キャッシュ・ラインあるいはその両方として記録するための例示的な「ホット・ライン・テーブル」構造、およびその例示的な内容を示している。ホット・ライン・テーブル３００は、１つまたは複数のテーブル・エントリ３３０を含んでおり、各テーブル・エントリは、特定のキャッシュ・ライン（「関連するキャッシュ・ライン」）に関連付けられている。実施形態は、ホット・ライン・テーブル３００などのホット・ライン・テーブルを有利に使用して、可能性のあるホット・キャッシュ・ラインを記録することができ、その後、ホット・ライン・テーブルに記録されたキャッシュ・ラインに関連付けられたフェッチまたはその他の動作あるいはその両方を防ぐか、または減らすためのアクションを実行することができる。実施形態では、ホット・ライン・テーブル、または代替として、ホット・ライン・テーブル内の特定のエントリは、特定のプロセッサに関連付けられ得る。実施形態は、関連するキャッシュ・ラインが特定のプロセッサのキャッシュ内でもキャッシュされているかどうかとは無関係に、キャッシュ・ラインを、その特定のプロセッサに含まれているか、またはその特定のプロセッサに関連付けられた、ホット・ライン・テーブルに含むことができる。
【００８２】
引き続きホット・ライン・テーブル３００の例を参照すると、エントリ３３０の各々は、関連するキャッシュ・ラインに関連付けられた情報および可能性のあるホット・ライン状態（hot line status）を含んでいる。ライン・アドレス３１０は、コンピューティング・システム内の関連するキャッシュ・ラインの識別子であることができる。例えば、ライン・アドレス３１０は、関連するキャッシュ・ラインを参照しているアドレス（例えば、メイン・メモリ・アドレス）ビットのサブセットまたはハッシュであることができる。キャッシュ位置３１２は、プロセッサのローカル・キャッシュなどの、特定のキャッシュ内の関連するキャッシュ・ラインの位置の識別子であることができる。例えば、キャッシュ位置３１２は、プロセッサ内のローカル・キャッシュの識別情報、あるいは関連するキャッシュ・ラインが格納されている特定のキャッシュ内の位置のアドレスまたはアドレス・ビットのサブセットもしくはハッシュ、あるいはその両方を含むことができる。実施形態では、タグ３１４は、関連するキャッシュ・ライン内のデータを使用する（または代替として、使用した）命令（プロセッサがその関連するキャッシュ・ラインをフェッチすることを引き起こした最も古い（または最初の）命令など）を識別することができる。タグ３１４は、「無効」であることを示す値を含むことができ、この値は、例えば、現在命令が、そのホット・ライン・テーブルのエントリに対応するキャッシュ・ラインに関連付けられていないことを示すことができる。
【００８３】
ホット・ライン・テーブル３００内のテーブル・エントリ３３０は、「可能性のある」（「Ｐ」）インジケータおよび「確認された」（「Ｃ」）インジケータ（それぞれ、Ｐ３１６およびＣ３１８）をさらに含んでおり、これらのインジケータは、関連するキャッシュ・ラインを可能性のあるホット・キャッシュ・ラインおよび確認されたホット・キャッシュ・ラインとしてそれぞれ識別することができる。図４の例示的なホット・ライン・テーブルを説明する目的で、ただし実施形態を制限するよう意図されずに、Ｐ３１６およびＣ３１８は、「１」の値が論理的真値を含み、「０」の値が論理的偽値を含む、論理ビット（またはフラグ）と見なすことができる。例えば、可能性のある状態および確認された状態は、２ビットの２進数の組合せで表される可能な４つの状態のうちの２つの状態であることができる。可能性のあるホット・キャッシュ・ラインまたは確認されたホット・キャッシュ・ラインあるいはその両方の指示が、論理ビットまたはフラグ以外であることができ、論理的真値および論理的偽値または「１」および「０」以外の関連する値を含むことができるということは、当業者にとって明らかであろう。
【００８４】
実施形態では、キャッシュ・ラインは、そのキャッシュ・ラインのフェッチが１つまたは複数の他のプロセッサに対する介入を引き起こした場合に、可能性のあるホット・キャッシュ・ラインであることができる。ホット・ライン・テーブル３００などのホット・ライン・テーブル内で、「１」に設定されたＰ３１６は、キャッシュ・ラインがホット・ライン・テーブルに含まれている（すなわち、ホット・ライン・テーブルのエントリに格納されたキャッシュ・ラインの属性が、その特定のキャッシュ・ラインに関して有効である）ことを示すことができる。それに応じて、「０」に設定されたＰ３１６は、キャッシュ・ラインがホット・ライン・テーブルに含まれていない（すなわち、ホット・ライン・テーブルのエントリに格納されたキャッシュ・ラインの属性が、どのキャッシュ・ラインに関しても有効でない）ことを示すことができる。
【００８５】
実施形態では、キャッシュ・ラインは、プロセッサがそのキャッシュ・ラインをローカル・キャッシュに含んでおり、そのキャッシュ・ラインが可能性のあるホット・キャッシュ・ラインとしてすでに識別されており（すなわち、Ｐ３１６が「１」に設定されたエントリをテーブルに含んでいる）、プロセッサがそのキャッシュ・ラインに関して介入を受けている（例えば、別のプロセッサがそのキャッシュ・ラインのフェッチを発行した）場合に、確認されたホット・キャッシュ・ラインであることができる。実施形態では、論理的真（例えば、「１」）値を含んでいるＣ３１８は、関連するキャッシュが確認されたホット・キャッシュ・ラインであることを示すことができる。プロセッサが確認されたホット・キャッシュ・ライン内のデータを使用する（例えば、命令の実行が、そのキャッシュ・ライン内のオペランドを参照する）ときに、実施形態は、キャッシュ・ラインが確認されたホット・キャッシュ・ラインであることに基づいて、特定のアクション（本開示においてさらに詳細に説明される）を実行できる。
【００８６】
実施形態は、キャッシュ・ライン・フェッチを引き起こした命令のタイプを追跡できる。図４は、タイプ・インジケータＴ３２０を含んでいるホット・ライン・テーブル３００のエントリを示している。実施形態では、タイプ・インジケータは、例えば、命令（例えば、タグ３１４として記録された命令）が、キャッシュ・ラインからデータを読み込むため、または代替として、キャッシュ・ラインにデータを書き込むためにキャッシュ・ライン・フェッチを引き起こしたことを示すことができる。実施形態では、タイプ・インジケータは、キャッシュ・ラインをフェッチすることに関連付けられた命令（または、命令のプロセッサ実行）の他の態様を含むことができる。例えば、タイプ・インジケータは、命令がキャッシュ・ラインを読み取るまたは書き込むかどうかだけでなく（または、その代わりに）、キャッシュ・ラインが命令の投機的実行または代替として不規則な順序での実行に関してフェッチされたことを、含むことができる。
【００８７】
ホット・ライン・テーブルの実施形態は、テーブルのすべてのエントリが時々または頻繁に可能性のあるホット・キャッシュ・ラインに関連付けられるように、限られた数のエントリを含むことができる。そのような状況では、新しい可能性のあるホット・キャッシュ・ラインを識別するために、実施形態が、ホット・ライン・テーブル内のエントリ（すなわち、キャッシュ・ラインに関連付けられた情報）を、異なる可能性のあるホット・キャッシュ・ラインに関連付けられた情報に置き換えることが必要になる可能性がある。実施形態は、別のキャッシュ・ラインに関連付けられた情報に置き換えるホット・ライン・テーブル内のエントリを選択するために、さまざまな基準を適用できる。
【００８８】
例えば、実施形態は、ホット・ライン・テーブルのエントリに含まれているカウンタを使用して、置き換えるエントリを選択することができる。図４は、使用頻度の基準に従って置き換えるホット・ライン・テーブルのエントリを選択するための例示的なカウンタを示している。ホット・ライン・テーブル３００のエントリ３３０は、例示的なカウンタ（カウント３２２）を含んでいる。一実施形態では、カウント３２２は、例えば、特定のキャッシュ・ラインが、異なる可能性のあるホット・キャッシュ・ラインによって置き換えられる候補になる前に、使用されない（例えば、ホット・ライン・テーブルに関連付けられたプロセッサ上で実行される命令によって参照されない）ままであり続ける命令サイクルの数に対応する、特定の値に初期化され得る。実施形態では、カウンタを初期化することは、キャッシュ・ラインが可能性のあるホット・キャッシュ・ラインであるということを決定すること、またはキャッシュ・ラインが確認されたホット・キャッシュ・ラインであるということを決定すること、あるいはその両方に関連付けられ得る。
【００８９】
単に説明の目的で、ただし実施形態を制限するよう意図されずに、実施形態は、カウント３２２を、（例えば、キャッシュ・ラインに関する情報をホット・ライン・テーブルのエントリに入力するときに）例えば、ある命令サイクル数の倍数に対応する整数値（例えば、３万サイクルに対応する「３」の値）に初期設定する。（より少ない可能性がある）別の命令サイクル数などに対応する一定間隔で、対応するキャッシュ・ラインがプロセッサによって使用されなかった場合、プロセッサは、カウント３２２をある整数値（例えば、「１」）だけデクリメントする。一方、関連するキャッシュ・ラインが介入を受けるたびに（または代替として、特定の回数の各々の後に）、プロセッサはカウント３２２をある整数値（例えば、「１」）だけインクリメントする。実施形態では、プロセッサが新しい可能性のあるホット・キャッシュ・ラインを識別し、ホット・ライン・テーブル内のすべてのエントリがＰ＝１を含んでいる（すなわち、有効な他のホット・キャッシュ・ラインをテーブルに含んでいる）場合、プロセッサは、例えば、最も少ないカウント３２２の値を含んでいるエントリを選択し、そのエントリを新しい可能性のあるホット・キャッシュ・ラインに置き換えることができる。その後、プロセッサは、選択されたホット・ライン・テーブルのエントリを「再初期化」して、新たに識別された可能性のあるホット・キャッシュ・ラインに関連付けることができる。
【００９０】
実施形態では、エントリを再初期化することは、例えば、そのエントリ内のすでに関連付けられている可能性のあるホット・キャッシュ・ラインの属性を、新たに識別された可能性のあるホット・キャッシュ・ラインに関連付けるために、属性に置き換えることを含むことができる。ホット・ライン・テーブルのエントリを再初期化することは、Ｐビットを１に設定する（このエントリがその新しいキャッシュ・ラインに関して有効であることを示す）ことと、Ｃビットを０に設定する（新しいキャッシュ・ラインがホット・キャッシュ・ラインであるとまだ確認されていないことを示す）ことと、カウント・フィールドを初期カウント（または時間）値に再設定することとを、さらに含むことができる。
【００９１】
別の例では、ある時点でカウント３２２が０（または代替として、特定の他の値）になった場合、プロセッサは、ＰビットおよびＣビットを「０」にリセットし、このエントリが現在どのキャッシュ・ラインにも関連付けられておらず（すなわち、どのキャッシュ・ラインに対しても有効でなくなっており）、それに応じて使用可能であるということを示すことができる。実施形態は、新たに識別された可能性のあるホット・キャッシュ・ラインを記録するために、ホット・ライン・テーブル内のエントリのうちで、Ｐ＝０を含んでいるエントリを使用することを優先し、（例えば、すべてのエントリのＰビットが１に設定されている場合に）カウント３２２の最小値を含んでいるエントリを使用することを２番目に優先することができる。
【００９２】
カウント３２２および前述の説明は、ホット・ライン・テーブル内のエントリを再利用するか、または無効化するか、あるいはその両方を実行する方式の例を示しているが、これは、実施形態を制限するよう意図されていない。実施形態が、ホット・ライン・テーブル内の特定のエントリを選択して、新たに識別された可能性のあるホット・キャッシュ・ラインを記録するため、またはそのようなテーブル内のエントリを無効化するため、あるいはその両方のために、さまざまな基準またはホット・ライン・テーブル内のキャッシュ・ラインの属性あるいはその両方を適用できるということが、当業者によって理解されるであろう。例えば、カウント３２２は、代替として時間値であることができ、例えば、関連するキャッシュ・ラインがプロセッサによって使用された最後の（または最新の）時間、または関連するキャッシュ・ラインが介入（または代替として、キャッシュ・ラインに関するプロセッサ間の競合のその他の形態）を受けた最後の（または最新の）時間を表すことができる。したがって、実施形態は、ホット・ライン・テーブル内のエントリを選択して置き換えるために、最長時間未使用の基準を適用できる。
【００９３】
実施形態では、ホット・ライン・テーブル３３０またはその内容あるいはその両方は、複数のプロセッサ間で使用される可能性のあるホット・キャッシュ・ラインまたは確認されたホット・キャッシュ・ラインあるいはその両方を識別するために、複数のプロセッサ（一部のプロセッサであることができ、必ずしもすべてのプロセッサでなくてよい）の各々に含まれているテーブルであることができる。代替の実施形態では、ホット・ライン・テーブルの特定のエントリが、特定のプロセッサおよび特定の（関連する）キャッシュ・ラインに関連付けられ得る。例えば、ホット・ライン・テーブル内のエントリは、関連するキャッシュ・ラインのフェッチを引き起こしたプロセッサの識別情報をさらに含むことができる。ホット・ライン・テーブルは、ＳＭＰネットワークに含まれることができ、次にこのＳＭＰネットワークは、ホット・ライン・テーブルのエントリ内のプロセッサ識別情報を利用できる。さらに他の実施形態では、ホット・ライン・テーブルの要素が、プロセッサまたはコンピューティング・システムあるいはその両方の他の構造またはコンポーネントあるいはその両方に組み込まれ得る。例えば、ホット・ライン・テーブルのＣインジケータ、Ｐインジケータ、Ｔインジケータ、またはカウントあるいはその組合せを、（例えば）プロセッサのローカル・キャッシュまたはＬ２キャッシュなどのキャッシュに組み込むことができ、ホット・ライン・テーブルは、キャッシュ・ラインに関連付けられたライン・アドレス、キャッシュ位置、または命令、あるいはその組合せのみを含むことができ、ホット・ライン・テーブルのエントリの他の要素（例えば、Ｐ、Ｃ、Ｔ、またはカウント、あるいはその組合せ）は、このキャッシュとは別のホット・ライン・テーブルに含まれ得る。
【００９４】
図４の例示的なホット・ライン・テーブル３００は、本開示を説明することのみを目的としており、実施形態を制限するよう意図されていない。実施形態が、可能性のあるホット・キャッシュ・ラインを、さまざまな代替構造で、ホット・ライン・テーブルのエントリ３３０によって示された例示的なホット・ライン・テーブルのエントリにおいて示されたキャッシュ・ライン以外のキャッシュ・ラインのさまざまな属性を含めて記録できるということは、当業者にとって明らかであろう。したがって、本明細書において使用されるとき、ホット・ライン・テーブルまたはホット・ライン・テーブルのエントリあるいはその両方への参照は、当技術分野において知られていて、可能性のあるホット・キャッシュ・ラインおよびその属性を記録するのに適している構造などの、プロセッサまたはコンピューティング・システムあるいはその両方に含まれているか、または関連付けられている、テーブル以外の構造を一般的に指していると理解される。
【００９５】
図５は、可能性のあるホット・キャッシュ・ラインを識別するための例示的な方法５００を示している。例示的な方法を説明する目的で、方法５００の説明において、「ローカル・プロセッサ」は、図１のコア１１０のプロセッサに類似するプロセッサを指しており、図１のキャッシュ１２０のローカル・キャッシュに類似するローカル（例えば、Ｌ１）キャッシュを含んでおり、図４のホット・ライン・テーブル３００の例に従ってホット・ライン・テーブルを含んでいる。しかしこれは、実施形態を制限するよう意図されていない。実施形態は、例示的なコア１１０のプロセッサ以外のさまざまなプロセッサまたはキャッシュ１２０の例のキャッシュ以外のキャッシュあるいはその両方を採用できるということが、当業者によって理解されるであろう。さらに、前述したように、図４の例に含まれているようなホット・キャッシュ・ラインの属性、またはコンピューティング・システム内（例えば、プロセッサ内、キャッシュ内、またはＳＭＰネットワーク内、あるいはその組合せ）のそれらの属性の配置もしくは処理またはその両方、あるいはその組合せは、方法５００の例を説明するために使用されたローカル・プロセッサおよびホット・ライン・テーブル以外のさまざまな実装において具現化され得るということが、当業者にとって明らかであろう。
【００９６】
５０２で、ローカル・プロセッサが、ローカル・プロセッサのローカル・キャッシュに格納されていない「ミスが生じたキャッシュ・ライン」のキャッシュ・ライン・フェッチを開始する。実施形態では、キャッシュ・ライン・フェッチは、例えば、ローカル・プロセッサが、ミスが生じたキャッシュ・ライン内のデータを参照する命令または命令の一部を実行すること（この実行は、通常の連続的実行、または代替として、投機的実行もしくは不規則な順序での実行に従うことができる）の結果であることができる。
【００９７】
５０４で、ローカル・プロセッサが、キャッシュ・ライン・フェッチに対する応答を受信する。実施形態では、この応答は、ミスが生じたキャッシュ・ラインを含むことができ、ミスが生じたキャッシュ・ラインのフェッチが別の「リモート」プロセッサに対する介入を引き起こしたということの通知（例えば、フラグ）をさらに含むことができる。したがって、５０６で、ローカル・プロセッサが、ミスが生じたキャッシュ・ラインをフェッチすることの要求がリモート・プロセッサに対する介入を引き起こしたかどうかを決定する。そのような介入を引き起こした場合、５０８で、ローカル・プロセッサが、ミスが生じたキャッシュ・ラインがホット・ライン・テーブル（例えば、プロセッサまたは代替としてコンピューティング・システムの１つまたは複数の他のコンポーネントに含まれているホット・ライン・テーブル）に含まれているかどうかを決定する。
【００９８】
５０８で、ローカル・プロセッサが、ミスが生じたキャッシュ・ラインがホット・ライン・テーブルに含まれていないということを決定した場合、ローカル・プロセッサ（または、ホット・ライン・テーブルを管理しているコンピューティング・システムの別のコンポーネント）が、欠落しているキャッシュ・ラインに関連して、ホット・ライン・テーブル内にエントリを作成する。実施形態では、ホット・ライン・テーブルは、一定数のエントリであることができ、エントリをテーブル内に「作成する」ことは、図４の例示的なホット・ライン・テーブルに関して前述されているように、使用されていないエントリを見つけること、またはテーブル内の別のエントリを置き換えることを含むことができる。代替の実施形態では、テーブル内のエントリの数は可変であることができ、ミスが生じたキャッシュ・ラインに関するエントリを作成することは、例えば、そのエントリを格納するためのストレージをテーブルに追加することを含むことができる。
【００９９】
５１０でエントリをホット・ライン・テーブル内に作成することは、ミスが生じたキャッシュ・ラインの属性（図４の例に示されている属性など）をエントリに格納することを含むことができる。例えば、実施形態では、５１０でエントリを作成することは、図４の例の前述の説明において説明されたホット・ライン・テーブルのエントリを再初期化する方式と同様に、エントリを初期化することを含むことができる。
【０１００】
５１２で、ローカル・プロセッサは、５０２で開始されたフェッチまたは５０４で受信された応答あるいはその両方の処理を完了する。実施形態では、５１２で処理を完了することは、ミスが生じたキャッシュ・ラインをプロセッサのローカル・キャッシュに格納すること、またはホット・ライン・テーブルのエントリをストレージ媒体（例えば、メモリまたは１つまたは複数のプロセッサのレジスタ）に格納すること、あるいはその両方を含むことができる。５１２での完了処理において、実施形態は、（例えば、介入を受けたプロセッサが、その介入を、キャッシュ・ラインを要求しているプロセッサのみに通信した場合に）ミスが生じたキャッシュ・ラインのフェッチが介入を引き起こしたということをＳＭＰネットワークに通知することを含むことができ、この通知は、ローカル・プロセッサまたはリモート・プロセッサあるいはその両方の識別情報を含むことができる。
【０１０１】
５０６で、応答が、ミスが生じたキャッシュ・ラインのフェッチが介入を引き起こしたということを示さない場合、５１２で、ローカル・プロセッサが処理を完了する。実施形態では、この場合に５１２で処理を完了することは、（５０４で、または５０４と連動して受信された）ミスが生じたキャッシュ・ラインのコピーをローカル・プロセッサのローカル・キャッシュに格納することを含み、ホット・ライン・テーブルに関連する処理を省略することができる。
【０１０２】
前述したように、介入は、共有状態にあるキャッシュ・ラインのコピーを含んでいるプロセッサに関連付けることができ、別のプロセッサが、排他的アクセスを伴ってそのキャッシュ・ラインを要求することができる。実施形態では、介入を引き起こしたキャッシュ・ラインのフェッチを要求しなかったプロセッサを含む複数のプロセッサが、介入通知を受信することができる（例えば実施形態は、介入通知を他のプロセッサにブロードキャストまたはマルチキャストすることができる）。したがって、例示的な方法５００の５１４で、プロセッサが、介入を受けた別のプロセッサ（例えば、共有状態にあるキャッシュ・ラインのコピーをやはり含んでおり、フェッチ要求を受信している別のプロセッサ）に関連付けられた介入通知を受信することができる。実施形態では、５１４で、プロセッサは、このプロセッサ（または代替として、ＳＭＰネットワーク）が他のプロセッサによるキャッシュ・ライン・フェッチ要求をスヌープすることの結果として、介入通知を受信できる。それに応じて、実施形態においてプロセッサは、方法５００の５０８〜５１２を実行できる。
【０１０３】
図６は、リモート・プロセッサ上で介入を処理するための例示的な方法６００を示している。例示的な方法６００を説明する目的で、ただし実施形態を制限するよう意図されずに、方法６００が、例示的な方法５００を説明するために使用されるプロセッサと同様のローカル・プロセッサおよびリモート・プロセッサの文脈において説明される。
【０１０４】
６０２で、ローカル・プロセッサが、リモート・プロセッサのミスが生じたキャッシュ・ラインに関連付けられたフェッチ要求を受信する。実施形態では、前述したように、ローカル・プロセッサが、直接通信を用いて、または代替として、ブロードキャストもしくマルチキャスト通信を用いて、リモート・プロセッサから、またはＳＭＰネットワークから、あるいはその両方からなどの、さまざまな方法で、またはさまざまなソースから、あるいはその両方によって、フェッチ要求を受信することができる。
【０１０５】
６０４で、ローカル・プロセッサが、このローカル・プロセッサがミスが生じたキャッシュ・ラインのコピーをローカル・キャッシュに含んでいるかどうかを決定する。ローカル・プロセッサの実施形態は、例えば、ローカル・キャッシュのディレクトリを調べて、このプロセッサがミスが生じたキャッシュ・ラインのコピーを含んでいるかどうかを決定することができる。６０４で、ローカル・プロセッサが、ミスが生じたキャッシュ・ラインのコピーを含んでいる場合、６０６で、ローカル・プロセッサが、このローカル・プロセッサがミスが生じたキャッシュ・ラインに対する排他性を有しているかどうかを決定する。
【０１０６】
６０６で、ローカル・プロセッサが、このローカル・プロセッサがミスが生じたキャッシュ・ラインに対する排他性を有しているということを決定した場合、６０８で、ローカル・プロセッサが、ミスが生じたキャッシュ・ラインが読み取り専用（または共有）として要求されていること、または代替として、読み取り／書き込み（または排他的）として要求されていることを、フェッチ要求が示しているかどうかを決定する。６０８で、ローカル・プロセッサが、ミスが生じたキャッシュ・ラインが読み取り専用（または共有）として要求されているフェッチ要求を決定した場合、６１０で、ローカル・プロセッサが、キャッシュ・ラインに対する排他性を譲り、ミスが生じたキャッシュ・ラインの状態を排他的から共有に「降格」する。代替として、６０８で、ローカル・プロセッサが、ミスが生じたキャッシュ・ラインが読み取り／書き込み（または排他的）として要求されていることをフェッチ要求が示しているということを決定したか、または代替として、ミスが生じたキャッシュ・ラインが読み取り専用（または共有）として要求されていることの指示を受信しなかった場合、６１２で、ローカル・プロセッサが、ミスが生じたキャッシュ・ラインのローカル・キャッシュのコピーを無効化する（例えば、リモート・プロセッサが、ミスが生じたキャッシュ・ラインのコピーを受信した後に、ローカル・プロセッサのコピーが無効になるように、ミスが生じたキャッシュ・ラインを変更することがあるため）。
【０１０７】
６１４で、ローカル・プロセッサが、（例えば、６１２でミスが生じたキャッシュ・ラインを無効化する場合に）ミスが生じたキャッシュ・ラインをリモート・プロセッサに送信または転送し、リモート・プロセッサがミスが生じたキャッシュ・ラインをフェッチすることがローカル・プロセッサに対する介入をもたらしたことを示す介入通知を含める。実施形態では、６１４で、ローカル・プロセッサが、リモート・プロセッサのフェッチ要求を満たすために、ミスが生じたキャッシュ・ラインまたは介入通知あるいはその両方を、リモート・プロセッサに直接通信することができる。代替の実施形態では、ローカル・プロセッサが、ＳＭＰネットワークを用いて、ミスが生じたキャッシュ・ラインまたは介入通知あるいはその両方を通信することができる。例えば、前述したように、ＳＭＰネットワークは、ミスが生じたキャッシュ・ラインまたは介入通知あるいはその両方をローカル・プロセッサから取得することができ、ＳＭＰネットワークは、ミスが生じたキャッシュ・ラインまたは介入通知あるいはその両方をリモート・プロセッサに転送することができる。
【０１０８】
６０６で、ローカル・プロセッサが、このローカル・プロセッサがミスが生じたキャッシュ・ラインに対する排他性を有していないということを決定した場合（例えば、ミスが生じたキャッシュ・ラインが共有または読み取り専用あるいはその両方として使用されている場合）、６１６で、ローカル・プロセッサが、ミスが生じたキャッシュ・ラインが読み取り専用（または共有）として要求されていること、または代替として、読み取り／書き込み（または排他的）として要求されていることを、フェッチ要求が示しているかどうかを決定する。６１６で、ローカル・プロセッサが、ミスが生じたキャッシュ・ラインが読み取り専用（または共有）として要求されていることをフェッチ要求が示しているということを決定した場合、６１８で、ローカル・プロセッサが、介入通知を含まずに、または代替として、介入がローカル・プロセッサに対して発生しなかったということの肯定的指示と共に、このキャッシュ・ラインをリモート・プロセッサに（例えば直接、または代替として、ＳＭＰネットワークを用いて）送信する。代替として、６１６で、ローカル・プロセッサが、ミスが生じたキャッシュ・ラインが変更（例えば、読み取り／書き込み）として要求されていることをフェッチ要求が示しているか、この要求が読み取り専用であるかどうかを示していないか、または代替として、例えば、この要求が要求元プロセッサによるキャッシュ・ラインの排他的状態に対するものであるということを決定した場合、６１２で、ローカル・プロセッサが、ミスが生じたキャッシュ・ラインのローカル・キャッシュのコピーを無効化する（例えば、リモート・プロセッサが、ミスが生じたキャッシュ・ラインのコピーを受信した後に、ローカル・プロセッサのコピーが無効になるように、ミスが生じたキャッシュ・ラインを変更することがあるため）。
【０１０９】
６２０で、ローカル・プロセッサ（またはＳＭＰネットワークあるいはその両方）が、フェッチ要求を受信することに関連付けられた処理を完了する。実施形態では、６２０で、処理を完了することが、例えば、ローカル・プロセッサがミスが生じたキャッシュ・ラインのコピーを降格または無効化することに関連する動作を含むことができる。実施形態は、６２０で、ローカル・プロセッサまたはＳＭＰネットワークあるいはその両方が、ミスが生じたキャッシュ・ラインに関連付けられた状態を更新すること、またはローカル・プロセッサが介入を受けたこと、あるいはその両方を含むことができる。実施形態は、６２０で、ＳＭＰネットワークがミスが生じたキャッシュ・ラインまたは介入通知あるいはその両方をリモート・プロセッサに提供することを含むことができる。
【０１１０】
６０４で、ローカル・プロセッサが、このローカル・プロセッサがミスが生じたキャッシュ・ラインのコピーをローカル・キャッシュに含んでいないということを決定した場合、６２０で、ローカル・プロセッサおよびＳＭＰネットワークあるいはその両方が、フェッチ要求の処理を完了する。実施形態では、この場合、６２０で処理を完了することは、ミスが生じたキャッシュ・ラインのコピーを取得するための別の可能性のあるソース（例えば、別のプロセッサ、キャッシュ、またはメモリ）を決定すること、または代替として、（例えば、別のプロセッサが排他性を有しており、フェッチ要求に応答してその排他性を譲らないため）ミスが生じたキャッシュ・ラインのコピーを使用できないということをリモート・プロセッサに通信することを、含むことができる。
【０１１１】
実施形態では、前述したように、介入は、キャッシュ・ラインがホット・キャッシュ・ラインである可能性があることを示すことができる。したがって、一部の実施形態では、方法６００の６２０で処理を完了することが、ホット・ライン・テーブルを作成または更新することを含むことができる。図７は、プロセッサに対する介入に関連してホット・ライン・テーブルを処理するための例示的な方法７００を示している。単に方法７００を説明する目的で、ただし実施形態を制限するよう意図されずに、この方法は、図５および図６の例を説明するために使用されたローカル・プロセッサおよびリモート・プロセッサの例を使用して説明され、方法７００を説明するために使用されるローカル・プロセッサは、図４のホット・ライン・テーブル３００と同様のホット・ライン・テーブルを含んでいると考えられる。
【０１１２】
７０２で、ローカル・プロセッサが、ミスが生じたキャッシュ・ラインをフェッチすることの要求を受信する。それに応じて、７０４で、ローカル・プロセッサが、ミスが生じたキャッシュ・ラインがローカル・プロセッサのホット・ライン・テーブルに現在入力されているかどうかを決定する。実施形態では、キャッシュ・ラインがホット・ライン・テーブル内にあることを決定することは、キャッシュ・ラインのアドレス（例えば、メモリ内のアドレス）またはミスが生じたキャッシュ・ラインのアドレスのサブセットもしくはハッシュを使用して、ホット・ライン・テーブル内のエントリのインデックスを作成する（すなわち、エントリを選択する）ことを含むことができる。代替の実施形態では、キャッシュ・ラインがホット・ライン・テーブル内にあるということを決定することは、ミスが生じたキャッシュ・ラインの属性を（例えば、ホット・ライン・テーブルを内容アドレス可能なタイプのメモリに格納することによって）ホット・ライン・テーブルのエントリに格納されている属性と比較することを含むことができる。実施形態は、７０４で、ミスが生じたキャッシュ・ラインに一致するエントリのＰビットが「１」に設定されているかどうかを決定することによって、ミスが生じたキャッシュ・ラインがホット・ライン・テーブル内にあるということを決定することができる。
【０１１３】
７０４で、ローカル・プロセッサが、ホット・ライン・テーブルがミスが生じたキャッシュ・ラインに関連付けられたエントリを含んでいるということを決定した場合、７０６で、ローカル・プロセッサが、このエントリがこのキャッシュ・ラインに関連付けられた有効な命令を含んでいるかどうかを決定する。有効な命令を含んでいる場合、７０８で、ローカル・プロセッサが、そのエントリのＣビットを「１」に設定し、このキャッシュ・ラインがホット・キャッシュ・ラインであると確認されたことを示す。実施形態では、命令がプロセッサ内で実行中の命令である（または代替として、まだ保留中の実行である）場合、エントリは有効な命令を含むことができる。例えば、実施形態では、命令は、全体として完了していない場合に、実行中であることができる。
【０１１４】
実施形態では、例えば、命令パイプライン内の１つまたは複数の実行ユニットが命令を処理しているか、または別の例では、命令もしくは命令の一部の実行が、別のイベントまたは条件（別の命令の結果、あるいは他のデータもしくはキャッシュ・ラインまたはその両方のフェッチなど）の完了を待っていて抑制または遅延されている場合に、命令は未完了である（すなわち、全体として完了していない）ことができる。別の例では、命令は、要求されたキャッシュ・ライン内のデータをまだ使用していない場合に、実行中であることができる。代替の実施形態では、７０４で、ローカル・プロセッサが、ミスが生じたキャッシュ・ラインがホット・ライン・テーブル内にあるということを決定した場合、ローカル・プロセッサが、７０６を省略することができ、７０８で、ホット・ライン・テーブルのエントリ内のＣビットを「１」に設定できる。
【０１１５】
７０４で、ローカル・プロセッサが、ローカル・プロセッサが、ミスが生じたキャッシュ・ラインがホット・ライン・テーブル内に無いということを決定した場合、ローカル・プロセッサが、７１０で任意選択的に、要求されたキャッシュ・ラインに関連付けられたエントリをホット・ライン・テーブル内に作成できる。７１０でエントリを作成することは、図４の例の前述の説明において説明されたホット・ライン・テーブルのエントリを再初期化する方式と同様に、エントリを初期化または再初期化することを含むことができる。一部の実施形態では、７１０でエントリを作成することは、エントリ内のＰおよびＣの両方を「１」に設定することを含むことができる。実施形態は、図４のホット・ライン・テーブル３００を参照して説明されたのと同様に、置き換えるためのホット・ライン・テーブル内のエントリを選択できる。
【０１１６】
７１２で、ローカル・プロセッサが処理を完了する。実施形態では、７１２で、処理を完了することが、ローカル・プロセッサによる実行中に命令に対してアクションを実行することを含むことができる。そのようなアクションは、特定の命令、またはローカル・プロセッサに対する介入を受けるキャッシュ・ラインの状態に関連付けられたアクション、あるいはその両方の実行を開始することまたは継続することあるいはその両方に対して、影響を与えることができる。実施形態は、方法６００の６２０などでの処理の完了の態様として、別のプロセッサからの、ミスが生じたキャッシュ・ラインをフェッチすることの要求に関して介入を受けたプロセッサ上で、７０４〜７１２を実行できる。
【０１１７】
図８は、実施形態に一致して、キャッシュ・ライン・ミスを処理するための例示的な方法８００を示している。単に方法８００を説明する目的で、ただし実施形態を制限するよう意図されずに、この方法は、図５、図６、および図７の前述の説明において使用されたプロセッサと同様のローカル・プロセッサおよびリモート・プロセッサの例を使用して説明される。さらに、方法８００を説明する目的で、ただし、やはり実施形態を制限するよう意図されずに、やはり方法７００の例と同様に、ローカル・プロセッサが、図４の例示的なホット・ライン・テーブル３００に従ってホット・ライン・テーブルを含んでいると考えられる。
【０１１８】
図８の８０２で、ローカル・プロセッサがキャッシュ・ミスを招く。実施形態では、このキャッシュ・ミスは、図５の方法５００の動作５０２を参照して説明された条件と同様の条件の結果であることがある。さらに、実施形態では、例示的な方法８００の動作８０２またはその他の動作あるいはその両方が、例示的な方法５００の動作５０２またはその他の動作あるいはその両方と共に実行され得る。方法８００の動作は、方法５００の一部または全部の動作と並列に実行されるか、または方法５００の一部または全部の動作に対して直列に実行され得る。例えば、実施形態では、方法８００は、方法５００の動作５０２の一部として、または代替として、動作５１２の一部として、実行され得る。代替として、方法８００および方法５００または両方の選択動作が、動作８０２によって示されたキャッシュ・ミスに応答して並列に実行され得る。
【０１１９】
方法８００の例を引き続き参照すると、キャッシュ・ライン・ミスに関連して、８０４で、ローカル・プロセッサが、ミスが生じたキャッシュ・ラインがローカル・プロセッサのホット・ライン・テーブルに入力されているかどうかを決定する。実施形態では、例えば、ローカル・プロセッサがミスが生じたキャッシュ・ラインのコピーをローカル・キャッシュに以前に含んでいたことがあり、その後、このキャッシュ・ラインの排他的使用を要求している別のプロセッサに関連する介入を受けた場合に、このキャッシュ・ラインがホット・ライン・テーブルに入力されている可能性がある。実施形態は、８０４で、方法７００の動作７０４に関して前述された方式と同様の方式で、ミスが生じたキャッシュ・ラインがホット・ライン・テーブルに含まれているかどうかを決定できる。一部の実施形態では、ローカル・プロセッサは、８０４で、ミスが生じたキャッシュ・ラインがホット・ライン・テーブルのエントリに含まれているということを、そのエントリのＰビットが「１」に設定されているということに基づいて決定できる。
【０１２０】
８０４で、ローカル・プロセッサが、ミスが生じたキャッシュ・ラインがホット・ライン・テーブルに含まれているということを決定した場合、８０６で、ローカル・プロセッサが、ミスが生じたキャッシュ・ラインが確認されたホット・キャッシュ・ラインであるかどうかを決定する。実施形態は、８０４で、例えば、ホット・ライン・テーブルのエントリのＣビットが「１」であることをチェックすることによって、この決定を行うことができる。実施形態は、キャッシュ・ラインがホット・キャッシュ・ラインであることを確認し、それに応じて、例えば方法７００またはその動作を使用して、ホット・ライン・テーブルのエントリのＣビットを設定することができる。代替の実施形態では、８０６で、キャッシュ・ラインがホット・キャッシュ・ラインであるということを決定することが、キャッシュ・ラインが可能性のあるホット・キャッシュ・ラインであること（例えば、ホット・ライン・テーブルのエントリ内のＰビットが「１」に設定されていること）に基づくことができ、キャッシュ・ラインが確認されたホット・キャッシュ・ラインであることのチェックは、任意選択的であることができる。
【０１２１】
８０４で、ローカル・プロセッサが、ミスが生じたキャッシュ・ラインがホット・ライン・テーブルに含まれていないということを決定した場合、８１０で、ローカル・プロセッサが、任意選択的に、ミスが生じたキャッシュ・ラインに関連付けられたエントリをホット・ライン・テーブル内に作成できる。８１０でエントリを作成することは、ホット・ライン・テーブル内のエントリを置き換えることを含むことができる、図４の例の前述の説明において説明されたホット・ライン・テーブルのエントリを再初期化する方式と同様に、エントリを初期化または再初期化することを含むことができる。
【０１２２】
８１２で、ローカル・プロセッサが、キャッシュ・ライン・フェッチ要求を発行して、キャッシュ・ラインを取得するか（例えば、ローカル・プロセッサがキャッシュ・ラインに対する排他性または読み込み／書き込みでの使用を必要とする場合）、またはキャッシュ・ラインのコピーを取得する（例えば、ローカル・プロセッサがキャッシュ・ラインの共有または読み取り専用での使用のみを必要とする場合）。実施形態は、８１２で、図５の方法５００の動作５０２に関して説明された方式と同様の方式で、キャッシュ・ラインのフェッチを要求できる。
【０１２３】
前述したように、ホット・キャッシュ・ラインは、プロセッサまたはキャッシュあるいはその両方の間を頻繁に転送される可能性があり、それに応じて、プロセッサまたはコンピューティング・システムあるいはその両方の性能を低下させるやり方で、オーバーヘッドを増やすことがある。キャッシュ・ラインの転送に関連するオーバーヘッドを防ぐか、または減らすための方法またはシステムあるいはその両方を採用する実施形態は、付随するプロセッサまたはコンピューティング・システムあるいはその両方の性能上の利点を実現できる。例示的な方法８００によって示されているように、８０６で、ローカル・プロセッサが、ミスが生じたキャッシュ・ラインが確認されたホット・キャッシュ・ラインである（例えば、ホット・ライン・テーブル内でＣ＝１を有している）ということを決定した場合、８０８で、ローカル・プロセッサが、キャッシュ・ミスに関連付けられているか、またはキャッシュ・ミスによる影響を受ける、抑制できるアクションを決定する。８０８でアクションを抑制することは、コンピューティング・システムの実施形態が、ホット・キャッシュ・ラインに関連付けられた動作またはアクションの実行を防ぐのに役立ち、そうしない場合、プロセッサが、そのキャッシュ・ラインを直ちにフェッチ（または再フェッチ）することが必要になり、プロセッサ、キャッシュ、またはメモリ、あるいはその組合せの間でのキャッシュ・ラインの転送の頻度を増やす可能性がある。それに応じて、８０８でアクションを抑制することは、キャッシュ・ラインの転送に関連するオーバーヘッドを防ぐか、または減らし、付随する性能上の利点を実現できる。
【０１２４】
実施形態では、アクションを抑制することは、例えば、アクションを延期すること、遅延させること、または中止すること、あるいはその組合せを含むことができる。アクションを抑制することは、例えば、確認されたホット・キャッシュ・ラインを使用することがある命令の発行を防ぐこと、ミスが生じたホット・キャッシュ・ラインおよび確認されたホット・キャッシュ・ラインのキャッシュのフェッチを抑制すること、または別のプロセッサ（またはＳＭＰネットワークあるいはその両方）からのキャッシュ・ライン・ミスへの応答のためにより多くの時間を許可する（例えば、キャッシュ・ラインの使用を遅延させる）こと、あるいはその組合せを含むことができる。別の例では、アクションを抑制することは、ミスを引き起こした命令（または命令の一部あるいはその両方）の実行を再試行することを含むことができ、または後でミスもしくはフェッチ要求またはその両方を処理することを含むことができ、あるいはその両方を含むことができる。
【０１２５】
他の実施形態例では、アクションを抑制することは、命令の不規則な順序での実行を無効化する（または中止する）こと、例えば命令がパイプライン内で完了する準備ができたすぐ次の命令になるまで、ミスが生じたキャッシュ・ラインを使用する（またはミスが生じたキャッシュ・ラインに格納された結果に依存する）命令または命令の一部の再試行を延期することを、含むことができる。実施形態は、ミスが生じたキャッシュ・ラインを、前述されたホット・キャッシュ・ライン以外のホット・キャッシュ・ラインとして確認することに基づいて、さまざまなプロセッサ、命令実行、またはキャッシュ・ラインの転送動作、あるいはその組合せを抑制、延期、または再試行し、確認されたホット・キャッシュ・ラインに関連するキャッシュ・ラインの転送のオーバーヘッドを減らすか、または防ぐことができるということが、当業者によって理解されるであろう。
【０１２６】
８１４で、ローカル・プロセッサが処理を完了する。実施形態では、８０８でアクションを抑制することに関連して、または８１２でキャッシュ・ライン・フェッチを発行することに関連して、あるいはその両方に関連して処理を完了することが、例えば、命令パイプライン内でどの命令が処理されるか、または命令を処理する順序を変更することを含むことができる。アクションを抑制することに関連して処理を完了することは、例えば、命令パイプライン内の命令を完了することまたはフラッシュすることを含むことができる。当業者は、コンピューティング・システムのプロセッサ、キャッシュ、ＳＭＰネットワーク、またはその他のコンポーネント、あるいはその組合せが、コンピューティング・システムのこれらの要素のさまざまな状態などに基づいて８０８または８１２あるいはその両方に関連する処理を完了するために実行できる、さまざまなアクションを想像できるであろう。
【０１２７】
実施形態は、ホット・ライン・テーブル内のキャッシュ・ラインに関連付けられた命令をプロセッサが実行することの一部として、ホット・ライン・テーブル内のエントリを変更または更新することができる。実施形態では、そのような変更は、例えば、ホット・ライン・テーブルに入力されている特定のキャッシュ・ラインの最新の状態または関連する状態を維持すること、またはあまり関連性が無い（例えば、競合の影響を受ける可能性またはホットになる可能性が低くなったキャッシュ・ラインに関連付けられた）エントリを他の可能性のあるホット・キャッシュ・ラインで使用できるようにすること、あるいはその両方に役立つことがある。
【０１２８】
図９は、ホット・ライン・テーブル内のエントリを更新するための例示的な方法８２０を示している。やはり本開示を説明する目的で、ただし実施形態を制限するよう意図されずに、方法８２０は、図４のホット・ライン・テーブル３００の例に従ってホット・ライン・テーブルを使用して、図１の例示的なプロセッサ（例えば、コア１１０）に従うプロセッサを参照して説明されている。
【０１２９】
８２２で、プロセッサ（例えば、命令パイプラインのユニット）が、処理のための命令（または命令の一部）を受信するか、または代替として、命令の処理（例えば、実行）に関連付けられた動作を開始する。８２４で、プロセッサが、命令をプロセッサ（例えば、命令パイプラインのユニットまたは段）からフラッシュするべきであるかどうかを決定する。例えば、実施形態では、プロセッサは、プログラム内の分岐経路に関連付けられた命令または命令の一部を投機的に実行していることがあり、プログラムがその経路を最終的に実行しないことがある。したがって、プロセッサは、この命令をフラッシュする（例えば、命令パイプラインのさまざまなユニットまたは段あるいはその両方、あるいはマルチサイクル・プロセッサのさまざまなサイクルに含まれる命令の処理を終了する）ことができる。
【０１３０】
８２４で、プロセッサが、命令をフラッシュすることを決定した場合、８２６で、プロセッサが、命令がホット・ライン・テーブルに入力されているキャッシュ・ラインを使用する（例えば、命令がこのキャッシュ・ライン内のオペランドを参照する）かどうかを決定する。このキャッシュ・ラインを使用する場合、８２８で、プロセッサは、命令が、このキャッシュ・ラインに関連付けられたホット・ライン・テーブルのエントリのタグ・フィールドで識別された命令と同じであるかどうかを決定する。同じである場合、８３０で、プロセッサが、このキャッシュ・ラインに関連付けられたホット・ライン・テーブル内のエントリの命令フィールドを無効化する。実施形態では、命令フィールドを無効化することは、ホット・ライン・テーブル内のエントリに一致するキャッシュ・ラインに関連して実行されている命令が存在しなくなったが、例えば命令のフラッシュに先立つ介入（または命令のフラッシュの後の介入）に基づいて、キャッシュ・ライン自体がまだ可能性のあるホット・キャッシュ・ラインまたは確認されたホット・キャッシュ・ラインである可能性があるということを示すことができる。
【０１３１】
８２６で、プロセッサが、命令がホット・ライン・テーブルに入力されているキャッシュ・ラインを使用しないということを決定した場合、または８２８で、プロセッサが、命令がホット・ライン・テーブル内の関連するエントリのタグ・フィールドで識別された命令と同じでないということを決定した場合、８３８で、プロセッサが処理を完了する。実施形態では、８３８で、処理を完了することが、例えば、プロセッサが命令のフラッシュを完了するために必要な動作を含むことができる。
【０１３２】
８２４で、プロセッサが、命令がフラッシュされるべきでないということを決定した場合、８３２で、プロセッサが、命令の実行を完了できる（または代替として、完了の過程にある）かどうかを決定する。例えば、実施形態では、命令を実行している命令パイプライン内の実行のすべての段が、命令の関連する処理（例えば、命令の結果を、プロセッサのローカル・キャッシュ内でキャッシュされるキャッシュ・ラインに格納すること）を完了した（または完了できる）場合、プロセッサが命令を完了できる。８３４で、プロセッサが命令を完了できるということを決定した場合、プロセッサは、命令がホット・ライン・テーブルに入力されているキャッシュ・ラインを使用するかどうかを決定する。命令がそのキャッシュ・ラインを使用する場合、８３６で、プロセッサが、関連するホット・ライン・テーブルのエントリをリセットする。実施形態では、８３６でホット・ライン・テーブル内のエントリをリセットすることは、図４の例の前述の説明において説明されたホット・ライン・テーブルのエントリを再初期化する方式と同様の動作を含むことができる。実施形態では、８３６でホット・ライン・テーブル内のエントリをリセットすることは、エントリの命令タグを「無効」の値に設定することを含むことができる。
【０１３３】
８３２で、プロセッサが命令を完了できないということを決定した場合、または８３４で、プロセッサが、命令がホット・ライン・テーブルに入力されているキャッシュ・ラインを使用しないということを決定した場合、８３８で、プロセッサが処理を完了する。実施形態では、処理を完了することが、例えば、プロセッサが命令を完了するための動作を含むことができる。
【０１３４】
本開示の方法の実施形態（前述の例示的な方法５００、６００、７００、８００、および８２０など）は、キャッシュ・ラインの状態（例えば、可能性のあるホット・キャッシュ・ラインまたは確認されたホット・キャッシュ・ラインあるいはその両方）または属性（図４のホット・ライン・テーブル３００の例示的なエントリ３３０によって示されている属性など）あるいはその両方を、プロセッサ、１つまたは複数のキャッシュ、またはプロセッサ間ネットワーク（例えば、ＳＭＰネットワーク）のコンポーネント、あるいはその組合せに含まれているさまざまなデータ構造またはメモリ要素（例えば、メモリ、キャッシュ、またはハードウェア・レジスタ、あるいはその組合せ）に記録することができる。
【０１３５】
図４の例などのホット・ライン・テーブルを利用する実施形態は、ホット・ラインの状態または属性あるいはその両方を利用するプロセッサのコンポーネント（例えば、ホット・キャッシュ・ラインに関連するアクションを抑制するローカル・キャッシュまたは回路あるいはその両方）との、ホット・キャッシュ・ラインの状態または属性あるいはその両方の高度な統合という利点を有することができる。ホット・ライン・テーブルは、小型であることができ、設計および管理が容易であるという利点を有することができる（例えば、最長時間未使用または最低使用頻度などのアルゴリズムに従って、エントリの再利用を管理できる）。プロセッサ内のホット・ライン・テーブルを利用する実施形態は、ホット・ライン・テーブルをプロセッサ内のハードウェア・レジスタに組み込むことができるという利点を有することができる。
【０１３６】
キャッシュ・ライン要求およびキャッシュ・ライン応答を通信するためにプロセッサ間ネットワークを利用する実施形態は、介入通知をキャッシュ・ライン応答と共に含むこと、あるいはプロセッサ間ネットワークに結合されたプロセッサがキャッシュ・ライン要求、キャッシュ・ライン応答、もしくは介入通知、またはその組合せをスヌープして、可能性のあるホット・キャッシュ・ラインもしくは確認されたホット・キャッシュ・ラインまたはその両方を決定できるようにすること、あるいはその両方の利点を有することができる。
【０１３７】
前述したように、キャッシュ・ラインの転送に関連するオーバーヘッドを防ぐか、または減らすことができる実施形態は、プロセッサまたはコンピューティング・システムあるいはその両方の性能上の利点を実現できる。したがって、本開示の実施形態は、ホット・キャッシュ・ラインを識別し、ホット・キャッシュ・ラインに関連するアクションを実行して、キャッシュ・ラインの転送またはキャッシュ・ラインの転送に関連する動作あるいはその両方を防ぐか、または減らすためのシステムを含むことができる。
【０１３８】
図１０は、本開示の方法に従って、ホット・キャッシュ・ラインを識別し、対応するアクションを実行して、キャッシュ・ラインの転送または関連する動作あるいはその両方を減らすことができる、例示的なシステム９００を示している。例示的なシステムを説明する目的で、ただし実施形態を制限するよう意図されずに、図１０は、図１および図２の例と同様のプロセッサおよびＳＭＰネットワークをそれぞれ示しており、これらは、図２の例示的なコンピュータ２００などのコンピューティング・システム内で構成され得る。
【０１３９】
図１０は、ＳＭＰネットワーク９５０に接続されたコア９１０およびコア９６０を備えている例示的なシステム９００を示している。ＳＭＰネットワーク９５０の実施形態は、例えば、図２のＳＭＰネットワーク２２０と同様であることができる。実施形態では、コア９１０およびコア９６０は、図１の例示的なコア１１０と同様のプロセッサであることができる。したがって、図１０では、図１のパイプライン１５０と同様の命令パイプラインであることができるパイプライン９１２を含んでいるコア９１０が示されている。例を簡略化するために、ただし実施形態を制限するよう意図されずに、読み込み／格納ユニット（ＬＳＵ９１６）、命令発行ユニット（発行９１８）、および実行ユニット（実行９１４）を含んでいるパイプライン９１２が示されている。実行９１４は、キャッシュ（Ｌ１  ９２０）およびディレクトリ無効化ユニット（Ｄ−ＩＮＶ９２２）を含んでいる。
【０１４０】
コア９１０は、ホット・ライン・テーブル（ＨＬＴ９２４）、介入回路（介入９２６）、および競合抑制回路（抑制９２８）をさらに含んでいる。Ｌ１  ９２０の実施形態は、例えば、図１のＬ１キャッシュ１５２と同様のローカル・キャッシュであることができる。ＨＬＴ９２４などのホット・ライン・テーブルの実施形態は、例えば、図４の例示的なホット・ライン・テーブル３００と同様であることができる。コア９６０はコア９１０と同様であるか、または同一であることができるが、図１０では、システム９００の例を簡略化するために、コア９６０は詳細を含まずに示されている。
【０１４１】
介入回路または介入回路を組み込んでいるシステムあるいはその両方の例示的な動作を説明するために、実施形態では、コア９６０が、ミスが生じたキャッシュ・ラインのフェッチを要求できる。図１０の例では、コア９６０が、例示的なインターフェイス９４８を使用してフェッチを要求できる。実施形態では、インターフェイス９４８は、図２に示されているインターフェイス２１４と同様であることができる。
【０１４２】
要求を受信することに応答して、ＳＭＰネットワーク９５０は、ミスが生じたキャッシュ・ラインのコピーを含んでいる別のリモート・プロセッサ（例えば、コア）を決定できる。例を説明する目的で、ＳＭＰネットワーク９５０は、コア９１０がコア９６０によって要求されたキャッシュ・ラインのコピーを含んでいるということを決定できる。それに応じて、ＳＭＰネットワーク９５０は、例示的なインターフェイス９４４を使用して、フェッチ要求をコア９１０に通信できる。実施形態では、インターフェイス９４４は、図２に示されているインターフェイス２１４と同様であることができる。
【０１４３】
代替の実施形態では、プロセッサ（例えば、コア９１０）は、キャッシュ・ライン（例えば、ミスが生じたキャッシュ・ライン）をフェッチすることの要求、または代替として、そのような要求の指示を受信することができ、プロセッサは、このプロセッサが要求されたキャッシュ・ラインのコピーを含んでいるということを決定できる。一部の実施形態では、プロセッサ（例えば、コア９１０）は、要求（または指示）を、要求を発行しているプロセッサ（例えば、コア９６０）から直接受信できる。
【０１４４】
フェッチ要求を処理することに応答して、パイプライン９１２などのコア９１０のコンポーネントは、キャッシュ・ラインを要求しているコア９６０が、そのキャッシュ・ラインに関連付けられたコア９１０に対する介入を引き起こすということを決定できる。それに応じて、パイプライン９１２（この例を使用するが、実施形態を制限するよう意図していない）が、例示的なインターフェイス９３２を使用して、介入状態をＨＬＴ９２４または介入９２６あるいはその両方に通信できる。実施形態では、インターフェイス９３２は、専用状態のワイヤ、データ・バスなどの、コアのユニット間で情報を通信する任意の手段であることができる。
【０１４５】
システム９００の例を簡略化するために、図１０では、ＨＬＴ９２４が、ホット・ライン・テーブル３００の例などにおけるホット・ライン・テーブル、およびホット・ライン・テーブル（または代替として、キャッシュ・ラインの可能性のあるホット・ライン状態または確認されたホット・ライン状態）を作成すること、または更新すること、あるいはその両方を実行することができ、ホット・ライン・テーブル内のエントリに関連付けられた状態をプロセッサの他のコンポーネントに通信できるプロセッサ内の機能を表す。しかし、実施形態は、ＨＬＴ９２４によって図１０に示されているもの以外の、プロセッサ内のさまざまなコンポーネントまたはコンポーネントの構成あるいはその両方を使用して、そのような機能を実装できるということが、当業者によって理解されるであろう。
【０１４６】
介入状態の受信時に、ＨＬＴ９２４は、ホット・ライン・テーブルを更新して、要求されたキャッシュ・ラインに関連付けられたホット・ライン・テーブル内のエントリを作成するか、更新するか、または置き換えることができる。ＨＬＴ９２４によって受信された介入状態は、コア９６０からの要求が、キャッシュ・ラインを読み取り専用（または共有）または読み取り／書き込み（または排他的）としてフェッチすることを示したかどうかを含むことができる。システム９００の実施形態は、例示的な方法６００または７００あるいはその両方と同様の方法を実行して、ホット・ライン・テーブルを更新することができる。実施形態は、介入通知を受信することに応答して、本開示の前述の例に関して前述された方式で、ホット・ライン・テーブル内のエントリを作成するか、更新するか、または置き換えることができる。特に、実施形態では、プロセッサが、受信された介入通知に基づいてＨＬＴ９２４などのホット・ライン・テーブルを更新し、要求されたキャッシュ・ラインが可能性のあるホット・キャッシュ・ラインまたは確認されたホット・キャッシュ・ラインであることを示すことができる。
【０１４７】
介入９２６は、介入状態の受信時に、介入通知をコア９６０に通信することができ、例えば９４６として示されたインターフェイスを使用してこの通知を通信できる。実施形態では、インターフェイス９４６は、インターフェイス９４４に含まれるか、あるいはキャッシュ・ライン要求およびキャッシュ・ライン応答の通信に使用される例示的なインターフェイス９４４などのインターフェイスとは別個の別のインターフェイスを含むか、またはそのような別のインターフェイスに含まれることができる。
【０１４８】
ＳＭＰネットワーク９５０は、介入通知を受信することに応答して、例えば、やはりインターフェイス９４８を使用して、通知をコア９６０に通信することができる。コア９１０と同様に、コア９６０は、（例えば、介入９２６と同様の）介入回路またはホット・ライン・テーブルおよび（例えば、ＨＬＴ９２４と同様の）関連する管理コンポーネントあるいはその両方を含むことができる。コア９６０は、介入通知を受信することに基づいて、要求されたキャッシュ・ラインに関連付けられたホット・ライン・テーブル内のエントリを、作成するか、更新するか、または置き換えることができる。
【０１４９】
同様に、コア９１０は、コア９１０によるキャッシュ・ラインをフェッチすることの要求に関連付けられた介入通知を受信できる。例えば、コア９１０は、コア９６０のローカル・キャッシュに含まれているキャッシュ・ラインのフェッチを要求することができ、この要求は、そのキャッシュ・ラインに関連するコア９６０に対する介入を引き起こすことができる。それに応じて、コア９６０は、（例えば、インターフェイス９４８または９４６あるいはその両方およびＳＭＰネットワーク９５０を用いて）介入通知をコア９１０に通信できる。
【０１５０】
図１０の例は介入９２６およびＨＬＴ９２４をコア９１０のコンポーネントとして示しているが、これは、実施形態を制限するよう意図されていない。介入回路（例えば、介入９２６）またはホット・ライン・テーブル（または、図４のホット・ライン・テーブル３００の例示的なエントリ３３０におけるような、キャッシュ・ラインの状態もしくは属性またはその両方）あるいはその両方は、コンピューティング・システムの他のコンポーネントに、全体的または部分的に含まれるということが、当業者にとって明らかであろう。例えば、介入回路またはホット・ライン・テーブルの要素あるいはその両方は、プロセッサのコンポーネント、プロセッサ間ネットワークのコンポーネント、あるいはプロセッサもしくはプロセッサ間ネットワークまたはその両方の間で分散されたコンポーネントであることができる。
【０１５１】
前述したように、実施形態では、コア９１０または９６０あるいはその両方などの特定のプロセッサが、ＳＭＰネットワークに結合されたプロセッサまたはキャッシュあるいはその両方の間の通信を監視することなどによって、他のプロセッサに向けられたキャッシュ・ライン・フェッチ要求に関連付けられた介入通知を受信（またはスヌープ）することができる。したがって、これらの実施形態は、プロセッサ（例えば、コア９１０）が、この特定のプロセッサに対するキャッシュ・ラインをフェッチすることの要求に関連付けられた介入通知を受信するという本例に限定されず、これらの実施形態は、キャッシュ・ライン・フェッチ要求または関連する介入通知あるいはその両方をスヌープすることなどの代替手段によって、介入が他のプロセッサに対して発生したということを決定できる。
【０１５２】
コア９１０内の介入９２６は、介入通知を受信することができ、例示的なインターフェイス９３０を使用して、この通知をＨＬＴ９２４またはＤ−ＩＮＶ９２２あるいはその両方に通信することができる。実施形態では、インターフェイス９３０は、専用状態のワイヤ、データ・バスなどの、コアのユニット間で情報を通信する任意の手段であることができる。
【０１５３】
実施形態では、図１０の例におけるＤ−ＩＮＶ９２２などのディレクトリ無効化ユニット（または回路）が、介入通知を受信して、キャッシュ（例えば、Ｌ１  ９２０）に通信し（または代替として、キャッシュを操作し）、この介入に関連付けられたキャッシュ・ラインを無効化することができる。実施形態では、ＨＬＴ９２４が、介入通知を受信することに応答して、ホット・ライン・テーブル内のエントリを作成するか、更新するか、または置き換えることができ、本開示の前述の例に関して前述された方式で、ホット・ライン・テーブルを操作することができる。
【０１５４】
前述したように、プロセッサは、可能性のあるホット・キャッシュ・ラインまたは確認されたホット・キャッシュ・ラインあるいはその両方を示すホット・ライン・テーブル内の情報を使用して、ホット・ライン・テーブル内のエントリに一致するキャッシュ・ラインを使用する動作に関連するアクションを抑制することができる。特に、実施形態では、競合抑制コンポーネントまたは回路が、ホット・ライン・テーブル内のエントリに一致するキャッシュ・ラインの使用に関連するアクションを抑制するための機能を具現化することができる。
【０１５５】
説明のために、コア９１０は競合抑制回路（抑制９２８）をさらに含んでいる。実施形態では、抑制９２８は、命令の実行においてコア９１０（またはパイプライン９１２）によって使用されるキャッシュ・ラインのさまざまな態様を示すための入力を受信できる。説明のために、図１０で、抑制９２８がミス９３４入力および一致９３６入力を受信する。実施形態では、ミス９３４入力が、ローカル・キャッシュ（例えば、Ｌ１  ９２０）がキャッシュ・ライン・ミスを招いたこと、またはミスが生じたキャッシュ・ラインもしくはキャッシュ・ライン・ミスを引き起こした命令またはその両方に関連付けられた情報、あるいはその両方を抑制９２８に通信できる。実施形態では、一致９３６入力が、キャッシュ・ライン（例えば、キャッシュ・ライン・ミスの影響を受けるキャッシュ・ライン）がホット・ライン・テーブル内のエントリに一致する（以下では、「一致するライン」と呼ぶ）ということを示す情報を通信できる。一致９３６は、例えば、一致するラインが単に可能性のあるホット・キャッシュ・ラインであるか、または確認されたホット・キャッシュ・ラインであるか、どの命令またはオペランドあるいはその両方が、一致するラインに関連付けられているか、またはテーブルに格納されているとおりの一致するラインの他の属性、あるいはその組合せといった、一致するホット・ライン・テーブルのエントリからの情報を通信することができる。
【０１５６】
抑制９２８は、そのような入力を使用して、コア９１０に、一致するラインの使用に関連する動作を抑制させるための情報を、コア９１０の要素に通信することができる。例えば、例示的なインターフェイス９４０は、パイプライン９１２に、一致するラインを使用する（または、一致するラインの使用に依存する）命令または命令の一部の実行を抑制させるための情報を、抑制９２８からパイプライン９１２に通信することができ、または一致するラインに関する他のプロセッサとの競合を引き起こすことができ、あるいはその両方を実行することができる。例示的なシステム９００の実施形態では、パイプライン９１２によって抑制９２８から受信された情報が、例えば、発行９１８に、実行９１４への命令の発行を抑制させる。別の例では、パイプライン９１２によって抑制９２８から受信された情報が、ＬＳＵ  ９１６に、キャッシュ・ライン（例えば、ＨＬＴ９２４内のエントリに対応するか、またはＨＬＴ９２４内のエントリに対応するミスが生じたキャッシュ・ラインを使用する命令に関連付けられた、ミスが生じたキャッシュ・ライン）のフェッチを延期させることができる。そのようなアクションの追加の例は、方法８００の動作８０８を参照して説明されたアクション、またはそれらに類似するアクションを含む。
【０１５７】
実施形態は、図１０に示された入力もしくはプロセッサ内から受信された入力またはその両方、あるいは受信された入力に応答して競合抑制回路が実行できるアクション、あるいはその組合せに限定されない。例えば代替の実施形態では、競合抑制回路は、他のキャッシュ、ＳＭＰネットワーク、または他のプロセッサ、あるいはその組合せから、（直接的に、または代替として、ＳＭＰネットワーク接続またはルーティング要素などを介して間接的に）入力を受信できる。抑制９２８によって示されているような競合抑制回路は、例えば、図１０の例によって示されているもの以外の、他のプロセッサと競合しているキャッシュ・ラインを転送すること、降格させること、または無効化すること、あるいはその組合せを防ぐように意図された、入力を受信すること、またはさまざまなアクションを実行すること、あるいはその両方を実行できるということが、当業者にとって明らかであろう。
【０１５８】
前述したように、システムの実施形態は、キャッシュ・ラインのホット・ライン状態に関連するアクションを、処理命令の一部として、または処理命令と共に実行できる。コア９１０は、図１０の例示的なシステム９００を使用して、ＨＬＴ９２４に含まれている一致するラインを使用する（または一致するラインを使用する他の命令の結果に依存する、あるいはその両方である）命令に関連する動作（例えば、パイプライン９１２のさまざまなユニットまたは段あるいはその両方へのサブミット）を実行できる。コア９１０は、これらの動作を実行すると共に、図９の例示的な方法８２０などの方法を実行し、特定の動作に基づいて一致するエントリを変更できる。例えば、方法８２０に示されているように、コア９１０は、命令をフラッシュすることを決定でき、それに応じて、ＨＬＴ９２４内の一致するラインの命令フィールドを無効化できる。代替として、コア９１０は、命令の実行を完了することができ、それに応じて、一致するラインに対応するＨＬＴ９２４内のエントリをリセットすることができる。実施形態は、一致するラインを使用する命令に関連して実行される動作に基づいて、ホット・キャッシュ・ラインの属性を変更するためのさまざまな動作を実行できるということが、当業者にとって明らかであろう。
【０１５９】
プロセッサが介入回路およびホット・ライン・テーブルの両方を含む実施形態は、例えば、ホット・ライン・テーブルおよびプロセッサの他のコンポーネント（命令パイプライン（または命令パイプラインの段もしくはユニット）または競合抑制ユニットあるいはその両方など）あるいはその両方との、介入回路の高度な統合において利点を有することができる。介入回路がプロセッサ間ネットワーク（またはプロセッサ間ネットワークのコンポーネント）に部分的または全体的に含まれる代替の実施形態は、例えば、ネットワークのコンポーネント（例えば、キャッシュ要求／応答回路またはキャッシュ動作に関連する情報あるいはその両方）との高度な統合において利点を有することができる。
【０１６０】
前述の例は、キャッシュ・ラインの転送または関連するオーバーヘッドあるいはその両方を管理するためのプロセッサおよびメモリ・キャッシュを含んでいるコンピューティング・システムにおいて具現化されているように、本開示を説明した。しかし本開示は、そのような実施形態に限定されない。コンピューティング・システムは、代替の環境またはアプリケーションあるいはその両方においてデータ・キャッシュを採用することができ、そのような代替は、キャッシュ間のデータの転送に関連するオーバーヘッドを防ぐことまたは除去することなどの、本開示の利点または利益あるいはその両方を得ることができる。
【０１６１】
例えば、コンピューティング・システムにおいて、コンピューティング・システムの複数のアプリケーション（例えば、プログラム）が、特定のデータ・オブジェクトを共有することができる。そのようなアプリケーションおよびシステムの例としては、分散ファイル・システム、ストリーミング・メディア・システム、ワールド・ワイド・ウェブ（「ｗｅｂ」（World Wide Web））ブラウザ、Ｗｅｂホスティング・アプリケーション、ソーシャル、メッセージング、または電子メール、あるいはその組合せのアプリケーション、金融アプリケーション、家庭用電気製品の監視または管理あるいはその両方のシステム、ならびに自動車または交通あるいはその両方の管理システムなどが挙げられる。そのようなシステムにおいて、アプリケーションは、コンピューティング・システム内の同じコンピュータ上または異なるコンピュータ上で同時に実行され、特定のデータ（例えば、特定のデータ・ファイルもしくはメタデータまたはその両方、Ｗｅｂページのコンテンツもしくはハイパーリンクまたはその両方、ソーシャル、メッセージング、もしくは電子メール、またはその組合せのデータもしくは媒体またはその両方、ならびに金融データ、家庭用電気製品データ、または自動車もしくは交通データ、あるいはその組合せ）を共有することができる。
【０１６２】
アプリケーションは、特定の共有データ（以下では、「データ・オブジェクト」と呼ぶ）のローカル・コピーまたは「キャッシュされた」コピーを、アプリケーションが実行されるコンピュータのメモリ内もしくはストレージ媒体内またはその両方、あるいはアプリケーション専用のメモリ内もしくはストレージ媒体内またはその両方など（例えば、アプリケーションに関連する、物理メモリもしくは仮想メモリまたはその両方、あるいは物理ストレージもしくは仮想ストレージまたはその両方）に作成できる。データ・オブジェクトのコピーをキャッシュに含むことによって、例えば別のコンピュータ（例えば、アプリケーションのデータをホストするサーバ・コンピュータ）内のデータ・オブジェクト（例えば、一次コピーまたは「マスター」コピー）または別のコンピュータ内のメモリもしくはストレージ媒体内のデータ・オブジェクトにアクセスすることと比較して、そのオブジェクトに対するアプリケーションのアクセス待ち時間を改善できる。
【０１６３】
前述した例と同様に、共有データ・オブジェクトは、複数のアプリケーションによる競合の影響を受ける可能性があり、それが、データ・オブジェクトの一次コピーを含んでいるアプリケーションまたはストレージあるいはその両方のさまざまなキャッシュの間でのデータ・オブジェクトの転送に関連するオーバーヘッドを増やすことがある。したがって、そのようなシステムまたはアプリケーションあるいはその両方は、本開示の方法または構造あるいはその両方を採用して、データ・オブジェクトのコピーのフェッチに関連するオーバーヘッドを減らすか、または防ぐことができる。
【０１６４】
図１１は、アプリケーションが特定のデータ・オブジェクトを共有できるシステム５５０の例示的な実施形態例を示している。図１１は、ネットワーク５４０を用いて相互接続されたコンピュータ５３０Ａ、５３０Ｂ、および５３０Ｃ（以下では、「コンピュータ５３０」と呼ぶ）を備えているシステム５５０を示している。実施形態では、コンピュータ５３０は、ラップトップ・コンピュータもしくはデスクトップ・コンピュータ、サーバ・コンピュータ、モバイル・デバイス、または家庭用電気製品、自動車、もしくは交通システムに統合もしくは接続されたコンピュータもしくはコンピューティング・デバイス、あるいはその組合せなどの（ただしこれらに限定するよう意図されない）、さまざまな同じまたは異なるコンピュータまたはコンピューティング・デバイスあるいはその両方のいずれかであることができる。ネットワーク５４０の実施形態は、例えば、ローカル・エリア・ネットワーク「ＬＡＮ」（local area network）、広域ネットワーク「ＷＡＮ」（wide area network）、無線ネットワーク、またはインターネット、あるいはその組合せであることができる。
【０１６５】
アプリケーション５３２Ａは、コンピュータ５３０Ａ上で実行され、ローカル・キャッシュ（キャッシュ５３４Ａ）を含んでいる（またはローカル・キャッシュに接続されている）。同様にアプリケーション５３２Ｂは、コンピュータ５３０Ｂ上で実行され、ローカル・キャッシュ（キャッシュ５３４Ｂ）を含んでいる（またはローカル・キャッシュに接続されている）。コンピュータ５３０Ｃは、アプリケーション５３２Ａおよび５３２Ｂによって使用される（および共有される）、コンピュータ５３０Ｃのストレージ５３６内のオブジェクト５３８などのデータ・オブジェクトをホストするコンピュータであることができる。コンピュータ５３０Ｃは、データ・オブジェクトのマスター・コピーを格納できる。実施形態では、ストレージ５３６は、格納されたデータ・オブジェクトを操作するコンピュータ５３０のアプリケーションによって使用されるデータ・オブジェクトを格納するのに適した、さまざまなストレージ媒体またはデバイスあるいはその両方（メモリ、ディスク・ドライブ、またはストレージ・サブシステム、あるいはその組合せなど）のいずれかであることができる。
【０１６６】
本明細書において使用されるとき、図１１の例を説明するために、「アプリケーション」は、アプリケーションをホストまたは実行するコンピュータ（またはコンピューティング・デバイス）およびコンピュータ（またはコンピューティング・デバイス）のコンポーネント（例えば、ハードウェア、ファームウェア、オペレーティング・システム、ミドルウェア、またはコンピュータもしくはコンピューティング・デバイスのその他のそのようなコンポーネント、あるいはその組合せ）上で実行される任意のアプリケーションを包含する。５３２Ａなどのアプリケーションは、オブジェクト５３８などのデータ・オブジェクトのコピーをコンピュータ５３０Ｃから取得し、そのコピーをキャッシュ５３４Ａ内のオブジェクト５３８Ａなどのキャッシュに格納することができる。その後、アプリケーション５３２Ｂは、オブジェクト５３８のコピーを要求できる。
【０１６７】
実施形態では、アプリケーションによる、共有データ・オブジェクトのコピーに対する要求（例えば、オブジェクト５３８のコピーに対するアプリケーション５３２Ｂの要求）は、別のアプリケーションによって使用されているこのオブジェクトのコピー（例えば、キャッシュ５３４内のオブジェクト５３８Ａ）に対する、前述したような介入と同様の、または同一の条件の発生を引き起こすことができるということが、当業者にとって明らかであろう。例えば、アプリケーションは、共有または排他的のいずれかの状態を有するデータ・オブジェクトのコピーを含むことができる。別のアプリケーションによる、そのデータ・オブジェクトを使用することの要求に応答して、アプリケーションは、そのデータ・オブジェクトのキャッシュされたコピーを降格または無効化することができる。
【０１６８】
アプリケーション（例えば、アプリケーション５３２）、またはコンピュータ（例えば、コンピュータ５３０Ａ）もしくはそのコンポーネント、あるいはその両方は、その介入を、オブジェクト（例えば、オブジェクト５３８）を要求したか、またはオブジェクトを共有している別のコンピュータまたはアプリケーション（例えば、５３０Ｂもしくは５３２Ｂあるいはその両方それぞれ、またはコンピュータ５３０Ｃ、あるいはその組合せ）あるいはその両方に通信できるということが、当業者によってさらに理解されるであろう。例えば、実施形態では、共有データ・オブジェクトのコピーを提供することの要求を受信するアプリケーションが、図６の方法６００に類似するが、例えば、キャッシュ・ラインの代わりにデータ・オブジェクト（例えば、ファイル名または位置あるいはその両方などの、データ・オブジェクトの識別子）を使用するように変更された方法を実行できる。一実施形態では、アプリケーションは、要求されたデータ・オブジェクトのコピーと共に含めるか、または介入通知を含む要求元アプリケーションへのメッセージなどの他の手段によって、介入通知を通信できる。
【０１６９】
図１１に示されているように、コンピュータ５３０Ａおよび５３０Ｂは、介入５４４Ａおよび５４４Ｂとして示されている介入モジュールをそれぞれ含んでいる。実施形態では、介入モジュールは、図１０のシステム９００の例における介入回路の動作方式と同様に、アプリケーションによって要求された、別のアプリケーションによって使用されているデータ・オブジェクトに関連付けられた介入の検出、受信、または通信、あるいはその組合せを実行できる。
【０１７０】
実施形態では、それに応じて、介入通知を受信するコンピュータまたはアプリケーションは、図５の方法５００と同様の方法を実行することができ、オブジェクト５３８が可能性のある「ホット・オブジェクト」であるということを示す、オブジェクト５３８に関連付けられた状態を記録することができる。同様に、実施形態では、それに応じて、オブジェクト５３８のコピーを提供することの要求を受信するコンピュータまたはアプリケーションあるいはその両方は、図７の方法７００と同様の方法を実行することができ、オブジェクト５３８が確認された「ホット」データ・オブジェクトであるということを示す、オブジェクト５３８に関連付けられた状態を記録することができる。実施形態では、アプリケーションは、ローカル・キャッシュに現在含まれていないデータ・オブジェクトを使用して、図８の方法８００と同様の方法を実行し、そのデータ・オブジェクトが確認されたホット・オブジェクト状態に関連付けられているかどうかに基づいて、コピーを要求するのか、それとも使用されるデータ・オブジェクトに関連する（例えば、アプリケーションの）アクションを抑制するのかを決定することができる。
【０１７１】
例えば、実施形態は、ローカル・キャッシュ内のデータ・オブジェクトを変更するためのアクション、または共有データ・オブジェクトに関連するか、もしくは依存する他のデータ・オブジェクト（例えば、別のアプリケーションのキャッシュまたはマスター・コピーあるいはその両方において変更されたデータに含まれるホット・リンクによって指されるオブジェクト、あるいは共有データ・オブジェクトに含まれるメタデータに関連付けられたデータ・ファイル）をフェッチするか、もしくは処理するか、またはその両方を実行するためのアクション、あるいはその両方のためのアクションなどを抑制することができる。実施形態は、ホット・データ・オブジェクトに関連付けられたアプリケーションまたはアプリケーションの動作を抑制するか、延期するか、または終了することを決定するための機能を含むことができる。図１１の競合５４２Ａおよび５４２Ｂは、そのような機能の一部または全部を具現化できる、コンピュータ内のモジュールを表している。アクションを処理するさまざまなアプリケーションが、アプリケーションまたはそのアプリケーションを組み込んでいるシステムあるいはその両方の機能に従って、方法８００に類似する方法の態様として（例えば、動作８０８において）、抑制されるか、延期されるか、または終了され得るということ、およびそのようなアクションを識別して実行するための機能が、さまざまなコンポーネントまたはコンピュータ内のコンポーネントの構成あるいはその両方において具現化され得るということが、当業者によって理解されるであろう。
【０１７２】
さらに、システム５５０などのシステムの実施形態は、図９の方法８２０と同様の方法を実行して、識別するために記録され情報またはホット・データ・オブジェクトに関連付けられた情報あるいはその両方の情報を変更することができる。例えば、システムは、（８２４で、命令がフラッシュされることを決定するのと同様に）アプリケーションが終了したかどうかを決定することができ、それに応じて、（ホット・キャッシュ・ラインに関連付けられた命令フィールドを無効化するプロセッサの実施形態と同様に、データ・オブジェクトとのそのアプリケーションの関連付けを無効化するなどのために）データ構造内のホット・データ・オブジェクトの属性を変更できる。別の例として、システムは、（８３２で、命令が完了したことを決定するのと同様に）アプリケーションが完了したかどうかを決定することができ、それに応じて、ホット・データ・オブジェクトとしてそのデータ・オブジェクトに関連付けられたデータ構造内のエントリをリセットすることができる。
【０１７３】
例えば、キャッシュ・ラインの代わりにデータ・オブジェクト使用すること、プロセッサまたはプロセッサ命令あるいはその両方の代わりにアプリケーションを使用すること、プロセッサのローカル・キャッシュの代わりにアプリケーションのローカル・キャッシュを使用すること、ホット・ライン・テーブルを他の構造に置き換えるか、またはホット・ライン・テーブルのエントリを、キャッシュ・ラインの属性の代わりに、もしくはキャッシュ・ラインの属性に追加して、データ・オブジェクトの属性に置き換えるか、あるいはその両方を行うこと、あるいはホット・データ・オブジェクトの構造もしくはエントリまたはその両方を、アプリケーションのさまざまな状態に従って更新すること、あるいはその組合せを実行するために、図５、図６、図７、図８、および図９の例示的な方法５００、６００、７００、８００、および８２０を変更する方法は、当業者にとって明らかであろう。
【０１７４】
本開示の実施形態は、図１２の例に示されているようなコンピュータ・システムを備えるか、または含むことができる。図１２に示されているように、コンピュータ・システム４００は、プロセッサ４１２および４１４を含むコンピュータ４１０を含んでいる。実施形態では、コンピュータは、図１１のコンピュータ５３０Ａなどのコンピュータであることができ、またはプロセッサは、前述したようなプロセッサ（例えば、図１のコア１１０）、汎用プロセッサまたは専用プロセッサ、コプロセッサ、または計算命令を実行できるさまざまな処理デバイスのいずれかを含むことができ、あるいはその両方が可能である。
【０１７５】
図１２は、コンピュータ４１０を入力ソース４１８に結合するインターフェイス４１６を使用して構成されるコンピュータ・システム４００を示している。実施形態では、インターフェイス４１６は、コンピュータ４１０が、例えばネットワーク（例えば、イントラネット、またはインターネットなどのパブリック・ネットワーク）を介して、またはコンピュータ４１０の内部にあるか、もしくはコンピュータ４１０に接続されたディスク・ドライブなどのストレージ媒体を介して、入力データを受信するか、またはその他の方法で入力データにアクセス（４１６）できるようにする。例えば、入力ソース４１８は、ＳＭＰネットワーク（例えば、図２のＳＭＰネットワーク２２０）であるか、または図２のコア２１２のうちの１つのコアに示されているような、別のプロセッサであることができ、入力ソース４１８は、キャッシュ・ラインもしくはデータ・オブジェクトをフェッチすることの要求、または介入通知、あるいはその両方をコンピュータ４１０に提供することができ、またはその他の方法で、コンピュータ４１０が、インターフェイス４１６を使用してキャッシュ・ラインもしくはデータ・オブジェクトをフェッチすることの要求を受信すること、キャッシュ・ラインもしくはデータ・オブジェクトを受信すること、または介入通知を受信すること、あるいはその組合せを実行することができるようにする。
【０１７６】
インターフェイス４１６は、人間の入力を可能にするように、またはコンピュータ４１０のコンポーネントに関して後述されるような、コンピュータ４１０を他の入力デバイスに結合するように構成され得る。このインターフェイスは、コンピュータに適したさまざまなインターフェイスのタイプまたは機構のいずれかであることができ、あるいはソース・ネットリストを受信するか、またはその他の方法でアクセスもしくは受信するようにコンピュータ内で動作するプログラムであることができるということが、当業者にとって明らかであろう。
【０１７７】
コンピュータ４１０に含まれているプロセッサは、メモリ・インターフェイス４２０によってメモリ４３０に接続される。実施形態では、メモリは、キャッシュ・メモリ、メイン・メモリ、フラッシュ・メモリ、またはこれらの組合せであるか、あるいは情報を格納し、任意選択的に情報またはメモリ内の情報を格納する位置をプロセッサがアクセスできるようにすることができる、他のさまざまな電子デバイスであることができる。メモリは、単一の電子（または一部の実施形態では、光などの他の技術の）モジュールで形成されるか、または複数のメモリ・モジュールで形成され得る。メモリまたはメモリ・モジュール（例えば、メモリの一部の電子パッケージ）は、例えば、１つまたは複数のシリコン・ダイまたはシリコン・チップであることができ、またはマルチチップ・モジュール・パッケージであることができる。実施形態は、メモリを、一連のバイト、ワード（例えば、複数の隣接または連続するバイト）、またはページ（例えば、複数の隣接または連続するバイトまたはワード）として構造化することができる。
【０１７８】
実施形態では、コンピュータは複数のメモリを含むことができる。１つまたは複数のプロセッサと１つまたは複数のメモリと間の、４２０などのメモリ・インターフェイスは、例えば、１つまたは複数のプロセッサおよび１つまたは複数のメモリに共通するメモリ・バスであることができる。一部の実施形態では、プロセッサとメモリの間の４２０などのメモリ・インターフェイスは、プロセッサとメモリの間のポイントツーポイント接続であることができ、コンピュータ内の各プロセッサは、メモリのうちの１つまたは複数の各々へのポイントツーポイント接続を有することができる。他の実施形態では、プロセッサ（例えば、４１２）は、メモリに接続された別のプロセッサ（例えば、４１４）（例えば、プロセッサ４１４からメモリ４３０への４２０）への接続（図示されていない）を用いて、メモリ（例えば、メモリ４３０）に接続され得る。
【０１７９】
コンピュータは、例えば、メモリ・インターフェイス（図示されていない）またはプロセッサに接続できるＩＯブリッジを含むことができる。一部の実施形態では、ＩＯブリッジは、プロセッサまたはメモリのコンポーネントであることができる。ＩＯブリッジは、コンピュータ（またはその他のデバイス）のプロセッサまたはメモリあるいはその両方を、このブリッジに接続されたＩＯデバイスに、インターフェイスで接続することができる。例えばコンピュータ４１０は、メモリ・インターフェイス４２０を、ＩＯデバイス４６０などのＩＯデバイスにインターフェイスで接続する、ＩＯブリッジ４５０を含む。一部の実施形態では、ＩＯブリッジは、プロセッサまたはメモリに直接接続することができ、あるいはプロセッサまたはメモリに含まれたコンポーネントであることができる。ＩＯブリッジは、例えば、ＰＣＩ−Ｅｘｐｒｅｓｓまたはその他のＩＯバス・ブリッジであることができ、あるいはＩＯアダプタであることができる。
【０１８０】
ＩＯブリッジは、ＩＯインターフェイス、またはコンピュータ４１０のＩＯバス４２２などのＩＯバスを用いて、ＩＯデバイスに接続することができる。例えば、ＩＯバス４２２は、ＰＣＩ−Ｅｘｐｒｅｓｓまたはその他のＩＯバスであることができる。ＩＯデバイスは、さまざまな周辺ＩＯデバイスまたは周辺ＩＯデバイスに接続しているＩＯアダプタのいずれかであることができる。例えば、ＩＯデバイス４６０は、グラフィック・カード、キーボードまたはその他の入力デバイス、ハード・ドライブまたはその他のストレージ・デバイス、ネットワーク・インターフェイス・カードなどであることができる。ＩＯデバイス４６０は、コンピュータのコンポーネント（例えば、プロセッサまたはメモリ）をＩＯデバイス（例えば、ディスク・ドライブ、イーサネット（Ｒ）・ネットワーク、ビデオ・ディスプレイ、キーボード、マウスなど）に接続するＰＣＩ−Ｅｘｐｒｅｓｓアダプタなどの、ＩＯアダプタであることができる。
【０１８１】
コンピュータは、プロセッサ（または、プロセッサのスレッドなどの処理要素）のうちの１つまたは複数によって実行できる命令を含むことができる。それらの命令は、１つまたは複数のプログラムのコンポーネントであることができる。プログラムまたは命令は、コンピュータの１つまたは複数のメモリに格納されるか、またはそれらのメモリを利用するか、あるいはその両方を実行することができる。図１２の例に示されているように、コンピュータ４１０は、プログラム４０８およびプログラム４０４などの、複数のプログラムを含む。プログラムは、例えば、アプリケーション・プログラム、オペレーティング・システムまたはオペレーティング・システムの機能、あるいはコンピュータのユーティリティまたは組み込み関数であることができる。プログラムはハイパーバイザであることができ、ハイパーバイザは、例えば、複数のプログラムまたはＯＳ間でのコンピュータのリソース（例えば、プロセッサまたはメモリの領域、あるいはＩＯデバイスへのアクセス）の共有を管理することができる。プログラムは、本開示の方法または方法の一部を具現化するプログラムであることができる。プログラムは、本開示の方法または方法の一部を具現化するプログラムであることができる。例えば、プログラムは、図５、図６、図７、図８、および図９それぞれの例示的な方法５００、６００、７００、８００、もしくは８２０、またはその組合せ、あるいはその一部と同様の１つまたは複数の方法を実行するために、コンピュータ４１０のプロセッサ上で実行されるプログラムであることができる。プログラムは、図１１のシステム５５０などのシステム内でデータ・オブジェクトを共有しているアプリケーションに適した、当業者によって理解されるであろうような、これらの方法に類似する変更された方法を実行できる。
【０１８２】
プログラムは、プロセッサ上で実行され、プログラムの実行またはコンピュータのリソースの使用を制御するための別のプログラムを必要とせずに、コンピュータ内のメモリを直接使用する、「スタンドアロン」プログラムであることができる。例えばコンピュータ４１０は、スタンドアロン・プログラム４０８を含んでいる。スタンドアロン・プログラムは、ＩＯインターフェイスまたはＩＯデバイスを制御すること、またはそれらとインターフェイスで接続すること（例えば、他のプログラムによるアクセス）などの、コンピュータ内の特定の機能を実行できる。スタンドアロン・プログラムは、例えば、動作またはメモリへのアクセスを管理できる。基本入出力サブシステム（ＢＩＯＳ：Basic I/O Subsystem）またはコンピュータ起動プログラム（例えば、他のプログラムを読み込んでその実行を開始できるプログラム）は、スタンドアロン・プログラムであることができる。
【０１８３】
コンピュータは、１つまたは複数のオペレーティング・システムを含むことができ、オペレーティング・システムは、例えばプログラムの開始および停止、またはプログラムによって使用されるコンピュータのリソースの管理など、他のプログラムの実行を制御できる。例えばコンピュータ４１０は、オペレーティング・システム（ＯＳ：operating systems）４０２および４０６を含んでおり、それらのオペレーティング・システムの各々は、プログラム４０４を含んでいる（または管理している）ＯＳ４０２などのように、１つまたは複数のプログラムを含むか、またはそれらのプログラムの実行を管理することができる。一部の実施形態では、オペレーティング・システムは、ハイパーバイザとして機能することができる。
【０１８４】
プログラムは、ファームウェア（例えば、デスクトップ・コンピュータ内のＢＩＯＳまたはハイパーバイザ）として具現化することができ、このファームウェアは、１つまたは複数のプロセッサ上で実行することができ、任意選択的に、コンピュータに含まれているメモリを使用できる。ファームウェアは、コンピュータのメモリ（例えば、フラッシュ・メモリ）に格納され得る。例えば、コンピュータ４１０は、メモリ４３０に格納されたファームウェア４４０を含んでいる。他の実施形態では、ファームウェアを、ストレージ媒体（例えば、ＣＤ  ＲＯＭ、フラッシュ・メモリ、またはディスク・ドライブ）上の（例えば、コンピュータ・プログラム製品を含んでいる）命令として具現化することができ、コンピュータは、このストレージ媒体からそれらの命令にアクセスすることができる。
【０１８５】
本開示の実施形態では、コンピュータは、図５、図６、図７、図８、および図９それぞれの例示的な方法５００、６００、７００、８００、もしくは８２０、またはその組合せ、あるいはその一部と同様の１つまたは複数の方法を実行するための命令を含むことができる。プログラムは、図１１のシステム５５０などのシステム内でデータ・オブジェクトを共有しているアプリケーションに適した、当業者によって理解されるであろうような、これらの方法に類似する変更された方法を実行できる。コンピュータ４１０は、例えば、プログラム４０４を含んでおり、プログラム４０４は、介入通知を通信すること、または介入を処理すること、あるいはその両方を実行するように動作することができ、ホット・ライン（またはホット・オブジェクト）テーブルを命令出力４４４に格納すること、または変更すること、あるいはその両方を実行することができる、命令４４２を含むことができる。コンピュータは、命令または命令出力あるいはその両方を、プログラム命令４４２および命令出力４４４をメモリ４３０に格納するコンピュータ４１０などの、コンピュータのメモリに格納することができる。
【０１８６】
例示的なコンピュータ・システム４００およびコンピュータ４１０は、実施形態を制限するよう意図されていない。実施形態では、コンピュータ・システム４００は、複数のプロセッサ、インターフェイス、および＜入力＞を含むことができ、ネットワーク、ネットワーク・ルータまたはネットワーク・ゲートウェイ、ストレージ・システム、サーバ・コンピュータ、仮想コンピュータあるいは仮想コンピューティング・デバイスもしくは仮想ＩＯデバイスまたはその両方、クラウドコンピューティング環境などの、他の要素またはコンポーネントを含むことができる。本開示の態様および特徴を具現化するコンピュータ・システムには、さまざまな方式で相互接続されたさまざまなコンピューティング・デバイスを含むということが、当業者にとって明らかであろう。
【０１８７】
実施形態では、コンピュータ４１０は、例えば、計算命令を実行できるプロセッサを含んでいるコンピューティング・デバイス、および任意選択的に、プロセッサと通信するメモリであることができる。例えば、コンピュータ４１０は、デスクトップ・コンピュータまたはラップトップ・コンピュータ、タブレット・コンピュータ、モバイル・コンピューティング・デバイス、または携帯電話、あるいはサーバ・コンピュータ、高性能コンピュータ、またはスーパー・コンピュータであることができる。コンピュータ４１０は、例えば、ウェアラブル装置（例えば、衣類、腕時計、または眼鏡の製品）、機器（例えば、冷蔵庫または照明制御）、自動車もしくは交通またはその両方の監視デバイス、機械デバイス、あるいは（例えば）モーター付き車両に組み込まれたコンピューティング・デバイスであることができる。本開示の態様および特徴を具現化するコンピュータが、プロセッサおよび任意選択的にメモリまたはプログラムあるいはその両方を含んでいるさまざまなコンピューティング・デバイスのいずれかであることができるということが、当業者にとって明らかであろう。
【０１８８】
本発明は、任意の可能な統合の技術的詳細レベルで、システム、方法、またはコンピュータ・プログラム製品、あるいはその組合せであってよい。コンピュータ・プログラム製品は、プロセッサに本発明の態様を実行させるためのコンピュータ可読プログラム命令を含んでいるコンピュータ可読記憶媒体を含んでよい。
【０１８９】
コンピュータ可読記憶媒体は、命令実行デバイスで使用するための命令を保持および格納できる有形のデバイスであることができる。コンピュータ可読記憶媒体は、例えば、電子ストレージ・デバイス、磁気ストレージ・デバイス、光ストレージ・デバイス、電磁ストレージ・デバイス、半導体ストレージ・デバイス、またはこれらの任意の適切な組合せであってよいが、これらに限定されない。コンピュータ可読記憶媒体のさらに具体的な例の非網羅的リストは、ポータブル・フロッピー（Ｒ）・ディスク、ハード・ディスク、ランダム・アクセス・メモリ（ＲＡＭ：random access memory）、読み取り専用メモリ（ＲＯＭ：read-only memory）、消去可能プログラマブル読み取り専用メモリ（ＥＰＲＯＭ：erasable programmable read-only memoryまたはフラッシュ・メモリ）、スタティック・ランダム・アクセス・メモリ（ＳＲＡＭ：static random access memory）、ポータブル・コンパクト・ディスク読み取り専用メモリ（ＣＤ−ＲＯＭ：compact disc read-only memory）、デジタル多用途ディスク（ＤＶＤ：digital versatile disk）、メモリ・スティック、フロッピー（Ｒ）・ディスク、パンチカードまたは命令が記録されている溝の中の隆起構造などの機械的にエンコードされるデバイス、およびこれらの任意の適切な組合せを含む。本明細書において使用されるとき、コンピュータ可読記憶媒体は、それ自体が、電波またはその他の自由に伝搬する電磁波、導波管またはその他の送信媒体を伝搬する電磁波（例えば、光ファイバ・ケーブルを通過する光パルス）、あるいはワイヤを介して送信される電気信号などの一過性の信号であると解釈されるべきではない。
【０１９０】
本明細書に記載されたコンピュータ可読プログラム命令は、コンピュータ可読記憶媒体から各コンピューティング・デバイス／処理デバイスへ、またはネットワーク（例えば、インターネット、ローカル・エリア・ネットワーク、広域ネットワーク、または無線ネットワーク、あるいはその組合せ）を介して外部コンピュータまたは外部ストレージ・デバイスへダウンロードされ得る。このネットワークは、銅伝送ケーブル、光伝送ファイバ、無線送信、ルータ、ファイアウォール、スイッチ、ゲートウェイ・コンピュータ、またはエッジ・サーバ、あるいはその組合せを備えてよい。各コンピューティング・デバイス／処理デバイス内のネットワーク・アダプタ・カードまたはネットワーク・インターフェイスは、コンピュータ可読プログラム命令をネットワークから受信し、それらのコンピュータ可読プログラム命令を各コンピューティング・デバイス／処理デバイス内のコンピュータ可読記憶媒体に格納するために転送する。
【０１９１】
本発明の動作を実行するためのコンピュータ可読プログラム命令は、アセンブラ命令、命令セット・アーキテクチャ（ＩＳＡ：instruction-set-architecture）命令、マシン命令、マシン依存命令、マイクロコード、ファームウェア命令、状態設定データ、集積回路のための構成データ、あるいは、Ｓｍａｌｌｔａｌｋ（Ｒ）、Ｃ＋＋などのオブジェクト指向プログラミング言語、および「Ｃ」プログラミング言語または同様のプログラミング言語などの手続き型プログラミング言語を含む１つまたは複数のプログラミング言語の任意の組合せで記述されたソース・コードまたはオブジェクト・コードのいずれかであってよい。コンピュータ可読プログラム命令は、ユーザのコンピュータ上で全体的に実行すること、ユーザのコンピュータ上でスタンドアロン・ソフトウェア・パッケージとして部分的に実行すること、ユーザのコンピュータ上およびリモート・コンピュータ上でそれぞれ部分的に実行すること、あるいはリモート・コンピュータ上またはサーバ上で全体的に実行することができる。後者のシナリオでは、リモート・コンピュータは、ローカル・エリア・ネットワーク（ＬＡＮ：local area network）または広域ネットワーク（ＷＡＮ：wide area network）を含む任意の種類のネットワークを介してユーザのコンピュータに接続されてよく、または接続は、（例えば、インターネット・サービス・プロバイダを使用してインターネットを介して）外部コンピュータに対して行われてよい。一部の実施形態では、本発明の態様を実行するために、例えばプログラマブル論理回路、フィールドプログラマブル・ゲート・アレイ（ＦＰＧＡ：field-programmable gate arrays）、またはプログラマブル・ロジック・アレイ（ＰＬＡ：programmable logic arrays）を含む電子回路は、コンピュータ可読プログラム命令の状態情報を利用することによって、電子回路をカスタマイズするためのコンピュータ可読プログラム命令を実行してよい。
【０１９２】
本発明の態様は、本明細書において、本発明の実施形態に従って、方法、装置（システム）、およびコンピュータ・プログラム製品のフローチャート図またはブロック図あるいはその両方を参照して説明される。フローチャート図またはブロック図あるいはその両方の各ブロック、ならびにフローチャート図またはブロック図あるいはその両方に含まれるブロックの組合せが、コンピュータ可読プログラム命令によって実装され得るということが理解されるであろう。
【０１９３】
これらのコンピュータ可読プログラム命令は、コンピュータまたはその他のプログラム可能なデータ処理装置のプロセッサを介して実行される命令が、フローチャートまたはブロック図あるいはその両方のブロックに指定される機能／動作を実施する手段を作り出すべく、汎用コンピュータ、専用コンピュータ、または他のプログラム可能なデータ処理装置のプロセッサに提供されてマシンを作り出すものであってよい。これらのコンピュータ可読プログラム命令は、命令が格納されたコンピュータ可読記憶媒体がフローチャートまたはブロック図あるいはその両方のブロックに指定される機能／動作の態様を実施する命令を含んでいる製品を備えるように、コンピュータ可読記憶媒体に格納され、コンピュータ、プログラム可能なデータ処理装置、または他のデバイス、あるいはその組合せに特定の方式で機能するように指示できるものであってもよい。
【０１９４】
コンピュータ可読プログラム命令は、コンピュータ上、その他のプログラム可能な装置上、またはその他のデバイス上で実行される命令が、フローチャートまたはブロック図あるいはその両方のブロックに指定される機能／動作を実施するように、コンピュータ、その他のプログラム可能なデータ処理装置、またはその他のデバイスに読み込まれてもよく、それによって、一連の動作可能なステップを、コンピュータ上、その他のプログラム可能な装置上、またはコンピュータ実装プロセスを生成するその他のデバイス上で実行させる。
【０１９５】
図内のフローチャートおよびブロック図は、本発明のさまざまな実施形態に従って、システムまたは方法あるいはその両方の可能な実装のアーキテクチャ、機能、および動作を示す。これに関連して、フローチャートまたはブロック図内の各ブロックは、指定された論理機能を実装するための１つまたは複数の実行可能な命令を備える、命令のモジュール、セグメント、または部分を表してよい。一部の代替の実装では、ブロックに示された機能は、図に示された順序とは異なる順序で発生してよい。例えば、連続して示された２つのブロックは、実際には、含まれている機能に応じて、実質的に同時に実行されるか、または場合によっては逆の順序で実行されてよい。ブロック図またはフローチャート図あるいはその両方の各ブロック、ならびにブロック図またはフローチャート図あるいはその両方に含まれるブロックの組合せは、指定された機能または動作を実行するか、または専用ハードウェアとコンピュータ命令の組合せを実行する専用ハードウェアベースのシステムによって実装され得るということにも注意する。
【０１９６】
本開示のさまざまな実施形態の説明は、例示の目的で提示されているが、網羅的であることは意図されておらず、開示された実施形態に限定されない。記載された実施形態の範囲および思想を逸脱することなく多くの変更および変形が可能であることは、当業者にとって明らかであろう。本明細書で使用された用語は、実施形態の原理、実際の適用、または市場で見られる技術を超える技術的改良を説明するため、または他の当業者が本明細書で開示された実施形態を理解できるようにするために選択されている。
【図１】
2020523674.tif 000003
【図２】
2020523674.tif 000004
【図３】
2020523674.tif 000005
【図４】
2020523674.tif 000006
【図５】
2020523674.tif 000007
【図６】
2020523674.tif 000008
【図７】
2020523674.tif 000009
【図８】
2020523674.tif 000010
【図９】
2020523674.tif 000011
【図１０】
2020523674.tif 000012
【図１１】
2020523674.tif 000013
【図１２】
2020523674.tif 000014
【国際調査報告】
2020523674.tif 000015
2020523674.tif 000016