JP2021077343A - 画像のノイズ除去のための、適応型変形可能カーネル予測ネットワーク - Google Patents

画像のノイズ除去のための、適応型変形可能カーネル予測ネットワーク Download PDF

Info

Publication number
JP2021077343A
JP2021077343A JP2020150178A JP2020150178A JP2021077343A JP 2021077343 A JP2021077343 A JP 2021077343A JP 2020150178 A JP2020150178 A JP 2020150178A JP 2020150178 A JP2020150178 A JP 2020150178A JP 2021077343 A JP2021077343 A JP 2021077343A
Authority
JP
Japan
Prior art keywords
graphics
pixel
memory
processor
processing
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
JP2020150178A
Other languages
English (en)
Inventor
ヤオ、アンバン
Anbang Yao
ル、ミン
Ming Lu
ワン、イカイ
Yikai Wang
チェン、シャオミン
Xiaoming Chen
ホァン、ジュンジエ
Junjie Huang
エルブイ、タオ
Tao Lv
ルオ、ユアンケ
Yuanke Luo
ヤン、イー
Yi Young
チェン、フェン
Feng Chen
ワン、ジミン
Zhiming Wang
ゼン、ジキアオ
Zhiqiao Zheng
ワン、シャンドン
Shandong Wang
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 JP2021077343A publication Critical patent/JP2021077343A/ja
Pending legal-status Critical Current

Links

Images

Classifications

    • 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
    • G06T5/00Image enhancement or restoration
    • G06T5/70Denoising; Smoothing
    • 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/3802Instruction prefetching
    • 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/3802Instruction prefetching
    • G06F9/3804Instruction prefetching for branches, e.g. hedging, branch folding
    • 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/5027Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/04Architecture, e.g. interconnection topology
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/04Architecture, e.g. interconnection topology
    • G06N3/044Recurrent networks, e.g. Hopfield networks
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/04Architecture, e.g. interconnection topology
    • G06N3/045Combinations of networks
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/06Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons
    • G06N3/063Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons using electronic means
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/08Learning methods
    • G06N3/082Learning methods modifying the architecture, e.g. adding, deleting or silencing nodes or connections
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T3/00Geometric image transformations in the plane of the image
    • G06T3/40Scaling of whole images or parts thereof, e.g. expanding or contracting
    • G06T3/4046Scaling of whole images or parts thereof, e.g. expanding or contracting using neural networks
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T5/00Image enhancement or restoration
    • G06T5/60Image enhancement or restoration using machine learning, e.g. neural networks
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/08Learning methods
    • G06N3/084Backpropagation, e.g. using gradient descent
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T2207/00Indexing scheme for image analysis or image enhancement
    • G06T2207/20Special algorithmic details
    • G06T2207/20024Filtering details
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T2207/00Indexing scheme for image analysis or image enhancement
    • G06T2207/20Special algorithmic details
    • G06T2207/20081Training; Learning
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T2207/00Indexing scheme for image analysis or image enhancement
    • G06T2207/20Special algorithmic details
    • G06T2207/20084Artificial neural networks [ANN]

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Software Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • Artificial Intelligence (AREA)
  • Evolutionary Computation (AREA)
  • Health & Medical Sciences (AREA)
  • Life Sciences & Earth Sciences (AREA)
  • Biomedical Technology (AREA)
  • Biophysics (AREA)
  • General Health & Medical Sciences (AREA)
  • Computing Systems (AREA)
  • Molecular Biology (AREA)
  • Mathematical Physics (AREA)
  • Data Mining & Analysis (AREA)
  • Computational Linguistics (AREA)
  • Neurology (AREA)
  • Image Processing (AREA)
  • Image Generation (AREA)
  • Facsimile Image Signal Circuits (AREA)

Abstract

【課題】より低い電算処理コストと良好な画質を実現するように、カーネル予測ネットワークによる画像のノイズ除去における画素のオフセットを適応的に決定する。
【解決手段】畳み込みニューラルネットワークによって画像をノイズ除去する方法であって、複数の画素を含む画像の複数の画素のそれぞれに関して、画素に関する複数のカーネル値を有する畳み込みカーネルを生成する段階と、複数のカーネル値にそれぞれ対応する画素に関する、それぞれが画素の画素位置からの逸脱を示す複数のオフセットを生成する段階と、画素の画素位置および複数のオフセットに基づいて、複数の逸脱した画素位置を決定する段階と、複数の逸脱した画素位置の畳み込みカーネルおよび画素値によって画素をフィルタリングして、ノイズ除去された画素を取得する段階と、を備える。
【選択図】図29

Description

