JP2021149942A - 変位メッシュ圧縮のための装置及び方法 - Google Patents

変位メッシュ圧縮のための装置及び方法 Download PDF

Info

Publication number
JP2021149942A
JP2021149942A JP2020212137A JP2020212137A JP2021149942A JP 2021149942 A JP2021149942 A JP 2021149942A JP 2020212137 A JP2020212137 A JP 2020212137A JP 2020212137 A JP2020212137 A JP 2020212137A JP 2021149942 A JP2021149942 A JP 2021149942A
Authority
JP
Japan
Prior art keywords
mesh
displacement
graphics
data
logic
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
JP2020212137A
Other languages
English (en)
Inventor
ウープ スヴェン
Woop Sven
ウープ スヴェン
ヴァイドヤナタン カルティク
Vaidyanathan Karthik
ヴァイドヤナタン カルティク
ベンティン カルステン
Benthin Carsten
ベンティン カルステン
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Intel Corp
Original Assignee
Intel Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Intel Corp filed Critical Intel Corp
Publication of JP2021149942A publication Critical patent/JP2021149942A/ja
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T9/00Image coding
    • G06T9/001Model-based coding, e.g. wire frame
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T9/00Image coding
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T17/00Three dimensional [3D] modelling, e.g. data description of 3D objects
    • G06T17/20Finite element generation, e.g. wire-frame surface description, tesselation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5005Allocation of resources, e.g. of the central processing unit [CPU] to service a request
    • G06F9/5027Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T1/00General purpose image data processing
    • G06T1/20Processor architectures; Processor configuration, e.g. pipelining
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T15/003D [Three Dimensional] image rendering
    • G06T15/005General purpose rendering architectures
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T15/003D [Three Dimensional] image rendering
    • G06T15/06Ray-tracing
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T15/003D [Three Dimensional] image rendering
    • G06T15/08Volume rendering
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T17/00Three dimensional [3D] modelling, e.g. data description of 3D objects
    • G06T17/10Constructive solid geometry [CSG] using solid primitives, e.g. cylinders, cubes
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T17/00Three dimensional [3D] modelling, e.g. data description of 3D objects
    • G06T17/20Finite element generation, e.g. wire-frame surface description, tesselation
    • G06T17/205Re-meshing
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T3/00Geometric image transformations in the plane of the image
    • G06T3/40Scaling of whole images or parts thereof, e.g. expanding or contracting
    • G06T3/4007Scaling of whole images or parts thereof, e.g. expanding or contracting based on interpolation, e.g. bilinear interpolation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T2200/00Indexing scheme for image data processing or generation, in general
    • G06T2200/28Indexing scheme for image data processing or generation, in general involving image processing hardware

Landscapes

  • Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • Theoretical Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Graphics (AREA)
  • Software Systems (AREA)
  • Geometry (AREA)
  • Multimedia (AREA)
  • General Engineering & Computer Science (AREA)
  • Image Generation (AREA)
  • Compression, Expansion, Code Conversion, And Decoders (AREA)

Abstract

【課題】非可逆変位メッシュ圧縮のための装置及び方法を提供する。【解決手段】例えば、装置の一実施形態は、ベース細分メッシュの複数の頂点の変位マッピングを実行することにより、元の変位マッピングされたメッシュを生成する変位マッピング回路/ロジックと、元の変位マッピングされたメッシュを圧縮するメッシュ圧縮回路/ロジックとを含み、メッシュ圧縮回路/ロジックは、変位アレイを生成するためにベースメッシュに関して複数の頂点の変位マッピングを量子化する量子化器を含む。【選択図】図65

Description

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

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

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

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

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

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

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

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

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

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

