(57)【要約】コンピュータシステムは、ハードウェア同期コンポーネント（ＨＳＣ）を含む。複数の同時実行スレッドは、ＨＳＣの状態を更新する命令を発行する。複数のスレッドは、同じクロックサイクル内で状態を更新し得、スレッドは、ＨＳＣの状態を更新する前にＨＳＣの制御を受ける必要がない。同じクロックサイクルの期間中に受信された状態を参照する命令が集約され、命令の数に従って状態が更新される。状態は、閾値条件に関して評価される。閾値条件が満たされる場合、ＨＳＣはイベントをプロセッサに出力する。次に、プロセッサは、イベントによって影響を受けたスレッドを識別し、そのイベントに基づいて所定の動作（例えば、スレッドのブロック、分岐、ブロック解除）をとる。【選択図】図２
2019505039.tif 000002
【特許請求の範囲】
【請求項１】
実行可能なデータを格納するメモリデバイスを提供するステップと、
前記メモリデバイスに接続され、前記実行可能なデータを抽出して実行するように動作可能な処理デバイスを提供するステップと、
前記処理デバイスに動作可能に接続されたハードウェア同期コンポーネントを提供するステップと、
前記処理デバイスによって複数の実行スレッドを同時に実行するステップと、
前記複数の実行スレッドによって、命令を前記ハードウェア同期コンポーネントに発行するステップと、
前記ハードウェア同期コンポーネントによって、前記命令に応答して前記ハードウェア同期コンポーネントの状態を更新するステップと、
前記ハードウェア同期コンポーネントによって、前記ハードウェア同期コンポーネントの前記状態が閾値条件を満たすと判定するステップと、
前記ハードウェア同期コンポーネントの前記状態が前記閾値条件を満たすと判定したことに応答して、前記ハードウェア同期コンポーネントによってイベントを前記処理デバイスに出力するステップと、
前記ハードウェア同期コンポーネントから前記イベントを受信することに応答して、前記処理デバイスによって、前記複数の実行スレッドのうちの少なくとも１つのスレッドの実行を改変するステップと、
を含む、方法。
【請求項２】
前記処理デバイスによって、スレッドスケジューラに前記イベントを入力するステップと、および
前記イベントに応答して前記スレッドスケジューラによって、前記少なくとも１つのスレッドの前記実行を前記改変することを引き起こすステップと、
を更に含む、請求項１に記載の方法。
【請求項３】
前記少なくとも１つのスレッドの実行を改変するステップは、前記少なくとも１つのスレッドをブロックするステップを含む、請求項１に記載の方法。
【請求項４】
前記少なくとも１つのスレッドの実行を改変するステップは、前記少なくとも１つのスレッドに分岐するように命令するステップを含む、請求項１に記載の方法。
【請求項５】
前記命令に応答して前記ハードウェア同期コンポーネントの前記状態を更新するステップは、前記命令の数だけカウンタをインクリメントするステップを含む、請求項１に記載の方法。
【請求項６】
前記ハードウェア同期コンポーネントの前記状態が前記閾値条件を満たすと判定するステップは、前記カウンタが前記閾値条件を満たすと判定するステップを含む、請求項５に記載の方法。
【請求項７】
前記命令は、１クロックサイクル中に受信された命令であり、第１の命令および第２の命令を含み、
前記ハードウェア同期コンポーネントの前記状態を更新するステップは、
前記第１の命令の数だけ第１のカウンタをインクリメントするステップと、
前記第２の命令の数だけ第２のカウンタをインクリメントするステップと、
を含む、請求項１に記載の方法。
【請求項８】
前記ハードウェア同期コンポーネントの前記状態が前記閾値条件を満たすと判定するステップは、
前記第１のカウンタの第１の値および前記第２のカウンタの第２の値を関数に入力して関数出力を取得するステップと、
前記関数出力が前記閾値条件を満たすと判定するステップと、
を含む、請求項７に記載の方法。
【請求項９】
前記関数は、前記第１の値と前記第２の値との間の差分である、請求項８に記載の方法。
【請求項１０】
前記第１の命令は書き込み命令であり、前記第２の命令は読み出し命令であり、前記読み出し命令及び前記書き込み命令は先入れ先出しバッファを参照する、請求項９に記載の方法。
【請求項１１】
実行可能なデータを格納するメモリデバイスと、
前記メモリデバイスに接続され、前記実行可能なデータを抽出して実行するように動作可能な処理デバイスと、
前記処理デバイスに動作可能に接続されたハードウェア同期コンポーネントと、
を含み、
前記処理デバイスは、
前記処理デバイスによって複数の実行スレッドを同時に実行し、
命令を前記ハードウェア同期コンポーネントに発行する、
ようにプログラムされており、
前記ハードウェア同期コンポーネントは、
前記命令に応答して前記ハードウェア同期コンポーネントの状態を更新し、
前記ハードウェア同期コンポーネントの前記状態が閾値条件を満たすと判定し、
前記ハードウェア同期コンポーネントの前記状態が前記閾値条件を満たすと判定することに応答して、イベントを前記処理デバイスに出力する、
ようにプログラムされており、
前記処理デバイスはさらに、前記イベントに応答して前記複数の実行スレッドのうちの少なくとも１つのスレッドの実行を改変するようにプログラムされているシステム。
【請求項１２】
前記処理デバイスはさらに、
スレッドスケジューラに前記イベントを入力し、
前記イベントに応答して前記スレッドスケジューラによって前記少なくとも１つのスレッドの前記実行を改変することを引き起こす、
ように更にプログラムされる、請求項１１に記載のシステム。
【請求項１３】
前記プロセッサは、前記少なくとも１つのスレッドをブロックすることによって前記少なくとも１つのスレッドの実行を改変するようにプログラムされる、請求項１１に記載のシステム。
【請求項１４】
前記プロセッサは、前記少なくとも１つのスレッドに分岐するように命令をすることによって、前記少なくとも１つのスレッドの実行を改変するようにプログラムされる、請求項１１に記載のシステム。
【請求項１５】
前記ハードウェア同期コンポーネントは、前記命令に応答して、前記命令の数だけカウンタをインクリメントすることによって前記ハードウェア同期コンポーネントの前記状態を更新するようにプログラムされる、請求項１１に記載のシステム。
【請求項１６】
前記ハードウェア同期コンポーネントは、前記カウンタが前記閾値条件を満たすと判定することによって、前記ハードウェア同期コンポーネントの前記状態が前記閾値条件を満たすと判定するようにプログラムされる、請求項１５に記載のシステム。
【請求項１７】
クロック周期を有するクロックを更に含み、
前記ハードウェア同期コンポーネントは、前記ハードウェア同期コンポーネントの前記状態を、
前記クロックの１クロックサイクルの期間中に受信された前記命令の第１の命令の数だけ第１のカウンタをインクリメントし、
前記クロックサイクルの期間中に受信された前記命令の第２の命令の数だけ第２のカウンタをインクリメントする、
ことによって更新するようにプログラムされる、請求項１１に記載のシステム。
【請求項１８】
前記ハードウェア同期コンポーネントは、
前記第１のカウンタの第１の値および前記第２のカウンタの第２の値を関数に入力して関数出力を取得し、
前記関数出力が前記閾値条件を満たすと判定する、
ことによって前記ハードウェア同期コンポーネントの前記状態が前記閾値条件を満たすと判定するようにプログラムされる、請求項１７に記載のシステム。
【請求項１９】
前記関数は、前記第１の値と前記第２の値との間の差分である、請求項１８に記載のシステム。
【請求項２０】
前記第１の命令は書き込み命令であり、前記第２の命令は読み出し命令であり、前記読み出し命令及び前記書き込み命令は先入れ先出しバッファを参照する、請求項１９に記載のシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、同時に実行する複数のスレッド間で動作を調整するためのシステムおよび方法に関する。
【背景技術】
【０００２】
従来のコンピュータシステムでは、処理リソースを最大限に活用するために、複数の実行スレッド（threads of execution）が実行され得る。しかし、多くのアプリケーションでは、個別の実行スレッド間で調整が必要ある。これは、少数のスレッドについては、スレッド内で、他のスレッドと共有される複数のイベントを生成し、その後、これらイベントに基づいて適切な動作を実行することによって容易に実行される。しかし、このアプローチは、遅延と高い処理のオーバーヘッドを招く。
【０００３】
本明細書で記載されるシステムおよび方法は、スレッド間を調整するための改良されたアプローチを提供する。
【図面の簡単な説明】
【０００４】
本発明の効果が容易に理解されるように、上記に簡単に記述した本発明のより具体的な記述が、添付の図面に示される特定の実施形態を参照して提供される。これらの図面は、本発明の典型的な実施形態のみを示すものであり、したがって、その範囲を限定するものとみなされるべきではないと理解されたく、本発明は、添付の図面の使用を通して、さらなる具体性および詳細とともに記述および説明される。
【図１】本発明の実施形態に係る方法を実装するのに適したコンピュータシステムの概略ブロック図である。
【図２】本発明の一実施形態に係るハードウェアイベント生成を実装するための構成要素の概略ブロック図である。
【図３】本発明の一実施形態に係るイベント生成のためのハードウェアカウンタを更新する方法のプロセスフロー図である。
【図４】本発明の一実施形態に係るハードウェアカウンタに基づいてイベントを生成する方法のプロセスフロー図である。
【図５】本発明の一実施形態に係るハードウェア生成されたイベントを処理する方法のプロセスフロー図である。
【発明を実施するための形態】
【０００５】
本明細書内で概括的に記述および図示されている本発明の構成要素は、多種多様な異なる構成で配置および設計できることが容易に理解されるであろう。したがって、図面に表された本発明の実施形態の以下のより詳細な説明は、請求される本発明の範囲を限定する意図はではなく、単に本発明に係る現在考えられる実施形態の特定の例を表している。現在記述されている実施形態は、同様の部材が全体を通じて同様の数字で示されている図面を参照することで最も正しく理解されるであろう。
【０００６】
本発明に係る実施形態は、装置、方法、またはコンピュータプログラム製品として具体化され得る。したがって、本発明は、完全にハードウェアの実施形態、完全にソフトウェアの実施形態（ファームウェア、常駐ソフトウェア、マイクロコードなどを含む）、または、本明細書では包括的に「モジュール」または「システム」としてすべて参照され得るソフトウェアおよびハードウェアの態様を組み合わせた実施形態の形態をとってよい。さらに、本発明は、任意の有形的表現媒体内で具体化されるコンピュータプログラム製品の形態を取ってよく、こうした有形的表現媒体内で、コンピュータ使用可能プログラムコードが具体化される。
【０００７】
非一時的媒体を含む、１つまたは複数のコンピュータ使用可能媒体またはコンピュータ可読媒体の任意の組み合わせが利用され得る。例えば、コンピュータ可読媒体は、ポータブルコンピュータディスケット、ハードディスク、ランダムアクセスメモリ（ＲＡＭ）デバイス、読み出し専用メモリ（ＲＯＭ）デバイス、消去可能プログラマブル読み出し専用メモリ（ＥＰＲＯＭまたはフラッシュメモリ）デバイス、ポータブルコンパクトディスク読み出し専用メモリ（ＣＤＲＯＭ）、光記憶デバイス、および磁気記憶デバイスのうちの１つまたは複数を含み得る。選ばれた実施形態では、コンピュータ可読媒体は、命令実行システム、装置、またはデバイスによって使用される、あるいはそれに関連して使用されるプログラムを含むこと、格納すること、通信すること、伝播すること、または転送することができる任意の非一時的媒体を含み得る。
【０００８】
本発明の操作を実行するためのコンピュータプログラムコードは、Ｊａｖａ、Ｓｍａｌｌｔａｌｋ、Ｃ++などのオブジェクト指向プログラミング言語、および"Ｃ"プログラミング言語または同様のプログラミング言語などの従来の手続き型プログラミング言語を含む、１つまたは複数のプログラミング言語の任意の組み合わせで記載され得る。こうしたプログラムコードは、その全体をスタンドアローンのソフトウェアパッケージとしてコンピュータシステム上で実行すること、スタンドアローンのハードウェアユニット上で実行すること、その一部をコンピュータからある程度の距離の離れたリモートコンピュータ上で実行することもでき、或いは、その全体をリモートコンピュータ又はリモートサーバ上で実行することもできる。後者の場合では、リモートコンピュータは、ローカルエリアネットワーク（ＬＡＮ）またはワイドエリアネットワーク（ＷＡＮ）を含む任意のタイプのネットワークを介してコンピュータに接続されてもよく、或いは、（例えば、インターネットサービスプロバイダを使用してインターネットを介して）外部コンピュータに接続されてもよい。
【０００９】
本発明の実施形態に係る方法、装置（システム）およびコンピュータプログラム製品のフローチャート図および/またはブロック図を参照して以下に本発明は記載される。フローチャート図および/またはブロック図の各ブロック、ならびにフローチャート図および/またはブロック図におけるブロックの組み合わせは、コンピュータプログラム命令またはコードによって実装できることが理解されよう。これらのコンピュータプログラム命令を、汎用コンピュータ、専用コンピュータ、または他のプログラム可能データ処理装置のプロセッサに提供して、マシンを製造することもでき、こうすることで、その命令が、コンピュータまたは他のプログラム可能データ処理装置のプロセッサを介して実行され、フローチャートおよび/またはブロック図のブロックまたは複数のブロックで指定された機能/動作を実装するための手段を作成する。
【００１０】
これらのコンピュータプログラム命令は、コンピュータまたは他のプログラム可能データ処理装置に特定の機能を行うように指示することができる非一時的コンピュータ可読媒体に格納することもでき、こうすることで、そのコンピュータ可読媒体に格納された命令が、フローチャートおよび/またはブロック図のブロックまたは複数のブロックで指定された機能/動作を実装する命令手段を含む製造品を製造する。
【００１１】
コンピュータプログラム命令を、コンピュータまたは他のプログラム可能データ処理装置にロードして、コンピュータまたは他のプログラム可能装置上で一連の操作ステップを実行させて、コンピュータまたは他のプログラム可能装置上で実行される命令が、フローチャートおよび/またはブロック図のブロックまたは複数のブロックで指定される機能/動作を実装するためのプロセスを提供するようにコンピュータ実装プロセスを生成してもよい。
【００１２】
図１は、例示的なコンピュータデバイス１００を示すブロック図である。コンピュータデバイス１００は、本明細書で論じられるものなどの様々な手順を実行するために使用され得る。コンピュータデバイス１００は、サーバ、クライアント、または任意の他のコンピューティングエンティティ（computing entity）として機能することができる。コンピュータデバイスは、本明細書で論じるような様々なモニタリング機能を実行することができ、本明細書に記述するアプリケーションプログラムなどの１つまたは複数のアプリケーションプログラムを実行することができる。コンピュータデバイス１００は、例えば、デスクトップコンピュータ、ノートブックコンピュータ、サーバコンピュータ、ハンドヘルドコンピュータ、タブレットコンピュータなどの多種多様なコンピュータデバイスのいずれかとすることができる。
【００１３】
コンピュータデバイス１００は、１つまたは複数のプロセッサ１０２、１つまたは複数のメモリデバイス１０４、１つまたは複数のインタフェース１０６、１つまたは複数の大容量記憶デバイス１０８、１つまたは複数の入力/出力（Ｉ／Ｏ）デバイス、および表示デバイス１３０を含み、これらすべてはバス１１２に接続される。（１つまたは複数の）プロセッサ１０２は、（１つもしくは複数の）メモリデバイス１０４および/または（１つもしくは複数の）大容量記憶デバイス１０８に格納された命令を実行する１つまたは複数のプロセッサまたはコントローラを含む。（１つまたは複数の）プロセッサ１０２は、キャッシュメモリなどの様々な種類のコンピュータ可読媒体を含んでもよい。
【００１４】
（１つまたは複数の）メモリデバイス１０４は、揮発性メモリ（例えば、ランダムアクセスメモリ（ＲＡＭ）１１４）および/または不揮発性メモリ（例えば、読み出し専用メモリ（ＲＯＭ）１１６）などの様々なコンピュータ可読媒体を含む。（１つまたは複数の）メモリデバイス１０４はまた、フラッシュメモリなどの書き換え可能なＲＯＭを含んでもよい。
【００１５】
（１つまたは複数の）大容量記憶デバイス１０８は、磁気テープ、磁気ディスク、光ディスク、ソリッドステートメモリ（例えば、フラッシュメモリ）などの様々なコンピュータ可読媒体を含む。図１に示すように、具体的な大容量記憶デバイスの１つはハードディスクドライブ１２４である。（１つまたは複数の）大容量記憶デバイス１０８に様々なドライブを含めて、様々なコンピュータ可読媒体からの読み出しおよび/または書き込みを可能にしてもよい。（１つまたは複数の）大容量記憶デバイス１０８は、リムーバブルメディア１２６および/または非リムーバブルメディアを含む。
【００１６】
（１つまたは複数の）Ｉ／Ｏデバイス１１０は、データおよび/または他の情報がコンピュータデバイス１００に入力されるか、またはコンピュータデバイス１００から抽出されることを可能にする様々なデバイスを含む。例示的な（１つまたは複数の）Ｉ／Ｏデバイス１１０は、カーソル制御デバイス、キーボード、キーパッド、マイク、モニタまたは他の表示デバイス、スピーカー、プリンタ、ネットワークインタフェースカード、モデム、レンズ、ＣＣＤまたは他の画像キャプチャデバイスなどを含む。
【００１７】
表示デバイス１３０は、コンピュータデバイス１００の１人または複数人のユーザに情報を表示することができる任意の種類のデバイスを含む。表示デバイス１３０の例は、モニタ、表示端末、ビデオ投影デバイスなどを含む。
【００１８】
グラフィックス・プロセッシングユニット（ＧＰＵ）１３２が、（１つまたは複数の）プロセッサ１０２および/または表示デバイス１３０に接続されてよい。ＧＰＵは、コンピュータ生成された画像をレンダリングし、また、他のグラフィカル処理を実行するように動作可能であってよい。ＧＰＵは、（１つまたは複数の）プロセッサ１０２などの汎用プロセッサの機能の一部または全部を含み得る。ＧＰＵは、グラフィックス処理に特有の追加の機能を含んでもよい。ＧＰＵは、座標変換、シェーディング、テクスチャリング、ラスタライズ、およびコンピュータ生成された画像のレンダリングに役立つ他の機能に関連するハードコードされたグラフィックス機能、および/またはハードワイヤードのグラフィックス機能を含み得る。
【００１９】
（１つまたは複数の）インタフェース１０６は、コンピュータデバイス１００が他のシステム、デバイス、またはコンピューティング環境と情報をやり取りすることを可能にする様々なインタフェースを含む。例示的な（１つまたは複数の）インタフェース１０６は、ローカルエリアネットワーク（ＬＡＮ）、広域ネットワーク（ＷＡＮ）、無線ネットワーク、およびインターネットへのインタフェースなどの任意の数の様々なネットワークインタフェース１２０を含む。他の（１つまたは複数の）インタフェースは、ユーザインタフェース１１８と周辺デバイスインタフェース１２２とを含む。（１つまたは複数の）インタフェース１０６はまた、１つまたは複数のユーザインタフェース要素１１８を含んでもよい。（１つまたは複数の）インタフェース１０６はまた、例えば、プリンタ、ポインティングデバイス（マウス、トラックパッドなど）、キーボードなどのためのインタフェースのような、１つまたは複数の周辺インタフェースを含んでもよい。
【００２０】
バス１１２は、（１つまたは複数の）プロセッサ１０２、（１つまたは複数の）メモリデバイス１０４、（１つまたは複数の）インタフェース１０６、（１つまたは複数の）大容量記憶デバイス１０８、および（１つまたは複数の）Ｉ／Ｏデバイス１１０が相互に通信することを可能にし、バス１１２に接続された他のデバイスまたは構成要素との通信も可能にする。バス１１２は、システムバス、ＰＣＩバス、ＩＥＥＥ１３９４バス、ＵＳＢバスなどのいくつかの種類のバス構造のうちの１つまたは複数を表す。
【００２１】
説明のために、プログラムおよび他の実行可能なプログラム構成要素は、本明細書では個別のブロックとして示されているが、そのようなプログラムおよび構成要素は、様々な時間で、コンピュータデバイス１００の異なる記憶構成要素内に存在し得、（１つまたは複数の）プロセッサ１０２によって実行されることが理解される。あるいは、本明細書に記載のシステムおよび手順は、ハードウェアで、またはハードウェア、ソフトウェア、および/またはファームウェアの組み合わせで実装されることもできる。例えば、１つまたは複数の特定用途向け集積回路（ＡＳＩＣ）を、本明細書で記載されるシステムおよび手順のうちの１つまたは複数を実行するようにプログラムすることができる。
【００２２】
図２を参照すると、処理デバイス１０２は、１つまたは複数のスレッド２００を実行し得る。上述したように、コンピュータシステム１００は、複数の処理デバイス１０２を含み得る。処理デバイス１０２のいずれか１つまたは処理デバイス１０２の組み合わせが、以下の説明において「処理デバイス」１０２に属する機能を実行し得る。スレッドは、処理デバイス１０２によって実行されるアプリケーションによってインスタンス化（instantiated）され得る。プロセッサは、従来の方式で、処理リソースを分散し、実行を１つのスレッド２００から別のスレッドに切り替え得る。スレッド２００は、ハードウェア同期コンポーネント（ＨＳＣ）２０２に命令を発行し得る。ＨＳＣ２０２は命令を受信し、その状態を更新する。ＨＳＣ２０２の状態に基づいて、ＨＳＣ２０２は、スレッドスケジューラ２０６にイベント２０４を出力し得る。スレッドスケジューラ２０６は、その後、１つまたは複数のプロセッサスレッド２００の実行を改変し得る。例えば、スレッドスケジューラ２０６は、イベント２０４に応答して、スレッド２００のうちの１つをブロック、ブロック解除、または分岐させ得る。
【００２３】
ＨＳＣ２０２は、アグリゲータ２０８を含み得る。ＨＳＣ２０２は、複数の状態を含み得、その各々は個別に扱われ得る。各状態は、状態を規定する１つまたは複数の値を含み得る。したがって、アグリゲータ２０８は、或る期間中（例えば、プロセッサ１０２、ＨＳＣ２０２、バス１１２、または他の構成要素の１クロックサイクル）に受信される各状態の各値を参照する命令を集約し得る。
【００２４】
各状態の各値に対して、カウンタ２１０ａ〜２１０ｂは更新され得る。具体的には、各カウンタ２１０ａ〜２１０ｂは、１クロックサイクル中の個々の状態およびその状態の値を参照する命令の数をカウントし得る。
【００２５】
例えば、１クロックサイクル毎に１度などのように周期的に、関係関数（relation function）２１２が各状態に対して実行され得る。関係関数２１２は、各状態に対する出力値を生成し得る。出力値は、次に、閾値比較器２１４に入力される。閾値比較器は、別の入力として閾値２１６をとる。閾値２１６は、各状態について同じであってもよく、或いは１つまたは複数の状態が異なる閾値２１６を有してもよい。
【００２６】
ある状態に対して閾値２１６によって指定された閾値条件を、出力値が満たすと閾値比較器２１４が判定した場合、イベント２０４が生成される。いくつかの実施形態では、閾値比較器２１４は、生成されたイベント２０４の記録を保持し、閾値条件が満たされない場合にイベントをクリア（消去）し得る。例えば、関係関数２１２および比較器２１４の実行の繰り返しにより、閾値条件２１６が満たされることに起因して或る状態に対してイベント２０４が生成され得る。次の繰り返しでは、関係関数２１２の出力値は、もはや閾値条件２１６を満たさない場合もある。したがって、閾値条件２１６がもはや満たされないことの検出に応答して、この事実を示すイベント２０４が生成されてよい。
【００２７】
上述したように、ＨＳＣは、複数の状態を実装し得る。それに応じて、１つまたは複数のＭＵＸ２１８ａ〜２１８ｂは、複数の状態を評価するために同じ回路が使用され得るように、各状態のカウンタ２１０ａ〜２１０ｂの値を関係関数２１２および比較器２１４に選択的に結び付け得る。
【００２８】
図２の図示された構成要素は、同時に実行するスレッド間で任意のタイプの同期を実行するために使用され得る。上記の説明から明らかなように、複数のスレッドは、別のスレッドがＨＳＣ２０２の状態の更新を完了するのをそれぞれが待たなければならないというよりもむしろ、ＨＳＣ２０２の状態のうちの１つを更新し得る。
【００２９】
一例では、ある状態が、先入れ先出しバッファを実装し得る。この例では、カウンタ２１０ａはＦＩＦＯバッファへの書き込み命令をカウントし得、カウンタ２１０ｂはＦＩＦＯバッファへの読み出し命令をカウントし得る。関係関数２１２は、カウンタ２１０ａからカウンタ２１０ｂの値を減算し得る。比較器２１４は、１つまたは複数の閾値に関してこの差分を評価し得る。この差分がゼロの場合、ＦＩＦＯバッファは空である。この差分が第１の閾値よりも小さい場合、ＦＩＦＯバッファは空に近い状態にある。この差分がＦＩＦＯバッファのサイズと等しい場合、ＦＩＦＯバッファは満杯である。この差分が第１の閾値よりも高い第２の閾値（例えば、バッファサイズの９０％）を上回る場合、ＦＩＦＯバッファは満杯に近い状態にある。したがって、閾値２１６は、ほぼ空の状態を示す低い値とほぼ満杯の状態を示す高い値とを指定し得る。次に、閾値比較器２１４は、上記の条件のいずれかを差分が満たすことに基づいて、一部または全て空の複数のイベント、ほぼ空の複数のイベント、満杯の複数のイベント、およびほぼ満杯の複数のイベントを生成し得る。
【００３０】
他の例では、状態は単一の値を含み得、その値が閾値条件を満たすこと（例えば、閾値を上回る又は下回る）応じてイベントが生成される。
【００３１】
図３を参照すると、図示された方法３００は、ＨＳＣ２０２によって実行され得る。方法３００は、上記のように１クロックサイクルごとに一度実行されてよい。方法３００は、ＨＳＣ２０２の各状態の各値に対して実行され得る。方法３００は、１クロックサイクル中にゼロ個以上の命令を受信するステップ（３０２）と、そのサイクル中に受信された命令の数を集計する（例えば、カウントする）ステップ（３０４）と、ステップ３０４における命令の数だけカウンタをインクリメントすることによってなど、各状態の各値ごとにカウンタを更新するステップ（３０６）と、を含む。
【００３２】
図４を参照すると、図示された方法４００は、ＨＳＣ２０２によって実行され得る。方法４００は、１クロックサイクルごとに、またはＮクロックサイクル（Ｎは１より大きい）ごとに１度実行され得る。方法４００は、ＨＳＣ２０２の各状態に対して実行され得る。いくつかの実施形態では、方法４００は、そのクロックサイクル中または直前のクロックサイクル中に状態が変化した場合にのみ、その状態に対して実行される。
【００３３】
方法４００は、状態の値に対して関係関数を実行するステップ（４０２）を含む。関係関数は、或るカウンタの値を別のカウンタの値から減算すること、カウンタ値を合計すること、カウンタ値を掛け合わせること、または何らかの任意の関数にカウンタ値を入力すること、を含み得る。次に、関係関数の出力は、閾値条件と比較される（４０４）。この条件が満たされると判定される（４０６）場合、閾値条件が満たされることを示すイベントが出力される。そのように判定されない場合、方法４００は終了する。いくつかの実施形態では、状態に対して複数の閾値条件が規定され得る。したがって、生成されたイベント（４０８）は、満たされる閾値条件を参照し得る。閾値条件は、関数値の出力が閾値よりも大きいこと、又は小さいこと、或いは複数の閾値の範囲内に位置することを含み得る。
【００３４】
図５を参照すると、図示された方法５００は、処理デバイス１０２或いは処理デバイス１０２に接続され、及びスレッドスケジューリング機能を実行するようにプログラムされた構成要素によって実行され得る。方法５００は、イベントがＨＳＣ２０２によって生成されているか否かを評価するステップ（５０２）を含み得る。生成されていれば、１つまたは複数の影響を受けたスレッドが識別され得る（５０４）。例えば、アプリケーションは、ＨＳＣ状態をインスタンス化し得、更に、そのアプリケーションの１つまたは複数のスレッドをスレッドスケジューラ２０６に登録して、そのＨＳＣ状態からイベントを受け取り得る。そのアプリケーションは、イベントに応答してスレッドスケジューラ２０６によって実行される動作をさらに指定し得る。例えば、そのアプリケーションは、ＨＳＣ状態に対して生成された特定のイベントに応答して、スレッドがブロックされるべきか、または異なるスレッドに分岐することを指定し得る。
【００３５】
したがって、イベントによって影響を受けたスレッドを識別するステップ（５０４）は、そのイベントが生成および／または登録されたＨＳＣ状態に対応するものとしてアプリケーションによって登録されたスレッドを識別して、ステップ５０２で受信されたイベントのイベントタイプを受信することを含み得る。次に、方法５００は、イベント（例えば、ブロック、ブロック解除、分岐、終了など）に応答して実行される動作を識別するステップ（５０６）を含み得る。実行されることになる動作は、特定の状態の特定のイベントに対するスレッドを登録するときに、アプリケーションによってスレッドスケジューラへと指定され得る。したがって、指定された動作は、ステップ５０６においてスレッドスケジューラによって抽出され得る。次に、指定された動作が実行される（５０８）。したがって、影響を受けた各スレッドに対して、指定された動作に従って、ブロック、ブロック解除、分岐、終了などが実行され得る。
【００３６】
本発明は、その趣旨または本質的な特徴から逸脱することなく、他の特定の形態で実施され得る。記載された実施形態は、すべての点において、例示的なものであり、限定的なものではないとみなされるべきである。したがって、本発明の範囲は、前述の説明によってではなく、添付の特許請求の範囲によって示される。特許請求の範囲と均等の意味および範囲内に入るすべての変更は、その範囲内に含まれるべきである。
【図１】
2019505039.tif 000003
【図２】
2019505039.tif 000004
【図３】
2019505039.tif 000005
【図４】
2019505039.tif 000006
【図５】
2019505039.tif 000007
【国際調査報告】
2019505039.tif 000008