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

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

▶ インテル・コーポレーションの特許一覧

特許7589874アルファ値を用いてレイトレーシング効果を向上させる装置及び方法
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2024-11-18
(45)【発行日】2024-11-26
(54)【発明の名称】アルファ値を用いてレイトレーシング効果を向上させる装置及び方法
(51)【国際特許分類】
   G06T 15/06 20110101AFI20241119BHJP
【FI】
G06T15/06
【請求項の数】 22
【外国語出願】
(21)【出願番号】P 2020143818
(22)【出願日】2020-08-27
(65)【公開番号】P2021108101
(43)【公開日】2021-07-29
【審査請求日】2023-08-22
(31)【優先権主張番号】16/728,912
(32)【優先日】2019-12-27
(33)【優先権主張国・地域又は機関】US
(73)【特許権者】
【識別番号】591003943
【氏名又は名称】インテル・コーポレーション
(74)【代理人】
【識別番号】110000877
【氏名又は名称】弁理士法人RYUKA国際特許事務所
(72)【発明者】
【氏名】ホルガー グルーエン
【審査官】鈴木 明
(56)【参考文献】
【文献】特表2011-515766(JP,A)
(58)【調査した分野】(Int.Cl.,DB名)
G06T 15/06
(57)【特許請求の範囲】
【請求項1】
複数のレイを生成するレイ生成器と、
前記複数のレイのそれぞれレイ方向データを生成するレイ方向評価回路/ロジックと、
レイ方向データに少なくとも部分的に基づいて、前記複数のレイを複数のレイキューにソートするレイソーティング回路/ロジックと
を備え、
前記レイ方向データは、前記複数のレイのそれぞれのレイに関連付けられた量子化された方向値を含み、
レイごとの前記量子化された方向値は、前記レイが交差するボリュームの面を示す第1のデータと、前記レイと前記ボリュームの前記面との交差の量子化された交差座標を含む第2のデータとを有する、装置。
【請求項2】
複数のレイを生成するレイ生成器と、
前記複数のレイのそれぞれのレイ方向データを生成するレイ方向評価回路/ロジックと、
前記レイ方向データに少なくとも部分的に基づいて、前記複数のレイを複数のレイキューにソートするレイソーティング回路/ロジックと
を備え、
前記レイ方向データは、前記複数のレイのそれぞれのレイに関連付けられた量子化された方向値を含み、
前記レイソーティング回路/ロジックは、前記量子化された方向値と前記レイに関連付けられたシェーダレコードキーとの組み合わせに基づいて、前記複数のレイのうちの1つ又は複数を前記複数のレイキューにグループ化する、装置。
【請求項3】
前記レイソーティング回路/ロジックは、前記量子化されたレイ方向値及び前記シェーダレコードキーの両方を用いて、レイをレイキューと一致させるようにまず試み、一致が見つからない場合にのみ、前記シェーダレコードキーだけを用いて、前記レイをレイキューと一致させるように試みる、請求項に記載の装置。
【請求項4】
前記量子化されたレイ方向値及び前記シェーダレコードキーの前記両方を用いて、一致が見つからない場合、前記レイソーティング回路/ロジックは、前記レイを含む新たなレイキューを割り当てるように試みる、請求項に記載の装置。
【請求項5】
前記レイソーティング回路/ロジックは、前記新たなレイキューの割り当てができないと判定した後にだけ、前記シェーダレコードキーのみを用いて、前記レイをレイキューに一致させるように試みる、請求項に記載の装置。
【請求項6】
前記装置はさらに、
前記複数のレイのうちの1つ又は複数をバウンディングボリューム階層の中を通ってトラバースするレイトラバーサル回路と、
前記複数のレイのうちの1つ又は複数とシーン内の1つ又は複数のオブジェクトとの間の交差を判定するレイインターセクション回路と
を備える、請求項1から5のいずれか一項に記載の装置。
【請求項7】
複数のレイを生成するレイ生成器と、
前記複数のレイのそれぞれの近似的なレイ方向データを生成するレイ方向評価回路/ロジックと、
前記近似的なレイ方向データに少なくとも部分的に基づいて、前記複数のレイを複数のレイキューにソートするレイソーティング回路/ロジックと、
前記複数のレイのうちの1つ又は複数をバウンディングボリューム階層の中を通ってトラバースするレイトラバーサル回路と、
前記複数のレイのうちの1つ又は複数とシーン内の1つ又は複数のオブジェクトとの間の交差を判定するレイインターセクション回路と
を備える装置。
【請求項8】
前記装置はさらに、
前記複数のレイが格納されている前記複数のレイキューによって定められる複数のグループに前記複数のレイをディスパッチするレイディスパッチャを備える、請求項1から7のいずれか一項に記載の装置。
【請求項9】
複数のレイを生成する段階と、
前記複数のレイのそれぞれレイ方向データを決定する段階と、
レイ方向データに少なくとも部分的に基づいて、前記複数のレイを複数のレイキューにソートする段階と
含み、
前記レイ方向データは、前記複数のレイのそれぞれのレイに関連付けられた量子化された方向値を含み、
レイごとの前記量子化された方向値は、前記レイが交差するボリュームの面を示す第1のデータと、前記レイと前記ボリュームの前記面との交差の量子化された交差座標を含む第2のデータとを有する、方法。
【請求項10】
複数のレイを生成する段階と、
前記複数のレイのそれぞれのレイ方向データを決定する段階と、
前記レイ方向データに少なくとも部分的に基づいて、前記複数のレイを複数のレイキューにソートする段階と
を含み、
前記レイ方向データは、前記複数のレイのそれぞれのレイに関連付けられた量子化された方向値を含み、
前記ソートする段階はさらに、
前記量子化された方向値と前記レイに関連付けられたシェーダレコードキーとの組み合わせに基づいて、前記複数のレイを前記複数のレイキューにグループ化する段階を含む、方法。
【請求項11】
前記方法はさらに、
前記量子化されたレイ方向値及び前記シェーダレコードキーの両方を用いて、レイをレイキューと一致させるようにまず試みる段階と、
一致が見つからない場合にのみ、前記シェーダレコードキーだけを用いて、前記レイをレイキューと一致させるように試みる段階と
を含む、請求項10に記載の方法。
【請求項12】
前記方法はさらに、
前記量子化されたレイ方向値及び前記シェーダレコードキーの前記両方を用いて一致が見つからない場合、前記レイを含む新たなレイキューを割り当てるように試みる段階を含む、請求項11に記載の方法。
【請求項13】
前記シェーダレコードキーのみを用いて、前記レイをレイキューに一致させるように試みる段階は、前記新たなレイキューの割り当てができないと判定した後にだけ行われる、請求項12に記載の方法。
【請求項14】
前記方法はさらに、
前記複数のレイのうちの1つ又は複数をバウンディングボリューム階層の中を通ってトラバースする段階と、
前記複数のレイのうちの1つ又は複数とシーン内の1つ又は複数のオブジェクトとの間の交差を判定する段階と
を含む、請求項9から13のいずれか一項に記載の方法。
【請求項15】
複数のレイを生成する段階と、
前記複数のレイのそれぞれの近似的なレイ方向データを決定する段階と、
前記近似的なレイ方向データに少なくとも部分的に基づいて、前記複数のレイを複数のレイキューにソートする段階と、
前記複数のレイのうちの1つ又は複数をバウンディングボリューム階層の中を通ってトラバースする段階と、
前記複数のレイのうちの1つ又は複数とシーン内の1つ又は複数のオブジェクトとの間の交差を判定する段階と
を含む方法。
【請求項16】
前記方法はさらに、
前記複数のレイが格納されている前記複数のレイキューによって定められる複数のグループに前記複数のレイをディスパッチする段階を含む、請求項から15のいずれか一項に記載の方法。
【請求項17】
機械に、
複数のレイを生成する手順と、
前記複数のレイのそれぞれレイ方向データを決定する手順と、
レイ方向データに少なくとも部分的に基づいて、前記複数のレイを複数のレイキューにソートする手順と
をさせ、
前記レイ方向データは、前記複数のレイのそれぞれのレイに関連付けられた量子化された方向値を含み、
レイごとの前記量子化された方向値は、前記レイが交差するボリュームの面を示す第1のデータと、前記レイと前記ボリュームの前記面との交差の量子化された交差座標を含む第2のデータとを有する、プログラム。
【請求項18】
機械に、
複数のレイを生成する手順と、
前記複数のレイのそれぞれのレイ方向データを決定する手順と、
前記レイ方向データに少なくとも部分的に基づいて、前記複数のレイを複数のレイキューにソートする手順と
をさせ、
前記レイ方向データは、前記複数のレイのそれぞれのレイに関連付けられた量子化された方向値を含み、
前記ソートする手順はさらに、
前記量子化された方向値と前記レイに関連付けられたシェーダレコードキーとの組み合わせに基づいて、前記複数のレイを前記複数のレイキューにグループ化する手順を含む、プログラム。
【請求項19】
前記機械に、
前記量子化されたレイ方向値及び前記シェーダレコードキーの両方を用いて、レイをレイキューに一致させるようにまず試みる手順と、
一致が見つからない場合にのみ、前記シェーダレコードキーだけを用いて、前記レイをレイキューと一致させるように試みる手順と
をさらに実行させる、請求項18に記載のプログラム。
【請求項20】
前記機械に、
前記量子化されたレイ方向値及び前記シェーダレコードキーの前記両方を用いて一致が見つからない場合、前記レイを含む新たなレイキューを割り当てるように試みるさらに手順を実行させる、請求項19に記載のプログラム。
【請求項21】
前記シェーダレコードキーのみを用いて、前記レイをレイキューに一致させるように試みる手順は、前記新たなレイキューの割り当てができないと判定した後にだけ行われる、請求項20に記載のプログラム。
【請求項22】
請求項17から21のいずれか一項に記載のプログラムを格納する、機械可読記録媒体。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は概して、グラフィックスプロセッサの分野に関する。より具体的には、本発明は、値を用いてレイトレーシング効果を向上させるための装置及び方法に関する。
【背景技術】
【0002】
レイトレーシングとは、光輸送が物理ベースのレンダリングを通じてシミュレーションされる技術である。レイトレーシングは、映画のレンダリングで広く用いられているが、ほんの数年前まで、リアルタイムの実行には非常に多くのリソースを必要とすると考えられていた。レイトレーシングの重要なオペレーションのうちの1つが、「レイトラバーサル」として知られている、レイ-シーン間インターセクションを求める可視性クエリの処理であり、レイトラバーサルとは、バウンディングボリューム階層(BVH)においてノードをトラバースして交差することにより、レイ-シーン間インターセクションを算出することである。
【図面の簡単な説明】
【0003】
以下の図面を併用して、以下の詳細な説明から本発明の十分な理解を得ることができる。
【0004】
図1】1つ又は複数のプロセッサコアを有するプロセッサとグラフィックスプロセッサとを備えるコンピュータシステムの一実施形態のブロック図である。
【0005】
図2A】1つ又は複数のプロセッサコアと、統合メモリコントローラと、統合グラフィックスプロセッサとを有するプロセッサの一実施形態のブロック図である。
図2B】1つ又は複数のプロセッサコアと、統合メモリコントローラと、統合グラフィックスプロセッサとを有するプロセッサの一実施形態のブロック図である。
図2C】1つ又は複数のプロセッサコアと、統合メモリコントローラと、統合グラフィックスプロセッサとを有するプロセッサの一実施形態のブロック図である。
図2D】1つ又は複数のプロセッサコアと、統合メモリコントローラと、統合グラフィックスプロセッサとを有するプロセッサの一実施形態のブロック図である。
【0006】
図3A】別個のグラフィックス処理ユニットであってもよく、又は、複数のプロセッシングコアと統合されたグラフィックスプロセッサであってもよいグラフィックスプロセッサの一実施形態のブロック図である。
図3B】別個のグラフィックス処理ユニットであってもよく、又は、複数のプロセッシングコアと統合されたグラフィックスプロセッサであってもよいグラフィックスプロセッサの一実施形態のブロック図である。
図3C】別個のグラフィックス処理ユニットであってもよく、又は、複数のプロセッシングコアと統合されたグラフィックスプロセッサであってもよいグラフィックスプロセッサの一実施形態のブロック図である。
【0007】
図4】グラフィックスプロセッサ用のグラフィックス処理エンジンの一実施形態のブロック図である。
【0008】
図5A】グラフィックスプロセッサの別の実施形態のブロック図である。
図5B】グラフィックスプロセッサの別の実施形態のブロック図である。
【0009】
図6】実行回路及びロジックの例を示す。
【0010】
図7】一実施形態による、グラフィックスプロセッサ実行ユニットの命令フォーマットを示す。
【0011】
図8】グラフィックスパイプライン、メディアパイプライン、ディスプレイエンジン、スレッド実行ロジック、及びレンダリング出力パイプラインを含むグラフィックスプロセッサの別の実施形態のブロック図である。
【0012】
図9A】一実施形態による、グラフィックスプロセッサのコマンドフォーマットを示すブロック図である。
【0013】
図9B】一実施形態による、グラフィックスプロセッサのコマンドシーケンスを示すブロック図である。
【0014】
図10】一実施形態による、データ処理システム用の例示的なグラフィックスソフトウェアアーキテクチャを示す。
【0015】
図11A】集積回路及び例示的なパッケージアセンブリを製造するのに用いられ得る例示的なIPコア開発システムを示す。
図11B】集積回路及び例示的なパッケージアセンブリを製造するのに用いられ得る例示的なIPコア開発システムを示す。
図11C】集積回路及び例示的なパッケージアセンブリを製造するのに用いられ得る例示的なIPコア開発システムを示す。
図11D】集積回路及び例示的なパッケージアセンブリを製造するのに用いられ得る例示的なIPコア開発システムを示す。
【0016】
図12】一実施形態による、1つ又は複数のIPコアを用いて製造され得る例示的なシステムオンチップ集積回路を示す。
【0017】
図13】1つ又は複数のIPコアを用いて製造され得るシステムオンチップ集積回路の例示的なグラフィックスプロセッサを示す。
【0018】
図14】例示的なグラフィックスプロセッサアーキテクチャを示す。
【0019】
図15】レイトレーシングコア及びテンソルコアを含む処理アーキテクチャの一例を示す。
【0020】
図16】ノードのレイトレーシングクラスタを示す。
【0021】
図17】例えばレイトレーシングノードなどのさらなる詳細を示す。
【0022】
図18】1つの実施形態において利用されるレイの圧縮/伸張を示す。
【0023】
図19】ハイブリッド型レイトレーシングアーキテクチャの1つの実施形態を示す。
【0024】
図20】例示的なコールスタック参照を示す。
【0025】
図21】シェーダレコードポインタのセットの一例を示す。
【0026】
図22】バウンディングボリューム階層の一例を示す。
【0027】
図23】コールスタック及び関連するトラバーサル状態の、1つの実施形態を示す。
【0028】
図24】透明度及び/又は不透明性レベルを用いて、レイトレーシング効果を向上させるためのアーキテクチャの一実施形態を示す。
【0029】
図25】量子化された方向のソートキーの生成を示す。
【0030】
図26】シェーダレコードキー及びインターセクションキーを有するソートキーの一実施形態を示す。
【0031】
図27】ソート回路/ロジックが調整可能なソートキー精度を用いて、ソートFIFOを満たす例を示す。
【発明を実施するための形態】
【0032】
以下の説明では、説明のために、数多くの具体的な詳細が記載され、後述する本発明の実施形態の十分な理解を提供する。しかしながら、本発明の実施形態はこれらの具体的な詳細の一部がなくても実施され得ることが、当業者には明らかとなるであろう。他の例では、本発明の実施形態の基本的な原理を曖昧にしないように、よく知られた構造体及びデバイスがブロック図の形態で示されている。
[例示的なグラフィックスプロセッサアーキテクチャ及びデータ型]
[システム概要]
【0033】
図1は、一実施形態による処理システム100のブロック図である。システム100は、シングルプロセッサのデスクトップシステム、マルチプロセッサのワークステーションシステム、又は多数のプロセッサ102若しくはプロセッサコア107を有するサーバシステムに用いられてよい。1つの実施形態において、システム100は、モバイルデバイス、ハンドヘルド型デバイス、又は埋め込み型デバイスに用いるためにシステムオンチップ(SoC)集積回路に組み込まれた、例えば、ローカルエリアネットワーク又はワイドエリアネットワークへの有線接続性又は無線接続性を有する「モノのインターネット(IoT)」デバイスなどに組み込まれた処理プラットフォームである。
【0034】
1つの実施形態において、システム100は、サーバベースのゲーミングプラットフォーム、ゲーム及びメディアコンソールを含むゲームコンソール、モバイルゲーミングコンソール、ハンドヘルド型ゲームコンソール、又はオンラインゲームコンソールを含むことができる、又はこれらと連結することができる、又はこれらに統合されてもよい。いくつかの実施形態において、システム100は、携帯電話、スマートフォン、タブレット型コンピューティングデバイス、又は内部記憶容量の低いラップトップなどの、インターネットに接続されたモバイルデバイスの一部である。処理システム100はまた、スマートウォッチ型ウェアラブルデバイスなどのウェアラブルデバイス、視覚出力、音声出力、若しくは触知出力を提供して現実世界の視覚体験、音声体験、若しくは触知体験を補う、又は別の方法でテキスト、音声、グラフィックス、映像、ホログラフィック画像若しくは映像、若しくは触知フィードバックを提供する拡張現実(AR)又は仮想現実(VR)機能で強化されたスマートアイウェア若しくはスマートクローズ、他の拡張現実(AR)デバイス、あるいは他の仮想現実(VR)デバイスを含むことができる、又はこれらと連結することができる、又はこれらに統合されてもよい。いくつかの実施形態において、処理システム100は、テレビ若しくはセットトップボックス型デバイスを含む、又はその一部である。1つの実施形態において、システム100は、バス、トラクタトレイラ、乗用車、オートバイ若しくは電動アシスト自転車、飛行機、又はグライダ(あるいはこれらの任意の組み合わせ)などの自動運転車を含むことができる、又はこれらと連結することができる、又はこれらに統合されてもよい。自動運転車は、システム100を用いて、車両の周囲で感知された環境を処理してよい。
【0035】
いくつかの実施形態において、1つ又は複数のプロセッサ102はそれぞれ、実行されると、システム又はユーザソフトウェア用のオペレーションを行う命令を処理する1つ又は複数のプロセッサコア107を含む。いくつかの実施形態において、1つ又は複数のプロセッサコア107のうちの少なくとも1つが、特定の命令セット109を処理するように構成される。いくつかの実施形態において、命令セット109は、複合命令セットコンピューティング(CISC)、縮小命令セットコンピューティング(RISC)、又は超長命令語(VLIW)を介したコンピューティングを容易にし得る。1つ又は複数のプロセッサコア107は、異なる命令セット109を処理することができ、この命令セットは他の命令セットのエミュレーションを容易にする命令を含んでよい。プロセッサコア107は、デジタル信号プロセッサ(DSP)などの、他の処理デバイスも含んでよい。
【0036】
いくつかの実施形態において、プロセッサ102はキャッシュメモリ104を含む。アーキテクチャに応じて、プロセッサ102は、単一の内蔵キャッシュ又は複数レベルの内蔵キャッシュを備えることができる。いくつかの実施形態において、キャッシュメモリは、プロセッサ102の様々なコンポーネントの間で共有される。いくつかの実施形態において、プロセッサ102は、外付けキャッシュ(例えば、レベル3(L3)キャッシュ又はラストレベルキャッシュ(LLC))(不図示)も用い、外付けキャッシュは既知のキャッシュコヒーレンシ技術を用いて複数のプロセッサコア107の間で共有されてよい。レジスタファイル106が、プロセッサ102に追加的に含まれてよく、異なる種類のデータを格納する異なる種類のレジスタ(例えば、整数レジスタ、浮動小数点レジスタ、ステータスレジスタ、及び命令ポインタレジスタ)を含んでよい。いくつかのレジスタは汎用レジスタであってよく、他のレジスタはプロセッサ102の設計に固有のものであってよい。
【0037】
いくつかの実施形態において、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デバイスへの接続を提供する。
【0038】
メモリデバイス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の代わりに又はそれと連携して用いられてよい。
【0039】
いくつかの実施形態において、ディスプレイデバイス111をプロセッサ102に接続することができる。ディスプレイデバイス111は、モバイル電子デバイス若しくはラップトップデバイスに見られるような内蔵ディスプレイデバイス、又はディスプレイインタフェース(例えば、DisplayPortなど)を介して取り付けられる外付けディスプレイデバイスのうちの1つ又は複数であってよい。1つの実施形態において、ディスプレイデバイス111は、仮想現実(VR)アプリケーション又は拡張現実(AR)アプリケーションに用いるための立体表示デバイスなどのヘッドマウントディスプレイ(HMD)であってよい。
【0040】
いくつかの実施形態において、プラットフォームコントローラハブ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入力デバイスなどの入力デバイスを接続することができる。
【0041】
図示されたシステム100は、異なるように構成された他の種類のデータ処理システムが用いられてもよいので、例示的であって限定的ではないことが理解されるであろう。例えば、メモリコントローラ116及びプラットフォームコントローラハブ130の一例が、外付けグラフィックスプロセッサ118などの別個の外付けグラフィックスプロセッサに統合されてよい。1つの実施形態において、プラットフォームコントローラハブ130及び/又はメモリコントローラ116は、1つ又は複数のプロセッサ102の外部にあってよい。例えば、システム100は、外付けのメモリコントローラ116及びプラットフォームコントローラハブ130を含むことができ、これらは、プロセッサ102と通信するシステムチップセット内のメモリコントローラハブ及びペリフェラルコントローラハブとして構成されてよい。
【0042】
例えば、CPU、メモリ、及び他のコンポーネントなどのコンポーネントが熱性能を高めるように配置及び設計された回路基板(「スレッド」)が用いられ得る。いくつかの例において、プロセッサなどの処理コンポーネントがスレッドの表面側に位置しており、近くにあるDIMMなどのメモリがスレッドの裏面側に位置している。この設計により提供される気流の改善の結果として、これらのコンポーネントは、典型的なシステムの場合と比べて、より高い周波数及び電力レベルで動作し得るので、性能を高めることができる。さらに、スレッドは、ラックにある電力ケーブル及びデータ通信ケーブルと何も確認せずに接続できるように構成されるので、スレッドを素早く取り外す、アップグレードする、再度取り付ける、且つ/又は置き換える能力を高めることができる。同様に、プロセッサ、アクセラレータ、メモリ、及びデータ記憶ドライブなどの、スレッドに位置する個々のコンポーネントが、互いとの間隔が増したことにより、容易にアップグレードされるように構成される。例示した実施形態において、これらのコンポーネントはさらに、真正性を証明するハードウェア認証機能を含む。
【0043】
データセンタが、イーサネット(登録商標)及びOmni-Pathを含む複数の他のネットワークアーキテクチャをサポートする単一のネットワークアーキテクチャ(「ファブリック」)を利用できる。スレッドは光ファイバを介してスイッチに連結され得る。光ファイバは、典型的なツイストペアケーブル(例えば、カテゴリ5、カテゴリ5e、カテゴリ6など)より高い帯域幅と低い遅延を提供する。高い帯域幅で低い遅延の相互接続及びネットワークアーキテクチャにより、データセンタは使用時に、メモリ、アクセラレータ(例えば、GPU、グラフィックスアクセラレータ、FPGA、ASIC、ニューラルネットワーク、及び/又は人工知能アクセラレータなど)、及び物理的に分かれているデータ記憶ドライブなどのリソースをプールして、必要に応じてこれらのリソースにコンピュートリソース(例えば、プロセッサ)を提供してよく、その結果、プールされたリソースがあたかもローカルにあるかのように、コンピュートリソースがこれらのリソースにアクセスすることが可能になる。
【0044】
電力供給部又は電源が、システム100又は本明細書で説明される任意のコンポーネント若しくはシステムに、電圧及び/又は電流を提供できる。1つの例において、電力供給部は、壁コンセントに接続する、ACをDCに(交流電流を直流電流に)変換するアダプタを含む。そのようなAC電源は、再生可能エネルギー(例えば、太陽光発電)による電源であってよい。1つの例において、電源は、外付けのAC/DCコンバータなどDC電源を含む。1つの例において、電源又は電力供給部は、充電場に近接させることによって充電するワイヤレス充電ハードウェアを含む。1つの例において、電源は、内蔵バッテリ、交流電流供給部、モーションベースの電力供給部、太陽光発電供給部、又は燃料電池電源を含むことができる。
【0045】
図2A図2Dは、本明細書で説明される実施形態によって提供されるコンピューティングシステム及びグラフィックスプロセッサを示す。図2A図2Dの要素で、本明細書における任意の他の図の要素と同じ参照番号(又は名称)を有する要素は、本明細書のどこか他の箇所で説明される方式と同様な任意の方式で動作する又は機能することができるが、そのように限定されることはない。
【0046】
図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との間でコヒーレンシを維持する。
【0047】
いくつかの実施形態において、プロセッサ200は、1つ又は複数のバスコントローラユニット216のセット及びシステムエージェントコア210も含んでよい。1つ又は複数のバスコントローラユニット216は、1つ又は複数のPCIバス又はPCI Expressバスなどのペリフェラルバスのセットを管理する。システムエージェントコア210は、様々なプロセッサコンポーネントに管理機能を提供する。いくつかの実施形態において、システムエージェントコア210は、様々な外付けメモリデバイス(不図示)へのアクセスを管理する1つ又は複数の統合メモリコントローラ214を含む。
【0048】
いくつかの実施形態において、プロセッサコア202A~202Nのうちの1つ又は複数は、同時マルチスレッディングに対するサポートを含む。そのような実施形態において、システムエージェントコア210は、マルチスレッド処理の際に、コア202A~202Nを調整して動作させるコンポーネントを含む。システムエージェントコア210はさらに、パワーコントロールユニット(PCU)を含んでよく、PCUは、プロセッサコア202A~202N及びグラフィックスプロセッサ208の電力状態を調整するロジック及びコンポーネントを含む。
【0049】
いくつかの実施形態において、プロセッサ200はさらに、グラフィックス処理オペレーションを実行するグラフィックスプロセッサ208を含む。いくつかの実施形態において、グラフィックスプロセッサ208は、共有キャッシュユニット206のセット及びシステムエージェントコア210と連結し、1つ又は複数の統合メモリコントローラ214を含む。いくつかの実施形態において、システムエージェントコア210は、グラフィックスプロセッサを駆動して1つ又は複数の連結されたディスプレイに出力するディスプレイコントローラ211も含む。いくつかの実施形態において、ディスプレイコントローラ211はまた、少なくとも1つの相互接続を介してグラフィックスプロセッサと連結される別個のモジュールであってもよく、又はグラフィックスプロセッサ208に統合されてもよい。
【0050】
いくつかの実施形態において、リングベースの相互接続ユニット212が、プロセッサ200の内蔵コンポーネントを連結するのに用いられる。しかしながら、ポイントツーポイント相互接続、スイッチ型相互接続、又は他の技術などの、当技術分野でよく知られた技術を含む代替の相互接続ユニットが用いられてもよい。いくつかの実施形態において、グラフィックスプロセッサ208は、I/Oリンク213を介してリング相互接続212と連結する。
【0051】
例示的なI/Oリンク213は、複数の様々なI/O相互接続のうちの少なくとも1つを表しており、様々なプロセッサコンポーネントとeDRAMモジュールなどの高性能な埋め込み型メモリモジュール218との間の通信を容易にするオンパッケージI/O相互接続を含む。いくつかの実施形態において、プロセッサコア202A~202Nのそれぞれとグラフィックスプロセッサ208とは、埋め込み型メモリモジュール218を共有のラストレベルキャッシュとして用いることができる。
【0052】
いくつかの実施形態において、プロセッサコア202A~202Nは、同じ命令セットアーキテクチャを実行する同種のコアである。別の実施形態では、プロセッサコア202A~202Nは、命令セットアーキテクチャ(ISA)の観点から見ると異種であり、プロセッサコア202A~202Nのうちの1つ又は複数が第1の命令セットを実行し、その他のコアのうちの少なくとも1つが第1の命令セットのサブセット又は異なる命令セットを実行する。1つの実施形態において、プロセッサコア202A~202Nはマイクロアーキテクチャの観点から見ると異種であり、相対的に消費電力が高い1つ又は複数のコアが、消費電力が少ない1つ又は複数の電力コアと連結する。1つの実施形態において、プロセッサコア202A~202Nは、計算能力の観点から見ると異種である。さらに、プロセッサ200は、1つ又は複数のチップに実装されても、示されたコンポーネントを他のコンポーネントのほかに有するSoC集積回路として実装されてもよい。
【0053】
図2Bは、本明細書において説明されるいくつかの実施形態による、グラフィックスプロセッサコア219のハードウェアロジックのブロック図である。図2Bの要素で、本明細書における任意の他の図の要素と同じ参照番号(又は名称)を有する要素は、本明細書のどこか他の箇所で説明される方式と同様な任意の方式で動作する又は機能することができるが、そのように限定されることはない。グラフィックスプロセッサコア219は、コアスライスと呼ばれることがあり、モジュール式のグラフィックスプロセッサ内の1つ又は複数のグラフィックスコアであってよい。グラフィックスプロセッサコア219は、典型的な1つのグラフィックスコアスライスであり、本明細書で説明されるグラフィックスプロセッサは、目標電力及び性能範囲に基づいて複数のグラフィックスコアスライスを含んでよい。各グラフィックスプロセッサコア219は、汎用及び固定機能ロジックのモジュール式ブロックを含む、サブスライスとも呼ばれる複数のサブコア221A~221Fと連結された固定機能ブロック230を含んでよい。
【0054】
いくつかの実施形態において、固定機能ブロック230は、例えば、低性能及び/又は低電力グラフィックスプロセッサの実施態様において、グラフィックスプロセッサコア219の全てのサブコアにより共有され得るジオメトリ/固定機能パイプライン231を含む。様々な実施形態において、ジオメトリ/固定機能パイプライン231は、3D固定機能パイプライン(例えば、後述される図3A及び図4に見られるような3Dパイプライン312)、ビデオフロントエンドユニット、スレッド生成器及びスレッドディスパッチャ、並びに統合リターンバッファを管理する統合リターンバッファマネージャ(例えば、後述する図4の統合リターンバッファ418)を含む。
【0055】
1つの実施形態において、固定機能ブロック230は、グラフィックスSoCインタフェース232、グラフィックスマイクロコントローラ233、及びメディアパイプライン234も含む。グラフィックスSoCインタフェース232は、グラフィックスプロセッサコア219とシステムオンチップ集積回路内の他のプロセッサコアとの間のインタフェースを提供する。グラフィックスマイクロコントローラ233は、グラフィックスプロセッサコア219の、スレッドディスパッチ、スケジューリング、プリエンプションを含む様々な機能を管理するように構成可能なプログラム可能型サブプロセッサである。メディアパイプライン234(例えば、図3A及び図4のメディアパイプライン316)は、画像及び映像データを含むマルチメディアデータの復号、符号化、前処理、及び/又は後処理を容易にするロジックを含む。メディアパイプライン234は、サブコア221~221F内のコンピュートロジック又はサンプリングロジックへの要求を介してメディアオペレーションを実施する。
【0056】
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)にディスパッチすることができる。
【0057】
グラフィックスマイクロコントローラ233は、グラフィックスプロセッサコア219の様々なスケジューリングタスク及び管理タスクを実行するように構成され得る。1つの実施形態において、グラフィックスマイクロコントローラ233は、サブコア221A~221F内の実行ユニット(EU)アレイ222A~222F、224A~224Fの中の様々なグラフィックスパラレルエンジンに対して、グラフィックス及び/又はコンピュートワークロードスケジューリングを行うことができる。このスケジューリングモデルでは、グラフィックスプロセッサコア219を含むSoCのCPUコアで実行するホストソフトウェアが複数のグラフィックスプロセッサドアベルのうちの1つにワークロードを送信することができ、これにより、適切なグラフィックスエンジンにスケジューリングオペレーションを呼び出すことができる。スケジューリングオペレーションは、どのワークロードを次に実行するかを決定すること、ワークロードをコマンドストリーマに送信すること、あるエンジンで実行している既存のワークロードをプリエンプトすること、ワークロードの進行を監視すること、ワークロードが完了したときにホストソフトウェアに通知することを含む。1つの実施形態において、グラフィックスマイクロコントローラ233はまた、グラフィックスプロセッサコア219の低電力状態又はアイドル状態を容易にすることができ、システム上のオペレーティングシステム及び/又はグラフィックスドライバソフトウェアから独立して、低電力状態への移行時に、グラフィックスプロセッサコア219内のレジスタを節約し且つ復元する能力をグラフィックスプロセッサコア219に提供することができる。
【0058】
グラフィックスプロセッサコア219は、示されているサブコア221A~221Fより多くても少なくてもよく、最大でN個のモジュール式サブコアを有してよい。N個のサブコアのセットごとに、グラフィックスプロセッサコア219は、共有機能ロジック235、共有及び/又はキャッシュメモリ236、ジオメトリ/固定機能パイプライン237、及び様々なグラフィックス処理オペレーション及びコンピュート処理オペレーションを加速する追加の固定機能ロジック238も含むことができる。共有機能ロジック235は、図4の共有機能ロジック420に関連した論理ユニット(例えば、サンプラ、数学、及び/又はスレッド間通信ロジック)を含むことができ、これらの論理ユニットをグラフィックスプロセッサコア219内のN個のサブコアのそれぞれが共有できる。共有及び/又はキャッシュメモリ236は、グラフィックスプロセッサコア219内のN個のサブコア221A~221Fのセット用のラストレベルキャッシュになることができ、複数のサブコアがアクセス可能な共有メモリとしての機能も果たすことができる。ジオメトリ/固定機能パイプライン237は、固定機能ブロック230内のジオメトリ/固定機能パイプライン231の代わりに含まれてよく、同じ又は同様の論理ユニットを含むことができる。
【0059】
1つの実施形態において、グラフィックスプロセッサコア219は、グラフィックスプロセッサコア219が用いるための様々な固定機能アクセラレーションロジックを含むことができる追加の固定機能ロジック238を含む。1つの実施形態において、追加の固定機能ロジック238は、位置専用シェーディングに用いるための追加のジオメトリパイプラインを含む。位置専用シェーディングでは、2つのジオメトリパイプライン、すなわち、ジオメトリ/固定機能パイプライン238、231内のフルジオメトリパイプラインと、追加の固定機能ロジック238に含まれ得る追加のジオメトリパイプラインである間引きパイプラインとが存在する。1つの実施形態において、間引きパイプラインは、フルジオメトリパイプラインの機能限定版である。フルパイプライン及び間引きパイプラインは、同じアプリケーションの異なるインスタンスを実行することができ、各インスタンスは別個のコンテキストを有する。位置専用シェーディングは、破棄された三角形の長い間引き実行を隠すことができ、いくつかの例では、シェーディングをより早く完了することが可能になる。例えば1つの実施形態において、追加の固定機能ロジック238内の間引きパイプラインロジックは、主要なアプリケーションと並行して位置シェーダを実行することができ、一般的に、重要な結果をフルパイプラインより速く生成することができる。その理由は、間引きパイプラインは頂点の位置属性だけをフェッチしてシェーディングし、フレームバッファに対するピクセルのラスタ化及びレンダリングを行わないからである。間引きパイプラインは、全ての三角形の可視情報を、これらの三角形が間引きされているかどうかに関係なく計算するのに、生成された重要な結果を用いることができる。フルパイプライン(この例では、リプレイパイプラインと呼ばれることがある)は、間引きされた三角形をスキップし、最終的にラスタ化段階に送られる可視三角形だけをシェーディングするのに可視情報を消費することができる。
【0060】
1つの実施形態において、追加の固定機能ロジック238は、機械学習の訓練又は推論の最適化を含む実施態様について、固定機能の行列乗算ロジックなどの機械学習アクセラレーションロジックも含むことができる。
【0061】
各グラフィックスサブコア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を利用して、スレッドグループ内で実行するスレッドがオンチップメモリの共通プールを用いて実行することを可能にすることができる。
【0062】
図2Cは、マルチコアグループ240A~240Nに配置された専用のグラフィックス処理リソースのセットを含むグラフィックス処理ユニット(GPU)239を示す。単一のマルチコアグループ240Aの詳細だけが提供されているが、その他のマルチコアグループ240B~240Nも同じ又は同様のグラフィックス処理リソースのセットを備えてよいことが理解されるであろう。
【0063】
示されているように、マルチコアグループ240Aは、グラフィックスコア243のセットと、テンソルコア244のセットと、レイトレーシングコア245のセットとを含んでよい。スケジューラ/ディスパッチャ241が、様々なコア243、244、245で実行するためのグラフィックススレッドをスケジューリングしてディスパッチする。レジスタファイル242のセットが、グラフィックススレッドを実行するときに、コア243、244、245が用いるオペランド値を格納する。これらは、例えば、整数値を格納する整数レジスタ、浮動小数点値を格納する浮動小数点レジスタ、パックドデータ要素(整数及び/又は浮動小数点データ要素)を格納するベクトルレジスタ、及びテンソル/行列値を格納するタイルレジスタを含んでよい。1つの実施形態において、タイルレジスタは、複数のベクトルレジスタの組み合わせセットとして実装される。
【0064】
1つ又は複数のレベル1(L1)キャッシュと共有メモリユニット247との組み合わせが、テクスチャデータ、頂点データ、ピクセルデータ、レイデータ、バウンディングボリュームデータなどのグラフィックスデータを、各マルチコアグループ240Aにローカルに格納する。1つ又は複数のテクスチャユニット247は、テクスチャマッピング及びサンプリングなどのテクスチャリングオペレーションの実行にも用いられ得る。マルチコアグループ240A~240Nの全て又はそのサブセットによって共有されるレベル2(L2)キャッシュ253が、複数のコンカレントグラフィクススレッド用のグラフィックスデータ及び/又は命令を格納する。示されるように、L2キャッシュ253は、複数のマルチコアグループ240A~240N全体で共有されてよい。1つ又は複数のメモリコントローラ248が、GPU239をシステムメモリ(例えば、DRAM)及び/又は専用グラフィックスメモリ(例えば、GDDR6メモリ)であってよいメモリ249に連結する。
【0065】
入力/出力(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は、同じ仮想アドレス空間を共有してよい。
【0066】
1つの実施態様において、IOMMU251は仮想化をサポートする。この場合、IOMMU251は、ゲスト/グラフィックス仮想アドレスをゲスト/グラフィックス物理アドレスにマッピングするための第1セットのページテーブルと、ゲスト/グラフィックス物理アドレスを(例えば、システムメモリ249内の)システム/ホスト物理アドレスにマッピングするための第2セットのページテーブルとを管理してよい。第1及び第2セットのページテーブルのそれぞれのベースアドレスは、制御レジスタに格納され、コンテキストスイッチの際にスワップアウトされてよい(例えば、この結果、新たなコンテキストには関係のあるページテーブルのセットへのアクセスが提供される)。図2Cには示されていないが、コア243、244、245及び/又はマルチコアグループ240A~240Nのそれぞれは、ゲスト仮想からゲスト物理への変換、ゲスト物理からホスト物理への変換、及びゲスト仮想からホスト物理への変換をキャッシュに格納するためのトランスレーションルックアサイドバッファ(TLB)を含んでよい。
【0067】
1つの実施形態において、CPU246、GPU239、及びI/Oデバイス252は、単一の半導体チップ及び/又はチップパッケージに統合される。示されているメモリ249は、同じチップに統合されてもよく、オフチップインタフェースを介してメモリコントローラ248に連結されてもよい。1つの実施態様において、メモリ249は、他の物理システムレベルのメモリと同じ仮想アドレス空間を共有するGDDR6メモリを含むが、本発明の基本的な原理はこの特定の実施態様に限定されることはない。
【0068】
1つの実施形態において、テンソルコア244は、深層学習のオペレーションを実行するのに用いられる基本的なコンピュートオペレーションである行列演算を実行するように特に設計された複数の実行ユニットを含む。例えば、同時行列乗算オペレーションが、ニューラルネットワークの訓練及び推論に用いられてよい。テンソルコア244は、単精度浮動小数点(例えば、32ビット)、半精度浮動小数点(例えば、16ビット)、整数語(16ビット)、バイト(8ビット)、ハーフバイト(4ビット)を含む様々なオペランド精度を用いて行列処理を実行してよい。1つの実施形態において、ニューラルネットワークの実施態様が、レンダリングされた各シーンの特徴点を、場合によっては複数のフレームから詳細を組み合わせながら抽出し、高品質の最終イメージを構築する。
【0069】
深層学習の実施態様において、並列行列乗算作業がテンソルコア244で実行するためにスケジューリングされてよい。ニューラルネットワークの訓練は、特に、かなりの数の行列ドット積演算を必要とする。N×N×Nの行列乗算の内積の定式化を処理するために、テンソルコア244は、少なくともN個のドット積処理要素を含んでよい。行列乗算を開始する前に、1つの行列全体がタイルレジスタにロードされ、第2の行列の少なくとも1つの列が、N個のサイクルのサイクルごとにロードされる。各サイクルには、処理されたN個のドット積がある。
【0070】
行列要素が、特定の実施態様に応じて、16ビットワード、8ビットバイト(例えば、INT8)、及び4ビットハーフバイト(例えば、INT4)を含む異なる精度で格納されてよい。異なる精度モードは、最も効率的な精度が異なるワークロード(例えば、バイト及びハーフバイトへの量子化を許容できる推論ワークロードなど)に確実に用いられるようにするために、テンソルコア244に対して指定されてよい。
【0071】
1つの実施形態において、レイトレーシングコア245は、リアルタイムレイトレーシングの実施態様及び非リアルタイムレイトレーシングの実施態様の両方に対するレイトレーシングオペレーションを加速する。具体的には、レイトレーシングコア245は、バウンディングボリューム階層(BVH)を用いてレイトラバーサルを実行し、レイとBVHボリューム内に囲まれたプリミティブとの間の交差を識別するためのレイトラバーサル/インターセクション回路を含む。レイトレーシングコア245は、(例えば、Zバッファ又は同様の仕組みを用いて)深度テスト及び間引きを行うための回路も含んでよい。1つの実施態様において、レイトレーシングコア245は、本明細書で説明される画像ノイズ除去技術と連携して、トラバーサルオペレーション及びインターセクションオペレーションを行い、その少なくとも一部が、テンソルコア244で実行されてよい。例えば、1つの実施形態において、テンソルコア244は、深層学習ニューラルネットワークを実装して、レイトレーシングコア245により生成されたフレームのノイズ除去を行う。しかしながら、CPU246、グラフィックスコア243、及び/又はレイトレーシングコア245も、ノイズ除去アルゴリズム及び/又は深層学習アルゴリズムの全て又は一部を実装してよい。
【0072】
さらに、上述したように、ノイズ除去への分散型アプローチが利用されてよく、そのアプローチでは、GPU239はコンピューティングデバイスの中にあり、当該コンピューティングデバイスは、ネットワーク又は高速相互接続を介して他のコンピューティングデバイスに連結されている。本実施形態において、相互接続されたコンピューティングデバイスはニューラルネットワーク学習/訓練用データを共有し、異なる種類の画像フレーム及び/又は異なるグラフィックスアプリケーションに対してノイズ除去を行うことをシステム全体が学習する速度を向上させる。
【0073】
1つの実施形態において、レイトレーシングコア245は、全てのBVHトラバーサル及びレイ-プリミティブ間インターセクションを処理し、グラフィックスコア243がレイ当たり数千の命令で過負荷になるのを防ぐ。1つの実施形態において、各レイトレーシングコア245は、バウンディングボックステストを行うための第1セットの専用回路(例えば、トラバーサルオペレーション用)と、レイ-三角形間インターセクションテスト(例えば、トラバースしたレイを交差する)を行うための第2セットの専用回路とを含む。したがって、1つの実施形態において、マルチコアグループ240Aはレイプローブを起動するだけでよく、レイトレーシングコア245は独立して、レイトラバーサル及び交差を行い、ヒットデータ(例えば、ヒット、ヒットなし、複数ヒットなど)をスレッドコンテキストに戻す。その他のコア243、244は、他のグラフィックス作業又はコンピュート作業を行うために解放されており、レイトレーシングコア245は、トラバーサルオペレーション及びインターセクションオペレーションを行う。
【0074】
1つの実施形態において、各レイトレーシングコア245は、BVHテストオペレーションを行うためのトラバーサルユニットと、レイ-プリミティブ間インターセクションテストを行うインターセクションユニットとを含む。インターセクションユニットは、「ヒットあり」、「ヒットなし」、又は「複数ヒット」の応答を生成し、それを適切なスレッドに提供する。トラバーサルオペレーション及びインターセクションオペレーションの際に、他のコア(例えば、グラフィックスコア243及びテンソルコア244)の実行リソースは、他の形態のグラフィックス作業を行うために解放されている。
【0075】
後述する1つの特定の実施形態において、ハイブリッドラスタ化/レイトレーシング手法が用いられ、その手法では、グラフィックスコア243とレイトレーシングコア245との間で作業が分散される。
【0076】
1つの実施形態において、レイトレーシングコア245(及び/又は他のコア243、244)は、Microsoft(登録商標)のDirectXレイトレーシング(DXR)などのレイトレーシング命令セット用のハードウェアサポートを含む。DXRには、DispatchRaysコマンド、並びにray-generationシェーダ、closest-hitシェーダ、any-hitシェーダ、及びmissシェーダが含まれ、これらによって、オブジェクトごとに一意のセットのシェーダ及びテクスチャを割り当てることが可能になる。レイトレーシングコア245、グラフィックスコア243、及びテンソルコア244によりサポートされ得る別のレイトレーシングプラットフォームが、Vulkan 1.1.85である。しかしながら、本発明の基本的な原理は、いかなる特定のレイトレーシングISAにも限定されることはないことに留意されたい。
【0077】
一般的には、様々なコア245、244、243は、レイトレーシング命令セットをサポートしてよく、レイトレーシング命令セットには、Ray Generation、Closest Hit、Any Hit、Ray-primitive Intersection、Per-primitive and hierarchical Bounding box Construction、Miss、Visit、及びExceptions用の命令/機能が含まれる。より具体的には、1つの実施形態が、以下の機能を実行するためのレイトレーシング命令を含む。
【0078】
Ray Generation:Ray Generation命令は、ピクセルごと、サンプルごと、又は他のユーザ定義型作業割り当てごとに実行されてよい。
【0079】
Closest Hit:Closest Hit命令は、シーン内のレイとプリミティブとの最も近い交差ポイントを探し出すために実行されてよい。
【0080】
Any Hit:Any Hit命令は、シーン内のレイとプリミティブとの間の複数の交差を識別し、場合によっては、新たな最も近い交差ポイントを識別する。
【0081】
Intersection:Intersection命令は、レイ-プリミティブ間インターセクションテストを行い、結果を出力する。
【0082】
Per-primitive Bounding box Construction:この命令は、(例えば、新たなBVH又は他のアクセラレーションデータ構造を構築する場合に)所与のプリミティブ又はプリミティブのグループの周りにバウンディングボックスを構築する。
【0083】
Miss:シーン内又はシーンの指定領域内の全てのジオメトリに、レイが当たらなかったことを示す。
【0084】
Visit:レイがトラバースすることになる子ボリュームを示す。
【0085】
Exceptions:(例えば、様々なエラー条件のために呼び出される)様々な種類の例外ハンドラを含む。
【0086】
図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コントローラが実行するであろうオペレーションを実行するロジックを含んでよい。
【0087】
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にフェッチされてよい。
【0088】
オペレーションの際に、1つ又は複数のCPU246は、レジスタ、又はGPGPU270内のアクセス可能なアドレス空間にマッピングされているメモリに、コマンドを書き込むことができる。コマンドプロセッサ257は、レジスタ又はメモリからコマンドを読み出し、これらのコマンドがGPGPU270内でどのように処理されるかを決定することができる。次に、これらのコマンドを実行するために、スレッドディスパッチャ258が、コンピュートユニット260A~260Nにスレッドをディスパッチするのに用いられてよい。各コンピュートユニット260A~260Nは、他のコンピュートユニットから独立して、スレッドを実行することができる。さらに、各コンピュートユニット260A~260Nは、条件付き計算用に独立して構成されてよく、条件付きで計算の結果をメモリに出力できる。コマンドプロセッサ257は、送信されたコマンドが完了した場合、1つ又は複数のCPU246を中断できる。
【0089】
図3A図3Cは、本明細書で説明される実施形態により提供される、追加のグラフィックスプロセッサ及びコンピュートアクセラレータアーキテクチャのブロック図を示す。図3A図3Cの要素で、本明細書における任意の他の図の要素と同じ参照番号(又は名称)を有する要素は、本明細書のどこか他の箇所で説明される方式と同様な任意の方式で動作する又は機能することができるが、そのように限定されることはない。
【0090】
図3Aはグラフィックスプロセッサ300のブロック図である。グラフィックスプロセッサ300は、個別のグラフィックス処理ユニットであってもよく、複数のプロセッシングコア又は限定されることはないがメモリデバイス若しくはネットワークインタフェースなどの他の半導体デバイスと統合されたグラフィックスプロセッサであってもよい。いくつかの実施形態において、グラフィックスプロセッサは、グラフィックスプロセッサ上のレジスタへのメモリマップドI/Oインタフェースを介して、プロセッサメモリに置かれたコマンドを用いて通信する。いくつかの実施形態において、グラフィックスプロセッサ300は、アクセスメモリへのメモリインタフェース314を含む。メモリインタフェース314は、ローカルメモリ、1つ又は複数の内蔵キャッシュ、1つ又は複数の共有外付けキャッシュ、及び/又はシステムメモリへのインタフェースであり得る。
【0091】
いくつかの実施形態において、グラフィックスプロセッサ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)フォーマットが含まれる。
【0092】
いくつかの実施形態において、グラフィックスプロセッサ300は、例えば、ビット境界ブロック転送を含む2次元(2D)ラスタライザオペレーションを実行するためのブロック画像転送(BLIT)エンジン304を含む。しかしながら、1つの実施形態において、2Dグラフィックスオペレーションは、グラフィックス処理エンジン(GPE)310の1つ又は複数のコンポーネントを用いて実行される。いくつかの実施形態において、GPE310は、3次元(3D)グラフィックスオペレーション及びメディアオペレーションを含むグラフィックスオペレーションを実行するためのコンピュートエンジンである。
【0093】
いくつかの実施形態において、GPE310は、3Dプリミティブ形状(例えば、矩形、三角形など)に作用する処理機能を用いて3次元画像及びシーンをレンダリングするなどの、3Dオペレーションを実行するための3Dパイプライン312を含む。3Dパイプライン312は、プログラム可能要素及び固定機能要素を含む。これらの要素は、要素内の様々なタスクを実行する且つ/又は実行スレッドを3D/メディアサブシステム315に生成する。3Dパイプライン312はメディアオペレーションを実行するのに用いられ得るが、GPE310の一実施形態が、映像後処理及び画像補正などのメディアオペレーションを実行するのに特に用いられるメディアパイプライン316も含む。
【0094】
いくつかの実施形態において、メディアパイプライン316は、ビデオコーデックエンジン306の代わりに又はそれに代わって、映像復号アクセラレーション、映像デインターレーシング、及び映像符号化アクセラレーションなどの1つ又は複数の専用メディアオペレーションを実行するための固定機能又はプログラム可能型ロジックユニットを含む。いくつかの実施形態において、メディアパイプライン316はさらに、3D/メディアサブシステム315で実行するためのスレッドを生成するスレッド生成ユニットを含む。生成されたスレッドは、3D/メディアサブシステム315に含まれる1つ又は複数のグラフィックス実行ユニットで、メディアオペレーション用の計算を行う。
【0095】
いくつかの実施形態において、3D/メディアサブシステム315は、3Dパイプライン312及びメディアパイプライン316により生成されたスレッドを実行するためのロジックを含む。1つの実施形態において、これらのパイプラインはスレッド実行要求を3D/メディアサブシステム315に送信する。3D/メディアサブシステム315は、様々な要求を調整して利用可能なスレッド実行リソースにディスパッチするためのスレッドディスパッチロジックを含む。これらの実行リソースは、3Dスレッド及びメディアスレッドを処理するためのグラフィックス実行ユニットのアレイを含む。いくつかの実施形態において、3D/メディアサブシステム315は、スレッド命令及びデータ用の1つ又は複数の内蔵キャッシュを含む。いくつかの実施形態において、サブシステムは、スレッド間でデータを共有し出力データを格納するための、レジスタ及びアドレス指定可能メモリを含む共有メモリも含む。
【0096】
図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でさらに詳細に説明されるように、ベースダイ又はベース基板に接合される。
【0097】
グラフィックス処理エンジンクラスタ322は、オンチップ又はオンパッケージファブリック相互接続324と接続できる。ファブリック相互接続324は、グラフィックスエンジンタイル310A~310Dと、ビデオコーデック306及び1つ又は複数のコピーエンジン304などのコンポーネントとの間の通信を可能にし得る。コピーエンジン304は、メモリデバイス326A~326Dとの間で、またメモリデバイス326A~326Dと、グラフィックスプロセッサ320の外部にあるメモリ(例えば、システムメモリ)との間で、データを移動するのに用いられてよい。ファブリック相互接続324は、グラフィックスエンジンタイル310A~310Dを相互接続するのにも用いられてよい。グラフィックスプロセッサ320は、外付けディスプレイデバイス318との接続を可能にするためのディスプレイコントローラ302を任意選択で含んでよい。グラフィックスプロセッサはまた、グラフィックスアクセラレータ又はコンピュートアクセラレータとして構成されてよい。アクセラレータ構成において、ディスプレイコントローラ302及びディスプレイデバイス318は省略されてよい。
【0098】
グラフィックスプロセッサ320は、ホストインタフェース328を介してホストシステムに接続できる。ホストインタフェース328は、グラフィックスプロセッサ320、システムメモリ、及び/又は他のシステムコンポーネントとの間の通信を可能にし得る。ホストインタフェース328は、例えば、PCI Expressバス又は別のタイプのホストシステムインタフェースであってよい。
【0099】
図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を介してホストプロセッサ及びメモリにも接続できる。
【0100】
[グラフィックス処理エンジン]
【0101】
図4は、いくつかの実施形態による、グラフィックスプロセッサのグラフィックス処理エンジン410のブロック図である。1つの実施形態において、グラフィックス処理エンジン(GPE)410は、図3Aに示すGPE310のあるバージョンであり、図3Bのグラフィックスエンジンタイル310A~310Dを表してもよい。図4の要素で、本明細書における任意の他の図の要素と同じ参照番号(又は名称)を有する要素は、本明細書のどこか他の箇所で説明される方式と同様な任意の方式で動作する又は機能することができるが、そのように限定されることはない。例えば、図3Aの3Dパイプライン312及びメディアパイプライン316が示されている。メディアパイプライン316は、GPE410のいくつかの実施形態において任意選択であり、GPE410に明示的に含まれなくてもよい。例えば少なくとも一実施形態において、別個のメディア及び/又はイメージプロセッサがGPE410に連結される。
【0102】
いくつかの実施形態において、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つ又は複数のグラフィックスコアを含む。各グラフィックスコアは、グラフィックスオペレーション及びコンピュートオペレーションを行うための汎用実行ロジック及び特定グラフィックス向け実行ロジック、並びに固定機能テクスチャ処理及び/又は機械学習人工知能アクセラレーションロジックを含むグラフィックス実行リソースのセットを含む。
【0103】
様々な実施形態において、3Dパイプライン312は、命令を処理して実行スレッドをグラフィックスコアアレイ414にディスパッチすることにより1つ又は複数のシェーダプログラムを処理するための固定機能ロジック及びプログラム可能型ロジックを含むことができる。シェーダプログラムとは、頂点シェーダ、ジオメトリシェーダ、ピクセルシェーダ、フラグメントシェーダ、コンピュートシェーダ、又は他のシェーダプログラムなどである。グラフィックスコアアレイ414は、これらのシェーダプログラムの処理に用いるために、統合された実行リソースのブロックを提供する。グラフィックスコアアレイ414のグラフィックスコア415A~415B内の多目的実行ロジック(例えば、実行ユニット)が、様々な3D APIシェーダ言語に対するサポートを含み、複数のシェーダに関連した複数の同時実行スレッドを実行できる。
【0104】
いくつかの実施形態において、グラフィックスコアアレイ414は、映像処理及び/又は画像処理などのメディア機能を実行するための実行ロジックを含む。1つの実施形態において、実行ユニットは、グラフィックス処理オペレーションのほかに、並列汎用計算オペレーションを行うようにプログラム可能な汎用ロジックを含む。汎用ロジックは、図1のプロセッサコア107又は図2Aに見られるようなコア202A~202Nの中にある汎用ロジックと並行して又は連動して、処理オペレーションを実行できる。
【0105】
グラフィックスコアアレイ414で実行するスレッドにより生成される出力データが、統合リターンバッファ(URB)418内のメモリにデータを出力できる。URB418は、複数のスレッドのデータを格納できる。いくつかの実施形態において、URB418は、グラフィックスコアアレイ414で実行する異なるスレッド間でデータを送信するのに用いられてよい。いくつかの実施形態において、URB418はさらに、グラフィックスコアアレイのスレッドと共有機能ロジック420内の固定機能ロジックとの間の同期に用いられてもよい。
【0106】
いくつかの実施形態において、グラフィックスコアアレイ414はスケーラブルなので、このアレイは可変数のグラフィックスコアを含み、それぞれがGPE410の目標電力及び性能レベルに基づいて可変数の実行ユニットを有する。1つの実施形態において、これらの実行リソースは動的にスケーラブルであるため、必要に応じて実行リソースを有効にしても無効にしてもよい。
【0107】
グラフィックスコアアレイ414は、グラフィックスコアアレイ内のグラフィックスコア間で共有される複数のリソースを含む共有機能ロジック420と連結する。共有機能ロジック420内の共有機能は、専用の補足的な機能をグラフィックスコアアレイ414に提供するハードウェアロジックユニットである。様々な実施形態において、共有機能ロジック420は、限定されることはないが、サンプラロジック421、数学ロジック422、及びスレッド間通信(ITC)ロジック423を含む。さらに、いくつかの実施形態が、共有機能ロジック420内に1つ又は複数のキャッシュ425を実装する。
【0108】
共有機能が実装されるのは、少なくとも、所与の専用機能に対する要求がグラフィックスコアアレイ414内に含めるには不十分になる場合である。代わりに、この専用機能の単一のインスタンス化が、スタンドアロンエンティティとして共有機能ロジック420に実装され、グラフィックスコアアレイ414内の実行リソースの間で共有される。グラフィックスコアアレイ414の間で共有され、グラフィックスコアアレイ414内に含まれる正確な機能のセットは、複数の実施形態全体で変化する。いくつかの実施形態において、グラフィックスコアアレイ414によって広く用いられる、共有機能ロジック420内の特定の共有機能が、グラフィックスコアアレイ414内の共有機能ロジック416に含まれてよい。様々な実施形態において、グラフィックスコアアレイ414内の共有機能ロジック416は、共有機能ロジック420内の一部又は全てのロジックを含むことができる。1つの実施形態において、共有機能ロジック420内の全てのロジック要素は、グラフィックスコアアレイ414の共有機能ロジック416内のロジック要素と重複してもよい。1つの実施形態において、共有機能ロジック420は、グラフィックスコアアレイ414内の共有機能ロジック416を優先して除外される。
【0109】
[実行ユニット]
【0110】
図5A図5Bは、本明細書で説明される実施形態による、グラフィックスプロセッサコアで利用される処理要素のアレイを含むスレッド実行ロジック500を示す。図5A図5Bの要素で、本明細書における任意の他の図の要素と同じ参照番号(又は名称)を有する要素は、本明細書のどこか他の箇所で説明される方式と同様な任意の方式で動作する又は機能することができるが、そのように限定されることはない。図5A図5Bは、スレッド実行ロジック500の概要を示しており、スレッド実行ロジック500は、図2Bの各サブコア221A~221Fを用いて示されるハードウェアロジックを代表してよい。図5Aは、汎用グラフィックスプロセッサ内の実行ユニットを代表しており、図5Bは、コンピュートアクセラレータ内で用いられ得る実行ユニットを代表している。
【0111】
図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のアレイは、任意の数の個々の実行ユニットを含むようにスケーラブルである。
【0112】
いくつかの実施形態において、実行ユニット508A~508Nは主として、シェーダプログラムを実行するのに用いられる。シェーダプロセッサ502は、様々なシェーダプログラムを処理し、スレッドディスパッチャ504を介して、シェーダプログラムに関連した実行スレッドをディスパッチすることができる。1つの実施形態において、スレッドディスパッチャは、グラフィックスパイプライン及びメディアパイプラインからのスレッド開始要求を調整し、要求されたスレッドを実行ユニット508A~508Nのうちの1つ又は複数の実行ユニット上にインスタンス化するためのロジックを含む。例えば、ジオメトリパイプラインが、頂点シェーダ、テッセレーションシェーダ、又はジオメトリシェーダを処理のためにスレッド実行ロジックにディスパッチできる。いくつかの実施形態において、スレッドディスパッチャ504は、実行中のシェーダプログラムからのランタイムスレッド生成要求を処理することもできる。
【0113】
いくつかの実施形態において、実行ユニット508A~508Nは、多くの標準的な3Dグラフィックスシェーダ命令に対するネイティブサポートを含む命令セットをサポートしているので、グラフィックスライブラリからのシェーダプログラム(例えば、Direct 3D及びOpenGL)が最小限の変換で実行されるようになる。実行ユニットは、頂点処理及びジオメトリ処理(例えば、頂点プログラム、ジオメトリプログラム、頂点シェーダ)、ピクセル処理(例えば、ピクセルシェーダ、フラグメントシェーダ)、並びに汎用処理(例えば、コンピュートシェーダ及びメディアシェーダ)をサポートしている。実行ユニット508A~508Nのそれぞれは、マルチ発行単一命令多重データ(SIMD)実行が可能であり、マルチスレッドオペレーションによって、高遅延のメモリアクセスにもかかわらず効率的な実行環境が可能になる。各実行ユニット内の各ハードウェアスレッドは、専用の高帯域幅レジスタファイル及び関連する独立したスレッド状態を有する。実行は、整数演算、単精度及び倍精度の浮動小数点演算、SIMD分岐性能、論理演算、超越演算、並びに他の雑演算が可能なパイプラインに対して、クロックごとのマルチ発行である。メモリ又は複数の共有機能のうちの1つからのデータを待つ間に、実行ユニット508A~508N内の依存性ロジックが、要求したデータが戻ってくるまで、待機中のスレッドをスリープ状態にさせる。待機中のスレッドがスリープしている間、ハードウェアリソースが他のスレッドの処理に当てられてよい。例えば、頂点シェーダオペレーションに関連した遅延の際に、実行ユニットが、異なる頂点シェーダを含むピクセルシェーダ、フラグメントシェーダ、又は別のタイプのシェーダプログラムのオペレーションを実行できる。様々な実施形態が、SIMDの使用に対する代替として又はSIMDの使用に加えて、単一命令多重スレッド(SIMT)を使用して実行を用いるのに適用できる。SIMDコア又はオペレーションへの参照が、SIMTにも適用でき、SIMTと組み合わせてSIMDにも適用できる。
【0114】
実行ユニット508A~508N内の各実行ユニットは、データ要素のアレイ上で動作する。データ要素の数は、「実行サイズ」又は命令に対するチャネルの数である。実行チャネルが、データ要素アクセス、マスキング、及び命令内のフロー制御についての実行の論理ユニットである。チャネルの数は、特定のグラフィックスプロセッサ用の物理的な算術論理ユニット(ALU)又は浮動小数点ユニット(FPU)の数とは無関係であってよい。いくつかの実施形態において、実行ユニット508A~508Nは、整数データ型及び浮動小数点データ型をサポートする。
【0115】
実行ユニットの命令セットは、SIMD命令を含む。様々なデータ要素は、パックドデータ型としてレジスタに格納されてよく、実行ユニットは、これらの要素のデータサイズに基づいて様々な要素を処理することになる。例えば、256ビット幅のベクトルを処理する場合、256ビットのベクトルはレジスタに格納され、実行ユニットは、4個の別個の64ビットパックドデータ要素(クアッドワード(QW)サイズのデータ要素)、8個の別個の32ビットパックドデータ要素(ダブルワード(DW)サイズのデータ要素)、16個の別個の16ビットパックドデータ要素(ワード(W)サイズのデータ要素)、又は32個の別個の8ビットデータ要素(バイト(B)サイズのデータ要素)としてベクトルを処理する。しかしながら、異なるベクトル幅及びレジスタサイズが可能である。
【0116】
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が共通の命令ポインタレジスタを用いて実行することを可能にする。
【0117】
実行ユニット用のスレッド命令をキャッシュに格納するために、1つ又は複数の内蔵命令キャッシュ(例えば、506)がスレッド実行ロジック500に含まれる。いくつかの実施形態において、スレッド実行時にスレッドデータをキャッシュに格納するために、1つ又は複数のデータキャッシュ(例えば、512)が含まれる。実行ロジック500で実行するスレッドが、明示的に管理されたデータを共有ローカルメモリ511に格納することもできる。いくつかの実施形態において、テクスチャサンプリングを3Dオペレーションに提供し、またメディアサンプリングをメディアオペレーションに提供するために、サンプラ510が含まれる。いくつかの実施形態において、サンプラ510は、サンプリングデータを実行ユニットに提供する前のサンプリングプロセスの際にテクスチャデータ又はメディアデータを処理するための、専用のテクスチャ又はメディアサンプリング機能を含む。
【0118】
グラフィックス及びメディアパイプラインは実行時に、スレッド生成ディスパッチロジックを介して、スレッド開始要求をスレッド実行ロジック500に送信する。ジオメトリックオブジェクトのグループが処理されてピクセルデータにラスタ化されると、シェーダプロセッサ502内のピクセルプロセッサロジック(例えば、ピクセルシェーダロジック、フラグメントシェーダロジックなど)が呼び出され、さらに出力情報を計算して、結果を出力表面(例えば、カラーバッファ、デプスバッファ、ステンシルバッファなど)に書き込ませる。いくつかの実施形態において、ピクセルシェーダ又はフラグメントシェーダが、ラスタ化されたオブジェクト全体で補間される様々な頂点属性の値を計算する。いくつかの実施形態において、シェーダプロセッサ502内のピクセルプロセッサロジックが、次いで、アプリケーションプログラミングインタフェース(API)により供給されるピクセルシェーダプログラム又はフラグメントシェーダプログラムを実行する。シェーダプログラムを実行するために、シェーダプロセッサ502は、スレッドディスパッチャ504を介して、スレッドを実行ユニット(例えば、508A)にディスパッチする。いくつかの実施形態において、シェーダプロセッサ502は、サンプラ510内のテクスチャサンプリングロジックを用いて、メモリに格納されたテクスチャマップ内のテクスチャデータにアクセスする。テクスチャデータ及び入力ジオメトリデータに対する算術演算が、ジオメトリックフラグメントごとにピクセルカラーデータを計算する、又はさらなる処理から1つ又は複数のピクセルを破棄する。
【0119】
いくつかの実施形態において、データポート514はメモリアクセスメカニズムをスレッド実行ロジック500に提供し、グラフィックスプロセッサ出力パイプラインでのさらなる処理のために、処理されたデータをメモリに出力する。いくつかの実施形態において、データポート514は、データポートを介してメモリアクセス用のデータをキャッシュに格納するための1つ又は複数のキャッシュメモリ(例えば、データキャッシュ512)を含む又はこれに連結する。
【0120】
1つの実施形態において、実行ロジック500は、レイトレーシングアクセラレーション機能を提供できるレイトレーサ505を含むこともできる。レイトレーサ505は、レイ生成用の命令/機能を含むレイトレーシング命令セットをサポートできる。レイトレーシング命令セットは、図2Cのレイトレーシングコア245によりサポートされるレイトレーシング命令セットと同様であっても、異なっていてもよい。
【0121】
図5Bは、複数の実施形態による、実行ユニット508の例示的な内部詳細を示す。グラフィックス実行ユニット508が、命令フェッチユニット537と、汎用レジスタファイルアレイ(GRF)524と、アーキテクチャレジスタファイルアレイ(ARF)526と、スレッドアービタ522と、送信ユニット530と、分岐ユニット532と、SIMD浮動小数点ユニット(FPU)534のセットと、1つの実施形態において専用整数SIMD ALU535のセットとを含むことができる。GRF524及びARF526は、グラフィックス実行ユニット508において有効になり得るそれぞれの同時ハードウェアスレッドに関連した汎用レジスタファイル及びアーキテクチャレジスタファイルのセットを含む。1つの実施形態において、スレッドごとのアーキテクチャ状態がARF526に維持され、スレッド実行時に用いられるデータがGRF524に格納される。スレッドごとの命令ポインタを含む、各スレッドの実行状態は、ARF526の特定スレッド向けレジスタに保持され得る。
【0122】
1つの実施形態において、グラフィックス実行ユニット508は、同時マルチスレッディング(SMT)と細粒度のインターリーブ型マルチスレッディング(IMT)とを組み合わせたアーキテクチャを有する。このアーキテクチャは、同時スレッドの目標数及び実行ユニットごとのレジスタの数に基づいて設計時に微調整され得るモジュール構成を有し、実行ユニットリソースが、複数の同時スレッドを実行するのに用いられるロジック全体にわたって分割される。グラフィックス実行ユニット508により実行され得る論理スレッドの数は、ハードウェアスレッドの数に限定されることはなく、複数の論理スレッドが各ハードウェアスレッドに割り当てられ得る。
【0123】
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バイトを格納できる。柔軟なアドレス指定モードによって、複数のレジスタが一緒にアドレス指定されて、効果的に幅の広いレジスタが構築される又は順次配置された矩形ブロック型データ構造を表すことが可能になり得る。
【0124】
1つの実施形態において、メモリオペレーション、サンプラオペレーション、及び他の長遅延システム通信が、メッセージ受け渡し送信ユニット530により実行される「送信」命令を介してディスパッチされる。1つの実施形態において、SIMDダイバージェンス及び最終的なコンバージェンスを容易にするために、分岐命令が専用分岐ユニット532にディスパッチされる。
【0125】
1つの実施形態において、グラフィックス実行ユニット508は、浮動小数点演算を実行するために、1つ又は複数のSIMD浮動小数点ユニット(FPU)534を含む。1つの実施形態において、FPU534は、整数計算もサポートする。1つの実施形態において、FPU534は、最大M個の32ビット浮動小数点(又は整数)演算をSIMDで実行できる、又は最大2M個の16ビット整数演算若しくは16ビット浮動小数点演算をSIMDで実行できる。1つの実施形態において、FPUのうちの少なくとも1つが拡張数学機能を提供して、高スループット超越数学機能及び倍精度54ビット浮動小数点をサポートする。いくつかの実施形態において、8ビット整数SIMD ALU535のセットも存在し、機械学習計算に関連したオペレーションを実行するように特に最適化されてよい。
【0126】
1つの実施形態において、グラフィックス実行ユニット508の複数のインスタンスのアレイが、グラフィックスサブコアグループ(例えば、サブスライス)にインスタンス化され得る。拡張性については、製品設計者がサブコアグループごとに正確な数の実行ユニットを選択できる。1つの実施形態において、実行ユニット508は、複数の実行チャネル全体にわたって命令を実行できる。さらなる実施形態において、グラフィックス実行ユニット508で実行される各スレッドは、異なるチャネルで実行される。
【0127】
図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と同様に動作できる。
【0128】
実行ユニット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ビットの浮動小数点演算を実行するように構成され得る。
【0129】
スレッド制御ユニット601は、実行ユニット内のスレッドの実行を制御するためのロジックを含む。スレッド制御ユニット601は、実行ユニット600内のスレッドの実行を開始する、停止する、プリエンプトするためのスレッド調整ロジックを含み得る。スレッド状態ユニット602は、実行ユニット600で実行するように割り当てられたスレッドのスレッド状態を格納するのに用いられ得る。スレッド状態を実行ユニット600に格納することで、これらのスレッドがブロックされた又はアイドルになったときに、スレッドの迅速なプリエンプションが可能になる。命令フェッチ/プリフェッチユニット603は、上位レベルの実行ロジックの命令キャッシュ(例えば、図5Aに見られるような命令キャッシュ506)から命令をフェッチできる。命令フェッチ/プリフェッチユニット603は、現在実行中のスレッドの分析に基づいて、命令キャッシュにロードされる命令に対してプリフェッチ要求を発行することもできる。命令復号ユニット604は、コンピュートユニットにより実行される命令を復号するのに用いられ得る。1つの実施形態において、命令復号ユニット604は、複雑な命令を復号して構成要素のマイクロオペレーションにする二次復号器として用いられ得る。
【0130】
実行ユニット600はさらに、実行ユニット600で実行するハードウェアスレッドにより用いられ得るレジスタファイル606を含む。レジスタファイル606のレジスタが、実行ユニット600のコンピュートユニット610内の複数の同時スレッドを実行するのに用いられるロジック全体にわたり分割され得る。グラフィックス実行ユニット600により実行され得る論理スレッドの数は、ハードウェアスレッドの数に限定されることはなく、複数の論理スレッドが各ハードウェアスレッドに割り当てられ得る。レジスタファイル606のサイズは、サポートされるハードウェアスレッドの数に基づいて、実施形態によって変化し得る。1つの実施形態において、レジスタリネーミングが、ハードウェアスレッドにレジスタを動的に割り当てるのに用いられてよい。
【0131】
図7は、いくつかの実施形態によるグラフィックスプロセッサの命令フォーマット700を示すブロック図である。1つ又は複数の実施形態において、グラフィックスプロセッサ実行ユニットは複数フォーマットの命令を有する命令セットをサポートする。実線の枠は、一般的に実行ユニット命令に含まれるコンポーネントを示し、破線は、任意選択のコンポーネント又は命令のサブセットだけに含まれるコンポーネントを含む。いくつかの実施形態において、説明され且つ示される命令フォーマット700はマクロ命令である。これらのマクロ命令は実行ユニットに供給される命令であり、命令が処理されるごとに命令を復号して生じるマイクロオペレーションとは対照的である。
【0132】
いくつかの実施形態において、グラフィックスプロセッサ実行ユニットは128ビット命令フォーマット710の命令をネイティブにサポートする。64ビット圧縮命令フォーマット730が、選択された命令、命令オプション、及びオペランドの数に基づいて、いくつかの命令に利用可能である。ネイティブの128ビット命令フォーマット710は全ての命令オプションへのアクセスを提供し、いくつかのオプション及びオペレーションが64ビットフォーマット730に制限される。64ビットフォーマット730で利用可能なネイティブ命令は、実施形態によって変わる。いくつかの実施形態において、命令は、インデックスフィールド713内のインデックス値のセットを用いて部分的に圧縮される。実行ユニットハードウェアは、インデックス値に基づいて圧縮テーブルのセットを参照し、圧縮テーブルの出力を用いて、ネイティブ命令を128ビット命令フォーマット710で再構築する。命令の他のサイズ及びフォーマットが用いられてもよい。
【0133】
フォーマットごとに、命令オペコード712が、実行ユニットが実行するオペレーションを定義する。実行ユニットは、各オペランドの複数のデータ要素全体に対して、各命令を並行して実行する。例えば、加算命令に応答して、実行ユニットは、テクスチャエレメント又はピクチャエレメントを表す各カラーチャネルに対して同時加算演算を行う。デフォルトでは、実行ユニットは、オペランドの全てのデータチャネルに対して各命令を行う。いくつかの実施形態において、命令制御フィールド714が、チャネル選択(例えば、プレディケーション)、データチャネルオーダ(例えば、スウィズル)などの特定の実行オプションに対する制御を可能にする。128ビット命令フォーマット710の命令では、実行サイズフィールド716が、並行して実行されるデータチャネルの数を制限する。いくつかの実施形態において、実行サイズフィールド716は、64ビット圧縮命令フォーマット730に使用できない。
【0134】
いくつかの実行ユニット命令は、2つのソースオペランドであるsrc0 720及びsrc1 722と1つのデスティネーション718を含む最大3つのオペランドを有する。いくつかの実施形態において、実行ユニットは、デュアルデスティネーション命令をサポートし、これらのデスティネーションのうちの1つが示唆される。データ操作命令が第3のソースオペランド(例えば、SRC2 724)を有することができ、命令オペコード712はソースオペランドの数を決定する。命令の最後のソースオペランドが、命令と共に送られる直の(例えば、ハードコードされた)値であってよい。
【0135】
いくつかの実施形態において、128ビット命令フォーマット710は、例えば、直接的なレジスタアドレス指定モードが用いられるのか、又は間接的なレジスタアドレス指定モードが用いられるのかを指定するアクセス/アドレスモードフィールド726を含む。直接的なレジスタアドレス指定モードが用いられる場合、1つ又は複数のオペランドのレジスタアドレスは、ビットごとに命令で直接的に提供される。
【0136】
いくつかの実施形態において、128ビット命令フォーマット710は、命令のアドレスモード及び/又はアクセスモードを指定するアクセス/アドレスモードフィールド726を含む。1つの実施形態において、アクセスモードは、命令のデータアクセスアライメントを定義するのに用いられる。いくつかの実施形態が、16バイト単位で揃えたアクセスモード及び1バイト単位で揃えたアクセスモードを含むアクセスモードをサポートし、アクセスモードのバイトアライメントは、命令オペランドのアクセスアライメントを決定する。例えば、第1のモードの場合、命令は、バイト単位で揃えたアドレス指定をソースオペランド及びデスティネーションオペランドに用いてよく、第2のモードの場合、命令は、16バイト単位で揃えたアドレス指定を全てのソースオペランド及びデスティネーションオペランドに用いてよい。
【0137】
1つの実施形態において、アクセス/アドレスモードフィールド726のアドレスモード部分は、命令が直接的なアドレス指定を用いるのか又は間接的なアドレス指定を用いるのかを決定する。直接的なレジスタアドレス指定モードが用いられる場合、命令内のビットが1つ又は複数のオペランドのレジスタアドレスを直接的に提供する。間接的なレジスタアドレス指定モードが用いられる場合、1つ又は複数のオペランドのレジスタアドレスは、命令内のアドレスレジスタ値及びアドレス即値フィールドに基づいて計算されてよい。
【0138】
いくつかの実施形態において、オペコード復号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つの実施形態において、復号された命令を実行するのに実行ユニットのどの部分が用いられるかを決定するのに用いられてよい。例えば、いくつかの命令は、シストリックアレイにより実行されるシストリック命令に指定されてよい。レイトレーシング命令(不図示)などの他の命令が、実行ロジックのスライス又はパーティション内のレイトレーシングコア又はレイトレーシングロジックに送られ得る。
【0139】
[グラフィックスパイプライン]
【0140】
図8は、グラフィックスプロセッサ800の別の実施形態のブロック図である。図8の要素で、本明細書における任意の他の図の要素と同じ参照番号(又は名称)を有する要素は、本明細書のどこか他の箇所で説明される方式と同様な任意の方式で動作する又は機能することができるが、そのように限定されることはない。
【0141】
いくつかの実施形態において、グラフィックスプロセッサ800は、ジオメトリパイプライン820と、メディアパイプライン830と、ディスプレイエンジン840と、スレッド実行ロジック850と、レンダリング出力パイプライン870とを含む。いくつかの実施形態において、グラフィックスプロセッサ800は、1つ又は複数の汎用処理コアを含むマルチコア処理システム内のグラフィックスプロセッサである。グラフィックスプロセッサは、1つ又は複数の制御レジスタ(不図示)へのレジスタ書き込みによって、又はリング相互接続802を介してグラフィックスプロセッサ800に発行されるコマンドによって制御される。いくつかの実施形態において、リング相互接続802は、他のグラフィックスプロセッサ又は汎用プロセッサなどの他の処理コンポーネントにグラフィックスプロセッサ800を連結する。リング相互接続802からのコマンドが、コマンドストリーマ803によって解釈され、コマンドストリーマ803は、ジオメトリパイプライン820又はメディアパイプライン830の個々のコンポーネントに命令を供給する。
【0142】
いくつかの実施形態において、コマンドストリーマ803は、頂点データをメモリから読み出して、コマンドストリーマ803により提供される頂点処理コマンドを実行する頂点フェッチャ805のオペレーションを指揮する。いくつかの実施形態において、頂点フェッチャ805は頂点データを頂点シェーダ807に提供し、頂点シェーダ807は、各頂点に対して座標空間変換及びライティングオペレーションを行う。いくつかの実施形態において、頂点フェッチャ805及び頂点シェーダ807は、スレッドディスパッチャ831を介して実行スレッドを実行ユニット852A~852Bにディスパッチすることにより、頂点処理命令を実行する。
【0143】
いくつかの実施形態において、実行ユニット852A~852Bは、グラフィックスオペレーション及びメディアオペレーションを行うための命令セットを有するベクトルプロセッサのアレイである。いくつかの実施形態において、実行ユニット852A~852Bには、アレイごとに特有であるか又はアレイ間で共有される付属のL1キャッシュ851を有する。このキャッシュは、データキャッシュ、命令キャッシュ、又はデータ及び命令を異なるパーティションに含むように区切られた単一のキャッシュとして構成され得る。
【0144】
いくつかの実施形態において、ジオメトリパイプライン820は、3Dオブジェクトのハードウェアアクセラレート型テッセレーションを実行するためのテッセレーションコンポーネントを含む。いくつかの実施形態において、プログラム可能型ハルシェーダ811が、テッセレーションオペレーションを構成する。プログラム可能型ドメインシェーダ817が、テッセレーション出力のバックエンド評価を提供する。テッセレータ813が、ハルシェーダ811の指示で動作し、ジオメトリパイプライン820に入力として提供されるコアースジオメトリックモデルに基づいて、詳細なジオメトリックオブジェクトのセットを生成するための専用ロジックを含む。いくつかの実施形態において、テッセレーションが用いられない場合、テッセレーションコンポーネント(例えば、ハルシェーダ811、テッセレータ813、及びドメインシェーダ817)は無視され得る。
【0145】
いくつかの実施形態において、完全なジオメトリックオブジェクトが、実行ユニット852A~852Bにディスパッチされる1つ又は複数のスレッドを介して、ジオメトリシェーダ819により処理されてよく、又はクリッパ829に直接的に進んでもよい。いくつかの実施形態において、ジオメトリシェーダは、グラフィックスパイプラインの前のステージに見られるような頂点又は頂点のパッチではなく、ジオメトリックオブジェクト全体を処理する。テッセレーションが無効である場合、ジオメトリシェーダ819は、頂点シェーダ807から入力を受信する。いくつかの実施形態において、ジオメトリシェーダ819は、テッセレーションユニットが無効である場合にジオメトリテッセレーションを行うように、ジオメトリシェーダプログラムでプログラム可能である。
【0146】
ラスタ化の前に、クリッパ829が頂点データを処理する。クリッパ829は、クリッピング機能及びジオメトリシェーダ機能を有する固定機能クリッパであってもプログラム可能型クリッパであってもよい。いくつかの実施形態において、レンダリング出力パイプライン870内のラスタライザ及び深度テストコンポーネント873が、ピクセルシェーダをディスパッチして、ジオメトリックオブジェクトをピクセルごとの表現に変換する。いくつかの実施形態において、ピクセルシェーダロジックがスレッド実行ロジック850に含まれる。いくつかの実施形態において、アプリケーションが、ラスタライザ及び深度テストコンポーネント873を無視して、ラスタ化されていない頂点データにストリームアウトユニット823を介してアクセスできる。
【0147】
グラフィックスプロセッサ800は、相互接続バス、相互接続ファブリック、又はプロセッサの主要なコンポーネントの間でデータ及びメッセージの受け渡しを可能にする何らかの他相互接続メカニズムを有する。いくつかの実施形態において、実行ユニット852A~852B及び関連する論理ユニット(例えば、L1キャッシュ851、サンプラ854、テクスチャキャッシュ858など)が、データポート856を介して相互接続して、メモリアクセスを実行し、プロセッサのレンダリング出力パイプラインコンポーネントと通信する。いくつかの実施形態において、サンプラ854、キャッシュ851、858、及び実行ユニット852A~852Bはそれぞれ、別個のメモリアクセスパスを有する。1つの実施形態において、テクスチャキャッシュ858は、サンプラキャッシュとして構成されてもよい。
【0148】
いくつかの実施形態において、レンダリング出力パイプライン870は、頂点ベースのオブジェクトを関連するピクセルベースの表現に変換するラスタライザ及び深度テストコンポーネント873を含む。いくつかの実施形態において、ラスタライザロジックは、固定機能による三角形及び線のラスタ化を実行するウィンドウ処理/マスク処理ユニットを含む。関連するレンダリングキャッシュ878及びデプスキャッシュ879も、いくつかの実施形態において利用可能である。ピクセルオペレーションコンポーネント877が、データに対してピクセルベースのオペレーションを行うが、いくつかの例において、2Dオペレーションに関連したピクセルオペレーション(例えば、ブレンディングを伴うビットブロック画像転送)が2Dエンジン841により行われるか、又はオーバーレイ表示プレーン用いるディスプレイコントローラ843によって表示時に置き換えられる。いくつかの実施形態において、共有L3キャッシュ875が、全てのグラフィックスコンポーネントに利用可能であり、メインシステムメモリを使用することなくデータの共有が可能になる。
【0149】
いくつかの実施形態において、グラフィックスプロセッサメディアパイプライン830が、メディアエンジン837とビデオフロントエンド834とを含む。いくつかの実施形態において、ビデオフロントエンド834は、コマンドストリーマ803からパイプラインコマンドを受信する。いくつかの実施形態において、メディアパイプライン830は、別個のコマンドストリーマを含む。いくつかの実施形態において、ビデオフロントエンド834は、メディアコマンドを処理してから、そのコマンドをメディアエンジン837に送信する。いくつかの実施形態において、メディアエンジン837は、スレッドディスパッチャ831を介してスレッド実行ロジック850にディスパッチするためのスレッドを生成するスレッド生成機能を含む。
【0150】
いくつかの実施形態において、グラフィックスプロセッサ800はディスプレイエンジン840を含む。いくつかの実施形態において、ディスプレイエンジン840は、プロセッサ800の外部にあり、リング相互接続802又は何らかの他の相互接続バス若しくはファブリックを介して、グラフィックスプロセッサと連結する。いくつかの実施形態において、ディスプレイエンジン840は、2Dエンジン841とディスプレイコントローラ843とを含む。いくつかの実施形態において、ディスプレイエンジン840は、3Dパイプラインから独立して動作可能な専用ロジックを含む。いくつかの実施形態において、ディスプレイコントローラ843はディスプレイデバイス(不図示)と連結する。ディスプレイデバイスは、ラップトップコンピュータに見られるようなシステム統合型ディスプレイデバイスであっても、ディスプレイデバイスコネクタを介して取り付けられる外付けディスプレイデバイスであってもよい。
【0151】
いくつかの実施形態において、ジオメトリパイプライン820及びメディアパイプライン830は、複数のグラフィックス及びメディアプログラミングインタフェースに基づいてオペレーションを実行するように構成可能であり、任意の1つのアプリケーションプログラミングインタフェース(API)に固有のものではない。いくつかの実施形態において、グラフィックスプロセッサのドライバソフトウェアが、特定のグラフィックス又はメディアライブラリに固有なAPIコールをグラフィックスプロセッサにより処理され得るコマンドに変換する。いくつかの実施形態において、オープングラフィックスライブラリ(OpenGL)、オープンコンピューティング言語(OpenCL)、及び/又はVulkanグラフィックス及びコンピュートAPIにサポートが提供され、これらは全てクロノスグループによるものである。いくつかの実施形態において、Microsoft CorporationのDirect3Dライブラリにもサポートが提供されてよい。いくつかの実施形態において、これらのライブラリの組み合わせがサポートされてもよい。オープンソースのコンピュータビジョンライブラリ(OpenCV)にもサポートが提供されてよい。互換性のある3Dパイプラインを有する将来のAPIも、将来のAPIのパイプラインからグラフィックスプロセッサのパイプラインにマッピングを行うことができるならば、サポートされるであろう。
【0152】
[グラフィックスパイプラインプログラミング]
【0153】
図9Aは、いくつかの実施形態によるグラフィックスプロセッサコマンドフォーマット900を示すブロック図である。図9Bは、一実施形態によるグラフィックスプロセッサコマンドシーケンス910を示すブロック図である。図9Aの実線の枠は、グラフィックスコマンドに一般的に含まれるコンポーネントを示し、破線は、任意選択のコンポーネント又はグラフィックスコマンドのサブセットにだけ含まれるコンポーネントを含む。図9Aの例示的なグラフィックスプロセッサコマンドフォーマット900は、クライアント902、コマンドオペレーションコード(オペコード)904、及びコマンド用のデータ906を識別するデータフィールドを含む。サブオペコード905及びコマンドサイズ908も、いくつかのコマンドに含まれる。
【0154】
いくつかの実施形態において、クライアント902は、コマンドデータを処理するグラフィックスデバイスのクライアントユニットを指定する。いくつかの実施形態において、グラフィックスプロセッサコマンドパーサが、各コマンドのクライアントフィールドを検査し、コマンドのさらなる処理を決定して、コマンドデータを適切なクライアントユニットにルーティングする。いくつかの実施形態において、グラフィックスプロセッサのクライアントユニットは、メモリインタフェースユニットと、レンダリングユニットと、2Dユニットと、3Dユニットと、メディアユニットとを含む。各クライアントユニットは対応する処理パイプラインを有し、その処理パイプラインがコマンドを処理する。コマンドがクライアントユニットにより受信されると、クライアントユニットは、オペコード904と、存在する場合はサブオペコード905とを読み出し、実行するオペレーションを決定する。クライアントユニットは、データフィールド906内の情報を用いてコマンドを実行する。いくつかのコマンドでは、明示コマンドサイズ908が、コマンドのサイズを指定することが期待される。いくつかの実施形態において、コマンドパーサは、コマンドオペコードに基づいて、複数のコマンドのうちの少なくとも一部のサイズを自動的に決定する。いくつかの実施形態において、コマンドがダブルワードの倍数によって揃えられる。他のコマンドフォーマットが用いられてもよい。
【0155】
図9Bのフロー図は、例示的なグラフィックスプロセッサコマンドシーケンス910を示す。いくつかの実施形態において、グラフィックスプロセッサの実施形態を特徴づけるデータ処理システムのソフトウェア又はファームウェアが、グラフィックスオペレーションのセットをセットアップする、実行する、終了するのに、示されるコマンドシーケンスのバージョンを使用する。サンプルコマンドシーケンスが例示のみを目的に示され且つ説明され、実施形態がこれらの特定のコマンド又はこのコマンドシーケンスに限定されることはない。さらに、これらのコマンドは、コマンドシーケンスにおいてコマンドのバッチとして発行されてよく、グラフィックスプロセッサは、一連のコマンドを少なくとも部分的に同時に処理することになる。
【0156】
いくつかの実施形態において、グラフィックスプロセッサコマンドシーケンス910はパイプラインフラッシュコマンド912から始めて、任意の有効なグラフィックスパイプラインに現在保留中のパイプラインコマンドを完了させてよい。いくつかの実施形態において、3Dパイプライン922及びメディアパイプライン924は同時に動作しない。パイプラインフラッシュは、有効なグラフィックスパイプラインに任意の保留コマンドを完了させるように実行される。パイプラインフラッシュに応答して、グラフィックスプロセッサのコマンドパーサは、有効な描画エンジンが保留オペレーションを完了して関連する読み出しキャッシュが無効になるまで、コマンド処理を一時停止することになる。任意選択で、レンダリングキャッシュ内の、ダーティ(dirty)とマークされた任意のデータがメモリにフラッシュされ得る。いくつかの実施形態において、パイプラインフラッシュコマンド912は、パイプライン同期に用いられ得る、又はグラフィックスプロセッサを低電力状態にする前に用いられ得る。
【0157】
いくつかの実施形態において、コマンドシーケンスがパイプライン同士を明示的に切り替えるのにグラフィックスプロセッサを必要とする場合、パイプライン選択コマンド913が用いられる。いくつかの実施形態において、パイプライン選択コマンド913は、パイプラインコマンドを発行する前に実行コンテキストにおいて一度だけ必要とされる。ただし、コンテキストが両方のパイプラインにコマンドを発行する場合を除く。いくつかの実施形態において、パイプラインフラッシュコマンド912は、パイプライン選択コマンド913を介したパイプライン切り替え直前に必要とされる。
【0158】
いくつかの実施形態において、パイプライン制御コマンド914が、オペレーション用のグラフィックスパイプラインを構成し、3Dパイプライン922及びメディアパイプライン924をプログラムするのに用いられる。いくつかの実施形態において、パイプライン制御コマンド914は、有効なパイプライン用のパイプライン状態を構成する。1つの実施形態において、パイプライン制御コマンド914は、パイプライン同期に用いられ、またコマンドのバッチを処理する前に、有効なパイプライン内の1つ又は複数のキャッシュメモリからデータを消去するのに用いられる。
【0159】
いくつかの実施形態において、リターンバッファ状態コマンド916が、それぞれのパイプラインがデータを書き込むためのリターンバッファのセットを構成するのに用いられる。いくつかのパイプラインオペレーションは、オペレーションが処理中に中間データを書き込む1つ又は複数のリターンバッファの割り当て、選択、又は構成を必要とする。いくつかの実施形態において、グラフィックスプロセッサは、出力データを格納し且つクロススレッド通信を行うのにも1つ又は複数のリターンバッファを用いる。いくつかの実施形態において、リターンバッファ状態916は、パイプラインオペレーションのセットに用いるリターンバッファのサイズ及びその数を選択することを含む。
【0160】
コマンドシーケンス内の残りのコマンドは、オペレーション用の有効なパイプラインに基づいて異なる。パイプライン決定920に基づいて、コマンドシーケンスは、3Dパイプライン状態930で始まる3Dパイプライン922に合わせてあるか、又はメディアパイプライン状態940で始まるメディアパイプライン924に合わせてある。
【0161】
3Dパイプライン状態930を構成するコマンドは、頂点バッファ状態、頂点要素状態、一定色状態、デプスバッファ状態、及び3Dプリミティブコマンドが処理される前に構成される他の状態変数用の3D状態設定コマンドを含む。これらのコマンドの値は、使用中の特定の3D APIに基づいて、少なくとも部分的に決定される。いくつかの実施形態において、3Dパイプライン状態930コマンドはまた、特定のパイプライン要素を、これらの要素が用いられない場合に、選択的に無効にするか又は無視することもできる。
【0162】
いくつかの実施形態において、3Dプリミティブ932コマンドが、3Dパイプラインにより処理される3Dプリミティブを送信するのに用いられる。3Dプリミティブ932コマンドを介してグラフィックスプロセッサに送られるコマンド及び関連パラメータが、グラフィックスパイプラインの頂点フェッチ機能に転送される。頂点フェッチ機能は、頂点データ構造を生成するのに、3Dプリミティブ932コマンドデータを使用する。頂点データ構造は、1つ又は複数のリターンバッファに格納される。いくつかの実施形態において、3Dプリミティブ932コマンドは、頂点シェーダを介して3Dプリミティブに対して頂点オペレーションを実行するのに用いられる。頂点シェーダを処理するために、3Dパイプライン922は、シェーダ実行スレッドをグラフィックスプロセッサ実行ユニットにディスパッチする。
【0163】
いくつかの実施形態において、3Dパイプライン922は、実行コマンド934又はイベントを介してトリガされる。いくつかの実施形態において、レジスタ書き込みがコマンド実行をトリガする。いくつかの実施形態において、実行がコマンドシーケンスの「ゴー(go)」コマンド又は「キック(kick)」コマンドを介してトリガされる。1つの実施形態において、コマンド実行が、グラフィックスパイプラインを通じてコマンドシーケンスをフラッシュするように、パイプライン同期コマンドを用いてトリガされる。3Dパイプラインは、3Dプリミティブに対してジオメトリ処理を行うことになる。オペレーションが完了すると、結果として得られるジオメトリックオブジェクトがラスタ化され、ピクセルエンジンは結果として得られるピクセルに色をつける。ピクセルシェーディング及びピクセルのバックエンドオペレーションを制御する追加のコマンドも、これらのオペレーション用に含まれてよい。
【0164】
いくつかの実施形態において、グラフィックスプロセッサコマンドシーケンス910は、メディアオペレーションを行う場合、メディアパイプライン924のパスをたどる。一般的には、メディアパイプライン924用のプログラミングの特定の使用法及び方式は、実行されるメディアオペレーション又はコンピュートオペレーションに依存する。特定のメディア復号オペレーションが、メディア復号時にメディアパイプラインにオフロードされてよい。いくつかの実施形態において、メディアパイプラインはまた、無視されてもよく、メディア復号が、1つ又は複数の汎用処理コアにより提供されるリソースを用いて全体的に又は部分的に実行されてもよい。1つの実施形態において、メディアパイプラインは、汎用グラフィックスプロセッサユニット(GPGPU)オペレーション用の要素も含み、グラフィックスプロセッサは、グラフィックスプリミティブのレンダリングに明示的に関連していない計算シェーダプログラムを用いて、SIMDベクトル演算を実行するのに用いられる。
【0165】
いくつかの実施形態において、メディアパイプライン924は、3Dパイプライン922と同様の方式で構成される。メディアパイプライン状態940を構成するコマンドのセットが、メディアオブジェクトコマンド942の前にディスパッチされるか、又はコマンドキューに入れられる。いくつかの実施形態において、メディアパイプライン状態940用のコマンドが、メディアオブジェクトを処理するのに用いられるメディアパイプライン要素を構成するデータを含む。これは、符号化フォーマット又は復号フォーマットなどの、メディアパイプライン内の映像復号ロジック及び映像符号化ロジックを構成するデータを含む。いくつかの実施形態において、メディアパイプライン状態940用のコマンドは、状態設定のバッチを含む「間接的」な状態要素に対する1つ又は複数のポインタの使用もサポートする。
【0166】
いくつかの実施形態において、メディアオブジェクトコマンド942は、メディアパイプラインによる処理のために、ポインタをメディアオブジェクトに供給する。メディアオブジェクトは、処理される映像データを含むメモリバッファを含む。いくつかの実施形態において、全てのメディアパイプライン状態は、メディアオブジェクトコマンド942を発行する前に有効でなければならない。パイプライン状態が構成され且つメディアオブジェクトコマンド942がキューに入ると、メディアパイプライン924は、実行コマンド944又は同等の実行イベント(例えば、レジスタ書き込み)によってトリガされる。次いで、メディアパイプライン924からの出力が、3Dパイプライン922又はメディアパイプライン924により提供されるオペレーションにより後処理されてよい。いくつかの実施形態において、GPGPUオペレーションが、メディアオペレーションと同様の方式で構成され且つ実行される。
【0167】
[グラフィックスソフトウェアアーキテクチャ]
【0168】
図10は、いくつかの実施形態によるデータ処理システム1000の例示的なグラフィックスソフトウェアアーキテクチャを示す。いくつかの実施形態において、ソフトウェアアーキテクチャは、3Dグラフィックスアプリケーション1010と、オペレーティングシステム1020と、少なくとも1つのプロセッサ1030とを含む。いくつかの実施形態において、プロセッサ1030は、グラフィックスプロセッサ1032と1つ又は複数の汎用プロセッサコア1034とを含む。グラフィックスアプリケーション1010及びオペレーティングシステム1020はそれぞれ、データ処理システムのシステムメモリ1050で実行される。
【0169】
いくつかの実施形態において、3Dグラフィックスアプリケーション1010は、シェーダ命令1012を含む1つ又は複数のシェーダプログラムを含む。シェーダ言語命令は、Direct3Dの高水準シェーダ言語(HLSL)及びOpenGLシェーダ言語(GLSL)などの高水準シェーダ言語の命令であってよい。アプリケーションは、汎用プロセッサコア1034による実行に好適な機械語の実行可能命令1014も含む。アプリケーションは、頂点データで定義されるグラフィックスオブジェクト1016も含む。
【0170】
いくつかの実施形態において、オペレーティングシステム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)のバージョンなどの中間フォームで提供される。
【0171】
いくつかの実施形態において、ユーザモードグラフィックスドライバ1026が、シェーダ命令1012を特定ハードウェア向け表現に変換するためのバックエンドシェーダコンパイラ1027を含む。OpenGLのAPIが用いられる場合、GLSL高水準言語のシェーダ命令1012は、コンパイルのためにユーザモードグラフィックスドライバ1026に送られる。いくつかの実施形態において、ユーザモードグラフィックスドライバ1026は、オペレーティングシステムのカーネルモード機能1028を用いて、カーネルモードグラフィックスドライバ1029と通信する。いくつかの実施形態において、カーネルモードグラフィックスドライバ1029は、グラフィックスプロセッサ1032と通信して、コマンド及び命令をディスパッチする。
【0172】
[IPコアの実施態様]
【0173】
少なくとも1つの実施形態のうちの1つ又は複数の態様が、プロセッサなどの集積回路内のロジックを表す且つ/又は定義する、機械可読媒体に格納された代表コードにより実装されてよい。例えば、機械可読媒体は、プロセッサ内の様々なロジックを表す命令を含んでよい。命令は、機械によって読み出される場合、本明細書で説明される技術を実行するロジックを機械に作らせてよい。「IPコア」として知られるそのような表現は、集積回路の構造を記述するハードウェアモデルとして、有形の機械可読媒体に格納され得る、集積回路用ロジックの再利用可能な単位である。ハードウェアモデルは、集積回路を製造する製造機械にハードウェアモデルをロードする様々な顧客又は製造施設に供給されてよい。集積回路は、本明細書において説明される実施形態のうちのいずれかと関連して説明されるオペレーションを回路が実行するように製造されてよい。
【0174】
図11Aは、一実施形態による、オペレーションを実行する集積回路を製造するのに用いられ得るIPコア開発システム1100を示すブロック図である。IPコア開発システム1100は、より大きい設計図に組み込まれ得るモジュール式の再利用可能な設計図を生成するのに用いられても、集積回路全体(例えば、SoC集積回路)を構築するのに用いられてもよい。設計施設1130が、IPコア設計のソフトウェアシミュレーション1110を高水準プログラミング言語(例えば、C/C++)で生成できる。ソフトウェアシミュレーション1110は、シミュレーションモデル1112を用いて、IPコアの挙動を設計し、テストし、確認するのに用いられ得る。シミュレーションモデル1112は、機能シミュレーション、挙動シミュレーション、及び/又はタイミングシミュレーションを含んでよい。レジスタ転送レベル(RTL)設計1115が次に、シミュレーションモデル1112から作成又は合成され得る。RTL設計1115は、ハードウェアレジスタ間のデジタル信号のフローをモデル化する集積回路の挙動の抽出であり、モデル化されたデジタル信号を用いて実行される関連ロジックを含む。RTL設計1115のほかに、論理レベル又はトランジスタレベルでの下位レベルの設計も、作成され、設計され、又は合成されてよい。したがって、初期の設計及びシミュレーションの特定の詳細は変化してよい。
【0175】
RTL設計1115又は均等物はさらに、設計施設で合成されてハードウェアモデル1120になってよく、ハードウェアモデル1120は、ハードウェア記述言語(HDL)又は物理的な設計データの何らかの他の表現であってよい。HDLはさらに、IPコア設計を確認するために、シミュレーションされてもテストされてもよい。IPコア設計は、サードパーティの製造施設1165に届けるために、不揮発性メモリ1140(例えば、ハードディスク、フラッシュメモリ、又は任意の不揮発性記憶媒体)を用いて格納され得る。あるいは、IPコア設計は、有線接続1150又は無線接続1160によって、(例えば、インターネットを介して)伝送されてよい。製造施設1165は次に、IPコア設計に少なくとも部分的に基づく集積回路を製造してよい。製造された集積回路は、本明細書で説明される少なくとも一実施形態に従ってオペレーションを実行するように構成され得る。
【0176】
図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の表面に連結されてよい。
【0177】
いくつかの実施形態において、ロジック1172、1174のユニットは、ロジック1172と1174との間に電気信号をルーティングするように構成されたブリッジ1182と電気的に連結される。ブリッジ1182は、電気信号の経路を提供する高密度相互接続構造であってよい。ブリッジ1182は、ガラス又は好適な半導体材料から構成されるブリッジ基板を含んでよい。ロジック1172と1174との間にチップ間接続を提供するために、電気的なルーティング機構が、ブリッジ基板に形成され得る。
【0178】
ロジック1172、1174の2つのユニットとブリッジ1182とが示されているが、本明細書で説明される実施形態が、1つ又は複数のダイにもっと多い又は少ない論理ユニットを含んでもよい。ロジックが単一のダイに含まれる場合、ブリッジ1182は除外されてよいので、1つ又は複数のダイは、0又は複数のブリッジで接続されてよい。あるいは、複数のダイ又は複数のロジックユニットが、1つ又は複数のブリッジで接続され得る。さらに、複数の論理ユニット、ダイ、及びブリッジが、3次元構成を含む他の可能な構成で一緒に接続され得る。
【0179】
図11Cは、基板1180(例えば、ベースダイ)に接続されたハードウェアロジックチップレットの複数のユニットを含むパッケージアセンブリ1190を示す。本明細書で説明されるグラフィックス処理ユニット、並列プロセッサ、及び/又はコンピュートアクセラレータが、別個に製造される多様なシリコンチップレットから構成され得る。この文脈において、チップレットとは、少なくとも部分的にパッケージ化された集積回路であり、この集積回路には、他のチップレットと共に組み立てられてより大きいパッケージになり得る別個のロジックのユニットが含まれる。異なるIPコアロジックを有する多様なチップレットの設定が、単一のデバイスに組み立てられ得る。さらに、これらのチップレットは、アクティブインターポーザ技術を用いて、ベースダイ又はベースチップレットに統合され得る。本明細書で説明されるコンセプトによって、GPU内の異なる形態のIP同士の間で相互接続及び通信が可能になる。IPコアは、異なるプロセス技術を用いて製造され、製造時に構成され得る。これによって、複数のIPを、特にいくつかの種類のIPを有する大きなSoCに同じ製造プロセスで集中させることによる複雑性が回避される。複数のプロセス技術の使用を可能にすることで、市場投入までの時間が改善され、複数の製品SKUを形成するのに費用対効果の高いやり方が提供される。さらに、IPが分かれている方が、独立してパワーゲーティングするのに適しており、所与のワークロードに使用されていないコンポーネントが電源をオフにされて、全体の電力消費を低減することができる。
【0180】
ハードウェアロジックチップレットは、特別な目的のハードウェアロジックチップレット1172、ロジック又はI/Oチップレット1174、及び/又はメモリチップレット1175を含み得る。ハードウェアロジックチップレット1172、ロジック又はI/Oチップレット1174は、構成可能ロジックハードウェア又は固定機能ロジックハードウェアに少なくとも部分的に実装されてよく、本明細書で説明されるプロセッサコア、グラフィックスプロセッサ、並列プロセッサ、又は他のアクセラレータデバイスのうちのいずれかの1つ又は複数の部分を含み得る。メモリチップレット1175は、DRAM(例えば、GDDR、HBM)メモリ又はキャッシュ(SRAM)メモリであってよい。
【0181】
各チップレットは、別個の半導体ダイとして製造され、相互接続構造1173を介して基板1180と連結され得る。相互接続構造1173は、様々なチップレットと基板1180内のロジックとの間に電気信号をルーティングするように構成されてよい。相互接続構造1173は、限定されることはないが、バンプ又はピラーなどの相互接続を含み得る。いくつかの実施形態において、相互接続構造1173は、例えば、ロジックチップレット、I/Oチップレット、及びメモリチップレットのオペレーションに関連した入力/出力(I/O)信号及び/又は電源信号若しくは接地信号などの電気信号をルーティングするように構成されてよい。
【0182】
いくつかの実施形態において、基板1180はエポキシベースの積層基板である。基板1180は、他の実施形態において、他の好適な種類の基板を含んでよい。パッケージアセンブリ1190は、パッケージ相互接続1183を介して、他の電気デバイスに接続され得る。パッケージ相互接続1183は、マザーボード、他のチップセット、又はマルチチップモジュールなどの他の電気デバイスに電気信号をルーティングするために、基板1180の表面に連結されてよい。
【0183】
いくつかの実施形態において、ロジック又はI/Oチップレット1174及びメモリチップレット1175は、ロジック又はI/Oチップレット1174とメモリチップレット1175との間に電気信号をルーティングするように構成されたブリッジ1187を介して電気的に連結され得る。ブリッジ1187は、電気信号の経路を提供する高密度相互接続構造であってよい。ブリッジ1187は、ガラス又は好適な半導体材料から構成されるブリッジ基板を含んでよい。ロジック又はI/Oチップレット1174とメモリチップレット1175との間にチップ間接続を提供するために、電気的なルーティング機構が、ブリッジ基板に形成され得る。ブリッジ1187は、シリコンブリッジ又は相互接続ブリッジとも呼ばれることがある。例えば、ブリッジ1187は、いくつかの実施形態において、埋め込み型マルチダイ相互接続ブリッジ(EMIB)である。いくつかの実施形態において、ブリッジ1187は、単に、あるチップレットから別のチップレットへの直接的接続であってよい。
【0184】
基板1180は、I/O1191、キャッシュメモリ1192、及び他のハードウェアロジック1193用のハードウェアコンポーネントを含み得る。様々なロジックチップレットと基板1180内のロジック1191、1193との間の通信を可能にするために、ファブリック1185が基板1180に埋め込まれ得る。1つの実施形態において、I/O1191、ファブリック1185、キャッシュ、ブリッジ、及び他のハードウェアロジック1193は、基板1180の上に層状に重ねられたベースダイに統合され得る。
【0185】
様々な実施形態において、パッケージアセンブリ1190は、ファブリック1185又は1つ又は複数のブリッジ1187で相互接続された、より少ない又はより多い数のコンポーネント及びチップレットを含み得る。パッケージアセンブリ1190内のチップレットは、3D配置又は2.5D配置で配置されてよい。一般的には、ブリッジ構造1187は、例えば、ロジック又はI/Oチップレットとメモリチップレットとの間のポイントツーポイント相互接続を容易にするのに用いられてよい。ファブリック1185は、様々なロジック及び/又はI/Oチップレット(例えば、チップレット1172、1174、1191、1193)を他のロジック及び/又はI/Oチップレットと相互接続するのに用いられ得る。1つの実施形態において、基板内のキャッシュメモリ1192は、パッケージアセンブリ1190のグローバルキャッシュ、つまり、分散型グローバルキャッシュの一部、又はファブリック1185の専用キャッシュとしての機能を果たし得る。
【0186】
図11Dは、一実施形態による、互換性のあるチップレット1195を含むパッケージアセンブリ1194を示す。互換性のあるチップレット1195は、1つ又は複数のベースチップレット1196、1198の標準化スロットとして組み立てられ得る。ベースチップレット1196、1198は、ブリッジ相互接続1197を介して連結され得る。ブリッジ相互接続1197は、本明細書で説明される他のブリッジ相互接続と同様であってよく、例えば、EMIBであってよい。メモリチップレットは、ブリッジ相互接続を介して、ロジックチップレット又はI/Oチップレットにも接続され得る。I/Oチップレット及びロジックチップレットは、相互接続ファブリックを介して通信できる。ベースチップレットはそれぞれ、ロジック又はI/O又はメモリキャッシュのうちの1つの標準化フォーマットで、1つ又は複数のスロットをサポートできる。
【0187】
1つの実施形態において、SRAM及び電力供給回路が、ベースチップレット1196、1198のうちの1つ又は複数として製造され得る。これらの回路は、ベースチップレットの上に積層された互換性のあるチップレット1195に対して異なるプロセス技術を用いて製造され得る。例えば、ベースチップレット1196、1198は、大規模なプロセス技術を用いて製造され得るが、互換性のあるチップレットは、小規模なプロセス技術を用いて製造され得る。互換性のあるチップレット1195のうちの1つ又は複数は、メモリ(例えば、DRAMチップレット)であってよい。異なるメモリ密度が、能力、及び/又はパッケージアセンブリ1194を用いる製品を対象とした性能に基づいて、パッケージアセンブリ1194用に選択され得る。さらに、異なる数の種類の機能ユニットを有するロジックチップレットが、当該製品を対象とした能力及び/又は性能に基づいて組み立て時に選択され得る。さらに、異なる種類のIPロジックコアを含むチップレットが、互換性のあるチップレットスロットに挿入され得るので、異なる技術IPブロックを併用し適合させ得るハイブリッドプロセッサ設計が可能になり得る。
【0188】
[例示的なシステムオンチップ集積回路]
【0189】
図12図13は、本明細書で説明される様々な実施形態による、1つ又は複数のIPコアを用いて製造され得る例示的な集積回路及び関連グラフィックスプロセッサを示す。示されているものに加えて、他のロジック及び回路が含まれてよく、例えば、追加のグラフィックスプロセッサ/コア、ペリフェラルインタフェースコントローラ、又は汎用プロセッサコアが含まれる。
【0190】
図12は、一実施形態による、1つ又は複数のIPコアを用いて製造され得る例示的なシステムオンチップ集積回路1200を示すブロック図である。例示的な集積回路1200は、1つ又は複数のアプリケーションプロセッサ1205(例えば、CPU)、少なくとも1つのグラフィックスプロセッサ1210を含み、さらに、イメージプロセッサ1215及び/又はビデオプロセッサ1220を含んでよく、それらのうちのいずれかは、同じ設計施設又は複数の異なる設計施設のモジュール式IPコアであってよい。集積回路1200は、USBコントローラ1225、UARTコントローラ1230、SPI/SDIOコントローラ1235、及びI2S/I2Cコントローラ1240を含むペリフェラルロジック又はバスロジックを含む。さらに、集積回路は、高精細度マルチメディアインタフェース(HDMI(登録商標))コントローラ1250及びモバイル業界向けプロセッサインタフェース(MIPI)ディスプレイインタフェース1255のうちの1つ又は複数に連結されたディスプレイデバイス1245を含み得る。記憶装置が、フラッシュメモリ及びフラッシュメモリコントローラを含むフラッシュメモリサブシステム1260によって提供されてよい。メモリインタフェースが、SDRAMメモリデバイス又はSRAMメモリデバイスにアクセスするためのメモリコントローラ1265を介して提供されてよい。いくつかの集積回路がさらに、埋め込み型セキュリティエンジン1270を含む。
【0191】
図13図14は、本明細書で説明される実施形態による、SoC内で用いる例示的なグラフィックスプロセッサを示すブロック図である。図13は、一実施形態による、1つ又は複数のIPコアを用いて製造され得るシステムオンチップ集積回路の例示的なグラフィックスプロセッサ1310を示す。図14は、一実施形態による、1つ又は複数のIPコアを用いて製造され得るシステムオンチップ集積回路の追加の例示的なグラフィックスプロセッサ1340を示す。図13のグラフィックスプロセッサ1310は、低電力グラフィックスプロセッサコアの一例である。図14のグラフィックスプロセッサ1340は、高性能グラフィックスプロセッサコアの一例である。グラフィックスプロセッサ1310、1340のそれぞれは、図12のグラフィックスプロセッサ1210の変形になり得る。
【0192】
図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に提供されるピクセルシェーダプログラムと同様のオペレーションを実行するのに用いられてよい。
【0193】
グラフィックスプロセッサ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コアとインタフェースで接続することを可能にする。
【0194】
図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とに実行スレッドをディスパッチするスレッドディスパッチャとしての機能を果たし、タイリングオペレーションでは、例えば、シーン内で局所空間的コヒーレンスを活用する又は内蔵キャッシュの使用を最適化するために、シーンのレンダリングオペレーションが画像空間において細分化される。
【0195】
上に示したように、頂点コンポーネントをNVビットの符号付き空間に量子化するために、各頂点コンポーネントの指数が、軸のグローバル指数から減算される。コンポーネントの値は次に、この差だけシフトダウンされる。これによってもちろん、コンポーネントの下位部の一部の精度が切り捨てられ得る。この損失を捕らえるために、このシフトの後に、最小値への切り下げ及び最大値への切り上げによってAABBが生成される。使いやすさを維持するために、量子化の際に誤差がない場合でも、頂点がユニットAABBに量子化される。 [レイトレーシングアーキテクチャ]
【0196】
1つの実施態様において、グラフィックスプロセッサは、リアルタイムレイトレーシングを行うための回路及び/又はプログラムコードを含む。いくつかの実施形態において、レイトラバーサルオペレーション及び/又はレイインターセクションオペレーションを含む、本明細書で説明される様々なレイトレーシングオペレーションを実行する専用のレイトレーシングコアのセットが、グラフィックスプロセッサに含まれる。レイトレーシングコアのほかに、1つの実施形態が、プログラム可能型シェーディングオペレーションを行うための複数セットのグラフィックス処理コアと、テンソルデータに対して行列演算を行うための複数セットのテンソルコアとを含む。
【0197】
図15は、マルチコアグループ1500A~Nに配置された専用のグラフィックス処理リソースのセットを含む1つのそのようなグラフィックス処理ユニット(GPU)1505の例示的な部分を示す。単一のマルチコアグループ1500Aの詳細だけが提供されているが、その他のマルチコアグループ1500B~Nも同じ又は同様のグラフィックス処理リソースのセットを備えてよいことが理解されるであろう。
【0198】
示されているように、マルチコアグループ1500Aは、グラフィックスコア1530のセットと、テンソルコア1540のセットと、レイトレーシングコア1550のセットとを含んでよい。スケジューラ/ディスパッチャ1510が、様々なコア1530、1540、1550で実行するためのグラフィックススレッドをスケジューリングしてディスパッチする。レジスタファイル1520のセットが、グラフィックススレッドを実行するときに、コア1530、1540、1550が用いるオペランド値を格納する。これらは、例えば、整数値を格納する整数レジスタ、浮動小数点値を格納する浮動小数点レジスタ、パックドデータ要素(整数及び/又は浮動小数点データ要素)を格納するベクトルレジスタ、及びテンソル/行列値を格納するタイルレジスタを含んでよい。1つの実施形態において、タイルレジスタは、複数のベクトルレジスタの組み合わせセットとして実装される。
【0199】
1つ又は複数のレベル1(L1)キャッシュ及びテクスチャユニット1560が、テクスチャデータ、頂点データ、ピクセルデータ、レイデータ、バウンディングボリュームデータなどのグラフィックスデータを、それぞれのマルチコアグループ1500Aにローカルに格納する。マルチコアグループ1500A~Nの全て又はそのサブセットにより共有されるレベル2(L2)キャッシュ1580が、複数のコンカレントグラフィクススレッド用のグラフィックスデータ及び/又は命令を格納する。示されるように、L2キャッシュ1580は、複数のマルチコアグループ1500A~N全体で共有されてよい。1つ又は複数のメモリコントローラ1570が、GPU1505をシステムメモリ(例えば、DRAM)及び/又は専用グラフィックスメモリ(例えば、GDDR6メモリ)であってよいメモリ1598に連結する。
【0200】
入力/出力(IO)回路1595が、デジタル信号プロセッサ(DSP)、ネットワークコントローラ、又はユーザ入力デバイスなどの1つ又は複数のIOデバイス1590にGPU1505を連結する。オンチップ相互接続が、I/Oデバイス1590をGPU1505及びメモリ1598に連結するのに用いられてよい。IO回路1595の1つ又は複数のIOメモリ管理ユニット(IOMMU)1570が、IOデバイス1590をシステムメモリ1598に直接的に連結する。1つの実施形態において、IOMMU1570は、仮想アドレスをシステムメモリ1598の物理アドレスにマッピングするための複数のセットのページテーブルを管理する。本実施形態において、IOデバイス1590、CPU1599、及びGPU1505は、同じ仮想アドレス空間を共有してよい。
【0201】
1つの実施態様において、IOMMU1570は仮想化をサポートする。この場合、IOMMU1570は、ゲスト/グラフィックス仮想アドレスをゲスト/グラフィックス物理アドレスにマッピングするための第1セットのページテーブルと、ゲスト/グラフィックス物理アドレスを(例えば、システムメモリ1598内の)システム/ホスト物理アドレスにマッピングするための第2セットのページテーブルとを管理してよい。第1及び第2セットのページテーブルのそれぞれのベースアドレスは、制御レジスタに格納され、コンテキストスイッチの際にスワップアウトされてよい(例えば、この結果、新たなコンテキストには関係のあるページテーブルのセットへのアクセスが提供される)。図15には示されていないが、コア1530、1540、1550及び/又はマルチコアグループ1500A~Nのそれぞれは、ゲスト仮想からゲスト物理への変換、ゲスト物理からホスト物理への変換、及びゲスト仮想からホスト物理への変換をキャッシュに格納するためのトランスレーションルックアサイドバッファ(TLB)を含んでよい。
【0202】
1つの実施形態において、CPU1599、GPU1505、及びIOデバイス1590は、単一の半導体チップ及び/又はチップパッケージに統合される。示されているメモリ1598は、同じチップに統合されてもよく、オフチップインタフェースを介してメモリコントローラ1570に連結されてもよい。1つの実施態様において、メモリ1598は、他の物理システムレベルのメモリと同じ仮想アドレス空間を共有するGDDR6メモリを含むが、本発明の基本的な原理はこの特定の実施態様に限定されることはない。
【0203】
1つの実施形態において、テンソルコア1540は、深層学習のオペレーションを実行するのに用いられる基本的なコンピュートオペレーションである行列演算を実行するように特に設計された複数の実行ユニットを含む。例えば、同時行列乗算オペレーションが、ニューラルネットワークの訓練及び推論に用いられてよい。テンソルコア1540は、単精度浮動小数点(例えば、32ビット)、半精度浮動小数点(例えば、16ビット)、整数語(16ビット)、バイト(8ビット)、ハーフバイト(4ビット)を含む様々なオペランド精度を用いて行列処理を実行してよい。1つの実施形態において、ニューラルネットワークの実施態様が、レンダリングされた各シーンの特徴点を、場合によっては複数のフレームから詳細を組み合わせながら抽出し、高品質の最終イメージを構築する。
【0204】
深層学習の実施態様において、並列行列乗算作業がテンソルコア1540で実行するためにスケジューリングされてよい。ニューラルネットワークの訓練は、特に、かなりの数の行列ドット積演算を必要とする。N×N×Nの行列乗算の内積の定式化を処理するために、テンソルコア1540は、少なくともN個のドット積処理要素を含んでよい。行列乗算を開始する前に、1つの行列全体がタイルレジスタにロードされ、第2の行列の少なくとも1つの列が、N個のサイクルのサイクルごとにロードされる。各サイクルには、処理されたN個のドット積がある。
【0205】
行列要素が、特定の実施態様に応じて、16ビットワード、8ビットバイト(例えば、INT8)、及び4ビットハーフバイト(例えば、INT4)を含む異なる精度で格納されてよい。異なる精度モードは、最も効率的な精度が異なるワークロード(例えば、バイト及びハーフバイトへの量子化を許容できる推論ワークロードなど)に確実に用いられるようにするために、テンソルコア1540に対して指定されてよい。
【0206】
1つの実施形態において、レイトレーシングコア1550は、リアルタイムレイトレーシングの実施態様及び非リアルタイムレイトレーシングの実施態様の両方に対するレイトレーシングオペレーションを加速する。具体的には、レイトレーシングコア1550は、バウンディングボリューム階層(BVH)を用いてレイトラバーサルを実行し、レイとBVHボリューム内に囲まれたプリミティブとの間の交差を識別するためのレイトラバーサル/インターセクション回路を含む。レイトレーシングコア1550は、(例えば、Zバッファ又は同様の仕組みを用いて)深度テスト及び間引きを行うための回路も含んでよい。1つの実施態様において、レイトレーシングコア1550は、本明細書で説明される画像ノイズ除去技術と連携して、トラバーサルオペレーション及びインターセクションオペレーションを行い、その少なくとも一部が、テンソルコア1540で実行されてよい。例えば、1つの実施形態において、テンソルコア1540は、深層学習ニューラルネットワークを実装して、レイトレーシングコア1550により生成されたフレームのノイズ除去を行う。しかしながら、CPU1599、グラフィックスコア1530、及び/又はレイトレーシングコア1550も、ノイズ除去アルゴリズム及び/又は深層学習アルゴリズムの全て又は一部を実装してよい。
【0207】
さらに、上述したように、ノイズ除去への分散型アプローチが利用されてよく、そのアプローチでは、GPU1505はコンピューティングデバイスの中にあり、当該コンピューティングデバイスは、ネットワーク又は高速相互接続を介して他のコンピューティングデバイスに連結されている。本実施形態において、相互接続されたコンピューティングデバイスはニューラルネットワーク学習/訓練用データを共有し、異なる種類の画像フレーム及び/又は異なるグラフィックスアプリケーションに対してノイズ除去を行うことをシステム全体が学習する速度を向上させる。
【0208】
1つの実施形態において、レイトレーシングコア1550は、全てのBVHトラバーサル及びレイ-プリミティブ間インターセクションを処理し、グラフィックスコア1530がレイ当たり数千の命令で過負荷になるのを防ぐ。1つの実施形態において、各レイトレーシングコア1550は、バウンディングボックステストを行うための第1セットの専用回路(例えば、トラバーサルオペレーション用)と、レイ-三角形間インターセクションテスト(例えば、トラバースしたレイを交差する)を行うための第2セットの専用回路とを含む。したがって、1つの実施形態において、マルチコアグループ1500Aはレイプローブを起動するだけでよく、レイトレーシングコア1550は独立して、レイトラバーサル及び交差を行い、ヒットデータ(例えば、ヒット、ヒットなし、複数ヒットなど)をスレッドコンテキストに戻す。その他のコア1530、1540は、他のグラフィックス作業又はコンピュート作業を行うために解放されており、レイトレーシングコア1550は、トラバーサルオペレーション及びインターセクションオペレーションを行う。
【0209】
1つの実施形態において、各レイトレーシングコア1550は、BVHテストオペレーションを行うためのトラバーサルユニットと、レイ-プリミティブ間インターセクションテストを行うインターセクションユニットとを含む。インターセクションユニットは、「ヒットあり」、「ヒットなし」、又は「複数ヒット」の応答を生成し、それを適切なスレッドに提供する。トラバーサルオペレーション及びインターセクションオペレーションの際に、他のコア(例えば、グラフィックスコア1530及びテンソルコア1540)の実行リソースは、他の形態のグラフィックス作業を行うために解放されている。
【0210】
後述する1つの特定の実施形態において、ハイブリッドラスタ化/レイトレーシング手法が用いられ、その手法では、グラフィックスコア1530とレイトレーシングコア1550との間で作業が分散される。
【0211】
1つの実施形態において、レイトレーシングコア1550(及び/又は他のコア1530、1540)は、Microsoft(登録商標)のDirectXレイトレーシング(DXR)などのレイトレーシング命令セット用のハードウェアサポートを含む。DXRには、DispatchRaysコマンド、並びにray-generationシェーダ、closest-hitシェーダ、any-hitシェーダ、及びmissシェーダが含まれ、これらによって、オブジェクトごとに一意のセットのシェーダ及びテクスチャを割り当てることが可能になる。レイトレーシングコア1550、グラフィックスコア1530、及びテンソルコア1540によりサポートされ得る別のレイトレーシングプラットフォームが、Vulkan 1.1.85である。しかしながら、本発明の基本的な原理は、いかなる特定のレイトレーシングISAにも限定されることはないことに留意されたい。
【0212】
一般的には、様々なコア1550、1540、1530は、レイトレーシング命令セットをサポートしてよく、レイトレーシング命令セットには、Ray Generation、Closest Hit、Any Hit、Ray-primitive Intersection、Per-primitive and hierarchical Bounding box Construction、Miss、Visit、及びExceptions用の命令/機能が含まれる。より具体的には、1つの実施形態が、以下の機能を実行するためのレイトレーシング命令を含む。
【0213】
Ray Generation:Ray Generation命令は、ピクセルごと、サンプルごと、又は他のユーザ定義型作業割り当てごとに実行されてよい。
【0214】
Closest Hit:Closest Hit命令は、シーン内のレイとプリミティブとの最も近い交差ポイントを探し出すために実行されてよい。
【0215】
Any Hit:Any Hit命令は、シーン内のレイとプリミティブとの間の複数の交差を識別し、場合によっては、新たな最も近い交差ポイントを識別する。
【0216】
Intersection:Intersection命令は、レイ-プリミティブ間インターセクションテストを行い、結果を出力する。
【0217】
Per-primitive Bounding box Construction:この命令は、(例えば、新たなBVH又は他のアクセラレーションデータ構造を構築する場合に)所与のプリミティブ又はプリミティブのグループの周りにバウンディングボックスを構築する。
【0218】
Miss:シーン内又はシーンの指定領域内の全てのジオメトリに、レイが当たらなかったことを示す。
【0219】
Visit:レイがトラバースすることになる子ボリュームを示す。
【0220】
Exceptions:(例えば、様々なエラー条件のために呼び出される)様々な種類の例外ハンドラを含む。 [分散型レイトレーシングシステムの不可逆及び可逆のパケット圧縮]
【0221】
1つの実施形態において、レイトレーシングオペレーションがネットワークを介して一緒に連結された複数の計算ノード全体に分散される。図16は、例えば、複数のレイトレーシングノード1610~1613を含むレイトレーシングクラスタ1600を示しており、これらのノードは、並行して、場合によっては、これらのノードのうちの1つの結果を組み合わせて、レイトレーシングオペレーションを行う。示されているアーキテクチャにおいて、レイトレーシングノード1610~1613は、ゲートウェイを介して、クライアント側のレイトレーシングアプリケーション1630に通信可能に連結される。
【0222】
分散型アーキテクチャの難点のうちの1つは、レイトレーシングノード1610~1613のそれぞれの間で伝送されなければならない大量のパケット化されたデータである。1つの実施形態において、可逆圧縮技術と不可逆圧縮技術は両方とも、レイトレーシングノード1610~1613の間で伝送されるデータを減らすのに用いられる。
【0223】
可逆圧縮を実施するために、特定の種類のオペレーションの結果で満たされたパケットを送信するのではなく、受信ノードが結果を再構築できるようにするデータ又はコマンドが送信される。例えば、確率的にサンプリングされた領域の光と、アンビエントオクルージョン(AO)オペレーションとが、必ずしも方向を必要としない。その結果として、1つの実施形態において、伝送ノードがランダムシードを送信するだけになり、ランダムシードは次に、受信ノードがランダムサンプリングを行うのに用いられる。例えば、シーンがノード1610~1612の全体に分散されている場合、ポイントp1~p3で光1をサンプリングするには、光ID及び原点だけをノード1610~1612に送信すればよい。これらのノードのそれぞれは次に、独立して、確率的に光をサンプリングしてよい。1つの実施形態において、ランダムシードは、受信ノードにより生成される。同様に、一次レイのヒットポイントでは、アンビエントオクルージョン(AO)及びソフトシャドーサンプリングが、連続フレームの原点を待つことなく、ノード1610~1612で計算され得る。さらに、レイのセットが同じ点光源に進行することが分かっている場合、光源を識別する命令が、光源をレイのセットに適用する受信ノードに送信されてよい。別の例として、単一のポイントに伝送されるアンビエントオクルージョンレイがN個ある場合、N個のサンプルをこのポイントから生成するために、コマンドが送信されてよい。
【0224】
様々な追加の技術が、不可逆圧縮に適用されてよい。例えば、1つの実施形態において、BVH、プリミティブ、及びレイに関連する全ての座標値を量子化するために、量子化ファクタが利用されてよい。さらに、BVHノード及びプリミティブなどのデータに用いられる32ビット浮動小数点値が、8ビット整数値に変換されてよい。1つの特定の実施態様において、レイパケットの境界はフル精度で格納されるが、個々のレイポイントP1~P3はインデックスオフセットとしてこれらの境界に伝送される。同様に、8ビット整数値をローカル座標として使用する複数のローカル座標系が生成されてよい。これらのローカル座標系のそれぞれの原点の位置は、フル精度(例えば、32ビット浮動小数点)値を用いて符号化され、グローバル座標系とローカル座標系を効果的に接続してよい。
【0225】
以下は、本発明の1つの実施形態で利用される可逆圧縮の一例である。レイトレーシングプログラムにおいて内部に用いられるレイデータフォーマットの一例が、次の通りである。
【数1】
【0226】
生成されたノードの1つ1つに対して生データを送信する代わりに、このデータは、値をグループ化することにより、また可能であれば適用可能なメタデータを用いて絶対的レイを作成することにより圧縮され得る。
【0227】
[レイデータのバンドル及びグループ化] 1つの実施形態が、共通データ用のフラグ又は修飾子を有するマスクを用いる。
【数2】
例えば、
RayPacket.rays=ray_1~ray_256
[原点は全て共有される]
【0228】
全てのレイデータは、単一の原点だけが全てのレイに対して格納されている場合を除いて、パックされている。RayPacket.flagsが、RAYPACKET_COMMON_ORIGINに設定される。RayPacketがアンパックされ、受信されると、複数の原点が単一の原点値から書き込まれる。 [原点が一部のレイの間だけで共有される]
【0229】
全てのレイデータが、原点を共有するレイを除いてパックされる。一意の共有原点のグループごとに、オペレーション(共有原点)を識別し、原点を格納し、どのレイが情報を共有するかをマスクする演算子がパックされる。そのようなオペレーションが、材料ID、プリミティブID、原点、方向、法線などの、複数のノードの間の任意の共有値に対して行われ得る。
【数3】
[絶対的レイの送信]
【0230】
多くの場合、レイデータが、レイデータを生成するのに最小限のメタ情報が用いられて受信側で得られ得る。非常に一般的な例が、複数の二次レイを生成して、ある領域を確率的にサンプリングしている。送信機が二次レイを生成し、当該二次レイを送信し、受信機が当該二次レイを処理する代わりに、送信機が、レイを生成する必要があるコマンドを任意の依存情報と共に送信することができ、当該レイが受信側で生成される。レイが送信機によってまず生成される必要があり、当該レイをどの受信機に送信するかを決定する場合、レイが生成され、全体に同じレイを再生成するようにランダムシードが送信され得る。
【0231】
例えば、面光源をサンプリングする64個のシャドーレイでヒットポイントをサンプリングするために、64個のレイが全て、同じコンピュートN4の領域と交差する。共通の原点及び法線を持つRayPacketが作成される。結果として得られるピクセル貢献度を受信機にシェーディングしてほしい場合に、より多くのデータが送信される可能性があるが、この例では、レイが別のノードデータにヒットするかどうかだけを返したいと仮定する。RayOperationがシャドーレイオペレーションを生成のために作成され、サンプリングされるlightIDの値及び乱数シードを割り当てられる。N4がレイパケットを受信すると、N4は、全体に満たされたレイデータを、共有原点データを全てのレイに書き込むことにより、また乱数シードで確率的にサンプリングされたlightIDに基づいて方向を設定することにより生成し、元の送信機が生成した同じレイを生成する。結果が返されると、レイごとのバイナリ結果だけが返される必要があり、このバイナリ結果は、レイを覆うマスクによって渡され得る。
【0232】
この例において、元の64個のレイを送信するとしたら、104バイト×64個のレイ=6656バイトを用いたであろう。返すレイが生の形態でも送信されるとすれば、これも2倍の13312バイトになる。共通レイ原点、法線、並びにシード及びIDを有するレイ生成オペレーションを送信するだけの可逆圧縮を用いて、29バイトだけが送信され、8バイトが交差したマスクに戻される。これにより、ネットワークを介して送信される必要があるデータ圧縮レートが、およそ360:1になる。これには、メッセージ自体を処理するオーバヘッドが含まれていない。このオーバヘッドは、何らかのやり方で識別される必要があるが、それは実施態様に委ねられている。他のオペレーションが、レイの原点と、一次レイのpixelIDからの方向とを再計算し、RayPacketの範囲と値の再計算についての多くの他の可能な実施態様とに基づいてpixelDを再計算するために行われてよい。同様のオペレーションが、送信される任意の単一又はグループのレイに用いられてよく、シャドー、反射、屈折、アンビエントオクルージョン、交差、ボリュームインターセクション、シェーディング、パストレーシングにおける跳ね返り反射などを含む。
【0233】
図17は、レイトレーシングパケットの圧縮及び伸張を行う2つのレイトレーシングノード1710~1711のさらなる詳細を示す。具体的には、1つの実施形態において、第1のレイトレーシングエンジン1730がデータを第2のレイトレーシングエンジン1731に伝送する準備が整うと、レイ圧縮回路1720が、本明細書で説明されるレイトレーシングデータの不可逆圧縮及び/又は可逆圧縮を行う(例えば、32ビット値を8ビット値に変換する、データを再構築する命令の代わりに生データを用いるなど)。圧縮したレイパケット1701は、ネットワークインタフェース1725からネットワークインタフェース1726にローカルネットワーク(例えば、10Gb/s、100Gb/sイーサネット(登録商標)ネットワーク)を介して伝送される。次にレイ伸張回路が、適宜、レイパケットを伸張する。例えば、レイ伸張回路は、(例えば、ライティングオペレーションに対してランダムサンプリングを行うランダムシードを用いて)レイトレーシングデータを再構築するコマンドを実行してよい。次にレイトレーシングエンジン1731が、受信したデータを用いて、レイトレーシングオペレーションを行う。
【0234】
逆方向では、レイ圧縮回路1741がレイデータを圧縮し、圧縮したレイデータをネットワークインタフェース1726が(例えば、本明細書で説明される技術を用いて)ネットワークを介して伝送し、レイ伸張回路1740が必要に応じてレイデータを伸張し、レイトレーシングエンジン1730がレイトレーシングオペレーションにデータを用いる。図17には別個のユニットとして示されているが、レイ伸張回路1740~1741はそれぞれ、レイトレーシングエンジン1730~1731に統合されてもよい。例えば、圧縮したレイデータがレイデータを再構築するコマンドを含む限りは、これらのコマンドは、それぞれのレイトレーシングエンジン1730~1731により実行されてよい。
【0235】
図18に示すように、レイ圧縮回路1720は、本明細書で説明される不可逆圧縮技術(例えば、32ビット浮動小数点座標を8ビット整数座標に変換する)を実行するための不可逆圧縮回路1801と、可逆圧縮技術(例えば、コマンド及びデータを伝送して、レイ伸張回路1721がデータを再構築することを可能にする)を実行するための可逆圧縮回路1803とを含んでよい。レイ伸張回路1721は、不可逆伸張回路1802と、可逆伸張を行うための可逆伸張回路1804とを含む。
[ハードウェアアクセラレートされたハイブリッド型レイトレーシングを有するグラフィックスプロセッサ]
【0236】
本発明の1つの実施形態が、グラフィックスコア1530でのラスタ化と、レイトレーシングコア1550、グラフィックスコア1530、及び/又はCPUコア1599でのレイトレーシングオペレーションと行うハイブリッドレンダリングパイプラインを含む。例えば、ラスタ化及び深度テストが、一次レイキャスティング段階の代わりにグラフィックスコア1530で行われてよい。次にレイトレーシングコア1550は、レイの反射、屈折、及びシャドーに対して二次レイを生成してよい。さらに、特定の実施形態では、レイトレーシングコア1550がレイトレーシングオペレーションを行うことになるシーンの特定の領域が(例えば、高反射率レベルなどの材料特性閾値に基づいて)選択されてよく、当該シーンの他の領域がグラフィックスコア1530でのラスタ化でレンダリングされることになる。1つの実施形態において、このハイブリッドな実施態様は、遅延が重大な問題となるリアルタイムのレイトレーシングアプリケーションに用いられる。
【0237】
後述するレイトラバーサルアーキテクチャの1つの実施形態では、既存の単一命令多重データ(SIMD)及び/又は単一命令多重スレッド(SIMT)グラフィックスプロセッサを用いたレイトラバーサルのプログラム可能なシェーディング及び制御が行われるとともに、専用ハードウェアを用いた、BVHトラバーサル及び/又はインターセクションなどの重要機能が加速される。本実施形態において、インコヒーレントパスのSIMD占有率が、生成されるシェーダをトラバーサル時の特定の時点で且つシェーディングの前に再グループ化することにより向上する。これは、シェーダを動的にオンチップでソートする専用ハードウェアを用いて実現される。再帰法が、SIMD占有率の向上についての実行の前に、継続を返して再グループ化する際に実行する継続に機能を分割することにより管理される。
【0238】
レイトラバーサル/インターセクションのプログラム可能型制御は、トラバーサル機能を、固定機能ハードウェアとして実装され得る内部トラバーサルと、GPUプロセッサで実行され、ユーザ定義トラバーサルシェーダによるプログラム可能型制御を可能にする外部トラバーサルとに分解することにより実現される。トラバーサルコンテキストをハードウェアとソフトウェアとの間で転送するコストは、内部トラバーサルと外部トラバーサルとの間を移行する際に、内部トラバーサル状態を控えめに切り詰めることにより減少する。
【0239】
レイトレーシングのプログラム可能型制御は、以下のテーブルAに列挙される異なるシェーダの種類によって表され得る。種類ごとに複数のシェーダが存在し得る。例えば、各材料が、異なるヒットシェーダを持つことができる。
[テーブルA]
【表1】
【0240】
1つの実施形態において、再帰的レイトレーシングが、グラフィックスプロセッサに一次シェーダセットを起動するよう命令するAPI機能又は一次レイに対するレイ-シーン間インターセクションを生成できるインターセクション回路によって開始される。これは次に、トラバーサルシェーダ、ヒットシェーダ、又はミスシェーダなどの他のシェーダを生成する。子シェーダを生成するシェーダが、子シェーダからの返り値も受信できる。コール可能なシェーダは、別のシェーダによって直接的に生成され得る汎用機能であり、コーリングシェーダにこれらの値を返すこともできる。
【0241】
図19は、シェーダ実行回路1900と固定機能回路1910とを含むグラフィックス処理アーキテクチャの一実施形態を示す。汎用実行ハードウェアサブシステムは、複数の単一命令多重データ(SIMD)及び/又は単一命令多重スレッド(SIMT)コア/実行ユニット(EU)1901(つまり、各コアは複数の実行ユニットを含んでよい)と、1つ又は複数のサンプラ1902と、レベル1(L1)キャッシュ1903又は他の形態のローカルメモリとを含む。固定機能ハードウェアサブシステム1910は、メッセージユニット1904と、スケジューラ1907と、レイ-BVH間トラバーサル/インターセクション回路1905と、ソーティング回路1908と、ローカルL1キャッシュ1906とを含む。
【0242】
オペレーション時に、一次ディスパッチャ1909が一次レイのセットをスケジューラ1907にディスパッチし、スケジューラ1907は、SIMD/SIMTコア/EU1901で実行されるシェーダに作業をスケジューリングする。SIMDコア/EU1901は、上述したレイトレーシングコア1550及び/又はグラフィックスコア1530であってよい。一次シェーダの実行で、実行される(例えば、1つ又は複数の子シェーダ及び/又は固定機能ハードウェアにより実行される)追加の作業が生成される。メッセージユニット1904は、SIMDコア/EU1901により生成された作業をスケジューラ1907に分配し、必要に応じてフリースタックプール、ソーティング回路1908、又はレイ-BVH間インターセクション回路1905にアクセスする。追加の作業がスケジューラ1907に送信されない場合、追加の作業は、SIMD/SIMTコア/EU1901で処理するためにスケジューリングされる。スケジューリングする前に、ソーティング回路1908は、複数のレイを本明細書で説明される複数のグループ又はビンにソートしてよい(例えば、複数のレイを同様の特性でグループ化する)。レイ-BVH間インターセクション回路1905は、BVHボリュームを用いてレイのインターセクションテストを行う。例えば、レイ-BVH間インターセクション回路1905は、レイ座標を各レベルのBVHと比較して、レイが交差するボリュームを識別してよい。
【0243】
シェーダは、シェーダレコード、エントリ機能に対するポインタを含むユーザ割り当て構造、特定ベンダ向けメタデータ、SIMDコア/EU1901により実行されるシェーダに対するグローバル引数を用いて参照され得る。シェーダの各実行インスタンスは、親シェーダと子シェーダとの間で送られる引数を格納するのに用いられ得るコールスタックに関連している。コールスタックは、コールが戻ると実行される継続機能への参照も格納してよい。
【0244】
図20は、一次シェーダスタック、ヒットシェーダスタック、トラバーサルシェーダスタック、継続機能スタック、及びレイ-BVH間インターセクションスタック(これらは、説明したように、固定機能ハードウェア1910により実行されてよい)を含む割り当てスタック2001のセットの一例を示す。新たなシェーダ呼び出しが、フリースタックプール2002から新たなスタックを実装してよい。コールスタックは、アクセス遅延を減らすために、ローカルL1キャッシュ1903、1906にキャッシュされてよい。
【0245】
1つの実施形態において、コールスタックの数は有限であり、それぞれには、固定最大サイズ「Sstack」がメモリの連続した領域に割り当てられている。したがって、スタックのベースアドレスは、スタックインデックス(SID)から、ベースアドレス=SID×Sstackとして、直接的に計算され得る。1つの実施形態において、SIMDコア/EU1901に作業をスケジューリングすると、スタックIDがスケジューラ1907により割り当てられ、また割り当てを解除される。
【0246】
1つの実施形態において、一次ディスパッチャ1909は、ホスト(例えば、CPU)からのディスパッチコマンドに応答して、一次シェーダをディスパッチするグラフィックスプロセッサコマンドプロセッサを含む。スケジューラ1907は、これらのディスパッチ要求を受信し、SIMDレーンごとにスタックIDを割り当てることができる場合、SIMDプロセッサスレッドで一次シェーダを起動する。スタックIDは、ディスパッチコマンドの初めに初期化されるフリースタックプール2002から割り当てられる。
【0247】
実行シェーダは、生成メッセージをメッセージユニット1904に送信することによって、子シェーダを生成できる。このコマンドは、シェーダに関連したスタックIDを含み、有効なSIMDレーンごとに子シェーダレコードに対するポインタも含む。親シェーダは、このメッセージを有効レーンに対して一度だけ発行できる。1つの実施形態において、関連するレーン全てに生成メッセージを送信した後に、親シェーダが終了する。
【0248】
SIMDコア/EU1901で実行されるシェーダは、シェーダレコードポインタが固定機能ハードウェア用に予約された生成メッセージを用いて、レイ-BVH間インターセクションなどの固定機能タスクも生成できる。すでに述べたように、メッセージユニット1904は、生成されたレイ-BVH間インターセクション作業を固定機能のレイ-BVH間インターセクション回路1905に送信し、またコール可能なシェーダをソーティング回路1908に直接的に送信する。1つの実施形態において、ソーティング回路は、シェーダレコードポインタでシェーダをグループ化して、同様の特性を持つSIMDバッチを得る。したがって、異なる親シェーダからのスタックIDが、ソーティング回路1908によって同じバッチにグループ化され得る。ソーティング回路1908は、グループ化されたバッチをスケジューラ1907に送信し、スケジューラ1907は、グラフィックスメモリ2511又はラストレベルキャッシュ(LLC)1920からシェーダレコードにアクセスし、プロセッサスレッドでシェーダを起動する。
【0249】
1つの実施形態において、継続がコール可能なシェーダとして扱われ、シェーダレコードによっても参照されてよい。子シェーダが生成され、親シェーダに値を返すと、継続シェーダレコードへのポインタが、コールスタック2001にプッシュされる。子シェーダが戻ると、継続シェーダレコードはコールスタック2001からポップされ、継続シェーダが生成される。生成された継続は、コール可能なシェーダと同様のソートユニットを通って進み、プロセッサスレッドで起動する。
【0250】
図21に示すように、ソーティング回路1908の1つの実施形態が、生成されたタスクをシェーダレコードポインタ2101A、2101B、2101nによってグループ化して、シェーディング用のSIMDバッチを作成する。ソートされたバッチのスタックID又はコンテキストIDは、異なるディスパッチ及び異なる入力SIMDレーンからグループ化され得る。1つの実施形態において、グループ化回路2110が、各エントリがタグ2101で識別される複数のエントリを含むコンテンツアドレス指定可能メモリ(CAM)構造2101を用いてソートを行う。すでに述べたように、1つの実施形態において、タグ2101は、対応するシェーダレコードポインタ2101A、2101B、2101nである。1つの実施形態において、CAM構造2101は、それぞれがシェーダレコードポインタに対応する不完全なSIMDバッチに関連する限定された数のタグ(例えば32個、64個、128個など)を格納する。
【0251】
入ってくる生成コマンドに対して、各SIMDレーンは、対応するスタックID(各CAMエントリに16個のコンテキストID0~15として示されている)と、シェーダレコードポインタ2101A、B、…n(タグ値としての機能を果たす)とを有する。1つの実施形態において、グループ化回路2110は、シェーダレコードポインタをレーンごとにCAM構造2101のタグ2101と比較して、一致するバッチを見つける。一致するバッチが見つかった場合、スタックID/コンテキストIDはバッチに追加される。そうでなければ、新たなシェーダレコードポインタタグを有する新たなエントリが作成され、場合によっては、不完全なバッチを有する古いエントリを追い出す。
【0252】
実行シェーダは、割り当て解除メッセージをメッセージユニットに送信することで空になると、コールスタックを割り当て解除できる。割り当て解除メッセージは、有効なSIMDレーンのスタックID/コンテキストIDをフリープールに返すスケジューラに中継される。
【0253】
本発明の1つの実施形態では、固定機能レイトラバーサルとソフトウェアレイトラバーサルとの組み合わせを用いて、レイトラバーサルオペレーション用のハイブリッドアプローチが実施される。その結果として、このハイブリッドアプローチは、ソフトウェアトラバーサルの柔軟性を提供するとともに、固定機能トラバーサルの効率性を維持する。図22は、ハイブリッドトラバーサルに用いられ得るアクセラレーション構造を示す。ハイブリッドトラバーサルは2段階ツリーであり、単一の上位レベルのBVH2200と、いくつかの下位レベルのBVH2201及び2202とがある。グラフィカル要素が右に示されており、内部トラバーサルパス2203と、外部トラバーサルパス2204と、トラバーサルノード2205と、三角形を有するリーフノード2206と、カスタムプリミティブを有するリーフノード2207とを示す。
【0254】
上位レベルのBVH2200にある三角形を有するリーフノード2206は、三角形、カスタムプリミティブのインターセクションシェーダレコード、又はトラバーサルシェーダレコードを参照できる。下位レベルのBVH2201~2202の、三角形を有するリーフノード2206は、三角形とカスタムプリミティブのインターセクションシェーダレコードだけを参照できる。参照の種類は、リーフノード2206内で符号化される。内部トラバーサル2203は、各BVH2200~2202内のトラバーサルのことを指す。内部トラバーサルオペレーションは、レイ-BVH間インターセクションの計算を含み、BVH構造2200~2202全体にわたるトラバーサルは外部トラバーサルとして知られている。内部トラバーサルオペレーションは、固定機能ハードウェアに効果的に実装されてよく、外部トラバーサルオペレーションは、プログラム可能型シェーダを用いて許容性能で行われてよい。その結果として、本発明の1つの実施形態では、内部トラバーサルオペレーションが固定機能回路1910を用いて行われ、外部トラバーサルオペレーションがプログラム可能型シェーダを実行するためのSIMDコア/EU1901を含むシェーダ実行回路1900を用いて行われる。
【0255】
1つの実施形態において、内部トラバーサルの際にレイがトラバーサルノードと交差すると、トラバーサルシェーダが生成される。ソーティング回路1908は、シェーダレコードポインタ2101A、B、…nによってこれらのシェーダをグループ化し、グラフィックスSIMDコア/EU1901でのSIMD実行のために、スケジューラ1907により起動されるSIMDバッチを作成する。トラバーサルシェーダは、いくつかのやり方でトラバーサルを修正でき、幅広い範囲のアプリケーションを可能にする。例えば、トラバーサルシェーダは、粗い詳細度(LOD)でBVHを選択できる、又はレイを変換して剛体変換を可能にすることができる。次にトラバーサルシェーダは、選択したBVH用の内部トラバーサルを生成する。
【0256】
内部トラバーサルは、BVHをトラバースして、レイ-ボックス間インターセクション及びレイ-三角形間インターセクションを計算することにより、レイ-BVH間インターセクションを計算する。内部トラバーサルは、メッセージをメッセージ回路1904に送信することにより、シェーダと同じ方式で生成される。メッセージ回路1904は、レイ-BVH間インターセクションを計算するレイ-BVH間インターセクション回路1905に、対応する生成メッセージを中継する。
【0257】
1つの実施形態において、内部トラバーサル用のスタックは、固定機能回路1910に(例えば、L1キャッシュ1906に)ローカルに格納される。トラバーサルシェーダ又はインターセクションシェーダに対応するリーフノードとレイが交差すると、内部トラバーサルが終了し、内部スタックが切り詰められる。レイ及びBVHへのポインタと共に、切り詰められたスタックは、コーリングシェーダにより指定された位置でメモリに書き込まれ、次いで、対応するトラバーサルシェーダ又はインターセクションシェーダが生成される。内部トラバーサル時にレイが任意の三角形と交差した場合、対応するヒット情報は、以下のコードに示すこれらのシェーダに入力引数として提供される。生成されたこれらのシェーダは、ソーティング回路1908によりグループ化され、実行用のSIMDバッチを形成する。
【数4】
【0258】
内部トラバーサルスタックを切り詰めることで、内部トラバーサルスタックをメモリにスピルするコストが減少する。本発明の1つの実施形態が、『Restart Trail for Stackless BVH Traversal』(High Performance Graphics (2010), pp. 107-111)で説明されているアプローチを用いて、スタックの先頭でスタックを少数のエントリに、つまり42ビットリスタートトレイル及び6ビットデプス値に切り詰める。リスタートトレイルは、BVH内部にすでに取り込まれている分岐を示し、デプス値は、最後のスタックエントリに対応するトラバーサルの深度を示す。これは、内部トラバーサルを後で再開するのに十分な情報である。
【0259】
内部トラバーサルは、内部スタックが空になり、テストするBVHノードがこれ以上ない場合に完了する。この場合、外部スタックの先頭をポップする外部スタックハンドラが生成され、外部スタックが空でなければ、トラバーサルを再開する。
【0260】
1つの実施形態において、外部トラバーサルが主なトラバーサルステートマシンを実行し、シェーダ実行回路1900により実行されるプログラムコードに実装される。シェーダ実行回路1900は、以下の条件下で内部トラバーサルクエリを生成する。すなわち、(1)新たなレイがヒットシェーダ又は一次シェーダにより生成された場合、(2)トラバーサルシェーダがトラバーサル用にBVHを選択した場合、(3)外部スタックハンドラがBVHの内部トラバーサルを再開した場合である。
【0261】
図23に示すように、内部トラバーサルが生成される前に、固定機能回路1910のコールスタック2305に空間が割り当てられ、切り詰められた内部スタック2310を格納する。コールスタック及び内部スタックの先頭に対するオフセット2303~2304が、メモリ2511にも格納されるトラバーサル状態2300に維持される。トラバーサル状態2300は、ワールド空間2301及びオブジェクト空間2302、並びに最も近い交差プリミティブのヒット情報にもレイを含む。
【0262】
トラバーサルシェーダ、インターセクションシェーダ、及び外部スタックハンドラは全て、レイ-BVH間インターセクション回路1905により生成される。トラバーサルシェーダは、第2レベルのBVHの新たな内部トラバーサルを開始する前に、コールスタック2305に対して割り当てを行う。外部スタックハンドラは、ヒット情報を更新し、また任意の保留中の内部トラバーサルタスクを再開する役割を担うシェーダである。外部スタックハンドラは、トラバーサルが完了した場合、ヒットシェーダ又はミスシェーダを生成する役割も担う。トラバーサルは、生成する保留中の内部トラバーサルクエリがない場合に完了する。トラバーサルが完了し且つ交差が見つかった場合、ヒットシェーダが生成され、見つからなければミスシェーダが生成される。
【0263】
上述したハイブリッドトラバーサル方式は2段階のBVH階層を用いているが、本明細書で説明される本発明の実施形態は、外部トラバーサルの実施態様において対応する変更を伴った、任意の数のBVHレベルを用いてもよい。
【0264】
さらに、固定機能回路1910は、上記実施形態でレイ-BVH間インターセクションを行うように説明されているが、他のシステムコンポーネントも固定機能回路に実装されてよい。例えば、上述した外部スタックハンドラは、場合によっては固定機能BVHトラバーサル/インターセクション回路1905に実装され得る内蔵(ユーザには見えない)シェーダであってよい。この実施態様は、ディスパッチシェーダ段階の数と、固定機能インターセクションハードウェア1905とプロセッサとの間のやり取りを減らすのに用いられてよい。
【0265】
ここで説明される本発明の実施形態は、既存及び将来のGPUプロセッサにおいて高いSIMD効率で実行できるユーザ定義機能を用いて、プログラム可能型シェーディング及びレイトラバーサル制御を可能にする。レイトラバーサルのプログラム可能型制御によって、手続き型インスタンシング、確率レベルの詳細選択、カスタムプリミティブインターセクション、及びレイジーBVH更新などのいくつかの重要な機能が可能になる。
[アルファ値を用いてレイトレーシング効果を向上させる装置及び方法]
【0266】
レイトレーシングは、物理ベースのレンダリングを通じて光輸送がシミュレーションされる技術である。レイトレーシングは、映画のレンダリングで広く用いられているが、ほんの数年前まで、リアルタイムの実行には非常に多くのリソースを必要とすると考えられていた。レイトレーシングの重要な演算のうちの1つは、バウンディングボリューム階層(BVH)において、三角形又は他のプリミティブなどの横断及び交差するノードにより、レイ-シーンインターセクションを算出する「レイトラバーサル」として知られるレイ-シーンインターセクションのための可視性クエリを処理することである。
【0267】
プリミティブに関連付けられる「アルファ」テクスチャは、そのプリミティブにわたる透明度のレベルを示す。アルファテストは、アルファ値が閾値を下回るピクセル又はプリミティブを取り除くために、現在のグラフィックス処理アーキテクチャにおいて用いられる。
【0268】
アルファテストされたプリミティブは、レイにより交差され得、この場合、レイがプリミティブを通じて反映又は伝送され得る。現在の実装において、アルファテストされたプリミティブをトレーシングするレイは、極めて遅くなる場合があるが、これは、このようなプリミティブにヒットすることで、グラフィックスプロセッサのEU上で動作するシェーダの実行がトリガされるからである。このシェーダは、次に、プリミティブの頂点における3セットのテクスチャ座標をロードし、インターセクションポイントにおけるテクスチャ座標を算出する必要がある。最終的に、現在のヒットが不透明又は透明なピクセルへのヒットであるかどうかを確認するために、シェーダは、プリミティブに対するテクスチャのアルファチャネルをロードする必要がある。
【0269】
高度テセレートのジオメトリは、アルファテストの量を最小限に抑えるために用いられ得る。しかしながら、高度テセレートのジオメトリは、より多くのメモリを必要とし、アニメーション化されたジオメトリの場合では、当該ジオメトリを含むBLAS(下位レベルアクセラレーション構成)が更新される必要がある場合に、より多くの処理時間を必要とする。
【0270】
本発明の一実施形態において、各アルファテストされたプリミティブ(例えば、三角形)は、サブプリミティブのセットに細分化される。次に、各サブプリミティブは、全体に透明又は全体に不透明のいずれか一方であるかどうかを決定するために評価される。サブプリミティブごとに2ビットが格納されてよく、ビット0は、(これが設定されている場合)サブプリミティブが全体に透明である場合を示し、ビット1は、(これが設定されている場合)サブプリミティブが全体に不透明である場合を示す。代替的に、全体に透明(0)又は全体に不透明(1)を示すために、単一のビットが符号化されてよい(しかしながら、この符号化は、部分的に透明/不透明なプリミティブを可能にしないであろう)。本発明の基礎となる原理に依然として準拠しつつ様々な他の符号化が用いられてよい。
【0271】
一実施形態において、レイトレーシングハードウェアは、レイがプリミティブにヒットしたことを決定した場合、レイがどのサブプリミティブにヒットしたかを決定する。ハードウェアは、次に、符号化されたビットを確認して、プリミティブが全体に透明であるか、又は、全体に不透明であるかを決定する。サブプリミティブが全体に透明である場合、次に、レイは、(例えば、異なる表面をヒットするまで)BVH中を進み続ける。サブプリミティブが全体に不透明である場合、インターセクション回路/ロジックは、有効なヒットを記録して、二次レイを場合によっては生成する。
【0272】
図24は、レイのセットを生成する1つ又は複数の実行ユニット(EU)上で実行される一次レイ生成器2405を含む一実施形態を示す。レイトラバーサル回路/ロジック2420は、構成されたバウンディングボリューム階層(BVH)を中でレイをトラバースして、レイが通過するボリュームを識別する。インターセクション回路2430は、インターセクションテストを実行して、レイにより交差されるボリューム内のオブジェクト/プリミティブを識別する。ソーティング回路/ロジック2440は、次に、1つ又は複数の共通の特性に基づいてレイをソートし、レイディスパッチャ2430は、1つ又は複数の追加のレイ(例えば、二次レイ)を、EU2405により処理される検出されたインターセクションポイントからディスパッチしてよい。キャッシュ/メモリサブシステム2410は、レイトレーシングパイプラインのコンポーネントにより生成された様々なタイプのソースデータ及び結果を格納する。
【0273】
1つの特定のタイプのデータは、現在のシーンに含まれるオブジェクト、表面及びプリミティブを含み得るシーンデータ2432である。1つ又は複数のアルファテストされたプリミティブ2436は、アルファテストを介して生成され得る。サブプリミティブ生成器は、アルファテストされたプリミティブ2436のうちの1つ又は複数に対するサブプリミティブを生成する。別の実施形態では、ID(例えば、0...N2-1)は、元のプリミティブ(例えば、三角形)のインターセクションポイントからすぐに算出され得る。プリミティブが三角形である場合、各アルファテストされた三角形は、複数のサブ三角形を含み得る。サブプリミティブエンコーダ2437は、サブプリミティブを評価し、当該評価に基づいて、各サブプリミティブにアルファコードを割り当てる。すでに述べたように、全体に透明又は全体に不透明なものとして各サブプリミティブを識別するために、2ビットが用いられてよい。例えば、ビット0は、サブプリミティブが全体に透明である場合(1に設定されている場合)を示してよく、ビット1は、サブプリミティブが全体に不透明である場合(1に設定されている場合)を示してよい。両方のビットが0に設定されている場合、サブプリミティブは、全体に透明でも全体に不透明でもない(例えば、部分的に透明である)。一実施形態において、両方のビットが0に設定されている場合、標準的なトラバーサル/インターセクション処理が実行され得る。
【0274】
一実施形態において、アルファコード2438を有するサブプリミティブは、キャッシュ/メモリサブシステム2410に格納されるが、異なるタイプのストレージ(例えば、1つ又は複数のパイプラインコンポーネントにアクセス可能な専用バッファメモリ)が用いられてもよい。さらに、一実施形態はサブ三角形を明示的に作成することなく動作する。一実施形態において、インターセクション回路/ロジック2430は、レイがプリミティブにヒットしたことを決定した場合、どのサブプリミティブがヒットしたかを決定する。インターセクション回路/ロジック2430は、次に、符号化されたビットを確認して、プリミティブが全体に透明であるか、又は、全体に不透明であるかを決定する。レイが全体に透明である場合、レイは、BVH中を進み続ける(例えば、異なる表面をヒットするまで、トラバーサル回路/ロジック2420及びインターセクション回路2430によりさらに処理される)。サブプリミティブが全体に不透明である場合、インターセクション回路/ロジック2430は、有効なヒットを記録して、レイディスパッチャに二次レイを場合によっては生成させる。
【0275】
すでに述べたように、レイのソート回路/ロジック2440は、共通の特性に基づいて、レイをソートする。これは、例えば、推定されたレイの方向、レイのソートキー、及び/又は、シェーダレコードIDを含み得る。一実施形態において、レイは、複数のソートFIFOキュー内の複数のグループにソートされる。トラバーサル及びインターセクション動作といったさらなる処理のために、レイディスパッチャ2430は、次に、ソートFIFOからEU2415にレイのグループをディスパッチする。
【0276】
図25に関連して、量子化された方向のソートキーの作成が説明される。レイ2501及び2502は、同様な位置で、このバウンディングボックスに含まれるオブジェクトと交差するので、一緒にディスパッチされるはずである。レイ2503及び2504は、バウンディングボックスの異なる壁(つまり、異なる面IDで示される)と交差するので、同じ場所に配置されない。レイ2505は、2501及び2502と同じ壁にヒットするが、位置は異なる。その結果として、レイ2505は同じ面IDを持つが、U/V座標は異なる。
【0277】
図26は、シェーダレコードキー2601とインターセクションキー2602とを含むソートキー2600の1つの実施形態を示す。本実施形態のインターセクションキーは、上述した8ビット値を含む。つまり、U及びVの座標に6ビット(つまり、ビット39:34)と、面IDに2ビット(つまり、ビット33:32)である。最も頻繁に変わる8ビットインターセクションキー2602のビット(つまりU[0]及びV[0]の値)は、ソートキー2600の最上位ビット位置で符号化される。ある意味では、これらのビットは、そのエントロピでソートされる。この特定のスウィズルの理由は、ソートキービットの数を一致するように変更するだけで、ソート精度が容易に調整され得るという点にある。1つの実施態様において、最低精度(1)は、シェーダレコードID(つまり、ビット31:0)を符号化する最下位の32ビットだけを一致させることで実現される。最高精度(5)は、40ビット全てを一致させることで実現される。
【0278】
1つの実施形態において、ソーティング回路/ロジック2440は、調整可能なソートキー精度を用い、図27のフローチャートに関して説明される、以下のルールのセットに従って、ソートFIFO2403を満たす。
【0279】
2701で、新たなレイがソートのために受信されると、精度Pは、最高値(例えば、1つの実施形態においては40ビット)に最初に設定される。2702で一致が見つかったと判定された場合、2706でレイは、対応するソートFIFOに送信される。2702で一致が見つからない且つ2703で全てのソートFIFOが割り当てられていると判定された場合、2705で精度は、指定されたインクリメント分だけ減らされる。低精度で一致を探し出す試みが、2702で行われ、一致が見つかった場合、2706でレイはソートFIFOに追加される。見つからない場合には、2702で一致が見つかるまで、2705で精度は下げられ続けてよい。
【0280】
2702で一致がないと判定された後に、2703でソートFIFOが利用可能な場合、2704で現在の精度(例えば、最高精度)で新たなソートFIFOが形成される。すでに述べたように、新たなソートFIFOは、既存のソートFIFOと同じシェーダレコードキー2601を有してよい(インターセクションキーは異なる)。現在のレイは、新たなソートFIFOに追加され、2707で次のレイが選択される。
【0281】
したがって、本実施形態では、全てのソートFIFO2400~2403が割り当てられ、40ビットソートキーとの完全な一致がない場合、一致が見つかるまで又は精度が最小値に達するまで、精度が減らされる(つまり、32ビットシェーダレコードID2601)。いくつかのソートFIFOが利用可能であり、40ビットソートキーとの完全な一致がない場合、新たなソートFIFOが、この一致しないソートキーの代わりに形成される。したがって、シェーダレコードIDは、複数のFIFO全体で重複してもよい。1つの実施形態において、部分的に占有されたソートFIFOの強制追い出しの際に、シェーダレコードID2601が一致する限り、レイが、異なるソートFIFO全体で組み合わされてよい。
【0282】
[実施例]
【0283】
以下は、本発明の異なる実施形態の例示的な実施態様である。
【0284】
[実施例1]
複数のレイを生成するレイ生成器と、複数のレイのそれぞれの近似的なレイ方向データを生成するレイ方向評価回路/ロジックと、近似的なレイ方向データに少なくとも部分的に基づいて、複数のレイを複数のレイキューにソートするレイソーティング回路/ロジックとを備える装置。
【0285】
[実施例2]
近似的なレイ方向データは、複数のレイのそれぞれのレイに関連付けられた量子化された方向値を含む、実施例1に記載の装置。
【0286】
[実施例3] レイごとの量子化された方向値は、レイが交差するボリュームの面を示す第1のデータと、レイとボリュームの面との交差の量子化された交差座標を含む第2のデータとを有する、実施例2に記載の装置。
【0287】
[実施例4]
レイソーティング回路/ロジックは、量子化された方向値とレイに関連付けられたシェーダレコードキーとの組み合わせに基づいて、複数のレイのうちの1つ又は複数を複数のレイキューにグループ化する、実施例2に記載の装置。
【0288】
[実施例5]
レイソーティング回路/ロジックは、量子化されたレイ方向値及びシェーダレコードキーの両方を用いて、レイをレイキューと一致させるようにまず試み、一致が見つからない場合にのみ、シェーダレコードキーだけを用いて、レイをレイキューと一致させるように試みる、実施例4に記載の装置。
【0289】
[実施例6]
量子化されたレイ方向値及びシェーダレコードキーの両方を用いて、一致が見つからない場合、レイソーティング回路/ロジックは、レイを含む新たなレイキューを割り当てるように試みる、実施例5に記載の装置。
【0290】
[実施例7]
ソーティング回路/ロジックは、新たなレイキューの割り当てができないと判定した後にだけ、シェーダレコードキーのみを用いて、レイをレイキューに一致させるように試みる、実施例6に記載の装置。
【0291】
[実施例8]
装置はさらに、複数のレイが格納されている複数のレイキューによって定められる複数のグループに複数のレイをディスパッチするレイディスパッチャを備える、実施例1に記載の装置。
【0292】
[実施例9]
装置はさらに、複数のレイのうちの1つ又は複数をバウンディングボリューム階層の中を通ってトラバースするレイトラバーサル回路と、複数のレイのうちの1つ又は複数とシーン内の1つ又は複数のオブジェクトとの間の交差を判定するレイインターセクション回路とを備える、実施例1に記載の装置。
【0293】
[実施例10]
複数のレイを生成する段階と、複数のレイのそれぞれの近似的なレイ方向データを決定する段階と、近似的なレイ方向データに少なくとも部分的に基づいて、複数のレイを複数のレイキューにソートする段階とを含む方法。
【0294】
[実施例11]
近似的なレイ方向データは、複数のレイのそれぞれのレイに関連付けられた量子化された方向値を含む、実施例10に記載の方法。
【0295】
[実施例12]
レイごとの量子化された方向値は、レイが交差するボリュームの面を示す第1のデータと、レイとボリュームの面との交差の量子化された交差座標を含む第2のデータとを有する、実施例11に記載の方法。
【0296】
[実施例13]
ソートする段階はさらに、量子化された方向値とレイに関連付けられたシェーダレコードキーとの組み合わせに基づいて、複数のレイを複数のレイキューにグループ化する段階を含む、実施例11に記載の方法。
【0297】
[実施例14]
方法はさらに、量子化されたレイ方向値及びシェーダレコードキーの両方を用いて、レイをレイキューと一致させるようにまず試みる段階と、一致が見つからない場合にのみ、シェーダレコードキーだけを用いて、レイをレイキューと一致させるように試みる段階とを含む、実施例13に記載の方法。
【0298】
[実施例15]
方法はさらに、量子化されたレイ方向値及びシェーダレコードキーの両方を用いて一致が見つからない場合、レイを含む新たなレイキューを割り当てるように試みる段階を含む、実施例14に記載の方法。
【0299】
[実施例16]
シェーダレコードキーのみを用いて、レイをレイキューに一致させるように試みる段階は、新たなレイキューの割り当てができないと判定した後にだけ行われる、実施例15に記載の方法。
【0300】
[実施例17]
方法はさらに、複数のレイが格納されている複数のレイキューによって定められる複数のグループに複数のレイをディスパッチする段階を含む、実施例10に記載の方法。
【0301】
[実施例18]
方法はさらに、複数のレイのうちの1つ又は複数をバウンディングボリューム階層の中を通ってトラバースする段階と、複数のレイのうちの1つ又は複数とシーン内の1つ又は複数のオブジェクトとの間の交差を判定する段階とを含む、実施例10に記載の方法。
【0302】
[実施例19]
機械により実行されると、複数のレイを生成するオペレーションと、複数のレイのそれぞれの近似的なレイ方向データを決定するオペレーションと、近似的なレイ方向データに少なくとも部分的に基づいて、複数のレイを複数のレイキューにソートするオペレーションとを機械に行わせるプログラムコードを格納した機械可読媒体。
【0303】
[実施例20]
近似的なレイ方向データは、複数のレイのそれぞれのレイに関連付けられた量子化された方向値を含む、実施例19に記載の機械可読媒体。
【0304】
[実施例21]
レイごとの量子化された方向値は、レイが交差するボリュームの面を示す第1のデータと、レイとボリュームの面との交差の量子化された交差座標を含む第2のデータとを有する、実施例20に記載の機械可読媒体。
【0305】
[実施例22]
ソートするオペレーションはさらに、量子化された方向値とレイに関連付けられたシェーダレコードキーとの組み合わせに基づいて、複数のレイを複数のレイキューにグループ化するオペレーションを含む、実施例20に記載の機械可読媒体。
【0306】
[実施例23]
機械可読媒体はさらに、量子化されたレイ方向値及びシェーダレコードキーの両方を用いて、レイをレイキューに一致させるようにまず試みるオペレーションと、一致が見つからない場合にのみ、シェーダレコードキーだけを用いて、レイをレイキューと一致させるように試みるオペレーションとを機械に行わせるプログラムコードを含む、実施例22に記載の機械可読媒体。
【0307】
[実施例24]
機械可読媒体はさらに、量子化されたレイ方向値及びシェーダレコードキーの両方を用いて一致が見つからない場合、レイを含む新たなレイキューを割り当てるように試みるオペレーションを含む、実施例23に記載の機械可読媒体。
【0308】
[実施例25]
シェーダレコードキーのみを用いて、レイをレイキューに一致させるように試みるオペレーションは、新たなレイキューの割り当てができないと判定した後にだけ行われる、実施例24に記載の機械可読媒体。
【0309】
[実施例26]
機械可読媒体はさらに、複数のレイが格納されている複数のレイキューによって定められる複数のグループに複数のレイをディスパッチするオペレーションを機械に行わせるプログラムコードを含む、実施例19に記載の機械可読媒体。
【0310】
[実施例27]
機械可読媒体はさらに、複数のレイのうちの1つ又は複数をバウンディングボリューム階層の中を通ってトラバースするオペレーションと、複数のレイのうちの1つ又は複数とシーン内の1つ又は複数のオブジェクトとの間の交差を判定するオペレーションとを機械に行わせるプログラムコードを含む、実施例19に記載の機械可読媒体。
【0311】
本発明の実施形態が、上述された様々な段階を含んでよい。これらの段階は、汎用プロセッサ又は専用プロセッサにこれらの段階を実行させるのに用いられ得る機械実行可能命令で具現化されてよい。あるいは、これらの段階は、これらの段階を行うためのハードワイヤードロジックを含む特定のハードウェアコンポーネントによって、又はプログラム済みコンピュータコンポーネントとカスタムハードウェアコンポーネントとの任意の組み合わせによって実行されてよい。
【0312】
本明細書で説明されたように、命令は、特定のオペレーションを行うように構成された、若しくは予め定められた機能を有する特定用途向け集積回路(ASIC)などのハードウェアの特定の構成、又は非一時的コンピュータ可読媒体に具現化されるメモリに格納されたソフトウェア命令のことを指してよい。したがって、図に示す技術は、1つ又は複数の電子デバイス(例えば、エンドステーション、ネットワークエレメントなど)に格納され、そこで実行されるコード及びデータを用いて実装され得る。そのような電子デバイスは、コンピュータ機械可読媒体を用いてコード及びデータを格納し、(内部で、及び/又はネットワークを介して他の電子デバイスと)通信する。コンピュータ機械可読媒体には、非一時的コンピュータ機械可読記憶媒体(例えば、磁気ディスク、光ディスク、ランダムアクセスメモリ、リードオンリメモリ、フラッシュメモリデバイス、相変化メモリ)、一時的コンピュータ機械可読通信媒体(例えば、電気信号、光信号、音響信号、又は他の形態の伝搬信号、例えば、搬送波、赤外線信号、デジタル信号など)などがある。
【0313】
さらに、そのような電子デバイスは通常、1つ又は複数の記憶デバイス(非一時的な機械可読記憶媒体)、ユーザ入力/出力デバイス(例えば、キーボード、タッチスクリーン、及び/又はディスプレイ)、及びネットワーク接続などの1つ又は複数の他のコンポーネントに連結される1つ又は複数のプロセッサのセットを含む。これらのプロセッサのセットと他のコンポーネントとの連結は通常、1つ又は複数のバス及びブリッジ(バスコントローラとも呼ばれる)を介している。記憶デバイスとネットワークトラフィックを搬送する信号とはそれぞれ、1つ又は複数の機械可読記憶媒体と機械可読通信媒体とを表す。したがって、所与の電子デバイスの記憶デバイスは通常、当該電子デバイスの1つ又は複数のプロセッサのセットで実行するためのコード及び/又はデータを格納する。もちろん、本発明の一実施形態の1つ又は複数の部分が、ソフトウェア、ファームウェア、及び/又はハードウェアの異なる組み合わせを用いて実装されてもよい。この詳細な説明の全体を通して、説明のために、数多くの具体的な詳細が、本発明の十分な理解を提供するために記載された。しかしながら、これらの具体的な詳細の一部がなくても本発明は実施され得ることが、当業者には明らかであろう。特定の例においては、本発明の主題を曖昧にしないように、よく知られた構造及び機能が十分詳細に説明されなかった。したがって、本発明の範囲及び趣旨は、続く特許請求の範囲によって判断されるべきである。
[他の可能な請求項]
[項目1]
レイトレーシンググラフィックスパイプラインにおいて複数のレイを生成するレイ生成器と、
複数のプリミティブの各プリミティブを複数のサブプリミティブに細分化するサブプリミティブ生成器と、
上記複数のサブプリミティブのうちの第1のサブセットを全体に透明なものとして識別し、上記複数のサブプリミティブのうちの第2のサブセットを全体に不透明なものとして識別するサブプリミティブエンコーダと
を備え、
上記複数のプリミティブのうち、全体に透明なものとして識別された上記第1のサブセットは、各プリミティブのそれぞれについてのさらなる処理の前にカリングされている、装置。
[項目2]
上記プリミティブは、アルファテストされたプリミティブを有する、項目1に記載の装置。
[項目3]
上記サブプリミティブエンコーダは、上記サブプリミティブに関連付けられるアルファ値に基づいて、各サブプリミティブが全体に透明であるか、又は、全体に不透明であるかを決定する、項目2に記載の装置。
[項目4]
上記複数のプリミティブのうちの第1のプリミティブを含むバウンディングボリューム階層(BVH)を通じて第1のレイをトラバースして、上記BVH内のノードに到達するレイトラバーサル回路及び/又はロジックをさらに備える、項目1に記載の装置。
[項目5]
上記サブプリミティブエンコーダは、上記サブプリミティブが全体に透明である場合、各サブプリミティブに関連付けられるビットマスク内の第1のビットを設定し、上記サブプリミティブが全体に不透明である場合、上記ビットマスク内の第2のビットを設定する、項目1に記載の装置。
[項目6]
上記第1のサブプリミティブに関連付けられる第1のビットマスク内の上記第1のビット及び/又は上記第2のビットの上記値に基づいて、第1のレイ及び第1のサブプリミティブに対するインターセクション結果を生成するか否かを決定するレイインターセクション回路/ロジックをさらに備える、項目4に記載の装置。
[項目7]
上記第1のビットが設定されている場合、上記レイインターセクション回路/ロジックは、インターセクション結果を生成しない、項目6に記載の装置。
[項目8]
上記第1のビットが設定されておらず、上記第2のビットが設定されている場合、上記レイインターセクション回路/ロジックは、第1のインターセクション結果を生成する、項目7に記載の装置。
[項目9]
上記第1のビットが設定されておらず、上記第2のビットが設定されていない場合、上記レイインターセクション回路/ロジックは、第2のインターセクション結果を生成する、項目8に記載の装置。
[項目10]
上記インターセクション回路/ロジックは、第1のレイインターセクション演算のシーケンスを実行して、上記第1のインターセクション結果を生成し、第2のレイインターセクション演算のシーケンスを実行して、上記第2のインターセクション結果を生成する、項目9に記載の装置。
[項目11]
レイトレーシンググラフィックスパイプラインにおいて複数のレイを生成する段階と、
複数のプリミティブの各プリミティブを複数のサブプリミティブに細分割する段階と、
上記複数のサブプリミティブのうちの第1のサブセットを全体に透明なものとして識別する段階と、
上記複数のサブプリミティブのうちの第2のサブセットを全体に不透明なものとして識別する段階と
を備え、
上記複数のプリミティブのうち、全体に透明なものとして識別された上記第1のサブセットは、各プリミティブのそれぞれについてのさらなる処理の前にカリングされている、方法。
[項目12]
上記複数のプリミティブは、アルファテストされたプリミティブを有する、項目11に記載の方法。
[項目13]
サブプリミティブは、上記サブプリミティブに関連付けられるアルファ値に基づいて、全体に透明であるか、又は、全体に不透明であるかが決定される、項目12に記載の方法。
[項目14]
バウンディングボリューム階層(BVH)を通じて第1のレイをトラバースして、上記複数のプリミティブのうちの第1のプリミティブを含む上記BVH内のノードに到達する段階をさらに備える、項目11に記載の方法。
[項目15]
上記サブプリミティブが全体に透明である場合、各サブプリミティブに関連付けられるビットマスクの第1のビットが設定され、上記サブプリミティブが全体に不透明である場合、上記ビットマスクの第2のビットが設定される、項目11に記載の方法。
[項目16]
上記第1のサブプリミティブに関連付けられる第1のビットマスク内の上記第1のビット及び/又は上記第2のビットの上記値に基づいて、第1のレイ及び第1のサブプリミティブに対するインターセクション結果を生成するか否かを決定する段階をさらに備える、項目14に記載の方法。
[項目17]
上記第1のビットが設定されている場合、上記レイインターセクション回路/ロジックは、インターセクション結果を生成しない、項目16に記載の方法。
[項目18]
第1のビットが設定されておらず、第2のビットが設定されている場合、上記レイインターセクション回路/ロジックは、第1のインターセクション結果を生成する、項目17に記載の方法。
[項目19]
上記第1のビットが設定されておらず、上記第2のビットが設定されていない場合、上記レイインターセクション回路/ロジックは、第2のインターセクション結果を生成する、項目18に記載の方法。
[項目20]
上記インターセクション回路/ロジックは、第1のレイインターセクション演算のシーケンスを実行して、上記第1のインターセクション結果を生成し、第2のレイインターセクション演算のシーケンスを実行して、上記第2のインターセクション結果を生成する、項目19に記載の方法。
[項目21]
レイトレーシンググラフィックスパイプラインにおいて複数のレイを生成する手順と、
複数のプリミティブの各プリミティブを複数のサブプリミティブに細分割する手順と、
上記複数のサブプリミティブの第1のサブセットを全体に透明なものとして識別する手順と、
上記複数のサブプリミティブの第2のサブセットを全体に不透明なものとして識別する手順と
を備え、
上記複数のプリミティブのうち、全体に透明なものとして識別された上記第1のサブセットは、各プリミティブのそれぞれについてのさらなる処理の前にカリングされている、機械可読媒体。
[項目22]
上記複数のプリミティブは、アルファテストされたプリミティブを有する、項目21に記載の機械可読媒体。
[項目23]
サブプリミティブは、上記サブプリミティブに関連付けられるアルファ値に基づいて、全体に透明であるか、又は、全体に不透明であるかが決定される、項目22に記載の機械可読媒体。
[項目24]
上記機械に、
バウンディングボリューム階層(BVH)を通じて第1のレイをトラバースして、上記複数のプリミティブのうちの第1のプリミティブを含む上記BVH内のノード到達する手順を実行させるプログラムコードをさらに備える、項目21に記載の機械可読媒体。
[項目25]
上記サブプリミティブが全体に透明である場合、各サブプリミティブに関連付けられるビットマスクの第1のビットが設定され、上記サブプリミティブが全体に不透明である場合、上記ビットマスクの第2のビットが設定される、項目21に記載の機械可読媒体。
[項目26]
上記機械に、
上記第1のサブプリミティブに関連付けられる第1のビットマスク内の上記第1のビット及び/又は上記第2のビットの上記値に基づいて、第1のレイ及び第1のサブプリミティブに対するインターセクション結果を生成するか否かを決定する手順を実行させるプログラムコードをさらに備える、項目24に記載の機械可読媒体。
[項目27]
上記第1のビットが設定されている場合、上記レイインターセクション回路/ロジックは、インターセクション結果を生成しない、項目26に記載の機械可読媒体。
[項目28]
上記第1のビットが設定されておらず、上記第2のビットが設定されている場合、上記レイインターセクション回路/ロジックは、第1のインターセクション結果を生成する、項目27に記載の機械可読媒体。
[項目29]
上記第1のビットが設定されておらず、上記第2のビットが設定されていない場合、上記レイインターセクション回路/ロジックは、第2のインターセクション結果を生成する、項目28に記載の機械可読媒体。
[項目30]
上記インターセクション回路/ロジックは、第1のレイインターセクション演算のシーケンスを実行して、上記第1のインターセクション結果を生成し、第2のレイインターセクション演算のシーケンスを実行して、上記第2のインターセクション結果を生成する、項目29に記載の機械可読媒体。
図1
図2A
図2B
図2C
図2D
図3A
図3B
図3C
図4
図5A
図5B
図6
図7
図8
図9A
図9B
図10
図11A
図11B
図11C
図11D
図12
図13
図14
図15
図16
図17
図18
図19
図20
図21
図22
図23
図24
図25
図26
図27