if (src[i]<tmp&&execMask[i])
{
tmp=src[i];
dst_index=i;
}
}
この例では、デスティネーションインデックスは、デスティネーションレジスタにまたがり、0からSIMD幅にインクリメントされる。実行マスクビットが設定されている場合、ソースレジスタの位置iにおけるデータエレメントは一時記憶位置(tmp)にコピーされ、デスティネーションインデックスはデータエレメント位置iに設定される。
(クロスレーンソーティングネットワーク命令)
クロスレーンソーティングネットワーク命令は、昇順(sortnet_min)又は降順(sortnet_max)のいずれかで、Nワイドの(安定)ソーティングネットワークを使用して、全てのN個の入力エレメントをソートしてもよい。命令のmin/maxバージョンは、それぞれsortnet_min dest src0及びsortnet_max dest src0の形式となってもよい。1つの実装では、src0及びdestはN個のダブルワードを記憶する。min/maxソートはsrc0のN個のダブルワードに対して実行され、昇順のエレメント(minの場合)又は降順のエレメント(maxの場合)がそれぞれの並べ替え順序でdestに記憶される。命令を定義するコード系列の一例は、dst=apply_N_wide_sorting_network_min/max(src0)である。
(クロスレーンソーティングネットワークインデックス命令)
クロスレーンソーティングネットワークインデックス命令は、Nワイドの(安定)ソーティングネットワークを使用して全てのN個の入力エレメントをソートしてもよいが、昇順(sortnet_min)又は降順(sortnet_max)のいずれかで置換インデックスを返す。命令のmin/maxバージョンは、sortnet_min_index dest src0及びsortnet_max_index dest src0の形式となってもよく、src0及びdestはN個のダブルワードをそれぞれ記憶する。命令を定義するコード系列一例は、dst=apply_N_wide_sorting_network_min/max_index(src0)である。
上記の命令のいずれかを実行するための方法は図50に示されている。当該方法は、上記の特定のプロセッサアーキテクチャに実装されてもよいが、いずれかの特定のプロセッサ又はシステムアーキテクチャに限定されない。
5001において、一次グラフィックススレッドの命令は、プロセッサコア上で実行される。これは、例えば、上記のコア(例えば、グラフィックスコア3130)のいずれかを含んでもよい。5002において決定された、一次グラフィックススレッド内でレイトレーシング作業に到達すると、レイトレーシング命令はレイトレーシング実行回路にオフロードされ、レイトレーシング実行回路は、図49に関して上記したような機能ユニット(functional unit, FU)の形式でもよく、或いは、図31に関して説明したような専用レイトレーシングコア3150でもよい。
5003において、レイトレーシング命令が復号され、メモリからフェッチされ、5005において、命令は、(例えば、復号器を必要とする実施形態では)実行可能演算に復号される。5004において、レイトレーシング命令がスケジューリングされ、レイトレーシング回路による実行のためにディスパッチされる。5005において、レイトレーシング命令は、レイトレーシング回路により実行される。例えば、命令は、上記のFU(例えば、ベクトルFU4910、レイトレーシングFU4912等)及び/又はグラフィックスコア3130又はレイトレーシングコア3150上にディスパッチされて実行されてもよい。
レイトレーシング命令の実行が完了すると、5006において、結果が記憶され(例えば、メモリ3198に記憶され)、5007において、一次グラフィックススレッドが通知される。5008において、レイトレーシング結果は、一次スレッドのコンテキスト内で処理される(例えば、メモリから読み取られ、グラフィックスレンダリング結果に統合される)。
実施形態において、「エンジン」又は「モジュール」又は「ロジック」という用語は、1つ以上のソフトウェア又はファームウェアプログラム、組み合わせ論理回路及び/又は上記の機能性を提供する他の適切なコンポーネントを実行する、特定用途向け集積回路(application specific integrated circuit, ASIC)、電子回路、プロセッサ(共有、専用又はグループ)及び/又はメモリ(共有、専用又はグループ)を示してもよく、これらの一部でもよく、或いは、これらを含んでもよい。実施形態では、エンジン、モジュール又はロジックは、ファームウェア、ハードウェア、ソフトウェア、又はファームウェアとハードウェアとソフトウェアとのいずれかの組み合わせで実装されてもよい。
[バウンディングボリューム及び光線-ボックス交差テスト]
図51は、実施形態によるバウンディングボリューム5102の図である。図示のバウンディングボリューム5102は、三次元軸5100に整列された軸である。しかし、実施形態は、異なるバウンディング表現(例えば、有向バウンディングボックス(oriented bounding box)、離散有向ポリトープ(discrete oriented polytope)、球等)及び任意の数の寸法に適用可能である。バウンディングボリューム5102は、軸5100の各寸法に沿った三次元オブジェクト5104の最小及び最大の範囲を規定する。シーンのBVHを生成するために、シーン内のオブジェクトのセット内の各オブジェクトについてバウンディングボックスが構築される。次いで、親バウンディングボックスのセットが、各オブジェクトについて構築されたバウンディングボックスのグループの周りに構築できる。
図52A〜図52Bは、二次元オブジェクトについてのバウンディングボリューム階層の表現を示す。図52Aは、ジオメトリックオブジェクトのセットのまわりのバウンディングボリュームのセット5200を示す。図52Bは、図52Aのバウンディングボリューム5200の順序ツリー5202を示す。
図52Aに示すように、バウンディングボリュームのセット5200は、ルートバウンディングボリュームN1を含み、これは、全ての他のバウンディングボリュームN2〜N7の親バウンディングボリュームである。バウンディングボリュームN2及びN3は、ルートボリュームN1とリーフボリュームN4〜N7との間の内部バウンディングボリュームである。リーフボリュームN4〜N7は、シーンのジオメトリックオブジェクトO1〜O8を含む。
図52Bは、バウンディングボリュームN1〜N7及びジオメトリックオブジェクトO1〜O8の順序ツリー5202を示す。図示の順序ツリー5202は、ツリーの各ノードが2つの子ノードを有するバイナリツリーである。各ノードのための情報を含むように構成されたデータ構造は、ノードのバウンディングボリューム(例えば、バウンディングボックス)のためのバウンディング情報と、少なくともノードのそれぞれの子のノードへの参照とを含むことができる。
バウンディングボリュームの順序ツリー5202表現は、衝突検出及び光線-ボックス交差を含むが、これらに限定されない、階層バージョンの様々な動作を実行するために使用できる階層を定義する。光線-ボックス交差の例では、ノードは、階層内の全ての他のバウンディングボリュームノードへの親ノードであるルートノードN1から始まり、階層式でテストできる。ルートノードN1についての光線-ボックス交差テストが失敗した場合、ツリーの全ての他のノードはバイパスされてもよい。ルートノードN1についての光線-ボックス交差テストに合格した場合、少なくとも交差するリーフノードのセットN4〜N7が決定されるまで、ツリーのサブツリーがテストでき、順序付きでトラバース又はバイパスできる。使用される正確なテスト及びトラバーサルアルゴリズムは、実施形態に従って変化できる。
図53は、実施形態による光線-ボックス交差テストの図である。光線-ボックス交差テストの間に、光線5302が放たれ、光線を定義する式が、光線がテスト中のバウンディングボックス5300を定義する面と交差するか否かを決定するために使用できる。光線5302は、O+D・tとして表現でき、Oは光線の視点に対応し、Dは光線の方向であり、tは実数値である。tの変更は、光線に沿ったいずれかの点を定義するために使用できる。光線5302は、最大入射面交差距離が最小出射面距離以下であるときにバウンディングボックス5300と交差すると言われる。図53の光線5302について、y面入射交差距離はtmin-y5304として示される。y面出射交差距離はtmax-y5308として示される。x面入射交差距離はtmin-x5306で計算でき、x面出射交差距離はt tmax-x5310として示される。したがって、所与の光線5302は、tmin-x5306がtmax-y5308未満であるので、少なくともx面及びy面に沿って、バウンディングボックスと交差することが数値演算的に示されることができる。グラフィックスプロセッサを使用して光線-ボックス交差テストを実行するために、グラフィックスプロセッサは、少なくともテストされるべき各バウンディングボックスを定義するアクセラレーションデータ構造を記憶するように構成される。バウンディングボリューム階層を使用したアクセラレーションのために、少なくともバウンディングボックスへの子ノードへの参照が記憶される。
[バウンディングボリュームノード圧縮]
3D空間における軸整列バウンディングボックス(axis-aligned bounding box)について、アクセラレーションデータ構造は、三次元におけるバウンディングボックスの下限及び上限を記憶できる。ソフトウェアの実装は、これらの限界(バウンド)を記憶するために32ビット浮動小数点数を使用でき、これは、バウンディングボックス当たり合計で2×3×4=24バイトになる。NワイドのBVHノードについては、N個のボックスとN個の子参照(child reference)とを記憶しなければならない。合計で、4ワイドのBVHノードのためのストレージは、参照当たり4バイトを仮定すると、子参照についてN*24バイト+N*4バイトであり、これは、合計(24+4)*Nバイトとなり、合計で4ワイドのBVHノードについての112バイト及び8ワイドのBVHノードについての224バイトになる。
一実施形態では、BVHノードのサイズは、全ての子バウンディングボックスを囲む単一のより正確な親バウンディングボックスを記憶し、その親ボックスに対してより低い精度で各子バウンディングボックスを記憶することにより、低減される。使用シナリオに依存して、高精度の親バウンディングボックスと低精度の相対的な子バウンドとを記憶するために、異なる数の表現が使用されてもよい
図54は、実施形態による、例示的な量子化されたBVHノード5410を示すブロック図である。量子化されたBVHノード5410は、BVHノードの親バウンディングボックスを定義するために、より高い精度の値を含むことができる。例えば、parent_lower_x5412、parent_lower_y5414、parent_lower_z5416、parent_upper_x5422、parent_upper_y5424及びparent_upper_z5426は、単精度又は倍精度の浮動小数点値を使用して記憶できる。ノードに記憶された各子バウンディングボックスについての子バウンディングボックスの値は量子化でき、親バウンディングボックスに対して定義されたバウンディングボックス値に対する固定小数点表現のような、より低い精度の値として記憶できる。例えば、child_lower_x5432、child_lower_y5434及びchild_lower_z5436並びにchild_upper_x5442、child_upper_y5444及びchild_upper_z5446は、より低い精度の固定小数点値として記憶できる。さらに、子参照5452は各子について記憶できる。子参照5452は、各子ノードの位置を記憶するテーブルへのインデックスとすることができ、或いは、子ノードへのポインタとすることができる。
図54に示すように、単精度又は倍精度の浮動小数点値が親バウンディングボックスを記憶するために使用されてもよく、Mビットの固定小数点値が相対的な子バウンディングボックスを符号化するために使用されてもよい。図54の量子化されたBVHノード5410のためのデータ構造は、以下の表1に示す量子化されたNワイドのBVHノードにより定義できる。
Figure 2021149942
表1の量子化されたノードは、親バウンディングボックスの範囲のより高い精度の値を記憶することにより、ベースラインの精度レベルを維持しつつ子の値を量子化することにより、低減したデータ構造サイズを実現する。表1において、Realはより高い精度の数値表現(例えば、32ビット又は64ビットの浮動小数点値)を示し、UintMは固定小数点数を表すために使用される精度のMビットを使用してより低い精度の符号なし整数を示す。Referenceは、子ノードへの参照を表すために使用されるタイプを示す(例えば、8バイトのポインタの4バイトのインデックス)。
この手法の典型的なインスタンス化は、32ビットの子参照と、親バウンディングについての単精度の浮動小数点値と、相対的な子バウンドについてのM=8ビット(1バイト)とを使用できる。この圧縮ノードは6*4+6*N+4*Nバイトを必要とする。4ワイドのBVHでは、これは(非圧縮バージョンでは112バイトに対して)合計64バイトになり、8バイトのBVHでは、これは(非圧縮バージョンでは224バイトに対して)合計104バイトになる。
このような圧縮されたBVHノードをトラバースするために、グラフィックス処理ロジックは、相対的な子バウンディングボックスを伸張し、次いで、標準的な手法を使用して伸張されたノードと交差できる。次いで、圧縮されていない下限が各次元x、y及びzについて取得できる。以下の式1は、子のlower_x値を取得すための式を示す。
Figure 2021149942
上記の式1において、Mは子バウンドの固定小数点表現のための精度のビット数を表す。BVHノードの各次元について子データを伸張するロジックは、以下の表2のように実装できる。
Figure 2021149942
表2は、親バウンディングの範囲についての浮動小数点値と、親バウンディングボックスの範囲からのオフセットとして記憶される子バウンディングボックスの固定小数点値とに基づいて、子バウンディングボックスの下限のための浮動小数点値の計算を示す。子の上限は、同様の方法で計算されてもよい。
一実施形態では、伸張の性能は、parent_upper_x/y/z値の代わりに、スケーリングされた親バウンディングボックスのサイズ、例えば(parent_upper_x-parent_lower_x)/(2M-1)を記憶することにより改善できる。このような実施形態では、子バウンディングボックスの範囲は、表3に示す例示的なロジックに従って計算できる。
Figure 2021149942
最適化されたバージョンでは、伸張/逆量子化は、このような命令のためのハードウェアサポートが存在する場合、MAD命令(multiply-and-add)として定式化できる点に留意すべきである。一実施形態では、各子ノードについての演算は、SIMD/ベクトルロジックを使用して実行でき、ノード内の各子の同時評価を可能にする。
上記の手法は、シェーダ又はCPUベースの実装ではうまく機能するが、一実施形態は、バウンディングボリューム階層を使用して光線-ボックス交差テストを含むレイトレーシング演算を実行するように構成された特殊なハードウェアを提供する。このような実施形態では、特殊なハードウェアは、BVHノードデータの更なる量子化された表現を記憶し、光線-ボックス交差テストを実行するときにこのようなデータを自動的に逆量子化するように構成できる。
図55は、更なる実施形態に従って、量子化されたBVHノード5510により使用されるための複合浮動小数点データブロック5500のブロック図である。一実施形態では、親バウンディングボックスの範囲の32ビットの単精度浮動小数点表現又は64ビットの倍精度浮動小数点表現とは対照的に、複合浮動小数点データブロック5500をサポートするためのロジックが、グラフィックスプロセッサ内の特殊なロジックにより定義できる。複合浮動小数点(composite floating point, CFP)データブロック5500は、1ビットの符号付きビット5502と、可変サイズ(Eビット)の符号付き整数指数5504と、可変サイズ(Kビット)の仮数5506とを含むことができる。E及びKについての複数の値は、グラフィックスプロセッサの構成レジスタに記憶された値を調整することにより構成可能でもよい。一実施形態では、E及びKの値は、値の範囲内で独立して構成されてもよい。一実施形態では、E及びKについての相互に関連する値の固定セットは、構成レジスタを介して選択されてもよい。一実施形態では、E及びKのそれぞれについての単一の値は、グラフィックスプロセッサのBVHロジックにハードコードされる。値E及びKは、CFPデータブロック5500が、データセットに調整できるカスタマイズされた(例えば、特殊目的の)浮動小数点データタイプとして使用されることを可能にする。
CFPデータブロック5500を使用して、グラフィックスプロセッサは、量子化されたBVHノード5510内のバウンディングボックスデータを記憶するように構成できる。一実施形態では、親バウンディングボックスの下限(parent_lower_x5512、parent_lower_y5514、parent_lower_z5516)は、CFPデータブロック5500について選択されたE値及びK値により決定される精度レベルで記憶される。親バウンディングボックスの下限についての記憶値の精度のレベルは、一般的に、固定小数点値として記憶される子バウンディングボックスの値(child_lower_x5524、child_upper_x5526、child_lower_y5534、child_upper_y5536、child_lower_z5544及びchild_upper_z5546)よりも高い精度に設定される。スケーリングされた親バウンディングボックスサイズは2の指数のべき乗(例えば、exp_x5522、exp_y5532、exp_z5542)として記憶される。さらに、各子についての参照(例えば、子参照5552)が記憶できる。量子化されたBVHノード5510のサイズは、各ノードにおいて記憶された幅(例えば、子の数)に基づいてスケーリングでき、子参照を記憶するために使用される記憶量及び子ノードについてのバウンディングボックス値は、それぞれの更なるノードと共に増加する。
図55の量子化されたBVHノードの実装のためのロジックは、以下の表4に示される。
Figure 2021149942
表4に示すように、親バウンディングボックスの値を表すために、複合浮動小数点データブロック(例えば、struct Float)が定義できる。Float構造は、1ビットの符号(int1 sign)と、2の指数のべき乗を記憶するためのEビットの符号付き整数(intE exp)と、高精度のバウンドを記憶するために使用される仮数を表すためのKビットの符号なし整数(uintK mantissa)とを含む。子バウンディングボックスデータについて、Mビットの符号なし整数(uintM child_lower_x/y/z、uintM child_upper_x/y/z)が、想定的な子バウンドを符号化するための固定小数点数を記憶するために使用できる。
E=8、K=16、M=8の例では、子参照に32ビットを使用すると、表4のQuantizedNodeHW構造は、4ワイドのBVHについて52バイトのサイズを有し、8ワイドのBVHについて92バイトのサイズを有する。これは、表1の量子化されたノードに対して構造サイズが低減し、既存の実装に対して構造サイズがかなり低減する。仮数値(K=16)については、仮数の1ビットが暗示されてもよく、記憶要件を15ビットに低減する点に留意すべきである。
表4のBVHノード構造のレイアウトは、低減したハードウェアが子バウンディングボックスについて光線-ボックス交差テストを実行することを可能にする。ハードウェアの複雑さは、いくつかの要因に基づいて低減される。相対的な子バウンドが更にMビットの精度を追加するため、Kについて少ない数のビットが選択できる。スケーリングされた親のバウンディングボックスサイズは2のべき乗(exp_x/y/zフィールド)として記憶され、これは計算を簡略化する。さらに、計算は乗数のサイズを低減するようにリファクタリング(refactor)される。
一実施形態では、グラフィックスプロセッサのレイ交差ロジックは、光線-ボックステストを実行するために、軸に整列した面への光線のヒット距離を計算する。レイ交差ロジックは、表4の量子化されたノード構造のサポートを含むBVHノードロジックを使用できる。ロジックは、より高い精度の親の下限及び子ボックスの量子化された相対的な範囲を使用して、親バウンディングボックスの下限までの距離を計算できる。x面計算のための例示的なロジックは、以下の表5に示される。
Figure 2021149942
表5のロジックに関して、単精度浮動小数点の精度が光線を表すと仮定した場合、parent_lower_x値は15ビットの仮数で記憶されるので、23ビット×15ビットの乗算器が使用できる。y及びz面上の親バウンディングボックスの下限までの距離は、dist_peartner_lower_xの計算と同様に計算できる。
親の下限を使用して、表5のようにdist_child_lower_x及びdist_child_upper_xの計算により例示されるように、相対的な子のバウンディングボックスまでの交差距離が子バウンディングボックス毎に計算できる。dist_child_lower/upper_x/y/z値の計算は、23ビット×8ビットの乗算器を使用して実行できる。
図56は、実施形態に従って、親バウンディングボックス5600に対する子バウンディングボックス5610を定義するために量子化値を使用する光線-ボックス交差を示す。表5に示すx面についての光線-ボックス交差距離決定式を適用して、光線がx面に沿って親バウンディングボックス5600のバウンドと交差する光線5602に沿った距離が決定できる。光線5602が親バウンディングボックス5600の下方バウンディング面5604と交差する位置dist_parent_lower_x5603が決定できる。dist_parent_lower_x5603に基づいて、光線が子バウンディングボックス5610の最小バウンディング面5606と交差するdist_child_lower_x5605が決定できる。さらに、dist_parent_lower_x5603に基づいて、光線が子バウンディングボックス5610の最大バウンディング面5608と交差する位置について、dist_child_upper_x5607が決定できる。親バウンディングボックス5600及び子バウンディングボックス5610が(例えば、y軸及びz軸に沿って)定義される各寸法について、同様の決定が実行できる。次いで、面交差距離は、光線が子バウンディングボックスと交差するか否かを決定するために使用できる。一実施形態では、グラフィックス処理ロジックは、SIMD及び/又はベクトルロジックを使用して、複数の寸法及び複数のバウンディングボックスについての交差距離を並列に決定できる。さらに、ここに記載の計算の少なくとも第1の部分は、グラフィックスプロセッサ上で実行されてもよく、一方で、計算の第2の部分は、グラフィックスプロセッサに結合される1つ以上のアプリケーションプロセッサ上で実行されてもよい。
図57は、実施形態によるBVH伸張及びトラバーサルロジック5700のフロー図である。一実施形態では、BVH伸張及びトラバーサルロジックは、グラフィックスプロセッサの特殊目的ハードウェアロジック内に存在するか、或いは、グラフィックスプロセッサの実行リソース上で実行されるシェーダロジックにより実行されてもよい。BVH伸張及びトラバーサルロジック5700は、ブロック5702に示すように、光線に沿って親バウンディングボリュームの下方バウンディング面までの距離を計算するための演算をグラフィックスプロセッサに実行させることができる。ブロック5704において、ロジックは、親バウンディングボリュームの下方バウンディング面までの計算された距離に部分的に基づいて、子バウンディングボリュームの下方バウンディング面までの距離を計算できる。ブロック5706において、ロジックは、親バウンディングボリュームの下方バウンディング面までの計算された距離に部分的に基づいて、子バウンディングボリュームの上方バウンディング面までの距離を計算できる。
ブロック5708において、BVH伸張及びトラバーサルロジック5700は、子バウンディングボリュームの上方バウンディング面及び下方バウンディング面までの距離に部分的に基づいて、子バウンディングボリュームについてのレイ交差を決定できるが、バウンディングボックスの各次元についての交差距離は、交差を決定するために使用される。一実施形態では、BVH伸張及びトラバーサルロジック5700は、光線の最大入射面交差距離が最小出射面距離以下であるか否かを決定することにより、子バウンディングボリュームのレイ交差を決定する。言い換えると、定義された面のいずれかに沿ってバウンディングボリュームを出る前に、光線が全ての定義された面に沿ってバウンディングボリュームに入るとき、光線は子バウンディングボリュームと交差する。5710において、BVH伸張及びトラバーサルロジック5700が、光線が子バウンディングボリュームと交差すると決定した場合、ブロック5712に示すように、ロジックは、子ノード内の子バウンディングボリュームをテストするために、バウンディングボリュームについて子ノードをトラバースできる。ブロック5712において、ノードトラバーサルが実行でき、交差したバウンディングボックスに関連するノードへの参照にアクセスできる。子バウンディングボリュームは親バウンディングボリュームになり、交差するバウンディングボリュームの子が評価できる。5710において、BVH伸張及びトラバーサルロジック5700が、光線が子バウンディングボリュームと交差しないと決定した場合、ブロック5714に示すように、子バウンディングボリュームに関連するバウンディング階層の分岐はスキップされる。この理由は、交差しない子バウンディングボリュームに関連するサブツリー分岐の更に下まで、光線がバウンディングボリュームと交差しないからである。
[共有面バウンディングボックスを介した更なる圧縮]
バウンディングボックスを使用したいずれかのNワイドのBVHについて、バウンディングボリューム階層は、3Dバウンディングボックスの6つの側面のそれぞれが少なくとも1つの子バウンディングボックスにより共有されるように構築できる。3D共有面バウンディングボックスでは、6×log2 Nビットが、親バウンディングボックスの所与の面が子バウンディングボックスと共有されるか否かを示すために使用できる。3D共有面のバウンディングボックスについてN=4では、12ビットが共有面を示すために使用され、2ビットのそれぞれが、4つの子のどれがそれぞれ潜在的に共有されている親の面を再利用するかを識別するために使用される。各ビットは、親の面が特定の子に再利用されるか否かを示すために使用できる。2ワイドのBVHの場合、親バウンディングボックスの各面について、バウンディングボックスの面(例えば、側面)が子により共有されるか否かを示すために、6個の更なるビットが追加できる。SPBBの概念は任意の数の次元に適用できるが、一実施形態では、SPBBの利点は、一般的に、2ワイド(例えば、バイナリ)のSPBBにとって最も大きくなる。
共有面バウンディングボックスの使用は、ここに記載のように、BVHノード量子化を使用するときに記憶されるデータの量を更に低減できる。3Dの2ワイドのBVHの例では、6つの共有面のビットは、親のバウンディングボックスについてmin_x、max_x、min_y、max_y、min_z及びmax_zを参照できる。min_xビットがゼロである場合、第1の子は親バウンディングボックスから共有面を継承する。親バウンディングボックスと面を共有する子について、その面の量子化された値が記憶される必要はなく、これは、ノードの記憶コスト及び伸張コストを低減する。さらに、面について高い精度の値が子バウンディングボックスに使用できる。
図58は、例示的な二次元共有面バウンディングボックス5800の図である。二次元(2D)共有面バウンディングボックス(shared plane bounding box, SPBB)5800は、左側の子5802と、右側の子5804とを含む。2DバイナリSPBPPでは、親バウンディングボックスの4つの共有面のうちどれが共有されているかを示すために、4log2 2の更なるビットが使用でき、ビットは各面に関連付けられている。一実施形態では、ゼロは、左側の子5802に関連付けられることができ、1は、右側の子に関連付けられることができ、その結果、SPBB5800についての共有面のビットは、min_x=0、max_x=1、min_y=0、max_y=0であり、左側の子5802は、親SPB5800とlower_x、upper_y及びlower_y面を共有し、右側の子5804は、upper_x面を共有する。
図59は、実施形態による共有面BVHロジック5900のフロー図である。共有面BVHロジック5900は、1つ以上の子のバウンディングボックスの下限及び上限について記憶される量子化値の数を低減し、BVHノードのための伸張/逆量子化コストを低減し、BVHノードの子バウンディングボックスのための光線-ボックス交差テストに使用される値の精度を向上させるために使用できる。一実施形態では、ブロック5902に示すように、共有面BVHロジック5900は、親バウンディングボックスが1つ以上の子バウンディングボックスと1つ以上の面を共有するように、子バウンディングボックスのセットに対して親バウンディングボックスを定義することを含む。親バウンディングボックスは、一実施形態では、シーン内のジオメトリックオブジェクトのための既存の軸整列バウンディングボックスのセットを選択し、各面内のバウンディングボックスのセットの最小及び最大の範囲に基づいて親バウンディングボックスを定義することにより定義できる。例えば、親バウンディングボックスの各面についての上面の値は、子バウンディングボックスのセット内の各平面についての最大値として定義される。ブロック5904において、共有面BVHロジック5900は、親バウンディングボックスの各面について共有された子面を符号化できる。ブロック5906に示すように、共有面BVHロジック5900は、光線-ボックス交差テストの間に共有面を有する子面について親面の値を継承できる。子についての共有面の値はより高い精度で継承でき、親面の値はBVHノード構造に記憶され、共有面についてのより低い精度の量子化値を生成及び記憶することがバイパスできる。
[レイ/パストレーシングアーキテクチャの一実施形態]
図60は、本発明の実施形態が実装され得る例示的なレイ/パストレーシングアーキテクチャを示す。この実施形態では、トラバーサル回路6002は、以下に説明するように、ボックス-ボックス(box-box)テストを(すなわち、BVHのノードを通じて光線をトラバースするときに光線-ボックステストを実施することに加えて)実行するためのボックス/ボックステストロジック6003で構成又はプログラムされてもよい。
図示の実施形態は、シェーダプログラムコードを実行して関連するレイトレーシングデータ4902(例えば、BVHノードデータ及び光線データ)を処理するためのシェーダ実行回路4000と、それぞれトラバーサル及び交差演算を実行するためのトラバーサル回路6002及び交差回路6003を含むレイトレーシングアクセラレーション回路6010と、RTアクセラレーション回路6010及びシェーダ実行回路4000により処理されるプログラムコード及び関連するデータを記憶するためのメモリ3198とを含む。
一実施形態では、シェーダ実行回路4000は、複数のコア/実行ユニット4001を含み、コア/実行ユニット4001は、様々な形式のデータ並列演算を実行するためにシェーダプログラムコードを実行する。例えば、一実施形態では、コア/実行ユニット4001は、複数のレーンにわたって単一の命令を実行でき、命令の各インスタンスは、異なるレーンに記憶されたデータに対して動作する。SIMTの実装では、例えば、命令の各インスタンスは、異なるスレッドに関連付けられる。実行中に、L1キャッシュは、効率的なアクセスのために特定のレイトレーシングデータ(例えば、最近又は頻繁にアクセスされるデータ)を記憶する。
一次光線のセットはスケジューラ4007にディスパッチされてもよく、スケジューラ4007は、コア/EU4001により実行されるシェーダに対する作業をスケジューリングする。コア/EU4001は、レイトレーシングコア3150、グラフィックスコア3130、CPUコア3199又はシェーダプログラムコードを実行可能な他のタイプの回路でもよい。1つ以上の一次光線シェーダ6001は一次光線を処理し、レイトレーシングアクセラレーション回路6010及び/又はコア/EU4001により実行される(例えば、1つ以上の子シェーダにより実行される)更なる作業を生成する。一次光線シェーダ6001又はコア/EU4001により実行される他のシェーダにより生成された新たな作業は、ここに記載のように光線をグループ又はビンにソートする(例えば、同様の特性を有する光線をグループ化する)ソート回路4008に分配されてもよい。次いで、スケジューラ4007は、コア/EU4001に対して新たな作業をスケジューリングする。
実行され得る他のシェーダは、上記のようにヒット結果を処理するエニーヒットシェーダ4514及びクローゼストヒットシェーダ4507(例えば、所与の光線についてのいずれかのヒット又は最も近いヒットをそれぞれ識別する)を含む。ミスシェーダ4506は、光線ミス(例えば、光線がノード/プリミティブと交差しない場合)を処理する。上記のように、様々なシェーダは、1つ以上のポインタと、ベンダ固有のメタデータと、グローバル引数とを含んでもよいシェーダレコードを使用して参照できる。一実施形態では、シェーダレコードはシェーダレコード識別子(shader record identifier, SRI)により識別される。一実施形態では、シェーダの各実行インスタンスは、親シェーダと子シェーダとの間で渡される引数を記憶するコールスタック5203に関連付けられる。コールスタック6021はまた、コールが戻るときに実行される継続関数への参照を記憶してもよい。
光線を処理するとき、トラバーサル回路6002は、光線によりトラバースされるノード/プリミティブを識別するために、BVHの階層の下に向かって(例えば、親ノード、子ノード及びリーフノードを通じて)、BVHのノードを通じて各光線をトラバースする。クエリボックス(query box)を処理するとき、トラバーサル回路6002は(ボックス-ボックステストロジック6003に従って)、BVHノードを通じて各クエリボックスをトラバースし、重複を決定するためにクエリボックスの座標をBVHノードの座標と比較する。
交差回路6003は、光線/ボックスの交差テストを実行し、プリミティブ上のヒットポイントを決定し、ヒットに応じて結果を生成する。トラバーサル回路6002及び交差回路6003は、1つ以上のコールスタック6021から作業を取得してもよい。レイトレーシングアクセラレーション回路6010内では、コールスタック6021並びに関連する光線及びボックスデータ4902は、トラバーサル回路6002及び交差回路6003による効率的なアクセスのために、ローカルレイトレーシングキャッシュ(local ray tracing cache, RTC)6007又は他のローカル記憶デバイス内に記憶されてもよい。
レイトレーシングアクセラレーション回路6010は、光線-BVHトラバーサル/交差回路4005と、トラバーサル回路4502及び交差回路4503と、レイトレーシングコア3150とを含む、ここに記載の様々なトラバーサル/交差回路の変形でもよい。レイトレーシングアクセラレーション回路6010は、光線-BVHトラバーサル/交差回路4005、トラバーサル回路4502及び交差回路4503並びにレイトレーシングコア3150、又はBVHスタックを処理するため及び/又はトラバーサル/交差を実行するためのいずれかの他の回路/ロジックの代わりに使用されてもよい。したがって、ここに記載の光線-BVHトラバーサル/交差回路4005、トラバーサル回路4502及び交差回路4503並びにレイトレーシングコア3150と組み合わせたいずれかの特徴の開示も、レイトレーシングアクセラレーション回路6010との対応する組み合わせを開示するが、このようなものに限定されない。
図61を参照すると、トラバーサル回路6002の一実施形態は、第1及び第2の記憶バンク(それぞれ6101及び6102)を含み、各バンクは、メモリからロードされた対応する複数の入射光線又はボックス6106を記憶するための複数のエントリを含む。対応する第1及び第2のスタック(それぞれ6103及び6104)は、メモリから読み取られて処理のためにローカルに記憶された、選択されたBVHノードデータ6190〜6191を含む。ここに記載のように、一実施形態では、スタック6103〜6104は、BVHノードデータを記憶するための限られた数のエントリを含む「短い」スタックである。光線バンク6101〜6102とは別に図示されるが、スタック6103〜6104はまた、対応する光線バンク6101〜6102内に維持されてもよい。代替として、スタック6103〜6104は、別個のローカルメモリ又はキャッシュに記憶されてもよい。
トラバーサル処理回路6110の一実施形態は、処理すべき次の光線又はボックス及びノードを(例えば、ピンポン方式で)選択するときに、2つのバンク6101〜6102とスタック6103〜6104との間を交互にする。例えば、トラバーサル処理回路6110は、各クロックサイクルにおいて交互のバンク及びスタックから新たな光線/ボックス及びBVHノードを選択してもよく、それにより、高効率の動作を確保する。しかし、この特定の構成は、本発明の基礎の原理に従うのに必要ではない点に留意すべきである。上記のように、トラバーサル処理回路6110の一実施形態は、ここに記載のように、BVHを通じてクエリボックスをトラバースするためのボックス-ボックステストロジック6003を含む。
一実施形態では、割り当て器6105は、バンク割り当てカウンタ6120のセットの現在の相対値に基づいて、第1及び第2のメモリバンク(それぞれ6101〜6102)への入射光線/ボックス6106のエントリを均衡させる。一実施形態では、バンク割り当てカウンタ6120は、第1及び第2のメモリバンク6101〜6102のそれぞれにおけるトラバースされていない光線/ボックスの数のカウントを維持する。例えば、第1のバンク割り当てカウンタは、割り当て器6105が新たな光線又はボックスを第1のバンク6101に追加するときにインクリメントされ、光線又はボックスが第1のバンク6101から処理されるときにデクリメントされてもよい。同様に、第2のバンク割り当てカウンタは、割り当て器6105が、新たな光線又はボックスを第2のバンク6101に追加するときにインクリメントされ、光線又はボックスが第2のバンク6101から処理されるときにデクリメントされてもよい。
一実施形態では、割り当て器6105は、現在の入力光線又はボックスを、より小さいカウンタ値に関連するバンクに割り当てる。2つのカウンタが等しい場合、割り当て器6105は、いずれかのバンクを選択してもよく、或いは、カウンタが等しくなった最後の時点に選択されたもとは異なるバンクを選択してもよい。一実施形態では、各光線/ボックスは、バンク6101〜6102のうち1つの1つのエントリに記憶され、各バンクは、32個までの光線及び/又はボックスを記憶するための32個のエントリを含む。しかし、本発明の基礎の原理は、これらの詳細に限定されない。
様々な状況において、シェーダが一連の操作を実行する必要があるときのように、トラバーサル回路6002は、トラバーサル動作を一時停止し、現在の光線/ボックス及び関連するBVHノードを保存しなければならない。例えば、非不透明なオブジェクトがヒットした場合又は手続き的テクスチャの場合、トラバーサル回路6002は、スタック6103〜6104をメモリに保存し、必要なシェーダを実行する。シェーダがヒット(又は他のデータ)を処理するのを完了すると、トラバーサル回路6002は、メモリからバンク6101〜6102及びスタック6103〜6104の状態を復元する。
一実施形態では、トラバーサル/スタックトラッカ6148は、トラバーサル及びスタック演算を継続的に監視し、トラッキングアレイ6149内に再開データを記憶する。例えば、トラバーサル回路6002がノードN、N0、N1、N2及びN00を既にトラバースして結果を生成している場合、トラバーサル/スタックトラッカ6148は、これらのノードのトラバーサルが完了したことを示すため及び/又はスタックから処理されるべき次のノードを示すために、トラッキングアレイを更新する。トラバーサル回路6002が再開すると、これは、BVHノードのいずれも再トラバースすることなく(サイクルを消耗することなく)、正しい段階でトラバーサルを再開できるように、トラッキングアレイ6149から再開データを読み取る。トラッキングアレイ6149に記憶された再開データは、場合によっては「再開トレイル(restart trail)」又は「RST」と呼ばれる。
[変位メッシュ圧縮のための装置及び方法]
本発明の一実施形態は、可視クエリのためにレイトレーシングを使用してフォトリアリスティックな画像をレンダリングするためにパストレーシングを実行する。この実装では、光線は仮想カメラから放たれ、シミュレーションされたシーンを通じてトレースされる。次いで、ランダムサンプリングが、最終画像をインクリメンタル的に計算するために実行される。パストレーシングにおけるランダムサンプリングは、レンダリングされた画像にノイズを発生させ、これは、より多くのサンプルが生成されることを可能にすることにより除去され得る。この実装におけるサンプルは、単一の光線から生じるカラー値でもよい。
一実施形態では、可視クエリに使用されるレイトレーシング演算は、前処理段階においてシーンプリミティブ(例えば、トライアングル、四半分等)上に生成されたバウンディングボリューム階層(bounding volume hierarchy, BVH)(又は他の3D階層配置)に依存する。BVHを使用して、レンダラは、光線とプリミティブとの間の最も近い交差点を迅速に決定できる。
ハードウェア(例えば、ここに記載のトラバーサル/交差回路4005、4502、6020等)においてこれらの光線クエリをアクセラレーションするとき、フェッチされたトライアングルデータの量のため、メモリ帯域幅の問題が生じる可能性がある。幸いにも、モデル化されたシーンにおける複雑性の多くは、変位マッピング(displacement mapping)により生成される。変位マッピングでは、図62に示すように、細分表面(subdivision surface)のような滑らかなベース表面の表現が、テセレーションされたメッシュ6201を生成するように、細分ルールを使用して微細にテセレーションされる。変位関数6202は、典型的には、ベース表面のジオメトリ法線に沿って変位するか或いは変位メッシュ6203を生成するように任意の方向に変位する微細にテセレーションされたメッシュの各頂点に適用される。表面に適用される変位の量は範囲が限られており、したがって、ベース表面からの非常に大きい変位はまれである。
本発明の一実施形態は、非可逆完全圧縮(lossy watertight compression)を使用して、変位マッピングされたメッシュを効果的に圧縮する。特に、この実装は、粗いベースメッシュに対する変位を量子化し、粗いベースメッシュは、ベース細分メッシュにマッチしてもよい。一実施形態では、ベース細分メッシュの元の四半分は、バイリニア補間を使用して、変位マッピングと同じ精度のグリッドに細分されてもよい。
図63は、ここに記載の実施形態に従って、圧縮された変位メッシュ6310を生成するように変位マッピングされたメッシュ6302を圧縮する圧縮回路/ロジック6300を示す。図示の実施形態では、変位マッピング回路/ロジック6311は、ベース細分表面6401から変位マッピングされたメッシュ6302を生成する。図64Aは、ベース細分表面6401を生成するために、プリミティブ表面6301が微細にテセレーションされる例を示す。変位マッピング6402を生成するために、変位関数がベース細分表面6401の頂点に適用される。
図63に戻り、一実施形態では、量子化器6312は、粗いベースメッシュ6303に対して変位マッピングされたメッシュ6302を量子化し、3D変位アレイ6304と、粗いベースメッシュ6303に関連するベース座標6305とを含む圧縮された変位メッシュ6310を生成する。限定ではなく例として、図64Bは、異なって変位された頂点v1〜v4にそれぞれ関連する差分ベクトルd1〜d4のセット6422を示す。
一実施形態では、粗いベースメッシュ6303は、ベース細分メッシュ6301である。代替として、補間器6311は、バイリニア補間を使用して、ベース細分メッシュ6301の元の四半分を、変位マッピング6311と同じ精度のグリッドに細分する。
量子化器6312は、それぞれの粗いベース頂点から対応する変位された頂点v1〜v4への差分ベクトルd1〜d4 6422を決定し、3D変位アレイ6304内の差分ベクトル6422を組み合わせる。このように、変位グリッドは、四半分の座標(ベース座標6305)及び3D変位ベクトルのアレイ6304だけを使用して定義される。モデリングツールが通常ではバイリニア補間を使用して四半分を細分せず、滑らかな表面を作成して変位させるために、より複雑な細分ルールを適用するので、これらの3D変位ベクトル6304は、元の変位6402を計算するために使用される変位ベクトルと必ずしも一致しない点に留意すべきである。
図64Cに示すように、2つの隣接する四半分6490〜6491のグリッドは、境界6492に沿ってシームレスに互いに縫い合わされ、2つの四半分6490〜6491は、正確に同じ頂点位置v5〜v8を評価する。隣接する四半分6490〜6491についてエッジ6492に沿って記憶された変位も同じであるので、変位された表面は、クラックを全く有さない。この特性は、特に、記憶された変位の精度が全体のメッシュ全体について任意に低減でき、その結果、より低い品質の接続された変位メッシュを生じることを意味するので、有意義である。
一実施形態では、半精度浮動小数点数が、変位(例えば、16ビット浮動小数点値)を符号化するために使用される。代替として或いはさらに、全ての3つの頂点成分及び3つの仮数について単に1つの指数を記憶する共有指数表現が使用される。さらに、変位の程度は通常非常に良好に制限されるので、1つのメッシュの変位は、全ての変位を符号化するのに十分な範囲を取得するために、何らかの定数によりスケーリングされた固定小数点座標を使用して符号化できる。本発明の一実施形態は、単に平坦なトライアングルを使用して、ベースプリミティブとしてバイリニアパッチを使用するが、他の実施形態は、各四半分を扱うためにトライアングルの対を使用する。
図63に戻り、一実施形態では、量子化器6312は、粗いベースメッシュ6303に対して変位マッピングされたメッシュ6302を量子化し、3D変位アレイ6304と、粗いベースメッシュ6303に関連するベース座標6305とを含む圧縮された変位メッシュ6310を生成する。限定ではなく例として、図64Bは、異なって変位された頂点v1〜v4にそれぞれ関連する差分ベクトルd1〜d4のセット6422を示す。
一実施形態では、粗いベースメッシュ6303は、ベース細分メッシュ6301である。代替として、補間器6311は、バイリニア補間を使用して、ベース細分メッシュ6301の元の四半分を、変位マッピング6311と同じ精度のグリッドに細分する。
量子化器6312は、それぞれの粗いベース頂点から対応する変位された頂点v1〜v4への差分ベクトルd1〜d4 6422を決定し、3D変位アレイ6304内の差分ベクトル6422を組み合わせる。このように、変位グリッドは、四半分の座標(ベース座標6305)及び3D変位ベクトルのアレイ6304だけを使用して定義される。モデリングツールが通常ではバイリニア補間を使用して四半分を細分せず、滑らかな表面を作成して変位させるために、より複雑な細分ルールを適用するので、これらの3D変位ベクトル6304は、元の変位6402を計算するために使用される変位ベクトルと必ずしも一致しない点に留意すべきである。
本発明の一実施形態による方法が図65に示されている。当該方法は、ここに記載のアーキテクチャ上で実施されてもよいが、いずれかの特定のプロセッサ又はシステムアーキテクチャに限定されない。
6501において、変位マッピングされたメッシュは、ベース細分表面から生成される。例えば、プリミティブ表面は、ベース細分表面を生成するように微細にテセレーションされてもよい。6502において、ベースメッシュが生成又は識別される(例えば、一実施形態では、ベース細分メッシュ等)。
6503において、差分ベクトルの3D変位アレイを作成するために、変位関数がベース細分表面の頂点に適用される。6504において、ベースメッシュに関連するベース座標が生成される。上記のように、ベース座標は、変位グリッドを再構築するために、差分ベクトルと組み合わせて使用されてもよい。6505において、3D変位アレイ及びベース座標を含む圧縮された変位メッシュが記憶される。
6506において、次にプリミティブが記憶装置又はメモリから読み取られると決定されたとき、変位グリッドは6503で圧縮された変位メッシュから生成される。例えば、3D変位アレイは、変位メッシュを再構築するためにベース座標に適用されてもよい。
[例]
以下は、本発明の異なる実施形態の例示的な実装である。
例1.ベース細分メッシュの複数の頂点の変位マッピングを実行することにより、元の変位マッピングされたメッシュを生成する変位マッピング回路/ロジックと、元の変位マッピングされたメッシュを圧縮するメッシュ圧縮回路/ロジックとを含み、メッシュ圧縮回路/ロジックは、変位アレイを生成するためにベースメッシュに関して複数の頂点の変位マッピングを量子化する量子化器を含む、装置。
例2.メッシュ圧縮回路/ロジックは、変位アレイと組み合わせてベースメッシュのベース座標を含む圧縮された変位メッシュを更に記憶する、例1に記載の装置。
例3.ベースメッシュは、ベース細分メッシュを含む、例2に記載の装置。
例4.ベースメッシュを生成するために、ベース細分メッシュに対してバイリニア補間を実行する補間器を更に含む、例2に記載の装置。
例5.要求に応じて圧縮された変位メッシュを伸張する伸張回路/ロジックを更に含む、例2に記載の装置。
例6.伸張回路/ロジックは、伸張後の変位マッピングされたメッシュを生成するために、ベースメッシュの座標を変位アレイのエレメントと組み合わせることにより、元の変位マッピングされたメッシュを再構築することを試みる、例5に記載の装置。
例7.伸張後の変位マッピングされたメッシュは、元の変位マッピングされたメッシュの近似値を含む、例6に記載の装置。
例8.伸張後の変位マッピングされたメッシュに関連する第1のプリミティブを含む複数のプリミティブに基づいてバウンディングボリューム階層(BVH)を生成するBVH生成回路を更に含む、例7に記載の装置。
例9.伸張後の変位マッピングされたメッシュとの交差を識別するために、BVHを通じて1つ以上の光線をトラバースするレイトラバーサル/交差回路を更に含む、例8に記載の装置。
例10.ベース細分メッシュの複数の頂点の変位マッピングを実行することにより、元の変位マッピングされたメッシュを生成するステップと、変位アレイを生成するためにベースメッシュに関して複数の頂点の変位マッピングを量子化することにより、元の変位マッピングされたメッシュを圧縮するステップとを含む方法。
例11.メッシュ圧縮回路/ロジックは、変位アレイと組み合わせてベースメッシュのベース座標を含む圧縮された変位メッシュを更に記憶する、例10に記載の方法。
例12.ベースメッシュは、ベース細分メッシュを含む、例11に記載の方法。
例13.ベースメッシュを生成するために、ベース細分メッシュに対してバイリニア補間を実行するステップを更に含む、例11に記載の方法。
例14.要求に応じて圧縮された変位メッシュを伸張するステップを更に含む、例11に記載の方法。
例15.伸張するステップは、伸張後の変位マッピングされたメッシュを生成するために、ベースメッシュの座標を変位アレイのエレメントと組み合わせるステップを更に含む、例14に記載の方法。
例16.伸張後の変位マッピングされたメッシュは、元の変位マッピングされたメッシュの近似値を含む、例15に記載の方法。
例17.伸張後の変位マッピングされたメッシュに関連する第1のプリミティブを含む複数のプリミティブに基づいてバウンディングボリューム階層(BVH)を生成するステップを更に含む、例16に記載の方法。
例18.伸張後の変位マッピングされたメッシュとの交差を識別するために、BVHを通じて1つ以上の光線をトラバースするステップを更に含む、例17に記載の方法。
例19.機械により実行されたとき、機械に対して、ベース細分メッシュの複数の頂点の変位マッピングを実行することにより、元の変位マッピングされたメッシュを生成する動作と、変位アレイを生成するためにベースメッシュに関して複数の頂点の変位マッピングを量子化することにより、元の変位マッピングされたメッシュを圧縮する動作とを実行させるプログラムコードを記憶した機械読み取り可能媒体。
例20.メッシュ圧縮回路/ロジックは、変位アレイと組み合わせてベースメッシュのベース座標を含む圧縮された変位メッシュを更に記憶する、例19に記載の機械読み取り可能媒体。
例21.ベースメッシュは、ベース細分メッシュを含む、例20に記載の機械読み取り可能媒体。
例22.機械に対して、ベースメッシュを生成するために、ベース細分メッシュに対してバイリニア補間を実行させるプログラムコードを更に含む、例20に記載の機械読み取り可能媒体。
例23.機械に対して、要求に応じて圧縮された変位メッシュを伸張する動作を実行させるプログラムコードを更に含む、例20に記載の機械読み取り可能媒体。
例24.伸張は、伸張後の変位マッピングされたメッシュを生成するために、ベースメッシュの座標を変位アレイのエレメントと組み合わせることを更に含む、例23に記載の機械読み取り可能媒体。
例25.伸張後の変位マッピングされたメッシュは、元の変位マッピングされたメッシュの近似値を含む、例24に記載の機械読み取り可能媒体。
例26.機械に対して、伸張後の変位マッピングされたメッシュに関連する第1のプリミティブを含む複数のプリミティブに基づいてバウンディングボリューム階層(BVH)を生成する動作を実行させるプログラムコードを更に含む、例25に記載の機械読み取り可能媒体。
例27.機械に対して、伸張後の変位マッピングされたメッシュとの交差を識別するために、BVHを通じて1つ以上の光線をトラバースする動作を実行させるプログラムコードを更に含む、例26に記載の機械読み取り可能媒体。
要するに、本発明の実施形態は、変位マッピングされたメッシュが、非可逆完全圧縮技術を使用して効果的に圧縮できる程度を示す。
本発明の実施形態は、上記の様々なステップを含んでもよい。ステップは、汎用又は特殊目的のプロセッサにステップを実行させるために使用され得る機械実行可能命令に具体化されてもよい。代替として、これらのステップは、ステップを実行するためのハード配線ロジックを含む特定のハードウェアコンポーネントにより、或いは、プログラムされたコンピュータコンポーネントとカスタムハードウェアコンポーネントとのいずれかの組み合わせにより実行されてもよい。
ここに記載のように、命令は、特定の動作を実行するように構成された特定用途向け集積回路(application specific integrated circuit, ASIC)のような特定の構成のハードウェアを示してもよく、或いは、非一時的なコンピュータ読み取り可能媒体に具現化されたメモリに記憶された所定の機能又はソフトウェア命令を有してもよい。したがって、図面に示す技術は、1つ以上の電子デバイス(例えば、エンドステーション、ネットワークエレメント等)上に記憶されて実行されるコード及びデータを使用して実装できる。このような電子デバイスは、非一時的なコンピュータ機械読み取り可能記憶媒体(例えば、磁気ディスク、光ディスク、ランダムアクセスメモリ、読み取り専用メモリ、フラッシュメモリデバイス、相変化メモリ)及び一時的なコンピュータ機械読み取り可能通信媒体(例えば、搬送波、赤外線信号、デジタル信号等のような電気、光学、音響又は他の形式の伝搬信号)のようなコンピュータ読み取り可能媒体を使用して、コード及びデータを記憶して通信する(内部的に及び/又はネットワーク上で他の電子デバイスと通信する)。
さらに、このような電子デバイスは、典型的には、1つ以上の記憶デバイス(非一時的な機械読み取り可能記憶媒体)、ユーザ入出力デバイス(例えば、キーボード、タッチスクリーン及び/又はディスプレイ)及びネットワーク接続のような1つ以上の他のコンポーネントに結合された1つ以上のプロセッサのセットを含む。プロセッサのセット及び他のコンポーネントの結合は、典型的には、1つ以上のバス及びブリッジ(バスコントローラとも呼ばれる)を通じて行われる。記憶デバイス及びネットワークトラフィックを搬送する信号は、1つ以上の機械読み取り可能記憶媒体及び機械読み取り可能通信媒体をそれぞれ表す。したがって、所与の電子デバイスの記憶デバイスは、典型的には、その電子デバイスの1つ以上のプロセッサのセット上で実行するためのコード及び/又はデータを記憶する。当然に、本発明の実施形態の1つ又は複数の部分は、ソフトウェア、ファームウェア及び/又はハードウェアの異なる組み合わせを使用して実装されてもよい。この詳細な説明を通じて、説明の目的で、本発明の完全な理解を提供するために、多数の特定の詳細が記載されている。しかし、本発明がこれらの特定の詳細のうちいくつかなしに実施され得ることは、当業者にとって明らかである。特定の場合には、本発明の対象物を不明瞭にすることを回避するために、周知の構造及び機能は詳細に記載されていない。したがって、本発明の範囲及び真意は、以下の請求項に鑑みて判断されるべきである。

