JP2021057011A - ローカル及びクラウドに基づくグラフィック処理リソースを用いるリアルタイムグラフィック処理のための機器及び方法 - Google Patents

ローカル及びクラウドに基づくグラフィック処理リソースを用いるリアルタイムグラフィック処理のための機器及び方法 Download PDF

Info

Publication number
JP2021057011A
JP2021057011A JP2020110060A JP2020110060A JP2021057011A JP 2021057011 A JP2021057011 A JP 2021057011A JP 2020110060 A JP2020110060 A JP 2020110060A JP 2020110060 A JP2020110060 A JP 2020110060A JP 2021057011 A JP2021057011 A JP 2021057011A
Authority
JP
Japan
Prior art keywords
thread
processor
local
command
execution
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
JP2020110060A
Other languages
English (en)
Inventor
アイヤール ラヴィシャンカール
Iyer Ravishankar
アイヤール ラヴィシャンカール
パニール セルヴァクマール
Panneer Selvakumar
パニール セルヴァクマール
エス. マーシャル カール
s marshall Carl
エス. マーシャル カール
フェイト ジョン
Feit John
フェイト ジョン
アール. ゴクルランガン ヴェンカット
R Gokulrangan Venkat
アール. ゴクルランガン ヴェンカット
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 JP2021057011A publication Critical patent/JP2021057011A/ja
Pending legal-status Critical Current

Links

Images

Classifications

    • 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/5061Partitioning or combining of resources
    • G06F9/5072Grid computing
    • 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/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45504Abstract machines for programme code execution, e.g. Java virtual machine [JVM], interpreters, emulators
    • AHUMAN NECESSITIES
    • A63SPORTS; GAMES; AMUSEMENTS
    • A63FCARD, BOARD, OR ROULETTE GAMES; INDOOR GAMES USING SMALL MOVING PLAYING BODIES; VIDEO GAMES; GAMES NOT OTHERWISE PROVIDED FOR
    • A63F13/00Video games, i.e. games using an electronically generated display having two or more dimensions
    • A63F13/25Output arrangements for video game devices
    • AHUMAN NECESSITIES
    • A63SPORTS; GAMES; AMUSEMENTS
    • A63FCARD, BOARD, OR ROULETTE GAMES; INDOOR GAMES USING SMALL MOVING PLAYING BODIES; VIDEO GAMES; GAMES NOT OTHERWISE PROVIDED FOR
    • A63F13/00Video games, i.e. games using an electronically generated display having two or more dimensions
    • A63F13/30Interconnection arrangements between game servers and game devices; Interconnection arrangements between game devices; Interconnection arrangements between game servers
    • A63F13/35Details of game servers
    • A63F13/355Performing operations on behalf of clients with restricted processing capabilities, e.g. servers transform changing game scene into an encoded video stream for transmitting to a mobile phone or a thin client
    • AHUMAN NECESSITIES
    • A63SPORTS; GAMES; AMUSEMENTS
    • A63FCARD, BOARD, OR ROULETTE GAMES; INDOOR GAMES USING SMALL MOVING PLAYING BODIES; VIDEO GAMES; GAMES NOT OTHERWISE PROVIDED FOR
    • A63F13/00Video games, i.e. games using an electronically generated display having two or more dimensions
    • A63F13/60Generating or modifying game content before or while executing the game program, e.g. authoring tools specially adapted for game development or game-integrated level editor
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/76Architectures of general purpose stored program computers
    • G06F15/78Architectures of general purpose stored program computers comprising a single central processing unit
    • G06F15/7807System on chip, i.e. computer system on a single chip; System in package, i.e. computer system on one or more chips in a single package
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/76Architectures of general purpose stored program computers
    • G06F15/80Architectures of general purpose stored program computers comprising an array of processing units with common control, e.g. single instruction multiple data processors
    • G06F15/8007Architectures of general purpose stored program computers comprising an array of processing units with common control, e.g. single instruction multiple data processors single instruction multiple data [SIMD] multiprocessors
    • 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30076Arrangements for executing specific machine instructions to perform miscellaneous control operations, e.g. NOP
    • G06F9/3009Thread control instructions
    • 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3851Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution from multiple instruction streams, e.g. multistreaming
    • 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/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45533Hypervisors; Virtual machine monitors
    • G06F9/45558Hypervisor-specific management and integration aspects
    • 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/48Program initiating; Program switching, e.g. by interrupt
    • G06F9/4806Task transfer initiation or dispatching
    • 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/48Program initiating; Program switching, e.g. by interrupt
    • G06F9/4806Task transfer initiation or dispatching
    • G06F9/4843Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
    • G06F9/4881Scheduling strategies for dispatcher, e.g. round robin, multi-level priority queues
    • 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
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N20/00Machine learning
    • 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
    • AHUMAN NECESSITIES
    • A63SPORTS; GAMES; AMUSEMENTS
    • A63FCARD, BOARD, OR ROULETTE GAMES; INDOOR GAMES USING SMALL MOVING PLAYING BODIES; VIDEO GAMES; GAMES NOT OTHERWISE PROVIDED FOR
    • A63F13/00Video games, i.e. games using an electronically generated display having two or more dimensions
    • A63F13/30Interconnection arrangements between game servers and game devices; Interconnection arrangements between game devices; Interconnection arrangements between game servers
    • A63F13/35Details of game servers
    • A63F13/358Adapting the game course according to the network or server load, e.g. for reducing latency due to different connection speeds between clients
    • AHUMAN NECESSITIES
    • A63SPORTS; GAMES; AMUSEMENTS
    • A63FCARD, BOARD, OR ROULETTE GAMES; INDOOR GAMES USING SMALL MOVING PLAYING BODIES; VIDEO GAMES; GAMES NOT OTHERWISE PROVIDED FOR
    • A63F2300/00Features of games using an electronically generated display having two or more dimensions, e.g. on a television screen, showing representations related to the game
    • A63F2300/50Features of games using an electronically generated display having two or more dimensions, e.g. on a television screen, showing representations related to the game characterized by details of game servers
    • A63F2300/53Features of games using an electronically generated display having two or more dimensions, e.g. on a television screen, showing representations related to the game characterized by details of game servers details of basic data processing
    • A63F2300/534Features of games using an electronically generated display having two or more dimensions, e.g. on a television screen, showing representations related to the game characterized by details of game servers details of basic data processing for network load management, e.g. bandwidth optimization, latency reduction
    • 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/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45533Hypervisors; Virtual machine monitors
    • G06F9/45558Hypervisor-specific management and integration aspects
    • G06F2009/4557Distribution of virtual machine instances; Migration and load balancing
    • 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/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45533Hypervisors; Virtual machine monitors
    • G06F9/45558Hypervisor-specific management and integration aspects
    • G06F2009/45595Network integration; Enabling network access in virtual machine instances
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2209/00Indexing scheme relating to G06F9/00
    • G06F2209/50Indexing scheme relating to G06F9/50
    • G06F2209/5017Task decomposition
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2209/00Indexing scheme relating to G06F9/00
    • G06F2209/50Indexing scheme relating to G06F9/50
    • G06F2209/5018Thread allocation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2209/00Indexing scheme relating to G06F9/00
    • G06F2209/50Indexing scheme relating to G06F9/50
    • G06F2209/509Offload

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • Multimedia (AREA)
  • Computer Hardware Design (AREA)
  • Computing Systems (AREA)
  • Mathematical Physics (AREA)
  • Data Mining & Analysis (AREA)
  • Evolutionary Computation (AREA)
  • Medical Informatics (AREA)
  • Microelectronics & Electronic Packaging (AREA)
  • Computer Vision & Pattern Recognition (AREA)
  • Artificial Intelligence (AREA)
  • Image Generation (AREA)
  • Advance Control (AREA)
  • Executing Machine-Instructions (AREA)
  • Image Processing (AREA)

Abstract

【課題】ローカル及びリモート処理リソース上でスレッドをスケジューリングする機器及び方法を提供する。【解決手段】スケジューラは、ローカルグラフィックプロセッサで実行するための第1スレッドサブセットと、ローカルプロセッサの仮想化表現で実行するための第2スレッドサブセットとを識別し、ローカルグラフィックプロセッサ上に第1スレッドサブセットを、ローカルプロセッサの仮想化表現に関連付けられたクラウドに基づく処理リソースにスレッド又はスレッドの表現を送信することにより、第2スレッドサブセットを、スケジューリングする。ローカルグラフィックプロセッサは、ローカルグラフィックプロセッサ上で第1スレッドサブセットを実行した第1結果と、クラウドに基づく処理リソース上で第2スレッドサブセットを実行した第2結果とを結合して、画像フレームをレンダリングする。【選択図】なし

Description

本発明は、概して、グラフィック処理の分野に関する。特に、本発明は、ローカル及びクラウドに基づくグラフィック処理リソースを用いるリアルタイムグラフィック処理のための機器及び方法に関する。
リモートグラフィックサーバは、標準的なユーザのゲーム装置よりも遙かに速く画像フレームをレンダリングできるが、ネットワークにより引き起こされる遅延及びデータ圧縮に起因する品質変動のような、リアルタイムのゲームユーザ経験に影響を与え得る他の課題が存在する。拡張現実(augmented reality:AR)及び仮想現実(virtual reality:VR)ゲームのような特定種類のゲームでは、必要な遅延を達成するために、高性能ネットワーキングプラットフォームが要求される。
本発明のより良い理解は、以下の図面と関連して以下の詳細な説明から得られる。
1つ以上のプロセッサコアとグラフィックプロセッサとを有するプロセッサを備えるコンピュータシステムの一実施形態のブロック図である。
1つ以上のプロセッサコア、統合メモリ制御部、及び統合グラフィックプロセッサを有するプロセッサの一実施形態のブロック図である。 1つ以上のプロセッサコア、統合メモリ制御部、及び統合グラフィックプロセッサを有するプロセッサの一実施形態のブロック図である。 1つ以上のプロセッサコア、統合メモリ制御部、及び統合グラフィックプロセッサを有するプロセッサの一実施形態のブロック図である。 1つ以上のプロセッサコア、統合メモリ制御部、及び統合グラフィックプロセッサを有するプロセッサの一実施形態のブロック図である。
個別グラフィック処理ユニットであってよい又は複数の処理コアと統合されたグラフィックプロセッサであってよい、グラフィックプロセッサの一実施形態のブロック図である。 個別グラフィック処理ユニットであってよい又は複数の処理コアと統合されたグラフィックプロセッサであってよい、グラフィックプロセッサの一実施形態のブロック図である。 個別グラフィック処理ユニットであってよい又は複数の処理コアと統合されたグラフィックプロセッサであってよい、グラフィックプロセッサの一実施形態のブロック図である。
グラフィックプロセッサのグラフィック処理エンジンの一実施形態のブロック図である。
グラフィックプロセッサの別の実施形態のブロック図である。 グラフィックプロセッサの別の実施形態のブロック図である。
処理要素アレイを含むスレッド実行ロジックのブロック図である。
一実施形態によるグラフィックプロセッサ実行ユニット命令フォーマットを示す。
グラフィックパイプライン、メディアパイプライン、ディスプレイエンジン、スレッド実行ロジック、及びレンダラ出力パイプラインを含むグラフィックプロセッサの別の実施形態のブロック図である。
一実施形態によるグラフィックプロセッサコマンドフォーマットを示すブロック図である。
一実施形態によるグラフィックプロセッサコマンドシーケンスを示すブロック図である。
一実施形態によるデータ処理システムの例示的なグラフィックソフトウェアアーキテクチャを示す。
一実施形態による動作を実行するための集積回路を製造するために使用され得る例示的なIPコア開発システムを示す。 一実施形態による動作を実行するための集積回路を製造するために使用され得る例示的なIPコア開発システムを示す。 一実施形態による動作を実行するための集積回路を製造するために使用され得る例示的なIPコア開発システムを示す。 一実施形態による動作を実行するための集積回路を製造するために使用され得る例示的なIPコア開発システムを示す。
一実施形態による、1つ以上のIPコアを用いて製造され得る例示的なシステムオンチップ集積回路を示す。
1つ以上のIPコアを用いて製造され得るシステムオンチップ集積回路の例示的なグラフィックプロセッサを示す。
1つ以上のIPコアを用いて製造され得るシステムオンチップ集積回路の追加の例示的なグラフィックプロセッサを示す。
仮想化又は「ゴースト」GPUを含むアーキテクチャの実施形態を示す。 仮想化又は「ゴースト」GPUを含むアーキテクチャの実施形態を示す。
仮想化又は「ゴースト」GPUを含むアーキテクチャの別の実施形態を示す。
3個のゴーストGPU及び1個の物理GPUを使用する実行に関連付けられたタイミングを示す。
ゴーストGPUを生成し及びゴーストGPUを列挙する一実施形態を示す。
本発明の一実施形態による方法を示す。
ゴースト及び物理GPU及びxPUの構成を示す。 ゴースト及び物理GPU及びxPUの構成を示す。
機械学習アーキテクチャの初期トレーニングを実行するためのアーキテクチャの一実施形態を示す。
機械学習エンジンがランタイム中に連続的にトレーニングされ更新される一実施形態を示す。
機械学習エンジンがランタイム中に連続的にトレーニングされ更新される別の実施形態を示す。
機械学習データがネットワーク上で共有される実施形態を示す。 機械学習データがネットワーク上で共有される実施形態を示す。
機械学習エンジンをトレーニングする方法の一実施形態を示す。
分散型ノイズ除去動作を実行するためにノードがゴースト領域データを交換する一実施形態を示す。
画像レンダリング及びノイズ除去動作が複数のノードに渡り分散されるアーキテクチャの一実施形態を示す。
分散型レンダリング及びノイズ除去のためのアーキテクチャの追加の詳細を示す。
本発明の一実施形態による方法を示す。
機械学習方法の一実施形態を示す。
複数の相互接続された汎用グラフィックプロセッサを示す。
機械学習実装のための畳み込みレイヤ及び完全接続レイヤのセットを示す。
畳み込みレイヤの一実施形態を示す。
機械学習実装における相互接続されたノードのセットの一例を示す。
ニューラルネットワークがトレーニングデータセットを用いて学習するトレーニングフレームワークの一実施形態を示す。
モデル並列化及びデータ並列化の例を示す。
システムオンチップ(SoC)の一例を示す。
光線追跡コア及びテンソルコアを含む処理アーキテクチャの一例を示す。
ビームの一例を示す。
ビーム追跡を実行する機器の一実施形態を示す。
ビーム階層構造の一例を示す。
ビーム追跡を実行する方法を示す。
分散型光線追跡エンジンの一例を示す。
光線追跡システムで実行される圧縮の一例を示す。 光線追跡システムで実行される圧縮の一例を示す。
本発明の一実施形態による方法を示す。
例示的なハイブリッド光線追跡機器を示す。
光線追跡動作のために使用されるスタックの例を示す。
ハイブリッド光線追跡機器の一実施形態の追加の詳細を示す。
境界ボリューム階層構造の一例を示す。
コールスタック及びトラバース状態記憶の一例を示す。
トラバース及び交差のための方法の一実施形態を示す。
特定のシェーダを実行するために複数のディスパッチサイクルが必要である一実施形態を示す。 特定のシェーダを実行するために複数のディスパッチサイクルが必要である一実施形態を示す。
単一のディスパッチサイクルが複数のシェーダを実行する一実施形態を示す。
単一のディスパッチサイクルが複数のシェーダを実行する別の実施形態を示す。
光線追跡命令を実行するためのアーキテクチャの一実施形態を示す。
スレッド内で光線追跡命令を実行するための方法の一実施形態を示す。
以下の説明では、説明を目的として、後述する本発明の実施形態の完全な理解を提供するために、多数の特定の詳細が説明される。しかしながら、当業者には、本発明の実施形態がこれらの特定の詳細のうちの一部を有しないで実行されてよいことが明らかである。他の例では、本発明の実施形態の基本原理を不明瞭にすることを回避するために、よく知られた構造及び装置がブロック図の形式で示される。

