説明

スレッド間同期通信のための装置、システム、および、その方法

【課題】1つ以上のマルチプロセッサまたはマルチプロセッサコアにより実行されている2つ以上の命令スレッド間の同期通信を管理する。
【解決手段】他のスレッドがそれらのメモリ位置に格納している値を修正した場合に通知されるべき一組のメモリ位置を識別するための機構をスレッドに提供する。通知は、マイクロプロセッサ101内のユーザレベル割込み/例外機構によりなされるか、または、コンピュータシステム内のいくらかの他のロジックまたはソフトウェアによりなされてよい。スレッド間同期通信は、1つ以上の他のスレッドによりアクセスされるキャッシュラインに関連する特定のキャッシュコヒーレンシーイベントをスレッドが通知されるようにすることにより実現する。

【発明の詳細な説明】
【技術分野】
【0001】
本発明の実施形態は、マイクロプロセッサアーキテクチャに関する。より詳しくは、本発明の実施形態は、1つ以上のマイクロプロセッサまたはマイクロプロセッサコア内で実行される2つ以上のスレッド間の同期通信を管理することに関する。
【背景技術】
【0002】
最新のコンピュータプログラムにおける命令は、様々な命令列あるいは"スレッド"に従う実行に対し体系化されている。一般的には、処理リソース内で実行している命令のスレッドは、特定のスレッドに固有のあるいは特定のスレッドに関連した一組の状態情報を用い、かつ/または、生成する。しかしながら、スレッドは、状態情報、あるいは、ケース情報が1つのスレッドから他のスレッドへと伝達される必要がある、1つ以上のスレッドごとに対し実行されるべきデータのような、他の情報を共有する場合もある。
【0003】
典型的な共有メモリマイクロプロセッサまたは処理システムでは、スレッドは、他のスレッド(情報スレッド)により読み取られることができる、1つのメモリ位置に情報を格納するスレッド(送信スレッド)ごとに情報を交換する。一般的に、受信スレッドは、送信スレッドがデータをアップデートしたときを検出すべく、様々な時間にメモリ位置をポーリングしてよい。いくつかの従来技術の実施態様において、検出機構は、共有情報が書き込まれたときを検出でき、それに応じて受信スレッドを変更できる。
【0004】
後者のケースにおいて、検出機構は、メモリ位置に共有情報が書き込まれたときを検出して受信スレッドを変更するが、ここで、いくつかの従来技術は、マイクロプロセッサ間、または、マイクロプロセッサとDRAMなどのメモリとの間の相互接続をモニタまたは「スヌープ」する特別なハードウェア検出ロジックを用いている。検出ロジックは、モニタされるべき各メモリ位置に対する検出ロジックを要求し得る、相互接続を通じて伝送される特別なアドレスに対するコマンドをモニタするよう設定され得る。
【0005】
上記のような従来技術は、ダイ面積および電力などの面から高価になってしまう。さらに、これらの従来技術は、複数のメモリ位置へのアップデートをモニタリングする場合に容易に基準化できず、結果としてソフトウェア開発の課題を招く。
【0006】
割込みあるいは例外ケースを通知すべく、従来のようにオペレーティングシステムを介在させずに、マイクロプロセッサ上で動作するユーザレベルのスレッドにイベントを直接知らせる機構を含む従来技術がある。このようなユーザレベルの割込みまたはユーザレベルの例外は、スレッドの現在の状態についての十分な情報をセーブし、イベントに応じる"ハンドラ"コードの予め決められたブロックを実行するようスレッドを切り替える機構を有することに基づいている。ハンドラコードの一環として、スレッドは、所望のいかなるタスクも実行し、イベントの前にそれがあった実行経路へと戻すことができる。また、実行経路へは戻さず、代わりに、完全に異なるタスクのセットを継続することを選ぶこともできる。
【図面の簡単な説明】
【0007】
添付の図面における例を用いて本発明の実施形態を示すが、これらに限定されない。同様の参照符号は、同様の構成要素を示す。
【0008】
【図1】本発明の少なくとも1つの実施形態と関連して用いられることができる処理システムの一部を示す。
【0009】
【図2】本発明の一実施形態に従い用いられることができるキャッシュエントリと対応するコヒーレンシー、および、モニタリングエントリを示す。
【0010】
【図3】一実施形態に従うキャッシュラインへのスレッドにより生じた書き込みを示し得るコヒーレンシー状態遷移の検出に関わる動作を示すフローチャートである。
【0011】
【図4】本発明の一実施形態が用いられ得るフロントサイドバス(FSB)コンピュータシステムを示す。
【0012】
【図5】ポイントツーポイント(PtP)構成で配置されたコンピュータシステムを示す。
【発明を実施するための最良の形態】
【0013】
本発明の実施形態は、マイクロプロセッサアーキテクチャに関する。より詳しくは、本発明の実施形態は、1つ以上のマイクロプロセッサまたはマイクロプロセッサコアにより実行される命令の2つ以上のスレッド間の同期通信を管理することに関する。本発明の少なくとも1つの実施形態は、他のスレッドがそれらのメモリ位置に格納している値を修正した場合に通知されるべき一組のメモリ位置を識別するための機構をスレッドに提供する。一実施形態では、通知は、マイクロプロセッサ内のユーザレベル割込み/例外機構によりなされるか、または、コンピュータシステム内のいくらかの他のロジックまたはソフトウェアによりなされてよい。一実施形態では、スレッド間同期通信は、1つ以上の他のスレッドによりアクセスされるキャッシュラインに関連する特定のキャッシュコヒーレンシーイベントをスレッドが通知されるようにすることにより実現する。
【0014】
いくつかの従来技術のスレッド間通信技術とは異なり、本発明の実施形態は、送信スレッドごとに書き込まれる特定のメモリ位置をモニタする特別な検出ハードウェアを用いる代わりに、プロセッサまたはコンピュータシステム内の多くの既存のリソースを用いることができる。特に、少なくとも1つの実施形態は、DRAMなどのメモリ内の位置に対応するキャッシュラインに情報が書き込まれたときを検出すべく、1つのキャッシュライン内にすでに存在し得るコヒーレンシー情報を用いる。特に、ラインに対応するデータ値のローカル読み取りを許容する状態("共有"状態など)に現在あるキャッシュラインは、ラインに対応するあらゆるデータ値を修正する他のスレッドより前に、それに対してコヒーレント動作が実行されていなければならない。
【0015】
いくつかの従来技術のスレッド間通信技術とは異なり、本発明の実施形態は、他のスレッドによりモニタされるべきメモリ位置への多くの固有のアップデートを可能にする。特に、少なくとも1つの実施形態は、モニタされている1つ以上の位置が他のスレッドによりすでにアップデートされているかどうかを示す共通のレポート機構を用いる。
【0016】
本発明の一実施形態は、キャッシュライン状態遷移を検出するだけの最小限の検出ロジックを用いてキャッシュライン状態遷移を検出し、受信スレッドがキャッシュラインに書き込まれた情報を検索できるよう、ユーザレベル割込み機構を用いる受信スレッドに通知することができる。他の実施形態では、キャッシュライン状態遷移の検出は、モニタリングイベント、または、"シナリオ"としてプロセッサの状態チャネルにプログラムされることができる。さらに、他の実施形態では、キャッシュライン状態遷移の検出は、割込み、例外、トラップ、フォルトなどのハードウェア機構に応じて生じ得る。
【0017】
一実施形態では、1つのキャッシュラインまたは複数のキャッシュラインは、キャッシュライン内またはキャッシュラインに関連する1つ以上のモニタリングビットを含むことによりモニタされるキャッシュとしてイネーブルに、または、"マーク"される。モニタリングビットを設定すべく、少なくとも1つの実施形態では、コマンド、命令、または、いくつかの他の手段を用いることもある。さらに、ユーザコードの特定の部分がそのコードの他の部分とは無関係にモニタされるキャッシュラインを構成するよう、多数のモニタリングビットが用いられてよい。モニタリングビットは、キャッシュライン状態がコマンド、命令、または、いくつかの他の手段をクリアにすることにより検出された後にクリアされてよい。
【0018】
図1は、本発明の少なくとも1つの実施形態と関連して用いられることができる処理システムの一部を示す。特に、図1は、プロセッサ/コア101またはいくつかの他の処理リソース(図示せず)内で実行する命令の1つ以上のスレッドで共有され得るキャッシュメモリ105と関連付けられたプロセッサまたは処理コア101を示す。本発明の一実施形態では、キャッシュメモリ105は、一のスレッドが、キャッシュラインを用いている可能性のある他のスレッドを見ずに一のキャッシュライン内の情報を格納できるよう、当該スレッドだけに用いられるものとして当該スレッドの前に現れる。
【0019】
同じく図1にはメモリ110が示されている。メモリ110は、DRAM、あるいは、SRAM、磁気またはコンパクトディスクなどのいくつかの他のメモリ技術からなる。一実施形態においては、キャッシュメモリ105は、メモリ110のエントリのサブセットを反映しているエントリを含む。したがって、キャッシュメモリは、特定のキャッシュライン(例えば図1のキャッシュライン"A")が無効データ("I"状態)を含む場合、あるいは、対応するメモリエントリ(例えば図1のメモリエントリ"A")と同じデータを含まないよう、キャッシュラインが修正されている場合("M"状態)、キャッシュラインが様々なエージェント、スレッド、または、プログラム間で共有できる場合("S"状態)、および、キャッシュラインが特定のスレッド、エージェント、または、プログラムだけに用いられる場合("E"状態)に、キャッシュメモリからのデータにアクセスするエージェントに知らせるコヒーレンシー情報を含み得る。
【0020】
図2は、本発明の一実施形態に従い用いられることができるキャッシュエントリおよび対応するコヒーレンシーと、モニタリングエントリとを示す。特に、キャッシュ200のキャッシュライン201は、フィールド203におけるキャッシュライン203、フィールド205におけるアドレスタグおよびコヒーレンシー情報、および、フィールド207におけるモニタ情報に対応するデータを格納してよい。キャッシュラインへの状態変化をモニタできるようにすべく、モニタ情報フィールド内に1つ以上のビットが設定される。さらに、1つのキャッシュが多数のハードウェアスレッド(例えばそれぞれ個別に動作するソフトウェアスレッド)により共有されるのであれば、各スレッドは、1つのスレッド内の多数のインスタンスがキャッシュラインをどのようにモニタしているかに基づき、モニタ情報フィールド内の複数のビットに対応し得る。
【0021】
例えば、図2では、"a"と表示されたモニタビットは、対応するキャッシュラインがモニタされるスレッド内に3つだけのインスタンス(繰り返されてもよい)を有する第1のスレッドに対応する。"b"と表示されたモニタビットは、対応するキャッシュラインがモニタされる2つのインスタンス(繰り返されてもよい)を有する第2のスレッドに対応する。"d"と表示されたモニタビットは、対応するキャッシュラインがモニタされるスレッド内に1つだけのインスタンス(繰り返されてもよい)を有する第3のスレッドに対応する。したがって、対応するキャッシュラインがモニタされる各スレッド内の各インスタンスに対応する各ビットは、別々に設定またはクリアされ得る。
【0022】
キャッシュラインに存在するモニタビットフィールドの数が多くなるほど、キャッシュラインを同時にモニタできるスレッドおよびスレッド内のインスタンスの数も当然多くなる。一実施形態では、キャッシュラインは6つのモニタビットフィールドを含むことにより、2つのスレッドが各スレッド内の3つの異なるインスタンスで1つのキャッシュラインをモニタすることができるようになる。他の実施形態では、より多いまたは少ないスレッドまたはスレッド内のインスタンスでキャッシュラインをモニタできるよう、より多いまたは少ないビットフィールドが用いられ得る。
【0023】
一実施形態では、キャッシュを共有する1つのスレッドにより実行されるメモリのアップデートは、キャッシュを共有しない他のスレッドからのコヒーレンシーイベントと同じ扱いを受ける、同じキャッシュを共有する他のスレッドに関連して処理される。例えば、スレッドがキャッシュライン内に格納された値をアップデートすると、設定されたモニタビットを有する他のスレッドは、このアップデートと、ユーザレベル割込み機構などの割込み機構により通知される対応するスレッドとを検出し得る。他の実施形態では、割込み機構は、ユーザに見えない割込み機構であってよい。
【0024】
一実施形態では、2つの別々のコマンドまたは命令がキャッシュメモリ内のプロセッサまたはロジック内で実行されることにより、モニタビットの設定およびクリアがそれぞれ行われる。例えば、一実施形態では、キャッシュラインに対応するアドレスと、モニタビットに属性として書き込まれる対応データとを有する"ロードモニタ"命令が実行され得る。同様に、一実施形態では、キャッシュラインに対応するアドレスと、モニタビットをクリアすべく属性として書き込まれる対応データとを有する「クリアモニタ」命令が実行され得る。一実施形態では、命令のモニタビット属性の値に基づき、モニタビットを設定しかつクリアすべく1つの命令が用いられる。さらに他の実施形態では、それぞれのキャッシュラインにおける特定の属性すべてをクリアすべく1つの命令が用いられる。
【0025】
(例えば一実施形態では、対応するモニタリングビットを設定することにより)モニタされるようフラグが立てられているキャッシュラインの状態遷移を検出する方法は多くの方法を実現する。例えば、一実施形態では、キャッシュラインがその対応する設定されたモニタビットのいずれかを有するかどうかを検出するためにブールの"OR"関数(例えば"OR"ゲート)を実行するなどのロジックが用いられてよく、もしその場合は、他のスレッドによる書き込みがそのキャッシュラインに対しすでになされていることを示すべく、キャッシュラインのコヒーレンシービット(図1で"C"と表示されている)内に状態遷移があるかどうかが検出される。一実施形態では、I状態への対応データのローカル読み取りを許容する任意の状態からの状態遷移は、スレッドが対応するキャッシュラインに情報をすでに書き込んでいること、あるいは、書き込もうとしていることを示してよい。さらに、キャッシュを共有する他のスレッドによるキャッシュラインへの書き込みは、アップデートとして検出されることもできる。
【0026】
他の実施形態では、キャッシュラインのコヒーレンシー状態遷移が、割込み、例外、フォルト、トラップ、あるいは、処理ハードウェア内の他のシグナリング機構を誘発することにより、スレッドがキャッシュラインにすでに情報を書き込んでいることが示される。他の実施形態では、他の機構が用いられることにより、スレッドが特定のキャッシュラインにすでにデータを書き込んでいることが示すコヒーレンシー状態遷移が示される。
【0027】
スレッド単位でイベントがモニタされる一実施形態では、そこにすでに書き込まれているデータを示し得るキャッシュラインのコヒーレンシー状態情報の遷移を検出すべく、"シナリオ"として知られるイベントの論理結合が定義され得る。この場合、"チャネル"として知られるプロセッサ状態記憶領域は、キャッシュラインにおけるコヒーレンシー状態遷移を検出すべく、上述のハードウェアおよび/またはソフトウェアと実質的に同じ論理関数を実行するようプログラムされ得る。このようなシナリオの発生は、シナリオを処理する歩留まりイベントハンドラを起動し得る、フォルト、あるいは、トラップのような歩留まりなどの弱い歩留まりイベントを誘発することもある。
【0028】
一実施形態では、モニタされたラインがすでに修正されている、あるいは、すぐに修正され得ることを示すイベントをスレッドに通知する機構は、任意のモニタビットセットにプログラムされ得るマスクを有することができる。例えば、一実施形態では、チャネルは、チャネルマスクとチャネルに書き込まれるべきプログラミングビットとの間で論理積演算などのブール演算を実行することによりプログラムされる。一実施形態では、この機構は、ユーザレベル割込み機構であり、一方、他の実施形態では、ユーザには見えない割込み機構である。一実施形態では、モニタされたラインがすでに修正されているか、または、すぐに修正される可能性があることを示すイベントをスレッドに通知する機構もハードウェアに切り替えられるコンテキストであるソフトウェアスレッドのような他のイベントに応じてソフトウェアスレッドに通知することができる。
【0029】
モニタされたラインのアップデートの見込みをどのように検出するかに関わらず、スレッドが特定のキャッシュラインにすでに書き込まれているか、または、書き込まれる予定があることを示す場合、このような状態遷移の検出により、検出を処理すべくハンドラが起動される。ハンドラにより実行できる可能性のある1つのタスクは、他のスレッドが関心の値を有するメモリ位置をアップデートしているかどうか、また、特定のソフトウェア関数を起動するなど、適切な動作を実行できる関心の値にメモリ位置がアップデートされているかどうかを確かめるべく、モニタされる1つのアドレスまたは一組のアドレスを読み取ることである。
【0030】
図3は、本発明に従う、スレッドによるキャッシュラインへの書き込みが生じていることを示し得るコヒーレンシー状態遷移の検出中に起動される動作を示すフローチャートである。動作301において、キャッシュラインは、キャッシュラインがモニタされる各スレッド内のインスタンス数と等しいモニタリングビット数を設定することにより、1つ以上のスレッドによってモニタされることができるようになる。一実施形態では、キャッシュラインは、設定されるモニタビットに対応する属性を有する命令(例えば"ロードモニタ"命令)を実行することによりイネーブルにされる。動作305では、スレッドがモニタされるキャッシュラインに情報を書き込むことにより、コヒーレンシー状態遷移を生じ、その後動作310において、キャッシュラインに書き込まれた情報を検索するようハンドラが起動されることにより、情報は、モニタリング(レシーバ)スレッドへと供給される。
【0031】
一実施形態では、コヒーレンシー状態遷移は、モニタビットが設定されているかどうかを検出し、もし設定されていれば、コヒーレンシー状態遷移が起きていることを検出するロジックを用いて検出される。他の実施形態では、コヒーレンシー状態遷移は、ソフトウェア、ハードウェア、あるいは、それらのいくつかの組み合わせにより検出され得る。さらに、少なくとも1つの実施形態では、コヒーレンシー状態遷移は、シナリオをプロセッサ状態チャネルにプログラミングすることにより検出され、ユーザレベル割込み機構により受信スレッドに報告される。
【0032】
動作315において、検出されたコヒーレンシー状態遷移に対応するモニタビットは、クリアされ、他のスレッド、または、同じスレッド内のモニタリングインスタンスにより選択的にリセットされる。一実施形態では、モニタビットは、クリアされたモニタビットに対応する属性を有するモニタビットを設定する命令とは異なる命令(例えば"クリアモニタ"命令)を実行することによりクリアされてよい。他の実施形態では、クリアされたモニタビットに対応する属性を用いることにより、モニタビットを設定する目的で使用されたモニタビットをクリアするために同じ命令(例えば"ロードモニタ"命令)が用いられてよい。
【0033】
一実施形態では、ソフトウェアがモニタ変数およびそれに応じて起きる動作を特定することができるユーザのソフトウェアプログラムにインターフェースが提供される。一実施形態では、ユーザのソフトウェアプログラムは、特定のメモリ変数、特定のメモリ変数の値を評価するために特定の比較法則、および、メモリ変数の値が評価基準を満たす条件を誘発する任意の引数を有する関数ポインタを提供し得る。このような実施形態では、ソフトウェアは、1つの命令などの1つの手段を通じて、あるいは、複数の命令セットを通じて当該情報を特定できる。
【0034】
また、ユーザソフトウェアは、それぞれが固有のあるいは共通の応答動作に対応する複数のモニタ変数を特定することができる。1つおよび/または複数の変数がモニタされる間に、スレッドは他の関数を引き続き実行できる。モニタされた変数の発生に応じて起動された関数は、スレッドが実行し続けるよう、スレッドに制御を戻すことができ、その結果、スケーラブルでフレキシブルなインターフェースが提供される。
【0035】
一実施形態では、上記のようなインターフェースは、各変数、変数の比較法則、および、起動されるべき動作または関数とその引数を記述する情報を含む。一実施形態では、この情報は、メインコンピュータシステムのメモリ(例えばDRAM)などの記憶領域内のテーブルに格納される。ソフトウェア、ファームウェア、または、ハードウェアは、適当な時間にこのテーブルを読み取り、各エントリに対する特定の変数を読み取り、動作を起動すべきかどうかを決定すべく比較法則を実行してよい。
【0036】
さらに、モニタされるべきキャッシュラインにおけるマークラインより前に記述されている機構は、モニタされるべき変数に対応する各ラインをマークするために用いられることができる。ラインが他のスレッドによって今修正されてよいことを示すイベントがモニタされたラインで検出される場合、適切なソフトウェア、ファームウェア、または、ハードウェアは、テーブルにおけるすべてのモニタされた変数を評価すべく上記のように起動さることができる。それらの基準を満たす変数がない場合、ソフトウェア、ファームウェア、または、ハードウェアは、すべての適切なラインはまだモニタされている最中であることを確認し、その起動の前に実行される作業へと戻す。
【0037】
変数のテーブルを評価し、適切な関数を起動するソフトウェア、ファームウェア、または、ハードウェアは、スレッドメモリスタックを操作することができるので、その基準を満たす変数に応じて関数が実行される場合、その関数は、前の実行タスクに直接戻ることが出来る。あるいは、ソフトウェア、ファームウェア、または、ハードウェアは、スタックを処理することが出来るので、前の実行タスクに最終的に戻る前に、変数に対応するすべてのキャッシュラインが適切にモニタされていることを確認すべく、ある特別なコードに戻ることになる。さらなる他の変形例は、その基準を満たす変数に応じて起動される関数が用いられる特別なリターン命令を有することである。この特別なリターン命令は、前の実行タスクに最終的に戻る前に、変数に対応するすべてのキャッシュが適切にモニタされていることを確認する。
【0038】
図4は、本発明の一実施形態が用いられ得るフロントサイドバス(FSB)コンピュータシステムを示す。プロセッサ505は、レベルワン(L1)キャッシュメモリ510およびメインメモリ515からデータにアクセスする。本発明の他の実施形態では、キャッシュメモリは、レベルツー(L2)キャッシュであるか、または、コンピュータシステムメモリ階層内の他のメモリであってよい。さらにいくつかの実施形態では、図4のコンピュータシステムは、L1キャッシュおよびL2キャッシュのどちらも含み得る。
【0039】
図4のプロセッサ内には、マシンステートの記憶領域506が示されている。一実施形態では、記憶領域は、一組のレジスタであってよく、一方、他の実施形態では、他のメモリ構造であってよい。図4には、一実施形態に従う保存領域セグメントの記憶領域507も示されている。他の実施形態では、保存領域セグメントは、他のデバイスまたはメモリ構造内にあってもよい。プロセッサは、任意の数の処理コアを有し得る。しかしながら、本発明の他の実施形態は、独立したバスエージェントなどのシステム内の他のデバイス内で実現されるか、あるいは、ハードウェア、ソフトウェア、または、それらのいくつかの組み合わせの状態でシステム全体に分散されてもよい。
【0040】
メインメモリは、ダイナミックランダムアクセスメモリ(DRAM)、ハードディスクドライブ(HDD)520、または、様々な記憶デバイスおよび技術を含むネットワークインターフェース530を介しコンピュータシステムから離れて配置されたメモリソースなどの様々なメモリソース内で実現されてよい。キャッシュメモリは、プロセッサ内、または、プロセッサのローカルバス507の上など、プロセッサに近接して配置されてよい。
【0041】
さらに、キャッシュメモリは、6トランジスタ(6T)型セルなど比較的速いメモリセル、または、ほぼ同じかより早いアクセス速度を有する他のメモリセルを含んでよい。図4のコンピュータシステムは、ポイントツーポイント(PtP)ネットワークにおける各エージェント専用のバス信号を介し通信するマイクロプロセッサのようなバスエージェントのPtPネットワークであってよい。図5は、ポイントツーポイント(PtP)構成で配置されるコンピュータシステムを示す。特に、図5は、プロセッサ、メモリ、および、入出力デバイスが多数のポイントツーポイントインターフェースにより相互接続されているシステムを示す。
【0042】
図5のシステムは、いくつかのプロセッサを含み、説明を明確にすべく、その中の2つであるプロセッサ670、680のみが示されている。プロセッサ670、680は、メモリ22、24と接続されるローカルメモリコントローラハブ(MCH)672、682をそれぞれ含む。プロセッサ670、680は、PtPインターフェース回路678および688を用い、ポイントツーポイント(PtP)インターフェース650を介しデータを交換する。プロセッサ670、680は、ポイントインターフェース回路676、694、686、698を用い、個別のPtPインターフェース652、654を介しチップセット690とデータをそれぞれ交換してよい。同じくチップセット690は、高性能グラフィックインターフェース639を介し高性能グラフィック回路638とデータを交換してよい。本発明の実施形態は、任意の数のプロセッサコアを有するいかなるプロセッサ内、あるいは、図5のPtPバスエージェントのそれぞれの中に配置されてよい。
【0043】
しかしながら、図5のシステム内の他の回路、論理演算装置、または、デバイス内に本発明の他の実施形態が存在してよい。さらに、図5に示されるいくつかの回路、論理演算装置、または、デバイス全体に本発明の他の実施形態が分散されてよい。
【0044】
本発明の実施形態の様々な側面は、相補型MOS回路および論理演算装置(ハードウェア)を用いて実現することができ、一方、本発明の他の側面は、プロセッサにより実行されると、プロセッサに本発明の複数の実施形態を実行させる方法を実施させる、機械可読媒体に格納される命令を用いて実現することができる。さらに、本発明のいくつかの実施形態は、ハードウェアでのみ実行されてよく、一方、他の実施形態は、ソフトウェアでのみ実行されてよい。
【0045】
これまで例示の実施形態を参照して本発明を説明してきたが、説明は、限定的な意味合いで解釈されることを意図しない。例示的な実施形態はもとより、他の実施形態の様々な変更が本発明の趣旨および範囲内に存在するであろうことは当業者にとり明らかである。