本実施形態は、一般的に、データ処理に関し、より具体的には、汎用グラフィックス処理ユニットによるデータ処理に関する。
現在、並列グラフィックスデータ処理は、例えば、線形補間、テセレーション、ラスタライゼーション、テクスチャマッピング、ディープテスティングなどの、グラフィックスデータ上で特定の動作を実行するように開発されたシステムおよび方法を含む。これまで、グラフィックスプロセッサは、グラフィックスデータを処理するための固定機能計算ユニットを用いてきたが、しかしながら、より最近には、グラフィックスプロセッサの一部がプログラム可能とされ、そのようなプロセッサは、頂点および断片データの処理のために、より広い種類の操作をサポートすることを可能とする。
さらに性能を高めるように、グラフィックスプロセッサは典型的には、グラフィックスパイプラインの異なる部分にわたって可能な限り多くのグラフィックスデータを並列に処理しようと試みる、パイプライニングなどの処理技術を実装する。単一の命令で複数のスレッド(SIMT)アーキテクチャによるパラレルグラフィックスプロセッサは、グラフィックスパイプラインにおける並行処理量を最大化するように設計される。SIMTアーキテクチャにおいて、パラレルスレッドの群は、処理の効率性を高めるように、可能な限り頻繁に、プログラム命令を一緒に同期的に実行しようと試みる。SIMTアーキテクチャに関するソフトウェアおよびハードウェアの一般的な概要は、Shane Cook,CUDAプログラミング、第3章、ページ37−51(2013)に見ることができる。
これにより、本実施形態の上の記載の特徴が詳細に、上に簡潔に要約された実施形態のより具体的な説明において、理解され得る方式が、実施形態を参照することにより示され得、それらのうちいくつかは添付図面において図示される。しかしながら、添付図面は、典型的な実施形態のみを示し、したがって、その範囲を限定すると考慮されるべきではないことが、留意されるべきである。
本明細書に説明された実施形態の1または複数の態様を実装するように構成された、コンピュータシステムを示すブロック図である。
実施形態による、並列プロセッサコンポーネントを示す。 実施形態による、並列プロセッサコンポーネントを示す。 実施形態による、並列プロセッサコンポーネントを示す。 実施形態による、並列プロセッサコンポーネントを示す。
実施形態による、グラフィックスマルチプロセッサおよびマルチプロセッサベースのGPUのブロック図である。 実施形態による、グラフィックスマルチプロセッサおよびマルチプロセッサベースのGPUのブロック図である。 実施形態による、グラフィックスマルチプロセッサおよびマルチプロセッサベースのGPUのブロック図である。
複数のGPUが複数のマルチコアプロセッサに通信可能に結合される、例示的なアーキテクチャを示す。 複数のGPUが複数のマルチコアプロセッサに通信可能に結合される、例示的なアーキテクチャを示す。 複数のGPUが複数のマルチコアプロセッサに通信可能に結合される、例示的なアーキテクチャを示す。 複数のGPUが複数のマルチコアプロセッサに通信可能に結合される、例示的なアーキテクチャを示す。 複数のGPUが複数のマルチコアプロセッサに通信可能に結合される、例示的なアーキテクチャを示す。 複数のGPUが複数のマルチコアプロセッサに通信可能に結合される、例示的なアーキテクチャを示す。
実施形態による、グラフィックス処理パイプラインを示す。
実施形態による、機械学習ソフトウェアスタックを示す。
実施形態による、汎用グラフィックス処理ユニットを示す。
実施形態による、マルチGPUコンピューティングシステムを示す。
例示的なディープニューラルネットワークの層を示す。 例示的なディープニューラルネットワークの層を示す。
例示的な再帰型ニューラルネットワークを示す。
ディープニューラルネットワークの訓練および展開を示す。
分散型学習を示すブロック図である。
訓練されたモデルを用いて推論を実行するために適した、例示的な推論システムオンチップ(SoC)を示す。
実施形態による、処理システムのブロック図である。
本明細書で説明される実施形態によって提供される、コンピューティングシステムおよびグラフィックスプロセッサを示す。 本明細書で説明される実施形態によって提供される、コンピューティングシステムおよびグラフィックスプロセッサを示す。 本明細書で説明される実施形態によって提供される、コンピューティングシステムおよびグラフィックスプロセッサを示す。
本明細書で説明される実施形態によって提供される、追加のグラフィックスプロセッサおよび計算アクセラレータアーキテクチャのブロック図を示す。 本明細書で説明される実施形態によって提供される、追加のグラフィックスプロセッサおよび計算アクセラレータアーキテクチャのブロック図を示す。 本明細書で説明される実施形態によって提供される、追加のグラフィックスプロセッサおよび計算アクセラレータアーキテクチャのブロック図を示す。
いくつかの実施形態によるグラフィックスプロセッサのグラフィックス処理エンジンのブロック図である。
本明細書で説明された実施形態によるグラフィックスプロセッサコアにおいて採用される、処理要素のアレイを含むスレッド実行ロジックを示す。 本明細書で説明された実施形態によるグラフィックスプロセッサコアにおいて採用される、処理要素のアレイを含むスレッド実行ロジックを示す。
実施形態による、追加の実行ユニットを示す。
いくつかの実施形態による、グラフィックスプロセッサ指示フォーマットを示すブロック図である。
別の実施形態による、グラフィックスプロセッサのブロック図である。
いくつかの実施形態による、グラフィックスプロセッサコマンドフォーマットおよびコマンドシーケンスを示す。 いくつかの実施形態による、グラフィックスプロセッサコマンドフォーマットおよびコマンドシーケンスを示す。
いくつかの実施形態による、データ処理システムのための例示的なグラフィックスソフトウェアアーキテクチャを示す。
実施形態による、IPコア開発システムを示すブロック図である。
本明細書に説明されたいくつかの実施形態による、集積回路パッケージアセンブリの垂直断面図を示す。
基板に接続されるハードウェアロジックチップレット(例えば、ベースダイ)の複数のユニットを含むパッケージアセンブリを示す。
実施形態による、交換可能なチップレットを含むパッケージアセンブリを示す。
実施形態による、チップ集積回路上の例示的なシステムを示すブロック図である。
本明細書に説明された実施形態による、SoC内での使用のための例示的なグラフィックスプロセッサを示すブロック図である。 本明細書に説明された実施形態による、SoC内での使用のための例示的なグラフィックスプロセッサを示すブロック図である。
従来のカーネル予測ネットワーク(KPN)を示す概略図である。
従来のKPNによる画素のフィルタリングの例を示す概略図である。
実施形態による、適応型変形可能カーネル予測ネットワーク(ADKPN)を示す概略図である。
実施形態による、ADKPNによる画素のフィルタリングの例を示す概略図である。
従来のKPNおよびADKPNの間の、訓練および/または試験動作測定の比較を示すグラフである。
実施形態による、ADKPNによる画像のノイズ除去の方法を示すフローチャートである。
実施形態による、入力画像、参照画像、従来のKPNによって生成された出力画像、およびADKPNによって生成された出力画像を、それぞれ示す。 実施形態による、入力画像、参照画像、従来のKPNによって生成された出力画像、およびADKPNによって生成された出力画像を、それぞれ示す。 実施形態による、入力画像、参照画像、従来のKPNによって生成された出力画像、およびADKPNによって生成された出力画像を、それぞれ示す。 実施形態による、入力画像、参照画像、従来のKPNによって生成された出力画像、およびADKPNによって生成された出力画像を、それぞれ示す。
実施形態による、入力画像、参照画像、従来のKPNによって生成された出力画像、およびADKPNによって生成された出力画像を、それぞれ示す。 実施形態による、入力画像、参照画像、従来のKPNによって生成された出力画像、およびADKPNによって生成された出力画像を、それぞれ示す。 実施形態による、入力画像、参照画像、従来のKPNによって生成された出力画像、およびADKPNによって生成された出力画像を、それぞれ示す。 実施形態による、入力画像、参照画像、従来のKPNによって生成された出力画像、およびADKPNによって生成された出力画像を、それぞれ示す。
実施形態による、入力画像、参照画像、従来のKPNによって生成された出力画像、およびADKPNによって生成された出力画像を、それぞれ示す。 実施形態による、入力画像、参照画像、従来のKPNによって生成された出力画像、およびADKPNによって生成された出力画像を、それぞれ示す。 実施形態による、入力画像、参照画像、従来のKPNによって生成された出力画像、およびADKPNによって生成された出力画像を、それぞれ示す。 実施形態による、入力画像、参照画像、従来のKPNによって生成された出力画像、およびADKPNによって生成された出力画像を、それぞれ示す。
実施形態による、入力画像、参照画像、従来のKPNによって生成された出力画像、ADKPNによって生成された出力画像を、それぞれ示す。 実施形態による、入力画像、参照画像、従来のKPNによって生成された出力画像、ADKPNによって生成された出力画像を、それぞれ示す。 実施形態による、入力画像、参照画像、従来のKPNによって生成された出力画像、ADKPNによって生成された出力画像を、それぞれ示す。 実施形態による、入力画像、参照画像、従来のKPNによって生成された出力画像、ADKPNによって生成された出力画像を、それぞれ示す。
いくつかの実施形態において、グラフィックス処理ユニット(GPU)は、グラフィックス演算、機械学習動作、パターン分析動作、および様々な汎用GPU(GPGPU)機能を加速するように、ホスト/プロセッサコアと通信可能に結合される。GPUは、バスまたは他のインターコネクト(例えば、PCIeまたはNVLinkなどの高速インターコネクト)上でホストプロセッサ/コアと通信可能に結合し得る。他の実施形態において、GPUは、コアと同一のパッケージまたはチップ上に統合され得、内部プロセッサバス/インターコネクト上のコア(つまり、パッケージまたはチップの内部)に通信可能に結合され得る。GPUが接続される方式にかかわらず、プロセッサコアは、ワーク記述子に含まれるコマンド/命令のシーケンスの形式で、GPUに動作を割り当て得る。GPUは次に、これらコマンド/命令を効果的に処理するための専用の回路/ロジックを用いる。
以下の説明において、様々な具体的な詳細が、より全体的な理解を提供するように記載される。しかしながら、本明細書に説明される実施形態は、1または複数のこれら具体的な詳細なしで実施されてよいことは、当業者には明らかであろう。他の例においては、周知な特徴は、本実施形態の詳細が曖昧になることを回避するように、説明されない。システム概要
図1は、本明細書に説明される実施形態の1または複数の態様を実装するように構成された、コンピューティングシステム100を示すブロック図である。コンピューティングシステム100は、1または複数のプロセッサ102およびシステムメモリ104を有する処理サブシステム101を含む。1または複数のプロセッサ102およびシステムメモリ104は相互接続パスを介して通信し得、該相互接続パスはメモリハブ105を含み得る。メモリハブ105は、チップセットコンポーネント内の別個のコンポーネントであってよく、または、1または複数のプロセッサ102内に統合されてよい。メモリハブ105は、通信リンク106を介してI/Oサブシステム111と結合する。I/Oサブシステム111はI/Oハブ107を含み、それはコンピューティングシステム100が1または複数の入力デバイス108からの入力を受信することを可能にし得る。さらに、I/Oハブ107はディスプレイコントローラに、1または複数のディスプレイデバイス110Aへの出力を提供することを可能にすることができ、それは1または複数のプロセッサ102に含まれ得る。一実施形態において、I/Oハブ107に結合された1または複数のディスプレイデバイス110Aは、ローカルな、内部の、または埋め込まれたディスプレイデバイスを含み得る。
一実施形態において、処理サブシステム101は、バスまたは他の通信リンク113を介して、メモリハブ105と結合される1または複数の並列プロセッサ112を含む。通信リンク113は、限定されることはないがPCI Expressなどの任意の数の規格のうちの1つをベースにした通信リンク技術またはプロトコルであってよく、または、ベンダ特有の通信インタフェースまたは通信ファブリックであってよい。一実施形態において、1または複数の並列プロセッサ112は、多くの統合コア(MIC)プロセッサなどの多数の処理コアおよび/または処理クラスタを含み得る、計算に重点を置いたパラレルまたはベクトル処理システムを形成する。一実施形態において、1または複数の並列プロセッサ112は、I/Oハブ107を介して結合される1または複数のディスプレイデバイス110Aのうちの1つに画素を出力し得る、グラフィックス処理サブシステムを形成する。1または複数の並列プロセッサ112は、1または複数のディスプレイデバイス110Bへの直接接続を可能とするように、ディスプレイコントローラおよびディスプレイインタフェース(図示せず)もまた含み得る。
I/Oサブシステム111内には、システムストレージユニット114が、コンピューティングシステム100のためのストレージメカニズムを提供するように、I/Oハブ107に接続し得る。I/Oスイッチ116は、I/Oハブ107と、プラットフォームと一体化されてもよいネットワークアダプタ118および/または無線ネットワークアダプタ119などの他のコンポーネント、および、1または複数のアドインデバイス120を介して追加され得る様々な他のデバイスとの間の接続を可能にするインタフェースメカニズムを提供するように用いられ得る。ネットワークアダプタ118は、イーサネット(登録商標)アダプタまたは別の有線ネットワークアダプタであってよい。無線ネットワークアダプタ119は、1または複数の無線端末を含む、Wi−Fi(登録商標)、Bluetooth(登録商標)、近距離無線通信(NFC)、または他ネットワークデバイスのうち1または複数を含み得る。
コンピューティングシステム100は、USBまたは他のポート接続、光ストレージドライブ、ビデオキャプチャデバイス、および同様のものを含む、明示的に示されない他のコンポーネントを含み得、それらはI/Oハブ107にも接続され得る。図1の様々なコンポーネントを相互接続する通信パスは、PCI(周辺構成要素インターコネクト)をベースにしたプロトコル(例えば、PCI−Express)、または任意の他のバスまたはポイントツーポイント通信インタフェース、および/または、NV−リンク高速インターコネクト、または当技術分野で既知の相互接続プロトコルなどのプロトコルなどといった、任意の適したプロトコルを用いて実装されてよい。
一実施形態において、1または複数の並列プロセッサ112は、例えば、ビデオ出力回路を含むグラフィックスおよびビデオ処理に最適化された回路を組み込み、グラフィックス処理ユニット(GPU)を構成する。別の実施形態では、1または複数の並列プロセッサ112は、本明細書でより詳細に説明される、基礎計算アーキテクチャを保存する一方で、汎用処理に最適化された回路を組み込む。さらに別の実施形態において、コンピューティングシステム100のコンポーネントは、単一の集積回路上の1または複数の他のシステム要素と統合されてもよい。例えば、1または複数の並列プロセッサ112、メモリハブ105、プロセッサ102、およびI/Oハブ107は、システムオンチップ(SoC)集積回路と統合されてもよい。代替的には、コンピューティングシステム100のコンポーネントは、システムインパッケージ(SIP)構成を形成するように、単一のパッケージに統合され得る。一実施形態において、コンピューティングシステム100のコンポーネントの少なくとも一部は、マルチチップモジュール(MCM)と統合されてよく、それは他のマルチチップモジュールとモジュラーコンピューティングシステムで相互接続されてよい。
本明細書で示されされるコンピューティングシステム100は例示であり、変更および修正が可能であることが理解されるであろう。ブリッジの数および配置、プロセッサ102の数、および並列プロセッサ112の数を含む接続トポロジは、所望により修正されてよい。例えば、いくつかの実施形態において、システムメモリ104は、ブリッジを介してではなくむしろ直接プロセッサ102に接続され、一方、他のデバイスは、メモリハブ105およびプロセッサ102を介してシステムメモリ104と通信する。他の代替的なトポロジにおいて、並列プロセッサ112は、メモリハブ105ではなくむしろ、I/Oハブ107に、または、1または複数のプロセッサ102のうちの1つに直接接続される。他の実施形態において、I/Oハブ107およびメモリハブ105は単一のチップに統合されてよい。いくつかの実施形態は、複数のソケットを介して取り付けられた、2またはそれより多くのセットのプロセッサ102を含んでよく、それらは並列プロセッサ112の2またはそれより多くのインスタンスと結合されてよい。
本明細書に示される特定のコンポーネントのいくつかは任意選択的であり、コンピューティングシステム100のすべての実装に含まれなくてもよい。例えば、任意の数のアドインカードまたは周辺機器がサポートされてよく、または、いくつかのコンポーネントは除去されてよい。さらに、いくつかのアーキテクチャは、図1に図示されたものと同様のコンポーネントについて、異な用語を用いることがある。例えば、メモリハブ105は、いくつかのアーキテクチャではノースブリッジと称されることがあり、一方、I/Oハブ107はサウスブリッジと称されることがある。
図2Aは、実施形態による並列プロセッサ200を示す。並列プロセッサ200の様々なコンポーネントは、プログラム可能なプロセッサ、特定用途向け集積回路(ASIC)、またはフィールドプログラマブルゲートアレイ(FPGA)などの、1または複数の集積回路デバイスを用いて実装され得る。図示の並列プロセッサ200は、実施形態による、図1に示された1または複数の並列プロセッサ112の変形例である。
一実施形態において、並列プロセッサ200は並列処理ユニット202を含む。並列処理ユニットは、他のデバイスとの通信を可能にするI/Oユニット204を含み、それは並列処理ユニット202の他の例を含む。I/Oユニット204は、他のデバイスと直接接続し得る。一実施形態において、I/Oユニット204は、メモリハブ105などのハブまたはスイッチインタフェースの使用を介して他のデバイスと接続される。メモリハブ105とI/Oユニット204との間の接続は、通信リンク113を形成する。並列処理ユニット202内で、I/Oユニット204はホストインタフェース206およびメモリクロスバー216と接続し、ホストインタフェース206は処理演算の実行に関するコマンドを受信し、メモリクロスバー216はメモリ動作の実行に関するコマンドを受信する。
ホストインタフェース206がI/Oユニット204を介してコマンドバッファを受信する場合、ホストインタフェース206はフロントエンド208にこれらコマンドを実行する作業動作を指示することができる。一実施形態において、フロントエンド208はスケジューラ210と結合し、それはコマンドまたは他の動作アイテムを処理クラスタアレイ212に分配するように構成される。一実施形態において、スケジューラ210は、タスクが処理クラスタアレイ212の処理クラスタに分配される前に、処理クラスタアレイ212が適切に、かつ有効状態で構成されることを保証する。一実施形態において、スケジューラ210は、マイクロコントローラ上でファームウェアロジックの実行によって実装される。スケジューラ210を実装するマイクロコントローラは、複雑なスケジューリング、ならびに、粗い、および細かい粒度での作業配分動作を実行し、処理アレイ212上で実行するスレッドの急速なプリエンプションおよびコンテキスト切り替を可能にするように構成可能である。一実施形態において、ホストソフトウェアは、複数のグラフィックス処理ドアベルのうちの1つを介して、処理アレイ212上のスケジューリングのためのワークロードを明らかにし得る。ワークロードは、次に、スケジューラマイクロコントローラ内のスケジューラ210ロジックによって、処理アレイ212にわたって自動的に分配され得る。
処理クラスタアレイ212は、最大で「N」個の処理クラスタ(例えば、クラスタ214A、クラスタ214Bからクラスタ214N)を含み得る。処理クラスタアレイ212の各クラスタ214A−214Nは、多数の並列のスレッドを実行し得る。スケジューラ210は、様々なスケジューリングおよび/または作業配分アルゴリズムを用いて処理クラスタアレイ212のクラスタ214A−214Nに動作を割り当て得、それは、プログラムまたは計算の各タイプに関して生ずるワークロードに応じて変わり得る。スケジューリングは、スケジューラ210によって動的に処理され得、または、処理クラスタアレイ212による実行のために構成されたプログラムロジックのコンパイルの間に、部分的にコンパイラロジックによってアシストされ得る。一実施形態において、処理クラスタアレイ212の異なるクラスタ214A−214Nは、異なるタイプのプログラムを処理するために、または異なるタイプの計算を実行するために、割り当てられ得る。
処理クラスタアレイ212は、様々なタイプの並列処理演算を実行するように構成され得る。一実施形態において、処理クラスタアレイ212は、汎用並列計算操作を実行するように構成される。例えば、処理クラスタアレイ212は、ビデオおよび/または音声データのフィルタリングと、物理的動作を含むモデリング動作の実行と、データ変換の実行とを含む処理タスクを実行するロジックを含み得る。
一実施形態において、処理クラスタアレイ212は、並列グラフィックス処理演算を実行するように構成される。並列プロセッサ200がグラフィックス処理演算を実行するように構成される実施形態において、処理クラスタアレイ212は、限定されることはないが、テクスチャ演算を実行するテクスチャサンプリングロジック、ならびにテセレーションロジックおよび他の頂点処理ロジックを含む、そのようなグラフィックス処理演算の実行をサポートする追加のロジックを含み得る。さらに、処理クラスタアレイ212は、限定されることはないが、頂点シェーダ、テセレーションシェーダ、ジオメトリシェーダ、および画素シェーダなどのグラフィックス処理関連シェーダプログラムを実行するように構成され得る。並列処理ユニット202は、処理のために、データをシステムメモリからI/Oユニット204を介して転送し得る。処理の最中に、転送されるデータはオンチップメモリ(例えば、並列プロセッサメモリ222)に格納され、次にシステムメモリに書き戻され得る。
一実施形態において、並列処理ユニット202がグラフィックス処理を実行するように用いられる場合、スケジューラ210は、ワークロードの処理をほぼ等しいサイズのタスクに分割するように構成され得、グラフィックス処理演算の、処理クラスタアレイ212の複数のクラスタ214A−214Nへのより良好な分散を可能にする。いくつかの実施形態において、処理クラスタアレイ212の一部は、異なるタイプの処理を実行するように構成され得る。例えば、第1の部分は、頂点シェーディングおよびトポロジ生成を実行するように構成され得、第2の部分は、テセレーションおよびジオメトリシェーディングを実行するように構成され得、第3の部分は、画素シェーディングまたは他のスクリーン空間動作を実行するように構成され得、表示のためにレンダリングされた画像を生成し得る。1または複数のクラスタ214A−214Nによって生成された中間データは、バッファに格納され得、さらなる処理のためにクラスタ214A−214Nの間に中間データが伝送されることを可能にし得る。
動作の最中に、処理クラスタアレイ212は、スケジューラ210を介して実行されるための処理タスクを受信し得、該スケジューラはフロントエンド208からの処理タスクを定義するコマンドを受信する。グラフィックス処理演算に関して、処理タスクは処理されるべきデータ、例えば、サーフェス(パッチ)データ、プリミティブデータ、頂点データ、および/または画素データ、ならびに状態パラメータ、および、データがどのように処理されるべきか(例えば、どのプログラムが実行されるべきか)を定義するコマンドのインデックスを含み得る。スケジューラ210は、タスクに対応するインデックスをフェッチするように構成され得、または、フロントエンド208からインデックスを受信し得る。フロントエンド208は、処理クラスタアレイ212が、入来するコマンドバッファ(例えば、バッチバッファ、プッシュバッファなど)によって特定されるワークロードが開始される前に有効状態となるように構成されることを保証するように構成され得る。
並列処理ユニット202の1または複数のインスタンスのそれぞれは、並列プロセッサメモリ222を結合し得る。並列プロセッサメモリ222は、メモリクロスバー216を介してアクセスされ得、該メモリクロスバーは、処理クラスタアレイ212ならびにI/Oユニット204からのメモリ要求を受信し得る。メモリクロスバー216は、メモリインタフェース218を介して並列プロセッサメモリ222にアクセスし得る。メモリインタフェース218は、並列プロセッサメモリ222の一部(例えば、メモリユニット)と各々結合し得る複数のパーティションユニット(例えば、パーティションユニット220A、パーティションユニット220Bからパーティションユニット220N)を含み得る。一実装例において、パーティションユニット220A−220Nの数は、メモリユニットの数に等しくなるように、したがって、第1パーティションユニット220Aは対応する第1メモリユニット224Aを有し、第2パーティションユニット220Bは対応するメモリユニット224Bを有し、N番目のパーティションユニット220Nは対応するN番目のメモリユニット224Nを有するように構成される。他の実施形態において、パーティションユニット220A−220Nの数は、メモリデバイスの数に等しくならなくともよい。
様々な実施形態において、メモリユニット224A−224Nは、ダイナミックランダムアクセスメモリ(DRAM)、または、グラフィックスダブルデータレート(GDDR)メモリを含むシンクロナスグラフィックスランダムアクセスメモリ(SGRAM)などのグラフィックスランダムアクセスメモリを含む様々なタイプのメモリデバイスを含み得る。一実施形態において、メモリユニット224A−224Nは、限定されることはないが高帯域幅メモリ(HBM)を含む、3Dスタックメモリもまた含んでよい。当業者は、メモリユニット224A−224Nの具体的な実施形態は変わってもよく、様々な従来の設計のうちの1つから選択されてもよいことを理解するであろう。フレームバッファまたはテクスチャマップなどのレンダターゲットは、メモリユニット224A−224Nにわたって格納されてよく、パーティションユニット220A−220Nが、並列プロセッサメモリ222の利用可能な帯域幅を効果的に用いて並列に、各レンダターゲットの一部に書き込みを行うことを可能とする。いくつかの実施形態において、ローカルキャッシュメモリと共にシステムメモリを使用するユニファイドメモリ設計を優先して、並列プロセッサメモリ222のローカルインスタンスは除外されてよい。
一実施形態において、処理クラスタアレイ212のクラスタ214A−214Nのうちの任意の1つは、並列プロセッサメモリ222内の任意のメモリユニット224A−224Nに書き込まれるであろうデータを処理し得る。メモリクロスバー216は、各クラスタ214A−214Nの出力を、任意パーティションユニット220A−220Nに、または別のクラスタ214A−214Nに転送するように構成され得、それは出力上の追加の処理演算を実行し得る。各クラスタ214A−214Nは、様々な外部メモリデバイスで読み出し、または書き込むように、メモリクロスバー216を通じてメモリインタフェース218と通信し得る。一実施形態において、メモリクロスバー216は、I/Oユニット204と通信するためのメモリインタフェース218との接続を有し、ならびに、異なる処理クラスタ214A−214N内の処理ユニットが、システムメモリまたは並列処理ユニット202にローカルではない他のメモリと通信することを可能にする、並列プロセッサメモリ222のローカルインスタンスとの接続を有する。一実施形態において、メモリクロスバー216は、クラスタ214A−214Nとパーティションユニット220A−220Nとの間のトラフィックストリームを分離するように仮想チャネルを用いてよい。
並列処理ユニット202の単一のインスタンスが並列プロセッサ200内に図示される一方、並列処理ユニット202の任意の数のインスタンスが含まれ得る。例えば、並列処理ユニット202の複数のインスタンスは、単一のアドインカード上で提供されてよく、または複数のアドインカードが相互接続されされてもよい。並列処理ユニット202の異なるインスタンスは、異なるインスタンスが異なる数の処理コア、異なる量のローカル並列プロセッサメモリ、および/または他の構成差を有する場合でも、相互動作するように構成されてよい。例えば、一実施形態において、並列処理ユニット202のいくつかのインスタンスは、他のインスタンスと比較してより高い精度の浮動小数点ユニットを含み得る。並列処理ユニット202または並列プロセッサ200の1または複数のインスタンスを組み込んだシステムは、様々な構成および形態の要因で実装され得、限定されることはないが、デスクトップ、ラップトップ、またはハンドヘルド型パーソナルコンピュータ、サーバ、ワークステーション、ゲームコンソール、および/または埋め込まれたシステムを含む。
図2Bは、実施形態による、パーティションユニット220のブロック図である。一実施形態において、パーティションユニット220は、図2Aのパーティションユニット220A−220Nのうちの1つのインスタンスである。図示されるように、パーティションユニット220はL2キャッシュ221、フレームバッファインタフェース225、およびROP226(ラスタ動作ユニット)を含む。L2キャッシュ221は、メモリクロスバー216およびROP226から受信されるロードアンドストアオペレーションの動作を実行するように構成される、読み出し/書き込みキャッシュである。読み出しミスおよび緊急書き込み戻し要求が、処理のためにフレームバッファインタフェース225へとL2キャッシュ221によって出力される。アップデートもまた、処理のためにフレームバッファインタフェース225を介してフレームバッファへと送信され得る。一実施形態において、フレームバッファインタフェース225は、図2Aの(例えば、並列プロセッサメモリ222内の)メモリユニット224A−224Nなどの、並列プロセッサメモリにおけるメモリユニットのうちの1つとインタフェースする。
グラフィックスアプリケーションにおいて、ROP226は、ステンシル、zテスト、ブレンディング、および同様のものなどのラスタ動作を実行する処理ユニットである。ROP226は、次に、グラフィックスメモリに格納された、処理されたグラフィックスデータを出力する。いくつかの実施形態において、ROP226は、メモリに書き込まれた深さまたは色データを圧縮し、メモリから読み出された深さまたは色データを圧縮解除する圧縮ロジックを含む。圧縮ロジックは、複数の圧縮アルゴリズムのうち1または複数を用いて作成される可逆圧縮ロジックであり得る。ROP226によって実行される圧縮のタイプは、圧縮されるべきデータの統計的特性に基づいて変わり得る。例えば、一実施形態において、デルタ色圧縮が、タイルごとの基準に基づいてデプス(depth)および色データ上で実行される。
いくつかの実施形態において、ROP226は、パーティションユニット220内ではなく、各処理クラスタ(例えば、図2Aのクラスタ214A−214N)内に含まれる。そのような実施形態において、画素断片データではなく、画素データの読み出しおよび書き込み要求が、メモリクロスバー216を介して伝送される。処理されたグラフィックスデータは、図1の1または複数のディスプレイデバイス110のうちの1つなどの、ディスプレイデバイス上に表示され得、プロセッサ102によってさらなる処理のために転送され得。または図2Aの並列プロセッサ200内の処理されたエンティティのうちの1つによるさらなる処理のために転送され得る。
図2Cは、実施形態による、並列処理ユニット内の処理クラスタ214のブロック図である。一実施形態において、処理クラスタは図2Aの処理クラスタの214A−214Nのうちの1つのインスタンスである。処理クラスタ214は、並列の多くのスレッドを実行するように構成され得、用語「スレッド」は、特定の入力データのセット上で実行している特定のプログラムのインスタンスを指す。いくつかの実施形態において、単一命令複数データ(SIMD)命令の発行技術が、複数の独立指示部を提供することなく多数のスレッドの並列実行をサポートするように用いられる。他の実施形態において、単一命令複数スレッド(SIMT)技術が、処理クラスタのうちの各1つ内の処理エンジンのセットに命令を発行するように構成された共通命令ユニットを用いて、多数の一般的に同期されたスレッドの並列実行をサポートするように用いられる。すべての処理エンジンが典型的に同一の命令を実行する、SIMD実行状態とは異なり、SIMT実行は、異なるスレッドがより容易に、所与のスレッドプログラムを通じて拡散実行パスに従うことを可能にする。当業者は、SIMD処理状態がSIMT処理状態の機能サブセットを表すことを理解するであろう。
処理クラスタ214の動作は、SIMT並列プロセッサへと処理タスクを分配するパイプラインマネージャ232を介して制御され得る。パイプラインマネージャ232は、図2Aのスケジューラ210から命令を受信し、グラフィックスマルチプロセッサ234および/またはテクスチャユニット236を介して、これらの命令の実行を管理する。示されたグラフィックスマルチプロセッサ234は、SIMT並列プロセッサの例示的なインスタンスである。しかしながら、異なるアーキテクチャの、様々なタイプのSIMT並列プロセッサが、処理クラスタ214内に含まれ得る。グラフィックスマルチプロセッサ234の1または複数のインスタンスは、処理クラスタ214内に含まれ得る。グラフィックスマルチプロセッサ234は、データを処理し得、データクロスバー240は、処理済みデータを、他のシェーダユニットを含む複数の可能デスティネーションのうちの1つに分配するように用いられ得る。パイプラインマネージャ232は、データクロスバー240を介して分配されるべき処理済みデータのためのデスティネーションを特定することによって、処理済みデータの分散を促し得る。
処理クラスタ214内の各グラフィックスマルチプロセッサ234は、機能実行ロジック(例えば、算術論理ユニット、負荷格納ユニットなど)の同一のセットを含み得る。機能実行ロジックは、以前の命令が完了する前に新たな命令が発行され得るパイプライン方式で構成され得る。機能実行ロジックは、整数および浮動小数点算術、比較動作、ブーリアン動作、ビットシフト、および様々な代数関数の計算を含む、様々な動作をサポートする。一実施形態において、同一の機能ユニットハードウェアが、異な動作を実行するように活用され得、機能ユニットの任意の組み合わせが提示され得る。
処理クラスタ214に伝送される命令はスレッドを構成する。並列処理エンジンのセットにわたって実行するスレッドのセットはスレッドグループである。スレッドグループは、異なる入力データ上で同一のプログラムを実行する。スレッドグループ内の各スレッドは、グラフィックスマルチプロセッサ234内で異なる処理エンジンに割り当てられてよい。スレッドグループは、グラフィックスマルチプロセッサ234内の処理エンジンの数より少ないスレッドを含んでよい。スレッドグループが処理エンジンの数より少ないスレッドを含むとき、処理エンジンのうち1または複数は、スレッドグループが処理されるサイクルの最中にアイドルであってよい。スレッドグループは、グラフィックスマルチプロセッサ234内の処理エンジンの数より多いスレッドを含んでもよい。スレッドグループがグラフィックスマルチプロセッサ234内の処理エンジンの数より多いスレッドを含むとき、処理は連続クロックサイクルにわたって実行され得る。一実施形態において、複数のスレッドグループが、グラフィックスマルチプロセッサ234上で同時に実行され得る。
一実施形態において、グラフィックスマルチプロセッサ234は、ロードアンドストアオペレーションを実行する内部キャッシュメモリを含む。一実施形態において、グラフィックスマルチプロセッサ234は、内部キャッシュに先行し得、処理クラスタ214内でキャッシュメモリ(例えば、L1キャッシュ248)を用い得る。各グラフィックスマルチプロセッサ234もまた、すべての処理クラスタ214の間で共有され、スレッドの間でデータを転送するのに用いられ得るパーティションユニット(例えば、図2Aのパーティションユニット220A−220N)内のL2キャッシュへのアクセスを有する。グラフィックスマルチプロセッサ234もまた、オフチップグローバルメモリにアクセスし得、それは1または複数のローカル並列プロセッサメモリおよび/またはシステムメモリを含み得る。並列処理ユニット202の外部の任意のメモリが、グローバルメモリとして用いられ得る。処理クラスタ214がグラフィックスマルチプロセッサ234の複数のインスタンスを含む実施形態は、共通の命令およびデータを共有し得、それはL1キャッシュ248内に格納され得る。
各処理クラスタ214は、仮想アドレスを物理アドレスにマッピングするように構成されるMMU245(メモリ管理ユニット)を含み得る。他の実施形態において、MMU245の1または複数のインスタンスは、図2Aのメモリインタフェース218に存在し得る。MMU245は、仮想アドレスをタイルの物理アドレスに、および任意選択的にキャッシュライン指標にマッピングするように用いられるページテーブルのセットエントリ(PTEs)を含む。MMU245は、アドレストランスレーションルックアサイドバッファ(TLB)、またはグラフィックスマルチプロセッサ234内に存在し得るキャッシュ、またはL1キャッシュ、または処理クラスタ214を含んでよい。物理アドレスは、パーティションユニット間でのインタリーブの効率的な要求を可能にする、サーフェスデータアクセス局所性を分配するように処理される。キャッシュライン指標は、キャッシュラインの要求がヒットかミスかを決定するように用いられてよい。
グラフィックスおよびコンピューティングアプリケーションにおいて、処理クラスタ214は、各グラフィックスマルチプロセッサ234がテクスチャマッピング動作、例えば、テクスチャサンプル位置の決定、テクスチャデータの読み取り、およびテクスチャデータのフィルタリングを実行するためにテクスチャユニット236に結合されるように構成され得る。テクスチャデータは、内部テクスチャL1キャッシュ(図示せず)から、またはいくつかの実施形態において、グラフィックスマルチプロセッサ234内のL1キャッシュから読み出され、必要に応じてL2キャッシュ、ローカル並列プロセッサメモリ、またはシステムメモリからフェッチされる。各グラフィックスマルチプロセッサ234は、さらなる処理のために別の処理クラスタ214に処理されたタスクを提供するように、または、L2キャッシュ、ローカル並列プロセッサメモリ、またはメモリクロスバー216を介してシステムメモリに処理されたタスクを格納するように、処理されたタスクをデータクロスバー240に出力する。preROP242(ラスタ動作ユニット)は、グラフィックスマルチプロセッサ234からデータを受信し、データをROPユニットに向けるように構成され、それは本明細書に説明されるようなパーティションユニット(例えば、図2Aのパーティションユニット220A−220N)に位置し得る。preROP242ユニットは、カラーブレンディングの最適化の実行、画素カラーデータの編成、およびアドレス変換の実行をし得る。
本明細書で説明されされるコアアーキテクチャは、例示のものであり、変更および修正が可能であることが理解されるであろう。任意の数の処理ユニット、例えば、グラフィックスマルチプロセッサ234、テクスチャユニット236、preROP242などが、処理クラスタ214内に含まれ得る。さらに、1つの処理クラスタ214のみが示されている一方、本明細書で説明される並列処理ユニットは、処理クラスタ214の任意の数のインスタンスを含み得る。一実施形態において、各処理クラスタ214は、分離および別個の処理ユニット、L1キャッシュなどを用いた他処理クラスタ214とは独立して動作するように構成され得る。
図2Dは、一実施形態によるグラフィックスマルチプロセッサ234を示す。そのような実施形態において、グラフィックスマルチプロセッサ234は、処理クラスタ214のパイプラインマネージャ232と結合する。グラフィックスマルチプロセッサ234は、限定されることはないが、命令キャッシュ252、指示部254、アドレスマッピングユニット256、レジスタファイル258、1または複数の汎用グラフィックス処理ユニット(GPGPU)コア262、および1または複数のロード/ストアユニット266を含む実行パイプラインを有する。GPGPUコア262およびロード/ストアユニット266は、メモリおよびキャッシュインターコネクト268を介して、キャッシュメモリ272および共有メモリ270と結合する。一実施形態において、グラフィックスマルチプロセッサ234は、行列および/またはレイトレーシング動作をアクセラレートするためのハードウェアロジックを含む、テンソルおよび/またはレイトレーシングコア263をさらに含む。
一実施形態において、命令キャッシュ252は、実行する命令のストリームを、パイプラインマネージャ232から受信する。命令は、命令キャッシュ252にキャッシュされ、指示部254による実行のためにディスパッチされる。指示部254は、スレッドグループの各スレッドがGPGPUコア262内の異なる実行ユニットに割り当てられた状態の、スレッドグループ(例えば、ワープス(warps))として命令をディスパッチし得る。命令は、統一されたアドレススペース内のアドレスを特定することによって、任意のローカルな、共有の、またはグローバルなアドレス空間にアクセスし得る。アドレスマッピングユニット256は、統一されたアドレススペースのアドレスを、ロード/ストアユニット266によってアクセスされ得る別個のメモリアドレスに変換するように用いられ得る。
レジスタファイル258は、グラフィックスマルチプロセッサ234の機能ユニットにレジスタのセットを提供する。レジスタファイル258は、グラフィックスマルチプロセッサ234の機能ユニット(例えば、GPGPUコア262、ロード/ストアユニット266)のデータパスに接続されるオペランドに一時ストレージを提供する。一実施形態において、レジスタファイル258は、各機能ユニットがレジスタファイル258の専用の一部に割り当てられるように機能ユニットのそれぞれの間で分割される。一実施形態において、レジスタファイル258は、グラフィックスマルチプロセッサ234によって実行される異なるワープスの間で分割される。
GPGPUコア262は、グラフィックスマルチプロセッサ234の命令を実行するように用いられる、浮動小数点ユニット(FPU)および/または整数算術論理ユニット(ALU)を各々含み得る。実施形態によって、GPGPUコア262は、アーキテクチャにおいて同様であってよく、または、アーキテクチャにおいて異なってもよい。例えば、および一実施形態において、GPGPUコア262の第1の部分は、単精度FPUおよび整数ALUを含み、一方、GPGPUコアの第2の部分は、倍精度FPUを含む。一実施形態において、FPUは浮動小数点算術のためのIEEE754−2008標準を実装し得、または、可変精度浮動小数点算術を可能にし得る。グラフィックスマルチプロセッサ234は、矩形コピーまたは画素ブレンディング演算などの特定の機能を実行する、1または複数の固定機能または特殊関数ユニットをさらに含み得る。一実施形態において、1または複数のGPGPUコアは、固定された、または特殊関数のロジックもまた含み得る。
一実施形態において、GPGPUコア262は、データの複数のセット上で単一の命令を実行することが可能なSIMDロジックを含む。一実施形態において、GPGPUコア262は、SIMD4、SIMD8、およびSIMD16命令を物理的に実行し得、SIMD1、SIMD2、およびSIMD32命令を論理的に実行し得る。GPGPUコアにおけるSIMD命令は、シェーダコンパイラによるコンパイル時間に生成され得、または、単一プログラム複数のデータ(SPMD)またはSIMTアーキテクチャに関して書き込まれてコンパイルされたプログラムを実行する場合に自動的に生成され得る。SIMT実行モデルのために構成されたプログラムの複数のスレッドは、単一のSIMD命令を介して実行され得る。例えば、および一実施形態において、同じまたは類似の動作を実行する8つのSIMTスレッドが、単一のSIMD8ロジックユニットを介して並列に実行され得る。
メモリおよびキャッシュインターコネクト268は、グラフィックスマルチプロセッサ234の機能ユニットのそれぞれを、レジスタファイル258および共有メモリ270に接続する、インターコネクトネットワークである。一実施形態において、メモリおよびキャッシュインターコネクト268は、共有メモリ270とレジスタファイル258との間で、ロード/ストアユニット266が、ロードアンドストアオペレーションを実装することを可能にするクロスバーインターコネクトである。レジスタファイル258は、GPGPUコア262と同一の周波数で動作し得、したがって、GPGPUコア262とレジスタファイル258との間のデータ転送は、非常にレイテンシが低い。共有メモリ270は、グラフィックスマルチプロセッサ234内の機能ユニット上で実行されるスレッドの間で通信を可能にするように用いられ得る。キャッシュメモリ272は、例えば、機能ユニットとテクスチャユニット236との間で通信されるテクスチャデータをキャッシュする、データキャッシュとして用いられ得る。共有メモリ270は、プログラム管理されたキャッシュとしても用いられ得る。GPGPUコア262上で実行されるスレッドは、キャッシュメモリ272内に格納されて自動的にキャッシュされたデータに加えて、共有メモリ内でプログラムでデータを格納し得る。
図3Aから図3Cは、実施形態による追加のグラフィックスマルチプロセッサを示す。図3Aから図3Bは、グラフィックスマルチプロセッサ325、350を示し、それは図2Cのグラフィックスマルチプロセッサ234の変形例である。図3Cは、マルチコアグループ365A−365Nに配置れたグラフィックス処理リソース専用のセットを含む、グラフィックス処理ユニット(GPU)380を示す。示されたグラフィックスマルチプロセッサ325、350およびマルチコアグループ365A−365Nは、多数の実行スレッドでの同時実行が可能なストリーミングマルチプロセッサ(SM)であり得る。
図3Aは、追加の実施形態によるグラフィックスマルチプロセッサ325を示す。グラフィックスマルチプロセッサ325は、図2Dのグラフィックスマルチプロセッサ234と比較して、実行リソースユニットの複数の追加インスタンスを含む。例えば、グラフィックスマルチプロセッサ325は、指示部332A−332B、レジスタファイル334A−334B、およびテクスチャユニット344A−344Bの複数のインスタンスを含み得る。グラフィックスマルチプロセッサ325は、グラフィックスまたはコンピュート実行ユニット(例えば、GPGPUコア336A−336B、テンソルコア337A−337B、レイトレーシングコア338A−338B)の複数のセット、および、ロード/ストアユニット340A−340Bの複数のセットもまた含む。一実施形態において、実行リソースユニットは、共通命令キャッシュ330、テクスチャおよび/またはデータキャッシュメモリ342、および共有メモリ346を有する。
様々なコンポーネントが、相互接続ファブリック327を介して通信し得る。一実施形態において、相互接続ファブリック327は、グラフィックスマルチプロセッサ325の様々なコンポーネント間の通信を可能にする、1または複数のクロスバースイッチを含む。一実施形態において、相互接続ファブリック327は、グラフィックスマルチプロセッサ325の各コンポーネントがスタックされる、別個の高速ネットワークファブリック層である。グラフィックスマルチプロセッサ325のコンポーネントは、相互接続ファブリック327を介してリモートコンポーネントと通信する。例えば、GPGPUコア336A−336B、337A−337Bおよび3378A−338Bは、相互接続ファブリック327を介して共有メモリ346と各々通信し得る。相互接続ファブリック327は、コンポーネント間の公正な帯域幅割り当てを保証するように、グラフィックスマルチプロセッサ325内での通信をアービトレートし得る。
図3Bは、追加の実施形態によるグラフィックスマルチプロセッサ350を示す。グラフィックスプロセッサは、実行リソース356A−356Dの複数のセットを含み、実行リソースの各セットは、図2Dおよび図3Aに図示されたように、複数の命令ユニット、レジスタファイル、GPGPUコア、およびロードストアユニットを含む。実行リソース356A−356Dは、テクスチャ演算のためにテクスチャユニット360A−360Dと連携して動作し得る一方、命令キャッシュ354および共有メモリ353を共有する。一実施形態において、実行リソース356A−356Dは、命令キャッシュ354および共有メモリ353、ならびに、テクスチャの複数のインスタンス、および/またはデータキャッシュメモリ358A−358Bを共有し得る。様々なコンポーネントが、図3Aの相互接続ファブリック327と同様に、相互接続ファブリック352を介して通信し得る。
当業者は、図1、2A−2D、および3A−3Bに説明されたアーキテクチャは、本実施形態の範囲について説明するものであり、限定するものではないことを、理解するであろう。したがって、本明細書に説明された技術は、本明細書に説明された実施形態の範囲から逸脱せずに、1または複数のモバイルアプリケーションプロセッサ、1または複数のデスクトップまたはマルチコアCPUを含むサーバ中央処理装置(CPU)、図2Aの並列処理ユニット202などの1または複数の並列処理ユニット、ならびに、1または複数のグラフィックスプロセッサまたは専用処理ユニットを限定することなく含む、任意の適切に構成された処理ユニット上で実装され得る。
いくつかの実施形態において、本明細書で説明された並列プロセッサまたはGPGPUは、グラフィックス演算、機械学習動作、パターン分析動作、および様々な汎用GPU(GPGPU)機能をアクセラレートするように、ホスト/プロセッサコアに通信可能に結合される。GPUは、バスまたは他のインターコネクト(例えば、PCIeまたはNVLinkなどの高速インターコネクト)上でホストプロセッサ/コアに通信可能に結合され得る。他の実施形態において、GPUは、コアと同一のパッケージまたはチップ上に統合され得、内部プロセッサバス/インターコネクト上のコア(つまり、パッケージまたはチップの内部)と通信可能に結合され得る。GPUが接続される方式にかかわらず、プロセッサコアは、ワーク記述子に含まれるコマンド/命令のシーケンスの形式で、動作をGPUに割り当て得る。GPUは次に、これらコマンド/命令を効果的に処理するための専用の回路/ロジックを用いる。
図3Cは、マルチコアグループ365A−Nに配置されたグラフィックス処理リソースの専用のセットを含む、グラフィックス処理ユニット(GPU)380を示す。単一マルチコアグループ365Aのみの詳細が提供される一方で、他のマルチコアグループ365B−365Nが、グラフィックス処理リソースの同じまたは類似のセットによって装備され得ることが、理解されるであろう。
図示されるように、マルチコアグループ365Aは、グラフィックスコア370のセット、テンソルコア371のセット、およびレイトレーシングコア372のセットを含み得る。スケジューラ/ディスパッチャ368は、様々なコア370、371、372上での実行のためにグラフィックススレッドをスケジューリングおよびディスパッチする。レジスタファイルのセット369は、グラフィックススレッドを実行する場合に、コア370、371、372によって用いられるオペランド値を格納する。これらは、例えば、整数値を格納するための整数レジスタ、浮動小数点値を格納するための浮動小数点レジスタ、パックドデータ要素(整数および/または浮動小数点データ要素)を格納するためのベクトルレジスタ、およびテンソル/行列値を格納するためのタイルレジスタを含み得る。一実施形態において、タイルレジスタはベクトルレジスタのセットの組み合わせとして実装される。
レベル1(L1)キャッシュおよび共有メモリユニット373の1または複数の組み合わせは、テクスチャデータ、頂点データ、画素データ、レイデータ、境界ボリュームデータなどのグラフィックスデータを、各マルチコアグループ365A内に局所的に格納する。1または複数のテクスチャユニット374もまた、テクスチャマッピングおよびサンプリングなどのテクスチャリング動作の実行のために用いられ得る。レベル2(L2)キャッシュ375は、グラフィックスデータおよび/または複数の並列のグラフィックススレッドに関する命令を格納するマルチコアグループ365A−365Nのすべて、またはサブセットを共有する。図示されるように、L2キャッシュ375は、複数のマルチコアグループ365A−365Nにわたって共有されてよい。1または複数メモリコントローラ367は、GPU380を、システムメモリ(例えば、DRAM)および/または専用のグラフィックスメモリ(例えば、GDDR6メモリ)であってよいメモリ366に結合する。
入力/出力(I/O)回路363は、GPU380を、デジタル信号プロセッサ(DSP)、ネットワークコントローラ、またはユーザ入力デバイスなどの、1または複数のI/Oデバイス362に結合する。オンチップインターコネクトが、I/Oデバイス362をGPU380およびメモリ366に結合するように用いられてよい。I/O回路363の1または複数のI/Oメモリ管理ユニット(IOMMU)364は、I/Oデバイス362を、システムメモリ366に直接結合する。一実施形態において、IOMMU364は、仮想アドレスをシステムメモリ366の物理アドレスにマッピングするように、ページテーブルの複数のセットを管理する。本実施形態において、I/Oデバイス362、CPU361、およびGPU380は、同一の仮想アドレス空間を共有し得る。
一実装例において、IOMMU364は仮想化をサポートする。この場合には、それは、ゲスト/グラフィックス仮想アドレスをゲスト/グラフィックス物理アドレスにマッピングするページテーブルの第1セットと、ゲスト/グラフィックス物理アドレスをシステム/ホスト物理アドレス(例えば、システムメモリ366内)にマッピングするページテーブルの第2セットとを管理し得る。ページテーブルの第1および第2セットのそれぞれの基本アドレスは、制御レジスタに格納され得、コンテキストスイッチ上で入れ替えられ得る(例えば、これにより、ページテーブルの関連するセットへのアクセスによって新たなコンテキストが提供される)。図3Cにはのそれぞれ不図示である一方、コア370、371、372および/またはマルチコアグループ365A−365Nのそれぞれは、ゲスト仮想をゲスト物理変換にキャッシュし、ゲスト物理をホスト物理変換にキャッシュし、ゲスト仮想をホスト物理変換にキャッシュする、トランスレーションルックアサイドバッファ(TLB)を含み得る。
一実施形態において、CPU361、GPU380、およびI/Oデバイス362は、単一の半導体チップおよび/またはチップパッケージ上で統合される。図示されるメモリ366は、同一のチップ上で統合されてもよく、または、オフチップインタフェースを介してメモリコントローラ367に結合されてもよい。一実装例において、メモリ366は、他の物理システムレベルメモリと同一の仮想アドレス空間を共有するGDDR6メモリを含むが、本発明の基礎となる原理はこの特定の実施形態に限定されることはない。
一実施形態において、テンソルコア371は行列演算を実行するように具体的に設計された複数の実行ユニットを含み、それらはディープラーニング動作を実行するのに用いられる基本的な計算操作である。例えば、同時行列乗算演算は、ニューラルネットワーク訓練および推論に用いられ得る。テンソルコア371は、単精度浮動小数点(例えば、32ビット)、半精度浮動小数点(例えば、16ビット)、整数ワード(16ビット)、バイト(8ビット)、およびハーフバイト(4ビット)を含む、様々なオペランド精度を用いる行列処理を実行し得る。一実施形態において、ニューラルネットワーク実装は各レンダリングされたシーンの特徴を抽出し、複数のフレームからの詳細を潜在的に組み合わせ、品質の高い最終的な画像を構築する。
深層学習の実装において、並列行列乗算動作が、テンソルコア371上での実行のためにスケジューリングされる。ニューラルネットワークの訓練は、特に、著しい数の行列ドット積算演算を要求する。NxNxN行列乗算の内積定式化を処理するために、テンソルコア371は、少なくともN個のドット積算処理要素を含み得る。行列乗算が開始する前に、1つの全体行列がタイルレジスタにロードされ、第2行列の少なくとも1つの列がN個のサイクルに関して各サイクルでロードされる。各サイクルにおいて、処理されるN個のドット積がある。
行列要素は、16ビットワード、8ビットバイト(例えば、INT8)および4ビットハーフバイト(例えば、INT4)を含む、具体的な実装に応じて異なる精度で格納されてよい。異なるワークロード(例えば、バイトおよびハーフバイトへの量子化を許容し得る推論ワークロードなど)に関して最も効率的な精度が用いられることを保証するように、異なる精度のモードが、テンソルコア371に関して特定され得る。
一実施形態において、レイトレーシングコア372は、リアルタイムレイトレーシングとノンリアルタイムレイトレーシングの両方の実装に関して、レイトレーシング動作をアクセラレートする。特に、レイトレーシングコア372は、境界ボリューム階層(BVH)を用いてレイトラバーサルを実行し、BVHボリューム内にエンクローズされたレイおよびプリミティブの間のインターセクションを識別するための、レイトラバーサル/インターセクション回路を含む。レイトレーシングコア372は、ディープテスティングおよびカリング(例えば、Zバッファまたは同様の配置を用いて)を実行する回路もまた含み得る。一実装例において、レイトレーシングコア372は、本明細書に説明されされた画像のノイズ除去技術と連携したトラバーサルおよび交点演算を実行し、それの少なくとも一部は、テンソルコア371上で実行され得る。例えば、一実施形態において、テンソルコア371は深層学習ニューラルネットワークを実装し、レイトレーシングコア372によって生成されるフレームのノイズ除去を実行する。しかしながら、CPU361、グラフィックスコア370、および/またはレイトレーシングコア372は、ノイズ除去および/またはディープラーニングアルゴリズムのすべてまたは一部もまた実装し得る。
さらに、上述されるように、GPU380がネットワークまたは高速インターコネクト上で他のコンピューティングデバイスに結合されたコンピューティングデバイスにあるという、ノイズ除去のための分配手法が採用され得る。本実施形態において、相互接続されたコンピューティングデバイスは、全体システムが異なるタイプの画像フレームおよび/または異なるグラフィックスアプリケーションに関してノイズ除去を実行することを学習する速度を改善するための、ニューラルネットワーク学習/訓練データを共有する。
一実施形態において、レイトレーシングコア372は、すべてのBVHトラバーサルおよびレイプリミティブ交差を処理し、レイにつき数千の命令を有する過負荷からグラフィックスコア370を保護する。一実施形態において、各レイトレーシングコア372は、境界ボックステスト(例えば、トラバーサル動作のための)を実行するための専用の回路の第1のセット、および、レイトライアングル交差テスト(例えば、トラバースされている交差をしているレイ)を実行する専用の回路の第2のセットを含む。したがって、一実施形態において、マルチコアグループ365Aは、単にレイプローブを起動することができるのみであり、レイトレーシングコア372は、独立してレイトラバーサルおよび交差を実行し、スレッドコンテキストにヒットデータ(例えば、ヒット、ノーヒット、複数のヒットなど)を戻すことができる。他のコア370、371は、他のグラフィックスまたは算出動作を実行するように解放される一方、レイトレーシングコア372はトラバーサルおよび交点演算を実行する。
一実施形態において、各レイトレーシングコア372は、BVH試験演算を実行するトラバーサルユニットと、レイプリミティブ交差テストを実行する交点ユニットとを含む。交点ユニットは、「ヒット」、「ノーヒット」、または「複数ヒット」応答を生成し、それを適切なスレッドへと提供する。トラバーサルおよび交点演算の最中、他のコア(例えば、グラフィックスコア370およびテンソルコア371)の実行リソースは、他の形式のグラフィックスワークを実行するように解放される。
一特定実施形態において、以下に説明されるハイブリッドラスタライゼーションレイトレーシングアプローチが用いられ、動作はグラフィックスコア370とレイトレーシングコア372との間で分配される。
一実施形態において、レイトレーシングコア372(および/または他のコア370、371)は、DispatchRaysコマンド、ならびに、レイ生成、最も近いヒット、任意のヒット、およびミスシェーダを含むマイクロソフト(登録商標)のDirectX Ray Tracing(DXR)などのレイトレーシング命令セットに関するハードウェアサポートを含み、各オブジェクトに関するシェーダおよびテクスチャのユニークなセットの割り当てを可能にする。レイトレーシングコア372、グラフィックスコア370およびテンソルコア371によってサポートされ得る別のレイトレーシングプラットフォームは、Vulkan1.1.85である。しかしながら、本発明の基礎となる原理は、任意の特定のレイトレーシングISAに限定されることはないことに留意する。
一般的には、様々なコア372、371、370は、レイ生成、最も近いヒット、任意のヒット、レイプリミティブ交差、パープリミティブ、および階層境界ボックス構成、ミス、ヴィジット、および例外に関する命令/関数を含むレイトレーシング命令セットをサポートし得る。より具体的には、一実施形態は、以下機能を実行するレイトレーシング命令を含む。
レイ生成(Ray Generation)−レイ生成命令は、各画素、サンプル、または他のユーザ定義の動作割り当てに関して実行され得る。
最も近いヒット(Closest Hit)−最も近いヒット命令は、シーン内のプリミティブを有するレイの最も近い交差点の位置決めを実行し得る。
任意のヒット(Any Hit)−任意のヒット命令は、レイとシーン内のプリミティブとの間の複数の交差を識別し、新たな最も近い交差点を潜在的に識別する。
交差(Intersection)−交差命令は、レイプリミティブ交差テストを実行し、結果を出力する。
パープリミティブ境界ボックス構成(Per−primitive Bounding box Construction)−この命令は、所与のプリミティブまたはプリミティブのグループの周りに境界ボックスを構築する(例えば、新たなBVHまたは他のアクセラレーションデータ構造を構築する場合)。
ミス(Miss)−レイが、シーン内のジオメトリのすべて、またはシーンの特定された領域に該当しないことを示す。
ヴィジット(Visit)−レイが横断するであろう子のボリューム(children volume)を示す。
例外(Exceptions)−様々なタイプの例外ハンドラ(例えば、様々なエラー条件のために起動された)を含む。 GPUに関するホストプロセッサ相互接続の技術
図4Aは、複数のGPU410−413が高速リンク440A−440D(例えば、バス、ポイントツーポイントインターコネクトなど)を介して複数のマルチコアプロセッサ405−406と通信可能に結合される例示的なアーキテクチャを示す。一実施形態において、高速リンク440A−440Dは、実装に応じて、4GB/s、30GB/s、80GB/s、またはより高い通信スループットをサポートする。限定されることはないが、PCIe4.0または5.0、およびNVLink2.0を含む、様々なインターコネクトプロトコルが用いられ得る。しかしながら、本発明の基礎となる原理は、任意の特定の通信プロトコルまたはスループットに限定されることはない。
さらに一実施形態において、2またはそれより多くのGPU410−413が、高速リンク442A−442Bにおいて相互接続され、それら高速リンク440A−440Dに関して用いられるものとは同一であるかまたは異なるプロトコル/リンクを用いて実装され得る。同様に、2またはそれより多くのマルチコアプロセッサ405−406が、20GB/s、30GB/s、120GB/s、またはより高い速度で対称マルチプロセッサ(SMP)バス動作であり得る高速リンク443を介して接続され得る。代替的に、図4Aに示される様々なシステムコンポーネントの間のすべての通信が、同一のプロトコル/リンクを用いて(例えば、共通相互接続ファブリックを介して)実現され得る。すでに述べたように、しかしながら、本発明の基礎となる原理は、任意の特定のタイプの相互接続技術に限定されることはない。
一実施形態において、各マルチコアプロセッサ405−406は、メモリインターコネクト430A−430Bを介して、プロセッサメモリ401−402とそれぞれ通信可能に結合され、各GPU410−413は、GPUメモリインターコネクト450A−450Dを介して、GPUメモリ420−423とそれぞれ通信可能に結合される。メモリインターコネクト430A−430Bおよび450A−450Dは、同一または異なるメモリアクセス技術を使用し得る。例示の目的で、および限定されないが、プロセッサメモリ401−402およびGPUメモリ420−423は、ダイナミックランダムアクセスメモリ(DRAM)(スタック型DRAMを含む)、グラフィックスDDR SDRAM(GDDR)(例えば、GDDR5、GDDR6)、または高帯域幅メモリ(HBM)などの揮発性メモリであってよく、および/または、3D XPointまたはNano−Ramなどの不揮発性メモリであってよい。一実施形態において、メモリのある一部は揮発性メモリであってよく、別の一部は不揮発性メモリであってよい(例えば、2レベルメモリ(2LM)階層を用いる)。
以下に説明されるように、様々なプロセッサ405−406およびGPU410−413は、特定のメモリ401−402、420−423とそれぞれ物理的に結合されてよいが、ユニファイドメモリアーキテクチャが実装され、同一仮想システムアドレス空間(「実効アドレス」空間とも称される)が様々な物理メモリのすべての間で分配される。例えば、プロセッサメモリ401−402は、各々64GBのシステムメモリアドレス空間を含み得、GPUメモリ420−423は、各々32GBのシステムメモリアドレス空間を含み得る(この例において、合計で256GBのアドレス指定可能メモリがもたらされる)。
図4Bは、一実施形態による、マルチコアプロセッサ407およびグラフィックス加速モジュール446の間の相互接続に関する追加の詳細を示す。グラフィックス加速モジュール446は、高速リンク440を介してプロセッサ407に結合されたラインカード上で統合された1または複数のGPUチップを含み得る。代替的に、グラフィックス加速モジュール446は、プロセッサ407と同一のパッケージまたはチップ上に統合され得る。
図示されるプロセッサ407は、複数のコア460A−460Dを含み、各々がトランスレーションルックアサイドバッファ461A−461Dおよび1または複数のキャッシュ462A−462Dを有する。コアは、本発明の基礎となる原理が曖昧になることを回避するように不図示とされる、命令およびデータの処理を実行するための様々な他のコンポーネントを含み得る(例えば、命令フェッチユニット、分岐予測ユニット、デコーダ、実行ユニット、リオーダバッファなど)。キャッシュ462A−462Dは、レベル1(L1)およびレベル2(L2)キャッシュを含み得る。さらに、1または複数の共有キャッシュ456は、キャッシュ階層に含まれ得、コア460A−460Dのセットによって共有され得る。例えば、プロセッサ407の一実施形態は24個のコアを含み、各々が独自のL1キャッシュ、12の共有されたL2キャッシュ、および12の共有されたL3キャッシュを有する。本実施形態において、L2、L3キャッシュのうちの1つは2つの隣接するコアによって共有される。プロセッサ407およびグラフィクスアクセラレータ統合モジュール446は、システムメモリ441と接続し、それはプロセッサメモリ401−402を含み得る。
コヒーレンシは、コヒーレンスバス464を介するインターコア通信を介して、様々なキャッシュ462A−462D、456およびシステムメモリ441に格納されるデータおよび命令に関して維持される。例えば、各キャッシュは、検出された特定のキャッシュラインへの読み出しまたは書き込みに応じてコヒーレンスバス464上で通信するように、関連付けられたキャッシュコヒーレンシロジック/回路を有し得る。一実装例において、キャッシュスヌーピングプロトコルが、キャッシュアクセスをスヌープするように、コヒーレンスバス464上に実装される。キャッシュスヌーピング/コヒーレンシ技術は、当業者によってよく理解され、本発明の基礎となる原理が曖昧になることを回避するように、ここで詳細には説明されないであろう。
一実施形態において、プロキシ回路425は、グラフィックス加速モジュール446をコヒーレンスバス464に通信可能に結合し、グラフィックス加速モジュール446が、コアのピアとしてキャッシュコヒーレンスプロトコルに加わることを可能にする。特に、インタフェース435は、高速リンク440(例えば、PCIeバス、NVLinkなど)上でのプロキシ回路425への接続性を提供し、インタフェース437は、グラフィックス加速モジュール446を高速リンク440に接続する。
一実装例において、アクセラレータ集積回路436は、グラフィックス加速モジュール446の複数のグラフィックス処理エンジン431、432、Nに代わって、キャッシュ管理、メモリアクセス、コンテキスト管理、および割り込み管理サービスを提供する。グラフィックス処理エンジン431、432、Nは各々、別個のグラフィックス処理ユニット(GPU)を含み得る。代替的に、グラフィックス処理エンジン431、432、Nは、グラフィックス実行ユニット、メディア処理エンジン(例えば、ビデオエンコーダ/デコーダ)、サンプラ、およびブリットエンジンなどのGPU内の、異なるタイプのグラフィックス処理エンジンを含み得る。言い換えれば、グラフィックス加速モジュールは、複数のグラフィックス処理エンジン431−432、Nを有するGPUであり得、または、グラフィックス処理エンジン431−432、Nは、共通のパッケージ、ラインカード、またはチップ上で統合された個々のGPUであり得る。
一実施形態において、アクセラレータ集積回路436は、バーチャルトゥフィジカルメモリトランスレーション(エフェクティブトゥリアルメモリトランスレーションとも称される)およびシステムメモリ441にアクセスするためのメモリアクセスプロトコルなどの、様々なメモリ管理機能を実行するためのメモリ管理ユニット(MMU)439を含む。MMU439は、仮想/実効からフィジカル/リアルへのアドレス変換をキャッシュするトランスレーションルックアサイドバッファ(TLB)(図示せず)も含み得る。一実装例において、キャッシュ438は、グラフィックス処理エンジン431−432、Nによる効率的なアクセスのためにデータおよびコマンドを格納する。一実施形態において、キャッシュ438およびグラフィックスメモリ433−434、Mに格納されたデータは、コアキャッシュ462A−462D、456およびシステムメモリ411とのコヒーレントを維持される。すでに述べたように、これは、キャッシュ438およびメモリ433−434、Mに代わってキャッシュコヒーレンシメカニズム(例えば、プロセッサキャッシュ462A−462D、456上でのキャッシュラインの修正/アクセスに関連するキャッシュ438への更新の送信、およびキャッシュ438からの更新の受信)に参加するプロキシ回路425を介して実現し得る。
レジスタのセット445は、グラフィックス処理エンジン431−432、Nによって実行されるスレッドに関するコンテキストデータを格納し、コンテキスト管理回路448は、スレッドコンテキストを管理する。例えば、コンテキスト管理回路448は、コンテキストスイッチの最中の様々なスレッドのコンテキストを保存および復元するように、保存および復元動作を実行し得る(第2のスレッドがグラフィックス処理エンジンによって実行され得るように、例えば、第1のスレッドがどこに保存されるか、および第2のスレッドがどこに格納されるか)。例えば、コンテキストスイッチ上で、コンテキスト管理回路448は、メモリにおける指定された領域(例えば、コンテキストポインタによって識別される)に現在のレジスタの値を格納し得る。次に、コンテキストに戻るときにレジスタの値を復元する。一実施形態において、割り込み管理回路447は、システムデバイスから受信される割り込みを受信および処理する。
一実装例において、グラフィックス処理エンジン431からの仮想/実効アドレスが、システムメモリ411においてMMU439によってリアル/物理アドレスに変換される。アクセラレータ集積回路436の一実施形態は、複数の(例えば、4、8、16の)グラフィクスアクセラレータモジュール446および/または他のアクセラレータデバイスをサポートする。グラフィクスアクセラレータモジュール446は、プロセッサ407上で実行される単一のアプリケーションに専用であってよく、または、複数のアプリケーション間で共有されてもよい。一実施形態において、グラフィックス処理エンジン431−432、Nのリソースが複数のアプリケーションまたは仮想機械(VM)と共有される仮想化グラフィックス実行環境が、提示される。リソースは、処理要求に基づいて、および、VMおよび/またはアプリケーションに関連付けられた優先度に基づいて、異なるVMおよび/またはアプリケーションに割り当てられる「スライス」へと細分化され得る。
したがって、アクセラレータ集積回路は、グラフィックス加速モジュール446のためのシステムへのブリッジとしての機能を果たし、アドレス変換およびシステムメモリキャッシュサービスを提供する。さらに、アクセラレータ集積回路436は、グラフィックス処理エンジン、割り込み、およびメモリ管理の仮想化を管理するように、ホストプロセッサに仮想化ファシリティを提供し得る。
グラフィックス処理エンジン431−432、Nのハードウェアリソースが、ホストプロセッサ407に見られるリアルアドレス空間に明示的にマッピングされるので、任意のホストプロセッサは、実効アドレス値を用いて直接これらリソースをアドレシングし得る。アクセラレータ集積回路436の1つの機能は、一実施形態において、グラフィックス処理エンジン431−432、Nを、それらが独立ユニットとしてシステムに現れるように、物理的に分離することである。
すでに述べたように、示された実施形態において、1または複数のグラフィックスメモリ433−434、Mは、グラフィックス処理エンジン431−432、Nのそれぞれと、それぞれ結合される。グラフィックスメモリ433−434、Mは、グラフィックス処理エンジン431−432、Nのそれぞれによって処理されている命令およびデータを格納する。グラフィックスメモリ433−434、Mは、DRAM(スタック型DRAMを含む)、GDDRメモリ(例えば、GDDR5、GDDR6)、またはHBMなどの揮発性メモリであってよく、および/または、3D XPointまたはNano−Ramなどの不揮発性メモリであってよい。
一実施形態において、高速リンク440を介するデータトラフィックを減らすように、バイアス技術が用いられて、グラフィックスメモリ433−434、Mに格納されたデータが、グラフィックス処理エンジン431−432、Nによって最も頻繁に用いられるであろう、そして、好ましくはコア460A−460Dによって用いられない(少なくとも頻繁にではない)データであることを保証する。同様に、バイアスメカニズムは、コアのキャッシュ462A−462D、456およびシステムメモリ411内で、コアによって必要とされる(そして好ましくは、グラフィックス処理エンジン431−432、Nには必要とされない)データを保持しようと試みる。
図4Cは、アクセラレータ集積回路436がプロセッサ407内に統合される別の実施形態を示す。本実施形態において、グラフィックス処理エンジン431−432、Nは、インタフェース437およびインタフェース435(さらに、任意の形式のバスまたはインタフェースプロトコルを使用してよい)を介して、アクセラレータ集積回路436へと高速リンク440を介して直接通信する。アクセラレータ集積回路436は、図4Bに関して説明されるものと同一の動作を実行し得るが、潜在的に、コヒーレンシバス464およびキャッシュ462A−462D、456に近接する、より高い所与のスループットである。
一実施形態は、専用処理プログラミングモデル(グラフィックス加速モジュール仮想化がない)および共有プログラミングモデル(仮想化を有する)を含む異なるプログラミングモデルをサポートする。後者は、アクセラレータ集積回路436によって制御されるプログラミングモデルと、グラフィックス加速モジュール446によって制御されるプログラミングモデルとを含んでよい。
専用の処理モデルの一実施形態において、グラフィックス処理エンジン431−432、Nは、単一のアプリケーションに専用の、または単一のオペレーティングシステムでの処理に専用のものである。単一のアプリケーションは、グラフィックスエンジン431−432、Nへの他のアプリケーション要求をファンネルし、VM/パーティション内での仮想化を提供することができる。
専用処理プログラミングモデルにおいて、グラフィックス処理エンジン431−432、Nは、複数のVM/アプリケーションパーティションを共有し得る。共有モデルは、グラフィックス処理エンジン431−432、Nを仮想化するようにシステムハイパーバイザを要求し、各オペレーティングシステムによるアクセスを可能にする。ハイパーバイザのない単一パーティションシステムに関して、グラフィックス処理エンジン431−432、Nはオペレーティングシステムによって所有される。両方の場合に、オペレーティングシステムはグラフィックス処理エンジン431−432、Nを仮想化して、各処理またはアプリケーションへのアクセスを提供し得る。
共有プログラミングモデルに関して、グラフィックス加速モジュール446または個別のグラフィックス処理エンジン431−432、Nは、プロセスハンドルを用いてプロセス要素を選択する。一実施形態において、プロセス要素はシステムメモリ411に格納され、本明細書で説明された実効アドレスをリアルアドレスに変換する技術を用いて、アドレス可能である。プロセスハンドルは、グラフィックス処理エンジン431−432、N(すなわち、プロセス要素を、プロセス要素にリンクしたリストに追加する呼び出しシステムソフトウェア)によってそのコンテキストを登録する場合、ホスト処理に提供される実装に固有な値であり得る。プロセスハンドルのうち低いほうの16ビットは、プロセス要素にリンクしたリスト内のプロセス要素のオフセットであり得る。
図4Dは、例示的なアクセラレータ一体化スライス490を示す。本明細書で用いられるように、「スライス」は、アクセラレータ集積回路436の処理リソースの特定の一部を含む。システムメモリ411内のアプリケーション実効アドレス空間482は、プロセス要素483を格納する。一実施形態において、プロセス要素483は、プロセッサ407上で実行されるアプリケーション480からのGPU起動481に応じて格納される。プロセス要素483は、対応するアプリケーション480の処理状態を含む。プロセス要素483に含まれるワーク記述子(WD)484は、アプリケーションによって要求される単一のジョブであってよく、または、ジョブのキューへのポインタを含んでよい。後者の場合、WD484はアプリケーションのアドレス空間482におけるジョブ要求キューへのポインタである。
グラフィックス加速モジュール446および/または個々のグラフィックス処理エンジン431−432、Nは、システムにおける処理のすべてまたはサブセットによって共有され得る。本発明の実施形態は、処理状態をセットアップし、WD484をグラフィックス加速モジュール446に送信し、仮想化環境におけるジョブを開始する、インフラストラクチャを含む。
一実装例において、専用処理プログラミングモデルは実装に固有である。このモデルにおいて、単一プロセスは、グラフィックス加速モジュール446または個別のグラフィックス処理エンジン431を所有する。グラフィックス加速モジュール446は単一プロセスによって所有されるので、グラフィックス加速モジュール446が割り当てられる時点において、ハイパーバイザは所有しているパーティションに関してアクセラレータ集積回路436を初期化し、オペレーティングシステムは所有している処理に関してアクセラレータ集積回路436を初期化する。
動作において、アクセラレータ一体化スライス490におけるWDフェッチユニット491は、グラフィックス加速モジュール446のグラフィックス処理エンジンのうちの1つによって成される動作の指標を含む、次のWD484をフェッチする。WD484からのデータは、図示されるように、レジスタ445に格納され得、MMU439、割り込み管理回路447および/またはコンテキスト管理回路448によって用いられ得る。例えば、MMU439の一実施形態は、OS仮想アドレス空間485内の断片/ページテーブル486にアクセスするための断片/ページウォーク回路を含む。割り込み管理回路447は、グラフィックス加速モジュール446から受信された割り込みイベント492を処理し得る。グラフィックス演算を実行するとき、グラフィックス処理エンジン431−432、Nによって生成された実効アドレス493が、MMU439によってリアルアドレスに変換される。
一実施形態において、レジスタ445のと同一のセットが、各グラフィックス処理エンジン431−432、Nおよび/またはグラフィックス加速モジュール446に関して重複し、ハイパーバイザまたはオペレーティングシステムによって初期化され得る。これらの重複レジスタのそれぞれが、アクセラレータ一体化スライス490に含まれ得る。ハイパーバイザによって初期化され得る例示的なレジスタが、表1において示される。
表1−ハイパーバイザ初期化されたレジスタ
Figure 2021077343
オペレーティングシステムによって初期化され得る例示的なレジスタが、表2に示される。
表2−オペレーティングシステム初期化されたレジスタ
Figure 2021077343
一実施形態において、各WD484は、特定のグラフィックス加速モジュール446および/またはグラフィックス処理エンジン431−432、Nに固有である。それは、グラフィックス処理エンジン431−432、Nがその動作を行う要求をする情報のすべてを含む、または、それは、アプリケーションが動作のコマンドキューが終了するようにセットアップしたメモリ位置へのポインタであり得る。
図4Eは、共有モデルの一実施形態に関する追加の詳細を示す。本実施形態は、プロセス要素リスト499が格納されるハイパーバイザリアルアドレススペース498を含む。ハイパーバイザリアルアドレススペース498は、オペレーティングシステム495に関するグラフィックス加速モジュールエンジンを仮想化するハイパーバイザ496を介してアクセス可能である。
共有プログラミングモデルは、グラフィックス加速モジュール446を用いるシステムにおけるパーティションのすべてまたはサブセットからの、処理のすべてまたはサブセットを可能にする。グラフィックス加速モジュール446が複数の処理およびパーティションによって共有されるプログラミングモデルは2つある:タイムスライスされた共有、およびグラフィックスを対象とする共有。
このモデルにおいて、システムハイパーバイザ496は、グラフィックス加速モジュール446を所有し、その機能を、すべてのオペレーティングシステム495が利用可能にする。システムハイパーバイザ496による仮想化をサポートするグラフィックス加速モジュール446に関して、グラフィックス加速モジュール446は、以下の要求を順守し得る。1)アプリケーションのジョブ要求は自律的でなければならない(すなわち、状態はジョブの間に維持される必要はない)、または、グラフィックス加速モジュール446は、コンテキスト保存および復元メカニズムを提供しなければならない。2)アプリケーションのジョブ要求は、任意の変換の欠陥を含む特定の量の時間が完了することが、グラフィックス加速モジュール446によって保証され、または、グラフィックス加速モジュール446は、ジョブの処理を先取りする能力を提供する。3)グラフィックス加速モジュール446は、対象とされた共有プログラミングモデルにおいて動作する場合、処理の間の公平性を保証しなければならない。
一実施形態において、共有モデルに関して、アプリケーション480は、オペレーティングシステム495に、グラフィックス加速モジュール446のタイプ、ワーク記述子(WD)、権限マスクレジスタ(AMR)値、およびコンテキスト保存/復元エリアポインタ(CSRP)を有するシステムコールを作成するのに必要とされる。グラフィックス加速モジュール446のタイプは、システムコールに関する、目的とされるアクセラレーション機能を説明する。グラフィックス加速モジュール446のタイプは、システムに特定の値であり得る。WDは、グラフィックス加速モジュール446に関して具体的にフォーマットされ、グラフィックス加速モジュール446コマンド、ユーザ定義された構造への実効アドレスポインタ、コマンドのキューへの実効アドレスポインタ、または、グラフィックス加速モジュール446によって成されるべき動作を説明する任意の他のデータ構造の形式であり得る。一実施形態において、AMR値は、現在の処理に関して用いられるAMR状態である。オペレーティングシステムへ渡される値は、AMRを設定するアプリケーションと同様である。アクセラレータ集積回路436およびグラフィックス加速モジュール446の実装が、ユーザ権限マスクオーバーライドレジスタ(UAMOR)をサポートしない場合、オペレーティングシステムは、ハイパーバイザ呼び出しにおいてAMRを渡す前のAMR値に、現在のUAMOR値を適用し得る。ハイパーバイザ496は、任意選択的に、AMRをプロセス要素483に配置する前に、現在の権限マスクオーバーライドレジスタ(AMOR)値を適用し得る。一実施形態において、CSRPは、コンテキスト状態をセーブおよび復元するための、グラフィックス加速モジュール446に関するアプリケーションのアドレス空間482の領域の実効アドレスに含まれるレジスタ445のうちの1つである。ジョブの間に保存されるために必要とされる状態がない場合、または、ジョブがプリエンプトされた場合は、このポインタは、任意選択的である。コンテキスト保存/復元領域は、ピニングされたシステムメモリであり得る。
システムコールを受信すると、オペレーティングシステム495は、アプリケーション480が登録されており、グラフィックス加速モジュール446を用いる権限を与えられていることを、確認し得る。オペレーティングシステム495は次に、表3に示される情報によってハイパーバイザ496を呼び出す。
表3−ハイパーバイザ呼び出しパラメータへのOS
Figure 2021077343
ハイパーバイザ呼び出しを受信すると、ハイパーバイザ496は、オペレーティングシステム495が登録されており、グラフィックス加速モジュール446を用いる権限を与えられていることを、確認する。ハイパーバイザ496は、次に、対応するグラフィックス加速モジュール446のタイプに関するプロセス要素にリンクしたリストに、プロセス要素483を入力する。プロセス要素は、表4に示された情報を含み得る。
表4−プロセス要素情報
Figure 2021077343
一実施形態において、ハイパーバイザは、複数のアクセラレータ一体化スライス490レジスタ445を初期化する。
図4Fに図示されるように、本発明の一実施形態は、物理プロセッサメモリ401−402およびGPUメモリ420−423にアクセスするように用いられる共通仮想メモリアドレス空間を介してアドレス可能な、ユニファイドメモリを用いる。この実装において、GPU410−413上で実行される動作は、同一の仮想/実効メモリアドレス空間を使用してプロセッサメモリ401−402にアクセスし、逆も同じであり、これによりプログラミング性を簡略化する。一実施形態において、仮想/実効アドレス空間の第1の部分はプロセッサメモリ401に割り当てられ、第2の部分は第2プロセッサメモリ402に、第3の部分はGPUメモリ420に、などと割り当てられる。仮想/実効メモリ空間の全体(実効アドレス空間と称されることがある)は、これにより、プロセッサメモリ401−402とGPUメモリ420−423のそれぞれにわたって分配され、仮想アドレスがそのメモリにマッピングされた状態で、任意のプロセッサまたはGPUが任意の物理メモリにアクセスすることを可能にする。
一実施形態において、1または複数のMMU439A−439E内のバイアス/コヒーレンス管理回路494A−494Eは、ホストプロセッサ(例えば、405)のキャッシュとGPU410−413のキャッシュとの間のキャッシュコヒーレンスを保証し、特定タイプのデータが格納されるべき物理メモリを示すバイアス技術を実装する。バイアス/コヒーレンス管理回路494A−494Eの複数のインスタンスが図4Fに図示される一方、バイアス/コヒーレンス回路は、1または複数のホストプロセッサ405のMMU内に、および/またはアクセラレータ集積回路436内に実装され得る。
一実施形態は、GPU付属メモリ420−423がシステムメモリの一部としてマッピングされ、共有仮想メモリ(SVM)技術を用いて、完全なシステムキャッシュコヒーレンスに関連付けられる典型的な性能の欠点に苦しむことなく、アクセスされることを可能にする。面倒なキャッシュコヒーレンスオーバヘッドなしにシステムメモリとしてアクセスされるべきGPU付属メモリ420−423の能力は、GPUオフロードに関して有益な動作環境を提供する。この配置は、ホストプロセッサ405のソフトウェアが、従来のI/O DMAデータコピーのオーバヘッドなしに、オペランドをセットアップし、計算結果にアクセスすることを可能にする。そのような従来のコピーは、単純なメモリアクセスと比較してすべてが非効率である、ドライバ呼び出し、割り込み、およびメモリマッピング型I/O(MMIO)アクセスを含む。同時に、キャッシュコヒーレンスオーバヘッドなしにGPU付属メモリ420−423にアクセスする能力は、オフロード計算の実行時間にきわめて重大なことがある。例えば、実質的なストリーミング書き込みメモリトラフィックの場合、キャッシュコヒーレンスオーバヘッドはGPU410−413によって見られる有効書き込み帯域幅を著しく減らすことがある。オペランドセットアップの効率性、結果アクセスの効率性、およびGPU計算の効率性はすべて、GPUオフロードの有効性の決定に役割を果たす。
一実装例において、GPUバイアスとホストプロセッサバイアスとの間の選択は、バイアストラッカーデータ構造によって行われる。例えば、GPU付属メモリページにつき1または2ビットを含むページ粒状(page−granular)の構造であり得る(つまり、メモリページの粒度において制御される)バイアステーブルが、用いられ得る。バイアステーブルは、GPU410−413におけるバイアスキャッシュ(例えば、頻繁に/最近用いられられるバイアステーブルのエントリをキャッシュする)の有無にかかわらず、1または複数のGPU付属メモリ420−423のストールン(stolen)メモリ範囲において実装され得る。代替的に、全体のバイアステーブルがGPU内で維持され得る。
一実装例において、GPU付属メモリ420−423への各アクセスに関連付けられるバイアステーブルエントリは、GPUメモリへの実際のアクセスの前にアクセスされ、以下の動作を発生させる。第1に、GPUバイアスにおいてこれらのページを見つけるGPU410−413からのローカルリクエストは、対応するGPUメモリ420−423に直接転送される。ホストバイアスにおいてこれらのページを見つけるGPUからのローカルリクエストは、プロセッサ405に転送される(例えば、上で検討された高速リンク上で)。一実施形態において、ホストプロセッサバイアスにおいて要求されたページを見つけるプロセッサ405への要求は、標準メモリ読み出と同様の要求を完了する。代替的に、GPUバイアスのあるページに関する要求は、GPU410−413に転送され得る。GPUは次に、現在はそのページを用いていないホストプロセッサバイアスに、ページを移行し得る。
ページのバイアス状態は、ソフトウェアベースのメカニズム、ハードウェアにアシストされたソフトウェアベースのメカニズム、または、限定された場合のセット、純粋なハードウェアベースのメカニズムのいずれかによって変更される。
バイアス状態の変化に関する1つのメカニズムは、APIコール(例えば、OpenCL)を用い、次に、GPUのデバイスドライバを呼び出し、次に、メッセージをそれに向いているGPUに送信し(またはコマンド記述子をキューに加え)てバイアス状態を変更し、いくつかの移行のために、ホストにおいてキャッシュフラッシュ処理を実行する。キャッシュフラッシュ処理は、ホストプロセッサ405バイアスからGPUバイアスへの移行を要求されるが、逆の移行は要求されない。
一実施形態において、キャッシュコヒーレンシは、GPUバイアスのあるページを、ホストプロセッサ405によって一時的にキャッシュ不能にすることを維持する。これらのページにアクセスするように、プロセッサ405は、実装に応じて、ただちにアクセスを許可してもしなくてもよいGPU410からのアクセスを要求し得る。したがって、ホストプロセッサ405とGPU410との間の通信を減らすように、GPUバイアスのあるページが、GPUによって要求されるがホストプロセッサ405によっては要求されないものであること、およびその逆を保証するのに有益である。グラフィックス処理パイプライン
図5は、実施形態による、グラフィックス処理パイプライン500を示す。一実施形態において、グラフィックスプロセッサは、図示されたグラフィックス処理パイプライン500を実装し得る。グラフィックスプロセッサは、一実施形態において、図1の並列プロセッサ112の変形例である、図2Aの並列プロセッサ200などの、本明細書に説明された並列処理サブシステム内に含まれ得る。様々な並列処理システムが、本明細書で説明された並列処理ユニット(例えば、図2Aの並列処理ユニット202)の1または複数のインスタンスを介して、グラフィックス処理パイプライン500を実装し得る。例えば、シェーダユニット(例えば、図2Cのグラフィックスマルチプロセッサ234)は、頂点処理ユニット504、テセレーション制御処理ユニット508、テセレーション評価処理ユニット512、ジオメトリ処理ユニット516、および断片/画素処理ユニット524のうち1または複数の機能を実行するように構成され得る。データアセンブラ502、プリミティブアセンブラ506、514、518、テセレーションユニット510、ラスタライザ522、およびラスタ動作ユニット526の機能は、処理クラスタ(例えば、図2Aの処理クラスタ214)内、および対応するパーティションユニット(例えば、図2Aのパーティションユニット220A−220N)内の他の処理エンジンによってもまた実行され得る。グラフィックス処理パイプライン500は、1または複数の機能に関する専用の処理ユニットを用いてもまた実装され得る。一実施形態において、グラフィックス処理パイプライン500の1または複数の部分は、汎用プロセッサ(例えば、CPU)内の並列処理ロジックによって実行され得る。一実施形態において、グラフィックス処理パイプライン500の1または複数の部分は、図2Aのメモリインタフェース218のインスタンスであり得るメモリインタフェース528を介して、オンチップメモリ(例えば、図2Aにあるような並列プロセッサメモリ222)にアクセスし得る。
一実施形態において、データアセンブラ502は、表面およびプリミティブに関する頂点データを収集する処理ユニットである。データアセンブラ502は次に、頂点アトリビュートを含む頂点データを、頂点処理ユニット504に出力する。頂点処理ユニット504は、頂点シェーダプログラムを実行し、頂点シェーダプログラムによって特定された頂点データのライティングおよび変換を行う、プログラマブル実行ユニットである。頂点処理ユニット504は、頂点データの処理での使用のために、キャッシュ、ローカル、またはシステムメモリに格納されたデータを読み出し、頂点データをオブジェクトベース座標表現からワールドスペース座標空間へ、または正規化デバイス座標空間へと変換するようにプログラミングされてよい。
プリミティブアセンブラ506の第1インスタンスは、頂点処理ユニット504から頂点アトリビュートを受信する。プリミティブアセンブラ506は、必要に応じて格納された頂点アトリビュートを読み取り、テセレーション制御処理ユニット508による処理のために初期グラフィックスを構成する。グラフィックスプリミティブは、様々なグラフィックス処理アプリケーションプログラミングインタフェース(API)によってサポートされるような、三角形、線セグメント、ポイント、パッチなどを含む。
テセレーション制御処理ユニット508は、ジオメトリックパッチのためのコントロールポイントとして入力頂点を処理する。コントロールポイントは、パッチからの入力表現(例えば、パッチのベース)から、テセレーション評価処理ユニット512によるサーフェス評価での使用に適した表現へと変換される。テセレーション制御処理ユニット508は、ジオメトリックパッチのエッジに関するテセレーション要因もまた算出し得る。テセレーション要因は、単一エッジに適用され、エッジに関連付けられる詳細の表示依存レベルを定量化する。テセレーションユニット510は、パッチのエッジに関するテセレーション要因を受信するように構成され、パッチを、線、三角形、または四角形プリミティブなどの複数のジオメトリックプリミティブにテセレート(tessellate)し、それはテセレーション評価処理ユニット512に伝送されされる。テセレーション評価処理ユニット512は、細分化されたパッチのパラメータ化された座標上で動作し、ジオメトリックプリミティブに関連付けられた各頂点に関する表面表現および頂点アトリビュートを生成する。
プリミティブアセンブラ514の第2インスタンスは、テセレーション評価処理ユニット512から頂点アトリビュートを受信し、必要に応じて、格納され頂点アトリビュートを読み取り、ジオメトリ処理ユニット516による処理のために初期グラフィックスを構成する。ジオメトリ処理ユニット516は、ジオメトリシェーダプログラムによって特定されるように、プリミティブアセンブラ514から受信されるグラフィックスプリミティブを変換する、ジオメトリシェーダプログラムを実行するプログラマブル実行ユニットである。一実施形態において、ジオメトリ処理ユニット516は、グラフィックスプリミティブを1または複数の新しいグラフィックスプリミティブにさらに分割し、新しいグラフィックスプリミティブをラスタライズするために用いられるパラメータを算出するように、プログラミングされる。
いくつかの実施形態において、ジオメトリ処理ユニット516は、ジオメトリストリームに要素を追加または削除し得る。ジオメトリ処理ユニット516は、新しいグラフィックスプリミティブを特定するパラメータおよび頂点をプリミティブアセンブラ518に出力する。プリミティブアセンブラ518は、ジオメトリ処理ユニット516からの頂点およびパラメータを受信して、表示域スケール、カル(cull)、およびクリップユニット520による処理のために初期グラフィックスを構成する。ジオメトリ処理ユニット516は、ジオメトリデータの処理での使用のために、並列プロセッサメモリまたはシステムメモリに格納されるデータを読み出す。表示域スケール、カル、およびクリップユニット520は、クリッピング、カリング(culling)、および視点スケーリングを実行し、処理されたグラフィックスプリミティブをラスタライザ522に出力する。
ラスタライザ522は、デプスカリング(depth culling)および他のデプスベースの最適化を実行し得る。ラスタライザ522は、新しいグラフィックスプリミティブ上でのスキャン変換もまた実行し、断片を生成し、これら断片および関連付けられたカバレッジデータを断片/画素処理ユニット524に出力する。断片/画素処理ユニット524は、断片シェーダプログラムまたは画素シェーダプログラムを実行するように構成されたプログラム可能な実行ユニットである。断片/画素処理ユニット524は、断片または画素シェーダプログラムによって特定されるように、ラスタライザ522から受信た断片または画素を変換する。例えば、断片/画素処理ユニット524は、限定されることはないが、ラスタ動作ユニット526に出力されるシェードされた断片または画素を生成する、テクスチャマッピング、シェーディング、ブレンディング、テクスチャ訂正、および観点訂正を含む、動作を実行するようにプログラミングされ得る。断片/画素処理ユニット524は、断片データを処理する場合に用いるために、並列プロセッサメモリまたはシステムメモリのいずれかに格納されるデータを読み出し得る。断片または画素シェーダプログラムは、処理ユニットに関して構成されたサンプリングレートに応じて、サンプル、画素、タイル、または他の粒度でシェーディングするように構成され得る。
ラスタ動作ユニット526は、限定されることはないが、ステンシル、zテスト、ブレンディング、および同様のものを含むラスタ動作を実行し、1または複数のディスプレイデバイス110上に表示されるように、または1または複数のプロセッサ102または並列プロセッサ112のうちの1つによるさらなる処理のために、グラフィックスメモリ(例えば、図2Aにあるような並列プロセッサメモリ222、および/または図1にあるようなシステムメモリ104)に格納されるべき、処理されたグラフィックスデータとして画素データを出力する処理ユニットである。いくつかの実施形態において、ラスタ動作ユニット526は、メモリに書き込まれたzまたは色データを圧縮し、メモリから読み出されたzまたは色データを圧縮解除するように構成される。機械学習概要
上述のアーキテクチャは、機械学習モデルを用いて訓練を実行して動作を推論するように適用されてよい。機械学習は、多くの種類のタスクを解決することに成功してきた。機械学習アルゴリズム(例えば、ニューラルネットワーク)を訓練して用いる場合に起こる計算は、もともと、効率的な並列実装に役立つ。したがって、汎用グラフィックス処理ユニット(GPGPU)などの並列プロセッサは、ディープニューラルネットワークの実際の実装において著しい役割を果たしてきた。単一の命令で複数のスレッド(SIMT)アーキテクチャによるパラレルグラフィックスプロセッサは、グラフィックスパイプラインにおける並行処理量を最大化するように設計される。SIMTアーキテクチャにおいて、パラレルスレッドの群は、処理の効率性を高めるように、可能な限り頻繁に、プログラム命令を一緒に同期的に実行しようと試みる。並列機械学習アルゴリズム実装によって提供される効率性は、高容量ネットワークのの使用を可能にし、これらネットワークがより大きいデータセット上で訓練されることを可能にする。
機械学習アルゴリズムは、データのセットに基づいて学習し得るアルゴリズムである。機械学習アルゴリズムの複数の実施形態は、データセット内での高水準な抽出をモデリングするように設計され得る。例えば、画像認識アルゴリズムは、いくつかのカテゴリのうちどれが、所与の入力のどれに属するかを決定するように用いられることができ、回帰アルゴリズムは、入力を与えられると数値を出力することができ、パターン認識アルゴリズムは、変換されたテキストを生成するか、またはテキストを会話および/または音声認識に実行するように用いられることができる。
機械学習アルゴリズムの例示的なタイプはニューラルネットワークである。多くのタイプのニューラルネットワークがあり、ニューラルネットワークのシンプルなタイプはフィードフォワードネットワークである。フィードフォワードネットワークは、ノードが層に配置される非巡回グラフとして実装されてよい。典型的には、フィードフォワードネットワークトポロジは、少なくとも1つの隠れ層により分離される入力層および出力層を含む。隠れ層は、入力層により受信される入力を出力層において出力を生成するために有用な表現へと変換される。ネットワークノードは、隣接する層におけるノードにエッジを介して完全に接続されるが、各層内のノード間にエッジは存在しない。フィードフォワードネットワークの入力層のノードにおいて受信されるデータは、層を接続するエッジのそれぞれに関連付けられる係数(「重み」)に基づいてそれぞれネットワーク内の各連続層のノードの状態を算出する活性化関数を介して出力層のノードに伝搬(つまり、「フィードフォワード」)される。実行されるアルゴリズムにより表される特定のモデルに応じて、ニューラルネットワークアルゴリズムからの出力は、様々な形式を取ることができる。
機械学習アルゴリズムが特定の問題をモデル化するために用いられ得る前に、アルゴリズムは、訓練データセットを用いて訓練される。ニューラルネットワークを訓練することは、ネットワークトポロジを選択すること、訓練データのセットを用いてネットワークによりモデル化される問題を表現すること、訓練データセットのすべてのインスタンスに関する最小限のエラーでネットワークモデルが実行するまで、重みを調整することを含む。例えば、ニューラルネットワークに対する教師あり学習の訓練プロセスの最中に、訓練データセット内のインスタンスを表す入力に応じてネットワークにより生成される出力は、そのインスタンスに対して「正しく」分類された出力と比較され、当該出力と分類された出力と間の差を表すエラー信号が計算され、エラー信号としてのエラーがネットワークの層を通じて後方に伝播されることを最小限に抑えるように、接続に関連付けられる重みが調整される。ネットワークは、訓練データセットのインスタンスから生成される出力のそれぞれに対するエラーが最小限に抑えられる場合に「訓練される」ことが考慮されている。
機械学習アルゴリズムの精度は、アルゴリズムを訓練するために用いられるデータセットの品質により大きく影響され得る。訓練プロセスは、計算集約型であり得、従来の汎用プロセッサ上で膨大な時間を必要とし得る。したがって、並列処理ハードウェアは、多くのタイプの機械学習アルゴリズムを訓練するために用いられる。これは、ニューラルネットワーク内の係数を調整する際に実行される計算が、もともとそれら自体が並列実装に役立つので、ニューラルネットワークの訓練を最適化するために特に有用である。具体的には、多くの機械学習アルゴリズムおよびソフトウェアアプリケーションが、汎用グラフィックス処理デバイス内の並列処理ハードウェアの利用に適合されている。
図6は、機械学習ソフトウェアスタック600の一般化された図である。機械学習アプリケーション602は、訓練データセットを用いてニューラルネットワークを訓練するように構成され得、または、マシンインテリジェンスを実装するように、訓練されたディープニューラルネットワークを用い得る。機械学習アプリケーション602は、ニューラルネットワークおよび/または展開前にニューラルネットワークを訓練するために用いられ得る専用のソフトウェアのための訓練および推論機能を含み得る。機械学習アプリケーション602は、限定されることはないが、画像認識、マッピングおよび位置特定、自律航法、音声合成、医用イメージング、または言語変換を含む、任意のタイプのマシンインテリジェンスを実装し得る。
機械学習アプリケーション602用のハードウェアアクセラレーションは、機械学習フレームワーク604を介して可能にされ得る。機械学習フレームワーク604は、機械学習プリミティブのライブラリを提供できる。機械学習プリミティブは、機械学習アルゴリズムにより一般的に実行される基本的な動作である。機械学習フレームワーク604を用いることなく、機械学習アルゴリズムの開発者は、機械学習アルゴリズムに関連付けられる主計算論理を作成および最適化し、次に、新たな並列プロセッサが開発されるように、計算論理を再度最適化するのに必要とされるであろう。代わりに、機械学習アプリケーションは、機械学習フレームワーク604によって提供るプリミティブを用いて必要な計算を実行するように構成され得る。例示的なプリミティブは、テンソル畳み込み、活性化関数、およびプーリングを含み、それらは実行される計算操作である一方で、畳み込みニューラルネットワーク(CNN)を訓練している。機械学習フレームワーク604は、行列およびベクトル演算などの多くの機械学習アルゴリズムにより実行される基本的な線形代数サブプログラムを実装するためにプリミティブもまた提供できる。
機械学習フレームワーク604は、機械学習アプリケーション602から受信された入力データを処理し得、コンピュートフレームワーク606への適切な入力を生成し得る。コンピュートフレームワーク606は、機械学習フレームワーク604がGPGPUハードウェア610のアーキテクチャの詳しい知識を有することを要求することなく、機械学習フレームワーク604がGPGPUハードウェア610を介してハードウェアアクセラレーションを活用することを可能とするように、GPGPUドライバ608に提供される基礎的な命令を要約し得る。さらに、コンピュートフレームワーク606は、GPGPUハードウェア610の様々なタイプの、および様々な生成にわたって、機械学習フレームワーク604に関するハードウェアアクセラレーションを可能とし得る。GPGPU機械学習アクセラレーション
図7は、実施形態による汎用グラフィックス処理ユニット700を示す。一実施形態において、汎用処理ユニット(GPGPU)700は、ディープニューラルネットワークの訓練に関連付けられたタイプの計算ワークロードを、特に効率的に処理するように構成され得る。さらに、GPGPU700は、特に、ディープニューラルネットワークに対する訓練スピードを改善させるマルチGPUクラスタを作成するGPGPUの他の例に直接関連し得る。
GPGPU700は、ホストプロセッサとの接続を可能にするホストインタフェース702を含む。一実施形態において、ホストインタフェース702はPCI Expressインタフェースである。しかしながら、ホストインタフェースはベンダ特有の通信インタフェースまたは通信ファブリックであってもよい。GPGPU700は、ホストプロセッサからコマンドを受信し、グローバルスケジューラ704を用いて、これらのコマンドに関連付けられる実行スレッドをコンピュートクラスタ706A−706Hのセットに分散させる。コンピュートクラスタ706A−706Hは、キャッシュメモリ708を共有する。キャッシュメモリ708はコンピュートクラスタ706A−706H内でのキャッシュメモリにおいて高レベルキャッシュとしての機能を果たし得る。
GPGPU700は、メモリコントローラ712A−712Bのセットを介してコンピュートクラスタ706A−Hと結合されるメモリ714A−Bを含む。様々な実施形態において、メモリ714A−714Bは、ダイナミックランダムアクセスメモリ(DRAM)、または、グラフィックスダブルデータレート(GDDR)メモリを含むシンクロナスグラフィックスランダムアクセスメモリ(SGRAM)などのグラフィックスランダムアクセスメモリを含む、様々なタイプのメモリデバイスを含み得る。一実施形態において、メモリ714A−714Nは、限定されることはないが高帯域幅メモリ(HBM)を含む、3Dスタックメモリもまた含んでよい。
一実施形態において、コンピュートクラスタ706A−706Hのそれぞれは、図4Aのグラフィックスマルチプロセッサ400などのグラフィックスマルチプロセッサのセットを含む。コンピュートクラスタのグラフィックスマルチプロセッサは、機械学習計算に適したものを含む精度の範囲で、計算操作を実行し得る複数のタイプの整数および浮動小数点ロジックユニットである。例えば、および、一実施形態において、コンピュートクラスタ706A−Hのそれぞれにおける浮動小数点ユニットの少なくともあるサブセットについては、16ビットまたは32ビット浮動小数点演算を実行するように構成され得、一方、浮動小数点ユニットの異なるサブセットについては、64ビット浮動小数点演算を実行するように構成され得る。
GPGPU700の複数のインスタンスは、コンピュートクラスタとして動作するように構成されてよい。同期およびデータ交換のためにコンピュートクラスタにより用いられる通信メカニズムは、実施形態にわたって変化する。一実施形態において、GPGPU700の複数のインスタンスは、ホストインタフェース702を介して通信する。一実施形態において、GPGPU700は、GPGPUの他のインスタンスと直接接続を可能にするGPUリンク710によってGPGPU700と結合するI/Oハブ709を含む。一実施形態において、GPUリンク710は、GPGPU700の複数のインスタンス間の通信および同期を可能にする専用のGPU間ブリッジに結合される。一実施形態において、GPUリンク710は他のGPGPUまたは並列プロセッサとデータを送受信するように、高速インターコネクトと結合する。一実施形態において、GPGPU700の複数のインスタンスは、別個のデータ処理システムに位置しており、ホストインタフェース702を介してアクセス可能なネットワークデバイスを介して通信する。一実施形態において、GPUリンク710は、ホストインタフェース702に加えてまたは代替として、ホストプロセッサへの接続を可能にするように構成され得る。
一方、GPGPU700の図示される構成は、ニューラルネットワークを訓練するように構成され得、一実施形態では、高性能または低電力推論プラットフォーム内での展開のために構成され得るGPGPU700の代替構成を提供する。推論構成において、GPGPU700は、訓練構成と比較してより少ない数のコンピュートクラスタ706A−706Hを含む。さらに、メモリ714A−714Bに関連付けられたメモリ技術は、推論と訓練構成との間で異なることがある。一実施形態において、GPGPU700の推論構成は、特定の命令を推論することをサポートすることができる。例えば、推論構成は、展開されたニューラルネットワークの推論動作の最中に一般的に用いられる、1または複数の8ビット整数ドット積命令のサポートを提供し得る。
図8は、実施形態による、マルチGPUコンピューティングシステム800を示す。マルチGPUコンピューティングシステム800は、ホストインタフェーススイッチ804を介して複数のGPGPU806A−806Dと結合されたプロセッサ802を含み得る。ホストインタフェーススイッチ804は、一実施形態において、プロセッサ802を、それを介してプロセッサ802がGPGPU806A−806Dのセットと通信し得るPCIエクスプレスバスと、結合するPCI Expressスイッチデバイスである。複数のGPGPU806A−806Dのそれぞれは、図7のGPGPU700のインスタンスであってよい。GPGPU806A−806Dは、高速ポイントツーポイントGPU間リンク816のセットを介して相互接続できる。高速GPU間リンクは、図7にあるようなGPUリンク710などの、専用のGPUリンクを介してGPGPU806A−806Dのそれぞれに接続できる。P2P GPUリンク816は、プロセッサ802が接続されるホストインタフェースバスを介した通信を要求することなく、GPGPU806A−806Dのそれぞれの間の直接通信を可能にする。P2P GPUリンクに関するGPU間トラフィックを用いて、ホストインタフェースバスは、システムメモリアクセスに対して依然として利用可能なままである、または、例えば、1または複数のネットワークデバイス介してマルチGPUコンピューティングシステム800の他のインスタンスと通信する。一方、示された実施形態では、GPGPU806A−Dは、ホストインタフェーススイッチ804を介してプロセッサ802に接続し、一実施形態において、プロセッサ802は、P2P GPUリンク816の直接的なサポートを含み、GPGPU806A−806Dに直接接続できる。 機械学習ニューラルネットワーク実装
本明細書において説明される実施形態により提供されるコンピューティングアーキテクチャは、特に、機械学習のためにニューラルネットワークを訓練および展開するのに適したタイプの並列処理を実行するように構成され得る。ニューラルネットワークは、グラフ関係を有する関数のネットワークとして一般化され得る。当技術分野で周知のように、様々なタイプのニューラルネットワーク実装が、機械学習において用いられる。ある例示的なタイプのニューラルネットワークは、前に説明したように、フィードフォワードネットワークである。
第2の例示的なタイプのニューラルネットワークは、畳み込みニューラルネットワーク(CNN)である。CNNは、画像データなどの、既知のグリッド式のトポロジを有するデータを処理するための、専用のフィードフォワードニューラルネットワークである。したがって、CNNは、視覚および画像認識アプリケーションを算出するために一般的に用いられるが、それらは、音声および言語処理などの他のタイプのパターン認識に用いられてもよい。CNN入力層におけるノードは、「フィルタ」(網膜に見つけられる受容野から発想を得た特徴検出)のセットにまとめられ、フィルタの各セットの出力は、ネットワークの連続層においてノードに伝搬される。CNN用の計算は、そのフィルタの出力を生成するために各フィルタに対する畳み込み数学演算を適用することを含む。畳み込みは、2つのオリジナル関数のうちの一方の修正版である第3の関数を生成するために2つの機能により実行される特殊な数学演算である。畳み込みネットワークの用語において、畳み込みに対する第1の関数は、入力と称され得る一方、第2の関数は、畳み込みカーネルと称され得る。出力は、特徴マップと称されてよい。例えば、畳み込み層への入力は、入力画像の様々な色成分を定義するデータの多次元アレイであり得る。畳み込みカーネルは、パラメータの多次元アレイであり得、パラメータは、ニューラルネットワークのための訓練プロセスにより適合される。
再帰型ニューラルネットワーク(RNN)は、層間のフィードバック接続を含むフィードフォワードニューラルネットワークのファミリである。RNNは、ニューラルネットワークの異なる部分にわたってパラメータデータを共有することにより順次データのモデリングを可能にする。RNNに関するアーキテクチャは、サイクルを含む。サイクルは、RNNからの出力データの少なくとも一部が、順番に後続の入力を処理するためのフィードバックとして用いられるように、変数の現在の値が将来の時点でそれ自体の値に及ぼす影響を表す。この特徴は、言語データが構成され得る可変性に起因するRNNの言語処理を特に有用にする。
以下に説明される図は、例示的なフィードフォワード、CNNおよびRNNネットワークを提示し、ならびに、これらのタイプのネットワークのそれぞれをそれぞれ訓練および展開するための一般的な処理を説明する。これらの説明が例示的なものであり、本明細書において説明される任意の特定の実施形態について限定されなく、図示されるコンセプトは、一般的なディープニューラルネットワークおよび機械学習技術に一般的に適用され得ることが理解されるであろう。
上述した例示的なニューラルネットワークは、深層学習を実行するために用いられ得る。深層学習は、ディープニューラルネットワークを用いた機械学習である。深層学習において用いられるディープニューラルネットワークは、単一の隠れ層のみを含む浅いニューラルネットワークとは対照的に、複数の隠れ層から構成される人工ニューラルネットワークである。より深いニューラルネットワークは、一般的に、訓練するためにより計算集約型である。しかしながら、ネットワークの追加の隠れ層は、浅い機械学習技術と比較して出力エラーを減らす結果になるマルチステップパターン認識を可能にする。
深層学習において用いられるディープニューラルネットワークは、典型的には、数学モデルに提供される特徴表現に基づいて動作(例えば、オブジェクト分類、音声認識など)を実行できる数学モデルを表すバックエンドネットワークに結合される、特徴認識を実行するフロントエンドネットワークを含む。深層学習は、モデルに対して実行される手作りされた機能エンジニアリングを要求することなく実行される機械学習を可能にする。代わりに、ディープニューラルネットワークは、入力データ内の統計的な構成または相関関係に基づいて特徴を学習できる。学習される特徴は、検出された特徴を出力にマッピングすることができる数学モデルに提供され得る。ネットワークにより用いられる数学モデルは、一般的には、実行される特定のタスクに専用のものであり、異なるモデルが、異なるタスクを実行するために用いられるであろう。
一度ニューラルネットワークが構築されると、学習モデルは、ネットワークを訓練して特定のタスクを実行するためにネットワークに適用され得る。学習モデルは、ネットワークの出力エラーを減らすために、モデル内の重みをどのように調整するかを記述する。誤差逆伝播法は、ニューラルネットワークを訓練するために用いられる一般的な方法である。入力ベクトルが、処理のためにネットワークに提示される。ネットワークの出力は、損失関数を用いて所望の出力と比較され、出力層におけるニューロンのそれぞれに対してエラー値が計算される。次に、各ニューロンが元の出力に対するその寄与を大ざっぱに表す関連のエラー値を有するまで、エラー値は、後方に伝搬される。次に、ネットワークは、確率的勾配降下アルゴリズムなどのアルゴリズムを用いてこれらのエラーから学習して、ニューラルネットワークの重みを更新できる。
図9Aから図9Bは、例示的な畳み込みニューラルネットワークを示す。図9Aは、CNN内の様々な層を示す。図9Aに示されるように、画像処理をモデル化するために用いられる例示的なCNNは、入力画像の赤、緑および青(RGB)成分を説明する入力902を受信できる。入力902は、複数の畳み込み層(例えば、畳み込み層904、畳み込み層906)により処理され得る。複数の畳み込み層からの出力は、任意選択的に、完全に接続された層908のセットによって処理され得る。完全に接続された層におけるニューロンは、フィードフォワードネットワークに関して前に説明したように、前の層におけるすべてのアクティベーションへの完全な接続を有する。完全に接続された層908からの出力は、ネットワークからの出力結果を生成するために用いられ得る。完全に接続された層908内のアクティベーションは、畳み込みの代わりに、行列乗算を用いて算出され得る。すべてのCNN実装が、完全に接続された層908を利用するとは限らない。例えば、いくつかの実装においては、畳み込み層906はCNNに関する出力を生成し得る。
畳み込み層は、疎に接続され、これは、完全に接続された層908において見つけられる従来のニューラルネットワーク構成とは異なる。従来のニューラルネットワーク層は、完全に接続されており、したがって、あらゆる出力ユニットがあらゆる入力ユニットとインタラクトする。しかしながら、フィールドの畳み込みの出力は、(フィールド内のそれぞれのノードの状態値それぞれの代わりに)図示されるような後続の層のノードに入力されるので、畳み込み層は疎に接続される。畳み込み層に関連付けられるカーネルは、次の層に送信される出力の畳み込み演算を実行する。畳み込み層内で実行される次元削減は、CNNがスケーリングして大きな画像を処理することを可能にする一態様である。
図9Bは、CNNの畳み込み層内の例示的な計算ステージを示す。CNNの畳み込み層912の入力は、畳み込み層914の3つのステージにおいて処理され得る。3つのステージは、畳み込みステージ916、検出ステージ918、およびプーリングステージ920を含み得る。畳み込み層914は、次に、連続畳み込み層にデータを出力し得る。ネットワークの最終的な畳み込み層は、例えば、CNNへの入力に対する分類値を生成するために、出力特徴マップデータを生成できる、または、完全に接続された層に入力を提供できる。
畳み込みステージ916は、いくつかの畳み込みを並列に実行して、線形活性化の組を生成する。畳み込みステージ916はアフィン変換を含み得、アフィン変換は、線形変換プラス移動として特定され得る任意の変換である。アフィン変換は、回転、移動、スケーリング、およびこれらの変換の組み合わせを含む。畳み込みステージは、入力内の特定の領域に接続される機能(例えば、ニューロン)の出力を算出し、ニューロンに関連付けられる局所領域として決定され得る。ニューロンは、ニューロンの重みと、ニューロンが接続される局所的な入力における領域の重みとの間のドット積を算出する。畳み込みステージ916からの出力は、畳み込み層914の連続的なステージにより処理される線形活性化の組を定義する。
線形活性化は、検出ステージ918によって処理され得る。検出ステージ918において、各線形活性化は非線形活性化関数によって処理される。非線形活性化関数は、畳み込み層の受容野に影響を与えることなく、ネットワーク全体の非線形的性質を高める。いくつかのタイプの非線形活性化関数が用いられ得る。1つの特定のタイプは、正規化線形ユニット(ReLU)であり、これは、アクティベーションがゼロに閾値設定されるように、f(x)=max(0,x)として定義される活性化関数を用いる。
プーリングステージ920は、畳み込み層906の出力を、すぐ近くの出力の要約統計量と置き換えるプーリング関数を用いる。プーリング関数は、並進不変性(translation invariance)をニューラルネットワークに導入するために用いられることができ、したがって、入力への小さい変換はプールされる出力を変更しない。入力データ内の特徴の存在が特徴の正確な位置よりも重要なシナリオにおいて、局所的な移動に対する不変性は有用であり得る。様々なタイプのプーリング関数は、最大プーリング、平均プーリングおよびl2−ノルムプーリングを含むプーリングステージ920の最中に用いられ得る。さらに、いくつかのCNN実装は、プーリングステージを含まない。代わりに、そのような実装は、以前の畳み込みステージと比較して、増加したストライドを有する代わりのおよび追加の畳み込みステージである。
畳み込み層914からの出力は、次に、次の層922によって処理され得る。次の層922は、追加の畳み込み層または完全に接続された層908のうちの1つであり得る。例えば、図9Aの第1の畳み込み層904は、第2の畳み込み層906へ出力することができ、一方、第2の畳み込み層は、完全に接続された層908の第1層に出力することができる。
図10は、例示的な再帰型ニューラルネットワーク1000を示す。再帰型ニューラルネットワーク(RNN)において、ネットワークの前の状態はネットワークの現在の状態の出力に影響を及ぼす。RNNは、様々な機能を用いる様々なやり方において構築され得る。RNNの使用は、一般的に、数学モデルを用いて前の一連の入力に基づいて将来を予測することを中心に展開する。例えば、RNNは、統計的な言語モデリングを実行して、前の一連のワードが与えられると、次のワードを予測するために用いられ得る。説明され得る図示されるRNN1000は、入力ベクトルを受信する入力層1002と、リカレント機能を実装する隠れ層1004と、前の状態の「メモリ」を有効にするフィードバックメカニズム1005と、結果を出力する出力層1006とを有する。RNN1000は、タイムステップに基づいて動作する。所与のタイムステップにおけるRNNの状態は、フィードバックメカニズム1005を介して前のタイムステップに基づいて影響を受ける。所与のタイムステップについて、隠れ層1004の状態は、前の状態と、現在のタイムステップにおける入力とにより定義される。第1タイムステップの初期入力(x)は、隠れ層1004によって処理され得る。第2入力(x)は、初期入力(x)の処理の最中に決定される状態情報を用いて、隠れ層1004によって処理され得る。所与の状態は、s=f(Ux+Wst−1)で算出され得、ここでUおよびWはパラメータ行列である。
関数fは、一般的に、双曲線正接関数(Tanh)または正規化関数f(x)=max(0,x)の変形例など、非線形である。
しかしながら、隠れ層1004において用いられる特定の数学的な関数は、RNN1000についての特定の実施形態の詳細に応じて変化し得る。
説明される基本的なCNNおよびRNNネットワークに加えて、これらのネットワーク上のバリエーションが可能にされてもよい。ある例示的なRNNの変型例は、長・短期メモリ(LSTM)RNNである。LSTM RNNは、より長い並びの言語を処理するために必要とされ得る長期依存の学習を可能にする。CNN上の変形例は、畳み込みディープビリーフネットワークであり、CNNと同様の構造を有し、かつ、ディープビリーフネットワークと同様の方式で訓練される。ディープビリーフネットワーク(DBN)は、確率(ランダム)変数の複数の層から構成される生成系ニューラルネットワークである。DBNは、greedy教師なし学習を用いて層ごとに訓練され得る。次に、DBNの学習される重みは、ニューラルネットワークに対する重みの最適な初期セットを決定することにより、事前訓練ニューラルネットワークを提供するために用いられ得る。
図11は、ディープニューラルネットワークの訓練および展開を示す。一度所与のネットワークがタスクのために構築されると、ニューラルネットワークは訓練データセット1102を用いて訓練される。様々な訓練フレームワーク1104が、訓練プロセスのハードウェアアクセラレーションを可能とするように開発されてきた。例えば、図6の機械学習フレームワーク604は、訓練フレームワーク604として構成され得る。訓練フレームワーク604は、訓練されていないニューラルネットワーク1106に接続し、訓練されたニューラルネット1108を生成するために、訓練されていないニューラルネットが本明細書において説明される並列処理リソースを用いて訓練されることを可能にし得る。
訓練プロセスを開始するために、最初の重みは、ランダムに、または、ディープビリーフネットワークを用いて事前訓練することにより選択されてよい。次に、訓練サイクルは、教師ありまたは教師なし方式のいずれかで実行される。
教師あり学習は、例えば、訓練データセット1102が、入力に対する所望の出力と組み合わされる入力を含む場合、または、訓練データセットが、既知の出力を有する入力を含み、かつ、ニューラルネットワークの出力が手動で格付けされる場合などの仲介動作として訓練が実行される学習方法である。ネットワークは、入力を処理して、結果の出力を、予期されるまたは所望の出力のセットに対して比較する。エラーは、次にシステム全体に伝搬される。訓練フレームワーク1104は、訓練されていないニューラルネットワーク1106を制御する重みを調整するように調整され得る。訓練フレームワーク1104は、訓練されていないニューラルネットワーク1106が既知の入力データに基づいて正解を生成するのに適したモデルに向けてどれだけうまく収束しているかをモニタリングするツールを提供できる。ニューラルネットワークにより生成される出力を改善するようにネットワークの重みが調整されるように、訓練プロセスは繰り返し行われる。訓練プロセスは、ニューラルネットワークが、訓練されたニューラルネット1108に関連付けられた統計的に望ましい精度に達するまで、継続し得る。訓練されたニューラルネットワーク1108は、次に、新しいデータ1112の入力に基づいて推論結果1114を生成する任意の数の機械学習動作を実装するように、展開され得る。
教師なし学習は、ネットワークが分類されていないデータを用いてそれ自体を訓練しようと試す、学習方法である。したがって、教師なし学習に関して、訓練データセット1102は任意の関連する出力データなしの入力データを含むであろう。訓練されていないニューラルネットワーク1106は、分類されていない入力内のグループ化を学習でき、個々の入力がどのようにデータセット全体に関連するかを決定できる。教師なし訓練は、自己組織化マップを生成するために用いられることができ、あるタイプの訓練されたニューラルネットワーク1108は、データの次元を削減するのに有用な動作を実行することが可能である。教師なし訓練はまた、アノマリ検出を実行するために用いられることもでき、データの通常のパターンから逸脱する入力データセット内のデータポイントの識別を可能にする。
教師ありおよび教師なし訓練に対するバリエーションが採用されてもよい。半教師あり学習は、訓練データセット1102が同一の分散のうちの分類されているデータおよび分類されていないデータの混合を含む技術である。インクリメンタル学習は、入力データがモデルをさらに訓練するために継続的に用いられる教師あり学習の変形例である。インクリメンタル学習は、訓練されたニューラルネットワーク1108が初期訓練の最中にネットワーク内に教え込まれた知識を忘れることなく新しいデータ1112に適用することを可能にする。
教師ありであるか、または、教師なしであるかに関わらず、特にディープニューラルネットワークの訓練プロセスは、単一の計算ノードに対してかなり計算集約型であるかもしれない。単一の計算ノードを用いる代わりに、計算ノードの分散型ネットワークが、訓練プロセスをアクセラレートするために用いられ得る。
図12は、分散型学習を示すブロック図である。分散型学習は、複数の分散型計算ノードを用いて、ニューラルネットワークの教師ありまたは教師なし訓練を実行する訓練モデルである。分散型計算ノードは、1または複数のホストプロセッサと、図7にあるような高並列汎用グラフィックス処理ユニット700などの汎用処理ノードのうちの1または複数とを各々含むことができる。図示されるように、分散型学習は、モデル並列処理1202、データ並列処理1204、または、モデルおよびデータ並列処理1204の組み合わせを実行し得る。
モデル並列処理1202において、分散型システム内の異なる計算ノードは、単一のネットワークの異なる部分に対する訓練計算を実行できる。例えば、ニューラルネットワークの各層は、分散型システムの異なる処理ノードにより訓練され得る。モデル並列処理の利点は、特に大きなモデルにスケーリングする能力を含むことである。ニューラルネットワークの異なる層に関連付けられる計算を分裂することは、すべての層の重みが単一の計算ノードのメモリに適合しない非常に大きなニューラルネットワークの訓練を可能にする。いくつかの例では、モデル並列処理は、大きなニューラルネットワークの教師なし訓練を実行する際に特に有用となり得る。
データ並列処理1204において、分散型ネットワークの異なるノードはモデルの完全なインスタンスを有し、各ノードはデータの異なる部分を受信する。異なるノードからの結果は、次に組み合わせられる。データ並列処理に対する異なるアプローチが可能である一方で、データの並列的な訓練アプローチはすべて、結果を組み合わせて、各ノード間のモデルパラメータを同期させる技術を必要とする。データを組み合わることに対する例示的なアプローチは、パラメータの平均化および更新ベースのデータ並列処理を含む。パラメータの平均化は、訓練データのサブセットで各ノードを訓練し、グローバルパラメータ(例えば、重み、バイアス)を各ノードからパラメータの平均に設定する。パラメータの平均化は、パラメータデータを保持する中央パラメータサーバを用いる。更新ベースのデータ並列処理は、ノードからパラメータサーバにパラメータを転送する代わりに、モデルの更新が転送されることを除いてパラメータの平均化と同様である。さらに、更新ベースのデータ並列処理は、分散方式で実行されることができ、更新は、圧縮されてノード間に転送される。
組み合わせられたモデルおよびデータ並列処理1206は、例えば、各計算ノードが複数のGPUを含む分散型システムにおいて実装され得る。各ノードは、モデルの異なる部分を訓練するために用いられる各ノード内の別個のGPUと共にモデルの完全なインスタンスを有し得る。
分散型訓練は、単一のマシン上の訓練と比較して増加したオーバヘッドを有する。しかしながら、本明細書において説明される並列プロセッサおよびGPGPUは各々、分散型訓練のオーバヘッドを低減させる様々な技術を実装でき、高帯域幅GPU間データ転送およびアクセラレートされたリモートデータ同期を可能にする技術を含む。例示的な機械学習アプリケーション
機械学習は、様々な技術的課題を解決するために適用されることができ、限定されることはないが、コンピュータビジョン、自動運転およびナビゲーション、音声認識並びに言語処理を含む。コンピュータビジョンは、これまで、機械学習アプリケーションの大部分のアクティブなリサーチエリアのうちの1つであった。コンピュータビジョンのアプリケーションは、顔を認識することなどの人の視覚能力を再生することから、視覚能力の新たなカテゴリを作成することに及ぶ。例えば、コンピュータビジョンアプリケーションは、ビデオ内で可視のオブジェクトにおいて引き起こされる振動から音波を認識するように構成され得る。並列プロセッサアクセラレート型機械学習は、コンピュータビジョンアプリケーションが以前に実現可能なものよりも膨大な訓練データセットを用いて訓練されることを可能にし、推論システムが低電力並列プロセッサを用いて展開されることを可能にする。
並列プロセッサアクセラレート型機械学習は、レーンおよび道路標識認識、障害物回避、ナビゲーション並びに運転制御を含む自動運転アプリケーションを有する。アクセラレート型機械学習技術は、特定の訓練入力に対する適切な応答を定義するデータセットに基づいて運転モデルを訓練するために用いられ得る。本明細書において説明される並列プロセッサは、自動運転解決方法に用いられるますます複雑なニューラルネットワークの迅速な訓練を可能にし、自律走行車への統合に適したモバイルプラットフォームにおいて、低電力推論プロセッサの展開を可能にし得る。
並列プロセッサアクセラレート型ディープニューラルネットワークは、自動音声認識(ASR)への機械学習アプローチを可能にしてきた。ASRは、入力アコースティックシーケンスを与えられて最も可能性のある言語シーケンスを算出する関数の作成を含む。ディープニューラルネットワークを用いるアクセラレート型機械学習は、ASR用に以前に用いられていた隠れマルコフモデル(HMM)およびガウス混合モデル(GMM)の置換を可能してきた。
並列プロセッサアクセラレート型機械学習もまた、自然言語処理をアクセラレートするために用いられ得る。自動学習プロシージャは、統計的な推論アルゴリズムを利用して、誤ったまたは見知らぬ入力に対してロバストなモデルを生成できる。例示的な自然言語プロセッサアプリケーションは、人間の言語間の自動機械翻訳を含む。
機械学習に用いられる並列処理プラットフォームは、訓練プラットフォームおよびプラットフォーム展開に分割され得る。訓練プラットフォームは、一般的に非常に並列的であり、マルチGPU単一のノード訓練およびマルチノード、マルチGPU訓練をアクセラレートするために最適化を含む。訓練に適した例示的な並列プロセッサは、図7の汎用グラフィックス処理ユニット700および/または図8のマルチGPUコンピューティングシステム800を含む。それどころか、展開される機械学習プラットフォームは、一般的に、カメラ、自律ロボットおよび自律走行車などの製品での使用に適した低電力並列プロセッサを含む。
図13は、訓練されたモデルを用いて推論を実行するために適した、例示的な推論システムオンチップ(SoC)1300を示す。SoC1300は、メディアプロセッサ1302、ビジョンプロセッサ1304、GPGPU1306、およびマルチコアプロセッサ1308を含む処理コンポーネントを統合し得る。SoC1300は、処理コンポーネントのそれぞれによってアクセス可能な共有オンチップデータプールを可能にし得るオンチップメモリ1305をさらに含み得る。処理コンポーネントは、自律走行車および自律ロボットを含む様々な機械学習プラットフォームへの展開を可能にする低電力動作のために最適化され得る。例えば、SoC1300の一実装例は、自律走行車用の主制御システムの一部として用いられ得る。SoC1300が自律走行車での使用のために構成される場合、SoCは、展開権限についての関連する機能的な安全性規格に準拠するように設計および構成される。
動作の最中、メディアプロセッサ1302およびビジョンプロセッサ1304は、コンピュータビジョン動作をアクセラレートするために、同時に動作できる。メディアプロセッサ1302は、複数の高解像度(例えば、4K、8K)ビデオストリームの低レイテンシなデコードを可能にし得る。デコードされたビデオストリームは、オンチップメモリ1305のバッファに書き込まれ得る。次に、ビジョンプロセッサ1304は、デコードされたビデオを解析し、訓練された画像認識モデルを用いたフレーム処理の準備の際に、デコードされたビデオのフレームに対して予備処理演算を実行できる。例えば、ビジョンプロセッサ1304は、高解像度ビデオデータに対して画像認識を実行するために用いられるCNNの畳み込み演算をアクセラレートすることができる一方、バックエンドモデル計算がGPGPU1306により実行される。
マルチコアプロセッサ1308は、メディアプロセッサ1302およびビジョンプロセッサ1304によって実行されるデータ転送および共有メモリ動作のシーケンシングおよび同期を支援する制御ロジックを含み得る。マルチコアプロセッサ1308は、GPGPU1306の推論コンピュート機能を利用し得るソフトウェアアプリケーションを実行するアプリケーションプロセッサとしてもまた機能し得る。例えば、ナビゲーションおよび運転ロジックの少なくとも一部は、マルチコアプロセッサ1308上で実行するソフトウェアにおいて実装され得る。そのようなソフトウェアはGPGPU1306に計算ワークロードを直接発行し得、または、計算ワークロードはマルチコアプロセッサ1308に発行され得、それはそれらの動作の少なくとも一部をGPGPU1306にオフロードそ得る。
GPGPU1306は、汎用グラフィックス処理ユニット700内のコンピュートクラスタ706A−706Hの低電力構成などの、コンピュートクラスタを含み得る。GPGPU1306内のコンピュートクラスタは、訓練されたニューラルネットワーク上で推論計算を実行するように具体的に最適化された命令をサポートし得る。例えば、GPGPU1306は、8ビットおよび4ビットの整数ベクトル演算などの低い精度の計算を実行する命令をサポートすることができる。 システム概要
図14は、実施形態による、処理システム1400のブロック図である。システム1400は、単一プロセッサのデスクトップシステム、マルチプロセッサ・ワークステーション・システム、または多数のプロセッサ1402もしくはプロセッサコア1407を有するサーバシステムにおいて用いられてもよい。一実施形態において、システム1400は、ローカルまたはワイドエリアネットワークへの有線または無線接続性を有するインターネットオブシングズ(IoT)デバイスなどの、モバイル、ハンドヘルド型、または埋め込みデバイスでの使用のための、システムオンチップ(SoC)集積回路内に組み込まれた処理プラットフォームである。
一実施形態において、システム1400は、サーバベースのゲームプラットフォーム、すなわち、ゲームおよびメディアコンソール、モバイルゲームコンソール、ハンドヘルドゲームコンソールまたはオンラインゲームコンソールを含むゲームコンソールを含み得、それに結合され得、またはそれの中で統合され得る。いくつかの実施形態において、システム1400は、低内部ストレージ容量ラップトップなどの、携帯電話、スマートフォン、タブレットコンピューティングデバイス、またはモバイルインターネット接続デバイスの一部である。処理システム1400は、実際の世界の視覚、聴覚および触覚体験を補足するか、あるいは、テキスト、音声、グラフィックス、ビデオ、ホログラフィック画像またはビデオ、または、触覚フィードバックを提供するように、視覚、聴覚および触覚出力を提供するための、スマートウォッチウェアラブルデバイス、拡張現実(AR)または仮想現実(VR)フィーチャで強化されたスマートアイウェアまたはクロージング、その他の拡張現実(AR)デバイス、または他の仮想現実(VR)デバイスなどのウェアラブルデバイスを含み、それと結合し、またはそれの中で統合されてもよい。いくつかの実施形態において、処理システム1400は、テレビまたはセットトップボックスデバイスを含むか、またはそれの一部である。一実施形態において、システム1400は、バス、トラクタートレイラー、自動車、モーターまたは電気自転車、飛行機またはグライダー(またはこれらの任意の組み合わせ)などの自動運転車を含み得、それと結合し、またはそれの中に統合されてもよい。自動運転車は、車両の周りで感知された環境を処理するように、システム1400を用いてよい。
いくつかの実施形態において、1または複数のプロセッサ1402は各々、実行される場合、システムまたはユーザソフトウェアのための動作を実行する命令を処理する1または複数のプロセッサコア1407を含む。いくつかの実施形態において、1または複数のプロセッサコア1407のうちの少なくとも1つは、特定の命令セット1409を処理するように構成される。いくつかの実施形態において、命令セット1409は、複合命令セットコンピューティング(CISC)、縮小命令セットコンピューティング(RISC)、または、超長命令語(VLIW)を介したコンピューティングを促進し得る。1または複数のプロセッサコア1407は、異なる命令セット1409をそれぞれ処理してよく、他の命令セットのエミュレーションを促進する命令を含み得る。プロセッサコア1407はまた、デジタル信号プロセッサ(DSP)などの、他の処理デバイスを含んでもよい。
いくつかの実施形態において、プロセッサ1402はキャッシュメモリ1404を含む。アーキテクチャに応じて、プロセッサ1402は単一内部キャッシュまたは複数レベルの内部キャッシュを有し得る。いくつかの実施形態において、キャッシュメモリはプロセッサ1402の様々なコンポーネントの間で共有される。いくつかの実施形態において、プロセッサ1402は、既知の複数のキャッシュコヒーレンシ技術を用いる複数のプロセッサコア1407間で共有され得る外部キャッシュ(例えば、レベル3(L3)キャッシュまたはラストレベルキャッシュ(LLC))(図示せず)も用いる。レジスタファイル1406は、さらに、プロセッサ1402に含まれ得、データの異なるタイプを格納するために、異なるタイプのレジスタ(例えば、整数レジスタ、浮動小数点レジスタ、ステータスレジスタおよび命令ポインタレジスタ)を含み得る。いくつかのレジスタは汎用レジスタであり得るが、一方で、他のレジスタなプロセッサ1402の設計に固有であり得る。
いくつかの実施形態において、1または複数のプロセッサ1402は、プロセッサ1402とシステム1400の他のコンポーネントとの間で、アドレス、データ、または制御信号などの通信信号を伝送する、1または複数のインタフェースバス1410と結合される。インタフェースバス1410は、一実施形態において、ダイレクトメディアインタフェース(DMI)バスのバージョンなどの、プロセッサバスであり得る。しかしながら、プロセッサバスは、DMIバスに限定されることはなく、1または複数の周辺構成要素インターコネクトバス(例えば、PCI、PCI Express)、メモリバスまたは他のタイプのインタフェースバスを含んでよい。一実施形態において、プロセッサ1402は、統合メモリコントローラ1416およびプラットフォームコントローラハブ1430を含む。メモリコントローラ1416は、システム1400のメモリデバイスと他のコンポーネントとの間の通信を促進し、一方、プラットフォームコントローラハブ(PCH)1430は、ローカルI/Oバスを介したI/Oデバイスへの接続を提供する。
メモリデバイス1420は、ダイナミックランダムアクセスメモリ(DRAM)デバイス、スタティックランダムアクセスメモリ(SRAM)デバイス、フラッシュメモリデバイス、相変化メモリデバイス、または、処理メモリとしての機能を果たすのに適した性能を有するいくつかの他のメモリデバイスであり得る。一実施形態において、メモリデバイス1420は、1または複数のプロセッサ1402がアプリケーションまたは処理プロセスを実行する場合に用いるためのデータ1422および命令1421を格納する、システム1400用のシステムメモリとして動作し得る。メモリコントローラ1416はまた、任意選択的な外部グラフィックスプロセッサ1418とも結合し、それは、プロセッサ1402内の1または複数のグラフィックスプロセッサ1408と通信して、グラフィックスおよびメディア演算を実行し得る。いくつかの実施形態において、グラフィックス、メディア、および/または計算操作は、グラフィックス、メディア、または計算操作の専用のセットを実行するように構成され得るコプロセッサである、アクセラレータ1412によってアシストされ得る。例えば、一実施形態において、アクセラレータ1412は、機械学習または計算操作を最適化するように用いられる行列乗算アクセラレータである。一実施形態において、アクセラレータ1412は、グラフィックスプロセッサ1408と連携してレイトレーシング動作を実行するように用いられ得るレイトレーシングアクセラレータである。一実施形態において、外部アクセラレータ1419は、アクセラレータ1412の代わりに、またはそれと連携して用いられ得る。
いくつかの実施形態において、ディスプレイデバイス1411はプロセッサ1402に接続され得る。ディスプレイデバイス1411は、モバイル電子デバイスまたはラップトップデバイスにあるような内部ディスプレイデバイス、または、ディスプレイインタフェースを介して取り付けられる外部ディスプレイデバイス(例えば、ディスプレイポートなど)のうちの1または複数であり得る。一実施形態において、ディスプレイデバイス1411は、仮想現実(VR)アプリケーションまたは拡張現実(AR)アプリケーションなどの、ヘッドマウントディスプレイ(HMD)での使用のための立体表示デバイスであり得る。
いくつかの実施形態において、プラットフォームコントローラハブ1430は、周辺機器が高速I/Oバスを介してメモリデバイス1420およびプロセッサ1402に接続することを可能にする。I/O周辺機器は、限定されることはないが、オーディオコントローラ1446、ネットワークコントローラ1434、ファームウェアインタフェース1428、無線トランシーバ1426、タッチセンサ1425、データストレージデバイス1424(例えば、不揮発性メモリ、揮発性メモリ、ハードディスクドライブ、フラッシュメモリ、NAND、3D NAND、3D XPointなど)を含む。データストレージデバイス1424は、ストレージインタフェース(例えば、SATA)を介して、または、ペリフェラルコンポーネントインターコネクトバス(例えば、PCI、PCI Express)などの周辺機器バスを介して接続できる。タッチセンサ1425は、タッチスクリーンセンサ、圧力センサまたは指紋センサを含み得る。無線トランシーバ1426は、Wi−Fi(登録商標)トランシーバ、Bluetooth(登録商標)トランシーバまたは、3G、4G、5Gまたはロングタームエボリューション(LTE)トランシーバなどのモバイルネットワークトランシーバであり得る。ファームウェアインタフェース1428は、システムファームウェアとの通信を可能にし、例えば、ユニファイド・エクステンシブル・ファームウェア・インタフェース(UEFI)であり得る。ネットワークコントローラ1434は、有線ネットワークへのネットワーク接続を可能にし得る。いくつかの実施形態において、高性能ネットワークコントローラ(図示せず)がインタフェースバス1410と結合する。オーディオコントローラ1446は、一実施形態において、マルチチャネル高解像度オーディオコントローラである。一実施形態において、システム1400は、レガシ(例えば、Personal System 2(PS/2))デバイスをシステムに結合するための任意選択的なレガシI/Oコントローラ1440を含む。プラットフォームコントローラハブ1430はまた、キーボードおよびマウス1443の組み合わせ、カメラ1444または他のUSB入力デバイスなどの、1または複数のユニバーサルシリアルバス(USB)コントローラ1442接続入力デバイスにも接続し得る。
異なって構成される他のタイプのデータ処理システムも用いられてよいので、示されるシステム1400は、例示であり、限定するものではないことが理解されるであろう。例えば、メモリコントローラ1416およびプラットフォームコントローラハブ1430のインスタンスは、外部グラフィックスプロセッサ1418などの、別個の外部グラフィックスプロセッサへと統合されてよい。一実施形態において、プラットフォームコントローラハブ1430および/またはメモリコントローラ1416は、1または複数のプロセッサ1402の外部にあってよい。例えば、システム1400は、外部のメモリコントローラ1416およびプラットフォームコントローラハブ1430を含み得、それらはプロセッサ1402と通信するシステムチップセット内のメモリコントローラハブおよび周辺機器コントローラハブとして構成されてもよい。
例えば、CPU、メモリ、および他のコンポーネントなどのコンポーネントが、熱的性能を増加させるように配置および設計される、回路基板(「SLED」)が用いられ得る。いくつかの例において、プロセッサなどの処理コンポーネントは、SLEDの上側に位置するが、一方では、SLEDの最下層側のDIMMなどのメモリの近くに位置することもある。この設計によって提供された拡大気流の結果として、コンポーネントは典型的なシステムより高い周波数および電力レベルで動作し得、これにより性能が増大する。さらに、SLEDはラックにおいて、電力およびデータ通信ケーブルと無条件にかみ合うように構成され、これにより、迅速に取り除かれ、アップグレードされ、再インストールされ、および/または置換される、これらの能力を拡張する。同様に、プロセッサ、アクセラレータ、メモリ、およびデータストレージデバイスなどの、SLED上に位置する個々のコンポーネントは、互いから増加したこれらの空間に起因して、容易にアップグレードされるように構成される。例示的な実施形態において、コンポーネントはさらに、これらの真正性を明らかにするハードウェア証明特徴を含む。
データセンタは、イーサネット(登録商標)およびオムニパスを含む複数の他のネットワークアーキテクチャをサポートする、単一のネットワークアーキテクチャ(「ファブリック」)を使用し得る。SLEDは、光ファイバを介してスイッチに結合され得、それは、典型的なツイストペアケーブル配線(例えば、カテゴリ5、カテゴリ5e、カテゴリ6など)より高い帯域幅、およびより低いレイテンシを提供する。高帯域幅、低レイテンシ相互接続およびネットワークアーキテクチャに起因して、データセンタは、メモリ、アクセラレータ(例えば、GPU、グラフィクスアクセラレータ、FPGA、ASIC、ニューラルネットワークおよび/または人工知能アクセラレータなど)、および物理的に集計されないデータストレージデバイスなどのリソースを、使用において、プールし得、必要に基づいてそれらを計算リソース(例えば、プロセッサ)に提供し得、あたかもそれらがローカルにあるかのようにプールされたリソースに、計算リソースがアクセスすることを可能にし得る。
電力供給または電源は、システム1400または任意のコンポーネントまたは本明細書に説明されたシステムに、電圧および/または電流を提供し得る。一例において、電力供給は、壁のコンセントに差し込むための、ACからDC(交流から直流)へのアダプタを含む。そのようなAC電力は再生可能エネルギー(例えば、太陽電力)電源であり得る。一例において、電源は外部のACからDCへのコンバータなどの、DC電源を含む。一例において、電源または電力供給は、充電フィールドを近接に介して充電する、無線充電ハードウェアを含む。一例において、電源は内部バッテリ、交流電力供給、動きベースの電力供給、太陽電力供給または燃料電池電源を含み得る。
図15Aから図15Cは、本明細書に説明される実施形態によって提供されるコンピューティングシステムおよびグラフィックスプロセッサを示す。本明細書における任意の他の図面の要素と同じ参照番号(または名称)を有する図15Aから図15Cの要素は、本明細書においてどこか他の場所で説明されるものと同様な任意の方式で動作または機能することができるが、そのようなものに限定されることはない。
図15Aは、1または複数のプロセッサコア1502A−1502N、統合メモリコントローラ1514、および統合グラフィックスプロセッサ1508を有するプロセッサ1500の実施形態のブロック図である。プロセッサ1500は、最大で破線の枠により表される追加のコア1502Nまでを含む追加のコアを含み得る。プロセッサコア1502A−1502Nのそれぞれは、1または複数の内部キャッシュユニット1504A−1504Nを含む。いくつかの実施形態において、各プロセッサコアは、1または複数の共有キャッシュユニット1506へのアクセスもまた有する。内部キャッシュユニット1504A−1504Nおよび共有キャッシュユニット1506は、プロセッサ1500内のキャッシュメモリ階層を表している。キャッシュメモリ階層は、各プロセッサコア内の命令およびデータキャッシュの少なくとも1つのレベル、および、キャッシュのレベル2(L2)、レベル3(L3)、レベル4(L4)などの、共有される中間レベルのキャッシュ、または、外部メモリがLLCとして分類される前のキャッシュの最高レベルである他のレベルのうちの1または複数のレベルを含んでよい。いくつかの実施形態において、キャッシュコヒーレンシロジックが、様々なキャッシュユニット1506および1504A−1504Nの間のコヒーレンシを保持する。
いくつかの実施形態において、プロセッサ1500は、1または複数のバスコントローラユニット1616のセットおよびシステムエージェントコア1510もまた含み得る。1または複数のバスコントローラユニット1616は、1または複数のPCIまたはPCI Expressバスなどの、周辺機器バスのセットを管理する。システムエージェントコア1510は、様々なプロセッサコンポーネントのための管理機能を提供する。いくつかの実施形態において、システムエージェントコア1510は、様々な外部メモリデバイス(図示せず)へのアクセスを管理する1または複数の統合メモリコントローラ1514を含む。
いくつかの実施形態において、1または複数のプロセッサコア1502A−1502Nは、同時マルチスレッディングのためのサポートを含む。そのような実施形態において、システムエージェントコア1510は、マルチスレッド処理の最中にコア1502A−1502Nを協調および動作させるためのコンポーネントを含む。システムエージェントコア1510は、パワーコントロールユニット(PCU)をさらに含んでよく、PCUは、プロセッサコア1502A−1502Nおよびグラフィックスプロセッサ1508の電力状態を調整するロジックおよびコンポーネントを含む。
いくつかの実施形態において、プロセッサ1500は、グラフィックス処理演算を実行するグラフィックスプロセッサ1508をさらに含む。いくつかの実施形態において、グラフィックスプロセッサ1508は、共有キャッシュユニット1506のセットと結合し、かつ、1または複数の統合メモリコントローラ1514を含むシステムエージェントコア1510と結合する。いくつかの実施形態において、システムエージェントコア1510は、1または複数の結合されたディスプレイへのグラフィックスプロセッサ出力を駆動するディスプレイコントローラ1511もまた含む。いくつかの実施形態において、ディスプレイコントローラ1511は、少なくとも1つの相互接続を介してグラフィックスプロセッサと結合される別個のモジュールであってもよい、または、グラフィックスプロセッサ1508内に統合されてもよい。
いくつかの実施形態において、リングベースの相互接続ユニット1512は、プロセッサ1500の内部コンポーネントを結合するために用いられる。しかしながら、代替の相互接続ユニットは、ポイントツーポイントインターコネクト、スイッチ型インターコネクトまたは当技術分野で周知の技術を含む他の技術などが用いられてもよい。いくつかの実施形態において、グラフィックスプロセッサ1508は、I/Oリンク1513を介してリング相互接続1512と結合する。
例示的なI/Oリンク1513は、様々なプロセッサコンポーネントと、eDRAMモジュールなどの高性能埋め込み型メモリモジュール1518との間の通信を促すオンパッケージI/Oインターコネクトを含む複数の様々なI/Oインターコネクトのうちの少なくとも1つを表す。いくつかの実施形態において、プロセッサコア1502A−1502Nのそれぞれおよびグラフィックスプロセッサ1508は、共有のラストレベルキャッシュとして埋め込み型メモリモジュール1518を用いる。
いくつかの実施形態において、プロセッサコア1502A−1502Nは、同じ命令セットアーキテクチャを実行するホモジニアスなコアである。別の実施形態では、プロセッサコア1502A−1502Nは、命令セットアーキテクチャ(ISA)の観点からヘテロジニアスであり、プロセッサコア1502A−1502Nの1または複数が第1の命令セットを実行し、一方、他のコアのうちの少なくとも1つが第1の命令セットのサブセットまたは異なる命令セットを実行する。一実施形態において、プロセッサコア1502A−1502Nは、マイクロアーキテクチャの観点からヘテロジニアスであり、相対的に消費電力が高い1または複数のコアは、消費電力が少ない1または複数の電力コアと結合する。一実施形態において、プロセッサコア1502A−1502Nは、計算機能の観点からヘテロジニアスである。さらに、プロセッサ1500は、1または複数のチップ上に実装され得る、または、他のコンポーネントに加えて図示されるコンポーネントを有するSoC集積回路として実装され得る。
図15Bは、本明細書に説明されたいくつかの実施形態による、グラフィックスプロセッサコア1519のハードウェアロジックのブロック図である。本明細書における任意の他の図面の要素と同じ参照番号(または名称)を有する図15Bの要素は、本明細書においてどこか他の場所で説明されるものと同様な任意の方式で動作または機能することができるが、そのようなものに限定されることはない。グラフィックスプロセッサコア1519は、コアスライスと称されることがあり、モジュラーグラフィックスプロセッサ内の1または複数のグラフィックスコアであり得る。グラフィックスプロセッサコア1519は、1つのグラフィックスコアスライスを例示したものであり、グラフィックスプロセッサは、本明細書において説明されるように、目標電力および性能限界に基づいて複数のグラフィックスコアスライスを含んでよい。各グラフィックスプロセッサコア1519は、汎用および固定機能ロジックのモジュラーブロックを含むサブスライスとも称される複数のサブコア1521A−1521Fと結合される固定機能ブロック1530を含み得る。
いくつかの実施形態において、固定機能ブロック1530は、例えば、低性能および/または低電力のグラフィックスプロセッサ実装において、グラフィックスプロセッサコア1519内のすべてのサブコアにより共有され得るジオメトリ/固定機能パイプライン1531を含む。様々な実施形態では、ジオメトリ/固定機能パイプライン1531は、3D固定機能パイプライン(例えば、以下に説明される図16Aにあるような3Dパイプライン1612)、ビデオフロントエンドユニット、スレッドスポーナーおよびスレッドディスパッチャ、並びに、統合リターンバッファ、例えば、以下に説明される図17の統合リターンバッファ1718を管理する統合リターンバッファマネージャを含む。
一実施形態において、固定機能ブロック1530は、グラフィックスSoCインタフェース1532、グラフィックスマイクロコントローラ1533、およびメディアパイプライン1534もまた含む。グラフィックスSoCインタフェース1532は、グラフィックスプロセッサコア1519と、チップ集積回路上のシステム内の他のプロセッサコアとの間のインタフェースを提供する。グラフィックスマイクロコントローラ1533は、スレッドディスパッチ、スケジューリングおよびプリエンプションを含む、グラフィックスプロセッサコア1519の様々な機能を管理するように構成可能なプログラマブルサブプロセッサである。メディアパイプライン1534(例えば、図16Aおよび図17のメディアパイプライン1616)は、画像およびビデオデータを含むマルチメディアデータのデコード、エンコード、事前処理および/または事後処理を促すロジックを含む。メディアパイプライン1534は、サブコア1521A−1521F内のコンピュートまたはサンプリングロジックへの要求を介してメディア演算を実装する。
一実施形態において、SoCインタフェース1532は、共有のラストレベルキャッシュメモリなどのメモリ階層要素、システムRAM、および/または、埋め込み型オンチップまたはオンパッケージDRAMを含む、SoC内の汎用アプリケーションプロセッサコア(例えば、CPU)および/または他のコンポーネントとグラフィックスプロセッサコア1519が通信することを可能にする。SoCインタフェース1532はまた、カメライメージングパイプラインなど、SoC内の固定機能デバイスとの通信を可能にもでき、グラフィックスプロセッサコア1519とSoC内のCPUとの間で共有され得るグローバルメモリアトミックの使用を可能にするおよび/または当該グローバルメモリアトミックを実装する。SoCインタフェース1532は、グラフィックスプロセッサコア1519に対する電力管理制御を実装し、グラフィックスコア1519のクロックドメインとSoC内の他のクロックドメインとの間のインタフェースを有効にすることもできる。一実施形態において、SoCインタフェース1532は、グラフィックスプロセッサ内の1または複数のグラフィックスコアのそれぞれにコマンドおよび命令を提供するように構成されるコマンドストリーマおよびグローバルスレッドディスパッチャからのコマンドバッファの受信を可能にする。コマンドおよび命令は、メディア演算が実行される場合にメディアパイプライン1534にディスパッチすることができる、または、グラフィックス処理演算が実行される場合にジオメトリおよび固定機能パイプライン(例えば、ジオメトリおよび固定機能パイプライン1531、ジオメトリおよび固定機能パイプライン1537)にディスパッチすることができる。
グラフィックスマイクロコントローラ1533は、グラフィックスプロセッサコア1519のための様々なスケジューリングおよび管理タスクを実行するように構成され得る。一実施形態において、グラフィックスマイクロコントローラ1533は、サブコア1521A−1521F内の実行ユニット(EU)アレイ1522A−1522F、1524A−1524F内の様々なグラフィックス並列エンジン上のグラフィックスおよび/またはコンピュートワークロードスケジューリングを実行し得る。このスケジューリングモデルでは、グラフィックスプロセッサコア1519を含むSoCのCPUコア上で実行するホストソフトウェアは、複数のグラフィックスプロセッサドアベルのうちの1つにワークロードを提示でき、適切なグラフィックスエンジンに対するスケジューリングオペレーションを呼び出す。スケジューリングオペレーションは、どのワークロードを次に実行するかを決定すること、ワークロードをコマンドストリーマに提示すること、エンジン上で実行する既存のワークロードをプリエンプトすること、ワークロードの経過をモニタリングすること、および、ワークロードが完了したときをホストソフトウェアに通知することを含む。一実施形態において、グラフィックスマイクロコントローラ1533はまた、グラフィックスプロセッサコア1519に対する低電力またはアイドル状態を促進することもでき、システム上のオペレーティングシステムおよび/またはグラフィックスドライバソフトウェアから独立して、低電力状態遷移にわたってグラフィックスプロセッサコア1519内のレジスタをセーブおよび復元する能力をグラフィックスプロセッサコア1519に提供する。
グラフィックスプロセッサコア1519は、図示されるサブコア1521A−1521Fより多い、または、より少ない、最大N個のモジュラーサブコアを有してよい。N個のサブコアの各セットについて、グラフィックスプロセッサコア1519は、共有機能ロジック1535、共有および/またはキャッシュメモリ1536、ジオメトリ/固定機能パイプライン1537、ならびに、様々なグラフィックスをアクセラレートし、かつ、処理演算を算出するさらなる固定機能ロジック1538も含むことができる。共有機能ロジック1535は、グラフィックスプロセッサコア1519内の各N個のサブコアによって共有され得る、図17の共有機能ロジック1720(例えば、サンプラ、数学、および/またはスレッド間通信ロジック)に関連付けられたロジックユニットを含み得る。共有および/またはキャッシュメモリ1536は、グラフィックスプロセッサコア1519内のN個のサブコア1521A−1521Fのセットに関する最後のレベルキャッシュであり得、複数のサブコアによってアクセス可能な共有メモリとしての機能も果たし得る。ジオメトリ/固定機能パイプライン1537は、固定機能ブロック1530内のジオメトリ/固定機能パイプライン1531の代わりに含まれ得、同じまたは類似のロジックユニットを含み得る。
一実施形態において、グラフィックスプロセッサコア1519は、グラフィックスプロセッサコア1519による使用のための様々な固定機能アクセラレーションロジックを含み得るさらなる固定機能ロジック1538を含む。一実施形態において、さらなる固定機能ロジック1538は、位置のみのシェーディングでの使用のためのさらなるジオメトリパイプラインを含む。位置のみのシェーディングにおいて、2つのジオメトリパイプライン、つまり、ジオメトリ/固定機能パイプライン1538、1531内の完全なジオメトリパイプラインと、さらなる固定機能ロジック1538内に含まれ得るさらなるジオメトリパイプラインであるカリングパイプラインが存在する。一実施形態において、カリングパイプラインは、完全なジオメトリパイプラインの縮小バージョンである。完全なパイプラインおよびカリングパイプラインは、同一のアプリケーションの異なるインスタンスを実行でき、各インスタンスは、別個のコンテキストを有する。位置のみのシェーディングは、破棄された三角形の長いカリング実行を隠すことができ、場合によっては、シェーディングをより早く完了させることを可能にする。例えば、および一実施形態において、カリングパイプラインは、フレームバッファに対する画素のラスタライゼーションおよびレンダリングを実行することなく頂点の位置特性のみをフェッチしてシェーディングするので、さらなる固定機能ロジック1538内のカリングパイプラインロジックは、主要アプリケーションと並列に位置シェーダを実行することができ、完全なパイプラインよりも速く重要な結果を一般的に生成する。カリングパイプラインは、生成された重要な結果を用いて、すべての三角形がカリングされるか否かに関係なくこれらの三角形に関する可視情報を算出できる。完全なパイプライン(この例において、リプレイパイプラインと称され得る)は、カリングされる三角形をスキップして、ラスタライゼーションフェーズに最終的に渡される可視三角形のみをシェーディングするために可視情報を消費できる。
一実施形態において、さらなる固定機能ロジック1538は、機械学習訓練または推論の最適化を含む実装のために、固定機能行列乗算ロジックなどの機械学習アクセラレーションロジックを含むこともできる。
各グラフィックスサブコア1521A−1521F内に、グラフィックスパイプライン、メディアパイプラインまたはシェーダプログラムによる要求に応じてグラフィックス、メディアおよび計算操作を実行するために用いられ得る実行リソースのセットを含む。グラフィックスサブコア1521A−1521Fは、複数のEUアレイ1522A−1522F、1524A−1524F、スレッドディスパッチおよびスレッド間通信(TD/IC)ロジック1523A−1523F、3D(例えば、テクスチャ)サンプラ1525A−1525F、メディアサンプラ1526A−1526F、シェーダプロセッサ1527A−1527F並びに共有ローカルメモリ(SLM)1528A−1528Fを含む。各EUアレイ1522A−1522F、1524A−1524Fは、複数の実行ユニットを含み、それらは、グラフィックス、メディアまたはコンピュートシェーダプログラムを含むグラフィックス、メディアまたは計算操作の稼働中に、浮動小数点および整数/固定小数点論理演算を実行することが可能な汎用グラフィックス処理ユニットである。TD/ICロジック1523A−1523Fは、サブコア内の実行ユニットに対するローカルスレッドディスパッチおよびスレッド制御動作を実行し、サブコアの実行ユニット上で実行するスレッド間の通信を促す。3Dサンプラ1525A−1525Fは、テクスチャまたは他の3Dグラフィックス関連データをメモリに読み出すことができる。3Dサンプラは、所与のテクスチャに関連付けられる構成されたサンプル状態およびテクスチャフォーマットに基づいて、テクスチャデータを別々に読み出すことができる。メディアサンプラ1526A−1526Fは、メディアデータに関連付けられるタイプおよびフォーマットに基づいて同様の読み出し動作を実行できる。一実施形態において、各グラフィックスサブコア1521A−1521Fは、統合された3Dおよびメディアサンプラを交互に含むことができる。サブコア1521A−1521Fのそれぞれ内の実行ユニット上で実行するスレッドは、各サブコア内の共有ローカルメモリ1528A−1528Fを利用して、オンチップメモリの共通のプールを用いて実行するスレッドグループ内でのスレッド実行を可能にする。
図15Cは、本明細書に説明された実施形態による、グラフィックスプロセッサおよび/または計算アクセラレータとして構成され得る、汎用グラフィックス処理ユニット(GPGPU)1570のブロック図である。GPGPU1570は、1または複数のシステムおよび/またはメモリバスを介して、ホストプロセッサ(例えば、1または複数のCPU1546)およびメモリ1571、1572と相互接続され得る。一実施形態において、メモリ1571は、1または複数のCPU1546と共有され得るシステムメモリであり、一方で、メモリ1572はGPGPU1570に専用ののデバイスメモリである。一実施形態において、GPGPU1570およびデバイスメモリ1572内のコンポーネントは、1または複数のCPU1546にアクセス可能なメモリアドレスにマッピングされ得る。メモリ1571および1572へのアクセスは、メモリコントローラ1568を介して促され得る。一実施形態において、メモリコントローラ1568は、内部直接メモリアクセス(DMA)コントローラ1569を含み、または、そうでなければDMAコントローラによって実行されるであろう動作を実行するロジックを含み得る。
GPGPU1570は、L2キャッシュ1553、L1キャッシュ1554、命令キャッシュ1555、および共有メモリ1556を含む、複数のキャッシュメモリを含み、その少なくとも一部もまたキャッシュメモリとしてパーティショニングされ得る。GPGPU1570もまた、複数の計算ユニット1560A−1560Nを含む。各計算ユニット1560A−1560Nは、ベクトルレジスタ1561、スカラレジスタ1562、ベクトルロジックユニット1563、スカラロジックユニット1564のセットを含む。計算ユニット1560A−1560Nは、ローカル共有メモリ1565およびプログラムカウンタ1566もまた含み得る。計算ユニット1560A−1560Nは、定数キャッシュ1567と結合され得、それは定数データを格納するように用いられ得、定数データはGPGPU1570上で実行するカーネルまたはシェーダプログラムの実行の間変わらないであろうデータである。一実施形態において、定数キャッシュ1567はスカラデータキャッシュであり、キャッシュされたデータは、スカラレジスタ1562へと直接フェッチされ得る。
動作の間、1または複数のCPU1546は、アクセス可能なアドレス空間にマッピングされたGPGPU1570のレジスタまたはメモリにコマンドを書き込み得る。コマンドプロセッサ1557は、レジスタまたはメモリからコマンドを読み出し得、どのようにこれらのコマンドがGPGPU1570で処理されるであろうかを決定し得る。スレッドディスパッチャ1558は次に、これらのコマンドを実行するように計算ユニット1560A−1560Nにスレッドをディスパッチするように用いられ得る。各計算ユニット1560A−1560Nは、他の計算ユニットと独立してスレッドを実行し得る。さらに、各計算ユニット1560A−1560Nは、条件計算のために独立して構成され得、メモリに計算の結果を条件付きで出力し得る。発信されたコマンドが完了した場合、コマンドプロセッサ1557は、1または複数のCPU1546に割り込み得る。
図16Aから図16Cは、本明細書に説明された実施形態によって提供される、追加のグラフィックスプロセッサおよび計算アクセラレータアーキテクチャのブロック図を示す。本明細書における任意の他の図面の要素と同じ参照番号(または名称)を有する図16Aから図16Cの要素は、本明細書においてどこか他の場所で説明されるものと同様な任意の方式で動作または機能することができるが、そのようなものに限定されることはない。
図16Aはグラフィックスプロセッサ1600のブロック図であり、それはディスクリートグラフィックス処理ユニットであり得、または、複数の処理コアと統合されたグラフィックスプロセッサであり得、または、限定されることはないが、メモリデバイスまたはネットワークインタフェースなどの、他の半導体デバイスであり得る。いくつかの実施形態において、グラフィックスプロセッサは、グラフィックスプロセッサ上のレジスタへのメモリマッピング型I/Oインタフェースを介して、プロセッサメモリ内に置かれるコマンドを用いて通信する。いくつかの実施形態において、グラフィックスプロセッサ1600は、メモリにアクセスするメモリインタフェース1614を含む。メモリインタフェース1614は、ローカルメモリ、1または複数の内部キャッシュ、1または複数の共有外部キャッシュへのインタフェース、および/または、システムメモリへのインタフェースであり得る。
いくつかの実施形態において、グラフィックスプロセッサ1600は、ディスプレイ出力データをディスプレイデバイス1618に駆動するディスプレイコントローラ1602も含む。ディスプレイコントローラ1602は、ビデオまたはユーザインタフェース要素の複数の層の表示および構成に関する1または複数のオーバーレイプレーン用のハードウェアを含む。ディスプレイデバイス1618は、内部または外部ディスプレイデバイスであり得る。一実施形態において、ディスプレイデバイス1618は、仮想現実(VR)ディスプレイデバイスまたは拡張現実(AR)ディスプレイデバイスなどの、ヘッドマウントディスプレイデバイスである。いくつかの実施形態において、グラフィックスプロセッサ1600は、限定されることはないが、MPEG−2などのムービングピクチャエキスパーツグループ(MPEG)フォーマット、H.264/MPEG−4 AVC、H.265/HEVC、オープンメディアアライアンス(AOMedia)VP8、VP9などのアドバンスドビデオコーティング(AVC)フォーマット、ならびに、米国映画テレビ技術者協会(SMPTE)421M/VC−1、および、JPEGなどのジョイントフォトグラフィックエキスパーツグループ(JPEG)フォーマット、および、モーションJPEG(MJPEG)フォーマットを含む1または複数のメディアエンコードフォーマットに、当該メディアエンコードフォーマットから、または、当該メディアエンコードフォーマット間でメディアをエンコード、デコードまたはトランスコードするビデオコーデックエンジン1606を含む。
いくつかの実施形態において、グラフィックスプロセッサ1600は、例えば、ビット境界ブロック転送を含む2次元(2D)ラスタライザ演算を実行するブロック画像転送(BLIT)エンジン1604を含む。しかしながら、一実施形態において、2Dグラフィックス演算は、グラフィックス処理エンジン(GPE)1610の1または複数のコンポーネントを用いて実行される。いくつかの実施形態において、GPE1610は、3次元(3D)グラフィックス演算およびメディア演算を含むグラフィックス演算を実行するためのコンピュートエンジンである。
いくつかの実施形態において、GPE1610は、3Dプリミティブの形状(例えば、矩形、三角形など)に作用する処理機能を用いて3次元画像およびシーンをレンダリングするなどの、3D演算を実行するための3Dパイプライン1612を含む。3Dパイプライン1612は、要素内で様々なタスクを実行する、および/または実行スレッドを3D/メディアサブシステム1615に生成するプログラム可能な固定された機能要素を含む。3Dパイプライン1612は、メディア演算を実行するために用いられ得る一方、GPE1610の実施形態はまた、具体的には、ビデオ投稿処理および画像処理などのメディア演算を実行するために用いられるメディアパイプライン1616もまた含む。
いくつかの実施形態において、メディアパイプライン1616は、ビデオコーデックエンジン1606の代わりに、または、ビデオコーデックエンジン1606を代表して、ビデオデコードアクセラレーション、ビデオインターレース解除およびビデオエンコードアクセラレーションなどの、1または複数の専用のメディア演算を実行する固定機能またはプログラマブルロジックユニットを含む。いくつかの実施形態において、メディアパイプライン1616は、3D/メディアサブシステム1615上での実行のためのスレッドをスポーンするスレッドスポーニングユニットをさらに含む。スポーンされたスレッドは、3D/メディアサブシステム1615に含まれる1または複数のグラフィックス実行ユニット上でのメディア演算に関する計算を実行する。
いくつかの実施形態において、3D/メディアサブシステム1615は、3Dパイプライン1612およびメディアパイプライン1616によりスポーンされたスレッドを実行するためのロジックを含む。一実施形態において、これらのパイプラインは、スレッド実行要求を3D/メディアサブシステム1615に送信し、利用可能なスレッド実行リソースに様々な要求をアービトレートおよびディスパッチするためのスレッドディスパッチロジックを含む。実行リソースは、3Dおよびメディアスレッドを処理するためのグラフィックス実行ユニットのアレイを含む。いくつかの実施形態において、3D/メディアサブシステム1615は、スレッド命令およびデータのための1または複数の内部キャッシュを含む。いくつかの実施形態において、サブシステムは、スレッド間のデータを共有して出力データを格納するためのレジスタおよびアドレス指定可能メモリを含む共有メモリもまた含む。
図16Bは、本明細書に説明された実施形態による、タイルドアーキテクチャを有するグラフィックスプロセッサ1620を示す。一実施形態において、グラフィックスプロセッサ1620は、グラフィックスエンジンタイル1610A−1610D内に図16Aのグラフィックス処理エンジン1610の複数のインスタンスを有するグラフィックス処理エンジンクラスタ1622を含む。各グラフィックスエンジンタイル1610A−1610Dは、タイルインターコネクト1623A−1623Fのセットを介して相互接続され得る。各グラフィックスエンジンタイル1610A−1610Dは、メモリインターコネクト1625A−1625Dを介してメモリモジュールまたはメモリデバイス1626A−1626Dにもまた接続され得る。メモリデバイス1626A−1626Dは、任意のグラフィックスメモリ技術を用い得る。例えば、メモリデバイス1626A−1626Dは、グラフィックスダブルデータレート(GDDR)メモリであり得る。メモリデバイス1626A−1626Dは、一実施形態において、これらのそれぞれのグラフィックスエンジンタイル1610A−1610Dとオンダイ(on−die)であり得る高帯域幅メモリ(HBM)モジュールである。一実施形態において、メモリデバイス1626A−1626Dは、これらのそれぞれのグラフィックスエンジンタイル1610A−1610Dの頂部にスタックされ得る、スタックメモリデバイスである。一実施形態において、各グラフィックスエンジンタイル1610A−1610Dおよび関連付けられたメモリ1626A−1626Dは、別個のチップレット上に存在し、図24Bから図24Dにさらに詳細に説明されるように、それらはベースダイまたはベース基板にボンディングされる。
グラフィックス処理エンジンクラスタ1622は、オンチップまたはオンパッケージファブリックインターコネクト1624に接続され得る。ファブリックインターコネクト1624は、グラフィックスエンジンタイル1610A−1610Dと、ビデオコーデック1606および1または複数のコピーエンジン1604などのコンポーネントとの間での通信を可能にし得る。コピーエンジン1604は、メモリデバイス1626A−1626Dおよびグラフィックスプロセッサ1620の外部にあるメモリ(例えば、システムメモリ)から、それらへ、および、それらの間で、データを移動するように用いられ得る。ファブリックインターコネクト1624は、グラフィックスエンジンタイル1610A−1610Dを相互接続するようにも用いられ得る。グラフィックスプロセッサ1620は、ディスプレイデバイス1618の外部ディスプレイデバイス1618への接続を可能とするように、任意選択的にディスプレイコントローラ1602を含み得る。グラフィックスプロセッサは、グラフィックスまたは計算アクセラレータとしてもまた構成され得る。アクセラレータ構成において、ディスプレイコントローラ1602およびディスプレイデバイス1618は省略され得る。
グラフィックスプロセッサ1620は、ホストインタフェース1628を介してホストシステムに接続され得る。ホストインタフェース1628は、グラフィックスプロセッサ1620、システムメモリ、および/または他のシステムコンポーネントの間で通信を可能にし得る。ホストインタフェース1628は、例えば、PCIエクスプレスバスまたは別のタイプのホストシステムインタフェースであり得る。
図16Cは、本明細書で説明された実施形態による、計算アクセラレータ1630を示す。計算アクセラレータ1630は、図16Bのグラフィックスプロセッサ1620とのアーキテクチャ的類似点を含み得、計算アクセラレーションのために最適化される。コンピュートエンジンクラスタ1632は、パラレルまたはベクトルベースの汎用計算操作を最適化するための実行ロジックを含む計算エンジンタイル1640A−1640Dのセットを含み得る。一実施形態において、1または複数の計算エンジンタイル1640A−1640Dが、メディアアクセラレーションを実行するロジックを含み得るが、いくつかの実施形態において、計算エンジンタイル1640A−1640Dは、固定された機能グラフィックス処理ロジックを含まない。計算エンジンタイル1640A−1640Dは、メモリインターコネクト1625A−1625Dを介してメモリ1626A−1626Dに接続し得る。メモリ1626A−1626Dおよびメモリインターコネクト1625A−1625Dは、グラフィックスプロセッサ1620にあるように同様の技術であり得、または異なり得る。グラフィックス計算エンジンタイル1640A−1640Dもまた、タイルインターコネクト1623A−1623Fのセットを介して相互接続され得、ファブリックインターコネクト1624と接続され、および/または相互接続され得る。一実施形態において、計算アクセラレータ1630は、デバイスワイドのキャッシュとして構成され得る大きなL3キャッシュ1636を含む。計算アクセラレータ1630は、図16Bのグラフィックスプロセッサ1620と同様の方式で、ホストインタフェース1628を介してホストプロセッサおよびメモリにもまた接続され得る。グラフィックス処理エンジン
図17は、いくつかの実施形態によるグラフィックスプロセッサのグラフィックス処理エンジン1710のブロック図である。一実施形態において、グラフィックス処理エンジン(GPE)1710は図15Aに示されたGPE1510のバージョンであり、また、図15Bのグラフィックスエンジンタイル1510A−1510Dもまた表し得る。本明細書における任意の他の図面の要素と同じ参照番号(または名称)を有する図17の要素は、本明細書においてどこか他の場所で説明されるものと同様な任意の方式で動作または機能することができるが、そのようなものに限定されることはない。例えば、図15Aの3Dパイプライン1612およびメディアパイプライン1616が図示されている。GPE1710のいくつかの実施形態において、メディアパイプライン1616は任意選択的であり、GPE1710内に明示的に含まれていなくてもよい。例えば、少なくとも1つの実施形態において、別個のメディアおよび/またはイメージプロセッサがGPE1710に結合される。
いくつかの実施形態において、GPE1710は、コマンドストリーマ1703と結合するか、またはそれを含み、コマンドストリーマ1703は、コマンドストリームを3Dパイプライン1612および/またはメディアパイプライン1616に提供する。いくつかの実施形態において、コマンドストリーマ1703は、システムメモリ、または内部キャッシュメモリおよび共有キャッシュメモリのうちの1または複数であり得るメモリと結合される。いくつかの実施形態において、コマンドストリーマ1703は、メモリからコマンドを受信し、これらのコマンドを3Dパイプライン1612および/またはメディアパイプライン1616に送信する。コマンドはリングバッファからフェッチされた指示であり、それは3Dパイプライン1612およびメディアパイプライン1616のためのコマンドを格納する。一実施形態において、リングバッファはさらに、複数のコマンドのバッチを格納するバッチコマンドバッファを含み得る。3Dパイプライン1612に関するコマンドは、限定されることはないが、3Dパイプライン1612に関する頂点およびジオメトリデータ、および/または、メディアパイプライン316に関する画像データおよびメモリオブジェクトなどの、メモリに格納されたデータへの参照もまた含み得る。3Dパイプライン1612およびメディアパイプライン1616は、各パイプライン内のロジックによる複数の動作を実行し、または1または複数の実行スレッドをグラフィックスコアアレイ1714にディスパッチすることにより、コマンドおよびデータを処理する。一実施形態において、グラフィックスコアアレイ1714は、1または複数のブロックのグラフィックスコア(例えば、グラフィックスコア1715A、グラフィックスコア1715B)を含み、各ブロックは1または複数のグラフィックスコアを含む。各グラフィックスコアは、グラフィックスおよび計算操作、ならびに、固定機能テクスチャ処理を実行する汎用およびグラフィックス固有の実行ロジック、および/または、機械学習および人工知能アクセラレーションロジックを含むグラフィックス実行リソースのセットを含む。
様々な実施形態において、3Dパイプライン1612は、命令を処理して、実行スレッドをグラフィックスコアアレイ1714にディスパッチすることにより、頂点シェーダ、ジオメトリシェーダ、画素シェーダ、断片シェーダ、コンピュートシェーダまたは他のシェーダプログラムなどの、1または複数のシェーダプログラムを処理する固定機能およびプログラマブルロジックを含み得る。グラフィックスコアアレイ1714は、これらのシェーダプログラムの処理での使用のために実行リソースの統合されたブロックを提供する。グラフィックスコアアレイ1714のグラフィックスコア1715A−1714B内の多目的実行ロジック(例えば、実行ユニット)は、様々な3D APIシェーダ言語に対するサポートを含み、複数のシェーダに関連付けられる複数の同時実行スレッドを実行することができる。
いくつかの実施形態において、グラフィックスコアアレイ1714はまた、ビデオおよび/または画像処理を実行する実行ロジックなどの、メディア機能を含む。一実施形態において、実行ユニットは、グラフィックス処理演算に加えて、並列の汎用計算操作を実行するようにプログラム可能な汎用ロジックを含む。汎用ロジックは、図14のプロセッサコア1407または図15Aにあるようなコア1502A−1502N内の汎用ロジックと並列に、または、これらと共に処理演算を実行できる。
グラフィックスコアアレイ1714上で実行するスレッドにより生成される出力データは、統合リターンバッファ(URB)1718内のメモリにデータを出力できる。URB1718は、複数のスレッドに対するデータを格納できる。いくつかの実施形態において、URB1718は、グラフィックスコアアレイ1714上で実行する異なるスレッド間のデータを送信するために用いられてよい。いくつかの実施形態において、URB1718は、グラフィックスコアアレイ上および共有機能ロジック1720内の固定機能ロジック上のスレッド間の同期のためにさらに用いられてよい。
いくつかの実施形態において、グラフィックスコアアレイ1714はスケーラブルであり、したがって、当該アレイは、可変数のグラフィックスコアを含み、各々がGPE1710の目標電力および性能レベルに基づいて可変数の実行ユニットを有する。一実施形態において、実行リソースは、動的にスケーラブルであり、したがって、実行リソースは、必要に応じてイネーブルまたはディセーブルにされてよい。
グラフィックスコアアレイ1714は、グラフィックスコアアレイ内のグラフィックスコア間で共有される複数のリソースを含む共有機能ロジック1720と結合する。共有機能ロジック1720内の共有機能は、グラフィックスコアアレイ1714に専用の補足的な機能を提供するハードウェアロジックユニットである。様々な実施形態において、共有機能ロジック1720は、サンプラ1721、数学1722、およびスレッド間通信(ITC)1723ロジックを含むが、限定されることはない。さらに、いくつかの実施形態では、共有機能ロジック1720内に1または複数のキャシュ1725を実装する。
共有機能は、少なくとも、所与の専用の機能に関する需要がグラフィックスコアアレイ1714内に含むのに不十分である場合に、実装される。代わりに、その専用の機能の単一のインスタンス化が、共有機能ロジック1720のスタンドアロンエンティティとして実装され、グラフィックスコアアレイ1714内の実行リソースの間で共有される。グラフィックスコアアレイ1714の間で共有され、グラフィックスコアアレイ1714内に含まれる機能の正確なセットは、実施形態にわたって変わる。いくつかの実施形態において、グラフィックスコアアレイ1714により広く用いられる共有機能ロジック1720内の特定の共有機能は、グラフィックスコアアレイ1714内の共有機能ロジック1716に含まれてよい。様々な実施形態において、グラフィックスコアアレイ1714内の共有機能ロジック1716は、共有機能ロジック1720内の一部またはすべてのロジックを含み得る。一実施形態においては、共有機能ロジック1720内のすべてのロジック要素は、グラフィックスコアアレイ1714の共有機能ロジック1716内で重複してよい。一実施形態において、グラフィックスコアアレイ1714内の共有機能ロジック1716を優先して、共有機能ロジック1720が除外される。実行ユニット
図18A〜図18Bは、本明細書において説明される実施形態によるグラフィックスプロセッサコアにおいて採用される処理要素のアレイを含むスレッド実行ロジック1800を示す。本明細書における任意の他の図面の要素と同じ参照番号(または名称)を有する図18A〜図18Bの要素は、本明細書においてどこか他の場所で説明されるものと同様な任意の方式で動作または機能することができるが、そのようなものに限定されることはない。図18Aから図18Bは、スレッド実行ロジック1800の概要を示し、それは図2Bの各サブコア221A−221Fに図示されるハードウェアロジックに表され得る。図18Aは、汎用グラフィックスプロセッサ内の実行ユニットを表し、一方、図18Bは、計算アクセラレータ内で用いられ得る実行ユニットを表す。
図18Aに図示されるように、いくつかの実施形態において、スレッド実行ロジック1800は、シェーダプロセッサ1802、スレッドディスパッチャ1804、命令キャッシュ1806、複数の実行ユニット1808A−1808Nを含むスケーラブルな実行ユニットアレイ、サンプラ1810、共有ローカルメモリ1811、データキャッシュ1812、およびデータポート1814を含む。一実施形態において、スケーラブルな実行ユニットアレイは、ワークロードの計算要求に基づいて、1または複数の実行ユニット(例えば、実行ユニット1808A、1808B、1808C、1808Dから1808N−1および1808Nのいずれか)をイネーブルまたはディセーブルにすることによって、動的にスケーリングし得る。一実施形態において、含まれるコンポーネントは、コンポーネントのそれぞれに接続する相互接続ファブリックを介して相互接続される。いくつかの実施形態において、スレッド実行ロジック1800は、命令キャッシュ1806、データポート1814、サンプラ1810および実行ユニット1808A−1808Nのうちの1または複数を通じた、システムメモリまたはキャッシュメモリなどのメモリへの1または複数の接続を含む。いくつかの実施形態において、各実行ユニット(例えば、1808A)は、各スレッドに対して並列に複数のデータ要素を処理している一方で、複数の同時ハードウェアスレッドを実行することが可能なスタンドアロン型のプログラマブル汎用計算ユニットである。様々な実施形態において、実行ユニット1808A−1808Nのアレイは、任意の数の個々の実行ユニットを含むようにスケーラブルである。
いくつかの実施形態において、実行ユニット1808A−1808Nは、主としてシェーダプログラムを実行するために用いられる。シェーダプロセッサ1802は、様々なシェーダプログラムを処理し得、スレッドディスパッチャ1804を介してシェーダプログラムに関連付けられる実行スレッドをディスパッチし得る。一実施形態において、スレッドディスパッチャは、グラフィックスおよびメディアパイプラインからの複数のスレッド開始要求を調整し、実行ユニット1808A−1808Nのうち1または複数の実行ユニット上で要求された複数のスレッドをインスタンス化する、ロジックを含む。例えば、ジオメトリパイプラインは、頂点、テセレーションまたはジオメトリシェーダを処理用のスレッド実行ロジックにディスパッチすることができる。いくつかの実施形態において、スレッドディスパッチャ1804は、実行しているシェーダプログラムからのランタイムスレッドスポーニング要求を処理することもできる。
いくつかの実施形態において、実行ユニット1808A−1808Nは、多くの標準的な3Dグラフィックスシェーダ命令に対するネイティブサポートを含む命令セットをサポートしており、したがって、グラフィックスライブラリ(例えば、Direct 3DおよびOpenGL)からのシェーダプログラムが最小限の移動で実行される。実行ユニットは、頂点およびジオメトリ処理(例えば、頂点プログラム、ジオメトリプログラム、頂点シェーダ)、ピクセル処理(例えば、画素シェーダ、断片シェーダ)および汎用処理(例えば、コンピュートおよびメディアシェーダ)をサポートする。実行ユニット1808A−1808Nのそれぞれは、マルチ発行型の単一命令複数データ(SIMD)実行を可能にし、マルチスレッド動作は、より高いレイテンシメモリアクセスにあるにも関わらず効率的な実行環境を可能にする。各実行ユニット内の各ハードウェアスレッドは、専用の高帯域幅レジスタファイルおよび関連する独立したスレッド状態を有する。実行は、整数、単精度および倍精度浮動小数点演算、SIMD分岐性能、論理演算、超越演算および他の寄せ集め演算が可能なパイプラインへのクロック毎のマルチ発行である。メモリからのデータまたは共有機能のうちの1つからのデータを待機している一方で、実行ユニット1808A−1808N内の依存性ロジックは、要求したデータが戻ってくるまで待機中のスレッドをスリープさせる。待機中のスレッドがスリープしている一方で、ハードウェアリソースは、他のスレッドを処理することに専念してよい。例えば、頂点シェーダオペレーションに関連付けられる遅延の最中に、実行ユニットは、異なる頂点シェーダを含む画素シェーダ、断片シェーダまたは別のタイプのシェーダプログラムに対する操作を実行できる。様々な実施形態は、SIMDの使用の代替として、またはSIMDの使用に加えて、単一命令複数スレッド(SIMT)の使用による実行を用いるように適用され得る。SIMDコアへの参照、または動作は、SIMTにもまた適用され得、あるいははSIMTと組み合わせられたSIMDにも適用され得る。
実行ユニット1808A−1808Nの各実行ユニットは、データ要素のアレイ上で動作する。データ要素の数は、「実行サイズ」または命令に対するチャネルの数である。実行チャネルは、データ要素アクセス、マスキングおよび命令内のフロー制御のための実行についての論理ユニットである。チャネルの数は、特定のグラフィックスプロセッサ用の物理算術論理ユニット(ALU)または浮動小数点ユニット(FPU)の数とは無関係であり得る。いくつかの実施形態において、実行ユニット1808A−1808Nは整数および浮動小数点データタイプをサポートする。
実行ユニット命令設定は、SIMD命令を含む。様々なデータ要素は、レジスタ内のパックドデータタイプとして格納されることができ、実行ユニットは、要素のデータサイズに基づいて、様々な要素を処理するであろう。例えば、256ビット幅のベクトルを操作する場合、ベクトルの256ビットがレジスタに格納され、実行ユニットは、4つの別個の64ビットパックドデータ要素(クアッドワード(QW)サイズのデータ要素)、8つの別個の32ビットパックドデータ要素(ダブルワード(DW)サイズのデータ要素)、16個の別個の16ビットパックドデータ要素(ワード(W)サイズのデータ要素)または32個の別個の8ビットデータ要素(バイト(B)サイズのデータ要素)としてベクトルを操作する。しかしながら、異なるベクトル幅およびレジスタサイズが可能である。
一実施形態において、1または複数の実行ユニットは、融合されたEUに共通のスレッド制御ロジック(1807A−1807N)を有する融合された実行ユニット1809A−1809Nと組み合わせられ得る。複数のEUが、EUグループと融合し得る。融合されたEUグループ内の各EUは、別個のSIMDハードウェアスレッドを実行するように構成され得る。融合されたEUグループにおけるEUの数は、実施形態によって変わり得る。さらに、様々なSIMD幅は、EU毎に実行され得、限定されることはないが、SIMD8、SIMD16およびSIMD32を含む。各融合されたグラフィックス実行ユニット1809A−1809Nは、少なくとも2つの実行ユニットを含む。例えば、融合された実行ユニット1809Aは、第1のEU1808Aと、第2のEU1808Bと、第1のEU1808Aおよび第2のEU1808Bに共通するスレッド制御ロジック1807Aとを含む。スレッド制御ロジック1807Aは、融合されたグラフィックス実行ユニット1809A上で実行されるスレッドを制御し、融合された実行ユニット1809A−1809N内の各EUが共通の命令ポインタレジスタを用いて実行することを可能にする。
1または複数の内部命令キャッシュ(例えば、1806)は、実行ユニットのためのスレッド命令をキャッシュするスレッド実行ロジック1800に含まれる。いくつかの実施形態において、スレッド実行の最中のスレッドデータをキャッシュするために、1または複数のデータキャッシュ(例えば、1812)が含まれる。実行ロジック1800上のスレッド実行は、共有ローカルメモリ1811において明示的に管理されたデータもまた格納し得る。いくつかの実施形態において、3D演算用のテクスチャサンプリングおよびメディア演算用のメディアサンプリングを提供するために、サンプラ1810が含まれる。いくつかの実施形態において、サンプラ1810は、サンプリングされたデータを実行ユニットに提供する前のサンプリング処理の最中にテクスチャまたはメディアデータを処理するために、専用のテクスチャまたはメディアサンプリング機能を含む。
実行の最中、グラフィックスおよびメディアパイプラインは、スレッドスポーニングおよびディスパッチロジックを介してスレッド実行ロジック1800にスレッド開始要求を送信する。ジオメトリックオブジェクトのグループが処理されて、ひとたび画素データへとラスタライズされると、シェーダプロセッサ1802内の画素プロセッサロジック(例えば、画素シェーダロジック、断片シェーダロジックなど)が、出力情報をさらに算出するために起動され、サーフェス(例えば、カラーバッファ、デプスバッファ、ステンシルバッファなど)を出力するために結果を書き込ませる。いくつかの実施形態において、画素シェーダまたは断片シェーダは、ラスタライズされたオブジェクトにわたって補間されるべき様々な頂点特性の値を算出する。いくつかの実施形態において、シェーダプロセッサ1802内の画素プロセッサロジックは、次に、アプリケーションプログラミングインタフェース(API)供給型画素または断片シェーダプログラムを実行する。シェーダプログラムを実行するべく、シェーダプロセッサ1802は、スレッドディスパッチャ1804を介して複数のスレッドを実行ユニット(例えば、1808A)にディスパッチする。いくつかの実施形態において、シェーダプロセッサ1802は、メモリに格納された複数のテクスチャマップにおけるテクスチャデータにアクセスするべく、サンプラ1810におけるテクスチャサンプリングロジックを用いる。テクスチャデータおよび入力されたジオメトリデータに対する算術演算は、各ジオメトリック断片に対する画素カラーデータを算出する、または、さらなる処理から1または複数の画素を廃棄する。
いくつかの実施形態において、データポート1814は、グラフィックスプロセッサの出力パイプライン上でさらに処理するために、処理済みデータをメモリに出力するメモリアクセスメカニズムをスレッド実行ロジック1800に提供する。いくつかの実施形態において、データポート1814は、データポートを介したメモリアクセスのためにデータをキャッシュする1または複数のキャッシュメモリ(例えば、データキャッシュ1812)を含む、または、これに結合される。
一実施形態において、実行ロジック1800は、レイトレーシングアクセラレーション機能を提供し得るレイトレーサ1805もまた含み得る。レイトレーサ1805は、レイ生成に関する命令/関数を含むレイトレーシング命令セットをサポートし得る。レイトレーシング命令セットは、図2Cにおいてレイトレーシングコア245によってサポートされるレイトレーシング命令セットと同様であってもよく、または異なっていてもよい。
図18Bは、実施形態による、実行ユニット1808の例示的な内部詳細を示す。グラフィックス実行ユニット1808は、命令フェッチユニット1837、汎用レジスタファイルアレイ(GRF)1824、アーキテクチャレジスタファイルアレイ(ARF)1826、スレッドアービタ1822、送信ユニット1830、分岐ユニット1832、SIMD浮動小数点ユニット(FPU)1834のセット、および、一実施形態において、専用の整数SIMD ALU1835のセットを含み得る。GRF1824およびARF1826は、グラフィックス実行ユニット1808においてアクティブであり得る、それぞれの同時ハードウェアスレッドに関連付けられた汎用レジスタファイルおよびアーキテクチャレジスタファイルのセットを含む。一実施形態において、スレッドごとに、アーキテクチャ状態はARF1826において維持され、一方、スレッド実行の最中に用いられるデータは、GRF1824に格納される。各スレッドの命令ポインタを含む、各スレッドの実行状態は、ARF1826におけるスレッド特有のレジスタに保持され得る。
一実施形態において、グラフィックス実行ユニット1808は、同時マルチスレッディング(SMT)と、細粒度のインターリーブ型マルチスレッディング(IMT)との組み合わせであるアーキテクチャを有する。アーキテクチャは、同時スレッドの目標数および実行ユニット毎のレジスタの数に基づいて設計時に細かくチューニングされ得るモジュラー構成を有し、実行ユニットのリソースが複数の同時スレッドを実行するために用いられるロジックわたって分割される。グラフィックス実行ユニット1808によって実行され得る論理スレッドの数は、ハードウェアスレッドの数に限定されることはなく、複数の論理スレッドは、各ハードウェアスレッドに割り当てられ得る。
一実施形態において、グラフィックス実行ユニット1808は、各々が異なる命令であり得る複数の命令を共同発行できる。グラフィックス実行ユニットスレッド1808のスレッドアービタ1822は、実行のために送信ユニット1830、分岐ユニット1832またはSIMD FPU1834のうちの1つに命令をディスパッチすることができる。各実行スレッドは、GRF1824内の128個の汎用レジスタにアクセスすることができ、各レジスタは、32ビットデータ要素のSIMD8−要素ベクトルとしてアクセス可能な32バイトを格納できる。一実施形態において、各実行ユニットのスレッドは、GRF1824内の4Kバイトへのアクセスを有するが、実施形態は、そのように限定されるわけではなく、他の実施形態においては、より多いまたはより少ない数のレジスタリソースが提供されてよい。一実施形態において、グラフィックス実行ユニット1808は、独立して計算操作を実行し得る7個のハードウェアスレッドにパーティショニングされるが、実行ユニット毎のスレッドの数もまた、実施形態によって変化させることができる。例えば、一実施形態において、最大16のハードウェアスレッドがサポートされる。7個のスレッドが4Kバイトにアクセスし得る実施形態において、GRF1824は合計で28Kバイトを格納し得る。16個のスレッドが4Kバイトにアクセスし得る場合、GRF1824は合計で64Kバイトを格納し得る。フレキシブルなアドレッシングモードは、効果的により広いレジスタを構築する、または、ストライド矩形ブロックデータ構造を表すために、レジスタが一緒にアドレッシングされることを可能にし得る。
一実施形態において、メモリ動作、サンプラ動作、および他のより長いレイテンシのシステム通信が、メッセージパッシング送信ユニット1830によって実行される「送信」命令を介してディスパッチされる。一実施形態において、分岐命令が、SIMDダイバージェンスおよび最終的なコンバージェンスを促すように、専用の分岐ユニット1832にディスパッチされる。
一実施形態において、グラフィックス実行ユニット1808は、浮動小数点演算を実行する1または複数のSIMD浮動小数点ユニット(FPU)1834を含む。一実施形態において、FPU1834は整数計算もサポートする。一実施形態において、FPU1834は、最大M個の数の32ビット浮動小数点(または整数)演算をSIMD実行でき、または、最大2M個の16ビット整数または16ビット浮動小数点演算をSIMD実行できる。一実施形態において、FPUのうちの少なくとも1つは、高スループットで卓越した数学関数および倍精度の64ビット浮動小数点をサポートする拡張数学機能を提供する。いくつかの実施形態において、8ビット整数SIMD ALU1835のセットも存在し、具体的には、機械学習計算に関連付けられる操作を実行するように最適化され得る。
一実施形態において、グラフィックス実行ユニット1808の複数のインスタンスのアレイは、グラフィックスサブコアグループ(例えば、サブスライス)においてインスタンス化され得る。スケーラビリティについて、製品の設計者は、サブコアグループごとに実行ユニットの正確な数を選択できる。一実施形態において、実行ユニット1808は、複数の実行チャネルにわたって命令を実行できる。さらなる実施形態において、グラフィックス実行ユニット1808上で実行される各スレッドは、異なるチャネル上で実行される。
図19は、実施形態による追加の実行ユニット1900を示す。実行ユニット1900は、例えば、図15Cにあるように計算エンジンタイル1540A−1540Dでの使用のために計算が最適化された実行ユニットであり得るが、そのように限定されることはない。実行ユニット1900の変形例は、図15Bにあるようにグラフィックスエンジンタイル1510A−1510Dにおいても用いられ得る。一実施形態において、実行ユニット1900は、スレッド制御ユニット1901、スレッド状態ユニット1902、命令フェッチ/プリフェッチユニット1903、および命令デコードユニット1904を含む。実行ユニット1900は、実行ユニット内のハードウェアスレッドに割り当てられ得るレジスタを格納する、レジスタファイル1906をさらに含む。実行ユニット1900は、送信ユニット1907および分岐ユニット1908をさらに含む。一実施形態において、送信ユニット1907および分岐ユニット1908は、図18Bのグラフィックス実行ユニット1808の送信ユニット1830および分岐ユニット1832と同様に動作し得る。
実行ユニット1900は、複数の異なるタイプの機能ユニットを含む計算ユニット1910もまた含む。一実施形態において、計算ユニット1910は、算術論理ユニットのアレイを含むALUユニット1911を含む。ALUユニット1911は、64ビット、32ビット、および16ビット整数演算および浮動小数点演算を実行するように構成され得る。整数演算および浮動小数点演算は、一斉に実行され得る。計算ユニット1910は、シストリックアレイ1912、および数学ユニット1913もまた含み得る。シストリックアレイ1912は、シストリック方式でベクトルまたは他のデータ並列演算を実行するように用いられ得るデータ処理ユニットの、Wの広さおよびDの深さのネットワークを含む。一実施形態において、シストリックアレイ1912は、行列ドット積算操作などの、行列動作を実行するように構成され得る。一実施形態において、シストリックアレイ1912は、16ビット浮動小数点演算、ならびに8ビットおよび4ビット整数演算をサポートする。一実施形態において、シストリックアレイ1912は、機械学習動作をアクセラレートするように構成され得る。そのような実施形態において、シストリックアレイ1912は、bfloat16ビット浮動小数点フォーマットのためのサポートで構成され得る。一実施形態において、ALUユニット1911よりも効率的で低電力な方式で数学演算の特定サブセットを実行するように、数学ユニット1913が含まれ得る。数学ユニット1913は、他の実施形態によって提供されるグラフィックス処理エンジンの共有機能ロジックにおいて見られ得る、数学ロジックの変形例を含み得る(例えば、図17の共有機能ロジック1720の数学ロジック1722)。一実施形態において、数学ユニット1913は、32ビットおよび64ビット浮動小数点演算を実行するように構成され得る。
スレッド制御ユニット1901は、実行ユニット内のスレッドの実行を制御するロジックを含む。スレッド制御ユニット1901は、実行ユニット1900内のスレッドの実行を開始、停止、および先取りするスレッド調整ロジックを含み得る。スレッド状態ユニット1902は、実行ユニット1900上で実行するように割り当てられたスレッドのために、スレッド状態を格納するように用いられ得る。実行ユニット1900内のスレッド状態の格納は、スレッドがブロックされた、またはアイドルになった場合に、これらのスレッドの急速なプリエンプションを可能にする。命令フェッチ/プリフェッチユニット1903は、より高いレベルの実行ロジックの命令キャッシュ(例えば、図18Aにあるような命令キャッシュ1806)から命令をフェッチし得る。命令フェッチ/プリフェッチユニット1903は、現在実行中のスレッドの分析に基づいて、命令キャッシュにロードされるべき命令のプリフェッチ要求もまた発行し得る。命令デコードユニット1904は、計算ユニットによって実行されるべき命令をデコードするように用いられ得る。一実施形態において、命令デコードユニット1904は、複雑な命令を構成要素のマイクロオペレーションにデコードするためのセカンダリデコーダとして用いられ得る。
実行ユニット1900はさらに、実行ユニット1900上で実行するハードウェアスレッドによって用いられ得るレジスタファイル1906を含む。レジスタファイル1906におけるレジスタは、実行ユニット1900の計算ユニット1910内で複数の同時スレッドを実行するように用いられるロジックにわたって、分割されてよい。グラフィックス実行ユニット1900によって実行され得る論理スレッドの数は、ハードウェアスレッドの数に限定されることはなく、複数の論理スレッドが、各ハードウェアスレッドに割り当てられてよい。レジスタファイル1906のサイズは、サポートハードウェアスレッドの数に基づいた実施形態にわたって変わってよい。一実施形態において、レジスタリネーミングが、レジスタをハードウェアスレッドに動的に割り当てるように用いられてよい。
図20は、いくつかの実施形態による、グラフィックスプロセッサ指示フォーマット2000を示すブロック図である。1つまたは複数の実施形態において、グラフィックスプロセッサ実行ユニットは、複数のフォーマットにおける命令を有する命令セットをサポートする。実線の枠は、実行ユニット命令に一般的に含まれるコンポーネントを示し、一方、破線は、任意選択的であり、または、命令のサブセットにのみ含まれるコンポーネントを含む。いくつかの実施形態において、説明されかつ図示される命令フォーマット2000は、ひとたび命令が処理された時点の命令デコードによるマイクロオペレーションとは対照的に、それらが実行ユニットに供給される命令という点で、マクロ命令である。
いくつかの実施形態において、グラフィックスプロセッサ実行ユニットは、128ビットの命令フォーマット2010における複数の命令をネイティブにサポートする。64ビットの圧縮命令フォーマット2030は、選択された命令、命令オプションおよびオペランドの数に基づいていくつかの命令が利用可能である。ネイティブな128ビットの命令フォーマット2010は、すべての命令オプションへのアクセスを提供し、一方、いくつかのオプションおよび操作は、64ビットフォーマット2030に制限される。64ビットフォーマット2030において利用可能なネイティブ命令は、実施形態によって変わる。いくつかの実施形態において、命令は、インデックスフィールド2013における複数のインデックス値のセットを用いて部分的に圧縮される。実行ユニットハードウェアは、インデックス値に基づいて圧縮テーブルのセットを参照し、128ビットの命令フォーマット2010内のネイティブ命令を再構成するために、圧縮テーブル出力を用いる。他のサイズおよびフォーマットの命令が用いられてもよい。
各フォーマットについて、命令オペコード2012は、実行ユニットが実行する操作を定義する。実行ユニットは、各オペランドの複数のデータ要素に並行して各命令を実行する。例えば、追加の命令に応じて、実行ユニットは、テクスチャ成分またはピクチャ成分を表す各カラーチャネルにわたって追加の操作を同時に実行する。デフォルトで、実行ユニットは、オペランドのすべてのデータチャネルにわたって各命令を実行する。いくつかの実施形態において、命令制御フィールド2014は、チャネル選択(例えば、プレディケーション)およびデータチャネルオーダ(例えば、スウィズル)などの特定の実行オプションにわたる制御を可能にする。128ビットの命令フォーマット2010内の命令について、実行サイズフィールド2016は、並列に実行されるデータチャネルの数を制限するであろう。いくつかの実施形態において、実行サイズフィールド2016は、64ビットのコンパクトな命令フォーマット2030での使用のために利用可能ではない。
いくつかの実行ユニット命令は、2つのソースオペランドsrc0 2020、src1 2022、および1つのデスティネーション2018を含む、最大3つのオペランドを有する。いくつかの実施形態において、実行ユニットは、デュアルデスティネーション命令をサポートし、デスティネーションのうちの1つは暗に示されている。データ操作命令は、第3のソースオペランド(例えば、SRC2 2024)を有し得、命令オペコード2012は、ソースオペランドの数を決定する。命令の最後のソースオペランドは、命令と共に渡される(例えば、ハードコードされた)即値であり得る。
いくつかの実施形態において、128ビットの命令フォーマット2010は、例えば、直接レジスタアドレッシングモードまたは間接レジスタアドレッシングモードが用いられるかを特定するアクセス/アドレスモードフィールド2026を含む。直接レジスタアドレッシングモードが用いられる場合、1または複数のオペランドのレジスタアドレスは、命令内のビットにより直接提供される。
いくつかの実施形態において、128ビットの命令フォーマット2010は、アクセス/アドレスモードフィールド2026を含み、命令のアドレスモードおよび/またはアクセスモードを規定する。一実施形態において、アクセスモードは、命令のデータアクセスアライメントを定義するために用いられる。いくつかの実施形態では、16バイトアライン型のアクセスモードおよび1バイトアライン型のアクセスモードを含むアクセスモードをサポートし、アクセスモードのバイトアライメントが命令オペランドのアクセスアライメントを決定する。例えば、第1モードの場合、命令はソースオペランドおよびデスティネーションオペランドに対してバイトアライン型のアドレッシングを使用してよく、第2モードの場合、命令はすべてのソースオペランドおよびデスティネーションオペランドに対して16バイトアライン型のアドレッシングを使用してよい。
一実施形態において、アクセス/アドレスモードフィールド2026のアドレスモードの一部は、命令が直接または間接アドレッシングを使用するか否かを決定する。直接レジスタアドレッシングモードが用いられる場合、命令内のビットが1または複数のオペランドのレジスタアドレスを直接提供する。間接レジスタアドレッシングモードが用いられる場合、1または複数のオペランドのレジスタアドレスは、命令内のアドレスレジスタの値およびアドレス即値フィールドに基づいて算出されてよい。
いくつかの実施形態において、複数の命令は、オペコードデコード2040を簡略化するべく、オペコード2012ビットフィールドに基づいてグループ化される。8ビットオペコードの場合、ビット4、5、および6は、実行ユニットがオペコードのタイプを決定することを可能にする。示される正確なオペコードグループ化は、例に過ぎない。いくつかの実施形態において、移動およびロジックオペコードグループ2042は、データ移動およびロジック命令(例えば、移動(mov)、比較(cmp))を含む。いくつかの実施形態において、移動およびロジックグループ2042は、5つの最上位ビット(MSB)を共有し、移動(mov)命令は0000xxxxbの形式であり、ロジック命令は0001xxxxbの形式である。フロー制御命令グループ2044(例えば、コール、ジャンプ(jmp))は、0010xxxxb(例えば、0x20)の形式の命令を含む。寄せ集め命令グループ2046は、命令の混合を含み、0011xxxxb(例えば、0x30)の形式の同期命令(例えば、待機、送信)を含む。並列数学命令グループ2048は、0100xxxxb(例えば、0x40)の形式のコンポーネントに関する算術命令(例えば、加算、乗算(mul))を含む。並列数学グループ2048は、データチャネルに並行して算術演算を実行する。ベクトル数学グループ(vector math group)2050は、0101xxxxb(例えば、0x50)の形式の算術命令(例えば、dp4)を含む。ベクトル数学グループ(vector math group)は、ベクトルオペランド上でドット積計算などの算術を実行する。図示されたオペコードデコード2040は、一実施形態において、実行ユニットのどの一部がデコードされた命令を実行するために用いられるであろうかを、決定するように用いられ得る。例えば、いくつかの命令が、シストリックアレイによって実行されるであろうシストリック命令として指定され得る。レイトレーシング命令(図示せず)などの他の命令は、実行ロジックのスライスまたはパーティショニング内で、レイトレーシングコアまたはレイトレーシングロジックに転送され得る。グラフィックスパイプライン
図21は、別の実施形態による、グラフィックスプロセッサ2100のブロック図である。本明細書における任意の他の図面の要素と同じ参照番号(または名称)を有する図21の要素は、本明細書においてどこか他の場所で説明されるものと同様な任意の方式で動作または機能することができるが、そのようなものに限定されることはない。
いくつかの実施形態において、グラフィックスプロセッサ2100は、ジオメトリパイプライン2120、メディアパイプライン2130、ディスプレイエンジン2140、スレッド実行ロジック2150およびレンダリング出力パイプライン2170を含む。いくつかの実施形態において、グラフィックスプロセッサ2100は、1または複数の汎用プロセッシングコアを含むマルチコア処理システム内のグラフィックスプロセッサである。グラフィックスプロセッサは、1または複数制御レジスタ(図示せず)へのレジスタ書き込みにより制御される、または、リング相互接続2102を介してグラフィックスプロセッサ2100に発行されるコマンドを介して制御される。いくつかの実施形態において、リング相互接続2102は、グラフィックスプロセッサ2100を、他のグラフィックスプロセッサまたは汎用プロセッサなどの他の処理コンポーネント、結合する。リング相互接続2102からのコマンドは、コマンドストリーマ2103により解釈され、コマンドストリーマ2103は、ジオメトリパイプライン2120またはメディアパイプライン2130の個々のコンポーネントに命令を供給する。
いくつかの実施形態において、コマンドストリーマ2103は、頂点データをメモリから読み出し、コマンドストリーマ2103により提供された複数の頂点処理コマンドを実行する、頂点フェッチャ2105のコンポーネントの操作を指示する。いくつかの実施形態において、頂点フェッチャ2105は、頂点シェーダ2107に頂点データを提供し、頂点シェーダ2107は、各頂点に対する座標空間変換およびライティング操作を実行する。いくつかの実施形態において、頂点フェッチャ2105および頂点シェーダ2107は、スレッドディスパッチャ2131を介して実行ユニット2152A−2152Bに実行スレッドをディスパッチすることにより頂点処理命令を実行する。
いくつかの実施形態において、実行ユニット2152A−2152Bは、グラフィックスおよびメディア演算を実行するための命令セットを有するベクトルプロセッサのアレイである。いくつかの実施形態において、実行ユニット2152A−2152Bは、各アレイに固有であるまたはアレイ間で共有される付属のL1キャッシュ2151を有する。キャッシュは、データキャッシュ、命令キャッシュ、または、異なるパーティショニングにデータおよび命令を含むようにパーティショニングされる単一キャッシュとして構成され得る。
いくつかの実施形態において、ジオメトリパイプライン2120は、3Dオブジェクトのハードウェアアクセラレート型テセレーションを実行するテセレーションコンポーネントを含む。いくつかの実施形態において、プログラム可能なハルシェーダ2111は、テセレーション動作を構成する。プログラマブルドメインシェーダ2117は、テセレーション出力のバックエンド評価を提供する。テセレータ2113は、ハルシェーダ2111の指示で動作し、入力としてジオメトリパイプライン2120に提供される粗ジオメトリックモデルに基づいて、詳細な複数のジオメトリックオブジェクトのセットを生成する専用ロジックを含む。いくつかの実施形態において、テセレーションが用いられない場合、テセレーションコンポーネント(例えば、ハルシェーダ2111、テセレータ2113、およびドメインシェーダ2117)がバイパスされ得る。
いくつかの実施形態において、完全な複数のジオメトリックオブジェクトは、実行ユニット2152A、2152Bにディスパッチされる1または複数のスレッドを通じてジオメトリシェーダ2119により処理され得、またはクリッパ2129に直接に進み得る。いくつかの実施形態において、ジオメトリシェーダは、グラフィックスパイプラインの前のステージにあるような頂点または頂点のパッチではなくむしろ、ジオメトリックオブジェクト全体で動作する。テセレーションがディセーブルである場合、ジオメトリシェーダ2119は、頂点シェーダ2107から入力を受信する。いくつかの実施形態において、ジオメトリシェーダ2119は、テセレーションユニットがディセーブルである場合にジオメトリテセレーションを実行するために、ジオメトリシェーダプログラムによりプログラム可能である。
ラスタライゼーション前に、クリッパ2129は頂点データを処理する。クリッパ2129は、クリッピングおよびジオメトリシェーダ機能を有する固定機能クリッパまたはプログラマブルクリッパであってよい。いくつかの実施形態において、レンダリング出力パイプライン2170内のラスタライザおよびデプス試験コンポーネント2173は、ジオメトリックオブジェクトを画素ごとの表現へと変換するために、画素シェーダをディスパッチする。いくつかの実施形態において、画素シェーダロジックは、スレッド実行ロジック2150に含まれる。いくつかの実施形態において、アプリケーションはラスタライザおよびデプス試験コンポーネント2173をバイパスし得、ストリームアウトユニット2123を介してラスタライズされていない頂点データにアクセスし得る。
グラフィックスプロセッサ2100は、相互接続バス、相互接続ファブリック、または、プロセッサの主要なコンポーネント間でのデータおよびメッセージパッシングを可能にするいくつかの他の相互接続メカニズムを有する。いくつかの実施形態において、実行ユニット2152A−2152Bおよび関連するロジックユニット(例えば、L1キャッシュ2151、サンプラ2154、テクスチャキャッシュ2158など)は、メモリアクセスを実行して、プロセッサのレンダリング出力パイプラインコンポーネントと通信するためにデータポート2156を介して相互接続する。いくつかの実施形態において、サンプラ2154、キャッシュ2151、2158および実行ユニット2152A−2152Bは各々、別個のメモリアクセスパスを有する。一実施形態において、テクスチャキャッシュ2158はまた、サンプラキャッシュとしても構成され得る。
いくつかの実施形態において、レンダリング出力パイプライン2170は、頂点ベースのオブジェクトを関連する画素ベースの表現へと変換するラスタライザおよびデプス試験コンポーネント2173を含む。いくつかの実施形態において、ラスタライザロジックは、固定機能三角形および線ラスタライゼーションを実行するウィンドウア(windower)/マスカ(masker)ユニットを含む。いくつかの実施形態において、関連するレンダリングキャッシュ2178およびデプスキャッシュ2179も利用可能である。画素演算コンポーネント2177は、データに対して画素ベースの演算を実行するが、いくつかの例では、2D演算に関連付けられる画素演算(例えば、ブレンディングを用いたビットブロック画像転送)が2Dエンジン2141により実行される、または、オーバーレイディスプレイプレーンを用いてディスプレイコントローラ2143により表示時間に置き換えられる。いくつかの実施形態において、共有のL3キャッシュ2175は、すべてのグラフィックスコンポーネントに利用可能であり、主システムメモリを使用することなくデータの共有を可能にする。
いくつかの実施形態において、グラフィックスプロセッサのメディアパイプライン2130は、メディアエンジン2137およびビデオフロントエンド2134を含む。いくつかの実施形態において、ビデオフロントエンド2134はコマンドストリーマ2103からパイプラインコマンドを受信する。いくつかの実施形態において、メディアパイプライン2130は別個のコマンドストリーマを含む。いくつかの実施形態において、ビデオフロントエンド2134は、コマンドをメディアエンジン2137に送信する前に、複数のメディアコマンドを処理する。いくつかの実施形態において、メディアエンジン2137は、スレッドディスパッチャ2131を通じてスレッド実行ロジック2150にディスパッチするための複数のスレッドをスポーンする、スレッドスポーニング機能を含む。
いくつかの実施形態において、グラフィックスプロセッサ2100はディスプレイエンジン2140を含む。いくつかの実施形態において、ディスプレイエンジン2140は、プロセッサ2100の外部にあり、リング相互接続2102またはいくつかの他の相互接続バス若しくはファブリックを介してグラフィックスプロセッサと結合する。いくつかの実施形態において、ディスプレイエンジン2140は2Dエンジン2141およびディスプレイコントローラ2143を含む。いくつかの実施形態において、ディスプレイエンジン2140は、3Dパイプラインとは独立して動作することが可能な専用ロジックを含む。いくつかの実施形態において、ディスプレイコントローラ2143は、ディスプレイデバイス(図示せず)と結合し、これは、ラップトップコンピュータにあるようなシステム統合型ディスプレイデバイス、または、ディスプレイデバイスコネクタを介して取り付けられる外部ディスプレイデバイスであってよい。
いくつかの実施形態において、ジオメトリパイプライン2120およびメディアパイプライン2130は、複数のグラフィックスおよびメディアプログラミングインタフェースに基づいて操作を実行するように構成可能であり、任意の1つのアプリケーションプログラミングインタフェース(API)に固有のものではない。いくつかの実施形態において、グラフィックスプロセッサ用のドライバソフトウェアは、グラフィックスプロセッサにより処理され得るコマンドに、特定のグラフィックスまたはメディアライブラリに固有のAPIコールを変換する。いくつかの実施形態において、すべてがKhronosグループのオープングラフィックスライブラリ(OpenGL)、オープンコンピューティング言語(OpenCL)、および/または、VulkanグラフィックスおよびコンピュートAPIに対して、サポートが提供される。いくつかの実施形態において、マイクロソフトコーポレーションのDirect3Dライブラリに対してもサポートが提供され得る。いくつかの実施形態において、これらのライブラリの組み合わせがサポートされ得る。サポートは、オープンソースのコンピュータビジョンライブラリ(OpenCV)のために提供されてもよい。互換性のある3Dパイプラインを有する将来のAPIは、将来のAPIのパイプラインからグラフィックスプロセッサのパイプラインへとマッピングが行われることができる場合にもまたサポートされるであろう。グラフィックスパイプラインプログラミング
図22Aは、いくつかの実施形態によるグラフィックスプロセッサコマンドフォーマット2200を示すブロック図である。図22Bは、実施形態によるグラフィックスプロセッサコマンドシーケンス2210を示すブロック図である。図22Aにおける実線の枠は、グラフィックスコマンドに一般的に含まれるコンポーネントを示し、一方、破線は、任意選択的である、または、グラフィックスコマンドのサブセットにのみ含まれるコンポーネントを含む。図22Aの例示的なグラフィックスプロセッサコマンドフォーマット2200は、クライアント2202、コマンドオペレーションコード(オペコード)2204およびコマンド用のデータ2206を識別するデータフィールドを含む。サブオペコード2205およびコマンドサイズ2208もまた、いくつかのコマンドに含まれる。
いくつかの実施形態において、クライアント2202は、コマンドデータを処理するグラフィックスデバイスのクライアントユニットを規定する。いくつかの実施形態において、グラフィックスプロセッサコマンドパーサは、コマンドのさらなる処理を調整して適切なクライアントユニットにコマンドデータをルーティングするために、各コマンドのクライアントフィールドを検査する。いくつかの実施形態において、グラフィックスプロセッサクライアントユニットは、メモリインタフェースユニット、レンダリングユニット、2Dユニット、3Dユニットおよびメディアユニットを含む。各クライアントユニットは、コマンドを処理する対応する処理パイプラインを有する。コマンドがクライアントユニットによりひとたび受信されると、クライアントユニットは、オペコード2204、および、存在する場合にはサブオペコード2205を読み出して、実行する操作を決定する。クライアントユニットは、データフィールド2206における情報を用いてコマンドを実行する。いくつかのコマンドでは、コマンドのサイズを規定するために明示的なコマンドサイズ2208が予期される。いくつかの実施形態において、コマンドパーサは、コマンドオペコードに基づいて、コマンドの少なくともいくつかのサイズを自動的に決定する。いくつかの実施形態において、コマンドはダブルワードの倍数を用いてアラインされる。他のコマンドフォーマットも用いられてよい。
図22Bのフロー図は、例示的なグラフィックスプロセッサコマンドシーケンス2210を示す。いくつかの実施形態において、グラフィックスプロセッサの実施形態を特徴付けるデータ処理システムのソフトウェアまたはファームウェアは、複数のグラフィックス演算のセットをセットアップ、実行、および終了するように示されたコマンドシーケンスのバージョンを用いる。実施形態は、サンプルコマンドシーケンスが、例示の目的のみで示され、かつ、説明されるが、これらの特定のコマンドまたはこのコマンドシーケンスに限定されることはない。さらに、当該コマンドは、コマンドシーケンスにおけるコマンドのバッチとして発行されてよく、したがって、グラフィックスプロセッサが少なくとも部分的にコヒーレンスな状態でコマンドのシーケンスを処理するであろう。
いくつかの実施形態において、グラフィックスプロセッサコマンドシーケンス2210は、任意のアクティブなグラフィックスパイプラインにパイプラインに対する現在保留中のコマンドを完了させるパイプラインフラッシュコマンド2212から始めてよい。いくつかの実施形態において、3Dパイプライン2222およびメディアパイプライン2224は同時には動作しない。パイプラインフラッシュは、アクティブなグラフィックスパイプラインが、任意の保留コマンドを完了させるように実行される。パイプラインフラッシュに応じて、グラフィックスプロセッサに対するコマンドパーサは、アクティブなドローイングエンジンが保留中の動作を完了し、かつ、関連する読み出しキャッシュが無効にされるまで、コマンド処理を一時停止するであろう。任意選択的に、「ダーティ(dirty)」とマーキングされたレンダリングキャッシュ内の任意のデータがメモリに対してフラッシュされ得る。いくつかの実施形態において、パイプラインフラッシュコマンド2212は、パイプライン同期中に、または、グラフィックスプロセッサを低電力状態にする前に用いられ得る。
いくつかの実施形態において、パイプライン選択コマンド2213は、パイプライン間で明示的に切り替えるために、コマンドシーケンスがグラフィックスプロセッサを必要とする場合に用いられる。いくつかの実施形態において、パイプライン選択コマンド2213は、コンテキストが両方のパイプラインにコマンドを発行しなければ、パイプラインコマンドを発行する前に、実行コンテキスト内で一度のみ必要とされる。いくつかの実施形態において、パイプラインフラッシュコマンド2212は、パイプライン選択コマンド2213を介したパイプライン切り替えの直前に必要とされる。
いくつかの実施形態において、パイプライン制御コマンド2214は、動作用のグラフィックスパイプラインを構成し、3Dパイプライン2222およびメディアパイプライン2224をプログラムするために用いられる。いくつかの実施形態において、パイプライン制御コマンド2214は、アクティブなパイプラインに関するパイプライン状態を構成する。一実施形態においてパイプライン制御コマンド2214は、パイプライン同期中に用いられる、または、コマンドのバッチを処理する前に、アクティブなパイプライン内の1または複数のキャッシュメモリからのデータをクリアするために用いられる。
いくつかの実施形態において、リターンバッファ状態コマンド2216は、データを書き込むために各パイプラインに対するリターンバッファのセットを構成するために用いられる。いくつかのパイプラインオペレーションは、動作が処理の最中に中間データを書き込む1または複数のリターンバッファの割り当て、選択または構成を必要とする。いくつかの実施形態において、グラフィックスプロセッサは、出力データを格納し、かつ、クロススレッド通信を実行するために1または複数のリターンバッファもまた用いる。いくつかの実施形態において、リターンバッファ状態2216は、パイプラインオペレーションのセットを用いるために、リターンバッファのサイズおよび数を選択することを含む。
コマンドシーケンスにおける残りのコマンドは、動作用のアクティブなパイプラインに基づいて異なる。パイプライン決定2220に基づいて、コマンドシーケンスは、3Dパイプライン状態2230から始まる3Dパイプライン2222またはメディアパイプライン状態2240で始まるメディアパイプライン2224に調整される。
3Dパイプライン状態2230を構成するコマンドは、頂点バッファ状態、頂点要素状態、一定のカラー状態、デプスバッファ状態、および、3Dプリミティブコマンドが処理される前に構成される他の状態変数に対する3D状態設定コマンドを含む。これらのコマンドの値は、使用中の特定の3D APIに基づいて少なくとも部分的に決定される。いくつかの実施形態において、3Dパイプライン状態2230のコマンドは、これらの要素が用いられないであろう場合、特定のパイプライン要素を選択的に無効にするまたはバイパスすることもできる。
いくつかの実施形態において、3Dプリミティブ2232のコマンドは、3Dパイプラインにより処理される3Dプリミティブを提示するために用いられる。3Dプリミティブ2232のコマンドを介してグラフィックスプロセッサに渡されるコマンドおよび関連付けられるパラメータは、グラフィックスパイプライン内の頂点フェッチ機能に転送される。頂点フェッチ機能は、3Dプリミティブ2232のコマンドデータを用いて頂点データ構造を生成する。頂点データ構造は、1または複数のリターンバッファに格納される。いくつかの実施形態において、3Dプリミティブ2232のコマンドは、頂点シェーダを介して3Dプリミティブに対する頂点操作を実行するために用いられる。頂点シェーダを処理するために、3Dパイプライン2222は、シェーダ実行スレッドをグラフィックスプロセッサ実行ユニットにディスパッチする。
いくつかの実施形態において、3Dパイプライン2222は、実行2234のコマンドまたはイベントを介してトリガされる。いくつかの実施形態において、レジスタ書き込みはコマンド実行をトリガする。いくつかの実施形態において、実行はコマンドシーケンスにおいて「go」または「kick」コマンドを介してトリガされる。一実施形態において、コマンド実行は、グラフィックスパイプラインを通じてコマンドシーケンスをフラッシュするために、パイプライン同期コマンドを用いてトリガされる。3Dパイプラインは、3Dプリミティブに対するジオメトリ処理を実行するであろう。ひとたび動作が完了すると、結果として生じるジオメトリックオブジェクトがラスタライズされ、画素エンジンは、結果として生じる画素に色をつける。画素シェーディングおよび画素バックエンド動作制御する追加のコマンドがこれらの動作のために含まれてもよい。
いくつかの実施形態において、グラフィックスプロセッサコマンドシーケンス2210は、メディア演算を実行する場合、メディアパイプライン2224のパスに従う。一般的には、メディアパイプライン2224に対するプログラミングについての特定の使用および方式は、実行されるメディアまたは計算操作に依存する。特定のメディアデコード演算は、メディアデコードの最中に、メディアパイプラインにオフロードされてよい。いくつかの実施形態において、メディアパイプラインはバイパスされることもでき、メディアデコードは、1または複数の汎用プロセッシングコアにより提供されるリソースを全体的にまたは部分的に用いて実行され得る。一実施形態において、メディアパイプラインは、汎用グラフィックスプロセッサユニット(GPGPU)演算用の要素もまた含み、グラフィックスプロセッサは、グラフィックスプリミティブのレンダリングに明示的には関連していない計算シェーダプログラムを用いてSIMDベクトル演算を実行するために用いられる。
いくつかの実施形態において、メディアパイプライン2224は、3Dパイプライン2222と同様の方式で構成される。メディアパイプライン状態2240を構成するコマンドのセットは、メディアオブジェクトコマンド2242の前にコマンドキューへとディスパッチされるか、または置かれる。いくつかの実施形態において、メディアパイプライン状態2240に対するコマンドは、メディアオブジェクトを処理するために用いられるメディアパイプライン要素を構成するデータを含むであろう。これは、メディアパイプライン内のエンコードまたはデコードフォーマットなどの、ビデオデコードおよびビデオエンコードロジックを構成するデータを含む。いくつかの実施形態において、メディアパイプライン状態2240に対するコマンドは、状態設定のバッチを含む「間接」状態要素に対する1または複数のポインタの使用もまたサポートする。
いくつかの実施形態において、メディアオブジェクトコマンド2242は、メディアパイプラインによる処理のためのメディアオブジェクトにポインタを供給する。メディアオブジェクトは、処理されるビデオデータを含むメモリバッファを含む。いくつかの実施形態において、すべてのメディアパイプライン状態は、メディアオブジェクトコマンド2242を発行する前に有効でなければならない。ひとたびパイプライン状態が構成され、かつ、メディアオブジェクトコマンド2242がキューイングされると、メディアパイプライン2224は、実行コマンド2244または同等の実行イベント(例えば、レジスタ書き込み)を介してトリガされる。メディアパイプライン2224からの出力は、次に、3Dパイプライン2222またはメディアパイプライン2224により提供される動作によって事後処理されてよい。いくつかの実施形態において、GPGPU演算は、メディア演算と同様の方式で構成され、実行される。グラフィックスソフトウェアアーキテクチャ
図23は、いくつかの実施形態による、データ処理システム2300に関する例示的なグラフィックスソフトウェアアーキテクチャを示す。いくつかの実施形態において、ソフトウェアアーキテクチャは、3Dグラフィックスアプリケーション2310、オペレーティングシステム2320、および少なくとも1つのプロセッサ2330を含む。いくつかの実施形態において、プロセッサ2330は、グラフィックスプロセッサ2332および1または複数の汎用プロセッサコア2334を含む。グラフィックスアプリケーション2310およびオペレーティングシステム2320は各々、データ処理システムのシステムメモリ2350において実行する。
いくつかの実施形態において、3Dグラフィックスアプリケーション2310は、シェーダ命令2312を含む1または複数のシェーダプログラムを含む。シェーダ言語命令は、Direct3Dの上位レベルシェーダ言語(HLSL)またはOpenGLシェーダ言語(GLSL)などの、上位レベルシェーダ言語におけるものであってよい。アプリケーションは、汎用プロセッサコア2334による実行のために適した機械語の実行可能命令2314もまた含む。アプリケーションはまた、頂点データによって定義されるグラフィックスオブジェクト2316もまた含む。
いくつかの実施形態において、オペレーティングシステム2320は、マイクロソフトコーポレーションのマイクロソフト(登録商標)Windows(登録商標)オペレーティングシステム、プロプライエタリUNIX(登録商標)様式のオペレーティングシステム、または、Linux(登録商標)カーネルの変形例を用いたオープンソースUNIX(登録商標)様式のオペレーティングシステムである。オペレーティングシステム2320は、Direct3D API、OpenGL APIまたはVulkan APIなどのグラフィックスAPI2322をサポートすることができる。Direct3D APIが用いられる場合、オペレーティングシステム2320は、フロントエンドシェーダコンパイラ2324を用いて、HLSLにおける任意のシェーダ命令2312を下位レベルのシェーダ言語へとコンパイルする。コンパイルは、ジャストインタイム(JIT)コンパイルであってよい、または、アプリケーションは、シェーダプリコンパイルを実行できる。いくつかの実施形態において、高水準シェーダは、3Dグラフィックスアプリケーション2310のコンパイルの最中に、より低レベルのシェーダへとコンパイルされる。いくつかの実施形態において、シェーダ命令2312は、Vulkan APIによって用いられる標準ポータブル中間表現(SPIR)のバージョンなどの中間フォームにおいて提供される。
いくつかの実施形態において、ユーザモードグラフィックスドライバ2326は、シェーダ命令2312をハードウェア固有の表現へと変換するバックエンドシェーダコンパイラ2327を含む。OpenGL APIが用いられる場合、GLSL高水準言語におけるシェーダ命令2312は、コンパイルのためにユーザモードグラフィックスドライバ2326に渡される。いくつかの実施形態において、ユーザモードグラフィックスドライバ2326は、オペレーティングシステムカーネルモード機能2328を用いて、カーネルモードグラフィックスドライバ2329と通信する。いくつかの実施形態において、カーネルモードグラフィックスドライバ2329は、グラフィックスプロセッサ2332と通信してコマンドおよび命令をディスパッチする。IPコア実装
少なくとも1つの実施形態の1または複数の態様は、プロセッサなどの集積回路内のロジックを表すおよび/または定義する機械可読媒体に格納される代表的なコードにより実装され得る。例えば、機械可読媒体は、プロセッサ内の様々なロジックを表す命令を含んでよい。機械により読み出される場合、命令は、機械に、本明細書において説明される技術を実行するロジックを組み立てさせる。「IPコア」として知られるそのような表現は、集積回路の構造を説明するハードウェアモデルとして有形の機械可読媒体に格納され得る集積回路用のロジックの再利用可能なユニットである。ハードウェアモデルは、集積回路を製造する組み立て機械上に当該ハードウェアモデルを搭載する様々な顧客または製造施設に供給されてよい。集積回路は、本明細書において説明される実施形態のうちのいずれかと関連して説明された動作を回路が実行するように製造されてよい。
図24Aは、実施形態による動作を実行する集積回路を製造するために用いられ得るIPコア開発システム2400を示すブロック図である。IPコア開発システム2400は、より大きな設計へと組み込まれ得るモジュラー式の再利用可能な設計をもたらすために用いられてよい、または、集積回路(例えば、SoC集積回路)全体を構築するために用いられてよい。設計施設2430は、高水準プログラミング言語(例えば、C/C++)におけるIPコア設計のソフトウェアシミュレーション2410を生成できる。ソフトウェアシミュレーション2410は、シミュレーションモデル2412を用いてIPコアの挙動を設計、試験および確認するために用いられ得る。シミュレーションモデル2412は、機能、挙動および/またはタイミングシミュレーションを含んでよい。次に、レジスタ転送レベル(RTL)設計2415は、シミュレーションモデル2412から作成または合成され得る。RTL設計2415は、ハードウェアレジスタ間のデジタル信号のフローをモデリングする集積回路の挙動を抽出し、モデリングされたデジタル信号を用いて実行される関連するロジックを含む。RTL設計2415に加えて、論理レベルまたはトランジスタレベルにおける下位レベルの設計が作成、設計または合成されてもよい。したがって、初期の設計およびシミュレーションの特定の詳細は変わり得る。
RTL設計2415またはこれと同等のものは、ハードウェアモデル2420へと設計施設によりさらに合成されてよく、ハードウェアモデル2420は、ハードウェア記述言語(HDL)または物理的な設計データのいくつか他の表現であってよい。HDLは、IPコア設計を確認するためにさらにシミュレーションまたは試験されてよい。IPコア設計は、不揮発性メモリ2440(例えば、ハードディスク、フラッシュメモリまたは任意の不揮発性記憶媒体)を用いて、サードパーティの製造施設2465への配送のために格納され得る。代替的に、IPコア設計は、有線接続2450または無線接続2460を介して(例えば、インターネットを介して)伝送され得る。製造施設2465は次に、IPコア設計に少なくとも部分的に基づく集積回路を組み立てる。製造された集積回路は、本明細書で説明される少なくとも1つの実施形態によって動作を実行するように構成され得る。
図24Bは、本明細書において説明されるいくつかの実施形態による集積回路パッケージアセンブリ2470の垂直断面図を示す。集積回路パッケージアセンブリ2470は、本明細書において説明される1または複数のプロセッサまたはアクセラレータデバイスの実装を示す。パッケージアセンブリ2470は、基板2480に接続されるハードウェアロジック2472、2474の複数のユニットを含む。ロジック2472、2474は、構成可能なロジックまたは固定された機能のロジックハードウェアにおいて少なくとも部分的に実装されてよく、本明細書において説明されるプロセッサコア、グラフィックスプロセッサまたは他のアクセラレータデバイスのいずれかの1または複数の部分を含み得る。ロジック2472、2474の各ユニットは、半導体ダイ内に実装され、かつ、相互接続構造2473を介して基板2480と結合され得る。相互接続構造2473は、ロジック2472、2474と基板2480との間で電気信号をルーティングするように構成されてよく、限定されることはないが、バンプまたはピラーなどの相互接続を含み得る。いくつかの実施形態において、相互接続構造2473は、例えば、ロジック2472、2474の動作に関連付けられる入力/出力(I/O)信号、および/または、電源または接地信号などの電気信号をルーティングするように構成されてよい。いくつかの実施形態において、基板2480は、エポキシベースの積層基板である。他の実施形態において、パッケージ基板2480は他の適切なタイプの基板を含んでよい。パッケージアセンブリ2470は、パッケージインターコネクト2483を介して他の電気デバイスに接続され得る。パッケージインターコネクト2483は、マザーボード、他のチップセットまたはマルチチップモジュールなどの他の電気デバイスに電気信号をルーティングするために基板2480の表面に結合されてよい。
いくつかの実施形態において、ロジック2472、2474のユニットは、ロジック2472、2474間で電気信号をルーティングするように構成されるブリッジ2482と電気的に結合される。ブリッジ2482は、電気信号のルーティングを提供する高密度な相互接続構造であってよい。ブリッジ2482は、ガラスまたは適切な半導体材料から構成されるブリッジ基板を含んでよい。電気的なルーティング機構は、ロジック2472、2474間のチップ間接続を提供するブリッジ基板上に形成され得る。
ロジック2472、2474の2つのユニットおよびブリッジ2482が図示されているが、本明細書において説明される実施形態では、より多いまたはより少ない数のロジックユニットを1または複数のダイ上に含んでよい。単一のダイ上にロジックが含まれる場合にブリッジ2482が除外されてよいので、1または複数のダイは、ゼロまたはそれより多いブリッジにより接続されてよい。代替的に、ロジックの複数のダイまたはユニットは、1または複数のブリッジにより接続され得る。さらに、複数のロジックユニット、ダイおよびブリッジは、3次元構成を含む他の可能な構成と一緒に接続されることができる。
図24Cは、基板2480(例えば、ベースダイ)に接続されるハードウェアロジックチップレットの複数のユニットを含むパッケージアセンブリ2490を示す。本明細書に説明されるグラフィックス処理ユニット、並列プロセッサ、および/または計算アクセラレータは、別個に製造される多様なシリコンチップレットから構成され得る。このコンテキストにおいて、チップレットは、他のチップレットとアセンブルされてより大きいパッケージとなり得るロジックの別個のユニットを含む、少なくとも部分的にパッケージされた集積回路である。異なるIPコアロジックを有するチップレットの多様なセットは、単一デバイスにアセンブルされ得る。さらに、チップレットは、アクティブインターポーザ技術を用いて、ベースダイまたはベースチップレットと統合され得る。本明細書で説明されるコンセプトは、GPU内の異なる形のIPの間の相互接続および通信を可能にする。IPコアは、異なるプロセス技術を用いて製造され、製造の最中に構成され得、それは、複数のIPを、特にいくつかのフレバーIPの大きなSoC上で、同一の製造処理へと収束させる複雑性を回避する。複数の処理技術の使用を可能にすることは、市場への時間を改善し、コスト効率の高いなやり方を提供し、複数の製品SKUを作成する。さらに、分割されたIPは、独立した電力ゲートを設けることにより適しており、所与のワークロードにおいて用いられないコンポーネントは、電源をオフにされることができ、全体の電力消費を減らし得る。
ハードウェアロジックチップレットは、専用ハードウェアロジックチップレット2472、ロジックまたはI/Oチップレット2474、および/またはメモリチップレット2475を含み得る。ハードウェアロジックチップレット2472およびロジックまたはI/Oチップレット2474は、構成可能なロジックまたは固定された機能のロジックハードウェアにおいて少なくとも部分的に実装されてよく、本明細書において説明されるプロセッサコア、グラフィックスプロセッサ、並列プロセッサ、または他のアクセラレータデバイスのいずれかの1または複数の部分を含み得る。メモリチップレット2475は、DRAM(例えば、GDDR、HBM)メモリまたはキャッシュ(SRAM)メモリであり得る。
各チップレットは、別個の半導体ダイとして製造され、相互接続構造2473を介して基板2480と結合され得る。相互接続構造2473は、様々なチップレットと基板2480内のロジックとの間の電気信号をルーティングするように構成され得る。相互接続構造2473は、限定されることはないが凹凸または柱などの、相互接続を含み得る。いくつかの実施形態において、相互接続構造2473は、例えば、ロジック、I/Oおよびメモリチップレットの動作に関連付けられる入力/出力(I/O)信号、および/または、電源または接地信号などの電気信号をルーティングするように構成されてよい。
いくつかの実施形態において、基板2480は、エポキシベースの積層基板である。他の実施形態において、基板2480は他の適切なタイプの基板を含んでよい。パッケージアセンブリ2490は、パッケージインターコネクト2483を介して他の電気デバイスに接続され得る。パッケージインターコネクト2483は、マザーボード、他のチップセットまたはマルチチップモジュールなどの他の電気デバイスに電気信号をルーティングするために基板2480の表面に結合されてよい。
いくつかの実施形態において、ロジックまたはI/Oチップレット2474およびメモリチップレット2475は、ロジックまたはI/Oチップレット2474およびメモリチップレット2475の間の電気信号をルーティングするように構成されるブリッジ2487を介して電気的に結合され得る。ブリッジ2487は、電気信号のルーティングを提供する高密度な相互接続構造であってよい。ブリッジ2487は、ガラスまたは適切な半導体材料から構成されるブリッジ基板を含んでよい。電気的なルーティング機構は、ロジックまたはI/Oチップレット2474およびメモリチップレット2475間のチップ間接続を提供するブリッジ基板上に形成され得る。ブリッジ2487は、シリコンブリッジまたはインターコネクトブリッジとも称され得る。例えば、ブリッジ2487は、いくつかの実施形態において、埋め込みマルチダイインターコネクトブリッジ(EMIB)である。いくつかの実施形態において、ブリッジ2487は、単に1つのチップレットから別のチップレットへの直接接続であってもよい。
基板2480は、I/O2491、キャッシュメモリ2492、および他のハードウェアロジック2493に関するハードウェアコンポーネントを含み得る。ファブリック2485は、基板2480内の様々なロジックチップレットおよびロジック2491、2493の間の通信を可能するように、基板2480に埋め込まれ得る。一実施形態において、I/O2491、ファブリック2485、キャッシュ、ブリッジ、および他のハードウェアロジック2493は、基板2480の頂部に層状となるベースダイに統合され得る。
様々な実施形態において、パッケージアセンブリ2490は、ファブリック2485または1または複数のブリッジ2487によって相互接続されるコンポーネントおよびチップレットの数より少ないまたはより大きい数を含み得る。パッケージアセンブリ2490内のチップレットは、3Dまたは2.5D配置で配置され得る。一般的には、ブリッジ構造2487は、例えば、ロジックまたはI/Oチップレットとメモリチップレットとの間でポイントツーポイントインターコネクトを促すように用いられ得る。ファブリック2485は、様々なロジックおよび/またはI/Oチップレット(例えば、チップレット2472、2474、2491、2493)を他のロジックおよび/またはI/Oチップレットと相互接続するように用いられ得る。一実施形態において、基板内のキャッシュメモリ2492は、パッケージアセンブリ2490のためのグローバルキャッシュ、分配されたグローバルキャッシュの一部、またはファブリック2485のための専用のキャッシュとして作用し得る。
図24Dは、実施形態による、交換可能なチップレット2495を含むパッケージアセンブリ2494を示す。交換可能なチップレット2495は、1または複数のベースチップレット2496、2498上の標準スロットとアセンブルされ得る。ベースチップレット2496、2498は、ブリッジインターコネクト2497を介して結合され得、それは本明細書に説明された他のブリッジインターコネクトと同様であり得、例えば、EMIBであり得る。メモリチップレットは、ブリッジインターコネクトを介ししたロジックまたはI/Oチップレットにもまた接続され得る。I/Oおよびロジックチップレットは、相互接続ファブリックを介して通信し得る。ベースチップレットは、ロジックまたはI/Oまたはメモリ/キャッシュのうちの1つの標準フォーマットにおいて、1または複数のスロットを各々サポートし得る。
一実施形態において、SRAMおよび電源供給回路は、1または複数のベースチップレット2496、2498へと製造され得、それはベースチップレットの頂部にスタックされた交換可能なチップレット2495と比較して異なるプロセス技術を用いて製造され得る。例えば、ベースチップレット2496、2498は、より大きな処理技術を用いて製造され得る一方、交換可能なチップレットは、より小さい処理技術を用いて製造され得る。1または複数の交換可能なチップレット2495はメモリ(例えば、DRAM)チップレットであり得る。異なるメモリ密度が、パッケージアセンブリ2494を用いる製品の目標とする電力および/または性能に基づいてパッケージアセンブリ2494に関して選択されてよい。さらに、異なる数のタイプの機能ユニットを有するロジックチップレットが、製品の目標とする電力、および/または性能に基づいてアセンブリの時点に選択され得る。さらに、異なるタイプのIPロジックコアを含むチップレットは、交換可能なチップレットスロットに挿入され得、異なる技術IPブロックを混合および合致し得るハイブリッドプロセッサ設計を可能にする。チップ集積回路上の例示的なシステム
図25から図26Bは、本明細書において説明される様々な実施形態による、1または複数のIPコアを用いて製造され得る例示的な集積回路および関連付けられたグラフィックスプロセッサを図示する。図示されるものに加えて、他のロジックおよび回路が含まれてよく、これらは、追加のグラフィックスプロセッサ/コア、周辺機器インタフェースコントローラまたは汎用プロセッサコアを含む。
図25は、実施形態による、1または複数のIPコアを用いて製造され得るチップ集積回路2500上の例示的なシステムを示すブロック図である。例示的な集積回路2500は、1または複数のアプリケーションプロセッサ2505(例えば、CPU)、少なくとも1つのグラフィックスプロセッサ2510を含み、イメージプロセッサ2515および/またはビデオプロセッサ2520をさらに含んでよく、これらのいずれかは、同一または複数の異なる設計施設からのモジュール式のIPコアであってよい。集積回路2500は、USBコントローラ2525、UARTコントローラ2530、SPI/SDIOコントローラ2535、およびIS/ICコントローラ2540を含む周辺機器またはバスロジックを含む。さらに、集積回路は、1または複数の高精細度マルチメディアインタフェース(HDMI(登録商標))コントローラ2550およびモバイル業界プロセッサインタフェース(MIPI)ディスプレイインタフェース2555に結合されたディスプレイデバイス2545を含み得る。ストレージは、フラッシュメモリおよびフラッシュメモリコントローラを含むフラッシュメモリサブシステム2560によって提供され得る。メモリインタフェースは、SDRAMまたはSRAMメモリデバイスへのアクセスために、メモリコントローラ2565を介して提供されてよい。いくつかの集積回路は、埋め込み型のセキュリティエンジン2570をさらに含む。
図26Aから図26Bは、本明細書において説明される実施形態による、SoC内での使用のための例示的なグラフィックスプロセッサを示すブロック図である。図26Aは、実施形態による、1または複数のIPコアを用いて製造され得るチップ集積回路上のシステムの例示的なグラフィックスプロセッサ2610を示す。図26Bは、実施形態による、1または複数のIPコアを用いて製造され得るチップ集積回路上のシステムのさらなる例示的なグラフィックスプロセッサ2640を示す。図26Aのグラフィックスプロセッサ2610は、低電力のグラフィックスプロセッサコアの例である。図26Bのグラフィックスプロセッサ2640は、より高性能なグラフィックスプロセッサコアの例である。グラフィックスプロセッサ2610、2640のそれぞれは、図25のグラフィックスプロセッサ2510の変形例であり得る。
図26Aに示されるように、グラフィックスプロセッサ2610は、頂点プロセッサ2605および1または複数の断片プロセッサ2615A−2615N(例えば、2615A、2615B、2615C、2615Dから2615N−1および2615N)を含む。グラフィックスプロセッサ2610は、別個のロジックを介して異なるシェーダプログラムを実行でき、したがって、頂点プロセッサ2605は、頂点シェーダプログラムに対する動作を実行するために最適化され、一方、1または複数の断片プロセッサ2615A−2615Nは、断片または画素シェーダプログラムに対する断片(例えば、画素)シェーディング動作を実行する。頂点プロセッサ2605は、3Dグラフィックスパイプラインの頂点処理ステージを実行し、プリミティブおよび頂点データを生成する。断片プロセッサ2615A−2615Nは、頂点プロセッサ2605により生成されたプリミティブおよび頂点データを用いて、ディスプレイデバイス上に表示されるフレームバッファを生成する。一実施形態において、断片プロセッサ2615A−2615Nは、OpenGL APIに提供されるような断片シェーダプログラムを実行するために最適化され、直接3D APIにおいて提供されるような画素シェーダプログラムと同様の動作を実行するために用いられてよい。
グラフィックスプロセッサ2610は、1または複数のメモリ管理ユニット(MMU)2620A−2620B、キャッシュ2625A−2625Bおよび回路インターコネクト2630A−2630Bをさらに含む。1または複数のMMU2620A−2620Bは、頂点プロセッサ2605および/または断片プロセッサ2615A−2615Nを含むグラフィックスプロセッサ2610に対する仮想−物理アドレスマッピングを提供し、1または複数のキャシュ2625A−2625Bに格納される頂点または画像/テクスチャデータに加えて、メモリに格納される参照頂点または画像/テクスチャデータであってよい。一実施形態において、1または複数のMMU2620A−2620Bは、システム内の他のMMUと同期されてよく、図25の1または複数のアプリケーションプロセッサ2505、イメージプロセッサ2515および/またはビデオプロセッサ2520に関連付けられる1または複数のMMUを含み、したがって、各プロセッサ2505−2520は、共有または統合された仮想メモリシステムに加わることができる。1または複数の回路インターコネクト2630A−2630Bは、実施形態によれば、SoCの内部バスを介してまたは直接接続を介してのいずれかで、グラフィックスプロセッサ2610がSoC内の他のIPコアとインタフェース接続することを可能にする。
図26Bに示されるように、グラフィックスプロセッサ2640は、図26Aのグラフィックスプロセッサ2610の1または複数のMMU2620A−2620B、キャッシュ2625A−2625Bおよび回路インターコネクト2630A−2630Bを含む。グラフィックスプロセッサ2640は、1または複数のシェーダコア2655A−2655N(例えば、2655A、2655B、2655C、2655D、2655E、2655Fから2655N−1および2655N)を含み、グラフィックスプロセッサ2640は、シングルコアまたはタイプまたはコアがすべてのタイプのプログラマブルシェーダコードを実行できる統合されたシェーダコアアーキテクチャを提供し、統合されたシェーダコアアーキテクチャは、頂点シェーダ、断片シェーダおよび/またはコンピュートシェーダを実装するシェーダプログラムコードを含む。提示する正確な数のシェーダコアは、実施形態および実装間で変化し得る。さらに、グラフィックスプロセッサ2640は、コア間タスクマネージャ2645を含み、コア間タスクマネージャ2645は、1または複数のシェーダコア2655A−2655Nに実行スレッドをディスパッチするスレッドディスパッチャ、および、タイルベースのレンダリングに対するタイル化操作をアクセラレートするタイル化ユニット2658としての機能を果たし、タイル化ユニット2658では、例えば、シーン内の局所空間のコヒーレンスを活用するために、または、内部キャッシュの利用を最適化するために、シーンに対するレンダリング操作が画像空間において細分化される。
畳み込みニューラルネットワーク(CNN)は、機械レンダリングされた画像のノイズ除去などの、多様な範囲の画像処理タスクにおいて活用されている。カーネル予測ネットワーク(KPN)は、レイトレーシングノイズ除去に専用のの深層学習解決方法であるが、CNNを用いて、近隣画素からノイズ除去された画素を算出するように用いられるローカル重み付けカーネルを推定する。
図27Aは、従来のカーネル予測ネットワーク(KPN)を示す概略図である。カーネル予測ネットワークは、以下に「KPN」と称される。示されるようなKPN2700は、畳み込みニューラルネットワークまたは同様のディープラーニングニューラルネットワークに関する好適なコンピューティングエンジンまたは任意のコンピューティングハードウェア上で実装または展開される深く完全な畳み込みニューラルネットワークであり得る。
訓練の最中、KPN2700は前もって収集された、ノイズの多い画像およびそれぞれのノイズの多い画像の地上検証画像とのデータセットによって訓練される。KPNは、多数の反復に関するデータセットによって訓練およびチューニングされ得、バッチサイズ、ノード情報、バイアスなどの、KPNのネットワークパラメータを学習する。KPNの畳み込みカーネルのカーネルサイズは、KPNの訓練の前に割り当てられている。例えば、KPNの畳み込みカーネルのカーネルサイズは、k×kとして割り当てられてよく、kの値は、3、5、7、9、11、13、15、17、19、21、または同様のものなどのうちの1つから選択される。
画像のノイズ除去のランタイム推定の最中、KPN2700は、画像を受信し得、それを入力してノイズ除去し、出力としてノイズ除去された画像を生成する。画像は複数の画素を有してよい。KPN2700は、カーネル生成ロジック2710およびフィルタリングロジック2730を含み得る。画像が受信された後、KPN2700のカーネル生成ロジック2710は、画像の複数の画素のそれぞれに関する畳み込みカーネルを生成し得る。畳み込みカーネルは、複数のカーネル値を有してよい。画像の各画素に関して、KPN2700のフィルタリングロジック2730は、カーネル生成ロジック2710によって生成された対応する畳み込みカーネルの複数のカーネル値を用い得て、画素をフィルタリングしてノイズ除去された画素を取得する。画像の複数の画素のそれぞれがフィルタリングされた後、KPN2700は、出力としてノイズ除去された画像を生成し得る。前述されたフィルタリングの詳細は、図27Bに関して以下に説明される。
図27Bは、従来のKPNによる画素のフィルタリングの例を示す概略図である。図27Aに関して前に検討されたように、画像の各画素に関して、KPN2700のフィルタリングロジック2730は、カーネル生成ロジック2710によって生成される対応する畳み込みカーネルの複数のカーネル値を用いて、画素をフィルタしてノイズ除去された画素を生成し得る。
より詳細には、図27Bの例において、3×3のカーネルサイズを有する畳み込みカーネル2770は、画像の画素位置2760−0において画素P0に関して生成され、畳み込みカーネル2770はW0からW8まで9のカーネル値を有する。図27Bに示されるように、画素P0に関して、KPN2700は、画像の画素P0の画素位置2760−0を中央とする四角3×3のウィンドウにおける9のカーネル値W0からW8を有する畳み込みカーネル2770と、9の画素位置2760−0、2760−1、2760−2、2760−3、2760−4、2760−5、2760−6、2760−7、2760−8の画素値とによって画素P0をフィルタリングし得、ノイズ除去された画素の画素値を取得する。より具体的には、画素P0のフィルタリングは、ノイズ除去された画素の画素値
Figure 2021077343
として9の画素位置2760−0、2760−1、2760−2、2760−3、2760−4、2760−5、2760−6、2760−7、2760−8の画素値の加重平均を算出することによって成され得る。
すなわち、ノイズ除去された画素の画素値
Figure 2021077343
が、次式によって計算され得る。
Figure 2021077343
通常、9のカーネル値W0からW8の和は、画像のノイズ除去などの画像処理タスクにおけるものと等しくなり得る。
従来のKPNは、レイトレーシングノイズ除去などの画像処理タスクにおいてそのポテンシャルを示したが、それは、大きなサイズの畳み込みカーネル、例えば、通常用いられるカーネルサイズを21×21とした畳み込みカーネルを採用したことに起因して、画質と電算処理コストの間で良好なバランスを提供しないことがある。はるかに低い電算処理コストで、より良好な、または同様の画質を実現するように、オフセットが、KPNの画像のノイズ除去において用いられる画素位置を適応的に決定するように、導入され得る。詳細は以下に検討されるであろう。
いくつかの実施形態において、適応型変形カーネル予測ネットワーク(ADKPN)が、画像のノイズ除去などの画像処理タスクにおいて、KPNの代わりに用いられる。一般的に、ADKPNは、画像の各画素に関して畳み込みカーネルを生成し得るのみではなく、画像のノイズ除去に用いられる画素位置を決定するオフセットもまた生成し得る。ADKPNは、図27Bに示されるような画素P0の画素位置を中央とする四角いウィンドウにおける、固定された画素位置の画素値を用いるのではなくむしろ、画像の画素のノイズ除去におけるオフセットによって画素位置の画素値を用い得る。そのような、よりスマートな畳み込みカーネルの一般化およびフィルタリングの枠組みは、畳み込みKPNと比較したノイズ除去性能よりはるかに良好であり得る。
図28Aは、実施形態による、適応型変形可能カーネル予測ネットワーク(ADKPN)を示す概略図である。適応型変形可能カーネル予測ネットワークは、以下で「ADKPN」と称される。示されるADKPN2800は、限定されることはないが、グラフィックス処理ユニット(GPU)、中央処理装置(CPU)、特定用途向け集積回路(ASIC)などを含む、畳み込みニューラルネットワークまたは同様のディープラーニングニューラルネットワークに関して好適なコンピューティングエンジンまたは任意のコンピューティングハードウェア上で、実装されるか展開される畳み込みニューラルネットワークであり得る。
訓練の最中に、ADKPN2800は、前もって収集された、ノイズの多い画像および、当該ノイズの多い画像のそれぞれの地上検証画像などの、代表的な画像の訓練データセットによって訓練される。例えば、訓練データセットは、モンテカルロレンダリングまたは任意の他の画像レンダリング解決法によって生成された、機械合成されたノイズの多い画像などの、多数の代表的な画像を含み得る。さらなる例に関して、訓練データセットは、画素ごとに128のサンプル(spp)でレンダリングされるテスト画像、ならびに、8192sppまたはより高いsppでレンダリングされる参照画像を含み得る。画素ごとのサンプル数(spp)は、モンテカルロレンダリングなどのランダムサンプリングレンダリングアルゴリズムによる画素のレンダリングのために用いられる標本数として、当技術分野で知られる。sppがより大きくなると、画像品質がより良好になる。
ADKPN2800に関する訓練プロシージャは、確率的勾配降下法(SGD)、Momentum、AdaGrad、Adamなどの、ディープニューラルネットワークに関する典型的な訓練アプローチによって成され得る。ADKPN2800は、多数の反復に関する訓練データセットによって、訓練およびチューニングされ得、バッチサイズ、ノード情報、バイアスなどの、ADKPN2800のネットワークパラメータを学習する。
画像のノイズ除去のランタイム推定の最中、ADKPN2800は、画像を受信し得、それを入力してノイズ除去し、出力としてノイズ除去された画像を生成する。画像は、モンテカルロレンダリングまたは任意の他の画像レンダリング解決法によって生成された、機械合成された画像などの、任意の画像であり得る。画像は複数の画素を含んでよい。
ADKPN2800は、カーネル生成ロジック2810、オフセット生成ロジック2820、およびフィルタリングロジック2830を含み得る。画像が受信された後、画像の複数の画素のそれぞれに関して、ADKPN2800のカーネル生成ロジック2810は、画素に関する複数のカーネル値を有する畳み込みカーネルを生成し得、ADKPN2800のオフセット生成ロジック2820は、畳み込みカーネルの複数のカーネル値にそれぞれ対応する、画素に関する複数のオフセットを生成し得、複数のオフセットのそれぞれは、画素の画素位置からの逸脱を示す。次に、画像の複数の画素のそれぞれに関して、ADKPN2800のフィルタリングロジック2830は、画素の画素位置に基づいて、複数の逸脱した画素位置と、オフセット生成ロジック2820によって画素に関して生成された複数のオフセットとを決定し得、カーネル生成ロジック2810によって画素に関して生成された畳み込みカーネル、ならびに、複数の逸脱した画素位置の画素値を用いて、画素をフィルタリングして、ノイズ除去された画素を取得する。画像の複数の画素のそれぞれがフィルタリングされた後、ADKPN2800は、出力としてノイズ除去された画像を生成し得る。前述されたフィルタリングの詳細は、図28Bに関して以下に説明される。
図28Bは、実施形態による、ADKPNによる画素のフィルタリングの例を示す概略図である。図28Aに関して前に検討したように、ADKPN2800のフィルタリングロジック2830は、画素の画素位置に基づいて、複数の逸脱した画素位置と、画素に関して生成された複数のオフセットとを決定し得、画素に関して生成された畳み込みカーネル、ならびに、複数の逸脱した画素位置の画素値を用いて、画素をフィルタリングして、ノイズ除去された画素を取得する。
より詳細には、図28Bの例において、3×3のカーネルサイズを有する畳み込みカーネル2870は、画像の画素位置2840において画素P0に関して生成され、畳み込みカーネル2870はW0からW8まで9のカーネル値を有する。9のオフセット2850−0、2850−1、2850−2、2850−3、2850−4、2850−5、2850−6、2850−7および2850−8もまた、画素P0に関して生成され、9のカーネル値W0からW8にそれぞれ対応する。図28Bに示されるように、画素P0に関して、ADKPN2800のフィルタリングロジック2830は、画素P0の画素位置2840、および9のオフセット2850−0、2850−1、2850−2、2850−3、2850−4、2850−5、2850−6、2850−7および2850−8に基づいて、図28BにおいてP0'−P8'としてマーキングされた画像の9の逸脱した画素位置2860−0、2860−1、2860−2、2860−3、2860−4、2860−5、2860−6、2860−7および2860−8を決定し得る。ADKPN2800のフィルタリングロジック2830は、次に、9のカーネル値W0からW8を有する畳み込みカーネル2870と、9の逸脱した画素位置2860−0、2860−1、2860−2、2860−3、2860−4、2860−5、2860−6、2860−7および2860−8の画素値とによって画素P0をフィルタリングし得、ノイズ除去された画素の画素値
Figure 2021077343
を取得する。より具体的には、画素P0のフィルタリングは、ノイズ除去された画素の画素値
Figure 2021077343
として画像の9の逸脱した画素位置2860−0、2860−1、2860−2、2860−3、2860−4、2860−5、2860−6、2860−7および2860−8の画素値の加重平均を算出することによって成され得る。
すなわち、ノイズ除去された画素の画素値
Figure 2021077343
が、次式によって計算され得る。
Figure 2021077343
いくつかの実施形態において、画像の画素に関して生成される畳み込みカーネルの複数のカーネル値の和は1であり得る。図28Bの例に関して、畳み込みカーネル2870の9のカーネル値W0からW8の和は1であり得る。
いくつかの実施形態において、画像の画素に関して生成される複数のオフセットのそれぞれは、画素の画素位置からの逸脱を示す位置値を含み得る。例えば、9のオフセット2850−0、2850−1、2850−2、2850−3、2850−4、2850−5、2850−6、2850−7および2850−8のそれぞれは、図28Bに示されたように、画素位置2840からの逸脱を示す位置値を含み得る。例えば、オフセット2850−0は、画素位置2840からの逸脱を示す位置値(u0、v0)を含み得る。画素位置2840が位置値(x,y)によって表わされるとすれば、画素位置2860−0は、画素位置2840およびオフセット2850−0に基づいて、位置値(x+u0,y+v0)によって決定され得る。
いくつかの実施形態において、位置値は浮動小数点値を含み得る。例えば、前述のオフセット2850−0は、浮動小数点値(u0,v0)を含み得る。したがって、限定されない例として、位置値が(x+u0,y+v0)の画素位置2860−0の画素値が、最近傍補間、双一次補間などの当技術分野で既知の画素補間によって決定され得る。
いくつかの実施形態において、畳み込みカーネルの複数のカーネル値は、画像の少なくとも2つの画素に関して異なり得る。
いくつかの実施形態において、複数のオフセットは、画像の少なくとも2つの画素に関して異なり得る。
いくつかの実施形態において、複数のオフセットは、畳み込みカーネルの生成の前に、またはそれと同時に生成され得る。例えば、画像が受信された後、最初に複数のオフセットが画像の複数の画素のそれぞれに関して生成され得、次に、畳み込みカーネルが画像の複数の画素のそれぞれに関して生成され得る。代替的に、複数のオフセットは、画像の複数の画素のそれぞれに関して畳み込みカーネルと同時に生成され得る。
いくつかの実施形態において、前述の逸脱の上限は、例えば畳み込みニューラルネットワークの訓練の前に、予め定められてよい。逸脱の上限は、ADKPN2800の訓練/学習プロシージャの電算処理コストを制御するように、予め定められてよい。例えば、ADKPN2800の3×3カーネルサイズの畳み込みカーネルに関して、逸脱の上限は、11画素より大きくならないように、予め定められてよい。
いくつかの実施形態において、畳み込みカーネルのカーネルサイズは、例えば畳み込みニューラルネットワークの訓練の前に、予め割り当てられてよい。いくつかの実施形態において、カーネルサイズは、3×3、5×5、7×7、…、2n−1)×(2n−1)のうちの1つとして予め割り当てられてよく、ここでnは正の整数、n>=2かつn<min(floor(W/2),floor(H/2))、およびWおよびHは、訓練に用いられる正規化された画像の幅および高さ、または、ランタイム推定においてノイズ除去されるべき画像の幅および高さである。上記数学的関数「floor()」は、当技術分野で知られる、切り捨て演算を指す。
図28Cは、従来のKPNおよびADKPNの間の訓練および/または試験動作測定の比較を示すグラフである。特に、図28Cに示されるようなグラフは、従来のKPNおよびADKPNに関する計算的反復(水平軸)に対する損失(垂直軸)を示す。ADKPNが、従来のKPNに対してより良い結果を生成する、つまり、同様の計算的反復に対して、損失が低いことが、明らかに見られ得る。別のやり方が述べられるが、ADKPNは、従来のKPNに対して低い計算コストで同様の結果を実現し得る。
図29は、実施形態による、ADKPNによる画像のノイズ除去の方法を示すフローチャートである。
ADKPNによる画像のノイズ除去の方法2900は、畳み込みニューラルネットワークまたは同様のディープラーニングニューラルネットワークのために好適なコンピューティングエンジンまたは任意のコンピューティングハードウェア上で実装され得、限定されることはないが、グラフィックス処理ユニット(GPU)、中央処理装置(CPU)、特定用途向け集積回路(ASIC)などを含む。画像は、複数の画素を含み得る。いくつかの実施形態において、画像は、モンテカルロレンダリングまたは任意の他の画像レンダリング解決法によって生成される機械合成された画像など、任意の画像であってよい。
方法2900は、画像の複数の画素のそれぞれの演算2910−2940を含み得る。
ブロック2910において、複数のカーネル値を有する畳み込みカーネルが画素に関して生成され得る。
ブロック2920において、それぞれ複数のカーネル値に対応する複数のオフセットは、画素に関して生成され得、複数のオフセットのそれぞれは、画素の画素位置からの逸脱を示す。
ブロック2930において、複数の逸脱した画素位置が、画素の画素位置および複数のオフセットに基づいて決定され得る。
ブロック2940において、画素は、複数の逸脱した画素位置の畳み込みカーネルおよび画素値によってフィルタリングされ得、ノイズ除去された画素を取得する。
いくつかの実施形態において、複数のオフセットのそれぞれは、画素の画素位置からの逸脱を示す位置値を含み得る。
いくつかの実施形態において、位置値は浮動小数点値を含み得る。
いくつかの実施形態において、複数のカーネル値は、画像の少なくとも2つの画素に関して異なり得る。
いくつかの実施形態において、複数のオフセットは、画像の少なくとも2つの画素に関して異なり得る。
いくつかの実施形態において、複数のオフセットは、畳み込みカーネルの生成の前に、またはそれと同時に生成され得る。
いくつかの実施形態において、複数の逸脱した画素位置の畳み込みカーネルおよび画素値を有する画素のフィルタリングは、畳み込みカーネルの複数のカーネル値を複数の逸脱した画素位置の画素値に適用して、複数の画素位置の画素値の加重平均を取得することを含み得る。
いくつかの実施形態において、逸脱の上限は、例えば畳み込みニューラルネットワークの訓練の前に、予め定められてよい。
いくつかの実施形態において、畳み込みカーネルのカーネルサイズは、例えば畳み込みニューラルネットワークの訓練の前に、3×3、5×5、7×7、…(2n−1)×(2n−1)のうちの1つとして予め割り当てられてよく、ここでnは正の整数、n>=2かつn<min(floor(W/2),floor(H/2))、およびWおよびHは画像の幅および高さである。上記数学的関数「floor()」は、当技術分野で知られる、切り捨て演算を指す。
図30Aから図30Dは、入力画像、参照画像、従来のKPNによって生成された出力画像、および実施形態によるADKPNによって生成された出力画像を、それぞれ示す。
図30Aは、画素ごとに128のサンプル(spp)で機械合成された入力画像を示す。図30Bは、8192sppで機械合成された参照画像を示す。画素ごとのサンプル数(spp)は、モンテカルロレンダリングなどのランダムサンプリングレンダリングアルゴリズムによる画素のレンダリングのために用いられる標本数として、当技術分野で知られる。sppがより大きくなると、画像品質がより良好になる。図30Aの入力画像はノイズがある一方、図30Bの参照画像は高品質であることが見られ得る。
図30Cは、図30Aの入力画像のノイズ除去によって、9×9のカーネルサイズで従来のKPNによって生成された出力画像を示す。楕円3002内の領域に明らかなアーチファクトがあることが見られ得る。図30Dは、実施形態に係る、図30Aの入力画像のノイズ除去によって、5×5のカーネルサイズでADKPNによって生成された出力画像を示す。図30Cの出力画像と対照的に、図30Dの画像は、アーチファクトのない図30Bの参照画像と同様の質を表すことが見られ得る。
同様に、図31Aは、画素ごとに128のサンプル(spp)で機械合成された、ノイズのある入力画像を示す。図31Bは、8192sppで機械合成された、品質の高い参照画像を示す。図31Cは、図31Aの入力画像のノイズ除去によって、9×9のカーネルサイズで従来のKPNによって生成された出力画像を示す。楕円3102、3104および3106内の領域に明らかなアーチファクトがあることが見られ得る。図31Dは、実施形態に係る、図31Aの入力画像のノイズ除去によって、5×5のカーネルサイズでADKPNによって生成された出力画像を示す。図31Cの出力画像と対照的に、図31Dの画像は、アーチファクトのない図31Bの参照画像と同様の質を表すことが見られ得る。
同様に、図32Aは、画素ごとに128のサンプル(spp)で機械合成された、ノイズのある入力画像を示す。図32Bは、8192sppで機械合成された、品質の高い参照画像を示す。図32Cは、図32Aの入力画像のノイズ除去によって、9×9のカーネルサイズで従来のKPNによって生成された出力画像を示す。楕円3202および3204内の領域に明らかなアーチファクトがあることが見られ得る。図32Dは、実施形態に係る、図32Aの入力画像のノイズ除去によって、5×5のカーネルサイズでADKPNによって生成された出力画像を示す。図32Cの出力画像と対照的に、図32Dの画像は、アーチファクトのない図32Bの参照画像と同様の質を表すことが見られ得る。
同様に、図33Aは、画素ごとに128のサンプル(spp)で機械合成された、ノイズのある入力画像を示す。図33Bは、8192sppで機械合成された、品質の高い参照画像を示す。図33Cは、図33Aの入力画像のノイズ除去によって、9×9のカーネルサイズで従来のKPNによって生成された出力画像を示す。楕円3302内の領域に明らかなアーチファクトがあることが見られ得る。図33Dは、実施形態に係る、図33Aの入力画像のノイズ除去によって、5×5のカーネルサイズでADKPNによって生成された出力画像を示す。図33Cの出力画像と対照的に、図33Dの画像は、アーチファクトのない図33Bの参照画像と同様の質を表すことが見られ得る。
さらに、図30Cから図30D、図31Cから図31D、図32Cから図32Dおよび図33Cから図33Dもまた、それぞれ、出力画像の構造的な相違点(DSSIM)インデックスを示す。DSSIMは、当技術分野では知られているが、構造的な相違点を指し、構造的な同一点(SSIM)の変形例であり、画像の相違点の指標となる。DSSIM指標は、出力画像と、地上検証画像との間の構造差を比較するように用いられる。DSSIM指標がより小さくなると、出力画像がより高品質になる。例えば、図30CのKPNによる出力画像のDSSIM指標が0.0672であり得る一方で、図30DのADKPNによる出力画像のDSSIM指標は0.0610であり得る。ADKPNによって生成される出力画像はすべて、従来のKPNによって生成されるものより小さいDSSIM指標を有することが、図30Cから図30D、図31Cから図31D、図32Cから図32Dおよび図33Cから図33Dから見られ得る。言い換えれば、ADKPNによって生成された出力画像はすべて、従来のKPNによって生成されたものより高品質を有する。
したがって、より小さいカーネルサイズのADKPNが、より大きいカーネルサイズのKPNより著しく良好に実行されることが、明らかに見られ得る。
様々な実施形態の一部は、コンピュータプログラム製品として提供されてよく、当該コンピュータプログラム製品は、そこに格納されたコンピュータプログラム命令を有するコンピュータ可読媒体を含んでよく、当該命令を用いて、コンピュータ(または他の電子デバイス)を1または複数のプロセッサによる実行のためにプログラムして、特定の実施形態による処理を実行させてよい。コンピュータ可読媒体は、限定されることはないが、磁気ディスク、光ディスク、リードオンリメモリ(ROM)、ランダムアクセスメモリ(RAM)、消去可能プログラマブルリードオンリメモリ(EPROM)、電気的消去可能プログラマブルリードオンリメモリ(EEPROM)、磁気または光カード、フラッシュメモリ、または電子命令の格納に適した他のタイプのコンピュータ可読媒体を含み得る。さらに、実施形態はまた、コンピュータプログラム製品としてダウンロードしてもよく、プログラムは、離れた場所にあるコンピュータから要求側コンピュータへ転送されてもよい。いくつかの実施形態において、非一時的コンピュータ読み取り可能ストレージ媒体は、命令のシーケンスを表すそこに格納されたデータを有し、それはプロセッサによって実行された場合、プロセッサに特定の動作を実行させる。
当該方法の多くは、これらの最も基本的な形態で説明されているが、本実施形態の基本範囲から逸脱することなく、当該方法のうちの任意のものに処理を追加してよく、またはそこから処理を削除してよく、且つ、当該説明されたメッセージのうちの任意のものに情報を追加してよく、またはそこから情報を減らしてよい。多くのさらなる修正および適応が行われることが可能であることは、当業者に明らかであろう。上記の特定の実施形態は、概念を限定するためにではなく、説明するために提供されている。実施形態の範囲は、上述に提供された特定の例により決定されるものではなく、以下の特許請求の範囲によってのみ決定される。
要素「A」が要素「B」と結合されるかまたは一緒に結合されると記載された場合、要素Aは要素Bに直接結合されてもよく、または、例えば要素Cを通じて間接的に結合されてもよい。明細書または請求項が、コンポーネント、特徴、構造、処理、または特性Aが、コンポーネント、特徴、構造、処理、または特性Bを「引き起こす(cause)」と述べる場合、それは、「A」が「B」の少なくとも部分的な原因であるが、「B」の発生を支援する少なくとも1つの他のコンポーネント、特徴、構造、処理、または特性もあり得ることを意味する。明細書が、コンポーネント、特徴、構造、処理、または特性が「してよい(may)」「得る(might)」または「しれない(could)」が含まれることを示す場合、その特定のコンポーネント、特徴、構造、処理、または特性は、含まれる必要がない。明細書または請求項が、1つの(「a」または「an」)要素を指す場合、これは、説明された要素が1つしかないことを意味しない。
実施形態は、実装または例である。明細書における、「実施形態(an embodiment)」「一実施形態(one embodiment)」「いくつかの実施形態(some embodiments)」または「他の実施形態(other embodiments)」への参照は、その実施形態に関連して説明される特定の特徴、構造、または特性が、少なくともいくつかの実施形態において含まれるが、必ずしもすべての実施形態に含まれるのではないことを、意味する。「実施形態」「一実施形態」または「いくつかの実施形態」という様々な表現は、すべてが必ずしも同一の実施形態を参照しているとは限らない。当然のことながら、例示的実施形態の上記の説明において、様々な特徴が、本開示を簡素化し、様々な新規な態様のうち1または複数の理解を支援する目的で、これらの単一の実施形態、図、または説明にまとめてグループ化されていることがあることは理解されるべきである。しかしながら、この開示方法が、請求項に記載された実施形態が各請求項に明示的に記載されるよりも多くの特徴を必要とするという意図を反映するものとして解釈されるべきではない。むしろ、以下の請求項が反映するように、新規な態様は、前述の開示された単一の実施形態のすべての特徴より少ない。したがって、特許請求の範囲は、この明細書中に明示的に組み込まれ、各請求項は別個の実施形態として独立する。
以下の節および/または例は、さらなる実施形態または例に関連する。当該例における特定内容が、1つまたは複数の実施形態のいずれにおいても使用されてよい。異なる実施形態または例の様々な特徴は、含まれるいくつかの特徴と多様に組み合わされ、他の特徴は、様々な異なる用途に適するように除外されてもよい。例は、方法、方法の実行作用のための手段、機械によって実行された場合に、本明細書に説明された実施形態および例によるハイブリッド通信を容易にする、方法、装置またはシステムの作用を機械に実行させる命令を含む少なくとも1つの機械可読媒体、などの主題を含み得る。
さらなる例
例1は、コンピュートエンジン上に実装される畳み込みニューラルネットワークによって画像をノイズ除去する方法を含み、画像は複数の画素を含み、方法は、画像の複数の画素のそれぞれに関して、画素に関する複数のカーネル値を有する畳み込みカーネルを生成する段階と、複数のカーネル値にそれぞれ対応する画素に関する複数のオフセットを生成する段階であって、複数のオフセットのそれぞれは、画素の画素位置からの逸脱を示す、段階と、画素の画素位置および複数のオフセットに基づいて、複数の逸脱した画素位置を決定する段階と、複数の逸脱した画素位置の畳み込みカーネルおよび画素値によって画素をフィルタリングして、ノイズ除去された画素を取得する段階と、を備える。
例2は、例1の主題を含み、複数のオフセットののそれぞれは、画素の画素位置からの逸脱を示す位置値を含む。
例3は、例2の主題を含み、位置値は、浮動小数点値を含む。
例4は、例1の主題を含み、複数のカーネル値は、画像の少なくとも2つの画素に関して異なる。
例5は、例1の主題を含み、複数のオフセットは、画像の少なくとも2つの画素に関して異なる。
例6は、例1の主題を含み、複数のオフセットは、畳み込みカーネルの生成の前に、または同時に生成される。
例7は、例1の主題を含み、複数の逸脱した画素位置の畳み込みカーネルおよび画素値によって画素をフィルタリングする段階は、畳み込みカーネルの複数のカーネル値を、複数の逸脱した画素位置の画素値に適用して、画素値の加重平均を取得する段階を含む。
例8は、例1の主題を含み、逸脱の上限は予め定められる。
例9は、例1の主題を含み、畳み込みカーネルのカーネルサイズは、3×3、5×5、7×7、…、(2n−1)×(2n−1)のうちの1つとして予め割り当てられ、ここでnは正の整数、n>=2かつn<min(floor(W/2),floor(H/2))、WおよびHは、画像の幅および高さである。
例10は、画像を含むデータを格納するデータストレージであって、画像は複数の画素を含む、データストレージと、データストレージに結合されるコンピュートエンジンとを含み、コンピュートエンジンは畳み込みニューラルネットワークによって画像をノイズ除去し、コンピュートエンジンは、画像の複数の画素のそれぞれに関して、画素に関する複数のカーネル値を有する畳み込みカーネルを生成し、複数のカーネル値にそれぞれ対応する画素に関する複数のオフセットを生成し、複数のオフセットのそれぞれは、画素の画素位置からの逸脱を示し、画素の画素位置および複数のオフセットに基づいて、複数の逸脱した画素位置を決定し、複数の逸脱した画素位置の畳み込みカーネルおよび画素値によって画素をフィルタリングしてノイズ除去された画素を取得する、画像のノイズ除去のための装置を備える。
例11は、例10の主題を含み、複数のオフセットのそれぞれは、画素の画素位置からの逸脱を示す位置値を含む。
例12は例11の主題を含み、位置値は、浮動小数点値を含む。
例13は、例10の主題を含み、複数のカーネル値は、画像の少なくとも2つの画素に関して異なる。
例14は、例10の主題を含み、複数のオフセットは、画像の少なくとも2つの画素に関して異なる。
例15は、例10の主題を含み、複数のオフセットは、畳み込みカーネルの生成の前に、または同時に生成される。
例16は、例10の主題を含み、複数の逸脱した画素位置の畳み込みカーネルおよび画素値によって画素をフィルタリングすることは、畳み込みカーネルの複数のカーネル値を、複数の逸脱した画素位置の画素値に適用して、画素値の加重平均を取得することを含む。
例17は、例10の主題を含み、逸脱の上限は予め定められる。
例18は、例10の主題を含み、畳み込みカーネルのカーネルサイズは、3×3、5×5、7×7、…、(2n−1)×(2n−1)のうちの1つとして予め割り当てられ、ここでnは正の整数、n>=2かつn<min(floor(W/2),floor(H/2))、WおよびHは、画像の幅および高さである。
例19は、例1−9のいずれかにおいて請求される方法を実行する手段を備える装置を含む。
例20は、コンピューティングデバイス上で実行されることに応じて、コンピューティングデバイスに、例1−9のいずれかにおいて請求される方法を実行させる、複数の命令を格納されて備える、機械可読媒体を含む。
上記の説明および図面は、限定的意味ではなくむしろ例示であるとみなされるべきである。当業者は、添付の特許請求の範囲に記載された本発明の、より広い趣旨および範囲から逸脱することなく、本明細書に説明される実施形態に様々な修正および変更が行われ得ることを理解するであろう。