例示的なグラフィックプロセッサアーキテクチャ及びデータ型
<システム概要>
図1は、一実施形態による処理システム100のブロック図である。システム100は、単一プロセッサのデスクトップシステム、マルチプロセッサのワークステーションシステム、又は多数のプロセッサ102又はプロセッサコア107を有するサーバシステムで使用されてよい。一実施形態では、システム100は、ローカル又はワイドエリアネットワークへの有線又は無線接続を備えるモノのインターネット(IoT)内のような、モバイル、ハンドヘルド、又は埋め込み型装置で使用するためのシステムオンチップ(system−on−a−chip:SoC)集積回路の中に組み込まれた処理プラットフォームである。
一実施形態では、システム100は、サーバに基づくゲームプラットフォーム、ゲーム及びメディアコンソールを含むゲームコンソール、モバイルゲームコンソール、ハンドヘルドゲームコンソール、又はオンラインゲームコンソールを含み、それに結合され、又はその中に統合され得る。幾つかの実施形態では、システム100は、携帯電話機、スマートフォン、タブレットコンピューティング装置、又は低い内部記憶容量を備えるラップトップのようなモバイルインターネット接続装置の部分である。処理システム100は、現実世界の視覚、聴覚、又は触覚経験を補強するために、或いはテキスト、音声、グラフィック、ビデオ、ホログラフ画像又はビデオ、又は触覚フィードバックを提供するために、視覚、聴覚又は触覚出力を提供する拡張現実(AR)又は仮想現実(VR)機能により拡張された、スマートウォッチウェアラブル装置、スマート眼鏡又は衣服のようなウェアラブル装置、他の拡張現実(AR)装置又は他の仮想現実(VR)装置も含み、それに結合され、又はその中に統合され得る。幾つかの実施形態では、処理システム100は、テレビジョン又はセットトップボックスを含み又はその部分である。一実施形態では、システム100は、バス、トラクター、トレーラー、自動車、モータ又は電動自転車、飛行機又はグライダー(又はそれらの任意の組み合わせ)のような自動走行車両を含み、それに結合され、又はその中に統合され得る。自動走行車両は、システム100を使用して、車両の周囲の検知された環境を処理してよい。
幾つかの実施形態では、1つ以上のプロセッサ102は、それぞれ、実行されるとシステム又はユーザソフトウェアのための動作を実行する命令を処理する1つ以上のプロセッサコア107を含む。幾つかの実施形態では、1つ以上のプロセッサコア107のうちの少なくとも1つは、特定命令セット109を処理するよう構成される。幾つかの実施形態では、命令セット109は、CISC(Complex Instruction Set Computing)、RISC(Reduced Instruction Set Computing)、又はVLIW(Very Long Instruction Word)による計算を実現してよい。1つ以上のプロセッサコア107は、他の命令セットのエミュレーションを促進するための命令を含み得る異なる命令セット109を処理してよい。プロセッサコア107は、DSP(Digital Signal Processor)のような他の処理装置も含んでよい。
幾つかの実施形態では、プロセッサ102は、キャッシュメモリ104を含む。アーキテクチャに依存して、プロセッサ102は、単一内部キャッシュまたは複数レベルの内部キャッシュを有し得る。幾つかの実施形態では、キャッシュメモリは、プロセッサ102の種々のコンポーネントの間で共有される。幾つかの実施形態では、プロセッサ102は、知られているキャッシュコヒーレンシ技術を用いてプロセッサコア107の間で共有されてよい外部キャッシュ(例えば、レベル3(L3)キャッシュまたは最終レベルキャッシュ(Last Level Cache:LLC)(図示しない))も使用する。レジスタファイル106は、プロセッサ102に追加で含まれてよく、異なるデータ型を格納するための異なる種類のレジスタを含んでよい(例えば、整数レジスタ、浮動小数点レジスタ、状態レジスタ、及び命令ポインタレジスタ)。幾つかのレジスタは、汎用レジスタであってよく、他のレジスタはプロセッサ102の設計に固有であってよい。
幾つかの実施形態では、1つ以上のプロセッサ102は、プロセッサ102とシステム100内の他のコンポーネントとの間でアドレス、データ、又は制御信号のような通信信号を送信するために1つ以上のインタフェースバス110に結合される。インタフェースバス110は、一実施形態では、DMI(Direct Media Interface)バスのバージョンのようなプロセッサバスであり得る。しかしながら、プロセッサバスは、DMIバスに限定されず、1つ以上の周辺機器相互接続バス(例えば、PCI、PCI Express)、メモリバス、又は他の種類のインタフェースバスを含んでよい。一実施形態では、プロセッサ102は、統合メモリ制御部116、及びプラットフォーム制御ハブ130を含む。メモリ制御部116は、メモリ装置とシステム100の他のコンポーネントとの間の通信を促進し、一方で、プラットフォーム制御バス(platform controller hub:PCH)130は、ローカルI/Oバスを介してI/O装置への接続を提供する。
メモリ装置120は、DRAM(dynamic random−access memory)装置、SRAM(static random−access memory)装置、フラッシュメモリ装置、位相変化メモリ装置、又はプロセスメモリとして機能するために適切な性能を有する何らかの他のメモリ装置であり得る。一実施形態では、メモリ装置120は、システム100のシステムメモリとして動作し、1つ以上のプロセッサ102がアプリケーション又はプロセスを実行するときに使用するために、データ122及びメモリ121を格納し得る。メモリ制御部116は、グラフィック及びメディア動作を実行するために、プロセッサ102内の1つ以上のグラフィックプロセッサ108と通信し得る任意的な外部グラフィックプロセッサ118とも結合する。幾つかの実施形態では、グラフィック、メディア、及び又は計算動作は、グラフィック、メディア、又は計算動作の専用セットを実行するよう構成され得るコプロセッサであるアクセラレータ112により支援されてよい。例えば、一実施形態では、アクセラレータ112は、機械学習又は計算動作を最適化するために使用される行列乗算アクセラレータである。一実施形態では、アクセラレータ112は、グラフィックプロセッサ108と共同して光線追跡動作を実行するために使用され得る光線追跡アクセラレータである。一実施形態では、外部アクセラレータ119は、アクセラレータ112n代わりに又はそれと共同して使用されてよい。
幾つかの実施形態では、ディスプレイ装置111は、プロセッサ102に接続できる。ディスプレイ装置111は、モバイル電子装置又はラップトップ装置又はディスプレイインタフェース(例えば、DisplayPort等)を介して取り付けられた外部ディスプレイ装置内のような、内部ディスプレイ装置の1つ以上であり得る。一実施形態では、ディスプレイ装置111は、仮想現実(VR)アプリケーション又は拡張現実(AR)アプリケーションで使用する立体ディスプレイのようなHMD(head mounted display)であり得る。
幾つかの実施形態では、プラットフォーム制御ハブ130は、周辺機器がメモリ装置120及びプロセッサ102に高速I/Oバスを介して接続することを可能にする。I/O周辺機器は、限定ではないが、音声制御部146、ネットワーク制御部134、ファームウェアインタフェース128、無線トランシーバ126、タッチセンサ125、データ記憶装置124(例えば、不揮発性メモリ、揮発性メモリ、ハードディスクドライブ、フラッシュメモリ、NAND、3D NAND、3D XPoint、等)を含む。データ記憶装置124は、記憶インタフェース(例えば、SATA)を介して、又は周辺機器コンポーネント相互接続バス(例えばPCI、PCI Express)のような周辺機器バスを介して、接続できる。タッチセンサ125は、タッチスクリーンセンサ、圧力センサ、又は指紋センサを含み得る。無線トランシーバ126は、Wi−Fiトランシーバ、Bluetooth(登録商標)トランシーバ、又は3G、4G、5G、又はLTE(Long−Term Evolution)トランシーバのようなモバイルネットワークトランシーバであり得る。ファームウェアインタフェース128は、システムファームウェアとの通信を可能にし、例えばUEFI(unified extensible firmware interface)であり得る。ネットワーク制御部134は、有線ネットワークへのネットワーク接続を可能にできる。幾つかの実施形態では、高性能ネットワーク制御部(図示しない)は、インタフェースバス110と結合する。音声制御部146は、一実施形態では、マルチチャネル高分解能音声制御部である。幾つかの実施形態では、システム100は、レガシ(例えば、PS/2(Personal System 2))をシステムに結合する光レガシI/O制御部140を含む。プラットフォーム制御ハブ130は、キーボード及びマウス143の結合、カメラ144、又は他のUSB入力装置のような、1つ以上のUSB(Universal Serial Bus)制御部142接続入力装置にも接続できる。
システム100は、例示的示され、限定的ではなく、異なる方法で構成される他の種類のデータ処理システムも使用されてよいことが理解される。例えば、メモリ制御部116及びプラットフォーム制御ハブ130のインスタンスは、外部グラフィックプロセッサ118のような個別外部グラフィックプロセッサに統合されてよい。一実施形態では、プラットフォーム制御ハブ130及び/又はメモリ制御部116は、1つ以上のプロセッサ102の外部にあってよい。例えば、システム100は、プロセッサ102と通信するシステムチップセット内のメモリ制御ハブ及び周辺機器制御は部として構成されてよい、外部メモリ制御部116及びプラットフォーム制御ハブ130を含み得る。
例えば、CPU、メモリ、及び他のコンポーネントのようなコンポーネントの配置された回路基板(「スレッド(sled)」)は、熱性能の向上のために設計される。幾つかの例では、プロセッサのような処理コンポーネントは、スレッドの上側に配置され、DIMMのような近くのメモリはスレッドの下側に配置される。この設計により提供される向上した気流の結果、コンポーネントは、標準的なシステムより、高い周波数及び高い電力レベルで動作し、それにより性能を向上する。さらに、スレッドは、ラック内の電力及びデータ通信ケーブルと盲目的に嵌合するよう構成され、それにより、それらの素早く取り外し、アップグレードし、再インストールし、及び/又は交換するための能力を向上する。同様に、プロセッサ、アクセラレータ、メモリ、及びデータ記憶ドライブのようなスレッド上に配置された個別コンポーネントは、互いにより遠くに離されることにより、簡単にアップグレードされるよう構成される。説明のための実施形態では、コンポーネントは、さらに、それらの真正さを証明するためにハードウェアアテステーション(attestation)機能を含む。
データセンタは、Ethernet及びOmni−Pathを含む複数の他のネットワークアーキテクチャをサポートする単一のネットワークアーキテクチャ(「ファブリック(fabric)」)を利用できる。スレッドは、標準的なより対線ケーブル(例えば、カテゴリ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 Expressバスのような周辺機器バスのセットを管理する。システムエージェントコア210は、種々のプロセッサコンポーネントのために管理機能を提供する。幾つかの実施形態では、システムエージェントコア210は、種々の外部メモリ装置(図示しない)を管理するために、1つ以上の統合メモリ制御部214を含む。
幾つかの実施形態では、プロセッサコア202A〜202Nのうちの1つ以上は、同時マルチスレッドのサポートを含む。このような実施形態では、システムエージェントコア210は、マルチスレッド処理の間に、コア202A〜202Nを調整し及び動作するためのコンポーネントを含む。システムエージェントコア210は、プロセッサコア202A〜202N及びグラフィックプロセッサ208の電力状態を調整するためのロジック及びコンポーネントを含む電力制御ユニット(power control unit:PCU)を更に含んでよい。
幾つかの実施形態では、プロセッサ200は、グラフィック処理動作を実行するためにグラフィックプロセッサ208を更に含む。幾つかの実施形態では、グラフィックプロセッサ208は、共有キャッシュユニット206のセットと、1つ以上の統合メモリ制御部214を含むシステムエージェントコア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の各々は、共有最終レベルキャッシュ(Last Level Cache)として内蔵メモリモジュール218を使用できる。
幾つかの実施形態では、プロセッサコア202A〜202Nは、同じ命令セットアーキテクチャを実行する同種コアである。別の実施形態では、プロセッサコア202A〜202Nは、命令セットアーキテクチャの観点から異種であり、プロセッサコア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を含み得る。
幾つかの実施形態では、固定機能ブロック230は、例えば低性能及び/又は低電力グラフィックプロセッサ実装において、グラフィックプロセッサコア219内の全てのサブコアにより共有可能な幾何学形状/固定機能パイプライン231を含む。種々の実施形態では、幾何学形状/固定機能パイプライン231は、3D固定機能パイプライン(例えば、後述する図3及び図4のような3Dパイプライン312)、ビデオフロントエンドユニット、スレッド生成部(spawner)及びスレッドディスパッチャ(dispatcher)、及び統合リターンバッファ(例えば、後述する図4の統合リターンバッファ418)を管理する統合リターンバッファマネジャを含む。
一実施形態では、固定機能ブロック230は、グラフィックSoCインタフェース232、グラフィックマイクロコントローラ233、及びメディアパイプライン234も含む。グラフィックSoCインタフェース232は、グラフィックプロセッサコア219とシステムオンチップ集積回路内の他のプロセッサコアとの間のインタフェースを提供する。グラフィックマイクロコントローラ233は、スレッドディスパッチャ、スケジューリング、及び先取り(pre−emption)を含む、グラフィックプロセッサコア219の種々の機能を管理するよう構成可能なプログラマブルサブプロセッサである。メディアパイプライン234(例えば、図3及び図4のメディアパイプライン316)は、画像及びビデオデータを含むマルチメディアデータの復号、符号化、前処理、及び/又は後処理を促進するためのロジックを含む。メディアパイプライン234は、サブコア221A〜221F内の計算又はサンプリングロジックへの要求により、メディア動作を実施する。
一実施形態では、SoCインタフェース232は、グラフィックプロセッサコア219が汎用アプリケーションプロセッサコア(例えばCPU)、及び/又は、共有最終レベルキャッシュメモリ、システムRAM及び/又は内蔵オンチップまたはオンパッケージDRAMを含むメモリ階層構造要素を含むSoC内の他のコンポーネントと通信することを可能にする。SoCインタフェース232は、カメラ画像パイプラインのようなSoC内の固定機能装置と通信することも可能にし、グラフィックプロセッサコア219とSoC内のCPUとの間で共有され得るグローバルメモリアトミックの使用及び/又はその実装を可能にする。SoCインタフェース232は、グラフィックプロセッサコア219のための電力管理制御も実装でき、グラフィックコア219のクロックドメインとSoC内の他のクロックドメインとの間のインタフェースを可能にする。一実施形態では、SoCインタフェース232は、コマンド及び命令をグラフィックプロセッサ内の1つ以上のグラフィックコアの各々に提供するよう構成されるコマンドストリーマ及びグローバルスレッドディスパッチャからのコマンドバッファの受信を可能にする。コマンド及び命令は、メディア動作が実行されるとき、メディアパイプライン234に、又はグラフィック処理動作が実行されるとき、幾何学形状及び固定機能パイプライン(例えば、幾何学形状及び固定機能パイプライン231、幾何学形状及び固定機能パイプライン237)に、ディスパッチされ得る。
グラフィックマイクロコントローラ233は、グラフィックプロセッサコア219のための種々のスケジューリング及び管理タスクを実行するよう構成され得る。一実施形態では、グラフィックマイクロコントローラ233はサブコア221A〜221F内の、実行ユニット(EU)アレイ221A〜221F、224A〜224F内の種々のグラフィック並列エンジンに対してグラフィック及び/又は計算作業負荷スケジューリングを実行できる。このスケジューリングモデルでは、グラフィックプロセッサコア219を含むSoCのCPUコア上で実行するホストソフトウェアは、複数のグラフィックプロセッサドアベル(doorbell)のうちの1つに作業負荷を提出でき、これは、適切なグラフィックエンジン上のスケジューリング動作を呼び出す。スケジューリング動作は、次に実行するべき作業負荷を決定し、作業負荷をコマンドストリーマに提出し、エンジン上で実行している既存の作業負荷を先取りし(pre−empting)、作業負荷の進捗を監視し、作業負荷が完了するとホストソフトウェアに通知することを含む。一実施形態では、グラフィックマイクロコントローラ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は、位置のみのシェーディングで使用するための追加幾何学形状パイプラインを含む。位置のみのシェーディングでは、2つの幾何学形状パイプライン:幾何学形状/固定機能パイプライン238、231内の完全な幾何学形状パイプラインと、追加固定機能ロジック238内に含まれてよい追加幾何学形状パイプラインであるカル(cull)パイプラインと、が存在する。一実施形態では、カルパイプラインは、完全な幾何学形状パイプラインの細分化されたバージョンである。完全なパイプライン及びカルパイプラインは、同じアプリケーションの異なるインスタンスを実行でき、各インスタンスは別個のコンテキストを有する。位置のみのシェーディングは、破棄される三角形の長いカルランを隠すことができ、幾つかのインスタンスにおけるよりも早くシェーディングを完成させる。例えば、一実施形態では、追加固定機能ロジック238内のカルパイプラインロジックは、主アプリケーションと並列に位置シェーダを実行でき、通常、完全なパイプラインより速く重要な結果を生成する。これは、カルパイプラインが、フレームバッファに対してピクセルのラスタライズ及びレンダリングを実行せずに、頂点の位置属性のみをフェッチしシェーディングするからである。カルパイプラインは、生成された重要な結果を用いて、三角形がカリングされるか否かにかかわらず、全ての三角形の可視情報を計算することができる。完全なパイプラインは(これは、本例では、再生パイプラインと呼ばれてよい)、可視情報を消費して、カリングされた三角形をスキップして、最終的にラスタライズ段階に渡される可視三角形のみをシェーディングできる。
一実施形態では、追加行程機能ロジック238は、機械学習トレーニングまたは推定の最適化を含む実装のために、固定機能行列乗算ロジックのような機械学習加速ロジックも含み得る。
各グラフィックサブコア221A〜221F内には、グラフィックパイプライン、メディアパイプライン、又はシェーダプログラムによる要求に応答して、グラフィック、メディア、及び計算動作を実行するために使用され得る実行リソースのセットが含まれる。グラフィックサブコア221A〜221Fは、複数のEUアレイ222A〜222F、224A〜224F、スレッドディスパッチ及びスレッド間通信(thread dispatch and inter−thread communication:TD/IC)ロジック223A〜223F、3D(例えばテクスチャ)サンプラ225A〜225F、メディアサンプラ206A〜206F、シェーダプロセッサ227A〜227F、及び共有ローカルメモリ(shared local memory:SLM)228A〜228Fを含む。EUアレイ222A〜222F、224A〜224Fはそれぞれ、グラフィック、メディア、又は計算シェーダプログラムを含むグラフィック、メディア、又は計算動作のサービス中に浮動小数点及び整数/固定小数点ロジック動作を実行可能な汎用グラフィック処理ユニットである複数の実行ユニットを含む。TD/ICロジック223A〜223Fは、サブコア内の実行ユニットのために、ローカルスレッドディスパッチ及びスレッド制御動作を実行し、サブコアの実行ユニット上で実行しているスレッド間の通信を促進する。3Dサンプラ225A〜225Fは、テクスチャ又は他の3Dグラフィック関連データをメモリへと読み出すことができる。3Dサンプラは、構成されたサンプル状態及び所与のテクスチャに関連付けられたテクスチャフォーマットに基づき、異なる方法でテクスチャデータを読み出すことができる。メディアサンプラ206A〜206Fは、メディアデータに関連付けられた種類及びフォーマットに基づき、同様のリード動作を実行できる。一実施形態では、各グラフィックサブコア221A〜221Fは、代替として、統合3D及びメディアサンプラを含み得る。サブコア221A〜221Fの各々の中の実行ユニット上で実行しているスレッドは、各サブコア内の共有ローカルメモリ228A〜228Fを利用して、スレッドグループ内で実行しているスレッドがオンチップメモリの共通プールを使用して実行できるようにできる。
図2Cは、マルチコアグループ240A〜240Nに構成されたグラフィック処理リソースの専用セットを含むグラフィック処理ユニット(GPU)239を示す。単一のマルチコアグループ240Aのみの詳細が提供されるが、他のマルチコアグループ240B〜240Nはグラフィック処理リソースの同じ又は同様のセットを備えられてよいことが理解される。
図示のように、マルチコアグループ240Aは、グラフィックコアのセット243、テンソルコアのセット244、及び光線追跡コアのセット245を含んでよい。スケジューラ/ディスパッチャ241は、種々のコア243、244、245での実行のためにグラフィックスレッドをスケジューリングしディスパッチする。レジスタファイルのセット242は、グラフィックスレッドを実行するとき、コア243、244、245により使用されるオペランド値を格納する。これらは、例えば、整数値を格納する整数レジスタ、浮動小数点値を格納する浮動小数点レジスタ、パックされたデータ要素(整数及び/又は浮動小数点データ要素)を格納するベクトルレジスタ、及びテンソル/行列値を格納するタイルレジスタを含んでよい。一実施形態では、タイルレジスタは、ベクトルレジスタの結合されたセットとして実装される。
1つ以上の結合されたレベル1(L1)キャッシュ及び共有メモリユニット247は、テクスチャデータ、頂点データ、ピクセルデータ、光線データ、境界ボリュームデータ、等のようなグラフィックデータを各マルチコアグループ240A内にローカルに格納する。1つ以上のテクスチャユニット247は、テクスチャマッピング及びサンプリングのようなテクスチャ動作を実行するためにも使用できる。マルチコアグループ240A〜240Nの全部又はサブセットにより共有されるレベル2(L2)キャッシュ253は、複数の同時グラフィックスレッドのためのグラフィックデータ及び/又は命令を格納する。図示のように、L2キャッシュ253は、複数のマルチコアグループ240A〜240Nに渡り共有されてよい。1つ以上のメモリ制御部248は、システムメモリ(例えばDRAM)及び/又は専用グラフィックメモリ(例えばGDDR6メモリ)であってよいメモリ249にGPU239を結合する。
入力/出力(I/O)回路250は、デジタル信号プロセッサ(DSP)、ネットワーク制御部、又はユーザ入力装置のような1つ以上のI/O装置252にGPU239を結合する。オンチップ相互接続は、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は、同じ仮想アドレス空間を共有してよい。
一実装では、IOMMU251は、仮想化をサポートする。この場合、IOMMU251は、ゲスト/グラフィック仮想アドレスを、ゲスト/グラフィック物理アドレスにマッピングする第1ページテーブルセット、及びゲスト/グラフィック物理アドレスを(例えばシステムメモリ249内の)システム/ホスト物理アドレスにマッピングする第2ページテーブルセットを管理してよい。第1及び第2ページテーブルセットの各々の基本アドレスは、制御レジスタに格納され、コンテキストスイッチでスワップアウトされてよい(例えば、その結果、新しいコンテキストが、関連するページテーブルセットへのアクセスを提供される)。図2Cに図示しないが、コア243、244、245及び/又はマルチコアグループ240A〜240Nの各々は、ゲスト仮想トランスレーションをゲスト物理トランスレーションへ、ゲスト物理トランスレーションをホスト物理トランスレーションへ、及びゲスト仮想トランスレーションをホスト物理トランスレーションへキャッシュするトランスレーションルックアサイドバッファ(translation lookaside buffer:TLB)を含んでよい。
一実施形態では、CPU246、GPU239、及びI/O装置252は、単一の半導体チップ及び/又はチップパッケージに統合される。図示のメモリ249は、同じチップに統合されてよく、又はオフチップインタフェースを介してメモリ制御部248に結合されてよい。一実装では、メモリ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ボリューム内に閉じ込められたプリミティブとの間の交差(intersection)を識別する光線トラバース/交差回路を含む。光線追跡コア245は、(例えばZバッファ又は同様の構成を用いて)深さテスト及びカリングを実行するう回路も含んでよい。一実施形態では、光線追跡コア245は、少なくとも一部がテンソルコア244上で実行されてよい本願明細書に記載される画像ノイズ除去技術と共同して、トラバース及び交差動作を実行する。例えば、一実施形態では、テンソルコア244は、光線追跡コア245により生成されたフレームのノイズ除去を実行するために、深層学習ニューラルネットワークを実装する。しかしながら、CPU246、グラフィックコア243、及び/又は光線追跡コア245は、ノイズ除去及び/又は深層学習アルゴリズムの全部又は一部を実装してもよい。
さらに、上述のように、ノイズ除去への分散型アプローチが利用されてよく、ここで、GPU239は、ネットワーク又は高速相互接続を介して他のコンピューティング装置に結合されるコンピューティング装置の中にある。本実施形態では、相互接続されたコンピューティング装置は、ニューラルネットワーク学習/トレーニングデータを共有して、システム全体が異なる種類の画像フレーム及び/又は異なるグラフィックアプリケーションのためにノイズ除去を実行するために学習する速度を向上する。
一実施形態では、光線追跡コア245は、全てのBVHトラバース及び光線プリミティブ交差を処理して、グラフィックコア243が光線当たり数千個もの命令により過負荷になることを防ぐ。一実施形態では、各光線追跡コア245は、(例えばトラバース動作のために)境界ボックステストを実行する第1専用回路セットと、(例えばトラバースされた光線を交差する)光線三角形交差テストを実行する第2専用回路セットと、を含む。したがって、一実施形態では、マルチコアグループ240Aは、単に光線プローブを出すことができ、光線追跡コア245は、光線トラバース及び交差を独立に実行してヒットしたデータ(例えば、ヒット、ヒット無し、複数のヒット、等)をスレッドコンテキストに返す。他のコア243、244は、他のグラフィック又は計算作業を実行するために自由にされ、その間、光線追跡コア245は、トラバース及び交差動作を実行する。
一実施形態では、各光線追跡コア245は、BVHテスト動作を実行するためのトラバースユニットと、光線プリミティブ交差テストを実行する交差ユニットと、を含む。交差ユニットは、「ヒット」、「ヒット無し」、又は「複数ヒット」応答を生成し、適切なスレッドに提供する。トラバース及び交差動作の間、他のコア(例えば、グラフィックコア243及びテンソルコア244)の実行リソースは、他の形式のグラフィック作業を実行するために自由にされる。
後述する1つの特定の実施形態では、ハイブリッドラスタライズ/光線追跡アプローチが使用され、作業がグラフィックコア243と光線追跡コア245との間で分散される。
一実施形態では、光線追跡コア245(及び/又は他のコア243、244)は、DispatchRaysコマンド及び光線生成、最近接ヒット、任意のヒット、及びミスシェーダを含みオブジェクト毎にシェーダ及びテクスチャのユニークなセットの割り当てを可能にするMicrosoftのDirectX Ray Tracing(DXR)のような光線追跡命令セットのためのハードウェアサポートを含む。光線追跡コア245、グラフィックコア243、及びテンソルコア244によりサポートされ得る別の光線追跡プラットフォームは、Vulkan1.1.85である。しかしながら、本発明の基本原理は、任意の特定の光線追跡ISAに限定されないことに留意する。
一般に、種々のコア245、244、243は、光線生成、最近接ヒット、任意のヒット、光線プリミティブ交差、プリミティブ毎及び下位構造境界ボックス構成、ミス(miss)、ビジット(visit)、及び例外(exception)のための命令/関数を含む光線追跡命令セットをサポートしてよい。より具体的には、一実施形態は、以下の機能を実行するために光線追跡命令を含む。
光線生成(Ray Generation):光線生成命令は、ピクセル、サンプル、又は他のユーザ定義作業割り当て毎に、実行されてよい。
最近接ヒット(Closest Hit):最近接ヒット命令は、光線のシーン内のプリミティブとの最近接交差点の位置を特定するために実行されてよい。
任意のヒット(Any Hit):任意のヒット命令は、光線とシーン内のプリミティブとの間の複数の交差を識別して、場合によっては新しい最近接交差点を識別する。
交差(Intersection):交差命令は、光線プリミティブ交差テストを実行し、結果を出力する。
プリミティブ毎の境界ボックス構成(Per−primitive Bounding box Construction):この命令は、(例えば、新しいBVH又は他の加速データ構造を構築するとき)所与のプリミティブ又はプリミティブ群の周囲に境界ボックスを構築する。
ミス(Miss):光線がシーン内の全ての幾何学形状又はシーンの特定の領域を避ける(miss)ことを示す。
ビジット(Visit):光線がトラバースする子ボリュームを示す。
例外(Exceptions):種々の種類の例外処理(例えば、種々のエラー状態について呼び出される)を含む。
図2Dは、本願明細書に記載の実施形態に従いグラフィックプロセッサ及び/又は計算アクセラレータとして構成できる汎用グラフィック処理ユニット(general purpose graphics processing unit:GPGPU)270のブロック図である。GPGPU270は、ホストプロセッサ(例えば1つ以上のCPU246)及びメモリ271、272と、1つ以上のシステム及び/又はメモリバスを介して相互接続できる。一実施形態では、メモリ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は、ローカル共有メモリ256及びプログラムカウンタ266も含み得る。計算ユニット260A〜260Nは、GPGPU270上で実行するカーネル又はシェーダプログラムの実行中に変化しない定数データを格納するために使用できる定数キャッシュ267に結合できる。一実施形態では、定数キャッシュ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は、仮想現実(VR)ディスプレイ装置又は拡張現実(AR)ディスプレイ装置のような頭部搭載ディスプレイ装置である。幾つかの実施形態では、グラフィックプロセッサ300は、限定ではないがMPEG2のようなMPEG(Moving Picture Experts Group)フォーマット、H.264/MPEG−4 AVC、H.265/HEVCのようなAVC(Advanced Video Coding)フォーマット、AOMedia(Alliance for Open Media)VP8、VP9、並びにSMPTE(Society of Motion Picture & Television Engineers)421M/VC−1、及びJPEGのようなJPEG(Joint Photographic Experts Group)フォーマット、及びMJPEG(Motion JPEG)フォーマットを含む1つ以上のメディア符号化フォーマットに、それらへ、又はそれらの間でメディアを符号化し、復号し、又は変換するためのビデオコーデックエンジン306を含む。
幾つかの実施形態では、グラフィックプロセッサ300は、例えばビット境界ブロック転送を含む2次元(2D)ラスタライズ動作を実行するためのブロック画像転送(block image transfer:BLIT)エンジン304を含む。しかしながら、一実施形態では、2Dグラフィック動作は、グラフィック処理エンジン(graphics processing engine:GPE)310の1つ以上のコンポーネントを用いて実行される。幾つかの実施形態では、GPE310は、3次元(3D)グラフィック動作及びメディア動作を含むグラフィック動作を実行するための計算エンジンである。
幾つかの実施形態では、GPE310は、3Dプリミティブ形状(例えば、長方形、三角形、等)に作用する処理関数を用いて3次元画像及びシーンをレンダリングするような、3D動作を実行する3Dパイプライン312を含む。3Dパイプライン312は、要素内の種々のタスク及び/又は3D/メディアサブシステム315への実行スレッドの生成を実行するプログラマブル及び固定関数要素を含む。3Dパイプライン312は、メディア動作を実行するために使用できるが、GPE310の実施形態は、ビデオ後処理及び画像拡張のようなメディア動作を実行するために特に使用されるメディアパイプライン316も含む。
幾つかの実施形態では、メディアパイプライン316は、ビデオコーデックエンジン306の代わりに又はそれを代表してビデオ復号加速化、ビデオデインターレース、及びビデオ符号化加速化のような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が、GDDR(graphics double data rate)メモリであってよい。メモリ装置326A〜326Dは、一実施形態では、それらのそれぞれのグラフィックエンジンタイル310A〜310Dと共にダイの上にある高帯域幅メモリ(high−bandwidth memory:HBM)モジュールである。一実施形態では、メモリ装置326A〜326Dは、それらそれぞれのグラフィックエンジンタイル310A〜310Dの一番上にスタックされ得るスタック型メモリ装置である。一実施形態では、各グラフィックエンジンタイル310A〜310D及び関連するメモリ326A〜326Dは、図11B〜11Dにおいて詳述される基本ダイ又はベース基板に結合される個別チップレット(chiplet)上に存在する。
グラフィック処理エンジンクラスタ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 Expressバス又は別の種類のホストシステムインタフェースであり得る。
図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と接続され及び/又はそれにより相互接続されてよい。一実施形態では、計算アクセラレータ330は、装置ワイドなキャッシュとして構成され得る大きなL3キャッシュ336を含む。計算アクセラレータ330は、図3Bのグラフィックプロセッサ320と同様の方法で、ホストインタフェース328を介してホストプロセッサ及びメモリとも接続できる。
<グラフィック処理エンジン>
図4は、幾つかの実施形態によるグラフィックプロセッサのグラフィック処理エンジン410のブロック図である。一実施形態では、グラフィック処理エンジン(graphics processing engine:GPE)410は、図3Aに示したGPE310の1つのバージョンであり、図3Bのグラフィックエンジンタイル310A〜310Dを表してもよい。本願明細書の任意の他の図の要素と同じ参照符号(又は名称)を有する図4の要素は、本願明細書の他の場所に記載されたものと同様の任意の方法で動作し又は機能し得るが、このようなものに限定されない。例えば、図3Aの3Dパイプライン312及びメディアパイプライン316が示される。メディアパイプライン316は、GPE410の幾つかの実施形態では任意であり、GPE410内に明示的に含まれなくてよい。例えば、少なくとも一実施形態では、個別メディア及び/又は画像プロセッサが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は、グラフィックコアの1つ以上のブロック(例えば、グラフィックコア415A、グラフィックコア415B)を含む。各ブロックは、1つ以上のグラフィックコアを含む。各グラフィックコアは、グラフィック及び計算動作を実行する汎用及びグラフィック専用実行ロジック、並びに、固定機能テクスチャ処理及び/又は機械学習及び人工知能加速ロジックを含むグラフィック実行リソースのセットを含む。
種々の実施形態では、3Dパイプライン312は、命令を処理し及び実行スレッドをグラフィックコアアレイ414にディスパッチすることにより、頂点シェーダ、幾何学形状シェーダ、ピクセルシェーダ、フラグメントシェーダ、計算シェーダ、又は他のシェーダプログラムのような1つ以上シェーダプログラムを処理する固定機能及びプログラマブルロジックを含み得る。グラフィックコアアレイ414は、これらのシェーダプログラムを処理する際に使用するための実行リソースの統合されたブロックを提供する。グラフィックコアアレイ414のグラフィックコア415A〜414B内の多目的実行ロジック(例えば、実行ユニット)は、種々の3D APIシェーダ言語に対するサポートを含み、複数のシェーダに関連付けられた複数の同時実行スレッドを実行できる。
幾つかの実施形態では、グラフィックコアアレイ414は、ビデオ及び/又は画像処理のようなメディア機能を実行するために実行ロジックを含む。一実施形態では、実行ユニットは、グラフィック処理動作に加えて、並列汎用計算動作を実行する汎用ロジックを含む。汎用ロジックは、図1のプロセッサコア107又は図2Aにおけるようなコア202A〜202N内の汎用ロジックと並列に又はそれと関連して、処理動作を実行できる。
グラフィックコアアレイ414上で実行するスレッドにより生成された出力データは、統合リターンバッファ(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は、図2Bの各サブコア221A〜221Fと共に示されたハードウェアロジックを表してよいスレッド実行ロジック500の概略を示す。図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つ以上の実行ユニット上に要求されたスレッドをインスタンス化するためのロジックを含む。例えば、幾何学形状パイプラインは、頂点、テッセレーション、又は幾何学形状シェーダを、処理のためにスレッド実行ロジックにディスパッチできる。幾つかの実施形態では、スレッドディスパッチャ504は、実行シェーダプログラムからのランタイムスレッド生成要求も処理できる。
幾つかの実施形態では、実行ユニット508A〜508Nは、多くの標準的3Dグラフィックシェーダ命令のためのネイティブサポートを含む命令セットをサポートする。その結果、グラフィックライブラリ(例えば、Direct 3D及びOpenGL)からのシェーダプログラムは最小限の変換で実行される。実行ユニットは、頂点及び幾何学形状処理(例えば、頂点プログラム、幾何学形状プログラム、頂点シェーダ)、ピクセル処理(例えば、ピクセルシェーダ、フラグメントシェーダ)、及び汎用処理(例えば、計算及びメディアシェーダ)をサポートする。実行ユニット508A〜508Nの各々は、SIMD(multi−issue single instruction multiple data)実行が可能であり、マルチスレッド動作は、より高い遅延メモリアクセスにもかかわらず、効率的な実行環境を可能にする。各実行ユニット内の各ハードウェアスレッドは、専用高帯域幅レジスタファイル及び関連する独立スレッド状態を有する。実行は、整数、単及び倍精度浮動小数点演算、SIMDブランチ能力、論理演算、超越(transcendental)演算、及び他の多種多様な演算の可能なパイプラインに対するクロック毎の複数命令(multi−issue per clock)である。メモリ又は共有機能のうちの1つからのデータを待つ間、実行ユニット508A〜508N内の従属ロジックは、必要なデータが返されるまで、待機中スレッドをスリープさせる。待機中スレッドがスリープしている間、ハードウェアリソースは、処理中の他のスレッドに捧げられてよい。例えば、頂点シェーダ動作に関連付けられた遅延の間、実行ユニットは、ピクセルシェーダ、フラグメントシェーダ、又は異なる頂点シェーダを含む別の種類のシェーダプログラムのために動作を実行できる。種々の実施形態は、SIMDの使用の代わりとして、又はSIMDの使用に加えて、SIMT(Single Instruction Multiple Thread)の使用による実行を使用するよう適用できる。SIMDコアまたは動作への言及は、SIMTにも適用でき、又はSIMTと組み合わせてSIMDに適用できる。
実行ユニット508A〜508Nの中の各実行ユニットは、データ要素のアレイで動作する。データ要素の数は、命令の「実行サイズ」又はチャネル数である。実行チャネルは、命令の中のデータ要素アクセス、マスキング、及びフロー制御の論理実行ユニットである。チャネルの数は、特定のグラフィックプロセッサの物理ALU(Arithmetic Logic Unit)又はFPU(Floating Point Unit)の数と独立であってよい。幾つかの実施形態では、実行ユニット508A〜508Nは、整数及び浮動小数点データ型をサポートする。
実行ユニット命令セットは、SIMD命令を含む。種々のデータ要素は、パックされたデータ型としてレジスタに格納でき、実行ユニットは、要素のデータサイズに基づき種々の要素を処理する。例えば、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幅がEU毎に実行でき、限定ではないが、SIMD8、SIMD16、及びSIMD32を含む。各結合グラフィック実行ユニット509A〜509Nは、少なくとも2つの実行ユニットを含む。例えば、結合実行ユニット509Aは、第1EU508A、第2EU508B、及び、第1EU508A及び第2EU508Bに共通である第3スレッド制御ロジック507Aを含む。スレッド実行ロジック507Aは、結合グラフィック実行ユニット509A上で実行されるスレッドを制御して、結合実行ユニット509A〜509N内の各EUが共通命令ポインタレジスタを用いて実行できるようにする。
1つ以上の内部命令キャッシュ(例えば506)は、実行ユニットのためのスレッド命令をキャッシュするために、スレッド実行ロジック500に含まれる。幾つかの実施形態では、1つ以上のデータキャッシュ(例えば512)は、スレッド実行中にスレッドデータをキャッシュするために含まれる。実行ロジック500上で実行しているスレッドは、共有ローカルメモリ511に、明示的に管理されるデータも格納できる。幾つかの実施形態では、サンプラ510は、3D動作のためのテクスチャサンプリング及びメディア動作のためのメディアサンプリングを提供するために含まれる。幾つかの実施形態では、サンプラ510は、サンプリングされたデータを実行ユニットに提供する前にサンプリング処理の間にテクスチャ又はメディアデータを処理するために、専用テクスチャ又はメディアサンプリング機能を含む。
実行中、グラフィック及びメディアパイプラインは、スレッド開始要求をスレッド実行ロジック500へスレッド生成及びディスパッチロジックを介して送信する。幾何学形状オブジェクトのグループが処理されピクセルデータへとラスタライズされると、シェーダプロセッサ502内のピクセルプロセッサロジック(例えば、ピクセルシェーダロジック、フラグメントシェーダロジック、等)は、出力情報を更に計算し、及び出力面(例えば、色バッファ、深さバッファ、ステンシルバッファ、等)に結果を書き込むために呼び出される。幾つかの実施形態では、ピクセルシェーダ又はフラグメントシェーダは、ラスタライズされたオブジェクトに渡り補間されるべき種々の頂点属性の値を計算する。幾つかの実施形態では、シェータプログラム502内のピクセルプロセッサロジックは、次に、API(application programming interface)により供給されるピクセルまたはフラグメントシェーダプログラムを実行する。シェーダプログラムを実行するために、シェーダプロセッサ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浮動小数点ユニット(floating point units:FPU)534、及び一実施形態では、専用レジスタSIMD ALU535のセットを含み得る。GRF524及びARF526は、汎用レジスタファイル、及びグラフィック実行ユニット508の中でアクティブであってよい各々の同時ハードウェアスレッドに関連付けられたアーキテクチャレジスタファイルのセットを含む。一実施形態では、スレッドアーキテクチャ状態毎に、ARF256が維持され、一方で、スレッド実行中に使用されるデータはGRF524に格納される。各スレッドの命令ポインタを含む、各スレッドの実行状態は、ARF256内のスレッド固有レジスタに保持され得る。
一実施形態では、グラフィック実行ユニット508は、SMT(Simultaneous Multi−Threading)及びきめ細かいIMT(Interleaved Multi−Threading)の結合であるアーキテクチャを有する。アーキテクチャは、同時スレッドの目標数及び実行ユニット当たりのレジスタ数に基づき、設計時に微調整可能なモジュール式構成を有する。ここで、実行ユニットリソースは、複数の同時スレッドを実行するために使用されるロジックに渡り分割される。グラフィック実行ユニット508により実行され得る論理スレッドの数は、ハードウェアスレッドの数に限定されず、複数の論理スレッドが各ハードウェアスレッドに割り当て可能である。
一実施形態では、グラフィック実行ユニット508は、それぞれが異なる命令であってよい複数の命令を同時に発行(co−issue)できる。グラフィック実行ユニットスレッド508のスレッド調停部522は、送信ユニット530、ブランチユニット532、又はSIMD FPU534のうちの1つに、実行のために命令をディスパッチできる。各実行スレッドは、GRF524内の128個の汎用レジスタにアクセスできる。ここで、各レジスタは、32ビットのデータ要素のSIMD8要素ベクトルとしてアクセス可能な、32バイトを格納できる。一実施形態では、各実行ユニットスレッドは、GRF524内の4Kバイトへのアクセスを有するが、実施形態はこれに限定されず、他の実施形態では、より多くの又は少ないレジスタリソースが設けられてよい。一実施形態では、グラフィック実行ユニット508は、計算動作を独立して実行できる7個のハードウェアスレッドにパーティションされる。しかしながら、実行ユニット当たりのスレッド数も、実施形態に従い変化し得る例えば、一実施形態では、最大16個のハードウェアスレッドがサポートされる。一実施形態では、7個のスレッドは4Kバイトにアクセスしてよく、GRF524は全部で28Kバイトを格納できる。16個のスレッドは4Kバイトにアクセスしてよく、GRF524は全部で64Kバイトを格納できる。柔軟なアドレッシングモードは、効率的に幅広なレジスタを構築するために又はストライド(stride)された長方形ブロックデータ構造を表すために、レジスタが一緒にアドレスされることを許容できる。
一実施形態では、メモリ動作、サンプラ動作、及び他のより長い遅延のシステム通信は、メッセージ通過送信ユニット530により実行される「送信」命令によりディスパッチされる。一実施形態では、ブランチ命令は、SIMDダイバージェンス及び最終コンバージェンスを促進するために、専用ブランチユニット532へディスパッチされる。
一実施形態では、グラフィック実行ユニット508は、浮動小数点演算を実行するために、1つ以上のSIMD浮動小数点ユニット(FPU)534を含む。一実施形態では、FPU534は、整数計算もサポートする。一実施形態では、FPU534は、最大M個の32ビット浮動小数点(又は整数)演算をSIMD実行し、又は最大2M個の16ビット整数又は16ビット浮動小数点演算をSIMD実行できる。一実施形態では、FPUのうちの少なくとも1つは、高スループットの超越(transcendental)数学関数及び倍精度54ビット浮動小数点をサポートするために、拡張計算能力を提供する。幾つかの実施形態では、8ビット整数SIMD ALU535のセットも存在し、機械学習計算に関連付けられた動作を実行するために特に最適化されてよい。
幾つかの実施形態では、グラフィック実行ユニット508の複数のインスタンスのアレイは、グラフィックサブコアグループ(例えばサブスライス)の中でインスタンス化できる。拡張性のために、製品アーキテクチャは、サブコアグループ値の正確な数の実行ユニットを選択できる。一実施形態では、実行ユニット508は、複数の実行チャネルに跨がり命令を実行できる。更なる実施形態では、グラフィック実行ユニット508上で実行される各スレッドは、異なるチャネル上で実行される。
図6は、一実施形態による追加実行ユニット600を示す。実行ユニット600は、例えば、図3Cのような計算エンジンタイル340A〜340Dで使用するための計算最適化実行ユニットであってよいが、これは限定ではない。実行ユニット600の変形が、図3Bのグラフィックエンジンタイル310A〜310Dで使用されてもよい。一実施形態では、実行ユニット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)アレイ612及び算術ユニット613も含み得る。シストリックアレイ612は、ベクトル又は他のデータ並列演算をシストリック方式で実行するために使用できるW幅及びD深さのデータ処理ユニットネットワークを含む。一実施形態では、シストリックアレイ612は、行列ドット積演算のような行列演算を実行するよう構成できる。一実施形態では、シストリックアレイ612は、16ビット浮動小数点演算、及び8ビット及び4ビット整数演算をサポートする。一実施形態では、シストリックアレイ612は、機械学習動作を加速化するよう構成できる。このような実施形態では、シストリックアレイ612は、b浮動小数点(bfloat)16ビット浮動小数点フォーマットをサポートするよう構成できる。一実施形態では、算術ユニット613は、ALUユニット611より効率的且つ低電力の方法で、算術演算の固有サブセットを実行するために含まれ得る。算術ユニット613は、他の実施形態により提供されたグラフィック処理エンジンの共有機能ロジックの中に見られる算術ロジックの変形を含み得る。一実施形態では、算術ユニット613は、32ビット及び64ビット浮動小数点演算を実行するよう構成できる。
スレッド制御ユニット601は、実行ユニット内のスレッドの実行を制御するためのロジックを含む。スレッド制御ユニット601は、実行ユニット600内のスレッドの実行を開始し、停止し、及び先取り(preempt)するためのスレッド調停ロジックを含み得る。スレッド状態ユニット602は、実行ユニット600上で実行するよう割り当てられたスレッドのスレッド状態を格納するために使用できる。実行ユニット600内のスレッド状態を格納することは、これらのスレッドがブロックされ又はアイドルになったとき、スレッドの高速な先取りを可能にする。命令フェッチ/プリフェッチユニット603は、上位レベルの実行ロジック(例えば、図5Aの命令キャッシュ506)から命令をフェッチできる。命令フェッチ/プリフェッチユニット603は、現在実行中のスレッドの分析に基づき、命令キャッシュにロードされるべき命令に対するプリフェッチ要求も発行できる。命令復号ユニット604は、計算ユニットにより実行されるべき命令を復号するために使用できる。一実施形態では、命令復号ユニット604は、複雑な命令を成分マイクロ演算に復号するために2次デコーダとして使用できる。
実行ユニット600は、実行ユニット600上で実行しているハードウェアスレッドにより使用可能なレジスタファイル606を更に含む。レジスタファイル606内のレジスタは、実行ユニット600の計算ユニット610内の複数の同時スレッドを実行するために使用されるロジックに渡り分割できる。グラフィック実行ユニット600により実行され得る論理スレッドの数は、ハードウェアスレッドの数に限定されず、複数の論理スレッドが各ハードウェアスレッドに割り当て可能である。レジスタファイル606のサイズは、サポートされるハードウェアスレッドの数に基づき、実施形態により変化し得る。一実施形態では、レジスタの名称変更は、ハードウェアスレッドにレジスタを動的に割り当てるために使用されてよい。
図7は、幾つかの実施形態によるグラフィックプロセッサ命令フォーマット700を示すブロック図である。1つ以上の実施形態では、グラフィックプロセッサ実行ユニットは、複数のフォーマットの命令を有する命令セットをサポートする。実線ボックスは、通常、実行ユニット命令に含まれるコンポーネントを示し、破線は、任意の又は命令のサブセットにのみ含まれるコンポーネントを含む。幾つかの実施形態では、記載された及び図示された命令フォーマット700は、命令が処理されると命令復号から生じるマイクロ演算と反対に、それらが実行ユニットに供給される命令であるという点で、マクロ命令である。
幾つかの実施形態では、グラフィックプロセッサ実行ユニットは、本来、128ビット命令フォーマット710の命令をサポートする。64ビットのコンパクト命令フォーマット730は、選択された命令、命令オプション、及びオペランドの数に基づき、幾つかの命令で利用可能である。本来の(native)128ビット命令フォーマット710は、全ての命令オプションへのアクセスを提供し、幾つかのオプション及び動作は、64ビットフォーマット730において制限される。64ビットフォーマット730で利用可能なネイティブ命令は、実施形態により変化する。幾つかの実施形態では、命令は、部分的にインデックスファイル713の中のインデックス値のセットを用いて小型化される。実行ユニットハードウェアは、インデックス値に基づき小型化テーブルのセットを参照し、小型化テーブルの出力を用いて、128ビット命令フォーマット710のネイティブ命令を再構成する。他のサイズ及びフォーマットの命令が使用できる。
各フォーマットについて、命令オペコード712は、実行ユニットが実行すべき動作を定義する。実行ユニットは、各オペランドの複数のデータ要素に渡り、各命令を並行して実行する。例えば、加算(add)命令に応答して、実行ユニットは、テクスチャ要素またはピクチャ要素を表す各色チャネルに渡り同時加算演算を実行する。デフォルトで、実行ユニットは、オペランドの全てのデータチャネルに渡り、各命令を実行する。幾つかの実施形態では、命令制御フィールド714は、チャネル選択(例えば、予測)及びデータチャネル順(例えば、スウィズル)のような、特定の実行オプションに対する制御を有効にする。128ビット命令フォーマット710の命令では、実行サイズ(exec−size)フィールド716は、並列に実行されるデータチャネルの数を制限する。幾つかの実施形態では、実行サイズフィールド716は、64ビット小型命令フォーマット730での使用のために利用できない。
幾つかの実行ユニット命令は、2個のソースオペランド、src0 720、src1 722と、1個の宛先718と、を含む最大3個のオペランドを有する。幾つかの実施形態では、実行ユニットは、宛先のうちの1つが暗示される2重宛先命令をサポートする。データ操作命令は、第3ソースオペランド(例えば、SRC2 724)を有することができ、命令オペコード712は、ソースオペランドの数を決定する。命令の最後のソースオペランドは、命令と共に渡される中間(例えば、ハードコード)値であり得る。
幾つかの実施形態では、128ビット命令フォーマット710は、例えば直接レジスタアドレスモード又は間接レジスタアドレスモードが使用されるかを指定するアクセス/アドレスモードフィールド726を含む。直接レジスタアドレスモードが使用されるとき、1つ以上のオペランドのレジスタアドレスは、命令の中のビットにより直接提供される。
幾つかの実施形態では、128ビット命令フォーマット710は、命令のアドレスモード及び/又はアクセスモードを指定するアクセス/アドレスモードフィールド726を含む。一実施形態では、アクセスモードは、命令のデータアクセスアライメントを定めるために使用される。幾つかの実施形態は、16バイトに揃えられたアクセスモード及び1バイトに揃えられたアクセスモードを含むアクセスモードをサポートする。ここで、アクセスモードのバイトアライメントは、命令オペランドのアクセスアライメントを決定する。例えば、第1モードでは、命令は、送信元及び宛先オペランドのためにバイトに揃えられたアドレッシングを使用してよく、第2モードでは、命令は、全ての送信元及び宛先オペランドのために16バイトに揃えられたアドレッシングを使用してよい。
一実施形態では、アクセス/アドレスモードフィールド726のアドレスモード部分は、命令が直接又は間接アドレッシングを使用すべきかを決定する。直接レジスタアドレッシングモードが使用されるとき、命令の中のビットは、1つ以上のオペランドのレジスタアドレスを直接提供する。間接レジスタアドレッシングモードが使用されるとき、1つ以上のオペランドのレジスタアドレスは、アドレスレジスタ値及び命令の中のアドレス中間フィールドに基づき計算されてよい。
幾つかの実施形態では、命令は、オペコード712のビットフィールドに基づきグループ化され、オペコードデコーダ740を簡略化する。8ビットオペコードでは、ビット4、5、及び6は、実行ユニットがオペコードのタイプを決定することを可能にする。図示の詳細なオペコードグループ化は単に一例である。幾つかの実施形態では、移動(move)及び論理(logic)オペコードグループ724は、データ移動及び論理命令(例えば、移動(mov)、比較(comp))を含む。幾つかの実施形態では、移動及び論理グループ742は、5個の最上位ビット(most significant bits:MSB)を共有し、移動(mov)命令は0000xxxxbの形式であり、論理命令は0001xxxxbの形式である。フロー制御命令グループ744(例えば、call、ジャンプ(jmp))は、0010xxxxb(例えば、0x20)の形式の命令を含む。種々雑多な命令グループ746は、0011xxxxb(例えば、0x30)の形式の同期命令(例えば、待機(wait)、送信)を含む。並列算術命令グループ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は、座標空間変換及び各頂点に照明(lighting)演算を実行する。幾つかの実施形態では、頂点フェッチャー805及び頂点シェーダ807は、スレッドディスパッチャ831を介して実行ユニット852A〜852Bへ実行スレッドをディスパッチすることにより、頂点処理命令を実行する。
幾つかの実施形態では、実行ユニット852A〜852Bは、グラフィック及びメディア動作を実行するための命令セットを有するベクトルプロセッサのアレイである。幾つかの実施形態では、実行ユニット852A〜852Bは、各アレイに専用の又はアレイ間で共有される付属L1キャッシュ851を有する。キャッシュは、データキャッシュ、命令キャッシュ、又は異なるパーティションにデータ及び命令を含むようパーティションされた単一のキャッシュとして構成できる。
幾つかの実施形態では、幾何学形状パイプライン820は、3Dオブジェクトのハードウェアにより加速化されたテッセレーションを実行するテッセレーションコンポーネントを含む。幾つかの実施形態では、プログラマブルハル(hull)シェーダ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を含む。幾つかの実施形態では、ラスタライザロジックは、固定機能三角形及び線ラスタライズを実行するために、ウインドウ化/マスク化(windower/masker)ユニットを含む。関連するレンダキャッシュ878及び深さキャッシュ879は、幾つかの実施形態でも利用可能である。ピクセル動作コンポーネント877は、ピクセルに基づく演算をデータに対して実行する。しかしながら、幾つかのインスタンスでは、2D動作に関連付けられたピクセル動作(例えば、ブレンディング(blending)によるビットブロック画像転送)が、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つのAPI(application programming interface)に固有ではない。幾つかの実施形態では、グラフィックプロセッサのためのドライバソフトウェアは、特定のグラフィック又はメディアライブラリに固有のAPI呼び出しを、グラフィックプロセッサにより処理可能なコマンドに変換する。幾つかの実施形態では、OpenGL(Open Graphics Library)、OpenCL(Open Computing Language)、及び/又はVulkanグラフィック及び計算APIのためのサポートが提供され、これら全てはKhronos Groupから提供される。幾つかの実施形態では、Microsoft CorporationのDirect3Dライブラリのためのサポートも提供されてよい。幾つかの実施形態では、これらのライブラリの組み合わせがサポートされてよい。OpenCV(Open Source Computer Vision Library)のためのサポートも提供されてよい。互換性のある3Dパイプラインを有する将来のAPIも、作用来のAPIのパイプラインからグラフィックプロセッサのパイプラインへのマッピングを行うことができるならば、サポートされ得る。
<グラフィックパイプラインプログラミング>
図9Aは、幾つかの実施形態によるグラフィックプロセッサコマンドフォーマット900を示すブロック図である。図9Bは、一実施形態によるグラフィックプロセッサコマンドシーケンス910を示すブロック図である。図9Aの実線ボックスは、通常、グラフィックコマンドに含まれるコンポーネントを示し、破線は、任意の又はグラフィックコマンドのサブセットにのみ含まれるコンポーネントを含む。図9Aの例示的なグラフィックプロセッサコマンドフォーマット900は、クライアント902、コマンド演算コード(オペコード)904、及びコマンドのためのデータ906を識別するためのデータフィールドを含む。サブオペコード905及びコマンドサイズ908も、幾つかのコマンドに含まれる。
幾つかの実施形態では、クライアント902は、コマンドデータを処理するグラフィック装置のクライアントユニットを指定する。幾つかの実施形態では、グラフィックプロセッサコマンドパーサは、各コマンドのクライアントフィールドを調べて、コマンドの更なる処理を条件付け(condition)、コマンドデータを適切なクライアントユニットへルーティングする。幾つかの実施形態では、グラフィックプロセッサクライアントユニットは、メモリインタフェースユニット、レンダユニット、2Dユニット、3Dユニット、及びメディアユニットを含む。各クライアントユニットは、コマンドを処理する対応する処理パイプラインを有する。コマンドがクライアントユニットにより受信されると、クライアントユニットは、オペコード904、及び存在する場合にはサブオペコード905を読み出し、実行すべき動作を決定する。クライアントユニットは、データフィールド906内の情報を用いてコマンドを実行する。幾つかのコマンドについては、コマンドのサイズを指定するために、明示的なコマンドサイズ908が期待される。幾つかの実施形態では、コマンドパーサは、コマンドオペコードに基づき、コマンドのうちの少なくとも幾つかのサイズを自動的に決定する。幾つかの実施形態では、コマンドは、ダブルワードの複数倍により揃えられる。他のコマンドフォーマットが使用できる。
図9Bのフロー図は、例示的なグラフィックプロセッサコマンドシーケンスを示す。幾つかの実施形態では、グラフィックプロセッサの一実施形態を特徴付けるデータ処理システムのソフトウェア又はファームウェアは、グラフィック動作のセットを設定し、実行し、及び終了するために示されるコマンドシーケンスのバージョンを使用する。例示的なコマンドシーケンスが、単に説明の目的で、示され説明され、実施形態は、これらの特定のコマンドに又はこのコマンドシーケンスに限定されない。さらに、コマンドは、コマンドシーケンスの中のコマンドのバッチとして発行されてよい。その結果、グラフィックプロセッサは、少なくとも部分的に同時にコマンドのシーケンスを処理する。
幾つかの実施形態では、グラフィックプロセッサコマンドシーケンス910は、パイプラインフラッシュコマンド912により開始してよく、任意のアクティブなグラフィックパイプラインに、パイプラインの現在保留中のコマンドを完了させる。幾つかの実施形態では、3Dパイプライン922及びメディアパイプライン924は、同時に動作しない。パイプラインフラッシュは、アクティブなグラフィックパイプラインに任意の保留中のコマンドを完了させるために実行される。パイプラインフラッシュに応答して、グラフィックプロセッサのためのコマンドパーサは、アクティブな描画エンジンが保留中の動作を完了し、関連するリードキャッシュが無効にされるまで、コマンド処理を一時停止する。任意で、「ダーティ(dirty)」とマークされたレンダキャッシュの中の任意のデータは、メモリにフラッシュされ得る。幾つかの実施形態では、パイプラインフラッシュコマンド912は、パイプライン同期化のために、又はグラフィックプロセッサを低電力状態に置く前に、使用できる。
幾つかの実施形態では、パイプライン選択コマンド913は、コマンドシーケンスがグラフィックプロセッサにパイプライン間で明示的に切り替えるよう要求するとき、使用される。幾つかの実施形態では、パイプライン選択コマンド913は、コンテキストが両方のパイプラインのためのコマンドを発行するべきではない限り、パイプラインコマンドを発行する前に、実行コンテキスト内で1回だけ要求される。幾つかの実施形態では、パイプラインフラッシュコマンド912は、パイプライン選択コマンド913を介してパイプライン切り替えの直前に要求される。
幾つかの実施形態では、パイプライン制御コマンド914は、動作のためにグラフィックパイプラインを構成し、3Dパイプライン及びメディアパイプライン924をプログラムするために使用される。幾つかの実施形態では、パイプライン制御コマンド914は、アクティブなパイプラインのパイプライン状態を構成する。一実施形態では、パイプライン制御コマンド914は、パイプライン同期化のために、及びコマンドのバッチを処理する前にアクティブなパイプライン内の1つ以上のキャッシュメモリからのデータを削除する(clear)ために、使用される。
幾つかの実施形態では、リターンバッファ状態コマンド916は、データを書き込むよう、それぞれのパイプラインのリターンバッファのセットを構成するために使用される。幾つかのパイプライン動作は、処理中に動作が中間データを書き込む1つ以上のリターンバッファの割り当て、選択、又は構成を要求する。幾つかの実施形態では、グラフィックプロセッサは、出力データを格納するために及びスレッド間通信を実行するためにも、1つ以上のリターンバッファを使用する。幾つかの実施形態では、リターンバッファ状態916は、パイプライン動作のセットのために使用するリターンバッファのサイズ及び数を選択することを含む。
コマンドシーケンスの中の残りのコマンドは、動作のためのアクティブなパイプラインに基づき異なる。パイプライン決定902に基づき、コマンドシーケンスは、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つ以上の汎用処理コアにより提供されるリソースを用いて全体又は部分的に実行され得る。一実施形態では、メディアパイプラインは、GPGPU(general−purpose graphics processor unit)動作のための要素も含む。ここで、グラフィックプロセッサは、グラフィックプリミティブのレンダリングに明示的に関連しない計算シェーダプログラムを使用して、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のHLSL(High−Level Shader Language)、GLSL(OpenGL Shader Language)等のような高レベルシェーダ言語であってよい。アプリケーションは、汎用プロセッサコア1034による実行に適した機械語の実行可能命令1014も含む。アプリケーションは、頂点データにより定められるグラフィックオブジェクト1016も含む。
幾つかの実施形態では、オペレーティングシステム1020は、Microsoft CorporationのMicrosoft(登録商標)Windows(登録商標)オペレーティングシステム、独自UNIX(登録商標)様オペレーティングシステム、又はLinux(登録商標)カーネルの変形を使用するオープンソースUNIX様オペレーティングシステムである。オペレーティングシステム1020は、Direct3D API、OpenGL API、又はVulkan APIのようなグラフィックAPI1022をサポートできる。Direct3D APIが使用されているとき、オペレーティングシステム1020は、HLSLの任意のシェーダ命令1012を低レベルのシェーダ言語にコンパイルするために、フロントエンドコンパイラ1024を使用する。コンパイルは、JIT(just−in−time)コンパイルであってよく、又はアプリケーションはシェーダプレコンパイルを実行できる。幾つかの実施形態では、高レベルシェーダは、3Dグラフィックアプリケーション1010のコンパイル中に、低レベルシェーダにコンパイルされる。幾つかの実施形態では、シェーダ命令1012は、Vulkan APIにより使用されるSPIR(Standard Portable Intermediate Representation)のバージョンのような中間形式で提供される。
幾つかの実施形態では、ユーザモードグラフィックドライバ1026は、シェーダ命令1012をハードウェア固有表現に変換するためのバックエンドシェーダコンパイラ1027を含む。OpenGL APIが使用されているとき、GLSL高レベル言語のシェーダ命令1012は、コンパイルのためにユーザモードグラフィックドライバ1026に渡される。幾つかの実施形態では、ユーザモードグラフィックドライバ1026は、オペレーティングシステムカーネルモード機能1028を使用して、カーネルモードグラフィックドライバ1029と通信する。幾つかの実施形態では、カーネルモードグラフィックドライバ1029は、コマンド及び命令をディスパッチするために、グラフィックプロセッサ1032と通信する。
<IPコア実装>
少なくとも1つの実施形態の1つ以上の太陽は、プロセッサのような集積回路内のロジックを表す及び/又は定める機械可読媒体に格納された代表的コードにより実装されてよい。例えば、機械可読媒体は、プロセッサ内の種々のロジックを表す命令を含んでよい。機械により読み取られると、命令は、機械に、本願明細書に記載の技術を実行するようにさせてよい。このような表現は、「IPコア」として知られ、集積回路の構造を記述するハードウェアモデルのような、有形の機械可読媒体に格納され得る集積回路のためのロジックの再利用可能ユニットである。ハードウェアモデルは、ハードウェアモデルを集積回路を製造する製造機械にロードする種々の顧客又は製造設備に供給されてよい。集積回路は、回路が本願明細書に記載の実施形態のうちのいずれかに関連して記載された動作を実行するように製造されてよい。
図11Aは、一実施形態による動作を実行するための集積回路を製造するために使用され得る例示的なIPコア開発システム1100を示すブロック図である。IPコア開発システム1100は、より大きな設計に組み込むことができ又は集積回路全体(例えばSOC集積回路)を構成するために使用可能なモジュール式の再利用可能な設計を生成するために使用されてよい。設計設備1130は、高レベルプログラミング言語(例えば、C/C++)でIPコア設計のソフトウェアシミュレーション1110を生成できる。ソフトウェアシミュレーション1110は、シミュレーションモデル1112を用いてIPコアの振る舞いを設計し、テストし、及び検証するために使用できる。シミュレーションモデル1112は、機能、振る舞い、及び/又はタイミングシミュレーションを含んでよい。RTL(register transfer level)設計1115は、次に、シミュレーションモデル1112から生成され又は合成され得る。RTL設計1115は、モデル化されたデジタル信号を用いて実行される関連するロジックを含むハードウェアレジスタ間のデジタル信号のフローをモデル化する集積回路の振る舞いの抽象である。RTL設計1115に加えて、論理レベル又はトランジスタレベルの低レベル設計も生成され、設計され、又は合成されてよい。したがって、初期設計及びシミュレーションの特定の詳細は変化してよい。
RTL設計1115又は均等物は、設計設備によりハードウェアモデル1120に更に合成されてよい。ハードウェアモデル1120は、ハードウェア記述言語(HDL)又は何らかの他の物理設計データの表現であってよい。HDLは、IPコア設計を検証するために更にシミュレートされ又はテストされてよい。IPコア設計は、不揮発性メモリ1140(例えば、ハードディスク、フラッシュメモリ、又は任意の不揮発性記憶媒体)を用いて第三者製造設備1165への分配のために格納できる。代替として、IPコア設計は、有線接続1150又は無線接続1160を介して(例えばインターネットを介して)送信されてよい。製造設備1165は、次に、IPコア設計に少なくとも部分的に基づく集積回路を製造してよい。製造された集積回路は、本願明細書に記載の少なくとも1つの実施形態に従う動作を実行するよう構成できる。
図11Bは、本願明細書に記載の幾つかの実施形態による、集積回路パッケージ部品1170の側面断面図を示す。集積回路パッケージ部品1170は、本願明細書に記載のような1つ以上のプロセッサ又はアクセラレータ装置の一実装を示す。パッケージ部品1170は、基板1180に接続されたハードウェアロジック1172、1174の複数のユニットを含む。ロジック1172、1174は、少なくとも部分的に構成可能ロジック又は固定機能ロジックハードウェアに実装されてよく、本願明細書に記載のプロセッサコア、グラフィックプロセッサ、又は他のアクセラレータ装置のうちのいずれかの1つ以上の部分を含み得る。ロジック1172、1174の各ユニットは、半導体ダイの中に実装され、相互接続構造1173を介して基板1180に結合され得る。相互接続構造1173は、ロジック1172、1174と基板1180との間で電気信号をルーティングするよう構成されてよく、限定ではないがバンプ又はピラーのような相互接続構造を含み得る。幾つかの実施形態では、相互接続構造1173は、例えば、ロジック1172、1174の動作に関連付けられた入力/出力(I/O)信号及び/又は電力又はグランド信号のような電気信号をルーティングするよう構成されてよい。幾つかの実施形態では、基板1180は、樹脂に基づく積層基板である。基板1180は、他の実施形態では、他の適切な種類の基板を含んでよい。パッケージ部品1170は、パッケージ相互接続1183を介して他の電気装置に接続され得る。パッケージ相互接続1183は、電気信号をマザーボード、他のチップセット、又はマルチチップモジュールのような他の電気装置へルーティングするために、基板1180の表面に結合されてよい。
幾つかの実施形態では、ロジック1172、1174のユニットは、ロジック1172、1174の間で電気信号をルーティングするよう構成されるブリッジ1182に電気的に結合される。ブリッジ1182は、電気信号のルートを提供する高密度相互接続構造であってよい。ブリッジ1182は、ガラス又は適切な半導体材料からなるブリッジ基板を含んでよい。電気的ルーティング機能は、ロジック1172、1174の間のチップ間接続を提供するためにブリッジ基板上に形成できる。
1つのロジックユニット1172、1174、及びブリッジ1182が示されるが、本願明細書に記載の実施形態は、より多くの又は少ないロジックユニットを1つ以上のダイの上に含んでよい。1つ以上のダイは、ゼロ個以上のブリッジにより接続されてよく、ロジックが単一のダイに含まれるとき、ブリッジ1182が排除されてよい。代替として、複数のダイまたはロジックユニットは、1つ以上のブリッジにより接続され得る。さらに、複数の倫理ユニット、ダイ、及びブリッジが、3次元構成を含む他の可能な構成で一緒に接続できる。
図11Cは、基板1180(例えば、基本ダイ)に接続されるハードウェアロジックチップレットの複数のユニットを含むパッケージ部品1190を示す。本願明細書に記載のようなグラフィック処理ユニット、並列プロセッサ、及び/又は計算アクセラレータは、個別に製造される多様なシリコンチップレットで構成され得る。この文脈では、チップレットは、他のチップレットとより大きなパッケージに組み立てることのできる個別ロジックユニットを含む少なくとも部分的にパッケージされた集積回路である。異なるIPコアロジックを有するチップレットの多様なセットは、単一の装置へと組み立て可能である。さらに、チップレットは、アクティブインタポーザ技術を用いて基本ダイ又は基本チップレットへと主席可能である。本願明細書に記載の概念は、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は、幾つかの実施形態では、EMIB(Embedded Multi−die Interconnect Bridge)である。幾つかの実施形態では、ブリッジ1187は、単に、あるチップレットから別のチップレットへの直接接続であってよい。
基板1180は、I/O1191、キャッシュメモリ1192、及び他のハードウェアロジック1193のためのハードウェアコンポーネントを含み得る。ファブリック1185は、基板1180内の種々のロジックチップレット及びロジック1191、1193の間の通信を可能にするために、基板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は、本願明細書に記載の他のブリッジ相互接続と同様であり例えばEMIBであってよいブリッジ相互接続1197を介して結合できる。メモリチップレットは、ブリッジ相互接続を介してロジック又はI/Oチップレットにも接続され得る。I/O及びロジックチップレットは、相互接続ファブリックを介して通信できる。基本チップレットは、それぞれ、ロジック又はI/O又はメモリ/キャッシュのうちの1つのための標準化フォーマットの1つ以上のスロットをサポートできる。
一実施形態では、SRAM及び電力分配回路は、基本チップレットの上にスタックされる相互接続可能なチップレット1195と異なるプロセス技術を使用して製造され得る基本チップレット1196、1198のうちの1つ以上の中に製造され得る。例えば、基本チップレット1196、1198は、より大規模なプロセス技術を用いて製造でき、一方で、相互接続可能なチップレットは、より小規模なプロセス技術を用いて製造できる。相互接続可能なチップレット1195のうちの1つ以上は、メモリ(例えば、DRAM)チップレットであってよい。パッケージ部品1194を使用する製品について目標とされる電力、及び/又は性能に基づき、パッケージ部品1194のために異なるメモリア密度が選択できる。さらに、異なる数の基本ユニット種類を有するロジックチップレットが、製品について目標とされる電力及び/又は性能に基づき、組み立て時に選択できる。さらに、異なる種類のIPロジックコアを含むチップレットは、相互接続可能なチップレットスロットに挿入でき、異なる技術のIPブロックを混合し及び調和させることのできるハイブリッドプロセッサ設計を可能にする。
<例示的なシステムオンチップ集積回路>
図12〜13は、本願明細書に記載の種々の実施形態による、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内で使用するための例示的なグラフィックプロセッサを示すブロック図である。図13は、一実施形態による、1つ以上のIPコアを用いて製造され得るシステムオンチップ集積回路の例示的なグラフィックプロセッサ1310を示す。図14は、一実施形態による、1つ以上のIPコアを用いて製造され得るシステムオンチップ集積回路の追加の例示的なグラフィックプロセッサ1340を示す。図13のグラフィックプロセッサ1310は、低電力グラフィックプロセッサコアの一例である。図14のグラフィックプロセッサ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は、Direct3D APIにおいて提供されるようなピクセルシェーダプログラムと同様の動作を実行するために使用されてよい、OpenGL APIにおいて提供されるようなフラグメントシェーダプログラムを実行するために最適化される。
グラフィックプロセッサ1310は、1つ以上のメモリ管理ユニット(memory management unit:MMU)1320A〜1320B、キャッシュ1325A〜1325B、及び回路相互接続1330A〜1330Bを更に含む。1つ以上のMMU1320A〜1320Bは、仮想から物理へのアドレスマッピングを、1つ以上のキャッシュ1325A〜1325Bに格納された頂点又は画像/テクスチャデータに加えてメモリに格納された頂点又は画像/テクスチャデータを参照し得る頂点プロセッサ1305及び/又はフラグメントプロセッサ1315A〜1315Nを含むグラフィックプロセッサ1310に提供する。一実施形態では、1つ以上のMMU1320A〜1320Bは、図12の1つ以上のアプリケーションプロセッサ1205、画像プロセッサ1215、及び/又はビデオプロセッサ1220に関連付けられた1つ以上のMMUを含む、システム内の他のMMUと同期化されてよい。その結果、各プロセッサ1205〜1220は、共有又は統合仮想メモリシステムに参加できる。1つ以上の回路相互接続1330A〜1330Bは、グラフィックプロセッサ1310が実施形態に従いSoC内の他のIPコアとSoCの内部バスを介して又は直接接続を介して相互作用することを可能にする。
図14に示すように、グラフィックプロセッサ1340は、図13Aの1つ以上のMMU1320A〜1320B、キャッシュ1325A〜1325B、及びグラフィックプロセッサ1310の回路相互接続1330A〜1330Bを含む。グラフィックプロセッサ1340は、統一シェーダコアアーキテクチャを提供する1つ以上のシェーダコア1355A〜1355N(例えば、1455A、1355B、1355C、1355D、1355E、1355F〜1355N−1、1355N)を含む。統一シェーダコアアーキテクチャでは、単一のコア又は種類又はコアが、頂点シェーダ、フラグメントシェーダ、及び/又は計算シェーダを実装するためのシェーダプログラムコードを含む全ての種類のプログラマブルシェーダコードを実行できる。存在するシェーダコアの正確な数は、実施形態及び実装の間で変化し得る。さらに、グラフィックプロセッサ1340は、実行スレッドを1つ以上のシェーダコア1355A〜1355Nにディスパッチするスレッドディスパッチャとして動作するコア間タスクマネジャ1345、及びタイルに基づくレンダリングのためのタイリング動作を加速化するタイリングユニット1358を含む。タイルに基づくレンダリングでは、シーンのレンダリング動作は、画像空間において細分化され、例えばシーン内のローカル空間コヒーレンスを利用し、又は内部キャッシュの使用を最適化する。

<ローカル及びクラウドに基づくグラフィック処理リソースを用いるリアルタイムグラフィック処理のための機器及び方法>
リモートグラフィックサーバは、標準的なユーザのゲーム装置よりも遙かに速く画像フレームをレンダリングできるが、ネットワークにより引き起こされる遅延及びデータ圧縮に起因する品質変動のような、リアルタイムのゲームユーザ経験に影響を与え得る他の課題が存在する。拡張現実(augmented reality:AR)及び仮想現実(virtual reality:VR)ゲームのような特定種類のゲームでは、必要な遅延を達成するために、高性能ネットワーキングプラットフォームが要求される。
本発明の実施形態は、グラフィックアプリケーションにリモート接続を管理することを要求することなく、(例えば、低遅延計算動作のための)ローカルGPUと他の作業をリモート処理リソースにオフロードすることとの間の作業負荷を分離することにより、遅延を改善する。
一実施形態では、リモートGPUサポートは、オペレーティングシステム内の仮想グラフィックアダプタとして(例えば、1つ以上の「ゴースト」GPUとして)提示される。この統合のために、アプリケーションは、現在のグラフィック及び計算APIを使用して、物理GPUと同じように、ゴーストGPUにアクセスできる。ローカルGPUは、十分なローカル計算が利用可能であるとき完全に利用可能であるが、一方で一実施形態では、追加計算が要求されるとき、追加「ゴースト」GPUが有効にされる。
図15Aは、グラフィック処理リソース1500が、クライアント1502をネットワーク1592を介してリモート処理リソース1525に結合する、複数のローカルな物理GPU1505〜1506及び複数のゴーストGPU1515〜1517を含む1つの特定の実装を示す。ゴーストGPU1560は、限定ではないが、ラスタライズパイプライン、機械学習パイプライン、光線追跡パイプライン、メディアパイプライン、コピーパイプライン、及び計算パイプラインを含む、様々な種類のパイプラインを表してよい。したがって、以下の特定の説明は、特定の種類のパイプラインに焦点を当てるが、本発明の基本原理は任意の特定のグラフィック処理リソースに限定されない。さらに、リモート処理リソース1525は、CPU(例えば、Xeon CPU、Core i7 CPU、等)及びアプリケーション専用アクセラレータのような汎用処理リソースを含んでよい。例えば、ゴーストGPU1517〜1515は、物理GPU1505〜1506が本来サポートしない処理能力(例えば、光線追跡能力)を表してよい。
一実装では、ゴーストGPU1515〜1517及び物理GPU1505〜1506の両方は、アプリケーション1505及び/又はゴーストGPU認識スケジューラ1510に露出される。一実施形態では、アプリケーション1505は、複それぞれが異なるスレッドのための作業を含み得る数のコマンドバッファを管理する。ゴーストGPU認識スケジューラ1510(これは、図15に示すように1つのアプリケーションに統合されるのではなく、複数のアプリケーションにより共有される別個のコンポーネントであってよい)は、グラフィック処理能力及びゴースト及び物理GPUの特性(例えば、遅延、グラフィック処理帯域幅、等の差)に基づき、物理GPU1505〜1506及びゴーストGPU1515〜1517に渡り、グラフィック作業を知的にスケジューリングする。例えば、物理GPU1505〜1506が、要求されたグラフィック作業を適切に実行するのに十分なグラフィック処理リソースを有する場合、ゴーストGPU認識スケジューラは、全ての作業を物理GPU1505〜1506に送信してよい。
一実施形態では、スケジューリングのうちの少なくとも一部は、リモート処理リソース(remote processing resources:RPR)1525により実行されてよい。図15Bに示すように、ローカルスケジューラ1510は、異なる種類の作業のバッチを含む作業要求を、該作業をリモート処理リソース1525へ転送するゴーストGPU1560へ送信する。一実施形態では、要求は、最小許容可能遅延、解像度、精度、等のような、作業のパラメータ及び/又は要件のセットを含む。
リソースマネジャ1550は、ゴーストGPU1560へ肯定応答を送信して、(1)指定されたパラメータ/要件に従い作業の全部を処理すること、(2)指定されたパラメータ/要件に従い作業の一部を処理すること、又は(3)パラメータ/要件に従い作業のいずれも処理できないこと、を示す。受け付けられた作業について、リソースマネジャ1550は、処理パイプライン1551〜1556の適切なセットに渡り(つまり、要求された作業の種類に基づき)作業をスケジューリングし、完了すると、結果をゴーストGPU1560へ返す。図15Bに示す例では、処理パイプラインは、グラフィックオブジェクトのラスタライズ及び/又は関連する動作を実行するラスタライズパイプライン1551、機械学習動作(例えば、混合精度融合積和演算)を実行する機械学習パイプライン1552、光線追跡動作(例えば、光線トラバース、交差、大域照明、等)を実行する光線追跡パイプライン1553、メディア処理(例えば、ビデオ符号化/復号)のためのメディアパイプライン1554、汎用並列計算動作のための計算パイプライン1555、及びビットブロック転送及び他のコピー動作を実行するコピーパイプライン1556、を含む。
したがって、図15Bに示す実施形態では、作業スケジューリングの少なくとも一部が、RPR1525上で実行される。単一のゴーストGPU1560のみが図15Bに示されるが、複数のこのようなゴーストGPU及び関連するリモート処理リソースが使用されてよい。例えば、図15AのゴーストGPU1515〜15157の各々は、RPRを提供する異なる(又は同じ)クラウドサービス上の処理リソースの異なるセットに関連付けられてよい。
図15Aに戻ると、物理GPU1505〜1506がグラフィック作業を適切に処理できない環境では、ゴーストGPU認識スケジューラ1510は、一部のグラフィック作業1561をゴーストGPUにオフロードする。この場合、スケジューラ1510は、グラフィック作業を細分化してよく、遅延に敏感な作業1560を物理GPU1560にスケジューリングし(これらがローカルであり、ネットワークにより誘起される遅延を有しないので)、他のグラフィック作業をゴーストGPU1515〜1516にスケジューリングする。
一実施形態では、ゴーストGPU1515〜1517は、装置列挙(enumeration)段階の間、スケジューラ1510/アプリケーション1505に見えるようにされる。スケジューラ1510/アプリケーション1505は、次に、装置インスタンスをゴーストGPU1515〜1517に関連付け、オフロード作業1561がこれらのインスタンスに提出される。したがって、ゴーストGPU1515〜1517の「クラウド」の複雑性は、アプリケーションとは別に抽象化される。
グラフィック処理技術における新たな進歩は、複数のGPUの一層シームレスな統合を可能にする。例えば、DX12及びVulkanのような新しいAPIは、複数のGPUをAPIレベルで開示して、アプリケーション1505に、遙かに精細な粒度で作業負荷を分割する柔軟性を提供する。さらに、新しいAPIは、アプリケーション1505が、非同期コマンドバッファ生成、コマンドバッファの記録/再生、及びバンドルを含むコマンドバッファをより効率的に管理する方法を提供する。これらの特徴は、先のAPIモデルにおいて冗長なコマンドバッファ生成を削減することを助ける。
図16は、アプリケーション1505が複数のスレッドを管理する一実施形態の追加の詳細を示す。複数のスレッドのうちの各々は、複数のコマンドバッファ1611A〜Dのうちの1つに関連付けられる。ゴーストGPU認識スケジューラ1510は、コマンドバッファ1611A〜Dからのコマンドを、それぞれゴーストGPU1515〜1517のコマンドキュー1615〜1617、及びクライアント1502にインストールされた物理GPU1505のコマンドキュー1605に割り当てる。上述のように、ゴーストGPU認識スケジューラ1510は、遅延に敏感な作業を、物理GPU1505のコマンドキュー1605に送信しようと試みる。一実施形態では、ゴーストGPUコマンドキュー1615〜1617へ送信された作業は、それぞれゴーストGPU1515〜1517により、リモート処理リソースへ送信され、リモート処理リソースでは、作業負荷がGPU、CPU及び/又はFPGAのアレイにより実行できる。結果は、クライアント側にあるゴーストGPU1515〜1517を介して、アプリケーション1505及び/又は物理GPU1505へ返される。結果は、次に、物理GPU1505上のフレームバッファ内の最終的にレンダリングされるフレームを構成するために使用され、完了すると、物理GPU1505は、ローカルディスプレイ1590上にフレームを表示するよう指示される。
一実施形態では、アプリケーション1505は、GPU列挙(enumeration)段階の間、仮想又は「ゴースト」GPUを含む全てのGPUの完全な可視性を提供される。アプリケーションは、次に、これらのゴーストGPU上で装置オブジェクトを生成し、正常なGPUとしてそれらにアクセスできる。一実施形態では、アプリケーションは、作業負荷をゴーストGPUインスタンスへ送信して、実行時間をクエリすることにより、全体の遅延を評価する。測定した遅延に基づき、アプリケーションは、作業負荷を、異なるGPUに渡り分割し、ローカルGPU1505を使用して最終的なフレームを構成できる。クラウドに基づくグラフィック処理リソース1525により生成された結果は、ゴーストGPUに関連付けられた仮想アダプタに返される。アプリケーション1505は、結果を、最終フレームが構成されたローカルGPU1505により生成された結果と組み合わせる。
代替として、一実施形態では、アプリケーション1505は、物理及び仮想GPUの異種能力を認識せず、ゴーストGPU認識スケジューラは、アプリケーションの代わりにスレッドのスケジューリングを実行する。
どのエンティティがスケジューリングを実行するかにかかわらず、一実施形態では、特定種類の遅延耐性タスク/スレッドが、ゴーストGPUにオフロードされてよく、一方で、遅延に敏感なタスク/スレッドは物理GPU上で実行するためにキューイングされる。これらの遅延耐性タスク/スレッドは、(限定ではないが)フレーム毎に更新されないものを含む。一例は、ゲームエンジンが通常フレーム毎に更新しないがローカルGPUが最終フレームを構成するためにパスの残りをレンダリングする、動的反射マッピングをレンダリングするために(例えば、オブジェクトの一からの立体マップレンダリング)、リモート処理リソースを使用することである。
以下は、本発明の実施形態による、遅延耐性のある、したがってゴーストGPUにオフロードされてよい、レンダリング技術の例である。
動的環境マッピング(反射/屈折)
間接照明/大域照明(例えば、固定光シナリオ)
伝統的なゲーム物理学(腐食、粒子シミュレーション、煙、布地シミュレーション、髪シミュレーション)
ハイブリッド光線追跡
AIに基づくアプローチ(例えば、キャラクタアニメーション、推理を通じたゲーム物理学)
AIに基づくテクスチャ生成、モデル生成、地形/地図生成
厳密な空間オーディオ処理
AIに基づく型変換(例えば、一方のGPUはレンダリングのために使用され、他方のGPUは型変換のために使用される)
偽物レンダリング。
図17のグラフは、コマンドバッファ1611A〜Dが各GPU1515〜1517、1505に別個に並列に提出され、ローカルGPU1505により同期化されるシナリオを示す。ゴーストGPU1515〜1517からの結果を用いて最終フレームを生成するための結果として生じるフレーム時間1700も示される。
本願明細書に記載のゴーストGPUは、GPU作業負荷をゴーストGPUの仮想グラフィックアダプタに提出することにより、リモートGPU能力を利用するために、既存アプリケーション、深層学習フレームワーク、及びレンダリングアプリケーションにより使用できる。
一実施形態では、遅延値(例えば、最小/最大遅延値)、帯域幅、計算、コスト、及び電力を含み得る「ゴーストGPU」の要件及び能力を指定することにより、プロファイルが生成される。プロファイルが設定されると、ゴーストGPU認識スケジューラ1510は、これらのGPUの能力及び制限の観点から、エッジ/クラウドに基づく「ゴーストGPU」に作業を送信できる。
ゴーストGPU:クラウドGPUの1:1の関係が多くの作業負荷及びプログラミングモデルにとって適切であってよいが、クラウド側のタスク分散は、クラウド内の利用可能なマシン及びリソースに渡り作業をスケジューリングするために異なる割り当てを実行してよい。割り当ては、実行されるべき作業の特性に基づき動的に実行されてよい。したがって、幾つかの実施形態では、1:N(ゴーストGPU:クラウドGPU)の関係は、(GPUの仮想化部分を割り当てるために)Nが分数値を含む任意の値であるとき、存在し得る。
一実施形態では、アプリケーションは、依存性グラフをゴーストGPUコマンドキュー、又は間接実行カーネルにクラウドキューに対して提出できるクラウド側コマンドバッファを生成するために供給する。これらの技術は、ベンダ固有分配(タイリング、分割レンダリング、代替フレームレンダリング、等に基づく)、又はクラウド内で作業を生成し及び消費するユーザにより誘導される提出方式を可能にする。
図18は、クライアントマシン上でのゴーストGPUの生成及び使用のための一実施形態を示す。GPU構成及び制御モジュール又はアプリケーション1801(例えば、ゴーストGPU生成アプリケーション)は、ユーザがゴーストGPUをゴーストGPU生成部1802に指定することを可能にする。ゴーストGPU生成部1802は、システム内の3個のゴーストGPUを登録するために、オペレーティングシステム1803と通信する。一実施形態では、各ゴーストGPUはクラウドサービスへのリンクを含む。しかしながら、登録されたゴーストGPUは、クライアントの装置マネジャ1810により別の物理GPUとして扱われる。本例では、3個のゴーストGPUアダプタ1811が装置マネジャ1810内に示される。
アプリケーション1505がグラフィック処理リソースへのアクセスを要求するとき、アプリケーションは、GPU列挙(enumeration)段階1804の間、ゴーストGPU1811を含む全部の利用可能なGPUを吟味できる。アプリケーション1505は、次に、これらのゴーストGPU1811上で装置オブジェクトを生成し、正常なGPUとしてそれらにアクセスできる。アプリケーションは、作業負荷をゴーストGPUインスタンスへ送信して、実行時間をクエリすることにより、全体の遅延を評価できる。
図19に、本発明の一実施形態による方法が示される。方法は、上述のアーキテクチャのコンテキストの範囲内で実装され得るが、任意の特定の形式、アーキテクチャに限定されない。
1901で、1つ以上のゴーストGPUが、1つ以上の物理GPUを含むシステム上に登録され構成される。上述のように、これは、ゴーストGPUに関連付けられた仮想アダプタ又はドライバをインストールするステップを含んでよい。その結果、それらはシステム内の現実のGPUとして見える。
1902で、ゴーストGPU及び物理GPUは、(例えば、アプリケーションに応答して)システム内で列挙される(enumerated)。1903で、複数のグラフィックスレッドを有するアプリケーションが実行される。上述のように、幾つかの実装では、各グラフィックスレッドは、特定のGPUに割り当てられてよい自身のコマンドキューを割り当てられてよい。
1904で、グラフィックスレッドの実行パラメータは、ゴーストGPUに関連付けられた実行メトリックの観点から評価される。例えば、実行パラメータは、グラフィックスレッドの最大遅延及び/又は帯域幅要件の指示を含んでよく、ゴーストGPUメトリックも、遅延及び/又帯域幅に関連するデータ(例えば、現在のネットワーク状態に基づく平均遅延/帯域幅、等)を含んでよい。
1905で、この評価に基づき、特定のグラフィックスレッドが、ゴーストGPU上での実行のためにスケジューリングされる。例えば、ゴーストGPUが許容可能な遅延でスレッドの結果を生成できる場合、これらのスレッドは、ゴーストGPUにスケジューリングされてよく、物理GPUからの作業をオフロードする。残りのスレッドは、物理GPU上にスケジューリングされる。
1906で、ゴーストGPUスレッドは、指定されたクラウドサービスへオフロードされ、該クラウドサービスで、クラウドサービス上のグラフィック処理リソースにより、ゴーストGPUスレッドが実行される。上述のように、グラフィック処理リソースは、専用ハードウェア(例えば、光線トラバース/交差ハードウェア、テンソル実行ハードウェア、大域照明ハードウェア、等)を含んでよく、CPU、GPU、及び/又はFPGAを含んでよい。結果は、クラウドサービスによりゴーストGPUに提供され、ゴーストGPUは、結果をアプリケーション及び/又は物理GPUに転送する。1907で、物理GPUは、結果を使用して最終フレームを生成する。最終フレームは、ローカルディスプレイ装置上で表示される。
これらの実施形態により提供される1つの利点は、計算リソースに渡り時に細かく分割され得る光線追跡のような幾つかのタスクが、負荷平衡を促進するためにクラウド上に配置された論理的エンティティを有することである。分割レンダリングシナリオでは、アプリケーションは、リモードレンダリングサポートを認識する必要がない。むしろ、アプリケーションは、ゴーストGPUが存在することを知り、ゴーストGPUの能力(例えば、遅延を含む様々な種類のグラフィック処理に関連付けられた処理メトリック)を理解する必要があるだけである。
本発明の一実施形態では、アプリケーションは、DX12又はVulkanのようなマルチGPU認識APIを利用して、コマンドバッファを非同期に生成し、それらをそれぞれのGPU(ローカル物理GPU又はゴーストGPU)に提出する。
図20Aに示すように、ゴーストGPUのマルチレイヤアーキテクチャが実装されてよい。特にクライアント2010は、上述のようなゴーストGPU構成に基づき、エッジサービス2020の処理リソースにアクセスする。本例では、クライアント2010は、ローカルGPU及びゴーストGPUを含んでよく、又はゴーストGPUのみを含んでよい(つまり、ローカルGPUハードウェアを有しない)。本願明細書で使用されるとき、「エッジ(Edge)」サービスは、ネットワーク遅延の観点でクライアント2010に最も近い(例えば、クライアントのインターネットサービスプロバイダネットワーク又はセルラプロバイダの場合には5Gネットワーク内に直接ホスティングされた)リモートサービスを含む。本実施形態では、エッジサービス2020は、物理GPUを含むが、1つ以上のクラウドサービス2030内のリモート処理リソースに関連付けられたゴーストGPUも含んでよい。このアーキテクチャを用いて、エッジサービス2020内のリソースマネジャは、クライアント要求を評価して、自身が処理を実行するか、又は処理をクラウドサービス2030内の処理リソースにオフロードするかを決定してよい。
上述の実施形態のうちのいずれかで、「ゴーストGPU」又は物理GPUは、ゴースト又は物理xPUであってよい。xPUは、任意の種類のデータ処理作業を処理し又はリモートプロセッサにオフロードするために、任意の形式のプロセッサ(例えば、CPU、デジタル信号処理ユニット、テンソル処理ユニット、光線処理ユニット、ベクトル処理ユニット、等)を指定する。図20Bは、クライアント2050が、作業をオフロードするための1つ以上のゴーストxPU及び任意で1つ以上のローカルxPUを備えられる一実施形態を示す(つまり、クライアントは、処理作業を実行するための物理を有してよく、又は有しなくてよい)。同様に、エッジサービス2060は、ローカル及びゴーストxPUを含み、更に階層構造の上位では、クラウドサービス2070は、ローカル及びゴーストxPUを含んでよい。例えば、一実施形態では、クライアント2010上のベクトル処理ユニット(vector processing unit:VPU)は、VPUと同様の計算作業を実行するために追加ゴーストxPUを割り当てる。
一実装では、リソースマネジャは、この決定を、クライアント要求に関連付けられたパラメータ及び/又は遅延要件に基づき行う。例えば、エッジサービス2020が指定された遅延の範囲内で指定されたパラメータに従い要求を処理できる場合、クラウドサービス2030への要求のオフロードが遅延を超える場合にそうする。しかしながら、より高い遅延が許容可能であり及び/又は専用プラットフォーム(例えば、量子化計算プラットフォーム)が要求される特定種類の作業は、エッジサービス上で構成されたゴーストGPUを介してクラウドサービス2030へオフロードされてよい。このように、処理リソース及びゴーストGPUの複数のティアは、作業をローカルに処理するために、及びオフロード可能な作業をオフロードするために、構成されてよい。
さらに、追加ティアがユーザのホーム内に構成されてよい。例えば、ユーザのホーム内の強力なサーバは、複数のクライアントにサービスしてよい。このサーバは、ユーザのネットワークプロバイダに作業をオフロードするために、1つ以上のゴーストGPUを含んでよい。ネットワークプロバイダは、作業の全部又は一部を実行し、特定の作業を自身のゴーストGPUを介してクラウドサービスにオフロードしてよい。最後に、各クラウドサービスは、それ自体が、作業を他のクラウドサービスにオフロードするためのゴーストGPUを含んでよい。
種々のパラメータは、各オフロード要求に関連付けられてよい。例えば、リモート処理リソースを使用するコストは、遅延及び/又は性能と組み合わせて評価されてよい。例えば、要求は、最大遅延、最小性能、及び最大許容コスト値を指定してよい。クライアント2010又はエッジサービス2020上のスケジューラは、次に、コストを最小化しながら、遅延及び性能要件に適合するために作業をどのように分散するかを決定してよい。
上述のように、グラフィック作業に加えて、本発明の実施形態は、(限定ではないが)光線追跡動作及び機械学習動作を含む他の種類の作業をオフロードしてよい。本特許出願の残りの部分は、これらの追加の種類の作業の特定の例を提供する。

<機械学習による光線追跡>
上述のように、光線追跡は、光トランスポートが物理学に基づくレンダリングを通じてシミュレートされるグラフィック処理技術である。光線追跡における主要な動作のうちの1つは、境界ボリューム階層構造(bounding volume hierarchy:BVH)の中のノードのトラバース及び交差テストを要求する可視性クエリを処理することである。
光線及び経路追跡に基づく技術は、各ピクセルを通じて光線及び経路を追跡し、及び影、光沢、間接照明、等のような高度な効果を計算するためにランダムサンプリングを使用することにより、画像を計算する。少数のサンプルのみを使用することは、高速であるが、ノイズの多い画像を生成する。一方で、多数のサンプルを使用することは、高品質な画像を生成するが、コストがひどく高くなる。
機械学習は、指定されたタスクの性能を革新的に向上し、又はより正確な予測若しくは決定を革新的にレンダリングする能力のある任意の回路、プログラムコード、又はそれらの組み合わせを含む。幾つかの機械学習エンジンは、タスクを実行するよう又は予測/決定をレンダリングするよう明示的にプログラミングされることなく、これらのタスクを実行し又はこれらの予測/決定をレンダリングできる。(限定ではないが)教師あり及び半教師あり学習、教師無し学習、及び強化学習を含む種々の機械学習技術が存在する。
最近数年で、リアルタイムの使用のための光線/経路追跡のための躍進的ソリューションが、「ノイズ除去」、つまり画像処理技術を使用してノイズの多い低サンプル数の入力から高品質のフィルタリング/ノイズ除去された画像を生成する処理の形式で現れてきた。最も効率的なノイズ除去技術は、機械学習エンジンが、ノイズの多い画像がより多くのサンプルにより計算された場合に何に見える可能性があるかを学習する、機械学習技術に依存する。1つの特定の実装では、機械学習は、畳み込みニューラルネットワーク(convolutional neural network:CNN)により実行されるが、本発明の基本原理はCNN実装に限定されない。このような一実装では、トレーニングデータは、低サンプル数の入力及びグランドトルース(ground−truth)により生成される。CNNは、問題のピクセルの周囲にあるノイズの多いピクセル入力の近隣から集束(converged)ピクセルを予測するよう訓練される。
完全ではないが、このAIに基づくノイズ除去技術は、驚くほどの効果があることが分かっている。しかしながら、良好なトレーニングデータが要求されることに留意する。そうでなければ、ネットワークは誤った結果を予測し得るからである。例えば、アニメーション映画スタジオがノイズ除去CNNを地上シーンを有する過去の映画で訓練し、次に訓練したCNNを使用して水上の新しい映画セットからのフレームのノイズを除去しようとする場合、ノイズ除去動作は、最適には実行されない。
この問題を解決するために、本発明の一実施形態は、学習データを動的に集め、レンダリングしながら、CNNのような機械学習エンジンを、現在実行しているデータに基づき連続的に訓練し、したがって、近い将来のタスクに対して機械学習エンジンを連続的に向上する。本実施形態は、依然としてランタイムの前にトレーニング段階を実行してよいが、ランタイム中に必要に応じて機械学習重みを調整し続ける。さらに、本実施形態は、フレーム毎又はNフレーム毎の画像のサブ領域に学習データの生成を制限することにより、トレーニングのために必要な参照データを計算する高いコストを回避する。特に、フレームのノイズの多い入力は、現在のネットワークにより完全なフレームのノイズを除去するために生成される。さらに、後述するように、参照ピクセルの小さな領域が生成され、連続的なトレーニングのために使用される。
CNN実装が特定の実施形態に関して記載されるが、限定ではなく教師あり学習(例えば入力及び所望の出力の両方を含むデータセットの数学的モデルを構築する)、教師無し学習(例えば、特定種類の構造の入力データを評価する)、及び/又は教師あり及び教師無し学習の組み合わせを実行するシステムを含む任意の形式の機械学習エンジンが使用されてよい。
既存のノイズ除去実装は、トレーニング段階及びランタイム段階で動作する。トレーニング段階の間、ピクセル色、深さ、法線(normal)、法線ずれ(normal deviation)、プリミティブID、及び反射率のような種々のピクセル毎のデータチャネルを有するN×Nピクセルの領域を受信し、最終ピクセル色を生成するネットワークトポロジが定められる。「代表」トレーニングデータのセットは、1フレーム分の低サンプル数入力を用いて、及び非常に高いサンプル数により計算された「所望の」ピクセル色を参照して、生成される。ネットワークは、これらの入力に向けてトレーニングされ、ネットワークの「理想的な」重みのセットを生成する。これらの実装では、参照データは、ネットワークの重みをトレーニングして、ネットワークの出力を所望の結果に最も近く適合するために使用される。
ランタイムにおいて、所与の予め計算された理想的なネットワークの重みがロードされ、ネットワークは初期化される。各フレームについて、ノイズ除去入力の低サンプル数画像(つまり、トレーニングのために使用されたものと同じ)が生成される。各ピクセルについて、ピクセルの入力の所与の近隣は、ネットワークを通じて実行され、「ノイズ除去された」ピクセル色を予測子、ノイズ除去されたフレームを生成する。
図21は、初期トレーニング実装の一実施形態を示す。機械学習エンジン2100(例えば、CNN)は、N×Nピクセルの領域を、ピクセル色、深さ、法線、法線ずれ、プリミティブID、及び反射率のような種々のピクセル毎のデータチャネルを有する高サンプル数画像データ1702として受信し、最終ピクセル色を生成する。代表的トレーニングデータは、1フレーム分の低サンプル数入力2101を用いて生成される。ネットワークは、これらの入力に向けてトレーニングされ、機械学習エンジン2100がランタイムにおいて低サンプル数画像のノイズを除去するために後に使用する「理想的な」重み2105のセットを生成する。
上述の技術を改良するために、本発明の一実施形態は、新しいトレーニングデータをフレーム又はフレームのサブセット毎に(例えば、Nフレーム毎に、ここでN=2、3、4、10、25、等)生成するよう、ノイズ除去段階を強化する。特に、図22に示すように、本実施形態は、ここでは「新しい参照領域」2202と呼ばれる、各フレーム内の1つ以上の領域を選択する。これらは、高サンプル数でレンダリングされて、別個の高サンプル数バッファ2204に入れられる。低サンプル数バッファ1603は、(新しい参照領域2202に対応する低サンプル数領域2204を含む)低サンプル数入力フレーム2201を格納する。
一実施形態では、新しい参照領域2202の位置は、ランダムに選択される。代替として、新しい参照領域2202の位置は、(例えば、フレーム間の領域の所定の動きを用いて、フレームの中心にある指定領域に限定して、等)新しいフレーム毎に予め指定された方法で調整されてよい。
新しい参照領域がどのように選択されるかにかかわらず、これは、ノイズ除去のために使用されるトレーニングされた重み2205を連続的に精緻化し及び更新するために、機械学習エンジン2200により使用される。特に、各新しい参照領域2202からの参照ピクセル色、及び対応する低サンプル数領域2207からのノイズの多い参照ピクセルが、レンダリングされる。次に、機械学習エンジン2200において、高サンプル数参照領域2202及び対応する低サンプル数領域2207を用いて、追加トレーニングが実行される。初期トレーニングと対照的に、このトレーニングは、ランタイムの間、各新しい参照領域2202に対して連続的に実行され、それにより、機械学習エンジン2200が正確にトレーニングされることを保証する。例えば、機械学習エンジン2200がトレーニングされた重み2205に調整を行うために使用するピクセル毎のデータチャネル(例えば、ピクセル色、深さ、法線、法線ずれ、等)が評価されてよい。トレーニングケース(図21)におけるように、機械学習エンジン2200は、低サンプル数入力フレーム2201からノイズを除去してノイズ除去されたフレーム2220を生成するために、理想的な重み2205のセットに向けてトレーニングされる。しかしながら、本実施形態では、トレーニングされた重み2205は、新しい種類の低サンプル数入力フレーム2201の新しい画像特性に基づき、連続的に更新される。
一実施形態では、機械学習エンジン2200により実行される再トレーニング動作は、グラフィックプロセッサユニット(GPU)又はホストプロセッサ上のバックグラウンドプロセスで同時に実行される。ドライバコンポーネント及び/又はGPUハードウェアコンポーネントとして実装されてよいレンダーループは、キューの中に置く新しいトレーニングデータを(例えば、新しい参照領域2202の形式で)連続的に生成する。GPU又はホストプロセッサ上で実行されるバックグラウンドトレーニングプロセスは、このキューから新しいトレーニングデータを連続的に読み出し、機械学習エンジン2200を再トレーニングし、適切な間隔で新しい重み2205により機械学習エンジン2200を更新する。
図23は、バックグラウンドトレーニングプロセス2300がホストCPU1710により実装されるような一実装の一例を示す。特に、本実施形態では、バックグラウンドトレーニングプロセス2300は、高サンプル数の新しい参照領域2202及び対応する低サンプル領域2204を使用して、トレーニングされた重み2205を連続的に更新し、それにより機械学習エンジン2200を更新する。
図24Aに示すように、複数プレイヤのオンラインゲームにおけるような一実装では、異なるホストマシン2420〜2422は、個々に、バックグラウンドトレーニングプロセス1700A〜Cがサーバ2400(例えば、ゲームサーバ)へ送信する参照領域を生成する。サーバ2400は、次に、ホスト2421〜2422の各々から受信した新しい参照領域を用いて、機械学習エンジン2410に対してトレーニングを実行し、前述のように重み2405を更新する。サーバ2400は、重み2405を、重み2205A〜Cを格納するホストマシン2420へ送信し、それにより、各個々の機械学習エンジン(図示しない)を更新する。サーバ2400は、多数の参照領域を短時間のうちに供給され得るので、効率的且つ正確に、ユーザにより実行されている任意の所与のアプリケーション(例えば、オンラインゲーム)のために重みを更新できる。
図24Bに示すように、異なるホストマシンは、新しいトレーニング済み重みを(例えば、前述のようにトレーニング/参照領域2202に基づき)生成し、新しいトレーニング済み重みをサーバ2400(例えば、ゲームサーバ)と共有し、又は代替として、ピアツーピア共有プロトコルを使用してよい。サーバ上の機械学習管理コンポーネント2410は、ホストマシンの各々から受信した新しい重みを用いて結合重み2405のセットを生成する。結合重み2405は、例えば、新しい重みから生成された平均であり、本願明細書に記載のように連続的に更新されてよい。一旦生成されると、結合重み2205A〜Cのコピーは、送信され、ホストマシン2420〜2421の各々に格納されてよい。次に、ホストマシン2420〜2421は、本願明細書に記載のように、ノイズ除去動作を実行するために結合重みを使用してよい。
一実施形態では、この半閉ループ更新メカニズムは、ハードウェア製造者により使用できる。例えば、参照ネットワークは、ハードウェア製造者により分配されるドライバの部分として含まれてよい。ドライバが新しいトレーニングデータを本願明細書に記載の技術を用いて生成し、これらをハードウェア製造者に連続的に提出するので、ハードウェア製造者は、この情報を使用して、次のドライバ更新のために自身の機械学習実装を改良し続ける。
一実装では(例えば、レンダーファーム上での一群の映画のレンダリングでは)、レンダラは、新しく生成したトレーニング領域を、時間に渡り複数のレンダーノードからこのデータを集める(そのスタジオのレンダーファームの中の)専用サーバ又はデータベースへ送信する。別個のマシン上の別個のプロセスは、スタジオの専用ノイズ除去ネットワークを連続的に改良し、新しいレンダージョブは、常に最新のトレーニング済みネットワークを使用する。
図25に、本発明の一実施形態による方法が示される。方法は、本願明細書に記載のアーキテクチャ上で実装され得るが、任意の特定のシステム又はグラフィック処理アーキテクチャに限定されない。
2501で、初期トレーニング段階の部分として、低サンプル数画像データ及び高サンプル数画像データが複数の画像フレームについて生成される。2502で、機械学習ノイズ除去エンジンは、高/低サンプル数画像データを用いてトレーニングされる。一実施形態では、例えば、ピクセル特徴に関連付けられた畳み込みニューラルネットワーク重みのセットは、トレーニングに従い更新されてよい。しかしながら、任意の機械学習アーキテクチャが使用されてよい。
2503で、ランタイムで、低サンプル数画像フレームは、高サンプル数を有する少なくとも1つの参照領域と一緒に生成される。2504で、高サンプル数参照領域は、機械学習エンジン及び/又は別個のトレーニングロジック(例えば、バックグラウンドトレーニングモジュール2300)により、機械学習エンジンのトレーニングを連続的に精緻化するために使用される。例えば、一実施形態では、高サンプル数参照領域は、低サンプル数画像の対応する部分と組み合わせて、どのようにノイズ除去を最も効率的に実行するかを機械学習エンジン1904に教示し続けるために使用される。CNN実装では、例えば、これは、CNNに関連付けられた重みを更新することを含んでよい。
機械学習エンジンへのフィードバックループが構成される方法、トレーニングデータを生成するエンティティ、トレーニングデータがトレーニングエンジンにフィードバックされる方法、及び改良されたネットワークがレンダリングエンジンに提供される方法のような、上述の実施形態のうちの複数の変形が実装されてよい。さらに、上述の実施形態は単一の参照領域を用いて連続的トレーニングを実行するが、二二の数の参照領域が使用されてよい。さらに、前述のように、参照領域は、異なるサイズのものであって良く、異なる数の画像フレーム上で使用されてよく、異なる技術を用いて(例えば、ランダムに、所定のパターンに従い、等)画像フレーム内の異なる位置に位置付けられてよい。
さらに、畳み込みニューラルネットワーク(CNN)が機械学習エンジン2200の一例として記載されたが、本発明の基本原理は新しいトレーニングデータを用いて自身の結果を連続的に精緻化する能力のある任意の形式の機械学習エンジンを用いて実装されてよい。例として、限定ではなく、他の機械学習実装は、少数の例を挙げると、GMDH(group method of data handling)、長短期(long short−term)メモリ、深層リザバー(reservoir)計算、DBN(deep belief network)、テンソル深層スタックネットワーク、及びDeep PredNet(deep predictive coding network)を含む。

<効率的な分散ノイズ除去のための機器及び方法>
上述のように、ノイズ除去は、重要な特徴である円滑なノイズの少ない画像によるリアルタイム光線追跡になった。レンダリングは、複数の装置の分散システムに渡り行うことができるが、これまで、既存のノイズ除去フレームワークは、全て、単一のマシン上の単一のインスタンス上で動作する。レンダリングが複数の装置に渡り行われている場合、それらは、画像のノイズ除去された部分を計算するためにアクセス可能な全てのレンダリングされたピクセルを有しない可能性がある。
本発明の一実施形態は、人工知能(AI)及び非AIに基づくノイズ除去技術の両方により動作する分散型ノイズ除去アルゴリズムを含む。画像の領域は、分散型レンダリング動作からノードに渡り既に分散されているか、又は単一のフレームバッファから分割され分散されるかである。十分なノイズ除去を計算するために必要な近隣領域のゴースト領域は、必要なときには近隣ノードから集められ、最終的に生じるタイルが最終画像へと合成される。
<分散型処理>
図26は、複数のノード2621〜2623がレンダリングを実行する、本発明の一実施形態を示す。簡単のために3個のノードのみが示されるが、本発明の基本原理は、任意の数のノードに限定されない。実際に、単一のノードが、本発明の特定の実施形態を実施するために使用されてよい。
ノード2621〜2623は、それぞれ、画像の一部をレンダリングして、本例では結果として領域2611〜2613を生じる。図26には長方形領域2611〜2613が示されるが、任意の形状の領域が使用されてよく、任意の装置が任意の数の領域を処理できる。十分に滑らかなノイズ除去動作を実行するためにノードにより必要とされる領域は、ゴースト領域2611〜2613と呼ばれる。言い換えると、ゴースト領域2601〜2603は、指定されたレベルの品質でノイズ除去を実行するために必要なデータ全体を表す。品質レベルの低下は、ゴースト領域のサイズ、したがって必要なデータ量を削減し、品質レベルの向上は、ゴースト領域及び対応する必要なデータを増大する。
一実施形態では、ノード2621のようなノードが、指定されたレベルの品質で自身の領域2611のノイズを除去するために必要なゴースト領域2601の一部のローカルコピーを有する場合、ノードは、図示のようにゴースト領域2601の一部を所有しているノード2622のような1つ以上の「隣接」ノードから必要なデータを読み出す。同様に、ノード2622が、指定されたレベルの品質で自身の領域2612のノイズを除去するために必要なゴースト領域2602の一部のローカルコピーを有する場合、ノード2622は、ノード2621から必要なゴースト領域データ2632を読み出す。読み出しは、バス、相互接続、高速メモリファブリック、ネットワーク(例えば、高速イーサネット(登録商標))を介して実行されてよく、又は、(例えば、超高解像度または時間により変化する大型画像をレンダリングするために使用される)複数のコアの間でレンダリングネットワークを分散できるマルチコアチップ内のオンチップ相互接続であってもよい。一実施形態では、各ノード2621〜2623は、グラフィックプロセッサ内に個々の実行ユニット又は実行ユニットの指定されたセットを含む。
送信されるべきデータの特定の量は、使用中のノイズ除去技術に依存する。さらに、ゴースト領域からのデータは、各々の領域のノイズ除去を向上するために必要な任意のデータを含んでよい。一実施形態では、例えば、ゴースト領域データは、画像色/波長、強度/アルファデータ、及び/又は法線(normal)を含む。しかしながら、本発明の基本原理は、任意の特定のゴースト領域データセットに限定されない。
<一実施形態の追加の詳細>
低速なネットワーク又は相互接続では、既存の汎用無損失又は損失圧縮を用いて、このデータの圧縮が利用できる。例は、限定ではないが、zlib、gzip、及びLZMA(Lempel−Ziv−Markov chain algorithm)を含む。フレーム間の光線衝突情報におけるデルタが非常に粗くなり、ノードが既に前のフレームから集めたデルタを有するとき、該デルタに貢献するサンプルのみが送信される必要のあることに留意して、更にコンテンツ固有圧縮が使用されてよい。これらは、それらのサンプルを集めるノードiに選択的にプッシュでき、又はノードiは、他のノードからサンプルを要求できる。一実施形態では、特定種類のデータ及びプログラムコードのために無損失圧縮が使用され、一方で損失データが他の種類のデータのために使用される。
図27は、本発明の一実施形態による、ノード2621〜2622間の相互作用の追加の詳細を示す。各ノード2621〜2622は、それぞれの画像領域2611〜2612及びゴースト領域2601〜2602をレンダリングする光線追跡レンダリング回路2681〜2682を含む。ノイズ除去部2700〜2711は、それぞれ各ノード2621〜2622がレンダリング及びノイズ除去を担う領域2611〜2012に対してノイズ除去動作を実行する。ノイズ除去部2621〜2622は、例えば、それぞれノイズ除去された領域2721〜2722を生成するために、回路、ソフトウェア、又はそれらの任意の組み合わせを含んでよい。上述のように、ノイズ除去された領域を生成するとき、ノイズ除去部2621〜2622は、異なるノードにより所有されるゴースト領域内のデータに依存する必要があってよい(例えば、ノイズ除去部2700は、ノード2622により所有されるゴースト領域2602からのデータを必要としてよい)。
したがって、一実施形態では、ノイズ除去部2700〜2711は、それぞれ、少なくとも一部が別のノードから受信されてよい領域2611〜2612及びゴースト領域2601〜2602からのデータを用いて、ノイズ除去された領域2721〜2722を生成する。領域データマネジャ2701〜2702は、本願明細書に記載のように、ゴースト領域2601〜2602からのデータ転送を管理する。一実施形態では、圧縮/伸張ユニット2731〜2732は、それぞれノード2621〜2622の間で交換されたゴースト領域データの圧縮及び伸張を実行する。
例えば、ノード2621の領域データマネジャ2701は、ノード2622からの要求により、ゴースト領域2601からのデータを、圧縮/伸張器2731へ送信してよい。圧縮/伸張器2731は、データを圧縮して、ノード2622へ送信する圧縮されたデータ2706を生成し、それにより、相互接続、ネットワーク、バス、又は他のデータ通信リンク上の帯域幅を削減する。ノード2622の圧縮/伸張器2732は、次に、あっしゅくされた データ2706を伸張し、ノイズ除去部2711は、伸張されたゴーストデータを使用して、領域2612からのデータのみで可能なものより高い品質のノイズ除去された領域2612を生成する。領域データマネジャ2702は、ゴースト領域2601から伸張されたデータを、キャッシュ、メモリ、レジスタファイル、又は他の記憶装置に格納して、ノイズ除去部2711がノイズ除去された領域2722を生成するときに利用可能にする。同様の動作セットが、ノード2621上のノイズ除去部2700にゴースト領域2602からのデータを提供するために実行されてよい。ノード2621は、該データを領域2011からのデータと共に使用して、より高い品質のノイズ除去された領域2721を生成する。
<グラブ(grab)データ又はレンダー>
ノード2621〜2622のような装置間の接続が低速である(つまり、閾遅延及び/又は閾帯域幅より低い)場合他の装置からの結果を要求するよりも、ローカルにゴースト領域をレンダリングする方が早い可能性がある。これは、ゴースト領域サイズについて、ネットワークトランザクション速度及び線形推定レンダリング時間を追跡することにより、ランタイムにおいて決定できる。ゴースト領域全体をレンダリングする方が速い場合には、服すの装置は、最終的には画像の同じ部分のレンダリングをしてよい。ゴースト領域のレンダリングされた部分の解像度は、基本領域の分散及びブラーの決定された程度に基づき調整されてよい。
<負荷平衡>
一実施形態では、種々のノード2621〜2623の間で処理負荷を分散するために、静的及び/又は動的負荷平衡方式が使用されてよい。動的負荷平衡では、ノイズ除去フィルタにより決定された分散は、ノイズ除去により多くの時間を必要とするが、シーンの特定領域をレンダリングするために使用されるサンプルの量を駆り立て(drive)、画像の低い分散及びブラーの領域はより少ないサンプルしか必要としない。特定のノードに割り当てられた特定の領域は、前のフレームからのデータに基づき動的に調整され、又は装置がレンダリングするとき、全ての装置が同じ作業量を有するように、該装置間で動的に通信されてよい。
図28は、各々のノード2621〜2622上で動作するモニタ2801〜2802が、限定では内がネットワークインタフェース2811〜2812を介してデータを送信するために消費される時間、(ゴースト領域データを有する及び有しない)領域をノイズ除去するときに消費される時間、及び各領域/ゴースト領域をレンダリングするために消費される時間、を含む性能メトリックデータを集める一実施形態を示す。モニタ2801〜2802は、これらの性能メトリックをマネジャ又は負荷平衡ノード2801に報告する。マネジャ又は負荷平衡ノード2801は、該データを分析して、各ノード2621〜2622の現在の作業負荷を識別し、場合によっては種々のノイズ除去された領域2721〜2722を処理するより効率的なモードを決定する。マネジャノード2801は、次に、検出した負荷に従い、新しい領域のための新しい作業負荷をノード2621〜2622に分散する。例えば、マネジャノード2801は、あまり重い負荷を有しないノードにより多くの作業を送信し、及び/又は過負荷のノードからの作業を再割り当てしてよい。さらに、負荷平衡ノード2801は、レンダリング及び/又はノイズ除去がノードの各々により実行される特定の方法を調整するために、再構成コマンドを送信してよい(幾つかの例は上述された)。
<ゴースト領域の決定>
一実施形態では、ゴースト領域2601〜2602のサイズ及び形状は、ノイズ除去部2700〜2711により実装されるノイズ除去アルゴリズムに基づき決定される。それら個々のサイズは、次に、ノイズ除去されているサンプルの検出された分散に基づき、動的に変更され得る。AIノイズ除去自体のために使用される学習アルゴリズムは、適切な領域サイズを決定するために使用されてよく、又は両方向ブラーのような他の場合には、所定のフィルタ幅がゴースト領域2601〜2602のサイズを決定する。学習アルゴリズムを使用する実装では、機械学習エンジンは、マネジャノード2801上で実行されてよく、及び/又は機械学習の部分が、個々のノード2621〜2623の各々で実行されてよい(例えば、図24A〜B及び上述の関連する説明を参照する)。
<最終画像の収集>
一実施形態では、最終画像は、ゴースト領域又は法線(normal)を必要とせず、ノード2621〜2623の各々からレンダリングされノイズ除去された領域を集めることにより収集される。図28では、例えば、ノイズ除去された領域2721〜2722は、マネジャノード2601の領域プロセッサ2680へ送信される。領域プロセッサ2680は、領域を結合して、最終的なノイズ除去された画像2690を生成する。画像2690は、次にディスプレイ2890上で表示される領域プロセッサ2280は、種々の2D合成技術を用いて、領域を結合してよい。別個のコンポーネントとして示したが、領域プロセッサ2680及びノイズ除去された画像2690は、ディスプレイ2890に統合されてよい。本実施形態では、種々のノード2621〜2622は、直接送信技術を用いて、場合によっては領域データの種々の損失又は無損失圧縮を使用して、ノイズ除去された領域2721〜2722を送信してよい。
AIノイズ除去は、依然として、高コスト動作であり、ゲームはクラウドへと移行する。したがって、複数のノード2621〜2622に渡りノイズ除去の処理を分散することは、より高いフレームレートを要求する伝統的なゲーム又は仮想現実(VR)のためにリアルタイムフレームレートを達成するために必要になることがある。映画スタジオは、より高速なノイズ除去のために利用可能な大規模レンダーファームにおいてもレンダリングする。
図29に、分散型レンダリング及びノイズ除去を実行する方法の一実施形態が示される。方法は、上述のシステムアーキテクチャのコンテキストの範囲内で実装され得るが、任意の特定のシステムアーキテクチャに限定されない。
2901で、グラフィック作業は、画像フレームの領域をレンダリングするための光線追跡動作を実行する複数のノードにディスパッチされる。一実施形態では、各ノードは、既に、メモリ内に動作を実行するために必要なデータを有してよい。例えば、2以上のノードは、共通メモリを共有してよく、又はノードのローカルメモリが既に前の光線追跡動作からのデータを格納していてよい。代替として又は追加で、特定のデータが各ノードに送信されてよい。
2902で、指定されたレベルの(つまり許容可能な性能レベルの)ノイズ除去のために必要な「ゴースト領域」が決定される。ゴースト領域は、1つ以上の他のノードにより所有されるデータを含む、指定されたレベルのノイズ除去を実行するために必要な任意のデータを含む。
2903で、ゴースト領域(又はその部分)に関連するデータは、ノード間で交換される。2904で、各ノードは、(例えば、交換されたデータを用いて)自身のそれぞれの領域に対してノイズ除去を実行し、2905で、最終的なノイズ除去された画像フレームを生成するために結果が結合される。
一実施形態では、得z28に示されるようなマネジャノード又は1次ノードは、作業をノードにディスパッチし、次にノードにより実行された作業を結合して最終的な画像フレームを生成する。別の実施形態では、ノードが最終的な画像フレームをレンダリングし及びノイズ除去するためのデータを交換するピアである、ピアに基づくアーキテクチャが使用される。
本願明細書に記載のノード(例えば、ノード2621〜2623)は、高速ネットワークを介して相互接続されるグラフィック処理コンピューティングシステムであってよい。代替として、ノードは、高速メモリファブリックに結合された個々の処理ノードであってよい。本実施形態では、ノードの全部が、共有仮想メモリ空間及び/又は共有物理メモリを共有してよい。別の実施形態では、ノードは、CPU及びGPUの結合であってよい。例えば、上述のマネジャノード2801はCPU及び/又は該CPU上で実行されるソフトウェアであってよく、ノード2621〜2622はGPU及び/又該GPU上で実行されるソフトウェアであってよい。様々な異なる種類のノードが使用されるが、依然として本発明の基本原理に従っている。
<例示的なニューラルネットワーク実装>
多くの種類のニューラルネットワークが存在するが、単純な種類のニューラルネットワークは順伝播型ネットワークである。順伝播型ネットワークは、ノードがレイヤに構成される非環式グラフとして実装されてよい。標準的に、順伝播型ネットワークトポロジは、少なくとも1つの隠れ層により分離される入力層及び出力層を含む。隠れ層は、入力層により受信した入力を、出力層における出力を生成するために有用な表現に変換する。ネットワークノードは、エッジを介して隣接層にあるノードに完全結合されるが、各層内のノード間にはエッジは存在しない。順伝播型ネットワークの入力層のノードで受信したデータは、レイヤを接続するエッジの各々にそれぞれ関連付けられた係数(「重み」)に基づき、ネットワーク内の各連続する層のノードの状態を計算する活性化関数を介して、出力層のノードに伝播される(つまり「順伝播」)。実行中のアルゴリズムにより表現されている特定のモデルに依存して、ニューラルネットワークアルゴリズムからの出力は種々の形式をとり得る。
機械学習アルゴリズムが特定の問題をモデル化するために使用できる前に、アルゴリズムは、トレーニングデータセットを用いてトレーニングされる。ニューラルネットワークのトレーニングは、ネットワークトポロジを選択するステップと、ネットワークによりモデル化される問題を表すトレーニングデータセットを使用するステップと、ネットワークモデルがトレーニングデータセットの全てのインスタンスに対して最小限の誤りで実行するまで、重みを調整するステップと、を含む。例えば、ニューラルネットワークの教師あり学習トレーニングプロセスの間、トレーニングデータセット内のインスタンスを表す入力に応答してネットワークにより生成された出力は、該インスタンスの「正しく」ラベル付けされた出力と比較され、出力とラベル付けされた出力との間の差を表す誤差信号が計算され、誤差信号がネットワークの層を通じて逆伝播されるとき、誤りを最小化するよう、接続に関連付けられた重みが調整される。ネットワークは、トレーニングデータセットのインスタンスから生成された出力の各々について誤りが最小化されると、「トレーニングされた」と考えられる。
機械学習アルゴリズムの精度は、アルゴリズムをトレーニングするために使用されるデータセットの品質により大きく影響され得る。トレーニングプロセスは、計算集中的であり、伝統的な汎用プロセッサにおいて相当量の時間を必要とし得る。したがって、多くの種類の機械学習アルゴリズムをトレーニングするために、並列処理ハードウェアが使用される。これは、ニューラルネットワークにおいて係数を調整する際に実行される計算自体が並列実装に適しているので、ニューラルネットワークのトレーニングを最適化するためには特に有用である。具体的に、多くの機械学習アルゴリズム及びソフトウェアアプリケーションが、汎用グラフィック処理装置の中で並列処理ハードウェアを利用するために適応されている。
図30は、機械学習ソフトウェアスタック3400の一般化された図である、機械学習アプリケーション3402は、トレーニングデータセットを使用してニューラルネットワークをトレーニングするよう、又はトレーニング済み深層ニューラルネットワークを使用して機械知能を実装するよう構成できる。機械学習アプリケーション3402は、ニューラルネットワークのためのトレーニング及び推定機能、及び/又は展開する前にニューラルネットワークをトレーニングするために使用できる専用ソフトウェアを含み得る。機械学習アプリケーション3402は、限定ではないが、画像認識、マッピング及び位置特定、自動ナビゲーション、会話合成、医療画像、又は言語翻訳を含む任意の種類の機械知能を実装できる。
機械学習アプリケーション3402のためのハードウェア加速化は、機械がクシュフレームワーク3404により可能にできる。機械学習フレームワーク3404は、機械学習プリミティブのライブラリを提供できる。機械学習プリミティブは、機械学習アルゴリズムにより一般に実行される基本動作である。機械がクシュフレームワーク3404が無いと、機械学習アルゴリズムの開発者は、機械学習アルゴリズムに関連付けられた主計算ロジックを生成し最適化し、次に、新しい並列プロセッサが開発されると該計算ロジックを再度最適化する必要があるだろう。これに対し、機械学習アプリケーションは、機械学習フレームワーク3404により提供されたプリミティブを用いて、必要な計算を実行するよう構成できる。例示的なプリミティブは、テンソル畳み込み、活性化関数、及びプーリングを含み、これらは畳み込みニューラルネットワーク(CNN)をトレーニングしながら実行される計算動作である。機械学習フレームワーク3404は、行列及びベクトル演算のような多くの機械学習アルゴリズムにより実行される基本線形代数サブプログラムを実装するためのプリミティブも提供できる。
機械がクシュフレームワーク3404は、機械学習アプリケーション3402から受信した入力データを処理し、計算フレームワーク3404への適切な入力を生成できる。計算フレームワーク3406は、GPGPUドライバ3408に提供される基本命令を抽象化して、機械学習フレームワーク3404がGPGPUハードウェア3410を介してハードウェア加速化を利用できるようにし、機械学習フレームワーク3404はGPGPUハードウェア3410の詳細な知識を有する必要がない。さらに、計算フレームワーク3406は、様々な種類に渡り機械学習フレームワーク3404のハードウェア加速化、及びGPGPUハードウェア3410の生成を可能にできる。
<GPGPU機械学習加速化>
図31は、一実施形態によるマルチGPUコンピューティングシステム3100を示す。マルチGPUコンピューティングシステム3100は、ホストインタフェーススイッチ3104を介して複数のGPGPU3106A〜Dに結合されたプロセッサ3102を含み得る。ホストインタフェーススイッチ3104は、一実施形態では、プロセッサ3102をPCI Expressバスに結合するPCI Expressスイッチ装置である。PCI Expressバスを介して、プロセッサ3102は、GPGPU3106A〜Dのセットと通信できる。複数のGPGPU3106A〜Dの各々は、上述のGPGPUのインスタンスであり得る。GPGPU3106A〜Dは、高速ポイントツーポイントGPU間リンクのセット3116を介して相互接続できる。高速GPU間リンクは、専用GPUリンクを介してGPGPU3106A〜Dの各々に接続できる。P2P GPUリンク3116は、GPGPU3106A〜Dの各々の間の直接通信を可能にし、プロセッサ3102が接続されるホストインタフェースバスを介する通信を必要としない。GPU間トラフィックがP2P GPUリンクに向けられるので、ホストインタフェースバスは、システムメモリアクセスのために又は例えば1つ以上のネットワーク装置を介してマルチGPUコンピューティングシステム3100の他のインスタンスと通信するために利用可能なままである。図示の実施形態では、GPGPU3106A〜Dはプロセッサ3102にホストインタフェーススイッチ3104を介して接続するが、一実施形態では、プロセッサ3102は、P2P GPUリンク3116の直接サポートを含み、GPGPU3106A〜Dに直接接続できる。
<機械学習ニューラルネットワーク実装>
本願明細書に記載の実施形態により提供されるコンピューティングアーキテクチャは、機械学習のためにニューラルネットワークをトレーニングし展開するために特に適する種類の並列処理を実行するよう構成できる。ニューラルネットワークは、グラフ関係を有する関数のネットワークとして一般化できる。従来よく知られているように、様々な種類のニューラルネットワーク実装が機械学習で使用されている。1つの例示的なニューラルネットワークは、前述の順伝播型ネットワークである。
第2の例示的な種類のニューラルネットワークは、畳み込みニューラルネットワーク(CNN)である。CNNは、画像データのような知られているグリッドのようなトポロジを有するデータを処理するための専用の順伝播型ニューラルネットワークである。したがって、CNNは、コンピュータビジョン及び画像認識アプリケーションのために一般的に使用されているが、会話及び言語処理のような他の種類のパターン認識にも使用されてよい。CNN入力層にあるノードは、「フィルタ」のセット(網膜にある受容野から発想を得た特徴検出器)に組織化され、各フィルタセットの出力は、ネットワークの連続する層にあるノードへと伝播される。CNNのための計算は、各フィルタに畳み込み算術演算を適用して、該フィルタの出力を生成することを含む。畳み込みは、2つの関数により実行される特別な種類の算術演算であり、2つの元の関数のうちの一方の変更されたバージョンである第3関数を生成する。畳み込みネットワーク用語では、畳み込みへの第1関数は入力と呼ばれ、第2関数は畳み込みカーネルと呼ばれ得る。出力は、特徴マップと呼ばれてよい。例えば、畳み込み層への入力は、入力画像の種々の色成分を定めるデータの多次元アレイであり得る。畳み込みカーネルは、パラメータの多次元アレイであり、パラメータはニューラルネットワークのトレーニングプロセスにより適応される。
リカレントニューラルネットワーク(Recurrent neural networks:RNN)は、層間のフィードバック接続を含む順伝播型ニューラルネットワークのファミリである。RNNは、ニューラルネットワークの異なる部分に渡りパラメータデータを共有することにより、逐次データのモデル化を可能にする。RNNのためのアーキテクチャは、サイクルを含む。RNNからの出力データの少なくとも一部がシーケンスの中の後の入力を処理するためのフィードバックとして使用されるので、サイクルは、変数の現在値がその変数の将来の値に及ぼす影響を表す。この特徴は、言語データが構成され得る変化する特性により、RNNを言語処理に特に有用にする。
以下に説明する図は、例示的な順伝播型CNN及びRNNネットワークを示し、並びに、これらの種類のネットワークの各々をそれぞれトレーニングし及び展開する一般的処理を説明する。これらの説明は例であり、本願明細書に記載の任意の特定の実施形態に限定されないこと、及び図示の概念は深層ニューラルネットワーク及び機械学習技術に一般的に適用できることが理解される。
上述の例示的なニューラルネットワークは、深層学習を実行するために使用できる。深層学習は、深層ニューラルネットワークを使用する機械学習である。単一の隠れ層のみを含む浅いニューラルネットワークとは反対に、深層学習で使用される深層ニューラルネットワークは、複数の隠れ層を有する人工の神経網である。より深いニューラルネットワークは、通常、トレーニングすることがより計算集約的である。しかしながら、ネットワークの追加の隠れ層は、浅い機械学習技術と比較して出力誤りの低減をもたらす、複数ステップのパターン認識を可能にする。
深層学習に使用される深層ニューラルネットワークは、標準的に、モデルに提供される特徴表現に基づき動作(例えば、オブジェクト分類、会話認識、等)を実行できる数学的モデルを表すバックエンドネットワークに結合された特徴認識を実行するためのフロントエンドネットワークを含む。深層学習は、モデルのために実行されるべき手作りの特徴エンジニアリングを要求することなく、機械学習を実行できるようにする。代わりに、深層ニューラルネットワークは、入力データ内の統計的構造又は相関に基づき、特徴を学習できる。学習した特徴は、検出した特徴を出力にマッピングできる数学的モデルに提供され得る。ネットワークにより使用される数学的モデルは、通常、実行されるべき特定のタスクに専用であり、異なるモデルは異なるタスクを実行するために使用される。
ニューラルネットワークが構築されると、学習モデルは、特定のタスクを実行するようネットワークをトレーニングするために、ネットワークに適用できる。学習モデルは、ネットワークの出力誤りを低減するために、モデル内の重みをどのように調整するかを記述する。誤りの逆伝播は、ニューラルネットワークをトレーニングするために使用される一般的方法である。入力ベクトルは、処理のためにネットワークに提示される。ネットワークの出力は、損失関数を用いて所望の出力と比較され、誤り値は、出力層の中のニューロンの各々について計算される。次に、各ニューロンが、元の出力への貢献を粗く表す関連する誤り値を有するまで、誤り値が逆伝播される。ネットワークは、次に、確率的勾配降下法アルゴリズムのようなアルゴリズムを用いて、これらの誤りから学習でき、ニューラルネットワークの重みを更新する。
図32〜33は、例示的な畳み込みニューラルネットワークを示す。図32は、CNN内の種々の層を示す。図32に示すように、画像処理をモデル化するために使用される例示的なCNNは、入力画像の赤、緑、及び青(RGB)成分を記述する入力3202を受信できる。入力3202は、複数の畳み込み層(例えば、畳み込み層3204、畳み込み層3206)により処理できる。複数の畳み込み層からの出力は、任意で、完全結合層3208のセットにより処理されてよい。完全結合層の中のニューロンは、順伝播型ネットワークについて前述したように、前の層の中の全てのアクティベーションへの完全結合を有する。完全結合層3208からの出力は、ネットワークからの出力結果を生成するために使用できる。完全結合層3208内のアクティベーションは、畳み込みの代わりに行列乗算を用いて計算できる。必ずしも全てのCNN実装が完全結合層を利用しない。例えば、幾つかの実装では、畳み込み層3206は、CNNの出力を生成できる。
畳み込み層は粗く結合される。これは、完全結合層3208で見られる伝統的なニューラルネットワーク構成と異なる。伝統的なニューラルネットワーク層は完全結合され、その結果、全ての出力ユニットは全ての入力ユニットと相互作用する。しかしながら、図示のように、フィールドの畳み込みの出力が、(フィールド内のノードの各々のそれぞれの状態値の代わりに)後続の層のノードへの入力であるので、畳み込み層は粗く結合される。畳み込み層に関連付けられたカーネルは、畳み込み演算を実行し、その出力は次の層へ送信される。畳み込み層の中で実行された次元数の削減は、CNNが大規模画像を処理するためにスケーリングできるようにする一態様である。
図33は、CNNの畳み込み層の中の例示的な計算段階を示す。CNNの畳み込み層3312への入力は、畳み込み層3314の3つの段階で処理できる。3つの段階は、畳み込み段階3316、検出段階3318、及びプーリング段階3320を含み得る。畳み込み層3314は、次に、連続する畳み込み層へデータを出力できる。ネットワークの最終畳み込み層は、出力特徴マップデータを生成し、又は完全結合層へ入力を提供して、例えば、CNNへの入力のために分類値を生成する。
畳み込み段階3316では、複数の畳み込みが並列して実行し、線形アクティベーションのセットを生成する。畳み込み段階3316は、線形変換及び平行移動として指定できる任意の変換であるアフィン変換を含み得る。アフィン変換は、回転、平行移動、スケーリング、及びそれらの変換の組み合わせを含む。畳み込み段階は、ニューロンに関連付けられたローカル領域として決定され得る入力の中の特定領域に結合される関数(例えばニューロン)の出力を計算する。ニューロンは、ニューロンの重みとニューロンが結合されているローカル入力の中の領域との間のドット積を計算する。畳み込み段階3316からの出力は、畳み込み層3314の連続する段階により処理される線形アクティベーションのセットを定める。
線形アクティベーションは、検出段階3318により処理できる。検出段階3318では、各線形アクティベーションは、非線形活性化関数により処理される。非線形活性化関数は、畳み込み層の受容野に影響を与えずに、ネットワーク全体の非線形特性を増大させる。幾つかの種類の非線形活性化関数が使用されてよい。1つの特定の種類は、f(x)=max(0,x)として定められる活性化関数を使用する正規化線形ユニット(rectified linear unit:ReLU)である。その結果、アクティベーションは0に閾を定められる。
プーリング段階3320は、畳み込み層3306の出力を近くの出力の概略統計で置き換えるプーリング関数を使用する。プーリング関数は、移動不変性をニューラルネットワークに導入するために使用できる。その結果、入力への小さな平行移動はプーリングされた出力を変化させない。ローカルな平行移動に対する不変性は、入力データ内の特徴の存在が特徴の正確な位置よりも重要であるシナリオで、有用になり得る。最大プーリング、平均プーリング、及びL2ノルムプーリングを含む様々な種類のプーリング関数が、プーリング段階3320の間に使用できる。さらに、幾つかのCNN実装は、プーリング段階を含まない。代わりに、このような実装は、前の畳み込み層と比較して増大したストライドを有する代替の追加畳み込み段階である。
畳み込み層3314からの出力は、次に、次の層3322により処理できる。次の層3322は、追加畳み込み層又は完全結合層3208のうちの1つであり得る。例えば、図33の第1畳み込み層3314は、第2畳み込み層3322へ出力し、第2畳み込み層は、完全結合層3208の第1層へ出力できる。
図34は、例示的なリカレントニューラルネットワーク3400を示す。リカレントニューラルネットワーク(RNN)では、ネットワークの前の状態は、ネットワークの現在の状態の出力に影響を与える。RNNは、種々の関数を用いて種々の方法で構築できる。RNNの使用は、通常、数学的モデルを循環的に使用して、前の入力シーケンスに基づき、将来を予測する。例えば、RNNは、統計的言語モデル化を実行して、前のワードシーケンスが与えられた場合に出現するワードを予測するために使用されてよい。図示のRNN3400は、入力ベクトルを受信する入力層3402、再帰方程式を実装する隠れ層404、前の状態の「記憶(memory)」を可能にするフィードバックメカニズム3405、及び結果を出力する出力層3406を有するとして説明できる。RNN3400は、時間ステップに基づき動作する。所与の時間ステップにおけるRNNの状態は、フィードバックメカニズム3405を介して前の時間ステップに基づき影響を受ける。所与の時間ステップについて、隠れ層3404の状態は、前の状態及び現在の時間ステップにおける入力により定められる。第1時間ステップにおける初期入力(x1)は、隠れ層3404により処理できる。第2入力(x2)は、初期入力(x1)の処理中に決定される状態情報を用いて、隠れ層3404により処理できる。所与の状態はs_t=f(Ux_t+Ws_(t−1))として計算でき、U及びWはパラメータ行列である。関数fは、通常、非線形であり、双曲線正接関数(Tanh)又は修正(rectifier)関数f(x)=max(0,x)である。しかしながら、隠れ層3404で使用される特定の算術関数は、RNN3400の特定の実装の詳細に依存して変化し得る。
記載した基本CNN及びRNNネットワークに加えて、これらのネットワークに対する変形が可能であり得る。1つの例示的なRNN変形は、長短期記憶(long short term memory:LSTM)RNNである。LSTM RNNは、より長い言語シーケンスを処理するために必要であり得る長期依存性を学習できる。CNNに対する変形は、畳み込み深層Beliefネットワークである。これは、CNNと同様の構造を有し、深層Beliefネットワークと同様の方法でトレーニングされる。深層Beliefネットワーク(DBN)は、確率(ランダム)変数の複数の層で構成される生成的ニューラルネットワークである。DBNは、欲張りな教師無し学習を用いて層毎にトレーニングできる。DBNの学習済みの重みは、次に、ニューラルネットワークの重みの最適な初期セットを決定することにより、予めトレーニングされたニューラルネットワークを提供するために使用できる。
図35は、深層ニューラルネットワークのトレーニング及び展開を示す。所与のネットワークがタスクのために構築されると、ニューラルネットワークは、トレーニングデータセット3502を用いてトレーニングされる。トレーニング処理のハードウェア加速化を可能にするために、種々のトレーニングフレームワーク3504が開発されている。例えば、上述の機械学習フレームワークは、トレーニングフレームワークとして構成されてよい。トレーニングフレームワーク3504は、トレーニングされていないニューラルネットワーク3506に接続し、本願明細書に記載の並列処理リソースを用いてトレーニングされていないニューラルネットワークをトレーニングさせて、トレーニング済みニューラルネットワーク3508を生成できる。
トレーニング処理を開始するために、初期重みがランダムに又は深層Beliefネットワークを用いて予めトレーニングすることにより、選択されてよい。トレーニングサイクルが、次に、教師あり又は教師無しの方法で実行される。
教師あり学習は、例えばトレーニングデータセット3502が入力の所望の出力と対にされた該入力を含むとき、トレーニングが介入動作として実行される、又はトレーニングデータセットが既知の出力を有し、ニューラルネットワークの出力が手動で評価される、学習方法である。ネットワークは、入力を処理し、生じた出力を期待又は所望の出力セットに対して比較する。誤りが、次にシステムを通じて逆伝播される。トレーニングフレームワーク3504は、トレーニングされていないニューラルネットワーク3506を制御する重みを調整するよう調整できる。トレーニングフレームワーク3504は、トレーニングされていないニューラルネットワーク3506が既知の入力データに基づき正しい答えを生成するのに適したモデルに向かってどれだけ良好に収束していくかを監視するためのツールを提供できる。トレーニング処理は、ニューラルネットワークにより生成される出力を精緻化するようネットワークの重みが調整されるにつれ、繰り返し生じる。トレーニング処理は、ニューラルネットワークがトレーニング済みネットワーク3508に関連する統計的に所望の精度に達するまで、継続できる。トレーニング済みニューラルネットワーク3508は、次に、任意の数の機械学習動作を実施するよう展開できる。
教師無し学習は、ネットワークがラベル付けされていないデータを用いて自身をトレーニングしようとする学習方法である。したがって、教師無し学習では、トレーニングデータセット3502は、任意の関連付けられた出力データを伴わない入力データを含む。トレーニングされていないニューラルネットワーク3506は、ラベル付けされていない入力の中のグループ化を学習でき、個々の入力がデータセット全体にどのように関連するかを決定できる。教師無しトレーニングは、データの次元数を削減するのに有用な動作を実行できるトレーニング済みニューラルネットワーク3507の一種である自己編成マップを生成するために使用できる。教師無しトレーニングは、データの正常パターンから逸脱する入力データセット内のデータ点の識別を可能にする例外検出を実行するためにも使用できる。
教師あり及び教師無しトレーニングに対する変形も利用されてよい。半教師あり学習は、トレーニングデータセット3502が同じ分散のラベル付き及びラベル無しデータの混合を含む技術である。増分学習は、入力データがモデルを更にトレーニングするために連続的に使用される教師あり学習の変形である。増分学習は、初期トレーニングの間にネットワーク内に注入された知識を忘れること無く、トレーニング済みニューラルネットワーク3508が新しいデータセットに適応できるようにする。
教師あり又は教師無しにかかわらず、特に深層ニューラルネットワークのためのトレーニング処理は、単一の計算ノードにとっては非常に計算集中的であり得る。単一の計算ノードを使用する代わりに、トレーニング処理を加速化するために、計算ノードの分散型ネットワークを使用できる。
図36Aは、分散型学習を示すブロック図である。分散型学習は、ニューラルネットワークの教師あり又は教師無しトレーニングを実行するために上述のノードのような複数の分散型計算ノードを使用するトレーニングモデルである。分散型計算ノードは、それぞれ、1つ以上のホストプロセッサと、高度並列化汎用グラフィック処理ユニットのような1つ以上の汎用処理ノードとを含み得る。図示のように、分散型学習は、モデル並列化3602、データ並列化3604、又はモデル及びデータ並列化の組み合わせで実行できる。
モデル並列化3602では、分散型システムの中の異なる計算ノードが、単一のネットワークの異なる部分のトレーニング計算を実行できる。例えば、ニューラルネットワークの各層は、分散型システムの異なる処理ノードによりトレーニングできる。モデル並列化の利益は、特に大規模モデルに対するスケーリングの能力を含む。ニューラルネットワークの異なる層に関連する計算を分割することは、全ての層の重みが単一の計算ノードのメモリに適応しない非常に大規模なニューラルネットワークのトレーニングを可能にする。幾つかの例では、モデル並列化は、大規模ニューラルネットワークの教師無しトレーニングを実行する際に特に有用である。
データ並列化3604では、分散型ネットワークの異なるノードは、モデルの完全なインスタンスを有し、各ノードはデータの異なる部分を受信する。異なるノードからの結果は次に結合される。データ並列化の異なるアプローチが可能であるが、データ並列トレーニングのアプローチは、全て、結果を結合し、各ノード間のモデルパラメータを同期化する技術を必要とする。データを結合する例示的なアプローチは、パラメータ平均化及びデータ並列化に基づく更新を含む。パラメータ平均化は、トレーニングデータセットのサブセットで各ノードをトレーニングし、グローバルパラメータ(例えば、重み、バイアス)を各ノードからのパラメータの平均に設定する。パラメータ平均化は、パラメータデータを維持する中央パラメータサーバを使用する。データ並列化に基づく更新は、ノードからのパラメータをパラメータサーバへ転送する代わりに、モデルへの更新が転送される点を除き、パラメータ平均化と同様である。さらに、データ並列化に基づく更新は、非集中型方法で実行でき、更新は圧縮されノード間で転送される。
結合型モデル及びデータ並列化3606は、例えば、各計算ノードが複数のCPUを含む分散型システムで実装できる。各ノードは、各ノード内の個別GPUがモデルの異なる部分をトレーニングするために使用されるモデルの完全なインスタンスを有することができる。
分散型トレーニングは、単一マシンでのトレーニングと比べて増大したオーバヘッドを有する。しかしながら、本願明細書に記載の並列プロセッサ及びGPGPUは、それぞれ、高帯域幅GPU間データ転送及び加速化されたリモートデータ同期を可能にするための技術を含む、分散型トレーニングのオーバヘッドを削減するための種々の技術を実装できる。
<例示的な機械学習アプリケーション>
機械学習は、限定ではないが、コンピュータビジョン、自立走行及びナビゲーション、会話認識、及び言語処理を含む種々の技術的問題を解決するために適用できる。コンピュータビジョンは、伝統的に、機械学習アプリケーションのための最も活発な研究分野のうちの1つである。コンピュータビジョンの用途は、顔認識のような人間の視覚的能力を再現することから、視覚的能力の新しいカテゴリを生成することまで、広範囲に及ぶ。例えば、コンピュータビジョンアプリケーションは、ビデオ内に見えるオブジェクト内で生じた振動から音波を認識するよう構成できる。並列プロセッサ加速化機械学習は、コンピュータビジョンアプリケーションが、従前に実現可能であったよりも有意に大きなトレーニングデータセットを用いてトレーニングされることを可能にし、推定システムが低電力並列プロセッサを用いて展開されることを可能にする。
並列プロセッサ加速化機械学習は、車線及び道路標識認識、障害物回避、ナビゲーション、及び走行制御を含む自立走行アプリケーションを有する。加速化機械学習技術は、特定のトレーニング入力に耐知る適切な応答を定めるデータセットに基づき走行モデルをトレーニングするために使用できる。本願明細書に記載の並列プロセッサは、自立走行ソリューションのために使用される益々複雑なニューラルネットワークの高速なトレーニングを可能にでき、自立車両に統合するのに適したモバイルプラットフォーム内での低電力推定プロセッサの展開を可能にする。
並列プロセッサ加速化深層ニューラルネットワークは、自動会話認識(automatic speech recognition:ASR)への機械学習アプローチを可能にした。ASRは、入力音響シーケンスが与えられると最も起こり得る言語シーケンスを計算する関数の生成を含む。深層ニューラルネットワークを用いる加速化機械学習は、従前にASRのために使用された隠れマルコフモデル(hidden Markov model:HMM)及びガウス混合モデル(Gaussian mixture model:GMM)の置換を可能にした。
並列プロセッサ加速化機械学習は、自然言語処理を加速化するためにも使用できる。自動学習手順は、統計的推定アルゴリズムを利用して、誤り又は馴染みのない入力に対してロバストであるモデルを生成する。例示的な自然言語プロセッサアプリケーションは、人間の言語の間の自動機械翻訳を含む。
機械学習のために使用される並列処理プラットフォームは、トレーニングプラットフォームと展開プラットフォームとに分けられる。トレーニングプラットフォームは、通常、高度並列化され、マルチGPUの単一ノードのトレーニング及びマルチノードマルチGPUのトレーニングを加速化するための最適化を含む。トレーニングに適した例示的な並列プロセッサは、本願明細書に記載の高度並列汎用グラフィック処理ユニット及び/又はマルチGPUコンピューティングシステムを含む。これに対して、展開される機械学習プラットフォームは、通常、カメラ、自動ロボット、及び自律車両のような製品内での使用に適する低電力並列プロセッサを含む。
図36Bは、トレーニング済みモデルを用いて推定を実行するのに適する例示的な推定システムオンチップ(SOC)3100を示す。SOC3100は、メディアプロセッサ3602、ビジョンプロセッサ3604、GPGPU3106、及びマルチコアプロセッサ3608を含む処理コンポーネントを統合できる。SOC3100は、処理コンポーネントの各々によりアクセス可能な共有オンチップデータプールを可能にするオンチップメモリ3605を更に含み得る。処理コンポーネントは、自律車両及び自律ロボットを含む種々の機械学習プラットフォームに展開できるために、低電力動作のために最適化できる。例えば、SOC3100の一実装は、自律車両のための主制御システムの一部として使用できる。SOC3100が自律車両内での使用のために構成される場合、SOCは、展開の管轄区域の関連する機能的安全規格に従うよう設計され構成される。
動作中、メディアプロセッサ3602及びビジョンプロセッサ3604は、コンピュータビジョン動作を加速化するために協働できる。メディアプロセッサ3602は、複数の高解像度(例えば、4K、8K)ビデオストリームの低遅延復号を可能にできる。復号ビデオストリームは、オンチップメモリ3605内のバッファに書き込むことができる。ビジョンプロセッサ3604は、次に、復号ビデオをパースし、トレーニング済み画像認識モデルを用いてフレームを処理することに備えて、復号ビデオのフレームに対して予備処理動作を実行する。例えば、ビジョンプロセッサ3604は、高解像度ビデオデータに対して画像認識を実行するために使用されるCNNの畳み込み演算を加速化できる。一方で、バックエンドモデル計算は、GPGPU3106により実行される。
マルチコアプロセッサ3608は、メディアプロセッサ3602及びビジョンプロセッサ3604により実行されるデータ転送及び共有メモリ動作の順序づけ及び同期化を支援するための制御ロジックを含むことができる。マルチコアプロセッサ3608は、GPGPU3106の推定計算能力を利用できるソフトウェアアプリケーションを実行するために、アプリケーションプロセッサとしても機能できる。例えば、ナビゲーション及び走行ロジックの少なくとも一部は、マルチコアプロセッサ3608上で実行するソフトウェア内に実装できる。このようなソフトウェアは、計算作業負荷をGPGPU3106に直接発行できる。或いは、計算作業負荷は、これらの動作の少なくとも一部をGPGPU3106にオフロードできるマルチコアプロセッサ3608に発行できる。
GPGPU3106は、高度並列汎用グラフィック処理ユニットDPLAB00内の低電力構成の計算クラスタDPLAB06A〜DPLAB06Hのような計算クラスタを含むことができる。GPGPU3106内の計算クラスタは、トレーニング済みニューラルネットワーク上で推定計算を実行するために特に最適化された命令をサポートできる。例えば、GPGPU3106は、8ビット及び4ビット整数ベクトル演算のような低精度計算を実行するための命令をサポートできる。

<光線追跡アーキテクチャ>
一実装では、グラフィックプロセッサは、リアルタイム光線追跡を実行するための回路及び/又はプログラムコードを含む。幾つかの実施形態では、光線トラバース/光線交差動作を含む本願明細書に記載の種々の光線追跡動作を実行するために、光線追跡コアの専用セットが、グラフィックプロセッサに含まれる。光線追跡コアに加えて、一実施形態は、プログラマブルシェーディング動作を実行するためのグラフィック処理コアの複数のセット、及びテンソルデータに対して行列演算を実行するためのテンソルコアの複数のセットを含む。
図37は、マルチコアグループ3700A〜Nに構成されたグラフィック処理リソースの専用セットを含む1つのこのようなグラフィック処理ユニット(GPU)3705の例示的な部分を示す。単一のマルチコアグループ3700Aのみの詳細が提供されるが、他のマルチコアグループ3700B〜Nはグラフィック処理リソースの同じ又は同様のセットを備えられてよいことが理解される。
図示のように、マルチコアグループ3700Aは、グラフィックコアのセット3730、テンソルコアのセット3740、及び光線追跡コアのセット3750を含んでよい。スケジューラ/ディスパッチャ3710は、種々のコア3730、3740、3750での実行のためにグラフィックスレッドをスケジューリングしディスパッチする。レジスタファイルのセット3720は、グラフィックスレッドを実行するとき、コア3730、3740、3750により使用されるオペランド値を格納する。これらは、例えば、整数値を格納する整数レジスタ、浮動小数点値を格納する浮動小数点レジスタ、パックされたデータ要素(整数及び/又は浮動小数点データ要素)を格納するベクトルレジスタ、及びテンソル/行列値を格納するタイルレジスタを含んでよい。一実施形態では、タイルレジスタは、ベクトルレジスタの結合されたセットとして実装される。
1つ以上の結レベル1(L1)キャッシュ及びテクスチャユニット3760は、テクスチャデータ、頂点データ、ピクセルデータ、光線データ、境界ボリュームデータ、等のようなグラフィックデータを各マルチコアグループ3700A内にローカルに格納する。マルチコアグループ3700A〜Nの全部又はサブセットにより共有されるレベル2(L2)キャッシュ3780は、複数の同時グラフィックスレッドのためのグラフィックデータ及び/又は命令を格納する。図示のように、L2キャッシュ3780は、複数のマルチコアグループ3700A〜Nに渡り共有されてよい。1つ以上のメモリ制御部3770は、システムメモリ(例えばDRAM)及び/又は専用グラフィックメモリ(例えばGDDR6メモリ)であってよいメモリ3798にGPU3705を結合する。
入力/出力(I/O)回路3795は、デジタル信号プロセッサ(DSP)、ネットワーク制御部、又はユーザ入力装置のような1つ以上のI/O装置3790にGPU3705を結合する。オンチップ相互接続は、I/O装置3790をGPU3705及びメモリ3798に結合するために使用されてよい。I/O回路3795の1つ以上のI/Oメモリ管理ユニット(I/O memory management unit:IOMMU)3770は、I/O装置3790をシステムメモリ3798に直接結合する。一実施形態では、IOMMU3770は、仮想アドレスをシステムメモリ3798内の物理アドレスにマッピングするために、ページテーブルの複数のセットを管理する。本実施形態では、I/O装置3790、CPU3799、及びGPU3705は、同じ仮想アドレス空間を共有してよい。
一実装では、IOMMU3770は、仮想化をサポートする。この場合、IOMMU3770は、ゲスト/グラフィック仮想アドレスを、ゲスト/グラフィック物理アドレスにマッピングする第1ページテーブルセット、及びゲスト/グラフィック物理アドレスを(例えばシステムメモリ3798内の)システム/ホスト物理アドレスにマッピングする第2ページテーブルセットを管理してよい。第1及び第2ページテーブルセットの各々の基本アドレスは、制御レジスタに格納され、コンテキストスイッチでスワップアウトされてよい(例えば、その結果、新しいコンテキストが、関連するページテーブルセットへのアクセスを提供される)。図37に図示しないが、コア3730、3740、3750及び/又はマルチコアグループ3700A〜Nの各々は、ゲスト仮想トランスレーションをゲスト物理トランスレーションへ、ゲスト物理トランスレーションをホスト物理トランスレーションへ、及びゲスト仮想トランスレーションをホスト物理トランスレーションへキャッシュするトランスレーションルックアサイドバッファ(translation lookaside buffer:TLB)を含んでよい。
一実施形態では、CPU3799、GPU3705、及びI/O装置3790は、単一の半導体チップ及び/又はチップパッケージに統合される。図示のメモリ3798は、同じチップに統合されてよく、又はオフチップインタフェースを介してメモリ制御部3770に結合されてよい。一実装では、メモリ3798は、同じ仮想アドレス空間を他の物理システムレベルメモリとして共有するGDDR6メモリを含むが、本発明の基本原理はこの特定の実装に限定されない。
一実施形態では、テンソルコア3740は、深層学習動作を実行するために使用される基本的計算動作である行列演算を実行するよう特に設計された複数の実行ユニットを含む。例えば、同時行列乗算演算は、ニューラルネットワークトレーニング及び推定のために使用されてよい。テンソルコア3740は、単一精度浮動小数点(例えば32ビット)、半精度浮動小数点(例えば16ビット)、整数ワード(16ビット)、バイト(8ビット)、半バイト(4ビット)を含む種々のオペランド精度を用いて、行列処理を実行してよい。一実施形態では、ニューラルネットワーク実装は、各レンダリングされたシーンの特徴を抽出し、場合によっては複数のフレームからの詳細を結合して、高品質な最終画像を構成する。
深層学習実装では、並列行列乗算作業は、テンソルコア3740上での実行のためにスケジューリングされてよい。ニューラルネットワークのトレーニングは、特に、相当数の行列ドット積演算を必要とする。N×N×N行列乗算の内積式を処理するために、テンソルコア3740は、少なくともN個のドット積処理要素を含んでよい。行列乗算を開始する前に、1つの行列全体が、タイルレジスタにロードされ、第2行列の少なくとも1つの列がN個のサイクルの各サイクルでロードされる。各サイクルに、処理されるN個のドット積がある。
行列要素は、16ビットワード、8ビットバイト(例えばINT8)、及び4ビット半バイト(例えばINT4)を含む特定の実装に依存して、異なる精度で格納されてよい。異なる精度モードが、テンソルコア3740について指定されて、最も効率的な精度が異なる作業負荷(例えば、バイト及び半バイトへの量子化に耐え得る推定作業負荷)に対して使用されることを保証してよい。
一実施形態では、光線追跡コア3750は、リアルタイム光線追跡及び非リアルタイム光線追跡実装の両方の光線追跡動作を加速する。特に、光線追跡コア3750は、境界ボリューム階層構造(bounding volume hierarchy:BVH)を用いて光線トラバースを実行し及び光線とBVHボリューム内に閉じ込められたプリミティブとの間の交差(intersection)を識別する光線トラバース/交差回路を含む。光線追跡コア3750は、(例えばZバッファ又は同様の構成を用いて)深さテスト及びカリングを実行するう回路も含んでよい。一実施形態では、光線追跡コア3750は、少なくとも一部がテンソルコア3740上で実行されてよい本願明細書に記載される画像ノイズ除去技術と共同して、トラバース及び交差動作を実行する。例えば、一実施形態では、テンソルコア3740は、光線追跡コア3750により生成されたフレームのノイズ除去を実行するために、深層学習ニューラルネットワークを実装する。しかしながら、CPU3799、グラフィックコア3730、及び/又は光線追跡コア3750は、ノイズ除去及び/又は深層学習アルゴリズムの全部又は一部を実装してもよい。
さらに、上述のように、ノイズ除去への分散型アプローチが利用されてよく、ここで、GPU3705は、ネットワーク又は高速相互接続を介して他のコンピューティング装置に結合されるコンピューティング装置の中にある。本実施形態では、相互接続されたコンピューティング装置は、ニューラルネットワーク学習/トレーニングデータを共有して、システム全体が異なる種類の画像フレーム及び/又は異なるグラフィックアプリケーションのためにノイズ除去を実行するために学習する速度を向上する。
一実施形態では、光線追跡コア3750は、全てのBVHトラバース及び光線プリミティブ交差を処理して、グラフィックコア3730が光線当たり数千個もの命令により過負荷になることを防ぐ。一実施形態では、各光線追跡コア3750は、(例えばトラバース動作のために)境界ボックステストを実行する第1専用回路セットと、(例えばトラバースされた光線を交差する)光線三角形交差テストを実行する第2専用回路セットと、を含む。したがって、一実施形態では、マルチコアグループ3700Aは、単に光線プローブを出すことができ、光線追跡コア3750は、光線トラバース及び交差を独立に実行してヒットしたデータ(例えば、ヒット、ヒット無し、複数のヒット、等)をスレッドコンテキストに返す。他のコア3730、3740は、他のグラフィック又は計算作業を実行するために自由にされ、その間、光線追跡コア3750は、トラバース及び交差動作を実行する。
一実施形態では、各光線追跡コア3750は、BVHテスト動作を実行するためのトラバースユニットと、光線プリミティブ交差テストを実行する交差ユニットと、を含む。交差ユニットは、「ヒット」、「ヒット無し」、又は「複数ヒット」応答を生成し、適切なスレッドに提供する。トラバース及び交差動作の間、他のコア(例えば、グラフィックコア3730及びテンソルコア3740)の実行リソースは、他の形式のグラフィック作業を実行するために自由にされる。
後述する1つの特定の実施形態では、ハイブリッドラスタライズ/光線追跡アプローチが使用され、作業がグラフィックコア3730と光線追跡コア3750との間で分散される。
一実施形態では、光線追跡コア3150(及び/又は他のコア3730、3740)は、DispatchRaysコマンド及び光線生成、最近接ヒット、任意のヒット、及びミスシェーダを含みオブジェクト毎にシェーダ及びテクスチャのユニークなセットの割り当てを可能にするMicrosoftのDirectX Ray Tracing(DXR)のような光線追跡命令セットのためのハードウェアサポートを含む。光線追跡コア3750、グラフィックコア3730、及びテンソルコア3740によりサポートされ得る別の光線追跡プラットフォームは、Vulkan1.1.85である。しかしながら、本発明の基本原理は、任意の特定の光線追跡ISAに限定されないことに留意する。
一般に、種々のコア3750、3740、3730は、光線生成、最近接ヒット、任意のヒット、光線プリミティブ交差、プリミティブ毎及び下位構造境界ボックス構成、ミス(miss)、ビジット(visit)、及び例外(exception)のための命令/関数を含む光線追跡命令セットをサポートしてよい。より具体的には、一実施形態は、以下の機能を実行するために光線追跡命令を含む。
光線生成(Ray Generation):光線生成命令は、ピクセル、サンプル、又は他のユーザ定義作業割り当て毎に、実行されてよい。
最近接ヒット(Closest Hit):最近接ヒット命令は、光線のシーン内のプリミティブとの最近接交差点の位置を特定するために実行されてよい。
任意のヒット(Any Hit):任意のヒット命令は、光線とシーン内のプリミティブとの間の複数の交差を識別して、場合によっては新しい最近接交差点を識別する。
交差(Intersection):交差命令は、光線プリミティブ交差テストを実行し、結果を出力する。
プリミティブ毎の境界ボックス構成(Per−primitive Bounding box Construction):この命令は、(例えば、新しいBVH又は他の加速データ構造を構築するとき)所与のプリミティブ又はプリミティブ群の周囲に境界ボックスを構築する。
ミス(Miss):光線がシーン内の全ての幾何学形状又はシーンの特定の領域を避ける(miss)ことを示す。
ビジット(Visit):光線がトラバースする子ボリュームを示す。
例外(Exceptions):種々の種類の例外処理(例えば、種々のエラー状態について呼び出される)を含む。

<階層構造ビーム追跡>
境界ボリューム階層構造は、グラフィックプリミティブ及び他のグラフィックオブジェクトに対して動作が実行される効率を向上するために一般に使用される。BVHは、幾何学形状オブジェクトのセットに基づき構築される階層構造木構造である。木構造の一番上には、所与のシーン内の幾何学形状オブジェクトの全部を含むルートノードがある。個々の幾何学形状オブジェクトは、木のリーフノードを形成する境界ボリューム内に包まれる。これらのノードは、次に、小さなセットとしてグループ化され、より大きな境界ボリュームないに包含される。これらは、一方で、他のより大きな境界ボリュームにも再帰的にグループ化され包含され、最終的には、木の一番上にあるルートノードにより表現される単一の境界ボリュームを有する木構造を生じる。境界ボリューム階層構造は、衝突検出、プリミティブカリング、及び光線追跡において使用される光線トラバース/交差動作のような、幾何学形状オブジェクトに対する種々の動作を効率的にサポートするために使用される。
光線追跡アーキテクチャでは、光線は、光線プリミティブ交差を決定するためにBVHを通じてトラバースされる。例えば、光線がBVHのルートノードを通過しない場合、光線は、BVHにより包含されるプリミティブのいずれにも交差せず、このプリミティブセットに関して該光線のために更なる処理は必要ない。光線がBVHの第1子ノードを通過するが、第2子ノードを通過しない場合、光線は、第2子ノードにより包含される任意のプリミティブに対してテストされる必要がない。このように、BVHは、光線プリミティブ交差についてテストする効率的メカニズムを提供する。
本発明の一実施形態では、連続光線のグループは、「ビーム」と呼ばれ、個々の光線ではなく、BVHに対してテストされる。図38は、異なる光線により概略を示される例示的なビーム3801を示す。4本の光線により定められるパッチ3800に交差する任意の光線は、同じビーム内にあると考えられる。図38のビーム3801は長方形構成の光線により定められるが、ビームは、本発明の基本原理に従ったまま種々の他の方法で定められてよい(例えば、円形、楕円形、等)。
図39は、GPU3920の光線追跡エンジン3910が本願明細書に記載のビーム追跡技術を実装する例示的な実施形態を示す。特に、光線生成回路3904は、トラバース及び交差動作が実行されるべき複数の光線を生成する。しかしながら、個々の光線に対してトラバース及び交差動作を実行するのではなく、図示の実施形態は、ビーム階層構造構成回路3905により生成されるビームの階層構造3907を用いてトラバース及び交差を実行する。一実施形態では、ビーム階層構造は、境界ボリューム階層構造(BVH)と同様である。例えば、図40は、複数の異なるコンポーネントに細分化されてよい1次ビーム4000の例を提供する。特に、1次ビーム4000は、4分の1象限4001〜4004に分割されてよい。各象限は、それ自体が、象限4004内のサブ象限A〜Dのようなサブ象限に分割されてよい。1次ビームは、種々の方法で細分化されてよい。例えば、一実施形態では、1次ビームは、(4分の1ではなく)半分に分割されてよく、各半分は半分に分割されてよい、等である。細分化がどのように行われるかにかかわらず、一実施形態では、BVHと同様の方法で階層構造が生成される。例えば、1次ビーム4000を表すルートノード、それぞれが4分の1象限4001〜4004により表現される第1レベルの子ノード、各サブ象限A〜Dの第2レベル子ノード、等を有する。
一実施形態では、ビーム階層構造3907が構成されると、トラバース/交差回路3906は、ビーム階層構造3907及びBVH3908を用いてトラバース/交差動作を実行する。特に、BVHに対してビームをテストし、BVHのどの部分も交差しないビームの部分をカリングしてよい。図40に示すデータを用いて、例えば、サブ領域4002及び4003に関連付けられたサブビームがBVH又はBVHの特定のブランチと交差しない場合、それらは、BVH又はブランチに関してカリングされてよい。残りの部分4001、4004は、深さ優先探索、又は他の探索アルゴリズムを実行することにより、BVHに対してテストされてよい。
図41に、本発明の一実施形態による方法が示される。方法は、上述のグラフィック処理アーキテクチャのコンテキストの範囲内で実装され得るが、任意の特定のアーキテクチャに限定されない。
4100で、複数の光線を含む1次ビームが構成される。4101で、ビームは細分化され、ビーム階層構造を生成するために階層構造データ構造が生成される。一実施形態では、動作4100〜4101は、複数の光線からビーム階層構造を構成する単一の統合された動作として実行される。4102で、ビーム階層構造は、(ビーム階層構造からの)光線、及び/又はBVHからのノード/プリミティブをカリングするために、BVHと共に使用される。4103で、光線プリミティブ交差が、残りの光線及びプリミティブについて決定される。

<分散型光線追跡システムにおける損失及び無損失パケット圧縮>
一実施形態では、光線追跡動作は、ネットワークを介して一緒に結合される複数の計算ノードに渡り分散される。図42は、例えば、光線追跡動作を並列に実行し、場合によってはノードのうちの1つで結果を結合する、複数の光線追跡ノード4210〜4213を含む光線追跡クラスタ4200を示す。図示のアーキテクチャでは、光線追跡ノード4210〜4213は、ゲートウェイを介してクライアント側の光線追跡アプリケーション4230に通信可能に結合される。
分散型アーキテクチャに伴う困難のうちの1つは、大量のパケットデータが光線追跡ノード4210〜4213の各々の間で送信されなければならないことである、一実施形態では、無損失圧縮技術及び損失圧縮技術の両方が、光線追跡ノード4210〜4213の間で送信されるデータを削減するために使用される。
無損失圧縮を実施するためには、特定種類の動作の結果で満たされたパケットを送信するのではなく、受信側ノードに結果を再構成させるデータ又はコマンドが送信される。例えば、確率的にサンプリングされた面照明及びアンビエントオクルージョン(ambient occlusion:AO)動作は、必ずしも方向を必要としない。その結果、一実施形態では、送信側ノードは、単に、ランダムサンプリングを実行するために受信側ノードにより使用されるランダムシードを送信する。例えば、シーンがノード4210〜4212に渡り分散される場合、光1を点p1〜p3でサンプリングするためには、光ID及び起点(origin)がノード4210〜4212へ送信される必要があるだけである。ノードの各々は、次に、光を独立に確率的にサンプリングしてよい。一実施形態では、ランダムシードは、受信側ノードにより生成される。同様に、1次光線ヒット点について、連続フレームについて元の点を待たずに、アンビエントオクルージョン(AO)及びソフトシャドウサンプリングが、ノード4210〜4212で計算できる。さらに、光線セットが同じ点光源へ進むことが分かっている場合、光源を識別する命令が、受信側ノードへ送信されてよい。受信側ノードはそれを光線セットに適用する。別の例として、単一の点を送信したN個のアンビエントオクルージョンが存在する場合、この点からN個のサンプルを生成するために、コマンドが送信されてよい。
種々の追加の技術が損失圧縮のために適用されてよい。例えば、一実施形態では、BVH、プリミティブ、及び光線に関連する全ての座標値を量子化するために、量子化係数が利用されてよい。さらに、BVHノード及びプリミティブのようなデータのために使用される32ビット浮動小数点値が、8ビット整数値に変換されてよい。1つの特定の実装では、光線パケットの束は、完全な精度で格納されるが、個々の光線点P1〜P3は、束へのインデックス付きオフセットとして送信される。同様に、ローカル座標として8ビット整数値を使用する複数のローカル座標系が生成されてよい。これらのローカル座標系の各々の原点の位置は、完全な精度(例えば、32ビット浮動小数点)値を用いて符号化されてよく、グローバル及びローカル座標系を効率的に接続する。
以下は、本発明の一実施形態で使用される無損失圧縮の一例である。光線追跡プログラムの内部で使用される光線データフォーマットの一例は、以下の通りである。
Figure 2021057011
各々の及び全ての生成されたノードの生データを送信する代わりに、このデータは、値をグループ化することにより、及び可能な場合には適切なメタデータを使用して暗示的光線を生成することにより、圧縮できる。
<光線データのバンドル及びグループ化>
Figure 2021057011
<起点が全て共有される>
全ての光線に渡り単一の起点のみが格納されることを除き、全部の光線データがパケット化される。RayPacket.flagsはRAYPACKET_COMMON_ORIGINに設定される。光線パケット(RayPacket)が受信されたときパケット解除されると、起点は単一の起点値から満たされる。
<起点は、幾つかの光線の間でのみ共有される>
起点を共有する光線を除き、全ての光線データはパケット化される。ユニークな共有起点の各グループについて、動作(共有された起点)を識別し、起点を格納し,及びどの光線が情報を共有するかをマスクする演算子がパックされる。このような動作は、材料ID、プリミティブID、起点、方向、法線、等のようなノード間で共有される任意の値に対して行うことができる。
Figure 2021057011
<暗示的光線を送信する>
しばしば、光線データは、受信端で、該光線データを生成するために使用した最小限のメタ情報により、導出できる。非常に一般的な例は、領域を確率的にサンプリングするために複数の2次光線を生成することである。送信側が2次光線を生成し、それを送信し、及び受信側がそれに対して動作を行う代わりに、送信側は、光線が任意の依存情報により生成される必要があるというコマンドを送信でき、光線は受信端で生成される。どの受信側へ光線を送信すべきかを決定するために、光線が送信側により最初に生成される必要がある場合には、光線が生成され、ランダムシードが正確に同じ光線を再生成するために送信され得る。
例えば、面光源をサンプリングする64本のシャドウ光線によりヒットポイントをサンプリングするために、64本全部の光線は、同じ計算N4からの領域と交差する。共通の起点及び法線を有する光線パケット(RayPacket)が生成される。受信側に結果として生じたピクセル貢献をシェーディングすることを望む場合、より多くのデータが送信され得る。しかし、本例では、光線が別のノードデータにヒットするか否かだけを返したいと仮定する。光線動作(RayOperation)は、シャドウ光線生成(generate shadow ray)動作のために生成され、サンプリングされるべき光ID(lightID)の値及び乱数シードを割り当てる。N4は、光線パケットを受信すると、全ての光線に共有起点データを満たし及び乱数シードにより確率的にサンプリングされた光ID(lightID)に基づき方向を設定することにより、完全に満たされた光線データを生成し、元の送信側の生成したのと同じ光線を生成する。結果が返されると、全ての光線の2値結果が返される必要があるだけであり、これは、光線に対するマスクにより処理できる。
本例で元の64本の光線を送信することは、104バイト×64光線=6656バイトを使用するだろう。戻り光線がそれらの生の形式で送信された場合、これは13312バイトにまで更に倍増する。共通の光線基点、法線、及びシード及びIDによる光線生成動作のみを送信する無損失圧縮の使用では、交差マスクのための8バイトを有し、29バイトのみが送信される。この結果、ネットワークを介して送信される必要のあるデータ圧縮率を約360:1にする。これは、何らかの方法で識別される必要があってよいが実装に任される、メッセージ自体を処理するためのオーバヘッドを含まない。他の動作は、光線起点及び方向を1次光線のピクセルID(pixelD)から再計算するために、ピクセルIDを光線パケット内の範囲に基づき再計算するために、及び値の再計算の多くの他の可能な実装のために、行われてよい。同様の動作は、送信された任意の単一の又はグループの光線に対して使用でき、シャドウ、反射、屈折、アンビエントオクルージョン、交差、ボリューム交差、シェーディング、追跡する経路内の跳ね返り反射、等を含む。
図43は、光線追跡パケットの圧縮及び伸張を実行する2つの光線追跡ノード4310〜4311の追加の詳細を示す。特に、一実施形態では、第1光線追跡エンジン4330が第2光線追跡エンジン4331へデータを送信する準備が整うと、光線圧縮回路4320は、本願明細書に記載の光線追跡データの損失及び/又は無損失圧縮を実行する(例えば、32ビット値を8ビット値に変換する、生データを、データを再構成するための命令に置き換える、等)。圧縮された光線パケット4301は、ネットワークインタフェース4325から、ローカルネットワーク(例えば、10Gb/s、100Gb/sイーサネットネットワーク)を介して、ネットワークインタフェース4326へ送信される。光線伸張回路は、次に、適切な場合に光線パケットを伸張する。例えば、光線伸張回路は、光線追跡データを再構成するためにコマンドを実行してよい(例えば、ランダムシードを用いて、照明動作のためにランダムサンプリングを実行する)。光線追跡エンジン4331は、次に、受信したデータを用いて、光線追跡動作を実行する。
逆方向では、光線圧縮回路4341は光線データを圧縮し、ネットワークインタフェース4326が圧縮された光線データをネットワークを介して(例えば、本願明細書に記載の技術を用いて)送信し、光線伸張回路4340が、必要な場合に光線データを伸張し、光線追跡エンジン4330が光線追跡動作で該データを使用する。図43には別個のユニットとして示したが、光線伸張回路4340〜4341は、それぞれ光線追跡エンジン4330〜4331内に統合されてよい。例えば、圧縮された光線データが光線データを再構成するためのコマンドを含む範囲内で、これらのコマンドは、それぞれの光線追跡エンジン4330〜4331により実行されてよい。
図44に示すように、光線圧縮回路3720は、本願明細書に記載の損失圧縮技術を実行する(例えば、32ビット浮動小数点座標を8ビット整数座標に変換する)損失圧縮回路4401、及び無損失圧縮技術を実行する(例えば、コマンド及びデータを送信して、光線伸張回路3721がデータを再構成できるようにする)無損失圧縮回路4403を含んでよい。光線伸張回路3721は、損失伸張回路4402、及び無損失伸張を実行する無損失伸張回路4404を含む。
図45に、一実施形態による方法が示される。方法は、本願明細書に記載の光線追跡アーキテクチャ上で実装され得るが、任意の特定のアーキテクチャに限定されない。
4500で、第1光線追跡ノードから第2光線追跡ノードへと送信される光線データが受信される。4501で、損失圧縮回路が、第1光線追跡ノードにおいて損失圧縮を実行し、4502で、無損失圧縮回路が第2光線追跡ノードにおいて無損失圧縮を実行する。4503で、圧縮された光線追跡データが、第2光線追跡ノードへ送信される。4504で、損失/無損失伸張回路が、光線追跡データの損失/無損失伸張を実行する。4505で、第2光線追跡ノードが、伸張されたデータを用いて光線追跡動作を実行する。

<ハードウェア加速化ハイブリッド光線追跡を有するグラフィックプロセッサ>
本発明の一実施形態は、グラフィックコア3730上でラスタライズを実行し、及び光線追跡コア3750、グラフィックコア3730、及び/又はCPU3799コア上で光線追跡動作を実行するハイブリッドレンダリングパイプラインを含む。例えば、ラスタライズ及び深さテストは、1次光線キャスティング段階の代わりに、グラフィックコア3730乗で実行されてよい。光線追跡コア3750は、次に、光線反射、屈折、及びシャドウについて、2次光線を生成してよい。さらに、特定の実施形態は、(例えば、高反射レベルのような材料特性閾に基づき)光線追跡コア3750が光線追跡動作を実行するシーンの特定の領域を選択してよい。一方で、シーンの他の領域は、グラフィックコア3730上でのラスタライズによりレンダリングされる。一実施形態では、このハイブリッド実装は、遅延が重要な課題であるリアルタイム光線追跡アプリケーションのために使用される。
後述する光線トラバースアーキテクチャの一実施形態は、プログラマブルシェーディング及び光線追跡の制御を既存のSIMD(single instruction multiple data)及び/又はSIMT(single instruction multiple thread)グラフィックプロセッサを用いて実行すると同時に、BVHトラバース及び/又は交差のような重要な機能を、専用ハードウェアを用いて加速化する。本実施形態では、非コヒーレントパスSIMD占有期間は、トラバース中に及びシェーディングの前に特定の時点で生成されたシェーダを再グループ化することにより、向上される。これは、オンチップで動的にシェーダをソートする専用ハードウェアを用いて達成される。反復は、改良されたSIMD占有期間の実行前に連続のものを返し及び再グループ化すると実行する連続のものに機能を分割することにより管理される。
光線トラバース/交差のプログラマブル制御は、トラバース機能を、固定機能ハードウェアとして実装可能な内部トラバース、及びGPUプロセッサ上で実行する外部トラバースに分解することにより達成され、ユーザの定義したトラバースシェーダを通じてプログラマブル制御を可能にする。ハードウェアとソフトウェアとの間でトラバースコンテキストを転送するコストは、内部及び外部トラバースの間の遷移中の内部トラバース状態を伝統的に切り縮めることにより削減される。
光線追跡のプログラマブル制御は、以下の表Aに列挙した異なるシェーダ種類を通じて表現できる。各種類に複数のシェーダがある。例えば、各材料は、異なるヒットシェーダを有し得る。
表A
Figure 2021057011
一実施形態では、再帰的光線追跡は、1次シェーダのセット又は1次光線の光線シーン交差を生成できる交差回路を開始するようグラフィックプロセッサに命令するAPI関数により開始される。これは、一方で、トラバース、ヒットシェーダ、又はミスシェーダのような他のシェーダを生成する。子シェーダを生成するシェーダは、該子シェーダから戻り値を受信できる。呼び出し可能(Callable)シェーダは、別のシェーダにより直接生成可能であり呼び出し側シェーダに値を返すこともできる汎用機能である。
図46は、シェーダ実行回路4600及び固定機能回路4610を含むグラフィック処理アーキテクチャの一実施形態を示す。汎用実行ハードウェアサブシステムは、複数のSIMD(single instruction multiple data)及び/又はSIMT(single instructions multiple threads)コア/実行ユニット(EU)4601(つまり、各コアは複数の実行ユニットを含んでよい)、1つ以上のサンプラ4602、レベル1(L1)キャッシュ4603、又は他の形式のローカルメモリを含む。固定機能ハードウェアサブシステム4610は、メッセージユニット4604、スケジューラ4607、光線BVHトラバース/交差回路4605、ソート回路4608、及びローカルL1キャッシュ4606を含む。
動作中、1次ディスパッチャ4609は、1次光線のセットをスケジューラ4607にディスパッチし、スケジューラ4607は、SIMD/SIMTコア/EU4601上で実行されるシェーダに作業をスケジューリングする。SIMDコア/EU4601は、上述の光線追跡コア3750及び/又はグラフィックコア3730であってよい。1次シェーダの実行は、(例えば、1つ以上の子シェーダ及び/又は固定機能ハードウェアにより実行されるべき)実行されるべき追加作業を生成する。メッセージユニット4604は、SIMDコア/EU4601により生成された作業を、必要に応じてフリースタックプールにアクセスするスケジューラ4607、ソート回路4608、又は光線BVH交差回路4605に分配する。追加作業は、スケジューラ4607に送信された場合、SIMD/SIMTコア/EU4601上で実行するためにスケジューリングされる。スケジューリングの前に、ソート回路4608は、本願明細書に記載のように光線をグループ又はビンにソートしてよい(例えば、同様の特性を有する光線をグループ化する)。光線BVH交差回路4605は、BVHボリュームを用いて光線の交差テストを実行する。例えば、光線BVH交差回路4605は、光線座標をBVHの各レベルと比較して、光線により交差されるボリュームを識別してよい。
シェーダは、シェーダレコード、エントリ関数へのポインタを含むユーザの割り当てた構造、ベンダ固有メタデータ、及びSIMDコア/EU4601により実行されるシェータへの大域引数を用いて参照できる。シェーダの各実行インスタンスは、親シェーダと子シェーダとの間で渡される引数を格納するために使用されてよいコールスタックに関連付けられる。コールスタックは、呼び出しが戻ると実行される継続関数(continuation function)への参照も格納する。
図47は、1次シェーダスタック、ヒットシェーダスタック、トラバースシェーダスタック、継続関数スタック、及び光線BVH交差スタック(これは、上述のように、固定機能ハードウェア4610により実行されてよい)を含む割り当てられたスタック4701の例示的なセットを示す。新しいシェーダ発動は、フリースタックプール4702から新しいシェーダを実装してよい。コールスタックは、アクセス遅延を削減するために、ローカルL1キャッシュ4603、4606内にキャッシュされてよい。
一実施形態では、有限数のコールスタックが存在し、それぞれ、メモリの連続領域に割り当てられた固定最大サイズ「Sstack」を有する。したがって、スタックの基本アドレスは、基本アドレス=SID*Sstackのように、スタックインデックス(SID)から直接計算できる。一実施形態では、スタックIDは、SIMDコア/EU4601に作業をスケジューリングするとき、スケジューラ4607により割り当てられ、及び割り当て解除される。
一実施形態では、1次ディスパッチャ4609は、ホスト(例えばCPU)からのディスパッチコマンドに応答して1次シェーダをディスパッチするグラフィックプロセッサコマンドプロセッサを含む。シェーダ4607は、これらのディスパッチ要求を受信し、各SIMDレーンにスタックIDを割り当て可能な場合、1次シェーダをSIMDプロセッサスレッド上で開始する。スタックIDは、ディスパッチコマンドの始めに初期化されるフリースタックプール4702から割り当てられる。
実行シェーダは、メッセージユニット4604へ生成メッセージを送信することにより、子シェーダを生成できる。このコマンドは、シェーダに関連付けられたスタックIDを含み、各アクティブSIMDレーンの子シェーダレコードへのポインタも含む。親シェーダは、アクティブレーンに1つ、このメッセージを発行できるだけである。一実施形態では、全ての関連するレーンについて生成メッセージを送信した後に、親シェーダは終了する。
SIMDコア/EU4601上で実行するシェーダは、光線BVH交差のような固定機能タスクも、固定機能ハードウェアのために予約されたシェーダレコードポインタを有する生成メッセージを用いて生成できる。上述のように、メッセージユニット4604は、生成した光線BVH交差作業を固定機能光線BVH交差回路4005へ、及び呼び出し可能シェーダを直接にソート回路4608へ送信する。一実施形態では、ソート回路は、シェーダレコードポインタによりシェーダをグループ化して、同様の特性を有すrSIMDバッチを導出する。したがって、異なる親シェーダからのスタックIDは、ソート回路4608により同じバッチの中にグループ化され得る。ソート回路4608は、グループ化したバッチをスケジューラ4607へ送信し、スケジューラ4607は、グラフィックメモリ2511又は最終レベルキャッシュ(LLC)4620からのシェーダレコードにアクセスし、シェーダをプロセッサスレッド上に送り出す。
一実施形態では、継続(continuations)は、呼び出し可能シェーダとして扱われ、これもシェーダレコードを通じて参照されてよい。子シェーダが生成され、親シェーダに値を返すと、継続シェーダレコードへのポインタは、図47に示すようにコールスタックにプッシュされる。子シェーダが戻ると、継続シェーダレコードは、コールスタック4701からポップされ、継続シェーダが生成される。生成された継続は、呼び出し可能シェーダと同様にソートユニットを通過し、プロセッサスレッド上に送り出される。
図48に示すように、ソート回路4608の一実施形態は、シェーダレコードポインタ4801A、4801B、4801nにより生成されたタスクをグループ化して、シェーディングのためのSIMDバッチを生成する。ソートされたバッチの中のスタックID又はコンテキストIDは、異なるディスパッチ及び異なる入力SIMDレーンからグループ化され得る。一実施形態では、グループ化回路4810は、各エントリがタグ4801で識別される複数のエントリを有するコンテンツアドレス可能メモリ(content addressable memory:CAM)構造4801を用いてソートを実行する。上述のように、一実施形態では、タグ4801は、対応するシェーダレコードポインタ4801A、4801B、4801nである。一実施形態では、CAM構造4801は、それぞれシェーダレコードポインタに対応する不完全SIMDバッチに関連付けられた限られた数のタグ(例えば、32、64、128個等)を格納する。
入来する生成コマンドについて、各SIMDレーンは、対応するスタックID(各CAMエントリ内の16個のコンテキストID0〜15として示される)、及びシェーダレコードポインタ4801A、B、...、n(タグ値として機能する)を有する。一実施形態では、グループ化回路4810は、各レーンのシェーダレコードポインタを、CAM構造4801内のタグ4801と比較して、一致するバッチを見付ける。一致するバッチが見付かった場合、スタックID/コンテキストIDは、バッチに追加される。その他の場合、新しいシェーダレコードポインタタグを有する新しいエントリが生成され、場合によっては、不完全バッチを有する古いエントリを立ち退かせる。
実行シェーダは、メッセージユニットへ割り当て解除メッセージを送信することにより空になると、コールスタックを割り当て解除できる。割り当て解除メッセージは、スケジューラへ中継され、スケジューラは、フリープールにアクティブSIMDレーンのスタックID/コンテキストIDを返す。
本発明の一実施形態は、固定機能光線トラバース及びソフトウェア光線トラバースの組み合わせを用いて、光線トラバース動作のためのハイブリッドアプローチを実装する。したがって、これは、固定機能トラバースの効率性を維持しながら、ソフトウェアトラバースの柔軟性を提供する。図49は、ハイブリッドトラバースのために使用され得る加速化構造を示す。これは、2レベルの木であり、単一の最上位レベルBVH4900、及び幾つかの最下位レベルBVH4901及び4902を有する。右側には、内部トラバースパス4903、外部トラバースパス4904、トラバースノード4905、カスタムプリミティブを有するリーフノード4907を示すために、グラフィック要素が示される。
最上位レベルBVH4900にある三角形を有するリーフノード4906は、カスタムプリミティブのための三角形、交差シェーダレコード又はトラバースシェーダレコードを参照できる。最下位レベルBVH4901〜4902の三角形を有するリーフノード4906は、カスタムプリミティブのために三角形及び交差シェーダレコードのみを参照できる。参照の種類は、リーフノード4306内で符号化される。内部トラバース4303は、各BVH490〜4902内のトラバースを参照する。内部トラバース動作は、光線BVH交差の計算を含み、BVH構造4900〜4902に渡るトラバースは外部トラバースとして知られている。内部トラバース動作は、固定機能ハードウェアで効率的に実装できる、一方、外部トラバース動作は、プログラマブルシェーダによる許容可能な性能により実行できる。したがって、本発明の一実施形態は、固定機能回路4610を用いて内部トラバース動作を実行し、プログラマブルシェーダを実行するSIMD/SIMTコア/EU4601を含むシェーダ実行回路4600を用いて外部トラバース動作を実行する。
SIMD/SIMTコア/EU4601は、簡単のために本願明細書では単に「コア」、「SIMDコア」、「EU」、又は「SIMDプロセッサ」と呼ばれることがあることに留意する。同様に、光線トラバース/交差回路4605は、単に「トラバースユニット」、「トラバース/交差ユニット」、又は「トラバース/交差回路」と呼ばれることがある。代替の用語が使用されるおき、それぞれの回路/ロジックを指定するために使用される特定の名称は、本願明細書に記載のような回路/ロジックの実行する基本機能を変更しない。
さらに、図46には単一のコンポーネントとして示されるが、トラバース/交差ユニット4605は、個別のトラバースユニット及び別個の交差ユニットを含んでよく、これらの各々は、本願明細書に記載のように回路及び/又はロジック内に実装されてよい。
一実施形態では、光線が内部トラバースの間にトラバースノードと交差するとき、トラバースシェーダが生成される。図48に示すように、ソート回路4608は、シェーダレコードポインタ4801A、B、nによりこれらのシェーダをグループ化して、SIMDバッチを生成する。SIMDバッチは、シェーダ4607により、SIMD実行のために、グラフィックSIMDコア/EU4001上に送り出される。トラバースシェーダは、幾つかの方法で変更でき、多様なアプリケーションを可能にする。例えば、トラバースシェーダは、BVHを粗い詳細レベル(level of detail:LOD)で選択し、又は光線を変換して厳密な本体変換(rigid body transformation)を可能にする。トラバースシェーダは、次に、選択したBVHのために内部トラバースを生成する。
内部トラバースは、BVHをトラバースし光線ボックス及び光線三角形交差を計算することにより、光線BVH交差を計算する。内部トラバースは、メッセージをメッセージ回路4604へ送信し、メッセージ回路4604が対応する生成メッセージを光線BVH交差回路4605へと中継し、光線BVH交差回路4605が光線BVH交差を計算することにより、シェーダと同じ方法で生成される。
一実施形態では、内部トラバースのスタックは、固定機能回路4610に(例えば、L1キャッシュ4606に)ローカルに格納される。光線がトラバースシェーダ又は交差シェーダに対応するリーフノードと交差すると、内部トラバースは終了し、内部スタックが切り詰められる。切り詰められたスタックは、光線及びBVHへのポインタと一緒に、呼び出し側シェーダにより指定された位置で、メモリに書き込まれ、次に対応するトラバースシェーダ又は交差シェーダが生成される。光線が内部トラバースの間に任意の三角形と交差する場合、対応するヒット情報は、以下のコードに示されるように、入力引数としてこれらのシェーダに提供される。これらの生成されたシェーダは、ソート回路4608によりグループ化され、実行のためのSIMDバッチを生成する。
Figure 2021057011
内部トラバーススタックを切り詰める(truncate)ことは、それをメモリへと分割するコストを低減する。本発明の一実施形態は、Restart Trail for Stackless BVH Traversal, High Performance Graphics (2010), pp. 107−111に記載のアプローチを使用して、スタックをスタックの一番上にある少数のエントリ、42ビットの再起動トレイル(restart trail)及び6ビットの深さ値に切り詰める。再起動トレイルは、既にBVHの内部に取り込まれたブランチを示し、深さ値は、最後のスタックエントリに対応するトラバースの深さを示す。これは、後に内部トラバースを再開するために十分な情報である。
内部トラバースは、内部スタックが空であり、テストすべきBVHノードが存在しない場合に、完了する。この場合、外部スタックの一番上をポップし外部スタックが空でない場合にトラバースを再開する外部スタックハンドラが生成される。
一実施形態では、外部トラバースは、主トラバース状態機械を実行し、シェーダ実行回路4600により実行されるプログラムコード内に実装される。外部トラバースは、以下の条件下で内部トラバースクエリを生成する。(1)ヒットシェーダ又は1次シェーダにより新しい光線が生成されるとき、(2)トラバースシェーダがトラバースのためにBVHを選択するとき、(3)外部スタックハンドラがBVHの内部トラバースを再開するとき。
図50は、内部トラバースが生成される前に、切り詰められた内部スタック5010を格納するために、固定機能回路4610のコールスタック5005に空間が割り当てられることを示す。コールスタック及び内部スタックの一番上までのオフセット5003〜5004は、トラバース状態5000内に維持され、トラバース状態5000もメモリに格納される。トラバース状態5000は、世界封緘5001及びオブジェクト空間5002内の光線、並びに最も近い交差プリミティブのヒット情報も含む。
トラバースシェーダ、交差シェーダ、及び外部スタックハンドラは、全て、光線BVH交差回路4605により生成される。トラバースシェーダは、第2レベルBVHの新しい内部トラバースを開始する前に、コールスタック5005上に割り当てる。外部スタックハンドラは、ヒット情報を更新すること及び任意の保留内部トラバースタスクを再開することを担うシェーダである。外部スタックハンドラは、トラバースが完了するとき、ヒット又はミスシェーダを生成することも担う。トラバースは、生成すべき保留中の内部トラバースクエリが存在しないとき、完了する。トラバースが完了し、交差が見付からないとき、ヒットシェーダが生成され、その他の場合、ミスシェーダが生成される。
上述のハイブリッドトラバース方式は、2レベルBVH階層構造を使用するが、本願明細書に記載の本発明の実施形態は、外部トラバース実装の対応する変更により、任意の数のBVHレベルを使用してよい。
さらに、固定機能回路4610は上述の実施形態では光線BVH交差を実行するために説明されたが、他のシステムコンポーネントも固定機能回路内に実装されてよい。例えば、上述の外部スタックハンドラは、場合によっては固定機能BVHトラバース/交差回路4605内に実装され得る内部(ユーザに見えない)シェーダであってよい。この実装は、ディスパッチされるシェーダ段階の数、及び固定機能交差ハードウェア4605とプロセッサとの間のラウンドトリップを削減するために使用されてよい。
本願明細書に記載の本発明の実施形態は、既存の及び将来のGPUプロセッサ上で大きなSIMD効率により実行可能なユーザの定義した機能を用いてプログラマブルシェーディング及び光線トラバース制御を可能にする。光線トラバーのプログラマブル制御は、手順のインスタンス化、確率的な詳細レベル選択、カスタムプリミティブ交差及びレイジー(lazy)BVH更新のような幾つかの重要な機能を可能にする。
本発明の一実施形態は、ヒット及び交差シェーダの推論的な実行をサポートするプログラマブルMIMD(multiple instruction multiple data)光線追跡アーキテクチャを有する。特に、スケジューリング、及び図46に関して上述したプログラマブルSIMD/SIMTコア/実行ユニット4001と、ハイブリッド光線追跡アーキテクチャにおける固定機能MIMDトラバース/交差ユニット4605との間の通信オーバヘッドを削減することに焦点を当てる。トラバースハードウェアから単一バッチでディスパッチでき、複数のトラバース及びシェーディングラウンドトリップを回避するヒット及び交差シェーダの複数の推論的な実行方式が以下に説明される。一実施形態は、これらの技術を実装するための専用回路を含む。
本発明の実施形態は、専用ハードウェアサポート無しに実装されるとき、複数のヒット又は交差シェーダの実行が有意なオーバヘッドを課す光線トラバースクエリから要望された場合に、特に有利である。これらは、限定ではないが、最近接kヒットクエリ(k個の最近接交差のためにヒットシェーダを送り出す)及び複数のプログラマブル交差シェーダを含む。
ここに記載の技術は、図46に示された(及び図46〜50に関して記載された)アーキテクチャに対する拡張として実装される。特に、本発明の本実施形態は、上述の使用例の性能を向上するために改良を伴い本アーキテクチャ上に構築される。
ハイブリッド光線トラバースアーキテクチャの性能限界は、実行ユニットからトラバースクエリを送り出すオーバヘッド、及び光線追跡ハードウェアからのプログラマブルシェーダを呼び出すオーバヘッドである。複数のヒット又は交差シェーダが同じ光線のトラバース中に呼び出されるとき、このオーバヘッドは、プログラマブルコア4601とトラバース/交差ユニット4605との間の「実行ラウンドトリップ」を生成する。これは、個々のシェーダ呼び出しからSIMD/SIMTコヒーレンスを抽出する必要のあるソートユニット4608に追加圧力を掛ける。
光線追跡の幾つかの態様は、上述の表Aの中に列挙された異なるシェーダ種類(つまり、Primary, Hit, Any Hit, Miss, Intersection, Traversal, Callable)を通じて表現できるプログラマブル制御を要求する。各種類に複数のシェーダがある。例えば、各材料は、異なるヒットシェーダを有し得る。これらのシェーダ種類のうちの幾つかは、現在のMicrosoft(登録商標)光線追跡APIで定義される。
まとめると、再帰的光線追跡は、1次光線について(ハードウェア及び/又はソフトウェアで実装される)光線−シーン交差を生成できる1次(primary)シェーダを送り出すようGPUに命令するAPI機能により開始される、これは、一方で、トラバース、ヒットシェーダ、又はミスシェーダのような他のシェーダを生成できる。子シェーダを生成するシェーダは、該シェーダから戻り値を受信することもできる。呼び出し可能(Callable)シェーダは、別のシェーダにより直接生成可能であり呼び出し側シェーダに値を返すこともできる汎用機能である。
光線トラバースは、境界ボリューム階層構造(BVH)内のノードをトラバースし及び交差することにより光線−シーン交差を計算する。近年の研究は、精度の低い演算、BVH圧縮、光線毎の状態機械、専用交差パイプライン及びカスタムキャッシュのような固定機能ハードウェアにより適した技術を用いて、光線−シーン交差を計算する効率が桁違いに向上できることを示している。
図46に示すアーキテクチャは、SIMD/SIMTコア/実行ユニット4601のアレイが固定機能光線追跡/交差ユニット4605と相互作用してプログラマブル光線追跡を実行する、このようなシステムを含む。プログラマブルシェーダは、実行ユニット/コア4601上のSIMD/SIMTスレッドにマッピングされ、ここでは、最適性能のためにSIMD/SIMT利用率、実行、及びデータコヒーレンスが重要である。光線クエリは、以下のような種々の理由でコヒーレンスを崩壊させることがある。
・トラバースの相違:BVHトラバースの期間が、非同期光線処理を支持する光線の間で大きく変化する。
・実行の相違:同じSIMD/SIMTスレッドの異なるレーンから生成された光線は、異なるシェーダ呼び出しを生じ得る。
・データアクセスの相違:例えば、異なる面をヒットする光線は異なるBVHノードをサンプリングし、プリミティブ及びシェーダが異なるテクスチャにアクセスする。様々な他のシナリオがデータアクセスの装置を引き起こし得る。
一実施形態では、固定機能光線追跡/交差ユニット4005は、各光線を個別に順番通りでなく処理することにより、最初の2つの問題を克服する。これは、しかしながら、SIMD/SIMTグループを崩壊させる。ソートユニット4608は、ここで、実行ユニットに再度ディスパッチされるべきシェーダ呼び出しの新しいコヒーレントなSIMD/SIMTグループを形成することを担う。
SIMD/SIMTプロセッサ上での純粋にソフトウェアに基づく光線追跡実装に比べて、このようなアーキテクチャが有利であることが容易に分かる。しかしながら、SIMD/SIMTコア/実行ユニット4601(本願明細書では単にSIMD/SIMTプロセッサ又はコア/EUと呼ばれることがある)及びMIMDトラバース/交差ユニット4605の間のメッセージングに関連付けられたオーバヘッドがある。さらに、ソートユニット4608は、非コヒーレントシェーダ呼び出しから、完全なSIMD/SIMT利用を抽出しなくてよい。
本発明の一実施形態は、シェーダ呼び出しがトラバース中に特に頻繁になり得る使用例を識別する。コア/EU4601とトラバース/交差ユニット4605との間の通信のオーバヘッドを有意に削減するために、ハイブリッドMIMD光線追跡プロセッサのための拡張が記載される。本実施形態は、k最近接交差を発見するとき及びプログラマブル交差シェーダの実装で、特に有利であり得る。しかしながら、本願明細書に記載の技術は任意の特定の処理シナリオに限定されないことに留意する。
コア/EU4601と固定機能トラバース/交差ユニット4605との間の光線追跡コンテキスト切り替えの高レベルコストの概要が以下に提供される。性能オーバヘッドの大部分は、単一の光線トラバースの間にシェーダ呼び出しが必要になる度に、これら2つのコンテキスト切り替えにより引き起こされる。
光線を送り出す各SIMD/SIMTレーンは、トラバースすべきBVHに関連付けられたトラバース/交差ユニット4005への生成メッセージを生成する。データ(光線トラバースコンテキスト)は、生成メッセージ及び(キャッシュされた)メモリを介してトラバース/交差ユニット4605へと中継される。トラバース/交差ユニット4605は、生成メッセージに対して新しいハードウェアスレッドを割り当てる準備ができると、トラバース状態をロードし、BVHに対してトラバースを実行する。第1トラバースステップがBVHに対して実行される前に、実行される必要のある設定コストもある。
図51は、本発明の一実施形態による、プログラマブル光線追跡パイプラインの動作フローを示す。図示の実施形態では、トラバース5102及び交差5103のような影付きの要素は、固定機能回路内に実装され、残りの要素はプログラマブルコア/実行ユニットにより実装される。
1次光線シェーダ5101は、トラバース回路へ作業を送信し(5102)、トラバース回路は、BVH(又は他の加速化構造)を通じて現在の光線をトラバースする。リーフノードに達すると、トラバース回路は、交差回路を呼び出し(5103)、交差回路は、光線三角形交差を識別すると、任意のシェーダを呼び出す(5104)(任意のシェーダは、示されるようにトラバース回路に結果を返してよい)。
代替として、トラバースは、リーフノードに達する前に終了してよく、(ヒットが記録された場合)最近接ヒットシェーダ(5107)又は(ミスの場合に)ミスシェーダ(5106)が呼び出される。
5105に示すように、交差シェーダは、トラバース回路がカスタムプリミティブリーフノードに達した場合に、呼び出されてよい。カスタムプリミティブは、多角形又は多面体のような任意の非三角形プリミティブであってよい(例えば、四面体、ボクセル、六面体、くさび形、ピラミッド形、又は他の「非構造化ボリューム」)。交差シェーダ5105は、光線とカスタムプリミティブとの間の任意の交差を識別し、任意のヒット処理を実装する任意のヒットシェーダ5104へ送る。
一実施形態では、ハードウェアトラバース5102がプログラマブル段階に達すると、トラバース/交差ユニット5105は、関連するシェーダは5105〜5107へのシェーダディスパッチメッセージを生成し、関連するシェーダは5105〜5107はシェーダを実行するために使用される実行ユニットの単一のSIMDレーンに対応する。ディスパッチは任意の光線順で生じ、それらは呼び出されたプログラムが相違するので、ソートユニット4608n一実施形態は、コヒーレントSIMDバッチを抽出するために、複数のディスパッチを蓄積する。更新されたトラバース状態及び任意的なシェーダ引数は、トラバース/交差ユニット4605によりメモリ2511に書き込まれてよい。
k最近接交差問題では、最近接ヒットシェーダ5107は、最初のk個の交差について実行される。従来の方法では、これは、最近接交差を見付け、ヒットシェーダを呼び出し、及び新しい光線をヒットシェーダから生成して、(光線起点オフセットを有するので、同じ交差は再び生じない)新しい最近接交差を発見すると、光線トラバースを終了することを意味する。本実装は、単一の光線についてk個の光線生成を要求することが容易に分かる。別の実装は、挿入(insertion)ソート動作を用いて、全ての交差について呼び出され且つ最近接交差のグローバルリストを維持する任意のヒットシェーダ5104と共に動作する。このアプローチに伴う主な問題は、任意のヒットシェーダ呼び出しの上限境界が存在しないことである。
上述のように、交差シェーダ5105は、非三角形(カスタム)プリミティブ上で呼び出されてよい。交差テスト及びトラバース状態の結果に依存して(保留チュノード及びプリミティブ交差)、同じ光線のトラバースは、交差シェーダ5105の実行後に継続してよい。したがって、最近接交差の発見は、実行ユニットへの幾つかのラウンドトリップを要求してよい。
本発明の一実施形態は、トラバースハードウェア及びシェーダスケジューリングモデルへの変更を通じて、交差シェーダ5105及びヒットシェーダ5104、5107のSIMD−MIMDコンテキスト切り替えの削減に焦点を当てる。先ず、光線トラバース回路4605は、複数の可能性のある呼び出しを累積し、それらをより大きなバッチにディスパッチすることにより、シェーダ呼び出しを遅延する。さらに、不要と分かった特定の呼び出しは、この段階でカリングされてよい。さらに、シェーダスケジューラ4607の一実施形態は、同じトラバースコンテキストからの複数のシェーダ呼び出しを、単一のSIMDバッチへと集約する。これは、単一の光線生成メッセージをもたらす。一実施形態では、トラバースハードウェア4605は、トラバーススレッドを一時停止し、複数のシェーダ呼び出しの結果を待つ。この動作モードは、複数のシェーダの呼び出しを可能にし、その幾つかは順次的呼び出しを用いるときに呼び出されなくてよいので、ここでは「推論的(speculative)」シェーダ実行と呼ばれる。
図52Aは、トラバース動作がサブ木の中で複数のカスタムプリミティブ5250に遭遇する一例を示す。図52Bは、これが3つの交差ディスパッチサイクルC1〜C3によりどのように解決できるかを示す。特に、本実施形態のスケジューラ4607は、作業をSIMDプロセッサ4601に提出するために3つのサイクルを必要とし、トラバース回路4605は、ソートユニット4608に結果を提供するために3つのサイクルを必要とする。トラバース回路4605により要求されるトラバース状態5201は、ローカルキャッシュ(例えば、L1キャッシュ及び/又はL2キャッシュ)のようなメモリに格納される。
A.遅延された光線追跡シェーダ呼び出し
本発明の一実施形態は、ハードウェアトラバース状態5201が複数の可能な交差またはヒット呼び出しのリスト内での累積を可能にするよう管理されるように変更する。トラバース中の所与の時間に、リスト内の各エントリは、シェーダ呼び出しを生成するために使用されてよい。例えば、k最近接交差点は、トラバースハードウェア4605上で及び/又はメモリ内のトラバース状態5201内に累積され、トラバースが完了した場合、ヒットシェーダは各要素について呼び出し可能である。ヒットシェーダでは、複数の可能な交差は、BVH内のサブ木について累積されてよい。
最近接k使用例では、このアプローチの利点は、SIMDコア/EU4601へのk−1個のラウンドトリップ、及びk−1個の新しい光線生成メッセージの代わり、全てのヒットシェーダが同じトラバーススレッドから単一のトラバース動作中にトラバース回路4605上で呼び出される。可能な実装の課題は、ヒットシェーダの実行順を保証することが容易ではないことである(標準的な「ラウンドトリップ」アプローチは、最近接交差のヒットシェーダが最初に実行されること等を保証する)。一実施形態では、これは、ヒットシェーダの同期又は順序の緩和により解決される。
交差シェーダの使用例では、トラバース回路4605は、予め、所与のシェーダが肯定的交差テストを返すか否かが分からない。しかしながら、複数の交差シェーダを推定的に実行することが可能であり、少なくとも1つが肯定的ヒット結果を返した場合、それはグローバル最近接リストに融合される。特定の実装は、ディスパッチ呼び出しの数を低減するが冗長な交差シェーダの多すぎる呼び出しを回避するために、最適な数の遅延交差テストを発見する必要がある。
B.トラバース回路からのシェーダ呼び出しの集約
トラバース回路上で生成された同じ光線空の複数のシェーダをディスパッチするとき、一実施形態は、光線トラバースアルゴリズムのフローの中でブランチを生成する。これは、残りのBVHトラバースが全てのディスパッチされた交差テストに依存するので、交差シェーダでは問題があり得る。これは、シェーダ呼び出しの結果を待機するために、同期動作が必要であることを意味し、これは、非同期ハードウェアにおいて課題であり得る。
本発明の一実施形態は、シェーダ呼び出しの結果を融合する2つの点、つまりSIMDプロセッサ4601及びトラバース回路4605に依存する。SIMDプロセッサ4601に関しては、複数のシェーダは、同期でき、それらの結果を標準的なプログラミングモデルを用いて集約できる。これを行うための1つの比較的単純な方法は、グローバルアトミック(global atomic)を使用し、複数のシェーダの交差結果が格納され得るメモリ内の共有データ構造に結果を集約することである。次に、最後のシェーダは、データ構造を解明し、トラバースを継続するためにトラバース回路4605にコールバックする。
本発明の一実施形態は、複数のシェーダ呼び出しの実行をSIMDプロセッサ4601上の同じSIMDレーンに限定する、より効率的なアプローチを実装する。交差テストは、次に、(グローバルアトミックに頼るのではなく)SIMD/SIMT削減動作を用いてローカルで削減される。本実施形態は、ソートユニット4608内の新しい回路に依存して、シェーダ呼び出しの小さなバッチを同じSIMDブランチ内に留まらせてよい。
本発明の一実施形態は、トラバース回路4605上のトラバーススレッドの実行を一時停止する。従来の実行モデルを用いると、シェーダがトラバースチュにディスパッチされると、トラバーススレッドは終了され、光線トラバース状態はメモリに保存されて、他の光線生成コマンドの実行を可能にし、同時に実行ユニット4601がシェーダを処理する。トラバーススレッドが単に一時呈された場合、トラバース状態は、格納される必要がなく、各シェーダ結果を個別に待機できる。本実施形態は、デッドロックを回避するための回路を含み、十分なハードウェア利用率を提供してよい。
図53〜54は、3個のシェーダを有するSIMDコア/実行ユニット4601上で単一のシェーダ呼び出しを呼び出す遅延(deferred)モデルの実施形態を示す。保存されるとき、全ての交差テストは、同じSIMD/SIMTグループ内で評価される。したがって、最近接交差も、プログラマブルコア/実行ユニット4601上で計算できる。
上述のように、シェーダ集約及び/又は遅延(deferral)の全部又は一部はトラバース/交差回路4605及び/又はコア/EUスケジューラ4607により実行されてよい。図53は、スケジューラ4007内のシェーダ遅延/集約回路5306が特定のSIMD/SIMTスレッド/レーンに関連付けられたシェーダのスケジューリングを、指定されたトリガイベントが生じるまで、遅延させる一実施形態を示す。トリガイベントを検出すると、スケジューラ4007は、SIMD/SIMTバッチの中で複数の集約されたシェーダをコア/EU4001へディスパッチする。
図54は、トラバース/交差回路4005内のシェーダ遅延/集約回路5405が特定のSIMDスレッド/レーンに関連付けられたシェーダのスケジューリングを、指定されたトリガイベントが生じるまで、遅延させる一実施形態を示す。トリガイベントを検出すると、トラバース/交差回路4005は、集約されたシェーダをソートユニット4008へ、単一のSIMD/SIMTバッチの中で提出する。
しかしながら、シェーダ遅延及び集約技術は、ソートユニット4008のような種々の他のコンポーネントの中で実装されてよく、又は複数のコンポーネントに渡り分散されてよいことに留意する。例えば、トラバース/交差回路405はシェーダ集約動作の第1セットを実行してよく、スケジューラ4007はシェーダ集約動作の第2セットを実行してよく、SIMDスレッドのシェーダがコア/EU4001上で効率的にスケジューリングされることを保証する。
集約されたシェーダをコア/EUへディスパッチさせる「トリガイベント」は、特定数の累積シェーダ又は特定のシェーダに関連付けられた最小遅延のような処理イベントであってよい。代替として又は追加で、トリガイベントは、最初のシェーダの遅延からの特定期間又は特定数のプロセッササイクルのような時間的イベントであってよい。コア/EU4001及びトラバース/交差ユニット4005上の現在作業負荷のような他の変数も、シェーダのSIMD/SIMTバッチをディスパッチするときを決定するために、スケジューラ4007により評価されてよい。
本発明の異なる実施形態は、使用されている特定のシステムアーキテクチャ及びアプリケーションの要件に基づき、上述のアプローチの異なる組み合わせを用いて実装されてよい。

<Ray Tracing命令>
以下に説明する光線追跡命令は、CPU3799及び/又はGPU3705の一実施形態によりサポートされる命令セットアーキテクチャ(ISA)に含まれる。CPUにより実行される場合、SIMD(single instruction multiple data)命令は、ベクトル/パックされた(packed)送信元及び宛先レジスタを利用して、記載の動作を実行してよく、CPUコアにより復号され実行されてよい。GPU3705により実行される場合、命令は、グラフィックコア3730により実行されてよい。例えば、上述実行ユニット(EU)4601のうちのいずれかは、命令を実行してよい。代替として又は追加で、命令は、光線追跡コア3150及び/又はテンソルコア3740上の実行回路により実行されてよい。
図55は、後述する光線追跡命令を実行するためのアーキテクチャの一実施形態を示す。図示のアーキテクチャは、異なるプロセッサアーキテクチャに含まれてよい上述のコア3730、3740、3750(図37及び関連する記載を参照する)のうちの1つ以上の中に統合されてよい。
動作中、命令フェッチユニット5503は、メモリから光線追跡命令をフェッチし、デコーダ5595は命令を復号する。一実施形態では、デコーダ5595は、命令を復号して、実行可能動作(例えば、マイクロオペレーション、又はマイクロコードコア内のuops)を生成する。代替として、光線追跡命令5500のうちの一部又は全部は、復号することなく実行されてよい。例えばデコーダ5504が必要ない。
いずれの実装でも、スケジューラ/ディスパッチャ5505は、機能ユニット(functional unit:FU)5510〜5512のセットに渡り命令(又は動作)をスケジューリングしディスパッチする。図示の実施形態は、ベクトルレジスタ5515に格納された複数のパックされたデータ要素に対して同時に動作するSIMD命令を実行するベクトルFU5510、及び1つ以上のスカラレジスタ5516に格納されたスカラ値に対して動作するスカラFU5511を含む。任意的な光線追跡FU5512は、ベクトルレジスタ5515に格納されたパックされたデータ値及び/又はスカラレジスタ5516に格納されたスカラ値に対して動作してよい。一実施形態では、専用FU5512を有しないで、ベクトルFU5510及び場合によってはスカラFU5511は、後述する光線追跡命令を実行する。
種々のFU55105510〜5512は、ベクトルレジスタ5515、スカラレジスタ5516及び/又はローカルキャッシュサブシステム5508(例えば、L1キャッシュ)からの光線追跡命令550を実行するために必要な光線追跡データ5502(例えば、トラバース/交差データ)にアクセスする。一実施形態では、FU5510〜5512は、ロード及び格納動作により、メモリ3198へのアクセスも実行してよく、キャッシュサブシステム5508は、ローカルにデータをキャッシュするために独立に動作してよい。
光線追跡命令が光線トラバース/交差及びBVH構築の性能を向上するために使用される一方で、それらは、高性能計算(high performance computing:HPC)及び汎用GPU(general purpose GPU:GPGPU)実装のような他の領域にも適用可能であってよい。
以下の説明では、用語「ダブルワード」は、dwと略されることがあり、符号無しバイトはubと略される。さらに、以下で言及される送信元及び宛先レジスタ(例えば、src0、src1、dest、等は、ベクトルレジスタ5515又は幾つかの場合にはベクトルレジスタ5515とスカラレジスタ5516との組み合わせを表してよい。標準的に、命令により使用される送信元又は宛先値がパックされたデータ要素を含む場合(例えば、送信元又は宛先がN個のデータ要素を格納する場合)、ベクトルレジスタ5515が使用される。他の値は、スカラレジスタ5516又はベクトルレジスタ5515を使用してよい。
<Dequantize>
逆量子化(Dequantize)命令の一実施形態は、前に量子化された値を「逆量子化する」。例として、光線追跡の実装では特定のBVHサブ木は、記憶及び帯域幅要件を低減するために量子化されてよい。逆量子化命令の一実施形態は、dest src0 src1 src2を逆量子化する形式を取る。ここで、送信元レジスタsrc0はN個の符号無しバイトを格納し、送信元レジスタsrc1は1個の符号無しバイトを各オフし、送信元レジスタsrc2は1個の浮動小数点値を格納し、宛先レジスタdestはN個の浮動小数点値を格納する。これらのレジスタの全ては、ベクトルレジスタ5515であってよい。代替として、src0及びdestは、ベクトルレジスタ5515であってよく、src1及びsrc2は、スカラレジスタ5516であってよい。
以下のコードシーケンスは、逆量子化命令の1つの特定の実装を定める。
Figure 2021057011
本例では、ldexpは倍精度浮動小数点値を指定された2の整数べき乗により乗算する(つまり、ldexp(x,exp)=x*2exp)。上述のコードでは、現在のSIMDデータ要素に関連付けられた実行マスク値(execMask[i])は1に設定され、src0内の位置iにあるSIMDデータ要素は、浮動小数点値に変換され、src1内の値の整数べき乗(2src1 value)により乗算され、この値はsorc2内の対応するSIMDデータ要素に加算される。
<Selective Min or Max>
選択的最小又は最大(selective min or max)命令の一実施形態は、ビットマスクの中のビットにより示されるように、レーン毎の最小又は最大動作を実行する(つまり、値セットのうちの最小又は最大を返す)。ビットマスクは、ベクトルレジスタ5515、スカラレジスタ5516、又はマスクレジスタの別個のセット(図示しない)を利用してよい。以下のコードシーケンスは、最小/最大命令の1つの特定の実装を定める。sel_min_max dest src0 src1 src2、ここで、src0はN個のダブルワードを格納し、src1はN個のダブルワードを格納し、src2は1つのダブルワードを各奉仕、宛先レジスタはN個のダブルワードを格納する。
以下のコードシーケンスは、選択的min/max命令の1つの特定の実装を定める。
Figure 2021057011
本例では、(1<<i)&src2(iだけ左にシフトされ、src2とANDされた)の値は、src0及びsrc1の中のi番目のデータ要素の最小値、又はsrc0及びsrc1の中のi番目のデータ要素の最大値を選択するために使用される。現在のSIMDデータ要素に関連付けられた実行マスク値(execMask[i])が1に設定された場合にのみ、動作は、i番目のデータ要素について実行される。
<Shuffle Index命令>
シャッフルインデックス(shuffle index)命令の一実施形態は、入力レーンの任意のセットを出力レーンにコピーできる。32のSIMD幅では、この命令は、より低いスループットで実行され得る。本実施形態は、shuffle_index dest src0 sorc1<optional flag>の形式をとり、src0はN個のダブルワードを格納し、src1はN個の符号無しバイト(つまり、インデックス値)を格納し、destはN個のダブルワードを格納する。
以下のコードシーケンスは、シャッフルインデックス命令の1つの特定の実装を定める。
Figure 2021057011
上記のコードでは、src1の中のインデックスは現在のレーンを識別する。実行マスクの中のi番目の値が1に設定されている場合、ソースレーンが0〜SIMD幅の範囲内にあることを保証するためにチェックが実行される。範囲内にある場合、フラグが設定され(srcLaneMod)、宛先のデータ要素iがsrc0のデータ要素iに等しく設定される。レーンが範囲内にある場合(つまり有効である場合)、src1からのインデックス値(srcLane0)は、src0内へのインデックスとして使用される(dst[i]=src0[srcLane])。
<Immediate Shuffle Up/Dn/XOR命令>
一実施形態では、即時シャッフル(immediate shuffle)Up/Dn/XOR命令は、入力データ要素/レーンを、命令の即値(immediate)に基づきシャッフルする。一実装では、即値は、即値の値に基づき、入力レーンを1、2、4、8又は16個の位置だけシフトすることを指定する。任意で、追加スカラ送信元レジスタは、充填値(fill value.)として指定できる。送信元レーンインデックスが無効であるとき、充填値(提供された場合には)は、宛先の中のデータ要素値に格納される。充填値が提供されない場合、データ要素位置は全て0に設定される。
一実施形態では、フラグレジスタが送信元マスクとして使用される。ソースレーンのフラグビットが1に設定された場合、ソースレーンは無効としてマークされ、命令が進行する。
以下は、即時シャッフル命令の異なる実装の例である。
Figure 2021057011
本実装では、src0はN個のダブルワードを格納し、src1は充填値(存在する場合)の1つのダブルワードを格納し、destは結果を含むN個のダブルワードを格納する。
以下のコードシーケンスは、即時シャッフル命令の1つの特定の実装を定める。
Figure 2021057011
ここでは、入力データ要素/レーンは、即値の値に基づき、1、2、4、8又は16個の位置だけシフトされる。レジスタsrc1は、送信元レーンインデックスが無効なときに宛先の中のデータ要素位置に格納される充填値として使用される追加スカラ送信元レジスタである。充填値が提供されず、送信元レーンインデックスが無効な場合、宛先の中のデータ要素位置は0に設定される。フラグレジスタ(FLAG)が送信元マスクとして使用される。ソースレーンのフラグビットが1に設定された場合、ソースレーンは無効としてマークされ、上述のように命令が進行する。
<Indirect Shuffle Up/Dn/XOR命令>
間接シャッフル(indirect shuffle)命令は、送信元レーンから宛先レーンへのマッピングを制御する送信元オペランド(src1)を有する。間接シャッフル命令の一実施形態は以下の形式をとる。
Figure 2021057011
ここで、src0はN個のダブルワードを格納し、src1は1個のダブルワードを格納し、destはN個のダブルワードを格納する。
以下のコードシーケンスは、間接シャッフル命令の1つの特定の実装を定める。
Figure 2021057011
したがって、間接シャッフル命令は、上述の即時シャッフル命令と同様に動作するが、送信元レーンの宛先レーンへのマッピングが即時ではなく送信元レジスタsrc1により制御される。
<Cross Lane Min/Max命令>
レーン間最小/最大(cross lane minimum/maximum)命令の実施形態は、浮動小数点及び整数データ型についてサポートされる。レーン間最小命令は、lane_min dest src0の形式を取り、レーン間最大命令は、lane_max dest src0の形式を取る。ここで、src0はN個のダブルワードを格納し、destは1個のダブルワードを格納する。
例として、以下のコードシーケンスは、レーン間最小の1つの特定の実装を定める。
Figure 2021057011
本実施形態では、送信元レジスタのデータ位置iにあるダブルワード値は、宛先レジスタ内のデータ要素と比較され、2つの値のうちの最小値が宛先レジスタにコピーされる。レーン間最大命令は、実質的に同じ方法で動作し、唯一の違いは、位置iにあるデータ要素の最大値及び宛先値が選択されることである。
<Cross Lane Min/Max Index命令>
レーン間最小インデックス命令mの実施形態は、lane_min_index dest src0の形式を取り、レーン間最大インデックス命令は、lane_max_index dest src0の形式を取る。ここで、src0はN個のダブルワードを格納し、destは1個のダブルワードを格納する。
例として、以下のコードシーケンスは、レーン間最小インデックス命令の1つの特定の実装を定める。
Figure 2021057011
本実施形態では、宛先インデックスは、0からSIMD幅までインクリメントされ、宛先レジスタの範囲に及ぶ。実行マスクビットが設定された場合、送信元レジスタ内の位置iにあるデータ要素は、一時記憶場所(tmp)にコピーされ、宛先インデックスはデータ要素位置iに設定される。
<Cross Lane Sorting Network命令>
一実施形態では、レーン間ソートネットワーク(cross−lane sorting network)命令は、全てのN個の入力要素を、N幅の(安定した)ソートネットワークを用いて、昇順(sortnet_min)又は降順(sortnet_max)にソートする。命令の最小/最大バージョンは、それぞれsortnet_min dest src0及びsortnet_max dest src0の形式を取る。一実装では、src0及びdestはN個のダブルワードを格納する。最小(min)/最大(max)ソートは、src0のN個のダブルワードに対して実行されえ、(minの場合)昇順にされた要素又は(maxの場合)降順にされた要素は、それらそれぞれのソートされた順序でdestに格納される。命令を定めるコードシーケンスの一例は、dest=apply_N_wide_sorting_network_min/max(src0)である。
<Cross Lane Sorting Network Index命令>
一実施形態では、レーン間ソートネットワークインデックス(cross−lane sorting network index)命令は、全てのN個の入力要素を、N幅の(安定した)ソートネットワークを用いて、昇順(sortnet_min)又は降順(sortnet_max)にソートし、順序(permute)インデックスを返す。命令の最小(min)/最大(max)バージョンは、sortnet_min_index dest src0及びsortnet_max_index dest src0の形式を取る。ここで、src0及びdestはそれぞれN個のダブルワードを格納する。命令を定めるコードシーケンスの一例は、dest=apply_N_wide_sorting_network_min/max_index(src0)である。
図56に、上述の命令のうちの任意のものを実行する方法の一実施形態が示される。方法は、上述の特定のプロセッサアーキテクチャ上で実装され得るが、任意の特定のプロセッサ又はシステムアーキテクチャに限定されない。
5601で、1次グラフィックスレッドの命令は、プロセッサコア上で実行される。これは、例えば、上述のコアのうちのいずれかを含んでよい(例えば、グラフィックコア3730)。光線追跡作業が1次グラフィックスレッド内に達すると、5602で、光線追跡命令は、図55に関して上述したような機能ユニット(FU)の形式であってよい又は図37に関して記載したような専用光線追跡コア3150であってよい光線追跡実行回路にオフロードされる。
5603で、光線追跡命令は、メモリからフェッチされ、復号される。5606で、(デコーダを必要とする実施形態では)命令は、実行可能動作に復号される。5604で、光線追跡命令は、光線追跡回路による実行のために、スケジューリングされ、ディスパッチされる。5605で、光線追跡命令は、光線追跡回路により実行される。例えば、命令は、上述のFU(例えば、FU5510、光線追跡FU4912、等)及び/又はグラフィックコア3730又は光線追跡コア3750にディスパッチされ実行されてよい。
5606で、光線追跡命令について実行が完了すると、結果が格納される(例えば、メモリ3798に格納される)。5607で、1次グラフィックスレッドが通知される。5608で、光線追跡結果は、1次スレッドのコンテキスト内で処理される(例えば、メモリから読み出され、グラフィックレンダリング結果に統合される)。
上述の実施形態では、用語「エンジン」又は「モジュール」又は「ロジック」は、1つ以上のソフトウェアまたはファームウェアプログラムを実行する、ASIC(application specific integrated circuit)、電子回路、プロセッサ(共有、専用、又はグループ)、及び/又はメモリ(共有、専用、又はグループ)、結合ロジック回路、及び/又は記載の機能を提供する他の適切なコンポーネントを表し、その部分であり、又はそれを含んでよい。実施形態では、エンジン、モジュール、又はロジックは、ファームウェア、ハードウェア、ソフトウェア、又はファームウェア、ハードウェア、及びソフトウェアの任意の組み合わせで実装されてよい。
本発明の実施形態は、上述した種々のステップを含んでよい。ステップは、汎用又は専用プロセッサにステップを実行させるために使用されてよい機械実行可能命令で実施されてよい。代替として、これらのステップは、ステップを実行するためのハードワイヤードロジックを含む専用ハードウェアコンポーネントにより、又はプログラムされたコンピュータコンポーネント及びカスタムハードウェアコンポーネントの任意の組み合わせにより、実行されてよい。
本願明細書に記載のように、命令は、特定の動作を実行するよう構成された又は所定の機能を有するASIC(application specific integrated circuit)のようなハードウェアの特定の構成、又は非一時的コンピュータ可読媒体で具現化されたメモリに格納されたソフトウェア命令を表してよい。したがって、図面に示された技術は、1つ以上の電子装置(例えば、エンドステーション、ネットワーク要素、等)に格納されそこで実行されるコード及びデータを用いて実装できる。このような電子装置は、非一時的コンピュータ機械可読記憶媒体(例えば、磁気ディスク、光ディスク、ランダムアクセスメモリ、読み出し専用メモリ、フラッシュメモリ装置、位相変化メモリ)のようなコンピュータ可読媒体及び一時的コンピュータ機械可読通信媒体(例えば、電気、光、音響、又は搬送波、赤外線信号、デジタル信号、等の他の形式の伝搬信号)を用いて、コード及びデータを格納し(内部で及び/又は他の電子装置とネットワークを介して)通信する。
さらに、このような電子装置は、標準的に、1つ以上の記憶装置(非一時的機械可読記憶媒体)、ユーザ入力/出力装置(例えば、キーボード、タッチスクリーン、及び/又はディスプレイ)、及びネットワーク接続のような1つ以上の他のコンポーネントに結合される1つ以上のプロセッサを含む。プロセッサ及び他のコンポーネントのセットの結合は、標準的に1つ以上のバス及びブリッジ(バス制御部とも呼ばれる)を介する。記憶装置及びネットワークトラフィックを運ぶ信号は、それぞれ、1つ以上の機械可読記憶媒体及び機械可読通信媒体を表す。したがって、所与の電子装置の記憶装置は、標準的に、該電子装置の1つ以上のプロセッサのセットで実行するためのコード及び/又はデータを格納する。もちろん、本発明の一実施形態の1つ以上の部分は、ソフトウェア、ファームウェア、及び/又はハードウェアの異なる組み合わせを用いて実装されてよい。詳細な説明を通じて、説明を目的として、本発明の完全な理解を提供するために、多数の特定の詳細が説明された。しかしながら、当業者には、本発明がこれらの特定の詳細のうちの一部を有しないで実行されてよいことが明らかである。特定の例では、よく知られた構造及び機能は、本発明の主題を不明瞭にすることを避けるために、入念に詳細に記載されなかった。したがって、本発明の範囲及び精神は、以下の特許請求の範囲の観点で判断されるべきである。
102 プロセッサ
104 キャッシュ
106 レジスタファイル
107 プロセッサコア
108 グラフィックプロセッサ
109 命令セット
110 インタフェースバス
111 ディスプレイ装置
112 アクセラレータ
116メモリ制御部
118 外部グラフィックプロセッサ
119 外部アクセラレータ
120 メモリ装置
121 命令
122 データ
124 データ記憶装置
125 タッチセンサ
126 無線トランシーバ
128 ファームウェアインタフェース
130 プラットフォーム制御ハブ
134 ネットワーク制御部
140 レガシI/O制御部
142 USB制御部
143 キーボード/マウス
144 カメラ
146 オーディオ制御部

Claims (25)

  1. 複数のスレッドを有するアプリケーションを実行するステップと、
    ローカルグラフィックプロセッサで実行するための、第1スレッドサブセットと、ローカルプロセッサの仮想化表現で実行するための第2スレッドサブセットと、を識別するステップと、
    前記ローカルグラフィックプロセッサ上に前記第1スレッドサブセットをスケジューリングするステップと、
    前記ローカルプロセッサの前記仮想化表現に関連付けられたクラウドに基づく処理リソースに、前記スレッド又は前記スレッドの表現を送信することにより、前記第2スレッドサブセットをスケジューリングするステップと、
    前記ローカルグラフィックプロセッサ上で前記第1スレッドサブセットを実行した第1結果を、前記クラウドに基づく処理リソース上で前記第2スレッドサブセットを実行した第2結果と結合して、画像フレームをレンダリングするステップと、
    を含む方法。
  2. 前記複数のスレッドを評価して、前記第1及び第2スレッドサブセットを識別するステップ、を更に含む請求項1に記載の方法。
  3. 前記複数のスレッドを評価するステップは、前記ローカルプロセッサの前記仮想化表現での実行に関連付けられたメトリックの観点から、前記複数のスレッドに関連付けられた実行要件を評価するステップを更に含む、請求項2に記載の方法。
  4. 前記実行要件は、遅延及び/又は帯域幅閾を含み、前記メトリックは、前記ローカルプロセッサの前記仮想化表現での実行に関連付けられた遅延及び/又は帯域幅統計値を含む、請求項3に記載の方法。
  5. 前記ローカルグラフィックプロセッサ及び前記ローカルプロセッサの前記仮想化表現をインストールし及び/又は列挙するステップ、を更に含む請求項1又は4に記載の方法。
  6. 前記第1スレッドサブセットの中の第1グラフィックスレッドに関連付けられた第1コマンドは、第1コマンドバッファに格納され、前記第2スレッドサブセットの中の第2グラフィックスレッドに関連付けられた第2コマンドは、第2コマンドバッファに格納される、請求項1又は5に記載の方法。
  7. 前記ローカルグラフィックプロセッサの第1コマンドキューに前記第1コマンドを転送することにより、前記ローカルグラフィックプロセッサ上に前記第1グラフィックスレッドをスケジューリングするステップであって、前記ローカルグラフィックプロセッサは、前記第1コマンドキューからの前記第1コマンドを処理する、ステップ、を更に含む請求項6に記載の方法。
  8. 第2コマンドキューに前記第2コマンドを転送することにより、第2ローカルグラフィックプロセッサの仮想化表現上に前記第2グラフィックスレッドをスケジューリングするステップであって、前記クラウドに基づくグラフィック実行リソースは、前記第2コマンドキューからの前記第2コマンドを処理する、ステップ、を更に含む請求項7に記載の方法。
  9. 前記複数のスレッドのうちの各スレッドは、グラフィック作業グループ内の作業アイテムを含む、請求項1又は8に記載の方法。
  10. プログラムコードを格納した機械可読媒体であって、前記プログラムコードは、機械により実行されると、前記機械に動作を実行させ、前記動作は、
    複数のスレッドを有するアプリケーションを実行するステップと、
    ローカルグラフィックプロセッサで実行するための、第1スレッドサブセットと、ローカルプロセッサの仮想化表現で実行するための第2スレッドサブセットと、を識別するステップと、
    前記ローカルグラフィックプロセッサ上に前記第1スレッドサブセットをスケジューリングするステップと、
    前記ローカルプロセッサの前記仮想化表現に関連付けられたクラウドに基づく処理リソースに、前記スレッド又は前記スレッドの表現を送信することにより、前記第2スレッドサブセットをスケジューリングするステップと、
    前記ローカルグラフィックプロセッサ上で前記第1スレッドサブセットを実行した第1結果を、前記クラウドに基づく処理リソース上で前記第2スレッドサブセットを実行した第2結果と結合して、画像フレームをレンダリングするステップと、
    を含む、機械可読媒体。
  11. 前記複数のスレッドを評価して、前記第1及び第2スレッドサブセットを識別するステップ、
    を含む動作を前記機械に実行させるプログラムコードを更に含む、請求項10に記載の機械可読媒体。
  12. 前記複数のスレッドを評価するステップは、前記ローカルプロセッサの前記仮想化表現での実行に関連付けられたメトリックの観点から、前記複数のスレッドに関連付けられた実行要件を評価するステップを更に含む、請求項11に記載の機械可読媒体。
  13. 前記実行要件は、遅延及び/又は帯域幅閾を含み、前記メトリックは、前記ローカルプロセッサの前記仮想化表現での実行に関連付けられた遅延及び/又は帯域幅統計値を含む、請求項12に記載の機械可読媒体。
  14. 前記ローカルグラフィックプロセッサ及び前記ローカルプロセッサの前記仮想化表現をインストールし及び/又は列挙するステップ、を含む動作を前記機械に実行させるプログラムコードを更に含む、請求項10又は13に記載の機械可読媒体。
  15. 前記第1スレッドサブセットの中の第1グラフィックスレッドに関連付けられた第1コマンドは、第1コマンドバッファに格納され、前記第2スレッドサブセットの中の第2グラフィックスレッドに関連付けられた第2コマンドは、第2コマンドバッファに格納される、請求項10又は14に記載の機械可読媒体。
  16. 前記ローカルグラフィックプロセッサの第1コマンドキューに前記第1コマンドを転送することにより、前記ローカルグラフィックプロセッサ上に前記第1グラフィックスレッドをスケジューリングするステップであって、前記ローカルグラフィックプロセッサは、前記第1コマンドキューからの前記第1コマンドを処理する、ステップ、を含む動作を前記機械に実行させるプログラムコードを更に含む、請求項15に記載の機械可読媒体。
  17. 第2コマンドキューに前記第2コマンドを転送することにより、第2ローカルグラフィックプロセッサの仮想化表現上に前記第2グラフィックスレッドをスケジューリングするステップであって、前記クラウドに基づくグラフィック実行リソースは、前記第2コマンドキューからの前記第2コマンドを処理する、ステップ、を含む動作を前記機械に実行させるプログラムコードを更に含む、請求項16に記載の機械可読媒体。
  18. 前記複数のスレッドのうちの各スレッドは、グラフィック作業グループ内の作業アイテムを含む、請求項10又は17に記載の機械可読媒体。
  19. アプリケーションのスレッドを実行するローカルグラフィックプロセッサと、
    ローカルプロセッサの仮想化表現を生成するグラフィックプロセッサ仮想化回路及び/又はロジックと、
    ローカルグラフィックプロセッサで実行するための、第1スレッドサブセットと、ローカルプロセッサの仮想化表現で実行するための第2スレッドサブセットと、を識別するスケジューラと、
    を含み、
    前記スケジューラは、前記ローカルグラフィックプロセッサ上に前記第1スレッドサブセットを、及び前記ローカルプロセッサの前記仮想化表現に関連付けられたクラウドに基づく処理リソースに前記スレッド又は前記スレッドの表現を送信することにより、前記第2スレッドサブセットを、スケジューリングし、
    前記ローカルグラフィックプロセッサは、前記ローカルグラフィックプロセッサ上で前記第1スレッドサブセットを実行した第1結果を、前記クラウドに基づく処理リソース上で前記第2スレッドサブセットを実行した第2結果と結合して、画像フレームをレンダリングする、
    機器。
  20. 前記スケジューラは、前記の複数のスレッドを評価して、前記第1及び第2スレッドサブセットを識別する評価回路/ロジックを含む、請求項19に記載の機器。
  21. 前記複数のスレッドを評価するステップは、前記ローカルプロセッサの前記仮想化表現での実行に関連付けられたメトリックの観点から、前記複数のスレッドに関連付けられた実行要件を評価するステップを更に含む、請求項20に記載の機器。
  22. 前記実行要件は、遅延及び/又は帯域幅閾を含み、前記メトリックは、前記ローカルプロセッサの前記仮想化表現での実行に関連付けられた遅延及び/又は帯域幅統計値を含む、請求項21に記載の機器。
  23. 前記ローカルグラフィックプロセッサ及び前記ローカルプロセッサの前記仮想化表現をインストールし及び/又は列挙する回路及び/又はロジック、を更に含む請求項19又は22に記載の機器。
  24. 前記第1スレッドサブセットの中の第1グラフィックスレッドに関連付けられた第1コマンドは、第1コマンドバッファに格納され、前記第2スレッドサブセットの中の第2グラフィックスレッドに関連付けられた第2コマンドは、第2コマンドバッファに格納される、請求項19又は23に記載の機器。
  25. 前記スケジューラは、前記ローカルグラフィックプロセッサの第1コマンドキューに前記第1コマンドを転送することにより、前記ローカルグラフィックプロセッサ上に前記第1グラフィックスレッドをスケジューリングし、前記ローカルグラフィックプロセッサは、前記第1コマンドキューからの前記第1コマンドを処理する、請求項24に記載の機器。
JP2020110060A 2019-09-30 2020-06-26 ローカル及びクラウドに基づくグラフィック処理リソースを用いるリアルタイムグラフィック処理のための機器及び方法 Pending JP2021057011A (ja)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US16/588,855 US11127107B2 (en) 2019-09-30 2019-09-30 Apparatus and method for real time graphics processing using local and cloud-based graphics processing resources
US16/588,855 2019-09-30

Publications (1)

Publication Number Publication Date
JP2021057011A true JP2021057011A (ja) 2021-04-08

Family

ID=74872779

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2020110060A Pending JP2021057011A (ja) 2019-09-30 2020-06-26 ローカル及びクラウドに基づくグラフィック処理リソースを用いるリアルタイムグラフィック処理のための機器及び方法

Country Status (5)

Country Link
US (2) US11127107B2 (ja)
JP (1) JP2021057011A (ja)
KR (1) KR20210038294A (ja)
CN (1) CN112669193A (ja)
DE (1) DE102020124932A1 (ja)

Families Citing this family (17)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP3973710A4 (en) * 2019-05-22 2023-05-03 Nokia Technologies Oy METHOD, DEVICE AND COMPUTER PROGRAM PRODUCT FOR ENCODING AND DECODING VOLUMETRIC VIDEO
US11579929B2 (en) * 2020-01-31 2023-02-14 Salesforce. Inc. Cross platform application flow orchestration by transmitting the application flow including a transition rule to a plurality of computation layers
JP7368511B2 (ja) * 2020-02-03 2023-10-24 株式会社ソニー・インタラクティブエンタテインメント データ処理システム、データ転送装置およびコンテキストスイッチ方法
US11568021B2 (en) 2020-02-21 2023-01-31 Alibaba Group Holding Limited Vector-vector multiplication techniques for processing systems
US11252226B2 (en) * 2020-03-05 2022-02-15 Qualcomm Incorporated Methods and apparatus for distribution of application computations
US11500680B2 (en) * 2020-04-24 2022-11-15 Alibaba Group Holding Limited Systolic array-friendly data placement and control based on masked write
CN111709870B (zh) * 2020-05-28 2023-10-03 钟杰东 一种zjd应用处理器架构
US11409839B2 (en) * 2020-08-21 2022-08-09 Alibaba Group Holding Limited Programmable and hierarchical control of execution of GEMM operation on accelerator
CN113343814B (zh) * 2021-05-31 2022-06-14 太原理工大学 一种基于单节点光子储备池计算的手写数字图像识别方法
CN113343813B (zh) * 2021-05-31 2022-05-10 太原理工大学 一种基于单节点光子储备池计算的动作视频识别方法
CN113918249B (zh) * 2021-09-14 2023-11-21 北京房江湖科技有限公司 一种背景模糊控件的实现方法及装置
CN114491049A (zh) * 2022-02-17 2022-05-13 金陵科技学院 一种基于信息管理的办公系统资产配置方法
US11663759B1 (en) 2022-04-04 2023-05-30 Cloudstream Medical Imaging, Inc. System and method for processing multi-dimensional and time-overlapping imaging data in real time with cloud computing
US11690601B1 (en) 2022-04-04 2023-07-04 Cloudstream Medical Imaging, Inc. System and method for processing multi-dimensional ultrasound imaging data on real-time cloud computers
CN114723601B (zh) * 2022-04-08 2023-05-09 山东翰林科技有限公司 一种虚拟场景下的模型结构化建模及快速渲染方法
US20230394739A1 (en) * 2022-06-06 2023-12-07 William USHER Apparatus and Method for Approximate Puzzlepiece Compositing
WO2024010125A1 (ko) * 2022-07-08 2024-01-11 엘지전자 주식회사 사이니지 제공을 위한 에지 및 클라우드 간 협업 플랫폼

Family Cites Families (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9280375B1 (en) * 2014-04-30 2016-03-08 Google Inc. Dynamically adjustable virtual machine
WO2016024874A1 (en) * 2014-08-15 2016-02-18 Intel Corporation Facilitating dynamic thread-safe operations for variable bit-length transactions on computing devices

Also Published As

Publication number Publication date
US11127107B2 (en) 2021-09-21
US11593909B2 (en) 2023-02-28
US20220148123A1 (en) 2022-05-12
DE102020124932A1 (de) 2021-04-01
KR20210038294A (ko) 2021-04-07
CN112669193A (zh) 2021-04-16
US20210097641A1 (en) 2021-04-01

Similar Documents

Publication Publication Date Title
US11593909B2 (en) Apparatus and method for real time graphics processing using local and cloud-based graphics processing resources
JP7430050B2 (ja) クラウドに基づくリアルタイム光線追跡
TW202209258A (zh) 用於包含光線追蹤的有效圖形處理的設備與方法
EP3675046B1 (en) Speculative execution of hit and intersection shaders on programmable ray tracing architectures
JP2021149942A (ja) 変位メッシュ圧縮のための装置及び方法
CN111383159A (zh) 用于加速叶节点中的相交的标量引擎集群
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
US11915357B2 (en) Apparatus and method for throttling a ray tracing pipeline
US11900498B2 (en) Apparatus and method for performing a stable and short latency sorting operation
CN113470159A (zh) 用于光线追踪流水线中的双精度光线遍历的设备和方法
JP2021149943A (ja) レイトラバーサルハードウェアにおいてボックスクエリを実行するための装置及び方法
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: 20230622

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20240424