(57)【要約】本発明の方法は、一部の実施形態においては、スレッドを生成する要求を受信する段階と、少なくとも受信した要求に応答してキューに要求を供給する段階とを有する。その方法は、キューに供給された要求の少なくとも一部に応答して複数の命令をフェッチする段階と、複数の命令の少なくとも１つの命令を実行する段階とを更に有する。本発明の装置は、一部の実施形態においては、機械が実行するときにその方法をもたらす命令を記憶している記憶媒体を有する。本発明の装置は、一部の実施形態においては、スレッドを生成する要求を受信し、少なくとも受信した要求に応答してスレッドを生成する要求をキューに供給する回路を有する。本発明のシステムは、一部の実施形態においては、スレッドを生成する要求を受信し、少なくとも受信した要求応答してスレッドを生成する要求をキューに供給する回路と、スレッドについての少なくとも１つの命令を記憶するメモリユニットとを有する。
2010515161.tif 000002
【特許請求の範囲】
【請求項１】
スレッドを生成する要求を受信する段階；及び
受信した要求の少なくとも一部に応答して、キューに要求を供給する段階；
を有する方法。
【請求項２】
請求項１に記載の方法であって：
前記キューに供給された前記要求の少なくとも一部に応答して複数の命令をフェッチする段階；及び
前記複数の命令の少なくとも１つの命令を実行する段階；
を更に有する方法。
【請求項３】
請求項２に記載の方法であって、前記複数の命令の少なくとも１つの命令を実行する段階は：
前記少なくとも１つの命令を実行するように実行ユニットに前記少なくとも１つの命令を供給する段階；
を有する方法。
【請求項４】
請求項１に記載の方法であって：
スレッドを生成するように実行ユニットから要求を受信する段階；及び
前記実行ユニットからの前記要求の少なくとも一部に応答して、キューに要求を供給する段階；
を更に有する方法。
【請求項５】
請求項２に記載の方法であって、スレッドを生成するように要求を受信する前記段階は：
第１ポインタを受信する段階；
を有する方法。
【請求項６】
請求項５に記載の方法であって、前記キューに供給された前記要求の少なくとも一部に応答して複数の命令をフェッチする前記段階は：
前記第１ポインタの少なくとも一部に応答して複数の命令をフェッチする段階；
を有する、方法。
【請求項７】
請求項６に記載の方法であって、前記第１ポインタの少なくとも一部に応答して複数の命令をフェッチする前記段階は：
前記第１ポインタ及び第２ポインタの少なくとも一部に応答して複数の命令をフェッチする段階；
を更に有する、方法。
【請求項８】
請求項１に記載の方法であって、スレッドを生成する要求を受信する前記段階は、第１スレッドを生成する要求を受信する段階を有し、キューに要求を供給する前記段階は、前記第１スレッドを生成する前記要求の少なくとも一部に応答して第１キューに第１要求を供給する段階を有する、方法。
【請求項９】
請求項８に記載の方法であって：
第２スレッドを生成する要求を受信する段階；及び
第２スレッドを生成する前記要求の少なくとも一部に応答して第２キューに第２要求を供給する段階；
を更に有する方法。
【請求項１０】
請求項９に記載の方法であって：
前記第１要求の少なくとも一部に応答して複数の命令をフェッチする段階；及び
実行ユニットに前記複数の命令の少なくとも１つの命令を供給する段階；
を更に有する方法。
【請求項１１】
請求項９に記載の方法であって：
前記第１キューにおける要求と前記第２キューにおける要求との間で調停する段階；
を更に有する方法。
【請求項１２】
請求項９に記載の方法であって：
前記第１キューにおける要求を前記第２キューにおける要求に対して同期させる段階；
を更に有する方法。
【請求項１３】
スレッドを生成する要求を受信し、前記受信した要求の少なくとも一部に応答してスレッドを生成する要求をキューに供給する回路；
を有する装置。
【請求項１４】
請求項１３に記載の装置であって：
前記キューに供給された前記要求の少なくとも一部に応答して複数の命令をフェッチし、前記複数の命令の少なくとも１つの命令を実行する回路；
を更に有する装置。
【請求項１５】
請求項１４に記載の装置であって、前記キューに供給された前記要求の少なくとも一部に応答して複数の命令をフェッチし、前記複数の命令の少なくとも１つの命令を実行する前記回路は：
前記少なくとも１つの命令を実行する実行ユニット；
を有する、装置。
【請求項１６】
請求項１５に記載の装置であって：
スレッドを生成する実行ユニットから要求を受信し、前記実行ユニットから受信した前記要求の少なくとも一部に応答してスレッドを生成する要求をキューに供給する回路；
を更に有する装置。
【請求項１７】
請求項１３に記載の装置であって、前記回路は：
第１ポインタを受信する回路；
を有する、装置。
【請求項１８】
請求項１７に記載の装置であって、前記回路は：
前記第１ポインタの少なくとも一部に応答して複数の命令をフェッチし、前記複数の命令の少なくとも１つの命令を実行する回路；
を有する、装置。
【請求項１９】
請求項１８に記載の装置であって、前記第１ポインタの少なくとも一部に応答して複数の命令をフェッチする回路は：
前記第１ポインタ及び第２ポインタの少なくとも一部に応答して複数の命令をフェッチする回路；
を有する、装置。
【請求項２０】
請求項１３に記載の装置であって、前記回路は：
第１スレッドを生成する要求を受信する回路；及び
前記受信した要求の少なくとも一部に応答してスレッドを生成する第１要求を供給する第１キュー；
を有する、装置。
【請求項２１】
請求項２０に記載の装置であって：
第２スレッドを生成する要求を受信する回路；及び
前記第２スレッドを生成するように前記受信した要求の少なくとも一部に応答してスレッドを生成する要求を供給する第２キュー；
を有する装置。
【請求項２２】
請求項２１に記載の装置であって：
前記第１キューにおける要求と前記第２キューにおける要求との間で調停する回路；
を更に有する装置。
【請求項２３】
請求項２１に記載の装置であって：
前記第１キューにおける要求を前記第２キューにおける要求と同期する回路；
を更に有する装置。
【請求項２４】
機械により実行されるときに、スレッドを生成する要求を受信することと、該受信した要求の少なくとも一部に応答してキューに要求を供給することとをもたらす命令を記憶している記憶媒体；
を有する装置。
【請求項２５】
請求項２４に記載の装置であって、前記命令は：
機械により実行されるときに、前記キューに供給された前記要求の少なくとも一部に応答して複数の命令をフェッチすることと、前記複数の命令の少なくとも１つの命令を実行することとをもたらす命令；
を有する、装置。
【請求項２６】
請求項２５に記載の装置であって、前記複数の命令の少なくとも１つの命令を実行することは：
前記少なくとも１つの命令を実行する実行ユニットに前記少なくとも１つの命令を供給すること；
を有する、装置。
【請求項２７】
請求項２６に記載の装置であって、前記命令は：
機械により実行されるときに、スレッドを生成するように実行ユニットから要求を受信することと、前記実行ユニットからの前記要求の少なくとも一部に応答してキューに要求を供給することとをもたらす命令；
を更に有する、装置。
【請求項２８】
スレッドを生成する要求を受信し、該受信した要求の少なくとも一部に応答してスレッドを生成する要求をキューに供給する回路；及び
前記スレッドについての少なくとも１つの命令を記憶するメモリユニット；
を有するシステム。
【請求項２９】
請求項２８に記載のシステムであって：
前記キューに供給された前記要求の少なくとも一部に応答して複数の命令をフェッチし、前記複数の命令の少なくとも１つの命令を実行する回路；
を更に有するシステム。
【請求項３０】
請求項２９に記載のシステムであって、前記キューに供給された前記要求の少なくとも一部に応答して複数の命令をフェッチし、前記複数の命令の少なくとも１つの命令を実行する回路は：
前記少なくとも１つの命令を実行する実行ユニット；
を有する、システム。
【発明の詳細な説明】
【技術分野】
【０００１】
スレッドをキューに供給する方法及び装置に関する。
【背景技術】
【０００２】
処理システムは、性能を改善するために２つ以上のスレッドを実行する能力を有することが可能である。例えば、処理システムは、１つ又はそれ以上のイベントが生じるまで、例えば、データを待っている間にストールモードにされるまで、スレッドを実行して、次いで、他のスレッドを実行し始める、能力を有することが可能である。
【０００３】
１つのマルチスレッディング処理システムにおいては、実行ユニットは複数のチャネルであって、２つ又はそれ以上のスレッドを実行する能力を各々有する２つ又はそれ以上のチャネルを有する。
【０００４】
マルチスレッディングシステムの現在の状態にも拘わらず、マルチスレッディングシステムにおけるスレッドの生成及び／又は実行で用いられる更なる方法及び装置について要請されている。
【発明の概要】
【課題を解決するための手段】
【０００５】
本明細書で説明する幾つかの実施形態は“処理システム”に関連している。本明細書で用いるように、表現“処理システム”とは、データを処理する何れかのシステムのことをいう。一部の実施形態においては、処理システムは、グラフィクスデータ及び／又は他の種類のメディア情報を処理するグラフィクスエンジンと関連する。一部の場合には、処理システムの性能は、ＳＩＭＤ実行ユニットの使用により改善されることが可能である。例えば、ＳＩＭＤ実行ユニットは、データの多チャンネルについての単一浮動小数点ＳＩＭＤ命令を同時に実行する（例えば、変換を加速する及び／又は三次元幾何形状をレンダリングするように）ことが可能である。他の処理システムの例には、中央演算処理装置（ＣＰＵ）及びディジタル信号プロセッサ（ＤＳＰ）がある。
【図面の簡単な説明】
【０００６】
【図１】一部の実施形態に従ったシステムのブロック図である。
【図２】一部の実施形態に従った、図１のシステムの処理システムのブロック図である。
【図３Ａ】一部の実施形態に従った、図１のシステムの処理システムの一部のブロック図である。
【図３Ｂ】一部の実施形態に従った、図１のシステムの処理システムの一部のブロック図である。
【図４】一部の実施形態に従った、図１のシステムのスレッド生成器の模式的なブロック図である。
【図５】一部の実施形態に従った、図１のシステムのスレッド生成器のコマンド及び状態モデルの模式的なブロック図である。
【図６】一部の実施形態に従った、スレッド関係の模式図である。
【図７】一部の実施形態に従った、スレッド関係の模式図である。
【図８】一部の実施形態に従った、図４のスレッド生成器のスレッドスポーナ（ｓｐａｗｎｅｒ）機能ブロック図である。
【図９】一部の実施形態に従った方法のフロー図である。
【発明を実施するための形態】
【０００７】
図１は、一部の実施形態に従ったシステム１００のブロック図である。図１を参照するに、システム１００は、入力装置１１０と、処理システム１２０と、出力装置１３０とを有する。入力装置１１０は、通信リンク１４０を介して処理システム１２０に結合されることが可能である、処理システム１２０は、通信リンク１５０を介して出力装置１３０に結合されることが可能である。
【０００８】
作動中、入力装置１１０は、通信リンク１４０を介して処理システムに情報を供給することが可能である。処理システム１２０は、入力装置１１０により供給される情報を受信することが可能であり、情報を記憶し、及び／又は、通信リンク１５０を介して出力装置１４０、例えば、表示装置１４０に情報を供給することが可能である。
【０００９】
本明細書で用いているように、通信リンクは、何れかの種類の通信リンク、例えば、有線リンク（例えば、導体ケーブル、光ファイバケーブル）又は無線リンク（例えば、音響リンク、電磁リンク、又は、例えば、マイクロ波リンク、衛星リンク、赤外線リンクを含む何れかの組み合わせであることが可能であるが、それらに限定されない）、並びに／若しくは、それらの組み合わせであり、それらの各々は公的又は私的であることが可能であるが、それらに限定されるものではない。通信リンクは、何れかの種類の恒久通信リンクである又はないことが可能である。通信リンクは、何れかの形式の何れかの種類の情報に、例えば、シリアル形式の及び／又はパラレル形式のアナログ及び／又はディジタル（例えば、２値の列、即ち、ビット列）信号に対応することが可能である。その情報は、ブロックに分割されることが可能であり又はされないことが可能である。ブロックに分割される場合、ブロックにおける情報量は予め決定される又は動的に決定される、並びに／若しくは固定化される（例えば、同様に）又は可変であることが可能である。通信リンクは、１つのプロトコル、又は例えば、インターネットプロトコルを含む複数のプロトコルの組み合わせを用いることが可能である。
【００１０】
一部の実施形態においては、処理システムは１つ又はそれ以上のプロセッサを有する。本明細書で用いているように、プロセッサは何れかの種類のプロセッサであることが可能である。例えば、プロセッサは、プログラマブルな又は非プログラマブルな、汎用の又は専門の、専用の又は非専用の、共有の又は非共有の、並びに／若しくはそれらの組み合わせであることが可能である。プロセッサが２つの又はそれ以上の区分された部分を有する場合、それらの２つの又はそれ以上の部分は、通信リンクを介して互いに通信することが可能である。プロセッサは、例えば、ハードウェア、ソフトウェア、ファームウェア、ハードワイヤード回路及び／又はそれらの何れかの組み合わせを有することが可能であるが、それらに限定されるものではない。
【００１１】
図２は、一部の実施形態に従った、処理システム１２０のブロック図である。図２を参照するに、一部の実施形態においては、処理システム１２０は、プロセッサ２１０及びメモリユニット２１５を有する、プロセッサ２１０は実行ユニット２２０を有することが可能であり、例えば、汎用プロセッサ、ディジタル信号プロセッサ、メディアプロセッサ、グラフィクスプロセッサ及び／又は通信プロセッサと連携することが可能である。
【００１２】
メモリユニット２１５は命令及びデータ（例えば、二次元画像、三次元画像及び／又は動画に関連するスカラ及びベクトル）を記憶することが可能であり、１つ又はそれ以上の通信リンクを介してプロセッサ２１０に結合されることが可能である。一部の実施形態においては、メモリユニット２１５又はそのメモリの一部は、ハードディスクドライブ（例えば、メディア情報を記憶し、供給するように）、例えば、ランダムアクセスメモリ（ＲＡＭ）等の揮発性メモリ及び／又は例えばフラッシュメモリ等の不揮発性メモリを有する。
【００１３】
一部の実施形態においては、メモリユニット２１５は、命令を記憶することが可能である命令メモリユニット２３０と、データを記憶することが可能であるデータメモリユニット２４０とを有する。命令メモリユニット２３０は、通信リンク２５０を介してプロセッサに結合されることが可能である。データメモリユニット２４０は、通信リンク２６０を介してプロセッサに結合されることが可能である。一部の実施形態においては、命令メモリユニット２３０及びデータメモリユニット２４０は、別個の命令キャッシュ及びデータキャッシュ、共有命令キャッシュ及びデータキャッシュ、共通の共有キャッシュによりバックアップされた別個の命令キャッシュ及びデータキャッシュに関連する。
【００１４】
図３Ａは、一部の実施形態に従った、処理システムの一部のブロック図である。図３Ａを参照するに、一部の実施形態においては、処理システムは、実行ユニット３００及びスレッド生成器３１０を有することが可能である。一部の実施形態においては、実行ユニット３００は、スレッドテーブル３２０と、複数の命令キュー３３０と、複数のデコーダ３４０と、命令ディスパッチャ３５０と、実行ユニットパイプライン３６０とを有することが可能である。
【００１５】
一部の実施形態においては、コマンドは、通信リンク１４０を介してスレッド生成器３１０の入力に供給されることが可能である。それらのコマンドは、例えば、ホスト及び／又は入力装置１１０（図１）を含む何れかのコマンドソースから供給されることが可能であるが、それらに限定されるものではない。一部の実施形態においては、スレッド生成器３１０は、１つ又はそれ以上の信号ライン及び／又はバス３８０を介して実行ユニットパイプライン３６０からコマンドを受信することも可能である。スレッド生成器３１０は、１つ又はそれ以上のスレッドを生成する要求を含むことが可能であるコマンドを処理することが可能であり、少なくともそれらのコマンドに応答して１つ又はそれ以上のスレッドを生成することが可能である。スレッド生成器３１０の１つ又はそれ以上の出力は１つ又はそれ以上のスレッドを供給することが可能であり、そのスレッドについての規定はまた、１つ又はそれ以上の信号ライン３７０を介してスレッドテーブル３２０の１つ又はそれ以上の入力に供給されることが可能である。各々のスレッドは、処理システムにより実行される及び／又は実行されるようになっている１つ又はそれ以上のプログラムの１つ、幾つか又は全てを規定する複数の命令を記憶することが可能である命令キャッシュ又は他のメモリからフェッチされることが可能である命令の集合を有することが可能である。スレッドテーブルにより規定された各々のスレッドについての命令は、複数の命令キュー３３０のそれぞれの命令キューに供給されることが可能であり、それらの複数の命令キューの各々は、例えば、少数の命令、例えば、６つ乃至８つの命令を記憶するように大きさ付けされることが可能である。各々の命令キュー３３０からの命令は、複数のデコーダ３４０のそれぞれのデコーダの入力に対して供給されることが可能である。それらの複数のデコーダ３４０は、命令ディスパッチャ３５０に復号化命令を供給することが可能であり、その命令ディスパッチャは実行パイプライン３６０に実行される１つ又はそれ以上のスレッドについての復号化命令を供給することが可能であり、その実行パイプラインはその復号化命令を実行することが可能である。
【００１６】
図３Ｂは、一部の実施形態に従った、処理システムの一部のブロック図である。図３Ｂを参照するに、一部の実施形態においては、処理システムは、実行ユニット３９０及びスレッド生成器３１０を有する。一部の実施形態においては、実行ユニット３９０は、複数の実行ユニット、例えば、実行ユニット３００Ａ乃至３００Ｄを有することが可能である。一部の実施形態においては、実行ユニット３００Ａ乃至３００Ｄの各々は、実行ユニット３００（図３Ａ）と同じである及び／又は類似することが可能である。
【００１７】
一部の実施形態においては、コマンドは、通信リンク１４０を介してスレッド生成器３１０の入力に供給されることが可能である。それらのコマンドは、例えば、ホスト及び／又は入力装置１１０（図１）を含む何れかのコマンドソースから供給されることが可能であるが、それらに限定されるものではない。一部の実施形態においては、スレッド生成器は、実行ユニット３００Ａ乃至３００Ｄの１つ又はそれ以上からコマンドを受信することも可能である。スレッド生成器３１０は、１つ又はそれ以上のスレッドを生成する要求を含むことが可能であるそれらのコマンドを処理することが可能であり、少なくともそれらのコマンドに応答して１つ又はそれ以上のスレッドを生成することが可能である。スレッド生成器３１０の１つ又はそれ以上の出力は、１つ又はそれ以上のスレッドを供給することが可能であり、それらのスレッドの規定が順に、実行ユニット３００Ａ乃至３００Ｄの１つ又はそれ以上に、例えば、実行ユニット３００Ａ乃至３００Ｄの１つ又はそれ以上のスレッドテーブル（例えば、スレッドテーブル３２０（図３Ａ）を参照されたい）の１つ又はそれ以上の入力に供給されることが可能である。一部の実施形態においては、実行ユニット３００Ａ乃至３００Ｄの動作は、上記の実行ユニット３００（図３Ａ）の動作と同じである及び／又は類似していることが可能である。
【００１８】
一部の実施形態においては、実行ユニット（３００Ａ、３００Ｂ、３００Ｃ又は３００Ｄ）はＳＩＭＤ実行ユニットを有することが可能である。一部の実施形態においては、ＳＩＭＤ実行ユニットは、４成分データベクトル（例えば、ベクトル成分）と共に命令（例えば、命令メモリユニットからの）を受信することが可能である。実行ユニットは、その場合、そのベクトルの成分の全てについての命令を同時に実行することが可能である。そのような方法は、“チャンネル−パラレル”又は“構造のアレイ（Ａｒｒａｙ  Ｏｆ  Ｓｔｒｕｃｔｕｒｅ：ＡＯＳ”実行と称せられている。一部の実施形態においては、ＳＩＭＤ実行ユニットは、データの４つのオペランドと共に命令を受信することが可能であり、その場合、各々のオペランドは異なるベクトルと関連している。各々のベクトルは、例えば、三次元グラフィクス位置と関連する３つの一ベクトル（例えば、Ｘ，Ｙ及びＺ）を有することが可能である。実行ユニットは、その場合、単一の命令期間におけるオペランドの全てについての命令を同時に実行することが可能である。そのような方法は、“垂直”“チャンネル−シリアル”又は“アレイの構造（ＳＯＡ））”実行と称せられている。
【００１９】
本明細書で説明している一部の実施形態は、４つ乃至８つの方法のＳＩＭＤ実行ユニットに関連しているが、ＳＩＭＤ実行ユニットは２つ以上の何れかの数のチャンネルを有する（例えば、複数の実施形態は３２個のチャンネル実行ユニットに関連する）ことが可能である。
【００２０】
図４は、一部の実施形態に従った、スレッド生成器３１０の機能ブロック図である。図４を参照するに、一部の実施形態においては、スレッド生成器３１０は、コマンドストリーマ４０２と、映像フロントエンド４０４と、スレッドスポーナ４０６と、マルチプレクサ４１０と、メモリ（ときどき、本明細書においては、統一戻りバッファ（Ｕｎｉｆｉｅｄ  Ｒｅｔｕｒｎ  Ｂｕｆｆｅｒ：ＵＲＢ）である）と、スレッドディスパッチャ４１４とを有することが可能である。
【００２１】
コマンドストリーマは、映像フロントエンド４０４及びマルチプレクサ４１０に結合されることが可能である。映像フロントエンド４０４は、スレッドスポーナ４０６及びマルチプレクサ４１０に結合されることが可能である。マルチプレクサは統一戻りバッファに結合されることが可能であり、その統一戻りバッファはスレッドディスパッチャ４１４に結合されることが可能である。
【００２２】
一部の実施形態においては、処理システム４００の部分の種々の一部の間の結合、例えば、電気的接続が、専用化される、共有される（例えば、バス）及び／又はそれらの何れかの組み合わせにされることが可能である。その点で、一部の実施形態においては、例えば、コマンドストリーマ、映像フロントエンド及び実行ユニットからメモリへの、例えば、ＵＲＢへの結合、例えば、電気的接続は、１つ又はそれ以上の共有データバスを有することが可能である。一部の実施形態においては、他の結合、例えば、複数の電気的接続の各々は、１つ又はそれ以上の専用信号ラインを有することが可能である。
【００２３】
コマンドストリーマ４０２の入力は複数のコマンドを受信することが可能である。複数の入力コマンドが、例えば、ホストプロセッサ及び／又は入力装置１１０（図１）を含む何れかのコマンドソースにより供給されることが可能であるが、それらに限定されるものではない。一部の実施形態においては、コマンドストリーマ４０２は、メモリからそのようなコマンドをフェッチするダイレクトメモリアクセス（ＤＭＡ）エンジンを有する。一部のそのような実施形態においては、ＤＭＡエンジンはリングバッファとして構成される。
【００２４】
コマンドの１つ又はそれ以上は、スレッドを生成する要求を有することが可能である。そのようなコマンドは何れかの形式を有することが可能である。一部の実施形態においては、その要求は、スレッドを生成する過程で用いられることが可能である情報を含むことが可能である。
【００２５】
スレッドを要求するコマンドの１つ又はそれ以上の部分が、映像フロントエンド４０４の入力に供給されることが可能である、コマンドがスレッドを要求する場合、映像フロントエンド４０４は、そのコマンドに応答してスレッド要求を供給することが可能である。映像フロントエンド４０４により供給されるスレッド要求は、コマンドストリーマ４０２及び／又は映像フロントエンド４０４に対して供給される要求と同じ形式を有することが可能である又は可能でない。一部の実施形態においては、スレッド要求は、スレッドを生成するように用いられることが可能である情報を有する。
【００２６】
映像フロントエンド４０４からのスレッド要求は、スレッドスポーナ４０６の第１入力、実行ユニットにおいて実行される１つ又はそれ以上のスレッドにより生成されるスレッド要求を受信することが可能である第２入力に供給されることが可能である。特に、ホストコマンドからもたらされるスレッド要求はときどき、以下、ルートスレッド要求と称せられている。実行ユニットからのスレッド要求はときどき、スポーン（ｓｐａｗｎ）スレッド要求と称せられている。実行ユニットにおいて実行される他のスレッドにより生成されるスレッドは子スレッドと称せられている。子スレッドは付加スレッドを生成することが可能であり、それらの子スレッドの全てはルートスレッドのツリーの下にある。
【００２７】
図６は、一部の実施形態に従ったスレッド関係の模式図である。図６を参照するに、一部の実施形態においては、スレッド関係は単一のツリー構造６００を有することが可能である。単一のツリー構造６００は、複数の子スレッド６０４乃至６１２を生成する単一のルートスレッド６０２を有することが可能である。一部の子スレッドは後続の子スレッドを生成することが可能である。例えば、子スレッド６０６は子スレッド６１４、６１６を生成することが可能である。子スレッド６０８は子スレッド６１８、６２０を生成することが可能である。子スレッド６１０は子スレッド６２２を生成することが可能である。ルートスレッド６０８、６１０、６１２はルートスレッド６０２に依存し、同期ルートスレッドと称せられていて、それについては下で更に説明する。
【００２８】
図７は、一部の実施形態に従ったスレッド関係の模式図である。図７を参照するに、一部の実施形態においては、スレッド関係は複数の不連続なツリー７００、７０１を有することが可能である、第１ツリー７００は、子スレッド７０４、７０６を有する第１ルートスレッド７０２を有する。子スレッド７０６は子スレッド７１４、７１６を生成することが可能である。ルートスレッド７０８は兄弟ルートスレッド７１０、７１２を有することが可能である、ルートスレッド７０８は子スレッド７１８、７２０を生成することが可能である。ルートスレッド７０２は兄弟ルートスレッド７０８、７１０、７１２を有することが可能である。ルートスレッド７０２及び兄弟ルートスレッド７０８、７１０、７１２は独立していて、非同期ルートスレッドと称せされていて、それについては下で更に説明する。
【００２９】
図４を再び参照するに、スレッドスポーナ４０６は複数のスレッド要求を待ち行列に入れる及び／又はそれらの複数のスレッド要求を調停することが可能であり、少なくともそれらのスレッド要求の一部に基づくスレッド要求を供給することが可能である。スレッドスポーナ４０６により供給されるスレッド要求は何れかの形式を有することが可能であり、それ故、コマンドストリーマ４０２に供給される要求、映像フロントエンド４０４に供給される要求及び／又はスレッドスポーナ４０６に供給される要求と同じ形式を有することが可能である又は可能でない。
【００３０】
スレッドスポーナ４０６からのスレッド要求は、スレッドディスパッチャ４１４との第１入力に供給されることが可能であり、これについては下で更に説明する。
【００３１】
一部の実施形態においては、コマンドストリーマ４０２及び映像フロントエンド４０４は、マルチプレクサ４１０の入力に情報を供給することも可能である。マルチプレクサの他の入力は実行ユニットからの情報を受信することが可能である。
【００３２】
マルチプレクサ４１０の出力は、コマンドストリーマ４０２、映像フロントエンド４０４及び実行ユニットから受信された情報を供給することが可能であり、その情報は、本明細書で統一戻りバッファ（ＵＲＢ）と称せられているメモリ４１２に供給されることが可能である。
【００３３】
一部の実施形態においては、メモリ４１２は２つ又はそれ以上の部分に区分化されることが可能である。一部のそのような実施形態においては、本明細書でときどき、ハンドル又はＵＲＢハンドルと称せられているインデックスが、メモリにおけるそのような複数の区分の参照区分を示すポインタとして用いられることが可能である。そのような区分の１つは、ときどき定数ＵＲＢと称せられていて、１つ又はそれ以上の定数を記憶するように用いられることが可能である。
【００３４】
一部の実施形態においては、メモリの１つ又はそれ以上の部分が、コマンドストリーマ４０２、映像フロントエンド４０４、スレッドスポーナ４０６及び／又はスレッドディスパッチャ４１４と同じチップ上に備えられることが可能である。
【００３５】
メモリ又はＵＲＢ４１２の出力は、スレッドディスパッチャ４１４の第２入力に供給されることが可能である情報を供給することが可能である、スレッドディスパッチャ４１４は、その第２入力に供給されるそのようなスレッドの各々についてのスレッドをディスパッチすることが可能である。一部の実施形態においては、スレッドディスパッチャ４１４は、同時に一度、複数のスレッド要求を処理する。即ち、スレッドディスパッチャ４１４は、スレッドディスパッチャ４１４がそのディスパッチャに供給された先行するスレッド要求についてのスレッドをディスパッチするまで、スレッド要求を要求しない及び／又は受信しないことが可能である。
【００３６】
一部の実施形態においては、制御情報がスレッドディスパッチャに供給されることが可能であり、そのスレッドをディスパッチするように、例えば、そのスレッドにより要求されることが可能であるレジスタの数を構成する及び／又は割り当てるように、用いられることが可能である。
【００３７】
スレッドは何れかの方法でディスパッチされることが可能である。その点に関して、一部の実施形態においては、スレッドディスパッチャ４１４は、“ラウンドロビン”方式でスレッドをディスパッチすることが可能である。例えば、一部の実施形態においては、実行ユニットは複数の実行ユニットを有することが可能であり、それらの複数の実行ユニットの各々は複数のスレッドを実行することが可能である。そのような一部の実施形態においては、スレッドディスパッチャは、第１スレッドを第１実行ユニットにおける第１スレッドスロットに、第２スレッドを第２実行ユニットにおける第１スロットに、第３スレッドを第３実行ユニットにおける第１スロットに、第４スレッドを第４実行ユニットにおける第１スロットに、第５スレッドを第１実行ユニットにおける第２スロットに割り当てることが可能である。実行ユニットがスレッドの実行を終了した場合、スレッドメッセージの終点が、例えば、実行ユニットにより生成され、スレッドスポーナ４０６に供給されることが可能である。
【００３８】
図５は、一部の実施形態に従った、スレッドに関係する情報を規定するように用いられることが可能であるスレッド及び状態モデル５１０を要求する処理システムに供給されることが可能である複数のコマンドのシーケンス５００の模式図である。図４を参照するに、一部の実施形態においては、スレッドを要求するように用いられるコマンドのシーケンスは、状態ポインタコマンド５１２と、非パイプライン化状態コマンド５１６と、プリミティブコマンド５１８とを有することが可能である。
【００３９】
状態ポインタコマンド５１２は、状態情報を有する状態記述子に少なくとも１つのポインタを供給することにより、パイプライン（例えば、映像フロントエンド４０４及び／又はスレッドスポーナ４０６）における固定機能を制御する状態情報を‘間接的に’供給することが可能である。一部の実施形態においては、状態ポインタコマンドは、ＶＦＥ状態記述子５２０を示すことが可能であるＶＦＥ状態ポインタ５１４を有することが可能である。一部のそのような実施形態においては、ＶＦＥ状態記述子は、インタフェース記述子の基底を示すことが可能であるインタフェース記述子基底ポインタを有することが可能である。
【００４０】
非パイプライン化状態コマンド５１６は、パイプラインに関連する固定機能及びメモリを制御する状態情報を‘直接’供給することが可能である。非パイプライン化状態コマンドの一のタイプがメモリの区分化を構成することが可能であり、上記のようなメモリは、コマンドストリーマ４０２、映像フロントエンド４０４、スレッドスポーナ４０６及び／又はスレッドディスパッチャ４１４と同じチップ上に備えられることが可能である。非パイプライン化状態コマンドの他のタイプは定数コマンドであり、本明細書においてはときどき、定数ＵＲＢコマンドと称せられていて、定数データ、例えば、１つ又はそれ以上の定数を規定することが可能である。一部の実施形態においては、データは、間接的に（例えば、メモリに対する１つ又はそれ以上のポインタにより識別される）又は調和して（例えば、コマンドに含まれて）規定されることが可能である。
【００４１】
プリミティブコマンド５１８は、用いられることが可能であるコマンドの他のタイプである。一部の実施形態においては、プリミティブコマンドは、１つ又はそれ以上のスレッドが生成されることを要求するように用いられることが可能である、一部の実施形態においては、プリミティブコマンドは、生成されるようになっている１つ又はそれ以上のスレッドについての情報、即ち、制御及び／又はデータを含むことが可能である、一部の実施形態においては、制御情報は、スレッドを構成するように、例えば、スレッドにより要求されることが可能であるレジスタの数を構成する及び／又は割り当てるように用いられることが可能である情報を有することが可能である。一部の実施形態においては、制御情報は、生成されるようになっているスレッドについてのインタフェース記述子オフセットを含むことが可能である。一部の実施形態においては、スレッドについてのインタフェース記述子ポインタは、インタフェース記述子オフセット及びインタフェース記述子ベースポインタに基づいて決定されることが可能である（上記のように、一部の実施形態においては、映像フロントエンド４０４は、インタフェース記述子ベースポインタを含むことが可能であるＶＦＥ状態記述子５２０を示すことが可能であるＶＦＥ状態ポインタ５１４を有する状態ポインタコマンドと共に供給されることが可能である）。
【００４２】
インタフェース記述子５１０は、スレッドに関連する情報を規定するように用いられることが可能である。インタフェース記述子モデル及び状態記述子モデルは、インタフェース記述子ベースポインタ５２２及び複数のインタフェース記述子５２４を有することが可能である。インタフェース記述子ベースポインタ５２２は、インタフェース記述子５２４の１つ又はそれ以上のインタフェース記述子の位置を提供することが可能である。
【００４３】
一部の実施形態においては、インタフェース記述子５２４は、ディスパッチされた及びディスパッチされるようになっているスレッドについての状態情報を提供する、一部の実施形態においては、各々のインタフェース記述子５２４は、スレッドをディスパッチするようにスレッドスポーナ４０６及び／又はスレッドディスパッチャ４１４についての十分な情報を有することが可能である。
【００４４】
一部の実施形態においては、複数のインタフェース記述子５２４の各々は、スレッドポインタ５２６及びスレッド資源記述子５２８、サンプラ状態ポインタ５３０、拘束テーブルポインタ５３２並びに／若しくは他のハードウェア機能へのアクセス及びメモリへのアクセスのために用いられることが可能である１つ又はそれ以上のポインタを有することが可能である。スレッドポインタ５２６は、スレッドについての１つ又はそれ以上の命令（例えば、第１命令）の位置を提供することが可能である。スレッド資源記述子５２８は、スレッドにより要求されることが可能である資源、例えば、スレッド及び／又は浮動小数点モードにより要求されることが可能である資源を示すことが可能である。サンプラ状態ポインタ５３０は、サンプラ状態テーブル５３４における１つ又はそれ以上の記述子（例えば、第１記述子）の位置を提供することが可能である、一部の実施形態においては、サンプラ状態テーブル５３４が最大１６個のサンプラ状態記述子まで含むことが可能である。一部の実施形態においては、サンプラ状態記述子の１つ又はそれ以上が、三次元グラフィクスに関連して用いられることが可能である。一部の実施形態においては、サンプラ状態記述子の１つ又はそれ以上が、サンプラ装置（例えば、グラフィクステクスチャサンプラユニット（図示せず））の１つ又はそれ以上の状態を提供する。
【００４５】
拘束テーブルポインタ５３２は、拘束テーブル５３６の１つ又はそれ以上のエントリ（例えば、第１エントリ）の位置を提供することが可能である。一部の実施形態においては、拘束テーブル５３６は最大２５６個のエントリを有することが可能である、拘束テーブル５３６における１つ又はそれ以上のそのようなエントリは、表面状態記述子５４０の位置を提供するポインタを規定することが可能である。一部の実施形態においては、表面状態の１つ又はそれ以上は、メモリにおけるデータアレイを及び／又はデータバッファに関連するデータ処理を規定することが可能である。一部の実施形態においては、１つ又はそれ以上の表面状態記述子５４０は、二次元画像についての外部の拘束されたデータアクセスの処理の仕方について示すことが可能である。
【００４６】
インタフェース記述子５２４の各々は、それ自体のメモリ位置に、即ち、他のインタフェース記述子が記憶されるメモリ位置と異なる１つ又はそれ以上のメモリ位置に記憶されることが可能である。特定のインタフェース記述子５２４の位置は、インタフェース記述子ベースポインタにインデックス又はオフセットを付加することにより決定されることが可能であり、そのインデックス又はオフセットはときどき、本明細書においては、インタフェース記述子インデックスと称されている。それ故、そのモデルの１つ又はそれ以上の特徴はアドレッシングの２つのレベルを用いることが可能である。更に、アドレッシングの１つ又はそれ以上のそのようなレベルは、ベース＋オフセットアドレッシングを有することが可能である。
【００４７】
一部の実施形態においては、インタフェース記述子の全ては、同じサイズを有する及び／又はメモリにおける連続アレイとして組織化される。一部の他の実施形態においては、１つ又はそれ以上のインタフェース記述子は異なるサイズを有し、並びに／若しくは他のインタフェース記述子と連続的でないメモリの位置に記憶される。
【００４８】
ここでまた、図４を参照するに、一部の実施形態においては、コマンドストリーマ４０２に供給されるコマンドは、図５に示している及び／又は図５に関して説明しているコマンドと同じ及び／又は類似している。一部のそのような実施形態においては、コマンドストリーマ４０２は先ず、状態ポインタコマンドを受信することが可能である。状態ポインタコマンド５１２（図５）を受信するとき、コマンドストリーマ４０２は、映像フロントエンドに、ＶＦＥ状態記述子５２０（図５）の位置を示すことが可能である状態ポインタを供給することが可能である。コマンドストリーマは、その後、１つ又はそれ以上のプリミティブコマンドを受信することが可能である。上記のように、一部の実施形態においては、プリミティブコマンドは、１つ又はそれ以上のスレッドが生成される要求を表すことが可能である。一部の実施形態においては、プリミティブコマンドは、情報を、即ち、生成されるようになっている１つ又はそれ以上のスレッドについての制御及び／又はデータを有することが可能である。一部の実施形態においては、制御情報は、スレッドを構成するように、例えば、スレッドにより要求されることが可能であるレジスタの数を構成する及び／又は割り当てるように用いられることが可能である情報を有することが可能である。一部の実施形態においては、制御情報は、生成されるようになっているスレッドについてのインタフェース記述子オフセットを有することが可能である。一部の実施形態においては、スレッドについてのインタフェース記述子ポインタは、インタフェース記述子オフセット及びインタフェース記述子ベースポインタに基づいて決定されることが可能である（上記のように、一部の実施形態においては、映像フロントエンド４０４は、インタフェース記述子ベースポインタを有することが可能であるＶＦＥ状態記述子５２０を示すことが可能であるＶＦＥ状態ポインタ５１４を有する状態ポインタコマンドと共に供給されることが可能である）。一部の実施形態においては、映像フロントエンド４０４は、インタフェース記述子オフセット（上記のように、プリミティブコマンド５１８（図５）に含まれることが可能である）及びインタフェース記述子ベースポインタ５２２（上記のように、一部の実施形態においては、映像フロントエンドは、インタフェース記述子ベースポインタ５２２を有することが可能であるＶＦＥ状態記述子５２０を示すことが可能であるＶＦＥ状態ポインタ５１４を有する状態ポインタコマンドと共に供給されることが可能である）に基づいてスレッドについてのインタフェース記述子ポインタを決定することが可能である。
【００４９】
一部の実施形態においては、スレッドスポーナ４０６に供給されるスレッド要求はインタフェース記述子ポインタを有することが可能である。一部の実施形態においては、映像フロントエンド４０４は、スレッドスポーナ４０６に供給されるスレッド要求に含まれることが可能であるインデックスハンドル又はＵＲＢハンドルを生成することが可能である。一部の実施形態においては、スレッド要求は、生成されるようになっているスレッドに割り当てられるレジスタの数を、及び定数を、例えば、定数ＵＲＢを記憶しているメモリの部分をスレッドが用いるかどうかを示す制御情報を有することが可能である。
【００５０】
図８は、一部の実施形態に従った、スレッドスポーナ４０６の機能ブロック図である。図８を参照するに、一部の実施形態においては、映像フロントエンド４０４（図４）により供給されるルートスレッド要求は、ルートスレッド要求キュー８０２の入力に供給されることが可能である。一部の実施形態においては、ルートスレッド要求キュー８０２はファーストインファーストアウト（ＦＩＦＯ）バッファを有することが可能であり、そのことは、キュー８０２に対する第１ルートスレッド要求はまた、キュー８０２の外部の第１ルートスレッド要求であることを意味している。一部のそのような実施形態においては、ルートスレッド要求キュー８０２は、入力バッファ８０４と、出力バッファ８０６と、１つ又はそれ以上のバッファであって、例えば、それらの入力バッファ８０４と出力バッファ８０６との間に結合されたバッファ８０８乃至８１４とを有することが可能である。出力バッファ８０６は、本明細書においてはときどき、キュー８０２のヘッド８０６と称せられている。一部の実施形態においては、出力バッファ８０６又はキューのヘッドは、次いでルートスレッド要求キュー８０２から次にずれたルートスレッド要求に記憶されることが可能である。
【００５１】
ルートスレッド要求キュー８０２により供給されるルートスレッド要求は、マルチプレクサ８１８の第１入力に供給されることが可能である。ルートスレッド要求キューにより供給されるスレッド要求は何れかの形式を有することが可能である。一部の実施形態においては、ルートスレッド要求キュー８０２により供給されるスレッド要求は、映像フロントエンド４０４からスレッドスポーナ４０６に供給されるスレッド要求の構成と同じ構成を有することが可能である。
【００５２】
一部の実施形態においては、制御ユニット８１６は、ルートスレッド要求キュー８０２からのルートスレッド要求の供給のためのタイミングを制御することが可能である。一部の実施形態においては、制御部分８１６は、１つ又はそれ以上の信号の同期及び／又は調停を提供することが可能である、制御ユニット８１６からの１つ又はそれ以上の信号は、ルートスレッド要求キュー８０２に供給されることが可能である。更に、制御ユニット８１６からの１つ又はそれ以上の信号が、マルチプレクサ８１８の１つ又はそれ以上の制御入力に供給されることが可能である。
【００５３】
一部の実施形態においては、スレッドスポーナ４０４は、スポーンスレッド要求キュー８２２を更に有することが可能であり、そのスポーンスレッド要求キューの入力は、実行ユニットにより供給される、スポーンスレッド要求を受信することが可能である。スポーンスレッド要求キュー８２２は、そのスポーンスレッド要求キューに供給されるスポーンスレッド要求をキューに供給することが可能である。一部の実施形態においては、スポーンスレッド要求キュー８２２はファーストインファーストアウト（ＦＩＦＯ）バッファを有することが可能である。一部のそのような実施形態においては、スポーンスレッド要求キュー８２２は、入力バッファ８２４と、出力バッファ８２６と、１つ又はそれ以上のバッファであって、例えば、入力バッファ８２４と出力バッファ８２６との間に結合されたバッファ８２８乃至８３４を有することが可能である。出力バッファ８２６は、本明細書においてはときどき、キューのヘッド又はキューバッファのヘッドと称せられている。一部の実施形態においては、出力バッファ８２６又はキューのヘッドは、スポーンスレッド要求キュー８２２から次にずれたスポーンスレッド要求に記憶されることが可能である。
【００５４】
一部の実施形態においては、ルートスレッドキュー８０２及び／又はスポーンスレッドキュー８２２は、ＦＩＦＯバッファに付加して又はその代わりに、１つ又はそれ以上の他のタイプのキューを有することが可能である。一部の実施形態においては、例えば、複数のルートスレッド要求は各々、優先順位が割り当てられることが可能であり、最も高い優先順位を有するルートスレッド要求は、キュー８０２から外れた第１ルートスレッド要求であることが可能である。一部の実施形態においては、例えば、複数のスポーンスレッド要求は各々、優先順位が割り当てられることが可能であり、最も高い優先順位を有するスポーンスレッド要求は、キュー８２２から外れた第１スポーンスレッド要求であることが可能である。
【００５５】
スポーンスレッドキュー８２２により供給されるスレッド要求は、マルチプレクサ８１８の第２入力に供給されることが可能である。スポーンスレッド要求キューにより供給されるスレッド要求は各々、何れかの形式を有することが可能である。一部の実施形態においては、スポーンスレッド要求キュー８２２により供給されるスレッド要求は、映像フロントエンド４０４からスレッドスポーナ４０６に供給されるスレッド要求の構成と同じ構成を有することが可能である。
【００５６】
一部の実施形態においては、制御部分８１６は、スポーンスレッド要求キュー８２２からのスポーンスレッド要求の供給のためのタイミングを制御することが可能である。一部の実施形態においては、その制御部分８１６は、同期及び／又は調停のための１つ又はそれ以上の信号を供給することが可能であり、そのことについては下で更に説明する。
【００５７】
一部の実施形態においては、一時に１つのスレッド要求（即ち、ルートスレッド要求キュー８０２からの１つのスレッド要求又はスポーンスレッド要求キュー８２２からの１つのスレッド要求）のみを供給することが好ましいことである。例えば、スレッド生成ユニットは、一時に１つのスレッド要求のみを処理することができる。その趣旨で、調停が提供されることが可能である。一部の実施形態においては、スポーンスレッド要求キュー８２２におけるスレッド要求は、ルートスレッド要求キューのスレッド要求における所定の優先順位であることが可能である。一部の実施形態においては、そのような調停は、別に生じる可能性があるデッドロックを回避するのに役立つことが可能である。
【００５８】
その点で、一部の実施形態においては、制御ユニット８１６は、ルートスレッド要求キュー８０２に１つ又はそれ以上の制御信号を、並びに／若しくは、ルートスレッド要求キュー８０２を制御するようにスポーンスレッド要求キュー８２２に及び／又は一時に１つのスレッド要求（即ち、ルートスレッド要求キュー８０２からの１つのスレッド要求又はスポーンスレッド要求キュー８２２からの１つのスレッド要求）のみが供給されるようにスポーンスレッド要求キュー８２２に１つ又はそれ以上の制御信号を供給することが可能である。そのような実施形態においては、制御ユニット８１６は、スレッド要求がマルチプレクサ８１８の出力に供給されるようにマルチプレクサ８１８を制御するように、マルチプレクサ８１８１に１つ又はそれ以上の制御信号を供給することがまた、可能である。
【００５９】
更に、一部の実施形態は、何れかの所定の時間に許可されることが可能であるルートスレッドの数に関する制限（プログラマブルであるか非プログラマブルであるかに拘わらず）を規定することが可能である。一部の実施形態においては、この制限は、デッドロックを回避するのに役立つように、システムにおけるスレッドの最大数に比べて小さい。ルートスレッドについての要求はキュー８０２の先頭８０６に達し、ルートスレッドの数は限界にあり、ルートスレッド要求キュー８０２は、ルートスレッドの数が所定の限界より小さくなるまで待機することが可能である。一部の実施形態においては、スレッドスポーナは、スレッドの最大数に達しない限り、スレッド要求を供給し続けることが可能である。
【００６０】
一部の実施形態においては、ルートスレッドは同期化される又は非同期化されることが可能である。同期化されたルートスレッドは、イベントが生じるまでルートスレッドが生成されないことを保証するのに役立つように用いられることが可能である。例えば、プログラムの先行部分についてのスレッドが終了まで実行されるまで、そのプログラムの部分についてのスレッドを延期することは好ましいことである。
【００６１】
一部の実施形態においては、同期化ルートスレッドについての要求及び非同期化ルートスレッドについての要求が、同じルートスレッド要求キュー８０２に供給されることが可能である。一部のそのような実施形態においては、同期化ルートスレッドについての要求は、同期信号が供給されるまでは、ルートスレッド要求キュー８０２の先頭８０６を越えて進むことはない。一部の実施形態においては、メッセージがスポーンスレッド要求キュー８２２に供給され、スポーンスレッド要求キュー８２２の先頭８２６に達する場合、同期信号が生成され、そのメッセージは、本明細書においてはときどき、スポーンルートメッセージと称せられている。同期化ルートスレッドについての要求が、スポーンルートメッセージがキュー８２２の先頭８２６に達する前に、キュー８０２の先頭８０６に達した場合、ルートスレッド要求キュー８０２は、スポーンルートメッセージがキュー８２２の先頭８２６に達するまで待機する。デドロックを回避するのに役立つように、スポーンルートメッセージは、同期化ルートスレッドについての要求がルートスレッド要求キューの先頭８０６に達する前に、スポーンスレッド要求キュー８０２の先頭を越えて進むように許可されない。その点で、スポーンルートメッセージが、同期化ルートスレッドがキュー８０２の先頭８０６に達する前に、キュー８２２の先頭８２６に達した場合、同期化ルートスレッドについての要求を待っているスポーンスレッド要求キュー８２２は、キュー８０２の先頭８０６に達する。一部のそのような実施形態においては、同期化ルートスレッドについての要求及びスポーンルートスレッドメッセージは、互いに同時にそれらのそれぞれのキューから出ることが可能である。
【００６２】
一部の実施形態においては、同期化ルートスレッドは、同期化ルートスレッドを要求するコマンドから由来することが可能である。一部の実施形態においては、コマンドは同期化フィールドを有し、同期化ルートスレットは、そのようなフィールドにおいてビットを設定することにより要求される。一部の実施形態においては、スポーンルートメッセージは、ルートスレッド及び／又は子スレッドにより初期化されることが可能である。
【００６３】
一部の実施形態は、同期化ルートスレッドの数に関して何れかの制限を有することは可能でないが、同期化ルートについての要求の数及びスポーンルートメッセージの数は同じである必要がある。又は、一部の実施形態においては、デッドロックが生じる可能性がある。
【００６４】
上記のように、一部の実施形態においては、制御ユニット８１６は、ルートスレッド要求キュー８０２を制御するようにスポーンスレッド要求キュー８２２に、及び／又は好まし動作を提供するように、ルートスレッド要求キュー８０２に１つ又はそれ以上の制御信号を、及び／又はスポーンスレッド要求キュー８２２に１つ又はそれ以上の制御信号を、供給することが可能である。そのような実施形態においては、制御ユニット８１６は、スレッド要求がマルチプレクサ８１８の出力に供給されるようにマルチプレクサを制御するように、マルチプレクサ８１８１に１つ又はそれ以上の制御信号をまた、供給することが可能である。
【００６５】
マルチプレクサ８１８の出力は、スレッド生成ユニット８３８の入力にスレッド要求を供給することが可能であり、そのスレッド生成ユニットの出力はスレッド要求を供給することが可能である。スレッド生成ユニットにより供給されるスレッド要求は何れかの形式を有することが可能であり、一部の実施形態においては、メモリに対するインタフェース記述子及び／又はインデックス、例えば、定数ＵＲＢハンドルを有することが可能であるが、それに限定されるものではない。
【００６６】
一部の実施形態においては、スレッド生成ユニット８３８は、インタフェース記述子（例えば、インタフェース記述子キャッシュからの）をフェッチし、スレッド生成ユニット８３８にインタフェース記述子を供給することが可能であるインタフェース記述子フェッチユニット８４０にインタフェース記述子ポインタを供給することが可能である。更に、スレッド生成ユニット８３８に供給されるスレッド要求が、定数、例えば、定数ＵＲＢを記憶するメモリの一部を生成されるようになっているスレッドが用いることを示す場合、スレッド生成ユニット８３８は、定数、例えば、定数ＵＲＢハンドルユニットからの定数ＵＲＢハンドルを記憶するメモリの一部にインデックスをまた、受信することが可能である。
【００６７】
スレッド生成ユニット８３８により供給されるスレッド要求は、スレッドディスパッチキュー８４４の入力に供給されることが可能である。一部の実施形態においては、スレッドディスパッチキュー８４４は、スレッドディスパッチャからスレッド生成ユニットを分離するのに役立つことが可能である。そのような実施形態においては、スレッドディスパッチキューは、スレッド生成ユニット８３８及びスレッドディスパッチャ４１４が互いに対して同時に及び／又は非同期的に（同期化なしに）動作することを可能にするのに役立つことが可能である。一部の実施形態においては、ルートスレッド要求キュー８４４は、ファーストインファーストアウト（ＦＩＦＯ）バッファ又は何れかの他の種類のキューを有することが可能である。
【００６８】
一部の実施形態においては、ルートスレッドキュー８０２は、スレッド生成ユニット８３８から映像フロントエンド４０４を分離するのに役立つことが可能である。そのような実施形態においては、ルートスレッド要求キュー８０２は、それ故、たとえ映像フロントエンド４０４及びスレッド生成器が互いに同じ遅延を有しないとしても、映像フロントエンド４０４及びスレッド生成器が互いに対して同時に及び／又は非同期的に（同期化なしに）動作することを可能にするのに役立つことが可能である。
【００６９】
一部の実施形態においては、（親）スレッドが子スレッドを生成するとき、親スレッドは固定機能（例えば、映像フロントエンド４０４）のように振る舞う。その親スレッドは、ＵＲＢにおいてペイロードを組み立て、次いで、メモリ、例えば、ＵＲＢにおけるデータについてのポインタ及び子スレッドについてのインタフェース記述子ポインタを用いてスレッドスポーナ４０６にスポーンスレッドメッセージを送ることにより、子スレッドを開始する全ての必要な情報を提供することが可能である。
【００７０】
一部の実施形態においては、子についてのインタフェース記述子は、親とは異なることが可能であり、親が子インタフェース記述子をどのように決定するかは親次第であることが可能である。一部の実施形態は、子インタフェース記述子が同じインタフェース記述子ベースアドレスにおけるインタフェース記述子アレイからのものであることを要求することが可能である。
【００７１】
一部の実施形態においては、ルートスレッドは、直接的な及び間接的な子スレッドについてのメモリ、例えば、ＵＲＢ、空間及びスクラッチ空間等の予め割り当てられた資源を管理する役割を担うことが可能である。一部の実施形態においては、例えば、ルートスレッドは、ＵＲＢ空間を複数のセクションに分割することが可能である。１つの子スレッドにペイロードを供給すること、及び戻りＵＲＢ空間として用いられるようになっている子スレッドに１つのセクションを転送するために、１つのセクションを用いることが可能である。子スレッドは、ＵＲＢセクションをサブセクションに更に副分割することが可能であり、それら自体の子スレッドのためにそれらのサブセクションを用いることが可能である。そのような処理は繰り返されることが可能である。同様に、ルートスレッドは、そのスクラッチメモリ空間を複数のセクションに分割し、１つの子スレッドについて１つのスクラッチセクションを与えることが可能である。
【００７２】
一部の実施形態においては、複数のルートスレットは、実行ユニットにおいて連続的に実行されることが可能である。一部の実施形態においては、全てのルートスレッドについて共有される１つのみのスクラッチ空間状態変数が存在し、スクラッチ空間を必要とする全ての同時のルートスレッドは同じスクラッチメモリサイズを共有することが可能である。
【００７３】
図９は、一部の実施形態に従った方法のフロー図９００である。ここで示しているフロー図は、固定された段階の順序を必ずしも示す必要はなく、それらの実施形態は、実際的である何れかの順序で実行されることが可能である。本明細書で説明している方法の何れかは、ハードウェア、ソフトウェア（マイクロコードを含む）、ファームウェア又はそれらの装置の何れかの組み合わせにより実行されることが可能である。一部の実施形態においては、その方法は、本明細書で開示されている実施形態の１つ又はそれ以上において用いられることが可能である。
【００７４】
段階９０２で、一部の実施形態においては、スレッドを生成する要求が受信されることが可能である。一部の実施形態においては、その要求は第１ポインタを有することが可能である。一部のそのような実施形態においては、その第１ポインタはインタフェース記述子ポインタを有することが可能である。
【００７５】
段落９０４で、少なくとも受信された要求の一部に応答してキューに要求が供給されることが可能である。一部の実施形態においては、キューに供給される要求は、少なくとも受信された要求の一部に基づくことが可能である。一部の実施形態においては、キューに供給される要求は受信された要求であることが可能である。一部の実施形態においては、受信された要求及び／又は供給された要求は第１ポインタを有する。一部のそのような実施形態においては、第１ポインタはインタフェース記述子ポインタを有することが可能である。
【００７６】
一部の実施形態は、少なくともキューに供給された要求に応答して複数の命令をフェッチすること及びそれらの複数の命令の少なくとも１つを実行することを更に含むことが可能である。それらの複数の命令の少なくとも１つを実行することは、その少なくとも１つの命令を実行するように実行ユニットにその少なくとも１つの命令を供給することを含む。一部の更なる実施形態は、スレッドを生成するように実行ユニットからの要求を受信することと、実行ユニットからの要求の少なくとも一部に応答してキューに対する要求を供給することとを更に有することが可能である。
【００７７】
特に明記しない限り、例えば、“に基づく”等の表現は、２つ以上のものに基づくことを除外しないように、“に少なくとも基づく”を意味する。更に、特に明記しない限り、例えば、“を有する”等の表現は、付加的な要素及び／又は特徴を除外しないように、制限がないとみなされる。更に、特に明記しない限り、単数表現は制限がないとみなされ、“のみ”を意味するのではない。更に、特に明記しない限り、“第１”自体は、“第２”をまた必要とするものではない。
【００７８】
一部の実施形態は、本明細書においては、ＳＩＭＤ実行ユニットに関連して説明されている。しかしながら、それらの実施形態は、他の種類の実行ユニット、例えば、複数命令、複数データ（ＭＩＭＤ）実行ユニット等と関連付けられることが可能である。
【００７９】
本明細書で説明している複数の実施形態は単に例示のためのものである。当業者は、他の実施形態が同時提出の特許請求の範囲のみにより制限される修正及び変形により実行されることが可能であることを、本明細書から認識することができる。
【図１】
2010515161.tif 000003
【図２】
2010515161.tif 000004
【図３Ａ】
2010515161.tif 000005
【図３Ｂ】
2010515161.tif 000006
【図４】
2010515161.tif 000007
【図５】
2010515161.tif 000008
【図６】
2010515161.tif 000009
【図７】
2010515161.tif 000010
【図８】
2010515161.tif 000011
【図９】
2010515161.tif 000012
【国際調査報告】
2010515161.tif 000013
2010515161.tif 000014