(57)【要約】【課題】  テセレーションシェーダープログラムを実行するための改良されたシステム及び方法を提供する。【解決手段】  グラフィックプロセッサを通して単一パスでテセレーションを実行するシステム及び方法は、グラフィックプロセッサ内の処理リソースを、異なるテセレーションオペレーションを実行するためのセットへと分割する。頂点データ及びテセレーションパラメータは、メモリに記憶されるのではなく、１つの処理リソースから別の処理リソースへ直接ルーティングされる。それ故、表面パッチ記述がグラフィックプロセッサに与えられ、そしてメモリに中間データを記憶せずに、グラフィックプロセッサを通して単一の非中断パスでテセレーションが完了される。【選択図】図５Ａ
2010086528.tif 000002
【特許請求の範囲】
【請求項１】
グラフィックプロセッサを通して単一パスでテセレーションを実行する方法であって、
前記グラフィックプロセッサの処理ユニットの第１セットを構成して、テセレーションコントロールシェーダーを実行して表面パッチを処理すると共に複数の頂点を含むグラフィックプリミティブを生成するステップと、
前記グラフィックプロセッサ内の処理ユニットの第２セットを構成して、テセレーション評価シェーダーを実行して前記複数の頂点の１つを各々処理するステップと、
前記テセレーションコントロールシェーダー及び前記テセレーション評価シェーダーを実行して、前記処理ユニットの第１セット及び前記処理ユニットの第２セットを通る単一パスで前記表面パッチをテセレートし、処理された頂点を生成するステップと、
を備える方法。
【請求項２】
前記処理ユニットの第１セットにより出力される複数の頂点を前記処理ユニットの第２セットの入力へ分配するステップを更に備えた、請求項１に記載の方法。
【請求項３】
前記分配するステップは、前記複数の頂点の各々を記憶する位置に対応するインデックスを前記処理ユニットの第１セットから前記処理ユニットの第２セットの入力へルーティングする段階を含む、請求項２に記載の方法。
【請求項４】
前記テセレーションコントロールシェーダーは、前記表面パッチの各１つに対して一度実行されて、１つの表面パッチに対する詳細レベルパラメータを計算する、請求項１に記載の方法。
【請求項５】
前記テセレーション評価シェーダーは、前記複数の頂点の各１つに対して一度実行されて、１つの頂点の最終位置及び属性を計算する、請求項１に記載の方法。
【請求項６】
前記処理ユニットの各１つは、他の処理ユニットとは独立して、前記テセレーションコントロールシェーダー又は前記テセレーション評価シェーダーを実行する、請求項１に記載の方法。
【請求項７】
単一パスでテセレーションを実行するシステムであって、
グラフィックプロセッサを備え、該グラフィックプロセッサは、
テセレーションコントロールシェーダーを実行して表面パッチを処理すると共に複数の頂点を含むグラフィックプリミティブを生成するように構成された処理ユニットの第１セットと、
テセレーション評価シェーダーを実行して前記複数の頂点の１つを各々処理するように構成された処理ユニットの第２セットと、
前記処理ユニットの第１セット及び前記処理ユニットの第２セットに結合され、前記処理ユニットの第１セットにより出力される複数の頂点を前記処理ユニットの第２セットの入力に与えるように構成されたクロスバー相互接続部と、
を含むシステム。
【請求項８】
前記テセレーションコントロールシェーダーは、前記表面パッチの各１つに対して一度実行されて、１つの表面パッチに対する詳細レベルパラメータを計算する、請求項７に記載のシステム。
【請求項９】
前記テセレーション評価シェーダーは、前記複数の頂点の各１つに対して一度実行されて、１つの頂点の最終位置及び属性を計算する、請求項７に記載のシステム。
【請求項１０】
前記処理ユニットは、前記テセレーションコントロールシェーダー又は前記テセレーション評価シェーダーを実行して前記表面パッチを単一パスでテセレートするように構成された、請求項７に記載のシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
[0001]本発明は、一般に、三次元表面パッチのテセレーションに関し、より詳細には、グラフィック処理パイプラインを通して単一パスでテセレーションを行うことに関する。
【背景技術】
【０００２】
[0002]テセレーションハードウェアのためのプログラミングモデルは、三次元表面パッチのテセレーションを実行するべく実行される新規なシェーダープログラムを明らかにするように進化した。従来のハードウェアアーキテクチャーは、２パス解決策を使用してテセレーションを実行する。グラフィック処理パイプラインを通る第１パス中に、頂点シェーダー及びテセレーションコントロールシェーダー（又はコントロールハルシェーダー）プログラムが実行され、又、頂点データ及びテセレーションパラメータがメモリに記憶される。第１パスが完了した後、グラフィック処理パイプラインが再構成される。グラフィック処理パイプラインを通る第２パス中に、頂点データ及びテセレーションパラメータがメモリから読み取られ、テセレーション評価シェーダー（又はドメインシェーダー）及び幾何学的シェーダープログラムが実行されて、テセレーションオペレーションを完了する。典型的に、ソフトウェアアプリケーションプログラム又は装置ドライバが第１パス及び第２パスの両方を開始する。
【発明の概要】
【発明が解決しようとする課題】
【０００３】
[0003]従って、この技術では、テセレーションシェーダープログラムを実行するための改良されたシステム及び方法が必要とされている。
【課題を解決するための手段】
【０００４】
[0004]グラフィックプロセッサを通して単一パスでテセレーションを実行するためのシステム及び方法は、グラフィックプロセッサ内の処理リソースを、異なるテセレーションオペレーションを実行するためのセットへと分割する。頂点データ及びテセレーションパラメータは、メモリに記憶されるのではなく、１つの処理リソースから別の処理リソースへ直接ルーティングされる。それ故、表面パッチ記述がグラフィックプロセッサに与えられ、そしてメモリに中間データを記憶せずに、グラフィックプロセッサを通して単一の非中断パスでテセレーションが完了される。
【０００５】
[0005]グラフィックプロセッサを通して単一パスでテセレーションを実行するための本発明の方法の種々の実施形態は、グラフィックプロセッサの処理ユニットの第１セットを構成すると共に、グラフィックプロセッサ内の処理ユニットの第２セットを構成することを含む。処理ユニットの第１セットは、テセレーションコントロールシェーダーを実行して表面パッチを処理し、テセレーション詳細レベルを計算し、複数の頂点を含むグラフィックプリミティブを生成するように構成される。処理ユニットの第２セットは、テセレーション評価シェーダーを実行して複数の頂点の１つを各々処理するように構成される。次いで、テセレーションコントロールシェーダー及びテセレーション評価シェーダーが実行され、処理ユニットの第１セット及び処理ユニットの第２セットを通る単一パスで表面パッチをテセレートして、処理された頂点を生成する。
【０００６】
[0006]本発明の種々の実施形態は、グラフィックプロセッサを通る単一パスでテセレーションを実行するためのシステムを包含する。グラフィックプロセッサは、処理ユニットの第１セットと、処理ユニットの第２セットと、クロスバー相互接続部とを含む。処理ユニットの第１セットは、テセレーションコントロールシェーダーを実行して表面パッチを処理すると共に、複数の頂点を含むグラフィックプリミティブを生成するように構成される。処理ユニットの第２セットは、テセレーション評価シェーダーを実行して複数の頂点の１つを各々処理するように構成される。クロスバー相互接続部は、処理ユニットの第１セット及び処理ユニットの第２セットに結合され、処理ユニットの第１セットにより出力される複数の頂点を処理ユニットの第２セットの入力へルーティングするように構成される。
【０００７】
[0007]本発明の前述した特徴を詳細に理解できるように、概要について簡単に前述した本発明について、幾つかを添付図面に例示している実施形態に関して、以下により特定して説明する。しかしながら、添付図面は、本発明の典型的な実施形態のみを例示したもので、従って、本発明の範囲は、それに限定されるものではなく、本発明は、同等の効果を発揮できる他の実施形態も包含できることに注意されたい。
【図面の簡単な説明】
【０００８】
【図１】本発明の１つ以上の態様を具現化するように構成されたコンピュータシステムを示すブロック図である。
【図２】本発明の一実施形態による図１のコンピュータシステムのための並列処理サブシステムのブロック図である。
【図３Ａ】本発明の一実施形態による図２の１つのＰＰＵ内のＧＰＣのブロック図である。
【図３Ｂ】本発明の一実施形態による図２の１つのＰＰＵ内の区画ユニットのブロック図である。
【図４】本発明の一実施形態により図２のＰＰＵの１つ以上を具現化のために構成できるグラフィック処理パイプラインの概念図である。
【図５Ａ】本発明の一実施形態によりテセレーションを単一パスで実行するための方法ステップのフローチャートである。
【図５Ｂ】本発明の一実施形態によりテセレーションを単一パスで実行するように構成されたＧＰＣのブロック図である。
【発明を実施するための形態】
【０００９】
[0015]本発明をより完全に理解するために、多数の特定の細部を以下に説明する。しかしながら、当業者であれば、１つ以上のこれら特定の細部がなくても、本発明を実施できることが明らかであろう。他の点について、本発明を不明瞭にしないために、良く知られた特徴は説明しない。
【００１０】
システムの概略
[0016]図１は、本発明の１つ以上の態様を具現化するように構成されたコンピュータシステム１００を示すブロック図である。このコンピュータシステム１００は、中央処理ユニット（ＣＰＵ）１０２と、メモリブリッジ１０５を通りバス経路を経て通信するシステムメモリ１０４とを備えている。メモリブリッジ１０５は、図１に示すように、ＣＰＵ１０２に一体化されてもよい。或いは又、メモリブリッジ１０５は、従来の装置、例えば、ノースブリッジチップであって、バスを経てＣＰＵ１０２へ接続されてもよい。メモリブリッジ１０５は、通信経路１０６（例えば、ハイパートランスポートリンク）を経てＩ／Ｏブリッジ１０７へ接続される。例えば、サウスブリッジチップでもよいＩ／Ｏブリッジ１０７は、１つ以上のユーザ入力装置１０８（例えば、キーボード、マウス）からユーザ入力を受け取り、そしてその入力を、経路１０６及びメモリブリッジ１０５を経てＣＰＵ１０２へ転送する。並列処理サブシステム１１２がバス又は他の通信経路１１３（例えば、ＰＣＩエクスプレス、アクセラレーテッドグラフィックポート、又はハイパートランスポートリンク）を経てメモリブリッジ１０５へ結合され、一実施形態では、並列処理サブシステム１１２は、ディスプレイ装置１１０（例えば、従来のＣＲＴ又はＬＣＤベースのモニタ）へピクセルを配送するグラフィックサブシステムである。システムディスク１１４もＩ／Ｏブリッジ１０７に接続される。スイッチ１１６は、Ｉ／Ｏブリッジ１０７と、他のコンポーネント、例えば、ネットワークアダプタ１１８及び種々のアドインカード１２０及び１２１との間の接続を与える。Ｉ／Ｏブリッジ１０７には、ＵＳＢ又は他のポートコネクタ、ＣＤドライバ、ＤＶＤドライバ、フィルム記録装置、等を含む他のコンポーネント（明確に示されていない）を接続することもできる。図１における種々のコンポーネントを相互接続する通信経路は、任意の適当なプロトコル、例えば、ＰＣＩ（周辺コンポーネント相互接続）、ＰＣＩエクスプレス（ＰＣＩ−Ｅ）、ＡＧＰ（アクセラレーテッドグラフィックポート）、ハイパートランスポート、或いは他のバス又はポイント対ポイント通信プロトコルを使用して具現化されてもよいし、異なる装置間の接続が、この技術で良く知られたように、異なるプロトコルを使用してもよい。
【００１１】
[0017]一実施形態において、並列処理サブシステム１１２は、例えば、ビデオ出力回路を含むグラフィック及びビデオ処理に最適な回路を合体して、グラフィック処理ユニット（ＧＰＵ）を構成する。別の実施形態では、並列処理サブシステム１１２は、ここで詳細に述べる基礎的な計算アーキテクチャーを維持しながら、汎用処理を行うように最適化された回路を合体する。更に別の実施形態では、並列処理サブシステム１１２は、１つ以上の他のシステム要素、例えば、メモリブリッジ１０５、ＣＰＵ１０２及びＩ／Ｏブリッジ１０７と一体化されて、システムオンチップ（ＳｏＣ）を形成してもよい。
【００１２】
[0018]ここに示すシステムは、例示に過ぎず、変更や修正が可能であることが明らかである。ブリッジの数及び配列を含む接続トポロジーは、必要に応じて変更されてもよい。例えば、ある実施形態では、システムメモリ１０４は、ブリッジを通さずにＣＰＵ１０２に直結され、他の装置は、メモリブリッジ１０５及びＣＰＵ１０２を経てシステムメモリ１０４と通信する。他の別のトポロジーにおいて、並列処理サブシステム１１２は、Ｉ／Ｏブリッジ１０７へ接続され、又はメモリブリッジ１０５ではなくＣＰＵ１０２に直結される。更に他の実施形態では、ＣＰＵ１０２、Ｉ／Ｏブリッジ１０７、並列処理サブシステム１１２及びメモリブリッジ１０５の１つ以上が、１つ以上のチップに一体化される。ここに示す特定のコンポーネントは、任意のものであり、例えば、いかなる数のアドインカード又は周辺装置がサポートされてもよい。ある実施形態では、スイッチ１１６が取り去られ、ネットワークアダプタ１１８及びアドインカード１２０、１２１がＩ／Ｏブリッジ１０７に直結される。
【００１３】
[0019]図２は、本発明の一実施形態による並列処理サブシステム１１２を示す。図示されたように、並列処理サブシステム１１２は、１つ以上の並列処理ユニット（ＰＰＵ）２０２を備え、その各々がローカル並列処理（ＰＰ）メモリ２０４に結合される。一般に、並列処理サブシステムは、多数ＵのＰＰＵを備え、但し、Ｕ≧１である。（ここで、同じオブジェクトの複数のインスタンスは、オブジェクトを識別する参照番号と、必要に応じてインスタンスを識別するかっこ付き番号とで示される。）ＰＰＵ２０２及び並列処理メモリ２０４は、１つ以上の集積回路デバイス、例えば、プログラム可能なプロセッサ、特定用途向け集積回路（ＡＳＩＣ）又はメモリデバイスを使用して具現化されてもよいし、或いは他の技術的に実現可能な形態で具現化されてもよい。
【００１４】
[0020]再び図１を参照すれば、ある実施形態において、並列処理サブシステム１１２における幾つかの又は全てのＰＰＵ２０２は、ＣＰＵ１０２及び／又はシステムメモリ１０４により供給されるグラフィックデータからピクセルデータを生成し、ローカル並列処理メモリ２０４（例えば、従来のフレームバッファを含むグラフィックメモリとして使用できる）と相互作用して、ピクセルデータを記憶及び更新し、ピクセルデータをディスプレイ装置１１０配送し、等々に関連した種々のタスクを実行するように構成できるレンダリングパイプラインを伴うグラフィックプロセッサである。ある実施形態では、並列処理サブシステム１１２は、グラフィックプロセッサとして動作する１つ以上のＰＰＵ２０２、及び汎用計算に使用される１つ以上の他のＰＰＵ２０２を含んでもよい。ＰＰＵは、同じものでも異なるものでもよく、又、各ＰＰＵは、それ自身の専用の並列処理メモリ装置（１つ又は複数）を有してもよいし、又は専用の並列処理メモリ装置（１つ又は複数）を有していなくてもよい。１つ以上のＰＰＵ２０２がディスプレイ装置１１０へデータを出力してもよいし、又は各ＰＰＵ２０２が１つ以上のディスプレイ装置１１０へデータを出力してもよい。
【００１５】
[0021]動作中に、ＣＰＵ１０２がコンピュータシステム１００のマスタープロセッサとなり、他のシステムコンポーネントのオペレーションを制御し整合させる。特に、ＣＰＵ１０２は、ＰＰＵ２０２のオペレーションを制御するコマンドを生成する。ある実施形態では、ＣＰＵ１０２は、各ＰＰＵ２０２のためのコマンドのストリームをコマンドバッファ（図１又は図２のいずれにも明確に示されていない）へ書き込み、このコマンドバッファは、システムメモリ１０４、並列処理メモリ２０４、又はＣＰＵ１０２及びＰＰＵ２０２の両方にアクセス可能な別の記憶位置に配置される。ＰＰＵ２０２は、コマンドバッファからコマンドストリームを読み取り、次いで、ＣＰＵ１０２のオペレーションに対して非同期でコマンドを実行する。又、ＣＰＵ１０２は、コマンドバッファのコマンドに応答してＰＰＵ２０２が読み取ることのできるデータバッファを生成することもできる。各コマンド及びデータバッファは、複数のＰＰＵ２０２によって読み取ることができる。
【００１６】
[0022]図２に戻ると、各ＰＰＵ２０２は、メモリブリッジ１０５へ接続される（又は１つの別の実施形態では、ＣＰＵ１０２へ直結される）通信経路１１３を経てコンピュータシステム１００の残部と通信するＩ／Ｏ（入力／出力）ユニット２０５を備えている。コンピュータシステム１００の残部へのＰＰＵ２０２の接続を変更することもできる。ある実施形態では、並列処理サブシステム１１２は、コンピュータシステム１００の拡張スロットへ挿入できるアドインカードとして具現化される。他の実施形態では、ＰＰＵ２０２は、メモリブリッジ１０５又はＩ／Ｏブリッジ１０７のようなバスブリッジと共に単一チップ上に集積化することができる。更に別の実施形態では、ＰＰＵ２０２の幾つかの又は全ての要素をＣＰＵ１０２と共に単一チップ上に集積化することができる。
【００１７】
[0023]一実施形態では、通信経路１１３は、この技術で知られたように各ＰＰＵ２０２に専用レーンが割り当てられたＰＣＩ−Ｅリンクである。他の通信経路が使用されてもよい。Ｉ／Ｏユニット２０５は、通信経路１１３を経て送信するためのパケット（又は他の信号）を生成すると共に、通信経路１１３からの全ての到来パケット（又は他の信号）を受信して、それら到来パケットをＰＰＵ２０２の適当なコンポーネントに向ける。例えば、処理タスクに関連したコマンドは、ホストインターフェイス２０６に向けることができる一方、メモリオペレーション（例えば、並列処理メモリ２０４からの読み取り又はそこへの書き込み）に関連したコマンドは、メモリクロスバーユニット２１０に向けることができる。ホストインターフェイス２０６は、各コマンドバッファを読み取り、又、コマンドバッファにより指定されたワークをフロントエンド２１２へ出力する。
【００１８】
[0024]各ＰＰＵ２０２は、高度な並列処理アーキテクチャーを具現化するのが好都合である。詳細に示されたように、ＰＰＵ２０２（０）は、多数Ｃの一般的処理クラスター（ＧＰＣ）２０８を含む処理クラスターアレイ２３０を備え、但し、Ｃ≧１である。各ＧＰＣ２０８は、多数（例えば、数百又は数千）のスレッドを同時に実行することができ、ここで、各スレッドは、プログラムのインスタンスである。種々のアプリケーションにおいて、異なる形式のプログラムを処理するか又は異なる形式の計算を実行するために異なるＧＰＣ２０８が割り当てられる。例えば、グラフィックアプリケーションでは、テセレーションオペレーションを実行してパッチに対するプリミティブトポロジーを生成するためにＧＰＣ２０８の第１セットを割り当てることができ、又、テセレーションシェーディングを実行してプリミティブトポロジーに対してパッチパラメータを評価すると共に、頂点位置及び他の頂点ごとの属性を決定するためにＧＰＣ２０８の第２セットを割り当てることができる。ＧＰＣ２０８の割り当ては、各形式のプログラム又は計算に対して生じるワークロードに基づいて変更し得る。或いは又、タイムスライススキームを使用して異なる処理タスク間をスイッチする処理タスクを実行するために全ＧＰＣを割り当ててもよい。
【００１９】
[0025]ＧＰＣ２０８は、フロントエンドユニット２１２から処理タスクを定義するコマンドを受け取るワーク分配ユニット２００を経て実行されるべき処理タスクを受け取る。処理タスクは、処理されるべきデータ、例えば、表面（パッチ）データ、プリミティブデータ、頂点データ、及び／又はピクセルデータ、並びにどのようにデータを処理すべきか（例えば、どんなプログラムを実行すべきか）を定義する状態パラメータ及びコマンドを指すポインタを含む。ワーク分配ユニット２００は、タスクに対応するポインタをフェッチするように構成されてもよいし、ワーク分配ユニット２００は、フロントエンド２１２からポインタを受け取ってもよいし、或いはワーク分配ユニット２００は、データを直接受け取ってもよい。本発明のある実施形態では、アレイにおけるデータの位置をインデックスが指定する。フロントエンド２１２は、コマンドバッファによって指定された処理が開始される前にＧＰＣ２０８が有効な状態へと構成されることを保証する。
【００２０】
[0026]ＰＰＵ２０２が、例えば、グラフィック処理に使用されるときには、各パッチに対する処理ワークロードが、ほぼ等しいサイズのタスクへ分割され、テセレーション処理を複数のＧＰＣ２０８へ分配できるようにする。ワーク分配ユニット２００は、タスクを処理のために複数のＧＰＣ２０８に与えることのできる周波数においてタスクを出力するように構成することができる。本発明のある実施形態では、ＧＰＣ２０８の各部分は、異なる形式の処理を実行するように構成される。例えば、第１部分は、頂点シェーディング及びトポロジー生成を実行するように構成され、第２部分は、テセレーション及び幾何学的シェーディングを実行するように構成され、更に、第３部分は、スクリーンスペースにおいてピクセルシェーディングを実行して、レンダリングされた像を形成するように構成されてもよい。異なる形式の処理を効率的に実行するためにＧＰＣ２０８の各部分を割り当てる能力は、異なる形式の処理により生成されるデータの膨張及び収縮を受け入れる。ＧＰＣ２０８により生成される中間データは、下流ＧＰＣ２０８によりデータが受け入れられる速度が、上流ＧＰＣ２０８によりデータが生成される速度より遅いときに、最小の停滞状態でＧＰＣ２０８間に中間データを送信できるようにバッファすることができる。
【００２１】
[0027]メモリインターフェイス２１４は、並列処理メモリ２０４の一部分に各々直結された多数Ｄのメモリ区画ユニットへ区画化することができ、但し、Ｄ≧１である。メモリの各部分は、一般に、１つ以上のメモリデバイス（例えば、ＤＲＡＭ２２０）より成る。当業者であれば、ＤＲＡＭ２２０は、他の適当な記憶装置と置き換えることができ、一般的に従来設計のものでよいことが明らかであろう。それ故、詳細な説明は省略する。フレームバッファ又はテクスチャマップのようなレンダーターゲットは、ＤＲＡＭ２２０にわたって記憶され、区画ユニット２１５が各レンダーターゲットの部分を並列に書き込み、並列処理メモリ２０４の使用可能な帯域巾を効率的に使用できるようにする。
【００２２】
[0028]ＧＰＣ２０８のいずれの１つも、並列処理メモリ２０４内の任意の区画ユニット２１５に書き込まれるべきデータを処理することができる。クロスバーユニット２１０は、各ＧＰＣ２０８の出力を任意の区画ユニット２１４の入力又は別のＧＰＣ２０８へ更なる処理のためにルーティングするように構成される。ＧＰＣ２０８は、クロスバーユニット２１０を通してメモリインターフェイス２１４と通信し、種々の外部メモリ装置から読み取ったり又はそこへ書き込んだりする。一実施形態では、クロスバーユニット２１０は、Ｉ／Ｏユニット２０５と通信するためにメモリインターフェイス２１４への接続を有すると共に、ローカル並列処理メモリ２０４への接続を有し、これにより、異なるＧＰＣ２０８内の処理コアが、システムメモリ１０４、又はＰＰＵ２０２に対してローカルでない他のメモリと通信できるようにする。クロスバーユニット２１０は、バーチャルチャンネルを使用して、ＧＰＣ２０８と区画ユニット２１５との間でトラフィックストリームを分離することができる。
【００２３】
[0029]この場合も、ＧＰＣ２０８は、これに限定されないが、直線的及び非直線的データ変換、ビデオ及び／又はオーディオデータのフィルタリング、モデリングオペレーション（例えば、物理の法則を適用して物体の位置、速度及び他の属性を決定すること）、像レンダリングオペレーション（例えば、テセレーションシェーダー、頂点シェーダー、幾何学的シェーダー及び／又はピクセルシェーダープログラム）、等を含む種々様々なアプリケーションに関する処理タスクを実行するようにプログラムすることができる。ＰＰＵ２０２は、システムメモリ１０４及び／又はローカル並列処理メモリ２０４からのデータを内部（オンチップ）メモリへ転送し、そのデータを処理し、そしてそれにより得られるデータをシステムメモリ１０４及び／又はローカル並列処理メモリ２０４へ書き戻すことができ、このようなデータは、ＣＰＵ１０２又は別の並列処理サブシステム１１２を含む他のシステムコンポーネントによってアクセスすることができる。
【００２４】
[0030]ＰＰＵ２０２には、ローカルメモリを含まない任意の量のローカル並列処理メモリ２０４を設けることができ、又、ローカルメモリ及びシステムメモリを任意の組み合わせで使用することもできる。例えば、ＰＰＵ２０２は、統合型メモリアーキテクチャー（ＵＭＡ）実施形態では、グラフィックプロセッサである。このような実施形態では、専用グラフィック（並列処理）メモリがほとんど又は全く設けられず、ＰＰＵ２０２は、システムメモリを排他的又はほぼ排他的に使用する。ＵＭＡ実施形態では、ＰＰＵ２０２は、ブリッジチップ又はプロセッサチップに一体化されてもよいし、或いはブリッジチップ又は他の通信手段を経てシステムメモリへＰＰＵ２０２を接続する高速リンク（例えば、ＰＣＩ−Ｅ）をもつ個別のチップとして設けられてもよい。
【００２５】
[0031]上述したように、並列処理サブシステム１１２には、いかなる数のＰＰＵ２０２を含ませることもできる。例えば、複数のＰＰＵ２０２を単一のアドインカード上に設けることもできるし、又は複数のアドインカードを通信経路１１３に接続することもできるし、或いは１つ以上のＰＰＵ２０２をブリッジチップに一体化することもできる。マルチＰＰＵシステムにおけるＰＰＵ２０２は、互いに同じものでも異なるものでもよい。例えば、異なるＰＰＵ２０２は、異なる数の処理コア、異なる量のローカル並列処理メモリ、等を有してもよい。複数のＰＰＵ２０２が存在する場合には、それらＰＰＵは、単一のＰＰＵ２０２で可能であるよりも高いスループットでデータを処理するように並列に動作させることができる。１つ以上のＰＰＵ２０２を合体するシステムは、デスクトップ、ラップトップ、又はハンドヘルドパーソナルコンピュータ、サーバー、ワークステーション、ゲームコンソール、埋め込み型システム、等々を含む種々のコンフィギュレーション及びフォームファクタで具現化することができる。
【００２６】
処理クラスターアレイの概略
[0032]図３Ａは、本発明の一実施形態による図２の１つのＰＰＵ２０２内のＧＰＣ２０８のブロック図である。各ＧＰＣ２０８は、多数のスレッドを並列に実行するように構成することができ、ここで、「スレッド」という語は、入力データの特定のセットに対して実行される特定のプログラムのインスタンスを指す。ある実施形態では、複数の独立したインストラクションユニットを設けずに、多数のスレッドの並列実行をサポートするために、単一インストラクション多データ（ＳＩＭＤ）のインストラクション発行技術が使用される。他の実施形態では、各１つのＧＰＣ２０８内の処理エンジンのセットへインストラクションを発行するように構成された共通のインストラクションユニットを使用して、多数の一般的に同期されるスレッドの並列実行をサポートするために、単一インストラクション多スレッド（ＳＩＭＴ）技術が使用される。全処理エンジンが典型的に同じインストラクションを実行するというＳＩＭＤ実行形態とは異なり、ＳＩＭＴ実行は、異なるスレッドが、所与のスレッドプログラムを通じて、発散する実行経路を容易にたどることができるようにする。当業者であれば、ＳＩＭＤ処理形態は、ＳＩＭＴ処理形態の機能的サブセットを表すことが理解されよう。
【００２７】
[0033]グラフィックアプリケーションでは、ＧＰＣ２０８は、これに限定されないが、プリミティブ設定、ラスタ化及びｚカリングを含むスクリーンスペースグラフィック処理ファンクションを実行するためのプリミティブエンジンを含むように構成されてもよい。図３Ａに示すように、設定ユニット３０２は、グラフィックプリミティブを処理するためのインストラクションを受け取り、バッファからグラフィックプリミティブパラメータを読み取る。バッファは、Ｌ１キャッシュ３１５、区画ユニット２１５又はＰＰメモリ２０４に記憶されてもよい。ラスタライザ／ｚカルユニット３０３は、グラフィックプリミティブパラメータを受け取り、そしてラスタライザ／ｚカルユニット３０３に指定されるピクセルに交差するプリミティブをラスタ化する。ラスタライザ／ｚカルユニット３０３の１つのみに各ピクセルが指定され、従って、ラスタライザ／ｚカルユニット３０３に指定されないピクセルに交差するグラフィックプリミティブの部分は破棄される。又、ラスタライザ／ｚカルユニット３０３は、ｚカリングを実行して、見えないグラフィックプリミティブの部分も除去する。ｚプレＲＯＰ(z preROP)ユニット３０４は、ｚデータにアクセスするためのアドレス変換を実行し、そして種々のｚ処理モードに基づいてｚデータのための順序を維持する。
【００２８】
[0034]ＧＰＣ２０８のオペレーションは、ワーク分配ユニット２００から（設定ユニット３０２、ラスタライザ／ｚカルユニット３０３、及びｚプレＲＯＰユニット３０４を経て）受け取られた処理タスクをストリーミングマルチプロセッサユニット（ＳＭＵ）３１０へ分配するパイプラインマネージャー３０５を経て制御されるのが好都合である。又、パイプラインマネージャー３０５は、ＳＭＵ３１０により出力される処理済みデータのための行先を指定することによりワーク分配クロスバー３３０を制御するように構成されてもよい。
【００２９】
[0035]一実施形態では、各ＧＰＣ２０８は、多数ＭのＳＭＵ３１０を含み、但し、Ｍ≧１であり、又、各ＳＭＵ３１０は、１つ以上のスレッドグループを処理するように構成される。又、各ＳＭＵ３１０は、この技術で知られたように、手前のインストラクションが終了する前に新たなインストラクションを発行できるように、パイプライン化できる機能的ユニット（例えば、演算論理ユニット、等々）の同一セットを含むのが好都合である。機能的ユニットの任意の組み合わせを設けることができる。一実施形態では、機能的ユニットは、整数及び浮動小数点演算（例えば、加算及び乗算）、比較演算、ブール演算（ＡＮＤ、ＯＲ、ＸＯＲ）、ビットシフト、及び種々の代数関数（例えば、平面補間、三角関数、指数関数、対数関数、等）の計算を含む様々なオペレーションをサポートし、そして同じ機能的ユニットハードウェアをレバレッジして、異なるオペレーションを実行することができる。
【００３０】
[0036]特定のＧＰＣ２０８へ送信される一連のインストラクションは、前記で定義したスレッドを構成し、ＳＭＵ３１０内の並列処理エンジン（図示せず）にわたるある個数の同時実行スレッドの集合がここで「スレッドグループ」と称される。ここで使用する「スレッドグループ」は、異なる入力データに対して同じプログラムを同時に実行するスレッドのグループを指し、グループの各スレッドは、ＳＭＵ３１０内の異なる処理エンジンに指定される。スレッドグループは、ＳＭＵ３１０内の処理エンジンの個数より少ないスレッドを含んでもよく、この場合、幾つかの処理エンジンは、そのスレッドグループが処理されるときのサイクル中にアイドル状態となる。又、スレッドグループは、ＳＭＵ３１０内の処理エンジンの個数より多いスレッドを含んでもよく、この場合、複数のクロックサイクルにわたって処理が行われる。各ＳＭＵ３１０がＧ個までのスレッドグループを同時にサポートできるので、いかなる所与の時間にもＧＰＣ２０８ではＧｘＭ個までのスレッドグループを実行できることになる。
【００３１】
[0037]更に、ＳＭＵ３１０内で複数の関連スレッドグループが同時にアクティブなことがある（異なる実行フェーズにおいて）。スレッドグループのこの集合は、ここでは、「協働スレッドアレイ」（ＣＴＡ）と称される。特定のＣＴＡのサイズは、ｍ＊ｋに等しく、但し、ｋは、スレッドグループ内の同時実行スレッドの数で、典型的に、ＳＭＵ３１０内の並列処理エンジンの数の整数倍であり、又、ｍは、ＳＭＵ３１０内の同時にアクティブなスレッドグループの数である。ＣＴＡのサイズは、一般的に、プログラマーと、ＣＴＡに使用可能なメモリ又はレジスタのようなハードウェアリソースの量とで決定される。
【００３２】
[0038]排他的なローカルアドレススペースが各スレッドに使用でき、そして共有のパーＣＴＡ(per-CTA)アドレススペースを使用して、ＣＴＡ内のスレッド間にデータを通過させる。パースレッド(per-thread)ローカルアドレススペース及びパーＣＴＡアドレススペースに記憶されたデータは、Ｌ１キャッシュ３２０に記憶され、又、エビクションポリシーを使用してデータをＬ１キャッシュ３２０に好意的に保持することができる。各ＳＭＵ３１０は、ロード及び記憶オペレーションを実行するのに使用される対応Ｌ１キャッシュ３２０内のスペースを使用する。又、各ＳＵＭ３１０は、全てのＧＰＣ２０８間に共有されてスレッド間のデータ転送に使用できる区画ユニット２１５内のＬ２キャッシュにもアクセスする。最終的に、ＳＭＵ３１０は、例えば、並列処理メモリ２０４及び／又はシステムメモリ１０４を含むオフチップ「グローバル」メモリにもアクセスする。Ｌ２キャッシュは、グローバルメモリへ書き込まれ及びグローバルメモリから読み取られるデータを記憶するのに使用されてもよい。ＰＰＵ２０２の外部のメモリをグローバルメモリとして使用してもよいことを理解されたい。
【００３３】
[0039]グラフィックアプリケーションでは、ＧＰＣ２０８は、例えば、テクスチャサンプル位置を決定し、テクスチャデータを読み取り、テクスチャデータをフィルタリングするようなテクスチャマッピングオペレーションを実行するために各ＳＭＵ３１０がテクスチャユニット３１５に結合されるように構成できる。テクスチャデータは、メモリインターフェイス２１４を経て読み取られ、Ｌ２キャッシュ、並列処理メモリ２０４、又はシステムメモリ１０４から必要に応じてフェッチされる。テクスチャユニット３１５は、テクスチャデータを内部キャッシュに記憶するように構成できる。ある実施形態では、テクスチャユニット３１５がＬ１キャッシュ３２０に結合され、テクスチャデータがＬ１キャッシュ３２０に記憶される。各ＳＭＵ３１０は、処理されたタスクをワーク分配クロスバー３３０へ出力し、処理されたタスクを更なる処理のために別のＧＰＣ２０８に与えるか、又は処理されたタスクを、クロスバーユニット２１０を経てＬ２キャッシュ、並列処理メモリ２０４又はシステムメモリ１０４に記憶する。プレＲＯＰ（プレラスタオペレーション）３２５は、ＳＭＵ３１０からデータを受け取り、区画ユニット２１５内のＲＯＰユニットへデータを向け、カラー混合のための最適化を実行し、ピクセルカラーデータを編成し、そしてアドレス変換を実行するように構成される。
【００３４】
[0040]ここに述べるコアアーキテクチャーは、例示に過ぎず、変更や修正が可能であることが明らかである。いかなる数の処理エンジン、例えば、ＳＭＵ３１０、テクスチャユニット３１５又はプレＲＯＰ３２５がＧＰＣ２０８内に含まれてもよい。更に、１つのＧＰＣ２０８しか示されていないが、ＰＰＵ２０２は、いかなる数のＧＰＣ２０８を含んでもよく、これらＧＰＣは、どのＧＰＣ２０８が特定の処理タスクを受け取るかに実行振舞いが依存しないように、互いに機能的に同様であるのが好都合である。更に、各ＧＰＣ２０８は、別々の個別の処理エンジン、Ｌ１キャッシュ３２０、等を使用して、他のＧＰＣ２０８とは独立して動作するのが好都合である。
【００３５】
[0041]図３Ｂは、本発明の一実施形態による図２の１つのＰＰＵ２０２内の区画ユニット２１５のブロック図である。図示されたように、区画ユニット２１５は、Ｌ２キャッシュ３５０、フレームバッファ（ＦＢ）３５５、及びラスタオペレーションユニット（ＲＯＰ）３６０を備えている。Ｌ２キャッシュ３５０は、クロスバーユニット２１０及びＲＯＰ３２５から受け取られるロード及び記憶オペレーションを実行するように構成された読み取り／書き込みキャッシュである。読み取りミス及び緊急書き戻し要求は、Ｌ２キャッシュ３５０により処理のためにＦＢ３５５へ出力される。不正な更新も、日和見主義的な処理のためにＦＢ３５５へ送信される。ＦＢ３５５は、並列処理メモリ２０４と直接インターフェイスし、読み取り及び書き込み要求を出力すると共に、並列処理メモリ２０４から読み取られたデータを受け取る。
【００３６】
[0042]グラフィックアプリケーションでは、ＲＯＰ３６０は、ステンシル、ｚテスト、ブレンド、等のラスタオペレーションを実行し、そしてピクセルデータを処理済みグラフィックデータとして出力してグラフィックメモリに記憶する処理ユニットである。本発明のある実施形態では、ＲＯＰ３６０が各区画ユニット２１５に代わって各ＧＰＣ２０８内に含まれ、そしてピクセル読み取り及び書き込みがピクセル断片に代わってクロスバーユニット２１０を経て送信される。
【００３７】
[0043]処理済みグラフィックデータは、ディスプレイ装置１１０上に表示されてもよいし、或いはＣＰＵ１０２により又は並列処理サブシステム１１２内の処理エンティティの１つにより更に処理するためにルーティングされてもよい。各区画ユニット２１５は、ラスタオペレーションの処理を分配するためにＲＯＰ３６０を含む。ある実施形態では、ＲＯＰ３６０は、メモリに書き込まれるｚ又はカラーデータを圧縮すると共に、メモリから読み取られたｚ又はカラーデータを解凍するように構成されてもよい。
【００３８】
[0044]当業者であれば、図１、２、３Ａ及び３Ｂについて述べたアーキテクチャーは、本発明の範囲を何ら限定するものではなく、又、ここに教示される技術は、これに限定されないが、１つ以上のＣＰＵ、１つ以上のマルチコアＣＰＵ、１つ以上のＰＰＵ２０２、１つ以上のＧＰＣ２０８、１つ以上のグラフィック又は特殊目的の処理ユニット、等を含む適切に構成された処理ユニットにおいて、本発明の範囲から逸脱せずに、具現化できることが理解されよう。
【００３９】
グラフィックパイプラインアーキテクチャー
[0045]図４は、本発明の一実施形態により図２のＰＰＵ２０２の１つ以上を具現化のために構成できるグラフィック処理パイプライン４００の概念図である。例えば、ＳＭＵ３１０の１つは、頂点処理ユニット４１５、幾何学的処理ユニット４２５及び断片処理ユニット４６０の１つ以上のファンクションを実行するように構成できる。データアッセンブラー４１０、プリミティブアッセンブラー４２０、ラスタライザ４５５及びラスタオペレーションユニット４６５のファンクションも、ＧＰＣ２０８内の他の処理エンジン及びそれに対応する区画ユニット２１５により実行することができる。或いは又、グラフィック処理パイプライン４００は、１つ以上のファンクションのための専用処理ユニットを使用して具現化されてもよい。
【００４０】
[0046]データアッセンブラー４１０の処理ユニットは、高次の表面、プリミティブ、等のための頂点データを収集し、そして頂点属性を含む頂点データを頂点処理ユニット４１５へ出力する。頂点処理ユニット４１５は、頂点シェーダープログラムを実行するように構成されたプログラム可能な実行ユニットであり、頂点シェーダープログラムにより照明及び変換頂点データが指定される。例えば、頂点処理ユニット４１５は、頂点データを、オブジェクトベースの座標表現（オブジェクトスペース）から、ワールドスペース或いは正規化装置座標（ＮＤＣ）スペースのような交互ベースの座標系へと変換するようにプログラムすることができる。頂点処理ユニット４１５は、Ｌ１キャッシュ３２０、並列処理メモリ２０４、又はシステムメモリ１０４に記憶されたデータを、データアッセンブラー４１０により、頂点データの処理に使用するために読み取ることができる。
【００４１】
[0047]プリミティブアッセンブラー４２０は、頂点処理ユニット４１５から頂点属性を受け取り、記憶された頂点属性を必要に応じて読み取り、そして幾何学的処理ユニット４２５により処理するためのグラフィックプリミティブを構築する。グラフィックプリミティブは、三角形、線セグメント、点、等を含む。幾何学的処理ユニット４２５は、幾何学的シェーダープログラムを実行するように構成されたプログラム可能な実行ユニットで、幾何学的シェーダープログラムにより指定されたようにプリミティブアッセンブラー４２０から受け取られるグラフィックプリミティブを変換する。例えば、幾何学的処理ユニット４２５は、グラフィックプリミティブを１つ以上の新たなグラフィックプリミティブへと分割し、そしてその新たなグラフィックプリミティブをラスタ化するのに使用される平面方程式係数のようなパラメータを計算するようにプログラムすることができる。
【００４２】
[0048]ある実施形態では、幾何学的処理ユニット４２５は、幾何学的ストリームにおける要素を追加し又は削除することもできる。幾何学的処理ユニット４２５は、新たなグラフィックプリミティブを指定するパラメータ及び頂点を、ビューポートスケール、カル及びクリップユニット４５０へ出力する。幾何学的処理ユニット４２５は、並列処理メモリ２０４又はシステムメモリ１０４に記憶されたデータを、幾何学的データの処理に使用するために読み取ることができる。ビューポートスケール、カル及びクリップユニット４５０は、クリッピング、カリング及びビューポートスケーリングを実行し、そして処理されたグラフィックプリミティブをラスタライザ４５５へ出力する。
【００４３】
[0049]ラスタライザ４５５は、新たなグラフィックプリミティブをスキャン変換し、そして断片及びカバレージデータを断片処理ユニット４６０へ出力する。更に、ラスタライザ４５５は、ｚカリング及び他のｚベース最適化を実行するように構成できる。断片処理ユニット４６０は、断片シェーダープログラムを実行するように構成されたプログラム可能な実行ユニットで、断片シェーダープログラムにより指定されるように、ラスタライザ４５５から受け取られる断片を変換する。例えば、断片処理ユニット４６０は、パースペクティブ補正、テクスチャマッピング、シェーディング、ブレンド、等のオペレーションを実行して、シェーディングされた断片を生成するようにプログラムすることができ、そのシェーディングされた断片は、ラスタオペレーションユニット４６５へ出力される。断片処理ユニット４６０は、並列処理メモリ２０４又はシステムメモリ１０４に記憶されたデータを、断片データの処理に使用するために読み取ることができる。断片は、プログラムされたサンプルレートに基づいて、ピクセル、サンプル又は他の粒度でシェーディングすることができる。
【００４４】
[0050]ラスタオペレーションユニット４６５は、ステンシル、ｚテスト、ブレンド、等のラスタオペレーションを実行し、そしてピクセルデータを処理済みグラフィックデータとして出力してグラフィックメモリに記憶する処理ユニットである。処理済みグラフィックデータは、ディスプレイ装置１１０に表示するか、或いはＣＰＵ１０２又は並列処理サブシステム１１２により更に処理するために、グラフィックメモリ、例えば、並列処理メモリ２０４、及び／又はシステムメモリ１０４に記憶することができる。本発明のある実施形態では、ラスタオペレーションユニット４６５は、メモリに書き込まれるｚ又はカラーデータを圧縮すると共に、メモリから読み取られたｚ又はカラーデータを解凍するように構成される。
【００４５】
単一パステセレーション
[0051]単一パスでテセレーションを実行するために、ＳＭＵ３１０の第１部分は、テセレーションコントロールシェーダープログラムを実行するように構成され、又、ＳＭＵ３１０の第２部分は、テセレーション評価シェーダープログラムを実行するように構成される。ＳＭＵ３１０の第１部分は、１０個のコントロールポイントで定義されるキュービックトライアングルプリミティブのような表面パッチ記述及び出力グラフィックプリミティブと、詳細レベル値のようなテセレーションパラメータとを受け取る。これらのグラフィックプリミティブ及びテセレーションパラメータは、ＰＰメモリ２０４に記憶されるのではなく、Ｌ１キャッシュ３２０及びワーク分配クロスバー３３０を通して１つのＳＭＵ３１０から別のＳＭＵ３１０へルーティングされる。それ故、表面パッチ記述のテセレーションは、中間データをＬ２ラッチ３５０又はＰＰメモリ２０４に記憶することなく、ＧＰＣ２０８を通る単一の非中断パスで完了となる。更に、アプリケーションプログラム又は装置ドライバ１０３は、表面パッチ記述を与え、テセレーション処理中にＧＰＣ２０８の部分を再構成しない。
【００４６】
[0052]第１部分におけるＳＭＵ３１０の数は、第２部分におけるＳＭＵ３１０の数に等しくてもよいし、それより大きくてもよいし、又はそれより小さくてもよい。重要なことに、第１部分及び第２部分におけるＳＭＵ３１０の数は、処理ワークロードに一致するように調整することができる。単一表面パッチにより生成される頂点の数は、計算されたテセレーション詳細レベルと共に変化する。それ故、ＳＭＵ３１０の第１部分における単一のＳＭＰ３１０は、ＳＭＵ３１０の第２部分における複数のＳＭＰ３１０に対して「ワーク」を生成することがある。というのは、テセレーションコントロールシェーダープログラムの実行で、データ拡張が生じ得るからである。
【００４７】
[0053]図５Ａは、本発明の一実施形態によりテセレーションを単一パスで実行するための方法ステップのフローチャートである。ステップ５１０において、装置ドライバ１０３は、ＳＭＵ３１０の第１セットをテセレーションコントロールシェーダープログラム実行のために構成する。テセレーションコントロールシェーダープログラムは、コントロールポイントの基礎の変更、テセレーション詳細レベルパラメータの計算、等々を実行することができ、表面パッチごとに一度実行される。パッチの基礎の変更は、テセレーションコントロールシェーダープログラムが、１つのパッチ（コントロールポイントのセット）を入力すると共に異なるパッチ（コントロールポイントの異なるセット）を出力するときに生じ、ここで、コントロールポイントの数は、入力パッチと出力パッチとの間で変化する。ステップ５２０において、装置ドライバ１０３は、ＳＭＵ３１０の第２セットをテセレーション評価プログラム実行のために構成する。テセレーション評価コントロールシェーダープログラムは、パッチプリミティブコントロールポイント、各頂点に対するパラメータ（ｕ、ｖ）位置、変位マップ、等に基づいて各頂点の最終位置及び属性を計算することができ、出力頂点ごとに一度実行される。
【００４８】
[0054]ステップ５２０において、装置ドライバ１０３は、ＳＭＵ３１０を第１セット及び第２セットへと構成し、そしてテセレーションコントロールシェーダー及びテセレーション評価シェーダープログラムをダウンロードし、これらプログラムは、ＧＰＣ２０８により実行されて、表面データを処理すると共に、出力頂点を生成する。ステップ５３０において、ＳＭＵ３１０の第１セットにおけるＳＭＵ３１０は、テセレーションコントロールシェーダープログラムを実行して、グラフィックプリミティブ、例えば、キュービックトライアングルのようなグラフィックプリミティブのためのコントロールポイントを生成する。
【００４９】
[0055]ステップ５４０において、ＳＭＵ３１０の第１セットにより出力されるグラフィックプリミティブの頂点は、ＳＭＵ３１０の第２セットの入力へ分配される。ステップ５４５において、ＳＭＵ３１０の第２セットにおけるＳＭＵ３１０は、テセレーション評価シェーダープログラムを実行して、出力頂点を生成する。異なる頂点に対して、ステップ５３０、５４０及び５４５が異なる時間に行われることに注意されたい。それ故、第１セットのＳＭＵ３１０によりグラフィックプリミティブが出力されるときには、第２セットのＳＭＵ３１０がテセレーション評価プログラムの実行を開始し、出力頂点を生成する。ＳＭＵ３１０は、単一パスで表面パッチを処理するように構成されるので、装置ドライバ１０３は、テセレーションオペレーション中に異なるオペレーションを実行するようにＳＭＵ３１０を再構成する必要がない。
【００５０】
[0056]図５Ｂは、本発明の一実施形態によりテセレーションを単一パスで実行するように構成されたＧＰＣ２０８のブロック図である。第１セット５５０は、テセレーションコントロールシェーダープログラムを実行するように構成されたＳＭＵ３１０の第１セットである。第２セット５６０は、テセレーション評価シェーダープログラムを実行するように構成されたＳＭＵ３１０の第２セットである。第１セット５５０、ワーク分配クロスバー３３０、及び第２セット５６０は、図５Ａのステップ５３０、５４０及び５４５を実行するように構成することができる。ワーク分配クロスバー３３０は、第１セット５５０の各ＳＭＵ３１０を第２セット５６０の各ＳＭＵ３１０に接続するように構成される。
【００５１】
[0057]表面パッチを表す表面データ５５５は、図５Ｂに示すように、Ｌ１キャッシュ３２０に記憶され、第１セット５５０により読み取られる。パイプラインマネージャー３０５は、表面データ５５５の位置を第１セット５５０の各ＳＭＵ３１０に与えて表面パッチを処理のために分配するように構成することができる。第１セット５５０によって出力されるグラフィックプリミティブを表すテセレーションデータ５７０は、Ｌ１キャッシュ３２０に記憶することができる。パイプラインマネージャー３０５は、第２セット５６０のＳＭＵ３１０の入力へグラフィックプリミティブ頂点を分配するのに必要なルーティング情報をワーク分配クロスバー３３０に与える。本発明のある実施形態、例えば、図５Ｂに示す実施形態において、テセレーションデータ５７０は、ワーク分配クロスバー３３０を通してルーティングされる。本発明の他の実施形態では、各グラフィックプリミティブ頂点の位置に対応するインデックスが、ワーク分配クロスバー３３０を通してルーティングされ、第１セット５５０により出力されたテセレーションデータ５７０を第２セット５６０の入力へ分配する。重要なことに、テセレーションデータ５７０は、ＰＰメモリ２０４に記憶されるのではなく、Ｌ１キャッシュ３２０又はＬ２キャッシュ３５０に記憶され、テセレーションデータ５７０を読み取ったり書き込んだりするのに必要なクロックサイクルの数を減少する。
【００５２】
[0058]第１セット５５０のＳＭＵ３１０がテセレーションデータ５７０を書き込むときに、第２セット５６０のＳＭＵ３１０がテセレーションデータ５７０を読み取り、従って、テセレーションデータ５７０によって消費される記憶装置の量がＬ１キャッシュ３２０又はＬ２キャッシュ３５０内に適合するように減少される。これに対して、従来のシステムでは、２つの異なるパスを使用してプログラムを実行するときに、パッチのグループのためにテセレーションコントロールシェーダープログラムにより生成される全てのデータは、テセレーション評価シェーダープログラムを実行してデータを読み取るようにパイプラインが構成されるまで、オフチップメモリ、例えば、ＰＰメモリ２０４に記憶される。更に、従来の２パス技術を使用するときには、典型的に、グループ内のパッチの数が多くて、テセレーションコントロールシェーダープログラムの実行とテセレーション評価シェーダープログラムの実行との間をスイッチするために生じるパイプライン再構成の頻度を減少させる。第１パスにおいて多数のパッチを処理することにより生成されるテセレーションデータは、テセレーションデータ５７０よりも大きな記憶装置を必要とし、それ故、オフチップメモリに記憶される。
【００５３】
[0059]図５Ａ及び図５Ｂを参照して述べたように、表面パッチ記述のテセレーションは、ＰＰメモリ２０４に中間データを記憶せずに、ＧＰＣ２０８を通る単一の非中断パスで完了される。更に、アプリケーションプログラム又は装置ドライバ１０３は、表面パッチ記述を与えるが、テセレーション処理中にＧＰＣ２０８の部分を再構成しない。アプリケーションプログラマーは、好都合にも、ＰＰＵ２０２を、単一パスで表面を処理するように自動的に構成される単一のテセレーションパイプラインとみなすことができる。
【００５４】
[0060]本発明の一実施形態は、コンピュータシステムと共に使用するためのプログラム製品として具現化することができる。このプログラム製品のプログラム（１つ又は複数）は、（ここに述べる方法を含めて）実施形態のファンクションを定義し、種々のコンピュータ読み取り可能な記憶媒体にこれを含ませることができる。ここに例示するコンピュータ読み取り可能な記憶媒体は、（ｉ）情報が永久的に記憶される書き込み不能の記憶媒体（例えば、コンピュータ内のリードオンリメモリ装置、例えば、ＣＤ−ＲＯＭドライブにより読み取り可能なＣＤ−ＲＯＭディスク、フラッシュメモリ、ＲＯＭチップ、又は任意の形式のソリッドステート不揮発性半導体メモリ）、及び（ii）変更可能な情報が記憶される書き込み可能な記憶媒体（例えば、ディスケットドライブ又はハードディスクドライブ内のフロッピーディスク、又は任意の形式のソリッドステートランダムアクセス半導体メモリ）を含むが、これらに限定されない。
【００５５】
[0061]以上、特定の実施形態を参照して本発明を説明した。しかしながら、当業者であれば、特許請求の範囲に記載された本発明の広い精神及び範囲から逸脱せずに種々の変更や修正がなされ得ることが理解されよう。従って、前記説明及び添付図面は、単なる例示に過ぎず、それに限定されるものではない。
【符号の説明】
【００５６】
１００…コンピュータシステム、１０２…中央処理ユニット（ＣＰＵ）、１０３…装置ドライバ、１０４…システムメモリ、１０５…メモリブリッジ、１０６…通信経路、１０７…Ｉ／Ｏブリッジ、１０８…ユーザ入力装置、１１２…並列処理サブシステム、１１３…通信経路、１１６…スイッチ、１１８…ネットワークアダプタ、１２０、１２１…アドインカード、２００…ワーク分配ユニット、２０２…並列処理ユニット（ＰＰＵ）、２０４…並列処理（ＰＰ）メモリ、２０５…Ｉ／Ｏユニット、２０６…ホストインターフェイス、２０８…一般的処理クラスター（ＧＰＣ）、２１０…メモリクロスバーユニット、２１２…フロントエンド、２１４…メモリインターフェイス、２３０…処理クラスターアレイ、３０２…設定ユニット、３０３…ラスタライザ／ｚカルユニット、３０４…ｚプレＲＯＰユニット、３０５…パイプラインマネージャー、３１０…ＳＭＵ、３１５…テクスチャユニット、３２０…Ｌ１キャッシュ、３２５…プレＲＯＰ、３３０…ワーク分配クロスバー、３５０…Ｌ２キャッシュ、３５５…フレームバッファ（ＦＢ）、３６０…ラスタオペレーションユニット（ＲＯＰ）
【図１】
2010086528.tif 000003
【図２】
2010086528.tif 000004
【図３Ａ】
2010086528.tif 000005
【図３Ｂ】
2010086528.tif 000006
【図４】
2010086528.tif 000007
【図５Ａ】
2010086528.tif 000008
【図５Ｂ】
2010086528.tif 000009
【外国語明細書】
2010086528000001.pdf