JP2021099786A - 共有ローカルメモリをパーティショニングするメカニズム - Google Patents

共有ローカルメモリをパーティショニングするメカニズム Download PDF

Info

Publication number
JP2021099786A
JP2021099786A JP2020156374A JP2020156374A JP2021099786A JP 2021099786 A JP2021099786 A JP 2021099786A JP 2020156374 A JP2020156374 A JP 2020156374A JP 2020156374 A JP2020156374 A JP 2020156374A JP 2021099786 A JP2021099786 A JP 2021099786A
Authority
JP
Japan
Prior art keywords
memory
graphics
slm
execution
cache
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
JP2020156374A
Other languages
English (en)
Inventor
レイ ジョイディープ
Ray Joydeep
レイ ジョイディープ
ランガナタン ヴァサント
Ranganathan Vasanth
ランガナタン ヴァサント
アッシュボー ベン
Ashbaugh Ben
アッシュボー ベン
ヴァレリオ ジェイムズ
Valerio James
ヴァレリオ ジェイムズ
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 JP2021099786A publication Critical patent/JP2021099786A/ja
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0806Multiuser, multiprocessor or multiprocessing cache systems
    • G06F12/084Multiuser, multiprocessor or multiprocessing cache systems with a shared cache
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0638Organizing or formatting or addressing of data
    • G06F3/0644Management of space entities, e.g. partitions, extents, pools
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/45Exploiting coarse grain parallelism in compilation, i.e. parallelism between groups of instructions
    • G06F8/456Parallelism detection
    • 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/5077Logical partitioning of resources; Management or configuration of virtualized resources
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0806Multiuser, multiprocessor or multiprocessing cache systems
    • G06F12/0811Multiuser, multiprocessor or multiprocessing cache systems with multilevel cache hierarchies
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0806Multiuser, multiprocessor or multiprocessing cache systems
    • G06F12/0815Cache consistency protocols
    • G06F12/0837Cache consistency protocols with software control, e.g. non-cacheable data
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0806Multiuser, multiprocessor or multiprocessing cache systems
    • G06F12/0842Multiuser, multiprocessor or multiprocessing cache systems for multiprocessing or multitasking
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0844Multiple simultaneous or quasi-simultaneous cache accessing
    • G06F12/0846Cache with multiple tag or data arrays being simultaneously accessible
    • G06F12/0848Partitioned cache, e.g. separate instruction and operand caches
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0866Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches for peripheral storage systems, e.g. disk cache
    • G06F12/0871Allocation or management of cache space
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0875Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches with dedicated cache, e.g. instruction or stack
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0893Caches characterised by their organisation or structure
    • G06F12/0897Caches characterised by their organisation or structure with two or more cache hierarchy levels
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/10Address translation
    • G06F12/1027Address translation using associative or pseudo-associative address translation means, e.g. translation look-aside buffer [TLB]
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F13/14Handling requests for interconnection or transfer
    • G06F13/16Handling requests for interconnection or transfer for access to memory bus
    • G06F13/1605Handling requests for interconnection or transfer for access to memory bus based on arbitration
    • G06F13/1652Handling requests for interconnection or transfer for access to memory bus based on arbitration in a multiprocessor architecture
    • G06F13/1663Access to shared memory
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0602Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
    • G06F3/0604Improving or facilitating administration, e.g. storage management
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0629Configuration or reconfiguration of storage systems
    • G06F3/0631Configuration or reconfiguration of storage systems by allocating resources to storage systems
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0638Organizing or formatting or addressing of data
    • G06F3/064Management of blocks
    • 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/30145Instruction analysis, e.g. decoding, instruction word fields
    • 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/3017Runtime instruction translation, e.g. macros
    • G06F9/30178Runtime instruction translation, e.g. macros of compressed or encrypted 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/34Addressing or accessing the instruction operand or the result ; Formation of operand address; Addressing modes
    • 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/3824Operand accessing
    • G06F9/3834Maintaining memory consistency
    • 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3885Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units
    • G06F9/3887Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units controlled by a single instruction for multiple data lanes [SIMD]
    • 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/5011Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals
    • G06F9/5016Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals the resource being the memory
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T1/00General purpose image data processing
    • G06T1/20Processor architectures; Processor configuration, e.g. pipelining
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T1/00General purpose image data processing
    • G06T1/60Memory management

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Human Computer Interaction (AREA)
  • Multimedia (AREA)
  • Image Generation (AREA)
  • Multi Processors (AREA)
  • Memory System (AREA)
  • Memory System Of A Hierarchy Structure (AREA)
  • Image Processing (AREA)

Abstract

【課題】ローカルメモリのパーティショニングを容易にする装置が開示される。【解決手段】装置は、複数の実行スレッドを実行する複数の実行ユニットと、複数の実行ユニットの間でアクセスを共有するよう結合されたメモリと、キャッシュとして及び共有ローカルメモリ(SLM)として使用されるようメモリをパーティショニングするパーティショニングハードウェアとを含み、パーティショニングハードウェアは、アクティブである実行ユニットで実行される複数の実行スレッドの数に基づいて、メモリをパーティショニングする。【選択図】図15

Description

