以下の説明では、説明の目的で、以下に説明される本発明の実施形態の全体的な理解を提供するために多くの具体的な詳細が記載されている。しかしながら、本発明の実施形態がこれらの具体的な詳細のいくつかを用いずに実施されてもよいことが当業者には明らかであろう。他の例では、本発明の実施形態の基礎となる原理が曖昧になることを回避するために、周知の構造及びデバイスがブロック図の形式で示されている。
例示的なグラフィックスプロセッサアーキテクチャ及びデータタイプ
システム概要
図1は、実施形態に係る処理システム100のブロック図である。様々な実施形態において、システム100は、1又は複数のプロセッサ102及び1又は複数のグラフィックスプロセッサ108を含み、シングルプロセッサデスクトップシステム、マルチプロセッサワークステーションシステム又は多数のプロセッサ102又はプロセッサコア107を有するサーバシステムであってよい。一実施形態において、システム100は、モバイル、ハンドヘルド又は埋め込み型デバイスでの使用のためのシステムオンチップ(SoC)集積回路内に組み込まれる処理プラットフォームである。
一実施形態において、システム100は、ゲーム及びメディアコンソール、モバイルゲームコンソール、ハンドヘルドゲームコンソール又はオンラインゲームコンソールを含むゲームコンソールを含み得る、又は、これらがサーバベースのゲームプラットフォーム内に組み込まれ得る。いくつかの実施形態において、システム100は、携帯電話、スマートフォン、タブレットコンピューティングデバイス又はモバイルインターネットデバイスである。処理システム100はまた、ウェアラブルデバイス、例えば、スマートウォッチウェアラブルデバイス、スマートアイウェアデバイス、拡張現実デバイス又は仮想現実デバイスを含み得る、これらと結合し得る、又は、これら内に統合され得る。いくつかの実施形態において、処理システム100は、1又は複数のプロセッサ102と、1又は複数のグラフィックスプロセッサ108により生成されるグラフィカルインタフェースとを有するテレビ又はセットトップボックスデバイスである。
いくつかの実施形態において、1又は複数のプロセッサ102はそれぞれ、実行される場合、システム及びユーザソフトウェアのための工程を実行する命令を処理する1又は複数のプロセッサコア107を含む。いくつかの実施形態において、1又は複数のプロセッサコア107のそれぞれは、特定の命令セット109を処理するように構成される。いくつかの実施形態において、命令セット109は、複合命令セットコンピューティング(CISC)、縮小命令セットコンピューティング(RISC)、又は、超長命令語(VLIW)を介したコンピューティングを促進し得る。複数のプロセッサコア107は、異なる命令セット109をそれぞれ処理してよく、他の命令セットのエミュレーションを促進する命令を含み得る。プロセッサコア107はまた、デジタル信号プロセッサ(DSP)のような、他の処理デバイスを含んでよい。
いくつかの実施形態において、プロセッサ102はキャッシュメモリ104を含む。アーキテクチャに応じて、プロセッサ102は、単一の内部キャッシュ又は複数レベルの内部キャッシュを有することができる。いくつかの実施形態において、キャッシュメモリは、プロセッサ102の様々なコンポーネント間で共有される。いくつかの実施形態において、プロセッサ102はまた、外部キャッシュ(例えば、レベル3(L3)キャッシュ又はラストレベルキャッシュ(LLC))(図示せず)を用いており、それは、既知のキャッシュコヒーレンシ技術を用いてプロセッサコア107間で共有され得る。レジスタファイル106は、さらに、データの異なるタイプを格納するために、異なるタイプのレジスタ(例えば、整数レジスタ、浮動小数点レジスタ、ステータスレジスタ及び命令ポインタレジスタ)を含み得るプロセッサ102に含まれる。いくつかのレジスタは、汎用レジスタであってよいが、一方、他のレジスタは、プロセッサ102の設計に固有のものであってもよい。
いくつかの実施形態において、1又は複数のプロセッサ102は、システム100内のプロセッサ102と他のコンポーネントとの間の通信信号、例えば、アドレス、データ又は制御信号を伝送する1又は複数のインタフェースバス110と結合される。インタフェースバス110は、一実施形態において、プロセッサバス、例えば、ダイレクトメディアインタフェース(DMI)バスのあるバージョンであり得る。しかしながら、プロセッサバスは、DMIバスに限定されることはなく、1又は複数のペリフェラルコンポーネントインターコネクトバス(例えば、PCI、PCI Express)、メモリバス又は他のタイプのインタフェースバスを含んでよい。一実施形態において、プロセッサ102は、統合メモリコントローラ116及びプラットフォームコントローラハブ130を含む。メモリコントローラ116は、システム100のメモリデバイスと他のコンポーネントとの間の通信を促進し、一方、プラットフォームコントローラハブ(PCH)130は、ローカルI/Oバスを介したI/Oデバイスへの接続を提供する。
メモリデバイス120は、ダイナミックランダムアクセスメモリ(DRAM)デバイス、スタティックランダムアクセスメモリ(SRAM)デバイス、フラッシュメモリデバイス、相変化メモリデバイス、又は、処理メモリとしての機能を果たすのに適した性能を有する一部の他のメモリデバイスであり得る。一実施形態において、メモリデバイス120は、1又は複数のプロセッサ102がアプリケーション又はプロセスを実行する場合の使用のためのデータ122及び命令121を格納する、システム100用のシステムメモリとして動作し得る。メモリコントローラ116はまた、任意選択的な外部グラフィックスプロセッサ112と結合し、それは、プロセッサ102内の1又は複数のグラフィックスプロセッサ108と通信して、グラフィックス及びメディアオペレーションを実行し得る。いくつかの実施形態において、ディスプレイデバイス111は、プロセッサ102に接続され得る。ディスプレイデバイス111は、モバイル電子デバイス又はラップトップデバイスにあるような内部ディスプレイデバイス、又は、ディスプレイインタフェースを介して取り付けられる外部ディスプレイデバイス(例えば、ディスプレイポートなど)のうちの1又は複数であり得る。一実施形態において、ディスプレイデバイス111は、ヘッドマウントディスプレイ(HMD)、例えば、仮想現実(VR)アプリケーション又は拡張現実(AR)アプリケーションでの使用のための立体表示デバイスであり得る。
いくつかの実施形態において、プラットフォームコントローラハブ130は、周辺機器が高速I/Oバスを介してメモリデバイス120及びプロセッサ102に接続することを可能にする。I/O周辺機器は、限定されることはないが、オーディオコントローラ146、ネットワークコントローラ134、ファームウェアインタフェース128、無線トランシーバ126、タッチセンサ125、データストレージデバイス124(例えば、ハードディスクドライブ、フラッシュメモリなど)を含む。データストレージデバイス124は、ストレージインタフェース(例えば、SATA)を介して、又は、周辺機器バス、例えば、ペリフェラルコンポーネントインターコネクトバス(例えば、PCI、PCI Express)を介して接続できる。タッチセンサ125は、タッチスクリーンセンサ、圧力センサ又は指紋センサを含み得る。無線トランシーバ126は、Wi-Fi(登録商標)トランシーバ、Bluetooth(登録商標)トランシーバ又はモバイルネットワークトランシーバ、例えば、3G、4G又はロングタームエボリューション(LTE)トランシーバであり得る。ファームウェアインタフェース128は、システムファームウェアとの通信を可能にし、例えば、ユニファイド・エクステンシブル・ファームウェア・インタフェース(UEFI)であり得る。ネットワークコントローラ134は、有線ネットワークに対するネットワーク接続を可能にし得る。いくつかの実施形態において、高性能ネットワークコントローラ(図示せず)は、インタフェースバス110と結合する。オーディオコントローラ146は、一実施形態において、マルチチャネル高解像度オーディオコントローラである。一実施形態において、システム100は、レガシ(例えば、Personal System 2(PS/2))デバイスをシステムに結合するための任意選択的なレガシI/Oコントローラ140を含む。プラットフォームコントローラハブ130はまた、1又は複数のユニバーサルシリアルバス(USB)コントローラ142接続入力デバイス、例えば、キーボード及びマウス143の組み合わせ、カメラ144又は他のUSB入力デバイスに接続し得る。
異なって構成される他のタイプのデータ処理システムも用いられてよいので、示されるシステム100は、例示であり、限定するものではないことが理解されるであろう。例えば、メモリコントローラ116及びプラットフォームコントローラハブ130の例は、別個の外部グラフィックスプロセッサ、例えば、外部グラフィックスプロセッサ112へと統合されてよい。一実施形態において、プラットフォームコントローラハブ130及び/又はメモリコントローラ116は、1又は複数のプロセッサ102の外部にあってよい。例えば、システム100は、外部のメモリコントローラ116及びプラットフォームコントローラハブ130を含み得、それらはプロセッサ102と通信するシステムチップセット内のメモリコントローラハブ及び周辺機器コントローラハブとして構成されてもよい。
図2は、1又は複数のプロセッサコア202A-202N、統合メモリコントローラ214及び統合グラフィックスプロセッサ208を有するプロセッサ200の実施形態についてのブロック図である。本明細書における任意の他の図面の要素と同じ参照番号(又は名称)を有する図2のこれらの要素は、本明細書においてどこか他の場所で説明されるものと同様な任意の方式で動作又は機能することができるが、そのようなものに限定されることはない。プロセッサ200は、最大で破線の枠により表される追加のコア202Nまでを含む追加のコアを含み得る。プロセッサコア202A-202Nのそれぞれは、1又は複数の内部キャッシュユニット204A-204Nを含む。いくつかの実施形態において、各プロセッサコアはまた、1又は複数の共有キャッシュユニット206へのアクセスを有する。
内部キャッシュユニット204A-204N及び共有キャッシュユニット206は、プロセッサ200内のキャッシュメモリ階層を表す。キャッシュメモリ階層は、各プロセッサコア内の命令及びデータキャッシュの少なくとも1つのレベル、及び、共有される中間レベルのキャッシュ、例えば、キャッシュのレベル2(L2)、レベル3(L3)、レベル4(L4)、又は、外部メモリがLLCとして分類される前のキャッシュの最高レベルである他のレベルのうちの1又は複数のレベルを含んでよい。いくつかの実施形態において、キャッシュコヒーレンシロジックは、様々なキャッシュユニット206及び204A-204N間のコヒーレンシを維持する。
いくつかの実施形態において、プロセッサ200は、1又は複数のバスコントローラユニット216のセット及びシステムエージェントコア210を含んでもよい。1又は複数のバスコントローラユニット216は、周辺機器バスのセット、例えば、1又は複数のPCI又はPCI Expressバスを管理する。システムエージェントコア210は、様々なプロセッサコンポーネントに管理機能を提供する。いくつかの実施形態において、システムエージェントコア210は、様々な外部メモリデバイス(図示せず)へのアクセスを管理する1又は複数の統合メモリコントローラ214を含む。
いくつかの実施形態において、プロセッサコア202A-202Nの1又は複数は、同時マルチスレッディングに対するサポートを含む。そのような実施形態において、システムエージェントコア210は、マルチスレッド処理中にコア202A-202Nを協調及び動作させるためのコンポーネントを含む。システムエージェントコア210は、パワーコントロールユニット(PCU)をさらに含んでよく、PCUは、プロセッサコア202A-202N及びグラフィックスプロセッサ208の電力状態を調整するロジック及びコンポーネントを含む。
いくつかの実施形態において、プロセッサ200は、グラフィックス処理オペレーションを実行するグラフィックスプロセッサ208をさらに含む。いくつかの実施形態において、グラフィックスプロセッサ208は、共有キャッシュユニット206のセットと結合し、かつ、1又は複数の統合メモリコントローラ214を含むシステムエージェントコア210と結合する。いくつかの実施形態において、システムエージェントコア210はまた、1又は複数の結合されたディスプレイへのグラフィックスプロセッサ出力を駆動するディスプレイコントローラ211を含む。いくつかの実施形態において、ディスプレイコントローラ211は、少なくとも1つの相互接続を介してグラフィックスプロセッサと結合される別個のモジュールであってもよい、又は、グラフィックスプロセッサ208内に統合されてもよい。
いくつかの実施形態において、リングベースの相互接続ユニット212は、プロセッサ200の内部コンポーネントを結合するために用いられる。しかしながら、代替の相互接続ユニットは、例えば、ポイントツーポイント相互接続、スイッチ型相互接続又は当技術分野で周知の技術を含む他の技術が用いられてもよい。いくつかの実施形態において、グラフィックスプロセッサ208は、I/Oリンク213を介してリング相互接続212と結合する。
例示的なI/Oリンク213は、様々なプロセッサコンポーネントと、eDRAMモジュールなどの高性能埋め込み型メモリモジュール218との間の通信を容易にするオンパッケージI/O相互接続を含む複数の様々なI/O相互接続のうちの少なくとも1つを表す。いくつかの実施形態において、プロセッサコア202A-202Nのそれぞれ及びグラフィックスプロセッサ208は、共有のラストレベルキャッシュとして埋め込み型メモリモジュール218を用いる。
いくつかの実施形態において、プロセッサコア202A-202Nは、同じ命令セットアーキテクチャを実行するホモジニアスコアである。別の実施形態では、プロセッサコア202A-202Nは、命令セットアーキテクチャ(ISA)の観点からヘテロジニアスであり、プロセッサコア202A-202Nの1又は複数が第1の命令セットを実行し、一方、他のコアのうちの少なくとも1つが第1の命令セットのサブセット又は異なる命令セットを実行する。一実施形態において、プロセッサコア202A-202Nは、マイクロアーキテクチャの観点からヘテロジニアスであり、相対的に消費電力が高い1又は複数のコアは、消費電力が少ない1又は複数の電力コアと結合する。さらに、プロセッサ200は、1又は複数のチップ上に実装され得る、又は、他のコンポーネントに加えて図示されるコンポーネントを有するSoC集積回路として実装され得る。
図3は、グラフィックスプロセッサ300のブロック図であり、グラフィックスプロセッサ300は、ディスクリートグラフィックス処理ユニットであってよい、又は、複数のプロセッシングコアと統合されたグラフィックスプロセッサであってよい。いくつかの実施形態において、グラフィックスプロセッサは、グラフィックスプロセッサ上のレジスタへのメモリマッピング型I/Oインタフェースを介して、プロセッサメモリ内に置かれるコマンドを用いて通信する。いくつかの実施形態において、グラフィックスプロセッサ300は、メモリにアクセスするメモリインタフェース314を含む。メモリインタフェース314は、ローカルメモリ、1又は複数の内部キャッシュ、1又は複数の共有外部キャッシュへのインタフェース、及び/又は、システムメモリへのインタフェースであり得る。
いくつかの実施形態において、グラフィックスプロセッサ300はまた、ディスプレイ出力データをディスプレイデバイス320に送るディスプレイコントローラ302を含む。ディスプレイコントローラ302は、ビデオ又はユーザインタフェース要素の複数の層の表示及び合成に関する1又は複数のオーバレイプレーン用のハードウェアを含む。ディスプレイデバイス320は、内部又は外部ディスプレイデバイスであり得る。一実施形態において、ディスプレイデバイス320は、ヘッドマウントディスプレイデバイス、例えば、仮想現実(VR)ディスプレイデバイス又は拡張現実(AR)ディスプレイデバイスである。いくつかの実施形態において、グラフィックスプロセッサ300は、限定されることはないが、MPEG-2などのムービングピクチャエキスパーツグループ(MPEG)フォーマット、H.264/MPEG-4 AVCなどのアドバンスドビデオコーティング(AVC)フォーマット、並びに、米国映画テレビ技術者協会(SMPTE)421M/VC-1、及び、JPEGなどのジョイントフォトグラフィックエキスパートグループ(JPEG)フォーマット、及び、モーションJPEG(MJPEG)フォーマットを含む1又は複数のメディアエンコードフォーマットに、当該メディアエンコードフォーマットから、又は、当該メディアエンコードフォーマット間でメディアをエンコード、デコード又はトランスコードするビデオコーデックエンジン306を含む。
いくつかの実施形態において、グラフィックスプロセッサ300は、例えば、ビット境界ブロック転送を含む2次元(2D)ラスタライザオペレーションを実行するブロック画像転送(BLIT)エンジン304を含む。しかしながら、一実施形態において、2Dグラフィックスオペレーションは、グラフィックス処理エンジン(GPE)310の1又は複数のコンポーネントを用いて実行される。いくつかの実施形態において、GPE310は、3次元(3D)グラフィックスオペレーション及びメディアオペレーションを含むグラフィックスオペレーションを実行するためのコンピュートエンジンである。
いくつかの実施形態において、GPE310は、例えば、3Dプリミティブの形状(例えば、矩形、三角形など)に作用する処理機能を用いて3次元画像及びシーンをレンダリングする3D演算を実行するための3Dパイプライン312を含む。3Dパイプライン312は、要素内の様々なタスク実行するプログラム可能な固定機能要素、及び/又は、3D/メディアサブシステム315に対するスポーン実行スレッドを含む。一方、3Dパイプライン312は、メディアオペレーションを実行するために用いられ得、GPE310の実施形態はまた、具体的には、メディアオペレーション、例えば、ビデオ投稿処理及び画像処理を実行するために用いられるメディアパイプライン316を含む。
いくつかの実施形態において、メディアパイプライン316は、ビデオコーデックエンジン306の代わりに、又は、ビデオコーデックエンジン306を代表して、1又は複数の専用のメディアオペレーション、例えば、ビデオデコードアクセラレーション、ビデオインターレース解除及びビデオエンコードアクセラレーションを実行する固定機能又はプログラマブル論理ユニットを含む。いくつかの実施形態において、メディアパイプライン316は、3D/メディアサブシステム315上での実行のためのスレッドをスポーンするスレッドスポーニングユニットをさらに含む。スポーンされたスレッドは、3D/メディアサブシステム315に含まれる1又は複数のグラフィックス実行ユニット上でのメディアオペレーションに関する計算を実行する。
いくつかの実施形態において、3D/メディアサブシステム315は、3Dパイプライン312及びメディアパイプライン316によりスポーンされたスレッドを実行するためのロジックを含む。一実施形態において、これらのパイプラインは、スレッド実行要求を3D/メディアサブシステム315に送信し、利用可能なスレッド実行リソースに様々な要求をアービトレート及びディスパッチするためのスレッドディスパッチロジックを含む。実行リソースは、3D及びメディアスレッドを処理するグラフィックス実行ユニットのアレイを含む。いくつかの実施形態において、3D/メディアサブシステム315は、スレッド命令及びデータのための1又は複数の内部キャッシュを含む。いくつかの実施形態において、サブシステムはまた、スレッド間のデータを共有し、出力データを格納するレジスタ及びアドレス可能なメモリを含む共有メモリを含む。
グラフィックス処理エンジン
図4は、いくつかの実施形態に係るグラフィックスプロセッサのグラフィックス処理エンジン410のブロック図である。一実施形態において、グラフィックス処理エンジン(GPE)410は、図3に示されるGPE310のバージョンである。本明細書における任意の他の図面の要素と同じ参照番号(又は名称)を有する図4の要素は、本明細書においてどこか他の場所で説明されるものと同様な任意の方式で動作又は機能することができるが、そのようなものに限定されることはない。例えば、図3の3Dパイプライン312及びメディアパイプライン316が図示されている。GPE410のいくつかの実施形態において、メディアパイプライン316は任意選択的であり、GPE410内に明示的に含まれていなくてもよい。例えば、少なくとも1つの実施形態において、別個の媒体及び/又はイメージプロセッサがGPE410に結合される。
いくつかの実施形態において、GPE410は、コマンドストリーマ403と結合し、又は、コマンドストリーマ403を含み、コマンドストリーマ403は、3Dパイプライン312及び/又はメディアパイプライン316にコマンドストリームを提供する。いくつかの実施形態において、コマンドストリーマ403はメモリと結合され、メモリは、システムメモリであり得る、又は、内部キャッシュメモリ及び共有キャッシュメモリのうちの1又は複数であり得る。いくつかの実施形態において、コマンドストリーマ403は、メモリからコマンドを受信し、3Dパイプライン312及び/又はメディアパイプライン316にコマンドを送信する。コマンドは、リングバッファからフェッチされるディレクティブであり、3Dパイプライン312及びメディアパイプライン316に対するコマンドを格納する。一実施形態において、リングバッファは、複数のコマンドのバッチを格納するバッチコマンドバッファをさらに含み得る。3Dパイプライン312に対するコマンドはまた、メモリに格納されるデータ、例えば、限定されることはないが、3Dパイプライン312に対する頂点及びジオメトリデータ、及び/又は、メディアパイプライン316に対する画像データ及びメモリオブジェクトへの参照を含むことができる。3Dパイプライン312及びメディアパイプライン316は、各パイプライン内のロジックを介してオペレーションを実行することにより、又は、1又は複数の実行スレッドをグラフィックスコアアレイ414にディスパッチすることにより、コマンド及びデータを処理する。一実施形態において、グラフィックスコアアレイ414は、グラフィックスコアの1又は複数のブロック(例えば、グラフィックスコア415A、グラフィックスコア415B)を含み、各ブロックは1又は複数のグラフィックスコアを含む。各グラフィックスコアは、グラフィックス及び計算操作、並びに、固定機能テクスチャ処理を実行する汎用及びグラフィックス固有の実行ロジック、及び/又は、機械学習及び人工知能アクセラレーションロジックを含むグラフィックス実行リソースのセットを含む。
様々な実施形態において、3Dパイプライン312は、命令を処理して、実行スレッドをグラフィックスコアアレイ414にディスパッチすることにより、1又は複数のシェーダプログラム、例えば、頂点シェーダ、ジオメトリシェーダ、ピクセルシェーダ、フラグメントシェーダ、コンピュートシェーダ又は他のシェーダプログラムを処理する固定機能及びプログラマブルロジックを含む。グラフィックスコアアレイ414は、これらのシェーダプログラムの処理での使用のために実行リソースの統合されたブロックを提供する。グラフィックスコアアレイ414のグラフィックスコア415A-414B内の多目的実行ロジック(例えば、実行ユニット)は、様々な3D APIシェーダ言語に対するサポートを含み、複数のシェーダに関連付けられる複数の同時実行スレッドを実行することができる。
いくつかの実施形態において、グラフィックスコアアレイ414はまた、メディア機能、例えば、ビデオ及び/又は画像処理を実行する実行ロジックを含む。一実施形態において、実行ユニットは、グラフィックス処理オペレーションに加えて、並列の汎用計算操作を実行するようにプログラム可能な汎用ロジックをさらに含む。汎用ロジックは、図1のプロセッサコア107又は図2に示すようなコア202A-202N内の汎用ロジックと並列に、又は、これらと共に処理動作を実行できる。
グラフィックスコアアレイ414上で実行するスレッドにより生成される出力データは、統合リターンバッファ(URB)418内のメモリにデータを出力できる。URB418は、複数のスレッドに対するデータを格納できる。いくつかの実施形態において、URB418は、グラフィックスコアアレイ414上で実行する異なるスレッド間のデータを送信するために用いられてよい。いくつかの実施形態において、URB418は、グラフィックスコアアレイ上及び共有機能ロジック420内の固定機能ロジック上のスレッド間の同期のためにさらに用いられてよい。
いくつかの実施形態において、グラフィックスコアアレイ414はスケーラブルであり、当該アレイは、可変数のグラフィックスコアを含み、それぞれがGPE410の目標電力及び性能レベルに基づいて可変数の実行ユニットを有する。一実施形態において、実行リソースは、動的にスケーラブルであり、実行リソースは、必要に応じてイネーブル又はディセーブルにされてよい。
グラフィックスコアアレイ414は、グラフィックスコアアレイ内のグラフィックスコア間で共有される複数のリソースを含む共有機能ロジック420と結合する。共有機能ロジック420内の共有機能は、専用の補足的な機能をグラフィックスコアアレイ414に提供するハードウェアロジックユニットである。様々な実施形態において、共有機能ロジック420は、サンプラ421、数学422及びスレッド間通信(ITC)423ロジックを含むが、これらに限定されることはない。さらに、いくつかの実施形態では、共有機能ロジック420内に1又は複数のキャシュ425を実装する。
共有機能は、所与の専用の機能に対する需要がグラフィックスコアアレイ414内に含めるには不十分な場合に実装される。代わりに、その専用の機能の単一のインスタンス化が、共有機能ロジック420内のスタンドアロンエンティティとして実装され、グラフィックスコアアレイ414内の実行リソース間で共有される。グラフィックスコアアレイ414間で共有され、かつ、グラフィックスコアアレイ414内に含まれる機能の正確なセットは、実施形態にわたって変化する。いくつかの実施形態において、グラフィックスコアアレイ414により広く用いられる共有機能ロジック420内の特定の共有機能は、グラフィックスコアアレイ414内の共有機能ロジック416に含まれてよい。様々な実施形態において、グラフィックスコアアレイ414内の共有機能ロジック416は、共有機能ロジック420内の一部又はすべてのロジックを含み得る。一実施形態において、共有機能ロジック420内のすべてのロジック要素は、グラフィックスコアアレイ414の共有機能ロジック416内で重複してよい。一実施形態では、グラフィックスコアアレイ414内の共有機能ロジック416を優先して、共有機能ロジック420が除外される。
図5は、本明細書において説明されるいくつかの実施形態に係るグラフィックスプロセッサコア500のハードウェアロジックについてのブロック図である。本明細書における任意の他の図面の要素と同じ参照番号(又は名称)を有する図5の要素は、本明細書においてどこか他の場所で説明されるものと同様な任意の方式で動作又は機能することができるが、そのようなものに限定されることはない。図示されるグラフィックスプロセッサコア500は、いくつかの実施形態において、図4のグラフィックスコアアレイ414に含まれる。グラフィックスプロセッサコア500は、コアスライスと称されることがあり、モジュールグラフィックスプロセッサ内の1又は複数のグラフィックスコアであり得る。グラフィックスプロセッサコア500は、1つのグラフィックスコアスライスを例示したものであり、グラフィックスプロセッサは、本明細書において説明されるように、目標電力及び性能限界に基づいて複数のグラフィックスコアスライスを含んでよい。各グラフィックスプロセッサコア500は、汎用及び固定機能ロジックのモジュールブロックを含むサブスライスとも称される複数のサブコア501A-501Fと結合される固定機能ブロック530を含み得る。
いくつかの実施形態において、固定機能ブロック530は、例えば、低性能及び/又は低電力のグラフィックスプロセッサ実装において、グラフィックスプロセッサコア500内のすべてのサブコアにより共有され得るジオメトリ/固定機能パイプライン536を含む。様々な実施形態では、ジオメトリ/固定機能パイプライン536は、3D固定機能パイプライン(例えば、図3及び図4に示すような3Dパイプライン312)、ビデオフロントエンドユニット、スレッドスポーナー及びスレッドディスパッチャ、並びに、統合リターンバッファ、例えば、図4の統合リターンバッファ418を管理する統合リターンバッファマネージャを含む。
一実施形態において、固定機能ブロック530はまた、グラフィックスSoCインタフェース537、グラフィックスマイクロコントローラ538及びメディアパイプライン539を含む。グラフィックスSoCインタフェース537は、グラフィックスプロセッサコア500と、チップ集積回路上のシステム内の他のプロセッサコアとの間のインタフェースを提供する。グラフィックスマイクロコントローラ538は、スレッドディスパッチ、スケジューリング及びプリエンプションを含む、グラフィックスプロセッサコア500の様々な機能を管理するように構成可能なプログラマブルサブプロセッサである。メディアパイプライン539(例えば、図3及び図4のメディアパイプライン316)は、画像及びビデオデータを含むマルチメディアデータのデコード、エンコード、事前処理及び/又は事後処理を容易にするロジックを含む。メディアパイプライン539は、サブコア501A-501F内のコンピュート又はサンプリングロジックへの要求を介してメディアオペレーションを実施する。
一実施形態において、SoCインタフェース537は、共有のラストレベルキャッシュメモリなどのメモリ階層要素、システムRAM、及び/又は、埋め込み型オンチップ若しくはオンパッケージDRAMを含むSoC内の汎用アプリケーションプロセッサコア(例えば、CPU)及び/又は他のコンポーネントとグラフィックスプロセッサコア500が通信することを可能にする。SoCインタフェース537はまた、カメラ撮像パイプラインなど、SoC内の固定機能デバイスとの通信を可能にでき、グラフィックスプロセッサコア500とSoC内のCPUとの間で共有され得るグローバルメモリアトミックの使用を可能にする及び/又は当該グローバルメモリアトミックを実装する。SoCインタフェース537は、グラフィックスプロセッサコア500に対する電力管理制御を実施し、グラフィックスコア500のクロックドメインとSoC内の他のクロックドメインとの間のインタフェースを有効にすることもできる。一実施形態において、SoCインタフェース537は、グラフィックスプロセッサ内の1又は複数のグラフィックスコアのそれぞれにコマンド及び命令を提供するように構成されるコマンドストリーマ及びグローバルスレッドディスパッチャからのコマンドバッファの受信を可能にする。コマンド及び命令は、メディアオペレーションが実行される場合にメディアパイプライン539にディスパッチすることができる、又は、グラフィックス処理オペレーションが実行される場合にジオメトリ及び固定機能パイプライン(例えば、ジオメトリ及び固定機能パイプライン536、ジオメトリ及び固定機能パイプライン514)にディスパッチすることができる。
グラフィックスマイクロコントローラ538は、グラフィックスプロセッサコア500に対する様々なスケジューリング及び管理タスクを実行するように構成され得る。一実施形態において、グラフィックスマイクロコントローラ538は、サブコア501A-501F内の実行ユニット(EU)アレイ502A-502F、504A-504F内の様々なグラフィックス並列エンジンに対するグラフィックス及び/又はコンピュートワークロードスケジューリングを実行できる。このスケジューリングモデルでは、グラフィックスプロセッサコア500を含むSoCのCPUコア上で実行するホストソフトウェアは、複数のグラフィックスプロセッサドアベルのうちの1つにワークロードを提示でき、適切なグラフィックスエンジンに対するスケジューリングオペレーションを呼び出す。スケジューリングオペレーションは、どのワークロードを次に実行するかを決定すること、ワークロードをコマンドストリーマに提示すること、エンジン上で実行する既存のワークロードをプリエンプトすること、ワークロードの経過をモニタリングすること、及び、ワークロードが完了したときをホストソフトウェアに通知することを含む。一実施形態において、グラフィックスマイクロコントローラ538はまた、グラフィックスプロセッサコア500に対する低電力又はアイドル状態を促進することができ、システム上のオペレーティングシステム及び/又はグラフィックスドライバソフトウェアから独立して、低電力状態遷移にわたってグラフィックスプロセッサコア500内のレジスタをセーブ及び復元する能力をグラフィックスプロセッサコア500に提供する。
グラフィックスプロセッサコア500は、図示されるサブコア501A-501Fより多い、又は、より少ない、最大N個のモジュールサブコアを有してよい。N個のサブコアの各セットについて、グラフィックスプロセッサコア500は、共有機能ロジック510、共有及び/又はキャッシュメモリ512、ジオメトリ/固定機能パイプライン514、及び、様々なグラフィックスをアクセラレートし、かつ、処理動作を算出するさらなる固定機能ロジック516も含むことができる。共有機能ロジック510は、グラフィックスプロセッサコア500内の各N個のサブコアにより共有され得る、図4の共有機能ロジック420(例えば、サンプラ、数学及び/又はスレッド間通信ロジック)に関連付けられる論理ユニットを含み得る。共有及び/又はキャッシュメモリ512は、グラフィックスプロセッサコア500内のN個のサブコア501A-501Fのセット用のラストレベルキャッシュであり得、複数のサブコアによりアクセス可能な共有メモリとしての機能も果たし得る。ジオメトリ/固定機能パイプライン514は、固定機能ブロック530内のジオメトリ/固定機能パイプライン536の代わりに含まれることができ、同じ又は同様の論理ユニットを含むことができる。
一実施形態において、グラフィックスプロセッサコア500は、グラフィックスプロセッサコア500による使用のための様々な固定機能アクセラレーションロジックを含み得るさらなる固定機能ロジック516を含む。一実施形態において、さらなる固定機能ロジック516は、位置のみのシェーディングでの使用のためのさらなるジオメトリパイプラインを含む。位置のみのシェーディングにおいて、2つのジオメトリパイプライン、つまり、ジオメトリ/固定機能パイプライン516、536内の完全なジオメトリパイプラインと、さらなる固定機能ロジック516内に含まれ得るさらなるジオメトリパイプラインであるカリングパイプラインが存在する。一実施形態において、カリングパイプラインは、完全なジオメトリパイプラインの縮小バージョンである。完全なパイプライン及びカリングパイプラインは、同じアプリケーションの異なるインスタンスを実行でき、各インスタンスは、別個のコンテキストを有する。位置のみのシェーディングは、破棄された三角形の長いカリング実行を隠すことができ、場合によっては、シェーディングをより速く完了させることを可能にする。例えば、及び、一実施形態において、カリングパイプラインは、フレームバッファに対するピクセルのラスタライゼーション及びレンダリングを実行することなく頂点の位置特性のみをフェッチしてシェーディングするので、さらなる固定機能ロジック516内のカリングパイプラインロジックは、メインアプリケーションと並列に位置シェーダを実行することができ、完全なパイプラインよりも速く重要な結果を大まかに生成する。カリングパイプラインは、生成された重要な結果を用いて、すべての三角形がカリングされるか否かに関係なくこれらの三角形に関する可視情報を算出できる。完全なパイプライン(この例において、リプレイパイプラインと称され得る)は、カリングされる三角形をスキップして、ラスタライゼーションフェーズに最終的に渡される可視三角形のみをシェーディングするために可視情報を消費できる。
一実施形態において、さらなる固定機能ロジック516は、機械学習訓練又は推論の最適化を含む実施のために、機械学習アクセラレーションロジック、例えば、固定機能行列乗算ロジックを含むこともできる。
各グラフィックスサブコア501A-501F内には、グラフィックスパイプライン、メディアパイプライン又はシェーダプログラムによる要求に応じてグラフィックス、メディア及び計算操作を実行するために用いられ得る実行リソースのセットを含む。グラフィックスサブコア501A-501Fは、複数のEUアレイ502A-502F、504A-504F、スレッドディスパッチ及びスレッド間通信(TD/IC)ロジック503A-503F、3D(例えば、テクスチャ)サンプラ505A-505F、メディアサンプラ506A-506F、シェーダプロセッサ507A-507F並びに共有ローカルメモリ(SLM)508A-508Fを含む。EUアレイ502A-502F、504A-504Fはそれぞれ、複数の実行ユニットを含み、それらは、グラフィックス、メディア又はコンピュートシェーダプログラムを含むグラフィックス、メディア又は計算操作の稼働中に、浮動小数点及び整数/不動点論理演算を実行することが可能な汎用グラフィックス処理ユニットである。TD/ICロジック503A-503Fは、サブコア内の実行ユニットに対するローカルスレッドディスパッチ及びスレッド制御オペレーションを実行し、サブコアの実行ユニット上で実行するスレッド間の通信を容易にする。3Dサンプラ505A-505Fは、テクスチャ又は他の3Dグラフィックス関連データをメモリに読み込むことができる。3Dサンプラは、所与のテクスチャに関連付けられる構成されたサンプル状態及びテクスチャフォーマットに基づいて、テクスチャデータを別々に読み込むことができる。メディアサンプラ506A-506Fは、メディアデータに関連付けられるタイプ及びフォーマットに基づいて同様の読み込み動作を実行できる。一実施形態において、各グラフィックスサブコア501A-501Fは、統合された3D及びメディアサンプラを交互に含むことができる。サブコア501A-501Fのそれぞれ内の実行ユニット上で実行するスレッドは、各サブコア内の共有ローカルメモリ508A-508Fを利用して、オンチップメモリの共通のプールを用いて実行するスレッドグループ内でのスレッド実行を可能にする。
実行ユニット
図6A~図6Bは、本明細書において説明される実施形態に係るグラフィックスプロセッサコアにおいて採用される処理要素のアレイを含むスレッド実行ロジック600を示す。本明細書における任意の他の図面の要素と同じ参照番号(又は名称)を有する図6A~図6Bの要素は、本明細書においてどこか他の場所で説明されるものと同様な任意の方式で動作又は機能することができるが、そのようなものに限定されることはない。図6Aは、スレッド実行ロジック600の概要を示し、図5の各サブコア501A-501Fと共に図示されるハードウェアロジックの変形例を含み得る。図6Bは、実行ユニットの例示的な内部の詳細を示す。
図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のアレイは、任意の数の個々の実行ユニットを含むようにスケーラブルである。
いくつかの実施形態において、実行ユニット608A-608Nは、主としてシェーダプログラムを実行するために用いられる。シェーダプロセッサ602は、様々なシェーダプログラムを処理し、スレッドディスパッチャ604を介してシェーダプログラムに関連付けられる実行スレッドをディスパッチすることができる。一実施形態において、スレッドディスパッチャは、グラフィックス及びメディアパイプラインからのスレッド開始要求をアービトレートし、実行ユニット608A-608N内の1又は複数の実行ユニット上で要求されたスレッドをインスタンス化するロジックを含む。例えば、ジオメトリパイプラインは、頂点、テセレーション又はジオメトリシェーダを処理用のスレッド実行ロジックにディスパッチすることができる。いくつかの実施形態において、スレッドディスパッチャ604は、実行しているシェーダプログラムからのランタイムスレッドスポーニング要求を処理することもできる。
いくつかの実施形態において、実行ユニット608A-608Nは、多くの標準的な3Dグラフィックスシェーダ命令に対するネイティブサポートを含む命令セットをサポートしており、その結果、グラフィックスライブラリ(例えば、Direct 3D及びOpenGL)からのシェーダプログラムが最小限の移動で実行される。実行ユニットは、頂点及びジオメトリ処理(例えば、頂点プログラム、ジオメトリプログラム、頂点シェーダ)、ピクセル処理(例えば、ピクセルシェーダ、フラグメントシェーダ)及び汎用処理(例えば、コンピュート及びメディアシェーダ)をサポートする。実行ユニット608A-608Nのそれぞれは、マルチ発行型の単一命令複数データ(SIMD)実行を可能にし、マルチスレッドオペレーションは、より高いレイテンシメモリアクセスにあるにも関わらず効率的な実行環境を可能にする。各実行ユニット内の各ハードウェアスレッドは、専用の高帯域幅レジスタファイル及び関連する独立したスレッド状態を有する。実行は、整数、単精度及び倍精度浮動小数点演算、SIMD分岐性能、論理演算、超越演算及び他の寄せ集め演算が可能なパイプラインへのクロック毎のマルチ発行である。メモリからのデータ又は共有機能のうちの1つからのデータを待機している間に、実行ユニット608A-608N内の依存性ロジックは、要求したデータが戻ってくるまで待機中のスレッドをスリープさせる。待機中のスレッドがスリープしている間に、ハードウェアリソースは、他のスレッドを処理することに専念してよい。例えば、頂点シェーダオペレーションに関連付けられる遅延中に、実行ユニットは、異なる頂点シェーダを含むピクセルシェーダ、フラグメントシェーダ又は別のタイプのシェーダプログラムに対するオペレーションを実行できる。
実行ユニット608A-608N内の各実行ユニットは、データ要素のアレイ上で動作する。データ要素の数は、「実行サイズ」又は命令に対するチャネルの数である。実行チャネルは、データ要素アクセス、マスキング及び命令内のフロー制御のための実行についての論理ユニットである。チャネルの数は、特定のグラフィックスプロセッサ用の物理算術論理ユニット(ALU)又は浮動小数点ユニット(FPU)の数とは無関係であり得る。いくつかの実施形態において、実行ユニット608A-608Nは、整数及び浮動小数点データタイプをサポートする。
実行ユニット命令セットは、SIMD命令を含む。様々なデータ要素は、レジスタ内のパックドデータタイプとして格納されることができ、実行ユニットは、要素のデータサイズに基づいて、様々な要素を処理する。例えば、256ビット幅のベクトルを操作する場合、ベクトルの256ビットがレジスタに格納され、実行ユニットは、4つの別個の64ビットパックドデータ要素(クアッドワード(QW)サイズのデータ要素)、8つの別個の32ビットパックドデータ要素(ダブルワード(DW)サイズのデータ要素)、16個の別個の16ビットパックドデータ要素(ワード(W)サイズのデータ要素)又は32個の別個の8ビットデータ要素(バイト(B)サイズのデータ要素)としてベクトルを操作する。しかしながら、異なるベクトル幅及びレジスタサイズが可能である。
一実施形態において、1又は複数の実行ユニットは、融合されたEUに共通のスレッド制御ロジック(607A-607N)を有する融合された実行ユニット609A-609Nと組み合わせられ得る。複数のEUは、EUグループに融合され得る。融合されたEUグループ内の各EUは、別個のSIMDハードウェアスレッドを実行するように構成され得る。融合されたEUグループ内のEUの数は、実施形態に従って変化し得る。さらに、様々なSIMD幅は、EU毎に実行され得、限定されることはないが、SIMD8、SIMD16及びSIMD32を含む。各融合されたグラフィックス実行ユニット609A-609Nは、少なくとも2つの実行ユニットを含む。例えば、融合された実行ユニット609Aは、第1のEU608Aと、第2のEU608Bと、第1のEU608A及び第2のEU608Bに共通するスレッド制御ロジック607Aとを含む。スレッド制御ロジック607Aは、融合されたグラフィックス実行ユニット609A上で実行されるスレッドを制御し、融合された実行ユニット609A-609N内の各EUが共通の命令ポインタレジスタを用いて実行することを可能にする。
1又は複数の内部命令キャッシュ(例えば、606)は、実行ユニットのためのスレッド命令をキャッシュするスレッド実行ロジック600に含まれる。いくつかの実施形態において、スレッド実行中のスレッドデータをキャッシュするために、1又は複数のデータキャッシュ(例えば、612)が含まれる。いくつかの実施形態において、3D演算用のテクスチャサンプリング及びメディアオペレーション用のメディアサンプリングを提供するために、サンプラ610が含まれる。いくつかの実施形態において、サンプラ610は、サンプリングされたデータを実行ユニットに提供する前のサンプリング処理中にテクスチャ又はメディアデータを処理するために、専用のテクスチャ又はメディアサンプリング機能を含む。
実行中、グラフィックス及びメディアパイプラインは、スレッドスポーニング及びディスパッチロジックを介してスレッド実行ロジック600にスレッド開始要求を送信する。ジオメトリックオブジェクトのグループが処理されて、ピクセルデータへとラスタライズされると、シェーダプロセッサ602内のピクセルプロセッサロジック(例えば、ピクセルシェーダロジック、フラグメントシェーダロジックなど)が、出力情報をさらに算出するために起動され、サーフェス(例えば、カラーバッファ、デプスバッファ、ステンシルバッファなど)を出力するために結果を書き込ませる。いくつかの実施形態において、ピクセルシェーダ又はフラグメントシェーダは、ラスタライズされたオブジェクトにわたって補間されるべき様々な頂点特性の値を算出する。いくつかの実施形態において、シェーダプロセッサ602内のピクセルプロセッサロジックは、次に、アプリケーションプログラミングインタフェース(API)供給型ピクセル又はフラグメントシェーダプログラムを実行する。シェーダプログラムを実行するために、シェーダプロセッサ602は、スレッドディスパッチャ604を介して実行ユニット(例えば、608A)にスレッドをディスパッチする。いくつかの実施形態において、シェーダプロセッサ602は、サンプラ610内のテクスチャサンプリングロジックを用いて、メモリに格納されるテクスチャマッピング内のテクスチャデータにアクセスする。テクスチャデータ及び入力されたジオメトリデータに対する算術演算は、各ジオメトリックフラグメントに対するピクセルカラーデータを算出する、又は、さらなる処理から1又は複数のピクセルを廃棄する。
いくつかの実施形態において、データポート614は、グラフィックスプロセッサの出力パイプライン上でさらに処理するために、処理されたデータをメモリに出力するメモリアクセスメカニズムをスレッド実行ロジック600に提供する。いくつかの実施形態において、データポート614は、データポートを介したメモリアクセスのためにデータをキャッシュする1又は複数のキャッシュメモリ(例えば、データキャッシュ612)を含む、又は、これに結合される。
図6Bに示されるように、グラフィックス実行ユニット608は、命令フェッチユニット637、汎用レジスタファイルアレイ(GRF)624、アーキテクチャレジスタファイルアレイ(ARF)626、スレッドアービタ622、送信ユニット630、分岐ユニット632、SIMD浮動小数点ユニット(FPU)634のセット、及び、一実施形態において、専用の整数SIMD ALU635のセットを含み得る。GRF624及びARF626は、グラフィックス実行ユニット608においてアクティブであり得るそれぞれの同時ハードウェアスレッドに関連付けられる汎用レジスタファイル及びアーキテクチャレジスタファイルのセットを含む。一実施形態において、スレッド毎のアーキテクチャ状態は、ARF626において維持され、一方、スレッド実行中に用いられるデータは、GRF624に格納される。スレッド毎に命令ポインタを含む各スレッドの実行状態は、ARF626内のスレッド固有のレジスタにおいて保持され得る。
一実施形態において、グラフィックス実行ユニット608は、同時マルチスレッディング(SMT)及び細粒度のインターリーブ型マルチスレッディング(IMT)の組み合わせであるアーキテクチャを有する。アーキテクチャは、同時スレッドの目標数及び実行ユニット毎のレジスタの数に基づいて設計時に細かくチューニングされ得るモジュール構成を有し、実行ユニットのリソースが複数の同時スレッドを実行するために用いられるロジックにわたって分割される。
一実施形態において、グラフィックス実行ユニット608は、それぞれが異なる命令であり得る複数の命令を共同発行できる。グラフィックス実行ユニットスレッド608のスレッドアービタ622は、実行のために送信ユニット630、分岐ユニット632又はSIMD FPU634のうちの1つに命令をディスパッチすることができる。各実行スレッドは、GRF624内の128個の汎用レジスタにアクセスすることができ、各レジスタは、32ビットデータ要素のSIMD8-要素ベクトルとしてアクセス可能な32バイトを格納できる。一実施形態において、各実行ユニットのスレッドは、GRF624内の4Kバイトへのアクセスを有するが、実施形態は、そのように限定されるわけではなく、他の実施形態では、より多い又はより少ない数のレジスタリソースが提供されてよい。一実施形態において、最大7個のスレッドが同時に実行できるが、実行ユニット毎のスレッドの数はまた、実施形態に従って変化させることができる。7個のスレッドが4Kバイトにアクセスし得る実施形態では、GRF624は、合計28Kバイトを格納できる。フレキシブルなアドレッシングモードは、効果的により広いレジスタを構築する、又は、ストライド矩形ブロックデータ構造を表すために、レジスタが一緒にアドレッシングされることを可能にし得る。
一実施形態において、メモリ演算、サンプラオペレーション及び他の長いレイテンシシステム通信は、メッセージパッシング送信ユニット630により実行される「送信」命令を介してディスパッチされる。一実施形態において、分岐命令は、SIMDダイバージェンス及び最終的なコンバージェンスを促すために、専用の分岐ユニット632にディスパッチされる。
一実施形態において、グラフィックス実行ユニット608は、浮動小数点演算を実行する1又は複数のSIMD浮動小数点ユニット(FPU)634を含む。一実施形態において、FPU634はまた、整数計算をサポートする。一実施形態において、FPU634は、最大M個の32ビット浮動小数点(又は整数)演算をSIMD実行でき、又は、最大2M個の16ビット整数又は16ビット浮動小数点演算をSIMD実行できる。一実施形態において、FPUのうちの少なくとも1つは、ハイスループットで卓越した数学関数及び倍精度の64ビット浮動小数点をサポートする拡張数学機能を提供する。いくつかの実施形態において、8ビット整数SIMD ALU635のセットも存在し、具体的には、機械学習計算に関連付けられるオペレーションを実行するように最適化され得る。
一実施形態において、グラフィックス実行ユニット608の複数のインスタンスのアレイは、グラフィックスサブコアグループ(例えば、サブスライス)においてインスタンス化され得る。スケーラビリティについて、製品の設計者は、サブコアグループ毎に実行ユニットの正確な数を選択できる。一実施形態において、実行ユニット608は、複数の実行チャネルにわたって命令を実行できる。さらなる実施形態において、グラフィックス実行ユニット608上で実行される各スレッドは、異なるチャネル上で実行される。
図7は、いくつかの実施形態に係るグラフィックスプロセッサ命令フォーマット700を示すブロック図である。1又は複数の実施形態において、グラフィックスプロセッサ実行ユニットは、複数のフォーマットにおける命令を有する命令セットをサポートする。実線の枠は、実行ユニット命令に一般的に含まれるコンポーネントを示し、一方、破線は、任意選択的であり、又は、命令のサブセットにのみ含まれるコンポーネントを含む。いくつかの実施形態において、説明されかつ示される命令フォーマット700は、命令が処理された時点の命令デコードによるマイクロオペレーションとは対照的に、それらが実行ユニットに供給される命令いう点で、マクロ命令である。
いくつかの実施形態において、グラフィックスプロセッサ実行ユニットは、128ビットの命令フォーマット710における命令をネイティブにサポートする。64ビットの圧縮命令フォーマット730は、選択された命令、命令オプション及びオペランドの数に基づいていくつかの命令が利用可能である。ネイティブな128ビットの命令フォーマット710は、すべての命令オプションへのアクセスを提供し、一方、いくつかのオプション及びオペレーションは、64ビットフォーマット730に制限される。64ビットフォーマット730において利用可能なネイティブ命令は、実施形態によって変わる。いくつかの実施形態において、命令は、インデックスフィールド713内のインデックス値のセットを部分的に用いて圧縮される。実行ユニットハードウェアは、インデックス値に基づいて圧縮テーブルのセットを参照し、128ビットの命令フォーマット710内のネイティブ命令を再構成するために、圧縮テーブル出力を用いる。
各フォーマットについて、命令オペコード712は、実行ユニットが実行するオペレーションを定義する。実行ユニットは、各オペランドの複数のデータ要素に並行して各命令を実行する。例えば、追加の命令に応じて、実行ユニットは、テクスチャ成分又はピクチャ成分を表す各カラーチャネルにわたって追加のオペレーションを同時に実行する。デフォルトで、実行ユニットは、オペランドのすべてのデータチャネルにわたって各命令を実行する。いくつかの実施形態において、命令制御フィールド714は、チャネル選択(例えば、プレディケーション)及びデータチャネルオーダ(例えば、スウィズル)などのある実行オプションにわたる制御を可能にする。128ビットの命令フォーマット710内の命令について、実行サイズフィールド716は、並列に実行されるデータチャネルの数を制限する。いくつかの実施形態において、実行サイズフィールド716は、64ビットのコンパクトな命令フォーマット730での使用に対して利用可能ではない。
いくつかの実行ユニット命令は、2つのソースオペランド、src0 720、src1 722、及び、1つのデスティネーション718を含む最大3つのオペランドを有する。いくつかの実施形態において、実行ユニットは、デュアルデスティネーション命令をサポートし、当該デスティネーションの一方が暗に示される。データ操作命令は、第3のソースオペランド(例えば、SRC2 724)を有することができ、命令オペコード712は、ソースオペランドの数を決定する。命令の最後のソースオペランドは、命令と共に渡される(例えば、ハードコードされた)即値であり得る。
いくつかの実施形態において、128ビットの命令フォーマット710は、例えば、直接レジスタアドレッシングモード又は間接レジスタアドレッシングモードが用いられるかを特定するアクセス/アドレスモードフィールド726を含む。直接レジスタアドレッシングモードが用いられる場合、1又は複数のオペランドのレジスタアドレスは、命令内のビットにより直接提供される。
いくつかの実施形態において、128ビットの命令フォーマット710は、アクセス/アドレスモードフィールド726を含み、命令のアドレスモード及び/又はアクセスモードを規定する。一実施形態において、アクセスモードは、命令のデータアクセスアライメントを定義するために用いられる。いくつかの実施形態では、16バイトアライン型のアクセスモード及び1バイトアライン型のアクセスモードを含むアクセスモードをサポートし、アクセスモードのバイトアライメントが命令オペランドのアクセスアライメントを決定する。例えば、第1モードの場合、命令はソースオペランド及びデスティネーションオペランドに対してバイトアライン型のアドレッシングを使用してよく、第2モードの場合、命令はすべてのソースオペランド及びデスティネーションオペランドに対して16バイトアライン型のアドレッシングを使用してよい。
一実施形態において、アクセス/アドレスモードフィールド726のアドレスモードの一部は、命令が直接又は間接アドレッシングを使用するか否かを決定する。直接レジスタアドレッシングモードが用いられる場合、命令内のビットが1又は複数のオペランドのレジスタアドレスを直接提供する。間接レジスタアドレッシングモードが用いられる場合、1又は複数のオペランドのレジスタアドレスは、命令内のアドレスレジスタ値及びアドレス即値フィールドに基づいて算出されてよい。
いくつかの実施形態において、命令は、オペコードデコード740を簡略化するために、オペコード712のビットフィールドに基づいてグループ化される。8ビットオペコードについて、ビット4、5及び6は、実行ユニットがオペコードのタイプを決定することを可能にする。示される正確なオペコードのグループ化は単なる例に過ぎない。いくつかの実施形態において、移動及びロジックオペコードグループ742は、データ移動及び論理命令(例えば、移動(mov)、比較(cmp))を含む。いくつかの実施形態において、移動及びロジックグループ742は、5つの最上位ビット(MSB)を共有し、移動(mov)命令は0000xxxxbの形式であり、論理命令は0001xxxxbの形式である。フロー制御命令グループ744(例えば、コール、ジャンプ(jmp))は、0010xxxxb(例えば、0x20)の形式の命令を含む。寄せ集め命令グループ746は、命令の混合を含み、0011xxxxb(例えば、0x30)の形式の同期命令(例えば、待機、送信)を含む。並列数学命令グループ748は、0100xxxxb(例えば、0x40)の形式のコンポーネントに関する算術命令(例えば、加算、乗算(mul))を含む。並列数学グループ748は、データチャネルに並行して算術演算を実行する。ベクトル数学グループ(vector math group)750は、0101xxxxb(例えば、0x50)の形式の算術命令(例えば、dp4)を含む。ベクトル数学グループ(vector math group)は、ベクトルオペランドに対するドット積計算などの算術を実行する。
グラフィックスパイプライン
図8は、グラフィックスプロセッサ800の別の実施形態のブロック図である。本明細書における任意の他の図面の要素と同じ参照番号(又は名称)を有する図8の要素は、本明細書においてどこか他の場所で説明されるものと同様な任意の方式で動作又は機能することができるが、そのようなものに限定されることはない。
いくつかの実施形態において、グラフィックスプロセッサ800は、ジオメトリパイプライン820、メディアパイプライン830、ディスプレイエンジン840、スレッド実行ロジック850及びレンダリング出力パイプライン870を含む。いくつかの実施形態において、グラフィックスプロセッサ800は、1又は複数の汎用プロセッシングコアを含むマルチコア処理システム内のグラフィックスプロセッサである。グラフィックスプロセッサは、1又は複数制御レジスタ(図示せず)へのレジスタ書き込みにより制御される、又は、リング相互接続802を介してグラフィックスプロセッサ800に発行されるコマンドを介して制御される。いくつかの実施形態において、リング相互接続802は、グラフィックスプロセッサ800を他の処理コンポーネント、例えば、他のグラフィックスプロセッサ又は汎用プロセッサに結合する。リング相互接続802からのコマンドは、コマンドストリーマ803により解釈され、コマンドストリーマ803は、ジオメトリパイプライン820又はメディアパイプライン830の個々のコンポーネントに命令を供給する。
いくつかの実施形態において、コマンドストリーマ803は、メモリから頂点データを読み出して、コマンドストリーマ803により提供される頂点処理コマンドを実行する頂点フェッチャ805のオペレーションを指示する。いくつかの実施形態において、頂点フェッチャ805は、頂点シェーダ807に頂点データを提供し、頂点シェーダ807は、各頂点に対する座標空間変換及びライティングオペレーションを実行する。いくつかの実施形態において、頂点フェッチャ805及び頂点シェーダ807は、スレッドディスパッチャ831を介して実行ユニット852A-852Bに実行スレッドをディスパッチすることにより頂点処理命令を実行する。
いくつかの実施形態において、実行ユニット852A-852Bは、グラフィックス及びメディアオペレーションを実行するための命令セットを有するベクトルプロセッサのアレイである。いくつかの実施形態において、実行ユニット852A-852Bは、アレイ毎に固有である又はアレイ間で共有される付属のL1キャッシュ851を有する。キャッシュは、データキャッシュ、命令キャッシュ、又は、異なるパーティショニングにデータ及び命令を含むようにパーティショニングされるシングルキャッシュとして構成され得る。
いくつかの実施形態において、ジオメトリパイプライン820は、3Dオブジェクトのハードウェアアクセラレート型テセレーションを実行するテセレーションコンポーネントを含む。いくつかの実施形態において、プログラマブルハルシェーダ811は、テセレーションオペレーションを構成する。プログラマブルドメインシェーダ817は、テセレーション出力のバックエンド評価を提供する。テセレータ813は、ハルシェーダ811の指示で動作しており、ジオメトリパイプライン820への入力として提供される粗いジオメトリックモデルに基づいて、詳細なジオメトリックオブジェクトのセットを生成する専用ロジックを含む。いくつかの実施形態において、テセレーションが用いられない場合、テセレーションコンポーネント(例えば、ハルシェーダ811、テセレータ813及びドメインシェーダ817)はバイパスされ得る。
いくつかの実施形態において、完全なジオメトリックオブジェクトは、実行ユニット852A-852Bにディスパッチされる1又は複数のスレッドを介してジオメトリシェーダ819により処理され得る、又は、クリッパ829に直接進むことができる。いくつかの実施形態において、ジオメトリシェーダは、グラフィックスパイプラインの前のステージにあるような頂点又は頂点のパッチよりもむしろ、ジオメトリックオブジェクト全体で動作する。テセレーションがディセーブルである場合、ジオメトリシェーダ819は、頂点シェーダ807から入力を受信する。いくつかの実施形態において、ジオメトリシェーダ819は、テセレーションユニットがディセーブルである場合にジオメトリテセレーションを実行するために、ジオメトリシェーダプログラムによりプログラム可能である。
ラスタライゼーションの前に、クリッパ829は頂点データを処理する。クリッパ829は、クリッピング及びジオメトリシェーダ機能を有する固定機能クリッパ又はプログラマブルクリッパであってよい。いくつかの実施形態において、レンダリング出力パイプライン870内のラスタライザ及びデプス試験コンポーネント873は、ジオメトリックオブジェクトをピクセル毎の表現へと変換するために、ピクセルシェーダをディスパッチする。いくつかの実施形態において、ピクセルシェーダロジックは、スレッド実行ロジック850に含まれる。いくつかの実施形態において、アプリケーションは、ラスタライザ及びデプス試験コンポーネント873をバイパスして、ストリームアウトユニット823を介してラスタライズされていない頂点データにアクセスすることができる。
グラフィックスプロセッサ800は、相互接続バス、相互接続ファブリック、又は、プロセッサの主要なコンポーネント間でのデータ及びメッセージパッシングを可能にするいくつかの他の相互接続メカニズムを有する。いくつかの実施形態において、実行ユニット852A-852B及び関連する論理ユニット(例えば、L1キャッシュ851、サンプラ854、テクスチャキャッシュ858など)は、メモリアクセスを実行して、プロセッサのレンダリング出力パイプラインコンポーネントと通信するためにデータポート856を介して相互接続する。いくつかの実施形態において、サンプラ854、キャッシュ851、858及び実行ユニット852A-852Bはそれぞれ、別個のメモリアクセスパスを有する。一実施形態において、テクスチャキャッシュ858はまた、サンプラキャッシュとして構成され得る。
いくつかの実施形態において、レンダリング出力パイプライン870は、頂点ベースのオブジェクトを関連するピクセルベースの表現へと変換するラスタライザ及びデプス試験コンポーネント873を含む。いくつかの実施形態において、ラスタライザロジックは、固定機能三角形及び線ラスタライゼーションを実行するウィンドウア(windower)/マスカ(masker)ユニットを含む。いくつかの実施形態において、関連するレンダリングキャッシュ878及びデプスキャッシュ879も利用可能である。ピクセル演算コンポーネント877は、データに対してピクセルベースの演算を実行するが、いくつかの例では、2D演算に関連付けられるピクセル演算(例えば、ブレンディングを用いたビットブロック画像転送)が2Dエンジン841により実行される、又は、オーバレイディスプレイプレーンを用いてディスプレイコントローラ843により表示時間に置き換えられる。いくつかの実施形態において、共有のL3キャッシュ875は、すべてのグラフィックスコンポーネントに利用可能であり、主システムメモリを使用することなくデータの共有を可能にする。
いくつかの実施形態において、グラフィックスプロセッサメディアパイプライン830は、メディアエンジン837及びビデオフロントエンド834を含む。いくつかの実施形態において、ビデオフロントエンド834は、コマンドストリーマ803からパイプラインコマンドを受信する。いくつかの実施形態において、メディアパイプライン830は、別個のコマンドストリーマを含む。いくつかの実施形態において、ビデオフロントエンド834は、メディアエンジン837にコマンドを送信する前に、メディアコマンドを処理する。いくつかの実施形態において、メディアエンジン837は、スレッドディスパッチャ831を介してスレッド実行ロジック850へのディスパッチのためにスレッドをスポーンするスレッドスポーニング機能を含む。
いくつかの実施形態において、グラフィックスプロセッサ800は、ディスプレイエンジン840を含む。いくつかの実施形態において、ディスプレイエンジン840は、プロセッサ800の外部にあり、リング相互接続802又はいくつかの他の相互接続バス若しくはファブリックを介してグラフィックスプロセッサと結合する。いくつかの実施形態において、ディスプレイエンジン840は、2Dエンジン841及びディスプレイコントローラ843を含む。いくつかの実施形態において、ディスプレイエンジン840は、3Dパイプラインとは独立して動作することが可能な専用ロジックを含む。いくつかの実施形態において、ディスプレイコントローラ843は、ディスプレイデバイス(図示せず)と結合し、これは、ラップトップコンピュータにあるようなシステム統合型ディスプレイデバイス、又は、ディスプレイデバイスコネクタを介して取り付けられる外部ディスプレイデバイスであってよい。
いくつかの実施形態において、ジオメトリパイプライン820及びメディアパイプライン830は、複数のグラフィックス及びメディアプログラミングインタフェースに基づいてオペレーションを実行するように構成可能であり、任意のあるアプリケーションプログラミングインタフェース(API)に固有のものではない。いくつかの実施形態において、グラフィックスプロセッサ用のドライバソフトウェアは、グラフィックスプロセッサにより処理され得るコマンドに、特定のグラフィックス又はメディアライブラリに固有のAPIコールを変換する。いくつかの実施形態において、Khronosグループのオープングラフィックスライブラリ(OpenGL)、オープンコンピューティング言語(OpenCL)、及び/又は、Vulkanグラフィックス及びコンピュートAPIに対して、サポートが提供される。いくつかの実施形態において、マイクロソフトコーポレーションのDirect3Dライブラリに対してもサポートが提供され得る。いくつかの実施形態において、これらのライブラリの組み合わせがサポートされ得る。オープンソースのコンピュータビジョンライブラリ(OpenCV)に対してもサポートが提供され得る。互換性のある3Dパイプラインを有する将来のAPIはまた、将来のAPIのパイプラインからグラフィックスプロセッサのパイプラインへとマッピングが行われることができる場合にサポートされるだろう。
グラフィックスパイプラインのプログラミング
図9Aは、いくつかの実施形態に係るグラフィックスプロセッサコマンドフォーマット900を示すブロック図である。図9Bは、実施形態に係るグラフィックスプロセッサコマンドシーケンス910を示すブロック図である。図9Aにおける実線の枠は、グラフィックスコマンドに一般的に含まれるコンポーネントを示し、一方、破線は、任意選択的である、又は、グラフィックスコマンドのサブセットにのみ含まれるコンポーネントを含む。図9Aの例示的なグラフィックスプロセッサコマンドフォーマット900は、クライアント902、コマンドオペレーションコード(オペコード)904及びコマンド用のデータ906を識別するデータフィールドを含む。サブオペコード905及びコマンドサイズ908はまた、いくつかのコマンドに含まれる。
いくつかの実施形態において、クライアント902は、コマンドデータを処理するグラフィックスデバイスのクライアントユニットを規定する。いくつかの実施形態において、グラフィックスプロセッサコマンドパーサは、コマンドのさらなる処理を調整して適切なクライアントユニットにコマンドデータをルーティングするために、各コマンドのクライアントフィールドを検査する。いくつかの実施形態において、グラフィックスプロセッサクライアントユニットは、メモリインタフェースユニット、レンダリングユニット、2Dユニット、3Dユニット及びメディアユニットを含む。各クライアントユニットは、コマンドを処理する対応する処理パイプラインを有する。コマンドがクライアントユニットにより受信されると、クライアントユニットは、オペコード904、及び、存在する場合にはサブオペコード905を読み出して、実行するオペレーションを決定する。クライアントユニットは、データフィールド906内の情報を用いてコマンドを実行する。いくつかのコマンドについて、明示的なコマンドサイズ908は、コマンドのサイズを規定することが予期される。いくつかの実施形態において、コマンドパーサは、コマンドオペコードに基づいて、コマンドの少なくともいくつかのサイズを自動的に決定する。いくつかの実施形態において、コマンドは、ダブルワードの倍数を用いてアラインされる。
図9Bのフロー図は、例示的なグラフィックスプロセッサコマンドシーケンス910を示す。いくつかの実施形態において、グラフィックスプロセッサの実施形態を取り上げるデータ処理システムのソフトウェア又はファームウェアは、示されるコマンドシーケンスのバージョンを用いて、グラフィックスオペレーションのセットをセットアップして、実行して、終了する。実施形態は、サンプルコマンドシーケンスが、例示の目的のみで示され、かつ、説明されるが、これらの特定のコマンド又はこのコマンドシーケンスに限定されることはない。さらに、当該コマンドは、コマンドシーケンスにおけるコマンドのバッチとして発行されてよく、その結果、グラフィックスプロセッサが少なくとも部分的にコヒーレンスな状態でコマンドのシーケンスを処理する。
いくつかの実施形態において、グラフィックスプロセッサコマンドシーケンス910は、任意のアクティブなグラフィックスパイプラインにパイプラインに対する現在保留中のコマンドを完了させるパイプラインフラッシュコマンド912から始めてよい。いくつかの実施形態において、3Dパイプライン922及びメディアパイプライン924は、同時に動作しない。パイプラインフラッシュは、アクティブなグラフィックスパイプラインに任意の保留中のコマンドを完了させるために実行される。パイプラインフラッシュに応答して、グラフィックスプロセッサに対するコマンドパーサは、アクティブなドローイングエンジンが保留中のオペレーションを完了し、かつ、関連する読み出しキャッシュが無効にされるまで、コマンド処理を一時停止する。任意選択的に、「ダーティ(dirty)」とマーキングされたレンダリングキャッシュ内の任意のデータがメモリに対してフラッシュされ得る。いくつかの実施形態において、パイプラインフラッシュコマンド912は、パイプライン同期中に、又は、グラフィックスプロセッサを低電力状態にする前に用いられ得る。
いくつかの実施形態において、パイプライン選択コマンド913は、パイプライン間で明示的に切り替えるために、コマンドシーケンスがグラフィックスプロセッサを必要とする場合に用いられる。いくつかの実施形態において、パイプライン選択コマンド913は、コンテキストが両方のパイプラインにコマンドを発行しない限り、パイプラインコマンドを発行する前に、実行コンテキスト内で一度だけ必要とされる。いくつかの実施形態において、パイプラインフラッシュコマンド912は、パイプライン選択コマンド913を介したパイプライン切り替えの直前に必要とされる。
いくつかの実施形態において、パイプライン制御コマンド914は、オペレーション用のグラフィックスパイプラインを構成し、3Dパイプライン922及びメディアパイプライン924をプログラムするために用いられる。いくつかの実施形態において、パイプライン制御コマンド914は、アクティブなパイプラインに関するパイプライン状態を構成する。一実施形態においてパイプライン制御コマンド914は、パイプライン同期中に用いられる、又は、コマンドのバッチを処理する前に、アクティブなパイプライン内の1又は複数のキャッシュメモリからのデータをクリアするために用いられる。
いくつかの実施形態において、リターンバッファ状態コマンド916は、データを書き込むために各パイプラインに対するリターンバッファのセットを構成するために用いられる。いくつかのパイプラインオペレーションは、オペレーションが処理中に中間データを書き込む1又は複数のリターンバッファの割り当て、選択又は構成を必要とする。いくつかの実施形態において、グラフィックスプロセッサはまた、出力データを格納し、かつ、クロススレッド通信を実行するために1又は複数のリターンバッファを用いる。いくつかの実施形態において、リターンバッファ状態916は、パイプラインオペレーションのセットを用いるために、リターンバッファのサイズ及び数を選択することを含む。
コマンドシーケンスにおける残りのコマンドは、オペレーション用のアクティブなパイプラインに基づいて異なる。パイプライン決定920に基づいて、コマンドシーケンスは、3Dパイプライン状態930から始まる3Dパイプライン922又はメディアパイプライン状態940で始まるメディアパイプライン924に合わせる。
3Dパイプライン状態930を構成するコマンドは、頂点バッファ状態、頂点要素状態、一定のカラー状態、デプスバッファ状態、及び、3Dプリミティブコマンドが処理される前に構成される他の状態変数に対する3D状態設定コマンドを含む。これらのコマンドの値は、使用中の特定の3D APIに基づいて少なくとも部分的に決定される。いくつかの実施形態において、3Dパイプライン状態930のコマンドは、これらの要素が用いられない場合、特定のパイプライン要素を選択的に無効にする又はバイパスすることもできる。
いくつかの実施形態において、3Dプリミティブ932のコマンドは、3Dパイプラインにより処理される3Dプリミティブを提示するために用いられる。3Dプリミティブ932のコマンドを介してグラフィックスプロセッサに渡されるコマンド及び関連するパラメータは、グラフィックスパイプライン内の頂点フェッチ機能に転送される。頂点フェッチ機能は、3Dプリミティブ932のコマンドデータを用いて頂点データ構造を生成する。頂点データ構造は、1又は複数のリターンバッファに格納される。いくつかの実施形態において、3Dプリミティブ932のコマンドは、頂点シェーダを介して3Dプリミティブに対する頂点オペレーションを実行するために用いられる。頂点シェーダを処理するために、3Dパイプライン922は、シェーダ実行スレッドをグラフィックスプロセッサ実行ユニットにディスパッチする。
いくつかの実施形態において、3Dパイプライン922は、実行934のコマンド又はイベントを介してトリガされる。いくつかの実施形態において、レジスタ書き込みは、コマンド実行をトリガする。いくつかの実施形態において、実行は、コマンドシーケンスにおける「ゴー(go)」又は「キック(kick)」コマンドを介してトリガされる。一実施形態において、コマンド実行は、グラフィックスパイプラインを通じてコマンドシーケンスをフラッシュするために、パイプライン同期コマンドを用いてトリガされる。3Dパイプラインは、3Dプリミティブに対するジオメトリ処理を実行する。オペレーションが完了すると、結果として生じるジオメトリックオブジェクトがラスタライズされ、ピクセルエンジンは、結果として生じるピクセルに色をつける。ピクセルシェーディング及びピクセルバックエンドオペレーションを制御する追加のコマンドがこれらのオペレーションのために含まれてもよい。
いくつかの実施形態において、グラフィックスプロセッサコマンドシーケンス910は、メディアオペレーションを実行する場合、メディアパイプライン924のパスに従う。一般的には、メディアパイプライン924に対するプログラミングについての特定の使用及び方式は、実行されるメディア又は計算操作に依存する。特定のメディアデコードオペレーションは、メディアデコード中に、メディアパイプラインにオフロードされてよい。いくつかの実施形態において、メディアパイプラインはバイパスされることもでき、メディアデコードは、1又は複数の汎用プロセッシングコアにより提供されるリソースを全体的に又は部分的に用いて実行され得る。一実施形態において、メディアパイプラインはまた、汎用グラフィックスプロセッサユニット(GPGPU)オペレーション用の要素を含み、グラフィックスプロセッサは、グラフィックスプリミティブのレンダリングに明示的には関連していない計算シェーダプログラムを用いてSIMDベクトル演算を実行するために用いられる。
いくつかの実施形態において、メディアパイプライン924は、3Dパイプライン922と同様の方式で構成される。メディアパイプライン状態940を構成するコマンドのセットは、メディアオブジェクトコマンド942の前にコマンドキューへとディスパッチされる又は置かれる。いくつかの実施形態において、メディアパイプライン状態940に対するコマンドは、メディアオブジェクトを処理するために用いられるメディアパイプライン要素を構成するデータを含む。これは、メディアパイプライン内のビデオデコード及びビデオエンコードロジックを構成するデータ、例えば、エンコード又はデコードフォーマットを含む。いくつかの実施形態において、メディアパイプライン状態940に対するコマンドはまた、状態設定のバッチを含む「間接」状態要素に対する1又は複数のポインタの使用をサポートする。
いくつかの実施形態において、メディアオブジェクトコマンド942は、メディアパイプラインによる処理のためのメディアオブジェクトにポインタを供給する。メディアオブジェクトは、処理されるビデオデータを含むメモリバッファを含む。いくつかの実施形態において、すべてのメディアパイプライン状態は、メディアオブジェクトコマンド942を発行する前に有効でなければならない。パイプライン状態が構成され、かつ、メディアオブジェクトコマンド942がキューイングされると、メディアパイプライン924は、実行コマンド944又は同等の実行イベント(例えば、レジスタ書き込み)を介してトリガされる。メディアパイプライン924からの出力は、次に、3Dパイプライン922又はメディアパイプライン924により提供されるオペレーションによる事後処理されてよい。いくつかの実施形態において、GPGPUオペレーションは、メディアオペレーションと同様の方式で構成され、実行される。
グラフィックスソフトウェアアーキテクチャ
図10は、いくつかの実施形態に係るデータ処理システム1000のための例示的なグラフィックスソフトウェアアーキテクチャを示す。いくつかの実施形態において、ソフトウェアアーキテクチャは、3Dグラフィックスアプリケーション1010、オペレーティングシステム1020及び少なくとも1つのプロセッサ1030を含む。いくつかの実施形態において、プロセッサ1030は、グラフィックスプロセッサ1032及び1又は複数の汎用プロセッサコア1034を含む。グラフィックスアプリケーション1010及びオペレーティングシステム1020はそれぞれ、データ処理システムのシステムメモリ1050において実行する。
いくつかの実施形態において、3Dグラフィックスアプリケーション1010は、シェーダ命令1012を含む1又は複数のシェーダプログラムを含む。シェーダ言語命令は、上位レベルシェーダ言語、例えば、上位レベルシェーダ言語(HLSL)又はOpenGLシェーダ言語(GLSL)におけるものであってよい。アプリケーションはまた、汎用プロセッサコア1034による実行に適したマシン語における実行可能命令1014を含む。アプリケーションはまた、頂点データにより定義されるグラフィックスオブジェクト1016を含む。
いくつかの実施形態において、オペレーティングシステム1020は、マイクロソフトコーポレーションのマイクロソフト(登録商標)Windows(登録商標)オペレーティングシステム、プロプライエタリUNIX(登録商標)様式のオペレーティングシステム、又は、Linux(登録商標)カーネルの変形例を用いたオープンソースUNIX(登録商標)様式のオペレーティングシステムである。オペレーティングシステム1020は、Direct3D API、OpenGL API又はVulkan APIなどのグラフィックスAPI1022をサポートすることができる。Direct3D APIが用いられる場合、オペレーティングシステム1020は、フロントエンドシェーダコンパイラ1024を用いて、HLSLにおける任意のシェーダ命令1012を下位レベルのシェーダ言語へとコンパイルする。コンパイルは、ジャストインタイム(JIT)コンパイルであってよい、又は、アプリケーションは、シェーダプリコンパイルを実行できる。いくつかの実施形態において、上位レベルシェーダは、3Dグラフィックスアプリケーション1010のコンパイル中に下位レベルシェーダへとコンパイルされる。いくつかの実施形態において、シェーダ命令1012は、Vulkan APIにより用いられる標準ポータブル中間表現(SPIR)のバージョンなどの、中間フォームで提供される。
いくつかの実施形態において、ユーザモードグラフィックスドライバ1026は、シェーダ命令1012をハードウェア固有の表現へと変換するバックエンドシェーダコンパイラ1027を含む。OpenGL APIが用いられる場合、GLSL高水準言語におけるシェーダ命令1012は、コンパイルのためにユーザモードグラフィックスドライバ1026に渡される。いくつかの実施形態において、ユーザモードグラフィックスドライバ1026は、オペレーティングシステムカーネルモード機能1028を用いて、カーネルモードグラフィックスドライバ1029と通信する。いくつかの実施形態において、カーネルモードグラフィックスドライバ1029は、グラフィックスプロセッサ1032と通信してコマンド及び命令をディスパッチする。
IPコア実装
少なくとも1つの実施形態の1又は複数の態様は、プロセッサなどの集積回路内のロジックを表す及び/又は定義する機械可読媒体に格納される代表的なコードにより実装され得る。例えば、機械可読媒体は、プロセッサ内の様々なロジックを表す命令を含んでよい。マシンにより読み出される場合、命令は、マシンに、本明細書において説明される技術を実行するロジックを組み立てさせる。「IPコア」として知られるそのような表現は、集積回路の構造を説明するハードウェアモデルとして有形の機械可読媒体に格納され得る集積回路用のロジックの再利用可能なユニットである。ハードウェアモデルは、集積回路を製造する製造機械上に当該ハードウェアモデルを搭載する様々な顧客又は製造施設に供給されてよい。集積回路は、本明細書において説明される実施形態のうちのいずれかと関連して説明されたオペレーションを回路が実行するように製造されてよい。
図11Aは、実施形態に係るオペレーションを実行する集積回路を製造するために用いられ得るIPコア開発システム1100を示すブロック図である。IPコア開発システム1100は、より大きな設計へと組み込まれ得るモジュール式の再利用可能な設計をもたらすために用いられてよい、又は、集積回路(例えば、SoC集積回路)全体を構築するために用いられてよい。設計施設1130は、高水準プログラミング言語(例えば、C/C++)におけるIPコア設計のソフトウェアシミュレーション1110を生成できる。ソフトウェアシミュレーション1110は、シミュレーションモデル1112を用いてIPコアの挙動を設計、試験及び検証するために用いられ得る。シミュレーションモデル1112は、機能、挙動及び/又はタイミングシミュレーションを含んでよい。次に、レジスタ転送レベル(RTL)設計1115は、シミュレーションモデル1112から作成又は合成され得る。RTL設計1115は、ハードウェアレジスタ間のデジタル信号のフローをモデル化する集積回路の挙動を抽出し、モデル化されたデジタル信号を用いて実行される関連するロジックを含む。RTL設計1115に加えて、論理レベル又はトランジスタレベルにおける下位レベルの設計が作成、設計又は合成されてもよい。したがって、初期の設計及びシミュレーションの特定の詳細が変化し得る。
RTL設計1115又はこれと同等のものは、ハードウェアモデル1120へと設計施設によりさらに合成されてよく、ハードウェアモデル1120は、ハードウェア記述言語(HDL)又は物理的な設計データのいくつか他の表現であってよい。HDLは、IPコア設計を検証するためにさらにシミュレーション又は試験されてよい。IPコア設計は、不揮発性メモリ1140(例えば、ハードディスク、フラッシュメモリ又は任意の不揮発性記憶媒体)を用いて、サードパーティの製造施設1165への配送のために格納され得る。代替的に、IPコア設計は、有線接続1150又は無線接続1160を介して(例えば、インターネットを介して)伝送され得る。製造施設1165は、次に、IPコア設計に少なくとも部分的に基づいて、集積回路を製造し得る。製造された集積回路は、本明細書で説明される少なくとも1つの実施形態に従ってオペレーションを実行するように構成され得る。
図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の表面に結合されてよい。
いくつかの実施形態において、ロジック1172、1174のユニットは、ロジック1172、1174間で電気信号をルーティングするように構成されるブリッジ1182と電気的に結合される。ブリッジ1182は、電気信号のルーティングを提供する高密度な相互接続構造であってよい。ブリッジ1182は、ガラス又は適切な半導体材料から構成されるブリッジ基板を含んでよい。電気的なルーティング機構は、ロジック1172、1174間のチップ間接続を提供するブリッジ基板上に形成され得る。
ロジック1172、1174の2つのユニット及びブリッジ1182が示されているが、本明細書において説明される実施形態では、より多い又はより少ない数の論理ユニットを1又は複数のダイ上に含んでよい。単一のダイ上にロジックが含まれる場合にブリッジ1182が除外されてよいので、1又は複数のダイは、ゼロ又はそれより多いブリッジにより接続されてよい。代替的に、ロジックの複数のダイ又はユニットは、1又は複数のブリッジにより接続され得る。さらに、複数の論理ユニット、ダイ及びブリッジは、3次元構成を含む他の可能な構成と一緒に接続されることができる。
チップ集積回路上の例示的なシステム
図12~図14Bは、本明細書において説明される様々な実施形態に係る、1又は複数のIPコアを用いて製造され得る例示的な集積回路及び関連するグラフィックスプロセッサを示す。図示されるものに加えて、他のロジック及び回路が含まれてよく、これらは、追加のグラフィックスプロセッサ/コア、周辺機器インタフェースコントローラ又は汎用プロセッサコアを含む。
図12は、実施形態に係る、1又は複数のIPコアを用いて製造され得るチップ集積回路1200上の例示的なシステムを示すブロック図である。例示的な集積回路1200は、1又は複数のアプリケーションプロセッサ1205(例えば、CPU)、少なくとも1つのグラフィックスプロセッサ1210を含み、イメージプロセッサ1215及び/又はビデオプロセッサ1220をさらに含んでよく、これらのいずれかは、同じ又は複数の異なる設計施設からのモジュール式のIPコアであってよい。集積回路1200は、USBコントローラ1225、UARTコントローラ1230、SPI/SDIOコントローラ1235及びI2S/I2Cコントローラ1240を含む周辺機器又はバスロジックを含む。さらに、集積回路は、高精細度マルチメディアインタフェース(HDMI(登録商標))コントローラ1250及びモバイル業界プロセッサインタフェース(MIPI)ディスプレイインタフェース1255のうちの1又は複数に結合されるディスプレイデバイス1245を含み得る。ストレージは、フラッシュメモリ及びフラッシュメモリコントローラを含むフラッシュメモリサブシステム1260により提供されてよい。メモリインタフェースは、SDRAM又はSRAMメモリデバイスへのアクセスために、メモリコントローラ1265を介して提供されてよい。いくつかの集積回路は、埋め込み型のセキュリティエンジン1270をさらに含む。
図13A~図13Bは、本明細書において説明される実施形態に係る、SoC内での使用のための例示的なグラフィックスプロセッサを示すブロック図である。図13Aは、実施形態に係る、1又は複数のIPコアを用いて製造され得るチップ集積回路上のシステムの例示的なグラフィックスプロセッサ1310を示す。図13Bは、実施形態に係る、1又は複数のIPコアを用いて製造され得るチップ集積回路上のシステムのさらなる例示的なグラフィックスプロセッサ1340を示す。図13Aのグラフィックスプロセッサ1310は、低電力のグラフィックスプロセッサコアの例である。図13Bのグラフィックスプロセッサ1340は、より高性能なグラフィックスプロセッサコアの例である。グラフィックスプロセッサ1310、1340のそれぞれは、図12のグラフィックスプロセッサ1210の変形例であり得る。
図13Aに示されるように、グラフィックスプロセッサ1310は、頂点プロセッサ1305及び1又は複数のフラグメントプロセッサ1315A-1315N(例えば、1315A、1315B、1315C、1315Dから1315N-1及び1315N)を含む。グラフィックスプロセッサ1310は、別個のロジックを介して異なるシェーダプログラムを実行でき、頂点プロセッサ1305は、頂点シェーダプログラムに対するオペレーションを実行するために最適化され、一方、1又は複数のフラグメントプロセッサ1315A-1315Nは、フラグメント又はピクセルシェーダプログラムに対するフラグメント(例えば、ピクセル)シェーディングオペレーションを実行する。頂点プロセッサ1305は、3Dグラフィックスパイプラインの頂点処理ステージを実行し、プリミティブ及び頂点データを生成する。フラグメントプロセッサ1315A-1315Nは、頂点プロセッサ1305により生成されたプリミティブ及び頂点データを用いて、ディスプレイデバイス上に表示されるフレームバッファを生成する。一実施形態において、フラグメントプロセッサ1315A-1315Nは、OpenGL APIに提供されるようなフラグメントシェーダプログラムを実行するために最適化され、直接3D APIにおいて提供されるようなピクセルシェーダプログラムと同様のオペレーションを実行するために用いられてよい。
グラフィックスプロセッサ1310は、1又は複数のメモリ管理ユニット(MMU)1320A-1320B、キャッシュ1325A-1325B及び回路相互接続1330A-1330Bをさらに含む。1又は複数のMMU1320A-1320Bは、頂点プロセッサ1305及び/又はフラグメントプロセッサ1315A-1315Nを含むグラフィックスプロセッサ1310に対する仮想-物理アドレスマッピングを提供し、1又は複数のキャシュ1325A-1325Bに格納される頂点又は画像/テクスチャデータに加えて、メモリに格納される参照頂点又は画像/テクスチャデータであってよい。一実施形態において、1又は複数のMMU1320A-1320Bは、システム内の他のMMUと同期されてよく、図12の1又は複数のアプリケーションプロセッサ1205、イメージプロセッサ1215及び/又はビデオプロセッサ1220に関連付けられる1又は複数のMMUを含み、各プロセッサ1205-1220は、共有又は統合された仮想メモリシステムに加わることができる。1又は複数の回路相互接続1330A-1330Bは、実施形態に従って、SoCの内部バスを介して又は直接接続を介してのいずれか一方で、グラフィックスプロセッサ1310がSoC内の他のIPコアとインタフェース接続することを可能にする。
図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は、シングルコア又はタイプ又はコアがすべてのタイプのプログラマブルシェーダコードを実行できる統合されたシェーダコアアーキテクチャを提供し、統合されたシェーダコアアーキテクチャは、頂点シェーダ、フラグメントシェーダ及び/又はコンピュートシェーダを実装するシェーダプログラムコードを含む。提示する正確な数のシェーダコアは、実施形態及び実装間で変化し得る。さらに、グラフィックスプロセッサ1340は、コア間タスクマネージャ1345を含み、コア間タスクマネージャ1345は、1又は複数のシェーダコア1355A-1355Nに実行スレッドをディスパッチするスレッドディスパッチャ、及び、タイルベースのレンダリングに対するタイル化オペレーションをアクセラレートするタイル化ユニット1358としての機能を果たし、タイル化ユニット1358では、例えば、シーン内の局所空間のコヒーレンスを活用するために、又は、内部キャッシュの利用を最適化するために、シーンに対するレンダリングオペレーションが画像空間において細分化される。
図14A~図14Bは、本明細書において説明される実施形態に係るさらなる例示的なグラフィックスプロセッサロジックを示す。図14Aは、図12のグラフィックスプロセッサ1210に含まれ得、及び、図13Bにあるような統合されたシェーダコア1355A-1355Nであり得るグラフィックスコア1400を示す。図14Bは、追加の高並列汎用グラフィックス処理ユニット1430を示し、これは、マルチチップモジュール上の展開に適した高並列汎用グラフィックス処理適合ユニットである。
図14Aに示されるように、グラフィックスコア1400は、共有命令キャッシュ1402、テクスチャユニット1418、及び、グラフィックスコア1400内の実行リソースに共通するキャッシュ/共有メモリ1420を含む。グラフィックスコア1400は、各コアに対する複数のスライス1401A-1401N又はパーティショニングを含み得、グラフィックスプロセッサは、グラフィックスコア1400の複数のインスタンスを含み得る。スライス1401A-1401Nは、ローカル命令キャッシュ1404A-1404Nと、スレッドスケジューラ1406A-1406Nと、スレッドディスパッチャ1408A-1408Nと、レジスタ1410A-1440Nのセットとを含むサポートロジックを含み得る。論理演算を実行するために、スライス1401A-1401Nは、追加的な機能ユニット(AFU1412A-1412N)、浮動小数点ユニット(FPU1414A-1414N)、整数算術論理ユニット(ALU1416-1416N)、アドレス計算ユニット(ACU1413A-1413N)、倍精度浮動小数点ユニット(DPFPU1415A-1415N)及び行列処理ユニット(MPU1417A-1417N)のセットを含み得る。
計算ユニットのいくつかは、特定の精度で動作する。例えば、FPU1414A-1414Nは、単精度(32ビット)及び半精度(16ビット)浮動小数点演算を実行でき、一方、DPFPU1415A-1415Nは、倍精度(64ビット)浮動小数点演算を実行する。ALU1416A-1416Nは、8ビット、16ビット及び32ビットの精度で、可変精度の整数演算を実行でき、混合精度の演算用に構成され得る。MPU1417A-1417Nは、混合精度の行列演算用に構成されることもでき、半精度の浮動小数点及び8ビット整数演算を含む。MPU1417-1417Nは、機械学習アプリケーションフレームワークをアクセラレートする様々な行列演算を実行でき、アクセラレートされる汎用行列-行列乗算(GEMM)に対するサポートを可能にすることを含む。AFU1412A-1412Nは、浮動小数点又は整数ユニットによりサポートされていない追加の論理演算を実行でき、追加の論理演算は、三角関数演算(例えば、サイン、コサインなど)を含む。
図14Bに示されるように、汎用処理ユニット(GPGPU)1430は、グラフィックス処理ユニットのアレイにより実行される高並列計算操作を可能にするように構成され得る。さらに、GPGPU1430は、特に、ディープニューラルネットワークに対する訓練スピードを向上させるマルチGPUクラスタを作成するGPGPUの他の例に直接関連し得る。GPGPU1430は、ホストプロセッサとの接続を可能にするホストインタフェース1432を含む。一実施形態において、ホストインタフェース1432は、PCI Expressインタフェースである。しかしながら、ホストインタフェースはまた、ベンダ固有の通信インタフェース又は通信ファブリックであり得る。GPGPU1430は、ホストプロセッサからコマンドを受信し、グローバルスケジューラ1434を用いて、これらのコマンドに関連付けられる実行スレッドをコンピュートクラスタ1436A-1436Hのセットに分散させる。コンピュートクラスタ1436A-1436Hは、キャッシュメモリ1438を共有する。キャッシュメモリ1438は、コンピュートクラスタ1436A-1436H内のキャッシュメモリ用の高レベルキャッシュとしての機能を果たし得る。
GPGPU1430は、メモリコントローラ1442A-1442Bのセットを介してコンピュートクラスタ1436A-1436Hと結合されるメモリ14434A-14434Bを含む。様々な実施形態において、メモリ1434A-1434Bは、ダイナミックランダムアクセスメモリ(DRAM)、又は、グラフィックスダブルデータレート(GDDR)メモリを含むシンクロナスグラフィックスランダムアクセスメモリ(SGRAM)などのグラフィックスランダムアクセスメモリを含む様々なタイプのメモリデバイスを含み得る。
一実施形態において、コンピュートクラスタ1436A-1436Hはそれぞれ、グラフィックスコアのセット、例えば、図14Aのグラフィックスコア1400を含み、これは、機械学習計算に適したものを含む精度の範囲で計算操作を実行できる複数のタイプの整数及び浮動小数点論理ユニットを含み得る。例えば、及び、一実施形態において、コンピュートクラスタ1436A-1436Hのそれぞれにおける浮動小数点ユニットの少なくともあるサブセットについては、16ビット又は32ビット浮動小数点演算を実行するように構成され得、一方、浮動小数点ユニットの異なるサブセットについては、64ビット浮動小数点演算を実行するように構成され得る。
GPGPU1430の複数のインスタンスは、コンピュートクラスタとして動作するように構成され得る。同期及びデータ交換のためにコンピュートクラスタにより用いられる通信メカニズムは、実施形態にわたって変化する。一実施形態において、GPGPU1430の複数のインスタンスは、ホストインタフェース1432を介して通信する。一実施形態において、GPGPU1430は、GPGPUの他のインスタンスへの直接接続を有効にするGPUリンク1440とGPGPU1430を結合するI/Oハブ1439を含む。一実施形態において、GPUリンク1440は、GPGPU1430の複数のインスタンス間での通信及び同期を有効にする専用のGPU間ブリッジに結合される。一実施形態において、GPUリンク1440は、他のGPGPU又は並列プロセッサに対してデータを送受信する高速相互接続と結合する。一実施形態において、GPGPU1430の複数のインスタンスは、別個のデータ処理システム内にあり、ホストインタフェース1432を介してアクセス可能なネットワークデバイスを介して通信する。一実施形態において、GPUリンク1440は、ホストインタフェース1432に加えて又は代替として、ホストプロセッサへの接続を可能にするように構成され得る。
一方、GPGPU1430の示される構成は、ニューラルネットワークを訓練するように構成され得、一実施形態では、高性能又は低電力推論プラットフォーム内での展開のために構成され得るGPGPU1430の代替構成を提供する。推論構成において、GPGPU1430は、訓練構成と比較して少ない数のコンピュートクラスタ1436A-1436Hを含む。さらに、メモリ1434A-1434Bに関連付けられるメモリ技術は、高度な帯域幅メモリ技術が訓練構成に専念する場合、推論構成と訓練構成との間で異なってよい。一実施形態において、GPGPU1430の推論構成は、特定の命令を推論することをサポートすることができる。例えば、推論構成は、1又は複数の8ビット整数ドット積命令に対するサポートを提供でき、これは、展開されるニューラルネットワークに対する推論オペレーション中に一般的に用いられる。
ランタイム中に機械学習エンジンを訓練するための装置及び方法
上記で言及したように、レイトレーシングは、物理ベースのレンダリングを通じて光輸送がシミュレーションされるグラフィックス処理技術である。レイトレーシングにおける重要な演算のうちの1つは、バウンディングボリューム階層(BVH)におけるノードのトラバーサル及びインターセクション試験を要求する可視性クエリを処理することである。
レイ及びパストレーシングベースの技術は、各ピクセルを通じてレイ及びパスをトレーシングすることにより、及び、ランダムサンプリングを用いて、高度なエフェクト、例えば、陰影、光沢度、間接照明などを算出することにより、画像を算出する。わずかなサンプルのみを用いることは、速いがノイズのある画像を生成することになり、一方、多くのサンプルを用いることは、高品質の画像を生成するが、費用が高すぎる。
過去数年において、リアルタイムの利用のためのレイ/パストレーシングに対する飛躍的な解決方法は、「ノイズ除去」-画像処理技術を用いて、ノイズのある低いサンプルカウントの入力から高品質、フィルタ/ノイズ除去画像を生成する処理-の形式で出現する。最も有効なノイズ除去技術は、ノイズのある画像がより多くのサンプルで算出されている場合、ノイズのある画像がどのようなものかを畳み込みニューラルネットワーク(CNN)が学習するディープラーニング/機械学習に依存する。これは、低いサンプルカウントの入力及びグラウンドトゥルースを用いて訓練データを生成することにより、同じシーン及び視点に対して完全に収束した解決方法により、及び、CNNを訓練して、問題になっているピクセルの周りのノイズのあるピクセル入力の近隣から収束したピクセルを予測することにより機能する。
完璧ではないが、このAIベースのノイズ除去技術は、驚くべき効果を証明している。しかしながら、ネットワークが間違った結果を予測するかもしれないので、好適な訓練データが要求される点に注意が必要である。例えば、アニメ映画スタジオが陸上のシーンに関して、過去の映画のノイズ除去CNNを訓練しており、次に、水上に関する新たな映画セットからフレームをノイズ除去するために、上記の訓練されたCNNを使用することが試みられる場合、ノイズ除去オペレーションが準最適に(sub-optimally)実行する。
この問題に対処するために、本発明の一実施形態では、レンダリングしつつ学習データを動的に収集し、現在実行中のデータに基づいて、CNNなどの機械学習エンジンを継続的に訓練することで、目下のタスクに対して機械学習エンジンを継続的に改善する。本実施形態では、ランタイムの前に訓練フェーズをさらに実行してよいが、ランタイム中に必要に応じて機械学習の重みを調整し続ける。さらに、本実施形態では、フレーム毎又はN個のフレーム毎に学習データの生成を画像のサブ領域に制限することによる訓練に要求される参照データを計算する費用が高くなることを回避する。特に、フレームのノイズのある入力は、現在のネットワークで完全なフレームをノイズ除去するために生成される。さらに、以下に説明されるように、参照ピクセルの小さな領域が継続的な訓練のために生成されて用いられる。
既存のノイズ除去の実施は、訓練フェーズ及びランタイムフェーズにおいて動作する。訓練フェーズ中に、ネットワークトポロジは、ピクセルカラー、デプス、標準、標準偏差、プリミティブID及びアルベドなどの様々なピクセル毎のデータチャネルを用いてN×Nピクセルの領域をどれが受信するかが定義され、最終的なピクセルカラーを生成する。「代表的な」訓練データのセットが、1フレーム相当の低いサンプルカウントの入力を用いて、かつ、非常に高いサンプルカウントで算出される「所望の」ピクセルカラーを参照して生成される。これらの入力に対してネットワークが訓練されることで、ネットワークの「理想的な」重みのセットを生成する。これらの実装において、参照データは、所望の結果に対するネットワークの出力に最も密接にマッチするネットワークの重みを訓練するために用いられる。
ランタイム時に、所与の予め算出された理想的なネットワークの重みがロードされ、ネットワークが初期化される。各フレームについて、低いサンプルカウントの画像のノイズ除去入力(つまり、訓練のために用いられものと同じ)が生成される。各ピクセルについて、所与の近隣のピクセルの入力が「ノイズ除去」ピクセルカラーを予測するためにネットワークを通じて実行されることで、ノイズ除去されるフレームを生成する。
図15は、初期訓練の実施についての一実施形態を示す。機械学習エンジン1500(例えば、CNN)は、ピクセルカラー、デプス、標準、標準偏差、プリミティブID及びアルベドなどの様々なピクセル毎のデータチャネルを用いて、N×Nピクセルの領域を高いサンプルカウントの画像データ1502として受信し、最終的なピクセルカラーを生成する。代表的な訓練データは、1フレーム相当の低いサンプルカウントの入力1501を用いて生成される。これらの入力に対してネットワークが訓練され、機械学習エンジン1500は、ランタイム時に低いサンプルカウントの画像をノイズ除去するためにその後に用いる「理想的な」重み1505のセットを生成する。
上記の技術を向上させるために、本発明の一実施形態は、ノイズ除去フェーズを増強して、フレーム毎又はフレームのサブセット毎(例えば、N個のフレーム毎、N=2、3、4、10、25など)に新たな訓練データを生成する。特に、図16に示されるように、本実施形態では、高いサンプルカウントで別個の高いサンプルカウントのバッファ1604へとレンダリングされる「新たな参照領域」1602とここでは称される各フレーム内の1又は複数の領域を選択する。低いサンプルカウントのバッファ1603は、(新たな参照領域1602に対応する低サンプル領域1604を含む)低いサンプルカウントの入力フレーム1601を格納する。
一実施形態において、新たな参照領域1602の位置はランダムに選択される。代替的に、新たな参照領域1602の位置は、(例えば、フレーム間の領域の予め定義された動きを用いて、フレームの中央における特定の領域に制限されるなど)それぞれの新たなフレームに対して予め規定された方式で調整されてよい。
新たな参照領域がどのように選択されるかにかかわらず、それは、ノイズ除去に用いられる訓練された重み1605を継続的に改善及び更新するために機械学習エンジン1600により用いられる。特に、各新たな参照領域1602からの参照ピクセルのカラー及び対応する低いサンプルカウントの領域1607からのノイズのある参照ピクセルの入力がレンダリングされる。次に、高いサンプルカウントの参照領域1602及び対応する低いサンプルカウントの領域1607を用いて、補足的な訓練が機械学習エンジン1600上で実行される。初期訓練とは対照的に、この訓練は、それぞれの新たな参照領域1602に対してランタイム中継続的に実行され、これにより、機械学習エンジン1600が正確に訓練されていることを保証する。例えば、ピクセル毎のデータチャネル(例えば、ピクセルカラー、デプス、標準、標準偏差など)が評価されてよく、機械学習エンジン1600は、それを用いて、訓練された重み1605に対する調整を行う。訓練の場合(図15)にあるように、機械学習エンジン1600は、低いサンプルカウントの入力フレーム1601からノイズを除去するために理想的な重み1605のセットに向けて訓練して、ノイズ除去されるフレーム1620を生成する。しかしながら、本実施形態では、訓練された重み1605は、新たなタイプの低いサンプルカウントの入力フレーム1601についての新たな画像特性に基づいて継続的に更新される。
一実施形態において、機械学習エンジン1600により実行される再訓練オペレーションは、グラフィックスプロセッサユニット(GPU)又はホストプロセッサ上のバックグラウンドプロセスにおいて同時に実行される。ドライバコンポーネント及び/又はGPUハードウェアコンポーネントとして実装され得るレンダリングループは、キューに置く新たな訓練データ(例えば、新たな参照領域1602の形式で)を継続的に生成する。GPU又はホストプロセッサ上で実行されるバックグラウンド訓練プロセスは、このキューから新たな訓練データを継続的に読み込んで、機械学習エンジン1600を再訓練して、適切な間隔で新たな重み1605を用いてそれを更新する。
図17は、バックグラウンド訓練プロセス1700がホストCPU1710により実装されるそのような実装の例を示す。特に、本実施形態において、バックグラウンド訓練プロセス1700は、高いサンプルカウントの新たな参照領域1602及び対応する低サンプル領域1604を用いて、訓練された重み1605を継続的に更新することで、機械学習エンジン1600を更新する。
図18Aに示されるように、マルチプレイヤーオンラインゲームなどにおける一実施例では、異なるホストマシン1820-1822は、バックグラウンド訓練プロセス1700A-Cがサーバ1800(例えば、ゲームサーバなど)に伝送する参照領域を個々に生成する。次に、サーバ1800は、ホスト1821-1822のそれぞれから受信した新たな参照領域を用いて機械学習エンジン1810に対する訓練を実行し、前に説明したように重み1805を更新する。重み1605A-Cを格納するホストマシン1820にこれらの重み1805を伝送することで、個々の機械学習エンジン(図示せず)をそれぞれ更新する。サーバ1800は、短期間に多数の参照領域が提供され得るので、ユーザにより実行される任意の所与のアプリケーション(例えば、オンラインゲーム)に関する重みを効果的かつ正確に更新できる。
図18Bに示されるように、異なるホストマシンは、(例えば、前に説明したような訓練/参照領域1602に基づいて)新たに訓練された重みを生成し、新たに訓練された重みをサーバ1800(例えば、ゲームサーバなど)と共有してよい、又は、代替的に、ピアツーピア共有プロトコルを使用してよい。サーバ上の機械学習管理コンポーネント1811は、ホストマシンのそれぞれから受信した新たな重みを用いて組み合わせられた重み1805のセットを生成する。組み合わせられた重み1805は、例えば、本明細書において説明されるように、新たな重みから生成される平均であり、継続的に更新され得る。一度生成されると、次に、本明細書において説明されたような組み合わせられた重みを使用してノイズ除去オペレーションを実行し得るホストマシン1820-1821のそれぞれに組み合わせられた重み1605A-Cのコピーが伝送されて格納され得る。
一実施形態において、この準閉ループ更新メカニズムは、ハードウェア製造業者により用いられ得る。例えば、参照ネットワークは、ハードウェア製造業者により分配されるドライバの一部として含まれてよい。ドライバは、本明細書において説明される技術を用いて新たな訓練データを生成し、これらをハードウェア製造業者に戻して継続的に提示するので、ハードウェア製造業者は、この情報を用いて次のドライバの更新のためにその機械学習実装を改善し続ける。
一実施例において(例えば、レンダリングファーム上のバッチ映画レンダリングにおいて)、レンダラは、経時的に複数のレンダリングノードからこのデータを集約する(そのスタジオのレンダリングファーム内の)専用のサーバ又はデータベースに新たに生成された訓練領域を伝送する。別個のマシン上の別個の処理は、スタジオ専用のノイズ除去ネットワークを継続的に改善し、新たなレンダリングジョブは、最新の訓練ネットワークを常に使用する。
本発明の一実施形態に係る方法が図19に示される。方法は、本明細書において説明されるアーキテクチャ上で実施され得るが、任意の特定のシステム又はグラフィックス処理アーキテクチャに限定されることはない。
1901において、初期訓練フェーズの一部として、低いサンプルカウントの画像データ及び高いサンプルカウントの画像データが複数の画像フレームに対して生成される。1902において、機械学習ノイズ除去エンジンは、高い/低いサンプルカウントの画像データを用いて訓練される。一実施形態において、例えば、ピクセルの特徴に関連付けられる畳み込みニューラルネットワークの重みのセットは、訓練に従って更新され得る。しかしながら、任意の機械学習アーキテクチャが用いられてよい。
1903において、ランタイム時に、高いサンプルカウントを有する少なくとも1つの参照領域と共に低いサンプルカウントの画像フレームが生成される。1904において、機械学習エンジンの訓練を継続的に改善するために、高いサンプルカウントの参照領域が機械学習エンジン及び/又は別個の訓練ロジック(例えば、バックグラウンド訓練モジュール1700)により用いられる。例えば、一実施形態において、どのようにノイズ除去を最も効果的に実行するかを機械学習エンジン1904に教え続けるために、高いサンプルカウントの参照領域が低いサンプルカウントの画像の対応する部分との組み合わせで用いられる。CNN実装において、例えば、これは、CNNに関連付けられる重みを更新することを含み得る。
上述した複数の様々な実施形態は、機械学習エンジンへのフィードバックループが構成される方式、訓練データを生成するエンティティ、訓練データが訓練エンジンにフィードバックされる方式、及び、改善されたネットワークがレンダリングエンジンに提供される方法、などで実施されてよい。さらに、上述した上記の実施形態が単一の参照領域を用いて継続的な訓練を実行する一方、任意の数の参照領域が用いられてよい。さらに、前に言及したように、参照領域は、異なるサイズであってよく、異なる数の画像フレームに対して用いられてよく、異なる技術(例えば、ランダム、予め定められたパターンに従うなど)を用いて画像フレーム内の異なる位置に配置されてよい。
さらに、畳み込みニューラルネットワーク(CNN)が、機械学習エンジン1600の一例として説明されているが、本発明の基礎となる原理は、新たな訓練データを用いて、その結果を継続的に改善することが可能な機械学習エンジンの任意の形式を用いて実装され得る。例示の目的ではあるが、限定的ではなく、他の機械学習実装は、数例を挙げると、データ処理のグループ方法(Group Method of Data Handling、GMDH)、長・短期記憶、ディープリザーバ計算、ディープビリーフネットワーク、テンソル深層スタックネットワーク及び深層予測符号化ネットワーク(deep predictive coding networks)を含む。
効率的な分散型ノイズ除去のための装置及び方法
上述したように、ノイズ除去は、滑らかでノイズのない画像でリアルタイムレイトレーシングするための重要な機能になってきている。レンダリングは、複数のデバイス上の分散型システムにわたって行われ得るが、今までのところ、既存のノイズ除去のフレームワークはすべて、単一のマシン上の単一のインスタンスに対して動作する。複数のデバイスにわたってレンダリングが行われる場合、それらは、画像のノイズ除去される部分を計算するためにアクセス可能なピクセルをすべてレンダリングすることができない可能性がある。
本発明の一実施形態は、人工知能(AI)及び非AIベースのノイズ除去技術の両方と連携する分散型ノイズ除去アルゴリズムを含む。画像の領域は、分散型レンダリングオペレーションからノードにわたって既に分散されている、又は、単一のフレームバッファから分裂及び分散される、のいずれか一方である。必要な場合に、十分なノイズ除去を計算するために必要とされる近隣領域のゴースト領域が近隣ノードから収集され、最終結果のタイルが最終的な画像に合成される。
分散型処理
図20は、複数のノード2021-2023がレンダリングを実行する本発明の一実施形態を示す。3つのノードのみが簡潔の目的で図示されているが、本発明の基礎となる原理は、ノードの任意の特定の数に限定されることはない。つまり、単一のノードが本発明の特定の実施形態を実施するために用いられてもよい。
ノード2021-2023がそれぞれ、画像の一部をレンダリングすることで、この例における領域2011-2013を結果的にもたらす。矩形の領域2011-2013が図20に示されているが、任意の形状の領域が用いられてよく、任意のデバイスが任意の数の領域を処理できる。十分に滑らかなノイズ除去オペレーションを実行するためにノードにより必要とされる領域は、ゴースト領域2011-2013と称される。言い換えれば、ゴースト領域2001-2003は、特定の品質レベルでノイズ除去を実行するのに必要とされるデータ全体を表す。品質レベルを下げることで、ゴースト領域のサイズ、ひいては、要求されるデータ量を低減させており、品質レベルを上げることで、要求されるゴースト領域及び対応するデータを増加させている。
一実施形態において、ノード2021などのノードが特定の品質レベルでその領域2011をノイズ除去するのに必要とされるゴースト領域2001の一部のローカルコピーを行う場合、ノードは、図示されるようにゴースト領域2001の一部を所有するノード2022などの1又は複数の「隣接」ノードから要求されるデータを取り込む。同様に、ノード2022が特定の品質レベルでその領域2012をノイズ除去するのに必要とされるゴースト領域2002の一部のローカルコピーを行う場合、ノード2022は、ノード2021から要求されるゴースト領域データ2032を取り込む。取り込みは、バス、相互接続、高速メモリファブリック、ネットワーク(例えば、高速イーサネット(登録商標))を介して実行されてよい、又は、複数のコア間のレンダリングワークを分散させることを可能にするマルチコアチップ(例えば、最も高い解像度又は時間変化のいずれか一方において大きな画像をレンダリングするために用いられる)内のオンチップ相互接続であってもよい。一実施形態において、各ノード2021-2023は、個々の実行ユニット、又は、グラフィックスプロセッサ内の実行ユニットの特定のセットを有する。
送信されるデータの具体的な量は、用いられるノイズ除去技術に依存する。さらに、ゴースト領域からのデータは、それぞれの各領域のノイズ除去を改善するために必要とされる任意のデータを含んでよい。一実施形態において、例えば、ゴースト領域データは、画像のカラー/波長、明度/アルファデータ及び/又は標準を含む。しかしながら、本発明の基礎となる原理は、ゴースト領域データの任意の特定のセットに限定されることはない。
一実施形態のさらなる詳細
より低速なネットワーク又は相互接続のために、このデータの圧縮は、既存の汎用ロスレス又は不可逆圧縮を用いて利用され得る。例では、zlib、gzip及びLempel-Ziv-Markovチェーンアルゴリズム(LZMA)を含むが、これらに限定されることはない。さらなるコンテンツ固有の圧縮は、フレーム間のレイヒット情報における差分が非常にまばらになり得るということに注目することにより用いられ、ノードが前フレームから収集した差分を既に有している場合、その差分に寄与するサンプルのみが送信される必要がある。これらは、これらのサンプルiを収集するノードに選択的にプッシュされ得る、又は、ノードiは、他のノードからサンプルを要求できる。一実施形態において、可逆圧縮は、特定のタイプのデータ及びプログラムコードに用いられ、一方、不可逆データは、他のタイプのデータに用いられる。
図21は、本発明の一実施形態に係る、ノード2021-2022間の相互作用についてのさらなる詳細を示す。各ノード2021-2022は、それぞれの画像領域2011-2012及びゴースト領域2001-2002をレンダリングするためのレイトレーシングレンダリング回路2081-2082を含む。デノイザ2100-2111は、領域2011-2012のそれぞれに対するノイズ除去オペレーションを実行し、各ノード2021-2022は、レンダリング及びノイズ除去に対して責任がある。デノイザ2021-2022は、例えば、ノイズ除去される領域2121-2122をそれぞれ生成するために、回路、ソフトウェア又はこれらの任意の組み合わせを有してよい。既に述べたように、ノイズ除去される領域を生成する場合、デノイザ2021-2022は、異なるノードにより所有されるゴースト領域内のデータに依存する必要があり得る(例えば、デノイザ2100は、ノード2022により所有されるゴースト領域2002からのデータを必要とし得る)。
したがって、一実施形態において、デノイザ2100-2111は、領域2011-2012及びゴースト領域2001-2002のそれぞれからのデータを用いてノイズ除去される領域2121-2122を生成し、領域2011-2012及びゴースト領域2001-2002の少なくとも一部は、別のノードから受信されてもよい。領域データマネージャ2101-2102は、本明細書において説明されるように、ゴースト領域2001-2002からのデータ転送を管理する。一実施形態において、コンプレッサ/デコンプレッサユニット2131-2132は、ノード2021-2022間で交換されるゴースト領域データの圧縮及び解凍をそれぞれ実行する。
例えば、ノード2021の領域データマネージャ2101は、ノード2022からの要求の際に、ゴースト領域2001からコンプレッサ/デコンプレッサ2131にデータを送信してよく、ノード2022に伝送される圧縮したデータ2106を生成するためにデータを圧縮することで、相互接続、ネットワーク、バス又は他のデータ通信リンク上の帯域幅を低減する。次に、ノード2022のコンプレッサ/デコンプレッサ2132は、圧縮したデータ2106を解凍し、デノイザ2111は、解凍されたゴーストデータを用いて領域2012からのデータのみで可能なものより高い品質でノイズ除去される領域2012を生成する。ノイズ除去される領域2122を生成する場合にデノイザ2111を利用可能にするために、領域データマネージャ2102は、解凍されたゴースト領域2001からのデータをキャッシュ、メモリ、レジスタファイル又は他のストレージに格納してよい。より高い品質でノイズ除去される領域2121を生成するために領域2011からのデータとの組み合わせにおいてデータを用いるノード2021のデノイザ2100にゴースト領域2002からデータを提供するために、同様のオペレーションのセットが実行されてよい。
GRABデータ又はレンダリング
ノード2021-2022などのデバイス間の接続が遅い(つまり、閾値レイテンシ及び/又は閾値帯域幅よりも低い)場合、他のデバイスから結果を要求するよりもむしろ、ゴースト領域を局所的にレンダリングするほうが速い可能性がある。これは、ゴースト領域サイズに関するネットワークトランザクション速度及び線形外挿レンダリング時間をトラッキングすることにより、ランタイム時に決定され得る。ゴースト領域全体をレンダリングするほうが速いような場合、複数のデバイスは、最後には画像の同じ部分をレンダリングしてよい。ゴースト領域のレンダリングされた部分の解像度は、ベース領域の分散及び決定されたブラーの度合いに基づいて調整されてよい。
負荷分散
一実施形態において、静的及び/又は動的な負荷分散スキームは、様々なノード2021-2023間の処理負荷を分散するために用いられ得る。動的な負荷分散について、ノイズ除去フィルタにより決定される分散は、両方ともノイズ除去に多くの時間を費やし得るが、画像の低分散かつ不鮮明な領域がわずかなサンプルしか必要としない場合には、シーンの特定の領域をレンダリングするのに用いられるサンプルの量をドライブしてよい。特定のノードに割り当てられる特定の領域は、前フレームからのデータに基づいて動的に調整されてよい、又は、すべてのデバイスが同じ作業量を有するようにそれらがレンダリングされるように、デバイスにわたって動的に通信される。
図22は、各ノード2021-2022のそれぞれで実行しているモニタリング2201-2202が性能測定基準データを収集する一実施形態を示し、性能測定基準データは、ネットワークインタフェース2211-2212を介してデータを伝送するのにかかった時間、(ゴースト領域データの有無に関わらず)領域をノイズ除去したときに費やした時間、及び、各領域/ゴースト領域をレンダリングするのにかかった時間を含むが、これらに限定されることはない。モニタリング2201-2202は、これらの性能測定基準をマネージャ又は負荷分散ノード2201に戻して報告し、各ノード2021-2022上の現在のワークロードを識別するためにデータを解析し、様々なノイズ除去領域2121-2122を処理するのにより効率的なモードを潜在的に決定する。次に、マネージャノード2201は、検出された負荷に従って、新たな領域に対する新たなワークロードをノード2021-2022に分散させる。例えば、マネージャノード2201は、負荷が大きくないこれらのノードに多くの作業を伝送してよい、及び/又は、過負荷であるこれらのノードから作業を再度割り当てよい。さらに、負荷分散ノード2201は、レンダリング及び/又はノイズ除去がノードのそれぞれにより実行される特定の方式(そのいくつかの例は上述されている)で調整するために、再構成コマンドを伝送してよい。
ゴースト領域の決定
一実施形態において、ゴースト領域2001-2002のサイズ及び形は、デノイザ2100-2111により実装されるノイズ除去アルゴリズムに基づいて決定される。次に、これらのサイズはそれぞれ、ノイズ除去されるサンプルについての検出された分散に基づいて動的に修正され得る。AIノイズ除去自体のために用いられる学習アルゴリズムは、適切な領域サイズを決定するために用いられてよい、又は、バイラテラルブラーなどのその他の場合には、予め定められたフィルタ幅がゴースト領域2001-2002のサイズを決定する。学習アルゴリズムを用いる実装において、機械学習エンジンは、マネージャノード2201上で実行されてよい、及び/又は、機械学習の一部が、個々のノード2021-2023のそれぞれで実行されてよい(例えば、図18A~図18B及び上記の関連する文章を参照)。
最終的な画像の収集
一実施形態において、最終的な画像は、ゴースト領域又は標準を必要とすることなくノード2021-2023のそれぞれからレンダリングされてノイズ除去される領域を収集することにより生成される。図22において、例えば、ノイズ除去される領域2121-2122は、最終的なノイズ除去された画像2290を生成する領域を組み合わせるマネージャノード2201の領域プロセッサ2280に伝送され、次に、ディスプレイ2290上に表示される。領域プロセッサ2280は、様々な2D合成技術を用いて領域を組み合わせてよい。別個のコンポーネントとして図示されているが、領域プロセッサ2280及びノイズ除去される画像2290は、ディスプレイ2290にとって不可欠であり得る。本実施形態において、様々なノード2021-2022は、ダイレクト送信技術を用いて、ノイズ除去される領域2121-2122を伝送してよく、領域データの様々な不可逆又は可逆圧縮を潜在的に用いてよい。
AIノイズ除去は、ゲームがクラウドへと移動するようであるように、依然として費用のかかる操作である。そのようなものとして、複数のノード2021-2022にわたるノイズ除去の分散処理は、より高いフレームレートを必要とする従来のゲーム又は仮想現実(VR)に対してリアルタイムのフレームレートを実現することが要求されるようになり得る。映画スタジオも、より迅速なノイズ除去に利用され得る大きなレンダリングファームにおいて頻繁にレンダリングすることになる。
分散型のレンダリング及びノイズ除去を実行するための方法の一実施形態が図23に示されている。方法は、上述したシステムアーキテクチャのコンテキスト内で実施され得るが、任意の特定のシステムアーキテクチャに限定されることはない。
2301において、グラフィックスワークは、レイトレーシングオペレーションを実行して画像フレームの領域をレンダリングする複数のノードにディスパッチされる。一実施形態において、各ノードは、オペレーションを実行するのに必要とされるデータをメモリ内に既に有していてよい。例えば、複数のノードのうちの2又はそれより多くが、共通のメモリを共有してよい、又は、ノードのローカルメモリは、レイトレーシングオペレーションの前から既に格納されているデータを有していてよい。代替的に又はさらに、特定のデータが各ノードに伝送されてよい。
2302において、特定のノイズ除去レベル(つまり、性能の許容レベル)に対して要求される「ゴースト領域」が決定される。ゴースト領域は、特定のノイズ除去レベルを実行するのに必要とされる任意のデータを有し、1又は複数の他のノードにより所有されるデータを含む。
2303において、ゴースト領域に関連するデータ(又は、これらの一部)がノード間で交換される。2304において、各ノードは、(例えば、交換したデータを用いて)その各領域に対してノイズ除去を実行し、2305において、結果が、最終的なノイズ除去された画像フレームを生成するために組み合わせられる。
一実施形態において、例えば、図22に示されるマネージャノード又は1次ノードは、ノードにワークをディスパッチし、次に、ノードにより実行されるワークを組み合わせて最終的な画像フレームを生成する。別の実施形態では、ノードが、データをやり取りして、最終的な画像フレームをレンダリング及びノイズ除去するピアであるピアベースのアーキテクチャが用いられる。
本明細書において説明されるノード(例えば、ノード2021-2023)は、高速ネットワークを介して相互接続されるグラフィックス処理コンピューティングシステムであってよい。代替的に、ノードは、高速メモリファブリックに結合される個々の処理要素であってよい。本実施形態において、ノードのすべては、共通の仮想メモリ空間及び/又は共通の物理メモリを共有してよい。別の実施形態では、ノードは、CPU及びGPUの組み合わせであってよい。例えば、上述したマネージャノード2201は、CPU及び/又はCPU上で実行されるソフトウェアであってよく、ノード2021-2022は、GPU及び/又はGPU上で実行されるソフトウェアであってよい。本発明の基礎となる原理にさらに準拠しつつ、様々な異なるタイプのノードが用いられてよい。
例示的なニューラルネットワーク実装
多くのタイプのニューラルネットワークがあり、ニューラルネットワークのシンプルなタイプはフィードフォワードネットワークである。フィードフォワードネットワークは、ノードが層に配置される非巡回グラフとして実装されてよい。典型的には、フィードフォワードネットワークトポロジは、少なくとも1つの隠れ層により分離される入力層及び出力層を含む。隠れ層は、入力層により受信される入力を出力層において出力を生成するために有用な表現へと変換される。ネットワークノードは、隣接する層におけるノードにエッジを介して完全に接続されるが、各層内のノード間にエッジは存在しない。フィードフォワードネットワークの入力層のノードにおいて受信されるデータは、層を接続するエッジのそれぞれに関連付けられる係数(「重み」)に基づいてそれぞれネットワーク内の各連続層のノードの状態を算出する活性化関数を介して出力層のノードに伝搬(つまり、「フィードフォワード」)される。実行されるアルゴリズムにより表される特定のモデルに応じて、ニューラルネットワークアルゴリズムからの出力は、様々な形式を取ることができる。
機械学習アルゴリズムが特定の問題をモデル化するために用いられ得る前に、アルゴリズムは、訓練データセットを用いて訓練される。ニューラルネットワークを訓練することは、ネットワークトポロジを選択すること、訓練データのセットを用いてネットワークによりモデル化される問題を表現すること、訓練データセットのすべてのインスタンスに関する最小限のエラーでネットワークモデルが実行するまで、重みを調整することを含む。例えば、ニューラルネットワークに対する教師あり学習の訓練プロセス中に、訓練データセット内のインスタンスを表す入力に応答してネットワークにより生成される出力は、そのインスタンスに対して「正しく」分類された出力と比較され、当該出力と分類された出力と間の差を表すエラー信号が計算され、エラー信号としてのエラーがネットワークの層を通じて後方に伝播されることを最小限に抑えるように、接続に関連付けられる重みが調整される。ネットワークは、訓練データセットのインスタンスから生成される出力のそれぞれに対するエラーが最小限に抑えられる場合に「訓練される」ことが考慮されている。
機械学習アルゴリズムの精度は、アルゴリズムを訓練するために用いられるデータセットの品質により大きく影響され得る。訓練プロセスは、計算集約型であり得、従来の汎用プロセッサ上で膨大な時間を必要とし得る。したがって、並列処理ハードウェアは、多くのタイプの機械学習アルゴリズムを訓練するために用いられる。これは、ニューラルネットワーク内の係数を調整する際に実行される計算が、もともとそれら自体が並列実装に役立つので、ニューラルネットワークの訓練を最適化するために特に有用である。具体的には、多くの機械学習アルゴリズム及びソフトウェアアプリケーションが、汎用グラフィックス処理デバイス内の並列処理ハードウェアの利用に適合されている。
図24は、機械学習ソフトウェアスタック2400の一般化された図である。機械学習アプリケーション2402は、訓練データセットを用いてニューラルネットワークを訓練する、又は、訓練されたディープニューラルネットワークを用いてマシンインテリジェンスを実装するように構成され得る。機械学習アプリケーション2402は、ニューラルネットワーク及び/又は展開前にニューラルネットワークを訓練するために用いられ得る専用のソフトウェアのための訓練及び推論機能を含み得る。機械学習アプリケーション2402は、限定されることはないが、画像認識、マッピング及び位置特定、自律航法、音声合成、医用イメージング又は言語変換を含む任意のタイプのマシンインテリジェンスを実装できる。
機械学習アプリケーション2402用のハードウェアアクセラレーションは、機械学習フレームワーク2404を介して可能にされ得る。機械学習フレームワーク2404は、機械学習プリミティブのライブラリを提供できる。機械学習プリミティブは、機械学習アルゴリズムにより一般的に実行される基本的なオペレーションである。機械学習フレームワーク2404を用いることなく、機械学習アルゴリズムの開発者は、機械学習アルゴリズムに関連付けられる主計算論理を作成及び最適化し、次に、新たな並列プロセッサが開発されるように、計算論理を再度最適化するのに必要とされる。代わりに、機械学習アプリケーションは、機械学習フレームワーク2404により提供されるプリミティブを用いて必要な計算を実行するように構成され得る。例示的なプリミティブは、テンソル、畳み込み、活性化関数及びプーリングを含み、それらは、畳み込みニューラルネットワーク(CNN)を訓練しつつ実行される計算操作である。機械学習フレームワーク2404はまた、行列及びベクトル演算などの多くの機械学習アルゴリズムにより実行される基本的な線形代数サブプログラムを実装するためにプリミティブを提供できる。
機械学習フレームワーク2404は、機械学習アプリケーション2402から受信した入力データを処理して、コンピュートフレームワーク2406への適切な入力を生成することができる。コンピュートフレームワーク2406は、GPGPUドライバ2408に提供される基本命令を抽象化し、GPGPUハードウェア2410のアーキテクチャの詳しい知識を有するために機械学習フレームワーク2404が、機械学習フレームワーク2404を要求することなくGPGPUハードウェア2410を介してハードウェアアクセラレーションを活用することを可能にすることができる。さらに、コンピュートフレームワーク2406は、様々なタイプにわたる機械学習フレームワーク2404及びGPGPUハードウェア2410の生成のためのハードウェアアクセラレーションを有効にすることができる。
GPGPU機械学習アクセラレーション
図26は、実施形態に係るマルチGPUコンピューティングシステム2600を示す。マルチGPUコンピューティングシステム2600は、ホストインタフェーススイッチ2604を介して複数のGPGPU2606A-Dに結合されるプロセッサ2602を含み得る。ホストインタフェーススイッチ2604は、一実施形態において、プロセッサ2602がGPGPU2606A-Dのセットと通信できるPCI Expressバスにプロセッサ2602を結合するPCI Expressスイッチデバイスである。複数のGPGPU2606A-Dのそれぞれは、上述したGPGPUのインスタンスであり得る。GPGPU2606A-Dは、高速ポイントツーポイントGPU間リンク2616のセットを介して相互接続できる。高速GPU間リンクは、専用のGPUリンクを介してGPGPU2606A-Dのそれぞれに接続できる。P2P GPUリンク2616は、プロセッサ2602が接続されるホストインタフェースバスを介した通信を要求することなく、GPGPU2606A-Dのそれぞれの間の直接通信を可能にする。P2P GPUリンクに関するGPU間トラフィックを用いて、ホストインタフェースバスは、システムメモリアクセスに対して依然として利用可能なままである、又は、例えば、1又は複数のネットワークデバイス介してマルチGPUコンピューティングシステム2600の他のインスタンスと通信する。一方、図示される実施形態では、GPGPU2606A-Dは、ホストインタフェーススイッチ2604を介してプロセッサ2602に接続し、一実施形態において、プロセッサ2602は、P2P GPUリンク2616の直接的なサポートを含み、GPGPU2606A-Dに直接接続できる。
機械学習ニューラルネットワーク実装
本明細書において説明される実施形態により提供されるコンピューティングアーキテクチャは、特に、機械学習のためにニューラルネットワークを訓練及び展開するのに適したタイプの並列処理を実行するように構成され得る。ニューラルネットワークは、グラフ関係を有する関数のネットワークとして一般化され得る。当技術分野で周知なように、機械学習に用いられる様々なタイプのニューラルネットワーク実装がある。ある例示的なタイプのニューラルネットワークは、前に説明したように、フィードフォワードネットワークである。
第2の例示的なタイプのニューラルネットワークは畳み込みニューラルネットワーク(CNN)である。CNNは、画像データなどの、既知のグリッド式のトポロジを有するデータを処理するための専用のフィードフォワードニューラルネットワークである。したがって、CNNは、視覚及び画像認識アプリケーションを算出するために一般的に用いられるが、それらは、音声及び言語処理などの他のタイプのパターン認識に用いられてもよい。CNN入力層におけるノードは、「フィルタ」(網膜に見つけられる受容野から発想を得た特徴検出)のセットにまとめられ、フィルタの各セットの出力は、ネットワークの連続層においてノードに伝搬される。CNN用の計算は、そのフィルタの出力を生成するために各フィルタに対する畳み込み数学演算を適用することを含む。畳み込みは、2つのオリジナル関数のうちの一方の修正版である第3の関数を生成するために2つの機能により実行される特殊な数学演算である。畳み込みネットワークの用語において、畳み込みに対する第1の関数は、入力と称され得る一方、第2の関数は、畳み込みカーネルと称され得る。出力は、特徴マップと称され得る。例えば、畳み込み層への入力は、入力画像の様々なカラー成分を定義するデータの多次元アレイであり得る。畳み込みカーネルは、パラメータの多次元アレイであり得、パラメータは、ニューラルネットワークのための訓練プロセスにより適合される。
再帰型ニューラルネットワーク(RNN)は、層間のフィードバック接続を含むフィードフォワードニューラルネットワークのファミリである。RNNは、ニューラルネットワークの異なる部分にわたってパラメータデータを共有することにより順次データのモデリングを可能にする。RNNのアーキテクチャはサイクルを含む。サイクルは、RNNからの出力データの少なくとも一部が、順番に後続の入力を処理するためのフィードバックとして用いられるように、変数の現在の値が将来の時点でそれ自体の値に及ぼす影響を表す。この特徴は、言語データが構成され得る可変性に起因するRNNの言語処理に特に有用である。
以下に説明される図は、例示的なフィードフォワード、CNN及びRNNネットワークを提示し、及び、これらのタイプのネットワークのそれぞれを訓練及び展開するためのそれぞれの一般的な処理を説明する。これらの説明が例示的なものであり、本明細書において説明される任意の特定の実施形態に限定されることはなく、図示されるコンセプトは、一般的なディープニューラルネットワーク及び機械学習技術に一般的に適用され得ることが理解されるだろう。
上述した例示的なニューラルネットワークは、深層学習を実行するために用いられ得る。深層学習は、ディープニューラルネットワークを用いた機械学習である。深層学習において用いられるディープニューラルネットワークは、単一の隠れ層のみを含む浅いニューラルネットワークとは対照的に、複数の隠れ層から構成される人工ニューラルネットワークである。より深いニューラルネットワークは、一般的に、訓練するためにより計算集約型である。しかしながら、ネットワークの追加の隠れ層は、浅い機械学習技術と比較して出力エラーを減らすことになるマルチステップパターン認識を可能にする。
深層学習において用いられるディープニューラルネットワークは、典型的には、数学モデルに提供される特徴表現に基づいてオペレーション(例えば、オブジェクト分類、音声認識など)を実行できる数学モデルを表すバックエンドネットワークに結合される、特徴認識を実行するフロントエンドネットワークを含む。深層学習は、モデルに対して実行される手作りされた機能エンジニアリングを要求することなく実行される機械学習を可能にする。代わりに、ディープニューラルネットワークは、入力データ内の統計的な構成又は相関関係に基づいて特徴を学習できる。学習される特徴は、検出された特徴を出力にマッピングすることができる数学モデルに提供され得る。ネットワークにより用いられる数学モデルは、一般的には、実行される特定のタスクに専用のものであり、異なるモデルが、異なるタスクを実行するために用いられる。
ニューラルネットワークが構築されると、学習モデルは、ネットワークを訓練して特定のタスクを実行するためにネットワークに適用され得る。学習モデルは、ネットワークの出力エラーを減らすために、モデル内の重みをどのように調整するかを記述する。誤差逆伝播法は、ニューラルネットワークを訓練するために用いられる一般的な方法である。入力ベクトルは、処理用のネットワークに提示される。ネットワークの出力は、損失関数を用いて所望の出力と比較され、出力層におけるニューロンのそれぞれに対してエラー値が計算される。次に、各ニューロンが元の出力に対するその寄与を大ざっぱに表す関連のエラー値を有するまで、エラー値は、後方に伝搬される。次に、ネットワークは、確率的勾配降下アルゴリズムなどのアルゴリズムを用いてこれらのエラーから学習して、ニューラルネットワークの重みを更新できる。
図27A及び図27は、例示的な畳み込みニューラルネットワークを示す。図27Aは、CNN内の様々な層を示す。図27Aに示されるように、画像処理をモデル化するために用いられる例示的なCNNは、入力画像の赤、緑及び青(RGB)成分を記述する入力2702を受信できる。入力2702は、複数の畳み込み層(例えば、畳み込み層2704、畳み込み層2706)により処理され得る。複数の畳み込み層からの出力は、完全に接続された層2708のセットにより任意選択的に処理され得る。完全に接続された層におけるニューロンは、フィードフォワードネットワークに関して前に説明したように、前の層におけるすべてのアクティベーションへの完全な接続を有する。完全に接続された層2708からの出力は、ネットワークからの出力結果を生成するために用いられ得る。完全に接続された層2708内のアクティベーションは、畳み込みの代わりに、行列乗算を用いて算出され得る。すべてのCNN実装が完全に接続された層を利用するわけではない。例えば、いくつかの実施では、畳み込み層2706は、CNNに対して出力を生成できる。
畳み込み層は、疎に接続され、これは、完全に接続された層2708において見つけられる従来のニューラルネットワーク構成とは異なる。従来のニューラルネットワーク層は、完全に接続されており、その結果、あらゆる出力ユニットがあらゆる入力ユニットとインタラクトする。しかしながら、フィールドの畳み込みの出力は、(フィールド内のノードのそれぞれの各状態値の代わりに)図示されるような後続の層のノードに入力されるので、畳み込み層は疎に接続される。畳み込み層に関連付けられるカーネルは、次の層に送信される出力の畳み込み演算を実行する。畳み込み層内で実行される次元削減は、CNNがスケーリングして大きな画像を処理することを可能にする一態様である。
図27は、CNNの畳み込み層内の例示的な計算ステージを示す。CNNの畳み込み層2712への入力は、畳み込み層2714の3つのステージにおいて処理され得る。3つのステージは、畳み込みステージ2716、検出ステージ2718及びプーリングステージ2720を含み得る。畳み込み層2714は、次に、連続的な畳み込み層にデータを出力できる。ネットワークの最終的な畳み込み層は、例えば、CNNへの入力に対する分類値を生成するために、出力特徴マップデータを生成できる、又は、完全に接続された層に入力を提供できる。
畳み込みステージ2716では、いくつかの畳み込みを並列に実行して、線形活性化のセットを生成する。畳み込みステージ2716はアフィン変換を含むことができ、アフィン変換は、線形変換プラス移動として特定され得る任意の変換である。アフィン変換は、回転、移動、スケーリング及びこれらの変換の組み合わせを含む。畳み込みステージは、入力内の特定の領域に接続される機能(例えば、ニューロン)の出力を算出し、ニューロンに関連付けられる局所領域として決定され得る。ニューロンは、ニューロンの重みと、ニューロンが接続される局所的な入力における領域の重みとの間のドット積を算出する。畳み込みステージ2716からの出力は、畳み込み層2714の連続的なステージにより処理される線形活性化のセットを定義する。
線形活性化は、検出ステージ2718により処理され得る。検出ステージ2718において、各線形活性化は、非線形活性化関数により処理される。非線形活性化関数は、畳み込み層の受容野に影響を与えることなく、ネットワーク全体の非線形的性質を高める。いくつかのタイプの非線形活性化関数が用いられてよい。1つの特定のタイプは、正規化線形ユニット(ReLU)であり、これは、アクティベーションがゼロに閾値設定されるように、f(x)=max(0、x)として定義される活性化関数を用いる。
プーリングステージ2720は、畳み込み層2706の出力を、すぐ近くの出力の要約統計量と置き換えるプーリング関数を用いる。プーリング関数は、並進不変性(translation invariance)をニューラルネットワークに導入するために用いられることができ、その結果、入力へのわずかな並進はプールされる出力を変更しない。入力データ内の特徴の存在が特徴の正確な位置よりも重要なシナリオにおいて、局所的な移動に対する不変性は有用であり得る。様々なタイプのプーリング関数は、最大プーリング、平均プーリング及びl2-ノルムプーリングを含むプーリングステージ2720中に用いられ得る。さらに、いくつかのCNN実装は、プーリングステージを含まない。代わりに、そのような実装は、以前の畳み込みステージと比較して、増加したストライドを有する代わりの及び追加の畳み込みステージである。
次に、畳み込み層2714からの出力は、次の層2722により処理され得る。次の層2722は、追加の畳み込み層又は完全に接続された層2708のうちの1つであり得る。例えば、図27Aの第1の畳み込み層2704は、第2の畳み込み層2706に出力できる一方、第2の畳み込み層は、完全に接続された層2708のうちの第1の層に出力できる。
図28は、例示的な再帰型ニューラルネットワーク2800を示す。再帰型ニューラルネットワーク(RNN)において、ネットワークの前の状態がネットワークの現在の状態の出力に影響を与える。RNNは、様々な機能を用いて様々なやり方で構築され得る。RNNの使用は、一般的に、数学モデルを用いて前の一連の入力に基づいて将来を予測することを中心に展開する。例えば、RNNは、統計的な言語モデリングを実行して、前の一連のワードが与えられると、次のワードを予測するために用いられ得る。説明され得る図示されるRNN2800は、入力ベクトルを受信する入力層2802と、リカレント機能を実装する隠れ層2804と、前の状態の「メモリ」を有効にするフィードバックメカニズム2805と、結果を出力する出力層2806とを有する。RNN2800は、タイムステップに基づいて動作する。所与のタイムステップにおけるRNNの状態は、フィードバックメカニズム2805を介して前のタイムステップに基づいて影響を受ける。所与のタイムステップについて、隠れ層2804の状態は、前の状態と、現在のタイムステップにおける入力とにより定義される。第1のタイムステップにおいて、初期入力(x1)が隠れ層2804により処理され得る。第2の入力(x2)は、初期入力(x1)の処理中に決定される状態情報を用いて隠れ層2804により処理され得る。所与の状態は、s_t=f(Ux_t+Ws_(t-1))として算出され得、U及びWは、パラメータ行列である。関数fは、一般的に、双曲線正接関数(Tanh)又は正規化関数f(x)=max(0、x)の変形例など、非線形である。しかしながら、隠れ層2804において用いられる特定の数学的な関数は、RNN2800についての特定の実装の詳細に応じて変化し得る。
説明される基本的なCNN及びRNNネットワークに加えて、これらのネットワーク上のバリエーションが可能にされてもよい。ある例示的なRNNの変型例は、長・短期メモリ(LSTM)RNNである。LSTM RNNは、より長い並びの言語を処理するために必要とされ得る長期依存の学習を可能にする。CNN上の変形例は、畳み込みディープビリーフネットワークであり、CNNと同様の構造を有し、かつ、ディープビリーフネットワークと同様の方式で訓練される。ディープビリーフネットワーク(DBN)は、確率(ランダム)変数の複数の層から構成される生成系ニューラルネットワークである。DBNは、greedy教師なし学習を用いて層毎に訓練され得る。次に、DBNの学習される重みは、ニューラルネットワークに対する重みの最適な初期セットを決定することにより、事前訓練ニューラルネットワークを提供するために用いられ得る。
図29は、ディープニューラルネットワークの訓練及び展開を示す。所与のネットワークがタスク用に構築されると、ニューラルネットワークは、訓練データセット2902を用いて訓練される。様々な訓練フレームワーク2904は、訓練プロセスのハードウェアアクセラレーションを可能にするように開発されてきた。例えば、上述した機械学習フレームワークは、訓練フレームワークとして構成されてよい。訓練フレームワーク2904は、訓練されていないニューラルネットワーク2906に接続し、訓練されたニューラルネット2908を生成するために、訓練されていないニューラルネットが本明細書において説明される並列処理リソースを用いて訓練されることを可能にし得る。
訓練プロセスを開始するために、初期の重みは、ランダムに、又は、ディープビリーフネットワークを用いて事前訓練することにより選択されてよい。次に、訓練サイクルは、教師あり又は教師なし方式のいずれか一方で実行される。
教師あり学習は、例えば、訓練データセット2902が、入力に対する所望の出力と組み合わされる入力を含む場合、又は、訓練データセットが、既知の出力を有する入力を含み、かつ、ニューラルネットワークの出力が手動で格付けされる場合などの仲介オペレーションとして訓練が実行される学習方法である。ネットワークは、入力を処理して、結果の出力を、予期される又は所望の出力のセットと比較する。次に、エラーが、システム全体に伝搬される。訓練フレームワーク2904は、訓練されていないニューラルネットワーク2906を制御する重みを調整するように調整し得る。訓練フレームワーク2904は、訓練されていないニューラルネットワーク2906が既知の入力データに基づいて正解を生成するのに適したモデルに向けてどれだけうまく収束しているかをモニタリングするツールを提供できる。ニューラルネットワークにより生成される出力を改善するようにネットワークの重みが調整されるように、訓練プロセスは繰り返し行われる。訓練プロセスは、ニューラルネットワークが、訓練されたニューラルネット2908に関連付けられる統計的に望ましい精度に達するまで継続し得る。次に、訓練されたニューラルネットワーク2908は、任意の数の機械学習オペレーションを実装するように展開され得る。
教師なし学習は、ネットワークが分類されていないデータを用いて自身を訓練しようと試みる学習方法である。したがって、教師なし学習に関して、訓練データセット2902は、任意の関連する出力データなしの入力データを含む。訓練されていないニューラルネットワーク2906は、分類されていない入力内のグループ化を学習でき、個々の入力がどのようにデータセット全体に関連するかを決定できる。教師なし訓練は、自己組織化マップを生成するために用いられることができ、あるタイプの訓練されたニューラルネットワーク2907は、データの次元を削減するのに有用なオペレーションを実行することが可能である。教師なし訓練はまた、アノマリ検出を実行するために用いられることもでき、データの通常のパターンから逸脱する入力データセット内のデータポイントの識別を可能にする。
教師あり及び教師なし訓練に対するバリエーションが採用されてもよい。半教師あり学習は、訓練データセット2902が同じ分散のうちの分類されているデータ及び分類されていないデータの混合を含む技術である。インクリメンタル学習は、入力データがモデルをさらに訓練するために継続的に用いられる教師あり学習の変形例である。インクリメンタル学習は、訓練されたニューラルネットワーク2908が初期訓練中のネットワーク内に教え込まれた知識を忘れることなく新たなデータ2912に適用することを可能にする。
教師ありであるか、又は、教師なしであるかに関わらず、特にディープニューラルネットワークの訓練プロセスは、単一の計算ノードに対してかなり計算集約型であるかもしれない。単一の計算ノードを用いる代わりに、計算ノードの分散型ネットワークが、訓練プロセスをアクセラレートするために用いられ得る。
図30は、分散型学習を示すブロック図である。分散型学習は、上述したノード2021-2023などの複数の分散型計算ノードを用いて、ニューラルネットワークの教師あり又は教師なし訓練を実行する訓練モデルである。分散型計算ノードはそれぞれ、1又は複数のホストプロセッサと、高並列汎用グラフィックス処理ユニットなどの汎用処理ノードのうちの1又は複数とを含むことができる。図示されるように、分散型学習は、モデル並列処理3002、データ並列処理3004、又は、モデル及びデータ並列処理の組み合わせを実行し得る。
モデル並列処理3002において、分散型システム内の異なる計算ノードは、単一のネットワークの異なる部分に対する訓練計算を実行できる。例えば、ニューラルネットワークの各層は、分散型システムの異なる処理ノードにより訓練され得る。モデル並列処理の利点は、特に大きなモデルにスケーリングする能力を含むことである。ニューラルネットワークの異なる層に関連付けられる計算を分裂することは、すべての層の重みが単一の計算ノードのメモリに適合しない非常に大きなニューラルネットワークの訓練を可能にする。いくつかの例では、モデル並列処理は、大きなニューラルネットワークの教師なし訓練を実行する際に特に有用となり得る。
データ並列処理3004において、分散型ネットワークの異なるノードはモデルの完全なインスタンスを有し、各ノードはデータの異なる部分を受信する。次に、異なるノードからの結果が組み合わせられる。データ並列処理に対する異なるアプローチが可能であるが、データの並列的な訓練アプローチはすべて、結果を組み合わせて、各ノード間のモデルパラメータを同期させる技術を必要とする。データを組み合わることに対する例示的なアプローチは、パラメータの平均化及び更新ベースのデータ並列処理を含む。パラメータの平均化は、訓練データのサブセットで各ノードを訓練し、グローバルパラメータ(例えば、重み、バイアス)を各ノードからパラメータの平均に設定する。パラメータの平均化は、パラメータデータを維持する中央パラメータサーバを用いる。更新ベースのデータ並列処理は、ノードからパラメータサーバにパラメータを転送する代わりに、モデルの更新が転送されることを除いてパラメータの平均化と同様である。さらに、更新ベースのデータ並列処理は、分散方式で実行されることができ、更新は、圧縮されてノード間に転送される。
組み合わせられたモデル及びデータ並列処理3006は、例えば、各計算ノードが複数のGPUを含む分散型システムにおいて実装され得る。各ノードは、モデルの異なる部分を訓練するために用いられる各ノード内の別個のGPUを用いるモデルの完全なインスタンスを有することができる。
分散型訓練は、単一のマシン上で訓練することと比較してオーバヘッドを増加させる。しかしながら、本明細書において説明される並列プロセッサ及びGPGPUはそれぞれ、分散型訓練のオーバヘッドを低減させる様々な技術を実装でき、高帯域幅GPU間データ転送及びアクセラレートされたリモートデータ同期を可能にする技術を含む。
例示的な機械学習アプリケーション
機械学習は、様々な技術的課題を解決するために適用されることができ、限定されることはないが、コンピュータビジョン、自動運転及びナビゲーション、音声認識並びに言語処理を含む。コンピュータビジョンは、これまで、機械学習アプリケーション用の大部分のアクティブなリサーチエリアのうちの1つであった。コンピュータビジョンのアプリケーションは、顔を認識することなどの人の視覚能力を再生することから、視覚能力の新たなカテゴリを作成することに及ぶ。例えば、コンピュータビジョンアプリケーションは、ビデオ内で可視のオブジェクトにおいて引き起こされる振動から音波を認識するように構成され得る。並列プロセッサアクセラレート型機械学習は、コンピュータビジョンアプリケーションが以前に実現可能なものよりも膨大な訓練データセットを用いて訓練されることを可能にし、推論システムが低電力並列プロセッサを用いて展開されることを可能にする。
並列プロセッサアクセラレート型機械学習は、レーン及び道路標識認識、障害物回避、ナビゲーション並びに運転制御を含む自動運転アプリケーションを有する。アクセラレート型機械学習技術は、特定の訓練入力に対する適切な応答を定義するデータセットに基づいて運転モデルを訓練するために用いられ得る。本明細書において説明される並列プロセッサは、自動運転解決方法に用いられるますます複雑なニューラルネットワークの迅速な訓練を可能にし、自律走行車への統合に適したモバイルプラットフォームにおいて、低電力推論プロセッサの展開を可能にし得る。
並列プロセッサアクセラレート型ディープニューラルネットワークは、自動音声認識(ASR)への機械学習アプローチを可能にしてきた。ASRは、入力アコースティックシーケンスを考慮して最も可能性のある言語シーケンスを算出する関数の作成を含む。ディープニューラルネットワークを用いるアクセラレート型機械学習は、ASR用に以前に用いられていた隠れマルコフモデル(HMM)及びガウス混合モデル(GMM)の置換を可能してきた。
並列プロセッサアクセラレート型機械学習はまた、自然言語処理をアクセラレートするために用いられ得る。自動学習プロシージャは、統計的な推論アルゴリズムを利用して、誤った又は見知らぬ入力に対してロバストなモデルを生成できる。例示的な自然言語プロセッサアプリケーションは、人間の言語間の自動機械翻訳を含む。
機械学習に用いられる並列処理プラットフォームは、訓練プラットフォーム及びプラットフォーム展開に分割され得る。訓練プラットフォームは、一般的に高度に並列的であり、マルチGPU単一のノード訓練及びマルチノード、マルチGPU訓練をアクセラレートするために最適化を含む。訓練に適した例示的な並列プロセッサは、本明細書において説明される高並列汎用グラフィックス処理ユニット及び/又はマルチGPUコンピューティングシステムを含む。それどころか、展開される機械学習プラットフォームは、一般的に、カメラ、自律ロボット及び自律走行車などの製品での使用に適した低電力並列プロセッサを含む。
図31は、訓練されたモデルを用いて推論を実行するのに適した例示的な推論システムオンチップ(SoC)3100を示す。SoC3100は、メディアプロセッサ3102、ビジョンプロセッサ3104、GPGPU3106及びマルチコアプロセッサ3108を含む処理コンポーネントを統合できる。SoC3100は、さらに、処理コンポーネントのそれぞれによりアクセス可能な共有のオンチップデータプールを可能にできるオンチップメモリ3105を含むことができる。処理コンポーネントは、自律走行車及び自律ロボットを含む様々な機械学習プラットフォームへの展開を可能にする低電力オペレーションのために最適化され得る。例えば、SoC3100の一実施例は、自律走行車用の主制御システムの一部として用いられ得る。SoC3100が自律走行車での使用のために構成される場合、SoCは、展開権限についての関連する機能的な安全規格に準拠するように設計及び構成される。
オペレーション中、メディアプロセッサ3102及びビジョンプロセッサ3104は、コンピュータビジョンオペレーションをアクセラレートするために、同時に動作できる。メディアプロセッサ3102は、複数の高解像度(例えば、4K、8K)ビデオストリームの低レイテンシなデコードを可能にし得る。デコードされたビデオストリームは、オンチップメモリ3105内のバッファに書き込まれ得る。次に、ビジョンプロセッサ3104は、デコードされたビデオを解析し、訓練された画像認識モデルを用いたフレーム処理の準備の際に、デコードされたビデオのフレームに対して予備処理オペレーションを実行できる。例えば、ビジョンプロセッサ3104は、高解像度ビデオデータに対して画像認識を実行するために用いられるCNNの畳み込み演算をアクセラレートすることができる一方、バックエンドモデル計算がGPGPU3106により実行される。
マルチコアプロセッサ3108は、メディアプロセッサ3102及びビジョンプロセッサ3104により実行されるデータ転送のシーケンシング及び同期、並びに、共有メモリ演算を支援する制御ロジックを含み得る。マルチコアプロセッサ3108はまた、GPGPU3106の推論算出機能を利用できるソフトウェアアプリケーションを実行するアプリケーションプロセッサとして機能できる。例えば、ナビゲーション及び運転ロジックの少なくとも一部は、マルチコアプロセッサ3108上で実行するソフトウェアにおいて実装され得る。そのようなソフトウェアは、GPGPU3106に計算ワークロードを直接発行できる、又は、計算ワークロードは、マルチコアプロセッサ3108に発行されることができ、これらのオペレーションの少なくとも一部をGPGPU3106にオフロードできる。
GPGPU3106は、高並列汎用グラフィックス処理ユニットDPLAB00内のコンピュートクラスタDPLAB06A-DPLAB06Hの低電力構成などのコンピュートクラスタを含み得る。GPGPU3106内のコンピュートクラスタは、訓練されたニューラルネットワーク上で推論計算を実行するために具体的に最適化される命令をサポートすることができる。例えば、GPGPU3106は、8ビット及び4ビットの整数ベクトル演算などの低い精度の計算を実行する命令をサポートすることができる。
例
以下は、本発明の異なる実施形態の実装例である。
例1.レイトレーシングオペレーションを実行する複数のノードと、複数のノードにグラフィックスワークをディスパッチするディスパッチャノードであって、各ノードは、グラフィックスワークにより特定される画像フレームの領域をレンダリングするようにレイトレーシングを実行する、ディスパッチャノードと、複数のうちの少なくとも第1のノードであって、画像フレームの第1の領域をレンダリングするようにレイトレーシングを実行するレイトレーシングレンダラと、第1の領域に関連付けられるデータと、第1の領域の外側の領域に関連付けられるデータとの組み合わせを用いて第1の領域のノイズ除去を実行するデノイザであって、第1の領域の外側の領域に関連付けられるデータの少なくともいくつかは、少なくとも1つの他のノードから取り込まれる、デノイザとを有する少なくとも第1のノードとを備えるシステム。
例2.複数のノード及びディスパッチャノードに第1のノードを結合する高速ネットワーク、バス又は相互接続をさらに備える、例1のシステム。
例3.デノイザは、第1の領域及び第1の領域の外側の領域に関連付けられるデータを用いて第1のノイズ除去領域を生成する、例1のシステム。
例4.デノイザは、第1の領域及び第1の領域の外側の領域に関連付けられるデータを評価して第1の領域のノイズ除去を実行する機械学習エンジンを含む、例3のシステム。
例5.機械学習エンジンは、訓練された重みのセットに基づいて、第1の領域及び第1の領域の外側の領域に関連付けられるデータを評価する畳み込みニューラルネットワーク回路及びロジックを有する、例4のシステム。
例6.第1のノードは、複数のノードのうちの1又は複数及び/又はディスパッチャノードから訓練された重みのセットの少なくとも一部を受信する、例5のシステム。
例7.第1の領域に関連付けられるデータの少なくとも一部を用いてランタイム訓練を実行することに応じて、訓練された重みのセットに対する更新を実行して、他のノードのうちの1又は複数及び/又はディスパッチャノードに更新を通信する機械学習エンジンの訓練回路及び/又はロジックをさらに備える、例6のシステム。
例8.第1のノードは、第1の領域及び/又は第1の領域の外側の領域に関連付けられデータの少なくとも一部を、第2のノードに伝送する前に圧縮して、圧縮したデータを生成するコンプレッサ/デコンプレッサをさらに備える、例1のシステム。
例9.第1のノードは、第2のノードからの要求に従って、第2のノードに圧縮したデータを伝送する、例8のシステム。
例10.複数のノード及びディスパッチノードの各ノードは、レイトレーシングを実行するレイトレーシングレンダラを含む少なくとも1つのグラフィックス処理ユニット(GPU)を有する、例1のシステム。
例11.レイトレーシングレンダラ及びデノイザは、GPUの回路及びGPUにより実行されるソフトウェアの組み合わせを有する、例10のシステム。
例12.レイトレーシンググラフィックスワークを複数のノードにディスパッチする段階と、画像フレームの第1の領域をレンダリングするように第1のノード上でレイトレーシングオペレーションを実行する段階と、複数のノードのうちの1又は複数の他のノードから第1の領域の外側の領域に関連付けられるデータを要求する段階と、第1の領域に関連付けられるデータと、第1の領域の外側の領域に関連付けられるデータとの組み合わせを用いて第1の領域をノイズ除去する段階とを備える方法。
例13.第1のノードに結合される高速ネットワーク、バス又は相互接続を介して第1の領域の外側の領域に関連付けられるデータを受信する段階をさらに備える、例12の方法。
例14.ノイズ除去する段階は、第1の領域及び第1の領域の外側の領域に関連付けられるデータを用いて第1のノイズ除去領域を生成する段階をさらに有する、例12の方法。
例15.ノイズ除去する段階は、第1の領域のノイズ除去を実行すべく、第1の領域及び第1の領域の外側の領域に関連付けられるデータを評価するように機械学習を実行する段階をさらに有する、例14の方法。
例16.機械学習を実行する段階は、訓練された重みのセットに基づいて、第1の領域及び第1の領域の外側の領域に関連付けられるデータを評価する段階を有する、例15の方法。
例17.第1のノードは、複数のノードのうちの1又は複数から訓練された重みのセットの少なくとも一部を受信する、例16の方法。
例18.第1の領域に関連付けられるデータの少なくとも一部を用いてランタイム訓練を実行する段階と、それに応じて、訓練された重みのセットに対する更新を実行する段階と、他のノードのうちの1又は複数及び/又はディスパッチャノードに更新を通信する段階とをさらに備える、例17の方法。
例19.第1のノードは、第1の領域及び/又は第1の領域の外側の領域に関連付けられるデータの少なくとも一部を圧縮して、圧縮したデータを生成することをさらに有する、例12の方法。
例20.第1のノードは、第2のノードからの要求の受信に従って、第2のノードに圧縮したデータを伝送することをさらに有する、例19の方法。
例21.複数のノードの各ノードは、レイトレーシングオペレーションを実行するレイトレーシングレンダラを有する少なくとも1つのグラフィックス処理ユニット(GPU)を有する、例12の方法。
例22.GPUは、ノイズ除去を実行するノイズ除去回路及び/又はロジックをさらに備える、例21の方法。
例23.マシンにより実行される場合に、マシンに、複数のノードのうちの第1のノードにおいて、レイトレーシンググラフィックスワークを受信する工程と、画像フレームの第1の領域をレンダリングするように、第1のノード上でレイトレーシングオペレーションを実行する工程と、複数のノードのうちの1又は複数の他のノードから、第1の領域の外側の領域に関連付けられるデータを要求する工程と、第1の領域に関連付けられるデータと、第1の領域の外側の領域に関連付けられるデータとの組み合わせを用いて第1の領域をノイズ除去する工程とを実行させる、そこに格納されるプログラムコードを有する機械可読媒体。
例24.マシンに、第1のノードに結合される高速ネットワーク、バス又は相互接続を介して第1の領域の外側の領域に関連付けられるデータを受信する工程を実行させるプログラムコードをさらに有する、例23の機械可読媒体。
例25.ノイズ除去する工程は,第1の領域及び第1の領域の外側の領域に関連付けられるデータを用いて第1のノイズ除去領域を生成する工程をさらに有する、例23の機械可読媒体。
例26.ノイズ除去する工程は、第1の領域のノイズ除去を実行すべく、第1の領域及び第1の領域の外側の領域に関連付けられるデータを評価するように機械学習を実行する工程をさらに有する、例25の機械可読媒体。
例27.機械学習を実行する工程は、訓練された重みのセットに基づいて、第1の領域及び第1の領域の外側の領域に関連付けられるデータを評価する工程を有する、例26の機械可読媒体。
例28.第1のノードは、複数のノードのうちの1又は複数から訓練された重みのセットの少なくとも一部を受信する、例27の機械可読媒体。
例29.マシンに、第1の領域に関連付けられるデータの少なくとも一部を用いてランタイム訓練を実行する工程と、それに応じて、訓練された重みのセットに対する更新を実行する工程と、他のノードのうちの1又は複数及び/又はディスパッチャノードに更新を通信する工程とを実行させるプログラムコードをさらに備える、例28の機械可読媒体。
例30.第1のノードは、第1の領域及び/又は第1の領域の外側の領域に関連付けられるデータの少なくとも一部を圧縮して、圧縮したデータを生成することをさらに有する、例23の機械可読媒体。
例31.第1のノードは、第2のノードからの要求の受信に従って、第2のノードに圧縮したデータを伝送することをさらに有する、例30の機械可読媒体。
例32.複数のノードの各ノードは、レイトレーシングオペレーションを実行するレイトレーシングレンダラを有する少なくとも1つのグラフィックス処理ユニット(GPU)を有する、例23の機械可読媒体。
例33.GPUは、ノイズ除去を実行するノイズ除去回路及び/又はロジックをさらに有する、例32の機械可読媒体。
実施形態において、用語「エンジン」又は「モジュール」又は「ロジック」は、1又は複数のソフトウェア又はファームウェアプログラム実行する特定用途向け集積回路(ASIC)、電子回路、(共有、専用又はグループ)プロセッサ、及び/又は、(共有、専用又はグループ)メモリ、組み合わせ論理回路、及び/又は、説明される機能を提供する他の適したコンポーネントを指し得る、これらの一部であり得る、又は、これらを含み得る。実施形態において、エンジン、モジュール又はロジックは、ファームウェア、ハードウェア、ソフトウェア又はファームウェア、ハードウェア及びソフトウェアの任意の組み合わせで実装されてよい。
本発明の実施形態は、上述した様々な段階を含んでよい。当該段階は、汎用又は専用プロセッサに段階を実行させるために用いられ得る機械実行可能命令で具現化されてよい。代替的に、これらの段階は、当該段階を実行するためのハードワイヤードロジックを含む特定のハードウェアコンポーネントにより、又は、プログラミングされたコンピュータコンポーネント及びカスタムハードウェアコンポーネントの任意の組み合わせにより実行されてよい。
本明細書において説明されたように、命令は、特定のオペレーションを実行するように構成される、又は、予め定められた機能を有する特定用途向け集積回路(ASIC)などのハードウェアの特定の構成、又は、非一時的なコンピュータ可読媒体において具現化されるメモリ内に格納されるソフトウェア命令を指し得る。したがって、図に示される技術は、格納されたコード及びデータを用いて実施され、1又は複数の電子デバイス(例えば、エンドステーション、ネットワークエレメントなど)で実行され得る。そのような電子デバイスは、非一時的なコンピュータ可読記憶媒体(例えば、磁気ディスク、光ディスク、ランダムアクセスメモリ、リードオンリメモリ、フラッシュメモリデバイス、相変化メモリ)、及び、一時的なコンピュータ機械可読通信媒体(例えば、伝搬信号-例えば、搬送波、赤外線信号、デジタル信号など-についての電気、光、アコースティック又は他の形式)などのコンピュータ機械可読媒体を用いてコード及びデータを格納し、これを(内部で、及び/又はネットワークを介して他の電子デバイスと)通信する。
さらに、そのような電子デバイスは、典型的には、1又は複数のストレージデバイス(非一時的な機械可読記憶媒体)、ユーザ入力/出力デバイス(例えば、キーボード、タッチスクリーン及び/又はディスプレイ)及びネットワーク接続などの1又は複数の他のコンポーネントに結合される1又は複数のプロセッサのセットを含む。プロセッサ及び他のコンポーネントのセットの結合は、典型的には、1又は複数のバス及びブリッジ(バスコントローラとも呼ばれる)を通じて行われる。ストレージデバイス及びネットワークトラフィックを搬送する信号はそれぞれ、1又は複数の機械可読記憶媒体及び機械可読通信媒体を表す。したがって、所与の電子デバイスのストレージデバイスは、その電子デバイスの1又は複数のプロセッサのセットでの実行のために、コード及び/又はデータを典型的には格納する。もちろん、本発明の実施形態の1又は複数の部分は、ソフトウェア、ファームウェア及び/又はハードウェアの異なる組み合わせを用いて実装されてもよい。この詳細な説明にわたり、説明の目的で、本発明の全体的な理解を提供するために、多くの具体的な詳細が記載された。しかしながら、本発明がこれらの具体的な詳細のいくつかがなくても実施され得ることが当業者には明らかである。特定の例において、周知の構造及び機能は、本発明の主題が曖昧になることを回避するために、詳細な説明において説明されてこなかった。したがって、本発明の範囲及び趣旨は、以下の特許請求の範囲の観点から判断されたい。