さまざまな実施形態は、概括的に、アプリケーション・ルーチンの異なる部分によるまたは関係したアプリケーション・ルーチンによる協調されないデータ・アクセスから生じる競合状態を、そのような協調されないアクセスに関連している傾向のある一つまたは複数の指定されたキャッシュ・イベントの生起を検出することによって検出することに向けられる。プロセッサ・コンポーネントのモニタリング・コンポーネントが、そのようなキャッシュ・イベントに関連付けられたプロセッサ・コンポーネントの状態の指示(indication)を捕捉するよう構成される。モニタリング・ユニットは、それらの捕捉された指示を検出ドライバに提供する。検出ドライバは、該指示をフィルタリングし、デバッグ・ルーチンに中継し、アプリケーション・ルーチンまたは関係したアプリケーション・ルーチンのデバッグを可能にする。
当業者にはおなじみであるように、キャッシュの内容が他のキャッシュを含む他の記憶の内容と同期され損なってその結果プロセッサ・コンポーネントが誤ったデータを読んだり使ったりすることがないことを保証するために、キャッシュ・コヒーレンス機構が用いられる。そのようなキャッシュ・コヒーレンス機構はしばしば、キャッシュ・ラインにデータを記憶し、キャッシュ・ラインからデータを取り出し、キャッシュ・ライン内のデータを無効としてマーク付けするおよび/またはキャッシュ・ラインを利用可能にするようキャッシュに命令する動作と、さらにキャッシュ・ラインに記憶されているデータに関連する状態を変える他の動作とに関わる。いくつかの実施形態では、用いられるキャッシュ・コヒーレンス機構は、広く知られ、広く使われている修正‐排他‐共有‐無効(MESI: modified-exclusive-shared-invalidated)アルゴリズムに基づいていてもよい。
使用される特定のキャッシュ・コヒーレンス機構に関わりなく、キャッシュ・ラインに記憶されているデータに関連する状態に影響する動作の一つまたは複数は、プロセッサ・コンポーネント中に組み込まれたモニタリング・ユニットによって検出できるキャッシュ・イベントでありうる。そのようなモニタリング・ユニットは、一つまたは複数の指定されたキャッシュ・イベントがあるかどうかモニタリングするよう、および/または該一つまたは複数の指定されたキャッシュ・イベントを検出した際にプロセッサ・コンポーネントのコアの状態の一つまたは複数の側面の指示を捕捉するようプログラム可能であってもよい。捕捉された指示は、発生したキャッシュ・イベントの型の指標(indicator)、該キャッシュ・イベントをトリガーしたデータ・アクセスの型(たとえば読み出しまたは書き込み動作)の指標、そのデータ・アクセスを引き起こした実行のプロセスおよび/またはスレッドの識別子、命令ポインタのアドレスの指示、プロセッサ・コンポーネントの一つまたは複数のレジスタの内容などを含んでいてもよい。
モニタリングされる前記一つまたは複数の指定されたキャッシュ・イベントは、時間的に比較的近接して生じる同じデータ片へのアクセスの連続から生じる一つまたは複数の型のキャッシュ・イベント(たとえば、一つのアクセスが別のアクセスの直後に生じる)を含んでいてもよい。特に関心があるのは、アプリケーション・ルーチンの二つの並行して実行される部分による同じデータ片に関わる、読み出しおよび書き込み動作の協調されない組み合わせからまたは書き込み動作の協調されない対から生じうるキャッシュ・イベントである。代替的には、そのような協調されないアクセスは、そのようなアクセスが並行して実行されるときにそのようなアクセスを協調させることが意図された二つ以上の関係したアプリケーション・ルーチンによってなされることがある。そのような協調の欠如は、読み出し動作が書き込み動作によって変更される前または後のいずれかのデータ片を予測不能に取得する、読み出し動作と書き込み動作の間の競合状態、あるいはデータの結果的な状態が予測不能になる二つの書き込み動作の間の競合状態につながることがある。そのようなキャッシュ・イベントは、別のキャッシュの別のキャッシュ・ラインに記憶されている同じデータへの諸アクセスの切迫したまたは進行中の継起の結果として、キャッシュ・ラインをプリエンプティブに無効にするための、キャッシュへの明示的に通信に関わってもよい。そのようなキャッシュ・イベントの例は、「所有権要求(request for ownership)」または「所有権を求める読み出し(read for ownership)」(RFO)キャッシュ・イベントであってもよい。代替的または追加的に、そのようなキャッシュ・イベントは、別のキャッシュの別のキャッシュ・ラインにおいて記憶されかつ修正されている結果として無効にされたあるキャッシュのキャッシュ・ラインにおけるデータへのアクセスに関わってもよい。そのようなキャッシュ・イベントの例は「修正版にヒット」(HITM: hit modified)キャッシュ・イベントであってもよい。
特定のキャッシュ・イベントに関連付けられたプロセッサ・コンポーネントの状態の指示は、キャッシュ・イベントが生起するたびに捕捉されてもよく、あるいはより低い指定された頻度で捕捉されてもよい。例として、そのような捕捉は、指定されたキャッシュ・イベントの5回目ごとの生起で行なわれてもよい。これは、特に指定されたキャッシュ・イベントが頻繁に生起すると予期される場合に、処理および/または記憶要件を低減するためになされてもよい。これは、たとえ指定されるキャッシュ・イベントが生起するたびに捕捉が行なわれなくても、競合状態を引き起こすアプリケーション・ルーチン内の間違いは、捕捉される可能性が高いくらい十分な頻度で生起するはずであるという期待をもってなされてもよい。
モニタリング・ユニットのプログラミングは検出ドライバによって実行されてもよい。検出ドライバのほうでも、モニタリング・ユニットから、前記一つまたは複数の指定されたキャッシュ・イベントの捕捉された指示を受領する。検出ドライバは、デバッグ・ルーチンに提供されるデータの全体的な量を減らすために、受領した捕捉された指示をフィルタリングして、指示の、より制限された集合から構成される低減されたデータを生成してもよい。デバッグ・ルーチンは、アプリケーション・ルーチンが実行される同じコンピューティング装置のプロセッサ・コンポーネントによって実行されてもよい。あるいはまた、デバッグ・ルーチンは、異なるコンピューティング装置のプロセッサ・コンポーネントによって実行されてもよく、低減されたデータは、ネットワークを介して該他のコンピューティング装置に伝送されてもよい。
本稿で使われる記法および命名法を概括的に参照するに、以下の詳細な説明の諸部分は、コンピュータまたはコンピュータ・ネットワーク上で実行されるプログラム手順を用いて呈示されることがある。これらの手順としての記述および表現は、当業者によって、自分の仕事の実質を他の当業者にこの上なく効果的に伝えるために使われているものである。手順とは、ここで、また一般に、所望される結果につながる動作の自己完結的なシーケンスであると考えられる。これらの動作は、物理量の物理的な操作を要求する動作である。必ずではないが通例、これらの量は、記憶され、転送され、組み合わされ、比較され、他の仕方で操作されることのできる電気、磁気または光学的な信号の形を取る。時に、主として慣用により、これらの信号をビット、値、要素、シンボル、キャラクタ、項、数などと称することが便利であることがわかる。しかしながら、これらおよび同様の用語のすべては、適切な物理量に関連付けられるものであり、それらの量に適用される単に便利なラベルであることは注意しておくべきである。
さらに、これらの操作はしばしば、人間のオペレーターによって実行される精神活動に一般的に関連付けられる加算または比較のような用語で参照される。しかしながら、一つまたは複数の実施形態の一部をなす本稿に記載される動作のいずれにおいても、人間のオペレーターのそのような能力は必要ではなく、多くの場合望ましいものでもない。むしろ、これらの動作は機械動作である。さまざまな実施形態の動作を実行するための有用な機械は、中に記憶されている本稿の教示に従って書かれるコンピュータ・プログラムによって選択的にアクティブ化または構成される汎用デジタル・コンピュータを含む、および/または要求される目的のために特別に構築された装置を含む。さまざまな実施形態は、これらの動作を実行するための装置またはシステムにも関する。これらの装置は、要求される目的のために特別に構築されていてもよく、あるいは汎用コンピュータを含んでいてもよい。多様なこれらの機械のための要求される構造は、与えられる記述から明白であろう。
ここで図面を参照する。図面において、同様の参照符号は全体を通じて同様の要素を指すために使われる。以下の記述では、説明の目的のため、本発明の十全な理解を提供するために、数多くの個別的詳細が記載される。しかしながら、新規な実施形態がそうした個別的詳細なしでも実施できることは明白でありうる。他方、記述を容易にするために、よく知られた構造および装置はブロック図の形で示される。その意図は、請求項の範囲内のあらゆる修正、等価物および代替をカバーすることである。
図1は、サーバー100、コンピューティング装置300およびデバッグ装置500の一つまたは複数を組み込む競合状態デバッグ・システム1000のある実施形態のブロック図である。これらのコンピューティング装置100、300および500のそれぞれは、限定するわけではないが、デスクトップ・コンピュータ・システム、データ入力端末、ラップトップ・コンピュータ、ネットブック・コンピュータ、タブレット・コンピュータ、ハンドヘルド携帯情報端末、デジタル・カメラ、スマートフォン、スマート腕時計、スマート眼鏡、衣服に組み込まれる身体装着型コンピューティング装置、乗り物(たとえば自動車、二輪車、車椅子など)に統合されるコンピューティング装置、サーバー、サーバーのクラスター、サーバー・ファームなどを含む多様な型のコンピューティング装置の任意のものであってもよい。
描かれるように、これらのコンピューティング装置100、300および500の部分集合は、コンピューティング装置300上での単一のアプリケーション・ルーチン370の諸部分または複数の関係したアプリケーション・ルーチン370の並行した実行から生じる、データ・アクセスにおける競合状態のデバッグに関連する信号を、ネットワーク999を介して交換してもよい。しかしながら、これらのコンピューティング装置の一つまたは複数は、そのようなデバッグと完全に無関係な他のデータを互いと、および/またはさらに他のコンピューティング装置(図示せず)とネットワーク999を介して交換してもよい。さまざまな実施形態において、ネットワーク999は、可能性としては単一の建物または他の比較的限られた領域内に延在することに制限された単一のネットワーク、可能性としてはかなりの距離に延在する接続されたネットワークの組み合わせであってもよく、および/またはインターネットを含んでいてもよい。このように、ネットワーク999は、限定するわけではないが、電気的および/または光学的に伝導性のケーブルを用いる有線技術および赤外線、電波周波数(radio frequency)または他の形の無線伝送を用いる無線技術を含む、信号が交換されうる多様な通信技術(または通信技術の組み合わせ)の任意のものに基づいていてもよい。
さまざまな実施形態において、コンピューティング装置300は、プロセッサ・コンポーネント350、記憶360、コントロール320、ディスプレイ380およびコンピューティング装置300をネットワーク999に結合するインターフェース390の一つまたは複数を組み込む。プロセッサ・コンポーネント350はモニタリング・ユニット354と、それぞれキャッシュ357を組み込んでいる一つまたは複数のコア355とを組み込んでいる。各キャッシュ357は、レベル1(L1)および/またはレベル2(L2)キャッシュであってもよく、それぞれはそれが組み込まれているコア355の一つによる使用のための専用であってもよい。コンピューティング装置300はさらに、コア355の複数のものによって共有されうる追加的なキャッシュ367を組み込んでいてもよい。キャッシュ367は、プロセッサ・コンポーネント350に、あるいは記憶360をプロセッサ・コンポーネント350に結合するコントローラもしくは他の回路に組み込まれていてもよく、L2またはレベル3(L3)キャッシュであってもよい。
モニタリング・ユニット354は、多様なイベントの任意のものの生起を検出するために各コア355の状態をモニタリングしてもよく、各コア355の一つまたは複数のレジスタの状態を含む、各コア355の状態の諸側面を捕捉するよう動作可能であってもよい。モニタリング・ユニット354は、各キャッシュ357の動作に関連するキャッシュ・イベントを直接モニタリングするために、各コア355のキャッシュ357に直接結合されていてもよい。キャッシュ367がプロセッサ・コンポーネント350中に組み込まれている実施形態では、モニタリング・ユニット354は、キャッシュ367の動作に関連するキャッシュ・イベントを直接モニタリングするためにキャッシュ367に直接結合されていてもよい。キャッシュ367がプロセッサ・コンポーネント350に組み込まれない(たとえば、キャッシュ367は記憶360に組み込まれるまたは他の仕方で記憶360と関連付けられる)実施形態では、モニタリング・ユニット354は、キャッシュ367と関連付けられたキャッシュ・イベントを示しうる、プロセッサ・コンポーネント350とキャッシュ367との間で交換される通信をモニタリングしてもよい。別の言い方をすれば、モニタリング・ユニット354は、各キャッシュ357と関連しておよび/またはキャッシュ367において生起するキャッシュ・イベントの一つまたは複数の特定の型の生起があるかどうかをモニタリングし、キャッシュ・イベントの前記一つまたは複数の特定の型の生起に応答してコア355のうちの一つまたは複数のコアの状態の指示を捕捉する。
記憶360は、オペレーティング・システム340、データ330、検出ドライバ140、構成設定データ135、モニタリング・データ334、低減されたデータ337およびデバッグ・ルーチン170の一つまたは複数を記憶している。記憶360にはまた、アプリケーション・ルーチン370の一つまたはアプリケーション・ルーチン370の複数の関係したもののいずれかも記憶されている。オペレーティング・システム340、アプリケーション・ルーチン(単数または複数)370、検出ドライバ140およびデバッグ・ルーチン170のそれぞれは、さまざまな機能を実行するための論理を実装するためにコンピューティング装置300の主プロセッサ・コンポーネントとしての役割において、プロセッサ・コンポーネント350上で動作する命令のシーケンスを組み込む。
オペレーティング・システム340を実行することにおいて、プロセッサ・コンポーネント350は、さまざまなサービスを提供するための呼び出し可能なシステム関数を含む、アプリケーション・ルーチン(単数または複数)370の実行のためのさまざまな形のサポートを提供してもよい。オペレーティング・システム340は、アプリケーション・ルーチン(単数または複数)370とコンピューティング装置300のハードウェア・コンポーネントおよび/またはそのデバイス・ドライバとの間の抽象化の層を提供してもよい。そこから抽象化層が提供されうるハードウェア・コンポーネントおよび関係したデバイス・ドライバの間に、モニタリング・ユニット354および検出ドライバ140があってもよい。オペレーティング・システム340は、プロセッサ・コンポーネント350による実行の複数のスレッドの別個のものにおける、単一のアプリケーション・ルーチン370の複数の部分の並行した実行のためまたは関係したアプリケーション・ルーチン370の諸部分の並行した実行のためのサポートを提供する。アプリケーション・ルーチン370の単一のものは、ワード・プロセッサ、ウェブサイト・ビューアー、写真エディター、会合スケジュール管理、CAD/CAMなどを含む、多様な個人的および/または業務的機能の任意のものを実行するための、オペレーティング・システム340のサポートによるプロセッサ・コンポーネント350によるコンピューティング装置300上での実行のために選択される多様な型のルーチンの任意のものであってよい。アプリケーション・ルーチン370の複数のものがある場合には、それらはこれに限られないが、アプリケーション・ルーチンの同じ「生産性スイート(productivity suite)」のワードプロセシング・アプリケーションおよびイラストレーション・アプリケーションのようなアプリケーション・ルーチンの集合の関係したアプリケーション・ルーチンであってもよく、あるいはウェブサイト・ブラウズ・アプリケーションとウェブサイトによって提供される特定の型のデータの閲覧を可能にする「拡張」アプリケーションであってもよい。
検出ドライバ140を実行することにおいて、プロセッサ・コンポーネント350は、モニタリング・ユニット354を、キャッシュ357および/またはキャッシュ367の一つまたは複数に関連付けられた一つまたは複数の特定のキャッシュ・イベントの生起を検出するようモニタリング・ユニット354を構成する。そうすることにおいて、プロセッサ・コンポーネント350は、モニタリング・ユニット354と関連付けられた一つまたは複数のレジスタのビットをセットすることを通じて、前記一つまたは複数のキャッシュ・イベントを指定するようにされてもよい。プロセッサ・コンポーネント350は、構成設定データ135から検出されるべき前記一つまたは複数のキャッシュ・イベントの指示を取り出してもよい。特に関心があるのは、時間的に比較的近接して生起する、同じデータ片に関わる読み出しおよび書き込み動作の組み合わせの結果として生じるキャッシュ・イベントであってもよい。時間的な近接性と協調の欠如のため、読み出し動作は、書き込み動作前または後のいずれかに予測不能に生起しうる。それにより、読み出し動作と書き込み動作との間の競合状態を引き起こし、時には読み出し動作においてそのデータ片の誤ったバージョンが取得され、時にはそうではないということになる。代替的または追加的に、特に関心があるのは、時間的に比較的近接して生起する、同じデータ片に関わる複数の書き込み動作の組み合わせの結果として生じるキャッシュ・イベントであってもよい。時間的な近接性と協調の欠如のため、それらの書き込み動作の一つは、別の書き込み動作の前または後のいずれかに予測不能に生起しうる。それにより、複数の書き込み動作の間の競合状態を引き起こし、それら複数の書き込み動作後のデータの状態が予測不能になる。同じデータ片へのアクセスのそのような協調されない組み合わせは、単一のアプリケーション・ルーチン370の二つの並行して実行される部分の間またはアクセスを協調させることが意図されているように関係付けられている二つの並行して実行されるアプリケーション・ルーチン370の間いずれかの協調の欠如から帰結することが可能である。
そのように構成されると、モニタリング・ユニット354は、前記一つまたは複数の指定されたキャッシュ・イベントのうちの一つのキャッシュ・イベントの生起に応答して、プロセッサ・コンポーネント350のコア355のうち一つまたは複数のコアの状態の指示を捕捉し、捕捉された指示を検出ドライバ140にモニタリング・データ334として提供する。捕捉された指示は、コア355のうちの一つまたは複数のコアに関連付けられた一つまたは複数のレジスタの状態の指示、一つまたは複数の命令ポインタに記憶されているアドレスの指示、実行されている命令の指示、コア355のうちの一つまたは複数のコアによって実行されるプロセスおよび/またはスレッドの識別情報〔アイデンティティ〕の指示などを含んでいてもよい。捕捉された指示は、キャッシュ357および/またはキャッシュ367の一つまたは複数の、一つまたは複数のキャッシュ・ラインの状態の指示をも含んでいてもよい。捕捉された指示は、キャッシュ357および/またはキャッシュ367の間で交換されるキャッシュ・プロトコル信号の指示をも含んでいてもよい。これは、キャッシュ367がプロセッサ・コンポーネント350の外部である実施形態では、プロセッサ・コンポーネント350とキャッシュ367の間で交換されるキャッシュ・プロトコル信号の指示を含んでいてもよい。これらのさまざまな指示は、それらの指示の捕捉をトリガーした指定されたキャッシュ・イベントの生起をトリガーした、アプリケーション・ルーチン370のどの部分(単数または複数)のどのアクセス命令(単数または複数)が実行されたかの指示を提供してもよい。
検出ドライバ140をさらに実行することにおいて、プロセッサ・コンポーネント350はまた、プロセッサ・コンポーネント350の状態の指示を捕捉する前に、指定されたキャッシュ・イベントの生起の指定された数を繰り返し数えるよう、モニタリング・ユニット354のカウンタを構成してもよい。換言すれば、指定されたキャッシュ・イベントのすべての生起に応答してプロセッサ・コンポーネント350の状態の指示を捕捉する代わりに、モニタリング・ユニット354は、指定されたキャッシュ・イベントの生起のサンプル部分集合について、プロセッサ・コンポーネント350の状態の指示を捕捉するようにされてもよい。それにより、そのような捕捉が実行される頻度が低減される。より具体的には、モニタリング・ユニット354は、指定されたキャッシュ・イベントの「N番目」ごとにのみ、プロセッサ・コンポーネント350の状態を捕捉するよう構成されていてもよい。この場合、捕捉が実行される頻度はNの値によって制御される。捕捉が実行される頻度(たとえば、Nの値)は、構成設定データ135において指定されてもよい。プロセッサ・コンポーネント350の状態を指定されたキャッシュ・イベントの生起毎よりも低頻度で捕捉することは、捕捉された指示を処理するおよび/またはデバッグ・ルーチンに中継することにおいて必要とされる処理および/または記憶資源を低減するために望ましいと見なされることがある。さらに、これは、指定されたキャッシュ・イベントをトリガーするアプリケーション・ルーチン370の一つまたは二つ以上の、並行して実行される諸部分の間でのデータ・アクセス競合状態の生起につながるアプリケーション・ルーチン370の一つにおける間違いが、各生起に応答してプロセッサ・コンポーネント350の状態を捕捉することを不要にするほど十分頻繁に生起する可能性が高いという期待をもってなされてもよい。別の言い方をすれば、そのような生起全部より少ないものについてのプロセッサ・コンポーネント350の状態のそのようなサンプリングが、アプリケーション・ルーチン370の一つをなす命令のうちで競合状態を引き起こす間違いの位置を少なくとも絞り込むのに十分な情報を提供する可能性が高いと見なされてもよい。
検出ドライバ140をさらに実行することにおいて、プロセッサ・コンポーネント350は、前記一つまたは複数の指定されたキャッシュ・イベントについてのモニタリングを動的に有効および/または無効にするために、モニタリング・ユニット354の一つまたは複数のレジスタを操作してもよく、および/または別の機構を介してモニタリング・ユニット354に信号伝達してもよい。プロセッサ・コンポーネント350は、アプリケーション・ルーチン370の一つまたは二つ以上が現在実行されているかどうかの指示に応答して、そうするようトリガーされてもよい。そのような指示は、アプリケーション・ルーチン(単数または複数)370と検出ドライバ140との間で直接伝達されてもよく、あるいはオペレーティング・システム340を通じておよび/またはデバッグ・ルーチン170(もしあれば)を通じて中継されてもよい。
プロセッサ・コンポーネント350の状態の捕捉が指定されたキャッシュ・イベントの生起毎に実行されるか、より低頻度で実行されるかに関わりなく、プロセッサ・コンポーネント350は、検出ドライバ140によって、モニタリング・データ334をフィルタリングして、モニタリング・データ334の指示の部分集合をもつ低減されたデータ337を生成するようにされてもよい。モニタリング・データ334は、アプリケーション・ルーチン370の別個の並行して実行される部分によってなされるデータへのアクセスにおける可能な競合状態のデバッグを可能にするために実際に必要とされるよりも、プロセッサ・コンポーネント350の状態に関する多くの情報の指示を含んでいてもよい。モニタリング・データ334の指示は、コア355、プロセスおよび/またはスレッドのうちの、アプリケーション・ルーチン(単数または複数)370のどの部分を実行することにも関わらないものに関連付けられた指示を除去するようフィルタリングされてもよい。これを可能にするために、プロセッサ・コンポーネント350は、アプリケーション・ルーチン(単数または複数)370の部分を実行することに関わるコア355、プロセスおよび/またはスレッドの識別子および/または実行される前記部分の識別子を取得してもよい。そのような識別子は次いで、モニタリング・データ334の識別子と比較されて、アプリケーション・ルーチン(単数または複数)370の諸部分によってなされるアクセスの間の可能な競合状態に無関係なキャッシュ・イベントに関連する、モニタリング・データ334中の指示を同定してもよい。オペレーティング・システム340のアーキテクチャに依存して、そのような識別子は、オペレーティング・システム340を通じておよび/またはデバッグ・ルーチン170(もしあれば)を通じてアプリケーション・ルーチン(単数または複数)370から取得されてもよい。代替的または追加的に、モニタリング・データ334の指示は、データのアクセスに関連しないプロセッサ・コンポーネント350のレジスタに関連付けられた指示を除去するようフィルタリングされてもよい。
いくつかの実施形態では、プロセッサ・コンポーネント350は、コンピューティング装置300上でのアプリケーション・ルーチン(単数または複数)370の諸部分の間での、データ・アクセスにおける可能な競合状態のデバッグを可能にするために、低減されたデータ337をデバッグ・ルーチン170に提供してもよい。そうすることにおいて、またオペレーティング・システム340のアーキテクチャに依存して、検出ドライバ140からデバッグ・ルーチン170への低減されたデータ337のそのような伝達は、少なくとも部分的にはオペレーティング・システム340を通じて実行されてもよい。他の実施形態では、プロセッサ・コンポーネント350は、低減されたデータ337をデバッグ装置500に伝送して、該データに対してデバッグが実行されることができるようにするよう、インターフェース390を動作させてもよい。
図3および図4はそれぞれ、特定のキャッシュ・イベントを検出するコンピューティング装置300のコンポーネントの動作の実施形態を描いている。より具体的には、図3は、RFOキャッシュ・イベントの検出を描いており、図4はHITMキャッシュ・イベントの検出を描いている。図3および図4両方に描かれるように、コア355の一つまたは複数は、一つまたは複数のレジスタ3555を組み込んでいる。レジスタ3555は、算術演算、ビットごとの論理演算、単一命令複数データ(SIMD)演算などをサポートするレジスタを含んでいてもよい。やはり描かれているように、キャッシュ357および/または367のそれぞれは、キャッシュ・コントローラ3575および複数のキャッシュ・ライン3577(そのうち一つが描かれている)を組み込んでいる。さらに描かれているように、モニタリング・ユニット354はカウンタ3544および一つまたは複数のレジスタ3545を組み込んでいる。それにより、モニタリング・ユニットは、さまざまなイベントを検出し、さまざまな情報を捕捉するようプログラムされうる。モニタリング・ユニット354は、キャッシュ・イベントを検出するためにキャッシュ357および/または367のうち一つまたは複数のキャッシュのキャッシュ・コントローラ375と直接通信してもよい。代替的または追加的に、モニタリング・ユニット354は、キャッシュ・イベントを検出するためにキャッシュ357および/または367のうち二つ以上のキャッシュのキャッシュ・コントローラ3575の間の通信をインターセプトしてもよい。
さらに描かれるように、前記一つまたは複数のアプリケーション・ルーチン370は、並行して実行される複数の部分377を組み込んでいる。各部分は、各部分377を実行するためにスレッドが割り当てられる際にオペレーティング・システム340によって生成されうる一意的な識別子(ID)を割り当てられていてもよい。各部分は、前記アプリケーション・ルーチン370のうちの一つのアプリケーション・ルーチンの命令のシーケンスの部分集合を含む。前記アプリケーション・ルーチン370のうちのそのアプリケーション・ルーチンの前記一つまたは複数の機能の部分集合を実行するためである。いくつかの実施形態では、同じデータ片(たとえばデータ330)にアクセスしうるアプリケーション部分377は、同じアプリケーション・ルーチン370の諸部分377であってもよい。そのような実施形態では、それらの部分377は、データ片への自分たちのアクセスを互いと協調するべきである。そのような協調は、両部分が一部であるその一つのアプリケーション・ルーチン370内で完全に、多様な機構の任意のものを介して生起することが意図されていてもよい。該機構は、これに限られないが、フラグ・ビット、関数呼び出しにおけるパラメータ渡しなどを含む。だが、前記部分のうちの一つまたは複数を書く際の間違いはそのような協調の欠如につながりうる。他の実施形態では、同じデータ片にアクセスしうるアプリケーション部分377は、前記アプリケーション・ルーチン370のうち、データ片への自分たちのアクセスを互いと協調すべきであるという点において関係している異なるアプリケーション・ルーチンの部分377であってもよい。だがここでもまた、間違いの結果、そのような協調が欠如することがありうる。さらに他の実施形態では、同じデータ片にアクセスする同じアプリケーション・ルーチン370の同じ部分377の複数のインスタンスがあってもよく、同じ部分377のそのようなインスタンスはそのアクセスを協調させるべきである。
図3または図4の実施形態のいずれかにおいてキャッシュ・イベントを検出するための準備において、プロセッサ・コンポーネント350は、検出ドライバ140を実行することによって、モニタリング・ユニット354のレジスタ3545の一つまたは複数をプログラムして、一つまたは複数の特定のキャッシュ・イベントの生起を検出するためにモニタリング・ユニット354を構成するようにされてもよい。プロセッサ・コンポーネント350は、プロセッサ・コンポーネント350の状態の諸側面を捕捉することによって、それらの生起の検出に応答するよう、レジスタ3545の一つまたは複数をプログラムするようにされてもよい。プロセッサ・コンポーネント350はさらに、モニタリング・ユニット354に、そのような生起のたびよりも低頻度でそのような捕捉を実行させるようカウンタ3544をプログラムするようにされてもよい。たとえば、モニタリング・ユニット354は、カウンタ3544を介して、指定されたキャッシュ・イベントの三回目ごとの生起に際してのみそのような捕捉を実行するよう構成されていてもよい。
図3に目を転じると、プロセッサ・コンポーネント350のコア355の一つは、一つの部分377を実行することにおいて、データ330を読む読み出し命令を実行して、データ330をレジスタ3555の一つのロードする。その直後に、プロセッサ・コンポーネント350のコア355は、(同じアプリケーション・ルーチン370のまたは異なるが関係したアプリケーション・ルーチン370の)別の部分377を実行することにおいて、あるいは同じ部分377の別のインスタンスを実行することにおいて、レジスタ3555の一つ(レジスタ3555のうちの同じものまたは異なるもの)からの値をもってデータ330を書き込む書き込み命令を実行し、データ330を修正する。こうして、二つの異なる部分377の並行した実行の結果として、いずれも同じデータ330にアクセスする読み出し動作および書き込み動作が時間的に比較的近接して生起する。論じたように、これは、データ330への二つの協調されないアクセスのインスタンスであってもよい。それにより、読み出し動作および書き込み動作のいずれが他方の先に生起したこともありうる。そのため、読み出し動作はデータ330の誤ったバージョンを取得することがありうる。
読み出し動作の実行は、読み出し動作が実行される時点においてデータ330の最新のコピーが別のキャッシュに記憶されているかどうかに依存して、記憶360からまたは別のキャッシュ(たとえば、キャッシュ367またはキャッシュ357のうちの別のもの)からのデータ330の取り出しを引き起こしうる。いずれにせよ、キャッシュ357のキャッシュ・ライン3577はデータ330をロードされ、データ330は、読み出し動作の実行によってデータ330をロードされることが意図されていたレジスタ3555のいずれかにも与えられる。
しかしながら、このデータ読み出し動作の直後にまたは少なくともその後比較的迅速に、同じデータ330を修正する書き込み動作が行なわれるという事実は、キャッシュ357のキャッシュ・コントローラ3575をトリガーして、他方のキャッシュ357または367のキャッシュ・コントローラ3575に、データ330のどんなコピーをもっていようとそれを無効にするよう信号伝達させる。この信号を受け取ることに応答して、他方のキャッシュ357または367のキャッシュ・コントローラ3575は、データ330のそのコピーを、そのキャッシュ・ライン3577のどれにそのコピーが記憶されていようとも、無効にする(この無効化は斜線で描かれている)。データ330のどんなコピーも無効にするという他方のキャッシュ357または367へのこの信号は、読み出し動作後に実行されようとしている書き込み動作があるという事実に基づいて、他方のキャッシュ357または367が有しうるデータ330のどんなコピーもまもなく古くなることを宣言するプリエンプティブな信号である。
キャッシュ357における記憶のためのデータ330を取得する読み出し動作と、他方のキャッシュ357または367への、データ330のどんなコピーをもっていようとそれを無効にするという信号との組み合わせは、「所有権を求める読み出し」(RFO)キャッシュ・イベントと称されるものである。本質的には、キャッシュ357は、データ330を変更する書き込み動作のための準備において、データ330のコピーを有することがありうる他のいかなるキャッシュからも、データ330の「所有権を取り上げる」。その結果、キャッシュ357が、書き込み動作後のデータ330の内容の最新バージョンを「所有する」ことになる。キャッシュ357および/または367の間でのそのようなプリエンプティブな通知の使用は、MESIアルゴリズムに基づくキャッシュ・コヒーレンス機構の少なくともいくつかの実装において生起するものであり、キャッシュ・コヒーレンスを維持することにおける効率を高めるために望ましいと見なされることがありうる。モニタリング・ユニット354がキャッシュ357または他方のキャッシュ357もしくは367のキャッシュ・コントローラ3575と直接通信しているかどうかに依存して、モニタリング・ユニット354は、このRFOキャッシュ・イベントの生起について、これらのキャッシュ・コントローラ3575の一方または両方によって信号伝達されてもよく、および/またはそれらの間で交換される無効化信号をインターセプトしてもよい。いくつかの実施形態では、無効化信号は、RFOキャッシュ・イベントの一部であることの指示を組み込んでもよいことを注意しておくべきである。
図4に目を転じると、プロセッサ・コンポーネント350のコア355の一つ、具体的には図4でコア355xと記されているコアが、部分377を実行することによって、データ330を修正する書き込み動作を実行するようにされる。データ330はたまたま、コア355xに関連付けられているキャッシュ357キャッシュ・ライン3577のうちの一つに記憶されている。結果として、そのキャッシュ・ライン3577におけるデータ330のコピーが今ではデータ330の最新バージョンである。また、データ330のこのコピーのこの修正に応答して、コア355xのキャッシュ357のキャッシュ・コントローラ3575は、キャッシュ357の他のものおよび/またはキャッシュ367を含む他のキャッシュのキャッシュ・コントローラ3575に信号を送信し、他のキャッシュがデータ330についてもっていることがありうるどんなコピーも無効にさせる。それら他のキャッシュのそれらの他のコントローラ3575のうちに、コア355のうちの別のコア、具体的には図4においてコア355yと記されているコアのキャッシュ357のコントローラ3575がある。無効化信号を受信するのに応答して、コア355yのキャッシュ357のキャッシュ・コントローラ3575は、そのキャッシュ・ライン3577の一つに記憶されているデータ330のそのコピーを無効にする(この無効化は斜線で描かれている)。
その後、コア355yは、(同じアプリケーション・ルーチン370のまたは異なるが関係したアプリケーション・ルーチン370の)別の部分377を実行することによって、あるいは同じ部分377の別のインスタンスを実行することによって、データ330を読み出す読み出し動作またはデータ330に書き込む書き込み動作のいずれかを実行するようにされる。データ330の最も最新のコピーがコア355xのキャッシュ357のキャッシュ・ライン3577の一つに記憶されているので、コア355xのキャッシュ357のキャッシュ・コントローラ3575は、コア355yのキャッシュ357のキャッシュ・コントローラ3575に、コア355xのキャッシュ357がデータ330の修正されたコピーを有しておりそれが最も最新のコピーである旨の信号伝達をする。別の言い方をすれば、この信号は、このその後の読み出しまたは書き込み動作の結果、コア355xのキャッシュ357がデータ330のコピーを有していることから生じるキャッシュ「ヒット」となったので、より遅い記憶360においてアクセスされる必要がないという事実を伝える。この信号は、このコピーが修正されており、最も最新のコピーであるという事実を伝える。この信号におけるこれら二つの指示の組み合わせは、「修正版にヒット」またはHITMキャッシュ・イベントを意味する。このように、HITMキャッシュ・イベントは、図3のRFOキャッシュ・イベントのように、同じデータに関わる二つのアクセス動作の組み合わせであって、一方が他方の後比較的短い期間内に実行される、可能性としては一方が他方の直後に実行されるものから生じる。ここでもまた、これは、同じアプリケーション・ルーチン370または異なるアプリケーション・ルーチン370の二つの異なる部分377の並行した実行によって引き起こされる同じデータ片への二つの協調されないアクセスのインスタンスを示していてもよい。モニタリング・ユニット354がコア355xまたは355yのキャッシュ357のキャッシュ・コントローラ3575と直接通信しているかどうかに依存して、モニタリング・ユニット354は、このHITMキャッシュ・イベントの生起について、これらのキャッシュ・コントローラ3575の一方または両方によって信号伝達されてもよく、および/またはそれらの間で交換されるHITM信号をインターセプトしてもよい。
図3および図4の両方を再び参照するに、モニタリング・ユニット354は、プロセッサ・コンポーネント350のコア355の少なくとも部分集合の状態の指示を捕捉し、それらの指示をモニタリング・データ334として検出ドライバ140に提供することによって、これらのRFOまたはHITMキャッシュ・イベントのいずれかの生起に応答してもよい。論じたように、検出ドライバ140を実行することにおいて、プロセッサ・コンポーネント350は、モニタリング・データ334のそれらの指示をフィルタリングして、それらの指示のより少数をもつ低減されたデータ337を生成してもよい。ここでもまた、低減されたデータ337は、デバッグ・ルーチン170に伝達されてもよく、あるいはデバッグ装置500に伝送されてもよい。ここでもまた、そのようなフィルタリングは、コア355、プロセスおよび/またはスレッドのうち前記一つまたは複数のアプリケーション・ルーチン370の部分377を実行することに関わらないものの状態の指示を除去することを含んでいてもよい。前記一つまたは複数のアプリケーション・ルーチン370の部分377を実行することに関わるコア355、プロセスおよび/またはスレッドの同定を可能にするために、プロセッサ・コンポーネント350は、それらの部分377、コア355、プロセスおよび/またはスレッドについての識別子を取得してもよい。
図1に戻ると、低減されたデータ337がデバッグ・ルーチン170に提供される実施形態では、プロセッサ・コンポーネント350はデバッグ・ルーチン170を実行することによって、ユーザー・インターフェースを提供するようコントロール320および/またはディスプレイ380を動作させるようにされてもよい。該ユーザー・インターフェースにより、潜在的に協調されていないデータ・アクセスをデバッグすることに関連する情報が呈示されうる。より具体的には、同じアプリケーション・ルーチン370または異なるが関係したアプリケーション・ルーチン370のいずれかの異なる部分377の並行した実行から生じる協調されないアクセスの、可能なインスタンスの指示が、ディスプレイ380上に視覚的に呈示されてもよい。代替的または追加的に、低減されたデータ337において指示されるところにより時間的に比較的近接した、同じデータ片(たとえばデータ330)へのアクセスを引き起こしたと同定された並行して実行される部分377からの命令のシーケンスが、それらのシーケンスの目視検査を可能にするために、ディスプレイ380上に視覚的に呈示されてもよい。
あるいはまた、デバッグ装置を含み、低減されたデータ337がデバッグ装置500に提供される実施形態では、デバッグ装置500は、プロセッサ・コンポーネント550、記憶560、コントロール520、ディスプレイ580およびデバッグ装置500をネットワーク999に結合するインターフェース590の一つまたは複数を組み込んでいる。記憶560は低減されたデータ337およびデバッグ・ルーチン570を記憶する。デバッグ・ルーチン570は、さまざまな機能を実行するための論理を実装するためにリモート・コンピューティング装置500の主プロセッサ・コンポーネントとしての役割において、プロセッサ・コンポーネント550上で動作する命令のシーケンスを組み込む。デバッグ・ルーチン170と似ていなくもないが、デバッグ・ルーチン570を実行することにおいて、プロセッサ・コンポーネント550は、ユーザー・インターフェースを提供するようコントロール520および/またはディスプレイ580を動作させてもよい。該ユーザー・インターフェースにより、アプリケーション・ルーチン(単数または複数)370の諸部分377による潜在的に協調されていないデータ・アクセスをデバッグすることに関連する情報が呈示されうる。ここでもまた、代替的または追加的に、異なる部分377の並行した実行から生じる協調されないアクセスの可能なインスタンスの指示および/またはそれらの異なる部分からの命令のシーケンスが、ディスプレイ580上に視覚的に呈示されてもよい。
サーバー100を含む実施形態では、コンピューティング装置300は、そこから検出ドライバ140、構成データ135およびデバッグ・ルーチン170の一つまたは複数を提供されてもよく、そのような提供はネットワーク999を通じて実行されてもよい。デバッグ・ルーチン170は、アプリケーション・ルーチン370のうち一つまたは複数のアプリケーション・ルーチンのコンポーネントであってもよく、それによりデバッグ・ルーチン170はアプリケーション・ルーチン370のうち一つまたは複数のアプリケーション・ルーチンと一緒にまたはアプリケーション・ルーチン370のうち一つまたは複数のアプリケーション・ルーチンの一部としてコンピューティング装置300に提供されてもよいことを注意しておくべきである。
図2は、コンピューティング装置300の代替的な実施形態を含む競合状態デバッグ・システム1000の代替的な実施形態のブロック図を示している。図2の競合状態デバッグ・システム1000の代替的な実施形態は、多くの点で図1の実施形態と同様であり、よって全体を通じて同様のコンポーネントを指すためには同様の参照符号が使われている。しかしながら、図1のコンピューティング装置300とは異なり、図2のコンピューティング装置300は、図2においてプロセッサ・コンポーネント350aおよび350bと記される、プロセッサ・コンポーネント350の二つ以上を組み込んでおり、そのそれぞれが同じアプリケーション・ルーチン370のまたは異なるが関係したアプリケーション・ルーチン370の一部を実行しうる。こうして、一つまたは複数のアプリケーション・ルーチン370の異なる部分による同じデータ片へのアクセスにおける競合状態は、プロセッサ・コンポーネント350aおよび350bの異なるものによってなされるアクセスの間の競合に関わることがある。
これに対応するために、プロセッサ・コンポーネント350aおよび350bの一方または両方による検出ドライバ140の実行は、これらのプロセッサ・コンポーネントの両方のモニタリング・ユニット354が、特定のキャッシュ・イベントをモニタリングし、これらのプロセッサ・コンポーネントのそれぞれのものの状態の諸側面を捕捉するよう構成されるようにさせてもよい。こうして、描かれているモニタリング・ユニット354の両方が、モニタリング・データ334の内容に寄与しうる。さらに、検出ドライバ140は、低減されたデータ337を生成することにおいて、プロセッサ・コンポーネント350aおよび350bのそれぞれのプロセッサ・コンポーネントの状態の指示を照合して(collate)、指示の組み合わされた集合にしてもよい。例として、検出ドライバ140は、モニタリング・ユニット354のそれぞれから受領されるモニタリング・データ334における指示における冗長な情報をフィルタリングして除去してもよい。
さまざまな実施形態において、プロセッサ・コンポーネント350aおよび350bのそれぞれは、幅広い多様な商業的に入手可能なプロセッサのいずれをも含みうる。さらに、これらのプロセッサ・コンポーネントの一つまたは複数は、複数プロセッサ、複数スレッド・プロセッサ、複数コア・プロセッサ(複数のコアが同じコアに共存するのでもあるいは別個のコアに共存するのでもよい)および/または複数の物理的に別個なプロセッサが何らかの仕方でリンクされる他の何らかの変種の複数プロセッサ・アーキテクチャを含みうる。
さまざまな実施形態において、記憶360および560のそれぞれは、可能性としては電力の中断されない提供を要求する揮発性技術を含み、可能性としてはリムーバブルであってもなくてもよい機械可読記憶媒体の使用に関わる技術を含む、幅広い多様な情報記憶技術の任意のものに基づいていてもよい。このように、これらの記憶のそれぞれは、幅広い多様な型(または型の組み合わせ)の記憶装置の任意のものを含んでいてもよい。それには、限定なしに、読み出し専用メモリ(ROM)、ランダム・アクセス・メモリ(RAM)、動的RAM(DRAM)、倍速データ・レートDRAM(DDR-DRAM)、同期DRAM(SDRAM)、静的RAM(SRAM)、プログラム可能型ROM(PROM)、消去可能なプログラム可能型ROM(EPROM)、電気的に消去可能なプログラム可能型ROM(EEPROM)、フラッシュメモリ、ポリマー・メモリ(たとえば強誘電性ポリマー・メモリ)、オボニック・メモリ、相変化または強誘電性メモリ、シリコン‐酸化物‐窒化物‐酸化物‐シリコン(SONOS)メモリ、磁気または光学式カード、一つまたは複数の個々の強磁性ディスク・ドライブまたは一つまたは複数のアレイに編成された複数の記憶装置(たとえば独立したディスクの冗長なアレイすなわちRAIDアレイに編成された複数の強磁性ディスク・ドライブ)を含む。これらの記憶のそれぞれは単一のブロックとして描かれているが、これらの一つまたは複数は、異なる記憶技術に基づいていてもよい複数の記憶装置を含んでいてもよいことを注意しておくべきである。よって、たとえば、これらの描かれている記憶のそれぞれの一つまたは複数は、プログラムおよび/またはデータが何らかの形の機械可読記憶媒体上で記憶され、伝達されうるための光学式ドライブまたはフラッシュ・メモリ・カード・リーダーと、比較的長期間にわたってローカルにプログラムおよび/またはデータを記憶するための強磁性ディスク・ドライブと、プログラムおよび/またはデータへの比較的迅速なアクセスを可能にする一つまたは複数の揮発性半導体メモリ・デバイス(たとえばSRAMまたはDRAM)との組み合わせを表わしていてもよい。また、これらの記憶のそれぞれは、同一の記憶技術に基づくが、使用における特化の結果として別個に維持されていてもよい複数の記憶コンポーネントから構成されていてもよい(たとえば、いくつかのDRAMデバイスは主記憶として用いられ、他のDRAMデバイスはグラフィック・コントローラの相異なるフレーム・バッファとして用いられる)。
さまざまな実施形態において、インターフェース390および590のそれぞれは、先述したようにコンピューティング装置型の装置と結合されることを可能にする幅広い多様な信号伝達技術の任意のものを用いてもよい。これらのインターフェースのそれぞれは、そのような結合を可能にするために必須の機能の少なくとも一部を提供する回路を含んでいてもよい。しかながら、これらのインターフェースのそれぞれは、プロセッサ・コンポーネントの対応するものによって実行される命令のシーケンスをもって少なくとも部分的に実装されてもよい(たとえば、プロトコル・スタックまたは他のフィーチャーを実装するために)。電気的および/または光学的に伝導性のケーブルが用いられる場合、これらのインターフェースは、限定なしに、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などを含む多様な業界標準の任意のものに準拠する信号伝達および/またはプロトコルを用いてもよい。
図5は、図1の競合状態デバッグ・システム1000のある実施形態の一部のブロック図をより詳細に示す。より具体的には、図5は、プロセッサ・コンポーネント350が、少なくとも検出ドライバ140を実行することにおいて、同じデータ片への二つのアクセスの間の競合状態に関連しうるキャッシュ・イベントを検出する、コンピューティング装置300の動作環境の諸側面を描いている。図6は、図2の競合状態デバッグ・システム1000のある実施形態の一部のブロック図をより詳細に示す。より具体的には、図6は、プロセッサ・コンポーネント350aまたは350bのいずれもが、少なくとも検出ドライバ140を実行することにおいて、同じデータ片への二つのアクセスの間の競合状態に関連しうるキャッシュ・イベントを検出する、コンピューティング装置300の動作環境の諸側面を描いている。
図5および図6の両方を参照するに、当業者には認識できるように、オペレーティング・システム340、アプリケーション・ルーチン(単数または複数)370、検出ドライバ140およびデバッグ・ルーチン170は、それぞれを構成するコンポーネントを含め、プロセッサ・コンポーネント350、350aまたは350bのうちの該当するものを実装するために選択される、任意の型のプロセッサ(単数または複数)上で動作するよう選択される。さまざまな実施形態において、それぞれを構成する命令のシーケンスは、オペレーティング・システム、デバイス・ドライバおよび/またはアプリケーション・レベル・ルーチン(たとえば、ディスク・メディア上で提供される「ソフトウェア・スイート」、リモート・サーバーから得られる「アプレット」など)の一つまたは複数を含んでいてもよい。オペレーティング・システムが含まれる場合、オペレーティング・システムは、プロセッサ・コンポーネント350、350aまたは350bの任意の対応するものについて適切な、多様な利用可能なオペレーティング・システムのうちのいかなるものであってもよい。一つまたは複数のデバイス・ドライバが含まれる場合には、それらのデバイス・ドライバは、コンピューティング装置300の、ハードウェア・コンポーネントであれソフトウェア・コンポーネントであれ、多様な他のコンポーネントの任意のものについてのサポートを提供してもよい。
検出ドライバ140は、同じデータ片(たとえばデータ330)へのアクセスの間の競合状態に関連する一つまたは複数の特定のキャッシュ・イベント(たとえば、RFO、HITMなど)を検出するようモニタリング・ユニット354の一つまたは複数を構成設定するよう、プロセッサ・コンポーネント350によってまたはプロセッサ・コンポーネント350aおよび/または350bによって実行可能な構成設定コンポーネント145を含んでいてもよい。より具体的には、構成設定コンポーネント145のトリガー・コンポーネント1455は、プロセッサ・コンポーネント350またはプロセッサ・コンポーネント350aおよび/または350bの状態のさまざまな側面を捕捉することによって応答すべき一つまたは複数の特定のキャッシュ・イベントを指定するよう、モニタリング・ユニットのうち一つまたは複数のモニタリング・ユニットの、レジスタ3545の一つまたは複数をプログラムする。構成設定コンポーネント145は、構成設定データ135から、それらの特定のキャッシュ・イベントが何であるかの指示を取得してもよい。レジスタ3545は、プロセッサ・コンポーネント350またはプロセッサ・コンポーネント350aおよび/または350bの状態のどの側面が捕捉されるべきかの選択を可能にしてもよい。さらに、レジスタ3545は、モニタリング・ユニット(単数または複数)354によって生成されるモニタリング・データ334(あるいは代替的には図6に描かれるモニタリング・データ334aおよび334b)が提供される仕方について何らかの制御を可能にしてもよい。
構成設定コンポーネント145のカウンタ・コンポーネント1454は、プロセッサ・コンポーネント350またはプロセッサ・コンポーネント350aおよび/または350bの状態を、指定されたキャッシュ・イベントの生起の指定された間隔で(たとえば「N」回目の生起ごとに)捕捉するようモニタリング・ユニット(単数または複数)354のカウンタ3544をプログラムして、そのような捕捉が実行される頻度を低下させてもよい。プロセッサ・コンポーネント350の二つ以上(たとえば、図6のプロセッサ・コンポーネント350aおよび/または350b)がある実施形態では、構成設定コンポーネント145は、同じ頻度でのおよび/またはキャッシュ・イベントの同じ生起についてのキャッシュ・イベントの捕捉を協調させるよう、各プロセッサ・コンポーネントのモニタリング・ユニット354をプログラムしてもよい。
トリガー・コンポーネント1455は、前記一つまたは複数の特定のキャッシュ・イベントの検出を動的に有効および/または無効にするよう、モニタリング・ユニット354のうち一つまたは複数のモニタリング・ユニットのレジスタ3545の一つまたは複数を操作してもよい。構成設定コンポーネント145は、オペレーティング・システム340、デバッグ・ルーチン170および/またはアプリケーション・ルーチン370のうちの少なくとも一つのアプリケーション・ルーチンから受領される、アプリケーション・ルーチン370のうちの前記少なくとも一つのアプリケーション・ルーチンがいつ実行されているかの指示に応答してそうしてもよい。
検出ドライバ140は、モニタリング・ユニット(単数または複数)354からモニタリング・データ334またはモニタリング・データ334aおよび334bを受領するよう、プロセッサ・コンポーネント350によってまたはプロセッサ・コンポーネント350aおよび/または350bによって実行可能なフィルタリング・コンポーネント144を含んでいてもよい。モニタリング・データ334またはモニタリング・データ334a〜bを受領すると、フィルタリング・コンポーネント144は、アプリケーション・ルーチン370のうちの一つまたは複数のアプリケーション・ルーチンのどの部分377が同じデータ片にアクセスすることにおける競合状態に関わっていることがありうるかを同定するために関連があると見なされる指示の部分集合をもつ低減されたデータ337を生成するよう、プロセッサ・コンポーネント350またはプロセッサ・コンポーネント350aおよび/または350bの状態の指示をパースする。そうすることにおいて、フィルタリング・コンポーネント144は、キャッシュ・イベントに関連付けられたルーチンおよび/またはデータのアドレスを、そのような競合状態の原因であると信じられるアプリケーション・ルーチン370のうち一つまたは複数のアプリケーション・ルーチンの部分377の、またはそのような競合状態のうちにアクセスされるデータのいずれかの、一つまたは複数の既知のアドレスまたはアドレス範囲と比べることによってそうしてもよい。プロセッサ・コンポーネント350の二つ以上(たとえば、図6のプロセッサ・コンポーネント350aおよび/または350b)がある実施形態では、フィルタリング・コンポーネントは、低減されたデータ337を生成することにおいて、それらのプロセッサ・コンポーネントの状態の諸指示における冗長な情報を消去してもよい。
フィルタリング・コンポーネント144は、コア355、プロセスおよび/またはスレッドのうち、そのような競合状態の原因であると信じられるアプリケーション・ルーチン370のうち一つまたは複数のアプリケーション・ルーチンのいずれかの部分377を実行することに関わらないものの状態の指示を除去してもよい。これを可能にするために、フィルタリング・コンポーネント144は、前記一つまたは複数のアプリケーション・ルーチン370の諸部分377を実行することに関わるコア355、プロセスおよび/またはスレッドの識別子を取得してもよい。フィルタリング・コンポーネント144は、そのような諸識別子を、前記諸指示に含まれる同様の諸識別子と比較して、アプリケーション・ルーチン(単数または複数)370の異なる部分377によってなされるアクセスの間の競合状態から生じるキャッシュ・イベントに関連付けられた指示を他のキャッシュ・イベントに関連付けられた指示から区別してもよい。さまざまな実施形態において、オペレーティング・システム340のアーキテクチャおよび/または他の因子に依存して、フィルタリング・コンポーネント144はそのような識別子を、アプリケーション・ルーチン(単数または複数)370から直接(アプリケーション・ルーチン370のうち一つまたは複数が「デバッグ・モード」で動作することの結果として)、デバッグ・ルーチンから、あるいはオペレーティング・システム340から受領してもよい。デバッグ・ルーチン170は、そのような識別子を、フィルタリング・コンポーネント144に中継する前に、アプリケーション・ルーチン(単数または複数)370またはオペレーティング・システム340から受領してもよい。
検出ドライバ140は、低減されたデータ337を、コンピューティング装置300または別のコンピューティング装置(たとえばデバッグ装置500)の一方または両方内で実行されるデバッグ・ルーチンに中継するよう、プロセッサ・コンポーネント350によってまたはプロセッサ・コンポーネント350aおよび/または350bによって実行可能な中継コンポーネント147を含んでいてもよい。低減されたデータ337をコンピューティング装置300内で実行されるデバッグ・ルーチン(たとえばデバッグ・ルーチン170)に中継することにおいて、中継コンポーネント147は、オペレーティング・システム340を通じて、低減されたデータ337をそのようにして中継してもよい。これは、検出ドライバ140がオペレーティング・システム340と同様の、より低いレベルで、デバイス・ドライバとして実行され、それによりオペレーティング・システムがデバイス・ドライバとデバッグ・ルーチンのような他のルーチンとの間の抽象化層を提供する実施形態では必須にされてもよい。低減されたデータ337を別のコンピューティング装置内で実行されるデバッグ・ルーチンに中継することにおいて、中継コンポーネント147はインターフェース390を用いて、低減されたデータ337を別のコンピューティング装置(たとえばデバッグ装置500)にネットワーク(たとえばネットワーク999)を介して伝送してもよい。
図7は、論理フロー2100のある実施形態を示している。論理フロー2100は、本稿に記載される一つまたは複数の実施形態によって実行される動作の一部または全部を表わしていてもよい。より具体的には、論理フロー2100は、少なくとも検出ドライバ140を実行することにおいてプロセッサ・コンポーネント350またはプロセッサ・コンポーネント350aおよび/または350bによって実行される、および/またはコンピューティング装置300の他のコンポーネント(単数または複数)によって実行される動作を示していてもよい。
2110では、競合状態デバッグ・システムのコンピューティング装置のプロセッサ・コンポーネント(たとえば、競合状態デバッグ・システム1000のコンピューティング装置300のプロセッサ・コンポーネント350またはプロセッサ・コンポーネント350aおよび/または350b)は、一つまたは複数のアプリケーション・ルーチン(たとえば、アプリケーション・ルーチン370)の実行開始の指示(indication)を待つ。論じたように、そのような指示は、前記一つまたは複数のアプリケーション・ルーチンから直接、オペレーティング・システム(たとえばオペレーティング・システム340)を通じて、あるいはデバッグ・ルーチン(たとえばデバッグ・ルーチン170)から伝達されてもよい。
2120では、アプリケーション・ルーチンの少なくとも一つの部分を実行するプロセッサ・コンポーネントのモニタリング・ユニット(たとえば、モニタリング・ユニット354)が、同じデータ片へのアクセス間の競合状態に関連する特定のキャッシュ・イベント(単数または複数)(たとえばRFO、HITMなど)の生起を検出し、一つまたは複数のアプリケーション・ルーチンを実行するプロセッサ・コンポーネントの状態の指示を捕捉することによってそれらの生起に応答するよう構成設定される。前記アプリケーション・ルーチン(単数または複数)の少なくとも一部を実行するプロセッサの一つまたは複数は、モニタリング・ユニットを構成設定する同じプロセッサ・コンポーネントであってもなくてもよい。先に論じたように、アクセスは、読み出し動作と書き込み動作の組み合わせであってもよく、あるいは複数の書き込み動作の組み合わせであってもよい。それに関わりなく、アクセスは、単一のアプリケーション・ルーチンの異なる部分、二つの異なるアプリケーション・ルーチンの諸部分または同じアプリケーション・ルーチンの同じ部分の二つのインスタンスであって、それらのアクセスを協調させることが意図されていたのに協調させなかったもの(たとえば、単一のアプリケーション・ルーチン370またはアプリケーション・ルーチン370のうち異なるアプリケーション・ルーチンの諸部分377または単一のアプリケーション・ルーチン370の単一の部分377)によってなされてもよい。やはり先に論じたように、捕捉される指示は、生起したキャッシュ・イベントの型の指標、該キャッシュ・イベントをトリガーしたデータ・アクセスの型(たとえば読み出し動作または書き込み動作)の指標、そのデータ・アクセスを引き起こした実行のプロセスおよび/またはスレッドの識別子、命令ポインタのアドレスの指示、プロセッサ・コンポーネントの一つまたは複数のレジスタの内容などを含んでいてもよい。
2130では、モニタリング・ユニットのカウンタが、生起ごと以外のキャッシュ・イベントの生起の間隔でそのような捕捉を実行するよう構成設定される。論じたように、そのような間隔は、三回目ごと、五回目ごとなど、キャッシュ・イベントの「N回目」の生起ごとであってもよい。
2140では、前記一つまたは複数のアプリケーション・ルーチンの実行の終了が待たれる。2150では、前記アプリケーション・ルーチンの実行の終了に対して、キャッシュ・イベントの生起をモニタリングするのをやめるようモニタリング・ユニットを構成設定することによって応答する。このようにして、キャッシュ・イベントの生起をモニタリングすることおよび付随する捕捉動作は、アプリケーション・ルーチンが現在実行されているかどうかに依存して、動的に有効にされ、無効にされうる。
図8は、論理フロー2200のある実施形態を示している。論理フロー2200は、本稿に記載される一つまたは複数の実施形態によって実行される動作の一部または全部を表わしていてもよい。より具体的には、論理フロー2200は、少なくとも検出ドライバ140を実行することにおいてプロセッサ・コンポーネント350またはプロセッサ・コンポーネント350aおよび/または350bによって実行される、および/またはコンピューティング装置300の他のコンポーネント(単数または複数)によって実行される動作を示していてもよい。
2210では、競合状態デバッグ・システムのコンピューティング装置のプロセッサ・コンポーネントのモニタリング・ユニット(たとえば、競合状態デバッグ・システム1000のコンピューティング装置300のプロセッサ・コンポーネント350またはプロセッサ・コンポーネント350aおよび/または350bのモニタリング・ユニット354)は、少なくとも一つのアプリケーション・ルーチンの少なくとも一部(たとえば、アプリケーション・ルーチン370のうちの一つのアプリケーション・ルーチンの諸部分377のうちの一つ)を実行するプロセッサ・コンポーネントの一つまたは複数のコア(たとえば、コア355のうちの一つまたは複数またはコア355xおよび355yの一方または両方)を、指定されたキャッシュ・イベントの生起について、モニタリングする。論じたように、モニタリング・ユニットは、同じデータ片に関わる読み出し動作と書き込み動作の間または二つの書き込み動作の間の競合状態のような、同じデータ片へのアクセスの間の競合状態に関連する一つまたは複数の特定のキャッシュ・イベントについてモニタリングするよう構成されている。
2220では、指定されたイベントの生起が検出される。2230では、モニタリング・ユニットのカウンタ(たとえばカウンタ3544)にプログラムされた間隔の終わりに達したかどうかを判定する検査がなされる。間隔の終わりに達していなければ、アプリケーション・ルーチンの少なくとも一部を実行するプロセッサ・コンポーネントの前記一つまたは複数のコアが再び2210においてモニタリングされる。
しかしながら、間隔の終わりに達していたら、少なくとも一つのアプリケーション・ルーチンの少なくとも一部を実行するプロセッサ・コンポーネントの前記一つまたは複数のコアの状態が2240において捕捉される。論じたように、そのような捕捉は、前記コアのうち一つまたは複数のコアのレジスタのうちの一つまたは複数のレジスタ(たとえばレジスタ3555)の状態および/または前記コアのうち一つまたは複数のコアの命令ポインタによってポイントされるアドレスを捕捉することに関わってもよい。そのような捕捉に続いて、前記一つまたは複数のコアのモニタリングは2210に続く。
図9は、論理フロー2300のある実施形態を示す。論理フロー2300は、本稿に記載される一つまたは複数の実施形態によって実行される動作の一部または全部を表わしていてもよい。より具体的には、論理フロー2300は、少なくとも検出ドライバ140を実行することにおいてプロセッサ・コンポーネント350またはプロセッサ・コンポーネント350aおよび/または350bによって実行される、および/またはコンピューティング装置300の他のコンポーネント(単数または複数)によって実行される動作を示していてもよい。
2310では、競合状態デバッグ・システムのコンピューティング装置のプロセッサ・コンポーネント(たとえば、競合状態デバッグ・システム1000のコンピューティング装置300のプロセッサ・コンポーネント350またはプロセッサ・コンポーネント350aおよび/または350b)は、少なくとも一つのアプリケーション・ルーチンの少なくとも一つの部分(たとえば、アプリケーション・ルーチン370のうちの一つのアプリケーション・ルーチンの部分377)を実行することに関わる少なくとも一つのコア(たとえば、コア355のうちの一つ)、プロセスおよび/またはスレッドの識別情報(identity)の指示(indication)を受領する。論じたように、そのような指示は、前記アプリケーション・ルーチン(単数または複数)から直接、オペレーティング・システム(たとえばオペレーティング・システム340)を通じて、あるいはデバッグ・ルーチン(たとえばデバッグ・ルーチン170)から伝達されてもよい。
2320では、指定されたキャッシュ・イベントの生起に応答して捕捉された、プロセッサ・コンポーネントの一つまたは複数のコアの状態の指示が受領される。論じたように、指定されたキャッシュ・イベントは、単一のアプリケーション・ルーチンの二つの部分の間または二つの異なる(だが関係した)アプリケーション・ルーチンの部分の間の、同じメモリ片にアクセスすることにおける競合状態の生起に関連したキャッシュ・イベントの型であってもよい。その間に競合状態が存在しうるアクセスは、読み出し動作と書き込み動作の組み合わせであってもよく、あるいは二つ以上の書き込み動作の組み合わせであってもよい。
2330では、前記アプリケーション・ルーチン(単数または複数の)のどの部分を実行することにも関わらない一つまたは複数のコア、プロセスおよび/またはスレッドに関連する指示がフィルタリングにより除去され、低減されたデータを生成する。そのようなフィルタリングは、前記アプリケーション・ルーチン(単数または複数の)の少なくとも一つの部分を実行することに関わる一つまたは複数のコア、プロセスおよび/またはスレッドの識別情報の指示を用いる。
2340では、少なくとも部分的には上記のフィルタリングによって生成された前記低減されたデータが、デバッグ・ルーチンに提供される。論じたように、デバッグ・ルーチンは、前記アプリケーション・ルーチン(単数または複数)が実行されるのと同じコンピューティング装置内で実行されてもよく、前記低減されたデータはデバッグ・ルーチンに、そのコンピューティング装置のオペレーティング・システムを通じて提供されてもよい。さもなければ、前記低減されたデータは、ネットワークを介して、デバッグ・ルーチンが実行されている別のコンピューティング装置に送信されてもよい。
図10は、先に記述したさまざまな実施形態を実装するために好適な処理アーキテクチャ3000の実施形態を示している。より具体的には、処理アーキテクチャ3000(またはその変形)は、コンピューティング装置100、300または500のうちの一つまたは複数のコンピューティング装置の一部として実装されてもよい。処理アーキテクチャ3000のコンポーネントは、最後の二桁が、これらのコンピューティング装置の一部として先に描かれ、記述されたコンポーネントの少なくともいくつかの参照符号の最後の二桁に対応する参照符号を与えられていることを注意しておくべきである。これは、それぞれの諸コンポーネントを相関付ける助けとしてなされている。
処理アーキテクチャ3000は、限定なしに、一つまたは複数のプロセッサ、マルチコア・プロセッサ、コプロセッサ、メモリ・ユニット、チップセット、コントローラ、周辺機器、インターフェース、発振器、タイミング装置、ビデオ・カード、オーディオ・カード、マルチメディア入出力(I/O)コンポーネント、電源などを含むデジタル処理において一般的に用いられるさまざまな要素を含んでいてもよい。本願での用法では、用語「システム」および「コンポーネント」は、デジタル処理が実行されるコンピューティング装置のエンティティを指すことが意図されている。該エンティティは、ハードウェア、ハードウェアとソフトウェアの組み合わせ、ソフトウェアまたは実行中のソフトウェアであり、その例がこの描かれた例示的な処理アーキテクチャによって与えられている。たとえば、コンポーネントは、これに限られないが、プロセッサ・コンポーネント上で走るプロセス、該プロセッサ・コンポーネント自身、光学式および/または磁気式記憶媒体を用いうる記憶装置(たとえばハードディスク・ドライブ、アレイにおける複数の記憶ドライブなど)、ソフトウェア・オブジェクト、実行可能な命令シーケンス、実行のスレッド、プログラムおよび/またはコンピューティング装置全体(たとえばコンピュータ全体)であることができる。例として、サーバー上で走るアプリケーションおよび該サーバーの両方が、一つのコンポーネントであることができる。一つまたは複数のコンポーネントは、プロセスおよび/または実行のスレッド内に存在することができ、コンポーネントは、一つのコンピューティング装置上に局在化されているおよび/または二つ以上のコンピューティング装置の間で分散されていることができる。さらに、コンポーネントは、動作を協調させるようさまざまな型の通信媒体によって互いに通信上結合されてもよい。協調は、一方向性または双方向性の情報交換に関わってもよい。たとえば、諸コンポーネントは、通信媒体を通じて通信される信号の形で情報を通信してもよい。情報は、一つまたは複数の信号線に割り当てられた信号として実装されることができる。メッセージ(コマンド、状態、アドレスまたはデータ・メッセージを含む)は、そのような信号の一つであってもよく、あるいは複数のそのような信号であってもよく、多様な接続および/またはインターフェースの任意のものを通じてシリアルにまたは実質的に並列に伝送されてもよい。
描かれるように、処理アーキテクチャ3000を実装することにおいて、コンピューティング装置は少なくとも、プロセッサ・コンポーネント950、記憶960、一つまたは複数の他の装置へのインターフェース990および結合959を含んでいてもよい。のちに説明するように、意図される使用および/または使用条件を含む、処理アーキテクチャ3000を実装するコンピューティング装置のさまざまな側面に依存して、そのようなコンピューティング装置はさらに、追加的なコンポーネントを含んでいてもよい。たとえば、限定なしに、ディスプレイ・インターフェース985または一つまたは複数の処理サブシステム900などである。何であれ処理アーキテクチャ3000を実装しうるコンピューティング装置において、回路をもって実装されるさまざまな描かれたコンポーネントの一つは、離散的なコンポーネントを用いて、および/または単一または比較的少数の半導体デバイス内の回路の諸ブロック(たとえば、「システムオンチップ」すなわちSOC)として実装されてもよい。
結合959は、一つまたは複数のバス、ポイントツーポイント相互接続、トランシーバ、バッファ、クロスポイント・スイッチおよび/または少なくとも前記プロセッサ・コンポーネント950を前記記憶960に通信上結合する他の導体および/または論理を含んでいてもよい。結合959はさらに、前記プロセッサ・コンポーネント950をインターフェース990、オーディオ・サブシステム970およびディスプレイ・インターフェース985のうちの一つまたは複数に(これらのどれがおよび/または他のコンポーネントが存在するかどうかに依存して)結合してもよい。プロセッサ・コンポーネント950が結合959によってそのように結合されると、プロセッサ・コンポーネント950は、上記のコンピューティング装置のどれ(単数または複数)が処理アーキテクチャ3000を実装するにせよ、上記で詳しく述べたタスクのさまざまなものを実行することができる。結合959は、信号が光学的および/または電気的に伝達されるために使われる多様な技術または技術の組み合わせの任意のものを用いて実装されうる。さらに、結合959の少なくとも諸部分は、限定なしに、加速グラフィック・ポート(AGP)、カードバス(CardBus)、拡張業界標準アーキテクチャ(E-ISA)、マイクロチャネル・アーキテクチャ(MCA)、NuBus、周辺コンポーネント相互接続(拡張)(PCI-X)、PCIエクスプレス(PCI-E)、パーソナル・コンピュータ・メモリ・カード国際連合(PCMCIA)バス、HyperTransport(商標)、QuickPathなどを含む、幅広い多様な業界標準の任意のものに準拠するタイミングおよび/またはプロトコルを用いてもよい。
先に論じたように、プロセッサ・コンポーネント950(プロセッサ・コンポーネント350または550の一つまたは複数に対応)は、幅広い多様な技術の任意のものを用い、いくつもある方法の任意のものにおいて物理的に組み合わされた一つまたは複数のコアを用いて実装された、幅広い多様な商業的に入手可能なプロセッサの任意のものを含んでいてもよい。
先に論じたように、記憶960(記憶360または560の一つまたは複数に対応)は、幅広い多様な技術または技術の組み合わせの任意のものに基づく一つまたは複数の相異なる記憶装置から構成されていてもよい。より具体的には、描かれるように、記憶960は、揮発性記憶961(たとえば、RAM技術の一つまたは複数の形に基づく半導体記憶)、不揮発性記憶962(内容を保持するために電力の一定した提供を必要としない半導体、強磁性または他の記憶)およびリムーバブル・メディア記憶963(たとえば、コンピューティング装置の間で情報を伝達するために用いられうるリムーバブルなディスクまたは半導体メモリ・カード記憶)のうちの一つまたは複数を含んでいてもよい。可能性としては複数の相異なる型の記憶を含むという記憶960のこの描写は、一つの型がプロセッサ・コンポーネント950によるデータのより迅速な操作を可能にする比較的高速な読み出しおよび書き込み機能を提供する(だが可能性としては一定して電力を必要とする「揮発性」技術を使う)一方、別の型は不揮発性記憶の比較的高い密度を提供する(だが比較的低速な読み出しおよび書き込み機能を提供する可能性が高い)という、コンピューティング装置における二つ以上の型の記憶装置の使用が一般的であることを認識してのものである。
異なる技術を用いる異なる記憶装置のしばしば異なる特性を与えられると、そのような異なる記憶装置がコンピューティング装置の他の部分に、異なるインターフェースを通じて異なる記憶装置に結合された異なる記憶コントローラを通じて結合されることも一般的である。たとえば、揮発性記憶961が存在し、RAM技術に基づく場合、揮発性記憶961は、揮発性記憶961への適切なインターフェースを提供する記憶コントローラ965aを通じて結合959に通信上結合されてもよく、記憶コントローラ965aはおそらくは行および列のアドレッシングを用い、記憶コントローラ965aは揮発性記憶961内に記憶されている情報を保持するのを助けるために、行リフレッシュ(row refreshing)および/または他の維持タスクを実行してもよい。もう一つの例として、不揮発性記憶962が存在し、一つまたは複数の強磁性および/または半導体ディスク・ドライブを含む場合、不揮発性記憶962は、不揮発性記憶962への適切なインターフェースを提供する記憶コントローラ965bを通じて結合959に通信上結合されてもよく、記憶コントローラ965bはおそらくは情報のブロックおよび/またはシリンダおよびセクタのアドレッシングを用いる。さらにもう一つの例として、リムーバブル・メディア記憶963が存在し、機械可読記憶媒体969の一つまたは複数の片を用いる一つまたは複数の光学式および/または半導体ディスク・ドライブを含む場合、リムーバブル・メディア記憶963は、リムーバブル・メディア記憶963への適切なインターフェースを提供する記憶コントローラ965cを通じて結合959に通信上結合されてもよく、記憶コントローラ965cはおそらくは情報のブロックのアドレッシングを用い、記憶コントローラ965cは、機械可読記憶媒体969の寿命を長くすることに固有の仕方で読み出し動作、消去動作および書き込み動作を協調させてもよい。
揮発性記憶961または不揮発性記憶962の一方または他方は、それぞれのベースとなる技術に依存してさまざまな実施形態を実装するためにプロセッサ・コンポーネント950によって実行可能な命令のシーケンスを含むルーチンが記憶されていてもよい機械可読記憶媒体の形の製造物を含んでいてもよい。例として、不揮発性記憶962が強磁性ベースのディスク・ドライブ(たとえば、いわゆる「ハードドライブ」)を含む場合には、そのような各ディスク・ドライブは典型的には、フロッピーディスケットのような記憶媒体と似た仕方で磁気応答性の粒子が堆積され、命令のシーケンスのような情報を記憶するためにさまざまなパターンにおいて磁気的に配向されている一つまたは複数の回転円盤を用いる。もう一つの例として、不揮発性記憶962は、コンパクトフラッシュ(登録商標)カードに似た仕方で命令のシーケンスのような情報を記憶するための半導体記憶デバイスのバンクから構成されていてもよい。また、実行可能なルーチンおよび/またはデータを記憶するために異なる諸時点においてコンピューティング装置において異なる型の記憶装置を用いることが一般的である。そこで、さまざまな実施形態を実装するためにプロセッサ・コンポーネント950によって実行されるべき命令のシーケンスを含むルーチンが、初期には機械可読記憶媒体969に記憶されてもよく、その後、リムーバブル・メディア記憶963が用いられて、そのルーチンを、より長期間の記憶のために、機械可読記憶媒体969の継続した存在を必要としない不揮発性記憶962に、および/またはそのルーチンが実行される際にプロセッサ・コンポーネント950によるより高速なアクセスを可能にするために、揮発性記憶961に、コピーしてもよい。
先に論じたように、インターフェース990(インターフェース390または590の一つまたは複数に対応)は、コンピューティング装置を一つまたは複数の他の装置に通信上結合するために用いられうる多様な通信技術の任意のものに対応する多様な信号伝達技術の任意のものを用いてもよい。また、プロセッサ・コンポーネント950が入出力装置(たとえば、描かれている例示的なキーボード920またはプリンタ925)および/または他のコンピューティング装置と、可能性としてはネットワーク(たとえばネットワーク999)または相互接続された一組のネットワークを通じて対話することを可能にするために、さまざまな形の有線または無線の信号伝達の一方または両方が用いられてもよい。しばしば任意の一つのコンピューティング装置によってサポートされる必要のある複数の型の信号伝達および/またはプロトコルのしばしば大きく異なる特性を認識して、インターフェース990は、複数の異なるインターフェース・コントローラ995a、995bおよび995cを含むものとして描かれている。インターフェース・コントローラ995aは、描かれているキーボード920のようなユーザー入力装置からシリアルに伝送されるメッセージを受領するために多様な型の有線のデジタル・シリアル・インターフェースまたは電波周波数無線インターフェースの任意のものを用いてもよい。インターフェース・コントローラ995bは、描かれているネットワーク999(おそらくは一つまたは複数のリンクからなるネットワーク、あるいは可能性としてはインターネット)を通じて他のコンピューティング装置にアクセスするための多様なケーブル・ベースのまたは無線の信号伝達、タイミングおよび/またはプロトコルの任意のものを用いてもよい。インターフェース995cは、描かれているプリンタ925にデータを伝達するためのシリアルまたはパラレルの信号伝送の使用を可能にする多様な電気伝導性ケーブルの任意のものを用いてもよい。インターフェース990の一つまたは複数のインターフェース・コントローラを通じて通信上結合されうる装置の他の例は、限定なしに、マイクロフォン、リモコン、スタイラス・ペン、カード・リーダー、指紋リーダー、バーチャル・リアリティー対話グローブ、グラフィック入力タブレット、ジョイスティック、他のキーボード、網膜スキャナ、タッチスクリーンのタッチ入力コンポーネント、トラックボール、さまざまなセンサー、ジェスチャおよび/または顔の表情を介して人によって合図されるコマンドおよび/またはデータを受け入れるよう人の動きをモニタリングするためのカメラまたはカメラ・アレイ、レーザー・プリンタ、インクジェット・プリンタ、機械的ロボット、フライス盤などを含む。
コンピューティング装置がディスプレイ(たとえば、ディスプレイ580に対応する描かれている例示的なディスプレイ980)に通信上結合されている(あるいは可能性としては実際に組み込んでいる)場合、処理アーキテクチャ3000を実装するそのようなコンピューティング装置は、ディスプレイ・インターフェース985を含んでいてもよい。より一般化された型のインターフェースがディスプレイに通信上結合することにおいて用いられてもよいが、ディスプレイ上にさまざまな形のコンテンツを視覚的に表示することにおいては、いくらか特化した追加的な処理がしばしば必要とされる。また、使用されるケーブル・ベースのインターフェースのいくらか特化した性質のため、しばしば、相異なるディスプレイ・インターフェースの提供が望ましいものとなる。ディスプレイ・インターフェース985によってディスプレイ980の通信上の結合において用いられうる有線および/または無線の信号伝達技術は、限定なしに、多様なアナログ・ビデオ・インターフェース、デジタル・ビデオ・インターフェース(DVI)、ディスプレイポート(DisplayPort)などの任意のものを含む多様な業界標準の任意のものに準拠する信号伝達および/またはプロトコルを利用してもよい。
より一般には、本願で記述され、描かれているコンピューティング装置のさまざまな要素は、さまざまなハードウェア要素、ソフトウェア要素または両者の組み合わせを含んでいてもよい。ハードウェア要素の例は、装置、論理装置、コンポーネント、プロセッサ、マイクロプロセッサ、回路、プロセッサ・コンポーネント、回路要素(たとえば、トランジスタ、抵抗器、キャパシタ、インダクタなど)、集積回路、特定用途向け集積回路(ASIC)、プログラム可能な論理デバイス(PLD)、デジタル信号プロセッサ(DSP)、フィールド・プログラマブル・ゲート・アレイ(FPGA)、メモリ・ユニット、論理ゲート、レジスタ、半導体デバイス、チップ、マイクロチップ、チップセットなどを含みうる。ソフトウェア要素の例は、ソフトウェア・コンポーネント、プログラム、アプリケーション、コンピュータ・プログラム、アプリケーション・プログラム、システム・プログラム、ソフトウェア開発プログラム、機械プログラム、オペレーティング・システム・ソフトウェア、ミドルウェア、ファームウェア、ソフトウェア・モジュール、ルーチン、サブルーチン、関数、メソッド、プロシージャ、ソフトウェア・インターフェース、アプリケーション・プログラム・インターフェース(API)、命令セット、コンピューティング・コード、コンピュータ・コード、コード・セグメント、コンピュータ・コード・セグメント、語、値、シンボルまたはそれらの任意の組み合わせを含みうる。しかしながら、実施形態がハードウェア要素および/またはソフトウェア要素を使って実装されるかどうかの決定は、所与の実装のために望まれる、所望される計算レート、電力レベル、熱耐性、処理サイクル予算、入力データ・レート、出力データ・レート、メモリ資源、データ・バス・スピードおよび他の設計もしくはパフォーマンス制約条件など、いくつもある要因に応じて変わりうる。
いくつかの実施形態は、表現「一つの実施形態」または「ある実施形態」ならびにその派生形を使って記述されることがある。これらの用語は、その実施形態との関連で記述される特定の特徴、構造または特性が少なくとも一つの実施形態に含まれることを意味する。本明細書の随所に「ある実施形態では」という句が現われるのは、必ずしもみなが同じ実施形態を指しているのではない。さらに、いくつかの実施形態は、表現「結合された」および「接続された」ならびにその派生形を使って記述されることがある。これらの用語は必ずしも互いの同義語として意図されていない。たとえば、いくつかの実施形態は、二つ以上の要素が互いに直接的に物理的または電気的に接触していることを示すために用語「接続された」および/または「結合された」を使って記述されることがある。しかしながら、用語「結合された」は二つ以上の要素が互いに直接接触してはいないが、それでも互いと協働または相互作用することをも意味することがある。さらに、異なる実施形態からの側面または要素が組み合わされてもよい。
本開示の要約は、技術的開示の性質を素速く見きわめることを読者に許容するために与えられていることを強調しておく。要約は、請求項の範囲や意味を解釈または限定するために使われないという理解のもとに提出される。さらに、以上の詳細な説明において、開示の流れをよくする目的で、さまざまな特徴が単一の実施形態にまとめられていることが見て取れる。この開示法は、請求される実施形態が、各請求項に明示的に記載されているよりも多くの事項を必要とするという意図を反映したものと解釈されるものではない。むしろ、付属の請求項が反映するように、発明の主題は、単一の開示される実施形態の全事項よりも少ないものに存する。このように、付属の請求項は、ここに詳細な説明に組み込まれ、各請求項がそれ自身として別個の実施形態をなす。付属の請求項において、用語「含む」および「ここで」は、それぞれ用語「有する」および「ここにおいて」の平易な英語の等価物として使われる。さらに、用語「第一」「第二」「第三」などは、単にラベルとして使われ、それらの対象に対する数的な要件を課すことは意図されていない。
上記したことは、開示されるアーキテクチャの例を含む。むろん、コンポーネントおよび/または方法論のあらゆる考えられる組み合わせを記述することは可能ではないが、当業者は、多くのさらなる組み合わせおよび置換が可能であることを認識しうる。よって、新規なアーキテクチャは、付属の請求項の精神および範囲内にはいるそのようなあらゆる改変、修正および変形を包含することが意図されている。詳細な開示は、さらなる実施形態に関する例を与える。下記に与える例は限定することは意図されていない。
実施例1では、競合状態を検出する装置が、モニタリング・ユニットを含むプロセッサ・コンポーネントと、データ片へのアクセスの間の競合状態に関連するキャッシュ・イベントを検出し、前記キャッシュ・イベントの生起に応答してモニタリング・データを生成するよう前記プロセッサ・コンポーネントの状態の指示(indication)を捕捉するよう前記モニタリング・ユニットを構成設定する、前記プロセッサ・コンポーネントによる実行のためのトリガー・コンポーネントと、前記キャッシュ・イベントの生起毎よりも少ない頻度での前記プロセッサ・コンポーネントの状態の指示の捕捉を可能にするよう前記モニタリング・ユニットのカウンタを構成設定する、前記プロセッサ・コンポーネントによる実行のためのカウンタ・コンポーネントとを含む。
実施例1の主題を含む実施例2では、前記トリガー・コンポーネントは、前記プロセッサ・コンポーネントによる並行した実行のための複数の部分を含むアプリケーション・ルーチンが前記プロセッサ・コンポーネントによって現在実行されているかどうかに基づいて前記指示の捕捉を動的に有効にしうる。
実施例1ないし2のうちいずれか一項の主題を含む実施例3では、当該装置は、前記キャッシュ・イベントが前記プロセッサ・コンポーネントによって実行されるアプリケーション・ルーチンの第一の部分による前記データ片への第一のアクセスと前記アプリケーション・ルーチンの第二の部分による前記データ片への第二のアクセスとの間の競合状態から生じるのでないことに基づいて前記モニタリング・データから前記指示を除去して、前記モニタリング・データの前記プロセッサ・コンポーネントの状態の複数の指示の部分集合を含む低減されたデータを生成する、前記プロセッサ・コンポーネントによる実行のためのフィルタ・コンポーネントをさらに含み、前記第一のアクセスは書き込み動作を含んでいてもよく、前記第二のアクセスは読み出し動作および書き込み動作の一方を含んでいてもよい。
実施例1ないし3のうちいずれか一項の主題を含む実施例4では、前記フィルタ・コンポーネントは、前記第一の部分、前記第二の部分、前記第一の部分および前記第二の部分の一方を実行する前記プロセッサ・コンポーネントのコアまたは前記第一の部分および前記第二の部分の一方の実行のスレッドのうちの少なくとも一つの識別子に基づいて、前記キャッシュ・イベントが前記第一のアクセスと前記第二のアクセスとの間の競合状態から生じるかどうかを判定しうる。
実施例1ないし4のうちいずれか一項の主題を含む実施例5では、当該装置は、前記プロセッサ・コンポーネントをネットワークに結合するインターフェースと、前記低減されたデータをデバッグ装置に送信するよう前記インターフェースを動作させる、前記プロセッサ・コンポーネントによる実行のための中継コンポーネントとを含んでいてもよい。
実施例1ないし5のうちいずれか一項の主題を含む実施例6では、前記競合状態は、前記データ片を読むための、第一の実行のスレッドにおいて前記プロセッサ・コンポーネントによって実行される第一のアプリケーション・ルーチンの読み出し動作と、前記データ片に書き込むための、第二の実行のスレッドにおいて前記プロセッサ・コンポーネントによって実行される第二のアプリケーション・ルーチンの書き込み動作との間の競合状態を含む。
実施例1ないし6のうちいずれか一項の主題を含む実施例7では、前記指示は、前記プロセッサ・コンポーネントのレジスタの内容、前記プロセッサ・コンポーネントの命令ポインタのアドレス、どんなアクセス動作が前記キャッシュ・イベントをトリガーしたかの指示、前記キャッシュ・イベントの型、前記キャッシュ・イベントをトリガーしたアクセス動作を実行した前記プロセッサのコアの識別子または前記キャッシュ・イベントをトリガーしたアクセス動作が実行された実行のスレッドの識別子のうちの少なくとも一つを含んでいてもよい。
実施例1ないし7のうちいずれか一項の主題を含む実施例8では、前記キャッシュ・イベントは、前記プロセッサ・コンポーネントのキャッシュに関わっていてもよく、所有権を求める読み出し(RFO)キャッシュ・イベントまたは修正版にヒット(HITM)キャッシュ・イベントの少なくとも一方を含んでいてもよい。
実施例1ないし8のうちいずれか一項の主題を含む実施例9では、当該装置は、別のプロセッサ・コンポーネントを含んでいてもよく、前記トリガー・コンポーネントは、前記キャッシュ・イベントを検出し、前記キャッシュ・イベントの生起に応答して別のモニタリング・データとして前記別のプロセッサ・コンポーネントの状態の指示を捕捉するよう前記別のプロセッサ・コンポーネントのモニタリング・ユニットを構成設定する。
実施例1ないし9のうちいずれか一項の主題を含む実施例10では、前記フィルタ・コンポーネントは、前記キャッシュ・イベントがあるアプリケーション・ルーチンの第一の部分の読み出し動作とそのアプリケーション・ルーチンの第二の部分の書き込み動作との間の競合状態から生じるのでないことに基づいて前記別のモニタリング・データからの前記別のプロセッサ・コンポーネントの状態の指示を除去して、前記モニタリング・データの前記プロセッサ・コンポーネントの状態の複数の指示の部分集合および前記別のモニタリング・データの前記別のプロセッサ・コンポーネントの状態の複数の指示の部分集合を含む低減されたデータを生成してもよい。
実施例11では、競合状態を検出する装置が、第一のプロセッサ・コンポーネントと;第二のプロセッサ・コンポーネントと;データ片へのアクセスの間の競合状態に関連するキャッシュ・イベントを検出し、前記キャッシュ・イベントの生起に応答して第一のモニタリング・データとして前記第一のプロセッサ・コンポーネントの状態の第一の指示を捕捉するよう前記第一のプロセッサ・コンポーネントのモニタリング・ユニットを構成設定し、前記キャッシュ・イベントを検出し、前記キャッシュ・イベントの生起に応答して第二のモニタリング・データとして前記第二のプロセッサ・コンポーネントの状態の第二の指示を捕捉するよう前記第二のプロセッサ・コンポーネントのモニタリング・ユニットを構成設定するトリガー・コンポーネントと;前記第一の指示および前記第二の指示を比較して、前記第一の指示に対する前記第二の指示の冗長性に基づいて前記第一の指示を含むが前記第二の指示を含まない低減されたデータを生成するフィルタ・コンポーネントとを含んでいてもよい。
実施例11の主題を含む実施例12では、前記トリガー・コンポーネントは、前記第一のプロセッサ・コンポーネントおよび前記第二のプロセッサ・コンポーネントの少なくとも一方による並行した実行のための複数の部分を含むアプリケーション・ルーチンが前記第一のプロセッサ・コンポーネントおよび前記第二のプロセッサ・コンポーネントの少なくとも一方によって現在実行されているかどうかに基づいて前記第一の指示および前記第二の指示の捕捉を動的に有効にしうる。
実施例11ないし12のうちいずれか一項の主題を含む実施例13では、当該装置は、前記キャッシュ・イベントの生起毎よりも少ない頻度での前記第一の指示および前記第二の指示の捕捉を可能にするよう前記第一および第二のプロセッサ・コンポーネントのそれぞれのモニタリング・ユニットのカウンタを構成設定するカウンタ・コンポーネントとを含んでいてもよい。
実施例11ないし13のうちいずれか一項の主題を含む実施例14では、前記カウンタ・コンポーネントは、前記第一の指示の捕捉と前記第二の指示の捕捉を同期させるよう、前記第一のプロセッサ・コンポーネントのモニタリング・ユニットのカウンタおよび前記第二のプロセッサ・コンポーネントのモニタリング・ユニットのカウンタを構成設定してもよい。
実施例11ないし14のうちいずれか一項の主題を含む実施例15では、前記フィルタ・コンポーネントは、前記キャッシュ・イベントが前記第一および第二のプロセッサ・コンポーネントの一つによって実行されるアプリケーション・ルーチンの第一の部分による前記データ片へのアクセスと前記第一および第二のプロセッサ・コンポーネントの一つによって実行される前記アプリケーション・ルーチンの第二の部分による前記データ片へのアクセスとの間の競合状態から生じるのでないことに基づいて、前記第一の指示および前記第二の指示の少なくとも一方を前記低減されたデータに含めることを調整してもよい。
実施例11ないし15のうちいずれか一項の主題を含む実施例16では、前記フィルタ・コンポーネントは、前記第一の部分、前記第二の部分、前記第一の部分および前記第二の部分の一方を実行する前記第一のプロセッサ・コンポーネントのコア、前記第一の部分および前記第二の部分の一方を実行する前記第二のプロセッサ・コンポーネントのコアまたは前記第一の部分および前記第二の部分の一方の実行のスレッドのうちの少なくとも一つの識別子に基づいて、前記キャッシュ・イベントが前記アプリケーション・ルーチンの前記第一の部分と前記第二の部分の間の競合状態から生じるかどうかを判定してもよい。
実施例11ないし16のうちいずれか一項の主題を含む実施例17では、当該装置は、前記第一のプロセッサ・コンポーネントおよび前記第二のプロセッサ・コンポーネントの少なくとも一方をネットワークに結合するインターフェースと、前記低減されたデータをデバッグ装置に送信するよう前記インターフェースを動作させる中継コンポーネントとを含んでいてもよい。
実施例11ないし17のうちいずれか一項の主題を含む実施例18では、前記競合状態は、前記データ片を読むための、第一の実行のスレッドにおいて前記第一および第二のプロセッサ・コンポーネントの一方によって実行されるアプリケーション・ルーチンの第一の部分の読み出し動作と、前記データ片に書き込むための、第二の実行のスレッドにおいて前記第一および第二のプロセッサ・コンポーネントの一方によって実行される前記アプリケーション・ルーチンの第二の部分の書き込み動作との間の競合状態を含んでいてもよい。
実施例11ないし18のうちいずれか一項の主題を含む実施例19では、前記第一の指示は、前記第一のプロセッサ・コンポーネントのレジスタの内容、前記第一のプロセッサ・コンポーネントの命令ポインタのアドレス、どんなアクセス動作が前記キャッシュ・イベントをトリガーしたかの指示、前記キャッシュ・イベントの型、前記キャッシュ・イベントをトリガーしたアクセス動作を実行した前記第一のプロセッサのコアの識別子または前記キャッシュ・イベントをトリガーしたアクセス動作が実行された実行のスレッドの識別子のうちの少なくとも一つを含んでいてもよい。
実施例11ないし19のうちいずれか一項の主題を含む実施例20では、前記キャッシュ・イベントは、前記第一のプロセッサ・コンポーネントの第一のキャッシュまたは前記第二のプロセッサ・コンポーネントの第二のキャッシュの少なくとも一方に関わっていてもよく、前記キャッシュ・イベントは、所有権を求める読み出し(RFO)キャッシュ・イベントまたは修正版にヒット(HITM)キャッシュ・イベントの少なくとも一方を含んでいてもよい。
実施例21では、競合状態を検出するためのコンピュータ実装される方法が、プロセッサ・コンポーネントによって実行される少なくとも一つのアプリケーション・ルーチンによるデータ片へのアクセスの間の競合状態に関連するキャッシュ・イベントを検出する段階と、前記キャッシュ・イベントの複数の生起の選択された間隔で前記キャッシュ・イベントの生起に応答してモニタリング・データとして前記プロセッサ・コンポーネントの状態の指示を繰り返し捕捉する段階とを含んでいてもよい。
実施例21の主題を含む実施例22では、当該方法は、前記アプリケーション・ルーチンが現在、少なくとも部分的には前記プロセッサ・コンポーネントによって実行されているかどうかに基づいて、前記指示の捕捉を動的に有効にすることを含んでいてもよい。
実施例21ないし22のうちいずれか一項の主題を含む実施例23では、当該方法は、前記キャッシュ・イベントが前記アプリケーション・ルーチンの第一の部分の読み出し動作と前記アプリケーション・ルーチンの第二の部分の書き込み動作との間の競合状態から生じるのでないことに基づいて前記モニタリング・データから前記指示を除去して、前記モニタリング・データの前記プロセッサ・コンポーネントの状態の複数の指示の部分集合を含む低減されたデータを生成することを含んでいてもよい。
実施例21ないし23のうちいずれか一項の主題を含む実施例24では、当該方法は、前記第一の部分、前記第二の部分、前記第一の部分および前記第二の部分の一方を実行する前記プロセッサ・コンポーネントのコアまたは前記第一の部分および前記第二の部分の一方の実行のスレッドのうちの少なくとも一つの識別子に基づいて、前記キャッシュ・イベントが前記読み出し動作と前記書き込み動作との間の競合状態から生じるかどうかを判定することを含んでいてもよい。
実施例21ないし24のうちいずれか一項の主題を含む実施例25では、当該方法は、前記低減されたデータをネットワークを介してデバッグ装置に送信する段階を含んでいてもよい。
実施例21ないし25のうちいずれか一項の主題を含む実施例26では、前記競合状態は、前記データ片に書き込むための、第一の実行のスレッドにおいて前記プロセッサ・コンポーネントによって実行される前記アプリケーション・ルーチンの第一の書き込み動作と、前記データ片に書き込むための、第二の実行のスレッドにおいて前記プロセッサ・コンポーネントによって実行される別のアプリケーション・ルーチンの第二の書き込み動作との間の競合状態を含んでいてもよい。
実施例21ないし26のうちいずれか一項の主題を含む実施例27では、前記指示は、前記プロセッサ・コンポーネントのレジスタの内容、前記プロセッサ・コンポーネントの命令ポインタのアドレス、どんなアクセス動作が前記キャッシュ・イベントをトリガーしたかの指示、前記キャッシュ・イベントの型、前記キャッシュ・イベントをトリガーしたアクセス動作を実行した前記プロセッサのコアの識別子または前記キャッシュ・イベントをトリガーしたアクセス動作が実行された実行のスレッドの識別子のうちの少なくとも一つを含んでいてもよい。
実施例21ないし27のうちいずれか一項の主題を含む実施例28では、前記キャッシュ・イベントは、前記プロセッサ・コンポーネントのキャッシュに関わっていてもよく、所有権を求める読み出し(RFO)キャッシュ・イベントまたは修正版にヒット(HITM)キャッシュ・イベントの少なくとも一方を含んでいてもよい。
実施例21ないし28のうちいずれか一項の主題を含む実施例29では、当該方法は、前記キャッシュ・イベントの複数の生起の前記選択された間隔で前記キャッシュ・イベントの生起に応答して、別のモニタリング・データとして、別のプロセッサ・コンポーネントの状態の指示を捕捉することを含んでいてもよい。
実施例21ないし29のうちいずれか一項の主題を含む実施例30では、当該方法は、前記キャッシュ・イベントが前記アプリケーション・ルーチンの第一の部分による前記データ片への第一のアクセスと前記アプリケーション・ルーチンの第二の部分による前記データ片への第二のアクセスとの間の競合状態から生じるのでないことに基づいて前記別のモニタリング・データからの前記別のプロセッサ・コンポーネントの状態の指示を除去して、前記モニタリング・データの前記プロセッサ・コンポーネントの状態の複数の指示の部分集合および前記別のモニタリング・データの前記別のプロセッサ・コンポーネントの状態の複数の指示の部分集合を含む低減されたデータを生成することを含んでいてもよい。
実施例31では、少なくとも一つの機械可読記憶媒体が命令を含み、該命令は、プロセッサ・コンポーネントによって実行されたときに、前記プロセッサ・コンポーネント装置に、前記プロセッサ・コンポーネントによって実行される少なくとも一つのアプリケーション・ルーチンによるデータ片へのアクセスの間の競合状態に関連するキャッシュ・イベントを検出する段階と、前記キャッシュ・イベントの複数の生起の選択された間隔で前記キャッシュ・イベントの生起に応答してモニタリング・データとして前記プロセッサ・コンポーネントの状態の指示を繰り返し捕捉する段階とを実行させるものである。
実施例31の主題を含む実施例32では、前記プロセッサ・コンポーネントは、前記アプリケーション・ルーチンが現在、少なくとも部分的には前記プロセッサ・コンポーネントによって実行されているかどうかに基づいて、前記指示の捕捉を動的に有効にするようにされてもよい。
実施例31ないし32のうちいずれか一項の主題を含む実施例33では、前記プロセッサ・コンポーネントは、前記キャッシュ・イベントが前記アプリケーション・ルーチンの第一の部分の第一の書き込み動作と前記アプリケーション・ルーチンの第二の部分の第二の書き込み動作との間の競合状態から生じるのでないことに基づいて前記モニタリング・データから前記指示を除去して、前記モニタリング・データの前記プロセッサ・コンポーネントの状態の複数の指示の部分集合を含む低減されたデータを生成するようにされてもよい。
実施例31ないし33のうちいずれか一項の主題を含む実施例34では、前記プロセッサ・コンポーネントは、前記第一の部分、前記第二の部分、前記第一の部分および前記第二の部分の一方を実行する前記プロセッサ・コンポーネントのコアまたは前記第一の部分および前記第二の部分の一方の実行のスレッドのうちの少なくとも一つの識別子に基づいて、前記キャッシュ・イベントが前記第一の書き込み動作と前記第二の書き込み動作との間の競合状態から生じるかどうかを判定するようにされてもよい。
実施例31ないし34のうちいずれか一項の主題を含む実施例35では、前記プロセッサ・コンポーネントは、前記低減されたデータをネットワークを介してデバッグ装置に送信するようにされてもよい。
実施例31ないし35のうちいずれか一項の主題を含む実施例36では、前記競合状態は、前記データ片を読むための、第一の実行のスレッドにおいて前記プロセッサ・コンポーネントによって実行される前記アプリケーション・ルーチンの読み出し動作と、前記データ片に書き込むための、第二の実行のスレッドにおいて前記プロセッサ・コンポーネントによって実行される別のアプリケーション・ルーチンの書き込み動作との間の競合状態を含んでいてもよい。
実施例31ないし36のうちいずれか一項の主題を含む実施例37では、前記指示は、前記プロセッサ・コンポーネントのレジスタの内容、前記プロセッサ・コンポーネントの命令ポインタのアドレス、どんなアクセス動作が前記キャッシュ・イベントをトリガーしたかの指示、前記キャッシュ・イベントの型、前記キャッシュ・イベントをトリガーしたアクセス動作を実行した前記プロセッサのコアの識別子または前記キャッシュ・イベントをトリガーしたアクセス動作が実行された実行のスレッドの識別子のうちの少なくとも一つを含んでいてもよい。
実施例31ないし37のうちいずれか一項の主題を含む実施例38では、前記キャッシュ・イベントは、前記プロセッサ・コンポーネントのキャッシュに関わっていてもよく、所有権を求める読み出し(RFO)キャッシュ・イベントまたは修正版にヒット(HITM)キャッシュ・イベントの少なくとも一方を含んでいてもよい。
実施例31ないし38のうちいずれか一項の主題を含む実施例39では、前記プロセッサ・コンポーネントは、前記キャッシュ・イベントの複数の生起の前記選択された間隔で前記キャッシュ・イベントの生起に応答して、別のモニタリング・データとして、別のプロセッサ・コンポーネントの状態の指示を捕捉するようにされてもよい。
実施例31ないし39のうちいずれか一項の主題を含む実施例40では、前記プロセッサ・コンポーネントは、前記キャッシュ・イベントが前記アプリケーション・ルーチンの第一の部分による前記データ片への第一のアクセスと前記アプリケーション・ルーチンの第二の部分による前記データ片への第二のアクセスとの間の競合状態から生じるのでないことに基づいて前記別のモニタリング・データから前記別のプロセッサ・コンポーネントの状態の指示を除去して、前記モニタリング・データの前記プロセッサ・コンポーネントの状態の複数の指示の部分集合および前記別のモニタリング・データの前記別のプロセッサ・コンポーネントの状態の複数の指示の部分集合を含む低減されたデータを生成するようにされてもよい。
実施例41では、コマンドを受領する装置が、プロセッサ・コンポーネントによって実行される少なくとも一つのアプリケーション・ルーチンによるデータ片へのアクセスの間の競合状態に関連するキャッシュ・イベントを検出し、前記キャッシュ・イベントの複数の生起の選択された間隔で前記キャッシュ・イベントの生起に応答してモニタリング・データとして前記プロセッサ・コンポーネントの状態の指示を繰り返し捕捉する手段を含む。
実施例41の主題を含む実施例42では、当該装置は、前記アプリケーション・ルーチンが現在、少なくとも部分的には前記プロセッサ・コンポーネントによって実行されているかどうかに基づいて、前記指示の捕捉を動的に有効にする手段を含んでいてもよい。
実施例41ないし42のうちいずれか一項の主題を含む実施例43では、当該装置は、前記キャッシュ・イベントが前記アプリケーション・ルーチンの第一の部分の読み出し動作と前記アプリケーション・ルーチンの第二の部分の書き込み動作との間の競合状態から生じるのでないことに基づいて前記モニタリング・データから前記指示を除去して、前記モニタリング・データの前記プロセッサ・コンポーネントの状態の複数の指示の部分集合を含む低減されたデータを生成する手段を含んでいてもよい。
実施例41ないし43のうちいずれか一項の主題を含む実施例44では、当該装置は、前記第一の部分、前記第二の部分、前記第一の部分および前記第二の部分の一方を実行する前記プロセッサ・コンポーネントのコアまたは前記第一の部分および前記第二の部分の一方の実行のスレッドのうちの少なくとも一つの識別子に基づいて、前記キャッシュ・イベントが前記読み出し動作と前記書き込み動作との間の競合状態から生じるかどうかを判定する手段を含んでいてもよい。
実施例41ないし44のうちいずれか一項の主題を含む実施例45では、当該装置は、前記低減されたデータをネットワークを介してデバッグ装置に送信する手段を含んでいてもよい。
実施例41ないし45のうちいずれか一項の主題を含む実施例46では、前記競合状態は、前記データ片に書き込むための、第一の実行のスレッドにおいて前記プロセッサ・コンポーネントによって実行される前記アプリケーション・ルーチンの第一の書き込み動作と、前記データ片に書き込むための、第二の実行のスレッドにおいて前記プロセッサ・コンポーネントによって実行される別のアプリケーション・ルーチンの第二の書き込み動作との間の競合状態を含んでいてもよい。
実施例41ないし46のうちいずれか一項の主題を含む実施例47では、前記指示は、前記プロセッサ・コンポーネントのレジスタの内容、前記プロセッサ・コンポーネントの命令ポインタのアドレス、どんなアクセス動作が前記キャッシュ・イベントをトリガーしたかの指示、前記キャッシュ・イベントの型、前記キャッシュ・イベントをトリガーしたアクセス動作を実行した前記プロセッサのコアの識別子または前記キャッシュ・イベントをトリガーしたアクセス動作が実行された実行のスレッドの識別子のうちの少なくとも一つを含んでいてもよい。
実施例41ないし47のうちいずれか一項の主題を含む実施例48では、前記キャッシュ・イベントは、前記プロセッサ・コンポーネントのキャッシュに関わっていてもよく、所有権を求める読み出し(RFO)キャッシュ・イベントまたは修正版にヒット(HITM)キャッシュ・イベントの少なくとも一方を含んでいてもよい。
実施例41ないし48のうちいずれか一項の主題を含む実施例49では、当該装置は、前記キャッシュ・イベントの複数の生起の前記選択された間隔で前記キャッシュ・イベントの生起に応答して、別のモニタリング・データとして、別のプロセッサ・コンポーネントの状態の指示を捕捉する手段を含んでいてもよい。
実施例41ないし49のうちいずれか一項の主題を含む実施例50では、当該装置は、前記キャッシュ・イベントが前記アプリケーション・ルーチンの第一の部分による前記データ片への第一のアクセスと前記アプリケーション・ルーチンの第二の部分による前記データ片への第二のアクセスとの間の競合状態から生じるのでないことに基づいて前記別のモニタリング・データから前記別のプロセッサ・コンポーネントの状態の指示を除去して、前記モニタリング・データの前記プロセッサ・コンポーネントの状態の複数の指示の部分集合および前記別のモニタリング・データの前記別のプロセッサ・コンポーネントの状態の複数の指示の部分集合を含む低減されたデータを生成する手段を含んでいてもよい。
実施例51では、少なくとも一つの機械可読記憶媒体が命令を含み、該命令は、プロセッサ・コンポーネントによって実行されたときに、前記プロセッサ・コンポーネント装置に、上記のうちのいずれかを実行させるものである。
実施例52では、競合状態を検出する装置が上記のうちのいずれかを実行する手段を含んでいてもよい。