(57)【要約】スレッドスケジューラは、スレッドの実行を管理するコンテキストユニットを含み、各コンテキストユニットは、特定のコンテキストユニットに関連するデータ復帰の数とデータ要求の数との間の差分を示すカウンタ値を保持するロード参照カウンタを含む。スレッドコンテキストユニットのコンテキストコントローラは、カウンタ値が非ゼロであり、かつ、命令が、前の命令によって戻されたデータを必要とすることを示すデータ従属インジケータを含む場合、スレッドの命令を渡すことを止めるように構成される。
2010503070.tif 000002
【特許請求の範囲】
【請求項１】
実行するスレッドの命令を渡すように構成されたスレッドコンテキストユニットであって、
データ要求の数とデータ復帰の数との間の差分を示すカウンタ値を保持するように構成されたロード参照カウンタと、
前記カウンタ値が非ゼロであり、かつ、前記命令が、前の命令によって戻されたデータを必要とすることを示すデータ従属性インジケータを含む場合、スレッドの命令の発行を止めるように構成されたコンテキストコントローラと
を備えるスレッドコンテキストユニット。
【請求項２】
請求項１に記載のスレッドコンテキストユニットにおいて、
前記データ要求の数は、予測不能レイテンシデータソースからのデータに対するデータ要求の数であり、前記データ復帰の数は、前記予測不能レイテンシデータソースからのデータ復帰の数であるスレッドコンテキストユニット。
【請求項３】
請求項２に記載のスレッドコンテキストユニットにおいて、
前記予測不能レイテンシデータソースはメモリであるスレッドコンテキストユニット。
【請求項４】
請求項２に記載のスレッドコンテキストユニットにおいて、
前記予測不能レイテンシデータソースはテクスチャエンジンであるスレッドコンテキストユニット。
【請求項５】
請求項２に記載のスレッドコンテキストユニットにおいて、
前記コンテキストコントローラは、ロジック内に実現され、前記データ従属性インジケータを検出するように構成された従属性インジケータ検出器を備えるスレッドコンテキストユニット。
【請求項６】
請求項１に記載のスレッドコンテキストユニットにおいて、
前記コンテキストコントローラは更に、前記カウンタ値がゼロの場合、前記命令を実行するように構成されたスレッドコンテキストユニット。
【請求項７】
請求項２に記載のスレッドコンテキストユニットにおいて、
前記コンテキストコントローラは更に、前記予測不能レイテンシデータソースからのデータに対する要求を識別すると、前記カウンタをインクリメントするように構成され、前記予測不能レイテンシデータソースからのデータの復帰を識別したことに応答して、前記カウンタをデクリメントするように構成されたスレッドコンテキストユニット。
【請求項８】
スレッドの実行を管理する複数のスレッドコンテキストレジスタに、要求されたリソースを割り当てるように構成されたスレッドスケジューラであって、
各々が、スレッドコンテキストユニットに関連するデータ要求の数とデータ復帰の数との間の差分を示すカウンタ値を保持するように構成された複数のロード参照カウンタを備え、
前記スレッドスケジューラは、前記スレッドに関連するカウンタ値が非ゼロであり、かつ、データ従属命令が、前記スレッドの前の命令によって戻されたデータを要求することを示すデータ従属性インジケータを含む場合、実行するスレッドの前記データ従属命令を渡すことを止めるように構成されたスレッドスケジューラ。
【請求項９】
請求項８に記載のスレッドスケジューラにおいて、
前記データ要求の数は、予測不能レイテンシデータソースからのデータに対するデータ要求の数であり、前記データ復帰の数は、前記予測不能レイテンシデータソースからのデータ復帰の数であるスレッドスケジューラ。
【請求項１０】
請求項９に記載のスレッドスケジューラにおいて、
前記予測不能レイテンシデータソースはメモリであるスレッドスケジューラ。
【請求項１１】
請求項９に記載のスレッドスケジューラにおいて、
前記予測不能レイテンシデータソースはテクスチャエンジンであるスレッドスケジューラ。
【請求項１２】
請求項９に記載のスレッドスケジューラにおいて、
各々が、前記データ従属性インジケータを検出するように構成された複数の従属性インジケータ検出器を更に備えるスレッドスケジューラ。
【請求項１３】
請求項８に記載のスレッドスケジューラにおいて、
前記カウンタ値がゼロである場合、前記命令を実行するように更に構成されたスレッドスケジューラ。
【請求項１４】
請求項９に記載のスレッドスケジューラにおいて、
前記予測不能レイテンシデータソースからのデータに対する要求を識別すると、前記カウンタをインクリメントし、前記予測不能レイテンシデータソースからのデータの復帰を識別したことに応答して、前記カウンタをデクリメントするように更に構成されたスレッドスケジューラ。
【請求項１５】
グラフィックスレッドを処理するグラフィックプロセッサであって、
スレッドコンテキストユニットによって管理されるグラフィックスレッドの命令に従って、算術機能を実行するように構成された算術ロジック演算ユニットと、
前記命令に従って、予測不能レイテンシデータソースからデータを取得するように構成されたロードコントローラと、
要求されたリソースをスレッドコンテキストユニットに割り当てるように構成されたスレッドスケジューラと
を備え、
前記スレッドスケジューラは、スレッドコンテキストユニットによって表示された、予測不能レイテンシデータソースからのデータに対するデータ要求の数と、前記ロードコントローラによって実行された、前記スレッドコンテキストユニットに関連する、前記予測不能レイテンシデータソースからのデータ復帰の数との間の差分を示すカウンタ値を、各々が保持するように構成された複数のロード参照カウンタを備え、前記スレッドスケジューラは、前記グラフィックスレッドに関連するカウンタ値が非ゼロであり、かつ、前記データ従属命令が、前記スレッドの前の命令によって戻されたデータを要求することを示すデータ従属性インジケータを含む場合、実行するグラフィックスレッドのデータ従属命令を渡すことを止めるように構成されたグラフィックプロセッサ。
【請求項１６】
請求項１５に記載のグラフィックプロセッサにおいて、
前記予測不能レイテンシデータソースはメモリであるグラフィックプロセッサ。
【請求項１７】
請求項１５に記載のグラフィックプロセッサにおいて、
前記予測不能レイテンシデータソースはテクスチャエンジンであるグラフィックプロセッサ。
【請求項１８】
請求項１５に記載のグラフィックプロセッサにおいて、
前記スレッドスケジューラは更に、各々が、前記データ従属性インジケータを検出するように構成された複数の従属性インジケータ検出器を備えるグラフィックプロセッサ。
【請求項１９】
請求項１５に記載のグラフィックプロセッサにおいて、
前記スレッドスケジューラは更に、前記カウンタ値がゼロである場合、前記命令を実行するように構成されたグラフィックプロセッサ。
【請求項２０】
請求項１５に記載のグラフィックプロセッサにおいて、
前記スレッドスケジューラは更に、前記予測不能レイテンシデータソースからのデータに対する要求を識別すると、前記カウンタをインクリメントし、前記予測不能レイテンシデータソースからのデータの復帰を識別したことに応答して、前記カウンタをデクリメントするように構成されたグラフィックプロセッサ。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、一般にグラフィックプロセッサに関し、特に、従属命令を有するスレッドのスレッドスケジューリングに関する。
【背景技術】
【０００２】
アプリケーションに関する動作を効率的かつ迅速に実行するために、しばしば専用プロセッサを用いて、そのアプリケーションのタイプに関連した特定の機能を実行する。例えば、グラフィックプロセッサは、画像データを処理し、画像をレンダリングするために様々なグラフィック動作を実行し、コンピュータグラフィックの処理及び表示において効率が良い。高度な並列構成により、グラフィックプロセッサは、複雑なアルゴリズムの範囲のための一般的なプロセッサより効率的である。グラフィックプロセッサは、ホスト中央処理装置（ＣＰＵ）を用いてグラフィックを直接スクリーンに表示するよりも圧倒的に速く動作を実行する方法で、多くのグラフィック基本動作を実現する。
【０００３】
例えばグラフィックプロセッサのような専用プロセッサにおいてリソースを効率的に用いるために、タスクはしばしば、スレッドの実行を同時又は準同時に行うことができるスレッドに体系化される。リソースは一般に、所与の時間に単一の命令のみしか扱うことができないので、さまざまなスレッドの命令実行のタイミングを制御し、スレッドに効率的にリソースを割り当てるために、スレッドスケジューラが用いられる。しかしいくつかの命令は、予測不能なレイテンシを有するデータソースからのデータの検索を必要とする。例えば、プロセッサシステム内のいくつかのメモリからのデータの検索は、データサイズ又はデータ場所によって予測不能なレイテンシを有することがある。予測不能レイテンシを有するデータソースの別の例は、グラフィックプロセッサ内のテクスチャデータを復帰させるテクスチャエンジンである。テクスチャ命令の変わりうる複雑性のために、テクスチャデータを復帰させるために必要な時間を予測することができない。スレッドの命令は、予測不能レイテンシを有するデータソースからのデータの検索を必要とすることもしないこともある。スレッドの実行中、従属命令は、その従属命令を実行するために、前の命令によって取得されたデータを必要としうる。必要なデータが、予測不能レイテンシデータソースから取得された場合、必要なデータは、従属命令を実行する時間内に復帰しないことがある。
【０００４】
従来システムにおいてスレッドを管理する１つの技術は、特定のスレッドの各命令を実行する前に、データの利用可能性をチェックすることを含む。しかしこのような方法は、リソースを用いる複雑な検出スキームを必要とする。従来システムで用いられた別の技術は、ロード命令が完了するまで命令を保留にすることを含み、これは低効率に至る。
【０００５】
従って、従属命令を有するスレッドの実行を効率的に管理するスレッドスケジューラへのニーズがある。
【発明の概要】
【０００６】
スレッドスケジューラは、スレッドスケジューラによってスケジューリングするスレッドの命令を発行するスレッドコンテキストユニットを含み、各コンテキストレジスタは、特定のコンテキストレジスタに関するデータ復帰の数とデータ要求の数との間の差分を示すカウンタ値を維持するロード参照カウンタを含む。コンテキストユニットのスレッドコンテキストコントローラは、カウンタ値が非ゼロであり、かつ、命令が、前の命令によって戻されたデータを必要とすることを示すデータ従属インジケータを含む場合、スレッドの命令の発行を抑制するように構成される。
【図面の簡単な説明】
【０００７】
【図１】図１は、本発明の典型的な実施形態に従うスレッド管理システムのブロック図である。
【図２】図２は、典型的な実施形態に従うスレッド制御の状態機器図である。
【図３】図３は、典型的な実施形態に従って、従属命令を用いてスレッドを管理する方法のフローチャートである。
【発明を実施する形態】
【０００８】
「典型的」という言葉は、本明細書では「例、実例、又は例証を提供する」という意味で用いられる。本明細書で「典型的」として説明される任意の実施形態は、他の実施形態に対して必ずしも好適又は有利であるとは解釈されない。
【０００９】
図１は、本発明の典型的な実施形態に従うスレッド管理システム１００のブロック図である。スレッド管理システム１００は、図１に関して説明されるプロセス、エンティティ、エンジン、及び／又は機能に加えて、他のプロセス、エンティティ、エンジン、及び／又は機能も含むことができる。図１に示されるブロックは、ハードウェア、ソフトウェア、及び／又はファームウェアの任意の組み合わせを用いて実現することができる。更に、図１で説明されるブロックの機能及び動作は、任意の数のデバイス、回路、又は要素によって実現することができる。機能ブロックのうちの２つ又はそれ以上を単一のデバイスに統合することができ、また、任意の単一のデバイスで実行されるように説明される機能を、いくつかのデバイスで実現することもできる。スレッド管理システム１００の適切な実現形態の例は、システム１００をマルチスレッドプロセッサ１０１の一部として実現することを含む。しかし、説明される技術は、多くのスレッドをスケジュール及び処理するために用いられる様々なプロセッサ又はコンピュータシステムのうちの任意のものに適用することができる。
【００１０】
典型的な実施形態において、スレッドスケジューラ１０２、算術ロジック演算ユニット（ＡＬＵ）１０６、ロードコントローラ１０８、命令キャッシュ（図示せず）、レジスタファイルバンク（図示せず）、定数ランダムアクセスメモリ（ＲＡＭ）（図示せず）、及びその他の機能が、マルチスレッドプロセッサ１０１で実現される。マルチスレッドプロセッサ１０１は、特定のタイプのデータストリームを効率的に処理するように構成されたプログラマブルプロセッサである。適切なマルチスレッドプロセッサ１０１の例は、マルチメディアデータストリーム（例えばビデオ、オーディオ等）を効率的に処理するための定数データを含むマルチスレッドプロセッサを含む。定数ＲＡＭは、レジスタバンク検索効率を改善することによってＡＬＵをサポートする。命令キャッシュは、スレッドのための命令を格納し、命令をスレッドスケジューラ１０２へ提供する。スレッドスケジューラ１０２の制御下で、ロードコントローラ１０８は、メモリ１２８からの命令を命令キャッシュにロードし、メモリ１２８及び／又はテクスチャエンジン１３０からのデータを、定数ＲＡＭ及びレジスタファイルバンクにロードする。命令は、各スレッドについて実行される特定の動作を示す。適切な動作の例は、算術演算、初等関数、及びメモリアクセス動作を含む。
【００１１】
定数ＲＡＭは、ＡＬＵ１０６によって用いられる定数値を格納する。レジスタファイルバンクは、スレッドのためのＡＬＵ１０６からの最終結果及び一時結果を格納することができる。出力インタフェース（図示せず）は、実行されたスレッドの最終結果をレジスタファイルバンクから受け取り、対応するアプリケーションへその結果を提供する。
【００１２】
スレッド管理システム１００は、例えばアプリケーションからのグラフィックスレッドのようなスレッドを受け取る。一般に、スレッドスケジューラ１０２は、スレッドストリームを受け取り、スレッドの実行をスケジュール及び管理するための様々な機能を実行する。例えばスレッドスケジューラ１０２は、スレッドの処理をスケジュールし、特定のスレッドにとって必要なリソースが利用可能であるかを判定し、スレッドデータをロードコントローラ１０８経由でレジスタファイルバンクへ移動することができる。スレッドスケジューラ１０２は、受け取ったスレッドのためのリソースを同期化するために、ロードコントローラ１０８とインタフェースする。スレッドスケジューラ１０２はまた、特定のアプリケーションからのスレッドが受け取られた順番をモニタし、それらのスレッドを、同じ順番又は受け取ったシーケンスで出力させる。
【００１３】
スレッドスケジューラ１０２は、実行するアクティブスレッドを選択し、選択したスレッドの中で読取／書込みポート矛盾をチェックし、もし矛盾がなければ、スレッドからの適切な命令をＡＬＵ１０６へ割り当て、別のスレッドの別の命令をロードコントローラ１０８へ送る。スレッドスケジューラ１０２の要求において、ロードコントローラ１０８はまた、例えばテクスチャエンジン１３０や外部メモリ１２８のような予測不能レイテンシデータソース１０４からのスレッドに関するデータを取得するように構成することもできる。メモリ１２８は、例えばグローバルデータキャッシュ及び／又は外部メモリデバイスを含むことができる。そこにない命令に対するフェッチ要求を発行することに加えて、ロードコントローラ１０８は、スレッドデータをレジスタファイルバンク（図示せず）へロードし、関連する命令を命令キャッシュ（図示せず）へロードする。スレッドスケジューラ１０２はまた、ＡＬＵ１０６によって処理されたスレッドを除去する。
【００１４】
ＡＬＵ１０６は、単一クワッドＡＬＵであるか、又は４スカラＡＬＵを含むことができる。典型的な実施形態において、ＡＬＵ１０６は、最大４画素まで、属性の１つの構成要素に画素並行処理を実行する。いくつかの状況で、ＡＬＵ１０６は、単一の画素の属性の４つの構成要素までの構成要素並行処理を実行する。ＡＬＵ１０６は、レジスタファイルバンクからデータをフェッチし、定数ＲＡＭからの定数を受け取る。理想的にＡＬＵ１０６は、アイドルにならないように、全てのクロックサイクルにおいてデータを処理するので、処理効率を高める。ＡＬＵ１０６は、レジスタファイルバンクへのインタフェース上に複数の読取及び書込みポートを含むことができ、新たなスレッドデータが各クロックサイクルでフェッチされる／読み取られる間に、スレッド結果を提供することができる。
【００１５】
スレッドスケジューラは、（本明細書ではリソースマネージャと称される）スレッドアービトレーション／リソースマネージャ１３２によって実行するスレッドを管理及び発行する複数のスレッドコンテキストユニット１１０、１１２、１１４を含む。各スレッドは、スレッドスロットへ割り当てられ、関連するスレッドコンテキストユニット１１０、１１２、１１４で管理される。各スレッド接続ユニット１１０、１１２、１１４内のスレッドコンテキストレジスタ１３４、１３６、１３８は、スレッドの各命令の命令タイプ及びその他の情報を格納する。各スレッドコンテキストユニット１１０、１１２、１１４内のスレッドコンテキストコントローラ１４０、１４２、１４４は、リソースマネージャ１３２への命令の発行を制御する。スレッドコンテキストユニットは、リソースマネージャ１３２からのリソースを要求する。リソースが利用可能である場合、リソースマネージャは要求を許可する。スレッドスケジューラ１０２内のリソースマネージャ１３２及びフローコントローラ（図示せず）は、各スレッドコンテキストユニット１１０、１１２、１１４がデータをロードすることを可能とし、スレッドを実行するために適切なリソースによって命令を実行させるために、各スレッドが、ＡＬＵ１０６、ロードコントローラ１０８、および命令キャッシュ（図示せず）へアクセスすることを可能とする。
【００１６】
命令を実行するために、スレッドコンテキストユニットは第１に、命令が命令キャッシュ内へロードされることを要求する。命令は少なくとも部分的に復号され、スレッドコンテキストユニット１１０内のコンテキストコントローラ１４０は、命令が実行されるべきかを、スレッドコンテキストユニット１１０のロード参照カウンタ（ＬＲＣ）１１６の値及び従属性インジケータの存在に基づいて判定する。命令がスレッドコンテキストユニットによって発行された場合、命令タイプは、命令を実行するために必要なリソースをリソースマネージャ１３２に示す。要求されるリソースは、例えばＡＬＵ１０６、メモリ１２８、又はテクスチャエンジン１３０でありうる。リソースが許可されると、命令は、実行するために利用可能なリソースへ渡される。リソースマネージャ（スレッドアービトレーションマネージャ）１３２はこのように、要求されたリソースの割当を管理し、要求されたリソースを、要求しているスレッドコンテキストユニットに許可する。
【００１７】
スレッド内の命令は、予測可能レイテンシ又は予測不能レイテンシを有することができる。予測可能レイテンシを有する命令は、本明細書では予測可能レイテンシ命令と称され、既知の数のクロックサイクル内で実行される命令を含む。予測可能レイテンシ命令の例は、ＡＬＵ演算、及びマルチスレッドプロセッサコア外のリソースを必要としないその他の動作を含む。典型的な実施形態において、マルチスレッドプロセッサ１０１の内部動作は、標準的なレイテンシを有するように設計される。予測可能レイテンシを有さない命令は、本明細書では予測不能レイテンシ命令と称される。予測不能レイテンシ命令の例は、マルチスレッドプロセッサ１０１外の外部リソースを必要とする動作を含む。例えば、外部メモリにアクセスするデータ検索命令及びテクスチャ関連命令は、予測不能レイテンシを有する。
【００１８】
このように、特定の命令が、予測不能レイテンシを有するデータソースからのデータの検索を必要としうる。典型的な実施形態において、予測不能データソース１０４は、テクスチャエンジン１３０又はメモリ１２８であることができる。スレッド内のテクスチャ関連命令は、命令によって提供された情報を処理し、テクスチャデータに戻すために、テクスチャエンジン１３０を必要とする。メモリ関連命令は、メモリ１２８内に格納されたデータの検索を必要とする。メモリがオフチップである場合、要求されたデータを検索するために必要な時間は予測不可能でありうる。特定のデータ検索事象が予測不能レイテンシを有する場合、他の状況が発生しうる。
【００１９】
スレッドコンテキストユニットは、スレッドの実行を管理するための適切なリソースを含む。スレッドコンテキストレジスタ１３４、１２６、１３８に加えて、スレッドコンテキストユニット１１０、１１２、１１４は、スレッドの実行を管理するロジック内に実現されたコンテキストコントローラ１４０、１４２、１４４を含む。図２に関して以下で説明するように、コンテキストコントローラは、そのコンテキストコントローラが有限セットの状態間で遷移する状態機器を用いてモデル化することができる。典型的な実施形態において、各スレッドコンテキストレジスタ１１０、１１２、１１４は、ロード参照カウンタ（ＬＲＣ）１１６、１２０、１２４を含み、各接続コントローラ１４０、１４２、１４４は、従属性インジケータ検出器（ＤＩＤ）１１８、１２２、１２６を含む。データに対する要求が、スレッドを実行している関連スレッドコンテキストユニットから提供されると、各ＬＲＣは１ずつインクリメントされる。要求されたデータがソースから復帰すると、各ＬＲＣは１ずつデクリメントされる。このように、ロード参照カウンタ（ＬＲＣ）は、特定のスレッドに関するデータ要求の数とデータ復帰の数との間の差分を示すカウンタ値を維持するように構成される。従属性インジケータ検出器１１８、１２２、１２６は、命令内の従属性インジケータを検出するように構成される。従属性インジケータは、任意のタイプのデータ、フラグ、ビット、又は、命令が、スレッド内の前の命令からのデータを必要とするかを示すその他のインジケータであることができる。スレッドコードを生成するためにソースコードがコンパイルされると、従属性インジケータは追加される。典型的な実施形態において、単一ビット従属性インジケータが、スレッドの各データ従属命令に追加される。従って、前の命令からのデータを必要とするスレッドの各命令は、従属性インジケータを含む。
【００２０】
スレッドの実行中、各ＬＲＣは、対応するスレッドのデータ要求及びデータ復帰に従って、インクリメント及びデクリメントされる。従属性インジケータ検出器（ＤＩＤ）１１２、１２２、１２６が、命令を、前の命令からのデータに従属していると識別した場合、ＬＲＣは、評価され、ゼロであるか判定される。もしＬＲＣが非ゼロであれば、スレッドコンテキストユニットは、命令を発行することを止め、スレッドコンテキストユニットは待機状態に位置づけられる。ＬＲＣがゼロに等しい場合、命令は実行される。
【００２１】
図２は、典型的な実施形態に従うスレッド制御の状態機器図である。この状態機器図は、状態、遷移、及び動作から構成される挙動のモデルである。状態は、システム開始から現在までの入力変更を反映するので、過去に関する情報を格納する。遷移は、図２で矢印によって示され、状態変化を示す。遷移が発生するためには特定の条件が満たされなければならない。図２は、スレッドコンテキストユニットの状態及び遷移の典型例である。このように、各スレッドコンテキストユニットは、スレッドスケジューラの動作中、異なる状態でありうる。
【００２２】
典型的な実施形態において、スレッドコンテキストユニットは、ＩＤＬＥ状態２０２、ＡＬＵ状態２０４、ＬＯＡＤ状態２０６、ＦＬＯＷ状態２０８、ＤＥＰ状態２１０、ＷＡＩＴ状態２１２、及びＥＭＩＴ状態２１４を含む７つの状態のうちの１つであることができる。全てのスレッドは、ＩＤＬＥ状態２０２で開始し、終了する。スレッドコンテキストユニットは、ＩＤＬＥ状態２０２で新たなスレッドを待っている。ＩＤＬＥ状態から、リソースが利用可能となるのをスレッドコンテキストユニットが待つＷＡＩＴ状態２０４へ変遷している時、命令タイプが、リソースマネージャ１３２に示される。ロードコントローラが利用可能である場合、命令は、命令キャッシュからロードされ、実行される。命令は、ＡＬＵ演算、ロード動作、又はテクスチャ動作を含むことができる。特定の命令及び現在の状態に依存して、スレッドコンテキストユニットは適切な状態へ遷移する。ＦＬＯＷ状態２０８で、スレッドコンテキストユニットは、フロー制御タスクを実行し、プログラムカウンタを更新する。ＬＯＡＤ状態２０６で、スレッドコンテキストユニットは、例えば初期ローディング、テクスチャデータのロード、メモリからのデータのロード、及びその他のロード及び格納実行のようなロードタスクを実行する。ＷＡＩＴ状態２０４で、スレッドコンテキストユニットは、リソースを待つ。算術ロジック演算ユニット（ＡＬＵ）１０６は、算術又はロジック命令を実行するために、ＡＬＵ状態２０４でアクセスされる。従属性インジケータが命令内で検出され、ＬＲＣが非ゼロである場合、スレッドコンテキストユニットはＤＥＰ状態２１０に入る。ＬＲＣがゼロに戻ると、スレッドコンテキストユニットは前のＥＭＩＴ状態へ遷移する。ＥＭＩＴ状態２１４の間、命令の復帰した結果は、コンテキストレジスタ外へ移動する。
【００２３】
図３は、典型的な実施形態に従って、従属命令を用いてスレッドを管理する方法のフローチャートである。この方法は他の構成にも適用されうるが、典型的な実施形態におけるスレッドコンテキストユニットによって実行される。以下のステップは、図２に関して説明された従属命令関連技術の実行の例を提供する。従って、明確さと簡略さの観点から図３では省略された他のブロック又はフローチャートを用いて、スレッドコンテキストユニットの他の動作をモデル化することができる。典型的な実施形態において、この方法は、コンテキストコントローラ１４０、１４２、１４４の動作を実行するロジック回路によって実行される。
【００２４】
上述したように、コンテキストコントローラロジックの動作は、コンパイルされたスレッドコードによって指示される。従って、コンパイル手順の間、コンパイラは、高レベルコードで示される従属性を識別し、コンテキストコントローラによって理解される命令の適切な場所に従属性インジケータを挿入する。
【００２５】
ステップ３０２で、プログラムカウンタ（ＰＣ）及びロード参照カウンタ値（ＬＲＣ＿ＶＡＬ）が、新たなスレッドのために初期化される。グローバルレジスタは、スレッドのために初期化された値を設定する。アプリケーションが、スレッドがステップ０以外のステップ（第１のステップ）で開始することを必要とする場合、ＩＮＩＴ＿ＰＣは非ゼロであることができ、ＰＣは非ゼロ値に設定されうる。プレロードされる必要のあるデータがない場合、ＩＮＩＴ＿ＬＲＣ＿ＶＡＬはゼロである。しかし、もしスレッドが、例えばテクスチャデータのようなプレロードされるデータを必要とすれば、例えばＩＮＩＴ＿ＬＲＣ＿ＶＡＬは非ゼロ値に設定されうる。スレッドコンテキストユニットはＩＤＬＥ状態２０２にあり、新たなスレッドを待っている。新たなスレッドが割り当てられると、方法はステップ３０４へ続く。
【００２６】
ステップ３０４で、現在の命令が従属命令であるかが判定される。もし従属性インジケータが命令内で検出されれば、その命令は従属命令であると識別され、方法はステップ３０６へ続く。そうでなければ、方法はステップ３１２へ進む。
【００２７】
ステップ３０６で、ＬＲＣ値（ＬＲＣ＿ＶＡＬ）がゼロに等しいかが判定される。もしＬＲＣがゼロに等しければ、方法はステップ３１２へ続く。もしＬＲＣ値が非ゼロであれば、方法はステップ３０８へ進む。
【００２８】
ステップ３０８で、要求されたデータが取得されたかが判定される。典型的な実施形態において、ロードコントローラは、データが適切なレジスタファイルへ復帰したことを示す。もしデータが復帰していれば、方法はステップ３１０へ続き、そこでＬＲＣは１デクリメントされる。そうでない場合、方法はステップ３０８へ戻る。ステップ３１０の後、方法はステップ３０６へ戻る。
【００２９】
ステップ３１２で、要求は、命令を実行するための適切なリソースへ与えられる。リソースが利用可能であり、リソースマネージャ（スレッドアービトレーションマネージャ）１３２によって許可された場合、命令は適切なリソースによって実行される。
【００３０】
ステップ３１４で、命令がデータを要求したかが判定される。もしデータが要求されていれば、方法はステップ３１６へ続き、そこでＬＲＣ値は、方法がステップ３１８へ進む前に、１インクリメントされる。もしデータが要求されなければ、方法はステップ３１８へ進む。
【００３１】
ステップ３１８で、プログラムカウンタは１インクリメントされる。ステップ３２０で、スレッドのための次のＰＣ命令が存在するかが判定される。もし更なる命令があれば、方法はステップ３０４へ戻る。そうでなければ、方法はステップ３０２へ戻り、次のスレッドを待つ。
【００３２】
当業者は、情報及び信号が、任意の異なる様々な技術及び技法を用いて表されうることを理解するであろう。例えば、上記を通して参照されるデータ、命令、コマンド、情報、信号、ビット、記号、及びチップは、電圧、電流、電磁波、磁界や磁気素子、電界や電気素子、又はそれらの任意の組み合わせによって表されることができる。
【００３３】
当業者は更に、本明細書に開示された実施形態に関連して記載された、実例となる様々なロジックブロック、モジュール、回路、及びアルゴリズムステップが、電子工学的ハードウェア、コンピュータソフトウェア、又はこれらの組み合わせとして実現されうることをよく理解するであろう。ハードウェアとソフトウェアとの相互置換性を明確に説明するために、様々な実例となる構成要素、ブロック、モジュール、回路、及びステップが、それらの機能観点から一般的に説明された。このような機能が、ハードウェアとして実現されるかソフトウェアとして実現されるかは、システム全体に課された設計制約及び特定のアプリケーションによる。当業者は、各特定のアプリケーションのために上述した機能を様々な方法で実装することができるが、このような実現の決定は、本発明の範囲から逸脱させるものとして解釈されてはならない。
【００３４】
本明細書で開示された実施形態に関連して記述された様々な例示的ロジックブロック、モジュール、及び回路は、汎用プロセッサ、デジタル信号プロセッサ（ＤＳＰ）、特定用途向け集積回路（ＡＳＩＣ）、フィールド・プログラマブル・ゲート・アレイ（ＦＰＧＡ）あるいはその他のプログラマブルロジックデバイス、ディスクリートゲートあるいはトランジスタロジック、ディスクリートハードウェア部品、又は上述された機能を実現するために設計された上記何れかの組み合わせを用いて実現又は実行されうる。汎用プロセッサとしてマイクロプロセッサを用いることができるが、代わりに、従来技術によるプロセッサ、コントローラ、マイクロコントローラ、あるいは状態機器を用いることも可能である。プロセッサは、例えばＤＳＰとマイクロプロセッサとの組み合わせ、複数のマイクロプロセッサ、ＤＳＰコアに接続された１つ又は複数のマイクロプロセッサ、又はこのような任意の構成である計算デバイスの組み合わせとして実現することも可能である。
【００３５】
本明細書で開示された実施形態に関連して記述された方法のステップは、ハードウェアによって直接的に、プロセッサによって実行されるソフトウェアモジュールによって、又はこれらの組み合わせによって具現化されうる。ソフトウェアモジュールは、ＲＡＭメモリ、フラッシュメモリ、ＲＯＭメモリ、ＥＰＲＯＭメモリ、ＥＥＰＲＯＭメモリ、レジスタ、ハードディスク、リムーバブルディスク、ＣＤ−ＲＯＭ、あるいは当該技術分野で知られているその他任意の形式の記憶媒体に収納されうる。典型的な記憶媒体は、プロセッサがそこから情報を読み取り、またそこに情報を書き込むことができるようにプロセッサに結合される。または、記憶媒体はプロセッサに統合されうる。このプロセッサと記憶媒体とは、ＡＳＩＣ内に存在することができる。ＡＳＩＣは、ユーザ端末内に存在することもできる。あるいはこのプロセッサと記憶媒体とは、ユーザ端末内のディスクリート部品として存在することができる。
【００３６】
開示された実施形態における上記記載は、当業者をして、本発明の製造又は利用を可能とするために提供される。これらの実施形態への様々な変形例もまた、当業者に対しては明らかであって、本明細書で定義された一般原理は、本発明の精神又は範囲を逸脱することなく他の実施形態にも適用されうる。従って、本発明は、本明細書に開示された実施形態に限定することは意図されておらず、本明細書に開示された原理及び新規特徴と整合が取れた最も広い範囲と一致するように意図されている。
【図１】
2010503070.tif 000003
【図２】
2010503070.tif 000004
【図３】
2010503070.tif 000005
【手続補正書】
【提出日】平成21年7月1日(2009.7.1)
【手続補正１】
【補正対象書類名】明細書
【補正対象項目名】００１５
【補正方法】変更
【補正の内容】
【００１５】
スレッドスケジューラは、（本明細書ではリソースマネージャと称される）スレッドアービトレーション／リソースマネージャ１３２によって実行するスレッドを管理及び発行する複数のスレッドコンテキストユニット１１０、１１２、１１４を含む。各スレッドは、スレッドスロットへ割り当てられ、関連するスレッドコンテキストユニット１１０、１１２、１１４で管理される。各スレッドコンテキストユニット１１０、１１２、１１４内のスレッドコンテキストレジスタ１３４、１３６、１３８は、スレッドの各命令の命令タイプ及びその他の情報を格納する。各スレッドコンテキストユニット１１０、１１２、１１４内のスレッドコンテキストコントローラ１４０、１４２、１４４は、リソースマネージャ１３２への命令の発行を制御する。スレッドコンテキストユニットは、リソースマネージャ１３２からのリソースを要求する。リソースが利用可能である場合、リソースマネージャは要求を許可する。スレッドスケジューラ１０２内のリソースマネージャ１３２及びフローコントローラ（図示せず）は、各スレッドコンテキストユニット１１０、１１２、１１４がデータをロードすることを可能とし、スレッドを実行するために適切なリソースによって命令を実行させるために、各スレッドが、ＡＬＵ１０６、ロードコントローラ１０８、および命令キャッシュ（図示せず）へアクセスすることを可能とする。
【手続補正２】
【補正対象書類名】明細書
【補正対象項目名】００１９
【補正方法】変更
【補正の内容】
【００１９】
スレッドコンテキストユニットは、スレッドの実行を管理するための適切なリソースを含む。スレッドコンテキストレジスタ１３４、１３６、１３８に加えて、スレッドコンテキストユニット１１０、１１２、１１４は、スレッドの実行を管理するロジック内に実現されたコンテキストコントローラ１４０、１４２、１４４を含む。図２に関して以下で説明するように、コンテキストコントローラは、そのコンテキストコントローラが有限セットの状態間で遷移する状態機器を用いてモデル化することができる。典型的な実施形態において、各スレッドコンテキストレジスタ１１０、１１２、１１４は、ロード参照カウンタ（ＬＲＣ）１１６、１２０、１２４を含み、各接続コントローラ１４０、１４２、１４４は、従属性インジケータ検出器（ＤＩＤ）１１８、１２２、１２６を含む。データに対する要求が、スレッドを実行している関連スレッドコンテキストユニットから提供されると、各ＬＲＣは１ずつインクリメントされる。要求されたデータがソースから復帰すると、各ＬＲＣは１ずつデクリメントされる。このように、ロード参照カウンタ（ＬＲＣ）は、特定のスレッドに関するデータ要求の数とデータ復帰の数との間の差分を示すカウンタ値を維持するように構成される。従属性インジケータ検出器１１８、１２２、１２６は、命令内の従属性インジケータを検出するように構成される。従属性インジケータは、任意のタイプのデータ、フラグ、ビット、又は、命令が、スレッド内の前の命令からのデータを必要とするかを示すその他のインジケータであることができる。スレッドコードを生成するためにソースコードがコンパイルされると、従属性インジケータは追加される。典型的な実施形態において、単一ビット従属性インジケータが、スレッドの各データ従属命令に追加される。従って、前の命令からのデータを必要とするスレッドの各命令は、従属性インジケータを含む。
【国際調査報告】
2010503070.tif 000006
2010503070.tif 000007
2010503070.tif 000008