Claims (21)

  1. コンピュートエンジン上に実装される畳み込みニューラルネットワークによって画像をノイズ除去する方法であって、前記画像は複数の画素を含み、前記方法は、
    前記画像の前記複数の画素のそれぞれに関して、
    前記画素に関する複数のカーネル値を有する畳み込みカーネルを生成する段階と、
    前記複数のカーネル値にそれぞれ対応する前記画素に関する複数のオフセットを生成する段階であって、前記複数のオフセットのそれぞれは、前記画素の画素位置からの逸脱を示す、段階と、
    前記画素の前記画素位置および前記複数のオフセットに基づいて、複数の逸脱した画素位置を決定する段階と、
    前記複数の逸脱した画素位置の前記畳み込みカーネルおよび画素値によって前記画素をフィルタリングして、ノイズ除去された画素を取得する段階と、
    を備える、方法。
  2. 前記複数のオフセットのそれぞれは、前記画素の前記画素位置からの前記逸脱を示す位置値を含む、請求項1に記載の方法。
  3. 前記位置値は、浮動小数点値を含む、請求項2に記載の方法。
  4. 前記複数のカーネル値は、前記画像の少なくとも2つの画素に関して異なる、請求項1から3のいずれか一項に記載の方法。
  5. 前記複数のオフセットは、前記画像の少なくとも2つの画素に関して異なる、請求項1から4のいずれか一項に記載の方法。
  6. 前記複数のオフセットは、前記畳み込みカーネルの前記生成の前に、または同時に生成される、請求項1から5のいずれか一項に記載の方法。
  7. 前記複数の逸脱した画素位置の前記畳み込みカーネルおよび画素値によって前記画素をフィルタリングする前記段階は、
    前記畳み込みカーネルの前記複数のカーネル値を、前記複数の逸脱した画素位置の前記画素値に適用して、前記画素値の加重平均を取得する段階を含む、
    請求項1から6のいずれか一項に記載の方法。
  8. 前記逸脱の上限は予め定められる、請求項1から7のいずれか一項に記載の方法。
  9. 前記畳み込みカーネルのカーネルサイズは、3×3、5×5、7×7、…、(2n−1)×(2n−1)のうちの1つとして予め割り当てられ、ここでnは正の整数、n>=2かつn<min(floor(W/2),floor(H/2))、WおよびHは、前記画像の幅および高さである、請求項1から8のいずれか一項に記載の方法。
  10. 画像を含むデータを格納するデータストレージであって、前記画像は複数の画素を含む、データストレージと、
    前記データストレージに結合されるコンピュートエンジンとを備え、前記コンピュートエンジンは畳み込みニューラルネットワークによって前記画像をノイズ除去し、前記コンピュートエンジンは、
    前記画像の複数の画素のそれぞれに関して、
    前記画素に関する複数のカーネル値を有する畳み込みカーネルを生成し、
    前記複数のカーネル値にそれぞれ対応する前記画素に関する複数のオフセットを生成し、前記複数のオフセットのそれぞれは、前記画素の画素位置からの逸脱を示し、
    前記画素の前記画素位置および前記複数のオフセットに基づいて、複数の逸脱した画素位置を決定し、
    前記複数の逸脱した画素位置の前記畳み込みカーネルおよび画素値によって前記画素をフィルタリングして、ノイズ除去された画素を取得する、
    画像のノイズ除去のための装置。
  11. 前記複数のオフセットのそれぞれは、前記画素の前記画素位置からの前記逸脱を示す位置値を含む、請求項10に記載の装置。
  12. 前記位置値は、浮動小数点値を含む、請求項11に記載の装置。
  13. 前記複数のカーネル値は、前記画像の少なくとも2つの画素に関して異なる、請求項10から12のいずれか一項に記載の装置。
  14. 前記複数のオフセットは、前記画像の少なくとも2つの画素に関して異なる、請求項10から13のいずれか一項に記載の装置。
  15. 前記複数のオフセットは、前記畳み込みカーネルの前記生成の前に、または同時に生成される、請求項10から14のいずれか一項に記載の装置。
  16. 前記複数の逸脱した画素位置の前記畳み込みカーネルおよび画素値によって前記画素を前記フィルタリングすることは、
    前記畳み込みカーネルの前記複数のカーネル値を、前記複数の逸脱した画素位置の前記画素値に適用して、前記画素値の加重平均を取得することを含む、
    請求項10から15のいずれか一項に記載の装置。
  17. 前記逸脱の上限は予め定められる、請求項10から16のいずれか一項に記載の装置。
  18. 前記畳み込みカーネルのカーネルサイズは、3×3、5×5、7×7、…、(2n−1)×(2n−1)のうちの1つとして予め割り当てられ、ここでnは正の整数、n>=2かつn<min(floor(W/2),floor(H/2))、WおよびHは、前記画像の幅および高さである、請求項10から17のいずれか一項に記載の装置。
  19. 請求項1−9のいずれか一項において請求される方法を実行する手段を備える装置。
  20. コンピューティングデバイス上で実行されることに応じて、前記コンピューティングデバイス上に、請求項1−9のいずれか一項において請求される方法を実行させる、コンピュータプログラム。
  21. 請求項20に記載のコンピュータプログラムを格納する、機械可読媒体。
