(57)【要約】  複数の命令の複数の並列な受動的なスレッドは、複数の共有リソースへのアクセスを"能動的な"および"主体的な"複数のセマフォを用いて調整する。能動的な複数のセマフォは、複数のメッセージを、実行および／または制御回路に、スレッドの状態を変化させるために送信する。スレッドは、未解決の依存性に応答して、スレッドスケジューラにより、非アクティブな状態に置かれ、それは、セマフォにより示されることができる。依存性に対応するスレッド状態変数は、スレッドが非アクティブなモードであることを示すために使用される。依存性が解決された場合、メッセージが制御回路に渡され、依存性変数がクリアされることを引き起こす。クリアされた依存性変数に応答して、スレッドは、アクティブな状態に置かれる。実行は、アクティブな状態の複数のスレッド上で進行することができる。実行のためにスレッドが実行回路にディスパッチされる前または後に、セマフォがスレッドディスパッチャにより構成されることを除いて、主体的なセマフォは、同様な方法で動作する。【特許請求の範囲】
【請求項１】
セマフォに対応する変数の状態を決定する段階、
前記変数が第一の状態の場合、実行のためのスレッドのディスパッチに先立って、複数の命令の前記スレッドのためのセマフォエントリを生成する段階、および
前記変数が第二の状態の場合、前記スレッドのための前記セマフォエントリを生成することに先立って、実行のために複数の命令の前記スレッドをディスパッチする段階
を備える方法。
【請求項２】
前記変数が第三の状態の場合、実行のために複数の命令の前記スレッドをディスパッチし、前記スレッドの実行の間に、前記スレッドのためのセマフォエントリを生成する段階をさらに備える請求項１に記載の方法。
【請求項３】
前記セマフォに対応する前記変数は、セマフォエントリが、複数の命令の前記スレッドに対応する実行回路に、前記セマフォのコントロールを示すメッセージを自動的に送信するかどうかを示す請求項１に記載の方法。
【請求項４】
前記変数が前記第一の状態の場合、複数の命令の前記スレッドのディスパッチに先立って、複数の命令の前記スレッドのための前記セマフォエントリを生成する段階は、
複数の命令の前記スレッドにより、前記セマフォのコントロールを要求するために、セマフォエンティティにメッセージを送信する段階、および
前記セマフォエンティティが前記メッセージを処理したことを示す信号を受信することに応答して、複数の命令の前記スレッドを実行回路にディスパッチする段階
を備える請求項１に記載の方法。
【請求項５】
前記メッセージを前記セマフォエンティティに送信する段階および複数の命令の前記スレッドをディスパッチする段階は、パイプライン型である請求項４に記載の方法。
【請求項６】
前記メッセージは、セマフォ識別子領域、スレッド識別子領域、および前記変数に対応する領域を備える請求項４に記載の方法。
【請求項７】
前記変数が第二の状態の場合、前記スレッドのために前記セマフォエントリを生成することに先立って、実行のために複数の命令の前記スレッドをディスパッチする段階は、
複数の命令の前記スレッドを実行回路にディスパッチする段階、および
複数の命令の前記スレッドの実行が開始したことを示す信号に応答して、複数の命令の前記スレッドにより、前記セマフォのコントロールを要求するために、メッセージをセマフォエンティティに送信する段階
を備える請求項１に記載の方法。
【請求項８】
複数の命令の前記スレッドの前記ディスパッチする段階および前記メッセージを前記セマフォエンティティに送信する段階は、パイプライン型である請求項７に記載の方法。
【請求項９】
前記メッセージは、セマフォ識別子領域、スレッド識別子領域、および前記変数に対応する領域を備える請求項７に記載の方法。
【請求項１０】
前記変数が第三の状態の場合、実行のために複数の命令の前記スレッドをディスパッチし、前記スレッドの実行の間に、前記スレッドのための前記セマフォエントリを生成する段階は、
複数の命令の前記スレッドを実行回路にディスパッチする段階、および
複数の命令の一式の前記実行に応答して、複数の命令の前記スレッドにより、前記セマフォのコントロールを要求するためにメッセージをセマフォエンティティに送信する段階
を備える請求項２に記載の方法。
【請求項１１】
複数の命令の前記一式は、セマフォ取得命令を備える請求項１０に記載の方法。
【請求項１２】
複数の命令の前記一式は、自動解放を伴うセマフォ取得命令を備える請求項１０に記載の方法。
【請求項１３】
セマフォに対応する変数の状態を決定するための手段、
前記変数が第一の状態の場合、実行のためのスレッドのディスパッチに先立って、複数の命令の前記スレッドのためにセマフォエントリを生成するための手段、および
前記変数が第二の状態の場合、前記スレッドのために前記セマフォエントリを生成することに先立って、実行のために複数の命令の前記スレッドをディスパッチするための手段、ならびに
前記変数が第三の状態の場合、実行のために複数の命令の前記スレッドをディスパッチし、前記スレッドの実行の間に前記スレッドのためにセマフォエントリを生成する段階
を備える装置。
【請求項１４】
前記変数が第三の状態の場合、実行のために複数の命令の前記スレッドをディスパッチし、前記スレッドの実行の間に、前記スレッドのためのセマフォエントリを生成するための手段をさらに備える請求項１３に記載の装置。
【請求項１５】
前記変数が前記第一の状態の場合、複数の命令の前記スレッドのディスパッチに先立って、複数の命令の前記スレッドのための前記セマフォエントリを生成するための手段は、
複数の命令の前記スレッドにより、前記セマフォのコントロールを要求するために、セマフォエンティティにメッセージを送信するための手段、および
前記セマフォエンティティが前記メッセージを処理したことを示す信号を受信することに応答して、複数の命令の前記スレッドを実行回路にディスパッチするための手段
をさらに備える請求項１３に記載の装置。
【請求項１６】
前記変数が第二の状態の場合、前記スレッドのために前記セマフォエントリを生成することに先立って、実行のために複数の命令の前記スレッドをディスパッチするための手段は、
複数の命令の前記スレッドを実行回路にディスパッチするための手段、および
複数の命令の前記スレッドの実行が開始したことを示す信号に応答して、複数の命令の前記スレッドにより、前記セマフォのコントロールを要求するために、メッセージをセマフォエンティティに送信するための手段
をさらに備える請求項１３に記載の装置。
【請求項１７】
前記変数が第三の状態の場合、実行のために複数の命令の前記スレッドをディスパッチし、前記スレッドの実行の間に、前記スレッドのための前記セマフォエントリを生成するための手段は、
複数の命令の前記スレッドを実行回路にディスパッチするための手段、および
複数の命令の一式の前記実行に応答して、複数の命令の前記スレッドにより、前記セマフォのコントロールを要求するためにメッセージをセマフォエンティティに送信するための手段
を備える請求項１４に記載の装置。
【請求項１８】
セマフォのコントロールを要求する複数の命令の１つ以上のスレッドを示す前記セマフォのための複数のエントリを維持するためのセマフォエンティティ、
複数の命令の１つ以上のスレッドを実行するための実行回路、および
前記セマフォエンティティおよび前記実行回路に結合されたスレッドディスパッチャであって、前記スレッドディスパッチャは、前記セマフォに対応する変数の状態を決定し、前記変数が第一の状態の場合、実行のための前記実行回路への複数の命令のスレッドのディスパッチに先だって、複数の命令の前記スレッドのためのセマフォエントリが生成されることを引き起こすように前記セマフォエンティティにメッセージを生成し、および前記変数が第二の状態の場合、前記スレッドのための前記セマフォエントリが生成されることを引き起こすために前記セマフォエンティティにメッセージを生成することに先立って、実行のために複数の命令の前記スレッドを前記実行回路にディスパッチするスレッドディスパッチャ
を備える装置。
【請求項１９】
前記変数が第三の状態の場合、前記スレッドディスパッチャは、実行のために複数の命令の前記スレッドをさらにディスパッチし、前記スレッドのためにセマフォエントリを生成しない請求項１８に記載の装置。
【請求項２０】
前記セマフォエンティティは、１つ以上のセマフォを維持する請求項１８に記載の装置。
【請求項２１】
前記メッセージは、セマフォ識別子領域、スレッド識別子領域、および前記変数に対応する領域を備える請求項１８に記載の装置。
【請求項２２】
前記セマフォに対応する前記変数は、セマフォエントリが、複数の命令の前記スレッドに対応する実行回路に、前記セマフォのコントロールを示すメッセージを自動的に送信するかどうかを示す請求項１８に記載の装置。
【請求項２３】
前記変数が第一の状態の場合、実行のための前記実行回路への複数の命令のスレッドのディスパッチに先だって、複数の命令の前記スレッドのためのセマフォエントリが生成されることを引き起こすために、メッセージを前記セマフォエンティティに生成することは、複数の命令の前記スレッドにより、前記セマフォのコントロールを要求するために、メッセージをセマフォエンティティに送信すること、および前記セマフォエンティティが前記メッセージを処理したことを示す信号を受信することに応答して、複数の命令の前記スレッドを、前記実行回路にディスパッチすることを備える請求項１８に記載の装置。
【請求項２４】
前記セマフォエンティティに前記メッセージを送信することおよび複数の命令の前記スレッドをディスパッチすることの前記複数の動作は、パイプライン型である請求項２３に記載の装置。
【請求項２５】
前記変数が第二の状態の場合、前記スレッドのための前記セマフォエントリが生成されることを引き起こすために前記セマフォエンティティにメッセージを生成することに先立って、実行のために複数の命令の前記スレッドを前記実行回路にディスパッチすることは、複数の命令の前記スレッドを前記実行回路にディスパッチすること、および複数の命令の前記スレッドの実行が開始したことを示す信号に応答して、複数の命令の前記スレッドにより、前記セマフォのコントロールを要求するために、メッセージをセマフォエンティティに送信することを備える請求項１８に記載の装置。
【請求項２６】
前記メッセージを前記セマフォエンティティに送信することおよび複数の命令の前記スレッドをディスパッチすることの前記複数の動作は、パイプライン型である請求項２５に記載の装置。
【請求項２７】
前記実行回路は、複数の命令の一式の前記実行に応答して、複数の命令の前記スレッドにより、前記セマフォのコントロールを要求するためにメッセージをセマフォエンティティに生成する請求項１９に記載の装置。
【請求項２８】
メモリコントローラ、
セマフォのコントロールを要求する複数の命令の１つ以上のスレッドを示す前記セマフォのための複数のエントリを維持するためのセマフォエンティティ、
複数の命令の１つ以上のスレッドを実行するための実行回路、ならびに
前記セマフォに対応する変数の状態を決定すること、前記変数が第一の状態の場合、実行のための前記実行回路への複数の命令のスレッドのディスパッチに先だって、複数の命令の前記スレッドのためのセマフォエントリが生成されることを引き起こすように前記セマフォエンティティにメッセージを生成すること、前記変数が第二の状態の場合、前記スレッドのための前記セマフォエントリが生成されることを引き起こすために前記セマフォエンティティにメッセージを生成することに先立って、実行のために複数の命令の前記スレッドを前記実行回路にディスパッチすること、および前記変数が第三の状態の場合、実行のための複数の命令の前記スレッドをディスパッチし、前記スレッドのためのセマフォエントリを生成しないことを目的とする前記セマフォエンティティ、前記実行回路、および前記メモリコントローラに結合されたスレッドディスパッチャ
を備えるシステム。
【請求項２９】
前記変数が第三の状態の場合、前記スレッドディスパッチャは、実行のための複数の命令の前記スレッドをさらにディスパッチし、前記スレッドのためのセマフォエントリを生成しない請求項２８に記載のシステム。
【請求項３０】
前記メッセージは、セマフォ識別子領域、スレッド識別子領域、および前記変数に対応する領域を備える請求項２８に記載のシステム。
【請求項３１】
前記セマフォに対応する前記変数は、セマフォエントリが、複数の命令の前記スレッドに対応する実行回路に、前記セマフォのコントロールを示すメッセージを自動的に送信するかどうかを示す請求項２８に記載のシステム。
【請求項３２】
前記変数が第一の状態の場合、実行のための前記実行回路への複数の命令のスレッドのディスパッチに先だって、複数の命令の前記スレッドのためのセマフォエントリが生成されることを引き起こすために、メッセージを前記セマフォエンティティに生成することは、複数の命令の前記スレッドにより、前記セマフォのコントロールを要求するために、メッセージをセマフォエンティティに送信すること、および前記セマフォエンティティが前記メッセージを処理したことを示す信号を受信することに応答して、複数の命令の前記スレッドを、前記実行回路にディスパッチすることを備える請求項２８に記載のシステム。
【請求項３３】
前記変数が第二の状態の場合、前記スレッドのための前記セマフォエントリが生成されることを引き起こすために前記セマフォエンティティにメッセージを生成することに先立って、実行のために複数の命令の前記スレッドを前記実行回路にディスパッチすることは、複数の命令の前記スレッドを前記実行回路にディスパッチすること、および複数の命令の前記スレッドの実行が開始したことを示す信号に応答して、複数の命令の前記スレッドにより、前記セマフォのコントロールを要求するために、メッセージをセマフォエンティティに送信することを備える請求項２８に記載のシステム。
【請求項３４】
前記セマフォエンティティに前記メッセージを送信することおよび複数の命令の前記スレッドをディスパッチすることの前記複数の動作は、パイプライン型である請求項２８に記載のシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、マルチスレッドプロセッシングのための複数の技術および複数のアーキテクチャに関する。より具体的には、本発明は、マルチスレッドプロセッシングのために複数のセマフォを用いる複数の技術および複数のアーキテクチャに関する。
【背景技術】
【０００２】
"セマフォ"（"クリティカルセクション"または"ミューテックス"とも称される）は、複数のプロセスが複数の共有リソース（例えば、メモリ、複数のファイル）を奪い合う複数の動作の調整または同期化を可能にするハードウェアおよびソフトウェア構造物である。一般的に、セマフォは、複数のプロセスがチェックおよび変更できるオペレーティングシステムメモリ内の指定されたロケーションに記憶される値である。セマフォの値に基づいて、プロセスは、共有リソースにアクセスするか、ある期間待機し、再度セマフォをチェックするかのどちらかができる。
【０００３】
従来の複数のコンピュータシステムの複数のセマフォは、一般的に、複数のソフトウェアルーチンとして、アトミック"テストアンドセット"または複数の命令の同様の複数のタイプ（例えば、ロック、ビットテスト、ビットテストアンドセット、ビットテストアンドリセット）のハードウェアサポートを用いて実装される。このセマフォ実装を用いて、生産者−消費者通信関係は、共有（例えば、グローバル）データおよび１つ以上のセマフォを通して構築される。セマフォは、共有データが、データを修正することを試みている複数のプロセスの選択された１つにより修正されることを可能にし、これは、データの一貫性を提供する。
【０００４】
複数のスレッドが、セマフォを取得するために複数のポーリング動作を実行しなければならないので、このセマフォ構造物は、"受動的"である。ポーリング要求は、さもなければ他の複数の目的に使用されるプロセッサおよびシステムの複数のリソースを消費する。したがって、従来の複数のセマフォは、非効率性をもたらし得る。
【図面の簡単な説明】
【０００５】
本発明は、同様の複数の参照番号が同様の複数の要素を参照する添付の複数の図面の複数の図において、制限としてではなく、例として説明される。
【０００６】
【図１】大規模マルチスレッドプロセッサアーキテクチャの１つの実施形態のブロック図である。
【０００７】
【図２】複数のスレッドディスパッチおよびセマフォ初期化動作の調整の１つの実施形態のフロー図である。
【０００８】
【図３ａ】依存性の概念的な説明であり、ここで、複数のセマフォは、スレッド実行を同期させるために使用されることができる。
【図３ｂ】依存性の概念的な説明であり、ここで、複数のセマフォは、スレッド実行を同期させるために使用されることができる。
【図３ｃ】依存性の概念的な説明であり、ここで、複数のセマフォは、スレッド実行を同期させるために使用されることができる。
【図３ｄ】依存性の概念的な説明であり、ここで、複数のセマフォは、スレッド実行を同期させるために使用されることができる。
【発明の詳細な説明】
【０００９】
下記の説明において、本発明の深い理解を提供するために、説明の複数の目的のために、多数の特定の詳細が説明される。しかしながら、これら特定の複数の詳細なしに本発明が実施できることは、当業者には明白である。他の複数の例では、本発明をあいまいにすることを避けるために、複数の構造および複数のデバイスは、ブロック図形式で示される。
【００１０】
能動的な複数のセマフォの一例の使用の概要
ここで説明されているのは、複数の命令の複数の並列の受動的なスレッド（以下"複数のスレッド"と称する）が、複数の共有リソースへのアクセスを、"能動的"な複数のセマフォを用いて調整する、アーキテクチャおよび関連する複数の方法である。セマフォエンティティが、スレッドの状態を変更させるために、実行および／またはコントロール回路に複数のメッセージを送るので、複数のセマフォは、能動的と称される。例えば、スレッドは、未解決の依存性に応答して、スレッドスケジューラにより、スリープ（または非アクティブ）モードに置かれることができ、これは、セマフォにより示される。依存性に対応するスレッド状態変数は、スレッドがスリープモードであることを示すために使用される。
【００１１】
依存性が解決される場合、メッセージがコントロール回路（例えば、スレッドスケジューラ）に渡され、依存性変数は、クリアされる。クリアされた依存性変数に応答して、スレッドは、アクティブ（または覚醒）状態に置かれる。実行は、アクティブ状態の複数のスレッド上で進行することができる。
【００１２】
上記の例を続けて、スレッドがセマフォを取得することを試みて、できない場合、そのスレッドは、非アクティブ状態に置かれる。スレッドが非アクティブなので、それは、先行技術で要求されるように、セマフォにより示された依存性が解決される時を判断するために、セマフォをポーリングすることはできない。依存性が解決されたことを示すメッセージが受信されるまで（例えば、セマフォエンティティから）、スレッドは、非アクティブの状態のままである。メッセージに応答して、スレッドはアクティブ状態に置かれ、それは、実行が進行することを可能にする。
【００１３】
図１は、大規模マルチスレッドプロセッサアーキテクチャの１つの実施形態のブロック図である。ここで用いられるように、ラベル"大規模マルチスレッド"アーキテクチャは、マルチスレッド実行をサポートできる複数のプロセッサを備えるアーキテクチャを示す。１つの実施形態において、それぞれのプロセッサは、１つまたは複数のスレッドをサポートする。１つのプロセッサ上のマルチスレッディングは、他の複数のスレッドが非アクティブ状態の間に、アクティブな複数のスレッドが実行されることを可能にすることにより、高い実行効率を達成する。セマフォ待ちの非アクティブなスレッドは、複数のプロセッサリソースを消費／浪費しない。大規模マルチスレッドアーキテクチャに関する説明だが、複数のセマフォ構造物および関連する複数の方法は、サポートされる複数のスレッドの数にかかわらず任意のマルチスレッドアーキテクチャに適応できる。
【００１４】
大規模マルチスレッドシステム１００は、実行の間に１つ以上のプロセッシングコアにより使用されるデータおよび命令を記憶するメモリヒエラルキー１１０を備える。メモリヒエラルキー１１０は、ダイナミックランダムアクセスメモリ（ＤＲＡＭ）、複数の命令キャッシュの１つのまたは多くのレベル、複数のデータキャッシュの１つまたは多くのレベル、ならびに／または技術的に知られる任意の方法の複数の共有およびデータキャッシュの１つのまたは多くのレベルを有する。スレッドディスパッチャ１２０は、メモリヒエラルキー１１０に結合され、命令ポインタおよびデータならびに／または新しいスレッドに関連したデータポインタなどの情報を受信する。スレッドディスパッチャ１２０は、同様に、メッセージバス１２５を経由して、複数のプロセッシングコアに結合される。１つの実施形態において、スレッドディスパッチャ１２０は、複数のプロセッシングコアの複数のスレッドリソースを管理することに責任を持つ。新しい保留のスレッドを受信すると、スレッドディスパッチャ１２０は、保留のスレッドを実行すべきリソースを有するプロセッシングコアを選択し、スレッドを、選択されたプロセッシングコアにディスパッチする。プロセッシングコア上に存在するスレッドが完了すると、スレッドディスパッチャ１２０は、報告され、その後、プロセッシングコア上のスレッドリソースを、今後の保留の複数のスレッドのために利用可能にする。
【００１５】
システム１００は、複数のプロセッサコア（１３０、１３１、１３９、１５０、１５１および１５９）を伴い説明され、複数のプロセッサコアのそれぞれは、関連したコントロール回路と共に複数の実行回路を備える。複数のプロセッサコアは、同一でよく、または複数のプロセッサコアは、さまざまな機能を有してよい。複数のプロセッサコアの任意の数が、システム１００に備えられることができる。１つの実施形態において、複数のプロセッサコアは、複数の行で構成され、それぞれの行は、行コントローラを備える。例えば、行コントローラ１４０は、複数のプロセッサコア１３０、１３１および１３９に、行コントロールバス１４５を経由して結合されることができる。同様に、行コントローラ１６０は、複数のプロセッサコア１５０、１５１および１５９に、行コントロールバス１６５を経由して結合されることができる。
【００１６】
複数のプロセッサコアは、同様にセマフォエンティティ１７０に、メッセージバス１２５を経由して結合されることができる。セマフォエンティティ１７０は、ここで説明されるようにセマフォ機能を提供するために、メモリおよびコントロールロジックを備える。１つの実施形態において、セマフォエンティティ１７０は、下記に詳細に説明されるように、複数のメッセージを送信および受信することにより、複数のプロセッサコアと情報のやり取りをする。
【００１７】
スレッドディスパッチャ１２０は、同様に、セマフォエンティティ１７０にメッセージバス１２５を経由して結合される。１つの実施形態において、スレッドディスパッチャは、スレッドの代わりに、下記に詳細に説明されるように、複数のメッセージを送信および受信することにより、セマフォエンティティ１７０と情報のやり取りをする。
【００１８】
それぞれのプロセッシングコア内のコントロール回路は、同じプロセッシングコア上で実行している複数のスレッドの状態を管理するためのスレッドスケジューリング回路を有し、また同様に、複数の命令のアクティブなスレッドを実行するための命令スケジューリング回路を有する。命令実行の間、複数のプロセッシングコアの１つ以上は、複数の共有システムリソースにアクセスすることを試みる。共有システムリソースのコントロールを得るために、対応する実行コアを通して、スレッドは、アクセスされる共有システムリソースに対応するセマフォのコントロールを得なければならない。
【００１９】
１つの実施形態において、セマフォのコントロールを得るために、要求しているプロセッシングコアは、セマフォ要求メッセージをセマフォエンティティ１７０に、メッセージバス１２５経由して送る。セマフォ要求メッセージを送信した後、要求しているスレッドは、非アクティブな状態に置かれ、実行および関連する複数の動作（例えば、複数のセマフォのポーリング）は、停止する。
【００２０】
セマフォ要求メッセージを受信することに応答して、セマフォエンティティ１７０は、要求しているスレッドにセマフォのコントロールを与えるかどうかを判断する。セマフォが与えられる場合、セマフォエンティティ１７０は、セマフォ承認メッセージを要求しているスレッドに送る。セマフォ承認メッセージに応答して、要求しているスレッドは、アクティブな状態に戻り、要求されたリソースを用いた実行が継続する。スレッドが共有リソースの使用を完了した場合、スレッドは、セマフォ解放メッセージをセマフォエンティティ１７０に送る。セマフォ解放メッセージに応答して、セマフォエンティティ１７０は、セマフォを解放し、他の複数のスレッドがシステムリソースへのアクセスを得ることを可能にする。
【００２１】
１つの実施形態において、複数のセマフォは、複数の命令（複数のセマフォ命令）によりサポートされ、その複数の命令は、複数のプロセッシングコアとセマフォエンティティとの間で例えば、メッセージバス１２５を経由して渡される複数のメッセージ（複数のセマフォメッセージ）と同様にプロセッシングコアにより実行される。代わりの複数の実施形態において、異なるおよび／または追加の複数メッセージまたは複数の命令がサポートされることができる。
【００２２】
連結リストに基づくセマフォエンティティ
１つの実施形態において、従来のセマフォ毎の複数のキューは、それぞれのセマフォのための連結リストを形成するために使用される複数のエントリを有するバッファプールにより置き換えられる。したがって、それぞれのセマフォは、バッファプール内の複数のエントリから形成される連結リストへのヘッドポインタであることができる。連結リストは、双方向連結リストまたは単方向連結リストのどちらかであることができる。
【００２３】
１つの実施形態において、セマフォテーブルは、サポートされるそれぞれのセマフォのためのポインタを有する。１つの実施形態において、セマフォテーブル内の複数のポインタは、対応するセマフォのために使用される連結リストのヘッドを示す複数のヘッドポインタである。フリープールポインタは、バッファプールのヘッドを示し、使用されない複数のセマフォエントリは、ＮＵＬＬポインタを有する。
【００２４】
１つの実施形態において、それぞれのセマフォエントリは、解放状態領域、ａｃｋ抑制領域、スレッド識別子領域、前ポインタおよび次ポインタを含む。代わりの複数の実施形態において、他のおよび／または異なる複数の領域が使用され、例えば、前ポインタは、省かれることができる。１つの実施形態において、それぞれのセマフォは、セマフォに対応する連結リストが空かどうかを示すために、同様に１つのビット（または他の標識）を含むことができる。
【００２５】
複数のセマフォメッセージ
セマフォ取得メッセージ（ＡＣＱ＿ＭＳＧ）は、スレッドまたはスレッドの代わりのスレッドディスパッチャのために、セマフォの所有権をセマフォエンティティへ要求をするために使用される。１つの実施形態において、ＡＣＱ＿ＭＳＧは、セマフォ識別子領域、スレッド識別子領域、"自動解放"領域および"承認抑制"（ａｃｋ抑制）領域を含む。自動解放領域は、ヘッド依存性のみを伴うスレッドのために使用される。つまり、スレッドは、前の複数のスレッドに依存するが、次の複数のスレッドは、そのスレッドに依存しない。ａｃｋ抑制領域は、テール依存のみを伴うスレッドのために使用される。つまり、スレッドは、任意の前の複数のスレッドに依存しないが、スレッドは、それに依存する次の複数のスレッドを有する。ＡＣＱ＿ＭＳＧは、スレッドディスパッチャまたはスレッドに関連する他のコントロール回路により発行されることができる。
【００２６】
１つの実施形態において、ＡＣＱ＿ＭＳＧを受信すると、セマフォエンティティは、フリープールリストからヘッドエントリを取り除きおよびそれを選択されたセマフォのテールに加えることにより、要求スレッドのためのセマフォエントリを対象のセマフォ（セマフォ識別子領域により指定される）の連結リストにエンキューする。セマフォエントリの複数の領域は、ＡＣＱ＿ＭＳＧ内の情報に基づいて更新され、スレッド識別子領域、解放状態領域およびａｃｋ抑制領域は、ＡＣＱ＿ＭＳＧ内の要求者のスレッド識別子、自動解放領域およびａｃｋ抑制領域により置き換えられる。ＡＣＱ＿ＭＳＧの前にセマフォ連結リストが空ではない場合、セマフォエンティティによりメッセージは送られない。あるいは、ＡＣＱ＿ＭＳＧが受信される前にセマフォ連結リストが空の場合、以下の複数のアクションの１つがとられる。
【００２７】
ａｃｋ抑制領域がセットされない場合、スレッド識別子と共にＡＣＫ＿ＭＳＧが、セマフォエンティティからメッセージバス１２５を経由して要求するスレッドに送られる。ａｃｋ抑制領域がセットされる場合、ＡＣＫ＿ＭＳＧは、セマフォエンティティから送られない。自動解放領域がセットされない場合、エンキューされたセマフォエントリは、セマフォ連結リスト内に維持される。したがって、セマフォ連結リストは、空ではなく、セマフォは、スレッドにより現在所有される。自動解放領域がセットされる場合、エンキューされたセマフォエントリは、セマフォ連結リストから取り除かれ、したがって、セマフォ連結リストは空である。
【００２８】
セマフォ解放メッセージ（ＲＥＬ＿ＭＳＧ）は、スレッドが、セマフォの所有権を解放するようにセマフォエンティティに要求するために使用される。１つの実施形態において、ＲＥＬ＿ＭＳＧは、セマフォ識別子領域およびスレッド識別子領域を有する。１つの実施形態において、ＲＥＬ＿ＭＳＧは、セマフォの所有権を有するスレッドに関連する制御回路にのみ発行されることができ、すなわち、スレッド識別子は、セマフォ連結リストのトップである。ＲＥＬ＿ＭＳＧを受信すると、セマフォエンティティは、セマフォ連結リストのヘッドからエントリを取り除く。
【００２９】
他の実施形態において、ＲＥＬ＿ＭＳＧは、セマフォを共有している任意のスレッドに関連するコントロール回路により発行されることができる。ＲＥＬ＿ＭＳＧを受信すると、セマフォエンティティは、連結リスト内のエントリの位置にかかわらず、セマフォ連結リスト内の対応するエントリへの解放状態領域をアンセットする。セマフォエントリが連結リストのヘッドの場合、エントリは、セマフォ連結リストのヘッドから取り除かれる。次のエントリは、連結リストのヘッドになる。次のエントリがＮＵＬＬでない場合、それは調べられる。連結リストの新しいヘッドがセットされた解放状態領域を有する場合、それは、再度、セマフォ連結リストのヘッドから除外される。
【００３０】
１つの実施形態において、この再帰プロセスは、連結リストのヘッドがＮＵＬＬ（セマフォキューが空）または連結リストのヘッドがアンセットされた解放状態領域を有する（エントリに対応するスレッドからのセマフォの解放を待つ）のどちらかまで続く。連結リストのヘッドがＮＵＬＬではないおよびａｃｋ抑制領域がセットされない場合、ＡＣＫ＿ＭＳＧは、セマフォエンティティにより、エントリのスレッド識別子領域により識別されるスレッドへ送られる。連結リストのヘッドがＮＵＬＬではなくおよびａｃｋ抑制領域がセットされる場合、ＡＣＫ＿ＭＳＧは、送られない。
【００３１】
セマフォ承認メッセージ（ＡＣＫ＿ＭＳＧ）は、要求されたセマフォが取得されたことをスレッドに通知するために、セマフォエンティティにより生成される。１つの実施形態において、ＡＣＫ＿ＭＳＧは、セマフォ識別子領域およびスレッド識別子領域を有する。ＡＣＫ＿ＭＳＧは、セマフォエンティティによりのみ発行され、スレッド識別子領域内により識別されるスレッドを実行しているプロセッシングコアにより受信される。
【００３２】
ＡＣＫ＿ＭＳＧを受信すると、受信するプロセッシングコアは、スレッド識別子領域により識別されるスレッドのセマフォ待ち状態領域をアンセットする。スレッドが非アクティブな状態の場合、スレッド状態は、アクティブな状態に変更される。
【００３３】
複数のセマフォ命令
セマフォ取得（ＡＣＳ）命令は、ＡＣＱ＿ＭＳＧメッセージが、要求されるセマフォのセマフォ識別子、要求するスレッドのスレッド識別子と共におよびアンセットされた自動解放領域と共にセマフォエンティティに送られることを引き起こす。スレッドは、セットされたセマフォ待ち状態領域と共に非アクティブな状態に置かれる。ＡＣＳ命令は、セマフォ解放（ＲＬＳ）命令（下記で説明される）と対をなす（後に続く）。ＡＣＳ−ＲＬＳ命令対は、例えば、複数のクリティカルセクションアプリケーションのために使用される。
【００３４】
自動解放（ＡＳＲ）命令を伴うセマフォ取得命令は、ＡＣＱ＿ＭＳＧが、要求されるセマフォのためのセマフォ識別子、要求するスレッドのスレッド識別子と共におよびセットされた自動解放領域と共にセマフォエンティティに送られることを引き起こす。スレッドは、セットされたセマフォ待ち状態領域と共に、非アクティブな状態に置かれる。１つの実施形態において、ＡＳＲ命令はＲＬＳ命令と対をなすことはできない。１つの実施形態において、ＡＳＲ命令は、ヘッド依存性のみを伴う複数のスレッドのために使用される。
【００３５】
セマフォ待ち（ＷＴＳ）命令は、セマフォ待ちスレッド状態領域がチェックされることを引き起こす。状態領域がセットされる場合、スレッドは、非アクティブな状態に置かれる。状態領域がセットされない場合、スレッドは、アクティブな状態のままである。ＷＴＳ命令に応答して、セマフォエンティティにメッセージは送られない。ＷＴＳ命令の使用は、セマフォが、スレッドディスパッチャにより、ＡＣＱ＿ＭＳＧを用いてスレッドの代わりに、スレッドディスパッチ時刻に予め取得されたことを暗に意味する。スレッドディスパッチャにより以前発行されたＡＣＱ＿ＭＳＧ内でａｃｋ抑制領域がセットされる場合、ＷＴＳ命令は、使用されない。
【００３６】
セマフォ解放（ＲＬＳ）命令は、ＲＥＬ＿ＭＳＧが、解放されるセマフォのためのセマフォ識別子および解放するスレッドのためのスレッド識別子と共にセマフォエンティティに送られることを引き起こす。解放するスレッドは、アクティブな状態のままである。ＡＣＳ命令が解放するスレッドのために予め発行された場合、１つのＲＬＳ命令のみが発行される。ＡＳＲ命令が解放するスレッドのために予め発行された場合、ＲＬＳ命令は発行されない。ＷＴＳ命令が解放するスレッドのために発行された場合、ＷＴＳ命令は、スレッドディスパッチャにより送られるＡＣＱ＿ＭＳＧの自動解放領域に依存して、ＲＬＳ命令に続かれあるいは続かれない。自動解放領域がアンセットされる場合、ＲＬＳ命令は、発行されるべきではない。自動解放領域がセットされる場合、ＲＬＳ命令は、ＷＴＳ命令に続くべきである。
【００３７】
能動的なセマフォの例の取得
複数の命令のスレッドがプロセッシングコアにより実行されるので、複数の命令は、複数のリソースが利用可能な場合に実行される。例えば、共有メモリロケーションなどのセマフォを有するリソースが要求された場合、セマフォの所有者は、リソースにアクセスすることを要求される。したがって、複数の命令のスレッドの実行は、セマフォが必要とされるまで、技術的に知られる任意の方法で成し遂げられる。
【００３８】
１つの実施形態において、セマフォが必要とされる場合、セマフォ取得（ＡＣＳ）命令が実行される。ＡＣＳ命令は、セマフォを要求する複数の命令のスレッドを実行するプロセッシングコアにより実行されることができる。ＡＣＳ命令の実行の一部としてまたはＡＣＳ命令の実行に応答して、セマフォ取得メッセージ（ＡＣＱ＿ＭＳＧ）が、セマフォエンティティへ、スレッドを実行しているプロセッシングコアにより、メッセージバスを経由して送られる。ＡＣＱ＿ＭＳＧのための１つのフォーマットは、上記で説明される。他の複数のフォーマットも同様に使用されることができる。
【００３９】
ＡＣＳ命令の実行の一部としてまたはＡＣＳ命令の実行に応答して、セマフォを要求するスレッドは、セットされたセマフォ待ち状態領域を伴い非アクティブな状態に置かれる。スレッドを非アクティブな状態に置くことにより、スレッド内の複数の命令は、実行されず、スレッドは、最初のセマフォ要求が拒絶されるなら要求されるセマフォをポーリングすることを含む。スレッドを非アクティブな状態に置くことにより、複数のプロセッサリソースおよびシステムバンド幅は、セマフォを待つスレッドにより消費されない。マルチスレッドをサポートするプロセッシングコアのために、複数のプロセッサリソースおよびシステムバンド幅は、他のアクティブな複数のスレッドにより使用されることができる。
【００４０】
セマフォエンティティは、ＡＣＱ＿ＭＳＧを受信し、要求者情報エントリを、対象セマフォの連結リスト内に置く。セマフォが所有されないまたは他のスレッドにより制御される場合、他の複数のエントリが存在しないので、セマフォエントリは、セマフォ連結リストのヘッドに配置される。セマフォが所有されるまたは他のスレッドにより制御される場合、セマフォエントリは、セマフォ連結リストのテールに配置される。１つの実施形態において、連結リストのテールは、バッファプール内の複数の連結リストエントリをヘッドからテールまで詳細に検討することにより識別され、新しいエントリは、新しいテールエントリになる。他の実施形態において、連結リストのテールは、セマフォテーブルに記憶される連結リストのテールポインタにより直接識別される。
【００４１】
複数のスレッドがセマフォに対応するリソースの使用を完了した時に、セマフォを有するスレッドは、セマフォのコントロールを解放し、これは下記において詳細に説明される。セマフォが解放される場合、セマフォ連結リストのヘッドの対応するセマフォエントリは、取り除かれ、連結リスト内の次のセマフォエントリが、連結リストのヘッドになる。
【００４２】
セマフォエントリがセマフォ連結リストのヘッドになる場合、その複数の状態領域が、セマフォエンティティにより調べられる。ａｃｋ抑制領域がセットされない場合、承認メッセージ（ＡＣＫ＿ＭＳＧ）が、セマフォエンティティからセマフォエントリに関連するスレッドまで送信される。ＡＣＫ＿ＭＳＧのための１つのフォーマットは、上記で説明される。他の複数のフォーマットも同様に使用されることができる。ＡＣＫ＿ＭＳＧは、受信するエンティティ（例えば、スレッド）に、受信するエンティティに対応するセマフォのコントロールが与えられたことを示す。
【００４３】
ＡＣＫ＿ＭＳＧに応答して、対応するスレッドは、アクティブにされる。アクティブにされた場合、スレッド内の複数の命令の処理は、再開し、セマフォに関連する共有リソースは、アクセスされることができる。スレッドが共有リソースへのアクセスを完了した場合、セマフォは、解放され、それは、下記においてより詳細に説明される。
【００４４】
能動的なセマフォの例の解放
１つの実施形態において、セマフォ解放（ＲＬＳ）命令が実行された場合、セマフォは、解放される。ＲＬＳ命令は、セマフォを要求する複数の命令のスレッドを実行するプロセッシングコアにより実行されることができる。ＲＬＳ命令の実行の一部として、またはＲＬＳ命令の実行に応答して、セマフォ解放メッセージ（ＲＥＬ＿ＭＳＧ）が、セマフォエンティティに送信される。ＲＥＬ＿ＭＳＧのための１つのフォーマットは、上記で説明される。他の複数のフォーマットも同様に使用されることができる。
【００４５】
ＲＥＬ＿ＭＳＧに応答して、セマフォエンティティは、ＲＥＬ＿ＭＳＧのスレッド識別子領域をセマフォ連結リストと適合させる。セマフォエンティティは、対応するセマフォエントリが連結リストのヘッドかどうかをチェックする。対応するセマフォエントリが連結リストのヘッドである場合、セマフォエンティティは、連結リストのヘッドからスレッドエントリを取り除く。連結リスト内の次のエントリは、ヘッドエントリとなる。セマフォは、その後、新しいヘッドエントリに対応するスレッドに与えられる。対応するセマフォエントリが連結リストのヘッドではない場合、セマフォエンティティは、セマフォエントリの解放状態領域をセットする。
【００４６】
複数の動作モデル
使用される連結リストの構造に基づいて、複数のセマフォは、連想的な複数のセマフォまたは順序的な複数のセマフォとしてクラス分けをされることができる。セマフォエンティティからのＡＣＫ＿ＭＳＧの送信に基づいて、複数のセマフォは、能動的な複数のセマフォまたは主体的な複数のセマフォとしてクラス分けをされることができる。したがって、複数のセマフォの４つのタイプがサポートされることができる。
【００４７】
連想的な複数のセマフォの１つの実施形態の概要
連想的なセマフォは、現在の複数のスレッドがセマフォに任意の順序でアクセスすることを可能にする。１つの実施形態において、セマフォは、セッションの始めにＮＵＬＬ連結リスト（または空の連結リストを示す１つのビット）と共に、スレッドディスパッチャにより初期化される。スレッドディスパッチャからセマフォエンティティに他のメッセージは送られない。セマフォ連結リストは、複数の命令の複数のスレッドを実行している実行回路により、すぐさま構築される。
【００４８】
１つの実施形態において、スレッドは、ＡＣＳまたはＡＳＲ命令を実行することにより、連想的なセマフォを要求する。スレッドは、ＲＬＳ命令を実行することにより、連想的なセマフォを解放する。１つの実施形態において、新しいＡＣＱ＿ＭＳＧは、要求するスレッドに対応するエントリがセマフォ連結リストのテールに置かれることをもたらす。これは、到着順サービス（ＦＣＦＳ）セマフォモデルを提供する。
【００４９】
順序的な複数のセマフォの１つの実施形態の概要
順序的なセマフォは、現在の複数のスレッドがセマフォに、所定の順序でアクセスすることを可能にする。順序は、ディスパッチの時に、スレッドディスパッチャにより予定される。順序は、アプリケーション依存となり得る。スレッドディスパッチは、本来逐次的であるので、スレッドディスパッチャは、ＡＣＱ＿ＭＳＧを、それぞれのディスパッチされるスレッドの代わりに、セマフォエンティティに、その順序に従ってセマフォ連結リストを構築するために送信する。
【００５０】
クリティカルセクションに入ってくるスレッドは、セマフォの所有権を待つために、ＷＴＳ命令を使用する。スレッドがすでにセマフォ連結リストに配置されているので、ＡＣＳおよびＡＳＲ命令は、使用されない。１つの実施形態において、セマフォエンティティは、連結リスト順序に従って、セマフォのコントロールを提供することのみができる。セマフォを待っている複数のスレッドは、連結リストの順序でＡＣＱ＿ＭＳＧを受信する。
【００５１】
能動的な複数のセマフォの１つの実施形態の概要
上記で説明されたように、能動的なセマフォと共にＡＣＱ＿ＭＳＧは、非アクティブな状態からアクティブな状態へのスレッドの遷移を引き起こすために使用される。セマフォエンティティは、１つまたは多数のＡＣＱ＿ＭＳＧを、複数のスレッドを実行している実行回路から受信する。セマフォエンティティは、１つのＡＣＫ＿ＭＳＧを、セマフォ連結リストのヘッドのスレッドに対応する実行回路に送信のみをする。セマフォ連結リストのヘッドを取り除くと、セマフォエンティティは、連結リストの新しいヘッドの状態を調べ、次のＡＣＫ＿ＭＳＧを、セマフォ連結リストの新しいヘッドに対応する実行回路に送信する。能動的なセマフォは、同様に連想的なセマフォであることができる。
【００５２】
主体的な複数のセマフォの１つの実施形態の概要
主体的なセマフォは、唯一のＡＣＫ＿ＭＳＧを、スレッドが非アクティブな状態であるにせよないにせよ、セマフォ連結リストのヘッドのスレッドに送信する。これは、唯一のＡＣＫ＿ＭＳＧがスレッドに送信されるように、スレッドディスパッチャにより予め送信されたＡＣＱ＿ＭＳＧと共に、順序的な複数のセマフォを用いる複数のスレッドに適用する。順序的なセマフォを用いるスレッドは、ＷＴＳおよび／またはＲＬＳ命令を有する。
【００５３】
主体的なセマフォのために、ＡＣＫ＿ＭＳＧは、セマフォエンティティにより、セマフォ連結リストのヘッドのスレッドに自動的に送られる。１つの実施形態において、"リスク条件"の可能性が存在し、リスク条件は、スレッドからのエントリのタイミングがスレッドディスパッチャによりセマフォ連結リストにエンキューされ、その時に、スレッドが実行回路に可視である場合に生じる。両方のアクションは、スレッドディスパッチャにより開始されるが、異なる複数のデータパスを通じて生じるため、これら複数のイベントのタイミングは考慮されなければならない。
【００５４】
スレッド実行がセマフォ構成の前に開始する場合、スレッド内にＷＴＳ命令がある場合、リスク条件はない。セマフォ待ちスレッド状態変数は、スレッドディスパッチャによりセットされるので、たとえスレッドのＷＴＳ命令が、スレッドがセマフォ連結リストにエンキューされる前に到着されても、リスク条件は、生じない。ＷＴＳ命令は、メッセージをセマフォエンティティに送ることなくスレッドを非アクティブな状態に入らせる。セマフォエンティティがＡＣＫ＿ＭＳＧをスレッドに送る場合、実行回路は、スレッドを再度アクティブにする。
【００５５】
セマフォが、スレッドディスパッチャにより、セットされたａｃｋ抑制領域と共に構成される場合、リスク条件は起こる。この状況において、スレッドは、非アクティブな状態に置かれない。代わりに、スレッドのためのセマフォが構成される前にスレッドがＲＬＳ命令に到達し、ＲＥＬ＿ＭＳＧをセマフォエンティティに送る場合、セマフォエンティティは、ＲＥＬ＿ＭＳＧを処理する状態ではない。このリスク条件を避けるために、スレッド実行およびセマフォエンティティは、ＲＥＬ＿ＭＳＧがスレッドディスパッチャにより発行されたＡＣＱ＿ＭＳＧを通過しないことを保証することができる。
【００５６】
したがって、１つの実施形態において、リスク条件を避けるために、ａｃｋ抑制領域がセットされない場合、スレッドディスパッチャは、セマフォ構成の完了の前に、スレッド構成を完了させる。ａｃｋ抑制領域がセットされる場合、スレッドディスパッチャは、スレッド構成の完了の前にセマフォ構成を完了させる。スレッドディスパッチャは、用意のできたスレッドを連続的にディスパッチするので、逐次的な複数の動作は、必要な複数の順序づけを保証できる。
【００５７】
セマフォ構成の前にスレッド構成が完了される場合、スレッドディスパッチャは、スレッドをディスパッチでき、セマフォの構成を引き起こすためのメッセージを送る前にスレッド構成が完全であることを示す信号を待つ。スレッド構成の前にセマフォ構成が完了される場合、スレッドディスパッチャは、セマフォの構成を開始するためのメッセージを送信でき、スレッドをディスパッチする前にセマフォが完全であることを示す信号を待つ。連続的な複数の構成は、不必要にディスパッチャからのスループットを制限するので、複構成の複数の動作は、パイプラインにされることができる。
【００５８】
図２は、複数のスレッドディスパッチおよびセマフォ初期化動作の調整の１つの実施形態のフロー図である。１つの実施形態において、スレッドディスパッチャは、セマフォメッセージが送信されるためにａｃｋ抑制領域がセットされているかどうかを判断する（２１０）。代わりの複数の実施形態において、他の複数のシステムコンポーネントが、ａｃｋ抑制領域がセットされているまたはされるかどうかを判断できる。
【００５９】
ａｃｋ抑制領域がセットされる場合（２１０）、スレッドディスパッチャは、セマフォ要求メッセージ（例えば、ＡＣＱ＿ＭＳＧ）をセマフォエンティティに送る（２２０）。セマフォエンティティは、要求メッセージを処理し、要求メッセージが処理された場合（例えば、要求するスレッドのための連結リストエントリがエンキューされた）、"セマフォ構成完了"信号をスレッドディスパッチャに送信する。"セマフォ構成完了"信号は、任意の形式をとることができ、例えば、１ビット信号を送信するために信号ラインが使用されることができ、またはメッセージバスを経由してメッセージが送信されることができる。
【００６０】
スレッドディスパッチャは、セマフォエンティティからの"セマフォ構成完了"信号を待つ（２３０）。"セマフォ構成完了"信号を待つ間、スレッドディスパッチャは、例えば、他の複数のスレッドをディスパッチまたはスレッドがディスパッチされない複数の動作を実行することができる。"セマフォ構成完了"メッセージを受信後、スレッドディスパッチャは、スレッドを実行回路にディスパッチする（２４０）。スレッドは、その後、実行回路により実行される（２５０）。
【００６１】
ａｃｋ抑制領域がセットされていない場合（２１０）、スレッドディスパッチャは、スレッドを実行回路にディスパッチする（２１５）。スレッドを実行回路にディスパッチした後、スレッドディスパッチャは、実行回路からの"スレッド構成完了"信号を待つ（２２５）。１つの実施形態において、実行回路がスレッドの実行を開始しはじめる時、実行回路は、"スレッド構成完了"信号をスレッドディスパッチャに送る。"スレッド構成完了"信号は、任意の形式をとることができ、例えば、１ビット信号を送信するために１つのラインが使用されることができ、またはメッセージバスを経由してメッセージが送信されることができる。スレッドは、その後、実行回路により実行される（２５０）。
【００６２】
"スレッド構成完了"信号を待つ間、スレッドディスパッチャは、例えば、他の複数のスレッドをディスパッチしまたはセマフォ要求メッセージが送信されない複数の動作を実行することができる。"スレッド構成完了"メッセージを受信した後、スレッドディスパッチャは、セマフォエンティティに、セマフォ要求メッセージを送信する（２３５）。これは、スレッド実行が開始されたまたはスレッド実行の開始と同時に生じる。
【００６３】
図２の例は、スレッド実行および主体的なセマフォを伴うセマフォ構成の調整の逐次的な例を提供する。上記で述べられたように、図２に関して説明された複数の動作は、パイプライン方式でも同様に実行されることができる。
【００６４】
スレッド同期化
複数の図３ａ−３ｄは、複数のセマフォがスレッド実行を同期させるために使用されることができる依存性の概念的な複数の説明である。図３ａは、１：１：１（一対一）依存性を説明する。図３ａの依存性は、強い逐次的で順序的な依存性または連想的な依存性である。強い逐次的で順序的な依存性に対し、１つの主体的な、順序的なセマフォが使用されることができる。１つの実施形態において、セマフォを要求するためにスレッドディスパッチャからセマフォエンティティに送られるＡＣＱ＿ＭＳＧにおいて、ａｃｋ抑制領域および自動解放領域は、共にアンセットされる。複数の命令のスレッドは、セマフォを得ておよび解放するためにＷＴＳ−ＲＬＳ命令対を有する。
【００６５】
連想的な依存性に対し、１つの能動的な、連想的なセマフォが使用されることができる。１つの実施形態において、セマフォを要求するためにスレッドを実行する実行回路からセマフォエンティティに送られるＡＣＱ＿ＭＳＧにおいて、ａｃｋ抑制領域および自動解放領域は、共にアンセットされる。複数の命令のスレッドは、セマフォを得ておよび解放するためにＡＣＳ−ＲＬＳ命令対を有する。
【００６６】
図３ｂは、１：Ｎ（１対多数）依存性を説明し、ここで１つのスレッドはＮ個の他のスレッドに対するヘッド依存性を有し、ここでＮ個の他のスレッドは、それぞれに対し依存性を有さない。ここで、Ｎは、１以上の正の整数である。１：Ｎ依存性に対し、１つの主体的な、順序的なセマフォが使用されることができる。１つの実施形態において、Ｎ個の依存しないスレッドに対し、複数のＡＣＱ＿ＭＳＧがＮスレッドを代表してスレッドディスパッチャにより送られる。スレッドディスパッチャからセマフォエンティティに、セマフォを要求するために送られるＡＣＱ＿ＭＳＧにおいて、ａｃｋ抑制領域は、セットされ、自動解放領域は、アンセットされる。他のＮスレッドへのヘッド依存性を有する１つのスレッドに対し、ＡＣＱ＿ＭＳＧは、スレッドディスパッチャにより同様に送られる。セマフォを要求するためのＡＣＱ＿ＭＳＧにおいて、ａｃｋ抑制領域は、アンセットされ、自動解放領域は、セットされる。複数の命令のＮスレッドは、セマフォを解放するためにＲＬＳ命令のみを有する。複数の命令の１つのスレッドは、セマフォを得ておよび解放するためのＷＴＳ−ＲＬＳ命令対を有する。
【００６７】
図３ｃは、Ｎ：１（多数対１）依存性を説明し、ここでＮスレッドは、１つのスレッドへのヘッド依存性を有するが、Ｎスレッドは、それぞれへの依存性は有さない。Ｎ：１依存性に対し、１つの主体的な、順序的なセマフォが使用されることができる。１つの実施形態において、スレッドディスパッチャは、Ｎ個の依存するスレッドおよび１つの依存したスレッドの両方の代わりにＡＣＱ＿ＭＳＧを送信することに責任を持つ。１つの実施形態において、１つの依存したスレッドのために、セマフォを要求するためのＡＣＱ＿ＭＳＧにおいて、ａｃｋ抑制領域は、セットされ、および自動解放領域は、アンセットされる。Ｎ個の依存するスレッドのために、セマフォを要求するためのＡＣＱ＿ＭＳＧにおいて、ａｃｋ抑制領域は、アンセットされ、および自動解放領域は、セットされる。複数の命令の１つの依存したスレッドは、セマフォを解放するためのＲＬＳ命令のみを有する。複数の命令のＮ個の依存するスレッドは、セマフォを得ておよび解放するためのＷＴＳ−ＲＬＳ命令対を有する。
【００６８】
図３ｄは、Ｎ：Ｍ（多数対多数）依存性を説明し、ここで、Ｎ個の依存するスレッドは、Ｍ個の依存したスレッドへのヘッド依存性を有する。この場合、Ｎ個の依存するスレッドは、互いに依存せず、およびＭ個の依存したスレッドは、互いに依存しない。Ｎ：Ｍ依存性のケースは、上記で説明された１：１：１、１：ＮおよびＮ：１の複数のケースと比較して、より一般的なケースである。Ｎ：Ｍ依存性のために、１つの主体的な、順序的なセマフォが使用されることができる。１つの実施形態において、スレッドディスパッチャは、Ｎ個の依存するスレッドおよびＭ個の依存したスレッドの両方の代わりに、ＡＣＱ＿ＭＳＧを送信することに責任を持つ。１つの実施形態において、Ｍ個の依存したスレッドのために、セマフォを要求するためのＡＣＱ＿ＭＳＧにおいて、ａｃｋ抑制領域は、セットされ、自動解放領域は、アンセットされる。Ｎ個の依存するスレッドのために、セマフォを要求するためのＡＣＱ＿ＭＳＧにおいて、ａｃｋ抑制領域は、アンセットされ、および自動解放領域は、セットされる。複数の命令のＭ個の依存したスレッドは、セマフォを解放するためにＲＬＳ命令のみを有する。複数の命令のＮ個の依存するスレッドは、セマフォを得ておよび解放するために、ＷＴＳ−ＲＬＳ命令対を有する。
【００６９】
複数の図３ａ−３ｄの依存性は、より複雑な複数の依存性をサポートするために使用されることができる。例えば、Ｎ：１：Ｎ依存性のために、２つの主体的な、順序的な複数のセマフォが使用される。Ｎ：１依存性は、上記で説明されたように、図３ｃに関して処理され、１：Ｎ依存性は、上記で説明されたように、図３ｂに関して処理される。
【００７０】
結論
明細書における"１つの実施形態"または"一実施形態"への参照は、実施形態に関連して説明された特定の特徴、構造、または特性が、本発明の少なくとも１つの実施形態に含まれることを意味する。本明細書のさまざまな場所での語句"１つの実施形態において"の複数の出現は、必ずしも全て同じ実施形態を参照していない。
【００７１】
前述の明細書において、本発明は、特定のその複数の実施形態を参照して説明された。しかしながら、さまざまな修正および変更が、本発明の上位精神および範囲に反することなくそれになされ得ることは、明白である。したがって、本明細書および複数の図面は、制約ではなく説明的な意義と見なされるべきである。
【図１】
2007517328.tif 000002
【図２】
2007517328.tif 000003
【図３ａ】
2007517328.tif 000004
【図３ｂ】
2007517328.tif 000005
【図３ｃ】
2007517328.tif 000006
【図３ｄ】
2007517328.tif 000007
【国際調査報告】
2007517328.tif 000008
2007517328.tif 000009