(57)【特許請求の範囲】
【請求項１】
競合状態を検出する装置であって：
モニタリング・ユニットを有するプロセッサ・コンポーネントと；
データ片へのアクセスの間の競合状態に関連するキャッシュ・イベントを検出し、前記キャッシュ・イベントの生起に応答してモニタリング・データを生成するよう前記プロセッサ・コンポーネントの状態の指示を捕捉するよう前記モニタリング・ユニットを構成設定する、前記プロセッサ・コンポーネントによる実行のためのトリガー・コンポーネントと；
前記キャッシュ・イベントの生起毎よりも少ない頻度での前記プロセッサ・コンポーネントの状態の指示の捕捉を可能にするよう前記モニタリング・ユニットのカウンタを構成設定する、前記プロセッサ・コンポーネントによる実行のためのカウンタ・コンポーネントと；
前記キャッシュ・イベントが前記プロセッサ・コンポーネントによって実行されるアプリケーション・ルーチンの第一の部分による前記データ片への第一のアクセスと前記アプリケーション・ルーチンの第二の部分による前記データ片への第二のアクセスとの間の競合状態から生じるのでないことに基づいて前記モニタリング・データから前記指示を除去して、前記モニタリング・データの前記プロセッサ・コンポーネントの状態の複数の指示の部分集合を含む低減されたデータを生成する、前記プロセッサ・コンポーネントによる実行のためのフィルタ・コンポーネントとを有しており、
前記第一のアクセスは書き込み動作を含み、前記第二のアクセスは読み出し動作および書き込み動作の一方を含む、
装置。
【請求項２】
前記トリガー・コンポーネントは、前記プロセッサ・コンポーネントによる並行した実行のための複数の部分を有するアプリケーション・ルーチンが前記プロセッサ・コンポーネントによって現在実行されているかどうかに基づいて前記指示の捕捉を動的に有効にする、請求項１記載の装置。
【請求項３】
前記フィルタ・コンポーネントは、前記第一の部分、前記第二の部分、前記第一の部分および前記第二の部分の一方を実行する前記プロセッサ・コンポーネントのコアまたは前記第一の部分および前記第二の部分の一方の実行のスレッドのうちの少なくとも一つの識別子に基づいて、前記キャッシュ・イベントが前記第一のアクセスと前記第二のアクセスとの間の競合状態から生じるかどうかを判定する、請求項１記載の装置。
【請求項４】
前記競合状態は、前記データ片を読むための、第一の実行のスレッドにおいて前記プロセッサ・コンポーネントによって実行される第一のアプリケーション・ルーチンの読み出し動作と、前記データ片に書き込むための、第二の実行のスレッドにおいて前記プロセッサ・コンポーネントによって実行される第二のアプリケーション・ルーチンの書き込み動作との間の競合状態を含む、請求項１記載の装置。
【請求項５】
別のプロセッサ・コンポーネントを有しており、前記トリガー・コンポーネントは、前記キャッシュ・イベントを検出し、前記キャッシュ・イベントの生起に応答して別のモニタリング・データとして前記別のプロセッサ・コンポーネントの状態の指示を捕捉するよう前記別のプロセッサ・コンポーネントのモニタリング・ユニットを構成設定する、請求項１記載の装置。
【請求項６】
前記フィルタ・コンポーネントは、前記キャッシュ・イベントがあるアプリケーション・ルーチンの第一の部分の読み出し動作とそのアプリケーション・ルーチンの第二の部分の書き込み動作との間の競合状態から生じるのでないことに基づいて前記別のモニタリング・データから前記別のプロセッサ・コンポーネントの状態の指示を除去して、前記モニタリング・データの前記プロセッサ・コンポーネントの状態の複数の指示の部分集合および前記別のモニタリング・データの前記別のプロセッサ・コンポーネントの状態の複数の指示の部分集合を含む低減されたデータを生成する、請求項５記載の装置。
【請求項７】
競合状態を検出する装置であって：
第一のプロセッサ・コンポーネントと；
第二のプロセッサ・コンポーネントと；
データ片へのアクセスの間の競合状態に関連するキャッシュ・イベントを検出し、前記キャッシュ・イベントの生起に応答して第一のモニタリング・データとして前記第一のプロセッサ・コンポーネントの状態の第一の指示を捕捉するよう前記第一のプロセッサ・コンポーネントのモニタリング・ユニットを構成設定し、前記キャッシュ・イベントを検出し、前記キャッシュ・イベントの生起に応答して第二のモニタリング・データとして前記第二のプロセッサ・コンポーネントの状態の第二の指示を捕捉するよう前記第二のプロセッサ・コンポーネントのモニタリング・ユニットを構成設定するトリガー・コンポーネントと；
前記第一の指示および前記第二の指示を比較して、前記第一の指示に対する前記第二の指示の冗長性に基づいて前記第一の指示を含み前記第二の指示を含まない低減されたデータを生成するフィルタ・コンポーネントとを有する、
装置。
【請求項８】
前記トリガー・コンポーネントは、前記第一のプロセッサ・コンポーネントおよび前記第二のプロセッサ・コンポーネントの少なくとも一方による並行した実行のための複数の部分を含むアプリケーション・ルーチンが前記第一のプロセッサ・コンポーネントおよび前記第二のプロセッサ・コンポーネントの少なくとも一方によって現在実行されているかどうかに基づいて前記第一の指示および前記第二の指示の捕捉を動的に有効にする、請求項７記載の装置。
【請求項９】
前記キャッシュ・イベントの生起毎よりも少ない頻度での前記第一の指示および前記第二の指示の捕捉を可能にするよう前記第一および第二のプロセッサ・コンポーネントのそれぞれのモニタリング・ユニットのカウンタを構成設定するカウンタ・コンポーネントを有する、請求項７記載の装置。
【請求項１０】
前記カウンタ・コンポーネントは、前記第一の指示の捕捉と前記第二の指示の捕捉を同期させるよう、前記第一のプロセッサ・コンポーネントのモニタリング・ユニットのカウンタおよび前記第二のプロセッサ・コンポーネントのモニタリング・ユニットのカウンタを構成設定する、請求項９記載の装置。
【請求項１１】
前記フィルタ・コンポーネントは、前記キャッシュ・イベントが前記第一および第二のプロセッサ・コンポーネントの一つによって実行されるアプリケーション・ルーチンの第一の部分による前記データ片へのアクセスと前記第一および第二のプロセッサ・コンポーネントの一つによって実行される前記アプリケーション・ルーチンの第二の部分による前記データ片へのアクセスとの間の競合状態から生じるのでないことに基づいて、前記第一の指示および前記第二の指示の少なくとも一方を前記低減されたデータに含めることを調整する、請求項７記載の装置。
【請求項１２】
前記フィルタ・コンポーネントは、前記第一の部分、前記第二の部分、前記第一の部分および前記第二の部分の一方を実行する前記第一のプロセッサ・コンポーネントのコア、前記第一の部分および前記第二の部分の一方を実行する前記第二のプロセッサ・コンポーネントのコアまたは前記第一の部分および前記第二の部分の一方の実行のスレッドのうちの少なくとも一つの識別子に基づいて、前記キャッシュ・イベントが前記アプリケーション・ルーチンの前記第一の部分と前記第二の部分の間の競合状態から生じるかどうかを判定する、請求項１１記載の装置。
【請求項１３】
前記競合状態は、前記データ片を読むための、第一の実行のスレッドにおいて前記第一および第二のプロセッサ・コンポーネントの一方によって実行されるアプリケーション・ルーチンの第一の部分の読み出し動作と、前記データ片に書き込むための、第二の実行のスレッドにおいて前記第一および第二のプロセッサ・コンポーネントの一方によって実行される前記アプリケーション・ルーチンの第二の部分の書き込み動作との間の競合状態を含む、請求項７記載の装置。
【請求項１４】
競合状態を検出するためのコンピュータ実装される方法であって：
プロセッサ・コンポーネントによって実行される少なくとも一つのアプリケーション・ルーチンによるデータ片へのアクセスの間の競合状態に関連するキャッシュ・イベントを検出する段階と；
前記キャッシュ・イベントの複数の生起の選択された間隔で前記キャッシュ・イベントの生起に応答してモニタリング・データとして前記プロセッサ・コンポーネントの状態の指示を繰り返し捕捉する段階と；
前記キャッシュ・イベントが前記アプリケーション・ルーチンの第一の部分の読み出し動作と前記アプリケーション・ルーチンの第二の部分の書き込み動作との間の競合状態から生じるのでないことに基づいて前記モニタリング・データから前記指示を除去して、前記モニタリング・データの前記プロセッサ・コンポーネントの状態の複数の指示の部分集合を含む低減されたデータを生成する段階とを含む、
コンピュータ実装される方法。
【請求項１５】
前記アプリケーション・ルーチンが現在、少なくとも部分的には前記プロセッサ・コンポーネントによって実行されているかどうかに基づいて、前記指示の捕捉を動的に有効にすることを含む、請求項１４記載のコンピュータ実装される方法。
【請求項１６】
前記第一の部分、前記第二の部分、前記第一の部分および前記第二の部分の一方を実行する前記プロセッサ・コンポーネントのコアまたは前記第一の部分および前記第二の部分の一方の実行のスレッドのうちの少なくとも一つの識別子に基づいて、前記キャッシュ・イベントが前記読み出し動作と前記書き込み動作との間の競合状態から生じるかどうかを判定することを含む、請求項１４記載のコンピュータ実装される方法。
【請求項１７】
前記低減されたデータをネットワークを介してデバッグ装置に送信する段階を含む、請求項１４記載のコンピュータ実装される方法。
【請求項１８】
前記競合状態は、前記データ片に書き込むための、第一の実行のスレッドにおいて前記プロセッサ・コンポーネントによって実行される前記アプリケーション・ルーチンの第一の書き込み動作と、前記データ片に書き込むための、第二の実行のスレッドにおいて前記プロセッサ・コンポーネントによって実行される別のアプリケーション・ルーチンの第二の書き込み動作との間の競合状態を含む、請求項１４記載のコンピュータ実装される方法。
【請求項１９】
前記指示は、前記プロセッサ・コンポーネントのレジスタの内容、前記プロセッサ・コンポーネントの命令ポインタのアドレス、どんなアクセス動作が前記キャッシュ・イベントをトリガーしたかの指示、前記キャッシュ・イベントの型、前記キャッシュ・イベントをトリガーしたアクセス動作を実行した前記プロセッサのコアの識別子または前記キャッシュ・イベントをトリガーしたアクセス動作が実行された実行のスレッドの識別子のうちの少なくとも一つを含む、請求項１４記載のコンピュータ実装される方法。
【請求項２０】
前記キャッシュ・イベントは、前記プロセッサ・コンポーネントのキャッシュに関わり、所有権を求める読み出し（RFO）キャッシュ・イベントまたは修正版にヒット（HITM）キャッシュ・イベントの少なくとも一方を含む、請求項１４記載のコンピュータ実装される方法。
【請求項２１】
前記キャッシュ・イベントの複数の生起の前記選択された間隔で前記キャッシュ・イベントの生起に応答して、別のモニタリング・データとして、別のプロセッサ・コンポーネントの状態の指示を捕捉することを含む、請求項１４記載のコンピュータ実装される方法。
【請求項２２】
競合状態を検出するためのコンピュータ実装される方法であって：
プロセッサ・コンポーネントによって実行される少なくとも一つのアプリケーション・ルーチンによるデータ片へのアクセスの間の競合状態に関連するキャッシュ・イベントを検出する段階と；
前記キャッシュ・イベントの複数の生起の選択された間隔で前記キャッシュ・イベントの生起に応答してモニタリング・データとして前記プロセッサ・コンポーネントの状態の指示を繰り返し捕捉する段階と；
前記キャッシュ・イベントの複数の生起の前記選択された間隔で前記キャッシュ・イベントの生起に応答して、別のモニタリング・データとして、別のプロセッサ・コンポーネントの状態の指示を捕捉する段階とを含み、
前記キャッシュ・イベントが前記アプリケーション・ルーチンの第一の部分による前記データ片への第一のアクセスと前記アプリケーション・ルーチンの第二の部分による前記データ片への第二のアクセスとの間の競合状態から生じるのでないことに基づいて前記別のモニタリング・データからの前記別のプロセッサ・コンポーネントの状態の指示を除去して、前記モニタリング・データの前記プロセッサ・コンポーネントの状態の複数の指示の部分集合および前記別のモニタリング・データの前記別のプロセッサ・コンポーネントの状態の複数の指示の部分集合を含む低減されたデータを生成することを含む、
コンピュータ実装される方法。
【請求項２３】
プロセッサ・コンポーネントによって実行されたときに、前記プロセッサ・コンポーネントに、請求項１４ないし２２のうちいずれか一項記載の方法を実行させるコンピュータ・プログラム。
【請求項２４】
請求項２３記載のコンピュータ・プログラムを記憶している少なくとも一つの機械可読記憶媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本稿に記載される実施形態は概括的にはアプリケーション・ルーチンの異なるスレッドによるデータへのアクセスにおける可能な競合状態〔レース状態（race  conditions）〕を検出することに関する。
【背景技術】
【０００２】
幅広い多様なアプリケーション・ルーチンがマルチスレッド実行のために書かれることが一般的になっている。これは、ますます多様なコンピューティング装置にマルチスレッド実行をサポートできるプロセッサ・コンポーネントを組み込むことによる。しかしながら、マルチスレッド実行は多数の利点を提供するものの、協調した仕方で異なるスレッド上で並行して実行するためのアプリケーション・ルーチンの諸部分を書く作業は困難を呈する。アプリケーション・ルーチンの異なる部分による同じデータへの協調されないアクセス（たとえば、読み出しおよび書き込み動作または書き込み動作の対）につながる間違いはめずらしくなく、アプリケーション・ルーチンを書く際になされた間違いまでたどるのが難しいことがありうる予期せぬ挙動を生じることがある。
【０００３】
特に懸念されるのが、あるアプリケーション・ルーチンの一つの部分がデータを読み出すのが、アプリケーション・ルーチンの別の部分が同じデータに書き込みをする時に時間的に十分近くて、読み出し動作と書き込み動作のどちらが他方よりも先に生起するかが信頼できるように予測できないという事例である。このように、読み出し動作は、書き込み動作によって修正される前または修正された後のいずれのデータをも受領しうる。やはり特に懸念されるのが、同じデータが協調されない一対の書き込み動作において二度書き込みされ、それら二つの書き込み動作後のそのデータの状態が信頼できるように予測できないという事例である。換言すれば、同じデータに対する二つのアクセスの間の協調がないと、不十分な協調結果となる。
【発明の概要】
【発明が解決しようとする課題】
【０００４】
さまざまな技法が、ステップごとにアプリケーション・ルーチンの別個のスレッド上でのそのような各ルーチンの実行をトレースするために考案されている。それには、それらの異なる部分と並んでデバッグ・ルーチンを実行して、それらの部分の命令の間に挿入されるさまざまなブレークポイントをモニタリングするおよび／またはそれらのデータ・アクセスをモニタリングすることを含む。しかしながら、そのようなデバッグ・ルーチンは典型的には、それ自身がかなりの処理および／または記憶資源を消費する。実際、アプリケーション・ルーチンと並んでそのようなデバッグ・ルーチンを実行するという事実は、アプリケーション・ルーチンの挙動を変えてしまうほど十分な資源を消費してしまい、そのためデバッグのためにトレースしようとしている協調されないアクセスが全く生じなくなってしまうことがありうる。さらに、コンピューティング装置によって提供される処理および／または記憶資源がアプリケーション・ルーチンによって要求される資源に密接にマッチしている状況では、アプリケーション・ルーチンおよびそのようなデバッグ・ルーチン両方の実行を受け入れるために利用可能な不十分な資源しかないことがある。
【図面の簡単な説明】
【０００５】
【図１】競合状態デバッグ・システムのある実施形態を示す図である。
【図２】競合状態デバッグ・システムの代替的な実施形態を示す図である。
【図３】ある実施形態に基づくキャッシュ・イベントの検出を示す図である。
【図４】ある実施形態に基づくキャッシュ・イベントの検出を示す図である。
【図５】競合状態デバッグ・システムのある実施形態の一部を示す図である。
【図６】競合状態デバッグ・システムのある実施形態の一部を示す図である。
【図７】ある実施形態に基づく論理フローを示す図である。
【図８】ある実施形態に基づく論理フローを示す図である。
【図９】ある実施形態に基づく論理フローを示す図である。
【図１０】ある実施形態に基づく論理アーキテクチャを示す図である。
【発明を実施するための形態】
【０００６】
さまざまな実施形態は、概括的に、アプリケーション・ルーチンの異なる部分によるまたは関係したアプリケーション・ルーチンによる協調されないデータ・アクセスから生じる競合状態を、そのような協調されないアクセスに関連している傾向のある一つまたは複数の指定されたキャッシュ・イベントの生起を検出することによって検出することに向けられる。プロセッサ・コンポーネントのモニタリング・コンポーネントが、そのようなキャッシュ・イベントに関連付けられたプロセッサ・コンポーネントの状態の指示（indication）を捕捉するよう構成される。モニタリング・ユニットは、それらの捕捉された指示を検出ドライバに提供する。検出ドライバは、該指示をフィルタリングし、デバッグ・ルーチンに中継し、アプリケーション・ルーチンまたは関係したアプリケーション・ルーチンのデバッグを可能にする。
【０００７】
当業者にはおなじみであるように、キャッシュの内容が他のキャッシュを含む他の記憶の内容と同期され損なってその結果プロセッサ・コンポーネントが誤ったデータを読んだり使ったりすることがないことを保証するために、キャッシュ・コヒーレンス機構が用いられる。そのようなキャッシュ・コヒーレンス機構はしばしば、キャッシュ・ラインにデータを記憶し、キャッシュ・ラインからデータを取り出し、キャッシュ・ライン内のデータを無効としてマーク付けするおよび／またはキャッシュ・ラインを利用可能にするようキャッシュに命令する動作と、さらにキャッシュ・ラインに記憶されているデータに関連する状態を変える他の動作とに関わる。いくつかの実施形態では、用いられるキャッシュ・コヒーレンス機構は、広く知られ、広く使われている修正‐排他‐共有‐無効（MESI:  modified-exclusive-shared-invalidated）アルゴリズムに基づいていてもよい。
【０００８】
使用される特定のキャッシュ・コヒーレンス機構に関わりなく、キャッシュ・ラインに記憶されているデータに関連する状態に影響する動作の一つまたは複数は、プロセッサ・コンポーネント中に組み込まれたモニタリング・ユニットによって検出できるキャッシュ・イベントでありうる。そのようなモニタリング・ユニットは、一つまたは複数の指定されたキャッシュ・イベントがあるかどうかモニタリングするよう、および／または該一つまたは複数の指定されたキャッシュ・イベントを検出した際にプロセッサ・コンポーネントのコアの状態の一つまたは複数の側面の指示を捕捉するようプログラム可能であってもよい。捕捉された指示は、発生したキャッシュ・イベントの型の指標（indicator）、該キャッシュ・イベントをトリガーしたデータ・アクセスの型（たとえば読み出しまたは書き込み動作）の指標、そのデータ・アクセスを引き起こした実行のプロセスおよび／またはスレッドの識別子、命令ポインタのアドレスの指示、プロセッサ・コンポーネントの一つまたは複数のレジスタの内容などを含んでいてもよい。
【０００９】
モニタリングされる前記一つまたは複数の指定されたキャッシュ・イベントは、時間的に比較的近接して生じる同じデータ片へのアクセスの連続から生じる一つまたは複数の型のキャッシュ・イベント（たとえば、一つのアクセスが別のアクセスの直後に生じる）を含んでいてもよい。特に関心があるのは、アプリケーション・ルーチンの二つの並行して実行される部分による同じデータ片に関わる、読み出しおよび書き込み動作の協調されない組み合わせからまたは書き込み動作の協調されない対から生じうるキャッシュ・イベントである。代替的には、そのような協調されないアクセスは、そのようなアクセスが並行して実行されるときにそのようなアクセスを協調させることが意図された二つ以上の関係したアプリケーション・ルーチンによってなされることがある。そのような協調の欠如は、読み出し動作が書き込み動作によって変更される前または後のいずれかのデータ片を予測不能に取得する、読み出し動作と書き込み動作の間の競合状態、あるいはデータの結果的な状態が予測不能になる二つの書き込み動作の間の競合状態につながることがある。そのようなキャッシュ・イベントは、別のキャッシュの別のキャッシュ・ラインに記憶されている同じデータへの諸アクセスの切迫したまたは進行中の継起の結果として、キャッシュ・ラインをプリエンプティブに無効にするための、キャッシュへの明示的に通信に関わってもよい。そのようなキャッシュ・イベントの例は、「所有権要求（request  for  ownership）」または「所有権を求める読み出し（read  for  ownership）」（RFO）キャッシュ・イベントであってもよい。代替的または追加的に、そのようなキャッシュ・イベントは、別のキャッシュの別のキャッシュ・ラインにおいて記憶されかつ修正されている結果として無効にされたあるキャッシュのキャッシュ・ラインにおけるデータへのアクセスに関わってもよい。そのようなキャッシュ・イベントの例は「修正版にヒット」（HITM:  hit  modified）キャッシュ・イベントであってもよい。
【００１０】
特定のキャッシュ・イベントに関連付けられたプロセッサ・コンポーネントの状態の指示は、キャッシュ・イベントが生起するたびに捕捉されてもよく、あるいはより低い指定された頻度で捕捉されてもよい。例として、そのような捕捉は、指定されたキャッシュ・イベントの５回目ごとの生起で行なわれてもよい。これは、特に指定されたキャッシュ・イベントが頻繁に生起すると予期される場合に、処理および／または記憶要件を低減するためになされてもよい。これは、たとえ指定されるキャッシュ・イベントが生起するたびに捕捉が行なわれなくても、競合状態を引き起こすアプリケーション・ルーチン内の間違いは、捕捉される可能性が高いくらい十分な頻度で生起するはずであるという期待をもってなされてもよい。
【００１１】
モニタリング・ユニットのプログラミングは検出ドライバによって実行されてもよい。検出ドライバのほうでも、モニタリング・ユニットから、前記一つまたは複数の指定されたキャッシュ・イベントの捕捉された指示を受領する。検出ドライバは、デバッグ・ルーチンに提供されるデータの全体的な量を減らすために、受領した捕捉された指示をフィルタリングして、指示の、より制限された集合から構成される低減されたデータを生成してもよい。デバッグ・ルーチンは、アプリケーション・ルーチンが実行される同じコンピューティング装置のプロセッサ・コンポーネントによって実行されてもよい。あるいはまた、デバッグ・ルーチンは、異なるコンピューティング装置のプロセッサ・コンポーネントによって実行されてもよく、低減されたデータは、ネットワークを介して該他のコンピューティング装置に伝送されてもよい。
【００１２】
本稿で使われる記法および命名法を概括的に参照するに、以下の詳細な説明の諸部分は、コンピュータまたはコンピュータ・ネットワーク上で実行されるプログラム手順を用いて呈示されることがある。これらの手順としての記述および表現は、当業者によって、自分の仕事の実質を他の当業者にこの上なく効果的に伝えるために使われているものである。手順とは、ここで、また一般に、所望される結果につながる動作の自己完結的なシーケンスであると考えられる。これらの動作は、物理量の物理的な操作を要求する動作である。必ずではないが通例、これらの量は、記憶され、転送され、組み合わされ、比較され、他の仕方で操作されることのできる電気、磁気または光学的な信号の形を取る。時に、主として慣用により、これらの信号をビット、値、要素、シンボル、キャラクタ、項、数などと称することが便利であることがわかる。しかしながら、これらおよび同様の用語のすべては、適切な物理量に関連付けられるものであり、それらの量に適用される単に便利なラベルであることは注意しておくべきである。
【００１３】
さらに、これらの操作はしばしば、人間のオペレーターによって実行される精神活動に一般的に関連付けられる加算または比較のような用語で参照される。しかしながら、一つまたは複数の実施形態の一部をなす本稿に記載される動作のいずれにおいても、人間のオペレーターのそのような能力は必要ではなく、多くの場合望ましいものでもない。むしろ、これらの動作は機械動作である。さまざまな実施形態の動作を実行するための有用な機械は、中に記憶されている本稿の教示に従って書かれるコンピュータ・プログラムによって選択的にアクティブ化または構成される汎用デジタル・コンピュータを含む、および／または要求される目的のために特別に構築された装置を含む。さまざまな実施形態は、これらの動作を実行するための装置またはシステムにも関する。これらの装置は、要求される目的のために特別に構築されていてもよく、あるいは汎用コンピュータを含んでいてもよい。多様なこれらの機械のための要求される構造は、与えられる記述から明白であろう。
【００１４】
ここで図面を参照する。図面において、同様の参照符号は全体を通じて同様の要素を指すために使われる。以下の記述では、説明の目的のため、本発明の十全な理解を提供するために、数多くの個別的詳細が記載される。しかしながら、新規な実施形態がそうした個別的詳細なしでも実施できることは明白でありうる。他方、記述を容易にするために、よく知られた構造および装置はブロック図の形で示される。その意図は、請求項の範囲内のあらゆる修正、等価物および代替をカバーすることである。
【００１５】
図１は、サーバー１００、コンピューティング装置３００およびデバッグ装置５００の一つまたは複数を組み込む競合状態デバッグ・システム１０００のある実施形態のブロック図である。これらのコンピューティング装置１００、３００および５００のそれぞれは、限定するわけではないが、デスクトップ・コンピュータ・システム、データ入力端末、ラップトップ・コンピュータ、ネットブック・コンピュータ、タブレット・コンピュータ、ハンドヘルド携帯情報端末、デジタル・カメラ、スマートフォン、スマート腕時計、スマート眼鏡、衣服に組み込まれる身体装着型コンピューティング装置、乗り物（たとえば自動車、二輪車、車椅子など）に統合されるコンピューティング装置、サーバー、サーバーのクラスター、サーバー・ファームなどを含む多様な型のコンピューティング装置の任意のものであってもよい。
【００１６】
描かれるように、これらのコンピューティング装置１００、３００および５００の部分集合は、コンピューティング装置３００上での単一のアプリケーション・ルーチン３７０の諸部分または複数の関係したアプリケーション・ルーチン３７０の並行した実行から生じる、データ・アクセスにおける競合状態のデバッグに関連する信号を、ネットワーク９９９を介して交換してもよい。しかしながら、これらのコンピューティング装置の一つまたは複数は、そのようなデバッグと完全に無関係な他のデータを互いと、および／またはさらに他のコンピューティング装置（図示せず）とネットワーク９９９を介して交換してもよい。さまざまな実施形態において、ネットワーク９９９は、可能性としては単一の建物または他の比較的限られた領域内に延在することに制限された単一のネットワーク、可能性としてはかなりの距離に延在する接続されたネットワークの組み合わせであってもよく、および／またはインターネットを含んでいてもよい。このように、ネットワーク９９９は、限定するわけではないが、電気的および／または光学的に伝導性のケーブルを用いる有線技術および赤外線、電波周波数（radio  frequency）または他の形の無線伝送を用いる無線技術を含む、信号が交換されうる多様な通信技術（または通信技術の組み合わせ）の任意のものに基づいていてもよい。
【００１７】
さまざまな実施形態において、コンピューティング装置３００は、プロセッサ・コンポーネント３５０、記憶３６０、コントロール３２０、ディスプレイ３８０およびコンピューティング装置３００をネットワーク９９９に結合するインターフェース３９０の一つまたは複数を組み込む。プロセッサ・コンポーネント３５０はモニタリング・ユニット３５４と、それぞれキャッシュ３５７を組み込んでいる一つまたは複数のコア３５５とを組み込んでいる。各キャッシュ３５７は、レベル１（L1）および／またはレベル２（L2）キャッシュであってもよく、それぞれはそれが組み込まれているコア３５５の一つによる使用のための専用であってもよい。コンピューティング装置３００はさらに、コア３５５の複数のものによって共有されうる追加的なキャッシュ３６７を組み込んでいてもよい。キャッシュ３６７は、プロセッサ・コンポーネント３５０に、あるいは記憶３６０をプロセッサ・コンポーネント３５０に結合するコントローラもしくは他の回路に組み込まれていてもよく、L2またはレベル３（L3）キャッシュであってもよい。
【００１８】
モニタリング・ユニット３５４は、多様なイベントの任意のものの生起を検出するために各コア３５５の状態をモニタリングしてもよく、各コア３５５の一つまたは複数のレジスタの状態を含む、各コア３５５の状態の諸側面を捕捉するよう動作可能であってもよい。モニタリング・ユニット３５４は、各キャッシュ３５７の動作に関連するキャッシュ・イベントを直接モニタリングするために、各コア３５５のキャッシュ３５７に直接結合されていてもよい。キャッシュ３６７がプロセッサ・コンポーネント３５０中に組み込まれている実施形態では、モニタリング・ユニット３５４は、キャッシュ３６７の動作に関連するキャッシュ・イベントを直接モニタリングするためにキャッシュ３６７に直接結合されていてもよい。キャッシュ３６７がプロセッサ・コンポーネント３５０に組み込まれない（たとえば、キャッシュ３６７は記憶３６０に組み込まれるまたは他の仕方で記憶３６０と関連付けられる）実施形態では、モニタリング・ユニット３５４は、キャッシュ３６７と関連付けられたキャッシュ・イベントを示しうる、プロセッサ・コンポーネント３５０とキャッシュ３６７との間で交換される通信をモニタリングしてもよい。別の言い方をすれば、モニタリング・ユニット３５４は、各キャッシュ３５７と関連しておよび／またはキャッシュ３６７において生起するキャッシュ・イベントの一つまたは複数の特定の型の生起があるかどうかをモニタリングし、キャッシュ・イベントの前記一つまたは複数の特定の型の生起に応答してコア３５５のうちの一つまたは複数のコアの状態の指示を捕捉する。
【００１９】
記憶３６０は、オペレーティング・システム３４０、データ３３０、検出ドライバ１４０、構成設定データ１３５、モニタリング・データ３３４、低減されたデータ３３７およびデバッグ・ルーチン１７０の一つまたは複数を記憶している。記憶３６０にはまた、アプリケーション・ルーチン３７０の一つまたはアプリケーション・ルーチン３７０の複数の関係したもののいずれかも記憶されている。オペレーティング・システム３４０、アプリケーション・ルーチン（単数または複数）３７０、検出ドライバ１４０およびデバッグ・ルーチン１７０のそれぞれは、さまざまな機能を実行するための論理を実装するためにコンピューティング装置３００の主プロセッサ・コンポーネントとしての役割において、プロセッサ・コンポーネント３５０上で動作する命令のシーケンスを組み込む。
【００２０】
オペレーティング・システム３４０を実行することにおいて、プロセッサ・コンポーネント３５０は、さまざまなサービスを提供するための呼び出し可能なシステム関数を含む、アプリケーション・ルーチン（単数または複数）３７０の実行のためのさまざまな形のサポートを提供してもよい。オペレーティング・システム３４０は、アプリケーション・ルーチン（単数または複数）３７０とコンピューティング装置３００のハードウェア・コンポーネントおよび／またはそのデバイス・ドライバとの間の抽象化の層を提供してもよい。そこから抽象化層が提供されうるハードウェア・コンポーネントおよび関係したデバイス・ドライバの間に、モニタリング・ユニット３５４および検出ドライバ１４０があってもよい。オペレーティング・システム３４０は、プロセッサ・コンポーネント３５０による実行の複数のスレッドの別個のものにおける、単一のアプリケーション・ルーチン３７０の複数の部分の並行した実行のためまたは関係したアプリケーション・ルーチン３７０の諸部分の並行した実行のためのサポートを提供する。アプリケーション・ルーチン３７０の単一のものは、ワード・プロセッサ、ウェブサイト・ビューアー、写真エディター、会合スケジュール管理、CAD/CAMなどを含む、多様な個人的および／または業務的機能の任意のものを実行するための、オペレーティング・システム３４０のサポートによるプロセッサ・コンポーネント３５０によるコンピューティング装置３００上での実行のために選択される多様な型のルーチンの任意のものであってよい。アプリケーション・ルーチン３７０の複数のものがある場合には、それらはこれに限られないが、アプリケーション・ルーチンの同じ「生産性スイート（productivity  suite）」のワードプロセシング・アプリケーションおよびイラストレーション・アプリケーションのようなアプリケーション・ルーチンの集合の関係したアプリケーション・ルーチンであってもよく、あるいはウェブサイト・ブラウズ・アプリケーションとウェブサイトによって提供される特定の型のデータの閲覧を可能にする「拡張」アプリケーションであってもよい。
【００２１】
検出ドライバ１４０を実行することにおいて、プロセッサ・コンポーネント３５０は、モニタリング・ユニット３５４を、キャッシュ３５７および／またはキャッシュ３６７の一つまたは複数に関連付けられた一つまたは複数の特定のキャッシュ・イベントの生起を検出するようモニタリング・ユニット３５４を構成する。そうすることにおいて、プロセッサ・コンポーネント３５０は、モニタリング・ユニット３５４と関連付けられた一つまたは複数のレジスタのビットをセットすることを通じて、前記一つまたは複数のキャッシュ・イベントを指定するようにされてもよい。プロセッサ・コンポーネント３５０は、構成設定データ１３５から検出されるべき前記一つまたは複数のキャッシュ・イベントの指示を取り出してもよい。特に関心があるのは、時間的に比較的近接して生起する、同じデータ片に関わる読み出しおよび書き込み動作の組み合わせの結果として生じるキャッシュ・イベントであってもよい。時間的な近接性と協調の欠如のため、読み出し動作は、書き込み動作前または後のいずれかに予測不能に生起しうる。それにより、読み出し動作と書き込み動作との間の競合状態を引き起こし、時には読み出し動作においてそのデータ片の誤ったバージョンが取得され、時にはそうではないということになる。代替的または追加的に、特に関心があるのは、時間的に比較的近接して生起する、同じデータ片に関わる複数の書き込み動作の組み合わせの結果として生じるキャッシュ・イベントであってもよい。時間的な近接性と協調の欠如のため、それらの書き込み動作の一つは、別の書き込み動作の前または後のいずれかに予測不能に生起しうる。それにより、複数の書き込み動作の間の競合状態を引き起こし、それら複数の書き込み動作後のデータの状態が予測不能になる。同じデータ片へのアクセスのそのような協調されない組み合わせは、単一のアプリケーション・ルーチン３７０の二つの並行して実行される部分の間またはアクセスを協調させることが意図されているように関係付けられている二つの並行して実行されるアプリケーション・ルーチン３７０の間いずれかの協調の欠如から帰結することが可能である。
【００２２】
そのように構成されると、モニタリング・ユニット３５４は、前記一つまたは複数の指定されたキャッシュ・イベントのうちの一つのキャッシュ・イベントの生起に応答して、プロセッサ・コンポーネント３５０のコア３５５のうち一つまたは複数のコアの状態の指示を捕捉し、捕捉された指示を検出ドライバ１４０にモニタリング・データ３３４として提供する。捕捉された指示は、コア３５５のうちの一つまたは複数のコアに関連付けられた一つまたは複数のレジスタの状態の指示、一つまたは複数の命令ポインタに記憶されているアドレスの指示、実行されている命令の指示、コア３５５のうちの一つまたは複数のコアによって実行されるプロセスおよび／またはスレッドの識別情報〔アイデンティティ〕の指示などを含んでいてもよい。捕捉された指示は、キャッシュ３５７および／またはキャッシュ３６７の一つまたは複数の、一つまたは複数のキャッシュ・ラインの状態の指示をも含んでいてもよい。捕捉された指示は、キャッシュ３５７および／またはキャッシュ３６７の間で交換されるキャッシュ・プロトコル信号の指示をも含んでいてもよい。これは、キャッシュ３６７がプロセッサ・コンポーネント３５０の外部である実施形態では、プロセッサ・コンポーネント３５０とキャッシュ３６７の間で交換されるキャッシュ・プロトコル信号の指示を含んでいてもよい。これらのさまざまな指示は、それらの指示の捕捉をトリガーした指定されたキャッシュ・イベントの生起をトリガーした、アプリケーション・ルーチン３７０のどの部分（単数または複数）のどのアクセス命令（単数または複数）が実行されたかの指示を提供してもよい。
【００２３】
検出ドライバ１４０をさらに実行することにおいて、プロセッサ・コンポーネント３５０はまた、プロセッサ・コンポーネント３５０の状態の指示を捕捉する前に、指定されたキャッシュ・イベントの生起の指定された数を繰り返し数えるよう、モニタリング・ユニット３５４のカウンタを構成してもよい。換言すれば、指定されたキャッシュ・イベントのすべての生起に応答してプロセッサ・コンポーネント３５０の状態の指示を捕捉する代わりに、モニタリング・ユニット３５４は、指定されたキャッシュ・イベントの生起のサンプル部分集合について、プロセッサ・コンポーネント３５０の状態の指示を捕捉するようにされてもよい。それにより、そのような捕捉が実行される頻度が低減される。より具体的には、モニタリング・ユニット３５４は、指定されたキャッシュ・イベントの「N番目」ごとにのみ、プロセッサ・コンポーネント３５０の状態を捕捉するよう構成されていてもよい。この場合、捕捉が実行される頻度はNの値によって制御される。捕捉が実行される頻度（たとえば、Nの値）は、構成設定データ１３５において指定されてもよい。プロセッサ・コンポーネント３５０の状態を指定されたキャッシュ・イベントの生起毎よりも低頻度で捕捉することは、捕捉された指示を処理するおよび／またはデバッグ・ルーチンに中継することにおいて必要とされる処理および／または記憶資源を低減するために望ましいと見なされることがある。さらに、これは、指定されたキャッシュ・イベントをトリガーするアプリケーション・ルーチン３７０の一つまたは二つ以上の、並行して実行される諸部分の間でのデータ・アクセス競合状態の生起につながるアプリケーション・ルーチン３７０の一つにおける間違いが、各生起に応答してプロセッサ・コンポーネント３５０の状態を捕捉することを不要にするほど十分頻繁に生起する可能性が高いという期待をもってなされてもよい。別の言い方をすれば、そのような生起全部より少ないものについてのプロセッサ・コンポーネント３５０の状態のそのようなサンプリングが、アプリケーション・ルーチン３７０の一つをなす命令のうちで競合状態を引き起こす間違いの位置を少なくとも絞り込むのに十分な情報を提供する可能性が高いと見なされてもよい。
【００２４】
検出ドライバ１４０をさらに実行することにおいて、プロセッサ・コンポーネント３５０は、前記一つまたは複数の指定されたキャッシュ・イベントについてのモニタリングを動的に有効および／または無効にするために、モニタリング・ユニット３５４の一つまたは複数のレジスタを操作してもよく、および／または別の機構を介してモニタリング・ユニット３５４に信号伝達してもよい。プロセッサ・コンポーネント３５０は、アプリケーション・ルーチン３７０の一つまたは二つ以上が現在実行されているかどうかの指示に応答して、そうするようトリガーされてもよい。そのような指示は、アプリケーション・ルーチン（単数または複数）３７０と検出ドライバ１４０との間で直接伝達されてもよく、あるいはオペレーティング・システム３４０を通じておよび／またはデバッグ・ルーチン１７０（もしあれば）を通じて中継されてもよい。
【００２５】
プロセッサ・コンポーネント３５０の状態の捕捉が指定されたキャッシュ・イベントの生起毎に実行されるか、より低頻度で実行されるかに関わりなく、プロセッサ・コンポーネント３５０は、検出ドライバ１４０によって、モニタリング・データ３３４をフィルタリングして、モニタリング・データ３３４の指示の部分集合をもつ低減されたデータ３３７を生成するようにされてもよい。モニタリング・データ３３４は、アプリケーション・ルーチン３７０の別個の並行して実行される部分によってなされるデータへのアクセスにおける可能な競合状態のデバッグを可能にするために実際に必要とされるよりも、プロセッサ・コンポーネント３５０の状態に関する多くの情報の指示を含んでいてもよい。モニタリング・データ３３４の指示は、コア３５５、プロセスおよび／またはスレッドのうちの、アプリケーション・ルーチン（単数または複数）３７０のどの部分を実行することにも関わらないものに関連付けられた指示を除去するようフィルタリングされてもよい。これを可能にするために、プロセッサ・コンポーネント３５０は、アプリケーション・ルーチン（単数または複数）３７０の部分を実行することに関わるコア３５５、プロセスおよび／またはスレッドの識別子および／または実行される前記部分の識別子を取得してもよい。そのような識別子は次いで、モニタリング・データ３３４の識別子と比較されて、アプリケーション・ルーチン（単数または複数）３７０の諸部分によってなされるアクセスの間の可能な競合状態に無関係なキャッシュ・イベントに関連する、モニタリング・データ３３４中の指示を同定してもよい。オペレーティング・システム３４０のアーキテクチャに依存して、そのような識別子は、オペレーティング・システム３４０を通じておよび／またはデバッグ・ルーチン１７０（もしあれば）を通じてアプリケーション・ルーチン（単数または複数）３７０から取得されてもよい。代替的または追加的に、モニタリング・データ３３４の指示は、データのアクセスに関連しないプロセッサ・コンポーネント３５０のレジスタに関連付けられた指示を除去するようフィルタリングされてもよい。
【００２６】
いくつかの実施形態では、プロセッサ・コンポーネント３５０は、コンピューティング装置３００上でのアプリケーション・ルーチン（単数または複数）３７０の諸部分の間での、データ・アクセスにおける可能な競合状態のデバッグを可能にするために、低減されたデータ３３７をデバッグ・ルーチン１７０に提供してもよい。そうすることにおいて、またオペレーティング・システム３４０のアーキテクチャに依存して、検出ドライバ１４０からデバッグ・ルーチン１７０への低減されたデータ３３７のそのような伝達は、少なくとも部分的にはオペレーティング・システム３４０を通じて実行されてもよい。他の実施形態では、プロセッサ・コンポーネント３５０は、低減されたデータ３３７をデバッグ装置５００に伝送して、該データに対してデバッグが実行されることができるようにするよう、インターフェース３９０を動作させてもよい。
【００２７】
図３および図４はそれぞれ、特定のキャッシュ・イベントを検出するコンピューティング装置３００のコンポーネントの動作の実施形態を描いている。より具体的には、図３は、RFOキャッシュ・イベントの検出を描いており、図４はHITMキャッシュ・イベントの検出を描いている。図３および図４両方に描かれるように、コア３５５の一つまたは複数は、一つまたは複数のレジスタ３５５５を組み込んでいる。レジスタ３５５５は、算術演算、ビットごとの論理演算、単一命令複数データ（SIMD）演算などをサポートするレジスタを含んでいてもよい。やはり描かれているように、キャッシュ３５７および／または３６７のそれぞれは、キャッシュ・コントローラ３５７５および複数のキャッシュ・ライン３５７７（そのうち一つが描かれている）を組み込んでいる。さらに描かれているように、モニタリング・ユニット３５４はカウンタ３５４４および一つまたは複数のレジスタ３５４５を組み込んでいる。それにより、モニタリング・ユニットは、さまざまなイベントを検出し、さまざまな情報を捕捉するようプログラムされうる。モニタリング・ユニット３５４は、キャッシュ・イベントを検出するためにキャッシュ３５７および／または３６７のうち一つまたは複数のキャッシュのキャッシュ・コントローラ３７５と直接通信してもよい。代替的または追加的に、モニタリング・ユニット３５４は、キャッシュ・イベントを検出するためにキャッシュ３５７および／または３６７のうち二つ以上のキャッシュのキャッシュ・コントローラ３５７５の間の通信をインターセプトしてもよい。
【００２８】
さらに描かれるように、前記一つまたは複数のアプリケーション・ルーチン３７０は、並行して実行される複数の部分３７７を組み込んでいる。各部分は、各部分３７７を実行するためにスレッドが割り当てられる際にオペレーティング・システム３４０によって生成されうる一意的な識別子（ID）を割り当てられていてもよい。各部分は、前記アプリケーション・ルーチン３７０のうちの一つのアプリケーション・ルーチンの命令のシーケンスの部分集合を含む。前記アプリケーション・ルーチン３７０のうちのそのアプリケーション・ルーチンの前記一つまたは複数の機能の部分集合を実行するためである。いくつかの実施形態では、同じデータ片（たとえばデータ３３０）にアクセスしうるアプリケーション部分３７７は、同じアプリケーション・ルーチン３７０の諸部分３７７であってもよい。そのような実施形態では、それらの部分３７７は、データ片への自分たちのアクセスを互いと協調するべきである。そのような協調は、両部分が一部であるその一つのアプリケーション・ルーチン３７０内で完全に、多様な機構の任意のものを介して生起することが意図されていてもよい。該機構は、これに限られないが、フラグ・ビット、関数呼び出しにおけるパラメータ渡しなどを含む。だが、前記部分のうちの一つまたは複数を書く際の間違いはそのような協調の欠如につながりうる。他の実施形態では、同じデータ片にアクセスしうるアプリケーション部分３７７は、前記アプリケーション・ルーチン３７０のうち、データ片への自分たちのアクセスを互いと協調すべきであるという点において関係している異なるアプリケーション・ルーチンの部分３７７であってもよい。だがここでもまた、間違いの結果、そのような協調が欠如することがありうる。さらに他の実施形態では、同じデータ片にアクセスする同じアプリケーション・ルーチン３７０の同じ部分３７７の複数のインスタンスがあってもよく、同じ部分３７７のそのようなインスタンスはそのアクセスを協調させるべきである。
【００２９】
図３または図４の実施形態のいずれかにおいてキャッシュ・イベントを検出するための準備において、プロセッサ・コンポーネント３５０は、検出ドライバ１４０を実行することによって、モニタリング・ユニット３５４のレジスタ３５４５の一つまたは複数をプログラムして、一つまたは複数の特定のキャッシュ・イベントの生起を検出するためにモニタリング・ユニット３５４を構成するようにされてもよい。プロセッサ・コンポーネント３５０は、プロセッサ・コンポーネント３５０の状態の諸側面を捕捉することによって、それらの生起の検出に応答するよう、レジスタ３５４５の一つまたは複数をプログラムするようにされてもよい。プロセッサ・コンポーネント３５０はさらに、モニタリング・ユニット３５４に、そのような生起のたびよりも低頻度でそのような捕捉を実行させるようカウンタ３５４４をプログラムするようにされてもよい。たとえば、モニタリング・ユニット３５４は、カウンタ３５４４を介して、指定されたキャッシュ・イベントの三回目ごとの生起に際してのみそのような捕捉を実行するよう構成されていてもよい。
【００３０】
図３に目を転じると、プロセッサ・コンポーネント３５０のコア３５５の一つは、一つの部分３７７を実行することにおいて、データ３３０を読む読み出し命令を実行して、データ３３０をレジスタ３５５５の一つのロードする。その直後に、プロセッサ・コンポーネント３５０のコア３５５は、（同じアプリケーション・ルーチン３７０のまたは異なるが関係したアプリケーション・ルーチン３７０の）別の部分３７７を実行することにおいて、あるいは同じ部分３７７の別のインスタンスを実行することにおいて、レジスタ３５５５の一つ（レジスタ３５５５のうちの同じものまたは異なるもの）からの値をもってデータ３３０を書き込む書き込み命令を実行し、データ３３０を修正する。こうして、二つの異なる部分３７７の並行した実行の結果として、いずれも同じデータ３３０にアクセスする読み出し動作および書き込み動作が時間的に比較的近接して生起する。論じたように、これは、データ３３０への二つの協調されないアクセスのインスタンスであってもよい。それにより、読み出し動作および書き込み動作のいずれが他方の先に生起したこともありうる。そのため、読み出し動作はデータ３３０の誤ったバージョンを取得することがありうる。
【００３１】
読み出し動作の実行は、読み出し動作が実行される時点においてデータ３３０の最新のコピーが別のキャッシュに記憶されているかどうかに依存して、記憶３６０からまたは別のキャッシュ（たとえば、キャッシュ３６７またはキャッシュ３５７のうちの別のもの）からのデータ３３０の取り出しを引き起こしうる。いずれにせよ、キャッシュ３５７のキャッシュ・ライン３５７７はデータ３３０をロードされ、データ３３０は、読み出し動作の実行によってデータ３３０をロードされることが意図されていたレジスタ３５５５のいずれかにも与えられる。
【００３２】
しかしながら、このデータ読み出し動作の直後にまたは少なくともその後比較的迅速に、同じデータ３３０を修正する書き込み動作が行なわれるという事実は、キャッシュ３５７のキャッシュ・コントローラ３５７５をトリガーして、他方のキャッシュ３５７または３６７のキャッシュ・コントローラ３５７５に、データ３３０のどんなコピーをもっていようとそれを無効にするよう信号伝達させる。この信号を受け取ることに応答して、他方のキャッシュ３５７または３６７のキャッシュ・コントローラ３５７５は、データ３３０のそのコピーを、そのキャッシュ・ライン３５７７のどれにそのコピーが記憶されていようとも、無効にする（この無効化は斜線で描かれている）。データ３３０のどんなコピーも無効にするという他方のキャッシュ３５７または３６７へのこの信号は、読み出し動作後に実行されようとしている書き込み動作があるという事実に基づいて、他方のキャッシュ３５７または３６７が有しうるデータ３３０のどんなコピーもまもなく古くなることを宣言するプリエンプティブな信号である。
【００３３】
キャッシュ３５７における記憶のためのデータ３３０を取得する読み出し動作と、他方のキャッシュ３５７または３６７への、データ３３０のどんなコピーをもっていようとそれを無効にするという信号との組み合わせは、「所有権を求める読み出し」（RFO）キャッシュ・イベントと称されるものである。本質的には、キャッシュ３５７は、データ３３０を変更する書き込み動作のための準備において、データ３３０のコピーを有することがありうる他のいかなるキャッシュからも、データ３３０の「所有権を取り上げる」。その結果、キャッシュ３５７が、書き込み動作後のデータ３３０の内容の最新バージョンを「所有する」ことになる。キャッシュ３５７および／または３６７の間でのそのようなプリエンプティブな通知の使用は、MESIアルゴリズムに基づくキャッシュ・コヒーレンス機構の少なくともいくつかの実装において生起するものであり、キャッシュ・コヒーレンスを維持することにおける効率を高めるために望ましいと見なされることがありうる。モニタリング・ユニット３５４がキャッシュ３５７または他方のキャッシュ３５７もしくは３６７のキャッシュ・コントローラ３５７５と直接通信しているかどうかに依存して、モニタリング・ユニット３５４は、このRFOキャッシュ・イベントの生起について、これらのキャッシュ・コントローラ３５７５の一方または両方によって信号伝達されてもよく、および／またはそれらの間で交換される無効化信号をインターセプトしてもよい。いくつかの実施形態では、無効化信号は、RFOキャッシュ・イベントの一部であることの指示を組み込んでもよいことを注意しておくべきである。
【００３４】
図４に目を転じると、プロセッサ・コンポーネント３５０のコア３５５の一つ、具体的には図４でコア３５５ｘと記されているコアが、部分３７７を実行することによって、データ３３０を修正する書き込み動作を実行するようにされる。データ３３０はたまたま、コア３５５ｘに関連付けられているキャッシュ３５７キャッシュ・ライン３５７７のうちの一つに記憶されている。結果として、そのキャッシュ・ライン３５７７におけるデータ３３０のコピーが今ではデータ３３０の最新バージョンである。また、データ３３０のこのコピーのこの修正に応答して、コア３５５ｘのキャッシュ３５７のキャッシュ・コントローラ３５７５は、キャッシュ３５７の他のものおよび／またはキャッシュ３６７を含む他のキャッシュのキャッシュ・コントローラ３５７５に信号を送信し、他のキャッシュがデータ３３０についてもっていることがありうるどんなコピーも無効にさせる。それら他のキャッシュのそれらの他のコントローラ３５７５のうちに、コア３５５のうちの別のコア、具体的には図４においてコア３５５ｙと記されているコアのキャッシュ３５７のコントローラ３５７５がある。無効化信号を受信するのに応答して、コア３５５ｙのキャッシュ３５７のキャッシュ・コントローラ３５７５は、そのキャッシュ・ライン３５７７の一つに記憶されているデータ３３０のそのコピーを無効にする（この無効化は斜線で描かれている）。
【００３５】
その後、コア３５５ｙは、（同じアプリケーション・ルーチン３７０のまたは異なるが関係したアプリケーション・ルーチン３７０の）別の部分３７７を実行することによって、あるいは同じ部分３７７の別のインスタンスを実行することによって、データ３３０を読み出す読み出し動作またはデータ３３０に書き込む書き込み動作のいずれかを実行するようにされる。データ３３０の最も最新のコピーがコア３５５ｘのキャッシュ３５７のキャッシュ・ライン３５７７の一つに記憶されているので、コア３５５ｘのキャッシュ３５７のキャッシュ・コントローラ３５７５は、コア３５５ｙのキャッシュ３５７のキャッシュ・コントローラ３５７５に、コア３５５ｘのキャッシュ３５７がデータ３３０の修正されたコピーを有しておりそれが最も最新のコピーである旨の信号伝達をする。別の言い方をすれば、この信号は、このその後の読み出しまたは書き込み動作の結果、コア３５５ｘのキャッシュ３５７がデータ３３０のコピーを有していることから生じるキャッシュ「ヒット」となったので、より遅い記憶３６０においてアクセスされる必要がないという事実を伝える。この信号は、このコピーが修正されており、最も最新のコピーであるという事実を伝える。この信号におけるこれら二つの指示の組み合わせは、「修正版にヒット」またはHITMキャッシュ・イベントを意味する。このように、HITMキャッシュ・イベントは、図３のRFOキャッシュ・イベントのように、同じデータに関わる二つのアクセス動作の組み合わせであって、一方が他方の後比較的短い期間内に実行される、可能性としては一方が他方の直後に実行されるものから生じる。ここでもまた、これは、同じアプリケーション・ルーチン３７０または異なるアプリケーション・ルーチン３７０の二つの異なる部分３７７の並行した実行によって引き起こされる同じデータ片への二つの協調されないアクセスのインスタンスを示していてもよい。モニタリング・ユニット３５４がコア３５５ｘまたは３５５ｙのキャッシュ３５７のキャッシュ・コントローラ３５７５と直接通信しているかどうかに依存して、モニタリング・ユニット３５４は、このHITMキャッシュ・イベントの生起について、これらのキャッシュ・コントローラ３５７５の一方または両方によって信号伝達されてもよく、および／またはそれらの間で交換されるHITM信号をインターセプトしてもよい。
【００３６】
図３および図４の両方を再び参照するに、モニタリング・ユニット３５４は、プロセッサ・コンポーネント３５０のコア３５５の少なくとも部分集合の状態の指示を捕捉し、それらの指示をモニタリング・データ３３４として検出ドライバ１４０に提供することによって、これらのRFOまたはHITMキャッシュ・イベントのいずれかの生起に応答してもよい。論じたように、検出ドライバ１４０を実行することにおいて、プロセッサ・コンポーネント３５０は、モニタリング・データ３３４のそれらの指示をフィルタリングして、それらの指示のより少数をもつ低減されたデータ３３７を生成してもよい。ここでもまた、低減されたデータ３３７は、デバッグ・ルーチン１７０に伝達されてもよく、あるいはデバッグ装置５００に伝送されてもよい。ここでもまた、そのようなフィルタリングは、コア３５５、プロセスおよび／またはスレッドのうち前記一つまたは複数のアプリケーション・ルーチン３７０の部分３７７を実行することに関わらないものの状態の指示を除去することを含んでいてもよい。前記一つまたは複数のアプリケーション・ルーチン３７０の部分３７７を実行することに関わるコア３５５、プロセスおよび／またはスレッドの同定を可能にするために、プロセッサ・コンポーネント３５０は、それらの部分３７７、コア３５５、プロセスおよび／またはスレッドについての識別子を取得してもよい。
【００３７】
図１に戻ると、低減されたデータ３３７がデバッグ・ルーチン１７０に提供される実施形態では、プロセッサ・コンポーネント３５０はデバッグ・ルーチン１７０を実行することによって、ユーザー・インターフェースを提供するようコントロール３２０および／またはディスプレイ３８０を動作させるようにされてもよい。該ユーザー・インターフェースにより、潜在的に協調されていないデータ・アクセスをデバッグすることに関連する情報が呈示されうる。より具体的には、同じアプリケーション・ルーチン３７０または異なるが関係したアプリケーション・ルーチン３７０のいずれかの異なる部分３７７の並行した実行から生じる協調されないアクセスの、可能なインスタンスの指示が、ディスプレイ３８０上に視覚的に呈示されてもよい。代替的または追加的に、低減されたデータ３３７において指示されるところにより時間的に比較的近接した、同じデータ片（たとえばデータ３３０）へのアクセスを引き起こしたと同定された並行して実行される部分３７７からの命令のシーケンスが、それらのシーケンスの目視検査を可能にするために、ディスプレイ３８０上に視覚的に呈示されてもよい。
【００３８】
あるいはまた、デバッグ装置を含み、低減されたデータ３３７がデバッグ装置５００に提供される実施形態では、デバッグ装置５００は、プロセッサ・コンポーネント５５０、記憶５６０、コントロール５２０、ディスプレイ５８０およびデバッグ装置５００をネットワーク９９９に結合するインターフェース５９０の一つまたは複数を組み込んでいる。記憶５６０は低減されたデータ３３７およびデバッグ・ルーチン５７０を記憶する。デバッグ・ルーチン５７０は、さまざまな機能を実行するための論理を実装するためにリモート・コンピューティング装置５００の主プロセッサ・コンポーネントとしての役割において、プロセッサ・コンポーネント５５０上で動作する命令のシーケンスを組み込む。デバッグ・ルーチン１７０と似ていなくもないが、デバッグ・ルーチン５７０を実行することにおいて、プロセッサ・コンポーネント５５０は、ユーザー・インターフェースを提供するようコントロール５２０および／またはディスプレイ５８０を動作させてもよい。該ユーザー・インターフェースにより、アプリケーション・ルーチン（単数または複数）３７０の諸部分３７７による潜在的に協調されていないデータ・アクセスをデバッグすることに関連する情報が呈示されうる。ここでもまた、代替的または追加的に、異なる部分３７７の並行した実行から生じる協調されないアクセスの可能なインスタンスの指示および／またはそれらの異なる部分からの命令のシーケンスが、ディスプレイ５８０上に視覚的に呈示されてもよい。
【００３９】
サーバー１００を含む実施形態では、コンピューティング装置３００は、そこから検出ドライバ１４０、構成データ１３５およびデバッグ・ルーチン１７０の一つまたは複数を提供されてもよく、そのような提供はネットワーク９９９を通じて実行されてもよい。デバッグ・ルーチン１７０は、アプリケーション・ルーチン３７０のうち一つまたは複数のアプリケーション・ルーチンのコンポーネントであってもよく、それによりデバッグ・ルーチン１７０はアプリケーション・ルーチン３７０のうち一つまたは複数のアプリケーション・ルーチンと一緒にまたはアプリケーション・ルーチン３７０のうち一つまたは複数のアプリケーション・ルーチンの一部としてコンピューティング装置３００に提供されてもよいことを注意しておくべきである。
【００４０】
図２は、コンピューティング装置３００の代替的な実施形態を含む競合状態デバッグ・システム１０００の代替的な実施形態のブロック図を示している。図２の競合状態デバッグ・システム１０００の代替的な実施形態は、多くの点で図１の実施形態と同様であり、よって全体を通じて同様のコンポーネントを指すためには同様の参照符号が使われている。しかしながら、図１のコンピューティング装置３００とは異なり、図２のコンピューティング装置３００は、図２においてプロセッサ・コンポーネント３５０ａおよび３５０ｂと記される、プロセッサ・コンポーネント３５０の二つ以上を組み込んでおり、そのそれぞれが同じアプリケーション・ルーチン３７０のまたは異なるが関係したアプリケーション・ルーチン３７０の一部を実行しうる。こうして、一つまたは複数のアプリケーション・ルーチン３７０の異なる部分による同じデータ片へのアクセスにおける競合状態は、プロセッサ・コンポーネント３５０ａおよび３５０ｂの異なるものによってなされるアクセスの間の競合に関わることがある。
【００４１】
これに対応するために、プロセッサ・コンポーネント３５０ａおよび３５０ｂの一方または両方による検出ドライバ１４０の実行は、これらのプロセッサ・コンポーネントの両方のモニタリング・ユニット３５４が、特定のキャッシュ・イベントをモニタリングし、これらのプロセッサ・コンポーネントのそれぞれのものの状態の諸側面を捕捉するよう構成されるようにさせてもよい。こうして、描かれているモニタリング・ユニット３５４の両方が、モニタリング・データ３３４の内容に寄与しうる。さらに、検出ドライバ１４０は、低減されたデータ３３７を生成することにおいて、プロセッサ・コンポーネント３５０ａおよび３５０ｂのそれぞれのプロセッサ・コンポーネントの状態の指示を照合して（collate）、指示の組み合わされた集合にしてもよい。例として、検出ドライバ１４０は、モニタリング・ユニット３５４のそれぞれから受領されるモニタリング・データ３３４における指示における冗長な情報をフィルタリングして除去してもよい。
【００４２】
さまざまな実施形態において、プロセッサ・コンポーネント３５０ａおよび３５０ｂのそれぞれは、幅広い多様な商業的に入手可能なプロセッサのいずれをも含みうる。さらに、これらのプロセッサ・コンポーネントの一つまたは複数は、複数プロセッサ、複数スレッド・プロセッサ、複数コア・プロセッサ（複数のコアが同じコアに共存するのでもあるいは別個のコアに共存するのでもよい）および／または複数の物理的に別個なプロセッサが何らかの仕方でリンクされる他の何らかの変種の複数プロセッサ・アーキテクチャを含みうる。
【００４３】
さまざまな実施形態において、記憶３６０および５６０のそれぞれは、可能性としては電力の中断されない提供を要求する揮発性技術を含み、可能性としてはリムーバブルであってもなくてもよい機械可読記憶媒体の使用に関わる技術を含む、幅広い多様な情報記憶技術の任意のものに基づいていてもよい。このように、これらの記憶のそれぞれは、幅広い多様な型（または型の組み合わせ）の記憶装置の任意のものを含んでいてもよい。それには、限定なしに、読み出し専用メモリ（ROM）、ランダム・アクセス・メモリ（RAM）、動的RAM（DRAM）、倍速データ・レートDRAM（DDR-DRAM）、同期DRAM（SDRAM）、静的RAM（SRAM）、プログラム可能型ROM（PROM）、消去可能なプログラム可能型ROM（EPROM）、電気的に消去可能なプログラム可能型ROM（EEPROM）、フラッシュメモリ、ポリマー・メモリ（たとえば強誘電性ポリマー・メモリ）、オボニック・メモリ、相変化または強誘電性メモリ、シリコン‐酸化物‐窒化物‐酸化物‐シリコン（SONOS）メモリ、磁気または光学式カード、一つまたは複数の個々の強磁性ディスク・ドライブまたは一つまたは複数のアレイに編成された複数の記憶装置（たとえば独立したディスクの冗長なアレイすなわちRAIDアレイに編成された複数の強磁性ディスク・ドライブ）を含む。これらの記憶のそれぞれは単一のブロックとして描かれているが、これらの一つまたは複数は、異なる記憶技術に基づいていてもよい複数の記憶装置を含んでいてもよいことを注意しておくべきである。よって、たとえば、これらの描かれている記憶のそれぞれの一つまたは複数は、プログラムおよび／またはデータが何らかの形の機械可読記憶媒体上で記憶され、伝達されうるための光学式ドライブまたはフラッシュ・メモリ・カード・リーダーと、比較的長期間にわたってローカルにプログラムおよび／またはデータを記憶するための強磁性ディスク・ドライブと、プログラムおよび／またはデータへの比較的迅速なアクセスを可能にする一つまたは複数の揮発性半導体メモリ・デバイス（たとえばSRAMまたはDRAM）との組み合わせを表わしていてもよい。また、これらの記憶のそれぞれは、同一の記憶技術に基づくが、使用における特化の結果として別個に維持されていてもよい複数の記憶コンポーネントから構成されていてもよい（たとえば、いくつかのDRAMデバイスは主記憶として用いられ、他のDRAMデバイスはグラフィック・コントローラの相異なるフレーム・バッファとして用いられる）。
【００４４】
さまざまな実施形態において、インターフェース３９０および５９０のそれぞれは、先述したようにコンピューティング装置型の装置と結合されることを可能にする幅広い多様な信号伝達技術の任意のものを用いてもよい。これらのインターフェースのそれぞれは、そのような結合を可能にするために必須の機能の少なくとも一部を提供する回路を含んでいてもよい。しかながら、これらのインターフェースのそれぞれは、プロセッサ・コンポーネントの対応するものによって実行される命令のシーケンスをもって少なくとも部分的に実装されてもよい（たとえば、プロトコル・スタックまたは他のフィーチャーを実装するために）。電気的および／または光学的に伝導性のケーブルが用いられる場合、これらのインターフェースは、限定なしに、RS-232C、RS-422、USB、イーサネット（登録商標）（IEEE802.3）またはIEEE1394を含む多様な業界標準の任意のものに準拠する信号伝達および／またはプロトコルを用いてもよい。
。無線信号伝送の使用に関わる場合には、これらのインターフェースは、限定なしに、IEEE802.11a、802.11b、802.11g、802.16、802.20（一般に「モバイル・ブロードバンド・ワイヤレス・アクセス」と称される）；ブルートゥース（登録商標）；ジグビー；またはセルラー無線電話サービス、たとえば一般パケット電波サービス付きGSM（登録商標）（GSM/GPRS:  GSM  with  General  Packet  Radio  Service）、CDMA/1xRTT、グローバル・エボリューションのためのエンハンスト・データ・レート（EDGE:  Enhanced  Data  Rates  for  Global  Evolution）、エボリューション・データ・オンリー／オプティマイズド（EV-DO:  Evolution  Data  Only/Optimized）、エボリューション・フォー・データ・アンド・ボイス（EV-DV:  Evolution  For  Data  and  Voice）、高速下りリンク・パケット・アクセス（HSDPA:  High  Speed  Downlink  Packet  Access）、高速上りリンク・パケット・アクセス（HSUPA:  High  Speed  Uplink  Packet  Access）、4G  LTEなどを含む多様な業界標準の任意のものに準拠する信号伝達および／またはプロトコルを用いてもよい。
【００４５】
図５は、図１の競合状態デバッグ・システム１０００のある実施形態の一部のブロック図をより詳細に示す。より具体的には、図５は、プロセッサ・コンポーネント３５０が、少なくとも検出ドライバ１４０を実行することにおいて、同じデータ片への二つのアクセスの間の競合状態に関連しうるキャッシュ・イベントを検出する、コンピューティング装置３００の動作環境の諸側面を描いている。図６は、図２の競合状態デバッグ・システム１０００のある実施形態の一部のブロック図をより詳細に示す。より具体的には、図６は、プロセッサ・コンポーネント３５０ａまたは３５０ｂのいずれもが、少なくとも検出ドライバ１４０を実行することにおいて、同じデータ片への二つのアクセスの間の競合状態に関連しうるキャッシュ・イベントを検出する、コンピューティング装置３００の動作環境の諸側面を描いている。
【００４６】
図５および図６の両方を参照するに、当業者には認識できるように、オペレーティング・システム３４０、アプリケーション・ルーチン（単数または複数）３７０、検出ドライバ１４０およびデバッグ・ルーチン１７０は、それぞれを構成するコンポーネントを含め、プロセッサ・コンポーネント３５０、３５０ａまたは３５０ｂのうちの該当するものを実装するために選択される、任意の型のプロセッサ（単数または複数）上で動作するよう選択される。さまざまな実施形態において、それぞれを構成する命令のシーケンスは、オペレーティング・システム、デバイス・ドライバおよび／またはアプリケーション・レベル・ルーチン（たとえば、ディスク・メディア上で提供される「ソフトウェア・スイート」、リモート・サーバーから得られる「アプレット」など）の一つまたは複数を含んでいてもよい。オペレーティング・システムが含まれる場合、オペレーティング・システムは、プロセッサ・コンポーネント３５０、３５０ａまたは３５０ｂの任意の対応するものについて適切な、多様な利用可能なオペレーティング・システムのうちのいかなるものであってもよい。一つまたは複数のデバイス・ドライバが含まれる場合には、それらのデバイス・ドライバは、コンピューティング装置３００の、ハードウェア・コンポーネントであれソフトウェア・コンポーネントであれ、多様な他のコンポーネントの任意のものについてのサポートを提供してもよい。
【００４７】
検出ドライバ１４０は、同じデータ片（たとえばデータ３３０）へのアクセスの間の競合状態に関連する一つまたは複数の特定のキャッシュ・イベント（たとえば、RFO、HITMなど）を検出するようモニタリング・ユニット３５４の一つまたは複数を構成設定するよう、プロセッサ・コンポーネント３５０によってまたはプロセッサ・コンポーネント３５０ａおよび／または３５０ｂによって実行可能な構成設定コンポーネント１４５を含んでいてもよい。より具体的には、構成設定コンポーネント１４５のトリガー・コンポーネント１４５５は、プロセッサ・コンポーネント３５０またはプロセッサ・コンポーネント３５０ａおよび／または３５０ｂの状態のさまざまな側面を捕捉することによって応答すべき一つまたは複数の特定のキャッシュ・イベントを指定するよう、モニタリング・ユニットのうち一つまたは複数のモニタリング・ユニットの、レジスタ３５４５の一つまたは複数をプログラムする。構成設定コンポーネント１４５は、構成設定データ１３５から、それらの特定のキャッシュ・イベントが何であるかの指示を取得してもよい。レジスタ３５４５は、プロセッサ・コンポーネント３５０またはプロセッサ・コンポーネント３５０ａおよび／または３５０ｂの状態のどの側面が捕捉されるべきかの選択を可能にしてもよい。さらに、レジスタ３５４５は、モニタリング・ユニット（単数または複数）３５４によって生成されるモニタリング・データ３３４（あるいは代替的には図６に描かれるモニタリング・データ３３４ａおよび３３４ｂ）が提供される仕方について何らかの制御を可能にしてもよい。
【００４８】
構成設定コンポーネント１４５のカウンタ・コンポーネント１４５４は、プロセッサ・コンポーネント３５０またはプロセッサ・コンポーネント３５０ａおよび／または３５０ｂの状態を、指定されたキャッシュ・イベントの生起の指定された間隔で（たとえば「N」回目の生起ごとに）捕捉するようモニタリング・ユニット（単数または複数）３５４のカウンタ３５４４をプログラムして、そのような捕捉が実行される頻度を低下させてもよい。プロセッサ・コンポーネント３５０の二つ以上（たとえば、図６のプロセッサ・コンポーネント３５０ａおよび／または３５０ｂ）がある実施形態では、構成設定コンポーネント１４５は、同じ頻度でのおよび／またはキャッシュ・イベントの同じ生起についてのキャッシュ・イベントの捕捉を協調させるよう、各プロセッサ・コンポーネントのモニタリング・ユニット３５４をプログラムしてもよい。
【００４９】
トリガー・コンポーネント１４５５は、前記一つまたは複数の特定のキャッシュ・イベントの検出を動的に有効および／または無効にするよう、モニタリング・ユニット３５４のうち一つまたは複数のモニタリング・ユニットのレジスタ３５４５の一つまたは複数を操作してもよい。構成設定コンポーネント１４５は、オペレーティング・システム３４０、デバッグ・ルーチン１７０および／またはアプリケーション・ルーチン３７０のうちの少なくとも一つのアプリケーション・ルーチンから受領される、アプリケーション・ルーチン３７０のうちの前記少なくとも一つのアプリケーション・ルーチンがいつ実行されているかの指示に応答してそうしてもよい。
【００５０】
検出ドライバ１４０は、モニタリング・ユニット（単数または複数）３５４からモニタリング・データ３３４またはモニタリング・データ３３４ａおよび３３４ｂを受領するよう、プロセッサ・コンポーネント３５０によってまたはプロセッサ・コンポーネント３５０ａおよび／または３５０ｂによって実行可能なフィルタリング・コンポーネント１４４を含んでいてもよい。モニタリング・データ３３４またはモニタリング・データ３３４ａ〜ｂを受領すると、フィルタリング・コンポーネント１４４は、アプリケーション・ルーチン３７０のうちの一つまたは複数のアプリケーション・ルーチンのどの部分３７７が同じデータ片にアクセスすることにおける競合状態に関わっていることがありうるかを同定するために関連があると見なされる指示の部分集合をもつ低減されたデータ３３７を生成するよう、プロセッサ・コンポーネント３５０またはプロセッサ・コンポーネント３５０ａおよび／または３５０ｂの状態の指示をパースする。そうすることにおいて、フィルタリング・コンポーネント１４４は、キャッシュ・イベントに関連付けられたルーチンおよび／またはデータのアドレスを、そのような競合状態の原因であると信じられるアプリケーション・ルーチン３７０のうち一つまたは複数のアプリケーション・ルーチンの部分３７７の、またはそのような競合状態のうちにアクセスされるデータのいずれかの、一つまたは複数の既知のアドレスまたはアドレス範囲と比べることによってそうしてもよい。プロセッサ・コンポーネント３５０の二つ以上（たとえば、図６のプロセッサ・コンポーネント３５０ａおよび／または３５０ｂ）がある実施形態では、フィルタリング・コンポーネントは、低減されたデータ３３７を生成することにおいて、それらのプロセッサ・コンポーネントの状態の諸指示における冗長な情報を消去してもよい。
【００５１】
フィルタリング・コンポーネント１４４は、コア３５５、プロセスおよび／またはスレッドのうち、そのような競合状態の原因であると信じられるアプリケーション・ルーチン３７０のうち一つまたは複数のアプリケーション・ルーチンのいずれかの部分３７７を実行することに関わらないものの状態の指示を除去してもよい。これを可能にするために、フィルタリング・コンポーネント１４４は、前記一つまたは複数のアプリケーション・ルーチン３７０の諸部分３７７を実行することに関わるコア３５５、プロセスおよび／またはスレッドの識別子を取得してもよい。フィルタリング・コンポーネント１４４は、そのような諸識別子を、前記諸指示に含まれる同様の諸識別子と比較して、アプリケーション・ルーチン（単数または複数）３７０の異なる部分３７７によってなされるアクセスの間の競合状態から生じるキャッシュ・イベントに関連付けられた指示を他のキャッシュ・イベントに関連付けられた指示から区別してもよい。さまざまな実施形態において、オペレーティング・システム３４０のアーキテクチャおよび／または他の因子に依存して、フィルタリング・コンポーネント１４４はそのような識別子を、アプリケーション・ルーチン（単数または複数）３７０から直接（アプリケーション・ルーチン３７０のうち一つまたは複数が「デバッグ・モード」で動作することの結果として）、デバッグ・ルーチンから、あるいはオペレーティング・システム３４０から受領してもよい。デバッグ・ルーチン１７０は、そのような識別子を、フィルタリング・コンポーネント１４４に中継する前に、アプリケーション・ルーチン（単数または複数）３７０またはオペレーティング・システム３４０から受領してもよい。
【００５２】
検出ドライバ１４０は、低減されたデータ３３７を、コンピューティング装置３００または別のコンピューティング装置（たとえばデバッグ装置５００）の一方または両方内で実行されるデバッグ・ルーチンに中継するよう、プロセッサ・コンポーネント３５０によってまたはプロセッサ・コンポーネント３５０ａおよび／または３５０ｂによって実行可能な中継コンポーネント１４７を含んでいてもよい。低減されたデータ３３７をコンピューティング装置３００内で実行されるデバッグ・ルーチン（たとえばデバッグ・ルーチン１７０）に中継することにおいて、中継コンポーネント１４７は、オペレーティング・システム３４０を通じて、低減されたデータ３３７をそのようにして中継してもよい。これは、検出ドライバ１４０がオペレーティング・システム３４０と同様の、より低いレベルで、デバイス・ドライバとして実行され、それによりオペレーティング・システムがデバイス・ドライバとデバッグ・ルーチンのような他のルーチンとの間の抽象化層を提供する実施形態では必須にされてもよい。低減されたデータ３３７を別のコンピューティング装置内で実行されるデバッグ・ルーチンに中継することにおいて、中継コンポーネント１４７はインターフェース３９０を用いて、低減されたデータ３３７を別のコンピューティング装置（たとえばデバッグ装置５００）にネットワーク（たとえばネットワーク９９９）を介して伝送してもよい。
【００５３】
図７は、論理フロー２１００のある実施形態を示している。論理フロー２１００は、本稿に記載される一つまたは複数の実施形態によって実行される動作の一部または全部を表わしていてもよい。より具体的には、論理フロー２１００は、少なくとも検出ドライバ１４０を実行することにおいてプロセッサ・コンポーネント３５０またはプロセッサ・コンポーネント３５０ａおよび／または３５０ｂによって実行される、および／またはコンピューティング装置３００の他のコンポーネント（単数または複数）によって実行される動作を示していてもよい。
【００５４】
２１１０では、競合状態デバッグ・システムのコンピューティング装置のプロセッサ・コンポーネント（たとえば、競合状態デバッグ・システム１０００のコンピューティング装置３００のプロセッサ・コンポーネント３５０またはプロセッサ・コンポーネント３５０ａおよび／または３５０ｂ）は、一つまたは複数のアプリケーション・ルーチン（たとえば、アプリケーション・ルーチン３７０）の実行開始の指示（indication）を待つ。論じたように、そのような指示は、前記一つまたは複数のアプリケーション・ルーチンから直接、オペレーティング・システム（たとえばオペレーティング・システム３４０）を通じて、あるいはデバッグ・ルーチン（たとえばデバッグ・ルーチン１７０）から伝達されてもよい。
【００５５】
２１２０では、アプリケーション・ルーチンの少なくとも一つの部分を実行するプロセッサ・コンポーネントのモニタリング・ユニット（たとえば、モニタリング・ユニット３５４）が、同じデータ片へのアクセス間の競合状態に関連する特定のキャッシュ・イベント（単数または複数）（たとえばRFO、HITMなど）の生起を検出し、一つまたは複数のアプリケーション・ルーチンを実行するプロセッサ・コンポーネントの状態の指示を捕捉することによってそれらの生起に応答するよう構成設定される。前記アプリケーション・ルーチン（単数または複数）の少なくとも一部を実行するプロセッサの一つまたは複数は、モニタリング・ユニットを構成設定する同じプロセッサ・コンポーネントであってもなくてもよい。先に論じたように、アクセスは、読み出し動作と書き込み動作の組み合わせであってもよく、あるいは複数の書き込み動作の組み合わせであってもよい。それに関わりなく、アクセスは、単一のアプリケーション・ルーチンの異なる部分、二つの異なるアプリケーション・ルーチンの諸部分または同じアプリケーション・ルーチンの同じ部分の二つのインスタンスであって、それらのアクセスを協調させることが意図されていたのに協調させなかったもの（たとえば、単一のアプリケーション・ルーチン３７０またはアプリケーション・ルーチン３７０のうち異なるアプリケーション・ルーチンの諸部分３７７または単一のアプリケーション・ルーチン３７０の単一の部分３７７）によってなされてもよい。やはり先に論じたように、捕捉される指示は、生起したキャッシュ・イベントの型の指標、該キャッシュ・イベントをトリガーしたデータ・アクセスの型（たとえば読み出し動作または書き込み動作）の指標、そのデータ・アクセスを引き起こした実行のプロセスおよび／またはスレッドの識別子、命令ポインタのアドレスの指示、プロセッサ・コンポーネントの一つまたは複数のレジスタの内容などを含んでいてもよい。
【００５６】
２１３０では、モニタリング・ユニットのカウンタが、生起ごと以外のキャッシュ・イベントの生起の間隔でそのような捕捉を実行するよう構成設定される。論じたように、そのような間隔は、三回目ごと、五回目ごとなど、キャッシュ・イベントの「N回目」の生起ごとであってもよい。
【００５７】
２１４０では、前記一つまたは複数のアプリケーション・ルーチンの実行の終了が待たれる。２１５０では、前記アプリケーション・ルーチンの実行の終了に対して、キャッシュ・イベントの生起をモニタリングするのをやめるようモニタリング・ユニットを構成設定することによって応答する。このようにして、キャッシュ・イベントの生起をモニタリングすることおよび付随する捕捉動作は、アプリケーション・ルーチンが現在実行されているかどうかに依存して、動的に有効にされ、無効にされうる。
【００５８】
図８は、論理フロー２２００のある実施形態を示している。論理フロー２２００は、本稿に記載される一つまたは複数の実施形態によって実行される動作の一部または全部を表わしていてもよい。より具体的には、論理フロー２２００は、少なくとも検出ドライバ１４０を実行することにおいてプロセッサ・コンポーネント３５０またはプロセッサ・コンポーネント３５０ａおよび／または３５０ｂによって実行される、および／またはコンピューティング装置３００の他のコンポーネント（単数または複数）によって実行される動作を示していてもよい。
【００５９】
２２１０では、競合状態デバッグ・システムのコンピューティング装置のプロセッサ・コンポーネントのモニタリング・ユニット（たとえば、競合状態デバッグ・システム１０００のコンピューティング装置３００のプロセッサ・コンポーネント３５０またはプロセッサ・コンポーネント３５０ａおよび／または３５０ｂのモニタリング・ユニット３５４）は、少なくとも一つのアプリケーション・ルーチンの少なくとも一部（たとえば、アプリケーション・ルーチン３７０のうちの一つのアプリケーション・ルーチンの諸部分３７７のうちの一つ）を実行するプロセッサ・コンポーネントの一つまたは複数のコア（たとえば、コア３５５のうちの一つまたは複数またはコア３５５ｘおよび３５５ｙの一方または両方）を、指定されたキャッシュ・イベントの生起について、モニタリングする。論じたように、モニタリング・ユニットは、同じデータ片に関わる読み出し動作と書き込み動作の間または二つの書き込み動作の間の競合状態のような、同じデータ片へのアクセスの間の競合状態に関連する一つまたは複数の特定のキャッシュ・イベントについてモニタリングするよう構成されている。
【００６０】
２２２０では、指定されたイベントの生起が検出される。２２３０では、モニタリング・ユニットのカウンタ（たとえばカウンタ３５４４）にプログラムされた間隔の終わりに達したかどうかを判定する検査がなされる。間隔の終わりに達していなければ、アプリケーション・ルーチンの少なくとも一部を実行するプロセッサ・コンポーネントの前記一つまたは複数のコアが再び２２１０においてモニタリングされる。
【００６１】
しかしながら、間隔の終わりに達していたら、少なくとも一つのアプリケーション・ルーチンの少なくとも一部を実行するプロセッサ・コンポーネントの前記一つまたは複数のコアの状態が２２４０において捕捉される。論じたように、そのような捕捉は、前記コアのうち一つまたは複数のコアのレジスタのうちの一つまたは複数のレジスタ（たとえばレジスタ３５５５）の状態および／または前記コアのうち一つまたは複数のコアの命令ポインタによってポイントされるアドレスを捕捉することに関わってもよい。そのような捕捉に続いて、前記一つまたは複数のコアのモニタリングは２２１０に続く。
【００６２】
図９は、論理フロー２３００のある実施形態を示す。論理フロー２３００は、本稿に記載される一つまたは複数の実施形態によって実行される動作の一部または全部を表わしていてもよい。より具体的には、論理フロー２３００は、少なくとも検出ドライバ１４０を実行することにおいてプロセッサ・コンポーネント３５０またはプロセッサ・コンポーネント３５０ａおよび／または３５０ｂによって実行される、および／またはコンピューティング装置３００の他のコンポーネント（単数または複数）によって実行される動作を示していてもよい。
【００６３】
２３１０では、競合状態デバッグ・システムのコンピューティング装置のプロセッサ・コンポーネント（たとえば、競合状態デバッグ・システム１０００のコンピューティング装置３００のプロセッサ・コンポーネント３５０またはプロセッサ・コンポーネント３５０ａおよび／または３５０ｂ）は、少なくとも一つのアプリケーション・ルーチンの少なくとも一つの部分（たとえば、アプリケーション・ルーチン３７０のうちの一つのアプリケーション・ルーチンの部分３７７）を実行することに関わる少なくとも一つのコア（たとえば、コア３５５のうちの一つ）、プロセスおよび／またはスレッドの識別情報（identity）の指示（indication）を受領する。論じたように、そのような指示は、前記アプリケーション・ルーチン（単数または複数）から直接、オペレーティング・システム（たとえばオペレーティング・システム３４０）を通じて、あるいはデバッグ・ルーチン（たとえばデバッグ・ルーチン１７０）から伝達されてもよい。
【００６４】
２３２０では、指定されたキャッシュ・イベントの生起に応答して捕捉された、プロセッサ・コンポーネントの一つまたは複数のコアの状態の指示が受領される。論じたように、指定されたキャッシュ・イベントは、単一のアプリケーション・ルーチンの二つの部分の間または二つの異なる（だが関係した）アプリケーション・ルーチンの部分の間の、同じメモリ片にアクセスすることにおける競合状態の生起に関連したキャッシュ・イベントの型であってもよい。その間に競合状態が存在しうるアクセスは、読み出し動作と書き込み動作の組み合わせであってもよく、あるいは二つ以上の書き込み動作の組み合わせであってもよい。
【００６５】
２３３０では、前記アプリケーション・ルーチン（単数または複数の）のどの部分を実行することにも関わらない一つまたは複数のコア、プロセスおよび／またはスレッドに関連する指示がフィルタリングにより除去され、低減されたデータを生成する。そのようなフィルタリングは、前記アプリケーション・ルーチン（単数または複数の）の少なくとも一つの部分を実行することに関わる一つまたは複数のコア、プロセスおよび／またはスレッドの識別情報の指示を用いる。
【００６６】
２３４０では、少なくとも部分的には上記のフィルタリングによって生成された前記低減されたデータが、デバッグ・ルーチンに提供される。論じたように、デバッグ・ルーチンは、前記アプリケーション・ルーチン（単数または複数）が実行されるのと同じコンピューティング装置内で実行されてもよく、前記低減されたデータはデバッグ・ルーチンに、そのコンピューティング装置のオペレーティング・システムを通じて提供されてもよい。さもなければ、前記低減されたデータは、ネットワークを介して、デバッグ・ルーチンが実行されている別のコンピューティング装置に送信されてもよい。
【００６７】
図１０は、先に記述したさまざまな実施形態を実装するために好適な処理アーキテクチャ３０００の実施形態を示している。より具体的には、処理アーキテクチャ３０００（またはその変形）は、コンピューティング装置１００、３００または５００のうちの一つまたは複数のコンピューティング装置の一部として実装されてもよい。処理アーキテクチャ３０００のコンポーネントは、最後の二桁が、これらのコンピューティング装置の一部として先に描かれ、記述されたコンポーネントの少なくともいくつかの参照符号の最後の二桁に対応する参照符号を与えられていることを注意しておくべきである。これは、それぞれの諸コンポーネントを相関付ける助けとしてなされている。
【００６８】
処理アーキテクチャ３０００は、限定なしに、一つまたは複数のプロセッサ、マルチコア・プロセッサ、コプロセッサ、メモリ・ユニット、チップセット、コントローラ、周辺機器、インターフェース、発振器、タイミング装置、ビデオ・カード、オーディオ・カード、マルチメディア入出力（I/O）コンポーネント、電源などを含むデジタル処理において一般的に用いられるさまざまな要素を含んでいてもよい。本願での用法では、用語「システム」および「コンポーネント」は、デジタル処理が実行されるコンピューティング装置のエンティティを指すことが意図されている。該エンティティは、ハードウェア、ハードウェアとソフトウェアの組み合わせ、ソフトウェアまたは実行中のソフトウェアであり、その例がこの描かれた例示的な処理アーキテクチャによって与えられている。たとえば、コンポーネントは、これに限られないが、プロセッサ・コンポーネント上で走るプロセス、該プロセッサ・コンポーネント自身、光学式および／または磁気式記憶媒体を用いうる記憶装置（たとえばハードディスク・ドライブ、アレイにおける複数の記憶ドライブなど）、ソフトウェア・オブジェクト、実行可能な命令シーケンス、実行のスレッド、プログラムおよび／またはコンピューティング装置全体（たとえばコンピュータ全体）であることができる。例として、サーバー上で走るアプリケーションおよび該サーバーの両方が、一つのコンポーネントであることができる。一つまたは複数のコンポーネントは、プロセスおよび／または実行のスレッド内に存在することができ、コンポーネントは、一つのコンピューティング装置上に局在化されているおよび／または二つ以上のコンピューティング装置の間で分散されていることができる。さらに、コンポーネントは、動作を協調させるようさまざまな型の通信媒体によって互いに通信上結合されてもよい。協調は、一方向性または双方向性の情報交換に関わってもよい。たとえば、諸コンポーネントは、通信媒体を通じて通信される信号の形で情報を通信してもよい。情報は、一つまたは複数の信号線に割り当てられた信号として実装されることができる。メッセージ（コマンド、状態、アドレスまたはデータ・メッセージを含む）は、そのような信号の一つであってもよく、あるいは複数のそのような信号であってもよく、多様な接続および／またはインターフェースの任意のものを通じてシリアルにまたは実質的に並列に伝送されてもよい。
【００６９】
描かれるように、処理アーキテクチャ３０００を実装することにおいて、コンピューティング装置は少なくとも、プロセッサ・コンポーネント９５０、記憶９６０、一つまたは複数の他の装置へのインターフェース９９０および結合９５９を含んでいてもよい。のちに説明するように、意図される使用および／または使用条件を含む、処理アーキテクチャ３０００を実装するコンピューティング装置のさまざまな側面に依存して、そのようなコンピューティング装置はさらに、追加的なコンポーネントを含んでいてもよい。たとえば、限定なしに、ディスプレイ・インターフェース９８５または一つまたは複数の処理サブシステム９００などである。何であれ処理アーキテクチャ３０００を実装しうるコンピューティング装置において、回路をもって実装されるさまざまな描かれたコンポーネントの一つは、離散的なコンポーネントを用いて、および／または単一または比較的少数の半導体デバイス内の回路の諸ブロック（たとえば、「システムオンチップ」すなわちSOC）として実装されてもよい。
【００７０】
結合９５９は、一つまたは複数のバス、ポイントツーポイント相互接続、トランシーバ、バッファ、クロスポイント・スイッチおよび／または少なくとも前記プロセッサ・コンポーネント９５０を前記記憶９６０に通信上結合する他の導体および／または論理を含んでいてもよい。結合９５９はさらに、前記プロセッサ・コンポーネント９５０をインターフェース９９０、オーディオ・サブシステム９７０およびディスプレイ・インターフェース９８５のうちの一つまたは複数に（これらのどれがおよび／または他のコンポーネントが存在するかどうかに依存して）結合してもよい。プロセッサ・コンポーネント９５０が結合９５９によってそのように結合されると、プロセッサ・コンポーネント９５０は、上記のコンピューティング装置のどれ（単数または複数）が処理アーキテクチャ３０００を実装するにせよ、上記で詳しく述べたタスクのさまざまなものを実行することができる。結合９５９は、信号が光学的および／または電気的に伝達されるために使われる多様な技術または技術の組み合わせの任意のものを用いて実装されうる。さらに、結合９５９の少なくとも諸部分は、限定なしに、加速グラフィック・ポート（AGP）、カードバス（CardBus）、拡張業界標準アーキテクチャ（E-ISA）、マイクロチャネル・アーキテクチャ（MCA）、NuBus、周辺コンポーネント相互接続（拡張）（PCI-X）、PCIエクスプレス（PCI-E）、パーソナル・コンピュータ・メモリ・カード国際連合（PCMCIA）バス、HyperTransport（商標）、QuickPathなどを含む、幅広い多様な業界標準の任意のものに準拠するタイミングおよび／またはプロトコルを用いてもよい。
【００７１】
先に論じたように、プロセッサ・コンポーネント９５０（プロセッサ・コンポーネント３５０または５５０の一つまたは複数に対応）は、幅広い多様な技術の任意のものを用い、いくつもある方法の任意のものにおいて物理的に組み合わされた一つまたは複数のコアを用いて実装された、幅広い多様な商業的に入手可能なプロセッサの任意のものを含んでいてもよい。
【００７２】
先に論じたように、記憶９６０（記憶３６０または５６０の一つまたは複数に対応）は、幅広い多様な技術または技術の組み合わせの任意のものに基づく一つまたは複数の相異なる記憶装置から構成されていてもよい。より具体的には、描かれるように、記憶９６０は、揮発性記憶９６１（たとえば、RAM技術の一つまたは複数の形に基づく半導体記憶）、不揮発性記憶９６２（内容を保持するために電力の一定した提供を必要としない半導体、強磁性または他の記憶）およびリムーバブル・メディア記憶９６３（たとえば、コンピューティング装置の間で情報を伝達するために用いられうるリムーバブルなディスクまたは半導体メモリ・カード記憶）のうちの一つまたは複数を含んでいてもよい。可能性としては複数の相異なる型の記憶を含むという記憶９６０のこの描写は、一つの型がプロセッサ・コンポーネント９５０によるデータのより迅速な操作を可能にする比較的高速な読み出しおよび書き込み機能を提供する（だが可能性としては一定して電力を必要とする「揮発性」技術を使う）一方、別の型は不揮発性記憶の比較的高い密度を提供する（だが比較的低速な読み出しおよび書き込み機能を提供する可能性が高い）という、コンピューティング装置における二つ以上の型の記憶装置の使用が一般的であることを認識してのものである。
【００７３】
異なる技術を用いる異なる記憶装置のしばしば異なる特性を与えられると、そのような異なる記憶装置がコンピューティング装置の他の部分に、異なるインターフェースを通じて異なる記憶装置に結合された異なる記憶コントローラを通じて結合されることも一般的である。たとえば、揮発性記憶９６１が存在し、RAM技術に基づく場合、揮発性記憶９６１は、揮発性記憶９６１への適切なインターフェースを提供する記憶コントローラ９６５ａを通じて結合９５９に通信上結合されてもよく、記憶コントローラ９６５ａはおそらくは行および列のアドレッシングを用い、記憶コントローラ９６５ａは揮発性記憶９６１内に記憶されている情報を保持するのを助けるために、行リフレッシュ（row  refreshing）および／または他の維持タスクを実行してもよい。もう一つの例として、不揮発性記憶９６２が存在し、一つまたは複数の強磁性および／または半導体ディスク・ドライブを含む場合、不揮発性記憶９６２は、不揮発性記憶９６２への適切なインターフェースを提供する記憶コントローラ９６５ｂを通じて結合９５９に通信上結合されてもよく、記憶コントローラ９６５ｂはおそらくは情報のブロックおよび／またはシリンダおよびセクタのアドレッシングを用いる。さらにもう一つの例として、リムーバブル・メディア記憶９６３が存在し、機械可読記憶媒体９６９の一つまたは複数の片を用いる一つまたは複数の光学式および／または半導体ディスク・ドライブを含む場合、リムーバブル・メディア記憶９６３は、リムーバブル・メディア記憶９６３への適切なインターフェースを提供する記憶コントローラ９６５ｃを通じて結合９５９に通信上結合されてもよく、記憶コントローラ９６５ｃはおそらくは情報のブロックのアドレッシングを用い、記憶コントローラ９６５ｃは、機械可読記憶媒体９６９の寿命を長くすることに固有の仕方で読み出し動作、消去動作および書き込み動作を協調させてもよい。
【００７４】
揮発性記憶９６１または不揮発性記憶９６２の一方または他方は、それぞれのベースとなる技術に依存してさまざまな実施形態を実装するためにプロセッサ・コンポーネント９５０によって実行可能な命令のシーケンスを含むルーチンが記憶されていてもよい機械可読記憶媒体の形の製造物を含んでいてもよい。例として、不揮発性記憶９６２が強磁性ベースのディスク・ドライブ（たとえば、いわゆる「ハードドライブ」）を含む場合には、そのような各ディスク・ドライブは典型的には、フロッピーディスケットのような記憶媒体と似た仕方で磁気応答性の粒子が堆積され、命令のシーケンスのような情報を記憶するためにさまざまなパターンにおいて磁気的に配向されている一つまたは複数の回転円盤を用いる。もう一つの例として、不揮発性記憶９６２は、コンパクトフラッシュ（登録商標）カードに似た仕方で命令のシーケンスのような情報を記憶するための半導体記憶デバイスのバンクから構成されていてもよい。また、実行可能なルーチンおよび／またはデータを記憶するために異なる諸時点においてコンピューティング装置において異なる型の記憶装置を用いることが一般的である。そこで、さまざまな実施形態を実装するためにプロセッサ・コンポーネント９５０によって実行されるべき命令のシーケンスを含むルーチンが、初期には機械可読記憶媒体９６９に記憶されてもよく、その後、リムーバブル・メディア記憶９６３が用いられて、そのルーチンを、より長期間の記憶のために、機械可読記憶媒体９６９の継続した存在を必要としない不揮発性記憶９６２に、および／またはそのルーチンが実行される際にプロセッサ・コンポーネント９５０によるより高速なアクセスを可能にするために、揮発性記憶９６１に、コピーしてもよい。
【００７５】
先に論じたように、インターフェース９９０（インターフェース３９０または５９０の一つまたは複数に対応）は、コンピューティング装置を一つまたは複数の他の装置に通信上結合するために用いられうる多様な通信技術の任意のものに対応する多様な信号伝達技術の任意のものを用いてもよい。また、プロセッサ・コンポーネント９５０が入出力装置（たとえば、描かれている例示的なキーボード９２０またはプリンタ９２５）および／または他のコンピューティング装置と、可能性としてはネットワーク（たとえばネットワーク９９９）または相互接続された一組のネットワークを通じて対話することを可能にするために、さまざまな形の有線または無線の信号伝達の一方または両方が用いられてもよい。しばしば任意の一つのコンピューティング装置によってサポートされる必要のある複数の型の信号伝達および／またはプロトコルのしばしば大きく異なる特性を認識して、インターフェース９９０は、複数の異なるインターフェース・コントローラ９９５ａ、９９５ｂおよび９９５ｃを含むものとして描かれている。インターフェース・コントローラ９９５ａは、描かれているキーボード９２０のようなユーザー入力装置からシリアルに伝送されるメッセージを受領するために多様な型の有線のデジタル・シリアル・インターフェースまたは電波周波数無線インターフェースの任意のものを用いてもよい。インターフェース・コントローラ９９５ｂは、描かれているネットワーク９９９（おそらくは一つまたは複数のリンクからなるネットワーク、あるいは可能性としてはインターネット）を通じて他のコンピューティング装置にアクセスするための多様なケーブル・ベースのまたは無線の信号伝達、タイミングおよび／またはプロトコルの任意のものを用いてもよい。インターフェース９９５ｃは、描かれているプリンタ９２５にデータを伝達するためのシリアルまたはパラレルの信号伝送の使用を可能にする多様な電気伝導性ケーブルの任意のものを用いてもよい。インターフェース９９０の一つまたは複数のインターフェース・コントローラを通じて通信上結合されうる装置の他の例は、限定なしに、マイクロフォン、リモコン、スタイラス・ペン、カード・リーダー、指紋リーダー、バーチャル・リアリティー対話グローブ、グラフィック入力タブレット、ジョイスティック、他のキーボード、網膜スキャナ、タッチスクリーンのタッチ入力コンポーネント、トラックボール、さまざまなセンサー、ジェスチャおよび／または顔の表情を介して人によって合図されるコマンドおよび／またはデータを受け入れるよう人の動きをモニタリングするためのカメラまたはカメラ・アレイ、レーザー・プリンタ、インクジェット・プリンタ、機械的ロボット、フライス盤などを含む。
【００７６】
コンピューティング装置がディスプレイ（たとえば、ディスプレイ５８０に対応する描かれている例示的なディスプレイ９８０）に通信上結合されている（あるいは可能性としては実際に組み込んでいる）場合、処理アーキテクチャ３０００を実装するそのようなコンピューティング装置は、ディスプレイ・インターフェース９８５を含んでいてもよい。より一般化された型のインターフェースがディスプレイに通信上結合することにおいて用いられてもよいが、ディスプレイ上にさまざまな形のコンテンツを視覚的に表示することにおいては、いくらか特化した追加的な処理がしばしば必要とされる。また、使用されるケーブル・ベースのインターフェースのいくらか特化した性質のため、しばしば、相異なるディスプレイ・インターフェースの提供が望ましいものとなる。ディスプレイ・インターフェース９８５によってディスプレイ９８０の通信上の結合において用いられうる有線および／または無線の信号伝達技術は、限定なしに、多様なアナログ・ビデオ・インターフェース、デジタル・ビデオ・インターフェース（DVI）、ディスプレイポート（DisplayPort）などの任意のものを含む多様な業界標準の任意のものに準拠する信号伝達および／またはプロトコルを利用してもよい。
【００７７】
より一般には、本願で記述され、描かれているコンピューティング装置のさまざまな要素は、さまざまなハードウェア要素、ソフトウェア要素または両者の組み合わせを含んでいてもよい。ハードウェア要素の例は、装置、論理装置、コンポーネント、プロセッサ、マイクロプロセッサ、回路、プロセッサ・コンポーネント、回路要素（たとえば、トランジスタ、抵抗器、キャパシタ、インダクタなど）、集積回路、特定用途向け集積回路（ASIC）、プログラム可能な論理デバイス（PLD）、デジタル信号プロセッサ（DSP）、フィールド・プログラマブル・ゲート・アレイ（FPGA）、メモリ・ユニット、論理ゲート、レジスタ、半導体デバイス、チップ、マイクロチップ、チップセットなどを含みうる。ソフトウェア要素の例は、ソフトウェア・コンポーネント、プログラム、アプリケーション、コンピュータ・プログラム、アプリケーション・プログラム、システム・プログラム、ソフトウェア開発プログラム、機械プログラム、オペレーティング・システム・ソフトウェア、ミドルウェア、ファームウェア、ソフトウェア・モジュール、ルーチン、サブルーチン、関数、メソッド、プロシージャ、ソフトウェア・インターフェース、アプリケーション・プログラム・インターフェース（API）、命令セット、コンピューティング・コード、コンピュータ・コード、コード・セグメント、コンピュータ・コード・セグメント、語、値、シンボルまたはそれらの任意の組み合わせを含みうる。しかしながら、実施形態がハードウェア要素および／またはソフトウェア要素を使って実装されるかどうかの決定は、所与の実装のために望まれる、所望される計算レート、電力レベル、熱耐性、処理サイクル予算、入力データ・レート、出力データ・レート、メモリ資源、データ・バス・スピードおよび他の設計もしくはパフォーマンス制約条件など、いくつもある要因に応じて変わりうる。
【００７８】
いくつかの実施形態は、表現「一つの実施形態」または「ある実施形態」ならびにその派生形を使って記述されることがある。これらの用語は、その実施形態との関連で記述される特定の特徴、構造または特性が少なくとも一つの実施形態に含まれることを意味する。本明細書の随所に「ある実施形態では」という句が現われるのは、必ずしもみなが同じ実施形態を指しているのではない。さらに、いくつかの実施形態は、表現「結合された」および「接続された」ならびにその派生形を使って記述されることがある。これらの用語は必ずしも互いの同義語として意図されていない。たとえば、いくつかの実施形態は、二つ以上の要素が互いに直接的に物理的または電気的に接触していることを示すために用語「接続された」および／または「結合された」を使って記述されることがある。しかしながら、用語「結合された」は二つ以上の要素が互いに直接接触してはいないが、それでも互いと協働または相互作用することをも意味することがある。さらに、異なる実施形態からの側面または要素が組み合わされてもよい。
【００７９】
本開示の要約は、技術的開示の性質を素速く見きわめることを読者に許容するために与えられていることを強調しておく。要約は、請求項の範囲や意味を解釈または限定するために使われないという理解のもとに提出される。さらに、以上の詳細な説明において、開示の流れをよくする目的で、さまざまな特徴が単一の実施形態にまとめられていることが見て取れる。この開示法は、請求される実施形態が、各請求項に明示的に記載されているよりも多くの事項を必要とするという意図を反映したものと解釈されるものではない。むしろ、付属の請求項が反映するように、発明の主題は、単一の開示される実施形態の全事項よりも少ないものに存する。このように、付属の請求項は、ここに詳細な説明に組み込まれ、各請求項がそれ自身として別個の実施形態をなす。付属の請求項において、用語「含む」および「ここで」は、それぞれ用語「有する」および「ここにおいて」の平易な英語の等価物として使われる。さらに、用語「第一」「第二」「第三」などは、単にラベルとして使われ、それらの対象に対する数的な要件を課すことは意図されていない。
【００８０】
上記したことは、開示されるアーキテクチャの例を含む。むろん、コンポーネントおよび／または方法論のあらゆる考えられる組み合わせを記述することは可能ではないが、当業者は、多くのさらなる組み合わせおよび置換が可能であることを認識しうる。よって、新規なアーキテクチャは、付属の請求項の精神および範囲内にはいるそのようなあらゆる改変、修正および変形を包含することが意図されている。詳細な開示は、さらなる実施形態に関する例を与える。下記に与える例は限定することは意図されていない。
【実施例】
【００８１】
実施例１では、競合状態を検出する装置が、モニタリング・ユニットを含むプロセッサ・コンポーネントと、データ片へのアクセスの間の競合状態に関連するキャッシュ・イベントを検出し、前記キャッシュ・イベントの生起に応答してモニタリング・データを生成するよう前記プロセッサ・コンポーネントの状態の指示（indication）を捕捉するよう前記モニタリング・ユニットを構成設定する、前記プロセッサ・コンポーネントによる実行のためのトリガー・コンポーネントと、前記キャッシュ・イベントの生起毎よりも少ない頻度での前記プロセッサ・コンポーネントの状態の指示の捕捉を可能にするよう前記モニタリング・ユニットのカウンタを構成設定する、前記プロセッサ・コンポーネントによる実行のためのカウンタ・コンポーネントとを含む。
【００８２】
実施例１の主題を含む実施例２では、前記トリガー・コンポーネントは、前記プロセッサ・コンポーネントによる並行した実行のための複数の部分を含むアプリケーション・ルーチンが前記プロセッサ・コンポーネントによって現在実行されているかどうかに基づいて前記指示の捕捉を動的に有効にしうる。
【００８３】
実施例１ないし２のうちいずれか一項の主題を含む実施例３では、当該装置は、前記キャッシュ・イベントが前記プロセッサ・コンポーネントによって実行されるアプリケーション・ルーチンの第一の部分による前記データ片への第一のアクセスと前記アプリケーション・ルーチンの第二の部分による前記データ片への第二のアクセスとの間の競合状態から生じるのでないことに基づいて前記モニタリング・データから前記指示を除去して、前記モニタリング・データの前記プロセッサ・コンポーネントの状態の複数の指示の部分集合を含む低減されたデータを生成する、前記プロセッサ・コンポーネントによる実行のためのフィルタ・コンポーネントをさらに含み、前記第一のアクセスは書き込み動作を含んでいてもよく、前記第二のアクセスは読み出し動作および書き込み動作の一方を含んでいてもよい。
【００８４】
実施例１ないし３のうちいずれか一項の主題を含む実施例４では、前記フィルタ・コンポーネントは、前記第一の部分、前記第二の部分、前記第一の部分および前記第二の部分の一方を実行する前記プロセッサ・コンポーネントのコアまたは前記第一の部分および前記第二の部分の一方の実行のスレッドのうちの少なくとも一つの識別子に基づいて、前記キャッシュ・イベントが前記第一のアクセスと前記第二のアクセスとの間の競合状態から生じるかどうかを判定しうる。
【００８５】
実施例１ないし４のうちいずれか一項の主題を含む実施例５では、当該装置は、前記プロセッサ・コンポーネントをネットワークに結合するインターフェースと、前記低減されたデータをデバッグ装置に送信するよう前記インターフェースを動作させる、前記プロセッサ・コンポーネントによる実行のための中継コンポーネントとを含んでいてもよい。
【００８６】
実施例１ないし５のうちいずれか一項の主題を含む実施例６では、前記競合状態は、前記データ片を読むための、第一の実行のスレッドにおいて前記プロセッサ・コンポーネントによって実行される第一のアプリケーション・ルーチンの読み出し動作と、前記データ片に書き込むための、第二の実行のスレッドにおいて前記プロセッサ・コンポーネントによって実行される第二のアプリケーション・ルーチンの書き込み動作との間の競合状態を含む。
【００８７】
実施例１ないし６のうちいずれか一項の主題を含む実施例７では、前記指示は、前記プロセッサ・コンポーネントのレジスタの内容、前記プロセッサ・コンポーネントの命令ポインタのアドレス、どんなアクセス動作が前記キャッシュ・イベントをトリガーしたかの指示、前記キャッシュ・イベントの型、前記キャッシュ・イベントをトリガーしたアクセス動作を実行した前記プロセッサのコアの識別子または前記キャッシュ・イベントをトリガーしたアクセス動作が実行された実行のスレッドの識別子のうちの少なくとも一つを含んでいてもよい。
【００８８】
実施例１ないし７のうちいずれか一項の主題を含む実施例８では、前記キャッシュ・イベントは、前記プロセッサ・コンポーネントのキャッシュに関わっていてもよく、所有権を求める読み出し（RFO）キャッシュ・イベントまたは修正版にヒット（HITM）キャッシュ・イベントの少なくとも一方を含んでいてもよい。
【００８９】
実施例１ないし８のうちいずれか一項の主題を含む実施例９では、当該装置は、別のプロセッサ・コンポーネントを含んでいてもよく、前記トリガー・コンポーネントは、前記キャッシュ・イベントを検出し、前記キャッシュ・イベントの生起に応答して別のモニタリング・データとして前記別のプロセッサ・コンポーネントの状態の指示を捕捉するよう前記別のプロセッサ・コンポーネントのモニタリング・ユニットを構成設定する。
【００９０】
実施例１ないし９のうちいずれか一項の主題を含む実施例１０では、前記フィルタ・コンポーネントは、前記キャッシュ・イベントがあるアプリケーション・ルーチンの第一の部分の読み出し動作とそのアプリケーション・ルーチンの第二の部分の書き込み動作との間の競合状態から生じるのでないことに基づいて前記別のモニタリング・データからの前記別のプロセッサ・コンポーネントの状態の指示を除去して、前記モニタリング・データの前記プロセッサ・コンポーネントの状態の複数の指示の部分集合および前記別のモニタリング・データの前記別のプロセッサ・コンポーネントの状態の複数の指示の部分集合を含む低減されたデータを生成してもよい。
【００９１】
実施例１１では、競合状態を検出する装置が、第一のプロセッサ・コンポーネントと；第二のプロセッサ・コンポーネントと；データ片へのアクセスの間の競合状態に関連するキャッシュ・イベントを検出し、前記キャッシュ・イベントの生起に応答して第一のモニタリング・データとして前記第一のプロセッサ・コンポーネントの状態の第一の指示を捕捉するよう前記第一のプロセッサ・コンポーネントのモニタリング・ユニットを構成設定し、前記キャッシュ・イベントを検出し、前記キャッシュ・イベントの生起に応答して第二のモニタリング・データとして前記第二のプロセッサ・コンポーネントの状態の第二の指示を捕捉するよう前記第二のプロセッサ・コンポーネントのモニタリング・ユニットを構成設定するトリガー・コンポーネントと；前記第一の指示および前記第二の指示を比較して、前記第一の指示に対する前記第二の指示の冗長性に基づいて前記第一の指示を含むが前記第二の指示を含まない低減されたデータを生成するフィルタ・コンポーネントとを含んでいてもよい。
【００９２】
実施例１１の主題を含む実施例１２では、前記トリガー・コンポーネントは、前記第一のプロセッサ・コンポーネントおよび前記第二のプロセッサ・コンポーネントの少なくとも一方による並行した実行のための複数の部分を含むアプリケーション・ルーチンが前記第一のプロセッサ・コンポーネントおよび前記第二のプロセッサ・コンポーネントの少なくとも一方によって現在実行されているかどうかに基づいて前記第一の指示および前記第二の指示の捕捉を動的に有効にしうる。
【００９３】
実施例１１ないし１２のうちいずれか一項の主題を含む実施例１３では、当該装置は、前記キャッシュ・イベントの生起毎よりも少ない頻度での前記第一の指示および前記第二の指示の捕捉を可能にするよう前記第一および第二のプロセッサ・コンポーネントのそれぞれのモニタリング・ユニットのカウンタを構成設定するカウンタ・コンポーネントとを含んでいてもよい。
【００９４】
実施例１１ないし１３のうちいずれか一項の主題を含む実施例１４では、前記カウンタ・コンポーネントは、前記第一の指示の捕捉と前記第二の指示の捕捉を同期させるよう、前記第一のプロセッサ・コンポーネントのモニタリング・ユニットのカウンタおよび前記第二のプロセッサ・コンポーネントのモニタリング・ユニットのカウンタを構成設定してもよい。
【００９５】
実施例１１ないし１４のうちいずれか一項の主題を含む実施例１５では、前記フィルタ・コンポーネントは、前記キャッシュ・イベントが前記第一および第二のプロセッサ・コンポーネントの一つによって実行されるアプリケーション・ルーチンの第一の部分による前記データ片へのアクセスと前記第一および第二のプロセッサ・コンポーネントの一つによって実行される前記アプリケーション・ルーチンの第二の部分による前記データ片へのアクセスとの間の競合状態から生じるのでないことに基づいて、前記第一の指示および前記第二の指示の少なくとも一方を前記低減されたデータに含めることを調整してもよい。
【００９６】
実施例１１ないし１５のうちいずれか一項の主題を含む実施例１６では、前記フィルタ・コンポーネントは、前記第一の部分、前記第二の部分、前記第一の部分および前記第二の部分の一方を実行する前記第一のプロセッサ・コンポーネントのコア、前記第一の部分および前記第二の部分の一方を実行する前記第二のプロセッサ・コンポーネントのコアまたは前記第一の部分および前記第二の部分の一方の実行のスレッドのうちの少なくとも一つの識別子に基づいて、前記キャッシュ・イベントが前記アプリケーション・ルーチンの前記第一の部分と前記第二の部分の間の競合状態から生じるかどうかを判定してもよい。
【００９７】
実施例１１ないし１６のうちいずれか一項の主題を含む実施例１７では、当該装置は、前記第一のプロセッサ・コンポーネントおよび前記第二のプロセッサ・コンポーネントの少なくとも一方をネットワークに結合するインターフェースと、前記低減されたデータをデバッグ装置に送信するよう前記インターフェースを動作させる中継コンポーネントとを含んでいてもよい。
【００９８】
実施例１１ないし１７のうちいずれか一項の主題を含む実施例１８では、前記競合状態は、前記データ片を読むための、第一の実行のスレッドにおいて前記第一および第二のプロセッサ・コンポーネントの一方によって実行されるアプリケーション・ルーチンの第一の部分の読み出し動作と、前記データ片に書き込むための、第二の実行のスレッドにおいて前記第一および第二のプロセッサ・コンポーネントの一方によって実行される前記アプリケーション・ルーチンの第二の部分の書き込み動作との間の競合状態を含んでいてもよい。
【００９９】
実施例１１ないし１８のうちいずれか一項の主題を含む実施例１９では、前記第一の指示は、前記第一のプロセッサ・コンポーネントのレジスタの内容、前記第一のプロセッサ・コンポーネントの命令ポインタのアドレス、どんなアクセス動作が前記キャッシュ・イベントをトリガーしたかの指示、前記キャッシュ・イベントの型、前記キャッシュ・イベントをトリガーしたアクセス動作を実行した前記第一のプロセッサのコアの識別子または前記キャッシュ・イベントをトリガーしたアクセス動作が実行された実行のスレッドの識別子のうちの少なくとも一つを含んでいてもよい。
【０１００】
実施例１１ないし１９のうちいずれか一項の主題を含む実施例２０では、前記キャッシュ・イベントは、前記第一のプロセッサ・コンポーネントの第一のキャッシュまたは前記第二のプロセッサ・コンポーネントの第二のキャッシュの少なくとも一方に関わっていてもよく、前記キャッシュ・イベントは、所有権を求める読み出し（RFO）キャッシュ・イベントまたは修正版にヒット（HITM）キャッシュ・イベントの少なくとも一方を含んでいてもよい。
【０１０１】
実施例２１では、競合状態を検出するためのコンピュータ実装される方法が、プロセッサ・コンポーネントによって実行される少なくとも一つのアプリケーション・ルーチンによるデータ片へのアクセスの間の競合状態に関連するキャッシュ・イベントを検出する段階と、前記キャッシュ・イベントの複数の生起の選択された間隔で前記キャッシュ・イベントの生起に応答してモニタリング・データとして前記プロセッサ・コンポーネントの状態の指示を繰り返し捕捉する段階とを含んでいてもよい。
【０１０２】
実施例２１の主題を含む実施例２２では、当該方法は、前記アプリケーション・ルーチンが現在、少なくとも部分的には前記プロセッサ・コンポーネントによって実行されているかどうかに基づいて、前記指示の捕捉を動的に有効にすることを含んでいてもよい。
【０１０３】
実施例２１ないし２２のうちいずれか一項の主題を含む実施例２３では、当該方法は、前記キャッシュ・イベントが前記アプリケーション・ルーチンの第一の部分の読み出し動作と前記アプリケーション・ルーチンの第二の部分の書き込み動作との間の競合状態から生じるのでないことに基づいて前記モニタリング・データから前記指示を除去して、前記モニタリング・データの前記プロセッサ・コンポーネントの状態の複数の指示の部分集合を含む低減されたデータを生成することを含んでいてもよい。
【０１０４】
実施例２１ないし２３のうちいずれか一項の主題を含む実施例２４では、当該方法は、前記第一の部分、前記第二の部分、前記第一の部分および前記第二の部分の一方を実行する前記プロセッサ・コンポーネントのコアまたは前記第一の部分および前記第二の部分の一方の実行のスレッドのうちの少なくとも一つの識別子に基づいて、前記キャッシュ・イベントが前記読み出し動作と前記書き込み動作との間の競合状態から生じるかどうかを判定することを含んでいてもよい。
【０１０５】
実施例２１ないし２４のうちいずれか一項の主題を含む実施例２５では、当該方法は、前記低減されたデータをネットワークを介してデバッグ装置に送信する段階を含んでいてもよい。
【０１０６】
実施例２１ないし２５のうちいずれか一項の主題を含む実施例２６では、前記競合状態は、前記データ片に書き込むための、第一の実行のスレッドにおいて前記プロセッサ・コンポーネントによって実行される前記アプリケーション・ルーチンの第一の書き込み動作と、前記データ片に書き込むための、第二の実行のスレッドにおいて前記プロセッサ・コンポーネントによって実行される別のアプリケーション・ルーチンの第二の書き込み動作との間の競合状態を含んでいてもよい。
【０１０７】
実施例２１ないし２６のうちいずれか一項の主題を含む実施例２７では、前記指示は、前記プロセッサ・コンポーネントのレジスタの内容、前記プロセッサ・コンポーネントの命令ポインタのアドレス、どんなアクセス動作が前記キャッシュ・イベントをトリガーしたかの指示、前記キャッシュ・イベントの型、前記キャッシュ・イベントをトリガーしたアクセス動作を実行した前記プロセッサのコアの識別子または前記キャッシュ・イベントをトリガーしたアクセス動作が実行された実行のスレッドの識別子のうちの少なくとも一つを含んでいてもよい。
【０１０８】
実施例２１ないし２７のうちいずれか一項の主題を含む実施例２８では、前記キャッシュ・イベントは、前記プロセッサ・コンポーネントのキャッシュに関わっていてもよく、所有権を求める読み出し（RFO）キャッシュ・イベントまたは修正版にヒット（HITM）キャッシュ・イベントの少なくとも一方を含んでいてもよい。
【０１０９】
実施例２１ないし２８のうちいずれか一項の主題を含む実施例２９では、当該方法は、前記キャッシュ・イベントの複数の生起の前記選択された間隔で前記キャッシュ・イベントの生起に応答して、別のモニタリング・データとして、別のプロセッサ・コンポーネントの状態の指示を捕捉することを含んでいてもよい。
【０１１０】
実施例２１ないし２９のうちいずれか一項の主題を含む実施例３０では、当該方法は、前記キャッシュ・イベントが前記アプリケーション・ルーチンの第一の部分による前記データ片への第一のアクセスと前記アプリケーション・ルーチンの第二の部分による前記データ片への第二のアクセスとの間の競合状態から生じるのでないことに基づいて前記別のモニタリング・データからの前記別のプロセッサ・コンポーネントの状態の指示を除去して、前記モニタリング・データの前記プロセッサ・コンポーネントの状態の複数の指示の部分集合および前記別のモニタリング・データの前記別のプロセッサ・コンポーネントの状態の複数の指示の部分集合を含む低減されたデータを生成することを含んでいてもよい。
【０１１１】
実施例３１では、少なくとも一つの機械可読記憶媒体が命令を含み、該命令は、プロセッサ・コンポーネントによって実行されたときに、前記プロセッサ・コンポーネント装置に、前記プロセッサ・コンポーネントによって実行される少なくとも一つのアプリケーション・ルーチンによるデータ片へのアクセスの間の競合状態に関連するキャッシュ・イベントを検出する段階と、前記キャッシュ・イベントの複数の生起の選択された間隔で前記キャッシュ・イベントの生起に応答してモニタリング・データとして前記プロセッサ・コンポーネントの状態の指示を繰り返し捕捉する段階とを実行させるものである。
【０１１２】
実施例３１の主題を含む実施例３２では、前記プロセッサ・コンポーネントは、前記アプリケーション・ルーチンが現在、少なくとも部分的には前記プロセッサ・コンポーネントによって実行されているかどうかに基づいて、前記指示の捕捉を動的に有効にするようにされてもよい。
【０１１３】
実施例３１ないし３２のうちいずれか一項の主題を含む実施例３３では、前記プロセッサ・コンポーネントは、前記キャッシュ・イベントが前記アプリケーション・ルーチンの第一の部分の第一の書き込み動作と前記アプリケーション・ルーチンの第二の部分の第二の書き込み動作との間の競合状態から生じるのでないことに基づいて前記モニタリング・データから前記指示を除去して、前記モニタリング・データの前記プロセッサ・コンポーネントの状態の複数の指示の部分集合を含む低減されたデータを生成するようにされてもよい。
【０１１４】
実施例３１ないし３３のうちいずれか一項の主題を含む実施例３４では、前記プロセッサ・コンポーネントは、前記第一の部分、前記第二の部分、前記第一の部分および前記第二の部分の一方を実行する前記プロセッサ・コンポーネントのコアまたは前記第一の部分および前記第二の部分の一方の実行のスレッドのうちの少なくとも一つの識別子に基づいて、前記キャッシュ・イベントが前記第一の書き込み動作と前記第二の書き込み動作との間の競合状態から生じるかどうかを判定するようにされてもよい。
【０１１５】
実施例３１ないし３４のうちいずれか一項の主題を含む実施例３５では、前記プロセッサ・コンポーネントは、前記低減されたデータをネットワークを介してデバッグ装置に送信するようにされてもよい。
【０１１６】
実施例３１ないし３５のうちいずれか一項の主題を含む実施例３６では、前記競合状態は、前記データ片を読むための、第一の実行のスレッドにおいて前記プロセッサ・コンポーネントによって実行される前記アプリケーション・ルーチンの読み出し動作と、前記データ片に書き込むための、第二の実行のスレッドにおいて前記プロセッサ・コンポーネントによって実行される別のアプリケーション・ルーチンの書き込み動作との間の競合状態を含んでいてもよい。
【０１１７】
実施例３１ないし３６のうちいずれか一項の主題を含む実施例３７では、前記指示は、前記プロセッサ・コンポーネントのレジスタの内容、前記プロセッサ・コンポーネントの命令ポインタのアドレス、どんなアクセス動作が前記キャッシュ・イベントをトリガーしたかの指示、前記キャッシュ・イベントの型、前記キャッシュ・イベントをトリガーしたアクセス動作を実行した前記プロセッサのコアの識別子または前記キャッシュ・イベントをトリガーしたアクセス動作が実行された実行のスレッドの識別子のうちの少なくとも一つを含んでいてもよい。
【０１１８】
実施例３１ないし３７のうちいずれか一項の主題を含む実施例３８では、前記キャッシュ・イベントは、前記プロセッサ・コンポーネントのキャッシュに関わっていてもよく、所有権を求める読み出し（RFO）キャッシュ・イベントまたは修正版にヒット（HITM）キャッシュ・イベントの少なくとも一方を含んでいてもよい。
【０１１９】
実施例３１ないし３８のうちいずれか一項の主題を含む実施例３９では、前記プロセッサ・コンポーネントは、前記キャッシュ・イベントの複数の生起の前記選択された間隔で前記キャッシュ・イベントの生起に応答して、別のモニタリング・データとして、別のプロセッサ・コンポーネントの状態の指示を捕捉するようにされてもよい。
【０１２０】
実施例３１ないし３９のうちいずれか一項の主題を含む実施例４０では、前記プロセッサ・コンポーネントは、前記キャッシュ・イベントが前記アプリケーション・ルーチンの第一の部分による前記データ片への第一のアクセスと前記アプリケーション・ルーチンの第二の部分による前記データ片への第二のアクセスとの間の競合状態から生じるのでないことに基づいて前記別のモニタリング・データから前記別のプロセッサ・コンポーネントの状態の指示を除去して、前記モニタリング・データの前記プロセッサ・コンポーネントの状態の複数の指示の部分集合および前記別のモニタリング・データの前記別のプロセッサ・コンポーネントの状態の複数の指示の部分集合を含む低減されたデータを生成するようにされてもよい。
【０１２１】
実施例４１では、コマンドを受領する装置が、プロセッサ・コンポーネントによって実行される少なくとも一つのアプリケーション・ルーチンによるデータ片へのアクセスの間の競合状態に関連するキャッシュ・イベントを検出し、前記キャッシュ・イベントの複数の生起の選択された間隔で前記キャッシュ・イベントの生起に応答してモニタリング・データとして前記プロセッサ・コンポーネントの状態の指示を繰り返し捕捉する手段を含む。
【０１２２】
実施例４１の主題を含む実施例４２では、当該装置は、前記アプリケーション・ルーチンが現在、少なくとも部分的には前記プロセッサ・コンポーネントによって実行されているかどうかに基づいて、前記指示の捕捉を動的に有効にする手段を含んでいてもよい。
【０１２３】
実施例４１ないし４２のうちいずれか一項の主題を含む実施例４３では、当該装置は、前記キャッシュ・イベントが前記アプリケーション・ルーチンの第一の部分の読み出し動作と前記アプリケーション・ルーチンの第二の部分の書き込み動作との間の競合状態から生じるのでないことに基づいて前記モニタリング・データから前記指示を除去して、前記モニタリング・データの前記プロセッサ・コンポーネントの状態の複数の指示の部分集合を含む低減されたデータを生成する手段を含んでいてもよい。
【０１２４】
実施例４１ないし４３のうちいずれか一項の主題を含む実施例４４では、当該装置は、前記第一の部分、前記第二の部分、前記第一の部分および前記第二の部分の一方を実行する前記プロセッサ・コンポーネントのコアまたは前記第一の部分および前記第二の部分の一方の実行のスレッドのうちの少なくとも一つの識別子に基づいて、前記キャッシュ・イベントが前記読み出し動作と前記書き込み動作との間の競合状態から生じるかどうかを判定する手段を含んでいてもよい。
【０１２５】
実施例４１ないし４４のうちいずれか一項の主題を含む実施例４５では、当該装置は、前記低減されたデータをネットワークを介してデバッグ装置に送信する手段を含んでいてもよい。
【０１２６】
実施例４１ないし４５のうちいずれか一項の主題を含む実施例４６では、前記競合状態は、前記データ片に書き込むための、第一の実行のスレッドにおいて前記プロセッサ・コンポーネントによって実行される前記アプリケーション・ルーチンの第一の書き込み動作と、前記データ片に書き込むための、第二の実行のスレッドにおいて前記プロセッサ・コンポーネントによって実行される別のアプリケーション・ルーチンの第二の書き込み動作との間の競合状態を含んでいてもよい。
【０１２７】
実施例４１ないし４６のうちいずれか一項の主題を含む実施例４７では、前記指示は、前記プロセッサ・コンポーネントのレジスタの内容、前記プロセッサ・コンポーネントの命令ポインタのアドレス、どんなアクセス動作が前記キャッシュ・イベントをトリガーしたかの指示、前記キャッシュ・イベントの型、前記キャッシュ・イベントをトリガーしたアクセス動作を実行した前記プロセッサのコアの識別子または前記キャッシュ・イベントをトリガーしたアクセス動作が実行された実行のスレッドの識別子のうちの少なくとも一つを含んでいてもよい。
【０１２８】
実施例４１ないし４７のうちいずれか一項の主題を含む実施例４８では、前記キャッシュ・イベントは、前記プロセッサ・コンポーネントのキャッシュに関わっていてもよく、所有権を求める読み出し（RFO）キャッシュ・イベントまたは修正版にヒット（HITM）キャッシュ・イベントの少なくとも一方を含んでいてもよい。
【０１２９】
実施例４１ないし４８のうちいずれか一項の主題を含む実施例４９では、当該装置は、前記キャッシュ・イベントの複数の生起の前記選択された間隔で前記キャッシュ・イベントの生起に応答して、別のモニタリング・データとして、別のプロセッサ・コンポーネントの状態の指示を捕捉する手段を含んでいてもよい。
【０１３０】
実施例４１ないし４９のうちいずれか一項の主題を含む実施例５０では、当該装置は、前記キャッシュ・イベントが前記アプリケーション・ルーチンの第一の部分による前記データ片への第一のアクセスと前記アプリケーション・ルーチンの第二の部分による前記データ片への第二のアクセスとの間の競合状態から生じるのでないことに基づいて前記別のモニタリング・データから前記別のプロセッサ・コンポーネントの状態の指示を除去して、前記モニタリング・データの前記プロセッサ・コンポーネントの状態の複数の指示の部分集合および前記別のモニタリング・データの前記別のプロセッサ・コンポーネントの状態の複数の指示の部分集合を含む低減されたデータを生成する手段を含んでいてもよい。
【０１３１】
実施例５１では、少なくとも一つの機械可読記憶媒体が命令を含み、該命令は、プロセッサ・コンポーネントによって実行されたときに、前記プロセッサ・コンポーネント装置に、上記のうちのいずれかを実行させるものである。
【０１３２】
実施例５２では、競合状態を検出する装置が上記のうちのいずれかを実行する手段を含んでいてもよい。
【図１】
0006293888.tif 000002
【図２】
0006293888.tif 000003
【図３】
0006293888.tif 000004
【図４】
0006293888.tif 000005
【図５】
0006293888.tif 000006
【図６】
0006293888.tif 000007
【図７】
0006293888.tif 000008
【図８】
0006293888.tif 000009
【図９】
0006293888.tif 000010
【図１０】
0006293888.tif 000011