JP2020150178A 2019-11-07 2020-09-07 画像のノイズ除去のための、適応型変形可能カーネル予測ネットワーク Pending JP2021077343A (ja)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
CN201911081492.0A CN112785486A (zh) 2019-11-07 2019-11-07 用于图像去噪声的自适应可变形核预测网络
CN201911081492.0 2019-11-07

Publications (1)

Publication Number Publication Date
JP2021077343A true JP2021077343A (ja) 2021-05-20

Family

ID=75584071

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2020150178A Pending JP2021077343A (ja) 2019-11-07 2020-09-07 画像のノイズ除去のための、適応型変形可能カーネル予測ネットワーク

Country Status (5)

Country Link
US (2) US11869171B2 (ja)
JP (1) JP2021077343A (ja)
KR (1) KR20210055583A (ja)
CN (1) CN112785486A (ja)
DE (1) DE102020129251A1 (ja)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11869171B2 (en) 2019-11-07 2024-01-09 Intel Corporation Adaptive deformable kernel prediction network for image de-noising

Families Citing this family (12)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11360920B2 (en) * 2020-08-31 2022-06-14 Micron Technology, Inc. Mapping high-speed, point-to-point interface channels to packet virtual channels
US11418455B2 (en) 2020-08-31 2022-08-16 Micron Technology, Inc. Transparent packet splitting and recombining
US11296995B2 (en) 2020-08-31 2022-04-05 Micron Technology, Inc. Reduced sized encoding of packet length field
US11412075B2 (en) 2020-08-31 2022-08-09 Micron Technology, Inc. Multiple protocol header processing
US11539623B2 (en) 2020-08-31 2022-12-27 Micron Technology, Inc. Single field for encoding multiple elements
US11871145B2 (en) * 2021-04-06 2024-01-09 Adobe Inc. Optimization of adaptive convolutions for video frame interpolation
CN113744156B (zh) * 2021-09-06 2022-08-19 中南大学 一种基于可变形卷积神经网络的图像去噪方法
CN113963009B (zh) * 2021-12-22 2022-03-18 中科视语(北京)科技有限公司 基于可形变划块的局部自注意力的图像处理方法和系统
CN114998964B (zh) * 2022-06-02 2023-04-18 天津道简智创信息科技有限公司 一种新型证照质量检测方法
GB2620920A (en) * 2022-07-21 2024-01-31 Advanced Risc Mach Ltd System, devices and/or processes for application of kernel coefficients
US12008728B2 (en) 2022-08-31 2024-06-11 Qualcomm Incorporated Apparatuses and methods for processing single instruction for image transformation from non-integral locations
CN115661784B (zh) * 2022-10-12 2023-08-22 北京惠朗时代科技有限公司 一种面向智慧交通的交通标志图像大数据识别方法与系统

