(57)【要約】  アクティブおよび／またはプロアクティブセマフォ機構、および、スレッド同期化の技術は、多様な視覚および図形データの処理技術に適用できる。【特許請求の範囲】
【請求項１】
表示するイメージの第１の図形要素を処理する第１の命令スレッドを実行するステップと、
表示するイメージの第２の図形要素を処理する第２の命令スレッドを実行するステップと、
前記第１の図形要素と前記第２の図形要素の間における関係に関連する予め定められた条件セットのうち少なくとも１つが検知されたことに応じて、前記第１の命令スレッドを非活動状態にするステップと、
セマフォ・エンティティからメッセージを受信するまで前記第１の命令スレッドを前記非活動状態に維持するステップと、
前記セマフォ・エンティティから前記メッセージを受信したことに応じて、前記第１の命令スレッドの実行を再開するステップと
を備える方法。
【請求項２】
前記予め定められた条件セットが未解決の依存関係を備える請求項１に記載の方法。
【請求項３】
前記予め定められた条件セットが前記セマフォに対応するリソースが利用できないことを示す前記セマフォからの無反応を備える請求項１に記載の方法。
【請求項４】
前記第１の命令スレッドおよび前記第２の命令スレッドの状態表示を維持するステップを更に備える請求項１に記載の方法。
【請求項５】
各スレッドの前記状態表示が、そのスレッドに関連するスレッドの依存関係が存在する場合において、当該依存関係に相当する状態変数を備える請求項４に記載の方法。
【請求項６】
前記第１のスレッドが第１のセットのレイトレーシング命令と、第１のレイセグメントを備える前記第１の図形要素とを備え、更に、前記第２のスレッドが第２のセットのレイトレーシング命令と、第２のレイセグメントを備える前記第２の図形要素とを備える請求項１に記載の方法。
【請求項７】
前記第１のスレッドが第１のセットのビデオデコーディング命令と、第１のピクチャセグメントを備える前記第１の図形要素とを備え、更に、前記第２のスレッドが第２のセットのビデオデコーディング命令と、第２のピクチャセグメントを備える前記第２の図形要素とを備える請求項１に記載の方法。
【請求項８】
前記第１のピクチャセグメントが第１のマクロブロックを備え、前記第２のピクチャセグメントが第２のマクロブロックを備える請求項７に記載の方法。
【請求項９】
前記第１のスレッドが第１のセットの３次元レンダリング命令と、第１のレンダリングプリミティブを備える前記第１の図形要素とを備え、更に前記第２のスレッドが第２のセットの３次元レンダリング命令と、第２のレンダリングプリミティブを備える前記第２の図形要素とを備える請求項１に記載の方法。
【請求項１０】
前記第１のレンダリングプリミティブが第１の点、第１の線、第１の三角形、および第１の三角形ストリップのうちの１つを備え、更に、前記第２のレンダリングプリミティブが第２の点、第２の線、第２の三角形、および第２の三角形ストリップのうちの１つを備える請求項９に記載の方法。
【請求項１１】
前記第１のレンダリングプリミティブの距離値を判定するステップと、
前記第２のレンダリングプリミティブの距離値を判定するステップと、
前期第１のレンダリングプリミティブと前記第２のレンダリングプリミティブとの関係を判定するために、前記第１のレンダリングプリミティブおよび前記第２のレンダリングプリミティブの距離値を比較するステップと、
前記第１のレンダリングプリミティブと前記第２のレンダリングプリミティブとの間の関係を元に選択された、前記第１のレンダリングプリミティブと前記第２のレンダリングプリミティブのうちの１つを表示するステップと
を更に備える請求項９に記載の方法。
【請求項１２】
イメージの第１の図形要素についての第１の命令スレッドと、イメージの第２の図形要素についての第２の命令スレッドとを受信して実行し、前記第１のスレッドが関連するセマフォを有するリソースを必要とすることに応じてセマフォ要求メッセージを送信し前記第１のスレッドを非活動状態にする実行回路構成と、
前記実行回路構成から前記セマフォ要求メッセージを受信して、前記実行回路構成に対してセマフォ承認メッセージを送信することにより、前記セマフォ要求メッセージの受信に応じて選択的にセマフォの制御を許可する、前記実行回路構成に接続されたセマフォ・エンティティと
を備え、
前記実行回路構成は、前記セマフォ承認メッセージの受信に応じて前記スレッドを前記非活動状態から除く装置。
【請求項１３】
前記実行回路構成が
前記第１の命令スレッドを実行する第１の実行回路と、
前記第２の命令スレッドを実行する第２の実行回路と
を備える請求項１２に記載の装置。
【請求項１４】
前記第１のスレッドが第１のセットのレイトレーシング命令と、第１のレイセグメントを備える前記第１の図形要素とを備え、更に、前記第２のスレッドが第２のセットのレイトレーシング命令と、第２のレイセグメントを備える前記第２の図形要素とを備える請求項１２に記載の装置。
【請求項１５】
前記第１のスレッドが第１のセットのビデオデコーディング命令と、第１のピクチャセグメントを備える前記第１の図形要素とを備え、更に、前記第２のスレッドが第２のセットのビデオデコーディング命令と、第２のピクチャセグメントを備える前記第２の図形要素とを備える請求項１２に記載の装置。
【請求項１６】
前記第１のピクチャセグメントが第１のマクロブロックを備え、前記第２のピクチャセグメントが第２のマクロブロックを備える請求項１５に記載の装置。
【請求項１７】
前記第１のスレッドが第１のセットの３次元レンダリング命令と第１のレンダリングプリミティブを備える前記第１の図形要素とを備え、更に、前記第２のスレッドが第２のセットの３次元レンダリング命令と第２のレンダリングプリミティブを備える前記第２の図形要素とを備える請求項１２に記載の装置。
【請求項１８】
前記第１のレンダリングプリミティブが第１の点、第１の線、第１の三角形、および第１の三角形ストリップのうちの１つを備え、更に、前記第２のレンダリングプリミティブが第２の点、第２の線、第２の三角形、および第２の三角形ストリップのうちの１つを備える、請求項１７に記載の装置。
【請求項１９】
前記第１の命令スレッドおよび前記第２の命令スレッドを保存する、実行回路構成に接続されたメモリを更に備える請求項１２に記載の装置。
【請求項２０】
命令スレッドを実行する少なくとも１つの追加実行回路と、
前記実行回路構成および少なくとも１つの追加実行構成回路に接続された、スレッドを実行するためにスレッドをディスパッチするスレッドディスパッチャと
を更に備える請求項１２に記載の装置。
【請求項２１】
前記第１の命令スレッドが非活動状態のとき、命令の実行が停止し、前記実行回路構成がセマフォ要求メッセージの状態を判定するために前記セマフォ・エンティティにポーリング処理を行わない請求項１２に記載の装置。
【請求項２２】
表示するイメージの第１の図形要素を処理する第１の命令スレッドを実行する手段と、
表示するイメージの第２の図形要素を処理する第２の命令スレッドを実行する手段と、
前記第１の図形要素と前記第２の図形要素の間の関係に関連する予め定められた条件セットのうち少なくとも１つが検知されたことに応じて前記第１の命令スレッドを非活動状態にする手段と、
セマフォ・エンティティからメッセージを受信するまで前記第１のスレッドを非活動状態に維持する手段と、
前記セマフォ・エンティティからメッセージを受信したことに応じて前記第１の命令スレッドの実行を再開する手段と
を備える装置。
【請求項２３】
前記第１のスレッドが第１のセットのレイトレーシング命令と、第１のレイセグメントを備える前記第１の図形要素とを備え、更に、前記第２のスレッドが第２のセットのレイトレーシング命令と、第２のレイセグメントを備える前記第２の図形要素とを備える請求項２２に記載の装置。
【請求項２４】
前記第１のスレッドが第１のセットのビデオデコーディング命令と、第１のマクロブロックを備える前記第１の図形要素とを備え、更に、前記第２のスレッドが第２のセットのビデオデコーディング命令と、第２のマクロブロックを備える前記第２の図形要素とを備える請求項２２に記載の装置。
【請求項２５】
前記第１のスレッドが第１のセットの３次元レンダリング命令と第１のレンダリングプリミティブを備える前記第１の図形要素とを備え、更に、前記第２のスレッドが第２のセットの３次元レンダリング命令と第２のレンダリングプリミティブを備える前記第２の図形要素とを備える請求項２２に記載の装置。
【請求項２６】
メモリコントローラと、
イメージの第１の図形要素についての第１の命令スレッドと、イメージの第２の図形要素についての第２の命令スレッドとを受信して実行し、前記第１のスレッドが関連するセマフォを有するリソースを必要とすることに応じてセマフォ要求メッセージを送信し前記第１のスレッドを非活動状態にする、前記メモリコントローラに接続された実行回路構成と、
前記実行回路構成から前記セマフォ要求メッセージを受信して、前記実行回路構成に対してセマフォ承認メッセージを送信することにより、前記セマフォ要求メッセージの受信に応じて選択的にセマフォの制御を許可する、前記実行回路構成に接続されたセマフォ・エンティティと
を備え、
前記実行回路構成は、前記セマフォ承認メッセージの受信に応じて前記スレッドを前記非活動状態から除くシステム。
【請求項２７】
前記実行回路構成が
前記第１の命令スレッドを実行する第１の実行回路と、
前記第２の命令スレッドを実行する第２の実行回路と
を備える請求項２６に記載のシステム。
【請求項２８】
前記第１のスレッドが第１のセットのレイトレーシング命令と、第１のレイセグメントを備える前記第１の図形要素とを備え、更に、前記第２のスレッドが第２のセットのレイトレーシング命令と、第２のレイセグメントを備える前記第２の図形要素とを備える請求項２６に記載のシステム。
【請求項２９】
前記第１のスレッドが第１のセットのビデオデコーディング命令と、第１のマクロブロックを備える前記第１の図形要素とを備え、更に、前記第２のスレッドが第２のセットのビデオデコーディング命令と、第２のマクロブロックを備える前記第２の図形要素とを備える請求項２６に記載のシステム。
【請求項３０】
前記第１のピクチャセグメントが第１のマクロブロックを備え、前記第２のピクチャセグメントが第２のマクロブロックを備える、請求項２９に記載のシステム。
【請求項３１】
前記第１のスレッドが第１のセットの３次元レンダリング命令と第１の部分のレンダリングプリミティブを備える前記第１の図形要素とを備え、更に、前記第２のスレッドが第２のセットの３次元レンダリング命令と第２のレンダリングプリミティブを備える前記第２の図形要素とを備える請求項２６に記載のシステム。
【請求項３２】
前記第１のレンダリングプリミティブが第１の点、第１の線、第１の三角形、および第１の三角形ストリップのうちの１つを備え、更に、前記第２のレンダリングプリミティブが第２の点、第２の線、第２の三角形、および第２の三角形ストリップのうちの１つを備える請求項３１に記載のシステム。
【請求項３３】
前記第１の命令スレッドおよび前記第２の命令スレッドを保存する、前記メモリコントローラに接続されたメモリを更に有する請求項２６に記載のシステム。
【請求項３４】
前記第１の命令スレッドが非活動状態のとき、前記命令の実行が停止し、前期実行回路構成が前記セマフォ要求メッセージの状態を判断するために前記セマフォ・エンティティにポーリング処理を行わない請求項２６に記載のシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は視覚および図形データの処理に関する。本発明は特に、視覚および図形データの処理の実行における、アクティブセマフォ機構の利用に関する。
【背景技術】
【０００２】
セマフォ（クリティカルセクションまたはミューテックとも呼ばれる）は、複数のプロセスが共有リソース（例：メモリ、ファイル）の使用で競合する際に、プロセス間の処理の調整と同期を可能にするハードウェアおよびソフトウェアの機構である。一般的に、セマフォは、オペレーティングシステムメモリ内の指定された場所に保存された値であり、プロセスはその値を確認および変更できる。セマフォの値に基づいて、プロセスは、共有リソースにアクセス、または、一定時間待機した後にセマフォを再度確認することができる。
【０００３】
従来のコンピュータシステムにおけるセマフォは、概して、ハードウェアによるアトミックな「テスト・アンド・セット」またはこれに類似する命令（例：ロック、ビットテスト、ビットテスト・アンド・セット、ビットテスト・アンド・リセット）を使用したソフトウェアルーチンとして実装される。このセマフォの実装を使用することにより、共有（例：グローバル）データと１つ以上のセマフォの間において、生産者−消費者の通信関係を確立できる。セマフォは、共有データの修正を試みる複数のプロセスの中から選択された１つのプロセスのみによって共有データが変更されることを可能にし、それによってデータの整合性を提供する。
【０００４】
このセマフォの機構は、セマフォを獲得するためにスレッドがポーリング処理を行う必要があるため、「パッシブ」である。この必要とされるポーリング処理は、本来ならば他の目的にも使用できるプロセッサおよびシステムリソースを消費してしまう。このように、従来のセマフォは非効率な処理となりうる。
【図面の簡単な説明】
【０００５】
【図１】大規模なマルチスレッドプロセッサアーキテクチャの一実施形態を示す。
【０００６】
【図２ａ】セマフォを使用することによってスレッドの実行を同期化できる依存関係の概念を示す第１の図である。
【０００７】
【図２ｂ】セマフォを使用することによってスレッドの実行を同期化できる依存関係の概念を示す第２の図である。
【０００８】
【図２ｃ】セマフォを使用することによってスレッドの実行を同期化できる依存関係の概念を示す第３の図である。
【０００９】
【図２ｄ】セマフォを使用することによってスレッドの実行を同期化できる依存関係の概念を示す第４の図である。
【００１０】
【図３】光線が光源から視点までトレースされたシーンの簡単な例を示す。
【００１１】
【図４】アクティブセマフォを使用したレイトレーシングの一実施形態を示す。
【００１２】
【図５】プロアクティブオーダードセマフォを使用したZバッファベースの３次元グラフィックスレンダリングの一実施形態を示す。
【００１３】
【図６】アクティブおよび／またはプロアクティブセマフォを使用したビデオデコーディングの一実施形態を示す。
【発明を実施するための最良の形態】
【００１４】
本発明は添付図面に示す実施例を用いて説明されるが、実施例は本発明を一切制限しない。添付図面内の数字は類似の要素を参照する。
【００１５】
アクティブセマフォを使用した視覚および／または図形データの処理方法と装置について、以下に説明する。以下の説明において、本発明について説明することを目的として、本発明に関する完全な理解を提供するために多くの詳細を提供する。しかし、当業者はこれらの詳細を用いることなく、本発明を実施することができることは明白である。また、本発明が曖昧になることを回避するために、構造およびデバイスはブロック図の形で示す。
アクティブセマフォの使用例
【００１６】
「アクティブ」セマフォを使用して、複数の並列なパッシブ命令スレッド（以下スレッドと呼ぶ）による共有リソースへのアクセスを調整するアーキテクチャおよび関連する方法について、以下に説明する。このセマフォは、セマフォ・エンティティが実行回路構成および／または制御回路構成に対してメッセージを送信してスレッドの状態を変更するため、アクティブと表現される。例えば、セマフォによって示されうる未解決の依存関係に応じて、スレッドスケジューラがスレッドをスリープ（または非活動）モードにすることができる。スレッドがスリープモードであること示すために、依存関係に相当するスレッド状態変数が使用される。
【００１７】
依存関係が解決されたとき、制御回路構成（例：スレッドスケジューラ）にメッセージが送信され、依存関係変数がクリアされる。依存関係変数がクリアされると、スレッドは活動（またはウェイク）状態となる。そして活動状態となったスレッドにおいて、命令の実行を継続できる。
【００１８】
上記の例に引き続いて、スレッドがセマフォを獲得しようとして獲得できなかったとき、スレッドは非活動状態とされる。スレッドが非活動状態であるため、スレッドは、従来技術では必要とされた、セマフォによって示される依存関係が解決されたかどうかを判定するためのポーリング処理をセマフォに対して行うことができない。依存関係が解決されたことを示すメッセージを受信（例：セマフォ・エンティティから）するまで、このスレッドは非活動状態にとどまる。依存関係が解決されたことを示すメッセージの受信に応じて、スレッドは活動状態となり命令実行の継続が可能となる。
【００１９】
図１は大規模なマルチスレッドプロセッサアーキテクチャの一実施例を示す。ここで使用される用語「大規模なマルチスレッド」アーキテクチャは、複数のスレッドの実行をサポートできる複数のプロセッサを有するアーキテクチャを指す。一実施例では、各プロセッサは１つまたは複数のスレッドをサポートしてもよい。シングルプロセッサにおけるマルチスレッディングは、アクティブスレッドの実行を許可してそれ以外のスレッドを非活動状態にすることによって、高い命令実行効率を実現する。セマフォの獲得を待つ非活動状態のスレッドは、プロセッサのリソースを消費／浪費しない。大規模なマルチスレッドアーキテクチャという表現に妨げられることなく、このセマフォ機構およびそれに関連する方法は、サポートされるスレッドの数に関わらず、いかなるマルチスレッドアーキテクチャに対しても適用可能である。
【００２０】
大規模なマルチスレッドシステム１００は１つまたは複数のプロセッシングコアによる命令の実行中に使用されるデータと命令とを保存するメモリ階層１１０を有する。メモリ階層１１０はダイナミックランダムアクセスメモリ（DRAM）、１階層以上の命令キャッシュ、１階層以上のデータキャッシュ、および／または１階層以上のいかなる従来技術の共有命令およびデータキャッシュを含んでもよい。メモリ階層１１０に接続されたスレッドディスパッチャ１２０は、命令ポインタ、および、新しいスレッドに関連するデータおよび／またはデータポインタなどの情報を受信する。スレッドディスパッチャ１２０はまた、メッセージバス１２５を介してプロセッシングコアに接続される。本発明の一実施例では、スレッドディスパッチャ１２０はプロセッシングコアのスレッドリソースの管理を行う。新規のペンディングスレッドを受信すると、スレッドディスパッチャ１２０はペンディングスレッドを実行するためのリソースを有するプロセッシングコアを１つ選択し、そのスレッドを選択したプロセッシングコアにディスパッチする。プロセッシングコア上のスレッドの実行が完了すると、スレッドディスパッチャ１２０はその報告を受け、プロセッシングコア上のスレッドリソースを次のペンディングスレッドに対して利用可能にする。
【００２１】
システム１００は、それぞれ実行構成回路および関連する制御構成回路を有する複数のプロセッサコア（１３０、１３１、１３９、１５０、１５１、および１５９）と共に図示される。これらのプロセッサコアは、同一またはそれぞれ機能が異なるプロセッサでもよい。システム１００に含まれるプロセッサコアの数に制限は無い。本発明の一実施例では、複数のプロセッサコアは行を成すように構成され、各行はそれぞれ行制御部を有する。例えば、行制御部１４０は行制御バス１４５を介してプロセッサコア１３０、１３１、および１３９に接続してもよい。同様に、行制御部１６０は行制御バス１６５を介してプロセッサコア１５０、１５１、および１５９に接続してもよい。
【００２２】
プロセッサコアはまた、メッセージバス１２５を介してセマフォ・エンティティ１７０に接続される。セマフォ・エンティティ１７０は、以下に説明するセマフォ機能を提供するためにメモリおよび制御ロジックを有する。本発明の一実施例では、セマフォ・エンティティ１７０は、下記に詳細に示すように、メッセージを送受信することによってプロセッサコアと相互に作用する。
【００２３】
スレッドディスパッチャ１２０もまた、メッセージバス１２５を介してセマフォ・エンティティ１７０に接続される。本発明の一実施例では、下記に詳細に示すように、スレッドに代わってスレッドディスパッチャがメッセージを送受信することによってセマフォ・エンティティ１７０と相互に作用する。
【００２４】
各プロセッシングコアの制御回路構成は、同一プロセッシングコア上で実行する複数のスレッドの状態を管理するスレッドスケジューリング回路構成、および、アクティブな命令スレッドを実行する命令実行スケジューリング回路構成を有してもよい。命令の実行中に、１つ以上のプロセッシングコアが共有システムリソースへのアクセスを試みる。共有システムリソースの制御を得るために、スレッドは対応する実行コアを介してアクセスする必要がある共有システムリソースに対応するセマフォの制御を獲得する必要がある。
【００２５】
本発明の一実施例では、セマフォの制御を獲得するために、要求側のプロセッシングコアがメッセージバス１２５を介してセマフォ・エンティティ１７０にセマフォ要求メッセージを送信する。セマフォ要求メッセージを送信したあと、要求側のスレッドは非活動状態となり、その命令の実行と関連する処理（例：セマフォへのポーリング）は停止する。
【００２６】
セマフォ要求メッセージの受信に応じて、セマフォ・エンティティ１７０は要求側のスレッドにセマフォの制御の許可を与えるかどうかを決定する。セマフォの制御が許可されると、セマフォ・エンティティ１７０はセマフォ承認メッセージを要求側のスレッドに送信する。セマフォ承認メッセージの受信に応じて、要求側のスレッドは活動状態となり要求したリソースを使用する命令の実行を継続する。スレッドが共有リソースの使用を完了すると、スレッドはセマフォ解放メッセージをセマフォ・エンティティ１７０に送信する。セマフォ解放メッセージの受信に応じて、セマフォ・エンティティ１７０はセマフォを解放し、他のスレッドがそのシステムリソースへのアクセスを獲得できるようにする。
【００２７】
本発明の一実施例では、セマフォはプロセッシングコアにより実行される命令群（セマフォ命令群）と、プロセッシングコアとセマフォ・エンティティとの間で送受信されるメッセージ群（セマフォメッセージ群）とによってサポートされる。セマフォメッセージ群は、例えば、メッセージバス１２５を介して送受信される。本発明の他の実施例では、異なるおよび／または追加のメッセージ、または、命令をサポートしてもよい。
リンクドリストベースのセマフォ・エンティティ
【００２８】
本発明の一実施形態では、従来の各セマフォに対するキューは、各セマフォに対するリンクドリストを形成する要素を有するバッファプールに置き換えられる。このため、各セマフォはバッファプール内の要素から成るリンクドリストの先頭要素へのポインタでもよい。リンクドリストは双方向リンクドリストと単方向リンクドリストのどちらでもよい。
【００２９】
本発明の一実施例では、セマフォテーブルはサポートする各セマフォへのポインタを保持する。本発明の一実施例では、セマフォテーブルが保持するポインタは、対応するセマフォによって使用されるリンクドリストの先頭要素を示す先頭ポインタである。フリープールポインタは、バッファプールの先頭およびＮＵＬＬポインタを含む未使用のセマフォ要素を示す。
【００３０】
本発明の一実施例では、各セマフォ要素は解放状態フィールドと、確認抑制フィールドと、スレッド識別子フィールドと、前要素へのポインタと、次要素へのポインタとを有する。本発明のもう１つの実施例では、他のおよび／もしくは異なるフィールドを使用してもよい。例えば、前要素へのポインタは省略可能である。本発明の一実施例では、各セマフォが、対応するリンクドリストが空であるかどうかを示す１ビット（またはその他のインジケータ）を有してもよい。
セマフォメッセージ群
【００３１】
セマフォ獲得メッセージ（ＡＣＱ＿ＭＳＧ）は、セマフォの所有権をセマフォ・エンティティに要求するために、スレッドまたはスレッドに代わってスレッドディスパッチャによって使用される。本発明の一実施例では、ＡＣＱ＿ＭＳＧはセマフォ識別子フィールドと、スレッド識別子フィールドと、「自動リリース」フィールドと、「確認抑制」（ack-suppression）フィールドとを有する。自動解放フィールドは、先頭依存関係のみを有するスレッドに対して使用される。先頭依存関係のみを有するスレッドとは、自身は以前のスレッドに依存するが、自身に依存するスレッドが後続に存在しないスレッドである。確認抑制フィールドは、末尾依存関係のみを有するスレッドに対して使用される。末尾依存関係のみを有するスレッドとは、自身は以前のスレッドに依存しないが、自身に依存するスレッドが後続に存在するスレッドである。ＡＣＱ＿ＭＳＧは、スレッドディスパッチャまたはスレッドに関連する他の制御回路構成によって発行されてもよい。
【００３２】
本発明の一実施例では、ＡＣＱ＿ＭＳＧを受信すると、セマフォ・エンティティはフリープールリストから先頭の要素を削除し、その要素を選択したセマフォの末尾に追加することによって、要求側のスレッドのセマフォ要素を対象のセマフォのリンクドリストにエンキューする。セマフォ要素のフィールドの値は、ＡＣＱ＿ＭＳＧから得た情報に基づいて更新される。セマフォ要素のスレッド識別子フィールド、解放状態フィールド、および確認抑制フィールドの値は、要求側のスレッドのスレッド識別子、ＡＣＱ＿ＭＳＧの自動解放フィールドおよびＡＣＱ＿ＭＳＧの確認抑止フィールドの値に置き換えられる。ＡＣＱ＿ＭＳＧを受信する前にセマフォリンクドリストが空でないとき、セマフォ・エンティティからメッセージは送信されない。しかし、ＡＣＱ＿ＭＳＧを受信する前にセマフォリンクドリストが空であるとき、下記動作のうちの１つが実行される。
【００３３】
確認抑制フィールドがセットされていないとき、メッセージバス１２５を介して、セマフォ・エンティティから要求側のスレッドに対してＡＣＫ＿ＭＳＧがスレッド識別子と共に送信される。確認抑制フィールドがセットされているとき、セマフォ・エンティティからＡＣＫ＿ＭＳＧは送信されない。自動解放フィールドがセットされていないとき、エンキューされた直後のセマフォ要素はセマフォリンクドリストにとどまる。自動解放フィールドがセットされているとき、エンキューされた直後のセマフォ要素はセマフォリンクドリストから削除される。
【００３４】
セマフォ解放メッセージ（ＲＥＬ＿ＭＳＧ）はセマフォ・エンティティに対してセマフォの所有権の解放を要求するためにスレッドによって使用される。本発明の一実施例では、ＲＥＬ＿ＭＳＧはセマフォ識別子フィールドとスレッド識別子フィールドとを有する。本発明の一実施例では、ＲＥＬ＿ＭＳＧはセマフォの所有権を有するスレッドに関連する制御回路構成によってのみ発行されうる。すなわち、そのスレッドの識別子はセマフォリンクドリストの先頭要素に存在する。ＲＥＬ＿ＭＳＧを受信すると、セマフォ・エンティティはその要素をセマフォリンクドリストの先頭から削除する。
【００３５】
本発明のもう１つの実施例では、ＲＥＬ＿ＭＳＧはセマフォを共有する全てのスレッドに関連する制御回路構成によって発行されうる。ＲＥＬ＿ＭＳＧを受信すると、セマフォ・エンティティはセマフォ要素のリンクドリストにおける位置に関係無く、セマフォリンクドリスト内にある対応する要素の解放状態フィールドをアンセットする。セマフォ要素がリンクドリストの先頭にある場合は、セマフォリンクドリストの先頭から要素が削除される。そして、削除されたセマフォ要素の次のセマフォ要素がそのリンクドリストの先頭要素となる。削除されたセマフォ要素の次のセマフォ要素がＮＵＬＬでないとき、そのセマフォ要素の値が調査される。リンクドリストの新しい先頭要素の解放状態フィールドがセットされているとき、セマフォリンクドリストの先頭から再びセマフォ要素が削除される。
【００３６】
本発明の一実施例では、リンクドリストの先頭がＮＵＬＬ（セマフォのキューが空の状態）になるまで、または、リンクドリストの先頭要素の解放状態フィールドがアンセット（先頭要素に対応するスレッドからのセマフォの解放を待つ状態）になるまで、この再帰処理が続く。リンクドリストの先頭要素がＮＵＬＬではないかつ先頭要素の確認抑制フィールドがセットされていないとき、セマフォ・エンティティは先頭要素のスレッド識別子フィールドによって識別されるスレッドに対してＡＣＫ＿ＭＳＧを送信する。リンクドリストの先頭要素がＮＵＬＬではないかつ先頭要素の確認抑制フィールドがセットされているとき、ＡＣＫ＿ＭＳＧは送信されない。
【００３７】
セマフォ承認メッセージ（ＡＣＫ＿ＭＳＧ）は、要求したセマフォが獲得されたことをスレッドに通知するために、セマフォ・エンティティによって生成される。本発明の一実施例では、ＡＣＫ＿ＭＳＧはセマフォ識別子フィールドとスレッド識別子フィールドとを有する。ＡＣＫ＿ＭＳＧはセマフォ・エンティティによってのみ発行され、スレッド識別子フィールドの値によって識別されるスレッドを実行するプロセッシングコアによって受信される。
【００３８】
ＡＣＫ＿ＭＳＧを受信すると、受信したプロセッシングコアはＡＣＫ＿ＭＳＧのスレッド識別子フィールドの値によって識別されるスレッドのセマフォ待機状態変数をアンセットする。そして、そのスレッドが非活動状態であるとき、スレッド状態は活動状態に変更される。
セマフォ命令群
【００３９】
セマフォ獲得（ＡＣＳ）命令が実行されると、要求されたセマフォのセマフォ識別子および要求側のスレッドのスレッド識別子と共に、自動解放フィールドがアンセットされたＡＣＱ＿ＭＳＧメッセージがセマフォ・エンティティに送信される。そして、スレッドのセマフォ待機状態フィールドがセットされ、スレッドは非活動状態となる。ＡＣＳ命令はセマフォ解放（ＲＬＳ）命令（下記に説明する）とのペアで（が後に続いて使用される形で）使用される。ＡＣＳ−ＲＬＳ命令のペアは、クリティカルセクションのアプリケーションソフトウェアによって使用されうる。
【００４０】
自動解放付セマフォ獲得（ＡＳＲ）命令が実行されると、要求されたセマフォのセマフォ識別子および要求側のスレッドのスレッド識別子と共に、自動解放フィールドがセットされたＡＣＱ＿ＭＳＧがセマフォ・エンティティに送信される。そして、スレッドのセマフォ待機状態フィールドがセットされ、スレッドは非活動状態となる。本発明の一実施例では、ＡＳＲ命令はＲＬＳ命令とペアで実行することはできない。本発明の一実施例では、ＡＳＲ命令は先頭依存関係のみを有するスレッドによって使用される。
【００４１】
セマフォ待機（ＷＴＳ）命令が実行されると、スレッドのセマフォ待機状態の値が確認される。スレッドのセマフォ待機状態がセットされていると、スレッドは非活動状態となる。スレッドのセマフォ待機状態がセットされていないと、スレッドは活動状態にとどまる。ＷＴＳ命令の受信に応じて、セマフォ・エンティティにメッセージは送信されない。ＷＴＳ命令の使用は、そのセマフォが以前、スレッドのディスパッチ時にスレッドに代わってスレッドディスパッチャがＡＣＱ＿ＭＳＧを使用したことによって獲得されたことを示す。スレッドディスパッチャによって以前発行されたＡＣＱ＿ＭＳＧの確認抑制フィールドがセットされているときは、ＷＴＳ命令は使用されない。
【００４２】
セマフォ解放（ＲＬＳ）命令が実行されると、ＲＥＬ＿ＭＳＧが解放されるセマフォのセマフォ識別子および解放するスレッドのスレッド識別子と共にセマフォ・エンティティに対して送信される。解放するスレッドは活動状態にとどまる。ＡＣＳ命令が解放するスレッドによって以前実行されたときは、ＲＬＳ命令が１回だけ実行される。ＡＳＲ命令が解放するスレッドによって以前実行されたときは、ＲＬＳ命令は実行されない。ＷＴＳ命令が解放するスレッドによって実行されたときは、スレッドディスパッチャによって送信されたＡＣＱ＿ＭＳＧの自動解放フィールドの値によって、ＷＴＳ命令の後にＲＬＳ命令が実行されるケースとされないケースがありうる。ＡＣＱ＿ＭＳＧの自動解放フィールドがアンセットであるとき、ＲＬＳ命令は発行されない。ＡＣＱ＿ＭＳＧの自動解放フィールドがセットされていれば、ＷＴＳ命令に続いてＲＬＳ命令が発行される。
アクティブセマフォの獲得
【００４３】
命令スレッドがプロセッサによって実行されているとき、命令はリソースが使用可能のときに実行される。例えば、共有メモリロケーションなどセマフォを持つリソースを使用する必要があるときは、そのリソースにアクセスするためにセマフォの所有権が必要となる場合がある。このように、セマフォが必要とされるまでは、命令スレッドの実行は従来技術によって達成される。
【００４４】
本発明の一実施例では、セマフォが必要なとき、セマフォ獲得（ＡＣＳ）命令が実行される。ＡＣＳ命令はセマフォを要求する命令スレッドを実行するプロセッサによって実行されうる。ＡＣＳ命令の実行の一部またはそれへの応答として、メッセージバスを介して、スレッドを実行するプロセッシングコアがセマフォ・エンティティに対してセマフォ獲得メッセージ（ＡＣＱ＿ＭＳＧ）を送信する。ＡＣＱ＿ＭＳＧのフォーマットの一例は上述の通りである。他のＡＣＱ＿ＭＳＧのフォーマットも使用可能である。
【００４５】
ＡＣＳ命令の実行の一部またはそれへの応答として、セマフォを要求するスレッドはセマフォ待機状態フィールドがセットされ、非活動状態とされる。スレッドを非活動状態とすることによって、要求するセマフォに対するポーリング処理を含むスレッドの命令は実行されない。そして、セマフォに対する最初の要求は拒否される。スレッドを非活動状態にすることによって、プロセッサリソースとシステム帯域はスレッドによるセマフォへのポーリング処理によって消費されない。マルチスレッディングをサポートするプロセッシングコアにおいては、プロセッサリソースおよびシステム帯域は他の活動状態のスレッドによって使用されうる。
【００４６】
セマフォ・エンティティはＡＣＱ＿ＭＳＧを受信し、要求者情報の要素を対象のセマフォのリンクドリストに保存する。セマフォが他のスレッドによって所有または制御されていないとき、セマフォリンクドリストに他の要素が存在しないため、そのセマフォ要素はセマフォリンクドリストの先頭に保存される。セマフォが他のスレッドによって所有または制御されているとき、そのセマフォ要素はリンクドリストの末尾に保存される。本発明の一実施例では、リンクドリストの末尾は、バッファプール内のリンクドリストの要素を先頭要素から末尾要素までトラバースすることによって識別される。そして、新しい要素は新しい末尾要素となる。本発明のもう１つの実施例では、セマフォテーブルに保存されたリンクドリストの末尾ポインタによって、リンクドリストの末尾要素が直接識別される。
【００４７】
スレッドがセマフォに対応するリソースの使用を完了すると、以下に詳細に説明するように、セマフォを保持するスレッドはセマフォの制御を解放する。セマフォが解放されると、リンクドリストの先頭にある対応するセマフォ要素が削除され、その次のセマフォ要素がリンクドリストの先頭要素になる。
【００４８】
セマフォ要素がセマフォリンクドリストの先頭になると、その要素の状態フィールドの値がセマフォ・エンティティによって調査される。先頭要素の確認抑制フィールドがセットされていないとき、セマフォ承認メッセージ（ＡＣＫ＿ＭＳＧ）がセマフォ・エンティティからセマフォ要素に関連付けられたスレッドに対して送信される。ＡＣＫ＿ＭＳＧのフォーマットの一例は上記説明の通りである。他のＡＣＫ＿ＭＳＧフォーマットを使用してもよい。ＡＣＫ＿ＭＳＧは、受信側のエンティティに対して対応するセマフォの制御が許可されたことを示す。
【００４９】
ＡＣＫ＿ＭＳＧの受信に応じて、対応するスレッドが活動状態になる。スレッドが活動状態になると、スレッドの命令処理は再開され、セマフォに対応する共有リソースがアクセス可能となる。スレッドが共有リソースへのアクセスを完了すると、以下に詳細に説明するように、セマフォが解放される。
アクティブセマフォの解放
【００５０】
本発明の一実施例では、セマフォ解放（ＲＬＳ）命令が実行されると、セマフォが解放される。ＲＬＳ命令は、セマフォを要求する命令スレッドを実行するプロセッサによって実行されうる。ＲＬＳ命令の実行の一部またはそれに対する応答として、セマフォ解放メッセージ（ＲＥＬ＿ＭＳＧ）がセマフォ・エンティティに対して送信される。ＲＥＬ＿ＭＳＧのフォーマットの一例は上述の通りである。他のＲＥＬ＿ＭＳＧフォーマットを使用してもよい。
【００５１】
ＲＥＬ＿ＭＳＧの受信に応じて、セマフォ・エンティティはＲＥＬ＿ＭＳＧのスレッド識別子フィールドの値とセマフォリンクドリストとを比較する。対応するセマフォ要素がそのリンクドリストの先頭にあるとき、セマフォ・エンティティはリンクドリストの先頭からそのスレッド要素を削除する。そして、そのリンクドリスト内の次の要素が先頭要素となる。そして、その新しい先頭要素に対応するスレッドに対して、セマフォの制御を許可することができる。対応するセマフォ要素がそのリンクドリストの先頭にないとき、セマフォ・エンティティはそのセマフォ要素の解放状態フィールドをセットする。
動作モデル
【００５２】
使用されるリンクドリストの形式によって、セマフォはアソシエイティブセマフォとオーダードセマフォとに分類される。セマフォ・エンティティからのＡＣＫ＿ＭＳＧの送信の有無によって、セマフォはアクティブセマフォとプロアクティブセマフォとに分類される。このように、４種類のセマフォがサポートされうる。
アソシエイティブセマフォの一実施例の概要
【００５３】
アソシエイティブセマフォはコンカレントスレッドによるセマフォへの順序不同のアクセスを可能にする。本発明の一実施形態では、セマフォはセッションの開始時にＮＵＬＬリンクドリスト（または空のリンクドリストであることを示す１ビット）の形でスレッドディスパッチャによって初期化される。スレッドディスパッチャからセマフォ・エンティティには、これ以外のメッセージは送信されない。セマフォリンクドリストは、複数の命令スレッドを実行する実行回路構成によって動的に構築される。
【００５４】
本発明の一実施形態では、スレッドはＡＣＳまたはＡＳＲ命令を実行してアソシエイティブセマフォを要求する。スレッドは、ＲＬＳ命令を実行することによってアソシエイティブセマフォを解放する。本発明の一実施例では、新規ＡＣＱ＿ＭＳＧを受信すると、要求側のスレッドに対応する要素がそのセマフォリンクドリストの末尾に保存される。これにより、First-come, First-served（ＦＣＦＳ）のセマフォモデルが提供される。
オーダードセマフォの一実施例の概要
【００５５】
オーダードセマフォはコンカレントスレッドによる予め定められた順番でのセマフォへのアクセスを可能にする。この順序は、スレッドのディスパッチ時にスレッドディスパッチャによって予め定められる。この順序はアプリケーションに依存してもよい。スレッドのディスパッチはその性質から順次的であり、スレッドがディスパッチされた順番のセマフォリンクドリストを構築するため、スレッドディスパッチャはディスパッチされる各スレッドに代わってＡＣＱ＿ＭＳＧをセマフォ・エンティティに送信してもよい。
【００５６】
クリティカルセクションにアクセスするスレッドは、セマフォの所有権を待つためにＷＴＳ命令を使用してもよい。ＡＣＳおよびＡＳＲ命令は、スレッドがすでにセマフォリンクドリストに保存されていると考えられるため、使用されない。本発明の一実施例では、セマフォ・エンティティはリンクドリストの順番に従ったセマフォの制御のみを提供できる。セマフォを待つスレッドはリンクドリストの順番でＡＣＱ＿ＭＳＧを受信する。
アクティブセマフォの一実施例の概要
【００５７】
上述したとおり、アクティブセマフォ使用時は、スレッドを非活動状態から活動状態にするためにＡＣＱ＿ＭＳＧが使用される。セマフォ・エンティティはスレッドを実行する実行回路構成から１つ以上のＡＣＱ＿ＭＳＧを受信する。セマフォ・エンティティはセマフォリンクドリストの先頭にあるスレッドに対応する実行回路構成に対してＡＣＫ＿ＭＳＧを１回だけ送信する。セマフォリンクドリストの先頭要素を削除すると、セマフォ・エンティティはリンクドリストの新しい先頭要素の状態を調査し、その新しい先頭要素のスレッドに対応する実行回路構成に対して次のＡＣＫ＿ＭＳＧを送信してもよい。アクティブセマフォはアソシエイティブセマフォともなりうる。
プロアクティブセマフォの一実施例の概要
【００５８】
プロアクティブセマフォはスレッドが非活動状態であるかどうかに関らず、セマフォリンクドリストの先頭要素のスレッドに対して、ＡＣＫ＿ＭＳＧを１回だけ送信する。この方式はスレッドディスパッチャによって以前ＡＣＱ＿ＭＳＧが送信されたオーダードセマフォを使用するスレッドに適用するため、スレッドにはＡＣＫ＿ＭＳＧが１回だけ送信される。オーダードセマフォを使用するスレッドは、ＷＴＳおよび／またはＲＬＳ命令を含んでもよい。
【００５９】
プロアクティブセマフォ使用時は、セマフォリンクドリストの先頭要素のスレッドに対して、ＡＣＫ＿ＭＳＧがセマフォ・エンティティによって自動的に送信される。本発明の一実施例では、スレッドが実行回路構成によって認識されたときに、スレッドディスパッチャによってスレッドの要素がセマフォリンクドリストにエンキューされたとき、「リスク条件」が存在する可能性がある。両方の動作がスレッドディスパッチャによって開始され、異なるデータパスを介して実行されるため、これらのイベントのタイミングは考慮される必要がある。
【００６０】
セマフォを構成する前にスレッドの実行が始まり、かつ、スレッド内にＷＴＳ命令があるとき、リスク状態は存在しない。スレッドのセマフォ待機スレッド状態変数はスレッドディスパッチャによって設定されるため、スレッドがセマフォリンクドリストにエンキューされる前にスレッド内のＷＴＳ命令が実行されても、リスク状態は発生しない。ＷＴＳ命令はセマフォ・エンティティにメッセージを送信することなく、スレッドを非活動状態にする。セマフォ・エンティティがスレッドにＡＣＫ＿ＭＳＧを送信すると、実行回路構成がスレッドを活動状態にする。
【００６１】
スレッドディスパッチャによって確認抑制フィールドがセットされたセマフォが構成されると、リスク状態になりうる。この場合、スレッドは非活動状態にならない。そのかわりに、スレッドに対してセマフォが設定される前にスレッドがＲＬＳ命令を実行してＲＥＬ＿ＭＳＧをセマフォ・エンティティに対して送信すると、セマフォ・エンティティはＲＥＬ＿ＭＳＧを処理する状態にない可能性がある。このリスク状態を回避するために、スレッドの実行およびセマフォ・エンティティは、スレッドディスパッチャによってＡＣＱ＿ＭＳＧが発行される前にＲＥＬ＿ＭＳＧが発行されないことを保証することができる。
【００６２】
このように本発明の一実施例では、リスク状態を回避するために、確認抑制フィールドがセットされていないときは、セマフォの設定が完了する前にスレッドディスパッチャがスレッドの設定を完了する。確認抑制フィールドがセットされているときは、スレッドの設定が完了する前にスレッドディスパッチャがセマフォの設定を完了する。スレッドディスパッチャは準備ができたスレッドを順次的にディスパッチするため、順次処理によって必要な順序を保証することができる。
【００６３】
セマフォの設定前にスレッドの設定が完了したら、スレッドディスパッチャはスレッドをディスパッチして、セマフォの設定を行うメッセージを送信する前に、スレッドの設定が完了したことを示す信号を待つ。スレッドの設定前にセマフォの設定が完了したら、スレッドディスパッチャはセマフォの設定を開始するメッセージを送信して、スレッドをディスパッチする前に、セマフォの設定が完了したことを示す信号を待つ。順次的な設定はディスパッチャからのスループットを不必要に制限するため、この設定処理はパイプライン処理にしてもよい。
スレッドの同期
【００６４】
図２aから図２dは、セマフォを使用してスレッド実行を同期化できる依存関係の概念を示す。図２aは１：１：１（１対１）の依存関係を示す。図２aの依存関係は強いシーケンシャルオーダー依存関係またはアソシエイティブ依存関係でもよい。強いシーケンシャルオーダー依存関係においては、１つのプロアクティブオーダードセマフォが使用できる。本発明の一実施例では、セマフォを要求するためにスレッドディスパッチャからセマフォ・エンティティに送信されるＡＣＱ＿ＭＳＧの確認抑制フィールドおよび自動解放フィールドは共にアンセットである。命令スレッドはセマフォを獲得および解放するためにＷＴＳ−ＲＬＳ命令ペアを有する。
【００６５】
アソシエイティブ依存関係に対しては、１つのアクティブアソシエイティブセマフォを使用できる。本発明の一実施例では、セマフォを要求するためにスレッドを実行する実行回路構成からセマフォ・エンティティに送信されるＡＣＱ＿ＭＳＧの確認抑制フィールドと自動解放フィールドは共にアンセットである。命令スレッドはセマフォを獲得および解放するためにＡＣＳ−ＲＬＳ命令ペアを有する。
【００６６】
図２bは、１個のスレッドがＮ個の他のスレッドに対して先頭依存関係を有し、Ｎ個の他のスレッドは互いに依存しない、１：Ｎ（１対多）の依存関係を示す。ここでのＮは１以上の正の整数である。１：Ｎの依存関係では、１つのプロアクティブオーダードセマフォが使用できる。本発明の一実施例では、Ｎ個の独立したスレッドに対して、Ｎ個のスレッドに代わってスレッドディスパッチャがＡＣＱ＿ＭＳＧを送信する。セマフォを要求するためにスレッドディスパッチャからセマフォ・エンティティに送信されたＡＣＱ＿ＭＳＧの確認抑制フィールドはセットされ、自動解放フィールドはアンセットされる。他のＮ個のスレッドに対して先頭依存関係を有する１つのスレッドに対しても、スレッドディスパッチャによってＡＣＱ＿ＭＳＧが送信される。セマフォを要求するＡＣＱ＿ＭＳＧの確認抑制フィールドはアンセットされ、自動解放フィールドはセットされる。Ｎ個の命令スレッドは、セマフォを解放するためにＲＬＳ命令のみを有する。１つの命令スレッドは、セマフォを獲得および解放するためにＷＴＳ−ＲＬＳ命令ペアを有する。
【００６７】
図２ｃは、Ｎ個のスレッドが１個のスレッドに対して先頭依存関係を有するが、Ｎ個のスレッドは互いに依存していない、Ｎ：１（多対１）の依存関係を示す。Ｎ対１の依存関係に対しては、１つのプロアクティブオーダードセマフォを使用できる。本発明の一実施例では、Ｎ個の依存するスレッドおよび１つの依存されるスレッドの両方の代わりに、スレッドディスパッチャがＡＣＱ＿ＭＳＧを送信する。本発明の一実施例では、１つの依存されるスレッドに対してセマフォを要求するためのＡＣＱ＿ＭＳＧの確認抑制フィールドはセットされ、自動解放フィールドはアンセットされる。Ｎ個の依存するスレッドに対してセマフォを要求するためのＡＣＱ＿ＭＳＧの確認抑制フィールドはアンセットされ、自動解放フィールドはセットされる。１つの依存される命令スレッドは、セマフォを解放するためにＲＬＳ命令のみを有する。Ｎ個の依存する命令スレッドは、セマフォを獲得および解放するためにＷＴＳ−ＲＬＳ命令ペアを有する。
【００６８】
図２dは、Ｎ個の依存するスレッドがＭ個の依存されるスレッドに対して先頭依存関係を有する、Ｎ：Ｍ（多対多）の依存関係を示す。この場合、Ｎ個の依存するスレッドは互いに依存しておらず、Ｍ個の依存されるスレッドも互いに依存しない。Ｎ：Ｍ依存関係の場合は、上述の１：１：１、１：Ｎ、およびＮ：１の場合と比べるとより一般的なケースである。Ｎ：Ｍ依存関係に対しては、１つのプロアクティブオーダードセマフォが使用できる。本発明の一実施例では、Ｎ個の依存するスレッドとＭ個の依存されるスレッドの両方に代わって、スレッドディスパッチャがＡＣＱ＿ＭＳＧを送信する。本発明の一実施例では、Ｍ個の依存されるスレッドに対してセマフォを要求するＡＣＱ＿ＭＳＧの確認抑制フィールドがセットされ、自動解放フィールドがアンセットされる。Ｎ個の依存するスレッドに対してセマフォを要求するＡＣＱ＿ＭＳＧの確認抑制フィールドはアンセットされ、自動解放フィールドはセットされる。Ｍ個の依存される命令スレッドは、セマフォを解放するためにＲＬＳ命令のみを有する。Ｎ個の依存する命令スレッドは、セマフォを獲得および解放するためにＷＴＳ−ＲＬＳ命令ペアを有する。
【００６９】
図２aから図２dが示す依存関係は、より複雑な依存関係をサポートするためにも使用できる。例えば、Ｎ：１：Ｎ依存関係に対しては、２つのプロアクティブオーダードセマフォが使用できる。Ｎ：１の依存関係は図２cと上記説明にあるように処理され、１：Ｎの依存関係は図２bと上記説明にあるように処理される。
【００７０】
下記に詳細に説明するように、上記のセマフォ機構およびスレッドの同期化技術はコンピュータまたは類似の電子システムにおける多くの処理に対して適用できる。下記の例にあるように、多様な図形データの処理技術がここで説明されるセマフォ機構を使用して実行されうる。アクティブおよびプロアクティブセマフォの有用な使用例として図形データの処理技術を説明するが、これらのセマフォ機構の使用は、図形データの処理のみに制限されない。
セマフォとレイトレーシング
【００７１】
レイトレーシングは３次元グラフィックスをレンダリングするための技術で、鏡面、透明表面、影などの、複雑な光の相互作用をサポートできる。一般的に、レイトレーシングは、シーン内のレイバウンスにおいて光線がたどるパスを再帰的にトレースすることにより反射と屈折をモデル化することを基としている。２つのバウンス間（スクリーンポジションから第１のバウンス間、スクリーンポジション間、または光源へのバウンス）の光線のトレースは、レイセグメントと呼ばれる。光線がビューイングパースペクティブ（例：カメラ）から光源までトレースされることによって、各ピクセルのカラーが決定される。多様なレイトレーシングの技法が従来技術として知られている。レイトレーシングの従来技術については、例えばCook, R.L. and Torrance, K.E., "A Reflectance Model for Computer Graphics," ACM Trans. on Graphics 1, 1 (Jan.1982) および Glassner, A.(ed), "An Introduction to Ray Tracing," Academic Press, New York, 1989を参照のこと。
【００７２】
レイトレーシング技術を使用してイメージをレンダリングするときは、各スクリーン位置に対する視線からレンダリングを開始することによってスクリーンイメージを得ることができる。スクリーン位置は対象ピクセルとも呼ばれる。各視線は３次元のシーン空間をトラバースし、シーン内のオブジェクトとの反射および屈折相互作用によって１つ以上のレイセグメントを形成する。異なる対象ピクセルに関連するレイセグメントは、互いに独立している。異なる対象ピクセルに関連するレイセグメントの処理は、共有リソースを変更することなく並列で計算されうるため、セマフォ機構を使用する必要もない。
【００７３】
イメージスクリーン上には多くの対象ピクセルが存在するため、レイトレーシングの処理は大規模なマルチスレッドコンピューティングアーキテクチャに適している。１つの対象ピクセルに対して、複数のレイセグメントが存在してもよい。１つのピクセルに対する複数のレイセグメントの影響が集約されて、そのピクセルに関連する各レイセグメントの加重和としてそのピクセルの最終カラーが決定される。例えば、１つのピクセルに対するレイセグメントが、大規模なマルチスレッドコンピューティングアーキテクチャ上の異なるスレッドによって実行されたとき、このピクセルに関連するスレッドが共有するリソースであるピクセルの最終カラーの更新には、セマフォ機構の使用を必要とする。例えば、上述のＮ：１の依存関係の処理をレイトレーシングに使用することができる。
【００７４】
アクティブおよび／またはプロアクティブセマフォを使用することによって、レイセグメントのトレーシング処理（共通のピクセルに関連するレイセグメントを含む）は並列で実行できる。本発明の一実施例では、対象ピクセルのアドレスをハッシュすることによって、セマフォ識別子を決定できる。独立するピクセルの数より少ない数のセマフォしか利用できないときは、いくつかのピクセルがセマフォを共有してもよい。これは性能の問題であり、機能の問題ではない。本実施例では、グローバルな同期を行うことなく、セマフォを動的に使用することができる。セマフォを使用しなければ、１つのピクセルに関連するレイセグメントのトレーシング処理は順次的に実行される。このように、セマフォをレイトレーシング技術と共に使用するによって、より並列な処理が可能となる。
【００７５】
図３は光線が光源から視点までトレースされたシーンの単純な例を示す。光源３００と視点３３０の間には多数の光線が存在するが、説明を単純にするために、図３には少数の光線のみが図示されている。
【００７６】
光線３４０は光源３００から視点３３０へ直接進む。光線３４０は反射または屈折されていないため、光線３４０に対応するピクセルは光源３００によって提供される光のカラーによって表現される。レイセグメント３５０および３５５に対応する光のレイトレーシング計算は、光がオブジェクト３１０によって反射されているため、より複雑である。
【００７７】
上述の通り、セグメント３５０および３５５のレイトレーシング処理は、並列で実行されうる。このように、セグメント３５０および３５５に対するレイトレーシング処理は２つのスレッドによって実行でき、その結果は複数のレイトレーシング処理から得たピクセルカラーを集約した値となる。２つのスレッド間の調整は、上述のアクティブセマフォを使用することによって可能である。
【００７８】
図４はアクティブセマフォを使用したレイトレーシングの一実施例を示すフロー図である。４１０において、光線のパスが決定される。光線のパスの決定は、従来技術によって実現される。４２０において、レイトレーシング処理に使用される部品（例：ハードウェア部品、ソフトウェア部品など）が、１つのピクセルに対して複数のレイセグメントが影響しているかどうかを決定する。
【００７９】
４２０において１つのレイセグメントが１つのピクセルに影響していると判定されたとき、４２５においてその光線のパスがトレースされる。この１つのレイセグメントに対しては、従来技術のレイトレーシング技法を使用できる。４７５において、レイトレーシング処理の結果に基づいてピクセルのカラーが決定される。そしてこのピクセルは表示、印刷、またはレンダリングされうる。
【００８０】
４２０において、１つのピクセルに対して複数のレイセグメントが影響していると判定されたとき、１つ以上のレイセグメントが並列でトレースされうる。複数のレイセグメントに対する並列レイトレーシング処理は、ピクセルの処理結果がＮ個のレイセグメントに対するレイトレーシング処理の結果に対して依存する、Ｎ：１の依存関係を作り出す。このＮ：１の依存関係は、上述の通り処理される。
【００８１】
４４０においてこの依存関係が解決されると、４５０において複数のレイトレーシング処理の結果が集約される。４７５において、複数のレイトレーシング処理を集約した結果に基づいて、ピクセルカラーが決定される。そしてこのピクセルは表示、印刷、またはレンダリングされうる。
アクティブセマフォを使用したＺバッファベースの３次元レンダリング
【００８２】
Ｚバッファベースの３次元グラフィックスレンダリングでは、レンダリングされたオブジェクトは点、線、三角形、三角形ストリップなどのような、レンダリングプリミティブに分割される。レンダリングプリミティブはスクリーン上に投影される。異なるスクリーンピクセルに投影されるレンダリングプリミティブは、独立してレンダリングされうる。複数の不透明なプリミティブが同一のスクリーンピクセル上に投影されているとき、他のプリミティブより前にあるプリミティブ（Ｚ値と呼ばれる対象ピクセルからの距離が、小さいプリミティブ）だけがスクリーンピクセルのカラーを更新する。
【００８３】
Ｚバッファは、スクリーンサイズのバッファであり、各スクリーンピクセルに対する最新の更新におけるＺ値を保持する。見えない部分はＺテストによって解決される。スクリーンピクセルに投影されるあらゆるプリミティブに対して、そのプリミティブのＺ値とＺバッファに保存されているそのスクリーンピクセルのＺ値とを比較する。プリミティブのＺ値がＺバッファの値より小さいと、対象ピクセルのカラーがプリミティブからレンダリングされたカラーに更新され、Ｚバッファ値も更新される。プリミティブのＺ値がＺバッファの値と同じまたはそれより大きいとき、対象ピクセルカラーと対応するＺバッファの値は更新されない。
【００８４】
安定したスクリーンピクチャを生成するために同一のスクリーンピクセルに投影されるプリミティブは厳格な順番に従ってレンダリングされる必要がある。Ｚバッファベースの３次元レンダリングは大規模なスレッドアーキテクチャ上でマルチスレッド処理を行うことによって実現できる。例えば、独立したプリミティブは独立したスレッドによってレンダリングされうる。例えばＺバッファテストや複数のプリミティブによる共通のピクセルの更新のような、プリミティブ間の依存関係は、上述のセマフォ機構を使用することによって解消できる。
【００８５】
図５は、プロアクティブオーダードセマフォを使用したＺバッファベースの３次元グラフィックスレンダリングの一実施例を示すフロー図である。５１０において、レンダリングされるオブジェクトは、スクリーンへの投影に基づいて、プリミティブまたはプリミティブの一部にセグメント化される。５２０において、投影されるスクリーンピクセルの位置に基づいて、プリミティブまたはプリミティブの一部に対してセマフォが設定される。
【００８６】
５３０において、プリミティブまたはプリミティブの一部分に対するレンダリング処理が、複数の命令スレッドによって実行される。これらのスレッドは１つ以上のプロセッサによって実行でき、１つ以上の上述のセマフォ機構を使用して依存関係を解消できる。例えば、異なるスレッドによる同じスクリーンピクセル上に投影された複数のプリミティブに対する３次元レンダリングの実行は、各スレッドのＺテストと対象カラーの更新が同一スクリーンのピクセルを更新する１つ以上の以前のスレッドの結果に依存する、１：１：１の依存関係を作り出す。１：１：１依存関係は上記のように処理できる。
【００８７】
５４０において依存関係が解決されると、５５０において、プリミティブまたはプリミティブセグメント用のスレッドはＺテストを実行し、Ｚテストが成功するとＺ値および投影されたピクセルのカラー値が更新される。５６０において、プリミティブがレンダリングされた後、最終のレンダリングされたピクチャが生成される。そして、この最終のレンダリングされたピクチャは、表示、印刷、または投影されうる。
アクティブセマフォを使用したビデオデコーディング
【００８８】
いくつかのビデオ符号化の標準規格、例えばＭＰＥＧ−２、では、１つのピクチャ（Visual object planeまたはＶＯＰ）内の１つ以上のセグメント（例：マクロブロック）のグループは、独立した命令スレッドによってデコードされうる。いくつかのビデオ符号化の標準規格、例えばＭＰＥＧ−４、では、マクロブロックのようなピクチャセグメントのデコード処理は、他のピクチャセグメントのデコード処理に対して依存関係を有する。このように、マルチスレッドアーキテクチャ上で実行される複数の命令スレッドによって、ピクチャがデコードされうる。スレッド間の依存関係は上述のセマフォ機構を使用することによって解決できる。
【００８９】
ＭＰＥＧ−２は、例えば、２０００年１０月に発行されたＩＳＯ／ＩＥＣ１３８１８「Generic coding of moving pictures and associated audio information」および関連する標準規格によって説明されている。ＭＰＥＧ−４は、例えば、２００２年３月に発行されたＩＳＯ／ＩＥＣ１４４９６「"Coding of audio-visual objects」および関連する標準規格によって説明されている。
【００９０】
図６は、アクティブおよび／またはプロアクティブセマフォを使用したビデオデコーディングの一実施形態を示すフロー図である。このフロー図は、ビデオシーケンスの１つのピクチャをデコードする処理を示す。ビデオシーケンスの複数のピクチャをデコードするために、これと同様のプロセスを繰り返すことができる。６１０において、デコードされるピクチャのセグメントが決定される。セグメントは、例えば、ブロック、ブロックのグループ、マクロブロック、マクロブロックのグループ、またはその他のデコードするフレームのいかなるセグメンテーションでもよい。
【００９１】
本発明の一実施例では、それぞれ異なる命令スレッドによってセグメントに対するデコード処理を実行する前に、６４０において、セグメント間の依存関係を決定する。６２０において、セグメントが先頭依存関係を有するとき（そのセグメントのデコーディングが他のセグメントのデコーディング結果に依存するとき）、そのセグメントを処理する命令スレッドに対して先頭依存関係のセマフォが１つ以上設定される。６３０において、セグメントが末尾依存関係を有するとき（後続のデコーディング処理がこのセグメントのデコーディング結果に依存している）、そのセグメントを処理する命令スレッドに対して末尾依存関係のセマフォが１つ以上設定される。
【００９２】
６４０において、複数の命令スレッドによって、セグメントに対するデコード処理が実行される。スレッドは１つ以上のプロセッサによって実行され、依存関係は１つ以上の上述のセマフォ機構を使用することによって解決できる。例えば、Ｎ個のセグメントに対して先頭依存関係を有する１つのセグメントに対しては、Ｎ：１の依存関係モードに設定されたセマフォを使用することによって、これらのセグメントの依存関係を解決できる。Ｎ個の依存されるセグメントのスレッドは末尾依存関係のセマフォと共に設定される。１つの依存するセグメントは先頭依存関係のセマフォと共に設定される。このＮ：１の依存関係は上述の通り処理される。
【００９３】
６３０においてセグメントの依存関係が解決されると、６５０においてデコードされたセグメントの結果が生成される。６６０において、セグメントの結果が集約されて最終のピクチャが生成される。そして最終のデコードされたピクチャが表示、印刷、または投影されうる。
結論
【００９４】
本明細書において「第１の実施形態」、「実施形態」が実施例とともに意味する、特定の特徴、構造、または性質は、少なくとも本発明の一実施例には含まれる。本明細書内に見られる「一実施例」は、必ずしも本発明の同一実施例を参照していない。
【００９５】
上記明細書においては、本発明を特定の実施例を用いて説明している。しかし、本発明の広範な本質および範囲から逸れることなく、種々の修正や変更をすることが可能であることは明白である。本明細書と図面は、それぞれ、本発明を限定するのではなく、本発明を説明するためのものであると見なされるべきである。
【図１】
2007517326.tif 000002
【図２ａ】
2007517326.tif 000003
【図２ｂ】
2007517326.tif 000004
【図２ｃ】
2007517326.tif 000005
【図２ｄ】
2007517326.tif 000006
【図３】
2007517326.tif 000007
【図４】
2007517326.tif 000008
【図５】
2007517326.tif 000009
【図６】
2007517326.tif 000010
【国際調査報告】
2007517326.tif 000011
2007517326.tif 000012
2007517326.tif 000013