以下の説明では、説明を目的として、以下に記載する本発明の実施形態の完全な理解を提供するために、多くの詳細事項が説明される。しかしながら、当業者は、本発明の実施形態がこれらの特定の詳細無しに実施できることを理解するだろう。他の例では、幾つかの良く知られた構造及び装置が、本発明の実施形態の基礎にある原理を不明瞭することを回避するために、ブロック図で示される。
<<例示的なグラフィックプロセッサアーキテクチャ及びデータ型>>
<システム概要>
図1は、実施形態による処理システム100のブロック図である。種々の実施形態において、システム100は、1つ以上のプロセッサ102及び1つ以上のグラフィックプロセッサ108を含み、シングルプロセッサ・デスクトップシステム、マルチプロセッサ・ワークステーションシステム、又は多数のプロセッサ102若しくはプロセッサコア107を曽根あるサーバシステムであってよい。一実施形態では、システム100は、モバイル、ハンドヘルド、又は埋込装置での使用のためにシステムオンチップ(system-on-a-chip:SoC)集積回路内に組み込まれた処理プラットフォームである。
一実施形態では、システム100は、サーバに基づくゲームプラットフォーム、ゲーム及びメディアコンソールを含むゲームコンソール、モバイルゲームコンソール、ハンドヘルドゲームコンソール、又はオンラインゲームコンソールを含み又はその中に組み込まれ得る。幾つかの実施形態では、システム100は、モバイル電話機、スマートフォン、タブレットコンピューティング装置、又はモバイルインターネット装置である。処理システム100は、スマートウォッチウェアラブル装置、スマート眼鏡装置、拡張現実装置、又は仮想現実装置のような、ウェアラブル装置を含み、それに結合され、又はその中に統合され得る。幾つかの実施形態では、処理システム100は、1つ以上のプロセッサ102及び1つ以上のグラフィックプロセッサ108により生成されるグラフィカルインタフェースを備えるテレビジョン又はセットトップボックス装置である。
幾つかの実施形態では、1つ以上のプロセッサ102はそれぞれ、実行されるとシステムの動作及びユーザソフトウェアを実行する命令を処理する1つ以上のプロセッサコア107を含む。幾つかの実施形態では、1つ以上のプロセッサコア107の各々は、特定命令セット109を処理するよう構成される。幾つかの実施形態では、命令セット109は、CISC(Complex Instruction Set Computing)、RISC(Reduced Instruction Set Computing)、又はVLIW(Very Long Instruction Word)による計算を実現してよい。複数のプロセッサコア107は、それぞれ、他の命令セットのエミュレーションを実現する命令を含み得る異なる命令セット109を処理してよい。プロセッサコア107は、DSP(Digital Signal Processor)のような他の処理装置も含んでよい。
幾つかの実施形態では、プロセッサ102は、キャッシュメモリ104を含む。アーキテクチャに依存して、プロセッサ102は、単一の内部キャッシュ又は複数レベルの内部キャッシュを有し得る。幾つかの実施形態では、キャッシュメモリは、プロセッサ102の様々なコンポーネントの間で共有される。幾つかの実施形態では、プロセッサ102は、プロセッサコア107の間で既知のキャッシュコヒーレンス技術を用いて共有されてよい外部キャッシュ(例えばレベル3(Level-3:L3)キャッシュ又はラストレベルキャッシュ(Last Level Cache:LLC))(図示しない)も使用する。レジスタファイル106が更にプロセッサ102に含まれる。これは、異なるデータ型を格納する異なる種類のレジスタ(例えば、整数レジスタ、浮動小数点レジスタ、状態レジスタ、及び命令ポインタレジスタ)を含んでよい。幾つかのレジスタは汎用レジスタであってよく、一方で、他のレジスタはプロセッサ102の設計に固有であってよい。
幾つかの実施形態では、1つ以上のプロセッサ102は、1つ以上のインタフェースバス110に結合され、アドレス、データ、又は制御信号のような通信信号をプロセッサ102とシステム100内の他のコンポーネントとの間で送信する。インタフェースバス110は、一実施形態では、DMI(Direct Media Interface)バスのバージョンのようなプロセッサバスであり得る。しかしながら、プロセッサバスは、DMIバスに限定されず、1つ以上の周辺機器相互接続バス(例えば、PCI、PCIExpress)、メモリバス、又は他の種類のインタフェースバスを含んでよい。一実施形態では、プロセッサ102は、統合メモリ制御部116及びプラットフォーム制御ハブ130を含む。メモリ制御部116は、メモリ装置とシステム100の他のコンポーネントとの間の通信を実現し、一方、プラットフォーム制御ハブ(PCH)130は、ローカルI/Oバスを介してI/O装置への接続を提供する。
メモリ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)であり得る。
幾つかの実施形態では、プラットフォーム制御ハブ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は、レガシ(例えば、Personal System 2(PS/2))装置をシステムに結合する任意のレガシI/O制御部140を含む。プラットフォーム制御ハブ130は、1つ以上のUSB(Universal Serial Bus)制御部142にも、キーボード及びマウス143の組み合わせ、カメラ144、又は他のUSB入力装置のような接続入力装置を接続し得る。
図示のシステム100は、例示的であり限定ではなく、異なる方法で構成される他の種類のデータ処理システムも使用され得ることが理解される。例えば、メモリ制御部116及びプラットフォーム制御ハブ130の例は、外部グラフィックプロセッサ112のような個別外部グラフィックプロセッサに統合されてよい。一実施形態では、プラットフォーム制御ハブ130及び/又はメモリ制御部116は、1つ以上のプロセッサ102の外部にあってよい。例えば、システム100は、プロセッサ102と通信するシステムチップセット内にあるメモリ制御ハブ及び周辺機器制御ハブとして構成され得る例示的なメモリ制御部116及びプラットフォーム制御ハブ130を含み得る。
図2は、1つ以上のプロセッサコア202A~202N、統合メモリ制御部214、及び統合グラフィックプロセッサ208を有するプロセッサ200の実施形態のブロック図である。本願明細書の任意の他の図の要素と同じ参照符号(又は名称)を有する図2のこれらの要素は、本願明細書の他の場所に記載されたものと同様の方法で動作し又は機能できるが、そのように限定されない。プロセッサ200は、最大で及び破線ボックスにより示される追加コア202Nを含む追加コアを含み得る。プロセッサコア202A~202Nの各々は、1つ以上の内部キャッシュユニット204A~204Nを含む。幾つかの実施形態では、各プロセッサコアは、1つ以上の共有キャッシュユニット206へのアクセスも有する。
内部キャッシュユニット204A~204N及び共有キャッシュユニット206は、プロセッサ200内のキャッシュメモリ階層構造を表す。キャッシュメモリ階層構造は、各プロセッサコアの中に少なくとも1つのレベルの命令及びデータキャッシュ、及びレベル2(Level 2:L2)、レベル3(Level 3:L3)、レベル4(Level 4:L4)、又は他のレベルのキャッシュのような1つ以上のレベルの共有中間レベルキャッシュを含み得る。ここで、外部メモリの前の最高レベルのキャッシュはLLCとして分類される。幾つかの実施形態では、キャッシュコヒーレンスロジックは、種々のキャッシュユニット206及び204A~204Nの間のコヒーレンスを維持する。
幾つかの実施形態では、プロセッサ200は、1つ以上のバス制御ユニット216及びシステムエージェントコア210のセットも含んでよい。1つ以上のバス制御ユニット216は、1つ以上のPCI又はPCI expressバスのような周辺機器バスのセットを管理する。システムエージェントコア210は、種々のプロセッサコンポーネントの管理機能を提供する。幾つかの実施形態では、システムエージェントコア210は、種々の外部メモリ装置(図示しない)へのアクセスを管理する1つ以上の統合メモリ制御部214を含む。
幾つかの実施形態では、プロセッサコア202A~202Nのうちの1つ以上のは、同時マルチスレッドのサポートを含む。このような実施形態では、システムエージェントコア210は、マルチスレッド処理の間にコア202A~202Nを調整し及び作動させるコンポーネントを含む。システムエージェントコア210は、さらに、プロセッサコア202A~202N及びグラフィックプロセッサ208の電力状態を調整するロジック及びコンポーネントを含む電力制御ユニット(power control unit:PCU)を含んでよい。
幾つかの実施形態では、プロセッサ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のブロック図である。幾つかの実施形態では、グラフィックプロセッサは、、グラフィックプロセッサ上のレジスタへのメモリマップドI/Oインタフェースを介して、及びプロセッサメモリ内に置かれたコマンドにより、通信する。幾つかの実施形態では、グラフィックプロセッサ300は、メモリにアクセスするためのメモリインタフェース314を含む。メモリインタフェース314は、ローカルメモリ、1つ以上の内部キャッシュ、1つ以上の共有外部キャッシュ、及び/又はシステムメモリへのインタフェースであり得る。
幾つかの実施形態では、グラフィックプロセッサ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を含む。
幾つかの実施形態では、グラフィックプロセッサ300は、例えばビット境界ブロック転送を含む2次元(2D)ラスタライザ演算を実行するブロック画像転送(block image transfer:BLIT)エンジン304を含む。しかしながら、一実施形態では、2Dグラフィック演算は、グラフィック処理エンジン(graphics processing engine:GPE)310の1つ以上のコンポーネントを用いて実行される。幾つかの実施形態では、GPE310は、3次元(3D)グラフィック演算及びメディア演算を含むグラフィック演算を実行する計算エンジンである。
幾つかの実施形態では、GPE310は、3D基本形状(例えば、長方形、三角形、等)に対して作用する処理機能を用いて3次元画像及びシーンをレンダリングするような3D演算を実行する3Dパイプライン312を含む。3Dパイプライン312は、要素内で種々のタスクを実行する及び/又は3D/メディアサブシステム315への実行スレッドを生み出すプログラマブル及び固定機能要素を含む。3Dパイプライン312は、メディア演算を実行するために使用可能であるが、GPE310の実施形態も、ビデオ後処理及び画像処理のようなメディア演算を実行するために特に使用されるメディアパイプライン316を含む。
幾つかの実施形態では、メディアパイプライン316は、ビデオコーデックエンジン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の1つのバージョンである。本願明細書の任意の他の図の要素と同じ参照符号(又は名称)を有する図4の要素は、本願明細書の他の場所に記載されたものと同様のいずれかの方法で動作し又は機能し得るが、そのように限定されない。例えば、図3の3Dパイプライン312及びメディアパイプライン316が説明される。メディアパイプライン316は、GPE410の幾つかの実施形態において任意であり、GPE410に明示的に含まれなくてよい。例えば、及び少なくとも一実施形態では、別個のメディア及び/又は画像プロセッサがGPE410に結合される。
幾つかの実施形態では、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つ以上のグラフィックコアを含む。各グラフィックコアは、グラフィック及び計算演算、並びに固定機能テクスチャ処理及び/又は機械学習及び人工知能加速ロジックを実行する汎用及びグラフィック専用実行ロジックを含むグラフィック実行リソースのセットを含む。
種々の実施形態において、3Dパイプライン312は、頂点シェーダ、形状シェーダ、ピクセルシェーダ、フラグメントシェーダ、計算シェーダ、又は他のシェーダプログラムのような1つ以上のシェーダ(shader)プログラムを、命令を処理することにより及び実行スレッドをグラフィックコアアレイ414へディスパッチすることにより処理する固定機能及びプログラマブルロジックを含む。グラフィックコアアレイ414は、これらのシェーダプログラムを処理する際に使用する実行リソースの統合ブロックを提供する。グラフィックコアアレイ414のグラフィックコア415A~415B内の多目的実行ロジック(例えば、実行ユニット)は、種々の3D APIシェーダ言語のサポートを含み、複数のシェーダに関連付けられた複数の同時実行スレッドを実行できる。
幾つかの実施形態では、グラフィックコアアレイ414は、ビデオ及び/又は画像処理のようなメディア機能を実行する実行ロジックも含む。一実施形態では、実行ユニットは、グラフィック処理演算に加えて並列汎用コンピュータ演算を実行するようプログラム可能な汎用ロジックを更に含む。汎用ロジックは、処理演算を、図1のプロセッサコア107又は図2のコア202A~202N内の汎用ロジックと並列に又はそれと関連して実行できる。
グラフィックコアアレイ414上で実行するスレッドにより生成された出力データは、統合リターンバッファ(unified return buffer:URB)418内のメモリへデータを出力できる。URB418は、複数のスレッドのデータを格納できる。幾つかの実施形態では、URB418は、グラフィックコアアレイ414上で実行する異なるスレッド間でデータを送信するために使用されてよい。幾つかの実施形態では、URB418は、グラフィックコアアレイ上のスレッドと共有機能ロジック420内の固定機能ロジックと間の同期化のために更に使用されてよい。
幾つかの実施形態では、グラフィックコアアレイ414は拡張可能である。その結果、アレイは、可変数のグラフィックコアを含み、各グラフィックコアは、GPE410の目標電力及び性能レベルに基づき可変数の実行ユニットを有する。一実施形態では、実行リソースは動的に格納可能である。その結果、実行リソースは、必要に応じて有効に又は無効にされてよい。
グラフィックコアアレイ414は、グラフィックコアアレイ内のグラフィックコア間で共有される複数のリソースを含む共有機能ロジック420に結合する。共有機能ロジック420内の共有機能は、特別補足機能をグラフィックコアアレイ414に提供するハードウェアロジックユニットである。種々の実施形態において、共有機能ロジック420は、限定ではないが、サンプラ421、計算422、及びスレッド間通信(inter-thread communication:ITC)423ロジックを含む。さらに、幾つかの実施形態は、共有機能ロジック420内に1つ以上のキャッシュ425を実装する。
共有機能が実装される。ここで、所与の特別機能に対する要求がグラフィックコアアレイ414に含まれるのでは不十分である。代わりに、該特別機能の単一のインスタンス化が、共有機能ロジック420内のスタンドアロンエンティティとして実装され、グラフィックコアアレイ414内の実行リソースの間で共有される。グラフィックコアアレイ414の間で共有され及びグラフィックコアアレイ414内に含まれる機能の正確なセットは、実施形態の間で変わる。幾つかの実施形態では、共有機能ロジック420内の、グラフィックコアアレイ414により幅広く使用される特定共有機能は、グラフィックコアアレイ414内の共有機能ロジック416内に含まれてよい。種々の実施形態で、グラフィックコアアレイ414内の共有機能ロジック416は、共有機能ロジック420内の一部又は全部のロジックを含み得る。一実施形態では、共有機能ロジック420内の全部のロジック要素は、グラフィックコアアレイ414の共有機能ロジック416内で複製されてよい。一実施形態では、共有機能ロジック420は、グラフィックコアアレイ416の共有機能ロジック416に賛成して取り除かれる。
図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のメディアパイプライン)は、画像及びビデオデータを含むマルチメディアデータの復号、符号化、前処理、及び/又は後処理を実現するロジックを含む。メディアパイプライン539は、サブコア501A~501F内の計算又はサンプリングロジックへの要求を介してメディア演算を実施する。
一実施形態では、SoCインタフェース537は、グラフィックプロセッサコア500が、汎用アプリケーションプロセッサコア(例えば、CPU)、及び/又は共有ラストレベルキャッシュメモリ、システムRAM及び/又は内蔵オンチップ若しくはオンパッケージDRAMのようなメモリ階層的要素を含むSoC内の他のコンポーネントと通信することを可能にする。SoCインタフェース537は、カメラ画像パイプラインのようなSoC内の固定機能装置との通信も可能にでき、グラフィックプロセッサコア500とSoC内のCPUとの間で共有され得るグローバルメモリアトミックの使用を可能にし及び/又はそれを実装する。SoCインタフェース537は、電グラフィックプロセッサコア500の力管理制御も実装し、グラフィックコア500のクロックドメインとSoC内の他のクロックドメインとの間のインタフェースを可能にし得る。一実施形態では、SoCインタフェース537は、コマンド及び命令をグラフィックプロセッサ内の1つ以上のグラフィックコアの各々に提供するよう構成されるコマンドストリーマ及びグローバルスレッドディスパッチ部からの、コマンドバッファの受信を可能にする。コマンド及び命令は、メディア演算が実行されるときメディアパイプライン539へ、又はグラフィック処理演算が実行されるとき形状及び固定機能パイプライン(例えば、形状及び固定機能パイプライン536、形状及び固定機能パイプライン514)へ、ディスパッチされ得る。
グラフィックマイクロコントローラ538は、グラフィックプロセッサコア500のために種々のスケジューリング及び管理タスクを実行するよう構成され得る。一実施形態では、グラフィックマイクロコントローラ538は、サブコア501A~501F内の実行ユニット(execution unit:EU)アレイ502A~502F、504A~504F内の種々のグラフィック並列エンジンで、グラフィック及び/又は計算負荷スケジューリングを実行し得る。このスケジューリングモデルでは、グラフィックプロセッサコア500を含むSoCのCPUコア上で実行するホストソフトウェアは、適切なグラフィックエンジン上でのスケジューリング演算を呼び出す、複数のグラフィックプロセッサドアベル(doorbell)のうちの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は、位置限定シェーディング(position only shading)に使用するために、追加形状パイプラインを含む。位置限定シェーディングでは、2つの形状パイプラインが存在する。形状/固定機能パイプライン516、536内の完全形状パイプライン、及び追加固定機能ロジック516に含まれてよい追加形状パイプラインであるカル(cull)パイプラインである。一実施形態では、カルパイプラインは、完全形状パイプラインの縮小バージョンである。完全パイプライン及びカルパイプラインは、同じアプリケーションの異なるインスタンスを実行し得る。各インスタンスは別個のコンテキストを有する。適所のみシェーディングは、廃棄された三角形の長いカルラン(run)を隠すことができ、幾つかの例では、シェーディングをより早く完了させることができる。例えば、一実施形態では、追加固定機能ロジック516内のカルパイプラインロジックは、位置シェーダを主アプリケーションと並列に実行でき、通常、完全パイプラインより速く重要な結果を生成する。これは、カルパイプラインが頂点の位置属性のみをフェッチしシェーディングし、フレームバッファへのピクセルのラスタライズ及びレンダリングを実行しないからである。カルパイプラインは、生成した重要な結果を用いて、三角形が間引かれた(culled)か否かに拘わらず、全ての三角形の可視性情報を計算する。完全パイプライン(本例ではリプレイパイプラインと呼ばれることがある)は、可視性情報を消費して、カリングされた三角形をスキップし、最終的にラスタライズ段階に渡される可視三角形のみをシェーディングする。
一実施形態では、追加固定機能ロジック516は、機械学習トレーニング又は推定の最適化を含む実装のために、固定機能行列乗算ロジックのような機械学習加速ロジックを更に含み得る。
各グラフィックサブコア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を利用でき、スレッドグループ内で実行するスレッドがオンチップメモリの共通プールを用いて実行できるようにする。
<実行ユニット>
図6A~6Bは、本願明細書に記載の実施形態によるグラフィックプロセッサコアで利用される処理要素のアレイを含むスレッド実行ロジック600を示す。本願明細書の任意の他の図の要素と同じ参照符号(又は名称)を有する図6A~6Bの要素は、本願明細書の他の場所に記載されたものと同様のいずれかの方法で動作し又は機能し得るが、そのように限定されない。図6Aは、図5の各サブコア501A~501Fと共に図示したハードウェアロジックの変形を含み得るスレッド実行ロジック600の概観を示す。図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つ以上の実行ユニット上でインスタンス化するロジックを含む。例えば、形状パイプラインは、頂点、モザイク又はテッセレーション(tessellation)、又は形状シェーダを、処理のためにスレッド実行ロジックにディスパッチできる。幾つかの実施形態では、スレッドディスパッチャ604は、実行中のシェーダプログラムからの実行時間スレッド生成要求も処理できる。
幾つかの実施形態では、実行ユニット608A~608Nは、多くの標準3Dグラフィックシェーダ命令を元来サポートする命令セットをサポートする。その結果、グラフィックライブラリ(例えば、Direct 3D及びOpenGL)からのシェーダプログラムは、最小限の変換で実行される。実行ユニットは、頂点及び形状処理(例えば、頂点プログラム、形状プログラム、頂点シェーダ)、ピクセル処理(例えば、ピクセルシェーダ、フラグメントシェーダ)、及び汎用処理(例えば、計算及び媒体シェーダ)をサポートする。実行ユニット608A-608Nの各々は、SIMD(multi-issue single instruction multiple data)実行が可能であり、多スレッド動作は、より大きな遅延のメモリアクセスに直面する効率的な実行環境を可能にする。各実行ユニットの中の各ハードウェアスレッドは、専用高帯域幅レジスタファイル及び関連する独立スレッド状態を有する。実行は、パイプラインへのクロック毎のマルチイシュー(multi-issue)であり、整数、単及び倍精度浮動小数点演算、SIMD分岐能力、論理演算、超越論的演算、及び他の種々雑多な演算が可能である。メモリ又は共有機能のうちの1つからのデータを待機している間、実行ユニット608A-608N内の従属ロジックは、要求したデータが返されるまで待機スレッドをスリープさせる。待機スレッドがスリープしている間、ハードウェアリソースは、他のスレッドの処理に専念してよい。例えば、頂点シェーダ演算に関連する遅延の間、実行ユニットは、ピクセルシェーダ、フラグメントシェーダ、又は異なる頂点シェーダを含む別の種類のシェーダプログラムのために演算を実行できる。
実行ユニット608A-608Nの中の各実行ユニットは、データ要素のアレイを演算対象とする。データ要素の数は、「実行サイズ」又は命令のためのチャネル数である。実行チャネルは、データ要素アクセス、マスキング、及び命令内のフロー制御に対する実行の論理ユニットである。チャネル数は、特定のグラフィックプロセッサの物理ALU(Arithmetic Logic Unit)又はFPU(Floating Point Unit)の数と独立であってよい。幾つかの実施形態では、実行ユニット608A-608Nは、整数及び浮動小数点データ型をサポートする。
実行ユニット命令セットは、SIMD命令を含む。種々のデータ要素は、パックされたデータ型としてレジスタに格納でき、実行ユニットは、要素のデータサイズに基づき種々の要素を処理する。例えば、256ビット幅のベクトルを演算対象とするとき、ベクトルの256ビットは、レジスタに格納され、実行ユニットは、4個の別個の64ビットにパックされたデータ要素(クワッドワード(Quad-Word:QW)サイズデータ要素)、3個の別個の32ビットにパックされたデータ要素(ダブルワード(DoubleWord:DW)サイズデータ要素)、16個の別個の16ビットにパックされたデータ要素(ワード(Word:W)サイズデータ要素)、又は32個の別個の8ビットデータ要素(バイト(byte:B)サイズデータ要素)として、ベクトルを演算対象とする。しかしながら、異なるベクトル幅及びレジスタサイズが可能である。
ある実施形態では、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が共通命令ポインタレジスタを使用して実行することを可能にする。
1つ以上の内部命令キャッシュ(例えば606)が、実行ユニットのためにスレッド命令をキャッシュするために、スレッド実行ロジック600に含まれる。幾つかの実施形態では、1つ以上のデータキャッシュ(例えば612)は、スレッド実行中にスレッドデータをキャッシュするために含まれる。幾つかの実施形態では、サンプラ610は、3D演算のためのテクスチャサンプリング及びメディア演算のためのメディアサンプリングを提供するために含まれる。幾つかの実施形態では、サンプラ610は、サンプリングされたデータを実行ユニットに提供する前に、サンプリングプロセス中にテクスチャ又はメディアデータを処理するために、特定テクスチャ又はメディアサンプリング機能を含む。
実行中、グラフィック及びメディアパイプラインは、スレッド開始要求をスレッド実行ロジック600へ、スレッド生成(spawning)及びディスパッチ(dispatch)ロジックを介して送信する。幾何学オブジェクトのグループが処理され、ピクセルデータにラスタライズされると、シェーダプロセッサ602内のピクセルプロセッサロジック(例えば、ピクセルシェーダロジック、フラグメントシェーダロジック、等)が呼び出され、出力情報を更に計算し及び出力面(例えば、色バッファ、深さバッファ、ステンシルバッファ、等)に書き込まれるべき結果を生じる。幾つかの実施形態では、ピクセルシェーダ又はフラグメントシェーダは、ラスタライズされたオブジェクト全体に挿入されるべき種々の頂点属性の値を計算する。幾つかの実施形態では、シェーダプロセッサ602内のピクセルプロセッサロジックは、API(application programming interface)の供給したピクセル又はフラグメントシェーダプログラムを実行する。シェーダプログラムを実行するために、シェーダプロセッサ602は、スレッドを実行ユニット(例えば608A)へ、スレッドディスパッチャ604を介してディスパッチする。幾つかの実施形態では、シェーダプロセッサ602は、サンプラ610内のテクスチャサンプリングロジックを使用して、メモリに格納されたテクスチャマップ内のテクスチャデータにアクセスする。テクスチャデータ及び入力幾何学データに対する算術演算は、各幾何学フラグメントのピクセル色データを計算し、又は1つ以上のピクセルを将来の処理から破棄する。
幾つかの実施形態では、データポート614は、グラフィックプロセッサ出力パイプラインでの更なる処理のために処理済みデータをメモリに出力するために、スレッド実行ロジック600にメモリアクセスメカニズムを提供する。幾つかの実施形態では、データポート614は、データポートを介するメモリアクセスのためにデータをキャッシュするために、1つ以上のキャッシュメモリ(例えば、データキャッシュ612)を含み又はそれに結合される。
図6Bに示すように、グラフィック実行ユニット608は、命令フェッチユニット637、汎用レジスタファイルアレイ(general register file array:GRF)624、アーキテクチャレジスタファイルアレイ(architectural register file array:ARF)626、スレッド調停器622、送信ユニット630、分岐ユニット632、SIMD浮動小数点ユニット(FPU)セット634、及び一実施形態では専用整数型SIMD ALUセット635を含む。GRF624及びARF626は、グラフィック実行ユニット608内でアクティブであってよい同時ハードウェアスレッドにそれぞれ関連付けられる汎用レジスタファイル及びアーキテクチャレジスタファイルのセットを含む。一実施形態では、スレッド毎のアーキテクチャ状態はARF626内に保持され、一方で、スレッド実行中に使用されるデータはGRF624に格納される。各スレッドのための命令ポインタを含む、各スレッドの実行状態は、ARF626内のスレッド専用レジスタに保持できる。
一実施形態では、グラフィック実行ユニット608は、同時複数スレッド(Simultaneous Multi-Threading:SMT)及び精細インタリーブド複数スレッド(Interleaved Multi-Threading:IMT)の結合であるアーキテクチャを有する。アーキテクチャは、目標同時スレッド数、及び実行ユニット当たりのレジスタ数に基づき、設計時に微調整可能なモジュラ構成を有する。ここで、実行ユニットリソースは、複数同時スレッドを実行するために使用されたロジックに渡り分割される。
一実施形態では、グラフィック実行ユニット608は、それぞれ異なる命令であってよい複数命令を同時発行(co-issue)できる。グラフィック実行ユニットスレッド608のスレッド調停器622は、命令を送信ユニット630、分岐ユニット6342、又はSIMD FPU634へ実行のためにディスパッチできる。各実行スレッドは、GRF624内の128個の汎用レジスタにアクセスできる。ここで、各レジスタは、SIMDとして32ビットのデータ要素の8要素ベクトルにアクセス可能な32バイトを格納できる。一実施形態では、各実行ユニットスレッドは、GRF624内の4Kバイトへのアクセスを有する。しかしながら、実施形態はこれに限定されず、他の実施形態ではより多くの又は少ないレジスタリソースが設けられてよい。一実施形態では、最大7個のスレッドが同時実行可能である。しかしながら、実行ユニット当たりのスレッドの数は、実施形態によって変化し得る。7個のスレッドが4Kバイトにアクセスし得る実施形態では、GRF624は合計28Kバイトを格納できる。柔軟なアドレスモードは、レジスタが一緒にアドレス指定されて、効率的により幅広なレジスタを構築すること、又は発展した(strided)方形ブロックデータ構造を表すことを可能にする。
一実施形態では、メモリ動作、サンプラ動作、及び他のより長い遅延のシステム通信は、メッセージ受け渡し送信ユニット630により実行される「送信」命令によりディスパッチされる。一実施形態では、分岐命令は、SIMD分岐及び最終的収束を促進する専用分岐ユニット632へディスパッチされる。
一実施形態では、グラフィック実行ユニット608は、浮動小数点演算を実行するために1つ以上のSIMD浮動小数点ユニット(FPU)634を含む。一実施形態では、FPU634は、整数計算もサポートする。一実施形態では、FPU634は、最大M個の32ビット浮動小数点(又は整数)演算をSIMD実行し、又は最大2M個の16ビット整数若しくは16ビット浮動小数点演算をSIMD実行できる。一実施形態では、FPUのうちの少なくとも1つは、高スループットの卓越した演算機能及び倍精度の64ビット浮動小数点をサポートするために、拡張演算能力を提供する。幾つかの実施形態では、8ビット整数SIMD ALUセット635も存在し、機械学習計算に関連する演算を実行するために特に最適化されてよい。
一実施形態では、グラフィック実行ユニット608の複数のインスタンスのアレイは、グラフィックサブコアグルーピング(例えば、サブスライス)内でインスタンス化できる。拡張性のために、製品アーキテクチャは、サブコアグルーピング当たりの正確な実行ユニット数を選択できる。一実施形態では、実行ユニット608は、複数の実行チャネルに渡り命令を実行できる。更なる実施形態では、グラフィック実行ユニット608上で実行される各スレッドは、異なるチャネル上で実行される。
図7は、幾つかの実施形態によるグラフィックプロセッサ命令フォーマットを示すブロック図である。1つ以上の実施形態で、グラフィックプロセッサ実行ユニットは、複数のフォーマットの命令を有する命令セットをサポートする。実線ボックスは、実行ユニット命令に通常含まれるコンポーネントを示す。一方、破線は、任意の又は命令のサブセットにのみ含まれるコンポーネントを含む。幾つかの実施形態では、説明され図示される命令フォーマット700は、マクロ命令である。ここで、マクロ命令は実行ユニットに供給される命令である。これに対し、マイクロ演算は、命令が処理されると命令デコードから生じる。
幾つかの実施形態では、グラフィックプロセッサ実行ユニットは、本来、128ビット命令フォーマット710の命令をサポートする。64ビットの小型命令フォーマット730は、選択された命令、命令オプション、及びオペランド数に基づき、幾つかの命令で利用可能である。ネイティブの128ビット命令フォーマット710は、全ての命令オプションへのアクセスを提供する。一方で、幾つかのオプション及び演算は、64ビットフォーマット730で制限される。64ビットフォーマット730で利用可能なネイティブ命令は、実施形態により変化する。幾つかの実施形態では、命令は、インデックスフィールド713内のインデックス値のセットを用いて部分的に圧縮される。実行ユニットハードウェアは、インデックス値に基づき圧縮テーブルのセットを参照し、圧縮テーブル出力を用いて、128ビット命令フォーマット710内のネイティブ命令を再構成する。
フォーマット毎に、命令オペコード712は、実行ユニットが実行しようとする演算を定める。実行ユニットは、各オペランドの複数のデータ要素に渡り、各命令を並行して実行する。例えば、加算命令に応答して、実行ユニットは、テクスチャ要素又はピクチャ要素を表す各色チャネルに渡り、同時加算演算を実行する。デフォルトで、実行ユニットは、オペランドの全てのデータチャネルに渡り各命令を実行する。幾つかの実施形態では、命令制御フィールド714は、チャネル選択(例えば、予測)及びデータチャネル順序(例えばスイズル(swizzle))のような特定の実行オプションに対する制御を可能にする。128ビット命令フォーマット710の命令では、実行サイズフィールド716は、並列に実行されるデータチャネルの数を制限する。幾つかの実施形態では、実行サイズフィールド716は、64ビット小型命令フォーマット730での使用のために利用できない。
幾つかの実行ユニット命令は、2個のソースオペランド、src0 720、src1 722、及び1個の宛先718を含む、最大3個のオペランドを有する。幾つかの実施形態では、実行ユニットは、宛先の1つが示唆される同報送信(dual destination)命令をサポートする。データ操作命令は、第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は、実行ユニットがオペコードの種類を決定することを可能にする。図示の明確なオペコードグループ化は、単なる一例である。幾つかの実施形態では、移動(move)及びロジックオペコードグループ742は、データ移動及びロジック命令(例えば、移動(mov)、比較(cmp))を含む。幾つかの実施形態では、移動及びロジックオペコードグループ742は、5個の最上位ビット(most significant bit:MSB)を共有する。ここで、移動(mov)命令は0000xxxxbの形式であり、ロジック命令は0001xxxxbの形式である。フロー制御命令グループ744(例えば、呼び出し、ジャンプ(jmp))は、0010xxxxb(例えば、0x20)の形式の命令を含む。種々雑多な命令グループ746は、0011xxxxb(例えば0x30)の形式の同期命令(例えば、待機、送信)を含む、命令の混合を含む。並列算術命令グループ748は、0100xxxxb(例えば、0x40)の形式のコンポーネントに渡る算術演算命令(例えば、加算、乗算(mul))を含む。並列算術グループ748は、データチャネルに渡り並列に算術演算を実行する。ベクトル算術グループ750は、0101xxxxb(例えば、0x50)の形式の算術演算命令(例えばdp4)を含む。ベクトル算術グループは、ベクトルオペランドに対してドット積計算のような算術演算を実行する。
<グラフィックパイプライン>
図8は、グラフィックプロセッサ800の別の実施形態のブロック図である。本願明細書の任意の他の図の要素と同じ参照符号(又は名称)を有する図8の要素は、本願明細書の他の場所に記載されたものと同様のいずれかの方法で動作し又は機能し得るが、そのように限定されない。
幾つかの実施形態では、グラフィックプロセッサ800は、幾何学パイプライン820、メディアパイプライン830、ディスプレイエンジン840、スレッド実行ロジック850、及びレンダ出力パイプライン870を含む。幾つかの実施形態では、グラフィックプロセッサ800は、1つ以上の汎用処理コアを含むマルチコア処理システム内のグラフィックプロセッサである。グラフィックプロセッサは、1つ以上の制御レジスタ(図示しない)へのレジスタ書き込みにより、又はリング相互接続802を介するグラフィックプロセッサ800へ発行されるコマンドにより、制御される。幾つかの実施形態では、リング相互接続802は、グラフィックプロセッサ800を、他のグラフィックプロセッサ又は汎用プロセッサのような他の処理コンポーネントに結合する。リング相互接続802からのコマンドは、幾何学パイプライン820又はメディアパイプライン830の個々のコンポーネントに命令を供給するコマンドストリーマ803により解釈される。
幾つかの実施形態では、コマンドストリーマ803は、頂点データをメモリから読み出し及びコマンドストリーマ803により提供された頂点処理コマンドを実行する頂点フェッチャ805の動作を指示する。幾つかの実施形態では、頂点フェッチャ805は、頂点データを頂点シェーダ807に提供する。頂点シェーダ807は、各頂点への調整空間変化及び照明演算を実行する。幾つかの実施形態では、頂点フェッチャ805及び頂点シェーダ807は、実行スレッドを実行ユニット852A~852Bへスレッドディスパッチャ831を介してディスパッチすることにより、頂点処理命令を実行する。
幾つかの実施形態では、実行ユニット852A~852Bは、グラフィック及びメディア演算を実行するための命令セットを有するベクトルプロセッサのアレイである。幾つかの実施形態では、実行ユニット852A~852Bは、各アレイに特有の又はアレイ間で共有される付属のL1キャッシュ851を有する。キャッシュは、データキャッシュ、命令キャッシュ、又は異なるパーティションにデータ及び命令を含むために区分される単一キャッシュとして構成できる。
幾つかの実施形態では、幾何学パイプライン820は、3Dオブジェクトのハードウェア高速化テッセレーション(hardware-accelerated tessellation)を実行するテッセレーションコンポーネントを含む。幾つかの実施形態では、プログラマブルハル(hull)シェーダ811が、テッセレーション演算を構成する。プログラマブルドメインシェーダ817は、テッセレーション出力のバックエンド評価を提供する。テッセレータ813は、ハルシェーダ811の指示で動作し、幾何学パイプライン820に入力として提供される粗幾何学モデルに基づき詳細幾何学オブジェクトのセットを生成するための特定目的ロジックを含む。幾つかの実施形態では、テッセレーションが使用されない場合、テッセレーションコンポーネント(例えば、ハルシェーダ811、テッセレータ813、及びドメインシェーダ817)は、迂回可能である。
幾つかの実施形態では、完成した幾何学オブジェクトは、幾何学シェーダ819により、実行ユニット852A~852Bへディスパッチされた1つ以上のスレッドを介して処理でき、又はクリッパ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を含む。幾つかの実施形態では、ラスタライザロジックは、固定機能トライアングル及び線ラスタライズを実行するために、ウインドウ/マスクユニットを含む。幾つかの実施形態では、関連するレンダキャッシュ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は、複数のグラフィック及びメディアプログラミングインタフェースに基づき演算を実行するよう構成可能であり、任意の1つのアプリケーションプログラミングインタフェース(API)に特有ではない。幾つかの実施形態では、グラフィックプロセッサのためのドライバソフトウェアは、特定のグラフィック又はメディアライブラリに特有のAPI呼び出しを、グラフィックプロセッサにより処理可能なコマンドに変換する。幾つかの実施形態では、OpenGL(Open Graphics Library)、OpenCL(Open Computing Language)、及び/又はVulkanグラフィック及び計算API、Khronos Groupの全部のためにサポートが提供される。幾つかの実施形態では、Microsoft社の直接3Dライブラリのためのサポートも提供されてよい。幾つかの実施形態では、これらのライブラリの組合せがサポートされてよい。サポートは、OpenCV(Open Source Computer Vision Library)についても提供されてよい。互換性のある3Dパイプラインを有する将来のAPIも、将来のAPIのパイプラインからグラフィックプロセッサのパイプラインへのマッピングが行われ得る場合、サポートされ得る。
<グラフィックパイプラインプログラミング>
図9Aは、幾つかの実施形態によるグラフィックプロセッサコマンドフォーマットを示すブロック図である。図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は、コンテキストが両方のパイプラインにコマンドを発行することでない限り、パイプラインコマンドを発行する前に、実行コンテキスト内で1度だけ要求される。幾つかの実施形態では、パイプラインフラッシュコマンド912は、パイプライン選択コマンド913によるパイプライン切り替えの直前に要求される。
幾つかの実施形態では、パイプライン制御コマンド914は、グラフィックパイプラインを演算のために構成し、3Dパイプライン922及びメディアパイプライン924をプログラムするために使用される。幾つかの実施形態では、パイプライン制御コマンド914は、アクティブパイプラインのパイプライン状態を構成する。一実施形態では、パイプライン制御コマンド914は、パイプライン同期のために使用され、コマンドのバッチを処理する前にアクティブパイプライン内の1つ以上のキャッシュメモリからのデータをクリアする。
幾つかの実施形態では、リターンバッファ状態コマンド916は、データを書き込むために、それぞれのパイプラインのリターンバッファのセットを構成するために使用される。幾つかのパイプライン演算は、演算が処理中に中間データを書き込む1つ以上のリターンバッファの割り当て、選択、又は構成を必要とする。幾つかの実施形態では、グラフィックプロセッサは、また、1つ以上のリターンバッファを使用して、出力データを格納し、及びスレッド間通信を実行する。幾つかの実施形態では、リターンバッファ状態916は、パイプライン演算のセットのために使用するリターンバッファのサイズ及び数を選択することを含む。
コマンドシーケンスの中の残りのコマンドは、演算のためのアクティブパイプラインに基づき異なる。パイプライン決定920に基づき、コマンドシーケンスは、3Dパイプライン状態930で開始する3Dパイプライン、又はメディアパイプライン状態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は、実行932コマンド又はイベントによりトリガされる。幾つかの実施形態では、レジスタ書き込みは、コマンド実行をトリガする。幾つかの実施形態では、実行は、コマンドシーケンス内の「go」又は「kick」コマンドによりトリガされる。一実施形態では、コマンド実行は、パイプライン同期コマンドを用いてトリガされ、グラフィックパイプラインを通じてコマンドシーケンスをフラッシュする。3Dパイプラインは、3Dプリミティブのために幾何学処理を実行する。演算が完了すると、結果として生じた幾何学オブジェクトはラスタライズされ、ピクセルエンジンは結果として生じたピクセルを着色する。ピクセルシェーディング及びピクセルバックエンド演算を制御するための追加コマンドも、これらの演算のために含まれてよい。
幾つかの実施形態では、グラフィックプロセッサコマンドシーケンス910は、メディア演算を実行するとき、メディアパイプライン924パスを辿る。通常、メディアパイプライン924の特定の仕様及びプログラミング方法は、実行されるべきメディア又は計算演算に依存する。特定のメディア復号演算は、メディア復号中のメディアパイプラインにオフロードされてよい。幾つかの実施形態では、メディアパイプラインも迂回可能であり、メディア復号は、1つ以上の汎用処理コアにより提供されるリソースを全体として又は部分的に用いて実行され得る。一実施形態では、メディアパイプラインも、汎用グラフィックプロセッサユニット(general-purpose graphics processor unit:GPGPU)演算のための要素を含む。ここで、グラフィックプロセッサは、グラフィックプリミティブのレンダリングに明示的に関連しないコンピュータシェーダプログラムを用いてSIMDベクトル演算を実行するために使用される。
幾つかの実施形態では、メディアパイプライン924は、3Dパイプライン922と同様の方法で構成される。メディアパイプライン状態940を構成するコマンドのセットは、メディアオブジェクトコマンド924の前にコマンドシーケンスにディスパッチされ又は配置される。幾つかの実施形態では、メディアパイプライン状態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(High Level Shader Language)又はGLSL(OpenGL Shader Language)のような高級シェーダ言語のものであってよい。アプリケーションは、汎用プロセッサコア1034による実行に適する機械言語で実行命令1014も含む。アプリケーションは、頂点データにより定義されるグラフィックオブジェクト1016も含む。
幾つかの実施形態では、オペレーティングシステム1020は、Microsoft社の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)のバージョンのような中間形式で提供される。
幾つかの実施形態では、ユーザモードグラフィックドライバ1026は、シェーダ命令1012をハードウェア特有表現に変換するバックエンドシェーダコンパイラ1027を含む。OpenGL APIが使用されるとき、GLSL高級言語のシェーダ命令は、コンパイルのためにユーザモードグラフィックドライバ1026に渡される。幾つかの実施形態では、ユーザモードグラフィックドライバ1026は、カーネルモードグラフィックドライバ1029と通信するために、オペレーティングシステムカーネルモード機能1028を用いる。幾つかの実施形態では、カーネルモードグラフィックドライバ1029は、コマンド及び命令をディスパッチするためにグラフィックプロセッサ1032と通信する。
<IPコア実装>
少なくとも1つの実施形態の1つ以上の態様は、プロセッサのような集積回路内のロジックを表す及び/又は定義する、機械可読媒体に格納された代表的なコードにより実装されてよい。例えば、機械可読媒体は、プロセッサ内の種々のロジックを表す命令を含んでよい。機械により読み取られると、命令は、該機械に、本願明細書に記載の技術を実行するロジックを作らせてよい。このような表現は、「IPコア」としてしられ、集積回路の構造を記述するハードウェアモデルのような、有形機械可読媒体に格納されてよい集積回路のためのロジックの使用可能なユニットである。ハードウェアモデルは、集積回路を生産するハードウェアモデルを製造機械にロードする、様々な顧客又は製造設備に供給されてよい。回路が本願明細書に記載の実施形態のうちのいずれかに関連して記載された動作を実行するように、集積回路は製造されてよい。
図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に加えて、ロジックレベル又はトランジスタレベルの低レベル設計も、生成され、設計され、又は合成されてよい。したがって、初期設計及びシミュレーションの特定の詳細事項は変化し得る。
RTL設計1115又は均等物は、更に、設計設備によりハードウェアモデル1120へと合成されてよい。ハードウェアモデル1120は、ハードウェア記述言語(hardware description language: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~14は、本願明細書に記載の種々の実施形態による、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(登録商標)(high-definition multimedia interface)制御部1250及びMIPI(mobile industry processor interface)ディスプレイインタフェース1255のうちの1つ以上に結合されるディスプレイ装置1245を含み得る。記憶装置は、フラッシュメモリ及びフラッシュメモリ制御部を含むフラッシュメモリサブシステム1260により提供されてよい。メモリインタフェースは、SDRAM又はSRAMメモリ装置へのアクセスのためにメモリ制御部1265により提供されてよい。幾つかの集積回路は、追加で、内蔵セキュリティエンジン1270を含む。
図13A~13Bhが、本願明細書に記載の実施形態による、SoC内で使用される例示的なグラフィックプロセッサを示すブロック図である。図13Aは、実施形態による、1つ以上のIPコアを用いて製造され得るシステムオンチップ集積回路の例示的なグラフィックプロセッサ1310を示す。図13Bは、実施形態による、1つ以上のIPコアを用いて製造され得るシステムオンチップ集積回路の追加の例示的なグラフィックプロセッサ1340を示す。図13Aのグラフィックプロセッサ1310は、低電力グラフィックプロセッサコアの一例である。図13Bのグラフィックプロセッサ1340は、高性能グラフィックプロセッサコアの一例である。グラフィックプロセッサ1310、1340の各々は、図12のグラフィックプロセッサの変形であり得る。
図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内で提供されるとき、フラグメントシェーダプログラムを実行するために最適化される。
グラフィックプロセッサ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、画像プロセッサ12015、及び/又はビデオプロセッサ1220に関連する1つ以上のMMUを含む、システム内の他のMMUと同期化されてよい。その結果、各プロセッサ1205~1220は、共有又は統一された仮想メモリシステムに参加できる。1つ以上の回路相互接続1330A~1330Bは、実施形態により、グラフィックプロセッサ1310に、SoCの内部バスを介して又は直接接続を介して、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は、コアタスク間マネジャ1345を含む。コアタスク間マネジャ1345は、実行スレッドを1つ以上のシェーダコア1355A~1355Nへディスパッチするスレッドディスパッチャ、及びタイルベースのレンダリングのためのタイリング演算を加速化するタイリングユニット1358として動作する。ここで、シーンのレンダリング演算は、画像空間に細分化され、例えばシーン内の局所的空間コヒーレンスを利用する、又は内部キャッシュの使用を最適化する。
図14A~14Bは、本願明細書に記載の実施形態による追加の例示的なグラフィックプロセッサロジックを示す。図14Aは、図12のグラフィックプロセッサ1210内に含まれてよい及び図13Bにおけるような統一シェーダコア1355A~1355Nであってよい、グラフィックコア1400を示す。図14Bは、マルチチップモジュールでの展開に適する高度に並列化された汎用グラフィック処理ユニットである、追加の高度並列汎用グラフィック処理ユニット1430を示す。
図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)のセットを含み得る。
計算ユニットのうちの幾つかは、特定の精度で動作する。例えば、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、等)を含む、浮動小数点又は整数ユニットによりサポートされない追加論理演算を実行できる。
図14Bに示すように、汎用処理ユニット(general-purpose processing unit:GPGPU)は、高度並列計算演算を、グラフィック処理ユニットのアレイにより実行させるよう構成され得る。更に、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(dynamic random access memory)、又はGDDR(graphics double data rate)メモリを含むSGRAM(synchronous graphics random access memory)のようなグラフィックランダムアクセスメモリを含む様々な種類のメモリ装置を含み得る。
一実施形態では、計算クラスタ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ブリッジに結合される。一実施形態では、GPUリンク1440は、他のGPGPU又は並列プロセッサへデータを送信し及び受信するために、高速相互接続に結合する。一実施形態では、GPGPU1430の複数のインスタンスは、別個のデータ処理システム内に置かれ、ホストインタフェース1432を介してアクセス可能なネットワーク装置を介して通信する。一実施形態では、GPUリンク1440は、ホストインタフェース1432に追加して又はその代わりに、ホストプロセッサへの接続を可能にするよう構成され得る。
GPGPU1430の図示した構成は、ニューラルネットワークをトレーニングするよう構成されるが、一実施形態は、高性能又は低電力推定(inferencing)プラットフォーム内で展開するために構成され得るGPGPU1430の代替構成を提供する。推定構成では、GPGPU1430は、トレーニング構成と比べて、より少ない計算クラスタ1436A~1436Hを含む。さらに、メモリ1434A~1434Bに関連するメモリ技術は、推定及びトレーニング構成の間で異なってよく、より高い帯域幅メモリ技術がトレーニング構成に充てられる。一実施形態では、GPGPU1430の推定構成は、特定命令の推定をサポートできる。例えば、推定構成は、展開されたニューラルネットワークの推定演算中に共通に使用される1つ以上の8ビット整数ドット積命令のサポートを提供できる。
<<機械学習による光線追跡>>
上述のように、光線追跡(Ray tracing、光線追跡法)は、光の伝搬が物理法則に基づくレンダリングを通じてシミュレートされるグラフィック処理技術である。光線追跡における主要な演算の1つは、BVH(bounding volume hierarchy)の中でノードのトラバース及び交差テストを要求する見通し(visibility)クエリを処理することである。
光線及び経路追跡に基づく技術は、各ピクセルを通じて光線及び経路を追跡すること、及び陰影、光沢度、間接照明、等のような高度な効果を計算するためにランダムサンプリングを用いることにより画像を計算する。少数のみのサンプルを使用することは、高速であるが、ノイズの多い画像を生成する。一方で、多数のサンプルを使用することは、高品質画像を生成するが、桁違いのコストがかかる。
最近数年で、光線/経路追跡をリアルタイムで使用するための飛躍的進歩を遂げるソリューションが「ノイズ除去」の形式で現れている。ノイズの多い少ないサンプル数入力から、高品質フィルタリングされ/ノイズ除去された画像を生成する画像処理技術を使用する処理である。最も効率的なノイズ除去技術は、機械学習エンジンが、ノイズの多い画像がより多数のサンプルで計算された場合に何に似て見えるかを学習する機械学習技術に依存する。ある特定の実装では、機械学習は、畳み込みニューラルネットワーク(convolutional neural network:CNN)により実行される。しかしながら、本発明の基礎にある原理は、CNN実装に限定されない。このような一実装では、トレーニングデータは、低サンプル数入力及び真値(ground-truth)により生成される。CNNは、対象ピクセルの周囲にある、ノイズの多いピクセル入力の近隣から、収束する(converged)ピクセルを予測するようトレーニングされる。
完全ではないが、このAIに基づくノイズ除去技術は、驚くほど効果的であることが分かった。しかしながら、警告は、良好なトレーニングデータが必要であることである。そうでなければ、ネットワークは誤った結果を予測してしまうからである。例えば、アニメーション映画スタジオが陸上シーンを有する過去の映画でノイズ除去CNNをトレーニングし、次にトレーニングしたCNNを使用して、水上に設定された新しい映画からのフレームをノイズ除去しようとする場合、ノイズ除去演算は準最適に実行するだろう。
この問題を解決するために、本発明の一実施形態は、学習データを動的に集め、レンダリングの間、及び絶えず、CNNのような機械学習エンジンを、現在実行中のデータに基づきトレーニングする。したがって、機械学習エンジンを手近にあるタスクのために絶えず向上する。本実施形態は、依然としてランタイム前のトレーニング段階を実行してよいが、ランタイム中に必要に応じて機械学習の重みを調整し続ける。さらに、本実施形態は、フレーム毎又はN個のフレーム毎のサブ領域に対して、学習データの生成を制限することにより、トレーニングに必要な基準データの高い計算コストを回避する。特に、フレームのノイズの多い入力は、現在のネットワークによる完全なフレームのノイズ除去のために生成される。さらに、後述のように、基準ピクセルの小領域が生成され、連続トレーニングのために使用される。
CNN実装が特定の実施形態に関して記載されるが、限定ではなく教師あり学習(例えば、入力及び所望の出力の両方を含むデータセットの数学モデルを構築する)、教師なし学習(例えば、特定種類の構造について入力データを評価する)、及び/又は教師あり及び教師なし学習の組み合わせを含む任意の形式の機械学習が使用されてよい。
既存のノイズ除去実装は、トレーニング段階及びランタイム段階で動作する。トレーニング段階の間、ピクセル色、深さ、法線、正規偏差、プリミティブID、及び、アルベド(albedo)のような種々のピクセル毎データチャネルを有するN×Nピクセルの領域を受信し及び最終ピクセル色を生成する、ネットワークトポロジが定められる。「代表的」トレーニングデータのセットは、低サンプル数入力に値する1フレームのものを用いて、及び非常に高いサンプル数により計算された「所望の」ピクセル色を参照して、生成される。ネットワークは、これらの入力に向かってトレーニングされ、ネットワークの「理想的」重みのセットを生成する。これらの実装では、基準データは、ネットワークの出力を所望の結果に最も近く一致させる、ネットワークの重みをトレーニングするために使用される。
ランタイムにおいて、所与の予め計算された理想ネットワーク重みがロードされ、ネットワークが初期化される。フレーム毎に、ノイズ除去入力の低サンプル数画像(つまり、トレーニングのために使用されるものと同じ)が生成される。ピクセル毎に、ピクセルの入力の所与の近隣がネットワークを通され、「所望の」ピクセル色を予測し、ノイズ除去されたフレームを生成する。
図15は、初期トレーニング実装の一実施形態を示す。機械学習エンジン1500(例えば、CNN)は、ピクセル色、深さ、法線、正規偏差、プリミティブID、及び、アルベド(albedo)のような種々のピクセル毎データチャネルを有する、高サンプル数画像データ1702のようなN×Nピクセルの領域を受信し及び最終ピクセル色を生成する。代表的トレーニングデータは、低サンプル数入力1501に値する1フレームのものを用いて生成される。ネットワークは、これらの入力に向けてトレーニングされ、機械学習エンジン1500が後にランタイムで低サンプル数画像をノイズ除去するために使用する「理想的な」重み1505のセットを生成する。
上述の技術を向上させるために本発明の一実施形態は、フレーム又はフレームのサブセット毎に(例えば、ん=2,3,4,10,25等であるNフレーム毎に)新しいトレーニングデータを生成するよう、ノイズ除去段階を強化する。特に、図16に示すように、本実施形態は、各フレーム内の1つ以上の領域を選択する。該領域は、ここでは、高サンプル数で別個の高サンプル数バッファ1604にレンダリングされる「新基準領域」1602と呼ばれる。低サンプル数バッファ1603は、(新基準領域1602に対応する低サンプル領域1604を含む)低サンプル数入力フレーム1601を格納する。
一実施形態では、新基準領域1602の位置はランダムに選択される。代替として、新基準領域1602の位置は、新フレーム毎に予め指定された方法で(例えば、フレームの中心等にある指定領域に限定される、フレーム間の領域の所定の動きを用いて)調整されてよい。
新基準領域がどのように選択されるかに拘わらず、新基準領域は、機械学習エンジン1600により使用され、ノイズ除去に使用されるトレーニングされた重み1605を絶えず精緻化し更新する。特に、各新基準領域1602からの基準ピクセル色、及び対応する低サンプル数領域1607からのノイズの多い基準ピクセル入力がレンダリングされる。補足トレーニングは、次に、高サンプル数基準領域1602及び対応する低サンプル数領域1607を用いて、機械学習エンジン1600上で実行される。初期トレーニングと対照的に、このトレーニングは、新基準領域1602毎に、ランタイム中に絶えず実行される。それにより、機械学習エンジン1600が精密にトレーニングされることを保証する。例えば、ピクセル毎データチャネル(例えば、ピクセル色、深さ、法線、正規偏差、等)が評価されてよい。機械学習エンジン1600は、トレーニングされた重み1605に対して調整を行うためにこれらを使用する。トレーニング例(図15)におけるように、機械学習エンジン1600あh、低サンプル数入力フレーム1601からノイズを除去するために、理想的重み1605のセットに向けてトレーニングされ、ノイズ除去されたフレーム1620を生成する。しかしながら、本実施形態では、トレーニングされた重み1605は、新しい種類の低サンプル数入力フレーム1601の新しい画像特性に基づき、絶えず更新される。
一実施形態では、機械学習エンジン1600により実行される再トレーニング演算は、グラフィックプロセッサユニット(GPU)又はホストプロセッサ上でバックグラウンドで絶えず実行される。ドライバコンポーネント及び/又はGPUハードウェアコンポーネントとして実装されてよいレンダループは、キュー内に位置する新しいトレーニングデータを(例えば、新しい基準領域1602の形式で)絶えず生成する。GPU又はホストプロセッサ上で実行されるバックグラウンドトレーニング処理は、このキューから新しいトレーニングデータを絶えず読み出し、機械学習エンジン1600を再トレーニングし、適切な間隔で新しい重み1605で更新する。
図17は、バックグラウンドトレーニング処理1700がホストCPU1710により実施される、このような実装の1つの一例を示す。特に、本実施形態では、バックグラウンドトレーニング処理1700は、高サンプル数新基準領域1602及び対応する低サンプル数領域1604を使用して、トレーニングされた重み1605を絶えず更新し、それにより機械学習エンジン1600を更新する。
図18Aに示すように、複数プレイヤのオンラインゲームにおけるような一実装では、異なるホストマシン1820~1822が、バックグラウンドトレーニング処理1700A~Cが(例えば、ゲームサーバのような)サーバ1800へ送信する基準領域を個々に生成する。サーバ1800は、次に、ホスト1821~1822の各々から受信した新基準領域を用いて機械学習エンジン1810上でトレーニングを実行し、前述のように重み1805を更新する。サーバ1800は、これらの重み1805をホストマシン1820へ送信する。ホストマシン1820は、重み1605A~Cを格納し、それによりそれぞれ個々の機械学習エンジン(図示しない)を更新する。サーバ1800は膨大な数の基準領域を短時間の間に提供され得るので、ユーザにより実行されている任意の所与のアプリケーション(例えば、オンラインゲーム)の重みを効率的且つ精密に更新できる。
図18Bに示すように、異なるホストマシンは、新しい(例えば、前述のようにトレーニング/基準領域1602に基づき)トレーニングされた重みを生成し、新しいトレーニングされた重みを(例えば、ゲームサーバのような)サーバ1800と共有し、又は代替としてピアツーピア共有プロトコルを使用する。サーバ上の機械学習管理コンポーネント1810は、ホストマシンの各々から受信した新しい重みを用いて結合重み1805のセットを生成する。結合重み1805は、例えば、新しい重みから生成された平均であり、本願明細書に記載のように絶えず更新されてよい。一旦生成されると、結合重み1605A~Cのコピーは、ホストマシン1820~1821の各々へ送信され、そこに格納されてよい。ホストマシン1820~1821は、次に、本願明細書に記載のように、結合重みを使用して、ノイズ除去演算を実行する。
一実施形態では、この半閉ループ更新メカニズムは、ハードウェア製造者により使用できる。例えば、基準ネットワークは、ハードウェア製造者により分配されるドライバの一部として含まれてよい。ドライバが新しいトレーニングデータを本願明細書に記載の技術を用いて生成し、これらをハードウェア製造者へ絶えず提出して戻すとき、ハードウェア製造者は、次のドライバ更新のために、この情報を用いて自身の機械学習実装を改良し続ける。
一実装では(例えば、レンダファーム上のバッチ映画レンダリングでは)、レンダラは、新たに生成したトレーニング領域を、時間に渡り複数のレンダノードからこのデータを集める(該スタジオのレンダファーム内にある)専用サーバ又はデータベースへ送信する。別個の機械上の別個のプロセスは、スタジオの専用ノイズ除去ネットワークを絶えず改良し、新しいレンダジョブが常に最新のトレーニングされたネットワークを使用する。
本発明の一実施形態による方法は、図19に示される。方法は、本願明細書に記載のアーキテクチャで実施されてよいが、任意の特定のシステム又はグラフィック処理アーキテクチャに限定されない。
1901で、初期トレーニング段階の一部として、低サンプル数画像データ及び高サンプル数画像データが、複数の画像フレームについて生成される。1902で、機械学習ノイズ除去エンジンが、高/低サンプル数画像データを用いてトレーニングされる。一実施形態では、例えば、ピクセル特徴に関連付けられた畳み込みニューラルネットワーク重みのセットが、トレーニングに関連して更新されてよい。しかしながら、任意の機械学習アーキテクチャが用いられてよい。
1903で、ランタイムにおいて、低サンプル数画像フレームが、高サンプル数を有する少なくとも1つの基準領域と一緒に生成される。1904で、高サンプル数基準領域は、機械学習エンジン及び/又は別個のトレーニングロジック(例えば、バックグラウンドトレーニングモジュール1700)により使用され、機械学習エンジンのトレーニングを絶えず精緻化する。例えば、一実施形態では、高サンプル数基準領域は、低サンプル数画像の対応する部分と結合して使用されて、機械学習エンジン1904に最も効率的にノイズ除去を実行する方法を教示し続ける。CNN実装では、例えば、これは、CNNに関連する重みを更新することを含み得る。
上述の実施形態の複数の変形が実施されてよい。例えば、機械学習エンジンへのフィードバックループが構成される方法、トレーニングデータを生成するエンティティ、トレーニングデータがトレーニングエンジンにフィードバックされる方法、及び改良ネットワークがレンダリングエンジンに提供される方法である。さらに、上述の実施形態は単一の基準領域を用いて連続トレーニングを実行したが、任意の数の基準領域が使用されてよい。さらに、前述のように、基準領域は、異なるサイズであってよく、異なる数の画像フレーム上で使用されてよく、及び異なる技術を用いて(例えば、ランダムに、所定パターンに従い、等)画像フレーム内の異なる位置に位置付けられてよい。
さらに、畳み込みニューラルネットワーク(CNN)は、機械学習エンジン1600の一例として記載されたが、本発明の基礎にある原理は、新しいトレーニングデータを用いて自身の結果を絶えず精緻化できる任意の形式の機械学習エンジンを用いて実施されてよい。例として、限定ではなく、他の機械学習実装は、例を挙げると、GMDH(group method of data handling)、LSTM(long short-term memory)、DR(deep reservoir)計算、DB(deep belief)ネットワーク、テンソルディープスタッキングネットワーク、及びディープ予測符号化ネットワーク、を含む。
<<効率的な分散型ノイズ除去のための機器及び方法>>
上述のように、ノイズ除去は、滑らかなノイズのない画像によるリアルタイム光線追跡のための重要な特徴になってきている。レンダリングは、分散型システムに渡り複数の装置上で行われ得る。しかし、これまで既存のノイズ除去の枠組みは、すべて単一の機械上の単一のインスタンスで動作する。レンダリングが複数の装置に渡り行われている場合、それらは、画像のノイズ除去された部分を計算するためにアクセス可能なレンダリングされたピクセルを全部有しないことがある。
本発明の一実施形態は、人工知能(artificial intelligence:AI)及び非AIに基づくノイズ除去技術の両方と共に動作する分散型ノイズ除去アルゴリズムを含む。画像の領域は、分散レンダ演算からノードに渡り既に分散されているか、又は分割され単一のフレームバッファから分散されている。充分なノイズ除去を計算するために必要な近隣領域のゴースト領域は、必要なときに近隣ノードから集められ、最終的に結果として生じるタイルは最終画像へと合成される。
<分散処理>
図20は、複数のノード2021~2023がレンダリングを実行する、本発明の一実施形態を示す。3個のノードのみが簡単のために図示されるが、本発明の基礎にある原理は、任意の特定数のノードに限定されない。実施に、単一のノードが、本発明の特定の実施形態を実施するために使用されてよい。
ノード2021~2023は、それぞれ、画像の一部をレンダリングし、結果として本例では領域2011~2013を生じる。長方形領域2011~2013が図20に示されるが、任意の形状の領域が使用されてよく、任意の装置は任意の数の領域を処理できる。充分な円滑なノイズ除去演算を実行するためにノードにより必要とされる領域は、ゴースト領域2011~2013と呼ばれる。言い換えると、ゴースト領域2001~2003は、特定品質レベルでノイズ除去を実行するために必要な全データを表す。品質レベルの低下は、ゴースト領域のサイズ、したがって必要なデータ量を削減する。品質レベルの上昇は、ゴースト領域及び対応する必要なデータを増大する。
一実施形態では、ノード2021のようなノードが特定品質レベルで自身の領域2011をノイズ除去するために必要なゴースト領域2001の一部のローカルコピーを有する場合、該ノードは、図示のようにゴースト領域2011の一部を所有するノード2022のような1つ以上の「隣接」ノードから必要なデータを検索する。同様に、ノード2022が特定品質レベルで自身の領域2012をノイズ除去するために必要なゴースト領域2002の一部のローカルコピーを有する場合、ノード2022は、ノード2021から必要なゴースト領域データ2032を検索する。検索は、バス、相互接続、高速メモリファブリック、ネットワーク(例えば高速イーサネット(登録商標))を介して実行されてよく、又は複数のコアの間でレンダリング作業を分散することのできる(例えば極限解像度又は時間変化において大規模画像をレンダリングするために使用される)マルチコアチップ内のオンチップ相互接続であってもよい。一実施形態では、各ノード2021~2023は、グラフィックプロセッサ内の個々の実行ユニット又は実行ユニットの指定されたセットを含む。
指定量の送信されるべきデータは、使用されるノイズ除去技術に依存する。さらに、ゴースト領域からのデータは、各それぞれの領域のノイズ除去を向上するために必要な任意のデータを含んでよい。一実施形態では、例えば、ゴースト領域データは、画像色/波長、強度/アルファデータ、及び/又は法線(normal)を含む。しかしながら、本発明の基礎にある原理は、ゴースト領域データの任意の特定のセットに限定されない。
<一実施形態の追加詳細事項>
低速ネットワーク又は相互接続では、このデータの圧縮は、既存の汎用可逆又は不可逆圧縮を用いて利用され得る。例は、限定ではないが、zlib、gzip及びLZMA(Lempel-Ziv-Markov chain algorithm)を含む。フレーム間の光線衝突情報の差分(delta)が非常に粗いことがあり、ノードが前のフレームから集めた差分を既に有するとき、差分に貢献するサンプルだけが送信される必要のあることに留意することにより、更なるコンテンツ特有圧縮が使用されてよい。これらは、これらのサンプルを集めるノードiに選択的にプッシュされ得る。又はノードiは、他のノードからサンプルを要求できる。一実施形態では、可逆圧縮は、特定種類のデータ及びプログラムコードのために使用される。一方で、不可逆データは、他の種類のデータのために使用される。
図21は、本発明の一実施形態による、ノード2021~2022間の相互作用の追加詳細事項を示す。各ノード2021~2022は、それぞれの画像領域2011~2012及びゴースト領域2001~2002をレンダリングする光線追跡レンダリング回路2081~2082を含む。ノイズ除去器2100~2111は、それぞれ、各ノード2021~2022がレンダリング及びノイズ除去を担う領域2011~2012に対してノイズ除去演算を実行する。ノイズ除去器2021~2022は、例えば、それぞれノイズ除去領域2121~2122を生成するために、回路、ソフトウェア、又はそれらの任意の組み合わせを含んでよい。上述のように、ノイズ除去領域を生成するとき、ノイズ除去器2021~2022は、異なるノードにより所有されるゴースト領域内のデータに依存する必要があってよい(例えば、ノイズ除去器2100は、ノード2022により所有されるゴースト領域2002からのデータを必要としてよい)。
したがって、一実施形態では、ノイズ除去器2100~2111は、それぞれ少なくとも一部が他方のノードから受信されてよい領域2011~2012及びゴースト領域2001~2002からのデータを用いて、ノイズ除去領域2011~2012を生成する。領域データマネジャ2101~2102は、本願明細書に記載のようにゴースト領域2001~2002からのデータ転送を管理する。一実施形態では、圧縮/伸長ユニット2131~2132は、それぞれノード2021~2022間で交換されたゴースト領域データの圧縮及び伸長を実行する。
例えば、ノード2021の領域データマネジャ2101は、ノード2022からの要求により、ゴースト領域2001からのデータを圧縮/伸長器2131へ送信する。圧縮/伸長器2131は、該データを圧縮して圧縮データ2106を生成して、ノード2022へ送信する。それにより、相互接続、ネットワークバス、又は他のデータ通信リンク上の帯域幅を削減する。ノード2022の圧縮/伸長器2132は、次に、圧縮データ2106を伸長し、ノイズ除去器2111は、伸長ゴーストデータを用いて、領域2012からのデータのみによって可能なものより高品質のノイズ除去領域2012を生成する。領域データマネジャ2102は、ゴースト領域2001からの伸長データをキャッシュ、メモリ、レジスタファイル、又は他の記憶装置に格納して、ノイズ除去領域2122を生成するときにノイズ除去器2111に利用可能にしてよい。同様の演算セットは、ゴースト領域2002からのデータをノード2021上のノイズ除去器2100に提供するために実行されてよい。ノード2021は、該データを、領域2011からのデータと組み合わせて使用して、より高品質のノイズ除去領域2121を生成する。
<データの取り込み(grab)又はレンダリング>
ノード2021~2022のような装置間の接続が低速である場合(つまり、閾待ち時間及び/又は閾帯域幅より低い)、他の装置から結果を要求するよりも、ローカルでゴースト領域をレンダリングする方が速いことがある。これは、ネットワークトランザクション速度、及びゴースト領域サイズの線形外挿レンダリング時間を追跡することによりランタイム時に決定できる。このような、ゴースト領域全体をレンダリングし終わるより速い場合に、結果として、複数の装置が画像の同じ部分をレンダリングすることがある。ゴースト領域のレンダリングされた部分の解像度は、基本領域の分散及び決定されたブラー度に基づき、調整されてよい。
<負荷平衡>
一実施形態では、静的及び/又は動的負荷平衡方式が、種々のノード2021~2022の間で処理負荷を分散するために使用されてよい。動的負荷平衡では、ノイズ除去フィルタにより決定された分散は、ノイズ除去においてより多くの時間を必要とするが、シーンの特定領域をレンダリングするために必要なサンプル量を引き出し、及び画像の低い分散及びブラー領域は少ないサンプルを必要とする。特定ノードに割り当てられた特定領域は、前のフレームからのデータに基づき動的に調整され、又はそれらがレンダリングされるとき装置間で動的に通信されてよい。その結果、全ての装置が同じ作業量を有する。
図22は、各それぞれのノード2021~2022上で実行するモニタ2201~2202が性能指標データを集める一実施形態を示す。性能指標データは、限定ではないが、ネットワークインタフェース2211~2212を介してデータを送信するために費やされる時間、領域を(ゴースト領域データを有し及び有さず)ノイズ除去するとき費やされる時間、及び各領域/ゴースト領域をレンダリングするために費やされる時間を含む。モニタ2201~2202は、これらの性能指標をマネジャ又は負荷平衡ノード2201に報告する。マネジャ又は負荷平衡ノード2201は、データを分析して、各ノード2021~2022における現在作業負荷を特定し、場合によっては、種々のノイズ除去領域2121~2122を処理するより効率的なモードを決定する。マネジャノード2201は、次に、検出した付加に従い、新しい領域の新しい作業負荷を、ノード2021~2022に分散する。例えば、マネジャノード2201は、より多くの作業を、あまり重く負荷をかけられていないノードに送信し、及び/又は過負荷であるノードからの作業を再割り当てしてよい。さらに、負荷平衡ノード2201は、レンダリング及び/又はノイズ除去がノードの各々により実行される特定方法を調整するために、再構成コマンドを送信してよい(幾つかの例は上述された)。
<ゴースト領域の決定>
一実施形態では、ゴースト領域2001~2002のサイズ及び形状は、ノイズ除去器2100~2111により実施されるノイズ除去アルゴリズムに基づき決定される。それら個々のサイズは、ノイズ除去されているサンプルの検出された分散に基づき動的に変更され得る。AIノイズ除去自体のために使用される学習アルゴリズムは、適切な領域サイズを決定するために使用されてよい。或いは、左右のブラーのような他の場合には、所定フィルタ幅が、ゴースト領域2001~2002のサイズを決定する。学習アルゴリズムを使用する実装では、機械学習エンジンは、マネジャノード2201上で実行されてよく、及び/又は機械学習の部分が、個々のノード2021~2023の各々で実行されてよい(例えば、図18A~B及び関連する上述の記載を参照)。
<最終画像の収集>
一実施形態では、最終画像は、レンダリングされたノイズ除去領域を、ノード2021~203の各々から集めることにより生成され、ゴースト領域又は法線(normal)の必要がない。図22では、例えば、ノイズ除去領域2121~2122は、マネジャノード2201の領域プロセッサ2280へ送信される。領域プロセッサ2280は、領域を結合して、最終ノイズ除去画像2290を生成する。最終ノイズ除去画像2290は、次にディスプレイ2290上で表示される。領域プロセッサ2280は、種々の2D合成技術を用いて領域を結合してよい。別個のコンポーネントとして図示されたが、領域プロセッサ2280及びノイズ除去画像2290は、ディスプレイ2290に統合されてよい。本実施形態では、種々のノード2021~2022は、直接送信技術を使用して、ノイズ除去領域2121~2122を送信してよく、及び場合によっては、領域データの不可逆又は可逆圧縮を用いる。
AIノイズ除去は、依然として高コストな演算であり、ゲームのようにクラウドへと移行する。したがって、複数ノード2021~2022に渡るノイズ除去処理の分散は、高フレームレートを要求する伝統的なゲーム又は仮想現実(virtual reality:VR)のために、リアルタイムフレームレートを達成するために必要になる場合がある。映画スタジオも、高速ノイズ除去のために利用可能な大規模レンダリングファームにおいて、レンダリングすることが多い。
分散型レンダリング及びノイズ除去を実行する方法の一実施形態は、図23に示される。方法は、上述のシステムアーキテクチャのコンテキスト内で実施されてよいが、任意の特定のシステムアーキテクチャに限定されない。
2301で、グラフィック作業は、画像フレームの領域をレンダリングするために光線追跡演算を実行する複数のノードにディスパッチされる。一実施形態では、各ノードは、既に、メモリ内に演算を実行する必要のあるデータを有してよい。例えば、ノードのうちの2つ以上は共通メモリを共有してよく、又は、ノードのローカルメモリは、既に、前の光線追跡演算からのデータを格納していてよい。代替として、又は追加で、特定データが、各ノードへ送信されてよい。
2302で、特定レベルのノイズ除去(つまり、許容可能レベルの性能)の要求される「ゴースト領域」が決定される。ゴースト領域は、1つ以上の他のノードにより所有されるデータを含む、特定レベルのノイズ除去を実行することが要求される任意のデータを含む。
2303で、ゴースト領域(又はその部分)に関連するデータは、ノード間で交換される。2304で、各ノードは、自身のそれぞれの領域に対して(例えば、交換したデータを用いて)ノイズ除去を実行する。2305で、結果が結合されて、最終ノイズ除去画像フレームを生成する。
一実施形態では、図22に示すようなマネジャノード又は1次ノードは、作業をノードへディスパッチし、次に、ノードにより実行された作業を結合して、最終画像フレームを生成する。別の実施形態では、ピアベースのアーキテクチャが使用される。該アーキテクチャでは、ノードは、データを交換し、最終画像フレームをレンダリングし及びノイズ除去するピアである。
ここに記載のノード(例えば、ノード2021~2023)は、高速ネットワークを介して相互接続されるグラフィック処理コンピューティングシステムであってよい。代替として、ノードは、高速メモリファブリックに結合される個別処理要素であってよい。本実施形態では、ノードのうちの全部が、共通仮想メモリ空間及び/又は共通物理メモリを共有してよい。別の実施形態では、ノードは、CPU及びGPUの結合であってよい。例えば、上述のマネジャノード2201は、CPU及び/又はCPU上で実行されるソフトウェアであってよく、ノード2021~2022は、GPU及び/又はGPU上で実行されるソフトウェアであってよい。本発明の基礎にある原理に従いながら、様々な異なる種類のノードが使用されてよい。
<例示的なニューラルネットワーク実装>
多くの種類のニューラルネットワークが存在し、単純な種類のニューラルネットワークはフィードフォワードネットワークである。フィードフォワードネットワークは、ノードが層に配置される非巡回グラフとして実装されてよい。標準的に、フィードフォワードネットワークトポロジは、少なくとも1つの隠れ層により分離される入力層及び出力層を含む。隠れ層は、入力層により受信した入力を、出力層において出力を生成するために有用な表現に変換する。ネットワークノードは、エッジを介して、隣接層のノードに全結合されるが、各層内のノード間にはエッジは存在しない。フィードフォワードネットワークの入力層のノードで受信したデータは、活性化関数により、出力層のノードへ伝搬される(つまり「フィードフォワードされる」)。ここで、活性化関数は、層を接続するエッジの各々にそれぞれ関連付けられた係数(「重み」)に基づきネットワーク内の各連続層のノードの状態を計算する。実行中のアルゴリズムにより表されている特定モデルに依存して、ニューラルネットワークアルゴリズムからの出力は様々な形式を取り得る。
機械学習アルゴリズムが特定の問題をモデル化するために使用可能になる前に、アルゴリズムは、トレーニングデータセットを用いてトレーニングされる。ニューラルネットワークをトレーニングすることは、ネットワークトポロジを選択し、ネットワークによりモデル化されている問題を表すトレーニングデータのセットを用い、及びネットワークモデルがトレーニングデータセットの全てのインスタンスについて最小限の誤りで実行するまで、重みを調整することを含む。例えば、ニューラルネットワークの教師あり学習トレーニング処理の間、トレーニングデータセット内のインスタンスを表す入力に応答して、ネットワークにより生成される出力は、該インスタンスの「正しい」とラベル付けされた出力と比較され、出力とラベル付けされた出力との間の差を表す誤り信号が計算され、誤り信号がネットワークの層を通じて後方(backward)伝搬するとき、接続に関連付けられた重みが、該誤りを最小化するよう調整される。トレーニングデータセットのインスタンスから生成される出力の各々の誤りが最小化されるとき、ネットワークは「トレーニング」されたと考えられる。
機械学習アルゴリズムの精度は、該アルゴリズムをトレーニングするために使用されるデータセットの品質により大きく影響され得る。トレーニングプロセスは、計算集約的であり、従来の汎用プロセッサにおいて有意な量の時間を必要とすることがある。したがって、多くの種類の機械学習アルゴリズムをトレーニングするために、並列処理ハードウェアが使用される。これは、ニューラルネットワークのトレーニングを最適化するために特に有用である。これは、ニューラルネットワークで係数を調整する際に実行される計算自体が、並列実施に自然に役立つからである。具体的に、多くの機械学習アルゴリズム及びソフトウェアアプリケーションは、汎用グラフィック処理装置内の並列処理ハードウェアを利用するよう適応されている。
図24は、機械学習ソフトウェアスタック2400の一般化された図である。機械学習アプリケーション2402は、トレーニングデータセットを用いてニューラルネットワークをトレーニングするよう、又はトレーニングされた深層ニューラルネットワークを用いて人工知能を実装するよう構成できる。機械学習アプリケーション2402は、ニューラルネットワーク及び/又は展開前にニューラルネットワークをトレーニングするために使用可能な専用ソフトウェアのトレーニング及び推定機能を含み得る。機械学習アプリケーション2402は、限定ではないが、画像認識、マッピング及び位置特定、自律ナビゲーション、会話合成、医療画像、又は言語翻訳を含む任意の種類の人工知能を実装できる。
機械学習アプリケーション2402のハードウェアアクセラレーションは、機械学習フレームワーク2404により有効にできる。機械学習フレームワーク2404は、機械学習プリミティブのライブラリを提供できる。機械学習プリミティブは、機械学習アルゴリズムにより共通に実行される基本演算である。機械学習フレームワーク2404が無いと、機械学習アルゴリズムの開発者は、機械学習アルゴリズムに関連する主要な計算ロジックを生成し及び最適化し、次に新しい並列プロセッサが開発されるときに該計算ロジックを再び最適化することを要求されるだろう。代わりに、機械学習アプリケーションは、機械学習フレームワーク2404により提供されるプリミティブを用いて必要な計算を実行するよう構成できる。例示的なプリミティブは、畳み込みニューラルネットワーク(convolutional neural network:CNN)をトレーニングする間に実行される計算演算である、テンソル畳み込み、活性化関数、及びプーリングを含む。機械学習フレームワーク2404は、行列及びベクトル演算のような、多くの機械学習アルゴリズムにより実行される基本的線形代数サブプログラムを実施するためのプリミティブも提供できる。
機械学習フレームワーク2404は、機械学習アプリケーション2402から受信した入力データを処理し、及び計算フレームワーク2406への適切な入力を生成できる。計算フレームワーク2406は、GPGPUドライバ2408に提供される基本命令を抽象化でき、機械学習フレームワーク2404がGPGPUハードウェア2410によるハードウェアアクセラレーションを活用できるようにし、機械学習フレームワーク2404にGPGPUハードウェア2410のアーキテクチャの詳しい知識を有することを要求しない。さらに、計算フレームワーク2406は、様々な種類に渡り機械学習フレームワーク2404のハードウェアアクセラレーション、及びGPGPUハードウェア2410の生成を可能にできる。
<GPGPU機械学習アクセラレーション>
図25は、一実施形態によるマルチGPUコンピューティングシステム2500を示す。マルチGPUコンピューティングシステム2500は、ホストインタフェーススイッチ2504を介して複数のGPGPU2506A~Dに結合されたプロセッサ2502を含み得る。ホストインタフェーススイッチ2504は、一実施形態では、プロセッサ2502をPCI Expressバスに結合するPCI Expressスイッチ装置である。PCI Expressバスを介して、プロセッサ2502は、GPGPU2506A~Dと通信できる。複数のGPGPU2506A~Dの各々は、上述のGPGPUのインスタンスであり得る。GPGPU2506A~Dは、高速ポイントツーポイントGPU-GPUリンク2516のセットを介して、相互接続できる。高速GPU-GPUリンクは、専用GPUリンクを介してGPGPU2506A~Dの各々に接続できる。P2P GPUリンク2516は、GPGPU2506A~Dの各々の間の直接通信を可能にし、プロセッサ2502の接続されるホストインタフェースバスを介する通信を必要としない。P2P GPUリンクへ向けられたGPU-GPUトラフィックにより、ホストインタフェースバスは、システムメモリアクセスのために、又はマルチGPUコンピューティングシステム2500の他のインスタンスと例えば1つ以上のネットワーク装置を介して通信するために、利用可能なままである。図示の実施形態では、GPGPU2506A~Dはプロセッサ2502にホストインタフェーススイッチ2504を介して接続するが、一実施形態では、プロセッサ2502は、P2P GPUリンク2516の直接サポートを含み、GPGPU2506A~Dに直接接続できる。
<機械学習ニューラルネットワーク実装>
本願明細書に記載の実施形態により提供されるコンピューティングアーキテクチャは、機械学習のためにニューラルネットワークをトレーニングし及び展開するために特に適する種類の並列処理を実行するよう構成できる。ニューラルネットワークは、グラフ関係を有する関数のネットワークとして一般化できる。従来良く知られているように、機械学習で使用されるニューラルネットワーク実装の様々な種類がある。ニューラルネットワークの1つの例示的な種類は、前述のようなフィードフォワードネットワークである。
ニューラルネットワークの第2の例示的な種類は、畳み込みニューラルネットワーク(CNN)である。CNNは、画像データのような既知のグリッドのようなトポロジを有するデータを処理するための、特別なフィードフォワードニューラルネットワークである。したがって、CNNは、コンピュータビジョン及び画像認識アプリケーションに一般に用いられるが、会話及び言語処理のような他の種類のパターン認識にも使用され得る。CNN入力層におけるノードは、「フィルタ」(網膜内に見られる個々のフィールドにより刺激される特徴検出器)のセットに編成され、フィルタの各セットの出力は、ネットワークの連続する層にあるノードに伝搬される。CNNの計算は、畳み込み算術演算を各フィルタに適用して、該フィルタの出力を生成することを含む。畳み込みは、2つの元の関数のうちの1つの変形バージョン得ある第3関数を生成するために、2つの関数により実行される特別な種類の算術演算である。畳み込みネットワークの用語では、畳み込みへの第1関数は入力として呼ばれ、一方で第2関数は畳み込みカーネルと呼ばれ得る。出力は、特徴マップと呼ばれてよい。例えば、畳み込み層への入力は、入力画像の種々の色成分を定めるデータの多次元アレイであり得る。畳み込みカーネルは、パラメータの複数次元アレイであり得る。ここで、パラメータは、ニューラルネットワークのトレーニング処理により適応される。
再帰ニューラルネットワーク(Recurrent neural network:RNN)は、層間のフィードバック接続を含む、フィードフォワードニューラルネットワークのファミリである。RNNは、ニューラルネットワークの異なる部分に渡りパラメータデータを共有することにより、順編成データセットのモデル化を可能にする。RNNのアーキテクチャはサイクルを含む。RNNからの出力データの少なくとも一部が、シーケンス内の後続入力を処理するためのフィードバックとして使用されるとき、サイクルは、変数の現在の値が該変数自体の値に将来に及ぼす影響を表す。この特徴は、言語データが構成され得る変数の特性により、RNNを言語処理に特に有用にする。
後述する図は、例示的なフィードフォワードCNN、及びRNNネットワークを記載し、及びこれらの種類のネットワークの各々をそれぞれトレーニングし及び展開する一般的処理を記載する。これらの記載は、本願明細書に記載の任意の特定の実施形態に関して、例であり且つ非限定的であること、及び説明される概念は、一般に深層ニューラルネットワーク及び機械学習技術に一般的に適用できることが理解される。
上述の例示的なニューラルネットワークは、深層学習を実行するために使用できる。深層学習は、深層ニューラルネットワークを用いる機械学習である。深層学習で使用される深層ニューラルネットワークは、単一の隠れ層のみを含む浅いニューラルネットワークと反対に、複数の隠れ層で構成される人工ニューラルネットワークである。より深いニューラルネットワークは、通常、トレーニングのために、より計算集約的である。しかしながら、ネットワークの追加隠れ層は、複数ステップのパターン認識を可能にし、結果として浅い機械学習技術と比べて出力誤りを減少する。
深層学習で使用される深層ニューラルネットワークは、標準的に、特徴認識を実行するフロントエンドネットワークを含む。特徴認識は、モデルに提供された特徴表現に基づき演算(例えば、オブジェクト分類、会話認識、等)を実行可能な数学モデルを表すバックエンドネットワークに結合される。深層学習は、手作りの特徴設計がモデルに対して実行されることを必要とせずに、機械学習が実行されることを可能にする。代わりに、深層ニューラルネットワークは、統計的構造又は入力データ内の相互関係に基づき、特徴を学習できる。学習した特徴は、検出した特徴を出力にマッピングできる数学モデルに提供され得る。ネットワークにより使用される数学モデルは、一般に、実行されるべき特定タスクに専用であり、異なるモデルが異なるタスクを実行するために使用される。
ニューラルネットワークが構造化されると、学習モデルは、特定タスクを実行するようネットワークをトレーニングするためにネットワークに適用できる。学習モデルは、ネットワークの出力誤りを低減するために、モデル内の重みを調整する方法を記述する。誤りの後方伝搬は、ニューラルネットワークをトレーニングするために使用される共通の方法である。入力ベクトルは、処理のためにネットワークに提示される。ネットワークの出力は、不可逆関数を用いて所望の出力と比較され、誤り値は、出力層にあるニューロンの各々について計算される。誤り値は、次に、各ニューロンが、元の出力への自身の貢献を大まかに表す関連する誤り値を有するまで、後方伝搬される。ネットワークは、次に、これらの誤りから、確率的勾配降下アルゴリズムのようなアルゴリズムを用いて学習でき、ニューラルネットワークの重みを更新する。
図26~27は、例示的な畳み込みニューラルネットワークを示す。図26は、CNN内の種々の層を示す。図26に示すように、画像処理をモデル化するために使用される例示的なCNNは、入力画像の赤、緑、及び青(RGB)成分を記述する入力2602を受信し得る。入力2602は、複数の畳み込み層(例えば、畳み込み層2604、畳み込み層2606)により処理され得る。複数の畳み込み層からの出力は、任意で、全結合層2608のセットにより処理されてよい。フィードフォワードネットワークについて前述したように、全結合層の中のニューロンは、前の層の全ての活性化関数への全結合を有する。全結合層2608からの出力は、ネットワークから生じる出力を生成するために使用できる。全結合層2608内の活性化関数は、畳み込みの代わりに行列乗算を用いて計算できる。全てのCNN実装が全結合層を活用するのではない。例えば、幾つかの実装では、畳み込み層2606は、CNNのために出力を生成できる。
畳み込み層は、疎結合される。これは、全結合層2608に見られる伝統的なニューラルネットワーク構成と異なる。伝統的なニューラルネットワーク層は全結合され、その結果、全ての出力ユニットは全ての入力ユニットと相互作用する。しかしながら、図示のようにフィールドの畳み込みの出力が(フィールドのノードの各々のそれぞれの状態値の代わりに)後続の層のノードに入力されるので、畳み込み層は疎結合される。畳み込み層に関連付けられたカーネルは、畳み込み演算を実行し、その出力は次の層へ送信される。畳み込み層内で実行される次元縮退は、CNNに大規模画像を処理させるためにスケーリングを可能にする一態様である。
図27は、CNNの畳み込み層の中の例示的な計算段階を示す。CNNの畳み込み層2712への入力は、畳み込み層2714の3つの段階で処理できる。3つの段階は、畳み込み段階2716、検出段階2718、及びプーリング段階2720を含み得る。畳み込み層2714は、次に、データを連続する畳み込み層へ出力し得る。ネットワークの最終畳み込み層は、出力特徴マップデータを生成し、又は全結合層への入力を提供でき、例えばCNNへの入力の分類値を生成する。
畳み込み段階2716では、線形活性化関数のセットを生成するために、幾つかの畳み込みを並列に実行する。畳み込み段階2716は、線形変換及び平行移動として指定できる任意の変換であるアフィン変換を含み得る。アフィン変換は、回転、平行移動、スケーリング、及びこれらの変換の組み合わせを含む。畳み込み段階は、ニューロンに関連付けられたローカル領域として決定され得る、入力の中の特定領域に接続される関数の出力(例えば、ニューロン)を計算する。ニューロンは、ニューロンの重みと、ニューロンが接続されるローカル入力内の領域と、の間のドット積を計算する。畳み込み段階2716からの出力は、畳み込み層2714の連続する段階により処理される線形活性化関数のセットを定める。
線形活性化関数は、検出段階2718により処理され得る。検出段階2718で、各線形活性化関数は、非線形活性化関数により処理される。非線形活性化関数は、畳み込み層のそれぞれのフィールドに影響を与えずに、ネットワーク全体の非線形特性を増大する。幾つかの種類の非線形活性化関数が使用されてよい。ある特定の種類は、ReLU(rectified linear unit)である。ReLUは、f(x)=max(0,x)と定義される活性化関数を使用し、その結果、活性化関数はゼロに閾値がある。
プーリング段階2720は、畳み込み層2706の出力を、近くの出力の要約統計量で置き換えるプーリング関数を用いる。プーリング関数は、ニューラルネットワークに並進不変を導入するために使用できる。その結果、入力に対する小さな平行移動はプールされた出力を変化させない。ローカル並進に対する不変は、入力データ内の特徴の存在が特徴の正確な位置よりも重要であるシナリオで有用であり得る。プーリング関数の様々な種類は、プーリング段階2720の間に使用でき、最大プーリング、平均プーリング、及びl2正規プーリングを含む。さらに、幾つかのCNN実装は、プーリング段階を含まない。代わりに、このような実装は、前の畳み込み段階と比べて、置換及び追加畳み込み段階が増大したストライドを有する。
畳み込み層2714からの出力は、次に、次の層2722により処理され得る。次の層2722は、追加畳み込み層、又は全結合層2708のうちの1つであり得る。例えば、図27の第1畳み込み層2704は、第2畳み込み層2706へ出力でき、一方で、第2畳み込み層は全結合層2808の第1層へ出力できる。
図28は、例示的な再帰ニューラルネットワーク2800を示す。再帰ニューラルネットワーク(RNN)では、ネットワークの前の状態は、ネットワークの現在状態の出力に影響する。RNNは、様々な関数を用いて様々な方法で構築できる。RNNの使用は、通常、前の入力シーケンスに基づき将来を予測するために数学モデルを使用して回転する。例えば、RNNは、前のワードシーケンスが与えられると、来るワードを予測するために、統計的言語モデル化を実行するために使用されてよい。図示のRNN2800は、入力ベクトルを受信する入力層2802と、再帰機能を実施する隠れ層2804と、前の状態の「記憶」を可能にするフィードバックメカニズム2805と、結果を出力する出力層2806と、を有するとして記載できる。RNN2800は、時間ステップに基づき動作する。所与の時間ステップにおけるRNNの状態は、フィードバックメカニズム2805を介して、前の時間ステップに基づき影響される。所与の時間ステップでは、隠れ層2804の状態は、前の状態及び現在時間ステップにおける入力により定められる。第1時間ステップにおける初期入力(x1)は、隠れ層2804により処理できる。第2入力(x2)は、初期入力(x)の処理の間に決定された状態情報を用いて、隠れ層2804により処理できる。所与の状態は、s_t=f(Ux_t+Wx_(t-1))のように計算でき、ここで、U及びWはパラメータ行列である。関数fは、一般的に、双曲正接関数(Tanh)又は整流関数f(x)=max(0,x)の変形のように、非線形である。しかしながら、隠れ層2804で使用される特定数学関数は、RNN2800の特定の実装詳細事項に依存して変化し得る。
記載の基本CNN及びRNNネットワークに加えて、これらのネットワークに対する変形が可能であってよい。ある例示的なRNNの変形は、LSTM(long short term memory)RNNである。LSTM RNNは、長い言語シーケンスを処理するために必要であってよい長期依存性を学習することができる。CNNに対する変形は、CNNと同様の構造を有し且つディープビリーフネットワークと同様の方法でトレーニングされる畳み込みディープビリーフネットワークである。ディープビリーフネットワーク(deep belief network:DBN)は、確率(ランダム)変数の複数の層で構成される生成(generative)ニューラルネットワークである。DBNは、貪欲な(greedy)教師なし学習を用いて層毎にトレーニングできる。DBNの学習した重みは、次に、ニューラルネットワークのための最適初期重みセットを決定することにより、事前トレーニングニューラルネットワークを提供するために使用できる。
図29は、深層ニューラルネットワークのトレーニング及び展開を示す。所与のネットワークがタスクのために構造化されると、ニューラルネットワークは、トレーニングデータセット2902を用いてトレーニングされる。種々のトレーニングフレームワーク2904が、トレーニング処理のハードウェアアクセラレーションを可能にするために開発されている。例えば、上述の機械学習フレームワークがトレーニングネットワークとして構成されてよい。トレーニングフレームワーク2904は、未トレーニングニューラルネットワーク2906に接続し、未トレーニングニューラルネットワークを本願明細書に記載の並列処理リソースを用いてトレーニングさせ、トレーニングされたニューラルネットワーク2908を生成できる。
トレーニング処理を開始するために、初期重みが、ランダムに又はディープビリーフネットワークを用いて事前トレーニングすることにより、選択されてよい。トレーニングサイクルは、次に、教師あり又は教師なし方法で実行される。
教師あり学習は、トレーニングが媒介される演算として実行される学習方法である。例えば、トレーニングデータセット2902が、入力に対する所望の出力とペアにされた該入力を含むとき、又はトレーニングデータセットが、既知の出力を有する入力を含み、ニューラルネットワークの出力が手動で格付けされる場合である。ネットワークは、入力を処理し、結果として生じた出力を期待される又は所望の出力のセットに対して比較する。次に、誤りはシステムを通じて後方伝搬される。トレーニングフレームワーク2904は、未トレーニングニューラルネットワーク2906を制御する重みを調整するよう調整できる。トレーニングフレームワーク2904は、未トレーニングニューラルネットワーク2906がどれ位良好に、正解を生成するのに適するモデルに向かって収束しているかを、既知の入力データに基づき監視するツールを提供できる。ネットワークの重みがニューラルネットワークにより生成される出力を精緻化するよう調整され得ので、トレーニング処理は繰り返し生じる。トレーニング処理は、ニューラルネットワークがトレーニングされたニューラルネットワーク2908に関連する統計的に所望の精度に達するまで、継続し得る。トレーニングされたニューラルネットワーク2908は、次に、任意の数の機械学習演算を実施するために展開できる。
教師なし学習は、ネットワークがラベル無しデータを用いて自身をトレーニングしようとする学習方法である。したがって、教師なし学習では、トレーニングデータセット2902は、任意の関連する出力データを有しない入力データを含む。未トレーニングニューラルネットワーク2906は、ラベル無し入力の中のグループ化を学習でき、個々の入力がデータセット全体にどのように関連するかを決定できる。教師なしトレーニングは、データの次元縮退において有用な演算を実行できる一種のトレーニングされたニューラルネットワーク2907である、自己編成マップを生成するために使用できる。教師なしトレーニングは、入力データセットの中でデータの通常パターンから逸脱するデータ点の識別を可能にする異常検出を実行するためにも使用できる。
教師あり及び教師なしトレーニングに対する変形も利用されてよい。半教師あり学習は、トレーニングデータセット2902が同じ分布のラベル有り及びラベル無しデータの混合を含む技術である。逐次学習は、入力データがモデルを更にトレーニングするために連続使用される、教師あり学習の変形である。逐次学習は、トレーニングされたニューラルネットワーク2908に、初期トレーニング中にネットワーク内に刻み込まれた知識を忘れずに、新しいデータ2912を採用させる。
教師あり又は教師なしに拘わらず、特に深層ニューラルネットワークのトレーニング処理は、単一の計算ノードにとって非常に計算集約的であり得る。単一の計算ノードを使用する代わりに、計算ノードの分散型ネットワークがトレーニング処理を加速するために使用され得る。
図30Aは、分散型学習を示すブロック図である。分散型学習は、上述のノードのような複数の分散コンピューティングノードを使用して、ニューラルネットワークの教師あり又は教師なしトレーニングを実行するトレーニングモデルである。分散計算ノードは、それぞれ、1つ以上のホストプロセッサと、高度に並列化された汎用グラフィック処理ユニットのような1つ以上の汎用処理ノードと、を含み得る。図示のように、分散型学習は、モデル並列化3002、データ並列化3004、及びモデル及びデータ並列化の組み合わせを実行され得る。
モデル並列化3002では、分散型システム内の異なる計算ノードが、単一ネットワークの異なる部分についてトレーニング計算を実行し得る。例えば、ニューラルネットワークの各層は、分散型システムの異なる処理ノードによりトレーニングされ得る。モデル並列化の利点は、特に大規模モデルにスケーリングする能力を含む。ニューラルネットワークの異なる層に関連付けられた計算を分割することは、全ての層の重みが単一の計算ノードのメモリに適合しない非常に大規模なニューラルネットワークのトレーニングを可能にする。幾つかの例では、モデル並列化は、大規模ニューラルネットワークの教師なしトレーニングを実行する際に特に有用であり得る。
データ並列化3004では、分散型ネットワークの異なるノードが、モデルの完全なインスタンスを有し、各ノードはデータの異なる部分を受信する。異なるノードからの結果は、次に結合される。データ並列化への異なるアプローチが可能であるが、データ並列化トレーニングアプローチは、全て、結果を結合し及び各ノード間のモデルパラメータを同期化させる技術を必要とする。データを結合するための例示的なアプローチは、パラメータ平均及び更新に基づくデータ並列化を含む。パラメータ平均は、トレーニングデータのサブセットで各ノードをトレーニングし、グローバルパラメータ(例えば、重み、バイアス)を各ノードからのパラメータの平均に設定する。パラメータ平均は、パラメータデータを維持する中央パラメータサーバを使用する。更新に基づくデータ並列化は、パラメータ平均と同様であるが、ノードからパラメータサーバへパラメータを転送する代わりに、モデルに対する更新が転送される。さらに、更新に基づくデータ並列化は、更新が圧縮されノード間で転送される分散型方法で実行できる。
結合モデル及びデータ並列化3006が、例えば各計算ノードが複数のGPUを含む分散型システムで実施され得る。各ノードは、モデルの完全なインスタンスを有し得る。ここで、各ノード内の別個のGPUは、モデルの異なる部分をトレーニングするために使用される。
分散型トレーニングは、単一の機械上のトレーニングと比べて、オーバヘッドが増大する。しかしながら、本願明細書に記載の並列プロセッサ及びGPGPUは、それぞれ、高帯域幅GPU間データ転送及び加速化リモートデータ同期を可能にする技術を含む、分散型トレーニングのオーバヘッドを削減するための種々の技術を実施できる。
<例示的な機械学習アプリケーション>
機械学習は、限定ではないが、コンピュータビジョン、自律走行及びナビゲーション、会話認識、及び言語処理を含む様々な技術的問題を解決するために適用され得る。コンピュータビジョンは、伝統的に、機械学習アプリケーションの最も活発な研究分野の1つである。コンピュータビジョンのアプリケーションは、顔を認識するような人間の視覚能力を再生することから、視覚能力の新しいカテゴリを生成することにまで及ぶ。例えば、コンピュータビジョンアプリケーションは、ビデオ内に見えるオブジェクトに含まれる振動から音波を認識するよう構成できる。並列プロセッサにより加速化された機械学習は、コンピュータビジョンアプリケーションに、従前の実現可能なものより有意に大規模なトレーニングデータセットを用いてトレーニングさせ、及び推定システムに、低電力並列プロセッサを用いて展開させる。
並列プロセッサにより加速化された機械学習は、車線及び道路標識の認識、障害物回避、ナビゲーション、及び走行制御を含む自律走行アプリケーションを有する。加速化された機械学習技術は、特定のトレーニング入力に対する適切な応答を定めるデータセットに基づき、走行モデルをトレーニングするために使用できる。本願明細書に記載の並列プロセッサは、自律走行ソリューションのために使用される益々複雑なニューラルネットワークの迅速なトレーニングを可能にし、自律車両への統合に適するモバイルプラットフォームにおける低電力推定プロセッサの展開を可能にし得る。
並列プロセッサにより加速化された深層ニューラルネットワークは自動会話認識(automatic speech recognition:ASR)への機械学習アプローチを可能にしている。ASRは、入力音響シーケンスを与えられると、最も有望な言語シーケンスを計算する関数の生成を含む。深層ニューラルネットワークを用いる加速化された機械学習は、ASRに従前使用されていた隠れマルコフモデル(hidden Markov model:HMM)及びガウス混合モデル(Gaussian mixture model:GMM)の代替を可能にした。
並列プロセッサにより加速化された機械学習は、自然言語処理を加速化するためにも使用できる。自動学習手順は、統計的推定アルゴリズムを利用して、誤り又は馴染みのない入力に対してロバストなモデルを生成できる。例示的な自然言語処理アプリケーションは、人間の言語の間の自動機械翻訳を含む。
機械学習のために使用される並列処理プラットフォームは、トレーニングプラットフォーム及び展開プラットフォームに分けられる。トレーニングプラットフォームは、通常、高度に並列化され、マルチGPUの単一ノードのトレーニング及びマルチノードのマルチGPUのトレーニングを加速化するための最適化を含む。トレーニングに適する例示的な並列プロセッサは、本願明細書に記載の高度に並列化された汎用グラフィック処理ユニット及び/又はマルチGPU計算システムを含む。これに対し、展開される機械学習プラットフォームは、通常、カメラ、自律ロボット、及び自律車両のような製品内での使用に適する低電力並列プロセッサを含む。
図30Bは、トレーニングされたモデルを用いて推定を実行するのに適するシステムオンチップ(SOC)上の例示的な推定システムを示す。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ビット整数ベクトル演算のような低精度計算を実行するための命令をサポートできる。
<<光線追跡アーキテクチャ>>
一実装では、グラフィックプロセッサは、リアルタイム光線追跡を実行するための回路及び/又はプログラムコードを含む。幾つかの実施形態では、光線追跡コアの専用セットが、グラフィックプロセッサに含まれ、光線トラバーサル及び/又は光線交差演算を含む、本願明細書に記載の種々の光線追跡演算を実行する。光線追跡コアに加えて、一実施形態は、プログラマブルシェーディング演算を実行するグラフィック処理コアの複数のセット、及びテンソルデータに対して行列演算を実行するテンソルコアの複数のセットを含む。
図31は、マルチコアグループ3100A~Nに構成されたグラフィック処理リソースの専用セットを含む、1つのこのようなグラフィック処理ユニット(GPU)3105の例示的な部分を示す。単一のマルチコアグループ3100Aのみの詳細が提供されるが、他のマルチコアグループ3100B~Nがグラフィック処理リソースの同じ又は同様のセットを備えられてよいことが理解される。
図示のように、マルチコアグループ3100Aは、グラフィックコア3130のセット、テンソルコア3140のセット、及び光線追跡コア3150のセットを含んでよい。スケジューラ/ディスパッチャ3110は、種々のコア3130、3140、3150上で実行するためのグラフィックスレッドをスケジューリングし及びディスパッチする。レジスタファイル3120のセットは、グラフィックスレッドを実行するときにコア3130、3140、3150により使用されるオペランド値を格納する。これらは、例えば、整数値を格納する整数レジスタ、浮動小数点値を格納する浮動小数点レジスタ、パックされたデータ要素(整数及び/又は浮動小数点データ要素)を格納するベクトルレジスタ、及びテンソル/行列値を格納するタイルレジスタを含んでよい。一実施形態では、タイルレジスタは、ベクトルレジスタの結合されたセットとして実装される。
1つ以上のレベル1(L1)キャッシュ及びテクスチャユニット3160は、テクスチャデータ、頂点データ、ピクセルデータ、光線データ、境界体積データ、等のようなグラフィックデータを、各マルチコアグループ3100A内にローカルに格納する。マルチコアグループ3100A~Nの全部又はサブセットにより共有されるレベル2(L2)キャッシュ3180は、複数の同時グラフィックスレッドのためにグラフィックデータ及び/又は命令を格納する。図示のように、L2キャッシュ3180は、複数のマルチコアグループ3100A~Nに渡り共有されてよい。1つ以上のメモリ制御部3170は、GPU3105を、システムメモリ(例えばDRAM)及び/又は専用グラフィックメモリ(例えばGDDR6メモリ)であってよいメモリ3198に結合する。
入力/出力(I/O)回路3195は、GPU3105を、デジタル信号プロセッサ(DPS)、ネットワーク制御部、又はユーザ入力装置のような1つ以上のIO装置3195に結合する。オンチップ相互接続は、I/O装置3190をGPU3105及びメモリ3198に結合するために使用されてよい。IO回路3195の1つ以上のIOメモリ管理ユニット(IO memory management units:IOMMU)3170は、IO装置3190をシステムメモリ3198に直接結合する。一実施形態では、IOMMU3170は、仮想アドレスをシステムメモリ3198内の物理アドレスにマッピングするために、ページテーブルの複数のセットを管理する。本実施形態では、IO装置3190、CPU3199、及びGPU3105が、同じ仮想アドレス空間を共有してよい。
一実装では、IOMMU3170は、仮想化をサポートする。この場合、IOMMU3170は、ゲスト/グラフィック仮想アドレスをゲスト/グラフィック物理アドレスにマッピングするために第1ページテーブルセットを、及びゲスト/グラフィック物理アドレスを(例えば、システムメモリ3198内の)システム/ホスト物理アドレスにマッピングするために第2ページテーブルセットを管理してよい。第1及び第2ページテーブルセットの各々の基本アドレスは、制御レジスタに格納され、コンテキストスイッチにスワップされて出されてよい(例えば、その結果、新しいコンテキストが、関連するページテーブルセットへのアクセスを提供される)。図31に図示しないが、コア3130、3140、3150及び/又はマルチコアグループ3100A~Nのうちの各々は、ゲスト仮想-ゲスト物理変換、ゲスト物理-ホスト物理変換、及びゲスト仮想-ホスト物理変換をキャッシュするために、TBL(translation lookaside buffer)を含んでよい。
一実施形態では、CPU3199、GPU3105、及びIO装置3190は、単一の半導体チップ及び/又はチップパッケージに統合される。図示のメモリ3198は、同じチップに統合されてよく、又はオフチップインタフェースを介してメモリ制御部3170に結合されてよい。一実装では、メモリ3198は、同じ仮想アドレス空間を他の物理システムレベルメモリとして共有するGDDR6メモリを含む。しかしながら、本発明の基礎にある原理は、この特定の実装に限定されない。
一実施形態では、テンソルコア3140は、深層学習演算を実行するために使用される基本的計算演算である行列演算を実行するために特に設計された複数の実行ユニットを含む。例えば、同時行列乗算演算は、ニューラルネットワークトレーニング及び推定のために使用されてよい。テンソルコア3140は、単精度浮動小数点(例えば32ビット)、半精度浮動小数点(例えば16ビット)、整数ワード(16ビット)、バイト(8ビット)、及び半バイト(4ビット)を含む種々のオペランド精度を用いる行列処理を実行してよい。一実施形態では、ニューラルネットワーク実装は、各々のレンダリンクされたシーンの特徴を抽出し、場合によっては、複数のフレームからの詳細事項を結合して、高品質最終画像を構成する。
深層学習実装では、並列行列乗算作業は、テンソルコア3140上での実行のためにスケジューリングされてよい。ニューラルネットワークのトレーニングは、特に、有意な数の行列ドット積演算を必要とする。N×N×N行列乗算の内積の式を処理するために、テンソルコア3140は、少なくともN個のドット積処理要素を含んでよい。行列乗算が開始する前に、1つの行列全体が、タイルレジスタにロードされ、第2行列の少なくとも1つの列がN個のサイクルの各サイクルでロードされる。各サイクルで、処理されるN個のドット積がある。
行列要素は、特定の実装に依存して、16ビットワード、8ビットバイト(例えばINT8)及び4ビット半バイト(例えばINT4)を含む異なる精度で格納されてよい。異なる精度のノードが指定され、テンソルコア3140にとって、最も効率的な精度が(例えば、バイト及び半バイトへの量子化を許容可能な推定作業負荷のような)異なる作業負荷に対して使用されることを保証する。
一実施形態では、光線追跡コア3150は、リアルタイム光線追跡及び非リアルタイム光線追跡実装の両方について光線追跡演算を加速化する。特に、光線追跡コア3150は、境界体積階層構造(bounding volume hierarchy:BVH)を用いて光線トラバースを実行し及び光線とBVH体積内に含まれるプリミティブとの間の交差を判定する光線トラバース/交差回路を含む。光線追跡コア3150は、深さテスト及びカリングを(例えば、Zバッファ又は同様の構成を用いて)実行する回路も含んでよい。一実装では、光線追跡コア3150は、トラバース及び交差演算を、少なくとも一部がテンソルコア3140上で実行されてよい本願明細書に記載の画像ノイズ除去技術と協力して実行する。例えば、一実施形態では、テンソルコア3140は、光線追跡コア3150により生成されたフレームのノイズ除去を実行するために深層学習ニューラルネットワークを実装する。しかしながら、CPU3199、グラフィックコア3130、及び/又は光線追跡コア3150も、ノイズ除去及び/又は深層学習アルゴリズムの全部又は一部を実装してよい。
さらに、上述のように、ノイズ除去の分散型アプローチが利用されてよく、ここで、GPU3105は、ネットワーク又は高速相互接続を介して他のコンピューティング装置に結合されたコンピューティング装置内にある。本実施形態では、相互接続されたコンピューティング装置は、速度を向上するためにニューラルネットワーク学習/トレーニングデータを共有する。これにより、システム全体が、異なる種類の画像フレーム及び/又は異なるグラフィックアプリケーションのノイズ除去を実行するために学習する。
一実施形態では、光線追跡コア3150は、全てのBVHトラバース及び光線プリミティブ交差を処理し、グラフィックコア3130が光線毎に数千もの命令による負荷を掛けられることを防ぐ。一実施形態では、各光線追跡コア3150は、(例えば、トラバース演算のために)境界ボックステストを実行する第1専用回路セット、及び(例えば、トラバースされた光線を交差する)光線三角交差テストを実行するための第2専用回路セットを含む。したがって、一実施形態では、マルチコアグループ3100Aは、単純に光線プローブを開始し、光線追跡コア3150は、光線トラバース及び交差を独立して実行し、ヒットしたデータ(例えば、ヒット、ヒットしない、複数ヒット、等)をスレッドコンテキストに返す。光線追跡コア3150がトラバース及び交差演算を実行している間、他のコア3130、3140は、他のグラフィック又は計算作業を実行するために自由にされる。
一実施形態では、各光線追跡コア3150は、BVHテスト演算を実行するトラバースユニット、及び光線プリミティブ交差テストを実行する交差ユニットを含む。交差ユニットは、適切なスレッドに提供する「ヒット」、「ヒット無し」、又は「複数ヒット」応答を生成する。トラバース及び交差演算の間に、他のコア(例えば、グラフィックコア3130、及びテンソルコア3140)の実行リソースは、他の形式のグラフィック作業を実行するために自由にされる。
後述する1つの特定の実施形態では、ハイブリッドラスタライズ/光線追跡アプローチが使用される。ここでは、作業がグラフィックコア3130及び光線追跡コア3150の間で分散される。
一実施形態では、光線追跡コア3150(及び/又は他のコア3130、3140)は、DispatchRaysコマンド並びにray-generation、closest-hit、any-hit、及びオブジェクト毎にシェーダ及びテクスチャのユニークなセットの割り当てを可能にするMissシェーダを含むMicrosoftのDRX(DirectX Ray Tracing)のような光線追跡交差セットのためのハードウェアサポートを含む。光線追跡コア3150、グラフィックコア3130、及びテンソルコア3140によりサポートされ得る別の光線追跡プラットフォームは、Vulkan1.1.85である。しかしながら、本発明の基礎にある原理は、任意の特定の光線追跡ISAに限定されないことに留意する。
一般に、種々のコア3150、3140、3130は、ray-generation、closest-hit、any-hit、ray-primitive intersection、プリミティブ毎及び階層構造境界ボックス構成、Miss、Visit、及び例外のための命令/機能を含む光線追跡交差セットをサポートしてよい。より具体的には、以下の機能を実行するための一実施形態は光線追跡命令を含む。
・光線生成(Ray Generation):Ray Generation命令は、ピクセル、サンプル、又は他のユーザ定義作業割り当て毎に実行されてよい。
・最近接ヒット(Closest Hit):Closest Hit命令は、シーン内のプリミティブとの光線の最近接交差点を特定するために実行されてよい。
・任意のヒット(Any Hit):Any Hit命令は、シーン内の光線とプリミティブとの間の複数の交差を識別し、場合によっては、新しい最近接交差点を特定する。
・交差(Intersection):Intersection命令は、光線プリミティブ交差テストを実行し、結果を出力する。
・プリミティブ毎の境界ボックス構成(Per-primitive Bounding box Construction):この命令は、(例えば、新しいBVH又は他の加速化データ構造を構築するとき)所与のプリミティブ又はプリミティブグループの周囲の境界ボックスを構築する。
・Miss:光線が、シーン内の全ての幾何学、又はシーンの指定領域に当たらないことを示す。
・Visit:光線がトラバースする子体積を示す。
・例外(Exceptions):様々な種類の例外処理(例えば、様々なエラー条件のために呼び出される)を含む。
<<階層構造ビーム追跡>>
体積階層構造を結合することは、一般的に、グラフィックプリミティブ及び他のグラフィックオブジェクトに対して演算が実行される効率を向上するために使用される。BVHは、幾何学オブジェクトのセットに基づき構築された階層構造の木構造である。木構造の一番上には、所与のシーン内の幾何学オブジェクトの全部を取り囲むルートノードがある。個々の幾何学オブジェクトは、木のリーフノードを形成する境界体積内に包み込まれる。これらのノードは、次に、小さなセットにグループ化され、より大きな境界体積内に取り囲まれる。これらは、また、再帰的方法で、グループ化され、他のより大きな境界体積内に包み込まれ、最終的に、木の一番上にあるルートノードにより表される単一の境界体積を有する木構造をもたらす。境界体積階層構造は、衝突検出、プリミティブカリング、及び光線トラバース/交差演算のような、光線追跡において使用される幾何学オブジェクト毎のセットに対する種々の演算を効率的にサポートするために使用される。
光線追跡アーキテクチャでは、光線は、光線プリミティブ交差を判定するために、BVHを通じてトラバースされる。例えば、光線がBVHのルートノードを通過しない場合、光線は、BVHにより囲まれるプリミティブのいずれも交差せず、このプリミティブセットに関して光線の更なる処理は必要ない。光線がBVHの第1子ノードを通過するが、第2子ノードを通過しない場合、光線は、第2子ノードにより囲まれる任意のプリミティブに対してテストされる必要がない。この方法では、BVHは、光線プリミティブ交差についてテストするために効率的メカニズムを提供する。
本発明の一実施形態では、連続光線のグループは、「ビーム」と呼ばれ、個々の光線ではなく、BVHに対してテストされる。図32は、4本の異なる光線により概略を示される例示的なビーム3201を示す。4本の光線により定められるパッチ3200を交差する任意の光線は、同じビーム内にあると考えられる。図32内のビーム3201は方形構成の光線により定められるが、ビームは、種々の他の方法で定められてよいが、依然として本発明の基礎にある原理に従う(例えば、円、楕円、等)。
図33は、GPU3320の光線追跡エンジン3310が本願明細書に記載のビーム追跡技術を実装する例示的な実施形態を示す。特に、光線生成回路3304は、トラバース及び交差演算の実行されるべき複数の光線を生成する。しかしながら、個々の光線に対するトラバース、交差演算を実行するのではなく、図示の実施形態は、ビーム階層構造構成回路3305により生成された階層構造ビーム3307を用いて、トラバース及び交差を実行する。一実施形態では、ビーム階層構造は、境界体積階層構造(bounding volume hierarchy:BVH)と類似している。例えば、図34は、複数の異なる成分に分けられてよい1次ビーム3400の一例を提供する。特に、1次ビーム3400は象限3401~3404に分割されてよく、各象限は、それ自体が象限3404内のサブ象限A~Dのようなサブ象限に分割されてよい。1次ビームは、種々の方法で細分化されてよい例えば、一実施形態では、1次ビームは、(4分の1ではなく)半分に分割されてよく、各半分が2分の1に分割されてよい、等である。どのように細分化が行われるかに拘わらず、一実施形態では、BVHと同様の方法で階層構造が生成される。例えば、1次ビーム3400を表すルートノード、それぞれ象限3401~3404を表す第1レベルの子ノード、それぞれサブ象限A~Dの第2レベルの子ノード、等である。
一実施形態では、ビーム階層構造3307が構成されると、トラバース/交差回路3306は、ビーム階層構造3307及びBVH3308を用いてトラバース/交差演算を実行する。特に、これは、BVHに対してビームをテストし、BVHのいずれの部分も交差しないビームの部分をカリングしてよい。図34に示すデータを用いて、例えば、サブビーム3402及び3403に関連付けられたサブビームがBVH又はBVHの特定ブランチと交差しない場合、それらは該BVH又はブランチに関してカリングされてよい。残りの部分3401、3404は、縦型検索又は他の検索アルゴリズムを実行することにより、BVHに対してテストされてよい。
本発明の一実施形態による方法は、図35に示される。方法は、上述のグラフィック処理アーキテクチャのコンテキスト内で実施されてよいが、任意の特定のシステムアーキテクチャに限定されない。
3500で、1次ビームは、複数の光線を含み構成される。3501で、ビームは細分化され、階層データ構造が生成されてビーム階層構造を生成する。一実施形態では、動作3500~3501は、複数の光線からビーム階層構造を構築する単一の統合された動作として実行される。3502で、ビーム階層構造は、BVHと共に使用され、(ビーム階層構造からの)光線及び/又はBVHからのノード/プリミティブをカリングする。3503で、残りの光線及びプリミティブについて、光線プリミティブ交差が判定される。
<<分散型光線追跡システムにおける不可逆及び可逆パケット圧縮>>
一実施形態では、光線追跡演算は、ネットワークを介して一緒に結合された複数の計算ノードに渡り分散される。図36は、例えば、複数の光線追跡ノード3610~3613を含む光線追跡クラスタ3600が、並列して光線追跡演算を実行し、場合によっては、ノードのうちの1つにおいて結果を結合することを示す。図示のアーキテクチャでは、光線追跡ノード3610~3613は、ゲートウェイを介してクライアント側光線追跡アプリケーション3630に通信可能に結合される。
分散型アーキテクチャに伴う困難の1つは、光線追跡ノード3610~3613の各々の間で送信されなければならない膨大な量のパケット化されたデータである。一実施形態では、可逆圧縮技術及び不可逆圧縮技術の両方が、光線追跡ノード3610~3613間で送信されるデータを削減するために使用される。
可逆圧縮を実施するために、特定種類の演算の結果で満たされたパケットを送信するのではなく、受信ノードに結果を再構成させるデータ又はコマンドが送信される。例えば、確率的にサンプリングされた領域の光及び環境閉塞(ambient occlusion:AO)演算は、必ずしも方向を必要としない。その結果、一実施形態では、送信ノードは、単にランダムシードを送信する。ランダムシードは、次に、受信ノードによりランダムサンプリングを実行するために使用される。例えば、シーンがノード3610~3612に渡り分散される場合、ポイントp1~p3で光1をサンプリングするために、光ID及び起点のみが、ノード3610~3612へ送信される必要がある。ノードの各々は、次に、個々に、光を確率的にサンプリングしてよい。一実施形態では、ランダムシードは、受信ノードにより生成される。同様に、1次光線ヒットポイントについて、環境閉塞(AO)及びソフトシャドウサンプリングは、連続フレームの基点を待たずに、ノード3610~3612において計算できる。さらに、光線セットが同じポイント光源へ向かうことが分かっている場合、光源を識別する命令が、受信ノードへ送信されてよく、受信ノードは該命令を光線セットに適用する。別の例として、単一ポイントから送信されるN個の環境閉塞光線が存在する場合、このポイントからN個のサンプルを生成するためのコマンドが送信されてよい。
種々の追加技術が、不可逆圧縮のために適用されてよい。例えば、一実施形態では、BVHに関連する全ての座標値、プリミティブ、及び光線を量子化するために、量子化係数が利用されてよい。さらに、BVHノード及びプリミティブのようなデータのために使用される32ビット浮動小数点値は、8ビット整数値に変換されてよい。ある特定の実装では、光線パケットの境界(bound)が、最大精度で格納されるが、個々の光線ポイントP1~P3は、境界へのインデックス付けされたオフセットとして送信される。同様に、8ビット整数値をローカル座標として使用する、複数のローカル座標系が生成されてよい。これらのローカル座標系の各々の原点の位置は、最大精度(例えば、32ビット浮動小数点)の値を用いて符号化されてよく、グローバル及びローカル座標系を効率的に接続する。
以下は、本発明の一実施形態で利用される可逆圧縮の一例である。光線追跡プログラムの内部で使用される光線データフォーマットのnサンプルは以下の通りである。
各々の及び全ての生成されたノードについて生データを送信する代わりに、このデータは、値をグループ化することにより及び可能な場合には適用可能なメタデータを用いて間接的光線を生成することにより、圧縮できる。
<光線データのバンドリング及びグループ化>
一実施形態は、変更(modifier)を有する共通データ又はマスクのためにフラグを使用する。
例えば:
<起点が全て共有される>
全ての光線に渡り単一の起点のみが格納される場合を除き、全ての光線データはパケット化される。RayPacket.flagsはRAYPACKET_COMMON_ORIGINに設定される。RayPacketが受信されパケット解除されるとき、起点は単一の起点値から与えられる。
<起点が幾つかの光線の間でのみ共有される>
起点を共有する光線を除き、全ての光線データはパケット化される。ユニークな共有起点の各グループについて、演算(共有起点)を識別し、起点を格納し、及びどの光線が情報を共有するかをマスクする演算がパックされる。このような演算は、物質ID、プリミティブID、起点、方向、法線、等のような、ノード間の任意の共有値に対して行うことができる。
<間接的光線の送信>
多くの場合、光線データは、受信端において、光線データを生成するために使用される最小限のメタ情報により、導出できる。非常に一般的な例は、領域を確率的にサンプリングするために、複数の2次光線を生成することである。送信側が2次光線を生成して送信し、受信側がそれに対して演算する代わりに、送信側は、光線が任意の従属情報により生成される必要があるというコマンドを送信でき、該光線が受信端において生成される。どの受信側に光線を送信すべきかを決定するために、光線が最初に送信側により生成される必要がある場合、光線が生成され、正確に同じ光線を生成するためにランダムシードが送信され得る。
例えば、領域光源をサンプリングする64本のシャドウ光線によりヒットポイントをサンプリングするために、64本光線全部は、同じ計算N4から領域と交差する。共通の起点及び法線を有するRayPacketが生成される。受信側に結果として生じるピクセルの貢献をシェードするよう望む場合、より多くのデータが送信され得る。しかし、本例では、私達は、光線が別のノードをヒットするか否かのデータを返すだけであることを望む。RayOperationは、シャドウ光線生成演算のために生成され、サンプリングされるべきlightIDの値及び乱数シードを割り当てられる。N4は、光線パケットを受信すると、共有起点データを全ての光線に入力すること、及び乱数シードにより確率的にサンプリングされたlightIDに基づき方向を設定することにより、完全に満たされた光線データを生成し、元の送信側が生成したものと同じ光線を生成する。結果が返されると、全ての光線についてバイナリ結果が、返されるだけでよい。これは、光線に対するマスクにより処理できる。
本例で元の64本の光線を送信することは、104バイト*64光線=6656バイトを使用する。返る光線がそれらの生の形式で送信された場合、これは倍の13312バイトになる。共通光線起点、法線、及びシード及びIDによる光線生成演算のみを送信することによる可逆圧縮の使用では、29バイトのみが送信され、交差したマスクに対して8バイトが返される。これは、結果として、約360:1の、ネットワークを介して送信される必要のあるデータ圧縮レートをもたらす。これは、何らかの方法で識別される必要があるメッセージ自体を処理するためのオーバヘッドを含まないが、それは実装に任されている。光線起点及び方向を1次光線のpixelDから再計算するため、raypacket内の範囲に基づきpixelIDsを再計算するため、及び値の再計算のための多くの他の可能な実装のために、他の演算が行われてよい。同様の演算は、シャドウ、反射、屈折、環境閉塞、交差、体積交差、シェーディング、経路追跡における跳ね返り反射を含む、送信される任意の単一光線又は光線のグループについて使用できる。
図37は、光線追跡パケットの圧縮及び伸長を実行する2つの光線追跡ノード3710~3711の追加の詳細を示す。特に、一実施形態では、第1光線追跡エンジン3730が第2光線追跡エンジン3731へデータを送信する準備ができると、光線圧縮回路3720は、本願明細書に記載のように光線追跡データの不可逆及び/又は可逆圧縮を実行する(例えば、32ビット値を8ビット値に変換する、データを再構成する命令で生データを置き換える、等)。圧縮光線パケット3701は、ネットワークインタフェース3725からネットワークインタフェース3726へローカルネットワーク(例えば、10Gb/s、100Gb/s Ethernetネットワーク)を介して送信される。光線伸長回路は、次に、適切なときに、光線パケットを伸長する。例えば、光線伸長回路は、(例えば、照明演算のためのランダムサンプリングを実行するためにランダムシードを用いて)光線追跡データを再構成するコマンドを実行してよい。光線追跡エンジン3731は、次に、受信したデータを使用して、光線追跡演算を実行する。
逆方向では、光線圧縮回路3741は、光線データを圧縮し、ネットワークインタフェース3726は、(例えば、本願明細書に記載の技術を用いて)圧縮した光線データをネットワークを介して送信し、光線伸長回路3740は必要なときに光線データを伸長し、光線追跡エンジン3730は該データを光線追跡演算で使用する。図37では別個のユニットとして図示したが、光線伸長回路3740~3741は、それぞれ光線追跡エンジン3730~3731内に統合されてよい。例えば、圧縮光線データが光線データを再構成するコマンドを含むという点で、これらのコマンドは、各々のそれぞれの光線追跡エンジン3730~3731により実行されてよい。
図38に示すように、光線圧縮回路3720は、本願明細書に記載の不可逆圧縮技術を実行する(例えば、32ビット浮動小数点座標を8ビット整数座標に変換する)不可逆圧縮回路3801、及び可逆圧縮技術を実行する(例えば、コマンド及びデータを送信して、光線再圧縮回路3821がデータを再構成できるようにする)可逆圧縮回路3803を含んでよい。光線伸長回路3721は、不可逆伸長回路3802及び可逆伸長を実行する可逆伸長回路3840を含む。
一実施形態による方法は、図39に示される。方法は、本願明細書に記載の光線追跡アーキテクチャで実施されてよいが、任意の特定のアーキテクチャに限定されない。
3900で、第1光線追跡ノードから第2光線追跡ノードへ送信される光線データが受信される。3901で、不可逆圧縮回路は、不可逆圧縮を第1光線追跡データに対して実行する。3902で、可逆圧縮回路は、可逆圧縮を第2光線追跡データに対して実行する。3903で、圧縮光線追跡データは、第2光線追跡ノードへ送信される。3904で、不可逆/可逆伸長回路は、光線追跡データの不可逆/可逆伸長を実行する。3905で、第2光線追跡ノードは、伸長したデータを使用して光線追跡演算を実行する。
<<ハードウェアにより加速化されたハイブリッド光線追跡を有するグラフィックプロセッサ>>
本発明の一実施形態は、グラフィックコア3130上でラスタライズを、及び光線追跡コア3150、グラフィックコア3130、及び/又はCPU3199コア上で光線追跡演算を実行する、ハイブリッドレンダリングパイプラインを含む。例えば、ラスタライズ及び深さテストは、1次光線キャスティング段階において、グラフィックコア3130上で実行されてよい。光線追跡コア3150は、次に、光線反射、屈折、及びシャドウのために2次光線を生成してよい。さらに、特定の実施形態は、光線追跡コア3150が光線追跡演算を実行する、シーンの特定領域を(例えば、高反射率レベルのような物質特性閾に基づき)選択してよい。一方で、シーンの他の領域は、グラフィックコア3130上のラスタライズによりレンダリングされる。一実施形態では、このハイブリッド実装は、遅延が重要課題であるリアルタイム光線追跡アプリケーションのために使用される。
後述する光線トラバースアーキテクチャの一実施形態は、プログラマブルシェーディング及び光線トラバースの制御を、既存SIMD(single instruction multiple data)及び/又はSIMT(single instruction multiple thread)グラフィックプロセッサを用いて実行し、一方で、BVHトラバース及び/又は交差のような重要機能を専用ハードウェアを用いて加速化する。本実施形態では、非コヒーレント経路のSIMD使用は、トラバース中及びシェーディング前の特定ポイントで生成されたシェーダを再グループ化することにより、向上される。これは、オンチップでシェーダを動的に並べ替える専用ハードウェアを用いて達成される。返されると実行する連続に機能を分割すること、及びSIMD使用を向上するために実行前に連続を再グループ化することにより、反復が管理される。
光線トラバース/交差のプログラム可能な制御は、固定機能ハードウェアとして実装可能な内部トラバース及びGPUプロセッサ上で実行する外部トラバースにトラバース機能を分解することにより達成され、ユーザ定義トラバースシェーダを通じてプログラム可能な制御を可能にする。トラバースコンテキストをハードウェアとソフトウェアとの間で転送するコストは、内部及び外部トラバースの間の遷移の間に内部トラバース状態を控えめに切り捨てる(truncating)ことにより、削減される。
光線追跡のプログラム可能な制御は、以下の表Aにリストされる異なるシェーダ種類を通じて表現できる。種類毎に複数のシェーダが存在し得る。例えば、各物質は、異なるヒットシェーダを有し得る。
[表A]
一実施形態では、再帰的光線追跡が、1次シェーダセット又は1次光線について光線シーン交差を生成できる交差回路を開始するようグラフィックプロセッサに命令するAPI関数により開始される。これはまた、トラバース、Hitシェーダ、又はMissシェーダのような他のシェーダを生成する。子シェーダを生成するシェーダは、該子シェーダから戻り値を受信することもできる。呼び出し可能可能シェーダは、別のシェーダにより直接生成可能な且つ呼び出し側シェーダに値を返すことのできる汎用関数である。
図40は、シェーダ実行回路4000及び固定機能回路4010を含むグラフィック処理アーキテクチャの一実施形態を示す。汎用実行ハードウェアサブシステムは、複数のSIMD(single instruction multiple data)及び/又はSIMT(single instructions multiple threads)コア/実行ユニット(EU)4001’(つまり、各コアが複数の実行ユニットを含んでよい)、1つ以上のサンプラ4002、及びレベル1(L1)キャッシュ4003又は他の形式のローカルメモリを含む。固定機能ハードウェアサブシステム4010は、メッセージユニット4004、スケジューラ4007、光線BVHトラバース/交差回路4005、並べ替え回路4008、及びローカルL1キャッシュ4006を含む。
動作中、1次ディスパッチャ4009は、1次光線セットをスケジューラ4007にディスパッチし、スケジューラ4007は、SIMD/SIMTコア/EU4001上で実行されるシェーダのために作業をスケジューリングする。SIMDコア/EU4001は、上述の光線追跡コア3150及び/又はグラフィックコア3130であってよい。1次シェーダの実行は、実行されるべき(例えば、1つ以上の子シェーダ及び/又は固定機能ハードウェアにより実行されるべき)追加作業を生じる。メッセージユニット4004は、SIMTコア/EU4001により生成された作業を、スケジューラ4007に、必要に応じてフリースタックプールにアクセスして、並べ替え回路4008に、又は光線BVH交差回路4005に分配する。追加作業は、スケジューラ4007へ送信された場合、SIMD/SIMTコア/EU4001における処理のためにスケジューリングされる。スケジューリングの前に、並べ替え回路4008は、本願明細書に記載のように光線をグループ又はビンに並べ替えてよい(例えば、類似する特徴を有する光線をグループ化する)。光線BVH交差回路4005は、BVH体積を用いて光線の交差テストを実行する。例えば、光線BVH交差回路4005は、光線座標をBVHの各レベルと比較して、光線の交差する体積を識別してよい。
シェーダは、シェーダレコード、入力関数へのポインタを含むユーザ割り当て構造、ベンダ固有メタデータ、及びSIMDコア/EU4001により実行されるシェーダへのグローバル引数を用いて参照可能である。シェーダのインスタンスの各々の実行は、親シェーダ及び子シェーダの間で渡される引数を格納するために使用されてよい呼び出しスタックに関連付けられる。呼び出しスタックは、呼び出しから戻るときに実行される継続関数への参照を格納してもよい。
図41は、1次シェーダスタック、Hitシェーダスタック、トラバースシェーダスタック、継続関数スタック、及び光線BVH交差スタックを含む例示的な割り当てスタックセット4101を示す(記載のように、固定関数ハードウェア4010により実行されてよい)。新しいシェーダの起動は、フリースタックプール4102からの新しいスタックを実装してよい。呼び出しスタックは、ローカルL1キャッシュ4003、4006内にキャッシュされてよく、アクセス待ち時間を削減する。
一実施形態では、有限数の呼び出しスタックがあり、それぞれ、メモリの連続領域内で割り当てられた固定最大サイズ「Sstack」を有する。したがって、スタックの基本アドレスは、基本アドレス=SID*Sstackのように、スタックインデックス(SID)から直接計算できる。一実施形態では、スタックIDは、SIMDコア/EU4001に作業をスケジューリングするとき、スケジューラ4007により割り当てられ及び割り当て解除される。
一実施形態では、1次ディスパッチャ4009は、ホスト(例えばCPU)からのディスパッチコマンドに応答して1次シェーダをディスパッチするグラフィックプロセッサコマンドプロセッサを含む。スケジューラ4007は、これらのディスパッチ要求を受信し、各SIMDレーンにスタックIDを割り当て可能な場合、1次シェーダをSIMDプロセッサスレッドで開始する。スタックIDは、ディスパッチコマンドの始めに初期化されるフリースタックプール4102から割り当てられる。
実行中のシェーダは、生成メッセージをメッセージングユニット4004へ送信することにより、子シェーダを生成可能である。このコマンドは、シェーダに関連付けられたスタックIDを含み、各々のアクティブなSIMDレーンの子シェーダレコードへのポインタも含む。親シェーダは、このメッセージをアクティブレーンについて一度だけ発行できる。一実施形態では、生成メッセージを全ての関連レーンに送信した後に、親シェーダは終了する。
SIMDコア/EU4001上で実行するシェーダは、光線BVH交差のような固定関数タスクも、固定関数ハードウェアのために予約されたシェーダレコードポインタを有する生成メッセージを用いて生成できる。説明したように、メッセージングユニット4004は、生成した光線BVH交差作業を固定関数光線BVH交差回路4005へ、及び呼び出し可能シェーダを並べ替え回路4008へ直接送信する。一実施形態では、並べ替え回路は、シェーダレコードポインタによりシェーダをグループ化して、類似する特性を有するSIMDバッチを導出する。したがって、異なる親シェーダからのスタックIDは、同じバッチ内の並べ替え回路4008によりグループ化できる。並べ替え回路4008は、グループ化したバッチをスケジューラ4007へ送信する。スケジューラ4007は、グラフィックメモリ2511又はラストレベルキャッシュ(LLC)4020からのシェーダレコードにアクセスし、プロセッサスレッド上でシェーダを開始する。
一実施形態では、継続は、呼び出し可能シェーダとして取り扱われ、シェーダレコードを通じて参照されてもよい。子シェーダが生成され、親シェーダに値を戻すと、継続シェーダレコードへのポインタは、呼び出しスタック4101にプッシュされる。子シェーダが戻ると、継続シェーダレコードは、呼び出しスタック4101からポップされ、継続シェーダが生成される。生成された継続は、並べ替えユニットを呼び出し可能シェーダへと通過し、プロセッサスレッド上で開始される。
図42に示すように、並べ替え回路4008の一実施形態は、シェーダレコードポインタ4201A、4201B、4201nにより生成されたタスクをグループ化して、シェーディングのためにSIMDバッチを生成する。並べ替えられたバッチ内のスタックID又はコンテキストIDは、異なるディスパッチ及び異なる入力SIMDレーンからグループ化され得る。一実施形態では、グループ化回路4210は、各エントリがタグ4201により識別される複数のエントリを含むCAM(content addressable memory)構造4201を用いて並べ替えを実行する。説明したように、一実施形態では、タグ4201は、対応するシェーダレコードポインタ4201A、4201B、4201nである。一実施形態では、CAM構造4201は、それぞれシェーダレコードポインタに対応する不完全SIMDに関連付けられた限られた数のタグ(例えば、32、64、128、等)を格納する。
入力生成コマンドに対して、各SIMDレーンは、対応するスタックID(各CAMエントリ内の16個のコンテキストID0~15として示される)、及びシェーダレコードポインタ4201A~B、...、n(タグ値として機能する)を有する。一実施形態では、グループ化回路4210は、各レーンのシェーダレコードポインタを、CAM構造4201内のタグ4201と比較して、一致するバッチを見付ける。一致するバッチが見付かった場合、スタックID/コンテキストIDは、バッチに追加される。その他の場合、新しいシェーダレコードポインタタグを有する新しいエントリが生成され、場合によっては、不完全バッチを有する古いエントリを退去させる。
実行中シェーダは、割り当て解除メッセージをメッセージングユニットへ送信することにより、自身が空のときに呼び出しスタックを割り当て解除できる。割り当て解除メッセージは、スケジューラへ中継される。スケジューラは、アクティブSIMDレーンのためにスタックID/コンテキストIDをフリープールに返す。
本発明の一実施形態は、固定機能光線トラバース及びソフトウェア光線トラバースの組み合わせを用いて、光線トラバース演算のためにハイブリッドアプローチを実施する。したがって、本発明の一実施形態は、固定機能トラバースの効率性を維持しながら、ソフトウェアトラバースの柔軟性を提供する。図43は、ハイブリッドトラバースにために使用され得る高速化構造を示す。該構造は、2レベル木であり、単一の最上位レベルBVH4300及び幾つかの最下位レベルBVH4301及び4302を有する。グラフィック要素が右側に示され、内部トラバースパス4303、外側トラバースパス4304、トラバースノード4305、三角形4306を有するリーフノード、及びカスタムプリミティブ4307を有するリーフノードを含む。
最上位レベルBVH4300内の三角形4306を有するリーフノードは、カスタムプリミティブ又はトラバースシェーダレコードの三角形及び交差シェーダレコードを参照し得る。最下位レベルBVH4301~4302の三角形4306を有するリーフノードは、カスタムプリミティブの三角形及び交差シェーダレコードのみを参照できる。参照の種類は、リーフノード4306内で符号化される。内部トラバース4303は、各BVH4300~4302内のトラバースを参照する。内部トラバース演算は光線BVH交差の計算を含み、BVH構造4300~4302に渡るトラバースは外側トラバースとして知られている。内部トラバース演算は、固定機能ハードウェア内で効率的に実施できる。一方、外側トラバース演算は、プログラム可能なシェーダにより許容可能な性能で実行できる。したがって、本発明の一実施形態は、固定機能回路4010を用いて内部トラバース演算を実行し、プログラム可能なシェーダを実行するSIMD/SIMTコア/EU4001を含むシェーダ実行回路4000を用いて外側トラバース演算を実行する。
SIMD/SIMTコア/EU4001は、簡単のために、ここで単に「コア」、「SIMDコア」、「EU」又は「SIMDプロセッサ」と時折呼ばれることに留意する。同様に、光線BVHトラバース/交差回路4005は、単に「トラバースユニット」、「トラバース/交差ユニット」又は「トラバース/交差回路」と時折呼ばれる。代替の用語が使用されるとき、それぞれの回路/ロジックを指定するために使用される特定の名称は、本願明細書に記載のような回路/ロジックの実行する基礎にある機能を変更しない。
さらに、説明目的で図40に単一のコンポーネントとして示されたが、トラバース/交差ユニット4005は、個別トラバースユニット及び個別交差ユニットを含んでよい。これらのユニットの各々は、本願明細書に記載のように回路及び/又はロジックで実装されてよい。
一実施形態では、光線が、内部トラバース中にトラバースノードを交差するときトラバースシェーダが生成される。並べ替え回路4008は、シェーダレコードポインタ4201A~B、nにより、これらのシェーダをグループ化して、SIMDバッチを生成する。SIMDバッチは、グラフィックSIMDコア/EU4001上でのSIMD実行のためにシェーダ4007により開始される。トラバースシェーダは、幾つかの方法でトラバースを変更でき、広範なアプリケーションを可能にする。例えば、トラバースシェーダは、より粗い詳細レベル(coarser level of detail:LOD)でBVHを選択し、又は光線を変換でき、剛体を可能にする。トラバースシェーダは、次に、選択されたBVHについて内部トラバースを生成する。
内部トラバースは、BVHをトラバースし及び光線ボックス及び光線三角形交差を計算することにより、光線BVH交差を計算する。内部トラバースは、シェーダと同様に、メッセージをメッセージングユニット4004へ送信することにより生成される。メッセージングユニット4004は、対応する生成メッセージを光線BVH交差回路4005へと中継し、光線BVH交差回路4005は光線BVH交差を計算する。
一実施形態では、内部トラバースのためのスタックは、固定機能回路4010(例えば、L1キャッシュ4006内にある)にローカルに格納される。光線がトラバースシェーダ又は交差シェーダに対応するリーフノードを交差するとき、内部トラバースは終了し、内部スタックが切り詰められる(truncated)。光線及びBVHへのポインタを有する切り詰められたスタックは、呼び出し側シェーダにより指定された位置においてメモリに書き込まれ、次に対応するトラバースシェーダ又は交差シェーダが生成される。光線が内部トラバース中に任意の三角形を交差する場合、対応するヒット情報は、以下のコードに示されるように、これらのシェーダに入力引数として提供される。これらの生成されたシェーダは、並べ替え回路4008によりグループ化されて、実行のためにSIMDバッチを生成する。
内部トラバーススタックを切り詰めることは、それをメモリに放出する(spilling)コストを削減する。本発明の一実施形態は、Restart Trail for Stackless BVH Traversal, High Performance Graphics(2010), pp.107-111に記載のアプローチを使用して、スタックをスタックの最上部において、42ビットの再開トレイル及び6ビットの深さの値の少数のエントリに切り詰める。再開トレイルは、BVHの内側で既に取られたブランチを示し、深さ値は、最後のスタックエントリに対応するトラバースの深さを示す。これは、後の時間に内部トラバースを再開するための充分な情報である。
内部トラバースは、内部スタックが空であり、且つテストすべきBVHノードが存在しないとき、完了する。この場合には、外部スタックの最上部がポップし(pop)、外部スタックが空でない場合にトラバースを再開する外部スタックハンドラが生成される。
一実施形態では、外側トラバースは、主トラバース状態機械を実行し、シェーダ実行回路4000により実行されるプログラムコード内に実装される。以下の条件の下で、内部トラバースクエリを生成する。(1)新しい光線がHitシェーダ又は1次シェーダにより生成されるとき。(2)トラバースシェーダがトラバースのためにBVHを選択するとき。及び(3)外部スタックハンドラはBVHの内部トラバースを再開するとき。
図44に示すように、内部トラバースが生成される前に、切り詰められた内部スタック4410を格納するために、固定機能回路4010に呼び出しスタック4405上で、空間が割り当てられる。呼び出しスタック及び内部スタックの最上部へのオフセット4403~4404は、メモリ2511に格納されるトラバース状態4400内に維持される。トラバース状態4400は、世界(world)空間4401及びオブジェクト空間4402内の光線、及び最近接交差プリミティブのヒット情報も含む。
トラバースシェーダ、交差シェーダ、及び外部スタックハンドラは、全て、光線BVH交差回路4005により生成される。トラバースシェーダは、第2レベルBVの新しい内部トラバースを開始する前に、呼び出しスタック4405上で割り当てる。外部スタックハンドラは、ヒット情報の更新、及び任意の保留中の内部トラバースタスクの再開を担うシェーダである。外部スタックハンドラは、トラバースが完了したとき、Hit又はMissシェーダの生成も担う。トラバースは、生成すべき保留中の内部トラバースクエリが存在しないとき、完了する。トラバースが完了し、交差が見付かると、Hitシェーダが生成され、その他の場合、Missシェーダが生成される。
上述のハイブリッドトラバース方式は2レベルBVH階層構造を使用するが、本願明細書に記載の本発明の実施形態は、外部トラバース実装において対応する変更を伴い、任意の数のBVHレベルを使用してよい。
さらに、固定機能回路4010は、上述の実施形態において光線BVH交差を実行するために記載されたが、他のシステムコンポーネントも固定機能回路内に実装されてよい。例えば、上述の外部スタックハンドラは、場合によっては固定機能BVHトラバース/交差回路4005内に実装され得る内部(ユーザに見えない)シェーダであってよい。この実装は、固定機能交差ハードウェア40005とプロセッサとの間のディスパッチされるシェーダ段階及びラウンドトリップの数を削減するために使用されてよい。
本願明細書に記載の本発明の実施形態は、既存の及び将来のGPUプロセッサ上で一層SIMD効率良く実行可能なユーザ定義機能を用いて、プログラム可能なシェーディング及び光線トラバース制御を可能にする。光線トラバースのプログラム可能な制御は、手順のインスタンス化、高度な詳細レベルの選択、カスタム化されたプリミティブ交差及び遅延(lazy)BVH更新のような、幾つかの重要な特徴を可能にする。
<<クラウドに基づく光線追跡>>
特定の分散型光線追跡実装は、特定種類のデータを圧縮する実施形態、及びノード間で共有される必要のあるデータを知的に決定し必要なデータを動的に分配する実施形態のように、上述された。
以下に記載する実施形態は、クラウド内の低解像度のノイズの多いデータを符号化し及び次にクライアントにおいてノイズ除去し続いて復号するために、上述の技術のうちの1つ以上と結合して使用されてよい。中心窩レンダリング(foveated rendering)では、一実施形態では、圧縮アーチファクトを回避するために、中心窩領域(fovea region)(つまり、ユーザの注視の向けられる領域)がローカルにレンダリングされる。複数視聴者の実装では、光線追跡される視野独立照明がクラウド内で実行され、各クライアントは、視野依存照明効果をローカルで適用する。
一実施形態は、図45に関して説明される。図45では、ノード4590はクライアントシステム内のローカルGPU装置(例えば、頭部搭載ディスプレイを有するコンピュータシステム)の処理及び/又は回路であり、ノード4591は、クライアントシステム内の第2ローカルGPU装置、エッジ装置(例えば、ユーザのネットワークの境界にある装置)内のGPU装置、又はクラウドサーバファーム内のGPU装置のいずれかにある処理及び/又は回路であり、ノード4592は、「エッジ」装置内の第2GPU装置又はクラウドサーバファーム内のGPU装置のいずれかにおいて実行する回路及び/又は処理を含む。
例として、クラウドサーバファームは、仮想化技術を用いて、GPU(vGPU)の仮想化部分を、ノード4591クライアントのようなクライアントに割り当ててよい。複数のGPUの処理リソースを、ノード4591のユーザにより又はクライアントを所有する組織/事業体により支払われるサブスクリプション額に基づき細分化することを含む、種々の構成が可能である。これらのGPU仮想化技術は、良く知られており、ここでは本発明の基礎にある原理を曖昧にすることを回避するために更に記載されない。
一実施形態では、ノード4592は、光線追跡技術を用いて高忠実度視野独立表面を生成する持続的に実行する処理及び/又関連する回路を含む。したがって、ノード4592は、(例えば本願明細書に記載のトラバース及び交差回路のような)専用光線追跡回路、及び1人以上のユーザのために充分な低待ち時間でリアルタイム光線追跡を実行するために必要な高帯域幅/高速メモリ及びIO機能を含む、グラフィック処理リソースを実装されてよい。
4501で、ノード4590は、自身のローカルグラフィック処理リソースで独立レンダリングを実行する。例えば、ノード4590は、ローカル仮想現実アプリケーション又は他の形式のグラフィックアプリケーションを、専用ローカルグラフィックデータセットを用いて実行してよい。4502で、ノード4590は、ユーザの現在視野の指示を送信する。例えば、センサがユーザの顔の方向を決定する、及び/又はカメラ若しくは他のセンサがユーザの網膜の方向を追跡する視標追跡を含む、種々の形式の視野追跡が使用されてよい。
追跡の種類に拘わらず、ノード4591は、4502で現在視野の指示を受信し、それに応答して、4503で視野独立表面の要求をノード4592へ送信する。ノード4592は、4504で現在シーンに対して視野独立光線追跡演算を実行するよう動作可能であり(例えば、BVHをトラバースし、及び光線プリミティブ交差を識別する)、圧縮表面を生成する。4505で、ノード4592は該圧縮表面をノード4591へ送信する。一実施形態では、ノード4592は、H.264符号化のようなビデオ符号化及び圧縮技術を使用して、圧縮表面4505を生成する。本発明の基礎にある原理に従いながら、様々な他の符号化技術が使用されてよい。
幾らかの時間の後に、4507で、ノード4590は、(例えばユーザの注視の現在方向に基づき)視野依存表面に対する要求を送信する。4506で、ノード4591は、視野依存変換を実行するために、圧縮表面4505を使用する。一実施形態では、ノード4591は、圧縮表面4505により提供される視野独立座標がユーザの現在視野に従い視野依存座標に変換される、変換演算を実行する。
一実施形態では、ノード4591は、ノード4592により返された表面を復号し及び伸長する。ビデオ符号化により圧縮表面が生成された場合、ノード4591は、対応するビデオ復号(例えば、H.264復号)を利用し、ノード4590によりレンダリングされているシーンについて照明のような視野依存情報を表す表面を生成してよい。一実施形態では、ノード4591は、ノード4590が視野依存レンダリング4509を達せするために使用する高解像度圧縮(又は非圧縮)表面4508を生成するために、本願明細書に記載のような機械学習技術も使用してよい。
特に、ノード4590は、4501で、光線追跡と独立にレンダリングを完了した後に、4508で、ノード4591が高解像度視野依存表面を提供するのを待つ。ノード4591が高解像度表面4508をノード4590に返すと、ノード4590は、(表面が圧縮されている場合には)ビデオ伸長のような技術を用いて圧縮表面4508を伸長し、高解像度圧縮表面4508を最終レンダリング画像に統合することによりシーンのレンダリングを終了させる。
図46は、ハイブリッド光線追跡実装を用いてグラフィックレンダリングを実行するクライアント-サーバアーキテクチャの一実施形態を示す。クライアント4680は、メモリ4690に格納されたグラフィックアプリケーション4625を実行するためにGPU4601を含む。GPU4601上のローカルレンダリングエンジン4620は、一実施形態では光線追跡と独立であるフレームのレンダリング、例えば照明に依存しないレンダリングを開始する。
ローカルレンダリングエンジン4620は、第2GPU4602上の非同期メッセージを視野依存処理回路/ロジック4630へ送信して、レンダリングされるべきシーンのユーザの現在視野を通知する。上述のように、第2GPU4602は、クライアント4680内の第2グラフィックプロセッサとして統合されてよく、又はクライアント4680と同じローカルネットワークにある別の装置上にあってよい。
一実施形態では、視野独立回路/ロジック4630は、サーバ4681へ、レンダリング中のシーンについての照明のような視野独立情報を表す表面についての要求を送信する。サーバ4681は、少なくとも1つのGPU4603及びメモリ4691を備えられ、レンダリング中のシーンに関連するローカルグラフィックデータ4621を用いて視野独立光線追跡4640を実行する。一実施形態では、視野独立光線追跡4640は、GPU4603上で持続的に実行し、光線追跡技術を用いて高忠実度視野独立表面を生成する。サーバ4681は、例えば、クラウドに基づくデータセンタ内のサーバであってよい。
視野独立光線追跡4640は、ビデオ復号技術を実装してよいデコーダ4621を用いて表面を伸長する視野依存処理回路/ロジック4630へ、低解像度及び圧縮表面を返す。視野依存処理回路/ロジック4630は、ローカルレンダリングエンジン4620によりレンダリング中のシーンについて、照明のような視野依存情報を表す表面を生成する。一実施形態では、視野依存処理回路/ロジック4630は、また、機械学習又は類似の技術を用いて、画像品質を向上する。
ローカルレンダリングエンジン4620は、光線追跡と独立の任意のレンダリングを完了し、視野依存処理回路/ロジック4630上で、視野依存高解像度圧縮表面を提供するのを待機する。一実施形態では、視野依存表面は、圧縮され、該表面を復号するためにデコーダ4621を含むクライアント4680へ送信される。ローカルレンダリングエンジン4620は、次に、表面を用いてローカルディスプレイ上でシーンのレンダリングを仕上げる。
上述の技術は、クライアント4680のような複数のクライアントに表面の視野独立レンダリングを実行するために、仮想化グラフィック処理サーバ4681の高性能グラフィック処理リソースのための方法を提供した。視野独立表面は、視野依存表面に変換される。視野依存表面は、次に、ローカルレンダリングエンジン4620により現在フレームに統合され、それにより、リアルタイム光線追跡実装を可能にし、ローカルクライアント4680において追加ハードウェアサポートの必要が無い。
実施形態では、用語「エンジン」又は「モジュール」又は「ロジック」は、1又は複数のソフトウェア若しくはフォームウェアプログラムを実行するASIC(Application Specific Integrated Circuit)、電子回路、プロセッサ(共有、専用、又はグループ)、及び/又はメモリ(共有、専用、又はグループ)、組合せ論理回路、及び/又は記載の機能を提供する他の適切なコンポーネントを表し、その一部であり、又はそれを含んで良い。実施形態では、エンジン、モジュール、又はロジックは、ファームウェア、ハードウェア、ソフトウェア、又はファームウェア、ハードウェア、及びソフトウェアの任意の組み合わせで実装されてよい。
本発明の実施形態は、上述した種々のステップを含んでよい。ステップは、汎用目的又は特定目的プロセッサにステップを実行させるために用いることができる機械実行可能命令で実装されてよい。代替で、これらのステップは、ステップを実行するハードワイヤロジックを含む専用ハードウェアコンポーネントにより、又はプログラミングされたコンピュータコンポーネントとカスタムハードウェアコンポーネントとの組合せにより実行されてよい。
本願明細書に記載のように、命令は、特定演算を実行するよう構成された又は所定機能若しくは非一時的コンピュータ可読媒体に実装されたメモリに格納されたソフトウェア命令を有する特定用途向け集積回路(ASIC)のようなハードウェアの特定構成を表してよい。したがって、図示の技術は、1つ以上の電子装置(例えば、末端局、ネットワーク要素、等)上に格納され実行されるコード及びデータを用いて実装できる。このような電子装置は、非一時的コンピュータ可読記憶媒体(例えば、磁気ディスク、光ディスク、ランダムアクセスメモリ、読み出し専用メモリ、フラッシュメモリ素子、位相変化メモリ)のようなコンピュータ機械可読媒体、及び一時的コンピュータ機械可読通信媒体(例えば、電気、光、音響、若しくは他の形式の伝搬信号、例えば搬送波、赤外線信号、デジタル信号、等)を用いて、コード及びデータを(内部で及び/又は他の電子装置とネットワークを介して)を用いて、格納し通信する。
さらに、このような電子装置は、標準的に、1つ以上の記憶装置(非一時的機械可読記憶媒体)、ユーザ入力/出力装置(例えば、キーボード、タッチスクリーン、及び/又はディスプレイ)、及びネットワーク接続、のような1つ以上の他のコンポーネントに結合された1つ以上のプロセッサのセットを含む。プロセッサ及び他のコンポーネントのセットの結合は、標準的に、1つ以上のバス及びブリッジ(バス制御部とも呼ばれる)を通じる。記憶装置及びネットワークトラフィックを伝達する信号は、それぞれ、1つ以上の機械可読記憶媒体及び機械可読通信媒体を表す。したがって、所与の電子装置の記憶装置は、標準的に、該電子装置の1つ以上のプロセッサのセットにおける実行のためにコード及び/又データを格納する。勿論、本発明の実施形態の1つ以上の部分は、ソフトウェア、ファームウェア、及び/又はハードウェアの異なる組み合わせを用いて実装されてよい。この詳細説明では、説明を目的として、本発明の実施形態の完全な理解を提供するために、多くの詳細事項が説明された。しかしながら、当業者は、本発明がそのような特定の詳細の幾つかにかかわらず実施できることを理解するだろう。特定の例では、本発明の主題を曖昧にすることを回避するために、良く知られた構造及び機能は詳述されなかった。したがって、本発明の範囲及び精神は、添付の請求の範囲の観点で判断されるべきである。