(57)【特許請求の範囲】
【請求項１】
グラフィックス処理ユニットであって、
複数の命令を並列に実行するように構成された処理ユニットアレイを有するシェーダプロセッサと、
前記シェーダプロセッサの前記処理ユニットアレイから分離された、１つ以上の固定関数ハードウエアユニットと、ここで、前記１つ以上の固定関数ハードウエアユニットは、前記シェーダプロセッサによって実行されないグラフィックスレンダリングオペレーションを実行するように構成される、
ホストプロセッサから１つ以上のタスクを受け取って、前記１つ以上のタスクの各々のオペレーションのタイプおよび前記１つ以上のタスクの各優先度に基づいて前記シェーダプロセッサと前記１つ以上の固定関数ハードウエアユニットによって選択的に実行されるべき前記１つ以上のタスクを独立にスケジューリングするように構成されたコマンドプロセッサと、を備えるグラフィックス処理ユニット。
【請求項２】
前記コマンドプロセッサは、受け取った前記１つ以上のタスクのコマンドキューを維持するように構成され、前記コマンドキューは、前記グラフィックス処理ユニットによって実行されるべきタスクのリストを備える請求項１に記載のグラフィックス処理ユニット。
【請求項３】
前記コマンドプロセッサは、前記１つ以上のタスクの前記各優先度を決定して、前記１つ以上のタスクの前記各優先度に基づいて、前記１つ以上のタスクをスケジューリングするように構成される請求項１記載のグラフィックス処理ユニット。
【請求項４】
前記コマンドプロセッサは、前記ホストプロセッサから前記１つ以上のタスクの前記各優先度の指示を受け取り、前記１つ以上のタスクの前記各優先度に基づいて、前記１つ以上のタスクをスケジューリングするように構成される請求項１記載のグラフィックス処理ユニット。
【請求項５】
前記コマンドプロセッサは、アクティブタスクのリストを維持するように構成され、アクティブタスクは、前記シェーダプロセッサの少なくとも１つおよび前記１つ以上の固定関数ハードウエアユニットによって現在実行されているタスクである請求項１記載のグラフィックス処理ユニット。
【請求項６】
前記コマンドプロセッサは、前記１つ以上のタスクの第１のタスクの実行を停止して、前記１つ以上のタスクの第２のタスクの実行を開始するように構成される請求項１に記載のグラフィックス処理ユニット。
【請求項７】
前記グラフィックス処理ユニットのメモリから前記シェーダプロセッサのメモリにデータをコピーするように構成されるメモリコピーエンジンをさらに備える請求項１記載のグラフィックス処理ユニット。
【請求項８】
前記コマンドプロセッサは、前記メモリコピーエンジンのオペレーションを制御する請求項７記載のグラフィックス処理ユニット。
【請求項９】
グラフィックス処理ユニットを制御するための方法であって、
ホストプロセッサから１つ以上のタスクを受け取ることと、
シェーダプロセッサおよび１つ以上の固定関数ハードウエアユニットによって選択的に実行されるべき前記１つ以上のタスクを、前記１つ以上のタスクの各々のオペレーションのタイプおよび前記１つ以上のタスクの各優先度に基づいて、前記ホストプロセッサから独立してスケジューリングすることであって、ここで、前記シェーダプロセッサは、複数の命令を並列に実行するように構成された処理ユニットアレイを含み、前記１つ以上の固定関数ハードウエアユニットは、前記シェーダプロセッサから分離されており、前記シェーダプロセッサによって実行されないグラフィックスレンダリングオペレーションを実行するように構成されることと、を備える方法。
【請求項１０】
受け取った前記１つ以上のタスクのコマンドキューを維持することをさらに備え、前記コマンドキューは、前記グラフィックス処理ユニットによって実行されるべきタスクのリストを備える請求項９に記載の方法。
【請求項１１】
アクティブタスクのリストを維持することをさらに備え、アクティブタスクは、前記シェーダプロセッサの少なくとも１つおよび前記１つ以上の固定関数ハードウエアユニットによって現在実行されているタスクである請求項９記載の方法。
【請求項１２】
前記１つ以上のタスクの第１のタスクの実行を中断して、前記１つ以上のタスクの第２のタスクの実行を開始することをさらに備える請求項９記載の方法。
【請求項１３】
前記１つ以上のタスクの実行に先立って、前記グラフィックス処理ユニットのメモリから前記シェーダプロセッサのメモリにデータをコピーすることをさらに備える請求項９に記載の方法。
【請求項１４】
グラフィックス処理ユニットを制御するための装置であって、
ホストプロセッサから１つ以上のタスクを受け取るための手段と、
シェーダプロセッサ及び１つ以上の固定関数ハードウエアユニットによって選択的に実行されるべき前記１つ以上のタスクを、前記１つ以上のタスクの各々のオペレーションのタイプおよび前記１つ以上のタスクの各優先度に基づいて、前記ホストプロセッサから独立してスケジューリングするための手段であって、ここで、前記シェーダプロセッサは、複数の命令を並列に実行するように構成された処理ユニットアレイを含み、前記１つ以上の固定関数ハードウエアユニットは、前記シェーダプロセッサから分離されており、前記シェーダプロセッサによって実行されないグラフィックスレンダリングオペレーションを実行するように構成される手段と、を具備する装置。
【請求項１５】
受け取った前記１つ以上のタスクのコマンドキューを維持するための手段をさらに備え、前記コマンドキューは前記グラフィックス処理ユニットによって実行されるべきタスクのリストを備える請求項１４記載の装置。
【請求項１６】
アクティブタスクのリストを維持するための手段をさらに備え、アクティブタスクは、前記シェーダプロセッサの少なくとも１つおよび前記１つ以上の固定関数ハードウエアユニットによって現在実行されているタスクである請求項１４記載の装置。
【請求項１７】
前記１つ以上のタスクの第１のタスクの実行を中断して、前記１つ以上のタスクの第２のタスクの実行を開始する手段をさらに備える請求項１４記載の装置。
【請求項１８】
前記１つ以上のタスクの実行に先立って、前記グラフィックス処理ユニットのメモリから前記シェーダプロセッサのメモリにデータをコピーする手段をさらに備える請求項１４に記載の装置。
【請求項１９】
命令を備えるコンピュータプログラムであって、前記命令は、実行されたときに、１つ以上のプロセッサに、
ホストプロセッサからの１つ以上のタスクを受け取らせ、
シェーダプロセッサ及び１つ以上の固定関数ハードウエアユニットによって選択的に実行されるべき前記１つ以上のタスクを、前記１つ以上のタスクの各々のオペレーションのタイプおよび前記１つ以上のタスクの各優先度に基づいて、前記ホストプロセッサから独立してスケジューリングさせ、ここで、前記シェーダプロセッサは、複数の命令を並列に実行するように構成された処理ユニットアレイを含み、前記１つ以上の固定関数ハードウエアユニットは、前記シェーダプロセッサから分離されており、前記シェーダプロセッサによって実行されないグラフィックスレンダリングオペレーションを実行するように構成される、コンピュータプログラム。
【請求項２０】
実行されたときに、前記１つ以上のプロセッサに、受け取った前記１つ以上のタスクのコマンドキューを維持させる命令をさらに備え、前記コマンドキューはグラフィックス処理ユニットによって実行されるべきタスクのリストを備える請求項１９に記載のコンピュータプログラム。
【請求項２１】
実行されたときに、前記１つ以上のプロセッサに、アクティブタスクのリストを維持させる命令をさらに備え、ここにおいて、アクティブタスクは前記シェーダプロセッサの少なくとも１つおよび前記１つ以上の固定関数ハードウエアユニットによって現在実行されているタスクである請求項１９に記載のコンピュータプログラム。
【請求項２２】
実行されたときに、前記１つ以上のプロセッサに、前記１つ以上のタスクの第１のタスクの実行を中断して、前記１つ以上のタスクの第２のタスクの実行を開始させる命令をさらに備える請求項１９記載のコンピュータプログラム。
【請求項２３】
実行されたときに、前記１つ以上のプロセッサに、前記１つ以上のタスクの実行に先立って、グラフィックス処理ユニットのメモリから前記シェーダプロセッサのメモリにデータをコピーさせる命令をさらに備える請求項１９に記載のコンピュータプログラム。
【請求項２４】
前記オペレーションのタイプに基づいて、前記１つ以上のタスクを独立にスケジューリングするために、前記コマンドプロセッサが、前記１つ以上のタスクがグラフィックスレンダリングオペレーションまたは汎用オペレーションに関連するかどうかを決定するように構成される請求項１に記載のグラフィックス処理ユニット。
【発明の詳細な説明】
【技術分野】
【０００１】
本開示の側面はグラフィックス処理に関する。
【背景技術】
【０００２】
グラフィックス処理ユニット（ＧＰＵ）は、２次元ビジュアルディプレイの提示に関して、３次元（３Ｄ）グラフィックスコンテンツをレンダリングするために概して実装される。例えば、ＧＰＵは、３Ｄコンテンツを示すピクセルをディスプレイ上にレンダリングするために実装される。ＧＰＵは、シーンをレンダリングするときに、ディスプレイの各ピクセルに関してピクセル値を生成するためにグラフィックス処理を実行する。
【０００３】
一部のＧＰＵは一時に全体のシーンをレンダリングする。あるいは、ＧＰＵは、しばしばシーンの“タイル”と呼ばれる、シーンの小さな部分におけるグラフィックスをレンダリングする。例えば、ＧＰＵは、シーンを複数のタイルに分割し、タイルの各々を個々にレンダリングする。ＧＰＵは次に、レンダリングされたタイルの各々を組み合わせることによってシーンを再構成する。タイルのサイズは、レンダリングの間、特定のタイルがローカルＧＰＵメモリ資源に記憶可能なように決定される。
【発明の概要】
【０００４】
概して、この開示は、グラフィックス処理ユニット（ＧＰＵ）を制御するための技術を記述する。より詳細には、この開示は、一体化された処理ユニットを用いてＧＰＵの資源を管理するための技術を記述する。すなわち、例えば、ＧＰＵの資源がどのように利用されるかを記述するＣＰＵからコマンドストリームを受信するのではなく、ＧＰＵの一体化された処理ユニットは、ＧＰＵによって実行されるべきワーク（work）を概して規定する計算タスクを受け取ることができる。前記ＧＰＵの一体化された処理ユニットは次に、前記ＧＰＵの資源によって当該タスクがどのように実行されるのかを決定する。例えば、前記ＧＰＵの一体化された処理ユニットはタスクを受け取って、特定のＧＰＵ資源に対して前記タスクを独立に（independently）スケジューリングし、これによって、当該タスクを実行する前記ＧＰＵの資源を制御する。
【０００５】
一例において、グラフィックス処理ユニットは、シェーダプロセッサ（shader processor）と、１つ以上の固定関数ハードウエアユニット（fixed function hardware unit）と、コマンドプロセッサ（command processor）を備える。シェーダプロセッサは、複数の命令を並列に実行するように構成される。１つ以上の固定関数ハードウエアユニットは、グラフィックスデータをレンダリングするように構成される。コマンドプロセッサは、ホストプロセッサから1つ以上のタスクを受け取って、前記シェーダプロセッサと前記1つ以上の固定関数ハードウエアユニットによって選択的に実行されるべき前記1つ以上のタスクを独立にスケジューリングするように構成される。
【０００６】
他の例において、グラフィックス処理ユニットを制御するための方法は、ホストプロセッサから1つ以上のタスクを受け取ることと、シェーダプロセッサおよび1つ以上の固定関数ハードウエアユニットによって選択的に実行されるべきタスクを、前記ホストプロセッサから独立してスケジューリングすることであって、前記シェーダプロセッサは、複数の命令を並列に実行するように構成され、前記1つ以上の固定関数ハードウエアユニットはグラフィックスデータをレンダリングするように構成されることと、を備える。
【０００７】
他の例において、グラフィックス処理ユニットを制御するための装置は、ホストプロセッサから１つ以上のタスクを受け取るための手段と、シェーダプロセッサ及び１つ以上の固定関数ハードウエアユニットによって選択的に実行されるべき前記１つ以上のタスクを、前記ホストプロセッサから独立してスケジューリングするための手段であって、前記シェーダプロセッサは、複数の命令を並列に実行するように構成され、前記１つ以上の固定関数ハードウエアユニットはグラフィックスデータをレンダリングするように構成される手段と、を具備する。
【０００８】
他の例において、命令が記憶されたコンピュータ読み取り可能な媒体を備えるコンピュータプログラムプロダクトは、前記命令が実行されたときに、１つ以上のプロセッサに、ホストプロセッサからの１つ以上のタスクを受け取らせ、シェーダプロセッサ及び１つ以上の固定関数ハードウエアユニットによって選択的に実行されるべき前記１つ以上のタスクを、前記ホストプロセッサから独立してスケジューリングさせ、ここにおいて、前記シェーダプロセッサは、複数の命令を並列に実行するように構成され、前記１つ以上の固定関数ハードウエアユニットはグラフィックスデータをレンダリングするように構成される。
【図面の簡単な説明】
【０００９】
この開示の１つ以上の側面の詳細は、添付の図面及び以下の記述において述べられる。他の特徴、目的、およびこの開示の利点は、説明及び図面及び特許請求の範囲から明らかである。
【図１】図１は、この開示の技術を実装することができるグラフィックス処理ユニットを有する計算装置を示す。
【図２】図２は、例示的なグラフィックスレンダリングパイプラインを示すブロック図である。
【図３】図３は、図１に示される例のグラフィックス処理ユニットをより詳細に示すブロック図である。
【図４】図４は、本開示の側面にしたがった、コマンドプロセッサの例示的オペレーションを示すフローチャートである。
【図５】図５は、本開示の側面にしたがった、コマンドプロセッサの他の例示的オペレーションを示すフローチャートである。
【発明を実施するための形態】
【００１０】
概して、この開示は、グラフィック処理ユニット（ＧＰＵ）を制御するための技術を記述する。より詳細にはこの開示は、一体化された（integrated）処理ユニットを用いてＧＰＵの資源を管理するための技術を記述する。すなわち、例えば、ＧＰＵの資源がどのように利用されるかを記述するＣＰＵからのコマンドストリームを受信するのではなく、ＧＰＵの一体化された処理ユニットは、ＧＰＵによって実行されるべきワークを概して規定する計算上のタスクを受け取る。ＧＰＵの一体化された処理ユニットはＧＰＵの処理ユニットによってタスクがどのように実行されるかを決定する。例えばＧＰＵの一体化された処理ユニットは、特定のＧＰＵ資源に対するタスクを独立にスケジューリングするタスクを受け取り、これによって当該タスクを実行するＧＰＵの資源を制御する。
【００１１】
図１は、本開示の側面にしたがって、ＧＰＵの資源を管理するための技術を実装する計算装置２０を示すブロック図である。図１に示すように、計算装置２０はホストプロセッサ２４、記憶装置２８、メモリ３２、ネットワークモジュール３６、ユーザインタフェース４０、そしてディスプレイ４４を含む。計算装置２０はまた、１つ以上のシェーダプロセッサ５２、１つ以上の固定関数ユニット５４そしてコマンドプロセッサ５６をもつグラフィック処理ユニット（ＧＰＵ）を含む。一部の実施形態において、計算装置２０は携帯可能なあるいは移動体計算装置（例えば携帯電話、ネットブック、ラップトップ、タブレットデバイス、デジタルメディアプレーヤ、ゲームデバイス、あるいは他のポータブル計算デバイス）を含むかあるいはそれらの一部である。あるいは、計算装置２０は、デスクトップコンピュータ、サーバ、テレビ、テレビジョンセットトップボックス、ゲームコンソール、などの静的な計算装置をとして構成されることができる。
【００１２】
図１に示される計算装置２０は、単に１つの例である。ＧＰＵ４８などのＧＰＵの資源を管理するための技術は、他の構成要素をもつ多様な他の計算装置によって実行されることができる。一部の例において、計算装置２０は明確さの目的のために図１に示されていない付加的な構成要素を含む。例えば、計算装置２０は、計算装置２０の構成要素間でデータを交換するための１つ以上の通信ブリッジを含む。さらに、図１に示される計算装置２０の構成要素は、計算装置２０の全部の例において必要なわけではない。例えば、計算装置２０がデスクトップコンピュータである場合には、ユーザインタフェース４０およびディスプレイ４４は、計算装置２０の外部デバイスとなる。
【００１３】
ホストプロセッサ２４は、１つ以上のマイクロプロセッサ、コントローラ、デジタルシグナルプロセッサ（ＤＳＰ）、特定用途向け集積回路（ＡＳＩＣ）、フィールドプログラマブルゲートアレイ（ＦＰＧＡ）、あるいは同等の離散あるいは集積ロジック回路を含むことができる。さらに、この開示においてホストプロセッサ２４に属する機能は、ソフトウエア、ファームウエア、ハードウエア、あるいはそれらの組み合わせとして具体化される。
【００１４】
ホストプロセッサ２４は、計算装置２０内の実行のための命令を処理する。ホストプロセッサ２４は、記憶装置２８に記憶された命令あるいはメモリ３２に記憶された命令を処理することができる。ホストプロセッサ２４は、ＧＰＵ４８のための（例えばホストプロセッサ２４によって実行されるソフトウエアにおいて実装される）ドライバを用いてコマンドストリームを生成する。すなわち、ホストプロセッサ２４は、ＧＰＵ４８によって実行されるべきオペレーションを規定するコマンドストリームを生成する。
【００１５】
ホストプロセッサ２４は、可視のコンテンツをディスプレイ４４上に表示させるＧＰＵ４８によって実行されるべきコマンドストリームを生成する。例えば、ホストプロセッサ２４はグラフィックデータをレンダリングするためにＧＰＵ４８のための命令を提供するコマンドストリームを生成する。この例において、ホストプロセッサ２４は、図２に関して示されかつ記述されるパイプラインなどの、グラフィックスレンダリングパイプラインによって実行される。
【００１６】
付加的にあるいは代替的に、ホストプロセッサ２４は、ＧＰＵ４８に他のオペレーションを実行させるＧＰＵ４８によって実行されるべきコマンドストリームを生成する。例えば一部の例において、ホストプロセッサ２４は、ＧＰＵ４８を、汎用のグラフィック処理ユニット（ＧＰＧＰＵ）として使用するためのコマンドストリームを生成する。例えば、ＧＰＵ４８は、従来ホストプロセッサ２４によって実行される種々の汎用計算機能を実行する。一例として、映像復号処理及び後処理（例えばデ・ブロックキング、ノイズ低減、カラー補正など）および他の特定用途向け画像処理機能（例えば顔面検出／認識、パターン認識、ウエーブレット変換など）を含む、種々の画像処理機能を含む。一部の例において、ＧＰＵ４８は、そのようなＧＰＧＰＵアプリケーションを実行するためにホストプロセッサ２４と協働する。例えば、ホストプロセッサ２４は、ＧＰＵ４８に、ＧＰＵ４８による実行のためのコマンドストリームを提供することによって、ある種の機能をＧＰＵ４８に負荷分散（offload）する。
【００１７】
記憶装置２８は、１つ以上のコンピュータ読み取り可能な記憶媒体を含む。記憶装置２８は情報を長期的に記憶可能なように構成される。一部の例において、記憶装置２８は、不揮発性の記憶要素を含む。そのような不揮発性記憶要素の一例は、磁気ハードディスク、光学ディスク、フロッピー（登録商標）ディスク、フラッシュメモリ、あるいは電気的プログラマブルメモリ（ＥＰＲＯＭ）または電気的消去可能およびプログラマブル（ＥＥＰＲＯＭ）メモリの形態を含む。一部の例において、記憶装置２８は、非一時的記憶媒体として考慮される。術語“非一時的”は、記憶媒体は搬送波あるいは伝搬された信号として具体化されないことを意味することができる。しかしながら、術語“非一時的”は記憶装置２８が不動であるという意味に解釈されるべきではない。一例として、記憶装置２８は計算装置２０から取り除かれて他の装置に移動させることができる。他の例として、記憶装置は実質的に記憶装置２８に類似するが、計算装置２０内に挿入されることができる。記憶装置２８は、ホストプロセッサ２４あるいはＧＰＵ４８による１つ以上のアプリケーションの実行のための命令を記憶することができる。
【００１８】
メモリ２３は、オペレーションの間、情報を計算装置２０内に記憶するように構成される。一部の例において、メモリ３２は一時的メモリであり、これはメモリ３２の主な目的は長期的記憶ではないことを意味する。一部の例において、メモリ３２はコンピュータ読み取り可能な記憶媒体として記述される。したがって、メモリ３２は、時間の経過に従って変化するデータを記憶するにもかかわらず、“非一時的”であるとみなされる。また一部の例において、メモリ３２は、揮発性メモリとして記述されるが、これは、メモリ３２はコンピュータが電源オフされたときに記憶されたコンテンツを維持しないことを意味する。揮発性メモリの一例は、ランダムアクセスメモリ（ＲＡＭ）、ダイナミックランダムアクセスメモリ（ＤＲＡＭ）、スタティックランダムアクセスメモリ（ＳＲＡＭ）そして業界で知られた揮発性メモリの他の形態を含む。
【００１９】
一部の例において、メモリ３２は、ホストプロセッサ２４あるいはＧＰＵ４８による実行のためのプログラム命令を記憶するのに用いられる。メモリ３２は、プログラムの実行の間、情報を一時的に記憶するために、ソフトウエアまたは計算装置２０上で動作するアプリケーションによって用いられる。したがって、メモリ３２は、ホストプロセッサ２４やＧＰＵ４８などの、計算装置２０の他の構成要素によってアクセスされる。
【００２０】
開示の一部の側面によれば、メモリ３２は、データがディスプレイ４４によって表示される前に、画素データ（例えば、１フレームの映像データ、コンピュータ生成されたグラフィック画像、静止画像など）を記憶する表示バッファとして実装される。例えば、ＧＰＵ４８は画素データがディスプレイ４４によって表示される前に、画素データをメモリ３２に分割（resolve）する。
【００２１】
計算装置２０は、１つ以上の無線ネットワークなどの１つ以上のネットワークを介して、外部装置と通信するためにネットワークモジュール３６を使用する。ネットワークモジュール３６は、イーサネット（登録商標）カード、光学トランシーバ、無線周波数トランシーバ、あるいは情報を送信および受信可能な任意の他のタイプの装置、であることができる、ネットワークインタフェースカードであることができる。一部の例において、計算装置２０は、サーバ、携帯電話、あるいは他のネット接続された計算装置などの外部装置と無線で通信するために、ネットワークモジュール３６を利用する。
【００２２】
計算装置２０はまた、ユーザインタフェースを含む。ユーザインタフェース４０の一例は、トラックボール、マウス、キーボード、他のタイプの入力装置を含むが、これらに限定されない。ユーザインタフェース４０は、ディスプレイ４４の一部として組み込まれた接触感知スクリーンを含む。ディスプレイ４４は液晶ディスプレイ（ＬＣＤ）、有機光出力ダイオード（ＯＬＥＤ）ディスプレイ、プラズマディスプレイ、あるいは他のタイプのディスプレイ装置を備える。
【００２３】
計算装置２０のＧＰＵ４８は、グラフィックをレンダリングするとともにＧＰＧＰＵアプリケーションを実行するための固定機能及びプログラマブル構成要素を有する専用ハードウエアユニットであることができる。例えば、図１に示される例によれば、ＧＰＵ４８はプログラマブルシェーダプロセッサ５２、（固定機能ハードウエア構成要素を含むことができる）固定機能ユニット５４、そしてコマンドプロセッサ５６を含む。ＧＰＵ４８は、ＤＳＰ、汎用マイクロプロセッサ、ＡＳＩＣ、ＦＰＧＡ、あるいは他の同等の集積あるいは離散論理回路を含むことができる。ＧＰＵ４８はまた、図３，４に関してより詳細に記述されているように、専用ＧＰＵメモリなどの他の構成要素を含む。
【００２４】
さらに、図１において分離した構成要素として示されているが、一部の例において、ＧＰＵ４８は、ホストプロセッサ２４の一部として形成される。ＧＰＵ４８は、種々のアプリケーションプログラミングインタフェース（ＡＰＩ）にしたがって、処理技術を利用するように構成される。例えば、ユーザは、複数のプラットフォーム、オペレーティングシステムそしてハードウエア上で走る標準のソフトウエアインタフェースを使用して、ＧＰＵ４８によって実行されるアプリケーションをプログラミングできる。
【００２５】
一部の例においては、ＧＰＵ４８は、OpenGL for Embedded Systems(“OpenGL ES”、２００７年３月に公表され、一般に利用可能)を含む、OpenGLプラットフォームを用いて生成されたアプリケーションを利用するように構成される。他の例示的なＡＰＩは、Compute Unified Device Architecture (“CUDA”、ＮＶＩＤＩＡコーポレーションによって開発され、バージョン３．２が２０１０年９月１７日に公表された)、そして、DirectX（マイクロソフトInc.によって開発され、バージョン１．１が２００９年１０月２７日に公表された)を含む。概して、ＡＰＩは、関連するハードウエアによって実行される所定の標準化された組のコマンドを含む。ＡＰＩコマンドは、ユーザが、ハードウエア構成要素の詳細についてのユーザ知識なしに、ＧＰＵのハードウエア構成要素に指示することを可能にする。
【００２６】
図１の例は、単一ブロックとしてのシェーダプロセッサ５２を示しているが、シェーダプロセッサ５２は、１つ以上のシェーダ処理ユニットを含み、概して、“一体化されたシェーダプロセッサ”と呼ばれる。すなわち、例えば、シェーダプロセッサ５２は、グラフィックスをレンダリングするために、ジオメトリ（geometry）、頂点(vertex)、ピクセル(pixel)あるいは（図２の例に示されるシェーダステージに関連して記述されたものなどの）他のシェーディングオペレーションを実行する。他の例において、シェーダプロセッサ５２は、汎用の計算を実行する。すなわち、シェーダプロセッサ５２は、ＧＰＧＰＵアプリケーションに関連した命令を実行する。ＧＰＧＰＵアプリケーションは概して、種々の入力データを解析あるいは変更するのに用いられる機能を規定する１つ以上のカーネルを含む。一例としては、比較的大きな数値データセットを並列に処理するための機能を含む。画像処理の観点から言うと、機能は例えば、カラー補正アルゴリズム、顔検出アルゴリズム、或いは拡張現実（augmented reality）アプリケーションを実行するための機能を含む。他の例は、変換関数、レイトレーシングのための機能、あるいは種々の他の機能を含む。
【００２７】
シェーダプロセッサ５２は概して、複数の命令を並列に実行するように構成される。例えば、シェーダプロセッサ５２は、命令を並列に実行する（例えば算術ロジックユニット（“ＡＬＵ”などの）処理ユニットアレイを含む。すなわち、シェーダプロセッサ５２は、命令を取り込み及び解読するためのコンポーネントやロードバランシングのためのコンポーネントなどの、図３に特に示されていない１つ以上のコンポーネント、および１つ以上のＡＬＵあるいは計算を実行するための他の計算ユニットを含む。シェーダプロセッサ５２は、（図３の例に関連して示され記述されたシェーダプロセッサメモリ６０などの）１つ以上のメモリ、キャッシュ、あるいはレジスタを含む。
【００２８】
固定関数ユニット５４はグラフィックスデータをレンダリングするための固定関数ハードウエアコンポーネントなどの、１つ以上のユニットを含む。例えば、固定関数ユニット５４は、レンダリングのためのグラフィックスデータ（トライアングル、ライン、ポイント）を準備するためにグラフィックデータの初期入力アッセンブリを実行するためのユニットを含む。他の例において、固定関数ユニット５４は、ラスター化を実行するためのユニットを含む。すなわち、固定関数ユニット５４は、ラスター化の間シェーディングのためのプリミティブを準備する。固定関数ユニット５４はまた、グラフィックデータをレンダリングすること及び／又は他のオペレーションを実行することに関連する種々の他のオペレーションを実行する。
【００２９】
上記したように、ＧＰＵ４８は、ディスプレイ４４上の表示のためのグラフィックをレンダリングする。例えば、ＧＰＵ４８は、図２に示される例示的パイプラインなどの、グラフィックレンダリングパイプラインのステージに関連するオペレーションを実行するために、シェーダプロセッサ５２及び／または固定関数ユニット５４を使用する。開示の一部の側面によれば、ＧＰＵ４８はタイルに基づくレンダリングアーキテクチャを実装する。例えば、（例えば１フレームのビデオデータ、コンピュータ生成されたグラフィックイメージ、静止画などの）ピクセルデータの全体のシーンをレンダリングする代わりに、ＧＰＵ４８は、１つのシーンを複数の断片（例えば、“タイル”）に分割し、タイルを個々にレンダリングする。ＧＰＵ４８は、レンダリングされたタイルを、メモリ３２に含まれたディスプレイバッファなどのバッファに、レンダリングされたタイルの各々を書き込む。シーンの全てのタイルをメモリ３２に書き込んだ後、計算装置２０はレンダリングされたタイルを組み立ててディスプレイ４４上にシーンを表示する。
【００３０】
ＧＰＵ４８は、ＧＰＧＰＵとして実装されたとき、ここにおいてカーネルと呼んでいるシェーダプログラムを実行する。例えば図３に関して詳細に記述されるように、シェーダプロセッサ５２は、画像処理機能および他の機能などの種々の汎用計算機能を行うためにカーネルを実行する。カーネルは、上記の例示的ＡＰＩなどのＡＰＩを使用してユーザによって規定することができる。カーネルは、ワークグループにグループ化される個々のワークアイテム（例えばＧＰＵにおけるワークの基本ユニット）を備える。一部の例において、ＧＰＵ４８は、ＧＰＧＰＵコマンドストリームを実行するときに、特定のシーケンスにおいてカーネルを実行する。すなわち、シェーダプロセッサ５２は、次のカーネルに移行する前に、同一のカーネルの複数インスタンスを並列に実行する。他の例において、ＧＰＵ４８は、複数のカーネルを同時に実行することができる。
【００３１】
概して、ＧＰＵ４８は、上記したように、ホストプロセッサ２４などのホストプロセッサからコマンドストリームを受信する。コマンドストリームは概して、ホストプロセッサ２４によって実行されるソフトウエアドライバによって生成され、シェーダプロセッサ５２および固定関数ユニット５４のオペレーションを制御する。例えば、コマンドストリームは概して、ＧＰＵ４８のどのコンポーネントがコマンドストリームにおいて規定されたオペレーションを実行するのかを制御する。
【００３２】
一部のＧＰＵの構成によって課された拘束およびコマンドストリームの制限のために、ＧＰＵ４８などのＧＰＵは一度に単一のタスクを実行する。例えば、ＧＰＵ４８はコマンドストリームに含まれる各オペレーションを直列に実行する。すなわち、ＧＰＵの他の資源がコマンドストリームにしたがって命令を処理している間、ＧＰＵのある資源はアイドル状態になる。すなわち、ＧＰＵ４８のシェーダプロセッサ５２は、固定関数ユニット５４がアイドル状態にあるときにコマンドストリームにしたがってオペレーションを実行する。
【００３３】
一部の例において、マルチタスク処理は、１つ以上のコマンドストリーム間で適時に切り替えることによってホストプロセッサ２４によってエミュレーションされる。しかしながら、コマンドストリームの切り替えは比較的時間を要するものであり、複数のタスクを実行するためにＧＰＵ資源を効率よく共有することを困難にしてしまう。例えば、１つのコマンドストリームから他のコマンドストリームに交換することに関連して比較的高いレイテンシが存在する。したがって、種々のレンダリングオペレーションおよび汎用オペレーションなどの他のオペレーション（例えば画像処理、レイトレーシング、など）間で切り替えを行うことは効率的でない。加えて、タスクがいつ実行されるかは不確定であるため、高い優先度をもつ多くの時間を要するタスク（例えば音声処理などのマルチメディア処理タスク）をコマンドストリームを介してＧＰＵ４８に割り当てることは効率的ではない。例えば、コマンドストリームに含まれるオペレーションの実行の時間を決定することは困難であり、ＧＰＵ４８によって実行される現存のコマンドによって大きく異なる。
【００３４】
本開示の側面によれば、コマンドプロセッサ５６は、ホストプロセッサ２４などのホストプロセッサあるいは他のホスト処理ユニット（例えば、中央処理ユニット（ＣＰＵ）による介在なしに、ＧＰＵ資源を局部的に制御する。例えば、本開示の側面によれば、ＧＰＵ４８のコマンドプロセッサ５６は、ホストプロセッサ２４から１つ以上の“タスク”を受け取る。コマンドプロセッサ５６は、例えばシェーダプロセッサ５２や固定関数ユニット５４を含む、ＧＰＵ４８の資源によって実行されるべきタスクを独立にスケジューリングする。すなわち、ＧＰＵ資源がどのように利用されるかを指図するホストプロセッサ２４からコマンドストリームを受信する代わりに、コマンドプロセッサ５６は、ＧＰＵによって実行されるべきワークを概して規定する１つ以上のより高いレベルのタスクを受け取る。そのようなタスクは、オペレーションを実行するためにＧＰＵ４８のどの資源を使用すべきかを指令することなしに、ＧＰＵ４８によって実行されるべきオペレーションを規定する。
【００３５】
コマンドプロセッサ５６は、タスクをいつ実行するのか及び／又はタスクを実行するためにどの資源を使用するのかを独立に決定する。すなわち、この開示の側面は、タスクをいつ実行するのか及び／又はタスクを実行するのにどの資源を使用するのかを独立に決定するコマンドプロセッサ５６に関する。この開示の側面は概して、ホストプロセッサ２４からの介在なしに（例えばホストプロセッサ２４によって生成されるコマンドストリームから提供される介在なしに）、タスクの実行を制御するコマンドプロセッサ２４に関する。以下に詳細に述べるように、そのような決定は、他の考えられる配慮の中で資源利用可能性及び／又はタスク優先度に基づいて行われる。コマンドプロセッサ５６はまた、ＧＰＵ４８の種々の資源間でデータフローを独立に制御する。
【００３６】
コマンドプロセッサ５６は、シェーダプロセッサ５２及び／又は固定機能ユニット５４などの、ＧＰＵ４８の異なる資源に対してタスクを独立してかつ選択的に分配することを含み、複数のタスクを同時に制御する。すなわち、コマンドプロセッサ５６は、ホストプロセッサ２４からの介在なしに、タスクの実行を制御し、単一のタスクを実行することに必要上専念する、ＧＰＵ４８の全ての資源なしに、ＧＰＵ４８のどの資源が各タスクを実行するのかを選択する。一例において、コマンドプロセッサ５６は、ＧＰＵ４８のシェーダプロセッサ５２によって同時に実行されるべき計算タスクを選択的にスケジューリングするとともに、ＧＰＵ４８の固定関数ユニット５４によって実行されるべきグラフィックレンダリングタスクをスケジューリングする。このようにして、コマンドプロセッサ５６は、ホストプロセッサ２４がコマンドストリームの切り替えのために待機することなしに、ＧＰＵ４８が複数のタスクを並列に実行することを可能にする。好ましくは、ホストプロセッサ２４は、コマンドプロセッサ５６に複数のタスクを送信することができ、コマンドプロセッサ５６は、そのようなタスクの実行を制御することができる。
【００３７】
ホストプロセッサ２４による介在なしにＧＰＵ資源を局所的に制御するＧＰＵ４８の能力は、柔軟性を増大するとともにＧＰＵ資源の効率的な管理を促進する。例えば上記したように、ホストプロセッサ２４は従来、コマンドストリームをＧＰＵ４８に送信し、ＧＰＵ４８はＧＰＵ４８の資源を用いてパイプライン様式で順次実行する。概して単一のオペレーションが所定時にＧＰＵ４８によって実行され、これによって、他の資源が特定のコマンドストリームを実行することを終了するのを待機している間、ＧＰＵの一部の資源はアイドル状態となる。すなわち、例示の目的のための例において、シェーダプロセッサ５２がアイドル状態にある間、ある種の固定関数ユニット５４はグラフィックレンダリングオペレーションを実行する。
【００３８】
本開示の側面によれば、コマンドプロセッサ５６は、ＧＰＵの資源がアイドル状態となる時間の量を減らすことによって効率を増大することができる。例えばＧＰＵ資源を、一度に１つのみのコマンドストリームを処理する一連の連結されたコンポーネントとして取り扱うのではなく、コマンドプロセッサ５６は、ＧＰＵ４８の資源を独立にかつ選択的に制御する。上記した例において、コマンドプロセッサ５６は、ＧＰＵ４８の固定関数ユニット５４に対してグラフィックレンダリングタスクをスケジューリングするとともに、異なる計算タスクをＧＰＵ４８のシェーダプロセッサ５２に対してスケジューリングする。それゆえ、コマンドプロセッサ５６は、ＧＰＵのすべての資源に一度に１つのタスクを実行させるのではなく、タスクを、ＧＰＵ４８の異なる資源に対して選択的にスケジューリングすることによって、ＧＰＵ資源がアイドル状態となる時間の量を可能なかぎり減らす。
【００３９】
図２は、グラフィックスレンダリングパイプライン８０を示す。概して、グラフィックスレンダリングパイプライン８０は、ＧＰＵ４８（図１）などのＧＰＵによってグラフィックをレンダリングするのに用いられる。パイプライン８０は説明の都合上例示したものであり、パイプライン８０には、より少ないステージ、さらなるステージあるいは代替的なステージが含まれる。
【００４０】
グラフィックスレンダリングパイプライン８０は概して（例えば丸い角部で示された）プログラマブルステージと、（例えば四角の角部で示された）固定関数ステージとを含む。例えば、グラフィックスレンダリングパイプライン８０のある種のステージに関連するグラフィックスレンダリングオペレーションは概してシェーダプロセッサ５２などのプラグラマブルシェーダプロセッサによって実行されるとともに、グラフィックスレンダリングパイプライン８０の他のステージに関連する他のグラフィックスレンダリングオペレーションは概して、固定関数ユニット５４などの非プログラマブルな固定関数ハードウエアユニットによって実行される。シェーダプロセッサ５２によって実行されるグラフィックスレンダリングステージは概して、“プログラマブル”ステージと呼ばれ、固定関数ユニット５４によって実行されるステージは概して、固定関数ステージと呼ばれる。
【００４１】
図２の例示の中に入力アッセンブラステージ８２が固定関数ステージとして示され、概してグラフィックスデータ（トライアングル、ラインおよびポイント）をグラフィックスレンダリングパイプライン８０に供給する役割を負っている。例えば、入力アッセンブラステージ８２は、高次元サーフィス、プリミティブなどのための頂点データを収集するとともに、頂点データと頂点シェーダステージ８４に対する属性を出力する。
【００４２】
頂点シェーダステージ８４は、受信した頂点データおよび属性を処理する。例えば、頂点シェーダステージ８４は、トランスフォメーション、スキミング、頂点ディスプレイスメントなどの頂点ごとの処理（per-vertex processing）を実行するとともに、頂点ごとの材料属性を計算する。一部の例において、頂点シェーダステージ８４は、テクスチャ座標、頂点カラー、頂点ライティング、フォグファクタ等を生成する。頂点シェーダステージ８４は概して、単一の入力頂点を取り込んで単一の処理された出力頂点を出力する。
【００４３】
テッセレーション（tessellation）の処理は概して、ハルシェーダステージ８６、テッセレータステージ８８、ドメインシェーダステージ９０によって実行される。例えば、ハルシェーダステージ８６は、テッセレータステージ８８に渡すためにテッセレーションファクタを生成する。この例において、ハルシェーダステージ８６は低次サーフェイスを規定する入力データをパッチを作り上げている制御点に変換する。パッチは、オブジェクトのサーフェイスの比較的小さな部分のある種の特性（例えばジオメトリなど）をともに特定する複数のノードの各々に関するデータを含む。テッセレータステージ８８は、パッチを、複数のトライアングルあるいはクワッドプリミティブにテッセレート（すなわち副分割）するために、ハルシェーダステージ８６からのテッセレーションファクタを使用する固定関数ステージである。テッセレータステージ８８で得られた各頂点は、ドメインシェーダステージ９０へと出力される。ドメインシェーダステージ９０は、各頂点でのサーフェイス表現（representation）を評価する。ドメインシェーダステージ９０は各頂点（例えば位置、テクスチャ座標など）に関する完全なデータをジオメトリシェーダ９２に送る。
【００４４】
ジオメトリシェーダステージ９２は、頂点データ（例えばトライアングルに関する３つの頂点、ラインに関する２つの頂点、あるいはポイントに関する単一の頂点など）によって規定されたプリミティブを受信し、さらに当該プリミティブを処理する。例えば、ジオメトリシェーダステージ９２は、他の処理オペレーションの中で、シルエットエッジ検出およびシャドウボリューム抽出などのプリミティブごとの処理を実行する。
【００４５】
ラスタライザステージ９４は概して、プリミティブをクリップしたり、ピクセルシェーダステージ９６のためにプリミティブを準備する役目を持っている。例えば、ラスタライザステージ９４は、ピクセルシェーダ９６によるシェーディングのために多数のフラグメントを生成する。ピクセルシェーダステージ９６は、ラスタライザ９４からフラグメントを受信してカラーなどのピクセルごとのデータを生成する。ピクセルシェーダステージ９６はまた、テクスチャブレンディングおよびライティングモデル計算などのピクセルごとの処理を行う。出力合成ステージ９８は概して、最終結果を生成するために、（ピクセルシェーダ値、深さおよびステンシル情報などの）種々のタイプの出力データを組み合わせる。
【００４６】
上記したように、グラフィックスレンダリングパイプライン８０は概して、（例えば丸い角部で示された）プログラマブルステージと、（例えば四角の角部で示された）固定関数ステージとを含む。すなわち、グラフィックスレンダリングパイプライン８０の一部のステージは概して、シェーダプロセッサ（例えば図１の例で示されたシェーダプロセッサ５２）などのプログラマブルコンポーネントによって実行されるが、グラフィックスレンダリングパイプライン８０の他のステージは概して、プログラマブルでない固定関数ハードウエアユニット（例えば図１の例で示された固定関数ユニット５４）によって実行される。
【００４７】
この開示の側面によれば、コマンドプロセッサ（例えば図１の例で示されたコマンドプロセッサ５６）は、グラフィックスレンダリングパイプライン８０のステージの各々を独立に制御するために用いられる。例えば、この開示の側面によれば、パイプライン８０の各ステージによってデータを順次処理するのではなく、コマンドプロセッサ５６がパイプライン８０のステージを独立に制御する。すなわちコマンドプロセッサ５６は、第１の計算タスクを入力アッセンブラ８２に分配し、第２の計算タスクを（シェーダプロセッサ５２を使用する）シェーダステージの１つに分配する。この例において、第２の計算タスクは、パイプライン処理において通常起こりうるように、入力アッセンブラ８２によって回送されるかあるいは実行される。すなわち、入力アッセンブラ８２はグラフィックスレンダリング機能を実行するとともに、シェーダプロセッサ５２は（ＧＰＧＰＵオペレーションなどの）他のタスクを実行する。
【００４８】
図３は、ＧＰＵ４８をより詳細に示すブロック図であり、この開示の技術を実行するために実装される。図３に示される例において、ＧＰＵ４８は、シェーダプロセッサ５６、固定関数ユニット５４およびコマンドプロセッサ５６を含む。さらに、図３に示される例において、ＧＰＵは、（シェーダプロセッサ５２と組み合わせて示される）シェーダプロセッサメモリ６０と、メモリコピーエンジン６２を含む。図３のある種のモジュール及び／又はユニットは高度に一体化されているが、概念を説明するためにここでは別々に示されていることを理解されたい。さらに、ある種のモジュールは、概念を説明するために単一モジュールとして記述されているが、１つ以上の機能及び／又は構造ユニットを含むことができる。
【００４９】
図３は、この開示において記述された技術を利用できるＧＰＵの単なる一例として提供されていることを理解されたし。この開示に関連して記述された技術は、他のコンポーネントを有する種々の他のＧＰＵによって実行される。すなわち、他の例において、ＧＰＵ４８は、画像をレンダリングし、画像を解析し、及び／又は他の計算を実行することに関連する種々の他のコンポーネントを含むことができる。例えば、ＧＰＵ４８は、テクスチャユニット、スケジューリングユニット、算術ロジックユニット（ＡＬＵ）あるいは、明確さのために図３には示されていない他のＧＰＵコンポーネントを含む。
【００５０】
図１の例に関して示したように、シェーダプロセッサ５２は、グラフィックスレンダリング及び／又は他の汎用オペレーションを実行する１つ以上のシェーダ処理ユニットを含む。すなわち、例えば、シェーダプロセッサ５２は、グラフィックスをレンダリングするために、ジオメトリ、頂点、あるいは他のシェーディングオペレーションを実行する。他の例においては、シェーダプロセッサ５２は、汎用の計算を実行する。
【００５１】
上記した図１の例に関して述べたように、シェーダプロセッサ５２は、グラフィックスレンダリング及び／又は他の汎用オペレーションを実行する１つ以上のシェーダ処理ユニットを含む。すなわち、例えば、シェーダプロセッサ５２は、グラフィックスをレンダリングするために、ジオメトリ、頂点、ピクセルあるいは他のシェーディングオペレーションを実行する。他の例において、シェーダプロセッサ５２は、汎用計算を実行する。
【００５２】
固定関数ユニット５４は概して、グラフィックスデータをレンダリングするために、固定関数ハードウエアコンポーネントなどの１つ以上のユニットを含む。例えば、固定関数ユニット５４は、レンダリングのためグラフィックスデータ（トライアングル、ラインおよびポイント）を準備するために、グラフィックスデータの初期入力アッセンブリを実行するためのユニットを含む。他の例において、固定関数ユニット５４は、ラスター化を実行するためのユニットを含む。すなわち、固定関数ユニット５４は、ラスター化の間シェーディングのためのプリミティブを準備する。固定関数ユニット５４はまた、グラフィックデータをレンダリングすること及び／又は他のオペレーションを実行することに関連する種々の他のオペレーションを実行する。
【００５３】
コマンドプロセッサ５６は、１つ以上のマイクロプロセッサ、コントローラ、デジタルシグナルプロセッサ（ＤＳＰ），特定用途向け集積回路（ＡＳＩＣ）、フィールドプログラマブルゲートアレイ（ＦＰＧＡ）あるいは同等の離散あるいは一体化ロジック回路を含む。さらに、コマンドプロセッサ５６に属する機能は、一部の例において、ソフトウエア、ファームウエア、ハードウエア、あるいはそれらの組み合わせとして具体化される。ここに開示されたコマンドプロセッサ５６はシェーダプロセッサ５２から分離されたユニットとして示されたが、一部の例において、コマンドプロセッサ５６は、シェーダプロセッサ５２と一体化することができる。
【００５４】
図１に関連して上記したように、コマンドプロセッサ５６は、ホストプロセッサ２４あるいは他の処理ユニットによる干渉なしにＧＰＵ資源を局部的に制御することができる。例えば、この開示の側面によれば、ＧＰＵ４８のコマンドプロセッサ５６は、ホストプロセッサ２４から１つ以上の“タスク”を受け取る。コマンドプロセッサ５６は、例えば、シェーダプロセッサ５２および固定関数ユニット５４を含む、ＧＰＵ４８の資源によって実行されるべきタスクを独立にスケジューリングすることができる。すなわち、ＧＰＵ資源がどのように利用されるのかを記述するホストプロセッサ２４からコマンドストリームを受信するのではなく、コマンドプロセッサ５６は、ＧＰＵによって実行されるべきワークを概して規定する１つ以上の高レベルのタスクを受け取る。そのようなタスクは、オペレーションを実行するのにＧＰＵ４８のどの資源を使用するのかを記述することなしに、ＧＰＵ４８によって実行されるべきオペレーションを規定する。ＧＰＵ４８は、いつタスクを実行するのか及び／又はタスクを実行するのにどの資源を用いるのかを独立に決定する。
【００５５】
ＧＰＵメモリ５８は、図１に示されるメモリ３２と類似している。すなわち、一部の例において、ＧＰＵメモリ５８は一時的なコンピュータ読み取り可能な記憶媒体であることができる。ＧＰＵメモリ５８の例は、ランダムアクセスメモリ（ＲＡＭ）、ダイナミックランダムアクセスメモリ（ＤＲＡＭ）、スタティックランダムアクセスメモリ（ＳＲＡＭ）そして業界で知られたレジスタおよびメモリの他の形態を含む。ＧＰＵ４８がホストプロセッサ２４などの他のプロセッサの一部として形成される例においては、ＧＰＵメモリ５８は、ＧＰＵ４８以外のコンポーネントによってアクセスされる。概して、ＧＰＵメモリ５８はＧＰＵ４８によって実行されるオペレーションにおいて用いられるデータを記憶する。一部の例において、ＧＰＵメモリ５８は、計算装置２０のメモリ３２などの他のメモリユニットからデータを受信する。すなわち、計算装置２０は、メモリ３２からＧＰＵメモリ５８にデータを転送し、これによって当該データはＧＰＵ４８にとってアクセス可能となる。
【００５６】
図３に示される例において、シェーダプロセッサ５２は、シェーダプロセッサメモリ６０（“ＳＰメモリ”）を含む。メモリコピーエンジン６１に関連して以下に詳細に記述するように、データはＳＰメモリ６０とＧＰＵメモリ５８間で交換される。例えば、ＳＰメモリ６０は、ＧＰＵメモリ５８から、シェーダプロセッサ５２による実行のために未処理のデータを受信して記憶する。すなわち、ＳＰメモリ６０は、データが例えばシェーダプロセッサ５２のＡＬＵによって処理される前にデータを記憶する。さらに、ＳＰメモリは、処理されたデータをＧＰＵメモリ５８に転送する前に、処理されたデータを記憶する。ＳＰメモリ６０は、シェーダプロセッサ５２内のユニットによって比較的迅速にアクセスされることができる。しかしながら、ＳＰメモリ６０とＧＰＵメモリ５８間でのデータ転送は１つ以上のクロックサイクルを消費する。この間、シェーダプロセッサ５２は他のデータを処理しない。
【００５７】
この開示の側面によれば、ＧＰＵ４８はまた、ＧＰＵ４８の１つ以上のメモリユニットと通信するメモリコピーエンジン６２を含む。例えば図３に示すように、メモリコピーエンジン６２は、メモリ３２、ＧＰＵメモリ５８、及び／又はＳＰメモリ６０と通信する。一部の例において、メモリコピーエンジン６２は、メモリ３２（例えばシステムメモリ）とＳＰメモリ６０間のデータ転送を確立する。例えば、この開示の側面によれば、メモリコピーエンジン６２は、メモリ３２とＳＰメモリ６０（そして逆も同様）間でデータを転送するためのデータを特定する、コマンドプロセッサ５６からの命令を受信する。さらに、メモリコピーエンジン６２は、メモリ３２とＳＰメモリ６０（そして逆も同様）でデータをいつ転送するかを特定する、コマンドプロセッサ５６からの命令を受信する。コマンドプロセッサ５６からの命令を受信すると、メモリコピーエンジン６２は、メモリ３２及びＳＰメモリ６０間でのデータ転送を実行する。他の例においては、メモリコピーエンジン６２は、ＧＰＵメモリ５８とＳＰメモリ６０間などの、ＧＰＵ４８の他のメモリユニット間でのデータ転送を受け持つ。
【００５８】
一部の例において、この開示の側面によれば、ＧＰＵ４８のある種のユニット（例えばシェーダプロセッサ５２、ＳＰメモリ６０、メモリ３２及び／又はＧＰＵメモリ５８）は、メモリコピーエンジン６２のオペレーションに“気づかない”可能性がある。すなわち、メモリコピーエンジン６２は、データのコピー先とコピー元のユニットとは独立に動作することができる。図示の目的の例において、シェーダプロセッサ５２がメモリ３２からＳＰメモリ６０にデータをコピーする（及びデータ転送を行うために関連する資源及びクロックサイクルを使用する）のではなく、そのようなデータ転送はメモリコピーエンジン６２によって処理される。すなわち、メモリコピーエンジン６２は、シェーダプロセッサ５２による使用のために、データをメモリ３２からＳＰメモリ６０にデータをコピーする。したがって、シェーダプロセッサ５２は、データがＳＰメモリ６０とメモリ３２間で転送されるべきデータを待つことなしに、ＳＰメモリ６０内に記憶されたデータを利用することができる。このようにして、メモリコピーエンジン６２は、シェーダプロセッサ５２に必要なデータを供給し、シェーダプロセッサ５２は、データ転送のためのクロックサイクルを利用することなしに、当該データに関してオペレーションを実行することを継続できる。例えばコマンドプロセッサ５６は、メモリコピーエンジン６２を、コマンドプロセッサ５６によってスケジューリングされるタスクと同期させ、これによって、ＳＰメモリ６０には特定のタスクを実行するときに適切なデータが供給される。上記したように、メモリコピーエンジン６２は、ＧＰＵメモリ５８とＳＰメモリ６０間で処理されたデータを転送する役目をもつ。追加的あるいは代替的に、メモリコピーエンジン６２は、固定関数ユニット５４及び／又はＧＰＵ４８の他のコンポーネントに対してデータの転送を行う。
【００５９】
オペレーション時、本開示の側面によれば、ホストプロセッサ２４は、ＧＰＵ４８によって実行委されるべき１つまたはそれ以上のタスクを含むコマンドストリームを生成する。このタスクは、グラフィクスレンダリングの実行及び／又は他の汎用オペレーションなどの、ＧＰＵ４８によって行われるべき種々のワークを記述する。ＧＰＵ４８のコマンドプロセッサ５６は、当該コマンドストリームを受信して当該コマンドストリーム内に含まれるタスクの各々の実行を促進する。
【００６０】
この開示の側面によれば、コマンドプロセッサ５６はまず、受信したコマンドストリームを解析し、ＧＰＵ４８によって実行されるべき各タスクを特定する。コマンドストリームからのタスクを解析することに加えて、コマンドプロセッサ５６は、ＧＰＵ４８のコンポーネントによって実行されるべきタスクの各々を分類（organize）するためのコマンドキューを維持する。例えば、コマンドプロセッサ５６は、コマンドキューを使用して、（シェーダプロセッサ５２及び／又は固定関数ユニット５４などの）ＧＰＵ４８のコンポーネントによって実行されるべきタスクをスケジューリングする。一部の例において、コマンドキューは固定関数ハードウエアユニット（例えばファーストインファーストアウト（ＦＩＦＯ）レジスタなど）であることができる。他の例において、コマンドキューは汎用メモリあるいはレジスタユニットであることができる。
【００６１】
コマンドプロセッサ５６はまた、ＧＰＵ４８に関連する他の機能を制御するためのコマンドキューを維持する。例えば、コマンドプロセッサ５６は、ホストプロセッサ（例えば中央処理装置（ＣＰＵ））とのデータ交換を編成するためのコマンドキューを維持する。他の例において、コマンドプロセッサ５６は、デジタルシグナルプロセッサ（ＤＳＰ）あるいはマルチメディアユニットなどの他の計算コンポーネントとデータ交換を編成するためのコマンドキューを維持する。
【００６２】
一部の例において、コマンドプロセッサ５６は、ＧＰＵ資源４８の利用可能性に基づいてタスクをスケジューリングすることができる。例えば、コマンドプロセッサ５６は、利用可能な入力／出力インタフェースに基づいてタスクをスケジューリングする。他の例において、コマンドプロセッサ５６は、実行されているデータの処理に対する準備ができているか否かに基づいてタスクをスケジューリングする。他の例において、コマンドプロセッサ５６は、タスクの結果を記憶するために、メモリ（例えばＧＰＵメモリ５８）内にスペースが存在するかどうかに基づいて、タスクをスケジューリングする。
【００６３】
この開示の側面によれば、コマンドプロセッサ５６は、コマンドキュー内におけるタスクに優先度を付ける。一部の例において、タスクを生成する役目を負っているコンポーネント（例えばホストプロセッサ２４）は、タスクの優先度を示す役目を負っている。他の例において、コマンドプロセッサ５６は、コマンドキュー内に含まれるタスクに基づいて優先度を決定する。例えばコマンドプロセッサ５６は、コマンドキューにおいて、他のタスクよりも時間集約度のより大きいタスクを特定し、コマンドキュー内の高い優先度のタスクに優先権を与え、これによって当該タスクは他のタスクに先立ってスケジューリングされて実行される。
【００６４】
一部の例において、コマンドプロセッサ５６は、ＧＰＵ４８のコンポーネントによって実行されるアクティブタスクのリストを維持するとともに、当該タスクを実行する役目を請け負うコンポーネントを追跡する。アクティブタスクリストは例えば、タスクの状態を追跡するために使用される。タスクの状態を追跡することによって、コマンドプロセッサ５６はタスクをスケジューリングするためにＧＰＵ４８のどの資源が利用可能であるかを決定することができる。すなわち、あるタスクがＧＰＵ資源によって現在実行されている（例えばタスクが“アクティブ”）のであれば、その資源はアクティブタスクが完了するまで利用可能とならない。一部の例において、コマンドプロセッサ５６は、（例えばポーリングによってあるいはコンポーネントはビジーであることを決定することによって）ＧＰＵ４８のどのコンポーネントがアクティブにタスクを実行しているかを特定する役目を負っている。他の例において、コマンドプロセッサ５６は、特定のタスクが当該タスクを実行する役目を負っているコンポーネントによって、あるいは、ＧＰＵメモリ５８に書き込まれているデータを監視することによって、完了されたという指示を受け取ることができる。
【００６５】
一例において、コマンドプロセッサ５２はシェーダプロセッサ５２によってタスクの実行を開始する。コマンドプロセッサ５６はつぎに、シェーダプロセッサ５２によって現在実行されているアクティブタスクのリストに当該タスクを加える。タスクリストを使用することによって、コマンドプロセッサ５６は、現在タスクを実行している資源を追跡するとともに、現在タスクを実行していない利用可能な資源を特定する。
【００６６】
コマンドプロセッサ５６は、優先度情報及び／又はアクティブタスクのリストを使用して、もしも高い優先度のタスクがコマンドキューに追加され、当該高い優先度のタスクについて実行の準備ができている（例えば当該タスクに関連するデータについて実行の準備ができている）のであれば、ＧＰＵ４８のコンポーネントによって実行されているタスクにとって代わる。すなわち、コマンドプロセッサ５６は、もしも高い優先度のタスクについて実行の準備ができているのであれば、高い優先度のタスクを実行するために、低い優先度のタスクの実行を停止することができる。コマンドプロセッサ５６は、高い優先度のタスクの実行を完了した後で当該低い優先度のタスクを再開する。
【００６７】
このようにして、コマンドプロセッサ５６は、ホストプロセッサによる介在なしに、シェーダプロセッサ５２及び／又は固定関数ユニット５４などの、ＧＰＵ４８の異なる資源に対してタスクを独立に分配することができる。図示の目的の例において、ＧＰＵ４８を含む計算装置２０はデジタルカメラ（例えばデジタルカメラを含むモバイル装置）であることができる。この例において、デジタルカメラのＧＰＵ４８は、ビューファインダ内での表示のために画像をレンダリングする。デジタルカメラのユーザは、表示された画像に関して実行すべき画像処理機能（画像の鋭利化、ノイズの低減など）を選択する。ＧＰＵ４８は、画像のレンダリングから（汎用の）画像処理機能の実行に切り替えることができる。この例において、ＧＰＵ４８の機能間の切り替えはコマンドプロセッサ５６によって独立に達成される。
【００６８】
ホストプロセッサ２４による介在なしにＧＰＵ資源を局所的に制御するというＧＰＵ４８の能力は、柔軟性を増大し、ＧＰＵ資源の効率の良い管理を促進する。例えば、この開示の側面によれば、コマンドプロセッサ５６は、ＧＰＵ４８の資源がアイドル状態になっている時間の量を低減することができる。上記した例において、コマンドプロセッサ５６は、グラフィックスレンダリングタスクをＧＰＵ４８の固定関数ユニット５４にスケジューリングするとともに、計算に関するタスクをＧＰＵ４８のシェーダプロセッサ５２にスケジューリングすることができる。すなわち、例えば、上記したデジタルカメラの例に関連して、コマンドプロセッサ５６は、グラフィックスレンダリングタスク（例えばビューファインダ内での表示のために画像をレンダリングすること）をスケジューリングするとともに、計算に関するタスク（例えば画像処理）をスケジューリングすることができる。それゆえに、コマンドプロセッサ５６は、ＧＰＵ資源がアイドル状態となる時間の量を可能な限り低減することができる。
【００６９】
この開示の側面によれば、ホストプロセッサ２４からの“タスク”は、ＡＰＩを使用してユーザ（例えばアプリケーションの開発者）によって決められる。例えば、上記したように、DirectXおよびOpenGLなどのＡＰＩは、ユーザがグラフィックスをレンダリングしたりＧＰＵ４８による他のオペレーションを実行するためのアプリケーションを開発することを可能にする。しかしながら、従来のＡＰＩは、固定された（例えばパイプラインされた）データフローに制限されるが、これは、１つのタイプのグラフィックスレンダリングに対しては適しているが、他のタスク（例えばレイトレーシングあるいはレイキャスティング）を効率よく提供することができない。すなわち、従来のＡＰＩを用いて開発されたアプリケーションでは、各ステージが特定のオペレーションを実行する必要があるか否かにかかわらず、データを、（図２の例において示されたグラフィックスレンダリングパイプライン８０などの）レンダリングパイプラインの各ステージを介して通過させる。
【００７０】
この開示の側面は、ユーザは、比較的高いレベルの計算タスクをもつアプリケーションを生成するために適用するＡＰＩに関する。例えば、ＡＰＩは、ユーザが、ＧＰＵによって実行されるべきワークを概して記述するタスクを決めることを可能にする。すなわち、タスクは、オペレーションを実行するためにＧＰＵ４８のどの資源を使用すべきかを指示することなしに、ＧＰＵ４８によって実行されるべきオペレーションを規定する。一部の例において、種々のタスクがＡＰＩに含まれ、アプリケーション開発者に露出される。アプリケーション開発者は、ＡＰＩを使用して、実行されるときに、（例えば従来のＡＰＩのグラフィックスパイプラインに対して）カスタムパイプラインを利用するアプリケーションを生成する。一例において、アプリケーション開発者は、レイトレーシングあるいはレイキャスティングなどの特定のレンダリングオペレーションを実行するのに最適なカスタムグラフィックスパイプラインを使用する。
【００７１】
しかしながら、この開示の技術を実行するのにＡＰＩは必要ではない。例えば、一部の側面によれば、コンパイラ（例えばＣ／Ｃ＋＋コンパイラなどのコンパイラプログラム）は、ＧＰＵ４８のコンポーネントによって実行されるようにプログラムコードの部分をマッピングすることができる。すなわち、コンパイラは、プログラムコードの所定部分を実行するためにＧＰＵ４８の適切なコンポーネントを識別するとともに、コードの所定部分を含むタスクを特定する。コマンドプロセッサ５６はつぎに、コードのマッピングされた部分を受信して、それにしたがってタスクをスケジューリングする。
【００７２】
図４は、この開示の側面にしたがって、コマンドプロセッサによって実行されるべき例示的方法１００を示すフローチャートである。すなわち、例えば、図４に示される方法は、図１及び図３に示されるコマンドプロセッサ５６によって実行される。しかしながら、図４の例に示される方法は、コマンドプロセッサ５６に関連して記述されているが、他の計算装置の他のグラフィックス処理ユニットは、コマンドプロセッサ５６に属する機能の一部あるいはすべてを実行することができる。
【００７３】
図４の例示的方法１００において、コマンドプロセッサ５６はまず、例えばホストプロセッサ２３などのホストプロセッサから１つ以上のタスクを受け取る（１０２）。例えばコマンドプロセッサ５６は、ＧＰＵ４８のコンポーネントによって実行されるべきワークを規定する１つ以上のタスクを含むコマンドプロセッサを受信する。コマンドプロセッサ５６は、コマンドストリーム内に含まれる各タスクを特定するためにコマンドストリームを解析する（１０４）。
【００７４】
コマンドプロセッサ５６はまた、タスク優先度を決定する（１０６）。例えば、この開示の一部の側面によれば、コマンドプロセッサ５６は、受け取ったタスクの各々をＧＰＵ４８のコンポーネントによっていつ実行すべきかを決定することができる１つ以上のコマンドキューを維持する。コマンドプロセッサ５６は、タスク優先度にしたがって１つ以上のコマンドキューを分類し、これによってより重要な及び／又は時間のかかるタスクが他のタスクに先立って実行される。一部の例において、タスクを生成する役目を負っているコンポーネント（例えばホストプロセッサ２４）は、タスクについて優先度を示す役目を負っている。他の例において、コマンドプロセッサ５６は、コマンドキューに含まれるタスクに基づいて、優先度を決定することができる。
【００７５】
コマンドプロセッサ５６はまた、資源の利用可能性を決定する（１０８）。例えば、コマンドプロセッサ５６は、タスクを実行する役目を負っているコンポーネントが利用可能（例えば他のタスクを実行していない）かどうかを決定する。さらに、コマンドプロセッサ５６は、タスクに関連するデータが利用可能かを決定する。
【００７６】
タスク優先度に基づいて１つ以上のコマンドキューを分類することに加えてあるいは分類することの代わりに、コマンドプロセッサ５６は、資源の利用可能性に基づいて１つ以上のコマンドキューを分類することができる。すなわち、例えば、コマンドプロセッサ５６は、タスクを実行するためにコンポーネントが利用可能であるときでないと、ＧＰＵ４８のコンポーネントによって実行されるべきタスクをスケジューリングしない。さらに、コマンドプロセッサ５６は、タスクに関連するデータが利用可能であるとき以外には、ＧＰＵ４８のコンポーネントによって実行されるべきタスクをスケジューリングしない。すなわち、コマンドプロセッサ５６は、実行のためにタスクをスケジューリングするに先立って、特定のタスクに関連するデータがメモリコピーエンジン６２によってＳＰメモリ６０に移動されるまで待機することができる。さらにコマンドプロセッサ５６は、タスクをスケジューリングすることに先立って、特定のタスクに関連するデータが他のコンポーネントによって変更されないことを確実にする。
【００７７】
コマンドプロセッサ５６はつぎに、ＧＰＵ４８のコンポーネントの１つ以上によって実行するためのタスクをスケジューリングする（１１０）。一部の例において、この開示の側面によれば、コマンドプロセッサ５６は、ＧＰＵ４８のコンポーネントが異なるタスクを並列に実行するように、タスクを独立に監督する。例えば、コマンドプロセッサ５６は、シェーダプロセッサ５２によって実行されるべきタスクを、固定関数ユニット５４によって実行されるべきタスクと並列にスケジューリングする。
【００７８】
タスクをスケジューリングするとき、コマンドプロセッサ５６は、アクティブタスクのリストすなわちアクティブタスクリストを更新する（１１２）。例えば、コマンドプロセッサ５６は、ＧＰＵ４８のコンポーネントによって実行されるべきアクティブタスクのリストを維持するとともに、タスクを実行する役目を負っているコンポーネントを追跡する。アクティブタスクリストは、例えばタスクの状態を追跡するために使用される。タスクの状態を追跡することによって、コマンドプロセッサ５６は、タスクをスケジューリングするためにＧＰＵ４８のどの資源が利用可能であるか、ＧＰＵ４８のどの資源がタスクを実行するのにビジーであるかを決定する。すなわち、もしタスクが現在ＧＰＵ４８によって実行されている（例えばタスクは“アクティブ”）のであれば、当該アクティブタスクが完了するまでその資源は利用可能とならない。一例において、シェーダプロセッサ５２によるタスクの実行を開始した後で、コマンドプロセッサ５６は、シェーダプロセッサ５２によって現在実行されているアクティブタスクのリストに当該タスクを加える。一部の例において、コマンドプロセッサ５６は、（例えばポーリングによってあるいはコンポーネントはビジー状態であると決定することによって）ＧＰＵ４８のどのコンポーネントがアクティブにタスクを実行しているかを特定する役目を負っている。他の例において、コマンドプロセッサ５６は、特定のタスクが、タスクを実行する役目を負っているコンポーネントによってあるいはＧＰＵメモリに書き込まれているデータを監視することによって完了された、という指示を受け取ることができる。
【００７９】
図４に関連して示されかつ記述されたステップは単に一例として提供されたことを理解されたし。すなわち、図４の方法のステップは、図４に示される順番によって実行される必要はなく、より少ないステップ、追加のあるいは代替的なステップが実行される。例えば、図４は、資源の利用可能性の決定に先立って決定されたタスク優先度を示している。他の例において、資源の利用可能性を決定することは、タスク優先度の決定に先立って実行される。
【００８０】
図５は、この開示の側面にしたがって、コマンドプロセッサ５６などのコマンドプロセッサによって実行される例示的方法１２０を示すフローチャートである。すなわち、例えば、図５に示される方法は、図１及び３に示されるコマンドプロセッサ５６によって実行される。しかしながら、図５の例に示される方法はコマンドプロセッサ５６に関連して記述されているが、他の計算装置の他のグラフィックス処理ユニットは、コマンドプロセッサ５６に属する機能の一部あるいはすべてを実行することができる。
【００８１】
一部の例において、方法１２０は、図４の例に示される方法１００の代わりにあるいは方法１００と一体で実行されることができる。例えば、図５の例に示される方法は、実行のためのタスクをスケジューリングするときに実行される（例えば図４に示されるステップ１１０）。
【００８２】
コマンドプロセッサ５６はまず現在のタスクを実行するのに要する１つ以上の資源（例えばデータ、入力／出力インタフェース、メモリ、及び／又は処理ユニット）が利用可能かどうかを決定する（１２２）。もし資源が利用可能であるならば（ステップ１２２の分岐がイエス）、コマンドプロセッサ５６は、必要に応じて、データコピーエンジン６２に、適切なデータをＧＰＵメモリ５８からＳＰメモリ６０にコピーするように指示する（１２４）。加えて、コマンドプロセッサ５６は、ＧＰＵ４８の適当なコンポーネントによって実行されるべきタスクをスケジューリングする。
【００８３】
もし現在のタスクを実行するための資源が利用可能でないならば（ステップ１２２の分岐がノー）、コマンドプロセッサ５６は、現在のタスクが、当該タスクを実行するのに要する資源に対して最も高い優先度のタスクかどうかを決定する（１２８）。現在のタスクが最も高い優先度のタスクであるならば（ステップ１２８の分岐がイエス）、コマンドプロセッサ５６は、資源によって現在実行されているタスクにとって代わる（１３０）。すなわち、コマンドプロセッサ５６は、現在のタスクが実行されるように、タスクを実行するのに要する資源のオペレーションを中断する（例えば、タスクを実行するのに必要でないＧＰＵ資源は他のタスクの実行を継続することができる）。現在実行中のタスクに取って代わったあと、コマンドプロセッサ５６は、上記したような現在のタスクを実行するためにステップ１２４および１２６を実行する。一部の例において、取って代わられたタスクの状態は、現在のタスクが実行されたあとに当該タスクの再開を可能にするために記憶される（例えばＧＰＵメモリ５８に記憶される）。
【００８４】
もし現在のタスクが、当該タスクを実行するのに要する資源に対して最も高い優先度のタスクではないのであれば（ステップ１２８の分岐がノー）、コマンドプロセッサ５６は、資源によって現在実行中のタスクが実行を終了するのを待つ（１３２）。資源がタスクを完了したとき（ステップ１３４の分岐がイエス）、コマンドプロセッサは例えば、上記したステップ１２４および１２６を実行することによって現在のタスクを実行する。
【００８５】
図５に関連して示されかつ記述されたステップは単に例として提供されたものである。すなわち、図５の方法のステップは、図５に示される順番によって実行される必要はなく、より少ないステップ、追加のあるいは代替的なステップが実行される。
【００８６】
さらに、ここに記述された方法のいくつかの動作あるいはイベントは、例に応じて、異なる順番で実行可能であり、追加され、合体され、あるいはすべて除去される（例えば、当該方法の実施のためにここに記述された全部の動作あるいはイベントが必要なわけではない）。さらに、ある例において、順次ではなく、動作あるいはイベントは例えばマルチスレッド処理、インタラプト処理あるいは複数のプロセッサによって同時に実行されることができる。
【００８７】
さらに、１つ以上の例において、ここに記述された機能はハードウエア、ソフトウエア、ファームウエア、あるいはそれらの組み合わせにおいて実装することができる。ソフトウエアにおいて実装される場合、機能は１つ以上の命令あるいはコードとしてコンピュータ読み取り可能な媒体に関して記憶あるいは送信されることができ、ハードウエア主体の処理ユニットによって実行される。コンピュータ読み取り可能な媒体は、データ記憶媒体などの触知できる媒体あるいは、例えば通信プロトコルにしたがって、コンピュータプログラムを１つの場所から他の場所に転送可能な任意の媒体を含む通信媒体、に対応するコンピュータ読み取り可能な記憶媒体を含むことができる。
【００８８】
ここにおいて、コンピュータ読み取り可能な媒体は概して、（１）非一時的な触知可能なコンピュータ読み取り可能な記憶媒体かあるいは、（２）信号あるいは搬送波などの通信媒体に対応する。この開示で記述された技術の実装のために、データ記憶媒体は、命令、コード及び／又はデータ構造を取り出すべく１つ以上のコンピュータあるいは１つ以上のプロセッサによってアクセス可能な任意の利用可能な媒体であることができる。コンピュータプログラムプロダクトはコンピュータ読み取り可能な媒体を含むことができる。
【００８９】
例において、限定されるわけではないが、そのようなコンピュータ読み取り可能な記憶媒体は、ＲＡＭ、ＲＯＭ、ＥＥＰＲＯＭ，ＣＤ−ＲＯＭ、あるいは他の光学ディスク記憶媒体、磁気ディスク記憶媒体、あるいは他の磁気記憶装置、フラッシュメモリ、あるいは所望のプログラムコードを命令あるいはデータ構造の形態で記憶するのに使用可能であり、コンピュータによってアクセス可能な任意の他の媒体、を備えることができる。さらに、任意の接続媒体（connection）をコンピュータ読み取り可能な媒体と呼ぶこともできる。例えば、もし命令が、同軸ケーブル、ファイバー光学ケーブル、ツイストペアケーブル、ＤＳＬ、あるいは赤外波、電波、マイクロ波などのワイヤレス技術、を用いて、ウエブサイト、サーバあるいは他の遠隔ソースから送信されたならば、そのような同軸ケーブル、ファイバー光学ケーブル、ツイストペアケーブル、ＤＳＬ、あるいは赤外波、電波、マイクロ波などのワイヤレス技術は、媒体の定義に含まれるものである。
【００９０】
しかしながら、コンピュータ読み取り可能な記憶媒体およびデータ記憶媒体は、接続媒体、搬送波、信号、あるいは他の一時的な媒体を含まず、その代わりに、非一時的な触知可能な記憶媒体に向けられている。ここで用いられる磁気ディスク（概してデータを磁気的に再生する）、光学ディスク（データをレーザによって光学的に再生する）は、コンパクトディスク（ＣＤ）、レーザディスク、光学ディスク、デジタルバーサタイルディスク（ＤＶＤ）、フロッピーディスク、ブルーレイディスクを含む。上記の組み合わせは、コンピュータ読み取り可能な媒体の範囲に含まれる。
【００９１】
命令は、１つ以上のデジタルシグナルプロセッサ（ＤＳＰ）、汎用マイクロプロセッサ、特定用途向け集積回路（ＡＳＩＣ）、フィールドプログラマブルロジックアレイ（ＦＰＧＡ）あるいは他の同等の一体化あるいは離散的ロジック回路などの１つ以上のプロセッサによって実行される。ここにおいて用いられる術語“プロセッサ”は上記した構造の任意のものあるいは、ここに記述された技術の実装に適した任意の他の構造、を意味するものとする。さらに、一部の例において、ここに記述された機能は、専用のハードウエア及び／又は符号化および復号用として構成され、あるいは組み合わされたコーデックの中に組み込まれた、ソフトウエアモジュールにおいて提供される。さらに、当該技術は、１つ以上の回路あるいはロジック要素の中に完全に実装される。
【００９２】
この開示の技術は、ワイヤレスハンドセット、集積回路（ＩＣ）、あるいはＩＣの組（例えばチップセット）を含む、広範囲のデバイスあるいは装置において実装される。種々のコンポーネント、モジュールあるいはユニットは、開示された技術を実行するように構成された装置の機能的な側面を強調するためにこの開示において記述されたが、かならずしも異なるハードウエアユニットによる実現を必要とするものではない。どちらかというと、上記したように、種々のユニットは、コーデックハードウエアユニットにおいて組み合わされるかあるいは適当なソフトウエア及び／又はファームウエアに関連して、上記した１つ以上のプロセッサを含む、協働するハードウエアユニットの収集物によって提供される。
【００９３】
種々の例が記述された。これらの及び他の例は次の特許請求の範囲の権利範囲内に含まれる。
以下に本願出願当初の特許請求の範囲を付記する。
[Ｃ１]  グラフィックス処理ユニットであって、
複数の命令を並列に実行するように構成されたシェーダプロセッサと、
グラフィックスデータをレンダリングするように構成された1つ以上の固定関数ハードウエアユニットと、
ホストプロセッサから1つ以上のタスクを受け取って、前記シェーダプロセッサと前記1つ以上の固定関数ハードウエアユニットによって選択的に実行されるべき前記1つ以上のタスクを独立にスケジューリングするように構成されたコマンドプロセッサと、を備えるグラフィックス処理ユニット。
[Ｃ２]  前記コマンドプロセッサは、受け取った前記1つ以上のタスクのコマンドキューを維持するように構成され、前記コマンドキューは、前記グラフィックス処理ユニットによって実行されるべきタスクのリストを備えるＣ1に記載のグラフィックス処理ユニット。
[Ｃ３]  前記コマンドプロセッサは、前記1つ以上のタスクの各優先度を決定して、前記1つ以上のタスクの前記各優先度に基づいて、前記1つ以上のタスクをスケジューリングするように構成されるＣ1記載のグラフィックス処理ユニット。
[Ｃ４]  前記コマンドプロセッサは、ホストプロセッサから前記1つ以上のタスクの各優先度の指示を受け取るように構成されるＣ1記載のグラフィックス処理ユニット。
[Ｃ５]  前記コマンドプロセッサは、アクティブタスクのリストを維持するように構成され、アクティブタスクは、前記シェーダプロセッサの少なくとも１つおよび前記1つ以上の固定関数ハードウエアユニットによって現在実行されているタスクであるＣ1記載のグラフィックス処理ユニット。
[Ｃ６]  前記コマンドプロセッサは、前記1つ以上のタスクの第１のタスクの実行を停止して、前記1つ以上のタスクの第２のタスクの実行を開始するように構成されるＣ１に記載のグラフィックス処理ユニット。
[Ｃ７]  前記グラフィックス処理ユニットのメモリから前記シェーダプロセッサのメモリにデータをコピーするように構成されるメモリコピーエンジンをさらに備えるＣ1記載のグラフィックス処理ユニット。
[Ｃ８]  前記コマンドプロセッサは、前記メモリコピーエンジンのオペレーションを制御するＣ7記載のグラフィックス処理ユニット。
[Ｃ９]  グラフィックス処理ユニットを制御するための方法であって、
ホストプロセッサから1つ以上のタスクを受け取ることと、
シェーダプロセッサおよび1つ以上の固定関数ハードウエアユニットによって選択的に実行されるべきタスクを、前記ホストプロセッサから独立してスケジューリングすることであって、前記シェーダプロセッサは、複数の命令を並列に実行するように構成され、前記1つ以上の固定関数ハードウエアユニットはグラフィックスデータをレンダリングするように構成されることと、を備える方法。
[Ｃ１０]  受け取った前記1つ以上のタスクのコマンドキューを維持することをさらに備え、前記コマンドキューは、前記グラフィックス処理ユニットによって実行されるべきタスクのリストを備えるＣ９に記載の方法。
[Ｃ１１]  前記1つ以上のタスクの各優先度を決定して、前記1つ以上のタスクの前記各優先度に基づいて、前記1つ以上のタスクをスケジューリングすることをさらに備えるＣ9記載のグラフィックス処理ユニット。
[Ｃ１２]  アクティブタスクのリストを維持することをさらに備え、アクティブタスクは、前記シェーダプロセッサの少なくとも１つおよび前記1つ以上の固定関数ハードウエアユニットによって現在実行されているタスクであるＣ９記載の方法。
[Ｃ１３]  前記1つ以上のタスクの第１のタスクの実行を中断して、前記1つ以上のタスクの第２のタスクの実行を開始することをさらに備えるＣ9記載の方法。
[Ｃ１４]  前記１つ以上のタスクの実行に先立って、前記グラフィックス処理ユニットのメモリから前記シェーダプロセッサのメモリにデータをコピーすることをさらに備えるＣ９に記載の方法。
[Ｃ１５]  グラフィックス処理ユニットを制御するための装置であって、
ホストプロセッサから１つ以上のタスクを受け取るための手段と、
シェーダプロセッサ及び１つ以上の固定関数ハードウエアユニットによって選択的に実行されるべき前記１つ以上のタスクを、前記ホストプロセッサから独立してスケジューリングするための手段であって、前記シェーダプロセッサは、複数の命令を並列に実行するように構成され、前記１つ以上の固定関数ハードウエアユニットはグラフィックスデータをレンダリングするように構成される手段と、を具備する装置。
[Ｃ１６]  受け取った前記１つ以上のコマンドキューを維持するための手段をさらに備え、前記コマンドキューは前記グラフィックス処理ユニットによって実行されるべきタスクのリストを備えるＣ１５記載の装置。
[Ｃ１７]  前記1つ以上のタスクの各優先度を決定して、前記1つ以上のタスクの前記各優先度に基づいて、前記1つ以上のタスクをスケジューリングするための手段をさらに備えるＣ1５記載の装置。
[Ｃ１８]  アクティブタスクのリストを維持するための手段をさらに備え、アクティブタスクは、前記シェーダプロセッサの少なくとも１つおよび前記1つ以上の固定関数ハードウエアユニットによって現在実行されているタスクであるＣ1５記載の装置。
[Ｃ１９]  前記１つ以上のタスクの第１のタスクの実行を中断して、前記1つ以上のタスクの第２のタスクの実行を開始することをさらに備えるＣ１５記載の装置。
[Ｃ２０]  前記１つ以上のタスクの実行に先立って、前記グラフィックス処理ユニットのメモリから前記シェーダプロセッサのメモリにデータをコピーすることをさらに備えるＣ１５に記載の装置。
[Ｃ２１]  命令が記憶されたコンピュータ読み取り可能な媒体を備えるコンピュータプログラムプロダクトであって、前記命令は、実行されたときに、１つ以上のプロセッサに、
ホストプロセッサからの１つ以上のタスクを受け取らせ、
シェーダプロセッサ及び１つ以上の固定関数ハードウエアユニットによって選択的に実行されるべき前記１つ以上のタスクを、前記ホストプロセッサから独立してスケジューリングさせ、ここにおいて、前記シェーダプロセッサは、複数の命令を並列に実行するように構成され、前記１つ以上の固定関数ハードウエアユニットはグラフィックスデータをレンダリングするように構成される、コンピュータプログラムプロダクト。
[Ｃ２２]  実行されたときに、前記１つ以上のプロセッサに、受け取った前記１つ以上のタスクのコマンドキューを維持させる命令をさらに備え、前記コマンドキューは前記グラフィックス処理ユニットによって実行されるべきタスクのリストを備えるＣ２１に記載のコンピュータプログラムプロダクト。
[Ｃ２３]  実行されたときに、前記１つ以上のプロセッサに、前記１つ以上のタスクの各優先度を決定させ、前記１つ以上のタスクの前記各優先度に基づいて、前記１つ以上のタスクをスケジューリングさせる命令をさらに備えるＣ２１に記載のコンピュータプログラムプロダクト。
[Ｃ２４]  実行されたときに、前記１つ以上のプロセッサに、アクティブタスクのリストを維持させる命令をさらに備え、ここにおいて、アクティブタスクは前記シェーダプロセッサの少なくとも１つおよび前記１つ以上の固定関数ハードウエアユニットによって現在実行されているタスクであるＣ２１に記載のコンピュータプログラムプロダクト。
[Ｃ２５]  実行されたときに、前記１つ以上のプロセッサに、前記1つ以上のタスクの第１のタスクの実行を中断して、前記1つ以上のタスクの第２のタスクの実行を開始させる命令をさらに備えるＣ９記載のコンピュータプログラムプロダクト。
[Ｃ２６]  実行されたときに、前記１つ以上のプロセッサに、前記１つ以上のタスクの実行に先立って、前記グラフィックス処理ユニットのメモリから前記シェーダプロセッサのメモリにデータをコピーさせる命令をさらに備えるＣ２１に記載のコンピュータプログラムプロダクト。
【図１】
0005735187.tif 000002
【図２】
0005735187.tif 000003
【図３】
0005735187.tif 000004
【図４】
0005735187.tif 000005
【図５】
0005735187.tif 000006