Claims (26)

  1. ベース細分メッシュの複数の頂点の変位マッピングを実行することにより、元の変位マッピングされたメッシュを生成する変位マッピング回路/ロジックと、
    前記元の変位マッピングされたメッシュを圧縮するメッシュ圧縮回路/ロジックと
    を含み、
    前記メッシュ圧縮回路/ロジックは、変位アレイを生成するためにベースメッシュに関して前記複数の頂点の前記変位マッピングを量子化する量子化器を含む、装置。
  2. 前記メッシュ圧縮回路/ロジックは、前記変位アレイと組み合わせて前記ベースメッシュのベース座標を含む圧縮された変位メッシュを更に記憶する、請求項1に記載の装置。
  3. 前記ベースメッシュは、前記ベース細分メッシュを含む、請求項2に記載の装置。
  4. 前記ベースメッシュを生成するために、前記ベース細分メッシュに対してバイリニア補間を実行する補間器を更に含む、請求項2又は3に記載の装置。
  5. 要求に応じて前記圧縮された変位メッシュを伸張する伸張回路/ロジックを更に含む、請求項2乃至4のうちいずれか1項に記載の装置。
  6. 前記伸張回路/ロジックは、伸張後の変位マッピングされたメッシュを生成するために、前記ベースメッシュの座標を前記変位アレイのエレメントと組み合わせることにより、前記元の変位マッピングされたメッシュを再構築することを試みる、請求項5に記載の装置。
  7. 前記伸張後の変位マッピングされたメッシュは、前記元の変位マッピングされたメッシュの近似値を含む、請求項6に記載の装置。
  8. 前記伸張後の変位マッピングされたメッシュに関連する第1のプリミティブを含む複数のプリミティブに基づいてバウンディングボリューム階層(BVH)を生成するBVH生成回路を更に含む、請求項7に記載の装置。
  9. 前記伸張後の変位マッピングされたメッシュとの交差を識別するために、前記BVHを通じて1つ以上の光線をトラバースするレイトラバーサル/交差回路を更に含む、請求項8に記載の装置。
  10. ベース細分メッシュの複数の頂点の変位マッピングを実行することにより、元の変位マッピングされたメッシュを生成するステップと、
    変位アレイを生成するためにベースメッシュに関して前記複数の頂点の前記変位マッピングを量子化することにより、前記元の変位マッピングされたメッシュを圧縮するステップと
    を含む方法。
  11. 前記メッシュ圧縮回路/ロジックは、前記変位アレイと組み合わせて前記ベースメッシュのベース座標を含む圧縮された変位メッシュを更に記憶する、請求項10に記載の方法。
  12. 前記ベースメッシュは、前記ベース細分メッシュを含む、請求項11に記載の方法。
  13. 前記ベースメッシュを生成するために、前記ベース細分メッシュに対してバイリニア補間を実行するステップを更に含む、請求項11又は12に記載の方法。
  14. 要求に応じて前記圧縮された変位メッシュを伸張するステップを更に含む、請求項11乃至13のうちいずれか1項に記載の方法。
  15. 伸張するステップは、伸張後の変位マッピングされたメッシュを生成するために、前記ベースメッシュの座標を前記変位アレイのエレメントと組み合わせるステップを更に含む、請求項14に記載の方法。
  16. 前記伸張後の変位マッピングされたメッシュは、前記元の変位マッピングされたメッシュの近似値を含む、請求項15に記載の方法。
  17. 前記伸張後の変位マッピングされたメッシュに関連する第1のプリミティブを含む複数のプリミティブに基づいてバウンディングボリューム階層(BVH)を生成するステップを更に含む、請求項16に記載の方法。
  18. 前記伸張後の変位マッピングされたメッシュとの交差を識別するために、前記BVHを通じて1つ以上の光線をトラバースするステップを更に含む、請求項17に記載の方法。
  19. 機械により実行されたとき、前記機械に対して、
    ベース細分メッシュの複数の頂点の変位マッピングを実行することにより、元の変位マッピングされたメッシュを生成する動作と、
    変位アレイを生成するためにベースメッシュに関して前記複数の頂点の前記変位マッピングを量子化することにより、前記元の変位マッピングされたメッシュを圧縮する動作と
    を実行させるプログラム。
  20. 前記メッシュ圧縮回路/ロジックは、前記変位アレイと組み合わせて前記ベースメッシュのベース座標を含む圧縮された変位メッシュを更に記憶する、請求項19に記載のプログラム。
  21. 前記ベースメッシュは、前記ベース細分メッシュを含む、請求項20に記載のプログラム。
  22. 前記機械に対して、前記ベースメッシュを生成するために、前記ベース細分メッシュに対してバイリニア補間を実行する動作を更に実行させるプログラムコードを更に含む、請求項20又は21に記載のプログラム。
  23. 前記機械に対して、要求に応じて前記圧縮された変位メッシュを伸張する動作を更に実行させる、請求項20乃至22のうちいずれか1項に記載のプログラム。
  24. 伸張は、伸張後の変位マッピングされたメッシュを生成するために、前記ベースメッシュの座標を前記変位アレイのエレメントと組み合わせることを更に含む、請求項23にプログラム。
  25. 前記伸張後の変位マッピングされたメッシュは、前記元の変位マッピングされたメッシュの近似値を含む、請求項24に記載のプログラム。
  26. 請求項19乃至25のうちいずれか1項のプログラムを記憶した機械読み取り可能記憶媒体。
