(57)【特許請求の範囲】
【請求項１】
一の対応するキャッシュラインに関連するコヒーレンシー情報を格納するコヒーレンシー状態フィールドと、状態遷移中にモニタされる前記キャッシュラインであるかどうかを示す、１つ以上のモニタビットフィールドを含むキャッシュメモリと、
前記コヒーレンシー状態フィールド内に、前記１つ以上のモニタビットフィールドが設定されている場合、前記コヒーレンシー情報への状態遷移が発生するかどうかを検出するための検出手段と、
を備えるスレッド間同期通信のための装置。
【請求項２】
複数の命令を格納するメモリを有し、第１の命令はモニタビットを設定する命令であり、第２の命令は、前記モニタビットをクリアする命令であり、第３の命令は、検出手段に検出させる命令である、請求項１に記載のスレッド間同期通信のための装置。
【請求項３】
前記第１の命令および前記第２の命令は同じ命令である、請求項２に記載のスレッド間同期通信のための装置。
【請求項４】
前記状態遷移は、一の割込み機構、または、ユーザレベル割込み機構により一の通知を生じる、請求項１に記載のスレッド間同期通信のための装置。
【請求項５】
前記ユーザレベル割込み機構は、前記スレッドにより示される、実行されるべき一の命令を生じる、請求項４に記載のスレッド間同期通信のための装置。
【請求項６】
前記状態遷移が、スレッドによるキャッシュラインへの書き込みが実行されたことを示す、請求項１に記載のスレッド間同期通信のための装置。
【請求項７】
前記検出手段は、データが前記キャッシュラインに書き込まれるべきことを示す前記コヒーレンシー状態フィールドにおける遷移を検出する、請求項１に記載のスレッド間同期通信のための装置。
【請求項８】
前記コヒーレンシー状態フィールドにおける前記遷移は、一の共有状態から一の無効状態への一の遷移を含む、請求項７に記載のスレッド間同期通信のための装置。
【請求項９】
モニタビットセットを有するキャッシュラインに書き込まれたデータが、モニタビットを設定しているスレッドに送られ、前記データがモニタビットを設定していないスレッドに送られない、請求項１に記載のスレッド間同期通信のための装置。
【請求項１０】
一のキャッシュラインに関連するコヒーレンシー情報を格納するコヒーレンシー状態フィールドと、対応するキャッシュラインに状態変化するためにモニタされる前記キャッシュラインであるかどうかを示す、複数のモニタビットフィールドとを含むキャッシュメモリと、
前記複数のモニタビットフィールド内にビットを設定する第１の命令と、発生するコヒーレンシー状態フィールドにおいて、前記コヒーレンシー情報への状態遷移を検出するための検出ロジックをイネーブルにするための第３の命令とを格納するための第１のメモリと、を含むスレッド間同期通信のためのシステム。
【請求項１１】
レシーバスレッドを実行する一のプロセッサをさらに含み、前記レシーバスレッドは、前記検出ロジックが、前記キャッシュラインにデータが書き込まれており、前記レシーバスレッドに対応する一のモニタビットが前記複数のモニタビットフィールド内に設定されていることを検出する場合、前記キャッシュラインから前記データを読み出す、請求項１０に記載のスレッド間同期通信のためのシステム。
【請求項１２】
前記第１のメモリは、前記複数のモニタビットフィールドの少なくともいくつかをクリアする一の第２の命令を含む、請求項１１に記載のスレッド間同期通信のためのシステム。
【請求項１３】
前記第１のメモリは、前記データが送信スレッドごとに前記キャッシュラインに書き込まれているかどうかを前記検出ロジックに検出させる複数の命令を格納し、該複数の命令、および、前記第３の命令のそれぞれは、一の関連する優先レベルを有する、請求項１１に記載のスレッド間同期通信のためのシステム。
【請求項１４】
前記検出ロジックは、一のシナリオを検出する情報によりプログラムされる一の状態チャネルを含む、請求項１３に記載のスレッド間同期通信のためのシステム。
【請求項１５】
前記状態遷移は、一の割込み機構、または、ユーザレベル割込み機構により一の通知を生じる、請求項１０に記載のスレッド間同期通信のためのシステム。
【請求項１６】
前記ユーザレベル割込み機構は、前記スレッドにより示される、実行されるべき一の命令を生じる、請求項１５に記載のスレッド間同期通信のためのシステム。
【請求項１７】
前記検出ロジックは、前記キャッシュラインに書き込まれたデータに応じ、一の例外、一のフォルト、一のトラップ、一の割込みからなる一のグループのうちの１つを検出する一のロジックを含む、請求項１０に記載のスレッド間同期通信のためのシステム。
【請求項１８】
設定された前記ビットを有する前記キャッシュラインに書き込まれたデータが、モニタビットを設定するスレッドに送られ、前記データがモニタビットに設定されないスレッドに送られない請求項１０に記載のスレッド間同期通信のためのシステム。
【請求項１９】
プロセッサが、
一の遷移スレッド内の一の命令ごとに、キャッシュラインに書き込まれるデータに関してモニタする前記キャッシュラインをイネーブルにし、
前記キャッシュラインに対応する前記データの修正を命令する前記キャッシュラインに関して、コヒーレンシー情報への状態遷移を検出し、
前記状態遷移を検出することに応じて、データを受信スレッドに送るスレッド間同期通信のための方法。
【請求項２０】
前記キャッシュラインがモニタされるようにすることは、前記キャッシュラインに対応する一のモニタリングビットフィールド内の少なくとも１つのモニタリングビットを設定する一の命令を実行することを含む、請求項１９に記載のスレッド間同期通信のための方法。
【請求項２１】
前記キャッシュラインに書き込まれたデータの検出を可能にすることは、前記モニタされるべき前記キャッシュラインに対応するシナリオを検出する状態チャネルロジックをプログラムする命令を実行することを含む、請求項２０に記載のスレッド間同期通信のための方法。
【請求項２２】
前記キャッシュラインに書き込まれたデータの検出を可能にすることは、一の例外、一のフォルト、一のトラップ、一の割込みからなる一のグループから選ばれる、前記キャッシュラインに書き込まれる前記データに応じてアサートされる一の信号を検出ロジックに検出させることを含む、請求項２１に記載のスレッド間同期通信のための方法。
【請求項２３】
前記キャッシュラインに書き込まれた前記データを検出することは、前記キャッシュラインの第１の状態から第２の状態への一のコヒーレンシー状態遷移を検出することを含む、請求項２１に記載のスレッド間同期通信のための方法。
【請求項２４】
前記第１の状態は、共有状態であり、前記第２の状態は、一の無効状態である、請求項２３に記載のスレッド間同期通信のための方法。
【請求項２５】
前記シナリオは、前記キャッシュラインがモニタされるべきかどうかを検出することを含み、もしモニタされるべきであれば、前記キャッシュラインに関して一の第１の状態から一の無効状態への一のコヒーレンシー状態遷移が生じているかどうかを検出することを含む、請求項２１に記載のスレッド間同期通信のための方法。
【請求項２６】
状態チャネルロジックをプログラムする前記命令は、状態チャネルロジックをプログラムする複数の命令の１つであり、前記複数の命令のそれぞれは、前記キャッシュラインがモニタされる１つ以上のスレッド内の一の異なるインスタンスに対応する、請求項２５に記載のスレッド間同期通信のための方法。
【請求項２７】
前記複数の命令のそれぞれは、該複数の命令が実行されるべき順序を制御する一の固有の優先順位を有する、請求項２６に記載のスレッド間同期通信のための方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明の実施形態は、マイクロプロセッサアーキテクチャに関する。より詳しくは、本発明の実施形態は、１つ以上のマイクロプロセッサまたはマイクロプロセッサコア内で実行される２つ以上のスレッド間の同期通信を管理することに関する。
【背景技術】
【０００２】
最新のコンピュータプログラムにおける命令は、様々な命令列あるいは"スレッド"に従う実行に対し体系化されている。一般的には、処理リソース内で実行している命令のスレッドは、特定のスレッドに固有のあるいは特定のスレッドに関連した一組の状態情報を用い、かつ／または、生成する。しかしながら、スレッドは、状態情報、あるいは、ケース情報が１つのスレッドから他のスレッドへと伝達される必要がある、１つ以上のスレッドごとに対し実行されるべきデータのような、他の情報を共有する場合もある。
【０００３】
典型的な共有メモリマイクロプロセッサまたは処理システムでは、スレッドは、他のスレッド（情報スレッド）により読み取られることができる、１つのメモリ位置に情報を格納するスレッド（送信スレッド）ごとに情報を交換する。一般的に、受信スレッドは、送信スレッドがデータをアップデートしたときを検出すべく、様々な時間にメモリ位置をポーリングしてよい。いくつかの従来技術の実施態様において、検出機構は、共有情報が書き込まれたときを検出でき、それに応じて受信スレッドを変更できる。
【０００４】
後者のケースにおいて、検出機構は、メモリ位置に共有情報が書き込まれたときを検出して受信スレッドを変更するが、ここで、いくつかの従来技術は、マイクロプロセッサ間、または、マイクロプロセッサとＤＲＡＭなどのメモリとの間の相互接続をモニタまたは「スヌープ」する特別なハードウェア検出ロジックを用いている。検出ロジックは、モニタされるべき各メモリ位置に対する検出ロジックを要求し得る、相互接続を通じて伝送される特別なアドレスに対するコマンドをモニタするよう設定され得る。
【０００５】
上記のような従来技術は、ダイ面積および電力などの面から高価になってしまう。さらに、これらの従来技術は、複数のメモリ位置へのアップデートをモニタリングする場合に容易に基準化できず、結果としてソフトウェア開発の課題を招く。
【０００６】
割込みあるいは例外ケースを通知すべく、従来のようにオペレーティングシステムを介在させずに、マイクロプロセッサ上で動作するユーザレベルのスレッドにイベントを直接知らせる機構を含む従来技術がある。このようなユーザレベルの割込みまたはユーザレベルの例外は、スレッドの現在の状態についての十分な情報をセーブし、イベントに応じる"ハンドラ"コードの予め決められたブロックを実行するようスレッドを切り替える機構を有することに基づいている。ハンドラコードの一環として、スレッドは、所望のいかなるタスクも実行し、イベントの前にそれがあった実行経路へと戻すことができる。また、実行経路へは戻さず、代わりに、完全に異なるタスクのセットを継続することを選ぶこともできる。
【図面の簡単な説明】
【０００７】
添付の図面における例を用いて本発明の実施形態を示すが、これらに限定されない。同様の参照符号は、同様の構成要素を示す。
【０００８】
【図１】本発明の少なくとも１つの実施形態と関連して用いられることができる処理システムの一部を示す。
【０００９】
【図２】本発明の一実施形態に従い用いられることができるキャッシュエントリと対応するコヒーレンシー、および、モニタリングエントリを示す。
【００１０】
【図３】一実施形態に従うキャッシュラインへのスレッドにより生じた書き込みを示し得るコヒーレンシー状態遷移の検出に関わる動作を示すフローチャートである。
【００１１】
【図４】本発明の一実施形態が用いられ得るフロントサイドバス（ＦＳＢ）コンピュータシステムを示す。
【００１２】
【図５】ポイントツーポイント（ＰｔＰ）構成で配置されたコンピュータシステムを示す。
【発明を実施するための最良の形態】
【００１３】
本発明の実施形態は、マイクロプロセッサアーキテクチャに関する。より詳しくは、本発明の実施形態は、１つ以上のマイクロプロセッサまたはマイクロプロセッサコアにより実行される命令の２つ以上のスレッド間の同期通信を管理することに関する。本発明の少なくとも１つの実施形態は、他のスレッドがそれらのメモリ位置に格納している値を修正した場合に通知されるべき一組のメモリ位置を識別するための機構をスレッドに提供する。一実施形態では、通知は、マイクロプロセッサ内のユーザレベル割込み／例外機構によりなされるか、または、コンピュータシステム内のいくらかの他のロジックまたはソフトウェアによりなされてよい。一実施形態では、スレッド間同期通信は、１つ以上の他のスレッドによりアクセスされるキャッシュラインに関連する特定のキャッシュコヒーレンシーイベントをスレッドが通知されるようにすることにより実現する。
【００１４】
いくつかの従来技術のスレッド間通信技術とは異なり、本発明の実施形態は、送信スレッドごとに書き込まれる特定のメモリ位置をモニタする特別な検出ハードウェアを用いる代わりに、プロセッサまたはコンピュータシステム内の多くの既存のリソースを用いることができる。特に、少なくとも１つの実施形態は、ＤＲＡＭなどのメモリ内の位置に対応するキャッシュラインに情報が書き込まれたときを検出すべく、１つのキャッシュライン内にすでに存在し得るコヒーレンシー情報を用いる。特に、ラインに対応するデータ値のローカル読み取りを許容する状態（"共有"状態など）に現在あるキャッシュラインは、ラインに対応するあらゆるデータ値を修正する他のスレッドより前に、それに対してコヒーレント動作が実行されていなければならない。
【００１５】
いくつかの従来技術のスレッド間通信技術とは異なり、本発明の実施形態は、他のスレッドによりモニタされるべきメモリ位置への多くの固有のアップデートを可能にする。特に、少なくとも１つの実施形態は、モニタされている１つ以上の位置が他のスレッドによりすでにアップデートされているかどうかを示す共通のレポート機構を用いる。
【００１６】
本発明の一実施形態は、キャッシュライン状態遷移を検出するだけの最小限の検出ロジックを用いてキャッシュライン状態遷移を検出し、受信スレッドがキャッシュラインに書き込まれた情報を検索できるよう、ユーザレベル割込み機構を用いる受信スレッドに通知することができる。他の実施形態では、キャッシュライン状態遷移の検出は、モニタリングイベント、または、"シナリオ"としてプロセッサの状態チャネルにプログラムされることができる。さらに、他の実施形態では、キャッシュライン状態遷移の検出は、割込み、例外、トラップ、フォルトなどのハードウェア機構に応じて生じ得る。
【００１７】
一実施形態では、１つのキャッシュラインまたは複数のキャッシュラインは、キャッシュライン内またはキャッシュラインに関連する１つ以上のモニタリングビットを含むことによりモニタされるキャッシュとしてイネーブルに、または、"マーク"される。モニタリングビットを設定すべく、少なくとも１つの実施形態では、コマンド、命令、または、いくつかの他の手段を用いることもある。さらに、ユーザコードの特定の部分がそのコードの他の部分とは無関係にモニタされるキャッシュラインを構成するよう、多数のモニタリングビットが用いられてよい。モニタリングビットは、キャッシュライン状態がコマンド、命令、または、いくつかの他の手段をクリアにすることにより検出された後にクリアされてよい。
【００１８】
図１は、本発明の少なくとも１つの実施形態と関連して用いられることができる処理システムの一部を示す。特に、図１は、プロセッサ／コア１０１またはいくつかの他の処理リソース(図示せず)内で実行する命令の１つ以上のスレッドで共有され得るキャッシュメモリ１０５と関連付けられたプロセッサまたは処理コア１０１を示す。本発明の一実施形態では、キャッシュメモリ１０５は、一のスレッドが、キャッシュラインを用いている可能性のある他のスレッドを見ずに一のキャッシュライン内の情報を格納できるよう、当該スレッドだけに用いられるものとして当該スレッドの前に現れる。
【００１９】
同じく図１にはメモリ１１０が示されている。メモリ１１０は、ＤＲＡＭ、あるいは、ＳＲＡＭ、磁気またはコンパクトディスクなどのいくつかの他のメモリ技術からなる。一実施形態においては、キャッシュメモリ１０５は、メモリ１１０のエントリのサブセットを反映しているエントリを含む。したがって、キャッシュメモリは、特定のキャッシュライン（例えば図１のキャッシュライン"Ａ")が無効データ（"Ｉ"状態）を含む場合、あるいは、対応するメモリエントリ（例えば図１のメモリエントリ"Ａ"）と同じデータを含まないよう、キャッシュラインが修正されている場合（"Ｍ"状態）、キャッシュラインが様々なエージェント、スレッド、または、プログラム間で共有できる場合（"Ｓ"状態）、および、キャッシュラインが特定のスレッド、エージェント、または、プログラムだけに用いられる場合（"Ｅ"状態）に、キャッシュメモリからのデータにアクセスするエージェントに知らせるコヒーレンシー情報を含み得る。
【００２０】
図２は、本発明の一実施形態に従い用いられることができるキャッシュエントリおよび対応するコヒーレンシーと、モニタリングエントリとを示す。特に、キャッシュ２００のキャッシュライン２０１は、フィールド２０３におけるキャッシュライン２０３、フィールド２０５におけるアドレスタグおよびコヒーレンシー情報、および、フィールド２０７におけるモニタ情報に対応するデータを格納してよい。キャッシュラインへの状態変化をモニタできるようにすべく、モニタ情報フィールド内に１つ以上のビットが設定される。さらに、１つのキャッシュが多数のハードウェアスレッド（例えばそれぞれ個別に動作するソフトウェアスレッド）により共有されるのであれば、各スレッドは、１つのスレッド内の多数のインスタンスがキャッシュラインをどのようにモニタしているかに基づき、モニタ情報フィールド内の複数のビットに対応し得る。
【００２１】
例えば、図２では、"ａ"と表示されたモニタビットは、対応するキャッシュラインがモニタされるスレッド内に３つだけのインスタンス（繰り返されてもよい）を有する第１のスレッドに対応する。"ｂ"と表示されたモニタビットは、対応するキャッシュラインがモニタされる２つのインスタンス（繰り返されてもよい）を有する第２のスレッドに対応する。"ｄ"と表示されたモニタビットは、対応するキャッシュラインがモニタされるスレッド内に１つだけのインスタンス（繰り返されてもよい）を有する第３のスレッドに対応する。したがって、対応するキャッシュラインがモニタされる各スレッド内の各インスタンスに対応する各ビットは、別々に設定またはクリアされ得る。
【００２２】
キャッシュラインに存在するモニタビットフィールドの数が多くなるほど、キャッシュラインを同時にモニタできるスレッドおよびスレッド内のインスタンスの数も当然多くなる。一実施形態では、キャッシュラインは６つのモニタビットフィールドを含むことにより、２つのスレッドが各スレッド内の３つの異なるインスタンスで１つのキャッシュラインをモニタすることができるようになる。他の実施形態では、より多いまたは少ないスレッドまたはスレッド内のインスタンスでキャッシュラインをモニタできるよう、より多いまたは少ないビットフィールドが用いられ得る。
【００２３】
一実施形態では、キャッシュを共有する１つのスレッドにより実行されるメモリのアップデートは、キャッシュを共有しない他のスレッドからのコヒーレンシーイベントと同じ扱いを受ける、同じキャッシュを共有する他のスレッドに関連して処理される。例えば、スレッドがキャッシュライン内に格納された値をアップデートすると、設定されたモニタビットを有する他のスレッドは、このアップデートと、ユーザレベル割込み機構などの割込み機構により通知される対応するスレッドとを検出し得る。他の実施形態では、割込み機構は、ユーザに見えない割込み機構であってよい。
【００２４】
一実施形態では、２つの別々のコマンドまたは命令がキャッシュメモリ内のプロセッサまたはロジック内で実行されることにより、モニタビットの設定およびクリアがそれぞれ行われる。例えば、一実施形態では、キャッシュラインに対応するアドレスと、モニタビットに属性として書き込まれる対応データとを有する"ロードモニタ"命令が実行され得る。同様に、一実施形態では、キャッシュラインに対応するアドレスと、モニタビットをクリアすべく属性として書き込まれる対応データとを有する「クリアモニタ」命令が実行され得る。一実施形態では、命令のモニタビット属性の値に基づき、モニタビットを設定しかつクリアすべく１つの命令が用いられる。さらに他の実施形態では、それぞれのキャッシュラインにおける特定の属性すべてをクリアすべく１つの命令が用いられる。
【００２５】
（例えば一実施形態では、対応するモニタリングビットを設定することにより）モニタされるようフラグが立てられているキャッシュラインの状態遷移を検出する方法は多くの方法を実現する。例えば、一実施形態では、キャッシュラインがその対応する設定されたモニタビットのいずれかを有するかどうかを検出するためにブールの"ＯＲ"関数（例えば"ＯＲ"ゲート）を実行するなどのロジックが用いられてよく、もしその場合は、他のスレッドによる書き込みがそのキャッシュラインに対しすでになされていることを示すべく、キャッシュラインのコヒーレンシービット（図１で"Ｃ"と表示されている）内に状態遷移があるかどうかが検出される。一実施形態では、Ｉ状態への対応データのローカル読み取りを許容する任意の状態からの状態遷移は、スレッドが対応するキャッシュラインに情報をすでに書き込んでいること、あるいは、書き込もうとしていることを示してよい。さらに、キャッシュを共有する他のスレッドによるキャッシュラインへの書き込みは、アップデートとして検出されることもできる。
【００２６】
他の実施形態では、キャッシュラインのコヒーレンシー状態遷移が、割込み、例外、フォルト、トラップ、あるいは、処理ハードウェア内の他のシグナリング機構を誘発することにより、スレッドがキャッシュラインにすでに情報を書き込んでいることが示される。他の実施形態では、他の機構が用いられることにより、スレッドが特定のキャッシュラインにすでにデータを書き込んでいることが示すコヒーレンシー状態遷移が示される。
【００２７】
スレッド単位でイベントがモニタされる一実施形態では、そこにすでに書き込まれているデータを示し得るキャッシュラインのコヒーレンシー状態情報の遷移を検出すべく、"シナリオ"として知られるイベントの論理結合が定義され得る。この場合、"チャネル"として知られるプロセッサ状態記憶領域は、キャッシュラインにおけるコヒーレンシー状態遷移を検出すべく、上述のハードウェアおよび／またはソフトウェアと実質的に同じ論理関数を実行するようプログラムされ得る。このようなシナリオの発生は、シナリオを処理する歩留まりイベントハンドラを起動し得る、フォルト、あるいは、トラップのような歩留まりなどの弱い歩留まりイベントを誘発することもある。
【００２８】
一実施形態では、モニタされたラインがすでに修正されている、あるいは、すぐに修正され得ることを示すイベントをスレッドに通知する機構は、任意のモニタビットセットにプログラムされ得るマスクを有することができる。例えば、一実施形態では、チャネルは、チャネルマスクとチャネルに書き込まれるべきプログラミングビットとの間で論理積演算などのブール演算を実行することによりプログラムされる。一実施形態では、この機構は、ユーザレベル割込み機構であり、一方、他の実施形態では、ユーザには見えない割込み機構である。一実施形態では、モニタされたラインがすでに修正されているか、または、すぐに修正される可能性があることを示すイベントをスレッドに通知する機構もハードウェアに切り替えられるコンテキストであるソフトウェアスレッドのような他のイベントに応じてソフトウェアスレッドに通知することができる。
【００２９】
モニタされたラインのアップデートの見込みをどのように検出するかに関わらず、スレッドが特定のキャッシュラインにすでに書き込まれているか、または、書き込まれる予定があることを示す場合、このような状態遷移の検出により、検出を処理すべくハンドラが起動される。ハンドラにより実行できる可能性のある１つのタスクは、他のスレッドが関心の値を有するメモリ位置をアップデートしているかどうか、また、特定のソフトウェア関数を起動するなど、適切な動作を実行できる関心の値にメモリ位置がアップデートされているかどうかを確かめるべく、モニタされる１つのアドレスまたは一組のアドレスを読み取ることである。
【００３０】
図３は、本発明に従う、スレッドによるキャッシュラインへの書き込みが生じていることを示し得るコヒーレンシー状態遷移の検出中に起動される動作を示すフローチャートである。動作３０１において、キャッシュラインは、キャッシュラインがモニタされる各スレッド内のインスタンス数と等しいモニタリングビット数を設定することにより、１つ以上のスレッドによってモニタされることができるようになる。一実施形態では、キャッシュラインは、設定されるモニタビットに対応する属性を有する命令（例えば"ロードモニタ"命令）を実行することによりイネーブルにされる。動作３０５では、スレッドがモニタされるキャッシュラインに情報を書き込むことにより、コヒーレンシー状態遷移を生じ、その後動作３１０において、キャッシュラインに書き込まれた情報を検索するようハンドラが起動されることにより、情報は、モニタリング（レシーバ）スレッドへと供給される。
【００３１】
一実施形態では、コヒーレンシー状態遷移は、モニタビットが設定されているかどうかを検出し、もし設定されていれば、コヒーレンシー状態遷移が起きていることを検出するロジックを用いて検出される。他の実施形態では、コヒーレンシー状態遷移は、ソフトウェア、ハードウェア、あるいは、それらのいくつかの組み合わせにより検出され得る。さらに、少なくとも１つの実施形態では、コヒーレンシー状態遷移は、シナリオをプロセッサ状態チャネルにプログラミングすることにより検出され、ユーザレベル割込み機構により受信スレッドに報告される。
【００３２】
動作３１５において、検出されたコヒーレンシー状態遷移に対応するモニタビットは、クリアされ、他のスレッド、または、同じスレッド内のモニタリングインスタンスにより選択的にリセットされる。一実施形態では、モニタビットは、クリアされたモニタビットに対応する属性を有するモニタビットを設定する命令とは異なる命令（例えば"クリアモニタ"命令）を実行することによりクリアされてよい。他の実施形態では、クリアされたモニタビットに対応する属性を用いることにより、モニタビットを設定する目的で使用されたモニタビットをクリアするために同じ命令（例えば"ロードモニタ"命令）が用いられてよい。
【００３３】
一実施形態では、ソフトウェアがモニタ変数およびそれに応じて起きる動作を特定することができるユーザのソフトウェアプログラムにインターフェースが提供される。一実施形態では、ユーザのソフトウェアプログラムは、特定のメモリ変数、特定のメモリ変数の値を評価するために特定の比較法則、および、メモリ変数の値が評価基準を満たす条件を誘発する任意の引数を有する関数ポインタを提供し得る。このような実施形態では、ソフトウェアは、１つの命令などの１つの手段を通じて、あるいは、複数の命令セットを通じて当該情報を特定できる。
【００３４】
また、ユーザソフトウェアは、それぞれが固有のあるいは共通の応答動作に対応する複数のモニタ変数を特定することができる。１つおよび／または複数の変数がモニタされる間に、スレッドは他の関数を引き続き実行できる。モニタされた変数の発生に応じて起動された関数は、スレッドが実行し続けるよう、スレッドに制御を戻すことができ、その結果、スケーラブルでフレキシブルなインターフェースが提供される。
【００３５】
一実施形態では、上記のようなインターフェースは、各変数、変数の比較法則、および、起動されるべき動作または関数とその引数を記述する情報を含む。一実施形態では、この情報は、メインコンピュータシステムのメモリ（例えばＤＲＡＭ）などの記憶領域内のテーブルに格納される。ソフトウェア、ファームウェア、または、ハードウェアは、適当な時間にこのテーブルを読み取り、各エントリに対する特定の変数を読み取り、動作を起動すべきかどうかを決定すべく比較法則を実行してよい。
【００３６】
さらに、モニタされるべきキャッシュラインにおけるマークラインより前に記述されている機構は、モニタされるべき変数に対応する各ラインをマークするために用いられることができる。ラインが他のスレッドによって今修正されてよいことを示すイベントがモニタされたラインで検出される場合、適切なソフトウェア、ファームウェア、または、ハードウェアは、テーブルにおけるすべてのモニタされた変数を評価すべく上記のように起動さることができる。それらの基準を満たす変数がない場合、ソフトウェア、ファームウェア、または、ハードウェアは、すべての適切なラインはまだモニタされている最中であることを確認し、その起動の前に実行される作業へと戻す。
【００３７】
変数のテーブルを評価し、適切な関数を起動するソフトウェア、ファームウェア、または、ハードウェアは、スレッドメモリスタックを操作することができるので、その基準を満たす変数に応じて関数が実行される場合、その関数は、前の実行タスクに直接戻ることが出来る。あるいは、ソフトウェア、ファームウェア、または、ハードウェアは、スタックを処理することが出来るので、前の実行タスクに最終的に戻る前に、変数に対応するすべてのキャッシュラインが適切にモニタされていることを確認すべく、ある特別なコードに戻ることになる。さらなる他の変形例は、その基準を満たす変数に応じて起動される関数が用いられる特別なリターン命令を有することである。この特別なリターン命令は、前の実行タスクに最終的に戻る前に、変数に対応するすべてのキャッシュが適切にモニタされていることを確認する。
【００３８】
図４は、本発明の一実施形態が用いられ得るフロントサイドバス（ＦＳＢ）コンピュータシステムを示す。プロセッサ５０５は、レベルワン（Ｌ１）キャッシュメモリ５１０およびメインメモリ５１５からデータにアクセスする。本発明の他の実施形態では、キャッシュメモリは、レベルツー（Ｌ２）キャッシュであるか、または、コンピュータシステムメモリ階層内の他のメモリであってよい。さらにいくつかの実施形態では、図４のコンピュータシステムは、Ｌ１キャッシュおよびＬ２キャッシュのどちらも含み得る。
【００３９】
図４のプロセッサ内には、マシンステートの記憶領域５０６が示されている。一実施形態では、記憶領域は、一組のレジスタであってよく、一方、他の実施形態では、他のメモリ構造であってよい。図４には、一実施形態に従う保存領域セグメントの記憶領域５０７も示されている。他の実施形態では、保存領域セグメントは、他のデバイスまたはメモリ構造内にあってもよい。プロセッサは、任意の数の処理コアを有し得る。しかしながら、本発明の他の実施形態は、独立したバスエージェントなどのシステム内の他のデバイス内で実現されるか、あるいは、ハードウェア、ソフトウェア、または、それらのいくつかの組み合わせの状態でシステム全体に分散されてもよい。
【００４０】
メインメモリは、ダイナミックランダムアクセスメモリ（ＤＲＡＭ）、ハードディスクドライブ（ＨＤＤ）５２０、または、様々な記憶デバイスおよび技術を含むネットワークインターフェース５３０を介しコンピュータシステムから離れて配置されたメモリソースなどの様々なメモリソース内で実現されてよい。キャッシュメモリは、プロセッサ内、または、プロセッサのローカルバス５０７の上など、プロセッサに近接して配置されてよい。
【００４１】
さらに、キャッシュメモリは、６トランジスタ（６Ｔ）型セルなど比較的速いメモリセル、または、ほぼ同じかより早いアクセス速度を有する他のメモリセルを含んでよい。図４のコンピュータシステムは、ポイントツーポイント（ＰｔＰ）ネットワークにおける各エージェント専用のバス信号を介し通信するマイクロプロセッサのようなバスエージェントのＰｔＰネットワークであってよい。図５は、ポイントツーポイント（ＰｔＰ）構成で配置されるコンピュータシステムを示す。特に、図５は、プロセッサ、メモリ、および、入出力デバイスが多数のポイントツーポイントインターフェースにより相互接続されているシステムを示す。
【００４２】
図５のシステムは、いくつかのプロセッサを含み、説明を明確にすべく、その中の２つであるプロセッサ６７０、６８０のみが示されている。プロセッサ６７０、６８０は、メモリ２２、２４と接続されるローカルメモリコントローラハブ（ＭＣＨ）６７２、６８２をそれぞれ含む。プロセッサ６７０、６８０は、ＰｔＰインターフェース回路６７８および６８８を用い、ポイントツーポイント（ＰｔＰ）インターフェース６５０を介しデータを交換する。プロセッサ６７０、６８０は、ポイントインターフェース回路６７６、６９４、６８６、６９８を用い、個別のＰｔＰインターフェース６５２、６５４を介しチップセット６９０とデータをそれぞれ交換してよい。同じくチップセット６９０は、高性能グラフィックインターフェース６３９を介し高性能グラフィック回路６３８とデータを交換してよい。本発明の実施形態は、任意の数のプロセッサコアを有するいかなるプロセッサ内、あるいは、図５のＰｔＰバスエージェントのそれぞれの中に配置されてよい。
【００４３】
しかしながら、図５のシステム内の他の回路、論理演算装置、または、デバイス内に本発明の他の実施形態が存在してよい。さらに、図５に示されるいくつかの回路、論理演算装置、または、デバイス全体に本発明の他の実施形態が分散されてよい。
【００４４】
本発明の実施形態の様々な側面は、相補型ＭＯＳ回路および論理演算装置（ハードウェア）を用いて実現することができ、一方、本発明の他の側面は、プロセッサにより実行されると、プロセッサに本発明の複数の実施形態を実行させる方法を実施させる、機械可読媒体に格納される命令を用いて実現することができる。さらに、本発明のいくつかの実施形態は、ハードウェアでのみ実行されてよく、一方、他の実施形態は、ソフトウェアでのみ実行されてよい。
【００４５】
これまで例示の実施形態を参照して本発明を説明してきたが、説明は、限定的な意味合いで解釈されることを意図しない。例示的な実施形態はもとより、他の実施形態の様々な変更が本発明の趣旨および範囲内に存在するであろうことは当業者にとり明らかである。
【図１】
0005449472.tif 000002
【図２】
0005449472.tif 000003
【図３】
0005449472.tif 000004
【図４】
0005449472.tif 000005
【図５】
0005449472.tif 000006