複数の処理ユニットを用いるプロセッサにおいてデータ要素を処理する方法であって、第2の種類のスレッドを備える第2のウエーブフロントが続く第1の種類のスレッドを備える第1のウエーブフロントであってオフチップ共有メモリから前記データ要素の一部を入力としてリードすると共に第1の出力を生成する第1のウエーブフロントを前記処理ユニットの各々においてローンチすることと、前記第1の出力をそれぞれの処理ユニットのオンチップローカルメモリにライトすることと、前記第2のウエーブフロントによって生成された第2の出力を前記オンチップローカルメモリにライトすることと、を備え、前記第2のウエーブフロントへの入力は前記第1の出力からの第1の複数のデータ要素を備える方法。前記第2のウエーブフロントを用いて前記第1の複数のデータ要素を処理して前記第2の出力を生成することを更に備え、前記第2の出力におけるデータ要素の数は前記第1の複数のデータ要素の数とは実質的に異なる請求項1の方法。前記第2の出力におけるデータ要素の数は動的に決定される請求項2の方法。前記第2のウエーブフロントは1つ以上の幾何シェーダスレッドを備える請求項2の方法。前記第2の出力は前記第1の出力の幾何増幅により生成される請求項4の方法。前記第2のウエーブフロントに続いて第3のウエーブフロントを第1の処理ユニットにおいて実行することを更に備え、前記第3のウエーブフロントは前記第2の出力を前記オンチップローカルメモリからリードする請求項1の方法。前記オンチップローカルメモリ内で利用可能なメモリに少なくとも基き処理されるべき前記データ要素の数をそれぞれの処理ユニットに対して決定することと、決定された数に基き前記第1及び第2のウエーブフロントをそれぞれの処理ユニットに対してサイズ決定することと、を更に備える請求項1の方法。前記決定することは、前記第1の出力のメモリサイズを推定することと、前記第2の出力のメモリサイズを推定することと、前記第1及び第2の出力の推定されたメモリサイズを用いて必要なオンチップメモリサイズを計算することと、を備える請求項7の方法。前記ローンチすることは、前記第1のウエーブフロントを実行することと、前記第1のウエーブフロントの完了を検出することと、前記検出することの後に前記第2のウエーブフロントにより前記第1の出力をリードすることと、を備える請求項1の方法。前記第1のウエーブフロントを実行することは、前記第1のウエーブフロントのそれぞれのスレッドのための出力のサイズを決定することと、前記オンチップローカルメモリ内への出力のためのオフセットを前記第1のウエーブフロントのそれぞれのスレッドの各々に対して提供することと、を備える請求項9の方法。前記ローンチすることは、前記第2のウエーブフロントのそれぞれのスレッドのための出力のサイズを決定することと、前記第1の出力からリードするための前記オンチップローカルメモリ内へのオフセットを前記第2のウエーブフロントのそれぞれのスレッドに対して提供することと、前記第2の出力のそれぞれの部分をライトするための前記オンチップローカルメモリ内へのオフセットを前記第2のウエーブフロントの各スレッドに対して提供することと、を更に備える請求項9の方法。前記第2のウエーブフロントのそれぞれのスレッドのための出力のサイズは、予め定められた幾何増幅パラメータに基く請求項11の方法。前記複数の処理ユニットの各々は単一命令多重データSIMDプロセッサである請求項1の方法。前記オンチップローカルメモリは、対応するそれぞれの処理ユニット上で実行中のスレッドのみにとってアクセス可能である請求項1の方法。前記第1のウエーブフロント及び前記第2のウエーブフロントはそれぞれ頂点シェーダスレッド及び幾何シェーダスレッドを備える請求項1の方法。各々がオンチップローカルメモリを備える複数の処理ユニットを備えるプロセッサと、前記処理ユニットに結合されると共に複数の入力データ要素を記憶するように構成されるオフチップ共有メモリと、前記プロセッサに結合されるウエーブフロント発送モジュールと、前記プロセッサに結合されるウエーブフロント実行モジュールと、を備え、前記ウエーブフロント発送モジュールは、第2の種類のスレッドを備える第2のウエーブフロントが続く第1の種類のスレッドを備える第1のウエーブフロントを前記複数の処理ユニットの各々においてローンチするように構成され、前記第1のウエーブフロントは、前記オフチップ共有メモリから前記データ要素の一部をリードするように構成され、前記ウエーブフロント実行モジュールは、第1の出力をそれぞれの処理ユニットのオンチップローカルメモリにライトすることと、前記第2のウエーブフロントによって生成された第2の出力を前記オンチップローカルメモリにライトすることと、のために構成され、前記第2のウエーブフロントへの入力は前記第1の出力からの第1の複数のデータ要素を備えるシステム。前記ウエーブフロント実行モジュールは、前記第2のウエーブフロントを用いて前記第1の複数のデータ要素を処理して前記第2の出力を生成することのために更に構成され、前記第2の出力におけるデータ要素の数は前記第1の複数のデータ要素の数とは実質的に異なる請求項16のシステム。前記第2の出力は前記第1の出力の幾何増幅により生成される請求項17のシステム。前記第1及び第2のウエーブフロントはそれぞれ頂点シェーダスレッド及び幾何シェーダスレッドを備える請求項18のシステム。複数の処理ユニットを備えるプロセッサに、第2の種類のスレッドを備える第2のウエーブフロントが続く第1の種類のスレッドを備える第1のウエーブフロントであってオフチップ共有メモリから前記データ要素の一部を入力としてリードすると共に第1の出力を生成する第1のウエーブフロントを前記処理ユニットの各々においてローンチすることと、前記第1の出力をそれぞれの処理ユニットのオンチップローカルメモリにライトすることと、前記第2のウエーブフロントによって生成された第2の出力を前記オンチップローカルメモリにライトすることと、をさせるために記録されたコンピュータプログラム論理を有するコンピュータ可読媒体を備える有形的コンピュータプログラム製品であって、前記第2のウエーブフロントへの入力は前記第1の出力からの第1の複数のデータ要素を備える有形的コンピュータプログラム製品。種々の段階でデータ要素を処理するために多重の別々の種類のスレッドを有することは、パイプライン化を可能にし、従ってスループットの増大を容易にする。データ要素のセットを処理するシーケンスの各別個のスレッドは、その入力を共有メモリから取得すると共にその出力を共有メモリへとライトし、後続のスレッドは共有メモリから当該データをリードすることができる。共有メモリにおけるメモリアクセスは、一般に多数のクロックサイクルを消費する。同時スレッドの数が増えるのに従って、メモリアクセスに起因する遅延もまた増大し得る。多数のスレッドを並列に実行する多重の別々の処理ユニットを有する従来のプロセッサにおいては、メモリアクセス遅延は、全体的な処理速度の相当な減速の原因になり得る。そこで、データ項目のセットを処理するプログラムのシーケンスによりメモリアクセスのために浪費される時間を低減することによって、多重処理ユニットを有するプロセッサのデータ処理性能を改善するための方法及びシステムが必要とされる。多重処理ユニット内のオンチップローカルメモリを用いるプロセッサにおけるデータ処理性能を改善するための方法及び装置が開示される。ある実施形態に従うと、複数の処理ユニットを用いるプロセッサにおいてデータ要素を処理する方法は、第2の種類のスレッドを有する第2のウエーブフロントが続く第1の種類のスレッドを有する第1のウエーブフロントであってオフチップ共有メモリからデータ要素の一部を入力としてリードすると共に第1の出力を生成する第1のウエーブフロントを処理ユニットの各々においてローンチすることと、第1の出力をそれぞれの処理ユニットのオンチップローカルメモリにライトすることと、第2のウエーブフロントによって生成された第2の出力をオンチップローカルメモリにライトすることと、を含み、第2のウエーブフロントへの入力は第1の出力からの第1の複数のデータ要素を備える。別の実施形態は、各々がオンチップローカルメモリを備える複数の処理ユニットを備えるプロセッサと、処理ユニットに結合されると共に複数の入力データ要素を記憶するように構成されるオフチップ共有メモリと、ウエーブフロント発送モジュールと、ウエーブフロント実行モジュールと、を含むシステムである。ウエーブフロント発送モジュールは、第2の種類のスレッドを備える第2のウエーブフロントが続く第1の種類のスレッドを備える第1のウエーブフロントを複数の処理ユニットの各々においてローンチするように構成され、第1のウエーブフロントは、オフチップ共有メモリからデータ要素の一部をリードするように構成される。ウエーブフロント実行モジュールは、第1の出力をそれぞれの処理ユニットのオンチップローカルメモリにライトすることと、第2のウエーブフロントによって生成された第2の出力をオンチップローカルメモリにライトすることと、のために構成され、第2のウエーブフロントへの入力は第1の出力からの第1の複数のデータ要素を含む。更に別の実施形態は、複数の処理ユニットを備えるプロセッサに、第2の種類のスレッドを備える第2のウエーブフロントが続く第1の種類のスレッドを備える第1のウエーブフロントであってオフチップ共有メモリからデータ要素の一部を入力としてリードすると共に第1の出力を生成する第1のウエーブフロントを処理ユニットの各々においてローンチすることと、第1の出力をそれぞれの処理ユニットのオンチップローカルメモリにライトすることと、第2のウエーブフロントによって生成された第2の出力をオンチップローカルメモリにライトすることと、をさせるために記録されたコンピュータプログラム論理を有するコンピュータ可読媒体を備える有形的コンピュータプログラム製品であり、第2のウエーブフロントへの入力は第1の出力からの第1の複数のデータ要素を備える。本発明の更なる実施形態、特徴及び利点並びに本発明の種々の実施形態の構成及び動作は、添付図面を参照して以下に詳細に説明される。本発明はここでは特定の応用のための例示的な実施形態と共に説明されるが、本発明はそれらに限定されないことが理解されるべきである。ここに提供される教示を利用可能な当業者であれば、その範囲内及び本発明が有意に有用であろう追加的な分野における追加的な修正、応用及び実施形態を認識するであろう。本発明の実施形態は、多重処理ユニットが同時に共有メモリにアクセスする任意のコンピュータシステム又はコンピューティングデバイスにおいて用いられてよい。何ら限定されないが、例えば、本発明の実施形態は、コンピュータ、ゲームプラットフォーム、エンタテーメントプラットフォーム、パーソナルデジタルアシスタント、モバイルコンピューティングデバイス、テレビジョン及びビデオプラットフォームを含んでいてよい。最新のコンピュータシステムは、限定はされないが、例えば、多重の中央処理ユニットCPU及びグラフィクスプロセッサユニットGPU等の多重プロセッサ並びに何らかの処理をプロセッサから軽減するメモリ制御器及び/又は直接メモリアクセスDMA制御器等の他の制御器を有して、多重処理が可能である。また、多くのグラフィクス処理デバイスにおいては、例えば、同時に処理される多重データストリームを有することにより、相当量の並列処理が可能になる。そのような多重処理及び並列処理は、システムの効率及び速度を大幅に増大させる一方で、競合、即ち多重のデバイス及び/又はプロセスが同じシステム資源に同時にアクセスし又はそれを用いようとすること、に起因する問題を含む多くの問題を生じさせる。例えば、多くのデバイス及び/又はプロセスは、それらの処理を実行するために共有メモリにアクセスする必要がある。しかし、共有メモリへのインタフェースの数は、アクセスに対する全ての同時要求をサポートするのに十分ではないであろうから、競合が生じ、処理を継続するために共有メモリにアクセスする必要のある1つ以上のシステムデバイス及び/又はプロセスが遅延することがある。グラフィクス処理デバイスにおいては、頂点シェーダ、幾何シェーダ及び画素シェーダ等の種々のプロセッサが、メモリに記憶されているグラフィクスオブジェクト即ち頂点データ、画素データをリードし、ライトし、操作し且つ/又は処理するために、メモリにアクセスする必要がある。例えば各シェーダは、その処理サイクルの入力リード段階及び出力ライト段階において共有メモリにアクセスすることがある。頂点シェーダ、幾何シェーダ及び画素シェーダを備えるグラフィクスパイプラインは、任意の所与の時刻での処理の異なる段階において各種類のシェーダにデータ要素のセットを同時に処理させることによって、何らかのメモリアクセス遅延からシステムを保護することを支援する。グラフィクスパイプラインの一部が、メモリ内のデータにアクセスする際に遅延の増大に直面すると、システム動作における全体的な減速、及び/又はメモリアクセス遅延を隠すのに十分な処理の同時性が生じるようにパイプラインを制御するための追加的な複雑性を招く可能性がある。多重処理ユニット、例えば各ユニットが幾つかのスレッドを同時に実行可能な多重の単一命令多重データSIMD処理ユニット又は多重の他の算術及び論理ユニットALUを有するデバイスにおいては、多重処理デバイス及び各処理デバイス内の多重スレッドが共有メモリに実質的に同時にアクセスすることに起因して、競合遅延は更に悪化する可能性がある。例えば多重SIMD処理ユニットを有するグラフィクス処理デバイスにおいては、画素データのセットはスレッド群のシーケンスによって処理される。各処理ユニットにはスレッドのウエーブフロントが割り当てられる。スレッドのウエーブフロントは、スレッド群からの1つ以上のスレッドである。ウエーブフロント内の複数のスレッドによる同時アクセス要求に起因して及び他の処理ユニット内で実行中の他のウエーブフロントに起因して、メモリアクセスに対する競合が増大し得る。本発明の実施形態は、それぞれの処理ユニットにとってローカルなオンチップメモリを利用して、後続のスレッドによる入力として用いられることになる種々のスレッドの出力を記憶して、それによりオフチップメモリに対する往復トラフィックを低減する。オンチップローカルメモリは、コスト及びチップレイアウトを含む理由により、オフチップ共有メモリよりもサイズが小さい。従って、オンチップローカルメモリの効率的な使用が必要とされる。本発明の実施形態は、それぞれの処理ユニットで処理中のデータ要素及び各処理ユニット内のオンチップローカルメモリの利用可能性等の種々の要因に基いてそれぞれのスレッドウエーブを複数の処理ユニットの間で分散させるように、プロセッサを構成する。本発明の実施形態は、処理ユニット上で実行中の連続的なスレッドが、それらの入力及び出力をそれぞれオフチップメモリよりはむしろオンチップメモリからリードし及びオンチップメモリへとライトすることを可能にする。オフチップメモリに対する処理ユニットのトラフィック往復を低減することによって、本発明の実施形態は、システムの速度及び効率を改善し、またより短いパイプラインを容易にすることによってシステムの複雑性を低減することができる。図1は本発明の実施形態に従うコンピュータシステム100を示している。コンピュータシステム100は、制御プロセッサ101、グラフィクス処理デバイス102、共有メモリ103及び通信基盤104を含む。例えばディスプレイ、メモリ制御器、デバイス制御器等の種々の他のコンポーネントがコンピュータシステム100内に含まれていてもよい。制御プロセッサ101は、中央処理ユニットCPU、フィールドプログラム可能ゲートアレイFPGA、特定用途向け集積回路ASIC、デジタル信号プロセッサDSP等の1つ以上のプロセッサを含み得る。制御プロセッサ101は、コンピュータシステム100の全体動作を制御する。共有メモリ103は、ランダムアクセスメモリRAM又はダイナミックランダムアクセスメモリDRAM等の1つ以上のメモリユニットを含み得る。ディスプレイデータ、特に画素データであるが制御データを含むこともある、は共有メモリ103内に記憶される。共有メモリ103は、ここにおけるようなグラフィクス処理デバイスの関連では、フレームに関係するデータが維持されるフレームバッファ区域を含んでいてよい。共有メモリ103へのアクセスは、1つ以上のメモリ制御器図示せずにより連携させられ得る。コンピュータシステム100内で生成されたディスプレイデータ又はビデオ再生デバイス等の外部デバイスを用いてコンピュータシステム100に入力されたディスプレイデータのいずれかが、共有メモリ103内に記憶され得る。共有メモリ103内に記憶されたディスプレイデータは、当該データを操作及び/又は処理するグラフィクス処理デバイス102のコンポーネントによってアクセスされ、その後に、当該操作及び/又は処理されたディスプレイデータが例えばディスプレイ図示せず等の別のデバイスへと送信される。ディスプレイは、液晶ディスプレイLCD、陰極線管CRTディスプレイ又は任意の他の種類のディスプレイデバイスを含み得る。本発明の幾つかの実施形態においては、ディスプレイ、及び例えばディスプレイ制御器等のディスプレイに必要なコンポーネントの幾つかは、コンピュータシステム100の外部にあってよい。通信基盤104は、周辺コンポーネント相互接続拡張PCI-E、イーサネット登録商標、ファイヤワイヤ、ユニバーサルシリアルバスUSB等の1つ以上のデバイス相互接続を含む。通信基盤104はまた、グラフィクス処理デバイス102をディスプレイに接続するために、限定はされないが、組み込み型ディスプレイポートeDP、低電圧ディスプレイ規格LVDS、デジタルビデオインタフェースDVI又は高詳細度マルチメディアインタフェースHDMI登録商標等の1つ以上のデータ伝送規格を含むことができる。本発明の実施形態に従うグラフィクス処理デバイス102は、各々がそれ自身のローカルメモリストア例えばオンチップローカルメモリを有する複数の処理ユニットを含む。グラフィクス処理デバイス102はまた、メモリ103への及びメモリ103からのトラフィックが大幅に低減されるように、スレッドのシーケンスを並列に実行することを複数の処理ユニットに展開するための論理を含む。実施形態に従うグラフィクス処理デバイス102は、グラフィクス処理ユニットGPU、汎用グラフィクス処理ユニットGPGPU又は他の処理デバイスであってよい。実施形態に従うグラフィクス処理デバイス102は、コマンドプロセッサ105、シェーダコア106、頂点グルーパ及びテセレータVGT107、シーケンサSQ108、シェーダパイプライン補間器SPI109、パラメータキャッシュ110シェーダエクスポート、SXとも称される、グラフィクス処理デバイス内部相互接続113、ウエーブフロント発送モジュール130及びウエーブフロント実行モジュール132を含む。図1には示されないが、例えばスキャン変換器、メモリキャッシュ、プリミティブアセンブラ、シェーダコア106内で実行中のプロセスによる共有メモリへのアクセスを連携させるメモリ制御器、シェーダコア106により処理されたデータのレンダリング及びディスプレイを連携させるディスプレイ制御器、等の他のコンポーネントがグラフィクス処理デバイス102内に含まれていてよい。コマンドプロセッサ105は、グラフィクス処理デバイス102上での実行のための命令を制御プロセッサ101から受け取ることができる。コマンドプロセッサ105は、制御プロセッサ101から受け取ったコマンドを解釈すると共にコンポーネント106、107、108及び109等のグラフィクス処理デバイス102の実行コンポーネントに対して適切な命令を発行するように動作する。例えば特定の画像をディスプレイ上にレンダリングするための命令を受け取ると、コマンドプロセッサ105は、その画像をレンダリングすることをコンポーネント106、107、108及び109にさせる1つ以上の命令を発行する。ある実施形態においては、コマンドプロセッサは、スレッド群のシーケンス、例えば画像をレンダリングするために頂点のセットを処理する頂点シェーダ、幾何シェーダ及び画素シェーダを備えるシーケンスを開始する命令を発行することができる。例えばシステムメモリ103からの頂点データは、処理ユニットがアクセス可能な汎用レジスタ内へと投入されてよく、頂点データは次いで、シェーダコア106内のシェーダのシーケンスを用いて処理され得る。シェーダコア106は、シェーダプログラム例えば頂点シェーダ、幾何シェーダ及び画素シェーダ及び他の計算集約型プログラム等の命令を実行するように構成される複数の処理ユニットを含む。シェーダコア106内の各処理ユニット112は、ウエーブフロントとして知られる複数のスレッドを同時に実行するように構成される。ウエーブフロントの最大サイズは設定可能である。各処理ユニット112は、オンチップローカルメモリ113に結合される。オンチップローカルメモリは、スタティックランダムアクセスメモリSRAM及び組み込み型ダイナミックランダムアクセスメモリEDRAM等の任意の種類のダイナミックメモリであってよく、そのサイズ及び性能は、コスト及び性能等の種々の考慮に基づいて決定されてよい。ある実施形態においては、各処理ユニットオンチップローカルメモリ113は、それぞれの処理ユニットのプライベートメモリとして構成される。ある実施形態に従うと、それぞれの処理ユニット内で処理中のスレッドのみがオンチップローカルメモリにアクセスするので、処理ユニット内で実行中のスレッドによるオンチップローカルメモリへのアクセスは、実質的にほとんど競合しない。VGT107は以下の主たるタスクを行う。即ち、メモリから頂点インデックスをフェッチしてどの頂点が既に処理されていて従って再処理される必要がないのかを決定すること等の頂点インデックス再使用決定を行うことと、クワッドプリミティブ及びポリゴンプリミティブを三角形プリミティブに変換することと、プリミティブテセレーションのためのテセレーションファクタを計算することと、である。本発明の実施形態においては、VGTはまた、それぞれのウエーブフロントの各スレッドに対してオンチップローカルメモリ内にオフセットを提供することができ、また種々のシェーダから出力される各頂点及び/又はプリミティブがどのオンチップローカルメモリ上に配置されるのかについての経過を追跡することができる。SQ108は、頂点ベクトルデータをVGT107から受け取り、画素ベクトルデータをスキャン変換器から受け取る。SQ108は、SPI109、シェーダコア106及びシェーダエクスポート110のための主制御器である。SQ108は、頂点ベクトル及び画素ベクトル動作、頂点及び画素シェーダ入力データ管理、エクスポート資源のためのメモリ割り当て、多重SIMD及び資源種類のためのスレッド裁定、シェーダプロセッサのための制御フロー及びALU実行、シェーダ及び一定アドレシング並びに他の制御機能を管理する。SPI109は、シェーダコア106内の処理ユニットへの入力データを決定すると共にロードするための入力段階ストレージ及び前処理論理を含む。画素毎のデータを作成するために、補間器のバンクは、当該分野で既知の方法において、例えばスキャン変換器が提供した重心座標でプリミティブ毎頂点データを補間し、画素シェーダのための画素毎データを作成する。本発明の実施形態においては、SPIはまた、ウエーブフロントのサイズと各ウエーブフロントが実行のためにどこに発送されるのかとを決定することができる。SX110は頂点パラメータを含むデータを保持するためのオンチップバッファである。ある実施形態に従うと、頂点シェーダ及び/又は画素シェーダの出力は、フレームバッファ又は他のオフチップメモリにエクスポートされる前にSX内に記憶され得る。ウエーブフロント発送モジュール130は、本発明のある実施形態に従いスレッドのウエーブフロントのシーケンスを処理ユニット112に割り当てるように構成される。ウエーブフロント発送モジュール130は、例えば、各処理ユニットのローカルメモリ内で利用可能なメモリと、各処理ユニットへと発送されるべきスレッドウエーブフロントのシーケンスと、各処理ユニットへと発送されるウエーブフロントのサイズと、を決定する論理を含むことができる。ウエーブフロント実行モジュール132は、本発明のある実施形態に従い複数の処理ユニット112内の各ウエーブフロントの論理を実行するように構成される。ウエーブフロント実行モジュール132は、例えば、処理ユニット112内の頂点シェーダ、幾何シェーダ及び画素シェーダの異なるウエーブフロントを実行することと、グラフィクス処理パイプラインの全体処理を高速化するためにそれぞれのオンチップローカルメモリ113内のシェーダの各々からの中間結果を記憶することと、のための論理を含むことができる。データ増幅モジュール133は、入力データ要素を増幅又は逆増幅して入力データよりも大きい出力データ要素セットを生成するための論理を含む。ある実施形態に従うと、データ増幅モジュール133は、幾何増幅のための論理を含む。一般にデータ増幅は、相対的に単純な入力データセットからの複雑なデータセットの生成を参照する。データ増幅の結果、入力データセットよりも大きな若しくは小さな数の又は入力データセットと同じ数のデータ要素を有する出力データセットをもたらすことができる。ある実施形態に従うシェーダプログラム134は、第1、第2及び第3のシェーダプログラムを含む。処理ユニット112は、各ウエーブフロントが複数の第1、第2及び第3のシェーダプログラムを備えるウエーフロントのシーケンスを実行する。本発明のある実施形態に従うと、第1のシェーダプログラムは頂点シェーダを備え、第2のシェーダプログラムは幾何シェーダGSを備え、そして第3のシェーダプログラムは画素シェーダ、計算シェーダ等を備える。頂点シェーダVSは、頂点をリードし、それらを処理し、そして結果をメモリへ出力する。新たなプリミティブは導入しない。GSがアクティブである場合には、頂点シェーダは、ある種のエクスポートシェーダESとして参照されることがある。頂点シェーダはフェッチサブルーチンFSを呼び出すことができ、フェッチサブルーチンは、実行目的で頂点プログラムの一部として取り扱われる頂点データをフェッチするための特別なグローバルプログラムである。従来のシステムにおいては、VS出力は、幾何シェーダGSがアクティブかどうかに応じて、システムメモリ内のバッファか又はパラメータキャッシュ及び位置バッファかのいずれかに向けられる。本発明の実施形態においては、VSの出力は、GSが実行中である処理ユニットのオンチップローカルメモリに向けられる。幾何シェーダGSは、典型的にはVS出力からプリミティブをリードし、また各入力されたプリミティブに対して1つ以上のプリミティブを出力としてライトする。GSがアクティブである場合、従来のシステムにおいては、オフチップシステムメモリに対してリード/ライトするためには、直接メモリアクセスDMAコピープログラムがアクティブにされる必要がある。従来のシステムにおいては、GSは、VSによって作成されたオフチップメモリバッファからの複数の頂点を同時にリードすることができ、そして可変数のプリミティブを第2のメモリバッファへと出力する。本発明の実施形態に従うと、GSは、その入力をリードすると共にその出力を、GSが実行中である処理ユニットのオンチップローカルメモリへとライトするように構成される。画素シェーダPS、即ちフラグメントシェーダは、従来のシステムにおいては、例えばパラメータキャッシュ、パラメータキャッシュに関連付けられる位置バッファ、システムメモリ及びVGTを含む種々のロケーションから入力をリードする。PSは、個々の画素クワッド2×2アレイに配置される4つの画素データ要素を処理し、そして1つ以上のフレームバッファを含み得る1つ以上のメモリバッファへと出力をライトする。本発明の実施形態においては、PSは、GSが実行される処理ユニットのオンチップローカルメモリ内のGSにより生成され記憶されるデータを入力としてリードするように構成される。モジュール130~134を指定する処理論理は、C、C又はアセンブリ等のプログラミング言語を用いて実装されてよい。別の実施形態においては、モジュール130~134の1つ以上のための論理命令は、ここに説明される本発明の側面を具現化するハードウエアデバイスを作り出すためのマスクワーク/フォトマスクの生成を通して最終的に製造プロセスを構成することを可能にするベリログ、RTL及びネットリスツ等のハードウエア記述言語において指定され得る。この処理論理及び/又は論理命令は、磁気ディスク、光学ディスクCD-ROM、DVD-ROM等、フラッシュディスク等を含む任意の既知のコンピュータ可読媒体内に配置され得る。図2は本発明のある実施形態に従い複数の処理ユニットを備えるプロセッサにおけるデータの処理を示すフローチャート200である。本発明の実施形態に従うと、データはスレッドウエーブフロントのシーケンスによって処理され、ここでスレッドのシーケンスへの入力はオフチップシステムメモリからリードされ、またスレッドのシーケンスの出力はオフチップメモリ内に記憶されるが、中間結果が、それぞれの処理ユニットに関連付けられるオンチップローカルメモリ内に記憶される。ステップ202では、各処理ユニットにおいて処理され得る入力データ要素の数が決定される。ある実施形態に従うと、入力データの処理のためのメモリ要求のサイズを決定するために、入力データ及びシェーダプログラムが解析される。例えば、各第1の種類のスレッド例えば頂点シェーダの出力のサイズ及び各第2の種類のスレッド例えば幾何シェーダの出力のサイズが決定され得る。入力データ要素は、例えば、画像をレンダリングするのに用いられることになる頂点データであってよい。ある実施形態に従うと、頂点シェーダ処理は新たなデータ要素を作成せず、従って頂点シェーダの出力は入力と実質的に同じサイズである。ある実施形態に従うと、幾何シェーダは幾何増幅を行うことができ、その結果、入力データ要素の増大がもたらされ、入力よりも相当大きなサイズの出力が生成される。また、幾何増幅の結果として、入力よりも相当小さなサイズ又は入力と実質的に同じサイズを有する出力がもたらされることもある。ある実施形態に従うと、VGTは、各入力された頂点に対してGSによって幾つの出力頂点が生成されるのかを決定する。複数の処理ユニットの各々において処理され得る入力頂点データの最大量は、オンチップローカルメモリのサイズ並びに第1及び第2の種類の複数のスレッドの出力を記憶するのに必要なメモリのサイズに少なくとも部分的に基づいて決定され得る。ステップ204では、ウエーブフロントが構成される。ある実施形態に従うと、第1及び第2の種類のスレッドの出力を各処理ユニットのオンチップローカルメモリ内に記憶するためのメモリ要求に基づいて、各種類のスレッドのスレッド最大数が決定され得る。例えば、複数の入力データ要素を処理するための頂点シェーダスレッド、幾何シェーダスレッド及び画素シェーダスレッドの最大数は、ステップ202で決定されたメモリ要求に基づいて決定され得る。ある実施形態に従うと、SPIが、どの頂点、従ってどのスレッドが処理のためのどの処理ユニットに割り当てられるのかを決定する。ステップ206では、それぞれの第1のウエーブフロントが処理ユニットへと発送される。第1のウエーブフロントは第1の種類のスレッドを含む。ある実施形態に従うと、第1のウエーブフロントは複数の頂点シェーダを備える、各第1のウエーブフロントには、その出力をオンチップローカルメモリ内にライトするための基本アドレスが設けられている。ある実施形態に従うと、SPIが、各第1のウエーブフロントのための基本アドレスをSQに提供する。ある実施形態においては、VGT又は他の論理コンポーネントは、ウエーブフロント内の各スレッドにオフセットを設けることができ、そこからオンチップローカルメモリ内でのリード又はライトが可能である。ステップ208では、第1のウエーブフロントの各々は、その入力をオフチップメモリからリードする。ある実施形態に従うと、各第1のウエーブフロントは、処理されるべき頂点等のデータをリトリーブするするために、メモリ制御器を介してシステムメモリにアクセスする。各第1のウエーブフロントにより処理されるべき頂点は、前もって識別されたものであることがあり、また当該データのメモリ内のアドレスは、例えばVGT内のそれぞれの第1のウエーブフロントに提供されたものであることがある。システムメモリへのアクセス及びシステムメモリからのデータ要素のリーディングは、上述した競合問題に起因して、比較的大きな数のクロックサイクルを消費し得る。それぞれの第1のウエーブフロント内の各スレッドは、基本アドレスを決定し、そこからその入力頂点をオンチップローカルメモリからリードする。各スレッドのためのそれぞれの基本アドレスは、例えばそれぞれのウエーブフロント内のスレッドを識別するシーケンシャルスレッド識別子、1つのスレッドのための入力によって占められるメモリ空間を表すステップサイズ、及び当該第1のウエーブフロントに割り当てられた入力頂点のブロックへの基本アドレスに基づいて計算され得る。ステップ210では、第1のウエーブフロントの各々がそれぞれの処理ユニット内で実行される。ある実施形態に従うと、頂点シェーダ処理がステップ210で生じる。ステップ210では、第1のウエーブフロント内の各スレッドは、その基本出力アドレスをオンチップローカルメモリ内へと計算することができる。各スレッドのための基本出力アドレスは、例えばそれぞれのウエーブフロント内のスレッドを識別するシーケンシャルスレッド識別子、それぞれのウエーブフロントのための基本出力アドレス、及び各スレッドのためのメモリ空間を表すステップサイズに基づいて計算され得る。別の実施形態においては、第1のウエーブフロント内の各スレッドは、その出力基本アドレスを、対応する第1のウエーブフロントのための基本出力アドレス、及びスレッドが発送されたときに提供されたオフセットに基づいて計算することができる。ステップ212では、ウエーブフロントの各々の出力が、それぞれのオンチップローカルメモリへとライトされる。ある実施形態に従うと、各第1のウエーブフロント内のスレッドの各々の出力が、それぞれのオンチップローカルメモリ内へとライトされる。ウエーブフロント内の各スレッドは、その出力を、ステップ210で決定されたそれぞれの出力アドレスへとライトすることができる。ステップ214では、それぞれの第1のウエーブフロントの完了が決定される。ある実施形態に従うと、第1のウエーブフロント内の各スレッドは、オンチップローカルメモリ、システムメモリ若しくは汎用レジスタ内にフラグをセットすることができ、又はスレッドがその処理を完了したことをシステムの1つ以上の他のコンポーネントに示す任意の他の方法で信号をアサートすることができる。第1のウエーブフロントによる処理の完了を示すフラグ及び/又は信号は、第1のウエーブフロントの出力へのアクセスを他のスレッドウエーブフロントに提供するために、システムのコンポーネントによってモニタリングされてよい。ステップ216では、第2のウエーブフロントが発送される。尚、図2においてはステップ214の後にステップ216があるが、他の実施形態においては、ステップ216はステップ214より先に行われてもよい。例えば処理ユニット内のスレッドウエーブフロントをパイプ化する場合、スレッドウエーブフロントは、1つ以上の先に発送されたウエーブフロントの完了の前に発送される。第2のウエーブフロントは第2の種類のスレッドを含む。ある実施形態に従うと、第2のウエーブフロントは複数の幾何シェーダスレッドを備える。各第2のウエーブフロントには、その入力をオンチップローカルメモリからリードするための基本アドレス及びその出力をオンチップローカルメモリ内にライトするための基本アドレスが設けられる。ある実施形態に従うと、各第2のウエーブフロントに対して、SPIは、それぞれ当該アドレスから入力をリードするため及び当該アドレスへ出力をライトするために、SQにローカルメモリ内の基本アドレスを提供する。SPIはまた、各スレッドウエーブフロントのウエーブ識別子の経過を追うことができ、また処理ユニットに既に割り当てられているデータ及び第1のウエーブフロントの要求に従ってそれぞれの第2のウエーブフロントがその処理ユニットに確実に割り当てられるようにすることができる。VGTは、頂点及びそれぞれの頂点が割り当てられる処理ユニットの経過を追跡することができる。VGTはまた、幾何シェーダスレッドに、それぞれのプリミティブに対応する全ての頂点が提供され得るように、頂点間の接続の経過を追跡することができる。ステップ218では、第2のウエーブフロントの各々は、その入力をオンチップローカルメモリからリードする。それぞれの処理ユニットにローカルなオンチップメモリへのアクセスは、システムメモリへのアクセスと比べて高速である。それぞれの第2のウエーブフロント内の各種類が基本アドレスを決定し、基本アドレスから当該種類の入力データをオンチップローカルメモリからリードする。各スレッドのためのそれぞれの基本アドレスは、例えば、それぞれのウエーブフロント内のスレッドを識別するシーケンシャルスレッド識別子、1つのスレッドのための入力によって占められるメモリ空間を表すステップサイズ、及び当該第2のウエーブフロントに割り当てられた入力頂点のブロックへの基本アドレスに基づいて計算され得る。ステップ220では、第2のウエーブフロントの各々がそれぞれの処理ユニット内で実行される。ある実施形態に従うと、幾何シェーダ処理がステップ220で生じる。ステップ220においては、第2のウエーブフロント内の各スレッドは、オンチップローカルメモリ内へのその基本出力アドレスを計算することができる。各スレッドのための基本出力アドレスは、例えば、それぞれのウエーブフロント内のスレッドを識別するシーケンシャルスレッド識別子、それぞれのウエーブフロントのための基本出力アドレス、及び各スレッドのためのメモリ空間を表すステップサイズに基づいて計算され得る。別の実施形態においては、第2のウエーブフロント内の各スレッドは、その出力基本アドレスを、対応する第2のウエーブフロントのための基本出力アドレス、及びスレッドが発送されたときに提供されたオフセットに基づいて計算することができる。ステップ222では、第2のウエーブフロントのスレッドの各々によって読み込まれた入力データ要素が増幅される。ある実施形態に従うと、幾何シェーダスレッドの各々は、幾何増幅における当該結果を処理することを行う。ステップ224では、第2のウエーブフロントの各々の出力が、それぞれのオンチップローカルメモリへとライトされる。ある実施形態に従うと、それぞれの第2のウエーブフロント内のスレッドの各々の出力は、それぞれのオンチップローカルメモリ内へとライトされる。ウエーブフロント内の各スレッドは、その出力をステップ216で決定されたそれぞれの出力アドレスへとライトすることができる。ステップ226では、それぞれの第2のウエーブフロントの完了が決定される。ある実施形態に従うと、第2のウエーブフロント内の各スレッドは、オンチップローカルメモリ、システムメモリ若しくは汎用レジスタ内にフラグをセットすることができ、又はスレッドがその処理を完了したことをシステムの1つ以上の他のコンポーネントに示す任意の他の方法で信号をアサートすることができる。第2のウエーブフロントによる処理の完了を示すフラグ及び/又は信号は、第2のウエーブフロントの出力へのアクセスを他のスレッドウエーブフロントに提供するために、システムのコンポーネントによってモニタリングされてよい。ある実施形態においては、第2のウエーブフロントの完了に際して、対応する第1のウエーブフロントの出力によって占められているオンチップローカルメモリは、割り当て解除されて利用可能にされてよい。ステップ228では、第3のウエーブフロントが発送される。第3のウエーブフロントは第3の種類のスレッドを含む。ある実施形態に従うと、第3のウエーブフロントは複数の画素シェーダスレッドを備える。各第3のウエーブフロントには、その入力をオンチップローカルメモリからリードするための基本アドレスが設けられる。ある実施形態に従うと、各第3のウエーブフロントに対して、SPIは、それぞれ当該アドレスから入力をリードするため及び当該アドレスへ出力をライトするために、SQにローカルメモリ内の基本アドレスを提供する。SPIはまた、各スレッドウエーブフロントのウエーブ識別子の経過を追うことができ、また処理ユニットに既に割り当てられているデータ及び第3のウエーブフロントの要求に従ってそれぞれの第3のウエーブフロントがその処理ユニットに確実に割り当てられるようにすることができる。ステップ230では、第3のウエーブフロントの各々は、その入力をオンチップローカルメモリからリードする。それぞれの第3のウエーブフロント内の各種類が基本アドレスを決定し、基本アドレスから当該種類の入力データをオンチップローカルメモリからリードする。各スレッドのためのそれぞれの基本アドレスは、例えば、それぞれのウエーブフロント内のスレッドを識別するシーケンシャルスレッド識別子、1つのスレッドのための入力によって占められるメモリ空間を表すステップサイズ、及び当該第3のウエーブフロントに割り当てられた入力頂点のブロックへの基本アドレスに基づいて計算され得る。ステップ232では、第3のウエーブフロントの各々がそれぞれの処理ユニット内で実行される。ある実施形態に従うと、画素シェーダ処理がステップ232で生じる。ステップ234では、第3のウエーブフロントの各々の出力が、それぞれのオンチップローカルメモリ、システムメモリ又は他の場所へとライトされる。ある実施形態においては、第3のウエーブフロントの完了に際して、対応する第2のウエーブフロントの出力によって占められているオンチップローカルメモリは、割り当て解除されて利用可能にされてよい。アプリケーションに基づく1つ以上の追加的な処理ステップが方法200内に含まれ得る。ある実施形態に従うと、第1、第2及び第3のウエーブフロントは、画素データを処理すると共に画像をディスプレイへとレンダリングするグラフィクス処理パイプラインを作り出すようにローンチされる頂点シェーダ及び幾何シェーダを備える。尚、種々のウエーブフロントの順序は、特定のアプリケーションに依存する。また、ある実施形態に従うと、第3のウエーブフロントは、画素シェーダ並びに/又は計算シェーダ及びコピーシェーダ等の他のシェーダを備えていてよい。例えばコピーシェーダは、データをコンパクトにすることができ且つ/又はグローバルメモリへとライトすることができる。処理ユニットに関連付けられるオンチップローカルメモリに1つ以上のスレッドウエーブフロントの出力をライトすることによって、本発明の実施形態は、メモリアクセスのための競合に起因する遅延を大幅に低減する。図3は本発明の実施形態に従いステップ206を実装するための方法302~306のフローチャートである。ステップ302では、各第1のウエーブフロント内のスレッドの数が決定される。これは、限定はされないが、処理されるのに利用可能になるデータ要素、処理ユニットの数、各処理ユニット上で同時に実行可能なスレッドの最大数、及びそれぞれの処理ユニットに関連付けられるそれぞれのオンチップローカルメモリ内で利用可能なメモリの量、等の種々の要因に基づき決定され得る。ステップ304では、第1のウエーブフロントの各スレッドにより記憶され得る出力のサイズが決定される。この決定は、予め設定されたパラメータ又はプログラム命令及び/若しくは入力データのサイズに基づき動的に決定されたパラメータに基づき得る。ある実施形態に従うと、第1のウエーブフロントの各スレッドにより記憶され得る出力のサイズは、ここでは第1のウエーブフロントのステップサイズとも称され、第1のウエーブフロントをローンチするとき又は第1のウエーブフロントの実行中に、静的に又は動的にのどちらかで決定され得る。ステップ306では、各スレッドには、そのそれぞれの出力をライトするために、対応する処理ユニットに関連付けられるオンチップローカルメモリ内へのオフセットが提供される。オフセットは、それぞれのウエーブフロント内のスレッドを識別するシーケンシャルスレッド識別子、それぞれのウエーブフロントのための基本出力アドレス、及び各スレッドのためのメモリ空間を表すステップサイズに基づいて決定され得る。処理の間、各スレッドは、その出力をライトすべきローカルメモリ内の実際のオフセットを、スレッド発送に際して提供されたオフセット、ウエーブフロントのための基本出力アドレス、及びスレッドのステップサイズに基づき決定することができる。図4は本発明の実施形態に従いステップ216を実装するための方法402~406を示すフローチャートである。ステップ402では、第2のウエーブフロントのスレッドのためのステップサイズが決定される。ステップサイズは、第2のウエーブフロントのプログラム命令、最大ステップサイズを指定する予め設定されたパラメータ、予め設定されたパラメータ及びプログラム命令の組み合わせ、又は同様の方法に基づき決定され得る。ある実施形態に従うと、ステップサイズは、第2のウエーブフロントのそれぞれのスレッドによりリードされた入力データの、幾何シェーダによる幾何増幅等のデータ増幅を受け入れるように決定されるべきである。ステップ404では、それぞれの第2のウエーブフロント内の各スレッドには、オンチップローカルメモリ内のロケーションを決定するためのリードオフセットが設けられてよく、各スレッドはその入力をリードオフセットからリードすることができる。各スレッドは、実際のリードオフセットを、例えば実行の間に、リードオフセット、それぞれのウエーブフロントのための基本リードオフセット、及び対応する第1のウエーブフロントのスレッドのステップサイズに基づき決定することができる。ステップ406では、それぞれの第2のウエーブフロント内の各スレッドには、オンチップローカルメモリ内へのライトオフセットが設けられてよい。各スレッドは、実際のライトオフセットを、例えば実行の間に、ライトオフセット、それぞれのウエーブフロントのための基本ライトオフセット、及び第2のウエーブフロントのスレッドのステップサイズに基づき決定することができる。図5は処理ユニットの各々内で処理されるべきデータ要素を決定する方法502~506を示すフローチャートである。ステップ502では、各処理ユニットのオンチップローカルメモリ内に記憶されるべき第1のウエーブフロントの出力のサイズが推定される。ある実施形態に従うと、出力のサイズは、複数の頂点シェーダスレッドにより処理されるべき頂点の数に基づいて決定される。各処理ユニットにおいて処理されるべき頂点の数は、限定はされないが、処理されるべき頂点の総数、頂点を処理するのに利用可能な処理ユニットの数、各処理ユニットのために利用可能なオンチップローカルメモリの量、及び各入力された頂点に適用される処理、等の要因に基づいて決定され得る。ある実施形態に従うと、各頂点シェーダは、それが入力として読み込むのと同数の頂点を出力する。ステップ504では、各処理ユニットのオンチップローカルメモリ内に記憶されるべき第2のウエーブフロントの出力のサイズが推定される。ある実施形態に従うと、第2のウエーブフロントの出力のサイズは、第2のウエーブフロントのそれぞれのスレッドにより行われた入力データの増幅に少なくとも部分的に基づき推定される。例えば幾何シェーダによる処理の結果、幾何増幅は、入力プリミティブとは異なる数の出力プリミティブを生じさせ得る。データ増幅又は幾何増幅の大きさは、予め設定されたパラメータ及び/又はそれぞれのスレッドにおけるプログラム命令のアスペクトに基づいて決定され得る。ステップ506では、各プロセッサに関連付けられる必要な利用可能オンチップローカルメモリのサイズが、第1及び第2のウエーブフロントの出力のサイズを合計することによって決定される。本発明のある実施形態に従うと、各処理ユニットのオンチップローカルメモリは、第1及び第2のウエーブフロントの出力サイズの合計と少なくとも同程度の利用可能なメモリを有している必要がある。各処理ユニット内で処理されるべき頂点の数は、利用可能なオンチップローカルメモリの量並びに第1のウエーブフロント及び第2のウエーブフロントの出力の合計に基づいて決定され得る。結論概要及び要約の欄は、発明者によって検討された本発明の1つ以上のしかし全部ではない例示的な実施形態を説明することができ、従って本発明及び添付の特許請求の範囲を限定することが意図されているわけではけっしてない。特定の機能の実装及びそれらの関係性を示す機能構築ブロックを補助として、本発明が上述のように説明されてきた。これらの機能構築ブロックの境界は、説明の便宜上ここでは適宜画定されてきた。特定の機能及びそれらの関係性が適切に実行される限りにおいて、代替的な境界が画定され得る。特定の実施形態の上述した説明は、本発明の一般的性質を十分に明らかにするであろうから、他者は、当業者における知識を適用することによって、過度の実験なしに、本発明の一般的概念から逸脱することなく、そのような特定の実施形態を容易に修正し且つ/又は種々の応用に適応させることができる。従って、そのような適応及び修正は、ここに提示されている教示及び指針に基いて、開示されている実施形態と均等なものの意味及び範囲の範疇にあることが意図されている。ここでの用語等は、説明を目的としたものであって限定を目的としていないことが理解されるべきであり、本出願書類の用語等は教示及び指針の下で当業者によって解釈されるべきである。本発明の広さ及び範囲は、上述したいかなる例示的な実施形態によっても限定されるべきではなく、以下の特許請求の範囲及びそれらと均等なものに従ってのみ画定されるべきである。