IP Force 特許公報掲載プロジェクト 2022.1.31 β版

知財求人 - 知財ポータルサイト「IP Force」

7661038レイトレーシングパイプラインをスロットリングするための装置及び方法
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2025-04-04
(45)【発行日】2025-04-14
(54)【発明の名称】レイトレーシングパイプラインをスロットリングするための装置及び方法
(51)【国際特許分類】
   G06T 15/06 20110101AFI20250407BHJP
【FI】
G06T15/06
【請求項の数】 26
【外国語出願】
(21)【出願番号】P 2020212140
(22)【出願日】2020-12-22
(65)【公開番号】P2021149944
(43)【公開日】2021-09-27
【審査請求日】2023-12-19
(31)【優先権主張番号】16/820,483
(32)【優先日】2020-03-16
(33)【優先権主張国・地域又は機関】US
(73)【特許権者】
【識別番号】593096712
【氏名又は名称】インテル コーポレイション
(74)【代理人】
【識別番号】100107766
【弁理士】
【氏名又は名称】伊東 忠重
(74)【代理人】
【識別番号】100070150
【弁理士】
【氏名又は名称】伊東 忠彦
(74)【代理人】
【識別番号】100135079
【弁理士】
【氏名又は名称】宮崎 修
(74)【代理人】
【識別番号】100135105
【弁理士】
【氏名又は名称】渡邊 直満
(72)【発明者】
【氏名】カルティク ヴァイドヤナタン
(72)【発明者】
【氏名】アビシェク アップー
(72)【発明者】
【氏名】ヴァサント ランガナタン
(72)【発明者】
【氏名】ジョイディープ レイ
(72)【発明者】
【氏名】プラスーンクマール スルティ
【審査官】中田 剛史
(56)【参考文献】
【文献】特表2011-515766(JP,A)
【文献】米国特許出願公開第2018/0293099(US,A1)
【文献】米国特許出願公開第2018/0286005(US,A1)
【文献】米国特許出願公開第2016/0042560(US,A1)
【文献】米国特許出願公開第2020/0050550(US,A1)
【文献】特開2014-038623(JP,A)
【文献】米国特許出願公開第2016/0260193(US,A1)
(58)【調査した分野】(Int.Cl.,DB名)
G06T 15/06
(57)【特許請求の範囲】
【請求項1】
複数の光線シェーダを実行して複数の一次光線及び対応する複数の光線メッセージを生成する複数の機能ユニットを含む実行回路(EU)と、
前記EUにより生成された前記光線メッセージをキューイングする先入れ先出し(FIFO)バッファと、
前記複数の一次光線のうち1つ以上を記憶するキャッシュと、
前記複数の光線メッセージの第1のサブセットを対応する複数のエントリに記憶するメモリバック式スタックと、
前記メモリバック式スタック内で光線メッセージにより現在占有されているエントリの数に少なくとも部分的に基づいて、前記複数の光線メッセージの第2のサブセットを前記メモリバック式スタックに記憶するか、或いは、前記複数の光線メッセージの前記第2のサブセットの1つ以上をメモリサブシステムに一時的に記憶するメモリバック式スタック管理回路と、
前記メモリバック式スタックから次の光線メッセージを読み取り、前記キャッシュ又はメモリサブシステムから前記光線メッセージにより識別される次の一次光線を取得し、前記次の一次光線に対してトラバーサル演算を実行するレイトラバーサル回路と
を含む装置。
【請求項2】
前記メモリバック式スタック及び/又は前記メモリサブシステムへの記憶の前に、前記複数の光線メッセージのそれぞれを一時的にキューイングする光線メッセージ先入れ先出し(FIFO)バッファを更に含む、請求項1に記載の装置。
【請求項3】
前記複数の光線シェーダを前記実行回路にディスパッチするディスパッチャを更に含み、前記ディスパッチャは、前記メモリバック式スタック内で光線メッセージにより現在占有されているエントリの数及び/又は前記光線メッセージFIFOバッファ内の光線メッセージの占有率に少なくとも部分的に基づいて、前記複数の光線シェーダのディスパッチをスロットリングするスロットリング回路を含む、請求項2に記載の装置。
【請求項4】
前記スロットリング回路は、前記メモリバック式スタック内で光線メッセージにより現在占有されているエントリの数及び/又は前記光線メッセージFIFOバッファ内の光線メッセージの占有率に少なくとも部分的に基づいて、1つ以上のスタック閾値を調整する、請求項に記載の装置。
【請求項5】
前記スタック閾値は、複数の光線シェーダを実行するために前記機能ユニットにアクセス可能なライブスタックの最大数を示す第1の最大スタック値を含む、請求項4に記載の装置。
【請求項6】
前記スタック閾値は、複数の光線シェーダを実行するために前記機能ユニットにアクセス可能なライブスタックの最小数を示す第1の最小スタック値を更に含む、請求項5に記載の装置。
【請求項7】
前記ディスパッチャは、前記最小スタック値及び/又は前記最大スタック値に基づいて、前記複数の光線シェーダを前記実行回路にディスパッチする、請求項6に記載の装置。
【請求項8】
前記実行回路は、2つ以上のサブスライスに細分され、前記機能ユニットの第1のサブセットを含む第1のサブスライスは、前記第1の最小スタック値及び/又は最大スタック値に関連付けられ、前記機能ユニットの第2のサブセットを含む第2のサブスライスは、第2の最小スタック値及び/又は最大スタック値に関連付けられる、請求項7に記載の装置。
【請求項9】
前記実行回路と前記メモリバック式スタックとの間に結合された圧縮器を更に含み、前記圧縮器は、単一命令複数データ(SIMD)レーンに関連する空及び/又は無効のスロットを除去する、請求項1乃至8のうちいずれか1項に記載の装置。
【請求項10】
前記圧縮器は、前記キャッシュのキャッシュレーン内に適合する光線データの固定サイズのチャンクを生成する、請求項9に記載の装置。
【請求項11】
前記メモリバック式スタック管理回路は、前記メモリバック式スタックにプッシュされる前記複数の光線メッセージの前記第2のサブセットの1つ以上を前記メモリサブシステムからフェッチするメモリバックエンドフェッチ回路を更に含む、請求項1乃至10のうちいずれか1項に記載の装置。
【請求項12】
複数の光線シェーダにより複数の一次光線及び対応する複数の光線メッセージを生成するステップと、
前記光線メッセージを先入れ先出し(FIFO)バッファにキューイングするステップと、
前記複数の一次光線のうち1つ以上をキャッシュに記憶するステップと、
前記複数の光線メッセージの第1のサブセットをメモリバック式スタックの対応する複数のエントリに記憶するステップと、
前記メモリバック式スタック内で光線メッセージにより現在占有されているエントリの数に少なくとも部分的に基づいて、前記複数の光線メッセージの第2のサブセットを前記メモリバック式スタックに記憶するか、或いは、前記複数の光線メッセージの前記第2のサブセットの1つ以上をメモリサブシステムに一時的に記憶するステップと、
前記メモリバック式スタックから次の光線メッセージを読み取るステップと、
前記キャッシュ又はメモリサブシステムから前記光線メッセージにより識別される次の一次光線を取得するステップと、
前記次の一次光線に対してトラバーサル演算を実行するステップと
を含む方法。
【請求項13】
前記メモリバック式スタック及び/又は前記メモリサブシステムへの記憶の前に、前記複数の光線メッセージのそれぞれを光線メッセージ先入れ先出し(FIFO)バッファに一時的にキューイングするステップを更に含む、請求項12に記載の方法。
【請求項14】
前記複数の光線シェーダを実行回路にディスパッチするステップと、
前記メモリバック式スタック内で光線メッセージにより現在占有されているエントリの数及び/又は前記光線メッセージFIFOバッファ内の光線メッセージの占有率に少なくとも部分的に基づいて、前記複数の光線シェーダのディスパッチをスロットリングするステップと
を更に含む、請求項13に記載の方法。
【請求項15】
1つ以上のスタック閾値は、前記メモリバック式スタック内で光線メッセージにより現在占有されているエントリの数及び/又は前記光線メッセージFIFOバッファ内の光線メッセージの占有率に少なくとも部分的に基づいて調整される、請求項13に記載の方法。
【請求項16】
前記スタック閾値は、複数の光線シェーダを実行するために機能ユニットにアクセス可能なライブスタックの最大数を示す第1の最大スタック値を含む、請求項15に記載の方法。
【請求項17】
前記スタック閾値は、複数の光線シェーダを実行するために前記機能ユニットにアクセス可能なライブスタックの最小数を示す第1の最小スタック値を更に含む、請求項16に記載の方法。
【請求項18】
前記最小スタック値及び/又は前記最大スタック値に基づいて、前記複数の光線シェーダを実行回路にディスパッチするステップを更に含む、請求項17に記載の方法。
【請求項19】
前記実行回路を2つ以上のサブスライスに細分するステップを更に含み、前記機能ユニットの第1のサブセットを含む第1のサブスライスは、前記第1の最小スタック値及び/又は最大スタック値に関連付けられ、前記機能ユニットの第2のサブセットを含む第2のサブスライスは、第2の最小スタック値及び/又は最大スタック値に関連付けられる、請求項18に記載の方法。
【請求項20】
単一命令複数データ(SIMD)レーンに関連する空及び/又は無効のスロットを除去するステップを更に含む、請求項12乃至19のうちいずれか1項に記載の方法。
【請求項21】
前記キャッシュのキャッシュレーン内に適合する光線データの固定サイズのチャンクを生成するステップを更に含む、請求項20に記載の方法。
【請求項22】
前記メモリバック式スタックにプッシュされる前記複数の光線メッセージの前記第2のサブセットの1つ以上を前記メモリサブシステムからフェッチするステップを更に含む、請求項12乃至21のうちいずれか1項に記載の方法。
【請求項23】
機械により実行されたとき、前記機械に対して、
複数の光線シェーダにより複数の一次光線及び対応する複数の光線メッセージを生成する動作と、
前記光線メッセージを先入れ先出し(FIFO)バッファにキューイングする動作と、
前記複数の一次光線のうち1つ以上をキャッシュに記憶する動作と、
前記複数の光線メッセージの第1のサブセットをメモリバック式スタックの対応する複数のエントリに記憶する動作と、
前記メモリバック式スタック内で光線メッセージにより現在占有されているエントリの数に少なくとも部分的に基づいて、前記複数の光線メッセージの第2のサブセットを前記メモリバック式スタックに記憶するか、或いは、前記複数の光線メッセージの前記第2のサブセットの1つ以上をメモリサブシステムに一時的に記憶する動作と、
前記メモリバック式スタックから次の光線メッセージを読み取る動作と、
前記キャッシュ又はメモリサブシステムから前記光線メッセージにより識別される次の一次光線を取得する動作と、
前記次の一次光線に対してトラバーサル演算を実行する動作と
を実行させるプログラム。
【請求項24】
前記機械に対して、前記メモリバック式スタック及び/又は前記メモリサブシステムへの記憶の前に、前記複数の光線メッセージのそれぞれを光線メッセージ先入れ先出し(FIFO)バッファに一時的にキューイングする動作を更に実行させる、請求項23に記載のプログラム。
【請求項25】
前記機械に対して、
前記複数の光線シェーダを実行回路にディスパッチする動作と、
前記メモリバック式スタック内で光線メッセージにより現在占有されているエントリの数及び/又は前記光線メッセージFIFOバッファ内の光線メッセージの占有率に少なくとも部分的に基づいて、前記複数の光線シェーダのディスパッチをスロットリングする動作と
を更に実行させる、請求項24に記載のプログラム。
【請求項26】
請求項23乃至25のうちいずれか1項に記載のプログラムを記憶した機械読み取り可能記憶媒体。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、概してグラフィックスプロセッサの分野に関する。より詳細には、本発明は、レイトレーシング(ray tracing)をスロットリング(throttle)するための装置及び方法に関する。
【背景技術】
【0002】
レイトレーシング(ray tracing)は、光伝搬が物理ベースのレンダリングを通じてシミュレーションされる技術である。映画のレンダリングに広く使用されおり、ほんの数年前までは、リアルタイム性能にとって非常にリソース集約的であると考えられていた。レイトレーシングにおける重要な演算の1つは、バウンディングボリューム階層(bounding volume hierarchy, BVH)内のノードをトラバースして交差することにより光線-シーン交差を計算する「レイトラバーサル(ray traversal)」として知られる光線-シーン交差についての可視クエリ(visibility query)を処理することである。
【図面の簡単な説明】
【0003】
本発明のより良い理解は、以下の図面と共に以下の詳細な説明から得られることができる。
図1】1つ以上のプロセッサコア及びグラフィックスプロセッサを有するプロセッサを有するコンピュータシステムの実施形態のブロック図である。
図2A】1つ以上のプロセッサコアと、統合メモリコントローラと、統合グラフィックスプロセッサを有するプロセッサの実施形態のブロック図である。
図2B】1つ以上のプロセッサコアと、統合メモリコントローラと、統合グラフィックスプロセッサを有するプロセッサの実施形態のブロック図である。
図2C】1つ以上のプロセッサコアと、統合メモリコントローラと、統合グラフィックスプロセッサを有するプロセッサの実施形態のブロック図である。
図2D】1つ以上のプロセッサコアと、統合メモリコントローラと、統合グラフィックスプロセッサを有するプロセッサの実施形態のブロック図である。
図3A】個別のグラフィックス処理ユニットでよく或いは複数の処理コアと統合されたグラフィックスプロセッサでもよいグラフィックスプロセッサの一実施形態のブロック図である。
図3B】個別のグラフィックス処理ユニットでよく或いは複数の処理コアと統合されたグラフィックスプロセッサでもよいグラフィックスプロセッサの一実施形態のブロック図である。
図3C】個別のグラフィックス処理ユニットでよく或いは複数の処理コアと統合されたグラフィックスプロセッサでもよいグラフィックスプロセッサの一実施形態のブロック図である。
図4】グラフィックスプロセッサのためのグラフィックス処理エンジンの実施形態のブロック図である。
図5A】グラフィックスプロセッサの他の実施形態のブロック図である。
図5B】グラフィックスプロセッサの他の実施形態のブロック図である。
図6】実行回路及びロジックの例を示す。
図7】実施形態によるグラフィックスプロセッサ実行ユニット命令フォーマットを示す。
図8】グラフィックスパイプラインと、メディアパイプラインと、ディスプレイエンジンと、スレッド実行ロジックと、レンダリング出力パイプラインとを含むグラフィックスプロセッサの他の実施形態のブロック図である。
図9A】実施形態によるグラフィックスプロセッサコマンドフォーマットを示すブロック図である。
図9B】実施形態によるグラフィックスプロセッサコマンドシーケンスを示すブロック図である。
図10】実施形態によるデータ処理システムのための例示的なグラフィックスソフトウェアアーキテクチャを示す。
図11A】集積回路及び例示的なパッケージアセンブリを製造するために使用され得る例示的なIPコア開発システムを示す。
図11B】集積回路及び例示的なパッケージアセンブリを製造するために使用され得る例示的なIPコア開発システムを示す。
図11C】集積回路及び例示的なパッケージアセンブリを製造するために使用され得る例示的なIPコア開発システムを示す。
図11D】集積回路及び例示的なパッケージアセンブリを製造するために使用され得る例示的なIPコア開発システムを示す。
図12】実施形態に従って1つ以上のIPコアを使用して製造され得るシステムオンチップ集積回路の例示的なシステムを示す。
図13】1つ以上のIPコアを使用して製造され得るシステムオンチップ集積回路の例示的なグラフィックスプロセッサを示す。
図14】例示的なグラフィックスプロセッサアーキテクチャを示す。
図15】機械学習アーキテクチャの初期訓練を実行するためのアーキテクチャを示す。
図16】どのように機械学習エンジンがランタイム中に継続的に訓練されて更新されるかを示す。
図17】どのように機械学習エンジンがランタイム中に継続的に訓練されて更新されるかを示す。
図18A】どのように機械学習データがネットワーク上で共有されるかを示す。
図18B】どのように機械学習データがネットワーク上で共有されるかを示す。
図19】機械学習エンジンを訓練するための方法を示す。
図20】どのようにノードが分散ノイズ除去演算を実行するためにゴースト領域データを交換するかを示す。
図21】画像レンダリング及びノイズ除去演算が複数のノードの間で分散されるアーキテクチャを示す。
図22】分散レンダリング及びノイズ除去のためのアーキテクチャの更なる詳細を示す。
図23】分散レンダリング及びノイズ除去を実行するための方法を示す。
図24】機械学習方法を示す。
図25】複数の相互接続された汎用グラフィックスプロセッサを示す。
図26】機械学習実装のための畳み込み層及び全結合層のセットを示す。
図27】畳み込み層の例を示す。
図28】機械学習実装における相互接続されたノードのセットの例を示す。
図29】ニューラルネットワークが訓練データセットを使用して学習する訓練フレームワークを示す。
図30A】モデル並列化及びデータ並列化の例を示す。
図30B】システムオンチップ(system on a chip, SoC)を示す。
図31】レイトレーシングコア及びテンソルコアを含む処理アーキテクチャを示す。
図32】ビームの例を示す。
図33】ビームトレーシングを実行するための装置を示す。
図34】ビーム階層の例を示す。
図35】ビームトレーシングを実行するための方法を示す。
図36】分散レイトレーシングエンジンの例を示す。
図37】レイトレーシングシステムで実行される圧縮を示す。
図38】レイトレーシングシステムで実行される圧縮を示す。
図39】レイトレーシングアーキテクチャ上に実装される方法を示す。
図40】例示的なハイブリッドレイトレーシング装置を示す。
図41】レイトレーシング演算のために使用されるスタックを示す。
図42】ハイブリッドレイトレーシング装置のための更なる詳細を示す。
図43】バウンディングボリューム階層を示す。
図44】コールスタック及びトラバーサル状態ストレージを示す。
図45】トラバーサル及び交差のための方法を示す。
図46A】どのように複数のディスパッチサイクルが特定のシェーダを実行するために必要とされるかを示す。
図46B】どのように複数のディスパッチサイクルが特定のシェーダを実行するために必要とされるかを示す。
図47】どのように単一のディスパッチサイクルが複数のシェーダを実行するかを示す。
図48】どのように単一のディスパッチサイクルが複数のシェーダを実行するかを示す。
図49】レイトレーシング命令を実行するためのアーキテクチャを示す。
図50】スレッド内でレイトレーシング命令を実行するための方法を示す。
図51】非同期レイトレーシングのためのアーキテクチャの一実施形態を示す。
図52】レイトラバーサル回路の一実施形態を示す。
図53】本発明の一実施形態によるメモリバック式(memory-backed)スタック管理を示す。
図54】一実施形態による同期及び非同期メッセージ処理を示す。
図55】本発明の一実施形態による方法を示す。
図56】実行リソースのサブスライス上で動作する本発明の一実施形態を示す。
【発明を実施するための形態】
【0004】
以下の説明において、説明の目的で、以下に説明する本発明の実施形態の完全な理解を提供するために、複数の特定の詳細が示される。しかし、本発明の実施形態はこれらの特定の詳細のうちいくつかなしに実施されてもよいことが当業者に明らかになる。他の例では、本発明の実施形態の基礎の原理を不明瞭にすることを回避するために、周知の構造及びデバイスがブロック図形式で示される。
【0005】
[例示的なグラフィックスプロセッサのアーキテクチャ及びデータタイプ]
(システム概要)
図1は、実施形態による処理システム100のブロック図である。システム100は、単一のプロセッサデスクトップシステム、マルチプロセッサワークステーションシステム、又は多数のプロセッサ102若しくはプロセッサコア107を有するサーバシステムで使用されてもよい。一実施形態では、システム100は、ローカル又は広域ネットワークへの有線又は無線接続を有するモノのインターネット(Internet-of-things, IoT)デバイス内のような、モバイル、ハンドヘルド又は埋め込み式デバイスで使用するために、システムオンチップ(system-on-a-chip, SoC)集積回路内に組み込まれた処理プラットフォームである。
【0006】
一実施形態では、システム100は、サーバベースのゲームプラットフォーム、ゲーム及びメディアコンソールを含むゲームコンソール、モバイルゲームコンソール、ハンドヘルドゲームコンソール又はオンラインゲームコンソールを含むことができ、これらと結合でき、或いはこれらの中に統合できる。いくつかの実施形態では、システム100は、携帯電話、スマートフォン、タブレット計算デバイス、又は小さい内部記憶容量を有するラップトップのようなモバイルインターネット接続デバイスの一部である。処理システム100はまた、スマートウォッチウェアラブルデバイスのようなウェアラブルデバイス;実世界の視覚、オーディオ、触覚体験を補うための視覚、オーディオ、触覚出力を提供するか、或いはテキスト、オーディオ、グラフィックス、ビデオ、ホログラフィック画像若しくはビデオ又は触覚フィードバックを提供するための拡張現実(augmented reality, AR)又は仮想現実(virtual reality, VR)機能で強化されたスマートアイウェア又は衣類;他の拡張現実(AR)デバイス;又は他の仮想現実(VR)デバイスを含むことができ、これらと結合でき、或いはこれらの中に統合できる。いくつかの実施形態では、処理システム100は、テレビ又はセットトップボックスデバイスを含むか、或いはその一部である。一実施形態では、システム100は、バス、トラクタートレーラー、自動車、モーター又は電力サイクル、飛行機又は滑空機(又はこれらのいずれかの組み合わせ)のような自動運転車両を含むことができ、これらと結合でき、或いはこれらの中に統合できる。自動運転車両は、車両の周囲で感知された環境を処理するために、システム100を使用してもよい。
【0007】
いくつかの実施形態では、1つ以上のプロセッサ102は、実行されたとき、システム又はユーザソフトウェアのための演算を実行する命令を処理するための1つ以上のプロセッサコア107をそれぞれ含む。いくつかの実施形態では、1つ以上のプロセッサコア107のうち少なくとも1つは、特定の命令セット109を処理するように構成される。いくつかの実施形態では、命令セット109は、複雑命令セット計算(Complex Instruction Set Computing, CISC)、縮小命令セット計算(Reduced Instruction Set Computing, RISC)、又は超長命令語(Very Long Instruction Word, VLIW)を介した計算を実現してもよい。1つ以上のプロセッサコア107は異なる命令セット109を処理してもよく、異なる命令セット109は、他の命令セットのエミュレーションを実現するための命令を含んでもよい。プロセッサコア107はまた、デジタルシグナルプロセッサ(Digital Signal Processor, DSP)のような他の処理デバイスを含んでもよい。
【0008】
いくつかの実施形態では、プロセッサ102は、キャッシュメモリ104を含む。アーキテクチャに依存して、プロセッサ102は、単一の内部キャッシュ又は複数のレベルの内部キャッシュを有することができる。いくつかの実施形態では、キャッシュメモリは、プロセッサ102の様々なコンポーネントの間で共有される。いくつかの実施形態では、プロセッサ102はまた、外部キャッシュ(例えば、レベル3(Level-3, L3)キャッシュ又はラストレベルキャッシュ(Last Level Cache, LLC))(図示せず)を使用し、これは、既知のキャッシュコヒーレンシ(cache coherency)技術を使用してプロセッサコア107の間で共有されてもよい。レジスタファイル106は、プロセッサ102に更に含まれることができ、異なるタイプのデータ(例えば、整数レジスタ、浮動小数点レジスタ、状態レジスタ及び命令ポインタレジスタ)を記憶するための異なるタイプのレジスタを含んでもよい。いくつかのレジスタは汎用レジスタでもよく、他のレジスタはプロセッサ102の設計に特有でもよい。
【0009】
いくつかの実施形態では、1つ以上のプロセッサ102は、プロセッサ102とシステム100内の他のコンポーネントとの間でアドレス、データ又は制御信号のような通信信号を送信するために、1つ以上のインタフェースバス110に結合される。一実施形態では、インタフェースバス110は、或るバージョンのダイレクトメディアインターフェース(Direct Media Interface, DMI)バスのようなプロセッサバスとすることができる。しかし、プロセッサバスは、DMIバスに限定されず、1つ以上のペリフェラルコンポーネントインターコネクトバス(例えば、PCI、PCI express)、メモリバス又は他のタイプのインタフェースバスを含んでもよい。一実施形態では、プロセッサ102は、統合メモリコントローラ116と、プラットフォームコントローラハブ130とを含む。メモリコントローラ116は、メモリデバイスとシステム100の他のコンポーネントとの間の通信を実現し、プラットフォームコントローラハブ(platform controller hub, PCH)130は、ローカルI/Oバスを介してI/Oデバイスへの接続を提供する。
【0010】
メモリデバイス120は、ダイナミックランダムアクセスメモリ(dynamic random access memory, DRAM)デバイス、スタティックランダムアクセスメモリ(static random access memory, SRAM)デバイス、フラッシュメモリデバイス、相変化メモリデバイス、又はプロセスメモリとして機能するのに適した性能を有する他のメモリデバイスとすることができる。一実施形態では、メモリデバイス120は、1つ以上のプロセッサ102がアプリケーション又はプロセスを実行するときに使用するために、データ122及び命令121を記憶するための、システム100のためのシステムメモリとして動作することができる。メモリコントローラ116はまた、任意選択の外部グラフィックスプロセッサ118と結合し、外部グラフィックスプロセッサ118は、グラフィックス及びメディア演算を実行するためにプロセッサ102内の1つ以上のグラフィックスプロセッサ108と通信してもよい。いくつかの実施形態では、グラフィックス、メディア、又は計算演算は、グラフィックス、メディア、又は計算演算の特殊なセットを実行するように構成できるコプロセッサであるアクセラレータ112により支援されてもよい。例えば、一実施形態では、アクセラレータ112は、機械学習又は計算演算を最適化するために使用される行列乗算アクセラレータである。一実施形態では、アクセラレータ112は、グラフィックスプロセッサ108と協調してレイトレーシング演算を実行するために使用できるレイトレーシングアクセラレータである。一実施形態では、外部アクセラレータ119がアクセラレータ112の代わりに或いはアクセラレータ112と協調して使用されてもよい。
【0011】
いくつかの実施形態では、ディスプレイデバイス111は、プロセッサ102に接続できる。ディスプレイデバイス111は、モバイル電子デバイス又はラップトップデバイスのもののような1つ以上の内部ディスプレイデバイス、又はディスプレイインタフェース(例えば、DisplayPort等)を介して取り付けられた外部ディスプレイデバイスのうち1つ以上とすることができる。一実施形態では、ディスプレイデバイス111は、仮想現実(virtual reality, VR)アプリケーション又は拡張現実(augmented reality, AR)アプリケーションで使用するための立体ディスプレイデバイスのようなヘッドマウントディスプレイ(head mounted display, HMD)とすることができる。
【0012】
いくつかの実施形態では、プラットフォームコントローラハブ130は、周辺機器が高速I/Oバスを介してメモリデバイス120及びプロセッサ102に接続することを可能にする。I/O周辺機器は、オーディオコントローラ146、ネットワークコントローラ134、ファームウェアインタフェース128、無線トランシーバ126、タッチセンサ125、データ記憶デバイス124(例えば、不揮発性メモリ、揮発性メモリ、ハードディスクドライブ、フラッシュメモリ、NAND、3D NAND、3D XPoint等)を含むが、これらに限定されない。データ記憶デバイス124は、記憶インタフェース(例えば、SATA)又はペリフェラルコンポーネントインターコネクトバス(例えば、PCI、PCI express)のような周辺機器バスを介して接続できる。タッチセンサ125は、タッチスクリーンセンサ、圧力センサ又は指紋センサを含むことができる。無線トランシーバ126は、Wi-Fiトランシーバ、Bluetoothトランシーバ、又は3G、4G、5G若しくはロングタームエボリューション(Long-Term Evolution, LTE)トランシーバのようなモバイルネットワークトランシーバとすることができる。ファームウェアインタフェース128は、システムファームウェアとの通信を可能にし、例えば、ユニファイド・エクステンシブル・ファームウェア・インタフェース(unified extensible firmware interface, UEFI)とすることができる。ネットワークコントローラ134は、有線ネットワークへのネットワーク接続を可能にできる。いくつかの実施形態では、高性能ネットワークコントローラ(図示せず)がインタフェースバス110に結合する。一実施形態では、オーディオコントローラ146は、マルチチャネル高精細度オーディオコントローラである。一実施形態では、システム100は、レガシー(例えば、パーソナルシステム2(Personal System 2, PS/2))デバイスをシステムに結合するための任意選択のレガシーI/Oコントローラ140を含む。プラットフォームコントローラハブ130はまた、1つ以上のユニバーサル・シリアル・バス(Universal Serial Bus, USB)コントローラ142に接続でき、キーボード及びマウス143の組み合わせ、カメラ144又は他のUSB入力デバイスのような入力デバイスを接続できる。
【0013】
図示のシステム100は例示的なものであり、限定するものではないことが認識される。この理由は、異なるように構成された他のタイプのデータ処理システムも使用されてもよいからである。例えば、メモリコントローラ116及びプラットフォームコントローラハブ130のインスタンスは、外部グラフィックスプロセッサ118のような個別の外部グラフィックスプロセッサに統合されてもよい。一実施形態では、プラットフォームコントローラハブ130及び/又はメモリコントローラ116は、1つ以上のプロセッサ102の外部にあってもよい。例えば、システム100は、外部メモリコントローラ116及びプラットフォームコントローラハブ130を含むことができ、これらは、プロセッサ102と通信するシステムチップセット内のメモリコントローラハブ及び周辺機器コントローラハブとして構成されてもよい。
【0014】
例えば、更なる熱性能のために設計されたCPU、メモリ及び他のコンポーネントのようなコンポーネントが配置される回路基板(「sled」)が使用できる。いくつかの例では、プロセッサのような処理コンポーネントは、sledの上面に配置され、DIMMのようなニアメモリは、sledの下面に配置される。この設計により提供される増大した空気流の結果として、コンポーネントは、典型的なシステムにおけるものよりも高い周波数及び電力レベルで動作してもよく、それにより、性能を増加させる。さらに、sledは、ラック内の電力及びデータ通信ケーブルとブラインド的に嵌合するように構成され、それにより、迅速に取り外し、アップグレードし、再設置し、及び/又は交換する能力を強化する。同様に、プロセッサ、アクセラレータ、メモリ及びデータ記憶ドライブのような、sled上に配置された個々のコンポーネントは、互いの間隔が増加するため、容易にアップグレードされるように構成される。例示的な実施形態では、コンポーネントは、これらの真正性を証明するためのハードウェア認証機能を更に含む。
【0015】
データセンターは、イーサネット及びオムニパス(Omni-Path)を含む複数の他のネットワークアーキテクチャをサポートする単一のネットワークアーキテクチャ(「ファブリック(fabric)」)を利用できる。sledは、典型的なツイストペアケーブル(例えば、カテゴリ5、カテゴリ5e、カテゴリ6等)よりも高い帯域幅及び低い待ち時間を提供する光ファイバを介してスイッチに結合できる。高い帯域幅、低い待ち時間の相互接続及びネットワークアーキテクチャのため、データセンターは、使用時に、物理的に分解されたメモリ、アクセラレータ(例えば、GPU、グラフィックスアクセラレータ、FPGA、ASIC、ニューラルネットワーク及び/又は人工知能アクセラレータ等)及びデータ記憶ドライブのようなリソースをプールし、必要に応じてこれらを計算リソース(例えば、プロセッサ)に提供してもよく、計算リソースが、あたかもローカルであるかのように、プールされたリソースにアクセスすることを可能にする。
【0016】
電力供給又は電源は、電圧及び/又は電流をシステム100又はここに記載のいずれかのコンポーネント若しくはシステムに提供できる。一例では、電力供給は、コンセントに差し込むためのAC-DC(交流-直流)アダプタを含む。このようなAC電力は、再生可能エネルギー(例えば、ソーラーパワー)電源とすることができる。一例では、電源は、外部AC-DCコンバータのようなDC電源を含む。一例では、電源又は電力供給は、充電フィールドの近傍を介して充電するための無線充電ハードウェアを含む。一例では、電源は、内部バッテリ、交流電源、動きベースの電源、ソーラーパワー電源又は燃料電池電源を含むことができる。
【0017】
図2A図2Dは、ここに記載の実施形態により提供される計算システム及びグラフィックスプロセッサを示す。ここでのいずれかの他の図面のエレメントと同じ参照符号(又は名称)を有する図2A図2Dのエレメントは、ここで他の箇所に記載されたものと同様の方式で動作又は機能できるが、このようなものに限定されない。
【0018】
図2Aは、1つ以上のプロセッサコア202A~202Nと、統合メモリコントローラ214と、統合グラフィックスプロセッサ208とを有するプロセッサ200の実施形態のブロック図である。プロセッサ200は、破線のボックスにより表される更なるコア202Nを含む更なるコアを含むことができる。プロセッサコア202A~202Nのそれぞれは、1つ以上の内部キャッシュユニット204A~204Nを含む。いくつかの実施形態では、各プロセッサコアはまた、1つ以上の共有キャッシュユニット206へのアクセスを有する。内部キャッシュユニット204A~204N及び共有キャッシュユニット206は、プロセッサ200内のキャッシュメモリ階層を表す。キャッシュメモリ階層は、各プロセッサコア内の少なくとも1つのレベルの命令及びデータキャッシュと、レベル2(L2)、レベル3(L3)、レベル4(L4)又は他のレベルのキャッシュのような1つ以上のレベルの共有の中間レベルのキャッシュとを含んでもよく、外部メモリの前のキャッシュの最高レベルがLLCとして分類される。いくつかの実施形態では、キャッシュコヒーレンシロジックは、様々なキャッシュユニット206及び204A~204Nの間のコヒーレンシを維持する。
【0019】
いくつかの実施形態では、プロセッサ200は、1つ以上のバスコントローラユニット216及びシステムエージェントコア210のセットを含んでもよい。1つ以上のバスコントローラユニット216は、1つ以上のPCI又はPCIエクスプレスバスのような周辺機器バスのセットを管理する。システムエージェントコア210は、様々なプロセッサコンポーネントの管理機能を提供する。いくつかの実施形態では、システムエージェントコア210は、様々な外部メモリデバイス(図示せず)へのアクセスを管理するために、1つ以上の統合メモリコントローラ214を含む。
【0020】
いくつかの実施形態では、プロセッサコア202A~202Nのうち1つ以上は、同時マルチスレッディングのサポートを含む。このような実施形態では、システムエージェントコア210は、マルチスレッド処理中にコア202A~202Nを調整して動作させるためのコンポーネントを含む。システムエージェントコア210は電力制御ユニット(power control unit, PCU)を更に含んでもよく、電力制御ユニット(PCU)は、プロセッサコア202A~202N及びグラフィックスプロセッサ208の電力状態を調整するためのロジック及びコンポーネントを含む。
【0021】
いくつかの実施形態では、プロセッサ200は、グラフィックス処理演算を実行するためのグラフィックスプロセッサ208を更に含む。いくつかの実施形態では、グラフィックスプロセッサ208は、1つ以上の統合メモリコントローラ214を含む、共有キャッシュユニット206及びシステムエージェントコア210のセットと結合する。いくつかの実施形態では、システムエージェントコア210はまた、1つ以上の結合されたディスプレイに対してグラフィックスプロセッサ出力を駆動するためのディスプレイコントローラ211を含む。いくつかの実施形態では、ディスプレイコントローラ211はまた、少なくとも1つの相互接続を介してグラフィックスプロセッサに結合された別個のモジュールでもよく、或いは、グラフィックスプロセッサ208内に統合されてもよい。
【0022】
いくつかの実施形態では、リングベースの相互接続ユニット212が、プロセッサ200の内部コンポーネントを結合するために使用される。しかし、ポイントツーポイント相互接続、切り替え式相互接続、又は当該技術分野で周知の技術を含む他の技術のような代替の相互接続ユニットが使用されてもよい。いくつかの実施形態では、グラフィックスプロセッサ208は、I/Oリンク213を介してリング相互接続212と結合する。
【0023】
例示的なI/Oリンク213は、様々なプロセッサコンポーネントとeDRAMモジュールのような高性能埋め込み式メモリモジュール218との間の通信を実現するオンパッケージI/O相互接続を含む、複数の種類のI/O相互接続のうち少なくとも1つを表す。いくつかの実施形態では、プロセッサコア202A~202N及びグラフィックスプロセッサ208のそれぞれは、共有のラストレベルキャッシュとして埋め込み式メモリモジュール218を使用できる。
【0024】
いくつかの実施形態では、プロセッサコア202A~202Nは、同じ命令セットアーキテクチャを実行する同種のコアである。他の実施形態では、プロセッサコア202A~202Nは、命令セットアーキテクチャ(instruction set architecture, ISA)に関して異種であり、プロセッサコア202A~202Nのうち1つ以上は、第1の命令セットを実行する一方で、他のコアのうち少なくとも1つは、第1の命令セットのサブセット又は異なる命令セットを実行する。一実施形態では、プロセッサコア202A~202Nは、マイクロアーキテクチャに関して異種であり、比較的高い電力消費を有する1つ以上のコアは、より低い電力消費を有する1つ以上の電力コアと結合する。一実施形態では、プロセッサコア202A~202Nは、計算能力に関して異種である。さらに、プロセッサ200は、他のコンポーネントに加えて、図示のコンポーネントを有する1つ以上のチップ上に或いはSoC集積回路として実装できる。
【0025】
図2Bは、ここに記載のいくつかの実施形態によるグラフィックスプロセッサコア219のハードウェアロジックのブロック図である。ここでのいずれかの他の図面のエレメントと同じ参照符号(又は名称)を有する図2Bのエレメントは、ここで他の箇所に記載されたものと同様の方式で動作又は機能できるが、このようなものに限定されない。グラフィックスプロセッサコア219は、場合によってはコアスライスと呼ばれ、モジュール式グラフィックスプロセッサ内の1つ又は複数のグラフィックスコアとすることができる。グラフィックスプロセッサコア219は、1つのグラフィックスコアスライスの例であり、ここに記載のグラフィックスプロセッサは、目標電力及び性能エンベロープに基づいて複数のグラフィックスコアスライスを含んでもよい。各グラフィックスプロセッサコア219は、サブスライスとも呼ばれる複数のサブコア221A~221Fに結合された固定機能ブロック230を含むことができ、複数のサブコア221A~221Fは、汎用及び固定機能ロジックのモジュール式ブロックを含む。
【0026】
いくつかの実施形態では、固定機能ブロック230は、例えば、低性能及び/又は低電力グラフィックスプロセッサの実装において、グラフィックスプロセッサコア219内の全てのサブコアにより共有できるジオメトリ/固定機能パイプライン231を含む。様々な実施形態では、ジオメトリ/固定機能パイプライン231は、3D固定機能パイプライン(例えば、以下に説明する図3及び図4におけるような3Dパイプライン312)と、ビデオフロントエンドユニットと、スレッド生成器及びスレッドディスパッチャと、ユニファイドリターンバッファ(例えば、以下に説明する図4におけるユニファイドリターンバッファ418)を管理するユニファイドリターンバッファマネージャとを含む。
【0027】
一実施形態では、固定機能ブロック230はまた、グラフィックスSoCインタフェース232と、グラフィックスマイクロコントローラ233と、メディアパイプライン234とを含む。グラフィックスSoCインタフェース232は、グラフィックスプロセッサコア219とシステムオンチップ集積回路内の他のプロセッサコアとの間のインタフェースを提供する。グラフィックスマイクロコントローラ233は、スレッドディスパッチ、スケジューリング及びプリエンプションを含むグラフィックスプロセッサコア219の様々な機能を管理するように構成可能なプログラム可能サブプロセッサである。メディアパイプライン234(例えば、図3及び図4のメディアパイプライン316)は、画像及びビデオデータを含むマルチメディアデータの復号、符号化、前処理及び/又は後処理を実現するためのロジックを含む。メディアパイプライン234は、サブコア221~221F内のロジックを計算又はサンプリングするための要求を介してメディア演算を実行する。
【0028】
一実施形態では、SoCインタフェース232は、グラフィックスプロセッサコア219が共有ラストレベルキャッシュメモリ、システムRAM及び/又は埋め込み式オンチップ又はオンパッケージDRAMのようなメモリ階層エレメントを含む、SoC内の汎用アプリケーションプロセッサコア(例えば、CPU)及び/又は他のコンポーネントと通信することを可能にする。SoCインタフェース232はまた、カメラ画像処理パイプラインのようなSoC内の固定機能デバイスとの通信を可能にでき、SoC内でグラフィックスプロセッサコア219とCPUとの間で共有され得るグローバルメモリアトミック(global memory atomics)の使用を可能にし及び/又は実装する。SoCインタフェース232はまた、グラフィックスプロセッサコア219のための電力管理制御を実装し、グラフィックコア219のクロックドメインとSoC内の他のクロックドメインとの間のインタフェースを可能にできる。一実施形態では、SoCインタフェース232は、グラフィックスプロセッサ内の1つ以上のグラフィックスコアのそれぞれにコマンド及び命令を提供するように構成されたコマンドストリーマ及びグローバルスレッドディスパッチャからのコマンドバッファの受信を可能にする。コマンド及び命令は、メディア演算が実行されるときにはメディアパイプライン234に、グラフィックス処理演算が実行されるときにはジオメトリ及び固定機能パイプライン(例えば、ジオメトリ及び固定機能パイプライン231、ジオメトリ及び固定機能パイプライン237)にディスパッチできる。
【0029】
グラフィックスマイクロコントローラ233は、グラフィックスプロセッサコア219のための様々なスケジューリング及び管理タスクを実行するように構成できる。一実施形態では、グラフィックスマイクロコントローラ233は、サブコア221A~221F内の実行ユニット(execution unit, EU)アレイ222A~222F、224A~224F内の様々なグラフィックス並列エンジン上でグラフィックス及び/又は計算ワークロードスケジューリングを実行できる。このスケジューリングモデルでは、グラフィックスプロセッサコア219を含むSoCのCPUコア上で実行されるホストソフトウェアは、複数のグラフィックプロセッサのドアベルのうち1つのワークロードをサブミットでき、これは、適切なグラフィックスエンジン上でのスケジューリング演算を呼び出す。スケジューリング演算は、どのワークロードを次に実行するかを決定することと、ワークロードをコマンドストリーマにサブミットすることと、エンジン上で実行している既存のワークロードをプリエンプト(pre-empt)することと、ワークロードの進行を監視することと、ワークロードが完了したときにホストソフトウェアに通知することとを含む。一実施形態では、グラフィックスマイクロコントローラ233はまた、グラフィックスプロセッサコア219の低電力状態又はアイドル状態を実現でき、システム上のオペレーティングシステム及び/又はグラフィックスドライバソフトウェアから独立して、低電力状態遷移の間でグラフィックスプロセッサコア219内のレジスタを保存及び復元する能力をグラフィックスプロセッサコア219に提供する。
【0030】
グラフィックスプロセッサコア219は、図示のサブコア221A~221Fより大きいもの又は小さいものを有してもよく、N個までのモジュール式サブコアを有してもよい。N個のサブコアの各セットについて、グラフィックスプロセッサコア219はまた、共有機能ロジック235、共有及び/又はキャッシュメモリ236、ジオメトリ/固定機能パイプライン237、並びに様々なグラフィックス及び計算処理演算をアクセラレーションするための更なる固定機能ロジック238を含むことができる。共有機能ロジック235は、グラフィックスプロセッサコア219内の各N個のサブコアにより共有できる図4の共有機能ロジック420(例えば、サンプラ、数値演算及び/又はスレッド間通信ロジック)に関連する論理ユニットを含むことができる。共有及び/又はキャッシュメモリ236は、グラフィックスプロセッサコア219内のN個のサブコア221A~221Fのセットのためのラストレベルキャッシュとすることができ、また、複数のサブコアによりアクセス可能な共有メモリとして機能できる。ジオメトリ/固定機能パイプライン237は、固定機能ブロック230内のジオメトリ/固定機能パイプライン231の代わりに含まれることができ、同じ又は同様の論理ユニットを含むことができる。
【0031】
一実施形態では、グラフィックスプロセッサコア219は、グラフィックスプロセッサコア219により使用される様々な固定機能アクセラレーションロジックを含むことができる更なる固定機能ロジック238を含む。一実施形態では、更なる固定機能ロジック238は、位置のみのシェーディング(position only shading)で使用するための更なるジオメトリパイプラインを含む。位置のみのシェーディングでは、2つのジオメトリパイプライン、すなわち、ジオメトリ/固定機能パイプライン238、231内の全ジオメトリパイプライン、及び更なる固定機能ロジック238内に含まれてもよい更なるジオメトリパイプラインであるカリングパイプライン(cull pipeline)が存在する。一実施形態では、カリングパイプラインは、全ジオメトリパイプラインのトリミングされたバージョンである。全パイプライン及びカリングパイプラインは、同じアプリケーションの異なるインスタンスを実行でき、各インスタンスは、別々のコンテキストを有する。位置のみのシェーディングは、廃棄されたトライアングルの長時間のカリング実行を隠蔽でき、いくつかの場合、より早くシェーディングが完了可能になる。例えば、一実施形態では、更なる固定機能ロジック238内のカリングパイプラインロジックは、主アプリケーションと並列に位置シェーダ(position shader)を実行でき、一般的に、フレームバッファへのピクセルのラスタライズ(rasterization)及びレンダリングを実行することなく、カリングパイプラインが頂点の位置属性のみをフェッチしてシェード(shade)するので、全パイプラインよりも速く臨界結果を生成する。カリングパイプラインは、トライアングルがカリングされるか否かに関係なく、全てのトライアングルの可視情報を計算するために、生成された臨界結果を使用できる。全パイプライン(この場合、再生パイプラインと呼ばれてもよい)は、最終的にラスタライズ段階に渡される可視トライアングルのみをシェードするようにカリングされたトライアングルをスキップするために、可視情報を消費できる。
【0032】
一実施形態では、更なる固定機能ロジック238はまた、機械学習訓練又は推論のための最適化を含む実装のために、固定機能行列乗算ロジックのような機械学習アクセラレーションロジックを含むことができる。
【0033】
各グラフィックスサブコア221A~221F内に、グラフィックスパイプライン、メディアパイプライン又はシェーダプログラムによる要求に応じて、グラフィックス、メディア及び計算演算を実行するために使用され得る実行リソースのセットを含む。グラフィックスサブコア221A~221Fは、複数のEUアレイ222A~222F、224A~224Fと、スレッドディスパッチ及びスレッド間通信(thread dispatch and inter-thread communication, TD/IC)ロジック223A~223Fと、3D(例えば、テクスチャ)サンプラ225A~225Fと、メディアサンプラ226A~226Fと、シェーダプロセッサ227A~227Fと、共有ローカルメモリ(shared local memory, SLM)228A~228Fとを含む。EUアレイ222A~222F、224A~224Fは、複数の実行ユニットをそれぞれ含み、これらは、グラフィックス、メディア、計算シェーダプログラムを含むグラフィックス、メディア又は計算演算のサービスにおいて浮動小数点及び整数/固定小数点論理演算を実行可能な汎用グラフィックス処理ユニットである。TD/ICロジック223A~223Fは、サブコア内の実行ユニットについてのローカルスレッドディスパッチ及びスレッド制御動作を実行し、サブコアの実行ユニット上で実行するスレッドの間の通信を実現する。3Dサンプラ225A~225Fは、テクスチャ又は他の3Dグラフィックス関連データをメモリに読み込むことができる。3Dサンプラは、構成されたサンプル状態と、所与のテクスチャに関連するテクスチャフォーマットとに基づいて、テクスチャデータを異なって読み取ることができる。メディアサンプラ226A~226Fは、メディアデータに関連するタイプ及びフォーマットに基づいて、同様の読み取り操作を実行できる。一実施形態では、各グラフィックスサブコア221A~221Fは、統一3D及びメディアサンプラを交互に含むことができる。サブコア221A~221Fのそれぞれの中の実行ユニット上で実行するスレッドは、スレッドグループ内で実行するスレッドがオンチップメモリの共通プールを使用して実行することを可能にするために、各サブコア内の共有ローカルメモリ228A~228Fを利用できる。
【0034】
図2Cは、マルチコアグループ240A~240Nに配置されたグラフィックス処理リソースの専用セットを含むグラフィックス処理ユニット(graphics processing unit, GPU)239を示す。単一のマルチコアグループ240Aのみの詳細が提供されるが、他のマルチコアグループ240B~240Nは、グラフィックス処理リソースの同じセット又は同様のセットを備えてもよいことが認識される。
【0035】
図示のように、マルチコアグループ240Aは、グラフィックスコアのセット243と、テンソルコアのセット244と、レイトレーシングコアのセット245とを含んでもよい。スケジューラ/ディスパッチャ241は、様々なコア243、244、245上で実行するためにグラフィックススレッドをスケジューリングしてディスパッチする。レジスタファイルのセット242は、グラフィックススレッドを実行するときにコア243、244、245により使用されるオペランド値を記憶する。これらは、例えば、整数値を記憶するための整数レジスタと、浮動小数点値を記憶するための浮動小数点レジスタと、パックデータエレメント(packed data element)(整数及び/又は浮動小数点データエレメント)を記憶するためのベクトルレジスタと、テンソル/行列値を記憶するためのタイルレジスタとを含んでもよい。一実施形態では、タイルレジスタは、ベクトルレジスタの組み合わされたセットとして実装される。
【0036】
1つ以上の組み合わされたレベル1(L1)キャッシュ及び共有メモリユニット247は、テクスチャデータ、頂点データ、ピクセルデータ、光線データ、バウンディングボリュームデータ等のようなグラフィックスデータを、各マルチコアグループ240A内にローカルに記憶する。1つ以上のテクスチャユニット247はまた、テクスチャマッピング及びサンプリングのようなテクスチャ演算を実行するために使用できる。レベル2(L2)キャッシュ253は、マルチコアグループ240A~240Nの全て又はサブセットにより共有され、複数の同時グラフィックススレッドのためのグラフィックスデータ及び/又は命令を記憶する。図示のように、L2キャッシュ253は、複数のマルチコアグループ240A~240Nの間で共有されてもよい。1つ以上のメモリコントローラ248は、GPU239を、システムメモリ(例えば、DRAM)及び/又は専用グラフィックスメモリ(例えば、GDDR6メモリ)でもよいメモリ249に結合する。
【0037】
入出力(input/output, I/O)回路250は、GPU239を、デジタルシグナルプロセッサ(digital signal processor, DSP)、ネットワークコントローラ又はユーザ入力デバイスのような1つ以上のI/Oデバイスに252に結合する。オンチップ相互接続は、I/Oデバイス252をGPU239及びメモリ249に結合するために使用されてもよい。I/O回路250の1つ以上のI/Oメモリ管理ユニット(I/O memory management unit, IOMMU)251は、I/Oデバイス252をシステムメモリ249に直接結合する。一実施形態では、IOMMU251は、システムメモリ249内の物理アドレスに仮想アドレスをマッピングするために、ページテーブルの複数のセットを管理する。この実施形態では、I/Oデバイス252、CPU246及びGPU239は、同じ仮想アドレス空間を共有してもよい。
【0038】
1つの実装では、IOMMU251は仮想化をサポートする。この場合、IOMMU251は、(例えば、システムメモリ249内で)ゲスト/グラフィックス仮想アドレスをゲスト/グラフィックス物理アドレスにマッピングするための第1のセットのページテーブルと、ゲスト/グラフィックス物理アドレスをシステム/ホスト物理アドレスにマッピングするための第2のセットのページテーブルとを管理してもよい。第1及び第2のセットのページテーブルのそれぞれのベースアドレスは、制御レジスタに記憶され、コンテキスト切り替えで交換されてもよい(例えば、それにより、新たなコンテキストが関連するセットのページテーブルへのアクセスを提供される)。図2Cに図示しないが、コア243、244、245及び/又はマルチコアグループ240A~240Nのそれぞれは、ゲスト仮想対ゲスト物理変換、ゲスト物理対ホスト物理変換及びゲスト仮想対ホスト物理変換をキャッシュするためのトランスレーションルックアサイドバッファ(translation lookaside buffer, TLB)を含んでもよい。
【0039】
一実施形態では、CPU246、GPU239及びI/Oデバイス252は、単一の半導体チップ及び/又はチップパッケージに集積される。図示のメモリ249は、同じチップ上に集積されてもよく、或いは、オフチップインタフェースを介してメモリコントローラ248に結合されてもよい。1つの実装では、メモリ249は、他の物理システムレベルのメモリと同じ仮想アドレス空間を共有するGDDR6メモリを含むが、本発明の基礎の原理は、この特定の実装に限定されない。
【0040】
一実施形態では、テンソルコア244は、行列演算を実行するように特に設計された複数の実行ユニットを含み、これらは、深層学習演算を実行するために使用される基本的な計算演算である。例えば、同時行列乗算演算は、ニューラルネットワーク訓練及び推論のために使用されてもよい。テンソルコア244は、単精度浮動小数点(例えば、32ビット)、半精度浮動小数点(例えば、16ビット)、整数ワード(16ビット)、バイト(8ビット)及び半バイト(4ビット)を含む様々なオペランド精度を使用して行列処理を実行してもよい。一実施形態では、ニューラルネットワークの実装は、高品質の最終画像を構築するために、複数のフレームからの詳細を潜在的に組み合わせて、それぞれのレンダリングされたシーンの特徴を抽出する。
【0041】
深層学習の実装では、並列行列乗算作業がテンソルコア244上で実行されるようにスケジューリングされてもよい。ニューラルネットワークの訓練は、特に、かなりの数の行列ドット積演算を必要とする。N×N×N行列乗算の内積の式を処理するために、テンソルコア244は、少なくともN個のドット積処理エレメントを含んでもよい。行列乗算が始まる前に、1つの全体の行列がタイルレジスタにロードされ、第2の行列の少なくとも1つの列が、Nサイクルのサイクル毎にロードされる。サイクル毎に、処理されるN個のドット積が存在する。
【0042】
行列要素は、16ビットワード、8ビットバイト(例えば、INT8)及び4ビット半バイト(例えば、INT4)を含む、特定の実装に依存して異なる精度で記憶されてもよい。異なるワークロード(例えば、バイト及び半バイトへの量子化に耐えることができる推論ワークロード等)に最も効率的な精度が使用されることを確保するために、異なる精度モードがテンソルコア244に指定されてもよい。
【0043】
一実施形態では、レイトレーシングコア245は、リアルタイムレイトレーシング及び非リアルタイムレイトレーシング実装の双方についてのレイトレーシング演算をアクセラレーションする。特に、レイトレーシングコア245は、バウンディングボリューム階層(bounding volume hierarchy, BVH)を使用してレイトラバーサルを実行し、BVHボリューム内に囲まれた光線とプリミティブとの間の交差を識別するためのレイトラバーサル/交差回路を含む。レイトレーシングコア245はまた、デプステスト及びカリングを実行する(例えば、Zバッファ又は同様の構成を使用する)ための回路を含んでもよい。一実施形態では、レイトレーシングコア245は、ここに記載の画像ノイズ除去技術と協調してトラバーサル及び交差演算を実行し、その少なくとも一部は、テンソルコア244上で実行されてもよい。例えば、一実施形態では、テンソルコア244は、レイトレーシングコア245により生成されたフレームのノイズ除去を実行するために、深層学習ニューラルネットワークを実装する。しかし、CPU246、グラフィックスコア243及び/又はレイトレーシングコア245はまた、ノイズ除去及び/又は深層学習アルゴリズムの全部又は一部を実装してもよい。
【0044】
さらに、上記のように、ノイズ除去のための分散手法が使用されてもよく、GPU239がネットワーク又は高速相互接続上で他の計算デバイスに結合された計算デバイス内にある。この実施形態では、相互接続された計算デバイスは、異なるタイプの画像フレーム及び/又は異なるグラフィックスアプリケーションについて全体のシステムがノイズ除去を実行することを学習する速度を改善するために、ニューラルネットワーク学習/訓練データを共有する。
【0045】
一実施形態では、レイトレーシングコア245は、全てのBVHトラバーサル及び光線-プリミティブ交差を処理し、グラフィックスコア243が光線毎に数千の命令で過負荷になるのを防ぐ。一実施形態では、各レイトレーシングコア245は、バウンディングボックステスト(例えば、トラバーサル演算のため)を実行するための第1のセットの特殊回路と、光線-トライアングル交差テスト(例えば、トラバースされた交差する光線)を実行するための第2のセットの特殊回路とを含む。したがって、一実施形態では、マルチコアグループ240Aは、単に光線プローブ(ray probe)を起動でき、レイトレーシングコア245は、独立してレイトラバーサル及び交差を実行し、ヒットデータ(例えば、ヒット(hit)、ノーヒット(no hit)、複数ヒット(multiple hits)等)をスレッドコンテキストに戻す。他のコア243、244は、レイトレーシングコア245がトラバーサル及び交差演算を実行する間に、他のグラフィックスを実行するか或いは作業を計算するために解放される。
【0046】
一実施形態では、各レイトレーシングコア245は、BVHテスト演算を実行するためのトラバーサルユニットと、光線-プリミティブ交差テストを実行する交差ユニットとを含む。交差ユニットは「ヒット」、「ノーヒット」、又は「マルチヒット」応答を生成し、それを適切なスレッドに提供する。トラバーサル及び交差演算の間に、他のコア(例えば、グラフィックスコア243及びテンソルコア244)の実行リソースは、他の形式のグラフィックス作業を実行するために解放される。
【0047】
以下に説明する1つの特定の実施形態では、作業がグラフィックスコア243とレイトレーシングコア245との間で分散されるハイブリッドラスタライズ/レイトレーシング(hybrid rasterization/ray tracing)手法が使用される。
【0048】
一実施形態では、レイトレーシングコア245(及び/又は他のコア243、244)は、DispatchRaysコマンドを含むMicrosoftのDXR(DirectX Ray Tracing)のようなレイトレーシング命令セット並びに光線生成シェーダ、クローゼストヒット(closest-hit)シェーダ、エニーヒット(any-hit)シェーダ及びミス(miss)シェーダのハードウェアサポートを含み、各オブジェクトのためにシェーダ及びテクスチャの固有のセットの割り当てを可能にする。レイトレーシングコア245、グラフィックスコア243及びテンソルコア244によりサポートされ得る他のレイトレーシングプラットフォームは、Vulkan 1.1.85である。しかし、本発明の基礎の原理は、特定のレイトレーシングISAに限定されない点に留意すべきである。
【0049】
一般的に、様々なコア245、244、243は、光線生成、クローゼストヒット、エニーヒット、光線-プリミティブ交差、プリミティブ毎及び階層バウンディングボックス構築、ミス、ビジット及び例外の命令/機能を含むレイトレーシング命令セットをサポートしてもよい。より具体的には、一実施形態は、以下の機能を実行するためのレイトレーシング命令を含む。
【0050】
光線生成(Ray Generation) - 光線生成命令は、各ピクセル、サンプル又は他のユーザ定義の作業割り当てについて実行されてもよい。
【0051】
クローゼストヒット(Closest-Hit) - クローゼストヒット命令は、シーン内のプリミティブとの光線の最も近い交差点を見つけるために実行されてもよい。
【0052】
エニーヒット(Any-Hit) - エニーヒット命令は、潜在的に新たな最も近い交差点を識別するために、シーン内で光線とプリミティブとの間の複数の交差を識別する。
【0053】
交差(Intersection) - 交差命令は、光線-プリミティブ交差テストを実行し、結果を出力する。
【0054】
プリミティブ毎バウンディングボックス構築(Per-primitive Bounding box Construction) - この命令は、所与のプリミティブ又はプリミティブのグループの周囲にバウンディングボックスを構築する(例えば、新たなBVH又は他のアクセラレーションデータ構造を構築するとき)。
【0055】
ミス(Miss) - 光線がシーン内の全てのジオメトリ又はシーンの指定の領域をミスすることを示す。
【0056】
ビジット(Visit) - 光線が通過する子ボリュームを示す。
【0057】
例外(Exceptions) - 様々なタイプの例外ハンドラ(例えば、様々なエラー条件で呼び出される)を含む。
【0058】
図2Dは、ここに記載の実施形態に従ってグラフィックスプロセッサ及び/又はコンピュータアクセラレータとして構成できる汎用グラフィックス処理ユニット(general purpose graphics processing unit, GPGPU)270のブロック図である。GPGPU270は、1つ以上のシステム及び/又はメモリバスを介して、ホストプロセッサ(例えば、1つ以上のCPU246)及びメモリ271、272と相互接続できる。一実施形態では、メモリ271は、1つ以上のCPU246と共有されてもよいシステムメモリであり、メモリ272は、GPGPU270に専用のデバイスメモリである。一実施形態では、GPGPU270及びデバイスメモリ272内のコンポーネントは、1つ以上のCPU246にアクセス可能なメモリアドレスにマッピングされてもよい。メモリ271及び272へのアクセスは、メモリコントローラ268を介して実現されてもよい。一実施形態では、メモリコントローラ268は、内部ダイレクトメモリアクセス(direct memory access, DMA)コントローラ269を含むか、或いは、そうでなければDMAコントローラにより実行される動作を実行するためのロジックを含むことができる。
【0059】
GPGPU270は、L2キャッシュ253、L1キャッシュ254、命令キャッシュ255及び共有メモリ256を含む複数のキャッシュメモリを含み、これらのうち少なくとも一部はキャッシュメモリとして分割されてもよい。GPGPU270はまた、複数の計算ユニット260A~260Nを含む。各計算ユニット260A~260Nは、ベクトルレジスタ261と、スカラレジスタ262と、ベクトル論理ユニット263と、スカラ論理ユニット264とのセットを含む。計算ユニット260A-260Nはまた、ローカル共有メモリ265と、プログラムカウンタ266とを含むことができる。計算ユニット260A~260Nは、定数キャッシュ267と結合でき、定数キャッシュ267は、GPGPU270上で実行されるカーネル又はシェーダプログラムの実行中に変化しないデータである定数データを記憶するために使用できる。一実施形態では、定数キャッシュ267はスカラデータキャッシュであり、キャッシュされたデータは、スカラレジスタ262に直接フェッチできる。
【0060】
動作中に、1つ以上のCPU246は、アクセス可能なアドレス空間にマッピングされたGPGPU270内のレジスタ又はメモリにコマンドを書き込むことができる。コマンドプロセッサ257は、レジスタ又はメモリからコマンドを読み取り、どのようにこれらのコマンドがGPGPU270内で処理されるかを決定できる。次いで、スレッドディスパッチャ258は、スレッドを計算ユニット260A~260Nにディスパッチして、これらのコマンドを実行するために使用できる。各計算ユニット260A~260Nは、他の計算ユニットとは独立してスレッドを実行できる。さらに、各計算ユニット260A~260Nは、条件付き計算のために独立して構成でき、計算の結果をメモリに条件付きで出力できる。コマンドプロセッサ257は、サブミットされたコマンドが完了したとき、1つ以上のCPU246を中断できる。
【0061】
図3A図3Cは、ここに記載の実施形態により提供される更なるグラフィックスプロセッサ及び計算アクセラレータアーキテクチャのブロック図を示す。ここでのいずれかの他の図面のエレメントと同じ参照符号(又は名称)を有する図3A図3Cのエレメントは、ここで他の箇所に記載されたものと同様の方式で動作又は機能できるが、このようなものに限定されない。
【0062】
図3Aは、グラフィックスプロセッサ300のブロック図であり、これは、個別のグラフィックス処理ユニットでもよく、或いは、複数の処理コア又は限定されないがメモリデバイス若しくはネットワークインタフェースのような他の半導体デバイスと統合されたグラフィックスプロセッサでもよい。いくつかの実施形態では、グラフィックスプロセッサは、グラフィックスプロセッサ上のレジスタへのメモリマップI/Oインタフェースを介して、プロセッサメモリ内に配置されたコマンドと通信する。いくつかの実施形態では、グラフィックスプロセッサ300は、メモリにアクセスするためのメモリインタフェース314を含む。メモリインタフェース314は、ローカルメモリ、1つ以上の内部キャッシュ、1つ以上の共有外部キャッシュ及び/又はシステムメモリへのインタフェースとすることができる。
【0063】
いくつかの実施形態では、グラフィックスプロセッサ300はまた、ディスプレイデバイス318に対するディスプレイ出力データを駆動するためのディスプレイコントローラ302を含む。ディスプレイコントローラ302は、ビデオ又はユーザインタフェースエレメントの複数の層の表示及び構成についての1つ以上のオーバレイ面のためのハードウェアを含む。ディスプレイデバイス318は、内部又は外部のディスプレイデバイスとすることができる。一実施形態では、ディスプレイデバイス318は、仮想現実(virtual reality, VR)ディスプレイデバイス又は拡張現実(augmented reality, AR)ディスプレイデバイスのようなヘッドマウントディスプレイデバイスである。いくつかの実施例では、グラフィックスプロセッサ300は、MPEG-2のようなMPEG(Moving Picture Experts Group)フォーマット、H.264/MPEG-4 AVCのようなAVC(Advanced Video Coding)フォーマット、H.265/HEVC、AOMedia(Alliance for Open Media) VP8、VP9、並びにSMPTE(Society of Motion Picture & Television Engineers)421M/VC-1及びJPEG及びモーションJPEG(Motion JPEG, MJPEG)フォーマットのようなJPEG(Joint Photographic Experts Group)フォーマットを含むが、これらに限定されない、1つ以上のメディア符号化フォーマットにメディアを符号化するか、これらから復号するか、或いはこれらの間でコード変換するためのビデオコーデックエンジン306を含む。
【0064】
いくつかの実施形態では、グラフィックスプロセッサ300は、例えば、ビット境界ブロック転送(bit-boundary block transfer)を含む二次元(2D)ラスタライズ演算を実行するためのブロック画像転送(block image transfer, BLIT)エンジン304を含む。しかし、一実施形態では、2Dグラフィックス演算は、グラフィックス処理エンジン(graphics processing engine GPE)310の1つ以上のコンポーネントを使用して実行される。いくつかの実施形態では、GPE310は、三次元(3D)グラフィックス演算及びメディア演算を含むグラフィックス演算を実行するための計算エンジンである。
【0065】
いくつかの実施形態では、GPE310は、3Dプリミティブ形状(例えば、矩形、三角形等)に作用する処理機能を使用して三次元画像及びシーンをレンダリングする等の3D演算を実行するための3Dパイプライン312を含む。3Dパイプライン312は、エレメント内の様々なタスクを実行し、及び/又は3D/メディアサブシステム315への実行スレッドを生成するプログラム可能及び固定機能エレメントを含む。3Dパイプライン312は、メディア演算を実行するために使用できる一方で、GPE310の実施形態はまた、ビデオ後処理及び画像強調のようなメディア演算を実行するために特に使用されるメディアパイプライン316を含む。
【0066】
いくつかの実施形態では、メディアパイプライン316は、ビデオコーデックエンジン306の代わりに或いはそのために、ビデオ復号アクセラレーション、ビデオ・デインターレーシング(de-interlacing)及びビデオ符号化アクセラレーションのような、1つ以上の特殊なメディア演算を実行するための固定機能又はプログラム可能論理ユニットを含む。いくつかの実施形態では、メディアパイプライン316は、3D/メディアサブシステム315上での実行のためのスレッドを生成するスレッド生成ユニットを更に含む。生成されたスレッドは、3D/メディアサブシステム315に含まれる1つ以上のグラフィックス実行ユニット上でメディア演算についての計算を実行する。
【0067】
いくつかの実施形態では、3D/メディアサブシステム315は、3Dパイプライン312及びメディアパイプライン316により生成されたスレッドを実行するためのロジックを含む。一実施形態では、パイプラインは、スレッド実行要求を3D/メディアサブシステム315に送信し、3D/メディアサブシステム315は、様々な要求を仲裁して利用可能なスレッド実行リソースにディスパッチするためのスレッドディスパッチロジックを含む。実行リソースは、3D及びメディアスレッドを処理するためのグラフィックス実行ユニットのアレイを含む。いくつかの実施形態では、3D/メディアサブシステム315は、スレッド命令及びデータのための1つ以上の内部キャッシュを含む。いくつかの実施形態では、サブシステムはまた、スレッドの間でデータを共有して出力データを記憶するために、レジスタ及びアドレス指定可能メモリを含む共有メモリを含む。
【0068】
図3Bは、ここに記載の実施形態によるタイル式アーキテクチャを有するグラフィックスプロセッサ320を示す。一実施形態では、グラフィックスプロセッサ320は、グラフィックスエンジンタイル310A~310D内に図3Aのグラフィックス処理エンジン310の複数のインスタンスを有するグラフィックス処理エンジンクラスタ322を含む。各グラフィックスエンジンタイル310A~310Dは、タイル相互接続323A~323Fのセットを介して相互接続できる。各グラフィックスエンジンタイル310A~310Dはまた、メモリ相互接続325A~325Dを介してメモリモジュール又はメモリデバイス326A~326Dに接続できる。メモリデバイス326A~326Dは、いずれかのグラフィックスメモリ技術を使用できる。例えば、メモリデバイス326A~326Dは、グラフィックスダブルデータレート(graphics double data rate, GDDR)メモリでもよい。一実施形態では、メモリデバイス326A~326Dは、それぞれのグラフィックスエンジンタイル310A~310Dと共にダイ上にすることができる高帯域幅メモリモジュール(high-bandwidth memory, HBM)である。一実施形態では、メモリデバイス326A~326Dは、それぞれのグラフィックスエンジンタイル310A~310Dの上に積み重ねることができるスタック式メモリデバイスである。一実施形態では、各グラフィックスエンジンタイル310A~310D及び関連するメモリ326A~326Dは、図11B図11Dに更に詳細に記載されるように、ベースダイ又はベース基板に結合された別個のチップレット上に存在する。
【0069】
グラフィックス処理エンジンクラスタ322は、オンチップ又はオンパッケージファブリック相互接続324と接続できる。ファブリック相互接続324は、グラフィックスエンジンタイル310A~310Dと、ビデオコーデック306及び1つ以上のコピーエンジン304のようなコンポーネントとの間の通信を可能にできる。コピーエンジン304は、メモリデバイス326A~326D及びグラフィックスプロセッサ320の外部にあるメモリ(例えば、システムメモリ)から、これらに、或いはこれらの間でデータを移動させるために使用できる。ファブリック相互接続324はまた、グラフィックスエンジンタイル310A~310Dを相互接続するためにも使用できる。グラフィックスプロセッサ320は、外部ディスプレイデバイス318との接続を可能にするためのディスプレイコントローラ302を任意選択で含んでもよい。グラフィックスプロセッサはまた、グラフィックス又は計算アクセラレータとして構成されてもよい。アクセラレータ構成では、ディスプレイコントローラ302及びディスプレイデバイス318は省略されてもよい。
【0070】
グラフィックスプロセッサ320は、ホストインタフェース328を介してホストシステムに接続できる。ホストインタフェース328は、グラフィックスプロセッサ320、システムメモリ及び/又は他のシステムコンポーネントの間の通信を可能にできる。ホストインタフェース328は、例えば、PCIエクスプレスバス又は他のタイプのホストシステムインタフェースとすることができる。
【0071】
図3Cは、ここに記載の実施形態による計算アクセラレータ330を示す。計算アクセラレータ330は、図3Bのグラフィックスプロセッサ320とのアーキテクチャの類似性を含むことができ、計算アクセラレーションのために最適化される。計算エンジンクラスタ332は、並列又はベクトルベースの汎用計算演算のために最適化された実行ロジックを含む計算エンジンタイルのセット340A~340Dを含むことができる。いくつかの実施形態では、計算エンジンタイル340A~340Dは、固定機能グラフィックス処理ロジックを含まないが、一実施形態では、計算エンジンタイル340A~340Dのうち1つ以上は、メディアアクセラレーションを実行するためのロジックを含むことができる。計算エンジンタイル340A~340Dは、メモリ相互接続325A~325Dを介してメモリ326A~326Dに接続できる。メモリ326A~326D及びメモリ相互接続325A~325Dは、グラフィックスプロセッサ320と同様の技術でもよく、或いは異なるものとすることができる。グラフィックス計算エンジンタイル340A~340Dはまた、タイル相互接続のセット323A~323Fを介して相互接続でき、ファブリック相互接続324と接続されてもよく、及び/又は、ファブリック相互接続324により相互接続されてもよい。一実施形態では、計算アクセラレータ330は、デバイス全体のキャッシュとして構成できる大きいL3キャッシュ336を含む。計算アクセラレータ330はまた、図3Bのグラフィックスプロセッサ320と同様に、ホストインタフェース328を介してホストプロセッサ及びメモリに接続できる。
【0072】
(グラフィックス処理エンジン)
図4は、いくつかの実施形態によるグラフィックスプロセッサのグラフィックス処理エンジン410のブロック図である。一実施形態では、グラフィックス処理エンジン(graphics processing engine, GPE)410は、図3Aに示す或るバージョンのGPE310であり、また、図3Bのグラフィックスエンジンタイル310A~310Dを表してもよい。ここでのいずれかの他の図面のエレメントと同じ参照符号(又は名称)を有する図4のエレメントは、ここで他の箇所に記載されたものと同様の方式で動作又は機能できるが、このようなものに限定されない。例えば、図3Aの3Dパイプライン312及びメディアパイプライン316が示されている。メディアパイプライン316は、GPE410のいくつかの実施形態では任意であり、GPE410内に明示的に含まれないことがある。例えば、少なくとも1つの実施形態では、別個のメディア及び/又は画像プロセッサがGPE410に結合される。
【0073】
いくつかの実施形態では、GPE410は、コマンドストリームを3Dパイプライン312及び/又はメディアパイプライン316に提供するコマンドストリーマ403と結合されるか或いはこれを含む。いくつかの実施形態では、コマンドストリーマ403はメモリと結合され、メモリは、システムメモリ、又は内部キャッシュメモリ及び共有キャッシュメモリのうち1つ以上とすることができる。いくつかの実施形態では、コマンドストリーマ403は、メモリからコマンドを受信し、コマンドを3Dパイプライン312及び/又はメディアパイプライン316に送信する。コマンドは、3Dパイプライン312及びメディアパイプライン316のためのコマンドを記憶するリングバッファからフェッチされる指示である。一実施形態では、リングバッファは、複数のコマンドのバッチを記憶するバッチコマンドバッファを更に含むことができる。3Dパイプライン312のためのコマンドはまた、限定されないが3Dパイプライン312のための頂点及びジオメトリデータ及び/又はメディアパイプライン316のための画像データ及びメモリオブジェクトのような、メモリに記憶されたデータへの参照を含むことができる。3Dパイプライン312及びメディアパイプライン316は、それぞれのパイプライン内のロジックを介して動作を実行することにより、或いは1つ以上の実行スレッドをグラフィックスコアアレイ414にディスパッチすることにより、コマンド及びデータを処理する。一実施形態では、グラフィックスコアアレイ414は、グラフィックスコア(例えば、グラフィックスコア415A、グラフィックスコア415B)の1つ以上のブロックを含み、各ブロックは1つ以上のグラフィックスコアを含む。各グラフィックスコアは、グラフィックス及び計算演算を実行するための汎用且つグラフィックス特有の実行ロジックと、固定機能テクスチャ処理及び/又は機械学習及び人工知能アクセラレーションロジックとを含むグラフィックス実行リソースのセットを含む。
【0074】
様々な実施形態では、3Dパイプライン312は、命令を処理して実行スレッドをグラフィックスコアアレイ414にディスパッチすることにより、頂点シェーダ、ジオメトリシェーダ、ピクセルシェーダ、フラグメントシェーダ、計算シェーダ又は他のシェーダプログラムのような1つ以上のシェーダ(shader)プログラムを処理するための固定機能及びプログラム可能ロジックを含むことができる。グラフィックスコアアレイ414は、これらのシェーダプログラムを処理する際に使用する実行リソースの統一ブロックを提供する。グラフィックコアアレイ414のグラフィックスコア415A~414B内の多目的実行ロジック(例えば、実行ユニット)は、様々な3D APIシェーダ言語のサポートを含み、複数のシェーダに関連する複数の同時実行スレッドを実行できる。
【0075】
いくつかの実施形態では、グラフィックスコアアレイ414は、ビデオ及び/又は画像処理のようなメディア機能を実行するための実行ロジックを含む。一実施形態では、実行ユニットは、グラフィックス処理演算に加えて、並列汎用計算演算を実行するようにプログラム可能な汎用ロジックを含む。汎用ロジックは、図1のプロセッサコア107又は図2Aのようなコア202A~202N内の汎用ロジックと並列に或いは関連して処理演算を実行できる。
【0076】
グラフィックスコアアレイ414上で実行するスレッドにより生成された出力データは、ユニファイドリターンバッファ(unified return buffer, URB)418内のメモリにデータを出力できる。URB418は、複数のスレッドのデータを記憶できる。いくつかの実施形態では、URB418は、グラフィックスコアアレイ414上で実行する異なるスレッドの間でデータを送信するために使用されてもよい。いくつかの実施形態では、URB418は、グラフィックスコアアレイ上のスレッドと、共有機能ロジック420内の固定機能ロジックとの間の同期のために更に使用されてもよい。
【0077】
いくつかの実施形態では、グラフィックスコアアレイ414は、アレイが可変数のグラフィックスコアを含み、それぞれがGPE410の目標電力及び性能レベルに基づいて可変数の実行ユニットを有するようにスケーラブルである。一実施形態では、必要に応じて実行リソースが有効又は無効になってもよいように、実行リソースは動的にスケーラブルである。
【0078】
グラフィックスコアアレイ414は、グラフィックスコアアレイ内のグラフィックスコアの間で共有される複数のリソースを含む共有機能ロジック420と結合する。共有機能ロジック420内の共有機能は、特殊な補足機能をグラフィックスコアアレイ414に提供するハードウェア論理ユニットである。様々な実施形態では、共有機能ロジック420は、サンプラ421、数値演算422及びスレッド間通信(inter-thread communication, ITC)423ロジックを含むが、これらに限定されない。さらに、いくつかの実施形態は、共有機能ロジック420内に1つ以上のキャッシュ425を実装する。
【0079】
共有機能は、所与の特殊な機能に対する需要がグラフィックスコアアレイ414内に含まれるのに不十分である場合に少なくとも実装される。その代わりに、その特殊な機能の単一のインスタンス化が、共有機能ロジック420内のスタンドアロンエンティティとして実装され、グラフィックスコアアレイ414内の実行リソースの間で共有される。グラフィックスコアアレイ414の間で共有されてグラフィックスコアアレイ414内に含まれる機能の正確なセットは、実施形態によって異なる。いくつかの実施形態では、グラフィックスコアアレイ414により広く使用される共有機能ロジック420内の特定の共有機能は、グラフィックスコアアレイ414内の共有機能ロジック416内に含まれてもよい。様々な実施形態では、グラフィックスコアアレイ414内の共有機能ロジック416は、共有機能ロジック420内の一部又は全部のロジックを含むことができる。一実施形態では、共有機能ロジック420内の全ての論理エレメントは、グラフィックスコアアレイ414の共有機能ロジック416内に複製されてもよい。一実施形態では、共有機能ロジック420は、グラフィックスコアアレイ414内の共有機能ロジック416のために除外される。
【0080】
(実行ユニット)
図5A図5Bは、ここに記載の実施形態に従ってグラフィックスプロセッサコアにおいて使用される処理エレメントのアレイを含むスレッド実行ロジック500を示す。ここでのいずれかの他の図面のエレメントと同じ参照符号(又は名称)を有する図5A図5Bのエレメントは、ここで他の箇所に記載されたものと同様の方式で動作又は機能できるが、このようなものに限定されない。図5A図5Bはスレッド実行ロジック600の概要を示しており、スレッド実行ロジック600は、図2Bの各サブコア221A~221Fで示されるハードウェアロジックを表してもよい。図5Aは、汎用グラフィックスプロセッサ内の実行ユニットを表し、図5Bは、計算アクセラレータ内で使用されてもよい実行ユニットを表す。
【0081】
図5Aに示すように、いくつかの実施形態では、スレッド実行ロジック500は、シェーダプロセッサ502と、スレッドディスパッチャ504と、命令キャッシュ506と、複数の実行ユニット508A~508Nを含むスケーラブル実行ユニットアレイと、サンプラ510と、共有ローカルメモリ511と、データキャッシュ512と、データポート514とを含む。一実施形態では、スケーラブル実行ユニットアレイは、ワークロードの計算要件に基づいて、1つ以上の実行ユニット(例えば、実行ユニット508A、508B、508C、508D~508N-1及び508Nのいずれか)を有効又は無効にすることにより、動的にスケーリングできる。一実施形態では、含まれるコンポーネントは、コンポーネントのそれぞれに連結する相互接続ファブリックを介して相互接続される。いくつかの実施形態では、スレッド実行ロジック500は、命令キャッシュ506、データポート514、サンプラ510及び実行ユニット508A~508Nのうち1つ以上を通じて、システムメモリ又はキャッシュメモリのようなメモリへの1つ以上の接続を含む。いくつかの実施形態では、各実行ユニット(例えば、508A)は、複数の同時ハードウェアスレッドを実行可能である一方で、各スレッドに対して複数のデータエレメントを並列に処理するスタンドアロンのプログラム可能汎用計算ユニットである。様々な実施形態では、実行ユニット508A~508Nのアレイは、いずれかの数の個別の実行ユニットを含むようにスケーラブルである。
【0082】
いくつかの実施形態では、実行ユニット508A~508Nはシェーダプログラムを実行するために主に使用される。シェーダプロセッサ502は、様々なシェーダプログラムを処理し、スレッドディスパッチャ504を介してシェーダプログラムに関連する実行スレッドをディスパッチできる。一実施形態では、スレッドディスパッチャは、グラフィックス及びメディアパイプラインからのスレッド開始要求を仲裁し、実行ユニット508A~508N内の1つ以上の実行ユニット上で要求されたスレッドをインスタンス化するためのロジックを含む。例えば、ジオメトリパイプラインは、処理のために頂点、テセレーション(tessellation)又はジオメトリシェーダをスレッド実行ロジックにディスパッチできる。いくつかの実施形態では、スレッドディスパッチャ504はまた、実行中のシェーダプログラムからのランタイムのスレッド生成要求を処理できる。
【0083】
いくつかの実施形態では、実行ユニット508A~508Nは、グラフィックスライブラリ(例えば、Direct 3D及びOpenGL)からのシェーダプログラムが最小限の変換で実行されるように、多くの標準的な3Dグラフィックスシェーダ命令のネイティブサポートを含む命令セットをサポートする。実行ユニットは、頂点及びジオメトリ処理(例えば、頂点プログラム、ジオメトリプログラム、頂点シェーダ)、ピクセル処理(例えば、ピクセルシェーダ、フラグメントシェーダ)及び汎用処理(例えば、計算及びメディアシェーダ)をサポートする。実行ユニット508A~508Nのそれぞれは、複数発行(multi-issue)の単一命令複数データ(single instruction multiple data, SIMD)実行が可能であり、マルチスレッド演算は、より高い待ち時間のメモリアクセスに直面したときに効率的な実行環境を可能にする。各実行ユニット内の各ハードウェアスレッドは、専用の広帯域幅レジスタファイル及び関連する独立したスレッド状態を有する。実行は、整数、単精度及び倍精度の浮動小数点演算、SIMD分岐能力、論理演算、超越演算(transcendental operation)及び他の多様な演算が可能なパイプラインへのクロック当たりの複数発行である。メモリ又は共有機能のうち1つからのデータを待機する間に、実行ユニット508A~508N内の依存するロジックは、要求されたデータが返されるまで待機スレッドをスリープさせる。待機スレッドがスリープしている間に、ハードウェアリソースは、他のスレッドを処理するために割り当てられてもよい。例えば、頂点シェーダ演算に関連する遅延の間に、実行ユニットは、ピクセルシェーダ、フラグメントシェーダ又は他のタイプのシェーダプログラム(異なる頂点シェーダを含む)の演算を実行できる。様々な実施形態は、SIMDの使用の代替として或いはSIMDの使用に加えて、単一命令複数スレッド(Single Instruction Multiple Thread, SIMT)の使用による実行を使用するために適用できる。SIMDコア又は演算への言及はまた、SIMTに適用でき、或いは、SIMTと組み合わせてSIMDに適用できる。
【0084】
実行ユニット508A~508N内の各実行ユニットは、データエレメントのアレイに対して動作する。データエレメントの数は「実行サイズ」又は命令のチャネル数である。実行チャネルは、データエレメントのアクセス、マスキング及び命令内のフロー制御のための実行の論理単位である。チャネルの数は、特定のグラフィックスプロセッサについての物理的な算術論理ユニット(Arithmetic Logic Unit, ALU)又は浮動小数点ユニット(Floating Point Unit, FPU)の数と独立してもよい。いくつかの実施形態では、実行ユニット508A~508Nは、整数及び浮動小数点データタイプをサポートする。
【0085】
実行ユニット命令セットはSIMD命令を含む。様々なデータエレメントは、レジスタ内のパックデータ(packed data)タイプとして記憶でき、実行ユニットは、エレメントのデータサイズに基づいて様々なエレメントを処理する。例えば、256ビット幅のベクトルに対して動作するとき、ベクトルの256ビットはレジスタに記憶され、実行ユニットは、4つの別々の54ビットのパックデータエレメント(QW(Quad-Word)サイズのデータエレメント)、8つの別々の32ビットのパックデータエレメント((DW(Double Word)サイズのデータエレメント)、16個の別々の16ビットのパックデータエレメント(W(Word)サイズのデータエレメント)又は32個の別々の8ビットのデータエレメント(B(byte)サイズのデータエレメント)としてベクトルに対して動作する。しかし、異なるベクトル幅及びレジスタサイズが可能である。
【0086】
一実施形態では、1つ以上の実行ユニットは、融合EUに共通するスレッド制御ロジック(507A~507N)を有する融合実行ユニット509A~509Nに結合できる。複数のEUは、EUグループに融合できる。融合EUグループ内の各EUは、別々のSIMDハードウェアスレッドを実行するように構成できる。融合EUグループ内のEUの数は、実施形態に従って変化できる。さらに、様々なSIMD幅は、SIMD8、SIMD16及びSIMD32を含むが、これらに限定されないEU毎に実行できる。各融合グラフィックス実行ユニット509A~509Nは、少なくとも2つの実行ユニットを含む。例えば、融合実行ユニット509Aは、第1のEU508Aと、第2のEU508Bと、第1のEU508A及び第2のEU508Bに共通であるスレッド制御ロジック507Aとを含む。スレッド制御ロジック507Aは、融合グラフィックス実行ユニット509A上で実行されるスレッドを制御し、融合実行ユニット509A~509N内の各EUが共通の命令ポインタレジスタを使用して実行することを可能にする。
【0087】
1つ以上の内部命令キャッシュ(例えば、506)は、実行ユニットのためのスレッド命令をキャッシュするために、スレッド実行ロジック500に含まれる。いくつかの実施形態では、1つ以上のデータキャッシュ(例えば、512)は、スレッド実行中にスレッドデータをキャッシュするために含まれる。実行ロジック500上で実行するスレッドはまた、明示的に管理されるデータを共有ローカルメモリ511に記憶できる。いくつかの実施形態では、サンプラ510は、3D演算のためのテクスチャサンプリング及びメディア演算のためのメディアサンプリングを提供するために含まれる。いくつかの実施形態では、サンプラ510は、サンプリングされたデータを実行ユニットに提供する前に、サンプリングプロセス中にテクスチャ又はメディアデータを処理するための特殊なテクスチャ又はメディアサンプリング機能を含む。
【0088】
実行中に、グラフィックス及びメディアパイプラインは、スレッド生成及びディスパッチロジックを介してスレッド開始要求をスレッド実行ロジック500に送信する。ジオメトリックオブジェクトのグループが処理されてピクセルデータにラスタライズされると、シェーダプロセッサ502内のピクセルプロセッサロジック(例えば、ピクセルシェーダロジック、フラグメントシェーダロジック等)は、出力情報を更に計算して結果を出力面(例えば、カラーバッファ、デプスバッファ、ステンシルバッファ等)に書き込ませるために呼び出される。いくつかの実施形態では、ピクセルシェーダ又はフラグメントシェーダは、ラスタライズされたオブジェクトの間で補間されるべき様々な頂点属性の値を計算する。いくつかの実施形態では、次いで、シェーダプロセッサ502内のピクセルプロセッサロジックは、アプリケーションプログラミングインタフェース(application programming interface, API)により供給されるピクセル又はフラグメントシェーダプログラムを実行する。シェーダプログラムを実行するために、シェーダプロセッサ502は、スレッドディスパッチャ504を介してスレッドを実行ユニット(例えば、508A)にディスパッチする。いくつかの実施形態では、シェーダプロセッサ502は、メモリに記憶されたテクスチャマップ内のテクスチャデータにアクセスするために、サンプラ510内のテクスチャサンプリングロジックを使用する。テクスチャデータ及び入力ジオメトリデータに対する算術演算は、各ジオメトリックフラグメントについてピクセルカラーデータを計算するか、或いは、更なる処理から1つ以上のピクセルを廃棄する。
【0089】
いくつかの実施形態では、データポート514は、グラフィックスプロセッサ出力パイプライン上での更なる処理のために、スレッド実行ロジック500が処理されたデータをメモリに出力するためのメモリアクセス機構を提供する。いくつかの実施形態では、データポート514は、データポートを介してメモリアクセスのためのデータをキャッシュするために、1つ以上のキャッシュメモリ(例えば、データキャッシュ512)を含むか或いはこれに結合する。
【0090】
一実施形態では、実行ロジック500はまた、レイトレーシングアクセラレーション機能を提供できるレイトレーサ505を含むことができる。レイトレーサ505は、光線生成のための命令/機能を含むレイトレーシング命令セットをサポートできる。レイトレーシング命令セットは、図2Cにおけるレイトレーシングコア245によりサポートされるレイトレーシング命令セットと同様のものとすることができ、或いは、異なるものとすることもできる。
【0091】
図5Bは、実施形態による実行ユニット508の例示的な内部詳細を示す。グラフィックス実行ユニット508は、命令フェッチユニット537と、汎用レジスタファイルアレイ(general register file array, GRF)524と、アーキテクチャレジスタファイルアレイ(architectural register file array, ARF)526と、スレッド仲裁器522と、送信ユニット530と、分岐ユニット532と、SIMD浮動小数点ユニットのセット534と、一実施形態では専用の整数SIMD ALUのセット535とを含むことができる。GRF524及びARF526は、グラフィックス実行ユニット508においてアクティブになり得る各同時ハードウェアスレッドに関連する汎用レジスタファイル及びアーキテクチャレジスタファイルのセットを含む。一実施形態では、スレッド毎のアーキテクチャ状態はARF526において維持される一方で、スレッド実行中に使用されるデータはGRF524に記憶される。各スレッドについての命令ポインタを含む各スレッドの実行状態は、ARF526内のスレッド固有レジスタに保持できる。
【0092】
一実施形態では、グラフィックス実行ユニット508は、同時マルチスレッディング(Simultaneous Multi-Threading, SMT)と細粒度インターリーブマルチスレッディング(Interleaved Multi-Threading, IMT)との組み合わせであるアーキテクチャを有する。アーキテクチャは、同時スレッドの目標数及び実行ユニット当たりのレジスタ数に基づいて、設計時に微調整可能なモジュール式構成を有し、実行ユニットリソースは、複数の同時スレッドを実行するために使用されるロジックの間で分割される。グラフィックス実行ユニット508により実行され得る論理スレッドの数はハードウェアスレッドの数に限定されず、複数の論理スレッドが各ハードウェアスレッドに割り当てられることができる。
【0093】
一実施形態では、グラフィックス実行ユニット508は、それぞれ異なる命令でもよい複数の命令を同時発行できる。グラフィックス実行ユニットスレッド508のスレッド仲裁器522は、実行のために、送信ユニット530、分岐ユニット532又はSIMD FPU534のうち1つに命令をディスパッチできる。各実行スレッドは、GRF524内の128個の汎用レジスタにアクセスでき、各レジスタは32バイトを記憶でき、32ビットのデータエレメントのSIMDの8エレメントのベクトルとしてアクセス可能である。一実施形態では、各実行ユニットスレッドは、GRF524内の4Kバイトへのアクセスを有するが、実施形態はこれに限定されず、他の実施形態では、より大きい或いはより少ないレジスタリソースが提供されてもよい。一実施形態では、グラフィックス処理ユニット508は、計算演算を独立して実行できる7つのハードウェアスレッドに分割されるが、実行ユニット当たりのスレッドの数はまた、実施形態に従って変化できる。例えば、一実施形態では、16個までのハードウェアスレッドがサポートされる。7つのスレッドが4Kバイトにアクセスし得る実施形態では、GRF524は合計28Kバイトを記憶できる。16個のスレッドが4Kバイトにアクセスし得る場合、GRF524は合計64Kバイトを記憶できる。柔軟なアドレス指定モードは、レジスタが一緒にアドレス指定されて、より広いレジスタを効果的に構築したり或いはストライドされた矩形ブロックデータ構造を表したりすることを可能にできる。
【0094】
一実施形態では、メモリ演算、サンプラ演算及び他のより長い待ち時間のシステム通信は、送信ユニット530を通過するメッセージにより実行される「送信」命令を介してディスパッチされる。一実施形態では、分岐命令は、SIMD発散(divergence)及び最終的な収束を実現するために、専用の分岐ユニット532にディスパッチされる。
【0095】
一実施形態では、グラフィックス実行ユニット508は、浮動小数点演算を実行するための1つ以上のSIMD浮動小数点ユニット(floating point unit, FPU)534を含む。一実施形態では、FPU534はまた、整数計算をサポートする。一実施形態では、FPU534は、M個までの32ビット浮動小数点(又は整数)演算をSIMD実行でき、或いは、2M個までの16ビット整数又は16ビット浮動小数点演算をSIMD実行できる。一実施形態では、FPUのうち少なくとも1つは、高スループット超越数値演算関数及び倍精度54ビット浮動小数点をサポートする拡張数値演算能力を提供する。いくつかの実施形態では、8ビット整数SIMD ALU535のセットも存在し、機械学習計算に関連する演算を実行するために特に最適化されてもよい。
【0096】
一実施形態では、グラフィックス実行ユニット508の複数のインスタンスのアレイは、グラフィックスサブコアグループ化(例えば、サブスライス)でインスタンス化できる。スケーラビリティのために、製品アーキテクトは、サブコアグループ当たりの正確な数の実行ユニットを選択できる。一実施形態では、実行ユニット508は、複数の実行チャネルの間で命令を実行できる。更なる実施形態では、グラフィックス実行ユニット508上で実行される各スレッドは、異なるチャネル上で実行される。
【0097】
図6は、一実施形態による更なる実行ユニット600を示す。実行ユニット600は、例えば、図3Cのような計算エンジンタイル340A~340Dで使用するための計算最適化された実行ユニットでもよいが、このようなものに限定されない。また、図3Bのようなグラフィックスエンジンタイル310A~310Dにおいて、実行ユニット600の変形が使用されてもよい。一実施形態では、実行ユニット600は、スレッド制御ユニット601と、スレッド状態ユニット602と、命令フェッチ/プリフェッチユニット603と、命令復号ユニット604とを含む。実行ユニット600は、実行ユニット内でハードウェアスレッドに割り当てられることができるレジスタを記憶するレジスタファイル606を更に含む。実行ユニット600は、送信ユニット607と、分岐ユニット608とを更に含む。一実施形態では、送信ユニット607及び分岐ユニット608は、図5Bのグラフィックス実行ユニット508の送信ユニット530及び分岐ユニット532と同様に動作できる。
【0098】
実行ユニット600はまた、複数の異なるタイプの機能ユニットを含む計算ユニット610を含む。一実施形態では、計算ユニット610は、算術論理ユニットのアレイを含むALUユニット611を含む。ALUユニット611は、64ビット、32ビット及び16ビットの整数及び浮動小数点演算を実行するように構成できる。整数及び浮動小数点演算は同時に実行されてもよい。計算ユニット610はまた、シストリックアレイ(systolic array)612と、数値演算ユニット613とを含むことができる。シストリックアレイ612は、シストリックにベクトル又は他のデータ並列演算を実行するために使用できるデータ処理ユニットのW幅及びD深度のネットワークを含む。一実施形態では、シストリックアレイ612は、行列ドット積演算のような行列演算を実行するように構成できる。一実施形態では、シストリックアレイ612は、16ビット浮動小数点演算と、8ビット及び4ビット整数演算とをサポートする。一実施形態では、シストリックアレイ612は、機械学習演算をアクセラレーションするように構成できる。このような実施形態では、シストリックアレイ612は、bfloat 16ビット浮動小数点フォーマットをサポートするように構成できる。一実施形態では、数値演算ユニット613は、ALUユニット611よりも効率的で低電力の方式で特定のサブセットの数値演算を実行するために含まれることができる。数値演算ユニット613は、他の実施形態(例えば、図4の共有機能論理420の数値演算ロジック422)により提供されるグラフィックス処理エンジンの共有機能ロジック内に見出され得る数値演算ロジックの変形を含むことができる。一実施形態では、数値演算ユニット613は、32ビット及び64ビットの浮動小数点演算を実行するように構成できる。
【0099】
スレッド制御ユニット601は、実行ユニット内のスレッドの実行を制御するためのロジックを含む。スレッド制御ユニット601は、実行ユニット600内のスレッドの実行を開始、停止及びプリエンプトするためのスレッド仲裁ロジックを含むことができる。スレッド状態ユニット602は、実行ユニット600上で実行するために割り当てられたスレッドについてのスレッド状態を記憶するために使用できる。実行ユニット600内にスレッド状態を記憶することは、これらのスレッドがブロック又はアイドルになったときに、スレッドの迅速なプリエンプションを可能にする。命令フェッチ/プリフェッチユニット603は、より高いレベルの実行ロジックの命令キャッシュ(例えば、図5Aのような命令キャッシュ506)から命令をフェッチできる。命令フェッチ/プリフェッチユニット603はまた、現在実行中のスレッドの分析に基づいて命令キャッシュにロードされる命令についてプリフェッチ要求を発行できる。命令復号ユニット604は、計算ユニットにより実行される命令を復号するために使用できる。一実施形態では、命令復号ユニット604は、複雑な命令を構成要素のマイクロ演算に復号するための二次復号器として使用できる。
【0100】
実行ユニット600は、実行ユニット600上で実行するハードウェアスレッドにより使用できるレジスタファイル606を更に含む。レジスタファイル606内のレジスタは、実行ユニット600の計算ユニット610内で複数の同時スレッドを実行するために使用されるロジックの間で分割できる。グラフィックス実行ユニット600により実行され得る論理スレッドの数は、ハードウェアスレッドの数に限定されず、複数の論理スレッドが各ハードウェアスレッドに割り当てられることができる。レジスタファイル606のサイズは、サポートされるハードウェアスレッドの数に基づいて、実施形態の間で変化できる。一実施形態では、レジスタをハードウェアスレッドに動的に割り当てるために、レジスタのリネームが使用されてもよい。
【0101】
図7は、いくつかの実施形態によるグラフィックスプロセッサ命令フォーマット700を示すブロック図である。1つ以上の実施形態では、グラフィックスプロセッサ実行ユニットは、複数のフォーマットの命令を有する命令セットをサポートする。実線のボックスは、一般的に実行ユニット命令に含まれるコンポーネントを示し、破線は、任意選択であるか或いは命令のサブセットにのみ含まれるコンポーネントを含む。いくつかの実施形態では、記載及び図示される命令フォーマット700は、命令が処理されると命令復号から生じるマイクロ演算とは対照的に、実行ユニットに供給される命令であるという点でマクロ命令である。
【0102】
いくつかの実施形態では、グラフィックスプロセッサ実行ユニットは、128ビット命令フォーマット710の命令をネイティブにサポートする。64ビットコンパクト命令フォーマット730は、選択された命令、命令オプション及びオペランドの数に基づいて、いくつかの命令に対して利用可能である。ネイティブの128ビット命令フォーマット710は、全ての命令オプションへのアクセスを提供する一方で、いくつかのオプション及び演算は、64ビットフォーマット730で制限される。64ビットフォーマット730で利用可能なネイティブ命令は、実施形態によって変化する。いくつかの実施形態では、命令は、インデックスフィールド713内のインデックス値のセットを部分的に使用してコンパクト化される。実行ユニットハードウェアは、インデックス値に基づいてコンパクト化テーブルのセットを参照し、128ビット命令フォーマット710のネイティブ命令を再構築するためにコンパクト化テーブルの出力を使用する。他のサイズ及びフォーマットの命令も使用できる。
【0103】
各フォーマットについて、命令オペコード712は、実行ユニットが実行すべき演算を定義する。実行ユニットは、各オペランドの複数のデータエレメントの間で各命令を並列に実行する。例えば、加算命令に応じて、実行ユニットは、テクスチャエレメント又はピクチャエレメントを表す各カラーチャネルの間で同時加算演算を実行する。初期設定では、実行ユニットは、オペランドの全てのデータチャネルの間で各命令を実行する。いくつかの実施形態では、命令制御フィールド714は、チャネル選択(例えば、予測)及びデータチャネル順序(例えば、スウィズル(swizzle))のような特定の実行オプションの制御を可能にする。128ビット命令フォーマット710における命令については、execサイズのフィールド716は、並列に実行されるデータチャネルの数を制限する。いくつかの実施形態では、execサイズのフィールド716は、64ビットのコンパクト命令フォーマット730での使用には利用可能ではない。
【0104】
いくつかの実行ユニット命令は、2つのソースオペランド(source operand)、すなわち、src0 720、src1 722と、1つのデスティネーション(destination)718とを含む3つまでのオペランドを有する。いくつかの実施形態では、実行ユニットは、デュアルデスティネーション命令をサポートし、デスティネーションのうち1つが暗示される。データ操作命令は、第3のソースオペランド(例えば、SRC2 724)を有することができ、命令オペコード712は、ソースオペランドの数を決定する。命令の最後のソースオペランドは、命令と共に渡される即値の(例えば、ハードコードされた)値とすることができる。
【0105】
いくつかの実施形態では、128ビット命令フォーマット710は、例えば、直接レジスタアドレス指定モードが使用されるか間接レジスタアドレス指定モードが使用されるかを指定するアクセス/アドレスモードフィールド726を含む。直接レジスタアドレス指定モードが使用されるとき、1つ以上のオペランドのレジスタアドレスは、命令内のビットにより直接提供される。
【0106】
いくつかの実施形態では、128ビット命令フォーマット710は、命令のアドレスモード及び/又はアクセスモードを指定するアクセス/アドレスモードフィールド726を含む。一実施形態では、アクセスモードは、命令のためのデータアクセスアライメントを定義するために使用される。いくつかの実施形態は、16バイトアライメントされたアクセスモード及び1バイトアライメントされたアクセスモードを含むアクセスモードをサポートし、アクセスモードのバイトアライメントは命令オペランドのアクセスアライメントを決定する。例えば、第1のモードでは、命令は、ソース及びデスティネーションオペランドのためにバイトアライメントされたアドレス指定を使用してもよく、第2のモードでは、命令は、全てのソース及びデスティネーションオペランドのために16バイトアライメントされたアドレス指定を使用してもよい。
【0107】
一実施形態では、アクセス/アドレスモードフィールド726のアドレスモード部分は、命令が直接アドレス指定を使用するか間接アドレス指定を使用するかを決定する。直接レジスタアドレス指定モードが使用されるとき、命令内のビットは、1つ以上のオペランドのレジスタアドレスを直接提供する。間接レジスタアドレス指定モードが使用されるとき、1つ以上のオペランドのレジスタアドレスは、アドレスレジスタ値及び命令内のアドレス即値フィールドに基づいて計算されてもよい。
【0108】
いくつかの実施形態では、命令は、オペコード復号740を簡略化するために、オペコード712のビットフィールドに基づいてグループ化される。8ビットのオペコードでは、ビット4、5及び6は、実行ユニットがオペコードのタイプを決定することを可能にする。図示の正確なオペコードのグループ化は、単なる例である。いくつかの実施形態では、移動及びロジックオペコードグループ742は、データ移動及びロジック命令(例えば、移動(mov)、比較(cmp))を含む。いくつかの実施形態では、移動及びロジックグループ742は、5つの最上位ビット(most significant bit, MSB)を共有し、移動(mov)命令は0000xxxxbの形式であり、ロジック命令は0001xxxbの形式である。フロー制御命令グループ744(例えば、呼び出し、ジャンプ(jmp))は0010xxxxb(例えば、0x20)の形式の命令を含む。多様な命令グループ746は、0011xxxxb(例えば、0x30)の形式の同期命令(例えば、待機、送信)を含む命令の混合を含む。並列数値演算命令グループ748は、0100xxxxb(例えば、0x40)の形式の、コンポーネント毎の算術命令(例えば、加算、乗算(mul))を含む。並列数値演算グループ748は、データチャネルの間で並列に算術演算を実行する。ベクトル数値演算グループ750は、0101xxxxb(例えば、0x50)の形式の算術命令(例えば、dp4)を含む。ベクトル数値演算グループは、ベクトルオペランドに対するドット積計算のような算術を実行する。一実施形態では、図示のオペコード復号740は、実行ユニットのどの部分が復号された命令を実行するために使用されるかを決定するために使用できる。例えば、いくつかの命令は、シストリックアレイにより実行されるシストリック命令として指定されてもよい。レイトレーシング命令(図示せず)のような他の命令は、実行ロジックのスライス又はパーティション内のレイトレーシングコア又はレイトレーシングロジックに経路設定できる。
【0109】
(グラフィックスパイプライン)
図8は、グラフィックスプロセッサ800の他の実施形態のブロック図である。いずれかの他の図面のエレメントと同じ参照符号(又は名称)を有する図8のエレメントは、ここで他の箇所に記載されたものと同様の方式で動作又は機能できるが、これらに限定されない。
【0110】
いくつかの実施形態では、グラフィックスプロセッサ800は、ジオメトリパイプライン820と、メディアパイプライン830と、ディスプレイエンジン840と、スレッド実行ロジック850と、レンダリング出力パイプライン870とを含む。いくつかの実施形態では、グラフィックスプロセッサ800は、1つ以上の汎用処理コアを含むマルチコア処理システム内のグラフィックスプロセッサである。グラフィックスプロセッサは、1つ以上の制御レジスタ(図示せず)へのレジスタ書き込みにより、或いはリング相互接続802を介したグラフィックスプロセッサ800に発行されるコマンドを介して制御される。いくつかの実施形態では、リング相互接続802は、グラフィックスプロセッサ800を、他のグラフィックスプロセッサ又は汎用プロセッサのような他の処理コンポーネントに結合する。リング相互接続802からのコマンドは、ジオメトリパイプライン820又はメディアパイプライン830の個々のコンポーネントに命令を供給するコマンドストリーマ803により解釈される。
【0111】
いくつかの実施形態では、コマンドストリーマ803は、メモリから頂点データを読み取り、コマンドストリーマ803により提供される頂点処理コマンドを実行する頂点フェッチ器805の動作を指示する。いくつかの実施形態では、頂点フェッチ器805は頂点データを頂点シェーダ807に提供し、頂点シェーダ807は、各頂点への座標空間変換及び照明演算を実行する。いくつかの実施形態では、頂点フェッチ器805及び頂点シェーダ807は、スレッドディスパッチャ831を介して実行スレッドを実行ユニット852A~852Bにディスパッチすることにより頂点処理命令を実行する。
【0112】
いくつかの実施形態では、実行ユニット852A~852Bは、グラフィックス及びメディア演算を実行するための命令セットを有するベクトルプロセッサのアレイである。いくつかの実施形態では、実行ユニット852A~852Bは、各アレイに特有であるか或いはアレイの間で共有される、取り付けられたL1キャッシュ851を有する。キャッシュは、データキャッシュ、命令キャッシュ、又は異なるパーティションにおいてデータ及び命令を含むように区分された単一のキャッシュとして構成できる。
【0113】
いくつかの実施形態では、ジオメトリパイプライン820は、3Dオブジェクトのハードウェアアクセラレーションされたテセレーションを実行するためのテセレーションコンポーネントを含む。いくつかの実施形態では、プログラム可能ハルシェーダ(programmable hull shader)811がテセレーション動作を構成する。プログラム可能ドメインシェーダ817は、テセレーション出力のバックエンド評価を提供する。テセレータ813は、ハルシェーダ811の方向で動作し、ジオメトリパイプライン820への入力として提供される粗いジオメトリックモデルに基づいて、詳細なジオメトリックオブジェクトのセットを生成するための特殊目的のロジックを含む。いくつかの実施形態では、テセレーションが使用されない場合、テセレーションコンポーネント(例えば、ハルシェーダ811、テセレータ813、及びドメインシェーダ817)はバイパスできる。
【0114】
いくつかの実施形態では、完全なジオメトリックオブジェクトは、実行ユニット852A~852Bにディスパッチされた1つ以上のスレッドを介してジオメトリシェーダ819により処理でき、或いは、クリッパ829に直接進むことができる。いくつかの実施形態では、ジオメトリシェーダは、グラフィックスパイプラインの前の段階のように頂点又は頂点のパッチではなく、全体のジオメトリックオブジェクトに対して動作する。テセレーションが無効にされた場合、ジオメトリシェーダ819は頂点シェーダ807からの入力を受信する。いくつかの実施形態では、ジオメトリシェーダ819は、テセレーションユニットが無効にされた場合にジオメトリテセレーションを実行するように、ジオメトリシェーダプログラムによりプログラム可能である。
【0115】
ラスタライズの前に、クリッパ829は頂点データを処理する。クリッパ829は、固定機能クリッパ、又はクリッピング及びジオメトリシェーダ機能を有するプログラム可能クリッパでもよい。いくつかの実施形態では、レンダリング出力パイプライン870内のラスタライザ及びデプステストコンポーネント873は、ジオメトリックオブジェクトをピクセル毎の表現に変換するためにピクセルシェーダをディスパッチする。いくつかの実施形態では、ピクセルシェーダロジックは、スレッド実行ロジック850に含まれる。いくつかの実施形態では、アプリケーションは、ラスタライザ及びデプステストコンポーネント873をバイパスし、ストリーム出力ユニット823を介してラスタライズされていない頂点データにアクセスできる。
【0116】
グラフィックスプロセッサ800は、相互接続バス、相互接続ファブリック、又はプロセッサの主要なコンポーネントの間でデータ及びメッセージを通過させる他の相互接続機構を有する。いくつかの実施形態では、実行ユニット852A~852B及び関連する論理ユニット(例えば、L1キャッシュ851、サンプラ854、テクスチャキャッシュ858等)は、メモリアクセスを実行して、プロセッサのレンダリング出力パイプラインコンポーネントと通信するために、データポート856を介して相互接続する。いくつかの実施形態では、サンプラ854、キャッシュ851、858及び実行ユニット852A~852Bは、別個のメモリアクセスパスをそれぞれ有する。一実施形態では、テクスチャキャッシュ858はまた、サンプラキャッシュとして構成できる。
【0117】
いくつかの実施形態では、レンダリング出力パイプライン870は、頂点ベースのオブジェクトを関連するピクセルベースの表現に変換するラスタライザ及びデプステストコンポーネント873を含む。いくつかの実施形態では、ラスタライザロジックは、固定機能トライアングル及び直線ラスタライズを実行するためのウインドウ/マスクユニットを含む。関連するレンダリングキャッシュ878及びデプスキャッシュ879もまた、いくつかの実施形態では利用可能である。ピクセル演算コンポーネント877は、データに対してピクセルベースの演算を実行するが、いくつかの例では、2D演算に関連するピクセル演算(例えば、ブレンドを用いたビットブロック画像転送)は、2Dエンジン841により実行されるか、或いは、表示時間においてオーバレイ表示面を使用してディスプレイコントローラ843により置き換えられる。いくつかの実施形態では、共有L3キャッシュ875は、全てのグラフィックスコンポーネントに利用可能であり、主システムメモリを使用することなくデータの共有を可能にする。
【0118】
いくつかの実施形態では、グラフィックスプロセッサメディアパイプライン830は、メディアエンジン837と、ビデオフロントエンド834とを含む。いくつかの実施形態では、ビデオフロントエンド834は、コマンドストリーマ803からパイプラインコマンドを受信する。いくつかの実施形態では、メディアパイプライン830は、別個のコマンドストリーマを含む。いくつかの実施形態では、ビデオフロントエンド834は、コマンドをメディアエンジン837に送信する前にメディアコマンドを処理する。いくつかの実施形態では、メディアエンジン837は、スレッドディスパッチャ831を介してスレッド実行ロジック850にディスパッチするスレッドを生成するためのスレッド生成機能を含む。
【0119】
いくつかの実施形態では、グラフィックスプロセッサ800は、ディスプレイエンジン840を含む。いくつかの実施形態では、ディスプレイエンジン840は、プロセッサ800の外部にあり、リング相互接続802又は他の相互接続バス若しくはファブリックを介してグラフィックスプロセッサと結合する。いくつかの実施形態では、ディスプレイエンジン840は、2Dエンジン841と、ディスプレイコントローラ843とを含む。いくつかの実施形態では、ディスプレイエンジン840は、3Dパイプラインから独立して動作可能な特殊目的のロジックを含む。いくつかの実施形態では、ディスプレイコントローラ843はディスプレイデバイス(図示せず)と結合し、ディスプレイデバイスは、ラップトップコンピュータにおけるもののようなシステム統合ディスプレイデバイス、又はディスプレイデバイスコネクタを介して取り付けられた外部ディスプレイデバイスでもよい。
【0120】
いくつかの実施形態では、ジオメトリパイプライン820及びメディアパイプライン830は、複数のグラフィックス及びメディアプログラミングインタフェースに基づいて動作を実行するように構成可能であり、いずれか1つのアプリケーションプログラミングインタフェース(application programming interface, API)に特有ではない。いくつかの実施形態では、グラフィックスプロセッサのためのドライバソフトウェアは、特定のグラフィックス又はメディアライブラリに特有のAPIコールを、グラフィックスプロセッサにより処理できるコマンドに変換する。いくつかの実施形態では、全てがKhronos GroupからのOpenGL(Open Graphics Library)、OpenCL(Open Computing Language)及び/又はVulkanグラフィックス及び計算APIに対するサポートが提供される。いくつかの実施形態では、Microsoft CorporationからのDirect3Dライブラリに対するサポートも提供されてもよい。いくつかの実施形態では、これらのライブラリの組み合せがサポートされてもよい。OpenCV(Open Source Computer Vision Library)に対するサポートも提供されてもよい。将来のAPIのパイプラインからグラフィックスプロセッサのパイプラインにマッピングができる場合、互換性のある3Dパイプラインを有する将来のAPIもサポートされる。
【0121】
(グラフィックスパイプラインのプログラミング)
図9Aは、いくつかの実施形態によるグラフィックスプロセッサコマンドフォーマット900を示すブロック図である。図9Bは、実施形態によるグラフィックスプロセッサコマンドシーケンス910を示すブロック図である。図9Aの実線のボックスは、一般的にグラフィックスコマンドに含まれるコンポーネントを示し、破線は、任意選択であるか或いはグラフィックスコマンドのサブセットにのみ含まれるコンポーネントを含む。図9Aの例示的なグラフィックスプロセッサコマンドフォーマット900は、クライアント902、コマンド演算コード(オペコード)904及びコマンドのデータ906を識別するためのデータフィールドを含む。サブオペコード905及びコマンドサイズ908もまた、いくつかのコマンドに含まれる。
【0122】
いくつかの実施形態では、クライアント902は、コマンドデータを処理するグラフィックスデバイスのクライアントユニットを指定する。いくつかの実施形態では、グラフィックスプロセッサコマンドパーサは、コマンドの更なる処理を条件付けしてコマンドデータを適切なクライアントユニットに経路設定するために、各コマンドのクライアントフィールドを検査する。いくつかの実施形態では、グラフィックスプロセッサクライアントユニットは、メモリインタフェースユニットと、レンダリングユニットと、2Dユニットと、3Dユニットと、メディアユニットとを含む。各クライアントユニットは、コマンドを処理する対応する処理パイプラインを有する。コマンドがクライアントユニットにより受信されると、クライアントユニットは、実行すべき動作を決定するために、オペコード904を読み取り、存在する場合には、サブオペコード905を読み取る。クライアントユニットは、データフィールド906内の情報を使用してコマンドを実行する。いくつかのコマンドでは、コマンドのサイズを指定するために、明示的なコマンドサイズ908が想定される。いくつかの実施形態では、コマンドパーサは、コマンドオペコードに基づいて、コマンドのうち少なくともいくつかのサイズを自動的に決定する。いくつかの実施形態では、コマンドは、ダブルワードの倍数を介してアライメントされる。他のコマンドフォーマットも使用できる。
【0123】
図9Bにおけるフロー図は、例示的なグラフィックスプロセッサコマンドシーケンス910を示す。いくつかの実施形態では、グラフィックスプロセッサの実施形態を特徴とするデータ処理システムのソフトウェア又はファームウェアは、グラフィックス演算のセットを設定して実行して終了するように示される或るバージョンのコマンドシーケンスを使用する。サンプルのコマンドシーケンスが例のみの目的で図示及び記載されるが、実施形態はこれらの特定のコマンド又はこのコマンドシーケンスに限定されない。さらに、コマンドは、グラフィックスプロセッサが少なくとも部分的に同時にコマンドのシーケンスを処理するように、コマンドシーケンス内でコマンドのバッチとして発行されてもよい。
【0124】
いくつかの実施形態では、グラフィックスプロセッサコマンドシーケンス910は、パイプラインフラッシュ(pipeline plush)コマンド912で始まり、いずれかのアクティブなグラフィックスパイプラインに、パイプラインについて現在保留中のコマンドを完了させしてもよい。いくつかの実施形態では、3Dパイプライン922及びメディアパイプライン924は、同時に動作しない。パイプラインフラッシュは、アクティブなグラフィックスパイプラインに保留中のコマンドを完了させるために実行される。パイプラインフラッシュに応じて、グラフィックスプロセッサのコマンドパーサは、アクティブな描画エンジンが保留中の演算を完了して関連する読み取りキャッシュが無効になるまで、コマンド処理を一時停止する。任意選択で、「ダーティ(dirty)」とマーキングされたレンダリングキャッシュ内のいずれかのデータがメモリにフラッシュできる。いくつかの実施形態では、パイプラインフラッシュコマンド912は、パイプライン同期のために、或いは、グラフィックスプロセッサを低電力状態にする前に使用できる。
【0125】
いくつかの実施形態では、パイプライン選択コマンド913は、グラフィックスプロセッサがパイプラインの間を明示的に切り替えることをコマンドシーケンスが要求するときに使用される。いくつかの実施形態では、パイプライン選択コマンド913は、コンテキストが双方のパイプラインに対してコマンドを発行するものでない限り、パイプラインコマンドを発行する前に実行コンテキスト内で一回のみ必要とされる。いくつかの実施形態では、パイプラインフラッシュコマンド912は、パイプライン選択コマンド913を介したパイプラインの切り替えの直前に必要とされる。
【0126】
いくつかの実施形態では、パイプライン制御コマンド914は、演算のためにグラフィックスパイプラインを構成し、3Dパイプライン922及びメディアパイプライン924をプログラムするために使用される。いくつかの実施形態では、パイプライン制御コマンド914は、アクティブなパイプラインについてのパイプライン状態を構成する。一実施形態では、パイプライン制御コマンド914は、コマンドのバッチを処理する前に、パイプライン同期のために、且つアクティブなパイプライン内の1つ以上のキャッシュメモリからデータをクリアするために使用される。
【0127】
いくつかの実施形態では、リターンバッファ状態コマンド916は、データを書き込むためにそれぞれのパイプラインについてリターンバッファのセットを構成するために使用される。いくつかのパイプライン演算は、処理中に演算が中間データを書き込む1つ以上のリターンバッファの割り当て、選択又は構成を必要とする。いくつかの実施形態では、グラフィックスプロセッサはまた、出力データを記憶し、スレッド間通信を実行するために1つ以上のリターンバッファを使用する。いくつかの実施形態では、リターンバッファ状態916は、パイプライン演算のセットに使用するリターンバッファのサイズ及び数を選択することを含む。
【0128】
コマンドシーケンス内の残りのコマンドは、演算についてのアクティブなパイプラインに基づいて異なる。パイプラインの決定920に基づいて、コマンドシーケンスは、3Dパイプライン状態930で始まる3Dパイプライン922又はメディアパイプライン状態940で始まるメディアパイプライン924に調整される。
【0129】
3Dパイプライン状態930を構成するためのコマンドは、頂点バッファ状態、頂点エレメント状態、定常カラー状態、デプスバッファ状態、及び3Dプリミティブコマンドが処理される前に構成されるべき他の状態変数についての3D状態設定コマンドを含む。これらのコマンドの値は、使用中の特定の3D APIに少なくとも部分的に基づいて決定される。いくつかの実施形態では、3Dパイプライン状態930コマンドはまた、特定のパイプラインエレメントが使用されない場合に、特定のパイプラインエレメントを選択的に無効又はバイパスできる。
【0130】
いくつかの実施形態では、3Dプリミティブ932コマンドは、3Dパイプラインにより処理される3Dプリミティブをサブミットするために使用される。3Dプリミティブ932コマンドを介してグラフィックスプロセッサに渡されるコマンド及び関連するパラメータは、グラフィックスパイプライン内の頂点フェッチ機能に転送される。頂点フェッチ機能は、頂点データ構造を生成するために3Dプリミティブ932コマンドデータを使用する。頂点データ構造は1つ以上のリターンバッファに記憶される。いくつかの実施形態では、3Dプリミティブ932コマンドは、頂点シェーダを介して3Dプリミティブに対して頂点演算を実行するために使用される。頂点シェーダを処理するために、3Dパイプライン922は、シェーダ実行スレッドをグラフィックスプロセッサ実行ユニットにディスパッチする。
【0131】
いくつかの実施形態では、3Dパイプライン922は、実行934コマンド又はイベントを介してトリガされる。いくつかの実施形態では、レジスタ書き込みは、コマンド実行をトリガする。いくつかの実施形態では、実行は、コマンドシーケンス内の「go」又は「kick」コマンドを介してトリガされる。一実施形態では、コマンド実行は、グラフィックスパイプラインを通じてコマンドシーケンスをフラッシュするために、パイプライン同期コマンドを使用してトリガされる。3Dパイプラインは、3Dプリミティブについてジオメトリ処理を実行する。演算が完了すると、結果のジオメトリックオブジェクトがラスタライズされ、ピクセルエンジンが結果のピクセルを着色する。ピクセルシェーディング及びピクセルバックエンド演算を制御するための更なるコマンドもまた、これらの演算のために含まれてもよい。
【0132】
いくつかの実施形態では、グラフィックスプロセッサコマンドシーケンス910は、メディア演算を実行するときにメディアパイプライン924パスに従う。一般的に、メディアパイプライン924のためのプログラミングの特定の使用及び方式は、実行されるメディア又は計算演算に依存する。特定のメディア復号演算は、メディア復号中にメディアパイプラインにオフロードされてもよい。いくつかの実施形態では、メディアパイプラインはまたバイパスでき、メディア復号は、1つ以上の汎用処理コアにより提供されるリソースを使用して全体的に或いは部分的に実行できる。一実施形態では、メディアパイプラインはまた、汎用グラフィックスプロセッサユニット(general-purpose graphics processor unit, GPGPU)演算のためのエレメントを含み、グラフィックスプロセッサは、グラフィックスプリミティブのレンダリングに明示的に関連しない計算シェーダプログラムを使用してSIMDベクトル演算を実行するために使用される。
【0133】
いくつかの実施形態では、メディアパイプライン924は、3Dパイプライン922と同様の方式で構成される。メディアパイプライン状態940を構成するためのコマンドのセットは、メディアオブジェクトコマンド942の前にコマンドキューにディスパッチ又は配置される。いくつかの実施形態では、メディアパイプライン状態940のためのコマンドは、メディアオブジェクトを処理するために使用されるメディアパイプラインエレメントを構成するためのデータを含む。これは、符号化又は復号フォーマットのような、メディアパイプライン内のビデオ復号及びビデオ符号化ロジックを構成するためのデータを含む。いくつかの実施形態では、メディアパイプライン状態940のためのコマンドはまた、状態設定のバッチを含む「間接」状態エレメントへの1つ以上のポインタの使用をサポートする。
【0134】
いくつかの実施形態では、メディアオブジェクトコマンド942は、メディアパイプラインによる処理のために、メディアオブジェクトへのポインタを供給する。メディアオブジェクトは、処理されるべきビデオデータを含むメモリバッファを含む。いくつかの実施形態では、全てのメディアパイプライン状態は、メディアオブジェクトコマンド942を発行する前に有効でなければならない。パイプライン状態が構成され、メディアオブジェクトコマンド942がキューイングされると、メディアパイプライン924は、実行コマンド944又は同等の実行イベント(例えば、レジスタ書き込み)を介してトリガされる。次いで、メディアパイプライン924からの出力は、3Dパイプライン922又はメディアパイプライン924により提供される演算により後処理されてもよい。いくつかの実施形態では、GPGPU演算は、メディア演算と同様の方式で構成されて実行される。
【0135】
(グラフィックスソフトウェアアーキテクチャ)
図10は、いくつかの実施形態によるデータ処理システム1000のための例示的なグラフィックスソフトウェアアーキテクチャを示す。いくつかの実施形態では、ソフトウェアアーキテクチャは、3Dグラフィックスアプリケーション1010と、オペレーティングシステム1020と、少なくとも1つのプロセッサ1030とを含む。いくつかの実施形態では、プロセッサ1030は、グラフィックスプロセッサ1032と、1つ以上の汎用プロセッサコア1034とを含む。グラフィックスアプリケーション1010及びオペレーティングシステム1020は、データ処理システムのシステムメモリ1050内でそれぞれ実行する。
【0136】
いくつかの実施形態では、3Dグラフィックスアプリケーション1010は、シェーダ命令1012を含む1つ以上のシェーダプログラムを含む。シェーダ言語の命令は、Direct3Dのハイレベルシェーダ言語(High-Level Shader Language, HLSL)、OpenGLシェーダ言語(OpenGL Shader Language, GLSL)等のようなハイレベルシェーダ言語でもよい。アプリケーションはまた、汎用プロセッサコア1034による実行に適した機械言語の実行可能命令1014を含む。アプリケーションはまた、頂点データにより定義されたグラフィックスオブジェクト1016を含む。
【0137】
いくつかの実施形態では、オペレーティングシステム1020は、Microsoft CorporationからのMicrosoft(R) Windows(R)オペレーティングシステム、独自仕様のUNIX(登録商標)のようなオペレーティングシステム、又はLinux(登録商標)カーネルの変形を使用するオープンソースのUNIX(登録商標)のようなオペレーティングシステムである。オペレーティングシステム1020は、Direct3D API、OpenGL API、又はVulkan APIのようなグラフィックスAPI1022をサポートできる。Direct3D APIが使用されているとき、オペレーティングシステム1020は、HLSLのいずれかのシェーダ命令1012をローレベルのシェーダ言語にコンパイルするために、フロントエンドシェーダコンパイラ1024を使用する。コンパイルはジャストインタイム(just-in-time, JIT)コンパイルでもよく、或いは、アプリケーションはシェーダの事前コンパイルを実行できる。いくつかの実施形態では、ハイレベルのシェーダは、3Dグラフィックスアプリケーション1010のコンパイル中にローレベルのシェーダにコンパイルされる。いくつかの実施形態では、シェーダ命令1012は、Vulkan APIにより使用される或るバージョンのSPIR(Standard Portable Intermediate Representation)のような中間形式で提供される。
【0138】
いくつかの実施形態では、ユーザモードグラフィックスドライバ1026は、シェーダ命令1012をハードウェア特有の表現に変換するためのバックエンドシェーダコンパイラ1027を含む。OpenGL APIが使用されているとき、GLSLハイレベル言語のシェーダ命令1012は、コンパイルのためにユーザモードグラフィックスドライバ1026に渡される。いくつかの実施形態では、ユーザモードグラフィックスドライバ1026は、カーネルモードグラフィックスドライバ1029と通信するために、オペレーティングシステムカーネルモード機能1028を使用する。いくつかの実施形態では、カーネルモードグラフィックスドライバ1029は、コマンド及び命令をディスパッチするためにグラフィックスプロセッサ1032と通信する。
【0139】
(IPコアの実装)
少なくとも1つの実施形態の1つ以上の態様は、プロセッサのような集積回路内のロジックを表す及び/又は定義する機械読み取り可能媒体に記憶された表現コードにより実装されてもよい。例えば、機械読み取り可能媒体は、プロセッサ内の様々なロジックを表す命令を含んでもよい。機械により読み取られたとき、命令は、機械に、ここに記載の技術を実行するためのロジックを製造させてもよい。このような表現は、「IPコア」として知られており、集積回路の構造を記述するハードウェアモデルとして、有形の機械読み取り可能媒体に記憶され得る集積回路のためのロジックの再利用可能なユニットである。ハードウェアモデルは、様々な顧客又は製造施設に供給されてもよく、様々な顧客又は製造施設は、集積回路を製造する製造機械にハードウェアモデルをロードする。集積回路は、ここに記載の実施形態のうちいずれかに関連して記載される動作を実行するように製造されてもよい。
【0140】
図11Aは、実施形態に従って動作を実行するように集積回路を製造するために使用され得るIPコア開発システム1100を示すブロック図である。IPコア開発システム1100は、より大きい設計に組み込まれることができるか、或いは、全体の集積回路(例えば、SOC集積回路)を構築するために使用できる、モジュール式の再利用可能な設計を生成するために使用されてもよい。設計施設1130は、ハイレベルプログラミング言語(例えば、C/C++)でIPコア設計のソフトウェアシミュレーション1110を生成できる。ソフトウェアシミュレーション1110は、シミュレーションモデル1112を使用して、IPコアの挙動を設計、テスト及び検証するために使用できる。シミュレーションモデル1112は、機能シミュレーション、挙動シミュレーション及び/又はタイミングシミュレーションを含んでもよい。次いで、レジスタ転送レベル(register transfer level, RTL)設計1115が、シミュレーションモデル1112から作成又は合成できる。RTL設計1115は、ハードウェアレジスタの間のデジタル信号の流れをモデル化する集積回路の挙動の抽象化であり、モデル化されたデジタル信号を使用して実行される関連するロジックを含む。RTL設計1115に加えて、ロジックレベル又はトランジスタレベルでのローレベルの設計も、作成、設計又は合成されてもよい。したがって、初期設計及びシミュレーションの特定の詳細は、変化してもよい。
【0141】
RTL設計1115又は同等物は、設計機能によりハードウェアモデル1120に更に合成されてもよく、ハードウェアモデル1120はハードウェア記述言語(hardware description language, HDL)又は物理設計データの他の表現でもよい。HDLは、IPコア設計を検証するために更にシミュレーション又はテストされてもよい。IPコア設計は、不揮発性メモリ1140(例えば、ハードディスク、フラッシュメモリ又はいずれかの不揮発性記憶媒体)を使用して、第三者の製造施設1165に配送するために記憶できる。代替として、IPコア設計は、有線接続1150又は無線接続1160上で(例えば、インターネットを介して)送信されてもよい。次いで、製造設施設165は、IPコア設計に少なくとも部分的に基づく集積回路を製造してもよい。製造された集積回路は、ここに記載の少なくとも1つの実施形態に従って動作を実行するように構成できる。
【0142】
図11Bは、ここに記載のいくつかの実施形態による集積回路パッケージアセンブリ1170の断面側面図を示す。集積回路パッケージアセンブリ1170は、ここに記載の1つ以上のプロセッサ又はアクセラレータデバイスの実装を示す。パッケージアセンブリ1170は、基板1180に接続されたハードウェアロジック1172、1174の複数ユニットを含む。ロジック1172、1174は、構成可能ロジック又は固定機能ロジックのハードウェアに少なくとも部分的に実装されてもよく、ここに記載のプロセッサコア、グラフィックスプロセッサ又は他のアクセラレータデバイスのうちいずれかの1つ以上の部分を含むことができる。ロジック1172、1174の各ユニットは、半導体ダイ内に実装され、相互接続構造1173を介して基板1180と結合できる。相互接続構造1173は、ロジック1172、1174と基板1180との間で電気信号を経路設定するように構成されてもよく、バンプ(bump)又はピラー(pillar)のような相互接続を含むことができるが、これらに限定されない。いくつかの実施形態では、相互接続構造1173は、例えば、ロジック1172、1174の動作に関連する入出力(I/O)信号及び/又は電力若しくは接地信号のような電気信号を経路設定するように構成されてもよい。いくつかの実施形態では、基板1180は、エポキシベースの積層基板である。他の実施形態では、パッケージ基板1180は、他の適切なタイプの基板を含んでもよい。パッケージアセンブリ1170は、パッケージ相互接続1183を介して他の電気デバイスに接続できる。パッケージ相互接続1183は、マザーボード、他のチップセット又はマルチチップモジュールのような他の電気デバイスに電気信号を経路設定するために、基板1180の表面に結合されてもよい。
【0143】
いくつかの実施形態では、ロジック1172、1174のユニットは、ロジック1172、1174の間で電気信号を経路設定するように構成されたブリッジ1182と電気的に結合される。ブリッジ1182は、電気信号の経路を提供する高密度相互接続構造でもよい。ブリッジ1182は、ガラス又は適切な半導体材料で構成されるブリッジ基板を含んでもよい。ロジック1172、1174の間にチップ間接続を提供するために、ブリッジ基板上に電気経路設定特徴が形成できる。
【0144】
ロジック1172、1174及びブリッジ1182の2つのユニットが示されているが、ここに記載の実施形態は、1つ以上のダイ上に、より多くの論理ユニット又はより少ない論理ユニットを含んでもよい。ロジックが単一のダイに含まれるときにブリッジ1182は除外されてもよいので、1つ以上のダイは、0個以上のブリッジにより接続されてもよい。代替として、複数のダイ又は論理ユニットは、1つ以上のブリッジにより接続できる。さらに、複数の論理ユニット、ダイ及びブリッジは、三次元構成を含む他の可能な構成で互いに接続できる。
【0145】
図11Cは、基板1180(例えば、ベースダイ)に接続された複数のユニットのハードウェアロジックチップレットを含むパッケージアセンブリ1190を示す。ここに記載のグラフィックス処理ユニット、並列プロセッサ及び/又は計算アクセラレータは、別々に製造された多様なシリコンチップレットから構成できる。この文脈において、チップレットは、他のチップレットと共により大きいパッケージに組み立てられることができるロジックの別個のユニットを含む、少なくとも部分的にパッケージされた集積回路である。異なるIPコアロジックを有する多様なセットのチップレットは、単一のデバイスに組み立てられることができる。さらに、チップレットは、アクティブインターポーザ(active interposer)技術を使用してベースダイ又はベースチップレットに統合できる。ここに記載の概念は、GPU内の異なる形式のIPの間の相互接続及び通信を可能にする。IPコアは、異なるプロセス技術を使用して製造でき、製造中に構成できる。これは、特に複数のフレーバーのIPを有する大きいSoC上で、複数のIPを同じ製造プロセスに収束する複雑さを回避する。複数のプロセス技術の使用を可能にすることは、販売までの時間を改善し、複数の製品のSKUを作成するためのコスト効率の良い方法を提供する。さらに、分解されたIPは、独立してパワーゲートされやすく、所与のワークロードで使用されていないコンポーネントは電源オフが可能であり、全体の電力消費を低減する。
【0146】
ハードウェアロジックチップレットは、特殊目的のハードウェアロジックチップレット1172、ロジック又はI/Oチップレット1174及び/又はメモリチップレット1175を含むことができる。ハードウェアロジックチップレット1172及びロジック又はI/Oチップレット1174は、構成可能ロジック又は固定機能ロジックハードウェアに少なくとも部分的に実装されてもよく、ここに記載のプロセッサコア、グラフィックスプロセッサ、並列プロセッサ又は他のアクセラレータデバイスのうちいずれかの1つ以上の部分を含むことができる。メモリチップレット1175は、DRAM(例えば、GDDR、HBM)メモリ又はキャッシュ(SRAM)メモリとすることができる。
【0147】
各チップレットは、別個の半導体ダイとして製造でき、相互接続構造1173を介して基板1180と結合できる。相互接続構造1173は、基板1180内の様々なチップレットとロジックとの間で電気信号を経路設定するように構成されてもよい。相互接続構造1173は、バンプ又はピラーのような相互接続を含むことができるが、これらに限定されない。いくつかの実施形態では、相互接続構造1173は、例えば、ロジック、I/O及びメモリチップレットの動作に関連する入出力(I/O)信号及び/又は電力若しくは接地信号のような電気信号を経路設定するように構成されてもよい。
【0148】
いくつかの実施形態では、基板1180は、エポキシベースの積層基板である。他の実施形態では、基板1180は、他の適切なタイプの基板を含んでもよい。パッケージアセンブリ1190は、パッケージ相互接続1183を介して他の電気デバイスに接続できる。パッケージ相互接続1183は、マザーボード、他のチップセット又はマルチチップモジュールのような他の電気デバイスに電気信号を経路設定するために、基板1180の表面に結合されてもよい。
【0149】
いくつかの実施形態では、ロジック又はI/Oチップレット1174及びメモリチップレット1175は、ロジック又はI/Oチップレット1174とメモリチップレット1175との間で電気信号を経路設定するように構成されたブリッジ1187を介して電気的に結合できる。ブリッジ1187は、電気信号の経路を提供する高密度相互接続構造でもよい。ブリッジ1187は、ガラス又は適切な半導体材料で構成されるブリッジ基板を含んでもよい。ロジック又はI/Oチップレット1174とメモリチップレット1175との間にチップ間接続を提供するために、ブリッジ基板上に電気経路設定特徴が形成できる。ブリッジ1187は、シリコンブリッジ又は相互接続ブリッジとも呼ばれてもよい。例えば、いくつかの実施形態では、ブリッジ1187は、埋め込み式マルチダイ相互接続ブリッジ(Embedded Multi-die Interconnect Bridge, EMIB)である。いくつかの実施形態では、ブリッジ1187は、単に、1つのチップレットから他のチップレットへの直接接続でもよい。
【0150】
基板1180は、I/O1191、キャッシュメモリ1192及び他のハードウェアロジック1193のためのハードウェアコンポーネントを含むことができる。基板1180内の様々なロジックチップレットとロジック1191、1193との間の通信を可能にするために、ファブリック1185が基板1180内に埋め込まれることができる。一実施形態では、I/O1191、ファブリック1185、キャッシュ、ブリッジ及び他のハードウェアロジック1193は、基板1180の上に積層されたベースダイに統合できる。
【0151】
様々な実施形態では、パッケージアセンブリ1190は、ファブリック1185又は1つ以上のブリッジ1187により相互接続された、より少ない数又はより多い数のコンポーネント及びチップレットを含むことができる。パッケージアセンブリ1190内のチップレットは、3D又は2.5D配置で配置されてもよい。一般的に、ブリッジ構造1187は、例えば、ロジック又はI/Oチップレットとメモリチップレットとの間の点間相互接続を実現するために使用されてもよい。ファブリック1185は、様々なロジック及び/又はI/Oチップレット(例えば、チップレット1172、1174、1191、1193)を他のロジック及び/又はI/Oチップレットと相互接続するために使用できる。一実施形態では、基板内のキャッシュメモリ1192は、パッケージアセンブリ1190のためのグローバルキャッシュ、分散グローバルキャッシュの一部又はファブリック1185のための専用キャッシュとして機能できる。
【0152】
図11Dは、実施形態による交換可能チップレット1195を含むパッケージアセンブリ1194を示す。交換可能チップレット1195は、1つ以上のベースチップレット1196、1198上の標準化スロットに組み立てられることができる。ベースチップレット1196、1198は、ブリッジ相互接続1197を介して結合でき、ブリッジ相互接続1197は、ここに記載の他のブリッジ相互接続と同様のものとすることができ、例えば、EMIBでもよい。メモリチップレットはまた、ブリッジ相互接続を介してロジック又はI/Oチップレットに接続できる。I/O及びロジックチップレットは、相互接続ファブリックを介して通信できる。ベースチップレットは、ロジック又はI/O又はメモリ/キャッシュのうち1つのために標準化フォーマットの1つ以上のスロットをサポートできる。
【0153】
一実施形態では、SRAM及び電力配送回路は、ベースチップレット1196、1198のうち1つ以上に製造でき、ベースチップレット1196、1198は、ベースチップレットの上に積層された交換可能チップレット1195に対して異なるプロセス技術を使用して製造できる。例えば、ベースチップレット1196、1198は、より大きいプロセス技術を使用して製造でき、交換可能チップレットは、より小さいプロセス技術を使用して製造できる。交換可能チップレット1195のうち1つ以上は、メモリ(例えば、DRAM)チップレットでもよい。パッケージアセンブリ1194について、パッケージアセンブリ1194を使用する製品を対象とした電力及び/又は性能に基づいて、異なるメモリ密度が選択できる。さらに、異なる数のタイプの機能ユニットを有するロジックチップレットは、組立時に、製品を対象とした電力及び/又は性能に基づいて選択できる。さらに、異なるタイプのIPロジックコアを含むチップレットは、交換可能チップレットのスロットに挿入でき、異なる技術のIPブロックを混在させてマッチさせることができるハイブリッドプロセッサ設計を可能にする。
【0154】
(例示的なシステムオンチップ集積回路)
図12図14は、ここに記載の様々な実施形態に従って1つ以上のIPコアを使用して製造され得る例示的な集積回路及び関連するグラフィックスプロセッサを示す。図示のものに加えて、更なるグラフィックスプロセッサ/コア、周辺機器インタフェースコントローラ又は汎用プロセッサコアを含む、他のロジック及び回路が含まれてもよい。
【0155】
図12は、実施形態に従って1つ以上のIPコアを使用して製造され得る例示的なシステムオンチップ集積回路1200を示すブロック図である。例示的な集積回路1200は、1つ以上のアプリケーションプロセッサ1205(例えば、CPU)と、少なくとも1つのグラフィックスプロセッサ1210とを含み、画像プロセッサ1215及び/又はビデオプロセッサ1220を更に含んでもよく、これらのいずれかは、同じ或いは複数の異なる設計施設からのモジュール式IPコアでもよい。集積回路1200は、USBコントローラ1225、UARTコントローラ1230、SPI/SDIOコントローラ1235及びI2S/I2Cコントローラ1240を含む周辺機器又はバスロジックを含む。さらに、集積回路は、HDMI(登録商標)(high-definition multimedia interface)コントローラ1250及びMIPI(mobile industry processor interface)ディスプレイインタフェース1255のうち1つ以上に結合されたディスプレイデバイス1245を含むことができる。ストレージは、フラッシュメモリ及びフラッシュメモリコントローラを含むフラッシュメモリサブシステム1260により提供されてもよい。メモリインタフェースは、SDRAM又はSRAMメモリデバイスへのアクセスのために、メモリコントローラ1265を介して提供されてもよい。いくつかの集積回路は、埋め込み式セキュリティエンジン1270を更に含む。
【0156】
図13図14は、ここに記載の実施形態に従ってSoC内で使用される例示的なグラフィックスプロセッサを示すブロック図である。図13Aは、実施形態に従って1つ以上のIPコアを使用して製造され得るシステムオンチップ集積回路の例示的なグラフィックスプロセッサ1310を示す。図13Bは、実施形態に従って1つ以上のIPコアを使用して製造され得るシステムオンチップ集積回路の更なる例示的なグラフィックスプロセッサ1340を示す。図13Aのグラフィックスプロセッサ1310は、低電力グラフィックスプロセッサコアの例である。図13Bのグラフィックスプロセッサ1340は、高性能グラフィックスプロセッサコアの例である。グラフィックスプロセッサ1310、1340のそれぞれは、図12のグラフィックスプロセッサ1210の変形とすることができる。
【0157】
図13に示すように、グラフィックスプロセッサ1310は、頂点プロセッサ1305と、1つ以上のフラグメントプロセッサ1315A~1315N(例えば、1315A、1315B、1315C、1315D~1315N-1及び1315N)とを含む。グラフィックスプロセッサ1310は、頂点プロセッサ1305が頂点シェーダプログラムについての動作を実行するように最適化される一方で、1つ以上のフラグメントプロセッサ1315A~1315Nがフラグメント又はピクセルシェーダプログラムについてのフラグメント(例えば、ピクセル)シェーダ動作を実行するように、別々のロジックを介して異なるシェーダプログラムを実行できる。頂点プロセッサ1305は、3Dグラフィックスパイプラインの頂点処理段階を実行し、プリミティブ及び頂点データを生成する。フラグメントプロセッサ1315A~1315Nは、ディスプレイデバイスに表示されるフレームバッファを生成するために、頂点プロセッサ1305により生成されたプリミティブ及び頂点データを使用する。一実施形態では、フラグメントプロセッサ1315A~1315Nは、OpenGL APIにおいて提供されているようなフラグメントシェーダプログラムを実行するように最適化され、フラグメントシェーダプログラムは、Direct 3D APIにおいて提供されているようなピクセルシェーダプログラムと同様の動作を実行するために使用されてもよい。
【0158】
グラフィックスプロセッサ1310は、1つ以上のメモリ管理ユニット(memory management unit, MMU)1320A~1320Bと、キャッシュ1325A~1325Bと、回路相互接続1330A~1330Bとを更に含む。1つ以上のMMU1320A~1320Bは、頂点プロセッサ1305及び/又はフラグメントプロセッサ1315A~1315Nを含むグラフィックスプロセッサ1310のための仮想対物理アドレスマッピングを提供し、これは、1つ以上のキャッシュ1325A~1325Bに記憶された頂点又は画像/テクスチャデータに加えて、メモリに記憶された頂点又は画像/テクスチャデータを参照してもよい。一実施形態では、1つ以上のMMU1320A~1320Bは、各プロセッサ1205~1220が共有又は統一仮想メモリシステムに参加できるように、図12の1つ以上のアプリケーションプロセッサ1205、画像プロセッサ1215及び/又はビデオプロセッサ1220に関連する1つ以上のMMUを含む、システム内の他のMMUと同期してもよい。1つ以上の回路相互接続1330A~1330Bは、実施形態に従って、グラフィックスプロセッサ1310がSoCの内部バス又は直接接続を介してSoC内の他のIPコアとインタフェース接続することを可能にする。
【0159】
図14に示すように、グラフィックスプロセッサ1340は、図13のグラフィックスプロセッサ1310の1つ以上のMMU1320A~1320B、キャッシュ1325A~1325B及び回路相互接続1330A~1330Bを含む。グラフィックスプロセッサ1340は、1つ以上のシェーダコア1355A~1355N(例えば、1455A、1355B、1355C、1355D、1355E、1355F~1355N-1及び1355N)を含み、これは、単一のコア又はタイプのコアが頂点シェーダ、フラグメントシェーダ及び/又は計算シェーダを実装するためのシェーダプログラムコードを含む、全てのタイプのプログラム可能シェーダコードを実行できる統一されたシェーダコアアーキテクチャを提供する。存在するシェーダコアの正確な数は、実施形態及び実装の間で異なる可能性がある。さらに、グラフィックスプロセッサ1340は、実行スレッドを1つ以上のシェーダコア1355A~1355Nにディスパッチするためのスレッドディスパッチャとして機能するコア間タスクマネージャ1345と、タイルベースのレンダリングのタイル演算をアクセラレーションするタイルユニット1358とを含み、シーンのレンダリング演算は、例えば、シーン内の局所空間コヒーレンスを利用するため或いは内部キャッシュの使用を最適化するために、画像空間において細分化される。
【0160】
[機械学習によるレイトレーシング]
上記のように、レイトレーシングは、物理ベースのレンダリングを通じて光伝搬がシミュレーションされるグラフィックス処理技術である。レイトレーシングにおける重要な動作のうち1つは、バウンディングボリューム階層(bounding volume hierarchy, BVH)内のノードのトラバーサル及び交差テストを必要とする可視クエリ(visibility query)を処理することである。
【0161】
レイトレーシング及びパストレーシングに基づく技術は、各ピクセルを通じて光線及びパスをトレースし、影、光沢度、間接照明等のような高度な効果を計算するためにランダムサンプリングを使用することにより、画像を計算する。少ないサンプルのみを使用することは高速であるが、ノイズの多い画像を生成する一方で、多くのサンプルを使用することは高品質の画像を生成するが、非常に高いコストになる。
【0162】
機械学習は、指定のタスクの性能を革新的に改善でき、或いは革新的により正確な予測又は判断を行うことができる、いずれかの回路、プログラムコード又はこれらの組み合わせを含む。いくつかの機械学習エンジンは、タスクを実行するように或いは予測/判断を行うように明示的にプログラムされることなく、これらのタスクを実行でき、或いはこれらの予測/決定を行うことができる。教師あり学習及び半教師あり学習、教師なし学習並びに強化学習を含む(これらに限定されない)様々な機械学習技術が存在する。
【0163】
過去数年の間に、リアルタイム使用のためのレイトレーシング/パストレーシングに対する画期的な解決策が「ノイズ除去(denoising)」の形で出現した。これは、ノイズの多い低サンプル数入力から高品質のフィルタリングされた/ノイズ除去された画像を生成するための画像処理技術を使用するプロセスである。最も効果的なノイズ除去技術は、機械学習エンジンが、もしより多くのサンプルで計算されていた場合に、ノイズの多い画像がどのように見えるかを学習する機械学習技術に依存する。1つの特定の実施形態では、機械学習は、畳み込みニューラルネットワーク(convolutional neural network, CNN)により実行されるが、本発明の基礎の原理は、CNNの実装に限定されない。このような実装では、訓練データは、低サンプル数入力と正解(ground-truth)とで生成される。CNNは、問題のピクセルの周囲のノイズの多いピクセル入力の近傍から収束ピクセルを予測するように訓練される。
【0164】
完全ではないが、このAIベースのノイズ除去技術は驚くほど効果的であることが証明されている。しかし、良好な訓練データが必要である点に注意する必要がある。この理由は、そうでなければネットワークが誤った結果を予測する可能性があるからである。例えば、アニメーション映画スタジオが、陸上のシーンを有する過去の映画に対してノイズ除去CNNを訓練し、次いで、水上に設定された新たな映画からフレームをノイズ除去するために、訓練されたCNNを使用することを試みた場合、ノイズ除去演算は、次善的に実行される。
【0165】
この問題に対処するために、レンダリングの間に学習データが動的に収集でき、CNNのような機械学習エンジンは、現在実行されているデータに基づいて継続的に訓練されてもよく、したがって、目前のタスクのための機械学習エンジンを継続的に改善する。したがって、訓練段階は、依然としてランタイム前に実行されてもよいが、ランタイム中に必要に応じて機械学習重みを調整し続ける。それにより、訓練に必要とされる参照データを計算する高コストは、学習データの生成を毎フレーム又はNフレーム毎に画像のサブ領域に制限することにより回避される。特に、フレームのノイズの多い入力が、現在のネットワークで全フレームをノイズ除去するために生成される。さらに、以下に説明するように、参照ピクセルの小さい領域が生成され、継続的な訓練に使用される。
【0166】
ここでは、CNNの実装について説明するが、教師あり学習(例えば、入力及び所望の出力の双方を含むデータのセットの数値演算モデルの構築)、教師なし学習(例えば、特定のタイプの構造について入力データを評価する)及び/又は教師あり学習と教師なし学習との組み合わせを実行するシステムを含むが、これらに限定されない、いずれかの形式の機械学習エンジンが使用されてもよい。
【0167】
既存のノイズ除去の実装は、訓練段階及びランタイム段階で動作する。訓練段階の間に、ピクセルカラー、デプス、法線、法線偏差(normal deviation)、プリミティブID及びアルベド(albedo)のような様々なピクセル毎のデータチャネルを有するN×Nピクセルの領域を受信し、最終的なピクセルカラーを生成するネットワークトポロジが定義される。「代表的な」訓練データのセットは、1フレーム分の低サンプル数入力を使用して、非常に高いサンプル数で計算された「所望の」ピクセルカラーを参照して生成される。ネットワークはこれらの入力に向かって訓練され、ネットワークの「理想的な」重みのセットを生成する。これらの実装では、参照データは、ネットワークの重みを訓練するために使用され、ネットワークの出力を所望の結果に最も近くマッチさせる。
【0168】
ランタイム時に、予め計算された理想的なネットワーク重みがロードされ、ネットワークが初期化される。各フレームについて、ノイズ除去入力の低サンプル数画像(すなわち、訓練に使用されるものと同じ)が生成される。各ピクセルについて、ピクセルの入力の所与の近傍は、「ノイズ除去された」ピクセルカラーを予測するためにネットワークを通じて実行され、ノイズ除去されたフレームを生成する。
【0169】
図15は、初期訓練の実装を示す。機械学習エンジン1500(例えば、CNN)は、ピクセルカラー、デプス、法線、法線偏差、プリミティブID及びアルベドのような様々なピクセル毎のデータチャネルを有するN×Nピクセルの領域を、高サンプル数画像データ1702として受信し、最終的なピクセルカラーを生成する。代表的な訓練データは、1フレーム分の低サンプル数入力1501を使用して生成される。ネットワークは、これらの入力に向かって訓練され、「理想的な」重みのセット1505を生成し、重み1505は、機械学習エンジン1500がその後にランタイム時に低サンプル数画像をノイズ除去するために使用する。
【0170】
上記の技術を改善するために、フレーム又はフレームのサブセット毎(例えば、N=2、3、4、10、25等の場合のNフレーム毎)に新たな訓練データを生成するためのノイズ除去段階が強化される。特に、図16に示すように、これは、ここでは「新参照領域」1602と呼ばれる、各フレーム内の1つ以上の領域が選択され、これは、高サンプル数で別個の高サンプル数バッファ1604にレンダリングされる。低サンプル数バッファ1603は、低サンプル数入力フレーム1601(新参照領域1602に対応する低サンプル領域1604を含む)を記憶する。
【0171】
新参照領域1602の位置は、ランダムに選択されてもよい。代替として、新参照領域1602の位置は、それぞれの新たなフレームについて予め指定された方式(例えば、フレームの間の領域の予め定義された移動を使用すること、フレームの中心の指定の領域に制限されること等)で調整されてもよい。
【0172】
どのように新参照領域が選択されるかにかかわらず、これは、機械学習エンジン1600により、ノイズ除去のために使用される訓練された重み1605を継続的に洗練及び更新するために使用される。特に、各新参照領域1602からの参照ピクセルカラーと、対応する低サンプル数領域1607からのノイズの多い参照ピクセル入力とがレンダリングされる。次いで、高サンプル数参照領域1602及び対応する低サンプル数領域1607を使用して、補足訓練が機械学習エンジン1600上で実行される。初期訓練とは対照的に、この訓練は、新参照領域1602毎にランタイム中に継続的に実行され、それにより、機械学習エンジン1600が正確に訓練されることを確保する。例えば、ピクセル毎のデータチャネル(例えば、ピクセルカラー、デプス、法線、法線偏差等)が評価されてもよく、機械学習エンジン1600は、訓練された重み1605を調整するためにピクセル毎のデータチャネルを使用する。訓練の場合(図15)と同様に、機械学習エンジン1600は、低サンプル数入力フレーム1601からノイズを除去し、ノイズ除去されたフレーム1620を生成するために、理想的な重みのセット1605に向かって訓練される。しかし、訓練された重み1605は、新たなタイプの低サンプル数入力フレーム1601の新たな画像特性に基づいて、継続的に更新される。
【0173】
機械学習エンジン1600により実行される再訓練動作は、グラフィックスプロセッサユニット(graphics processor unit, GPU)又はホストプロセッサ上のバックグラウンドプロセスで同時に実行されてもよい。ドライバコンポーネント及び/又はGPUハードウェアコンポーネントとして実装されてもよいレンダリングループは、キューに配置する新たな訓練データ(例えば、新参照領域1602の形式)を継続的に生成してもよい。GPU又はホストプロセッサ上で実行されるバックグラウンド訓練プロセスは、このキューから新たな訓練データを継続的に読み取り、機械学習エンジン1600を再訓練し、適切な間隔で新たな重み1605でこれを更新してもよい。
【0174】
図17は、バックグラウンド訓練プロセス1700がホストCPU1710により実装される、このような実装の例を示す。特に、バックグラウンド訓練プロセス1700は、訓練された重み1605を継続的に更新するために高サンプル数の新参照領域1602及び対応する低サンプル領域1604を使用し、それにより、機械学習エンジン1600を更新する。
【0175】
マルチプレイヤオンラインゲームの非限定的な例について図18Aに示すように、異なるホストマシン1820~1822は、バックグラウンド訓練プロセス1700A~Cがサーバ1800(例えば、ゲームサーバ等)に送信する参照領域を個別に生成する。次いで、サーバ1800は、ホスト1821~1822のそれぞれから受信した新参照領域を使用して、機械学習エンジン1810上で訓練を実行し、上記のように重み1805を更新する。サーバ1800は、これらの重み1805をホストマシン1820に送信し、ホストマシン1820は重み1605A~Cを記憶し、それにより、それぞれの個別の機械学習エンジン(図示せず)を更新する。サーバ1800は、短期間で多数の参照領域を提供されてもよいので、ユーザにより実行されるいずれかの所与のアプリケーション(例えば、オンラインゲーム)についての重みを効率的且つ正確に更新できる。
【0176】
図18Bに示すように、異なるホストマシンは、(例えば、上記の訓練/参照領域1602に基づいて)新たな訓練された重みを生成し、新たな訓練された重みをサーバ1800(例えば、ゲームサーバ等)と共有してもよく、或いは、代替として、ピアツーピア共有プロトコルを使用してもよい。サーバ上の機械学習管理コンポーネント1810は、ホストマシンのそれぞれから受信した新たな重みを使用して、結合重みのセット1805を生成する。結合重み1805は、例えば、新たな重みから生成されてここに記載のように継続的に更新される平均値でもよい。一旦生成されると、結合重み1605A~Cのコピーは、ホストマシン1820~1821のそれぞれに送信されて記憶されてもよく、次いで、ホストマシン1820~1821は、ノイズ除去演算を実行するために、ここに記載のように結合重みを使用してもよい。
【0177】
セミクローズドループ更新機構もハードウェア製造者により使用できる。例えば、参照ネットワークは、ハードウェア製造者により配信されるドライバの一部として含まれてもよい。ドライバは、ここに記載の技術を使用して新たな訓練データを生成し、これらをハードウェア製造者に継続的に送り返すので、ハードウェア製造者は、次のドライバ更新のために機械学習の実装を改善し続けるために、この情報を使用する。
【0178】
例示的な実装(例えば、レンダリングファームでのバッチ映画レンダリング)では、レンダラは、新たに生成された訓練領域を(そのスタジオのレンダリングファーム内の)専用のサーバ又はデータベースに送信し、専用のサーバ又はデータベースは、時間とともに複数のレンダリングノードからのこのデータを集約する。独立したマシン上の別のプロセスは、スタジオの専用のノイズ除去ネットワークを継続的に改善し、新たなレンダリングジョブは常に最新の訓練されたネットワークを使用する。
【0179】
機械学習方法が図19に示されている。当該方法は、ここに記載のアーキテクチャに実装されてもよいが、いずれかの特定のシステム又はグラフィックス処理アーキテクチャに限定されない。
【0180】
1901において、初期訓練段階の一部として、低サンプル数画像データ及び高サンプル数画像データが複数の画像フレームについて生成される。1902において、機械学習ノイズ除去エンジンが高/低サンプル数画像データを使用して訓練される。例えば、ピクセル特徴に関連する畳み込みニューラルネットワーク重みのセットは、訓練に従って更新されてもよい。しかし、いずれかの機械学習アーキテクチャが使用されてもよい。
【0181】
1903において、ランタイム時に、低サンプル数画像フレームが、高サンプル数を有する少なくとも1つの参照領域と共に生成される。1904において、高サンプル数参照領域は、機械学習エンジン及び/又は別個の訓練ロジック(例えば、バックグラウンド訓練モジュール1700)により、機械学習エンジンの訓練を継続的に洗練するために使用される。例えば、高サンプル数参照領域は、ノイズ除去を最も効果的に実行する方法を機械学習エンジン1904に教示し続けるために、低サンプル数画像の対応する部分と組み合わせて使用されてもよい。例えば、CNNの実装では、これは、CNNに関連する重みを更新することを含んでもよい。
【0182】
機械学習エンジンへのフィードバックループが構成される方式、訓練データを生成するエンティティ、どのように訓練データが訓練エンジンにフィードバックされるか、及びどのように改善されたネットワークがレンダリングエンジンに提供されるかのような、上記の複数のバリエーションが実装されてもよい。さらに、上記の例は、単一の参照領域を使用して継続的な訓練を実行するが、如何なる数の参照領域が使用されてもよい。さらに、上記のように、参照領域は、異なるサイズでもよく、異なる数の画像フレーム上で使用されてもよく、異なる技術を使用して(例えば、ランダムに、予め定められたパターンに従って等)、画像フレーム内の異なる位置に配置されてもよい。
【0183】
さらに、機械学習エンジン1600の一例として畳み込みニューラルネットワーク(convolutional neural network, CNN)について説明しているが、本発明の基礎の原理は、新たな訓練データを使用してその結果を継続的に洗練できるいずれかの形式の機械学習エンジンを使用して実装されてもよい。限定ではなく例として、他の機械学習の実装は、数個を挙げると、GMDH(group method of data handling)と、長短期記憶(long short-term memory)と、深層リザーバーコンピューティング(deep reservoir computing)と、深層信念ネットワーク(deep belief network)と、テンソル深層スタッキングネットワーク(tensor deep stacking network)と、深層予測符号化ネットワーク(deep predictive coding network)とを含む。
【0184】
[効率的な分散ノイズ除去のための装置及び方法]
上記のように、ノイズ除去は、滑らかなノイズのない画像を用いたリアルタイムのレイトレーシングにとって重要な特徴となっている。レンダリングは、複数のデバイス上の分散システムの間で行うことができるが、これまでには、既存のノイズ除去フレームワークは全て、単一のマシン上の単一インスタンス上で動作する。レンダリングが複数のデバイスの間で行われる場合、これらは画像のノイズ除去された部分を計算するためにアクセス可能な全てのレンダリングされたピクセルを有さない可能性がある。
【0185】
人工知能(artificial intelligence, AI)及び非AIベースのノイズ除去技術の双方で機能する分散ノイズ除去アルゴリズムが提示される。画像の領域は、分散レンダリング演算からノードの間に既に分散しているか、或いは単一のフレームバッファから分割されて分散している。必要に応じて、近傍ノードから、十分なノイズ除去を計算するために必要な近傍領域のゴースト領域が収集され、最終的な結果のタイルが最終画像に合成される。
【0186】
(分散処理)
図20は、レンダリングを実行する複数のノード2021~2023を示す。簡潔にするために3つのノードのみが示されているが、本発明の基礎の原理は、いずれかの特定の数のノードに限定されない。実際に、単一のノードが本発明の特定の実施形態を実装するために使用されてもよい。
【0187】
ノード2021~2023は画像の一部をそれぞれレンダリングし、この例では領域2011~2013を生じる。矩形領域2011~2013が図20に示されているが、いずれかの形状の領域が使用されてもよく、いずれかのデバイスはいずれかの数の領域を処理できる。ノードにより十分に滑らかなノイズ除去演算を実行するために必要な領域は、ゴースト領域2011~2013と呼ばれる。言い換えると、ゴースト領域2001~2003は、指定のレベルの品質でノイズ除去を実行するために必要なデータの全体を表す。品質レベルを低下させることはゴースト領域のサイズを低減し、したがって、必要なデータ量を低減し、品質レベルを上昇させることは、ゴースト領域及び必要な対応するデータを増加させる。
【0188】
ノード2021のようなノードが、指定のレベルの品質でその領域2011をノイズ除去するために必要なゴースト領域2001の一部のローカルコピーを有する場合、ノードは、図示のようにゴースト領域2001の一部を所有するノード2022のような、1つ以上の「近傍」ノードから必要なデータを取得する。同様に、ノード2022が、指定のレベルの品質でその領域2012をノイズ除去するために必要なゴースト領域2002の一部のローカルコピーを有する場合、ノード2022は、ノード2021から必要なゴースト領域データ2032を取得する。取得は、バス、相互接続、高速メモリファブリック、ネットワーク(例えば、高速イーサネット)上で実行されてもよく、或いは、複数のコアの間でレンダリング作業を分散できるマルチコアチップ内のオンチップ相互接続でもよい(例えば、極端な解像度又は時間変化のいずれかで大きい画像をレンダリングするために使用される)。各ノード2021~2023は、グラフィックスプロセッサ内の個別の実行ユニット又は実行ユニットの指定のセットを含んでもよい。
【0189】
送信されるデータの具体的な量は、使用されているノイズ除去技術に依存する。さらに、ゴースト領域からのデータは、それぞれの領域のノイズ除去を改善するために必要ないずれかのデータを含んでもよい。例えば、ゴースト領域データは、画像の色/波長、強度/アルファデータ及び/又は法線を含んでもよい。しかし、本発明の基礎の原理は、ゴースト領域データのいずれかの特定のセットに限定されない。
【0190】
(更なる詳細)
より遅いネットワーク又は相互接続のために、既存の汎用の可逆圧縮又は非可逆圧縮を使用して、このデータの圧縮が利用できる。例は、zlib、gzip及びLZMA(Lempel-Ziv-Markov chain algorithm)を含むが、これらに限定されない。さらに、フレームの間の光線ヒット情報におけるデルタが非常にまばらである可能性があり、ノードが既に以前のフレームから収集されたデルタを有しているときに、そのデルタに寄与するサンプルのみが送信される必要があることに留意することにより、コンテンツ特有の圧縮が使用されてもよい。これらは、これらのサンプルを収集するノードiに選択的にプッシュでき、或いは、ノードiは、他のノードからサンプルを要求できる。可逆圧縮は、特定のタイプのデータ及びプログラムコードに使用され、非可逆データは、他のタイプのデータに使用される。
【0191】
図21は、ノード2021~2022の間の相互作用の更なる詳細を示す。各ノード2021~2022は、それぞれの画像領域2011~2012及びゴースト領域2001~2002をレンダリングするためのレイトレーシングレンダリング回路2081~2082を含む。ノイズ除去器2100~2111は、各ノード2021~2022がレンダリング及びノイズ除去を担う領域2011~2012で、それぞれノイズ除去演算を実行する。例えば、ノイズ除去器2021~2022は、それぞれ、ノイズ除去領域2121~2122を生成するための回路、ソフトウェア又はこれらのいずれかの組み合わせを含んでもよい。上記のように、ノイズ除去領域を生成するとき、ノイズ除去器2021~2022は、異なるノードにより所有されるゴースト領域内のデータに依存する必要があってもよい(例えば、ノイズ除去器2100は、ノード2022により所有されるゴースト領域2002からのデータを必要としてもよい)。
【0192】
したがって、ノイズ除去器2100~2111は、それぞれ領域2011~2012及びゴースト領域2001~2002からのデータを使用して、ノイズ除去領域2121~2122を生成してもよく、ゴースト領域2001~2002の少なくとも一部は、他のノードから受信されてもよい。領域データマネージャ2101~2102は、ここに記載のように、ゴースト領域2001~2002からのデータ転送を管理してもよい。圧縮器/伸張器ユニット2131~2132は、それぞれノード2021~2022の間で交換されるゴースト領域データの圧縮及び伸張を実行してもよい。
【0193】
例えば、ノード2021の領域データマネージャ2101は、ノード2022からの要求に応じて、ゴースト領域2001からのデータを圧縮器/伸張器2131に送信し、圧縮器/伸張器2131は、ノード2022に送信する圧縮データ2106を生成するためにデータを圧縮し、それにより、相互接続、ネットワーク、バス又は他のデータ通信リンク上の帯域幅を低減する。次いで、ノード2022の圧縮器/伸張器2132は、圧縮データ2106を伸張し、ノイズ除去器2111は、領域2012からのデータのみで可能となるものより高品質のノイズ除去領域2012を生成するために、伸張されたゴーストデータを使用する。領域データマネージャ2102は、ノイズ除去領域2122を生成するときにノイズ除去器2111に利用可能にするために、ゴースト領域2001からの伸張データをキャッシュ、メモリ、レジスタファイル又は他のストレージに記憶してもよい。ゴースト領域2002からノード2021上のノイズ除去器2100にデータを提供するために、同様の動作のセットが実行されてもよく、ノイズ除去器2100は、より高品質のノイズ除去領域2121を生成するために、データを、領域2011からのデータと組み合わせて使用する。
【0194】
(データの取り込み又はレンダリング)
ノード2021~2022のようなデバイスの間の接続が遅い場合(すなわち、閾値待ち時間及び/又は閾値帯域幅よりも低い場合)、他のデバイスからの結果を要求するよりも、ゴースト領域をローカルにレンダリングする方が速い可能性がある。これは、ネットワークトランザクション速度を追跡してゴースト領域サイズについて線形的に外挿されたレンダリング時間を追跡することにより、ランタイムで決定できる。全体のゴースト領域をレンダリング出力する方が速いような場合、複数のデバイスは、最後には画像の同じ部分をレンダリングする可能性がある。ゴースト領域のレンダリングされた部分の解像度は、ベース領域の分散及び決定されたぼやけの程度に基づいて調整されてもよい。
【0195】
(負荷分散)
静的及び/又は動的な負荷分散方式は、様々なノード2021~2023の間で処理負荷を分散させるために使用されてもよい。動的負荷分散について、ノイズ除去フィルタにより決定される分散は、ノイズ除去においてより多くの時間を必要とするが、画像の低分散のぼやけた領域がより少ないサンプルを必要とするように、シーンの特定の領域をレンダリングするために使用されるサンプルの量を駆動する。特定のノードに割り当てられた特定の領域は、以前のフレームからのデータに基づいて動的に調整されてもよく、或いは、全てのデバイスが同じ量の作業を有するように、レンダリングしているときにデバイスの間で動的に通信されてもよい。
【0196】
図22は、それぞれのノード2021~2022上で実行するモニタ2201~2202が、ネットワークインタフェース2211~2212上でデータを送信するために消費される時間、領域をノイズ除去するときに消費される時間(ゴースト領域データの有無を問わない)、及び各領域/ゴースト領域をレンダリングするために消費される時間を含むが、これらに限定されない、性能メトリックデータをどのように収集するかを示す。モニタ2201~2202は、これらの性能メトリックをマネージャ又は負荷分散ノード2201に報告し、マネージャ又は負荷分散ノード2201は、各ノード2021~2022上の現在のワークロードを識別するためにデータを分析し、様々なノイズ除去領域2121~2122を処理するより効率的なモードを潜在的に決定する。次いで、マネージャノード2201は、検出された負荷に従って、新たな領域の新たなワークロードをノード2021~2022に分配する。例えば、マネージャノード2201は、より多くの作業を過負荷ではないノードに送信してもよく、及び/又は、過負荷になっているノードから作業を再割り当てしてもよい。さらに、負荷分散ノード2201は、レンダリング及び/又はノイズ除去がノードのそれぞれにより実行される特定の方法を調整するために再構成コマンドを送信してもよい(そのいくつかの例が上記に記載されている)。
【0197】
(ゴースト領域の決定)
ゴースト領域2001~2002のサイズ及び形状は、ノイズ除去器2100~2111により実装されたノイズ除去アルゴリズムに基づいて決定されてもよい。次いで、これらのそれぞれのサイズは、ノイズ除去されているサンプルの検出された分散に基づいて、動的に修正できる。AIノイズ除去自体のために使用される学習アルゴリズムは、適切な領域サイズを決定するために使用されてもよく、或いは、バイラテラルブラー(bilateral blur)のような他の場合には、所定のフィルタ幅がゴースト領域2001~2002のサイズを決定する。学習アルゴリズムを使用する例示的な実装では、機械学習エンジンは、マネージャノード2201で実行されてもよく、及び/又は、機械学習の一部は、個々のノード2021~2023のそれぞれで実行されてもよい(例えば、上記の図18A図18B及び関連する文章を参照する)。
【0198】
(最終画像の収集)
最終画像は、ゴースト領域又は法線を必要とせずに、ノード2021~2023のそれぞれからレンダリングされてノイズ除去された領域を収集することにより生成されてもよい。図22では、例えば、ノイズ除去領域2121~2122は、最終的なノイズ除去画像2290を生成するために領域を結合するマネージャノード2201の領域プロセッサ2280に送信され、次いで、最終的なノイズ除去画像2290は、ディスプレイ2290に表示される。領域プロセッサ2280は、様々な2D合成技術を使用して領域を結合してもよい。別個のコンポーネントとして示されているが、領域プロセッサ2280及びノイズ除去画像2290は、ディスプレイ2290に統合されてもよい。様々なノード2021~2022は、ノイズ除去領域2121~2122を送信するために直接送信技術を使用してもよく、潜在的には領域データの様々な非可逆圧縮又は可逆圧縮を使用する。
【0199】
AIノイズ除去は、ゲームがクラウドに移行するにつれて、依然として高コストな演算となっている。したがって、複数のノード2021~2022の間でのノイズ除去の分散処理は、より高いフレームレートを必要とする従来のゲーム又は仮想現実(virtual reality, VR)のためのリアルタイムフレームレートを達成するために必要となる可能性がある。映画スタジオもまた、より速いノイズ除去のために利用できる大規模なレンダリングファームでしばしばレンダリングする。
【0200】
分散レンダリング及びノイズ除去を実行するための例示的な方法が図23に示されている。当該方法は、上記のシステムアーキテクチャに関して実装されてもよいが、特定のシステムアーキテクチャに限定されない。
【0201】
2301において、グラフィックス作業は、画像フレームの領域をレンダリングするためにレイトレーシング演算を実行する複数のノードにディスパッチされる。各ノードは、メモリ内に演算を実行するために必要なデータを既に有していてもよい。例えば、2つ以上のノードは、共通メモリを共有してもよく、或いは、ノードのローカルメモリは、以前のレイトレーシング演算からのデータを既に記憶してもよい。代替として或いはさらに、特定のデータが各ノードに送信されてもよい。
【0202】
2302において、指定のレベルのノイズ除去(すなわち、許容可能なレベルの性能)に必要な「ゴースト領域」が決定される。ゴースト領域は、1つ以上の他のノードにより所有されるデータを含む、指定のレベルのノイズ除去を実行するために必要ないずれかのデータを含む。
【0203】
2303において、ゴースト領域(又はその一部)に関連するデータがノードの間で交換される。2304において、各ノードは、そのそれぞれの領域に対して(例えば、交換されたデータを使用して)ノイズ除去を実行し、2305において、最終的なノイズ除去された画像フレームを生成するように、結果が組み合わされる。
【0204】
図22に示すようなマネージャノード又はプライマリノードは、作業をノードにディスパッチし、次いで、最終的な画像フレームを生成するように、ノードにより実行された作業を結合してもよい。ピアベースのアーキテクチャが使用でき、ノードは、最終的な画像フレームをレンダリング及びノイズ除去するためにデータを交換するピアである。
【0205】
ここに記載のノード(例えば、ノード2021~2023)は、高速ネットワークを介して相互接続されたグラフィックス処理計算システムでもよい。代替として、ノードは、高速メモリファブリックに結合された個々の処理エレメントでもよい。ノードの全ては、共通の仮想メモリ空間及び/又は共通の物理メモリを共有してもよい。代替として、ノードは、CPUとGPUの組み合わせでもよい。例えば、上記のマネージャノード2201は、CPU及び/又はCPU上で実行されるソフトウェアでもよく、ノード2021~2022は、GPU及び/又はGPU上で実行されるソフトウェアでもよい。様々な異なるタイプのノードが使用されてもよく、依然として本発明の基礎の原理に従う。
【0206】
(例示的なニューラルネットワークの実装)
多くのタイプのニューラルネットワークが存在し、単純なタイプのニューラルネットワークはフィードフォワードネットワークである。フィードフォワードネットワークは、ノードが階層に配置される非巡回グラフとして実装されてもよい。典型的には、フィードフォワードネットワークトポロジは、少なくとも1つの隠れ層により分離された入力層及び出力層を含む。隠れ層は、入力層により受け取られた入力を、出力層において出力を生成するのに有用な表現に変換する。ネットワークノードは、エッジを介して隣接する層のノードに完全に接続されるが、各層内のノードの間にエッジは存在しない。フィードフォワードネットワークの入力層のノードで受信されたデータは、層を接続するエッジのそれぞれにそれぞれ関連する係数(「重み」)に基づいて、ネットワーク内のそれぞれ連続する層のノードの状態を計算する活性化関数を介して、出力層のノードに伝搬(すなわち、「フィードフォワード」)される。実行されているアルゴリズムにより表される特定のモデルに依存して、ニューラルネットワークアルゴリズムからの出力は、様々な形式をとることができる。
【0207】
機械学習アルゴリズムが特定の問題をモデル化するために使用できる前に、アルゴリズムは訓練データセットを使用して訓練される。ニューラルネットワークを訓練することは、ネットワークトポロジを選択し、ネットワークによりモデル化されている問題を表す訓練データのセットを使用し、ネットワークモデルが訓練データセットの全てのインスタンスについて最小限の誤差で実行するまで、重みを調整することを含む。例えば、ニューラルネットワークの教師あり学習訓練プロセスの間に、訓練データセット内のインスタンスを表す入力に応じてネットワークにより生成された出力は、そのインスタンスについての「正しい」ラベル付き出力と比較され、出力とラベル付き出力との間の差を表す誤差信号が計算され、誤差信号がネットワークの層を通じて逆方向に伝搬されるときにその誤差を最小化するように、接続に関連する重みが調整される。訓練データセットのインスタンスから生成された出力それぞれの誤差が最小化されたとき、ネットワークは「訓練された」とみなされる。
【0208】
機械学習アルゴリズムの精度は、アルゴリズムを訓練するために使用されるデータセットの品質によりかなり影響される可能性がある。訓練プロセスは、計算集約的となる可能性があり、従来の汎用プロセッサ上でかなりの時間を必要とし得る。したがって、並列処理ハードウェアは、多くのタイプの機械学習アルゴリズムを訓練するために使用される。これは、ニューラルネットワークにおける係数を調整する際に実行される計算が当然に並列実装に向いているので、ニューラルネットワークの訓練を最適化するのに特に有用である。具体的には、多くの機械学習アルゴリズム及びソフトウェアアプリケーションは、汎用グラフィックス処理デバイス内の並列処理ハードウェアを使用するように適合されている。
【0209】
図24は、機械学習ソフトウェアスタック2400の一般化した図である。機械学習アプリケーション2402は、訓練データセットを使用してニューラルネットワークを訓練するように、或いは、マシンインテリジェンスを実装するために訓練された深層ニューラルネットワークを使用するように構成できる。機械学習アプリケーション2402は、展開前にニューラルネットワークを訓練するために使用できるニューラルネットワーク及び/又は特殊なソフトウェアのための訓練及び推論機能を含むことができる。機械学習アプリケーション2402は、画像認識、マッピング及び位置決め、自動ナビゲーション、音声合成、医療画像又は言語翻訳を含むが、これらに限定されないいずれかのタイプのマシンインテリジェンスを実装できる。
【0210】
機械学習アプリケーション2402のためのハードウェアアクセラレーションは、機械学習フレームワーク2404を介して可能とすることができる。機械学習フレームワーク2404は、ここに記載のプロセッサ及びコンポーネントを含む処理システム100のように、ここに記載のハードウェア上で実装されてもよい。ここでのいずれかの他の図面のエレメントと同じ名称又は同様の名称を有する図24について記載されるエレメントは、他の図面のものと同じエレメントを記述し、ここで他の箇所に記載されたものと同様の方式で動作又は機能でき、同じコンポーネントを含むことができ、他のエンティティにリンクできるが、このようなものに限定されない。機械学習フレームワーク2404は、機械学習プリミティブのライブラリを提供できる。機械学習プリミティブは、機械学習アルゴリズムにより一般的に実行される基本演算である。機械学習フレームワーク2404がなければ、機械学習アルゴリズムの開発者は、機械学習アルゴリズムに関連する主な計算ロジックを作成して最適化し、次いで、新たな並列プロセッサが開発されるにつれて計算ロジックを再最適化することが要求される。代わりに、機械学習アプリケーションは、機械学習フレームワーク2404により提供されるプリミティブを使用して必要な計算を実行するように構成できる。典型的なプリミティブは、テンソル畳み込み、活性化関数及びプーリングを含み、これらは、畳み込みニューラルネットワーク(convolutional neural network, CNN)を訓練しつつ実行される計算演算である。機械学習フレームワーク2404はまた、行列及びベクトル演算のような多くの機械学習アルゴリズムにより実行される基本線形代数サブプログラムを実装するプリミティブを提供できる。
【0211】
機械学習フレームワーク2404は、機械学習アプリケーション2402から受信した入力データを処理し、計算フレームワーク2406への適切な入力を生成できる。計算フレームワーク2406は、機械学習フレームワーク2404がGPGPUハードウェア2410のアーキテクチャの詳細な認識を有することを要求することなく、機械学習フレームワーク2404がGPGPUハードウェア2410を介してハードウェアアクセラレーションを利用することを可能にするために、GPGPUドライバ2408に提供される基本的な命令を抽象化できる。さらに、計算フレームワーク2406は、様々なタイプ及び世代のGPGPUハードウェア2410の間で機械学習フレームワーク2404のためのハードウェアアクセラレーションを可能にできる。
【0212】
(GPGPU機械学習アクセラレーション)
図25は、マルチGPU計算システム2500を示し、これは処理システム100の変形でもよい。したがって、ここでの処理システム100と組み合わせたいずれかの特徴の開示もまた、マルチGPU計算システム2500との対応する組み合わせを開示するが、このようなものに限定されない。ここでのいずれかの他の図面のエレメントと同じ名称又は同様の名称を有する図25のエレメントは、他の図面のものと同じエレメントを記述し、ここで他の箇所に記載されたものと同様の方式で動作又は機能でき、同じコンポーネントを含むことができ、他のエンティティにリンクできるが、このようなものに限定されない。マルチGPU計算システム2500は、ホストインタフェーススイッチ2504を介して複数のGPGPU2506A~Dに結合されたプロセッサ2502を含むことができる。ホストインタフェーススイッチ2504は、例えば、プロセッサ2502がGPGPU2506A~Dのセットと通信できるPCIエクスプレスバスにプロセッサ2502を結合するPCIエクスプレススイッチデバイスでもよい。複数のGPGPU2506A~Dのそれぞれは、上記のGPGPUのインスタンスとすることができる。GPGPU2506A~Dは、高速ポイントツーポイントGPU間リンク2516のセットを介して相互接続できる。高速GPU間リンクは、専用のGPUリンクを介してGPGPU2506A~Dのそれぞれに接続できる。P2P GPUリンク2516は、プロセッサ2502が接続されるホストインタフェースバス上での通信を必要とせずに、GPGPU2506A~Dのそれぞれの間の直接通信を可能にする。P2P GPUリンクに向けられたGPU間トラフィックによって、ホストインタフェースバスは、システムメモリアクセスのために、或いは、例えば、1つ以上のネットワークデバイスを介して、マルチGPU計算システム2500の他のインスタンスと通信するために、利用可能なままである。ホストインタフェーススイッチ2504を介してGPGPU2506A~Dをプロセッサ2502に接続する代わりに、プロセッサ2502は、P2P GPUリンク2516の直接のサポートを含むことができ、したがって、GPGPU2506A~Dに直接接続できる。
【0213】
(機械学習ニューラルネットワークの実装)
ここに記載の計算アーキテクチャは、機械学習のためのニューラルネットワークを訓練して展開するのに特に適したタイプの並列処理を実行するように構成できる。ニューラルネットワークは、グラフ関係を有する関数のネットワークとして一般化できる。当該技術分野において周知のように、機械学習において使用される様々なタイプのニューラルネットワークの実装が存在する。1つの例示的なタイプのニューラルネットワークは、上記のようなフィードフォワードネットワークである。
【0214】
第2の例示的なタイプのニューラルネットワークは、畳み込みニューラルネットワーク(Convolutional Neural Network, CNN)である。CNNは、画像データのような既知のグリッド状のトポロジを有するデータを処理するための特殊なフィードフォワードニューラルネットワークである。したがって、CNNは、コンピュータ視覚及び画像認識アプリケーションに一般的に使用されるが、音声及び言語処理のような他のタイプのパターン認識にも使用されてもよい。CNN入力層内のノードは、「フィルタ」(網膜にある受容野により励起される特徴検出器)のセットに編成され、フィルタの各セットの出力は、ネットワークの連続する層内のノードに伝搬される。CNNの計算は、フィルタの出力を生成するために畳み込み数値演算を各フィルタに適用することを含む。畳み込みは、2つの元の関数のうち一方の修正版である第3の関数を生成するように2つの関数により実行される特殊な種類の数値演算である。畳み込みネットワークの用語では、畳み込みに対する第1の関数は入力と呼ばれることがあり、第2の関数は畳み込みカーネルと呼ばれることがある。出力は、特徴マップと呼ばれてもよい。例えば、畳み込み層への入力は、入力画像の様々なカラー成分を定義するデータの多次元アレイとすることができる。畳み込みカーネルは、パラメータの多次元配列とすることができ、パラメータは、ニューラルネットワークのための訓練プロセスにより適合される。
【0215】
再帰型ニューラルネットワーク(recurrent neural network, RNN)は、層の間のフィードバック接続を含むフィードフォワードニューラルネットワークのファミリーである。RNNは、ニューラルネットワークの異なる部分の間でパラメータデータを共有することにより、逐次データのモデル化を可能にする。RNNのアーキテクチャはサイクルを含む。RNNからの出力データの少なくとも一部が順序において後続の入力を処理するためのフィードバックとして使用されるので、サイクルは、変数の現在の値の将来の時点における自身の値への影響を表す。この特徴は、言語データが構成できる可変性のため、RNNを言語処理に特に有用にする。
【0216】
以下に説明する図面は、例示的なフィードフォワード、CNN及びRNNネットワークを示し、これらのタイプのネットワークのそれぞれをそれぞれ訓練及び展開するための一般的なプロセスを説明する。これらの説明は、例示的且つ非限定的であり、図示の概念は、深層ニューラルネットワーク及び機械学習技術に一般的に適用できることが理解される。
【0217】
上記の例示的なニューラルネットワークは、深層学習を実行するために使用できる。深層学習は、深層ニューラルネットワークを使用した機械学習である。深層学習で使用される深層ニューラルネットワークは、単一の隠れ層のみを含む浅いニューラルネットワークとは対照的に、複数の隠れ層で構成される人工ニューラルネットワークである。より深いニューラルネットワークは、一般的に、訓練するためにより計算集約的である。しかし、ネットワークの更なる隠れ層は、浅い機械学習技術と比較して低減した出力誤差を生じる多段階パターン認識を可能にする。
【0218】
深層学習で使用される深層ニューラルネットワークは、典型的には、バックエンドネットワークに結合された特徴認識を実行するためのフロントエンドネットワークを含み、バックエンドネットワークは、モデルに提供される特徴表現に基づいて演算(例えば、オブジェクト分類、音声認識等)を実行できる数値演算モデルを表す。深層学習は、手作りの特徴エンジニアリングがモデルについて実行される必要なく、機械学習が実行されることを可能にする。その代わりに、深層ニューラルネットワークは、入力データ内の統計的構造又は相関に基づいて特徴を学習できる。学習された特徴は、検出された特徴を出力にマッピングできる数値演算モデルに提供できる。ネットワークにより使用される数値演算モデルは、一般的に、実行される特定のタスクに特殊化され、異なるモデルが異なるタスクを実行するために使用される。
【0219】
ニューラルネットワークが構築されると、学習モデルは、特定のタスクを実行するためのネットワークを訓練するためにネットワークに適用できる。学習モデルは、ネットワークの出力誤差を低減するためにどのようにモデル内の重みを調整するかを記述する。誤差の逆伝搬は、ニューラルネットワークを訓練するために使用される一般的な方法である。入力ベクトルが処理のためにネットワークに提示される。ネットワークの出力は、損失関数を使用して所望の出力と比較され、出力層のニューロンのそれぞれについて誤差値が計算される。次いで、各ニューロンが元の出力に対するその寄与をおおまかに表す関連する誤差値を有するまで、誤差値は逆方向に伝搬される。次いで、ネットワークは、ニューラルネットワークの重みを更新するために、確率的勾配降下アルゴリズムのようなアルゴリズムを使用して、これらの誤差から学習できる。
【0220】
図26図27は、例示的な畳み込みニューラルネットワークを示す。図26は、CNN内の様々な層を示す。図26に示すように、画像処理をモデル化するために使用される例示的なCNNは、入力画像の赤、緑及び青(RGB)成分を記述する入力2602を受信できる。入力2602は、複数の畳み込み層(例えば、畳み込み層2604、畳み込み層2606)により処理できる。複数の畳み込み層からの出力は、任意選択で、全結合層のセット2608により処理されてもよい。フィードフォワードネットワークについて上記に説明したように、全結合層のニューロンは、前の層の全ての活性化への完全な接続を有する。全結合層2608からの出力は、ネットワークからの出力結果を生成するために使用できる。全結合層2608内の活性化は、畳み込みの代わりに行列乗算を使用して計算できる。全てのCNN実装が全結合層を利用するとは限らない。例えば、いくつかの実装では、畳み込み層2606は、CNNのための出力を生成できる。
【0221】
畳み込み層は疎に接続され、全結合層2608に見られる従来のニューラルネットワーク構成とは異なる。従来のニューラルネットワーク層は、全ての出力ユニットが全ての入力ユニットと相互作用するように、完全に接続される。しかし、畳み込み層は、図示のように、フィールドの畳み込みの出力が(フィールド内のノードのそれぞれの各状態値の代わりに)後続の層のノードに入力されるので、疎に接続される。畳み込み層に関連するカーネルは畳み込み演算を実行し、その出力は次の層に送信される。畳み込み層内で実行される次元低減は、CNNが大きい画像を処理するようにスケーリングすることを可能にする一態様である。
【0222】
図27は、CNNの畳み込み層内の例示的な計算段階を示す。CNNの畳み込み層2712への入力は、畳み込み層2714の3つの段階で処理できる。3つの段階は、畳み込み段階2716と、検出段階2718と、プーリング段階2720とを含むことができる。次いで、畳み込み層2714は、連続する畳み込み層にデータを出力できる。ネットワークの最終的な畳み込み層は、出力特徴マップデータを生成するか、或いは、全結合層に入力を提供し、例えば、CNNへの入力のための分類値を生成できる。
【0223】
畳み込み段階2716は、線形活性化のセットを生成するために、並列にいくつかの畳み込みを実行する。畳み込み段階2716は、アフィン変換を含んでもよく、アフィン変換は、線形変換に平行移動を加えたものとして指定できるいずれかの変換である。アフィン変換は、回転、平行移動、拡大縮小(スケーリング)及びこれらの変換の組み合わせを含む。畳み込み段階は、入力の中の特定の領域に接続された関数(ニューロンなど)の出力を計算する。これはニューロンに関連するローカル領域として決定できる。ニューロンは、ニューロンの重みと、ニューロンが接続されているローカル入力内の領域との間のドット積を計算する。畳み込み段階2716からの出力は、畳み込み層2714の連続する段階により処理される線形活性化のセットを規定する。
【0224】
線形活性化は、検出段階2718により処理できる。検出段階2718では、各線形活性化は、非線形活性化関数により処理される。非線形活性化関数は、畳み込み層の受容野に影響を与えることなく、全体のネットワークの非線形特性を増加させる。いくつかのタイプの非線形活性化関数が使用されてもよい。1つの特定のタイプは、正規化線形ユニット(rectified linear unit, ReLU)であり、正規化線形ユニットは、活性化がゼロで閾値設定されるように、f(x)=max(0,x)として定義される活性化関数を使用する。
【0225】
プーリング段階2720は、畳み込み層2706の出力を、近傍の出力の要約統計量で置き換えるプーリング関数を使用する。プーリング関数は、入力への小さい平行移動がプーリングされた出力を変更しないように、ニューラルネットワークへの平行移動の不変性を導入するために使用できる。ローカルの平行移動に対する不変性は、入力データ内の特徴の存在が特徴の正確な位置よりも重要であるシナリオにおいて有用になり得る。プーリング段階2720の間に、最大プーリング、平均プーリング及びl2ノルム(l2-norm)プーリングを含む様々なタイプのプーリング関数が使用できる。さらに、いくつかのCNNの実装は、プーリング段階を含まない。その代わりに、このような実装は、前の畳み込み段階に対して増大したストライドを有する更なる畳み込み段階を代用する。
【0226】
次いで、畳み込み層2714からの出力は、次の層2722により処理できる。次の層2722は、更なる畳み込み層又は全結合層2708のうち1つとすることができる。例えば、図27の第1の畳み込み層2704は第2の畳み込み層2706に出力でき、第2の畳み込み層は全結合層2808の第1の層に出力できる。
【0227】
図28は、例示的な再帰型ニューラルネットワーク2800を示す。再帰型ニューラルネットワーク(recurrent neural network, RNN)では、ネットワークの以前の状態は、ネットワークの現在の状態の出力に影響を与える。RNNは、様々な関数を使用して様々な方法で構築することができる。RNNの使用は、一般的に、事前の入力の系列に基づいて将来を予測するために数値演算的モデルを使用することを中心に展開する。例えば、RNNは、以前の単語列が与えられたとき、次の単語を予測するために統計的言語モデル化を実行するために使用されてもよい。図示のRNN2800は、入力ベクトルを受信する入力層2802と、再帰関数を実装する隠れ層2804と、以前の状態の「メモリ」を可能にするフィードバック機構2805と、結果を出力する出力層2806とを有するものとして記述できる。RNN2800は、時間ステップに基づいて動作する。所与の時間ステップにおけるRNNの状態は、フィードバック機構2805を介して、以前の時間ステップに基づいて影響される。所与の時間ステップについて、隠れ層2804の状態は、以前の状態及び現在の時間ステップにおける入力により定義される。第1の時間ステップにおける初期入力(x1)は、隠れ層2804により処理できる。第2の入力(x2)は、初期入力(x1)の処理中に決定された状態情報を使用して、隠れ層2804により処理できる。所与の状態は、s_t=f(Ux_t+Ws_(t-1))として計算でき、U及びWはパラメータ行列である。関数fは、一般的には、双曲線正接関数(Tanh)又は正規化関数f(x)=max(0,x)の変形のように非線形性である。しかし、隠れ層2804で使用される特定の数値演算関数は、RNN2800の特定の実装の詳細に依存して変化できる。
【0228】
上記の基本的なCNN及びRNNネットワークに加えて、これらのネットワークのバリエーションが可能になってもよい。RNNの変形の一例は、長短期記憶(long short term memory, LSTM)RNNである。LSTM RNNは、より長い系列の言語を処理するために必要になり得る長期の依存性を学習できる。CNNの変形は、CNNと同様の構造を有し、深層信念ネットワークと同様の方法で訓練される、畳み込み深層信念ネットワークである。深層信念ネットワーク(deep belief network, DBN)は、確率(ランダム)変数の複数の層で構成された生成ニューラルネットワークである。DBNは、貪欲教師なし学習(greedy unsupervised learning)を使用して層毎に訓練できる。次いで、DBNの学習した重みは、ニューラルネットワークの重みの最適な初期セットを決定することにより、予め訓練されたニューラルネットワークを提供するために使用できる。
【0229】
図29は、深層ニューラルネットワークの訓練及び展開を示す。所与のネットワークがタスクのために構造化されると、ニューラルネットワークは、訓練データセット2902を使用して訓練される。様々な訓練フレームワーク2904が、訓練プロセスのハードウェアアクセラレーションを可能にするために開発されている。例えば、上記の機械学習フレームワークは、訓練フレームワークとして構成されてもよい。訓練フレームワーク2904は、訓練されていないニューラルネットワーク2906に引き込むことができ、訓練されていないニューラルネットが、ここに記載の並列処理リソースを使用して訓練され、訓練されたニューラルネット2908を生成することを可能にする。
【0230】
訓練プロセスを開始するために、初期重みは、ランダムに或いは深層信念ネットワークを使用して予め訓練することにより選択されてもよい。次いで、訓練サイクルは、教師あり又は教師なしの方式のいずれかで実行される。
【0231】
教師あり学習は、訓練データセット2902が入力についての所望の出力とペアになった入力を含む場合、又は訓練データセットが既知の出力を有する入力を含み且つニューラルネットワークの出力が手動で採点される場合のように、訓練が仲介動作として実行される学習方法である。ネットワークは、入力を処理し、結果の出力を期待される出力又は所望の出力に対して比較する。次いで、誤差はシステムを通じて逆伝搬される。訓練フレームワーク2904は、訓練されていないニューラルネットワーク2906を制御する重みを調整するように調整できる。訓練フレームワーク2904は、どのようにして訓練されていないニューラルネットワーク2906が、既知の入力データに基づいて正しい答えを生成するのに適したモデルに向かって収束しているかを監視するツールを提供できる。訓練プロセスは、ネットワークの重みがニューラルネットワークにより生成された出力を洗練するように調整されるにつれて繰り返し発生する。訓練プロセスは、ニューラルネットワークが訓練されたニューラルネット2908に関連する統計的に所望の精度に到達するまで継続できる。次いで、訓練されたニューラルネットワーク2908は、いずれかの数の機械学習演算を実装するために展開できる。
【0232】
教師なし学習は、ネットワークがラベルなしデータを使用して自らを訓練することを試みる学習方法である。したがって、教師なし学習のために、訓練データセット2902は、関連する出力データのない入力データを含む。訓練されていないニューラルネットワーク2906は、ラベルなし入力内のグループ化を学習でき、どのように個々の入力が全体のデータセットに関連するかを決定できる。教師なし訓練は、自己組織化マップを生成するために使用でき、自己組織化マップは、データの次元性を低減するのに有用な演算を実行できる訓練されたニューラルネットワーク2907の一種である。教師なし訓練はまた、異常検出を実行するために使用でき、これは、データの正常なパターンから逸脱する入力データセット内のデータ点の識別を可能にする。
【0233】
教師あり訓練及び教師なし訓練に対するバリエーションも使用されてもよい。半教師あり学習は、訓練データセット2902において、同じ分布のラベルありデータとラベルなしデータとの混合物を含む技術である。増分学習(incremental learning)は、教師あり学習の変形であり、入力データは、モデルを更に訓練するために継続的に使用される。増分学習は、訓練されたニューラルネットワーク2908が、初期訓練中にネットワーク内に浸透した知識を忘れることなく、新たなデータ2912に適応することを可能にする。
【0234】
教師ありであれ教師なしであれ、特に深層ニューラルネットワークのための訓練プロセスは、単一の計算ノードにとってあまりに計算集約的になる可能性がある。単一の計算ノードを使用する代わりに、計算ノードの分散ネットワークが、訓練プロセスをアクセラレーションするために使用できる。
【0235】
図30Aは、分散学習を示すブロック図である。分散学習は、ニューラルネットワークの教師あり又は教師なし訓練を実行するために、上記のノードのような複数の分散計算ノードを使用する訓練モデルである。分散計算ノードは、1つ以上のホストプロセッサと、超並列の汎用グラフィックス処理ユニットのような汎用処理ノードのうち1つ以上とをそれぞれ含むことができる。図示のように、分散学習は、モデル並列化3002、データ並列化3004又はモデル及びデータ並列化の組み合わせで実行できる。
【0236】
モデル並列化3002では、分散システム内の異なる計算ノードは、単一のネットワークの異なる部分についての訓練計算を実行できる。例えば、ニューラルネットワークの各層は、分散システムの異なる処理ノードにより訓練できる。モデルの並列化の利点は、特に大規模なモデルにスケーリングする能力を含む。ニューラルネットワークの異なる層に関連する計算を分割することは、全ての層の重みが単一の計算ノードのメモリに適合しない非常に大きいニューラルネットワークの訓練を可能にする。いくつかの例では、モデル並列化は、大きいニューラルネットワークの教師なし訓練を実行する際に特に有用になる可能性がある。
【0237】
データ並列化3004では、分散ネットワークの異なるノードは、モデルの完全なインスタンスを有し、各ノードは、データの異なる部分を受信する。次いで、異なるノードからの結果が結合される。データ並列化に対する異なる手法が可能であるが、データ並列訓練手法は全て、結果を結合して各ノードの間でモデルパラメータを同期させる技術を必要とする。データを結合するための例示的な手法は、パラメータ平均化及び更新ベースのデータ並列化を含む。パラメータ平均化は、訓練データのサブセットに対して各ノードを訓練し、グローバルパラメータ(例えば、重み、バイアス)を各ノードからのパラメータの平均に設定する。パラメータ平均化は、パラメータデータを維持管理する中央パラメータサーバを使用する。更新ベースのデータ並列化は、ノードからパラメータサーバにパラメータを転送する代わりに、モデルへの更新が転送される点を除き、パラメータ平均化と同様である。さらに、更新ベースのデータ並列化は分散方式で実行でき、更新はノードの間で圧縮されて転送される。
【0238】
組み合わせのモデル及びデータ並列化3006は、例えば、各計算ノードが複数のGPUを含む分散システムにおいて実装できる。各ノードはモデルの完全なインスタンスを有することができ、各ノード内の別々のGPUがモデルの異なる部分を訓練するために使用される。
【0239】
分散訓練は、単一のマシンでの訓練に対して増加したオーバーヘッドを有する。しかし、ここに記載の並列プロセッサ及びGPGPUは、広帯域幅GPU間データ転送及びアクセラレーションされた遠隔データ同期を可能にするための技術を含む、分散訓練のオーバーヘッドを低減するための様々な技術をそれぞれ実装できる。
【0240】
(例示的な機械学習アプリケーション)
機械学習は、コンピュータビジョンと、自動運転及びナビゲーションと、音声認識と、言語処理とを含むが、これらに限定されない、様々な技術的問題を解決するために適用できる。従来、コンピュータビジョンは、機械学習アプリケーションのための最も活発な研究領域の1つであった。コンピュータビジョンのアプリケーションは、顔の認識のような人間の視覚能力の再現から、新たなカテゴリの視覚能力の作成までの範囲に及ぶ。例えば、コンピュータビジョンアプリケーションは、ビデオ内に見える物体において誘発される振動から音波を認識するように構成できる。並列プロセッサアクセラレーション機械学習は、コンピュータビジョンアプリケーションが以前に実現可能であったものよりもかなり大きい訓練データセットを使用して訓練されることを可能にし、推論システムが低電力並列プロセッサを使用して展開されることを可能にする。
【0241】
並列プロセッサアクセラレーション機械学習は、レーン及び道路標識認識、障害物回避、ナビゲーション及び運転制御を含む自動運転アプリケーションを有する。アクセラレーション機械学習技術は、特定の訓練入力に対する適切な応答を定義するデータセットに基づいて運転モデルを訓練するために使用できる。ここに記載の並列プロセッサは、自動運転の解決策に使用されるますます複雑なニューラルネットワークの迅速な訓練を可能にし、自動運転車両への統合に適した移動プラットフォームにおける低電力推論プロセッサの展開を可能にする。
【0242】
並列プロセッサアクセラレーション深層ニューラルネットワークは、自動音声認識(automatic speech recognition, ASR)への機械学習手法を可能にした。ASRは、入力音響系列が与えられたときに最も可能性の高い言語系列を計算する関数の生成を含む。深層ニューラルネットワークを使用したアクセラレーション機械学習は、ASRに以前使用されている隠れマルコフモデル(hidden Markov model, HMM)及びガウス混合モデル(Gaussian mixture model, GMM)の置き換えを可能にした。
【0243】
並列プロセッサアクセラレーション機械学習もまた、自然言語処理をアクセラレーションするために使用できる。自動学習手順は、誤った入力又は珍しい入力に対してロバストなモデルを生成するために、統計的推論アルゴリズムを利用できる。例示的な自然言語プロセッサアプリケーションは、人間の言語の間の自動機械翻訳を含む。
【0244】
機械学習に使用される並列処理プラットフォームは、訓練プラットフォーム及び展開プラットフォームに分割できる。訓練プラットフォームは一般的に超並列であり、マルチGPU単一ノードの訓練及びマルチノードマルチGPUの訓練をアクセラレーションするための最適化を含む。訓練に適した例示的な並列プロセッサは、ここに記載の超並列汎用グラフィックス処理ユニット及び/又はマルチGPU計算システムを含む。これに対して、展開される機械学習プラットフォームは、一般的に、カメラ、自律ロボット及び自動運転車両のような製品での使用に適した低電力並列プロセッサを含む。
【0245】
図30Bは、訓練されたモデルを使用して推論を実行するのに適した例示的な推論システムオンチップ(system on a chip, SOC)3100を示す。ここでのいずれかの他の図面のエレメントと同じ名称又は同様の名称を有する図30Bのエレメントは、他の図面のものと同じエレメントを記述し、ここで他の箇所に記載されたものと同様の方式で動作又は機能でき、同じコンポーネントを含むことができ、他のエンティティにリンクできるが、このようなものに限定されない。SOC3100は、メディアプロセッサ3102と、ビジョンプロセッサ3104と、GPGPU3106と、マルチコアプロセッサ3108とを含む処理コンポーネントを統合できる。SOC3100は、処理コンポーネントのそれぞれによりアクセス可能な共有オンチップデータプールを可能にすることができるオンチップメモリ3105を更に含むことができる。処理コンポーネントは、自動運転車両及び自律ロボットを含む様々な機械学習プラットフォームへの展開を可能にするために、低電力動作のために最適化できる。例えば、SOC3100の1つの実装は、自動運転車両のための主制御システムの一部として使用できる。SOC3100が自動運転車両での使用のために構成されるとき、SOCは、展開管轄区域の関連する機能安全参照に適合するように設計及び構成される。
【0246】
動作中に、メディアプロセッサ3102及びビジョンプロセッサ3104は、コンピュータビジョン演算をアクセラレーションするために協調して動作できる。メディアプロセッサ3102は、複数の高解像度(例えば、4K、8K)ビデオストリームの低待ち時間復号を可能にできる。復号されたビデオストリームは、オンチップメモリ3105内のバッファに書き込まれることができる。次いで、ビジョンプロセッサ3104は、復号されたビデオを解析し、訓練された画像認識モデルを使用してフレームを処理することに備えて、復号されたビデオのフレームに対して予備処理演算を実行できる。例えば、ビジョンプロセッサ3104は、高解像度ビデオデータに対して画像認識を実行するために使用されるCNNの畳み込み演算をアクセラレーションできる一方で、バックエンドモデル計算は、GPGPU3106により実行される。
【0247】
マルチコアプロセッサ3108は、データ転送の順序付け及び同期化と、メディアプロセッサ3102及びビジョンプロセッサ3104により実行される共有メモリ操作とを支援するための制御ロジックを含むことができる。マルチコアプロセッサ3108はまた、GPGPU3106の推論計算能力を利用できるソフトウェアアプリケーションを実行するためのアプリケーションプロセッサとして機能できる。例えば、ナビゲーション及び運転ロジックの少なくとも一部は、マルチコアプロセッサ3108上で実行するソフトウェアで実装できる。このようなソフトウェアは、計算ワークロードをGPGPU3106に直接発行でき、或いは、計算ワークロードは、マルチコアプロセッサ3108に発行でき、マルチコアプロセッサ3108がこれらの演算の少なくとも一部をGPGPU3106にオフロードできる。
【0248】
GPGPU3106は、超並列汎用グラフィックス処理ユニットDPLAB00内に、処理クラスタDPLAB06A~DPLAB06Hの低電力構成のような処理クラスタを含むことができる。GPGPU3106内の処理クラスタは、訓練されたニューラルネットワーク上で推論計算を実行するために特に最適化された命令をサポートできる。例えば、GPGPU3106は、8ビット及び4ビット整数ベクトル演算のような低精度計算を実行するための命令をサポートできる。
【0249】
[レイトレーシングアーキテクチャ]
1つの実装では、グラフィックスプロセッサは、リアルタイムレイトレーシングを実行するための回路及び/又はプログラムコードを含む。レイトラバーサル及び/又はレイ交差演算を含む、ここに記載の様々なレイトレーシング演算を実行するために、レイトレーシングコアの専用のセットがグラフィックスプロセッサに含まれてもよい。レイトレーシングコアに加えて、プログラム可能シェーディング演算を実行するためのグラフィックス処理コアの複数セット、及びテンソルデータに対して行列演算を実行するためのテンソルコアの複数セットもまた含まれてもよい。
【0250】
図31は、マルチコアグループ3100A~3100Nに配置されたグラフィックス処理リソースの専用セットを含む1つのこのようなグラフィックス処理ユニット(graphics processing unit, GPU)3105の例示的な部分を示す。グラフィックス処理ユニット(GPU)3105は、グラフィックスプロセッサ300、GPGPU1340及び/又はここに記載のいずれかの他のグラフィックスプロセッサの変形でもよい。したがって、グラフィックスプロセッサのいずれかの特徴の開示はまた、GPU3105との対応する組み合わせを開示するが、このようなものに限定されない。さらに、ここでのいずれかの他の図面のエレメントと同じ名称又は同様の名称を有する図31のエレメントは、他の図面のものと同じエレメントを記述し、ここで他の箇所に記載されたものと同様の方式で動作又は機能でき、同じコンポーネントを含むことができ、他のエンティティにリンクできるが、このようなものに限定されない。単一のマルチコアグループ3100Aのみの詳細が提供されるが、他のマルチコアグループ3100B-Nは、グラフィックス処理リソースの同じセット又は同様のセットを備えてもよいことが認識される。
【0251】
図示のように、マルチコアグループ2100Aは、グラフィックスコアのセット3130と、テンソルコアのセット3140と、レイトレーシングコアのセット3150とを含んでもよい。スケジューラ/ディスパッチャ241は、様々なコア3130、3140、3150上で実行するためにグラフィックススレッドをスケジューリングしてディスパッチする。レジスタファイルのセット3120は、グラフィックススレッドを実行するときにコア3130、3140、3150により使用されるオペランド値を記憶する。これらは、例えば、整数値を記憶するための整数レジスタと、浮動小数点値を記憶するための浮動小数点レジスタと、パックデータエレメント(packed data element)(整数及び/又は浮動小数点データエレメント)を記憶するためのベクトルレジスタと、テンソル/行列値を記憶するためのタイルレジスタとを含んでもよい。タイルレジスタは、ベクトルレジスタの組み合わされたセットとして実装されてもよい。
【0252】
1つ以上のレベル1(L1)キャッシュ及びテクスチャユニット3160は、テクスチャデータ、頂点データ、ピクセルデータ、光線データ、バウンディングボリュームデータ等のようなグラフィックスデータを、各マルチコアグループ3100A内にローカルに記憶する。レベル2(L2)キャッシュ3180は、マルチコアグループ3100A~3100Nの全て又はサブセットにより共有され、複数の同時グラフィックススレッドのためのグラフィックスデータ及び/又は命令を記憶する。図示のように、L2キャッシュ3180は、複数のマルチコアグループ3100A~3100Nの間で共有されてもよい。1つ以上のメモリコントローラ3170は、GPU3105を、システムメモリ(例えば、DRAM)及び/又は専用グラフィックスメモリ(例えば、GDDR6メモリ)でもよいメモリ3198に結合する。
【0253】
入出力(input/output, IO)回路3195は、GPU3105を、デジタルシグナルプロセッサ(digital signal processor, DSP)、ネットワークコントローラ又はユーザ入力デバイスのような1つ以上のI/Oデバイスに3195に結合する。オンチップ相互接続は、I/Oデバイス3190をGPU3105及びメモリ3198に結合するために使用されてもよい。IO回路3195の1つ以上のIOメモリ管理ユニット(IO memory management unit, IOMMU)3170は、IOデバイス3190をシステムメモリ3198に直接結合する。IOMMU3170は、システムメモリ3198内の物理アドレスに仮想アドレスをマッピングするために、ページテーブルの複数のセットを管理する。さらに、IOデバイス3190、CPU3199及びGPU3105は、同じ仮想アドレス空間を共有してもよい。
【0254】
IOMMU3170はまた、仮想化をサポートする。この場合、IOMMU3170は、(例えば、システムメモリ3198内で)ゲスト/グラフィックス仮想アドレスをゲスト/グラフィックス物理アドレスにマッピングするための第1のセットのページテーブルと、ゲスト/グラフィックス物理アドレスをシステム/ホスト物理アドレスにマッピングするための第2のセットのページテーブルとを管理してもよい。第1及び第2のセットのページテーブルのそれぞれのベースアドレスは、制御レジスタに記憶され、コンテキスト切り替えで交換されてもよい(例えば、それにより、新たなコンテキストが関連するセットのページテーブルへのアクセスを提供される)。図31に図示しないが、コア3130、3140、3145及び/又はマルチコアグループ3100A~3100Nのそれぞれは、ゲスト仮想対ゲスト物理変換、ゲスト物理対ホスト物理変換及びゲスト仮想対ホスト物理変換をキャッシュするためのトランスレーションルックアサイドバッファ(translation lookaside buffer, TLB)を含んでもよい。
【0255】
CPU3199、GPU3105及びIOデバイス3190は、単一の半導体チップ及び/又はチップパッケージに集積できる。図示のメモリ3198は、同じチップ上に集積されてもよく、或いは、オフチップインタフェースを介してメモリコントローラ3170に結合されてもよい。1つの実装では、メモリ3198は、他の物理システムレベルのメモリと同じ仮想アドレス空間を共有するGDDR6メモリを含むが、本発明の基礎の原理は、この特定の実装に限定されない。
【0256】
テンソルコア3140は、行列演算を実行するように特に設計された複数の実行ユニットを含み、これらは、深層学習演算を実行するために使用される基本的な計算演算である。例えば、同時行列乗算演算は、ニューラルネットワーク訓練及び推論のために使用されてもよい。テンソルコア3140は、単精度浮動小数点(例えば、32ビット)、半精度浮動小数点(例えば、16ビット)、整数ワード(16ビット)、バイト(8ビット)及び半バイト(4ビット)を含む様々なオペランド精度を使用して行列処理を実行してもよい。ニューラルネットワークの実装はまた、高品質の最終画像を構築するために、複数のフレームからの詳細を潜在的に組み合わせて、それぞれのレンダリングされたシーンの特徴を抽出してもよい。
【0257】
深層学習の実装では、並列行列乗算作業がテンソルコア3140上で実行されるようにスケジューリングされてもよい。ニューラルネットワークの訓練は、特に、かなりの数の行列ドット積演算を必要とする。N×N×N行列乗算の内積の式を処理するために、テンソルコア3140は、少なくともN個のドット積処理エレメントを含んでもよい。行列乗算が始まる前に、1つの全体の行列がタイルレジスタにロードされ、第2の行列の少なくとも1つの列が、Nサイクルのサイクル毎にロードされる。サイクル毎に、処理されるN個のドット積が存在する。
【0258】
行列要素は、16ビットワード、8ビットバイト(例えば、INT8)及び4ビット半バイト(例えば、INT4)を含む、特定の実装に依存して異なる精度で記憶されてもよい。異なるワークロード(例えば、バイト及び半バイトへの量子化に耐えることができる推論ワークロード等)に最も効率的な精度が使用されることを確保するために、異なる精度モードがテンソルコア3140に指定されてもよい。
【0259】
レイトレーシングコア3150は、リアルタイムレイトレーシング及び非リアルタイムレイトレーシング実装の双方についてのレイトレーシング演算をアクセラレーションするために使用されてもよい。特に、レイトレーシングコア3150は、バウンディングボリューム階層(bounding volume hierarchy, BVH)を使用してレイトラバーサルを実行し、BVHボリューム内に囲まれた光線とプリミティブとの間の交差を識別するためのレイトラバーサル/交差回路を含んでもよい。レイトレーシングコア3150はまた、デプステスト及びカリングを実行する(例えば、Zバッファ又は同様の構成を使用する)ための回路を含んでもよい。一実施形態では、レイトレーシングコア3150は、ここに記載の画像ノイズ除去技術と協調してトラバーサル及び交差演算を実行し、その少なくとも一部は、テンソルコア3140上で実行されてもよい。例えば、テンソルコア3140は、レイトレーシングコア3150により生成されたフレームのノイズ除去を実行するために、深層学習ニューラルネットワークを実装してもよい。しかし、CPU3199、グラフィックスコア3130及び/又はレイトレーシングコア3150はまた、ノイズ除去及び/又は深層学習アルゴリズムの全部又は一部を実装してもよい。
【0260】
さらに、上記のように、ノイズ除去のための分散手法が使用されてもよく、GPU3150がネットワーク又は高速相互接続上で他の計算デバイスに結合された計算デバイス内にある。相互接続された計算デバイスは、異なるタイプの画像フレーム及び/又は異なるグラフィックスアプリケーションについて全体のシステムがノイズ除去を実行することを学習する速度を改善するために、ニューラルネットワーク学習/訓練データを更に共有してもよい。
【0261】
レイトレーシングコア3150は、全てのBVHトラバーサル及び光線-プリミティブ交差を処理してもよく、グラフィックスコア3130が光線毎に数千の命令で過負荷になるのを防ぐ。各レイトレーシングコア3150は、バウンディングボックステスト(例えば、トラバーサル演算のため)を実行するための第1のセットの特殊回路と、光線-トライアングル交差テスト(例えば、トラバースされた交差する光線)を実行するための第2のセットの特殊回路とを含んでもよい。したがって、マルチコアグループ3100Aは、単に光線プローブ(ray probe)を起動でき、レイトレーシングコア3150は、独立してレイトラバーサル及び交差を実行し、ヒットデータ(例えば、ヒット(hit)、ノーヒット(no hit)、複数ヒット(multiple hits)等)をスレッドコンテキストに戻す。他のコア3130、3140は、レイトレーシングコア3150がトラバーサル及び交差演算を実行する間に、他のグラフィックスを実行するか或いは作業を計算するために解放されてもよい。
【0262】
各レイトレーシングコア3150は、BVHテスト演算を実行するためのトラバーサルユニットと、光線-プリミティブ交差テストを実行する交差ユニットとを含んでもよい。次いで、交差ユニットは「ヒット」、「ノーヒット」、又は「マルチヒット」応答を生成してもよく、それを適切なスレッドに提供する。トラバーサル及び交差演算の間に、他のコア(例えば、グラフィックスコア3130及びテンソルコア3140)の実行リソースは、他の形式のグラフィックス作業を実行するために解放されてもよい。
【0263】
作業がグラフィックスコア3130とレイトレーシングコア3150との間で分散されるハイブリッドラスタライズ/レイトレーシング(hybrid rasterization/ray tracing)手法も使用されてもよい。
【0264】
レイトレーシングコア3150(及び/又は他のコア3130、3140)は、DispatchRaysコマンドを含むMicrosoftのDXR(DirectX Ray Tracing)のようなレイトレーシング命令セット並びに光線生成シェーダ、クローゼストヒット(closest-hit)シェーダ、エニーヒット(any-hit)シェーダ及びミス(miss)シェーダのハードウェアサポートを含んでもよく、各オブジェクトのためにシェーダ及びテクスチャの固有のセットの割り当てを可能にする。レイトレーシングコア3150、グラフィックスコア3130及びテンソルコア3140によりサポートされ得る他のレイトレーシングプラットフォームは、Vulkan 1.1.85である。しかし、本発明の基礎の原理は、特定のレイトレーシングISAに限定されない点に留意すべきである。
【0265】
一般的に、様々なコア3150、3140、3130は、光線生成、クローゼストヒット、エニーヒット、光線-プリミティブ交差、プリミティブ毎及び階層バウンディングボックス構築、ミス、ビジット及び例外の命令/機能を含むレイトレーシング命令セットをサポートしてもよい。より具体的には、以下の機能を実行するためのレイトレーシング命令が含まれることができる。
【0266】
光線生成(Ray Generation) - 光線生成命令は、各ピクセル、サンプル又は他のユーザ定義の作業割り当てについて実行されてもよい。
【0267】
クローゼストヒット(Closest-Hit) - クローゼストヒット命令は、シーン内のプリミティブとの光線の最も近い交差点を見つけるために実行されてもよい。
【0268】
エニーヒット(Any-Hit) - エニーヒット命令は、潜在的に新たな最も近い交差点を識別するために、シーン内で光線とプリミティブとの間の複数の交差を識別する。
【0269】
交差(Intersection) - 交差命令は、光線-プリミティブ交差テストを実行し、結果を出力する。
【0270】
プリミティブ毎バウンディングボックス構築(Per-primitive Bounding box Construction) - この命令は、所与のプリミティブ又はプリミティブのグループの周囲にバウンディングボックスを構築する(例えば、新たなBVH又は他のアクセラレーションデータ構造を構築するとき)。
【0271】
ミス(Miss) - 光線がシーン内の全てのジオメトリ又はシーンの指定の領域をミスすることを示す。
【0272】
ビジット(Visit) - 光線が通過する子ボリュームを示す。
【0273】
例外(Exceptions) - 様々なタイプの例外ハンドラ(例えば、様々なエラー条件で呼び出される)を含む。
【0274】
[階層的ビームトレーシング]
バウンディングボリューム階層は、演算がグラフィックスプリミティブ及び他のグラフィックスオブジェクトに対して実行される効率を改善するために一般的に使用される。BVHは、ジオメトリックオブジェクトのセットに基づいて構築された階層ツリー構造である。ツリー構造の最上部は、所与のシーン内のジオメトリックオブジェクトの全てを囲むルートノードである。個々のジオメトリックオブジェクトは、ツリーのリーフノードを形成するバウンディングボリュームに囲まれる。次いで、これらのノードは、小さいセットとしてグループ化され、より大きいバウンディングボリューム内に囲まれる。次に、これらはまた、再帰的にグループ化され、他のより大きいバウンディングボリューム内に囲まれ、最終的に、ツリーの最上部においてルートノードにより表される単一のバウンディングボリュームを有するツリー構造を生じる。バウンディングボリューム階層は、レイトレーシングで使用される衝突検出(collision detection)、プリミティブカリング(primitive culling)及びレイトラバーサル/交差演算のような、ジオメトリックオブジェクトのセットに対する様々な演算を効率的にサポートするために使用される。
【0275】
レイトレーシングアーキテクチャでは、光線は、光線-プリミティブ交差を決定するために、BVHを通じてトラバースされる。例えば、光線がBVHのルートノードを通過しない場合、その光線は、BVHにより囲まれるプリミティブのいずれとも交差せず、このプリミティブのセットに関して、光線のための更なる処理は必要とされない。光線がBVHの第1の子ノードを通過するが、第2の子ノードを通過しない場合、光線は第2の子ノードにより囲まれたプリミティブに対してテストされる必要はない。このように、BVHは、光線-プリミティブ交差をテストするための効率的な機構を提供する。
【0276】
「ビーム(beam)」と呼ばれる連続する光線のグループは、個々の光線ではなく、BVHに対してテストされてもよい。図32は、4つの異なる光線により概略的に示される例示的なビーム3201を示す。4つの光線により定義されるパッチ3200と交差するいずれかの光線は、同じビーム内にあると考えられる。図32におけるビーム3201は、光線の矩形配置により規定されるが、ビームは、本発明の基礎の原理に依然として従いつつ、様々な他の方法で規定されてもよい(例えば、円、楕円等)。
【0277】
図33は、どのようにGPU3320のレイトレーシングエンジン3310が、ここに記載のビームトレーシング技術を実装するかを示す。特に、光線生成回路3304は、トラバーサル及び交差演算が実行される複数の光線を生成する。しかし、個々の光線に対してトラバーサル及び交差演算を実行するのではなく、トラバーサル及び交差演算は、ビーム階層構築回路3305により生成されたビーム3307の階層を使用して実行される。ビーム階層は、バウンディングボリューム階層(bounding volume hierarchy, BVH)と同様である。例えば、図34は、複数の異なる成分に細分されてもよい一次ビーム3400の例を提供する。特に、一次ビーム3400は、四半分(quadrant)3401~3404に分割されてもよく、各四半分自体は、四半分3404内の部分四半分(sub-quadrant)A~Dのような部分四半分に分割されてもよい。一次ビームは、様々な方法で細分されてもよい。例えば、一次ビームは(四半分ではなく)半分に分割されてもよく、各半分が半分に分割されてもよく、以下同様である。どのように細分が行われるかにかかわらず、階層構造は、BVHと同様に、例えば、一次ビーム3400を表すルートノード、第1レベルの子ノード(それぞれが四半分3401~3404により表される)、部分四半分A~D毎の第2レベルの子ノード等で生成される。
【0278】
ビーム階層3307が構成されると、トラバーサル/交差回路3306は、ビーム階層3307及びBVH3308を使用してトラバーサル/交差演算を実行してもよい。特に、BVHに対してビームをテストし、BVHのどの部分とも交差しないビームの部分をカリングしてもよい。図34に示すデータを使用して、例えば、サブ領域3402及び3403に関連するサブビームがBVH又はBVHの特定の分岐と交差しない場合、これらは、BVH又は分岐に関してカリングされてもよい。残りの部分3401、3404は、デプス優先検索(depth-first search)又は他の検索アルゴリズムを実行することにより、BVHに対してテストされてもよい。
【0279】
レイトレーシングのための方法が図35に示されている。当該方法は、上記のグラフィックス処理アーキテクチャのコンテキスト内で実装されてもよいが、いずれかの特定のアーキテクチャに限定されない。
【0280】
3500において、複数の光線を含む一次ビームが構築され、3501において、ビームが細分され、ビーム階層を作成するように階層的データ構造が生成される。動作3500~3501は、複数の光線からビーム階層を構築する単一の統合された動作として実行されてもよい。3502において、ビーム階層は、(ビーム階層からの)光線及び/又はBVHからのノード/プリミティブをカリングするためにBVHと共に使用される。3503において、残りの光線及びプリミティブについて光線-プリミティブ交差が決定される。
【0281】
[分散レイトレーシングシステムにおける非可逆及び可逆パケット圧縮]
レイトレーシング演算は、ネットワーク上で一緒に結合された複数の計算ノードの間で分散されてもよい。例えば、図36は、複数のレイトレーシングノード3610~3613を含むレイトレーシングクラスタ3600が並列にレイトレーシング演算を実行し、潜在的にノードのうち1つにおいて結果を結合することを示す。図示のアーキテクチャでは、レイトレーシングノード3610~3613は、ゲートウェイを介してクライアント側レイトレーシングアプリケーション3630に通信可能に結合される。
【0282】
分散アーキテクチャの課題の1つは、レイトレーシングノード3610~3613のそれぞれの間で送信されなければならない大量のパケット化データである。可逆圧縮技術及び非可逆圧縮技術の双方がレイトレーシングノード3610~3613の間で送信されるデータを低減するために使用されてもよい。
【0283】
可逆圧縮を実装するために、特定のタイプの演算の結果で満たされたパケットを送信するのではなく、受信ノードが結果を再構築することを可能にするデータ又はコマンドが送信される。例えば、確率的にサンプリングされた領域光(area lights)及びアンビエントオクルージョン(ambient occlusion, AO)演算は、必ずしも方向を必要としない。したがって、送信ノードは単にランダムシードを送信でき、次いで、ランダムシードは受信ノードによりランダムサンプリングを実行するために使用される。例えば、シーンがノード3610~3612の間で分散されている場合、点p1~p3において光1をサンプリングするために、光ID及び始点(origin)のみがノード3610~3612に送信される必要がある。次いで、各ノードは、光を独立して確率的にサンプリングしてもよい。ランダムシードは、受信ノードにより生成されてもよい。同様に、一次光線ヒットポイント(primary ray hit point)についても、アンビエントオクルージョン(AO)及びソフトシャドウサンプリングは、連続するフレームについて元の点を待機することなく、ノード3610~3612上で計算できる。さらに、光線のセットが同じ点の光源に行くことが知られている場合、光源を識別する命令が受信ノードに送信されてもよく、受信ノードがそれを光線のセットに適用する。他の例として、単一の点を透過するN個のアンビエントオクルージョン光線が存在する場合、この点からN個のサンプルを生成するためのコマンドが送信されてもよい。
【0284】
様々な更なる技術が非可逆圧縮のために適用されてもよい。例えば、量子化係数は、BVH、プリミティブ及び光線に関連する全ての座標値を量子化するために使用されてもよい。さらに、BVHノード及びプリミティブのようなデータに使用される32ビット浮動小数点値は8ビット整数値に変換されてもよい。例示的な実装では、光線パケットのバウンドは完全な精度で記憶されるが、個々の光線点P1~P3は、バウンドへのインデックス付きのオフセットとして送信される。同様に、8ビット整数値をローカル座標として使用する複数のローカル座標系が生成されてもよい。これらのローカル座標系のそれぞれの始点の位置は、グローバル及びローカル座標系を効果的に接続して、完全な精度(例えば、32ビット浮動小数点)値を使用して符号化されてもよい。
【0285】
以下は可逆圧縮の例である。レイトレーシングプログラムの内部で使用される光線データフォーマットの例は以下の通りである。
struct Ray
{
uint32 pixId;
uint32 materialID;
uint32 instanceID;
uint64 primitiveID;
uint32 geometryID;
uint32 lightID;
float origin[3];
float direction[3];
float t0;
float t;
float time;
float normal[3]; //used for geometry intersections
float u;
float v;

float wavelength;
float phase; //Interferometry
float refractedOffset; //Schlieren-esque
float amplitude;
float weight;
};
生成された各ノードの生データを送信する代わりに、このデータは値をグループ化し、可能な場合には適用可能なメタデータを使用して暗示的な光線を作成することにより圧縮できる。
【0286】
(光線データのバンドリング及びグループ化)
フラグは、修飾子(modifier)を有する共通のデータ又はマスクに使用されてもよい。
struct RayPacket
{
uint32 size;
uint32 flags;
list<Ray> rays;
}
例えば、
RayPacket.rays=ray_1~ray_256
(始点は全て共有される)
単一の始点のみが全ての光線の間で記憶されることを除いて、全ての光線データはパックされる。RAYPACKET_COMMON_ORIGINについてRayPacket.flagsが設定される。受信したときにRayPacketがアンパック(unpack)された場合、始点は単一の始点値から埋め込まれる。
【0287】
(始点はいくつかの光線の間でのみ共有される)
始点を共有する光線を除いて、全ての光線データはパックされる。各グループの一意の共有の始点について、演算(共有の始点)を識別し、始点を記憶し、どの光線が情報を共有するかをマスクする演算子がパックされる。このような演算は、マテリアルID、プリミティブID、始点、方向、法線等のようなノードの間でのいずれかの共有された値に対して行われることができる。
struct RayOperation
{
uint8 operationID;
void* value;
uint64 mask;
}
(暗示的な光線の送信)
しばしば、光線データは、それを生成するために使用される最小限のメタ情報によって受信端で導出できる。非常に一般的な例は、領域を確率的にサンプリングするために複数の二次光線を生成することである。送信側が二次光線を生成してそれを送信して受信側がそれに対して動作する代わりに、送信側は、光線がいずれかの従属情報と共に生成される必要があるコマンドを送信でき、光線は受信端において生成される。光線が送信側により最初に生成され、どの受信側にそれを送信するかを決定する必要がある場合、光線が生成され、正確に同じ光線が再生成されるためにランダムシードが送信できる。
【0288】
例えば、面光源(area light source)をサンプリングする64個のシャドウ光線でヒットポイントをサンプリングするために、全ての64個の光線は同じ計算N4からの領域と交差する。共通の始点及び法線を有するRayPacketが作成される。結果のピクセルの寄与をシェードにするように受信側に望む場合、より多くのデータが送信されてもよいが、この例では光線が他のノードデータにヒットするか否かのみを返すことを望むと仮定する。RayOperationは、生成シャドウ光線演算について作成され、サンプリングされる光IDの値と乱数シードが割り当てられる。N4が光線パケットを受信したとき、元の送信側が生成したのと同じ光線を生成するために、共有の始点データを全ての光線に埋め込み、乱数シードで確率的にサンプリングされた光線IDに基づいて方向を設定することにより、完全に埋め込まれた光線データを生成する。結果が返されるとき、全ての光線についてのバイナリ結果のみが返される必要があり、これは光線に対するマスクにより扱われることができる。
【0289】
この例で元の64個の光線を送信することは、104バイト×64光線=6656バイトを使用したことになる。戻ってくる光線が同様に生の形式で送信された場合、これもまた2倍の13312バイトになる。共通の光線の始点と、法線と、シード及びIDでの光線生成演算のみを送信することで可逆圧縮を使用すると、29バイトのみが、交差したマスクについて返される8バイトと共に送信される。これは、~360:1のネットワーク上で送信される必要のあるデータ圧縮レートを生じる。これはメッセージ自体を処理するためのオーバーヘッドを含まず、メッセージは何らかの方法で識別される必要があるが、それは実装に依存する。一次光線についてピクセルIDから光線の起点及び方向を再計算するため、光線パケット内の範囲に基づいてピクセルIDを再計算するため、及び値の再計算のための多くの他の可能な実装のために、他の演算が行われてもよい。同様の演算は、パストレースにおけるシャドウ、反射、屈折、アンビエントオクルージョン、交差、ボリューム交差、シャドウイング、跳ね返り反射(bounced reflection)等を含む、送信されるいずれかの単一の光線又は光線のグループに使用できる。
【0290】
図37は、レイトレーシングパケットの圧縮及び伸張を実行する2つのレイトレーシングノード3710~3711についての更なる詳細を示す。特に、第1のレイトレーシングエンジン3730がデータを第2のレイトレーシングエンジン3731に送信する準備ができたとき、光線圧縮回路3720は、ここに記載のように、レイトレーシングデータの非可逆圧縮及び/又は可逆圧縮を実行する(例えば、32ビット値を8ビット値に変換すること、データを再構築するための命令の代わりに生データを用いることなど)。圧縮された光線パケット3701は、ローカルネットワーク(例えば、10Gb/s、100Gb/sイーサネットネットワーク)上でネットワークインタフェース3725からネットワークインタフェース3726に送信される。次いで、必要に応じて、光線伸張回路は光線パケットを伸張する。例えば、これは、レイトレーシングデータを再構築するためのコマンドを実行してもよい(例えば、照明演算のためのランダムサンプリングを実行するためにランダムシードを使用する)。次いで、レイトレーシングエンジン3731は、レイトレーシング演算を実行するために受信データを使用する。
【0291】
逆方向では、光線圧縮回路3741は光線データを圧縮し、ネットワークインタフェース3726はネットワーク上で圧縮光線データを送信し(例えば、ここに記載の技術を使用する)、光線圧縮解除回路3740が必要に応じて光線データを伸張し、レイトレーシングエンジン3730はレイトレーシング演算においてデータを使用する。図37において別個のユニットとして示されているが、光線伸張回路3740~3741は、それぞれレイトレーシングエンジン3730~3731内に統合されてもよい。例えば、圧縮された光線データが光線データを再構築するコマンドを含む限りにおいて、これらのコマンドは、それぞれのレイトレーシングエンジン3730-3731により実行されてもよい。
【0292】
図38に示すように、光線圧縮回路3720は、ここに記載の非可逆圧縮技術を実行する(例えば、32ビット浮動小数点座標を8ビット整数座標に変換する)ための非可逆圧縮回路3801と、可逆圧縮技術を実行する(例えば、光線再圧縮回路3821がデータを再構築することを可能にするためのコマンド及びデータを送信する)可逆圧縮回路3803とを含んでもよい。光線伸張回路3721は、非可逆伸張回路3802と、可逆伸張を実行するための可逆伸張回路3804とを含む。
【0293】
他の例示的な方法が図39に示されている。当該方法は、レイトレーシングアーキテクチャ又はここに記載の他のアーキテクチャ上に実装されてもよいが、いずれか特定のアーキテクチャに限定されない。
【0294】
3900において、第1のレイトレーシングノードから第2のレイトレーシングノードに送信される光線データが受信される。3901において、非可逆圧縮回路は、第1のレイトレーシングデータに対して非可逆圧縮を実行し、3902において、可逆圧縮回路は、第2のレイトレーシングデータに対して可逆圧縮を実行する。3903において、圧縮されたレイトレーシングデータは、第2のレイトレーシングノードに送信される。3904において、非可逆/可逆伸張回路は、レイトレーシングデータの非可逆/可逆伸張を実行し、3905において、第2のレイトレーシングノードは、伸張データを使用してレイトレーシング演算を実行する。
【0295】
[ハードウェアアクセラレーションされたハイブリッドレイトレーシングを用いたグラフィックスプロセッサ]
次に、グラフィックスコア3130上でラスタライズを実行し、レイトレーシングコア3150、グラフィックスコア3130及び/又はCPU3199コア上でレイトレーシング演算を実行するハイブリッドレンダリングパイプラインが提示される。例えば、ラスタライザ及びデプステストは、一次光線キャスティング段階の代わりにグラフィックスコア3130上で実行されてもよい。次いで、レイトレーシングコア3150は、光線反射、屈折及びシャドウのために二次光線を生成してもよい。さらに、レイトレーシングコア3150がレイトレーシング演算(例えば、高反射率レベルのようなマテリアル特性閾値に基づく)を実行するシーンの特定の領域が選択され、シーンの他の領域は、グラフィックスコア3130上のラスタライズでレンダリングされる。このハイブリッド実装は、待ち時間が重要な問題であるリアルタイムレイトレーシングアプリケーションに使用されてもよい。
【0296】
以下に説明するレイトラバーサルアーキテクチャは、例えば、専用のハードウェアを使用してBVHトラバーサル及び/又は交差のような重要な機能をアクセラレーションしつつ、既存の単一命令複数データ(single instruction multiple data, SIMD)及び/又は単一命令複数スレッド(single instruction multiple thread, SIMT)グラフィックスプロセッサを使用して、レイトラバーサルのプログラム可能なシェーディング及び制御を実行してもよい。非コヒーレントパス(incoherent path)のSIMD占有率は、トラバーサルの間且つシェーディングの前の特定のポイントで生成されたシェーダを再グループ化することにより改善され得る。これは、オンチップでシェーダを動的にソートする専用ハードウェアを使用して達成される。再帰(recursion)は、改善されたSIMD占有率のために、実行前に継続(continuation)を戻して再グループ化する際に実行する継続に関数を分割することにより管理される。
【0297】
レイトラバーサル/交差のプログラム可能制御は、トラバーサル機能を、固定機能ハードウェアとして実装できる内部トラバーサルと、GPUプロセッサ上で実行してユーザ定義のトラバーサルシェーダを通じてプログラム可能制御を可能にする外部トラバーサルとに分解することにより達成される。ハードウェアとソフトウェアの間でトラバーサルコンテキストを転送するコストは、内部トラバーサルと外部トラバーサルとの間の遷移中に内部トラバース状態を保守的に切り捨てることにより低減される。
【0298】
レイトレーシングのプログラム可能制御は、以下の表Aにリストされている異なるシェーダタイプを通じて表現できる。タイプ毎に複数のシェーダが存在できる。例えば、各マテリアルは異なるヒットシェーダを有することができる。
【0299】
【表1】
再帰型レイトレーシングは、一次光線のための光線-シーン交差を生成できる一次シェーダ又は交差回路のセットを開始するようにグラフィックスプロセッサに命令するAPI機能により開始されてもよい。次に、これは、トラバーサルシェーダ、ヒットシェーダ又はミスシェーダのような他のシェーダを生成する。子シェーダを生成するシェーダはまた、その子シェーダから戻り値を受信できる。呼び出し可能(callable)シェーダは、他のシェーダにより直接生成できる汎用関数であり、また、値を呼び出し側シェーダに返すこともできる。
【0300】
図40は、シェーダ実行回路4000と固定機能回路4010とを含むグラフィックス処理アーキテクチャを示す。汎用実行ハードウェアサブシステムは、複数の単一命令複数データ(single instruction multiple data, SIMD)及び/又は単一命令複数スレッド(single instructions multiple threads, SIMT)コア/実行ユニット(execution unit, EU)4001(すなわち、各コアは複数の実行ユニットを含んでもよい)と、1つ以上のサンプラ4002と、レベル1(L1)キャッシュ4003又は他の形式のローカルメモリとを含む。固定機能ハードウェアサブシステム4010は、メッセージユニット4004と、スケジューラ4007と、光線BVHトラバーサル/交差回路4005と、ソート回路4008と、ローカルL1キャッシュ4006とを含む。
【0301】
動作中に、一次ディスパッチャ4009は、一次光線のセットをスケジューラ4007にディスパッチし、スケジューラ4007は、作業をSIMD/SIMTコア/EU4001上で実行されるシェーダにスケジューリングする。SIMDコア/EU4001は、上記の光線トレーシングコア3150及び/又はグラフィックスコア3130でもよい。一次シェーダの実行は、実行されるべき更なる作業(例えば、1つ以上の子シェーダ及び/又は固定機能ハードウェアにより実行されるべき更なる作業)を生成する。メッセージユニット4004は、SIMDコア/EU4001により生成された作業をスケジューラ4007に分配し、必要に応じてフリースタックプール(free stack pool)、ソート回路4008又は光線-BVH交差回路4005にアクセスする。更なる作業がスケジューラ4007に送信された場合、これはSIMD/SIMTコア/EU4001での処理のためにスケジューリングされる。スケジューリングの前に、ソート回路4008は、ここに記載のように、光線をグループ又はビンにソートしてもよい(例えば、同様の特徴を有する光線をグループ化する)。光線-BVH交差回路4005は、BVHボリュームを使用して光線の交差テストを実行する。例えば、光線-BVHの交差回路4005は、光線が交差するボリュームを識別するために、光線座標を各レベルのBVHと比較してもよい。
【0302】
シェーダは、シェーダレコードと、エントリ関数へのポインタを含むユーザ割り当て構造と、ベンダ固有のメタデータと、SIMDコア/EU4001により実行されるシェーダへのグローバル引数とを使用して参照できる。シェーダの各実行インスタンスは、親シェーダと子シェーダとの間で渡される引数を記憶するために使用されてもよいコールスタックに関連付けられる。コールスタックはまた、コールリターン時に実行される継続関数への参照を記憶してもよい。
【0303】
図41は、一次シェーダスタック、ヒットシェーダスタック、トラバーサルシェーダスタック、継続機能スタック及び光線-BVH交差スタックを含む(これらは、記載のように、固定機能ハードウェア4010により実行されてもよい)、割り当てられたスタック4101の例示的なセットを示す。新たなシェーダの呼び出しは、フリースタックプール4102から新たなスタックを実装してもよい。コールスタック、例えば、割り当てられたスタックのセットにより構成されるスタックは、アクセスの待ち時間を低減するために、ローカルL1キャッシュ4003、4006内にキャッシュされてもよい。
【0304】
限られた数のコールスタックが存在してもよく、それぞれが、メモリの連続した領域に割り当てられた固定の最大サイズの「Sstack」を有する。したがって、スタックのベースアドレスは、スタックインデックス(stack index, SID)からベースアドレス=SID*Sstackとして直接計算できる。スタックIDは、作業をSIMDコア/EU4001にスケジューリングするときにスケジューラ4007により割り当てられて割り当て解除されてもよい。
【0305】
一次ディスパッチャ4009は、ホスト(例えば、CPU)からのディスパッチコマンドに応じて一次シェーダをディスパッチするグラフィックスプロセッサコマンドプロセッサを含んでもよい。スケジューラ4007はこれらのディスパッチ要求を受信してもよく、SIMDレーン毎にスタックIDを割り当てることができる場合、SIMDプロセッサスレッド上でプライマリシェーダを開始する。スタックIDは、ディスパッチコマンドの開始時に初期化されたフリースタックプール4102から割り当てられてもよい。
【0306】
実行中のシェーダは、生成メッセージをメッセージユニット4004に送信することにより、子シェーダを生成できる。このコマンドは、シェーダに関連するスタックIDを含み、また、アクティブなSIMDレーン毎に子シェーダレコードへのポインタも含む。親シェーダは、アクティブなレーンについて1回のみ、このメッセージを発行できる。全ての関連するレーンについて生成メッセージを送信した後に、親シェーダは終了してもよい。
【0307】
SIMDコア/EU4001上で実行されるシェーダはまた、固定機能ハードウェアのために予約されたシェーダレコードポインタによって生成メッセージを使用して、光線-BVH交差のような固定機能タスクを生成できる。上記のように、メッセージユニット4004は、生成された光線-BVH交差作業を固定機能光線-BVH交差回路4005に送信し、呼び出し可能シェーダをソート回路4008に直接送信する。ソート回路は、同様の特性を有するSIMDバッチを導出するために、シェーダレコードポインタによりシェーダをグループ化してもよい。したがって、異なる親シェーダからのスタックIDは、ソート回路4008により同じバッチ内にグループ化できる。ソート回路4008は、グループ化されたバッチをスケジューラ4007に送信し、スケジューラ4007は、グラフィックスメモリ2511又はラストレベルキャッシュ(last level cache, LLC)4020からシェーダレコードにアクセスし、プロセッサスレッド上でシェーダを開始する。
【0308】
継続は、呼び出し可能シェーダとして扱われてもよく、また、シェーダレコードを通じて参照されてもよい。子シェーダが生成されて値を親シェーダに返すとき、継続シェーダレコードへのポインタは、コールスタック4101上でプッシュされてもよい。子シェーダが返したとき、継続シェーダレコードは、コールスタック4101からポップされ、継続シェーダが生成されてもよい。任意選択で、生成された継続は、呼び出し可能シェーダと同様にソートユニットを通過し、プロセッサスレッド上で開始されてもよい。
【0309】
図42に示すように、ソート回路4008は、シェーディングのためのSIMDバッチを作成するために、シェーダレコードポインタ4201A、4201B、4201nにより生成されたタスクをグループ化する。ソートされたバッチ内のスタックID又はコンテキストIDは、異なるディスパッチ及び異なる入力SIMDレーンからグループ化できる。グループ化回路4210は、タグ4201で識別される各エントリを有する複数のエントリを含むコンテンツアドレス指定可能メモリ(content addressable memory, CAM)構造4201を使用して、ソートを実行してもよい。上記のように、タグ4201は対応するシェーダレコードポインタ4201A、4201B、4201nでもよい。CAM構造4201は、シェーダレコードポインタに対応する不完全なSIMDバッチにそれぞれ関連する限られた数のタグ(例えば、32、64、128等)を記憶してもよい。
【0310】
入来する生成コマンドについて、各SIMDレーンは、対応するスタックID(各CAMエントリにおいて16個のコンテキストID0~15として示される)と、シェーダレコードポインタ4201A~B,...n(タグ値として機能する)とを有する。グループ化回路4210は、一致するバッチを見つけるために、各レーンのシェーダレコードポインタをCAM構造4201内のタグ4201と比較してもよい。一致するバッチが見つかった場合、スタックID/コンテキストIDはバッチに追加されてもよい。そうでない場合、新たなシェーダレコードポインタタグを有する新たなエントリが作成されてもよく、場合によっては、不完全なバッチの古いエントリを排除する。
【0311】
実行中のシェーダは、割り当て解除メッセージをメッセージユニットに送信することにより、空のときにコールスタックを割り当て解除できる。割り当て解除メッセージはスケジューラに中継され、スケジューラは、アクティブなSIMDレーンのスタックID/コンテキストIDをフリープールに返す。
【0312】
固定機能レイトラバーサルとソフトウェアレイトラバーサルとの組み合せを使用したレイトラバーサル演算のためのハイブリッド手法が提示される。したがって、これは、固定機能トラバーサルの効率を維持しつつ、ソフトウェアトラバーサルの柔軟性を提供する。図43は、ハイブリッドトラバーサルに使用され得るアクセラレーション構造を示しており、これは、単一の最上位レベルBVH4300と、いくつかの下位レベルBVH4301及び4302とを有する2レベルのツリーである。内部トラバーサルパス4303と、外部トラバーサルパス4304と、トラバーサルノード4305と、トライアングルを有するリーフノード4306と、カスタムプリミティブを有するリーフノード4307とを示すためのグラフエレメントは、右側に示される。
【0313】
最上位レベルBVH4300においてトライアングルを有するリーフノード4306は、トライアングル、カスタムプリミティブの交差シェーダレコード又はトラバーサルシェーダレコードを参照できる。下位レベルBVH4301~4302のトライアングルを有するリーフノード4306は、トライアングル及びカスタムプリミティブの交差シェーダレコードのみを参照できる。参照のタイプは、リーフノード4306内で符号化される。内部トラバーサル4303は、各BVH4300~4302内のトラバーサルを示す。内部トラバーサル演算は、光線-BVH交差の計算を含み、BVH構造4300~4302の間のトラバーサルは、外部トラバーサルとして知られている。内部トラバーサル演算は固定機能ハードウェアで効率的に実装できるが、外部トラバーサル演算はプログラム可能シェーダによって許容可能な性能で実行できる。したがって、内部トラバーサル演算は固定機能回路4010を使用して実行されてもよく、外部トラバーサル演算は、プログラム可能シェーダを実行するためのSIMD/SIMTコア/EU4001を含むシェーダ実行回路4000を使用して実行されてもよい。
【0314】
SIMD/SIMTコア/EU4001は、場合によっては簡潔にするために、ここでは「コア」、「SIMDコア」、「EU」又は「SIMDプロセッサ」と単に呼ばれる点に留意すべきである。同様に、光線-BVHトラバーサル/交差回路4005は、場合によっては「トラバーサルユニット」、「トラバーサル/交差ユニット」又は「トラバーサル/交差回路」と単に呼ばれる。代替の用語が使用されるとき、それぞれの回路/ロジックを指定するために使用される特定の名称は、ここに記載のように、回路/ロジックが実行する基礎の機能を変更するものではない。
【0315】
さらに、説明の目的で、図40において単一のコンポーネントとして示されているが、トラバーサル/交差ユニット4005は、別個のトラバーサルユニット及び別個の交差ユニットを含んでもよく、これらのそれぞれは、ここに記載のように回路及び/又はロジックに実装されてもよい。
【0316】
光線が内部トラバーサルの間にトラバーサルノードと交差するとき、トラバーサルシェーダが生成されてもよい。ソート回路4008は、SIMDバッチを作成するために、これらのシェーダをシェーダレコードポインタ4201A~4201B、nによりグループ化してもよく、SIMDバッチは、グラフィックスSIMDコア/EU4001上でのSIMD実行のためにスケジューラ4007により開始される。トラバーサルシェーダはいくつかの方法でトラバーサルを変更でき、広範囲の用途を可能にする。例えば、トラバーサルシェーダは、より粗い詳細レベル(coarser level of detail, LOD)でBVHを選択でき、或いは、リジッドボディ(rigid body)変換を可能にするように光線を変換できる。次いで、トラバーサルシェーダは、選択されたBVHについて内部トラバーサルを生成してもよい。
【0317】
内部トラバーサルは、BVHをトラバースして光線-ボックス及び光線-トライアングル交差を計算することにより、レイ-BVH交差を計算する。内部トラバーサルは、メッセージをメッセージ回路4004に送信することにより、シェーダと同じ方法で生成され、メッセージ回路4004は、対応する生成メッセージを、光線-BVH交差を計算する光線-BVH交差回路4005に中継する。
【0318】
内部トラバーサルのためのスタックは、固定機能回路4010内(例えば、L1キャッシュ4006内)にローカルに記憶されてもよい。光線がトラバーサルシェーダ又は交差シェーダに対応するリーフノードと交差するとき、内部トラバーサルは終了し、内部スタックは切り捨てられてもよい。切り捨てられたスタックは、光線及びBVHへのポインタとともに、呼び出し側シェーダにより指定された位置においてメモリに書き込まれてもよく、次いで、対応するトラバーサルシェーダ又は交差シェーダが生成されてもよい。光線が内部トラバーサルの間にいずれかのトライアングルと交差する場合、以下のコードに示すように、対応するヒット情報がこれらのシェーダへの入力引数として提供されてもよい。これらの生成されたシェーダは、実行のためのSIMDバッチを作成するために、ソート回路4008によりグループ化されてもよい。
struct HitInfo {
float barycentrics[2];
float tmax;
bool innerTravComplete;
uint primID;
uint geomID;
ShaderRecord* leafShaderRecord;
}
内部トラバーサルスタックを切り捨てることは、それをメモリに流出させるコストを低減する。当該手法はRestart Trail for Stackless BVH Traversal, High Performance Graphics (2010), pp. 107-111に記載されており、スタックの最上位でスタックを少数のエントリに切り捨てるために、42ビットの再開トレイル(restart trail)及び6ビットのデプス値が適用されてもよい。再開トレイルは、既にBVH内に取り込まれている分岐を示し、デプス値は、最後のスタックエントリに対応するトラバーサルのデプスを示す。これは、後に内部トラバーサルを再開するのに十分な情報である。
【0319】
内部トラバーサルは、内部スタックが空であり、テストするBVHノードが存在しないときに完了する。この場合、外部スタックが空でない場合、外部スタックの最上部をポップしてトラバーサルを再開する外部スタックハンドラが生成される。
【0320】
外部トラバーサルは、主トラバーサル状態機械を実行してもよく、シェーダ実行回路4000により実行されるプログラムコードで実装されてもよい。以下の条件の下で、すなわち、(1)新たな光線がヒットシェーダ又は一次シェーダにより生成されたとき、(2)トラバーサルシェーダがトラバーサルのためにBVHを選択したとき、及び(3)外部スタックハンドラがBVHのために内部トラバーサルを再開したとき、これは内部トラバーサルクエリを生成してもよい。
【0321】
図44に示すように、内部トラバーサルが生成される前に、切り捨てられた内部スタック4410を記憶するために、空間が固定機能回路4010についてのコールスタック4405上に割り当てられる。コールスタック及び内部スタックの最上部へのオフセット4403~4404は、メモリ2511にも記憶されるトラバーサル状態4400に維持される。トラバーサル状態4400はまた、ワールド空間4401及びオブジェクト空間4402内の光線と、最も近い交差プリミティブのためのヒット情報とを含む。
【0322】
トラバーサルシェーダ、交差シェーダ及び外部スタックハンドラは全て、光線-BVH交差回路4005により生成される。トラバーサルシェーダは、第2レベルのBVHのための新たな内部トラバーサルを開始する前に、コールスタック4405上に割り当てられる。外部スタックハンドラは、ヒット情報を更新していずれかの保留中の内部トラバーサルタスクを再開することを担うシェーダである。外部スタックハンドラはまた、トラバーサルが完了したときに、ヒット又はミスシェーダを生成することを担う。生成すべき保留中の内部トラバーサルクエリが存在しないとき、トラバーサルは完了する。トラバーサルが完了して交差が見つかったとき、ヒットシェーダが生成される。そうでない場合、ミスシェーダが生成される。
【0323】
上記のハイブリッドトラバーサル方式は、2レベルのBVH階層を使用するが、外側トラバーサルの実装における対応する変更によって、任意の数のBVHレベルも実装されてもよい。
【0324】
さらに、光線-BVH交差を実行するための固定機能回路4010が上記に記載されているが、他のシステムコンポーネントも、固定機能回路内に実装されてもよい。例えば、上記の外側スタックハンドラは、固定機能BVHトラバーサル/交差回路4005内に潜在的に実装され得る内部(ユーザに見えない)シェーダでもよい。この実装は、固定機能交差ハードウェア4005とプロセッサとの間の、ディスパッチされたシェーダ段階及びラウンドトリップの数を低減するために使用されてもよい。
【0325】
ここに記載の例は、既存及び将来のGPUプロセッサ上でより大きいSIMD効率で実行できるユーザ定義の関数を使用して、プログラム可能シェーディング及びレイトラバーサル制御を可能にする。レイトラバーサルのプログラム可能制御は、手続き的インスタンス化、確率的詳細レベル選択、カスタムプリミティブ交差及びレイジーBVH更新(lazy BVH update)のようないくつかの重要な特徴を可能にする。
【0326】
ヒット及び交差シェーダの投機的実行(speculative execution)をサポートするプログラム可能な複数命令複数データ(multiple instruction multiple data, MIMD)レイトレーシングアーキテクチャも提供される。特に、当該アーキテクチャは、ハイブリッドレイトレーシングアーキテクチャにおいて、図40に関して上記に説明したプログラム可能SIMD/SIMTコア/実行ユニット4001と固定機能MIMDトラバーサル/交差ユニット4005との間のスケジューリング及び通信オーバーヘッドを低減することに焦点を当てる。いくつかのトラバーサル及びシェーディングのラウンドトリップを回避してトラバーサルハードウェアから単一のバッチでディスパッチできるヒット及び交差シェーダの複数の投機的実行方式について以下に説明する。これらの技術を実装するための専用回路が使用されてもよい。
【0327】
本発明の実施形態は、専用ハードウェアのサポートなしに実装されたときにかなりのオーバーヘッドを課す、レイトラバーサルクエリから複数のヒット又は交差シェーダの実行が望まれるユースケースにおいて特に有益である。これらは、最近傍kヒットクエリ(nearest k-hit query)(最も近いk個の交差についてヒットシェーダを開始する)及び複数のプログラム可能交差シェーダを含むが、これらに限定されない。
【0328】
ここに記載の技術は、図40に示す(及び図40~44に関して説明する)アーキテクチャへの拡張として実装されてもよい。特に、本発明の本実施形態は、上記のユースケースの性能を改善するための拡張によってこのアーキテクチャ上に構築される。
【0329】
ハイブリッドレイトレーシングのレイトラバーサルアーキテクチャの性能の制限は、実行ユニットからトラバーサルクエリを開始するオーバーヘッドと、レイトレーシングハードウェアからプログラム可能シェーダを呼び出すオーバーヘッドである。同じ光線のトラバーサル中に複数のヒット又は交差シェーダが呼び出されたとき、このオーバーヘッドは、プログラム可能コア4001とトラバーサル/交差ユニット4005との間に「実行ラウンドトリップ(execution roundtrip)」を生成する。これはまた、個々のシェーダ呼び出しからSIMD/SIMTコヒーレンスを抽出する必要があるソートユニット4008に更なる圧力を与える。
【0330】
レイトレーシングのいくつかの側面は、上の表Aにリストされている異なるシェーダタイプ(すなわち、一次、ヒット、エニーヒット、ミス、交差、トラバーサル、呼び出し可能)を通じて表現できるプログラム可能な制御を必要とする。タイプ毎に複数のシェーダが存在できる。例えば、各マテリアルは異なるヒットシェーダを有することができる。これらのシェーダタイプのうちいくつかは、現在のMicrosoft Ray Tracing APIで定義されている。
【0331】
簡単な考察として、再帰型レイトレーシングは、一次光線について光線-シーン交差(ハードウェア及び/又はソフトウェアで実装される)を生成できる一次シェーダのセットを開始するようにGPUに命令するAPI機能により開始される。次に、これは、トラバーサルシェーダ、ヒットシェーダ又はミスシェーダのような他のシェーダを生成する。子シェーダを生成するシェーダはまた、その子シェーダから戻り値を受信できる。呼び出し可能(callable)シェーダは、他のシェーダにより直接生成できる汎用関数であり、また、値を呼び出し側シェーダに返すこともできる。
【0332】
レイトラバーサルは、バウンディングボリューム階層(bounding volume hierarchy, BVH)内のノードをトラバースして交差することにより、光線-シーン交差を計算する。最近の研究は、光線-シーン交差の計算の効率は、低減精度演算、BVH圧縮、光線毎の状態機械、専用交差パイプライン及びカスタムキャッシュのような固定機能ハードウェアにとってより適した技術を使用することにより、一桁以上も改善できることを示している。
【0333】
図40に示すアーキテクチャは、プログラム可能レイトレーシングを実行するためにSIMD/SIMTコア/実行ユニット4001のアレイが固定機能レイトレーシング/交差ユニット4005と相互作用するようなシステムを含む。プログラム可能シェーダは、実行ユニット/コア4001上のSIMD/SIMTスレッドにマッピングされ、SIMD/SIMTの使用率、実行及びデータコヒーレンスは、最適な性能にとって重要である。光線クエリは、以下のような様々な理由で、しばしばコヒーレンスを破壊する。
・トラバーサルの相違:BVHトラバーサルの持続時間は光線の間で大きく異なり、非同期光線処理に有利になる。
・実行の相違:同じSIMD/SIMTスレッドの異なるレーンから生成された光線は、異なるシェーダ呼び出しを生じる可能性がある。
・データアクセスの相違:例えば、異なる面にヒットする光線は異なるBVHノードをサンプリングし、プリミティブ及びシェーダは異なるテクスチャにアクセスする。様々な他のシナリオは、データアクセスの相違を引き起こす可能性がある。
【0334】
SIMD/SIMTコア/実行ユニット4001は、グラフィックスコア415A~415B、シェーダコア1355A~N、グラフィックスコア3130、グラフィックス実行ユニット608、実行ユニット852A~852B又はここに記載のいずれかの他のコア/実行ユニットを含む、ここに記載のコア/実行ユニットの変形でもよい。SIMD/SIMTコア/実行ユニット4001は、グラフィックスコア415A~415B、シェーダコア1355A~1355N、グラフィックスコア3130、グラフィックス実行ユニット608、実行ユニット852A~852B又はここに記載のいずれかの他のコア/実行ユニットの代わりに使用されてもよい。したがって、グラフィックスコア415A~415B、シェーダコア1355A~1355N、グラフィックスコア3130、グラフィックス実行ユニット608、実行ユニット852A~852B又はここに記載のいずれかの他のコア/実行ユニットと組み合わせたいずれかの特徴の開示もまた、図40のSIMD/SIMTコア/実行ユニット4001との対応する組み合わせを開示するが、このようなものに限定されない。
【0335】
固定機能レイトレーシング/交差ユニット4005は、各光線を個別に且つ順序外れで処理することにより、最初の2つの課題を克服し得る。しかし、これはSIMD/SIMTグループを分割する。したがって、ソートユニット4008は、再び実行ユニットにディスパッチされるシェーダ呼び出しの新たなコヒーレントなSIMD/SIMTグループを形成することを担う。
【0336】
SIMD/SIMTプロセッサ上の直接の純粋なソフトウェアベースのレイトレーシング実装と比較して、このようなアーキテクチャの利点を認識することは容易である。しかし、SIMD/SIMTコア/実行ユニット4001(ここでは、場合によってはSIMD/SIMTプロセッサ又はコア/EUと単に呼ばれる)とMIMDトラバーサル/交差ユニット4005との間のメッセージ送信に関連するオーバーヘッドが存在する。さらに、ソートユニット4008は、非コヒーレントのシェーダ呼び出しから完全なSIMD/SIMT利用率を抽出しない可能性がある。
【0337】
シェーダ呼び出しがトラバーサル中に特に頻繁に行われ得るユースケースが識別できる。コア/EU4001とトラバーサル/交差ユニット4005との間の通信のオーバーヘッドをかなり低減するための、ハイブリッドMIMDレイトレーシングプロセッサのための拡張について説明する。これは、k個の最も近い交差と、プログラム可能交差シェーダの実装とを見つけるときに特に有利になり得る。しかし、ここに記載の技術は、特定の処理シナリオに限定されない点に注意すべきである。
【0338】
コア/EU4001と固定機能トラバーサル/交差ユニット4005との間のレイトレーシングコンテキスト切り替えのハイレベルのコストの要約が以下に提供される。性能オーバーヘッドのほとんどは、シェーダ呼び出しが単一レイトラバーサルの間に必要とされる毎に、これらの2つのコンテキスト切り替えにより引き起こされる。
【0339】
光線を開始する各SIMD/SIMTレーンは、トラバースするBVHに関連するトラバーサル/交差ユニット4005への生成メッセージを生成する。データ(レイトラバーサルコンテキスト)は、生成メッセージ及び(キャッシュされた)メモリを介してトラバーサル/交差ユニット4005に中継される。トラバーサル/交差ユニット4005が新たなハードウェアスレッドを生成メッセージに割り当てる準備ができたとき、トラバーサル状態をロードし、BVHに対してトラバーサルを実行する。また、BVHの最初のトラバーサルステップの前に実行される必要がある設定コストも存在する。
【0340】
図45は、プログラム可能レイトレーシングパイプラインの動作フローを示す。トラバーサル4502及び交差4503を含む網掛けのエレメントは、固定機能回路内に実装されてもよく、残りのエレメントは、プログラム可能コア/実行ユニットで実装されてもよい。
【0341】
4502において、一次光線シェーダ4501は、BVH(又は他のアクセラレーション構造)を通じて現在の光線をトラバースするトラバーサル回路に作業を送信する。リーフノードに到達したとき、4503において、トラバーサル回路は、交差回路を呼び出し、交差回路は、光線-トライアングル交差を識別すると、4504において、エニーヒットシェーダを呼び出す(これは、図示のようにトラバーサル回路に結果を戻してもよい)。
【0342】
代替として、トラバーサルは、リーフノードに到達する前に終了してもよく、407においてクローゼストヒットシェーダが呼び出されるか(ヒットが記録された場合)、或いは4506においてミスシェーダが呼び出される(ミスの場合)。
【0343】
4505に示すように、トラバーサル回路がカスタムプリミティブリーフノードに到達した場合、交差シェーダが呼び出されてもよい。カスタムプリミティブは、多角形又は多面体(例えば、四面体、ボクセル、六面体、ウェッジ、ピラミッド又は他の「非構造化」ボリューム)のようないずれかの非トライアングルのプリミティブでもよい。交差シェーダ4505は、エニーヒット処理を実装するエニーヒットシェーダ4504に対して、光線とカスタムプリミティブとの間のいずれかの交差を識別する。
【0344】
ハードウェアトラバーサル4502がプログラム可能段階に到達したとき、トラバーサル/交差ユニット4005は、シェーダを実行するために使用される実行ユニットの単一のSIMDレーンに対応する、関連するシェーダ4505~4507へのシェーダディスパッチメッセージを生成してもよい。ディスパッチは、任意の順序の光線で発生し、呼び出されるプログラムにおいて発散するので、ソートユニット4008は、コヒーレントSIMDバッチを抽出するために、複数のディスパッチコールを累積してもよい。更新されたトラバーサル状態及び任意選択のシェーダ引数は、トラバーサル/交差ユニット4005によりメモリ2511に書き込まれてもよい。
【0345】
k最近傍交差問題では、クローゼストヒットシェーダ4507が最初のk個の交差について実行される。従来の方法では、これは、最も近い交差を見つけたときにレイトラバーサルを終了し、ヒットシェーダを呼び出し、次の最も近い交差を見つけるためにヒットシェーダから新たな光線を生成することを意味する(光線の始点のオフセットによって、同じ交差は再び発生しない)。この実装は、単一の光線に対してk個の光線の生成を必要とすることを認識することは容易である。他の実装は、挿入ソート演算を使用して、全ての交差に対して呼び出されて最も近い交差のグローバルリストを維持する、エニーヒットシェーダ4504で動作する。この手法の主な問題は、エニーヒットシェーダ呼び出しの上限が存在しないことである。
【0346】
上記のように、交差シェーダ4505は、非トライアングル(カスタム)プリミティブに対して呼び出されてもよい。交差テストの結果及びトラバース状態(保留中のノード及びプリミティブ交差)に応じて、同じ光線のトラバーサルは交差シェーダ4505の実行後にも継続してもよい。したがって、最も近いヒットを見つけることは、実行ユニットへのいくつかのラウンドトリップを必要としてもよい。
【0347】
また、トラバーサルハードウェア及びシェーダスケジューリングモデルへの変更を通じて、交差シェーダ4505及びヒットシェーダ4504、4507についてのSIMD-MIMDコンテキスト切り替えの低減に焦点を当てることもできる。まず、レイトラバーサル回路4005は、複数の潜在的な呼び出しを累積してこれらをより大きいバッチでディスパッチすることにより、シェーダ呼び出しを遅延させる。さらに、不要と判明した特定の呼び出しは、この段階で削除されてもよい。さらに、シェーダスケジューラ4007は、同じトラバーサルコンテキストから単一のSIMDバッチに複数のシェーダ呼び出しを集約してもよく、これは単一の光線生成メッセージを生じる。1つの例示的な実装では、トラバーサルハードウェア4005は、トラバーサルスレッドを中断し、複数のシェーダ呼び出しの結果を待機する。この動作モードは、複数のシェーダのディスパッチを可能にするので、ここでは「投機的(speculative)」シェーダ実行と呼ばれ、これらのうちいくつかは、順次呼び出しを使用するときに呼び出されなくてもよい。
【0348】
図46Aは、トラバーサル演算がサブツリー内の複数のカスタムプリミティブ4650に直面する例を示し、図46Bは、これが、どのように3つの交差ディスパッチサイクルC1~C3で解決できるかを示す。特に、スケジューラ4007は、作業をSIMDプロセッサ4001に提出するために3サイクルを必要としてもよく、トラバーサル回路4005は、結果をソートユニット4008に提供するために3サイクルを必要とする。トラバーサル回路4005により必要とされるトラバーサル状態4601は、ローカルキャッシュ(例えば、L1キャッシュ及び/又はL2キャッシュ)のようなメモリに記憶されてもよい。
【0349】
A.遅延レイトレーシングシェーダの呼び出し
ハードウェアトラバーサル状態4601がリスト内の複数の潜在的な交差又はヒット呼び出しの蓄積を可能にするように管理される方式も、変更できる。トラバーサル中の所与の時間に、リスト内の各エントリは、シェーダ呼び出しを生成するために使用されてもよい。例えば、k最近傍交差点は、トラバーサルハードウェア4005及び/又はメモリ内のトラバーサル状態4601に累積でき、トラバーサルが完了した場合に各エレメントについてヒットシェーダが呼び出されることができる。ヒットシェーダについて、BVH内のサブツリーのために複数の潜在的な交差が蓄積されてもよい。
【0350】
k最近傍のユースケースの場合、この手法の利点は、SIMDコア/EU4001へのk-1回のラウンドトリップ及びk-1個の新たな光線生成メッセージの代わりに、全てのヒットシェーダが、トラバーサル回路4005上の単一のトラバーサル演算の間に同じトラバーサルスレッドから呼び出されることである。潜在的な実装の課題は、ヒットシェーダの実行順序を保証することが簡単ではないことである(標準の「ラウンドトリップ」手法は、最も近い交差のヒットシェーダが最初に実行されること等を保証する)。これは、ヒットシェーダの同期又は順序の緩和のいずれかにより対処されてもよい。
【0351】
交差シェーダのユースケースの場合、トラバーサル回路4005は、所与のシェーダが正の交差テストを返すか否かを事前に認識しない。しかし、複数の交差シェーダを投機的に実行することは可能であり、少なくとも1つが正のヒット結果を返した場合、これは、グローバルな最も近いヒットにマージされる。特定の実装は、ディスパッチコールの数を低減するために最適な数の遅延交差テストを見つけるが、多すぎる冗長な交差シェーダを呼び出すのを回避する必要がある。
【0352】
B.トラバーサル回路からのシェーダ呼び出しの集約
トラバーサル回路4005で生成された同じ光線から複数のシェーダをディスパッチするとき、レイトラバーサルアルゴリズムのフロー内の分岐が作成される可能性がある。これは交差シェーダにとって問題になる可能性がある。この理由は、残りのBVHトラバーサルが全てのディスパッチされた交差テストの結果に依存するからである。これは、同期演算がシェーダ呼び出しの結果を待機するために必要であることを意味し、これは、非同期ハードウェアでは課題となる可能性がある。
【0353】
シェーダ呼び出しの結果をマージする2つのポイントは、SIMDプロセッサ4001及びトラバーサル回路4005である。SIMDプロセッサ4001に関して、複数のシェーダは、標準プログラミングモデルを使用して、これらの結果を同期して集約できる。これを行うための1つの比較的簡単な方法は、グローバルアトミック(global atomics)を使用し、複数のシェーダの交差結果が記憶できるメモリ内の共有データ構造の結果を集約することである。次いで、最後のシェーダは、データ構造を解決し、トラバーサルを継続するためにトラバーサル回路4005をコールバックできる。
【0354】
複数のシェーダ呼び出しの実行を、SIMDプロセッサ4001上の同じSIMDスレッドのレーンに制限する、より効率的な手法も実装されてもよい。次いで、交差テストは(グローバルアトミックに依存せずに)SIMD/SIMT低減動作を使用してローカルに低減される。この実装は、シェーダ呼び出しの小さいバッチを同じSIMDバッチに留まらせるように、ソートユニット4008内の新たな回路に依存してもよい。
【0355】
トラバーサルスレッドの実行は、トラバーサル回路4005上で更に一時停止されてもよい。従来の実行モデルを使用すると、シェーダがトラバーサル中にディスパッチされたとき、実行ユニット4001がシェーダを処理する間に他の光線生成コマンドの実行を可能にするために、シェーダスレッドは終了し、レイトラバーサル状態はメモリに保存される。トラバーサルスレッドが単に一時停止されている場合、トラバーサル状態は記憶される必要はなく、各シェーダの結果を別々に待機できる。この実装は、デッドロックを回避し、十分なハードウェア利用を提供するための回路を含んでもよい。
【0356】
図47図48は、3つのシェーダ4701を有するSIMDコア/実行ユニット4001上の単一シェーダ呼び出しを呼び出す遅延モデルの例を示す。保存されているとき、全ての交差テストは同じSIMD/SIMTグループ内で評価される。したがって、最も近い交差はまた、プログラム可能コア/実行ユニット4001上で計算できる。
【0357】
上記のように、シェーダ集約及び/又は遅延の全部又は一部は、トラバーサル/交差回路4005及び/又はコア/EUスケジューラ4007により実行されてもよい。図47は、どのようにスケジューラ4007内のシェーダ遅延/集約回路4706が特定のSIMD/SIMTスレッド/レーンに関連するシェーダのスケジューリングを、指定のトリガイベントが発生するまで遅延させるかを示す。トリガイベントを検出すると、スケジューラ4007は単一のSIMD/SIMTバッチ内の複数の集約されたシェーダをコア/EU4001にディスパッチする。
【0358】
図48は、どのようにトラバーサル/交差回路4005内のシェーダ遅延/集約回路4805が、特定のSIMDスレッド/レーンに関連するシェーダのスケジューリングを、指定のトリガイベントが発生するまで遅延できるかを示す。トリガイベントを検出すると、トラバーサル/交差回路4005は、単一のSIMD/SIMTバッチ内で集約されたシェーダをソートユニット4008に提示する。
【0359】
しかし、シェーダ遅延及び集約技術は、ソートユニット4008のような様々な他のコンポーネント内に実装されてもよく、或いは、複数のコンポーネントの間で分散されてもよい点に留意すべきである。例えば、トラバーサル/交差回路4005は、第1のセットのシェーダ集約演算を実行してもよく、スケジューラ4007は、SIMDスレッドのシェーダがコア/EU4001上で効率的にスケジューリングされることを確保するために、第2のセットのシェーダ集約演算を実行してもよい。
【0360】
集約されたシェーダをコア/EUにディスパッチさせる「トリガイベント(triggering event)」は、特定の数の蓄積されたシェーダ又は特定のスレッドに関連する最小待ち時間のような処理イベントでもよい。代替として或いはさらに、トリガイベントは、第1のシェーダの遅延からの特定の持続時間又は特定の数のプロセッササイクルのような時間イベントでもよい。コア/EU4001及びトラバーサル/交差ユニット4005上の現在のワークロードのような他の変数もまた、いつシェーダのSIMD/SIMTバッチをディスパッチするかを決定するために、スケジューラ4007により評価されてもよい。
【0361】
本発明の異なる実施形態は、使用されている特定のシステムアーキテクチャ及びアプリケーションの要件に基づいて、上記の手法の異なる組み合わせを使用して実装されてもよい。
【0362】
[レイトレーシング命令]
以下に説明するレイトレーシング命令は、CPU3199及び/又はGPU3105をサポートする命令セットアーキテクチャ(instruction set architecture, ISA)に含まれる。CPUにより実行される場合、単一命令複数データ(single instruction multiple data, SIMD)命令は、記述された演算を実行するためにベクトル/パックソース及びデスティネーションレジスタを利用してもよく、CPUコアにより復号されて実行されてもよい。GPU3105により実行される場合、命令は、グラフィックスコア3130により実行されてもよい。例えば、上記の実行ユニット(execution unit, EU)4001のうちいずれかが命令を実行してもよい。代替として或いはさらに、命令は、レイトレーシングコア3150及び/又はテンソルコア3140上の実行回路により実行されてもよい。
【0363】
図49は、以下に説明するレイトレーシング命令を実行するためのアーキテクチャを示す。図示のアーキテクチャは、上記のコア3130、3140、3150(例えば、図31及び関連するテキストを参照)のうち1つ以上の中に統合されてもよく、或いは、異なるプロセッサアーキテクチャに含まれてもよい。
【0364】
動作中に、命令フェッチユニット4903はメモリ3198からレイトレーシング命令4900をフェッチし、復号器4995は命令を復号する。1つの実装では、復号器4995は、実行可能な演算(例えば、マイクロ符号化コア内のウップ(uop)又はマイクロ演算)を生成するように命令を復号する。代替として、レイトレーシング命令4900の一部又は全部は、復号せずに実行されてもよく、したがって、そのような復号器4904は必要とされない。
【0365】
いずれの実装においても、スケジューラ/ディスパッチャ4905は、機能ユニット(functional unit, FU)4910~4912の間で命令(又は演算)をスケジューリングしてディスパッチする。図示の実装は、ベクトルレジスタ4915に記憶された複数のパックデータエレメントに対して同時に動作する単一命令複数データ(single instruction multiple data, SIMD)命令を実行するためのベクトルFU4910と、1つ以上のスカラレジスタ4916に記憶されたスカラ値に対して動作するためのスカラFU4911とを含む。任意選択のレイトレーシングFU4912は、ベクトルレジスタ4915に記憶されたパックデータ値及び/又はスカラレジスタ4916に記憶されたスカラ値に基づいて動作してもよい。専用FU4912のない実装では、ベクトルFU4910及び場合によってはスカラFU4911は、以下に説明するレイトレーシング命令を実行してもよい。
【0366】
様々なFU4910~4912は、ベクトルレジスタ4915、スカラレジスタ4916及び/又はローカルキャッシュサブシステム4908(例えば、L1キャッシュ)からレイトレーシング命令4900を実行するために必要なレイトレーシングデータ4902(例えば、トラバーサル/交差データ)にアクセスする。FU4910~4912はまた、ロード及び記憶動作を介してメモリ3198へのアクセスを実行してもよく、キャッシュサブシステム4908は、データをローカルにキャッシュするために独立して動作してもよい。
【0367】
レイトレーシング命令は、レイトラバーサル/交差及びBVH構築のための性能を増加させるために使用されてもよいが、これらはまた、高性能計算(high performance computing, HPC)及び汎用GPU(general purpose GPU, GPGPU)の実装のような他の分野にも適用可能になり得る。
【0368】
以下の説明では、ダブルワードは場合によってdwと略され、符号なしバイトはubと略される。さらに、以下に示すソースレジスタ及びデスティネーションレジスタ(例えば、src0、src1、dest等)は、ベクトルレジスタ4915を示してもよく、或いは、いくつかの場合、ベクトルレジスタ4915及びスカラレジスタ4916の組み合わせを示してもよい。典型的には、命令により使用されるソース値又はデスティネーション値がパックデータエレメントを含む場合(例えば、ソース又はデスティネーションがN個のデータエレメントを記憶する場合)、ベクトルレジスタ4915が使用される。他の値は、スカラレジスタ4916又はベクトルレジスタ4915を使用してもよい。
【0369】
(逆量子化)
逆量子化(Dequantize)命令の一例は、以前に量子化された値を「逆量子化」する。例として、レイトレーシング実装において、特定のBVHサブツリーは、記憶及び帯域幅要件を低減するために量子化されてもよい。逆量子化命令は、逆量子化dest src0 src1 src2の形式になってもよく、ソースレジスタsrc0はN個の符号なしバイトを記憶し、ソースレジスタsrc1は1個の符号なしバイトを記憶し、ソースレジスタsrc2は1個の浮動小数点値を記憶し、デスティネーションレジスタdestはN個の浮動小数点値を記憶する。これらのレジスタの全ては、ベクトルレジスタ4915でもよい。代替として、src0及びdestはベクトルレジスタ4915でもよく、src1及びsrc2はスカラレジスタ4916でもよい。
【0370】
以下のコード系列は、逆量子化命令の特定の実装を定義する。
for (int i=0; i<SIMD_WIDTH) {
if (execMask[i]) {
dst[i]=src2[i]+ldexp(convert_to_float(src0[i]),src1);
}
}
この例では、ldexpは倍精度浮動小数点値を指定の2の整数べきで乗算する(すなわち、ldexp(x,exp)=x*2exp)。上記のコードにおいて、現在のSIMDデータエレメント(execMask[i])に関連する実行マスク値が1に設定されている場合、src0内の位置iにおけるSIMDデータエレメントは浮動小数点値に変換され、src1内の値の整数べき(2src1値)により乗算され、この値がsrc2内の対応するSIMDデータエレメントに加算される。
【0371】
(選択的min又はmax)
選択的min又はmax命令は、ビットマスクのビットで示されるように、レーン毎にmin又はmax演算のいずれかを実行してもよい(すなわち、値の集合の最小値又は最大値を返す)。ビットマスクは、ベクトルレジスタ4915、スカラレジスタ4916又はマスクレジスタの別個のセット(図示せず)を利用してもよい。以下のコード系列、すなわち、sel_min_max dest src0 src1 src2は、min/max命令1つの特定の実装を定義し、src0はN個のダブルワードを記憶し、src1はN個のダブルワードを記憶し、src2は1個のダブルワードを記憶し、デスティネーションレジスタはN個のダブルワードを記憶する。
【0372】
次のコード系列は、選択的min/max命令の1つの特定の実装を定義する。
for (int i=0;i<SIMD_WIDTH) {
if (execMask[i]) {
dst[i]=(1<<i)&src2 ? min(src0[i],src1[i]) : max(src0[i],src1[i]);
}
}
この例では、(1<<i)&src2の値(src2とANDされたiだけ左シフトされた1)が、src0及びsrc1のi番目のデータエレメントの最小値、又はsrc0及びsrc1のi番目のデータエレメントの最大値を選択するために使用される。現在のSIMDデータエレメントに関連する実行マスク値(execMask[i])が1に設定されている場合にのみ、i番目のデータエレメントについて演算が実行される。
【0373】
(シャッフルインデックス命令)
シャッフルインデックス命令は、入力レーンのいずれかのセットを出力レーンにコピーできる。32のSIMD幅の場合、この命令は、より低いスループットで実行できる。この命令は、shuffle_index dest src0 src1 <optional flag>という形式になり、src0はN個のダブルワードを記憶し、src1はN個の符号なしバイト(すなわちインデックス値)を記憶し、destはN個のダブルワードを記憶する。
【0374】
以下のコード系列は、シャッフルインデックス命令の1つの特定の実装を定義する。
for (int i=0; i<SIMD_WIDTH) {
uint8_t srcLane=src1.index[i];

if (execMask[i]) {
bool invalidLane=srcLane<0||srcLane>=SIMD_WIDTH||!execMask[srcLaneMod];
if (FLAG) {
invalidLane|=flag[srcLaneMod];
}
if (invalidLane) {
dst[i]=src0[i];
}
else {
dst[i]=src0[srcLane];
}
}
}
上記のコードでは、src1のインデックスは現在のレーンを識別する。実行マスク内のi番目の値が1に設定されている場合、ソースレーンが0からSIMD幅の範囲内にあることを確保するための検査が実行される。そうである場合、フラグが設定され(srcLaneMod)、デスティネーションのデータエレメントiがsrc0のデータエレメントiと等しく設定される。レーンが範囲内である(すなわち有効である)場合、src1(srcLane0)のインデックス値がsrc0(dst[i]=src0[srcLane])へのインデックスとして使用される。
【0375】
(即値シャッフルUp/Dn/XOR命令)
即値シャッフル(immediate shuffule)命令は、命令の即値に基づいて入力データエレメント/レーンをシャッフルしてもよい。即値は、即値の値に基づいて、入力レーンを1、2、4、8又は16の位置だけシフトすることを指定してもよい。任意選択で、更なるスカラ入力レジスタが充填値(fill value)として指定できる。ソースレーンインデックスが無効であるとき、充填値(提供されている場合)は、デスティネーションのデータエレメント位置に記憶される。充填値が提供されない場合、データエレメント位置は全て0に設定される。
【0376】
フラグレジスタは、ソースマスクとして使用されてもよい。ソースレーンのフラグビットが1に設定されている場合、ソースレーンは無効とマーキングされ、命令が進行してもよい。
【0377】
以下は、即値シャッフル命令の異なる実装の例である。
shuffle_<up/dn/xor>_<1/2/4/8/16> dest src0 <optional src1> <optional flag>
shuffle_<up/dn/xor>_<1/2/4/8/16> dest src0 <optional src1> <optional flag>
この実装では、src0はN個のダブルワードを記憶し、src1は充填値(存在する場合)について1個のダブルワードを記憶し、destは結果を含むN個のダブルワードを記憶する。
【0378】
以下のコード系列は、即値シャッフル命令の1つの特定の実装を定義する。
for (int i=0;i<SIMD_WIDTH) {
int8_t srcLane;
switch(SHUFFLE_TYPE) {
case UP:
srcLane=i-SHIFT;
case DN:
srcLane=i+SHIFT;
case XOR:
srcLane=i^SHIFT;
}

if (execMask[i]) {
bool invalidLane=srcLane<0||srcLane>=SIMD_WIDTH||!execMask[srcLane];

if (FLAG) {
invalidLane|=flag[srcLane];
}

if (invalidLane) {
if (SRC1)
dst[i]=src1;
else
dst[i]=0;
}
else {
dst[i]=src0[srcLane];
}
}
}
ここで、入力データエレメント/レーンは、即値の値に基づいて、1、2、4、8又は16の位置だけシフトされる。レジスタsrc1は更なるスカラソースレジスタであり、ソースレーンインデックスが無効であるときに、デスティネーションのデータエレメント位置に記憶される充填値として使用される。充填値が提供されず、ソースレーンインデックスが無効である場合、デスティネーションのデータエレメント位置は0に設定される。フラグレジスタ(FLAG)は、ソースマスクとして使用される。ソースレーンのフラグビットが1に設定されている場合、ソースレーンは無効としてマーキングされ、上記のように命令が進行する。
【0379】
(間接シャッフルUp/Dn/XOR命令)
間接シャッフル命令は、ソースレーンからデスティネーションレーンへのマッピングを制御するソースオペランド(src1)を有する。間接シャッフル命令は、以下の形式となってもよい。shuffle_<up/dn/xor> dest src0 src1 <optional flag>
src0はN個のダブルワードを記憶し、src1は1個のダブルワードを記憶し、destはN個のダブルワードを記憶する。
【0380】
以下のコード系列は、即値シャッフル命令の1つの特定の実装を定義する。
for (int i=0;i<SIMD_WIDTH) {
int8_t srcLane;
switch(SHUFFLE_TYPE) {
case UP:
srcLane=i-src1;
case DN:
srcLane=i+src1;
case XOR:
srcLane=i^src1;
}

if (execMask[i]) {
bool invalidLane=srcLane<0||srcLane>=SIMD_WIDTH||!execMask[srcLane];

if (FLAG) {
invalidLane|=flag[srcLane];
}

if (invalidLane) {
dst[i]=0;
}
else {
dst[i]=src0[srcLane];
}
}
}
したがって、間接シャッフル命令は、上記の即値シャッフル命令と同様の方式で動作するが、デスティネーションレーンへのソースレーンのマッピングは、即値ではなく、ソースレジスタsrc1により制御される。
【0381】
(クロスレーンmin/max命令)
クロスレーン最小/最大命令は、浮動小数点及び整数データタイプについてサポートされてもよい。クロスレーン最小命令は、lane_min dest src0の形式となってもよく、クロスレーン最大命令は、lane_max dest src0の形式となってもよく、src0はN個のダブルワードを記憶し、destは1個のダブルワードを記憶する。
【0382】
例として、以下のコード系列は、クロスレーン最小の1つの特定の実装を定義する。
dst=src[0];

for (int i=1;i<SIMD_WIDTH) {
if (execMask[i]) {
dst=min(dst,src[i]);
}
}
この例では、ソースレジスタのデータエレメント位置iのダブルワード値がデスティネーションレジスタのデータエレメントと比較され、2つの値の最小値がデスティネーションレジスタにコピーされる。クロスレーン最大命令は、実質的に同じ方式で動作し、唯一の相違点は、位置iにおけるデータエレメント及びデスティネーション値の最大値が選択されることである。
【0383】
(クロスレーンmin/maxインデックス命令)
クロスレーン最小インデックス命令は、lane_min_index dest src0の形式となってもよく、クロスレーン最大インデックス命令は、lane_max_index dest src0の形式となってもよく、src0はN個のダブルワードを記憶し、destは1個のダブルワードを記憶する。
【0384】
例として、以下のコード系列は、クロスレーン最小インデックス命令の1つの特定の実装を定義する。
dst_index=0;
tmp=src[0]
for (int i=1;i<SIMD_WIDTH) {

if (src[i]<tmp&&execMask[i])
{
tmp=src[i];
dst_index=i;
}
}
この例では、デスティネーションインデックスは、デスティネーションレジスタにまたがり、0からSIMD幅にインクリメントされる。実行マスクビットが設定されている場合、ソースレジスタの位置iにおけるデータエレメントは一時記憶位置(tmp)にコピーされ、デスティネーションインデックスはデータエレメント位置iに設定される。
【0385】
(クロスレーンソーティングネットワーク命令)
クロスレーンソーティングネットワーク命令は、昇順(sortnet_min)又は降順(sortnet_max)のいずれかで、Nワイドの(安定)ソーティングネットワークを使用して、全てのN個の入力エレメントをソートしてもよい。命令のmin/maxバージョンは、それぞれsortnet_min dest src0及びsortnet_max dest src0の形式となってもよい。1つの実装では、src0及びdestはN個のダブルワードを記憶する。min/maxソートはsrc0のN個のダブルワードに対して実行され、昇順のエレメント(minの場合)又は降順のエレメント(maxの場合)がそれぞれの並べ替え順序でdestに記憶される。命令を定義するコード系列の一例は、dst=apply_N_wide_sorting_network_min/max(src0)である。
【0386】
(クロスレーンソーティングネットワークインデックス命令)
クロスレーンソーティングネットワークインデックス命令は、Nワイドの(安定)ソーティングネットワークを使用して全てのN個の入力エレメントをソートしてもよいが、昇順(sortnet_min)又は降順(sortnet_max)のいずれかで置換インデックスを返す。命令のmin/maxバージョンは、sortnet_min_index dest src0及びsortnet_max_index dest src0の形式となってもよく、src0及びdestはN個のダブルワードをそれぞれ記憶する。命令を定義するコード系列一例は、dst=apply_N_wide_sorting_network_min/max_index(src0)である。
【0387】
上記の命令のいずれかを実行するための方法は図50に示されている。当該方法は、上記の特定のプロセッサアーキテクチャに実装されてもよいが、いずれかの特定のプロセッサ又はシステムアーキテクチャに限定されない。
【0388】
5001において、一次グラフィックススレッドの命令は、プロセッサコア上で実行される。これは、例えば、上記のコア(例えば、グラフィックスコア3130)のいずれかを含んでもよい。5002において決定された、一次グラフィックススレッド内でレイトレーシング作業に到達すると、レイトレーシング命令はレイトレーシング実行回路にオフロードされ、レイトレーシング実行回路は、図49に関して上記したような機能ユニット(functional unit, FU)の形式でもよく、或いは、図31に関して説明したような専用レイトレーシングコア3150でもよい。
【0389】
5003において、レイトレーシング命令が復号され、メモリからフェッチされ、5005において、命令は、(例えば、復号器を必要とする実施形態では)実行可能演算に復号される。5004において、レイトレーシング命令がスケジューリングされ、レイトレーシング回路による実行のためにディスパッチされる。5005において、レイトレーシング命令は、レイトレーシング回路により実行される。例えば、命令は、上記のFU(例えば、ベクトルFU4910、レイトレーシングFU4912等)及び/又はグラフィックスコア3130又はレイトレーシングコア3150上にディスパッチされて実行されてもよい。
【0390】
レイトレーシング命令の実行が完了すると、5006において、結果が記憶され(例えば、メモリ3198に記憶され)、5007において、一次グラフィックススレッドが通知される。5008において、レイトレーシング結果は、一次スレッドのコンテキスト内で処理される(例えば、メモリから読み取られ、グラフィックスレンダリング結果に統合される)。
【0391】
実施形態において、「エンジン」又は「モジュール」又は「ロジック」という用語は、1つ以上のソフトウェア又はファームウェアプログラム、組み合わせ論理回路及び/又は上記の機能性を提供する他の適切なコンポーネントを実行する、特定用途向け集積回路(application specific integrated circuit, ASIC)、電子回路、プロセッサ(共有、専用又はグループ)及び/又はメモリ(共有、専用又はグループ)を示してもよく、これらの一部でもよく、或いは、これらを含んでもよい。実施形態では、エンジン、モジュール又はロジックは、ファームウェア、ハードウェア、ソフトウェア、又はファームウェアとハードウェアとソフトウェアとのいずれかの組み合わせで実装されてもよい。
【0392】
[レイトレーシングパイプラインにおいてスロットリングするための装置及び方法]
本発明の実施形態は、レイトレーシングを実行するために、固定機能アクセラレーション回路と汎用処理回路との組み合わせを含む。例えば、バウンディングボリューム階層(bounding volume hierarchy, BVH)及び交差テストのレイトラバーサルに関連する特定の演算は、固定機能アクセラレーション回路により実行されてもよく、一方で、複数の実行回路は、様々な形式のレイトレーシングシェーダ(例えば、エニーヒットシェーダ、交差シェーダ、ミスシェーダ等)を実行する。一実施形態は、光線を記憶するための複数のエントリと、BVHノードを記憶するための対応するデュアルスタックとを含むデュアル広帯域幅記憶バンクを含む。この実施形態では、トラバーサル回路は、各クロックサイクルで光線を処理するために、デュアル光線バンクとスタックとの間を交互にする。さらに、一実施形態は、内部ノードと非内部ノードとプリミティブとの間を区別し、BVHノード及びBVHノードによりバウンディングされるプリミティブの処理をインテリジェントに優先順位付けするためにこの情報を使用する優先度選択回路/ロジックを含む。
【0393】
1つの特定の実施形態は、トラバーサル演算中に限られた数のBVHノードを記憶するために短いスタックを使用して、トラバーサルに必要な高速メモリを低減する。この実施形態は、必要なBVHノードが利用可能であることを確保するために、短いスタックとの間でエントリを効率的にプッシュ及びポップするためのスタック管理回路/ロジックを含む。さらに、トラバーサル演算は、トラッキングデータ構造への更新を実行することによりトラッキングされる。トラバーサル回路/ロジックが一時停止されたとき、それが離れたBVH内の同じ位置でトラバーサル演算を開始するために、トラッキングデータ構造を参照できる。データ構造トラッキングにおけるトラッキングデータの維持は、トラバーサル回路/ロジックが再開できるように実行される。
【0394】
図51は、シェーダプログラムコードを実行して関連するレイトレーシングデータ4902(例えば、BVHノードデータ及び光線データ)を処理するためのシェーダ実行回路4000と、トラバーサル及び交差演算を実行するためのレイトレーシングアクセラレーション回路5110と、RTアクセラレーション回路5110及びシェーダ実行回路4000により処理されるプログラムコード及び関連するデータを記憶するためのメモリ3198とを含む一実施形態を示す。
【0395】
一実施形態では、シェーダ実行回路4000は、複数のコア/実行ユニット4001を含み、コア/実行ユニット4001は、様々な形式のデータ並列演算を実行するためにシェーダプログラムコードを実行する。例えば、一実施形態では、コア/実行ユニット4001は、複数のレーンにわたって単一の命令を実行でき、命令の各インスタンスは、異なるレーンに記憶されたデータに対して動作する。SIMTの実装では、例えば、命令の各インスタンスは、異なるスレッドに関連付けられる。実行中に、L1キャッシュは、効率的なアクセスのために特定のレイトレーシングデータ(例えば、最近又は頻繁にアクセスされるデータ)を記憶する。
【0396】
一次光線のセットはスケジューラ4007にディスパッチされてもよく、スケジューラ4007は、コア/EU4001により実行されるシェーダに対する作業をスケジューリングする。コア/EU4001は、レイトレーシングコア3150、グラフィックスコア3130、CPUコア3199又はシェーダプログラムコードを実行可能な他のタイプの回路でもよい。1つ以上の一次光線シェーダ5101は一次光線を処理し、レイトレーシングアクセラレーション回路5110及び/又はコア/EU4001により実行される(例えば、1つ以上の子シェーダにより実行される)更なる作業を生成する。一次光線シェーダ5101又はコア/EU4001により実行される他のシェーダにより生成された新たな作業は、ここに記載のように光線をグループ又はビンにソートする(例えば、同様の特性を有する光線をグループ化する)ソート回路4008に分配されてもよい。次いで、スケジューラ4007は、コア/EU4001に対して新たな作業をスケジューリングする。
【0397】
実行され得る他のシェーダは、上記のようにヒット結果を処理するエニーヒットシェーダ4514及びクローゼストヒットシェーダ4507(例えば、所与の光線についてのいずれかのヒット又は最も近いヒットをそれぞれ識別する)を含む。ミスシェーダ4506は、光線ミス(例えば、光線がノード/プリミティブと交差しない場合)を処理する。上記のように、様々なシェーダは、1つ以上のポインタと、ベンダ固有のメタデータと、グローバル引数とを含んでもよいシェーダレコードを使用して参照できる。一実施形態では、シェーダレコードはシェーダレコード識別子(shader record identifier, SRI)により識別される。一実施形態では、シェーダの各実行インスタンスは、親シェーダと子シェーダとの間で渡される引数を記憶するコールスタック5203に関連付けられる。コールスタック5121はまた、コールが戻るときに実行される継続関数への参照を記憶してもよい。
【0398】
レイトラバーサル回路5102は、光線によりトラバースされるノード/プリミティブを識別するために、BVHの階層の下に向かって(例えば、親ノード、子ノード及びリーフノードを通じて)、BVHのノードを通じて各光線をトラバースする。光線-BVH交差回路5103は、光線の交差テストを実行し、プリミティブ上のヒットポイントを決定し、ヒットに応じて結果を生成する。トラバーサル回路5102及び交差回路5103は、1つ以上のコールスタック5121から作業を取得してもよい。レイトレーシングアクセラレーション回路5110内では、コールスタック5121及び関連するレイトレーシングデータ4902は、トラバーサル回路5102及び交差回路5103による効率的なアクセスのために、ローカルレイトレーシングキャッシュ(local ray tracing cache, RTC)5107又は他のローカル記憶デバイス内に記憶されてもよい。以下に説明する1つの特定の実施形態は、高帯域幅光線バンク(high-bandwidth ray bank)(例えば、図52参照)を含む。
【0399】
レイトレーシングアクセラレーション回路5110は、光線-BVHトラバーサル/交差回路4005と、トラバーサル回路4502及び交差回路4503と、レイトレーシングコア3150とを含む、ここに記載の様々なトラバーサル/交差回路の変形でもよい。レイトレーシングアクセラレーション回路5110は、光線-BVHトラバーサル/交差回路4005、トラバーサル回路4502及び交差回路4503並びにレイトレーシングコア3150、又はBVHスタックを処理するため及び/又はトラバーサル/交差を実行するためのいずれかの他の回路/ロジックの代わりに使用されてもよい。したがって、ここに記載の光線-BVHトラバーサル/交差回路4005、トラバーサル回路4502及び交差回路4503並びにレイトレーシングコア3150と組み合わせたいずれかの特徴の開示も、レイトレーシングアクセラレーション回路5110との対応する組み合わせを開示するが、このようなものに限定されない。
【0400】
図52を参照すると、レイトラバーサル回路5102の一実施形態は、第1及び第2の記憶バンク(それぞれ5201及び5202)を含み、各バンクは、メモリからロードされた対応する複数の入射光線5206を記憶するための複数のエントリを含む。対応する第1及び第2のスタック(それぞれ5203及び5204)は、メモリから読み取られて処理のためにローカルに記憶された、選択されたBVHノードデータ5290~5291を含む。ここに記載のように、一実施形態では、スタック5203~5204は、BVHノードデータを記憶するための限られた数のエントリ(例えば、一実施形態では6個のエントリ)を含む「短い」スタックである。光線バンク5201~5202とは別に図示されるが、スタック5203~5204はまた、対応する光線バンク5201~5202内に維持されてもよい。代替として、スタック5203~5204は、別個のローカルメモリ又はキャッシュに記憶されてもよい。
【0401】
トラバーサル処理回路5210の一実施形態は、次の光線又はボックス及び処理すべきノードを(例えば、ピンポン方式で)選択するときに、2つのバンク5201~5202とスタック5203~5204との間を交互にする。例えば、トラバーサル処理回路5210は、各クロックサイクルにおいて交互の光線バンク/スタックから新たな光線/BVHノードを選択してもよく、それにより、高効率の動作を確保する。しかし、この特定の構成は、本発明の基礎の原理に従うのに必要ではない点に留意すべきである。
【0402】
一実施形態では、光線割り当て器5205は、バンク割り当てカウンタ5220のセットの現在の相対値に基づいて、第1及び第2のメモリバンク(それぞれ5201~5202)への入射光線/ボックス6106のエントリを均衡させる。一実施形態では、バンク割り当てカウンタ5220は、第1及び第2のメモリバンク5201~5202のそれぞれにおけるトラバースされていない光線の数のカウントを維持する。例えば、第1のバンク割り当てカウンタは、光線割り当て器5205が新たな光線を第1のバンク5201に追加するときにインクリメントされ、光線が第1のバンク5201から処理されるときにデクリメントされてもよい。同様に、第2のバンク割り当てカウンタは、光線割り当て器5205が、新たな光線を第2のバンク6101に追加するときにインクリメントされ、光線が第2のバンク5201から処理されるときにデクリメントされてもよい。
【0403】
一実施形態では、光線割り当て器5205は、現在の光線を、より小さいカウンタ値に関連するバンクに割り当てる。2つのカウンタが等しい場合、光線割り当て器5205は、いずれかのバンクを選択してもよく、或いは、カウンタが等しくなった最後の時点に選択されたもとは異なるバンクを選択してもよい。一実施形態では、各光線は、バンク5201~5202のうち1つの1つのエントリに記憶され、各バンクは、32個までの光線を記憶するための32個のエントリを含む。しかし、本発明の基礎の原理は、これらの詳細に限定されない。
【0404】
シェーダの実行レートがトラバーサルハードウェアの光線スループットよりも速いとき、多数の未解決の光線メッセージ及び関連する光線がキューイングでき、作業セットのサイズを増加させ、キャッシュヒット率を低減する。例えば、いくつかの状況では、コア/EU4001は、一次光線シェーダ5101を実行し、トラバーサル/交差回路5102~5103が光線をトラバースしてノード/プリミティブと光線を交差できるよりも速く光線5206を生成してもよい。一実施形態では、コア/EU4001は、光線をL1キャッシュ4003に記憶し、トラバーサル回路5102により処理されるべき対応する光線メッセージ(場合によって、ここでは「レイトレース(RayTrace)」メッセージと呼ばれる)を送信する。光線メッセージは、光線へのアドレスポインタと、トラバーサル回路が光線を読み取って処理するために使用する他の関連するデータとを含む。光線が生成される時間と光線メッセージがトラバーサル回路5102により処理される時間との間にかなりの遅延が存在する場合、光線は、L1キャッシュ4003から追い出されてもよく、システムメモリ3198へのアクセス又はより遅いキャッシュレベルを必要とする。
【0405】
本発明の実施形態は、この制限に対処するために、以下の技術のうち1つ以上を実装する。例えば、一実施形態では、光線メッセージキュー又はスタック内の光線メッセージの蓄積が監視される。高い閾値に到達した場合(例えば、エントリのうち80%~90%が満たされた場合)、EU4001をスロットリングして光線発生の頻度を低減するために、フィードバックメッセージ/信号が生成される。代替として或いはさらに、光線キュー/スタックは、後入れ先出し(last in first out, LIFO)キュー/スタックとして管理されてもよく、これは、それぞれの新たな光線がスタックの最上部に追加され、RT回路5110により次に処理されることを意味する。これは、処理されるべき次の光線がL1キャッシュに見つかる可能性を増加させるが、光線の処理に関連する「公平性」を減少させる。この理由は、古い光線ほど次に処理される可能性が低くなるからである。その結果、特定の光線が処理のためにスタックの最上部に到達する前に、かなりの時間が経過する可能性がある。
【0406】
図53は、シェーダ実行回路4000により生成されてレイトレーシング回路5110により消費される光線メッセージのフローを管理する本発明の一実施形態によるメモリバック式(memory-backed)スタック管理ロジック5380を示す。一実施形態では、メモリバック式スタック管理回路5380は、光線メッセージをメモリバック式スタック5330に記憶するか、或いは、光線メッセージをメモリサブシステム5490内に流出させる。
【0407】
動作中に、ディスパッチャ5305は、一次光線シェーダ5101のような作業を実行ユニット4001にディスパッチし、実行ユニット4001は、これに応じてシェーダを実行し、一次光線を生成する。光線は、EU4001のL1キャッシュ4003(又は、LLC4020又はシステムメモリ2511のようなメモリサブシステム5490のいずれかの部分)に最初に記憶される。一次光線に対応する光線メッセージは仲裁ロジック5312に送信され、仲裁ロジック5312は、仲裁ポリシー(例えば、ラウンドロビン、優先度ベース等)を実装し、光線メッセージを光線圧縮器5420に転送する。EU4001が一次光線シェーダを実行すると、特定のSIMDレーンはアイドル又は未使用になってもよく、空又は無効のスロットを生じる。光線圧縮器5320は、パイプライン内の空/無効のスロットを除去し、メッセージスロット内で可能な限り効率的に光線メッセージを圧縮及びパックし、光線メッセージFIFO5322を通じて圧縮された光線メッセージを送信する(他のバッファタイプが使用されてもよい)。一実施形態では、光線圧縮器5320は、キャッシュライン内に適合する光線データの固定サイズのチャンク(chunk)を形成する。
【0408】
それぞれの圧縮された光線メッセージは、スタック仲裁ロジック5325を介してメモリバック式スタック5430に渡され、スタック仲裁ロジック5325は、スタック制御/フィードバック回路5331及び/又は光線メッセージFIFOフィードバック回路5321からの信号に応じて、光線メッセージをメモリバック式スタック5330のメッセージエントリにおいてキューイングするか、或いは、メッセージをメモリサブシステム5490に記憶する。上記のように、特定のアプリケーションでは、メモリバック式スタック5330は、後入れ先出し(last-in first-out, LIFO)キューとして実装されてもよい。このような実装では、仲裁ロジック5325は、RT回路5110による即時の消費のために、光線メッセージをメモリバック式スタック5330の最上部に配置する。この実施形態では、メモリバック式スタック5330が一杯になったとき、より古いレイトレースメッセージは、メモリサブシステム5390の方に記憶される。
【0409】
メモリバック式カウント及びアドレス指定回路5335は、メモリサブシステム5390に記憶された光線メッセージをトラッキングする(例えば、メモリサブシステム5390内の光線メッセージの数を数える、及び/又は光線メッセージに関連するアドレスを維持管理する)。メモリバックエンド(memory backend)フェッチ回路5340は、制御回路5331からの要求に応じてメモリサブシステム5390から光線メッセージをフェッチするために、記憶されたカウント及びアドレスを使用し、これらをスタック5330にプッシュする。
【0410】
代替として或いはさらに、ディスパッチャ5405は、それぞれの記憶エレメントに記憶されたエントリの数が指定の高い閾値に到達したとき、メモリバック式スタック5430の制御回路5331及び/又は光線メッセージFIFO5322の制御回路5321からフィードバック信号を受信してもよい。これに応じて、ディスパッチャ5405は、圧力を低減するために(例えば、以下に説明するスタックの数を制限することにより)、EU4001への新たな作業のディスパッチを応答してスロットリングしてもよい。メモリバック式スタック5430内のレイトレースメッセージの数が低い閾値に到達したとき、ディスパッチャ5405は、(例えば、可能な限り効率的に)通常のスループットでディスパッチ作業を再開する。メモリバック式スタック5430の一実施形態は、それぞれが29個の光線を記憶可能な64バイトのエントリを有する。
【0411】
一実施形態では、レイトレースメッセージは、RT回路5110によりメモリサブシステム5490から光線データを読み取って処理するために使用されるポインタ、スタックID及び補足制御データを含む。EUがSIMD回路を含む実装では、レイトレースメッセージはSIMDレーン当たり1つの光線を参照する。
【0412】
図54は、ローカルチップストレージ5404への書き込みの例を示し、ローカルチップストレージ5404はメモリバック式スタック5330内のエントリを含んでもよい。図示のように、書き込みは、同期圧縮メッセージ5420又は非同期圧縮メッセージ5421を含んでもよい。ここで使用されるように、同期圧縮メッセージ5420は、ローカルチップストレージ5404に書き込まれて同期的に処理される、すなわち、これらが受信されたときに処理されるものである。対照的に、非同期圧縮メッセージ5421は、順序外れで処理されてもよいものである。例えば、いくつかの光線メッセージは、他のメッセージを優先してバイパスされ、メモリサブシステム5390に流出し、次いで、5404のようなエントリ及び/又は他の処理リソースが利用可能であるときにメモリバック式スタック5330に戻されてもよい。5413において光線メッセージがメモリに非同期的に流出したとき、これは、データ及び実行リソースが利用可能であるときに、メモリ2511からローカルチップストレージ5404に非同期的に入れられてもよい。
【0413】
現在作業中のメッセージ5405は、レイトレーシング回路により現在処理されているメッセージを含む。一実施形態では、現在作業中のメッセージを実行するために必要な特定のリソース及びデータが利用不可能である場合、部分的に処理されたメッセージ5406がローカルチップストレージ5404に書き戻されてもよく、及び/又は、メモリ5413に戻されもよい。例えば、初期メッセージ復号及び評価の後に、現在作業中のメッセージ5405により参照される光線がシステムメモリ2511から要求されなければならないと決定された場合、光線要求はメモリサブシステム5390に送信されてもよく、(部分的に処理された)光線メッセージ5406は、ローカルチップストレージ5404に書き戻されてもよい。続いて、光線がシステムメモリ2511から取得され、ローカルメモリ(例えば、ローカルキャッシュ、光線バンク5201~5202等)内に記憶されたとき、部分的に処理されたメッセージ5406は、ローカルチップストレージ5404から読み取られ、処理が完了してもよい。
【0414】
或る実装は、非同期処理と同期処理との組み合わせを使用してもよい。例えば、光線メッセージがRT回路5110により消費されるレート以下のレートで生成されている場合、パイプラインは同期方式で動作してもよい。しかし、光線メッセージがRT回路5110により処理できるよりも速く生成されているとき、メモリバック式スタック5330は一杯になり、メッセージは、メモリサブシステム5390に流出し、非同期動作を生じる。
【0415】
一実施形態では、メモリバック式スタック5330が高い閾値(例えば、キューイングされる光線メッセージの指定の数)に到達したとき、制御/フィードバック回路5331は、制御/フィードバック信号をディスパッチャ5305に送信してもよい。この実装では、ディスパッチ制御回路5333は、信号を解釈し、ディスパッチャ5305に対して実行ユニット4001上の負荷を低減させ(例えば、新たな一次光線シェーダがディスパッチされる頻度を低減させ)、それにより、メモリバック式スタック5330上の負荷を間接的に低減する。ディスパッチ制御回路5333の一実施形態は、メモリバック式スタック5330又はEUをRT回路5110に結合する他のバッファ/キューのサイズをサンプリングすることにより、高い閾値状態を検出する。
【0416】
1つの特定の実装では、光線メッセージは、図55の動作に従ってスロットリングされる。図示の方法は、ここに記載のアーキテクチャ上に実装されてもよいが、いずれか特定のプロセッサ又はシステムアーキテクチャに限定されない。
【0417】
5501において、ライブスタック閾値は、特定の構成可能な値Nstack(例えば、2K)に初期化される。5502において決定された、Nstack個の一次シェーダスタックがスケジュールされたとき、5503において、EU(シェーダを実行する)とレイトレーシング回路との間の光線メッセージを記憶するためのFIFOバッファ/キューがサンプリングされる(例えば、現在使用されているエントリの数を決定するため)。一実施形態では、FIFOバッファ/キューは、光線メッセージFIFO5322を含むが、本発明の基礎の原理は、この特定の実装に限定されない。
【0418】
5504において、FIFOバッファ/キューの現在の状態(例えば、消費されたエントリ数)に基づいて、スタックの数が以下に従って調整される。
Nstack=Nstack-α*(FIFO.size-Size Threshold)
5504において、Nstackについて最小値及び最大値(それぞれMinStacks及びMaxStacks、又は以下に説明するデュアルサブスライス(dual sub-slice, DSS)の実装ではMinDSSStacks及びMaxDSSStacks)が設定される。次いで、プロセスは連続ループで5502に戻り、FIFOをサンプリングし、それに応じてライブスタックの数を調整する。その結果、EUの出力は、FIFO内のエントリの最大値を検出することによりスロットリングされ、レイトレーシングハードウェア時間が追いつくことが可能になる。低い閾値に到達することにより決定されることで、レイトレーシングハードウェアが追いつくと、スタックの数は、最大値に設定されてもよい。
【0419】
上記の動作では、EUの一部を有効/無効にするために制御ビットを設定することにより、αの値は、0.25の増分で0~1の範囲の値に構成できる。0の値はオートスロットリングを無効にする。一実施形態では、FIFOサイズ閾値は、ローカルレジスタに記憶されたFIFOのサイズの半分に設定される(例えば、レジスタに記憶される16個のスタックエントリの場合には8)。MinStacks及びMaxStacksの値はまた、制御ビットを使用して構成できる。
【0420】
上記のように、純粋な後入れ先出し(last-in-first-out, LIFO)スケジューリング方式が光線メッセージを処理するときに使用される場合、上記のようなスタックスロットリングは必要とされない。この実施形態は、EUメッセージFIFO5322の代わりに、EUメッセージLIFOスタックを使用する。しかし、複数のディスパッチコマンドがスタックにあるとき、この方式は順方向の進行を保証しない。したがって、特定のアプリケーションでは最適な構成ではない可能性がある。
【0421】
本発明の一実施形態は、アプリケーション要件に基づいて構成可能である。アプリケーションが光線処理スケジューリングにおいて公平性を要求する場合、スタックスロットリングは、FIFO内の光線の数が特定の低い閾値に到達するまで、光線ディスパッチ頻度を減少させるように選択されてもよい。代替として、公平性が要求されない場合、LIFOメッセージ処理が使用されてもよい。
【0422】
動的なスタックスロットリングに加えて、本発明の一実施形態は、静的なスタックスロットリングのための技術を実装する。図56は、実行ユニット4001の実行リソースが、デュアル「サブスライス」5501~5502の間で分散された光線を生成する一実施形態に関する更なる詳細を示す。一実施形態では、サブスライスは、EU実行リソースの指定の部分を含む。仲裁器5612は、第1のサブライス5501又は第2のサブライス5502から次の光線を選択するために、その仲裁ポリシーを適用する。スロットプロセッサは、指定のスロット内の光線圧縮器に光線をサブミットし、サブスライス5501~5502により提供される光線データから無効な光線参照を除去し、キャッシュライン内に適合する光線データの固定サイズのチャンクを形成する。一実施形態では、各サブライス5501~5502は、最大2Kスタックに限定されるが、本発明の基礎の原理は、この実装に限定されない。
【0423】
本発明の一実施形態では、コンパイラ5690は、EU4001上で実行される単一命令複数スレッド(single-instruction multiple-thread, SIMT)プログラムコード又は単一命令複数データ(single-instruction multiple data, SIMD)プログラムコードのようなデータ並列プログラムコード5691を生成する。例えば、一実施形態では、各EU4001は、機能ユニット(functional unit, FU)のグループ上で同じ命令の異なるインスタンスを並列に実行し、命令の各インスタンスが入力光線データの異なる部分で動作する(ベクトルレジスタにパックされてもよい)。
【0424】
一実施形態では、コンパイラ5690は、スレッドを、1つのEU、EUの一部又はEUのセットにより実行されるスレッドグループに編成する。例えば、各サブスライス5501~5502は、EUの指定の部分、複数のEU又は個々のEUを表してもよい。スレッドグループは、EUの並列処理能力(例えば、命令を並列に実行可能な機能ユニットの数)及びEU実行リソースがサブスライスに細分される方式に基づいて、コンパイラ5690により選択されてもよい。コンパイラ5690は、光線の生成、最も近い光線のヒットの処理、光線のミスの処理等のような指定の機能を実行するためのスレッドグループのセットを含むカーネルを生成してもよい。例えば、ここに記載のシェーダは、それぞれ特定のカーネルのインスタンスでもよい。
【0425】
1つの実装では、各EUは、その機能ユニット(functional unit, FU)のみにアクセス可能なローカルデータストアを割り当てられる。EUがデータを交換することを可能にするために、EUの全部又は一部(例えば、サブスライス)にアクセス可能なグローバルデータストアも提供されてもよい。グローバルデータストア及び/又はローカルデータストアは、専用のオンチップメモリ内に及び/又はシステムメモリ内の指定のメモリ領域を介して実装されてもよい。1つの実装では、BVHノードスタック及び光線スタックを含む、ここに記載の様々なスタックが、グローバルメモリストア及び/又はローカルメモリストアに記憶される。
【0426】
上記のように、各サブスライス5501~5502は、最大N個のスタック(例えば、2K)を動的に割り当てられてもよい。一実施形態では、コンパイラ5690は、実行のためにカーネルをサブミットする前に、メモリマッピングされたIO(memory mapped IO, MMIO)レジスタ内の指定の値をプログラミングすることにより、スタックストレージをこの最大値よりも小さく制限できる。コンパイラ5690は、プログラムされた最大値がスレッドグループ内の全てのスレッドのスタックサイズに基づいて選択されることを確保するように(ハードウェアのハングを回避するために)、コードを評価する。例えば、SIMD16スレッド及び16個のスレッド(例えば、NUM_THREADS_IN_THREADGROUP=16)を含むスレッドグループを仮定すると、コンパイラ5690は、スタック値を少なくとも16×16=256個のスタックに設定してもよい。
【0427】
これは静的にプログラムされた値であるので、一実施形態では、全体のデュアルサブライス(dual subslice, DSS)パイプラインは、値を変更する前にアイドル状態にされ、すなわち、実行中のスレッドがなく、DSS内の全てのデータがグローバルメモリにプッシュされる。一実施形態では、コンパイラ5690は、値を変更する前にパイプ制御フラッシュ(pipe-control flush)を実行することにより、これを達成する。
【0428】
[例]
以下は、本発明の異なる実施形態の例示的な実装である。
【0429】
例1.複数の光線シェーダを実行して複数の一次光線及び対応する複数の光線メッセージを生成する複数の機能ユニットを含む実行回路と、EUにより生成された光線メッセージをキューイングする先入れ先出し(FIFO)バッファと、複数の一次光線のうち1つ以上を記憶するキャッシュと、複数の光線メッセージの第1のサブセットを対応する複数のエントリに記憶するメモリバック式スタックと、メモリバック式スタック内で光線メッセージにより現在占有されているエントリの数に少なくとも部分的に基づいて、複数の光線メッセージの第2のサブセットをメモリバック式スタックに記憶するか、或いは、複数の光線メッセージの第2のサブセットの1つ以上をメモリサブシステムに一時的に記憶するメモリバック式スタック管理回路と、メモリバック式スタックから次の光線メッセージを読み取り、キャッシュ又はメモリサブシステムから光線メッセージにより識別される次の一次光線を取得し、次の一次光線に対してトラバーサル演算を実行するレイトラバーサル回路とを含む装置。
【0430】
例2.メモリバック式スタック及び/又はメモリサブシステムへの記憶の前に、複数の光線メッセージのそれぞれを一時的にキューイングする光線メッセージ先入れ先出し(FIFO)バッファを更に含む、例1に記載の装置。
【0431】
例3.複数の光線シェーダを実行回路にディスパッチするディスパッチャを更に含み、ディスパッチャは、メモリバック式スタック内で光線メッセージにより現在占有されているエントリの数及び/又は光線メッセージFIFOバッファ内の光線メッセージの占有率に少なくとも部分的に基づいて、複数の光線シェーダのディスパッチをスロットリングするスロットリング回路を含む、例2に記載の装置。
【0432】
例4.スロットリング回路は、メモリバック式スタック内で光線メッセージにより現在占有されているエントリの数及び/又は光線メッセージFIFOバッファ内の光線メッセージの占有率に少なくとも部分的に基づいて、1つ以上のスタック閾値を調整する、例2に記載の装置。
【0433】
例5.スタック閾値は、複数の光線シェーダを実行するために機能ユニットにアクセス可能なライブスタックの最大数を示す第1の最大スタック値を含む、例4に記載の装置。
【0434】
例6.スタック閾値は、複数の光線シェーダを実行するために機能ユニットにアクセス可能なライブスタックの最小数を示す第1の最小スタック値を更に含む、例5に記載の装置。
【0435】
例7.ディスパッチャは、最小スタック値及び/又は最大スタック値に基づいて、複数の光線シェーダを実行回路にディスパッチする、例6に記載の装置。
【0436】
例8.実行回路は、2つ以上のサブスライスに細分され、機能ユニットの第1のサブセットを含む第1のサブスライスは、第1の最小スタック値及び/又は最大スタック値に関連付けられ、機能ユニットの第2のサブセットを含む第2のサブスライスは、第2の最小スタック値及び/又は最大スタック値に関連付けられる、例7に記載の装置。
【0437】
例9.実行回路とメモリバック式スタックとの間に結合された圧縮器を更に含み、圧縮器は、単一命令複数データ(SIMD)レーンに関連する空及び/又は無効のスロットを除去する、例1に記載の装置。
【0438】
例10.圧縮器は、キャッシュのキャッシュレーン内に適合する光線データの固定サイズのチャンクを生成する、例9に記載の装置。
【0439】
例11.メモリバック式スタック管理回路は、メモリバック式スタックにプッシュされる複数の光線メッセージの第2のサブセットの1つ以上をメモリサブシステムからフェッチするメモリバックエンドフェッチ回路を更に含む、例1に記載の装置。
【0440】
例12.複数の光線シェーダにより複数の一次光線及び対応する複数の光線メッセージを生成するステップと、光線メッセージを先入れ先出し(FIFO)バッファにキューイングするステップと、複数の一次光線のうち1つ以上をキャッシュに記憶するステップと、複数の光線メッセージの第1のサブセットをメモリバック式スタックの対応する複数のエントリに記憶するステップと、メモリバック式スタック内で光線メッセージにより現在占有されているエントリの数に少なくとも部分的に基づいて、複数の光線メッセージの第2のサブセットをメモリバック式スタックに記憶するか、或いは、複数の光線メッセージの第2のサブセットの1つ以上をメモリサブシステムに一時的に記憶するステップと、メモリバック式スタックから次の光線メッセージを読み取るステップと、キャッシュ又はメモリサブシステムから光線メッセージにより識別される次の一次光線を取得するステップと、次の一次光線に対してトラバーサル演算を実行するステップとを含む方法。
【0441】
例13.メモリバック式スタック及び/又はメモリサブシステムへの記憶の前に、複数の光線メッセージのそれぞれを光線メッセージ先入れ先出し(FIFO)バッファに一時的にキューイングするステップを更に含む、例12に記載の方法。
【0442】
例14.複数の光線シェーダを実行回路にディスパッチするステップと、メモリバック式スタック内で光線メッセージにより現在占有されているエントリの数及び/又は光線メッセージFIFOバッファ内の光線メッセージの占有率に少なくとも部分的に基づいて、複数の光線シェーダのディスパッチをスロットリングするステップとを更に含む、例13に記載の方法。
【0443】
例15.1つ以上のスタック閾値は、メモリバック式スタック内で光線メッセージにより現在占有されているエントリの数及び/又は光線メッセージFIFOバッファ内の光線メッセージの占有率に少なくとも部分的に基づいて調整される、例13に記載の方法。
【0444】
例16.スタック閾値は、複数の光線シェーダを実行するために機能ユニットにアクセス可能なライブスタックの最大数を示す第1の最大スタック値を含む、例15に記載の方法。
【0445】
例17.スタック閾値は、複数の光線シェーダを実行するために機能ユニットにアクセス可能なライブスタックの最小数を示す第1の最小スタック値を更に含む、例16に記載の方法。
【0446】
例18.最小スタック値及び/又は最大スタック値に基づいて、複数の光線シェーダを実行回路にディスパッチするステップを更に含む、例17に記載の方法。
【0447】
例19.実行回路を2つ以上のサブスライスに細分するステップを更に含み、機能ユニットの第1のサブセットを含む第1のサブスライスは、第1の最小スタック値及び/又は最大スタック値に関連付けられ、機能ユニットの第2のサブセットを含む第2のサブスライスは、第2の最小スタック値及び/又は最大スタック値に関連付けられる、例18に記載の方法。
【0448】
例20.単一命令複数データ(SIMD)レーンに関連する空及び/又は無効のスロットを除去するステップを更に含む、例12に記載の方法。
【0449】
例21.キャッシュのキャッシュレーン内に適合する光線データの固定サイズのチャンクを生成するステップを更に含む、例20に記載の方法。
【0450】
例22.メモリバック式スタックにプッシュされる複数の光線メッセージの第2のサブセットの1つ以上をメモリサブシステムからフェッチするステップを更に含む、例12に記載の方法。
【0451】
例23.機械により実行されたとき、機械に対して、複数の光線シェーダにより複数の一次光線及び対応する複数の光線メッセージを生成する動作と、光線メッセージを先入れ先出し(FIFO)バッファにキューイングする動作と、複数の一次光線のうち1つ以上をキャッシュに記憶する動作と、複数の光線メッセージの第1のサブセットをメモリバック式スタックの対応する複数のエントリに記憶する動作と、メモリバック式スタック内で光線メッセージにより現在占有されているエントリの数に少なくとも部分的に基づいて、複数の光線メッセージの第2のサブセットをメモリバック式スタックに記憶するか、或いは、複数の光線メッセージの第2のサブセットの1つ以上をメモリサブシステムに一時的に記憶する動作と、メモリバック式スタックから次の光線メッセージを読み取る動作と、キャッシュ又はメモリサブシステムから光線メッセージにより識別される次の一次光線を取得する動作と、次の一次光線に対してトラバーサル演算を実行する動作とを実行させるプログラムコードを記憶した機械読み取り可能媒体。
【0452】
例24.メモリバック式スタック及び/又はメモリサブシステムへの記憶の前に、複数の光線メッセージのそれぞれを光線メッセージ先入れ先出し(FIFO)バッファに一時的にキューイングするステップを更に含む、例23に記載の方法。
【0453】
例25.複数の光線シェーダを実行回路にディスパッチするステップと、メモリバック式スタック内で光線メッセージにより現在占有されているエントリの数及び/又は光線メッセージFIFOバッファ内の光線メッセージの占有率に少なくとも部分的に基づいて、複数の光線シェーダのディスパッチをスロットリングするステップとを更に含む、例24に記載の方法。
【0454】
例26.1つ以上のスタック閾値は、メモリバック式スタック内で光線メッセージにより現在占有されているエントリの数及び/又は光線メッセージFIFOバッファ内の光線メッセージの占有率に少なくとも部分的に基づいて調整される、例24に記載の方法。
【0455】
例27.スタック閾値は、複数の光線シェーダを実行するために機能ユニットにアクセス可能なライブスタックの最大数を示す第1の最大スタック値を含む、例26に記載の方法。
【0456】
例28.スタック閾値は、複数の光線シェーダを実行するために機能ユニットにアクセス可能なライブスタックの最小数を示す第1の最小スタック値を更に含む、例27に記載の方法。
【0457】
例29.最小スタック値及び/又は最大スタック値に基づいて、複数の光線シェーダを実行回路にディスパッチするステップを更に含む、例28に記載の方法。
【0458】
例30.実行回路を2つ以上のサブスライスに細分するステップを更に含み、機能ユニットの第1のサブセットを含む第1のサブスライスは、第1の最小スタック値及び/又は最大スタック値に関連付けられ、機能ユニットの第2のサブセットを含む第2のサブスライスは、第2の最小スタック値及び/又は最大スタック値に関連付けられる、例29に記載の方法。
【0459】
例31.単一命令複数データ(SIMD)レーンに関連する空及び/又は無効のスロットを除去するステップを更に含む、例23に記載の方法。
【0460】
例32.キャッシュのキャッシュレーン内に適合する光線データの固定サイズのチャンクを生成するステップを更に含む、例31に記載の方法。
【0461】
例33.メモリバック式スタックにプッシュされる複数の光線メッセージの第2のサブセットの1つ以上をメモリサブシステムからフェッチするステップを更に含む、例23に記載の方法。
【0462】
本発明の実施形態は、上記の様々なステップを含んでもよい。ステップは、汎用又は特殊目的のプロセッサにステップを実行させるために使用され得る機械実行可能命令に具体化されてもよい。代替として、これらのステップは、ステップを実行するためのハード配線ロジックを含む特定のハードウェアコンポーネントにより、或いは、プログラムされたコンピュータコンポーネントとカスタムハードウェアコンポーネントとのいずれかの組み合わせにより実行されてもよい。
【0463】
ここに記載のように、命令は、特定の動作を実行するように構成された特定用途向け集積回路(application specific integrated circuit, ASIC)のような特定の構成のハードウェアを示してもよく、或いは、非一時的なコンピュータ読み取り可能媒体に具現化されたメモリに記憶された所定の機能又はソフトウェア命令を有してもよい。したがって、図面に示す技術は、1つ以上の電子デバイス(例えば、エンドステーション、ネットワークエレメント等)上に記憶されて実行されるコード及びデータを使用して実装できる。このような電子デバイスは、非一時的なコンピュータ機械読み取り可能記憶媒体(例えば、磁気ディスク、光ディスク、ランダムアクセスメモリ、読み取り専用メモリ、フラッシュメモリデバイス、相変化メモリ)及び一時的なコンピュータ機械読み取り可能通信媒体(例えば、搬送波、赤外線信号、デジタル信号等のような電気、光学、音響又は他の形式の伝搬信号)のようなコンピュータ読み取り可能媒体を使用して、コード及びデータを記憶して通信する(内部的に及び/又はネットワーク上で他の電子デバイスと通信する)。
【0464】
さらに、このような電子デバイスは、典型的には、1つ以上の記憶デバイス(非一時的な機械読み取り可能記憶媒体)、ユーザ入出力デバイス(例えば、キーボード、タッチスクリーン及び/又はディスプレイ)及びネットワーク接続のような1つ以上の他のコンポーネントに結合された1つ以上のプロセッサのセットを含む。プロセッサのセット及び他のコンポーネントの結合は、典型的には、1つ以上のバス及びブリッジ(バスコントローラとも呼ばれる)を通じて行われる。記憶デバイス及びネットワークトラフィックを搬送する信号は、1つ以上の機械読み取り可能記憶媒体及び機械読み取り可能通信媒体をそれぞれ表す。したがって、所与の電子デバイスの記憶デバイスは、典型的には、その電子デバイスの1つ以上のプロセッサのセット上で実行するためのコード及び/又はデータを記憶する。当然に、本発明の実施形態の1つ又は複数の部分は、ソフトウェア、ファームウェア及び/又はハードウェアの異なる組み合わせを使用して実装されてもよい。この詳細な説明を通じて、説明の目的で、本発明の完全な理解を提供するために、多数の特定の詳細が記載されている。しかし、本発明がこれらの特定の詳細のうちいくつかなしに実施され得ることは、当業者にとって明らかである。特定の場合には、本発明の対象物を不明瞭にすることを回避するために、周知の構造及び機能は詳細に記載されていない。したがって、本発明の範囲及び真意は、以下の請求項に鑑みて判断されるべきである。
図1
図2A
図2B
図2C
図2D
図3A
図3B
図3C
図4
図5A
図5B
図6
図7
図8
図9A
図9B
図10
図11A
図11B
図11C
図11D
図12
図13
図14
図15
図16
図17
図18A
図18B
図19
図20
図21
図22
図23
図24
図25
図26
図27
図28
図29
図30A
図30B
図31
図32
図33
図34
図35
図36
図37
図38
図39
図40
図41
図42
図43
図44
図45
図46A
図46B
図47
図48
図49
図50
図51
図52
図53
図54
図55
図56