グラフィクス処理ユニット(GPU)は、高スループットを達成するためにプログラムの数百のスレッドが並列に実行される大いにスレッド化された(highly threaded)マシンである。GPUスレッドグループは、3次元(3D)レンダリングを実行するようメッシュシェーディング(mesh shading)アプリケーションで実装される。重い計算を要するますます複雑なGPUによれば、メモリバンド幅要件に対応するという課題がある。
本発明の上記の特徴が詳細に理解され得るように、先に簡潔に要約された本発明の更に具体的な説明は、いくつかが添付の図面に表されている実施形態を参照して行われ得る。なお、留意すべきは、添付の図面は、単に本発明の典型的な実施形態を表しているので、その範囲の限定と見なされるべきではなく、本発明は、他の同等の有効な実施形態を認めることができる点である。
実施形態に従う処理システムのブロック図である。 本明細書で記載される実施形態によって提供されるコンピュータシステム及びグラフィクスプロセッサを表す。 本明細書で記載される実施形態によって提供されるコンピュータシステム及びグラフィクスプロセッサを表す。 本明細書で記載される実施形態によって提供されるコンピュータシステム及びグラフィクスプロセッサを表す。 本明細書で記載される実施形態によって提供されるコンピュータシステム及びグラフィクスプロセッサを表す。 実施形態によって提供される更なるグラフィクスプロセッサ及び計算アクセラレータアーキテクチャのブロック図を表す。 実施形態によって提供される更なるグラフィクスプロセッサ及び計算アクセラレータアーキテクチャのブロック図を表す。 実施形態によって提供される更なるグラフィクスプロセッサ及び計算アクセラレータアーキテクチャのブロック図を表す。 いくつかの実施形態に従うグラフィクスプロセッサのグラフィクス処理エンジンのブロック図である。 実施形態に従ってグラフィクスプロセッサで用いられる処理要素のアレイを含むスレッド実行ロジック500を表す。 実施形態に従ってグラフィクスプロセッサで用いられる処理要素のアレイを含むスレッド実行ロジック500を表す。 実施形態に従う更なる実行ユニット600を表す。 いくつかの実施形態に従うグラフィクスプロセッサ命令フォーマットを表すブロック図である。 他の実施形態に従うグラフィクスプロセッサのブロック図である。 いくつかの実施形態に従うグラフィクスプロセッサコマンドフォーマット及びコマンドシーケンスを表す。 いくつかの実施形態に従うグラフィクスプロセッサコマンドフォーマット及びコマンドシーケンスを表す。 いくつかの実施形態に従うデータ処理システムのためのグラフィクスソフトウェアアーキテクチャの例を表す。 実施形態に従う集積回路パッケージアセンブリを表す。 実施形態に従う集積回路パッケージアセンブリを表す。 実施形態に従う集積回路パッケージアセンブリを表す。 実施形態に従う集積回路パッケージアセンブリを表す。 実施形態に従ってチップ集積回路上のシステムの例を表すブロック図である。 更なる例となるグラフィクスプロセッサを表すブロック図である。 更なる例となるグラフィクスプロセッサを表すブロック図である。 コンピュータデバイスの一実施形態を表す。 サブスライスの一実施形態を表す。 スレッドスポーナロジックの一実施形態を表す。 SLM割り当ての実施形態を表す。 SLM割り当ての実施形態を表す。 共有ローカルメモリをパーティショニングするプロセスの一実施形態を表すフロー図である。 共有ローカルメモリをパーティショニングする擬似コードの一実施形態を表す。
以下の説明では、多数の具体的な詳細が、本発明のより完全な理解をもたらすために示されている。しかし、当業者に明らかなように、本発明は、それらの具体的な詳細のうちの1つ以上によらなくても実施されてよい。他の事例では、よく知られている技術は、本発明を不明りょうにしないように記載されていない。
実施形態において、共有ローカルメモリ(SLM)は、SLMに加えてキャッシュとして動作するよう実装されてよく、そのような実施形態では、SLMは、アクティブである実行ユニットで実行される複数の実行スレッドの数に基づいてパーティショニングされてよい。
[システム概要]
図1は、実施形態に従う処理システム100のブロック図である。システム100は、多数のプロセッサ102又はプロセッサコア107を具備しながら、単一プロセッサデスクトップシステム、マルチプロセッサワークステーションシステム、又はサーバシステムにおいて使用されてよい。一実施形態において、システム100は、ローカル又はワイドエリアネットワークへの有線又は無線接続を備えたインターネット・オブ・シングス(IoT)デバイス内のように、移動体、携帯型、又は埋め込み型デバイスでの使用のためにシステム・オン・ア・チップ(SoC)集積回路内に組み込まれた処理プラットフォームである。
一実施形態において、システム100は、サーバベースのゲームプラットフォーム;ゲーム及びメディアコンソールを含むゲーム機;モバイルゲーム機、携帯型ゲーム機、又はオンラインゲーム機を含むか、それらと結合するか、あるいは、それらに組み込まれ得る。いくつかの実施形態において、システム100は、携帯電話機、スマートフォン、タブレットコンピュータデバイス又はモバイルインターネット接続デバイス、例えば、低内部記憶容量のラップトップの部分である。処理システム100はまた、スマートウォッチウェアラブルデバイスのようなウェアラブルデバイス:現実世界の視覚、音声又は触覚経験を補うよう視覚、オーディオ又は触覚出力を提供するか、あるいは、別なふうに、テキスト、オーディオ、グラフィクス、ビデオ、ホログラフィック画像若しくはビデオ、又は触覚フィードバックを提供する拡張現実(AR)又は仮想現実(VR)により増強されたスマートアイウェア又はクロージング;他の拡張現実(AR)デバイス;又は他の仮想現実(VR)デバイスを含むか、それらと結合するか、あるいは、それらに組み込まれ得る。いくつかの実施形態において、処理システム100は、テレビ受像機又はセットトップボックスデバイスを含むか、又はその部分である。一実施形態において、システム100は、バス、トラクタトレイラー、自動車、オートバイ若しくは電動自転車、飛行機若しくはグライダー(又はそれらの任意の組み合わせ)等の自動運転車両を含むか、それらと結合するか、あるいは、それらに組み込まれ得る。自動運転車両は、車両の周囲で検知された環境を処理するためにシステム100を使用してよい。
いくつかの実施形態において、1つ以上のプロセッサ102は夫々、実行されるときにシステム又はユーザソフトウェアのための動作を実行する命令を処理するよう1つ以上のプロセッサコア107を含む。いくつかの実施形態において、1つ以上のプロセッサコア107の少なくとも1つは、特定の命令セット109を処理するよう構成される。いくつかの実施形態において、命令セット109は、複雑命令セットコンピューティング(CISC)、縮小命令セットコンピューティング(RISC)、又は超長命令語(VLIW)による計算を助け得る。1つ以上のプロセッサコア107は、他の命令セットのエミュレーションを助ける命令を含み得る別の命令セット109を処理してもよい。プロセッサコア107はまた、デジタル信号プロセッサ(DSP)のような他の処理デバイスを含んでもよい。
いくつかの実施形態において、プロセッサ102は、キャッシュメモリ104を含む。アーキテクチャに応じて、プロセッサ102は、単一の内部キャッシュ又は複数のレベルの内部キャッシュを有することができる。いくつかの実施形態において、キャッシュメモリは、プロセッサ102の様々なコンポーネントの間で共有される。いくつかの実施形態において、プロセッサ102はまた、既知のキャッシュコヒーレンシ技術を用いてプロセッサコア107の間で共有され得る外部キャッシュ(例えば、レベル3(L3)キャッシュ又はラストレベルキャッシュ(LLC))を使用する。プロセッサ102には更に、レジスタファイル106が含まれ得る。レジスタファイル106は、種々のタイプのデータ(例えば、整数レジスタ、浮動小数点レジスタ、ステータスレジスタ、及び命令ポインタレジスタ)を記憶する種々のタイプのレジスタを含んでよい。いくつかのレジスタは、汎用のレジスタであってよく、一方、他のレジスタは、プロセッサ102の設計に特有であってよい。
いくつかの実施形態において、1つ以上のプロセッサ102は、アドレス、データ、又は制御信号等の通信信号をプロセッサ102とシステム100内の他のコンポーネントとの間で伝送するよう1つ以上のインターフェースバス110と結合される。インターフェースバス110は、一実施形態において、あるバージョンのダイレクト・メディア・インターフェース(DMI)バスのようなプロセッサバスであることができる。しかし、プロセッサバスは、DMIバスに限られず、1つ以上のペリフェラル・コンポーネント・インターコネクトバス(例えば、PCI、PCIエクスプレス)、メモリバス、又は他のタイプのインターフェースバスを含んでもよい。一実施形態において、プロセッサ102は、集積メモリコントローラ116及びプラットフォームコントローラハブ130を含む。メモリコントローラ116は、メモリデバイスとシステム100の他のコンポーネントとの間の通信を助け、一方、プラットフォームコントローラハブ(PCH)130は、ローカルI/Oバスを介してI/Oデバイスへの接続を提供する。
メモリデバイス120は、動的ランダムアクセスメモリ(DRAM)デバイス、静的ランダムアクセスメモリ(SRAM)デバイス、フラッシュメモリデバイス、相変化メモリデバイス、又はプロセスメモリとして働くよう適切な性能を備えたその他のメモリデバイスであることができる。一実施形態において、メモリデバイス120は、1つ以上のプロセッサ102がアプリケーション又はプロセスを実行するときに使用されるデータ122及び命令121を記憶するよう、システム100のためのシステムメモリとして動作することができる。メモリコントローラ116はまた、任意の外部グラフィクスプロセッサ118と結合する。外部グラフィクスプロセッサ118は、グラフィクス及びメディア操作を実行するようプロセッサ102内の1つ以上のグラフィクスプロセッサ108と通信してよい。いくつかの実施形態において、グラフィクス、メディア、及び計算操作は、グラフィクス、メディア、又は計算操作の専門化された組を実行するよう構成され得るコプロセッサであるアクセラレータ112によって支援されてよい。例えば、一実施形態において、アクセラレータ112は、機械学習又は計算操作を最適化するために使用される行列乗算アクセラレータである。一実施形態において、アクセラレータ112は、グラフィクスプロセッサ108と一緒にレイトレーシング動作を実行するために使用され得るレイトレーシングアクセラレータである。一実施形態において、外部アクセラレータ119は、アクセラレータ112の代わりに、又はそれと一緒に使用されてよい。
いくつかの実施形態において、表示デバイス111がプロセッサ102へ接続することができる。表示デバイス111は、モバイル電子デバイス若しくはラップトップデバイスで見られるような内部表示デバイス、又は表示インターフェース(例えば、DisplayPort等)を介して取り付けられる外部表示デバイス、のうちの1つ以上であることができる。一実施形態において、表示デバイス111は、仮想現実(VR)アプリケーション又は拡張現実(AR)アプリケーションで使用される立体表示デバイス等のヘッドマウントディスプレイ(HMD)であることができる。
いくつかの実施形態において、プラットフォームコントローラハブ130は、周辺機器が高速I/Oバスを介してメモリデバイス120及びプロセッサ102へ接続することを可能にする。I/Oペリフェラルには、制限なしに、オーディオコントローラ146、ネットワークコントローラ134、ファームウェアインターフェース128、無線トランシーバ126、タッチセンサ125、データ記憶デバイス124(例えば、不揮発性メモリ、揮発性メモリ、ハードディスクドライブ、フラッシュメモリ、NAND、3D NAND、3D XPoint、等)が含まれる。データ記憶デバイス124は、ストレージインターフェース(例えば、SATA)を介して、又はペリフェラル・コンポーネント・インターコネクトバス(PCI、PCIエクスプレス)等のペリフェラルバスを介して接続することができる。タッチセンサ125は、タッチスクリーンセンサ、圧力センサ、又は指紋センサを含むことができる。無線トランシーバ126は、Wi−Fiトランシーバ、Bluetooth(登録商標)トランシーバ、又は3G、4G、5G、若しくはロング・ターム・エボリューション(LTE)トランシーバ等のモバイルネットワークトランシーバであることができる。ファームウェアインターフェース128は、システムファームウェアとの通信を可能にし、例えば、ユニファイド・エクステンシブル・ファームウェア・インターフェース(UEFI)であることができる。ネットワークコントローラ134は、有線ネットワークへのネットワーク接続を可能にすることができる。いくつかの実施形態において、高性能ネットワークコントローラ(図示せず。)は、インターフェースバス110と結合する。オーディオコントローラ146は、一実施形態において、マルチチャネルハイデフィニションオーディオコントローラである。一実施形態において、システム100は、レガシー(例えば、パーソナルシステム2(PS/2))デバイスをシステムへ結合する任意のレガシーI/Oコントローラ140を含む。プラットフォームコントローラハブ130はまた、キーボード及びマウス143の組み合わせ、カメラ144、又は他のUSB入力デバイスのような、1つ以上のユニバーサル・シリアル・バス(USB)コントローラ142の接続入力デバイスへ接続することができる。
異なるように構成される他のタイプのデータ処理システムも使用されてよいということで、示されているシステム100は、例であって、限定でないことが理解されるだろう。例えば、メモリコントローラ116及びプラットフォームコントローラハブ130のインスタンスは、外部グラフィクスプロセッサ118などの別個の外部グラフィクスプロセッサに組み込まれてもよい。一実施形態において、プラットフォームコントローラハブ130及び/又はメモリコントローラ116は、1つ以上のプロセッサ102の外にあってよい。例えば、システム100は、外付けのメモリコントローラ116及びプラットフォームコントローラハブ130を含むことができ、これらは、プロセッサと通信するシステムチップセット内のメモリコントローラハブ及びペリフェラルコントローラハブとして構成されてよい。
例えば、回路基板(“スレッド”)は、その上にCPU、メモリ、及び他のコンポーネント等のコンポーネントが配置され、温度性能の向上のため設計される。いくつかの例で、プロセッサのような処理コンポーネントはスレッドの上面に位置付けられ、一方、DIMMのようなニアメモリはスレッドの底面に位置付けられる。この設計によってもたらされる強化されたエアフローの結果として、コンポーネントは、典型的なシステムでより高い周波数及び電力レベルで動作することができ、性能は向上する。更に、スレッドは、ラックにおいて電力及びデータ通信ケーブルと盲目的に結合するよう構成され、それによって、直ちに除去され、アップグレードされ、再インストールされ、及び/又は交換されるようそれらの能力を強化する。同様に、プロセッサ、アクセラレータ、メモリ、及びデータ記憶ドライブ等の、スレッドに位置する個々のコンポーネントは、互いの間隔が広くなることで容易にアップグレードされるよう構成される。実例となる実施形態では、コンポーネントは更に、それらの信頼性を証明するようハードウェア証明機構を含む。
データセンタは、Ethernet(登録商標)及びOmni−Pathを含む複数の他のネットワークアーキテクチャをサポートする単一ネットワークアーキテクチャ(“ファブリック”)を利用することができる。スレッドは、光ファイバを介してスイッチへ結合され得る。光ファイバは、典型的なツイストペアケーブル(カテゴリ5、カテゴリ5e、カテゴリ6、等)よりも高いバンド幅及び低いレイテンシを提供する。高バンド幅、低レイテンシの相互接続及びネットワークアーキテクチャにより、データセンタは、使用中に、メモリ、アクセラレータ(例えば、GPU、グラフィクスアクセラレータ、FPGA、ASIC、ニューラルネットワーク及び/又は人工知能アクセラレータ、等)、及び物理的に脱凝集されているデータ記憶ドライブなどの資源をプールし、それらを必要に応じて計算資源(例えば、プロセッサ)に提供して、計算リソースが、プールされた資源に、それらがあたかもローカルであったかのようにアクセスすることを可能にし得る。
電力供給又はソースは、電圧及び/又は電流をシステム100又は本明細書で記載される任意のコンポーネント若しくはシステムへ供給することができる。一例で、電力供給は、壁面のコンセント入力にプラグ接続するAC/DC(交流から直流)アダプタを含む。そのようなAC電力は、再生可能エネルギ(例えば、太陽光)電源であることができる。一例で、電源は、外部AC/DCコンバータのようなDC電源を含む。一例で、電源又は電力供給は、充電場への近接により充電する無線充電ハードウェアを含む。一例で、電源は、内部バッテリ、交流供給、動きに基づいた電力供給、太陽光電源、又は燃料電池電源を含むことができる。
図2A〜2Dは、本明細書で記載される実施形態によって提供されるコンピュータシステム及びグラフィクスプロセッサを表す。本願のいずれかの他の図の要素と同じ参照番号(又は名称)を有している図2A〜2Dの要素は、本明細書中のどこかで記載されているのと同様に動作又は機能することができるが、そのように制限されない。
図2Aは、1つ以上のプロセッサコア202A〜202N、集積メモリコントローラ214、及び集積グラフィクスプロセッサ208を備えるプロセッサ200の実施形態のブロック図である。プロセッサ200は、破線ボックスによって表される追加のコア202Nまでの追加のコアを含むことができる。プロセッサコア202A〜202Nは、1つ以上の内部キャッシュユニット204A〜204Nを含む。いくつかの実施形態において、各プロセッサコアはまた、1つ以上の共有キャッシュユニット206へのアクセスを有する。内部キャッシュユニット204A〜204N及び共有キャッシュユニット206は、プロセッサ200内のキャッシュメモリヒエラルキを表す。キャッシュメモリヒエラルキは、各プロセッサコア内の少なくとも1レベルの命令及びデータキャッシュと、レベル2(L2)、レベル3(L3)、レベル4(L4)、又は他のレベルのキャッシュのような、1以上のレベルの共有ミッドレベルキャッシュとを含んでよく、外部メモリの前の最も高いレベルのキャッシュはLLCと分類される。いくつかの実施形態において、キャッシュコヒーレンシロジックは、様々なキャッシュユニット206及び204A〜204Nの間のコヒーレンシを維持する。
いくつかの実施形態において、プロセッサ200はまた、1つ以上のバスコントローラユニット216の組と、システムエージェントコア210とを含んでよい。1つ以上のバスコントローラユニット216は、1つ以上のPCI又はPCIエクスプレスバスなどのペリフェラルバスの組を管理する。システムエージェントコア210は、様々なプロセッサコンポーネントのための管理機能を提供する。いくつかの実施形態において、システムエージェントコア210は、様々な外部メモリデバイス(図示せず。)へのアクセスを管理するよう1つ以上の集積メモリコントローラ214を含む。
いくつかの実施形態において、プロセッサコア202A〜202Nの1つ以上は、同期マルチスレッディングのためのサポートを含む。そのような実施形態では、システムエージェントコア210は、マルチスレッド処理中にコア202A〜202Nを協調及び動作させるコンポーネントを含む。システムエージェントコア210は、電力制御ユニット(PCU)を更に含んでよい。PCUは、プロセッサコア202A〜202N及びグラフィクスプロセッサ208の電力状態を調整するロジック及びコンポーネントを含む。
いくつかの実施形態において、プロセッサ200は、グラフィクス処理動作を実行するようグラフィクスプロセッサ208を更に含む。いくつかの実施形態において、グラフィクスプロセッサ208は、共有キャッシュユニット206と、1つ以上の集積メモリコントローラ214を含むシステムエージェントコア210との組と結合する。いくつかの実施形態において、システムエージェントコア210はまた、グラフィクスプロセッサ出力を1つ以上の結合されたディスプレイへ駆動するようディスプレイコントローラ211を含む。いくつかの実施形態において、ディスプレイコントローラ211は、少なくとも1つのインターコネクトを介してグラフィクスプロセッサと結合される別個のモジュールであってもよく、あるいは、グラフィクスプロセッサ208内に組み込まれてもよい。
いくつかの実施形態において、プロセッサ200の内部コンポーネントを結合するために、リングに基づくインターコネクトユニット212が使用される。しかし、ポイント・ツー・ポイント・インターコネクト、スイッチド・インターコネクト、又は当該技術でよく知られている技術を含む他の技術のような代替のインターコネクトユニットが使用されてもよい。いくつかの実施形態において、グラフィクスプロセッサ208は、I/Oリンク213を介してリングインターコネクト212と結合する。
例となるI/Oリンク213は、様々なプロセッサコンポーネントとeDRAMモジュールのような高性能埋め込みメモリモジュール218との間の通信を助けるパッケージI/Oインターコネクトを含む多種多様なI/Oインターコネクトのうちの少なくとも1つを表す。いくつかの実施形態において、プロセッサコア202A〜202N及びグラフィクスプロセッサ208の夫々は、共有ラストレベルキャッシュとして埋め込みメモリモジュール218を使用することができる。
いくつかの実施形態において、プロセッサコア202A〜202Nは、同じ命令セットアーキテクチャを実行する同種のコアである。他の実施形態では、プロセッサコア202A〜202Nは、命令セットアーキテクチャ(ISA)に関して異種であり、プロセッサコア202A〜202Nの1つ以上は第1命令セットを実行し、一方、残りのコアの少なくとも1つは第1命令セットのサブセット又は別の命令セットを実行する。一実施形態において、プロセッサコア202A〜202Nは、ミクロアーキテクチャに関して異種であり、相対的により高い電力消費を有している1つ以上のコアは、より低い電力消費を有している1つ以上の電力コアと結合する。一実施形態において、プロセッサコア202A〜202Nは、計算能力に関して異種である。更に、プロセッサ200は、1以上のチップ上で、あるいは、表されているコンポーネントを他のコンポーネントに加えて有しているSoC集積回路として、実装され得る。
図2Bは、本明細書で記載されるいくつかの実施形態に従うグラフィクスプロセッサコア219のハードウェアロジックのブロック図である。本願のいずれかの他の図の要素と同じ参照番号(又は名称)を有している2Bの要素は、本明細書中のどこかで記載されているのと同様に動作又は機能することができるが、そのように制限されない。時々コアスライスとも呼ばれるグラフィクスプロセッサコア219は、モジュラーグラフィクスプロセッサ内の1つ又は複数のグラフィクスコアであることができる。グラフィクスプロセッサコア219は、1つのグラフィクスコアスライスの例であり、本明細書で記載されるグラフィクスプロセッサは、目標電力及び性能エンベロープに基づいて複数のグラフィクスコアスライスを含んでよい。各グラフィクスプロセッサコア219は、汎用の固定機能ロジックのモジュラーブロックを含む、サブスライスとも呼ばれる複数のサブコア221A〜221Fと結合された固定関数ブロック230を含むことができる。
いくつかの実施形態において、固定関数ブロック230は、例えば、より低い性能及び/又はより低い電力のグラフィクスプロセッサ実装で、グラフィクスプロセッサコア219内の全てのサブコアによって共有され得るジオメトリ/固定関数パイプライン231を含む。様々な実施形態で、ジオメトリ/固定関数パイプライン231は、3D固定関数パイプライン(例えば、後述される、図3及び図4で見られる3Dパイプライン312)と、ビデオフロントエンドユニットと、スレッドスポーナ(spawner)及びスレッドディスパッチャと、統合リターンバッファ(unified return buffer)(例えば、後述される図4の統合リターンバッファ418)を管理する統合リターンバッファマネージャとを含む。
一実施形態において、固定関数ブロック230はまた、グラフィクスSoCインターフェース232、グラフィクスマイクロコントローラ233、及びメディアパイプライン234を含む。グラフィクスSoCインターフェース232は、グラフィクスプロセッサコア219とSoC集積回路内の他のプロセッサコアとの間のインターフェースを提供する。グラフィクスマイクロコントローラ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)アレイ222A〜222F、224A〜224F内で様々なグラフィクスパラレルエンジンに対してグラフィクス及び/又は計算ワークロードスケジューリングを実行することができる。このスケジューリングモデルにおいて、グラフィクスプロセッサコア219を含むSoCのCPUコアで実行されるホストソフトウェアは、複数のグラフィックプロセッサドアベルの1つにワークロードを提起することができ、これは、適切なグラフィクスエンジンに対するスケジューリング動作を呼び出す。スケジューリング動作は、次にどのワークロードを実行すべきかを決定することと、ワークロードをコマンドストリーマへ提起することと、エンジンで実行されている既存のワークロードをプリエンプションすることと、ワークロードの進行をモニタすることと、ワークロードがいつ完了するかをホストソフトウェアに通知することとを含む。一実施形態において、グラフィクスマイクロコントローラ233はまた、システム上のオペレーティングシステム及び/又はグラフィクスドライバソフトウェアから独立して低電力状態遷移にわたってグラフィクスプロセッサコア219内のレジスタをセーブ及びリストアする能力をグラフィクスプロセッサコア219にもらしながら、グラフィクスプロセッサコア219のための低電力又はアイドル状態を促進することができる。
グラフィクスプロセッサコア219は、表されているサブコア221A〜221Fよりも多い又は少ない、最大N個までのモジュラーサブコアを有してよい。N個のサブコアの各セットについて、グラフィクスプロセッサコア219はまた、様々なグラフィクス及び計算処理動作をアクセラレーションするよう、共有機能ロジック235と、共有及び/又はキャッシュメモリ236と、ジオメトリ/固定関数パイプライン237と、追加の固定関数ロジック238とを含むことができる。共有機能ロジック235は、グラフィクスプロセッサコア219内の各N個のサブコアによって共有され得る図4の共有機能ロジック(例えば、サンプラ、マス(math)、及び/又はインタースレッド通信ロジック)に関連したロジックユニットを含むことができる。共有及び/又はキャッシュメモリ236は、グラフィクスプロセッサコア219内のN個のサブコア221A〜221Fの組のためのラストレベルキャッシュであることができ、また、複数のサブコアによってアクセス可能である共有メモリとしても機能することができる。ジオメトリ/固定関数パイプライン237は、固定関数ブロック230内のジオメトリ/固定関数パイプライン231の代わりに含まれてよく、同じ又は類似したロジックユニットを含むことができる。
一実施形態において、グラフィクスプロセッサコア219は、グラフィクスプロセッサコア219によって使用される様々な固定関数アクセラレーションロジックを含むことができる追加の固定関数ロジック238を含む。一実施形態において、追加の固定関数ロジック238は、ポジション・オンリー・シェーディング(position only shading)で使用される追加のジオメトリパイプラインを含む。ポジション・オンリー・シェーディングでは、2つのジオメトリパイプラインが存在し、ジオメトリ/固定関数パイプライン237、231内のフル(full)ジオメトリパイプラインと、追加の固定関数ロジック238内に含まれ得る追加のジオメトリパイプラインであるカル(cull)パイプラインとである。一実施形態において、カルパイプラインは、フルジオメトリパイプラインの細分化されたバージョンである。フルパイプライン及びカルパイプラインは、各インスタンスが別個のコンテキストを有している同じアプリケーションの異なるインスタンスを実行することができる。ポジション・オンリー・シェーディングは、破棄された三角形の長いカルランを非表示にできるため、場合によってはシェーディングをより早く完了させることができる。例えば、一実施形態において、追加の固定関数ロジック238内のカルパイプラインロジックは、メインアプリケーションと並行してポジションシェーダを実行することができ、一般にフルパイプラインよりも高速に重要な結果を生成する。これは、カルパイプラインが、フレームバッファへのピクセルのラスタライズ及びレンダリングを実行せずに、頂点の位置属性のみをフェッチしてシェーディングするためである。カルパイプラインは、三角形がカリングされているかどうかに関係なく、全ての三角形についての可視性情報を計算するために、生成された重要な結果を使用することができる。フルパイプライン(この例では、リプレイパイプラインとも呼ばれ得る。)は、最終的にラスタライズフェーズに渡される可視の三角形のみをシェーディングするよう、カリングされた三角形をスキップするために可視性情報を消費することができる。
一実施形態において、追加の固定関数ロジック238はまた、機械学習トレーニング又は推論のための最適化を含む実装のために、固定関数行列乗算ロジックのような機械学習アクセラレーションロジックを含むことができる。
各グラフィクスサブコア221A〜221F内には、グラフィクスパイプライン、メディアパイプライン、又はシェーダパイプラインによる要求に応答してグラフィクス、メディア、及び計算操作を実行するために使用され得る実行資源の組を含む。グラフィクスサブコア221A〜221Fは、複数のEUアレイ222A〜222F、224A〜224Fと、スレッドディスパッチ及びインタースレッド通信(TD/IC)ロジック223A〜223Fと、3D(例えば、テクスチャ)サンプラ225A〜225Fと、メディアサンプラ206A〜206Fと、シェーダプロセッサ227A〜227Fと、共有ローカルメモリ(SLM)228A〜228Fとを含む。EUアレイ222A〜222F、224A〜224Fは夫々、グラフィクス、メディア、又は計算シェーダプログラムを含むグラフィクス、メディア、又は計算操作のサービスにおいて浮動小数点及び整数/固定小数点ロジック演算を実行可能な汎用のグラフィクス処理ユニットである複数の実行ユニットを含む。TD/ICロジック223A〜223Fは、サブコア内の実行ユニットのためのローカルスレッドディスパッチ及びスレッド制御動作を実行し、サブコアの実行ユニットで実行されるスレッド間の通信を助ける。3Dサンプラ225A〜225Fは、テクスチャ又は他の3Dグラフィクスに関連したデータをメモリに読み込むことができる。3Dサンプラは、所与のテクスチャに関連したテクスチャフォーマット及び設定されたサンプル状態に基づいて異なるようにテクスチャデータを読み出すことができる。メディアサンプラ206A〜206Fは、メディアデータに関連したタイプ及びフォーマットに基づいて同様の読み出し動作を実行することができる。一実施形態において、各グラフィクスサブコア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は、テクスチャデータ、頂点データ、ピクセルデータ、光線(ray)データ、バウンディングボリュームデータ、等のようなグラフィクスデータを各マルチコアグループ240A内にローカルで記憶する。1つ以上のテクスチャユニット247はまた、テクスチャマッピング及びサンプリングのようなテクスチャリング動作を実行するために使用され得る。マルチコアグループ240A〜240Nの全て又は一部によって共有されるレベル2(L2)キャッシュ253は、複数の同時のグラフィクススレッドのためのグラフィクスデータ及び/又は命令を記憶する。表されるように、L2キャッシュ253は、複数のマルチコアグループ240A〜240Nにわたって共有されてよい。1つ以上のメモリコントローラ248は、GPU239をメモリ249へ結合する。メモリ249は、システムメモリ(例えば、DRAM)及び/又は専用のグラフィクスメモリ(例えば、GDDR6メモリ)であってよい。
入出力(I/O)回路250は、GPU239を、デジタル信号プロセッサ(DSP)、ネットワークコントローラ、又はユーザ入力デバイス等の1つ以上のI/Oデバイス252へ結合する。オンチップインターコネクトが、I/Oデバイス252をGPU239及びメモリ249へ結合するために使用されてよい。I/O回路250の1つ以上のI/Oメモリ管理ユニット(IOMMU)251は、I/Oデバイス252をシステムメモリ249へ直接結合する。一実施形態において、IOMMU251は、仮想アドレスをシステムメモリ249内の物理アドレスへマッピングするために複数組のページテーブルを管理する。この実施形態では、I/Oデバイス252、CPU246、及びGPU239は、同じ仮想アドレス空間を共有してよい。
一実施において、IOMMU251は、仮想化をサポートする。この場合に、それは、ゲスト/グラフィクス仮想アドレスをゲスト/グラフィクス物理アドレスへマッピングするページテーブルの第1の組と、ゲスト/グラフィクス物理アドレスを(例えば、システムメモリ249内の)システム/ホスト物理アドレスへマッピングするページテーブルの第2の組とを管理してよい。ページテーブルの第1及び第2の組の夫々の基本アドレスは、制御レジスタに記憶され、コンテキストスイッチでスワップアウトされ得る(例えば、それにより、新しいコンテキストは、ページテーブルの関連する組へのアクセスを与えられる。)。図2Cに示されていないが、コア243、244、245及び/又はマルチコアグループ240A〜240Nの夫々は、ゲスト仮想からゲスト物理への変換、ゲスト物理からホスト物理への変換、及びゲスト仮想からホスト物理への変換をキャッシングするトランスレーション・ルックアサイド・バッファ(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は、バウンディングボリュームヒエラルキ(BVH)を用いて光線トラバーサルを実行し、BVHボリューム内のプリミティブと光線との間の交差を識別する光線トラバーサル/交差回路を含む。レイトレーシングコア245はまた、(例えば、Zバッファ又は同様の配置を用いて)デプステスト及びカリングを実行する回路を含んでもよい。一実施において、レイトレーシングコア245は、本明細書で記載される画像ノイズ除去技術とともにトラバーサル及び交差動作実行する。画像ノイズ除去技術の少なくとも一部は、テンソルコア244で実行されてもよい。例えば、一実施形態において、テンソルコア244は、レイトレーシングコア245によって生成されたフレームのノイズ除去を実行するためにディープラーニングニューラルネットワークを実装する。なお、CPU246、グラフィクスコア243、及び/又はレイトレーシングコア245はまた、ノイズ除去及び/又はディープラーニングアルゴリズムの全部又は一部を実装してもよい。
更に、上述されたように、ノイズ除去に対する分散アプローチが用いられてもよく、このとき、GPU239は、ネットワーク又は高速インターコネクトを介して他のコンピュータデバイスへ結合されたコンピュータデバイスにある。この実施形態では、相互接続されたコンピュータデバイスは、種々のタイプの画像フレーム及び/又は種々のグラフィクスアプリケーションのノイズ除去を実行するためにシ、ステム全体が学習する速度を改善するようニューラルネットワーク学習/トレーニングデータを共有する。
一実施形態において、レイトレーシングコア245は、全てのBVHトラバーサル及び光線プリミティブ交差を処理して、グラフィクスコア243が光線ごとに数千の命令により過負荷とならないようにする。一実施形態において、各レイトレーシングコア245は、(例えば、トラバーサル動作のための)バウンディングボックステストを実行する専用回路の第1の組と、光線トライアングル交差テスト(トラバースされた交差光線)を実行する専用回路の第2の組とを含む。よって、一実施形態において、マルチコアグループ240Aは、単に光線プローブを起動することができ、レイトレーシングコア245は、独立して光線トラバーサル及び交差を実行し、ヒットデータ(例えば、ヒット、ノーヒット、マルチヒット、等)をスレッドコンテキストへ返す。レイトレーシングコア245がトラバーサル及び交差動作を実行する間、他のコア243、244は、他のグラフィクス又は計算ワークを実行するよう解放される。
一実施形態において、各レイトレーシングコア245は、BVH試験動作を実行するトラバーサルユニットと、光線プリミティブ交差テストを実行する交差ユニットとを含む。交差ユニットは、「ヒット」、「ノーヒット」、又は「マルチヒット」応答を生成し、応答は、適切なスレッドへ供給される。トラバーサル及び交差動作中、他のコア(例えば、グラフィクスコア243及びテンソルコア244)の実行資源は、他の形のグラフィクスワークを実行するよう解放される。
後述される1つの特定の実施形態では、複合型のラスタライゼーション/レイトレーシングアプローチが使用され、ワークは、グラフィクスコア243とレイトレーシングコア245との間で分配される。
一実施形態において、レイトレーシングコア245(及び/又は他のコア243、244)は、オブジェクトごとのシェーダ及びテクスチャの一意の組の割り当てを可能にするray−generation、closest−hit、any−hit及びmiss shaders並びにDispatchRaysコマンドを含むマイクロソフトのDirectX Ray Tracing(DXR)のようなレイトレーシング命令セットのためのハードウェアサポートを含む。レイトレーシングコア245、グラフィクスコア243、及びテンソルコア244によってサポートされ得る他のレイトレーシングプラットフォームは、Vulkan1.1.85である。なお、本発明の基礎をなす原理は、如何なる特定のレイトレーシングISAにも制限されないことに留意されたい。
一般に、様々なコア245、244、243は、ray−generation、closest−hit、any−hit、光線プリミティブ交差(intersection)、プリミティブごとの階層的なバウンディングボックス構成(per-primitive and hierarchical bounding box construction)、miss、visit、及び例外(exceptions)のための命令/関数を含むレイトレーシング命令セットをサポートし得る。より具体的には、一実施形態は、次の関数を実行するレイトレーシング命令を含む。
ray−generation:ray−generation命令は、夫々のピクセル、サンプル、又は他のユーザ定義のワーク割り当てについて実行され得る。
closest−hit:closest−hit命令は、シーン内のプリミティブとの光線の最も近い交差点に位置するよう実行され得る。
any−hit:any−hit命令は、潜在的に、新しい最も近い交差点を識別するために、シーン内のプリミティブと光線との間の複数の交差を識別する。
intersection:intersection命令は、光線プリミティブ交差テストを実行し、結果を出力する。
per−primitive bounding box construction:この命令は、(例えば、新しいBVH又は他のアクセラレーションデータ構造を構築する場合に)所与のプリミティブ又はプリミティブのグループの周りにバウンディングボックスを形成する。
miss:シーン又はシーンの特殊化された領域内の全てのジオメトリを光線が見逃すことを示す。
visit:光線がトラバースする子ボリュームを示す。
exceptions:様々なタイプの例外ハンドラ(例えば、様々なエラー条件について呼び出される。)を示す。
図2Dは、本明細書で記載される実施形態に従って、グラフィクスプロセッサ及び/又は計算アクセラレータとして構成され得る汎用のグラフィクス処理ユニット(GPGPU
)270のブロック図である。GPGPU270は、1つ以上のシステム及び/又はメモリバスを介してホストプロセッサ(例えば、1つ以上のCPU246)及びメモリ271、272と相互接続することができる。一実施形態において、メモリ271は、1つ以上のCPU246と共有され得るシステムメモリであり、一方、メモリ272は、GPGPU270に専用であるデバイスメモリである。一実施形態において、GPGPU270内のコンポーネントとデバイスメモリ272とは、1つ以上のCPU246がアクセス可能であるメモリアドレスにマッピングされてよい。メモリ271及び272へのアクセスは、メモリコントローラ268を介して容易にされ得る。一実施形態において、メモリコントローラ268は、内部ダイレクトメモリアクセス(DMA)コントローラ269を含むか、あるいは、DMAコントローラによってさもなければ実行される動作を実行するロジックを含むことができる。
GPGPU270は、L2キャッシュ253、L1キャッシュ254、命令キャッシュ255、及び一部がキャッシュメモリとしても分割されて得る共有メモリ256を含む複数のキャッシュメモリを含む。GPGPU270はまた、複数の計算ユニット260A〜260Nを含む。各計算ユニット260A〜260Nは、ベクトルレジスタ261、スカラーレジスタ262、ベクトル論理ユニット263、及びスカラー論理ユニット264を含む。計算ユニット260A〜260Nはまた、ローカル共有メモリ265及びプログラムカウンタ266を含むことができる。計算ユニット260A〜260Nは、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のブロック図である。グラフィクスプロセッサ300は、ディスクリートのグラフィクス処理ユニットであってよく、あるいは、複数のプロセッシングコア、又は制限なしに、メモリデバイス若しくはネットワークインターフェースなどの他の半導体デバイスと一体化されたグラフィクスプロセッサであってもよい。いくつかの実施形態において、グラフィクスプロセッサは、メモリにマッピングされたI/Oインターフェースを介してグラフィクスプロセッサ上のレジスタと、及び、プロセッサメモリ内に置かれたコマンドと通信する。いくつかの実施形態において、グラフィクスプロセッサ300は、ローカルメモリ、1つ以上の内部キャッシュ、1つ以上の共有外部キャッシュ、及び/又はシステムメモリへのインターフェースであることができる。
いくつかの実施形態において、グラフィクスプロセッサ300はまた、表示出力データを表示デバイス318へ駆動するディスプレイコントローラ302を含む。ディスプレイコントローラ302は、ビデオ又はユーザインターフェース要素の複数のレイヤの表示及び合成のための1つ以上のオーバーレイプレーンのためのハードウェアを含む。表示デバイス318は、内部又は外部表示デバイスであることができる。一実施形態において、表示デバイス318は、仮想現実(VR)表示デバイス又は拡張現実(AR)表示デバイスなどのヘッドマウントディスプレイデバイスである。いくつかの実施形態において、グラフィクスプロセッサ300は、メディアを、MPEG−2等のMPEG(Moving Picture Experts Group)フォーマット、H.264/MPEG−4 AVC、H.265/HEVC、AOMedia(Alliance for Open Media) VP8、VP9、及び、SMPTE(Society of Motion Picture & Television Engineers)421M/VC1等のAVC(Advanced Video Coding)、並びに、JPEG及びMJPEG(Motion JPEG)フォーマット等のJPEG(Joint Photographic Experts Group)フォーマットを含むがそれらに制限されない1つ以上のメディア符号化フォーマットへ符号化し、又はそのようなフォーマットから復号し、又はそれらのフォーマットの間でトランスコーディングするようビデオコーデックエンジン306を含む。
いくつかの実施形態において、グラフィクスプロセッサ300は、例えば、ビット境界ブロック転送を含む2次元(2D)ラスタライザ動作を実行するようブロック画像転送(BLIT)エンジン304を含む。なお、一実施形態において、2Dグラフィクス操作は、グラフィクス処理エンジン(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内に図3のグラフィクス処理エンジン310の複数のインスタンスを有しているグラフィクス処理エンジンクラスタ322を含む。各グラフィクスエンジンタイル310A〜310Dは、タイルインターコネクト323A〜323Fの組を介して相互接続され得る。各グラフィクスエンジンタイル310A〜310Dはまた、メモリインターコネクト325A〜325Dを介してメモリモジュール又はメモリデバイス326A〜326Dへ接続され得る。メモリデバイス326A〜326Dは、如何なるグラフィクスメモリ技術も使用することができる。例えば、メモリデバイス326A〜326Dは、グラフィクス・ダブル・データ・レート(GDDR)メモリであってよい。メモリデバイス326A〜326Dは、一実施形態において、それらの各々のグラフィクスエンジンタイル310A〜310Dとともオンダイであることができる高バンド幅メモリ(HMB)モジュールである。一実施形態において、メモリデバイス326A〜326Dは、それらの各々のグラフィクスエンジンタイル310A〜310Dの上にスタックされ得るスタックド・メモリデバイスである。一実施形態において、各グラフィクスエンジンタイル310A〜310D及び関連するメモリ326A〜326Dは、図11B〜11Dで更に詳細に記載されるように、ベースダイ又はベース基板へボンディングされる別々のチップレット上にある。
グラフィクス処理エンジンクラスタ322は、オンチップ又はオンパッケージのファブリックインターコネクト324と接続することができる。ファブリックインターコネクト324は、グラフィクスエンジンタイル310A〜310Dと、ビデオコーデックエンジン306及び1つ以上のコピーエンジン304等のコンポーネントとの間の通信を可能にすることができる。コピーエンジン304は、メモリデバイス326A〜326D及びグラフィクスプロセッサ320の外部にあるメモリ(システムメモリ)から、その中に、及びそれらの間でデータを移動するために使用され得る。ファブリックインターコネクト324はまた、グラフィクスエンジンタイル310A〜310Dを相互接続するために使用され得る。グラフィクスプロセッサ320は、任意に、外部表示デバイス318との接続を可能にするようディスプレイコントローラ302を含んでもよい。グラフィクスプロセッサはまた、グラフィクス又は計算アクセラレータとしても構成されてよい。アクセラレータ構成では、ディスプレイコントローラ302及び表示デバイス318は省略され得る。
グラフィクスプロセッサ320は、ホストインターフェース328を介してホストシステムへ接続することができる。ホストインターフェース328は、グラフィクスプロセッサ320、システムメモリ、及び/又は他のシステムコンポーネントの間の通信を可能にすることができる。ホストインターフェース328は、例えば、PCIエクスプレスバス又は他のタイプのホストシステムインターフェースであることができる。
図3Cは、本明細書で記載される実施形態に従う計算アクセラレータ330を表す。計算アクセラレータ330は、図3Bのグラフィクスプロセッサ320とのアーキテクチャ上の類似点を含むことができ、計算アクセラレーションのために最適化される。計算エンジンクラスタ332は、並列な又はベクトルベースの汎用の計算操作のために最適化される実行ロジックを含む計算エンジンタイル340A〜340Dの組を含むことができる。いくつかの実施形態において、計算エンジンタイル340A〜340Dは、固定関数グラフィクス処理ロジックを含まないが、一実施形態において、計算エンジンタイル340A〜340Dの1つ以上は、メディアアクセラレーションを実行するロジックを含むことができる。計算エンジンタイル340A〜340Dは、メモリインターコネクト325A〜325Dを介してメモリ326A〜326Dへ接続することができる。メモリ326A〜326D及びメモリインターコネクト325A〜325Dは、グラフィクスプロセッサ320で見られたのと同様の技術であってよく、あるいは、異なってもよい。グラフィクス計算エンジンタイル340A〜340Dはまた、タイルインターコネクト323A〜323Fの組を介して相互接続され得、ファブリックインターコネクト324と接続されかつ/あるいはそれによって相互接続されてよい。一実施形態において、計算アクセラレータ330は、デバイスワイドのキャッシュとして構成され得る大規模L3キャッシュ336を含む。計算アクセラレータ330はまた、図3Bのグラフィクスプロセッサ320と同様に、ホストインターフェース328を介してホストプロセッサ及びメモリへ接続することができる。
[グラフィクス処理エンジン]
図4は、いくつかの実施形態に従うグラフィクスプロセッサのグラフィクス処理エンジン410のブロック図である。一実施形態において、グラフィクス処理エンジン(GPE)410は、図3Aに示されたGPE310の変形であり、図3Bのグラフィクスエンジンタイル310A〜310Dを表してもよい。本願のいずれかの他の図の要素と同じ参照番号(又は名称)を有している図4の要素は、本明細書中のどこかで記載されているのと同様に動作又は機能することができるが、そのように制限されない。例えば、図3Aの3Dパイプライン312及びメディアパイプライン316が表されている。メディアパイプライン316は、GPE410のいくつかの実施形態では任意であり、GPE410内に明示的に含まれなくてもよい。例えば、少なくとも1つの実施形態で、別個のメディア及び/又は画像プロセッサがGPE410へ結合される。
いくつかの実施形態において、GPE410は、コマンドストリーマ403と結合するか、又はそれを含む。コマンドストリーマ403は、コマンドストリームを3Dパイプライン312及び/又はメディアパイプライン316へ供給する。いくつかの実施形態において、コマンドストリーマ403は、メモリと結合される。メモリは、システムメモリ又は、内部キャッシュメモリ及び共有キャッシュメモリの1つ以上であることができる。いくつかの実施形態において、コマンドストリーマ403は、メモリからコマンドを受け取り、コマンドを3Dパイプライン312及び/又はメディアパイプライン316へ送る。コマンドは、3Dパイプライン312及びメディアパイプライン316のためのコマンドを記憶しているリングバッファからフェッチされた指令である。一実施形態において、リングバッファは、複数のコマンドのバッチを記憶しているバッチコマンドバッファを更に含むことができる。3Dパイプライン312のためのコマンドはまた、例えば、制限なしに、3Dパイプライン312のための頂点及びジオメトリデータ並びに/又はメディアパイプライン316のための画像データ及びメモリオブジェクト等の、メモリに記憶されているデータへの参照を含むことができる。3Dパイプライン312及びメディアパイプライン316は、各々のパイプライン内のロジックを介して動作を実行することによって、又は1つ以上の実行スレッドをグラフィクスコアアレイ414にディスパッチすることによって、コマンド及びデータを処理する。一実施形態において、グラフィクスコアアレイ414は、グラフィクスコア(例えば、グラフィクスコア415A、グラフィクスコア415B)の1つ以上のブロックを含み、各ブロックは1つ以上のグラフィクスコアを含む。各グラフィクスコアは、固定関数テクスチャ処理並びに/又は機械学習及び人工知能アクセラレーションロジックとともに、グラフィクス及び計算操作を実行するための汎用及びグラフィクス特有の実行ロジックを含むグラフィクス実行資源の組を含む。
様々な実施形態で、3Dパイプライン312は、命令を処理し、実行スレッドをグラフィクスコアアレイ414にディスパッチすることによって、頂点シェーダ、ジオメトリシェーダ、ピクセルシェーダ、フラグメントシェーダ、計算シェーダ、又は他のシェーダプログラム等の1つ以上のシェーダプログラムを処理するよう固定関数及びプログラム可能ロジックを含むことができる。グラフィクスコアアレイ414は、それらのシェーダプログラムを処理する際に使用される実行資源の統合されたブロックを提供する。グラフィクスコアアレイ414のグラフィクスコア415A〜415B内の多目的実行ロジック(例えば、実行ユニット)は、様々な3D APIシェーダ言語のためのサポートを含み、複数のシェーダに関連した複数の同時実行スレッドを実行することができる。
いくつかの実施形態において、グラフィクスコアアレイ414は、ビデオ及び/又は画像処理等のメディア機能を実行する実行ロジックを含む。一実施形態において、実行ユニットは、グラフィクス処理動作に加えて、並列な汎用計算動作を実行するようプログラム可能である汎用ロジックを含む。汎用ロジックは、図1のプロセッサコア107又は図2Aのコア202A〜202N内の汎用ロジックと並列に又はそれとともに処理動作を実行することができる。
グラフィクスコアアレイ414でのスレッド実行によって生成された出力データは、統合リターンバッファ(URB)418のメモリへデータを出力することができる。URB418は、複数のスレッドのデータを記憶することができる。いくつかの実施形態において、URB418は、グラフィクスコアアレイ414で実行される異なるスレッド間でデータを送るために使用されてよい。いくつかの実施形態において、URB418は更に、グラフィクスコアアレイ414でのスレッドと、共有機能ロジック420内の固定関数ロジックとの間の同期のために使用されてよい。
いくつかの実施形態において、グラフィクスコアアレイ414は、アレイがGPE410の目標電力及び性能レベルに基づいて可変数の実行ユニットを夫々有する可変数のグラフィクスコアをアレイが含むように、スケーラブルである。一実施形態において、実行資源は、実行資源が必要に応じて有効又は無効にされ得るように、動的にスケーラブルである。
グラフィクスコアアレイ414は、グラフィクスコアアレイ内のグラフィクスコア間で共有される複数の資源を含む共有機能ロジック420と結合する。共有機能ロジック420内の共有される機能は、特殊化された補助的機能をグラフィクスコアアレイ414に提供するハードウェアロジックユニットである。様々な実施形態で、共有機能ロジック420は、制限なしに、サンプラ421、マス422、及びインタースレッド通信(ITU)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つ以上の接続を含む。いくつかの実施形態において、各実行ユニット(例えば、508A)は、各スレッドについて並行して複数のデータ要素を処理しながら、複数の同時のハードウェアスレッドを実行可能であるスタンドアロンのプログラム可能な汎用計算ユニットである。様々な実施形態で、実行ユニット508A〜508Nのアレイは、任意の数の個別の実行ユニットを含むようスケーラブルである。
いくつかの実施形態において、実行ユニット508A〜508Nは、シェーダプログラムを実行するために主に使用される。シェーダプロセッサ502は、様々なシェーダプログラムを処理し、シェーダプログラムに関連する実行スレッドをスレッドディスパッチャ504によりディスパッチすることができる。一実施形態において、スレッドディスパッチャは、グラフィクス及びメディアパイプラインからのスレッド開始要求をアービトレーションし、要求されたスレッドを実行ユニット508A〜508Nの中の1つ以上の実行ユニットでインスタンス化するロジックを含む。例えば、ジオメトリパイプラインは、処理のためにスレッド実行ロジックへ頂点、テッセレーション、又はジオメトリシェーダをディスパッチすることができる。いくつかの実施形態において、スレッドディスパッチャ504はまた、実行中のシェーダプログラムからのランタイムスレッド生成要求を処理することができる。
いくつかの実施形態において、実行ユニット508A〜508Nは、グラフィクスファブリック(Direct3D及びOpenGL)からのシェーダプログラムが最小限の変換により実行されるように、多くの標準の3Dグラフィクスシェーダ命令のためのネイティブサポートを含む命令セットをサポートする。実行ユニットは、頂点及びジオメトリ処理(例えば、頂点プログラム、ジオメトリプログラム、頂点シェーダ)、ピクセル処理(例えば、ピクセルシェーダ、フラグメントシェーダ)、並びに汎用の処理(例えば、計算及びメディアシェーダ)をサポートする。実行ユニット508A〜508Nの夫々は、マルチイシューなシングルインストラクション・マルチプルデータ(SIMD)実行が可能であり、マルチスレッド動作は、より長い待ち時間のメモリアクセスに直面して効率的な実行環境を可能にする。各実行ユニット内の各ハードウェアスレッドは、専用の高バンド幅レジスタファイル及び関連する独立したスレッド状態を有する。実行は、整数、単精度及び倍精度浮動小数点演算、SIMD分岐機能、論理演算、超越演算、及び他の様々な演算が可能なパイプラインに対してクロックごとにマルチイシューである。メモリ又は共有される機能の1つからのデータを待つ間、実行ユニット508A〜508N内の従属ロジックは、要求されたデータが返されるまで活動を休止するよう待機スレッドを引き起こす。待機スレッドが一時停止している間、ハードウェア資源は、他のスレッドを処理することに投じられてよい。例えば、頂点シェーダ演算に関連した遅延中に、実行ユニットは、ピクセルシェーダ、フラグメントシェーダ、又は別の頂点シェーダを含む他のタイプのシェーダプログラムのための演算を実行することができる。様々な実施形態は、SIMDの使用に対する代案として、又はSIMDの使用に加えて、シングルインストラクション・マルチプルスレッド(SIMT)の使用によって実行を使用するよう適用され得る。SIMDコア又は演算への言及はまた、SIMTも当てはまり、あるいは、SIMTに加えされたSIMDにも当てはまる。
実行ユニット508A〜508Nの中の各実行ユニットは、データ要素のアレイに作用する。データ要素の数は「実行サイズ」、又は命令のためのチャネルの数である。実行チャネルは、データ要素アクセス、マスキング、及び命令内のフロー制御のための実行の論理ユニットである。チャネルの数は、特定のグラフィクスプロセッサのための物理ALU(Arithmetic Logic Units)又はFPU(Floating Point Units)の数に依存しない。いくつかの実施形態において、実行ユニット508A〜508Nは、整数及び浮動小数点データタイプをサポートする。
実行ユニット命令セットは、SIMD命令を含む。様々なデータ要素は、レジスタにおいてパックデータタイプとして記憶され得、実行ユニットは、要素のデータサイズに基づいて様々な要素を処理する。例えば、256ビットワイドのベクトルに作用するとき、ベクトルの256ビットがレジスタに格納され、実行ユニットは、4つの別々の54ビットのパックデータ要素(クワッドワード(QW)サイズデータ要素)、8つの別々の32ビットのパックデータ要素(ダブルワード(DW)サイズデータ要素)、16個の別々の16ビットのパックデータ要素(ワード(W)サイズデータ要素)、又は32個の別々の8ビットのデータ要素(バイト(B)サイズデータ要素)としてベクトルに作用する。なお、異なるベクトル幅及びレジスタサイズが可能である。
一実施形態において、1つ以上の実行ユニットは、融合されたEUに共通するスレッド制御ロジック(507A〜507N)を有する融合実行ユニット509A〜509Nにまとめられ得る。複数のEUは、EUグループに融合され得る。融合EUグループ内の各EUは、別々のSIMDハードウェアスレッドを実行するよう構成され得る。融合EUグループ内のEUの数は、実施形態に従って様々であることができる。その上、様々なSIMD幅がEUごとに実行可能であり、制限なしに、SIMD8、SIMD16、及びSIMD32がある。夫々の融合グラフィクス実行ユニット509A〜509Nは、少なくとも2つの実行ユニットを含む。例えば、融合実行ユニット509A〜509Nは、第1EU508Aと、第2EU508Bと、第1EU508A及び第2EU508Bに共通であるスレッド制御ロジック507Aとを含む。スレッド制御ロジック507Aは、融合グラフィクス実行ユニット509Aで実行されるスレッドを制御し、融合実行ユニット509A〜509N内の各EUが共通命令ポインタレジスタを用いて実行することを可能にする。
1つ以上の内部命令キャッシュ(例えば、506)は、実行ユニットのためのスレッド命令をキャッシングするためにスレッド実行ロジック500に含まれる。いくつかの実施形態において、1つ以上のデータキャッシュ(例えば、502)は、スレッド実行中にスレッドデータをキャッシングするために含まれる。実行ロジック500で実行されるスレッドはまた、明示的に管理されているデータを共有ローカルメモリ511に格納することができる。いくつかの実施形態において、サンプラ510は、3D操作のためのテクスチャサンプリングと、メディア操作のためのメディアサンプリングとを提供するよう含まれる。いくつかの実施形態において、サンプラ510は、サンプリングされたデータを実行ユニットへ供給する前に、サンプリングプロセス中にテクスチャ又はメディアデータを処理するよう、特殊化されたテクスチャ又はメディアサンプリング機能を含む。
実行中に、グラフィクス及びメディアパイプラインは、スレッド生成及びディスパッチロジックを介してスレッド実行ロジック500へスレッド開始要求を送る。幾何学的オブジェクトのグループが処理されピクセルデータにラスタライズされると、シェーダプロセッサ502内のピクセルプロセッサロジック(例えば、ピクセルシェーダロジック、フラグメントシェーダロジック、等)は、出力情報を更に計算し、結果が出力サーフェス(例えば、カラーバッファ、デプスバッファ、ステンシルバッファ、等)に書き込まれるようにするために、呼び出される。いくつかの実施形態において、ピクセルシェーダ又はフラグメントシェーダは、ラスタライズされたオブジェクトにわたって補間されるべきである様々な頂点属性の値を計算する。いくつかの実施形態において、シェーダプロセッサ502内のピクセルプロセッサロジックは次いで、アプリケーション・プログラミング・インターフェース(API)によって供給されたピクセル又はフラグメントシェーダプログラムを実行する。シェーダプログラムを実行するよう、シェーダプロセッサ502は、スレッドディスパッチャ504を介して実行ユニット(例えば、508A)へスレッドをディスパッチする。いくつかの実施形態において、シェーダプロセッサ502は、メモリに記憶されているテクスチャマップ内のテクスチャデータにアクセスするためにサンプラ510内のテクスチャサンプリングロジックを使用する。テクスチャデータ及び入力ジオメトリデータに対する算術演算は、夫々の幾何学的フラグメントについてピクセルカラーデータを計算し、あるいは、更なる処理から1つ以上のピクセルを捨てる。
いくつかの実施形態において、データポート514は、スレッド実行ロジック500が、処理されたデータを、グラフィクスプロセッサ出力パイプラインでの更なる処理のためにメモリへ出力するために、メモリアクセスメカニズムを提供する。いくつかの実施形態において、データポート514は、データポートを介したメモリアクセスのためのデータをキャッシングする1つ以上のキャッシュメモリ(例えば、データキャッシュ512)を含むか、あるいは、それへ結合する。
一実施形態において、実行ロジック500はまた、レイトレーシングアクセラレーション機能を提供することができるレイトレーサ505を含むことができる。レイトレーサ505は、光線生成のための命令/関数を含むレイトレーシング命令セットをサポートすることができる。レイトレーシング命令セットは、図2Cのレイトレーシングコア245によってサポートされるレイトレーシング命令セットと同様であるか、又はそれとは異なることができる。
図5Bは、実施形態に従う実行ユニット508の内部の詳細を例示する。グラフィクス実行ユニット508は、命令フェッチユニット537と、汎用レジスタファイルアレイ(GRF)524と、アーキテクチャレジスタファイルアレイ(ARF)526と、スレッドアービタ522と、送信ユニット530と、分岐ユニット532と、SIMD浮動小数点ユニット(FPU)534の組と、一実施形態では、専用の整数SIMD ALU535の組とを含むことができる。GRF524及びARF526は、グラフィクス実行ユニット508においてアクティブであることができる夫々の同時のハードウェアスレッドに関連した汎用レジスタファイル及びアーキテクチャレジスタファイルの組を含む。一実施形態において、スレッドごとのアーキテクチャ状態はARF526で保持され、一方、スレッド実行中に使用されるデータはGRFに格納される。各スレッドのための命令ポインタを含む各スレッドの実行状態は、ARF526内のスレッド固有レジスタにおいて保持され得る。
一実施形態において、グラフィクス実行ユニット508は、同時マルチスレッディング(SMT)及び細粒度(fine-grained)インターリーブ型(interleaved)マルチスレッディング(IMT)の組み合わせであるアーキテクチャを有する。アーキテクチャは、同時スレッドの目標数及び実行ユニットごとのレジスタの数に基づいて設計時に微調整され得るモジュラー構成を有し、実行ユニット資源は、複数の同時スレッドを実行するために使用されるロジックにわたって分割される。グラフィクス実行ユニット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バイトを記憶することができる。フレキシブルアドレッシングモードは、事実上より広いレジスタを構築するために、又はストライドされた矩形ブロックデータ構造を表すために、レジスタが一緒にアドレッシングされることを可能にすることができる。
一実施形態において、メモリ動作、サンプラ動作、及び他のより長い待ち時間のシステム通信は、メッセージ通過送信ユニット530によって実行される「送信」命令を介してディスパッチされる。一実施形態において、分岐命令は、SIMD分岐及び最終的な収束を促進するために、専用の分岐ユニット532にディスパッチされる。
一実施形態において、グラフィクス実行ユニット508は、浮動小数点演算を実行するよう1つ以上のSIMD浮動小数点ユニット(FPU)534を含む。一実施形態において、FPU534はまた、整数計算もサポートする。一実施形態において、FPU534は、最大M回の32ビット浮動小数点(又は整数)演算をSIMD実行するか、あるいは、最大2M回の16ビット整数又は16ビット浮動小数点演算をSIMD実行することができる。一実施形態において、FPUの少なくとも1つは、高スループットの超越マス関数及び倍精度の54ビット浮動小数点をサポートするよう、拡張されたマス機能を提供する。いくつかの実施形態において、8ビット整数SIMD ALU535の組も存在し、具体的に、機械学習計算に関連した演算を実行するよう最適化され得る。
一実施形態において、グラフィクス実行ユニット508の複数のインスタンスのアレイは、グラフィクスサブコアグルーピング(例えば、サブスライス)においてインスタンス化され得る。スケーラビリティのために、製品設計者は、サブコアグルーピングごとに実行ユニットの厳密な数を選択することができる。一実施形態において、実行ユニット508は、複数の実行チャネルにわたって命令を実行することができる。更なる実施形態では、グラフィクス実行ユニット508で実行される各スレッドは、異なるチャネルで実行される。
図6は、実施形態に従う更なる実行ユニット600を表す。実行ユニット600は、例えば、図3Cの計算エンジンタイル340A〜340Dで使用される計算最適化(compute-optimized)実行ユニットであってよいが、そのようなものとして制限されない。実行ユニット600の変形も、図3Bのグラフィクスエンジンタイル310A〜310Bで使用されてよい。一実施形態において、実行ユニット600は、スレッド制御ユニット601と、スレッド状態ユニット602と、命令フェッチ/プリフェッチユニット603と、命令復号化ユニット604とを含む。実行ユニット600は、実行ユニット内のハードウェアスレッドに割り当てられ得るレジスタを記憶するレジスタファイル606を更に含む。実行ユニット600は、送信ユニット607及び分岐ユニット608を更に含む。一実施形態において、送信ユニット607及び分岐ユニット608は、図5Bのグラフィクス実行ユニット508の送信ユニット530及び分岐ユニット532と同様に動作することができる。
実行ユニット600はまた、多種多様なタイプの機能ユニットを含む計算ユニット610を含む。一実施形態において、計算ユニット610は、ALUのアレイを含むALUユニット611を含む。ALUユニット611は、64ビット、32ビット、及び16ビットの整数及び浮動小数点演算を実行するよう構成され得る。整数及び浮動小数点演算は、同時に実行されてよい。計算ユニット610はまた、シストリックアレイ612及びマスユニット613を含むことができる。シストリックアレイ612は、ベクトル又は他のデータ並列演算をシストリックに実行するために使用され得るデータ処理ユニットの幅W及び深さDのネットワークを含む。一実施形態において、シストリックアレイ612は、行列ドット積演算のような行列演算を実行するよう構成される。一実施形態において、シストリックアレイ612は、8ビット及び4ビットの整数演算とともに、16ビットの浮動小数点演算をサポートする。一実施形態において、シストリックアレイ612は、機械学習演算をアクセラレーションするよう構成され得る。そのような実施形態では、シストリックアレイ612は、bfloat16ビット浮動小数点フォーマットのためのサポートを有して構成され得る。一実施形態において、マスユニット613は、ALUユニット611よりも効率的かつ低電力で数学演算の特定のサブセットを実行するよう含まれ得る。マスユニット613は、他の実施形態によって提供されるグラフィクス処理エンジンの共有機能ロジックで見受けられるマスロジック(例えば、図4の共有機能ロジック420のマスロジック422)の変形を含むことができる。一実施形態において、マスロジック613は、32ビット及び64ビット浮動小数点演算を実行するよう構成され得る。
スレッド制御ユニット601は、実行ユニット内のスレッドの実行を制御するロジックを含む。スレッド制御ユニット601は、実行ユニット600内のスレッドの実行を開始、停止、及びプリエンプションするようスレッドアービトレーションロジックを含むことができる。スレッド状態ユニット602は、実行ユニット600で実行するために割り当てられたスレッドのスレッド状態を記憶するために使用され得る。実行ユニット600内のスレッド状態を記憶することは、それらのスレッドがブロック状態又はアイドル状態になる場合にスレッドの高速なプリエンプションを可能にする。命令フェッチ/プリフェッチユニット603は、より高位の実行ロジックの命令キャッシュ(例えば、図5Aの命令キャッシュ506)から命令をフェッチすることができる。命令フェッチ/プリフェッチユニット603はまた、現在実行中のスレッドの解析に基づいて、命令が命令キャッシュにロードされるためのプリフェッチ命令を発行することができる。命令復号化ユニット604は、計算ユニットによって実行される命令を復号するために使用され得る。一実施形態において、命令復号化ユニット604は、復号命令を、構成要素であるマイクロオペレーションに復号するために、二次的な復号器として使用され得る。
実行ユニット600は、実行ユニット600でのハードウェアスレッド実行によって使用され得るレジスタファイル606を更に含む。レジスタファイル606内のレジスタは、実行ユニット600の計算ユニット610内で複数の同時スレッドを実行するために使用されるロジックにわたって分割され得る。グラフィクス実行ユニット600によって実行され得る論理スレッドの数は、ハードウェアスレッドの数に限られず、複数の論理スレッドが各ハードウェアスレッドに割り当てられ得る。レジスタファイル606のサイズは、サポートされるハードウェアスレッドの数に基づいて実施形態ごとに様々であることができる。一実施形態において、レジスタリネーミングが、レジスタをハードウェアスレッドに動的に割り当てるために使用されてよい。
図7は、いくつかの実施形態に従うグラフィクスプロセッサ命令フォーマット700を表すブロック図である。1つ以上の実施形態で、グラフィクスプロセッサ実行ユニットは、複数のフォーマットで命令を有する命令セットをサポートする。実線ボックスは、一般的に実行ユニット命令に含まれるコンポーネントを表し、一方、破線は、任意であるか、又は命令のサブセットにしか含まれないコンポーネントを含む。いくつかの実施形態において、記載及び例示される命令フォーマット700は、それらが、命令が処理されると命令復号化から得られるマイクロオペレーションとは対照的に、実行ユニットへ供給される点で、マクロ命令である。
いくつかの実施形態において、グラフィクスプロセッサ実行ユニットは、元々、128ビット命令フォーマット710で命令をサポートする。64ビット圧縮命令フォーマット730は、選択された命令、命令オプション、及びオペランドの数に基づいて,いくつかの命令について利用可能である。生来の128ビット命令フォーマット710は、全ての命令オプションへのアクセスを提供する一方、いくつかのオプション及び演算は、64ビットフォーマット730では制限される。64ビットフォーマット730で利用可能な生来の命令は、実施形態によって様々である。いくつかの実施形態において、命令は、インデックスフィールド713内のインデックス値の組を用いて部分的に圧縮される。実行ユニットハードウェアは、インデックス値に基づいてコンパクションテーブルの組を参照し、コンパクションテーブル出力を使用して、128ビット命令フォーマット710における生来の命令を再構成する。他のサイズ及びフォーマットの命令が使用可能である。
フォーマットごとに、命令オペコード712は、実行ユニットが実行すべき動作を定義する。実行ユニットは、各オペランドの複数のデータ要素にわたって並行して各命令を実行する。例えば、加算命令に応答して、実行ユニットは、テクスチャ要素又はピクチャ要素を表す各カラーチャネルにわたって同時加算演算を実行する。デフォルトで、実行ユニットは、オペランドの全てのデータチャネルにわたって各命令を実行する。いくつかの実施形態において、命令制御フィールド714は、チャネル選択(例えば、プリディケーション(predication))及びデータチャネル順序(例えば、スウィズル(swizzle))等の特定の実行オプションに対する制御を有効にする。128ビット命令フォーマット710における命令の場合に、実行サイズ(exec-size)フィールド716は、並列実行されるデータチャネルの数を制限する。いくつかの実施形態において、実行サイズフィールド716は、64ビット圧縮命令フォーマット730での使用に対しては利用可能でない。
いくつかの実行ユニット命令は、2つのソースオペランドSRC0 720、SRC1 722と、1つのあて先718を含む最大3つのオペランドを有する。いくつかの実施形態において、実行ユニットは、二重あて先命令をサポートし、あて先の1つは暗黙である。データ操作命令は第3のソースオペランド(例えば、SRC2 724)を有することができ、命令オペコード712は、ソースオペランドの数を決定する。命令の最後のソースオペランドは、命令と一緒に送られる中間の(ハードコーディングされた)値であることができる。
いくつかの実施形態において、128ビット命令フォーマット710は、例えば、直接レジスタアドレッシングモード又は間接レジスタアドレッシングモードが使用されるかどうかを指定するアクセス/アドレスモードフィールド726を含む。直接レジスタアドレッシングモードが使用される場合に、1つ以上のオペランドのレジスタアドレスは、命令内のビットによって直接与えられる。
いくつかの実施形態において、128ビット命令フォーマット710は、命令のアドレスモード及び/又はアクセスモードを指定するアクセス/アドレスモードフィールド726を含む。一実施形態において、アクセスモードは、命令のデータアクセスアライメントを定義するために使用される。いくつかの実施形態は、16バイトアライメントアクセスモード及び1バイトアライメントアクセスモードを含むアクセスモードをサポートし、アクセスモードのバイトアライメントは、命令オペランドのアクセスアライメントを決定する。例えば、第1モードにある場合に、命令は、ソース及びあて先オペランドのためにバイトアライメントアドレッシングを使用してよく、第2モードにある場合に、命令は、全てのソース及びあて先オペランドのために16バイトアライメントアドレッシングを使用してよい。
一実施形態において、アクセス/アドレスモードフィールド726のアドレスモード部分は、命令が直接又は間接アドレッシングを使用すべきかどうかを決定する。直接レジスタアドレッシングモードが使用される場合に、命令内のビットは、1つ以上のオペランドのレジスタアドレスを直接与える。間接レジスタアドレッシングモードが使用されるばあいに、1つ以上のオペランドのレジスタアドレスは、命令内のアドレスレジスタ値及びアドレス中間フィールドに基づいて計算されてよい。
いくつかの実施形態において、命令は、オペコード復号化740を簡単にするためにオペコード712のビットフィールドに基づいてグループ化される。8ビットオペコードの場合に、ビット4、5及び6は、実行ユニットがオペコードのタイプを決定することを可能にする。示されている厳密なオペコードグルーピングは、一例に過ぎない。いくつかの実施形態において、移動/論理オペコードグループ742は、データ移動命令及び論理命令(例えば、移動(mov)、比較(cmp))を含む。いくつかの実施形態において、移動及び論理グループ742は、5つの最上位ビット(MSB)を共有し、移動(mov)命令は、0000xxxxbの形をとり、論理命令は、0001xxxbの形をとる。フロー制御命令グループ744(例えば、呼び出し、ジャンプ(jmp))は、0010xxxb(例えば、0x20)の形をとる。雑(miscellaneous)命令グループ746は、0011xxxb(例えば、0x30)の形で同期化命令(例えば、待機、送信)を含む命令の混合を含む。並列マス命令グループ748は、0100xxxb(例えば、0x40)の形で構成要素ごとの算術命令(例えば、加算、乗算(mul))を含む。並列マス命令グループ748は、データチャネルにわたって並列に算術演算を実行する。ベクトルマスグループ750は、0101xxxb(例えば、0x50)の形で算術命令(例えば、dp4)を含む。ベクトルマスグループ750は、ベクトルオペランドに対するドット積計算等の計算を実行する。表されているオペコード復号化740は、一実施形態において、実行ユニットのどの部分が復号された命令を実行するために使用されるかを決定するために、使用され得る。例えば、いくつかの命令は、シストリックアレイによって実行されるシストリック命令として設計されてよい。レイトレーシング命令(図示せず。)等の他の命令は、実行ロジックのスライス又はパーティション内のレイトレーシングコア又はレイトレーシングロジックへ送られ得る。
[グラフィクスパイプライン]
図8は、グラフィクスプロセッサ800の他の実施形態のブロック図である。本願のいずれかの他の図の要素と同じ参照番号(又は名称)を有している図8の要素は、本明細書中のどこかで記載されているのと同様に動作又は機能することができるが、そのように制限されない。
いくつかの実施形態において、グラフィクスプロセッサ800は、ジオメトリパイプライン820と、メディアパイプライン830と、ディスプレイエンジン840と、スレッド実行ロジック850と、レンダー出力パイプライン870とを含む。いくつかの実施形態において、グラフィクスプロセッサ800は、1つ以上の汎用のプロセッシングコアを含むマルチコア処理システム内のグラフィクスプロセッサである。グラフィクスプロセッサは、1つ以上の制御レジスタへのレジスタ書き込みによって(図示せず。)、又はリングインターコネクト802を介してグラフィクスプロセッサ800へ発行されたコマンドを介して、制御される。いくつかの実施形態において、リングインターコネクト802は、グラフィクスプロセッサ800を、他のグラフィクスプロセッサ又は汎用プロセッサ等の他の処理コンポーネントへ結合する。リングインターコネクト802からのコマンドは、コマンドストリーマ803によって解釈される。コマンドストリーマ803は、命令をジオメトリパイプライン820又はメディアパイプライン830の個々のコンポーネントへ供給する。
いくつかの実施形態において、コマンドストリーマ803は、メモリから頂点データを読み出し、コマンドストリーマ803によって供給された頂点処理コマンドを実行する頂点フェッチャー805の動作を指示する。いくつかの実施形態において、頂点フェッチャー805は、頂点データを頂点シェーダ807へ供給し、頂点シェーダ807は、拡張点に対して座標空間変換及びライティング動作を実行する。いくつかの実施形態において、頂点フェッチャー805及び頂点シェーダ807は、実行スレッドを実行ユニット852A〜852Bへスレッドディスパッチャ831を介してディスパッチすることによって、頂点処理命令を実行する。
いくつかの実施形態において、実行ユニット852A〜852Bは、グラフィクス及びメディア演算を実行するための命令セットを有する頂点プロセッサのアレイである。いくつかの実施形態において、実行ユニット852A〜852Bは、各アレイに固有であるか又はアレイ間で共有されるアタッチドL1キャッシュ851を有する。キャッシュは、データキャッシュ若しくは命令キャッシュ又は、データ及び命令を異なるパーティションに収容するようパーティショニングされている単一のキャッシュとして構成され得る。
いくつかの実施形態において、ジオメトリパイプライン820は、3Dオブジェクトのハードウェアアクセラレーションされたテッセレーションを実行するようテッセレーションコンポーネントを含む。いくつかの実施形態において、プログラム可能なハル(hull)シェーダ817は、テッセレーション出力のバックエンド評価を提供する。テッセレータ813は、ハルシェーダ811の指示で動作し、ジオメトリパイプライン820へ入力として供給される粗幾何モデルに基づいて詳細な幾何学的オブジェクトの組を生成する特別目的のロジックを含む。いくつかの実施形態において、テッセレーションが使用されない場合には、テッセレーションコンポーネント(例えば、ハルシェーダ811、テッセレータ813、及びドメインシェーダ817)はバイパスされ得る。
いくつかの実施形態において、完全な幾何学的オブジェクトは、実行ユニット852A〜852Bへディスパッチされた1つ以上のスレッドを介してジオメトリシェーダ819によって処理され得るか、あるいは、クリッパ829へ直接進むことができる。いくつかの実施形態において、ジオメトリシェーダは、グラフィクスパイプラインの前の段階で見られるように頂点又は頂点のパッチではなく、幾何学的オブジェクトの全体に作用する。テッセレーションが無効にされる場合に、ジオメトリシェーダ819は、頂点シェーダ807から入力を受け取る。いくつかの実施形態において、ジオメトリシェーダ819は、テッセレーションユニットが無効にされる場合に、ジオメトリテッセレーションを実行するようジオメトリシェーダプログラムによってプログラム可能である。
ラスタライゼーションの前に、クリッパ829は、頂点データを処理する。クリッパ829は、クリッピング及びジオメトリシェーダ機能を有する固定関数クリッパ又はプログラム可能クリッパであってよい。いくつかの実施形態において、レンダー出力パイプライン870内のラスタライザ及びデプステストコンポーネント873は、幾何学的オブジェクトをピクセルごとの表現に変換するようピクセルシェーダをディスパッチする。いくつかの実施形態において、ピクセルシェーダロジックは、スレッド実行ロジック850に含まれる。いくつかの実施形態において、アプリケーションは、ラスタライザ及びデプステストコンポーネント873をバイパスし、ラスタライズされていない頂点データに、ストリーム出力ユニット823を介してアクセスすることができる。
グラフィクスプロセッサ800は、プロセッサの主要なコンポーネントの間のデータ及びメッセージ通過を可能にするインターコネクトバス、インターコネクトファブリック、又はその他のインターコネクトメカニズムを有する。いくつかの実施形態において、実行ユニット825A〜825B及び関連する論理ユニット(例えば、L1キャッシュ851、サンプラ854、テクスチャキャッシュ858、等)は、メモリアクセスを実行しかつプロセッサのレンダー出力パイプラインコンポーネントと通信するために、データポート856を介して相互接続する。いくつかの実施形態において、サンプラ854、キャッシュ851、858、及び実行ユニット852A〜852Bは夫々、別々のメモリアクセスパスを有する。一実施形態において、テクスチャキャッシュ858はまた、サンプラキャッシュとして構成され得る。
いくつかの実施形態において、レンダー出力パイプライン870は、頂点に基づくオブジェクトを関連するピクセルに基づく表現に変換するラスタライザ及びデプステストコンポーネント873を含む。いくつかの実施形態において、ラスタライザロジックは、固定関数三角形及び直線ラスタライゼーションを実行するようウィンドウワ(windower)/マーカユニットを含む。関連するレンダーキャッシュ878及びデプスキャッシュ879も、いくつかの実施形態で利用可能である。ピクセル演算コンポーネント877は、データに対してピクセルに基づく演算を実行するが、いくつかの例では、2D動作(例えば、ブレンディングによるビットブロック画像移動)に関連したピクセル演算が2Dエンジン841によって実行されるか、あるいは、オーバーレイ表示面を用いてディスプレイコントローラ843によって表示時に置換される。いくつかの実施形態において、共有L3キャッシュ875は、全てのグラフィクスコンポーネントに利用可能であり、メインシステムメモリを使用せずにデータの共有を可能にする。
いくつかの実施形態において、グラフィクスプロセッサメディアパイプライン830は、メディアエンジン837及びビデオフロントエンド834を含む。いくつかの実施形態において、ビデオフロントエンド834は、コマンドストリーマ803からパイプラインコマンドを受け取る。いくつかの実施形態において、メディアパイプライン830は、別のコマンドストリーマを含む。いくつかの実施形態において、ビデオフロントエンド834は、コマンドをメディアエンジン837へ送る前に、メディアコマンドを処理する。いくつかの実施形態において、メディアエンジン837は、スレッドディスパッチャ831を介したスレッド実行ロジック850へのディスパッチのためにスレッドを生成するようスレッド生成機能を含む。
いくつかの実施形態において、グラフィクスプロセッサ800は、ディスプレイエンジン840を含む。いくつかの実施形態において、ディスプレイエンジン840は、プロセッサ800の外にあり、リングインターコネクト802又はその他のインターコネクトバス若しくはファブリックを介してグラフィクスプロセッサ800と結合する。いくつかの実施形態において、ディスプレイエンジン840は、2Dエンジン841及びディスプレイコントローラ843を含む。いくつかの実施形態において、ディスプレイエンジン840は、3Dパイプラインから独立して動作可能な特別目的のロジックを含む。いくつかの実施形態において、ディスプレイコントローラ843は、表示デバイス(図示せず。)と結合する。表示デバイスは、ラップトップコンピュータのような、システムに一体化された表示デバイス、又は表示デバイスコネクタを介して取り付けられる外付け表示デバイスであってよい。
いくつかの実施形態において、ジオメトリパイプライン820及びメディアパイプライン830は、複数のグラフィクス及びメディアプログラミングインターフェースに基づいて動作を実行するよう構成可能であり、いずれか1つのアプリケーションプログラミングインターフェース(API)に特有ではない。いくつかの実施形態において、グラフィクスプロセッサのためのドライバソフトウェアは、特定のグラフィクス又はメディアライブラリに特有であるAPIコールを、グラフィクスプロセッサによって処理され得るコマンドに変換する。いくつかの実施形態において、サポートは、全てクロノスグループからであるオープン・グラフィクス・ライブラリ(OpenGL)、オープン・コンピューティング言語(OpenCL)、及び/又はヴァルカン(Vulkan)グラフィクス及びコンピュートAPIのために提供される。いくつかの実施形態において、サポートはまた、マイクロソフト・コーポレーションからのDirect3Dライブラリのためにも提供されてよい。いくつかの実施形態において、それらのライブラリの組み合わせがサポートされてよい。サポートはまた、オープン・ソース・コンピュータ・ビジョン(OpenCV)ライブラリのためにも提供されてよい。互換性がある3Dパイプラインを備えた将来のAPIも、マッピングが将来のAPIのパイプラインからグラフィクスプロセッサのパイプラインへ行われ得る場合にサポートされ得る。
[グラフィクスパイプラインプログラミング]
図9Aは、いくつかの実施形態に従うグラフィクスプロセッサコマンドフォーマット900を表すブロック図である。図9Bは、実施形態に従うグラフィクスプロセッサコマンドシーケンス910を表すブロック図である。図9Aの実線ブロックは、一般的にグラフィクスコマンドに含まれるコンポーネントを表し、一方、破線は、任意であるか、又はグラフィクスコマンドのサブセットにしか含まれないコンポーネントを含む。図9Aの例となるグラフィクスプロセッサコマンドフォーマット900は、クライアント902、コマンド演算コード(オペコード)904、及びコマンドのためのデータ906を識別するデータフィールドを含む。サブオペコード905及びコマンドサイズ908も、いくつかのコマンドに含まれる。
いくつかの実施形態において、クライアント902は、コマンドデータを処理するグラフィクスデバイスのクライアントユニットを指定する。いくつかの実施形態において、グラフィクスプロセッサコマンドパーサは、コマンドの更なる処理を条件付けし、コマンドデータを適切なクライアントユニットへ送るよう、各コマンドのクライアントフィールドを調べる。いくつかの実施形態において、グラフィクスプロセッサクライアントユニットは、メモリンターフェースユニット、レンダーユニット、2Dユニット、3Dユニット、及びメディアユニットを含む。各クライアントユニットは、コマンドを処理する対応する処理パイプラインを有する。コマンドがクライアントユニットによって受け取られると、クライアントユニットは、オペコード904と、存在する場合には、サブオペコード905とを読み出して、実行すべき動作を決定する。クライアントユニットは、フィールド906内の情報を用いてコマンドを実行する。いくつかのコマンドについて、明示的なコマンドサイズ908が、コマンドのサイズを指定すると予期される。いくつかの実施形態において、コマンドパーサは、コマンドオペコードに基づいてコマンドの少なくともいくつかのサイズを自動的に決定する。いくつかの実施形態において、コマンドは、ダブルワードの倍数によりアライメントされる。他のコマンドフォーマットが使用可能である。
図9Bのフロー図は、例となるグラフィクスプロセッサコマンドシーケンス910を表す。いくつかの実施形態において、グラフィクスプロセッサの実施形態を特徴付けるデータ処理システムのソフトウェア又はファームウェアは、グラフィクス操作の組をセットアップし、実行し、終了するために、示されているコマンドシーケンスの変形を使用する。サンプルコマンドシーケンスは、実施形態がそれらの特定のコマンドに又はこのコマンドシーケンスに制限されないということで、単に例として図示及び記載されている。更に、コマンドは、グラフィクスプロセッサが少なくとも部分的に同時にコマンドのシーケンスを処理するように、コマンドシーケンス内のコマンドのバッチとして発行されてよい。
いくつかの実施形態において、グラフィクスプロセッサコマンドシーケンス910は、任意のアクティブなグラフィクスパイプラインに、パイプラインのための目下ペンディング中のコマンドを完了させるために、パイプラインフラッシュコマンド912から開始してよい。いくつかの実施形態において、3Dパイプライン922及びメディアパイプライン924は同時に動作しない。パイプラインフラッシュ(flush)は、アクティブなグラフィクスパイプラインに如何なるペンディング中のコマンドも完了させるよう実行される。パイプラインフラッシュに応答して、グラフィクスプロセッサのためのコマンドパーサは、アクティブな描画エンジンがペンディング中の演算を完了し、関連する読み出しキャッシュが無効にされるまで、コマンド処理を一時停止する。任意に、「ダーティ」(dirty)とマークされているレンダーキャッシュ内の如何なるデータも、メモリにフラッシュされ得る。いくつかの実施形態において、パイプラインフラッシュコマンド912は、パイプライン同期化のために、又はグラフィクスプロセッサを低電力状態に置く前に、使用され得る。
いくつかの実施形態において、コマンドシーケンスがグラフィクスプロセッサにパイプラインを明示的に切り替えるよう要求する場合に、パイプライン選択コマンド913が使用される。いくつかの実施形態において、パイプライン選択コマンド913は、コンテキストが両方のパイプラインに対するコマンドを発行すべきでない限り、パイプラインコマンドを発行する前に、実行コンテキスト内で一度だけ必要とされる。いくつかの実施形態において、パイプラインフラッシュコマンド912は、パイプライン選択コマンド913によるパイプライン切り替えの直前に必要とされる。
いくつかの実施形態において、パイプライン制御コマンド914は、動作のためにグラフィクスパイプラインを構成し、3Dパイプライン922及びメディアパイプライン924をプログラムするために使用される。いくつかの実施形態において、パイプライン制御コマンド914は、アクティブなパイプラインのパイプライン状態を構成する。一実施形態において、パイプライン制御コマンド914は、パイプライン同期化のために、かつ、コマンドのバッチを処理する前にアクティブなパイプライン内の1つ以上のキャッシュメモリからデータをクリアするために、使用される。
いくつかの実施形態において、リターンバッファ状態コマンド916は、各々のパイプラインがデータを書き込むようリターンバッファの組を構成するために使用される。いくつかのパイプライン動作は、動作が処理中に中間データを書き込む1つ以上のリターンバッファの割り当て、選択、又は構成を必要とする。いくつかの実施形態において、グラフィクスプロセッサはまた、出力データを記憶するために、かつ、クロススレッド通信を実行するために、1つ以上のリターンバッファを使用する。いくつかの実施形態において、リターンバッファ状態916は、パイプライン動作の組のために使用すべきリターンバッファのサイズ及び数を選択することを含む。
コマンドシーケンス内の残りのコマンドは、動作のためのアクティブなパイプラインに基づいて異なる。パイプライン決定920において、コマンドシーケンスは、3Dパイプライン922が3Dパイプライン状態930から始まること、又はメディアパイプライン924がメディアパイプライン状態940から始まることに合わせられる。
3Dパイプライン922を構成するためのコマンドは、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)動作のための要素を含み、グラフィクスプロセッサは、グラフィクスプリミティブのレンダリングに明示的には関係がない計算シェーダプログラムを用いてSIMDベクトル演算を実行するために使用される。
いくつかの実施形態において、メディアパイプライン924は、3Dパイプライン922と同様に構成される。メディアパイプライン状態940を構成するためのコマンドの組は、メディアオブジェクトコマンド942の前にコマンドキューにディスパッチ又は配置される。いくつかの実施形態において、メディアパイプライン状態940のためのコマンドは、メディアオブジェクトを処理するために使用されるメディアパイプライン要素を構成するデータを含む。これは、符号化又は複合化フォーマットのような、メディアパイプライン内のビデオ復号化及びビデオ符号化ロジックを構成するデータを含む。いくつかの実施形態において、メディアパイプライン状態940のためのコマンドはまた、状態設定のバッチを含む“間接的な”状態要素への1つ以上のポインタの使用をサポートする。
いくつかの実施形態において、メディアオブジェクトコマンド942は、メディアパイプラインによる処理ためにメディアオブジェクトへのポイントを供給する。メディアオブジェクトは、処理されるべきビデオデータを含むメモリバッファを含む。いくつかの実施形態において、全てのメディアパイプライン状態は、メディアオブジェクトコマンド942を発行する前に有効でなければならない。パイプライン状態が構成され、メディアオブジェクトコマンド942がキューイングされると、メディアパイプライン924は、実行コマンド944又は同等の実行イベント(例えば、レジスタ書き込み)によりトリガされる。メディアパイプライン924からの出力は次いで、3Dパイプライン922又はメディアパイプライン924によってもたらされる動作によって後処理されてよい。いくつかの実施形態において、GPGPU動作は、メディア操作と同様に構成及び実行される。
[グラフィクスソフトウェアアーキテクチャ]
いくつかの実施形態に従うデータ処理システム1000のグラフィクスソフトウェアアーキテクチャの例を表す。いくつかの実施形態において、ソフトウェアアーキテクチャは、3Dグラフィクスアプリケーション1010と、オペレーティングシステム1020と、少なくとも1つのプロセッサ1030とを含む。いくつかの実施形態において、プロセッサ1030は、グラフィクスプロセッサ1032と、1つ以上の汎用プロセッサコア1034とを含む。グラフィクスアプリケーション1010及びオペレーティングシステム1020は夫々、データ処理システムのシステムメモリ1050内のプログラムを実行する。
いくつかの実施形態において、3Dグラフィクスアプリケーション1010は、シェーダ命令1012を含む1つ以上のシェーダプログラムを含む。シェーダ言語命令は、Drect3DのHLSL(High-Level Shader Language)、GLSL(OpenGL Shader Language)、等のような高位シェーダ言語にあってよい。アプリケーションは又は、汎用プロセッサコア1034による実行に適したマシン言語で実行可能命令1014を含む。アプリケーションはまた、頂点データによって定義されるグラフィクスオブジェクト1016を含む。
いくつかの実施形態において、オペレーティングシステム1020は、マイクロソフト・コーポレーションからのMicrosoft(登録商標) Windows(登録商標)オペレーティングシステム、プロプライエタリUNIX様のオペレーティングシステム、又はLinux(登録商標)カーネルの変形を用いるオープンソースUNIX(登録商標)様のオペレーティングシステムである。オペレーティングシステム1020は、Direct3D API、OpenGL API、又はVulkan APIのようなグラフィクスAPI1022をサポートすることができる。Direct3Dが使用中である場合に、オペレーティングシステム1020は、HLSLにおける如何なる命令1012も下位シェーダ言語にコンパイルするためにフロントエンドシェーダコンパイラ1024を使用する。コンパイルは、ジャスト・イン・タイム(JIT)のコンパイルであってよく、あるいは、アプリケーションは、シェーダ・プレコンパイルを実行することができる。いくつかの実施形態において、高位シェーダは、3Dグラフィクスアプリケーション1010のコンパイル中に下位シェーダにコンパイルされる。いくつかの実施形態において、シェーダ命令1012は、Vulkan APIによって使用されるSPIR(Standard Portable Intermediate Representation)の変形のような中間形態で提供される。
いくつかの実施形態において、ユーザモードグラフィクスドライバ1026は、シェーダ命令1012をハードウェア固有表現に変換するようバックエンドシェーダコンパイラ1027を含む。OpenGL APIが使用中である場合に、GLSL高位言語におけるシェーダ命令1012は、コンパイルのためにユーザモードグラフィクスドライバ1026へ送られる。いくつかの実施形態において、ユーザモードグラフィクスドライバ1026は、カーネルモードグラフィクスドライバ1029と通信するためにオペレーティングシステムカーネルモード機能1028を使用する。いくつかの実施形態において、カーネルモードグラフィクスドライバ1029は、コマンド及び命令をディスパッチするためにグラフィクスプロセッサ1032通信する。
[IPコア実装]
少なくとも1つの実施形態の1つ以上の態様は、プロセッサのような集積回路内でロジックを表現及び/又は定義するマシン読み出し可能な媒体に記憶された代表コードによって実施されてよい。例えば、マシン読み出し可能な媒体は、プロセッサ内の様々なロジックを表す命令を含んでよい。マシンによって読み出される場合に、命令は、マシンに、本明細書で記載される技術を実行するようロジックを組み立てさせる。“IPコア”として知られているそのような表現は、集積回路の構造を記述するハードウェアモデルとして有形なマシン読み出し可能な媒体に記憶され得る集積回路のためのロジックの再利用可能なユニットである。ハードウェアモデルは、集積回路を製造する製造機械にハードウェアモデルを搭載する製造設備の様々な顧客へ供給されてよい。集積回路は、本明細書で記載されるいずれか実施形態に関連して記載される動作を回路が実行するように組み立てられ得る。
図11Aは、実施形態に従う動作を実行するよう集積回路を製造するために使用され得るIPコア開発システム1100を表すブロック図である。IPコア開発システム1100は、より大きい設計に組み込まれるか、又は集積回路全体(例えば、SOC集積回路)を構成するために使用される得るモジュール式の再利用可能な設計を生成するために使用されてよい。設計設備1130は、高位プログラミング言語(例えば、C/C++)におけるIPコア設計のソフトウェアシミュレーション1110を生成することができる。ソフトウェアシミュレーション1110は、シミュレーションモデル1112を用いてIPコアの挙動を設計し、試験し、及び検証するために使用され得る。シミュレーションモデル1112は、機能的、挙動的、及び/又はタイミング的シミュレーションを含んでよい。レジスタ転送レベル(RTL)設計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の間のチップ間接属をもたらすようブリッジ基板上に形成され得る。
ロジック1172、1174の2つのユニットと、ブリッジ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は、単に、1つのチップレットから他のチップレットへの直接接続であってもよい。
基板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は、ブリッジインターコネクト1197を介して結合され得る。ブリッジインターコネクト1197は、本明細書で記載される他のブリッジインターコネクトと同様であることができ、例えば、EMIBであってよい。メモリチップレットも、ブリッジインターコネクトを介してロジック又はI/Oチップレットへ接続され得る。I/O及びロジックチップレットは、インターコネクトファブリックを介して通信することができる。ベースチップレットは夫々、ロジック又はI/O又はメモリ/キャッシュの1つのための標準化されたフォーマットで1つ以上のスロットを支持することができる。
一実施形態において、SRAM及び配電回路は、ベースチップレット1196、1198の1つ以上に製造され得る。これらは、ベースチップレットの上にスタックされる交換可能なチップレット1195に対して異なる加工技術を用いて製造され得る。例えば、ベースチップレット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、及びIS/ICコントローラ1240を含むペリフェラル又はバスロジックを含む。更に、集積回路1200は、高精細マルチメディアインターフェース(HDMI(登録商標))コントローラ1250及びモバイルインダストリプロセッサインターフェース(MIPI)表示インターフェース1255のうちの1つ以上へ結合された表示デバイス1245を含むことができる。フラッシュメモリ及びフラッシュメモリコントローラを含むフラッシュメモリサブシステム1260によって、ストレージが提供され得る。メモリインターフェースは、SDRAM又はSRAMメモリデバイスへのアクセスのためにメモリコントローラ1265を介して提供され得る。いくつかの集積回路は、埋め込みセキュリティエンジン1270を更に含む。
図13A〜13Bは、本明細書で記載される実施形態に従って、SoC内で使用されるグライフィスクプロセッサを例示するブロック図である。図13Aは、実施形態に従って、1つ以上のIPコアを用いて製造され得るチップ集積回路上のシステムのグラフィクスプロセッサ1310を例示する。図13Bは、実施形態に従って、1つ以上のIPコアを用いて製造され得るチップ集積回路上のシステムのグラフィクスプロセッサ1340の更なる例を表す。図13Aのグラフィクスプロセッサ1310は、低電力グラフィクスプロセッサコアの一例である。図13Bのグラフィクスプロセッサ1340は、より高性能のグラフィクスプロセッサコアの一例である。グラフィクスプロセッサ1310、1340の夫々は、図12のグラフィクスプロセッサ1210の変形であることができる。
図13Aに示されるように、グラフィクスプロセッサ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において提供されるようなピクセルシェーダプログラムと同様の動作を実行するために使用され得る、OpenGL APIで提供されるようなフラグメントシェーダプログラムを実行するよう最適化される。
グラフィクスプロセッサ1310は、1つ以上のメモリ管理ユニット(MMU)1320A〜1320Bと、キャッシュ1325A〜1325Bと、回路インターコネクト1330A〜1330Bとを更に含む。1つ以上のMMU1320A〜1320Bは、頂点プロセッサ1305及び/又はフラグメントプロセッサ1315A〜1315Nを含むグラフィクスプロセッサ1310のために仮想アドレスから物理アドレスへのマッピングを提供する。グラフィクスプロセッサ1310は、1つ以上のキャッシュ1325A〜1325Bに記憶されている頂点又は画像/テクスチャデータに加えて、メモリに記憶されている頂点又は画像/テクスチャデータを参照してよい。一実施形態において、1つ以上のMMU1320A〜1320Bは、図12の1つ以上のアプリケーションプロセッサ1205、画像プロセッサ1215、及び/又はビデオプロセッサ1220に関連した1つ以上のMMUを含むシステム内の他のMMUと同期し得る。それにより、各プロセッサ1205〜1220は、共有又は統合された仮想メモリシステムに参加することができる。1つ以上の回路インターコネクト1330A〜1330Bは、実施形態に従って、グラフィクスプロセッサ1310が、SoCの内部バスを介して、又は直接接続を介して、SoC内の他のIPコアとインターフェース接続することを可能にする。
図13Bに示されるように、グラフィクスプロセッサ1340は、図13Aのグラフィクスプロセッサ1310の1つ以上のMMU1320A〜1320B、キャッシュ1325A〜1325B、及び回路インターコネクト1330A〜1330Bを含む。グラフィクスプロセッサ1340は、頂点シェーダ、フラグメントシェーダ、及び/又は計算シェーダを含む全タイプのプログラム可能シェーダコードを単一のコア又は単一のタイプのコアが実行することができる統合されたシェーダコアアーキテクチャを提供する1つ以上のシェーダコア1355A〜1355N(例えば、1355A、1355B、1355C、1355D、1355E、1355F、乃至1355N−1、及び1355N)を含む。存在するシェーダコアの厳密な数は、実施形態及び実施の間で様々であることができる。更に、グラフィクスプロセッサ1340は、1つ以上のシェーダコア1355A〜1355Nに実行スレッドをディスパッチするスレッドディスパッチャとして動作するコア間タスクマネージャ1345と、タイルベースのレンダリングのためのタイリング動作をアクセラレーションするタイリングユニット1358とを含む。タイルベースのレンダリングにおいて、シーンのレンダリング動作は、例えば、シーン内の局所空間コヒーレンスを利用するために、又は内部キャッシュの使用を最適化するために、画像空間において細分される。
図14は、コンピュータデバイス1400の一実施形態を表す。コンピュータデバイス1400(例えば、スマートウェアラブルデバイス、仮想現実(VR)デバイス、ヘッドマウントディスプレイ(HDM)、モバイルコンピュータ、インターネット・オブ・シングス(IoT)デバイス、ラップトップコンピュータ、デスクトップコンピュータ、サーバコンピュータ、等)は、図1のデータ処理システム100と同じであってよく、従って、簡潔さ、明りょうさ、及び理解の容易のために、図1〜13を参照して上述された詳細の多くは、以降でこれ以上議論されたり繰り返されたりしない。
コンピュータデバイス1400は、サーバコンピュータのような大規模コンピュータシステムや、デスクトップコンピュータ等のような、任意の数及びタイプの通信デバイスを含んでよく、セットトップボックス(例えば、インターネットに基づくケーブルテレビセットトップボックス、等)、グローバルポジショニングシステム(GPU)に基づくデバイス、等を更に含んでもよい。コンピュータデバイス1400は、スマートフォンを含む携帯電話機、パーソナルデジタルアシスタント(PDA)、タブレットコンピュータ、ラップトップコンピュータ、電子リーダー、スマートテレビ、テレビジョンプラットフォーム、ウェアラブルデバイス(例えば、メガネ、時計、ブレスレット、スマートカード、宝石、洋服小物、等)、メディアプレイヤー、等のような、通信デバイスとして機能するモバイルコンピュータデバイスを含んでもよい。例えば、一実施形態において、コンピュータデバイス1400は、単一チップ上にコンピュータデバイス1400の様々なハードウェア及び/又はソフトウェアコンポーネントを組み込むシステム・オン・ア・チップ(“SoC”又は“SOC”)のような集積回路(“IC”)をホストするコンピュータプラットフォームを用いるモバイルコンピュータデバイスを含んでよい。
表されているように、一実施形態において、コンピュータデバイス1400は、例えば、(制限なしに)GPU1414、グラフィクスドライバ(「GPUドライバ」、「グラフィクスドライバロジック」、「ドライバロジック」、「ユーザモードドライバ(UMD)」、「UMD」、「ユーザモードドライバフレームワーク(UMDF)」、「UMDF」、又は単に「ドライバ」とも呼ばれる。)1416、CPU1412、メモリ1408、ネットワークデバイス、ドライバ、等、並びにタッチスクリーン、タッチパネル、タッチパッド、仮想若しくは標準キーボード、仮想若しくは標準マウス、ポート、コネクタ、等のような入出力(I/O)ソース1404といった任意の数及びタイプのハードウェア及び/又はソフトウェアコンポーネントを含んでよい。
コンピュータデバイス1400は、コンピュータデバイス1900のハードウェア及び/又は物理資源とユーザとの間のインターフェースとして機能するオペレーティングシステム(OS)1406を含んでよい。CPU1412は、1つ以上のプロセッサを含んでよく、一方、GPU1414は、1つ以上のグラフィクスプロセッサを含んでよいことが企図される。
留意されるべきは、「ノード」、「コンピュータノード」、「サーバ」、「サーバデバイス」、「クラウドコンピュータ」、「クラウドサーバ」、「クラウドサーバコンピュータ」、「マシン」、「ホストマシン」、「デバイス」、「コンピュータデバイス」、「コンピュータ」、「コンピュータシステム」等のような用語は、本文書の全体にわたって同義的に使用され得る点である。更に留意されるべきは、「アプリケーション」、「ソフトウェアアプリケーション」、「プログラム」、「ソフトウェアプログラム」、「パッケージ」、「ソフトウェアパッケージ」等のような用語は、本文書の全体にわたって同義的に使用され得る点である。また、「ジョブ」、「入力」、「リクエスト」、「メッセージ」等のような用語は、本文書の全体にわたって同義的に使用され得る。
図1〜13を参照して更に記載されるように、上記のグラフィクスパイプラインのいくつかのプロセスはソフトウェアで実装され、一方、残りはハードウェアで実装されることが企図される。グラフィクスパイプラインは、CPU1412が、CPU1412に含まれるか又はそれと共在し得るGPU1414とともに動作するよう設計されるところのグラフィクスプロセッサ設計で実装されてよい。一実施形態において、GPU1414は、任意の数及びタイプの命令を実行するための新規のソフトウェア及びハードウェアロジックに加えて、グラフィクスレンダリングに関する従来の機能を実行するための任意の数及びタイプの従来のソフトウェア及びハードウェアロジックを用いてよい。
上述されたように、メモリ1408は、オブジェクト情報を有するアプリケーションデータベースを含むランダムアクセスメモリ(RAM)を含んでよい。メモリコントローラハブは、RAM内のデータにアクセスし、それをグラフィクスパイプライン処理のためにGPU1414へ転送してよい。RAMは、ダブルデータレートRAM(DDR RAM)、拡張データ出力RAM(EDO RAM)、等を含んでよい。CPU1412は、グラフィクスパイプライン機能を共有するようハードウェアグラフィクスパイプラインと相互作用する。
処理されたデータは、ハードウェアグラフィクスパイプライン内のバッファに格納され、状態情報がメモリ1408に格納される。結果として得られた画像は、次いで、画像の表示のための表示コンポーネントのようなI/Oソース1404へ転送される。表示デバイスは、情報をユーザに表示するよう、陰極線管(CRT)、薄膜トランジスタ(TFT)、液晶ディスプレイ(LCD)、有機発光ダイオード(OLED)アレイ、等のような様々なタイプであってよい。
メモリ1408は、バッファ(例えば、フレームバッファ)の事前に割り当てられた領域を有し得るが、当業者に当然ながら、実施形態はそのように制限されず、下位グラフィクスパイプラインがアクセス可能な如何なるメモリも使用されてよい。コンピュータデバイス1400は、1つ以上のI/Oソース1404等として、図1で言及されているプラットコントローラハブ(PCH)130を更に含んでよい。
CPU1412は、コンピュータシステムが実装するソフトウェアルーチンは何でも実行するために命令を実行するよう1つ以上のプロセッサを含んでよい。命令はしばしば、データに対して実行された動作の何らかのソートを伴う。データ及び命令は両方とも、システムメモリ1408よりも短いレイテンシ時間を有するよう通常は設計され、例えば、キャッシュは、プロセッサと同じシリコンチップ上に組み込まれ、かつ/あるいは、より高速な静的RAM(SRAM)セルにより構成されてよく、一方、システムメモリ1408は、より遅い動的RAM(DRAM)セルにより構成されてよい。システムメモリ1408とは対照的に、より頻繁に使用される命令及びデータをキャッシュに格納する傾向があることによって、コンピュータデバイス1400の全体の性能効率は改善する。いくつかの実施形態において、GPU1414は、CPU1412の部分(例えば、物理的なCPUパッケージの部分)として存在してよく、この場合に、メモリ1408は、CPU1412及びGPU1414によって供給されるか、あるいは、分離されたままであってよい、ことが企図される。
システムメモリ1408は、コンピュータデバイス1400内の他のコンポーネントに利用可能にされてもよい。例えば、様々なインターフェースからコンピュータデバイス1400(例えば、キーボード及びマウス、プリンタポート、ローカルエリアネットワーク(LAN)ポート、モデムポート等)へ受け取られた、又はコンピュータデバイス1400の内部記憶要素(例えば、ハードディスクドライブ)から読み出された如何なるデータ(例えば、入力グラフィクスデータ)も、ソフトウェアプログラムの実施において1つ以上のプロセッサによって作用される前に、しばしばシステムメモリ1408に一時的にキューイングされる。同様に、ソフトウェアプログラムが、コンピュータデバイス1400から外部エンティティへコンピュータシステムインターフェースの1つを通じて送られるか、あるいは、内部記憶要素に格納されるべきであると決定するデータは、しばしば、送信又は記憶される前に、システムメモリ1408に一時的にキューイングされる。
更に、例えば、PCHは、そのようなデータがシステムメモリ1408とその適切な対応するコンピュータシステムインターフェース(及びコンピュータシステムがそのように設計される場合には内部記憶デバイス)との間で適切に受け渡しされることを確かにするために使用されてよく、それ自体と監視されるI/Oソース/デバイス1404との間に双方向のポイント・ツー・ポイントリンクを有してよい。同様に、MCHは、互いに時間的に近接して発生する可能性のあるCPU1412及びGPU1414、インターフェース、並びに内部記憶要素の間のシステムメモリ1408のアクセスに対する様々な競合する要求を管理するために使用されてよい。
I/Oソース1404は、コンピュータデバイス1400(例えば、ネットワーキングアダプタ)へ及び/又はそれからデータを転送するために、あるいは、コンピュータデバイス1400内の大規模不揮発性ストレージ(例えば、ハードディスクドライブ)のために実装される1つ以上のI/Oデバイスを含んでよい。英数字及び他のキーを含むユーザ入力デバイスは、情報及びコマンド選択をGPU1414へ送るために使用されてよい。他のタイプのユーザ入力デバイスは、マウス、トラックボール、タッチスクリーン、タッチパッド、又はカーソル指示キーのようなカーソルコントロールであり、方向情報及びコマンド選択をGPU1414へ送り、かつ、表示デバイス上でのカーソル移動を制御する。コンピュータデバイス1400のカメラ及びマイクロホンアレイは、ジェスチャを観測し、音声及び映像を記録し、かつ視覚及び音声コマンドを送受信するために、用いられてよい。
コンピュータデバイス1400は、LAN、ワイドエリアネットワーク(WAN)、メトロポリタンエリアネットワーク(MAN)、パーソナルエリアネットワーク(PAN)、Bluetooth(登録商標)、クラウドネットワーク、モバイルネットワーク(例えば、第3世代(3G)、第4世代(4G)等)、イントラネット、インターネット、等のようなネットワークへのアクセスを提供するようネットワークインターフェースを更に含んでよい。ネットワークインターフェースは、例えば、アンテナを備えた無線ネットワークインターフェースを含んでよく、アンテナは、1つ以上のアンテナに相当してよい。ネットワークインターフェースはまた、例えば、ネットワークケーブルを介して遠隔のデバイスと通信するよう有線ネットワークインターフェースを含んでもよく、ネットワークケーブルは、例えば、Ethernet(登録商標)ケーブル、同軸ケーブル、光ファイバ、シリアルケーブル、又はパラレルケーブルであってよい。
ネットワークインターフェースは、例えば、IEEE802.11b及び/又はIEEE802.11g標準に従うことによって、LANへのアクセスを提供してよく、かつ/あるいは、無線ネットワークインターフェースは、例えば、Bluetooth標準に従うことによって、パーソナルエリアネットワークへのアクセスを提供してよい。従前の及び後続のバージョンの標準を含む他の無線ネットワークインターフェース及び/又はプロトコルもサポートされ得る。無線LAN標準による通信に加えて、又はそれに代えて、ネットワークインターフェースは、例えば、時分割多重アクセス(TDMA)プロトコル、GSM(Global Systems for Mobile communications)プロトコル、符号分割多重アクセス(CDMA)プロトコル、及び/又はあらゆる他のタイプの無線通信プロトコルを使用して、無線通信を提供してよい。
ネットワークインターフェースは、モデム、ネットワークインターフェースカード、又は他のよく知られたインターフェースデバイス、例えば、Ethernet、トークンリング、又はLAN若しくはWANをサポートする通信リンクを提供することを目的とした他のタイプの物理有線若しくは無線アタッチメントを結合するために使用されるもののような1つ以上の通信インターフェースを含んでよい。このようにして、コンピュータシステムはまた、多数の周辺機器、クライアント、制御サーフェス、コンソール、又はサーバへ、例えば、イントラネット又はインターネットを含む従来のネットワークインフラストラクチャを介して、結合され得る。
当然ながら、上記の例よりも装備が少ない又は多いシステムが特定の実施のために好まれることがある。従って、コンピュータデバイス1400の構成は、価格制約、性能要件、技術的改善、又は他の環境のような多数の因子に応じて、実施ごとに変化し得る。電子デバイス又はコンピュータデバイス1400の例には、(制限なしに)モバイルデバイス、パーソナルデジタルアシスタント、モバイルコンピュータデバイス、スマートフォン、携帯電話機、ハンドセット、1方向ページャー、双方向ページャー、メッセージングデバイス、コンピュータ、パーソナルコンピュータ(PC)、デスクトップコンピュータ、ラップトップコンピュータ、ノートブックコンピュータ、手持ち式コンピュータ、タブレットコンピュータ、サーバ、サーバアレイ又はサーバファーム、ウェブサーバ、ネットワークサーバ、インターネットサーバ、ワークステーション、ミニコンピュータ、メインフレームコンピュータ、スーパーコンピュータ、ネットワークアプライアンス、ウェブアプライアンス、分散コンピュータシステム、マルチプロセッサシステム、プロセッサベースシステム、コンシューマエレクトロニクス、プログラム可能コンシューマエレクトロニクス、テレビ受像機、デジタルテレビ受像機、セットトップボックス、無線アクセスポイント、基地局、加入者局、モバイル加入者センタ、無線ネットワークコントローラ、ルータ、ハブ、ゲートウェイ、ブリッジ、スイッチ、マシン、又はそれらの組み合わせがある。
実施形態は、ペアレントボードを用いて相互接続された1つ以上のマイクロチップ若しくは集積回路、ハードワイヤードロジック、メモリデバイスによって記憶されてマイクロプロセッサによって実行されるソフトウェア、ファームウェア、特定用途向け集積回路(ASIC)、及び/又はフィールドプログラマブルゲートアレイ(FPGA)、のうちのいずれか又は組み合わせとして実装されてよい。語「ロジック」は、例として、ソフトウェア若しくはハードウェア及び/又はソフトウェアとハードウェアとの組み合わせを含んでよい。
実施形態は、コンピュータプログラム製品として提供されてよく、コンピュータプログラム製品は、例えば、コンピュータ、コンピュータのネットワーク、又は他の電子デバイスのような1つ以上のマシンによって実行される場合に、1つ以上のマシンに本明細書で記載される実施形態に従って動作を実行させ得るマシン実行可能な命令が記憶されている1つ以上のマシン読み出し可能な媒体を含んでよい。マシン読み出し可能な媒体は、制限なしに、フロッピー(登録商標)ディスケット、光ディスク、CD−ROM(Compact Disc-Read Only Memories)、及び光学磁気ディスク、ROM、RAM、EPROM(Erasable Programmable Read Only Memories)、EEPROM(Electrically Erasable Programmable Read Only Memories)、磁気若しくは光学カード、フラッシュメモリ、又はマシン読み出し可能な命令を記憶するのに適した他のタイプの媒体/マシン読み出し可能な媒体を含んでよい。
更に、実施形態は、コンピュータプログラム製品としてダウンロードされてもよく、プログラムは、通信リンク(例えば、モデム及び/又はネットワーク接続)を介して搬送波又は他の伝播媒体によって担持及び/又は変調された1つ以上のデータ信号によって遠隔のコンピュータ(例えば、サーバ)から要求元のコンピュータ(例えば、クライアント)へ転送されてよい。
一実施形態に従って、GPU1414はスライスに分けられ、各スライスは複数のスライスを含む。そのような実施形態において、各スライスは3つのサブスライスを含む。なお、他の実施形態は、異なる数のサブスライスを特徴としてもよい。図15は、サブスライス1500の一実施形態を表す。図15に示されるように、サブスライス1500は、実行ユニット(EU)1510と、共有ローカルメモリ(SLM)1520とを含む。実施形態において、EU1510は、高スループットの浮動小数点及び整数計算のために複数のスレッドにわたってパイプライン化されたマルチイシュー(multiple issue)のSIMD(single instruction, multiple data)ALU(arithmetic logic unit(s))を駆動する同時マルチスレッディング(simultaneous multi-threading)(SMT)及び細粒度(fine-grained)インターリーブ型マルチスレッディング(interleaved multi-threading)(IMT)計算プロセッサの組み合わせである。更なる実施形態では、サブスライス1500は、8つのEUを有する。なお、他の実施形態は、異なる数のEUを特徴としてもよい。
SLM1520は、サブスライス1500においてEU1510からアクセス可能な128KB乃至256KBの高度にバンク化されたデータ構造である。EUへの近接は、SLMトラフィックが他のメモリアクセス(例えば、キャッシュ/メインメモリアクセス)と干渉しないということで、低いレイテンシ及びより高い効率をもたらす。一実施形態において、SLM1520は、EU1510からの高度なアクセスフレキシビリティを可能にするバイト粒度にバンク化される
一実施形態に従って、SLM1520は、SLM1520のメモリ容量の一部(又は全部)が使用されていない場合に、追加のキャッシュウェイを提供するよう実装される。そのような実施形態において、SLM1520は、EU1510のためのキャッシュとして及び共有メモリとして使用されるようパーティショニングされる。よって、SLM1520は、SLM1520の使用が、通常は、様々なアプリケーションで疎であるということで、ワークロードの追加のキャッシュとして実装されてよい。更なる実施形態では、ドライバ1416は、ウォーカ(walker)ごと(又はカーネルごと)の粒度でSLM1520の割り当てサイズを制御する。この実施形態で、共有ローカルメモリ(又はSLM空間)として使用されるべきSLM1520の部分のサイズ(又はSLMサイズ)は、インターフェース記述子データに含まれるコマンド(又は計算ウォーカ(compute walker)コマンド)を介してプログラムされる。
一実施形態において、コマンドは、SLM1520が全キャッシュ又は非キャッシュとして使用されるべきであることを示してよい。他の実施形態では、SLM1520は、SLMサイズが離散ステップ(例えば、0KB、16KB、32KB、64KB、96KB、128KB、256KB)の組として構成され得るように、パーティショニングされる。そのような実施形態において、ドライバ1416は、SLM構成のためのデフォルト値をセットし、デフォルトは、SLM1520の全部がキャッシュとして実装されるようにセットされる。なお、他の実施形態では、デフォルトは、アプリケーション又はワークロード要件に基づいて変更されてもよい。
更なる実施形態では、SLMサイズは、カーネルのSLM空間要件に基づいて及び/又はキャッシュ構成ヒントに基づいてディスパッチ単位でプログラムされてもよい。一実施形態において、アプリケーションは、追加のSLMの方へ(例えば、実行中のワークグループを増やすことで更なる並列性がもたらされることが有利であるカーネルの場合)、又は追加の従来のキャッシュの方へ(例えば、追加のキャッシュが有利である場合)SLM1520を偏らせることをアプリケーションに可能にするキャッシュ構成ヒントを(例えば、デバイス単位で)供給し得る。更なる他の実施形態では、ドライバ1416はヒントを選択してもよい。他の実施形態では、ハードウェアは、SLM利用をモニタし、未使用のSLMブロックを追加のキャッシュウェイに変えることができる。
一実施形態において、各サブスライス(例えば、サブスライス1500)は、サブスライス内のアクティブなスレッドの量(又は数)に基づいて、SLM1520をパーティショニングする。更なる実施形態で、サブスライス1500におけるパーティショニングは、EU1510のスレッドグループへのSLM1520の割り当てを管理するスレッドスポーナロジック(TSL)1560内で制御される。図16は、SLMパーティショニングロジック1620を含むTSL1560の一実施形態を表す。一実施形態に従って、SLMパーティショニングロジック1620は、キャッシュとしてマッピングされるようSLM1520をセット(又はリセット)することによって、SLM1520を起動する。よって、SLM1520は、最初に、キャッシュとして動作するようセットされる。その後に、SLM空間を割り当てるコマンド(例えば、SLM_requestコマンド)を含むスレッドディスパッチが、ドライバ1416からSLMパーティショニングロジック1620で受け取られる。一実施形態において、コマンドは、割り当てられるべきSLM空間のSLMサイズを示すヘッダを含む。
コマンドを受け取ると、SLMパーティショニングロジック1620は、ディスパッチにおいて示された空間をSLMブロックとして取得する。一実施形態において、SLMパーティショニングロジック1620は、スレッドディスパッチを満足するよう割り当てられた既存のSLM空間が存在するかどうかを判定する。割り当てられたSLM空間がディスパッチのために十分でないとの決定があると、SLMパーティショニングロジック1620は、更なるSLM空間を割り当てるよう(例えば、図15のロードストア及びキャッシュ(load store & cache)(LSC)ユニット1550に対して)要求を行う。一実施形態において、ディスパッチは、適切なSLM空間が割り当てられるまでストール(stall)される。SLMが利用可能であると、スレッドディスパッチユニット1610は、取得されたSLMブロックでの動作のためにスレッドグループディスパッチングを実行する。更なる実施形態では、SLMパーティショニングロジック1620は、1KBインクリメントでスレッドグループによるSLMブロックの使用を追跡するようビットベクトル(例えば、in_use[127:0])を保持する。
割り当てられたSLM空間が十分である(例えば、SLMサイズが、現在割り当てられているSLMサイズより小さい)との決定があると、SLM空間として割り当てられているSLM1520の部分は、解放(又は自由化)され得る。この実施形態で、解放されたSLM空間に以前に割り当てられていた全てのスレッドグループは、退去する。ディスパッチキューが、定義されたインターバル(例えば、プログラムされた数の周期)にアイドル状態であると、そのキューに対するSLM_requestはクリアされる。これは、サブスライス1500に関連した所与のキューに対して新しいディスパッチがない場合に起こる。ディスパッチがクリアされると、SLM1520は、キャッシュとして動作するよう再マッピングされる。
一実施形態に従って、SLMパーティショニングロジック1620は、夫々のパイプライン化された状態負荷について値(例えば、Preferred_SLM_Size)を割り当てられ、Preferred_SLM_Sizeは、各サブスライス1500が関連するウォーカを実行するために必要とされる推定された全部のSLM空間の量を示す。一実施形態において、Preferred_SLM_Sizeは、ドライバ1416によって計算される。しかし、他の実施形態では、Preferred_SLM_Sizeは、アプリケーションによってセットされる。
一実施形態において、Preferred_SLM_Size=fn(SLM_size_per_working group,ワーキンググループごとのスレッド数,サブスライス1500内の物理スレッド数)、及びPer_TG_SLM≦Preferred_SLM_Size≦128KB。更なる実施形態では、SLMパーティショニングロジック1620は、次の状態を保持する:
current_SLM_size=現在予約されているSLMサイズ;
new_SLM_size=最後のウォーカの要求に基づく所望のSLMサイズ;
in_use=SLMのどのブロックがディスパッチされたTGによって現在使用されているかを追跡するビットベクトル;及び
Per queue hysteresis_ctr=キューのアイドル“タイムアウト”。
プログラムされた数の周期に所与のキューについてディスパッチがアクティブでない場合に、そのキューに対するPreferred_SLM_Sizeは0にセットされる。一実施形態において、SLM空間は、底辺(0KB)から割り当てられ、連続的である(例えば、スタック状に上方向に成長する)。更なる実施形態では、SLM空間は、現在のスタックの一番上から割り当てを解除される。更なる他の実施形態では、SLM割り当てのステップは、1キャッシュウェイサイズの倍数を有する(例えば、典型的なGPUキャッシュ構成では、1ウェイのサイズ=16KB)。SLM空間をスタックとして割り当てること/割り当てを解除することは、割り当てられたSLM空間内の如何なるスパース性(sparsity)も除く。図17Aは、上記のSLMスタックの一実施形態を表す。
一実施形態に従って、LSC1550は、SLM1520を再パーティショニングするようフラッシュマネージャ1555を含む。この実施形態で、フラッシュマネージャ1555は、SLM割り当て又は解放要求を全てのSLMバンクに報知する。結果として、各バンクは、そのパイプラインをブロックし、続いて、SLM空間を割り当てるよう又は解放するよう全てのセットをウォークスルーする。更なる実施形態では、各セットの下位の4つのウェイがSLM RAMにマッピングされる。その上、ウェイがSLMとして現在マッピングされているかどうかを示すタグ内のビットがある(例えば、マッピングされている場合には1、マッピングされていない場合には0)。ウェイがSLMとしてマッピングされているとの決定があると、そのウェイはキャッシュ動作(ルックアップ、割り当て、フラッシュ、等)のために無視される。
上記の実施形態は、パイプライン化されたウォーカが異なるSLMサイズを要求されるプロセスについて記載する。更なる実施形態では、新しいパイプライン化された状態がロード可能である一方で、前のウォーカからのスレッドが依然としてEU1510で実行されている。これは、new_SLM_sizeをcurrent_SLM_sizeとは異ならせる。この実施形態で、SLMパーティショニングロジック1620は、free()コマンドをLSC1550へ送る前に、割り当てられたSLMの一番上が解放される(例えば、in_useは0である)まで待つ。更なる実施形態で、最新のウォーカからのスレッドグループのための新しいSLM割り当ては、min(new_SLM_size,current_SLM_size)を超えない。図17Bは、新しいSLMサイズが現在の割り当てから低減する場合のSLMスタックの一実施形態を表す。
図18は、共有ローカルメモリをパーティショニングするプロセスの一実施形態を表すフロー図である。処理ブロック1810で、SLM1520は、最初に、キャッシュにマッピングされる。処理ブロック1820で、スレッドディスパッチが受け取られる。上述されたように、ディスパッチは、SLM1520内のSLM空間を割り当てるコマンド(例えば、SLM_requestコマンド)と、割り当てるべきSLMサイズを示すヘッダとを含む。処理ブロック1830で、SLM空間は、ヘッダで示されているサイズに従って割り当てられる。
決定ブロック1840で、SLM空間が十分であるかどうかに関して決定が行われる。そうである場合には、処理ブロック1860で、新しいスレッドグループがディスパッチされる。そうでない場合には、スレッドグループをディスパッチキューにディスパッチする前に、処理ブロック1850で、追加のSLM空間が割り当てられる。決定ブロック1870で、定義されたインターバルにディスパッチキューがアイドル状態であった(スレッドグループはもはやアクティブでない)かどうかに関して決定が行われる。そうである場合には、制御は処理ブロック1810へ返され、SLM1520は、キャッシュへ再マッピングされることによってリセットされる。そうでない場合には、制御は決定ブロック1870へ返され、定義されたインターバルにディスパッチキューがアイドル状態であったかどうかが決定される。図19は、共有ローカルメモリをパーティショニングするための擬似コードの一実施形態を表す。
以下の節及び/又は例は、更なる実施形態又は例に関する。例の中の詳細は、1つ以上の実施形態におけるどこでも使用されてよい。異なる実施形態又は例の様々な特徴は、多種多様な用途に適するよう、いくつかの特徴は含まれ、他は除かれるように、様々に組み合わされてよい。例は、方法、方法の動作を実行する手段、マシンによって実行される場合にマシンに方法の動作を実行させる命令を含む少なくとも1つのマシン読み出し可能な媒体、又は本明細書で記載される実施形態及び例に従ってハイブリッド通信を促進する装置若しくはシステム等の対象を含んでよい。
いくつかの実施形態は、ローカルメモリのパーティショニングを容易にする装置であって、複数の実行スレッドを実行する複数の実行ユニットと、該複数の実行ユニットの間でアクセスを共有するよう結合されたメモリと、キャッシュとして及び共有ローカルメモリ(SLM)として使用されるよう前記メモリをパーティショニングするパーティショニングハードウェアであり、アクティブである前記実行ユニットで実行される前記複数の実行スレッドの数に基づいて前記メモリをパーティショニングする前記パーティショニングハードウェアとを有する装置を含む例1に関する。
例2は、例1の対象を含み、前記パーティショニングハードウェアは、前記キャッシュとして動作するよう前記メモリを起動する。
例3は、例1及び2の対象を含み、前記パーティショニングハードウェアは、前記メモリの部分をSLMブロックとして割り当てるコマンドを含むスレッドディスパッチを受け取る。
例4は、例1〜3の対象を含み、前記コマンドは、前記SLMブロックのサイズを示すヘッダを含む。
例5は、例1〜4の対象を含み、前記パーティショニングハードウェアは、前記SLMブロックを取得する。
例6は、例1〜5の対象を含み、前記SLMブロックに作用するよう前記複数の実行スレッドのグループをディスパッチするディスパッチハードウェアを更に有する。
例7は、例1〜6の対象を含み、前記ディスパッチハードウェアは、前記パーティショニングハードウェアが前記メモリの前記部分を取得するまで、前記スレッドディスパッチをストールする。
例8は、例1〜7の対象を含み、前記パーティショニングハードウェアは、前記複数の実行スレッドによる前記SLMブロックの使用を追跡する。
例9は、例1〜8の対象を含み、前記パーティショニングハードウェアは、前記複数の実行スレッドがもはやアクティブでないとの決定があると、前記キャッシュとして動作するよう前記メモリをリセットする。
いくつかの実施形態は、ローカルメモリのパーティショニングを容易にする方法であって、キャッシュとして及び共有ローカルメモリ(SLM)として使用されるようメモリをパーティショニングすることを有し、該パーティショニングすることは、アクティブである複数の実行ユニットで実行される前記複数の実行スレッドの数に基づいて実行される、方法を含む例10に関する。
例11は、例10の対象を含み、前記メモリをパーティショニングすることは、前記キャッシュとして動作するよう前記メモリを起動することと、前記メモリの部分をSLMブロックとして割り当てるコマンドを含むスレッドディスパッチを受け取ることと、前記SLMブロックを割り当てることと、前記SLMブロックを取得することとを有する。
例12は、例10及び11の対象を含み、前記コマンドは、前記SLMブロックのサイズを示すヘッダを含む。
例13は、例10〜12の対象を含み、前記SLMブロックに作用するよう前記複数の実行スレッドのグループをディスパッチすることを更に有する。
例14は、例10〜13の対象を含み、前記複数の実行スレッドによる前記SLMブロックの使用を追跡することを更に有する。
例15は、例10〜14の対象を含み、前記複数の実行スレッドがもはやアクティブでないとの決定があると、前記キャッシュとして動作するよう前記メモリをリセットすることを更に有する。
いくつかの実施形態は、複数の実行スレッドを実行する複数の実行ユニットと、前記複数の実行ユニットの間でアクセスを共有するよう結合されたメモリと、キャッシュとして及び共有ローカルメモリ(SLM)として使用されるよう前記メモリをパーティショニングするパーティショニングハードウェアであり、アクティブである前記実行ユニットで実行される前記複数の実行スレッドの数に基づいて前記メモリをパーティショニングする前記パーティショニングハードウェアとを含む複数のサブスライスを夫々が有する複数のスライスを有するグラフィクス処理ユニット(GPU)を含む例16に関する。
例17は、例16の対象を含み、前記パーティショニングハードウェアは、前記キャッシュとして動作するよう前記メモリを起動する。
例18は、例16及び17の対象を含み、前記パーティショニングハードウェアは、前記メモリの部分をSLMブロックとして割り当てるコマンドを含むスレッドディスパッチを受け取り、前記コマンドは、前記SLMブロックのサイズを示すヘッダを含む。
例19は、例16〜18の対象を含み、前記SLMブロックに作用するよう前記複数の実行スレッドのグループをディスパッチするディスパッチハードウェアを更に有する。
例20は、例16〜19の対象を含み、前記パーティショニングハードウェアは、前記複数の実行スレッドによる前記SLMブロックの使用を追跡し、前記複数の実行スレッドがもはやアクティブでないとの決定があると、前記キャッシュとして動作するよう前記メモリをリセットする。
本発明は、具体的な実施形態を参照して上述された。なお、当業者であれば、様々な改良及び変更が、添付の特許請求の範囲で示されている発明の広範な精神及び範囲から外れることなしに、それらの実施形態に対して行われてよい、と理解するだろう。上記の記載及び図面は、従って、限定の意味ではなく実例の意味で考えられるべきである。
[著作権表示]
本特許文献の開示の一部は、著作権保護の対象である資料を含む。著作権所有者は、特許商標庁の特許出願又は記録で記載されているように、本文献又は本開示の何者による複製も異議がないが、その他の点では全ての著作権を留保する。
100 処理システム
102,200 プロセッサ
104 キャッシュメモリ
106 レジスタファイル
107,202 プロセッサコア
108,208 グラフィクスプロセッサ
109 命令セット
110 インターフェースバス
111 表示デバイス
112 アクセラレータ
116,214 集積メモリコントローラ
120 メモリデバイス
121 命令
122 データ
130 プラットフォームコントローラハブ
204 内部キャッシュユニット
206 共有キャッシュユニット
219 グラフィクスプロセッサコア
330 計算アクセラレータ
500 実行ロジック
508,600 実行ユニット
612 シストリックアレイ
1400 コンピュータデバイス
1406 オペレーティングシステム(OS)
1408 メモリ
1412 中央演算処理装置(CPU)
1414 グラフィクス処理ユニット(GPU)
1416 グラフィクスドライバ
1500 サブスライス
1510 実行ユニット
1520 共有ローカルメモリ(SLM)
1560 スレッドスポーナロジック(TSL)
1610 スレッドディスパッチユニット
1620 SLMパーティショニングロジック

Claims (20)

  1. ローカルメモリのパーティショニングを容易にする装置であって、
    複数の実行スレッドを実行する複数の実行ユニットと、
    前記複数の実行ユニットの間でアクセスを共有するよう結合されたメモリと、
    キャッシュとして及び共有ローカルメモリ(SLM)として使用されるよう前記メモリをパーティショニングするパーティショニングハードウェアであり、アクティブである前記実行ユニットで実行される前記複数の実行スレッドの数に基づいて前記メモリをパーティショニングする前記パーティショニングハードウェアと
    を有する装置。
  2. 前記パーティショニングハードウェアは、前記キャッシュとして動作するよう前記メモリを起動する、
    請求項1に記載の装置。
  3. 前記パーティショニングハードウェアは、前記メモリの部分をSLMブロックとして割り当てるコマンドを含むスレッドディスパッチを受け取る、
    請求項1又は2に記載の装置。
  4. 前記コマンドは、前記SLMブロックのサイズを示すヘッダを含む、
    請求項3に記載の装置。
  5. 前記パーティショニングハードウェアは、前記SLMブロックを取得する、
    請求項3又は4に記載の装置。
  6. 前記SLMブロックに作用するよう前記複数の実行スレッドのグループをディスパッチするディスパッチハードウェアを更に有する、
    請求項3乃至5のうちいずれか一項に記載の装置。
  7. 前記ディスパッチハードウェアは、前記パーティショニングハードウェアが前記メモリの前記部分を取得するまで、前記スレッドディスパッチをストールする、
    請求項6に記載の装置。
  8. 前記パーティショニングハードウェアは、前記複数の実行スレッドによる前記SLMブロックの使用を追跡する、
    請求項3乃至7のうちいずれか一項に記載の装置。
  9. 前記パーティショニングハードウェアは、前記複数の実行スレッドがもはやアクティブでないとの決定があると、前記キャッシュとして動作するよう前記メモリをリセットする、
    請求項1乃至8のうちいずれか一項に記載の装置。
  10. ローカルメモリのパーティショニングを容易にする方法であって、
    キャッシュとして及び共有ローカルメモリ(SLM)として使用されるようメモリをパーティショニングすることを有し、
    前記パーティショニングすることは、アクティブである複数の実行ユニットで実行される前記複数の実行スレッドの数に基づいて実行される、
    方法。
  11. 前記メモリをパーティショニングすることは、
    前記キャッシュとして動作するよう前記メモリを起動することと、
    前記メモリの部分をSLMブロックとして割り当てるコマンドを含むスレッドディスパッチを受け取ることと、
    前記SLMブロックを割り当てることと、
    前記SLMブロックを取得することと
    を有する、
    請求項10に記載の方法。
  12. 前記コマンドは、前記SLMブロックのサイズを示すヘッダを含む、
    請求項11に記載の方法。
  13. 前記SLMブロックに作用するよう前記複数の実行スレッドのグループをディスパッチすることを更に有する、
    請求項11又は12に記載の方法。
  14. 前記複数の実行スレッドによる前記SLMブロックの使用を追跡することを更に有する、
    請求項11乃至13のうちいずれか一項に記載の方法。
  15. 前記複数の実行スレッドがもはやアクティブでないとの決定があると、前記キャッシュとして動作するよう前記メモリをリセットすることを更に有する、
    請求項10乃至14のうちいずれか一項に記載の方法。
  16. 複数の実行スレッドを実行する複数の実行ユニットと、
    前記複数の実行ユニットの間でアクセスを共有するよう結合されたメモリと、
    キャッシュとして及び共有ローカルメモリ(SLM)として使用されるよう前記メモリをパーティショニングするパーティショニングハードウェアであり、アクティブである前記実行ユニットで実行される前記複数の実行スレッドの数に基づいて前記メモリをパーティショニングする前記パーティショニングハードウェアと
    を含む複数のサブスライスを夫々が有する複数のスライスを有するグラフィクス処理ユニット(GPU)。
  17. 前記パーティショニングハードウェアは、前記キャッシュとして動作するよう前記メモリを起動する、
    請求項16に記載のGPU。
  18. 前記パーティショニングハードウェアは、前記メモリの部分をSLMブロックとして割り当てるコマンドを含むスレッドディスパッチを受け取り、前記コマンドは、前記SLMブロックのサイズを示すヘッダを含む、
    請求項16又は17に記載のGPU。
  19. 前記SLMブロックに作用するよう前記複数の実行スレッドのグループをディスパッチするディスパッチハードウェアを更に有する、
    請求項18に記載のGPU。
  20. 前記パーティショニングハードウェアは、前記複数の実行スレッドによる前記SLMブロックの使用を追跡し、前記複数の実行スレッドがもはやアクティブでないとの決定があると、前記キャッシュとして動作するよう前記メモリをリセットする、
    請求項18又は19に記載のGPU。
JP2020156374A 2019-12-23 2020-09-17 共有ローカルメモリをパーティショニングするメカニズム Pending JP2021099786A (ja)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US16/724,813 US20210191868A1 (en) 2019-12-23 2019-12-23 Mechanism to partition a shared local memory
US16/724,813 2019-12-23

Publications (1)

Publication Number Publication Date
JP2021099786A true JP2021099786A (ja) 2021-07-01

Family

ID=76438469

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2020156374A Pending JP2021099786A (ja) 2019-12-23 2020-09-17 共有ローカルメモリをパーティショニングするメカニズム

Country Status (6)

Country Link
US (1) US20210191868A1 (ja)
JP (1) JP2021099786A (ja)
KR (1) KR20210081230A (ja)
CN (1) CN113094298A (ja)
BR (1) BR102020019646A2 (ja)
DE (1) DE102020130880A1 (ja)

Families Citing this family (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20220170664A (ko) * 2021-06-23 2022-12-30 에스케이하이닉스 주식회사 호스트 장치, 저장 장치 및 그 동작 방법
CN114035847B (zh) * 2021-11-08 2023-08-29 海飞科(南京)信息技术有限公司 用于并行执行核心程序的方法和装置
KR20230075914A (ko) * 2021-11-23 2023-05-31 삼성전자주식회사 프로세싱 장치 및 이의 동작 방법과 전자 장치
US20230359496A1 (en) * 2022-01-31 2023-11-09 Intel Corporation Stack access throttling for synchronous ray tracing

Family Cites Families (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10936219B2 (en) * 2019-04-26 2021-03-02 Dell Products L.P. Controller-based inter-device notational data movement system

Also Published As

Publication number Publication date
DE102020130880A1 (de) 2021-08-05
CN113094298A (zh) 2021-07-09
KR20210081230A (ko) 2021-07-01
BR102020019646A2 (pt) 2021-07-06
US20210191868A1 (en) 2021-06-24

Similar Documents

Publication Publication Date Title
US11721059B2 (en) Apparatus and method for cross-instance front-to-back traversal for ray tracing heavily-instanced scenes
US10970808B2 (en) Shared local memory read merge and multicast return
US11204801B2 (en) Method and apparatus for scheduling thread order to improve cache efficiency
US11151683B2 (en) Use of inner coverage information by a conservative rasterization pipeline to enable EarlyZ for conservative rasterization
US10802967B1 (en) Partial write management in a multi-tiled compute engine
JP2021099786A (ja) 共有ローカルメモリをパーティショニングするメカニズム
EP4202643A1 (en) Kernel source adaptation for execution on a graphics processing unit
US20230367740A1 (en) Computing efficient cross channel operations in parallel computing machines using systolic arrays
EP4009168B1 (en) Efficient memory space sharing of resources for cloud rendering
JP2021082260A (ja) 並列解凍メカニズム
EP4187370A1 (en) Run-time profile-guided execution of workloads
US20230051227A1 (en) Multi-tile graphics processing unit
US20220309605A1 (en) Tessellation redistribution for reducing latencies in processors
EP3926479A1 (en) Dynamic cache control mechanism
US11182337B1 (en) Computing efficient cross channel operations in parallel computing machines using systolic arrays
EP3907606A1 (en) Compaction of diverged lanes for efficient use of alus
EP4177842A1 (en) 3d graphics driver to split frames into multiple command buffer submissions based on analysis of previous frames
EP4181073A2 (en) Native sampler feedback technology
EP4020222A1 (en) Range based flushing mechanism
US20230205704A1 (en) Distributed compression/decompression system
US20210349717A1 (en) Compaction of diverged lanes for efficient use of alus
US20210407194A1 (en) Tile sequencing mechanism
CN117561542A (zh) 用于通用可消耗压缩的统一无状态压缩系统
CN113129201A (zh) 用于图形处理命令的压缩的方法和装置
CN116341674A (zh) 用于ai和机器学习加速的二进制扩展

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20230913