(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2024-01-22
(45)【発行日】2024-01-30
(54)【発明の名称】グラフィックス・プロセッサ、コンピュータ・プログラム、記憶媒体、及びコマンド実行方法
(51)【国際特許分類】
G06F 9/38 20180101AFI20240123BHJP
G06F 15/177 20060101ALI20240123BHJP
【FI】
G06F9/38 370C
G06F15/177 B
【外国語出願】
(21)【出願番号】P 2019208610
(22)【出願日】2019-11-19
【審査請求日】2022-11-17
(32)【優先日】2019-01-09
(33)【優先権主張国・地域又は機関】US
(73)【特許権者】
【識別番号】593096712
【氏名又は名称】インテル コーポレイション
(74)【代理人】
【識別番号】100107766
【氏名又は名称】伊東 忠重
(74)【代理人】
【識別番号】100070150
【氏名又は名称】伊東 忠彦
(74)【代理人】
【識別番号】100091214
【氏名又は名称】大貫 進介
(74)【代理人】
【識別番号】100112759
【氏名又は名称】藤村 直樹
(72)【発明者】
【氏名】バラージ ヴェンブ
(72)【発明者】
【氏名】ブランドン フリフレット
(72)【発明者】
【氏名】ジェームズ ヴァレリオ
(72)【発明者】
【氏名】マイケル アポダカ
(72)【発明者】
【氏名】ベン アシュバーグ
(72)【発明者】
【氏名】ヘマ ナルーリ
(72)【発明者】
【氏名】アンクル シャー
(72)【発明者】
【氏名】ムラーリ ラマドス
(72)【発明者】
【氏名】デイヴィッド プファー
(72)【発明者】
【氏名】アルトゥー コーカー
(72)【発明者】
【氏名】アディティア ナヴァレ
(72)【発明者】
【氏名】アビシェーク アール. アプウ
(72)【発明者】
【氏名】ジョイディープ レイ
(72)【発明者】
【氏名】トラヴィス シュルエスラー
【審査官】漆原 孝治
(56)【参考文献】
【文献】特表2014-514660(JP,A)
【文献】米国特許出願公開第2012/0001925(US,A1)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 9/38
G06F 15/177
(57)【特許請求の範囲】
【請求項1】
グラフィックス・プロセッサであって:
グラフィックス処理エンジンの第1タイル;
グラフィックス処理エンジンの第2タイル;及び
ホスト・システムと前記グラフィックス・プロセッサとの間のインターフェース;
を含み、前記インターフェースは、
第1パーティションと第2パーティションとを有するワークロードに関するコマンドのセットを受信し、前記コマンドのセットを前記グラフィックス処理エンジンの第1タイルへ送信し、前記コマンドのセットを前記グラフィックス処理エンジンの第2タイルへ送信し;
前記グラフィックス処理エンジンの第1タイルは、前記第1パーティションに関連付けられる第1パーティション識別子を第1ハードウェア・コンテキストから読み込み、前記第2パーティションのコマンドをバイパスしながら、前記第1パーティションのコマンドを条件に応じて実行し;及び
前記グラフィックス処理エンジンの第2タイルは、前記第2パーティションに関連付けられる第2パーティション識別子を第2ハードウェア・コンテキストから読み込み、前記第1パーティションのコマンドをバイパスしながら、前記第2パーティションのコマンドを条件に応じて実行
し、
前記インターフェースは、前記第1ハードウェア・コンテキストを前記グラフィックス処理エンジンの第1タイルに関連付けるコマンドを更に受信する、グラフィックス・プロセッサ。
【請求項2】
前記ホスト・システムに対する前記インターフェースは、前記第1ハードウェア・コンテキストを第1論理レンダー・コンテキストに基づいて設定するコマンドを更に受信する、請求項
1に記載のグラフィックス・プロセッサ。
【請求項3】
前記ホスト・システムに対する前記インターフェースは、前記第2ハードウェア・コンテキストを前記グラフィックス処理
エンジンの第2タイルに関連付けるコマンドを更に受信する、請求項
2に記載のグラフィックス・プロセッサ。
【請求項4】
前記ホスト・システムに対する前記インターフェースは、前記第2ハードウェア・コンテキストを第2論理レンダー・コンテキストに基づいて設定するコマンドを更に受信する、請求項
3に記載のグラフィックス・プロセッサ。
【請求項5】
前記インターフェースは、前記ワークロードに関して実行されるコマンドを含むメモリ・バッファを介して、前記ワークロードに関する前記コマンドのセットを受信する、請求項
4に記載のグラフィックス・プロセッサ。
【請求項6】
前記第1ハードウェア・コンテキストは、前記メモリ・バッファにおける、前記第1パーティションの始まりに関連付けられる第1オフセットを含み、前記第2ハードウェア・コンテキストは、前記メモリ・バッファにおける、前記第2パーティションの始まりに関連付けられる第2オフセットを含む、請求項
5に記載のグラフィックス・プロセッサ。
【請求項7】
前記グラフィックス処理
エンジンの第1タイルは、前記第1パーティションのコマンドの実行を、前記メモリ・バッファ内の第1オフセットの場所に格納されているコマンドで開始する、請求項
6に記載のグラフィックス・プロセッサ。
【請求項8】
前記グラフィックス処理
エンジンの第2タイルは、前記第2パーティションのコマンドの実行を、前記メモリ・バッファ内の第2オフセットの場所に格納されているコマンドで開始する、請求項
6又は
7に記載のグラフィックス・プロセッサ。
【請求項9】
前記グラフィックス処理
エンジンの第1タイルは、前記第1パーティション及び前記第2パーティションの実行が完了した場合に、前記グラフィックス処理
エンジンの第2タイルと同期する、請求項
8に記載のグラフィックス・プロセッサ。
【請求項10】
1つ以上のプロセッサにオペレーションを実行させる命令を有するコンピュータ・プログラムであって、前記オペレーションは:
グラフィックス処理エンジンの複数のタイルを有するグラフィックス・プロセッサによって実行されるワークロードのコマンドのセットを生成するステップ;
前記コマンドのセットを第1パーティションと第2パーティションとに分けるステップ;
前記第1パーティションを識別する第1パーティション識別子を第1レンダー・コンテキストに関連付けるステップ;
前記第2パーティションを識別する第2パーティション識別子を第2レンダー・コンテキストに関連付けるステップ;
前記グラフィックス処理エンジンの複数のタイルのうちの第1グラフィックス処理エンジン・タイルと第2グラフィックス処理エンジン・タイルの各々に、前記第1パーティションと前記第2パーティションとをサブミットするステップ;
前記第1グラフィックス処理エンジン・タイルにより前記第1パーティションを実行するステップ;及び
前記第2グラフィックス処理エンジン・タイルにより前記第2パーティションを実行するステップを含
み、
前記オペレーションは、更に:
前記第1レンダー・コンテキストを初期化し、前記第1パーティションを実行するために使用される実行状態を規定するステップ;及び
前記第2レンダー・コンテキストを初期化し、前記第2パーティションを実行するために使用される実行状態を規定するステップ;
を含む、コンピュータ・プログラム。
【請求項11】
前記オペレーションは、前記第1パーティション及び前記第2パーティションを実行する前に:
前記第1パーティション識別子を前記第1パーティションに割り当てるステップ;及び
前記第2パーティション識別子を前記第2パーティションに割り当てるステップ;
を更に含む、請求項
10に記載のコンピュータ・プログラム。
【請求項12】
前記第1グラフィックス処理エンジン・タイルと第2グラフィックス処理エンジン・タイルの各々に、前記第1パーティションと前記第2パーティションとをサブミットするステップが、前記第1パーティション及び前記第2パーティションのコマンドを含むバッチ・バッファをサブミットするステップを含む、請求項
10に記載のコンピュータ・プログラム。
【請求項13】
前記オペレーションが、前記第1パーティション及び前記第2パーティションを実行する前に、前記第1レンダー・コンテキストを前記第1グラフィックス処理エンジン・タイルに割り当て、前記第2レンダー・コンテキストを前記第2グラフィックス処理エンジン・タイルに割り当てるステップを更に含む、請求項
12に記載のコンピュータ・プログラム。
【請求項14】
前記第1レンダー・コンテキストが、前記バッチ・バッファにおける、前記第1パーティションの始まりに対する第1オフセットを含み、前記第2レンダー・コンテキストが、前記バッチ・バッファにおける、前記第2パーティションの始まりに対する第2オフセットを含む、請求項
13に記載のコンピュータ・プログラム。
【請求項15】
前記バッチ・バッファは、前記第1パーティション及び前記第2パーティションのエンドにおいて同期コマンドを含む、請求項
14に記載のコンピュータ・プログラム。
【請求項16】
分散グラフィックス・コンピュータにおいてコマンドを実行する方法であって:
グラフィックス・プロセッサにおいてコマンドのセットを受信するステップであって、前記コマンドのセットは、第1パーティションと第2パーティションとを有するワークロードを表し、前記グラフィックス・プロセッサはグラフィックス処理エンジンの複数のタイルを含む、ステップと;
グラフィックス処理エンジンの第1タイルによって、前記第1パーティションに関連付けられる第1パーティション識別子を第1ハードウェア・コンテキストから読み込むステップ;
グラフィックス処理エンジンの第2タイルによって、前記第2パーティションに関連付けられる第2パーティション識別子を第2ハードウェア・コンテキストから読み込むステップ;
それぞれのタイルに関連するパーティション識別子を有するコマンドを条件に応じて実行するように、前記グラフィックス処理エンジンの第1タイルと前記グラフィックス処理エンジンの第2タイルとを設定するステップ;
前記第2パーティションのコマンドをバイパスしながら前記グラフィックス処理エンジンの第1タイルで前記第1パーティションのコマンドを実行するステップ;及び
前記第1パーティションのコマンドをバイパスしながら前記グラフィックス処理エンジンの第2タイルで前記第2パーティションのコマンドを実行するステップ;
を含
み、前記コマンドのセットを受信するステップは:
前記グラフィックス処理エンジンの第1タイルを前記第1ハードウェア・コンテキストに関連付けるコマンドを受信するステップ;及び
前記グラフィックス処理エンジンの第2タイルを前記第2ハードウェア・コンテキストに関連付けるコマンドを受信するステップ;
を更に含む、方法。
【請求項17】
前記第1パーティションの実行を完了する前に、前記グラフィックス処理エンジンの第1タイルから前記グラフィックス処理エンジンの第3タイルへの前記第1パーティションの実行を移行するトリガを受信するステップ;及び
前記グラフィックス処理エンジンの第3タイルにより前記第1パーティションの少なくとも一部を実行するステップ;
を更に含む請求項
16に記載の方法。
【請求項18】
前記グラフィックス処理エンジンの第1タイルから前記グラフィックス処理エンジンの第3タイルへ、前記第1パーティションのパーティション識別子をアトミックに指定し直すことにより、前記第1パーティションの実行を移行するステップを更に含む請求項
17に記載の方法。
【請求項19】
請求項
16-18の内の何れか1項に記載の実行するための手段を含むシステム。
【請求項20】
請求項
10-15の内の何れか1項に記載のコンピュータ・プログラムを格納する記憶媒体。
【発明の詳細な説明】
【背景技術】
【0001】
[0001]
コンピューティング・システムは、グラフィックス処理を実行し、線形補間、モザイク処理、ラスタライゼーション、テクスチャ・マッピング、深度テスト等のワークロードを並列演算するグラフィックス・プロセッサを含むことができる。従来、グラフィックス・プロセッサは、グラフィックス・データを処理するために、固定された機能演算ユニットを使用していた。しかしながら、現代のグラフィックス・プロセッサは、プログラム可能な部分を含んでおり、このようなプロセッサが、頂点データ及びフラグメント・データを処理するためのより広範な種々のオペレーション、並びに汎用の並列演算ワークロードをサポートすることを可能にする。このようなプロセッサは一般にインターフェースを含み、そのインターフェースを介して、プログラム可能なワークロードは、プロセッサ上での実行のためにスケジューリングされることが可能である。
【図面の簡単な説明】
【0002】
[0002]
本実施形態の上記の特徴が詳細に理解され得るように、上記で簡単に要約される実施形態のより具体的な説明は実施形態を参照することによってなされ、実施形態の幾つかは添付図面に示される。
【0003】
[0003]
【
図1】
図1は実施形態による処理システムのブロック図である。 [0004]
【
図2】
図2は実施形態によるプロセッサのブロック図である。 [0005]
【
図3】
図3は実施形態によるグラフィックス・プロセッサのブロック図である。 [0006]
【
図4】
図4は幾つかの実施形態によるグラフィックス・プロセッサのグラフィックス処理エンジンのブロック図である。 [0007]
【
図5】
図5は本明細書で説明される幾つかの実施形態によるグラフィックス・プロセッサ・コアのハードウェア論理のブロック図である。 [0008]
【
図6A】
図6A~
図6Bは、本明細書で説明される実施形態による、グラフィックス・プロセッサ・コアで使用される処理エレメントのアレイを含むスレッド実行ロジックを示す。
【
図6B】
図6A~
図6Bは、本明細書で説明される実施形態による、グラフィックス・プロセッサ・コアで使用される処理エレメントのアレイを含むスレッド実行ロジックを示す。 [0009]
【
図7】
図7は、幾つかの実施形態によるグラフィックス・プロセッサ命令フォーマットを示すブロック図である。 [0010]
【
図8】
図8は他の実施形態によるグラフィックス・プロセッサのブロック図である。 [0011]
【
図9A】
図9A~9Bは、幾つかの実施形態によるグラフィックス・プロセッサ・コマンド・フォーマット及びコマンド・シーケンスを示す。
【
図9B】
図9A~9Bは、幾つかの実施形態によるグラフィックス・プロセッサ・コマンド・フォーマット及びコマンド・シーケンスを示す。 [0012]
【
図10】
図10は、幾つかの実施形態によるデータ処理システムのための例示的なグラフィックス・ソフトウェア・アーキテクチャを示す。 [0013]
【
図11A】
図11Aは実施形態によるIPコア開発システムを示すブロック図である。 [0014]
【
図11B】
図11Bは本明細書で説明される幾つかの実施形態による集積回路パッケージ・アセンブリの側断面図を示す。 [0015]
【
図12】
図12は実施形態によるチップ集積回路上の例示的なシステムを示すブロック図である。 [0016]
【
図13A】
図13A~13Bは、本明細書で説明される実施形態によるSoC内で使用するための例示的なグラフィックス・プロセッサを示すブロック図である。
【
図13B】
図13A~13Bは、本明細書で説明される実施形態によるSoC内で使用するための例示的なグラフィックス・プロセッサを示すブロック図である。 [0017]
【
図14A】
図14A~14Bは、本明細書で説明される実施形態による更なる例示的なグラフィックス・プロセッサ・ロジックを示す。
【
図14B】
図14A~14Bは、本明細書で説明される実施形態による更なる例示的なグラフィックス・プロセッサ・ロジックを示す。 [0018]
【
図15】
図15は実施形態によるデータ処理システムのブロック図である。 [0019]
【
図16A】
図16A~16Cは、実施形態によるマルチタイル・ワーク・スケジューリングを実行するグラフィックス処理システムを示す。
【
図16B】
図16A~16Cは、実施形態によるマルチタイル・ワーク・スケジューリングを実行するグラフィックス処理システムを示す。
【
図16C】
図16A~16Cは、実施形態によるマルチ・タイル・ワーク・スケジューリングを実行するグラフィックス処理システムを示す。 [0020]
【
図17】
図17は本明細書で説明される実施形態によるタイル・ワーク分配及びスケジューリング・システムを示す。 [0021]
【
図18】
図18は実施形態によるマルチ・タイル・グラフィックス処理システム上の負荷バランスをとることを可能にするシステムを示す。 [0022]
【
図19】
図19は実施形態によるマルチ・タイル・ワークロード・スケジューリング方法のフロー図を示す。 [0023]
【
図20】
図20は実施形態によるマルチ・タイル・ワークロードを実行する方法のフロー図を示す。 [0024]
【
図21】
図21は実施形態によるタイル間でワークロードを移行する方法のフロー図を示す。 [0025]
【
図22】
図22は実施形態によるグラフィックス・プロセッサを含むコンピューティング・デバイスのブロック図である。
【発明を実施するための形態】
【0004】
[0026]
本明細書で説明される実施形態は、より小さなグラフィックス・デバイスの多数のタイルで構成されるタイル化されたアーキテクチャを有するグラフィックス、メディア、及びコンピュータ・デバイスを提供する。そのようなデバイスは、デバイスのパワー及び/又はパフォーマンス・ターゲットに応じて、より多数の又はより少数のタイルを含むようにスケーリングされることが可能である。本明細書で説明されるスケーリングされるデバイスは、複数タイルにわたるワークロードの効率的な配分を可能にするために、特別に適合させられる作業配分インフラストラクチャを利用することができる。本明細書で説明される作業配分インフラストラクチャは、可変数の複数タイルにわたるスケーリングされたワークロード・ディスパッチを可能にする。ワーク・アイテムは、複数のタイルに広がり得るワークロードとともに、複数のタイルのうちの任意の1つ以上へサブミットされることが可能である。更に、ワーク・アイテムの完了時に、デバイス内のグラフィックス、メディア、及び/又はコンピュータ・エンジンは、実行する新しいワーク・アイテムを最小の待ち時間で容易に獲得することができる。
【0005】
[0027]
当技術分野で知られているグラフィックス、メディア、及び/又はコンピュータ・デバイスでは、1つ以上のソフトウェア・レイヤが、デバイス内の種々のエンジンに作業アイテムを分配するために使用されている。ソフトウェアは、様々なエンジンにおける負荷を監視し、それらのエンジンにワークロードを効率的に配分又は再分配することを試みることが可能である。そのようなソフトウェアは、グラフィックス、メディア、及び/又はコンピュータ・デバイスを含むデータ処理システム又はコンピューティング・デバイスのうちの1つ以上のホスト・プロセッサ(例えば、CPUコア)上で実行されるデバイス・ドライバ又はデバイス・サポート・フレームワークの一部であり得る。しかしながら、ワークロードを監視して配分するためにホスト・ソフトウェアを当てにすることは、様々な非効率性を招く。例えば、コマンド・バッファの再パケット化が必要とされ、余分なCPUサイクルを導入し、待ち時間を加え及びデバイス動作のための電力消費を増加させる。
【0006】
[0028]
一実施形態は作業スケジューリング及びサブミッション・インフラストラクチャを提供し、この場合において、ソフトウェアは、ワークロード分配構成を含むワークロードのための統一されたコマンド・バッファを作成することができる。次いで、ソフトウェアは、タイルへ直接的にワーク・アイテムをサブミットすることが可能であり、タイル内のローカル・ハードウェア・スケジューラはタイル内の適切なエンジンに対するワークロードをスケジューリングすることが可能である。各々のエンジンは、同じコマンド・バッファを実行することが可能である。エンジンが新たな作業アイテムを実行する準備ができた場合、エンジンは動的に且つアトミックに(atomically)、実行する作業の次のチャンク(例えばパーティション)を獲得することが可能である。一実施形態では、統一されたコマンド・バッファは、分散され分配されたワークロードの実行終了時で待ち合わせる同期コマンドを含む。
【0007】
[0029]
動作中に、アプリケーション又はユーザ・モード・グラフィックス・ドライバ(UMD)は、分散された実行を促すフォーマットでワークロード・コマンドをサブミットすることが可能である。ワークロード・コマンドは、統一されたコマンド・バッファ・フォーマットを有するコマンド・バッファに挿入される。コマンド・バッファ内のコマンドは、複数のタイルにわたって分散される実行を可能にするために、パーティションに分断される。グラフィックス、メディア、及びコンピュータ・デバイスにおけるエンジンは、実行するワークロード・パーティションをアトミックに取得するメカニズムを含み、そのパーティションに関連するコマンドを実行することが可能である。エンジンの実行状態を監視するために、デバイスのハイレベル・スケジューラによって介入は必要とされない。ハイレベル・スケジューラによってエンジンに提供されるパーティションの代わりに、エンジンは必要に応じて作業パーティションを取得することが可能である。
【0008】
[0030]
説明の目的のために、多くの具体的な詳細が、以下で説明される様々な実施形態の十分な理解を提供するように述べられる。しかしながら、当業者は、これらのうち幾らかの具体的な詳細なしに実施形態が実施され得ることは当業者に明らかであろう。他の例では、周知の構造及びデバイスは、基本原理を曖昧にしてしまうことを回避するため、及び実施形態のより十分な理解を提供するために、ブロック図形式で示される。以下の幾つかの実施形態は、グラフィックス・プロセッサに関連して説明されるが、本明細書で説明される技術及び教示は、汎用処理デバイス又はグラフィックス処理デバイスを含む様々なタイプの回路又は半導体デバイスに適用され得る。本明細書において「一実施形態」又は「実施形態」という言及は、実施形態に関係又は関連して説明される特定の特長、構造、又は特徴が、そのような実施形態のうちの少なくとも1つに含まれ得ることを示す。しかしながら、明細書中の様々な箇所における「一実施形態において」という語句の出現は、必ずしも同一の実施形態を指すわけではない。
【0009】
[0031]
以下の説明及び特許請求の範囲において、用語「結合された」及び「接続された」は、それらの派生したものとともに使用され得る。これらの用語は互いに同義語として意図されたものではないことが理解されるべきである。 「結合された」は、互いに直接的に物理的又は電気的に接触していてもいなくてもよい2つ以上の要素が、互いに協働又は相互作用することを示すために使用される。「接続された」は、相互に結合された2つ以上の要素間の通信の確立を示すために使用される。
【0010】
[0032]
以下の説明において、
図1-14は、種々の実施形態を組み込むか、又は関連する例示的なデータ処理システム及びグラフィックス・プロセッサ・ロジックの概要を提供する。
図15-22は、様々な実施形態の具体的な詳細を提供する。以下の実施形態の幾つかの態様は、グラフィックス・プロセッサに関連して説明され、他の態様は、中央処理ユニット(CPU)等の汎用プロセッサに関連して説明される。類似の技術及び教示は、他のタイプの回路又は半導体デバイスに適用されることが可能であり、他のタイプの回路又は半導体デバイスは、メニー・インテグレーテッド・コア・プロセッサ、GPUクラスタ、又はフィールド・プログラマブル・ゲート・アレイの1つ以上のインスタンスを含むがこれらに限定されない。一般に、教示は、画像(例えば、サンプル、ピクセル)、頂点データ、又は幾何学データを操作又は処理する任意のプロセッサ又は機械に適用可能である。
【0011】
[0042]
システム概要
図1は、実施形態による処理システム100のブロック図である。種々の実施形態において、システム100は、1つ以上のプロセッサ102及び1つ以上のグラフィックス・プロセッサ108を含み、シングル・プロセッサ・デスクトップ・システム、マルチプロセッサ・ワークステーション・システム、又は多数のプロセッサ102若しくはプロセッサ・コア107を有するサーバ・システムであってもよい。一実施形態では、システム100は、モバイル、ハンドヘルド、又は埋込装置での使用のためにシステム・オン・チップ(system-on-a-chip:SoC)集積回路内に組み込まれた処理プラットフォームである。
【0012】
[0043]
一実施形態では、システム100は、サーバに基づくゲーム・プラットフォーム、ゲーム及びメディア・コンソールを含むゲーム・コンソール、モバイル・ゲーム・コンソール、ハンドヘルド・ゲーム・コンソール、又はオンライン・ゲーム・コンソールを含む又はその中に組み込まれることが可能である。幾つかの実施形態では、システム100は、モバイル・フォン、スマートフォン、タブレット・コンピューティング・デバイス、又はモバイル・インターネット・デバイスである。処理システム100は、スマート・ウォッチ・ウェアラブル・デバイス、スマート眼鏡デバイス、拡張現実デバイス、又は仮想現実デバイス等のウェアラブル・デバイスを含み、それに結合され、又はその中に統合されることが可能である。幾つかの実施形態では、処理システム100は、1つ以上のプロセッサ102及び1つ以上のグラフィックス・プロセッサ108により生成されるグラフィカル・インターフェースを有するテレビジョン又はセット・トップ・ボックス・デバイスである。
【0013】
[0044]
幾つかの実施形態では、1つ以上のプロセッサ102はそれぞれ、実行されるとシステムの動作及びユーザ・ソフトウェアを実行する命令を処理する1つ以上のプロセッサ・コア107を含む。幾つかの実施形態では、1つ以上のプロセッサ・コア107の各々は、特定命令セット109を処理するよう構成される。幾つかの実施形態では、命令セット109は、複合命令セット計算(CISC)、縮小命令セット計算(RISC)、又は超長命令語(VLIW)による計算を促進することができる。複数のプロセッサ・コア107はそれぞれ、他の命令セットのエミュレーションを促進する命令を含み得る様々な命令セット109を処理することができる。プロセッサ・コア107はまた、ディジタル信号プロセッサ(DSP)等の他の処理デバイスを含んでもよい。
【0014】
[0045]
幾つかの実施形態では、プロセッサ102は、キャッシュ・メモリ104を含む。アーキテクチャに依存して、プロセッサ102は、単一の内部キャッシュ又は複数レベルの内部キャッシュを有し得る。幾つかの実施形態では、キャッシュ・メモリは、プロセッサ102の様々なコンポーネントの間で共有される。幾つかの実施形態では、プロセッサ102はまた、プロセッサ・コア107の中で既知のキャッシュ・コヒーレンス技術を用いて共有されてよい外部キャッシュ(例えばレベル3(Level-3:L3)キャッシュ又はラスト・レベル・キャッシュ(Last Level Cache:LLC))(図示せず)も使用する。レジスタ・ファイル106はプロセッサ102に更に含まれ、これは、異なるタイプのデータを格納する異なるタイプのレジスタ(例えば、整数レジスタ、浮動小数点レジスタ、ステータス・レジスタ、及び命令ポインタ・レジスタ)を含んでよい。幾つかのレジスタは汎用レジスタであってよい一方、他のレジスタはプロセッサ102の設計に固有であってもよい。
【0015】
[0046]
幾つかの実施形態では、1つ以上のプロセッサ102は、1つ以上のインターフェース・バス110に結合され、アドレス、データ、又は制御信号のような通信信号を、プロセッサ102とシステム100内の他のコンポーネントとの間で伝送する。インターフェース・バス110は、一実施形態では、ダイレクト・メディア・インターフェース(DMI)バスのバージョンのようなプロセッサ・バスであり得る。しかしながら、プロセッサ・バスは、DMIバスに限定されず、1つ以上の周辺機器相互接続バス(例えば、PCI、PCIExpress)、メモリバス、又は他の種類のインターフェース・バスを含んでよい。一実施形態では、プロセッサ102は、統合メモリ・コントローラ116及びプラットフォーム・コントローラ・ハブ130を含む。メモリ・コントローラ116は、メモリ・デバイスとシステム100の他のコンポーネントとの間の通信を促進する一方、プラットフォーム・コントローラ・ハブ(PCH)130は、ローカルI/Oバスを介してI/Oデバイスへの接続を提供する。
【0016】
[0047]
メモリ120は、DRAM(dynamic random access memory)デバイス、SRAM(static random access memory)デバイス、フラッシュ・メモリ・デバイス、相変化メモリ・デバイス、又は処理メモリとして機能するために適切な性能を備える何らかの他のメモリ・デバイスであり得る。一実施形態では、メモリ・デバイス120は、1つ以上のプロセッサ102がアプリケーション又はプロセスを実行する場合に使用するためのデータ122及び命令121を格納するために、システム100のシステム・メモリとして動作することが可能である。メモリ・コントローラ116はまた、プロセッサ102内の1つ以上のグラフィックス・プロセッサ108と通信してグラフィックス及びメディア・オペレーションを実行し得る選択的な外部グラフィックス・プロセッサ112に結合する。幾つかの実施形態では、ディスプレイ・デバイス111は、プロセッサ102と接続し得る。ディスプレイ・デバイス111は、モバイル電子デバイス又はラップトップ・デバイス内にあるような内部ディスプレイ・デバイス、又はディスプレイ・インターフェース(例えばDisplayPort等)を介して取り付けられた外部ディスプレイ・デバイスのうちの1つ以上であり得る。一実施形態では、ディスプレイ・デバイス111は、仮想現実(VR)アプリケーション又は拡張現実(AR)アプリケーションで使用する立体ディスプレイ・デバイスのようなHMD(head mounted display)であり得る。
【0017】
[0048]
幾つかの実施形態では、プラットフォーム・コントローラ・ハブ130は、周辺機器が、メモリ・デバイス120及びプロセッサ102に高速I/Oバスを介して接続することを可能にする。I/O周辺機器は、オーディオ・コントローラ146、ネットワーク・コントローラ134、ファームウェア・インターフェース128、無線トランシーバ126、タッチセンサ125、データ・ストレージ・デバイス124(例えば、ハード・ディスク・ドライブ、フラッシュ・メモリ、等)を含むが、これらに限定されない。データ記憶デバイス124は、ストレージ・インターフェース(例えばSATA)を介して又は周辺機器コンポーネント相互接続バス(例えば、PCI、PCIExpress)のような周辺機器バスを介して、接続することが可能である。タッチセンサ125は、タッチ・スクリーン・センサ、圧力センサ、又は指紋センサを含み得る。無線トランシーバ126は、Wi-Fiトランシーバ、Bluetooth(登録商標)トランシーバ、又は3G、4G、若しくはLTE(Long Term Evolution)トランシーバ等のモバイル・ネットワーク・トランシーバであり得る。ファームウェア・インターフェース128は、システム・ファームウェアとの通信を可能にし、例えばUEFI(unified extensible firmware interface)であり得る。ネットワーク・コントローラ134は、有線ネットワークへのネットワーク接続を可能にする。幾つかの実施形態では、高性能ネットワーク・コントローラ(図示しない)はインターフェース・バス110と結合する。オーディオ・コントローラ146は、一実施形態では、マルチ・チャネル高解像度オーディオ・コントローラである。一実施形態では、システム100は、レガシ(例えば、パーソナル・システム2(PS/2))デバイスをシステムに結合する選択的なレガシI/O・コントローラ140を含む。プラットフォーム・コントローラ・ハブ130は、1つ以上のUSB(Universal Serial Bus)・コントローラ142にも、キーボード及びマウス143の組み合わせ、カメラ144、又は他のUSB入力デバイスのような接続入力デバイスを接続し得る。
【0018】
[0049]
図示のシステム100は、例示的であって限定ではなく、別様に構成される他の種類のデータ処理システムもまた使用され得ることが理解される。例えば、メモリ・コントローラ116及びプラットフォーム・コントローラ・ハブ130の例は、外部グラフィックス・プロセッサ112のような個別外部グラフィックス・プロセッサに統合されてもよい。一実施形態では、プラットフォーム・コントローラ・ハブ130及び/又はメモリ・コントローラ116は、1つ以上のプロセッサ102の外部にあってよい。例えば、システム100は、プロセッサ102と通信するシステム・チップセット内にあるメモリ・コントローラ・ハブ及び周辺機器コントローラ・ハブとして構成され得る外部メモリ・コントローラ116及びプラットフォーム・コントローラ・ハブ130を含み得る。
【0019】
[0050]
図2は、1つ以上のプロセッサ・コア202A~202N、統合メモリ・コントローラ214、及び統合グラフィックス・プロセッサ208を有するプロセッサ200の実施形態のブロック図である。本願明細書の任意の他の図の要素と同じ参照番号(又は名称)を有する
図2のこれらの要素は、本願明細書の他の場所に記載されたものと同様の方法で動作し又は機能することが可能であるが、そのように限定されない。プロセッサ200は、破線ボックスにより示される包含する追加コア202Nまでの追加コアを含み得る。プロセッサ・コア202A~202Nの各々は、1つ以上の内部キャッシュ・ユニット204A~204Nを含む。幾つかの実施形態では、各プロセッサ・コアはまた、1つ以上の共有キャッシュ・ユニット206へのアクセスも有する。
【0020】
[0051]
内部キャッシュ・ユニット204A~204N及び共有キャッシュ・ユニット206は、プロセッサ200内のキャッシュ・メモリ階層構造を表す。キャッシュ・メモリ階層構造は、各プロセッサ・コアの中に少なくとも1つのレベルの命令及びデータ・キャッシュ、及び1つ以上のレベルの共有中間レベルキャッシュ(例えば、レベル2(L2)、レベル3(L3)、レベル4(L4)、又はキャッシュの他のレベル)を含むことができ、ここで、外部メモリの以前の最高レベルのキャッシュはLLCとして分類される。幾つかの実施形態では、キャッシュ・コヒーレンス・ロジックは、種々のキャッシュ・ユニット206及び204A~204Nの間のコヒーレンスを維持する。
【0021】
[0052]
幾つかの実施形態では、プロセッサ200はまた、1つ以上のバス・コントローラ・ユニット216及びシステム・エージェント・コア210のセットを含んでもよい。1つ以上のバス・コントローラ・ユニット216は、1つ以上のPCI又はPCIエクスプレス・バスのような周辺機器バスのセットを管理する。システム・エージェント・コア210は、種々のプロセッサ・コンポーネントに管理機能を提供する。幾つかの実施形態では、システム・エージェント・コア210は、種々の外部メモリ・デバイス(図示せず)へのアクセスを管理する1つ以上の統合メモリ・コントローラ214を含む。
【0022】
[0053]
幾つかの実施形態では、プロセッサ・コア202A~202Nのうちの1つ以上は、同時マルチ・スレッドのサポートを含む。このような実施形態では、システム・エージェント・コア210は、マルチ・スレッド処理の間にコア202A~202Nを調整し及び作動させるコンポーネントを含む。システム・エージェント・コア210は、プロセッサ・コア202A~202N及びグラフィックス・プロセッサ208の電力状態を規制するロジック及びコンポーネントを含む電力制御ユニット(PCU)を追加的に含んでよい。
【0023】
[0054]
幾つかの実施形態では、プロセッサ200は、グラフィックス処理演算を実行するグラフィックス・プロセッサ208を追加的に含む。幾つかの実施形態では、グラフィックス・プロセッサ208は、共有キャッシュ・ユニット206と1つ以上の統合メモリ・コントローラ214を含むシステム・エージェント・コア210とのセットに結合する。幾つかの実施形態では、システム・エージェント・コア210はまた、1つ以上の結合したディスプレイへのグラフィックス・プロセッサ出力を駆動するディスプレイ・コントローラ211も含む。幾つかの実施形態では、ディスプレイ・コントローラ211は、少なくとも1つの相互接続を介してグラフィックス・プロセッサに結合される別個のモジュールであってもよく、又はグラフィックス・プロセッサ208内に統合されてよい。
【0024】
[0055]
幾つかの実施形態では、リングに基づく相互接続ユニット212は、プロセッサ200の内部コンポーネントを結合するために使用される。しかしながら、ポイント・ツー・ポイント相互接続、切り替え相互接続、又は当該技術分野で周知の技術を含む他の技術のような、代替の相互接続ユニットが使用されてもよい。幾つかの実施形態では、グラフィックス・プロセッサ208は、I/Oリンク213を介してリング相互接続212に結合する。
【0025】
[0056]
例示的なI/Oリンク213は、種々のプロセッサ・コンポーネントとeDRAMモジュール等の高性能内蔵メモリ・モジュール218との間の通信を促進するパッケージI/O相互接続を含む、複数種類のうちの少なくとも1つのI/O相互接続を表す。幾つかの実施形態では、プロセッサ・コア202A~202N及びグラフィックス・プロセッサ208の各々は、内蔵メモリ・モジュール218を共有ラスト・レベル・キャッシュとして使用する。
【0026】
[0057]
幾つかの実施形態では、プロセッサ・コア202A~202Nは、同じ命令セット・アーキテクチャを実行する同種のコアである。別の実施形態では、プロセッサ・コア202A~202Nは、命令セット・アーキテクチャ(ISA)の観点からは異種であり、1つ以上のプロセッサ・コア202A~202Nが第1命令セットを実行する一方、少なくとも1つの他のコアが第1命令セットの一部分又は異なる命令セットを実行する。一実施形態では、プロセッサ・コア202A~202Nは、マイクロアーキテクチャの観点からは異種であり、比較的高い電力消費の1つ以上のコアが、比較的低い電力消費の1つ以上のパワーコアに結合する。更に、プロセッサ200は、1つ以上のチップ上に又は図示したコンポーネントを備えるSoC集積回路として他のコンポーネントに加えて実装され得る。
【0027】
[0058]
図3は、個別グラフィックス処理ユニットであってもよい又は複数の処理コアと共に統合されたグラフィックス・プロセッサであってもよい、グラフィックス・プロセッサ300のブロック図である。幾つかの実施形態では、グラフィックス・プロセッサ上のレジスタへのメモリ・マップドI/Oインターフェースを介して、及びプロセッサ・メモリ内に置かれたコマンドにより、グラフィックス・プロセッサは通信する。幾つかの実施形態では、グラフィックス・プロセッサ300は、メモリにアクセスするためのメモリ・インターフェース314を含む。メモリ・インターフェース314は、ローカル・メモリ、1つ以上の内部キャッシュ、1つ以上の共有外部キャッシュ、及び/又はシステム・メモリへのインターフェースであり得る。
【0028】
[0059]
幾つかの実施形態では、グラフィックス・プロセッサ300はまた、ディスプレイ・デバイス320へのディスプレイ出力データを駆動するディスプレイ・コントローラ302も含む。ディスプレイ・コントローラ302は、ディスプレイの1つ以上のオーバレイ・プレーン及びビデオの複数レイヤの構成又はユーザ・インターフェース要素のためのハードウェアを含む。ディスプレイ・デバイス320は、内部又は外部ディスプレイ・デバイスであり得る。一実施形態では、ディスプレイ・デバイス320は、仮想現実(VR)ディスプレイ・デバイス又は拡張現実(AR)ディスプレイ・デバイス等のヘッド・マウント・ディスプレイ・デバイスである。幾つかの実施形態では、グラフィックス・プロセッサ300は、限定ではないが、MPEG-2のようなMPEG(Moving Picture Experts Group)フォーマット、H.264/MPEG-4 AVC及びSMPTE(Society of Motion Picture & Television Engineers)421M/VC-1のようなAVC(Advanced Video Coding)フォーマット、並びにJPEG及びMJPEG(Motion JPEG)フォーマットのようなJPEG(Joint Photographic Experts Group)フォーマットを含む1つ以上のメディア符号化フォーマットに、それから、又はその間でメディアを符号化、復号、又はトランスコードするビデオ・コーデック・エンジン306を含む。
【0029】
[0060]
幾つかの実施形態では、グラフィックス・プロセッサ300は、例えばビット境界ブロック転送を含む2次元(2D)ラスタライザ演算を実行するブロック画像転送(BLIT)エンジン304を含む。しかしながら、一実施形態では、2Dグラフィックス演算は、グラフィックス処理エンジン(GPE)310の1つ以上のコンポーネントを用いて実行される。幾つかの実施形態では、GPE310は、3次元(3D)グラフィックス演算及びメディア演算を含むグラフィックス演算を実行するコンピュータ・エンジンである。
【0030】
[0061]
幾つかの実施形態では、GPE310は、3D基本形状(例えば、長方形、三角形、等)に対して作用する処理機能を用いて3次元画像及びシーンをレンダリングするような3Dオペレーションを実行する3Dパイプライン312を含む。3Dパイプライン312は、要素内で種々のタスクを実行する及び/又は3D/メディア・サブシステム315への実行スレッドを生み出すプログラマブル及び固定機能要素を含む。3Dパイプライン312は、メディア・オペレーションを実行するために使用可能であるが、GPE310の実施形態もまた、ビデオ後処理及び画像改善のようなメディア・オペレーションを実行するために特に使用されるメディア・パイプライン316を含む。
【0031】
[0062]
幾つかの実施形態では、メディア・パイプライン316は、ビデオ・コーデック・エンジン306の代わりに又はそれを代理して、ビデオ復号加速化、ビデオ・デインターレース、及びビデオ符号化加速化のような1つ以上の固有のメディア・オペレーションを実行する固定機能又はプログラマブル・ロジック・ユニットを含む。幾つかの実施形態では、メディア・パイプライン316は、3D/メディア・サブシステム315上で実行するためにスレッドを生み出すスレッド生成ユニットを更に含む。生成されたスレッドは、3D/メディア・サブシステム315に含まれる1つ以上のグラフィックス実行ユニットで、メディア・オペレーションのための演算を実行する。
【0032】
[0063]
幾つかの実施形態では、3D/メディア・サブシステム315は、3Dパイプライン312及びメディア・パイプライン316により生み出されたスレッドを実行するロジックを含む。一実施形態では、パイプラインは、スレッド実行要求を3D/メディア・サブシステム315へ送信し、そのサブシステムは利用可能なスレッド実行リソースへの種々の要求を調停し及びディスパッチするスレッド・ディスパッチ・ロジックを含む。実行リソースは、3D及びメディア・スレッドを処理するグラフィックス実行ユニットのアレイを含む。幾つかの実施形態では、3D/メディア・サブシステム315は、スレッド命令及びデータのための1つ以上の内部キャッシュを含む。幾つかの実施形態では、サブシステムはまた、スレッド間でデータを共有し及び出力データを格納するために、レジスタ及びアドレス可能メモリを含む共有メモリも含む。
【0033】
[0064]
グラフィックス処理エンジン
図4は、幾つかの実施形態によるグラフィックス・プロセッサのグラフィックス処理エンジン410のブロック図である。一実施形態では、グラフィックス処理エンジン(GPE)410は、
図3に示されるGPE310の1つのバージョンである。本願明細書の任意の他の図の要素と同じ参照番号(又は名称)を有する
図4の要素は、本願明細書の他の場所に記載されたものと同様のいずれかの方法で動作し又は機能し得るが、そのように限定されない。例えば、
図3の3Dパイプライン312及びメディア・パイプライン316が説明される。メディア・パイプライン316は、GPE410の幾つかの実施形態において任意であり、GPE410内に明示的に含まれなくてもよい。例えば、少なくとも一実施形態では、別個のメディア及び/又は画像プロセッサがGPE410に結合される。
【0034】
[0065]
幾つかの実施形態では、GPE410は、コマンド・ストリームを3Dパイプライン312及び/又はメディア・パイプライン316に提供するコマンド・ストリーマ403に結合する又はそれを含む。幾つかの実施形態では、コマンド・ストリーマ403は、システム・メモリ、又は内部キャッシュ・メモリ及び共有キャッシュ・メモリのうちの1つ以上であり得るメモリに結合される。幾つかの実施形態では、コマンド・ストリーマ403は、コマンドをメモリから受信し、該コマンドを3Dパイプライン312及び/又はメディア・パイプライン316へ送信する。コマンドは、3Dパイプライン312及びメディア・パイプライン316に対するコマンドを格納するリング・バッファからフェッチされる指令である。一実施形態では、リング・バッファは、複数のコマンドのバッチを格納するバッチ・コマンド・バッファを更に含み得る。3Dパイプライン312に対するコマンドは、限定ではないが3Dパイプライン312の頂点及び形状データ及び/又はメディア・パイプライン316の画像データ及びメモリ・オブジェクトのような、メモリに格納されたデータに対するリファレンスも含み得る。3Dパイプライン312及びメディア・パイプライン316は、それぞれのパイプライン内のロジックにより演算を実行することにより、又は1つ以上の実行スレッドをグラフィックス・コア・アレイ414へディスパッチすることにより、コマンド及びデータを処理する。一実施形態では、グラフィックス・コア・アレイ414は、グラフィックス・コア(例えば、グラフィックス・コア415A、グラフィックス・コア415B)の1つ以上のブロックを含み、各ブロックは1つ以上のグラフィックス・コアを含む。各グラフィックス・コアは、グラフィック及び演算オペレーション、並びに固定機能テクスチャ処理及び/又は機械学習及び人工知能加速ロジックを実行する汎用及びグラフィック専用実行ロジックを含むグラフィックス実行リソースのセットを含む。
【0035】
[0066]
種々の実施形態において、3Dパイプライン312は、頂点シェーダ、形状シェーダ、ピクセル・シェーダ、フラグメント・シェーダ、演算シェーダ、又は他のシェーダ・プログラム等の1つ以上のシェーダ(shader)プログラムを、命令を処理して実行スレッドをグラフィックス・コア・アレイ414へディスパッチすることによって処理する、固定された機能及びプログラム可能なロジックを含む。グラフィックス・コア・アレイ414は、これらのシェーダ・プログラムを処理する際に使用する実行リソースの統合ブロックを提供する。グラフィックス・コア・アレイ414のグラフィックス・コア415A~415B内の多目的実行ロジック(例えば、実行ユニット)は、種々の3D APIシェーダ言語のサポートを含み、複数のシェーダに関連付けられた複数の同時実行スレッドを実行することが可能である。
【0036】
[0067]
幾つかの実施形態では、グラフィックス・コア・アレイ414はまた、ビデオ及び/又は画像処理のようなメディア機能を実行する実行ロジックも含む。一実施形態では、実行ユニットは、グラフィックス処理演算に加えて並列汎用コンピュータ演算を実行するようプログラム可能な汎用ロジックを更に含む。汎用ロジックは、
図1のプロセッサ・コア107又は
図2のコア202A~202N内の汎用ロジックと並列に又はそれと関連して演算処理を実行することが可能である。
【0037】
[0068]
グラフィックス・コア・アレイ414上で実行するスレッドにより生成された出力データは、統合リターン・バッファ(URB)418内のメモリへデータを出力することが可能である。URB418は複数のスレッドに対するデータを格納することが可能である。幾つかの実施形態では、URB418は、グラフィックス・コア・アレイ414上で実行する様々なスレッド間でデータを送信するために使用されてよい。幾つかの実施形態では、URB418は、グラフィックス・コア・アレイにおけるスレッドと共有機能ロジック420内の固定機能ロジックと間の同期化のために追加的に使用されてもよい。
【0038】
[0069]
幾つかの実施形態では、グラフィックス・コア・アレイ414はスケーラブルであり、その結果、その結果、アレイは可変数のグラフィックス・コア・を含み、各グラフィックス・コア・は、GPE410のターゲット電力及びパフォーマンス・レベルに基づく可変数の実行ユニットを有する。一実施形態では、実行リソースは動的にスケーラブルであり、その結果、実行リソースは必要に応じてイネーブル又ディセーブルにされ得る。
【0039】
[0070]
グラフィックス・コア・アレイ414は、グラフィックス・コア・アレイ内のグラフィックス・コア間で共有される複数のリソースを含む共有機能ロジック420に結合する。共有機能ロジック420内の共有機能は、特別な補足機能をグラフィックス・コア・アレイ414に提供するハードウェア・ロジック・ユニットである。種々の実施形態において、共有機能ロジック420は、サンプラ421、マス(math)422、及びスレッド間通信(inter-thread communication:ITC)423ロジックを含むが、これらに限定されない。更に、幾つかの実施形態は、共有される機能ロジック420内に1つ以上のキャッシュ425を実装する。
【0040】
[0071]
共有機能が実装され、その場合に、所与の特別な機能に対する要求は、グラフィックス・コア・アレイ414に含まれるものには不十分である。その代わりに、該特別な機能の単一のインスタンス化が、共有機能ロジック420内のスタンドアロン・エンティティとして実装され、グラフィックス・コア・アレイ414内の実行リソースの間で共有される。グラフィックス・コア・アレイ414の間で共有され及びグラフィックス・コア・アレイ414内に含まれる機能の詳細なセットは、実施形態の間で変わる。幾つかの実施形態では、共有機能ロジック420の中で、グラフィックス・コア・アレイ414により幅広く使用される特定の共有機能が、グラフィックス・コア・アレイ414内の共有機能ロジック416内に含まれてよい。種々の実施形態で、グラフィックス・コア・アレイ414内の共有機能ロジック416は、共有機能ロジック420内の一部又は全部のロジックを含み得る。一実施形態では、共有機能ロジック420内の全部のロジック要素は、グラフィックス・コア・アレイ414の共有機能ロジック416内で複製されてよい。一実施形態では、グラフィックス・コア・アレイ416の共有機能ロジック416の方を選んで共有機能ロジック420は除外される。
【0041】
[0072]
図5は、本願明細書に記載の幾つかの実施形態によるグラフィックス・プロセッサ・コア500のハードウェア・ロジックのブロック図である。本願明細書の任意の他の図の要素と同じ参照番号(又は名称)を有する
図5の要素は、本願明細書の他の場所に記載されたものと同様のいずれかの方法で動作し又は機能し得るが、そのように限定されない。図示のグラフィックス・プロセッサ・コア500は、幾つかの実施形態では、
図4のグラフィックス・コア・アレイ414内に含まれる。グラフィックス・プロセッサ・コア500は、しばしばコア・スライスと呼ばれ、モジュラ・グラフィックス・プロセッサ内の1つ又は複数のグラフィックス・コアであり得る。グラフィックス・プロセッサ・コア500は、1つのグラフィックス・コア・スライスの例であり、本願明細書に記載のグラフィックス・プロセッサは、ターゲット電力及びパフォーマンス・エンベロープに基づいて複数のグラフィックス・コア・スライスを含んでよい。各グラフィックス・プロセッサ・コア500は、汎用及び固定機能ロジックのモジュラ・ブロックを含む、サブスライスとも呼ばれる複数のサブ・コア501A~501Fに結合された固定機能ブロック530を含み得る。
【0042】
[0073]
幾つかの実施形態では、固定機能ブロック530は、例えばより低いパフォーマンス及び/又はより低電力のグラフィックス・プロセッサ実装において、グラフィックス・プロセッサ・コア500内の全てのサブ・コアにより共有されることが可能な形状/固定機能パイプライン536を含む。種々の実施形態では、形状/固定機能パイプライン536は、3D固定機能パイプライン(例えば、
図3及び
図4の3Dパイプライン312)、ビデオ・フロント・エンド・ユニット、スレッド生成部及びスレッド・ディスパッチ部、並びに、
図4の統合リターン・バッファ418等の統合リターン・バッファを管理する統合リターン・バッファ・マネジャを含む。
【0043】
[0074]
一実施形態では、固定機能ブロック530はまた、グラフィックスSoCインターフェース537、グラフィックス・マイクロコントローラ538、及びメディア・パイプライン539も含む。グラフィックスSoCインターフェース537は、グラフィックス・コア500とシステム・オン・チップ集積回路内の他のプロセッサ・コアとの間のインターフェースを提供する。グラフィックス・マイクロコントローラ538は、スレッド・ディスパッチ、スケジューリング、及び先取り(pre-emption)を含む、グラフィックス・プロセッサ・コア500の種々の機能を管理するように構成可能なプログラマブル・サブ・プロセッサである。メディア・パイプライン539(例えば、
図3及び
図4のメディア・パイプライン)は、画像及びビデオ・データを含むマルチメディア・データの復号、符号化、前処理、及び/又は後処理を促進するロジックを含む。メディア・パイプライン539は、サブ・コア501A~501F内の計算又はサンプリング・ロジックへの要求によりメディア演算を実行する。
【0044】
[0075]
一実施形態では、SoCインターフェース537は、汎用アプリケーション・プロセッサ・コア(例えば、CPU)、及び/又は共有ラスト・レベル・キャッシュ・メモリ、システムRAM及び/又は内蔵オンチップ若しくはオンパッケージDRAMのようなメモリ階層的要素を含むSoC内の他のコンポーネントとグラフィックス・プロセッサ・コア500が通信することを可能にする。SoCインターフェース537はまた、カメラ撮像パイプラインのようなSoC内の固定機能デバイスと通信できるようにすることも可能であり、グラフィックス・コア500とSoC内のCPUとの間で共有され得るグローバル・メモリ・アトミックの使用を可能にし及び/又はそれを実現する。SoCインターフェース537はまた、グラフィックス・コア500の電力管理制御も実現し、グラフィックス・コア500のクロック・ドメインとSoC内の他のクロック・ドメインとの間のインターフェースをイネーブルにすることができる。一実施形態では、SoCインターフェース537は、コマンド及び命令をグラフィックス・プロセッサ内の1つ以上のグラフィックス・コアの各々に提供するよう構成されるコマンド・ストリーマ及びグローバル・スレッド・ディスパッチ部からの、コマンド・バッファの受信を可能にする。コマンド及び命令は、メディア演算が実行される場合にはメディア・パイプライン539へ、又はグラフィックス処理演算が実行される場合には形状及び固定機能パイプライン(例えば、形状及び固定機能パイプライン536、形状及び固定機能パイプライン514)へ、ディスパッチされ得る。
【0045】
[0076]
グラフィックス・マイクロコントローラ538は、グラフィックス・コア500のために種々のスケジューリング及び管理タスクを実行するよう構成され得る。一実施形態では、グラフィックス・マイクロコントローラ538は、サブ・コア501A~501F内の実行ユニット(EU)アレイ502A~502F、504A~504F内の種々のグラフィックス並列エンジンで、グラフィックス及び/又は演算ワークロードのスケジューリングを実行することが可能である。このスケジューリング・モデルでは、グラフィックス・コア500を含むSoCのCPUコアで動作するホスト・ソフトウェアは、適切なグラフィックス・エンジンでスケジューリング・オペレーションを呼び出す複数のうち何れかのグラフィックス・プロセッサ・ドアベル(doorbell)にワークロードをサブミットすることが可能である。スケジューリング・オペレーションは、次に実行すべきワークロードを決定し、ワークロードをコマンド・ストリーマにサブミットし、エンジン上で動作している既存のワークロードを先取りし、ワークロードの進捗を監視し、及びワークロードが完了するとホスト・ソフトウェアに通知することを含む。一実施形態では、グラフィックス・マイクロコントローラ538はまた、グラフィックス・コア500に対して低電力又はアイドル状態を促進し、システムにおけるグラフィックス・ドライバ・ソフトウェア及び/又はオペレーティング・システムから独立した低電力状態遷移にわたってグラフィックス・コア400内のレジスタを保存及び復元する能力を、グラフィックス・コア500に提供する。
【0046】
[0077]
グラフィックス・コア500は、図示のサブ・コア501A~501Fより多くの又は少ない、最大N個のモジュラ・サブ・コアを有することができる。N個のサブ・コアの各セットについて、グラフィックス・コア500はまた、共有機能ロジック510、共有及び/又はキャッシュ・メモリ512、形状/固定機能パイプライン514、並びに種々のグラフィックス及びコンピュータ処理オペレーションを加速する追加固定機能ロジック516を含むことが可能である。共有機能ロジック510は、グラフィックス・コア500内のN個各々のサブ・コアにより共有されることが可能な
図4の共有機能ロジック420(例えば、サンプラ、マス、及び/又はスレッド間通信ロジック)に関連付けられるロジック・ユニットを含み得る。共有及び/又はキャッシュ・メモリ512は、グラフィックス・コア500内のN個のサブ・コア501A~501Fのセットのためのラスト・レベル・キャッシュであることが可能であり、複数のサブ・コアによりアクセス可能な共有メモリとしても機能することも可能である。形状/固定機能パイプライン514は、固定機能ブロック530内の形状/固定機能パイプライン536の代わりに含まれることが可能であり、同一又は類似のロジック・ユニットを含むことが可能である。
【0047】
[0078]
一実施形態では、グラフィックス・コア500は、グラフィックス・コア500による使用のための種々の固定機能加速ロジックを含み得る追加の固定機能ブロック516を含む。一実施形態では、追加の固定機能ロジック516は、位置限定シェーディング(position only shading)に使用するために、追加の形状パイプラインを含む。位置限定シェーディングでは、2つの形状パイプラインが存在し、それらは、形状/固定機能パイプライン516、536内の完全形状パイプライン、及び追加の固定機能ロジック516に含まれてよい追加の形状パイプラインであるカル・パイプライン(a cull pipeline)である。一実施形態では、カル・パイプラインは、完全形状パイプラインの縮小バージョンである。完全パイプライン及びカル・パイプラインは、同じアプリケーションの異なるインスタンスを実行することが可能であり、各インスタンスは別個のコンテキストを有する。位置限定シェーディングは、廃棄された三角形の長いカル・ラン(long cull runs)を隠すことができ、幾つかの例では、シェーディングをより早期に完了させることができる。例えば、一実施形態では、追加no
固定機能ロジック516内のカル・パイプライン・ロジックは、位置シェーダをメイン・アプリケーションと並列に実行することが可能であり、一般に、完全パイプラインより速く重要な結果を生成し、なぜならカル・パイプラインは、フレーム・バッファに対するピクセルのラスタライズ及びレンダリングを実行せずに、頂点の位置属性のみをフェッチしてシェーディングするからである。カル・パイプラインは、生成した重要な結果を用いて、それらの三角形が選別された(culled)か否かに拘わらず、全ての三角形に対する可視性情報を計算する。完全パイプライン(本例ではリプレイ・パイプラインと呼ばれ得る)は、可視性情報を使用して、カル処理済みの三角形をスキップし、最終的にラスタライズ段階へ渡される可視三角形のみをシェーディングする。
【0048】
[0079]
一実施形態では、追加の固定機能ロジック516はまた、機械学習トレーニング又は推定の最適化を含む実装のために、固定機能マトリクス乗算ロジック等の機械学習加速ロジックを更に含み得る。
【0049】
[0080]
各グラフィックス・サブ・コア501A~501F内に、グラフィックス・パイプライン、メディア・パイプライン、又はシェーダ・プログラムによる要求に応答して、グラフィックス、メディア、及びコンピュータ演算を実行するために使用され得る実行リソースのセットが含まれる。グラフィックス・サブ・コア501A~501Fは、複数のEUアレイ502A~502F、504A~504F、スレッド・ディスパッチ及びスレッド間通信(thread dispatch and inter-thread communication:TD/IC)ロジック503A~503F、3D(例えば、テクスチャ)サンプラ505A~505F、メディア・サンプラ506A~506F、シェーダ・プロセッサ507A~507F、及び共有ローカル・メモリ(shared local memory:SLM)508A~508Fを含む。EUアレイ502A~502F、504A~504Fはそれぞれ複数の実行ユニットを含み、実行ユニットは、グラフィックス、メディア、又は演算シェーダ・プログラムを含むグラフィックス、メディア、又は演算オペレーションのサービスにおいて浮動小数点及び整数/固定小数点ロジック・オペレーションを実行することが可能な汎用グラフィックス処理ユニットである。TD/ICロジック503A~503Fは、サブ・コア内の実行ユニットのためにローカル・スレッド・ディスパッチ及びスレッド制御オペレーションを実行し、サブ・コアの実行ユニット上で動作しているスレッド間の通信を促進する。3Dサンプラ505A~505Fは、テクスチャ又は他の3Dグラフィック関連データをメモリに読み込むことができる。3Dサンプラは、設定されたサンプラ状態及び所与のテクスチャに関連付けられるテクスチャ・フォーマットに基づいて別様にテクスチャ・データを読み込むことが可能である。メディア・サンプラ505A~505Fは、メディア・データに関連付けられる種類及びフォーマットに基づいて同様な読み込み動作を実行することができる。一実施形態では、各グラフィックス・サブ・コア501A~501Fは、代替的に、統合3D及びメディア・サンプラを含むことが可能である。サブ・コア501A~501Fの各々の中の実行ユニット上で動作するスレッドは、各サブ・コア内の共有ローカル・メモリ508A~508Fを利用することが可能であり、スレッド・グループ内で動作するスレッドを、オンチップ・メモリの共通プールを用いて実行できるようにする。
【0050】
[0081]
実行ユニット
図6A~6Bは、本願明細書に記載の実施形態によるグラフィックス・プロセッサ・コアで利用される処理要素のアレイを含むスレッド実行ロジック600を示す。本願明細書の任意の他の図の要素と同じ参照符号(又は名称)を有する
図6A~6Bの要素は、本願明細書の他の場所に記載されたものと同様のいずれかの方法で動作し又は機能し得るが、そのように限定されない。
図6Aは、
図5の各サブ・コア501A~501Fと共に説明されたハードウェア・ロジックの変形を含み得るスレッド実行ロジック600の概観を示す。
図6Bは、実行ユニットの例示的な内部の詳細を示す。
【0051】
[0082]
図6Aに示すように、幾つかの実施形態では、スレッド実行ロジック600は、シェーダ・プロセッサ602、スレッド・ディスパッチャ604、命令キャッシュ606、複数の実行ユニット608A~608Nを含むスケーラブル実行ユニット・アレイ、サンプラ610、データ・キャッシュ612、及びデータ・ポート614を含む。一実施形態では、スケーラブル実行ユニット・アレイは、1つ以上の実行ユニット(例えば、実行ユニット608A、608B、608C、608D~608N-1及び608N)を、ワークロードの計算要件に基づいてイネーブル又はディセーブルにすることにより、動的にスケーリングすることが可能である。一実施形態では、含まれるコンポーネントは、コンポーネントの各々をリンクする相互接続設備により相互接続される。幾つかの実施形態では、スレッド実行ロジック600は、命令キャッシュ606、データ・ポート614、サンプラ610、及び実行ユニット608A~608Nのうちの1つ以上を通じて、システム・メモリ又はキャッシュ・メモリ等のメモリに対する1つ以上の接続を含む。幾つかの実施形態では、各実行ユニット(例えば608A)は、複数のデータ要素を各スレッドのために並列に処理しながら、複数の同時ハードウェア・スレッドを実行することが可能なスタンドアロン型プログラマブル汎用計算ユニットである。種々の実施形態において、実行ユニット608A~608Nのアレイは、任意の数の個々の実行ユニットを含むようにスケーラブルである。
【0052】
[0083]
幾つかの実施形態では、実行ユニット608A~608Nは、主にシェーダ・プログラムを実行するために使用される。シェーダ・プロセッサ602は、種々のシェーダ・プログラムを処理し、シェーダ・プログラムに関連付けられる実行スレッドをスレッド・ディスパッチャ604によりディスパッチすることが可能である。一実施形態では、スレッド・ディスパッチャは、グラフィックス及びメディア・パイプラインからのスレッド開始要求を調停し、要求されたスレッドを、実行ユニット608A~608N内の1つ以上の実行ユニット上でインスタンス化するロジックを含む。例えば、形状パイプラインは、頂点、モザイク又はテッセレーション(tessellation)、又は形状シェーダを、処理のためにスレッド実行ロジックにディスパッチすることが可能である。幾つかの実施形態では、スレッド・ディスパッチャ604はまた、実行中のシェーダ・プログラムからのランタイム・スレッド生成要求も処理することが可能である。
【0053】
[0084]
幾つかの実施形態では、実行ユニット608A~608Nは、多くの3Dグラフィックス標準仕様からのグラフィックス・シェーダ命令のための本来的なサポートを含む命令セットをサポートし、その結果、グラフィックス・ライブラリ(例えば、ダイレクト3D及びオープンGL)からのシェーダ・プログラムは、最小限の変換で実行される。実行ユニットは、頂点及び形状処理(例えば、頂点プログラム、形状プログラム、頂点シェーダ)、ピクセル処理(例えば、ピクセル・シェーダ、フラグメント・シェーダ)、及び汎用処理(例えば、計算及びメディア・シェーダ)をサポートする。実行ユニット608A-608Nの各々は、SIMD(multi-issue single instruction multiple data)の実行が可能であり、マルチ・スレッド・オペレーションは、より大きな遅延のメモリ・アクセスに直面する効率的な実行環境を可能にする。各実行ユニットの中の各ハードウェア・スレッドは、専用高帯域幅レジスタ・ファイル及び関連する独立スレッド状態を有する。実行は、整数、単精度及び倍精度浮動小数点演算、SIMD分岐能力、論理演算、超越論的演算、及び他の様々な演算を行うことが可能なパイプラインに対するクロック毎のマルチ・イシュー(multi-issue)である。メモリ又は何れかの共有機能からのデータを待機している間、実行ユニット608A-608N内の従属ロジックは、要求したデータが返されるまで待機スレッドをスリープさせる。待機スレッドがスリープしている間、ハードウェア・リソースは、他のスレッドを処理することに専念してよい。例えば、頂点シェーダ演算に関連する遅延の間、実行ユニットは、ピクセル・シェーダ、フラグメント・シェーダ、又は異なる頂点シェーダを含む別の種類のシェーダ・プログラムのために演算を実行することが可能である。
【0054】
[0085]
実行ユニット608A-608Nの中の各実行ユニットは、データ要素のアレイに関して動作する。データ要素の数は、「実行サイズ」又は命令のためのチャネル数である。実行チャネルは、データ要素アクセス、マスキング、及び命令内のフロー制御に対する実行についての論理ユニットである。チャネル数は、特定のグラフィックス・プロセッサの物理ALU(Arithmetic Logic Unit)又はFPU(Floating Point Unit)の数と独立であってよい。幾つかの実施形態では、実行ユニット608A-608Nは、整数及び浮動小数点データ型をサポートする。
【0055】
[0086]
実行ユニット命令セットは、SIMD命令を含む。種々のデータ要素は、パックされたデータ・タイプとしてレジスタに格納されることが可能であり、実行ユニットは、要素のデータ・サイズに基づいて種々の要素を処理することになる。例えば、256ビット幅のベクトルに関して演算する場合、ベクトルの256ビットは、レジスタに格納され、実行ユニットは、4個の別個の64ビットのパックされたデータ要素(クワッド・ワード(Quad-Word:QW)サイズ・データ要素)、8個の別個の32ビットのパックされたデータ要素(ダブル・ワード(DoubleWord:DW)サイズ・データ要素)、16個の別個の16ビットのパックされたデータ要素(ワード(Word:W)サイズ・データ要素)、又は32個の別個の8ビットデータ要素(バイト(byte:B)サイズ・データ要素)として、ベクトルに関して演算する。しかしながら、異なるベクトル幅及びレジスタ・サイズが可能である。
【0056】
[0087]
ある実施形態では、1つ以上の実行ユニットが、融合実行ユニットに共通であるスレッド制御ロジック(607A~607N)を有する融合EU609A~609Nに結合されることが可能である。複数のEUがEUグループに融合されることが可能である。融合EUグループ内の各EUは、別個のSIMDハードウェア・スレッドを実行するよう構成されることが可能である。融合EUグループ内のEU数は、実施形態に応じて変化し得る。更に、SIMD8、SIMD16、及びSIMD32を含むがこれらに限定されない種々のSIMD幅が、EU毎に実行されることが可能である。各融合グラフィックス実行ユニット609A~609Nは、少なくとも2つの実行ユニットを含む。例えば、第1実行ユニット609Aは、第1EU608A、第2EU608B、及び第1EU608Aと第2EU608Bとに共通するスレッド制御ロジック607Aを含む。スレッド制御ロジック607Aは、融合グラフィックス実行ユニット609Aで実行されるスレッドを制御し、融合実行ユニット609A~609N内の各EUが、共通命令ポインタ・レジスタを使用して実行することを可能にする。
【0057】
[0088]
1つ以上の内部命令キャッシュ(例えば606)が、実行ユニット用のスレッド命令をキャッシュするために、スレッド実行ロジック600に含まれる。幾つかの実施形態では、1つ以上のデータ・キャッシュ(例えば612)は、スレッド実行中にスレッド・データをキャッシュするために含まれる。幾つかの実施形態では、サンプラ610は、3D演算のためのテクスチャ・サンプリング及びメディア演算のためのメディア・サンプリングを提供するために含まれる。幾つかの実施形態では、サンプラ610は、サンプリングされたデータを実行ユニットに提供する前に、サンプリング・プロセス中にテクスチャ又はメディア・データを処理するために、特別なテクスチャ又はメディア・サンプリング機能を含む。
【0058】
[0089]
実行中、グラフィックス及びメディア・パイプラインは、スレッド開始要求をスレッド実行ロジック600へ、スレッド生成(spawning)及びディスパッチ(dispatch)ロジックを介して送信する。幾何学オブジェクトのグループが処理され、ピクセル・データにラスタライズされると、シェーダ・プロセッサ602内のピクセル・プロセッサ・ロジック(例えば、ピクセル・シェーダ・ロジック、フラグメント・シェーダ・ロジック、等)が呼び出され、出力情報を更に計算し及び出力面(例えば、色バッファ、深度バッファ、ステンシル・バッファ、等)に書き込まれるべき結果を生じさせる。幾つかの実施形態では、ピクセル・シェーダ又はフラグメント・シェーダは、ラスタライズされたオブジェクト全体にわたって補間されるべき種々の頂点属性の値を計算する。幾つかの実施形態では、シェーダ・プロセッサ602内のピクセル・プロセッサ・ロジックは、API(application programming interface)-供給ピクセル又はフラグメント・シェーダ・プログラムを実行する。シェーダ・プログラムを実行するために、シェーダ・プロセッサ602は、スレッドを実行ユニット(例えば608A)へ、スレッド・ディスパッチャ604を介してディスパッチする。幾つかの実施形態では、シェーダ・プロセッサ602は、サンプラ610内のテクスチャ・サンプリング・ロジックを使用して、メモリに格納されたテクスチャ・マップ内のテクスチャ・データにアクセスする。テクスチャ・データ及び入力幾何学データに対する算術演算は、各々の幾何学フラグメントのピクセル・カラー・データを計算し、又は1つ以上のピクセルを将来の処理から破棄する。
【0059】
[0090]
幾つかの実施形態では、データ・ポート614は、グラフィックス・プロセッサ出力パイプラインでの更なる処理のために処理済みデータをメモリへ出力するように、スレッド実行ロジック600にメモリ・アクセス・メカニズムを提供する。幾つかの実施形態では、データ・ポート614は、データ・ポートを介するメモリ・アクセスのためにデータをキャッシュするように、1つ以上のキャッシュ・メモリ(例えば、データ・キャッシュ612)を含む又はそれに結合する。
【0060】
[0091]
図6Bに示されるように、グラフィックス実行ユニット608は、命令フェッチ・ユニット637、汎用レジスタ・ファイル・アレイ(general register file array:GRF)624、アーキテクチャ・レジスタ・ファイル・アレイ(architectural register file array:ARF)626、スレッド・アービタ622、送信ユニット630、分岐ユニット632、一群のSIMD浮動小数点ユニット(FPU)634、及び一実施形態では一群の専用の整数型SIMD ALU635を含む。GRF624及びARF626は、グラフィックス実行ユニット608内でアクティブであってよい同時ハードウェア・スレッドにそれぞれ関連付けられる汎用レジスタ・ファイル及びアーキテクチャ・レジスタ・ファイルのセットを含む。一実施形態では、スレッド毎のアーキテクチャ状態はARF626内に保持される一方、スレッド実行中に使用されるデータはGRF624に格納される。各スレッドのための命令ポインタを含む各スレッドの実行状態は、ARF626内のスレッド専用レジスタに保持されることが可能である。
【0061】
[0092]
一実施形態では、グラフィックス実行ユニット608は、同時複数スレッド(Simultaneous Multi-Threading:SMT)及び詳細インタリーブド・マルチ・スレッド(Interleaved Multi-Threading:IMT)の結合であるアーキテクチャを有する。アーキテクチャは、ターゲットの同時スレッド数、及び実行ユニット当たりのレジスタ数に基づいて、設計時に微調整されることが可能なモジュラ構成を有し、ここで、実行ユニット・リソースは、複数同時スレッドを実行するために使用されるロジックにわたって分割される。
【0062】
[0093]
一実施形態では、グラフィックス実行ユニット608は、それぞれ異なる命令であってよい複数の命令を同時発行(co-issue)することが可能である。グラフィックス実行ユニット・スレッド608のスレッド・アービタ622は、命令を、送信ユニット630、分岐ユニット642、又はSIMD FPU634へ実行のためにディスパッチすることができる。各実行スレッドは、GRF624内の128個の汎用レジスタにアクセスすることが可能であり、ここで、各レジスタは、32ビット・データ要素のSIMD8要素ベクトルとしてアクセス可能な32バイトを格納することが可能である。一実施形態では、各実行ユニット・スレッドは、GRF624内の4Kバイトへのアクセスを有するが、実施形態はそのように限定されず、他の実施形態ではより多数の又は少数のレジスタ・リソースが提供され得る。一実施形態では、最大7個のスレッドが同時に実行できるが、実行ユニット当たりのスレッド数は、実施形態によって変化し得る。7個のスレッドが4Kバイトにアクセスし得る実施形態では、GRF624は合計28Kバイトを格納することが可能である。フレキシブルなアドレッシング・モードは、レジスタが一緒にアドレス指定されて、効率的により幅広いレジスタを構築すること、又はストライド処理された(strided)方形ブロック・データ構造を表すことを可能にする。
【0063】
[0094]
一実施形態では、メモリ動作、サンプラ動作、及び他の長レイテンシ・システム通信は、メッセージ受け渡し送信ユニット630により実行される「送信」命令によりディスパッチされる。一実施形態では、分岐命令は、SIMDダイバージェンス及び最終的コンバージェンスを促進する専用分岐ユニット632へディスパッチされる。
【0064】
[0095]
一実施形態では、グラフィックス実行ユニット608は、浮動小数点演算を実行するために1つ以上のSIMD浮動小数点ユニット(FPU)634を含む。一実施形態では、FPU634は整数計算もサポートする。一実施形態では、FPU634は、最大M個の32ビット浮動小数点(又は整数)演算をSIMD実行し、又は最大2M個の16ビット整数若しくは16ビット浮動小数点演算をSIMD実行することができる。一実施形態では、FPUのうちの少なくとも1つは、高スループットの卓越した演算機能及び倍精度の64ビット浮動小数点をサポートするために、拡張された演算能力を提供する。幾つかの実施形態では、8ビット整数SIMD ALUのセット635も存在し、機械学習計算に関連する演算を実行するために特別に最適化されてもよい。
【0065】
[0096]
一実施形態では、グラフィックス実行ユニット608の複数のインスタンスのアレイは、グラフィックス・サブ・コア・グルーピング(例えば、サブスライス)でインスタンス化されることが可能である。スケーラビリティのために、製品アーキテクチャは、サブ・コア・グルーピング当たりの正確な実行ユニット数を選択することが可能である。一実施形態では、実行ユニット608は、複数の実行チャネルにわたって命令を実行することが可能である。別の実施形態では、グラフィックス実行ユニット608で実行される各スレッドは、異なるチャネルで実行される。
【0066】
[0097]
図7は、幾つかの実施形態によるグラフィックス・プロセッサ命令フォーマットを示すブロック図である。1つ以上の実施形態において、グラフィックス・プロセッサ実行ユニットは、複数のフォーマットの命令を有する命令セットをサポートする。実線ボックスは、実行ユニット命令に一般的に含まれるコンポーネントを示す一方、破線は任意の又は命令のサブセットにのみ含まれるコンポーネントを含む。幾つかの実施形態では、説明され図示される命令フォーマット700は、マクロ命令であり、ここでマクロ命令は実行ユニットに供給される命令であり、これに対して、マイクロ・オペレーションは、命令が処理されると命令デコードから生じる。
【0067】
[0098]
幾つかの実施形態では、グラフィックス・プロセッサ実行ユニットは、本来、128ビット命令フォーマット710の命令をサポートする。64ビットの小型命令フォーマット730は、選択された命令、命令オプション、及びオペランド数に基づいて、幾つかの命令に利用可能である。ネイティブの128ビット命令フォーマット710は、全ての命令オプションへのアクセスを提供する一方、幾つかのオプション及び演算は、64ビット・フォーマット730で制限される。64ビット・フォーマット730で利用可能なネイティブ命令は、実施形態により変化する。幾つかの実施形態では、命令は、インデックス・フィールド713内のインデックス値のセットを用いて部分的に圧縮される。実行ユニット・ハードウェアは、インデックス値に基づいて圧縮テーブルのセットを参照し、圧縮テーブル出力を用いて、128ビット命令フォーマット710内のネイティブ命令を再構成する。
【0068】
[0099]
フォーマット毎に、命令オペコード712は、実行ユニットが実行しようとする演算を定める。実行ユニットは、各オペランドの複数のデータ要素にわたって各命令を並行に実行する。例えば、加算命令に応答して、実行ユニットは、テクスチャ要素又はピクチャ要素を表す各々のカラー・チャネルにわたって同時加算演算を実行する。デフォルトで、実行ユニットは、オペランドの全てのデータ・チャネルにわたって各命令を実行する。幾つかの実施形態では、命令制御フィールド714は、チャネル選択(例えば、予測)及びデータ・チャネル順序(例えばスイズル(swizzle))のような所定の実行オプションに対する制御を可能にする。128ビット命令フォーマット710の命令では、実行サイズ・フィールド716は、並列に実行されるデータ・チャネルの数を制限する。幾つかの実施形態では、実行サイズ・フィールド716は、64ビット小型命令フォーマット730での使用に利用可能でない。
【0069】
[0100]
幾つかの実行ユニット命令は、2個のソース・オペランド、src0 720及びsrc1 722と1つの宛先718とを含む最大3個のオペランドを有する。幾つかの実施形態では、実行ユニットは、宛先の1つが示唆される二重宛先(dual destination)命令をサポートする。データ操作命令は、第3ソース・オペランド(例えば、SRC2 724)を有し、ここで命令オペコード712はソース・オペランド数を決定する。命令の最後のソース・オペランドは、命令と共に渡される中間(例えば、ハードコードされた)値であり得る。
【0070】
[0101]
幾つかの実施形態では、128ビット命令フォーマット710は、例えば直接レジスタ・アドレッシング・モード又は間接レジスタ・アドレッシング・モードが使用されることを指定するアクセス/アドレス・モード・フィールド726を含む。直接レジスタ・アドレッシング・モードが使用される場合、1つ以上のオペランドのレジスタ・アドレスは、命令の中のビットにより直接的に提供される。
【0071】
[0102]
幾つかの実施形態では、128ビット命令フォーマット710は、命令のアドレス・モード及び/又はアクセス・モードを指定するアクセス/アドレス・モード・フィールド726を含む。一実施形態では、アクセス・モードは、命令のデータ・アクセス・アライメントを定めるために使用される。幾つかの実施形態は、16バイト整合アクセス・モード及び1バイト整合アクセス・モードを含むアクセス・モードをサポートし、ここで、アクセス・モードのバイト・アライメントは、命令オペランドのアクセス・アライメントを決定する。例えば、第1モードの場合に、命令は、ソース及び宛先オペランドのためにバイト整合アドレッシングを使用し、第2モードの場合に、命令は、全てのソース及び宛先オペランドのために16バイト整合アドレッシングを使用してよい。
[0103]
一実施形態では、アクセス/アドレス・モード・フィールド726のアドレス・モード部分は、命令が直接又は間接アドレッシングを使用するか否かを決定する。直接レジスタ・アドレッシング・モードが使用される場合、命令内のビットは、1つ以上のオペランドのレジスタ・アドレスを直接的に提供する。間接レジスタ・アドレッシング・モードが使用される場合、1つ以上のオペランドのレジスタ・アドレスは、アドレス・レジスタ値及び命令内のアドレス中間フィールドに基づいて計算され得る。
【0072】
[0104]
幾つかの実施形態では、命令は、オペコード・デコード740を簡略化するために、オペコード712ビット・フィールドに基づいてグループ化される。8ビット・オペコードでは、ビット4、5、及び6は、実行ユニットがオペコードのタイプを決定することを可能にする。図示の明確なオペコード・グループ化は、単なる一例である。幾つかの実施形態では、移動(move)及びロジック・オペコード・グループ742は、データ移動及びロジック命令(例えば、移動(mov)、比較(cmp))を含む。幾つかの実施形態では、移動及びロジック・グループ742は、5個の最上位ビット(MSB)を共有し、ここで、移動(mov)命令は0000xxxxbの形式であり、ロジック命令は0001xxxxbの形式である。フロー制御命令グループ744(例えば、呼び出し(call)、ジャンプ(jmp))は、0010xxxxb(例えば、0x20)の形式で命令を含む。様々な命令グループ746は、0011xxxxb(例えば0x30)の形式で同期命令(例えば、待機(wait)、送信(send))を含む混合命令を含む。並列演算命令グループ748は、0100xxxxb(例えば、0x40)の形式でコンポーネントに渡る算術演算命令(例えば、加算(add)、乗算(mul))を含む。並列算術グループ748は、データ・チャネルに渡り並列に算術演算を実行する。ベクトル算術グループ750は、0101xxxxb(例えば、0x50)の形式で算術演算命令(例えばdp4)を含む。ベクトル算術グループは、ベクトル・オペランドに対してドット積計算のような算術演算を実行する。
【0073】
[0105]
グラフィックス・パイプライン
図8は、グラフィックス・プロセッサ800の別の実施形態のブロック図である。本願明細書の任意の他の図の要素と同じ参照符号(又は名称)を有する
図8の要素は、本願明細書の他の場所に記載されたものと同様のいずれかの方法で動作し又は機能し得るが、そのように限定されない。
【0074】
[0106]
幾つかの実施形態では、グラフィックス・プロセッサ800は、幾何学パイプライン820、メディア・パイプライン830、ディスプレイ・エンジン840、スレッド実行ロジック850、及びレンダ出力パイプライン870を含む。幾つかの実施形態では、グラフィックス・プロセッサ800は、1つ以上の汎用処理コアを含むマルチ・コア処理システム内のグラフィックス・プロセッサである。グラフィックス・プロセッサは、1つ以上の制御レジスタ(図示せず)へのレジスタ書き込みにより、又はリング相互接続802を介するグラフィックス・プロセッサ800へ発行されるコマンドにより、制御される。幾つかの実施形態では、リング相互接続802は、グラフィックス・プロセッサ800を、他のグラフィックス・プロセッサ又は汎用プロセッサ等の他の処理コンポーネントに結合する。リング相互接続802からのコマンドは、幾何学パイプライン820又はメディア・パイプライン830の個々のコンポーネントに命令を供給するコマンド・ストリーマ803により解釈される。
【0075】
[0107]
幾つかの実施形態では、コマンド・ストリーマ803は、頂点データをメモリから読み込み及びコマンド・ストリーマ803により提供される頂点処理コマンドを実行する、頂点フェッチャ805の動作を指示する。幾つかの実施形態では、頂点フェッチャ805は、頂点データを頂点シェーダ807に提供し、頂点シェーダ807は、各頂点への座標空間変換及び照明オペレーションを実行する。幾つかの実施形態では、頂点フェッチャ805及び頂点シェーダ807は、実行スレッドを実行ユニット852A~852Bへスレッド・ディスパッチャ831を介してディスパッチすることにより、頂点処理命令を実行する。
【0076】
[0108]
幾つかの実施形態では、実行ユニット852A~852Bは、グラフィックス及びメディア・オペレーションを実行するための命令セットを有するベクトル・プロセッサのアレイである。幾つかの実施形態では、実行ユニット852A~852Bは、各アレイに特有の又はアレイ間で共有される付属のL1キャッシュ851を有する。キャッシュは、データ・キャッシュ、命令キャッシュ、又は異なるパーティションにデータ及び命令を含めるように区分される単一キャッシュとして構成できる。
【0077】
[0109]
幾つかの実施形態では、幾何学パイプライン820は、3Dオブジェクトのハードウェア高速化テッセレーション(hardware-accelerated tessellation)を実行するテッセレーション・コンポーネントを含む。幾つかの実施形態では、プログラマブル・ハル(hull)シェーダ811がテッセレーション・オペレーションを構成する。プログラマブル・ドメイン・シェーダ817は、テッセレーション出力のバックエンド評価を提供する。テッセレータ813は、ハル・シェーダ811の指示で動作し、幾何学パイプライン820への入力として提供される粗・幾何学モデルに基づいて詳細・幾何学オブジェクトのセットを生成するための特定用途ロジックを含む。幾つかの実施形態では、テッセレーションが使用されない場合、テッセレーション・コンポーネント(例えば、ハル・シェーダ811、テッセレータ813、及びドメイン・シェーダ817)は、迂回されることが可能である。
【0078】
[0110]
幾つかの実施形態では、完成した幾何学オブジェクトは、実行ユニット852A~852Bへディスパッチされる1つ以上のスレッドを介して幾何学シェーダ819により処理されることが可能であり、又はクリッパ829へ直接的に進むことが可能である。幾つかの実施形態では、幾何学シェーダは、グラフィックス・パイプラインの前段階でのように頂点又は頂点のパッチではなく、全体の幾何学オブジェクトに作用する。テッセレーションがディセーブルにされる場合、幾何学シェーダ819は、頂点シェーダ807から入力を受信する。幾つかの実施形態では、幾何学シェーダ819は、テッセレーション・ユニットがディセーブルにされる場合に、幾何学テッセレーションを実行するように幾何学シェーダ・プログラムによりプログラム可能である。
【0079】
[0111]
ラスタライズの前に、クリッパ829は頂点データを処理することができる。クリッパ829は、クリッピング及び幾何学シェーダ機能を有する固定機能クリッパ又はプログラマブル・クリッパであってよい。幾つかの実施形態では、レンダ出力パイプライン870内のラスタライザ及び深度テスト・コンポーネント873は、幾何学オブジェクトをピクセル表現毎に変換するためにピクセル・シェーダをディスパッチする。幾つかの実施形態では、ピクセル・シェーダ・ロジックは、スレッド実行ロジック850に含まれる。幾つかの実施形態では、アプリケーションは、ラスタライザ及び深度テスト・コンポーネント873を迂回し、ストリーム出力ユニット823を介して未ラスタライズ頂点データにアクセスすることができる。
【0080】
[0112]
グラフィックス・プロセッサ800は、相互接続バス、相互接続ファブリック、又はプロセッサの主要コンポーネントの間でデータ及びメッセージの受け渡しを可能にする何らかの他の相互接続メカニズムを有する。幾つかの実施形態では、実行ユニット852A~852B及び関連するロジック・ユニット(例えば、L1キャッシュ851、サンプラ854、テクスチャ・キャッシュ858、等)は、メモリ・アクセス及びプロセッサのレンダ出力パイプライン・コンポーネントとの通信を実行するために、データ・ポート856を介して相互接続する。幾つかの実施形態では、サンプラ854、キャッシュ851、858、及び実行ユニット852A~852Bはそれぞれ、別個のメモリ・アクセス・パスを有する。一実施形態では、テクスチャ・キャッシュ858は、サンプラ・キャッシュとして構成されることも可能である。
【0081】
[0113]
幾つかの実施形態では、レンダ出力パイプライン870は、頂点に基づくオブジェクトを、関連するピクセルに基づく表現に変換するラスタライザ及び深度テスト・コンポーネント873を含む。幾つかの実施形態では、ラスタライザ・ロジックは、固定機能トライアングル及びライン・ラスタライゼーションを実行するために、ウィンドウァ/マスクァ・ユニット(a windower/masker unit)を含む。幾つかの実施形態では、関連するレンダー・キャッシュ878及び深度キャッシュ879も利用可能である。ピクセル演算コンポーネント877は、ピクセルに基づく演算をデータに対して実行するが、幾つかの例では、2Dオペレーションに関連するピクセル・オペレーション(例えば、ブレンディングによるビット・ブロック画像転送)は、2Dエンジン841により実行され、又はオーバレイ・ディスプレイ面を用いてディスプレイ・コントローラ843により表示の時点で置き換えられる。幾つかの実施形態では、共有L3キャッシュ875は、全てのグラフィックス・コンポーネントに利用可能であり、メイン・システム・メモリを使用せずに、データの共有を可能にする。
【0082】
[0114]
幾つかの実施形態では、グラフィックス・プロセッサ・メディア・パイプライン830は、メディア・エンジン837及びビデオ・フロント・エンド834を含む。幾つかの実施形態では、ビデオ・フロント・エンド834は、コマンド・ストリーマ803からパイプライン・コマンドを受信する。幾つかの実施形態では、メディア・パイプライン830は、別個のコマンド・ストリーマを含む。幾つかの実施形態では、ビデオ・フロント・エンド834は、コマンドをメディア・エンジン837へ送信する前に、メディア・コマンドを処理する。幾つかの実施形態では、メディア・エンジン837は、スレッド・ディスパッチャ831によりスレッド実行ユニット850へディスパッチするために、スレッドを生成するスレッド生成機能を含む。
【0083】
[0115]
幾つかの実施形態では、グラフィックス・プロセッサ800はディスプレイ・エンジン840を含む。幾つかの実施形態では、ディスプレイ・エンジン840は、プロセッサ800の外部にあり、リング相互接続802、又は何らかの他の相互接続バス若しくはファブリックを介して、グラフィックス・プロセッサと結合する。幾つかの実施形態では、ディスプレイ・エンジン840は、2Dエンジン841及びディスプレイ・コントローラ843を含む。幾つかの実施形態では、ディスプレイ・エンジン840は、3Dパイプラインと独立に動作することが可能な特定用途ロジックを含む。幾つかの実施形態では、ディスプレイ・コントローラ843は、ラップトップ・コンピュータにおけるようなシステム一体化ディスプレイ・デバイス、又はディスプレイ・デバイス・コネクタを介して取り付けられる外部ディスプレイ・デバイスであってよいディスプレイ・デバイス(図示せず)に結合する。
【0084】
[0116]
幾つかの実施形態では、幾何学パイプライン820及びメディア・パイプライン830は、複数のグラフィックス及びメディア・プログラミング・インターフェースに基づいて演算を実行するよう構成可能であり、何らかの1つのアプリケーション・プログラミング・インターフェース(API)に特有ではない。幾つかの実施形態では、グラフィックス・プロセッサのためのドライバ・ソフトウェアは、特定のグラフィックス又はメディア・ライブラリに特有のAPI呼び出しを、グラフィックス・プロセッサにより処理されることが可能なコマンドに変換する。幾つかの実施形態では、OpenGL(Open Graphics Library)、OpenCL(Open Computing Language)、及び/又はヴァルカン(Vulkan)グラフィックス及び計算API、クロノス・グループ(Khronos Group)からの全てのためにサポートが提供される。幾つかの実施形態ではまた、マイクロソフト・コーポレーションからのダイレクト3Dライブラリのためにサポートが提供されてもよい。幾つかの実施形態では、これらのライブラリの組み合せがサポートされてもよい。サポートは、OpenCV(Open Source Computer Vision Library)についても提供されてもよい。将来のAPIのパイプラインからグラフィックス・プロセッサのパイプラインへのマッピングが行われ得る場合、互換性のある3Dパイプラインを有する将来のAPIもまた、サポートされるであろう。
【0085】
[0117]
グラフィックス・パイプライン・プログラミング
図9Aは、幾つかの実施形態によるグラフィックス・プロセッサ・コマンド・フォーマットを示すブロック図である。
図9Bは、実施形態によるグラフィックス・プロセッサ・コマンド・シーケンス910を示すブロック図である。
図9A内の実線ボックスは、グラフィックス・コマンドに一般的に含まれるコンポーネントを示す一方、破線は任意的である又はグラフィックス・コマンドのサブセットにのみ含まれるコンポーネントを含む。
図9Aの例示的なグラフィックス・プロセッサ・コマンド・フォーマット900は、クライアント902、コマンド演算コード(オペコード)904、及びコマンドのためのデータ906を識別するデータ・フィールドを含む。サブ・オペコード905及びコマンド・サイズ908も、何らかのコマンドに含まれる。
【0086】
[0118]
幾つかの実施形態では、クライアント902は、コマンド・データを処理するグラフィックス・デバイスのクライアント・ユニットを指定する。幾つかの実施形態では、グラフィックス・プロセッサ・コマンド・パーサは、各コマンドのクライアント・フィールドを調べ、コマンドの更なる処理を条件付け、及びコマンド・データを適切なクライアント・ユニットへルーティングする。幾つかの実施形態では、グラフィックス・プロセッサ・クライアント・ユニットは、メモリ・インターフェース・ユニット、レンダー・ユニット、2Dユニット、3Dユニット、及びメディア・ユニットを含む。各クライアント・ユニットは、コマンドを処理する対応する処理パイプラインを有する。コマンドがクライアント・ユニットにより受信されると、クライアント・ユニットは、オペコード904と存在する場合にはサブ・オペコード905とを読み込み、実行すべきオペレーションを決定する。クライアント・ユニットは、データ・フィールド906内の情報を用いてコマンドを実行する。幾つかのコマンドに関し、明示的なコマンド・サイズ908が、コマンドのサイズを指定するように期待される。幾つかの実施形態では、コマンド・パーサは、コマンド・オペコードに基づいて、コマンドの少なくとも幾つかのサイズを自動的に決定する。幾つかの実施形態では、コマンドは、複数のダブル・ワードにより揃えられる。
【0087】
[0119]
図9Bのフロー図は、例示的なグラフィックス・プロセッサ・コマンド・シーケンス910を示す。幾つかの実施形態では、グラフィックス・プロセッサの実施形態を特徴付けるデータ処理システムのソフトウェア又はファームウェアは、示されるコマンド・シーケンスのバージョンを使用して、グラフィックス・オペレーションのセットを設定し、実行し、及び終了する。例示の目的でのみ、サンプル・コマンド・シーケンスが示され説明されるが、実施形態はこれらの特定のコマンド又はこのコマンド・シーケンスに限定されない。更に、コマンドは、コマンド・シーケンスの中で、コマンドのバッチとして発行されてもよく、その結果、グラフィックス・プロセッサは、少なくとも部分的に同時発生するコマンドのシーケンスを処理することになる。
【0088】
[0120]
幾つかの実施形態では、グラフィックス・プロセッサ・コマンド・シーケンス910は、パイプライン・フラッシュ・コマンド912で始まり、任意のアクティブなグラフィックス・パイプラインに、パイプラインの現在保留中のコマンドを完了させる。幾つかの実施形態では、3Dパイプライン922及びメディア・パイプライン924は、同時に動作しない。パイプライン・フラッシュは、アクティブ・グラフィックス・パイプラインに、任意の保留中コマンドを完了させるために実行される。パイプライン・フラッシュに応答して、グラフィックス・プロセッサのためのコマンド・パーサは、アクティブな描画エンジンが保留中のオペレーションを完了し、及び関連リード・キャッシュが無効化されるまで、コマンド処理を一時停止する。選択的に、「ダーティ(dirty)」としてマークされたレンダー・キャッシュの中の任意のデータは、メモリにフラッシュされることが可能である。幾つかの実施形態では、パイプライン・フラッシュ・コマンド912は、パイプライン同期のために、又はグラフィックス・プロセッサを低電力状態にする前に、使用されることが可能である。
【0089】
[0121]
幾つかの実施形態では、パイプライン選択コマンド913は、コマンド・シーケンスが、パイプライン間で明示的に切り替えることをグラフィックス・プロセッサに要求する場合に使用される。幾つかの実施形態では、パイプライン選択コマンド913は、コンテキストが両方のパイプラインにコマンドを発行するものでない限り、パイプライン・コマンドを発行する前に、実行コンテキスト内で1度だけ要求される。幾つかの実施形態では、パイプライン・フラッシュ・コマンド912は、パイプライン選択コマンド913によるパイプライン切り替えの直前に要求される。
【0090】
[0122]
幾つかの実施形態では、パイプライン制御コマンド914は、オペレーションのためにグラフィックス・パイプラインを構成し、3Dパイプライン922及びメディア・パイプライン924をプログラムするために使用される。幾つかの実施形態では、パイプライン制御コマンド914は、アクティブ・パイプラインのパイプライン状態を構成する。一実施形態では、パイプライン制御コマンド914は、パイプライン同期のために使用され、コマンドのバッチを処理する前にアクティブ・パイプラインの中の1つ以上のキャッシュ・メモリからのデータをクリアする。
【0091】
[0123]
幾つかの実施形態では、リターン・バッファ状態コマンド916は、データを書き込むために、それぞれのパイプラインのリターン・バッファのセットを構成するために使用される。幾つかのパイプライン演算は、演算が処理中に中間データを書き込む1つ以上のリターン・バッファの割り当て、選択、又は設定を必要とする。幾つかの実施形態では、グラフィックス・プロセッサはまた、1つ以上のリターン・バッファを使用して、出力データを格納し、及びスレッド間通信を実行する。幾つかの実施形態では、リターン・バッファ状態916は、パイプライン演算のセットのために使用するリターン・バッファのサイズ及び数を選択することを含む。
【0092】
[0124]
コマンド・シーケンスの中の残りのコマンドは、演算のためのアクティブ・パイプラインに基づき相違する。パイプライン決定920に基づき、コマンド・シーケンスは、3Dパイプライン状態930で開始する3Dパイプライン922、又はメディア・パイプライン状態940で開始するメディア・パイプライン924に合わせられる。
【0093】
[0125]
3Dパイプライン状態930を構成するためのコマンドは、頂点バッファ状態、頂点要素状態、定色状態、深さバッファ状態、及び3Dプリミティブ・コマンドが処理される前に構成されるべき他の状態変数のための、3D状態設定コマンドを含む。これらのコマンドの値は、少なくとも部分的に、使用中の特定の3D APIに基づき決定される。幾つかの実施形態では、3Dパイプライン状態930コマンドはまた、特定のパイプライン要素が使用されない場合、該要素を選択的にディセーブルにし又はバイパスすることが可能である。
【0094】
[0126]
幾つかの実施形態では、3Dプリミティブ932コマンドは、3Dパイプラインにより処理されるべき3Dプリミティブをサブミットするために使用される。3Dプリミティブ932コマンドによりグラフィックス・プロセッサに渡されるコマンド及び関連パラメータは、グラフィックス・パイプライン内の頂点フェッチ機能へ転送される。頂点フェッチ機能は、3Dプリミティブ932コマンド・データを用いて頂点データ構造を生成する。頂点データ構造は、1つ以上のリターン・バッファに格納される。幾つかの実施形態では、3Dプリミティブ932コマンドは、頂点シェーダにより、3Dプリミティブに関して頂点演算を実行するために使用される。頂点シェーダを処理するために、3Dパイプライン922は、グラフィックス・プロセッサ実行ユニットへシェーダ実行スレッドをディスパッチする。
【0095】
[0127]
幾つかの実施形態では、3Dパイプライン922は、実行934コマンド又はイベントによりトリガされる。幾つかの実施形態では、レジスタ書き込みは、コマンド実行をトリガする。幾つかの実施形態では、実行は、コマンド・シーケンス内の「go」又は「kick」コマンドによりトリガされる。一実施形態では、コマンド実行は、パイプライン同期コマンドを用いてトリガされ、グラフィックス・パイプラインを通じてコマンド・シーケンスをフラッシュする。3Dパイプラインは、3Dプリミティブのために幾何学処理を実行することになる。演算が完了すると、結果として生じた幾何学オブジェクトはラスタライズされ、ピクセル・エンジンは結果として生じたピクセルを着色する。ピクセル・シェーディング及びピクセル・バック・エンド演算を制御するための追加コマンドもまた、これらの演算のために含まれてよい。
【0096】
[0128]
幾つかの実施形態では、グラフィックス・プロセッサ・コマンド・シーケンス910は、メディア演算を実行する場合に、メディア・パイプライン924パスを辿る。通常、メディア・パイプライン924に関するプログラミングの具体的な使用及び方法は、実行されるべきメディア又は計算演算に依存する。特定のメディア復号演算は、メディア復号中のメディア・パイプラインにオフロードされてよい。幾つかの実施形態では、メディア・パイプラインもまた迂回されることが可能であり、メディア復号は、1つ以上の汎用処理コアにより提供されるリソースを全体的又は部分的に用いて実行されることが可能である。一実施形態では、メディア・パイプラインもまた、汎用グラフィックス・プロセッサユニット(general-purpose graphics processor unit:GPGPU)演算のための要素を含み、ここで、グラフィックス・プロセッサは、グラフィックス・プリミティブのレンダリングに明示的には関連しないコンピュータ・シェーダ・プログラムを用いてSIMDベクトル演算を実行するために使用される。
【0097】
[0129]
幾つかの実施形態では、メディア・パイプライン924は、3Dパイプライン922と同様の方法で構成される。メディア・パイプライン状態940を構成するコマンドのセットは、メディア・オブジェクト・コマンド924の前にコマンド・シーケンスにディスパッチ又は配置される。幾つかの実施形態では、メディア・パイプライン状態940のためのコマンドは、メディア・オブジェクトを処理するために使用されるメディア・パイプライン要素を構成するためのデータを含む。これは、エンコーダ又はデコーダ・フォーマット等の、メディア・パイプライン内のビデオ復号及びビデオ符号化ロジックを構成するためのデータを含む。幾つかの実施形態では、メディア・パイプライン状態940のためのコマンドはまた、状態設定のバッチを含む、「間接」状態要素に対する1つ以上のポインタの使用をサポートする。
【0098】
[0130]
幾つかの実施形態では、メディア・オブジェクト・コマンド942は、メディア・パイプラインによる処理のために、メディア・オブジェクトに対するポインタを供給する。メディア・オブジェクトは、処理されるべきビデオ・データを含むメモリ・バッファを含む。幾つかの実施形態では、全てのメディア・パイプライン状態は、メディア・オブジェクト・コマンド942を発行する前に有効化されなければならない。パイプライン状態が構成され、メディア・オブジェクト・コマンド942が待ち行列に入れられると、メディア・パイプライン924は、実行コマンド944又は等価な実行イベント(例えば、レジスタ書き込み)によりトリガされる。メディア・パイプライン924からの出力は、次に、3Dパイプライン922又はメディア・パイプライン924により提供される演算により後処理されてもよい。幾つかの実施形態では、GPGPU演算が設定され、メディア演算と同様の方法で実行される。
【0099】
[0131]
グラフィックス・ソフトウェア・アーキテクチャ
図10は、幾つかの実施形態によるデータ処理システム1000の例示的なグラフィックス・ソフトウェア・アーキテクチャを示す。幾つかの実施形態では、ソフトウェア・アーキテクチャは、3Dグラフィックス・アプリケーション1010、オペレーティング・システム1020、及び少なくとも1つのプロセッサ1030を含む。幾つかの実施形態では、プロセッサ1030は、グラフィックス・プロセッサ1032、及び1つ以上の汎用プロセッサ・コア1034を含む。グラフィックス・アプリケーション1010及びオペレーティング・システム1020はそれぞれ、データ処理システムのシステム・メモリ1050内で実行する。
【0100】
[0132]
幾つかの実施形態では、3Dグラフィックス・アプリケーション1010は、シェーダ命令1012を含む1つ以上のシェーダ・プログラムを含む。シェーダ言語命令は、HLSL(High Level Shader Language)又はGLSL(OpenGL Shader Language)のような高級シェーダ言語のものであってよい。アプリケーションはまた、汎用プロセッサ・コア1034による実行に適したマシン語の実行命令1014も含む。アプリケーションは、頂点データにより定義されるグラフィックス・オブジェクト1016も含む。
【0101】
[0133]
幾つかの実施形態では、オペレーティング・システム1020は、マイクロソフト社のMicrosoft(登録商標)Windows(登録商標)オペレーティング・システム、独自使用のUNIX(登録商標)のようなオペレーティング・システム、又はLinux(登録商標)カーネルの変形を用いるオープン・ソースUNIX等のオペレーティング・システムである。オペレーティング・システム1020は、Direct3D API、OpenGL API又はVulkanAPIのような、グラフィックスAPI1022をサポートすることが可能である。Direct3D APIが使用される場合、オペレーティング・システム1020は、フロントエンド・シェーダ・コンパイラ1024を用いて、HLSLの任意のシェーダ命令1012を低レベルのシェーダ言語にコンパイルする。コンパイルは、ジャスト・イン・タイム(just-in-time:JIT)コンパイルであってよく、又はアプリケーションはコンパイル前にシェーダを実行することが可能である。幾つかの実施形態では、高レベルのシェーダは、3Dグラフィックス・アプリケーション1010のコンパイル中に低レベルのシェーダにコンパイルされる。幾つかの実施形態では、シェーダ命令1012は、Vulkan APIにより使用される標準ポータブル中間表現(Standard Portable Intermediate Representation:SPIR)の或るバージョンのような中間形式で提供される。
【0102】
[0134]
幾つかの実施形態では、ユーザ・モード・グラフィックス・ドライバ1026は、シェーダ命令1012をハードウェア特有の表現に変換するバックエンド・シェーダ・コンパイラ1027を含む。OpenGL APIが使用される場合、GLSL高級言語のシェーダ命令は、コンパイルのためにユーザ・モード・グラフィックス・ドライバ1026に渡される。幾つかの実施形態では、ユーザ・モード・グラフィックス・ドライバ1026は、カーネル・モード・グラフィックス・ドライバ1029と通信するために、オペレーティング・システム・カーネル・モード機能1028を用いる。幾つかの実施形態では、カーネル・モード・グラフィックス・ドライバ1029は、コマンド及び命令をディスパッチするためにグラフィックス・プロセッサ1032と通信する。
【0103】
[0135]
IPコア実装
少なくとも1つの実施形態の1つ以上の態様は、プロセッサ等の集積回路内のロジックを表現及び/又は規定する、機械可読媒体に格納された代表的なコードによって実装されてもよい。例えば、機械可読媒体は、プロセッサ内の種々のロジックを表す命令を含んでよい。機械により読み込まれると、命令は、該機械に、本願明細書に記載の技術を実行するロジックを作成させることができる。このような表現は、「IPコア」として知られ、集積回路の構造を記述するハードウェア・モデルのような、有形の機械可読媒体に格納されてよい集積回路のためのロジックの再利用可能なユニットである。ハードウェア・モデルは、集積回路を製造する製造装置にハードウェア・モデルをロードする、様々な顧客又は製造設備に供給されてよい。本願明細書に記載の実施形態のうちの何れかに関連して記載された動作を回路が実行するように、集積回路は製造され得る。
【0104】
[0136]
図11Aは、一実施形態による演算を実行するための集積回路を製造するために使用され得るIPコア開発システム1100を示すブロック図である。IPコア開発システム1100は、より大きな設計に組み込まれ又は集積回路全体(例えば、SOC集積回路)を構成するために使用されることが可能なモジュラ再使用可能設計を生成するために使用されうる。設計設備1130は、高級プログラミング言語(例えば、C/C++)でIPコア設計のソフトウェア・シミュレーション1110を生成することが可能である。ソフトウェア・シミュレーション1110は、シミュレーション・モデル1112を用いてIPコアの動作を設計し、テストし、及び検証するために使用されることが可能である。シミュレーション・モデル1112は、機能、動作、及び/又はタイミングのシミュレーションを含んでもよい。レジスタ転送レベル(register transfer level:RTL)1115が次に生成され、又はシミュレーション・モデル1112から合成され得る。RTL設計1115は、モデル化したディジタル信号を用いて実行される関連ロジックを含む、ハードウェア・レジスタ間のディジタル信号のフローをモデル化する集積回路動作の抽象化である。RTL設計1115に加えて、ロジック・レベル又はトランジスタ・レベルでの低レベル設計もまた、生成され、設計され、又は合成されてよい。したがって、初期設計及びシミュレーションの特定の詳細事項は変化し得る。
【0105】
[0137]
RTL設計1115又は均等物は、更に、設計設備によりハードウェア・モデル1120へと合成されてもよく、ハードウェア・モデル1120は、ハードウェア記述言語(hardware description language:HDL)又は何らかの他の表現の物理設計データであってよい。HDLは、IPコア設計を検証するために更にシミュレートされ又はテストされてよい。IPコア設計は、不揮発性メモリ1140(例えば、ハード・ディスク、フラッシュ・メモリ、又は任意の不揮発性記憶媒体)を用いて第三者製造設備1165へ分配するために格納され得る。代替的に、IPコア設計は、有線接続1150又は無線接続1160を介して(例えばインターネットを介して)伝送され得る。製造設備1165は、次に、IPコア設計に少なくとも部分的に基づく集積回路を製造してよい。製造された集積回路は、本願明細書に記載の少なくとも1つの実施形態に従い演算を実行するよう構成され得る。
【0106】
[0138]
図11Bは、本願明細書に記載の幾つかの実施形態による集積回路パッケージ・アセンブリ1170の側断面図を示す。集積回路パッケージ・アセンブリ1170は、本願明細書に記載のような1つ以上のプロセッサ又はアクセラレータ・デバイスの実装を示す。パッケージ・アセンブリ1170は、基板1180に接続されたハードウェア・ロジック1172、1174の複数のユニットを含む。ロジック1172、1174は、少なくとも部分的に設定可能ロジック又は固定機能ロジックハードウェアで実装されてよく、本願明細書に記載のプロセッサ・コア、グラフィックス・プロセッサ、又は他のアクセラレータ・デバイスのうちの任意の1つ以上の部分を含み得る。ロジック1172、1174の各ユニットは、半導体ダイ内に実装され、相互接続構造1173を介して基板1180に結合されることが可能である。相互接続構造1173は、ロジック1172、1174と基板1180との間で電気信号をルーティングするよう構成されてよく、限定ではないがバンプ又はピラーのような相互接続を含み得る。幾つかの実施形態では、相互接続構造1173は、ロジック1172、1174の演算に関連付けられた、例えば入力/出力(I/O)信号及び/又は電力若しくはグランド信号等の電気信号をルーティングするよう構成されてよい。幾つかの実施形態では、基板1180は、エポキシ・ベースの積層基板である。パッケージ基板1180は、他の実施形態では他の適切な種類の基板を含んでよい。パッケージ・アセンブリ1170は、パッケージ相互接続1183を介して他の電気デバイスに接続され得る。パッケージ相互接続1183は、マザーボード、他のチップセット、又はマルチチップ・モジュールのような他の電気デバイスへ電気信号をルーティングするために、基板1180の表面に結合され得る。
【0107】
[0139]
幾つかの実施形態では、ロジック1172、1174のユニットは、ロジック1172、1174の間で電気信号をルーティングするよう構成されるブリッジ1182に電気的に結合される。ブリッジ1182は、電気信号のためのルートを提供する高密度の相互接続構造であってよい。ブリッジ1182は、ガラス又は適切な半導体材料により構成されるブリッジ基板を含んでよい。電気的ルーティング特徴は、ロジック1172、1174の間のチップ間接続を提供するために、ブリッジ基板上に形成されることが可能である。
【0108】
[0140]
ロジック1172、1174の2つのユニット及びブリッジ1182が示されているが、本願明細書に記載の実施形態は、より多くの又はより少ないロジック・ユニットを1つ以上のダイに含めてもよい。ロジックが単一のダイに含まれる場合、ブリッジ1182は除外され得るので、1つ以上のダイは、ゼロ以上のブリッジにより接続され得る。代替として、複数のダイ又はロジックのユニットが、1つ以上のブリッジにより接続され得る。追加的に、複数のロジック・ユニット、ダイ、及びブリッジは、3次元構成を含む他の可能な構成で一緒に接続され得る。
【0109】
[0141]
例示的なシステム・オン・チップ集積回路
図12~14は、本願明細書に記載の種々の実施形態による、1つ以上のIPコアを用いて製造され得る例示的な集積回路及び関連するグラフィックス・プロセッサを示す。図示されたものに加えて、追加のグラフィックス・プロセッサ/コア、周辺機器インターフェース・コントローラ、又は汎用プロセッサ・コアを含む他のロジック及び回路が含まれてよい。
【0110】
[0142]
図12は、実施形態による、1つ以上のIPコアを用いて製造され得る例示的なシステム・オン・チップ集積回路1200を示すブロック図である。例示的な集積回路1200は、1つ以上のアプリケーション・プロセッサ1205(例えば、CPU)、少なくとも1つのグラフィックス・プロセッサ1210を含み、追加的に、画像プロセッサ1215及び/又はビデオ・プロセッサ1220を含んでよく、これらのうちの任意のものが、同一の又は複数の異なる設計設備からのモジュラIPコアであってよい。集積回路1200は、USBコントローラ1225、UARTコントローラ1230、SPI/SDIOコントローラ1235、及びI
2S/I
2Cコントローラ1240を含む周辺機器又はバス・ロジックを含む。追加的に、集積回路は、HDMI(登録商標)(high-definition multimedia interface)コントローラ1250及びMIPI(mobile industry processor interface)ディスプレイ・インターフェース1255のうちの1つ以上に結合されるディスプレイ・デバイス1245を含むことが可能である。ストレージは、フラッシュ・メモリ及びフラッシュ・メモリ・コントローラを含むフラッシュ・メモリ・サブシステム1260により提供されてよい。メモリ・インターフェースは、SDRAM又はSRAMメモリ・デバイスへのアクセスのためにメモリ・コントローラ1265により提供されてよい。幾つかの集積回路は、追加的に、内蔵セキュリティ・エンジン1270を含む。
【0111】
[0143]
図13A~13Bhは、本願明細書に記載の実施形態による、SoC内で使用する例示的なグラフィックス・プロセッサを示すブロック図である。
図13Aは、実施形態による、1つ以上のIPコアを用いて製造され得るシステム・オン・チップ集積回路の例示的なグラフィックス・プロセッサ1310を示す。
図13Bは、実施形態による、1つ以上のIPコアを用いて製造され得るシステム・オン・チップ集積回路の追加的な例示的なグラフィックス・プロセッサ1340を示す。
図13Aのグラフィックス・プロセッサ1310は、低電力グラフィックス・プロセッサ・コアの一例である。
図13Bのグラフィックス・プロセッサ1340は、高性能グラフィックス・プロセッサ・コアの一例である。グラフィックス・プロセッサ1310、1340の各々は、
図12のグラフィックス・プロセッサの変形であり得る。
【0112】
[0144]
図13Aに示すように、グラフィックス・プロセッサ1310は、頂点プロセッサ1305及び1つ以上のフラグメント・プロセッサ1315A~1315N(例えば、1315A、1315、1315C、1315D、乃至1315N-1、及び1315N)を含む。グラフィックス・プロセッサ1310は、別個のロジックにより異なるシェーダ・プログラムを実行することが可能であり、その結果、頂点プロセッサ1305は、頂点シェーダ・プログラムの演算を実行するために最適化される一方、1つ以上のフラグメント・プロセッサ1315A~1315Nは、フラグメント又はピクセル・シェーダ・プログラムのフラグメント(例えばピクセル)シェーディング演算を実行する。頂点プロセッサ1305は、3Dグラフィックス・パイプラインの頂点処理段階を実行し、プリミティブ及び頂点データを生成する。フラグメント・プロセッサ1305A~1315Nは、頂点プロセッサ1305により生成されたプリミティブ及び頂点データを使用して、ディスプレイ・デバイスで表示されるフレーム・バッファを生成する。一実施形態では、フラグメント・プロセッサ1315A~1315Nは、Direct 3D API内で提供されるようなピクセル・シェーダ・プログラムと同様なオペレーションを実行するために使用され得るOpenGL API内で提供される場合に、フラグメント・シェーダ・プログラムを実行するように最適化される。
【0113】
[0145]
グラフィックス・プロセッサ1310は、追加的に、1つ以上のメモリ管理ユニット(memory management unit:MMU)1320A~1320B、キャッシュ1325A~1325B、及び回路相互接続1330A~1330Bを含む。1つ以上のMMU1320A~1320Bは、1つ以上のキャッシュ1325A~1325Bに格納された頂点又は画像/テクスチャ・データに加えて、メモリに格納される頂点又は画像/テクスチャ・データを参照し得る頂点プロセッサ1305及び/又はフラグメント・プロセッサ1315A~1315Nを含むグラフィックス・プロセッサ1310のために仮想ないし物理アドレスへのマッピングを提供する。一実施形態では、1つ以上のMMU1320A~1320Bは、
図12の1つ以上のアプリケーション・プロセッサ1205、画像プロセッサ1215、及び/又はビデオ・プロセッサ1220に関連する1つ以上のMMUを含む、システム内の他のMMUと同期化されることが可能であり、その結果、各プロセッサ1205~1220は、共有又は統一された仮想メモリ・システムに参加することが可能である。1つ以上の回路相互接続1330A~1330Bは、実施形態に従って、グラフィックス・プロセッサ1310が、SoCの内部バスを介して又は直接接続を介して、SoC内の他のIPコアとのインターフェースを為すように動作させる。
【0114】
[0146]
図13Bに示すように、グラフィックス・プロセッサ1340は、
図13Aのグラフィックス・プロセッサ1310の1つ以上のMMU1320A~1320B、キャッシュ1325A~1325B、及び回路相互接続1330A~1330Bを含む。グラフィックス・プロセッサ1340は、統一シェーダ・コア・アーキテクチャを提供する1つ以上のシェーダ・コア1355A~1355N(例えば、1355A、1355B、1355C、1355D、1355E、1355F乃至1355N-1、及び1355N)を含み、統一シェーダ・コア・アーキテクチャでは、単一のコア又はタイプ又はコアが、頂点シェーダ、フラグメント・シェーダ、及び/又はコンピュータ・シェーダを実現するためのシェーダ・プログラム・コードを含む全てのタイプのプログラマブル・シェーダ・コードを実行することが可能である。存在するシェーダ・コアの正確な数は、実施形態及び実装の間で変化し得る。追加的に、グラフィックス・プロセッサ1340は、インターコア・タスク・マネジャ1345を含み、インターコア・タスク・マネジャ1345は、実行スレッドを1つ以上のシェーダ・コア1355A~1355Nへディスパッチするスレッド・ディスパッチャ、及びタイルに基づくレンダリングのためのタイリング・オペレーションを加速するタイリング・ユニット1358として動作し、ここで、シーンのレンダリング・オペレーションは、例えばシーン内の局所的な空間コヒーレンスを利用するため、又は内部キャッシュの使用を最適化するために、画像空間において細分化される。
【0115】
[0147]
図14A~14Bは、本願明細書に記載の実施形態による追加的の例示的なグラフィックス・プロセッサ・ロジックを示す。
図14Aは、
図12のグラフィックス・プロセッサ1210内に含まれ得る及び
図13Bにおけるもののような統一シェーダ・コア1355A~1355Nであり得る、グラフィックス・コア・1400を示す。
図14Bは、マルチチップ・モジュールでの配備に適した高度に並列化された汎用グラフィックス処理ユニット1430を示す。
【0116】
[0148]
図14Aに示すように、グラフィックス・コア1400は、グラフィックス・コア1400内の実行リソースに共通である、共有命令キャッシュ1402、テクスチャ・ユニット1418、及びキャッシュ/共有メモリ1420を含む。グラフィックス・コア1400は、複数のスライス1401A~1401N又は各コアのためのパーティションを含むことが可能であり、グラフィックス・プロセッサは、グラフィックス・コア1400の複数のインスタンスを含むことが可能である。スライス1401A~1401Nは、ローカル命令キャッシュ1404A~1404N、スレッド・スケジューラ1406A~1406N、スレッド・ディスパッチャ1408A~1408N、及びレジスタ1410A~1410Nのセットを含むサポート・ロジックを含み得る。ロジック演算を実行するために、スライス1401A~1401Nは、追加機能ユニット(AFU(additional function unit)1412A~1412N)、浮動小数点ユニット(FPU(floating-point unit)1414A~1414N)、整数算術論理ユニット(ALU(arithmetic logic unit)1416A~1416N)、アドレス計算ユニット(ACU(address computational unit)1413A~1413N)、倍精度浮動小数点ユニット(DPFPU(double-precision floating-point unit)1415A~1415N)、及び行列処理ユニット(MPU(matrix processing unit)1417A~1417N)のセットを含み得る。
【0117】
[0149]
計算ユニットのうちの幾つかは、特定の精度で動作する。例えば、FPU1414A~1414Nは、単精度(32ビット)及び半精度(16ビット)の浮動小数点演算を実行することが可能である一方、DPFPU1415A~1415Nは倍精度(64ビット)の浮動小数点演算を実行する。ALU1416A~1416Nは、8ビット、16ビット、及び32ビットの精度で可変精度の整数演算を実行することが可能であり、混合精度演算のために構成されることが可能である。MPU1417A~1417Nはまた、半精度浮動小数点及び8ビット整数演算を含む混合精度行列演算のためにも構成され得る。MPU1417A~1417Nは、加速汎用行列乗算(general matrix to matrix multiplication:GEMM)のサポートを有効にすることを含む、機械学習アプリケーション・フレームワークを加速させる種々の行列演算を実行することが可能である。AFU1412A~1412Nは、三角法演算(例えば、Sine、Cosine、等)を含む、浮動小数点又は整数ユニットによりサポートされない追加の論理演算を実行することが可能である。
【0118】
[0150]
図14Bに示すように、汎用処理ユニット(GPGPU)1430は、高度に並列的な計算オペレーションを、グラフィックス処理ユニットのアレイにより実行させ得るよう構成されることが可能である。更に、GPGPU1430は、GPGPUの他のインスタンスに直接的にリンクされ、マルチGPUクラスタを生成して特定の深層ニューラル・ネットワークのトレーニング速度を向上させることが可能である。GPGPU1430は、ホスト・プロセッサとの接続を可能にするために、ホスト・インターフェース1432を含む。一実施形態では、ホスト・インターフェース1432はPCI Expressインターフェースである。しかしながら、ホスト・インターフェースはまた、ベンダ固有通信インターフェース又は通信設備であるとすることも可能である。GPGPU1430は、ホスト・プロセッサからコマンドを受信し、グローバル・スケジューラ1434を用いて、これらのコマンドに関連する実行スレッドを、計算クラスタ1436A~1436Hのセットへ分配する。計算クラスタ1436A~1436Hは、キャッシュ・メモリ1438を共有する。キャッシュ・メモリ1438は、計算クラスタ1436A~1436H内のキャッシュ・メモリのために、より上位のキャッシュとして機能し得る。
【0119】
[0151]
GPGPU1430は、メモリ・コントローラ1442A~1442Bのセットを介して計算クラスタ1436A~1436Hに結合されたメモリ14434A~14434Bを含む。種々の実施形態において、メモリ1434A~1434Bは、DRAM(dynamic random access memory)、又はGDDR(graphics double data rate)メモリを含むSGRAM(synchronous graphics random access memory)のようなグラフィックス・ランダム・アクセス・メモリを含む様々な種類のメモリ・デバイスを含み得る。
【0120】
[0152]
一実施形態では、計算クラスタ1436A~1436Hはそれぞれ、
図14Aのグラフィックス・コア1400のようなグラフィックス・コアのセットを含み、グラフィックス・コアは、機械学習計算に適したものを含む範囲の精度で計算オペレーションを実行することが可能な複数種類の整数及び浮動小数点論理ユニットを含み得る。例えば、及び一実施形態では、計算クラスタ1436A~1436Hの各々の中の浮動小数点ユニットの少なくとも或るサブセットは、16ビット又は32ビット浮動小数点演算を実行するよう構成されることが可能である一方、浮動小数点ユニットの異なるサブセットは、64ビット浮動小数点演算を実行するように構成され得る。
【0121】
[0153]
GPGPU1430の複数のインスタンスは、計算クラスタとして動作するよう構成され得る。同期及びデータ交換のために計算クラスタにより使用される通信メカニズムは、実施形態に応じて異なる。一実施形態では、GPGPU1430の複数のインスタンスは、ホスト・インターフェース1432を介して通信する。一実施形態では、GPGPU1430は、GPGPUの他のインスタンスへの直接接続を可能にするGPUリンク1440にGPGPU1430を結合するI/Oハブ1439を含む。一実施形態では、GPUリンク1440は、GPGPU1430の複数のインスタンスの間の通信及び同期を可能にする専用のGPU-GPUブリッジに結合される。一実施形態では、GPUリンク1440は、他のGPGPU又は並列プロセッサに対してデータを送信及び受信するために、高速相互接続で結合する。一実施形態では、GPGPU1430の複数のインスタンスは、別個のデータ処理システム内に置かれ、ホスト・インターフェース1432を介してアクセス可能なネットワーク・デバイスを介して通信する。一実施形態では、GPUリンク1440は、ホスト・インターフェース1432に追加的に又は代替的に、ホスト・プロセッサへの接続を可能にするよう構成され得る。
【0122】
[0154]
GPGPU1430の図示の構成は、ニューラル・ネットワークをトレーニングするために構成され得るが、一実施形態は、高性能又は低電力推定(inferencing)プラットフォーム内での配備のために構成され得るGPGPU1430の代替構成を提供する。推定構成では、GPGPU1430は、トレーニング構成と比べて、より少ない計算クラスタ1436A~1436Hを含む。更に、メモリ1434A~1434Bに関連するメモリ技術は、推定及びトレーニング構成の間で異なってもよく、より高い帯域幅メモリ技術がトレーニング構成に充てられる。一実施形態では、GPGPU1430の推定構成は、特定命令の推定をサポートすることが可能である。例えば、推定構成は、配備されるニューラル・ネットワークの推定演算中に共通に使用される1つ以上の8ビット整数ドット積命令のサポートを提供することが可能である。
【0123】
[0155]
分散グラフィックス・デバイスにおけるワークロード・スケジューリング及び分配
本明細書に記載される実施形態は、より小さなグラフィックス・デバイスの多数のタイルで構成されるタイル化されたアーキテクチャを有するグラフィックス、メディア、及びコンピュータ・デバイスを提供する。そのようなデバイスは、デバイスのパワー及び/又はパフォーマンス・ターゲットに応じて、より多数の又はより小数のタイルを含むようにスケーリングされることが可能である。このようなスケーリングされるデバイスは、複数タイルにわたるワークロードの効率的な配分を可能にするために、特別に仕立てられた作業配分インフラストラクチャを利用することが可能である。本明細書に記載されるワーク配布インフラストラクチャは、可変数の複数タイルにわたってスケーリングされるワークロード・ディスパッチを可能にする。ワーク・アイテムは、複数のタイルを跨ぐことが可能なワークロードとともに、複数タイルの任意の1つ以上のタイルにサブミットされることが可能である。追加的に、作業アイテムの完了時に、デバイス内のグラフィックス、メディア、及び/又は計算エンジンは、実行のための新しい作業アイテムを、最小の待ち時間で容易に獲得することができる。
【0124】
[0156]
図15は、一実施形態によるデータ処理システム1500のブロック図である。データ処理システム1500は、プロセッサ1502、統一メモリ1510、及び機械学習加速論理を含むGPGPU1520を有するヘテロジニアス処理システムである。プロセッサ1502及びGPGPU1520は、本明細書に記載のプロセッサ及びGPGPU/パラレル・プロセッサの何れであってもよい。プロセッサ1502は、システム・メモリ1512に格納されたコンパイラ1515のための命令を実行することができる。コンパイラ1515は、ソース・コード1514Aをコンパイルされたコード1514Bにコンパイルするためにプロセッサ1502上で実行する。コンパイルされたコード1514Bは、プロセッサ1502によって実行され得る命令、及び/又はGPGPU1520によって実行され得る命令を含むことが可能である。コンパイルの間に、コンパイル1515は、コンパイルされたコード1514Bに存在するデータ並列性のレベルに関するヒント、及び/又はコンパイルされたコード1514Bに基づいてディスパッチされるスレッドに関連するデータ局所性に関するヒントを含む、メタデータを挿入するためのオペレーションを実行することができる。コンパイラ1515は、そのようなオペレーションを実行するために必要な情報を含むことができ、あるいは、そのオペレーションはランタイム・ライブラリ1516の支援とともに実行されることが可能である。ランタイム・ライブラリ1516はまた、ソース・コード1514Aのコンパイルにおいてコンパイラ1515を支援することができ、また、GPGPU1520上のコンパイルされた命令の実行を促進にするために、コンパイルされたコード1514Bとランタイムでリンクされる命令を含むことも可能である。
【0125】
[0157]
統一メモリ1510は、プロセッサ1502及びGPGPU1520によってアクセスされ得る統一されたアドレス空間を表す。統一メモリは、システム・メモリ1512に加えて、GPGPUメモリ1518を含むことができる。GPGPUメモリ1518は、GPGPU1520のアドレス空間内のメモリであり、システム・メモリ1512の一部又は全部を含むことが可能である。一実施形態では、GPGPUメモリ1518は、GPGPU1520によって排他的に使用するように専念される任意のメモリの少なくとも一部も含むことができる。一実施形態では、システム・メモリ1512に格納されたコンパイルされたコード1514Bは、GPGPU1520によるアクセスのために、GPGPUメモリ1518にマッピングされることが可能である。
【0126】
[0158]
GPGPU1520は、複数のエンジン・ブロック・タイル1524A~1524Nを含み、これらは、本明細書に記載される種々の計算ユニット又は実行エレメントのうちの1つ以上を含むことが可能である。一実施形態では、GPGPU1520は、行列演算のサブセット(例えば、ドット積など)を加速するように設計された1つ以上の特殊関数計算ユニットを含むことが可能な行列加速器1523を更に含む。GPGPU1520はまた、限定されるものではないが、グローバル・レジスタ1525のセット、パワー・パフォーマンス・モジュール1526、及び共有キャッシュ1527を含むリソースのセットを含むことが可能であり、リソースのセットはエンジン・ブロック・タイル1524A~1524Nによって共有されることが可能である。一実施形態では、グローバル・レジスタ1525は、直接的及び間接的にアクセス可能なレジスタを含む。パワー・パフォーマンス・モジュール1526は、エンジン・ブロック・タイル1524A~1524N内の構成要素の電力消費を調整するために、エンジン・ブロック・タイル1524A~1524Nに対する電力配分及びクロック周波数を調整するように構成されることが可能である。例えば、一実施形態では、エンジン・ブロック・タイル1524A~1524N内の構成要素に分配される電力は、データ処理システム1500の電力又はパフォーマンス・ターゲットに基づいて、動的に切り替えられることが可能である(例えば、ゲート制御される)。様々な実施形態では、共有キャッシュ1527は、命令キャッシュ及び/又は下位レベルのデータ・キャッシュを含むことが可能である。
【0127】
[0159]
一実施形態では、各エンジン・ブロック・タイル1524A~1524Nは、複数のワークロード又は単一の分散されたワークロードを実行するために、独立して又は協調して動作することが可能な一組のグラフィックス処理エンジンを含む。各タイルは、異なる活動を行う様々なエンジンを含む。様々なエンジンは、コマンドのバッチを含むメモリ・バッファであるバッチ・バッファ内で提供されるコマンドを処理し、エンジン・ブロック・タイル1524A~1524N内の実行ユニットを使用してこれらのコマンドを実行することができる。ホスト・プロセッサ上で実行するソフトウェアはグローバル・スケジューラ1522へ作業アイテムをサブミットすることが可能であり、グローバル・スケジューラは、種々の作業アイテムを1つ以上のエンジン・ブロック・タイル1524A~1524Nに配布することが可能である。代替的に、ソフトウェアは、作業アイテムをタイルに直接的にサブミットし、タイル内のハードウェアのスケジューリングは、タイル内の適切なエンジンに対するワークロードの予定を立てることができる。
【0128】
[0001]
図16A~16Cは、実施形態による、マルチ・タイル作業スケジューリングを実現するグラフィックス処理システム1600を示す。
図16Aは一実施形態によるグラフィックス処理システム1600の概要を示す。
図16Bはシステム・グラフィックス・インターフェース1602の一例を示す。
図16Cはエンジン・ブロック・タイル1605の一例を示す。
【0129】
[0002]
図16Aに示されるように、グラフィックス処理システム1600は、ワークロード1604A~1604Dを1つ以上のエンジン・ブロック・タイル1605A~1605Dへ送ることができるアプリケーション及び/又はグラフィックス・ドライバ(app/driver1601)を含み、これは
図15のエンジン・ブロック・タイル1524A~1524Nと同様又はその変形であり得る。ワークロード1604A~1604Dは、同一のワークロード及び/又は別個のワークロードの一部であるとすることが可能である。ワークロード1604A~1604Dは、ワークロード間の関係(又はその欠如)に応じて、互いに協調して又は独立して実行されることが可能である。アプリケーション/ドライバ1601のアプリケーションは、グラフィックス処理システムにワークロードをサブミットすることができる、又はそのように構成される任意のアプリケーションであるとすることが可能である。ドライバは、アプリケーションが、関連するカーネル・モード・ドライバを介してワークロードをサブミットすることが可能なユーザ・モード・ドライバであるとすることが可能である。
【0130】
[0003]
幾つかの実施形態及び/又は実装では、グローバル・スケジューラ(例えば、
図15のグローバル・スケジューラ1522)は、ワークロードをエンジン・ブロック・タイルにディスパッチする。他の実施形態では、ワークロードは、各自それぞれのエンジン・ブロック・タイル1605Aに関連するシステム・グラフィックス・インターフェース1602A-1602D内のドアベル1603A-1603Dを介して、エンジン・ブロック・タイル1605A-1605Dに直接的にサブミットされることが可能である。
【0131】
[0004]
各エンジン・ブロック・タイル1605A-1604Dに関連するシステム・グラフィックス・インターフェース1602A-1602Dは、ホスト・システムと、エンジン・ブロック・タイルが内部に存在するグラフィックス・システムとの間のインターフェースを提供する。システム・グラフィックス・インターフェース1602A~1602Dは、グラフィックス処理システムをデバイスとしてホスト・システムに提示するグラフィックス・デバイス・ロジックを含み、且つPCIeバスを介してグラフィックス・デバイスとの通信を可能にするPCIeコンフィギュレーション空間データを含む。他の実施形態では、プロセッサ・インターフェース・バス(例えば、プロセッサ・リング又はメッシュ・バス、CoreLink又はAMBAバス等)、又はNVLink等の他のタイプのメッシュ又はファブリック・インターフェース等の、様々なタイプのホスト又はデバイス・インターフェース・バスに使用されることが可能である。一実施形態では、割り込み生成は、システムグラフィックス・インターフェース1602A~1602Dを介して処理される。割込み発生のために、システム・グラフィックス・インターフェース1602A~1602Dのうちの1つが、グラフィックス・システムのマスター・インターフェースとして機能することが可能である。一実施形態では、システム・グラフィックス・インターフェース1602A~1602Dは、グラフィックス処理システムのためにホスト・アドレス空間からローカル・アドレス空間への変換を行うことが可能である。
【0132】
[0005]
一実施形態では、システム・グラフィックス・インターフェース1602A~1602Dの各々は、ドアベル1604A~1604Dを含み、これを通じて、ワークロード1604A~1604Dはサブミットされることが可能である。一実施形態では、各々のドアベル1604A-1604Dは、256個のドアベルをサポートするドアベル・ブロックであるが、ドアベル・ブロックは、任意数のドアベルを含むことが可能である。ドアベルは、アプリケーションに割り当てられることが可能であり、アプリケーションのタイルに対する相性(affinity)はグラフィックス・ドライバで管理されることが可能である。アプリケーションは、1つ以上のドアベルに割り当てられることが可能であり、ドアベルの割り当ては、クロス・タイル割り当て(cross-tile assignments)とすることが可能である。ワークロードをサブミットするために、アプリケーション又はドライバ・ソフトウェアは、アプリケーションがサブミットしている作業のタイプに基づいて、適切なドアベルを鳴らすこと(又は取り次ぐこと)が可能である。ソフトウェアがタイルに関連する扉のドアベルを鳴らすと、スケジューリングはタイル内でローカルに管理されることが可能である。例えば、タイルに関連付けられたシステム・グラフィックス・インターフェースは、タイル内のローカル・スケジューラを使用して、要求されたワークロードをローカル・エンジンにスケジュールすることが可能である。
【0133】
[0006]
図16Bは一実施形態によるシステム・グラフィックス・インターフェース1602を示す。システム・グラフィックス・インターフェース1602は、割り込みユニット612、デバイス・インターフェース1614、ドアベル1603、システム/デバイス・アドレス変換器1616、及びバッチ・バッファ・サブミッタ1618を含む。割り込みユニット1612は、遠隔又はマスター割り込みユニットとして構成されることが可能であり、割り込みユニット1612の割り込みレジスタ内に格納された値に従って生成されるメッセージ・シグナル割り込み(a message signaled interrupt:MSI)を送信することが可能である。デバイス・インターフェース1614はハードウェアを含み、全体として又は個々のタイルとしてのグラフィックス・システムが、(限定ではないが)PCIeバス等のインターフェース・バスにおけるデバイスとして提供できるようにすることが可能である。ドアベル1603は、複数のドアベル・インターフェースのうちの1つであり、それを通じてワークロード1604はサブミットされることが可能であり、ここで、ワークロード1604は
図16Aのワークロード1604A~1604Dの内のうちの何れかであり得る。ドアベル1603は、関連するエンジン・ブロック・タイルに、作業要求は処理可能であることを通知するために使用され得るドアベル構造又はレジスタであり得る。一実施形態では、作業要求は、バッチ化コマンドのバッファ(例えば、バッチ・バッファ)の形態で提供される。バッチ・バッファは、バッチ・バッファ・サブミッタ1618を介して処理されることが可能である。一実施形態では、バッチ・バッファ・サブミッタ1618は、システム・アドレスからエンジン・ブロック・タイルのデバイス・ローカル・アドレスへ変換するために、システム/デバイス・アドレス変換器1616を使用することができる。バッチ・バッファのコマンドは、関連するエンジン・ブロック・タイルへサブミットされることが可能である。
【0134】
[0007]
図16Cは、システム・グラフィックス・インターフェースを介してアプリケーション又はドライバからワークロードを受け取ることが可能なエンジン・ブロック・タイル1605を示す。エンジン・ブロック・タイル1605は、ホスト・システムから受け取ったコマンドを処理することが可能な複数のエンジンを含む。エンジンは、種々のオペレーションを実行することが可能であり、且つ実行ユニット629A~629Nのうちの1つ以上のブロックにより、それらのコマンドに潜む命令を実行することが可能である。エンジン・ブロック・タイル1605はまた、エンジン・ブロック・タイル1605のためのローカル・スケジューラであるスケジューラ621を含み、このスケジューラは、種々のタイルによる処理のためのコマンドをスケジュールし、及び/又は実行ユニット629A-629N上で実行するための命令をスケジュールする。一実施形態では、エンジン・ブロック・タイルのエンジンは、レンダー・コマンド・ストリーマ(RCS623)、ポジション・オンリー・コマンド・ストリーマ(POCS624)、計算コマンド・ストリーマ(CCS625)、コピー・エンジン622、及び1つ以上のメディア・エンジン・スライス626を含み、それらのスライスは、ビデオ・デコード・オペレーションを実行するための1つ以上のビデオ・コマンド・ストリーマ(VCSn627)と、ビデオ・エンコード・オペレーションを実行するためのビデオ・エンコード・コマンド・ストリーマ(VECSn628)とを含む。入力バッチ・バッファは、図示されたエンジンのうちの任意の1つ以上、及び図示されていない他のエンジンによって処理されるコマンドを含むことができる。
【0135】
[0008]
本明細書に記載される実施形態は、アプリケーション又はグラフィックス・ドライバが、複数のタイルにまたがるワークロードを明示的にサブミットすることを可能にする。更に、タイル間の負荷バランスは、ワークロードがサブミットされた後に実行されることが可能である。一実施形態では、クロス・タイル・ワークロードを可能にするために、実施されるべき作業アイテムのスーパーセット(superset)を含む同じバッチ・バッファが、タイル・ワーク・グループ内に含まれるべき各タイルに提出される。所与のタイルが、サブミットされた全てのワークロードを実行するように意図されていない場合であっても、コマンドを実行することになる全てのタイルに全てのコマンドがサブミットされる。その代わりに、各タイルは、サブミットされたワークロードのサブセットを実行する。一実施形態では、所与のタイルは、タイルに関連するハードウェア・コンテキストに提供された識別子に基づいて、ワークロードの特定のサブセットを実行することができる。
【0136】
[0009]
図17は、本明細書に記載される実施形態による、タイル・ワーク配分及びスケジューリング・システム1700を示す。タイル・ワーク配分及びスケジューリング・システム1700は、複数のGPU1730A-1730Dをわたってワークロードが分配されることを可能にし、ここで、複数のGPUの各々は、
図16Aにおけるようにエンジン・ブロック・タイル1605A-1605Dのインスタンスであり得る。GPU1730A~1730Dは、GPU1730A~1730Dのそれぞれのシステム・グラフィックス・インターフェースの構成に基づいて、1つ以上のデバイスとして列挙され得る。
【0137】
[0010]
GPUスパニング・ワークロードの実行を可能にするために、個々のハードウェア・コンテキスト1720A~1720Dが作成され、各自それぞれのGPU1730A~1730Dに関連付けられることが可能である。一実施形態では、ハードウェア・コンテキスト及びバッチ・バッファ1708は、ホスト・システムのプロセッサ上で実行するユーザ・モード・ドライバによって作成されることが可能である。このバッチ・バッファ1708は、コマンドが実行されるべき実行状態を定義するコマンドと、実行スレッドをディスパッチしてワークロードを実行することをGPUに行わせるGPGPUウォーカー・コマンドとを含む。各ハードウェア・コンテキスト1720A~1720Dは、ハードウェア・コンテキストのそれぞれのGPU1730A~1730Dのためのさらなる実行状態を定義する。一実施形態では、ハードウェア・コンテキスト内で定義される実行状態は、タイル・グループ・オフセット(TG_OFFSET)及びタイル・グループ・ステップ(TG_STEP)を各GPUに対して指定することができる。タイル・グループ・オフセットは、それぞれのGPUによって実行されるコマンドに関する、バッチ・バッファ1708内の開始位置を指定する。タイル・グループ・ステップは、ワークロードのパーティション数を指定することができる。バッチ・バッファ開始コマンドは、それぞれのGPU1730A~1730Dに関連するコマンド・リング・バッファ1710A~1710Dに挿入される。GPU1730A~1730Dは、GPUに関連するコマンドを実行し、これらのコマンドの完了時に待機状態1702A~1702Dに入る。一実施形態では、待機状態1702A~1702Dは、GPUに対するコマンドの最後に挿入される、明示的なセマフォ待機又は別の同期/待機コマンドに基づいて入力される。他の実施形態では、自動同期システムが、GPU1720A~1720Dを同期させるために使用される。
【0138】
[0011]
図18は、実施形態によるマルチ・タイル・グラフィックス処理システムにおける負荷バランス処理を可能にするシステム1800を示す。同じバッチ・バッファ1810は、一組の物理的なエンジン・ブロック・タイル1822A~1822C内の複数の仮想エンジンに提供されるコマンド1812A~1812Cを含むことができる。エンジン・ブロック・タイル1822A~1822C内の物理エンジンは仮想化されることが可能であり、その結果、コマンドは、何れかの物理的タイル内に物理的に存在し得る仮想エンジンを参照する。一実施形態では、アプリケーション/ドライバ1601は、N個のローカル・レンダー・コンテキスト・アドレス(LRCAs)を生成することによって、仮想エンジンのN個のセットの間でワークロードを分割することが可能である。各LRCA1802A-1802Cは、LRCAが関連付けられているワークロード・パーティションを識別するワークロード・パーティション識別子(WPARID1801)を含む。各LRCAは、ワークロードの並列実行を可能にするために、物理的なエンジン・ブロック・タイル1822A~1822C内の異なるエンジンにサブミットされることが可能である。ワークロードの実行中、エンジンは、LRCAで提供されるWPARIDを使用して、実行されるワークロードの部分を識別する。
【0139】
[0012]
例えば、物理タイル1822Aに関連付けられるLRCA1802Aは、XというWPARIDを割り当てられることが可能である。LRCA1802Aは、物理タイル0(物理エンジン・タイル1822A)に関連付けられることが可能な、仮想エンジンXによって実行されるべきコマンドを含むバッチ・バッファ1810の一部を参照することが可能である。次いで、物理タイル0は、ワークロード1814Aとして、仮想エンジンXコマンド1812Aを実行することができる。LRCA1802Bは、物理的タイル1(物理的エンジン・タイル1822B)に関連付けられることが可能な、仮想エンジンYによって実行されるコマンドを含むバッチ・バッファ1810の一部を参照することが可能である。次いで、物理タイル1は、ワークロード1814Bとして、仮想エンジンYコマンド1812Bを実行することができる。LRCA1802Cは、物理的タイル2(物理的エンジン・タイル1822C)に関連付けられることが可能な、仮想エンジンZによって実行されるコマンドを含むバッチ・バッファ1810の一部を参照することが可能である。次いで、物理タイル2は、ワークロード1814Cとして、仮想エンジンZコマンド1812Cを実行することができる。
【0140】
[0013]
一実施形態では、WPARID1801はホワイトリスト・パラメータであり、ユーザ・モード・ドライバは、ダイナミック負荷バランシングを可能にするように修正することができる。WPARIDに対する変更は、ワークロードの実行中に実行されることが可能である。変更は、異なる同時実行エンジンが、同じWPARIDのオーナーシップを主張することを防止するために、アトミックに実行される。一実施形態では、WPARIDは、ハードウェア・コンテキストの保存及び復元の一部として保存及び復元される。
【0141】
[0014]
LRCAでWPARID IDを動的に取得することは、コンテキストが透過的に任意の物理タイルに移行されることを許容する。実行中、ワークロードが実行される物理タイルに関係なく、所与のWPARIDに意図された同じコマンドのサブセットが実行されるであろう。一実施形態では、複数のLRCAが同一エンジンにサブミットされ、コマンドの実行をシリアル化することができる。例えば、仮想エンジンXコマンド1812A及び仮想エンジンYコマンド1812Bが両方とも物理的エンジン・タイル1822Bにサブミットされる場合、両方のコマンド・セットは、直列化された方法で実行される。
【0142】
[0015]
一実施形態では、仮想エンジン・コマンドの実行は、物理エンジン・タイル1822A~1822C内で、予測実行ロジックを使用して処理される。ハードウェアに提供されるバッチ・バッファの一部が、物理タイル及び/又は仮想エンジンのセットに関連するLRCAによって提供されるWPARIDに一致する場合、エンジンに対する命令及び/又はコマンドは条件付きで実行されることが可能である。一実施形態では、条件付き実行が可能である場合、タイルは、LRCAによって提供されるWPARIDと一致しないコマンドの実行を自動的にバイパスするので、個々のバッチ・バッファ開始位置は必要とされないかもしれない。一実施形態では、タイル間のWPARIDを移行することによって動的負荷分散が実行される場合、タイルは、新しいWPARIDのためのコマンドを実行するために、タイル内の条件付き実行ユニットを実行及びリセットするコマンドについて、バッチ・バッファを再スキャンすることができる。WPARIDが削除された場合、タイルは、削除されたWPARIDに関連するコマンドの実行を停止してよい。
【0143】
[0016]
図19は一実施形態によるマルチ・タイル・ワークロード・スケジューリングの方法1900のフロー図を示す。方法1900は、本明細書に記載のマルチ・タイル、マルチ・コア、又はマルチGPUグラフィックス処理システムを含むホスト処理システムのアプリケーション又はドライバによって実行されることが可能である。グラフィックス処理エンジンのタイルが参照される場合、同様の技術が、マルチGPU又はマルチ・コアGPUに適用されることが可能であり、ここで、複数のGPU又は複数のGPUコアは、本明細書に記載されるようなマルチ・タイル・グラフィックス・プロセッサ・アーキテクチャであるか、又はそれを含む。例えば、マルチ・タイルGPUは、システム・グラフィックス・インターフェースの構成に応じて、単一のグラフィックス・プロセッサ又は1つ以上のグラフィックス・プロセッサ・デバイスとしてホスト処理システムに提示されるように構成されることが可能である。
【0144】
[0017]
ブロック1902に示すように、一実施形態では、方法1900は、グラフィックス処理エンジンの複数のタイルを有するグラフィックス・プロセッサによって実行されるべきワークロードのコマンドのセットを生成するためのオペレーションを実行することを含む。ブロック1904において、オペレーションは、コマンドのセットを第1パーティションと第2パーティションとに分配する。ブロック1906において、オペレーションは、第1パーティションに第1パーティション識別子を割り当て、第2パーティションに第2パーティション識別子を割り当てることが可能である。ブロック1908において、オペレーションは追加的に、グラフィックス処理エンジンの複数タイルのうちの第1グラフィックス処理エンジン・タイルに関連する第1ハードウェア・コンテキストに、第1のパーティション識別子を関連付け、及び、グラフィックス処理エンジンの複数タイルの第2グラフィックス処理エンジン・タイルに関連する第2ハードウェア・コンテキストに、第2パーティション識別子を関連付ける。ブロック1910において、オペレーションは、第1パーティション及び第2パーティションを、第1グラフィックス処理エンジン・タイル及び第2グラフィックス処理エンジン・タイルの各々にサブミットする。ブロック1912において、オペレーションは追加的に、第1グラフィックス処理エンジン・タイルを介して第1パーティションを実行し、第2グラフィックス処理エンジン・タイルを介して第2パーティションを実行する。
【0145】
[0018]
一群のコマンドの区分けは、
図17及び
図18に示されるように実行されることが可能である。各パーティションのコマンドはバッチ・バッファにロードされることが可能であり、同じバッチ・バッファがグラフィックス処理エンジンの各タイルにサブミットされることが可能である。各自のタイルのハードウェア・コンテキストは、タイルによって処理されるコマンドの開始に対応するバッチ・バッファ開始位置を設定することが可能である。一実施形態では、パーティション識別子はまた、コマンドのパーティションに関連付けられることも可能である。タイルは、他のパーティションのコマンドをバイパスしながら、関連するパーティションのバッチ・バッファ内のコマンドを条件付きで実行するように設定されることが可能である。
【0146】
[0019]
図20は一実施形態によるマルチ・タイル・ワークロードを実行する方法2000のフロー図を示す。方法2000は、本明細書に記載されるように、マルチ・タイル、マルチ・コア、又はマルチGPUグラフィックス処理システムによって実行されることが可能である。グラフィックス処理エンジンのタイルが参照される場合、同様の技術がマルチGPU又はマルチ・コアGPUに適用されることが可能であり、ここで、複数のGPU又は複数のGPUコアは、上述のようにマルチ・タイル・グラフィックス・プロセッサ・アーキテクチャを含む。
【0147】
[0020]
ブロック2002に示されるように、方法2000は、一連のコマンドを受信するグラフィックス・プロセッサを含む。コマンドのセットは、第1パーティションと第2パーティションとを有するワークロードを表し、グラフィックス・プロセッサは、グラフィックス処理エンジンの複数のタイルを含む。ブロック2004では、グラフィックス・プロセッサは、グラフィックス処理エンジンの第1タイルを第1ハードウェア・コンテキストに関連付け、且つグラフィックス処理エンジンの第2タイルを第2ハードウェア・コンテキストに関連付けることが可能である。ブロック2006において、グラフィックス・プロセッサは、次いで、グラフィックス処理エンジンの第1タイルによって、第1ハードウェア・コンテキストから第1パーティション識別子を読み込み、グラフィックス処理エンジンの第2タイルによって、第2ハードウェア・コンテキストから第2パーティション識別子を読み込むことができる。第1パーティション識別子は第1パーティションに関連付けられ、第2パーティション識別子は第2パーティションに関連付けられる。ブロック2008において、グラフィックス・プロセッサは、グラフィックス処理エンジンの第1タイルとグラフィックス処理エンジンの第2タイルとを、それぞれのタイルに関連するパーティション識別子を有するコマンドを条件通りに実行するように構成することが可能である。ブロック2010において、グラフィックス・プロセッサは、次に、第2パーティションのコマンドをバイパスしながらグラフィックス処理エンジンの第1タイルで第1パーティションのコマンドを実行し、第1パーティションのコマンドをバイパスしながらグラフィックス処理エンジンの第2タイルで第2パーティションのコマンドを実行することができる。
【0148】
[0021]
図21は一実施形態によるタイル間でワークロードを移行する方法2100のフロー図を示す。方法2100は、本明細書に記載されるように、マルチ・タイル、マルチ・コア、又はマルチGPUグラフィックス処理システムによって実行されることが可能である。グラフィックス処理エンジンのタイルが参照される場合、同様の技術がマルチGPU又はマルチ・コアGPUに適用されることが可能であり、ここで、複数のGPU又は複数のGPUコアは、上述のようにマルチ・タイルのグラフィックス・プロセッサ・アーキテクチャを含む。
【0149】
[0022]
ブロック2102に示されるように、方法2100は、一組のコマンドを受信するグラフィックス・プロセッサを含む。コマンドのセットは、第1パーティションと第2パーティションとを有するワークロードを表す。ブロック2104において、グラフィックス・プロセッサは、第1パーティションを実行するために、グラフィックス処理エンジンの第1タイルを構成することができる。ブロック2106において、グラフィックス・プロセッサは、第2パーティションを実行するために、グラフィックス処理エンジンの第2タイルを構成することができる。ブロック2108において、第1パーティションの実行が完了する前に、グラフィックス・プロセッサは、グラフィックス処理エンジンの第1タイルからグラフィックス処理エンジンの第3タイルへ、第1パーティションの実行を移すトリガを受け取ることができる。次いで、グラフィックス・プロセッサは、第1パーティションを第3タイルに移行し、ブロック2110に示すように、グラフィックス処理エンジンの第3タイルにより第1パーティションの少なくとも一部を実行することができる。第1パーティションの実行を第3タイルに移行させるトリガは、一実施形態では、第1パーティションの識別子を第1タイルから第3タイルへ移動させるために、第1及び第3パーティション上のワークロード・パーティション識別子(WPARID)のアトミック更新(an atomic update)を含む。第3タイルは、第1パーティションのWPARIDに関連付けられるバッチ・バッファ・コマンドを条件付に応じて実行する一方、第1タイルは、第1パーティションのWPARIDに関連付けられるバッチ・バッファ・コマンドをもはや実行しないであろう。
【0150】
[0033]
図22は一実施形態によるグラフィックス・プロセッサ2204を含むコンピューティング・デバイス2200のブロック図である。コンピューティング・デバイス2200は、
図1におけるもののようなデータ処理システム100等の本明細書に記載されるコンピューティング・デバイスであるとすることが可能である。また、コンピューティング・デバイス2200はまた、セット・トップ・ボックス(例えば、インターネットに基づくケーブル・テレビのセット・トップ・ボックス等)、グローバル・ポジショニング・システム(GPS)に基づくデバイス等の通信デバイスであってもよいし、又はそれに含まれていてもよい。コンピューティング・デバイス2200はまた、セルラー電話、スマートフォン、パーソナル・ディジタル・アシスタント(PDA)、タブレット・コンピュータ、ラップトップ・コンピュータ、eリーダー、スマート・テレビ、テレビジョン・プラットフォーム、ウェアラブル・デバイス(例えば、眼鏡、時計、ブレスレット、スマートカード、宝飾品、衣類など)、メディア・プレーヤー等のモバイル・コンピューティング・デバイスであってもよいし、又はそれに含まれていてもよい。例えば、一実施形態では、コンピューティング・デバイス2200は、集積回路(「IC」)、例えばシステム・オン・チップ(「SoC」又は「SOC」)を使用し、コンピューティング・デバイス2200の種々のハードウェア及び/又はソフトウェア構成要素を単一のチップ上に統合する、モバイル・コンピューティング・デバイスを含む。
【0151】
[0135]
コンピューティング・デバイス2200は、グラフィックス・プロセッサ2204を含む。グラフィックス・プロセッサ2204は、本明細書に記載される任意のグラフィックス・プロセッサを表す。グラフィックス・プロセッサは、1つ以上のグラフィックス・エンジン、グラフィックス・プロセッサ・コア、及び本明細書に記載される他のグラフィックス実行リソースを含む。このようなグラフィックス実行リソースは、実行ユニット、シェーダ・エンジン、フラグメント・プロセッサ、頂点プロセッサ、ストリーミング・マルチプロセッサ、グラフィックス・プロセッサ・クラスタ、又はグラフィックス及び画像リソースの処理に適した任意のコンピューティング・リソースのコレクションを含む形態で提供されることが可能であるが、これらに限定されない。
【0152】
[0136]
一実施形態では、グラフィックス・プロセッサ2204は、キャッシュ2214を含み、キャッシュ2214は、単一のキャッシュであるとすることが可能であり、又は複数のセグメントに分割されることが可能であり、任意の数のL1、L2、L3、又はL4キャッシュ、レンダリング・キャッシュ、深さキャッシュ、サンプラ・キャッシュ、及び/又はシェーダ・ユニット・キャッシュを含むが、これらに限定されない。グラフィックス・プロセッサ2204はまた、複数のGPGPUタイル2204を含み、各タイルは、例えば
図16Cに示すように複数のグラフィックス・プロセッサ・エンジン及び実行ユニットを含む。GPGPUタイル2204は、アーキテクチャに関して類似していても同一であってもよい。各GPGPUタイルは、仮想化された一組のグラフィックス・プロセッサ・エンジンを含むことが可能である。仮想化エンジンは、コマンドを実行する物理的なGPGPUタイルにとって不可知のコマンド・ストリームが構築されることを可能にする。更に、コマンドは、物理タイル内又は物理タイルにわたって仮想エンジン間で動的に移行させられることが可能である。様々な実施形態では、GPGPUエンジン・タイル2240は、バリア/同期ユニット2242及び条件付き実行ユニット2244を含むことができる。バリア/同期ユニット2242は、ワークロード・パーティションの完了時にGPGPUエンジン・タイル2240を同期させるために使用されることが可能である。条件付き実行ユニット2244は、コマンドに関連付けられたワークロード・パーティション識別子とGPGPUエンジン・タイルに関連付けられたワークロード・パーティション識別子との間の一致性に基づいて、バッチ・バッファ・コマンドの条件付き実行及び/又は予測される実行を可能にするために使用されることが可能である。
【0153】
[0137]
図示されているように、一実施形態では、グラフィックス・プロセッサ2204に加えて、コンピューティング・デバイス2200は任意の数及びタイプのハードウェア構成要素及び/又はソフトウェア構成要素を更に含んでもよく、アプリケーション・プロセッサ2206、メモリ2208、及び入力/出力(I/O)ソース2210を含んでよいが、これらに限定されない。アプリケーション・プロセッサ2206は、
図3を参照して示されるように、ハードウェア・グラフィックス・パイプラインと相互作用し、グラフィックス・パイプライン機能を共有することができる。処理されたデータは、ハードウェア・グラフィックス・パイプライン内のバッファに格納され、状態情報はメモリ2208に格納される。結果のデータは、
図3の表示装置323のような表示装置を介して出力するために、表示コントローラに転送されることが可能である。表示装置は、陰極線管(CRT)、薄膜トランジスタ(TFT)、液晶ディスプレイ(LCD)、有機発光ダイオード(OLED)アレイ等の種々のタイプのものであってもよく、グラフィカル・ユーザ・インターフェースによりユーザに情報を表示するように構成され得る。
【0154】
[0138]
アプリケーション・プロセッサ2206は、
図1のプロセッサ102のような1つ又は複数のプロセッサを含むことができ、コンピューティング・デバイス2200のオペレーティング・システム(OS)2202を実行するために少なくとも部分的に使用される中央処理ユニット(CPU)であってもよい。OS2202は、コンピュータ・デバイス2200のハードウェア及び/又は物理リソースと、1つ以上のユーザとの間のインターフェースとして機能することができる。OS2202は、ユーザ・モード・ドライバ(UMD2223)及びカーネル・モード・ドライバ(KMD2224)等のグラフィックス・ドライバ論理2222を含むことが可能であり、これらは、
図10のユーザ・モード・グラフィックス・ドライバ1026及び/又はカーネル・モード・グラフィックス・ドライバ1029の変形であるとすることも可能である。UMD2223は、コンピューティング・デバイス上で実行されるアプリケーションとインターフェースを為し、これらのアプリケーションがグラフィックス・プロセッサ2204の複数のGPGPUエンジン・タイル2224にまたがるワークロードをサブミットすることを可能にすることができる。
【0155】
[0139]
幾つかの実施形態では、グラフィックス・プロセッサ2204は、アプリケーション・プロセッサ2206の一部(物理的CPUパッケージの一部など)として存在してもよく、その場合、メモリ2208の少なくとも一部は、アプリケーション・プロセッサ2206及びグラフィックス・プロセッサ2204によって共有されてもよいが、メモリ2208の少なくとも一部は、グラフィックス・プロセッサ2204に排他的であってもよく、又はグラフィックス・プロセッサ2204はメモリの別個の記憶部を有してもよいこと等が想定されている。メモリ2208は、バッファ(例えば、フレームバッファ)の予め割り当てられた領域を含んでもよいが;実施形態はそのように限定されず、下位のグラフィックス・パイプラインにアクセス可能な任意のメモリが使用されてもよいことが当業者に理解されるべきである。メモリ2208は、デスクトップ又は3Dグラフィックス・シーンをレンダリングするためにグラフィックス・プロセッサ2204を使用するアプリケーションを含む種々の形態のランダム・アクセス・メモリ(RAM)(例えば、SDRAM、SRAMなど)を含んでもよい。メモリ・コントローラを使用して、メモリ2208内のデータにアクセスし、グラフィックス・パイプライン処理のためにグラフィックス・プロセッサ2204へデータを転送することができる。メモリ2208は、コンピューティング・デバイス2200内の他の構成要素に利用可能にされてもよい。例えば、コンピューティング・デバイス2200の種々のI/Oソース2210から受信される任意のデータ(例えば、入力グラフィックス・データ)は、ソフトウェア・プログラム又はアプリケーションの実装において1つ以上のプロセッサ(例えば、アプリケーション・プロセッサ2206)によるそれらの使用の前に、メモリ2208に一時的にキューイングされ得る。同様に、ソフトウェア・プログラムがコンピューティング・デバイス2200から外部エンティティへ、計算システム・インターフェースのうちの1つを介して送信されるべきであると判断したデータ、又は内部記憶素子に記憶されるべきであると判断したデータは、しばしば、その送信又は記憶される前に、メモリ2208に一時的にキューイングされる。
【0156】
[0140]
I/Oソースは、タッチスクリーン、タッチ・パネル、タッチ・パッド、仮想の又は正規のキーボード、仮想又は正規のマウス、ポート、コネクタ、ネットワーク・デバイスなどのデバイスを含むことができる。更に、I/Oソース2210は、コンピューティング・デバイス2200(例えば、ネットワーキング・アダプタ)に対して及び/又はそこから;又は、コンピューティング・デバイス2200(例えば、ハード・ディスク・ドライブ)内の大規模な不揮発性記憶装置に関して、データを転送するために実装される1つ以上のI/Oデバイスを含んでもよい。英数字及び他のキーを含むユーザ入力デバイスは、情報及びコマンド選択をグラフィックス・プロセッサ2204へ連絡するために使用されてもよい。別のタイプのユーザ入力デバイスは、マウス、トラックボール、タッチスクリーン、タッチパッド、又はカーソル方向キーのようなカーソル制御装置であり、方向情報及びコマンド選択をGPUに伝達し、表示装置上のカーソルの動きを制御する。コンピュータ・デバイス2200のカメラ及びマイクロフォン・アレイは、ジェスチャを観察し、オーディオ及びビデオを記録し、ビジュアル及びオーディオ・コマンドを受信及び送信するために使用され得る。
【0157】
[0141]
ネットワーク・インターフェースとして構成されるI/Oソース2210は、LAN、ワイド・エリア・ネットワーク(WAN)、大都市エリア・ネットワーク(MAN)、パーソナル・エリア・ネットワーク(PAN)、ブルートゥース(登録商標)、クラウド・ネットワーク、セルラー又はモバイル・ネットワーク(例えば、第3世代(3G)、第4世代(4G)等)、イントラネット、インターネット等のネットワークへのアクセスを提供することができる。ネットワーク・インターフェースは、例えば、1つ以上のアンテナを有する無線ネットワーク・インターフェースを含んでもよい。ネットワーク・インターフェースはまた、例えば、イーサネット(登録商標)・ケーブル、同軸ケーブル、光ファイバ・ケーブル、シリアル・ケーブル、又はパラレル・ケーブルであってもよいネットワーク・ケーブルを介して遠隔装置と通信するための有線ネットワーク・インターフェースを含んでもよい。
【0158】
[0142]
ネットワーク・インターフェースは、例えばIEEE802.11規格に準拠することによってLANへのアクセスを提供することができ、及び/又は無線ネットワーク・インターフェースは、例えばBluetooth規格に準拠することによってパーソナル・エリア・ネットワークへのアクセスを提供することができる。標準規格の前のバージョン及び後のバージョンを含む他の無線ネットワーク・インターフェース及び/又はプロトコルもまたサポートされていてよい。無線LAN規格による通信に加えて、又はその代わりに、ネットワーク・インターフェースは、例えば、時分割多元接続(TDMA)プロトコル、移動通信用グローバル・システム(GSM(登録商標))プロトコル、符号分割多元接続(CDMA)プロトコル、及び/又は任意の他のタイプの無線通信プロトコルを使用して無線通信を提供することができる。
【0159】
[0143]
上述した例よりも小さく、又はより多く装備されたシステムが、特定の実装のために好ましいかもしれないことが理解されるべきである。したがって、コンピューティング・デバイス2200の構成は、価格制約、性能条件、技術的改良、又は他の状況などの多くの要因に依存して、実装ごとに相違し得る。具体例は、移動装置、パーソナル・デジタル・アシスタント、モバイル・コンピューティング・デバイス、スマートフォン、セルラー電話、ハンドセット、ワンウェイ・ページャ、双方向ページャ、メッセージング・デバイス、コンピュータ、パーソナル・コンピュータ(PC)、デスクトップ・コンピュータ、ラップトップ・コンピュータ、ノートブック・コンピュータ、ハンドヘルド・コンピュータ、タブレット・コンピュータ、サーバ、サーバ・アレイ又はサーバ・ファーム、ウェブ・サーバ、ネットワーク・サーバ、インターネット・サーバ、ワーク・ステーション、ミニ・コンピュータ、メイン・フレーム・コンピュータ、スーパーコンピュータ、ネットワーク機器、ウェブ機器、分散コンピューティング・システム、マルチプロセッサ・システム、プロセッサ・ベース・システム、電化製品、プログラマブル電化製品、テレビジョン、デジタル・テレビジョン、セット・ボックス、ワイヤレス・アクセス・ポイント、基地局、加入者局、モバイル・サブスクライバ・センター、無線ネットワーク・コントローラ、ルータ、ハブ、ゲートウェイ、ブリッジ、スイッチ、マシン、又はそれらの組み合わせを含む(但し、限定ではない)。
【0160】
[0144]
実施形態は、親基板を使用して相互接続された1つ以上のマイクロチップ又は集積回路、ハードワイヤード論理回路、メモリ・デバイスによって記憶され且つマイクロプロセッサ、ファームウェア、特定用途向け集積回路(ASIC)、及び/又はフィールド・プログラマブル・ゲート・アレイ(FPGA)によって実行されるソフトウェア、の任意の組み合わせとして実装されることが可能である。用語「ロジック」又は「論理」は、例えば、ソフトウェア又はハードウェア、及び/又はソフトウェアとハードウェアの組み合わせを含むことができる。
【0161】
[0145]
実施形態は例えばコンピュータ・プログラム製品として提供されてもよく、コンピュータ・プログラム製品は、コンピュータ、コンピュータのネットワーク、又は他の電子デバイスのような1つ又は複数のマシンによって実行されると、本明細書に記載される実施形態に従って動作を実行する1つ又は複数のマシンをもたらすことができる、マシン実行可能命令を記憶した1つ又は複数のマシン可読媒体を含むことができる。マシン可読媒体は、フロッピー・ディスケット、光ディスク、CD-ROM(コンパクト・ディスク・リード・オンリー・メモリ)、及び光磁気ディスク、ROM、RAM、EPROM(消去可能プログラマブル・リード・オンリー・メモリ)、EEPROM(電気的消去可能プログラマブル・リード・オンリー・メモリ)、磁気カード又は光カード、フラッシュ・メモリ、又は機械実行可能命令を記憶するのに適した他のタイプの媒体/機械可読媒体を含み得るが、これらに限定されない。
【0162】
[0146]
更に、実施形態は、コンピュータ・プログラム製品としてダウンロードされてもよく、ここで、プログラムは、通信リンク(例えば、モデム及び/又はネットワーク接続)を介して搬送波又は他の伝搬媒体で具現化され及び/又は変調された1つ以上のデータ信号によって、リモート・コンピュータ(例えば、クライアント)から要求しているコンピュータ(例えば、クライアント)へ転送され得る。
【0163】
[0147]
以下の節及び/又は実施例は、特定の実施形態又はその具体例に関する。実施例における特定事項は、1つ又は複数の実施形態のどこででも使用され得る。様々な実施形態又は実施例の様々な特徴は、様々な異なる用途に合わせて含まれる幾つかの特徴及び除外されるその他の特徴ともに様々に組み合わせられてよい。具体例は、方法のような対象事項、方法の動作を実行する手段、マシンによって実行されたときにマシンに方法の動作を実行させる命令を含む少なくとも1つの機械可読媒体、又は本明細書に記載される実施形態及び実施例に従う装置又はシステムを含み得る。種々の構成要素は、記載されるオペレーション又は機能を実行するための手段であり得る。
【0164】
[0148]
一実施形態は、グラフィックス処理エンジンの第1タイル、グラフィックス処理エンジンの第2タイル、及びホスト・システムとグラフィックス・プロセッサとの間のインターフェースを含むグラフィックス・プロセッサを提供する。インターフェースは、第1パーティションと第2パーティションとを有するワークロードに関するコマンドのセットを受信し、コマンドのセットをグラフィックス処理エンジンの第1タイルに送信し、グラフィックス処理エンジンの第2タイルにコマンドのセットを送信するように構成されることが可能である。グラフィックス処理エンジンの第1タイルは、第1ハードウェア・コンテキストから第1パーティション識別子を読み込むことが可能であり、第1パーティション識別子は第1パーティションに関連付けられている。次いで、第1タイルは、第2パーティションのコマンドをバイパスしながら、第1パーティションのコマンドを条件に応じて実行することができる。グラフィックス処理エンジンの第2タイルは、第2ハードウェア・コンテキストから第2パーティション識別子を読み込むことが可能であり、第2パーティション識別子は第2パーティションに関連付けられている。次いで、第2タイルは、第1パーティションのコマンドをバイパスしながら、第2パーティションのコマンドを条件に応じて実行することができる。
【0165】
[0149]
一実施形態は、1つ以上のプロセッサにより実行される場合に、1つ以上のプロセッサにオペレーションを実行させる命令を格納する非一時的なマシン読み込み可能な媒体を提供し、オペレーションは、グラフィックス処理エンジンの複数のタイルを有するグラフィックス・プロセッサによって実行されるワークロードのコマンドのセットを生成するステップと、コマンドのセットを第1パーティションと第2パーティションに分けるステップと、第1パーティションを識別する第1パーティション識別子を第1レンダリング・コンテキストに関連付けるステップと、第2パーティションを識別する第2パーティション識別子を第2レンダリング・コンテキストに関連付けるステップと、グラフィックス処理エンジンの複数のタイルのうちの第1グラフィックス処理エンジン・タイルと第2グラフィックス処理エンジン・タイルの各々に、第1パーティションと第2パーティションとをサブミットするステップと、第1グラフィックス処理エンジン・タイルにより第1パーティションを実行し、第2グラフィックス処理エンジン・タイルにより第2パーティションを実行するステップとを含む。
【0166】
[0150]
一実施形態は、グラフィックス処理エンジンの第1タイルと、グラフィックス処理エンジンの第2タイルとを含むグラフィックス・プロセッサを含むデータ処理システムを提供する。グラフィックス・プロセッサは、第1パーティションと第2パーティションを有するワークロードのための一連のコマンドを受信し、第1パーティションを実行するようにグラフィックス処理エンジンの第1タイルを構成し、第1パーティションの実行と同時に第2パーティションを実行するようにグラフィックス処理エンジンの第2タイルを構成することができる。一実施形態では、第1パーティションの実行完了前に、グラフィックス・プロセッサは、グラフィックス処理エンジンの第1タイルからグラフィックス処理エンジンの第3タイルへ第1パーティションの実行を移し、グラフィックス処理エンジンの第3タイルにより第1パーティションの少なくとも一部を実行するトリガを受信することができる。第1パーティションの実行を移すことは、グラフィックス処理エンジンの第1タイルからグラフィックス処理エンジンの第3タイルへ、第1パーティションのパーティション識別子をアトミックにアサインし直すことを含む。一実施形態では、第1パーティションは、第1パーティションの実行を開始する前に移行される。
【0167】
[0151]
一実施形態は方法を提供し、方法は、グラフィックス・プロセッサにおいてコマンドのセットを受信するステップであって、コマンドのセットは、第1パーティションと第2パーティションとを有するワークロードを表し、グラフィックス・プロセッサはグラフィックス処理エンジンの複数のタイルを含む、ステップと、グラフィックス処理エンジンの第1タイルによって、第1パーティションに関連付けられる第1パーティション識別子を第1ハードウェア・コンテキストから読み込むステップと、グラフィックス処理エンジンの第2タイルによって、第2パーティションに関連付けられる第2パーティション識別子を第2ハードウェア・コンテキストから読み込むステップと、それぞれのタイルに関連するパーティション識別子を有するコマンドを条件に応じて実行するように、グラフィックス処理エンジンの第1タイルとグラフィックス処理エンジンの第2タイルとを設定するステップと、第2パーティションのコマンドをバイパスしながらグラフィックス処理エンジンの第1タイルで第1パーティションのコマンドを実行し、第1パーティションのコマンドをバイパスしながらグラフィックス処理エンジンの第2タイルで第2パーティションのコマンドを実行するステップとを含む。一実施態様において、本方法は、更に、グラフィックス処理エンジンの第1タイルを第1ハードウェア・コンテキストに関連付け、グラフィックス処理エンジンの第2タイルを第2ハードウェア・コンテキストに関連付けるステップを含む。
【0168】
[0152]
当業者は、前述の説明から、実施形態の広範な技術が種々の形態で実装され得ることを理解するであろう。従って、実施形態がその特定の実施例に関連して説明されてきたが、図面、明細書、及び以下の請求の範囲の検討により、他の修正が当業者に明らかになるので、実施形態の真の範囲はそのように限定されるべきではない。