(57)【要約】      （修正有）【課題】クラウドに基づくリアルタイムレンダリングを提供する。【解決手段】処理システム１００において、光線追跡独立演算を含む第１グラフィック処理演算セットを実行してグラフィックシーンをレンダリングする第１グラフィック処理ノードと、第１グラフィック処理ノードを第２グラフィック処理ノードに結合する相互接続又はネットワークインタフェースと、を含む。第２グラフィック処理ノードは、第１グラフィック処理ノードのユーザの現在視野の指示を受信し、視野独立光線トラバース及び交差演算により生成する視野独立表面を受信又は構成し、それに応答して、視野独立表面の視野依存変換を、ユーザの現在視野に基づき実行して、視野依存表面を生成し、視野依存表面を第１グラフィック処理ノードに提供する。第１グラフィック処理ノードは、第２グラフィック処理演算セットを実行して、視野依存表面を用いてグラフィックシーンのレンダリングを完了する。【選択図】図１
2020109620.tif 000002
【特許請求の範囲】
【請求項１】
システムであって、
第１グラフィック処理演算セットを実行してグラフィックシーンをレンダリングする第１グラフィック処理ノードであって、前記第１グラフィック処理演算セットは、光線追跡独立演算を含む、第１グラフィック処理ノードと、
前記第１グラフィック処理ノードを第２グラフィック処理ノードに結合する相互接続又はネットワークインタフェースと、
を含み、
前記第２グラフィック処理ノードは、前記第１グラフィック処理ノードのユーザの現在視野の指示を受信し、視野独立光線トラバース及び交差演算により生成される視野独立表面を受信し又は構成し、
前記第２グラフィック処理ノードは、応答して、前記視野独立表面の視野依存変換を、前記ユーザの前記現在視野に基づき実行して、視野依存表面を生成し、及び前記視野依存表面を前記第１グラフィック処理ノードに提供し、
前記第１グラフィック処理ノードは、第２グラフィック処理演算セットを実行して、前記視野依存表面を用いて前記グラフィックシーンのレンダリングを完了する、システム。
【請求項２】
前記第１グラフィック処理演算セットは、光線追跡独立演算を含む、請求項１に記載のシステム。
【請求項３】
前記第１グラフィック処理演算セットは、光独立であるレンダリング演算を含む、請求項２に記載のシステム。
【請求項４】
前記視野独立光線トラバース及び交差演算を実行して、前記視野独立表面を生成する第３グラフィック処理ノード、を更に含む請求項１又は３に記載のシステム。
【請求項５】
前記第３グラフィック処理ノードは、前記視野独立表面を圧縮して、圧縮視野独立表面を生成し、及び前記圧縮視野独立表面を前記第２グラフィック処理ノードへ送信する、請求項４に記載のシステム。
【請求項６】
前記第３グラフィック処理ノードは、クラウドサービスのグラフィック処理リソースを含み、前記第３グラフィック処理ノードは、ネットワークインタフェースを介して前記第２グラフィック処理ノードに結合される、請求項５に記載のシステム。
【請求項７】
前記第３グラフィック処理ノードは、ビデオ符号化を実行して、前記視野独立表面を圧縮し、前記第２グラフィック処理ノードは、ビデオ復号を実行して、前記視野独立表面を伸長する、請求項６に記載のシステム。
【請求項８】
前記第１グラフィック処理ノードは、前記第１グラフィック処理演算セットを実行する第１グラフィック処理コアセットを含む第１グラフィック処理ユニット（ＧＰＵ）を含む、請求項１又は７に記載のシステム。
【請求項９】
前記第２グラフィック処理ノードは、前記視野依存変換を実行する第２グラフィック処理コアセットを含む第２ＧＰＵを含む、請求項８に記載のシステム。
【請求項１０】
方法であって、
第１グラフィック処理演算セットを第１グラフィック処理ノードで実行してグラフィックシーンをレンダリングするステップであって、前記第１グラフィック処理演算セットは、光線追跡独立演算を含む、ステップと、
前記第１グラフィック処理ノードのユーザの現在視野を決定するステップと、
前記ユーザの前記現在視野の指示を第２グラフィック処理ノードで受信するステップであって、前記第２グラフィック処理ノードは、視野独立光線トラバース及び交差演算により生成される視野独立表面を受信し又は構成する、ステップと、
前記視野独立表面の視野依存変換を、前記第２グラフィック処理ノードで、前記ユーザの前記現在視野に基づき実行して、視野依存表面を生成し、及び前記視野依存表面を前記第１グラフィック処理ノードに提供するステップと、
第２グラフィック処理演算セットを、前記第１グラフィック処理ノードで実行して、前記視野依存表面を用いて前記グラフィックシーンのレンダリングを完了するステップと、
を含む方法。
【請求項１１】
前記第１グラフィック処理演算セットは、光線追跡独立演算を含む、請求項１０に記載の方法。
【請求項１２】
前記第１グラフィック処理演算セットは、光独立であるレンダリング演算を含む、請求項１１に記載の方法。
【請求項１３】
前記視野独立光線トラバース及び交差演算を第３グラフィック処理ノードで実行して、前記視野独立表面を生成するステップ、を更に含む請求項１０又は１２に記載の方法。
【請求項１４】
前記第３グラフィック処理ノードは、前記視野独立表面を圧縮して、圧縮視野独立表面を生成し、及び前記圧縮視野独立表面を前記第２グラフィック処理ノードへ送信する、請求項１３に記載の方法。
【請求項１５】
前記第３グラフィック処理ノードは、クラウドサービスのグラフィック処理リソースを含み、前記第３グラフィック処理ノードは、ネットワークインタフェースを介して前記第２グラフィック処理ノードに結合される、請求項１４に記載の方法。
【請求項１６】
前記第３グラフィック処理ノードは、ビデオ符号化を実行して、前記視野独立表面を圧縮し、前記第２グラフィック処理ノードは、ビデオ復号を実行して、前記視野独立表面を伸長する、請求項１５に記載の方法。
【請求項１７】
前記第１グラフィック処理ノードは、前記第１グラフィック処理演算セットを実行する第１グラフィック処理コアセットを含む第１グラフィック処理ユニット（ＧＰＵ）を含む、請求項１０又は１６に記載の方法。
【請求項１８】
前記第２グラフィック処理ノードは、前記視野依存変換を実行する第２グラフィック処理コアセットを含む第２ＧＰＵを含む、請求項１７に記載の方法。
【請求項１９】
コンピュータプログラムであって、機械により実行されると、前記機械に、以下の演算：
第１グラフィック処理演算セットを第１グラフィック処理ノードで実行して、グラフィックシーンをレンダリングするステップであって、前記第１グラフィック処理演算セットは、光線追跡独立演算を含む、ステップと、
前記第１グラフィック処理ノードのユーザの現在視野を決定するステップと、
前記ユーザの前記現在視野の指示を第２グラフィック処理ノードで受信するステップであって、前記第２グラフィック処理ノードは、視野独立光線トラバース及び交差演算により生成される視野独立表面を受信し又は構成する、ステップと、
前記視野独立表面の視野依存変換を、前記第２グラフィック処理ノードで、前記ユーザの前記現在視野に基づき実行して、視野依存表面を生成し、及び前記視野依存表面を前記第１グラフィック処理ノードに提供するステップと、
第２グラフィック処理演算セットを、前記第１グラフィック処理ノードで実行して、前記視野依存表面を用いて前記グラフィックシーンのレンダリングを完了するステップと、
を実行させる、コンピュータプログラム。
【請求項２０】
前記第１グラフィック処理演算セットは、光線追跡独立演算を含む、請求項１９に記載のコンピュータプログラム。
【請求項２１】
前記第１グラフィック処理演算セットは、光独立であるレンダリング演算を含む、請求項２０に記載のコンピュータプログラム。
【請求項２２】
前記機械に、以下の演算：
前記視野独立光線トラバース及び交差演算を第３グラフィック処理ノードで実行して、前記視野独立表面を生成するステップ、
を更に実行させる請求項１９又は２１に記載のコンピュータプログラム。
【請求項２３】
前記第３グラフィック処理ノードは、前記視野独立表面を圧縮して、圧縮視野独立表面を生成し、及び前記圧縮視野独立表面を前記第２グラフィック処理ノードへ送信する、請求項２２に記載のコンピュータプログラム。
【請求項２４】
前記第３グラフィック処理ノードは、クラウドサービスのグラフィック処理リソースを含み、前記第３グラフィック処理ノードは、ネットワークインタフェースを介して前記第２グラフィック処理ノードに結合される、請求項２３に記載のコンピュータプログラム。
【請求項２５】
前記第３グラフィック処理ノードは、ビデオ符号化を実行して、前記視野独立表面を圧縮し、前記第２グラフィック処理ノードは、ビデオ復号を実行して、前記視野独立表面を伸長する、請求項２４に記載のコンピュータプログラム。
【請求項２６】
請求項１９乃至２５のいずれか一項に記載のコンピュータプログラムを格納した機械可読記憶媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、概して、グラフィックプロセッサの分野に関する。より具体的には、本発明は、より効率的な光線追跡演算を実行する機器及び方法に関する。
【背景技術】
【０００２】
光線追跡（Ray  tracing、光線追跡法）は、光の伝搬が物理法則に基づくレンダリングを通じてシミュレートされる技術である。映画の上映で広く使用され、ほんの数年前までは、リアルタイム性能のためには、あまりにもリソース集約的であると考えられていた。光線追跡における主な演算のうちの１つは、「光線トラバース（ray  traversal）」として知られる光線シーンの交差（ray-scene  intersections）のための可視性クエリを処理することである。これは、ＢＶＨ（bounding  volume  hierarchy）の中のノードをトラバースし（横断し）及び交差することにより、光線シーンの交差を計算する。
【０００３】
ノイズ除去は、滑らかなノイズのない画像によるリアルタイム光線追跡のための重要な特徴になってきている。レンダリングは、分散型システムに渡り複数の装置上で行われ得る。しかし、これまで既存のノイズ除去の枠組みは、すべて単一の機械上の単一のインスタンスで動作する。レンダリングが複数の装置に渡り行われている場合、それらは、画像のノイズ除去された部分を計算するためにアクセス可能なレンダリングされたピクセルを全部有しないことがある。
【０００４】
【図面の簡単な説明】
【０００５】
本発明の良好な理解は、以下の図面と関連した以下の詳細な説明から得られる。
【０００６】
【図１】１つ以上のプロセッサコア及びグラフィックプロセッサを有するプロセッサを備えるコンピュータシステムの実施形態のブロック図である。
【０００７】
【図２】１つ以上のプロセッサコア、統合メモリ制御部、及び統合グラフィックプロセッサを有するプロセッサの一実施形態のブロック図である。
【０００８】
【図３】個別グラフィック処理ユニットであってよい又は複数の処理コアと共に統合されたグラフィックプロセッサであってよい、グラフィックプロセッサの一実施形態のブロック図である。
【０００９】
【図４】グラフィックプロセッサのグラフィック処理エンジンの実施形態のブロック図である。
【００１０】
【図５】グラフィックプロセッサの別の実施形態のブロック図である。
【００１１】
【図６Ａ】実行回路及びロジックの例を示す。
【図６Ｂ】実行回路及びロジックの例を示す。
【００１２】
【図７】実施形態によるグラフィックプロセッサ実行単位命令フォーマットを示す。
【００１３】
【図８】グラフィックパイプライン、メディアパイプライン、ディスプレイエンジン、スレッド実行ロジック、及びレンダリング出力パイプラインを含むグラフィックプロセッサの別の実施形態のブロック図である。
【００１４】
【図９Ａ】実施形態によるグラフィックプロセッサコマンドフォーマットを示すブロック図である。
【００１５】
【図９Ｂ】実施形態によるグラフィックプロセッサコマンドシーケンスを示すブロック図である。
【００１６】
【図１０】実施形態によるデータ処理システムの例示的なグラフィックソフトウェアアーキテクチャを示す。
【００１７】
【図１１Ａ】集積回路を製造するために使用され得る例示的なＩＰコア開発システム及び例示的なパッケージアセンブリを示す。
【図１１Ｂ】集積回路を製造するために使用され得る例示的なＩＰコア開発システム及び例示的なパッケージアセンブリを示す。
【００１８】
【図１２】実施形態による、１つ以上のＩＰコアを用いて製造され得る例示的なシステムオンチップ集積回路を示す。
【００１９】
【図１３Ａ】１つ以上のＩＰコアを用いて製造され得るシステムオンチップ集積回路の例示的なグラフィックプロセッサを示す。
【図１３Ｂ】１つ以上のＩＰコアを用いて製造され得るシステムオンチップ集積回路の例示的なグラフィックプロセッサを示す。
【００２０】
【図１４Ａ】例示的なグラフィックプロセッサアーキテクチャを示す。
【図１４Ｂ】例示的なグラフィックプロセッサ
【００２１】
【図１５】機械学習アーキテクチャの初期トレーニングを実行するためのアーキテクチャの一実施形態を示す。
【００２２】
【図１６】機械学習エンジンが実行時間中に絶えずトレーニングされ更新される一実施形態を示す。
【００２３】
【図１７】機械学習エンジンが実行時間中に絶えずトレーニングされ更新される別の実施形態を示す。
【００２４】
【図１８Ａ】機械学習データがネットワーク上で共有される実施形態を示す。
【図１８Ｂ】機械学習データがネットワーク上で共有される実施形態を示す。
【００２５】
【図１９】機械学習エンジンをトレーニングする方法の一実施形態を示す。
【００２６】
【図２０】ノードがゴースト領域データを交換して分散型ノイズ除去演算を実行する一実施形態を示す。
【００２７】
【図２１】画像レンダリング及びノイズ除去演算が複数のノードに渡り分散されるアーキテクチャの一実施形態を示す。
【００２８】
【図２２】分散型レンダリング及びノイズ除去のためのアーキテクチャの更なる詳細を示す。
【００２９】
【図２３】本発明の一実施形態による方法を示す。
【００３０】
【図２４】機械学習方法の一実施形態を示す。
【００３１】
【図２５】複数の相互接続された汎用グラフィックプロセッサを示す。
【００３２】
【図２６】機械学習実装のための畳み込みレイヤ及び全結合層のセットを示す。
【００３３】
【図２７】畳み込みレイヤの一実施形態を示す。
【００３４】
【図２８】機械学習実装において相互接続されたノードのセットの一例を示す。
【００３５】
【図２９】ニューラルネットワークがトレーニングデータセットを用いて学習するトレーニングフレームワークの実施形態を示す。
【００３６】
【図３０Ａ】モデル並列処理及びデータ並列処理の例を示す。
【００３７】
【図３０Ｂ】システムオンチップ（ＳｏＣ）の一例を示す。
【００３８】
【図３１】光線追跡コア及びTensorコアを含む処理アーキテクチャの例を示す。
【００３９】
【図３２】ビームの例を示す。
【００４０】
【図３３】ビーム追跡を実行する機器の実施形態を示す。
【００４１】
【図３４】ビーム階層構造の例を示す。
【００４２】
【図３５】ビーム追跡を実行する方法を示す。
【００４３】
【図３６】分散型光線追跡エンジンの例を示す。
【００４４】
【図３７】光線追跡システムにおいて実行される圧縮の例を示す。
【図３８】光線追跡システムにおいて実行される圧縮の例を示す。
【００４５】
【図３９】本発明の一実施形態による方法を示す。
【００４６】
【図４０】例示的なハイブリッド光線追跡機器を示す。
【００４７】
【図４１】光線追跡演算のために使用されるスタックの例を示す。
【００４８】
【図４２】ハイブリッド光線追跡機器の一実施形態の更なる詳細を示す。
【００４９】
【図４３】ＢＶＨ（bounding  volume  hierarchy）の例を示す。
【００５０】
【図４４】コールスタック及びトラバース状態記憶の一例を示す。
【００５１】
【図４５】分散型リアルタイム光線追跡のための方法及び機器の一実施形態を示す。
【００５２】
【図４６】分散型リアルタイム光線追跡のためのシステムの一実施形態の更なる詳細を示す。
【発明を実施するための形態】
【００５３】
以下の説明では、説明を目的として、以下に記載する本発明の実施形態の完全な理解を提供するために、多くの詳細事項が説明される。しかしながら、当業者は、本発明の実施形態がこれらの特定の詳細無しに実施できることを理解するだろう。他の例では、幾つかの良く知られた構造及び装置が、本発明の実施形態の基礎にある原理を不明瞭することを回避するために、ブロック図で示される。
【００５４】
＜＜例示的なグラフィックプロセッサアーキテクチャ及びデータ型＞＞
＜システム概要＞
図１は、実施形態による処理システム１００のブロック図である。種々の実施形態において、システム１００は、１つ以上のプロセッサ１０２及び１つ以上のグラフィックプロセッサ１０８を含み、シングルプロセッサ・デスクトップシステム、マルチプロセッサ・ワークステーションシステム、又は多数のプロセッサ１０２若しくはプロセッサコア１０７を曽根あるサーバシステムであってよい。一実施形態では、システム１００は、モバイル、ハンドヘルド、又は埋込装置での使用のためにシステムオンチップ（system-on-a-chip：SoC）集積回路内に組み込まれた処理プラットフォームである。
【００５５】
一実施形態では、システム１００は、サーバに基づくゲームプラットフォーム、ゲーム及びメディアコンソールを含むゲームコンソール、モバイルゲームコンソール、ハンドヘルドゲームコンソール、又はオンラインゲームコンソールを含み又はその中に組み込まれ得る。幾つかの実施形態では、システム１００は、モバイル電話機、スマートフォン、タブレットコンピューティング装置、又はモバイルインターネット装置である。処理システム１００は、スマートウォッチウェアラブル装置、スマート眼鏡装置、拡張現実装置、又は仮想現実装置のような、ウェアラブル装置を含み、それに結合され、又はその中に統合され得る。幾つかの実施形態では、処理システム１００は、１つ以上のプロセッサ１０２及び１つ以上のグラフィックプロセッサ１０８により生成されるグラフィカルインタフェースを備えるテレビジョン又はセットトップボックス装置である。
【００５６】
幾つかの実施形態では、１つ以上のプロセッサ１０２はそれぞれ、実行されるとシステムの動作及びユーザソフトウェアを実行する命令を処理する１つ以上のプロセッサコア１０７を含む。幾つかの実施形態では、１つ以上のプロセッサコア１０７の各々は、特定命令セット１０９を処理するよう構成される。幾つかの実施形態では、命令セット１０９は、ＣＩＳＣ（Complex  Instruction  Set  Computing）、ＲＩＳＣ（Reduced  Instruction  Set  Computing）、又はＶＬＩＷ（Very  Long  Instruction  Word）による計算を実現してよい。複数のプロセッサコア１０７は、それぞれ、他の命令セットのエミュレーションを実現する命令を含み得る異なる命令セット１０９を処理してよい。プロセッサコア１０７は、ＤＳＰ（Digital  Signal  Processor）のような他の処理装置も含んでよい。
【００５７】
幾つかの実施形態では、プロセッサ１０２は、キャッシュメモリ１０４を含む。アーキテクチャに依存して、プロセッサ１０２は、単一の内部キャッシュ又は複数レベルの内部キャッシュを有し得る。幾つかの実施形態では、キャッシュメモリは、プロセッサ１０２の様々なコンポーネントの間で共有される。幾つかの実施形態では、プロセッサ１０２は、プロセッサコア１０７の間で既知のキャッシュコヒーレンス技術を用いて共有されてよい外部キャッシュ（例えばレベル３（Level-３：L３）キャッシュ又はラストレベルキャッシュ（Last  Level  Cache：LLC））（図示しない）も使用する。レジスタファイル１０６が更にプロセッサ１０２に含まれる。これは、異なるデータ型を格納する異なる種類のレジスタ（例えば、整数レジスタ、浮動小数点レジスタ、状態レジスタ、及び命令ポインタレジスタ）を含んでよい。幾つかのレジスタは汎用レジスタであってよく、一方で、他のレジスタはプロセッサ１０２の設計に固有であってよい。
【００５８】
幾つかの実施形態では、１つ以上のプロセッサ１０２は、１つ以上のインタフェースバス１１０に結合され、アドレス、データ、又は制御信号のような通信信号をプロセッサ１０２とシステム１００内の他のコンポーネントとの間で送信する。インタフェースバス１１０は、一実施形態では、ＤＭＩ（Direct  Media  Interface）バスのバージョンのようなプロセッサバスであり得る。しかしながら、プロセッサバスは、ＤＭＩバスに限定されず、１つ以上の周辺機器相互接続バス（例えば、PCI、PCIExpress）、メモリバス、又は他の種類のインタフェースバスを含んでよい。一実施形態では、プロセッサ１０２は、統合メモリ制御部１１６及びプラットフォーム制御ハブ１３０を含む。メモリ制御部１１６は、メモリ装置とシステム１００の他のコンポーネントとの間の通信を実現し、一方、プラットフォーム制御ハブ（ＰＣＨ）１３０は、ローカルＩ／Ｏバスを介してＩ／Ｏ装置への接続を提供する。
【００５９】
メモリ１２０は、ＤＲＡＭ（dynamic  random  access  memory）素子、ＳＲＡＭ（static  random  access  memory）素子、フラッシュメモリ素子、相変化メモリ素子、又は処理メモリとしてサービスするために適切な性能を備える何らかの他のメモリ素子であり得る。一実施形態では、メモリ装置１２０は、１つ以上のプロセッサ１０２がアプリケーション又はプロセスを実行するときに使用するためのデータ１２２及び命令１２１を格納するために、システム１００のシステムメモリとして動作し得る。メモリ制御部１１６も、プロセッサ１０２内の１つ以上のグラフィックプロセッサ１０８と通信してグラフィック及びメディア演算を実行し得る任意の外部グラフィックプロセッサ１１２に結合する。幾つかの実施形態では、ディスプレイ装置１１１は、プロセッサ１０２と接続し得る。ディスプレイ装置１１１は、モバイル電子装置又はラップトップ装置内にあるような内部ディスプレイ装置、又はディスプレイインタフェース（例えばDisplayPort等）を介して取り付けられた外部ディスプレイ装置のうちの１つ以上であり得る。一実施形態では、ディスプレイ装置１１１は、仮想現実（VR）アプリケーション又は拡張現実（AR）アプリケーションで使用される立体ディスプレイ装置のようなＨＭＤ（head  mounted  display）であり得る。
【００６０】
幾つかの実施形態では、プラットフォーム制御ハブ１３０は、周辺機器がメモリ装置１２０及びプロセッサ１０２に高速Ｉ／Ｏバスを介して接続することを可能にする。Ｉ／Ｏ周辺機器は、限定ではないが、オーディオ制御部１４６、ネットワーク制御部１３４、ファームウェアインタフェース１２８、無線トランシーバ１２６、タッチセンサ１２５、データ記憶装置１２４（例えば、ハードディスクドライブ、フラッシュメモリ、等）を含む。データ記憶装置１２４は、記憶インタフェース（例えばSATA）を介して又は周辺機器コンポーネント相互接続バス（例えば、PCI、PCIExpress）のような周辺機器バスを介して、接続し得る。タッチセンサ１２５は、タッチスクリーンセンサ、圧力センサ、又は指紋センサを含み得る。無線トランシーバ１２６は、Ｗｉ−Ｆｉトランシーバ、Ｂｌｕｅｔｏｏｔｈ（登録商標）トランシーバ、又は３Ｇ、４Ｇ、若しくはＬＴＥ（Long  Term  Evolution）トランシーバのようなモバイルネットワークトランシーバであり得る。ファームウェアインタフェース１２８は、システムファームウェアとの通信を可能にし、例えばＵＥＦＩ（unified  extensible  firmware  interface）であり得る。ネットワーク制御部１３４は、有線ネットワークへのネットワーク接続を可能にする。幾つかの実施形態では、高性能ネットワーク制御部（図示しない）はインタフェースバス１１０と結合する。オーディオ制御部１４６は、一実施形態では、マルチチャネル高精細オーディオ制御部である。一実施形態では、システム１００は、レガシ（例えば、Personal  System  ２(PS/２)）装置をシステムに結合する任意のレガシＩ／Ｏ制御部１４０を含む。プラットフォーム制御ハブ１３０は、１つ以上のＵＳＢ（Universal  Serial  Bus）制御部１４２にも、キーボード及びマウス１４３の組み合わせ、カメラ１４４、又は他のＵＳＢ入力装置のような接続入力装置を接続し得る。
【００６１】
図示のシステム１００は、例示的であり限定ではなく、異なる方法で構成される他の種類のデータ処理システムも使用され得ることが理解される。例えば、メモリ制御部１１６及びプラットフォーム制御ハブ１３０の例は、外部グラフィックプロセッサ１１２のような個別外部グラフィックプロセッサに統合されてよい。一実施形態では、プラットフォーム制御ハブ１３０及び／又はメモリ制御部１１６は、１つ以上のプロセッサ１０２の外部にあってよい。例えば、システム１００は、プロセッサ１０２と通信するシステムチップセット内にあるメモリ制御ハブ及び周辺機器制御ハブとして構成され得る例示的なメモリ制御部１１６及びプラットフォーム制御ハブ１３０を含み得る。
【００６２】
図２は、１つ以上のプロセッサコア２０２Ａ〜２０２Ｎ、統合メモリ制御部２１４、及び統合グラフィックプロセッサ２０８を有するプロセッサ２００の実施形態のブロック図である。本願明細書の任意の他の図の要素と同じ参照符号（又は名称）を有する図２のこれらの要素は、本願明細書の他の場所に記載されたものと同様の方法で動作し又は機能できるが、そのように限定されない。プロセッサ２００は、最大で及び破線ボックスにより示される追加コア２０２Ｎを含む追加コアを含み得る。プロセッサコア２０２Ａ〜２０２Ｎの各々は、１つ以上の内部キャッシュユニット２０４Ａ〜２０４Ｎを含む。幾つかの実施形態では、各プロセッサコアは、１つ以上の共有キャッシュユニット２０６へのアクセスも有する。
【００６３】
内部キャッシュユニット２０４Ａ〜２０４Ｎ及び共有キャッシュユニット２０６は、プロセッサ２００内のキャッシュメモリ階層構造を表す。キャッシュメモリ階層構造は、各プロセッサコアの中に少なくとも１つのレベルの命令及びデータキャッシュ、及びレベル２（Level  ２：L２）、レベル３（Level  ３：L３）、レベル４（Level  ４：L４）、又は他のレベルのキャッシュのような１つ以上のレベルの共有中間レベルキャッシュを含み得る。ここで、外部メモリの前の最高レベルのキャッシュはＬＬＣとして分類される。幾つかの実施形態では、キャッシュコヒーレンスロジックは、種々のキャッシュユニット２０６及び２０４Ａ〜２０４Ｎの間のコヒーレンスを維持する。
【００６４】
幾つかの実施形態では、プロセッサ２００は、１つ以上のバス制御ユニット２１６及びシステムエージェントコア２１０のセットも含んでよい。１つ以上のバス制御ユニット２１６は、１つ以上のＰＣＩ又はＰＣＩ  ｅｘｐｒｅｓｓバスのような周辺機器バスのセットを管理する。システムエージェントコア２１０は、種々のプロセッサコンポーネントの管理機能を提供する。幾つかの実施形態では、システムエージェントコア２１０は、種々の外部メモリ装置（図示しない）へのアクセスを管理する１つ以上の統合メモリ制御部２１４を含む。
【００６５】
幾つかの実施形態では、プロセッサコア２０２Ａ〜２０２Ｎのうちの１つ以上のは、同時マルチスレッドのサポートを含む。このような実施形態では、システムエージェントコア２１０は、マルチスレッド処理の間にコア２０２Ａ〜２０２Ｎを調整し及び作動させるコンポーネントを含む。システムエージェントコア２１０は、さらに、プロセッサコア２０２Ａ〜２０２Ｎ及びグラフィックプロセッサ２０８の電力状態を調整するロジック及びコンポーネントを含む電力制御ユニット（power  control  unit：PCU）を含んでよい。
【００６６】
幾つかの実施形態では、プロセッサ２００は、さらに、グラフィック処理演算を実行するグラフィックプロセッサ２０８を含む。幾つかの実施形態では、グラフィックプロセッサ２０８は、共有キャッシュユニット２０６と１つ以上の統合メモリ制御部２１４を含むシステムエージェントコア２１０とのセットに結合する。幾つかの実施形態では、システムエージェントコア２１０は、１つ以上の結合したディスプレイへのグラフィックプロセッサ出力を駆動するディスプレイ制御部２１１も含む。幾つかの実施形態では、ディスプレイ制御部２１１は、グラフィックプロセッサに少なくとも１つの相互接続を介して結合される別個のモジュールであってもよく、又はグラフィックプロセッサ２０８内に統合されてよい。
【００６７】
幾つかの実施形態では、リングに基づく相互接続ユニット２１２は、プロセッサ２００の内部コンポーネントを結合するために使用される。しかしながら、ポイントツーポイント相互接続、切り替え相互接続、又は従来知られている技術を含む他の技術のような、代替の相互接続ユニットが使用されてよい。幾つかの実施形態では、グラフィックプロセッサ２０８は、Ｉ／Ｏリンク２１３を介してリング相互接続２１２に結合する。
【００６８】
例示的なＩ／Ｏリンク２１３は、種々のプロセッサコンポーネントとｅＤＲＡＭモジュールのような高性能内蔵メモリモジュール２１８との間の通信を実現するパッケージＩ／Ｏ相互接続を含む、Ｉ／Ｏ相互接続の複数の種類のうちの少なくとも１つを表す。幾つかの実施形態では、プロセッサコア２０２Ａ〜２０２Ｎ及びグラフィックプロセッサ２０８の各々は、内蔵メモリモジュール２１８を共有ラストレベルキャッシュとして使用する。
【００６９】
幾つかの実施形態では、プロセッサコア２０２Ａ〜２０２Ｎは、同じ命令セットアーキテクチャを実行する同種のコアである。別の実施形態では、プロセッサコア２０２Ａ〜２０２Ｎは、命令セットアーキテクチャ（ＩＳＡ）の観点で異種であり、プロセッサコア２０２Ａ〜２０２Ｎのうちの１つ以上が第１命令セットを実行し、一方で他のコアのうちの少なくとも１つが第１命令セットの部分集合又は異なる命令セットを実行する。一実施形態では、プロセッサコア２０２Ａ〜２０２Ｎは、マイクロアーキテクチャの観点で異種であり、比較的高い電力消費を有する１つ以上のコアが、比較的低い電力消費を有する１つ以上のパワーコアに結合する。更に、プロセッサ２００は、１つ以上のチップ上に又は図示したコンポーネントを備えるＳｏＣ集積回路として他のコンポーネントに加えて実装され得る。
【００７０】
図３は、個別グラフィック処理ユニットであってよい又は複数の処理コアと共に統合されたグラフィックプロセッサであってよい、グラフィックプロセッサ３００のブロック図である。幾つかの実施形態では、グラフィックプロセッサは、、グラフィックプロセッサ上のレジスタへのメモリマップドＩ／Ｏインタフェースを介して、及びプロセッサメモリ内に置かれたコマンドにより、通信する。幾つかの実施形態では、グラフィックプロセッサ３００は、メモリにアクセスするためのメモリインタフェース３１４を含む。メモリインタフェース３１４は、ローカルメモリ、１つ以上の内部キャッシュ、１つ以上の共有外部キャッシュ、及び／又はシステムメモリへのインタフェースであり得る。
【００７１】
幾つかの実施形態では、グラフィックプロセッサ３００は、ディスプレイ装置３２０へのディスプレイ出力データを駆動するディスプレイ制御部３０２も含む。ディスプレイ制御部３０２は、ディスプレイの１つ以上のオーバレイプレーン及び複数レイヤビデオの組立又はユーザインタフェース要素のためのハードウェアを含む。ディスプレイ装置３２０は、内部又は外部ディスプレイ装置であり得る。一実施形態では、ディスプレイ装置３２０は、仮想現実（VR）ディスプレイ装置又は拡張現実（AR）ディスプレイ装置のような頭部搭載ディスプレイ装置でる。幾つかの実施形態では、グラフィックプロセッサ３００は、限定ではないが、ＭＰＥＧ−２のようなＭＰＥＧ（Moving  Picture  Experts  Group）フォーマット、Ｈ．２６４／ＭＰＥＧ−４  ＡＶＣ及びＳＭＰＴＥ（Society  of  Motion  Picture  &  Television  Engineers）４２１Ｍ／ＶＣ−１のようなＡＶＣ（Advanced  Video  Coding）フォーマット、並びにＪＰＥＧ及びＭＪＰＥＧ（Motion  JPEG）フォーマットのようなＪＰＥＧ（Joint  Photographic  Experts  Group）フォーマットを含む１つ以上の符号化フォーマットに、それから、又はその間でメディアを符号化、復号、又はトランスコードするビデオコーデックエンジン３０６を含む。
【００７２】
幾つかの実施形態では、グラフィックプロセッサ３００は、例えばビット境界ブロック転送を含む２次元（２Ｄ）ラスタライザ演算を実行するブロック画像転送（block  image  transfer：BLIT）エンジン３０４を含む。しかしながら、一実施形態では、２Ｄグラフィック演算は、グラフィック処理エンジン（graphics  processing  engine：GPE）３１０の１つ以上のコンポーネントを用いて実行される。幾つかの実施形態では、ＧＰＥ３１０は、３次元（３Ｄ）グラフィック演算及びメディア演算を含むグラフィック演算を実行する計算エンジンである。
【００７３】
幾つかの実施形態では、ＧＰＥ３１０は、３Ｄ基本形状（例えば、長方形、三角形、等）に対して作用する処理機能を用いて３次元画像及びシーンをレンダリングするような３Ｄ演算を実行する３Ｄパイプライン３１２を含む。３Ｄパイプライン３１２は、要素内で種々のタスクを実行する及び／又は３Ｄ／メディアサブシステム３１５への実行スレッドを生み出すプログラマブル及び固定機能要素を含む。３Ｄパイプライン３１２は、メディア演算を実行するために使用可能であるが、ＧＰＥ３１０の実施形態も、ビデオ後処理及び画像処理のようなメディア演算を実行するために特に使用されるメディアパイプライン３１６を含む。
【００７４】
幾つかの実施形態では、メディアパイプライン３１６は、ビデオコーデックエンジン３０６の代わりに又はその代理で、ビデオ復号加速化、ビデオデインターレース、及びビデオ符号化加速化のような１つ以上の固有メディア演算を実行する固定機能又はプログラマブルロジックユニットを含む。幾つかの実施形態では、メディアパイプライン３１６は、３Ｄ／メディアサブシステム３１５上で実行するためにスレッドを生み出すスレッド生成ユニットを更に含む。生成されたスレッドは、３Ｄ／メディアサブシステム３１５に含まれる１つ以上のグラフィック実行ユニットで、メディア演算のための計算を実行する。
【００７５】
幾つかの実施形態では、３Ｄ／メディアサブシステム３１５は、３Ｄパイプライン３１２及びメディアパイプライン３１６により生み出されたスレッドを実行するロジックを含む。一実施形態では、パイプラインは、利用可能なスレッドリソースへの種々の要求を調停し及びディスパッチするスレッドディスパッチロジックを含むスレッド実行要求を、３Ｄ／メディアサブシステム３１５へ送信する。実行リソースは、３Ｄ及びメディアスレッドを処理するグラフィック実行ユニットのアレイを含む。幾つかの実施形態では、３Ｄ／メディアサブシステム３１５は、スレッド命令及びデータのための１つ以上の内部キャッシュを含む。幾つかの実施形態では、サブシステムは、スレッド間でデータを共有し及び出力データを格納する、レジスタ及びアドレス可能メモリを含む共有メモリも含む。
【００７６】
＜グラフィック処理エンジン＞
【００７７】
図４は、幾つかの実施形態によるグラフィックプロセッサのグラフィック処理エンジン４１０のブロック図である。一実施形態では、グラフィック処理エンジン（ＧＰＥ）４１０は、図３に示すＧＰＥ３１０の１つのバージョンである。本願明細書の任意の他の図の要素と同じ参照符号（又は名称）を有する図４の要素は、本願明細書の他の場所に記載されたものと同様のいずれかの方法で動作し又は機能し得るが、そのように限定されない。例えば、図３の３Ｄパイプライン３１２及びメディアパイプライン３１６が説明される。メディアパイプライン３１６は、ＧＰＥ４１０の幾つかの実施形態において任意であり、ＧＰＥ４１０に明示的に含まれなくてよい。例えば、及び少なくとも一実施形態では、別個のメディア及び／又は画像プロセッサがＧＰＥ４１０に結合される。
【００７８】
幾つかの実施形態では、ＧＰＥ４１０は、コマンドストリームを３Ｄパイプライン３１２及び／又はメディアパイプライン３１６に提供するコマンドストリーマ４０３に結合し又はそれを含む。幾つかの実施形態では、コマンドストリーマ４０３は、システムメモリ、又は内部キャッシュメモリ及び共有キャッシュメモリのうちの１つ以上であり得るメモリに結合される。幾つかの実施形態では、コマンドストリーマ４０３は、コマンドをメモリから受信し、該コマンドを３Ｄパイプライン３１２及び／又はメディアパイプライン３１６へ送信する。コマンドは、３Ｄパイプライン３１２及びメディアパイプライン３１６に対するコマンドを格納するリングバッファからフェッチされた指令である。一実施形態では、リングバッファは、複数のコマンドのバッチを格納するバッチコマンドバッファを更に含み得る。３Ｄパイプライン３１２に対するコマンドは、限定ではないが３Ｄパイプライン３１２の頂点及び形状データ及び／又はメディアパイプライン３１６の画像データ及びメモリオブジェクトのような、メモリに格納されたデータへの参照も含み得る。３Ｄパイプライン３１２及びメディアパイプライン３１６は、それぞれのパイプライン内のロジックにより演算を実行することにより、又は１つ以上の実行スレッドをグラフィックコアアレイ４１４へディスパッチすることにより、コマンド及びデータを処理する。一実施形態では、グラフィックコアアレイ４１４は、グラフィックコア（例えば、グラフィックコア４１５Ａ、グラフィックコア４１５Ｂ）の１つ以上のブロックを含み、各ブロックは１つ以上のグラフィックコアを含む。各グラフィックコアは、グラフィック及び計算演算、並びに固定機能テクスチャ処理及び／又は機械学習及び人工知能加速ロジックを実行する汎用及びグラフィック専用実行ロジックを含むグラフィック実行リソースのセットを含む。
【００７９】
種々の実施形態において、３Ｄパイプライン３１２は、頂点シェーダ、形状シェーダ、ピクセルシェーダ、フラグメントシェーダ、計算シェーダ、又は他のシェーダプログラムのような１つ以上のシェーダ（shader）プログラムを、命令を処理することにより及び実行スレッドをグラフィックコアアレイ４１４へディスパッチすることにより処理する固定機能及びプログラマブルロジックを含む。グラフィックコアアレイ４１４は、これらのシェーダプログラムを処理する際に使用する実行リソースの統合ブロックを提供する。グラフィックコアアレイ４１４のグラフィックコア４１５Ａ〜４１５Ｂ内の多目的実行ロジック（例えば、実行ユニット）は、種々の３Ｄ  ＡＰＩシェーダ言語のサポートを含み、複数のシェーダに関連付けられた複数の同時実行スレッドを実行できる。
【００８０】
幾つかの実施形態では、グラフィックコアアレイ４１４は、ビデオ及び／又は画像処理のようなメディア機能を実行する実行ロジックも含む。一実施形態では、実行ユニットは、グラフィック処理演算に加えて並列汎用コンピュータ演算を実行するようプログラム可能な汎用ロジックを更に含む。汎用ロジックは、処理演算を、図１のプロセッサコア１０７又は図２のコア２０２Ａ〜２０２Ｎ内の汎用ロジックと並列に又はそれと関連して実行できる。
【００８１】
グラフィックコアアレイ４１４上で実行するスレッドにより生成された出力データは、統合リターンバッファ（unified  return  buffer：URB）４１８内のメモリへデータを出力できる。ＵＲＢ４１８は、複数のスレッドのデータを格納できる。幾つかの実施形態では、ＵＲＢ４１８は、グラフィックコアアレイ４１４上で実行する異なるスレッド間でデータを送信するために使用されてよい。幾つかの実施形態では、ＵＲＢ４１８は、グラフィックコアアレイ上のスレッドと共有機能ロジック４２０内の固定機能ロジックと間の同期化のために更に使用されてよい。
【００８２】
幾つかの実施形態では、グラフィックコアアレイ４１４は拡張可能である。その結果、アレイは、可変数のグラフィックコアを含み、各グラフィックコアは、ＧＰＥ４１０の目標電力及び性能レベルに基づき可変数の実行ユニットを有する。一実施形態では、実行リソースは動的に格納可能である。その結果、実行リソースは、必要に応じて有効に又は無効にされてよい。
【００８３】
グラフィックコアアレイ４１４は、グラフィックコアアレイ内のグラフィックコア間で共有される複数のリソースを含む共有機能ロジック４２０に結合する。共有機能ロジック４２０内の共有機能は、特別補足機能をグラフィックコアアレイ４１４に提供するハードウェアロジックユニットである。種々の実施形態において、共有機能ロジック４２０は、限定ではないが、サンプラ４２１、計算４２２、及びスレッド間通信（inter-thread  communication：ITC）４２３ロジックを含む。さらに、幾つかの実施形態は、共有機能ロジック４２０内に１つ以上のキャッシュ４２５を実装する。
【００８４】
共有機能が実装される。ここで、所与の特別機能に対する要求がグラフィックコアアレイ４１４に含まれるのでは不十分である。代わりに、該特別機能の単一のインスタンス化が、共有機能ロジック４２０内のスタンドアロンエンティティとして実装され、グラフィックコアアレイ４１４内の実行リソースの間で共有される。グラフィックコアアレイ４１４の間で共有され及びグラフィックコアアレイ４１４内に含まれる機能の正確なセットは、実施形態の間で変わる。幾つかの実施形態では、共有機能ロジック４２０内の、グラフィックコアアレイ４１４により幅広く使用される特定共有機能は、グラフィックコアアレイ４１４内の共有機能ロジック４１６内に含まれてよい。種々の実施形態で、グラフィックコアアレイ４１４内の共有機能ロジック４１６は、共有機能ロジック４２０内の一部又は全部のロジックを含み得る。一実施形態では、共有機能ロジック４２０内の全部のロジック要素は、グラフィックコアアレイ４１４の共有機能ロジック４１６内で複製されてよい。一実施形態では、共有機能ロジック４２０は、グラフィックコアアレイ４１６の共有機能ロジック４１６に賛成して取り除かれる。
【００８５】
図５は、本願明細書に記載の幾つかの実施形態によるグラフィックプロセッサコア５００のハードウェアロジックのブロック図である。本願明細書の任意の他の図の要素と同じ参照符号（又は名称）を有する図５の要素は、本願明細書の他の場所に記載されたものと同様のいずれかの方法で動作し又は機能し得るが、そのように限定されない。図示のグラフィックプロセッサコア５００は、幾つかの実施形態では、図４のグラフィックコアアレイ４１４内に含まれる。グラフィックプロセッサコア５００は、コアスライスと呼ばれることが多く、モジュラグラフィックプロセッサ内の１又は複数のグラフィックコアであり得る。グラフィックプロセッサコア５００は、１つのグラフィックコアスライスの例であり、本願明細書に記載のグラフィックプロセッサは、目標電力及び性能エンベロープに基づき複数のグラフィックコアスライスを含んでよい。各グラフィックプロセッサコア５００は、汎用及び固定機能ロジックのモジュラブロックを含む、サブスライスとも呼ばれる複数のサブコア５０１Ａ〜５０１Ｆに結合された固定機能ブロック５３０を含み得る。
【００８６】
幾つかの実施形態では、固定機能ブロック５３０は、例えばより低い性能及び／又はより低い電力のグラフィックプロセッサ実装において、グラフィックプロセッサコア５００内の全てのサブコアにより共有可能な形状／固定機能パイプライン５３６を含む。種々の実施形態では、形状／固定機能パイプライン５３６は、３Ｄ固定機能パイプライン（例えば、図３及び図４の３Ｄパイプライン３１２）、ビデオフロントエンドユニット、スレッド生成部及びスレッドディスパッチ部、並びに、図４の統合リターンバッファ４１８のような統合リターンバッファを管理する統合リターンバッファマネジャ、を含む。
【００８７】
一実施形態では、固定機能ブロック５３０は、グラフィックＳｏＣインタフェース５３７、グラフィックマイクロコントローラ５３８、及びメディアパイプライン５３９を更に含む。グラフィックＳｏＣインタフェース５３７は、グラフィックプロセッサコア５００と集積回路上のシステムオンチップ内の他のプロセッサコアとの間のインタフェースを提供する。グラフィックマイクロコントローラ５３８は、スレッドディスパッチ、スケジューリング、及び先取りを含む、グラフィックプロセッサコア５００の種々の機能を管理するよう構成可能なプログラマブルサブプロセッサである。メディアパイプライン５３９（例えば、図３及び図４のメディアパイプライン）は、画像及びビデオデータを含むマルチメディアデータの復号、符号化、前処理、及び／又は後処理を実現するロジックを含む。メディアパイプライン５３９は、サブコア５０１Ａ〜５０１Ｆ内の計算又はサンプリングロジックへの要求を介してメディア演算を実施する。
【００８８】
一実施形態では、ＳｏＣインタフェース５３７は、グラフィックプロセッサコア５００が、汎用アプリケーションプロセッサコア（例えば、ＣＰＵ）、及び／又は共有ラストレベルキャッシュメモリ、システムＲＡＭ及び／又は内蔵オンチップ若しくはオンパッケージＤＲＡＭのようなメモリ階層的要素を含むＳｏＣ内の他のコンポーネントと通信することを可能にする。ＳｏＣインタフェース５３７は、カメラ画像パイプラインのようなＳｏＣ内の固定機能装置との通信も可能にでき、グラフィックプロセッサコア５００とＳｏＣ内のＣＰＵとの間で共有され得るグローバルメモリアトミックの使用を可能にし及び／又はそれを実装する。ＳｏＣインタフェース５３７は、電グラフィックプロセッサコア５００の力管理制御も実装し、グラフィックコア５００のクロックドメインとＳｏＣ内の他のクロックドメインとの間のインタフェースを可能にし得る。一実施形態では、ＳｏＣインタフェース５３７は、コマンド及び命令をグラフィックプロセッサ内の１つ以上のグラフィックコアの各々に提供するよう構成されるコマンドストリーマ及びグローバルスレッドディスパッチ部からの、コマンドバッファの受信を可能にする。コマンド及び命令は、メディア演算が実行されるときメディアパイプライン５３９へ、又はグラフィック処理演算が実行されるとき形状及び固定機能パイプライン（例えば、形状及び固定機能パイプライン５３６、形状及び固定機能パイプライン５１４）へ、ディスパッチされ得る。
【００８９】
グラフィックマイクロコントローラ５３８は、グラフィックプロセッサコア５００のために種々のスケジューリング及び管理タスクを実行するよう構成され得る。一実施形態では、グラフィックマイクロコントローラ５３８は、サブコア５０１Ａ〜５０１Ｆ内の実行ユニット（execution  unit：EU）アレイ５０２Ａ〜５０２Ｆ、５０４Ａ〜５０４Ｆ内の種々のグラフィック並列エンジンで、グラフィック及び／又は計算負荷スケジューリングを実行し得る。このスケジューリングモデルでは、グラフィックプロセッサコア５００を含むＳｏＣのＣＰＵコア上で実行するホストソフトウェアは、適切なグラフィックエンジン上でのスケジューリング演算を呼び出す、複数のグラフィックプロセッサドアベル（doorbell）のうちの１つに負荷を提出できる。スケジューリング演算は、次に実行すべき負荷を決定し、負荷をコマンドストリーマに提出し、エンジン上で実行している既存の負荷を先取りし、負荷の進捗を監視し、及び負荷が完了するとホストソフトウェアに通知することを含む。一実施形態では、グラフィックマイクロコントローラ５３８は、さらに、グラフィックプロセッサコア５００に対してより低電力又はアイドルの状態を実現し、低電力状態遷移に渡りオペレーティングシステム及び／又はシステム上のグラフィックドライバソフトウェアと独立にグラフィックプロセッサコア５００内のレジスタを節約し及び復旧する能力をグラフィックプロセッサコア５００に提供する。
【００９０】
グラフィックプロセッサコア５００は、図示のサブコア５０１Ａ〜５０１Ｆより多くの又は少ない、最大Ｎ個のモジュラサブコアを有してよい。Ｎ個のサブコアの各々について、グラフィックプロセッサコア５００は、共有機能ロジック５１０、共有及び／又はキャッシュメモリ５１２、形状／固定機能パイプライン５１４、及び種々のグラフィック及び計算処理演算を加速する追加固定機能ロジック５１６を更に含み得る。共有機能ロジック５１０は、グラフィックプロセッサコア５００内の各Ｎ個のサブコアにより共有可能な図４の共有機能ロジック４２０（例えば、サンプラ、計算、及び／又はスレッド間通信ロジック）に関連付けられたロジックユニットを含み得る。共有及び／又はキャッシュメモリ５１２は、グラフィックプロセッサコア５００内のＮ個のサブコア５０１Ａ〜５０１Ｆのセットのためのラストレベルキャッシュであり得、複数のサブコアによりアクセス可能な共有メモリとしても動作できる。形状／固定機能パイプライン５１４は、固定機能ブロック５３０内の形状／固定機能パイプライン５３６の代わりに含まれ得、同じ又は同様のロジックユニットを含み得る。
【００９１】
一実施形態では、グラフィックプロセッサコア５００は、グラフィックプロセッサコア５００による使用のための種々の固定機能加速ロジックを含み得る追加固定機能ブロック５１６を含む。一実施形態では、追加固定機能ロジック５１６は、位置限定シェーディング（position  only  shading）に使用するために、追加形状パイプラインを含む。位置限定シェーディングでは、２つの形状パイプラインが存在する。形状／固定機能パイプライン５１６、５３６内の完全形状パイプライン、及び追加固定機能ロジック５１６に含まれてよい追加形状パイプラインであるカル（cull）パイプラインである。一実施形態では、カルパイプラインは、完全形状パイプラインの縮小バージョンである。完全パイプライン及びカルパイプラインは、同じアプリケーションの異なるインスタンスを実行し得る。各インスタンスは別個のコンテキストを有する。適所のみシェーディングは、廃棄された三角形の長いカルラン（run）を隠すことができ、幾つかの例では、シェーディングをより早く完了させることができる。例えば、一実施形態では、追加固定機能ロジック５１６内のカルパイプラインロジックは、位置シェーダを主アプリケーションと並列に実行でき、通常、完全パイプラインより速く重要な結果を生成する。これは、カルパイプラインが頂点の位置属性のみをフェッチしシェーディングし、フレームバッファへのピクセルのラスタライズ及びレンダリングを実行しないからである。カルパイプラインは、生成した重要な結果を用いて、三角形が間引かれた（culled）か否かに拘わらず、全ての三角形の可視性情報を計算する。完全パイプライン（本例ではリプレイパイプラインと呼ばれることがある）は、可視性情報を消費して、カリングされた三角形をスキップし、最終的にラスタライズ段階に渡される可視三角形のみをシェーディングする。
【００９２】
一実施形態では、追加固定機能ロジック５１６は、機械学習トレーニング又は推定の最適化を含む実装のために、固定機能行列乗算ロジックのような機械学習加速ロジックを更に含み得る。
【００９３】
各グラフィックサブコア５０１Ａ〜５０１Ｆ内に、グラフィックパイプライン、メディアパイプライン、又はシェーダプログラムによる要求に応答して、グラフィック、メディア、及び計算演算を実行するために使用され得る実行リソースのセットを含む。グラフィックサブコア５０１Ａ〜５０１Ｆは、複数のＥＵアレイ５０２Ａ〜５０２Ｆ、５０４Ａ〜５０４Ｆ、スレッドディスパッチ及びスレッド間通信（thread  dispatch  and  inter-thread  communication：TD/IC）ロジック５０３Ａ〜５０３Ｆ、３Ｄ（例えば、テクスチャ）サンプラ５０５Ａ〜５０５Ｆ、メディアサンプラ５０６Ａ〜５０６Ｆ、シェーダプロセッサ５０７Ａ〜５０７Ｆ、及び共有ローカルメモリ（shared  local  memory：SLM）５０８Ａ〜５０８Ｆを含む。ＥＵアレイ５０２Ａ〜５０２Ｆ、５０４Ａ〜５０４Ｆはそれぞれ、グラフィック、メディア、又は計算シェーダプログラムを含むグラフィック、メディア、又は計算演算の使用において浮動小数点及び整数／固定小数点ロジック演算を実行可能な汎用グラフィック処理ユニットである複数の実行ユニットを含む。ＴＤ／ＩＣロジック５０３Ａ〜５０３Ｆは、サブコア内の実行ユニットのためにローカルスレッドディスパッチ及びスレッド制御演算を実行し、サブコアの実行ユニット上で実行しているスレッド間の通信を実現する。３Ｄサンプラ５０５Ａ〜５０５Ｆは、テクスチャ又は他の３Ｄグラフィック関連データをメモリに読み出し得る。３Ｄサンプラは、構成されたサンプラ状態及び所与のテクスチャに関連付けられたテクスチャフォーマットに基づき異なる方法でテクスチャデータを読み出し得る。メディアサンプラ５０５Ａ〜５０５Ｆは、メディアデータに関連付けられた種類及びフォーマットに基づき同様のリード動作を実行し得る。一実施形態では、各グラフィックサブコア５０１Ａ〜５０１Ｆは、代替として、統合３Ｄ及びメディアサンプラを含み得る。サブコア５０１Ａ〜５０１Ｆの各々の中の実行ユニット上で実行するスレッドは、各サブコア内の共有ローカルメモリ５０８Ａ〜５０８Ｆを利用でき、スレッドグループ内で実行するスレッドがオンチップメモリの共通プールを用いて実行できるようにする。
【００９４】
＜実行ユニット＞
【００９５】
図６Ａ〜６Ｂは、本願明細書に記載の実施形態によるグラフィックプロセッサコアで利用される処理要素のアレイを含むスレッド実行ロジック６００を示す。本願明細書の任意の他の図の要素と同じ参照符号（又は名称）を有する図６Ａ〜６Ｂの要素は、本願明細書の他の場所に記載されたものと同様のいずれかの方法で動作し又は機能し得るが、そのように限定されない。図６Ａは、図５の各サブコア５０１Ａ〜５０１Ｆと共に図示したハードウェアロジックの変形を含み得るスレッド実行ロジック６００の概観を示す。図６Ｂは、実行ユニットの例示的な内部の詳細を示す。
【００９６】
図６Ａに示すように、幾つかの実施形態では、スレッド実行ユニット６００は、シェーダプロセッサ６０２、スレッドディスパッチャ６０４、命令キャッシュ６０６、複数の実行ユニット６０８Ａ〜６０８Ｎを含むスケーラブル実行ユニットアレイ、サンプラ６１０、データキャッシュ６１２、及びデータポート６１４を含む。一実施形態では、スケーラブル実行ユニットアレイは、１つ以上の実行ユニット（例えば、実行ユニット６０８Ａ、６０８Ｂ、６０８Ｃ、６０８Ｄ〜６０８Ｎ−１及び６０８Ｎ）を、負荷の計算要件に基づき有効化又は無効化することにより、動的にスケーリング可能である。一実施形態では、含まれるコンポーネントは、コンポーネントの各々をリンクする相互接続設備により相互接続される。幾つかの実施形態では、スレッド実行ユニット６００は、命令キャッシュ６０６、データポート６１４、サンプラ６１０、及び実行ユニット６０８Ａ〜６０８Ｎのうちの１つ以上を通じて、システムメモリ又はキャッシュメモリのようなメモリへの１つ以上の接続を含む。幾つかの実施形態では、各実行ユニット（例えば６０８Ａ）は、複数のデータ要素を各スレッドのために並列に処理しながら、複数の同時ハードウェアスレッドを実行可能なスタンドアロン型プログラマブル汎用計算ユニットである。種々の実施形態において、実行ユニット６０８Ａ〜６０８Ｎのアレイは、任意の数の個々の実行ユニットを含むよう拡張可能である。
【００９７】
幾つかの実施形態では、実行ユニット６０８Ａ〜６０８Ｎは、主にシェーダプログラムを実行するために使用される。シェーダプロセッサ６０２は、種々のシェーダプログラムを処理し、シェーダプログラムに関連付けられた実行スレッドをスレッドディスパッチャ６０４を介してディスパッチできる。一実施形態では、スレッドディスパッチャは、グラフィック及びメディアパイプラインからのスレッド開始要求を調停し、要求されたスレッドを実行ユニット６０８Ａ〜６０８Ｎ内の１つ以上の実行ユニット上でインスタンス化するロジックを含む。例えば、形状パイプラインは、頂点、モザイク又はテッセレーション（tessellation）、又は形状シェーダを、処理のためにスレッド実行ロジックにディスパッチできる。幾つかの実施形態では、スレッドディスパッチャ６０４は、実行中のシェーダプログラムからの実行時間スレッド生成要求も処理できる。
【００９８】
幾つかの実施形態では、実行ユニット６０８Ａ〜６０８Ｎは、多くの標準３Ｄグラフィックシェーダ命令を元来サポートする命令セットをサポートする。その結果、グラフィックライブラリ（例えば、Direct  ３D及びOpenGL）からのシェーダプログラムは、最小限の変換で実行される。実行ユニットは、頂点及び形状処理（例えば、頂点プログラム、形状プログラム、頂点シェーダ）、ピクセル処理（例えば、ピクセルシェーダ、フラグメントシェーダ）、及び汎用処理（例えば、計算及び媒体シェーダ）をサポートする。実行ユニット６０８Ａ−６０８Ｎの各々は、ＳＩＭＤ（multi-issue  single  instruction  multiple  data）実行が可能であり、多スレッド動作は、より大きな遅延のメモリアクセスに直面する効率的な実行環境を可能にする。各実行ユニットの中の各ハードウェアスレッドは、専用高帯域幅レジスタファイル及び関連する独立スレッド状態を有する。実行は、パイプラインへのクロック毎のマルチイシュー（multi-issue）であり、整数、単及び倍精度浮動小数点演算、ＳＩＭＤ分岐能力、論理演算、超越論的演算、及び他の種々雑多な演算が可能である。メモリ又は共有機能のうちの１つからのデータを待機している間、実行ユニット６０８Ａ−６０８Ｎ内の従属ロジックは、要求したデータが返されるまで待機スレッドをスリープさせる。待機スレッドがスリープしている間、ハードウェアリソースは、他のスレッドの処理に専念してよい。例えば、頂点シェーダ演算に関連する遅延の間、実行ユニットは、ピクセルシェーダ、フラグメントシェーダ、又は異なる頂点シェーダを含む別の種類のシェーダプログラムのために演算を実行できる。
【００９９】
実行ユニット６０８Ａ−６０８Ｎの中の各実行ユニットは、データ要素のアレイを演算対象とする。データ要素の数は、「実行サイズ」又は命令のためのチャネル数である。実行チャネルは、データ要素アクセス、マスキング、及び命令内のフロー制御に対する実行の論理ユニットである。チャネル数は、特定のグラフィックプロセッサの物理ＡＬＵ（Arithmetic  Logic  Unit）又はＦＰＵ（Floating  Point  Unit）の数と独立であってよい。幾つかの実施形態では、実行ユニット６０８Ａ−６０８Ｎは、整数及び浮動小数点データ型をサポートする。
【０１００】
実行ユニット命令セットは、ＳＩＭＤ命令を含む。種々のデータ要素は、パックされたデータ型としてレジスタに格納でき、実行ユニットは、要素のデータサイズに基づき種々の要素を処理する。例えば、２５６ビット幅のベクトルを演算対象とするとき、ベクトルの２５６ビットは、レジスタに格納され、実行ユニットは、４個の別個の６４ビットにパックされたデータ要素（クワッドワード（Quad-Word：QW）サイズデータ要素）、３個の別個の３２ビットにパックされたデータ要素（ダブルワード（DoubleWord：DW）サイズデータ要素）、１６個の別個の１６ビットにパックされたデータ要素（ワード（Word：W）サイズデータ要素）、又は３２個の別個の８ビットデータ要素（バイト（byte：B）サイズデータ要素）として、ベクトルを演算対象とする。しかしながら、異なるベクトル幅及びレジスタサイズが可能である。
【０１０１】
ある実施形態では、１つ以上の実行ユニットが、融合実行ユニットに共通であるスレッド制御ロジック（６０７Ａ〜６０７Ｎ）を有する融合ＥＵ６０９Ａ〜６０９Ｎへと結合できる。複数のＥＵがＥＵグループへと融合できる。融合ＥＵグループ内の各ＥＵは、別個のＳＩＭＤハードウェアスレッドを実行するよう構成できる。融合ＥＵ内のＥＵの数は、実施形態に従い変化し得る。さらに、ＳＩＭＤ８、ＳＩＭＤ１６、及びＳＩＭＤ３２を含むがこれらに限定されない種々のＳＩＭＤ幅が、ＥＵ毎に実行可能である。各融合グラフィック実行ユニット６０９Ａ〜６０９Ｎは、少なくとも２つの実行ユニットを含む。例えば、第１実行ユニット６０９Ａは、第１ＥＵ６０８Ａ、第２ＥＵ６０８Ｂ、及び第１ＥＵ６０８Ａと第２ＥＵ６０８Ｂとに共通であるスレッド制御ロジック６０７Ａを含む。スレッド制御ロジック６０７Ａは、融合グラフィック実行ユニット６０９Ａで実行されるスレッドを制御し、融合実行ユニット６０９Ａ〜６０９Ｎ内の各ＥＵが共通命令ポインタレジスタを使用して実行することを可能にする。
【０１０２】
１つ以上の内部命令キャッシュ（例えば６０６）が、実行ユニットのためにスレッド命令をキャッシュするために、スレッド実行ロジック６００に含まれる。幾つかの実施形態では、１つ以上のデータキャッシュ（例えば６１２）は、スレッド実行中にスレッドデータをキャッシュするために含まれる。幾つかの実施形態では、サンプラ６１０は、３Ｄ演算のためのテクスチャサンプリング及びメディア演算のためのメディアサンプリングを提供するために含まれる。幾つかの実施形態では、サンプラ６１０は、サンプリングされたデータを実行ユニットに提供する前に、サンプリングプロセス中にテクスチャ又はメディアデータを処理するために、特定テクスチャ又はメディアサンプリング機能を含む。
【０１０３】
実行中、グラフィック及びメディアパイプラインは、スレッド開始要求をスレッド実行ロジック６００へ、スレッド生成（spawning）及びディスパッチ（dispatch）ロジックを介して送信する。幾何学オブジェクトのグループが処理され、ピクセルデータにラスタライズされると、シェーダプロセッサ６０２内のピクセルプロセッサロジック（例えば、ピクセルシェーダロジック、フラグメントシェーダロジック、等）が呼び出され、出力情報を更に計算し及び出力面（例えば、色バッファ、深さバッファ、ステンシルバッファ、等）に書き込まれるべき結果を生じる。幾つかの実施形態では、ピクセルシェーダ又はフラグメントシェーダは、ラスタライズされたオブジェクト全体に挿入されるべき種々の頂点属性の値を計算する。幾つかの実施形態では、シェーダプロセッサ６０２内のピクセルプロセッサロジックは、ＡＰＩ（application  programming  interface）の供給したピクセル又はフラグメントシェーダプログラムを実行する。シェーダプログラムを実行するために、シェーダプロセッサ６０２は、スレッドを実行ユニット（例えば６０８Ａ）へ、スレッドディスパッチャ６０４を介してディスパッチする。幾つかの実施形態では、シェーダプロセッサ６０２は、サンプラ６１０内のテクスチャサンプリングロジックを使用して、メモリに格納されたテクスチャマップ内のテクスチャデータにアクセスする。テクスチャデータ及び入力幾何学データに対する算術演算は、各幾何学フラグメントのピクセル色データを計算し、又は１つ以上のピクセルを将来の処理から破棄する。
【０１０４】
幾つかの実施形態では、データポート６１４は、グラフィックプロセッサ出力パイプラインでの更なる処理のために処理済みデータをメモリに出力するために、スレッド実行ロジック６００にメモリアクセスメカニズムを提供する。幾つかの実施形態では、データポート６１４は、データポートを介するメモリアクセスのためにデータをキャッシュするために、１つ以上のキャッシュメモリ（例えば、データキャッシュ６１２）を含み又はそれに結合される。
【０１０５】
図６Ｂに示すように、グラフィック実行ユニット６０８は、命令フェッチユニット６３７、汎用レジスタファイルアレイ（general  register  file  array：ＧＲＦ）６２４、アーキテクチャレジスタファイルアレイ（architectural  register  file  array：ＡＲＦ）６２６、スレッド調停器６２２、送信ユニット６３０、分岐ユニット６３２、ＳＩＭＤ浮動小数点ユニット（ＦＰＵ）セット６３４、及び一実施形態では専用整数型ＳＩＭＤ  ＡＬＵセット６３５を含む。ＧＲＦ６２４及びＡＲＦ６２６は、グラフィック実行ユニット６０８内でアクティブであってよい同時ハードウェアスレッドにそれぞれ関連付けられる汎用レジスタファイル及びアーキテクチャレジスタファイルのセットを含む。一実施形態では、スレッド毎のアーキテクチャ状態はＡＲＦ６２６内に保持され、一方で、スレッド実行中に使用されるデータはＧＲＦ６２４に格納される。各スレッドのための命令ポインタを含む、各スレッドの実行状態は、ＡＲＦ６２６内のスレッド専用レジスタに保持できる。
【０１０６】
一実施形態では、グラフィック実行ユニット６０８は、同時複数スレッド（Simultaneous  Multi-Threading：ＳＭＴ）及び精細インタリーブド複数スレッド（Interleaved  Multi-Threading：ＩＭＴ）の結合であるアーキテクチャを有する。アーキテクチャは、目標同時スレッド数、及び実行ユニット当たりのレジスタ数に基づき、設計時に微調整可能なモジュラ構成を有する。ここで、実行ユニットリソースは、複数同時スレッドを実行するために使用されたロジックに渡り分割される。
【０１０７】
一実施形態では、グラフィック実行ユニット６０８は、それぞれ異なる命令であってよい複数命令を同時発行（co-issue）できる。グラフィック実行ユニットスレッド６０８のスレッド調停器６２２は、命令を送信ユニット６３０、分岐ユニット６３４２、又はＳＩＭＤ  ＦＰＵ６３４へ実行のためにディスパッチできる。各実行スレッドは、ＧＲＦ６２４内の１２８個の汎用レジスタにアクセスできる。ここで、各レジスタは、ＳＩＭＤとして３２ビットのデータ要素の８要素ベクトルにアクセス可能な３２バイトを格納できる。一実施形態では、各実行ユニットスレッドは、ＧＲＦ６２４内の４Ｋバイトへのアクセスを有する。しかしながら、実施形態はこれに限定されず、他の実施形態ではより多くの又は少ないレジスタリソースが設けられてよい。一実施形態では、最大７個のスレッドが同時実行可能である。しかしながら、実行ユニット当たりのスレッドの数は、実施形態によって変化し得る。７個のスレッドが４Ｋバイトにアクセスし得る実施形態では、ＧＲＦ６２４は合計２８Ｋバイトを格納できる。柔軟なアドレスモードは、レジスタが一緒にアドレス指定されて、効率的により幅広なレジスタを構築すること、又は発展した（strided）方形ブロックデータ構造を表すことを可能にする。
【０１０８】
一実施形態では、メモリ動作、サンプラ動作、及び他のより長い遅延のシステム通信は、メッセージ受け渡し送信ユニット６３０により実行される「送信」命令によりディスパッチされる。一実施形態では、分岐命令は、ＳＩＭＤ分岐及び最終的収束を促進する専用分岐ユニット６３２へディスパッチされる。
【０１０９】
一実施形態では、グラフィック実行ユニット６０８は、浮動小数点演算を実行するために１つ以上のＳＩＭＤ浮動小数点ユニット（ＦＰＵ）６３４を含む。一実施形態では、ＦＰＵ６３４は、整数計算もサポートする。一実施形態では、ＦＰＵ６３４は、最大Ｍ個の３２ビット浮動小数点（又は整数）演算をＳＩＭＤ実行し、又は最大２Ｍ個の１６ビット整数若しくは１６ビット浮動小数点演算をＳＩＭＤ実行できる。一実施形態では、ＦＰＵのうちの少なくとも１つは、高スループットの卓越した演算機能及び倍精度の６４ビット浮動小数点をサポートするために、拡張演算能力を提供する。幾つかの実施形態では、８ビット整数ＳＩＭＤ  ＡＬＵセット６３５も存在し、機械学習計算に関連する演算を実行するために特に最適化されてよい。
【０１１０】
一実施形態では、グラフィック実行ユニット６０８の複数のインスタンスのアレイは、グラフィックサブコアグルーピング（例えば、サブスライス）内でインスタンス化できる。拡張性のために、製品アーキテクチャは、サブコアグルーピング当たりの正確な実行ユニット数を選択できる。一実施形態では、実行ユニット６０８は、複数の実行チャネルに渡り命令を実行できる。更なる実施形態では、グラフィック実行ユニット６０８上で実行される各スレッドは、異なるチャネル上で実行される。
【０１１１】
図７は、幾つかの実施形態によるグラフィックプロセッサ命令フォーマットを示すブロック図である。１つ以上の実施形態で、グラフィックプロセッサ実行ユニットは、複数のフォーマットの命令を有する命令セットをサポートする。実線ボックスは、実行ユニット命令に通常含まれるコンポーネントを示す。一方、破線は、任意の又は命令のサブセットにのみ含まれるコンポーネントを含む。幾つかの実施形態では、説明され図示される命令フォーマット７００は、マクロ命令である。ここで、マクロ命令は実行ユニットに供給される命令である。これに対し、マイクロ演算は、命令が処理されると命令デコードから生じる。
【０１１２】
幾つかの実施形態では、グラフィックプロセッサ実行ユニットは、本来、１２８ビット命令フォーマット７１０の命令をサポートする。６４ビットの小型命令フォーマット７３０は、選択された命令、命令オプション、及びオペランド数に基づき、幾つかの命令で利用可能である。ネイティブの１２８ビット命令フォーマット７１０は、全ての命令オプションへのアクセスを提供する。一方で、幾つかのオプション及び演算は、６４ビットフォーマット７３０で制限される。６４ビットフォーマット７３０で利用可能なネイティブ命令は、実施形態により変化する。幾つかの実施形態では、命令は、インデックスフィールド７１３内のインデックス値のセットを用いて部分的に圧縮される。実行ユニットハードウェアは、インデックス値に基づき圧縮テーブルのセットを参照し、圧縮テーブル出力を用いて、１２８ビット命令フォーマット７１０内のネイティブ命令を再構成する。
【０１１３】
フォーマット毎に、命令オペコード７１２は、実行ユニットが実行しようとする演算を定める。実行ユニットは、各オペランドの複数のデータ要素に渡り、各命令を並行して実行する。例えば、加算命令に応答して、実行ユニットは、テクスチャ要素又はピクチャ要素を表す各色チャネルに渡り、同時加算演算を実行する。デフォルトで、実行ユニットは、オペランドの全てのデータチャネルに渡り各命令を実行する。幾つかの実施形態では、命令制御フィールド７１４は、チャネル選択（例えば、予測）及びデータチャネル順序（例えばスイズル（swizzle））のような特定の実行オプションに対する制御を可能にする。１２８ビット命令フォーマット７１０の命令では、実行サイズフィールド７１６は、並列に実行されるデータチャネルの数を制限する。幾つかの実施形態では、実行サイズフィールド７１６は、６４ビット小型命令フォーマット７３０での使用のために利用できない。
【０１１４】
幾つかの実行ユニット命令は、２個のソースオペランド、ｓｒｃ０  ７２０、ｓｒｃ１  ７２２、及び１個の宛先７１８を含む、最大３個のオペランドを有する。幾つかの実施形態では、実行ユニットは、宛先の１つが示唆される同報送信（dual  destination）命令をサポートする。データ操作命令は、第３ソースオペランド（例えば、ＳＲＣ２  ７２４）を有し、ここで、命令オペコード７１２はソースオペランドの数を決定する。命令の最後のソースオペランドは、命令と共に渡される中間（例えば、ハードコードされた）値であり得る。
【０１１５】
幾つかの実施形態では、１２８ビット命令フォーマット７１０は、例えば直接レジスタアドレスモード又は間接レジスタアドレスモードが使用されることを指定するアクセス／アドレスモードフィールド７２６を含む。直接レジスタアドレスモードが使用されるとき、１つ以上のオペランドのレジスタアドレスは、命令の中のビットにより直接提供される。
【０１１６】
幾つかの実施形態では、１２８ビット命令フォーマット７１０は、命令のアドレスモード及び／又はアクセスモードを指定するアクセス／アドレスモードフィールド７２６を含む。一実施形態では、アクセスモードは、命令のデータアクセスアライメントを定めるために使用される。幾つかの実施形態は、１６バイトに揃えられたアクセスモード及び１バイトに揃えられたアクセスモードを含むアクセスモードをサポートする。ここで、アクセスモードのバイトアライメントは、命令オペランドのアクセスアライメントを決定する。例えば、第１モードのとき、命令は、ソース及び宛先オペランドのためにバイトの揃えられたアドレッシングを使用し、及び第２モードのとき、命令は、全てのソース及び宛先オペランドのために１６バイトに揃えられたアドレッシングを使用してよい。
【０１１７】
一実施形態では、アクセス／アドレスモードフィールド７２６のアドレスモード部分は、命令が直接又は間接アドレッシングを使用するかを決定する。直接レジスタアドレスモードが使用されるとき、命令内のビットは、１つ以上のオペランドのレジスタアドレスを直接提供する。間接レジスタアドレッシングモードが使用されるとき、１つ以上のオペランドのレジスタアドレスは、アドレスレジスタ値及び命令内のアドレス隣接フィールドに基づき計算されてよい。
【０１１８】
幾つかの実施形態では、命令は、オペコードデコード７４０を簡略化するために、オペコード７１２ビットフィールドに基づきグループ化される。８ビットオペコードでは、ビット４、５、及び６は、実行ユニットがオペコードの種類を決定することを可能にする。図示の明確なオペコードグループ化は、単なる一例である。幾つかの実施形態では、移動（move）及びロジックオペコードグループ７４２は、データ移動及びロジック命令（例えば、移動（mov）、比較（cmp））を含む。幾つかの実施形態では、移動及びロジックオペコードグループ７４２は、５個の最上位ビット（most  significant  bit：ＭＳＢ）を共有する。ここで、移動（mov）命令は００００ｘｘｘｘｂの形式であり、ロジック命令は０００１ｘｘｘｘｂの形式である。フロー制御命令グループ７４４（例えば、呼び出し、ジャンプ（jmp））は、００１０ｘｘｘｘｂ（例えば、０ｘ２０）の形式の命令を含む。種々雑多な命令グループ７４６は、００１１ｘｘｘｘｂ（例えば０ｘ３０）の形式の同期命令（例えば、待機、送信）を含む、命令の混合を含む。並列算術命令グループ７４８は、０１００ｘｘｘｘｂ（例えば、０ｘ４０）の形式のコンポーネントに渡る算術演算命令（例えば、加算、乗算（mul））を含む。並列算術グループ７４８は、データチャネルに渡り並列に算術演算を実行する。ベクトル算術グループ７５０は、０１０１ｘｘｘｘｂ（例えば、０ｘ５０）の形式の算術演算命令（例えばｄｐ４）を含む。ベクトル算術グループは、ベクトルオペランドに対してドット積計算のような算術演算を実行する。
【０１１９】
＜グラフィックパイプライン＞
【０１２０】
図８は、グラフィックプロセッサ８００の別の実施形態のブロック図である。本願明細書の任意の他の図の要素と同じ参照符号（又は名称）を有する図８の要素は、本願明細書の他の場所に記載されたものと同様のいずれかの方法で動作し又は機能し得るが、そのように限定されない。
【０１２１】
幾つかの実施形態では、グラフィックプロセッサ８００は、幾何学パイプライン８２０、メディアパイプライン８３０、ディスプレイエンジン８４０、スレッド実行ロジック８５０、及びレンダ出力パイプライン８７０を含む。幾つかの実施形態では、グラフィックプロセッサ８００は、１つ以上の汎用処理コアを含むマルチコア処理システム内のグラフィックプロセッサである。グラフィックプロセッサは、１つ以上の制御レジスタ（図示しない）へのレジスタ書き込みにより、又はリング相互接続８０２を介するグラフィックプロセッサ８００へ発行されるコマンドにより、制御される。幾つかの実施形態では、リング相互接続８０２は、グラフィックプロセッサ８００を、他のグラフィックプロセッサ又は汎用プロセッサのような他の処理コンポーネントに結合する。リング相互接続８０２からのコマンドは、幾何学パイプライン８２０又はメディアパイプライン８３０の個々のコンポーネントに命令を供給するコマンドストリーマ８０３により解釈される。
【０１２２】
幾つかの実施形態では、コマンドストリーマ８０３は、頂点データをメモリから読み出し及びコマンドストリーマ８０３により提供された頂点処理コマンドを実行する頂点フェッチャ８０５の動作を指示する。幾つかの実施形態では、頂点フェッチャ８０５は、頂点データを頂点シェーダ８０７に提供する。頂点シェーダ８０７は、各頂点への調整空間変化及び照明演算を実行する。幾つかの実施形態では、頂点フェッチャ８０５及び頂点シェーダ８０７は、実行スレッドを実行ユニット８５２Ａ〜８５２Ｂへスレッドディスパッチャ８３１を介してディスパッチすることにより、頂点処理命令を実行する。
【０１２３】
幾つかの実施形態では、実行ユニット８５２Ａ〜８５２Ｂは、グラフィック及びメディア演算を実行するための命令セットを有するベクトルプロセッサのアレイである。幾つかの実施形態では、実行ユニット８５２Ａ〜８５２Ｂは、各アレイに特有の又はアレイ間で共有される付属のＬ１キャッシュ８５１を有する。キャッシュは、データキャッシュ、命令キャッシュ、又は異なるパーティションにデータ及び命令を含むために区分される単一キャッシュとして構成できる。
【０１２４】
幾つかの実施形態では、幾何学パイプライン８２０は、３Ｄオブジェクトのハードウェア高速化テッセレーション（hardware-accelerated  tessellation）を実行するテッセレーションコンポーネントを含む。幾つかの実施形態では、プログラマブルハル（hull）シェーダ８１１が、テッセレーション演算を構成する。プログラマブルドメインシェーダ８１７は、テッセレーション出力のバックエンド評価を提供する。テッセレータ８１３は、ハルシェーダ８１１の指示で動作し、幾何学パイプライン８２０に入力として提供される粗幾何学モデルに基づき詳細幾何学オブジェクトのセットを生成するための特定目的ロジックを含む。幾つかの実施形態では、テッセレーションが使用されない場合、テッセレーションコンポーネント（例えば、ハルシェーダ８１１、テッセレータ８１３、及びドメインシェーダ８１７）は、迂回可能である。
【０１２５】
幾つかの実施形態では、完成した幾何学オブジェクトは、幾何学シェーダ８１９により、実行ユニット８５２Ａ〜８５２Ｂへディスパッチされた１つ以上のスレッドを介して処理でき、又はクリッパ８２９へ直接進むことができる。幾つかの実施形態では、幾何学シェーダは、グラフィックパイプラインの前の段階におけるような頂点又は頂点のパッチではなく、全体の幾何学オブジェクトを演算対象とする。テッセレーションが無効にされる場合、幾何学シェーダ８１９は、頂点シェーダ８０７から入力を受信する。幾つかの実施形態では、幾何学シェーダ８１９は、テッセレーションユニットが無効にされる場合、幾何学テッセレーションを実行するために幾何学シェーダプログラマブルによりプログラム可能である。
【０１２６】
ラスタライズの前に、クリッパ８２９は頂点データを処理する。クリッパ８２９は、クリッピング及び幾何学シェーダ機能を有する固定機能クリッパ又はプログラマブルクリッパであってよい。幾つかの実施形態では、レンダ出力パイプライン８７０内のラスタライザ及び深さテストコンポーネント８７３は、幾何学オブジェクトをピクセル表現毎に変換するためにピクセルシェーダをディスパッチする。幾つかの実施形態では、ピクセルシェーダロジックは、スレッド実行ロジック８５０に含まれる。幾つかの実施形態では、アプリケーションは、ラスタライザ及び深さテストコンポーネント８７３を迂回し、未ラスタライズ頂点データにストリーム出力ユニット８２３を介してアクセスできる。
【０１２７】
グラフィックプロセッサ８００は、相互接続バス、相互接続ファブリック、又はプロセッサの主要コンポーネントの間でデータ及びメッセージ渡しを可能にする幾つかの他の相互接続メカニズムを有する。幾つかの実施形態では、実行ユニット８５２Ａ〜８５２Ｂ及び関連するロジックユニット（例えば、Ｌ１キャッシュ８５１、サンプラ８５４、テクスチャキャッシュ８５８、等）は、メモリアクセス及びプロセッサのレンダ出力パイプラインコンポーネントとの通信を実行するために、データポート８５６を介して相互接続する。幾つかの実施形態では、サンプラ８５４、キャッシュ８５１、８５８、及び実行ユニット８５２Ａ〜８５２Ｂは、それぞれ、別個のメモリアクセスパスを有する。一実施形態では、テクスチャキャッシュ８５８は、サンプラキャッシュとしても構成できる。
【０１２８】
幾つかの実施形態では、レンダ出力パイプライン８７０は、頂点に基づくオブジェクトを関連するピクセルに基づく表現に変換するラスタライザ及び深さテストコンポーネント８７３を含む。幾つかの実施形態では、ラスタライザロジックは、固定機能トライアングル及び線ラスタライズを実行するために、ウインドウ／マスクユニットを含む。幾つかの実施形態では、関連するレンダキャッシュ８７８及び深さキャッシュ８７９も利用可能である。ピクセル演算コンポーネント８７７は、ピクセルに基づく演算をデータに対して実行する。しかしながら、幾つかの例では、２Ｄ演算に関連するピクセル演算（例えば、ブレンディングによるビットブロック画像転送）は、２Ｄエンジン８４１により実行され、又はオーバレイディスプレイ平面を用いてディスプレイ制御部８４３により表示時に置き換えられる。幾つかの実施形態では、共有Ｌ３キャッシュ８７５は、全てのグラフィックコンポーネントに利用可能であり、主システムメモリを使用せずに、データの共有を可能にする。
【０１２９】
幾つかの実施形態では、グラフィックプロセッサメディアパイプライン８３０は、メディアエンジン８３７及びビデオフロントエンド８３４を含む。幾つかの実施形態では、ビデオフロントエンド８３４は、コマンドストリーマ８０３からパイプラインコマンドを受信する。幾つかの実施形態では、メディアパイプライン８３０は、別個のコマンドストリーマを含む。幾つかの実施形態では、ビデオフロントエンド８３４は、コマンドをメディアエンジン８３７へ送信する前に、メディアコマンドを処理する。幾つかの実施形態では、メディアエンジン８３７は、スレッドディスパッチャ８３１によりスレッド実行ユニット８５０へディスパッチするために、スレッドを生成するスレッド生成機能を含む。
【０１３０】
幾つかの実施形態では、グラフィックプロセッサ８００は、ディスプレイエンジン８４０を含む。幾つかの実施形態では、ディスプレイエンジン８４０は、プロセッサ８００の外部にあり、グラフィックプロセッサとリング相互接続８０２、又は何らかの他の相互接続バス若しくはファブリックを介して結合する。幾つかの実施形態では、ディスプレイエンジン８４０は、２Ｄエンジン８４１及びディスプレイ制御部８４３を含む。幾つかの実施形態では、ディスプレイエンジン８４０は、３Ｄパイプラインと独立に動作可能な特定用途ロジックを含む。幾つかの実施形態では、ディスプレイ制御部８４３は、ラップトップコンピュータにおけるようなシステム内蔵ディスプレイ又はディスプレイ装置コネクタを介して取り付けられる外部ディスプレイ装置であってよいディスプレイ装置（図示しない）に結合する。
【０１３１】
幾つかの実施形態では、幾何学パイプライン８２０及びメディアパイプライン８３０は、複数のグラフィック及びメディアプログラミングインタフェースに基づき演算を実行するよう構成可能であり、任意の１つのアプリケーションプログラミングインタフェース（ＡＰＩ）に特有ではない。幾つかの実施形態では、グラフィックプロセッサのためのドライバソフトウェアは、特定のグラフィック又はメディアライブラリに特有のＡＰＩ呼び出しを、グラフィックプロセッサにより処理可能なコマンドに変換する。幾つかの実施形態では、ＯｐｅｎＧＬ（Open  Graphics  Library）、ＯｐｅｎＣＬ（Open  Computing  Language）、及び／又はVulkanグラフィック及び計算ＡＰＩ、Ｋｈｒｏｎｏｓ  Ｇｒｏｕｐの全部のためにサポートが提供される。幾つかの実施形態では、Microsoft社の直接３Ｄライブラリのためのサポートも提供されてよい。幾つかの実施形態では、これらのライブラリの組合せがサポートされてよい。サポートは、ＯｐｅｎＣＶ（Open  Source  Computer  Vision  Library）についても提供されてよい。互換性のある３Ｄパイプラインを有する将来のＡＰＩも、将来のＡＰＩのパイプラインからグラフィックプロセッサのパイプラインへのマッピングが行われ得る場合、サポートされ得る。
【０１３２】
＜グラフィックパイプラインプログラミング＞
【０１３３】
図９Ａは、幾つかの実施形態によるグラフィックプロセッサコマンドフォーマットを示すブロック図である。図９Ｂは、実施形態によるグラフィックプロセッサコマンドシーケンス９１０を示すブロック図である。図９Ａ内の実線ボックスは、グラフィックコマンドに通常含まれるコンポーネントを示す。一方、破線は、任意の又はグラフィックコマンドのサブセットにのみ含まれるコンポーネントを含む。図９Ａの例示的なグラフィックプロセッサコマンドフォーマット９００は、クライアント９０２、コマンド演算コード（オペコード）９０４、及びコマンドのためのデータ９０６を識別するためのデータフィールドを含む。サブオペコード９０５及びコマンドサイズ９０８も、幾つかのコマンドに含まれる。
【０１３４】
幾つかの実施形態では、クライアント９０２は、コマンドデータを処理するグラフィック装置のクライアントユニットを指定する。幾つかの実施形態では、グラフィックプロセッサコマンドパーサは、各コマンドのクライアントフィールドを調べ、コマンドの更なる処理を調整し、及びコマンドデータを適切なクライアントユニットへルーティングする。幾つかの実施形態では、グラフィックプロセッサクライアントユニットは、メモリインタフェースユニット、レンダユニット、２Ｄユニット、３Ｄユニット、及びメディアユニットを含む。各クライアントユニットは、コマンドを処理する対応する処理パイプラインを有する。コマンドがクライアントユニットにより受信されると、クライアントユニットは、オペコード９０４及び存在する場合にはサブオペコード９０５を読み取り、実行すべき演算を決定する。クライアントユニットは、データフィールド９０６内の情報を用いてコマンドを実行する。幾つかのコマンドでは、明示的コマンドサイズ９０８がコマンドのサイズを指定することが期待される。幾つかの実施形態では、コマンドパーサは、コマンドオペコードに基づき、コマンドの少なくとも幾つかのサイズを自動的に決定する。幾つかの実施形態では、コマンドは、複数のダブルワードにより揃えられる。
【０１３５】
図９Ｂのフロー図は、例示的なグラフィックプロセッサコマンドシーケンス９１０を示す。幾つかの実施形態では、グラフィックプロセッサの実施形態を特徴付けるデータ処理システムのソフトウェア又はファームウェアは、グラフィック演算のセットを設定し、実行し、及び終了するために示されるコマンドシーケンスのバージョンを使用する。例示の目的でのみ、サンプルコマンドシーケンスが示され説明される。実施形態はこれらの特定のコマンドに又はこのコマンドシーケンスに限定されない。さらに、コマンドは、コマンドシーケンスの中で、コマンドバッチとして発行されてよい。その結果、グラフィックプロセッサは、少なくとも部分的に同時発生するコマンドのシーケンスを処理する。
【０１３６】
幾つかの実施形態では、グラフィックプロセッサコマンドシーケンス９１０は、パイプラインフラッシュコマンド９１２で開始し、任意のアクティブグラフィックパイプラインに、パイプラインの現在保留中のコマンドを完了させる。幾つかの実施形態では、３Ｄパイプライン９２２及びメディアパイプライン９２４は、同時に動作しない。パイプラインフラッシュは、アクティブグラフィックパイプラインに任意の保留中コマンドを完了させるために実行される。パイプラインフラッシュに応答して、グラフィックプロセッサのためのコマンドパーサは、アクティブな描画エンジンが保留中演算を完了し、及び関連リードキャッシュが無効にされるまで、コマンド処理を一時停止する。任意で、「ダーティ（dirty）」としてマークされたレンダキャッシュの中の任意のデータは、メモリにフラッシュされ得る。幾つかの実施形態では、パイプラインフラッシュコマンド９１２は、パイプライン同期のために、又はグラフィックプロセッサを低電力状態にする前に、使用できる。
【０１３７】
幾つかの実施形態では、パイプライン選択コマンド９１３は、コマンドシーケンスがグラフィックプロセッサにパイプライン間で明示的に切り替えることを要求するとき、使用される。幾つかの実施形態では、パイプライン選択コマンド９１３は、コンテキストが両方のパイプラインにコマンドを発行することでない限り、パイプラインコマンドを発行する前に、実行コンテキスト内で１度だけ要求される。幾つかの実施形態では、パイプラインフラッシュコマンド９１２は、パイプライン選択コマンド９１３によるパイプライン切り替えの直前に要求される。
【０１３８】
幾つかの実施形態では、パイプライン制御コマンド９１４は、グラフィックパイプラインを演算のために構成し、３Ｄパイプライン９２２及びメディアパイプライン９２４をプログラムするために使用される。幾つかの実施形態では、パイプライン制御コマンド９１４は、アクティブパイプラインのパイプライン状態を構成する。一実施形態では、パイプライン制御コマンド９１４は、パイプライン同期のために使用され、コマンドのバッチを処理する前にアクティブパイプライン内の１つ以上のキャッシュメモリからのデータをクリアする。
【０１３９】
幾つかの実施形態では、リターンバッファ状態コマンド９１６は、データを書き込むために、それぞれのパイプラインのリターンバッファのセットを構成するために使用される。幾つかのパイプライン演算は、演算が処理中に中間データを書き込む１つ以上のリターンバッファの割り当て、選択、又は構成を必要とする。幾つかの実施形態では、グラフィックプロセッサは、また、１つ以上のリターンバッファを使用して、出力データを格納し、及びスレッド間通信を実行する。幾つかの実施形態では、リターンバッファ状態９１６は、パイプライン演算のセットのために使用するリターンバッファのサイズ及び数を選択することを含む。
【０１４０】
コマンドシーケンスの中の残りのコマンドは、演算のためのアクティブパイプラインに基づき異なる。パイプライン決定９２０に基づき、コマンドシーケンスは、３Ｄパイプライン状態９３０で開始する３Ｄパイプライン、又はメディアパイプライン状態９４０で開始するメディアパイプライン９２４に合わせられる。
【０１４１】
３Ｄパイプライン状態９３０を構成するためにコマンドは、頂点バッファ状態、頂点要素状態、一定色状態、深さバッファ状態、及び３Ｄプリミティブコマンドが処理される前に構成されるべき他の状態変数のための、３Ｄ状態設定コマンドを含む。これらのコマンドの値は、少なくとも部分的に使用中の特定３Ｄ  ＡＰＩに基づき決定される。幾つかの実施形態では、３Ｄパイプライン状態９３０コマンドは、また、特定のパイプライン要素が使用されない場合、該要素を選択的に無効にし又は迂回できる。
【０１４２】
幾つかの実施形態では、３Ｄプリミティブ９３２コマンドは、３Ｄパイプラインにより処理されるべき３Ｄプリミティブを提出するために使用される。グラフィックプロセッサに３Ｄプリミティブ９３２コマンドにより渡されるコマンド及び関連パラメータは、グラフィックパイプライン内の頂点フェッチ機能へ転送される。頂点フェッチ機能は、３Ｄプリミティブ９３２コマンドデータを用いて頂点データ構造を生成する。頂点データ構造は、１つ以上のリターンバッファに格納される。幾つかの実施形態では、３Ｄプリミティブ９３２コマンドは、頂点シェーダにより、３Ｄプリミティブに対し頂点演算を実行するために使用される。頂点シェーダを処理するために、３Ｄパイプライン９２２は、グラフィックプロセッサ実行ユニットへシェーダ実行スレッドをディスパッチする。
【０１４３】
幾つかの実施形態では、３Ｄパイプライン９２２は、実行９３２コマンド又はイベントによりトリガされる。幾つかの実施形態では、レジスタ書き込みは、コマンド実行をトリガする。幾つかの実施形態では、実行は、コマンドシーケンス内の「go」又は「kick」コマンドによりトリガされる。一実施形態では、コマンド実行は、パイプライン同期コマンドを用いてトリガされ、グラフィックパイプラインを通じてコマンドシーケンスをフラッシュする。３Ｄパイプラインは、３Ｄプリミティブのために幾何学処理を実行する。演算が完了すると、結果として生じた幾何学オブジェクトはラスタライズされ、ピクセルエンジンは結果として生じたピクセルを着色する。ピクセルシェーディング及びピクセルバックエンド演算を制御するための追加コマンドも、これらの演算のために含まれてよい。
【０１４４】
幾つかの実施形態では、グラフィックプロセッサコマンドシーケンス９１０は、メディア演算を実行するとき、メディアパイプライン９２４パスを辿る。通常、メディアパイプライン９２４の特定の仕様及びプログラミング方法は、実行されるべきメディア又は計算演算に依存する。特定のメディア復号演算は、メディア復号中のメディアパイプラインにオフロードされてよい。幾つかの実施形態では、メディアパイプラインも迂回可能であり、メディア復号は、１つ以上の汎用処理コアにより提供されるリソースを全体として又は部分的に用いて実行され得る。一実施形態では、メディアパイプラインも、汎用グラフィックプロセッサユニット（general-purpose  graphics  processor  unit：GPGPU）演算のための要素を含む。ここで、グラフィックプロセッサは、グラフィックプリミティブのレンダリングに明示的に関連しないコンピュータシェーダプログラムを用いてＳＩＭＤベクトル演算を実行するために使用される。
【０１４５】
幾つかの実施形態では、メディアパイプライン９２４は、３Ｄパイプライン９２２と同様の方法で構成される。メディアパイプライン状態９４０を構成するコマンドのセットは、メディアオブジェクトコマンド９２４の前にコマンドシーケンスにディスパッチされ又は配置される。幾つかの実施形態では、メディアパイプライン状態９４０のためのコマンドは、メディアオブジェクトを処理するために使用されるメディアパイプライン要素を構成するためのデータを含む。これは、エンコーダ又はデコーダフォーマットのような、メディアパイプライン内のビデオ復号及びビデオ符号化ロジックを構成するためのデータを含む。幾つかの実施形態では、メディアパイプライン状態９４０のためのコマンドは、また状態設定のバッチを含む、「間接」状態要素への１つ以上のポインタの使用をサポートする。
【０１４６】
幾つかの実施形態では、メディアオブジェクトコマンド９４２は、メディアパイプラインによる処理のために、メディアオブジェクトへのポインタを供給する。メディアオブジェクトは、処理されるべきビデオデータを含むメモリバッファを含む。幾つかの実施形態では、全てのメディアパイプライン状態は、メディアオブジェクトコマンド９４２を発行する前に有効にされなければならない。パイプライン状態が構成され、メディアオブジェクトコマンド９４２が待ち行列に入れられると、メディアパイプライン９２４は、実行コマンド９４４又は等価な実行イベント（例えば、レジスタ書き込み）によりトリガされる。メディアパイプライン９２４からの出力は、次に、３Ｄパイプライン９２２又はメディアパイプライン９２４により提供される演算により後処理されてよい。幾つかの実施形態では、ＧＰＧＰＵ演算が構成され、メディア演算と同様の方法で実行される。
【０１４７】
＜グラフィックソフトウェアアーキテクチャ＞
【０１４８】
図１０は、幾つかの実施形態によるデータ処理システム１０００の例示的なグラフィックソフトウェアアーキテクチャを示す。幾つかの実施形態では、ソフトウェアアーキテクチャは、３Ｄグラフィックアプリケーション１０１０、オペレーティングシステム１０２０、及び少なくとも１つのプロセッサ１０３０を含む。幾つかの実施形態では、プロセッサ１０３０は、グラフィックプロセッサ１０３２、及び１つ以上の汎用プロセッサコア１０３４を含む。グラフィックアプリケーション１０１０及びオペレーティングシステム１０２０は、それぞれ、データ処理システムのシステムメモリ１０５０内で実行する。
【０１４９】
幾つかの実施形態では、３Ｄグラフィックアプリケーション１０１０は、シェーダ命令１０１２を含む１つ以上のシェーダプログラムを含む。シェーダ言語命令は、ＨＬＳＬ（High  Level  Shader  Language）又はＧＬＳＬ（OpenGL  Shader  Language）のような高級シェーダ言語のものであってよい。アプリケーションは、汎用プロセッサコア１０３４による実行に適する機械言語で実行命令１０１４も含む。アプリケーションは、頂点データにより定義されるグラフィックオブジェクト１０１６も含む。
【０１５０】
幾つかの実施形態では、オペレーティングシステム１０２０は、Microsoft社のMicrosoft（登録商標）Windows（登録商標）オペレーティングシステム、独自使用のUNIX（登録商標）のようなオペレーティングシステム、又はLinux（登録商標）カーネルの変形を用いるオープンソースUNIXのようなオペレーティングシステムである。オペレーティングシステム１０２０は、Direct３D  API、OpenGL  API又はVulkanAPIのような、グラフィックＡＰＩ１０２２をサポートできる。Direct３D  APIが使用されるとき、オペレーティングシステム１０２０は、フロントエンドシェーダコンパイラ１０２４を用いて、ＨＬＳＬの任意のシェーダ命令１０１２を低レベルのシェーダ言語にコンパイルする。コンパイルは、ジャストインタイム（just-in-time：ＪＩＴ）コンパイルであってよく、又はアプリケーションはコンパイル前にシェーダを実行できる。幾つかの実施形態では、高レベルのシェーダは、３Ｄグラフィックアプリケーション１０１０のコンパイル中に低レベルのシェーダにコンパイルされる。幾つかの実施形態では、シェーダ命令１０１２は、Vulkan  APIにより使用される標準ポータブル中間表現（Standard  Portable  Intermediate  Representation：SPIR）のバージョンのような中間形式で提供される。
【０１５１】
幾つかの実施形態では、ユーザモードグラフィックドライバ１０２６は、シェーダ命令１０１２をハードウェア特有表現に変換するバックエンドシェーダコンパイラ１０２７を含む。OpenGL  APIが使用されるとき、ＧＬＳＬ高級言語のシェーダ命令は、コンパイルのためにユーザモードグラフィックドライバ１０２６に渡される。幾つかの実施形態では、ユーザモードグラフィックドライバ１０２６は、カーネルモードグラフィックドライバ１０２９と通信するために、オペレーティングシステムカーネルモード機能１０２８を用いる。幾つかの実施形態では、カーネルモードグラフィックドライバ１０２９は、コマンド及び命令をディスパッチするためにグラフィックプロセッサ１０３２と通信する。
【０１５２】
＜ＩＰコア実装＞
【０１５３】
少なくとも１つの実施形態の１つ以上の態様は、プロセッサのような集積回路内のロジックを表す及び／又は定義する、機械可読媒体に格納された代表的なコードにより実装されてよい。例えば、機械可読媒体は、プロセッサ内の種々のロジックを表す命令を含んでよい。機械により読み取られると、命令は、該機械に、本願明細書に記載の技術を実行するロジックを作らせてよい。このような表現は、「ＩＰコア」としてしられ、集積回路の構造を記述するハードウェアモデルのような、有形機械可読媒体に格納されてよい集積回路のためのロジックの使用可能なユニットである。ハードウェアモデルは、集積回路を生産するハードウェアモデルを製造機械にロードする、様々な顧客又は製造設備に供給されてよい。回路が本願明細書に記載の実施形態のうちのいずれかに関連して記載された動作を実行するように、集積回路は製造されてよい。
【０１５４】
図１１Ａは、一実施形態による演算を実行するための集積回路を製造するために使用され得るＩＰコア開発システム１１００を示すブロック図である。ＩＰコア開発システム１１００は、より大きな設計に組み込まれ又は集積回路全体（例えば、ＳＯＣ集積回路）を構成するために使用可能な、モジュラ再使用可能設計を生成するために使用されてよい。設計設備１１３０は、高級プログラミング言語（例えば、Ｃ／Ｃ＋＋）でＩＰコア設計のソフトウェアシミュレーション１１１０を生成できる。ソフトウェアシミュレーション１１１０は、シミュレーションモデル１１１２を用いてＩＰコアの動作を設計し、テストし、及び検証するために使用できる。シミュレーションモデル１１１２は、機能、動作、及び／又はタイミングのシミュレーションを含んでよい。レジスタ転送レベル（register  transfer  level：RTL）１１１５が次に生成され、又はシミュレーションモデル１１１２から合成され得る。ＲＴＬ設計１１１５は、モデル化したデジタル信号を用いて実行される関連ロジックを含むハードウェアレジスタ間のデジタル信号のフローをモデル化する集積回路の動作の抽象化である。ＲＴＬ設計１１１５に加えて、ロジックレベル又はトランジスタレベルの低レベル設計も、生成され、設計され、又は合成されてよい。したがって、初期設計及びシミュレーションの特定の詳細事項は変化し得る。
【０１５５】
ＲＴＬ設計１１１５又は均等物は、更に、設計設備によりハードウェアモデル１１２０へと合成されてよい。ハードウェアモデル１１２０は、ハードウェア記述言語（hardware  description  language：HDL）又は何らかの他の表現の物理設計データであってよい。ＨＤＬは、ＩＰコア設計を検証するために更にシミュレートされ又はテストされてよい。ＩＰコア設計は、不揮発性メモリ１１４０（例えば、ハードディスク、フラッシュメモリ、又は任意の不揮発性記憶媒体）を用いて第三者製造設備１１６５へ分配するために格納され得る。代替として、ＩＰコア設計は、有線接続１１５０又は無線接続１１６０を介して（例えばインターネットを介して）送信されてよい。製造設備１１６５は、次に、ＩＰコア設計に少なくとも部分的に基づく集積回路を製造してよい。製造された集積回路は、本願明細書に記載の少なくとも１つの実施形態に従い演算を実行するよう構成され得る。
【０１５６】
図１１Ｂは、本願明細書に記載の幾つかの実施形態による、集積回路パッケージアセンブリ１１７０の断面側面図を示す。集積回路パッケージアセンブリ１１７０は、本願明細書に記載のような１つ以上のプロセッサ又はアクセラレータ装置の実装を示す。パッケージアセンブリ１１７０は、基板１１８０に接続されたハードウェアロジック１１７２、１１７４の複数のユニットを含む。ロジック１１７２、１１７４は、少なくとも部分的に設定可能ロジック又は固定機能ロジックハードウェアで実装されてよく、本願明細書に記載のプロセッサコア、グラフィックプロセッサ、又は他のアクセラレータ装置のいずれかの１つ以上の部分を含み得る。ロジック１１７２、１１７４の各ユニットは、半導体ダイ内に実装され、相互接続構造１１７３を介して基板１１８０に結合できる。相互接続構造１１７３は、ロジック１１７２、１１７４と基板１１８０との間で電気信号をルーティングするよう構成されてよく、限定ではないがバンプ又はピラーのような相互接続を含み得る。幾つかの実施形態では、相互接続構造１１７３は、ロジック１１７２、１１７４の演算に関連付けられた、例えば入力／出力（Ｉ／Ｏ）信号及び／又は電力若しくはグランド信号のような電気信号をルーティングするよう構成されてよい。幾つかの実施形態では、基板１１８０は、エポキシベースの積層基板である。パッケージ基板１１８０は、他の実施形態では他の適切な種類の基板を含んでよい。パッケージアセンブリ１１７０は、パッケージ相互接続１１８３を介して他の電気装置に接続され得る。パッケージ相互接続１１８３は、電気信号をマザーボード、他のチップセット、又はマルチチップモジュールのような他の電気装置へルーティングするために、基板１１８０の表面に結合されてよい。
【０１５７】
幾つかの実施形態では、ロジック１１７２、１１７４のユニットは、ロジック１１７２、１１７４の間で電気信号をルーティングするよう構成されるブリッジ１１８２に電気的に結合される。ブリッジ１１８２は、電気信号のためのルートを提供する密度の高い相互接続構造であってよい。ブリッジ１１８２は、ガラス又は適切な半導体材料からなるブリッジ基板を含んでよい。電気的ルーティング特徴は、ロジック１１７２、１１７４の間のチップ間接続を提供するために、ブリッジ基板上に形成できる。
【０１５８】
ロジック１１７２、１１７４の２つのユニット及びブリッジ１１８２が示されたが、本願明細書に記載の実施形態は、より多くの又はより少ないロジックユニットを１つ以上のダイの上に含んでよい。ロジックが単一のダイに含まれるとき、ブリッジ１１８２は除外され得るので、１つ以上のダイは、ゼロ以上のブリッジにより接続されてよい。代替として、複数のダイ又はロジックのユニットが、１つ以上のブリッジにより接続され得る。追加で、複数のロジックユニット、ダイ、及びブリッジは、３次元構成を含む他の可能な構成で一緒に接続され得る。
【０１５９】
＜例示的なシステムオンチップ集積回路＞
【０１６０】
図１２〜１４は、本願明細書に記載の種々の実施形態による、１つ以上のＩＰコアを用いて製造され得る例示的な集積回路及び関連するグラフィックプロセッサを示す。図示されたものに加えて、追加グラフィックプロセッサ／コア、周辺機器インタフェース制御部、又は汎用プロセッサコアを含む他のロジック及び回路が含まれてよい。
【０１６１】
図１２は、実施形態による、１つ以上のＩＰコアを用いて製造され得る例示的なシステムオンチップ集積回路１２００を示すブロック図である。例示的な集積回路１２００は、１つ以上のアプリケーションプロセッサ１２０５（例えば、ＣＰＵ）、少なくとも１つのグラフィックプロセッサ１２１０を含み、追加で、画像プロセッサ１２１５及び／又はビデオプロセッサ１２２０を含んでよく、これらのうちの任意のものは、同じ又は複数の異なる設計設備からのモジュラＩＰコアであってよい。集積回路１２００は、ＵＳＢ制御部１２２５、ＵＡＲＴ制御部１２３０、ＳＰＩ／ＳＤＩＯ制御部１２３５、及びＩ２Ｓ／Ｉ２Ｃ制御部１２４０を含む周辺機器又はバスロジックを含む。追加で、集積回路は、ＨＤＭＩ（登録商標）（high-definition  multimedia  interface）制御部１２５０及びＭＩＰＩ（mobile  industry  processor  interface）ディスプレイインタフェース１２５５のうちの１つ以上に結合されるディスプレイ装置１２４５を含み得る。記憶装置は、フラッシュメモリ及びフラッシュメモリ制御部を含むフラッシュメモリサブシステム１２６０により提供されてよい。メモリインタフェースは、ＳＤＲＡＭ又はＳＲＡＭメモリ装置へのアクセスのためにメモリ制御部１２６５により提供されてよい。幾つかの集積回路は、追加で、内蔵セキュリティエンジン１２７０を含む。
【０１６２】
図１３Ａ〜１３Ｂｈが、本願明細書に記載の実施形態による、ＳｏＣ内で使用される例示的なグラフィックプロセッサを示すブロック図である。図１３Ａは、実施形態による、１つ以上のＩＰコアを用いて製造され得るシステムオンチップ集積回路の例示的なグラフィックプロセッサ１３１０を示す。図１３Ｂは、実施形態による、１つ以上のＩＰコアを用いて製造され得るシステムオンチップ集積回路の追加の例示的なグラフィックプロセッサ１３４０を示す。図１３Ａのグラフィックプロセッサ１３１０は、低電力グラフィックプロセッサコアの一例である。図１３Ｂのグラフィックプロセッサ１３４０は、高性能グラフィックプロセッサコアの一例である。グラフィックプロセッサ１３１０、１３４０の各々は、図１２のグラフィックプロセッサの変形であり得る。
【０１６３】
図１３Ａに示すように、グラフィックプロセッサ１３１０は、頂点プロセッサ１３０５及び１つ以上のフラグメントプロセッサ１３１５Ａ〜１３１５Ｎ（例えば、１３１５Ａ、１３１５、１３１５Ｃ、１３１５Ｄ、乃至１３１５Ｎ−１、及び１３１５Ｎ）を含む。グラフィックプロセッサ１３１０は、別個のロジックにより異なるシェーダプログラムを実行できる。その結果、頂点プロセッサ１３０５は、頂点シェーダプログラムの演算を実行するために最適化され、一方で、１つ以上のフラグメントプロセッサ１３１５Ａ〜１３１５Ｎは、フラグメント又はピクセルシェーダプログラムのフラグメント（例えばピクセル）シェーディング演算を実行する。頂点プロセッサ１３０５は、３Ｄグラフィックパイプラインの頂点処理段階を実行し、プリミティブ及び頂点データを生成する。フラグメントプロセッサ１３０５Ａ〜１３１５Ｎは、頂点プロセッサ１３０５により生成されたプリミティブ及び頂点データを使用して、ディスプレイ装置上で表示されるフレームバッファを生成する。一実施形態では、フラグメントプロセッサ１３１５Ａ〜１３１５Ｎは、Ｄｉｒｅｃｔ  ３Ｄ  ＡＰＩ内で提供されたようなピクセルシェーダプログラムと同様の演算を実行するために使用され得るＯｐｅｎＧＬ  ＡＰＩ内で提供されるとき、フラグメントシェーダプログラムを実行するために最適化される。
【０１６４】
グラフィックプロセッサ１３１０は、追加で、１つ以上のメモリ管理ユニット（memory  management  unit：MMU）１３２０Ａ〜１３２０Ｂ、キャッシュ１３２５Ａ〜１３２５Ｂ、及び回路相互接続１３３０Ａ〜１３３０Ｂを含む。１つ以上のＭＭＵ１３２０Ａ〜１３２０Ｂは、１つ以上のキャッシュ１３２５Ａ〜１３２５Ｂに格納された頂点又は画像／テクスチャデータに加えて、メモリに格納された基準頂点又は画像／テクスチャデータを参照し得る頂点プロセッサ１３０５及び／又はフラグメントプロセッサ１３１５Ａ〜１３１５Ｎを含むグラフィックプロセッサ１３１０のために仮想アドレスから物理アドレスへのマッピングを提供する。一実施形態では、１つ以上のＭＭＵ１３２０Ａ〜１３２０Ｂは、図１２の１つ以上のアプリケーションプロセッサ１２０５、画像プロセッサ１２０１５、及び／又はビデオプロセッサ１２２０に関連する１つ以上のＭＭＵを含む、システム内の他のＭＭＵと同期化されてよい。その結果、各プロセッサ１２０５〜１２２０は、共有又は統一された仮想メモリシステムに参加できる。１つ以上の回路相互接続１３３０Ａ〜１３３０Ｂは、実施形態により、グラフィックプロセッサ１３１０に、ＳｏＣの内部バスを介して又は直接接続を介して、ＳｏＣ内の他のＩＰコアとインタフェースさせる。
【０１６５】
図１３Ｂに示すように、グラフィックプロセッサ１３４０は、図１３Ａのグラフィックプロセッサ１３１０の１つ以上のＭＭＵ１３２０Ａ〜１３２０Ｂ、キャッシュ１３２５Ａ〜１３２５Ｂ、及び回路相互接続１３３０Ａ〜１３３０Ｂを含む。グラフィックプロセッサ１３４０は、統一シェーダコアアーキテクチャを提供する１つ以上のシェーダコア１３５５Ａ〜１３５５Ｎ（例えば、１３５５Ａ、１３５５Ｂ、１３５５Ｃ、１３５５Ｄ、１３５５Ｅ、１３５５Ｆ乃至１３５５Ｎ−１、及び１３５５Ｎ）を含む。統一シェーダコアアーキテクチャでは、単一のコア又は種類又はコアが、頂点シェーダ、フラグメントシェーダ、及び／又はコンピュータシェーダを実行するためのシェーダプログラムコードを含む全ての種類のプログラマブルシェーダコアを実行できる。存在するシェーダコアの正確な数は、実施形態及び実装の間で変化し得る。追加で、グラフィックプロセッサ１３４０は、コアタスク間マネジャ１３４５を含む。コアタスク間マネジャ１３４５は、実行スレッドを１つ以上のシェーダコア１３５５Ａ〜１３５５Ｎへディスパッチするスレッドディスパッチャ、及びタイルベースのレンダリングのためのタイリング演算を加速化するタイリングユニット１３５８として動作する。ここで、シーンのレンダリング演算は、画像空間に細分化され、例えばシーン内の局所的空間コヒーレンスを利用する、又は内部キャッシュの使用を最適化する。
【０１６６】
図１４Ａ〜１４Ｂは、本願明細書に記載の実施形態による追加の例示的なグラフィックプロセッサロジックを示す。図１４Ａは、図１２のグラフィックプロセッサ１２１０内に含まれてよい及び図１３Ｂにおけるような統一シェーダコア１３５５Ａ〜１３５５Ｎであってよい、グラフィックコア１４００を示す。図１４Ｂは、マルチチップモジュールでの展開に適する高度に並列化された汎用グラフィック処理ユニットである、追加の高度並列汎用グラフィック処理ユニット１４３０を示す。
【０１６７】
図１４Ａに示すように、グラフィックコア１４００は、グラフィックコア１４００内の実行リソースに共通である、共有命令キャッシュ１４０２、テクスチャユニット１４１８、及びキャッシュ／共有メモリ１４２０を含む。グラフィックコア１４００は、複数のスライス１４０１Ａ〜１４０１Ｎ又は各コアのためのパーティションを含み得る。グラフィックプロセッサは、グラフィックコア１４００の複数のインスタンスを含み得る。スライス１４０１Ａ〜１４０１Ｎは、ローカル命令キャッシュ１４０４Ａ〜１４０４Ｎ、スレッドスケジューラ１４０６Ａ〜１４０６Ｎ、スレッドディスパッチャ１４０８Ａ〜１４０８Ｎ、及びレジスタ１４１０Ａ〜１４１０Ｎのセットを含むサポートロジックを含み得る。ロジック演算を実行するために、スライス１４０１Ａ〜１４０１Ｎは、追加機能ユニット（ＡＦＵ（additional  function  unit）１４１２Ａ〜１４１２Ｎ）、浮動小数点ユニット（ＦＰＵ（floating-point  unit）１４１４Ａ〜１４１４Ｎ）、整数算術ロジックユニット（ＡＬＵ（arithmetic  logic  unit）１４１６Ａ〜１４１６Ｎ）、アドレス計算ユニット（ＡＣＵ（address  computational  unit）１４１３Ａ〜１４１３Ｎ）、倍精度浮動小数点ユニット（ＤＰＦＰＵ（double-precision  floating-point  unit）１４１５Ａ〜１４１５Ｎ）、及び行列処理ユニット（ＭＰＵ（matrix  processing  unit）１４１７Ａ〜１４１７Ｎ）のセットを含み得る。
【０１６８】
計算ユニットのうちの幾つかは、特定の精度で動作する。例えば、ＦＰＵ１４１４Ａ〜１４１４Ｎは、単精度（３２ビット）及び半精度（１６ビット）の浮動小数点演算を実行でき、一方で、ＤＰＦＰＵ１４１５Ａ〜１４１５Ｎは倍精度（６４ビット）の浮動小数点演算を実行する。ＡＬＵ１４１６Ａ〜１４１６Ｎは、８ビット、１６ビット、及び３２ビットの精度で可変精度整数演算を実行でき、混合精度演算のために構成できる。ＭＰＵ１４１７Ａ〜１４１７Ｎも、半精度浮動小数点及び８ビット整数演算を含む混合精度行列演算のために構成できる。ＭＰＵ１４１７Ａ〜１４１７Ｎは、加速汎用行列乗算（general  matrix  to  matrix  multiplication：GEMM）のサポートを有効にすることを含む、機械学習アプリケーションフレームワークを加速させるために種々の行列演算を実行できる。ＡＦＵ１４１２Ａ〜１４１２Ｎは、三角法演算（例えば、Sine、Cosine、等）を含む、浮動小数点又は整数ユニットによりサポートされない追加論理演算を実行できる。
【０１６９】
図１４Ｂに示すように、汎用処理ユニット（general-purpose  processing  unit：GPGPU）は、高度並列計算演算を、グラフィック処理ユニットのアレイにより実行させるよう構成され得る。更に、ＧＰＧＰＵ１４３０は、マルチＧＰＵクラスタを生成して特定の深層ニューラルネットワークのトレーニング速度を向上するために、ＧＰＧＰＵの他のインスタンスに直接リンクできる。ＧＰＧＰＵ１４３０は、ホストプロセッサとの接続を可能にするために、ホストインタフェース１４３２を含む。一実施形態では、ホストインタフェース１４３２はPCI  Expressインタフェースである。しかしながら、ホストインタフェースは、また、ベンダ固有通信インタフェース又は通信設備であり得る。ＧＰＧＰＵ１４３０は、ホストプロセッサからコマンドを受信し、これらのコマンドに関連する実行スレッドを、グローバルスケジューラ１４３４を用いて計算クラスタ１４３６Ａ〜１４３６Ｈのセットへ分配する。計算クラスタ１４３６Ａ〜１４３６Ｈは、キャッシュメモリ１４３８を共有する。キャッシュメモリ１４３８は、計算クラスタ１４３６Ａ〜１４３６Ｈ内のキャッシュメモリのために、より上位のキャッシュとして機能し得る。
【０１７０】
ＧＰＧＰＵ１４３０は、メモリ制御部１４４２Ａ〜１４４２Ｂのセットを介して計算クラスタ１４３６Ａ〜１４３６Ｈに結合されたメモリ１４４３４Ａ〜１４４３４Ｂを含む。種々の実施形態で、メモリ１４３４Ａ〜１４３４Ｂは、ＤＲＡＭ（dynamic  random  access  memory）、又はＧＤＤＲ（graphics  double  data  rate）メモリを含むＳＧＲＡＭ（synchronous  graphics  random  access  memory）のようなグラフィックランダムアクセスメモリを含む様々な種類のメモリ装置を含み得る。
【０１７１】
一実施形態では、計算クラスタ１４３６Ａ〜１４３６Ｈは、それぞれ、図１４Ａのグラフィックコア１４００のようなグラフィックコアのセットを含む。グラフィックコアは、機械学習計算に適するものを含む範囲の精度で計算演算を実行できる複数種類の整数及び浮動小数点論理ユニットを含み得る。例えば、及び一実施形態では、計算クラスタ１４３６Ａ〜１４３６Ｈの各々の中の浮動小数点ユニットの少なくともサブセットは、１６ビット又は３２ビット浮動小数点演算を実行するよう構成され得る。一方で、浮動小数点ユニットの異なるサブセットは、６４ビット浮動小数点演算を実行するよう構成され得る。
【０１７２】
ＧＰＧＰＵ１４３０の複数のインスタンスは、計算クラスタとして動作するよう構成され得る。計算クラスタにより同期及びデータ交換のために使用される通信メカニズムは、実施形態に渡り変化する。一実施形態では、ＧＰＧＰＵ１４３０の複数のインスタンスは、ホストインタフェース１４３２を介して通信する。一実施形態では、ＧＰＧＰＵ１４３０は、ＧＰＧＰＵの他のインスタンスへの直接接続を可能にするＧＰＵリンク１４４０にＧＰＧＰＵ１４３０を結合するＩ／Ｏハブ１４３９を含む。一実施形態では、ＧＰＵリンク１４４０は、ＧＰＧＰＵ１４３０の複数のインスタンスの間の通信及び同期を可能にする専用ＧＰＵ−ＧＰＵブリッジに結合される。一実施形態では、ＧＰＵリンク１４４０は、他のＧＰＧＰＵ又は並列プロセッサへデータを送信し及び受信するために、高速相互接続に結合する。一実施形態では、ＧＰＧＰＵ１４３０の複数のインスタンスは、別個のデータ処理システム内に置かれ、ホストインタフェース１４３２を介してアクセス可能なネットワーク装置を介して通信する。一実施形態では、ＧＰＵリンク１４４０は、ホストインタフェース１４３２に追加して又はその代わりに、ホストプロセッサへの接続を可能にするよう構成され得る。
【０１７３】
ＧＰＧＰＵ１４３０の図示した構成は、ニューラルネットワークをトレーニングするよう構成されるが、一実施形態は、高性能又は低電力推定（inferencing）プラットフォーム内で展開するために構成され得るＧＰＧＰＵ１４３０の代替構成を提供する。推定構成では、ＧＰＧＰＵ１４３０は、トレーニング構成と比べて、より少ない計算クラスタ１４３６Ａ〜１４３６Ｈを含む。さらに、メモリ１４３４Ａ〜１４３４Ｂに関連するメモリ技術は、推定及びトレーニング構成の間で異なってよく、より高い帯域幅メモリ技術がトレーニング構成に充てられる。一実施形態では、ＧＰＧＰＵ１４３０の推定構成は、特定命令の推定をサポートできる。例えば、推定構成は、展開されたニューラルネットワークの推定演算中に共通に使用される１つ以上の８ビット整数ドット積命令のサポートを提供できる。
【０１７４】
＜＜機械学習による光線追跡＞＞
上述のように、光線追跡（Ray  tracing、光線追跡法）は、光の伝搬が物理法則に基づくレンダリングを通じてシミュレートされるグラフィック処理技術である。光線追跡における主要な演算の１つは、ＢＶＨ（bounding  volume  hierarchy）の中でノードのトラバース及び交差テストを要求する見通し（visibility）クエリを処理することである。
【０１７５】
光線及び経路追跡に基づく技術は、各ピクセルを通じて光線及び経路を追跡すること、及び陰影、光沢度、間接照明、等のような高度な効果を計算するためにランダムサンプリングを用いることにより画像を計算する。少数のみのサンプルを使用することは、高速であるが、ノイズの多い画像を生成する。一方で、多数のサンプルを使用することは、高品質画像を生成するが、桁違いのコストがかかる。
【０１７６】
最近数年で、光線／経路追跡をリアルタイムで使用するための飛躍的進歩を遂げるソリューションが「ノイズ除去」の形式で現れている。ノイズの多い少ないサンプル数入力から、高品質フィルタリングされ／ノイズ除去された画像を生成する画像処理技術を使用する処理である。最も効率的なノイズ除去技術は、機械学習エンジンが、ノイズの多い画像がより多数のサンプルで計算された場合に何に似て見えるかを学習する機械学習技術に依存する。ある特定の実装では、機械学習は、畳み込みニューラルネットワーク（convolutional  neural  network：CNN）により実行される。しかしながら、本発明の基礎にある原理は、ＣＮＮ実装に限定されない。このような一実装では、トレーニングデータは、低サンプル数入力及び真値（ground-truth）により生成される。ＣＮＮは、対象ピクセルの周囲にある、ノイズの多いピクセル入力の近隣から、収束する（converged）ピクセルを予測するようトレーニングされる。
【０１７７】
完全ではないが、このＡＩに基づくノイズ除去技術は、驚くほど効果的であることが分かった。しかしながら、警告は、良好なトレーニングデータが必要であることである。そうでなければ、ネットワークは誤った結果を予測してしまうからである。例えば、アニメーション映画スタジオが陸上シーンを有する過去の映画でノイズ除去ＣＮＮをトレーニングし、次にトレーニングしたＣＮＮを使用して、水上に設定された新しい映画からのフレームをノイズ除去しようとする場合、ノイズ除去演算は準最適に実行するだろう。
【０１７８】
この問題を解決するために、本発明の一実施形態は、学習データを動的に集め、レンダリングの間、及び絶えず、ＣＮＮのような機械学習エンジンを、現在実行中のデータに基づきトレーニングする。したがって、機械学習エンジンを手近にあるタスクのために絶えず向上する。本実施形態は、依然としてランタイム前のトレーニング段階を実行してよいが、ランタイム中に必要に応じて機械学習の重みを調整し続ける。さらに、本実施形態は、フレーム毎又はＮ個のフレーム毎のサブ領域に対して、学習データの生成を制限することにより、トレーニングに必要な基準データの高い計算コストを回避する。特に、フレームのノイズの多い入力は、現在のネットワークによる完全なフレームのノイズ除去のために生成される。さらに、後述のように、基準ピクセルの小領域が生成され、連続トレーニングのために使用される。
【０１７９】
ＣＮＮ実装が特定の実施形態に関して記載されるが、限定ではなく教師あり学習（例えば、入力及び所望の出力の両方を含むデータセットの数学モデルを構築する）、教師なし学習（例えば、特定種類の構造について入力データを評価する）、及び／又は教師あり及び教師なし学習の組み合わせを含む任意の形式の機械学習が使用されてよい。
【０１８０】
既存のノイズ除去実装は、トレーニング段階及びランタイム段階で動作する。トレーニング段階の間、ピクセル色、深さ、法線、正規偏差、プリミティブＩＤ、及び、アルベド（albedo）のような種々のピクセル毎データチャネルを有するＮ×Ｎピクセルの領域を受信し及び最終ピクセル色を生成する、ネットワークトポロジが定められる。「代表的」トレーニングデータのセットは、低サンプル数入力に値する１フレームのものを用いて、及び非常に高いサンプル数により計算された「所望の」ピクセル色を参照して、生成される。ネットワークは、これらの入力に向かってトレーニングされ、ネットワークの「理想的」重みのセットを生成する。これらの実装では、基準データは、ネットワークの出力を所望の結果に最も近く一致させる、ネットワークの重みをトレーニングするために使用される。
【０１８１】
ランタイムにおいて、所与の予め計算された理想ネットワーク重みがロードされ、ネットワークが初期化される。フレーム毎に、ノイズ除去入力の低サンプル数画像（つまり、トレーニングのために使用されるものと同じ）が生成される。ピクセル毎に、ピクセルの入力の所与の近隣がネットワークを通され、「所望の」ピクセル色を予測し、ノイズ除去されたフレームを生成する。
【０１８２】
図１５は、初期トレーニング実装の一実施形態を示す。機械学習エンジン１５００（例えば、ＣＮＮ）は、ピクセル色、深さ、法線、正規偏差、プリミティブＩＤ、及び、アルベド（albedo）のような種々のピクセル毎データチャネルを有する、高サンプル数画像データ１７０２のようなＮ×Ｎピクセルの領域を受信し及び最終ピクセル色を生成する。代表的トレーニングデータは、低サンプル数入力１５０１に値する１フレームのものを用いて生成される。ネットワークは、これらの入力に向けてトレーニングされ、機械学習エンジン１５００が後にランタイムで低サンプル数画像をノイズ除去するために使用する「理想的な」重み１５０５のセットを生成する。
【０１８３】
上述の技術を向上させるために本発明の一実施形態は、フレーム又はフレームのサブセット毎に（例えば、ん＝２，３，４，１０，２５等であるＮフレーム毎に）新しいトレーニングデータを生成するよう、ノイズ除去段階を強化する。特に、図１６に示すように、本実施形態は、各フレーム内の１つ以上の領域を選択する。該領域は、ここでは、高サンプル数で別個の高サンプル数バッファ１６０４にレンダリングされる「新基準領域」１６０２と呼ばれる。低サンプル数バッファ１６０３は、（新基準領域１６０２に対応する低サンプル領域１６０４を含む）低サンプル数入力フレーム１６０１を格納する。
【０１８４】
一実施形態では、新基準領域１６０２の位置はランダムに選択される。代替として、新基準領域１６０２の位置は、新フレーム毎に予め指定された方法で（例えば、フレームの中心等にある指定領域に限定される、フレーム間の領域の所定の動きを用いて）調整されてよい。
【０１８５】
新基準領域がどのように選択されるかに拘わらず、新基準領域は、機械学習エンジン１６００により使用され、ノイズ除去に使用されるトレーニングされた重み１６０５を絶えず精緻化し更新する。特に、各新基準領域１６０２からの基準ピクセル色、及び対応する低サンプル数領域１６０７からのノイズの多い基準ピクセル入力がレンダリングされる。補足トレーニングは、次に、高サンプル数基準領域１６０２及び対応する低サンプル数領域１６０７を用いて、機械学習エンジン１６００上で実行される。初期トレーニングと対照的に、このトレーニングは、新基準領域１６０２毎に、ランタイム中に絶えず実行される。それにより、機械学習エンジン１６００が精密にトレーニングされることを保証する。例えば、ピクセル毎データチャネル（例えば、ピクセル色、深さ、法線、正規偏差、等）が評価されてよい。機械学習エンジン１６００は、トレーニングされた重み１６０５に対して調整を行うためにこれらを使用する。トレーニング例（図１５）におけるように、機械学習エンジン１６００あｈ、低サンプル数入力フレーム１６０１からノイズを除去するために、理想的重み１６０５のセットに向けてトレーニングされ、ノイズ除去されたフレーム１６２０を生成する。しかしながら、本実施形態では、トレーニングされた重み１６０５は、新しい種類の低サンプル数入力フレーム１６０１の新しい画像特性に基づき、絶えず更新される。
【０１８６】
一実施形態では、機械学習エンジン１６００により実行される再トレーニング演算は、グラフィックプロセッサユニット（ＧＰＵ）又はホストプロセッサ上でバックグラウンドで絶えず実行される。ドライバコンポーネント及び／又はＧＰＵハードウェアコンポーネントとして実装されてよいレンダループは、キュー内に位置する新しいトレーニングデータを（例えば、新しい基準領域１６０２の形式で）絶えず生成する。ＧＰＵ又はホストプロセッサ上で実行されるバックグラウンドトレーニング処理は、このキューから新しいトレーニングデータを絶えず読み出し、機械学習エンジン１６００を再トレーニングし、適切な間隔で新しい重み１６０５で更新する。
【０１８７】
図１７は、バックグラウンドトレーニング処理１７００がホストＣＰＵ１７１０により実施される、このような実装の１つの一例を示す。特に、本実施形態では、バックグラウンドトレーニング処理１７００は、高サンプル数新基準領域１６０２及び対応する低サンプル数領域１６０４を使用して、トレーニングされた重み１６０５を絶えず更新し、それにより機械学習エンジン１６００を更新する。
【０１８８】
図１８Ａに示すように、複数プレイヤのオンラインゲームにおけるような一実装では、異なるホストマシン１８２０〜１８２２が、バックグラウンドトレーニング処理１７００Ａ〜Ｃが（例えば、ゲームサーバのような）サーバ１８００へ送信する基準領域を個々に生成する。サーバ１８００は、次に、ホスト１８２１〜１８２２の各々から受信した新基準領域を用いて機械学習エンジン１８１０上でトレーニングを実行し、前述のように重み１８０５を更新する。サーバ１８００は、これらの重み１８０５をホストマシン１８２０へ送信する。ホストマシン１８２０は、重み１６０５Ａ〜Ｃを格納し、それによりそれぞれ個々の機械学習エンジン（図示しない）を更新する。サーバ１８００は膨大な数の基準領域を短時間の間に提供され得るので、ユーザにより実行されている任意の所与のアプリケーション（例えば、オンラインゲーム）の重みを効率的且つ精密に更新できる。
【０１８９】
図１８Ｂに示すように、異なるホストマシンは、新しい（例えば、前述のようにトレーニング／基準領域１６０２に基づき）トレーニングされた重みを生成し、新しいトレーニングされた重みを（例えば、ゲームサーバのような）サーバ１８００と共有し、又は代替としてピアツーピア共有プロトコルを使用する。サーバ上の機械学習管理コンポーネント１８１０は、ホストマシンの各々から受信した新しい重みを用いて結合重み１８０５のセットを生成する。結合重み１８０５は、例えば、新しい重みから生成された平均であり、本願明細書に記載のように絶えず更新されてよい。一旦生成されると、結合重み１６０５Ａ〜Ｃのコピーは、ホストマシン１８２０〜１８２１の各々へ送信され、そこに格納されてよい。ホストマシン１８２０〜１８２１は、次に、本願明細書に記載のように、結合重みを使用して、ノイズ除去演算を実行する。
【０１９０】
一実施形態では、この半閉ループ更新メカニズムは、ハードウェア製造者により使用できる。例えば、基準ネットワークは、ハードウェア製造者により分配されるドライバの一部として含まれてよい。ドライバが新しいトレーニングデータを本願明細書に記載の技術を用いて生成し、これらをハードウェア製造者へ絶えず提出して戻すとき、ハードウェア製造者は、次のドライバ更新のために、この情報を用いて自身の機械学習実装を改良し続ける。
【０１９１】
一実装では（例えば、レンダファーム上のバッチ映画レンダリングでは）、レンダラは、新たに生成したトレーニング領域を、時間に渡り複数のレンダノードからこのデータを集める（該スタジオのレンダファーム内にある）専用サーバ又はデータベースへ送信する。別個の機械上の別個のプロセスは、スタジオの専用ノイズ除去ネットワークを絶えず改良し、新しいレンダジョブが常に最新のトレーニングされたネットワークを使用する。
【０１９２】
本発明の一実施形態による方法は、図１９に示される。方法は、本願明細書に記載のアーキテクチャで実施されてよいが、任意の特定のシステム又はグラフィック処理アーキテクチャに限定されない。
【０１９３】
１９０１で、初期トレーニング段階の一部として、低サンプル数画像データ及び高サンプル数画像データが、複数の画像フレームについて生成される。１９０２で、機械学習ノイズ除去エンジンが、高／低サンプル数画像データを用いてトレーニングされる。一実施形態では、例えば、ピクセル特徴に関連付けられた畳み込みニューラルネットワーク重みのセットが、トレーニングに関連して更新されてよい。しかしながら、任意の機械学習アーキテクチャが用いられてよい。
【０１９４】
１９０３で、ランタイムにおいて、低サンプル数画像フレームが、高サンプル数を有する少なくとも１つの基準領域と一緒に生成される。１９０４で、高サンプル数基準領域は、機械学習エンジン及び／又は別個のトレーニングロジック（例えば、バックグラウンドトレーニングモジュール１７００）により使用され、機械学習エンジンのトレーニングを絶えず精緻化する。例えば、一実施形態では、高サンプル数基準領域は、低サンプル数画像の対応する部分と結合して使用されて、機械学習エンジン１９０４に最も効率的にノイズ除去を実行する方法を教示し続ける。ＣＮＮ実装では、例えば、これは、ＣＮＮに関連する重みを更新することを含み得る。
【０１９５】
上述の実施形態の複数の変形が実施されてよい。例えば、機械学習エンジンへのフィードバックループが構成される方法、トレーニングデータを生成するエンティティ、トレーニングデータがトレーニングエンジンにフィードバックされる方法、及び改良ネットワークがレンダリングエンジンに提供される方法である。さらに、上述の実施形態は単一の基準領域を用いて連続トレーニングを実行したが、任意の数の基準領域が使用されてよい。さらに、前述のように、基準領域は、異なるサイズであってよく、異なる数の画像フレーム上で使用されてよく、及び異なる技術を用いて（例えば、ランダムに、所定パターンに従い、等）画像フレーム内の異なる位置に位置付けられてよい。
【０１９６】
さらに、畳み込みニューラルネットワーク（ＣＮＮ）は、機械学習エンジン１６００の一例として記載されたが、本発明の基礎にある原理は、新しいトレーニングデータを用いて自身の結果を絶えず精緻化できる任意の形式の機械学習エンジンを用いて実施されてよい。例として、限定ではなく、他の機械学習実装は、例を挙げると、ＧＭＤＨ（group  method  of  data  handling）、ＬＳＴＭ（long  short-term  memory）、ＤＲ（deep  reservoir）計算、ＤＢ（deep  belief）ネットワーク、テンソルディープスタッキングネットワーク、及びディープ予測符号化ネットワーク、を含む。
【０１９７】
＜＜効率的な分散型ノイズ除去のための機器及び方法＞＞
上述のように、ノイズ除去は、滑らかなノイズのない画像によるリアルタイム光線追跡のための重要な特徴になってきている。レンダリングは、分散型システムに渡り複数の装置上で行われ得る。しかし、これまで既存のノイズ除去の枠組みは、すべて単一の機械上の単一のインスタンスで動作する。レンダリングが複数の装置に渡り行われている場合、それらは、画像のノイズ除去された部分を計算するためにアクセス可能なレンダリングされたピクセルを全部有しないことがある。
【０１９８】
本発明の一実施形態は、人工知能（artificial  intelligence：AI）及び非ＡＩに基づくノイズ除去技術の両方と共に動作する分散型ノイズ除去アルゴリズムを含む。画像の領域は、分散レンダ演算からノードに渡り既に分散されているか、又は分割され単一のフレームバッファから分散されている。充分なノイズ除去を計算するために必要な近隣領域のゴースト領域は、必要なときに近隣ノードから集められ、最終的に結果として生じるタイルは最終画像へと合成される。
【０１９９】
＜分散処理＞
図２０は、複数のノード２０２１〜２０２３がレンダリングを実行する、本発明の一実施形態を示す。３個のノードのみが簡単のために図示されるが、本発明の基礎にある原理は、任意の特定数のノードに限定されない。実施に、単一のノードが、本発明の特定の実施形態を実施するために使用されてよい。
【０２００】
ノード２０２１〜２０２３は、それぞれ、画像の一部をレンダリングし、結果として本例では領域２０１１〜２０１３を生じる。長方形領域２０１１〜２０１３が図２０に示されるが、任意の形状の領域が使用されてよく、任意の装置は任意の数の領域を処理できる。充分な円滑なノイズ除去演算を実行するためにノードにより必要とされる領域は、ゴースト領域２０１１〜２０１３と呼ばれる。言い換えると、ゴースト領域２００１〜２００３は、特定品質レベルでノイズ除去を実行するために必要な全データを表す。品質レベルの低下は、ゴースト領域のサイズ、したがって必要なデータ量を削減する。品質レベルの上昇は、ゴースト領域及び対応する必要なデータを増大する。
【０２０１】
一実施形態では、ノード２０２１のようなノードが特定品質レベルで自身の領域２０１１をノイズ除去するために必要なゴースト領域２００１の一部のローカルコピーを有する場合、該ノードは、図示のようにゴースト領域２０１１の一部を所有するノード２０２２のような１つ以上の「隣接」ノードから必要なデータを検索する。同様に、ノード２０２２が特定品質レベルで自身の領域２０１２をノイズ除去するために必要なゴースト領域２００２の一部のローカルコピーを有する場合、ノード２０２２は、ノード２０２１から必要なゴースト領域データ２０３２を検索する。検索は、バス、相互接続、高速メモリファブリック、ネットワーク（例えば高速イーサネット（登録商標））を介して実行されてよく、又は複数のコアの間でレンダリング作業を分散することのできる（例えば極限解像度又は時間変化において大規模画像をレンダリングするために使用される）マルチコアチップ内のオンチップ相互接続であってもよい。一実施形態では、各ノード２０２１〜２０２３は、グラフィックプロセッサ内の個々の実行ユニット又は実行ユニットの指定されたセットを含む。
【０２０２】
指定量の送信されるべきデータは、使用されるノイズ除去技術に依存する。さらに、ゴースト領域からのデータは、各それぞれの領域のノイズ除去を向上するために必要な任意のデータを含んでよい。一実施形態では、例えば、ゴースト領域データは、画像色／波長、強度／アルファデータ、及び／又は法線（normal）を含む。しかしながら、本発明の基礎にある原理は、ゴースト領域データの任意の特定のセットに限定されない。
【０２０３】
＜一実施形態の追加詳細事項＞
低速ネットワーク又は相互接続では、このデータの圧縮は、既存の汎用可逆又は不可逆圧縮を用いて利用され得る。例は、限定ではないが、zlib、gzip及びLZMA（Lempel-Ziv-Markov  chain  algorithm）を含む。フレーム間の光線衝突情報の差分（delta）が非常に粗いことがあり、ノードが前のフレームから集めた差分を既に有するとき、差分に貢献するサンプルだけが送信される必要のあることに留意することにより、更なるコンテンツ特有圧縮が使用されてよい。これらは、これらのサンプルを集めるノードｉに選択的にプッシュされ得る。又はノードｉは、他のノードからサンプルを要求できる。一実施形態では、可逆圧縮は、特定種類のデータ及びプログラムコードのために使用される。一方で、不可逆データは、他の種類のデータのために使用される。
【０２０４】
図２１は、本発明の一実施形態による、ノード２０２１〜２０２２間の相互作用の追加詳細事項を示す。各ノード２０２１〜２０２２は、それぞれの画像領域２０１１〜２０１２及びゴースト領域２００１〜２００２をレンダリングする光線追跡レンダリング回路２０８１〜２０８２を含む。ノイズ除去器２１００〜２１１１は、それぞれ、各ノード２０２１〜２０２２がレンダリング及びノイズ除去を担う領域２０１１〜２０１２に対してノイズ除去演算を実行する。ノイズ除去器２０２１〜２０２２は、例えば、それぞれノイズ除去領域２１２１〜２１２２を生成するために、回路、ソフトウェア、又はそれらの任意の組み合わせを含んでよい。上述のように、ノイズ除去領域を生成するとき、ノイズ除去器２０２１〜２０２２は、異なるノードにより所有されるゴースト領域内のデータに依存する必要があってよい（例えば、ノイズ除去器２１００は、ノード２０２２により所有されるゴースト領域２００２からのデータを必要としてよい）。
【０２０５】
したがって、一実施形態では、ノイズ除去器２１００〜２１１１は、それぞれ少なくとも一部が他方のノードから受信されてよい領域２０１１〜２０１２及びゴースト領域２００１〜２００２からのデータを用いて、ノイズ除去領域２０１１〜２０１２を生成する。領域データマネジャ２１０１〜２１０２は、本願明細書に記載のようにゴースト領域２００１〜２００２からのデータ転送を管理する。一実施形態では、圧縮／伸長ユニット２１３１〜２１３２は、それぞれノード２０２１〜２０２２間で交換されたゴースト領域データの圧縮及び伸長を実行する。
【０２０６】
例えば、ノード２０２１の領域データマネジャ２１０１は、ノード２０２２からの要求により、ゴースト領域２００１からのデータを圧縮／伸長器２１３１へ送信する。圧縮／伸長器２１３１は、該データを圧縮して圧縮データ２１０６を生成して、ノード２０２２へ送信する。それにより、相互接続、ネットワークバス、又は他のデータ通信リンク上の帯域幅を削減する。ノード２０２２の圧縮／伸長器２１３２は、次に、圧縮データ２１０６を伸長し、ノイズ除去器２１１１は、伸長ゴーストデータを用いて、領域２０１２からのデータのみによって可能なものより高品質のノイズ除去領域２０１２を生成する。領域データマネジャ２１０２は、ゴースト領域２００１からの伸長データをキャッシュ、メモリ、レジスタファイル、又は他の記憶装置に格納して、ノイズ除去領域２１２２を生成するときにノイズ除去器２１１１に利用可能にしてよい。同様の演算セットは、ゴースト領域２００２からのデータをノード２０２１上のノイズ除去器２１００に提供するために実行されてよい。ノード２０２１は、該データを、領域２０１１からのデータと組み合わせて使用して、より高品質のノイズ除去領域２１２１を生成する。
【０２０７】
＜データの取り込み（grab）又はレンダリング＞
ノード２０２１〜２０２２のような装置間の接続が低速である場合（つまり、閾待ち時間及び／又は閾帯域幅より低い）、他の装置から結果を要求するよりも、ローカルでゴースト領域をレンダリングする方が速いことがある。これは、ネットワークトランザクション速度、及びゴースト領域サイズの線形外挿レンダリング時間を追跡することによりランタイム時に決定できる。このような、ゴースト領域全体をレンダリングし終わるより速い場合に、結果として、複数の装置が画像の同じ部分をレンダリングすることがある。ゴースト領域のレンダリングされた部分の解像度は、基本領域の分散及び決定されたブラー度に基づき、調整されてよい。
【０２０８】
＜負荷平衡＞
一実施形態では、静的及び／又は動的負荷平衡方式が、種々のノード２０２１〜２０２２の間で処理負荷を分散するために使用されてよい。動的負荷平衡では、ノイズ除去フィルタにより決定された分散は、ノイズ除去においてより多くの時間を必要とするが、シーンの特定領域をレンダリングするために必要なサンプル量を引き出し、及び画像の低い分散及びブラー領域は少ないサンプルを必要とする。特定ノードに割り当てられた特定領域は、前のフレームからのデータに基づき動的に調整され、又はそれらがレンダリングされるとき装置間で動的に通信されてよい。その結果、全ての装置が同じ作業量を有する。
【０２０９】
図２２は、各それぞれのノード２０２１〜２０２２上で実行するモニタ２２０１〜２２０２が性能指標データを集める一実施形態を示す。性能指標データは、限定ではないが、ネットワークインタフェース２２１１〜２２１２を介してデータを送信するために費やされる時間、領域を（ゴースト領域データを有し及び有さず）ノイズ除去するとき費やされる時間、及び各領域／ゴースト領域をレンダリングするために費やされる時間を含む。モニタ２２０１〜２２０２は、これらの性能指標をマネジャ又は負荷平衡ノード２２０１に報告する。マネジャ又は負荷平衡ノード２２０１は、データを分析して、各ノード２０２１〜２０２２における現在作業負荷を特定し、場合によっては、種々のノイズ除去領域２１２１〜２１２２を処理するより効率的なモードを決定する。マネジャノード２２０１は、次に、検出した付加に従い、新しい領域の新しい作業負荷を、ノード２０２１〜２０２２に分散する。例えば、マネジャノード２２０１は、より多くの作業を、あまり重く負荷をかけられていないノードに送信し、及び／又は過負荷であるノードからの作業を再割り当てしてよい。さらに、負荷平衡ノード２２０１は、レンダリング及び／又はノイズ除去がノードの各々により実行される特定方法を調整するために、再構成コマンドを送信してよい（幾つかの例は上述された）。
【０２１０】
＜ゴースト領域の決定＞
一実施形態では、ゴースト領域２００１〜２００２のサイズ及び形状は、ノイズ除去器２１００〜２１１１により実施されるノイズ除去アルゴリズムに基づき決定される。それら個々のサイズは、ノイズ除去されているサンプルの検出された分散に基づき動的に変更され得る。ＡＩノイズ除去自体のために使用される学習アルゴリズムは、適切な領域サイズを決定するために使用されてよい。或いは、左右のブラーのような他の場合には、所定フィルタ幅が、ゴースト領域２００１〜２００２のサイズを決定する。学習アルゴリズムを使用する実装では、機械学習エンジンは、マネジャノード２２０１上で実行されてよく、及び／又は機械学習の部分が、個々のノード２０２１〜２０２３の各々で実行されてよい（例えば、図１８Ａ〜Ｂ及び関連する上述の記載を参照）。
【０２１１】
＜最終画像の収集＞
一実施形態では、最終画像は、レンダリングされたノイズ除去領域を、ノード２０２１〜２０３の各々から集めることにより生成され、ゴースト領域又は法線（normal）の必要がない。図２２では、例えば、ノイズ除去領域２１２１〜２１２２は、マネジャノード２２０１の領域プロセッサ２２８０へ送信される。領域プロセッサ２２８０は、領域を結合して、最終ノイズ除去画像２２９０を生成する。最終ノイズ除去画像２２９０は、次にディスプレイ２２９０上で表示される。領域プロセッサ２２８０は、種々の２Ｄ合成技術を用いて領域を結合してよい。別個のコンポーネントとして図示されたが、領域プロセッサ２２８０及びノイズ除去画像２２９０は、ディスプレイ２２９０に統合されてよい。本実施形態では、種々のノード２０２１〜２０２２は、直接送信技術を使用して、ノイズ除去領域２１２１〜２１２２を送信してよく、及び場合によっては、領域データの不可逆又は可逆圧縮を用いる。
【０２１２】
ＡＩノイズ除去は、依然として高コストな演算であり、ゲームのようにクラウドへと移行する。したがって、複数ノード２０２１〜２０２２に渡るノイズ除去処理の分散は、高フレームレートを要求する伝統的なゲーム又は仮想現実（virtual  reality：VR）のために、リアルタイムフレームレートを達成するために必要になる場合がある。映画スタジオも、高速ノイズ除去のために利用可能な大規模レンダリングファームにおいて、レンダリングすることが多い。
【０２１３】
分散型レンダリング及びノイズ除去を実行する方法の一実施形態は、図２３に示される。方法は、上述のシステムアーキテクチャのコンテキスト内で実施されてよいが、任意の特定のシステムアーキテクチャに限定されない。
【０２１４】
２３０１で、グラフィック作業は、画像フレームの領域をレンダリングするために光線追跡演算を実行する複数のノードにディスパッチされる。一実施形態では、各ノードは、既に、メモリ内に演算を実行する必要のあるデータを有してよい。例えば、ノードのうちの２つ以上は共通メモリを共有してよく、又は、ノードのローカルメモリは、既に、前の光線追跡演算からのデータを格納していてよい。代替として、又は追加で、特定データが、各ノードへ送信されてよい。
【０２１５】
２３０２で、特定レベルのノイズ除去（つまり、許容可能レベルの性能）の要求される「ゴースト領域」が決定される。ゴースト領域は、１つ以上の他のノードにより所有されるデータを含む、特定レベルのノイズ除去を実行することが要求される任意のデータを含む。
【０２１６】
２３０３で、ゴースト領域（又はその部分）に関連するデータは、ノード間で交換される。２３０４で、各ノードは、自身のそれぞれの領域に対して（例えば、交換したデータを用いて）ノイズ除去を実行する。２３０５で、結果が結合されて、最終ノイズ除去画像フレームを生成する。
【０２１７】
一実施形態では、図２２に示すようなマネジャノード又は１次ノードは、作業をノードへディスパッチし、次に、ノードにより実行された作業を結合して、最終画像フレームを生成する。別の実施形態では、ピアベースのアーキテクチャが使用される。該アーキテクチャでは、ノードは、データを交換し、最終画像フレームをレンダリングし及びノイズ除去するピアである。
【０２１８】
ここに記載のノード（例えば、ノード２０２１〜２０２３）は、高速ネットワークを介して相互接続されるグラフィック処理コンピューティングシステムであってよい。代替として、ノードは、高速メモリファブリックに結合される個別処理要素であってよい。本実施形態では、ノードのうちの全部が、共通仮想メモリ空間及び／又は共通物理メモリを共有してよい。別の実施形態では、ノードは、ＣＰＵ及びＧＰＵの結合であってよい。例えば、上述のマネジャノード２２０１は、ＣＰＵ及び／又はＣＰＵ上で実行されるソフトウェアであってよく、ノード２０２１〜２０２２は、ＧＰＵ及び／又はＧＰＵ上で実行されるソフトウェアであってよい。本発明の基礎にある原理に従いながら、様々な異なる種類のノードが使用されてよい。
【０２１９】
＜例示的なニューラルネットワーク実装＞
多くの種類のニューラルネットワークが存在し、単純な種類のニューラルネットワークはフィードフォワードネットワークである。フィードフォワードネットワークは、ノードが層に配置される非巡回グラフとして実装されてよい。標準的に、フィードフォワードネットワークトポロジは、少なくとも１つの隠れ層により分離される入力層及び出力層を含む。隠れ層は、入力層により受信した入力を、出力層において出力を生成するために有用な表現に変換する。ネットワークノードは、エッジを介して、隣接層のノードに全結合されるが、各層内のノード間にはエッジは存在しない。フィードフォワードネットワークの入力層のノードで受信したデータは、活性化関数により、出力層のノードへ伝搬される（つまり「フィードフォワードされる」）。ここで、活性化関数は、層を接続するエッジの各々にそれぞれ関連付けられた係数（「重み」）に基づきネットワーク内の各連続層のノードの状態を計算する。実行中のアルゴリズムにより表されている特定モデルに依存して、ニューラルネットワークアルゴリズムからの出力は様々な形式を取り得る。
【０２２０】
機械学習アルゴリズムが特定の問題をモデル化するために使用可能になる前に、アルゴリズムは、トレーニングデータセットを用いてトレーニングされる。ニューラルネットワークをトレーニングすることは、ネットワークトポロジを選択し、ネットワークによりモデル化されている問題を表すトレーニングデータのセットを用い、及びネットワークモデルがトレーニングデータセットの全てのインスタンスについて最小限の誤りで実行するまで、重みを調整することを含む。例えば、ニューラルネットワークの教師あり学習トレーニング処理の間、トレーニングデータセット内のインスタンスを表す入力に応答して、ネットワークにより生成される出力は、該インスタンスの「正しい」とラベル付けされた出力と比較され、出力とラベル付けされた出力との間の差を表す誤り信号が計算され、誤り信号がネットワークの層を通じて後方（backward）伝搬するとき、接続に関連付けられた重みが、該誤りを最小化するよう調整される。トレーニングデータセットのインスタンスから生成される出力の各々の誤りが最小化されるとき、ネットワークは「トレーニング」されたと考えられる。
【０２２１】
機械学習アルゴリズムの精度は、該アルゴリズムをトレーニングするために使用されるデータセットの品質により大きく影響され得る。トレーニングプロセスは、計算集約的であり、従来の汎用プロセッサにおいて有意な量の時間を必要とすることがある。したがって、多くの種類の機械学習アルゴリズムをトレーニングするために、並列処理ハードウェアが使用される。これは、ニューラルネットワークのトレーニングを最適化するために特に有用である。これは、ニューラルネットワークで係数を調整する際に実行される計算自体が、並列実施に自然に役立つからである。具体的に、多くの機械学習アルゴリズム及びソフトウェアアプリケーションは、汎用グラフィック処理装置内の並列処理ハードウェアを利用するよう適応されている。
【０２２２】
図２４は、機械学習ソフトウェアスタック２４００の一般化された図である。機械学習アプリケーション２４０２は、トレーニングデータセットを用いてニューラルネットワークをトレーニングするよう、又はトレーニングされた深層ニューラルネットワークを用いて人工知能を実装するよう構成できる。機械学習アプリケーション２４０２は、ニューラルネットワーク及び／又は展開前にニューラルネットワークをトレーニングするために使用可能な専用ソフトウェアのトレーニング及び推定機能を含み得る。機械学習アプリケーション２４０２は、限定ではないが、画像認識、マッピング及び位置特定、自律ナビゲーション、会話合成、医療画像、又は言語翻訳を含む任意の種類の人工知能を実装できる。
【０２２３】
機械学習アプリケーション２４０２のハードウェアアクセラレーションは、機械学習フレームワーク２４０４により有効にできる。機械学習フレームワーク２４０４は、機械学習プリミティブのライブラリを提供できる。機械学習プリミティブは、機械学習アルゴリズムにより共通に実行される基本演算である。機械学習フレームワーク２４０４が無いと、機械学習アルゴリズムの開発者は、機械学習アルゴリズムに関連する主要な計算ロジックを生成し及び最適化し、次に新しい並列プロセッサが開発されるときに該計算ロジックを再び最適化することを要求されるだろう。代わりに、機械学習アプリケーションは、機械学習フレームワーク２４０４により提供されるプリミティブを用いて必要な計算を実行するよう構成できる。例示的なプリミティブは、畳み込みニューラルネットワーク（convolutional  neural  network：CNN）をトレーニングする間に実行される計算演算である、テンソル畳み込み、活性化関数、及びプーリングを含む。機械学習フレームワーク２４０４は、行列及びベクトル演算のような、多くの機械学習アルゴリズムにより実行される基本的線形代数サブプログラムを実施するためのプリミティブも提供できる。
【０２２４】
機械学習フレームワーク２４０４は、機械学習アプリケーション２４０２から受信した入力データを処理し、及び計算フレームワーク２４０６への適切な入力を生成できる。計算フレームワーク２４０６は、ＧＰＧＰＵドライバ２４０８に提供される基本命令を抽象化でき、機械学習フレームワーク２４０４がＧＰＧＰＵハードウェア２４１０によるハードウェアアクセラレーションを活用できるようにし、機械学習フレームワーク２４０４にＧＰＧＰＵハードウェア２４１０のアーキテクチャの詳しい知識を有することを要求しない。さらに、計算フレームワーク２４０６は、様々な種類に渡り機械学習フレームワーク２４０４のハードウェアアクセラレーション、及びＧＰＧＰＵハードウェア２４１０の生成を可能にできる。
【０２２５】
＜ＧＰＧＰＵ機械学習アクセラレーション＞
【０２２６】
図２５は、一実施形態によるマルチＧＰＵコンピューティングシステム２５００を示す。マルチＧＰＵコンピューティングシステム２５００は、ホストインタフェーススイッチ２５０４を介して複数のＧＰＧＰＵ２５０６Ａ〜Ｄに結合されたプロセッサ２５０２を含み得る。ホストインタフェーススイッチ２５０４は、一実施形態では、プロセッサ２５０２をＰＣＩ  Ｅｘｐｒｅｓｓバスに結合するＰＣＩ  Ｅｘｐｒｅｓｓスイッチ装置である。ＰＣＩ  Ｅｘｐｒｅｓｓバスを介して、プロセッサ２５０２は、ＧＰＧＰＵ２５０６Ａ〜Ｄと通信できる。複数のＧＰＧＰＵ２５０６Ａ〜Ｄの各々は、上述のＧＰＧＰＵのインスタンスであり得る。ＧＰＧＰＵ２５０６Ａ〜Ｄは、高速ポイントツーポイントＧＰＵ−ＧＰＵリンク２５１６のセットを介して、相互接続できる。高速ＧＰＵ−ＧＰＵリンクは、専用ＧＰＵリンクを介してＧＰＧＰＵ２５０６Ａ〜Ｄの各々に接続できる。Ｐ２Ｐ  ＧＰＵリンク２５１６は、ＧＰＧＰＵ２５０６Ａ〜Ｄの各々の間の直接通信を可能にし、プロセッサ２５０２の接続されるホストインタフェースバスを介する通信を必要としない。Ｐ２Ｐ  ＧＰＵリンクへ向けられたＧＰＵ−ＧＰＵトラフィックにより、ホストインタフェースバスは、システムメモリアクセスのために、又はマルチＧＰＵコンピューティングシステム２５００の他のインスタンスと例えば１つ以上のネットワーク装置を介して通信するために、利用可能なままである。図示の実施形態では、ＧＰＧＰＵ２５０６Ａ〜Ｄはプロセッサ２５０２にホストインタフェーススイッチ２５０４を介して接続するが、一実施形態では、プロセッサ２５０２は、Ｐ２Ｐ  ＧＰＵリンク２５１６の直接サポートを含み、ＧＰＧＰＵ２５０６Ａ〜Ｄに直接接続できる。
【０２２７】
＜機械学習ニューラルネットワーク実装＞
【０２２８】
本願明細書に記載の実施形態により提供されるコンピューティングアーキテクチャは、機械学習のためにニューラルネットワークをトレーニングし及び展開するために特に適する種類の並列処理を実行するよう構成できる。ニューラルネットワークは、グラフ関係を有する関数のネットワークとして一般化できる。従来良く知られているように、機械学習で使用されるニューラルネットワーク実装の様々な種類がある。ニューラルネットワークの１つの例示的な種類は、前述のようなフィードフォワードネットワークである。
【０２２９】
ニューラルネットワークの第２の例示的な種類は、畳み込みニューラルネットワーク（ＣＮＮ）である。ＣＮＮは、画像データのような既知のグリッドのようなトポロジを有するデータを処理するための、特別なフィードフォワードニューラルネットワークである。したがって、ＣＮＮは、コンピュータビジョン及び画像認識アプリケーションに一般に用いられるが、会話及び言語処理のような他の種類のパターン認識にも使用され得る。ＣＮＮ入力層におけるノードは、「フィルタ」（網膜内に見られる個々のフィールドにより刺激される特徴検出器）のセットに編成され、フィルタの各セットの出力は、ネットワークの連続する層にあるノードに伝搬される。ＣＮＮの計算は、畳み込み算術演算を各フィルタに適用して、該フィルタの出力を生成することを含む。畳み込みは、２つの元の関数のうちの１つの変形バージョン得ある第３関数を生成するために、２つの関数により実行される特別な種類の算術演算である。畳み込みネットワークの用語では、畳み込みへの第１関数は入力として呼ばれ、一方で第２関数は畳み込みカーネルと呼ばれ得る。出力は、特徴マップと呼ばれてよい。例えば、畳み込み層への入力は、入力画像の種々の色成分を定めるデータの多次元アレイであり得る。畳み込みカーネルは、パラメータの複数次元アレイであり得る。ここで、パラメータは、ニューラルネットワークのトレーニング処理により適応される。
【０２３０】
再帰ニューラルネットワーク（Recurrent  neural  network：RNN）は、層間のフィードバック接続を含む、フィードフォワードニューラルネットワークのファミリである。ＲＮＮは、ニューラルネットワークの異なる部分に渡りパラメータデータを共有することにより、順編成データセットのモデル化を可能にする。ＲＮＮのアーキテクチャはサイクルを含む。ＲＮＮからの出力データの少なくとも一部が、シーケンス内の後続入力を処理するためのフィードバックとして使用されるとき、サイクルは、変数の現在の値が該変数自体の値に将来に及ぼす影響を表す。この特徴は、言語データが構成され得る変数の特性により、ＲＮＮを言語処理に特に有用にする。
【０２３１】
後述する図は、例示的なフィードフォワードＣＮＮ、及びＲＮＮネットワークを記載し、及びこれらの種類のネットワークの各々をそれぞれトレーニングし及び展開する一般的処理を記載する。これらの記載は、本願明細書に記載の任意の特定の実施形態に関して、例であり且つ非限定的であること、及び説明される概念は、一般に深層ニューラルネットワーク及び機械学習技術に一般的に適用できることが理解される。
【０２３２】
上述の例示的なニューラルネットワークは、深層学習を実行するために使用できる。深層学習は、深層ニューラルネットワークを用いる機械学習である。深層学習で使用される深層ニューラルネットワークは、単一の隠れ層のみを含む浅いニューラルネットワークと反対に、複数の隠れ層で構成される人工ニューラルネットワークである。より深いニューラルネットワークは、通常、トレーニングのために、より計算集約的である。しかしながら、ネットワークの追加隠れ層は、複数ステップのパターン認識を可能にし、結果として浅い機械学習技術と比べて出力誤りを減少する。
【０２３３】
深層学習で使用される深層ニューラルネットワークは、標準的に、特徴認識を実行するフロントエンドネットワークを含む。特徴認識は、モデルに提供された特徴表現に基づき演算（例えば、オブジェクト分類、会話認識、等）を実行可能な数学モデルを表すバックエンドネットワークに結合される。深層学習は、手作りの特徴設計がモデルに対して実行されることを必要とせずに、機械学習が実行されることを可能にする。代わりに、深層ニューラルネットワークは、統計的構造又は入力データ内の相互関係に基づき、特徴を学習できる。学習した特徴は、検出した特徴を出力にマッピングできる数学モデルに提供され得る。ネットワークにより使用される数学モデルは、一般に、実行されるべき特定タスクに専用であり、異なるモデルが異なるタスクを実行するために使用される。
【０２３４】
ニューラルネットワークが構造化されると、学習モデルは、特定タスクを実行するようネットワークをトレーニングするためにネットワークに適用できる。学習モデルは、ネットワークの出力誤りを低減するために、モデル内の重みを調整する方法を記述する。誤りの後方伝搬は、ニューラルネットワークをトレーニングするために使用される共通の方法である。入力ベクトルは、処理のためにネットワークに提示される。ネットワークの出力は、不可逆関数を用いて所望の出力と比較され、誤り値は、出力層にあるニューロンの各々について計算される。誤り値は、次に、各ニューロンが、元の出力への自身の貢献を大まかに表す関連する誤り値を有するまで、後方伝搬される。ネットワークは、次に、これらの誤りから、確率的勾配降下アルゴリズムのようなアルゴリズムを用いて学習でき、ニューラルネットワークの重みを更新する。
【０２３５】
図２６〜２７は、例示的な畳み込みニューラルネットワークを示す。図２６は、ＣＮＮ内の種々の層を示す。図２６に示すように、画像処理をモデル化するために使用される例示的なＣＮＮは、入力画像の赤、緑、及び青（ＲＧＢ）成分を記述する入力２６０２を受信し得る。入力２６０２は、複数の畳み込み層（例えば、畳み込み層２６０４、畳み込み層２６０６）により処理され得る。複数の畳み込み層からの出力は、任意で、全結合層２６０８のセットにより処理されてよい。フィードフォワードネットワークについて前述したように、全結合層の中のニューロンは、前の層の全ての活性化関数への全結合を有する。全結合層２６０８からの出力は、ネットワークから生じる出力を生成するために使用できる。全結合層２６０８内の活性化関数は、畳み込みの代わりに行列乗算を用いて計算できる。全てのＣＮＮ実装が全結合層を活用するのではない。例えば、幾つかの実装では、畳み込み層２６０６は、ＣＮＮのために出力を生成できる。
【０２３６】
畳み込み層は、疎結合される。これは、全結合層２６０８に見られる伝統的なニューラルネットワーク構成と異なる。伝統的なニューラルネットワーク層は全結合され、その結果、全ての出力ユニットは全ての入力ユニットと相互作用する。しかしながら、図示のようにフィールドの畳み込みの出力が（フィールドのノードの各々のそれぞれの状態値の代わりに）後続の層のノードに入力されるので、畳み込み層は疎結合される。畳み込み層に関連付けられたカーネルは、畳み込み演算を実行し、その出力は次の層へ送信される。畳み込み層内で実行される次元縮退は、ＣＮＮに大規模画像を処理させるためにスケーリングを可能にする一態様である。
【０２３７】
図２７は、ＣＮＮの畳み込み層の中の例示的な計算段階を示す。ＣＮＮの畳み込み層２７１２への入力は、畳み込み層２７１４の３つの段階で処理できる。３つの段階は、畳み込み段階２７１６、検出段階２７１８、及びプーリング段階２７２０を含み得る。畳み込み層２７１４は、次に、データを連続する畳み込み層へ出力し得る。ネットワークの最終畳み込み層は、出力特徴マップデータを生成し、又は全結合層への入力を提供でき、例えばＣＮＮへの入力の分類値を生成する。
【０２３８】
畳み込み段階２７１６では、線形活性化関数のセットを生成するために、幾つかの畳み込みを並列に実行する。畳み込み段階２７１６は、線形変換及び平行移動として指定できる任意の変換であるアフィン変換を含み得る。アフィン変換は、回転、平行移動、スケーリング、及びこれらの変換の組み合わせを含む。畳み込み段階は、ニューロンに関連付けられたローカル領域として決定され得る、入力の中の特定領域に接続される関数の出力（例えば、ニューロン）を計算する。ニューロンは、ニューロンの重みと、ニューロンが接続されるローカル入力内の領域と、の間のドット積を計算する。畳み込み段階２７１６からの出力は、畳み込み層２７１４の連続する段階により処理される線形活性化関数のセットを定める。
【０２３９】
線形活性化関数は、検出段階２７１８により処理され得る。検出段階２７１８で、各線形活性化関数は、非線形活性化関数により処理される。非線形活性化関数は、畳み込み層のそれぞれのフィールドに影響を与えずに、ネットワーク全体の非線形特性を増大する。幾つかの種類の非線形活性化関数が使用されてよい。ある特定の種類は、ＲｅＬＵ（rectified  linear  unit）である。ＲｅＬＵは、ｆ（ｘ）＝ｍａｘ（０，ｘ）と定義される活性化関数を使用し、その結果、活性化関数はゼロに閾値がある。
【０２４０】
プーリング段階２７２０は、畳み込み層２７０６の出力を、近くの出力の要約統計量で置き換えるプーリング関数を用いる。プーリング関数は、ニューラルネットワークに並進不変を導入するために使用できる。その結果、入力に対する小さな平行移動はプールされた出力を変化させない。ローカル並進に対する不変は、入力データ内の特徴の存在が特徴の正確な位置よりも重要であるシナリオで有用であり得る。プーリング関数の様々な種類は、プーリング段階２７２０の間に使用でき、最大プーリング、平均プーリング、及びｌ２正規プーリングを含む。さらに、幾つかのＣＮＮ実装は、プーリング段階を含まない。代わりに、このような実装は、前の畳み込み段階と比べて、置換及び追加畳み込み段階が増大したストライドを有する。
【０２４１】
畳み込み層２７１４からの出力は、次に、次の層２７２２により処理され得る。次の層２７２２は、追加畳み込み層、又は全結合層２７０８のうちの１つであり得る。例えば、図２７の第１畳み込み層２７０４は、第２畳み込み層２７０６へ出力でき、一方で、第２畳み込み層は全結合層２８０８の第１層へ出力できる。
【０２４２】
図２８は、例示的な再帰ニューラルネットワーク２８００を示す。再帰ニューラルネットワーク（ＲＮＮ）では、ネットワークの前の状態は、ネットワークの現在状態の出力に影響する。ＲＮＮは、様々な関数を用いて様々な方法で構築できる。ＲＮＮの使用は、通常、前の入力シーケンスに基づき将来を予測するために数学モデルを使用して回転する。例えば、ＲＮＮは、前のワードシーケンスが与えられると、来るワードを予測するために、統計的言語モデル化を実行するために使用されてよい。図示のＲＮＮ２８００は、入力ベクトルを受信する入力層２８０２と、再帰機能を実施する隠れ層２８０４と、前の状態の「記憶」を可能にするフィードバックメカニズム２８０５と、結果を出力する出力層２８０６と、を有するとして記載できる。ＲＮＮ２８００は、時間ステップに基づき動作する。所与の時間ステップにおけるＲＮＮの状態は、フィードバックメカニズム２８０５を介して、前の時間ステップに基づき影響される。所与の時間ステップでは、隠れ層２８０４の状態は、前の状態及び現在時間ステップにおける入力により定められる。第１時間ステップにおける初期入力（ｘ１）は、隠れ層２８０４により処理できる。第２入力（ｘ２）は、初期入力（ｘ）の処理の間に決定された状態情報を用いて、隠れ層２８０４により処理できる。所与の状態は、ｓ＿ｔ＝ｆ（Ｕｘ＿ｔ＋Ｗｘ＿（ｔ−１））のように計算でき、ここで、Ｕ及びＷはパラメータ行列である。関数ｆは、一般的に、双曲正接関数（Tanh）又は整流関数ｆ（ｘ）＝ｍａｘ（０，ｘ）の変形のように、非線形である。しかしながら、隠れ層２８０４で使用される特定数学関数は、ＲＮＮ２８００の特定の実装詳細事項に依存して変化し得る。
【０２４３】
記載の基本ＣＮＮ及びＲＮＮネットワークに加えて、これらのネットワークに対する変形が可能であってよい。ある例示的なＲＮＮの変形は、ＬＳＴＭ（long  short  term  memory）ＲＮＮである。ＬＳＴＭ  ＲＮＮは、長い言語シーケンスを処理するために必要であってよい長期依存性を学習することができる。ＣＮＮに対する変形は、ＣＮＮと同様の構造を有し且つディープビリーフネットワークと同様の方法でトレーニングされる畳み込みディープビリーフネットワークである。ディープビリーフネットワーク（deep  belief  network：DBN）は、確率（ランダム）変数の複数の層で構成される生成（generative）ニューラルネットワークである。ＤＢＮは、貪欲な（greedy）教師なし学習を用いて層毎にトレーニングできる。ＤＢＮの学習した重みは、次に、ニューラルネットワークのための最適初期重みセットを決定することにより、事前トレーニングニューラルネットワークを提供するために使用できる。
【０２４４】
図２９は、深層ニューラルネットワークのトレーニング及び展開を示す。所与のネットワークがタスクのために構造化されると、ニューラルネットワークは、トレーニングデータセット２９０２を用いてトレーニングされる。種々のトレーニングフレームワーク２９０４が、トレーニング処理のハードウェアアクセラレーションを可能にするために開発されている。例えば、上述の機械学習フレームワークがトレーニングネットワークとして構成されてよい。トレーニングフレームワーク２９０４は、未トレーニングニューラルネットワーク２９０６に接続し、未トレーニングニューラルネットワークを本願明細書に記載の並列処理リソースを用いてトレーニングさせ、トレーニングされたニューラルネットワーク２９０８を生成できる。
【０２４５】
トレーニング処理を開始するために、初期重みが、ランダムに又はディープビリーフネットワークを用いて事前トレーニングすることにより、選択されてよい。トレーニングサイクルは、次に、教師あり又は教師なし方法で実行される。
【０２４６】
教師あり学習は、トレーニングが媒介される演算として実行される学習方法である。例えば、トレーニングデータセット２９０２が、入力に対する所望の出力とペアにされた該入力を含むとき、又はトレーニングデータセットが、既知の出力を有する入力を含み、ニューラルネットワークの出力が手動で格付けされる場合である。ネットワークは、入力を処理し、結果として生じた出力を期待される又は所望の出力のセットに対して比較する。次に、誤りはシステムを通じて後方伝搬される。トレーニングフレームワーク２９０４は、未トレーニングニューラルネットワーク２９０６を制御する重みを調整するよう調整できる。トレーニングフレームワーク２９０４は、未トレーニングニューラルネットワーク２９０６がどれ位良好に、正解を生成するのに適するモデルに向かって収束しているかを、既知の入力データに基づき監視するツールを提供できる。ネットワークの重みがニューラルネットワークにより生成される出力を精緻化するよう調整され得ので、トレーニング処理は繰り返し生じる。トレーニング処理は、ニューラルネットワークがトレーニングされたニューラルネットワーク２９０８に関連する統計的に所望の精度に達するまで、継続し得る。トレーニングされたニューラルネットワーク２９０８は、次に、任意の数の機械学習演算を実施するために展開できる。
【０２４７】
教師なし学習は、ネットワークがラベル無しデータを用いて自身をトレーニングしようとする学習方法である。したがって、教師なし学習では、トレーニングデータセット２９０２は、任意の関連する出力データを有しない入力データを含む。未トレーニングニューラルネットワーク２９０６は、ラベル無し入力の中のグループ化を学習でき、個々の入力がデータセット全体にどのように関連するかを決定できる。教師なしトレーニングは、データの次元縮退において有用な演算を実行できる一種のトレーニングされたニューラルネットワーク２９０７である、自己編成マップを生成するために使用できる。教師なしトレーニングは、入力データセットの中でデータの通常パターンから逸脱するデータ点の識別を可能にする異常検出を実行するためにも使用できる。
【０２４８】
教師あり及び教師なしトレーニングに対する変形も利用されてよい。半教師あり学習は、トレーニングデータセット２９０２が同じ分布のラベル有り及びラベル無しデータの混合を含む技術である。逐次学習は、入力データがモデルを更にトレーニングするために連続使用される、教師あり学習の変形である。逐次学習は、トレーニングされたニューラルネットワーク２９０８に、初期トレーニング中にネットワーク内に刻み込まれた知識を忘れずに、新しいデータ２９１２を採用させる。
【０２４９】
教師あり又は教師なしに拘わらず、特に深層ニューラルネットワークのトレーニング処理は、単一の計算ノードにとって非常に計算集約的であり得る。単一の計算ノードを使用する代わりに、計算ノードの分散型ネットワークがトレーニング処理を加速するために使用され得る。
【０２５０】
図３０Ａは、分散型学習を示すブロック図である。分散型学習は、上述のノードのような複数の分散コンピューティングノードを使用して、ニューラルネットワークの教師あり又は教師なしトレーニングを実行するトレーニングモデルである。分散計算ノードは、それぞれ、１つ以上のホストプロセッサと、高度に並列化された汎用グラフィック処理ユニットのような１つ以上の汎用処理ノードと、を含み得る。図示のように、分散型学習は、モデル並列化３００２、データ並列化３００４、及びモデル及びデータ並列化の組み合わせを実行され得る。
【０２５１】
モデル並列化３００２では、分散型システム内の異なる計算ノードが、単一ネットワークの異なる部分についてトレーニング計算を実行し得る。例えば、ニューラルネットワークの各層は、分散型システムの異なる処理ノードによりトレーニングされ得る。モデル並列化の利点は、特に大規模モデルにスケーリングする能力を含む。ニューラルネットワークの異なる層に関連付けられた計算を分割することは、全ての層の重みが単一の計算ノードのメモリに適合しない非常に大規模なニューラルネットワークのトレーニングを可能にする。幾つかの例では、モデル並列化は、大規模ニューラルネットワークの教師なしトレーニングを実行する際に特に有用であり得る。
【０２５２】
データ並列化３００４では、分散型ネットワークの異なるノードが、モデルの完全なインスタンスを有し、各ノードはデータの異なる部分を受信する。異なるノードからの結果は、次に結合される。データ並列化への異なるアプローチが可能であるが、データ並列化トレーニングアプローチは、全て、結果を結合し及び各ノード間のモデルパラメータを同期化させる技術を必要とする。データを結合するための例示的なアプローチは、パラメータ平均及び更新に基づくデータ並列化を含む。パラメータ平均は、トレーニングデータのサブセットで各ノードをトレーニングし、グローバルパラメータ（例えば、重み、バイアス）を各ノードからのパラメータの平均に設定する。パラメータ平均は、パラメータデータを維持する中央パラメータサーバを使用する。更新に基づくデータ並列化は、パラメータ平均と同様であるが、ノードからパラメータサーバへパラメータを転送する代わりに、モデルに対する更新が転送される。さらに、更新に基づくデータ並列化は、更新が圧縮されノード間で転送される分散型方法で実行できる。
【０２５３】
結合モデル及びデータ並列化３００６が、例えば各計算ノードが複数のＧＰＵを含む分散型システムで実施され得る。各ノードは、モデルの完全なインスタンスを有し得る。ここで、各ノード内の別個のＧＰＵは、モデルの異なる部分をトレーニングするために使用される。
【０２５４】
分散型トレーニングは、単一の機械上のトレーニングと比べて、オーバヘッドが増大する。しかしながら、本願明細書に記載の並列プロセッサ及びＧＰＧＰＵは、それぞれ、高帯域幅ＧＰＵ間データ転送及び加速化リモートデータ同期を可能にする技術を含む、分散型トレーニングのオーバヘッドを削減するための種々の技術を実施できる。
【０２５５】
＜例示的な機械学習アプリケーション＞
機械学習は、限定ではないが、コンピュータビジョン、自律走行及びナビゲーション、会話認識、及び言語処理を含む様々な技術的問題を解決するために適用され得る。コンピュータビジョンは、伝統的に、機械学習アプリケーションの最も活発な研究分野の１つである。コンピュータビジョンのアプリケーションは、顔を認識するような人間の視覚能力を再生することから、視覚能力の新しいカテゴリを生成することにまで及ぶ。例えば、コンピュータビジョンアプリケーションは、ビデオ内に見えるオブジェクトに含まれる振動から音波を認識するよう構成できる。並列プロセッサにより加速化された機械学習は、コンピュータビジョンアプリケーションに、従前の実現可能なものより有意に大規模なトレーニングデータセットを用いてトレーニングさせ、及び推定システムに、低電力並列プロセッサを用いて展開させる。
【０２５６】
並列プロセッサにより加速化された機械学習は、車線及び道路標識の認識、障害物回避、ナビゲーション、及び走行制御を含む自律走行アプリケーションを有する。加速化された機械学習技術は、特定のトレーニング入力に対する適切な応答を定めるデータセットに基づき、走行モデルをトレーニングするために使用できる。本願明細書に記載の並列プロセッサは、自律走行ソリューションのために使用される益々複雑なニューラルネットワークの迅速なトレーニングを可能にし、自律車両への統合に適するモバイルプラットフォームにおける低電力推定プロセッサの展開を可能にし得る。
【０２５７】
並列プロセッサにより加速化された深層ニューラルネットワークは自動会話認識（automatic  speech  recognition：ASR）への機械学習アプローチを可能にしている。ＡＳＲは、入力音響シーケンスを与えられると、最も有望な言語シーケンスを計算する関数の生成を含む。深層ニューラルネットワークを用いる加速化された機械学習は、ＡＳＲに従前使用されていた隠れマルコフモデル（hidden  Markov  model：HMM）及びガウス混合モデル（Gaussian  mixture  model：GMM）の代替を可能にした。
【０２５８】
並列プロセッサにより加速化された機械学習は、自然言語処理を加速化するためにも使用できる。自動学習手順は、統計的推定アルゴリズムを利用して、誤り又は馴染みのない入力に対してロバストなモデルを生成できる。例示的な自然言語処理アプリケーションは、人間の言語の間の自動機械翻訳を含む。
【０２５９】
機械学習のために使用される並列処理プラットフォームは、トレーニングプラットフォーム及び展開プラットフォームに分けられる。トレーニングプラットフォームは、通常、高度に並列化され、マルチＧＰＵの単一ノードのトレーニング及びマルチノードのマルチＧＰＵのトレーニングを加速化するための最適化を含む。トレーニングに適する例示的な並列プロセッサは、本願明細書に記載の高度に並列化された汎用グラフィック処理ユニット及び／又はマルチＧＰＵ計算システムを含む。これに対し、展開される機械学習プラットフォームは、通常、カメラ、自律ロボット、及び自律車両のような製品内での使用に適する低電力並列プロセッサを含む。
【０２６０】
図３０Ｂは、トレーニングされたモデルを用いて推定を実行するのに適するシステムオンチップ（ＳＯＣ）上の例示的な推定システムを示す。ＳＯＣ３１００は、メディアプロセッサ３１０２、ビジョンプロセッサ３１０４、ＧＰＧＰＵ３１０６、及びマルチコアプロセッサ３１０８を含む処理コンポーネントを統合する。ＳＯＣ３１００は、さらに、処理コンポーネントの各々によりアクセス可能な共有オンチップデータプールを可能にし得るオンチップメモリ３１０５を含み得る。処理コンポーネントは、低電力動作のために最適化でき、自律車両及び自律ロボットを含む様々な機械学習プラットフォームへの展開を可能にする。例えば、ＳＯＣ３１００の一実装は、自律車両の主要制御システムの一部として使用され得る。ＳＯＣ３１００が自律車両内で使用されるために構成される場合、ＳＯＣは、展開する管轄区域の関連機能の安全標準に従うよう設計され及び構成される。
【０２６１】
動作中、メディアプロセッサ３１０２及びビジョンプロセッサ３１０４は、コンピュータビジョン演算を加速化するために協力して動作し得る。メディアプロセッサ３１０２は、複数の高解像度（例えば、４Ｋ、８Ｋ）ビデオストリームの低遅延復号を可能にし得る。復号されたビデオストリームは、オンチップメモリ３１０５内のバッファに書き込まれ得る。ビジョンプロセッサ３１０４は、次に、復号されたビデオをパースし、トレーニングされた画像認識モデルを用いてフレームを処理するのに準備するために、復号化されたビデオのフレームに対して予備処理演算を実行し得る。例えば、ビジョンプロセッサ３１０４は、高解像度ビデオデータに対して画像認識を実行するために使用されるＣＮＮの畳み込み演算を加速化でき、一方で、バックエンドモデル計算は、ＧＰＧＰＵ３１０６により実行される。
【０２６２】
マルチコアプロセッサ３１０８は、メディアプロセッサ３１０２及びビジョンプロセッサ３１０４により実行されるデータ転送及び共有メモリ演算の順序付け及び同期化を支援するために、制御ロジックを含み得る。マルチコアプロセッサ３１０８は、ＧＰＧＰＵ３１０６の推定計算能力を活用し得るソフトウェアアプリケーションを実行するために、アプリケーションプロセッサとしても機能し得る。例えば、ナビゲーション及び走行ロジックの少なくとも一部は、マルチコアプロセッサ３１０８上で実行するソフトウェア内に実装できる。このようなソフトウェアは、計算負荷をＧＰＧＰＵ３１０６に直接発行できる。又は、計算負荷は、マルチコアプロセッサ３１０８に発行され得る。これは、これらの演算の少なくとも一部をＧＰＧＰＵ３１０６にオフロードできる。
【０２６３】
ＧＰＧＰＵ３１０６は、高度に並列化された汎用グラフィック処理ユニットＤＰＬＡＢ００内の計算クラスタＤＰＬＡＢ０６Ａ〜ＤＰＬＡＢ０６Ｈの低電力構成のような計算クラスタを含み得る。ＧＰＧＰＵ３１０６内の計算クラスタは、トレーニングされたニューラルネットワーク上で推定計算を実行するために特に最適化された命令をサポートできる。例えば、ＧＰＧＰＵ３１０６は、８ビット及び４ビット整数ベクトル演算のような低精度計算を実行するための命令をサポートできる。
【０２６４】
＜＜光線追跡アーキテクチャ＞＞
一実装では、グラフィックプロセッサは、リアルタイム光線追跡を実行するための回路及び／又はプログラムコードを含む。幾つかの実施形態では、光線追跡コアの専用セットが、グラフィックプロセッサに含まれ、光線トラバーサル及び／又は光線交差演算を含む、本願明細書に記載の種々の光線追跡演算を実行する。光線追跡コアに加えて、一実施形態は、プログラマブルシェーディング演算を実行するグラフィック処理コアの複数のセット、及びテンソルデータに対して行列演算を実行するテンソルコアの複数のセットを含む。
【０２６５】
図３１は、マルチコアグループ３１００Ａ〜Ｎに構成されたグラフィック処理リソースの専用セットを含む、１つのこのようなグラフィック処理ユニット（ＧＰＵ）３１０５の例示的な部分を示す。単一のマルチコアグループ３１００Ａのみの詳細が提供されるが、他のマルチコアグループ３１００Ｂ〜Ｎがグラフィック処理リソースの同じ又は同様のセットを備えられてよいことが理解される。
【０２６６】
図示のように、マルチコアグループ３１００Ａは、グラフィックコア３１３０のセット、テンソルコア３１４０のセット、及び光線追跡コア３１５０のセットを含んでよい。スケジューラ／ディスパッチャ３１１０は、種々のコア３１３０、３１４０、３１５０上で実行するためのグラフィックスレッドをスケジューリングし及びディスパッチする。レジスタファイル３１２０のセットは、グラフィックスレッドを実行するときにコア３１３０、３１４０、３１５０により使用されるオペランド値を格納する。これらは、例えば、整数値を格納する整数レジスタ、浮動小数点値を格納する浮動小数点レジスタ、パックされたデータ要素（整数及び／又は浮動小数点データ要素）を格納するベクトルレジスタ、及びテンソル／行列値を格納するタイルレジスタを含んでよい。一実施形態では、タイルレジスタは、ベクトルレジスタの結合されたセットとして実装される。
【０２６７】
１つ以上のレベル１（Ｌ１）キャッシュ及びテクスチャユニット３１６０は、テクスチャデータ、頂点データ、ピクセルデータ、光線データ、境界体積データ、等のようなグラフィックデータを、各マルチコアグループ３１００Ａ内にローカルに格納する。マルチコアグループ３１００Ａ〜Ｎの全部又はサブセットにより共有されるレベル２（Ｌ２）キャッシュ３１８０は、複数の同時グラフィックスレッドのためにグラフィックデータ及び／又は命令を格納する。図示のように、Ｌ２キャッシュ３１８０は、複数のマルチコアグループ３１００Ａ〜Ｎに渡り共有されてよい。１つ以上のメモリ制御部３１７０は、ＧＰＵ３１０５を、システムメモリ（例えばＤＲＡＭ）及び／又は専用グラフィックメモリ（例えばＧＤＤＲ６メモリ）であってよいメモリ３１９８に結合する。
【０２６８】
入力／出力（Ｉ／Ｏ）回路３１９５は、ＧＰＵ３１０５を、デジタル信号プロセッサ（ＤＰＳ）、ネットワーク制御部、又はユーザ入力装置のような１つ以上のＩＯ装置３１９５に結合する。オンチップ相互接続は、Ｉ／Ｏ装置３１９０をＧＰＵ３１０５及びメモリ３１９８に結合するために使用されてよい。ＩＯ回路３１９５の１つ以上のＩＯメモリ管理ユニット（IO  memory  management  units：IOMMU）３１７０は、ＩＯ装置３１９０をシステムメモリ３１９８に直接結合する。一実施形態では、ＩＯＭＭＵ３１７０は、仮想アドレスをシステムメモリ３１９８内の物理アドレスにマッピングするために、ページテーブルの複数のセットを管理する。本実施形態では、ＩＯ装置３１９０、ＣＰＵ３１９９、及びＧＰＵ３１０５が、同じ仮想アドレス空間を共有してよい。
【０２６９】
一実装では、ＩＯＭＭＵ３１７０は、仮想化をサポートする。この場合、ＩＯＭＭＵ３１７０は、ゲスト／グラフィック仮想アドレスをゲスト／グラフィック物理アドレスにマッピングするために第１ページテーブルセットを、及びゲスト／グラフィック物理アドレスを（例えば、システムメモリ３１９８内の）システム／ホスト物理アドレスにマッピングするために第２ページテーブルセットを管理してよい。第１及び第２ページテーブルセットの各々の基本アドレスは、制御レジスタに格納され、コンテキストスイッチにスワップされて出されてよい（例えば、その結果、新しいコンテキストが、関連するページテーブルセットへのアクセスを提供される）。図３１に図示しないが、コア３１３０、３１４０、３１５０及び／又はマルチコアグループ３１００Ａ〜Ｎのうちの各々は、ゲスト仮想−ゲスト物理変換、ゲスト物理−ホスト物理変換、及びゲスト仮想−ホスト物理変換をキャッシュするために、ＴＢＬ（translation  lookaside  buffer）を含んでよい。
【０２７０】
一実施形態では、ＣＰＵ３１９９、ＧＰＵ３１０５、及びＩＯ装置３１９０は、単一の半導体チップ及び／又はチップパッケージに統合される。図示のメモリ３１９８は、同じチップに統合されてよく、又はオフチップインタフェースを介してメモリ制御部３１７０に結合されてよい。一実装では、メモリ３１９８は、同じ仮想アドレス空間を他の物理システムレベルメモリとして共有するＧＤＤＲ６メモリを含む。しかしながら、本発明の基礎にある原理は、この特定の実装に限定されない。
【０２７１】
一実施形態では、テンソルコア３１４０は、深層学習演算を実行するために使用される基本的計算演算である行列演算を実行するために特に設計された複数の実行ユニットを含む。例えば、同時行列乗算演算は、ニューラルネットワークトレーニング及び推定のために使用されてよい。テンソルコア３１４０は、単精度浮動小数点（例えば３２ビット）、半精度浮動小数点（例えば１６ビット）、整数ワード（１６ビット）、バイト（８ビット）、及び半バイト（４ビット）を含む種々のオペランド精度を用いる行列処理を実行してよい。一実施形態では、ニューラルネットワーク実装は、各々のレンダリンクされたシーンの特徴を抽出し、場合によっては、複数のフレームからの詳細事項を結合して、高品質最終画像を構成する。
【０２７２】
深層学習実装では、並列行列乗算作業は、テンソルコア３１４０上での実行のためにスケジューリングされてよい。ニューラルネットワークのトレーニングは、特に、有意な数の行列ドット積演算を必要とする。Ｎ×Ｎ×Ｎ行列乗算の内積の式を処理するために、テンソルコア３１４０は、少なくともＮ個のドット積処理要素を含んでよい。行列乗算が開始する前に、１つの行列全体が、タイルレジスタにロードされ、第２行列の少なくとも１つの列がＮ個のサイクルの各サイクルでロードされる。各サイクルで、処理されるＮ個のドット積がある。
【０２７３】
行列要素は、特定の実装に依存して、１６ビットワード、８ビットバイト（例えばＩＮＴ８）及び４ビット半バイト（例えばＩＮＴ４）を含む異なる精度で格納されてよい。異なる精度のノードが指定され、テンソルコア３１４０にとって、最も効率的な精度が（例えば、バイト及び半バイトへの量子化を許容可能な推定作業負荷のような）異なる作業負荷に対して使用されることを保証する。
【０２７４】
一実施形態では、光線追跡コア３１５０は、リアルタイム光線追跡及び非リアルタイム光線追跡実装の両方について光線追跡演算を加速化する。特に、光線追跡コア３１５０は、境界体積階層構造（bounding  volume  hierarchy：BVH）を用いて光線トラバースを実行し及び光線とＢＶＨ体積内に含まれるプリミティブとの間の交差を判定する光線トラバース／交差回路を含む。光線追跡コア３１５０は、深さテスト及びカリングを（例えば、Ｚバッファ又は同様の構成を用いて）実行する回路も含んでよい。一実装では、光線追跡コア３１５０は、トラバース及び交差演算を、少なくとも一部がテンソルコア３１４０上で実行されてよい本願明細書に記載の画像ノイズ除去技術と協力して実行する。例えば、一実施形態では、テンソルコア３１４０は、光線追跡コア３１５０により生成されたフレームのノイズ除去を実行するために深層学習ニューラルネットワークを実装する。しかしながら、ＣＰＵ３１９９、グラフィックコア３１３０、及び／又は光線追跡コア３１５０も、ノイズ除去及び／又は深層学習アルゴリズムの全部又は一部を実装してよい。
【０２７５】
さらに、上述のように、ノイズ除去の分散型アプローチが利用されてよく、ここで、ＧＰＵ３１０５は、ネットワーク又は高速相互接続を介して他のコンピューティング装置に結合されたコンピューティング装置内にある。本実施形態では、相互接続されたコンピューティング装置は、速度を向上するためにニューラルネットワーク学習／トレーニングデータを共有する。これにより、システム全体が、異なる種類の画像フレーム及び／又は異なるグラフィックアプリケーションのノイズ除去を実行するために学習する。
【０２７６】
一実施形態では、光線追跡コア３１５０は、全てのＢＶＨトラバース及び光線プリミティブ交差を処理し、グラフィックコア３１３０が光線毎に数千もの命令による負荷を掛けられることを防ぐ。一実施形態では、各光線追跡コア３１５０は、（例えば、トラバース演算のために）境界ボックステストを実行する第１専用回路セット、及び（例えば、トラバースされた光線を交差する）光線三角交差テストを実行するための第２専用回路セットを含む。したがって、一実施形態では、マルチコアグループ３１００Ａは、単純に光線プローブを開始し、光線追跡コア３１５０は、光線トラバース及び交差を独立して実行し、ヒットしたデータ（例えば、ヒット、ヒットしない、複数ヒット、等）をスレッドコンテキストに返す。光線追跡コア３１５０がトラバース及び交差演算を実行している間、他のコア３１３０、３１４０は、他のグラフィック又は計算作業を実行するために自由にされる。
【０２７７】
一実施形態では、各光線追跡コア３１５０は、ＢＶＨテスト演算を実行するトラバースユニット、及び光線プリミティブ交差テストを実行する交差ユニットを含む。交差ユニットは、適切なスレッドに提供する「ヒット」、「ヒット無し」、又は「複数ヒット」応答を生成する。トラバース及び交差演算の間に、他のコア（例えば、グラフィックコア３１３０、及びテンソルコア３１４０）の実行リソースは、他の形式のグラフィック作業を実行するために自由にされる。
【０２７８】
後述する１つの特定の実施形態では、ハイブリッドラスタライズ／光線追跡アプローチが使用される。ここでは、作業がグラフィックコア３１３０及び光線追跡コア３１５０の間で分散される。
【０２７９】
一実施形態では、光線追跡コア３１５０（及び／又は他のコア３１３０、３１４０）は、DispatchRaysコマンド並びにray-generation、closest-hit、any-hit、及びオブジェクト毎にシェーダ及びテクスチャのユニークなセットの割り当てを可能にするMissシェーダを含むMicrosoftのＤＲＸ（DirectX  Ray  Tracing）のような光線追跡交差セットのためのハードウェアサポートを含む。光線追跡コア３１５０、グラフィックコア３１３０、及びテンソルコア３１４０によりサポートされ得る別の光線追跡プラットフォームは、Vulkan１．１．８５である。しかしながら、本発明の基礎にある原理は、任意の特定の光線追跡ＩＳＡに限定されないことに留意する。
【０２８０】
一般に、種々のコア３１５０、３１４０、３１３０は、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）：この命令は、（例えば、新しいＢＶＨ又は他の加速化データ構造を構築するとき）所与のプリミティブ又はプリミティブグループの周囲の境界ボックスを構築する。
【０２８６】
・Miss：光線が、シーン内の全ての幾何学、又はシーンの指定領域に当たらないことを示す。
【０２８７】
・Visit：光線がトラバースする子体積を示す。
【０２８８】
・例外（Exceptions）：様々な種類の例外処理（例えば、様々なエラー条件のために呼び出される）を含む。
【０２８９】
＜＜階層構造ビーム追跡＞＞
体積階層構造を結合することは、一般的に、グラフィックプリミティブ及び他のグラフィックオブジェクトに対して演算が実行される効率を向上するために使用される。ＢＶＨは、幾何学オブジェクトのセットに基づき構築された階層構造の木構造である。木構造の一番上には、所与のシーン内の幾何学オブジェクトの全部を取り囲むルートノードがある。個々の幾何学オブジェクトは、木のリーフノードを形成する境界体積内に包み込まれる。これらのノードは、次に、小さなセットにグループ化され、より大きな境界体積内に取り囲まれる。これらは、また、再帰的方法で、グループ化され、他のより大きな境界体積内に包み込まれ、最終的に、木の一番上にあるルートノードにより表される単一の境界体積を有する木構造をもたらす。境界体積階層構造は、衝突検出、プリミティブカリング、及び光線トラバース／交差演算のような、光線追跡において使用される幾何学オブジェクト毎のセットに対する種々の演算を効率的にサポートするために使用される。
【０２９０】
光線追跡アーキテクチャでは、光線は、光線プリミティブ交差を判定するために、ＢＶＨを通じてトラバースされる。例えば、光線がＢＶＨのルートノードを通過しない場合、光線は、ＢＶＨにより囲まれるプリミティブのいずれも交差せず、このプリミティブセットに関して光線の更なる処理は必要ない。光線がＢＶＨの第１子ノードを通過するが、第２子ノードを通過しない場合、光線は、第２子ノードにより囲まれる任意のプリミティブに対してテストされる必要がない。この方法では、ＢＶＨは、光線プリミティブ交差についてテストするために効率的メカニズムを提供する。
【０２９１】
本発明の一実施形態では、連続光線のグループは、「ビーム」と呼ばれ、個々の光線ではなく、ＢＶＨに対してテストされる。図３２は、４本の異なる光線により概略を示される例示的なビーム３２０１を示す。４本の光線により定められるパッチ３２００を交差する任意の光線は、同じビーム内にあると考えられる。図３２内のビーム３２０１は方形構成の光線により定められるが、ビームは、種々の他の方法で定められてよいが、依然として本発明の基礎にある原理に従う（例えば、円、楕円、等）。
【０２９２】
図３３は、ＧＰＵ３３２０の光線追跡エンジン３３１０が本願明細書に記載のビーム追跡技術を実装する例示的な実施形態を示す。特に、光線生成回路３３０４は、トラバース及び交差演算の実行されるべき複数の光線を生成する。しかしながら、個々の光線に対するトラバース、交差演算を実行するのではなく、図示の実施形態は、ビーム階層構造構成回路３３０５により生成された階層構造ビーム３３０７を用いて、トラバース及び交差を実行する。一実施形態では、ビーム階層構造は、境界体積階層構造（bounding  volume  hierarchy：BVH）と類似している。例えば、図３４は、複数の異なる成分に分けられてよい１次ビーム３４００の一例を提供する。特に、１次ビーム３４００は象限３４０１〜３４０４に分割されてよく、各象限は、それ自体が象限３４０４内のサブ象限Ａ〜Ｄのようなサブ象限に分割されてよい。１次ビームは、種々の方法で細分化されてよい例えば、一実施形態では、１次ビームは、（４分の１ではなく）半分に分割されてよく、各半分が２分の１に分割されてよい、等である。どのように細分化が行われるかに拘わらず、一実施形態では、ＢＶＨと同様の方法で階層構造が生成される。例えば、１次ビーム３４００を表すルートノード、それぞれ象限３４０１〜３４０４を表す第１レベルの子ノード、それぞれサブ象限Ａ〜Ｄの第２レベルの子ノード、等である。
【０２９３】
一実施形態では、ビーム階層構造３３０７が構成されると、トラバース／交差回路３３０６は、ビーム階層構造３３０７及びＢＶＨ３３０８を用いてトラバース／交差演算を実行する。特に、これは、ＢＶＨに対してビームをテストし、ＢＶＨのいずれの部分も交差しないビームの部分をカリングしてよい。図３４に示すデータを用いて、例えば、サブビーム３４０２及び３４０３に関連付けられたサブビームがＢＶＨ又はＢＶＨの特定ブランチと交差しない場合、それらは該ＢＶＨ又はブランチに関してカリングされてよい。残りの部分３４０１、３４０４は、縦型検索又は他の検索アルゴリズムを実行することにより、ＢＶＨに対してテストされてよい。
【０２９４】
本発明の一実施形態による方法は、図３５に示される。方法は、上述のグラフィック処理アーキテクチャのコンテキスト内で実施されてよいが、任意の特定のシステムアーキテクチャに限定されない。
【０２９５】
３５００で、１次ビームは、複数の光線を含み構成される。３５０１で、ビームは細分化され、階層データ構造が生成されてビーム階層構造を生成する。一実施形態では、動作３５００〜３５０１は、複数の光線からビーム階層構造を構築する単一の統合された動作として実行される。３５０２で、ビーム階層構造は、ＢＶＨと共に使用され、（ビーム階層構造からの）光線及び／又はＢＶＨからのノード／プリミティブをカリングする。３５０３で、残りの光線及びプリミティブについて、光線プリミティブ交差が判定される。
【０２９６】
＜＜分散型光線追跡システムにおける不可逆及び可逆パケット圧縮＞＞
一実施形態では、光線追跡演算は、ネットワークを介して一緒に結合された複数の計算ノードに渡り分散される。図３６は、例えば、複数の光線追跡ノード３６１０〜３６１３を含む光線追跡クラスタ３６００が、並列して光線追跡演算を実行し、場合によっては、ノードのうちの１つにおいて結果を結合することを示す。図示のアーキテクチャでは、光線追跡ノード３６１０〜３６１３は、ゲートウェイを介してクライアント側光線追跡アプリケーション３６３０に通信可能に結合される。
【０２９７】
分散型アーキテクチャに伴う困難の１つは、光線追跡ノード３６１０〜３６１３の各々の間で送信されなければならない膨大な量のパケット化されたデータである。一実施形態では、可逆圧縮技術及び不可逆圧縮技術の両方が、光線追跡ノード３６１０〜３６１３間で送信されるデータを削減するために使用される。
【０２９８】
可逆圧縮を実施するために、特定種類の演算の結果で満たされたパケットを送信するのではなく、受信ノードに結果を再構成させるデータ又はコマンドが送信される。例えば、確率的にサンプリングされた領域の光及び環境閉塞（ambient  occlusion：AO）演算は、必ずしも方向を必要としない。その結果、一実施形態では、送信ノードは、単にランダムシードを送信する。ランダムシードは、次に、受信ノードによりランダムサンプリングを実行するために使用される。例えば、シーンがノード３６１０〜３６１２に渡り分散される場合、ポイントｐ１〜ｐ３で光１をサンプリングするために、光ＩＤ及び起点のみが、ノード３６１０〜３６１２へ送信される必要がある。ノードの各々は、次に、個々に、光を確率的にサンプリングしてよい。一実施形態では、ランダムシードは、受信ノードにより生成される。同様に、１次光線ヒットポイントについて、環境閉塞（ＡＯ）及びソフトシャドウサンプリングは、連続フレームの基点を待たずに、ノード３６１０〜３６１２において計算できる。さらに、光線セットが同じポイント光源へ向かうことが分かっている場合、光源を識別する命令が、受信ノードへ送信されてよく、受信ノードは該命令を光線セットに適用する。別の例として、単一ポイントから送信されるＮ個の環境閉塞光線が存在する場合、このポイントからＮ個のサンプルを生成するためのコマンドが送信されてよい。
【０２９９】
種々の追加技術が、不可逆圧縮のために適用されてよい。例えば、一実施形態では、ＢＶＨに関連する全ての座標値、プリミティブ、及び光線を量子化するために、量子化係数が利用されてよい。さらに、ＢＶＨノード及びプリミティブのようなデータのために使用される３２ビット浮動小数点値は、８ビット整数値に変換されてよい。ある特定の実装では、光線パケットの境界（bound）が、最大精度で格納されるが、個々の光線ポイントＰ１〜Ｐ３は、境界へのインデックス付けされたオフセットとして送信される。同様に、８ビット整数値をローカル座標として使用する、複数のローカル座標系が生成されてよい。これらのローカル座標系の各々の原点の位置は、最大精度（例えば、３２ビット浮動小数点）の値を用いて符号化されてよく、グローバル及びローカル座標系を効率的に接続する。
【０３００】
以下は、本発明の一実施形態で利用される可逆圧縮の一例である。光線追跡プログラムの内部で使用される光線データフォーマットのｎサンプルは以下の通りである。
【数１】
2020109620.tif 000003
【０３０１】
各々の及び全ての生成されたノードについて生データを送信する代わりに、このデータは、値をグループ化することにより及び可能な場合には適用可能なメタデータを用いて間接的光線を生成することにより、圧縮できる。
【０３０２】
＜光線データのバンドリング及びグループ化＞
一実施形態は、変更（modifier）を有する共通データ又はマスクのためにフラグを使用する。
【数２】
2020109620.tif 000004
例えば：
【数３】
2020109620.tif 000005
【０３０３】
＜起点が全て共有される＞
全ての光線に渡り単一の起点のみが格納される場合を除き、全ての光線データはパケット化される。RayPacket.flagsはRAYPACKET_COMMON_ORIGINに設定される。RayPacketが受信されパケット解除されるとき、起点は単一の起点値から与えられる。
【０３０４】
＜起点が幾つかの光線の間でのみ共有される＞
起点を共有する光線を除き、全ての光線データはパケット化される。ユニークな共有起点の各グループについて、演算（共有起点）を識別し、起点を格納し、及びどの光線が情報を共有するかをマスクする演算がパックされる。このような演算は、物質ＩＤ、プリミティブＩＤ、起点、方向、法線、等のような、ノード間の任意の共有値に対して行うことができる。
【数４】
2020109620.tif 000006
【０３０５】
＜間接的光線の送信＞
多くの場合、光線データは、受信端において、光線データを生成するために使用される最小限のメタ情報により、導出できる。非常に一般的な例は、領域を確率的にサンプリングするために、複数の２次光線を生成することである。送信側が２次光線を生成して送信し、受信側がそれに対して演算する代わりに、送信側は、光線が任意の従属情報により生成される必要があるというコマンドを送信でき、該光線が受信端において生成される。どの受信側に光線を送信すべきかを決定するために、光線が最初に送信側により生成される必要がある場合、光線が生成され、正確に同じ光線を生成するためにランダムシードが送信され得る。
【０３０６】
例えば、領域光源をサンプリングする６４本のシャドウ光線によりヒットポイントをサンプリングするために、６４本光線全部は、同じ計算Ｎ４から領域と交差する。共通の起点及び法線を有するRayPacketが生成される。受信側に結果として生じるピクセルの貢献をシェードするよう望む場合、より多くのデータが送信され得る。しかし、本例では、私達は、光線が別のノードをヒットするか否かのデータを返すだけであることを望む。RayOperationは、シャドウ光線生成演算のために生成され、サンプリングされるべきlightIDの値及び乱数シードを割り当てられる。Ｎ４は、光線パケットを受信すると、共有起点データを全ての光線に入力すること、及び乱数シードにより確率的にサンプリングされたlightIDに基づき方向を設定することにより、完全に満たされた光線データを生成し、元の送信側が生成したものと同じ光線を生成する。結果が返されると、全ての光線についてバイナリ結果が、返されるだけでよい。これは、光線に対するマスクにより処理できる。
【０３０７】
本例で元の６４本の光線を送信することは、１０４バイト＊６４光線＝６６５６バイトを使用する。返る光線がそれらの生の形式で送信された場合、これは倍の１３３１２バイトになる。共通光線起点、法線、及びシード及びＩＤによる光線生成演算のみを送信することによる可逆圧縮の使用では、２９バイトのみが送信され、交差したマスクに対して８バイトが返される。これは、結果として、約３６０：１の、ネットワークを介して送信される必要のあるデータ圧縮レートをもたらす。これは、何らかの方法で識別される必要があるメッセージ自体を処理するためのオーバヘッドを含まないが、それは実装に任されている。光線起点及び方向を１次光線のpixelDから再計算するため、raypacket内の範囲に基づきpixelIDsを再計算するため、及び値の再計算のための多くの他の可能な実装のために、他の演算が行われてよい。同様の演算は、シャドウ、反射、屈折、環境閉塞、交差、体積交差、シェーディング、経路追跡における跳ね返り反射を含む、送信される任意の単一光線又は光線のグループについて使用できる。
【０３０８】
図３７は、光線追跡パケットの圧縮及び伸長を実行する２つの光線追跡ノード３７１０〜３７１１の追加の詳細を示す。特に、一実施形態では、第１光線追跡エンジン３７３０が第２光線追跡エンジン３７３１へデータを送信する準備ができると、光線圧縮回路３７２０は、本願明細書に記載のように光線追跡データの不可逆及び／又は可逆圧縮を実行する（例えば、３２ビット値を８ビット値に変換する、データを再構成する命令で生データを置き換える、等）。圧縮光線パケット３７０１は、ネットワークインタフェース３７２５からネットワークインタフェース３７２６へローカルネットワーク（例えば、１０Ｇｂ／ｓ、１００Ｇｂ／ｓ  Ｅｔｈｅｒｎｅｔネットワーク）を介して送信される。光線伸長回路は、次に、適切なときに、光線パケットを伸長する。例えば、光線伸長回路は、（例えば、照明演算のためのランダムサンプリングを実行するためにランダムシードを用いて）光線追跡データを再構成するコマンドを実行してよい。光線追跡エンジン３７３１は、次に、受信したデータを使用して、光線追跡演算を実行する。
【０３０９】
逆方向では、光線圧縮回路３７４１は、光線データを圧縮し、ネットワークインタフェース３７２６は、（例えば、本願明細書に記載の技術を用いて）圧縮した光線データをネットワークを介して送信し、光線伸長回路３７４０は必要なときに光線データを伸長し、光線追跡エンジン３７３０は該データを光線追跡演算で使用する。図３７では別個のユニットとして図示したが、光線伸長回路３７４０〜３７４１は、それぞれ光線追跡エンジン３７３０〜３７３１内に統合されてよい。例えば、圧縮光線データが光線データを再構成するコマンドを含むという点で、これらのコマンドは、各々のそれぞれの光線追跡エンジン３７３０〜３７３１により実行されてよい。
【０３１０】
図３８に示すように、光線圧縮回路３７２０は、本願明細書に記載の不可逆圧縮技術を実行する（例えば、３２ビット浮動小数点座標を８ビット整数座標に変換する）不可逆圧縮回路３８０１、及び可逆圧縮技術を実行する（例えば、コマンド及びデータを送信して、光線再圧縮回路３８２１がデータを再構成できるようにする）可逆圧縮回路３８０３を含んでよい。光線伸長回路３７２１は、不可逆伸長回路３８０２及び可逆伸長を実行する可逆伸長回路３８４０を含む。
【０３１１】
一実施形態による方法は、図３９に示される。方法は、本願明細書に記載の光線追跡アーキテクチャで実施されてよいが、任意の特定のアーキテクチャに限定されない。
【０３１２】
３９００で、第１光線追跡ノードから第２光線追跡ノードへ送信される光線データが受信される。３９０１で、不可逆圧縮回路は、不可逆圧縮を第１光線追跡データに対して実行する。３９０２で、可逆圧縮回路は、可逆圧縮を第２光線追跡データに対して実行する。３９０３で、圧縮光線追跡データは、第２光線追跡ノードへ送信される。３９０４で、不可逆／可逆伸長回路は、光線追跡データの不可逆／可逆伸長を実行する。３９０５で、第２光線追跡ノードは、伸長したデータを使用して光線追跡演算を実行する。
【０３１３】
＜＜ハードウェアにより加速化されたハイブリッド光線追跡を有するグラフィックプロセッサ＞＞
本発明の一実施形態は、グラフィックコア３１３０上でラスタライズを、及び光線追跡コア３１５０、グラフィックコア３１３０、及び／又はＣＰＵ３１９９コア上で光線追跡演算を実行する、ハイブリッドレンダリングパイプラインを含む。例えば、ラスタライズ及び深さテストは、１次光線キャスティング段階において、グラフィックコア３１３０上で実行されてよい。光線追跡コア３１５０は、次に、光線反射、屈折、及びシャドウのために２次光線を生成してよい。さらに、特定の実施形態は、光線追跡コア３１５０が光線追跡演算を実行する、シーンの特定領域を（例えば、高反射率レベルのような物質特性閾に基づき）選択してよい。一方で、シーンの他の領域は、グラフィックコア３１３０上のラスタライズによりレンダリングされる。一実施形態では、このハイブリッド実装は、遅延が重要課題であるリアルタイム光線追跡アプリケーションのために使用される。
【０３１４】
後述する光線トラバースアーキテクチャの一実施形態は、プログラマブルシェーディング及び光線トラバースの制御を、既存ＳＩＭＤ（single  instruction  multiple  data）及び／又はＳＩＭＴ（single  instruction  multiple  thread）グラフィックプロセッサを用いて実行し、一方で、ＢＶＨトラバース及び／又は交差のような重要機能を専用ハードウェアを用いて加速化する。本実施形態では、非コヒーレント経路のＳＩＭＤ使用は、トラバース中及びシェーディング前の特定ポイントで生成されたシェーダを再グループ化することにより、向上される。これは、オンチップでシェーダを動的に並べ替える専用ハードウェアを用いて達成される。返されると実行する連続に機能を分割すること、及びＳＩＭＤ使用を向上するために実行前に連続を再グループ化することにより、反復が管理される。
【０３１５】
光線トラバース／交差のプログラム可能な制御は、固定機能ハードウェアとして実装可能な内部トラバース及びＧＰＵプロセッサ上で実行する外部トラバースにトラバース機能を分解することにより達成され、ユーザ定義トラバースシェーダを通じてプログラム可能な制御を可能にする。トラバースコンテキストをハードウェアとソフトウェアとの間で転送するコストは、内部及び外部トラバースの間の遷移の間に内部トラバース状態を控えめに切り捨てる（truncating）ことにより、削減される。
【０３１６】
光線追跡のプログラム可能な制御は、以下の表Ａにリストされる異なるシェーダ種類を通じて表現できる。種類毎に複数のシェーダが存在し得る。例えば、各物質は、異なるヒットシェーダを有し得る。
［表Ａ］
【表１】
2020109620.tif 000007
【０３１７】
一実施形態では、再帰的光線追跡が、１次シェーダセット又は１次光線について光線シーン交差を生成できる交差回路を開始するようグラフィックプロセッサに命令するＡＰＩ関数により開始される。これはまた、トラバース、Hitシェーダ、又はMissシェーダのような他のシェーダを生成する。子シェーダを生成するシェーダは、該子シェーダから戻り値を受信することもできる。呼び出し可能可能シェーダは、別のシェーダにより直接生成可能な且つ呼び出し側シェーダに値を返すことのできる汎用関数である。
【０３１８】
図４０は、シェーダ実行回路４０００及び固定機能回路４０１０を含むグラフィック処理アーキテクチャの一実施形態を示す。汎用実行ハードウェアサブシステムは、複数のＳＩＭＤ（single  instruction  multiple  data）及び／又はＳＩＭＴ（single  instructions  multiple  threads）コア／実行ユニット（EU）４００１’（つまり、各コアが複数の実行ユニットを含んでよい）、１つ以上のサンプラ４００２、及びレベル１（Ｌ１）キャッシュ４００３又は他の形式のローカルメモリを含む。固定機能ハードウェアサブシステム４０１０は、メッセージユニット４００４、スケジューラ４００７、光線ＢＶＨトラバース／交差回路４００５、並べ替え回路４００８、及びローカルＬ１キャッシュ４００６を含む。
【０３１９】
動作中、１次ディスパッチャ４００９は、１次光線セットをスケジューラ４００７にディスパッチし、スケジューラ４００７は、ＳＩＭＤ／ＳＩＭＴコア／ＥＵ４００１上で実行されるシェーダのために作業をスケジューリングする。ＳＩＭＤコア／ＥＵ４００１は、上述の光線追跡コア３１５０及び／又はグラフィックコア３１３０であってよい。１次シェーダの実行は、実行されるべき（例えば、１つ以上の子シェーダ及び／又は固定機能ハードウェアにより実行されるべき）追加作業を生じる。メッセージユニット４００４は、ＳＩＭＴコア／ＥＵ４００１により生成された作業を、スケジューラ４００７に、必要に応じてフリースタックプールにアクセスして、並べ替え回路４００８に、又は光線ＢＶＨ交差回路４００５に分配する。追加作業は、スケジューラ４００７へ送信された場合、ＳＩＭＤ／ＳＩＭＴコア／ＥＵ４００１における処理のためにスケジューリングされる。スケジューリングの前に、並べ替え回路４００８は、本願明細書に記載のように光線をグループ又はビンに並べ替えてよい（例えば、類似する特徴を有する光線をグループ化する）。光線ＢＶＨ交差回路４００５は、ＢＶＨ体積を用いて光線の交差テストを実行する。例えば、光線ＢＶＨ交差回路４００５は、光線座標をＢＶＨの各レベルと比較して、光線の交差する体積を識別してよい。
【０３２０】
シェーダは、シェーダレコード、入力関数へのポインタを含むユーザ割り当て構造、ベンダ固有メタデータ、及びＳＩＭＤコア／ＥＵ４００１により実行されるシェーダへのグローバル引数を用いて参照可能である。シェーダのインスタンスの各々の実行は、親シェーダ及び子シェーダの間で渡される引数を格納するために使用されてよい呼び出しスタックに関連付けられる。呼び出しスタックは、呼び出しから戻るときに実行される継続関数への参照を格納してもよい。
【０３２１】
図４１は、１次シェーダスタック、Hitシェーダスタック、トラバースシェーダスタック、継続関数スタック、及び光線ＢＶＨ交差スタックを含む例示的な割り当てスタックセット４１０１を示す（記載のように、固定関数ハードウェア４０１０により実行されてよい）。新しいシェーダの起動は、フリースタックプール４１０２からの新しいスタックを実装してよい。呼び出しスタックは、ローカルＬ１キャッシュ４００３、４００６内にキャッシュされてよく、アクセス待ち時間を削減する。
【０３２２】
一実施形態では、有限数の呼び出しスタックがあり、それぞれ、メモリの連続領域内で割り当てられた固定最大サイズ「Sstack」を有する。したがって、スタックの基本アドレスは、基本アドレス=SID*Sstackのように、スタックインデックス（SID）から直接計算できる。一実施形態では、スタックＩＤは、ＳＩＭＤコア／ＥＵ４００１に作業をスケジューリングするとき、スケジューラ４００７により割り当てられ及び割り当て解除される。
【０３２３】
一実施形態では、１次ディスパッチャ４００９は、ホスト（例えばＣＰＵ）からのディスパッチコマンドに応答して１次シェーダをディスパッチするグラフィックプロセッサコマンドプロセッサを含む。スケジューラ４００７は、これらのディスパッチ要求を受信し、各ＳＩＭＤレーンにスタックＩＤを割り当て可能な場合、１次シェーダをＳＩＭＤプロセッサスレッドで開始する。スタックＩＤは、ディスパッチコマンドの始めに初期化されるフリースタックプール４１０２から割り当てられる。
【０３２４】
実行中のシェーダは、生成メッセージをメッセージングユニット４００４へ送信することにより、子シェーダを生成可能である。このコマンドは、シェーダに関連付けられたスタックＩＤを含み、各々のアクティブなＳＩＭＤレーンの子シェーダレコードへのポインタも含む。親シェーダは、このメッセージをアクティブレーンについて一度だけ発行できる。一実施形態では、生成メッセージを全ての関連レーンに送信した後に、親シェーダは終了する。
【０３２５】
ＳＩＭＤコア／ＥＵ４００１上で実行するシェーダは、光線ＢＶＨ交差のような固定関数タスクも、固定関数ハードウェアのために予約されたシェーダレコードポインタを有する生成メッセージを用いて生成できる。説明したように、メッセージングユニット４００４は、生成した光線ＢＶＨ交差作業を固定関数光線ＢＶＨ交差回路４００５へ、及び呼び出し可能シェーダを並べ替え回路４００８へ直接送信する。一実施形態では、並べ替え回路は、シェーダレコードポインタによりシェーダをグループ化して、類似する特性を有するＳＩＭＤバッチを導出する。したがって、異なる親シェーダからのスタックＩＤは、同じバッチ内の並べ替え回路４００８によりグループ化できる。並べ替え回路４００８は、グループ化したバッチをスケジューラ４００７へ送信する。スケジューラ４００７は、グラフィックメモリ２５１１又はラストレベルキャッシュ（ＬＬＣ）４０２０からのシェーダレコードにアクセスし、プロセッサスレッド上でシェーダを開始する。
【０３２６】
一実施形態では、継続は、呼び出し可能シェーダとして取り扱われ、シェーダレコードを通じて参照されてもよい。子シェーダが生成され、親シェーダに値を戻すと、継続シェーダレコードへのポインタは、呼び出しスタック４１０１にプッシュされる。子シェーダが戻ると、継続シェーダレコードは、呼び出しスタック４１０１からポップされ、継続シェーダが生成される。生成された継続は、並べ替えユニットを呼び出し可能シェーダへと通過し、プロセッサスレッド上で開始される。
【０３２７】
図４２に示すように、並べ替え回路４００８の一実施形態は、シェーダレコードポインタ４２０１Ａ、４２０１Ｂ、４２０１ｎにより生成されたタスクをグループ化して、シェーディングのためにＳＩＭＤバッチを生成する。並べ替えられたバッチ内のスタックＩＤ又はコンテキストＩＤは、異なるディスパッチ及び異なる入力ＳＩＭＤレーンからグループ化され得る。一実施形態では、グループ化回路４２１０は、各エントリがタグ４２０１により識別される複数のエントリを含むＣＡＭ（content  addressable  memory）構造４２０１を用いて並べ替えを実行する。説明したように、一実施形態では、タグ４２０１は、対応するシェーダレコードポインタ４２０１Ａ、４２０１Ｂ、４２０１ｎである。一実施形態では、ＣＡＭ構造４２０１は、それぞれシェーダレコードポインタに対応する不完全ＳＩＭＤに関連付けられた限られた数のタグ（例えば、３２、６４、１２８、等）を格納する。
【０３２８】
入力生成コマンドに対して、各ＳＩＭＤレーンは、対応するスタックＩＤ（各ＣＡＭエントリ内の１６個のコンテキストＩＤ０〜１５として示される）、及びシェーダレコードポインタ４２０１Ａ〜Ｂ、．．．、ｎ（タグ値として機能する）を有する。一実施形態では、グループ化回路４２１０は、各レーンのシェーダレコードポインタを、ＣＡＭ構造４２０１内のタグ４２０１と比較して、一致するバッチを見付ける。一致するバッチが見付かった場合、スタックＩＤ／コンテキストＩＤは、バッチに追加される。その他の場合、新しいシェーダレコードポインタタグを有する新しいエントリが生成され、場合によっては、不完全バッチを有する古いエントリを退去させる。
【０３２９】
実行中シェーダは、割り当て解除メッセージをメッセージングユニットへ送信することにより、自身が空のときに呼び出しスタックを割り当て解除できる。割り当て解除メッセージは、スケジューラへ中継される。スケジューラは、アクティブＳＩＭＤレーンのためにスタックＩＤ／コンテキストＩＤをフリープールに返す。
【０３３０】
本発明の一実施形態は、固定機能光線トラバース及びソフトウェア光線トラバースの組み合わせを用いて、光線トラバース演算のためにハイブリッドアプローチを実施する。したがって、本発明の一実施形態は、固定機能トラバースの効率性を維持しながら、ソフトウェアトラバースの柔軟性を提供する。図４３は、ハイブリッドトラバースにために使用され得る高速化構造を示す。該構造は、２レベル木であり、単一の最上位レベルＢＶＨ４３００及び幾つかの最下位レベルＢＶＨ４３０１及び４３０２を有する。グラフィック要素が右側に示され、内部トラバースパス４３０３、外側トラバースパス４３０４、トラバースノード４３０５、三角形４３０６を有するリーフノード、及びカスタムプリミティブ４３０７を有するリーフノードを含む。
【０３３１】
最上位レベルＢＶＨ４３００内の三角形４３０６を有するリーフノードは、カスタムプリミティブ又はトラバースシェーダレコードの三角形及び交差シェーダレコードを参照し得る。最下位レベルＢＶＨ４３０１〜４３０２の三角形４３０６を有するリーフノードは、カスタムプリミティブの三角形及び交差シェーダレコードのみを参照できる。参照の種類は、リーフノード４３０６内で符号化される。内部トラバース４３０３は、各ＢＶＨ４３００〜４３０２内のトラバースを参照する。内部トラバース演算は光線ＢＶＨ交差の計算を含み、ＢＶＨ構造４３００〜４３０２に渡るトラバースは外側トラバースとして知られている。内部トラバース演算は、固定機能ハードウェア内で効率的に実施できる。一方、外側トラバース演算は、プログラム可能なシェーダにより許容可能な性能で実行できる。したがって、本発明の一実施形態は、固定機能回路４０１０を用いて内部トラバース演算を実行し、プログラム可能なシェーダを実行するＳＩＭＤ／ＳＩＭＴコア／ＥＵ４００１を含むシェーダ実行回路４０００を用いて外側トラバース演算を実行する。
【０３３２】
ＳＩＭＤ／ＳＩＭＴコア／ＥＵ４００１は、簡単のために、ここで単に「コア」、「ＳＩＭＤコア」、「ＥＵ」又は「ＳＩＭＤプロセッサ」と時折呼ばれることに留意する。同様に、光線ＢＶＨトラバース／交差回路４００５は、単に「トラバースユニット」、「トラバース／交差ユニット」又は「トラバース／交差回路」と時折呼ばれる。代替の用語が使用されるとき、それぞれの回路／ロジックを指定するために使用される特定の名称は、本願明細書に記載のような回路／ロジックの実行する基礎にある機能を変更しない。
【０３３３】
さらに、説明目的で図４０に単一のコンポーネントとして示されたが、トラバース／交差ユニット４００５は、個別トラバースユニット及び個別交差ユニットを含んでよい。これらのユニットの各々は、本願明細書に記載のように回路及び／又はロジックで実装されてよい。
【０３３４】
一実施形態では、光線が、内部トラバース中にトラバースノードを交差するときトラバースシェーダが生成される。並べ替え回路４００８は、シェーダレコードポインタ４２０１Ａ〜Ｂ、ｎにより、これらのシェーダをグループ化して、ＳＩＭＤバッチを生成する。ＳＩＭＤバッチは、グラフィックＳＩＭＤコア／ＥＵ４００１上でのＳＩＭＤ実行のためにシェーダ４００７により開始される。トラバースシェーダは、幾つかの方法でトラバースを変更でき、広範なアプリケーションを可能にする。例えば、トラバースシェーダは、より粗い詳細レベル（coarser  level  of  detail：LOD）でＢＶＨを選択し、又は光線を変換でき、剛体を可能にする。トラバースシェーダは、次に、選択されたＢＶＨについて内部トラバースを生成する。
【０３３５】
内部トラバースは、ＢＶＨをトラバースし及び光線ボックス及び光線三角形交差を計算することにより、光線ＢＶＨ交差を計算する。内部トラバースは、シェーダと同様に、メッセージをメッセージングユニット４００４へ送信することにより生成される。メッセージングユニット４００４は、対応する生成メッセージを光線ＢＶＨ交差回路４００５へと中継し、光線ＢＶＨ交差回路４００５は光線ＢＶＨ交差を計算する。
【０３３６】
一実施形態では、内部トラバースのためのスタックは、固定機能回路４０１０（例えば、Ｌ１キャッシュ４００６内にある）にローカルに格納される。光線がトラバースシェーダ又は交差シェーダに対応するリーフノードを交差するとき、内部トラバースは終了し、内部スタックが切り詰められる（truncated）。光線及びＢＶＨへのポインタを有する切り詰められたスタックは、呼び出し側シェーダにより指定された位置においてメモリに書き込まれ、次に対応するトラバースシェーダ又は交差シェーダが生成される。光線が内部トラバース中に任意の三角形を交差する場合、対応するヒット情報は、以下のコードに示されるように、これらのシェーダに入力引数として提供される。これらの生成されたシェーダは、並べ替え回路４００８によりグループ化されて、実行のためにＳＩＭＤバッチを生成する。
【数５】
2020109620.tif 000008
【０３３７】
内部トラバーススタックを切り詰めることは、それをメモリに放出する（spilling）コストを削減する。本発明の一実施形態は、Restart  Trail  for  Stackless  BVH  Traversal,  High  Performance  Graphics(２０１０),  pp.１０７-１１１に記載のアプローチを使用して、スタックをスタックの最上部において、４２ビットの再開トレイル及び６ビットの深さの値の少数のエントリに切り詰める。再開トレイルは、ＢＶＨの内側で既に取られたブランチを示し、深さ値は、最後のスタックエントリに対応するトラバースの深さを示す。これは、後の時間に内部トラバースを再開するための充分な情報である。
【０３３８】
内部トラバースは、内部スタックが空であり、且つテストすべきＢＶＨノードが存在しないとき、完了する。この場合には、外部スタックの最上部がポップし（pop）、外部スタックが空でない場合にトラバースを再開する外部スタックハンドラが生成される。
【０３３９】
一実施形態では、外側トラバースは、主トラバース状態機械を実行し、シェーダ実行回路４０００により実行されるプログラムコード内に実装される。以下の条件の下で、内部トラバースクエリを生成する。（１）新しい光線がHitシェーダ又は１次シェーダにより生成されるとき。（２）トラバースシェーダがトラバースのためにＢＶＨを選択するとき。及び（３）外部スタックハンドラはＢＶＨの内部トラバースを再開するとき。
【０３４０】
図４４に示すように、内部トラバースが生成される前に、切り詰められた内部スタック４４１０を格納するために、固定機能回路４０１０に呼び出しスタック４４０５上で、空間が割り当てられる。呼び出しスタック及び内部スタックの最上部へのオフセット４４０３〜４４０４は、メモリ２５１１に格納されるトラバース状態４４００内に維持される。トラバース状態４４００は、世界（world）空間４４０１及びオブジェクト空間４４０２内の光線、及び最近接交差プリミティブのヒット情報も含む。
【０３４１】
トラバースシェーダ、交差シェーダ、及び外部スタックハンドラは、全て、光線ＢＶＨ交差回路４００５により生成される。トラバースシェーダは、第２レベルＢＶの新しい内部トラバースを開始する前に、呼び出しスタック４４０５上で割り当てる。外部スタックハンドラは、ヒット情報の更新、及び任意の保留中の内部トラバースタスクの再開を担うシェーダである。外部スタックハンドラは、トラバースが完了したとき、Hit又はMissシェーダの生成も担う。トラバースは、生成すべき保留中の内部トラバースクエリが存在しないとき、完了する。トラバースが完了し、交差が見付かると、Hitシェーダが生成され、その他の場合、Missシェーダが生成される。
【０３４２】
上述のハイブリッドトラバース方式は２レベルＢＶＨ階層構造を使用するが、本願明細書に記載の本発明の実施形態は、外部トラバース実装において対応する変更を伴い、任意の数のＢＶＨレベルを使用してよい。
【０３４３】
さらに、固定機能回路４０１０は、上述の実施形態において光線ＢＶＨ交差を実行するために記載されたが、他のシステムコンポーネントも固定機能回路内に実装されてよい。例えば、上述の外部スタックハンドラは、場合によっては固定機能ＢＶＨトラバース／交差回路４００５内に実装され得る内部（ユーザに見えない）シェーダであってよい。この実装は、固定機能交差ハードウェア４０００５とプロセッサとの間のディスパッチされるシェーダ段階及びラウンドトリップの数を削減するために使用されてよい。
【０３４４】
本願明細書に記載の本発明の実施形態は、既存の及び将来のＧＰＵプロセッサ上で一層ＳＩＭＤ効率良く実行可能なユーザ定義機能を用いて、プログラム可能なシェーディング及び光線トラバース制御を可能にする。光線トラバースのプログラム可能な制御は、手順のインスタンス化、高度な詳細レベルの選択、カスタム化されたプリミティブ交差及び遅延（lazy）ＢＶＨ更新のような、幾つかの重要な特徴を可能にする。
【０３４５】
＜＜クラウドに基づく光線追跡＞＞
特定の分散型光線追跡実装は、特定種類のデータを圧縮する実施形態、及びノード間で共有される必要のあるデータを知的に決定し必要なデータを動的に分配する実施形態のように、上述された。
【０３４６】
以下に記載する実施形態は、クラウド内の低解像度のノイズの多いデータを符号化し及び次にクライアントにおいてノイズ除去し続いて復号するために、上述の技術のうちの１つ以上と結合して使用されてよい。中心窩レンダリング（foveated  rendering）では、一実施形態では、圧縮アーチファクトを回避するために、中心窩領域（fovea  region）（つまり、ユーザの注視の向けられる領域）がローカルにレンダリングされる。複数視聴者の実装では、光線追跡される視野独立照明がクラウド内で実行され、各クライアントは、視野依存照明効果をローカルで適用する。
【０３４７】
一実施形態は、図４５に関して説明される。図４５では、ノード４５９０はクライアントシステム内のローカルＧＰＵ装置（例えば、頭部搭載ディスプレイを有するコンピュータシステム）の処理及び／又は回路であり、ノード４５９１は、クライアントシステム内の第２ローカルＧＰＵ装置、エッジ装置（例えば、ユーザのネットワークの境界にある装置）内のＧＰＵ装置、又はクラウドサーバファーム内のＧＰＵ装置のいずれかにある処理及び／又は回路であり、ノード４５９２は、「エッジ」装置内の第２ＧＰＵ装置又はクラウドサーバファーム内のＧＰＵ装置のいずれかにおいて実行する回路及び／又は処理を含む。
【０３４８】
例として、クラウドサーバファームは、仮想化技術を用いて、ＧＰＵ（ｖＧＰＵ）の仮想化部分を、ノード４５９１クライアントのようなクライアントに割り当ててよい。複数のＧＰＵの処理リソースを、ノード４５９１のユーザにより又はクライアントを所有する組織／事業体により支払われるサブスクリプション額に基づき細分化することを含む、種々の構成が可能である。これらのＧＰＵ仮想化技術は、良く知られており、ここでは本発明の基礎にある原理を曖昧にすることを回避するために更に記載されない。
【０３４９】
一実施形態では、ノード４５９２は、光線追跡技術を用いて高忠実度視野独立表面を生成する持続的に実行する処理及び／又関連する回路を含む。したがって、ノード４５９２は、（例えば本願明細書に記載のトラバース及び交差回路のような）専用光線追跡回路、及び１人以上のユーザのために充分な低待ち時間でリアルタイム光線追跡を実行するために必要な高帯域幅／高速メモリ及びＩＯ機能を含む、グラフィック処理リソースを実装されてよい。
【０３５０】
４５０１で、ノード４５９０は、自身のローカルグラフィック処理リソースで独立レンダリングを実行する。例えば、ノード４５９０は、ローカル仮想現実アプリケーション又は他の形式のグラフィックアプリケーションを、専用ローカルグラフィックデータセットを用いて実行してよい。４５０２で、ノード４５９０は、ユーザの現在視野の指示を送信する。例えば、センサがユーザの顔の方向を決定する、及び／又はカメラ若しくは他のセンサがユーザの網膜の方向を追跡する視標追跡を含む、種々の形式の視野追跡が使用されてよい。
【０３５１】
追跡の種類に拘わらず、ノード４５９１は、４５０２で現在視野の指示を受信し、それに応答して、４５０３で視野独立表面の要求をノード４５９２へ送信する。ノード４５９２は、４５０４で現在シーンに対して視野独立光線追跡演算を実行するよう動作可能であり（例えば、ＢＶＨをトラバースし、及び光線プリミティブ交差を識別する）、圧縮表面を生成する。４５０５で、ノード４５９２は該圧縮表面をノード４５９１へ送信する。一実施形態では、ノード４５９２は、Ｈ．２６４符号化のようなビデオ符号化及び圧縮技術を使用して、圧縮表面４５０５を生成する。本発明の基礎にある原理に従いながら、様々な他の符号化技術が使用されてよい。
【０３５２】
幾らかの時間の後に、４５０７で、ノード４５９０は、（例えばユーザの注視の現在方向に基づき）視野依存表面に対する要求を送信する。４５０６で、ノード４５９１は、視野依存変換を実行するために、圧縮表面４５０５を使用する。一実施形態では、ノード４５９１は、圧縮表面４５０５により提供される視野独立座標がユーザの現在視野に従い視野依存座標に変換される、変換演算を実行する。
【０３５３】
一実施形態では、ノード４５９１は、ノード４５９２により返された表面を復号し及び伸長する。ビデオ符号化により圧縮表面が生成された場合、ノード４５９１は、対応するビデオ復号（例えば、Ｈ．２６４復号）を利用し、ノード４５９０によりレンダリングされているシーンについて照明のような視野依存情報を表す表面を生成してよい。一実施形態では、ノード４５９１は、ノード４５９０が視野依存レンダリング４５０９を達せするために使用する高解像度圧縮（又は非圧縮）表面４５０８を生成するために、本願明細書に記載のような機械学習技術も使用してよい。
【０３５４】
特に、ノード４５９０は、４５０１で、光線追跡と独立にレンダリングを完了した後に、４５０８で、ノード４５９１が高解像度視野依存表面を提供するのを待つ。ノード４５９１が高解像度表面４５０８をノード４５９０に返すと、ノード４５９０は、（表面が圧縮されている場合には）ビデオ伸長のような技術を用いて圧縮表面４５０８を伸長し、高解像度圧縮表面４５０８を最終レンダリング画像に統合することによりシーンのレンダリングを終了させる。
【０３５５】
図４６は、ハイブリッド光線追跡実装を用いてグラフィックレンダリングを実行するクライアント−サーバアーキテクチャの一実施形態を示す。クライアント４６８０は、メモリ４６９０に格納されたグラフィックアプリケーション４６２５を実行するためにＧＰＵ４６０１を含む。ＧＰＵ４６０１上のローカルレンダリングエンジン４６２０は、一実施形態では光線追跡と独立であるフレームのレンダリング、例えば照明に依存しないレンダリングを開始する。
【０３５６】
ローカルレンダリングエンジン４６２０は、第２ＧＰＵ４６０２上の非同期メッセージを視野依存処理回路／ロジック４６３０へ送信して、レンダリングされるべきシーンのユーザの現在視野を通知する。上述のように、第２ＧＰＵ４６０２は、クライアント４６８０内の第２グラフィックプロセッサとして統合されてよく、又はクライアント４６８０と同じローカルネットワークにある別の装置上にあってよい。
【０３５７】
一実施形態では、視野独立回路／ロジック４６３０は、サーバ４６８１へ、レンダリング中のシーンについての照明のような視野独立情報を表す表面についての要求を送信する。サーバ４６８１は、少なくとも１つのＧＰＵ４６０３及びメモリ４６９１を備えられ、レンダリング中のシーンに関連するローカルグラフィックデータ４６２１を用いて視野独立光線追跡４６４０を実行する。一実施形態では、視野独立光線追跡４６４０は、ＧＰＵ４６０３上で持続的に実行し、光線追跡技術を用いて高忠実度視野独立表面を生成する。サーバ４６８１は、例えば、クラウドに基づくデータセンタ内のサーバであってよい。
【０３５８】
視野独立光線追跡４６４０は、ビデオ復号技術を実装してよいデコーダ４６２１を用いて表面を伸長する視野依存処理回路／ロジック４６３０へ、低解像度及び圧縮表面を返す。視野依存処理回路／ロジック４６３０は、ローカルレンダリングエンジン４６２０によりレンダリング中のシーンについて、照明のような視野依存情報を表す表面を生成する。一実施形態では、視野依存処理回路／ロジック４６３０は、また、機械学習又は類似の技術を用いて、画像品質を向上する。
【０３５９】
ローカルレンダリングエンジン４６２０は、光線追跡と独立の任意のレンダリングを完了し、視野依存処理回路／ロジック４６３０上で、視野依存高解像度圧縮表面を提供するのを待機する。一実施形態では、視野依存表面は、圧縮され、該表面を復号するためにデコーダ４６２１を含むクライアント４６８０へ送信される。ローカルレンダリングエンジン４６２０は、次に、表面を用いてローカルディスプレイ上でシーンのレンダリングを仕上げる。
【０３６０】
上述の技術は、クライアント４６８０のような複数のクライアントに表面の視野独立レンダリングを実行するために、仮想化グラフィック処理サーバ４６８１の高性能グラフィック処理リソースのための方法を提供した。視野独立表面は、視野依存表面に変換される。視野依存表面は、次に、ローカルレンダリングエンジン４６２０により現在フレームに統合され、それにより、リアルタイム光線追跡実装を可能にし、ローカルクライアント４６８０において追加ハードウェアサポートの必要が無い。
【０３６１】
実施形態では、用語「エンジン」又は「モジュール」又は「ロジック」は、１又は複数のソフトウェア若しくはフォームウェアプログラムを実行するＡＳＩＣ（Application  Specific  Integrated  Circuit）、電子回路、プロセッサ（共有、専用、又はグループ）、及び／又はメモリ（共有、専用、又はグループ）、組合せ論理回路、及び／又は記載の機能を提供する他の適切なコンポーネントを表し、その一部であり、又はそれを含んで良い。実施形態では、エンジン、モジュール、又はロジックは、ファームウェア、ハードウェア、ソフトウェア、又はファームウェア、ハードウェア、及びソフトウェアの任意の組み合わせで実装されてよい。
【０３６２】
本発明の実施形態は、上述した種々のステップを含んでよい。ステップは、汎用目的又は特定目的プロセッサにステップを実行させるために用いることができる機械実行可能命令で実装されてよい。代替で、これらのステップは、ステップを実行するハードワイヤロジックを含む専用ハードウェアコンポーネントにより、又はプログラミングされたコンピュータコンポーネントとカスタムハードウェアコンポーネントとの組合せにより実行されてよい。
【０３６３】
本願明細書に記載のように、命令は、特定演算を実行するよう構成された又は所定機能若しくは非一時的コンピュータ可読媒体に実装されたメモリに格納されたソフトウェア命令を有する特定用途向け集積回路（ＡＳＩＣ）のようなハードウェアの特定構成を表してよい。したがって、図示の技術は、１つ以上の電子装置（例えば、末端局、ネットワーク要素、等）上に格納され実行されるコード及びデータを用いて実装できる。このような電子装置は、非一時的コンピュータ可読記憶媒体（例えば、磁気ディスク、光ディスク、ランダムアクセスメモリ、読み出し専用メモリ、フラッシュメモリ素子、位相変化メモリ）のようなコンピュータ機械可読媒体、及び一時的コンピュータ機械可読通信媒体（例えば、電気、光、音響、若しくは他の形式の伝搬信号、例えば搬送波、赤外線信号、デジタル信号、等）を用いて、コード及びデータを（内部で及び／又は他の電子装置とネットワークを介して）を用いて、格納し通信する。
【０３６４】
さらに、このような電子装置は、標準的に、１つ以上の記憶装置（非一時的機械可読記憶媒体）、ユーザ入力／出力装置（例えば、キーボード、タッチスクリーン、及び／又はディスプレイ）、及びネットワーク接続、のような１つ以上の他のコンポーネントに結合された１つ以上のプロセッサのセットを含む。プロセッサ及び他のコンポーネントのセットの結合は、標準的に、１つ以上のバス及びブリッジ（バス制御部とも呼ばれる）を通じる。記憶装置及びネットワークトラフィックを伝達する信号は、それぞれ、１つ以上の機械可読記憶媒体及び機械可読通信媒体を表す。したがって、所与の電子装置の記憶装置は、標準的に、該電子装置の１つ以上のプロセッサのセットにおける実行のためにコード及び／又データを格納する。勿論、本発明の実施形態の１つ以上の部分は、ソフトウェア、ファームウェア、及び／又はハードウェアの異なる組み合わせを用いて実装されてよい。この詳細説明では、説明を目的として、本発明の実施形態の完全な理解を提供するために、多くの詳細事項が説明された。しかしながら、当業者は、本発明がそのような特定の詳細の幾つかにかかわらず実施できることを理解するだろう。特定の例では、本発明の主題を曖昧にすることを回避するために、良く知られた構造及び機能は詳述されなかった。したがって、本発明の範囲及び精神は、添付の請求の範囲の観点で判断されるべきである。
【符号の説明】
【０３６５】
１００  処理システム
１０２  プロセッサ
１０４  キャッシュ
１０６  レジスタファイル
１０７  プロセッサコア
１０８  グラフィックプロセッサ
１０９  命令セット
１１０  インタフェースバス
１１１  ディスプレイ装置
１１２  外部グラフィックプロセッサ
１１６  メモリ制御部
１２０  メモリ装置
１２１  命令
１２２  データ
１２４  データ記憶装置
１２５  タッチセンサ
１２６  無線通信機
１２８  ファームウェアインタフェース
１３０  プラットフォーム制御ハブ
１３４  ネットワーク制御部
１４０  レガシI/O制御部
１４２  USB制御部
１４３  キーボード／マウス
１４４  カメラ
１４６  音声制御部
【図１】
2020109620.tif 000009
【図２】
2020109620.tif 000010
【図３】
2020109620.tif 000011
【図４】
2020109620.tif 000012
【図５】
2020109620.tif 000013
【図６Ａ】
2020109620.tif 000014
【図６Ｂ】
2020109620.tif 000015
【図７】
2020109620.tif 000016
【図８】
2020109620.tif 000017
【図９Ａ】
2020109620.tif 000018
【図９Ｂ】
2020109620.tif 000019
【図１０】
2020109620.tif 000020
【図１１Ａ】
2020109620.tif 000021
【図１１Ｂ】
2020109620.tif 000022
【図１２】
2020109620.tif 000023
【図１３Ａ】
2020109620.tif 000024
【図１３Ｂ】
2020109620.tif 000025
【図１４Ａ】
2020109620.tif 000026
【図１４Ｂ】
2020109620.tif 000027
【図１５】
2020109620.tif 000028
【図１６】
2020109620.tif 000029
【図１７】
2020109620.tif 000030
【図１８Ａ】
2020109620.tif 000031
【図１８Ｂ】
2020109620.tif 000032
【図１９】
2020109620.tif 000033
【図２０】
2020109620.tif 000034
【図２１】
2020109620.tif 000035
【図２２】
2020109620.tif 000036
【図２３】
2020109620.tif 000037
【図２４】
2020109620.tif 000038
【図２５】
2020109620.tif 000039
【図２６】
2020109620.tif 000040
【図２７】
2020109620.tif 000041
【図２８】
2020109620.tif 000042
【図２９】
2020109620.tif 000043
【図３０Ａ】
2020109620.tif 000044
【図３０Ｂ】
2020109620.tif 000045
【図３１】
2020109620.tif 000046
【図３２】
2020109620.tif 000047
【図３３】
2020109620.tif 000048
【図３４】
2020109620.tif 000049
【図３５】
2020109620.tif 000050
【図３６】
2020109620.tif 000051
【図３７】
2020109620.tif 000052
【図３８】
2020109620.tif 000053
【図３９】
2020109620.tif 000054
【図４０】
2020109620.tif 000055
【図４１】
2020109620.tif 000056
【図４２】
2020109620.tif 000057
【図４３】
2020109620.tif 000058
【図４４】
2020109620.tif 000059
【図４５】
2020109620.tif 000060
【図４６】
2020109620.tif 000061
【外国語明細書】
2020109620000001.pdf