JP2020212137A 2020-03-15 2020-12-22 変位メッシュ圧縮のための装置及び方法 Pending JP2021149942A (ja)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US16/819,118 2020-03-15
US16/819,118 US20210287431A1 (en) 2020-03-15 2020-03-15 Apparatus and method for displaced mesh compression

Publications (1)

Publication Number Publication Date
JP2021149942A true JP2021149942A (ja) 2021-09-27

Family

ID=73543998

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2020212137A Pending JP2021149942A (ja) 2020-03-15 2020-12-22 変位メッシュ圧縮のための装置及び方法

Country Status (9)

Country Link
US (1) US20210287431A1 (ja)
EP (1) EP3882859A1 (ja)
JP (1) JP2021149942A (ja)
KR (1) KR20210116199A (ja)
CN (1) CN113470179A (ja)
AU (1) AU2020294195A1 (ja)
BR (1) BR102021001377A2 (ja)
SG (1) SG10202012215RA (ja)
TW (1) TW202137142A (ja)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2024071283A1 (ja) * 2022-09-30 2024-04-04 ソニーグループ株式会社 情報処理装置および方法

Families Citing this family (13)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11907855B2 (en) * 2020-03-30 2024-02-20 Arm Limited Data transfers in neural processing
CN113628097A (zh) * 2020-05-09 2021-11-09 北京字节跳动网络技术有限公司 图像特效配置方法、图像识别方法、装置及电子设备
CN111709870B (zh) * 2020-05-28 2023-10-03 钟杰东 一种zjd应用处理器架构
US11908063B2 (en) * 2021-07-01 2024-02-20 Adobe Inc. Displacement-centric acceleration for ray tracing
US20230103750A1 (en) * 2021-10-06 2023-04-06 Mediatek Inc. Balancing workload for zero skipping on deep learning accelerator
US11593990B1 (en) * 2022-02-04 2023-02-28 Qualcomm Incorporated Storage of levels for bottom level bounding volume hierarchy
US20230252726A1 (en) * 2022-02-04 2023-08-10 Qualcomm Incorporated Compressed traversal stack for gpu ray tracing
US20230252725A1 (en) * 2022-02-04 2023-08-10 Qualcomm Incorporated Bounding volume hierarchy leaf node compression
US11763523B2 (en) * 2022-02-04 2023-09-19 Qualcomm Incorporated Compressed THIT stack for hardware-accelerated GPU ray tracing
WO2023172457A1 (en) * 2022-03-11 2023-09-14 Apple Inc. Remeshing for efficient compression
KR102488073B1 (ko) * 2022-06-13 2023-01-13 한국가상현실 (주) 인덱스 테이블을 활용하여 오브젝트를 생성하는 그래픽 처리 방법 및 이를 수행하는 그래픽 처리 장치
WO2024030279A1 (en) * 2022-08-01 2024-02-08 Innopeak Technology, Inc. Encoding method, decoding method, encoder and decoder
WO2024085654A1 (en) * 2022-10-19 2024-04-25 Samsung Electronics Co., Ltd. Packing of displacements data in video frames for dynamic mesh coding

