(57)【要約】      （修正有）【課題】グラフィックスフレームの効率的な分散型ノイズ除去を実行する装置を提供する。【解決手段】システムはレイトレーシングオペレーションを実行する複数のノードと、複数のノードにグラフィックスワークをディスパッチするディスパッチャノードであって、各ノードは、画像フレームの領域をレンダリングするようにレイトレーシングを実行する、ディスパッチャノードと、複数のうちの少なくとも第１のノードであって、画像フレームの第１の領域をレンダリングするようにレイトレーシングを実行するレイトレーシングレンダラと、第１の領域に関連付けられるデータと、第１の領域の外側の領域に関連付けられるデータとの組み合わせを用いて第１の領域のノイズ除去を実行するデノイザであって、第１の領域の外側の領域に関連付けられるデータの少なくともいくつかは、少なくとも１つの他のノードから取り込まれる、デノイザとを有する第１のノードとを備える。【選択図】図２２
2020102195.tif 000002
【特許請求の範囲】
【請求項１】
レイトレーシングオペレーションを実行する複数のノードと、
前記複数のノードにグラフィックスワークをディスパッチするディスパッチャノードであって、各ノードは、前記グラフィックスワークにより特定される画像フレームの領域をレンダリングするようにレイトレーシングを実行する、ディスパッチャノードと、
前記複数のノードのうちの少なくとも第１のノードであって、
前記画像フレームの第１の領域をレンダリングするようにレイトレーシングを実行するレイトレーシングレンダラと、
前記第１の領域に関連付けられるデータと、前記第１の領域の外側の領域に関連付けられるデータとの組み合わせを用いて前記第１の領域のノイズ除去を実行するデノイザであって、前記第１の領域の外側の前記領域に関連付けられる前記データの少なくともいくつかは、少なくとも１つの他のノードから取り込まれる、デノイザと
を有する少なくとも第１のノードと
を備えるシステム。
【請求項２】
前記複数のノード及び前記ディスパッチャノードに前記第１のノードを結合する高速ネットワーク、バス又は相互接続
をさらに備える、請求項１に記載のシステム。
【請求項３】
前記デノイザは、前記第１の領域及び前記第１の領域の外側の前記領域に関連付けられる前記データを用いて第１のノイズ除去領域を生成する、請求項１又は２に記載のシステム。
【請求項４】
前記デノイザは、前記第１の領域及び前記第１の領域の外側の前記領域に関連付けられる前記データを評価して前記第１の領域のノイズ除去を実行する機械学習エンジンを含む、請求項３に記載のシステム。
【請求項５】
前記機械学習エンジンは、訓練された重みのセットに基づいて、前記第１の領域及び前記第１の領域の外側の前記領域に関連付けられる前記データを評価する畳み込みニューラルネットワーク回路及びロジックを有する、請求項４に記載のシステム。
【請求項６】
前記第１のノードは、前記複数のノードのうちの１又は複数及び／又は前記ディスパッチャノードから前記訓練された重みのセットの少なくとも一部を受信する、請求項５に記載のシステム。
【請求項７】
前記第１の領域に関連付けられる前記データの少なくとも一部を用いてランタイム訓練を実行することに応じて、前記訓練された重みのセットに対する更新を実行して、前記他のノードのうちの１又は複数及び／又は前記ディスパッチャノードに前記更新を通信する前記機械学習エンジンの訓練回路及び／又はロジック
をさらに備える、請求項６に記載のシステム。
【請求項８】
前記第１のノードは、
前記第１の領域及び／又は前記第１の領域の外側の前記領域に関連付けられる前記データの少なくとも一部を、第２のノードに伝送する前に圧縮して、圧縮したデータを生成するコンプレッサ／デコンプレッサをさらに備える、請求項１から７のいずれか一項に記載のシステム。
【請求項９】
前記第１のノードは、前記第２のノードからの要求に従って、前記第２のノードに前記圧縮したデータを伝送する、請求項８に記載のシステム。
【請求項１０】
前記複数のノード及び前記ディスパッチャノードの各ノードは、レイトレーシングを実行する前記レイトレーシングレンダラを含む少なくとも１つのグラフィックス処理ユニット（ＧＰＵ）を有する、請求項１から９のいずれか一項に記載のシステム。
【請求項１１】
前記レイトレーシングレンダラ及び前記デノイザは、ＧＰＵの回路及びＧＰＵにより実行されるソフトウェアの組み合わせを有する、請求項１０に記載のシステム。
【請求項１２】
レイトレーシンググラフィックスワークを複数のノードにディスパッチする段階と、
画像フレームの第１の領域をレンダリングするように第１のノード上でレイトレーシングオペレーションを実行する段階と、
前記複数のノードのうちの１又は複数の他のノードから、前記第１の領域の外側の領域に関連付けられるデータを要求する段階と、
前記第１の領域に関連付けられるデータと、前記第１の領域の外側の前記領域に関連付けられる前記データとの組み合わせを用いて前記第１の領域をノイズ除去する段階と
を備える方法。
【請求項１３】
前記第１のノードに結合される高速ネットワーク、バス又は相互接続を介して前記第１の領域の外側の前記領域に関連付けられる前記データを受信する段階
をさらに備える、請求項１２に記載の方法。
【請求項１４】
ノイズ除去する段階は、前記第１の領域及び前記第１の領域の外側の前記領域に関連付けられる前記データを用いて第１のノイズ除去領域を生成する段階をさらに有する、請求項１２又は１３に記載の方法。
【請求項１５】
ノイズ除去する段階は、前記第１の領域及び前記第１の領域の外側の前記領域に関連付けられる前記データを評価するように機械学習を実行して、前記第１の領域のノイズ除去を実行する段階をさらに有する、請求項１４に記載の方法。
【請求項１６】
機械学習を実行する段階は、訓練された重みのセットに基づいて、前記第１の領域及び前記第１の領域の外側の前記領域に関連付けられる前記データを評価する段階を有する、請求項１５に記載の方法。
【請求項１７】
前記第１のノードは、前記複数のノードのうちの１又は複数から前記訓練された重みのセットの少なくとも一部を受信する、請求項１６に記載の方法。
【請求項１８】
前記第１の領域に関連付けられる前記データの少なくとも一部を用いてランタイム訓練を実行する段階と、
それに応じて、前記訓練された重みのセットに対する更新を実行する段階と、
前記１又は複数の他のノードのうちの１又は複数及び／又はディスパッチャノードに前記更新を通信する段階と
をさらに備える、請求項１７に記載の方法。
【請求項１９】
前記第１のノードは、
前記第１の領域及び／又は前記第１の領域の外側の前記領域に関連付けられる前記データの少なくとも一部を圧縮して、圧縮したデータを生成することをさらに有する、請求項１２から１８のいずれか一項に記載の方法。
【請求項２０】
前記第１のノードは、
第２のノードからの要求の受信に従って、前記第２のノードに前記圧縮したデータを伝送することをさらに有する、請求項１９に記載の方法。
【請求項２１】
前記複数のノードの各ノードは、前記レイトレーシングオペレーションを実行するレイトレーシングレンダラを有する少なくとも１つのグラフィックス処理ユニット（ＧＰＵ）を有する、請求項１２から２０のいずれか一項に記載の方法。
【請求項２２】
前記ＧＰＵは、前記ノイズ除去を実行するノイズ除去回路及び／又はロジックをさらに有する、請求項２１に記載の方法。
【請求項２３】
マシンに
複数のノードのうちの第１のノードにおいて、レイトレーシンググラフィックスワークを受信する手順と、
画像フレームの第１の領域をレンダリングするように、前記第１のノード上でレイトレーシングオペレーションを実行する手順と、
前記複数のノードのうちの１又は複数の他のノードから、前記第１の領域の外側の領域に関連付けられるデータを要求する手順と、
前記第１の領域に関連付けられるデータと、前記第１の領域の外側の前記領域に関連付けられる前記データとの組み合わせを用いて前記第１の領域をノイズ除去する手順と
を実行させるためのプログラム。
【請求項２４】
前記マシンに、
前記第１のノードに結合される高速ネットワーク、バス又は相互接続を介して、前記第１の領域の外側の前記領域に関連付けられる前記データを受信する手順
を実行させる、請求項２３に記載のプログラム。
【請求項２５】
請求項２３又は２４に記載のプログラムを格納するコンピュータ可読記憶媒体。
【請求項２６】
レイトレーシンググラフィックスワークを複数のノードにディスパッチする手段と、
画像フレームの第１の領域をレンダリングするように、第１のノードに対してレイトレーシングオペレーションを実行する手段と、
前記複数のノードのうちの１又は複数の他のノードから前記第１の領域の外側の領域に関連付けられるデータを要求する手段と、
前記第１の領域に関連付けられるデータと、前記第１の領域の外側の前記領域に関連付けられるデータとの組み合わせを用いて前記第１の領域のノイズ除去を実行する手段と
を備える装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、概してグラフィックスプロセッサの分野に関する。より具体的には、本発明は、（例えば、レイトレーシングシステムにおける）グラフィックスフレームの効率的な分散型ノイズ除去を実行するための装置及び方法に関する。
【背景技術】
【０００２】
レイトレーシングは、物理ベースのレンダリングを通じて光輸送がシミュレーションされる技術である。映画のレンダリングにおいて広く用いられているが、ほんの数年前まではリアルタイムの性能のために、あまりにもリソースが集中し過ぎると考えられていた。レイトレーシングの重要な演算のうちの１つは、バウンディングボリューム階層（ＢＶＨ）において横断及び交差するノードにより、レイ−シーンインターセクションを算出する「レイトラバーサル」として知られるレイ−シーンインターセクションのための可視性クエリを処理することである。
【０００３】
ノイズ除去は、滑らかでノイズのない画像でリアルタイムレイトレーシングするための重要な機能になってきている。レンダリングは、複数のデバイス上の分散型システムわたって行われ得るが、今までのところ、既存のノイズ除去のフレームワークはすべて、単一のマシン上の単一のインスタンスに対して動作する。
【０００４】
複数のデバイスにわたってレンダリングが行われる場合、それらは、画像のノイズ除去される部分を計算するためにアクセス可能なピクセルをすべてレンダリングすることができない可能性がある。
【図面の簡単な説明】
【０００５】
本発明のより良好な理解は、以下の図面と共に以下の詳細な説明から得ることができる。
【０００６】
【図１】１又は複数のプロセッサコア及びグラフィックスプロセッサを有するプロセッサを備えるコンピュータシステムの実施形態についてのブロック図である。
【０００７】
【図２】１又は複数のプロセッサコア、統合メモリコントローラ及び統合グラフィックスプロセッサを有するプロセッサの一実施形態についてのブロック図である。
【０００８】
【図３】別個のグラフィックス処理ユニットであり得る、又は、複数のプロセッシングコアと統合されるグラフィックスプロセッサであり得るグラフィックスプロセッサの一実施形態についてのブロック図である。
【０００９】
【図４】グラフィックスプロセッサ用のグラフィックス処理エンジンの実施形態についてのブロック図である。
【００１０】
【図５】グラフィックスプロセッサの別の実施形態についてのブロック図である。
【００１１】
【図６Ａ】実行回路及びロジックの例を示す。
【図６Ｂ】実行回路及びロジックの例を示す。
【００１２】
【図７】実施形態に係るグラフィックスプロセッサ実行ユニット命令フォーマットを示す。
【００１３】
【図８】グラフィックスパイプライン、メディアパイプライン、ディスプレイエンジン、スレッド実行ロジック及びレンダリング出力パイプラインを含むグラフィックスプロセッサの別の実施形態についてのブロック図である。
【００１４】
【図９Ａ】実施形態に係るグラフィックスプロセッサコマンドフォーマットを示すブロック図である。
【００１５】
【図９Ｂ】実施形態に係るグラフィックスプロセッサコマンドシーケンスを示すブロック図である。
【００１６】
【図１０】実施形態に係るデータ処理システム用の例示的なグラフィックスソフトウェアアーキテクチャを示す。
【００１７】
【図１１Ａ】集積回路を製造するために用いられ得る例示的なＩＰコア開発システムを示す。
【図１１Ｂ】例示的なパッケージアセンブリを示す。
【００１８】
【図１２】実施形態に係る、１又は複数のＩＰコアを用いて製造され得るチップ集積回路上の例示的なシステムを示す。
【００１９】
【図１３Ａ】１又は複数のＩＰコアを用いて製造され得るチップ集積回路上のシステムの例示的なグラフィックスプロセッサを示す。
【図１３Ｂ】１又は複数のＩＰコアを用いて製造され得るチップ集積回路上のシステムの例示的なグラフィックスプロセッサを示す。
【００２０】
【図１４Ａ】例示的なグラフィックスプロセッサアーキテクチャを示す。
【図１４Ｂ】例示的なグラフィックスプロセッサアーキテクチャを示す。
【００２１】
【図１５】機械学習アーキテクチャの初期訓練を実行するためのアーキテクチャの一実施形態を示す。
【００２２】
【図１６】機械学習エンジンがランタイム中に継続的に訓練及び更新される一実施形態を示す。
【００２３】
【図１７】機械学習エンジンがランタイム中に継続的に訓練及び更新される別の実施形態を示す。
【００２４】
【図１８Ａ】機械学習データがネットワーク上で共有される実施形態を示す。
【図１８Ｂ】機械学習データがネットワーク上で共有される実施形態を示す。
【００２５】
【図１９】機械学習エンジンを訓練するための方法の一実施形態を示す。
【００２６】
【図２０】ノードが、分散型ノイズ除去オペレーションを実行するためにゴースト領域データを交換する一実施形態を示す。
【００２７】
【図２１】画像レンダリング及びノイズ除去オペレーションが複数のノードにわたって分散されるアーキテクチャの一実施形態を示す。
【００２８】
【図２２】分散型レンダリング及びノイズ除去のためのアーキテクチャについてのさらなる詳細を示す。
【００２９】
【図２３】本発明の一実施形態に係る方法を示す。
【００３０】
【図２４】機械学習ソフトウェアスタックの一般化された図である。
【００３１】
【図２５】実施形態に係るマルチＧＰＵコンピューティングシステム２５００を示す。
【００３２】
【図２６】例示的な畳み込みニューラルネットワークを示す。
【図２７Ａ】例示的な畳み込みニューラルネットワークを示す。
【図２７】例示的な畳み込みニューラルネットワークを示す。
【００３３】
【図２８】例示的な再帰型ニューラルネットワークを示す。
【００３４】
【図２９】ディープニューラルネットワークの訓練及び展開を示す。
【００３５】
【図３０】分散型学習を示すブロック図である。
【００３６】
【図３１】訓練されたモデルを用いて推論を実行するのに適している例示的な推論システムオンチップ（ＳｏＣ）を示す。
【発明を実施するための形態】
【００３７】
以下の説明では、説明の目的で、以下に説明される本発明の実施形態の全体的な理解を提供するために多くの具体的な詳細が記載されている。しかしながら、本発明の実施形態がこれらの具体的な詳細のいくつかを用いずに実施されてもよいことが当業者には明らかであろう。他の例では、本発明の実施形態の基礎となる原理が曖昧になることを回避するために、周知の構造及びデバイスがブロック図の形式で示されている。
例示的なグラフィックスプロセッサアーキテクチャ及びデータタイプ
システム概要
【００３８】
図１は、実施形態に係る処理システム１００のブロック図である。様々な実施形態において、システム１００は、１又は複数のプロセッサ１０２及び１又は複数のグラフィックスプロセッサ１０８を含み、シングルプロセッサデスクトップシステム、マルチプロセッサワークステーションシステム又は多数のプロセッサ１０２又はプロセッサコア１０７を有するサーバシステムであってよい。一実施形態において、システム１００は、モバイル、ハンドヘルド又は埋め込み型デバイスでの使用のためのシステムオンチップ（ＳｏＣ）集積回路内に組み込まれる処理プラットフォームである。
【００３９】
一実施形態において、システム１００は、ゲーム及びメディアコンソール、モバイルゲームコンソール、ハンドヘルドゲームコンソール又はオンラインゲームコンソールを含むゲームコンソールを含み得る、又は、これらがサーバベースのゲームプラットフォーム内に組み込まれ得る。いくつかの実施形態において、システム１００は、携帯電話、スマートフォン、タブレットコンピューティングデバイス又はモバイルインターネットデバイスである。処理システム１００はまた、ウェアラブルデバイス、例えば、スマートウォッチウェアラブルデバイス、スマートアイウェアデバイス、拡張現実デバイス又は仮想現実デバイスを含み得る、これらと結合し得る、又は、これら内に統合され得る。いくつかの実施形態において、処理システム１００は、１又は複数のプロセッサ１０２と、１又は複数のグラフィックスプロセッサ１０８により生成されるグラフィカルインタフェースとを有するテレビ又はセットトップボックスデバイスである。
【００４０】
いくつかの実施形態において、１又は複数のプロセッサ１０２はそれぞれ、実行される場合、システム及びユーザソフトウェアのための工程を実行する命令を処理する１又は複数のプロセッサコア１０７を含む。いくつかの実施形態において、１又は複数のプロセッサコア１０７のそれぞれは、特定の命令セット１０９を処理するように構成される。いくつかの実施形態において、命令セット１０９は、複合命令セットコンピューティング（ＣＩＳＣ）、縮小命令セットコンピューティング（ＲＩＳＣ）、又は、超長命令語（ＶＬＩＷ）を介したコンピューティングを促進し得る。複数のプロセッサコア１０７は、異なる命令セット１０９をそれぞれ処理してよく、他の命令セットのエミュレーションを促進する命令を含み得る。プロセッサコア１０７はまた、デジタル信号プロセッサ（ＤＳＰ）のような、他の処理デバイスを含んでよい。
【００４１】
いくつかの実施形態において、プロセッサ１０２はキャッシュメモリ１０４を含む。アーキテクチャに応じて、プロセッサ１０２は、単一の内部キャッシュ又は複数レベルの内部キャッシュを有することができる。いくつかの実施形態において、キャッシュメモリは、プロセッサ１０２の様々なコンポーネント間で共有される。いくつかの実施形態において、プロセッサ１０２はまた、外部キャッシュ（例えば、レベル３（Ｌ３）キャッシュ又はラストレベルキャッシュ（ＬＬＣ））（図示せず）を用いており、それは、既知のキャッシュコヒーレンシ技術を用いてプロセッサコア１０７間で共有され得る。レジスタファイル１０６は、さらに、データの異なるタイプを格納するために、異なるタイプのレジスタ（例えば、整数レジスタ、浮動小数点レジスタ、ステータスレジスタ及び命令ポインタレジスタ）を含み得るプロセッサ１０２に含まれる。いくつかのレジスタは、汎用レジスタであってよいが、一方、他のレジスタは、プロセッサ１０２の設計に固有のものであってもよい。
【００４２】
いくつかの実施形態において、１又は複数のプロセッサ１０２は、システム１００内のプロセッサ１０２と他のコンポーネントとの間の通信信号、例えば、アドレス、データ又は制御信号を伝送する１又は複数のインタフェースバス１１０と結合される。インタフェースバス１１０は、一実施形態において、プロセッサバス、例えば、ダイレクトメディアインタフェース（ＤＭＩ）バスのあるバージョンであり得る。しかしながら、プロセッサバスは、ＤＭＩバスに限定されることはなく、１又は複数のペリフェラルコンポーネントインターコネクトバス（例えば、ＰＣＩ、ＰＣＩ  Ｅｘｐｒｅｓｓ）、メモリバス又は他のタイプのインタフェースバスを含んでよい。一実施形態において、プロセッサ１０２は、統合メモリコントローラ１１６及びプラットフォームコントローラハブ１３０を含む。メモリコントローラ１１６は、システム１００のメモリデバイスと他のコンポーネントとの間の通信を促進し、一方、プラットフォームコントローラハブ（ＰＣＨ）１３０は、ローカルＩ／Ｏバスを介したＩ／Ｏデバイスへの接続を提供する。
【００４３】
メモリデバイス１２０は、ダイナミックランダムアクセスメモリ（ＤＲＡＭ）デバイス、スタティックランダムアクセスメモリ（ＳＲＡＭ）デバイス、フラッシュメモリデバイス、相変化メモリデバイス、又は、処理メモリとしての機能を果たすのに適した性能を有する一部の他のメモリデバイスであり得る。一実施形態において、メモリデバイス１２０は、１又は複数のプロセッサ１０２がアプリケーション又はプロセスを実行する場合の使用のためのデータ１２２及び命令１２１を格納する、システム１００用のシステムメモリとして動作し得る。メモリコントローラ１１６はまた、任意選択的な外部グラフィックスプロセッサ１１２と結合し、それは、プロセッサ１０２内の１又は複数のグラフィックスプロセッサ１０８と通信して、グラフィックス及びメディアオペレーションを実行し得る。いくつかの実施形態において、ディスプレイデバイス１１１は、プロセッサ１０２に接続され得る。ディスプレイデバイス１１１は、モバイル電子デバイス又はラップトップデバイスにあるような内部ディスプレイデバイス、又は、ディスプレイインタフェースを介して取り付けられる外部ディスプレイデバイス（例えば、ディスプレイポートなど）のうちの１又は複数であり得る。一実施形態において、ディスプレイデバイス１１１は、ヘッドマウントディスプレイ（ＨＭＤ）、例えば、仮想現実（ＶＲ）アプリケーション又は拡張現実（ＡＲ）アプリケーションでの使用のための立体表示デバイスであり得る。
【００４４】
いくつかの実施形態において、プラットフォームコントローラハブ１３０は、周辺機器が高速Ｉ／Ｏバスを介してメモリデバイス１２０及びプロセッサ１０２に接続することを可能にする。Ｉ／Ｏ周辺機器は、限定されることはないが、オーディオコントローラ１４６、ネットワークコントローラ１３４、ファームウェアインタフェース１２８、無線トランシーバ１２６、タッチセンサ１２５、データストレージデバイス１２４（例えば、ハードディスクドライブ、フラッシュメモリなど）を含む。データストレージデバイス１２４は、ストレージインタフェース（例えば、ＳＡＴＡ）を介して、又は、周辺機器バス、例えば、ペリフェラルコンポーネントインターコネクトバス（例えば、ＰＣＩ、ＰＣＩ  Ｅｘｐｒｅｓｓ）を介して接続できる。タッチセンサ１２５は、タッチスクリーンセンサ、圧力センサ又は指紋センサを含み得る。無線トランシーバ１２６は、Ｗｉ−Ｆｉ（登録商標）トランシーバ、Ｂｌｕｅｔｏｏｔｈ（登録商標）トランシーバ又はモバイルネットワークトランシーバ、例えば、３Ｇ、４Ｇ又はロングタームエボリューション（ＬＴＥ）トランシーバであり得る。ファームウェアインタフェース１２８は、システムファームウェアとの通信を可能にし、例えば、ユニファイド・エクステンシブル・ファームウェア・インタフェース（ＵＥＦＩ）であり得る。ネットワークコントローラ１３４は、有線ネットワークに対するネットワーク接続を可能にし得る。いくつかの実施形態において、高性能ネットワークコントローラ（図示せず）は、インタフェースバス１１０と結合する。オーディオコントローラ１４６は、一実施形態において、マルチチャネル高解像度オーディオコントローラである。一実施形態において、システム１００は、レガシ（例えば、Ｐｅｒｓｏｎａｌ  Ｓｙｓｔｅｍ  ２（ＰＳ／２））デバイスをシステムに結合するための任意選択的なレガシＩ／Ｏコントローラ１４０を含む。プラットフォームコントローラハブ１３０はまた、１又は複数のユニバーサルシリアルバス（ＵＳＢ）コントローラ１４２接続入力デバイス、例えば、キーボード及びマウス１４３の組み合わせ、カメラ１４４又は他のＵＳＢ入力デバイスに接続し得る。
【００４５】
異なって構成される他のタイプのデータ処理システムも用いられてよいので、示されるシステム１００は、例示であり、限定するものではないことが理解されるであろう。例えば、メモリコントローラ１１６及びプラットフォームコントローラハブ１３０の例は、別個の外部グラフィックスプロセッサ、例えば、外部グラフィックスプロセッサ１１２へと統合されてよい。一実施形態において、プラットフォームコントローラハブ１３０及び／又はメモリコントローラ１１６は、１又は複数のプロセッサ１０２の外部にあってよい。例えば、システム１００は、外部のメモリコントローラ１１６及びプラットフォームコントローラハブ１３０を含み得、それらはプロセッサ１０２と通信するシステムチップセット内のメモリコントローラハブ及び周辺機器コントローラハブとして構成されてもよい。
【００４６】
図２は、１又は複数のプロセッサコア２０２Ａ−２０２Ｎ、統合メモリコントローラ２１４及び統合グラフィックスプロセッサ２０８を有するプロセッサ２００の実施形態についてのブロック図である。本明細書における任意の他の図面の要素と同じ参照番号（又は名称）を有する図２のこれらの要素は、本明細書においてどこか他の場所で説明されるものと同様な任意の方式で動作又は機能することができるが、そのようなものに限定されることはない。プロセッサ２００は、最大で破線の枠により表される追加のコア２０２Ｎまでを含む追加のコアを含み得る。プロセッサコア２０２Ａ−２０２Ｎのそれぞれは、１又は複数の内部キャッシュユニット２０４Ａ−２０４Ｎを含む。いくつかの実施形態において、各プロセッサコアはまた、１又は複数の共有キャッシュユニット２０６へのアクセスを有する。
【００４７】
内部キャッシュユニット２０４Ａ−２０４Ｎ及び共有キャッシュユニット２０６は、プロセッサ２００内のキャッシュメモリ階層を表す。キャッシュメモリ階層は、各プロセッサコア内の命令及びデータキャッシュの少なくとも１つのレベル、及び、共有される中間レベルのキャッシュ、例えば、キャッシュのレベル２（Ｌ２）、レベル３（Ｌ３）、レベル４（Ｌ４）、又は、外部メモリがＬＬＣとして分類される前のキャッシュの最高レベルである他のレベルのうちの１又は複数のレベルを含んでよい。いくつかの実施形態において、キャッシュコヒーレンシロジックは、様々なキャッシュユニット２０６及び２０４Ａ−２０４Ｎ間のコヒーレンシを維持する。
【００４８】
いくつかの実施形態において、プロセッサ２００は、１又は複数のバスコントローラユニット２１６のセット及びシステムエージェントコア２１０を含んでもよい。１又は複数のバスコントローラユニット２１６は、周辺機器バスのセット、例えば、１又は複数のＰＣＩ又はＰＣＩ  Ｅｘｐｒｅｓｓバスを管理する。システムエージェントコア２１０は、様々なプロセッサコンポーネントに管理機能を提供する。いくつかの実施形態において、システムエージェントコア２１０は、様々な外部メモリデバイス（図示せず）へのアクセスを管理する１又は複数の統合メモリコントローラ２１４を含む。
【００４９】
いくつかの実施形態において、プロセッサコア２０２Ａ−２０２Ｎの１又は複数は、同時マルチスレッディングに対するサポートを含む。そのような実施形態において、システムエージェントコア２１０は、マルチスレッド処理中にコア２０２Ａ−２０２Ｎを協調及び動作させるためのコンポーネントを含む。システムエージェントコア２１０は、パワーコントロールユニット（ＰＣＵ）をさらに含んでよく、ＰＣＵは、プロセッサコア２０２Ａ−２０２Ｎ及びグラフィックスプロセッサ２０８の電力状態を調整するロジック及びコンポーネントを含む。
【００５０】
いくつかの実施形態において、プロセッサ２００は、グラフィックス処理オペレーションを実行するグラフィックスプロセッサ２０８をさらに含む。いくつかの実施形態において、グラフィックスプロセッサ２０８は、共有キャッシュユニット２０６のセットと結合し、かつ、１又は複数の統合メモリコントローラ２１４を含むシステムエージェントコア２１０と結合する。いくつかの実施形態において、システムエージェントコア２１０はまた、１又は複数の結合されたディスプレイへのグラフィックスプロセッサ出力を駆動するディスプレイコントローラ２１１を含む。いくつかの実施形態において、ディスプレイコントローラ２１１は、少なくとも１つの相互接続を介してグラフィックスプロセッサと結合される別個のモジュールであってもよい、又は、グラフィックスプロセッサ２０８内に統合されてもよい。
【００５１】
いくつかの実施形態において、リングベースの相互接続ユニット２１２は、プロセッサ２００の内部コンポーネントを結合するために用いられる。しかしながら、代替の相互接続ユニットは、例えば、ポイントツーポイント相互接続、スイッチ型相互接続又は当技術分野で周知の技術を含む他の技術が用いられてもよい。いくつかの実施形態において、グラフィックスプロセッサ２０８は、Ｉ／Ｏリンク２１３を介してリング相互接続２１２と結合する。
【００５２】
例示的なＩ／Ｏリンク２１３は、様々なプロセッサコンポーネントと、ｅＤＲＡＭモジュールなどの高性能埋め込み型メモリモジュール２１８との間の通信を容易にするオンパッケージＩ／Ｏ相互接続を含む複数の様々なＩ／Ｏ相互接続のうちの少なくとも１つを表す。いくつかの実施形態において、プロセッサコア２０２Ａ−２０２Ｎのそれぞれ及びグラフィックスプロセッサ２０８は、共有のラストレベルキャッシュとして埋め込み型メモリモジュール２１８を用いる。
【００５３】
いくつかの実施形態において、プロセッサコア２０２Ａ−２０２Ｎは、同じ命令セットアーキテクチャを実行するホモジニアスコアである。別の実施形態では、プロセッサコア２０２Ａ−２０２Ｎは、命令セットアーキテクチャ（ＩＳＡ）の観点からヘテロジニアスであり、プロセッサコア２０２Ａ−２０２Ｎの１又は複数が第１の命令セットを実行し、一方、他のコアのうちの少なくとも１つが第１の命令セットのサブセット又は異なる命令セットを実行する。一実施形態において、プロセッサコア２０２Ａ−２０２Ｎは、マイクロアーキテクチャの観点からヘテロジニアスであり、相対的に消費電力が高い１又は複数のコアは、消費電力が少ない１又は複数の電力コアと結合する。さらに、プロセッサ２００は、１又は複数のチップ上に実装され得る、又は、他のコンポーネントに加えて図示されるコンポーネントを有するＳｏＣ集積回路として実装され得る。
【００５４】
図３は、グラフィックスプロセッサ３００のブロック図であり、グラフィックスプロセッサ３００は、ディスクリートグラフィックス処理ユニットであってよい、又は、複数のプロセッシングコアと統合されたグラフィックスプロセッサであってよい。いくつかの実施形態において、グラフィックスプロセッサは、グラフィックスプロセッサ上のレジスタへのメモリマッピング型Ｉ／Ｏインタフェースを介して、プロセッサメモリ内に置かれるコマンドを用いて通信する。いくつかの実施形態において、グラフィックスプロセッサ３００は、メモリにアクセスするメモリインタフェース３１４を含む。メモリインタフェース３１４は、ローカルメモリ、１又は複数の内部キャッシュ、１又は複数の共有外部キャッシュへのインタフェース、及び／又は、システムメモリへのインタフェースであり得る。
【００５５】
いくつかの実施形態において、グラフィックスプロセッサ３００はまた、ディスプレイ出力データをディスプレイデバイス３２０に送るディスプレイコントローラ３０２を含む。ディスプレイコントローラ３０２は、ビデオ又はユーザインタフェース要素の複数の層の表示及び合成に関する１又は複数のオーバレイプレーン用のハードウェアを含む。ディスプレイデバイス３２０は、内部又は外部ディスプレイデバイスであり得る。一実施形態において、ディスプレイデバイス３２０は、ヘッドマウントディスプレイデバイス、例えば、仮想現実（ＶＲ）ディスプレイデバイス又は拡張現実（ＡＲ）ディスプレイデバイスである。いくつかの実施形態において、グラフィックスプロセッサ３００は、限定されることはないが、ＭＰＥＧ−２などのムービングピクチャエキスパーツグループ（ＭＰＥＧ）フォーマット、Ｈ．２６４／ＭＰＥＧ−４  ＡＶＣなどのアドバンスドビデオコーティング（ＡＶＣ）フォーマット、並びに、米国映画テレビ技術者協会（ＳＭＰＴＥ）４２１Ｍ／ＶＣ−１、及び、ＪＰＥＧなどのジョイントフォトグラフィックエキスパートグループ（ＪＰＥＧ）フォーマット、及び、モーションＪＰＥＧ（ＭＪＰＥＧ）フォーマットを含む１又は複数のメディアエンコードフォーマットに、当該メディアエンコードフォーマットから、又は、当該メディアエンコードフォーマット間でメディアをエンコード、デコード又はトランスコードするビデオコーデックエンジン３０６を含む。
【００５６】
いくつかの実施形態において、グラフィックスプロセッサ３００は、例えば、ビット境界ブロック転送を含む２次元（２Ｄ）ラスタライザオペレーションを実行するブロック画像転送（ＢＬＩＴ）エンジン３０４を含む。しかしながら、一実施形態において、２Ｄグラフィックスオペレーションは、グラフィックス処理エンジン（ＧＰＥ）３１０の１又は複数のコンポーネントを用いて実行される。いくつかの実施形態において、ＧＰＥ３１０は、３次元（３Ｄ）グラフィックスオペレーション及びメディアオペレーションを含むグラフィックスオペレーションを実行するためのコンピュートエンジンである。
【００５７】
いくつかの実施形態において、ＧＰＥ３１０は、例えば、３Ｄプリミティブの形状（例えば、矩形、三角形など）に作用する処理機能を用いて３次元画像及びシーンをレンダリングする３Ｄ演算を実行するための３Ｄパイプライン３１２を含む。３Ｄパイプライン３１２は、要素内の様々なタスク実行するプログラム可能な固定機能要素、及び／又は、３Ｄ／メディアサブシステム３１５に対するスポーン実行スレッドを含む。一方、３Ｄパイプライン３１２は、メディアオペレーションを実行するために用いられ得、ＧＰＥ３１０の実施形態はまた、具体的には、メディアオペレーション、例えば、ビデオ投稿処理及び画像処理を実行するために用いられるメディアパイプライン３１６を含む。
【００５８】
いくつかの実施形態において、メディアパイプライン３１６は、ビデオコーデックエンジン３０６の代わりに、又は、ビデオコーデックエンジン３０６を代表して、１又は複数の専用のメディアオペレーション、例えば、ビデオデコードアクセラレーション、ビデオインターレース解除及びビデオエンコードアクセラレーションを実行する固定機能又はプログラマブル論理ユニットを含む。いくつかの実施形態において、メディアパイプライン３１６は、３Ｄ／メディアサブシステム３１５上での実行のためのスレッドをスポーンするスレッドスポーニングユニットをさらに含む。スポーンされたスレッドは、３Ｄ／メディアサブシステム３１５に含まれる１又は複数のグラフィックス実行ユニット上でのメディアオペレーションに関する計算を実行する。
【００５９】
いくつかの実施形態において、３Ｄ／メディアサブシステム３１５は、３Ｄパイプライン３１２及びメディアパイプライン３１６によりスポーンされたスレッドを実行するためのロジックを含む。一実施形態において、これらのパイプラインは、スレッド実行要求を３Ｄ／メディアサブシステム３１５に送信し、利用可能なスレッド実行リソースに様々な要求をアービトレート及びディスパッチするためのスレッドディスパッチロジックを含む。実行リソースは、３Ｄ及びメディアスレッドを処理するグラフィックス実行ユニットのアレイを含む。いくつかの実施形態において、３Ｄ／メディアサブシステム３１５は、スレッド命令及びデータのための１又は複数の内部キャッシュを含む。いくつかの実施形態において、サブシステムはまた、スレッド間のデータを共有し、出力データを格納するレジスタ及びアドレス可能なメモリを含む共有メモリを含む。
【００６０】
グラフィックス処理エンジン
【００６１】
図４は、いくつかの実施形態に係るグラフィックスプロセッサのグラフィックス処理エンジン４１０のブロック図である。一実施形態において、グラフィックス処理エンジン（ＧＰＥ）４１０は、図３に示されるＧＰＥ３１０のバージョンである。本明細書における任意の他の図面の要素と同じ参照番号（又は名称）を有する図４の要素は、本明細書においてどこか他の場所で説明されるものと同様な任意の方式で動作又は機能することができるが、そのようなものに限定されることはない。例えば、図３の３Ｄパイプライン３１２及びメディアパイプライン３１６が図示されている。ＧＰＥ４１０のいくつかの実施形態において、メディアパイプライン３１６は任意選択的であり、ＧＰＥ４１０内に明示的に含まれていなくてもよい。例えば、少なくとも１つの実施形態において、別個の媒体及び／又はイメージプロセッサがＧＰＥ４１０に結合される。
【００６２】
いくつかの実施形態において、ＧＰＥ４１０は、コマンドストリーマ４０３と結合し、又は、コマンドストリーマ４０３を含み、コマンドストリーマ４０３は、３Ｄパイプライン３１２及び／又はメディアパイプライン３１６にコマンドストリームを提供する。いくつかの実施形態において、コマンドストリーマ４０３はメモリと結合され、メモリは、システムメモリであり得る、又は、内部キャッシュメモリ及び共有キャッシュメモリのうちの１又は複数であり得る。いくつかの実施形態において、コマンドストリーマ４０３は、メモリからコマンドを受信し、３Ｄパイプライン３１２及び／又はメディアパイプライン３１６にコマンドを送信する。コマンドは、リングバッファからフェッチされるディレクティブであり、３Ｄパイプライン３１２及びメディアパイプライン３１６に対するコマンドを格納する。一実施形態において、リングバッファは、複数のコマンドのバッチを格納するバッチコマンドバッファをさらに含み得る。３Ｄパイプライン３１２に対するコマンドはまた、メモリに格納されるデータ、例えば、限定されることはないが、３Ｄパイプライン３１２に対する頂点及びジオメトリデータ、及び／又は、メディアパイプライン３１６に対する画像データ及びメモリオブジェクトへの参照を含むことができる。３Ｄパイプライン３１２及びメディアパイプライン３１６は、各パイプライン内のロジックを介してオペレーションを実行することにより、又は、１又は複数の実行スレッドをグラフィックスコアアレイ４１４にディスパッチすることにより、コマンド及びデータを処理する。一実施形態において、グラフィックスコアアレイ４１４は、グラフィックスコアの１又は複数のブロック（例えば、グラフィックスコア４１５Ａ、グラフィックスコア４１５Ｂ）を含み、各ブロックは１又は複数のグラフィックスコアを含む。各グラフィックスコアは、グラフィックス及び計算操作、並びに、固定機能テクスチャ処理を実行する汎用及びグラフィックス固有の実行ロジック、及び／又は、機械学習及び人工知能アクセラレーションロジックを含むグラフィックス実行リソースのセットを含む。
【００６３】
様々な実施形態において、３Ｄパイプライン３１２は、命令を処理して、実行スレッドをグラフィックスコアアレイ４１４にディスパッチすることにより、１又は複数のシェーダプログラム、例えば、頂点シェーダ、ジオメトリシェーダ、ピクセルシェーダ、フラグメントシェーダ、コンピュートシェーダ又は他のシェーダプログラムを処理する固定機能及びプログラマブルロジックを含む。グラフィックスコアアレイ４１４は、これらのシェーダプログラムの処理での使用のために実行リソースの統合されたブロックを提供する。グラフィックスコアアレイ４１４のグラフィックスコア４１５Ａ−４１４Ｂ内の多目的実行ロジック（例えば、実行ユニット）は、様々な３Ｄ  ＡＰＩシェーダ言語に対するサポートを含み、複数のシェーダに関連付けられる複数の同時実行スレッドを実行することができる。
【００６４】
いくつかの実施形態において、グラフィックスコアアレイ４１４はまた、メディア機能、例えば、ビデオ及び／又は画像処理を実行する実行ロジックを含む。一実施形態において、実行ユニットは、グラフィックス処理オペレーションに加えて、並列の汎用計算操作を実行するようにプログラム可能な汎用ロジックをさらに含む。汎用ロジックは、図１のプロセッサコア１０７又は図２に示すようなコア２０２Ａ−２０２Ｎ内の汎用ロジックと並列に、又は、これらと共に処理動作を実行できる。
【００６５】
グラフィックスコアアレイ４１４上で実行するスレッドにより生成される出力データは、統合リターンバッファ（ＵＲＢ）４１８内のメモリにデータを出力できる。ＵＲＢ４１８は、複数のスレッドに対するデータを格納できる。いくつかの実施形態において、ＵＲＢ４１８は、グラフィックスコアアレイ４１４上で実行する異なるスレッド間のデータを送信するために用いられてよい。いくつかの実施形態において、ＵＲＢ４１８は、グラフィックスコアアレイ上及び共有機能ロジック４２０内の固定機能ロジック上のスレッド間の同期のためにさらに用いられてよい。
【００６６】
いくつかの実施形態において、グラフィックスコアアレイ４１４はスケーラブルであり、当該アレイは、可変数のグラフィックスコアを含み、それぞれがＧＰＥ４１０の目標電力及び性能レベルに基づいて可変数の実行ユニットを有する。一実施形態において、実行リソースは、動的にスケーラブルであり、実行リソースは、必要に応じてイネーブル又はディセーブルにされてよい。
【００６７】
グラフィックスコアアレイ４１４は、グラフィックスコアアレイ内のグラフィックスコア間で共有される複数のリソースを含む共有機能ロジック４２０と結合する。共有機能ロジック４２０内の共有機能は、専用の補足的な機能をグラフィックスコアアレイ４１４に提供するハードウェアロジックユニットである。様々な実施形態において、共有機能ロジック４２０は、サンプラ４２１、数学４２２及びスレッド間通信（ＩＴＣ）４２３ロジックを含むが、これらに限定されることはない。さらに、いくつかの実施形態では、共有機能ロジック４２０内に１又は複数のキャシュ４２５を実装する。
【００６８】
共有機能は、所与の専用の機能に対する需要がグラフィックスコアアレイ４１４内に含めるには不十分な場合に実装される。代わりに、その専用の機能の単一のインスタンス化が、共有機能ロジック４２０内のスタンドアロンエンティティとして実装され、グラフィックスコアアレイ４１４内の実行リソース間で共有される。グラフィックスコアアレイ４１４間で共有され、かつ、グラフィックスコアアレイ４１４内に含まれる機能の正確なセットは、実施形態にわたって変化する。いくつかの実施形態において、グラフィックスコアアレイ４１４により広く用いられる共有機能ロジック４２０内の特定の共有機能は、グラフィックスコアアレイ４１４内の共有機能ロジック４１６に含まれてよい。様々な実施形態において、グラフィックスコアアレイ４１４内の共有機能ロジック４１６は、共有機能ロジック４２０内の一部又はすべてのロジックを含み得る。一実施形態において、共有機能ロジック４２０内のすべてのロジック要素は、グラフィックスコアアレイ４１４の共有機能ロジック４１６内で重複してよい。一実施形態では、グラフィックスコアアレイ４１４内の共有機能ロジック４１６を優先して、共有機能ロジック４２０が除外される。
【００６９】
図５は、本明細書において説明されるいくつかの実施形態に係るグラフィックスプロセッサコア５００のハードウェアロジックについてのブロック図である。本明細書における任意の他の図面の要素と同じ参照番号（又は名称）を有する図５の要素は、本明細書においてどこか他の場所で説明されるものと同様な任意の方式で動作又は機能することができるが、そのようなものに限定されることはない。図示されるグラフィックスプロセッサコア５００は、いくつかの実施形態において、図４のグラフィックスコアアレイ４１４に含まれる。グラフィックスプロセッサコア５００は、コアスライスと称されることがあり、モジュールグラフィックスプロセッサ内の１又は複数のグラフィックスコアであり得る。グラフィックスプロセッサコア５００は、１つのグラフィックスコアスライスを例示したものであり、グラフィックスプロセッサは、本明細書において説明されるように、目標電力及び性能限界に基づいて複数のグラフィックスコアスライスを含んでよい。各グラフィックスプロセッサコア５００は、汎用及び固定機能ロジックのモジュールブロックを含むサブスライスとも称される複数のサブコア５０１Ａ−５０１Ｆと結合される固定機能ブロック５３０を含み得る。
【００７０】
いくつかの実施形態において、固定機能ブロック５３０は、例えば、低性能及び／又は低電力のグラフィックスプロセッサ実装において、グラフィックスプロセッサコア５００内のすべてのサブコアにより共有され得るジオメトリ／固定機能パイプライン５３６を含む。様々な実施形態では、ジオメトリ／固定機能パイプライン５３６は、３Ｄ固定機能パイプライン（例えば、図３及び図４に示すような３Ｄパイプライン３１２）、ビデオフロントエンドユニット、スレッドスポーナー及びスレッドディスパッチャ、並びに、統合リターンバッファ、例えば、図４の統合リターンバッファ４１８を管理する統合リターンバッファマネージャを含む。
【００７１】
一実施形態において、固定機能ブロック５３０はまた、グラフィックスＳｏＣインタフェース５３７、グラフィックスマイクロコントローラ５３８及びメディアパイプライン５３９を含む。グラフィックスＳｏＣインタフェース５３７は、グラフィックスプロセッサコア５００と、チップ集積回路上のシステム内の他のプロセッサコアとの間のインタフェースを提供する。グラフィックスマイクロコントローラ５３８は、スレッドディスパッチ、スケジューリング及びプリエンプションを含む、グラフィックスプロセッサコア５００の様々な機能を管理するように構成可能なプログラマブルサブプロセッサである。メディアパイプライン５３９（例えば、図３及び図４のメディアパイプライン３１６）は、画像及びビデオデータを含むマルチメディアデータのデコード、エンコード、事前処理及び／又は事後処理を容易にするロジックを含む。メディアパイプライン５３９は、サブコア５０１Ａ−５０１Ｆ内のコンピュート又はサンプリングロジックへの要求を介してメディアオペレーションを実施する。
【００７２】
一実施形態において、ＳｏＣインタフェース５３７は、共有のラストレベルキャッシュメモリなどのメモリ階層要素、システムＲＡＭ、及び／又は、埋め込み型オンチップ若しくはオンパッケージＤＲＡＭを含むＳｏＣ内の汎用アプリケーションプロセッサコア（例えば、ＣＰＵ）及び／又は他のコンポーネントとグラフィックスプロセッサコア５００が通信することを可能にする。ＳｏＣインタフェース５３７はまた、カメラ撮像パイプラインなど、ＳｏＣ内の固定機能デバイスとの通信を可能にでき、グラフィックスプロセッサコア５００とＳｏＣ内のＣＰＵとの間で共有され得るグローバルメモリアトミックの使用を可能にする及び／又は当該グローバルメモリアトミックを実装する。ＳｏＣインタフェース５３７は、グラフィックスプロセッサコア５００に対する電力管理制御を実施し、グラフィックスコア５００のクロックドメインとＳｏＣ内の他のクロックドメインとの間のインタフェースを有効にすることもできる。一実施形態において、ＳｏＣインタフェース５３７は、グラフィックスプロセッサ内の１又は複数のグラフィックスコアのそれぞれにコマンド及び命令を提供するように構成されるコマンドストリーマ及びグローバルスレッドディスパッチャからのコマンドバッファの受信を可能にする。コマンド及び命令は、メディアオペレーションが実行される場合にメディアパイプライン５３９にディスパッチすることができる、又は、グラフィックス処理オペレーションが実行される場合にジオメトリ及び固定機能パイプライン（例えば、ジオメトリ及び固定機能パイプライン５３６、ジオメトリ及び固定機能パイプライン５１４）にディスパッチすることができる。
【００７３】
グラフィックスマイクロコントローラ５３８は、グラフィックスプロセッサコア５００に対する様々なスケジューリング及び管理タスクを実行するように構成され得る。一実施形態において、グラフィックスマイクロコントローラ５３８は、サブコア５０１Ａ−５０１Ｆ内の実行ユニット（ＥＵ）アレイ５０２Ａ−５０２Ｆ、５０４Ａ−５０４Ｆ内の様々なグラフィックス並列エンジンに対するグラフィックス及び／又はコンピュートワークロードスケジューリングを実行できる。このスケジューリングモデルでは、グラフィックスプロセッサコア５００を含むＳｏＣのＣＰＵコア上で実行するホストソフトウェアは、複数のグラフィックスプロセッサドアベルのうちの１つにワークロードを提示でき、適切なグラフィックスエンジンに対するスケジューリングオペレーションを呼び出す。スケジューリングオペレーションは、どのワークロードを次に実行するかを決定すること、ワークロードをコマンドストリーマに提示すること、エンジン上で実行する既存のワークロードをプリエンプトすること、ワークロードの経過をモニタリングすること、及び、ワークロードが完了したときをホストソフトウェアに通知することを含む。一実施形態において、グラフィックスマイクロコントローラ５３８はまた、グラフィックスプロセッサコア５００に対する低電力又はアイドル状態を促進することができ、システム上のオペレーティングシステム及び／又はグラフィックスドライバソフトウェアから独立して、低電力状態遷移にわたってグラフィックスプロセッサコア５００内のレジスタをセーブ及び復元する能力をグラフィックスプロセッサコア５００に提供する。
【００７４】
グラフィックスプロセッサコア５００は、図示されるサブコア５０１Ａ−５０１Ｆより多い、又は、より少ない、最大Ｎ個のモジュールサブコアを有してよい。Ｎ個のサブコアの各セットについて、グラフィックスプロセッサコア５００は、共有機能ロジック５１０、共有及び／又はキャッシュメモリ５１２、ジオメトリ／固定機能パイプライン５１４、及び、様々なグラフィックスをアクセラレートし、かつ、処理動作を算出するさらなる固定機能ロジック５１６も含むことができる。共有機能ロジック５１０は、グラフィックスプロセッサコア５００内の各Ｎ個のサブコアにより共有され得る、図４の共有機能ロジック４２０（例えば、サンプラ、数学及び／又はスレッド間通信ロジック）に関連付けられる論理ユニットを含み得る。共有及び／又はキャッシュメモリ５１２は、グラフィックスプロセッサコア５００内のＮ個のサブコア５０１Ａ−５０１Ｆのセット用のラストレベルキャッシュであり得、複数のサブコアによりアクセス可能な共有メモリとしての機能も果たし得る。ジオメトリ／固定機能パイプライン５１４は、固定機能ブロック５３０内のジオメトリ／固定機能パイプライン５３６の代わりに含まれることができ、同じ又は同様の論理ユニットを含むことができる。
【００７５】
一実施形態において、グラフィックスプロセッサコア５００は、グラフィックスプロセッサコア５００による使用のための様々な固定機能アクセラレーションロジックを含み得るさらなる固定機能ロジック５１６を含む。一実施形態において、さらなる固定機能ロジック５１６は、位置のみのシェーディングでの使用のためのさらなるジオメトリパイプラインを含む。位置のみのシェーディングにおいて、２つのジオメトリパイプライン、つまり、ジオメトリ／固定機能パイプライン５１６、５３６内の完全なジオメトリパイプラインと、さらなる固定機能ロジック５１６内に含まれ得るさらなるジオメトリパイプラインであるカリングパイプラインが存在する。一実施形態において、カリングパイプラインは、完全なジオメトリパイプラインの縮小バージョンである。完全なパイプライン及びカリングパイプラインは、同じアプリケーションの異なるインスタンスを実行でき、各インスタンスは、別個のコンテキストを有する。位置のみのシェーディングは、破棄された三角形の長いカリング実行を隠すことができ、場合によっては、シェーディングをより速く完了させることを可能にする。例えば、及び、一実施形態において、カリングパイプラインは、フレームバッファに対するピクセルのラスタライゼーション及びレンダリングを実行することなく頂点の位置特性のみをフェッチしてシェーディングするので、さらなる固定機能ロジック５１６内のカリングパイプラインロジックは、メインアプリケーションと並列に位置シェーダを実行することができ、完全なパイプラインよりも速く重要な結果を大まかに生成する。カリングパイプラインは、生成された重要な結果を用いて、すべての三角形がカリングされるか否かに関係なくこれらの三角形に関する可視情報を算出できる。完全なパイプライン（この例において、リプレイパイプラインと称され得る）は、カリングされる三角形をスキップして、ラスタライゼーションフェーズに最終的に渡される可視三角形のみをシェーディングするために可視情報を消費できる。
【００７６】
一実施形態において、さらなる固定機能ロジック５１６は、機械学習訓練又は推論の最適化を含む実施のために、機械学習アクセラレーションロジック、例えば、固定機能行列乗算ロジックを含むこともできる。
【００７７】
各グラフィックスサブコア５０１Ａ−５０１Ｆ内には、グラフィックスパイプライン、メディアパイプライン又はシェーダプログラムによる要求に応じてグラフィックス、メディア及び計算操作を実行するために用いられ得る実行リソースのセットを含む。グラフィックスサブコア５０１Ａ−５０１Ｆは、複数のＥＵアレイ５０２Ａ−５０２Ｆ、５０４Ａ−５０４Ｆ、スレッドディスパッチ及びスレッド間通信（ＴＤ／ＩＣ）ロジック５０３Ａ−５０３Ｆ、３Ｄ（例えば、テクスチャ）サンプラ５０５Ａ−５０５Ｆ、メディアサンプラ５０６Ａ−５０６Ｆ、シェーダプロセッサ５０７Ａ−５０７Ｆ並びに共有ローカルメモリ（ＳＬＭ）５０８Ａ−５０８Ｆを含む。ＥＵアレイ５０２Ａ−５０２Ｆ、５０４Ａ−５０４Ｆはそれぞれ、複数の実行ユニットを含み、それらは、グラフィックス、メディア又はコンピュートシェーダプログラムを含むグラフィックス、メディア又は計算操作の稼働中に、浮動小数点及び整数／不動点論理演算を実行することが可能な汎用グラフィックス処理ユニットである。ＴＤ／ＩＣロジック５０３Ａ−５０３Ｆは、サブコア内の実行ユニットに対するローカルスレッドディスパッチ及びスレッド制御オペレーションを実行し、サブコアの実行ユニット上で実行するスレッド間の通信を容易にする。３Ｄサンプラ５０５Ａ−５０５Ｆは、テクスチャ又は他の３Ｄグラフィックス関連データをメモリに読み込むことができる。３Ｄサンプラは、所与のテクスチャに関連付けられる構成されたサンプル状態及びテクスチャフォーマットに基づいて、テクスチャデータを別々に読み込むことができる。メディアサンプラ５０６Ａ−５０６Ｆは、メディアデータに関連付けられるタイプ及びフォーマットに基づいて同様の読み込み動作を実行できる。一実施形態において、各グラフィックスサブコア５０１Ａ−５０１Ｆは、統合された３Ｄ及びメディアサンプラを交互に含むことができる。サブコア５０１Ａ−５０１Ｆのそれぞれ内の実行ユニット上で実行するスレッドは、各サブコア内の共有ローカルメモリ５０８Ａ−５０８Ｆを利用して、オンチップメモリの共通のプールを用いて実行するスレッドグループ内でのスレッド実行を可能にする。
【００７８】
実行ユニット
【００７９】
図６Ａ〜図６Ｂは、本明細書において説明される実施形態に係るグラフィックスプロセッサコアにおいて採用される処理要素のアレイを含むスレッド実行ロジック６００を示す。本明細書における任意の他の図面の要素と同じ参照番号（又は名称）を有する図６Ａ〜図６Ｂの要素は、本明細書においてどこか他の場所で説明されるものと同様な任意の方式で動作又は機能することができるが、そのようなものに限定されることはない。図６Ａは、スレッド実行ロジック６００の概要を示し、図５の各サブコア５０１Ａ−５０１Ｆと共に図示されるハードウェアロジックの変形例を含み得る。図６Ｂは、実行ユニットの例示的な内部の詳細を示す。
【００８０】
図６Ａに示されるように、いくつかの実施形態において、スレッド実行ロジック６００は、シェーダプロセッサ６０２と、スレッドディスパッチャ６０４と、命令キャッシュ６０６と、複数の実行ユニット６０８Ａ−６０８Ｎを含むスケーラブルな実行ユニットアレイと、サンプラ６１０と、データキャッシュ６１２と、データポート６１４とを含む。一実施形態において、スケーラブルな実行ユニットアレイは、ワークロードの計算要求に基づいて、１又は複数の実行ユニット（例えば、実行ユニット６０８Ａ、６０８Ｂ、６０８Ｃ、６０８Ｄから６０８Ｎ−１及び６０８Ｎまでのいずれか）をイネーブル又はディセーブルにすることにより動的にスケーリングできる。一実施形態において、含まれるコンポーネントは、コンポーネントのそれぞれに接続する相互接続ファブリックを介して相互接続される。いくつかの実施形態において、スレッド実行ロジック６００は、命令キャッシュ６０６、データポート６１４、サンプラ６１０及び実行ユニット６０８Ａ−６０８Ｎのうちの１又は複数を通じたメモリ、例えば、システムメモリ又はキャッシュメモリへの１又は複数の接続を含む。いくつかの実施形態において、各実行ユニット（例えば、６０８Ａ）は、各スレッドに対して並列に複数のデータ要素を処理している間に複数の同時ハードウェアスレッドを実行することが可能なスタンドアロン型のプログラマブル汎用計算ユニットである。様々な実施形態において、実行ユニット６０８Ａ−６０８Ｎのアレイは、任意の数の個々の実行ユニットを含むようにスケーラブルである。
【００８１】
いくつかの実施形態において、実行ユニット６０８Ａ−６０８Ｎは、主としてシェーダプログラムを実行するために用いられる。シェーダプロセッサ６０２は、様々なシェーダプログラムを処理し、スレッドディスパッチャ６０４を介してシェーダプログラムに関連付けられる実行スレッドをディスパッチすることができる。一実施形態において、スレッドディスパッチャは、グラフィックス及びメディアパイプラインからのスレッド開始要求をアービトレートし、実行ユニット６０８Ａ−６０８Ｎ内の１又は複数の実行ユニット上で要求されたスレッドをインスタンス化するロジックを含む。例えば、ジオメトリパイプラインは、頂点、テセレーション又はジオメトリシェーダを処理用のスレッド実行ロジックにディスパッチすることができる。いくつかの実施形態において、スレッドディスパッチャ６０４は、実行しているシェーダプログラムからのランタイムスレッドスポーニング要求を処理することもできる。
【００８２】
いくつかの実施形態において、実行ユニット６０８Ａ−６０８Ｎは、多くの標準的な３Ｄグラフィックスシェーダ命令に対するネイティブサポートを含む命令セットをサポートしており、その結果、グラフィックスライブラリ（例えば、Ｄｉｒｅｃｔ  ３Ｄ及びＯｐｅｎＧＬ）からのシェーダプログラムが最小限の移動で実行される。実行ユニットは、頂点及びジオメトリ処理（例えば、頂点プログラム、ジオメトリプログラム、頂点シェーダ）、ピクセル処理（例えば、ピクセルシェーダ、フラグメントシェーダ）及び汎用処理（例えば、コンピュート及びメディアシェーダ）をサポートする。実行ユニット６０８Ａ−６０８Ｎのそれぞれは、マルチ発行型の単一命令複数データ（ＳＩＭＤ）実行を可能にし、マルチスレッドオペレーションは、より高いレイテンシメモリアクセスにあるにも関わらず効率的な実行環境を可能にする。各実行ユニット内の各ハードウェアスレッドは、専用の高帯域幅レジスタファイル及び関連する独立したスレッド状態を有する。実行は、整数、単精度及び倍精度浮動小数点演算、ＳＩＭＤ分岐性能、論理演算、超越演算及び他の寄せ集め演算が可能なパイプラインへのクロック毎のマルチ発行である。メモリからのデータ又は共有機能のうちの１つからのデータを待機している間に、実行ユニット６０８Ａ−６０８Ｎ内の依存性ロジックは、要求したデータが戻ってくるまで待機中のスレッドをスリープさせる。待機中のスレッドがスリープしている間に、ハードウェアリソースは、他のスレッドを処理することに専念してよい。例えば、頂点シェーダオペレーションに関連付けられる遅延中に、実行ユニットは、異なる頂点シェーダを含むピクセルシェーダ、フラグメントシェーダ又は別のタイプのシェーダプログラムに対するオペレーションを実行できる。
【００８３】
実行ユニット６０８Ａ−６０８Ｎ内の各実行ユニットは、データ要素のアレイ上で動作する。データ要素の数は、「実行サイズ」又は命令に対するチャネルの数である。実行チャネルは、データ要素アクセス、マスキング及び命令内のフロー制御のための実行についての論理ユニットである。チャネルの数は、特定のグラフィックスプロセッサ用の物理算術論理ユニット（ＡＬＵ）又は浮動小数点ユニット（ＦＰＵ）の数とは無関係であり得る。いくつかの実施形態において、実行ユニット６０８Ａ−６０８Ｎは、整数及び浮動小数点データタイプをサポートする。
【００８４】
実行ユニット命令セットは、ＳＩＭＤ命令を含む。様々なデータ要素は、レジスタ内のパックドデータタイプとして格納されることができ、実行ユニットは、要素のデータサイズに基づいて、様々な要素を処理する。例えば、２５６ビット幅のベクトルを操作する場合、ベクトルの２５６ビットがレジスタに格納され、実行ユニットは、４つの別個の６４ビットパックドデータ要素（クアッドワード（ＱＷ）サイズのデータ要素）、８つの別個の３２ビットパックドデータ要素（ダブルワード（ＤＷ）サイズのデータ要素）、１６個の別個の１６ビットパックドデータ要素（ワード（Ｗ）サイズのデータ要素）又は３２個の別個の８ビットデータ要素（バイト（Ｂ）サイズのデータ要素）としてベクトルを操作する。しかしながら、異なるベクトル幅及びレジスタサイズが可能である。
【００８５】
一実施形態において、１又は複数の実行ユニットは、融合されたＥＵに共通のスレッド制御ロジック（６０７Ａ−６０７Ｎ）を有する融合された実行ユニット６０９Ａ−６０９Ｎと組み合わせられ得る。複数のＥＵは、ＥＵグループに融合され得る。融合されたＥＵグループ内の各ＥＵは、別個のＳＩＭＤハードウェアスレッドを実行するように構成され得る。融合されたＥＵグループ内のＥＵの数は、実施形態に従って変化し得る。さらに、様々なＳＩＭＤ幅は、ＥＵ毎に実行され得、限定されることはないが、ＳＩＭＤ８、ＳＩＭＤ１６及びＳＩＭＤ３２を含む。各融合されたグラフィックス実行ユニット６０９Ａ−６０９Ｎは、少なくとも２つの実行ユニットを含む。例えば、融合された実行ユニット６０９Ａは、第１のＥＵ６０８Ａと、第２のＥＵ６０８Ｂと、第１のＥＵ６０８Ａ及び第２のＥＵ６０８Ｂに共通するスレッド制御ロジック６０７Ａとを含む。スレッド制御ロジック６０７Ａは、融合されたグラフィックス実行ユニット６０９Ａ上で実行されるスレッドを制御し、融合された実行ユニット６０９Ａ−６０９Ｎ内の各ＥＵが共通の命令ポインタレジスタを用いて実行することを可能にする。
【００８６】
１又は複数の内部命令キャッシュ（例えば、６０６）は、実行ユニットのためのスレッド命令をキャッシュするスレッド実行ロジック６００に含まれる。いくつかの実施形態において、スレッド実行中のスレッドデータをキャッシュするために、１又は複数のデータキャッシュ（例えば、６１２）が含まれる。いくつかの実施形態において、３Ｄ演算用のテクスチャサンプリング及びメディアオペレーション用のメディアサンプリングを提供するために、サンプラ６１０が含まれる。いくつかの実施形態において、サンプラ６１０は、サンプリングされたデータを実行ユニットに提供する前のサンプリング処理中にテクスチャ又はメディアデータを処理するために、専用のテクスチャ又はメディアサンプリング機能を含む。
【００８７】
実行中、グラフィックス及びメディアパイプラインは、スレッドスポーニング及びディスパッチロジックを介してスレッド実行ロジック６００にスレッド開始要求を送信する。ジオメトリックオブジェクトのグループが処理されて、ピクセルデータへとラスタライズされると、シェーダプロセッサ６０２内のピクセルプロセッサロジック（例えば、ピクセルシェーダロジック、フラグメントシェーダロジックなど）が、出力情報をさらに算出するために起動され、サーフェス（例えば、カラーバッファ、デプスバッファ、ステンシルバッファなど）を出力するために結果を書き込ませる。いくつかの実施形態において、ピクセルシェーダ又はフラグメントシェーダは、ラスタライズされたオブジェクトにわたって補間されるべき様々な頂点特性の値を算出する。いくつかの実施形態において、シェーダプロセッサ６０２内のピクセルプロセッサロジックは、次に、アプリケーションプログラミングインタフェース（ＡＰＩ）供給型ピクセル又はフラグメントシェーダプログラムを実行する。シェーダプログラムを実行するために、シェーダプロセッサ６０２は、スレッドディスパッチャ６０４を介して実行ユニット（例えば、６０８Ａ）にスレッドをディスパッチする。いくつかの実施形態において、シェーダプロセッサ６０２は、サンプラ６１０内のテクスチャサンプリングロジックを用いて、メモリに格納されるテクスチャマッピング内のテクスチャデータにアクセスする。テクスチャデータ及び入力されたジオメトリデータに対する算術演算は、各ジオメトリックフラグメントに対するピクセルカラーデータを算出する、又は、さらなる処理から１又は複数のピクセルを廃棄する。
【００８８】
いくつかの実施形態において、データポート６１４は、グラフィックスプロセッサの出力パイプライン上でさらに処理するために、処理されたデータをメモリに出力するメモリアクセスメカニズムをスレッド実行ロジック６００に提供する。いくつかの実施形態において、データポート６１４は、データポートを介したメモリアクセスのためにデータをキャッシュする１又は複数のキャッシュメモリ（例えば、データキャッシュ６１２）を含む、又は、これに結合される。
【００８９】
図６Ｂに示されるように、グラフィックス実行ユニット６０８は、命令フェッチユニット６３７、汎用レジスタファイルアレイ（ＧＲＦ）６２４、アーキテクチャレジスタファイルアレイ（ＡＲＦ）６２６、スレッドアービタ６２２、送信ユニット６３０、分岐ユニット６３２、ＳＩＭＤ浮動小数点ユニット（ＦＰＵ）６３４のセット、及び、一実施形態において、専用の整数ＳＩＭＤ  ＡＬＵ６３５のセットを含み得る。ＧＲＦ６２４及びＡＲＦ６２６は、グラフィックス実行ユニット６０８においてアクティブであり得るそれぞれの同時ハードウェアスレッドに関連付けられる汎用レジスタファイル及びアーキテクチャレジスタファイルのセットを含む。一実施形態において、スレッド毎のアーキテクチャ状態は、ＡＲＦ６２６において維持され、一方、スレッド実行中に用いられるデータは、ＧＲＦ６２４に格納される。スレッド毎に命令ポインタを含む各スレッドの実行状態は、ＡＲＦ６２６内のスレッド固有のレジスタにおいて保持され得る。
【００９０】
一実施形態において、グラフィックス実行ユニット６０８は、同時マルチスレッディング（ＳＭＴ）及び細粒度のインターリーブ型マルチスレッディング（ＩＭＴ）の組み合わせであるアーキテクチャを有する。アーキテクチャは、同時スレッドの目標数及び実行ユニット毎のレジスタの数に基づいて設計時に細かくチューニングされ得るモジュール構成を有し、実行ユニットのリソースが複数の同時スレッドを実行するために用いられるロジックにわたって分割される。
【００９１】
一実施形態において、グラフィックス実行ユニット６０８は、それぞれが異なる命令であり得る複数の命令を共同発行できる。グラフィックス実行ユニットスレッド６０８のスレッドアービタ６２２は、実行のために送信ユニット６３０、分岐ユニット６３２又はＳＩＭＤ  ＦＰＵ６３４のうちの１つに命令をディスパッチすることができる。各実行スレッドは、ＧＲＦ６２４内の１２８個の汎用レジスタにアクセスすることができ、各レジスタは、３２ビットデータ要素のＳＩＭＤ８−要素ベクトルとしてアクセス可能な３２バイトを格納できる。一実施形態において、各実行ユニットのスレッドは、ＧＲＦ６２４内の４Ｋバイトへのアクセスを有するが、実施形態は、そのように限定されるわけではなく、他の実施形態では、より多い又はより少ない数のレジスタリソースが提供されてよい。一実施形態において、最大７個のスレッドが同時に実行できるが、実行ユニット毎のスレッドの数はまた、実施形態に従って変化させることができる。７個のスレッドが４Ｋバイトにアクセスし得る実施形態では、ＧＲＦ６２４は、合計２８Ｋバイトを格納できる。フレキシブルなアドレッシングモードは、効果的により広いレジスタを構築する、又は、ストライド矩形ブロックデータ構造を表すために、レジスタが一緒にアドレッシングされることを可能にし得る。
【００９２】
一実施形態において、メモリ演算、サンプラオペレーション及び他の長いレイテンシシステム通信は、メッセージパッシング送信ユニット６３０により実行される「送信」命令を介してディスパッチされる。一実施形態において、分岐命令は、ＳＩＭＤダイバージェンス及び最終的なコンバージェンスを促すために、専用の分岐ユニット６３２にディスパッチされる。
【００９３】
一実施形態において、グラフィックス実行ユニット６０８は、浮動小数点演算を実行する１又は複数のＳＩＭＤ浮動小数点ユニット（ＦＰＵ）６３４を含む。一実施形態において、ＦＰＵ６３４はまた、整数計算をサポートする。一実施形態において、ＦＰＵ６３４は、最大Ｍ個の３２ビット浮動小数点（又は整数）演算をＳＩＭＤ実行でき、又は、最大２Ｍ個の１６ビット整数又は１６ビット浮動小数点演算をＳＩＭＤ実行できる。一実施形態において、ＦＰＵのうちの少なくとも１つは、ハイスループットで卓越した数学関数及び倍精度の６４ビット浮動小数点をサポートする拡張数学機能を提供する。いくつかの実施形態において、８ビット整数ＳＩＭＤ  ＡＬＵ６３５のセットも存在し、具体的には、機械学習計算に関連付けられるオペレーションを実行するように最適化され得る。
【００９４】
一実施形態において、グラフィックス実行ユニット６０８の複数のインスタンスのアレイは、グラフィックスサブコアグループ（例えば、サブスライス）においてインスタンス化され得る。スケーラビリティについて、製品の設計者は、サブコアグループ毎に実行ユニットの正確な数を選択できる。一実施形態において、実行ユニット６０８は、複数の実行チャネルにわたって命令を実行できる。さらなる実施形態において、グラフィックス実行ユニット６０８上で実行される各スレッドは、異なるチャネル上で実行される。
【００９５】
図７は、いくつかの実施形態に係るグラフィックスプロセッサ命令フォーマット７００を示すブロック図である。１又は複数の実施形態において、グラフィックスプロセッサ実行ユニットは、複数のフォーマットにおける命令を有する命令セットをサポートする。実線の枠は、実行ユニット命令に一般的に含まれるコンポーネントを示し、一方、破線は、任意選択的であり、又は、命令のサブセットにのみ含まれるコンポーネントを含む。いくつかの実施形態において、説明されかつ示される命令フォーマット７００は、命令が処理された時点の命令デコードによるマイクロオペレーションとは対照的に、それらが実行ユニットに供給される命令いう点で、マクロ命令である。
【００９６】
いくつかの実施形態において、グラフィックスプロセッサ実行ユニットは、１２８ビットの命令フォーマット７１０における命令をネイティブにサポートする。６４ビットの圧縮命令フォーマット７３０は、選択された命令、命令オプション及びオペランドの数に基づいていくつかの命令が利用可能である。ネイティブな１２８ビットの命令フォーマット７１０は、すべての命令オプションへのアクセスを提供し、一方、いくつかのオプション及びオペレーションは、６４ビットフォーマット７３０に制限される。６４ビットフォーマット７３０において利用可能なネイティブ命令は、実施形態によって変わる。いくつかの実施形態において、命令は、インデックスフィールド７１３内のインデックス値のセットを部分的に用いて圧縮される。実行ユニットハードウェアは、インデックス値に基づいて圧縮テーブルのセットを参照し、１２８ビットの命令フォーマット７１０内のネイティブ命令を再構成するために、圧縮テーブル出力を用いる。
【００９７】
各フォーマットについて、命令オペコード７１２は、実行ユニットが実行するオペレーションを定義する。実行ユニットは、各オペランドの複数のデータ要素に並行して各命令を実行する。例えば、追加の命令に応じて、実行ユニットは、テクスチャ成分又はピクチャ成分を表す各カラーチャネルにわたって追加のオペレーションを同時に実行する。デフォルトで、実行ユニットは、オペランドのすべてのデータチャネルにわたって各命令を実行する。いくつかの実施形態において、命令制御フィールド７１４は、チャネル選択（例えば、プレディケーション）及びデータチャネルオーダ（例えば、スウィズル）などのある実行オプションにわたる制御を可能にする。１２８ビットの命令フォーマット７１０内の命令について、実行サイズフィールド７１６は、並列に実行されるデータチャネルの数を制限する。いくつかの実施形態において、実行サイズフィールド７１６は、６４ビットのコンパクトな命令フォーマット７３０での使用に対して利用可能ではない。
【００９８】
いくつかの実行ユニット命令は、２つのソースオペランド、ｓｒｃ０  ７２０、ｓｒｃ１  ７２２、及び、１つのデスティネーション７１８を含む最大３つのオペランドを有する。いくつかの実施形態において、実行ユニットは、デュアルデスティネーション命令をサポートし、当該デスティネーションの一方が暗に示される。データ操作命令は、第３のソースオペランド（例えば、ＳＲＣ２  ７２４）を有することができ、命令オペコード７１２は、ソースオペランドの数を決定する。命令の最後のソースオペランドは、命令と共に渡される（例えば、ハードコードされた）即値であり得る。
【００９９】
いくつかの実施形態において、１２８ビットの命令フォーマット７１０は、例えば、直接レジスタアドレッシングモード又は間接レジスタアドレッシングモードが用いられるかを特定するアクセス／アドレスモードフィールド７２６を含む。直接レジスタアドレッシングモードが用いられる場合、１又は複数のオペランドのレジスタアドレスは、命令内のビットにより直接提供される。
【０１００】
いくつかの実施形態において、１２８ビットの命令フォーマット７１０は、アクセス／アドレスモードフィールド７２６を含み、命令のアドレスモード及び／又はアクセスモードを規定する。一実施形態において、アクセスモードは、命令のデータアクセスアライメントを定義するために用いられる。いくつかの実施形態では、１６バイトアライン型のアクセスモード及び１バイトアライン型のアクセスモードを含むアクセスモードをサポートし、アクセスモードのバイトアライメントが命令オペランドのアクセスアライメントを決定する。例えば、第１モードの場合、命令はソースオペランド及びデスティネーションオペランドに対してバイトアライン型のアドレッシングを使用してよく、第２モードの場合、命令はすべてのソースオペランド及びデスティネーションオペランドに対して１６バイトアライン型のアドレッシングを使用してよい。
【０１０１】
一実施形態において、アクセス／アドレスモードフィールド７２６のアドレスモードの一部は、命令が直接又は間接アドレッシングを使用するか否かを決定する。直接レジスタアドレッシングモードが用いられる場合、命令内のビットが１又は複数のオペランドのレジスタアドレスを直接提供する。間接レジスタアドレッシングモードが用いられる場合、１又は複数のオペランドのレジスタアドレスは、命令内のアドレスレジスタ値及びアドレス即値フィールドに基づいて算出されてよい。
【０１０２】
いくつかの実施形態において、命令は、オペコードデコード７４０を簡略化するために、オペコード７１２のビットフィールドに基づいてグループ化される。８ビットオペコードについて、ビット４、５及び６は、実行ユニットがオペコードのタイプを決定することを可能にする。示される正確なオペコードのグループ化は単なる例に過ぎない。いくつかの実施形態において、移動及びロジックオペコードグループ７４２は、データ移動及び論理命令（例えば、移動（ｍｏｖ）、比較（ｃｍｐ））を含む。いくつかの実施形態において、移動及びロジックグループ７４２は、５つの最上位ビット（ＭＳＢ）を共有し、移動（ｍｏｖ）命令は００００ｘｘｘｘｂの形式であり、論理命令は０００１ｘｘｘｘｂの形式である。フロー制御命令グループ７４４（例えば、コール、ジャンプ（ｊｍｐ））は、００１０ｘｘｘｘｂ（例えば、０ｘ２０）の形式の命令を含む。寄せ集め命令グループ７４６は、命令の混合を含み、００１１ｘｘｘｘｂ（例えば、０ｘ３０）の形式の同期命令（例えば、待機、送信）を含む。並列数学命令グループ７４８は、０１００ｘｘｘｘｂ（例えば、０ｘ４０）の形式のコンポーネントに関する算術命令（例えば、加算、乗算（ｍｕｌ））を含む。並列数学グループ７４８は、データチャネルに並行して算術演算を実行する。ベクトル数学グループ（ｖｅｃｔｏｒ  ｍａｔｈ  ｇｒｏｕｐ）７５０は、０１０１ｘｘｘｘｂ（例えば、０ｘ５０）の形式の算術命令（例えば、ｄｐ４）を含む。ベクトル数学グループ（ｖｅｃｔｏｒ  ｍａｔｈ  ｇｒｏｕｐ）は、ベクトルオペランドに対するドット積計算などの算術を実行する。
【０１０３】
グラフィックスパイプライン
【０１０４】
図８は、グラフィックスプロセッサ８００の別の実施形態のブロック図である。本明細書における任意の他の図面の要素と同じ参照番号（又は名称）を有する図８の要素は、本明細書においてどこか他の場所で説明されるものと同様な任意の方式で動作又は機能することができるが、そのようなものに限定されることはない。
【０１０５】
いくつかの実施形態において、グラフィックスプロセッサ８００は、ジオメトリパイプライン８２０、メディアパイプライン８３０、ディスプレイエンジン８４０、スレッド実行ロジック８５０及びレンダリング出力パイプライン８７０を含む。いくつかの実施形態において、グラフィックスプロセッサ８００は、１又は複数の汎用プロセッシングコアを含むマルチコア処理システム内のグラフィックスプロセッサである。グラフィックスプロセッサは、１又は複数制御レジスタ（図示せず）へのレジスタ書き込みにより制御される、又は、リング相互接続８０２を介してグラフィックスプロセッサ８００に発行されるコマンドを介して制御される。いくつかの実施形態において、リング相互接続８０２は、グラフィックスプロセッサ８００を他の処理コンポーネント、例えば、他のグラフィックスプロセッサ又は汎用プロセッサに結合する。リング相互接続８０２からのコマンドは、コマンドストリーマ８０３により解釈され、コマンドストリーマ８０３は、ジオメトリパイプライン８２０又はメディアパイプライン８３０の個々のコンポーネントに命令を供給する。
【０１０６】
いくつかの実施形態において、コマンドストリーマ８０３は、メモリから頂点データを読み出して、コマンドストリーマ８０３により提供される頂点処理コマンドを実行する頂点フェッチャ８０５のオペレーションを指示する。いくつかの実施形態において、頂点フェッチャ８０５は、頂点シェーダ８０７に頂点データを提供し、頂点シェーダ８０７は、各頂点に対する座標空間変換及びライティングオペレーションを実行する。いくつかの実施形態において、頂点フェッチャ８０５及び頂点シェーダ８０７は、スレッドディスパッチャ８３１を介して実行ユニット８５２Ａ−８５２Ｂに実行スレッドをディスパッチすることにより頂点処理命令を実行する。
【０１０７】
いくつかの実施形態において、実行ユニット８５２Ａ−８５２Ｂは、グラフィックス及びメディアオペレーションを実行するための命令セットを有するベクトルプロセッサのアレイである。いくつかの実施形態において、実行ユニット８５２Ａ−８５２Ｂは、アレイ毎に固有である又はアレイ間で共有される付属のＬ１キャッシュ８５１を有する。キャッシュは、データキャッシュ、命令キャッシュ、又は、異なるパーティショニングにデータ及び命令を含むようにパーティショニングされるシングルキャッシュとして構成され得る。
【０１０８】
いくつかの実施形態において、ジオメトリパイプライン８２０は、３Ｄオブジェクトのハードウェアアクセラレート型テセレーションを実行するテセレーションコンポーネントを含む。いくつかの実施形態において、プログラマブルハルシェーダ８１１は、テセレーションオペレーションを構成する。プログラマブルドメインシェーダ８１７は、テセレーション出力のバックエンド評価を提供する。テセレータ８１３は、ハルシェーダ８１１の指示で動作しており、ジオメトリパイプライン８２０への入力として提供される粗いジオメトリックモデルに基づいて、詳細なジオメトリックオブジェクトのセットを生成する専用ロジックを含む。いくつかの実施形態において、テセレーションが用いられない場合、テセレーションコンポーネント（例えば、ハルシェーダ８１１、テセレータ８１３及びドメインシェーダ８１７）はバイパスされ得る。
【０１０９】
いくつかの実施形態において、完全なジオメトリックオブジェクトは、実行ユニット８５２Ａ−８５２Ｂにディスパッチされる１又は複数のスレッドを介してジオメトリシェーダ８１９により処理され得る、又は、クリッパ８２９に直接進むことができる。いくつかの実施形態において、ジオメトリシェーダは、グラフィックスパイプラインの前のステージにあるような頂点又は頂点のパッチよりもむしろ、ジオメトリックオブジェクト全体で動作する。テセレーションがディセーブルである場合、ジオメトリシェーダ８１９は、頂点シェーダ８０７から入力を受信する。いくつかの実施形態において、ジオメトリシェーダ８１９は、テセレーションユニットがディセーブルである場合にジオメトリテセレーションを実行するために、ジオメトリシェーダプログラムによりプログラム可能である。
【０１１０】
ラスタライゼーションの前に、クリッパ８２９は頂点データを処理する。クリッパ８２９は、クリッピング及びジオメトリシェーダ機能を有する固定機能クリッパ又はプログラマブルクリッパであってよい。いくつかの実施形態において、レンダリング出力パイプライン８７０内のラスタライザ及びデプス試験コンポーネント８７３は、ジオメトリックオブジェクトをピクセル毎の表現へと変換するために、ピクセルシェーダをディスパッチする。いくつかの実施形態において、ピクセルシェーダロジックは、スレッド実行ロジック８５０に含まれる。いくつかの実施形態において、アプリケーションは、ラスタライザ及びデプス試験コンポーネント８７３をバイパスして、ストリームアウトユニット８２３を介してラスタライズされていない頂点データにアクセスすることができる。
【０１１１】
グラフィックスプロセッサ８００は、相互接続バス、相互接続ファブリック、又は、プロセッサの主要なコンポーネント間でのデータ及びメッセージパッシングを可能にするいくつかの他の相互接続メカニズムを有する。いくつかの実施形態において、実行ユニット８５２Ａ−８５２Ｂ及び関連する論理ユニット（例えば、Ｌ１キャッシュ８５１、サンプラ８５４、テクスチャキャッシュ８５８など）は、メモリアクセスを実行して、プロセッサのレンダリング出力パイプラインコンポーネントと通信するためにデータポート８５６を介して相互接続する。いくつかの実施形態において、サンプラ８５４、キャッシュ８５１、８５８及び実行ユニット８５２Ａ−８５２Ｂはそれぞれ、別個のメモリアクセスパスを有する。一実施形態において、テクスチャキャッシュ８５８はまた、サンプラキャッシュとして構成され得る。
【０１１２】
いくつかの実施形態において、レンダリング出力パイプライン８７０は、頂点ベースのオブジェクトを関連するピクセルベースの表現へと変換するラスタライザ及びデプス試験コンポーネント８７３を含む。いくつかの実施形態において、ラスタライザロジックは、固定機能三角形及び線ラスタライゼーションを実行するウィンドウア（ｗｉｎｄｏｗｅｒ）／マスカ（ｍａｓｋｅｒ）ユニットを含む。いくつかの実施形態において、関連するレンダリングキャッシュ８７８及びデプスキャッシュ８７９も利用可能である。ピクセル演算コンポーネント８７７は、データに対してピクセルベースの演算を実行するが、いくつかの例では、２Ｄ演算に関連付けられるピクセル演算（例えば、ブレンディングを用いたビットブロック画像転送）が２Ｄエンジン８４１により実行される、又は、オーバレイディスプレイプレーンを用いてディスプレイコントローラ８４３により表示時間に置き換えられる。いくつかの実施形態において、共有のＬ３キャッシュ８７５は、すべてのグラフィックスコンポーネントに利用可能であり、主システムメモリを使用することなくデータの共有を可能にする。
【０１１３】
いくつかの実施形態において、グラフィックスプロセッサメディアパイプライン８３０は、メディアエンジン８３７及びビデオフロントエンド８３４を含む。いくつかの実施形態において、ビデオフロントエンド８３４は、コマンドストリーマ８０３からパイプラインコマンドを受信する。いくつかの実施形態において、メディアパイプライン８３０は、別個のコマンドストリーマを含む。いくつかの実施形態において、ビデオフロントエンド８３４は、メディアエンジン８３７にコマンドを送信する前に、メディアコマンドを処理する。いくつかの実施形態において、メディアエンジン８３７は、スレッドディスパッチャ８３１を介してスレッド実行ロジック８５０へのディスパッチのためにスレッドをスポーンするスレッドスポーニング機能を含む。
【０１１４】
いくつかの実施形態において、グラフィックスプロセッサ８００は、ディスプレイエンジン８４０を含む。いくつかの実施形態において、ディスプレイエンジン８４０は、プロセッサ８００の外部にあり、リング相互接続８０２又はいくつかの他の相互接続バス若しくはファブリックを介してグラフィックスプロセッサと結合する。いくつかの実施形態において、ディスプレイエンジン８４０は、２Ｄエンジン８４１及びディスプレイコントローラ８４３を含む。いくつかの実施形態において、ディスプレイエンジン８４０は、３Ｄパイプラインとは独立して動作することが可能な専用ロジックを含む。いくつかの実施形態において、ディスプレイコントローラ８４３は、ディスプレイデバイス（図示せず）と結合し、これは、ラップトップコンピュータにあるようなシステム統合型ディスプレイデバイス、又は、ディスプレイデバイスコネクタを介して取り付けられる外部ディスプレイデバイスであってよい。
【０１１５】
いくつかの実施形態において、ジオメトリパイプライン８２０及びメディアパイプライン８３０は、複数のグラフィックス及びメディアプログラミングインタフェースに基づいてオペレーションを実行するように構成可能であり、任意のあるアプリケーションプログラミングインタフェース（ＡＰＩ）に固有のものではない。いくつかの実施形態において、グラフィックスプロセッサ用のドライバソフトウェアは、グラフィックスプロセッサにより処理され得るコマンドに、特定のグラフィックス又はメディアライブラリに固有のＡＰＩコールを変換する。いくつかの実施形態において、Ｋｈｒｏｎｏｓグループのオープングラフィックスライブラリ（ＯｐｅｎＧＬ）、オープンコンピューティング言語（ＯｐｅｎＣＬ）、及び／又は、Ｖｕｌｋａｎグラフィックス及びコンピュートＡＰＩに対して、サポートが提供される。いくつかの実施形態において、マイクロソフトコーポレーションのＤｉｒｅｃｔ３Ｄライブラリに対してもサポートが提供され得る。いくつかの実施形態において、これらのライブラリの組み合わせがサポートされ得る。オープンソースのコンピュータビジョンライブラリ（ＯｐｅｎＣＶ）に対してもサポートが提供され得る。互換性のある３Ｄパイプラインを有する将来のＡＰＩはまた、将来のＡＰＩのパイプラインからグラフィックスプロセッサのパイプラインへとマッピングが行われることができる場合にサポートされるだろう。
【０１１６】
グラフィックスパイプラインのプログラミング
【０１１７】
図９Ａは、いくつかの実施形態に係るグラフィックスプロセッサコマンドフォーマット９００を示すブロック図である。図９Ｂは、実施形態に係るグラフィックスプロセッサコマンドシーケンス９１０を示すブロック図である。図９Ａにおける実線の枠は、グラフィックスコマンドに一般的に含まれるコンポーネントを示し、一方、破線は、任意選択的である、又は、グラフィックスコマンドのサブセットにのみ含まれるコンポーネントを含む。図９Ａの例示的なグラフィックスプロセッサコマンドフォーマット９００は、クライアント９０２、コマンドオペレーションコード（オペコード）９０４及びコマンド用のデータ９０６を識別するデータフィールドを含む。サブオペコード９０５及びコマンドサイズ９０８はまた、いくつかのコマンドに含まれる。
【０１１８】
いくつかの実施形態において、クライアント９０２は、コマンドデータを処理するグラフィックスデバイスのクライアントユニットを規定する。いくつかの実施形態において、グラフィックスプロセッサコマンドパーサは、コマンドのさらなる処理を調整して適切なクライアントユニットにコマンドデータをルーティングするために、各コマンドのクライアントフィールドを検査する。いくつかの実施形態において、グラフィックスプロセッサクライアントユニットは、メモリインタフェースユニット、レンダリングユニット、２Ｄユニット、３Ｄユニット及びメディアユニットを含む。各クライアントユニットは、コマンドを処理する対応する処理パイプラインを有する。コマンドがクライアントユニットにより受信されると、クライアントユニットは、オペコード９０４、及び、存在する場合にはサブオペコード９０５を読み出して、実行するオペレーションを決定する。クライアントユニットは、データフィールド９０６内の情報を用いてコマンドを実行する。いくつかのコマンドについて、明示的なコマンドサイズ９０８は、コマンドのサイズを規定することが予期される。いくつかの実施形態において、コマンドパーサは、コマンドオペコードに基づいて、コマンドの少なくともいくつかのサイズを自動的に決定する。いくつかの実施形態において、コマンドは、ダブルワードの倍数を用いてアラインされる。
【０１１９】
図９Ｂのフロー図は、例示的なグラフィックスプロセッサコマンドシーケンス９１０を示す。いくつかの実施形態において、グラフィックスプロセッサの実施形態を取り上げるデータ処理システムのソフトウェア又はファームウェアは、示されるコマンドシーケンスのバージョンを用いて、グラフィックスオペレーションのセットをセットアップして、実行して、終了する。実施形態は、サンプルコマンドシーケンスが、例示の目的のみで示され、かつ、説明されるが、これらの特定のコマンド又はこのコマンドシーケンスに限定されることはない。さらに、当該コマンドは、コマンドシーケンスにおけるコマンドのバッチとして発行されてよく、その結果、グラフィックスプロセッサが少なくとも部分的にコヒーレンスな状態でコマンドのシーケンスを処理する。
【０１２０】
いくつかの実施形態において、グラフィックスプロセッサコマンドシーケンス９１０は、任意のアクティブなグラフィックスパイプラインにパイプラインに対する現在保留中のコマンドを完了させるパイプラインフラッシュコマンド９１２から始めてよい。いくつかの実施形態において、３Ｄパイプライン９２２及びメディアパイプライン９２４は、同時に動作しない。パイプラインフラッシュは、アクティブなグラフィックスパイプラインに任意の保留中のコマンドを完了させるために実行される。パイプラインフラッシュに応答して、グラフィックスプロセッサに対するコマンドパーサは、アクティブなドローイングエンジンが保留中のオペレーションを完了し、かつ、関連する読み出しキャッシュが無効にされるまで、コマンド処理を一時停止する。任意選択的に、「ダーティ（ｄｉｒｔｙ）」とマーキングされたレンダリングキャッシュ内の任意のデータがメモリに対してフラッシュされ得る。いくつかの実施形態において、パイプラインフラッシュコマンド９１２は、パイプライン同期中に、又は、グラフィックスプロセッサを低電力状態にする前に用いられ得る。
【０１２１】
いくつかの実施形態において、パイプライン選択コマンド９１３は、パイプライン間で明示的に切り替えるために、コマンドシーケンスがグラフィックスプロセッサを必要とする場合に用いられる。いくつかの実施形態において、パイプライン選択コマンド９１３は、コンテキストが両方のパイプラインにコマンドを発行しない限り、パイプラインコマンドを発行する前に、実行コンテキスト内で一度だけ必要とされる。いくつかの実施形態において、パイプラインフラッシュコマンド９１２は、パイプライン選択コマンド９１３を介したパイプライン切り替えの直前に必要とされる。
【０１２２】
いくつかの実施形態において、パイプライン制御コマンド９１４は、オペレーション用のグラフィックスパイプラインを構成し、３Ｄパイプライン９２２及びメディアパイプライン９２４をプログラムするために用いられる。いくつかの実施形態において、パイプライン制御コマンド９１４は、アクティブなパイプラインに関するパイプライン状態を構成する。一実施形態においてパイプライン制御コマンド９１４は、パイプライン同期中に用いられる、又は、コマンドのバッチを処理する前に、アクティブなパイプライン内の１又は複数のキャッシュメモリからのデータをクリアするために用いられる。
【０１２３】
いくつかの実施形態において、リターンバッファ状態コマンド９１６は、データを書き込むために各パイプラインに対するリターンバッファのセットを構成するために用いられる。いくつかのパイプラインオペレーションは、オペレーションが処理中に中間データを書き込む１又は複数のリターンバッファの割り当て、選択又は構成を必要とする。いくつかの実施形態において、グラフィックスプロセッサはまた、出力データを格納し、かつ、クロススレッド通信を実行するために１又は複数のリターンバッファを用いる。いくつかの実施形態において、リターンバッファ状態９１６は、パイプラインオペレーションのセットを用いるために、リターンバッファのサイズ及び数を選択することを含む。
【０１２４】
コマンドシーケンスにおける残りのコマンドは、オペレーション用のアクティブなパイプラインに基づいて異なる。パイプライン決定９２０に基づいて、コマンドシーケンスは、３Ｄパイプライン状態９３０から始まる３Ｄパイプライン９２２又はメディアパイプライン状態９４０で始まるメディアパイプライン９２４に合わせる。
【０１２５】
３Ｄパイプライン状態９３０を構成するコマンドは、頂点バッファ状態、頂点要素状態、一定のカラー状態、デプスバッファ状態、及び、３Ｄプリミティブコマンドが処理される前に構成される他の状態変数に対する３Ｄ状態設定コマンドを含む。これらのコマンドの値は、使用中の特定の３Ｄ  ＡＰＩに基づいて少なくとも部分的に決定される。いくつかの実施形態において、３Ｄパイプライン状態９３０のコマンドは、これらの要素が用いられない場合、特定のパイプライン要素を選択的に無効にする又はバイパスすることもできる。
【０１２６】
いくつかの実施形態において、３Ｄプリミティブ９３２のコマンドは、３Ｄパイプラインにより処理される３Ｄプリミティブを提示するために用いられる。３Ｄプリミティブ９３２のコマンドを介してグラフィックスプロセッサに渡されるコマンド及び関連するパラメータは、グラフィックスパイプライン内の頂点フェッチ機能に転送される。頂点フェッチ機能は、３Ｄプリミティブ９３２のコマンドデータを用いて頂点データ構造を生成する。頂点データ構造は、１又は複数のリターンバッファに格納される。いくつかの実施形態において、３Ｄプリミティブ９３２のコマンドは、頂点シェーダを介して３Ｄプリミティブに対する頂点オペレーションを実行するために用いられる。頂点シェーダを処理するために、３Ｄパイプライン９２２は、シェーダ実行スレッドをグラフィックスプロセッサ実行ユニットにディスパッチする。
【０１２７】
いくつかの実施形態において、３Ｄパイプライン９２２は、実行９３４のコマンド又はイベントを介してトリガされる。いくつかの実施形態において、レジスタ書き込みは、コマンド実行をトリガする。いくつかの実施形態において、実行は、コマンドシーケンスにおける「ゴー（ｇｏ）」又は「キック（ｋｉｃｋ）」コマンドを介してトリガされる。一実施形態において、コマンド実行は、グラフィックスパイプラインを通じてコマンドシーケンスをフラッシュするために、パイプライン同期コマンドを用いてトリガされる。３Ｄパイプラインは、３Ｄプリミティブに対するジオメトリ処理を実行する。オペレーションが完了すると、結果として生じるジオメトリックオブジェクトがラスタライズされ、ピクセルエンジンは、結果として生じるピクセルに色をつける。ピクセルシェーディング及びピクセルバックエンドオペレーションを制御する追加のコマンドがこれらのオペレーションのために含まれてもよい。
【０１２８】
いくつかの実施形態において、グラフィックスプロセッサコマンドシーケンス９１０は、メディアオペレーションを実行する場合、メディアパイプライン９２４のパスに従う。一般的には、メディアパイプライン９２４に対するプログラミングについての特定の使用及び方式は、実行されるメディア又は計算操作に依存する。特定のメディアデコードオペレーションは、メディアデコード中に、メディアパイプラインにオフロードされてよい。いくつかの実施形態において、メディアパイプラインはバイパスされることもでき、メディアデコードは、１又は複数の汎用プロセッシングコアにより提供されるリソースを全体的に又は部分的に用いて実行され得る。一実施形態において、メディアパイプラインはまた、汎用グラフィックスプロセッサユニット（ＧＰＧＰＵ）オペレーション用の要素を含み、グラフィックスプロセッサは、グラフィックスプリミティブのレンダリングに明示的には関連していない計算シェーダプログラムを用いてＳＩＭＤベクトル演算を実行するために用いられる。
【０１２９】
いくつかの実施形態において、メディアパイプライン９２４は、３Ｄパイプライン９２２と同様の方式で構成される。メディアパイプライン状態９４０を構成するコマンドのセットは、メディアオブジェクトコマンド９４２の前にコマンドキューへとディスパッチされる又は置かれる。いくつかの実施形態において、メディアパイプライン状態９４０に対するコマンドは、メディアオブジェクトを処理するために用いられるメディアパイプライン要素を構成するデータを含む。これは、メディアパイプライン内のビデオデコード及びビデオエンコードロジックを構成するデータ、例えば、エンコード又はデコードフォーマットを含む。いくつかの実施形態において、メディアパイプライン状態９４０に対するコマンドはまた、状態設定のバッチを含む「間接」状態要素に対する１又は複数のポインタの使用をサポートする。
【０１３０】
いくつかの実施形態において、メディアオブジェクトコマンド９４２は、メディアパイプラインによる処理のためのメディアオブジェクトにポインタを供給する。メディアオブジェクトは、処理されるビデオデータを含むメモリバッファを含む。いくつかの実施形態において、すべてのメディアパイプライン状態は、メディアオブジェクトコマンド９４２を発行する前に有効でなければならない。パイプライン状態が構成され、かつ、メディアオブジェクトコマンド９４２がキューイングされると、メディアパイプライン９２４は、実行コマンド９４４又は同等の実行イベント（例えば、レジスタ書き込み）を介してトリガされる。メディアパイプライン９２４からの出力は、次に、３Ｄパイプライン９２２又はメディアパイプライン９２４により提供されるオペレーションによる事後処理されてよい。いくつかの実施形態において、ＧＰＧＰＵオペレーションは、メディアオペレーションと同様の方式で構成され、実行される。
【０１３１】
グラフィックスソフトウェアアーキテクチャ
【０１３２】
図１０は、いくつかの実施形態に係るデータ処理システム１０００のための例示的なグラフィックスソフトウェアアーキテクチャを示す。いくつかの実施形態において、ソフトウェアアーキテクチャは、３Ｄグラフィックスアプリケーション１０１０、オペレーティングシステム１０２０及び少なくとも１つのプロセッサ１０３０を含む。いくつかの実施形態において、プロセッサ１０３０は、グラフィックスプロセッサ１０３２及び１又は複数の汎用プロセッサコア１０３４を含む。グラフィックスアプリケーション１０１０及びオペレーティングシステム１０２０はそれぞれ、データ処理システムのシステムメモリ１０５０において実行する。
【０１３３】
いくつかの実施形態において、３Ｄグラフィックスアプリケーション１０１０は、シェーダ命令１０１２を含む１又は複数のシェーダプログラムを含む。シェーダ言語命令は、上位レベルシェーダ言語、例えば、上位レベルシェーダ言語（ＨＬＳＬ）又はＯｐｅｎＧＬシェーダ言語（ＧＬＳＬ）におけるものであってよい。アプリケーションはまた、汎用プロセッサコア１０３４による実行に適したマシン語における実行可能命令１０１４を含む。アプリケーションはまた、頂点データにより定義されるグラフィックスオブジェクト１０１６を含む。
【０１３４】
いくつかの実施形態において、オペレーティングシステム１０２０は、マイクロソフトコーポレーションのマイクロソフト（登録商標）Ｗｉｎｄｏｗｓ（登録商標）オペレーティングシステム、プロプライエタリＵＮＩＸ（登録商標）様式のオペレーティングシステム、又は、Ｌｉｎｕｘ（登録商標）カーネルの変形例を用いたオープンソースＵＮＩＸ（登録商標）様式のオペレーティングシステムである。オペレーティングシステム１０２０は、Ｄｉｒｅｃｔ３Ｄ  ＡＰＩ、ＯｐｅｎＧＬ  ＡＰＩ又はＶｕｌｋａｎ  ＡＰＩなどのグラフィックスＡＰＩ１０２２をサポートすることができる。Ｄｉｒｅｃｔ３Ｄ  ＡＰＩが用いられる場合、オペレーティングシステム１０２０は、フロントエンドシェーダコンパイラ１０２４を用いて、ＨＬＳＬにおける任意のシェーダ命令１０１２を下位レベルのシェーダ言語へとコンパイルする。コンパイルは、ジャストインタイム（ＪＩＴ）コンパイルであってよい、又は、アプリケーションは、シェーダプリコンパイルを実行できる。いくつかの実施形態において、上位レベルシェーダは、３Ｄグラフィックスアプリケーション１０１０のコンパイル中に下位レベルシェーダへとコンパイルされる。いくつかの実施形態において、シェーダ命令１０１２は、Ｖｕｌｋａｎ  ＡＰＩにより用いられる標準ポータブル中間表現（ＳＰＩＲ）のバージョンなどの、中間フォームで提供される。
【０１３５】
いくつかの実施形態において、ユーザモードグラフィックスドライバ１０２６は、シェーダ命令１０１２をハードウェア固有の表現へと変換するバックエンドシェーダコンパイラ１０２７を含む。ＯｐｅｎＧＬ  ＡＰＩが用いられる場合、ＧＬＳＬ高水準言語におけるシェーダ命令１０１２は、コンパイルのためにユーザモードグラフィックスドライバ１０２６に渡される。いくつかの実施形態において、ユーザモードグラフィックスドライバ１０２６は、オペレーティングシステムカーネルモード機能１０２８を用いて、カーネルモードグラフィックスドライバ１０２９と通信する。いくつかの実施形態において、カーネルモードグラフィックスドライバ１０２９は、グラフィックスプロセッサ１０３２と通信してコマンド及び命令をディスパッチする。
【０１３６】
ＩＰコア実装
【０１３７】
少なくとも１つの実施形態の１又は複数の態様は、プロセッサなどの集積回路内のロジックを表す及び／又は定義する機械可読媒体に格納される代表的なコードにより実装され得る。例えば、機械可読媒体は、プロセッサ内の様々なロジックを表す命令を含んでよい。マシンにより読み出される場合、命令は、マシンに、本明細書において説明される技術を実行するロジックを組み立てさせる。「ＩＰコア」として知られるそのような表現は、集積回路の構造を説明するハードウェアモデルとして有形の機械可読媒体に格納され得る集積回路用のロジックの再利用可能なユニットである。ハードウェアモデルは、集積回路を製造する製造機械上に当該ハードウェアモデルを搭載する様々な顧客又は製造施設に供給されてよい。集積回路は、本明細書において説明される実施形態のうちのいずれかと関連して説明されたオペレーションを回路が実行するように製造されてよい。
【０１３８】
図１１Ａは、実施形態に係るオペレーションを実行する集積回路を製造するために用いられ得るＩＰコア開発システム１１００を示すブロック図である。ＩＰコア開発システム１１００は、より大きな設計へと組み込まれ得るモジュール式の再利用可能な設計をもたらすために用いられてよい、又は、集積回路（例えば、ＳｏＣ集積回路）全体を構築するために用いられてよい。設計施設１１３０は、高水準プログラミング言語（例えば、Ｃ／Ｃ＋＋）におけるＩＰコア設計のソフトウェアシミュレーション１１１０を生成できる。ソフトウェアシミュレーション１１１０は、シミュレーションモデル１１１２を用いてＩＰコアの挙動を設計、試験及び検証するために用いられ得る。シミュレーションモデル１１１２は、機能、挙動及び／又はタイミングシミュレーションを含んでよい。次に、レジスタ転送レベル（ＲＴＬ）設計１１１５は、シミュレーションモデル１１１２から作成又は合成され得る。ＲＴＬ設計１１１５は、ハードウェアレジスタ間のデジタル信号のフローをモデル化する集積回路の挙動を抽出し、モデル化されたデジタル信号を用いて実行される関連するロジックを含む。ＲＴＬ設計１１１５に加えて、論理レベル又はトランジスタレベルにおける下位レベルの設計が作成、設計又は合成されてもよい。したがって、初期の設計及びシミュレーションの特定の詳細が変化し得る。
【０１３９】
ＲＴＬ設計１１１５又はこれと同等のものは、ハードウェアモデル１１２０へと設計施設によりさらに合成されてよく、ハードウェアモデル１１２０は、ハードウェア記述言語（ＨＤＬ）又は物理的な設計データのいくつか他の表現であってよい。ＨＤＬは、ＩＰコア設計を検証するためにさらにシミュレーション又は試験されてよい。ＩＰコア設計は、不揮発性メモリ１１４０（例えば、ハードディスク、フラッシュメモリ又は任意の不揮発性記憶媒体）を用いて、サードパーティの製造施設１１６５への配送のために格納され得る。代替的に、ＩＰコア設計は、有線接続１１５０又は無線接続１１６０を介して（例えば、インターネットを介して）伝送され得る。製造施設１１６５は、次に、ＩＰコア設計に少なくとも部分的に基づいて、集積回路を製造し得る。製造された集積回路は、本明細書で説明される少なくとも１つの実施形態に従ってオペレーションを実行するように構成され得る。
【０１４０】
図１１Ｂは、本明細書において説明されるいくつかの実施形態に係る集積回路パッケージアセンブリ１１７０の垂直断面図を示す。集積回路パッケージアセンブリ１１７０は、本明細書において説明される１又は複数のプロセッサ又はアクセラレータデバイスの実装を示す。パッケージアセンブリ１１７０は、基板１１８０に接続されるハードウェアロジック１１７２、１１７４の複数のユニットを含む。ロジック１１７２、１１７４は、構成可能論理又は固定機能論理ハードウェアにおいて少なくとも部分的に実装されてよく、本明細書において説明されるプロセッサコア、グラフィックスプロセッサ又は他のアクセラレータデバイスのいずれかの１又は複数の部分を含み得る。ロジック１１７２、１１７４の各ユニットは、半導体ダイ内に実装され、かつ、相互接続構造１１７３を介して基板１１８０と結合され得る。相互接続構造１１７３は、ロジック１１７２、１１７４と基板１１８０との間で電気信号をルーティングするように構成されてよく、限定されることはないが、バンプ又はピラーなどの相互接続を含み得る。いくつかの実施形態において、相互接続構造１１７３は、例えば、ロジック１１７２、１１７４のオペレーションに関連付けられる入力／出力（Ｉ／Ｏ）信号、及び／又は、電力又は接地信号などの電気信号をルーティングするように構成されてよい。いくつかの実施形態において、基板１１８０は、エポキシベースの積層基板である。他の実施形態において、パッケージ基板１１８０は他の適したタイプの基板を含んでよい。パッケージアセンブリ１１７０は、パッケージ相互接続１１８３を介して他の電気デバイスに接続され得る。パッケージ相互接続１１８３は、マザーボード、他のチップセット又はマルチチップモジュールなどの他の電気デバイスに電気信号をルーティングするために基板１１８０の表面に結合されてよい。
【０１４１】
いくつかの実施形態において、ロジック１１７２、１１７４のユニットは、ロジック１１７２、１１７４間で電気信号をルーティングするように構成されるブリッジ１１８２と電気的に結合される。ブリッジ１１８２は、電気信号のルーティングを提供する高密度な相互接続構造であってよい。ブリッジ１１８２は、ガラス又は適切な半導体材料から構成されるブリッジ基板を含んでよい。電気的なルーティング機構は、ロジック１１７２、１１７４間のチップ間接続を提供するブリッジ基板上に形成され得る。
【０１４２】
ロジック１１７２、１１７４の２つのユニット及びブリッジ１１８２が示されているが、本明細書において説明される実施形態では、より多い又はより少ない数の論理ユニットを１又は複数のダイ上に含んでよい。単一のダイ上にロジックが含まれる場合にブリッジ１１８２が除外されてよいので、１又は複数のダイは、ゼロ又はそれより多いブリッジにより接続されてよい。代替的に、ロジックの複数のダイ又はユニットは、１又は複数のブリッジにより接続され得る。さらに、複数の論理ユニット、ダイ及びブリッジは、３次元構成を含む他の可能な構成と一緒に接続されることができる。
【０１４３】
チップ集積回路上の例示的なシステム
【０１４４】
図１２〜図１４Ｂは、本明細書において説明される様々な実施形態に係る、１又は複数のＩＰコアを用いて製造され得る例示的な集積回路及び関連するグラフィックスプロセッサを示す。図示されるものに加えて、他のロジック及び回路が含まれてよく、これらは、追加のグラフィックスプロセッサ／コア、周辺機器インタフェースコントローラ又は汎用プロセッサコアを含む。
【０１４５】
図１２は、実施形態に係る、１又は複数のＩＰコアを用いて製造され得るチップ集積回路１２００上の例示的なシステムを示すブロック図である。例示的な集積回路１２００は、１又は複数のアプリケーションプロセッサ１２０５（例えば、ＣＰＵ）、少なくとも１つのグラフィックスプロセッサ１２１０を含み、イメージプロセッサ１２１５及び／又はビデオプロセッサ１２２０をさらに含んでよく、これらのいずれかは、同じ又は複数の異なる設計施設からのモジュール式のＩＰコアであってよい。集積回路１２００は、ＵＳＢコントローラ１２２５、ＵＡＲＴコントローラ１２３０、ＳＰＩ／ＳＤＩＯコントローラ１２３５及びＩ２Ｓ／Ｉ２Ｃコントローラ１２４０を含む周辺機器又はバスロジックを含む。さらに、集積回路は、高精細度マルチメディアインタフェース（ＨＤＭＩ（登録商標））コントローラ１２５０及びモバイル業界プロセッサインタフェース（ＭＩＰＩ）ディスプレイインタフェース１２５５のうちの１又は複数に結合されるディスプレイデバイス１２４５を含み得る。ストレージは、フラッシュメモリ及びフラッシュメモリコントローラを含むフラッシュメモリサブシステム１２６０により提供されてよい。メモリインタフェースは、ＳＤＲＡＭ又はＳＲＡＭメモリデバイスへのアクセスために、メモリコントローラ１２６５を介して提供されてよい。いくつかの集積回路は、埋め込み型のセキュリティエンジン１２７０をさらに含む。
【０１４６】
図１３Ａ〜図１３Ｂは、本明細書において説明される実施形態に係る、ＳｏＣ内での使用のための例示的なグラフィックスプロセッサを示すブロック図である。図１３Ａは、実施形態に係る、１又は複数のＩＰコアを用いて製造され得るチップ集積回路上のシステムの例示的なグラフィックスプロセッサ１３１０を示す。図１３Ｂは、実施形態に係る、１又は複数のＩＰコアを用いて製造され得るチップ集積回路上のシステムのさらなる例示的なグラフィックスプロセッサ１３４０を示す。図１３Ａのグラフィックスプロセッサ１３１０は、低電力のグラフィックスプロセッサコアの例である。図１３Ｂのグラフィックスプロセッサ１３４０は、より高性能なグラフィックスプロセッサコアの例である。グラフィックスプロセッサ１３１０、１３４０のそれぞれは、図１２のグラフィックスプロセッサ１２１０の変形例であり得る。
【０１４７】
図１３Ａに示されるように、グラフィックスプロセッサ１３１０は、頂点プロセッサ１３０５及び１又は複数のフラグメントプロセッサ１３１５Ａ−１３１５Ｎ（例えば、１３１５Ａ、１３１５Ｂ、１３１５Ｃ、１３１５Ｄから１３１５Ｎ−１及び１３１５Ｎ）を含む。グラフィックスプロセッサ１３１０は、別個のロジックを介して異なるシェーダプログラムを実行でき、頂点プロセッサ１３０５は、頂点シェーダプログラムに対するオペレーションを実行するために最適化され、一方、１又は複数のフラグメントプロセッサ１３１５Ａ−１３１５Ｎは、フラグメント又はピクセルシェーダプログラムに対するフラグメント（例えば、ピクセル）シェーディングオペレーションを実行する。頂点プロセッサ１３０５は、３Ｄグラフィックスパイプラインの頂点処理ステージを実行し、プリミティブ及び頂点データを生成する。フラグメントプロセッサ１３１５Ａ−１３１５Ｎは、頂点プロセッサ１３０５により生成されたプリミティブ及び頂点データを用いて、ディスプレイデバイス上に表示されるフレームバッファを生成する。一実施形態において、フラグメントプロセッサ１３１５Ａ−１３１５Ｎは、ＯｐｅｎＧＬ  ＡＰＩに提供されるようなフラグメントシェーダプログラムを実行するために最適化され、直接３Ｄ  ＡＰＩにおいて提供されるようなピクセルシェーダプログラムと同様のオペレーションを実行するために用いられてよい。
【０１４８】
グラフィックスプロセッサ１３１０は、１又は複数のメモリ管理ユニット（ＭＭＵ）１３２０Ａ−１３２０Ｂ、キャッシュ１３２５Ａ−１３２５Ｂ及び回路相互接続１３３０Ａ−１３３０Ｂをさらに含む。１又は複数のＭＭＵ１３２０Ａ−１３２０Ｂは、頂点プロセッサ１３０５及び／又はフラグメントプロセッサ１３１５Ａ−１３１５Ｎを含むグラフィックスプロセッサ１３１０に対する仮想−物理アドレスマッピングを提供し、１又は複数のキャシュ１３２５Ａ−１３２５Ｂに格納される頂点又は画像／テクスチャデータに加えて、メモリに格納される参照頂点又は画像／テクスチャデータであってよい。一実施形態において、１又は複数のＭＭＵ１３２０Ａ−１３２０Ｂは、システム内の他のＭＭＵと同期されてよく、図１２の１又は複数のアプリケーションプロセッサ１２０５、イメージプロセッサ１２１５及び／又はビデオプロセッサ１２２０に関連付けられる１又は複数のＭＭＵを含み、各プロセッサ１２０５−１２２０は、共有又は統合された仮想メモリシステムに加わることができる。１又は複数の回路相互接続１３３０Ａ−１３３０Ｂは、実施形態に従って、ＳｏＣの内部バスを介して又は直接接続を介してのいずれか一方で、グラフィックスプロセッサ１３１０がＳｏＣ内の他のＩＰコアとインタフェース接続することを可能にする。
【０１４９】
図１３Ｂに示されるように、グラフィックスプロセッサ１３４０は、図１３Ａのグラフィックスプロセッサ１３１０の１又は複数のＭＭＵ１３２０Ａ−１３２０Ｂ、キャッシュ１３２５Ａ−１３２５Ｂ及び回路相互接続１３３０Ａ−１３３０Ｂを含む。グラフィックスプロセッサ１３４０は、１又は複数のシェーダコア１３５５Ａ−１３５５Ｎ（例えば、１３５５Ａ、１３５５Ｂ、１３５５Ｃ、１３５５Ｄ、１３５５Ｅ、１３５５Ｆから１３５５Ｎ−１及び１３５５Ｎ）を含み、グラフィックスプロセッサ１３４０は、シングルコア又はタイプ又はコアがすべてのタイプのプログラマブルシェーダコードを実行できる統合されたシェーダコアアーキテクチャを提供し、統合されたシェーダコアアーキテクチャは、頂点シェーダ、フラグメントシェーダ及び／又はコンピュートシェーダを実装するシェーダプログラムコードを含む。提示する正確な数のシェーダコアは、実施形態及び実装間で変化し得る。さらに、グラフィックスプロセッサ１３４０は、コア間タスクマネージャ１３４５を含み、コア間タスクマネージャ１３４５は、１又は複数のシェーダコア１３５５Ａ−１３５５Ｎに実行スレッドをディスパッチするスレッドディスパッチャ、及び、タイルベースのレンダリングに対するタイル化オペレーションをアクセラレートするタイル化ユニット１３５８としての機能を果たし、タイル化ユニット１３５８では、例えば、シーン内の局所空間のコヒーレンスを活用するために、又は、内部キャッシュの利用を最適化するために、シーンに対するレンダリングオペレーションが画像空間において細分化される。
【０１５０】
図１４Ａ〜図１４Ｂは、本明細書において説明される実施形態に係るさらなる例示的なグラフィックスプロセッサロジックを示す。図１４Ａは、図１２のグラフィックスプロセッサ１２１０に含まれ得、及び、図１３Ｂにあるような統合されたシェーダコア１３５５Ａ−１３５５Ｎであり得るグラフィックスコア１４００を示す。図１４Ｂは、追加の高並列汎用グラフィックス処理ユニット１４３０を示し、これは、マルチチップモジュール上の展開に適した高並列汎用グラフィックス処理適合ユニットである。
【０１５１】
図１４Ａに示されるように、グラフィックスコア１４００は、共有命令キャッシュ１４０２、テクスチャユニット１４１８、及び、グラフィックスコア１４００内の実行リソースに共通するキャッシュ／共有メモリ１４２０を含む。グラフィックスコア１４００は、各コアに対する複数のスライス１４０１Ａ−１４０１Ｎ又はパーティショニングを含み得、グラフィックスプロセッサは、グラフィックスコア１４００の複数のインスタンスを含み得る。スライス１４０１Ａ−１４０１Ｎは、ローカル命令キャッシュ１４０４Ａ−１４０４Ｎと、スレッドスケジューラ１４０６Ａ−１４０６Ｎと、スレッドディスパッチャ１４０８Ａ−１４０８Ｎと、レジスタ１４１０Ａ−１４４０Ｎのセットとを含むサポートロジックを含み得る。論理演算を実行するために、スライス１４０１Ａ−１４０１Ｎは、追加的な機能ユニット（ＡＦＵ１４１２Ａ−１４１２Ｎ）、浮動小数点ユニット（ＦＰＵ１４１４Ａ−１４１４Ｎ）、整数算術論理ユニット（ＡＬＵ１４１６−１４１６Ｎ）、アドレス計算ユニット（ＡＣＵ１４１３Ａ−１４１３Ｎ）、倍精度浮動小数点ユニット（ＤＰＦＰＵ１４１５Ａ−１４１５Ｎ）及び行列処理ユニット（ＭＰＵ１４１７Ａ−１４１７Ｎ）のセットを含み得る。
【０１５２】
計算ユニットのいくつかは、特定の精度で動作する。例えば、ＦＰＵ１４１４Ａ−１４１４Ｎは、単精度（３２ビット）及び半精度（１６ビット）浮動小数点演算を実行でき、一方、ＤＰＦＰＵ１４１５Ａ−１４１５Ｎは、倍精度（６４ビット）浮動小数点演算を実行する。ＡＬＵ１４１６Ａ−１４１６Ｎは、８ビット、１６ビット及び３２ビットの精度で、可変精度の整数演算を実行でき、混合精度の演算用に構成され得る。ＭＰＵ１４１７Ａ−１４１７Ｎは、混合精度の行列演算用に構成されることもでき、半精度の浮動小数点及び８ビット整数演算を含む。ＭＰＵ１４１７−１４１７Ｎは、機械学習アプリケーションフレームワークをアクセラレートする様々な行列演算を実行でき、アクセラレートされる汎用行列−行列乗算（ＧＥＭＭ）に対するサポートを可能にすることを含む。ＡＦＵ１４１２Ａ−１４１２Ｎは、浮動小数点又は整数ユニットによりサポートされていない追加の論理演算を実行でき、追加の論理演算は、三角関数演算（例えば、サイン、コサインなど）を含む。
【０１５３】
図１４Ｂに示されるように、汎用処理ユニット（ＧＰＧＰＵ）１４３０は、グラフィックス処理ユニットのアレイにより実行される高並列計算操作を可能にするように構成され得る。さらに、ＧＰＧＰＵ１４３０は、特に、ディープニューラルネットワークに対する訓練スピードを向上させるマルチＧＰＵクラスタを作成するＧＰＧＰＵの他の例に直接関連し得る。ＧＰＧＰＵ１４３０は、ホストプロセッサとの接続を可能にするホストインタフェース１４３２を含む。一実施形態において、ホストインタフェース１４３２は、ＰＣＩ  Ｅｘｐｒｅｓｓインタフェースである。しかしながら、ホストインタフェースはまた、ベンダ固有の通信インタフェース又は通信ファブリックであり得る。ＧＰＧＰＵ１４３０は、ホストプロセッサからコマンドを受信し、グローバルスケジューラ１４３４を用いて、これらのコマンドに関連付けられる実行スレッドをコンピュートクラスタ１４３６Ａ−１４３６Ｈのセットに分散させる。コンピュートクラスタ１４３６Ａ−１４３６Ｈは、キャッシュメモリ１４３８を共有する。キャッシュメモリ１４３８は、コンピュートクラスタ１４３６Ａ−１４３６Ｈ内のキャッシュメモリ用の高レベルキャッシュとしての機能を果たし得る。
【０１５４】
ＧＰＧＰＵ１４３０は、メモリコントローラ１４４２Ａ−１４４２Ｂのセットを介してコンピュートクラスタ１４３６Ａ−１４３６Ｈと結合されるメモリ１４４３４Ａ−１４４３４Ｂを含む。様々な実施形態において、メモリ１４３４Ａ−１４３４Ｂは、ダイナミックランダムアクセスメモリ（ＤＲＡＭ）、又は、グラフィックスダブルデータレート（ＧＤＤＲ）メモリを含むシンクロナスグラフィックスランダムアクセスメモリ（ＳＧＲＡＭ）などのグラフィックスランダムアクセスメモリを含む様々なタイプのメモリデバイスを含み得る。
【０１５５】
一実施形態において、コンピュートクラスタ１４３６Ａ−１４３６Ｈはそれぞれ、グラフィックスコアのセット、例えば、図１４Ａのグラフィックスコア１４００を含み、これは、機械学習計算に適したものを含む精度の範囲で計算操作を実行できる複数のタイプの整数及び浮動小数点論理ユニットを含み得る。例えば、及び、一実施形態において、コンピュートクラスタ１４３６Ａ−１４３６Ｈのそれぞれにおける浮動小数点ユニットの少なくともあるサブセットについては、１６ビット又は３２ビット浮動小数点演算を実行するように構成され得、一方、浮動小数点ユニットの異なるサブセットについては、６４ビット浮動小数点演算を実行するように構成され得る。
【０１５６】
ＧＰＧＰＵ１４３０の複数のインスタンスは、コンピュートクラスタとして動作するように構成され得る。同期及びデータ交換のためにコンピュートクラスタにより用いられる通信メカニズムは、実施形態にわたって変化する。一実施形態において、ＧＰＧＰＵ１４３０の複数のインスタンスは、ホストインタフェース１４３２を介して通信する。一実施形態において、ＧＰＧＰＵ１４３０は、ＧＰＧＰＵの他のインスタンスへの直接接続を有効にするＧＰＵリンク１４４０とＧＰＧＰＵ１４３０を結合するＩ／Ｏハブ１４３９を含む。一実施形態において、ＧＰＵリンク１４４０は、ＧＰＧＰＵ１４３０の複数のインスタンス間での通信及び同期を有効にする専用のＧＰＵ間ブリッジに結合される。一実施形態において、ＧＰＵリンク１４４０は、他のＧＰＧＰＵ又は並列プロセッサに対してデータを送受信する高速相互接続と結合する。一実施形態において、ＧＰＧＰＵ１４３０の複数のインスタンスは、別個のデータ処理システム内にあり、ホストインタフェース１４３２を介してアクセス可能なネットワークデバイスを介して通信する。一実施形態において、ＧＰＵリンク１４４０は、ホストインタフェース１４３２に加えて又は代替として、ホストプロセッサへの接続を可能にするように構成され得る。
【０１５７】
一方、ＧＰＧＰＵ１４３０の示される構成は、ニューラルネットワークを訓練するように構成され得、一実施形態では、高性能又は低電力推論プラットフォーム内での展開のために構成され得るＧＰＧＰＵ１４３０の代替構成を提供する。推論構成において、ＧＰＧＰＵ１４３０は、訓練構成と比較して少ない数のコンピュートクラスタ１４３６Ａ−１４３６Ｈを含む。さらに、メモリ１４３４Ａ−１４３４Ｂに関連付けられるメモリ技術は、高度な帯域幅メモリ技術が訓練構成に専念する場合、推論構成と訓練構成との間で異なってよい。一実施形態において、ＧＰＧＰＵ１４３０の推論構成は、特定の命令を推論することをサポートすることができる。例えば、推論構成は、１又は複数の８ビット整数ドット積命令に対するサポートを提供でき、これは、展開されるニューラルネットワークに対する推論オペレーション中に一般的に用いられる。
ランタイム中に機械学習エンジンを訓練するための装置及び方法
【０１５８】
上記で言及したように、レイトレーシングは、物理ベースのレンダリングを通じて光輸送がシミュレーションされるグラフィックス処理技術である。レイトレーシングにおける重要な演算のうちの１つは、バウンディングボリューム階層（ＢＶＨ）におけるノードのトラバーサル及びインターセクション試験を要求する可視性クエリを処理することである。
【０１５９】
レイ及びパストレーシングベースの技術は、各ピクセルを通じてレイ及びパスをトレーシングすることにより、及び、ランダムサンプリングを用いて、高度なエフェクト、例えば、陰影、光沢度、間接照明などを算出することにより、画像を算出する。わずかなサンプルのみを用いることは、速いがノイズのある画像を生成することになり、一方、多くのサンプルを用いることは、高品質の画像を生成するが、費用が高すぎる。
【０１６０】
過去数年において、リアルタイムの利用のためのレイ／パストレーシングに対する飛躍的な解決方法は、「ノイズ除去」−画像処理技術を用いて、ノイズのある低いサンプルカウントの入力から高品質、フィルタ／ノイズ除去画像を生成する処理−の形式で出現する。最も有効なノイズ除去技術は、ノイズのある画像がより多くのサンプルで算出されている場合、ノイズのある画像がどのようなものかを畳み込みニューラルネットワーク（ＣＮＮ）が学習するディープラーニング／機械学習に依存する。これは、低いサンプルカウントの入力及びグラウンドトゥルースを用いて訓練データを生成することにより、同じシーン及び視点に対して完全に収束した解決方法により、及び、ＣＮＮを訓練して、問題になっているピクセルの周りのノイズのあるピクセル入力の近隣から収束したピクセルを予測することにより機能する。
【０１６１】
完璧ではないが、このＡＩベースのノイズ除去技術は、驚くべき効果を証明している。しかしながら、ネットワークが間違った結果を予測するかもしれないので、好適な訓練データが要求される点に注意が必要である。例えば、アニメ映画スタジオが陸上のシーンに関して、過去の映画のノイズ除去ＣＮＮを訓練しており、次に、水上に関する新たな映画セットからフレームをノイズ除去するために、上記の訓練されたＣＮＮを使用することが試みられる場合、ノイズ除去オペレーションが準最適に（ｓｕｂ−ｏｐｔｉｍａｌｌｙ）実行する。
【０１６２】
この問題に対処するために、本発明の一実施形態では、レンダリングしつつ学習データを動的に収集し、現在実行中のデータに基づいて、ＣＮＮなどの機械学習エンジンを継続的に訓練することで、目下のタスクに対して機械学習エンジンを継続的に改善する。本実施形態では、ランタイムの前に訓練フェーズをさらに実行してよいが、ランタイム中に必要に応じて機械学習の重みを調整し続ける。さらに、本実施形態では、フレーム毎又はＮ個のフレーム毎に学習データの生成を画像のサブ領域に制限することによる訓練に要求される参照データを計算する費用が高くなることを回避する。特に、フレームのノイズのある入力は、現在のネットワークで完全なフレームをノイズ除去するために生成される。さらに、以下に説明されるように、参照ピクセルの小さな領域が継続的な訓練のために生成されて用いられる。
【０１６３】
既存のノイズ除去の実施は、訓練フェーズ及びランタイムフェーズにおいて動作する。訓練フェーズ中に、ネットワークトポロジは、ピクセルカラー、デプス、標準、標準偏差、プリミティブＩＤ及びアルベドなどの様々なピクセル毎のデータチャネルを用いてＮ×Ｎピクセルの領域をどれが受信するかが定義され、最終的なピクセルカラーを生成する。「代表的な」訓練データのセットが、１フレーム相当の低いサンプルカウントの入力を用いて、かつ、非常に高いサンプルカウントで算出される「所望の」ピクセルカラーを参照して生成される。これらの入力に対してネットワークが訓練されることで、ネットワークの「理想的な」重みのセットを生成する。これらの実装において、参照データは、所望の結果に対するネットワークの出力に最も密接にマッチするネットワークの重みを訓練するために用いられる。
【０１６４】
ランタイム時に、所与の予め算出された理想的なネットワークの重みがロードされ、ネットワークが初期化される。各フレームについて、低いサンプルカウントの画像のノイズ除去入力（つまり、訓練のために用いられものと同じ）が生成される。各ピクセルについて、所与の近隣のピクセルの入力が「ノイズ除去」ピクセルカラーを予測するためにネットワークを通じて実行されることで、ノイズ除去されるフレームを生成する。
【０１６５】
図１５は、初期訓練の実施についての一実施形態を示す。機械学習エンジン１５００（例えば、ＣＮＮ）は、ピクセルカラー、デプス、標準、標準偏差、プリミティブＩＤ及びアルベドなどの様々なピクセル毎のデータチャネルを用いて、Ｎ×Ｎピクセルの領域を高いサンプルカウントの画像データ１５０２として受信し、最終的なピクセルカラーを生成する。代表的な訓練データは、１フレーム相当の低いサンプルカウントの入力１５０１を用いて生成される。これらの入力に対してネットワークが訓練され、機械学習エンジン１５００は、ランタイム時に低いサンプルカウントの画像をノイズ除去するためにその後に用いる「理想的な」重み１５０５のセットを生成する。
【０１６６】
上記の技術を向上させるために、本発明の一実施形態は、ノイズ除去フェーズを増強して、フレーム毎又はフレームのサブセット毎（例えば、Ｎ個のフレーム毎、Ｎ＝２、３、４、１０、２５など）に新たな訓練データを生成する。特に、図１６に示されるように、本実施形態では、高いサンプルカウントで別個の高いサンプルカウントのバッファ１６０４へとレンダリングされる「新たな参照領域」１６０２とここでは称される各フレーム内の１又は複数の領域を選択する。低いサンプルカウントのバッファ１６０３は、（新たな参照領域１６０２に対応する低サンプル領域１６０４を含む）低いサンプルカウントの入力フレーム１６０１を格納する。
【０１６７】
一実施形態において、新たな参照領域１６０２の位置はランダムに選択される。代替的に、新たな参照領域１６０２の位置は、（例えば、フレーム間の領域の予め定義された動きを用いて、フレームの中央における特定の領域に制限されるなど）それぞれの新たなフレームに対して予め規定された方式で調整されてよい。
【０１６８】
新たな参照領域がどのように選択されるかにかかわらず、それは、ノイズ除去に用いられる訓練された重み１６０５を継続的に改善及び更新するために機械学習エンジン１６００により用いられる。特に、各新たな参照領域１６０２からの参照ピクセルのカラー及び対応する低いサンプルカウントの領域１６０７からのノイズのある参照ピクセルの入力がレンダリングされる。次に、高いサンプルカウントの参照領域１６０２及び対応する低いサンプルカウントの領域１６０７を用いて、補足的な訓練が機械学習エンジン１６００上で実行される。初期訓練とは対照的に、この訓練は、それぞれの新たな参照領域１６０２に対してランタイム中継続的に実行され、これにより、機械学習エンジン１６００が正確に訓練されていることを保証する。例えば、ピクセル毎のデータチャネル（例えば、ピクセルカラー、デプス、標準、標準偏差など）が評価されてよく、機械学習エンジン１６００は、それを用いて、訓練された重み１６０５に対する調整を行う。訓練の場合（図１５）にあるように、機械学習エンジン１６００は、低いサンプルカウントの入力フレーム１６０１からノイズを除去するために理想的な重み１６０５のセットに向けて訓練して、ノイズ除去されるフレーム１６２０を生成する。しかしながら、本実施形態では、訓練された重み１６０５は、新たなタイプの低いサンプルカウントの入力フレーム１６０１についての新たな画像特性に基づいて継続的に更新される。
【０１６９】
一実施形態において、機械学習エンジン１６００により実行される再訓練オペレーションは、グラフィックスプロセッサユニット（ＧＰＵ）又はホストプロセッサ上のバックグラウンドプロセスにおいて同時に実行される。ドライバコンポーネント及び／又はＧＰＵハードウェアコンポーネントとして実装され得るレンダリングループは、キューに置く新たな訓練データ（例えば、新たな参照領域１６０２の形式で）を継続的に生成する。ＧＰＵ又はホストプロセッサ上で実行されるバックグラウンド訓練プロセスは、このキューから新たな訓練データを継続的に読み込んで、機械学習エンジン１６００を再訓練して、適切な間隔で新たな重み１６０５を用いてそれを更新する。
【０１７０】
図１７は、バックグラウンド訓練プロセス１７００がホストＣＰＵ１７１０により実装されるそのような実装の例を示す。特に、本実施形態において、バックグラウンド訓練プロセス１７００は、高いサンプルカウントの新たな参照領域１６０２及び対応する低サンプル領域１６０４を用いて、訓練された重み１６０５を継続的に更新することで、機械学習エンジン１６００を更新する。
【０１７１】
図１８Ａに示されるように、マルチプレイヤーオンラインゲームなどにおける一実施例では、異なるホストマシン１８２０−１８２２は、バックグラウンド訓練プロセス１７００Ａ−Ｃがサーバ１８００（例えば、ゲームサーバなど）に伝送する参照領域を個々に生成する。次に、サーバ１８００は、ホスト１８２１−１８２２のそれぞれから受信した新たな参照領域を用いて機械学習エンジン１８１０に対する訓練を実行し、前に説明したように重み１８０５を更新する。重み１６０５Ａ−Ｃを格納するホストマシン１８２０にこれらの重み１８０５を伝送することで、個々の機械学習エンジン（図示せず）をそれぞれ更新する。サーバ１８００は、短期間に多数の参照領域が提供され得るので、ユーザにより実行される任意の所与のアプリケーション（例えば、オンラインゲーム）に関する重みを効果的かつ正確に更新できる。
【０１７２】
図１８Ｂに示されるように、異なるホストマシンは、（例えば、前に説明したような訓練／参照領域１６０２に基づいて）新たに訓練された重みを生成し、新たに訓練された重みをサーバ１８００（例えば、ゲームサーバなど）と共有してよい、又は、代替的に、ピアツーピア共有プロトコルを使用してよい。サーバ上の機械学習管理コンポーネント１８１１は、ホストマシンのそれぞれから受信した新たな重みを用いて組み合わせられた重み１８０５のセットを生成する。組み合わせられた重み１８０５は、例えば、本明細書において説明されるように、新たな重みから生成される平均であり、継続的に更新され得る。一度生成されると、次に、本明細書において説明されたような組み合わせられた重みを使用してノイズ除去オペレーションを実行し得るホストマシン１８２０−１８２１のそれぞれに組み合わせられた重み１６０５Ａ−Ｃのコピーが伝送されて格納され得る。
【０１７３】
一実施形態において、この準閉ループ更新メカニズムは、ハードウェア製造業者により用いられ得る。例えば、参照ネットワークは、ハードウェア製造業者により分配されるドライバの一部として含まれてよい。ドライバは、本明細書において説明される技術を用いて新たな訓練データを生成し、これらをハードウェア製造業者に戻して継続的に提示するので、ハードウェア製造業者は、この情報を用いて次のドライバの更新のためにその機械学習実装を改善し続ける。
【０１７４】
一実施例において（例えば、レンダリングファーム上のバッチ映画レンダリングにおいて）、レンダラは、経時的に複数のレンダリングノードからこのデータを集約する（そのスタジオのレンダリングファーム内の）専用のサーバ又はデータベースに新たに生成された訓練領域を伝送する。別個のマシン上の別個の処理は、スタジオ専用のノイズ除去ネットワークを継続的に改善し、新たなレンダリングジョブは、最新の訓練ネットワークを常に使用する。
【０１７５】
本発明の一実施形態に係る方法が図１９に示される。方法は、本明細書において説明されるアーキテクチャ上で実施され得るが、任意の特定のシステム又はグラフィックス処理アーキテクチャに限定されることはない。
【０１７６】
１９０１において、初期訓練フェーズの一部として、低いサンプルカウントの画像データ及び高いサンプルカウントの画像データが複数の画像フレームに対して生成される。１９０２において、機械学習ノイズ除去エンジンは、高い／低いサンプルカウントの画像データを用いて訓練される。一実施形態において、例えば、ピクセルの特徴に関連付けられる畳み込みニューラルネットワークの重みのセットは、訓練に従って更新され得る。しかしながら、任意の機械学習アーキテクチャが用いられてよい。
【０１７７】
１９０３において、ランタイム時に、高いサンプルカウントを有する少なくとも１つの参照領域と共に低いサンプルカウントの画像フレームが生成される。１９０４において、機械学習エンジンの訓練を継続的に改善するために、高いサンプルカウントの参照領域が機械学習エンジン及び／又は別個の訓練ロジック（例えば、バックグラウンド訓練モジュール１７００）により用いられる。例えば、一実施形態において、どのようにノイズ除去を最も効果的に実行するかを機械学習エンジン１９０４に教え続けるために、高いサンプルカウントの参照領域が低いサンプルカウントの画像の対応する部分との組み合わせで用いられる。ＣＮＮ実装において、例えば、これは、ＣＮＮに関連付けられる重みを更新することを含み得る。
【０１７８】
上述した複数の様々な実施形態は、機械学習エンジンへのフィードバックループが構成される方式、訓練データを生成するエンティティ、訓練データが訓練エンジンにフィードバックされる方式、及び、改善されたネットワークがレンダリングエンジンに提供される方法、などで実施されてよい。さらに、上述した上記の実施形態が単一の参照領域を用いて継続的な訓練を実行する一方、任意の数の参照領域が用いられてよい。さらに、前に言及したように、参照領域は、異なるサイズであってよく、異なる数の画像フレームに対して用いられてよく、異なる技術（例えば、ランダム、予め定められたパターンに従うなど）を用いて画像フレーム内の異なる位置に配置されてよい。
【０１７９】
さらに、畳み込みニューラルネットワーク（ＣＮＮ）が、機械学習エンジン１６００の一例として説明されているが、本発明の基礎となる原理は、新たな訓練データを用いて、その結果を継続的に改善することが可能な機械学習エンジンの任意の形式を用いて実装され得る。例示の目的ではあるが、限定的ではなく、他の機械学習実装は、数例を挙げると、データ処理のグループ方法（Ｇｒｏｕｐ  Ｍｅｔｈｏｄ  ｏｆ  Ｄａｔａ  Ｈａｎｄｌｉｎｇ、ＧＭＤＨ）、長・短期記憶、ディープリザーバ計算、ディープビリーフネットワーク、テンソル深層スタックネットワーク及び深層予測符号化ネットワーク（ｄｅｅｐ  ｐｒｅｄｉｃｔｉｖｅ  ｃｏｄｉｎｇ  ｎｅｔｗｏｒｋｓ）を含む。
効率的な分散型ノイズ除去のための装置及び方法
【０１８０】
上述したように、ノイズ除去は、滑らかでノイズのない画像でリアルタイムレイトレーシングするための重要な機能になってきている。レンダリングは、複数のデバイス上の分散型システムにわたって行われ得るが、今までのところ、既存のノイズ除去のフレームワークはすべて、単一のマシン上の単一のインスタンスに対して動作する。複数のデバイスにわたってレンダリングが行われる場合、それらは、画像のノイズ除去される部分を計算するためにアクセス可能なピクセルをすべてレンダリングすることができない可能性がある。
【０１８１】
本発明の一実施形態は、人工知能（ＡＩ）及び非ＡＩベースのノイズ除去技術の両方と連携する分散型ノイズ除去アルゴリズムを含む。画像の領域は、分散型レンダリングオペレーションからノードにわたって既に分散されている、又は、単一のフレームバッファから分裂及び分散される、のいずれか一方である。必要な場合に、十分なノイズ除去を計算するために必要とされる近隣領域のゴースト領域が近隣ノードから収集され、最終結果のタイルが最終的な画像に合成される。
分散型処理
【０１８２】
図２０は、複数のノード２０２１−２０２３がレンダリングを実行する本発明の一実施形態を示す。３つのノードのみが簡潔の目的で図示されているが、本発明の基礎となる原理は、ノードの任意の特定の数に限定されることはない。つまり、単一のノードが本発明の特定の実施形態を実施するために用いられてもよい。
【０１８３】
ノード２０２１−２０２３がそれぞれ、画像の一部をレンダリングすることで、この例における領域２０１１−２０１３を結果的にもたらす。矩形の領域２０１１−２０１３が図２０に示されているが、任意の形状の領域が用いられてよく、任意のデバイスが任意の数の領域を処理できる。十分に滑らかなノイズ除去オペレーションを実行するためにノードにより必要とされる領域は、ゴースト領域２０１１−２０１３と称される。言い換えれば、ゴースト領域２００１−２００３は、特定の品質レベルでノイズ除去を実行するのに必要とされるデータ全体を表す。品質レベルを下げることで、ゴースト領域のサイズ、ひいては、要求されるデータ量を低減させており、品質レベルを上げることで、要求されるゴースト領域及び対応するデータを増加させている。
【０１８４】
一実施形態において、ノード２０２１などのノードが特定の品質レベルでその領域２０１１をノイズ除去するのに必要とされるゴースト領域２００１の一部のローカルコピーを行う場合、ノードは、図示されるようにゴースト領域２００１の一部を所有するノード２０２２などの１又は複数の「隣接」ノードから要求されるデータを取り込む。同様に、ノード２０２２が特定の品質レベルでその領域２０１２をノイズ除去するのに必要とされるゴースト領域２００２の一部のローカルコピーを行う場合、ノード２０２２は、ノード２０２１から要求されるゴースト領域データ２０３２を取り込む。取り込みは、バス、相互接続、高速メモリファブリック、ネットワーク（例えば、高速イーサネット（登録商標））を介して実行されてよい、又は、複数のコア間のレンダリングワークを分散させることを可能にするマルチコアチップ（例えば、最も高い解像度又は時間変化のいずれか一方において大きな画像をレンダリングするために用いられる）内のオンチップ相互接続であってもよい。一実施形態において、各ノード２０２１−２０２３は、個々の実行ユニット、又は、グラフィックスプロセッサ内の実行ユニットの特定のセットを有する。
【０１８５】
送信されるデータの具体的な量は、用いられるノイズ除去技術に依存する。さらに、ゴースト領域からのデータは、それぞれの各領域のノイズ除去を改善するために必要とされる任意のデータを含んでよい。一実施形態において、例えば、ゴースト領域データは、画像のカラー／波長、明度／アルファデータ及び／又は標準を含む。しかしながら、本発明の基礎となる原理は、ゴースト領域データの任意の特定のセットに限定されることはない。
一実施形態のさらなる詳細
【０１８６】
より低速なネットワーク又は相互接続のために、このデータの圧縮は、既存の汎用ロスレス又は不可逆圧縮を用いて利用され得る。例では、ｚｌｉｂ、ｇｚｉｐ及びＬｅｍｐｅｌ−Ｚｉｖ−Ｍａｒｋｏｖチェーンアルゴリズム（ＬＺＭＡ）を含むが、これらに限定されることはない。さらなるコンテンツ固有の圧縮は、フレーム間のレイヒット情報における差分が非常にまばらになり得るということに注目することにより用いられ、ノードが前フレームから収集した差分を既に有している場合、その差分に寄与するサンプルのみが送信される必要がある。これらは、これらのサンプルｉを収集するノードに選択的にプッシュされ得る、又は、ノードｉは、他のノードからサンプルを要求できる。一実施形態において、可逆圧縮は、特定のタイプのデータ及びプログラムコードに用いられ、一方、不可逆データは、他のタイプのデータに用いられる。
【０１８７】
図２１は、本発明の一実施形態に係る、ノード２０２１−２０２２間の相互作用についてのさらなる詳細を示す。各ノード２０２１−２０２２は、それぞれの画像領域２０１１−２０１２及びゴースト領域２００１−２００２をレンダリングするためのレイトレーシングレンダリング回路２０８１−２０８２を含む。デノイザ２１００−２１１１は、領域２０１１−２０１２のそれぞれに対するノイズ除去オペレーションを実行し、各ノード２０２１−２０２２は、レンダリング及びノイズ除去に対して責任がある。デノイザ２０２１−２０２２は、例えば、ノイズ除去される領域２１２１−２１２２をそれぞれ生成するために、回路、ソフトウェア又はこれらの任意の組み合わせを有してよい。既に述べたように、ノイズ除去される領域を生成する場合、デノイザ２０２１−２０２２は、異なるノードにより所有されるゴースト領域内のデータに依存する必要があり得る（例えば、デノイザ２１００は、ノード２０２２により所有されるゴースト領域２００２からのデータを必要とし得る）。
【０１８８】
したがって、一実施形態において、デノイザ２１００−２１１１は、領域２０１１−２０１２及びゴースト領域２００１−２００２のそれぞれからのデータを用いてノイズ除去される領域２１２１−２１２２を生成し、領域２０１１−２０１２及びゴースト領域２００１−２００２の少なくとも一部は、別のノードから受信されてもよい。領域データマネージャ２１０１−２１０２は、本明細書において説明されるように、ゴースト領域２００１−２００２からのデータ転送を管理する。一実施形態において、コンプレッサ／デコンプレッサユニット２１３１−２１３２は、ノード２０２１−２０２２間で交換されるゴースト領域データの圧縮及び解凍をそれぞれ実行する。
【０１８９】
例えば、ノード２０２１の領域データマネージャ２１０１は、ノード２０２２からの要求の際に、ゴースト領域２００１からコンプレッサ／デコンプレッサ２１３１にデータを送信してよく、ノード２０２２に伝送される圧縮したデータ２１０６を生成するためにデータを圧縮することで、相互接続、ネットワーク、バス又は他のデータ通信リンク上の帯域幅を低減する。次に、ノード２０２２のコンプレッサ／デコンプレッサ２１３２は、圧縮したデータ２１０６を解凍し、デノイザ２１１１は、解凍されたゴーストデータを用いて領域２０１２からのデータのみで可能なものより高い品質でノイズ除去される領域２０１２を生成する。ノイズ除去される領域２１２２を生成する場合にデノイザ２１１１を利用可能にするために、領域データマネージャ２１０２は、解凍されたゴースト領域２００１からのデータをキャッシュ、メモリ、レジスタファイル又は他のストレージに格納してよい。より高い品質でノイズ除去される領域２１２１を生成するために領域２０１１からのデータとの組み合わせにおいてデータを用いるノード２０２１のデノイザ２１００にゴースト領域２００２からデータを提供するために、同様のオペレーションのセットが実行されてよい。
ＧＲＡＢデータ又はレンダリング
【０１９０】
ノード２０２１−２０２２などのデバイス間の接続が遅い（つまり、閾値レイテンシ及び／又は閾値帯域幅よりも低い）場合、他のデバイスから結果を要求するよりもむしろ、ゴースト領域を局所的にレンダリングするほうが速い可能性がある。これは、ゴースト領域サイズに関するネットワークトランザクション速度及び線形外挿レンダリング時間をトラッキングすることにより、ランタイム時に決定され得る。ゴースト領域全体をレンダリングするほうが速いような場合、複数のデバイスは、最後には画像の同じ部分をレンダリングしてよい。ゴースト領域のレンダリングされた部分の解像度は、ベース領域の分散及び決定されたブラーの度合いに基づいて調整されてよい。
負荷分散
【０１９１】
一実施形態において、静的及び／又は動的な負荷分散スキームは、様々なノード２０２１−２０２３間の処理負荷を分散するために用いられ得る。動的な負荷分散について、ノイズ除去フィルタにより決定される分散は、両方ともノイズ除去に多くの時間を費やし得るが、画像の低分散かつ不鮮明な領域がわずかなサンプルしか必要としない場合には、シーンの特定の領域をレンダリングするのに用いられるサンプルの量をドライブしてよい。特定のノードに割り当てられる特定の領域は、前フレームからのデータに基づいて動的に調整されてよい、又は、すべてのデバイスが同じ作業量を有するようにそれらがレンダリングされるように、デバイスにわたって動的に通信される。
【０１９２】
図２２は、各ノード２０２１−２０２２のそれぞれで実行しているモニタリング２２０１−２２０２が性能測定基準データを収集する一実施形態を示し、性能測定基準データは、ネットワークインタフェース２２１１−２２１２を介してデータを伝送するのにかかった時間、（ゴースト領域データの有無に関わらず）領域をノイズ除去したときに費やした時間、及び、各領域／ゴースト領域をレンダリングするのにかかった時間を含むが、これらに限定されることはない。モニタリング２２０１−２２０２は、これらの性能測定基準をマネージャ又は負荷分散ノード２２０１に戻して報告し、各ノード２０２１−２０２２上の現在のワークロードを識別するためにデータを解析し、様々なノイズ除去領域２１２１−２１２２を処理するのにより効率的なモードを潜在的に決定する。次に、マネージャノード２２０１は、検出された負荷に従って、新たな領域に対する新たなワークロードをノード２０２１−２０２２に分散させる。例えば、マネージャノード２２０１は、負荷が大きくないこれらのノードに多くの作業を伝送してよい、及び／又は、過負荷であるこれらのノードから作業を再度割り当てよい。さらに、負荷分散ノード２２０１は、レンダリング及び／又はノイズ除去がノードのそれぞれにより実行される特定の方式（そのいくつかの例は上述されている）で調整するために、再構成コマンドを伝送してよい。
ゴースト領域の決定
【０１９３】
一実施形態において、ゴースト領域２００１−２００２のサイズ及び形は、デノイザ２１００−２１１１により実装されるノイズ除去アルゴリズムに基づいて決定される。次に、これらのサイズはそれぞれ、ノイズ除去されるサンプルについての検出された分散に基づいて動的に修正され得る。ＡＩノイズ除去自体のために用いられる学習アルゴリズムは、適切な領域サイズを決定するために用いられてよい、又は、バイラテラルブラーなどのその他の場合には、予め定められたフィルタ幅がゴースト領域２００１−２００２のサイズを決定する。学習アルゴリズムを用いる実装において、機械学習エンジンは、マネージャノード２２０１上で実行されてよい、及び／又は、機械学習の一部が、個々のノード２０２１−２０２３のそれぞれで実行されてよい（例えば、図１８Ａ〜図１８Ｂ及び上記の関連する文章を参照）。
最終的な画像の収集
【０１９４】
一実施形態において、最終的な画像は、ゴースト領域又は標準を必要とすることなくノード２０２１−２０２３のそれぞれからレンダリングされてノイズ除去される領域を収集することにより生成される。図２２において、例えば、ノイズ除去される領域２１２１−２１２２は、最終的なノイズ除去された画像２２９０を生成する領域を組み合わせるマネージャノード２２０１の領域プロセッサ２２８０に伝送され、次に、ディスプレイ２２９０上に表示される。領域プロセッサ２２８０は、様々な２Ｄ合成技術を用いて領域を組み合わせてよい。別個のコンポーネントとして図示されているが、領域プロセッサ２２８０及びノイズ除去される画像２２９０は、ディスプレイ２２９０にとって不可欠であり得る。本実施形態において、様々なノード２０２１−２０２２は、ダイレクト送信技術を用いて、ノイズ除去される領域２１２１−２１２２を伝送してよく、領域データの様々な不可逆又は可逆圧縮を潜在的に用いてよい。
【０１９５】
ＡＩノイズ除去は、ゲームがクラウドへと移動するようであるように、依然として費用のかかる操作である。そのようなものとして、複数のノード２０２１−２０２２にわたるノイズ除去の分散処理は、より高いフレームレートを必要とする従来のゲーム又は仮想現実（ＶＲ）に対してリアルタイムのフレームレートを実現することが要求されるようになり得る。映画スタジオも、より迅速なノイズ除去に利用され得る大きなレンダリングファームにおいて頻繁にレンダリングすることになる。
【０１９６】
分散型のレンダリング及びノイズ除去を実行するための方法の一実施形態が図２３に示されている。方法は、上述したシステムアーキテクチャのコンテキスト内で実施され得るが、任意の特定のシステムアーキテクチャに限定されることはない。
【０１９７】
２３０１において、グラフィックスワークは、レイトレーシングオペレーションを実行して画像フレームの領域をレンダリングする複数のノードにディスパッチされる。一実施形態において、各ノードは、オペレーションを実行するのに必要とされるデータをメモリ内に既に有していてよい。例えば、複数のノードのうちの２又はそれより多くが、共通のメモリを共有してよい、又は、ノードのローカルメモリは、レイトレーシングオペレーションの前から既に格納されているデータを有していてよい。代替的に又はさらに、特定のデータが各ノードに伝送されてよい。
【０１９８】
２３０２において、特定のノイズ除去レベル（つまり、性能の許容レベル）に対して要求される「ゴースト領域」が決定される。ゴースト領域は、特定のノイズ除去レベルを実行するのに必要とされる任意のデータを有し、１又は複数の他のノードにより所有されるデータを含む。
【０１９９】
２３０３において、ゴースト領域に関連するデータ（又は、これらの一部）がノード間で交換される。２３０４において、各ノードは、（例えば、交換したデータを用いて）その各領域に対してノイズ除去を実行し、２３０５において、結果が、最終的なノイズ除去された画像フレームを生成するために組み合わせられる。
【０２００】
一実施形態において、例えば、図２２に示されるマネージャノード又は１次ノードは、ノードにワークをディスパッチし、次に、ノードにより実行されるワークを組み合わせて最終的な画像フレームを生成する。別の実施形態では、ノードが、データをやり取りして、最終的な画像フレームをレンダリング及びノイズ除去するピアであるピアベースのアーキテクチャが用いられる。
【０２０１】
本明細書において説明されるノード（例えば、ノード２０２１−２０２３）は、高速ネットワークを介して相互接続されるグラフィックス処理コンピューティングシステムであってよい。代替的に、ノードは、高速メモリファブリックに結合される個々の処理要素であってよい。本実施形態において、ノードのすべては、共通の仮想メモリ空間及び／又は共通の物理メモリを共有してよい。別の実施形態では、ノードは、ＣＰＵ及びＧＰＵの組み合わせであってよい。例えば、上述したマネージャノード２２０１は、ＣＰＵ及び／又はＣＰＵ上で実行されるソフトウェアであってよく、ノード２０２１−２０２２は、ＧＰＵ及び／又はＧＰＵ上で実行されるソフトウェアであってよい。本発明の基礎となる原理にさらに準拠しつつ、様々な異なるタイプのノードが用いられてよい。
例示的なニューラルネットワーク実装
【０２０２】
多くのタイプのニューラルネットワークがあり、ニューラルネットワークのシンプルなタイプはフィードフォワードネットワークである。フィードフォワードネットワークは、ノードが層に配置される非巡回グラフとして実装されてよい。典型的には、フィードフォワードネットワークトポロジは、少なくとも１つの隠れ層により分離される入力層及び出力層を含む。隠れ層は、入力層により受信される入力を出力層において出力を生成するために有用な表現へと変換される。ネットワークノードは、隣接する層におけるノードにエッジを介して完全に接続されるが、各層内のノード間にエッジは存在しない。フィードフォワードネットワークの入力層のノードにおいて受信されるデータは、層を接続するエッジのそれぞれに関連付けられる係数（「重み」）に基づいてそれぞれネットワーク内の各連続層のノードの状態を算出する活性化関数を介して出力層のノードに伝搬（つまり、「フィードフォワード」）される。実行されるアルゴリズムにより表される特定のモデルに応じて、ニューラルネットワークアルゴリズムからの出力は、様々な形式を取ることができる。
【０２０３】
機械学習アルゴリズムが特定の問題をモデル化するために用いられ得る前に、アルゴリズムは、訓練データセットを用いて訓練される。ニューラルネットワークを訓練することは、ネットワークトポロジを選択すること、訓練データのセットを用いてネットワークによりモデル化される問題を表現すること、訓練データセットのすべてのインスタンスに関する最小限のエラーでネットワークモデルが実行するまで、重みを調整することを含む。例えば、ニューラルネットワークに対する教師あり学習の訓練プロセス中に、訓練データセット内のインスタンスを表す入力に応答してネットワークにより生成される出力は、そのインスタンスに対して「正しく」分類された出力と比較され、当該出力と分類された出力と間の差を表すエラー信号が計算され、エラー信号としてのエラーがネットワークの層を通じて後方に伝播されることを最小限に抑えるように、接続に関連付けられる重みが調整される。ネットワークは、訓練データセットのインスタンスから生成される出力のそれぞれに対するエラーが最小限に抑えられる場合に「訓練される」ことが考慮されている。
【０２０４】
機械学習アルゴリズムの精度は、アルゴリズムを訓練するために用いられるデータセットの品質により大きく影響され得る。訓練プロセスは、計算集約型であり得、従来の汎用プロセッサ上で膨大な時間を必要とし得る。したがって、並列処理ハードウェアは、多くのタイプの機械学習アルゴリズムを訓練するために用いられる。これは、ニューラルネットワーク内の係数を調整する際に実行される計算が、もともとそれら自体が並列実装に役立つので、ニューラルネットワークの訓練を最適化するために特に有用である。具体的には、多くの機械学習アルゴリズム及びソフトウェアアプリケーションが、汎用グラフィックス処理デバイス内の並列処理ハードウェアの利用に適合されている。
【０２０５】
図２４は、機械学習ソフトウェアスタック２４００の一般化された図である。機械学習アプリケーション２４０２は、訓練データセットを用いてニューラルネットワークを訓練する、又は、訓練されたディープニューラルネットワークを用いてマシンインテリジェンスを実装するように構成され得る。機械学習アプリケーション２４０２は、ニューラルネットワーク及び／又は展開前にニューラルネットワークを訓練するために用いられ得る専用のソフトウェアのための訓練及び推論機能を含み得る。機械学習アプリケーション２４０２は、限定されることはないが、画像認識、マッピング及び位置特定、自律航法、音声合成、医用イメージング又は言語変換を含む任意のタイプのマシンインテリジェンスを実装できる。
【０２０６】
機械学習アプリケーション２４０２用のハードウェアアクセラレーションは、機械学習フレームワーク２４０４を介して可能にされ得る。機械学習フレームワーク２４０４は、機械学習プリミティブのライブラリを提供できる。機械学習プリミティブは、機械学習アルゴリズムにより一般的に実行される基本的なオペレーションである。機械学習フレームワーク２４０４を用いることなく、機械学習アルゴリズムの開発者は、機械学習アルゴリズムに関連付けられる主計算論理を作成及び最適化し、次に、新たな並列プロセッサが開発されるように、計算論理を再度最適化するのに必要とされる。代わりに、機械学習アプリケーションは、機械学習フレームワーク２４０４により提供されるプリミティブを用いて必要な計算を実行するように構成され得る。例示的なプリミティブは、テンソル、畳み込み、活性化関数及びプーリングを含み、それらは、畳み込みニューラルネットワーク（ＣＮＮ）を訓練しつつ実行される計算操作である。機械学習フレームワーク２４０４はまた、行列及びベクトル演算などの多くの機械学習アルゴリズムにより実行される基本的な線形代数サブプログラムを実装するためにプリミティブを提供できる。
【０２０７】
機械学習フレームワーク２４０４は、機械学習アプリケーション２４０２から受信した入力データを処理して、コンピュートフレームワーク２４０６への適切な入力を生成することができる。コンピュートフレームワーク２４０６は、ＧＰＧＰＵドライバ２４０８に提供される基本命令を抽象化し、ＧＰＧＰＵハードウェア２４１０のアーキテクチャの詳しい知識を有するために機械学習フレームワーク２４０４が、機械学習フレームワーク２４０４を要求することなくＧＰＧＰＵハードウェア２４１０を介してハードウェアアクセラレーションを活用することを可能にすることができる。さらに、コンピュートフレームワーク２４０６は、様々なタイプにわたる機械学習フレームワーク２４０４及びＧＰＧＰＵハードウェア２４１０の生成のためのハードウェアアクセラレーションを有効にすることができる。
【０２０８】
ＧＰＧＰＵ機械学習アクセラレーション
【０２０９】
図２６は、実施形態に係るマルチＧＰＵコンピューティングシステム２６００を示す。マルチＧＰＵコンピューティングシステム２６００は、ホストインタフェーススイッチ２６０４を介して複数のＧＰＧＰＵ２６０６Ａ−Ｄに結合されるプロセッサ２６０２を含み得る。ホストインタフェーススイッチ２６０４は、一実施形態において、プロセッサ２６０２がＧＰＧＰＵ２６０６Ａ−Ｄのセットと通信できるＰＣＩ  Ｅｘｐｒｅｓｓバスにプロセッサ２６０２を結合するＰＣＩ  Ｅｘｐｒｅｓｓスイッチデバイスである。複数のＧＰＧＰＵ２６０６Ａ−Ｄのそれぞれは、上述したＧＰＧＰＵのインスタンスであり得る。ＧＰＧＰＵ２６０６Ａ−Ｄは、高速ポイントツーポイントＧＰＵ間リンク２６１６のセットを介して相互接続できる。高速ＧＰＵ間リンクは、専用のＧＰＵリンクを介してＧＰＧＰＵ２６０６Ａ−Ｄのそれぞれに接続できる。Ｐ２Ｐ  ＧＰＵリンク２６１６は、プロセッサ２６０２が接続されるホストインタフェースバスを介した通信を要求することなく、ＧＰＧＰＵ２６０６Ａ−Ｄのそれぞれの間の直接通信を可能にする。Ｐ２Ｐ  ＧＰＵリンクに関するＧＰＵ間トラフィックを用いて、ホストインタフェースバスは、システムメモリアクセスに対して依然として利用可能なままである、又は、例えば、１又は複数のネットワークデバイス介してマルチＧＰＵコンピューティングシステム２６００の他のインスタンスと通信する。一方、図示される実施形態では、ＧＰＧＰＵ２６０６Ａ−Ｄは、ホストインタフェーススイッチ２６０４を介してプロセッサ２６０２に接続し、一実施形態において、プロセッサ２６０２は、Ｐ２Ｐ  ＧＰＵリンク２６１６の直接的なサポートを含み、ＧＰＧＰＵ２６０６Ａ−Ｄに直接接続できる。
【０２１０】
機械学習ニューラルネットワーク実装
【０２１１】
本明細書において説明される実施形態により提供されるコンピューティングアーキテクチャは、特に、機械学習のためにニューラルネットワークを訓練及び展開するのに適したタイプの並列処理を実行するように構成され得る。ニューラルネットワークは、グラフ関係を有する関数のネットワークとして一般化され得る。当技術分野で周知なように、機械学習に用いられる様々なタイプのニューラルネットワーク実装がある。ある例示的なタイプのニューラルネットワークは、前に説明したように、フィードフォワードネットワークである。
【０２１２】
第２の例示的なタイプのニューラルネットワークは畳み込みニューラルネットワーク（ＣＮＮ）である。ＣＮＮは、画像データなどの、既知のグリッド式のトポロジを有するデータを処理するための専用のフィードフォワードニューラルネットワークである。したがって、ＣＮＮは、視覚及び画像認識アプリケーションを算出するために一般的に用いられるが、それらは、音声及び言語処理などの他のタイプのパターン認識に用いられてもよい。ＣＮＮ入力層におけるノードは、「フィルタ」（網膜に見つけられる受容野から発想を得た特徴検出）のセットにまとめられ、フィルタの各セットの出力は、ネットワークの連続層においてノードに伝搬される。ＣＮＮ用の計算は、そのフィルタの出力を生成するために各フィルタに対する畳み込み数学演算を適用することを含む。畳み込みは、２つのオリジナル関数のうちの一方の修正版である第３の関数を生成するために２つの機能により実行される特殊な数学演算である。畳み込みネットワークの用語において、畳み込みに対する第１の関数は、入力と称され得る一方、第２の関数は、畳み込みカーネルと称され得る。出力は、特徴マップと称され得る。例えば、畳み込み層への入力は、入力画像の様々なカラー成分を定義するデータの多次元アレイであり得る。畳み込みカーネルは、パラメータの多次元アレイであり得、パラメータは、ニューラルネットワークのための訓練プロセスにより適合される。
【０２１３】
再帰型ニューラルネットワーク（ＲＮＮ）は、層間のフィードバック接続を含むフィードフォワードニューラルネットワークのファミリである。ＲＮＮは、ニューラルネットワークの異なる部分にわたってパラメータデータを共有することにより順次データのモデリングを可能にする。ＲＮＮのアーキテクチャはサイクルを含む。サイクルは、ＲＮＮからの出力データの少なくとも一部が、順番に後続の入力を処理するためのフィードバックとして用いられるように、変数の現在の値が将来の時点でそれ自体の値に及ぼす影響を表す。この特徴は、言語データが構成され得る可変性に起因するＲＮＮの言語処理に特に有用である。
【０２１４】
以下に説明される図は、例示的なフィードフォワード、ＣＮＮ及びＲＮＮネットワークを提示し、及び、これらのタイプのネットワークのそれぞれを訓練及び展開するためのそれぞれの一般的な処理を説明する。これらの説明が例示的なものであり、本明細書において説明される任意の特定の実施形態に限定されることはなく、図示されるコンセプトは、一般的なディープニューラルネットワーク及び機械学習技術に一般的に適用され得ることが理解されるだろう。
【０２１５】
上述した例示的なニューラルネットワークは、深層学習を実行するために用いられ得る。深層学習は、ディープニューラルネットワークを用いた機械学習である。深層学習において用いられるディープニューラルネットワークは、単一の隠れ層のみを含む浅いニューラルネットワークとは対照的に、複数の隠れ層から構成される人工ニューラルネットワークである。より深いニューラルネットワークは、一般的に、訓練するためにより計算集約型である。しかしながら、ネットワークの追加の隠れ層は、浅い機械学習技術と比較して出力エラーを減らすことになるマルチステップパターン認識を可能にする。
【０２１６】
深層学習において用いられるディープニューラルネットワークは、典型的には、数学モデルに提供される特徴表現に基づいてオペレーション（例えば、オブジェクト分類、音声認識など）を実行できる数学モデルを表すバックエンドネットワークに結合される、特徴認識を実行するフロントエンドネットワークを含む。深層学習は、モデルに対して実行される手作りされた機能エンジニアリングを要求することなく実行される機械学習を可能にする。代わりに、ディープニューラルネットワークは、入力データ内の統計的な構成又は相関関係に基づいて特徴を学習できる。学習される特徴は、検出された特徴を出力にマッピングすることができる数学モデルに提供され得る。ネットワークにより用いられる数学モデルは、一般的には、実行される特定のタスクに専用のものであり、異なるモデルが、異なるタスクを実行するために用いられる。
【０２１７】
ニューラルネットワークが構築されると、学習モデルは、ネットワークを訓練して特定のタスクを実行するためにネットワークに適用され得る。学習モデルは、ネットワークの出力エラーを減らすために、モデル内の重みをどのように調整するかを記述する。誤差逆伝播法は、ニューラルネットワークを訓練するために用いられる一般的な方法である。入力ベクトルは、処理用のネットワークに提示される。ネットワークの出力は、損失関数を用いて所望の出力と比較され、出力層におけるニューロンのそれぞれに対してエラー値が計算される。次に、各ニューロンが元の出力に対するその寄与を大ざっぱに表す関連のエラー値を有するまで、エラー値は、後方に伝搬される。次に、ネットワークは、確率的勾配降下アルゴリズムなどのアルゴリズムを用いてこれらのエラーから学習して、ニューラルネットワークの重みを更新できる。
【０２１８】
図２７Ａ及び図２７は、例示的な畳み込みニューラルネットワークを示す。図２７Ａは、ＣＮＮ内の様々な層を示す。図２７Ａに示されるように、画像処理をモデル化するために用いられる例示的なＣＮＮは、入力画像の赤、緑及び青（ＲＧＢ）成分を記述する入力２７０２を受信できる。入力２７０２は、複数の畳み込み層（例えば、畳み込み層２７０４、畳み込み層２７０６）により処理され得る。複数の畳み込み層からの出力は、完全に接続された層２７０８のセットにより任意選択的に処理され得る。完全に接続された層におけるニューロンは、フィードフォワードネットワークに関して前に説明したように、前の層におけるすべてのアクティベーションへの完全な接続を有する。完全に接続された層２７０８からの出力は、ネットワークからの出力結果を生成するために用いられ得る。完全に接続された層２７０８内のアクティベーションは、畳み込みの代わりに、行列乗算を用いて算出され得る。すべてのＣＮＮ実装が完全に接続された層を利用するわけではない。例えば、いくつかの実施では、畳み込み層２７０６は、ＣＮＮに対して出力を生成できる。
【０２１９】
畳み込み層は、疎に接続され、これは、完全に接続された層２７０８において見つけられる従来のニューラルネットワーク構成とは異なる。従来のニューラルネットワーク層は、完全に接続されており、その結果、あらゆる出力ユニットがあらゆる入力ユニットとインタラクトする。しかしながら、フィールドの畳み込みの出力は、（フィールド内のノードのそれぞれの各状態値の代わりに）図示されるような後続の層のノードに入力されるので、畳み込み層は疎に接続される。畳み込み層に関連付けられるカーネルは、次の層に送信される出力の畳み込み演算を実行する。畳み込み層内で実行される次元削減は、ＣＮＮがスケーリングして大きな画像を処理することを可能にする一態様である。
【０２２０】
図２７は、ＣＮＮの畳み込み層内の例示的な計算ステージを示す。ＣＮＮの畳み込み層２７１２への入力は、畳み込み層２７１４の３つのステージにおいて処理され得る。３つのステージは、畳み込みステージ２７１６、検出ステージ２７１８及びプーリングステージ２７２０を含み得る。畳み込み層２７１４は、次に、連続的な畳み込み層にデータを出力できる。ネットワークの最終的な畳み込み層は、例えば、ＣＮＮへの入力に対する分類値を生成するために、出力特徴マップデータを生成できる、又は、完全に接続された層に入力を提供できる。
【０２２１】
畳み込みステージ２７１６では、いくつかの畳み込みを並列に実行して、線形活性化のセットを生成する。畳み込みステージ２７１６はアフィン変換を含むことができ、アフィン変換は、線形変換プラス移動として特定され得る任意の変換である。アフィン変換は、回転、移動、スケーリング及びこれらの変換の組み合わせを含む。畳み込みステージは、入力内の特定の領域に接続される機能（例えば、ニューロン）の出力を算出し、ニューロンに関連付けられる局所領域として決定され得る。ニューロンは、ニューロンの重みと、ニューロンが接続される局所的な入力における領域の重みとの間のドット積を算出する。畳み込みステージ２７１６からの出力は、畳み込み層２７１４の連続的なステージにより処理される線形活性化のセットを定義する。
【０２２２】
線形活性化は、検出ステージ２７１８により処理され得る。検出ステージ２７１８において、各線形活性化は、非線形活性化関数により処理される。非線形活性化関数は、畳み込み層の受容野に影響を与えることなく、ネットワーク全体の非線形的性質を高める。いくつかのタイプの非線形活性化関数が用いられてよい。１つの特定のタイプは、正規化線形ユニット（ＲｅＬＵ）であり、これは、アクティベーションがゼロに閾値設定されるように、ｆ（ｘ）＝ｍａｘ（０、ｘ）として定義される活性化関数を用いる。
【０２２３】
プーリングステージ２７２０は、畳み込み層２７０６の出力を、すぐ近くの出力の要約統計量と置き換えるプーリング関数を用いる。プーリング関数は、並進不変性（ｔｒａｎｓｌａｔｉｏｎ  ｉｎｖａｒｉａｎｃｅ）をニューラルネットワークに導入するために用いられることができ、その結果、入力へのわずかな並進はプールされる出力を変更しない。入力データ内の特徴の存在が特徴の正確な位置よりも重要なシナリオにおいて、局所的な移動に対する不変性は有用であり得る。様々なタイプのプーリング関数は、最大プーリング、平均プーリング及びｌ２−ノルムプーリングを含むプーリングステージ２７２０中に用いられ得る。さらに、いくつかのＣＮＮ実装は、プーリングステージを含まない。代わりに、そのような実装は、以前の畳み込みステージと比較して、増加したストライドを有する代わりの及び追加の畳み込みステージである。
【０２２４】
次に、畳み込み層２７１４からの出力は、次の層２７２２により処理され得る。次の層２７２２は、追加の畳み込み層又は完全に接続された層２７０８のうちの１つであり得る。例えば、図２７Ａの第１の畳み込み層２７０４は、第２の畳み込み層２７０６に出力できる一方、第２の畳み込み層は、完全に接続された層２７０８のうちの第１の層に出力できる。
【０２２５】
図２８は、例示的な再帰型ニューラルネットワーク２８００を示す。再帰型ニューラルネットワーク（ＲＮＮ）において、ネットワークの前の状態がネットワークの現在の状態の出力に影響を与える。ＲＮＮは、様々な機能を用いて様々なやり方で構築され得る。ＲＮＮの使用は、一般的に、数学モデルを用いて前の一連の入力に基づいて将来を予測することを中心に展開する。例えば、ＲＮＮは、統計的な言語モデリングを実行して、前の一連のワードが与えられると、次のワードを予測するために用いられ得る。説明され得る図示されるＲＮＮ２８００は、入力ベクトルを受信する入力層２８０２と、リカレント機能を実装する隠れ層２８０４と、前の状態の「メモリ」を有効にするフィードバックメカニズム２８０５と、結果を出力する出力層２８０６とを有する。ＲＮＮ２８００は、タイムステップに基づいて動作する。所与のタイムステップにおけるＲＮＮの状態は、フィードバックメカニズム２８０５を介して前のタイムステップに基づいて影響を受ける。所与のタイムステップについて、隠れ層２８０４の状態は、前の状態と、現在のタイムステップにおける入力とにより定義される。第１のタイムステップにおいて、初期入力（ｘ１）が隠れ層２８０４により処理され得る。第２の入力（ｘ２）は、初期入力（ｘ１）の処理中に決定される状態情報を用いて隠れ層２８０４により処理され得る。所与の状態は、ｓ＿ｔ＝ｆ（Ｕｘ＿ｔ＋Ｗｓ＿（ｔ−１））として算出され得、Ｕ及びＷは、パラメータ行列である。関数ｆは、一般的に、双曲線正接関数（Ｔａｎｈ）又は正規化関数ｆ（ｘ）＝ｍａｘ（０、ｘ）の変形例など、非線形である。しかしながら、隠れ層２８０４において用いられる特定の数学的な関数は、ＲＮＮ２８００についての特定の実装の詳細に応じて変化し得る。
【０２２６】
説明される基本的なＣＮＮ及びＲＮＮネットワークに加えて、これらのネットワーク上のバリエーションが可能にされてもよい。ある例示的なＲＮＮの変型例は、長・短期メモリ（ＬＳＴＭ）ＲＮＮである。ＬＳＴＭ  ＲＮＮは、より長い並びの言語を処理するために必要とされ得る長期依存の学習を可能にする。ＣＮＮ上の変形例は、畳み込みディープビリーフネットワークであり、ＣＮＮと同様の構造を有し、かつ、ディープビリーフネットワークと同様の方式で訓練される。ディープビリーフネットワーク（ＤＢＮ）は、確率（ランダム）変数の複数の層から構成される生成系ニューラルネットワークである。ＤＢＮは、ｇｒｅｅｄｙ教師なし学習を用いて層毎に訓練され得る。次に、ＤＢＮの学習される重みは、ニューラルネットワークに対する重みの最適な初期セットを決定することにより、事前訓練ニューラルネットワークを提供するために用いられ得る。
【０２２７】
図２９は、ディープニューラルネットワークの訓練及び展開を示す。所与のネットワークがタスク用に構築されると、ニューラルネットワークは、訓練データセット２９０２を用いて訓練される。様々な訓練フレームワーク２９０４は、訓練プロセスのハードウェアアクセラレーションを可能にするように開発されてきた。例えば、上述した機械学習フレームワークは、訓練フレームワークとして構成されてよい。訓練フレームワーク２９０４は、訓練されていないニューラルネットワーク２９０６に接続し、訓練されたニューラルネット２９０８を生成するために、訓練されていないニューラルネットが本明細書において説明される並列処理リソースを用いて訓練されることを可能にし得る。
【０２２８】
訓練プロセスを開始するために、初期の重みは、ランダムに、又は、ディープビリーフネットワークを用いて事前訓練することにより選択されてよい。次に、訓練サイクルは、教師あり又は教師なし方式のいずれか一方で実行される。
【０２２９】
教師あり学習は、例えば、訓練データセット２９０２が、入力に対する所望の出力と組み合わされる入力を含む場合、又は、訓練データセットが、既知の出力を有する入力を含み、かつ、ニューラルネットワークの出力が手動で格付けされる場合などの仲介オペレーションとして訓練が実行される学習方法である。ネットワークは、入力を処理して、結果の出力を、予期される又は所望の出力のセットと比較する。次に、エラーが、システム全体に伝搬される。訓練フレームワーク２９０４は、訓練されていないニューラルネットワーク２９０６を制御する重みを調整するように調整し得る。訓練フレームワーク２９０４は、訓練されていないニューラルネットワーク２９０６が既知の入力データに基づいて正解を生成するのに適したモデルに向けてどれだけうまく収束しているかをモニタリングするツールを提供できる。ニューラルネットワークにより生成される出力を改善するようにネットワークの重みが調整されるように、訓練プロセスは繰り返し行われる。訓練プロセスは、ニューラルネットワークが、訓練されたニューラルネット２９０８に関連付けられる統計的に望ましい精度に達するまで継続し得る。次に、訓練されたニューラルネットワーク２９０８は、任意の数の機械学習オペレーションを実装するように展開され得る。
【０２３０】
教師なし学習は、ネットワークが分類されていないデータを用いて自身を訓練しようと試みる学習方法である。したがって、教師なし学習に関して、訓練データセット２９０２は、任意の関連する出力データなしの入力データを含む。訓練されていないニューラルネットワーク２９０６は、分類されていない入力内のグループ化を学習でき、個々の入力がどのようにデータセット全体に関連するかを決定できる。教師なし訓練は、自己組織化マップを生成するために用いられることができ、あるタイプの訓練されたニューラルネットワーク２９０７は、データの次元を削減するのに有用なオペレーションを実行することが可能である。教師なし訓練はまた、アノマリ検出を実行するために用いられることもでき、データの通常のパターンから逸脱する入力データセット内のデータポイントの識別を可能にする。
【０２３１】
教師あり及び教師なし訓練に対するバリエーションが採用されてもよい。半教師あり学習は、訓練データセット２９０２が同じ分散のうちの分類されているデータ及び分類されていないデータの混合を含む技術である。インクリメンタル学習は、入力データがモデルをさらに訓練するために継続的に用いられる教師あり学習の変形例である。インクリメンタル学習は、訓練されたニューラルネットワーク２９０８が初期訓練中のネットワーク内に教え込まれた知識を忘れることなく新たなデータ２９１２に適用することを可能にする。
【０２３２】
教師ありであるか、又は、教師なしであるかに関わらず、特にディープニューラルネットワークの訓練プロセスは、単一の計算ノードに対してかなり計算集約型であるかもしれない。単一の計算ノードを用いる代わりに、計算ノードの分散型ネットワークが、訓練プロセスをアクセラレートするために用いられ得る。
【０２３３】
図３０は、分散型学習を示すブロック図である。分散型学習は、上述したノード２０２１−２０２３などの複数の分散型計算ノードを用いて、ニューラルネットワークの教師あり又は教師なし訓練を実行する訓練モデルである。分散型計算ノードはそれぞれ、１又は複数のホストプロセッサと、高並列汎用グラフィックス処理ユニットなどの汎用処理ノードのうちの１又は複数とを含むことができる。図示されるように、分散型学習は、モデル並列処理３００２、データ並列処理３００４、又は、モデル及びデータ並列処理の組み合わせを実行し得る。
【０２３４】
モデル並列処理３００２において、分散型システム内の異なる計算ノードは、単一のネットワークの異なる部分に対する訓練計算を実行できる。例えば、ニューラルネットワークの各層は、分散型システムの異なる処理ノードにより訓練され得る。モデル並列処理の利点は、特に大きなモデルにスケーリングする能力を含むことである。ニューラルネットワークの異なる層に関連付けられる計算を分裂することは、すべての層の重みが単一の計算ノードのメモリに適合しない非常に大きなニューラルネットワークの訓練を可能にする。いくつかの例では、モデル並列処理は、大きなニューラルネットワークの教師なし訓練を実行する際に特に有用となり得る。
【０２３５】
データ並列処理３００４において、分散型ネットワークの異なるノードはモデルの完全なインスタンスを有し、各ノードはデータの異なる部分を受信する。次に、異なるノードからの結果が組み合わせられる。データ並列処理に対する異なるアプローチが可能であるが、データの並列的な訓練アプローチはすべて、結果を組み合わせて、各ノード間のモデルパラメータを同期させる技術を必要とする。データを組み合わることに対する例示的なアプローチは、パラメータの平均化及び更新ベースのデータ並列処理を含む。パラメータの平均化は、訓練データのサブセットで各ノードを訓練し、グローバルパラメータ（例えば、重み、バイアス）を各ノードからパラメータの平均に設定する。パラメータの平均化は、パラメータデータを維持する中央パラメータサーバを用いる。更新ベースのデータ並列処理は、ノードからパラメータサーバにパラメータを転送する代わりに、モデルの更新が転送されることを除いてパラメータの平均化と同様である。さらに、更新ベースのデータ並列処理は、分散方式で実行されることができ、更新は、圧縮されてノード間に転送される。
【０２３６】
組み合わせられたモデル及びデータ並列処理３００６は、例えば、各計算ノードが複数のＧＰＵを含む分散型システムにおいて実装され得る。各ノードは、モデルの異なる部分を訓練するために用いられる各ノード内の別個のＧＰＵを用いるモデルの完全なインスタンスを有することができる。
【０２３７】
分散型訓練は、単一のマシン上で訓練することと比較してオーバヘッドを増加させる。しかしながら、本明細書において説明される並列プロセッサ及びＧＰＧＰＵはそれぞれ、分散型訓練のオーバヘッドを低減させる様々な技術を実装でき、高帯域幅ＧＰＵ間データ転送及びアクセラレートされたリモートデータ同期を可能にする技術を含む。
例示的な機械学習アプリケーション
【０２３８】
機械学習は、様々な技術的課題を解決するために適用されることができ、限定されることはないが、コンピュータビジョン、自動運転及びナビゲーション、音声認識並びに言語処理を含む。コンピュータビジョンは、これまで、機械学習アプリケーション用の大部分のアクティブなリサーチエリアのうちの１つであった。コンピュータビジョンのアプリケーションは、顔を認識することなどの人の視覚能力を再生することから、視覚能力の新たなカテゴリを作成することに及ぶ。例えば、コンピュータビジョンアプリケーションは、ビデオ内で可視のオブジェクトにおいて引き起こされる振動から音波を認識するように構成され得る。並列プロセッサアクセラレート型機械学習は、コンピュータビジョンアプリケーションが以前に実現可能なものよりも膨大な訓練データセットを用いて訓練されることを可能にし、推論システムが低電力並列プロセッサを用いて展開されることを可能にする。
【０２３９】
並列プロセッサアクセラレート型機械学習は、レーン及び道路標識認識、障害物回避、ナビゲーション並びに運転制御を含む自動運転アプリケーションを有する。アクセラレート型機械学習技術は、特定の訓練入力に対する適切な応答を定義するデータセットに基づいて運転モデルを訓練するために用いられ得る。本明細書において説明される並列プロセッサは、自動運転解決方法に用いられるますます複雑なニューラルネットワークの迅速な訓練を可能にし、自律走行車への統合に適したモバイルプラットフォームにおいて、低電力推論プロセッサの展開を可能にし得る。
【０２４０】
並列プロセッサアクセラレート型ディープニューラルネットワークは、自動音声認識（ＡＳＲ）への機械学習アプローチを可能にしてきた。ＡＳＲは、入力アコースティックシーケンスを考慮して最も可能性のある言語シーケンスを算出する関数の作成を含む。ディープニューラルネットワークを用いるアクセラレート型機械学習は、ＡＳＲ用に以前に用いられていた隠れマルコフモデル（ＨＭＭ）及びガウス混合モデル（ＧＭＭ）の置換を可能してきた。
【０２４１】
並列プロセッサアクセラレート型機械学習はまた、自然言語処理をアクセラレートするために用いられ得る。自動学習プロシージャは、統計的な推論アルゴリズムを利用して、誤った又は見知らぬ入力に対してロバストなモデルを生成できる。例示的な自然言語プロセッサアプリケーションは、人間の言語間の自動機械翻訳を含む。
【０２４２】
機械学習に用いられる並列処理プラットフォームは、訓練プラットフォーム及びプラットフォーム展開に分割され得る。訓練プラットフォームは、一般的に高度に並列的であり、マルチＧＰＵ単一のノード訓練及びマルチノード、マルチＧＰＵ訓練をアクセラレートするために最適化を含む。訓練に適した例示的な並列プロセッサは、本明細書において説明される高並列汎用グラフィックス処理ユニット及び／又はマルチＧＰＵコンピューティングシステムを含む。それどころか、展開される機械学習プラットフォームは、一般的に、カメラ、自律ロボット及び自律走行車などの製品での使用に適した低電力並列プロセッサを含む。
【０２４３】
図３１は、訓練されたモデルを用いて推論を実行するのに適した例示的な推論システムオンチップ（ＳｏＣ）３１００を示す。ＳｏＣ３１００は、メディアプロセッサ３１０２、ビジョンプロセッサ３１０４、ＧＰＧＰＵ３１０６及びマルチコアプロセッサ３１０８を含む処理コンポーネントを統合できる。ＳｏＣ３１００は、さらに、処理コンポーネントのそれぞれによりアクセス可能な共有のオンチップデータプールを可能にできるオンチップメモリ３１０５を含むことができる。処理コンポーネントは、自律走行車及び自律ロボットを含む様々な機械学習プラットフォームへの展開を可能にする低電力オペレーションのために最適化され得る。例えば、ＳｏＣ３１００の一実施例は、自律走行車用の主制御システムの一部として用いられ得る。ＳｏＣ３１００が自律走行車での使用のために構成される場合、ＳｏＣは、展開権限についての関連する機能的な安全規格に準拠するように設計及び構成される。
【０２４４】
オペレーション中、メディアプロセッサ３１０２及びビジョンプロセッサ３１０４は、コンピュータビジョンオペレーションをアクセラレートするために、同時に動作できる。メディアプロセッサ３１０２は、複数の高解像度（例えば、４Ｋ、８Ｋ）ビデオストリームの低レイテンシなデコードを可能にし得る。デコードされたビデオストリームは、オンチップメモリ３１０５内のバッファに書き込まれ得る。次に、ビジョンプロセッサ３１０４は、デコードされたビデオを解析し、訓練された画像認識モデルを用いたフレーム処理の準備の際に、デコードされたビデオのフレームに対して予備処理オペレーションを実行できる。例えば、ビジョンプロセッサ３１０４は、高解像度ビデオデータに対して画像認識を実行するために用いられるＣＮＮの畳み込み演算をアクセラレートすることができる一方、バックエンドモデル計算がＧＰＧＰＵ３１０６により実行される。
【０２４５】
マルチコアプロセッサ３１０８は、メディアプロセッサ３１０２及びビジョンプロセッサ３１０４により実行されるデータ転送のシーケンシング及び同期、並びに、共有メモリ演算を支援する制御ロジックを含み得る。マルチコアプロセッサ３１０８はまた、ＧＰＧＰＵ３１０６の推論算出機能を利用できるソフトウェアアプリケーションを実行するアプリケーションプロセッサとして機能できる。例えば、ナビゲーション及び運転ロジックの少なくとも一部は、マルチコアプロセッサ３１０８上で実行するソフトウェアにおいて実装され得る。そのようなソフトウェアは、ＧＰＧＰＵ３１０６に計算ワークロードを直接発行できる、又は、計算ワークロードは、マルチコアプロセッサ３１０８に発行されることができ、これらのオペレーションの少なくとも一部をＧＰＧＰＵ３１０６にオフロードできる。
【０２４６】
ＧＰＧＰＵ３１０６は、高並列汎用グラフィックス処理ユニットＤＰＬＡＢ００内のコンピュートクラスタＤＰＬＡＢ０６Ａ−ＤＰＬＡＢ０６Ｈの低電力構成などのコンピュートクラスタを含み得る。ＧＰＧＰＵ３１０６内のコンピュートクラスタは、訓練されたニューラルネットワーク上で推論計算を実行するために具体的に最適化される命令をサポートすることができる。例えば、ＧＰＧＰＵ３１０６は、８ビット及び４ビットの整数ベクトル演算などの低い精度の計算を実行する命令をサポートすることができる。
【０２４７】
例
【０２４８】
以下は、本発明の異なる実施形態の実装例である。
【０２４９】
例１．レイトレーシングオペレーションを実行する複数のノードと、複数のノードにグラフィックスワークをディスパッチするディスパッチャノードであって、各ノードは、グラフィックスワークにより特定される画像フレームの領域をレンダリングするようにレイトレーシングを実行する、ディスパッチャノードと、複数のうちの少なくとも第１のノードであって、画像フレームの第１の領域をレンダリングするようにレイトレーシングを実行するレイトレーシングレンダラと、第１の領域に関連付けられるデータと、第１の領域の外側の領域に関連付けられるデータとの組み合わせを用いて第１の領域のノイズ除去を実行するデノイザであって、第１の領域の外側の領域に関連付けられるデータの少なくともいくつかは、少なくとも１つの他のノードから取り込まれる、デノイザとを有する少なくとも第１のノードとを備えるシステム。
【０２５０】
例２．複数のノード及びディスパッチャノードに第１のノードを結合する高速ネットワーク、バス又は相互接続をさらに備える、例１のシステム。
【０２５１】
例３．デノイザは、第１の領域及び第１の領域の外側の領域に関連付けられるデータを用いて第１のノイズ除去領域を生成する、例１のシステム。
【０２５２】
例４．デノイザは、第１の領域及び第１の領域の外側の領域に関連付けられるデータを評価して第１の領域のノイズ除去を実行する機械学習エンジンを含む、例３のシステム。
【０２５３】
例５．機械学習エンジンは、訓練された重みのセットに基づいて、第１の領域及び第１の領域の外側の領域に関連付けられるデータを評価する畳み込みニューラルネットワーク回路及びロジックを有する、例４のシステム。
【０２５４】
例６．第１のノードは、複数のノードのうちの１又は複数及び／又はディスパッチャノードから訓練された重みのセットの少なくとも一部を受信する、例５のシステム。
【０２５５】
例７．第１の領域に関連付けられるデータの少なくとも一部を用いてランタイム訓練を実行することに応じて、訓練された重みのセットに対する更新を実行して、他のノードのうちの１又は複数及び／又はディスパッチャノードに更新を通信する機械学習エンジンの訓練回路及び／又はロジックをさらに備える、例６のシステム。
【０２５６】
例８．第１のノードは、第１の領域及び／又は第１の領域の外側の領域に関連付けられデータの少なくとも一部を、第２のノードに伝送する前に圧縮して、圧縮したデータを生成するコンプレッサ／デコンプレッサをさらに備える、例１のシステム。
【０２５７】
例９．第１のノードは、第２のノードからの要求に従って、第２のノードに圧縮したデータを伝送する、例８のシステム。
【０２５８】
例１０．複数のノード及びディスパッチノードの各ノードは、レイトレーシングを実行するレイトレーシングレンダラを含む少なくとも１つのグラフィックス処理ユニット（ＧＰＵ）を有する、例１のシステム。
【０２５９】
例１１．レイトレーシングレンダラ及びデノイザは、ＧＰＵの回路及びＧＰＵにより実行されるソフトウェアの組み合わせを有する、例１０のシステム。
【０２６０】
例１２．レイトレーシンググラフィックスワークを複数のノードにディスパッチする段階と、画像フレームの第１の領域をレンダリングするように第１のノード上でレイトレーシングオペレーションを実行する段階と、複数のノードのうちの１又は複数の他のノードから第１の領域の外側の領域に関連付けられるデータを要求する段階と、第１の領域に関連付けられるデータと、第１の領域の外側の領域に関連付けられるデータとの組み合わせを用いて第１の領域をノイズ除去する段階とを備える方法。
【０２６１】
例１３．第１のノードに結合される高速ネットワーク、バス又は相互接続を介して第１の領域の外側の領域に関連付けられるデータを受信する段階をさらに備える、例１２の方法。
【０２６２】
例１４．ノイズ除去する段階は、第１の領域及び第１の領域の外側の領域に関連付けられるデータを用いて第１のノイズ除去領域を生成する段階をさらに有する、例１２の方法。
【０２６３】
例１５．ノイズ除去する段階は、第１の領域のノイズ除去を実行すべく、第１の領域及び第１の領域の外側の領域に関連付けられるデータを評価するように機械学習を実行する段階をさらに有する、例１４の方法。
【０２６４】
例１６．機械学習を実行する段階は、訓練された重みのセットに基づいて、第１の領域及び第１の領域の外側の領域に関連付けられるデータを評価する段階を有する、例１５の方法。
【０２６５】
例１７．第１のノードは、複数のノードのうちの１又は複数から訓練された重みのセットの少なくとも一部を受信する、例１６の方法。
【０２６６】
例１８．第１の領域に関連付けられるデータの少なくとも一部を用いてランタイム訓練を実行する段階と、それに応じて、訓練された重みのセットに対する更新を実行する段階と、他のノードのうちの１又は複数及び／又はディスパッチャノードに更新を通信する段階とをさらに備える、例１７の方法。
【０２６７】
例１９．第１のノードは、第１の領域及び／又は第１の領域の外側の領域に関連付けられるデータの少なくとも一部を圧縮して、圧縮したデータを生成することをさらに有する、例１２の方法。
【０２６８】
例２０．第１のノードは、第２のノードからの要求の受信に従って、第２のノードに圧縮したデータを伝送することをさらに有する、例１９の方法。
【０２６９】
例２１．複数のノードの各ノードは、レイトレーシングオペレーションを実行するレイトレーシングレンダラを有する少なくとも１つのグラフィックス処理ユニット（ＧＰＵ）を有する、例１２の方法。
【０２７０】
例２２．ＧＰＵは、ノイズ除去を実行するノイズ除去回路及び／又はロジックをさらに備える、例２１の方法。
【０２７１】
例２３．マシンにより実行される場合に、マシンに、複数のノードのうちの第１のノードにおいて、レイトレーシンググラフィックスワークを受信する工程と、画像フレームの第１の領域をレンダリングするように、第１のノード上でレイトレーシングオペレーションを実行する工程と、複数のノードのうちの１又は複数の他のノードから、第１の領域の外側の領域に関連付けられるデータを要求する工程と、第１の領域に関連付けられるデータと、第１の領域の外側の領域に関連付けられるデータとの組み合わせを用いて第１の領域をノイズ除去する工程とを実行させる、そこに格納されるプログラムコードを有する機械可読媒体。
【０２７２】
例２４．マシンに、第１のノードに結合される高速ネットワーク、バス又は相互接続を介して第１の領域の外側の領域に関連付けられるデータを受信する工程を実行させるプログラムコードをさらに有する、例２３の機械可読媒体。
【０２７３】
例２５．ノイズ除去する工程は，第１の領域及び第１の領域の外側の領域に関連付けられるデータを用いて第１のノイズ除去領域を生成する工程をさらに有する、例２３の機械可読媒体。
【０２７４】
例２６．ノイズ除去する工程は、第１の領域のノイズ除去を実行すべく、第１の領域及び第１の領域の外側の領域に関連付けられるデータを評価するように機械学習を実行する工程をさらに有する、例２５の機械可読媒体。
【０２７５】
例２７．機械学習を実行する工程は、訓練された重みのセットに基づいて、第１の領域及び第１の領域の外側の領域に関連付けられるデータを評価する工程を有する、例２６の機械可読媒体。
【０２７６】
例２８．第１のノードは、複数のノードのうちの１又は複数から訓練された重みのセットの少なくとも一部を受信する、例２７の機械可読媒体。
【０２７７】
例２９．マシンに、第１の領域に関連付けられるデータの少なくとも一部を用いてランタイム訓練を実行する工程と、それに応じて、訓練された重みのセットに対する更新を実行する工程と、他のノードのうちの１又は複数及び／又はディスパッチャノードに更新を通信する工程とを実行させるプログラムコードをさらに備える、例２８の機械可読媒体。
【０２７８】
例３０．第１のノードは、第１の領域及び／又は第１の領域の外側の領域に関連付けられるデータの少なくとも一部を圧縮して、圧縮したデータを生成することをさらに有する、例２３の機械可読媒体。
【０２７９】
例３１．第１のノードは、第２のノードからの要求の受信に従って、第２のノードに圧縮したデータを伝送することをさらに有する、例３０の機械可読媒体。
【０２８０】
例３２．複数のノードの各ノードは、レイトレーシングオペレーションを実行するレイトレーシングレンダラを有する少なくとも１つのグラフィックス処理ユニット（ＧＰＵ）を有する、例２３の機械可読媒体。
【０２８１】
例３３．ＧＰＵは、ノイズ除去を実行するノイズ除去回路及び／又はロジックをさらに有する、例３２の機械可読媒体。
【０２８２】
実施形態において、用語「エンジン」又は「モジュール」又は「ロジック」は、１又は複数のソフトウェア又はファームウェアプログラム実行する特定用途向け集積回路（ＡＳＩＣ）、電子回路、（共有、専用又はグループ）プロセッサ、及び／又は、（共有、専用又はグループ）メモリ、組み合わせ論理回路、及び／又は、説明される機能を提供する他の適したコンポーネントを指し得る、これらの一部であり得る、又は、これらを含み得る。実施形態において、エンジン、モジュール又はロジックは、ファームウェア、ハードウェア、ソフトウェア又はファームウェア、ハードウェア及びソフトウェアの任意の組み合わせで実装されてよい。
【０２８３】
本発明の実施形態は、上述した様々な段階を含んでよい。当該段階は、汎用又は専用プロセッサに段階を実行させるために用いられ得る機械実行可能命令で具現化されてよい。代替的に、これらの段階は、当該段階を実行するためのハードワイヤードロジックを含む特定のハードウェアコンポーネントにより、又は、プログラミングされたコンピュータコンポーネント及びカスタムハードウェアコンポーネントの任意の組み合わせにより実行されてよい。
【０２８４】
本明細書において説明されたように、命令は、特定のオペレーションを実行するように構成される、又は、予め定められた機能を有する特定用途向け集積回路（ＡＳＩＣ）などのハードウェアの特定の構成、又は、非一時的なコンピュータ可読媒体において具現化されるメモリ内に格納されるソフトウェア命令を指し得る。したがって、図に示される技術は、格納されたコード及びデータを用いて実施され、１又は複数の電子デバイス（例えば、エンドステーション、ネットワークエレメントなど）で実行され得る。そのような電子デバイスは、非一時的なコンピュータ可読記憶媒体（例えば、磁気ディスク、光ディスク、ランダムアクセスメモリ、リードオンリメモリ、フラッシュメモリデバイス、相変化メモリ）、及び、一時的なコンピュータ機械可読通信媒体（例えば、伝搬信号−例えば、搬送波、赤外線信号、デジタル信号など−についての電気、光、アコースティック又は他の形式）などのコンピュータ機械可読媒体を用いてコード及びデータを格納し、これを（内部で、及び／又はネットワークを介して他の電子デバイスと）通信する。
【０２８５】
さらに、そのような電子デバイスは、典型的には、１又は複数のストレージデバイス（非一時的な機械可読記憶媒体）、ユーザ入力／出力デバイス（例えば、キーボード、タッチスクリーン及び／又はディスプレイ）及びネットワーク接続などの１又は複数の他のコンポーネントに結合される１又は複数のプロセッサのセットを含む。プロセッサ及び他のコンポーネントのセットの結合は、典型的には、１又は複数のバス及びブリッジ（バスコントローラとも呼ばれる）を通じて行われる。ストレージデバイス及びネットワークトラフィックを搬送する信号はそれぞれ、１又は複数の機械可読記憶媒体及び機械可読通信媒体を表す。したがって、所与の電子デバイスのストレージデバイスは、その電子デバイスの１又は複数のプロセッサのセットでの実行のために、コード及び／又はデータを典型的には格納する。もちろん、本発明の実施形態の１又は複数の部分は、ソフトウェア、ファームウェア及び／又はハードウェアの異なる組み合わせを用いて実装されてもよい。この詳細な説明にわたり、説明の目的で、本発明の全体的な理解を提供するために、多くの具体的な詳細が記載された。しかしながら、本発明がこれらの具体的な詳細のいくつかがなくても実施され得ることが当業者には明らかである。特定の例において、周知の構造及び機能は、本発明の主題が曖昧になることを回避するために、詳細な説明において説明されてこなかった。したがって、本発明の範囲及び趣旨は、以下の特許請求の範囲の観点から判断されたい。
【図１】
2020102195.tif 000003
【図２】
2020102195.tif 000004
【図３】
2020102195.tif 000005
【図４】
2020102195.tif 000006
【図５】
2020102195.tif 000007
【図６Ａ】
2020102195.tif 000008
【図６Ｂ】
2020102195.tif 000009
【図７】
2020102195.tif 000010
【図８】
2020102195.tif 000011
【図９Ａ】
2020102195.tif 000012
【図９Ｂ】
2020102195.tif 000013
【図１０】
2020102195.tif 000014
【図１１Ａ】
2020102195.tif 000015
【図１１Ｂ】
2020102195.tif 000016
【図１２】
2020102195.tif 000017
【図１３Ａ】
2020102195.tif 000018
【図１３Ｂ】
2020102195.tif 000019
【図１４Ａ】
2020102195.tif 000020
【図１４Ｂ】
2020102195.tif 000021
【図１５】
2020102195.tif 000022
【図１６】
2020102195.tif 000023
【図１７】
2020102195.tif 000024
【図１８Ａ】
2020102195.tif 000025
【図１８Ｂ】
2020102195.tif 000026
【図１９】
2020102195.tif 000027
【図２０】
2020102195.tif 000028
【図２１】
2020102195.tif 000029
【図２２】
2020102195.tif 000030
【図２３】
2020102195.tif 000031
【図２４】
2020102195.tif 000032
【図２５】
2020102195.tif 000033
【図２６】
2020102195.tif 000034
【図２７Ａ】
2020102195.tif 000035
【図２７】
2020102195.tif 000036
【図２８】
2020102195.tif 000037
【図２９】
2020102195.tif 000038
【図３０】
2020102195.tif 000039
【図３１】
2020102195.tif 000040
【外国語明細書】
2020102195000001.pdf