【特許請求の範囲】
【請求項1】
一の対応するキャッシュラインが、一のスレッドにより前記キャッシュラインに対応するデータを修正させ得る一のイベントに関してモニタされるべきかどうかを示す1つ以上のモニタビットフィールドを含む一のキャッシュメモリと、
前記1つ以上のビットフィールド内に一のモニタビットが設定されている場合、前記キャッシュラインにデータが書き込まれているかどうかを検出する検出ロジックと、
を含む装置。
【請求項2】
前記モニタビットを設定する一の第1の命令と、前記モニタビットをクリアする一の第2の命令と、前記検出ロジックをイネーブルにする一の第3の命令とを含む複数の命令を格納する一のメモリをさらに含む、請求項1に記載の装置。
【請求項3】
前記第1の命令および前記第2の命令は同じ命令である、請求項2に記載の装置。
【請求項4】
前記イベントは、一の割込み機構、または、一のユーザレベル割込み機構により一の通知を生じる、請求項1に記載の装置。
【請求項5】
前記ユーザレベル割込み機構は、前記スレッドにより示される、実行されるべき一の命令を生じる、請求項4に記載の装置。
【請求項6】
前記キャッシュメモリは、前記キャッシュラインに関連するコヒーレンシー情報を格納する一のコヒーレンシー状態フィールドを含む、請求項1に記載の装置。
【請求項7】
前記検出ロジックは、前記データが前記キャッシュラインに書き込まれるべきことを示す前記コヒーレンシー状態フィールドにおける一の遷移を検出する、請求項6に記載の装置。
【請求項8】
前記コヒーレンシー状態フィールドにおける前記遷移は、一の共有状態から一の無効状態への一の遷移を含む、請求項7に記載の装置。
【請求項9】
一の対応するキャッシュラインが、一のスレッドにより前記キャッシュラインに対応するデータを一の送信スレッドごとに修正させ得るイベントに関してモニタされるべきかどうかを示す複数のモニタビットフィールドを含む一のキャッシュメモリと、
前記複数のモニタビットフィールド内に複数のビットを設定する一の第1の命令と、前記データが前記送信スレッドごとに前記キャッシュラインに書き込まれているかどうかを前記検出ロジックに検出させる一の第3の命令とを格納する一の第1のメモリと、
を含むシステム。
【請求項10】
一のレシーバスレッドを実行する一のプロセッサをさらに含み、前記レシーバスレッドは、前記検出ロジックが、前記キャッシュラインにデータが書き込まれており、前記レシーバスレッドに対応する一のモニタビットが前記複数のモニタビットフィールド内に設定されていることを検出する場合、前記キャッシュラインから前記データを読み出す、請求項9に記載のシステム。
【請求項11】
前記第1のメモリは、前記複数のモニタビットフィールドの少なくともいくつかをクリアする一の第2の命令を含む、請求項10に記載のシステム。
【請求項12】
前記第1のメモリは、前記データが前記送信スレッドごとに前記キャッシュラインに書き込まれているかどうかを検出ロジックに検出させる複数の命令を格納し、該複数の命令、および、前記第3の命令のそれぞれは、一の関連する優先レベルを有する、請求項10に記載のシステム。
【請求項13】
前記検出ロジックは、一のシナリオを検出する情報によりプログラムされる一の状態チャネルを含む、請求項12に記載のシステム。
【請求項14】
前記キャッシュメモリは、前記キャッシュラインに関連するコヒーレンシー情報を格納する一のコヒーレンシー状態フィールドを含む、請求項9に記載のシステム。
【請求項15】
前記検出ロジックは、前記データが前記キャッシュラインに書き込まれていることを示す前記コヒーレンシー状態フィールド内の一の遷移を検出する、請求項14に記載のシステム。
【請求項16】
前記検出ロジックは、前記キャッシュラインに書き込まれたデータに応じ、一の例外、一のフォルト、一のトラップ、一の割込みからなる一のグループのうちの1つを検出する一のロジックを含む、請求項9に記載の装置。
【請求項17】
一の送信スレッド内の一の命令ごとに一のキャッシュラインに書き込まれるデータに関して前記キャッシュラインがモニタされるようにすることと、
前記キャッシュラインに書き込まれた前記データの検出を可能にすることと、
前記キャッシュラインに対応するデータの修正を他のスレッドにさせ得る一のイベントを検出することと、
前記キャッシュラインに書き込まれた前記データを検出することに応じて一のハンドラを起動させることと、
前記データを一の受信スレッドに送ることと、
を含む方法。
【請求項18】
前記キャッシュラインがモニタされるようにすることは、前記キャッシュラインに対応する一のモニタリングビットフィールド内の少なくとも1つのモニタリングビットを設定する一の命令を実行することを含む、請求項17に記載の方法。
【請求項19】
前記キャッシュラインに書き込まれたデータの検出を可能にすることは、前記モニタされるべき前記キャッシュラインに対応する一のシナリオを検出する状態チャネルロジックをプログラムする一の命令を実行することを含む、請求項18に記載の方法。
【請求項20】
前記キャッシュラインに書き込まれたデータの検出を可能にすることは、一の例外、一のフォルト、一のトラップ、一の割込みからなる一のグループから選ばれる、前記キャッシュラインに書き込まれる前記データに応じてアサートされる一の信号を検出ロジックに検出させることを含む、請求項19に記載の方法。
【請求項21】
検出することは、前記キャッシュラインの一の第1の状態から一の第2の状態への一のコヒーレンシー状態遷移を検出することを含む、請求項19に記載の方法。
【請求項22】
前記第1の状態は、共有状態であり、前記第2の状態は、一の無効状態である、請求項21に記載の方法。
【請求項23】
前記シナリオは、前記キャッシュラインがモニタされるべきかどうかを検出することを含み、もしモニタされるべきであれば、前記キャッシュラインに関して一の第1の状態から一の無効状態への一のコヒーレンシー状態遷移が生じているかどうかを検出することを含む、請求項19に記載の方法。
【請求項24】
状態チャネルロジックをプログラムする前記命令は、状態チャネルロジックをプログラムする複数の命令の1つであり、前記複数の命令のそれぞれは、前記キャッシュラインがモニタされる1つ以上のスレッド内の一の異なるインスタンスに対応する、請求項23に記載の方法。
【請求項25】
前記複数の命令のそれぞれは、該複数の命令が実行されるべき順序を制御する一の固有の優先順位を有する、請求項24に記載の方法。
【請求項26】
一組の命令を格納する機械可読媒体であって、一の機械により実行されると、該機械に一の方法を実行させ、該方法は、
モニタされるべき一のキャッシュラインに対応する一の変数を記述する情報を格納することと、
一の比較法則を用いて前記変数が一の第1の値に設定されているかどうかを決定することと、
前記比較法則が満たされる場合、前記比較法則が満たされたことに応じて、2つ以上のスレッド間で情報が共有されることを可能にする、実行されるべき少なくとも1つの命令に対し一のポインタを特定することと、を含む、機械可読媒体。
【請求項27】
前記比較法則が満たされたことに応じて、前記少なくとも1つの命令に対し、少なくとも1つの引数が選択的に渡される、請求項26に記載の機械可読媒体。
【請求項28】
前記比較法則が満たされた後に前記変数をクリアすることをさらに含む、請求項27に記載の機械可読媒体。
【請求項29】
前記比較法則が満たされているかどうかに関わらず、前記2つ以上のスレッドは実行し続けることになっている、請求項28に記載の機械可読媒体。
【請求項30】
前記比較法則は、前記変数が前記第1の値に設定されているかどうかを決定するプロセッサロジックを用いる、請求項29に記載の機械可読媒体。

【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate

【図5】
image rotate


【公開番号】特開2012−234561(P2012−234561A)
【公開日】平成24年11月29日(2012.11.29)
【国際特許分類】
【外国語出願】
【出願番号】特願2012−164674(P2012−164674)
【出願日】平成24年7月25日(2012.7.25)
【分割の表示】特願2008−535803(P2008−535803)の分割
【原出願日】平成18年10月19日(2006.10.19)
【出願人】(591003943)インテル・コーポレーション (1,101)
【Fターム(参考)】