Family Cites Families (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6047088A (en) * 1996-12-16 2000-04-04 Sharp Laboratories Of America, Inc. 2D mesh geometry and motion vector compression
US20050168460A1 (en) * 2002-04-04 2005-08-04 Anshuman Razdan Three-dimensional digital library system

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2024071283A1 (ja) * 2022-09-30 2024-04-04 ソニーグループ株式会社 情報処理装置および方法

Also Published As

Publication number Publication date
EP3882859A1 (en) 2021-09-22
CN113470179A (zh) 2021-10-01
TW202137142A (zh) 2021-10-01
KR20210116199A (ko) 2021-09-27
US20210287431A1 (en) 2021-09-16
BR102021001377A2 (pt) 2021-09-28
SG10202012215RA (en) 2021-10-28
AU2020294195A1 (en) 2021-09-30

Similar Documents

Publication Publication Date Title
US11995767B2 (en) Apparatus and method for compressing ray tracing acceleration structure build data
US11593909B2 (en) Apparatus and method for real time graphics processing using local and cloud-based graphics processing resources
EP3882859A1 (en) Apparatus and method for displaced mesh compression
JP7430050B2 (ja) クラウドに基づくリアルタイム光線追跡
EP3675046B1 (en) Speculative execution of hit and intersection shaders on programmable ray tracing architectures
US11087522B1 (en) Apparatus and method for asynchronous ray tracing
US11670035B2 (en) Apparatus and method for performing non-local means filtering using motion estimation circuitry of a graphics processor
US20210287423A1 (en) Apparatus and method for double-precision ray traversal in a ray tracing pipeline
US11900498B2 (en) Apparatus and method for performing a stable and short latency sorting operation
JP2021149944A (ja) レイトレーシングパイプラインをスロットリングするための装置及び方法
EP3882863A1 (en) Apparatus and method for performing box queries in ray traversal hardware
TW202209259A (zh) 用於包含光線追蹤的有效圖形處理的設備與方法
US11989817B2 (en) Apparatus and method for high quality ray-traced level of detail transitions

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20231219