Family Cites Families (14)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7873812B1 (en) 2004-04-05 2011-01-18 Tibet MIMAR Method and system for efficient matrix multiplication in a SIMD processor architecture
US7747070B2 (en) * 2005-08-31 2010-06-29 Microsoft Corporation Training convolutional neural networks on graphics processing units
US10223333B2 (en) 2014-08-29 2019-03-05 Nvidia Corporation Performing multi-convolution operations in a parallel processing system
US10402700B2 (en) * 2016-01-25 2019-09-03 Deepmind Technologies Limited Generating images using neural networks
US10891538B2 (en) 2016-08-11 2021-01-12 Nvidia Corporation Sparse convolutional neural network accelerator
US10997496B2 (en) 2016-08-11 2021-05-04 Nvidia Corporation Sparse convolutional neural network accelerator
US11531852B2 (en) * 2016-11-28 2022-12-20 D-Wave Systems Inc. Machine learning systems and methods for training with noisy labels
US10607319B2 (en) * 2017-04-06 2020-03-31 Pixar Denoising monte carlo renderings using progressive neural networks
US10475165B2 (en) * 2017-04-06 2019-11-12 Disney Enterprises, Inc. Kernel-predicting convolutional neural networks for denoising
US10296578B1 (en) * 2018-02-20 2019-05-21 Paycor, Inc. Intelligent extraction and organization of data from unstructured documents
CN112785486A (zh) 2019-11-07 2021-05-11 英特尔公司 用于图像去噪声的自适应可变形核预测网络
EP4070268A4 (en) * 2020-01-23 2023-01-25 Baidu.com Times Technology (Beijing) Co., Ltd. DEEP RESIDUAL NETWORK FOR COLORED FILTER NETWORK IMAGE DENOISE
EP4016446A1 (en) * 2020-12-21 2022-06-22 Dassault Systèmes Intelligent denoising
CN114693850A (zh) * 2020-12-25 2022-07-01 英特尔公司 用于图像和视频处理的条件核预测网络和自适应深度预测

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11869171B2 (en) 2019-11-07 2024-01-09 Intel Corporation Adaptive deformable kernel prediction network for image de-noising

