(57)【要約】【解決手段】  多重処理ユニット内のオンチップローカルメモリを用いるプロセッサにおけるデータ処理性能を改善するための方法が開示される。ある実施形態に従うと、複数の処理ユニットを用いるプロセッサにおいてデータ要素を処理する方法は、第２の種類のスレッドを有する第２のウエーブフロントが続く第１の種類のスレッドを有する第１のウエーブフロントであってオフチップ共有メモリからデータ要素の一部を入力としてリードすると共に第１の出力を生成する第１のウエーブフロントを処理ユニットの各々においてローンチすることと、第１の出力をそれぞれの処理ユニットのオンチップローカルメモリにライトすることと、第２のウエーブフロントによって生成された第２の出力をオンチップローカルメモリにライトすることと、を含み、ここで第２のウエーブフロントへの入力は第１の出力からの第１の複数のデータ要素を備える。対応するシステム及びコンピュータプログラム製品の実施形態も開示される。【選択図】図２
2013541748.tif 000002
【特許請求の範囲】
【請求項１】
複数の処理ユニットを用いるプロセッサにおいてデータ要素を処理する方法であって、
第２の種類のスレッドを備える第２のウエーブフロントが続く第１の種類のスレッドを備える第１のウエーブフロントであってオフチップ共有メモリから前記データ要素の一部を入力としてリードすると共に第１の出力を生成する第１のウエーブフロントを前記処理ユニットの各々においてローンチすることと、
前記第１の出力をそれぞれの処理ユニットのオンチップローカルメモリにライトすることと、
前記第２のウエーブフロントによって生成された第２の出力を前記オンチップローカルメモリにライトすることと、を備え、
前記第２のウエーブフロントへの入力は前記第１の出力からの第１の複数のデータ要素を備える方法。
【請求項２】
前記第２のウエーブフロントを用いて前記第１の複数のデータ要素を処理して前記第２の出力を生成することを更に備え、
前記第２の出力におけるデータ要素の数は前記第１の複数のデータ要素の数とは実質的に異なる請求項１の方法。
【請求項３】
前記第２の出力におけるデータ要素の数は動的に決定される請求項２の方法。
【請求項４】
前記第２のウエーブフロントは１つ以上の幾何シェーダスレッドを備える請求項２の方法。
【請求項５】
前記第２の出力は前記第１の出力の幾何増幅により生成される請求項４の方法。
【請求項６】
前記第２のウエーブフロントに続いて第３のウエーブフロントを第１の処理ユニットにおいて実行することを更に備え、
前記第３のウエーブフロントは前記第２の出力を前記オンチップローカルメモリからリードする請求項１の方法。
【請求項７】
前記オンチップローカルメモリ内で利用可能なメモリに少なくとも基き処理されるべき前記データ要素の数をそれぞれの処理ユニットに対して決定することと、
決定された数に基き前記第１及び第２のウエーブフロントをそれぞれの処理ユニットに対してサイズ決定することと、を更に備える請求項１の方法。
【請求項８】
前記決定することは、
前記第１の出力のメモリサイズを推定することと、
前記第２の出力のメモリサイズを推定することと、
前記第１及び第２の出力の推定されたメモリサイズを用いて必要なオンチップメモリサイズを計算することと、を備える請求項７の方法。
【請求項９】
前記ローンチすることは、
前記第１のウエーブフロントを実行することと、
前記第１のウエーブフロントの完了を検出することと、
前記検出することの後に前記第２のウエーブフロントにより前記第１の出力をリードすることと、を備える請求項１の方法。
【請求項１０】
前記第１のウエーブフロントを実行することは、
前記第１のウエーブフロントのそれぞれのスレッドのための出力のサイズを決定することと、
前記オンチップローカルメモリ内への出力のためのオフセットを前記第１のウエーブフロントのそれぞれのスレッドの各々に対して提供することと、を備える請求項９の方法。
【請求項１１】
前記ローンチすることは、
前記第２のウエーブフロントのそれぞれのスレッドのための出力のサイズを決定することと、
前記第１の出力からリードするための前記オンチップローカルメモリ内へのオフセットを前記第２のウエーブフロントのそれぞれのスレッドに対して提供することと、
前記第２の出力のそれぞれの部分をライトするための前記オンチップローカルメモリ内へのオフセットを前記第２のウエーブフロントの各スレッドに対して提供することと、を更に備える請求項９の方法。
【請求項１２】
前記第２のウエーブフロントのそれぞれのスレッドのための出力のサイズは、予め定められた幾何増幅パラメータに基く請求項１１の方法。
【請求項１３】
前記複数の処理ユニットの各々は単一命令多重データ（ＳＩＭＤ）プロセッサである請求項１の方法。
【請求項１４】
前記オンチップローカルメモリは、対応するそれぞれの処理ユニット上で実行中のスレッドのみにとってアクセス可能である請求項１の方法。
【請求項１５】
前記第１のウエーブフロント及び前記第２のウエーブフロントはそれぞれ頂点シェーダスレッド及び幾何シェーダスレッドを備える請求項１の方法。
【請求項１６】
各々がオンチップローカルメモリを備える複数の処理ユニットを備えるプロセッサと、
前記処理ユニットに結合されると共に複数の入力データ要素を記憶するように構成されるオフチップ共有メモリと、
前記プロセッサに結合されるウエーブフロント発送モジュールと、
前記プロセッサに結合されるウエーブフロント実行モジュールと、を備え、
前記ウエーブフロント発送モジュールは、第２の種類のスレッドを備える第２のウエーブフロントが続く第１の種類のスレッドを備える第１のウエーブフロントを前記複数の処理ユニットの各々においてローンチするように構成され、前記第１のウエーブフロントは、前記オフチップ共有メモリから前記データ要素の一部をリードするように構成され、
前記ウエーブフロント実行モジュールは、
第１の出力をそれぞれの処理ユニットのオンチップローカルメモリにライトすることと、
前記第２のウエーブフロントによって生成された第２の出力を前記オンチップローカルメモリにライトすることと、のために構成され、
前記第２のウエーブフロントへの入力は前記第１の出力からの第１の複数のデータ要素を備えるシステム。
【請求項１７】
前記ウエーブフロント実行モジュールは、
前記第２のウエーブフロントを用いて前記第１の複数のデータ要素を処理して前記第２の出力を生成することのために更に構成され、
前記第２の出力におけるデータ要素の数は前記第１の複数のデータ要素の数とは実質的に異なる請求項１６のシステム。
【請求項１８】
前記第２の出力は前記第１の出力の幾何増幅により生成される請求項１７のシステム。
【請求項１９】
前記第１及び第２のウエーブフロントはそれぞれ頂点シェーダスレッド及び幾何シェーダスレッドを備える請求項１８のシステム。
【請求項２０】
複数の処理ユニットを備えるプロセッサに、
第２の種類のスレッドを備える第２のウエーブフロントが続く第１の種類のスレッドを備える第１のウエーブフロントであってオフチップ共有メモリから前記データ要素の一部を入力としてリードすると共に第１の出力を生成する第１のウエーブフロントを前記処理ユニットの各々においてローンチすることと、
前記第１の出力をそれぞれの処理ユニットのオンチップローカルメモリにライトすることと、
前記第２のウエーブフロントによって生成された第２の出力を前記オンチップローカルメモリにライトすることと、をさせるために記録されたコンピュータプログラム論理を有するコンピュータ可読媒体を備える有形的コンピュータプログラム製品であって、
前記第２のウエーブフロントへの入力は前記第１の出力からの第１の複数のデータ要素を備える有形的コンピュータプログラム製品。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明はプロセッサのデータ処理性能を改善することに関する。
【背景技術】
【０００２】
多重処理ユニットを有するプロセッサは、多数のデータ要素を並列処理する際にしばしば採用される。例えば、多重の単一命令多重データ(single instruction multiple data)（ＳＩＭＤ）処理ユニットを含むグラフィクスプロセッサ（ＧＰＵ）は、多数のグラフィクスデータ要素を並列に処理することが可能である。多くの場合、データ要素は、別々のスレッドのシーケンスによって、最終的な出力が得られるまで処理される。例えばＧＰＵにおいては、頂点シェーダ、幾何シェーダ及び画素シェーダを備える異なる種類のスレッドのシーケンスが、最終的な出力がディスプレイへのレンダリング(rendering)のために準備されるまで、データ項目のセットに対して順次動作することができる。
【発明の概要】
【発明が解決しようとする課題】
【０００３】
種々の段階でデータ要素を処理するために多重の別々の種類のスレッドを有することは、パイプライン化(pipelining)を可能にし、従ってスループットの増大を容易にする。データ要素のセットを処理するシーケンスの各別個のスレッドは、その入力を共有メモリから取得すると共にその出力を共有メモリへとライトし(write)、後続のスレッドは共有メモリから当該データをリードする(read)ことができる。共有メモリにおけるメモリアクセスは、一般に多数のクロックサイクルを消費する。同時スレッドの数が増えるのに従って、メモリアクセスに起因する遅延もまた増大し得る。多数のスレッドを並列に実行する多重の別々の処理ユニットを有する従来のプロセッサにおいては、メモリアクセス遅延は、全体的な処理速度の相当な減速の原因になり得る。
【０００４】
そこで、データ項目のセットを処理するプログラムのシーケンスによりメモリアクセスのために浪費される時間を低減することによって、多重処理ユニットを有するプロセッサのデータ処理性能を改善するための方法及びシステムが必要とされる。
【課題を解決するための手段】
【０００５】
多重処理ユニット内のオンチップローカルメモリを用いるプロセッサにおけるデータ処理性能を改善するための方法及び装置が開示される。ある実施形態に従うと、複数の処理ユニットを用いるプロセッサにおいてデータ要素を処理する方法は、第２の種類のスレッドを有する第２のウエーブフロントが続く第１の種類のスレッドを有する第１のウエーブフロントであってオフチップ共有メモリからデータ要素の一部を入力としてリードすると共に第１の出力を生成する第１のウエーブフロントを処理ユニットの各々においてローンチすることと、第１の出力をそれぞれの処理ユニットのオンチップローカルメモリにライトすることと、第２のウエーブフロントによって生成された第２の出力をオンチップローカルメモリにライトすることと、を含み、第２のウエーブフロントへの入力は第１の出力からの第１の複数のデータ要素を備える。
【０００６】
別の実施形態は、各々がオンチップローカルメモリを備える複数の処理ユニットを備えるプロセッサと、処理ユニットに結合されると共に複数の入力データ要素を記憶するように構成されるオフチップ共有メモリと、ウエーブフロント発送モジュールと、ウエーブフロント実行モジュールと、を含むシステムである。ウエーブフロント発送モジュールは、第２の種類のスレッドを備える第２のウエーブフロントが続く第１の種類のスレッドを備える第１のウエーブフロントを複数の処理ユニットの各々においてローンチするように構成され、第１のウエーブフロントは、オフチップ共有メモリからデータ要素の一部をリードするように構成される。ウエーブフロント実行モジュールは、第１の出力をそれぞれの処理ユニットのオンチップローカルメモリにライトすることと、第２のウエーブフロントによって生成された第２の出力をオンチップローカルメモリにライトすることと、のために構成され、第２のウエーブフロントへの入力は第１の出力からの第１の複数のデータ要素を含む。
【０００７】
更に別の実施形態は、複数の処理ユニットを備えるプロセッサに、第２の種類のスレッドを備える第２のウエーブフロントが続く第１の種類のスレッドを備える第１のウエーブフロントであってオフチップ共有メモリからデータ要素の一部を入力としてリードすると共に第１の出力を生成する第１のウエーブフロントを処理ユニットの各々においてローンチすることと、第１の出力をそれぞれの処理ユニットのオンチップローカルメモリにライトすることと、第２のウエーブフロントによって生成された第２の出力をオンチップローカルメモリにライトすることと、をさせるために記録されたコンピュータプログラム論理を有するコンピュータ可読媒体を備える有形的コンピュータプログラム製品であり、第２のウエーブフロントへの入力は第１の出力からの第１の複数のデータ要素を備える。
【０００８】
本発明の更なる実施形態、特徴及び利点並びに本発明の種々の実施形態の構成及び動作は、添付図面を参照して以下に詳細に説明される。
【図面の簡単な説明】
【０００９】
ここに組み込まれ且つ出願書類の一部を構成する添付の図面は、本発明の実施形態を示し、そして上述の一般的な説明及び下記の実施形態の詳細な説明と共に、本発明の原理を説明することに役立つ。
【００１０】
【図１】図１は本発明の実施形態に従うデータ処理デバイスを示す図である。
【００１１】
【図２】図２は本発明の実施形態に従い多重処理ユニットを有するプロセッサ上でデータを処理する例示的な方法を示す図である。
【００１２】
【図３】図３は本発明の実施形態に従い多重処理ユニットを有するプロセッサ上で第１のウエーブフロントを実行する例示的な方法を示す図である。
【００１３】
【図４】図４は本発明の実施形態に従い多重処理ユニットを有するプロセッサ上で第２のウエーブフロントを実行する例示的な方法を示す図である。
【００１４】
【図５】図５は本発明の実施形態に従いスレッドウエーブフロントの割り当てを決定するための方法を示す図である。
【発明を実施するための形態】
【００１５】
本発明はここでは特定の応用のための例示的な実施形態と共に説明されるが、本発明はそれらに限定されないことが理解されるべきである。ここに提供される教示を利用可能な当業者であれば、その範囲内及び本発明が有意に有用であろう追加的な分野における追加的な修正、応用及び実施形態を認識するであろう。
【００１６】
本発明の実施形態は、多重処理ユニットが同時に共有メモリにアクセスする任意のコンピュータシステム又はコンピューティングデバイスにおいて用いられてよい。何ら限定されないが、例えば、本発明の実施形態は、コンピュータ、ゲームプラットフォーム、エンタテーメントプラットフォーム、パーソナルデジタルアシスタント、モバイルコンピューティングデバイス、テレビジョン及びビデオプラットフォームを含んでいてよい。
【００１７】
最新のコンピュータシステムは、限定はされないが、例えば、多重の中央処理ユニット（ＣＰＵ）及びグラフィクスプロセッサユニット（ＧＰＵ）等の多重プロセッサ並びに何らかの処理をプロセッサから軽減するメモリ制御器及び／又は直接メモリアクセス（ＤＭＡ）制御器等の他の制御器を有して、多重処理が可能である。また、多くのグラフィクス処理デバイスにおいては、例えば、同時に処理される多重データストリームを有することにより、相当量の並列処理が可能になる。
【００１８】
そのような多重処理及び並列処理は、システムの効率及び速度を大幅に増大させる一方で、競合(contention)、即ち多重のデバイス及び／又はプロセスが同じシステム資源に同時にアクセスし又はそれを用いようとすること、に起因する問題を含む多くの問題を生じさせる。例えば、多くのデバイス及び／又はプロセスは、それらの処理を実行するために共有メモリにアクセスする必要がある。しかし、共有メモリへのインタフェースの数は、アクセスに対する全ての同時要求をサポートするのに十分ではないであろうから、競合が生じ、処理を継続するために共有メモリにアクセスする必要のある１つ以上のシステムデバイス及び／又はプロセスが遅延することがある。
【００１９】
グラフィクス処理デバイスにおいては、頂点シェーダ、幾何シェーダ及び画素シェーダ等の種々のプロセッサが、メモリに記憶されているグラフィクスオブジェクト（即ち頂点データ、画素データ）をリードし、ライトし、操作し且つ／又は処理するために、メモリにアクセスする必要がある。例えば各シェーダは、その処理サイクルの入力リード段階及び出力ライト段階において共有メモリにアクセスすることがある。頂点シェーダ、幾何シェーダ及び画素シェーダを備えるグラフィクスパイプラインは、任意の所与の時刻での処理の異なる段階において各種類のシェーダにデータ要素のセットを同時に処理させることによって、何らかのメモリアクセス遅延からシステムを保護することを支援する。グラフィクスパイプラインの一部が、メモリ内のデータにアクセスする際に遅延の増大に直面すると、システム動作における全体的な減速、及び／又はメモリアクセス遅延を隠すのに十分な処理の同時性が生じるようにパイプラインを制御するための追加的な複雑性を招く可能性がある。
【００２０】
多重処理ユニット、例えば各ユニットが幾つかのスレッドを同時に実行可能な多重の単一命令多重データ（ＳＩＭＤ）処理ユニット又は多重の他の算術及び論理ユニット（ＡＬＵ）を有するデバイスにおいては、多重処理デバイス及び各処理デバイス内の多重スレッドが共有メモリに実質的に同時にアクセスすることに起因して、競合遅延は更に悪化する可能性がある。例えば多重ＳＩＭＤ処理ユニットを有するグラフィクス処理デバイスにおいては、画素データのセットは「スレッド群(thread groups)」のシーケンスによって処理される。各処理ユニットにはスレッドのウエーブフロント(wavefront of threads)が割り当てられる。スレッドの「ウエーブフロント」は、スレッド群からの１つ以上のスレッドである。ウエーブフロント内の複数のスレッドによる同時アクセス要求に起因して及び他の処理ユニット内で実行中の他のウエーブフロントに起因して、メモリアクセスに対する競合が増大し得る。
【００２１】
本発明の実施形態は、それぞれの処理ユニットにとってローカルなオンチップメモリ(on-chip memory)を利用して、後続のスレッドによる入力として用いられることになる種々のスレッドの出力を記憶して、それによりオフチップメモリ(off-chip memory)に対する往復トラフィック(to/from traffic)を低減する。オンチップローカルメモリは、コスト及びチップレイアウトを含む理由により、オフチップ共有メモリよりもサイズが小さい。従って、オンチップローカルメモリの効率的な使用が必要とされる。本発明の実施形態は、それぞれの処理ユニットで処理中のデータ要素及び各処理ユニット内のオンチップローカルメモリの利用可能性等の種々の要因に基いてそれぞれのスレッドウエーブを複数の処理ユニットの間で分散させるように、プロセッサを構成する(configure)。本発明の実施形態は、処理ユニット上で実行中の連続的なスレッドが、それらの入力及び出力をそれぞれオフチップメモリよりはむしろオンチップメモリからリードし及びオンチップメモリへとライトすることを可能にする。オフチップメモリに対する処理ユニットのトラフィック往復を低減することによって、本発明の実施形態は、システムの速度及び効率を改善し、またより短いパイプラインを容易にすることによってシステムの複雑性を低減することができる。
【００２２】
図１は本発明の実施形態に従うコンピュータシステム１００を示している。コンピュータシステム１００は、制御プロセッサ１０１、グラフィクス処理デバイス１０２、共有メモリ１０３及び通信基盤１０４を含む。例えばディスプレイ、メモリ制御器、デバイス制御器等の種々の他のコンポーネントがコンピュータシステム１００内に含まれていてもよい。制御プロセッサ１０１は、中央処理ユニット（ＣＰＵ）、フィールドプログラム可能ゲートアレイ（ＦＰＧＡ）、特定用途向け集積回路（ＡＳＩＣ）、デジタル信号プロセッサ（ＤＳＰ）等の１つ以上のプロセッサを含み得る。制御プロセッサ１０１は、コンピュータシステム１００の全体動作を制御する。
【００２３】
共有メモリ１０３は、ランダムアクセスメモリ（ＲＡＭ）又はダイナミックランダムアクセスメモリ（ＤＲＡＭ）等の１つ以上のメモリユニットを含み得る。ディスプレイデータ、特に画素データであるが制御データを含むこともある、は共有メモリ１０３内に記憶される。共有メモリ１０３は、ここにおけるようなグラフィクス処理デバイスの関連では、フレームに関係するデータが維持されるフレームバッファ区域を含んでいてよい。共有メモリ１０３へのアクセスは、１つ以上のメモリ制御器（図示せず）により連携させられ得る。コンピュータシステム１００内で生成されたディスプレイデータ又はビデオ再生デバイス等の外部デバイスを用いてコンピュータシステム１００に入力されたディスプレイデータのいずれかが、共有メモリ１０３内に記憶され得る。共有メモリ１０３内に記憶されたディスプレイデータは、当該データを操作及び／又は処理するグラフィクス処理デバイス１０２のコンポーネントによってアクセスされ、その後に、当該操作及び／又は処理されたディスプレイデータが例えばディスプレイ（図示せず）等の別のデバイスへと送信される。ディスプレイは、液晶ディスプレイ（ＬＣＤ）、陰極線管（ＣＲＴ）ディスプレイ又は任意の他の種類のディスプレイデバイスを含み得る。本発明の幾つかの実施形態においては、ディスプレイ、及び例えばディスプレイ制御器等のディスプレイに必要なコンポーネントの幾つかは、コンピュータシステム１００の外部にあってよい。通信基盤１０４は、周辺コンポーネント相互接続拡張(Peripheral Component Interconnect Extended)（ＰＣＩ−Ｅ）、イーサネット（登録商標）(Ethernet（登録商標）)、ファイヤワイヤ(Firewire)、ユニバーサルシリアルバス(Universal Serial Bus)（ＵＳＢ）等の１つ以上のデバイス相互接続を含む。通信基盤１０４はまた、グラフィクス処理デバイス１０２をディスプレイに接続するために、限定はされないが、組み込み型ディスプレイポート(embedded DisplayPort)（ｅＤＰ）、低電圧ディスプレイ規格(low voltage display standard)（ＬＶＤＳ）、デジタルビデオインタフェース(Digital Video Interface)（ＤＶＩ）又は高詳細度マルチメディアインタフェース(High Definition Multimedia Interface)（ＨＤＭＩ（登録商標））等の１つ以上のデータ伝送規格を含むことができる。
【００２４】
本発明の実施形態に従うグラフィクス処理デバイス１０２は、各々がそれ自身のローカルメモリストア（例えばオンチップローカルメモリ）を有する複数の処理ユニットを含む。グラフィクス処理デバイス１０２はまた、メモリ１０３への及びメモリ１０３からのトラフィックが大幅に低減されるように、スレッドのシーケンスを並列に実行することを複数の処理ユニットに展開するための論理を含む。実施形態に従うグラフィクス処理デバイス１０２は、グラフィクス処理ユニット（ＧＰＵ）、汎用グラフィクス処理ユニット（ＧＰＧＰＵ）又は他の処理デバイスであってよい。実施形態に従うグラフィクス処理デバイス１０２は、コマンドプロセッサ１０５、シェーダコア１０６、頂点グルーパ及びテセレータ(vertex grouper and tesselator)（ＶＧＴ）１０７、シーケンサ（ＳＱ）１０８、シェーダパイプライン補間器(shader pipeline interpolator)（ＳＰＩ）１０９、パラメータキャッシュ１１０（シェーダエクスポート、ＳＸとも称される）、グラフィクス処理デバイス内部相互接続１１３、ウエーブフロント発送モジュール１３０及びウエーブフロント実行モジュール１３２を含む。図１には示されないが、例えばスキャン変換器、メモリキャッシュ、プリミティブアセンブラ、シェーダコア１０６内で実行中のプロセスによる共有メモリへのアクセスを連携させるメモリ制御器、シェーダコア１０６により処理されたデータのレンダリング及びディスプレイを連携させるディスプレイ制御器、等の他のコンポーネントがグラフィクス処理デバイス１０２内に含まれていてよい。
【００２５】
コマンドプロセッサ１０５は、グラフィクス処理デバイス１０２上での実行のための命令を制御プロセッサ１０１から受け取ることができる。コマンドプロセッサ１０５は、制御プロセッサ１０１から受け取ったコマンドを解釈すると共にコンポーネント１０６、１０７、１０８及び１０９等のグラフィクス処理デバイス１０２の実行コンポーネントに対して適切な命令を発行するように動作する。例えば特定の画像をディスプレイ上にレンダリングするための命令を受け取ると、コマンドプロセッサ１０５は、その画像をレンダリングすることをコンポーネント１０６、１０７、１０８及び１０９にさせる１つ以上の命令を発行する。ある実施形態においては、コマンドプロセッサは、スレッド群のシーケンス、例えば画像をレンダリングするために頂点のセットを処理する頂点シェーダ、幾何シェーダ及び画素シェーダを備えるシーケンスを開始する命令を発行することができる。例えばシステムメモリ１０３からの頂点データは、処理ユニットがアクセス可能な汎用レジスタ内へと投入されてよく、頂点データは次いで、シェーダコア１０６内のシェーダのシーケンスを用いて処理され得る。
【００２６】
シェーダコア１０６は、シェーダプログラム（例えば頂点シェーダ、幾何シェーダ及び画素シェーダ）及び他の計算集約型プログラム(compute intensive programs)等の命令を実行するように構成される複数の処理ユニットを含む。シェーダコア１０６内の各処理ユニット１１２は、ウエーブフロントとして知られる複数のスレッドを同時に実行するように構成される。ウエーブフロントの最大サイズは設定可能である。各処理ユニット１１２は、オンチップローカルメモリ１１３に結合される。オンチップローカルメモリは、スタティックランダムアクセスメモリ（ＳＲＡＭ）及び組み込み型ダイナミックランダムアクセスメモリ（ＥＤＲＡＭ）等の任意の種類のダイナミックメモリであってよく、そのサイズ及び性能は、コスト及び性能等の種々の考慮に基づいて決定されてよい。ある実施形態においては、各処理ユニット（オンチップローカルメモリ）１１３は、それぞれの処理ユニットのプライベートメモリとして構成される。ある実施形態に従うと、それぞれの処理ユニット内で処理中のスレッドのみがオンチップローカルメモリにアクセスするので、処理ユニット内で実行中のスレッドによるオンチップローカルメモリへのアクセスは、実質的にほとんど競合しない。
【００２７】
ＶＧＴ１０７は以下の主たるタスクを行う。即ち、メモリから頂点インデックスをフェッチして(fetches)どの頂点が既に処理されていて従って再処理される必要がないのかを決定すること等の頂点インデックス再使用決定を行うことと、クワッドプリミティブ及びポリゴンプリミティブ(quad primitives and polygon primitives)を三角形プリミティブに変換することと、プリミティブテセレーション(primitive tessellation)のためのテセレーションファクタを計算することと、である。本発明の実施形態においては、ＶＧＴはまた、それぞれのウエーブフロントの各スレッドに対してオンチップローカルメモリ内にオフセットを提供することができ、また種々のシェーダから出力される各頂点及び／又はプリミティブがどのオンチップローカルメモリ上に配置されるのかについての経過を追跡する(keep track of)ことができる。
【００２８】
ＳＱ１０８は、頂点ベクトルデータをＶＧＴ１０７から受け取り、画素ベクトルデータをスキャン変換器から受け取る。ＳＱ１０８は、ＳＰＩ１０９、シェーダコア１０６及びシェーダエクスポート１１０のための主制御器である。ＳＱ１０８は、頂点ベクトル及び画素ベクトル動作、頂点及び画素シェーダ入力データ管理、エクスポート資源のためのメモリ割り当て、多重ＳＩＭＤ及び資源種類のためのスレッド裁定(thread arbitration)、シェーダプロセッサのための制御フロー及びＡＬＵ実行、シェーダ及び一定アドレシング並びに他の制御機能を管理する。
【００２９】
ＳＰＩ１０９は、シェーダコア１０６内の処理ユニットへの入力データを決定すると共にロードするための入力段階ストレージ及び前処理論理を含む。画素毎のデータを作成するために、補間器のバンクは、当該分野で既知の方法において、例えばスキャン変換器が提供した重心座標(barycentric coordinates)でプリミティブ毎頂点データを補間し、画素シェーダのための画素毎データを作成する。本発明の実施形態においては、ＳＰＩはまた、ウエーブフロントのサイズと各ウエーブフロントが実行のためにどこに発送されるのかとを決定することができる。
【００３０】
ＳＸ１１０は頂点パラメータを含むデータを保持するためのオンチップバッファである。ある実施形態に従うと、頂点シェーダ及び／又は画素シェーダの出力は、フレームバッファ又は他のオフチップメモリにエクスポートされる前にＳＸ内に記憶され得る。
【００３１】
ウエーブフロント発送モジュール１３０は、本発明のある実施形態に従いスレッドのウエーブフロントのシーケンスを処理ユニット１１２に割り当てるように構成される。ウエーブフロント発送モジュール１３０は、例えば、各処理ユニットのローカルメモリ内で利用可能なメモリと、各処理ユニットへと発送されるべきスレッドウエーブフロントのシーケンスと、各処理ユニットへと発送されるウエーブフロントのサイズと、を決定する論理を含むことができる。
【００３２】
ウエーブフロント実行モジュール１３２は、本発明のある実施形態に従い複数の処理ユニット１１２内の各ウエーブフロントの論理を実行するように構成される。ウエーブフロント実行モジュール１３２は、例えば、処理ユニット１１２内の頂点シェーダ、幾何シェーダ及び画素シェーダの異なるウエーブフロントを実行することと、グラフィクス処理パイプラインの全体処理を高速化するためにそれぞれのオンチップローカルメモリ１１３内のシェーダの各々からの中間結果を記憶することと、のための論理を含むことができる。
【００３３】
データ増幅モジュール１３３は、入力データ要素を増幅又は逆増幅して(deamplify)入力データよりも大きい出力データ要素セットを生成するための論理を含む。ある実施形態に従うと、データ増幅モジュール１３３は、幾何増幅のための論理を含む。一般にデータ増幅は、相対的に単純な入力データセットからの複雑なデータセットの生成を参照する。データ増幅の結果、入力データセットよりも大きな若しくは小さな数の又は入力データセットと同じ数のデータ要素を有する出力データセットをもたらすことができる。
【００３４】
ある実施形態に従うシェーダプログラム１３４は、第１、第２及び第３のシェーダプログラムを含む。処理ユニット１１２は、各ウエーブフロントが複数の第１、第２及び第３のシェーダプログラムを備えるウエーフロントのシーケンスを実行する。本発明のある実施形態に従うと、第１のシェーダプログラムは頂点シェーダを備え、第２のシェーダプログラムは幾何シェーダ（ＧＳ）を備え、そして第３のシェーダプログラムは画素シェーダ、計算シェーダ等を備える。
【００３５】
頂点シェーダ（ＶＳ）は、頂点をリードし、それらを処理し、そして結果をメモリへ出力する。新たなプリミティブは導入しない。ＧＳがアクティブである場合には、頂点シェーダは、ある種のエクスポートシェーダ（ＥＳ）として参照されることがある。頂点シェーダはフェッチサブルーチン（ＦＳ）を呼び出すことができ、フェッチサブルーチンは、実行目的で頂点プログラムの一部として取り扱われる頂点データをフェッチするための特別なグローバルプログラムである。従来のシステムにおいては、ＶＳ出力は、幾何シェーダ（ＧＳ）がアクティブかどうかに応じて、システムメモリ内のバッファか又はパラメータキャッシュ及び位置バッファかのいずれかに向けられる。本発明の実施形態においては、ＶＳの出力は、ＧＳが実行中である処理ユニットのオンチップローカルメモリに向けられる。
【００３６】
幾何シェーダ（ＧＳ）は、典型的にはＶＳ出力からプリミティブをリードし、また各入力されたプリミティブに対して１つ以上のプリミティブを出力としてライトする。ＧＳがアクティブである場合、従来のシステムにおいては、オフチップシステムメモリに対してリード／ライトするためには、直接メモリアクセス（ＤＭＡ）コピープログラムがアクティブにされる必要がある。従来のシステムにおいては、ＧＳは、ＶＳによって作成されたオフチップメモリバッファからの複数の頂点を同時にリードすることができ、そして可変数のプリミティブを第２のメモリバッファへと出力する。本発明の実施形態に従うと、ＧＳは、その入力をリードすると共にその出力を、ＧＳが実行中である処理ユニットのオンチップローカルメモリへとライトするように構成される。
【００３７】
画素シェーダ（ＰＳ）、即ちフラグメントシェーダは、従来のシステムにおいては、例えばパラメータキャッシュ、パラメータキャッシュに関連付けられる位置バッファ、システムメモリ及びＶＧＴを含む種々のロケーションから入力をリードする。ＰＳは、個々の画素クワッド（２×２アレイに配置される４つの画素データ要素）を処理し、そして１つ以上のフレームバッファを含み得る１つ以上のメモリバッファへと出力をライトする。本発明の実施形態においては、ＰＳは、ＧＳが実行される処理ユニットのオンチップローカルメモリ内のＧＳにより生成され記憶されるデータを入力としてリードするように構成される。
【００３８】
モジュール１３０〜１３４を指定する処理論理は、Ｃ、Ｃ＋＋又はアセンブリ(Assembly)等のプログラミング言語を用いて実装されてよい。別の実施形態においては、モジュール１３０〜１３４の１つ以上のための論理命令は、ここに説明される本発明の側面を具現化するハードウエアデバイスを作り出すためのマスクワーク／フォトマスクの生成を通して最終的に製造プロセスを構成することを可能にするベリログ(Verilog)、ＲＴＬ及びネットリスツ(netlists)等のハードウエア記述言語において指定され得る。この処理論理及び／又は論理命令は、磁気ディスク、光学ディスク（ＣＤ−ＲＯＭ、ＤＶＤ−ＲＯＭ等）、フラッシュディスク等を含む任意の既知のコンピュータ可読媒体内に配置され得る。
【００３９】
図２は本発明のある実施形態に従い複数の処理ユニットを備えるプロセッサにおけるデータの処理を示すフローチャート２００である。本発明の実施形態に従うと、データはスレッドウエーブフロントのシーケンスによって処理され、ここでスレッドのシーケンスへの入力はオフチップシステムメモリからリードされ、またスレッドのシーケンスの出力はオフチップメモリ内に記憶されるが、中間結果が、それぞれの処理ユニットに関連付けられるオンチップローカルメモリ内に記憶される。
【００４０】
ステップ２０２では、各処理ユニットにおいて処理され得る入力データ要素の数が決定される。ある実施形態に従うと、入力データの処理のためのメモリ要求のサイズを決定するために、入力データ及びシェーダプログラムが解析される。例えば、各第１の種類のスレッド（例えば頂点シェーダ）の出力のサイズ及び各第２の種類のスレッド（例えば幾何シェーダ）の出力のサイズが決定され得る。入力データ要素は、例えば、画像をレンダリングするのに用いられることになる頂点データであってよい。ある実施形態に従うと、頂点シェーダ処理は新たなデータ要素を作成せず、従って頂点シェーダの出力は入力と実質的に同じサイズである。ある実施形態に従うと、幾何シェーダは幾何増幅を行うことができ、その結果、入力データ要素の増大(multiplication)がもたらされ、入力よりも相当大きなサイズの出力が生成される。また、幾何増幅の結果として、入力よりも相当小さなサイズ又は入力と実質的に同じサイズを有する出力がもたらされることもある。ある実施形態に従うと、ＶＧＴは、各入力された頂点に対してＧＳによって幾つの出力頂点が生成されるのかを決定する。複数の処理ユニットの各々において処理され得る入力頂点データの最大量は、オンチップローカルメモリのサイズ並びに第１及び第２の種類の複数のスレッドの出力を記憶するのに必要なメモリのサイズに少なくとも部分的に基づいて決定され得る。
【００４１】
ステップ２０４では、ウエーブフロントが構成される。ある実施形態に従うと、第１及び第２の種類のスレッドの出力を各処理ユニットのオンチップローカルメモリ内に記憶するためのメモリ要求に基づいて、各種類のスレッドのスレッド最大数が決定され得る。例えば、複数の入力データ要素を処理するための頂点シェーダスレッド、幾何シェーダスレッド及び画素シェーダスレッドの最大数は、ステップ２０２で決定されたメモリ要求に基づいて決定され得る。ある実施形態に従うと、ＳＰＩが、どの頂点、従ってどのスレッドが処理のためのどの処理ユニットに割り当てられるのかを決定する。
【００４２】
ステップ２０６では、それぞれの第１のウエーブフロントが処理ユニットへと発送される。第１のウエーブフロントは第１の種類のスレッドを含む。ある実施形態に従うと、第１のウエーブフロントは複数の頂点シェーダを備える、各第１のウエーブフロントには、その出力をオンチップローカルメモリ内にライトするための基本アドレスが設けられている。ある実施形態に従うと、ＳＰＩが、各第１のウエーブフロントのための基本アドレスをＳＱに提供する。ある実施形態においては、ＶＧＴ又は他の論理コンポーネントは、ウエーブフロント内の各スレッドにオフセットを設けることができ、そこからオンチップローカルメモリ内でのリード又はライトが可能である。
【００４３】
ステップ２０８では、第１のウエーブフロントの各々は、その入力をオフチップメモリからリードする。ある実施形態に従うと、各第１のウエーブフロントは、処理されるべき頂点等のデータをリトリーブする(retrieve)するために、メモリ制御器を介してシステムメモリにアクセスする。各第１のウエーブフロントにより処理されるべき頂点は、前もって識別されたものであることがあり、また当該データのメモリ内のアドレスは、例えばＶＧＴ内のそれぞれの第１のウエーブフロントに提供されたものであることがある。システムメモリへのアクセス及びシステムメモリからのデータ要素のリーディング(reading)は、上述した競合問題に起因して、比較的大きな数のクロックサイクルを消費し得る。それぞれの第１のウエーブフロント内の各スレッドは、基本アドレスを決定し、そこからその入力頂点をオンチップローカルメモリからリードする。各スレッドのためのそれぞれの基本アドレスは、例えばそれぞれのウエーブフロント内のスレッドを識別するシーケンシャルスレッド識別子、１つのスレッドのための入力によって占められるメモリ空間を表すステップサイズ、及び当該第１のウエーブフロントに割り当てられた入力頂点のブロックへの基本アドレスに基づいて計算され得る。
【００４４】
ステップ２１０では、第１のウエーブフロントの各々がそれぞれの処理ユニット内で実行される。ある実施形態に従うと、頂点シェーダ処理がステップ２１０で生じる。ステップ２１０では、第１のウエーブフロント内の各スレッドは、その基本出力アドレスをオンチップローカルメモリ内へと計算することができる。各スレッドのための基本出力アドレスは、例えばそれぞれのウエーブフロント内のスレッドを識別するシーケンシャルスレッド識別子、それぞれのウエーブフロントのための基本出力アドレス、及び各スレッドのためのメモリ空間を表すステップサイズに基づいて計算され得る。別の実施形態においては、第１のウエーブフロント内の各スレッドは、その出力基本アドレスを、対応する第１のウエーブフロントのための基本出力アドレス、及びスレッドが発送されたときに提供されたオフセットに基づいて計算することができる。
【００４５】
ステップ２１２では、ウエーブフロントの各々の出力が、それぞれのオンチップローカルメモリへとライトされる。ある実施形態に従うと、各第１のウエーブフロント内のスレッドの各々の出力が、それぞれのオンチップローカルメモリ内へとライトされる。ウエーブフロント内の各スレッドは、その出力を、ステップ２１０で決定されたそれぞれの出力アドレスへとライトすることができる。
【００４６】
ステップ２１４では、それぞれの第１のウエーブフロントの完了が決定される。ある実施形態に従うと、第１のウエーブフロント内の各スレッドは、オンチップローカルメモリ、システムメモリ若しくは汎用レジスタ内にフラグをセットすることができ、又はスレッドがその処理を完了したことをシステムの１つ以上の他のコンポーネントに示す任意の他の方法で信号をアサートする(assert)ことができる。第１のウエーブフロントによる処理の完了を示すフラグ及び／又は信号は、第１のウエーブフロントの出力へのアクセスを他のスレッドウエーブフロントに提供するために、システムのコンポーネントによってモニタリングされてよい。
【００４７】
ステップ２１６では、第２のウエーブフロントが発送される。尚、図２においてはステップ２１４の後にステップ２１６があるが、他の実施形態においては、ステップ２１６はステップ２１４より先に行われてもよい。例えば処理ユニット内のスレッドウエーブフロントをパイプ化する場合、スレッドウエーブフロントは、１つ以上の先に発送されたウエーブフロントの完了の前に発送される。第２のウエーブフロントは第２の種類のスレッドを含む。ある実施形態に従うと、第２のウエーブフロントは複数の幾何シェーダスレッドを備える。各第２のウエーブフロントには、その入力をオンチップローカルメモリからリードするための基本アドレス及びその出力をオンチップローカルメモリ内にライトするための基本アドレスが設けられる。ある実施形態に従うと、各第２のウエーブフロントに対して、ＳＰＩは、それぞれ当該アドレスから入力をリードするため及び当該アドレスへ出力をライトするために、ＳＱにローカルメモリ内の基本アドレスを提供する。ＳＰＩはまた、各スレッドウエーブフロントのウエーブ識別子の経過を追うことができ、また処理ユニットに既に割り当てられているデータ及び第１のウエーブフロントの要求に従ってそれぞれの第２のウエーブフロントがその処理ユニットに確実に割り当てられるようにすることができる。ＶＧＴは、頂点及びそれぞれの頂点が割り当てられる処理ユニットの経過を追跡することができる。ＶＧＴはまた、幾何シェーダスレッドに、それぞれのプリミティブに対応する全ての頂点が提供され得るように、頂点間の接続の経過を追跡することができる。
【００４８】
ステップ２１８では、第２のウエーブフロントの各々は、その入力をオンチップローカルメモリからリードする。それぞれの処理ユニットにローカルなオンチップメモリへのアクセスは、システムメモリへのアクセスと比べて高速である。それぞれの第２のウエーブフロント内の各種類が基本アドレスを決定し、基本アドレスから当該種類の入力データをオンチップローカルメモリからリードする。各スレッドのためのそれぞれの基本アドレスは、例えば、それぞれのウエーブフロント内のスレッドを識別するシーケンシャルスレッド識別子、１つのスレッドのための入力によって占められるメモリ空間を表すステップサイズ、及び当該第２のウエーブフロントに割り当てられた入力頂点のブロックへの基本アドレスに基づいて計算され得る。
【００４９】
ステップ２２０では、第２のウエーブフロントの各々がそれぞれの処理ユニット内で実行される。ある実施形態に従うと、幾何シェーダ処理がステップ２２０で生じる。ステップ２２０においては、第２のウエーブフロント内の各スレッドは、オンチップローカルメモリ内へのその基本出力アドレスを計算することができる。各スレッドのための基本出力アドレスは、例えば、それぞれのウエーブフロント内のスレッドを識別するシーケンシャルスレッド識別子、それぞれのウエーブフロントのための基本出力アドレス、及び各スレッドのためのメモリ空間を表すステップサイズに基づいて計算され得る。別の実施形態においては、第２のウエーブフロント内の各スレッドは、その出力基本アドレスを、対応する第２のウエーブフロントのための基本出力アドレス、及びスレッドが発送されたときに提供されたオフセットに基づいて計算することができる。
【００５０】
ステップ２２２では、第２のウエーブフロントのスレッドの各々によって読み込まれた入力データ要素が増幅される。ある実施形態に従うと、幾何シェーダスレッドの各々は、幾何増幅における当該結果を処理することを行う。
【００５１】
ステップ２２４では、第２のウエーブフロントの各々の出力が、それぞれのオンチップローカルメモリへとライトされる。ある実施形態に従うと、それぞれの第２のウエーブフロント内のスレッドの各々の出力は、それぞれのオンチップローカルメモリ内へとライトされる。ウエーブフロント内の各スレッドは、その出力をステップ２１６で決定されたそれぞれの出力アドレスへとライトすることができる。
【００５２】
ステップ２２６では、それぞれの第２のウエーブフロントの完了が決定される。ある実施形態に従うと、第２のウエーブフロント内の各スレッドは、オンチップローカルメモリ、システムメモリ若しくは汎用レジスタ内にフラグをセットすることができ、又はスレッドがその処理を完了したことをシステムの１つ以上の他のコンポーネントに示す任意の他の方法で信号をアサートすることができる。第２のウエーブフロントによる処理の完了を示すフラグ及び／又は信号は、第２のウエーブフロントの出力へのアクセスを他のスレッドウエーブフロントに提供するために、システムのコンポーネントによってモニタリングされてよい。ある実施形態においては、第２のウエーブフロントの完了に際して、対応する第１のウエーブフロントの出力によって占められているオンチップローカルメモリは、割り当て解除されて利用可能にされてよい。
【００５３】
ステップ２２８では、第３のウエーブフロントが発送される。第３のウエーブフロントは第３の種類のスレッドを含む。ある実施形態に従うと、第３のウエーブフロントは複数の画素シェーダスレッドを備える。各第３のウエーブフロントには、その入力をオンチップローカルメモリからリードするための基本アドレスが設けられる。ある実施形態に従うと、各第３のウエーブフロントに対して、ＳＰＩは、それぞれ当該アドレスから入力をリードするため及び当該アドレスへ出力をライトするために、ＳＱにローカルメモリ内の基本アドレスを提供する。ＳＰＩはまた、各スレッドウエーブフロントのウエーブ識別子の経過を追うことができ、また処理ユニットに既に割り当てられているデータ及び第３のウエーブフロントの要求に従ってそれぞれの第３のウエーブフロントがその処理ユニットに確実に割り当てられるようにすることができる。
【００５４】
ステップ２３０では、第３のウエーブフロントの各々は、その入力をオンチップローカルメモリからリードする。それぞれの第３のウエーブフロント内の各種類が基本アドレスを決定し、基本アドレスから当該種類の入力データをオンチップローカルメモリからリードする。各スレッドのためのそれぞれの基本アドレスは、例えば、それぞれのウエーブフロント内のスレッドを識別するシーケンシャルスレッド識別子、１つのスレッドのための入力によって占められるメモリ空間を表すステップサイズ、及び当該第３のウエーブフロントに割り当てられた入力頂点のブロックへの基本アドレスに基づいて計算され得る。
【００５５】
ステップ２３２では、第３のウエーブフロントの各々がそれぞれの処理ユニット内で実行される。ある実施形態に従うと、画素シェーダ処理がステップ２３２で生じる。
【００５６】
ステップ２３４では、第３のウエーブフロントの各々の出力が、それぞれのオンチップローカルメモリ、システムメモリ又は他の場所へとライトされる。ある実施形態においては、第３のウエーブフロントの完了に際して、対応する第２のウエーブフロントの出力によって占められているオンチップローカルメモリは、割り当て解除されて利用可能にされてよい。
【００５７】
アプリケーションに基づく１つ以上の追加的な処理ステップが方法２００内に含まれ得る。ある実施形態に従うと、第１、第２及び第３のウエーブフロントは、画素データを処理すると共に画像をディスプレイへとレンダリングするグラフィクス処理パイプラインを作り出すようにローンチされる(launched)頂点シェーダ及び幾何シェーダを備える。尚、種々のウエーブフロントの順序は、特定のアプリケーションに依存する。また、ある実施形態に従うと、第３のウエーブフロントは、画素シェーダ並びに／又は計算シェーダ及びコピーシェーダ等の他のシェーダを備えていてよい。例えばコピーシェーダは、データをコンパクトにすることができ且つ／又はグローバルメモリへとライトすることができる。処理ユニットに関連付けられるオンチップローカルメモリに１つ以上のスレッドウエーブフロントの出力をライトすることによって、本発明の実施形態は、メモリアクセスのための競合に起因する遅延を大幅に低減する。
【００５８】
図３は本発明の実施形態に従いステップ２０６を実装するための方法（３０２〜３０６）のフローチャートである。ステップ３０２では、各第１のウエーブフロント内のスレッドの数が決定される。これは、限定はされないが、処理されるのに利用可能になるデータ要素、処理ユニットの数、各処理ユニット上で同時に実行可能なスレッドの最大数、及びそれぞれの処理ユニットに関連付けられるそれぞれのオンチップローカルメモリ内で利用可能なメモリの量、等の種々の要因に基づき決定され得る。
【００５９】
ステップ３０４では、第１のウエーブフロントの各スレッドにより記憶され得る出力のサイズが決定される。この決定は、予め設定されたパラメータ又はプログラム命令及び／若しくは入力データのサイズに基づき動的に決定されたパラメータに基づき得る。ある実施形態に従うと、第１のウエーブフロントの各スレッドにより記憶され得る出力のサイズは、ここでは第１のウエーブフロントのステップサイズとも称され、第１のウエーブフロントをローンチするとき又は第１のウエーブフロントの実行中に、静的に又は動的にのどちらかで決定され得る。
【００６０】
ステップ３０６では、各スレッドには、そのそれぞれの出力をライトするために、対応する処理ユニットに関連付けられるオンチップローカルメモリ内へのオフセットが提供される。オフセットは、それぞれのウエーブフロント内のスレッドを識別するシーケンシャルスレッド識別子、それぞれのウエーブフロントのための基本出力アドレス、及び各スレッドのためのメモリ空間を表すステップサイズに基づいて決定され得る。処理の間、各スレッドは、その出力をライトすべきローカルメモリ内の実際のオフセットを、スレッド発送に際して提供されたオフセット、ウエーブフロントのための基本出力アドレス、及びスレッドのステップサイズに基づき決定することができる。
【００６１】
図４は本発明の実施形態に従いステップ２１６を実装するための方法（４０２〜４０６）を示すフローチャートである。ステップ４０２では、第２のウエーブフロントのスレッドのためのステップサイズが決定される。ステップサイズは、第２のウエーブフロントのプログラム命令、最大ステップサイズを指定する予め設定されたパラメータ、予め設定されたパラメータ及びプログラム命令の組み合わせ、又は同様の方法に基づき決定され得る。ある実施形態に従うと、ステップサイズは、第２のウエーブフロントのそれぞれのスレッドによりリードされた入力データの、幾何シェーダによる幾何増幅等のデータ増幅を受け入れる(accommodate)ように決定されるべきである。
【００６２】
ステップ４０４では、それぞれの第２のウエーブフロント内の各スレッドには、オンチップローカルメモリ内のロケーションを決定するためのリードオフセットが設けられてよく、各スレッドはその入力をリードオフセットからリードすることができる。各スレッドは、実際のリードオフセットを、例えば実行の間に、リードオフセット、それぞれのウエーブフロントのための基本リードオフセット、及び対応する第１のウエーブフロントのスレッドのステップサイズに基づき決定することができる。
【００６３】
ステップ４０６では、それぞれの第２のウエーブフロント内の各スレッドには、オンチップローカルメモリ内へのライトオフセットが設けられてよい。各スレッドは、実際のライトオフセットを、例えば実行の間に、ライトオフセット、それぞれのウエーブフロントのための基本ライトオフセット、及び第２のウエーブフロントのスレッドのステップサイズに基づき決定することができる。
【００６４】
図５は処理ユニットの各々内で処理されるべきデータ要素を決定する方法（５０２〜５０６）を示すフローチャートである。ステップ５０２では、各処理ユニットのオンチップローカルメモリ内に記憶されるべき第１のウエーブフロントの出力のサイズが推定される。ある実施形態に従うと、出力のサイズは、複数の頂点シェーダスレッドにより処理されるべき頂点の数に基づいて決定される。各処理ユニットにおいて処理されるべき頂点の数は、限定はされないが、処理されるべき頂点の総数、頂点を処理するのに利用可能な処理ユニットの数、各処理ユニットのために利用可能なオンチップローカルメモリの量、及び各入力された頂点に適用される処理、等の要因に基づいて決定され得る。ある実施形態に従うと、各頂点シェーダは、それが入力として読み込むのと同数の頂点を出力する。
【００６５】
ステップ５０４では、各処理ユニットのオンチップローカルメモリ内に記憶されるべき第２のウエーブフロントの出力のサイズが推定される。ある実施形態に従うと、第２のウエーブフロントの出力のサイズは、第２のウエーブフロントのそれぞれのスレッドにより行われた入力データの増幅に少なくとも部分的に基づき推定される。例えば幾何シェーダによる処理の結果、幾何増幅は、入力プリミティブとは異なる数の出力プリミティブを生じさせ得る。データ増幅（又は幾何増幅）の大きさは、予め設定されたパラメータ及び／又はそれぞれのスレッドにおけるプログラム命令のアスペクト(aspects)に基づいて決定され得る。
【００６６】
ステップ５０６では、各プロセッサに関連付けられる必要な利用可能オンチップローカルメモリのサイズが、第１及び第２のウエーブフロントの出力のサイズを合計することによって決定される。本発明のある実施形態に従うと、各処理ユニットのオンチップローカルメモリは、第１及び第２のウエーブフロントの出力サイズの合計と少なくとも同程度の利用可能なメモリを有している必要がある。各処理ユニット内で処理されるべき頂点の数は、利用可能なオンチップローカルメモリの量並びに第１のウエーブフロント及び第２のウエーブフロントの出力の合計に基づいて決定され得る。
【００６７】
〔結論〕
概要及び要約の欄は、発明者によって検討された本発明の１つ以上のしかし全部ではない例示的な実施形態を説明することができ、従って本発明及び添付の特許請求の範囲を限定することが意図されているわけではけっしてない。
【００６８】
特定の機能の実装及びそれらの関係性を示す機能構築ブロックを補助として、本発明が上述のように説明されてきた。これらの機能構築ブロックの境界は、説明の便宜上ここでは適宜画定されてきた。特定の機能及びそれらの関係性が適切に実行される限りにおいて、代替的な境界が画定され得る。
【００６９】
特定の実施形態の上述した説明は、本発明の一般的性質を十分に明らかにするであろうから、他者は、当業者における知識を適用することによって、過度の実験なしに、本発明の一般的概念から逸脱することなく、そのような特定の実施形態を容易に修正し且つ／又は種々の応用に適応させることができる。従って、そのような適応及び修正は、ここに提示されている教示及び指針に基いて、開示されている実施形態と均等なものの意味及び範囲の範疇にあることが意図されている。ここでの用語等は、説明を目的としたものであって限定を目的としていないことが理解されるべきであり、本出願書類の用語等は教示及び指針の下で当業者によって解釈されるべきである。
【００７０】
本発明の広さ及び範囲は、上述したいかなる例示的な実施形態によっても限定されるべきではなく、以下の特許請求の範囲及びそれらと均等なものに従ってのみ画定されるべきである。
【図１】
2013541748.tif 000003
【図２】
2013541748.tif 000004
【図３】
2013541748.tif 000005
【図４】
2013541748.tif 000006
【図５】
2013541748.tif 000007
【国際調査報告】
2013541748.tif 000008
2013541748.tif 000009
2013541748.tif 000010