(57)【要約】プロセッサ上で可変ウェーブフロントサイズを処理するためのシステム、装置及び方法が開示されている。一実施形態では、プロセッサは、スケジューラと、キャッシュと、複数の実行ユニットと、を少なくとも含む。プロセッサは、第１モードで動作する場合、ウェーブフロントの複数の部分で同じ命令を実行することを、シェーダプログラムの次の命令に進む前に行う。プロセッサは、第２モードで動作する場合、ウェーブフロントの第１部分で命令セットを実行する。第２モードでは、プロセッサがウェーブフロントの第１部分で命令セットの実行を終了すると、プロセッサは、ウェーブフロントの全ての部分が処理されるまで、ウェーブフロントの第２部分で命令セットを実行する等を行う。プロセッサは、１つ以上の条件に基づいて動作モードを決定する。【選択図】図７
2020515943.tif 000002
【特許請求の範囲】
【請求項１】
プロセッサであって、
複数の実行ユニットと、
スケジューラと、を備え、
前記スケジューラは、
第１指示を検出したことに応じて、前記複数の実行ユニットが第１命令をウェーブフロントの第１部分及び第２部分で実行するようにスケジューリングすることを、前記複数の実行ユニットが第２命令を前記ウェーブフロントの前記第１部分で実行するようにスケジューリングする前に行い、
前記第１指示を検出しないことに応じて、前記複数の実行ユニットが前記第１命令及び前記第２命令をウェーブフロントの前記第１部分で実行するようにスケジューリングすることを、前記複数の実行ユニットが前記第１命令を前記ウェーブフロントの前記第２部分で実行するようにスケジューリングする前に行うように構成されている、
プロセッサ。
【請求項２】
前記第１指示は、ソフトウェア命令内で宣言されたパラメータである、
請求項１のプロセッサ。
【請求項３】
前記プロセッサは、複数の動作モードで動作するように構成されており、前記第１指示は、前記プロセッサが第１モードで動作するためのコマンドである、
請求項１のプロセッサ。
【請求項４】
前記プロセッサは、複数の汎用レジスタ（ＧＰＲ）を備え、
前記プロセッサは、第２モードで動作することに応じて、前記ウェーブフロントの前記第１部分と前記ウェーブフロントの前記第２部分との間で１つ以上のＧＰＲを共有するように構成されている、
請求項３のプロセッサ。
【請求項５】
前記プロセッサは、キャッシュを備え、
前記プロセッサは、
前記ウェーブフロントのキャッシュミス率を決定し、
前記ウェーブフロントの前記キャッシュミス率が閾値未満であると決定したことに応じて前記第１指示を生成するように構成されている、
請求項１のプロセッサ。
【請求項６】
前記ウェーブフロント内のワークアイテムの数は、前記複数の実行ユニットの数よりも多い、
請求項１のプロセッサ。
【請求項７】
前記ウェーブフロント内のワークアイテムの数は６４であり、前記複数の実行ユニットの数は３２である、
請求項１のプロセッサ。
【請求項８】
コンピューティングデバイスで使用する方法であって、
第１指示を検出したことに応じて、複数の実行ユニットが第１命令をウェーブフロントの第１部分及び第２部分上で実行するようにスケジューリングすることを、前記複数の実行ユニットが第２命令を前記ウェーブフロントの前記第１部分で実行するようにスケジューリングする前に行うことと、
前記第１指示を検出しないことに応じて、前記複数の実行ユニットが前記第１命令及び前記第２命令をウェーブフロントの前記第１部分で実行するようにスケジューリングすることを、前記複数の実行ユニットが前記第１命令を前記ウェーブフロントの前記第２部分で実行するようにスケジューリングする前に行うことと、を含む、
方法。
【請求項９】
前記第１指示は、ソフトウェア命令内で宣言されたパラメータである、
請求項８の方法。
【請求項１０】
前記第１指示は、プロセッサが第１モードで動作するためのコマンドである、
請求項８の方法。
【請求項１１】
第２モードで動作することに応じて、前記ウェーブフロントの前記第１部分と前記ウェーブフロントの前記第２部分との間で１つ以上の汎用レジスタ（ＧＰＲ）を共有することを含む、
請求項１０の方法。
【請求項１２】
前記ウェーブフロントのキャッシュミス率を決定することと、
前記ウェーブフロントの前記キャッシュミス率が閾値未満であると決定したことに応じて前記第１指示を生成することと、を含む、
請求項８の方法。
【請求項１３】
前記ウェーブフロント内のワークアイテムの数は、前記複数の実行ユニットの数よりも多い、
請求項８の方法。
【請求項１４】
前記ウェーブフロント内のワークアイテムの数は６４であり、前記複数の実行ユニットの数は３２である、
請求項８の方法。
【請求項１５】
システムであって、
メモリと、
プロセッサと、を備え、
前記プロセッサは、
複数の実行ユニットと、
スケジューラと、を備え、
前記スケジューラは、
第１指示を検出したことに応じて、前記複数の実行ユニットが第１命令をウェーブフロントの第１部分及び第２部分で実行するようにスケジューリングすることを、前記複数の実行ユニットが第２命令を前記ウェーブフロントの前記第１部分で実行するようにスケジューリングする前に行い、
前記第１指示を検出しないことに応じて、前記複数の実行ユニットが前記第１命令及び前記第２命令をウェーブフロントの前記第１部分で実行するようにスケジューリングすることを、前記複数の実行ユニットが前記第１命令を前記ウェーブフロントの前記第２部分で実行するようにスケジューリングする前に行うように構成されている、
システム。
【請求項１６】
前記第１指示は、ソフトウェア命令内で宣言されたパラメータである、
請求項１５のシステム。
【請求項１７】
前記プロセッサは、複数の動作モードで動作するように構成されており、前記第１指示は、前記プロセッサが第１モードで動作するためのコマンドである、
請求項１５のシステム。
【請求項１８】
前記プロセッサは、複数の汎用レジスタ（ＧＰＲ）を備え、
前記プロセッサは、第２モードで動作することに応じて、前記ウェーブフロントの前記第１部分と前記ウェーブフロントの前記第２部分との間で１つ以上のＧＰＲを共有するように構成されている、
請求項１７のシステム。
【請求項１９】
前記プロセッサは、キャッシュを備え、
前記プロセッサは、
前記ウェーブフロントのキャッシュミス率を決定し、
前記ウェーブフロントの前記キャッシュミス率が閾値未満であると決定したことに応じて前記第１指示を生成するように構成されている、
請求項１５のシステム。
【請求項２０】
前記ウェーブフロント内のワークアイテムの数は、前記複数の実行ユニットの数よりも多い、
請求項１６のシステム。
【発明の詳細な説明】
【背景技術】
【０００１】
グラフィックス処理装置（ＧＰＵ）は、グラフィックス処理タスクを実行するように構成された複雑な集積回路である。例えば、ＧＰＵは、エンドユーザアプリケーション（例えば、ビデオゲームアプリケーション）に必要なグラフィックス処理タスクを実行することができる。また、ＧＰＵは、グラフィックスとは関係のない他のタスクを実行するように益々使用されている。ＧＰＵは、個別のデバイスであってもよいし、別のプロセッサ（例えば、中央処理装置（ＣＰＵ）等）と同じデバイスに含めることができる。
【０００２】
多くのアプリケーション（例えば、ＧＰＵでのグラフィックス処理）では、一連のワークアイテム（スレッドとも呼ばれる）が処理され、最終結果が出力される。最近の多くの並列プロセッサでは、例えば、単一命令複数データ（ＳＩＭＤ）コア内のプロセッサが、ワークアイテムのセットを同期的に実行する。別々のプロセッサによって処理される複数の同一の同期ワークアイテムは、ウェーブフロント又はワープと呼ばれる。
【０００３】
処理中に、１つ以上のＳＩＭＤコアが複数のウェーブフロントを同時に実行する。ウェーブフロントの実行は、ウェーブフロント内の全てのワークアイテムが処理を完了したときに終了する。各ウェーブフロントには、同じ命令セットを用いて並列に処理される複数のワークアイテムが含まれる。場合によっては、ウェーブフロント内のワークアイテムの数は、ＳＩＭＤコアの実行ユニットの数と一致しない。一実施形態では、ＳＩＭＤコアの各実行ユニットは、算術論理ユニット（ＡＬＵ）である。ウェーブフロント内のワークアイテムの数がＳＩＭＤコアの実行ユニットの数と一致しない場合、命令をどのようにスケジューリングして実行するかを決定することが困難になる可能性がある。
【０００４】
本明細書で説明する方法及びメカニズムの利点は、添付の図面と合わせて以下の説明を参照することによって、より良く理解することができる。
【図面の簡単な説明】
【０００５】
【図１】コンピューティングシステムの一実施形態のブロック図である。
【図２】ＧＰＵの一実施形態のブロック図である。
【図３】ベクトル汎用レジスタ（ＶＧＰＲ）のセットの一実施形態のブロック図である。
【図４】例示的なウェーブフロントび例示的な命令シーケンスの一実施形態を示す図である。
【図５】プロセッサの第１動作モードの一実施形態を示す図である。
【図６】プロセッサの第２動作モードの一実施形態を示す図である。
【図７】プロセッサ上で命令をスケジューリングする方法の一実施形態を示す一般化されたフロー図である。
【図８】並列プロセッサで使用する動作モードを決定する方法の一実施形態を示す一般化されたフロー図である。
【図９】並列プロセッサの異なる動作モードを利用する方法の一実施形態を示す一般化されたフロー図である。
【発明を実施するための形態】
【０００６】
以下の説明では、本明細書で示す方法及びメカニズムの十分な理解を得るために、多くの具体的な詳細が示されている。しかし、当業者であれば、これらの具体的な詳細無しに様々な実施形態を実施し得ることを認識するであろう。場合によっては、本明細書で説明するアプローチを曖昧にすることを避けるために、よく知られている構造、コンポーネント、信号、コンピュータプログラム命令及び技術を詳細に示していない。説明を簡単且つ明確にするために、図示した要素が必ずしも縮尺通りに描かれていないことが理解されるであろう。例えば、一部の要素の寸法は、他の要素に比べて誇張されている場合がある。
【０００７】
プロセッサ上で可変ウェーブフロントサイズを処理するための様々なシステム、装置、方法及びコンピュータ可読媒体が開示されている。第１モードで動作する場合、プロセッサは、シェーダプログラムの次の命令に進む前に、ウェーブフロントの複数の部分で同じ命令を実行する。第２モードで動作する場合、プロセッサは、ウェーブフロントの第１部分上で命令セットを実行する。第２モードでは、プロセッサがウェーブフロントの第１部分で命令セットの実行を終了した場合に、プロセッサは、ウェーブフロントの全ての部分が処理されるまで、ウェーブフロントの第２部分で命令セットを実行する。そして、プロセッサは、シェーダプログラムの後続の命令を実行し続ける。
【０００８】
一実施形態では、コードシーケンス内で指示が宣言される。この指示は、プログラムの所定の領域に何れのモードを使用するかを指定する。別の実施形態では、コンパイラは、実行可能コードを生成する場合に、指示を生成する。この指示は、プロセッサ動作モードを指定する。別の実施形態では、プロセッサは、プロセッサ動作モードを決定する制御ユニットを含む。
【０００９】
図１を参照すると、コンピューティングシステム１００の一実施形態のブロック図が示されている。一実施形態では、コンピューティングシステム１００は、メモリ１５０に接続されたシステムオンチップ（ＳｏＣ）１０５を含む。ＳｏＣ１０５は、集積回路（ＩＣ）とも呼ばれ得る。一実施形態では、ＳｏＣ１０５は、処理装置１１５Ａ〜１１５Ｎと、入出力（Ｉ／Ｏ）インタフェース１１０と、共有キャッシュ１２０Ａ〜１２０Ｂと、ファブリック１２５と、グラフィックス処理装置（ＧＰＵ）１３０と、メモリコントローラ１４０と、を含む。また、ＳｏＣ１０５は、図が不明瞭になることを避けるために、図１に示されていない他のコンポーネントも含むことができる。処理装置１１５Ａ〜１１５Ｎは、任意の数及びタイプの処理装置を表す。一実施形態では、処理装置１１５Ａ〜１１５Ｎは、中央処理装置（ＣＰＵ）コアである。別の実施形態では、処理装置１１５Ａ〜１１５Ｎのうち１つ以上は、他のタイプの処理装置（例えば、特定用途向け集積回路（ＡＳＩＣ）、フィールドプログラマブルゲートアレイ（ＦＰＧＡ）、デジタルシグナルプロセッサ（ＤＳＰ））である。処理装置１１５Ａ〜１１５Ｎは、共有キャッシュ１２０Ａ〜１２０Ｂ及びファブリック１２５に接続されている。
【００１０】
一実施形態では、処理装置１１５Ａ〜１１５Ｎは、特定の命令セットアーキテクチャ（ＩＳＡ）の命令を実行するように構成されている。各処理装置１１５Ａ〜１１５Ｎは、１つ以上の実行ユニット、キャッシュメモリ、スケジューラ、分岐予測回路等を含む。一実施形態では、処理装置１１５Ａ〜１１５Ｎは、システム１００の主制御ソフトウェア（例えば、オペレーティングシステム）を実行するように構成されている。一般に、使用中に処理装置１１５Ａ〜１１５Ｎによって実行されるソフトウェアは、システム１００の他のコンポーネントを制御して、システム１００の所望の機能を実現することができる。また、処理装置１１５Ａ〜１１５Ｎは、他のソフトウェア（例えば、アプリケーションプログラム）を実行することができる。
【００１１】
ＧＰＵ１３０は、グラフィックス又は汎用処理に使用される任意の数及びタイプのコンピュートユニットを表すコンピュートユニット１４５Ａ〜１４５Ｎを少なくとも含む。コンピュートユニット１４５Ａ〜１４５Ｎは、「シェーダアレイ」、「シェーダエンジン」、「単一命令複数データ（ＳＩＭＤ）ユニット」又は「ＳＩＭＤコア」と呼ばれ得る。各コンピュートユニット１４５Ａ〜１４５Ｎは、複数の実行ユニットを含む。ＧＰＵ１３０は、共有キャッシュ１２０Ａ〜１２０Ｂ及びファブリック１２５に接続されている。一実施形態では、ＧＰＵ１３０は、画像をディスプレイにレンダリングするためのグラフィックスパイプライン操作（例えば、描画コマンド、ピクセル操作、幾何学的計算及び他の操作）を実行するように構成されている。別の実施形態では、ＧＰＵ１３０は、グラフィックスに関係のない操作を実行するように構成されている。さらなる実施形態では、ＧＰＵ１３０は、グラフィックス操作及び非グラフィックス関連操作の両方を実行するように構成されている。
【００１２】
ＧＰＵ１３０は、シェーダプログラムの命令及びウェーブフロントを受信して実行するように構成されている。一実施形態では、ＧＰＵ１３０は、異なるモードで動作するように構成されている。一実施形態では、各ウェーブフロントのワークアイテムの数は、ＧＰＵ１３０の実行ユニットの数よりも多い。
【００１３】
一実施形態では、ＧＰＵ１３０は、第１指示を検出したことに応じて、第１命令を第１のウェーブフロントの第１部分及び第２部分で実行するようにスケジューリングした後に、第２命令を第１ウェーブフロントの第１部分で実行するようにスケジューリングする。ＧＰＵ１３０は、第１指示が検出される限り、シェーダプログラムの他の命令及び他のウェーブフロントに対してこのパターンに従う。「命令をスケジューリングすること」は、「命令を出す（issuing）」とも呼ばれ得ることに留意されたい。実施形態に応じて、第１指示は、ソフトウェアで指定することができ、又は、１つ以上の動作状態に基づいてＧＰＵ１３０によって生成することができる。一実施形態では、第１指示は、ＧＰＵ１３０が第１モードで動作するためのコマンドである。
【００１４】
一実施形態では、ＧＰＵ１３０は、第１指示を検出しないことに応じて、第１命令及び第２命令を第１ウェーブフロントの第１部分で実行するようにスケジューリングした後に、第１命令を第１ウェーブフロントの第２部分で実行するようにスケジューリングする。ＧＰＵ１３０は、第１指示が検出されない限り、シェーダプログラムの他の命令及び他のウェーブフロントに対してこのパターンに従う。
【００１５】
Ｉ／Ｏインタフェース１１０は、ファブリック１２５に接続されており、Ｉ／Ｏインタフェース１１０は、任意の数及びタイプのインタフェース（例えば、周辺機器相互接続（ＰＣＩ）バス、ＰＣＩ拡張（ＰＣＩ−Ｘ）、ＰＣＩＥ（ＰＣＩエクスプレス）バス、ギガビットイーサネット（登録商標）（ＧＢＥ）バス、ユニバーサルシリアルバス（ＵＳＢ））を表す。様々なタイプの周辺デバイスをＩ／Ｏインタフェース１１０に接続することができる。このような周辺デバイスとしては、ディスプレイ、キーボード、マウス、プリンタ、スキャナ、ジョイスティックや他のタイプのゲームコントローラ、メディア記録デバイス、外部ストレージデバイス、ネットワークインタフェースカード等が含まれるが、これらに限定されない。
【００１６】
ＳｏＣ１０５は、１つ以上のメモリモジュールを含むメモリ１５０に接続されている。各メモリモジュールには、１つ以上のメモリデバイスが搭載されている。いくつかの実施形態では、メモリ１５０は、マザーボード又は他のキャリア（ＳｏＣ１０５も搭載されている）に搭載された１つ以上のメモリデバイスを含む。実装されるＲＡＭは、スタティックＲＡＭ（ＳＲＡＭ）、ダイナミックＲＡＭ（ＤＲＡＭ）、抵抗変化ＲＡＭ（ＲｅＲＡＭ）、相変化ＲＡＭ（ＰＣＲＡＭ）、又は、他の揮発性若しくは不揮発性ＲＡＭとすることができる。メモリ１５０を実装するために用いられるＤＲＡＭのタイプとしては、ダブルデータレート（ＤＤＲ）ＤＲＡＭ、ＤＤＲ２  ＤＲＡＭ、ＤＤＲ３  ＤＲＡＭ等が挙げられるが、これらに限定されない。図１には明示していないが、ＳｏＣ１０５は、処理装置１１５Ａ〜１１５Ｎ及び／又はコンピュートユニット１４５Ａ〜１４５Ｎの内部にある１つ以上のキャッシュメモリを含むことができる。いくつかの実施形態では、ＳｏＣ１０５は、処理装置１１５Ａ〜１１５Ｎ及びコンピュートユニット１４５Ａ〜１４５Ｎによって用いられる共有キャッシュ１２０Ａ〜１２０Ｂを含む。一実施形態では、キャッシュ１２０Ａ〜１２０Ｂは、キャッシュコントローラを含むキャッシュサブシステムの一部である。
【００１７】
様々な実施形態では、コンピューティングシステム１００は、コンピュータ、ラップトップ、モバイルデバイス、サーバ、又は、他の様々なタイプのコンピューティングシステム若しくはデバイスの何れかとすることができる。コンピューティングシステム１００及び／又はＳｏＣ１０５のコンポーネントの数は、実施形態毎に異なり得るに留意されたい。各コンポーネント／サブコンポーネントの数は、図１に示す数より多くてもよいし、少なくてもよい。例えば、別の実施形態では、ＳｏＣ１０５は、複数のメモリに接続された複数のメモリコントローラを含むことができる。また、コンピューティングシステム１００及び／又はＳｏＣ１０５は、図１に示されていない他のコンポーネントを含むことができることに留意されたい。さらに、他の実施形態では、コンピューティングシステム１００及びＳｏＣ１０５を、図１に示されている以外の方法で構成することができる。
【００１８】
図２を参照すると、グラフィックス処理装置（ＧＰＵ）２００の一実施形態のブロック図が示されている。一実施形態では、ＧＰＵ２００は、ＳＩＭＤ２１０Ａ〜２１０Ｎと、分岐及びメッセージユニット２４０と、スケジューラユニット２４５と、命令バッファ２５５と、キャッシュ２６０と、を少なくとも含む。また、ＧＰＵ２００は、図を不明瞭にすることを避けるために、図２に示されていない他のロジックを含むことができることに留意されたい。ＧＰＵ２００に示されている回路を、他のプロセッサ（例えば、ＦＰＧＡ、ＡＳＩＣ、ＤＳＰ等）に含むことができることにも留意されたい。
【００１９】
一実施形態では、ＧＰＵ２００は、異なるサイズのウェーブフロントでシェーダプログラムの命令を処理するように、異なるモードで動作するように構成されている。ＧＰＵ２００は、所定のモードを用いて、処理中のワークロードのタイプ及び／又は各ウェーブフロント内のワークアイテムの数に応じて、性能、消費電力及び／又は他の要因を最適化する。一実施形態では、各ウェーブフロントには、ＳＩＭＤ２１０Ａ〜２１０Ｎ内のレーン２１５Ａ〜２１５Ｎ，２２０Ａ〜２２０Ｎ，２２５Ａ〜２２５Ｎの数よりも多い数のワークアイテムを含む。この実施形態では、ＧＰＵ２００は、ＧＰＵ２００の動作モードに基づいて、ウェーブフロントを異なる方法で処理する。別の実施形態では、ＧＰＵ２００は、１つ以上の検出された状態に基づいて、ウェーブフロントを異なる方法で処理する。ＳＩＭＤ２１０Ａ〜２１０Ｎの各レーン２１５Ａ〜２１５Ｎ，２２０Ａ〜２２０Ｎ，２２５Ａ〜２２５Ｎは、「実行ユニット」と呼ばれることもある。
【００２０】
一実施形態では、ＧＰＵ２００は、ＳＩＭＤ２１０Ａ〜２１０Ｎ内のレーンの総数よりも多い数のワークアイテムを有するウェーブフロントに対する複数の命令を受信する。この実施形態では、ＧＰＵ２００は、第１モードである場合に、ウェーブフロントの複数の部分で第１命令を実行することを、第２命令に進む前に行う。ＧＰＵ２００は、第１モードである限り、後続の命令に対してこの実行パターンを継続する。一実施形態では、第１モードを、ソフトウェア生成された宣言によって指定することができる。ＧＰＵ２００は、第２モードである場合、ウェーブフロントの第１部分で複数の命令を実行することを、ウェーブフロントの第２部分に進む前に行う。ＧＰＵ２００は、第２モードである場合、ベクトル汎用レジスタ（ＶＧＰＲ）２３０Ａ〜２３０Ｎの一部を、ウェーブフロントの異なる部分間で共有する。また、ＧＰＵ２００は、第２モードである場合に、ウェーブフロントの所定の部分が一時的にマスクアウト（masked out）されているとマスク２５０の実行マスクが示す場合には、ウェーブフロントの当該所定の部分に対する命令を実行しない。
【００２１】
別の実施形態では、ウェーブフロントサイズがＳＩＭＤの数よりも大きい場合、ＧＰＵ２００は、プログラムのキャッシュ２６０のキャッシュミス率を決定する。キャッシュミス率が閾値よりも小さい場合、ＧＰＵ２００は、ウェーブフロントの複数の部分で第１命令を実行することを、第２命令に進む前に行う。キャッシュミス率が閾値未満であると判別又は予測される限り、ＧＰＵ２００は、後続の命令に対してこの実行パターンを継続する。閾値は、バイト数として、キャッシュ２６０の割合として、又は、他の適切なメトリックとして指定することができる。キャッシュミス率が閾値以上である場合、ＧＰＵ２００は、ウェーブフロントの第１部分で複数の命令を実行することを、ウェーブフロントの第２部分で複数の命令を実行する前に行う。また、キャッシュミス率が閾値以上である場合、ＧＰＵ２００は、ベクトル汎用レジスタ（ＶＧＰＲ）２３０Ａ〜２３０Ｎの一部を、ウェーブフロントの異なる部分間で共有し、所定の部分がマスクアウトされていると実行マスクが示す場合に、ウェーブフロントの当該所定の部分に対する命令をスキップする。
【００２２】
文字「Ｎ」は、本明細書で様々な構造の隣に表示される文字「Ｎ」は、その構造の要素の任意の数（例えば、任意の数のＳＩＭＤ２１０Ａ〜２１０Ｎ）を概して示すことを意図していることに留意されたい。また、図２内の異なる符号が文字「Ｎ」を用いている場合（例えば、ＳＩＭＤ２１０Ａ〜２１０Ｎ及びレーン２１５Ａ〜２１５Ｎ）、異なる要素が等しい数で設けられていると示すことを意図していない（例えば、ＳＩＭＤ２１０Ａ〜２１０Ｎの数は、レーン２１５Ａ〜２１５Ｎの数と異なってもよい）。
【００２３】
図３を参照すると、ベクトル汎用レジスタ（ＶＧＰＲ）３００のセットの一実施形態のブロック図が示されている。一実施形態では、（図２の）ＧＰＵ２００のＳＩＭＤ２１０Ａ〜２１０Ｎ内にＶＧＰＲ３００が含まれている。ＶＧＰＲ３００は、実施形態に応じて、任意の数のレジスタを含むことができる。
【００２４】
図３に示すように、ＶＧＰＲ３００は、第１ウェーブフロント用のＶＧＰＲ３０５と、第２ウェーブフロント用のＶＧＰＲ３１０と、他のウェーブフロント用の任意の数の他のＶＧＰＲと、を含む。例示のために、第１ウェーブフロント及び第２ウェーブフロントは、２×Ｎ個のワークアイテムを有することを仮定する。ここで、Ｎは正の整数であり、Ｎは実施形態毎に異なる。一実施形態では、Ｎは３２に等しい。ＶＧＰＲ３０５は、専用ＶＧＰＲ及び共有ＶＧＰＲ領域３１５を有する領域を含む。同様に、ＶＧＰＲ３１０は、専用ＶＧＰＲ及び共有ＶＧＰＲ領域３２０を有する領域を含む。
【００２５】
一実施形態では、ホストＧＰＵ（例えば、ＧＰＵ２００）が第１モードである場合、共有ＶＧＰＲ３１５及び共有ＶＧＰＲ３１０の各々は、第１ウェーブフロント及び第２ウェーブフロントの異なる部分間で共有されていない。しかし、ホストＧＰＵが第２モードである場合、共有ＶＧＰＲ３１５及び共有ＶＧＰＲ３１０の各々は、第１ウェーブフロント及び第２ウェーブフロントの異なる部分間で共有される。他の実施形態では、共有するか共有しないかの実施は、第１モードであるか第２モードであるかに基づくのではなく、第１指示を検出することに基づいている。第１指示は、ソフトウェアによって生成されてもよいし、キャッシュミス率に基づいて生成されてもよいし、１つ以上の他の動作条件に基づいて生成されてもよい。
【００２６】
図４を参照すると、例示的なウェーブフロント４０５及び例示的な命令シーケンス４１０の一実施形態が示されている。ウェーブフロント４０５は、一実施形態によるウェーブフロントの一例を示すことを意図している。ウェーブフロント４０５は、２×Ｎ個のワークアイテムを含み、「Ｎ」は正の整数であり、「Ｎ」はベクトルユニット４２０のレーン４２５Ａ〜４２５Ｎの数である。また、ベクトルユニット４２０は、ＳＩＭＤユニット又は並列プロセッサとも呼ばれる。ウェーブフロント４０５の第１部分は、ワークアイテムＷ０〜ＷＮ−１を含み、ウェーブフロント４０５の第２部分は、ワークアイテムＷＮ〜Ｗ２Ｎ−１を含む。ウェーブフロント４０５の単一の部分は、所定の命令サイクルにおいてベクトルユニット４２０のレーン４２５Ａ〜４２５Ｎで実行することを意図している。他の実施形態では、ウェーブフロント４０５は、他の数の部分を含むことができる。
【００２７】
一実施形態では、Ｎは３２であり、ウェーブフロント当たりのワークアイテムの数は６４である。他の実施形態では、Ｎを他の値とすることができる。Ｎが３２である場合の実施形態では、ベクトルユニット４２０は、レーン４２５Ａ〜４２５Ｎとして示される３２のレーンも含む。他の実施形態では、ベクトルユニット４２０は、他の数のレーンを含むことができる。
【００２８】
命令シーケンス４１０は、命令シーケンスの一例を示している。図４に示すように、命令シーケンス４１０は、シェーダプログラムの任意の数及びタイプの命令を表す命令４１５Ａ〜４１５Ｄを含む。この説明のために、命令４１５Ａは命令シーケンス４１０の第１命令であり、命令４１５Ｂは第２命令であり、命令４１５Ｃは第３命令であり、命令４１５Ｄは第４命令であると仮定する。他の実施形態では、命令シーケンスは他の数の命令を有することができる。ウェーブフロント４０５、命令シーケンス４１０及びベクトルユニット４２０を、以降の図５及び図６に関して続く説明において再び用いる。
【００２９】
図５を参照すると、プロセッサの第１動作モードの一実施形態の図が示されている。図５の説明は、図４に関する説明の続きである。一実施形態では、ウェーブフロントのサイズは、ベクトルユニット４２０のサイズの２倍である。別の実施形態では、ウェーブフロントのサイズは、ベクトルユニット４２０のサイズの整数倍である。これらの実施形態では、プロセッサは、ベクトルユニット４２０を用いてウェーブフロントのワークアイテムをどのように実行するかについて決定するための異なる動作モードを実行することができる。
【００３０】
第１動作モードでは、各命令をウェーブフロントの異なるサブセットで実行することを、次の命令を異なるサブセットで実行する前に行う。例えば、命令４１５Ａは、ウェーブフロントの第１の半分（すなわち、ワークアイテムＷ０〜ＷＮ−１）に対して、ベクトルユニット４２０のレーン４２５Ａ〜４２５Ｎにおいて第１命令サイクル中に実行され、次に、命令４１５Ａは、第１ウェーブフロントの第２の半分（すなわち、ワークアイテムＷＮ〜Ｗ２Ｎ−１）に対して、レーン４２５Ａ〜４２５Ｎにおいて第２命令サイクル中に実行される。例えば、第１命令サイクル中に、ワークアイテムＷ０をレーン４２５Ａで実行することができ、ワークアイテムＷ１をレーン４２５Ｂで実行することができる等である。
【００３１】
次に、命令４１５Ｂは、ウェーブフロントの第１の半分に対して、レーン４２５Ａ〜４２５Ｎにおいて第３命令サイクル中に実行され、次いで、命令４１５Ｂは、ウェーブフロントの第２の半分に対して、レーン４２５Ａ〜４２５Ｎにおいて第４命令サイクル中に実行される。次に、命令４１５Ｃは、ウェーブフロントの第１の半分に対して、レーン４２５Ａ〜４２５Ｎにおいて第５命令サイクル中に実行され、次いで、命令４１５Ｃは、ウェーブフロントの第２の半分に対して、レーン４２５Ａ〜４２５Ｎにおいて第６命令サイクル中に実行される。次に、命令４１５Ｄは、ベクトルユニット４２０のレーン４２５Ａ〜４２５Ｎにおけるウェーブフロントの第１の半分に対して、レーン４２５Ａ〜４２５Ｎにおいて第７命令サイクル中に実行され、次いで、命令４１５Ｄは、ベクトルユニット４２０のレーン４２５Ａ〜４２５におけるウェーブフロントの第２の半分に対して、レーン４２５Ａ〜４２５Ｎにおいて第８命令サイクル中に実行される。この説明のために、第２命令サイクルが第１命令サイクルに続き、第３命令サイクルが第２命令サイクルに続く、等と仮定することができる。
【００３２】
図６を参照すると、プロセッサの第２動作モードの一実施形態の図が示されている。図６の説明は、図５に関する説明の続きである。第２動作モードでは、命令シーケンス４１０全体をウェーブフロントの同じ部分で実行することを、命令シーケンス４１０全体をウェーブフロントの次の部分で実行する前に行う。
【００３３】
例えば、第１命令サイクルでは、命令４１５Ａを、ベクトルユニット４２０のレーン４２５Ａ〜４２５Ｎにおいてウェーブフロントの第１の半分（すなわち、ワークアイテムＷ０〜ＷＮ−１）に対して実行する。次に、第２命令サイクルにおいて、命令４１５Ｂを、レーン４２５Ａ〜４２５Ｎにおいてウェーブフロントの第１の半分に対して実行する。次に、第３命令サイクルにおいて、命令４１５Ｃを、レーン４２５Ａ〜４２５Ｎにおいてウェーブフロントの第１の半分に対して実行する。次いで、第４命令サイクルにおいて、命令４１５Ｄを、レーン４２５Ａ〜４２５Ｎにおいてウェーブフロントの第１の半分に対して実行する。
【００３４】
次に、命令シーケンス４１０をウェーブフロントの第２の半分で実行する。したがって、第５命令サイクルでは、命令４１５Ａを、ベクトルユニット４２０のレーン４２５Ａ〜４２５Ｎにおいてウェーブフロントの第２の半分（すなわち、ワークアイテムＷＮ〜Ｗ２Ｎ−１）に対して実行する。次に、第６命令サイクルにおいて、命令４１５Ｂを、レーン４２５Ａ〜４２５Ｎにおいてウェーブフロントの第２の半分に対して実行する。次に、第７命令サイクルにおいて、命令４１５Ｃを、レーン４２５Ａ〜４２５Ｎにおいてウェーブフロントの第２の半分に対して実行する。次いで、第８命令サイクルにおいて、命令４１５Ｄを、レーン４２５Ａ〜４２５Ｎにおいてウェーブフロントの第２の半分に対して実行する。
【００３５】
別の実施形態では、ウェーブフロントが４×Ｎのワークアイテムを有する場合、ウェーブフロントの第１の４分の１で命令シーケンス４１０を実行することができ、次に、ウェーブフロントの第２の４分の１で命令シーケンス４１０を実行することができ、次いで、ウェーブフロントの第３の４分の１で命令シーケンス４１０を実行することができ、さらに、第４の４分の１で命令シーケンス４１０を実行することができる。他のサイズの他のウェーブフロント及び／又は他の数のレーンを有するベクトルユニットを、第２動作モードに関して同様の方法で用いることができる。
【００３６】
図７を参照すると、プロセッサ上で命令をスケジューリングするの方法７００の一実施形態が示されている。説明のために、この実施形態におけるステップ及び図８〜図９のステップは、順番に示されている。しかし、説明した方法の様々な実施形態において、説明した要素の１つ以上を、同時に行ってもよいし、示した順序と異なる順序で行ってもよいし、完全に省略されてもよいことに留意されたい。他のさらなる要素も必要に応じて実行される。本明細書で説明した様々なシステム、装置又はコンピューティングデバイスの何れも、方法７００を実施するように構成されている。
【００３７】
プロセッサは、ウェーブフロント及びシェーダプログラムの複数の命令を受信して実行する（ブロック７０５）。一実施形態では、プロセッサは、複数の実行ユニットと、スケジューラと、キャッシュと、複数のＧＰＲと、を少なくとも含む。一実施形態では、プロセッサは、ＧＰＵである。他の実施形態では、プロセッサは、他の様々なのタイプのプロセッサ（例えば、ＤＳＰ、ＦＰＧＡ、ＡＳＩＣ、マルチコアプロセッサ）の何れかである。一実施形態では、ウェーブフロント内のワークアイテムの数は、プロセッサの実行ユニットの数よりも大きい。例えば、一実施形態では、ウェーブフロントは６４のワークアイテムを含み、プロセッサは３２の実行ユニットを含む。この実施形態では、ウェーブフロント内のワークアイテムの数は、実行ユニットの数の２倍に等しい。他の実施形態では、ウェーブフロントは他の数のワークアイテムを含むことができ、及び／又は、プロセッサは他の数の実行ユニットを含むことができる。場合によっては、プロセッサは、複数のウェーブフロントを受信して実行する。このような場合には、方法７００を、複数のウェーブフロントに対して複数回実施することができる。
【００３８】
次に、プロセッサは、第１指示が検出されたか否かを判別する（条件ブロック７１０）。一実施形態では、第１指示は、ソフトウェア命令内で宣言された設定又はパラメータである。これらの設定又はパラメータは、プロセッサが用いる動作モードを指定する。別の実施形態では、第１指示は、ウェーブフロントのキャッシュミス率に基づいて生成される。他の実施形態では、他のタイプの指示が可能であり、考えられる。
【００３９】
第１指示が検出された場合（条件ブロック７１０：Ｙｅｓ）、プロセッサは、第１命令をウェーブフロントの第１部分及び第２部分で実行するように複数の実行ユニットをスケジューリングすることを、ウェーブフロントの第１部分で第２命令を実行するように複数の実行ユニットをスケジューリングする前に行う（ブロック７１５）。プロセッサは、第１指示が検出される限り、複数の命令の残りの部分について、この同じパターンのスケジューリング命令に従うことができる。第１指示が検出されない場合（条件ブロック７１０：Ｎｏ）、プロセッサは、ウェーブフロントの第１部分で第１命令及び第２命令を実行するように複数の実行ユニットをスケジューリングすることを、ウェーブフロントの第２の部分で第１命令を実行するように複数の実行ユニットをスケジューリングする前に行う（ブロック７２０）。プロセッサは、第１指示が検出されない限り、複数の命令の残りの部分について、この同じパターンのスケジューリング命令に従うことができる。また、プロセッサは、第１指示が検出されない場合、ウェーブフロントの第１部分とウェーブフロントの第２部分との間でＧＰＲの一部を共有する（ブロック７２５）。ブロック７１５，７２５の後に、方法７００は終了する。
【００４０】
図８を参照すると、並列プロセッサで何れの動作モードを用いるかを決定する方法８００の一実施形態が示されている。プロセッサの制御ユニットは、ウェーブフロントのキャッシュミス率を決定する（ブロック８０５）。実施形態に応じて、制御ユニットは、ウェーブフロントの一部又はウェーブフロントの全体のキャッシュミス率を決定することができる（ブロック８０５）。実施形態に応じて、制御ユニットは、ハードウェア及び／又はソフトウェアの任意の適切な組み合わせを用いて実装される。一実施形態では、制御ユニットは、ウェーブフロントのキャッシュミス率を予測する。別の実施形態では、制御ユニットは、ソフトウェアによって生成された指示を受信する。ここで、指示は、ウェーブフロントのキャッシュミス率を指定するものである。次に、制御ユニットは、ウェーブフロントのキャッシュミス率が閾値未満であるか否かを判別する（条件ブロック８１０）。或いは、制御ユニットが、ソフトウェアによって生成された指示を受信する場合、この指示は、キャッシュミス率が閾値未満であるか否かを指定することができる。一実施形態では、閾値は、プログラム可能である。別の実施形態では、閾値は、予め決められている。
【００４１】
ウェーブフロントのキャッシュミス率が閾値未満である場合（条件ブロック８１０：Ｙｅｓ）、プロセッサは、ウェーブフロントを処理する場合に第１動作モードを用いる（ブロック８１５）。一実施形態では、第１動作モードは、ウェーブフロントの全ての部分で各命令を発行することを、シェーダプログラムの次の命令に進む前に行うことを含む。ウェーブフロントのキャッシュミス率が閾値以上である場合（条件ブロック８１０：Ｎｏ）、プロセッサは、ウェーブフロントを処理する場合に第２動作モードを用いる（ブロック８２０）。一実施形態では、第２動作モードは、ウェーブフロントの第１部分で命令セットを実行し、次に、ウェーブフロントの第２部分で同じ命令セットを実行すること等を、ウェーブフロントの全ての部分が処理されるまで行うことを含む。ブロック８１５，８２０の後に、方法８００は終了する。
【００４２】
図９を参照すると、並列プロセッサの異なる動作モードを用いる方法９００の別の実施形態が示されている。プロセッサの制御ユニットは、プロセッサの動作モードを決定する（ブロック９０５）。実施形態に応じて、制御ユニットは、ハードウェア及び／又はソフトウェアの任意の適切な組み合わせを用いて実装される。何れの動作モードを選択するかを決定するために制御ユニットが用いる基準は、実施形態毎に異なっていてもよい。使用可能な基準の一例は、方法８００に関して説明する図８に記載されている。プロセッサ動作モードを選択するために使用可能な基準の他の例も可能であり、考えられる。
【００４３】
制御ユニットが第１動作モードを選択した場合（条件ブロック９１０：第１）、プロセッサは、プロセッサが処理しているウェーブフロントの異なるサブセット間でレジスタを共有しない（ブロック９１５）。他の場合では、制御ユニットが第２動作モードを選択した場合（条件ブロック９１０、第２）、制御ユニットは、プロセッサが処理しているウェーブフロントの異なるサブセット間で１つ以上のレジスタを共有する（ブロック９２０）。例えば、一実施形態では、レジスタを共有することには、プロセッサが、第１命令セットに対するウェーブフロントの第１部分についてレジスタファイルの共有部分を使用することを含む。次に、プロセッサは、ウェーブフロントの第２部分に対してレジスタファイルの共有部分を再使用する。ウェーブフロントに２つを超える部分がある場合、プロセッサは、ウェーブフロントのさらなる部分に対してレジスタファイルの共有部分を再使用する。ブロック９２０の後に、方法９００は終了する。
【００４４】
いくつかの実施形態では、プロセッサは、２つを超える動作モードを有し得ることに留意されたい。これらの実施形態において、動作モードの第１サブセット（例えば、第１モード、第３モード、第７モード）が、図７に示す「第１」の肢に従い、動作モードの第２サブセット（例えば、第２モード、第４モード、第５モード、第６モード）が、図７に示す「第２」の肢に従うように、条件ブロック９１０を適用することができる。或いは、別の実施形態では、共有されるレジスタファイルの部分のサイズは、異なる動作モードに応じて異なり得る。例えば、第２モードの場合、第１の数のレジスタを第３モードに対して共有し、第２の数のレジスタを第４モードに対して共有し、第３の数のＧＰＲを共有する等である。
【００４５】
様々な実施形態では、ソフトウェアアプリケーションのプログラム命令を用いて、上述した方法及び／又はメカニズムを実装する。プログラム命令は、高水準プログラミング言語（例えば、Ｃ）でハードウェアの動作を記述する。或いは、Ｖｅｒｉｌｏｇ等のハードウェア設計言語（ＨＤＬ）が用いられる。プログラム命令は、非一時的なコンピュータ可読記憶媒体に記憶される。様々なタイプの記憶媒体を利用することができる。記憶媒体は、使用中にコンピューティングシステムによってアクセスされ、プログラムの実行のためにプログラム命令及び付随するデータをコンピューティングシステムに提供することが可能である。コンピューティングシステムは、１つ以上のメモリと、プログラム命令を実行するように構成された１つ以上のプロセッサと、を少なくとも含む。上述した実施形態は、実施態様の非限定的な例に過ぎないことを強調しておかなければならない。上述した開示内容が十分に理解されると、多くの変形及び修正が当業者に明らかになるであろう。以下の特許請求の範囲はこのような変形及び修正の全てを包含すると解釈されることを意図している。
【図１】
2020515943.tif 000003
【図２】
2020515943.tif 000004
【図３】
2020515943.tif 000005
【図４】
2020515943.tif 000006
【図５】
2020515943.tif 000007
【図６】
2020515943.tif 000008
【図７】
2020515943.tif 000009
【図８】
2020515943.tif 000010
【図９】
2020515943.tif 000011
【国際調査報告】
2020515943.tif 000012