Also Published As

Publication number Publication date
US20210142448A1 (en) 2021-05-13
CN112785486A (zh) 2021-05-11
DE102020129251A1 (de) 2021-05-12
KR20210055583A (ko) 2021-05-17
US11869171B2 (en) 2024-01-09
US20240127408A1 (en) 2024-04-18

Similar Documents

Publication Publication Date Title
US11869171B2 (en) Adaptive deformable kernel prediction network for image de-noising
JP2022523912A (ja) 圧縮技術
WO2020190371A1 (en) Local memory sharing between kernels
US11709714B2 (en) Thread group scheduling for graphics processing
US11036545B2 (en) Graphics systems and methods for accelerating synchronization using fine grain dependency check and scheduling optimizations based on available shared memory space
US11455770B2 (en) Method and apparatus for encoding based on shading rates
EP4024223A1 (en) Systems and methods for cache optimization
WO2020190432A1 (en) Multi-tile graphics processor rendering
EP3938922A1 (en) On chip dense memory for temporal buffering
US20220207656A1 (en) Conditional kernel prediction network and adaptive depth prediction for image and video processing
US11762804B2 (en) Scalar core integration
US20220414010A1 (en) Methods and apparatuses for dynamically changing data priority in a cache
WO2020190457A2 (en) Systems and methods for synchronization of multi-thread lanes
CN112785481A (zh) 动态分割激活和核以提高存储器效率
US20220207293A1 (en) Method and apparatus of spatially sparse convolution module for visual rendering and synthesis
CN113256745A (zh) 用于基于重要度值来编码的方法和装置
EP3938906A1 (en) Systems and methods for exploiting queues and transitional storage for improved low-latency high-bandwidth on-die data retrieval
EP4109386A1 (en) 64-bit two-dimensional block load with transpose
EP4020377A1 (en) Conditional kernel prediction network and adaptive depth prediction for image and video processing
EP4020384A1 (en) Method and apparatus of spatially sparse convolution module for visual rendering and synthesis
EP4131002A1 (en) Techniques for multi-source to multi-destination weighted round robin arbitration
EP4155900A1 (en) Emulation of floating point calculation

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20230904