(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2024-07-22
(45)【発行日】2024-07-30
(54)【発明の名称】非同期レイトレーシング用の装置及び方法
(51)【国際特許分類】
G06T 15/06 20110101AFI20240723BHJP
【FI】
G06T15/06
【外国語出願】
(21)【出願番号】P 2020195384
(22)【出願日】2020-11-25
【審査請求日】2023-08-30
(32)【優先日】2020-03-15
(33)【優先権主張国・地域又は機関】US
(73)【特許権者】
【識別番号】591003943
【氏名又は名称】インテル・コーポレーション
(74)【代理人】
【識別番号】110000877
【氏名又は名称】弁理士法人RYUKA国際特許事務所
(72)【発明者】
【氏名】プラスーンクマール スルティ
(72)【発明者】
【氏名】アビシェーク アール.アップ
(72)【発明者】
【氏名】カーティク バイドヤナサン
(72)【発明者】
【氏名】サイカト マンダル
(72)【発明者】
【氏名】マイケル ノリス
【審査官】松永 隆志
(56)【参考文献】
【文献】米国特許出願公開第2020/51318(US,A1)
【文献】米国特許出願公開第2020/43218(US,A1)
【文献】米国特許出願公開第2017/287100(US,A1)
(58)【調査した分野】(Int.Cl.,DB名)
G06T 15/06
(57)【特許請求の範囲】
【請求項1】
ルートノードと、複数の内部ノードと、プリミティブを含む複数のリーフノードとを含む、階層的に配置された複数のノードを含むバウンディングボリューム階層(BVH)を構築するためのBVH生成部であって、各内部ノードが前記ルートノード又は別の内部ノードへの子ノードを含み、各リーフノードが内部ノードへの子ノードを含む、BVH生成部と、
第1の複数のエントリとして配置される第1格納バンクと、
第2の複数のエントリとして配置される第2格納バンクであって、前記第1の複数のエントリ及び前記第2の複数のエントリの各エントリが前記BVHをトラバースするレイを格納する、第2格納バンクと、
入射レイを、前記第1格納バンク及び前記第2格納バンクに現在格納されているレイの相対数に基づいて、前記第1格納バンク又は前記第2格納バンクのいずれかに分配するための割当回路と、
前記第1格納バンク及び前記第2格納バンクから交互に次のレイを選択するトラバーサル回路であって、前記トラバーサル回路は、BVHノードスタックの先頭から次のBVHノードを読み出し、且つ前記次のレイが前記次のBVHノードに交差するかを判定することによって、前記次のレイを前記BVHにトラバースする、トラバーサル回路と
を備える装置。
【請求項2】
前記第1格納バンクに現在格納されている第1の数のレイと、前記第2格納バンクに現在格納されている第2の数のレイとを追跡するためのバンク監視回路をさらに備える、請求項1に記載の装置。
【請求項3】
前記バンク監視回路は、
前記割当回路により前記第1格納バンクにレイが加えられたことに応じてインクリメントされ、前記トラバーサル回路により前記第1格納バンクからレイが読み出されたことに応じてデクリメントされる第1カウンタと、
前記割当回路により前記第2格納バンクにレイが加えられたことに応じてインクリメントされ、前記トラバーサル回路により前記第2格納バンクからレイが読み出されたことに応じてデクリメントされる第2カウンタと
をさらに備える、請求項2に記載の装置。
【請求項4】
前記割当回路は前記入射レイを、前記第1カウンタ及び前記第2カウンタの相対値に基づいて、前記第1格納バンク又は前記第2格納バンクのいずれかに分配する、請求項3に記載の装置。
【請求項5】
前記BVHノードスタックは第1のBVHノードスタックを含み、前記第1のBVHノードスタックは、前記第1の複数の子ノードの親ノードにヒットしたレイに関連する第1の複数の内部子ノードを格納し、
前記装置は、第2の複数の内部子ノード及び/又はリーフノードを格納するための第2のBVHノードスタックをさらに備える、請求項1から4のいずれか一項に記載の装置。
【請求項6】
前記第1の複数の内部子ノード及び前記第2の複数の内部子ノードは、各内部子ノードと、前記次のレイに関連する座標値との間の距離に基づいて、前記第1のBVHノードスタック及び前記第2のBVHノードスタック上に順序付けされる、請求項5に記載の装置。
【請求項7】
前記第1のBVHノードスタックは、前記第1格納バンクの前記第1の複数のエントリのうちの1つ又は複数に格納され、前記第2のBVHノードスタックは、前記第2格納バンクの前記第2の複数のエントリのうちの1つ又は複数に格納される、請求項5に記載の装置。
【請求項8】
前記BVHノードスタックはN個のエントリを含み、Nは前記BVHのノード数未満である、請求項1から7のいずれか一項に記載の装置。
【請求項9】
前記BVHノードスタックの前記先頭から読み出された各BVHノードに対して、前記トラバーサル回路が前記次のレイを処理したことに応じて、追跡アレイを更新するためのトラバーサル追跡回路をさらに備える、請求項8に記載の装置。
【請求項10】
前記トラバーサル回路は、シェーダの実行に応じて現在のトラバーサル状態をメモリに保存し、前記現在のトラバーサル状態は、前記第1の複数のエントリと、前記第2の複数のエントリと、前記BVHノードスタックとを含む、請求項9に記載の装置。
【請求項11】
前記トラバーサル回路は、メモリから前記現在のトラバーサル状態を復元してトラバーサルオペレーションを再開し、前記トラバーサル回路は、前記追跡アレイを読み出して、前記トラバーサルオペレーションを再開する開始点を判定する、請求項10に記載の装置。
【請求項12】
前記次のレイが前記次のBVHノードに交差する場合、前記次のBVHノードの複数の子ノードを、距離値に基づいてソートすることで、ソート順を生成し、前記BVHノードスタック内に、前記複数の子ノードを前記ソート順に格納する、請求項11に記載の装置。
【請求項13】
ルートノードと、複数の内部ノードと、プリミティブを含む複数のリーフノードとを含む、階層的に配置された複数のノードを含むバウンディングボリューム階層(BVH)を生成する段階であって、各内部ノードが前記ルートノード又は別の内部ノードへの子ノードを含み、各リーフノードが内部ノードへの子ノードを含む、生成する段階と、
第1格納バンク内に第1の複数のエントリを構成する段階と、
第2格納バンク内に第2の複数のエントリを構成する段階であって、前記第1の複数のエントリ及び前記第2の複数のエントリの各エントリが前記BVHをトラバースするレイを格納する、構成する段階と、
入射レイを、前記第1格納バンク及び前記第2格納バンクに現在格納されているレイの相対数に基づいて、前記第1格納バンク又は前記第2格納バンクのいずれかに分配する段階と、
前記第1格納バンク及び前記第2格納バンクを交互に切り替えることによってトラバーサル処理を行うために次のレイを選択する段階と、
BVHノードスタックの先頭から次のBVHノードをポップする段階と、
前記次のレイが前記次のBVHノードに交差するかを判定する段階と
を含む方法。
【請求項14】
前記第1格納バンクに現在格納されている第1の数のレイと、前記第2格納バンクに現在格納されている第2の数のレイとを追跡する段階をさらに含む、請求項13に記載の方法。
【請求項15】
前記追跡する段階は、
前記第1格納バンクにレイが加えられたことに応じて第1カウンタをインクリメントし、前記第1格納バンクからレイが読み出されたことに応じてデクリメントされる段階と、
前記第2格納バンクにレイが加えられたことに応じて第2カウンタをインクリメントし、前記第2格納バンクからレイが読み出されたことに応じてデクリメントされる段階と
をさらに含む、請求項14に記載の方法。
【請求項16】
前記入射レイは、前記第1カウンタ及び前記第2カウンタの相対値に基づいて、前記第1格納バンク又は前記第2格納バンクのいずれかに分配される、請求項15に記載の方法。
【請求項17】
前記BVHノードスタックは第1のBVHノードスタックを含み、前記第1のBVHノードスタックは前記第1の複数の子ノードの親ノードにヒットしたレイに関連する第1の複数の内部子ノードを格納し、
前記方法は、第2の複数の内部子ノード及び/又はリーフノードを第2のBVHノードスタックに格納する段階をさらに含む、請求項13から16のいずれか一項に記載の方法。
【請求項18】
前記第1の複数の内部子ノード及び前記第2の複数の内部子ノードは、各内部子ノードと、前記次のレイに関連する座標値との間の距離に基づいて、前記第1のBVHノードスタック及び前記第2のBVHノードスタック上に順序付けされる、請求項17に記載の方法。
【請求項19】
前記第1のBVHノードスタックは、前記第1格納バンクの前記第1の複数のエントリのうちの1つ又は複数に格納され、前記第2のBVHノードスタックは、前記第2格納バンクの前記第2の複数のエントリのうちの1つ又は複数に格納される、請求項17に記載の方法。
【請求項20】
前記BVHノードスタックはN個のエントリを含み、Nは前記BVHのノード数未満である、請求項13から19のいずれか一項に記載の方法。
【請求項21】
前記次のBVHノードと、前記BVHノードスタックの前記先頭から読み出された各追加のBVHノードとに対して、前記次のレイを処理したことに応じて、追跡アレイを更新する段階をさらに含む、請求項20に記載の方法。
【請求項22】
シェーダの実行に応じて現在のトラバーサル状態をメモリに保存する段階であって、前記現在のトラバーサル状態は、前記第1の複数のエントリと、前記第2の複数のエントリと、前記BVHノードスタックとを含む、保存する段階をさらに含む、請求項21に記載の方法。
【請求項23】
メモリから前記現在のトラバーサル状態を復元してトラバーサルオペレーションを再開する段階と、
前記追跡アレイを読み出して、前記トラバーサルオペレーションを再開する開始点を判定する段階と
をさらに含む、請求項22に記載の方法。
【請求項24】
前記次のレイが前記次のBVHノードに交差する場合、前記次のBVHノードの複数の子ノードを、距離値に基づいてソートすることで、ソート順を生成し、前記BVHノードスタック内に、前記複数の子ノードを前記ソート順に格納する、請求項23に記載の方法。
【請求項25】
ルートノードと、複数の内部ノードと、プリミティブを含む複数のリーフノードとを含む、階層的に配置された複数のノードを含むバウンディングボリューム階層(BVH)を生成するオペレーションであって、各内部ノードが前記ルートノード又は別の内部ノードへの子ノードを含み、各リーフノードが内部ノードへの子ノードを含む、生成するオペレーションと、
第1格納バンク内に第1の複数のエントリを構成するオペレーションと、
第2格納バンク内に第2の複数のエントリを構成するオペレーションであって、前記第1の複数のエントリ及び前記第2の複数のエントリの各エントリが前記BVHをトラバースするレイを格納する、構成するオペレーションと、
入射レイを、前記第1格納バンク及び前記第2格納バンクに現在格納されているレイの相対数に基づいて、前記第1格納バンク又は前記第2格納バンクのいずれかに分配するオペレーションと、
前記第1格納バンク及び前記第2格納バンクを交互に切り替えることによってトラバーサル処理を行うために次のレイを選択するオペレーションと、
BVHノードスタックの先頭から次のBVHノードをポップするオペレーションと、
前記次のレイが前記次のBVHノードに交差するかを判定するオペレーションと
を機械に行わせるプログラム。
【請求項26】
請求項25に記載のプログラムを格納するための機械可読媒体。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は概して、グラフィックスプロセッサの分野に関する。より具体的には、本発明は、非同期レイトレーシング用の装置及び方法に関する。
【背景技術】
【0002】
レイトレーシングとは、光輸送が物理ベースのレンダリングを通じてシミュレーションされる技術である。レイトレーシングは、映画のレンダリングで広く用いられているが、ほんの数年前まで、リアルタイムの実行には非常に多くのリソースを必要とすると考えられていた。レイトレーシングの重要なオペレーションのうちの1つが、「レイトラバーサル」として知られている、レイ-シーン間インターセクションを求める可視性クエリの処理であり、レイトラバーサルとは、バウンディングボリューム階層(BVH)においてノードをトラバースして交差することにより、レイ-シーン間インターセクションを計算することである。
【図面の簡単な説明】
【0003】
以下の図面を併用して、以下の詳細な説明から本発明の十分な理解を得ることができる。
【0004】
【
図1】1つ又は複数のプロセッサコアを有するプロセッサとグラフィックスプロセッサとを備えるコンピュータシステムの一実施形態のブロック図である。
【0005】
【
図2A】1つ又は複数のプロセッサコアと、統合メモリコントローラと、統合グラフィックスプロセッサとを有するプロセッサの1つの実施形態のブロック図である。
【
図2B】グラフィックスプロセッサコアのハードウェアロジックの1つの実施形態のブロック図である。
【
図2C】マルチコアグループに配置された専用のグラフィックス処理リソースのセットを含むグラフィックス処理ユニットの1つの実施形態のブロック図である。
【
図2D】グラフィックスプロセッサ及び/又はコンピュートアクセラレータとして構成され得る汎用グラフィックス処理ユニットの1つの実施形態のブロック図である。
【0006】
【
図3A】グラフィックスプロセッサの1つの実施形態のブロック図であり、グラフィックスプロセッサは、別個のグラフィックス処理ユニットであってもよく、複数のプロセッシングコアと統合されたグラフィックスプロセッサであってもよい。
【
図3B】グラフィックスプロセッサの1つの実施形態のブロック図である。
【
図3C】コンピュートアクセラレータの1つの実施形態のブロック図である。
【0007】
【
図4】グラフィックスプロセッサ用のグラフィックス処理エンジンの一実施形態のブロック図である。
【0008】
【
図5A】グラフィックスプロセッサの別の実施形態のブロック図である。
【
図5B】グラフィックスプロセッサの別の実施形態のブロック図である。
【0009】
【0010】
【
図7】一実施形態による、グラフィックスプロセッサ実行ユニットの命令フォーマットを示す。
【0011】
【
図8】グラフィックスパイプライン、メディアパイプライン、ディスプレイエンジン、スレッド実行ロジック、及びレンダリング出力パイプラインを含むグラフィックスプロセッサの別の実施形態のブロック図である。
【0012】
【
図9A】一実施形態による、グラフィックスプロセッサのコマンドフォーマットを示すブロック図である。
【0013】
【
図9B】一実施形態による、グラフィックスプロセッサのコマンドシーケンスを示すブロック図である。
【0014】
【
図10】一実施形態による、データ処理システム用の例示的なグラフィックスソフトウェアアーキテクチャを示す。
【0015】
【
図11A】集積回路及び例示的なパッケージアセンブリを製造するのに用いられ得る例示的なIPコア開発システムを示す。
【
図11B】集積回路パッケージアセンブリの垂直断面図を示す。
【
図11C】基板に接続されたハードウェアロジックチップレットの複数のユニットを含むパッケージアセンブリを示す。
【
図11D】互換性のあるチップレットを含むパッケージアセンブリを示す。
【0016】
【
図12】一実施形態による、1つ又は複数のIPコアを用いて製造され得る例示的なシステムオンチップ集積回路を示す。
【0017】
【
図13】1つ又は複数のIPコアを用いて製造され得るシステムオンチップ集積回路の例示的なグラフィックスプロセッサを示す。
【0018】
【
図14】例示的なグラフィックスプロセッサアーキテクチャを示す。
【0019】
【
図15】機械学習アーキテクチャの初期訓練を実行するアーキテクチャを示す。
【0020】
【
図16】ランタイム時にどのように機械学習エンジンが継続的に訓練され、更新されるかを示す。
【0021】
【
図17】ランタイム時にどのように機械学習エンジンが継続的に訓練され、更新されるかを示す。
【0022】
【
図18A】どのように機械学習データがネットワーク上で共有されるかを示す。
【
図18B】どのように機械学習データがネットワーク上で共有されるかを示す。
【0023】
【0024】
【
図20】分散ノイズ除去オペレーションを実行するため、どのようにノードがゴースト領域データを交換するかを示す。
【0025】
【
図21】複数のノード間で、画像レンダリング及びノイズ除去オペレーションが分散されるアーキテクチャを示す。
【0026】
【
図22】レンダリング及びノイズ除去を分散させるアーキテクチャのさらなる詳細を示す。
【0027】
【
図23】分散レンダリング及びノイズ除去を実行する方法を示す。
【0028】
【0029】
【
図25】複数の相互接続された汎用グラフィックスプロセッサを示す。
【0030】
【
図26】機械学習実施態様の畳み込み層及び全結合層のセットを示す。
【0031】
【0032】
【
図28】機械学習実施態様における、相互接続ノードのセットの例を示す。
【0033】
【
図29】訓練データセットを使用して、ニューラルネットワークが学習する、訓練フレームワークを示す。
【0034】
【
図30A】モデル並列処理と、データ並列処理の例を示す。
【0035】
【0036】
【
図31】レイトレーシングコア及びテンソルコアを含む処理アーキテクチャを示す。
【0037】
【0038】
【
図33】ビームトレーシングを実行する装置を示す。
【0039】
【0040】
【
図35】ビームトレーシングを実行する方法を示す。
【0041】
【
図36】分散レイトレーシングエンジンの一例を示す。
【0042】
【
図37】レイトレーシングシステムで実行される圧縮を示す。
【
図38】レイトレーシングシステムで実行される圧縮を示す。
【0043】
【
図39】レイトレーシングアーキテクチャ上に実装される方法を示す。
【0044】
【
図40】例示的なハイブリッドレイトレーシング装置を示す。
【0045】
【
図41】レイトレーシングオペレーションに用いられるスタックを示す。
【0046】
【
図42】ハイブリッドレイトレーシング装置のさらなる詳細を示す。
【0047】
【0048】
【
図44】コールスタック及びトラバーサル状態記憶装置を示す。
【0049】
【0050】
【
図46A】特定のシェーダ実行のため、どのように複数のディスパッチサイクルが必要となるかを示す。
【
図46B】特定のシェーダ実行のため、どのように複数のディスパッチサイクルが必要となるかを示す。
【0051】
【
図47】単一のディスパッチサイクルがどのように複数のシェーダを実行するかを示す。
【0052】
【
図48】単一のディスパッチサイクルがどのように複数のシェーダを実行するかを示す。
【0053】
【
図49】レイトレーシング命令を実行するアーキテクチャを示す。
【0054】
【
図50】スレッド内でレイトレーシング命令を実行する方法を示す。
【0055】
【
図51】非同期レイトレーシングのアーキテクチャの1つの実施形態を示す。
【0056】
【
図52A】レイトラバーサル回路の1つの実施形態を示す。
【0057】
【
図52B】1つの実施形態において、レイ格納バンクを管理するために実行される処理を示す。
【0058】
【
図53】優先選択回路/ロジックの1つの実施形態を示す。
【0059】
【
図54A】優先選択回路/ロジックの1つの実施形態を示す。
【
図54B】優先選択回路/ロジックの1つの実施形態を示す。
【
図54C】優先選択回路/ロジックの1つの実施形態を示す。
【0060】
【
図55】レイトレーシングパイプラインのアーリーアウトを決定する1つの実施形態を示す。
【0061】
【
図56】優先選択回路/ロジックの1つの実施形態を示す。
【0062】
【
図57】レイトラバーサルオペレーションに用いられるバウンディングボリューム階層(BVH)の一例を示す。
【0063】
【
図58A】追加のトラバーサルオペレーションを示す。
【
図58B】追加のトラバーサルオペレーションを示す。
【0064】
【
図59】BVHスタックを管理するスタック管理回路の1つの実施形態を示す。
【0065】
【
図60A】例示的なデータ構造、サブ構造、並びにレイ、ヒット、及びスタックに実行されるオペレーションを示す。
【
図60B】例示的なデータ構造、サブ構造、並びにレイ、ヒット、及びスタックに実行されるオペレーションを示す。
【発明を実施するための形態】
【0066】
以下の説明では、説明のために、数多くの具体的な詳細が記載され、後述する本発明の実施形態の十分な理解を提供する。しかしながら、本発明の実施形態はこれらの具体的な詳細の一部がなくても実施され得ることが、当業者には明らかとなるであろう。他の例では、本発明の実施形態の基本的原理を曖昧にしないように、よく知られた構造体及びデバイスがブロック図の形態で示されている。
[例示的なグラフィックスプロセッサアーキテクチャ及びデータ型]
[システム概要]
【0067】
図1は、一実施形態による処理システム100のブロック図である。システム100は、シングルプロセッサのデスクトップシステム、マルチプロセッサのワークステーションシステム、又は多数のプロセッサ102若しくはプロセッサコア107を有するサーバシステムに用いられてよい。1つの実施形態において、システム100は、モバイルデバイス、ハンドヘルド型デバイス、又は埋め込み型デバイスに用いるためにシステムオンチップ(SoC)集積回路に組み込まれた、例えば、ローカルエリアネットワーク又はワイドエリアネットワークへの有線接続性又は無線接続性を有する「モノのインターネット(IoT)」デバイスなどに組み込まれた処理プラットフォームである。
【0068】
1つの実施形態において、システム100は、サーバベースのゲーミングプラットフォーム、ゲーム及びメディアコンソールを含むゲームコンソール、モバイルゲーミングコンソール、ハンドヘルド型ゲームコンソール、又はオンラインゲームコンソールを含むことができる、又はこれらと連結することができる、又はこれらに統合されてもよい。いくつかの実施形態において、システム100は、携帯電話、スマートフォン、タブレット型コンピューティングデバイス、又は低容量の内蔵記憶装置を備えたラップトップなどの、インターネットに接続されたモバイルデバイスの一部である。処理システム100はまた、スマートウォッチ型ウェアラブルデバイスなどのウェアラブルデバイス、視覚出力、音声出力、若しくは触知出力を提供して現実世界の視覚体験、音声体験、若しくは触知体験を補う、又は別の方法でテキスト、音声、グラフィックス、映像、ホログラフィック画像若しくは映像、若しくは触知フィードバックを提供する拡張現実(AR)又は仮想現実(VR)機能で強化されたスマートアイウェア若しくはスマートクローズ、他の拡張現実(AR)デバイス、あるいは他の仮想現実(VR)デバイスを含むことができる、又はこれらと連結することができる、又はこれらに統合されてもよい。いくつかの実施形態において、処理システム100は、テレビ若しくはセットトップボックス型デバイスを含む、又はその一部である。1つの実施形態において、システム100は、バス、トラクタトレイラ、乗用車、オートバイ若しくは電動アシスト自転車、飛行機、又はグライダ(あるいはこれらの任意の組み合わせ)などの自動運転車を含むことができる、又はこれらと連結することができる、又はこれらに統合されてもよい。自動運転車は、システム100を用いて、車両の周囲で感知された環境を処理してよい。
【0069】
いくつかの実施形態において、1つ又は複数のプロセッサ102はそれぞれ、実行されると、システム又はユーザソフトウェア用のオペレーションを行う命令を処理する1つ又は複数のプロセッサコア107を含む。いくつかの実施形態において、1つ又は複数のプロセッサコア107のうちの少なくとも1つが、特定の命令セット109を処理するように構成される。いくつかの実施形態において、命令セット109は、複合命令セットコンピューティング(CISC)、縮小命令セットコンピューティング(RISC)、又は超長命令語(VLIW)を介したコンピューティングを容易にし得る。1つ又は複数のプロセッサコア107は、異なる命令セット109を処理することができ、この命令セットは他の命令セットのエミュレーションを容易にする命令を含んでよい。プロセッサコア107は、デジタル信号プロセッサ(DSP)などの、他の処理デバイスも含んでよい。
【0070】
いくつかの実施形態において、プロセッサ102はキャッシュメモリ104を含む。アーキテクチャに応じて、プロセッサ102は、単一の内蔵キャッシュ又は複数レベルの内蔵キャッシュを備えることができる。いくつかの実施形態において、キャッシュメモリは、プロセッサ102の様々なコンポーネントの間で共有される。いくつかの実施形態において、プロセッサ102は、外付けキャッシュ(例えば、レベル3(L3)キャッシュ又はラストレベルキャッシュ(LLC))(不図示)も用い、外付けキャッシュは既知のキャッシュコヒーレンシ技術を用いて複数のプロセッサコア107の間で共有されてよい。レジスタファイル106が、プロセッサ102に追加的に含まれてよく、異なる種類のデータを格納する異なる種類のレジスタ(例えば、整数レジスタ、浮動小数点レジスタ、ステータスレジスタ、及び命令ポインタレジスタ)を含んでよい。いくつかのレジスタは汎用レジスタであってよく、他のレジスタはプロセッサ102の設計に固有のものであってよい。
【0071】
いくつかの実施形態において、1つ又は複数のプロセッサ102は、プロセッサ102とシステム100の他のコンポーネントとの間で、アドレス信号、データ信号、又は制御信号などの通信信号を伝送する1つ又は複数のインタフェースバス110と連結される。インタフェースバス110は1つの実施形態において、あるバージョンのダイレクトメディアインタフェース(DMI)バスなどのプロセッサバスであってよい。しかしながら、プロセッサバスはDMIバスに限定されることはなく、1つ又は複数のペリフェラルコンポーネントインターコネクトバス(例えば、PCI、PCI Express)、メモリバス、又は他の種類のインタフェースバスを含んでもよい。1つの実施形態において、プロセッサ102は、統合メモリコントローラ116とプラットフォームコントローラハブ130を含む。メモリコントローラ116は、メモリデバイスとシステム100の他のコンポーネントとの間の通信を容易にし、プラットフォームコントローラハブ(PCH)130は、ローカルのI/Oバスを介してI/Oデバイスへの接続を提供する。
【0072】
メモリデバイス120は、ダイナミックランダムアクセスメモリ(DRAM)デバイス、スタティックランダムアクセスメモリ(SRAM)デバイス、フラッシュメモリデバイス、相変化メモリデバイス、又はプロセスメモリとしての機能を果たすのに好適な性能を有する何らかの他のメモリデバイスであってよい。1つの実施形態において、メモリデバイス120は、システム100用のシステムメモリとして動作し、1つ又は複数のプロセッサ102がアプリケーション又は処理を実行するときに用いるデータ122及び命令121を格納することができる。メモリコントローラ116は任意選択の外付けグラフィックスプロセッサ118とも連結し、外付けグラフィックスプロセッサ118は、プロセッサ102の1つ又は複数のグラフィックスプロセッサ108と通信して、グラフィックスオペレーション及びメディアオペレーションを実行してよい。いくつかの実施形態において、グラフィックスオペレーション、メディアオペレーション、及び/又はコンピュートオペレーションは、アクセラレータ112によって支援されてよく、アクセラレータ112は、専用化されたグラフィックスオペレーション、メディアオペレーション、又はコンピュートオペレーションのセットを実行するように構成され得るコプロセッサである。例えば、1つの実施形態において、アクセラレータ112は、機械学習又はコンピュートオペレーションを最適化するのに用いられる行列乗算アクセラレータである。1つの実施形態において、アクセラレータ112は、グラフィックスプロセッサ108と連携してレイトレーシングオペレーションを実行するのに用いられ得るレイトレーシングアクセラレータである。1つの実施形態において、外付けアクセラレータ119が、アクセラレータ112の代わりに又はそれと連携して用いられてよい。
【0073】
いくつかの実施形態において、ディスプレイデバイス111をプロセッサ102に接続することができる。ディスプレイデバイス111は、モバイル電子デバイス若しくはラップトップデバイスに見られるような内蔵ディスプレイデバイス、又はディスプレイインタフェース(例えば、DisplayPortなど)を介して取り付けられる外付けディスプレイデバイスのうちの1つ又は複数であってよい。1つの実施形態において、ディスプレイデバイス111は、仮想現実(VR)アプリケーション又は拡張現実(AR)アプリケーションに用いるための立体表示デバイスなどのヘッドマウントディスプレイ(HMD)であってよい。
【0074】
いくつかの実施形態において、プラットフォームコントローラハブ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、若しくはロングタームエボリューション(LTE)用の送受信機などのモバイルネットワーク送受信機であってよい。ファームウェアインタフェース128は、システムファームウェアとの通信を可能にし、例えば、ユニファイドエクステンシブルファームウェアインタフェース(UEFI)であってよい。ネットワークコントローラ134は、有線ネットワークへのネットワーク接続を可能にし得る。いくつかの実施形態において、高性能ネットワークコントローラ(不図示)がインタフェースバス110と連結する。オーディオコントローラ146は、1つの実施形態において、マルチチャネルハイディフィニションオーディオコントローラである。1つの実施形態において、システム100はレガシ(例えば、Personal System 2(PS/2))デバイスを本システムに連結する任意選択のレガシI/Oコントローラ140を含む。プラットフォームコントローラハブ130は、1つ又は複数のユニバーサルシリアルバス(USB)コントローラ142にも接続して、キーボードとマウス143との組み合わせ、カメラ144、又は他のUSB入力デバイスなどの入力デバイスを接続することができる。
【0075】
図示されたシステム100は、異なるように構成された他の種類のデータ処理システムが用いられてもよいので、例示的であって限定的ではないことが理解されるであろう。例えば、メモリコントローラ116及びプラットフォームコントローラハブ130のインスタンスが、外付けグラフィックスプロセッサ118などの別個の外付けグラフィックスプロセッサに統合されてよい。1つの実施形態において、プラットフォームコントローラハブ130及び/又はメモリコントローラ116は、1つ又は複数のプロセッサ102の外部にあってよい。例えば、システム100は、外付けのメモリコントローラ116及びプラットフォームコントローラハブ130を含むことができ、これらは、プロセッサ102と通信するシステムチップセット内のメモリコントローラハブ及びペリフェラルコントローラハブとして構成されてよい。
【0076】
例えば、CPU、メモリ、及び他のコンポーネントなどのコンポーネントが熱性能を高めるように配置及び設計された回路基板(「スレッド」)が用いられ得る。いくつかの例において、プロセッサなどの処理コンポーネントがスレッドの表面側に位置しており、近くにあるDIMMなどのメモリがスレッドの裏面側に位置している。この設計により提供される気流の改善の結果として、これらのコンポーネントは、典型的なシステムの場合と比べて、より高い周波数及び電力レベルで動作し得るので、性能を高めることができる。さらに、スレッドは、ラックにある電力ケーブル及びデータ通信ケーブルと何も確認せずに接続できるように構成されるので、スレッドを素早く取り外す、アップグレードする、再度取り付ける、且つ/又は置き換える能力を高めることができる。同様に、プロセッサ、アクセラレータ、メモリ、及びデータ記憶ドライブなどの、スレッドに位置する個々のコンポーネントが、互いとの間隔が増したことにより、容易にアップグレードされるように構成される。例示した実施形態において、これらのコンポーネントはさらに、真正性を証明するハードウェア認証機能を含む。
【0077】
データセンタが、イーサネット(登録商標)及びOmni-Pathを含む複数の他のネットワークアーキテクチャをサポートする単一のネットワークアーキテクチャ(「ファブリック」)を利用できる。スレッドは光ファイバを介してスイッチに連結され得る。光ファイバは、典型的なツイストペアケーブル(例えば、カテゴリ5、カテゴリ5e、カテゴリ6など)より高い帯域幅と低い遅延を提供する。高い帯域幅で低い遅延の相互接続及びネットワークアーキテクチャにより、データセンタは使用時に、メモリ、アクセラレータ(例えば、GPU、グラフィックスアクセラレータ、FPGA、ASIC、ニューラルネットワーク、及び/又は人工知能アクセラレータなど)、及び物理的に分かれているデータ記憶ドライブなどのリソースをプールして、必要に応じてこれらのリソースにコンピュートリソース(例えば、プロセッサ)を提供してよく、その結果、プールされたリソースがあたかもローカルにあるかのように、コンピュートリソースがこれらのリソースにアクセスすることが可能になる。
【0078】
電力供給部又は電源が、システム100又は本明細書で説明される任意のコンポーネント若しくはシステムに、電圧及び/又は電流を提供できる。1つの例において、電力供給部は、壁コンセントに接続する、ACをDCに(交流電流を直流電流に)変換するアダプタを含む。そのようなAC電源は、再生可能エネルギー(例えば、太陽光発電)による電源であってよい。1つの例において、電源は、外付けのAC/DCコンバータなどDC電源を含む。1つの例において、電源又は電力供給部は、充電場に近接させることによって充電するワイヤレス充電ハードウェアを含む。1つの例において、電源は、内蔵バッテリ、交流電流供給部、モーションベースの電力供給部、太陽光発電供給部、又は燃料電池電源を含むことができる。
【0079】
図2A~
図2Dは、本明細書で説明される実施形態によって提供されるコンピューティングシステム及びグラフィックスプロセッサを示す。
図2A~
図2Dの要素で、本明細書における任意の他の図の要素と同じ参照番号(又は名称)を有する要素は、本明細書のどこか他の箇所で説明される方式と同様な任意の方式で動作する又は機能することができるが、そのように限定されることはない。
【0080】
図2Aは、1つ又は複数のプロセッサコア202A~202N、統合メモリコントローラ214、及び統合グラフィックスプロセッサ208を有するプロセッサ200の一実施形態のブロック図である。プロセッサ200は、追加のコアを最大で破線の枠で表された追加のコア202Nまで(これを含む)含むことができる。プロセッサコア202A~202Nのそれぞれは、1つ又は複数の内蔵キャッシュユニット204A~204Nを含む。いくつかの実施形態において、各プロセッサコアは、1つ又は複数の共有キャッシュユニット206にもアクセスできる。内蔵キャッシュユニット204A~204N及び共有キャッシュユニット206は、プロセッサ200内のキャッシュメモリ階層を表している。キャッシュメモリ階層は、各プロセッサコア内の少なくとも1つのレベルの命令及びデータキャッシュと、1つ又は複数のレベルの共有中間レベルキャッシュ(レベル2(L2)、レベル3(L3)、レベル4(L4)、又は他のレベルのキャッシュなど)とを含んでよく、外付けメモリの前の最高レベルのキャッシュはLLCに分類される。いくつかの実施形態において、キャッシュコヒーレンシロジックが、様々なキャッシュユニット206と204A~204Nとの間でコヒーレンシを維持する。
【0081】
いくつかの実施形態において、プロセッサ200は、1つ又は複数のバスコントローラユニット216のセット及びシステムエージェントコア210も含んでよい。1つ又は複数のバスコントローラユニット216は、1つ又は複数のPCIバス又はPCI Expressバスなどのペリフェラルバスのセットを管理する。システムエージェントコア210は、様々なプロセッサコンポーネントに管理機能を提供する。いくつかの実施形態において、システムエージェントコア210は、様々な外付けメモリデバイス(不図示)へのアクセスを管理する1つ又は複数の統合メモリコントローラ214を含む。
【0082】
いくつかの実施形態において、プロセッサコア202A~202Nのうちの1つ又は複数は、同時マルチスレッディングに対するサポートを含む。そのような実施形態において、システムエージェントコア210は、マルチスレッド処理の際に、コア202A~202Nを調整して動作させるコンポーネントを含む。システムエージェントコア210はさらに、パワーコントロールユニット(PCU)を含んでよく、PCUは、プロセッサコア202A~202N及びグラフィックスプロセッサ208の電力状態を調整するロジック及びコンポーネントを含む。
【0083】
いくつかの実施形態において、プロセッサ200はさらに、グラフィックス処理オペレーションを実行するグラフィックスプロセッサ208を含む。いくつかの実施形態において、グラフィックスプロセッサ208は、共有キャッシュユニット206のセット及びシステムエージェントコア210と連結し、1つ又は複数の統合メモリコントローラ214を含む。いくつかの実施形態において、システムエージェントコア210は、グラフィックスプロセッサを駆動して1つ又は複数の連結されたディスプレイに出力するディスプレイコントローラ211も含む。いくつかの実施形態において、ディスプレイコントローラ211はまた、少なくとも1つの相互接続を介してグラフィックスプロセッサと連結される別個のモジュールであってもよく、又はグラフィックスプロセッサ208に統合されてもよい。
【0084】
いくつかの実施形態において、リングベースの相互接続ユニット212が、プロセッサ200の内蔵コンポーネントを連結するのに用いられる。しかしながら、ポイントツーポイント相互接続、スイッチ型相互接続、又は他の技術などの、当技術分野でよく知られた技術を含む代替の相互接続ユニットが用いられてもよい。いくつかの実施形態において、グラフィックスプロセッサ208は、I/Oリンク213を介してリング相互接続212と連結する。
【0085】
例示的なI/Oリンク213は、複数の様々なI/O相互接続のうちの少なくとも1つを表しており、様々なプロセッサコンポーネントとeDRAMモジュールなどの高性能な埋め込み型メモリモジュール218との間の通信を容易にするオンパッケージI/O相互接続を含む。いくつかの実施形態において、プロセッサコア202A~202Nのそれぞれとグラフィックスプロセッサ208とは、埋め込み型メモリモジュール218を共有のラストレベルキャッシュとして用いることができる。
【0086】
いくつかの実施形態において、プロセッサコア202A~202Nは、同じ命令セットアーキテクチャを実行する同種のコアである。別の実施形態では、プロセッサコア202A~202Nは、命令セットアーキテクチャ(ISA)の観点から見ると異種であり、プロセッサコア202A~202Nのうちの1つ又は複数が第1の命令セットを実行し、その他のコアのうちの少なくとも1つが第1の命令セットのサブセット又は異なる命令セットを実行する。1つの実施形態において、プロセッサコア202A~202Nはマイクロアーキテクチャの観点から見ると異種であり、相対的に消費電力が高い1つ又は複数のコアが、消費電力が少ない1つ又は複数の電力コアと連結する。1つの実施形態において、プロセッサコア202A~202Nは、計算能力の観点から見ると異種である。さらに、プロセッサ200は、1つ又は複数のチップに実装されても、示されたコンポーネントを他のコンポーネントのほかに有するSoC集積回路として実装されてもよい。
【0087】
図2Bは、本明細書において説明されるいくつかの実施形態による、グラフィックスプロセッサコア219のハードウェアロジックのブロック図である。
図2Bの要素で、本明細書における任意の他の図の要素と同じ参照番号(又は名称)を有する要素は、本明細書のどこか他の箇所で説明される方式と同様な任意の方式で動作する又は機能することができるが、そのように限定されることはない。グラフィックスプロセッサコア219は、コアスライスと呼ばれることがあり、モジュール式のグラフィックスプロセッサ内の1つ又は複数のグラフィックスコアであってよい。グラフィックスプロセッサコア219は、典型的な1つのグラフィックスコアスライスであり、本明細書で説明されるグラフィックスプロセッサは、目標電力及び性能範囲に基づいて複数のグラフィックスコアスライスを含んでよい。各グラフィックスプロセッサコア219は、汎用及び固定機能ロジックのモジュール式ブロックを含む、サブスライスとも呼ばれる複数のサブコア221A~221Fと連結された固定機能ブロック230を含んでよい。
【0088】
いくつかの実施形態において、固定機能ブロック230は、例えば、低性能及び/又は低電力グラフィックスプロセッサの実施態様において、グラフィックスプロセッサコア219の全てのサブコアにより共有され得るジオメトリ/固定機能パイプライン231を含む。様々な実施形態において、ジオメトリ/固定機能パイプライン231は、3D固定機能パイプライン(例えば、後述される
図3A及び
図4に見られるような3Dパイプライン312)、ビデオフロントエンドユニット、スレッド生成器及びスレッドディスパッチャ、並びに統合リターンバッファを管理する統合リターンバッファマネージャ(例えば、後述する
図4の統合リターンバッファ418)を含む。
【0089】
1つの実施形態において、固定機能ブロック230は、グラフィックスSoCインタフェース232、グラフィックスマイクロコントローラ233、及びメディアパイプライン234も含む。グラフィックスSoCインタフェース232は、グラフィックスプロセッサコア219とシステムオンチップ集積回路内の他のプロセッサコアとの間のインタフェースを提供する。グラフィックスマイクロコントローラ233は、グラフィックスプロセッサコア219の、スレッドディスパッチ、スケジューリング、プリエンプションを含む様々な機能を管理するように構成可能なプログラム可能型サブプロセッサである。メディアパイプライン234(例えば、
図3A及び
図4のメディアパイプライン316)は、画像及び映像データを含むマルチメディアデータの復号、符号化、前処理、及び/又は後処理を容易にするロジックを含む。メディアパイプライン234は、サブコア221~221F内のコンピュートロジック又はサンプリングロジックへの要求を介してメディアオペレーションを実施する。
【0090】
1つの実施形態において、SoCインタフェース232は、グラフィックスプロセッサコア219が汎用アプリケーションプロセッサコア(例えば、CPU)及び/又はSoC内の他のコンポーネント(共有のラストレベルキャッシュメモリ、システムRAM、及び/又は埋め込み型のオンチップ若しくはオンパッケージDRAMなどのメモリ階層要素を含む)と通信することを可能にする。SoCインタフェース232は、カメライメージングパイプラインなどの、SoC内の固定機能デバイスとの通信も可能にすることができ、グラフィックスプロセッサコア219とSoC内のCPUとの間で共有され得るグローバルメモリアトミックスの使用及び/又は実装を可能にする。SoCインタフェース232は、グラフィックスプロセッサコア219用の電力管理制御も実装して、グラフィックスコア219のクロックドメインとSoC内の他のクロックドメインとの間のインタフェースを可能にすることができる。1つの実施形態において、SoCインタフェース232は、グラフィックスプロセッサ内の1つ又は複数のグラフィックスコアのそれぞれにコマンド及び命令を提供するように構成されたコマンドストリーマ及びグローバルスレッドディスパッチャからのコマンドバッファの受信を可能にする。コマンド及び命令は、メディアオペレーションが実行されるときに、メディアパイプライン234にディスパッチすることができ、又はグラフィックス処理のオペレーションが実行されるときに、ジオメトリ及び固定機能パイプライン(例えば、ジオメトリ及び固定機能パイプライン231、ジオメトリ及び固定機能パイプライン237)にディスパッチすることができる。
【0091】
グラフィックスマイクロコントローラ233は、グラフィックスプロセッサコア219の様々なスケジューリングタスク及び管理タスクを実行するように構成され得る。1つの実施形態において、グラフィックスマイクロコントローラ233は、サブコア221A~221F内の実行ユニット(EU)アレイ222A~222F、224A~224Fの中の様々なグラフィックスパラレルエンジンに対して、グラフィックス及び/又はコンピュートワークロードスケジューリングを行うことができる。このスケジューリングモデルでは、グラフィックスプロセッサコア219を含むSoCのCPUコアで実行するホストソフトウェアが複数のグラフィックスプロセッサドアベルのうちの1つにワークロードを送信することができ、これにより、適切なグラフィックスエンジンにスケジューリングオペレーションを呼び出すことができる。スケジューリングオペレーションは、どのワークロードを次に実行するかを決定すること、ワークロードをコマンドストリーマに送信すること、あるエンジンで実行している既存のワークロードをプリエンプトすること、ワークロードの進行を監視すること、ワークロードが完了したときにホストソフトウェアに通知することを含む。1つの実施形態において、グラフィックスマイクロコントローラ233はまた、グラフィックスプロセッサコア219の低電力状態又はアイドル状態を容易にすることができ、システム上のオペレーティングシステム及び/又はグラフィックスドライバソフトウェアから独立して、低電力状態への移行時に、グラフィックスプロセッサコア219内のレジスタを節約し且つ復元する能力をグラフィックスプロセッサコア219に提供することができる。
【0092】
グラフィックスプロセッサコア219は、示されているサブコア221A~221Fより多くても少なくてもよく、最大でN個のモジュール式サブコアを有してよい。N個のサブコアのセットごとに、グラフィックスプロセッサコア219は、共有機能ロジック235、共有及び/又はキャッシュメモリ236、ジオメトリ/固定機能パイプライン237、及び様々なグラフィックス処理オペレーション及びコンピュート処理オペレーションを加速する追加の固定機能ロジック238も含むことができる。共有機能ロジック235は、
図4の共有機能ロジック420に関連した論理ユニット(例えば、サンプラ、数学、及び/又はスレッド間通信ロジック)を含むことができ、これらの論理ユニットをグラフィックスプロセッサコア219内のN個のサブコアのそれぞれが共有できる。共有及び/又はキャッシュメモリ236は、グラフィックスプロセッサコア219内のN個のサブコア221A~221Fのセット用のラストレベルキャッシュになることができ、複数のサブコアがアクセス可能な共有メモリとしての機能も果たすことができる。ジオメトリ/固定機能パイプライン237は、固定機能ブロック230内のジオメトリ/固定機能パイプライン231の代わりに含まれてよく、同じ又は同様の論理ユニットを含むことができる。
【0093】
1つの実施形態において、グラフィックスプロセッサコア219は、グラフィックスプロセッサコア219が用いるための様々な固定機能アクセラレーションロジックを含むことができる追加の固定機能ロジック238を含む。1つの実施形態において、追加の固定機能ロジック238は、位置専用シェーディングに用いるための追加のジオメトリパイプラインを含む。位置専用シェーディングでは、2つのジオメトリパイプライン、すなわち、ジオメトリ/固定機能パイプライン238、231内のフルジオメトリパイプラインと、追加の固定機能ロジック238に含まれ得る追加のジオメトリパイプラインである間引きパイプラインとが存在する。1つの実施形態において、間引きパイプラインは、フルジオメトリパイプラインの機能限定版である。フルパイプライン及び間引きパイプラインは、同じアプリケーションの異なるインスタンスを実行することができ、各インスタンスは別個のコンテキストを有する。位置専用シェーディングは、破棄された三角形の長い間引き実行を隠すことができ、いくつかの例では、シェーディングをより早く完了することが可能になる。例えば1つの実施形態において、追加の固定機能ロジック238内の間引きパイプラインロジックは、主要なアプリケーションと並行して位置シェーダを実行することができ、一般的に、重要な結果をフルパイプラインより速く生成することができる。その理由は、間引きパイプラインは頂点の位置属性だけをフェッチしてシェーディングし、フレームバッファに対するピクセルのラスタ化及びレンダリングを行わないからである。間引きパイプラインは、全ての三角形の可視情報を、これらの三角形が間引きされているかどうかに関係なく計算するのに、生成された重要な結果を用いることができる。フルパイプライン(この例では、リプレイパイプラインと呼ばれることがある)は、間引きされた三角形をスキップし、最終的にラスタ化段階に送られる可視三角形だけをシェーディングするのに可視情報を消費することができる。
【0094】
1つの実施形態において、追加の固定機能ロジック238は、機械学習の訓練又は推論の最適化を含む実施態様について、固定機能の行列乗算ロジックなどの機械学習アクセラレーションロジックも含むことができる。
【0095】
各グラフィックスサブコア221A~221Fには、グラフィックスパイプライン、メディアパイプライン、又はシェーダプログラムによる要求に応答してグラフィックスオペレーション、メディアオペレーション、及びコンピュートオペレーションを実行するのに用いられ得る実行リソースのセットが含まれる。グラフィックスサブコア221A~221Fは、複数のEUアレイ222A~222F、224A~224F、スレッドディスパッチ及びスレッド間通信(TD/IC)ロジック223A~223F、3D(例えば、テクスチャ)サンプラ225A~225F、メディアサンプラ206A~206F、シェーダプロセッサ227A~227F、並びに共有ローカルメモリ(SLM)228A~228Fを含む。EUアレイ222A~222F、224A~224Fはそれぞれ、複数の実行ユニットを含み、これらの実行ユニットは、グラフィックスオペレーション、メディアオペレーション、又はコンピュートオペレーションのサービスにおいて、グラフィックス、メディア、又はコンピュートシェーダプログラムを含む、浮動小数点オペレーション及び整数/固定小数点ロジックオペレーションの実行が可能な汎用グラフィックス処理ユニットである。TD/ICロジック223A~223Fは、サブコア内の実行ユニットのためにローカルスレッドディスパッチ及びスレッド制御オペレーションを実行し、サブコアの実行ユニットで実行するスレッド間の通信を容易にする。3Dサンプラ225A~225Fは、テクスチャ又は他の3Dグラフィックス関連のデータをメモリに読み出すことができる。3Dサンプラは、構成されたサンプル状態及び所与のテクスチャに関連したテクスチャフォーマットに基づいて、異なるテクスチャデータを読み出すことができる。メディアサンプラ206A~206Fは、メディアデータに関連した種類及びフォーマットに基づいて、同様の読み出しオペレーションを実行することができる。1つの実施形態において、各グラフィックスサブコア221A~221Fは、統合された3D及びメディアサンプラを交互に含むことができる。サブコア221A~221Fのそれぞれの中の実行ユニットで実行するスレッドは、各サブコア内の共有ローカルメモリ228A~228Fを利用して、スレッドグループ内で実行するスレッドがオンチップメモリの共通プールを用いて実行することを可能にすることができる。
【0096】
図2Cは、マルチコアグループ240A~240Nに配置された専用のグラフィックス処理リソースのセットを含むグラフィックス処理ユニット(GPU)239を示す。単一のマルチコアグループ240Aの詳細だけが提供されているが、その他のマルチコアグループ240B~240Nも同じ又は同様のグラフィックス処理リソースのセットを備えてよいことが理解されるであろう。
【0097】
示されているように、マルチコアグループ240Aは、グラフィックスコア243のセットと、テンソルコア244のセットと、レイトレーシングコア245のセットとを含んでよい。スケジューラ/ディスパッチャ241が、様々なコア243、244、245で実行するためのグラフィックススレッドをスケジューリングしてディスパッチする。レジスタファイル242のセットが、グラフィックススレッドを実行するときに、コア243、244、245が用いるオペランド値を格納する。これらは、例えば、整数値を格納する整数レジスタ、浮動小数点値を格納する浮動小数点レジスタ、パックドデータ要素(整数及び/又は浮動小数点データ要素)を格納するベクトルレジスタ、及びテンソル/行列値を格納するタイルレジスタを含んでよい。1つの実施形態において、タイルレジスタは、複数のベクトルレジスタの組み合わせセットとして実装される。
【0098】
1つ又は複数のレベル1(L1)キャッシュと共有メモリユニット247との組み合わせが、テクスチャデータ、頂点データ、ピクセルデータ、レイデータ、バウンディングボリュームデータなどのグラフィックスデータを、各マルチコアグループ240Aにローカルに格納する。1つ又は複数のテクスチャユニット247は、テクスチャマッピング及びサンプリングなどのテクスチャリングオペレーションの実行にも用いられ得る。マルチコアグループ240A~240Nの全て又はそのサブセットによって共有されるレベル2(L2)キャッシュ253が、複数のコンカレントグラフィクススレッド用のグラフィックスデータ及び/又は命令を格納する。示されるように、L2キャッシュ253は、複数のマルチコアグループ240A~240N全体で共有されてよい。1つ又は複数のメモリコントローラ248が、GPU239をシステムメモリ(例えば、DRAM)及び/又は専用グラフィックスメモリ(例えば、GDDR6メモリ)であってよいメモリ249に連結する。
【0099】
入力/出力(I/O)回路250が、デジタル信号プロセッサ(DSP)、ネットワークコントローラ、又はユーザ入力デバイスなどの1つ又は複数のI/Oデバイス252にGPU239を連結する。オンチップ相互接続が、I/Oデバイス252をGPU239及びメモリ249に連結するのに用いられてよい。I/O回路250の1つ又は複数のI/Oメモリ管理ユニット(IOMMU)251が、I/Oデバイス252をシステムメモリ249に直接的に連結する。1つの実施形態において、IOMMU251は、仮想アドレスをシステムメモリ249の物理アドレスにマッピングするための複数のセットのページテーブルを管理する。本実施形態において、I/Oデバイス252、CPU246、及びGPU239は、同じ仮想アドレス空間を共有してよい。
【0100】
1つの実施態様において、IOMMU251は仮想化をサポートする。この場合、IOMMU251は、ゲスト/グラフィックス仮想アドレスをゲスト/グラフィックス物理アドレスにマッピングするための第1セットのページテーブルと、ゲスト/グラフィックス物理アドレスを(例えば、システムメモリ249内の)システム/ホスト物理アドレスにマッピングするための第2セットのページテーブルとを管理してよい。第1及び第2セットのページテーブルのそれぞれのベースアドレスは、制御レジスタに格納され、コンテキストスイッチの際にスワップアウトされてよい(例えば、この結果、新しいコンテキストには関係のあるページテーブルのセットへのアクセスが提供される)。
図2Cには示されていないが、コア243、244、245及び/又はマルチコアグループ240A~240Nのそれぞれは、ゲスト仮想からゲスト物理への変換、ゲスト物理からホスト物理への変換、及びゲスト仮想からホスト物理への変換をキャッシュに格納するためのトランスレーションルックアサイドバッファ(TLB)を含んでよい。
【0101】
1つの実施形態において、CPU246、GPU239、及びI/Oデバイス252は、単一の半導体チップ及び/又はチップパッケージに統合される。示されているメモリ249は、同じチップに統合されてもよく、オフチップインタフェースを介してメモリコントローラ248に連結されてもよい。1つの実施態様において、メモリ249は、他の物理システムレベルのメモリと同じ仮想アドレス空間を共有するGDDR6メモリを含むが、本発明の基本的原理はこの特定の実施態様に限定されることはない。
【0102】
1つの実施形態において、テンソルコア244は、ディープラーニングのオペレーションを実行するのに用いられる基本的なコンピュートオペレーションである行列演算を実行するように特に設計された複数の実行ユニットを含む。例えば、同時行列乗算オペレーションが、ニューラルネットワークの訓練及び推論に用いられてよい。テンソルコア244は、単精度浮動小数点(例えば、32ビット)、半精度浮動小数点(例えば、16ビット)、整数語(16ビット)、バイト(8ビット)、ハーフバイト(4ビット)を含む様々なオペランド精度を用いて行列処理を実行してよい。1つの実施形態において、ニューラルネットワークの実施態様が、レンダリングされた各シーンの特徴点を、場合によっては複数のフレームから詳細を組み合わせながら抽出し、高品質の最終イメージを構築する。
【0103】
ディープラーニングの実施態様において、並列行列乗算作業がテンソルコア244で実行するためにスケジューリングされてよい。ニューラルネットワークの訓練は、特に、かなりの数の行列ドット積演算を必要とする。N×N×Nの行列乗算の内積の定式化を処理するために、テンソルコア244は、少なくともN個のドット積処理要素を含んでよい。行列乗算を開始する前に、1つの行列全体がタイルレジスタにロードされ、第2の行列の少なくとも1つの列が、N個のサイクルのサイクルごとにロードされる。各サイクルには、処理されたN個のドット積がある。
【0104】
行列要素が、特定の実施態様に応じて、16ビットワード、8ビットバイト(例えば、INT8)、及び4ビットハーフバイト(例えば、INT4)を含む異なる精度で格納されてよい。異なる精度モードは、最も効率的な精度が異なるワークロード(例えば、バイト及びハーフバイトへの量子化を許容できる推論ワークロードなど)に確実に用いられるようにするために、テンソルコア244に対して指定されてよい。
【0105】
1つの実施形態において、レイトレーシングコア245は、リアルタイムレイトレーシングの実施態様及び非リアルタイムレイトレーシングの実施態様の両方に対するレイトレーシングオペレーションを加速する。具体的には、レイトレーシングコア245は、バウンディングボリューム階層(BVH)を用いてレイトラバーサルを実行し、レイとBVHボリューム内に囲まれたプリミティブとの間の交差を識別するためのレイトラバーサル/インターセクション回路を含む。レイトレーシングコア245は、(例えば、Zバッファ又は同様の仕組みを用いて)深度テスト及び間引きを行うための回路も含んでよい。1つの実施態様において、レイトレーシングコア245は、本明細書で説明される画像ノイズ除去技術と連携して、トラバーサルオペレーション及びインターセクションオペレーションを行い、その少なくとも一部が、テンソルコア244で実行されてよい。例えば、1つの実施形態において、テンソルコア244は、ディープラーニングニューラルネットワークを実装して、レイトレーシングコア245により生成されたフレームのノイズ除去を行う。しかしながら、CPU246、グラフィックスコア243、及び/又はレイトレーシングコア245も、ノイズ除去アルゴリズム及び/又はディープラーニングアルゴリズムの全て又は一部を実装してよい。
【0106】
さらに、上述したように、ノイズ除去への分散型アプローチが利用されてよく、そのアプローチでは、GPU239はコンピューティングデバイスの中にあり、当該コンピューティングデバイスは、ネットワーク又は高速相互接続を介して他のコンピューティングデバイスに連結されている。本実施形態において、相互接続されたコンピューティングデバイスはニューラルネットワーク学習/訓練用データを共有し、異なる種類の画像フレーム及び/又は異なるグラフィックスアプリケーションに対してノイズ除去を行うことをシステム全体が学習する速度を向上させる。
【0107】
1つの実施形態において、レイトレーシングコア245は、全てのBVHトラバーサル及びレイ-プリミティブ間インターセクションを処理し、グラフィックスコア243がレイ当たり数千の命令で過負荷になるのを防ぐ。1つの実施形態において、各レイトレーシングコア245は、バウンディングボックステストを行うための第1セットの専用回路(例えば、トラバーサルオペレーション用)と、レイ-三角形間インターセクションテスト(例えば、トラバースしたレイを交差する)を行うための第2セットの専用回路とを含む。したがって、1つの実施形態において、マルチコアグループ240Aはレイプローブを起動するだけでよく、レイトレーシングコア245は独立して、レイトラバーサル及び交差を行い、ヒットデータ(例えば、ヒット、ヒットなし、複数ヒットなど)をスレッドコンテキストに戻す。その他のコア243、244は、他のグラフィックス作業又はコンピュート作業を行うために解放されており、レイトレーシングコア245は、トラバーサルオペレーション及びインターセクションオペレーションを行う。
【0108】
1つの実施形態において、各レイトレーシングコア245は、BVHテストオペレーションを行うためのトラバーサルユニットと、レイ-プリミティブ間インターセクションテストを行うインターセクションユニットとを含む。インターセクションユニットは、「ヒットあり」、「ヒットなし」、又は「複数ヒット」の応答を生成し、それを適切なスレッドに提供する。トラバーサルオペレーション及びインターセクションオペレーションの際に、他のコア(例えば、グラフィックスコア243及びテンソルコア244)の実行リソースは、他の形態のグラフィックス作業を行うために解放されている。
【0109】
後述する1つの特定の実施形態において、ハイブリッドラスタ化/レイトレーシング手法が用いられ、その手法では、グラフィックスコア243とレイトレーシングコア245との間で作業が分散される。
【0110】
1つの実施形態において、レイトレーシングコア245(及び/又は他のコア243、244)は、Microsoft(登録商標)のDirectXレイトレーシング(DXR)などのレイトレーシング命令セット用のハードウェアサポートを含む。DXRには、DispatchRaysコマンド、並びにray-generationシェーダ、closest-hitシェーダ、any-hitシェーダ、及びmissシェーダが含まれ、これらによって、オブジェクトごとに一意のセットのシェーダ及びテクスチャを割り当てることが可能になる。レイトレーシングコア245、グラフィックスコア243、及びテンソルコア244によりサポートされ得る別のレイトレーシングプラットフォームが、Vulkan 1.1.85である。しかしながら、本発明の基本的原理は、いかなる特定のレイトレーシングISAにも限定されることはないことに留意されたい。
【0111】
一般的には、様々なコア245、244、243は、レイトレーシング命令セットをサポートしてよく、レイトレーシング命令セットには、Ray Generation、Closest Hit、Any Hit、Ray-primitive Intersection、Per-primitive and hierarchical Bounding box Construction、Miss、Visit、及びExceptions用の命令/機能が含まれる。より具体的には、1つの実施形態が、以下の機能を実行するためのレイトレーシング命令を含む。
Ray Generation:Ray Generation命令は、ピクセルごと、サンプルごと、又は他のユーザ定義型作業割り当てごとに実行されてよい。
Closest Hit:Closest Hit命令は、シーン内のレイとプリミティブとの最も近い交差ポイントを探し出すために実行されてよい。
Any Hit:Any Hit命令は、シーン内のレイとプリミティブとの間の複数の交差を識別し、場合によっては、新しい最も近い交差ポイントを識別する。
Intersection:Intersection命令は、レイ-プリミティブ間インターセクションテストを行い、結果を出力する。
Per-primitive Bounding box Construction:この命令は、(例えば、新しいBVH又は他のアクセラレーションデータ構造を構築する場合に)所与のプリミティブ又はプリミティブのグループの周りにバウンディングボックスを構築する。
Miss:シーン内又はシーンの指定領域内の全てのジオメトリに、レイが当たらなかったことを示す。
Visit:レイがトラバースすることになる子ボリュームを示す。
Exceptions:(例えば、様々な誤差条件のために呼び出される)様々な種類の例外ハンドラを含む。
【0112】
図2Dは、本明細書で説明される実施形態による、グラフィックスプロセッサ及び/又はコンピュートアクセラレータとして構成され得る汎用グラフィックス処理ユニット(GPGPU)270のブロック図である。GPGPU270は、1つ又は複数のシステムバス及び/又はメモリバスを介して、ホストプロセッサ(例えば、1つ又は複数のCPU246)及びメモリ271、272と相互接続することができる。1つの実施形態において、メモリ271は、1つ又は複数のCPU246と共有され得るシステムメモリであり、メモリ272は、GPGPU270に専用のデバイスメモリである。1つの実施形態において、GPGPU270及びデバイスメモリ272内の各コンポーネントは、1つ又は複数のCPU246がアクセス可能なメモリアドレスにマッピングされてよい。メモリ271及び272へのアクセスが、メモリコントローラ268を介して容易になり得る。1つの実施形態において、メモリコントローラ268は、内蔵ダイレクトメモリアクセス(DMA)コントローラ269を含む、又は他になければDMAコントローラが実行するであろうオペレーションを実行するロジックを含んでよい。
【0113】
GPGPU270は、複数のキャッシュメモリを含み、これらのキャッシュメモリは、L2キャッシュ253、L1キャッシュ254、命令キャッシュ255、及び共有メモリ256を含み、共有メモリ256の少なくとも一部もキャッシュメモリとして区切られてよい。GPGPU270は、複数のコンピュートユニット260A~260Nも含む。各コンピュートユニット260A~260Nは、ベクトルレジスタ261、スカラレジスタ262、ベクトル論理ユニット263、及びスカラ論理ユニット264のセットを含む。コンピュートユニット260A~260Nは、ローカル共有メモリ265及びプログラムカウンタ266も含むことができる。コンピュートユニット260A~260Nは定数キャッシュ267と連結することができ、定数キャッシュ267は、定数データを格納するのに用いられてよく、定数データは、GPGPU270で実行するカーネル又はシェーダプログラムの実行時に変化しないデータである。1つの実施形態において、定数キャッシュ267はスカラデータキャッシュであり、キャッシュに格納されたデータは、直接的にスカラレジスタ262にフェッチされてよい。
【0114】
オペレーションの際に、1つ又は複数のCPU246は、レジスタ、又はGPGPU270内のアクセス可能なアドレス空間にマッピングされているメモリに、コマンドを書き込むことができる。コマンドプロセッサ257は、レジスタ又はメモリからコマンドを読み出し、これらのコマンドがGPGPU270内でどのように処理されるかを決定することができる。次に、これらのコマンドを実行するために、スレッドディスパッチャ258が、コンピュートユニット260A~260Nにスレッドをディスパッチするのに用いられてよい。各コンピュートユニット260A~260Nは、他のコンピュートユニットから独立して、スレッドを実行することができる。さらに、各コンピュートユニット260A~260Nは、条件付き計算用に独立して構成されてよく、条件付きで計算の結果をメモリに出力できる。コマンドプロセッサ257は、送信されたコマンドが完了した場合、1つ又は複数のCPU246を中断できる。
【0115】
図3A~
図3Cは、本明細書で説明される実施形態により提供される、追加のグラフィックスプロセッサ及びコンピュートアクセラレータアーキテクチャのブロック図を示す。
図3A~
図3Cの要素で、本明細書における任意の他の図の要素と同じ参照番号(又は名称)を有する要素は、本明細書のどこか他の箇所で説明される方式と同様な任意の方式で動作する又は機能することができるが、そのように限定されることはない。
【0116】
図3Aはグラフィックスプロセッサ300のブロック図である。グラフィックスプロセッサ300は、個別のグラフィックス処理ユニットであってもよく、複数のプロセッシングコア又は限定されることはないがメモリデバイス若しくはネットワークインタフェースなどの他の半導体デバイスと統合されたグラフィックスプロセッサであってもよい。いくつかの実施形態において、グラフィックスプロセッサは、グラフィックスプロセッサ上のレジスタへのメモリマップドI/Oインタフェースを介して、プロセッサメモリに置かれたコマンドを用いて通信する。いくつかの実施形態において、グラフィックスプロセッサ300は、アクセスメモリへのメモリインタフェース314を含む。メモリインタフェース314は、ローカルメモリ、1つ又は複数の内蔵キャッシュ、1つ又は複数の共有外付けキャッシュ、及び/又はシステムメモリへのインタフェースであり得る。
【0117】
いくつかの実施形態において、グラフィックスプロセッサ300は、ディスプレイ出力データをディスプレイデバイス318にドライブするディスプレイコントローラ302も含む。ディスプレイコントローラ302は、複数層の映像を表示し合成するための1つ又は複数のオーバーレイプレーン用、又はユーザインタフェース要素用のハードウェアを含む。ディスプレイデバイス318は、内蔵ディスプレイデバイスでも、外付けディスプレイデバイスでもよい。1つの実施形態において、ディスプレイデバイス318は、仮想現実(VR)ディスプレイデバイス又は拡張現実(AR)ディスプレイデバイスなどのヘッドマウントディスプレイデバイスである。いくつかの実施形態において、グラフィックスプロセッサ300は、メディアを、1つ又は複数のメディア符号化フォーマットに符号化する、これらのメディア符号化フォーマットから復号する、又はこれらのメディア符号化フォーマットの間でコード変換するための、ビデオコーデックエンジン306を含む。これらのメディア符号化フォーマットには、限定されることはないが、MPEG-2などのMoving Picture Experts Group(MPEG)フォーマット、H.264/MPEG-4 AVC及びH.265/HEVCなどのAdvanced Video Coding(AVC)フォーマット、Alliance for Open Media (AOMedia)のVP8及びVP9、並びに米国映画テレビ技術者協会(SMPTE)421M/VC-1、及びJPEGなどのJoint Photographic Experts Group(JPEG)フォーマット、及びMotion JPEG(MJPEG)フォーマットが含まれる。
【0118】
いくつかの実施形態において、グラフィックスプロセッサ300は、例えば、ビット境界ブロック転送を含む2次元(2D)ラスタライザオペレーションを実行するためのブロック画像転送(BLIT)エンジン304を含む。しかしながら、1つの実施形態において、2Dグラフィックスオペレーションは、グラフィックス処理エンジン(GPE)310の1つ又は複数のコンポーネントを用いて実行される。いくつかの実施形態において、GPE310は、3次元(3D)グラフィックスオペレーション及びメディアオペレーションを含むグラフィックスオペレーションを実行するためのコンピュートエンジンである。
【0119】
いくつかの実施形態において、GPE310は、3Dプリミティブ形状(例えば、矩形、三角形など)に作用する処理機能を用いて3次元画像及びシーンをレンダリングするなどの、3Dオペレーションを実行するための3Dパイプライン312を含む。3Dパイプライン312は、プログラム可能要素及び固定機能要素を含む。これらの要素は、要素内の様々なタスクを実行する且つ/又は実行スレッドを3D/メディアサブシステム315に生成する。3Dパイプライン312はメディアオペレーションを実行するのに用いられ得るが、GPE310の一実施形態が、映像後処理及び画像補正などのメディアオペレーションを実行するのに特に用いられるメディアパイプライン316も含む。
【0120】
いくつかの実施形態において、メディアパイプライン316は、ビデオコーデックエンジン306の代わりに又はそれに代わって、映像復号アクセラレーション、映像デインターレーシング、及び映像符号化アクセラレーションなどの1つ又は複数の専用メディアオペレーションを実行するための固定機能又はプログラム可能型ロジックユニットを含む。いくつかの実施形態において、メディアパイプライン316はさらに、3D/メディアサブシステム315で実行するためのスレッドを生成するスレッド生成ユニットを含む。生成されたスレッドは、3D/メディアサブシステム315に含まれる1つ又は複数のグラフィックス実行ユニットで、メディアオペレーション用の計算を行う。
【0121】
いくつかの実施形態において、3D/メディアサブシステム315は、3Dパイプライン312及びメディアパイプライン316により生成されたスレッドを実行するためのロジックを含む。1つの実施形態において、これらのパイプラインはスレッド実行要求を3D/メディアサブシステム315に送信する。3D/メディアサブシステム315は、様々な要求を調整して利用可能なスレッド実行リソースにディスパッチするためのスレッドディスパッチロジックを含む。これらの実行リソースは、3Dスレッド及びメディアスレッドを処理するためのグラフィックス実行ユニットのアレイを含む。いくつかの実施形態において、3D/メディアサブシステム315は、スレッド命令及びデータ用の1つ又は複数の内蔵キャッシュを含む。いくつかの実施形態において、サブシステムは、スレッド間でデータを共有し出力データを格納するための、レジスタ及びアドレス指定可能メモリを含む共有メモリも含む。
【0122】
図3Bは、本明細書で説明される実施形態による、タイルアーキテクチャを有するグラフィックスプロセッサ320を示す。1つの実施形態において、グラフィックスプロセッサ320は、
図3Aのグラフィックス処理エンジン310の複数のインスタンスをグラフィックスエンジンタイル310A~310Dに有するグラフィックス処理エンジンクラスタ322を含む。各グラフィックスエンジンタイル310A~310Dは、タイル相互接続323A~323Fのセットを介して相互接続され得る。各グラフィックスエンジンタイル310A~310Dは、メモリ相互接続325A~325Dを介して、メモリモジュール又はメモリデバイス326A~326Dにも接続され得る。メモリデバイス326A~326Dは、任意のグラフィックスメモリ技術を用いることができる。例えば、メモリデバイス326A~326Dは、グラフィックスダブルデータレート(GDDR)メモリであってよい。メモリデバイス326A~326Dは、1つの実施形態において、それぞれのグラフィックスエンジンタイル310A~310Dと共にオンダイになり得る高帯域幅メモリ(HBM)モジュールである。1つの実施形態において、メモリデバイス326A~326Dは、それぞれのグラフィックスエンジンタイル310A~310Dの上に積層され得る積層メモリデバイスである。1つの実施形態において、各グラフィックスエンジンタイル310A~310D及び関連するメモリ326A~326Dは別個のチップレットに存在し、これらのチップレットは、
図11B~
図11Dでさらに詳細に説明されるように、ベースダイ又はベース基板に接合される。
【0123】
グラフィックス処理エンジンクラスタ322は、オンチップ又はオンパッケージファブリック相互接続324と接続できる。ファブリック相互接続324は、グラフィックスエンジンタイル310A~310Dと、ビデオコーデック306及び1つ又は複数のコピーエンジン304などのコンポーネントとの間の通信を可能にし得る。コピーエンジン304は、メモリデバイス326A~326Dとの間で、またメモリデバイス326A~326Dと、グラフィックスプロセッサ320の外部にあるメモリ(例えば、システムメモリ)との間で、データを移動するのに用いられてよい。ファブリック相互接続324は、グラフィックスエンジンタイル310A~310Dを相互接続するのにも用いられてよい。グラフィックスプロセッサ320は、外付けディスプレイデバイス318との接続を可能にするためのディスプレイコントローラ302を任意選択で含んでよい。グラフィックスプロセッサはまた、グラフィックスアクセラレータ又はコンピュートアクセラレータとして構成されてよい。アクセラレータ構成において、ディスプレイコントローラ302及びディスプレイデバイス318は省略されてよい。
【0124】
グラフィックスプロセッサ320は、ホストインタフェース328を介してホストシステムに接続できる。ホストインタフェース328は、グラフィックスプロセッサ320、システムメモリ、及び/又は他のシステムコンポーネントとの間の通信を可能にし得る。ホストインタフェース328は、例えば、PCI Expressバス又は別の種類のホストシステムインタフェースであってよい。
【0125】
図3Cは、本明細書で説明される実施形態によるコンピュートアクセラレータ330を示す。コンピュートアクセラレータ330は、
図3Bのグラフィックスプロセッサ320とのアーキテクチャ上の類似点を含んでよく、コンピュートアクセラレーション用に最適化されている。コンピュートエンジンクラスタ332が、並列又はベクトルベースの汎用コンピュートオペレーション用に最適化された実行ロジックを含むコンピュートエンジンタイル340A~340Dのセットを含むことができる。いくつかの実施形態において、コンピュートエンジンタイル340A~340Dは固定機能グラフィックス処理ロジックを含まないが、1つの実施形態において、コンピュートエンジンタイル340A~340Dのうちの1つ又は複数が、メディアアクセラレーションを行うためのロジックを含むことができる。コンピュートエンジンタイル340A~340Dは、メモリ相互接続325A~325Dを介してメモリ326A~326Dに接続できる。メモリ326A~326D及びメモリ相互接続325A~325Dは、グラフィックスプロセッサ320に見られるのと同様の技術であってよく、又は異なっていてもよい。グラフィックスコンピュートエンジンタイル340A~340Dは、タイル相互接続323A~323Fのセットを介して相互接続されてもよく、ファブリック相互接続324と接続されてもよく且つ/又はファブリック相互接続324によって相互接続されてもよい。1つの実施形態において、コンピュートアクセラレータ330は、デバイス全体のキャッシュとして構成され得る大容量のL3キャッシュ336を含む。コンピュートアクセラレータ330は、
図3Bのグラフィックスプロセッサ320と同様の方式で、ホストインタフェース328を介してホストプロセッサ及びメモリにも接続できる。
[グラフィックス処理エンジン]
【0126】
図4は、いくつかの実施形態による、グラフィックスプロセッサのグラフィックス処理エンジン410のブロック図である。1つの実施形態において、グラフィックス処理エンジン(GPE)410は、
図3Aに示すGPE310のあるバージョンであり、
図3Bのグラフィックスエンジンタイル310A~310Dを表してもよい。
図4の要素で、本明細書における任意の他の図の要素と同じ参照番号(又は名称)を有する要素は、本明細書のどこか他の箇所で説明される方式と同様な任意の方式で動作する又は機能することができるが、そのように限定されることはない。例えば、
図3Aの3Dパイプライン312及びメディアパイプライン316が示されている。メディアパイプライン316は、GPE410のいくつかの実施形態において任意選択であり、GPE410に明示的に含まれなくてもよい。例えば少なくとも1つの実施形態において、別個のメディア及び/又はイメージプロセッサがGPE410に連結される。
【0127】
いくつかの実施形態において、GPE410は、コマンドストリームを3Dパイプライン312及び/又はメディアパイプライン316に提供するコマンドストリーマ403と連結する、又はコマンドストリーマ403を含む。いくつかの実施形態において、コマンドストリーマ403はメモリと連結され、このメモリはシステムメモリであっても、内蔵キャッシュメモリ及び共有キャッシュメモリのうちの1つ又は複数であってもよい。いくつかの実施形態において、コマンドストリーマ403はコマンドをメモリから受信し、このコマンドを3Dパイプライン312及び/又はメディアパイプライン316に送信する。これらのコマンドは、リングバッファからフェッチされる命令であり、リングバッファは、3Dパイプライン312及びメディアパイプライン316用のコマンドを格納する。1つの実施形態において、リングバッファはさらに、複数のコマンド群を格納するバッチコマンドバッファを含むことができる。3Dパイプライン312用のコマンドは、メモリに格納されるデータへの参照も含むことができ、この参照は、限定されることはないが、3Dパイプライン312用の頂点データ及びジオメトリデータ、並びに/又はメディアパイプライン316用の画像データ及びメモリオブジェクトなどである。3Dパイプライン312及びメディアパイプライン316は、それぞれのパイプライン内のロジックを介してオペレーションを行うことにより、又は1つ又は複数の実行スレッドをグラフィックスコアアレイ414にディスパッチすることにより、コマンド及びデータを処理する。1つの実施形態において、グラフィックスコアアレイ414は、1つ又は複数のブロックのグラフィックスコア(例えば、グラフィックスコア415A、グラフィックスコア415B)を含み、各ブロックは1つ又は複数のグラフィックスコアを含む。各グラフィックスコアは、グラフィックスオペレーション及びコンピュートオペレーションを行うための汎用実行ロジック及び特定グラフィックス向け実行ロジック、並びに固定機能テクスチャ処理及び/又は機械学習人工知能アクセラレーションロジックを含むグラフィックス実行リソースのセットを含む。
【0128】
様々な実施形態において、3Dパイプライン312は、命令を処理して実行スレッドをグラフィックスコアアレイ414にディスパッチすることにより1つ又は複数のシェーダプログラムを処理するための固定機能ロジック及びプログラム可能型ロジックを含むことができる。シェーダプログラムとは、頂点シェーダ、ジオメトリシェーダ、ピクセルシェーダ、フラグメントシェーダ、コンピュートシェーダ、又は他のシェーダプログラムなどである。グラフィックスコアアレイ414は、これらのシェーダプログラムの処理に用いるために、統合された実行リソースのブロックを提供する。グラフィックスコアアレイ414のグラフィックスコア415A~415B内の多目的実行ロジック(例えば、実行ユニット)が、様々な3D APIシェーダ言語に対するサポートを含み、複数のシェーダに関連した複数の同時実行スレッドを実行できる。
【0129】
いくつかの実施形態において、グラフィックスコアアレイ414は、映像処理及び/又は画像処理などのメディア機能を実行するための実行ロジックを含む。1つの実施形態において、実行ユニットは、グラフィックス処理オペレーションのほかに、並列汎用計算オペレーションを行うようにプログラム可能な汎用ロジックを含む。汎用ロジックは、
図1のプロセッサコア107又は
図2Aに見られるようなコア202A~202Nの中にある汎用ロジックと並行して又は連動して、処理オペレーションを実行できる。
【0130】
グラフィックスコアアレイ414で実行するスレッドにより生成される出力データが、統合リターンバッファ(URB)418内のメモリにデータを出力できる。URB418は、複数のスレッドのデータを格納できる。いくつかの実施形態において、URB418は、グラフィックスコアアレイ414で実行する異なるスレッド間でデータを送信するのに用いられてよい。いくつかの実施形態において、URB418はさらに、グラフィックスコアアレイのスレッドと共有機能ロジック420内の固定機能ロジックとの間の同期に用いられてもよい。
【0131】
いくつかの実施形態において、グラフィックスコアアレイ414はスケーラブルなので、このアレイは可変数のグラフィックスコアを含み、それぞれがGPE410の目標電力及び性能レベルに基づいて可変数の実行ユニットを有する。1つの実施形態において、これらの実行リソースは動的にスケーラブルであるため、必要に応じて実行リソースを有効にしても無効にしてもよい。
【0132】
グラフィックスコアアレイ414は、グラフィックスコアアレイ内のグラフィックスコア間で共有される複数のリソースを含む共有機能ロジック420と連結する。共有機能ロジック420内の共有機能は、専用の補足的な機能をグラフィックスコアアレイ414に提供するハードウェアロジックユニットである。様々な実施形態において、共有機能ロジック420は、限定されることはないが、サンプラロジック421、数学ロジック422、及びスレッド間通信(ITC)ロジック423を含む。さらに、いくつかの実施形態が、共有機能ロジック420内に1つ又は複数のキャッシュ425を実装する。
【0133】
共有機能が実装されるのは、少なくとも、所与の専用機能に対する要求がグラフィックスコアアレイ414内に含めるには不十分になる場合である。代わりに、この専用機能の単一のインスタンス化が、スタンドアロンエンティティとして共有機能ロジック420に実装され、グラフィックスコアアレイ414内の実行リソースの間で共有される。グラフィックスコアアレイ414の間で共有され、グラフィックスコアアレイ414内に含まれる正確な機能のセットは、複数の実施形態全体で変化する。いくつかの実施形態において、グラフィックスコアアレイ414によって広く用いられる、共有機能ロジック420内の特定の共有機能が、グラフィックスコアアレイ414内の共有機能ロジック416に含まれてよい。様々な実施形態において、グラフィックスコアアレイ414内の共有機能ロジック416は、共有機能ロジック420内の一部又は全てのロジックを含むことができる。1つの実施形態において、共有機能ロジック420内の全てのロジック要素は、グラフィックスコアアレイ414の共有機能ロジック416内のロジック要素と重複してもよい。1つの実施形態において、共有機能ロジック420は、グラフィックスコアアレイ414内の共有機能ロジック416を優先して除外される。
[実行ユニット]
【0134】
図5A~
図5Bは、本明細書で説明される実施形態による、グラフィックスプロセッサコアで利用される処理要素のアレイを含むスレッド実行ロジック500を示す。
図5A~
図5Bの要素で、本明細書における任意の他の図の要素と同じ参照番号(又は名称)を有する要素は、本明細書のどこか他の箇所で説明される方式と同様な任意の方式で動作する又は機能することができるが、そのように限定されることはない。
図5A~
図5Bは、スレッド実行ロジック500の概要を示しており、スレッド実行ロジック500は、
図2Bの各サブコア221A~221Fを用いて示されるハードウェアロジックを代表してよい。
図5Aは、汎用グラフィックスプロセッサ内の実行ユニットを代表しており、
図5Bは、コンピュートアクセラレータ内で用いられ得る実行ユニットを代表している。
【0135】
図5Aに示すように、いくつかの実施形態において、スレッド実行ロジック500は、シェーダプロセッサ502と、スレッドディスパッチャ504と、命令キャッシュ506と、複数の実行ユニット508A~508Nを含むスケーラブルな実行ユニットアレイと、サンプラ510と、共有ローカルメモリ511と、データキャッシュ512と、データポート514とを含む。1つの実施形態において、スケーラブルな実行ユニットアレイは、ワークロードの計算要件に基づいて1つ又は複数の実行ユニット(例えば、実行ユニット508A、508B、508C、508D、…、508N-1、及び508Nのうちのいずれか)を有効にする又は無効にすることにより、動的にスケーリングすることができる。1つの実施形態において、含まれているコンポーネントは、これらのコンポーネントのそれぞれに接続する相互接続ファブリックを介して相互接続される。いくつかの実施形態において、スレッド実行ロジック500は、命令キャッシュ506、データポート514、サンプラ510、及び実行ユニット508A~508Nのうちの1つ又は複数を通じて、システムメモリ又はキャッシュメモリなどのメモリへの1つ又は複数の接続部を含む。いくつかの実施形態において、各実行ユニット(例えば、508A)は、複数の同時ハードウェアスレッドを実行しながら、並行してスレッドごとに複数のデータ要素を処理できるスタンドアロン型のプログラム可能な汎用計算ユニットである。様々な実施形態において、実行ユニット508A~508Nのアレイは、任意の数の個々の実行ユニットを含むようにスケーラブルである。
【0136】
いくつかの実施形態において、実行ユニット508A~508Nは主として、シェーダプログラムを実行するのに用いられる。シェーダプロセッサ502は、様々なシェーダプログラムを処理し、スレッドディスパッチャ504を介して、シェーダプログラムに関連した実行スレッドをディスパッチすることができる。1つの実施形態において、スレッドディスパッチャは、グラフィックスパイプライン及びメディアパイプラインからのスレッド開始要求を調整し、要求されたスレッドを実行ユニット508A~508Nのうちの1つ又は複数の実行ユニット上にインスタンス化するためのロジックを含む。例えば、ジオメトリパイプラインが、頂点シェーダ、テッセレーションシェーダ、又はジオメトリシェーダを処理のためにスレッド実行ロジックにディスパッチできる。いくつかの実施形態において、スレッドディスパッチャ504は、実行中のシェーダプログラムからのランタイムスレッド生成要求を処理することもできる。
【0137】
いくつかの実施形態において、実行ユニット508A~508Nは、多くの標準的な3Dグラフィックスシェーダ命令に対するネイティブサポートを含む命令セットをサポートしているので、グラフィックスライブラリからのシェーダプログラム(例えば、Direct 3D及びOpenGL)が最小限の変換で実行されるようになる。実行ユニットは、頂点処理及びジオメトリ処理(例えば、頂点プログラム、ジオメトリプログラム、頂点シェーダ)、ピクセル処理(例えば、ピクセルシェーダ、フラグメントシェーダ)、並びに汎用処理(例えば、コンピュートシェーダ及びメディアシェーダ)をサポートしている。実行ユニット508A~508Nのそれぞれは、マルチ発行単一命令多重データ(SIMD)実行が可能であり、マルチスレッドオペレーションによって、高遅延のメモリアクセスにもかかわらず効率的な実行環境が可能になる。各実行ユニット内の各ハードウェアスレッドは、専用の高帯域幅レジスタファイル及び関連する独立したスレッド状態を有する。実行は、整数演算、単精度及び倍精度の浮動小数点演算、SIMD分岐性能、論理演算、超越演算、並びに他の雑演算が可能なパイプラインに対して、クロックごとのマルチ発行である。メモリ又は複数の共有機能のうちの1つからのデータを待つ間に、実行ユニット508A~508N内の依存性ロジックが、要求したデータが戻ってくるまで、待機中のスレッドをスリープ状態にさせる。待機中のスレッドがスリープしている間、ハードウェアリソースが他のスレッドの処理に当てられてよい。例えば、頂点シェーダオペレーションに関連した遅延の際に、実行ユニットが、異なる頂点シェーダを含むピクセルシェーダ、フラグメントシェーダ、又は別の種類のシェーダプログラムのオペレーションを実行できる。様々な実施形態が、SIMDの使用に対する代替として又はSIMDの使用に加えて、単一命令多重スレッド(SIMT)を使用して実行を用いるのに適用できる。SIMDコア又はオペレーションへの参照が、SIMTにも適用でき、SIMTと組み合わせてSIMDにも適用できる。
【0138】
実行ユニット508A~508N内の各実行ユニットは、データ要素のアレイ上で動作する。データ要素の数は、「実行サイズ」又は命令に対するチャネルの数である。実行チャネルが、データ要素アクセス、マスキング、及び命令内のフロー制御についての実行の論理ユニットである。チャネルの数は、特定のグラフィックスプロセッサ用の物理的な算術論理ユニット(ALU)又は浮動小数点ユニット(FPU)の数とは無関係であってよい。いくつかの実施形態において、実行ユニット508A~508Nは、整数データ型及び浮動小数点データ型をサポートする。
【0139】
実行ユニットの命令セットは、SIMD命令を含む。様々なデータ要素は、パックドデータ型としてレジスタに格納されてよく、実行ユニットは、これらの要素のデータサイズに基づいて様々な要素を処理することになる。例えば、256ビット幅のベクトルを処理する場合、256ビットのベクトルはレジスタに格納され、実行ユニットは、4個の別個の64ビットパックドデータ要素(クアッドワード(QW)サイズのデータ要素)、8個の別個の32ビットパックドデータ要素(ダブルワード(DW)サイズのデータ要素)、16個の別個の16ビットパックドデータ要素(ワード(W)サイズのデータ要素)、又は32個の別個の8ビットデータ要素(バイト(B)サイズのデータ要素)としてベクトルを処理する。しかしながら、異なるベクトル幅及びレジスタサイズが可能である。
【0140】
1つの実施形態において、1つ又は複数の実行ユニットは、融合EUに共通なスレッド制御ロジック(507A~507N)を有する融合実行ユニット509A~509Nに組み合わされ得る。複数のEUは、EUグループに融合され得る。融合EUグループ内の各EUは、別個のSIMDハードウェアスレッドを実行するように構成され得る。融合EUグループ内のEUの数は、実施形態に応じて変化し得る。さらに、限定されることはないが、SIMD8、SIMD16、SIMD32を含む様々なSIMD幅が、EUごとに実行され得る。それぞれの融合されたグラフィックス実行ユニット509A~509Nは、少なくとも2つの実行ユニットを含む。例えば、融合実行ユニット509Aは、第1のEU508Aと、第2のEU508Bと、第1のEU508A及び第2のEU508Bに共通なスレッド制御ロジック507Aとを含む。スレッド制御ロジック507Aは、融合されたグラフィックス実行ユニット509Aで実行されるスレッドを制御し、融合実行ユニット509A~509N内の各EUが共通の命令ポインタレジスタを用いて実行することを可能にする。
【0141】
実行ユニット用のスレッド命令をキャッシュに格納するために、1つ又は複数の内蔵命令キャッシュ(例えば、506)がスレッド実行ロジック500に含まれる。いくつかの実施形態において、スレッド実行時にスレッドデータをキャッシュに格納するために、1つ又は複数のデータキャッシュ(例えば、512)が含まれる。実行ロジック500で実行するスレッドが、明示的に管理されたデータを共有ローカルメモリ511に格納することもできる。いくつかの実施形態において、テクスチャサンプリングを3Dオペレーションに提供し、またメディアサンプリングをメディアオペレーションに提供するために、サンプラ510が含まれる。いくつかの実施形態において、サンプラ510は、サンプリングデータを実行ユニットに提供する前のサンプリングプロセスの際にテクスチャデータ又はメディアデータを処理するための、専用のテクスチャ又はメディアサンプリング機能を含む。
【0142】
グラフィックス及びメディアパイプラインは実行時に、スレッド生成ディスパッチロジックを介して、スレッド開始要求をスレッド実行ロジック500に送信する。ジオメトリックオブジェクトのグループが処理されてピクセルデータにラスタ化されると、シェーダプロセッサ502内のピクセルプロセッサロジック(例えば、ピクセルシェーダロジック、フラグメントシェーダロジックなど)が呼び出され、さらに出力情報を計算して、結果を出力表面(例えば、カラーバッファ、デプスバッファ、ステンシルバッファなど)に書き込ませる。いくつかの実施形態において、ピクセルシェーダ又はフラグメントシェーダが、ラスタ化されたオブジェクト全体で補間される様々な頂点属性の値を計算する。いくつかの実施形態において、シェーダプロセッサ502内のピクセルプロセッサロジックが、次いで、アプリケーションプログラミングインタフェース(API)により供給されるピクセルシェーダプログラム又はフラグメントシェーダプログラムを実行する。シェーダプログラムを実行するために、シェーダプロセッサ502は、スレッドディスパッチャ504を介して、スレッドを実行ユニット(例えば、508A)にディスパッチする。いくつかの実施形態において、シェーダプロセッサ502は、サンプラ510内のテクスチャサンプリングロジックを用いて、メモリに格納されたテクスチャマップ内のテクスチャデータにアクセスする。テクスチャデータ及び入力ジオメトリデータに対する算術演算が、ジオメトリックフラグメントごとにピクセルカラーデータを計算する、又はさらなる処理から1つ又は複数のピクセルを破棄する。
【0143】
いくつかの実施形態において、データポート514はメモリアクセスメカニズムをスレッド実行ロジック500に提供し、グラフィックスプロセッサ出力パイプラインでのさらなる処理のために、処理されたデータをメモリに出力する。いくつかの実施形態において、データポート514は、データポートを介してメモリアクセス用のデータをキャッシュに格納するための1つ又は複数のキャッシュメモリ(例えば、データキャッシュ512)を含む又はこれに連結する。
【0144】
1つの実施形態において、実行ロジック500は、レイトレーシングアクセラレーション機能を提供できるレイトレーサ505を含むこともできる。レイトレーサ505は、レイ生成用の命令/機能を含むレイトレーシング命令セットをサポートできる。レイトレーシング命令セットは、
図2Cのレイトレーシングコア245によりサポートされるレイトレーシング命令セットと同様であっても、異なっていてもよい。
【0145】
図5Bは、複数の実施形態による、実行ユニット508の例示的な内部詳細を示す。グラフィックス実行ユニット508が、命令フェッチユニット537と、汎用レジスタファイルアレイ(GRF)524と、アーキテクチャレジスタファイルアレイ(ARF)526と、スレッドアービタ522と、送信ユニット530と、分岐ユニット532と、SIMD浮動小数点ユニット(FPU)534のセットと、1つの実施形態において専用整数SIMD ALU535のセットとを含むことができる。GRF524及びARF526は、グラフィックス実行ユニット508において有効になり得るそれぞれの同時ハードウェアスレッドに関連した汎用レジスタファイル及びアーキテクチャレジスタファイルのセットを含む。1つの実施形態において、スレッドごとのアーキテクチャ状態がARF526に維持され、スレッド実行時に用いられるデータがGRF524に格納される。スレッドごとの命令ポインタを含む、各スレッドの実行状態は、ARF526の特定スレッド向けレジスタに保持され得る。
【0146】
1つの実施形態において、グラフィックス実行ユニット508は、同時マルチスレッディング(SMT)と細粒度のインターリーブ型マルチスレッディング(IMT)とを組み合わせたアーキテクチャを有する。このアーキテクチャは、同時スレッドの目標数及び実行ユニットごとのレジスタの数に基づいて設計時に微調整され得るモジュール構成を有し、実行ユニットリソースが、複数の同時スレッドを実行するのに用いられるロジック全体にわたって分割される。グラフィックス実行ユニット508により実行され得る論理スレッドの数は、ハードウェアスレッドの数に限定されることはなく、複数の論理スレッドが各ハードウェアスレッドに割り当てられ得る。
【0147】
1つの実施形態において、グラフィックス実行ユニット508は複数の命令を同時発行することができ、これらの命令はそれぞれ異なる命令であってよい。グラフィックス実行ユニットスレッド508のスレッドアービタ522は、送信ユニット530、分岐ユニット532、又はSIMD FPU534のうちの1つに命令を実行のためにディスパッチできる。各実行スレッドは、GRF524内の128個の汎用レジスタにアクセスでき、各レジスタは、32ビットデータ要素のSIMD8-要素ベクトルとしてアクセス可能な32バイトを格納できる。1つの実施形態において、各実行ユニットスレッドは、GRF524内の4Kバイトにアクセスできるが、複数の実施形態はそのように限定されず、他の実施形態では、それより多い又は少ないレジスタリソースが提供されてもよい。1つの実施形態において、グラフィックス実行ユニット508は、7個のハードウェアスレッドに区切られ、これらのハードウェアスレッドは計算オペレーションを独立して実行できるが、実行ユニットごとのスレッドの数は実施形態に応じて変化してもよい。例えば、1つの実施形態において、最大16個のハードウェアスレッドがサポートされる。7個のスレッドが4Kバイトにアクセスし得る一実施形態において、GRF524は合計28Kバイトを格納できる。16個のスレッドが4Kバイトにアクセスし得る場合、GRF524は、合計64Kバイトを格納できる。柔軟なアドレス指定モードによって、複数のレジスタが一緒にアドレス指定されて、効果的に幅の広いレジスタが構築される又は順次配置された矩形ブロック型データ構造を表すことが可能になり得る。
【0148】
1つの実施形態において、メモリオペレーション、サンプラオペレーション、及び他の長遅延システム通信が、メッセージ受け渡し送信ユニット530により実行される「送信」命令を介してディスパッチされる。1つの実施形態において、SIMDダイバージェンス及び最終的なコンバージェンスを容易にするために、分岐命令が専用分岐ユニット532にディスパッチされる。
【0149】
1つの実施形態において、グラフィックス実行ユニット508は、浮動小数点演算を実行するために、1つ又は複数のSIMD浮動小数点ユニット(FPU)534を含む。1つの実施形態において、FPU534は、整数計算もサポートする。1つの実施形態において、FPU534は、最大M個の32ビット浮動小数点(又は整数)演算をSIMDで実行できる、又は最大2M個の16ビット整数演算若しくは16ビット浮動小数点演算をSIMDで実行できる。1つの実施形態において、FPUのうちの少なくとも1つが拡張数学機能を提供して、高スループット超越数学機能及び倍精度54ビット浮動小数点をサポートする。いくつかの実施形態において、8ビット整数SIMD ALU535のセットも存在し、機械学習計算に関連したオペレーションを実行するように特に最適化されてよい。
【0150】
1つの実施形態において、グラフィックス実行ユニット508の複数のインスタンスのアレイが、グラフィックスサブコアグループ(例えば、サブスライス)にインスタンス化され得る。拡張性については、製品設計者がサブコアグループごとに正確な数の実行ユニットを選択できる。1つの実施形態において、実行ユニット508は、複数の実行チャネル全体にわたって命令を実行できる。さらなる実施形態において、グラフィックス実行ユニット508で実行される各スレッドは、異なるチャネルで実行される。
【0151】
図6は、一実施形態による追加の実行ユニット600を示す。実行ユニット600は、例えば、
図3Cに見られるようなコンピュートエンジンタイル340A~340Dに用いるためのコンピュート最適化実行ユニットであってよいが、そのように限定されることはない。実行ユニット600の変形例も、
図3Bに見られるようなグラフィックスエンジンタイル310A~310Dに用いられてよい。1つの実施形態において、実行ユニット600は、スレッド制御ユニット601と、スレッド状態ユニット602と、命令フェッチ/プリフェッチユニット603と、命令復号ユニット604とを含む。実行ユニット600はさらに、実行ユニット内のハードウェアスレッドに割り当てられ得るレジスタを格納するレジスタファイル606を含む。実行ユニット600はさらに、送信ユニット607と分岐ユニット608とを含む。1つの実施形態において、送信ユニット607及び分岐ユニット608は、
図5Bのグラフィックス実行ユニット508の送信ユニット530及び分岐ユニット532と同様に動作できる。
【0152】
実行ユニット600は、複数の異なる種類の機能ユニットを含むコンピュートユニット610も含む。1つの実施形態において、コンピュートユニット610は、算術論理ユニットのアレイを含むALUユニット611を含む。ALUユニット611は、64ビット、32ビット、及び16ビットの整数演算及び浮動小数点演算を行うように構成され得る。整数演算及び浮動小数点演算は、同時に行われてもよい。コンピュートユニット610は、シストリックアレイ612及び数学ユニット613も含み得る。シストリックアレイ612は、シストリック方式でベクトル演算又は他のデータ並列演算を行うのに用いられ得るデータ処理ユニットの広く(W)深い(D)ネットワークを含む。1つの実施形態において、シストリックアレイ612は、行列ドット積演算などの行列演算を行うように構成され得る。1つの実施形態において、シストリックアレイ612は、16ビット浮動小数点演算、並びに8ビット及び4ビットの整数演算をサポートする。1つの実施形態において、シストリックアレイ612は、機械学習オペレーションを加速するように構成され得る。そのような実施形態において、シストリックアレイ612は、bfloat16ビット浮動小数点フォーマットをサポートするように構成され得る。1つの実施形態において、数学ユニット613は、数学演算の特定のサブセットを効率的に且つALUユニット611より低電力方式で行うために含まれ得る。数学ユニット613は、他の実施形態により提供されるグラフィックス処理エンジンの共有機能ロジックに見られ得る数学ロジック(例えば、
図4の共有機能ロジック420の数学ロジック422)の変形例を含むことができる。1つの実施形態において、数学ユニット613は、32ビット及び64ビットの浮動小数点演算を実行するように構成され得る。
【0153】
スレッド制御ユニット601は、実行ユニット内のスレッドの実行を制御するためのロジックを含む。スレッド制御ユニット601は、実行ユニット600内のスレッドの実行を開始する、停止する、プリエンプトするためのスレッド調整ロジックを含み得る。スレッド状態ユニット602は、実行ユニット600で実行するように割り当てられたスレッドのスレッド状態を格納するのに用いられ得る。スレッド状態を実行ユニット600に格納することで、これらのスレッドがブロックされた又はアイドルになったときに、スレッドの迅速なプリエンプションが可能になる。命令フェッチ/プリフェッチユニット603は、上位レベルの実行ロジックの命令キャッシュ(例えば、
図5Aに見られるような命令キャッシュ506)から命令をフェッチできる。命令フェッチ/プリフェッチユニット603は、現在実行中のスレッドの分析に基づいて、命令キャッシュにロードされる命令に対してプリフェッチ要求を発行することもできる。命令復号ユニット604は、コンピュートユニットにより実行される命令を復号するのに用いられ得る。1つの実施形態において、命令復号ユニット604は、複雑な命令を復号して構成要素のマイクロオペレーションにする二次復号器として用いられ得る。
【0154】
実行ユニット600はさらに、実行ユニット600で実行するハードウェアスレッドにより用いられ得るレジスタファイル606を含む。レジスタファイル606のレジスタが、実行ユニット600のコンピュートユニット610内の複数の同時スレッドを実行するのに用いられるロジック全体にわたり分割され得る。グラフィックス実行ユニット600により実行され得る論理スレッドの数は、ハードウェアスレッドの数に限定されることはなく、複数の論理スレッドが各ハードウェアスレッドに割り当てられ得る。レジスタファイル606のサイズは、サポートされるハードウェアスレッドの数に基づいて、実施形態によって変化し得る。1つの実施形態において、レジスタリネーミングが、ハードウェアスレッドにレジスタを動的に割り当てるのに用いられてよい。
【0155】
図7は、いくつかの実施形態によるグラフィックスプロセッサの命令フォーマット700を示すブロック図である。1つ又は複数の実施形態において、グラフィックスプロセッサ実行ユニットは複数フォーマットの命令を有する命令セットをサポートする。実線の枠は、一般的に実行ユニット命令に含まれるコンポーネントを示し、破線は、任意選択のコンポーネント又は命令のサブセットだけに含まれるコンポーネントを含む。いくつかの実施形態において、説明され且つ示される命令フォーマット700はマクロ命令である。これらのマクロ命令は実行ユニットに供給される命令であり、命令が処理されるごとに命令を復号して生じるマイクロオペレーションとは異なる。
【0156】
いくつかの実施形態において、グラフィックスプロセッサ実行ユニットは128ビット命令フォーマット710の命令をネイティブにサポートする。64ビット圧縮命令フォーマット730が、選択された命令、命令オプション、及びオペランドの数に基づいて、いくつかの命令に利用可能である。ネイティブの128ビット命令フォーマット710は全ての命令オプションへのアクセスを提供し、いくつかのオプション及びオペレーションが64ビットフォーマット730に制限される。64ビットフォーマット730で利用可能なネイティブ命令は、実施形態によって変わる。いくつかの実施形態において、命令は、インデックスフィールド713内のインデックス値のセットを用いて部分的に圧縮される。実行ユニットハードウェアは、インデックス値に基づいて圧縮テーブルのセットを参照し、圧縮テーブルの出力を用いて、ネイティブ命令を128ビット命令フォーマット710で再構築する。命令の他のサイズ及びフォーマットが用いられてもよい。
【0157】
フォーマットごとに、命令オペコード712が、実行ユニットが実行するオペレーションを定義する。実行ユニットは、各オペランドの複数のデータ要素全体に対して、各命令を並行して実行する。例えば、加算命令に応答して、実行ユニットは、テクスチャエレメント又はピクチャエレメントを表す各カラーチャネルに対して同時加算演算を行う。デフォルトでは、実行ユニットは、オペランドの全てのデータチャネルに対して各命令を行う。いくつかの実施形態において、命令制御フィールド714が、チャネル選択(例えば、プレディケーション)、データチャネルオーダ(例えば、スウィズル)などの特定の実行オプションに対する制御を可能にする。128ビット命令フォーマット710の命令では、実行サイズフィールド716が、並行して実行されるデータチャネルの数を制限する。いくつかの実施形態において、実行サイズフィールド716は、64ビット圧縮命令フォーマット730に使用できない。
【0158】
いくつかの実行ユニット命令は、2つのソースオペランドであるsrc0 720及びsrc1 722と1つのデスティネーション718を含む最大3つのオペランドを有する。いくつかの実施形態において、実行ユニットは、デュアルデスティネーション命令をサポートし、これらのデスティネーションのうちの1つが示唆される。データ操作命令が第3のソースオペランド(例えば、SRC2 724)を有することができ、命令オペコード712はソースオペランドの数を決定する。命令の最後のソースオペランドが、命令と共に送られる直の(例えば、ハードコードされた)値であってよい。
【0159】
いくつかの実施形態において、128ビット命令フォーマット710は、例えば、直接的なレジスタアドレス指定モードが用いられるのか、又は間接的なレジスタアドレス指定モードが用いられるのかを指定するアクセス/アドレスモードフィールド726を含む。直接的なレジスタアドレス指定モードが用いられる場合、1つ又は複数のオペランドのレジスタアドレスは、ビットごとに命令で直接的に提供される。
【0160】
いくつかの実施形態において、128ビット命令フォーマット710は、命令のアドレスモード及び/又はアクセスモードを指定するアクセス/アドレスモードフィールド726を含む。1つの実施形態において、アクセスモードは、命令のデータアクセスアライメントを定義するのに用いられる。いくつかの実施形態が、16バイト単位で揃えたアクセスモード及び1バイト単位で揃えたアクセスモードを含むアクセスモードをサポートし、アクセスモードのバイトアライメントは、命令オペランドのアクセスアライメントを決定する。例えば、第1のモードの場合、命令は、バイト単位で揃えたアドレス指定をソースオペランド及びデスティネーションオペランドに用いてよく、第2のモードの場合、命令は、16バイト単位で揃えたアドレス指定を全てのソースオペランド及びデスティネーションオペランドに用いてよい。
【0161】
1つの実施形態において、アクセス/アドレスモードフィールド726のアドレスモード部分は、命令が直接的なアドレス指定を用いるのか又は間接的なアドレス指定を用いるのかを決定する。直接的なレジスタアドレス指定モードが用いられる場合、命令内のビットが1つ又は複数のオペランドのレジスタアドレスを直接的に提供する。間接的なレジスタアドレス指定モードが用いられる場合、1つ又は複数のオペランドのレジスタアドレスは、命令内のアドレスレジスタ値及びアドレス即値フィールドに基づいて計算されてよい。
【0162】
いくつかの実施形態において、オペコード復号740を簡略化するために、命令がオペコード712のビットフィールドに基づいてグループ化される。8ビットオペコードの場合、ビット4、5、及び6によって、実行ユニットがオペコードの種類を決定することが可能になる。示されている、まさにそのオペコードのグループ化は、単なる一例である。いくつかの実施形態において、移動及び論理オペコードグループ742が、データ移動命令及び論理命令(例えば、移動(mov)、比較(cmp))を含む。いくつかの実施形態において、移動及び論理グループ742は、5つの最上位ビット(MSB)を共有し、移動(mov)命令は0000xxxxbの形態であり、論理命令は0001xxxxbの形態である。フロー制御命令グループ744(例えば、コール、ジャンプ(jmp))が、0010xxxxb(例えば、0×20)の形態で命令を含む。雑命令グループ746が、複数の命令の混合を含み、同期命令(例えば、待機、送信)を0011xxxxb(例えば、0×30)の形態で含む。並列数学命令グループ748が、0100xxxxb(例えば、0×40)の形態で、コンポーネントごとの算術命令(例えば、加算、乗算(mul))を含む。並列数学グループ748は、データチャネルに対して算術演算を並行して行う。ベクトル数学グループ750は、0101xxxxb(例えば、0×50)の形態で、算術命令(例えば、dp4)を含む。ベクトル数学グループは、ベクトルオペランドに対して、ドット積計算などの算術を行う。示されているオペコード復号740は、1つの実施形態において、復号された命令を実行するのに実行ユニットのどの部分が用いられるかを決定するのに用いられてよい。例えば、いくつかの命令は、シストリックアレイにより実行されるシストリック命令に指定されてよい。レイトレーシング命令(不図示)などの他の命令が、実行ロジックのスライス又はパーティション内のレイトレーシングコア又はレイトレーシングロジックに送られ得る。
[グラフィックスパイプライン]
【0163】
図8は、グラフィックスプロセッサ800の別の実施形態のブロック図である。
図8の要素で、本明細書における任意の他の図の要素と同じ参照番号(又は名称)を有する要素は、本明細書のどこか他の箇所で説明される方式と同様な任意の方式で動作する又は機能することができるが、そのように限定されることはない。
【0164】
いくつかの実施形態において、グラフィックスプロセッサ800は、ジオメトリパイプライン820と、メディアパイプライン830と、ディスプレイエンジン840と、スレッド実行ロジック850と、レンダリング出力パイプライン870とを含む。いくつかの実施形態において、グラフィックスプロセッサ800は、1つ又は複数の汎用処理コアを含むマルチコア処理システム内のグラフィックスプロセッサである。グラフィックスプロセッサは、1つ又は複数の制御レジスタ(不図示)へのレジスタ書き込みによって、又はリング相互接続802を介してグラフィックスプロセッサ800に発行されるコマンドによって制御される。いくつかの実施形態において、リング相互接続802は、他のグラフィックスプロセッサ又は汎用プロセッサなどの他の処理コンポーネントにグラフィックスプロセッサ800を連結する。リング相互接続802からのコマンドが、コマンドストリーマ803によって解釈され、コマンドストリーマ803は、ジオメトリパイプライン820又はメディアパイプライン830の個々のコンポーネントに命令を供給する。
【0165】
いくつかの実施形態において、コマンドストリーマ803は、頂点データをメモリから読み出して、コマンドストリーマ803により提供される頂点処理コマンドを実行する頂点フェッチャ805のオペレーションを指揮する。いくつかの実施形態において、頂点フェッチャ805は頂点データを頂点シェーダ807に提供し、頂点シェーダ807は、各頂点に対して座標空間変換及びライティングオペレーションを行う。いくつかの実施形態において、頂点フェッチャ805及び頂点シェーダ807は、スレッドディスパッチャ831を介して実行スレッドを実行ユニット852A~852Bにディスパッチすることにより、頂点処理命令を実行する。
【0166】
いくつかの実施形態において、実行ユニット852A~852Bは、グラフィックスオペレーション及びメディアオペレーションを行うための命令セットを有するベクトルプロセッサのアレイである。いくつかの実施形態において、実行ユニット852A~852Bには、アレイごとに特有であるか又はアレイ間で共有される付属のL1キャッシュ851を有する。このキャッシュは、データキャッシュ、命令キャッシュ、又はデータ及び命令を異なるパーティションに含むように区切られた単一のキャッシュとして構成され得る。
【0167】
いくつかの実施形態において、ジオメトリパイプライン820は、3Dオブジェクトのハードウェアアクセラレート型テッセレーションを実行するためのテッセレーションコンポーネントを含む。いくつかの実施形態において、プログラム可能型ハルシェーダ811が、テッセレーションオペレーションを構成する。プログラム可能型ドメインシェーダ817が、テッセレーション出力のバックエンド評価を提供する。テッセレータ813が、ハルシェーダ811の指示で動作し、ジオメトリパイプライン820に入力として提供されるコアースジオメトリックモデルに基づいて、詳細なジオメトリックオブジェクトのセットを生成するための専用ロジックを含む。いくつかの実施形態において、テッセレーションが用いられない場合、テッセレーションコンポーネント(例えば、ハルシェーダ811、テッセレータ813、及びドメインシェーダ817)は無視され得る。
【0168】
いくつかの実施形態において、完全なジオメトリックオブジェクトが、実行ユニット852A~852Bにディスパッチされる1つ又は複数のスレッドを介して、ジオメトリシェーダ819により処理されてよく、又はクリッパ829に直接的に進んでもよい。いくつかの実施形態において、ジオメトリシェーダは、グラフィックスパイプラインの前のステージに見られるような頂点又は頂点のパッチではなく、ジオメトリックオブジェクト全体を処理する。テッセレーションが無効である場合、ジオメトリシェーダ819は、頂点シェーダ807から入力を受信する。いくつかの実施形態において、ジオメトリシェーダ819は、テッセレーションユニットが無効である場合にジオメトリテッセレーションを行うように、ジオメトリシェーダプログラムでプログラム可能である。
【0169】
ラスタ化の前に、クリッパ829が頂点データを処理する。クリッパ829は、クリッピング機能及びジオメトリシェーダ機能を有する固定機能クリッパであってもプログラム可能型クリッパであってもよい。いくつかの実施形態において、レンダリング出力パイプライン870内のラスタライザ及び深度テストコンポーネント873が、ピクセルシェーダをディスパッチして、ジオメトリックオブジェクトをピクセルごとの表現に変換する。いくつかの実施形態において、ピクセルシェーダロジックがスレッド実行ロジック850に含まれる。いくつかの実施形態において、アプリケーションが、ラスタライザ及び深度テストコンポーネント873を無視して、ラスタ化されていない頂点データにストリームアウトユニット823を介してアクセスできる。
【0170】
グラフィックスプロセッサ800は、相互接続バス、相互接続ファブリック、又はプロセッサの主要なコンポーネントの間でデータ及びメッセージの受け渡しを可能にする何らかの他相互接続メカニズムを有する。いくつかの実施形態において、実行ユニット852A~852B及び関連する論理ユニット(例えば、L1キャッシュ851、サンプラ854、テクスチャキャッシュ858など)が、データポート856を介して相互接続して、メモリアクセスを実行し、プロセッサのレンダリング出力パイプラインコンポーネントと通信する。いくつかの実施形態において、サンプラ854、キャッシュ851、858、及び実行ユニット852A~852Bはそれぞれ、別個のメモリアクセスパスを有する。1つの実施形態において、テクスチャキャッシュ858は、サンプラキャッシュとして構成されてもよい。
【0171】
いくつかの実施形態において、レンダリング出力パイプライン870は、頂点ベースのオブジェクトを関連するピクセルベースの表現に変換するラスタライザ及び深度テストコンポーネント873を含む。いくつかの実施形態において、ラスタライザロジックは、固定機能による三角形及び線のラスタ化を実行するウィンドウ処理/マスク処理ユニットを含む。関連するレンダリングキャッシュ878及びデプスキャッシュ879も、いくつかの実施形態において利用可能である。ピクセルオペレーションコンポーネント877が、データに対してピクセルベースのオペレーションを行うが、いくつかの例において、2Dオペレーションに関連したピクセルオペレーション(例えば、ブレンディングを伴うビットブロック画像転送)が2Dエンジン841により行われるか、又はオーバーレイ表示プレーン用いるディスプレイコントローラ843によって表示時に置き換えられる。いくつかの実施形態において、共有L3キャッシュ875が、全てのグラフィックスコンポーネントに利用可能であり、メインシステムメモリを使用することなくデータの共有が可能になる。
【0172】
いくつかの実施形態において、グラフィックスプロセッサメディアパイプライン830が、メディアエンジン837とビデオフロントエンド834とを含む。いくつかの実施形態において、ビデオフロントエンド834は、コマンドストリーマ803からパイプラインコマンドを受信する。いくつかの実施形態において、メディアパイプライン830は、別個のコマンドストリーマを含む。いくつかの実施形態において、ビデオフロントエンド834は、メディアコマンドを処理してから、そのコマンドをメディアエンジン837に送信する。いくつかの実施形態において、メディアエンジン837は、スレッドディスパッチャ831を介してスレッド実行ロジック850にディスパッチするためのスレッドを生成するスレッド生成機能を含む。
【0173】
いくつかの実施形態において、グラフィックスプロセッサ800はディスプレイエンジン840を含む。いくつかの実施形態において、ディスプレイエンジン840は、プロセッサ800の外部にあり、リング相互接続802又は何らかの他の相互接続バス若しくはファブリックを介して、グラフィックスプロセッサと連結する。いくつかの実施形態において、ディスプレイエンジン840は、2Dエンジン841とディスプレイコントローラ843とを含む。いくつかの実施形態において、ディスプレイエンジン840は、3Dパイプラインから独立して動作可能な専用ロジックを含む。いくつかの実施形態において、ディスプレイコントローラ843はディスプレイデバイス(不図示)と連結する。ディスプレイデバイスは、ラップトップコンピュータに見られるようなシステム統合型ディスプレイデバイスであっても、ディスプレイデバイスコネクタを介して取り付けられる外付けディスプレイデバイスであってもよい。
【0174】
いくつかの実施形態において、ジオメトリパイプライン820及びメディアパイプライン830は、複数のグラフィックス及びメディアプログラミングインタフェースに基づいてオペレーションを実行するように構成可能であり、任意の1つのアプリケーションプログラミングインタフェース(API)に固有のものではない。いくつかの実施形態において、グラフィックスプロセッサのドライバソフトウェアが、特定のグラフィックス又はメディアライブラリに固有なAPIコールをグラフィックスプロセッサにより処理され得るコマンドに変換する。いくつかの実施形態において、オープングラフィックスライブラリ(OpenGL)、オープンコンピューティング言語(OpenCL)、及び/又はVulkanグラフィックス及びコンピュートAPIにサポートが提供され、これらは全てクロノスグループによるものである。いくつかの実施形態において、Microsoft CorporationのDirect3Dライブラリにもサポートが提供されてよい。いくつかの実施形態において、これらのライブラリの組み合わせがサポートされてもよい。オープンソースのコンピュータビジョンライブラリ(OpenCV)にもサポートが提供されてよい。互換性のある3Dパイプラインを有する将来のAPIも、将来のAPIのパイプラインからグラフィックスプロセッサのパイプラインにマッピングを行うことができるならば、サポートされるであろう。
[グラフィックスパイプラインプログラミング]
【0175】
図9Aは、いくつかの実施形態によるグラフィックスプロセッサコマンドフォーマット900を示すブロック図である。
図9Bは、一実施形態によるグラフィックスプロセッサコマンドシーケンス910を示すブロック図である。
図9Aの実線の枠は、グラフィックスコマンドに一般的に含まれるコンポーネントを示し、破線は、任意選択のコンポーネント又はグラフィックスコマンドのサブセットにだけ含まれるコンポーネントを含む。
図9Aの例示的なグラフィックスプロセッサコマンドフォーマット900は、クライアント902、コマンドオペレーションコード(オペコード)904、及びコマンド用のデータ906を識別するデータフィールドを含む。サブオペコード905及びコマンドサイズ908も、いくつかのコマンドに含まれる。
【0176】
いくつかの実施形態において、クライアント902は、コマンドデータを処理するグラフィックスデバイスのクライアントユニットを指定する。いくつかの実施形態において、グラフィックスプロセッサコマンドパーサが、各コマンドのクライアントフィールドを検査し、コマンドのさらなる処理を決定して、コマンドデータを適切なクライアントユニットにルーティングする。いくつかの実施形態において、グラフィックスプロセッサのクライアントユニットは、メモリインタフェースユニットと、レンダリングユニットと、2Dユニットと、3Dユニットと、メディアユニットとを含む。各クライアントユニットは対応する処理パイプラインを有し、その処理パイプラインがコマンドを処理する。コマンドがクライアントユニットにより受信されると、クライアントユニットは、オペコード904と、存在する場合はサブオペコード905とを読み出し、実行するオペレーションを決定する。クライアントユニットは、データフィールド906内の情報を用いてコマンドを実行する。いくつかのコマンドでは、明示コマンドサイズ908が、コマンドのサイズを指定することが期待される。いくつかの実施形態において、コマンドパーサは、コマンドオペコードに基づいて、複数のコマンドのうちの少なくとも一部のサイズを自動的に決定する。いくつかの実施形態において、コマンドがダブルワードの倍数によって揃えられる。他のコマンドフォーマットが用いられてもよい。
【0177】
図9Bのフロー図は、例示的なグラフィックスプロセッサコマンドシーケンス910を示す。いくつかの実施形態において、グラフィックスプロセッサの実施形態を特徴づけるデータ処理システムのソフトウェア又はファームウェアが、グラフィックスオペレーションのセットをセットアップする、実行する、終了するのに、示されるコマンドシーケンスのバージョンを使用する。サンプルコマンドシーケンスが例示のみを目的に示され且つ説明され、実施形態がこれらの特定のコマンド又はこのコマンドシーケンスに限定されることはない。さらに、これらのコマンドは、コマンドシーケンスにおいてコマンドのバッチとして発行されてよく、グラフィックスプロセッサは、一連のコマンドを少なくとも部分的に同時に処理することになる。
【0178】
いくつかの実施形態において、グラフィックスプロセッサコマンドシーケンス910はパイプラインフラッシュコマンド912から始めて、任意の有効なグラフィックスパイプラインに現在保留中のパイプラインコマンドを完了させてよい。いくつかの実施形態において、3Dパイプライン922及びメディアパイプライン924は同時に動作しない。パイプラインフラッシュは、有効なグラフィックスパイプラインに任意の保留コマンドを完了させるように実行される。パイプラインフラッシュに応答して、グラフィックスプロセッサのコマンドパーサは、有効な描画エンジンが保留オペレーションを完了して関連する読み出しキャッシュが無効になるまで、コマンド処理を一時停止することになる。任意選択で、レンダリングキャッシュ内の、ダーティ(dirty)とマークされた任意のデータがメモリにフラッシュされ得る。いくつかの実施形態において、パイプラインフラッシュコマンド912は、パイプライン同期に用いられ得る、又はグラフィックスプロセッサを低電力状態にする前に用いられ得る。
【0179】
いくつかの実施形態において、コマンドシーケンスがパイプライン同士を明示的に切り替えるのにグラフィックスプロセッサを必要とする場合、パイプライン選択コマンド913が用いられる。いくつかの実施形態において、パイプライン選択コマンド913は、パイプラインコマンドを発行する前に実行コンテキストにおいて一度だけ必要とされる。ただし、コンテキストが両方のパイプラインにコマンドを発行する場合を除く。いくつかの実施形態において、パイプラインフラッシュコマンド912は、パイプライン選択コマンド913を介したパイプライン切り替え直前に必要とされる。
【0180】
いくつかの実施形態において、パイプライン制御コマンド914が、オペレーション用のグラフィックスパイプラインを構成し、3Dパイプライン922及びメディアパイプライン924をプログラムするのに用いられる。いくつかの実施形態において、パイプライン制御コマンド914は、有効なパイプライン用のパイプライン状態を構成する。1つの実施形態において、パイプライン制御コマンド914は、パイプライン同期に用いられ、またコマンドのバッチを処理する前に、有効なパイプライン内の1つ又は複数のキャッシュメモリからデータを消去するのに用いられる。
【0181】
いくつかの実施形態において、リターンバッファ状態コマンド916が、それぞれのパイプラインがデータを書き込むためのリターンバッファのセットを構成するのに用いられる。いくつかのパイプラインオペレーションは、オペレーションが処理中に中間データを書き込む1つ又は複数のリターンバッファの割り当て、選択、又は構成を必要とする。いくつかの実施形態において、グラフィックスプロセッサは、出力データを格納し且つクロススレッド通信を行うのにも1つ又は複数のリターンバッファを用いる。いくつかの実施形態において、リターンバッファ状態916は、パイプラインオペレーションのセットに用いるリターンバッファのサイズ及びその数を選択することを含む。
【0182】
コマンドシーケンス内の残りのコマンドは、オペレーション用の有効なパイプラインに基づいて異なる。パイプライン決定920に基づいて、コマンドシーケンスは、3Dパイプライン状態930で始まる3Dパイプライン922に合わせてあるか、又はメディアパイプライン状態940で始まるメディアパイプライン924に合わせてある。
【0183】
3Dパイプライン状態930を構成するコマンドは、頂点バッファ状態、頂点要素状態、一定色状態、デプスバッファ状態、及び3Dプリミティブコマンドが処理される前に構成される他の状態変数用の3D状態設定コマンドを含む。これらのコマンドの値は、使用中の特定の3D APIに基づいて、少なくとも部分的に決定される。いくつかの実施形態において、3Dパイプライン状態930コマンドはまた、特定のパイプライン要素を、これらの要素が用いられない場合に、選択的に無効にするか又は無視することもできる。
【0184】
いくつかの実施形態において、3Dプリミティブ932コマンドが、3Dパイプラインにより処理される3Dプリミティブを送信するのに用いられる。3Dプリミティブ932コマンドを介してグラフィックスプロセッサに送られるコマンド及び関連パラメータが、グラフィックスパイプラインの頂点フェッチ機能に転送される。頂点フェッチ機能は、頂点データ構造を生成するのに、3Dプリミティブ932コマンドデータを使用する。頂点データ構造は、1つ又は複数のリターンバッファに格納される。いくつかの実施形態において、3Dプリミティブ932コマンドは、頂点シェーダを介して3Dプリミティブに対して頂点オペレーションを実行するのに用いられる。頂点シェーダを処理するために、3Dパイプライン922は、シェーダ実行スレッドをグラフィックスプロセッサ実行ユニットにディスパッチする。
【0185】
いくつかの実施形態において、3Dパイプライン922は、実行コマンド934又はイベントを介してトリガされる。いくつかの実施形態において、レジスタ書き込みがコマンド実行をトリガする。いくつかの実施形態において、実行がコマンドシーケンスの「ゴー(go)」コマンド又は「キック(kick)」コマンドを介してトリガされる。1つの実施形態において、コマンド実行が、グラフィックスパイプラインを通じてコマンドシーケンスをフラッシュするように、パイプライン同期コマンドを用いてトリガされる。3Dパイプラインは、3Dプリミティブに対してジオメトリ処理を行うことになる。オペレーションが完了すると、結果として得られるジオメトリックオブジェクトがラスタ化され、ピクセルエンジンは結果として得られるピクセルに色をつける。ピクセルシェーディング及びピクセルのバックエンドオペレーションを制御する追加のコマンドも、これらのオペレーション用に含まれてよい。
【0186】
いくつかの実施形態において、グラフィックスプロセッサコマンドシーケンス910は、メディアオペレーションを行う場合、メディアパイプライン924のパスをたどる。一般的には、メディアパイプライン924用のプログラミングの特定の使用法及び方式は、実行されるメディアオペレーション又はコンピュートオペレーションに依存する。特定のメディア復号オペレーションが、メディア復号時にメディアパイプラインにオフロードされてよい。いくつかの実施形態において、メディアパイプラインはまた、無視されてもよく、メディア復号が、1つ又は複数の汎用処理コアにより提供されるリソースを用いて全体的に又は部分的に実行されてもよい。1つの実施形態において、メディアパイプラインは、汎用グラフィックスプロセッサユニット(GPGPU)オペレーション用の要素も含み、グラフィックスプロセッサは、グラフィックスプリミティブのレンダリングに明示的に関連していない計算シェーダプログラムを用いて、SIMDベクトル演算を実行するのに用いられる。
【0187】
いくつかの実施形態において、メディアパイプライン924は、3Dパイプライン922と同様の方式で構成される。メディアパイプライン状態940を構成するコマンドのセットが、メディアオブジェクトコマンド942の前にディスパッチされるか、又はコマンドキューに入れられる。いくつかの実施形態において、メディアパイプライン状態940用のコマンドが、メディアオブジェクトを処理するのに用いられるメディアパイプライン要素を構成するデータを含む。これは、符号化フォーマット又は復号フォーマットなどの、メディアパイプライン内の映像復号ロジック及び映像符号化ロジックを構成するデータを含む。いくつかの実施形態において、メディアパイプライン状態940用のコマンドは、状態設定のバッチを含む「間接的」な状態要素に対する1つ又は複数のポインタの使用もサポートする。
【0188】
いくつかの実施形態において、メディアオブジェクトコマンド942は、メディアパイプラインによる処理のために、ポインタをメディアオブジェクトに供給する。メディアオブジェクトは、処理される映像データを含むメモリバッファを含む。いくつかの実施形態において、全てのメディアパイプライン状態は、メディアオブジェクトコマンド942を発行する前に有効でなければならない。パイプライン状態が構成され且つメディアオブジェクトコマンド942がキューに入ると、メディアパイプライン924は、実行コマンド944又は同等の実行イベント(例えば、レジスタ書き込み)によってトリガされる。次いで、メディアパイプライン924からの出力が、3Dパイプライン922又はメディアパイプライン924により提供されるオペレーションにより後処理されてよい。いくつかの実施形態において、GPGPUオペレーションが、メディアオペレーションと同様の方式で構成され且つ実行される。
[グラフィックスソフトウェアアーキテクチャ]
【0189】
図10は、いくつかの実施形態によるデータ処理システム1000の例示的なグラフィックスソフトウェアアーキテクチャを示す。いくつかの実施形態において、ソフトウェアアーキテクチャは、3Dグラフィックスアプリケーション1010と、オペレーティングシステム1020と、少なくとも1つのプロセッサ1030とを含む。いくつかの実施形態において、プロセッサ1030は、グラフィックスプロセッサ1032と1つ又は複数の汎用プロセッサコア1034とを含む。グラフィックスアプリケーション1010及びオペレーティングシステム1020はそれぞれ、データ処理システムのシステムメモリ1050で実行される。
【0190】
いくつかの実施形態において、3Dグラフィックスアプリケーション1010は、シェーダ命令1012を含む1つ又は複数のシェーダプログラムを含む。シェーダ言語命令は、Direct3Dの高水準シェーダ言語(HLSL)及びOpenGLシェーダ言語(GLSL)などの高水準シェーダ言語の命令であってよい。アプリケーションは、汎用プロセッサコア1034による実行に好適な機械語の実行可能命令1014も含む。アプリケーションは、頂点データで定義されるグラフィックスオブジェクト1016も含む。
【0191】
いくつかの実施形態において、オペレーティングシステム1020は、Microsoft Corporation のMicrosoft Windows(登録商標)オペレーティングシステム、専用のUNIX(登録商標)様式のオペレーティングシステム、又はLinux(登録商標)カーネルの変形を用いるオープンソースのUNIX(登録商標)様式のオペレーティングシステムである。オペレーティングシステム1020は、Direct3DのAPI、OpenGLのAPI、又はVulkanのAPIなどのグラフィックスAPI1022をサポートできる。Direct3DのAPIが用いられる場合、オペレーティングシステム1020はフロントエンドシェーダコンパイラ1024を用いて、HLSL内の任意のシェーダ命令1012を低水準シェーダ言語にコンパイルする。コンパイルは、ジャストインタイム(JIT)コンパイルであってもよく、又はアプリケーションはシェーダプリコンパイルを実行できる。いくつかの実施形態において、高水準シェーダは、3Dグラフィックスアプリケーション1010のコンパイル時に、低水準シェーダにコンパイルされる。いくつかの実施形態において、シェーダ命令1012は、VulkanのAPIにより用いられる標準ポータブル中間表現(SPIR)のバージョンなどの中間フォームで提供される。
【0192】
いくつかの実施形態において、ユーザモードグラフィックスドライバ1026が、シェーダ命令1012を特定ハードウェア向け表現に変換するためのバックエンドシェーダコンパイラ1027を含む。OpenGLのAPIが用いられる場合、GLSL高水準言語のシェーダ命令1012は、コンパイルのためにユーザモードグラフィックスドライバ1026に送られる。いくつかの実施形態において、ユーザモードグラフィックスドライバ1026は、オペレーティングシステムのカーネルモード機能1028を用いて、カーネルモードグラフィックスドライバ1029と通信する。いくつかの実施形態において、カーネルモードグラフィックスドライバ1029は、グラフィックスプロセッサ1032と通信して、コマンド及び命令をディスパッチする。
[IPコアの実施態様]
【0193】
少なくとも1つの実施形態のうちの1つ又は複数の態様が、プロセッサなどの集積回路内のロジックを表す且つ/又は定義する、機械可読媒体に格納された代表コードにより実装されてよい。例えば、機械可読媒体は、プロセッサ内の様々なロジックを表す命令を含んでよい。命令は、機械によって読み出される場合、本明細書で説明される技術を実行するロジックを機械に作らせてよい。「IPコア」として知られるそのような表現は、集積回路の構造を記述するハードウェアモデルとして、有形の機械可読媒体に格納され得る、集積回路用ロジックの再利用可能な単位である。ハードウェアモデルは、集積回路を製造する製造機械にハードウェアモデルをロードする様々な顧客又は製造施設に供給されてよい。集積回路は、本明細書において説明される実施形態のうちのいずれかと関連して説明されるオペレーションを回路が実行するように製造されてよい。
【0194】
図11Aは、一実施形態による、オペレーションを実行する集積回路を製造するのに用いられ得るIPコア開発システム1100を示すブロック図である。IPコア開発システム1100は、より大きい設計図に組み込まれ得るモジュール式の再利用可能な設計図を生成するのに用いられても、集積回路全体(例えば、SoC集積回路)を構築するのに用いられてもよい。設計施設1130が、IPコア設計のソフトウェアシミュレーション1110を高水準プログラミング言語(例えば、C/C++)で生成できる。ソフトウェアシミュレーション1110は、シミュレーションモデル1112を用いて、IPコアの挙動を設計し、テストし、確認するのに用いられ得る。シミュレーションモデル1112は、機能シミュレーション、挙動シミュレーション、及び/又はタイミングシミュレーションを含んでよい。レジスタ転送レベル(RTL)設計1115が次に、シミュレーションモデル1112から作成又は合成され得る。RTL設計1115は、ハードウェアレジスタ間のデジタル信号のフローをモデル化する集積回路の挙動の抽出であり、モデル化されたデジタル信号を用いて実行される関連ロジックを含む。RTL設計1115のほかに、論理レベル又はトランジスタレベルでの下位レベルの設計も、作成され、設計され、又は合成されてよい。したがって、初期の設計及びシミュレーションの特定の詳細は変化してよい。
【0195】
RTL設計1115又は均等物はさらに、設計施設で合成されてハードウェアモデル1120になってよく、ハードウェアモデル1120は、ハードウェア記述言語(HDL)又は物理的な設計データの何らかの他の表現であってよい。HDLはさらに、IPコア設計を確認するために、シミュレーションされてもテストされてもよい。IPコア設計は、サードパーティの製造施設1165に届けるために、不揮発性メモリ1140(例えば、ハードディスク、フラッシュメモリ、又は任意の不揮発性記憶媒体)を用いて格納され得る。あるいは、IPコア設計は、有線接続1150又は無線接続1160によって、(例えば、インターネットを介して)伝送されてよい。製造施設1165は次に、IPコア設計に少なくとも部分的に基づく集積回路を製造してよい。製造された集積回路は、本明細書で説明される少なくとも1つの実施形態に従ってオペレーションを実行するように構成され得る。
【0196】
図11Bは、本明細書で説明されるいくつかの実施形態による、集積回路パッケージアセンブリ1170の垂直断面図を示す。集積回路パッケージアセンブリ1170は、本明細書で説明される1つ又は複数のプロセッサ又はアクセラレータデバイスの実施態様を示す。パッケージアセンブリ1170は、基板1180に接続されたハードウェアロジック1172、1174という複数のユニットを含む。ロジック1172、1174は、構成可能ロジックハードウェア又は固定機能ロジックハードウェアに少なくとも部分的に実装されてよく、プロセッサコア、グラフィックスプロセッサ、又は本明細書で説明される他のアクセラレータデバイスのうちのいずれかの1つ又は複数の部分を含み得る。ロジック1172、1174の各ユニットは、半導体ダイに実装され、相互接続構造1173を介して基板1180と連結され得る。相互接続構造1173は、ロジック1172、1174と、基板1180との間に電気信号をルーティングするように構成されてよく、限定されることはないが、バンプ又はピラーなどの相互接続を含み得る。いくつかの実施形態において、相互接続構造1173は、例えば、ロジック1172、1174のオペレーションに関連した入力/出力(I/O)信号及び/又は電源信号若しくは接地信号などの電気信号をルーティングするように構成されてよい。いくつかの実施形態において、基板1180はエポキシベースの積層基板である。基板1180は、他の実施形態において、他の好適な種類の基板を含んでよい。パッケージアセンブリ1170は、パッケージ相互接続1183を介して、他の電気デバイスに接続され得る。パッケージ相互接続1183は、マザーボード、他のチップセット、又はマルチチップモジュールなどの他の電気デバイスに電気信号をルーティングするために、基板1180の表面に連結されてよい。
【0197】
いくつかの実施形態において、ロジック1172、1174のユニットは、ロジック1172と1174との間に電気信号をルーティングするように構成されたブリッジ1182と電気的に連結される。ブリッジ1182は、電気信号の経路を提供する高密度相互接続構造であってよい。ブリッジ1182は、ガラス又は好適な半導体材料から構成されるブリッジ基板を含んでよい。ロジック1172と1174との間にチップ間接続を提供するために、電気的なルーティング機構が、ブリッジ基板に形成され得る。
【0198】
ロジック1172、1174の2つのユニットとブリッジ1182とが示されているが、本明細書で説明される実施形態が、1つ又は複数のダイにもっと多い又は少ない論理ユニットを含んでもよい。ロジックが単一のダイに含まれる場合、ブリッジ1182は除外されてよいので、1つ又は複数のダイは、0又は複数のブリッジで接続されてよい。あるいは、複数のダイ又は複数のロジックユニットが、1つ又は複数のブリッジで接続され得る。さらに、複数の論理ユニット、ダイ、及びブリッジが、3次元構成を含む他の可能な構成で一緒に接続され得る。
【0199】
図11Cは、基板1180(例えば、ベースダイ)に接続されたハードウェアロジックチップレットの複数のユニットを含むパッケージアセンブリ1190を示す。本明細書で説明されるグラフィックス処理ユニット、並列プロセッサ、及び/又はコンピュートアクセラレータが、別個に製造される多様なシリコンチップレットから構成され得る。この文脈において、チップレットとは、少なくとも部分的にパッケージ化された集積回路であり、この集積回路には、他のチップレットと共に組み立てられてより大きいパッケージになり得る別個のロジックのユニットが含まれる。異なるIPコアロジックを有する多様なチップレットの設定が、単一のデバイスに組み立てられ得る。さらに、これらのチップレットは、アクティブインターポーザ技術を用いて、ベースダイ又はベースチップレットに統合され得る。本明細書で説明されるコンセプトによって、GPU内の異なる形態のIP同士の間で相互接続及び通信が可能になる。IPコアは、異なるプロセス技術を用いて製造され、製造時に構成され得る。これによって、複数のIPを、特にいくつかの種類のIPを有する大きなSoCに同じ製造プロセスで集中させることによる複雑性が回避される。複数のプロセス技術の使用を可能にすることで、市場投入までの時間が改善され、複数の製品SKUを形成するのに費用対効果の高いやり方が提供される。さらに、IPが分かれている方が、独立してパワーゲーティングするのに適しており、所与のワークロードに使用されていないコンポーネントが電源をオフにされて、全体の電力消費を低減することができる。
【0200】
ハードウェアロジックチップレットは、特別な目的のハードウェアロジックチップレット1172、ロジック又はI/Oチップレット1174、及び/又はメモリチップレット1175を含み得る。ハードウェアロジックチップレット1172、ロジック又はI/Oチップレット1174は、構成可能ロジックハードウェア又は固定機能ロジックハードウェアに少なくとも部分的に実装されてよく、本明細書で説明されるプロセッサコア、グラフィックスプロセッサ、並列プロセッサ、又は他のアクセラレータデバイスのうちのいずれかの1つ又は複数の部分を含み得る。メモリチップレット1175は、DRAM(例えば、GDDR、HBM)メモリ又はキャッシュ(SRAM)メモリであってよい。
【0201】
各チップレットは、別個の半導体ダイとして製造され、相互接続構造1173を介して基板1180と連結され得る。相互接続構造1173は、様々なチップレットと基板1180内のロジックとの間に電気信号をルーティングするように構成されてよい。相互接続構造1173は、限定されることはないが、バンプ又はピラーなどの相互接続を含み得る。いくつかの実施形態において、相互接続構造1173は、例えば、ロジックチップレット、I/Oチップレット、及びメモリチップレットのオペレーションに関連した入力/出力(I/O)信号及び/又は電源信号若しくは接地信号などの電気信号をルーティングするように構成されてよい。
【0202】
いくつかの実施形態において、基板1180はエポキシベースの積層基板である。基板1180は、他の実施形態において、他の好適な種類の基板を含んでよい。パッケージアセンブリ1190は、パッケージ相互接続1183を介して、他の電気デバイスに接続され得る。パッケージ相互接続1183は、マザーボード、他のチップセット、又はマルチチップモジュールなどの他の電気デバイスに電気信号をルーティングするために、基板1180の表面に連結されてよい。
【0203】
いくつかの実施形態において、ロジック又はI/Oチップレット1174及びメモリチップレット1175は、ロジック又はI/Oチップレット1174とメモリチップレット1175との間に電気信号をルーティングするように構成されたブリッジ1187を介して電気的に連結され得る。ブリッジ1187は、電気信号の経路を提供する高密度相互接続構造であってよい。ブリッジ1187は、ガラス又は好適な半導体材料から構成されるブリッジ基板を含んでよい。ロジック又はI/Oチップレット1174とメモリチップレット1175との間にチップ間接続を提供するために、電気的なルーティング機構が、ブリッジ基板に形成され得る。ブリッジ1187は、シリコンブリッジ又は相互接続ブリッジとも呼ばれることがある。例えば、ブリッジ1187は、いくつかの実施形態において、埋め込み型マルチダイ相互接続ブリッジ(EMIB)である。いくつかの実施形態において、ブリッジ1187は、単に、あるチップレットから別のチップレットへの直接的接続であってよい。
【0204】
基板1180は、I/O1191、キャッシュメモリ1192、及び他のハードウェアロジック1193用のハードウェアコンポーネントを含み得る。様々なロジックチップレットと基板1180内のロジック1191、1193との間の通信を可能にするために、ファブリック1185が基板1180に埋め込まれ得る。1つの実施形態において、I/O1191、ファブリック1185、キャッシュ、ブリッジ、及び他のハードウェアロジック1193は、基板1180の上に層状に重ねられたベースダイに統合され得る。
【0205】
様々な実施形態において、パッケージアセンブリ1190は、ファブリック1185又は1つ又は複数のブリッジ1187で相互接続された、より少ない又はより多い数のコンポーネント及びチップレットを含み得る。パッケージアセンブリ1190内のチップレットは、3D配置又は2.5D配置で配置されてよい。一般的には、ブリッジ構造1187は、例えば、ロジック又はI/Oチップレットとメモリチップレットとの間のポイントツーポイント相互接続を容易にするのに用いられてよい。ファブリック1185は、様々なロジック及び/又はI/Oチップレット(例えば、チップレット1172、1174、1191、1193)を他のロジック及び/又はI/Oチップレットと相互接続するのに用いられ得る。1つの実施形態において、基板内のキャッシュメモリ1192は、パッケージアセンブリ1190のグローバルキャッシュ、つまり、分散型グローバルキャッシュの一部、又はファブリック1185の専用キャッシュとしての機能を果たし得る。
【0206】
図11Dは、一実施形態による、互換性のあるチップレット1195を含むパッケージアセンブリ1194を示す。互換性のあるチップレット1195は、1つ又は複数のベースチップレット1196、1198の標準化スロットとして組み立てられ得る。ベースチップレット1196、1198は、ブリッジ相互接続1197を介して連結され得る。ブリッジ相互接続1197は、本明細書で説明される他のブリッジ相互接続と同様であってよく、例えば、EMIBであってよい。メモリチップレットは、ブリッジ相互接続を介して、ロジックチップレット又はI/Oチップレットにも接続され得る。I/Oチップレット及びロジックチップレットは、相互接続ファブリックを介して通信できる。ベースチップレットはそれぞれ、ロジック又はI/O又はメモリキャッシュのうちの1つの標準化フォーマットで、1つ又は複数のスロットをサポートできる。
【0207】
1つの実施形態において、SRAM及び電力供給回路が、ベースチップレット1196、1198のうちの1つ又は複数として製造され得る。これらの回路は、ベースチップレットの上に積層された互換性のあるチップレット1195に対して異なるプロセス技術を用いて製造され得る。例えば、ベースチップレット1196、1198は、大規模なプロセス技術を用いて製造され得るが、互換性のあるチップレットは、小規模なプロセス技術を用いて製造され得る。互換性のあるチップレット1195のうちの1つ又は複数は、メモリ(例えば、DRAMチップレット)であってよい。異なるメモリ密度が、能力、及び/又はパッケージアセンブリ1194を用いる製品を対象とした性能に基づいて、パッケージアセンブリ1194用に選択され得る。さらに、異なる数の種類の機能ユニットを有するロジックチップレットが、当該製品を対象とした能力及び/又は性能に基づいて組み立て時に選択され得る。さらに、異なる種類のIPロジックコアを含むチップレットが、互換性のあるチップレットスロットに挿入され得るので、異なる技術IPブロックを併用し適合させ得るハイブリッドプロセッサ設計が可能になり得る。
[例示的なシステムオンチップ集積回路]
【0208】
図12~
図14は、本明細書で説明される様々な実施形態による、1つ又は複数のIPコアを用いて製造され得る例示的な集積回路及び関連グラフィックスプロセッサを示す。示されているものに加えて、他のロジック及び回路が含まれてよく、例えば、追加のグラフィックスプロセッサ/コア、ペリフェラルインタフェースコントローラ、又は汎用プロセッサコアが含まれる。
【0209】
図12は、一実施形態による、1つ又は複数のIPコアを用いて製造され得る例示的なシステムオンチップ集積回路1200を示すブロック図である。例示的な集積回路1200は、1つ又は複数のアプリケーションプロセッサ1205(例えば、CPU)、少なくとも1つのグラフィックスプロセッサ1210を含み、さらに、イメージプロセッサ1215及び/又はビデオプロセッサ1220を含んでよく、それらのうちのいずれかは、同じ設計施設又は複数の異なる設計施設のモジュール式IPコアであってよい。集積回路1200は、USBコントローラ1225、UARTコントローラ1230、SPI/SDIOコントローラ1235、及びI
2S/I
2Cコントローラ1240を含むペリフェラルロジック又はバスロジックを含む。さらに、集積回路は、高精細度マルチメディアインタフェース(HDMI(登録商標))コントローラ1250及びモバイル業界向けプロセッサインタフェース(MIPI)ディスプレイインタフェース1255のうちの1つ又は複数に連結されたディスプレイデバイス1245を含み得る。記憶装置が、フラッシュメモリ及びフラッシュメモリコントローラを含むフラッシュメモリサブシステム1260によって提供されてよい。メモリインタフェースが、SDRAMメモリデバイス又はSRAMメモリデバイスにアクセスするためのメモリコントローラ1265を介して提供されてよい。いくつかの集積回路がさらに、埋め込み型セキュリティエンジン1270を含む。
【0210】
図13~
図14は、本明細書で説明される実施形態による、SoC内で用いる例示的なグラフィックスプロセッサを示すブロック図である。
図13は、一実施形態による、1つ又は複数のIPコアを用いて製造され得るシステムオンチップ集積回路の例示的なグラフィックスプロセッサ1310を示す。
図14は、一実施形態による、1つ又は複数のIPコアを用いて製造され得るシステムオンチップ集積回路の追加の例示的なグラフィックスプロセッサ1340を示す。
図13のグラフィックスプロセッサ1310は、低電力グラフィックスプロセッサコアの一例である。
図14のグラフィックスプロセッサ1340は、高性能グラフィックスプロセッサコアの一例である。グラフィックスプロセッサ1310、1340のそれぞれは、
図12のグラフィックスプロセッサ1210の変形になり得る。
【0211】
図13に示すように、グラフィックスプロセッサ1310は、頂点プロセッサ1305と、1つ又は複数のフラグメントプロセッサ1315A~1315N(例えば、1315A、1315B、1315C、1315D、…、1315N-1、及び1315N)とを含む。グラフィックスプロセッサ1310は、別個のロジックを介して異なるシェーダプログラムを実行できるので、頂点プロセッサ1305は、頂点シェーダプログラムのオペレーションを実行するように最適化され、1つ又は複数のフラグメントプロセッサ1315A~1315Nは、フラグメントシェーダプログラム又はピクセルシェーダプログラム用のフラグメント(例えば、ピクセル)シェーディングオペレーションを実行する。頂点プロセッサ1305は、3Dグラフィックスパイプラインの頂点処理ステージを実行し、プリミティブ及び頂点データを生成する。フラグメントプロセッサ1315A~1315Nは、頂点プロセッサ1305により生成されるプリミティブ及び頂点データを用いて、ディスプレイデバイスに表示されるフレームバッファを生成する。1つの実施形態において、フラグメントプロセッサ1315A~1315Nは、OpenGLのAPIに提供されるフラグメントシェーダプログラムを実行するように最適化され、フラグメントシェーダプログラムは、Direct3DのAPIに提供されるピクセルシェーダプログラムと同様のオペレーションを実行するのに用いられてよい。
【0212】
グラフィックスプロセッサ1310はさらに、1つ又は複数のメモリ管理ユニット(MMU)1320A~1320Bと、キャッシュ1325A~1325Bと、回路相互接続1330A~1330Bとを含む。1つ又は複数のMMU1320A~1320Bは、頂点プロセッサ1305及び/又はフラグメントプロセッサ1315A~1315Nを含むグラフィックスプロセッサ1310用の仮想アドレス対物理アドレスのマッピングを提供し、グラフィックスプロセッサ1310は、1つ又は複数のキャッシュ1325A~1325Bに格納される頂点データ又は画像/テクスチャデータのほかに、メモリに格納される頂点データ又は画像/テクスチャデータを参照してよい。1つの実施形態において、1つ又は複数のMMU1320A~1320Bは、
図12の1つ又は複数のアプリケーションプロセッサ1205、イメージプロセッサ1215、及び/又はビデオプロセッサ1220に関連した1つ又は複数のMMUを含む、システム内の他のMMUと同期し得るので、各プロセッサ1205~1220は、共有又は統合された仮想メモリシステムに関与することができる。実施形態に従って、1つ又は複数の回路相互接続1330A~1330Bは、グラフィックスプロセッサ1310が、SoCの内蔵バスを介して又は直接的接続を介して、SoC内の他のIPコアとインタフェースで接続することを可能にする。
【0213】
図14に示すように、グラフィックスプロセッサ1340は、
図13のグラフィックスプロセッサ1310の1つ又は複数のMMU1320A~1320B、キャッシュ1325A~1325B、及び回路相互接続1330A~1330Bを含む。グラフィックスプロセッサ1340は、1つ又は複数のシェーダコア1355A~1355N(例えば、1355A、1355B、1355C、1355D、1355E、1355F、…、1355N-1、及び1355N)を含み、これらのシェーダコアは、シングルコア又は種類又はコアが、頂点シェーダ、フラグメントシェーダ、及び/又はコンピュートシェーダを実装するシェーダプログラムコードを含むあらゆる種類のプログラム可能型シェーダコードを実行できる統合シェーダコアアーキテクチャを提供する。存在する正確な数のシェーダコアは、実施形態及び実施態様によって変化し得る。さらに、グラフィックスプロセッサ1340は、コア間タスクマネージャ1345を含み、これは、1つ又は複数のシェーダコア1355A~1355Nと、タイルベースのレンダリングのタイリングオペレーションを加速するタイリングユニット1358とに実行スレッドをディスパッチするスレッドディスパッチャとしての機能を果たし、タイリングオペレーションでは、例えば、シーン内で局所空間的コヒーレンスを活用する又は内蔵キャッシュの使用を最適化するために、シーンのレンダリングオペレーションが画像空間において細分化される。
[機械学習によるレイトレーシング]
【0214】
上記で言及したように、レイトレーシングは、物理ベースのレンダリングを通じて光輸送がシミュレーションされるグラフィックス処理技術である。レイトレーシングにおける重要な演算のうちの1つは、バウンディングボリューム階層(BVH)におけるノードのトラバーサル及びインターセクションテストが必要な可視性クエリを処理することである。
【0215】
レイ及びパストレーシングベースの技術は、各ピクセルを通じてレイ及びパスをトレーシングすることにより、及び、ランダムサンプリングを用いて、高度なエフェクト、例えば、陰影、光沢度、間接照明などを計算することにより、画像を計算する。わずかなサンプルのみを用いると、高速になるがノイズのある画像を生成することになり、一方、多くのサンプルを用いると、高品質の画像が生成されるが、コストがかかりすぎる。
【0216】
機械学習は、特定のタスクの性能を漸進的に向上させることが可能な、又は漸進的により正確な予測又は判断を行うことが可能な任意の回路、プログラムコード、又はその組み合わせを含む。一部の機械学習エンジンは、タスクを実行する又は予測/判断を行うように明示的にプログラミングされることなく、これらのタスクを実行する、又はこれらの予測/判断を行うことができる。多様な機械学習技術が存在し、(限定されることはないが)教師あり、半教師あり学習、教師なし学習、強化学習が含まれる。
【0217】
過去数年において、リアルタイムの利用のためのレイ/パストレーシングに対する飛躍的な解決方法は、「ノイズ除去」(画像処理技術を用いて、ノイズのある低いサンプルカウントの入力から高品質、フィルタ/ノイズ除去画像を生成する処理)の形式で出現した。最も有効なノイズ除去技術は、より多くのサンプルにより計算された場合に、ノイズのある画像がどのように見えそうかを機械学習エンジンが学習する機械学習技術に依存する。1つの特定の実施態様では、機械学習は畳み込みニューラルネットワーク(CNN)により実行されるが、本発明の基本的原理はCNN実施態様に限定されることはない。そのような実施態様では、訓練用データは低いサンプルカウントの入力及び正解により生成される。CNNは、該当するピクセルの周りのノイズのあるピクセル入力の近隣から収束したピクセルを予測するように訓練される。
【0218】
完璧ではないが、このAIベースのノイズ除去技術は、驚くべき効果を証明している。しかしながら、ネットワークが間違った結果を予測するかもしれないので、好適な訓練データが要求される点に注意が必要である。例えば、アニメ映画スタジオが陸上のシーンに関して、過去の映画のノイズ除去CNNを訓練しており、その後水上に関する新しい映画セットからフレームをノイズ除去するために、上記の訓練されたCNNを使用することを試みた場合、ノイズ除去オペレーションは準最適に(sub-optimally)実行されることになる。
【0219】
この問題に対処するために、レンダリングしつつ学習データが動的に収集可能で、現在実行中のデータに基づいて、CNNなどの機械学習エンジンが継続的に訓練され得るので、目下のタスクに対して機械学習エンジンが継続的に改善される。したがって、ランタイムの前に訓練段階をさらに実行してよいが、ランタイム中に必要に応じて機械学習の重みを調整し続ける。その結果、フレーム毎又はN個のフレーム毎に学習データの生成を画像のサブ領域に制限することにより、訓練に必要な参照データを計算するのにかかる高いコストを回避する。特に、フレームのノイズのある入力は、現在のネットワークで完全なフレームをノイズ除去するために生成される。さらに、後述されるように、参照ピクセルの小さな領域が継続的な訓練のために生成されて用いられる。
【0220】
本明細書ではCNN実施態様が説明されるが、任意の形態の機械学習エンジンが使用されてよく、限定されることはないが、教師あり学習(例えば、入力と、所望の出力の両方を含むデータのセットの数学的モデルを構築)、教師なし学習(例えば、特定の種類の構造について入力データを評価する)、及び/又は教師あり学習と教師なし学習との組み合わせを実行するシステムが含まれる。
【0221】
既存のノイズ除去の実施態様は、訓練段階及びランタイム段階において動作する。訓練段階中に、ネットワークトポロジは、ピクセルカラー、デプス、標準、標準偏差、プリミティブID及びアルベドなどの様々なピクセル毎のデータチャネルを用いてN×Nピクセルの領域をどれが受信するかが定義され、最終的なピクセルカラーを生成する。「代表的な」訓練データのセットが、1フレーム相当の低いサンプルカウントの入力を用いて、かつ、非常に高いサンプルカウントで計算される「所望の」ピクセルカラーを参照して生成される。これらの入力に対してネットワークが訓練されることで、ネットワークの「理想的な」重みのセットを生成する。これらの実施態様において、参照データは、所望の結果に対するネットワークの出力に最も近く一致するネットワークの重みを訓練するために用いられる。
【0222】
ランタイム時に、所与の予め計算された理想的なネットワークの重みがロードされ、ネットワークが初期化される。フレームごとに、低いサンプルカウントの画像のノイズ除去入力(つまり、訓練のために用いられものと同じ)が生成される。ピクセルごとに、所与の近隣のピクセルの入力が「ノイズ除去」ピクセルカラーを予測するためにネットワークを通じて実行されることで、ノイズ除去されたフレームを生成する。
【0223】
図15は、初期訓練の実施態様を示す。機械学習エンジン1500(例えば、CNN)は、ピクセルカラー、デプス、標準、標準偏差、プリミティブID及びアルベドなどの様々なピクセル毎のデータチャネルを用いて、N×Nピクセルの領域を高いサンプルカウントの画像データ1702として受信し、最終的なピクセルカラーを生成する。代表的な訓練データは、1フレーム相当の低いサンプルカウントの入力1501を用いて生成される。これらの入力に対してネットワークが訓練され、機械学習エンジン1500は、ランタイム時に低いサンプルカウントの画像をノイズ除去するためにその後に用いる「理想的な」重み1505のセットを生成する。
【0224】
上記の技術を向上させるために、ノイズ除去段階を増強して、フレーム毎又はフレームのサブセット毎(例えば、N個のフレーム毎、N=2、3、4、10、25など)に新しい訓練データを生成する。特に、
図16に示されるように、本実施形態では、高いサンプルカウントで別個の高いサンプルカウントのバッファ1604へとレンダリングされる「新しい参照領域」1602とここでは称される各フレーム内の1つ又は複数の領域を選択する。低いサンプルカウントのバッファ1603は、(新しい参照領域1602に対応する低サンプル領域1604を含む)低いサンプルカウントの入力フレーム1601を格納する。
【0225】
新しい参照領域1602の位置はランダムに選択され得る。あるいは、新しい参照領域1602の位置は、新しいフレームごとに予め指定された方式で調整されてよい(例えば、フレーム間の領域の予め定義された動きを用いて、フレームの中央における指定領域に限定されるなど)。
【0226】
新しい参照領域がどのように選択されるかにかかわらず、それは、ノイズ除去に用いられる訓練された重み1605を継続的に改善及び更新するために機械学習エンジン1600により用いられる。特に、各新しい参照領域1602からの参照ピクセルカラー及び対応する低いサンプルカウントの領域1607からのノイズのある参照ピクセルの入力がレンダリングされる。次に、高いサンプルカウントの参照領域1602及び対応する低いサンプルカウントの領域1607を用いて、補足的な訓練が機械学習エンジン1600上で実行される。初期訓練とは対照的に、この訓練は、それぞれの新しい参照領域1602に対してランタイム中継続的に実行され、これにより、機械学習エンジン1600が正確に訓練されていることを保証する。例えば、ピクセル毎のデータチャネル(例えば、ピクセルカラー、デプス、標準、標準偏差など)が評価されてよく、機械学習エンジン1600は、それを用いて、訓練された重み1605に対する調整を行う。訓練の場合(
図15)にあるように、機械学習エンジン1600は、低いサンプルカウントの入力フレーム1601からノイズを除去するために理想的な重み1605のセットに向けて訓練して、ノイズ除去されたフレーム1620を生成する。しかしながら、本実施形態では、訓練された重み1605は、新しい種類の低いサンプルカウントの入力フレーム1601についての新しい画像特性に基づいて継続的に更新される。
【0227】
機械学習エンジン1600により実行される再訓練オペレーションは、グラフィックスプロセッサユニット(GPU)又はホストプロセッサ上のバックグラウンドプロセスにおいて同時に実行され得る。ドライバコンポーネント及び/又はGPUハードウェアコンポーネントとして実装され得るレンダリングループは、キューに置く新しい訓練データ(例えば、新しい参照領域1602の形式で)を継続的に生成し得る。GPU又はホストプロセッサ上で実行されるバックグラウンド訓練プロセスは、このキューから新しい訓練データを継続的に読み出して、機械学習エンジン1600を再訓練して、適切な間隔で新しい重み1605を用いてそれを更新し得る。
【0228】
図17は、バックグラウンド訓練プロセス1700がホストCPU1710により実施される1つのそのような実施態様の例を示す。特に、本実施形態において、バックグラウンド訓練プロセス1700は、高いサンプルカウントの新しい参照領域1602及び対応する低サンプル領域1604を用いて、訓練された重み1605を継続的に更新することで、機械学習エンジン1600を更新する。
【0229】
図18Aに示されるように、マルチプレイヤーオンラインゲームなどにおける非限定的な例では、異なるホストマシン1820~1822は、バックグラウンド訓練プロセス1700A~Cがサーバ1800(例えば、ゲームサーバなど)に伝送する参照領域を個々に生成する。次に、サーバ1800は、ホスト1821~1822のそれぞれから受信した新しい参照領域を用いて機械学習エンジン1810に対する訓練を実行し、前述したように重み1805を更新する。重み1605A~Cを格納するホストマシン1820にこれらの重み1805を伝送することで、個々の機械学習エンジン(不図示)をそれぞれ更新する。サーバ1800は、短期間に多数の参照領域が提供され得るので、ユーザにより実行される任意の所与のアプリケーション(例えば、オンラインゲーム)に関する重みを効果的かつ正確に更新できる。
【0230】
図18Bに示されるように、異なるホストマシンは、(例えば、前述した訓練/参照領域1602に基づいて)新たに訓練された重みを生成し、新たに訓練された重みをサーバ1800(例えば、ゲームサーバなど)と共有してよい、又は、あるいは、ピアツーピア共有プロトコルを使用してよい。サーバ上の機械学習管理コンポーネント1810は、ホストマシンのそれぞれから受信した新しい重みを用いて組み合わせられた重み1805のセットを生成する。組み合わせられた重み1805は、例えば、本明細書において説明されるように、新しい重みから生成される平均であり、継続的に更新され得る。一度生成されると、次に、本明細書において説明されたような組み合わせられた重みを使用してノイズ除去オペレーションを実行し得るホストマシン1820~1821のそれぞれに組み合わせられた重み1605A~Cのコピーが伝送されて格納され得る。
【0231】
この準閉ループ更新メカニズムはまた、ハードウェア製造業者により用いられ得る。例えば、参照ネットワークは、ハードウェア製造業者が流通させるドライバの一部として含まれてよい。ドライバは、本明細書において説明される技術を用いて新しい訓練データを生成し、これらをハードウェア製造業者に戻して継続的に送信するので、ハードウェア製造業者は、この情報を用いて次のドライバの更新のためにその機械学習の実施態様を改善し続ける。
【0232】
例示的な一実施態様において(例えば、レンダリングファーム上のバッチ映画レンダリングにおいて)、レンダラは、経時的に複数のレンダリングノードからこのデータを集約する(そのスタジオのレンダリングファーム内の)専用のサーバ又はデータベースに新たに生成された訓練領域を伝送する。別個のマシン上の別個の処理は、スタジオ専用のノイズ除去ネットワークを継続的に改善し、新しいレンダリングジョブは、最新の訓練ネットワークを常に使用する。
【0233】
機械学習方法が
図19に示される。本方法は、本明細書で説明されるレイトレーシングアーキテクチャに実装されてよいが、いかなる特定のシステム又はグラフィックス処理アーキテクチャにも限定されることはない。
【0234】
1901で、初期訓練段階の一部として、低いサンプルカウントの画像データ及び高いサンプルカウントの画像データが複数の画像フレームに対して生成される。1902で、機械学習ノイズ除去エンジンは、高い/低いサンプルカウントの画像データを用いて訓練される。例えば、ピクセルの特徴に関連付けられる畳み込みニューラルネットワークの重みのセットは、訓練に従って更新され得る。しかしながら、任意の機械学習アーキテクチャが用いられてよい。
【0235】
1903で、ランタイム時に、高いサンプルカウントを有する少なくとも1つの参照領域と共に低いサンプルカウントの画像フレームが生成される。1904において、機械学習エンジンの訓練を継続的に改善するために、高いサンプルカウントの参照領域が機械学習エンジン及び/又は別個の訓練ロジック(例えば、バックグラウンド訓練モジュール1700)により用いられる。例えば、どのようにノイズ除去を最も効果的に実行するかを機械学習エンジン1904に教え続けるために、高いサンプルカウントの参照領域が低いサンプルカウントの画像の対応する部分と組み合わせて用いられ得る。CNN実施態様において、例えば、これは、CNNに関連付けられる重みを更新することを含み得る。
【0236】
上述した複数の様々な実施形態は、機械学習エンジンへのフィードバックループが構成される方式、訓練データを生成するエンティティ、訓練データが訓練エンジンにフィードバックされる方式、及び、どのように改善されたネットワークがレンダリングエンジンに提供されるか、などで実施されてよい。さらに、上述した例が単一の参照領域を用いて継続的な訓練を実行するが、任意の数の参照領域が用いられてよい。さらに、上述のように、参照領域は、異なるサイズであってよく、異なる数の画像フレームに対して用いられてよく、異なる技術(例えば、ランダム、予め定められたパターンに従うなど)を用いて画像フレーム内の異なる位置に配置されてよい。
【0237】
さらに、畳み込みニューラルネットワーク(CNN)が、機械学習エンジン1600の一例として説明されているが、本発明の基本的原理は、新しい訓練データを用いて、その結果を継続的に改善することが可能な機械学習エンジンの任意の形式を用いて実装され得る。例示の目的ではあるが、限定的ではなく、他の機械学習の実施態様は、数例を挙げると、データ処理のグループ方法(Group Method of Data Handling、GMDH)、長・短期メモリ、ディープリザーバ計算、ディープビリーフネットワーク、テンソルディープスタッキングネットワーク及び深層予測符号化ネットワーク(deep predictive codingnetworks)を含む。
[効率的な分散型ノイズ除去のための装置及び方法]
【0238】
上述したように、ノイズ除去は、滑らかでノイズのない画像でリアルタイムレイトレーシングするための重要な機能になってきている。レンダリングは、複数のデバイス上の分散型システムわたって行われ得るが、現状、既存のノイズ除去のフレームワークは全て、単一のマシン上の単一のインスタンスを処理する。複数のデバイスにわたってレンダリングが行われている場合、それらは、画像のノイズ除去される部分を計算するためにアクセス可能なピクセルを全てレンダリングすることができない可能性がある。
【0239】
人工知能(AI)及び非AIベースのノイズ除去技術の両方を使って働く分散型ノイズ除去アルゴリズムが提示される。画像の領域は、分散型レンダリングオペレーションからノードにわたって既に分散されている、又は、単一のフレームバッファから分裂及び分散される、のいずれかである。必要な場合に、十分なノイズ除去を計算するために必要とされる近隣領域のゴースト領域が近隣ノードから収集され、最終結果のタイルが最終的な画像に合成される。分散型処理
【0240】
図20は、レンダリングを実行する複数のノード2021~2023を示す。分かりやすくするために3つのノードのみが図示されているが、本発明の基本的原理は、任意の特定のノード数に限定されることはない。つまり、単一のノードが本発明の特定の実施形態を実施するために用いられてもよい。
【0241】
ノード2021~2023がそれぞれ、画像の一部をレンダリングすることで、この例における領域2011~2013を結果的にもたらす。矩形の領域2011~2013が
図20に示されているが、任意の形状の領域が用いられてよく、任意のデバイスが任意の数の領域を処理できる。十分に滑らかなノイズ除去オペレーションを実行するためにノードにより必要とされる領域は、ゴースト領域2011~2013と称される。言い換えれば、ゴースト領域2001~2003は、特定の品質レベルでノイズ除去を実行するのに必要とされるデータ全体を表す。品質レベルを下げることで、ゴースト領域のサイズ、ひいては、必要なデータ量が低減し、品質レベルを上げることで、要求されるゴースト領域及び必要な対応するデータが増加する。
【0242】
ノード2021などのノードが特定の品質レベルでその領域2011をノイズ除去するのに必要とされるゴースト領域2001の一部のローカルコピーを行う場合、ノードは、図示されるようにゴースト領域2001の一部を所有するノード2022などの1つ又は複数の「隣接」ノードから必要なデータを取り込む。同様に、ノード2022が特定の品質レベルでその領域2012をノイズ除去するのに必要とされるゴースト領域2002の一部のローカルコピーを行う場合、ノード2022は、ノード2021から必要なゴースト領域データ2032を取り込む。この取り込みは、バス、相互接続、高速メモリファブリック、ネットワーク(例えば、高速イーサネット(登録商標))を介して実行されてよい、又は(例えば、最も高い解像度又は時間変化のいずれかにおいて大きな画像をレンダリングするために用いられる)複数のコア間のレンダリング作業を分散させることを可能にするマルチコアチップ内のオンチップ相互接続であってもよい。各ノード2021~2023は、個々の実行ユニット、又は、グラフィックスプロセッサ内の実行ユニットの特定のセットを有し得る。
【0243】
送信されるデータの具体的な量は、用いられるノイズ除去技術に依存する。さらに、ゴースト領域からのデータは、それぞれの各領域のノイズ除去を改善するために必要とされる任意のデータを含んでよい。例えば、ゴースト領域データは、画像の色/波長、明度/アルファデータ及び/又は標準を含み得る。しかしながら、本発明の基本的原理は、いかなる特定のセットのゴースト領域データにも限定されることはない。
[さらなる詳細]
【0244】
より低速なネットワーク又は相互接続のために、このデータの圧縮は、既存の汎用可逆又は不可逆圧縮を用いて利用され得る。例では、zlib、gzip及びLempel-Ziv-Markovチェーンアルゴリズム(LZMA)を含むが、これらに限定されることはない。さらなるコンテンツ固有の圧縮は、フレーム間のレイヒット情報における差分が非常にまばらになり得るということに注目することにより用いられてよく、ノードが前のフレームから収集した差分を既に有している場合、その差分に寄与するサンプルのみが送信される必要がある。これらは、これらのサンプルiを収集するノードに選択的にプッシュされ得る、又は、ノードiは、他のノードからサンプルを要求できる。可逆圧縮は、特定の種類のデータ及びプログラムコードに用いられ、不可逆データは、他の種類のデータに用いられる。
【0245】
図21は、ノード2021~2022の間の相互作用についてのさらなる詳細を示す。各ノード2021~2022は、それぞれの画像領域2011~2012及びゴースト領域2001~2002をレンダリングするためのレイトレーシングレンダリング回路2081~2082を含む。ノイズ除去器2100~2111は、領域2011~2012のそれぞれに対するノイズ除去オペレーションを実行し、各ノード2021~2022は、レンダリング及びノイズ除去を担う。ノイズ除去器2021~2022は、例えば、ノイズ除去された領域2121~2122をそれぞれ生成するために、回路、ソフトウェア又はこれらの任意の組み合わせを有してよい。すでに述べたように、ノイズ除去された領域を生成する場合、ノイズ除去器2021~2022は、異なるノードにより所有されるゴースト領域内のデータに依存する必要があり得る(例えば、ノイズ除去器2100は、ノード2022により所有されるゴースト領域2002からのデータを必要とし得る)。
【0246】
したがって、ノイズ除去器2100~2111は、領域2011~2012及びゴースト領域2001~2002からのデータ(これらのデータの少なくとも一部は、別のノードから受信されてもよい)をそれぞれ用いてノイズ除去された領域2121~2122を生成してよい。領域データマネージャ2101~2102は、本明細書において説明されるように、ゴースト領域2001~2002からのデータ転送を管理し得る。圧縮器/伸張器ユニット2131~2132は、ノード2021~2022間で交換されるゴースト領域データの圧縮及び伸張をそれぞれ実行してよい。
【0247】
例えば、ノード2021の領域データマネージャ2101は、ノード2022からの要求の際に、ゴースト領域2001から圧縮器/伸張器2131にデータを送信してよく、ノード2022に伝送される圧縮したデータ2106を生成するためにデータを圧縮することで、相互接続、ネットワーク、バス又は他のデータ通信リンク上の帯域幅を低減する。次に、ノード2022の圧縮器/伸張器2132は、圧縮したデータ2106を伸張し、ノイズ除去器2111は、伸張したゴーストデータを用いて領域2012からのデータのみで可能なものより高い品質でノイズ除去された領域2012を生成する。ノイズ除去された領域2122を生成する場合にノイズ除去器2111を利用可能にするために、領域データマネージャ2102は、伸張したゴースト領域2001からのデータをキャッシュ、メモリ、レジスタファイル又は他のストレージに格納してよい。より高い品質でノイズ除去された領域2121を生成するために領域2011からのデータとの組み合わせにおいてデータを用いるノード2021のノイズ除去器2100にゴースト領域2002からデータを提供するために、同様のオペレーションのセットが実行されてよい。
[GRABデータ又はレンダリング]
【0248】
ノード2021~2022などのデバイス間の接続が遅い(つまり、閾値遅延及び/又は閾値帯域幅よりも低い)場合、他のデバイスから結果を要求するのではなく、ゴースト領域をローカルにレンダリングするほうが速いことがある。これは、ゴースト領域サイズに関するネットワークトランザクション速度及び線形外挿レンダリング時間を追跡することにより、ランタイム時に決定され得る。ゴースト領域全体をレンダリングするほうが速いような場合、複数のデバイスは、最後には画像の同じ部分をレンダリングしてよい。ゴースト領域のレンダリングされた部分の解像度は、ベース領域の分散及び決定されたブラーの度合いに基づいて調整されてよい。
[負荷分散]
【0249】
静的及び/又は動的な負荷分散方式は、様々なノード2021~2023間の処理負荷を分散するために用いられ得る。動的な負荷分散について、ノイズ除去フィルタにより決定される分散は、両方ともノイズ除去に多くの時間を必要とし得るが、画像の低分散かつ不鮮明な領域が少ないサンプルしか必要としない場合には、シーンの特定の領域をレンダリングするのに用いられるサンプルの量をドライブしてよい。特定のノードに割り当てられる特定の領域は、前のフレームからのデータに基づいて動的に調整されてよい、又は、全てのデバイスが同じ作業量を有するようにそれらがレンダリングされるように、デバイスにわたって動的に通信される。
【0250】
図22は、各ノード2021~2022のそれぞれで実行しているモニタ2201~2202が性能測定基準データをどのように収集するかを示し、性能測定基準データには、限定されることはないが、ネットワークインタフェース2211~2212を介してデータを伝送するのに費やした時間、(ゴースト領域データの有無に関わらず)領域をノイズ除去したときに費やした時間、及び、各領域/ゴースト領域をレンダリングするのに費やした時間が含まれる。モニタ2201~2202は、これらの性能測定基準をマネージャ又は負荷分散ノード2201に戻して報告し、各ノード2021~2022上の現在のワークロードを識別するためにデータを解析し、様々なノイズ除去された領域2121~2122を処理するのにより効率的なモードを場合によっては決定する。次に、マネージャノード2201は、検出された負荷に従って、新しい領域に対する新しいワークロードをノード2021~2022に分散させる。例えば、マネージャノード2201は、負荷が大きくないこれらのノードに多くの作業を伝送してよい、及び/又は、過負荷であるこれらのノードから作業を再度割り当てよい。さらに、負荷分散ノード2201は、レンダリング及び/又はノイズ除去がノードのそれぞれにより実行される特定の方式(そのいくつかの例は上述されている)で調整するために、再構成コマンドを伝送してよい。
[ゴースト領域の決定]
【0251】
ゴースト領域2001~2002のサイズ及び形は、ノイズ除去器2100~2111により実装されるノイズ除去アルゴリズムに基づいて決定され得る。次に、これらのサイズはそれぞれ、ノイズ除去されたサンプルについての検出された分散に基づいて動的に修正され得る。AIノイズ除去自体のために用いられる学習アルゴリズムは、適切な領域サイズを決定するために用いられてよい、又は、バイラテラルブラーなどのその他の場合には、予め定められたフィルタ幅がゴースト領域2001~2002のサイズを決定する。学習アルゴリズムを用いる例示的実施態様において、機械学習エンジンは、マネージャノード2201上で実行されてよい、及び/又は、機械学習の一部が、個々のノード2021~2023のそれぞれで実行されてよい(例えば、
図18A~
図18B及び上記の関連する文章を参照)。
[最終的な画像の収集]
【0252】
最終的な画像は、ゴースト領域又は法線を必要とすることなくノード2021~2023のそれぞれからレンダリングされてノイズ除去された領域を収集することにより生成され得る。
図22において、例えば、ノイズ除去された領域2121~2122は、最終的なノイズ除去された画像2290を生成する領域を組み合わせるマネージャノード2201の領域プロセッサ2280に伝送され、次に、ディスプレイ2290上に表示される。領域プロセッサ2280は、様々な2D合成技術を用いて領域を組み合わせてよい。別個のコンポーネントとして図示されているが、領域プロセッサ2280及びノイズ除去された画像2290は、ディスプレイ2290に不可欠であってよい。本実施形態において、様々なノード2021~2022は、ダイレクト送信技術を用いて、ノイズ除去された領域2121~2122を伝送してよく、場合によっては領域データの様々な不可逆又は可逆圧縮を用いてよい。
【0253】
AIノイズ除去は、ゲームがクラウドに移っていても、依然としてコストのかかるオペレーションである。したがって、複数のノード2021~2022にわたるノイズ除去の分散処理は、より高いフレームレートを必要とする従来のゲーム又は仮想現実(VR)に対してリアルタイムのフレームレートを実現することが要求されるようになり得る。映画スタジオも、多くの場合、レンダリングをより迅速なノイズ除去に利用され得る大きなレンダリングファームにおいて行っている。
【0254】
分散型のレンダリング及びノイズ除去を実行するための例示的方法が
図23に示されている。本方法は、上述のシステムアーキテクチャの文脈で実装されてよいが、いかなる特定のシステムアーキテクチャにも限定されることはない。
【0255】
2301で、グラフィックス作業は、レイトレーシングオペレーションを実行して画像フレームの領域をレンダリングする複数のノードにディスパッチされる。各ノードは、オペレーションを実行するのに必要とされるデータをメモリ内に既に有していてよい。例えば、複数のノードのうちの2つ又はそれより多くが、共通のメモリを共有してよい、又は、ノードのローカルメモリは、レイトレーシングオペレーションの前から既に格納されているデータを有していてよい。あるいは又はさらに、特定のデータが各ノードに伝送されてよい。
【0256】
2302で、特定のノイズ除去レベル(つまり、性能の許容レベル)に必要な「ゴースト領域」が決定される。ゴースト領域は、特定のノイズ除去レベルを実行するのに必要とされる任意のデータを有し、1つ又は複数の他のノードにより所有されるデータを含む。
【0257】
2303で、ゴースト領域に関連するデータ(又は、これらの一部)がノード間で交換される。2304で、各ノードは、(例えば、交換したデータを用いて)その各領域に対してノイズ除去を実行し、2305において、結果が、最終的なノイズ除去された画像フレームを生成するために組み合わせられる。
【0258】
例えば、
図22に示されるようなマネージャノード又は1次ノードが、ノードに作業をディスパッチし、次に、ノードにより実行される作業を組み合わせて最終的な画像フレームを生成し得る。ノードが、データをやり取りして、最終的な画像フレームをレンダリング及びノイズ除去するピアであるピアベースのアーキテクチャを用いることが可能である。
【0259】
本明細書において説明されるノード(例えば、ノード2021~2023)は、高速ネットワークを介して相互接続されるグラフィックス処理コンピューティングシステムであってよい。あるいは、ノードは、高速メモリファブリックに連結される個々の処理要素であってよい。ノードの全ては、共通の仮想メモリ空間及び/又は共通の物理メモリを共有してよい。あるいは、ノードは、CPUとGPUとの組み合わせであってよい。例えば、上述したマネージャノード2201は、CPU及び/又はCPU上で実行されるソフトウェアであってよく、ノード2021~2022は、GPU及び/又はGPU上で実行されるソフトウェアであってよい。様々な異なる種類のノードが、本発明の基本的原理に依然として準拠しつつ用いられてよい。
[例示的なニューラルネットワークの実施態様]
【0260】
多くの種類のニューラルネットワークがあり、ニューラルネットワークのシンプルな種類はフィードフォワードネットワークである。フィードフォワードネットワークは、ノードが層に配置された非巡回グラフとして実装され得る。通常、フィードフォワードネットワークトポロジには、少なくとも1つの隠れ層で分離された入力層と出力層が含まれる。隠れ層は、入力層が受信した入力を、出力層で出力を生成するのに有用な表現に変換する。ネットワークノードは隣接する層のノードにエッジを介して全結合されているが、各層内のノード間にエッジはない。フィードフォワードネットワークの入力層のノードにおいて受信されるデータは、層を接続するエッジのそれぞれに関連付けられる係数(「重み」)に基づいてそれぞれネットワーク内の各連続層のノードの状態を計算する活性化関数を介して出力層のノードに伝搬(つまり、「フィードフォワード」)される。実行中のアルゴリズムによって表される特定のモデルに応じて、ニューラルネットワークアルゴリズムからの出力は様々な形式を取ることができる。
【0261】
機械学習アルゴリズムが、特定の問題をモデル化するのに使用可能となる前に、アルゴリズムは訓練データセットを使用して訓練される。ニューラルネットワークの訓練は、ネットワークによってモデル化されている問題を表す訓練データのセットを使用してネットワークトポロジを選択する段階と、訓練データセットの全てのインスタンスについてネットワークモデルが最小限の誤差で実行されるまで重みを調整する段階と、を含む。例えば、ニューラルネットワークの教師あり学習訓練プロセス中に、訓練データセット内のインスタンスを表す入力に応答してネットワークによって生成された出力は、そのインスタンスの「正解」と分類された出力と比較され、出力と分類された出力との間の差を表す誤差信号が計算され、接続に関連付けられた重みが調整されて、誤差信号がネットワークの層を介して後方に伝搬されるため、その誤差が最小限に抑えられる。訓練データセットのインスタンスから生成された出力のそれぞれの誤差が最小限に抑えられる場合、ネットワークは「訓練された」とみなされる。
【0262】
機械学習アルゴリズムの精度は、アルゴリズムの訓練に使用されるデータセットの品質に大きく影響され得る。訓練プロセスは計算集約的になる可能性があり、従来の汎用プロセッサでは膨大な時間を必要とし得る。したがって、並列処理ハードウェアを使用して、多くの種類の機械学習アルゴリズムを訓練する。これは、ニューラルネットワークの係数の調整で実行される演算がもともと並列実施態様に有用であるため、ニューラルネットワークの訓練を最適化するのに特に役立つ。具体的には、多くの機械学習アルゴリズム及びソフトウェアアプリケーションが、汎用グラフィックス処理デバイス内の並列処理ハードウェアを利用するように適合されている。
【0263】
図24は、機械学習ソフトウェアスタック2400を一般化した図である。機械学習アプリケーション2402は、訓練データセットを使用してニューラルネットワークを訓練するように、又は訓練されたディープニューラルネットワークを使用してマシンインテリジェンスを実装するように構成されることができる。機械学習アプリケーション2402は、ニューラルネットワークのための訓練及び推論機能、及び/又は展開前にニューラルネットワークを訓練するために使用されることができる専用のソフトウェアを含むことができる。機械学習アプリケーション2402は、限定されることはないが、画像認識、マッピング及び位置特定、自律ナビゲーション、音声合成、医用イメージング、又は言語変換を含む任意の種類のマシンインテリジェンスを実装することができる。
【0264】
機械学習アプリケーション2402のハードウェアアクセラレーションは、機械学習フレームワーク2404を介して可能になり得る。機械学習フレームワーク2404は、本明細書に記載のプロセッサ及びコンポーネントを含む処理システム100などの、本明細書に記載のハードウェア上に実装され得る。本明細書における任意の他の図の要素と同じ又は同様の名称を有する、
図24に記載の要素は、その他の図にあるのと同じ要素を記載し、それと同様の方式で動作又は機能可能であり、同じコンポーネントを含むことが可能であり、本明細書のどこか他の箇所で説明されたものとして他のエンティティにリンク可能であるが、そのように限定されることはない。機械学習フレームワーク2404は、機械学習プリミティブのライブラリを提供することができる。機械学習プリミティブは、機械学習アルゴリズムによって一般的に実行される基本的なオペレーションである。機械学習フレームワーク2404がない場合、機械学習アルゴリズムの開発者は、機械学習アルゴリズムに関連付けられた主な計算ロジックを作成及び最適化し、次に、新しい並列プロセッサが開発されるときに計算ロジックを再最適化するのに必要とされるであろう。代わりに、機械学習アプリケーションは、機械学習フレームワーク2404によって提供されるプリミティブを使用して必要な演算を実行するように構成されることができる。例示的なプリミティブには、テンソル畳み込み、起動関数、及びプーリングが含まれる。これらは、畳み込みニューラルネットワーク(CNN)の訓練中に実行される計算演算である。機械学習フレームワーク2404はまた、例えば、行列及びベクトル演算などの多くの機械学習アルゴリズムによって実行される基本的な線形代数サブプログラムを実装するためのプリミティブを提供することができる。
【0265】
機械学習フレームワーク2404は、機械学習アプリケーション2402から受信した入力データを処理し、計算フレームワーク2406への適切な入力を生成することができる。計算フレームワーク2406は、GPGPUドライバ2408に提供される基礎的な命令を要約して、機械学習フレームワーク2404がGPGPUハードウェア2410のアーキテクチャの詳しい知識を持つことを必要とすることなく、機械学習フレームワーク2404がGPGPUハードウェア2410を介してハードウェアアクセラレーションを活用するのを可能にすることができる。さらに、計算フレームワーク2406は、GPGPUハードウェア2410の様々な種類及び世代にわたる機械学習フレームワーク2404のハードウェアアクセラレーションを可能にすることができる。
【0266】
[GPGPU機械学習アクセラレーション]
【0267】
図25は、処理システム100の変形例であり得る、マルチGPUコンピューティングシステム2500を示す。したがって、本明細書における処理システム100と組み合わせた任意の特徴の開示も、マルチGPUコンピューティングシステム2500との対応する組み合わせを開示するが、そのように限定されることはない。本明細書における任意の他の図の要素と同じ又は同様の名称を有する、
図25に記載の要素は、その他の図にあるのと同じ要素を記載し、それと同様の方式で動作又は機能可能であり、同じコンポーネントを含むことが可能であり、本明細書のどこか他の箇所で説明されたものとして他のエンティティにリンク可能であるが、それに限定されることはない。マルチGPUコンピューティングシステム2500は、ホストインタフェーススイッチ2504を介して複数のGPGPU2506A~Dに連結されたプロセッサ2502を含むことができる。ホストインタフェーススイッチ2504は、例えば、プロセッサ2502がGPGPU2506A~Dのセットと通信できるPCI Expressバスにプロセッサ2502を連結するPCI Expressスイッチデバイスであってよい。複数のGPGPU2506A~Dのそれぞれは、上述したGPGPUのインスタンスであり得る。GPGPU2506A~Dは、高速ポイントツーポイントのGPU間リンク2516のセットを介して相互接続することができる。高速GPU間リンクは、専用のGPUリンクを介してGPGPU2506A~Dのそれぞれに接続できる。P2PのGPUリンク2516は、プロセッサ2502が接続されるホストインタフェースバスを介した通信を必要とすることなく、GPGPU2506A~2506Dの各々の間の直接通信を可能にする。P2PのGPUリンクに関するGPU間トラフィックにより、ホストインタフェースバスは、システムメモリアクセスのために、又は例えば1つ又は複数のネットワークデバイスを介してマルチGPUコンピューティングシステム2500の他のインスタンスと通信するために利用可能のままである。プロセッサ2502にGPGPU2506A~Dを、ホストインタフェーススイッチ2504を介して接続する代わりに、プロセッサ2502は、P2P GPUリンク2516に対する直接サポートを含むので、GPGPU2506A~Dに直接接続することができる。
【0268】
[機械学習ニューラルネットワークの実施態様]
【0269】
本明細書において説明される実施形態により提供されるコンピューティングアーキテクチャは、特に、機械学習のためにニューラルネットワークを訓練及び展開するのに適した種類の並列処理を実行するように構成され得る。ニューラルネットワークは、グラフの関係を有する関数のネットワークとして一般化されることができる。当技術分野でよく知られているように、機械学習で使用される様々な種類のニューラルネットワークの実施態様がある。ニューラルネットワークの1つの例示的な種類は、前述したようにフィードフォワードネットワークである。
【0270】
ニューラルネットワークの第2例示的な種類は、畳み込みニューラルネットワーク(CNN)である。CNNは、例えば、画像データなど、既知のグリッド式のトポロジを有するデータを処理するための専用のフィードフォワードニューラルネットワークである。したがって、CNNはビジョン計算又は画像認識のアプリケーションに一般的に使用されるが、例えば、それらは音声及び言語処理などの他の種類のパターン認識にも使用され得る。CNN入力層のノードは、「フィルタ」のセット(網膜に見られる受容野から発想を得た特徴検出器)に編成され、各フィルタセットの出力は、ネットワークの連続層のノードに伝搬される。CNNの演算には、畳み込み数学演算を各フィルタに適用して、そのフィルタの出力を生成することが含まれる。畳み込みは、2つの関数によって実行される専用の種類の数学演算であり、第3関数を生成する。これは、2つの元の関数のうちの一方の修正版である。畳み込みネットワークの用語では、畳み込みへの第1関数は入力と称されることができ、第2関数は畳み込みカーネルと称されることができる。出力は、特徴マップと称され得る。例えば、畳み込み層への入力は、入力画像の様々な色成分を規定するデータの多次元配列にすることができる。畳み込みカーネルは、パラメータの多次元配列にすることができる。パラメータは、ニューラルネットワークの訓練プロセスによって適合される。
【0271】
再帰型ニューラルネットワーク(RNN)は、層間のフィードバック接続を含むフィードフォワードニューラルネットワークのファミリである。RNNは、ニューラルネットワークの異なる部分にわたりパラメータデータを共有することにより、順次データのモデル化を可能にする。RNNのアーキテクチャはサイクルを含む。サイクルは、RNNからの出力データの少なくとも一部が順番に後続の入力を処理するためのフィードバックとして使用されるため、将来の時点での変数の現在の値がそれ自体の値に及ぼす影響を表す。この機能により、言語データは構成されることができる可変性により、RNNは言語処理に特に有用である。
【0272】
後述される図は、例示的なフィードフォワード、CNN、及びRNNネットワークを提示し、及びこれらの種類のネットワークの各々をそれぞれ訓練及び展開するための一般的なプロセスを説明している。これらの説明が例示的なものであり、本明細書において説明される任意の特定の実施形態に限定されることはなく、図示されるコンセプトは、一般的なディープニューラルネットワーク及び機械学習技術に一般的に適用され得ることが理解されるだろう。
【0273】
上述した例示的なニューラルネットワークは、ディープラーニングを実行するために使用されることができる。ディープラーニングは、ディープニューラルネットワークを使用した機械学習である。ディープラーニングで使用されるディープニューラルネットワークは、単一隠れ層のみを含む浅いニューラルネットワークとは異なり、複数の隠れ層から構成される人工ニューラルネットワークである。より深いニューラルネットワークは、一般的に、訓練するには計算集約的である。しかし、ネットワークの追加の隠れ層により、浅い機械学習技術に対して出力誤差が減少するマルチステップパターン認識が可能になる。
【0274】
ディープラーニングで使用されるディープニューラルネットワークには、通常、モデルに提供された特徴表現に基づいて演算(例えば、オブジェクト分類、音声認識など)を実行できる数学的モデルを表すバックエンドネットワークに連結された特徴認識を実行するフロントエンドネットワークが含まれる。ディープラーニングは、モデルに対して手作りされた機能エンジニアリングが実行されることを必要とすることなく、機械学習が実行されることを可能にする。その代わり、ディープニューラルネットワークは、入力データ内の統計的構造又は相関関係に基づいて機能を学習できる。学習された特徴は、検出された特徴を出力にマッピングできる数学的モデルに提供されることができる。ネットワークにより使用される数学的モデルは、一般的に、実行される特定のタスクに特化しており、異なるモデルが異なるタスクを実行するのに使用されることになる。
【0275】
ニューラルネットワークが構築されると、学習モデルはネットワークに適用され、特定のタスクを実行するようにネットワークを訓練できる。学習モデルは、どのようにモデル内の重みを調整してネットワークの出力誤差を減らすかを示す。誤差の逆伝搬は、ニューラルネットワークの訓練に使用される一般的な方法である。入力ベクトルは、処理のためにネットワークに提示される。ネットワークの出力は、損失関数を使用して所望の出力と比較され、出力層のニューロンのそれぞれに対して誤差値が計算される。誤差値は、次に、各ニューロンが元の出力への寄与を大まかに表す関連付けられた誤差値を有するまで、後方に伝搬される。その後ネットワークは、例えば、確率的勾配降下アルゴリズムなどのアルゴリズムを使用してこれらの誤差から学習し、ニューラルネットワークの重みを更新できる。
【0276】
図26及び
図27は、例示的な畳み込みニューラルネットワークを示す。
図26は、CNN内の様々な層を示す。
図26に示されるように、画像処理をモデル化するために用いられる例示的なCNNは、入力画像の赤、緑及び青(RGB)成分を記述する入力2602を受信できる。入力2602は、複数の畳み込み層(例えば、畳み込み層2604、畳み込み層2606)により処理され得る。複数の畳み込み層からの出力は、任意選択で、全結合層2608のセットによって処理され得る。全結合層のニューロンは、フィードフォワードネットワークに関して前述したように、前の層の全ての起動に完全に接続する。全結合層2608からの出力は、ネットワークから出力結果を生成するのに使用され得る。全結合層2608内の起動は、畳み込みの代わりに行列乗算を使用して計算されることができる。全てのCNN実施態様が全結合層を利用するわけではない。例えば、いくつかの実施態様では、畳み込み層2606はCNNの出力を生成することができる。
【0277】
畳み込み層は疎に接続されており、全結合層2608に見られる従来のニューラルネットワーク構成とは異なる。従来のニューラルネットワーク層は全結合されているため、全ての出力ユニットはあらゆる入力ユニットとインタラクトする。しかし、図示のように、フィールドの畳み込みの出力が(フィールド内の各々のノードのそれぞれの状態値の代わりに)後続の層のノードに入力されるため、畳み込み層は疎に接続されている。畳み込み層に関連付けられたカーネルは、畳み込み演算を実行し、その出力は次の層に送信される。畳み込み層内で実行される次元削減は、CNNがスケーリングして大きな画像の処理を可能にする一態様である。
【0278】
図27は、CNNの畳み込み層内の例示的な計算段階を示す。CNNの畳み込み層2712への入力は、畳み込み層2714の3つの段階で処理されることができる。3つの段階は、畳み込み段階2716、検出段階2718、及びプーリング段階2720を含むことができる。それにより、畳み込み層2714は、連続的畳み込み層にデータを出力することができる。ネットワークの最終の畳み込み層は、出力特徴マップデータを生成し、又は全結合層に入力を提供し、例えばCNNへの入力の分類値を生成できる。
【0279】
畳み込み段階2716では、いくつかの畳み込みを並行して実行して、線形起動のセットを生成する。畳み込み段階2716は、線形変換プラス移動として指定されることができる任意の変換であるアフィン変換を含むことができる。アフィン変換には、回転、移動、スケーリング、及びこれらの変換の組み合わせが含まれる。畳み込みステージは、入力内の特定の領域に接続される機能(例えば、ニューロン)の出力を計算し、ニューロンに関連付けられる局所領域として決定され得る。ニューロンは、ニューロンの重みと、ニューロンが接続されているローカル入力の領域との間のドット積を計算する。畳み込み段階2716からの出力は、畳み込み層2714の連続的段階によって処理される線形起動のセットを規定する。
【0280】
線形起動は、検出段階2718によって処理されることができる。検出段階2718では、各線形起動は非線形起動関数によって処理される。非線形起動関数は、畳み込み層の受容野に影響を与えることなく、ネットワーク全体の非線形特性を高める。いくつかの種類の非線形起動関数は、使用され得る。1つの特定の種類は、正規化線形ユニット(ReLU)であり、これは、アクティベーションがゼロに閾値設定されるように、f(x)=max(0,x)として定義される活性化関数を用いる。
【0281】
プーリング段階2720は、畳み込み層2706の出力を近くの出力の要約統計量で置き換えるプーリング関数を使用する。プーリング関数は、ニューラルネットワークに移動不変性を導入するのに使用され得る。その結果、入力への小さな移動は、プールされた出力を変更しない。ローカル移動に対する不変性は、入力データ内の機能の存在が機能の正確な位置よりも重要であるシナリオで有用とすることができる。最大プーリング、平均プーリング、及びl2-ノルムプーリングを含む、様々な種類のプーリング関数は、プーリング段階2720の間に使用されることができる。さらに、いくつかのCNN実施態様はプーリング段階を含まない。代わりに、そのような実施態様は、以前の畳み込みステージと比較して、増加したストライドを有する代わりの及び追加の畳み込みステージである。
【0282】
次に、畳み込み層2714からの出力は、次の層2722によって処理することができる。次の層2722は、追加の畳み込み層又は全結合層2708のうちの1つとすることができる。例えば、
図27の第1の畳み込み層2704は、第2の畳み込み層2706に出力でき、第2の畳み込み層は、全結合層2808のうちの第1の層に出力できる。
【0283】
図28は、例示的な再帰型ニューラルネットワーク2800を示す。再帰型ニューラルネットワーク(RNN)では、ネットワークの前の状態がネットワークの現在の状態の出力に影響する。RNNは、様々な機能を使用して様々な方法で構築されることができる。RNNの使用は、一般的に、数学的モデルを使用して、以前の一連の入力に基づいて将来を予測することを中心に展開する。例えば、RNNが、統計的言語モデル化を実行し、前の一連のワードが与えられると、次の単語を予測するのに使用され得る。図示のRNN2800は、入力ベクトルを受信する入力層2802、反復機能を実装するための隠れ層2804、フィードバックメカニズム2805を有すると説明されることができ、以前の状態の「メモリ」と出力層2806とが結果を出力するのを可能にする。RNN2800は時間段階に基づいて動作する。所与の時間ステップでのRNNの状態は、フィードバックメカニズム2805を介して先行時間ステップに基づいて影響を受ける。所与の時間ステップについて、隠れ層2804の状態は、前の状態及び現在の時間ステップでの入力によって定められる。第1時間ステップでの初期入力(x1)は、隠れ層2804で処理されることができる。第2入力(x2)は、初期入力(x1)の処理の間に決定される状態情報を使用して、隠れ層2804によって処理されることができる。所与の状態は、s_t=f(Ux_t+Ws_(t-1))として計算され得、U及びWは、パラメータ行列である。関数fは、一般的に、双曲線正接関数(Tanh)又は正規化関数f(x)=max(0,x)の変形例など、非線形である。しかしながら、隠れ層2804において用いられる特定の数学的な関数は、RNN2800についての特定の実施態様の詳細に応じて変化し得る。
【0284】
説明されている基本的なCNN及びRNNネットワークに加えて、これらのネットワークの変更を有効にし得る。ある例示的なRNNの変形例は、長・短期メモリ(LSTM)RNNである。LSTM RNNは、より長い並びの言語を処理するために必要となり得る長期依存を学習できる。CNNの変形は、CNNに類似した構造を有し、ディープビリーフネットワークと同様の方式で訓練される畳み込みディープビリーフネットワークである。ディープビリーフネットワーク(DBN)は、確率(ランダム)変数の複数の層から構成される生成系ニューラルネットワークである。DBNは、貪欲な教師なし学習を使用して、層毎に訓練されることができる。次に、DBNの学習された重みは、ニューラルネットワークの重みの最適な初期セットを決定することにより、事前訓練ニューラルネットワークを提供するのに使用され得る。
【0285】
図29は、ディープニューラルネットワークの訓練及び展開を示す。所与のネットワークがタスク用に構築されると、ニューラルネットワークは訓練データセット2902を使用して訓練される。訓練プロセスのハードウェアアクセラレーションを可能にするために、様々な訓練フレームワーク2904が開発されている。例えば、上述した機械学習フレームワークは、訓練フレームワークとして構成されてよい。訓練フレームワーク2904は、訓練されていないニューラルネットワーク2906に接続でき、訓練されていないニューラルネットが本明細書で説明される並列処理リソースを使用して訓練され、訓練されたニューラルネット2908を生成可能にする。
【0286】
訓練プロセスを開始するには、初期重みをランダムに又はディープビリーフネットワークを使用して事前訓練することにより選択され得る。訓練サイクルは、次に、教師あり方式又は教師なし方式のいずれかで実行される。
【0287】
教師あり学習とは、例えば、訓練データセット2902に、入力に所望の出力と組み合わされている入力が含まれる場合、又は訓練データセットに既知の出力を有する入力とニューラルネットワークの出力が含まれ、ネットワークの出力は手動で格付けされる場合など、介入オペレーションとして訓練が実行される学習方法である。ネットワークは入力を処理し、結果の出力を期待される出力又は所望の出力のセットと比較する。次に、誤差はシステムを通じ戻り伝搬される。訓練フレームワーク2904は、訓練されていないニューラルネットワーク2906を制御する重みを調整するように調整することができる。訓練フレームワーク2904は、どのように上手く訓練されていないニューラルネットワーク2906が既知の入力データに基づいて正解を生成するのに好適なモデルに対して収束しているかを監視するツールを提供することができる。ニューラルネットワークによって生成された出力を改善するためにネットワークの重みが調整されると、訓練プロセスを繰り返し行う。ニューラルネットワークが、訓練されたニューラルネット2908に関連付けられる統計的に所望の精度に達するまで、訓練プロセスを継続することができる。その後、訓練されたニューラルネットワーク2908は、任意の数の機械学習オペレーションを実装するように展開可能である。
【0288】
教師なし学習は、ネットワークが分類されていないデータを使用して自身を訓練しようと試みる学習方法である。したがって、教師なし学習の場合、訓練データセット2902には、任意の関連付けられる出力データのない入力データが含まれるであろう。訓練されていないニューラルネットワーク2906は、分類されていない入力内のグループ化を学習でき、個々の入力がどのようにデータセット全体に関連するかを決定できる。教師なし訓練は、自己組織化マップを生成するのに使用され得る。自己組織化マップは、データの次元を削減するのに有用なオペレーションを実行できる種類の訓練されたニューラルネットワーク2907である。教師なし訓練は、異常検出を実行することにも使用され得る。これにより、データの通常のパターンから逸脱した入力データセット内のデータポイントを識別することが可能になる。
【0289】
教師あり訓練及び教師なし訓練の変更はまた利用され得る。半教師あり学習は、訓練データセット2902に、同じ分散の分類されたデータと分類されていないデータの混合が含まれる技術である。インクリメンタル学習は、教師あり学習の変形であり、入力データが連続して使用され、モデルをさらに訓練する。インクリメンタル学習は、訓練されたニューラルネットワーク2908が、初期訓練中にネットワーク内に注ぎ込まれた知識を忘れることなく、新しいデータ2912に適合することを可能にする。
【0290】
教師あり又は教師なしであるかに関わらず、特にディープニューラルネットワークの訓練プロセスは、単一計算ノードにとって非常に計算集約的になり得る。単一計算ノードを使用する代わりに、計算ノードの分散型ネットワークが、訓練プロセスを加速するのに使用され得る。
【0291】
図30Aは、分散型学習を示すブロック図である。分散型学習は、上述したノードなどの複数の分散型計算ノードを用いて、ニューラルネットワークの教師あり又は教師なし訓練を実行する訓練モデルである。分散型計算ノードはそれぞれ、1つ又は複数のホストプロセッサと、高並列汎用グラフィックス処理ユニットなどの汎用処理ノードのうちの1つ又は複数とを含むことができる。図示されるように、分散型学習は、モデル並列処理3002、データ並列処理3004、又は、モデル及びデータ並列処理の組み合わせを実行し得る。
【0292】
モデル並列処理3002では、分散型システムの異なる計算ノードが、単一のネットワークの異なる部分の訓練演算を実行できる。例えば、ニューラルネットワークの各層は、分散型システムの異なる処理ノードによって訓練されることができる。モデル並列処理の利点には、特に大きなモデルにスケーリングする能力が含まれる。ニューラルネットワークの異なる層に関連付けられた演算を分割すると、全ての層の重みが単一計算ノードのメモリに適合しないであろう非常に大規模なニューラルネットワークの訓練が可能になる。いくつかの例において、モデル並列処理は、大規模なニューラルネットワークの教師なし訓練を実行する際に特に有用とすることができる。
【0293】
データ並列処理3004では、分散型ネットワークの異なるノードがモデルの完全なインスタンスを有し、各ノードがデータの異なる部分を受信する。次に、異なるノードからの結果が組み合わされる。データ並列処理には異なるアプローチが可能であるが、データの並列訓練アプローチでは全て、結果を組み合わせて各ノード間でモデルパラメータを同期させる技術が必要である。データを組み合わせるための例示的なアプローチには、パラメータの平均化と更新ベースのデータ並列処理が含まれる。パラメータの平均化は、訓練データのサブセットで各ノードを訓練し、グローバルパラメータ(例えば、重み、バイアス)を各ノードのパラメータの平均に設定する。パラメータの平均化では、パラメータデータを維持する中央パラメータサーバを使用する。更新ベースのデータ並列処理は、ノードからパラメータサーバにパラメータを転送する代わりに、モデルへの更新が転送されることを除いて、パラメータの平均化と同様である。さらに、更新ベースのデータ並列処理は、更新がノード間で圧縮及び転送される分散方式で実行されることができる。
【0294】
組み合わせモデル及びデータ並列処理3006は、例えば、各計算ノードが複数のGPUを含む分散型システムで実装されることができる。各ノードはモデルの完全なインスタンスを有することができ、各ノード内の別個のGPUはモデルの異なる部分を訓練するために使用される。
【0295】
分散型訓練では、単一マシンでの訓練に対してオーバヘッドが増加している。しかし、本明細書で説明された並列プロセッサ及びGPGPUは各々、高帯域幅GPU間データ転送及び加速されたリモートデータ同期を可能にする技術を含む、分散型訓練のオーバヘッドを削減する様々な技術を実装できる。
[例示的な機械学習アプリケーション]
【0296】
機械学習は、限定されることはないが、コンピュータビジョン、自動運転及びナビゲーション、音声認識、言語処理を含む様々な技術的問題を解決するために適用されることができる。コンピュータビジョンは、従来、機械学習アプリケーションの最も活発な研究領域のうちの1つであった。コンピュータビジョンのアプリケーションは、例えば、顔の認識などの人の視覚能力の再生から、視覚能力の新しいカテゴリの作成までの範囲にわたる。例えば、コンピュータビジョンアプリケーションは、映像に可視のオブジェクトで引き起こされる振動からの音波を認識するように構成されることができる。並列プロセッサ加速機械学習により、コンピュータビジョンアプリケーションが、既に実現可能であったものよりも膨大な訓練データセットを使用して訓練されることが可能になり、また推論システムが低電力並列プロセッサを使用して展開されることが可能になる。
【0297】
並列プロセッサ加速機械学習は、レーン及び道路標識認識、障害物回避、ナビゲーション、及び運転制御を含む自動運転アプリケーションを有する。加速機械学習技術が、固有の訓練入力に対する適切な応答を規定するデータセットに基づいて駆動モデルを訓練するのに使用され得る。本明細書で説明される並列プロセッサは、自動運転ソリューションに使用されるますます複雑化するニューラルネットワークの迅速な訓練を可能にすることができ、自律走行車への統合に好適なモバイルプラットフォームでの低電力推論プロセッサの展開を可能にする。
【0298】
並列プロセッサ加速ディープニューラルネットワークにより、自動音声認識(ASR)への機械学習アプローチが可能になった。ASRには、入力アコースティックシーケンスが与えられたときに最も可能性の高い言語シーケンスを計算する関数の作成が含まれる。ディープニューラルネットワークを使用した加速機械学習により、既にASRに使用されていた隠れMarkovモデル(HMM)とGaussian混合モデル(GMM)の置き換えが可能になった。
【0299】
並列プロセッサ加速機械学習はまた、自然言語処理を加速するために使用されることができる。自動学習手順では、統計的推論アルゴリズムを利用して、誤った又は見知らぬ入力に対してロバストなモデルを生成できる。例示的な自然言語プロセッサアプリケーションには、人間の言語間の自動機械翻訳が含まれる。
【0300】
機械学習に使用される並列処理プラットフォームは、訓練プラットフォームと展開プラットフォームに分割されることができる。訓練プラットフォームは一般的に非常に並列であり、マルチGPU単一ノード訓練及びマルチノード、マルチGPU訓練を加速するための最適化が含まれている。訓練に適した例示的な並列プロセッサは、本明細書において説明される高並列汎用グラフィックス処理ユニット及び/又はマルチGPUコンピューティングシステムを含む。一方、展開された機械学習プラットフォームには、一般的に、例えば、カメラ、自律ロボット、自律走行車などの製品に使用するのに好適な低電力の並列プロセッサが含まれる。
【0301】
図30Bは、訓練されたモデルを用いて推論を実行するのに適した例示的な推論システムオンチップ(SOC)3100を示す。本明細書における任意の他の図の要素と同じ又は同様の名称を有する、
図30Bに記載の要素は、その他の図にあるのと同じ要素を記載し、これと同様な方式で動作又は機能可能であり、同じコンポーネントを含むことが可能であり、本明細書のどこか他の箇所で説明された他のエンティティにリンク可能であるが、そのように限定されることはない。SOC3100は、メディアプロセッサ3102、ビジョンプロセッサ3104、GPGPU3106及びマルチコアプロセッサ3108を含む処理コンポーネントを統合できる。SOC3100は、処理コンポーネントの各々によってアクセス可能な共有オンチップデータプールを可能にすることができるオンチップメモリ3105をさらに含むことができる。処理コンポーネントは低電力オペレーション用に最適化され、自律走行車及び自律ロボットを含む様々な機械学習プラットフォームへの展開を可能にすることができる。例えば、SOC3100の一実施態様は、自律走行車の主制御システムの一部として使用されることができる。SOC3100が自律走行車に使用するために構成されている場合、SOCは、展開管轄区域の関連機能安全性規格に準拠するように設計及び構成されている。
【0302】
オペレーション中、メディアプロセッサ3102及びビジョンプロセッサ3104は、コンピュータビジョンオペレーションをアクセラレートするために、同時に動作できる。メディアプロセッサ3102は、複数の高解像度(例えば、4K、8K)ビデオストリームの低遅延な復号を可能にし得る。復号されたビデオストリームは、オンチップメモリ3105内のバッファに書き込み可能である。次に、ビジョンプロセッサ3104は、訓練された画像認識モデルを使用してフレームを処理する準備として、復号された映像を解析し、復号された映像のフレームに対して予備処理オペレーションを実行することができる。例えば、ビジョンプロセッサ3104は、高解像度映像データに対して画像認識を実行するために使用されるCNNのための畳み込み演算を加速することができ、バックエンドモデル演算は、GPGPU3106によって実行される。
【0303】
マルチコアプロセッサ3108は、メディアプロセッサ3102及びビジョンプロセッサ3104によって実行されるデータ転送及び共有メモリオペレーションのシーケンシング及び同期を支援する制御ロジックを含むことができる。マルチコアプロセッサ3108はまた、GPGPU3106の推論計算機能を利用することができるソフトウェアアプリケーションを実行するためのアプリケーションプロセッサとして機能することができる。例えば、ナビゲーション及びドライブロジックの少なくとも一部は、マルチコアプロセッサ3108上で実行されるソフトウェアで実装されることができる。そのようなソフトウェアは、計算ワークロードを直接GPGPU3106に発行することができる、又は計算ワークロードはマルチコアプロセッサ3108に発行されることができ、これらのオペレーションの少なくとも一部をGPGPU3106にオフロードできる。
【0304】
GPGPU3106は、高並列汎用グラフィックス処理ユニットDPLAB00内の処理クラスタDPLAB06A~DPLAB06Hの低電力構成などの処理クラスタを含み得る。GPGPU3106内の処理クラスタは、訓練されたニューラルネットワーク上で推論計算を実行するために特に最適化される命令をサポートすることができる。例えば、GPGPU3106は、8ビット及び4ビットの整数ベクトル演算などの低い精度の計算を実行する命令をサポートすることができる。
[レイトレーシングアーキテクチャ]
【0305】
1つの実施態様において、グラフィックスプロセッサは、リアルタイムレイトレーシングを行うための回路及び/又はプログラムコードを含む。いくつかの実施形態において、レイトラバーサルオペレーション及び/又はレイインターセクションオペレーションを含む、本明細書で説明される様々なレイトレーシングオペレーションを実行する専用のレイトレーシングコアのセットが、グラフィックスプロセッサに含まれ得る。レイトレーシングコアのほかに、プログラム可能型シェーディングオペレーションを行うための複数セットのグラフィックス処理コア、及びテンソルデータに対して行列演算を行うための複数セットのテンソルコアも含まれ得る。
【0306】
図31は、マルチコアグループ3100A~Nに配置された専用のグラフィックス処理リソースのセットを含む1つのそのようなグラフィックス処理ユニット(GPU)3105の例示的な部分を示す。グラフィックス処理ユニット(GPU)3105は、グラフィックスプロセッサ300、GPGPU1340及び/又は本明細書に記載の任意のその他グラフィックスプロセッサの変形例であり得る。したがって、グラフィックスプロセッサの任意の特徴の開示は、GPU3105との対応する組み合わせも開示するものであるが、そのように限定されることはない。さらに、本明細書における任意の他の図の要素と同じ又は同様の名称を有する、
図31に記載の要素は、その他の図にあるのと同じ要素を記載し、これと同様の方式で動作又は機能可能であり、同じコンポーネントを含むことが可能であり、本明細書のどこか他の箇所で説明された他のエンティティにリンク可能であるが、そのように限定されることはない。単一のマルチコアグループ3100Aの詳細だけが提供されているが、その他のマルチコアグループ3100B~Nも同じ又は同様のグラフィックス処理リソースのセットを備えてよいことが理解されるであろう。
【0307】
示されているように、マルチコアグループ3100Aは、グラフィックスコア3130のセットと、テンソルコア3140のセットと、レイトレーシングコア3150のセットとを含んでよい。スケジューラ/ディスパッチャ3110が、様々なコア3130、3140、3150で実行するためのグラフィックススレッドをスケジューリングしてディスパッチする。レジスタファイル3120のセットが、グラフィックススレッドを実行するときに、コア3130、3140、3150が用いるオペランド値を格納する。これらは、例えば、整数値を格納する整数レジスタ、浮動小数点値を格納する浮動小数点レジスタ、パックドデータ要素(整数及び/又は浮動小数点データ要素)を格納するベクトルレジスタ、及びテンソル/行列値を格納するタイルレジスタを含んでよい。タイルレジスタは、複数のベクトルレジスタの組み合わせセットとして実装され得る。
【0308】
1つ又は複数のレベル1(L1)キャッシュ及びテクスチャユニット3160が、テクスチャデータ、頂点データ、ピクセルデータ、レイデータ、バウンディングボリュームデータなどのグラフィックスデータを、それぞれのマルチコアグループ3100Aにローカルに格納する。マルチコアグループ3100A~Nの全て又はそのサブセットにより共有されるレベル2(L2)キャッシュ3180が、複数のコンカレントグラフィクススレッド用のグラフィックスデータ及び/又は命令を格納する。示されるように、L2キャッシュ3180は、複数のマルチコアグループ3100A~N全体で共有されてよい。1つ又は複数のメモリコントローラ3170が、GPU3105をシステムメモリ(例えば、DRAM)及び/又は専用グラフィックスメモリ(例えば、GDDR6メモリ)であってよいメモリ3198に連結する。
【0309】
入力/出力(IO)回路3195が、デジタル信号プロセッサ(DSP)、ネットワークコントローラ、又はユーザ入力デバイスなどの1つ又は複数のIOデバイス3190にGPU3105を連結する。オンチップ相互接続が、I/Oデバイス3190をGPU3105及びメモリ3198に連結するのに用いられてよい。IO回路3195の1つ又は複数のIOメモリ管理ユニット(IOMMU)3170が、IOデバイス3190をシステムメモリ3198に直接的に連結する。IOMMU3170は、仮想アドレスをシステムメモリ3198の物理アドレスにマッピングするための複数のセットのページテーブルを管理し得る。さらに、IOデバイス3190、CPU3199、及びGPU3105は、同じ仮想アドレス空間を共有してよい。
【0310】
IOMMU3170は仮想化もサポートし得る。この場合、IOMMU3170は、ゲスト/グラフィックス仮想アドレスをゲスト/グラフィックス物理アドレスにマッピングするための第1セットのページテーブルと、ゲスト/グラフィックス物理アドレスを(例えば、システムメモリ3198内の)システム/ホスト物理アドレスにマッピングするための第2セットのページテーブルとを管理してよい。第1及び第2セットのページテーブルのそれぞれのベースアドレスは、制御レジスタに格納され、コンテキストスイッチの際にスワップアウトされてよい(例えば、この結果、新しいコンテキストには関係のあるページテーブルのセットへのアクセスが提供される)。
図31には示されていないが、コア3130、3140、3150及び/又はマルチコアグループ3100A~Nのそれぞれは、ゲスト仮想からゲスト物理への変換、ゲスト物理からホスト物理への変換、及びゲスト仮想からホスト物理への変換をキャッシュに格納するためのトランスレーションルックアサイドバッファ(TLB)を含んでよい。
【0311】
CPU3199、GPU3105、及びIOデバイス3190は、単一の半導体チップ及び/又はチップパッケージに統合されてよい。示されているメモリ3198は、同じチップに統合されてもよく、オフチップインタフェースを介してメモリコントローラ3170に連結されてもよい。1つの実施態様において、メモリ3198は、他の物理システムレベルのメモリと同じ仮想アドレス空間を共有するGDDR6メモリを含むが、本発明の基本的原理はこの特定の実施態様に限定されることはない。
【0312】
テンソルコア3140は、ディープラーニングのオペレーションを実行するのに用いられる基本的なコンピュートオペレーションである行列演算を実行するように特に設計された複数の実行ユニットを含んでよい。例えば、同時行列乗算オペレーションが、ニューラルネットワークの訓練及び推論に用いられてよい。テンソルコア3140は、単精度浮動小数点(例えば、32ビット)、半精度浮動小数点(例えば、16ビット)、整数語(16ビット)、バイト(8ビット)、ハーフバイト(4ビット)を含む様々なオペランド精度を用いて行列処理を実行してよい。ニューラルネットワークの実施態様も、レンダリングされた各シーンの特徴点を、場合によっては複数のフレームから詳細を組み合わせながら抽出し、高品質の最終イメージを構築し得る。
【0313】
ディープラーニングの実施態様において、並列行列乗算作業がテンソルコア3140で実行するためにスケジューリングされてよい。ニューラルネットワークの訓練は、特に、かなりの数の行列ドット積演算を必要とする。N×N×Nの行列乗算の内積の定式化を処理するために、テンソルコア3140は、少なくともN個のドット積処理要素を含んでよい。行列乗算を開始する前に、1つの行列全体がタイルレジスタにロードされ、第2の行列の少なくとも1つの列が、N個のサイクルのサイクルごとにロードされる。各サイクルには、処理されたN個のドット積がある。
【0314】
行列要素が、特定の実施態様に応じて、16ビットワード、8ビットバイト(例えば、INT8)、及び4ビットハーフバイト(例えば、INT4)を含む異なる精度で格納されてよい。異なる精度モードは、最も効率的な精度が異なるワークロード(例えば、バイト及びハーフバイトへの量子化を許容できる推論ワークロードなど)に確実に用いられるようにするために、テンソルコア3140に対して指定されてよい。
【0315】
レイトレーシングコア3150は、リアルタイムレイトレーシングの実施態様及び非リアルタイムレイトレーシングの実施態様の両方に対するレイトレーシングオペレーションを加速するように使用され得る。具体的には、レイトレーシングコア3150は、バウンディングボリューム階層(BVH)を用いてレイトラバーサルを実行し、レイとBVHボリューム内に囲まれたプリミティブとの間の交差を識別するためのレイトラバーサル/インターセクション回路を含み得る。レイトレーシングコア3150は、(例えば、Zバッファ又は同様の仕組みを用いて)深度テスト及び間引きを行うための回路も含んでよい。1つの実施態様において、レイトレーシングコア3150は、本明細書で説明される画像ノイズ除去技術と連携して、トラバーサルオペレーション及びインターセクションオペレーションを行い、その少なくとも一部が、テンソルコア3140で実行されてよい。例えば、テンソルコア3140は、ディープラーニングニューラルネットワークを実装して、レイトレーシングコア3150により生成されたフレームのノイズ除去を行い得る。しかしながら、CPU3199、グラフィックスコア3130、及び/又はレイトレーシングコア3150も、ノイズ除去アルゴリズム及び/又はディープラーニングアルゴリズムの全て又は一部を実装してよい。
【0316】
さらに、上述したように、ノイズ除去への分散型アプローチが利用されてよく、そのアプローチでは、GPU3105はコンピューティングデバイスの中にあり、当該コンピューティングデバイスは、ネットワーク又は高速相互接続を介して他のコンピューティングデバイスに連結されている。相互接続されたコンピューティングデバイスはさらにニューラルネットワーク学習/訓練用データを共有し、異なる種類の画像フレーム及び/又は異なるグラフィックスアプリケーションに対してノイズ除去を行うことをシステム全体が学習する速度を向上し得る。
【0317】
レイトレーシングコア3150は、全てのBVHトラバーサル及びレイ-プリミティブ間インターセクションを処理し、グラフィックスコア3130がレイ当たり数千の命令で過負荷になるのを防ぎ得る。各レイトレーシングコア3150は、バウンディングボックステストを行うための第1セットの専用回路(例えば、トラバーサルオペレーション用)と、レイ-三角形間インターセクションテスト(例えば、トラバースしたレイを交差する)を行うための第2セットの専用回路とを含み得る。したがって、マルチコアグループ3100Aはレイプローブを起動するだけでよく、レイトレーシングコア3150は独立して、レイトラバーサル及び交差を行い、ヒットデータ(例えば、ヒット、ヒットなし、複数ヒットなど)をスレッドコンテキストに戻す。その他のコア3130、3140は、他のグラフィックス作業又はコンピュート作業を行うために解放され得、レイトレーシングコア3150は、トラバーサルオペレーション及びインターセクションオペレーションを行う。
【0318】
各レイトレーシングコア3150は、BVHテストオペレーションを行うためのトラバーサルユニットと、レイ-プリミティブ間インターセクションテストを行うインターセクションユニットとを含み得る。そしてインターセクションユニットは、「ヒットあり」、「ヒットなし」、又は「複数ヒット」の応答を生成し、それを適切なスレッドに提供し得る。トラバーサルオペレーション及びインターセクションオペレーションの際に、他のコア(例えば、グラフィックスコア3130及びテンソルコア3140)の実行リソースは、他の形態のグラフィックス作業を行うために解放され得る。
【0319】
ハイブリッドラスタ化/レイトレーシング手法が用いられ、その手法では、グラフィックスコア3130とレイトレーシングコア3150との間でも作業が分散され得る。
【0320】
レイトレーシングコア3150(及び/又は他のコア3130、3140)は、Microsoft(登録商標)のDirectXレイトレーシング(DXR)などのレイトレーシング命令セット用のハードウェアサポートを含んでよい。DXRには、DispatchRaysコマンド、並びにray-generationシェーダ、closest-hitシェーダ、any-hitシェーダ、及びmissシェーダが含まれ、これらによって、オブジェクトごとに一意のセットのシェーダ及びテクスチャを割り当てることが可能になる。レイトレーシングコア3150、グラフィックスコア3130、及びテンソルコア3140によりサポートされ得る別のレイトレーシングプラットフォームが、Vulkan 1.1.85である。しかしながら、本発明の基本的原理は、いかなる特定のレイトレーシングISAにも限定されることはないことに留意されたい。
【0321】
一般的には、様々なコア3150、3140、3130は、レイトレーシング命令セットをサポートしてよく、レイトレーシング命令セットには、Ray Generation、Closest Hit、Any Hit、Ray-primitive Intersection、Per-primitive and hierarchical Bounding box Construction、Miss、Visit、及びExceptions用の命令/機能が含まれる。より具体的には、以下の機能を実行するためのレイトレーシング命令を含まれ得る。
【0322】
Ray Generation:Ray Generation命令は、ピクセルごと、サンプルごと、又は他のユーザ定義型作業割り当てごとに実行されてよい。
【0323】
Closest Hit:Closest Hit命令は、シーン内のレイとプリミティブとの最も近い交差ポイントを探し出すために実行されてよい。
【0324】
Any Hit:Any Hit命令は、シーン内のレイとプリミティブとの間の複数の交差を識別し、場合によっては、新しい最も近い交差ポイントを識別する。
【0325】
Intersection:Intersection命令は、レイ-プリミティブ間インターセクションテストを行い、結果を出力する。
【0326】
Per-primitive Bounding box Construction:この命令は、(例えば、新しいBVH又は他のアクセラレーションデータ構造を構築する場合に)所与のプリミティブ又はプリミティブのグループの周りにバウンディングボックスを構築する。
【0327】
Miss:シーン内又はシーンの指定領域内の全てのジオメトリに、レイが当たらなかったことを示す。
【0328】
Visit:レイがトラバースすることになる子ボリュームを示す。
【0329】
Exceptions:(例えば、様々な誤差条件のために呼び出される)様々な種類の例外ハンドラを含む。
[階層的ビームトレーシング]
【0330】
バウンディングボリューム階層は、グラフィックスプリミティブ及びその他グラフィックスオブジェクトに対してオペレーションを行う際の効率を向上させるのに、一般的に使用される。BVHは、ジオメトリックオブジェクトのセットに基づいて構築される、階層木構造である。木構造の先頭は、所与のシーンにおける全てのジオメトリックオブジェクトを包含するルートノードとなっている。個々のジオメトリックオブジェクトは、木のリーフノードを形成するバウンディングボリュームに囲まれる。そしてこれらノードは、小セットにグループ化され、より大きなバウンディングボリューム内に囲まれる。次に、これらもグループ化され、他のより大きなバウンディングボリュームに再帰的に囲まれ、最終的に木の先頭のルートノードにより表される単一のバウンディングボリュームを有する木構造となる。バウンディングボリューム階層は、レイトレーシングで使用される衝突検出、プリミティブ間引き、レイトラバーサル/インターセクションオペレーションなどの、ジオメトリックオブジェクトのセットに対する多様なオペレーションを効率的にサポートするために使用される。
【0331】
レイトレーシングアーキテクチャにおいて、レイ-プリミティブ間インターセクションを判定するため、レイがBVHをトラバースする。例えば、レイがBVHのルートノードを通過しない場合、このレイは、BVHに囲まれたプリミティブのうちのいずれとも交差せず、このプリミティブのセットに関して、レイにさらなる処理は必要ない。レイがBVHの第1子ノードを通過するが、第2子ノードを通過しない場合、第2子ノードで囲まれた任意のプリミティブに対して、レイを再テストする必要はない。このように、BVHはレイ-プリミティブ間インターセクションに対するテストを行う効率的なメカニズムを提供する。
【0332】
個々のレイではなく、「ビーム」と称する連続したレイのグループを、BVHに対してテストしてもよい。
図32は、4つの異なるレイで形成された例示的ビーム3201を示す。この4つのレイで画定されたパッチ3200に交差するあらゆるレイが、同じビーム内であると考えられる。
図32のビーム3201はレイの矩形構成で画定されているが、ビームは、本発明の基本的原理に即した上で、様々な他の方法で画定され得る(例えば、円、楕円など)。
【0333】
図33は、GPU3320のレイトレーシングエンジン3310がどのように本明細書に記載のビームトレーシング技術を実施するかを示す。具体的には、レイ生成回路3304はトラバーサル及びインターセクションオペレーションが実行される複数のレイを生成する。ただし、トラバーサルオペレーション及びインターセクションオペレーションを個々のレイに対して実行するのではなく、トラバーサルオペレーション及びインターセクションオペレーションは、ビーム階層構築回路3305により生成されたビーム3307の階層を使用して実行される。ビーム階層はバウンディングボリューム階層(BVH)と同様である。例えば
図34は、複数の異なるコンポーネントに細分化され得る一次ビーム3400の例を提供する。具体的には、一次ビーム3400は四半部3401~3404に分割され得、各四半部自体も、四半部3404内のサブ四半部A~Dなどのサブ四半部に分割され得る。一次ビームは、様々な方法で細分化され得る。例えば、一次ビームは(四半部ではなく)半分に分割されてよく、半分に分割したそれぞれも半分に分割されてよい、ということが繰り返され得る。どのように細分化が行われるかに関わらず、BVHと同様に細分化構造が生成される。例えば、ルートノードが一次ビーム3400を示し、第1レベル子ノードがそれぞれ四半部3401~3404で示され、第2レベル子ノードが各サブ四半部A~Dで示され、以降同様となる。
【0334】
ビーム階層3307が構築されると、トラバーサル/インターセクション回路3306はビーム階層3307及びBVH3308を使用してトラバーサル/インターセクションオペレーションを実行し得る。具体的には、BVHに対してビームをテストし、BVHのどの部分とも交差しないビームの部分を間引きし得る。
図34に示すデータを使用して、例えばBVH又はBVHの特定の分岐と交差しないサブ領域3402及び3403に関連するサブビームが、BVH又は分岐に関して間引きされ得る。デプス優先探索又はその他探索アルゴリズムを実行することで、残りの部分3401、3404がBVHに対してテストされ得る。
【0335】
図35にレイトレーシングの方法を示す。本方法は、上述のグラフィックス処理アーキテクチャの文脈の範囲で実装されてよいが、いかなる特定のアーキテクチャにも限定されることはない。
【0336】
3500で複数のレイを含む一次ビームが構築され、3501でビームが細分化され、階層的データ構造が生成されて、ビーム階層が作成される。オペレーション3500~3501は、複数のレイからビーム階層を構築する、単一の統合されたオペレーションとして実行されてよい。3502で、(ビーム階層から)レイを、及び/又はBVHからノード/プリミティブを間引くために、BVHとともにビーム階層が使用される。3503では、残りのレイ及びプリミティブから、レイ-プリミティブ間インターセクションが判定される。
[分散型レイトレーシングシステムの不可逆及び可逆のパケット圧縮]
【0337】
レイトレーシングオペレーションがネットワークを介して一緒に連結された複数の計算ノード全体に分散され得る。
図36は、例えば、複数のレイトレーシングノード3610~3613を含むレイトレーシングクラスタ3600を示しており、これらのノードは、並行して、場合によっては、これらのノードのうちの1つの結果を組み合わせて、レイトレーシングオペレーションを行う。示されているアーキテクチャにおいて、レイトレーシングノード3610~3613は、ゲートウェイを介して、クライアント側のレイトレーシングアプリケーション3630に通信可能に連結される。
【0338】
分散型アーキテクチャの難点のうちの1つは、レイトレーシングノード3610~3613のそれぞれの間で伝送されなければならない大量のパケット化されたデータである。可逆圧縮技術と不可逆圧縮技術は両方とも、レイトレーシングノード3610~3613の間で伝送されるデータを減らすのに用いられ得る。
【0339】
可逆圧縮を実施するために、特定の種類のオペレーションの結果で満たされたパケットを送信するのではなく、受信ノードが結果を再構築できるようにするデータ又はコマンドが送信される。例えば、確率的にサンプリングされた領域の光と、アンビエントオクルージョン(AO)オペレーションとが、必ずしも方向を必要としない。その結果として、伝送ノードがランダムシードを送信するだけでよい、ランダムシードは次に、受信ノードがランダムサンプリングを行うのに用いられる。例えば、シーンがノード3610~3612の全体に分散されている場合、ポイントp1~p3で光1をサンプリングするには、光ID及び原点だけをノード3610~3612に送信すればよい。これらのノードのそれぞれは次に、独立して、確率的に光をサンプリングしてよい。ランダムシードは、受信ノードにより生成され得る。同様に、一次レイのヒットポイントでは、アンビエントオクルージョン(AO)及びソフトシャドーサンプリングが、連続フレームの原点を待つことなく、ノード3610~3612で計算され得る。さらに、レイのセットが同じ点光源に進行することが分かっている場合、光源を識別する命令が、光源をレイのセットに適用する受信ノードに送信されてよい。別の例として、単一のポイントに伝送されるアンビエントオクルージョンレイがN個ある場合、N個のサンプルをこのポイントから生成するために、コマンドが送信されてよい。
【0340】
様々な追加の技術が、不可逆圧縮に適用されてよい。例えば、BVH、プリミティブ、及びレイに関連する全ての座標値を量子化するために、量子化ファクタが利用されてよい。さらに、BVHノード及びプリミティブなどのデータに用いられる32ビット浮動小数点値が、8ビット整数値に変換されてよい。1つの例示的な実施態様において、レイパケットの境界はフル精度で格納されるが、個々のレイポイントP1~P3はインデックスオフセットとしてこれらの境界に伝送される。同様に、8ビット整数値をローカル座標として使用する複数のローカル座標系が生成されてよい。これらのローカル座標系のそれぞれの原点の位置は、フル精度(例えば、32ビット浮動小数点)値を用いて符号化され、グローバル座標系とローカル座標系を効果的に接続してよい。
【0341】
以下は、可逆圧縮の一例である。レイトレーシングプログラムにおいて内部に用いられるレイデータフォーマットの一例が、次の通りである。
【数1】
【0342】
生成されたノードの1つ1つに対して生データを送信する代わりに、このデータは、値をグループ化することにより、また可能であれば適用可能なメタデータを用いて絶対的レイを作成することにより圧縮され得る。
【0343】
[レイデータのバンドル及びグループ化] フラグが共通データ又は修飾子を有するマスクに用いられ得る。
【数2】
例えば、RayPacket.rays=ray_1~ray_256
[原点は全て共有される]
【0344】
全てのレイデータは、単一の原点だけが全てのレイに対して格納されている場合を除いて、パックされている。RayPacket.flagsが、RAYPACKET_COMMON_ORIGINに設定される。RayPacketがアンパックされ、受信されると、複数の原点が単一の原点値から書き込まれる。
[原点が一部のレイの間だけで共有される]
【0345】
全てのレイデータが、原点を共有するレイを除いてパックされる。一意の共有原点のグループごとに、オペレーション(共有原点)を識別し、原点を格納し、どのレイが情報を共有するかをマスクする演算子がパックされる。そのようなオペレーションが、材料ID、プリミティブID、原点、方向、法線などの、複数のノードの間の任意の共有値に対して行われ得る。
【数3】
[絶対的レイの送信]
【0346】
多くの場合、レイデータが、レイデータを生成するのに最小限のメタ情報が用いられて受信側で得られ得る。非常に一般的な例が、複数の二次レイを生成して、ある領域を確率的にサンプリングしている。送信機が二次レイを生成し、当該二次レイを送信し、受信機が当該二次レイを処理する代わりに、送信機が、レイを生成する必要があるコマンドを任意の依存情報と共に送信することができ、当該レイが受信側で生成される。レイが送信機によってまず生成される必要があり、当該レイをどの受信機に送信するかを決定する場合、レイが生成され、完全に同じレイを再生成するようにランダムシードが送信され得る。
【0347】
例えば、面光源をサンプリングする64個のシャドーレイでヒットポイントをサンプリングするために、64個のレイが全て、同じコンピュートN4の領域と交差する。共通の原点及び法線を持つRayPacketが作成される。結果として得られるピクセル貢献度を受信機にシェーディングしてほしい場合に、より多くのデータが送信される可能性があるが、この例では、レイが別のノードデータにヒットするかどうかだけを返したいと仮定する。RayOperationがシャドーレイオペレーションを生成のために作成され、サンプリングされるlightIDの値及び乱数シードを割り当てられる。N4がレイパケットを受信すると、N4は、完全に満たされたレイデータを、共有原点データを全てのレイに書き込むことにより、また乱数シードで確率的にサンプリングされたlightIDに基づいて方向を設定することにより生成し、元の送信機が生成した同じレイを生成する。結果が返されると、レイごとのバイナリ結果だけが返される必要があり、このバイナリ結果は、レイを覆うマスクによって渡され得る。
【0348】
この例において、元の64個のレイを送信するとしたら、104バイト×64個のレイ=6656バイトを用いたであろう。返すレイが生の形態でも送信されるとすれば、これも2倍の13312バイトになる。共通レイ原点、法線、並びにシード及びIDを有するレイ生成オペレーションを送信するだけの可逆圧縮を用いて、29バイトだけが送信され、8バイトが交差したマスクに戻される。これにより、ネットワークを介して送信される必要があるデータ圧縮レートが、およそ360:1になる。これには、メッセージ自体を処理するオーバヘッドが含まれていない。このオーバヘッドは、何らかのやり方で識別される必要があるが、それは実施態様に委ねられている。他のオペレーションが、レイの原点と、一次レイのpixelIDからの方向とを再計算し、RayPacketの範囲と値の再計算についての多くの他の可能な実施態様とに基づいてpixelDを再計算するために行われてよい。同様のオペレーションが、送信される任意の単一又はグループのレイに用いられてよく、シャドー、反射、屈折、アンビエントオクルージョン、交差、ボリュームインターセクション、シェーディング、パストレーシングにおける跳ね返り反射などを含む。
【0349】
図37は、レイトレーシングパケットの圧縮及び伸張を行う2つのレイトレーシングノード3710~3711のさらなる詳細を示す。具体的には、第1のレイトレーシングエンジン3730がデータを第2のレイトレーシングエンジン3731に伝送する準備が整うと、レイ圧縮回路3720が、本明細書で説明されるレイトレーシングデータの不可逆圧縮及び/又は可逆圧縮を行う(例えば、32ビット値を8ビット値に変換する、データを再構築する命令の代わりに生データを用いるなど)。圧縮したレイパケット3701は、ネットワークインタフェース3725からネットワークインタフェース3726にローカルネットワーク(例えば、10Gb/s、100Gb/sイーサネット(登録商標)ネットワーク)を介して伝送される。次にレイ伸張回路が、適宜、レイパケットを伸張する。例えば、レイ伸張回路は、(例えば、ライティングオペレーションに対してランダムサンプリングを行うランダムシードを用いて)レイトレーシングデータを再構築するコマンドを実行してよい。次にレイトレーシングエンジン3731が、受信したデータを用いて、レイトレーシングオペレーションを行う。
【0350】
逆方向では、レイ圧縮回路3741がレイデータを圧縮し、圧縮したレイデータをネットワークインタフェース3726が(例えば、本明細書で説明される技術を用いて)ネットワークを介して伝送し、レイ伸張回路3740が必要に応じてレイデータを伸張し、レイトレーシングエンジン3730がレイトレーシングオペレーションにデータを用いる。
図37には別個のユニットとして示されているが、レイ伸張回路3740~3741はそれぞれ、レイトレーシングエンジン3730~3731に統合されてもよい。例えば、圧縮したレイデータがレイデータを再構築するコマンドを含む限りは、これらのコマンドは、それぞれのレイトレーシングエンジン3730~3731により実行されてよい。
【0351】
図38に示すように、レイ圧縮回路3720は、本明細書で説明される不可逆圧縮技術(例えば、32ビット浮動小数点座標を8ビット整数座標に変換する)を実行するための不可逆圧縮回路3801と、可逆圧縮技術(例えば、コマンド及びデータを伝送して、レイ再圧縮回路3821がデータを再構築することを可能にする)を実行するための可逆圧縮回路3803とを含んでよい。レイ伸張回路3721は、不可逆伸張回路3802と、可逆伸張を行うための可逆伸張回路3804とを含む。
【0352】
別の例示的方法が
図39に示されている。本方法は、本明細書で説明されるレイトレーシングアーキテクチャ又はその他アーキテクチャに実装されてよいが、いかなる特定のアーキテクチャにも限定されることはない。
【0353】
3900で、第1のレイトレーシングノードから第2のレイトレーシングノードに伝送されるレイデータが受信される。3901で、不可逆圧縮回路が第1のレイトレーシングデータに対して不可逆圧縮を行い、3902で、可逆圧縮回路が第2のレイトレーシングデータに対して可逆圧縮を行う。3903で、圧縮したレイトレーシングデータは、第2のレイトレーシングノードに伝送される。3904で、不可逆/可逆伸張回路が、レイトレーシングデータの不可逆/可逆伸張を行い、3905で、第2のレイトレーシングノードは、伸張したデータに対してレイトレーシングオペレーションを実行する。
[ハードウェアで加速したハイブリッドレイトレーシングを用いるグラフィックスプロセッサ]
【0354】
グラフィックスコア3130でのラスタ化と、レイトレーシングコア3150、グラフィックスコア3130、及び/又はCPUコア3199でのレイトレーシングオペレーションと行うハイブリッドレンダリングパイプラインが次に提示される。例えば、ラスタ化及び深度テストが、一次レイキャスティング段階の代わりにグラフィックスコア3130で行われてよい。次にレイトレーシングコア3150は、レイの反射、屈折、及びシャドーに対して二次レイを生成してよい。さらに、特定の実施形態では、レイトレーシングコア3150がレイトレーシングオペレーションを行うことになるシーンの特定の領域が(例えば、高反射率レベルなどの材料特性閾値に基づいて)選択され、当該シーンの他の領域がグラフィックスコア3130でのラスタ化でレンダリングされることになる。このハイブリッドな実施態様は、遅延が重大な問題となるリアルタイムのレイトレーシングアプリケーションに用いられ得る。
【0355】
後述するレイトラバーサルアーキテクチャは、例えば既存の単一命令多重データ(SIMD)及び/又は単一命令多重スレッド(SIMT)グラフィックスプロセッサを用いたレイトラバーサルのプログラム可能なシェーディング及び制御が行われるとともに、専用ハードウェアを用いた、BVHトラバーサル及び/又はインターセクションなどの重要機能が加速され得る。本実施形態において、インコヒーレントパスのSIMD占有率が、生成されるシェーダをトラバーサル時の特定の時点で且つシェーディングの前に再グループ化することにより向上し得る。これは、シェーダを動的にオンチップでソートする専用ハードウェアを用いて実現される。再帰法が、SIMD占有率の向上についての実行の前に、継続を返して再グループ化する際に実行する継続に機能を分割することにより管理される。
【0356】
レイトラバーサル/インターセクションのプログラム可能型制御は、トラバーサル機能を、固定機能ハードウェアとして実装され得る内部トラバーサルと、GPUプロセッサで実行され、ユーザ定義トラバーサルシェーダによるプログラム可能型制御を可能にする外部トラバーサルとに分解することにより実現される。トラバーサルコンテキストをハードウェアとソフトウェアとの間で転送するコストは、内部トラバーサルと外部トラバーサルとの間を移行する際に、内部トラバーサル状態を控えめに切り詰めることにより減少する。
【0357】
レイトレーシングのプログラム可能型制御は、以下のテーブルAに列挙される異なるシェーダの種類によって表され得る。種類ごとに複数のシェーダが存在し得る。例えば、各材料が、異なるヒットシェーダを持つことができる。
[テーブルA]
【表1】
【0358】
再帰的レイトレーシングが、グラフィックスプロセッサに一次シェーダセットを起動するよう命令するAPI機能又は一次レイに対するレイ-シーン間インターセクションを生成できるインターセクション回路によって開始され得る。これは次に、トラバーサルシェーダ、ヒットシェーダ、又はミスシェーダなどの他のシェーダを生成する。子シェーダを生成するシェーダが、子シェーダからの返り値も受信できる。コール可能なシェーダは、別のシェーダによって直接的に生成され得る汎用機能であり、コーリングシェーダにこれらの値を返すこともできる。
【0359】
図40は、シェーダ実行回路4000と固定機能回路4010とを含むグラフィックス処理アーキテクチャを示す。汎用実行ハードウェアサブシステムは、複数の単一命令多重データ(SIMD)及び/又は単一命令多重スレッド(SIMT)コア/実行ユニット(EU4001(つまり、各コアは複数の実行ユニットを含んでよい)と、1つ又は複数のサンプラ4002と、レベル1(L1)キャッシュ4003又は他の形態のローカルメモリとを含む。固定機能ハードウェアサブシステム4010は、メッセージユニット4004と、スケジューラ4007と、レイ-BVH間トラバーサル/インターセクション回路4005と、ソート回路4008と、ローカルL1キャッシュ4006とを含む。
【0360】
オペレーション時に、一次ディスパッチャ4009が一次レイのセットをスケジューラ4007にディスパッチし、スケジューラ4007は、SIMD/SIMTコア/EU4001で実行されるシェーダに作業をスケジューリングする。SIMDコア/EU4001は、上述したレイトレーシングコア3150及び/又はグラフィックスコア3130であってよい。一次シェーダの実行で、実行される(例えば、1つ又は複数の子シェーダ及び/又は固定機能ハードウェアにより実行される)追加の作業が生成される。メッセージユニット4004は、SIMDコア/EU4001により生成された作業をスケジューラ4007に分配し、必要に応じてフリースタックプール、ソート回路4008、又はレイ-BVH間インターセクション回路4005にアクセスする。追加の作業がスケジューラ4007に送信されない場合、追加の作業は、SIMD/SIMTコア/EU4001で処理するためにスケジューリングされる。スケジューリングする前に、ソート回路4008は、複数のレイを本明細書で説明される複数のグループ又はビンにソートしてよい(例えば、複数のレイを同様の特性でグループ化する)。レイ-BVH間インターセクション回路4005は、BVHボリュームを用いてレイのインターセクションテストを行う。例えば、レイ-BVH間インターセクション回路4005は、レイ座標を各レベルのBVHと比較して、レイが交差するボリュームを識別してよい。
【0361】
シェーダは、シェーダレコード、エントリ機能に対するポインタを含むユーザ割り当て構造、特定ベンダ向けメタデータ、SIMDコア/EU4001により実行されるシェーダに対するグローバル引数を用いて参照され得る。シェーダの各実行インスタンスは、親シェーダと子シェーダとの間で送られる引数を格納するのに用いられ得るコールスタックに関連している。コールスタックは、コールが戻ると実行される継続機能への参照も格納してよい。
【0362】
図41は、一次シェーダスタック、ヒットシェーダスタック、トラバーサルシェーダスタック、継続機能スタック、及びレイ-BVH間インターセクションスタック(これらは、説明したように、固定機能ハードウェア4010により実行されてよい)を含む割り当てスタック4101のセットの一例を示す。新しいシェーダ呼び出しが、フリースタックプール4102から新しいスタックを実装してよい。コールスタック、例えば、割り当てられたスタックのセットにより構成されるスタックは、アクセス遅延を減らすために、ローカルL1キャッシュ4003、4006にキャッシュされてよい。
【0363】
コールスタックの数は有限であり得、それぞれには、固定最大サイズ「Sstack」がメモリの連続した領域に割り当てられている。したがって、スタックのベースアドレスは、スタックインデックス(SID)から、ベースアドレス=SID×Sstackとして、直接的に計算され得る。SIMDコア/EU4001に作業をスケジューリングすると、スタックIDがスケジューラ4007により割り当てられ、また割り当てを解除され得る。
【0364】
一次ディスパッチャ4009は、ホスト(例えば、CPU)からのディスパッチコマンドに応答して、一次シェーダをディスパッチするグラフィックスプロセッサコマンドプロセッサを含み得る。スケジューラ4007は、これらのディスパッチ要求を受信し得、SIMDレーンごとにスタックIDを割り当てることができる場合、SIMDプロセッサスレッドで一次シェーダを起動し得る。スタックIDは、ディスパッチコマンドの初めに初期化されるフリースタックプール4102から割り当てられ得る。
【0365】
実行シェーダは、生成メッセージをメッセージユニット4004に送信することによって、子シェーダを生成できる。このコマンドは、シェーダに関連したスタックIDを含み、有効なSIMDレーンごとに子シェーダレコードに対するポインタも含む。親シェーダは、このメッセージを有効レーンに対して一度だけ発行できる。関連するレーン全てに生成メッセージを送信した後に、親シェーダが終了し得る。
【0366】
SIMDコア/EU4001で実行されるシェーダは、シェーダレコードポインタが固定機能ハードウェア用に予約された生成メッセージを用いて、レイ-BVH間インターセクションなどの固定機能タスクも生成できる。すでに述べたように、メッセージユニット4004は、生成されたレイ-BVH間インターセクション作業を固定機能のレイ-BVH間インターセクション回路4005に送信し、またコール可能なシェーダをソート回路4008に直接的に送信する。ソート回路は、シェーダレコードポインタでシェーダをグループ化して、同様の特性を持つSIMDバッチを得てもよい。したがって、異なる親シェーダからのスタックIDが、ソート回路4008によって同じバッチにグループ化され得る。ソート回路4008は、グループ化されたバッチをスケジューラ4007に送信し、スケジューラ4007は、グラフィックスメモリ2511又はラストレベルキャッシュ(LLC)4020からシェーダレコードにアクセスし、プロセッサスレッドでシェーダを起動する。
【0367】
継続がコール可能なシェーダとして扱われてよく、シェーダレコードによっても参照されてよい。子シェーダが生成され、親シェーダに値を返すと、継続シェーダレコードへのポインタが、コールスタック4101にプッシュされ得る。子シェーダが戻ると、継続シェーダレコードはコールスタック4101からポップされてよく、継続シェーダが生成され得る。任意選択的に、生成された継続は、コール可能なシェーダと同様のソートユニットを通って進み、プロセッサスレッドで起動し得る。
【0368】
図42に示すように、ソート回路4008は、生成されたタスクをシェーダレコードポインタ4201A、4201B、4201nによってグループ化して、シェーディング用のSIMDバッチを作成する。ソートされたバッチのスタックID又はコンテキストIDは、異なるディスパッチ及び異なる入力SIMDレーンからグループ化され得る。グループ化回路4210が、各エントリがタグ4201で識別される複数のエントリを含むコンテンツアドレス指定可能メモリ(CAM)構造4201を用いてソートを行い得る。すでに述べたように、タグ4201は、対応するシェーダレコードポインタ4201A、4201B、4201nであり得る。CAM構造4201は、それぞれがシェーダレコードポインタに対応する不完全なSIMDバッチに関連する限定された数のタグ(例えば32個、64個、128個など)を格納し得る。
【0369】
入ってくる生成コマンドに対して、各SIMDレーンは、対応するスタックID(各CAMエントリに16個のコンテキストID0~15として示されている)と、シェーダレコードポインタ4201A、B、…n(タグ値としての機能を果たす)とを有する。グループ化回路4210は、シェーダレコードポインタをレーンごとにCAM構造4201のタグ4201と比較して、一致するバッチを見つけ得る。一致するバッチが見つかった場合、スタックID/コンテキストIDはバッチに追加され得る。そうでなければ、新しいシェーダレコードポインタタグを有する新しいエントリが作成され、場合によっては、不完全なバッチを有する古いエントリを追い出し得る。
【0370】
実行シェーダは、割り当て解除メッセージをメッセージユニットに送信することで空になると、コールスタックを割り当て解除できる。割り当て解除メッセージは、有効なSIMDレーンのスタックID/コンテキストIDをフリープールに返すスケジューラに中継される。
【0371】
固定機能レイトラバーサルとソフトウェアレイトラバーサルとの組み合わせを用いて、レイトラバーサルオペレーション用のハイブリッドアプローチが提示される。その結果として、このハイブリッドアプローチは、ソフトウェアトラバーサルの柔軟性を提供するとともに、固定機能トラバーサルの効率性を維持する。
図43は、ハイブリッドトラバーサルに用いられ得るアクセラレーション構造を示す。ハイブリッドトラバーサルは2段階木であり、単一の上位レベルのBVH4300と、いくつかの下位レベルのBVH4301及び4302とがある。グラフィカル要素が右に示されており、内部トラバーサルパス4303と、外部トラバーサルパス4304と、トラバーサルノード4305と、三角形を有するリーフノード4306と、カスタムプリミティブを有するリーフノード4307とを示す。
【0372】
上位レベルのBVH4300にある三角形を有するリーフノード4306は、三角形、カスタムプリミティブのインターセクションシェーダレコード、又はトラバーサルシェーダレコードを参照できる。下位レベルのBVH4301~4302の、三角形を有するリーフノード4306は、三角形とカスタムプリミティブのインターセクションシェーダレコードだけを参照できる。参照の種類は、リーフノード4306内で符号化される。内部トラバーサル4303は、各BVH4300~4302内のトラバーサルのことを指す。内部トラバーサルオペレーションは、レイ-BVH間インターセクションの計算を含み、BVH構造4300~4302全体にわたるトラバーサルは外部トラバーサルとして知られている。内部トラバーサルオペレーションは、固定機能ハードウェアに効果的に実装されてよく、外部トラバーサルオペレーションは、プログラム可能型シェーダを用いて許容性能で行われてよい。その結果として、内部トラバーサルオペレーションが固定機能回路4010を用いて行われてよく、外部トラバーサルオペレーションがプログラム可能型シェーダを実行するためのSIMD/SIMTコア/EU4001を含むシェーダ実行回路4000を用いて行われ得る。
【0373】
なお、分かりやすくするために、本明細書ではSIMD/SIMTコア/EU4001は、単に「コア」、「SIMDコア」、「EU」、又は「SIMDプロセッサ」と呼ばれることがある。同様に、レイ-BVH間トラバーサル/インターセクション回路4005は、単に「トラバーサルユニット」、「トラバーサル/インターセクションユニット」又は「トラバーサル/インターセクション回路」と呼ばれることがある。代わりの用語を使用した場合でも、それぞれの回路/ロジックを示すのに使用される特定の名称が当該回路/ロジックが実行する本明細書に記載の基本的機能を変えるものではない。
【0374】
さらに、
図40では説明のために単一のコンポーネントとして示されているが、トラバーサル/インターセクションユニット4005は別個のトラバーサルユニットと、別個のインターセクションユニットとを含んでよく、そのそれぞれは、本明細書に記載の回路及び/又はロジック内に実装されてよい。
【0375】
内部トラバーサルの際にレイがトラバーサルノードと交差すると、トラバーサルシェーダが生成され得る。ソート回路4008は、シェーダレコードポインタ4201A、B、…nによってこれらのシェーダをグループ化し、グラフィックスSIMDコア/EU4001でのSIMD実行のために、スケジューラ4007により起動されるSIMDバッチを作成し得る。トラバーサルシェーダは、いくつかのやり方でトラバーサルを修正でき、幅広い範囲のアプリケーションを可能にする。例えば、トラバーサルシェーダは、粗い詳細度(LOD)でBVHを選択できる、又はレイを変換して剛体変換を可能にすることができる。次にトラバーサルシェーダは、選択したBVH用の内部トラバーサルを生成し得る。
【0376】
内部トラバーサルは、BVHをトラバースして、レイ-ボックス間インターセクション及びレイ-三角形間インターセクションを計算することにより、レイ-BVH間インターセクションを計算する。内部トラバーサルは、メッセージをメッセージ回路4004に送信することにより、シェーダと同じ方式で生成される。メッセージ回路4004は、レイ-BVH間インターセクションを計算するレイ-BVH間インターセクション回路4005に、対応する生成メッセージを中継する。
【0377】
内部トラバーサル用のスタックは、固定機能回路4010に(例えば、L1キャッシュ4006に)ローカルに格納され得る。トラバーサルシェーダ又はインターセクションシェーダに対応するリーフノードとレイが交差すると、内部トラバーサルが終了し、内部スタックが切り詰められ得る。レイ及びBVHへのポインタと共に、切り詰められたスタックは、コーリングシェーダにより指定された位置でメモリに書き込まれてよく、次いで、対応するトラバーサルシェーダ又はインターセクションシェーダが生成されてよい。内部トラバーサル時にレイが任意の三角形と交差した場合、対応するヒット情報は、以下のコードに示すこれらのシェーダに入力引数として提供され得る。生成されたこれらのシェーダは、ソート回路4008によりグループ化され、実行用のSIMDバッチを形成し得る。
【数4】
【0378】
内部トラバーサルスタックを切り詰めることで、内部トラバーサルスタックをメモリにスピルするコストが減少する。Restart Trail for Stackless BVH Traversal』(High Performance Graphics (2010), pp. 107~111)で説明されているアプローチを、スタックの先頭でスタックを少数のエントリに、つまり42ビットリスタートトレイル及び6ビットデプス値に切り詰めるのに適用され得る。リスタートトレイルは、BVH内部に既に取り込まれている分岐を示し、デプス値は、最後のスタックエントリに対応するトラバーサルの深度を示す。これは、内部トラバーサルを後で再開するのに十分な情報である。
【0379】
内部トラバーサルは、内部スタックが空になり、テストするBVHノードがこれ以上ない場合に完了する。この場合、外部スタックの先頭をポップする外部スタックハンドラが生成され、外部スタックが空でなければ、トラバーサルを再開する。
【0380】
外部トラバーサルが主なトラバーサルステートマシンを実行し得、シェーダ実行回路4000により実行されるプログラムコードに実装され得る。シェーダ実行回路4000は、以下の条件下で内部トラバーサルクエリを生成し得る。すなわち、(1)新しいレイがヒットシェーダ又は一次シェーダにより生成された場合、(2)トラバーサルシェーダがトラバーサル用にBVHを選択した場合、(3)外部スタックハンドラがBVHの内部トラバーサルを再開した場合である。
【0381】
図44に示すように、内部トラバーサルが生成される前に、固定機能回路4010のコールスタック4405に空間が割り当てられ、切り詰められた内部スタック4410を格納する。コールスタック及び内部スタックの先頭に対するオフセット4403~4404が、メモリ2511にも格納されるトラバーサル状態4400に維持される。トラバーサル状態4400は、ワールド空間4401及びオブジェクト空間4402、並びに最も近い交差プリミティブのヒット情報にもレイを含む。
【0382】
トラバーサルシェーダ、インターセクションシェーダ、及び外部スタックハンドラは全て、レイ-BVH間インターセクション回路4005により生成される。トラバーサルシェーダは、第2レベルのBVHの新しい内部トラバーサルを開始する前に、コールスタック4405に対して割り当てを行う。外部スタックハンドラは、ヒット情報を更新し、また任意の保留中の内部トラバーサルタスクを再開する役割を担うシェーダである。外部スタックハンドラは、トラバーサルが完了した場合、ヒットシェーダ又はミスシェーダを生成する役割も担う。トラバーサルは、生成する保留中の内部トラバーサルクエリがない場合に完了する。トラバーサルが完了し且つ交差が見つかった場合、ヒットシェーダが生成され、見つからなければミスシェーダが生成される。
【0383】
上述したハイブリッドトラバーサル方式は2段階のBVH階層を用いているが、本明細書で説明される本発明の実施形態は、外部トラバーサルの実施態様において対応する変更を伴った、任意の数のBVHレベルを用いてもよい。
【0384】
さらに、固定機能回路4010は、上述の実施形態でレイ-BVH間インターセクションを行うように説明されているが、他のシステムコンポーネントも固定機能回路に実装されてよい。例えば、上述した外部スタックハンドラは、場合によっては固定機能BVHトラバーサル/インターセクション回路4005に実装され得る内蔵(ユーザには見えない)シェーダであってよい。この実施態様は、ディスパッチシェーダ段階の数と、固定機能インターセクションハードウェア4005とプロセッサとの間のやり取りを減らすのに用いられてよい。
【0385】
本明細書に記載の例は、既存及び将来のGPUプロセッサにおいて高いSIMD効率で実行できるユーザ定義機能を用いて、プログラム可能型シェーディング及びレイトラバーサル制御を可能にする。レイトラバーサルのプログラム可能型制御によって、手続き型インスタンシング、確率レベルの詳細選択、カスタムプリミティブインターセクション、及びレイジーBVH更新などのいくつかの重要な機能が可能になる。
【0386】
ヒット及びインターセクションシェーダの投機的実行をサポートする、プログラム可能な、複数命令複数データ(MIMD)レイトレーシングアーキテクチャも提供される。具体的には、アーキテクチャは、
図40に関連して上述したプログラム可能SIMD/SIMTコア/実行ユニット4001と、ハイブリッドレイトレーシングアーキテクチャ内の固定機能MIMDトラバーサル/インターセクションユニット4005との間のスケジューリング及び通信オーバヘッド低減を主目的とする。トラバーサルハードウェアから単一のバッチでディスパッチ可能で、いくつかのトラバーサル及びシェーディングのやり取りを避ける、ヒット及びインターセクションシェーダの複数の投機的実行方式が後述される。これら技術の実施に、専用回路が使用され得る。
【0387】
本発明の実施形態が特に有益なのは、専用のハードウェアサポート無しで実施された場合に著しいオーバヘッドが生じるレイトラバーサルクエリから、複数ヒット又はインターセクションシェーダの実行が求められているユースケースである。これらは、限定されることはないが、k近傍ヒットクエリ(k近傍インターセクションに対してヒットシェーダを起動する)、及び複数のプログラム可能インターセクションシェーダを含む。
【0388】
本明細書に記載の技術は、
図40に示された(そして
図40~44に関連して説明された)アーキテクチャの拡張として実施され得る。具体的には、本発明の本実施形態は、上述のユースケースにて、性能を向上するような改良をもって、このアーキテクチャ上に構築される。
【0389】
ハイブリッドレイトレーシングトラバーサルアーキテクチャの性能を限定するのは、実行ユニットからのトラバーサルクエリを開始する時のオーバヘッドと、レイトレーシングハードウェアからのプログラム可能型シェーダを呼び出す時のオーバヘッドが挙げられる。同じレイのトラバーサル時に複数ヒット又はインターセクションシェーダの呼び出しが生じると、このオーバヘッドはプログラム可能コア4001及びトラバーサル/インターセクションユニット4005間の「実行やり取り」を発生させる。これは、個々のシェーダ呼び出しから一貫性のあるSIMD/SIMTを抽出する必要のあるソートユニット4008にもさらなる圧力をかけることになる。
【0390】
レイトレーシングのいくつかの態様は、上述のテーブルAに列挙された異なるシェーダ種類による表現可能なプログラム可能型制御を必要とする(すなわち、Primary、Hit、Any Hit、Miss、Intersection、Traversal、Callable)。種類ごとに複数のシェーダが存在し得る。例えば、各材料が、異なるヒットシェーダを持ち得る。これらのシェーダ種類のいくつかは、現在のマイクロソフト(登録商標)レイトレーシングAPIで定義されている。
【0391】
簡潔にいうと、再帰的レイトレーシングは、一次レイに対してレイ-シーン間インターセクション(ハードウェア及び/又はソフトウェア内に実装)を生成可能な、一次シェーダのセットを起動するように、GPUに命令するAPI機能により開始される。これにより、トラバーサルシェーダ、ヒットシェーダ、又はミスシェーダなどの他のシェーダが生成され得る。子シェーダを生成するシェーダが、子シェーダからの返り値も受信できる。コール可能なシェーダは、別のシェーダによって直接的に生成され得る汎用機能であり、コーリングシェーダにこれらの値を返すこともできる。
【0392】
レイトラバーサルは、バウンディングボリューム階層(BVH)内のノードのトラバース及び交差により、レイ-シーン間インターセクションを計算する。最近の研究により、低精度演算、BVH圧縮、レイ毎ステートマシン、専用インターセクションパイプライン、及びカスタムキャッシュなどの、固定機能ハードウェアにより適した技術を利用することで、コンピューティングレイ-シーン間インターセクションの効率が1桁以上向上し得ることが示されている。
【0393】
図40に示すアーキテクチャは、SIMD/SIMTコア/実行ユニット4001のアレイが、固定機能レイトレーシング/インターセクションユニット4005と相互作用することで、プログラム可能レイトレーシングを実行するようなシステムを備える。プログラム可能型シェーダは、実行ユニット/コア4001のSIMD/SIMTスレッドにマッピングされる。ここで、最適な性能のために、SIMD/SIMT利用、実行、データ一貫性が重要となる。以下のような様々な理由により、レイクエリが一貫性を損ねることが多い。
・トラバーサルに関するばらつき:BVHトラバーサルの期間は、非同期的レイ処理が望ましいレイ間で大きく異なる。
・実行に関するばらつき:同じSIMD/SIMTスレッドの異なるレーンで生成されたレイにより、異なるシェーダ呼び出しがもたらされ得る。
・データアクセスに関するばらつき:例えば、異なる表面にヒットするレイにより、異なるBVHノード及びプリミティブがサンプリングされ、シェーダが異なるテクスチャにアクセスする。様々な他の状況により、データアクセスのばらつきが生じ得る。
【0394】
SIMD/SIMTコア/実行ユニット4001は、グラフィックスコア(複数可)415A~415B、シェーダコア1355A~N、グラフィックスコア3130、グラフィックス実行ユニット608、実行ユニット852A~Bを含む本明細書に記載のコア/実行ユニット、又は本明細書に記載の任意の他のコア/実行ユニットの変形であり得る。SIMD/SIMTコア/実行ユニット4001は、グラフィックスコア(複数可)415A~415B、シェーダコア1355A~N、グラフィックスコア3130、グラフィックス実行ユニット608、実行ユニット852A~B、又は本明細書に記載の任意の他のコア/実行ユニットの代わりに使用され得る。したがって、グラフィックスコア(複数可)415A~415B、シェーダコア1355A~N、グラフィックスコア3130、グラフィックス実行ユニット608、実行ユニット852A~B、又は本明細書に記載の任意の他のコア/実行ユニットと組み合わせた任意の特徴の開示は、
図40のSIMD/SIMTコア/実行ユニット4001との対応する組み合わせも開示するものであるが、そのように限定されることはない。
【0395】
固定機能レイトレーシング/インターセクションユニット4005は、各レイを個々に又は順不同で処理することで、最初の2つの問題を克服し得る。しかしこれが、SIMD/SIMTグループを壊してしまう。したがって、ソートユニット4008は、実行ユニットに再度ディスパッチされる、シェーダ呼び出しの新しい一貫性のあるSIMD/SIMTグループの形成を担う。
【0396】
純然たるソフトウェア型レイトレーシング実施態様の、SIMD/SIMTプロセッサへの直接実装と比較した場合の、このようなアーキテクチャの利点を見出すことは容易である。しかしながら、同アーキテクチャはSIMD/SIMTコア/実行ユニット4001(本明細書において、単にSIMD/SIMTプロセッサ又はコア/EUと呼ばれることがある)と、MIMDトラバーサル/インターセクションユニット4005との間のメッセージやり取りに関連するオーバヘッドを伴ってしまう。さらに、ソートユニット4008は、一貫性の欠如したシェーダ呼び出しの場合に、完全なSIMD/SIMT利用を抽出しない場合があり得る。
【0397】
トラバーサル時に、特にシェーダ呼び出しが頻繁になり得るユースケースが特定され得る。コア/EU4001と、トラバーサル/インターセクションユニット4005との間の通信のオーバヘッドを大幅に低減する、ハイブリッドMIMDレイトレーシングプロセッサの改良について説明する。これは、k近傍インターセクション及びプログラム可能インターセクションシェーダの実施態様の発見に関して、特に有益となり得る。しかし、本明細書に記載の技術が、いかなる特定の処理状況に限定されないことに留意されたい。
【0398】
コア/EU4001と、固定機能トラバーサル/インターセクションユニット4005との間のレイトレーシングコンテキストスイッチの高水準コストの概要が、以下に提供される。パフォーマンスオーバヘッドの大部分が、これらの2つのコンテキストスイッチによって、単一のレイトラバーサル時にシェーダ呼び出しが必要となるたびに引き起こされる。
【0399】
レイを起動する各SIMD/SIMTレーンは、トラバースするBVHに関連付けられたトラバーサル/インターセクションユニット4005への生成メッセージを生成する。データ(レイトラバーサルコンテキスト)は、生成メッセージ及び(キャッシュ)メモリを介してトラバーサル/インターセクションユニット4005に中継される。新しいハードウェアスレッドを生成メッセージに割り当てる準備が整うと、トラバーサル/インターセクションユニット4005はトラバーサル状態をロードし、BVHにトラバーサルを行う。BVHへの第1トラバーサル段階の前に実行することが必要なセットアップにもコストがかかる。
【0400】
図45は、プログラム可能レイトレーシングパイプラインの動作フローを示す。トラバーサル4502及びインターセクション4503を含む網掛けした要素は、固定機能回路内に実装されてよく、残りの要素は、プログラム可能コア/実行ユニットとともに実装されてよい。
【0401】
4502で一次レイシェーダ4501は、BVH(又はその他アクセラレーション構造)に現在のレイ(複数可)をトラバースするトラバーサル回路に作業を送信する。リーフノードに到達すると、4503でトラバーサル回路はインターセクション回路を呼び出す。インターセクション回路は、レイ-三角形間インターセクションを識別すると、4504でany-hitシェーダを呼び出す(これは示されているように、結果をトラバーサル回路に戻すように提供し得る)。
【0402】
あるいは、トラバーサルはリーフノード到達前に終了してよく、4507でclosest-hitシェーダが呼び出される(ヒットが記録された場合)、又は4506でミスシェーダが呼び出される(ミスの場合)。
【0403】
4505に示すように、トラバーサル回路がカスタムプリミティブリーフノードに到達すると、インターセクションシェーダが呼び出され得る。カスタムプリミティブは、多角形又は多面体(例えば、四面体、ボクセル、六面体、ウェッジ、角錐、又はその他「非構造的」ボリューム)などの、任意の非三角形プリミティブであり得る。インターセクションシェーダ4505は、レイ及びカスタムプリミティブから、Any Hit処理を実施するany-hitシェーダ4504への任意の交差を識別する。
【0404】
ハードウェアトラバーサル4502がプログラム可能段階に到達すると、トラバーサル/インターセクションユニット4005は、シェーダを実行するのに用いられる実行ユニット(複数可)の単一SIMDレーンに対応する、関連シェーダ4505~4507へのシェーダディスパッチメッセージを生成し得る。ディスパッチは、レイの任意の順番で生じ、呼び出すプログラムに関して異なるため、ソートユニット4008は、一貫性のあるSIMDバッチを抽出するため、複数のディスパッチコールを蓄積してもよい。トラバーサル/インターセクションユニット4005により、更新されたトラバーサル状態及び任意選択のシェーダ引数は、メモリ2511に書き込まれ得る。
【0405】
k近傍インターセクション問題では、closest-hitシェーダ4507が最初のk個の交差に対して実行される。従来の手法だと、これは最も近い交差を発見するとレイトラバーサルが終了し、ヒットシェーダが呼び出され、次に最も近い交差を見つけるため新しいレイがヒットシェーダから生成されることを意味する(同じ交差が再度生じないように、レイ原点はずらす)。この実施態様の場合、単一のレイに対し、k個のレイの生成が必要であることは容易に理解できるだろう。別の実施態様は、挿入ソート演算を用いて、全ての交差について呼び出され、最も近い交差のグローバルリストを維持するany-hitシェーダ4504で動作する。このアプローチの主問題は、any-hitシェーダ呼び出しに対して上限がないことである。
【0406】
すでに述べたように、インターセクションシェーダ4505は非三角形(カスタム)プリミティブに対して呼び出され得る。インターセクションテストの結果及びトラバーサル状態(保留ノード及びプリミティブ交差)に応じて、インターセクションシェーダ4505の実行後にも、同じレイのトラバーサルが継続し得る。したがって、Closest Hitを見つけるには、実行ユニットとのいくつかのやり取りが必要となり得る。
【0407】
トラバーサルハードウェア及びシェーダスケジューリングモデルへの変更を通じて、インターセクションシェーダ4505及びヒットシェーダ4504、4507に対するSIMD-MIMDコンテキストスイッチ低減にも主眼を置いてもよい。まず、レイトラバーサル回路4005が生じ得る複数の呼び出しを蓄積し、それをより大きなバッチにディスパッチすることで、シェーダ呼び出しを延期する。さらに、この段階で、不必要となった特定の呼び出しを間引きしてもよい。さらに、シェーダスケジューラ4007は、単一のレイ生成メッセージとなるように、同じトラバーサルコンテキストからの複数のシェーダ呼び出しを単一のSIMDバッチに集約してもよい。1つの例示的な実施態様において、トラバーサルハードウェア4005はトラバーサルスレッドを保留し、複数のシェーダ呼び出しの結果を待つ。このオペレーションモードが本明細書で「投機的」シェーダ実行と呼ばれるのは、複数のシェーダのディスパッチを可能とするからであり、その一部は、連続呼び出しを用いる場合は呼び出されなくてもよい。
【0408】
図46Aは、トラバーサルオペレーションが部分木における複数のカスタムプリミティブ4650に遭遇する例を示し、
図46Bは、3つのインターセクションディスパッチサイクルC1~C3でこれがどのように解消可能かの一例を示す。具体的には、スケジューラ4007はSIMDプロセッサ4001に作業を送信するのに3つのサイクルを要し得、トラバーサル回路4005はソートユニット4008に結果を提供するのに3つのサイクルを要する。トラバーサル回路4005が必要とするトラバーサル状態4601は、ローカルキャッシュ(例えば、L1キャッシュ及び/又はL2キャッシュ)などのメモリ内に格納され得る。
A.延期されたレイトレーシングシェーダ呼び出し
【0409】
リスト内に複数生じ得るインターセクション又はヒット呼び出しを蓄積可能とするように、ハードウェアトラバーサル状態4601を管理する方法も修正可能である。トラバーサル時の所与の時間において、シェーダ呼び出しを生成するのに、リスト内の各エントリが利用され得る。例えば、k近傍インターセクションポイントがトラバーサルハードウェア4005上、及び/又はメモリ内のトラバーサル状態4601内に蓄積可能であり、トラバーサル完了をもって、要素ごとに対してヒットシェーダが呼び出し可能である。ヒットシェーダについて、複数の生じ得るインターセクションがBVH内の部分木に対して蓄積され得る。
【0410】
k近傍ユースケースに対するこのアプローチの利点は、SIMDコア/EU4001へのk-1回のやり取りと、k-1個の新しいレイ生成メッセージの代わりに、トラバーサル回路4005上の単一のトラバーサルオペレーション時に同じトラバーサルスレッドから全てのヒットシェーダが呼び出されることである。あり得る実施態様の課題として、ヒットシェーダの実行順序の保証が無視できないことが挙げられる(標準的な「やり取り」の手法は、最も近いインターセクションのヒットシェーダがまず実行されることが保証されるなど)。これは、ヒットシェーダの同期又は順番付けの緩和により対処され得る。
【0411】
インターセクションシェーダユースケースに関して、トラバーサル回路4005は所与のシェーダが肯定的なインターセクションテストを戻すか否かを事前に把握していない。しかしながら、投機的に複数のインターセクションシェーダを実行することは可能で、少なくとも1つが肯定的なヒット結果を返す場合、それはグローバル最近傍ヒットに統合される。特定の実施態様では、最適な数の延期インターセクションテストを見つけて、ディスパッチの数を減らすが、冗長なインターセクションシェーダを間引きしすぎることを避ける必要がある。
B.トラバーサル回路からの集約シェーダ呼び出し
【0412】
トラバーサル回路4005上に生成された同じレイから複数のシェーダをディスパッチする場合、レイトラバーサルアルゴリズムのフローに分岐が生じ得る。これは、残りのBVHトラバーサルが全てのディスパッチされたインターセクションテストの結果に依存するため、インターセクションシェーダにとって問題となり得る。つまり、シェーダ呼び出しの結果を待つのに同期オペレーションが必要となるが、それは非同期的ハードウェアにとっては困難になり得る。
【0413】
シェーダ呼び出しの結果をマージする2つのポイントが、SIMDプロセッサ4001及びトラバーサル回路4005であってよい。標準的なプログラミングモデルを使用して、SIMDプロセッサ4001に関連して、複数のシェーダからの結果が同期かつ集約可能である。これを実現するための比較的簡潔な方法の1つが、グローバルアトミクスを利用してメモリ内の共有データ構造内に結果を集約することであり、複数のシェーダのインターセクション結果を格納することができる。そして、最後のシェーダが、データ構造を解消し、トラバーサルを継続するため、トラバーサル回路4005を呼び戻し可能である。
【0414】
より効率的なアプローチも実装され得る。即ち、SIMDプロセッサ4001上の同じSIMDスレッドのレーンへの複数のシェーダ呼び出しの実行を制限するものである。そしてSIMD/SIMT低減オペレーションを使用することで(グローバルアトミクスに依存するのではなく)、インターセクションテストがローカルに低減される。この実施態様は、同じSIMDバッチ内にシェーダ呼び出しの小バッチが留まるように、ソートユニット4008内の新しい回路に依存し得る。
【0415】
トラバーサルスレッドの実行は、さらにトラバーサル回路4005上で保留され得る。従来の実行モデルを使用して、トラバーサル時にシェーダがディスパッチされると、トラバーサルスレッドが終了し、レイトラバーサル状態がメモリに保存され、実行ユニット4001のシェーダ処理時に、その他レイ生成コマンドの実行が可能となる。単純にトラバーサルスレッドが保留されると、トラバーサル状態は格納される必要はなく、シェーダ結果ごとに別個に待つことができる。この実施態様は、行き詰まりを避け、十分なハードウェア利用を提供するための回路を含み得る。
【0416】
図47~48は、3つのシェーダ4701を有するSIMDコア/実行ユニット4001で単一のシェーダ呼び出しを生じさせる延期モデルの例を示す。全てのインターセクションテストは保存されると、同じSIMD/SIMTグループ内で評価される。その結果として、最も近い交差もプログラム可能コア/実行ユニット4001上で計算可能である。
【0417】
すでに述べたように、シェーダ集約及び/又は延期の全て又は一部は、トラバーサル/インターセクション回路4005及び/又はコア/EUスケジューラ4007により実行され得る。
図47は、スケジューラ4007内のシェーダ延期/集約回路4706がどのように、指定されたトリガリングイベントが起きるまで、特定のSIMD/SIMTスレッド/レーンに関連付けられたシェーダのスケジューリングを延期可能かを示す。トリガリングイベントが検出されると、スケジューラ4007は単一のSIMD/SIMTバッチ内の複数の集約シェーダを、コア/EU4001にディスパッチする。
【0418】
図48は、トラバーサル/インターセクション回路4005内のシェーダ延期/集約回路4805がどのように、指定のトリガリングイベントが起きるまで、特定のSIMDスレッド/レーンに関連付けられたシェーダのスケジューリングを延期可能かを示す。トリガリングイベントが検出されると、トラバーサル/インターセクション回路4005は集約シェーダを単一のSIMD/SIMTバッチ内のソートユニット4008に送信する。
【0419】
ただし、シェーダ延期及び集約技術はソートユニット4008などの様々な他のコンポーネントで実施され得る、又は複数のコンポーネント間で分散され得ることに留意されたい。例えば、SIMDスレッドに対するシェーダが、効率的にコア/EU4001上にスケジューリングされることを保証するため、トラバーサル/インターセクション回路4005は第1セットのシェーダ集約オペレーションを実行し得、スケジューラ4007は第2セットのシェーダ集約オペレーションを実行し得る。
【0420】
コア/EUに集約されたシェーダをディスパッチさせる「トリガリングイベント」は、特定の数の集約シェーダ又は、特定のスレッドに関連付けられた最小遅延などの処理イベントであり得る。あるいは又はさらに、トリガリングイベントは、第1シェーダの延期からの特定の期間又は特定の数のプロセッササイクルなどの、時間的イベントであり得る。シェーダのSIMD/SIMTバッチをいつディスパッチするかを判定するため、スケジューラ4007はコア/EU4001及びトラバーサル/インターセクションユニット4005への現在のワークロードなどのその他変数も評価し得る。
【0421】
使用される特定のシステムアーキテクチャと、用途の要件に基づいて、上述のアプローチの異なる組み合わせを使用し、本発明の異なる実施形態が実装され得る。
[レイトレーシング命令]
【0422】
CPU3199及び/又はGPU3105がサポートする命令セットアーキテクチャ(ISA)に、以下に記載のレイトレーシング命令が含まれる。CPUにより実行されると、単一命令多重データ(SIMD)命令は記載のオペレーションを実行するため、ベクトル/パックソース及びデスティネーションレジスタを利用し得、CPUコアにより復号及び実行され得る。GPU3105により実行されると、命令はグラフィックスコア3130により実行され得る。例えば、上述の実行ユニット(EU)4001のうちのいずれかが、命令を実行し得る。あるいは又はさらに、命令はレイトレーシングコア3150及び/又はテンソルコア3140上の実行回路で実行され得る。
【0423】
図49は、以下に記載のレイトレーシング命令を実行するためのアーキテクチャを示す。図示のアーキテクチャは、上述のコア3130、3140、3150のうちの1つ又は複数内(例えば、
図31及び関連テキストを参照されたい)に統合されてもよく、異なるプロセッサアーキテクチャ内に含まれてもよい。
【0424】
オペレーション中、命令フェッチユニット4903はメモリ3198からレイトレーシング命令4900をフェッチし、復号器4995は命令を復号する。1つの実施態様において、復号器4995は命令を復号することで、実行可能動作(例えば、マイクロコードコア内のマイクロオペレーション(すなわち、マイクロオペ))を生成する。あるいは、レイトレーシング命令4900の一部又は全てが、復号無しで実行され得、その場合、復号器4904は不要である。
【0425】
いずれの実施態様でも、スケジューラ/ディスパッチャ4905が機能ユニット(FU)4910~4912のセット間で、命令(又はオペレーション)をスケジューリング及びディスパッチする。図示の実施態様は、ベクトルレジスタ4915内に格納された複数のパックドデータ要素上で同時に動作する単一命令多重データ(SIMD)命令を実行するためのベクトルFU4910と、1つ又は複数のスカラレジスタ4916内に格納されたスカラ値を処理するスカラFU4911とを含む。任意選択のレイトレーシングFU4912は、ベクトルレジスタ4915内に格納されたパックデータ値及び/又はスカラレジスタ4916内に格納されたスカラ値を処理し得る。専用FU4912のない実施態様では、以下に記載のレイトレーシング命令がベクトルFU4910及び、場合によってはスカラFU4911とともに実行され得る。
【0426】
各種FU4910~4912は、ベクトルレジスタ4915、スカラレジスタ4916及び/又はローカルキャッシュサブシステム4908(例えば、L1キャッシュ)から、レイトレーシング命令4900の実行に必要なレイトレーシングデータ4902(例えば、トラバーサル/インターセクションデータ)にアクセスする。FU4910~4912はさらに、ロードオペレーション及びストアオペレーションを介してメモリ3198にアクセスを行ってよく、キャッシュサブシステム4908は、データをローカルにキャッシュするため、独立して動作し得る。
【0427】
レイトラバーサル/インターセクション及びBVH構築の性能向上のために、レイトレーシング命令が使用され得るが、これらはさらに高性能コンピューティング(HPC)及び汎用GPU(GPGPU)実施態様などのその他領域にも適用可能であり得る。
【0428】
以下の説明において、ダブルワードという用語をdwと省略することがあり、符号なしバイトはubと省略され得る。さらに、以下に記載のソース及びデスティネーションレジスタ(例えば、src0、src1、dest、など)は、ベクトルレジスタ4915、又は場合によってはベクトルレジスタ4915及びスカラレジスタ4916の組み合わせを指し得る。通常、命令により使用されるソース又はデスティネーション値がパックドデータ要素を含む場合(例えば、ソース又はデスティネーションがN個のデータ要素を格納する場合)、ベクトルレジスタ4915が使用される。その他値がスカラレジスタ4916又はベクトルレジスタ4915を使用し得る。
[量子化解除]
【0429】
量子化解除命令の1つの例は、すでに量子化された値を「量子化解除」する。例示の目的で、レイトレーシング実施態様では、ストレージ要件及び帯域幅要件を軽減するため、特定のBVH部分木が量子化され得る。量子化解除命令は、量子化解除dest src0 src1 src2の形態を採り得る。即ち、ソースレジスタsrc0がN個の符号なしバイトを格納し、ソースレジスタsrc1が1つの符号なしバイトを格納し、ソースレジスタsrc2が1つの浮動小数点値を格納し、デスティネーションレジスタdestがN個の浮動小数点値を格納する。これら全てのレジスタが、ベクトルレジスタ4915であり得る。あるいは、src0及びdestがベクトルレジスタ4915であり得、src1及びsrc2がスカラレジスタ4916であり得る。
【0430】
以下のコードシーケンスは、量子化解除命令の1つの特定の実施態様を定義する。
【数5】
この例では、ldexpにより、倍精度浮動小数点値が、指定された2の整数べき乗で乗算される(つまり、ldexp(x、exp)=x*2
exp)。上述のコードにおいて、現在のSIMDデータ要素(execMask[i]))に関連付けられた実行マスク値が1に設定されると、src0における位置iのSIMDデータ要素は、浮動小数点値に変換され、src1(2
src1 value)の値のべき乗で乗算され、この値がsrc2における対応するSIMDデータ要素に加えられる。
[選択的最小又は最大]
【0431】
選択的最小又は最大命令は、ビットマスク内のビットで示されるように、レーン毎の最小又は最大演算を実行し得る(つまり、値のセットの最小又は最大を返す)。ビットマスクは、ベクトルレジスタ4915、スカラレジスタ4916、又はマスクレジスタの別個のセット(不図示)を利用し得る。以下のコードシーケンスは、min/max命令の1つの特定の実施態様を定義する。即ち、sel_min_max dest src0 src1 src2で、src0はN個のダブルワードを格納し、src1はN個のダブルワードを格納し、src2は1つのダブルワードを格納し、デスティネーションレジスタはN個のダブルワードを格納する。
【0432】
以下のコードシーケンスは、選択的min/max命令の1つの特定の実施態様を定義する。
【数6】
この例において、(1<<i)&src2(iとsrc2とのANDをとることで1つ左シフトする)の値を使用して、src0及びsrc1におけるi番目データ要素の最小、又はsrc0及びsrc1におけるi番目データ要素の最大のいずれが選択される。現在のSIMDデータ要素(execMask[i]))に関連付けられた実行マスク値が1に設定された場合にのみ、i番目データ要素に対して演算が行われる。
[シャッフルインデックス命令]
【0433】
シャッフルインデックス命令は、入力レーンの任意のセットを出力レーンにコピー可能である。32のSIMD幅に対して、この命令はより低いスループットで実行可能である。この命令はshuffle_インデックスdest src0 src1<任意選択フラグ>の形態を採り、src0はN個のダブルワードを格納し、src1はN個の符号なしバイト(つまり、インデックス値)を格納し、destはN個のダブルワードを格納する。
【0434】
以下のコードシーケンスは、シャッフルインデックス命令の1つの特定の実施態様を定義する。
【数7】
【0435】
上述のコードでは、src1内のインデックスにより現在のレーンが識別される。実行マスク内のi番目値が1に設定されると、ソースレーンが0からSIMD幅の範囲であることを保証するように、チェックが実行される。その場合、フラグが設定され(srcLaneMod)、デスティネーションのデータ要素iがsrc0のデータ要素iに等しくなるように設定される。レーンが範囲内であると(つまり有効)、src1からのインデックス値(srcLane0)がsrc0(dst[i]=src0[srcLane])内へのインデックスに使用される。
[即時シャッフルUp/Dn/XOR命令]
【0436】
即時シャッフル命令は、命令の即値に基づいて、入力データ要素/レーンをシャッフルし得る。即時は、即値に基づいて、入力レーンを、1、2、4、8、又は16位置シフトすることを指定し得る。任意選択で、追加のスカラソースレジスタを充填値として指定可能である。ソースレーンインデックスが無効であれば、充填値(提供されている場合)がデスティネーションのデータ要素位置に格納される。充填値が提供されていない場合、データ要素位置は全て0に設定される。
【0437】
フラグレジスタをソースマスクとして使用してもよい。ソースレーンに対するフラグビットが1に設定されている場合、ソースレーンは無効とマークされてよく、命令が進められてよい。
【0438】
以下に即時シャッフル命令の異なる実施態様例を挙げる。
【数8】
この実施態様では、src0はN個のダブルワードを格納し、src1は充填値(存在する場合)に対して1つのダブルワードを格納し、destは結果を含むN個のダブルワードを格納する。
【0439】
以下のコードシーケンスは、即時シャッフル命令の1つの特定の実施態様を定義する。
【数9】
【0440】
ここで、即値に基づいて、入力データ要素/レーンが1、2、4、8、又は16位置シフトされる。レジスタsrc1は、ソースレーンインデックスが無効の場合に、デスティネーションのデータ要素位置に格納される充填値として使用される追加のスカラソースレジスタである。充填値が提供されておらず、ソースレーンインデックスが無効であれば、デスティネーションのデータ要素位置は0に設定される。フラグレジスタ(フラグ)がソースマスクとして使用される。ソースレーンに対するフラグビットが1に設定される場合、ソースレーンは無効とマークされ、上述のように命令が進む。
[間接的シャッフルUp/Dn/XOR命令]
【0441】
間接的シャッフル命令は、ソースレーンからデスティネーションレーンへのマッピングを制御するソースオペランド(src1)を有する。間接的シャッフル命令はshuffle_<up/dn/xor>dest src0 src1 <任意選択フラグ>の形態を採り得、ここで、src0はN個のダブルワードを格納し、src1は1つのダブルワードを格納し、destはN個のダブルワードを格納する。
【0442】
以下のコードシーケンスは、即時シャッフル命令の1つの特定の実施態様を定義する。
【数10】
【0443】
したがって、間接的シャッフル命令は上述の即時シャッフル命令と同様に動作するが、ソースレーンからデスティネーションレーンへのマッピングは、即時ではなく、ソースレジスタsrc1により制御される。
[クロスレーンMin/Max命令]
【0444】
浮動及び整数データ型に対して、クロスレーン最小/最大命令がサポートされ得る。クロスレーン最小命令はlane_min dest src0の形態を採り得、クロスレーン最大命令はlane_max dest src0の形態を採り得、src0はN個のダブルワードを格納し及びdestは1つのダブルワードを格納する。
【0445】
例示の目的で、以下のコードシーケンスはクロスレーン最小の1つの特定の実施態様を定義する。
【数11】
この例において、ソースレジスタのデータ要素位置iにおけるダブルワード値が、デスティネーションレジスタ内のデータ要素と比較され、2つの値の内最小のものがデスティネーションレジスタにコピーされる。クロスレーン最大命令は実質的に同じ方式で動作し、唯一の違いは、位置iのデータ要素の最大とデスティネーション値とが選択されることである。
[クロスレーン最小/最大インデックス命令]
【0446】
クロスレーン最小インデックス命令はlane_min_index dest src0の形態を採り得、クロスレーン最大インデックス命令はlane_max_index dest src0の形態を採り得、src0N個のダブルワードを格納し、destは1つのダブルワードを格納する。
【0447】
例示の目的で、以下のコードシーケンスはクロスレーン最小インデックス命令の1つの特定の実施態様を定義する。
【数12】
この例において、デスティネーションインデックスが、デスティネーションレジスタに亘って0からSIMD幅までインクリメントされる。実行マスクビットが設定されると、ソースレジスタ内の位置iにおけるデータ要素が一時的格納位置(tmp)にコピーされ、デスティネーションインデックスがデータ要素位置iに設定される。
[クロスレーンソートネットワーク命令]
【0448】
クロスレーンソートネットワーク命令は、N幅(一定)ソートネットワークを利用して、昇順(sortnet_min)又は降順(sortnet_max)で、全てのN入力要素をソートし得る。命令のmin/maxバージョンはそれぞれ、sortnet_min dest src0及びsortnet_max dest src0の形態を採り得る。1つの実施態様において、src0及びdestはN個のダブルワードを格納する。src0のN個のダブルワードに対して、最小/最大ソートが実行され、昇順の要素(最小に対応)又は降順の要素(最大に対応)がそれぞれソート順でdestに格納される。命令を定義するコードシーケンスの1つの例は以下のとおりである:dst=apply_N_wide_sorting_network_min/max(src0)。
[クロスレーンソートネットワークインデックス命令]
【0449】
クロスレーンソートネットワークインデックス命令は、N幅(一定)ソートネットワークを利用して、昇順(sortnet_min)又は降順(sortnet_max)で、全てのN入力要素をソートし、置換インデックスを戻し得る。命令のmin/maxバージョンはそれぞれ、sortnet_min_index dest src0及びsortnet_max_index dest src0の形態を採り得る。src0とdestはそれぞれ、N個のダブルワードを格納する。命令を定義するコードシーケンスの1つの例は以下のとおりである:dst=apply_N_wide_sorting_network_min/max_index(src0)。
【0450】
図50に、上述の命令のうちのいずれかを実行する方法を示す。本方法は、上述した特定のプロセッサアーキテクチャに実装されてよいが、いかなる特定のプロセッサ又はシステムアーキテクチャにも限定されることはない。
【0451】
5001で、一次グラフィックススレッドの命令がプロセッサコアで実行される。これは例えば、上述のコアのうちのいずれかを含み得る(例えば、グラフィックスコア3130)。レイトレーシング作業が一次グラフィックススレッドに到達したと5002で判定されると、レイトレーシング命令は、
図49に関して上述したような機能ユニット(FU)の形式を採り得る、又は
図31に関して説明した専用レイトレーシングコア3150内にあり得るレイトレーシング実行回路にオフロードされる。
【0452】
5003で、レイトレーシング命令が復号され、メモリからフェッチされる。5005で、命令が実行可能なオペレーションに復号される(例えば復号器を要する一実施形態の場合)。5004で、レイトレーシング命令がスケジューリングされ、レイトレーシング回路による実行用にディスパッチされる。5005で、レイトレーシング回路によりレイトレーシング命令が実行される。例えば、命令はディスパッチされ、上述のFU(例えば、ベクトルFU4910、レイトレーシングFU4912、など)、及び/又はグラフィックスコア3130又はレイトレーシングコア3150上で実行され得る。
【0453】
レイトレーシング命令に対する実行が完了すると、結果が5006で格納され(例えば、メモリ3198に格納し戻される)、5007で一次グラフィックススレッドに通知される。5008で、レイトレーシング結果が一次スレッドのコンテキスト内で処理される(例えば、メモリから読み出され、グラフィックスレンダリング結果に統合される)。
【0454】
複数の実施形態において、用語「エンジン」又は「モジュール」又は「ロジック」は、1つ又は複数のソフトウェア又はファームウェアプログラムを実行する特定用途向け集積回路(ASIC)、電子回路、プロセッサ(共有、専用、又はグループ)、及び/又はメモリ(共有、専用、又はグループ)、組み合わせ論理回路及び/又は説明した機能を提供する他の好適なコンポーネントのことを指しても、これらの一部であっても、これらを含んでもよい。複数の実施形態において、エンジン、モジュール、又はロジックが、ファームウェア、ハードウェア、ソフトウェア、又はファームウェア、ハードウェア、及びソフトウェアの任意の組み合わせで実装されてもよい。
[非同期レイトレーシング用の装置及び方法]
【0455】
本発明の実施形態は、レイトレーシングを実行する固定機能アクセラレーション回路及び汎用処理回路の組み合わせを含む。例えば、バウンディングボリューム階層(BVH)のレイトラバーサル及びインターセクションテストに関連する特定のオペレーションは、複数の実行回路が各種形式のレイトレーシングシェーダ(例えば、any-hitシェーダ、インターセクションシェーダ、ミスシェーダなど)を実行する間に、固定機能アクセラレーション回路により行われ得る。1つの実施形態は、レイを格納する複数のエントリと、BVHノードを格納する対応するデュアルスタックとを含むデュアル高帯域幅格納バンクを含む。本実施形態において、トラバーサル回路は各クロックサイクルでレイを処理するため、デュアルレイバンクとスタックとを交互に切り替える。さらに、1つの実施形態は、内部ノード、非内部ノード、プリミティブを区別し、この情報を利用して、BVHノードと、BVHノードに含まれるプリミティブの処理に合理的に優先順位を付ける、優先選択回路/ロジックを含む。
【0456】
1つの特定の実施形態は、トラバーサルオペレーション時に、限定された数のBVHノードを格納するため、短いスタックを使用したトラバーサルに必要な高速メモリを低減する。本実施形態は、必要なBVHノードが利用可能であることを保証するため、短いスタックに対してエントリを効率的にプッシュ及びポップするスタック管理回路/ロジックを含む。さらに、追跡データ構造への更新を実行することで、トラバーサルオペレーションが追跡される。トラバーサル回路/ロジックは一時停止すると、追跡データ構造を調べて、それが中断したBVH内の同じ位置からトラバーサルオペレーションを開始可能である。さらに、データ構造追跡で維持された追跡データが実行されて、トラバーサル回路/ロジックが再開可能となる。
【0457】
図51は、シェーダプログラムコードを実行し、関連するレイトレーシングデータ4902(例えば、BVHノードデータ及びレイデータ)を処理するシェーダ実行回路4000と、トラバーサル及びインターセクションオペレーションを行うためのレイトレーシングアクセラレーション回路5110と、RTアクセラレーション回路5110及びシェーダ実行回路4000により処理されるプログラムコード及び関連するデータを格納するメモリ3198を含む1つの実施形態を示す。
【0458】
1つの実施形態において、シェーダ実行回路4000は、様々な形態のデータ並列オペレーションを行うためのシェーダプログラムコードを実行する複数のコア/実行ユニット4001を含む。例えば、1つの実施形態において、コア/実行ユニット4001は複数のレーン間で単一の命令を実行可能で、その場合は命令の各インスタンスが異なるレーンに格納されたデータ上で動作する。SIMT実施態様の場合、例えば命令の各インスタンスは異なるスレッドに関連する。実行中、L1キャッシュは、効率的なアクセスのため、特定のレイトレーシングデータを格納する(例えば、最近又は頻繁にアクセスされたデータ)。
【0459】
コア/EU4001が実行するシェーダへの作業をスケジューリングするスケジューラ4007に、一次レイのセットがディスパッチされ得る。コア/EU4001は、レイトレーシングコア3150、グラフィックスコア3130、CPUコア3199、又はシェーダプログラムコードを実行可能な他の種類の回路であり得る。1つ又は複数の一次レイシェーダ5101は、一次レイ及びレイトレーシングアクセラレーション回路5110及び/又はコア/EU4001が実行する(例えば、1つ又は複数の子シェーダにより実行される)生成された追加の作業を処理する。コア/EU4001が実行する一次レイシェーダ5101又は他のシェーダにより生成される新しい作業は、本明細書に記載のとおり、レイをグループ又はビンにソートする(例えば、同様の特性のレイをグループ化)ソート回路4008に分配され得る。そしてスケジューラ4007が新しい作業をコア/EU4001にスケジューリングする。
【0460】
実行され得るその他シェーダは、上述の用にヒット結果を処理するany-hitシェーダ4514及びclosest-hitシェーダ4507を含む(例えば、所与のレイについてそれぞれAny Hit又はClosest Hitを識別する)。ミスシェーダ4506はレイのミスを処理する(例えば、レイがノード/プリミティブに交差しない場合)。すでに述べたように、1つ又は複数のポインタ、特定ベンダ向けメタデータ、グローバル引数を含み得るシェーダレコードを使用して、様々なシェーダを参照可能である。1つの実施形態において、シェーダレコードは、シェーダレコード識別子(SRI)により識別される。1つの実施形態において、シェーダの各実行インスタンスは、親シェーダと子シェーダとの間で送られる引数を格納するのに用いられ得るコールスタック5203に関連している。コールスタック5121は、コールが戻ると実行される継続機能への参照も格納してよい。
【0461】
レイトラバーサル回路5102は、各レイでBVHのノードをトラバースし、レイがトラバースしたノード/プリミティブを識別するように、(例えば、親ノード、子ノード、リーフノードを通じて)BVHの階層を順次処理する。レイ-BVH間インターセクション回路5103は、レイのインターセクションテストを行い、プリミティブ上のヒットポイントを判定し、ヒットに応答して結果を生成する。トラバーサル回路5102及びインターセクション回路5103は、1つ又は複数のコールスタック5121から作業を取得し得る。レイトレーシングアクセラレーション回路5110内で、コールスタック5121及び関連するレイトレーシングデータ4902は、トラバーサル回路5102及びインターセクション回路5103による効率的なアクセスのため、ローカルレイトレーシングキャッシュ(RTC)5107又はその他ローカル記憶デバイス内に格納され得る。以下に記載の1つの特定の実施形態は、高帯域幅レイバンクを含む(例えば、
図52A参照)。
【0462】
レイトレーシングアクセラレーション回路5110は、レイ-BVH間トラバーサル/インターセクション回路4005、トラバーサル回路4502及びインターセクション回路4503、レイトレーシングコア3150を含む本明細書に記載の様々なトラバーサル/インターセクション回路の変形例であり得る。レイトレーシングアクセラレーション回路5110は、レイ-BVH間トラバーサル/インターセクション回路4005、トラバーサル回路4502及びインターセクション回路4503、レイトレーシングコア3150、又はBVHスタックを処理する及び/又はトラバーサル/インターセクションを実行する任意のその他回路/ロジックの代わりに使用され得る。したがって、本明細書に記載のレイ-BVH間トラバーサル/インターセクション回路4005、トラバーサル回路4502及びインターセクション回路4503、レイトレーシングコア3150と組み合わせた任意の特徴の開示は、レイトレーシングアクセラレーション回路5110との対応する組み合わせも開示するものであるが、そのように限定されることはない。
【0463】
図52Aを参照すると、レイトラバーサル回路5102の1つの実施形態は、第1及び第2レイ格納バンク5201及び5202をそれぞれ含み、各バンクは、メモリからロードされた対応する複数の入射レイ5206を格納するための複数のエントリを含む。対応する第1及び第2スタック5203及び5204はそれぞれ、メモリから読み出され、処理のためにローカルに格納される、選択されたBVHノードデータ5290~5291を含む。本明細書に記載のとおり、1つの実施形態において、スタック5203~5204は、BVHノードデータを格納する限定された数のエントリ(例えば、1つの実施形態において6個のエントリ)を含む、「短い」スタックである。レイバンク5201~5202とは別個に図示されているが、スタック5203~5204も対応するレイバンク5201~5202内に維持され得る。若しくは、スタック5203~5204は別個のローカルメモリ又はキャッシュに格納され得る。
【0464】
トラバーサル処理回路5210の1つの実施形態は、処理のために次のレイ及びノードを選択する際、2つのバンク5201~5202及びスタック5203~5204を交互に切り替える(例えば、ピンポン方式)。例えば、トラバーサル処理回路5210は、各クロックサイクルで、レイバンク/スタックから交互に新しいレイ/BVHノードを選択し得、これにより非常に効率的なオペレーションが保証される。しかしながら、この特定の構成は、本発明の基本的原理に準拠するのに必須ではないことに留意されたい。
【0465】
1つの実施形態において、レイ割当部5205は、バンク割当カウンタ5220のセットの現在の相対値に基づいて、第1及び第2メモリバンク5201~5202のそれぞれへの入射レイ5206のエントリのバランスをとる。1つの実施形態において、バンク割当カウンタ5220はそれぞれ第1及び第2メモリバンク5201~5202内のそれぞれ、非交差レイの数のカウントを維持する。例えば、第1バンク割当カウンタは、レイ割当部5205が新しいレイを第1バンク5201に加えるとインクリメントされてよく、レイが第1バンク5201から処理されるとデクリメントされてよい。同様に、第2バンク割当カウンタは、レイ割当部5205が新しいレイを第2バンク5202に加えるとインクリメントされてよく、レイが第2バンク5202から処理されるとデクリメントされてよい。
【0466】
1つの実施形態において、レイ割当部5205は、より小さいカウンタ値に関連するバンクに、現在のレイを割り当てる。2つのカウンタが等しい場合、レイ割当部5205はいずれのバンクを選択し得るか、前回カウンタが等しかった際に選択したものと異なるバンクを選択し得る。1つの実施形態において、各レイはバンク5201~5202のうちの一方の1つのエントリに格納され、各バンクは最大32個のレイを格納するための32個のエントリを含む。しかしながら、本発明の基本的原理は、これらの詳細に限定されることはない。
【0467】
図52Bは、1つの実施形態において、レイ格納バンク5201~5202及びスタック5203~5204を管理するために実行される4つの処理5251~5254を示す。1つの実施形態において、4つの処理5251~5254は、共通のプログラムコードのセット(本明細書では、「トレースレイ」とも称する)の異なる実施態様又は構成である。初期処理5251は、レイ5261の読み出し、及びルートノードから始まる、BVHの新しいトップダウントラバーサルを行うために実行され得る。Alloc機能は制御ビットを修正し、レイトレーシングスタックへの対応する読み出し要求を発行する。具体的には、新しいエントリの割り当てのため、Allocは有効(VLD)ビットを設定し、追い出し準備完了(Evict_Rdy)ビットをリセットする。レイに対するバンクエントリ内で、データ存在(DP)ビット及びダーティビットがリセットされる。対応するスタックエントリ内のDPビットが設定される。対応するヒット情報に対し、DPビットが設定され、ダーティビットがリセットされる。ノードデータに関連するDPビット及びシェーダレコード識別子(SRI)DPビットがリセットされる。
【0468】
インスタンス処理5252は、BVHの(ルートノード以外の)ノードのうちの1つの中でトラバーサルを行い、レイと、前回コミットしたヒット5262とを読み出す。1つの実施形態において、ヒットシェーダのうちの1つがレイとプリミティブとの間のヒットを識別すると、コミット処理5253は結果をコミットするように実行され、レイ、生じ得るヒット、及びスタック5263を読み出す。あるいは、継続処理5254はレイのトラバーサルを継続するように実行され、レイ、コミットされたヒット、スタック5264を読み出す。
【0469】
シェーダが一連のオペレーションを行う必要があるなど様々な状況で、トラバーサル回路5002はトラバーサルオペレーションを一時停止し、現在のレイ及び関連するBVHノードを保存する必要がある。例えば、非透明オブジェクトがヒットされるか又はプロシージャルテクスチャである場合、トラバーサル回路5002はスタック5203~5204をメモリに保存し、必要なシェーダを実行する。シェーダによるヒット(又はその他データ)の処理が完了すると、トラバーサル回路5002はメモリからレイバンク5201~5202及びスタック5203~5204の状態を復元する。
【0470】
1つの実施形態において、トラバーサル/スタック追跡部5248は継続的にトラバーサル及びスタックオペレーションを監視し、追跡アレイ5249内に再開データを格納する。例えば、トラバーサル回路5002が既にノードN、N0、N1、N2、及びN00をトラバースして結果を生成した場合、トラバーサル/スタック追跡部5248は、これらのノードのトラバーサルが完了したことを示す、及び/又はスタックから処理される次のノードを示すように、追跡アレイを更新する。トラバーサル回路5002は再開されると、BVHノードのうちのいずれも繰り返しトラバースする(無駄なサイクルを出す)ことなく、適切な段階からトラバーサルを再開し得るように、追跡アレイ5249から再開データを読み出す。追跡アレイ5249に格納された再開データは、「リスタートトレイル」又は「RST」とも称される。
【0471】
図52Bに示すように、様々なトレースレイ処理5251~5254は、1つ又は複数の機能を介して、レイ格納バンク5201~5202内外への/からの割り当てを管理する。初期処理5251について図示されているように、Alloc機能は格納バンクエントリ内に有効ビット(VLD)を設定し(エントリが現在有効レイを含むことを示す)、追い出し準備完了フラグをリセットする(レイデータを追い出すべきではないことを示す)。レイ機能は、選択されたエントリにレイを格納し、データ存在(DP)ビット(エントリ内にレイデータが格納されていることを示す)と、ダーティビット(データが修正されていないことを示す)をリセットする。格納バンクからレイを読み出すと、スタック機能はDPビットを設定し、スタックから関連するBVHノードを取得する(例えば、初期処理5251の場合はルートノード、インスタンス処理5252の場合は別のノード)。ヒット情報機能は、初期機能5251に対してダーティビットをリセットし、DPビットを設定するか、又は他の全ての機能に対してリセットする。1つの実施形態において、ヒット情報はレイヒットを反映したデータを生成する。ノード機能は、DPビットと、シェーダレコード識別子のDPであるSRI(シェーダレコード識別子)DPをリセットする。1つの実施形態では、KSPが0に等しくないことを保証するため、Kernel Start Pointer(KSP)ルックアップが行われる。等しい場合、非透明クアッドに対して別の取り扱いが実施される。
【0472】
1つの実施形態において、格納バンク5201~5202のうちの1つにレイエントリが割り当てられると、ノードデータ(及び、場合によっては他のデータ)を、レイに関連するスタックから取得するため、フェッチが行われる。1つの実施形態において、レイごとにスタックが維持される。これは、レイがトラバースする現在のノードについてのデータのワーキングセットを含む。
【0473】
BVHの次のレベルに移行する際(例えば、レイが親ノードに交差すると判定されると)、スタック5203~5204に子ノードがソート及びプッシュされる。子ノードはスタックから順次ポップされ、個々に処理されることで、レイがトラバースする子ノードが識別される(トラバーサル「ヒット」)。1つの実施形態において、RTアクセラレーション回路5110及びシェーダ4504、4506、4507、5101、5105間のハンドオフが生じるたびに、メモリ又はローカルキャッシュ/ストレージに、格納されていたスタックが展開される。
【0474】
クアッド又は三角形(又はその他種類のプリミティブ)を含むリーフノードがトラバーサル回路5102により識別されると、この情報はそれぞれクアッド又は三角形に対してインターセクションテストを行うインターセクション回路5103に渡される。プリミティブがクアッドでも三角形でもなければ、1つの実施態様では、トラバーサル回路はトラバーサルを終了し、制御をclosest hitシェーダ4507(ヒットが検出された場合)又はミスシェーダ4506(ヒットが検出されない場合)に返す。インターセクション回路5103が、クアッド及び三角形に加えて様々なプリミティブ(例えば、線、曲線、円など)にインターセクションを行うように設計されている実施態様では、トラバーサル回路5102はこれらプリミティブに対するリーフノードをインターセクション回路5103に転送する。
【0475】
1つの実施形態において、ハードウェア又はソフトウェアコンポーネントがメモリ3198又はキャッシュへの読み出し要求を生成すると、16ビットタグが使用されて、データ型及び要求元への情報が提供される。例えば、2ビットコードにより、レイ、スタックデータ、ヒットデータ、BVHからのノードデータ、又は任意の他の種類のデータに対する要求であるか指定され得る。メモリからレイ、スタック、ヒット情報が戻されると、1つ又は複数のBVHノードにレイがトラバースされ、上述のようにインターセクションテストが実行される。
【0476】
1つ又は複数のスタック5203~5204及びレイ5206は、異なる処理段階でメモリからロードされる。例えば、初期処理5251及び/又はインスタンス処理5252では、トラバーサル用にロードされる新しいBVHを必要とし得る。これら状況では、スタック5203~5204はBVHの先頭ノード(又は「ルート」ノード)まで初期化され得る。BVH内のレイ継続5254のため、スタック5203~5204がメモリからロードされ、展開され得る。スタック5203~5204が用意されると、ノードデータがスタックからフェッチされる(以下Proc_Node_Fetchとも称されるオペレーション)。
【0477】
1つの実施形態において、ノードデータは、2つの非内部(NI)ノード及び2つの内部ノードに対して、並列要求を開始することでフェッチされる。
図53は、NIノード優先選択ロジック(PRISEL)5311がデュアルNIノードを要求する1つのそのような実施形態を示す(即ち、バンク0から第1NIノード5301、バンク1から第2NIノード5302)。同時に、内部ノードPRISELロジック5312はデュアル内部ノードを要求する(即ち、バンク0から第1ノード5303、バンク1から第2ノード5304)。
【0478】
1つの実施形態において、NIノード優先選択ロジック(PRISEL)5311は、第1NIノード5301及び第2NIノード5302のうちの1つを優先し、優先結果をレイトレーシングキャッシュ(RTC)に格納する。同様に、内部ノードPRISELロジック5312は、デュアル内部ノードを要求し、第1内部ノード5303及び第2内部ノード5304から優先結果を選択する。
【0479】
優先選択ロジック5311~5312の各インスタンスは、可能であれば、異なるバンクからの非内部BVHノード5301~5302のうちの1つ、及び内部BVHノード5303~5304のうちの1つを優先する。1つの実施形態において、各バンクから1つの要求のみ選択される(例えば、要求5302及び5304のうちの1つ、及び要求5301及び5303のうちの1つ)。これら要求を発行することで、さらに示されたとおりスタックデータ存在(DP)ビットがリセットされ得、これによりこのエントリがノードフェッチオペレーションに応答して取得されないようになる。1つの実施形態において、インスタンスフェッチオペレーションに対して、レイのデータ存在(DP)ビットがインスタンス要求送信時にリセットされ、レイがノードフェッチ後に変換されると、最終的に設定される。
【0480】
1つの実施形態において、node_infoは、読み出しの発行時に書き込まれ、読み出し要求に対してaddres/tagが以下のとおりに計算される。
i. rtt_rtc_rd_addr[47:6]=rt_ray.rt_ray_ctrl.root_node_ptr[47:6]+curr_stack.child_offset;(注:ノードの子オフセットは、常に現在のBVHルートノードに関連している)。
ii. rtt_rtc_rd_tag[6:0]={RTT_INST,rtt_alloc_entry[5:0]};
iii. node.node_info=curr_stack.node_info。1つの実施形態において、戻されたノードデータは、ノード及びスタックに対してDPビットを設定する。
【0481】
読み出しタグに基づいて、以下の場合が区別可能である。
A.内部ノード:これにより内部ノードに書き込みが行われる。
B.インスタンス:これにより次のレベルのBVH(1)のrt_ray.rt_ray_ctrlが更新され、ノード構造が書き込まれる。
i.root_node_ptr=node_return.StartNodePtr。
ii.hitgrp_srbase_ptr=rt_ray_ctrl.hitgrp_srbase_ptr+rt_ray_ctrl.srstride*node_return.instancecontributiontohitgrpindex。
iii.hitgrp_sr_stride=rt_ray_ctrl.srstride*rt_ray_ctrl.shade_indx_mult。
iv.inst_leaf_ptr=rt_ray.rt_ray_ctrl.root_node_ptr + stack.current_node.child_offset →論理ビューのみ、インスタンスノードのフェッチ要求自体で際に、ノードフェッチアドレスを取り込んで格納する。
v.{miss_sr_ptr,shader_indx_mult,mask}={rt_ray[0].rt_ray_ctrl.miss_sr_ptr,rt_ray[0].rt_ray_ctrl.shader_indx_mult,rt_ray[0].rt_ray_ctrl.mask} BVH[0]を保存する。
vi.flag[0]=rt_ray[0].rt_ray_ctrl.flag[0]|(~rt_ray[0].rt_ray_ctrl.flag[1]&Node_Return.flag[2]);→レイ又はインスタンスフラグ(レイフラグがForce Non-Opaqueではない場合のみ)のいずれかで、透明を保存する。
vii.flag[1]=(rt_ray[0].rt_ray_ctrl.flag[1])|(~rt_ray[0].rt_ray_ctrl.flag[0]&Node_Return.flag[3]);→レイ又はインスタンスフラグ(レイフラグがForce Opaqueでない場合のみ)のいずれかで、非透明を保存する。
viii.flag[3:2]=rt_ray[0].rt_ray_ctrl.flag[3:2];→(最初のヒットを受け付け、Closest Hitシェーダを検索又はスキップする) BVH[0]を保存する。
ix.flag[5:4]=Node_Return.flag[0]?2'd0:rt_ray[0].rt_ray_ctrl.flag[5:4];→インスタンスにより三角形間引きは無効である。
x.flag[8:6]=rt_ray[0].rt_ray_ctrl.flag[8:6];→(インターセクションシェーダの無効化、透明の間引き、又は非透明の間引き) BVH[0]を保存する。
xi.node.node_ctrl=インスタンスには不要。
xii.node.node_data={'0,node_rtn.obj2world_p, world2obj_vzyx}。
C.クアッド:これはノードを以下のとおりに更新する。
i.node.node_ctrl={node_rtn.leafDesc.last,node_rtn.leafDesc.PrimIndex1Delta[15:0],node_rtn.leafDesc.PrimIndex0[31:0],node_rtn.shader_indx};
ii.node.node_data={'0,Quad_mode,J[2:0],V[3:0]};→Quad_mode=node_rtn.leafDesc.PrimIndex1Delta[15:0]!='0;
【0482】
レイフラグ、インスタンスフラグ、ジオメトリフラグに基づいて、図54Aに示す透明/非透明取り扱いテーブルは、ノードデータのフェッチの際に使用される、結果としてのフラグ(透明又は非透明)を示す。テーブルに示すように、レイフラグは常に優先される。さらに、状態のいくつかは相互排他的である。1つの実施形態において、これらは専用ビットの優先順位により、ハードウェア内で取り扱われる。1つの実施態様において、cull_opaque及びforce_opaqueの両方が設定されていると、関連するジオメトリが自動的に間引かれる。
透明=rt_ray.rt_ray_ctrl.flag[0]|quad.flag[0](なお、各BVHレベルに格納されたレイは、インスタンスフラグを既に考慮したものとなっている)
非透明=rt_ray.rt_ray_ctrl.flag[1]|~quad.flag[0]
【0483】
図
54Bは、1つの実施形態に係る、レイフラグの取り扱い及び例外を示すテーブルである。ここで、間引きの判断は、レイフラグ、インスタンスフラグ、ジオメトリフラグの組み合わせに基づく。
【数13】
【0484】
マスクに基づく間引きは、1つの実施形態において以下のとおりに実施され得る。
【数14】
【0485】
図54Cは、1つの実施形態に係る、最終的な間引きを示すテーブルである。(cull_opaque及びforce_opaque)又は(cull_non_opaque及びforce_non_opaque)のレイフラグは相互排他的である。しかしながら、この式で、レイフラグは透明/非透明を設定可能なインスタンスフラグにも対応している。間引きできるのはジオメトリのみで、インスタンス及びジオメトリは両方ともマスク可能である。
【0486】
図55に示すように、1つの実施形態において、上述の間引き及びmask_kill設定の評価に基づいて、5601又は5602でアーリーアウトが判定され、結果が5603でノードストレージに、及び/又は5604でスタックに送信される。
【0487】
ノードデータが準備完了となると、ボックス/インターセクションテストが行われ得る。これは1つの実施形態において、本明細書でRay_Test_Procと称される処理により実現される。この処理では、2つの基本的な処理が同時に実行される。一方はクアッド/インスタンス(QI)を充填するためで、他方はボックス/インターセクションテストを実行するためである。図56に示す1つの実施態様において、Ray_Test_Procにより優先選択ロジック(PRISEL)5701~5702の2つの並列インスタンスが起動される。即ち、バンク0からのクアッド/インスタンス5711及びバンク1からの第2クアッド/インスタンス5712の要求及びその間の選択のためのクアッド/インスタンスPRISEL5701と、バンク0 5713からの内部ノード及びバンク1 5714からの内部ノードの要求及びその間の選択のための内部ノードPRISEL5702である。
【0488】
1つの実施形態において、クアッド/インスタンス優先選択ロジック5701は、第1QIノード5711及び第2QIノード5712のうちの1つを優先し、優先結果をさらなる処理(例えばインターセクションテスト)のためにレイトレーシングキュー(RTQ)に格納する。同様に、内部ノードPRISELロジック5702はレイトレーシングトラバーサル(RTT)ボックステストが実行される内部BVHノード5713~5714のうちの1つを優先する。1つの実施形態において、1つの要求のみが各バンクから選択される(例えば、要求5711及び5712のうちの1つと、要求5713及び5714のうちの1つ)。これら要求を発行することで、さらに示されたとおりスタックデータ存在(DP)ビットがリセットされ得、これによりこのエントリがノードフェッチオペレーションに応答して取得されないようになる。1つの実施形態において、インスタンスフェッチオペレーションに対して、レイのデータ存在(DP)ビットがインスタンス要求送信時にリセットされ、レイがノードフェッチ後に変換されると、最終的に設定される。
【0489】
この処理の一部として、ノード種類が非透明である全てのクアッドテストディスパッチに対して、以下のシェーダレコード識別子ルックアップアドレスに基づき、バインドレススレッドディスパッチ(BTD)として、シェーダレコード識別子ヌルルックアップがディスパッチされる。
【数15】
【0490】
1つの実施形態において、一時的スタックFIFO充満状態を解消するため、及びスタックFIFO(例えば、図59のスタックFIFO6001参照)にプッシュすることで、ヒット情報/レイに同期的更新を実施するため、クアッド/インスタンス(QI)分離FIFOが含まれる。これにより、レイ/ヒット情報にデータ存在(DP)ビットが後続の処理で設定されることが保証される。なお、メモリ書き込みに衝突する場合、固定高優先順位がレイ/ヒット情報に割り当てられ得ることに留意されたい。
【0491】
RTQからのリターンは、2つの別個のインタフェース上のインスタンス(例えば、インスタンス変換)又はクアッド(つまり、トラバーサル/インターセクションテスト結果)に帰結し得る。1つの実施形態において、結果を処理するのに用いられる2つのリターンFIFOを以下に示す。
a.インスタンスリターンFIFO:更新rt_ray.rt_ray_data=rtq_rt_ray_data;ray_dirty[Entry]=1;
b.クアッドリターンFIFO i.クアッドが非透明で、(Tfar<Prev_Tfar)の場合→クアッド/インスタンス(QI)分離FIFOからポップ(読み出し)するため、SRI_NULL_DPを確認。なお、1つの実施形態において、レイトレーシングキュー(RTQ)FIFOからのヒット情報書き込みは、メモリヒット情報よりも優先されることに留意されたい。
1.(KSP_NULL=1)であれば、非透明クアッドを透明であるように扱い、Tfarを更新。
2.(KSP_NULL!=1)であれば
・有効ビットを1に設定し、生じ得るヒット情報をメモリに書き込み。
・RTQからT、U、V、リーフ種類、PrimLeafIndex、フロントフェースを読み出し。
・ノードデータからPrimIndexDelta、PrimleafPtr読み出し。レイデータからのinstanceLeafPtrを更新。
・上述のとおり計算されたhitGroupRecPtr
ii.クアッドが非透明で(Tfar<Prev_Tfar)であれば
・有効=1で、コミットされたヒット情報を更新。
・RTQからT、U、V、リーフ種類、PrimLeafIndex、フロントフェースを読み出し。
・ノードデータからPrimIndexDelta、PrimleafPtr読み出し。
・rt_ray.rt_ray_ctrlからのinstanceLeafPtr更新
・上述のとおり計算されたhitGroupRecPtr
【0492】
1つの実施形態において、レイトレーシングトラバーサル(RTT)ボックスインターセクションテストからのリターンが、さらなる処理のため、スタック0/1(5203/5204)FIFO6001にプッシュされ得る。
【0493】
図57及び図58A~図58Bは、「短い」スタック(例えば、限定された数のローカルスタックエントリを含むスタック5203又は5204など)を使用したBVH-レイ処理の一例を示す。短いスタックは、高度なノード管理技術と組み合わせて高速ストレージを維持するために使用される。これにより、高効率な一連のトラバーサルオペレーションが実現される。図示の例では、短いスタック5203は6個のBVHノードに対するエントリを含む。ただし、本発明の基本的原理は、様々なサイズの短いスタックを利用して実現され得る。
【0494】
オペレーション5949~5972により、BVHトラバーサル時に、スタックエントリがプッシュ及びポップされる。1つの実施形態において、スタック処理回路5120によりオペレーション5949~5972がスタック5203に実行される(
図51参照)。BVHレベル0で、ルートBVHノードN5900から開始する特定のトラバーサルシーケンスが示される。
【0495】
5949で、スタック5203はノードNで初期化され、その後スタックからポップし、処理される。その結果、BVHのレベル1で子ノードN0~N2(5901~5903)を含むヒットH0~H2となる(つまり「ヒット」とは、レイが3つの子ノードN0~N2(5901~5903)をトラバースすることを意味する)。ヒット距離に基づいて3つの子ノードヒット5901~5903がソートされ、ソート順でスタック5203にプッシュされる(オペレーション5950)。したがって、本実施形態において、新しい子ノードのセットが評価されるたびに、ヒット距離に基づいてそれらはソートされ、ソート順でスタック5203に書き込まれる(つまり、より近い子ノードがスタックの先頭に来る)。
【0496】
第1子ノードN0(5901)(つまり、最も近い子ノード)がスタック5203からポップされて処理されると、BVHのレベル2(「レベル」はBVHノードの「デプス」と呼ばれることがある)でさらに3つの子ノードヒットN00~N02(5911~5913)が得られ、これらはソートされてスタック5203にプッシュされる(オペレーション5951)。
【0497】
子ノードN00(5911)がスタックからポップし処理されて、BVHのレベル3で単一の子ノードN000(5920)を含む単一のヒットが得られる(オペレーション5952)。このノードがポップし処理されると、レベル4で6つのヒットN0000~N0005(5931~5936)が得られ、これらがソートされてスタック5203にプッシュされる(オペレーション5953)。短いスタック5203内にスペースを作るため、示されたとおり、ノードN1、N2、N02、N01が除去される(つまり、短いスタックを6つのエントリに限定する)。第1のソートされたノードN0000(5931)がポップし処理されて、BVHのレベル5で3つのヒットN00000~N00002(5931~5933)が生成される(オペレーション5954)。なお、短いスタック5203に新しいノードのスペースを作るよう、N0005が除去されることに留意されたい。
【0498】
1つの実施形態において、ノードが短いスタック5203から除去されるたびに、それをメモリに保存し直す。そして後で(例えば、トラバーサルオペレーションに応じて当該ノードを処理する際に)再度短いスタック5203に再ロードされることになる。
【0499】
処理は図58Aに続く。ここではBVHのレベル5でノードN00001及びN00002がポップし、処理される(オペレーション5955~5956)。その後、レベル4のノードN0001、N0002、N0003、N0004がポップし処理されて(オペレーション5957~5960)、短いスタック5203が空になる。
【0500】
したがって、ポップオペレーションにより、リスタートトレイル(RST)に応じてルートBVHノード、ノードNが取得されることとなる(オペレーション5961)。レベル1からの3つの子ヒットN0、N1、N2が再度ソートされ、短いスタックにプッシュされる(オペレーション5962)。その後ノードN0がポップし処理されて、ノードN00、N000、N0005が続く(オペレーション5963~5965)。ノードN01がポップし処理されて(オペレーション5966)、ノードN02、ノードN2、ノードN1が続く(オペレーション5967~5970)。その結果、再度短いスタックが空になる。その結果として、次のレベル2ノードで、N11が短いスタックからポップされ、処理されて、トラバーサルが完了する(つまり、ノードN11の結果がヒットにならなかったため)。
【0501】
すでに述べたように、トラバーサル追跡部5248の1つの実施形態は、現在トラバース中のBVH階層の各レベルの子ノード/部分木を識別する追跡アレイ5249を更新する。1つの実施態様において、追跡アレイ5249の長さはBVHのデプスに等しく(図示の例では6)、追跡アレイ5249内の各エントリは現在トラバース中の子部分木を識別するインデックス値を含む。1つの特定の実施態様において、N幅のBVH(つまり、各内部ノードがN個の子ノードを参照する)について、追跡アレイ5249内の各エントリが子ノード/部分木を識別するlog2(N)ビット値を含む。1つの実施形態において、現在の子インデックスよりも小さなインデックスが割り当てられた子ノード/部分木は完全にトラバースされているので、再開の場合に再度取り上げられることはない。1つの実施形態において、最後に交差される子がトラバースされている際、その子インデックスは最大値に設定され、スタック上にこれ以上エントリがないことが示される。
【0502】
短いトラバーサルスタック5203は、円形アレイのスタックの、上から数個のエントリを格納し得る。1つの実施態様において、短いトラバーサルスタック5203内の各スタックエントリは、ノードへのオフセット、ノードの種類(内部、プリミティブ、インスタンスなど)などのその他情報、及びこの子が親ノード内で最後の(最も遠い)交差子ノードであるかを示す1つのビットを含む。しかしながら、これら具体的な詳細は、本発明の基本的原理に準拠するのに必要なものではない。
【0503】
図59は、上述のスタック管理及びトラバーサルオペレーションを行うためのスタック処理回路/ロジック5120の1つの実施形態を示す。スタックFIFO6001には、処理を必要とする任意の子BVHノード6000がロードされる。例えば、トラバーサル処理回路5210がボックステスト又はクアッドテストを完了すると、結果はスタックFIFO6001にプッシュされ、スタック5203の更新に使用される。これは、例えば特定のヒットに関連する子ノード6000のセットなどのヒット情報を更新することを含み得る。
【0504】
スタック処理回路/ロジック6003は、BVHノードが内部ノード又はリーフノードであるかを示すものと、関連するインデックスデータとを含む、各エントリを処理するのに必要なデータとともに、スタック5203からエントリを読み出す。ノードがリーフノード/クアッドであれば、データはクアッド記述子、インデックス、及びシェーダインデックスデータを含み得る。その後、スタック処理回路/ロジック6003は、ヒットに関連する新しいノードを識別する、及びヒット距離に基づいてノードをソートするなど、本明細書に記載のスタック処理オペレーションを実行する。スタック処理回路/ロジック6003は別個のエンティティとして図示されているが、トラバーサル回路5102内に統合してもよい。
【0505】
示されたとおり、スタック処理回路/ロジック6003はスタック5203からの各BVHノードの処理が完了すると、スタック更新6011を生成する。例えば、スタック5203からのエントリ読み出し後、データ存在(DP)ビット及び有効(VLD)ビットなどの様々な制御ビットが更新され得る。図59は、追い出し準備完了及びデータ存在ビット6010が設定されたことを示す。スタック5203に、対応するスタック更新6011も送信され得る(例えば、新しい子ノードのスペースを作るように古いエントリが除去されることを可能にする)。
【0506】
スタック更新は、調整回路6012を介して制御され得る。当該回路は、現在の処理更新6011でスタック5203を更新すること、メモリからのスタック5203を1つ又は複数の新しいBVH子ノードで埋めること(Mem Fill)、メモリからのスタックに初期割り当てを行うこと(例えば、ルートノード及び1つ又は複数の子ノードから始まる)から選択する。
【0507】
1つの実施形態において、スタック上でクアッド/インスタンス/内部ノードが処理されると、以下のオペレーションのうちの1つ又は複数が行われ得る。
1.新しいBVHに対してインスタンスを下に移動するなど複数の条件、ヒットプロシージャルの処理、any-hitシェーダなどによる、スタックエントリの追い出し。
2.ヒットプロシージャル及び/又はany-hitシェーダによりスタックが追い出された場合に、レイエントリ割り当て解除。
3.そのスタックがヒットプロシージャル及び/又はany-hitシェーダにより追い出された場合、キャッシュエントリ割り当て解除。
4.インスタンスリーフを介して新しいBVHにレイが送られる必要がある場合に、レイ制御(BVHのみ)を更新。
【0508】
図60A~図60Bは、全てのレイトレーシングトラバーサル構造に対して、読み出し/書き込みポートを構成し、制御ビットを設定するためのテーブルを示す。具体的には、例示低サブ構造、垂直構造、及び読み出し/書き込み動作が、レイ6101、ヒット6102、スタック6103について示されている。しかしながら、本発明の基本的原理は、これらの具体的なデータ構造/オペレーションに限定されることはないことに留意されたい。
【0509】
[実施例]
【0510】
以下は、本発明の異なる実施形態の例示的な実施態様である。
【0511】
実施例1。
ルートノードと、複数の内部ノードと、プリミティブを含む複数のリーフノードとを含む、階層的に配置された複数のノードを含むバウンディングボリューム階層(BVH)を構築するためのBVH生成部であって、各内部ノードが上記ルートノード又は別の内部ノードへの子ノードを含み、各リーフノードが内部ノードへの子ノードを含む、BVH生成部と、第1の複数のエントリとして配置される第1格納バンクと、第2の複数のエントリとして配置される第2格納バンクであって、上記第1の複数のエントリ及び上記第2の複数のエントリの各エントリが上記BVHをトラバースするレイを格納する、第2格納バンクと、入射レイを、上記第1格納バンク及び上記第2格納バンクに現在格納されているレイの相対数に基づいて、上記第1格納バンク又は上記第2格納バンクのいずれかに分配するための割当回路と、上記第1格納バンク及び上記第2格納バンクから交互に次のレイを選択するトラバーサル回路であって、前記トラバーサル回路は、BVHノードスタックの先頭から次のBVHノードを読み出し、且つ上記次のレイが上記次のBVHノードに交差するかを判定することによって、上記次のレイを上記BVHにトラバースする、トラバーサル回路とを備える装置。
【0512】
実施例2。
上記第1格納バンクに現在格納されている第1の数のレイと、上記第2格納バンクに現在格納されている第2の数のレイとを追跡するためのバンク監視回路をさらに備える、実施例1に記載の装置。
【0513】
実施例3。
上記バンク監視回路は、上記割当回路により上記第1格納バンクにレイが加えられたことに応じてインクリメントされ、上記トラバーサル回路により上記第1格納バンクからレイが読み出されたことに応じてデクリメントされる第1カウンタと、上記割当回路により上記第2格納バンクにレイが加えられたことに応じてインクリメントされ、上記トラバーサル回路により上記第2格納バンクからレイが読み出されたことに応じてデクリメントされる第2カウンタとをさらに備える、実施例2に記載の装置。
【0514】
実施例4。
上記割当回路は上記入射レイを、上記第1カウンタ及び上記第2カウンタの相対値に基づいて、上記第1格納バンク又は上記第2格納バンクのいずれかに分配する、実施例3に記載の装置。
【0515】
実施例5。
上記BVHノードスタックは第1のBVHノードスタックを含み、上記第1のBVHノードスタックは、上記第1の複数の子ノードの親ノードにヒットしたレイに関連する第1の複数の内部子ノードを格納し、上記装置は、第2の複数の内部子ノード及び/又はリーフノードを格納するための第2のBVHノードスタックをさらに備える、実施例1に記載の装置。
【0516】
実施例6。
上記第1の複数の内部子ノード及び上記第2の複数の内部子ノードは、各内部子ノードと、上記次のレイに関連する座標値との間の距離に基づいて、上記第1のBVHノードスタック及び上記第2のBVHノードスタック上に順序付けされる、実施例5に記載の装置。
【0517】
実施例7。
上記第1のBVHノードスタックは、上記第1格納バンクの上記第1の複数のエントリのうちの1つ又は複数に格納され、上記第2のBVHノードスタックは、上記第2格納バンクの上記第2の複数のエントリのうちの1つ又は複数に格納される、実施例5に記載の装置。
【0518】
実施例8。
上記BVHノードスタックはN個のエントリを含み、Nは上記BVHのノード数未満である、実施例1に記載の装置。
【0519】
実施例9。
上記トラバーサル回路が、上記BVHノードスタックの上記先頭から読み出された各BVHノードに対して、上記次のレイを処理したことに応じて、追跡アレイを更新するためのトラバーサル追跡回路をさらに備える、実施例8に記載の装置。
【0520】
実施例10。
上記トラバーサル回路は、シェーダの実行に応じて現在のトラバーサル状態をメモリに保存し、上記現在のトラバーサル状態は、上記第1の複数のエントリと、上記第2の複数のエントリと、上記BVHノードスタックとを含む、実施例9に記載の装置。
【0521】
実施例11。
上記トラバーサル回路は、メモリから上記現在のトラバーサル状態を復元してトラバーサルオペレーションを再開し、上記トラバーサル回路は、上記追跡アレイを読み出して、上記トラバーサルオペレーションを再開する開始点を判定する、実施例10に記載の装置。
【0522】
実施例12。
上記次のレイが上記次のBVHノードに交差する場合、上記次のBVHノードの複数の子ノードを、距離値に基づいてソートすることで、ソート順を生成し、上記BVHノードスタック内に、上記複数の子ノードを上記ソート順に格納する、実施例11に記載の装置。
【0523】
実施例13。
ルートノードと、複数の内部ノードと、プリミティブを含む複数のリーフノードとを含む、階層的に配置された複数のノードを含むバウンディングボリューム階層(BVH)を生成する段階であって、各内部ノードが上記ルートノード又は別の内部ノードへの子ノードを含み、各リーフノードが内部ノードへの子ノードを含む、生成する段階と、第1格納バンク内に第1の複数のエントリを構成する段階と、第2格納バンク内に第2の複数のエントリを構成する段階であって、上記第1の複数のエントリ及び上記第2の複数のエントリの各エントリが上記BVHをトラバースするレイを格納する、構成する段階と、入射レイを、上記第1格納バンク及び上記第2格納バンクに現在格納されているレイの相対数に基づいて、上記第1格納バンク又は上記第2格納バンクのいずれかに分配する段階と、上記第1格納バンク及び上記第2格納バンクを交互に切り替えることによって、トラバーサル処理を行うために次のレイを選択する段階と、BVHノードスタックの先頭から次のBVHノードをポップする段階と、上記次のレイが上記次のBVHノードに交差するかを判定する段階とを含む方法。
【0524】
実施例14。
上記第1格納バンクに現在格納されている第1の数のレイと、上記第2格納バンクに現在格納されている第2の数のレイとを追跡する段階をさらに含む、実施例13に記載の方法。
【0525】
実施例15。
追跡する段階は、上記第1格納バンクにレイが加えられたことに応じて第1カウンタをインクリメントし、上記第1格納バンクからレイが読み出されたことに応じてデクリメントされる段階と、上記第2格納バンクにレイが加えられたことに応じて第2カウンタをインクリメントし、上記第2格納バンクからレイが読み出されたことに応じてデクリメントされる段階とをさらに含む、実施例14に記載の方法。
【0526】
実施例16。
上記入射レイは、上記第1カウンタ及び上記第2カウンタの相対値に基づいて、上記第1格納バンク又は上記第2格納バンクのいずれかに分配される、実施例15に記載の方法。
【0527】
実施例17。
上記BVHノードスタックは第1のBVHノードスタックを含み、上記第1のBVHノードスタックは、上記第1の複数の子ノードの親ノードにヒットしたレイに関連する第1の複数の内部子ノードを格納し、上記方法は、第2の複数の内部子ノード及び/又はリーフノードを第2のBVHノードスタックに格納する段階をさらに含む、実施例13に記載の方法。
【0528】
実施例18。
上記第1の複数の内部子ノード及び上記第2の複数の内部子ノードは、各内部子ノードと、上記次のレイに関連する座標値との間の距離に基づいて、上記第1のBVHノードスタック及び上記第2のBVHノードスタック上に順序付けされる、実施例17に記載の方法。
【0529】
実施例19。
上記第1のBVHノードスタックは、上記第1格納バンクの上記第1の複数のエントリのうちの1つ又は複数に格納され、上記第2のBVHノードスタックは、上記第2格納バンクの上記第2の複数のエントリのうちの1つ又は複数に格納される、実施例17に記載の方法。
【0530】
実施例20。
上記BVHノードスタックはN個のエントリを含み、Nは上記BVHのノード数未満である、実施例13に記載の方法。
【0531】
実施例21。
上記次のBVHノードと、上記BVHノードスタックの上記先頭から読み出された各追加のBVHノードとに対して、上記次のレイを処理したことに応じて、追跡アレイを更新する段階をさらに含む、実施例20に記載の方法。
【0532】
実施例22。
シェーダの実行に応じて現在のトラバーサル状態をメモリに保存する段階であって、上記現在のトラバーサル状態は、上記第1の複数のエントリと、上記第2の複数のエントリと、上記BVHノードスタックとを含む、保存する段階をさらに含む、実施例21に記載の方法。
【0533】
実施例23。
メモリから上記現在のトラバーサル状態を復元してトラバーサルオペレーションを再開する段階と、上記追跡アレイを読み出して、上記トラバーサルオペレーションを再開する開始点を判定する段階とをさらに含む、実施例22に記載の方法。
【0534】
実施例24。
上記次のレイが上記次のBVHノードに交差する場合、上記次のBVHノードの複数の子ノードを、距離値に基づいてソートすることで、ソート順を生成し、上記BVHノードスタック内に、上記複数の子ノードを上記ソート順に格納する、実施例23に記載の方法。
【0535】
実施例25。
機械により実行されると、ルートノードと、複数の内部ノードと、プリミティブを含む複数のリーフノードとを含む、階層的に配置された複数のノードを含むバウンディングボリューム階層(BVH)を生成するオペレーションであって、各内部ノードが上記ルートノード又は別の内部ノードへの子ノードを含み、各リーフノードが内部ノードへの子ノードを含む、生成するオペレーションと、第1格納バンク内に第1の複数のエントリを構成するオペレーションと、第2格納バンク内に第2の複数のエントリを構成するオペレーションであって、上記第1の複数のエントリ及び上記第2の複数のエントリの各エントリが上記BVHをトラバースするレイを格納する、構成するオペレーションと、入射レイを、上記第1格納バンク及び上記第2格納バンクに現在格納されているレイの相対数に基づいて、上記第1格納バンク又は上記第2格納バンクのいずれかに分配するオペレーションと、上記第1格納バンク及び上記第2格納バンクを交互に切り替えることによって、トラバーサル処理を行うために次のレイを選択するオペレーションと、BVHノードスタックの先頭から次のBVHノードをポップするオペレーションと、上記次のレイが上記次のBVHノードに交差するかを判定するオペレーションとを上記機械に行わせるプログラムコードを格納した機械可読媒体。
【0536】
実施例26。
本機械可読媒体はさらに、上記第1格納バンクに現在格納されている第1の数のレイと、上記第2格納バンクに現在格納されている第2の数のレイとを追跡するためのオペレーションを上記機械に行わせるプログラムコードを含む、実施例25に記載の機械可読媒体。
【0537】
実施例27。
上記追跡するオペレーションは、上記第1格納バンクにレイが加えられたことに応じて第1カウンタをインクリメントし、上記第1格納バンクからレイが読み出されたことに応じてデクリメントされる段階と、上記第2格納バンクにレイが加えられたことに応じて第2カウンタをインクリメントし、上記第2格納バンクからレイが読み出されたことに応じてデクリメントされる段階とをさらに含む、実施例26に記載の機械可読媒体。
【0538】
実施例28。
上記入射レイは、上記第1カウンタ及び上記第2カウンタの相対値に基づいて、上記第1格納バンク又は上記第2格納バンクのいずれかに分配される、実施例27に記載の機械可読媒体。
【0539】
実施例29。
上記BVHノードスタックは第1のBVHノードスタックを含み、上記第1のBVHノードスタックは、上記第1の複数の子ノードの親ノードにヒットしたレイに関連する第1の複数の内部子ノードを格納し、本機械可読媒体はさらに、第2の複数の内部子ノード及び/又はリーフノードを第2のBVHノードスタックに格納するためのオペレーションを上記機械に行わせるプログラムコードを含む、実施例25に記載の機械可読媒体。
【0540】
実施例30。
上記第1の複数の内部子ノード及び上記第2の複数の内部子ノードは、各内部子ノードと、上記次のレイに関連する座標値との間の距離に基づいて、上記第1のBVHノードスタック及び上記第2のBVHノードスタック上に順序付けされる、実施例29に記載の機械可読媒体。
【0541】
実施例31。
上記第1のBVHノードスタックは、上記第1格納バンクの上記第1の複数のエントリのうちの1つ又は複数に格納され、上記第2のBVHノードスタックは、上記第2格納バンクの上記第2の複数のエントリのうちの1つ又は複数に格納される、実施例29に記載の機械可読媒体。
【0542】
実施例32。
上記BVHノードスタックはN個のエントリを含み、Nは上記BVHのノード数未満である、実施例25に記載の機械可読媒体。
【0543】
実施例33。
本機械可読媒体はさらに、上記次のBVHノードと、上記BVHノードスタックの上記先頭から読み出された各追加のBVHノードとに対して、上記次のレイを処理したことに応じて、追跡アレイを更新するためのオペレーションを上記機械に行わせるプログラムコードを含む、実施例32に記載の機械可読媒体。
【0544】
実施例34。
本機械可読媒体はさらに、シェーダの実行に応じて現在のトラバーサル状態をメモリに保存するオペレーションであって、上記現在のトラバーサル状態は、上記第1の複数のエントリと、上記第2の複数のエントリと、上記BVHノードスタックとを含む、保存するオペレーションを上記機械に行わせるプログラムコードを含む、実施例33に記載の機械可読媒体。
【0545】
実施例35。
本機械可読媒体はさらに、メモリから上記現在のトラバーサル状態を復元し、トラバーサルオペレーションを再開するオペレーションと、上記追跡アレイを読み出して、上記トラバーサルオペレーションを再開する開始点を判定するオペレーションとを上記機械に行わせるプログラムコードを含む、実施例34に記載の機械可読媒体。
【0546】
実施例36。
上記次のレイが上記次のBVHノードに交差する場合、上記次のBVHノードの複数の子ノードを、距離値に基づいてソートすることで、ソート順を生成し、上記BVHノードスタック内に、上記複数の子ノードを上記ソート順に格納する、実施例35に記載の機械可読媒体。
【0547】
本発明の実施形態が、上述された様々な段階を含んでよい。これらの段階は、汎用プロセッサ又は専用プロセッサにこれらの段階を実行させるのに用いられ得る機械実行可能命令で具現化されてよい。あるいは、これらの段階は、これらの段階を行うためのハードワイヤードロジックを含む特定のハードウェアコンポーネントによって、又はプログラム済みコンピュータコンポーネントとカスタムハードウェアコンポーネントとの任意の組み合わせによって実行されてよい。
【0548】
本明細書で説明されたように、命令は、特定のオペレーションを行うように構成された、若しくは予め定められた機能を有する特定用途向け集積回路(ASIC)などのハードウェアの特定の構成、又は非一時的コンピュータ可読媒体に具現化されるメモリに格納されたソフトウェア命令のことを指してよい。したがって、図に示す技術は、1つ又は複数の電子デバイス(例えば、エンドステーション、ネットワークエレメントなど)に格納され、そこで実行されるコード及びデータを用いて実装され得る。そのような電子デバイスは、コンピュータ機械可読媒体を用いてコード及びデータを格納し、(内部で、及び/又はネットワークを介して他の電子デバイスと)通信する。コンピュータ機械可読媒体には、非一時的コンピュータ機械可読記憶媒体(例えば、磁気ディスク、光ディスク、ランダムアクセスメモリ、リードオンリメモリ、フラッシュメモリデバイス、相変化メモリ)、一時的コンピュータ機械可読通信媒体(例えば、電気信号、光信号、音響信号、又は他の形態の伝搬信号、例えば、搬送波、赤外線信号、デジタル信号など)などがある。
【0549】
さらに、そのような電子デバイスは通常、1つ又は複数の記憶デバイス(非一時的な機械可読記憶媒体)、ユーザ入力/出力デバイス(例えば、キーボード、タッチスクリーン、及び/又はディスプレイ)、及びネットワーク接続などの1つ又は複数の他のコンポーネントに連結される1つ又は複数のプロセッサのセットを含む。これらのプロセッサのセットと他のコンポーネントとの連結は通常、1つ又は複数のバス及びブリッジ(バスコントローラとも呼ばれる)を介している。記憶デバイスとネットワークトラフィックを搬送する信号とはそれぞれ、1つ又は複数の機械可読記憶媒体と機械可読通信媒体とを表す。したがって、所与の電子デバイスの記憶デバイスは通常、当該電子デバイスの1つ又は複数のプロセッサのセットで実行するためのコード及び/又はデータを格納する。もちろん、本発明の一実施形態の1つ又は複数の部分が、ソフトウェア、ファームウェア、及び/又はハードウェアの異なる組み合わせを用いて実装されてもよい。この詳細な説明の全体を通して、説明のために、数多くの具体的な詳細が、本発明の十分な理解を提供するために記載された。しかしながら、これらの具体的な詳細の一部がなくても本発明は実施され得ることが、当業者には明らかであろう。特定の例においては、本発明の主題を曖昧にしないように、よく知られた構造及び機能が十分詳細に説明されなかった。したがって、本発明の範囲及び趣旨は、続く特許請求の範囲によって判断されるべきである。
(項目1)
ルートノードと、複数の内部ノードと、プリミティブを含む複数のリーフノードとを含む、階層的に配置された複数のノードを含むバウンディングボリューム階層(BVH)を構築するためのBVH生成部であって、各内部ノードが上記ルートノード又は別の内部ノードへの子ノードを含み、各リーフノードが内部ノードへの子ノードを含む、BVH生成部と、
第1の複数のエントリとして配置される第1格納バンクと、
第2の複数のエントリとして配置される第2格納バンクであって、上記第1の複数のエントリ及び上記第2の複数のエントリの各エントリが上記BVHをトラバースするレイを格納する、第2格納バンクと、
入射レイを、上記第1格納バンク及び上記第2格納バンクに現在格納されているレイの相対数に基づいて、上記第1格納バンク又は上記第2格納バンクのいずれかに分配するための割当回路と、
上記第1格納バンク及び上記第2格納バンクから交互に次のレイを選択するトラバーサル回路であって、前記トラバーサル回路は、BVHノードスタックの先頭から次のBVHノードを読み出し、且つ上記次のレイが上記次のBVHノードに交差するかを判定することによって、上記次のレイを上記BVHにトラバースする、トラバーサル回路と
を備える装置。
(項目2)
上記第1格納バンクに現在格納されている第1の数のレイと、上記第2格納バンクに現在格納されている第2の数のレイとを追跡するためのバンク監視回路をさらに備える、項目1に記載の装置。
(項目3)
上記バンク監視回路は、
上記割当回路により上記第1格納バンクにレイが加えられたことに応じてインクリメントされ、上記トラバーサル回路により上記第1格納バンクからレイが読み出されたことに応じてデクリメントされる第1カウンタと、
上記割当回路により上記第2格納バンクにレイが加えられたことに応じてインクリメントされ、上記トラバーサル回路により上記第2格納バンクからレイが読み出されたことに応じてデクリメントされる第2カウンタと
をさらに備える、項目2に記載の装置。
(項目4)
上記割当回路は上記入射レイを、上記第1カウンタ及び上記第2カウンタの相対値に基づいて、上記第1格納バンク又は上記第2格納バンクのいずれかに分配する、項目3に記載の装置。
(項目5)
上記BVHノードスタックは第1のBVHノードスタックを含み、上記第1のBVHノードスタックは、上記第1の複数の子ノードの親ノードにヒットしたレイに関連する第1の複数の内部子ノードを格納し、
上記装置は、第2の複数の内部子ノード及び/又はリーフノードを格納する第2のBVHノードスタックをさらに備える、項目1に記載の装置。
(項目6)
上記内部子ノードは、各内部子ノードと、上記次のレイに関連する座標値との間の距離に基づいて、上記スタック上に順序付けされる、項目5に記載の装置。
(項目7)
上記第1のBVHノードスタックは、上記第1格納バンクの上記第1の複数のエントリのうちの1つ又は複数に格納され、上記第2のBVHノードスタックは、上記第2格納バンクの上記第2の複数のエントリのうちの1つ又は複数に格納される、項目5に記載の装置。
(項目8)
上記BVHノードスタックはN個のエントリを含み、Nは上記BVHのノード数未満である、項目1に記載の装置。
(項目9)
上記BVHノードスタックの上記先頭から読み出された各BVHノードに対して、上記トラバーサル回路が上記次のレイを処理したことに応じて、追跡アレイを更新するための、トラバーサル追跡回路をさらに備える、項目8に記載の装置。
(項目10)
上記トラバーサル回路は、シェーダの実行に応じて現在のトラバーサル状態をメモリに保存し、上記現在のトラバーサル状態は、上記第1の複数のエントリと、上記第2の複数のエントリと、上記BVHノードスタックとを含む、項目9に記載の装置。
(項目11)
上記トラバーサル回路は、メモリから上記現在のトラバーサル状態を復元してトラバーサルオペレーションを再開し、上記トラバーサル回路は、上記追跡アレイを読み出して、上記トラバーサルオペレーションを再開する開始点を判定する、項目10に記載の装置。
(項目12)
上記次のレイが上記次のBVHノードに交差する場合、上記次のBVHノードの複数の子ノードを、距離値に基づいてソートすることで、ソート順を生成し、上記BVHノードスタック内に、上記複数の子ノードを上記ソート順に格納する、項目11に記載の装置。
(項目13)
ルートノードと、複数の内部ノードと、プリミティブを含む複数のリーフノードとを含む、階層的に配置された複数のノードを含むバウンディングボリューム階層(BVH)を生成する段階であって、各内部ノードが上記ルートノード又は別の内部ノードへの子ノードを含み、各リーフノードが内部ノードへの子ノードを含む、生成する段階と、
第1格納バンク内に第1の複数のエントリを構成する段階と、
第2格納バンク内に第2の複数のエントリを構成する段階であって、上記第1の複数のエントリ及び上記第2の複数のエントリの各エントリが上記BVHをトラバースするレイを格納する、構成する段階と、
入射レイを、上記第1格納バンク及び上記第2格納バンクに現在格納されているレイの相対数に基づいて、上記第1格納バンク又は上記第2格納バンクのいずれかに分配する段階と、
上記第1格納バンク及び上記第2格納バンクを交互に切り替えることによって、トラバーサル処理を行うために次のレイを選択する段階と、
BVHノードスタックの先頭から次のBVHノードをポップする段階と、
上記次のレイが上記次のBVHノードに交差するかを判定する段階と
を含む方法。
(項目14)
上記第1格納バンクに現在格納されている第1の数のレイと、上記第2格納バンクに現在格納されている第2の数のレイとを追跡する段階をさらに含む、項目13に記載の方法。
(項目15)
追跡する段階は、
上記第1格納バンクにレイが加えられたことに応じて第1カウンタをインクリメントし、上記第1格納バンクからレイが読み出されたことに応じてデクリメントされる段階と、
上記第1格納バンクにレイが加えられたことに応じて第2カウンタをインクリメントし、上記第1格納バンクからレイが読み出されたことに応じてデクリメントされる段階と
をさらに含む、項目14に記載の方法。
(項目16)
上記入射レイは、上記第1カウンタ及び上記第2カウンタの相対値に基づいて、上記第1格納バンク又は上記第2格納バンクのいずれかに分配される、項目15に記載の方法。
(項目17)
上記BVHノードスタックは第1のBVHノードスタックを含み、上記第1のBVHノードスタックは、上記第1の複数の子ノードの親ノードにヒットしたレイに関連する第1の複数の内部子ノードを格納し、
上記方法は、第2の複数の内部子ノード及び/又はリーフノードを第2のBVHノードスタックに格納する段階をさらに含む、項目13に記載の方法。
(項目18)
上記内部子ノードは、各内部子ノードと、上記次のレイに関連する座標値との間の距離に基づいて、上記スタック上に順序付けされる、項目17に記載の方法。
(項目19)
上記第1のBVHノードスタックは、上記第1格納バンクの上記第1の複数のエントリのうちの1つ又は複数に格納され、上記第2のBVHノードスタックは、上記第2格納バンクの上記第2の複数のエントリのうちの1つ又は複数に格納される、項目17に記載の方法。
(項目20)
上記BVHノードスタックはN個のエントリを含み、Nは上記BVHのノード数未満である、項目13に記載の方法。
(項目21)
上記次のBVHノードと、上記BVHノードスタックの上記先頭から読み出された各追加のBVHノードとに対して、上記次のレイを処理したことに応じて、追跡アレイを更新する段階をさらに含む、項目20に記載の方法。
(項目22)
シェーダの実行に応じて現在のトラバーサル状態をメモリに保存する段階であって、上記現在のトラバーサル状態は、上記第1の複数のエントリと、上記第2の複数のエントリと、上記BVHノードスタックとを含む、保存する段階をさらに含む、項目21に記載の方法。
(項目23)
メモリから上記現在のトラバーサル状態を復元してトラバーサルオペレーションを再開する段階と、
上記追跡アレイを読み出して、上記トラバーサルオペレーションを再開する開始点を判定する段階と
をさらに含む、項目22に記載の方法。
(項目24)
上記次のレイが上記次のBVHノードに交差する場合、上記次のBVHノードの複数の子ノードを、距離値に基づいてソートすることで、ソート順を生成し、上記BVHノードスタック内に、上記複数の子ノードを上記ソート順に格納する、項目23に記載の方法。
(項目25)
機械により実行されると、
ルートノードと、複数の内部ノードと、プリミティブを含む複数のリーフノードとを含む、階層的に配置された複数のノードを含むバウンディングボリューム階層(BVH)を生成するオペレーションであって、各内部ノードが上記ルートノード又は別の内部ノードへの子ノードを含み、各リーフノードが内部ノードへの子ノードを含む、生成するオペレーションと、
第1格納バンク内に第1の複数のエントリを構成するオペレーションと、
第2格納バンク内に第2の複数のエントリを構成するオペレーションであって、上記第1の複数のエントリ及び上記第2の複数のエントリの各エントリが上記BVHをトラバースするレイを格納する、構成するオペレーションと、
入射レイを、上記第1格納バンク及び上記第2格納バンクに現在格納されているレイの相対数に基づいて、上記第1格納バンク又は上記第2格納バンクのいずれかに分配するオペレーションと、
上記第1格納バンク及び上記第2格納バンクを交互に切り替えることによって、トラバーサル処理を行うために次のレイを選択するオペレーションと、
BVHノードスタックの先頭から次のBVHノードをポップするオペレーションと、
上記次のレイが上記次のBVHノードに交差するかを判定するオペレーションと
を上記機械に行わせるプログラムコードを格納した機械可読媒体。
(項目26)
上記機械可読媒体はさらに、上記第1格納バンクに現在格納されている第1の数のレイと、上記第2格納バンクに現在格納されている第2の数のレイとを追跡するオペレーションを上記機械に行わせるプログラムコードを含む、項目25に記載の機械可読媒体。
(項目27)
追跡するオペレーションは、
上記第1格納バンクにレイが加えられたことに応じて第1カウンタをインクリメントし、上記第1格納バンクからレイが読み出されたことに応じてデクリメントされる段階と、
上記第1格納バンクにレイが加えられたことに応じて第2カウンタをインクリメントし、上記第1格納バンクからレイが読み出されたことに応じてデクリメントされる段階と
をさらに含む、項目26に記載の機械可読媒体。
(項目28)
上記入射レイは、上記第1カウンタ及び上記第2カウンタの相対値に基づいて、上記第1格納バンク又は上記第2格納バンクのいずれかに分配される、項目27に記載の機械可読媒体。
(項目29)
上記BVHノードスタックは第1のBVHノードスタックを含み、上記第1のBVHノードスタックは、上記第1の複数の子ノードの親ノードにヒットしたレイに関連する第1の複数の内部子ノードを格納し、
上記機械可読媒体はさらに、第2の複数の内部子ノード及び/又はリーフノードを第2のBVHノードスタックに格納するオペレーションを上記機械に行わせるプログラムコードを含む、項目25に記載の機械可読媒体。
(項目30)
上記内部子ノードは、各内部子ノードと、上記次のレイに関連する座標値との間の距離に基づいて、上記スタック上に順序付けされる、項目29に記載の機械可読媒体。
(項目31)
上記第1のBVHノードスタックは、上記第1格納バンクの上記第1の複数のエントリのうちの1つ又は複数に格納され、上記第2のBVHノードスタックは、上記第2格納バンクの上記第2の複数のエントリのうちの1つ又は複数に格納される、項目29に記載の機械可読媒体。
(項目32)
上記BVHノードスタックはN個のエントリを含み、Nは上記BVHのノード数未満である、項目25に記載の機械可読媒体。
(項目33)
上記機械可読媒体はさらに、上記次のBVHノードと、上記BVHノードスタックの上記先頭から読み出された各追加のBVHノードとに対して、上記次のレイを処理したことに応じて、追跡アレイを更新するオペレーションを上記機械に行わせるプログラムコードを含む、項目32に記載の機械可読媒体。
(項目34)
上記機械可読媒体はさらに、シェーダの実行に応じて現在のトラバーサル状態をメモリに保存するオペレーションであって、上記現在のトラバーサル状態は、上記第1の複数のエントリと、上記第2の複数のエントリと、上記BVHノードスタックとを含む、保存するオペレーションを上記機械に行わせるプログラムコードを含む、項目33に記載の機械可読媒体。
(項目35)
上記機械可読媒体はさらに、
メモリから上記現在のトラバーサル状態を復元してトラバーサルオペレーションを再開するオペレーションと、
上記追跡アレイを読み出して、上記トラバーサルオペレーションを再開する開始点を判定するオペレーションと
を上記機械に行わせるプログラムコードを含む、項目34に記載の機械可読媒体。
(項目36)
上記次のレイが上記次のBVHノードに交差する場合、上記次のBVHノードの複数の子ノードを、距離値に基づいてソートすることで、ソート順を生成し、上記BVHノードスタック内に、上記複数の子ノードを上記ソート順に格納する、項目35に記載の機械可読媒体。