JP2023046252A - 浮動小数点計算のエミュレーション - Google Patents
浮動小数点計算のエミュレーション Download PDFInfo
- Publication number
- JP2023046252A JP2023046252A JP2022110785A JP2022110785A JP2023046252A JP 2023046252 A JP2023046252 A JP 2023046252A JP 2022110785 A JP2022110785 A JP 2022110785A JP 2022110785 A JP2022110785 A JP 2022110785A JP 2023046252 A JP2023046252 A JP 2023046252A
- Authority
- JP
- Japan
- Prior art keywords
- graphics
- processor
- memory
- operations
- data
- 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
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F7/00—Methods or arrangements for processing data by operating upon the order or content of the data handled
- G06F7/38—Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
- G06F7/48—Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
- G06F7/483—Computations with numbers represented by a non-linear combination of denominational numbers, e.g. rational numbers, logarithmic number system or floating-point numbers
- G06F7/487—Multiplying; Dividing
- G06F7/4876—Multiplying
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F15/00—Digital computers in general; Data processing equipment in general
- G06F15/76—Architectures of general purpose stored program computers
- G06F15/80—Architectures of general purpose stored program computers comprising an array of processing units with common control, e.g. single instruction multiple data processors
- G06F15/8046—Systolic arrays
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F17/00—Digital computing or data processing equipment or methods, specially adapted for specific functions
- G06F17/10—Complex mathematical operations
- G06F17/16—Matrix or vector computation, e.g. matrix-matrix or matrix-vector multiplication, matrix factorization
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F7/00—Methods or arrangements for processing data by operating upon the order or content of the data handled
- G06F7/38—Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
- G06F7/48—Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
- G06F7/483—Computations with numbers represented by a non-linear combination of denominational numbers, e.g. rational numbers, logarithmic number system or floating-point numbers
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F7/00—Methods or arrangements for processing data by operating upon the order or content of the data handled
- G06F7/38—Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
- G06F7/48—Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
- G06F7/483—Computations with numbers represented by a non-linear combination of denominational numbers, e.g. rational numbers, logarithmic number system or floating-point numbers
- G06F7/485—Adding; Subtracting
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F7/00—Methods or arrangements for processing data by operating upon the order or content of the data handled
- G06F7/38—Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
- G06F7/48—Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
- G06F7/544—Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices for evaluating functions by calculation
- G06F7/5443—Sum of products
Landscapes
- Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Theoretical Computer Science (AREA)
- Mathematical Analysis (AREA)
- Computational Mathematics (AREA)
- Mathematical Optimization (AREA)
- Computing Systems (AREA)
- Pure & Applied Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- Mathematical Physics (AREA)
- Nonlinear Science (AREA)
- Data Mining & Analysis (AREA)
- Computer Hardware Design (AREA)
- Algebra (AREA)
- Databases & Information Systems (AREA)
- Software Systems (AREA)
- Image Processing (AREA)
- Complex Calculations (AREA)
- Advance Control (AREA)
Abstract
【課題】低精度フォーマット計算を使用した浮動小数点計算のエミュレート方法を提供する。
【解決手段】プロセッサには、第1の精度フォーマットでネイティブ浮動小数点演算を提供する浮動小数点ユニット(FPU)と、複数のデータ処理ユニットを有するシストリックアレイハードウェアと、が含まれる。プロセッサは、第1の精度フォーマットで行列乗算演算を実施するためのデータを受信することと、第2の精度フォーマットを有する1または複数の値を使用してエミュレートされた浮動小数点乗算演算を可能にすることと、を含む。第2の精度フォーマットは、第1の精度フォーマットよりも低い精度を有し、エミュレートされた浮動小数点乗算は、シストリックアレイハードウェアの演算を含む。プロセッサはさらに、行列乗算演算のためのエミュレートされた結果を生成する。
【選択図】図27A
【解決手段】プロセッサには、第1の精度フォーマットでネイティブ浮動小数点演算を提供する浮動小数点ユニット(FPU)と、複数のデータ処理ユニットを有するシストリックアレイハードウェアと、が含まれる。プロセッサは、第1の精度フォーマットで行列乗算演算を実施するためのデータを受信することと、第2の精度フォーマットを有する1または複数の値を使用してエミュレートされた浮動小数点乗算演算を可能にすることと、を含む。第2の精度フォーマットは、第1の精度フォーマットよりも低い精度を有し、エミュレートされた浮動小数点乗算は、シストリックアレイハードウェアの演算を含む。プロセッサはさらに、行列乗算演算のためのエミュレートされた結果を生成する。
【選択図】図27A
Description
本開示は、概してデータ処理に関し、より詳細には、汎用グラフィックス処理ユニットによるデータ処理に関する。
現在の並列グラフィックスデータ処理には、例えば、線形補間、テッセレーション(tessellation)、ラスタライゼーション(rasterization)、テクスチャマッピング、深度テストなどのグラフィックスデータに対して特定の演算を実施するために開発されたシステムおよび方法が含まれている。従来、グラフィックスプロセッサでは、グラフィックスデータを処理するために固定機能計算ユニットが使用されていた。しかし、最近では、グラフィックスプロセッサの一部がプログラム可能となっており、かかるプロセッサは、頂点データおよびフラグメントデータを処理するための多種多様な演算をサポートできるようになっている。
性能をさらに向上させるために、グラフィックスプロセッサは、典型的には、パイプライン処理などの処理技術を実装しており、該パイプライン技術は、グラフィックスパイプラインの異なる部分にわたって可能な限り多くのグラフィックスデータを並列に処理する。単一命令多重スレッド(SIMT)アーキテクチャを有する並列グラフィックスプロセッサは、グラフィックスパイプラインにおける並列処理の量を最大化するように設計されている。SIMTアーキテクチャでは、並列スレッドのグループは、処理効率を向上させるために可能な限り頻繁にプログラム命令を同期的に実行しようとする。SIMTアーキテクチャのためのソフトウェアとハードウェアの一般的な概要は、Shane Cook「CUDA Programming Chapter 3」37-51ページ(2013)に記載されている。
グラフィックスデータ処理を含むコンピューティングシステムの演算において、演算には、浮動小数点FMA(融合積和)演算が含まれることが多い。しかし、従来のシステムでは、浮動小数点計算に制限があるため、演算性能が十分でない場合がある。
本発明は、限定ではなく例示として、添付図面の図において説明されているが、同じ参照符号は同じ要素を示し、以下のように構成されている。
実施形態は、データ処理に関し、より詳細には、汎用グラフィックス処理ユニットによるデータ処理に関する。一部の実施形態において、装置、システム、またはプロセスは、低精度フォーマット計算を使用して浮動小数点計算をエミュレートすることによって、データ処理における性能を改善することを提供する。
コンピューティングシステムの演算において、ネイティブ浮動小数点演算は、コンピュータ処理において十分な性能を提供しない場合がある。特に、ネイティブFP32は、可能な最良のSGEMM(単精度浮動汎用行列乗算)性能をもたらさない場合がある。かかる計算に対処する従来の解決策として、性能が低下した計算にFP32を適用すること、または正確度が低下した低精度データを利用することが挙げられる。
このため、計算において十分な正確度を維持しながらシステム性能を改善するために、低精度フォーマットを利用して、SGEMM浮動小数点演算をFP32(浮動小数点(Floating Point)32、単精度浮動小数点フォーマットとも称される)のような高精度表現で効率的にエミュレートする方法に関する課題が存在している。
システム概要
システム概要
図1は、本明細書に記載する実施形態の1または複数の態様を実装するように構成されたコンピューティングシステム100を示すブロック図である。コンピューティングシステム100は、処理サブシステム101を含み、該処理サブシステム101は、1または複数のプロセッサ102と、メモリハブ105を含み得る相互接続経路を介して通信するシステムメモリ104とを有する。メモリハブ105は、チップセットコンポーネント内の別個のコンポーネントであってもよく、または1または複数のプロセッサ102内に統合されてもよい。メモリハブ105は、通信リンク106を介してI/Oサブシステム111と結合する。I/Oサブシステム111は、コンピューティングシステム100が1または複数の入力デバイス108から入力を受信することを可能にするI/Oハブ107を含む。さらに、I/Oハブ107は、1または複数のプロセッサ102に含まれ得るディスプレイコントローラが1または複数のディスプレイデバイス110Aに出力を提供することを可能にし得る。一実施形態では、I/Oハブ107に結合された1または複数のディスプレイデバイス110Aは、ローカルディスプレイデバイス、内部ディスプレイデバイス、または埋め込みディスプレイデバイスを含み得る。
処理サブシステム101は、例えば、バスまたは他の通信リンク113を介してメモリハブ105に結合された1または複数の並列プロセッサ112を含む。通信リンク113は、限定されるものではないが、PCIエクスプレスなどの任意の数の標準ベースの通信リンク技術またはプロトコルのうちの1つであってもよく、またはベンダー固有の通信インターフェースまたは通信ファブリックであってもよい。1または複数の並列プロセッサ112は、計算に焦点を当てた並列またはベクトル処理システムを形成することができ、これには、多数の集積コア(MIC)プロセッサなどの多数の処理コアおよび/または処理クラスタが含まれ得る。例えば、1または複数の並列プロセッサ112は、I/Oハブ107を介して結合された1または複数のディスプレイデバイス110Aのうちの1つにピクセルを出力し得るグラフィックス処理サブシステムを形成する。1または複数の並列プロセッサ112はまた、1または複数のディスプレイデバイス110Bへの直接接続を可能にするディスプレイコントローラおよびディスプレイインターフェース(図示せず)を含み得る。
I/Oサブシステム111内で、システムストレージユニット114は、I/Oハブ107に接続して、コンピューティングシステム100のストレージメカニズムを提供することができる。I/Oスイッチ116を使用して、I/Oハブ107と、プラットフォームに統合され得るネットワークアダプタ118および/または無線ネットワークアダプタ119、ならびに1または複数のアドインデバイス120を介して追加され得る種々の他のデバイスなどの他のコンポーネントとの間の接続を可能にするインターフェースメカニズムを提供することができる。アドインデバイス120はまた、例えば、1または複数の外部グラフィックスプロセッサデバイス、グラフィックスカード、および/またはコンピューティングアクセラレータを含んでもよい。ネットワークアダプタ118は、イーサネット(登録商標)アダプタまたは別の有線ネットワークアダプタであり得る。無線ネットワークアダプタ119は、Wi-Fi(登録商標)、ブルートゥース(登録商標)、近距離無線通信(NFC)、または1または複数の無線を含む他のネットワークデバイスのうちの1または複数を含み得る。
コンピューティングシステム100は、USBまたは他のポート接続、光学ストレージドライブ、ビデオキャプチャデバイスなどを含む、明示的に示されていない他のコンポーネントを含むことができ、これらもまたI/Oハブ107に接続することができる。図1の種々のコンポーネントを相互接続する通信経路は、PCI(周辺コンポーネント相互接続)ベースのプロトコル(例えば、PCI-Express)などの任意の適切なプロトコル、またはNVLink高速相互接続、コンピュ-トエクスプレスリンク(商標)(例えば、CXL(商標))(例えば、CXL.mem)、インフィニティファブリック(IF)、イーサネット(IEEE802.3)、リモートダイレクトメモリアクセス(RDMA)、インフィニバンド、インターネットワイドエリアRDMAプロトコル(iWARP)、伝送制御プロトコル(TCP)、ユーザデータグラムプロトコル(UDP)、クイックUDPインターネット接続(QUIC)、RDMAオーバーコンバージドイーサネット(RoCE)、Intelクイックパス相互接続(QPI)、Intelウルトラパス相互接続(UPI)、Intelオンチップシステムファブリック(IOSF)、オムニパス、ハイパートランスポート、アドバンストマイクロコントローラバスアーキテクチャ(AMBA)相互接続、OpenCAPI、Gen-Z、キャッシュコヒーレント相互接続フォーアクセラレータ(CCIX)、3GPP(登録商標)ロングタームエボリューション(LTE)(4G)、3GPP 5G、およびこれらの変形形態、または当該技術分野で公知の有線または無線相互接続プロトコルなどの任意の他のバスまたはポイントツーポイント通信インターフェースおよび/またはプロトコルを使用して実装することができる。一部の例では、データは、不揮発性メモリエクスプレス(NVMe)オーバーファブリック(NVMe-oF)またはNVMeなどのプロトコルを使用して、仮想化ストレージノードにコピーまたは記憶できる。
1または複数の並列プロセッサ112は、例えばビデオ出力回路を含む、グラフィックスおよびビデオ処理用に最適化された回路を組み込むことができ、グラフィックス処理ユニット(GPU)を構成する。代替的または付加的に、1または複数の並列プロセッサ112は、本明細書でより詳細に説明する基礎となる計算アーキテクチャを保存しながら、汎用処理用に最適化された回路を統合することができる。コンピューティングシステム100のコンポーネントは、単一の集積回路上の1または複数の他のシステム要素と統合することができる。例えば、1または複数の並列プロセッサ112、メモリハブ105、プロセッサ102、およびI/Oハブ107は、システムオンチップ(SoC)集積回路に統合することができる。あるいは、コンピューティングシステム100のコンポーネントを単一のパッケージに統合して、システムインパッケージ(SIP)構成を形成することもできる。一実施形態では、コンピューティングシステム100のコンポーネントの少なくとも一部を、マルチチップモジュール(MCM)に統合することができ、該MCMは、他のマルチチップモジュールと相互接続してモジュールコンピューティングシステムに統合することができる。
本明細書に示すコンピューティングシステム100は例示的なものであり、変形および修正が可能であることが理解されよう。ブリッジの数および配置、プロセッサ102の数、および並列プロセッサ112の数を含む接続トポロジは、必要に応じて修正することができる。例えば、システムメモリ104は、他のデバイスがメモリハブ105およびプロセッサ102を介してシステムメモリ104と通信する一方で、ブリッジを介してではなくプロセッサ102に直接接続することができる。他の代替トポロジでは、並列プロセッサ112は、I/Oハブ107に接続されるか、またはメモリハブ105ではなく、1または複数のプロセッサ102のうちの1つに直接接続される。他の実施形態では、I/Oハブ107およびメモリハブ105は、単一チップに統合されてもよい。プロセッサ102の2つ以上のセットが、並列プロセッサ112の2つ以上のインスタンスと結合することができる複数のソケットを介して取り付けられることも可能である。
本明細書に示される特定のコンポーネントの一部は任意選択であり、コンピューティングシステム100の全ての実装形態に含まれない場合がある。例えば、任意の数のアドインカードまたは周辺機器がサポートされてもよく、または一部のコンポーネントを省略してもよい。さらに、一部のアーキテクチャは、図1に示すものと同様のコンポーネントに対して異なる用語を使用することができる。例えば、一部のアーキテクチャでは、メモリハブ105はノースブリッジと称されてもよく、I/Oハブ107はサウスブリッジと称されてもよい。
図2Aは、並列プロセッサ200を示している。並列プロセッサ200は、本明細書に記載されるように、GPU、GPGPUなどであり得る。並列プロセッサ200の種々のコンポーネントは、プログラマブルプロセッサ、特定用途向け集積回路(ASIC)、またはフィールドプログラマブルゲートアレイ(FPGA)などの1または複数の集積回路デバイスを使用して実装することができる。図示の並列プロセッサ200は、図1に示す並列プロセッサ112のうちの1または複数であってもよい。
並列プロセッサ200は、並列処理ユニット202を含む。並列処理ユニットは、並列処理ユニット202の他のインスタンスを含む他のデバイスとの通信を可能にするI/Oユニット204を含む。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は、コマンドまたは他の作業項目を処理クラスタアレイ212に分散するように構成されたスケジューラ210と結合する。スケジューラ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の部分は、ピクセルシェーディングまたは他のスクリーンスペース演算を実施して、表示用のレンダリングイメージを生成するように構成されてもよい。クラスタ214A~214Nのうちの1または複数によって生成された中間データは、バッファに記憶されて、中間データがさらなる処理のためにクラスタ214A~214N間で伝送されることを可能にし得る。
動作中、処理クラスタアレイ212は、フロントエンド208から処理タスクを定義するコマンドを受信するスケジューラ210を介して実行される処理タスクを受信することができる。グラフィックス処理演算の場合、処理タスクは、処理されるべきデータの指標、例えば表面(パッチ)データ、基本データ、頂点データ、および/またはピクセルデータ、ならびにデータがどのように処理されるべきか(例えばどのプログラムが実行されるべきか)を定義する状態パラメータおよびコマンドを含み得る。スケジューラ210は、タスクに対応するインデックスをフェッチするように構成されてもよく、またはフロントエンド208からインデックスを受信してもよい。フロントエンド208は、入力コマンドバッファ(例えば、バッチバッファ、プッシュバッファなど)によって指定されたワークロードが開始される前に、処理クラスタアレイ212が有効な状態に構成されることを保証するように構成することができる。
並列処理ユニット202の1または複数のインスタンスの各々は、並列プロセッサメモリ222と結合することができる。並列プロセッサメモリ222は、メモリクロスバー216を介してアクセスすることができ、該メモリクロスバー216は、処理クラスタアレイ212およびI/Oユニット204からメモリ要求を受信することができる。メモリクロスバー216は、メモリインターフェース218を介して並列プロセッサメモリ222にアクセスすることができる。メモリインターフェース218は、それぞれが並列プロセッサメモリ222の一部(例えば、メモリユニット)に結合し得る複数のパーティションユニット(例えば、パーティションユニット220A、パーティションユニット220B、またはパーティションユニット220N)を含み得る。パーティションユニット220A~220Nの数は、メモリユニットの数と等しくなるように構成することができ、第1のパーティションユニット220Aが対応する第1のメモリユニット224Aを有し、第2のパーティションユニット220Bが対応する第2のメモリユニット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を有する実施形態の1つにおいて、メモリクロスバー216は、I/Oユニット204と通信するためのメモリインターフェース218への接続、および並列プロセッサメモリ222のローカルインスタンスへの接続を有し、異なる処理クラスタ214A~214N内の処理ユニットが、並列処理ユニット202に対してローカルでないシステムメモリまたは他のメモリと通信することを可能にする。概して、メモリクロスバー216は、例えば、仮想チャネルを使用して、クラスタ214A~214Nとパーティションユニット220A~220Nとの間のトラフィックストリームを分離することができる。
並列処理ユニット202の単一のインスタンスが並列プロセッサ200内に例示されているが、並列処理ユニット202の任意の数のインスタンスを含めることができる。例えば、並列処理ユニット202の複数のインスタンスを単一のアドインカード上に提供することができ、または複数のアドインカードを相互接続することができる。例えば、並列プロセッサ200は、図1のアドインデバイス120などのアドインデバイスであってもよく、これは、1または複数のGPU、1または複数のメモリデバイス、およびデバイス間またはネットワークまたはファブリックインターフェースを含むディスクリートグラフィックスカードなどのグラフィックスカードであってもよい。並列処理ユニット202の異なるインスタンスは、異なるインスタンスが異なる数の処理コア、異なる量のローカル並列プロセッサメモリ、および/または他の構成の相違を有する場合であっても、相互動作するように構成することができる。所望により、並列処理ユニット202の一部のインスタンスは、他のインスタンスに対してより高精度の浮動小数点ユニットを含み得る。並列処理ユニット202または並列プロセッサ200の1または複数のインスタンスを組み込んだシステムは、デスクトップ、ラップトップ、またはハンドヘルドパーソナルコンピュータ、サーバ、ワークステーション、ゲームコンソール、および/または統合システムを含むがこれらに限定されない、種々の構成およびフォームファクタで実装することができる。オーケストレータは、分散されたプロセッサリソース、キャッシュリソース、メモリリソース、ストレージリソース、およびネットワーキングリソースのうちの1または複数を使用して、ワークロード性能のための複合ノードを形成することができる。
図2Bは、パーティションユニット220のブロック図である。パーティションユニット220は、図2Aのパーティションユニット220A~220Nのうちの1つのインスタンスであり得る。図示のように、パーティションユニット220は、L2キャッシュ221と、フレームバッファインターフェース225と、ROP226(ラスタ演算ユニット)とを含む。L2キャッシュ221は、メモリクロスバー216およびROP226から受信したロード動作およびストア動作を実施するように構成された読み出し/書き込みキャッシュである。読み出しミスおよび緊急書き戻し要求は、処理のためにL2キャッシュ221によってフレームバッファインターフェース225に出力される。更新は、処理のためにフレームバッファインターフェース225を介してフレームバッファに送信することもできる。一実施形態では、フレームバッファインターフェース225は、図2Aのメモリユニット224A~224N(例えば、並列プロセッサメモリ222内)などの並列プロセッサメモリ内のメモリユニットのうちの1つとインターフェースする。パーティションユニット220は、付加的または代替的に、メモリコントローラ(図示せず)を介して並列プロセッサメモリ内のメモリユニットのうちの1つとインターフェースすることもできる。
グラフィックスアプリケーションにおいて、ROP226は、ステンシル、zテスト、ブレンドなどのラスタ演算を実施する処理ユニットである。次に、ROP226は、グラフィックスメモリに記憶された処理済みグラフィックスデータを出力する。一部の実施形態では、ROP226は、メモリまたはL2キャッシュ221に書き込まれた深度データまたはカラーデータを圧縮し、メモリまたはL2キャッシュ221から読み出された深度データまたはカラーデータを解凍するための圧縮論理を含むCODEC227を含むかまたはこれと結合する。圧縮論理は、複数の圧縮アルゴリズムのうちの1または複数を利用する無損失圧縮論理であり得る。CODEC227によって実施される圧縮のタイプは、圧縮されるデータの統計的特性に基づいて変化することができる。例えば、一実施形態では、デルタカラー圧縮は、タイル単位で深度データおよびカラーデータに対して実施される。一実施形態では、CODEC227は、機械学習動作に関連する計算データを圧縮および解凍することができる圧縮および解凍論理を含む。CODEC227は、例えば、疎な機械学習動作のために疎行列データを圧縮することができる。CODEC227はまた、疎行列フォーマット(例えば、座標リストエンコード(COO)、圧縮疎行(CSR)、圧縮疎列(CSC)など)でエンコードされた疎行列データを圧縮して、圧縮エンコード疎行列データを生成することができる。圧縮エンコード疎行列データは、処理要素によって処理される前に解凍および/またはデコードすることができ、または処理要素は、処理のために圧縮され、エンコードされ、または圧縮エンコードデータを消費するように構成することができる。
ROP226は、パーティションユニット220内ではなく、各処理クラスタ(例えば、図2Aのクラスタ214A~214N)内に含まれてもよい。かかる実施形態では、ピクセルデータに対する読み出しおよび書き込み要求は、ピクセル断片データの代わりにメモリクロスバー216を介して伝送される。処理されたグラフィックスデータは、図1の1または複数のディスプレイデバイス110のうちの1つなどのディスプレイデバイス上に表示されてもよく、プロセッサ102によるさらなる処理のためにルーティングされてもよく、または図2Aの並列プロセッサ200内の処理エンティティのうちの1つによるさらなる処理のためにルーティングされてもよい。
図2Cは、並列処理ユニット内の処理クラスタ214のブロック図である。例えば、処理クラスタは、図2Aの処理クラスタ214A~214Nのうちの1つのインスタンスである。処理クラスタ214は、多くのスレッドを並列に実行するように構成することができ、「スレッド」という用語は、入力データの特定のセット上で実行する特定のプログラムのインスタンスを指す。所望により、単一命令、複数データ(SIMD)命令発行技術を使用して、複数の独立命令ユニットを提供することなく、多数のスレッドの並列実行をサポートすることができる。あるいは、単一命令、多重スレッド(SIMT)技術を使用して、処理クラスタの各々の中の処理エンジンのセットに命令を発行するように構成された共通命令ユニットを使用して、多数のほぼ同期化されたスレッドの並列実行をサポートすることができる。全ての処理エンジンが典型的に同一の命令を実行する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内のキャッシュメモリ(例えば、レベル1(L1)キャッシュ248)を使用することができる。各グラフィックスマルチプロセッサ234はまた、全ての処理クラスタ214間で共有され、スレッド間でデータを転送するために使用され得るパーティションユニット(例えば、図2Aのパーティションユニット220A~220N)内のレベル2(L2)キャッシュへのアクセスを有する。グラフィックスマルチプロセッサ234はまた、ローカル並列プロセッサメモリおよび/またはシステムメモリのうちの1または複数を含み得るオフチップグローバルメモリにアクセスすることができる。並列処理ユニット202の外部の任意のメモリをグローバルメモリとして使用することができる。処理クラスタ214がグラフィックスマルチプロセッサ234の複数のインスタンスを含む実施形態は、L1キャッシュ248に記憶され得る共通の命令およびデータを共有することができる。
各処理クラスタ214は、仮想アドレスを物理アドレスにマッピングするように構成されたMMU245(メモリ管理ユニット)を含み得る。他の実施形態では、MMU245の1または複数のインスタンスが、図2Aのメモリインターフェース218内に存在してもよい。MMU245は、仮想アドレスをタイルの物理アドレスおよび所望によりキャッシュラインインデックスにマッピングするために使用されるページテーブルエントリ(PTE)のセットを含む。MMU245は、グラフィックスマルチプロセッサ234またはL1キャッシュまたは処理クラスタ214内に存在し得るアドレス変換ルックアサイドバッファ(TLB)またはキャッシュを含み得る。物理アドレスは、パーティションユニット間の効率的な要求インターリーブを可能にするために、表面データアクセスローカリティを分散するように処理される。キャッシュラインインデックスを使用して、キャッシュラインに対する要求がヒットであるかミスであるかを判定することができる。
グラフィックスおよびコンピューティングアプリケーションでは、処理クラスタ214は、各グラフィックスマルチプロセッサ234が、テクスチャマッピング演算、例えばテクスチャサンプル位置の決定、テクスチャデータの読み出し、かつテクスチャデータのフィルタリングを実施するためのテクスチャユニット236に結合されるように構成することができる。テクスチャデータは、内部テクスチャL1キャッシュ(図示せず)から、または一部の実施形態では、グラフィックスマルチプロセッサ234内のL1キャッシュから読み出され、必要に応じて、L2キャッシュ、ローカル並列プロセッサメモリ、またはシステムメモリからフェッチされる。各グラフィックスマルチプロセッサ234は、処理済みタスクをデータクロスバー240に出力し、処理済みタスクを別の処理クラスタ214に提供してさらなる処理を行うか、またはメモリクロスバー216を介して処理済みタスクをL2キャッシュ、ローカル並列プロセッサメモリ、またはシステムメモリに記憶する。preROP242(プレラスタ演算ユニット)は、グラフィックスマルチプロセッサ234からデータを受信し、ROPユニットにデータを送るように構成されており、ROPユニットは、本明細書に記載するようなパーティションユニット(例えば、図2Aのパーティションユニット220A~220N)とともに配置することができる。preROP242ユニットは、カラーブレンドのための最適化を実施し、ピクセルカラーデータを編成し、アドレス変換を実施することができる。
本明細書に記載されるコアアーキテクチャは例示的なものであり、変形および修正が可能であることが理解されよう。任意の数の処理ユニット、例えば、グラフィックスマルチプロセッサ234、テクスチャユニット236、preROP242などを、処理クラスタ214内に含めてもよい。さらに、1つの処理クラスタ214のみが示されているが、本明細書に記載される並列処理ユニットは、処理クラスタ214の任意の数のインスタンスを含み得る。所望により、各処理クラスタ214は、別個の異なる処理ユニット、L1キャッシュ、L2キャッシュなどを使用して、他の処理クラスタ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内の異なる実行ユニットに割り当てられる。命令は、統一アドレス空間内のアドレスを指定することによって、ローカル、共有、またはグローバルアドレス空間のいずれかにアクセスすることができる。アドレスマッピングユニット256を使用して、統一アドレス空間内のアドレスを、ロード/ストアユニット266によってアクセス可能な別個のメモリアドレスに変換することができる。
レジスタファイル258は、グラフィックスマルチプロセッサ234の機能ユニットのためのレジスタセットを提供する。レジスタファイル258は、グラフィックスマルチプロセッサ234の機能ユニット(例えば、GPGPUコア262、ロード/ストアユニット266)のデータ経路に接続されたオペランドのための一時ストレージデバイスを提供する。レジスタファイル258は、各機能ユニットがレジスタファイル258の専用部分を割り振られるように、各機能ユニット間で分割することができる。例えば、レジスタファイル258は、グラフィックスマルチプロセッサ234によって実行される異なるワープに分割されてもよい。
GPGPUコア262はそれぞれ、グラフィックスマルチプロセッサ234の命令を実行するために使用される浮動小数点ユニット(FPU)および/または整数算術論理ユニット(ALU)を含み得る。一部の実装形態では、GPGPUコア262は、テンソルおよび/またはレイトレーシングコア263内に存在し得るハードウェア論理を含み得る。GPGPUコア262は、アーキテクチャが類似していてもよく、またはアーキテクチャが異なっていてもよい。例えば、一実施形態では、GPGPUコア262の第1の部分は単精度FPUおよび整数ALUを含み、GPGPUコアの第2の部分は倍精度FPUを含む。所望により、FPUは、浮動小数点算術演算のためのIEEE754-2008規格を実装するか、または可変精度浮動小数点算術演算を可能にし得る。グラフィックスマルチプロセッサ234は、コピー長方形またはピクセルブレンド演算などの特定の機能を実施するための1または複数の固定機能または特殊機能ユニットをさらに含み得る。GPGPUコアのうちの1または複数は、固定または特殊機能論理を含むこともできる。
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は、ロード/ストアユニット266が共有メモリ270とレジスタファイル258との間でロード動作およびストア動作を実装することを可能にするクロスバー相互接続である。レジスタファイル258は、GPGPUコア262と同じ周波数で動作することができ、したがって、GPGPUコア262とレジスタファイル258との間のデータ転送は非常に低いレイテンシとなる。共有メモリ270は、グラフィックスマルチプロセッサ234内の機能ユニット上で実行するスレッド間の通信を可能にするために使用することができる。キャッシュメモリ272は、例えば、機能ユニットとテクスチャユニット236との間で通信されるテクスチャデータをキャッシュするためのデータキャッシュとして使用することができる。共有メモリ270は、プログラム管理キャッシュとして使用することもできる。共有メモリ270およびキャッシュメモリ272は、データクロスバー240と結合して、処理クラスタの他のコンポーネントとの通信を可能にし得る。GPGPUコア262上で実行するスレッドは、キャッシュメモリ272内に記憶される自動的にキャッシュされたデータに加えて、共有メモリ内にデータをプログラム的に記憶することができる。
図3A~図3Cは、実施形態による追加のグラフィックスマルチプロセッサを示している。図3A~図3Bは、図2Cのグラフィックスマルチプロセッサ234に関連しており、それらのうちの1つの代わりに使用され得るグラフィックスマルチプロセッサ325、350を示している。したがって、本明細書におけるグラフィックスマルチプロセッサ234と組み合わせた任意の特徴の開示は、グラフィックスマルチプロセッサ325、350との対応する組み合わせも開示するが、これに限定されない。図3Cは、グラフィックスマルチプロセッサ325、350に対応するマルチコアグループ365A~365Nに配置されたグラフィックス処理リソースの専用セットを含むグラフィックス処理ユニット(GPU)380を示している。図示のグラフィックスマルチプロセッサ325、350およびマルチコアグループ365A~365Nは、多数の実行スレッドの同時実行が可能なストリーミングマルチプロセッサ(SM)であり得る。
図3Aのグラフィックスマルチプロセッサ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を介してリモートコンポーネントと通信する。例えば、コア336A~336B、337A~337B、および338A~338Bはそれぞれ、相互接続ファブリック327を介して共有メモリ346と通信することができる。相互接続ファブリック327は、コンポーネント間の公平な帯域幅割り振りを保証するために、グラフィックスマルチプロセッサ325内の通信を調停することができる。
図3Bのグラフィックスマルチプロセッサ350は、実行リソース356A~356Dの複数のセットを含み、実行リソースの各セットは、図2Dおよび図3Aに示すように、複数の命令ユニット、レジスタファイル、GPGPUコア、およびロードストアユニットを含む。実行リソース356A~356Dは、命令キャッシュ354および共有メモリ353を共有しながら、テクスチャ演算のためのテクスチャユニット360A~360Dと協調して動作することができる。例えば、実行リソース356A~356Dは、命令キャッシュ354および共有メモリ353、ならびにテクスチャおよび/またはデータキャッシュメモリ358A~358Bの複数のインスタンスを共有することができる。種々のコンポーネントは、図3Aの相互接続ファブリック327と同様の相互接続ファブリック352を介して通信することができる。
当業者は、図1、2A~2D、および3A~3Bに記載されたアーキテクチャが説明的なものであり、本実施形態の範囲を限定するものではないことを理解するであろう。したがって、本明細書に記載される技術は、本明細書に記載される実施形態の範囲から逸脱することなく、1または複数のモバイルアプリケーションプロセッサ、マルチコアCPUを含む1または複数のデスクトップまたはサーバ中央処理装置(CPU)、図2Aの並列処理ユニット202などの1または複数の並列処理ユニット、ならびに1または複数のグラフィックスプロセッサまたは特殊目的処理ユニットを含むがこれらに限定されない、適切に構成された任意の処理ユニット上で実装することができる。
本明細書に記載される並列プロセッサまたはGPGPUは、ホスト/プロセッサコアに通信可能に結合されて、グラフィックス動作、機械学習動作、パターン分析動作、および種々の汎用GPU(GPGPU)機能を加速することができる。GPUは、バスまたは他の相互接続(例えば、PCIe、NVLinkなどの高速相互接続、または他の既知のプロトコル、標準化されたプロトコル、または独自仕様のプロトコル)を介してホストプロセッサ/コアに通信可能に結合されてもよい。他の実施形態では、GPUは、コアと同じパッケージまたはチップ上に統合され、内部プロセッサバス/相互接続(すなわち、パッケージまたはチップの内部)を介してコアに通信可能に結合されてもよい。GPUが接続される方法にかかわらず、プロセッサコアは、作業記述子に含まれるコマンド/命令のシーケンスの形態で作業をGPUに割り振ることができる。次に、GPUは、これらのコマンド/命令を効率的に処理するために専用の回路/論理を使用する。
図3Cは、マルチコアグループ365A~365Nに配置されたグラフィックス処理リソースの専用セットを含むグラフィックス処理ユニット(GPU)380を示している。単一のマルチコアグループ365Aのみの詳細が提供されているが、他のマルチコアグループ365B~365Nは、同一または同様のグラフィックス処理リソースのセットを備えてもよいことが理解されよう。マルチコアグループ365A~365Nに関して説明した詳細は、本明細書に記載した任意のグラフィックスマルチプロセッサ234、325、350にも適用することができる。
図示のように、マルチコアグループ365Aは、グラフィックスコア370のセットと、テンソルコア371のセットと、レイトレーシングコア372のセットとを含み得る。スケジューラ/ディスパッチャ368は、種々のコア370、371、372上で実行するためにグラフィックススレッドをスケジューリングし、ディスパッチする。レジスタファイル369のセットは、グラフィックススレッドを実行するときにコア370、371、372によって使用されるオペランド値を記憶する。これらは、例えば、整数値を記憶する整数レジスタ、浮動小数点値を記憶する浮動小数点レジスタ、パックドデータ要素(整数および/または浮動小数点データ要素)を記憶するベクトルレジスタ、およびテンソル/行列値を記憶するタイルレジスタを含み得る。タイルレジスタは、ベクトルレジスタの組み合わされたセットとして実装することができる。
1または複数の組み合わされたレベル1(L1)キャッシュおよび共有メモリユニット373は、テクスチャデータ、頂点データ、ピクセルデータ、光線データ、バウンディングボリュームデータなどのグラフィックスデータを、各マルチコアグループ365A内にローカルに記憶する。1または複数のテクスチャユニット374を使用して、テクスチャマッピングおよびサンプリングなどのテクスチャリング演算を実施することもできる。マルチコアグループ365A~365Nの全てまたはサブセットによって共有されるレベル2(L2)キャッシュ375は、複数の同時グラフィックススレッドのためのグラフィックスデータおよび/または命令を記憶する。図示のように、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の一実装形態では、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上で実行するようにスケジューリングすることができる。ニューラルネットワークの訓練は、特に、相当数の行列ドット積演算を必要とする。N×N×N行列乗算の内積定式化を処理するために、テンソルコア371は、少なくともNドット積処理要素を含み得る。行列乗算が開始される前に、1つの行列全体がタイルレジスタにロードされ、第2の行列の少なくとも1つの列がNサイクルの各サイクルでロードされる。各サイクルでは、N個のドット積が処理される。
行列要素は、16ビットワード、8ビットバイト(例えば、INT8)および4ビット半バイト(例えば、INT4)を含む特定の実装形態に依存して、異なる精度で記憶され得る。最も効率的な精度が異なるワークロード(例えば、バイトおよび半バイトへの量子化に耐え得る推論ワークロードなど)に使用されることを保証するために、テンソルコア371に対して異なる精度モードを指定することができる。サポートされているフォーマットにはさらに、64ビット浮動小数点(FP64)と、bfloat16フォーマット(例えば、Brain浮動小数点)、すなわち、1つの符号ビット、8つの指数ビット、および8つの仮数ビット(そのうち7つは明示的に記憶される)を有する16ビット浮動小数点フォーマットなどの非IEEE浮動小数点フォーマットと、が含まれる。一実施形態は、FP16(10ビット)の精度を有するFP32(8ビット)の範囲を有する縮小精度テンソル-浮動小数点フォーマット(TF32)に対するサポートを含む。縮小精度TF32演算をFP32入力に対して実施し、FP32よりも高い性能およびFP16よりも精度でFP32出力を生成することができる。
一実施形態では、テンソルコア371は、大多数の値が0である行列に対する疎動作モードをサポートする。テンソルコア371は、疎行列表現(例えば、座標リストエンコード(COO)、圧縮疎行(CSR)、圧縮疎列(CSC)など)でエンコードされる疎入力行列に対するサポートを含む。テンソルコア371はまた、疎行列表現がさらに圧縮され得る場合の圧縮された疎行列表現に対するサポートを含む。圧縮、エンコード、および/または圧縮エンコードされた行列データは、関連する圧縮および/またはエンコードメタデータとともに、テンソルコア371によって読み出され得、非ゼロ値が抽出され得る。例えば、所与の入力行列Aに対して、行列Aの少なくとも一部の圧縮および/またはエンコードされた表現から非ゼロ値をロードすることができる。非ゼロ値に関連付けられたインデックスまたは座標メタデータから決定され得る、非ゼロ値に対する行列A内の位置に基づいて、入力行列B内の対応する値をロードすることができる。実施される演算(例えば、乗算)に応じて、入力行列Bからの値のロードは、対応する値がゼロ値である場合にバイパスされ得る。一実施形態では、乗算演算などの特定の演算に対する値の対は、スケジューラ論理によって事前にスキャンされ得、非ゼロ入力間の演算のみがスケジューリングされる。行列Aおよび行列Bの次元および実施される演算に応じて、出力行列Cは密であってもよく、または疎であってもよい。出力行列Cが疎である場合、テンソルコア371の構成に応じて、出力行列Cは、圧縮フォーマット、疎エンコード、または圧縮疎エンコードで出力され得る。
レイトレーシングコア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)の実行リソースは、他の形態のグラフィックス作業を実施するために解放される。
以下に説明する1つの任意の実施形態では、ハイブリッドラスタライゼーション/レイトレーシングアプローチが使用され、作業がグラフィックスコア370とレイトレーシングコア372との間に分散される。
レイトレーシングコア372(および/または他のコア370、371)は、DispatchRaysコマンドを含むMicrosoft(登録商標)社のDirectX Ray Tracing(DXR)などのレイトレーシング命令セット、ならびに光線生成、最近接ヒット、任意ヒット、およびミスシェーダに対するハードウェアサポートを含むことができ、各オブジェクトに対するシェーダおよびテクスチャの一意のセットの割り当てを可能にする。レイトレーシングコア372、グラフィックスコア370およびテンソルコア371によってサポートされ得る別のレイトレーシングプラットフォームは、Vulkan1.1.85である。しかしながら、本明細書に記載される基本原理は、いかなる特定のレイトレーシングISAにも限定されないことに留意されたい。
概して、種々のコア372、371、370は、光線生成、最近接ヒット、任意ヒット、光線-プリミティブ交差、プリミティブ毎および階層的バウンディングボックス構築、ミス、訪問、および例外のうちの1または複数に対する命令/機能を含むレイトレーシング命令セットをサポートすることができる。より具体的には、好ましい実施形態は、以下の機能のうちの1または複数を実施するためのレイトレーシング命令を含む。
光線生成-光線生成命令は、各ピクセル、サンプル、または他のユーザ定義作業割り当てに対して実行され得る。
最近接ヒット-最近接ヒット命令を実行して、シーン内のプリミティブと光線との最も近い交点を見つけることができる。
任意ヒット-任意ヒット命令は、シーン内の光線とプリミティブとの間の複数の交差を識別し、潜在的には新しい最も近い交点を識別する。
交差-交差命令は、光線-プリミティブ交差テストを実施し、結果を出力する。
プリミティブ毎のバウンディングボックス構築-この命令は、所与のプリミティブまたはプリミティブのグループの周りにバウンディングボックスを構築する(例えば、新しいBVHまたは他のアクセラレーションデータ構造を構築する場合)。
ミス-光線がシーン、またはシーンの指定された領域内の全てのジオメトリを外している(miss)ことを示す。
訪問-光線が通過する子ボリュームを示す。
例外-種々のタイプの例外ハンドラ(例えば、種々のエラー条件で呼び出される)が含まれる。
一実施形態において、レイトレーシングコア372は、光線交差テストに類似した計算技術を使用して加速することができる汎用計算演算を加速するように適合させることができる。シェーダプログラムを、レイトレーシングコアを介して汎用計算演算を実施する低レベル命令および/またはプリミティブにコンパイルすることを可能にする計算フレームワークを提供することができる。レイトレーシングコア372上で実施される計算演算から利益を得ることができる例示的な計算問題として、座標空間内のビーム、波、光線、または粒子の伝播を伴う計算が挙げられる。その伝播に関連する相互作用は、座標空間内のジオメトリまたはメッシュに対して計算できる。例えば、環境を通じた電磁信号伝播に関連する計算は、レイトレーシングコアを介して実行される命令またはプリミティブを使用することによって加速することができる。環境中の物体による信号の回折と反射は、直接レイトレーシングアナロジーとして計算できる。
レイトレーシングコア372を使用して、レイトレーシングに直接類似していない計算を実施することもできる。例えば、レイトレーシングコア372を使用して、メッシュ投影、メッシュ細分割、およびボリュームサンプリング計算を加速することができる。最近傍計算などの一般的な座標空間計算も実施できる。例えば、特定の点の近くにある点のセットは、その点の周囲の座標空間内にバウンディングボックスを定義することによって検出できる。次に、レイトレーシングコア372内のBVHおよび光線プローブ論理を使用して、バウンディングボックス内の点交差のセットを決定することができる。交差は、原点とその原点に対する最近傍を構成する。レイトレーシングコア372を使用して実施される計算は、グラフィックスコア372およびテンソルコア371上で実施される計算と並行して実施することができる。シェーダコンパイラは、計算シェーダまたは他の汎用グラフィックス処理プログラムを、グラフィックスコア370、テンソルコア371、およびレイトレーシングコア372にわたって並列化できる低レベルプリミティブにコンパイルするように構成することができる。
GPUとホストプロセッサ間の相互接続技術
GPUとホストプロセッサ間の相互接続技術
図4Aは、例えば図2Aに示す並列プロセッサ200などの複数のGPU410~413が、高速リンク440A~440D(例えばバス、ポイントツーポイント相互接続など)を介して複数のマルチコアプロセッサ405~406に通信可能に結合された例示的なアーキテクチャを示している。高速リンク440A~440Dは、実装形態に応じて、4GB/s、30GB/s、80GB/s以上の通信スループットをサポートすることができる。限定されるものではないが、PCIe4.0または5.0およびNVLink2.0を含む種々の相互接続プロトコルを使用することができる。しかしながら、本明細書に記載される基本原理は、いかなる特定の通信プロトコルまたはスループットにも限定されない。
GPU410~413のうちの2つ以上は、高速リンク442A~442Bを介して相互接続されてもよく、高速リンク440A~440Dに使用されるものと同じまたは異なるプロトコル/リンクを使用して実装されてもよい。同様に、マルチコアプロセッサ405~406のうちの2つ以上は、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/OptaneまたはNano-Ramなどの不揮発性メモリであってもよい。例えば、メモリのある部分は揮発性メモリであってもよく、別の部分は(例えば、2レベルメモリ(2LM)階層を使用した)不揮発性メモリであってもよい。本明細書に記載されるメモリサブシステムは、JEDEC(電子デバイス技術合同協議会(Joint Electronic Device Engineering Council))によってリリースされたダブルデータレートバージョンなどの多くのメモリ技術と互換性があり得る。
以下に記載されるように、種々のプロセッサ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の一実施形態は、それぞれが独自のL1キャッシュを有する24個のコア、12個の共有L2キャッシュ、および12個の共有L3キャッシュを含む。この実施形態では、L2およびL3キャッシュのうちの1つは、隣接する2つのコアによって共有される。プロセッサ407およびグラフィックスアクセラレータ統合モジュール446は、プロセッサメモリ401~402を含み得るシステムメモリ441に接続する。
コヒーレンシは、コヒーレンスバス464によるコア間通信を介して、種々のキャッシュ462A~462D、456およびシステムメモリ441に記憶されたデータおよび命令に対して維持される。例えば、各キャッシュは、特定のキャッシュラインに対して検出された読み出しまたは書き込みに応答してコヒーレンスバス464を介して通信するために、それに関連付けられたキャッシュコヒーレンシ論理/回路を有してもよい。一実装形態では、キャッシュスヌーピングプロトコルは、キャッシュアクセスをスヌープするためにコヒーレンスバス464上で実装される。キャッシュスヌーピング/コヒーレンシ技術は、当業者によって十分に理解されており、本明細書に記載される基礎原理を不明瞭にすることを避けるために、本明細書に詳細に記載されない。
グラフィックスアクセラレーションモジュール446をコヒーレンスバス464に通信可能に結合し、グラフィックスアクセラレーションモジュール446がコアのピアとしてキャッシュコヒーレンスプロトコルに参加できるようにするプロキシ回路425を提供することができる。特に、インターフェース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およびシステムメモリ441とコヒーレンシを保つことができる。上述したように、これは、キャッシュ438およびメモリ433~434、Mに代わってキャッシュコヒーレンシメカニズムに参加するプロキシ回路425を介して達成することができる(例えば、プロセッサキャッシュ462A~462D、456上のキャッシュラインの修正/アクセスに関連する更新をキャッシュ438に送信し、キャッシュ438から更新を受信する)。
レジスタ445のセットは、グラフィックス処理エンジン431~432、Nによって実行されるスレッドのコンテキストデータを記憶し、コンテキスト管理回路448は、スレッドコンテキストを管理する。例えば、コンテキスト管理回路448は、コンテキストスイッチ中(例えば、第2のスレッドがグラフィックス処理エンジンによって実行され得るように、第1のスレッドが保存されかつ第2のスレッドが復元される場合)に種々のスレッドのコンテキストを保存および復元するための保存および復元動作を実施してもよい。例えば、コンテキストスイッチにおいて、コンテキスト管理回路448は、現在のレジスタ値をメモリ内の指定された領域(例えば、コンテキストポインタによって識別される)に記憶してもよい。次に、これは、コンテキストに戻るときにレジスタ値を復元することができる。割り込み管理回路447は、例えば、システムデバイスから受信された割り込みを受信して処理してもよい。
一実装形態では、グラフィックス処理エンジン431からの仮想/実効アドレスは、MMU439によってシステムメモリ441内の実/物理アドレスに変換される。所望により、アクセラレータ統合回路436は、複数(例えば、4、8、16)のグラフィックスアクセラレータモジュール446および/または他のアクセラレータデバイスをサポートする。グラフィックスアクセラレータモジュール446は、プロセッサ407上で実行される単一のアプリケーション専用であってもよいし、複数のアプリケーション間で共有されてもよい。所望により、グラフィックス処理エンジン431~432、Nのリソースが複数のアプリケーション、仮想機械(VM)、またはコンテナと共有される仮想化グラフィックス実行環境が提供される。リソースは、VMおよび/またはアプリケーションに関連付けられた処理要件および優先順位に基づいて異なるVMおよび/またはアプリケーションに割り振られる「スライス」に細分割されてもよい。VMおよびコンテナは、本明細書において互換的に使用され得る。
仮想機械(VM)は、オペレーティングシステムと1または複数のアプリケーションを実行するソフトウェアである。VMは、仕様、構成ファイル、仮想ディスクファイル、不揮発性ランダムアクセスメモリ(NVRAM)設定ファイル、およびログファイルによって定義でき、ホストコンピューティングプラットフォームの物理リソースによってバックアップされる。VMは、ソフトウェアにインストールされたオペレーティングシステム(OS)またはアプリケーション環境を含むことができ、これは、専用ハードウェアを模倣する。エンドユーザは、専用ハードウェア上で得るであろうエクスペリエンスと同じエクスペリエンスを、仮想機械上で得る。ハイパーバイザと称される特殊なソフトウェアは、PCクライアントまたはサーバのCPU、メモリ、ハードディスク、ネットワーク、およびその他のハードウェアリソースを完全にエミュレートし、仮想機械がリソースを共有できるようにする。ハイパーバイザは、互いに独立した複数の仮想ハードウェアプラットフォームをエミュレートできるため、仮想機械は、基礎となる同じ物理ホスト上でLinux(登録商標)、Windows(登録商標)Server、VMware ESXi、およびその他のオペレーティングシステムを実行できる。
コンテナは、アプリケーション、構成、および依存関係のソフトウェアパッケージであり、アプリケーションがあるコンピューティング環境から別のコンピューティング環境へ確実に実行されるようにすることができる。コンテナは、サーバプラットフォームにインストールされたオペレーティングシステムを共有し、独立したプロセスとして実行することができる。コンテナは、システムツール、ライブラリ、および設定など、ソフトウェアを実行するために必要な全てのものを含むソフトウェアパッケージであり得る。コンテナは、従来のソフトウェアプログラムのようにはインストールされないため、他のソフトウェアおよびオペレーティングシステム自体から独立させることができる。コンテナの独立した性質は、複数の利点を提供する。第1に、コンテナ内のソフトウェアは種々の環境で同じように動作する。例えば、PHPおよびMySQLを含むコンテナは、Linux(登録商標)コンピュータとWindows(登録商標)機械の両方で全く同じように実行できる。第2に、コンテナは、ソフトウェアがホストオペレーティングシステムに影響を与えないので、さらなるセキュリティを提供する。インストールされたアプリケーションはシステム設定を変更し、かつWindowsレジストリなどのリソースを変更し得るが、コンテナはコンテナ内の設定を変更できるのみである。
したがって、アクセラレータ統合回路436は、グラフィックスアクセラレーションモジュール446に対するシステムへのブリッジとして機能し、アドレス変換およびシステムメモリキャッシュサービスを提供する。一実施形態では、ブリッジング機能を容易にするために、アクセラレータ統合回路436は、共有I/O497(例えば、PCIe、USB、またはその他)と、電圧、クロック、性能、熱、およびセキュリティのシステム制御を可能にするハードウェアとを含むこともできる。共有I/O497は、別個の物理的接続を利用してもよく、または高速リンク440を横断してもよい。さらに、アクセラレータ統合回路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/Optane、Samsung Z-NAND、またはNano-Ramなどの不揮発性メモリであってもよい。
高速リンク440上のデータトラフィックを低減するために、バイアス技術を使用して、グラフィックスメモリ433~434、Mに記憶されたデータが、グラフィックス処理エンジン431~432、Nによって最も頻繁に使用され、かつ好ましくはコア460A~460Dによって使用されない(少なくとも頻繁には使用されない)ことになるデータであることを保証することができる。同様に、バイアスメカニズムは、コアによって必要とされる(かつ好ましくは、グラフィックス処理エンジン431~432、Nによっては必要とされない)データを、コアのキャッシュ462A~462D、456およびシステムメモリ441内に保持しようとする。
図4Cに示す変形例によれば、アクセラレータ統合回路436は、プロセッサ407内に統合される。グラフィックス処理エンジン431~432、Nは、高速リンク440を介して、インターフェース437およびインターフェース435(ここでも、任意の形態のバスまたはインターフェースプロトコルを利用することができる)を介して、アクセラレータ統合回路436に直接通信する。アクセラレータ統合回路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は、プロセスハンドルを使用して処理要素を選択する。処理要素は、システムメモリ441に記憶され、本明細書に記載される実効アドレスから実アドレスへの変換技術を使用してアドレス指定可能であり得る。プロセスハンドルは、そのコンテキストをグラフィックス処理エンジン431~432、Nに登録する(すなわち、処理要素リンクリストに処理要素を追加するためにシステムソフトウェアを呼び出す)ときにホストプロセスに提供される実装形態固有の値であってもよい。プロセスハンドルの下位16ビットは、処理要素リンクリスト内の処理要素のオフセットであり得る。
図4Dは、例示的なアクセラレータ統合スライス490を示している。本明細書で使用されるように、「スライス」は、アクセラレータ統合回路436の処理リソースの特定部分を含む。システムメモリ441内のアプリケーション実効アドレス空間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に含まれ得る。一実施形態では、各グラフィックス処理エンジン431~432、Nは、別個のグラフィックスプロセッサデバイスとしてハイパーバイザ496に提示されてもよい。QoS設定は、特定のグラフィックス処理エンジン431~432、Nのクライアントに対して構成することができ、各エンジンのクライアント間のデータ独立を有効にすることができる。ハイパーバイザによって初期化され得る例示的なレジスタを表1に示す。
各WD484は、特定のグラフィックスアクセラレーションモジュール446および/またはグラフィックス処理エンジン431~432、Nに固有であってもよい。これは、グラフィックス処理エンジン431~432、Nがその作業を行うために必要とする全ての情報を含むか、またはアプリケーションが完了すべき作業のコマンドキューをセットアップしたメモリ位置へのポインタであり得る。
図4Eは、共有モデルの追加の所望による詳細を示している。これは、処理要素リスト499が記憶されているハイパーバイザ実アドレス空間498を含む。ハイパーバイザ実アドレス空間498は、オペレーティングシステム495用のグラフィックスアクセラレーションモジュールエンジンを仮想化するハイパーバイザ496を介してアクセス可能である。
共有プログラミングモデルは、システム内のパーティションの全てまたはサブセットからのプロセスの全てまたはサブセットがグラフィックスアクセラレーションモジュール446を使用することを可能にする。グラフィックスアクセラレーションモジュール446が複数のプロセスおよびパーティションによって共有される2つのプログラミングモデル、すなわちタイムスライス共有およびグラフィックスディレクテッド共有が存在する。
このモデルでは、システムハイパーバイザ496は、グラフィックスアクセラレーションモジュール446を所有し、その機能を全てのオペレーティングシステム495に利用可能にする。グラフィックスアクセラレーションモジュール446がシステムハイパーバイザ496による仮想化をサポートするために、グラフィックスアクセラレーションモジュール446は、以下の要件に従うことができる。1)アプリケーションのジョブ要求は自律的でなければならない(すなわち、状態はジョブ間で維持される必要がない)、またはグラフィックスアクセラレーションモジュール446はコンテキスト保存および復元メカニズムを提供しなければならない。2)アプリケーションのジョブ要求は、グラフィックスアクセラレーションモジュール446によって、変換障害を含めて指定された時間内に完了することが保証されるか、またはグラフィックスアクセラレーションモジュール446がジョブの処理をプリエンプトする機能を提供する。3)グラフィックスアクセラレーションモジュール446は、有向共有プログラミングモデルで動作する場合、プロセス間の公平性が保証されなければならない。
共有モデルに対して、アプリケーション480は、グラフィックスアクセラレーションモジュール446タイプ、作業記述子(WD)、権限マスクレジスタ(AMR)値、およびコンテキスト保存/復元エリアポインタ(CSRP)を有するオペレーティングシステム495システム呼び出しを行うことが要求され得る。グラフィックスアクセラレーションモジュール446タイプは、システム呼び出しのターゲット加速機能を記述する。グラフィックスアクセラレーションモジュール446タイプは、システム固有の値であり得る。WDは、グラフィックスアクセラレーションモジュール446のために特別にフォーマットされており、グラフィックスアクセラレーションモジュール446コマンド、ユーザ定義構造体への実効アドレスポインタ、コマンドのキューへの実効アドレスポインタ、またはグラフィックスアクセラレーションモジュール446によって行われる作業を記述する他のデータ構造体の形態であり得る。一実施形態では、AMR値は、現在のプロセスに使用するAMR状態である。オペレーティングシステムに渡される値は、AMRを設定するアプリケーションと同様である。アクセラレータ統合回路436およびグラフィックスアクセラレーションモジュール446の実装形態が、ユーザ権限マスクオーバーライドレジスタ(UAMOR)をサポートしない場合、オペレーティングシステムは、ハイパーバイザ呼び出しにおいてAMRを渡す前に、現在のUAMOR値をAMR値に適用することができる。ハイパーバイザ496は、所望により、AMRを処理要素483に配置する前に、現在の権限マスクオーバーライドレジスタ(AMOR)値を適用することができる。CSRPは、グラフィックスアクセラレーションモジュール446がコンテキスト状態を保存および復元するためのアプリケーションのアドレス空間482内のエリアの実効アドレスを含むレジスタ445のうちの1つであり得る。ジョブ間またはジョブがプリエンプトされたときに状態を保存する必要がない場合、このポインタは任意選択である。コンテキスト保存/復元エリアは、固定システムメモリであり得る。
システム呼び出しを受信すると、オペレーティングシステム495は、アプリケーション480が登録されており、グラフィックスアクセラレーションモジュール446を使用する権限が与えられていることを確認することができる。次いで、オペレーティングシステム495は、表3に示す情報を用いてハイパーバイザ496を呼び出す。
ハイパーバイザ呼び出しを受信すると、ハイパーバイザ496は、オペレーティングシステム495が登録されており、グラフィックスアクセラレーションモジュール446を使用する権限が与えられていることを確認する。次に、ハイパーバイザ496は、処理要素483を、対応するグラフィックスアクセラレーションモジュール446タイプの処理要素リンクリストに入れる。処理要素は、表4に示す情報を含み得る。
ハイパーバイザは、複数のアクセラレータ統合スライス490レジスタ445を初期化することができる。
図4Fに示すように、1つの任意の実装形態では、物理プロセッサメモリ401~402およびGPUメモリ420~423にアクセスするために使用される共通仮想メモリアドレス空間を介してアドレス可能な統合メモリが使用される。この実装形態では、GPU410~413上で実行される動作は、プロセッサメモリ401~402にアクセスするために同じ仮想/実効メモリアドレス空間を利用し、その逆も同様であり、それによってプログラミング可能性を単純化する。仮想/実効アドレス空間の第1の部分はプロセッサメモリ401に割り振られ得、第2の部分は第2のプロセッサメモリ402に割り振られ得、第3の部分はGPUメモリ420に割り振られ得、以下同様である。仮想/実効メモリ空間全体(実効アドレス空間と称されることもある)は、それによって、プロセッサメモリ401~402およびGPUメモリ420~423の各々に分散され得、任意のプロセッサまたはGPUが、そのメモリにマッピングされた仮想アドレスを有する任意の物理メモリにアクセスすることを可能にする。
ホストプロセッサ(例えば、405)のキャッシュとGPU410~413との間のキャッシュコヒーレンスを保証し、特定のタイプのデータが記憶されるべき物理メモリを示すバイアス技術を実装するバイアス/コヒーレンス管理回路494A~494Eが、MMU439A~439Eのうちの1または複数の中に設けられてもよい。バイアス/コヒーレンス管理回路494A~494Eの複数のインスタンスが図4Fに示されているが、バイアス/コヒーレンス回路は、1または複数のホストプロセッサ405のMMU内および/またはアクセラレータ統合回路436内に実装されてもよい。
GPU付属メモリ420~423は、システムメモリの一部としてマッピングされ、共有仮想メモリ(SVM)技術を使用してアクセスされ得るが、完全なシステムキャッシュコヒーレンスに関連する典型的な性能上の欠点を被ることはない。面倒なキャッシュコヒーレンスオーバーヘッドなしにシステムメモリとしてアクセスされるGPU付属メモリ420~423の能力は、GPUオフロードのための有益なオペレーティング環境を提供する。この構成は、従来のI/O DMAデータコピーのオーバーヘッドなしに、ホストプロセッサ405ソフトウェアがオペランドをセットアップし、計算結果にアクセスすることを可能にする。かかる従来のコピーには、ドライバ呼び出し、割り込みおよびメモリマップI/O(MMIO)アクセスが含まれるが、これらは全て単純なメモリアクセスに比べて非効率的である。同時に、キャッシュコヒーレンスオーバーヘッドなしにGPU付属メモリ420~423にアクセスする能力は、オフロードされた計算の実行時間にとって重要であり得る。例えば、実質的なストリーミング書き込みメモリトラフィックを有する場合、キャッシュコヒーレンスオーバーヘッドは、GPU410~413によって見られる有効書き込み帯域幅を大幅に減少させる可能性がある。オペランド設定の効率、結果アクセスの効率、GPU計算の効率は全て、GPUオフロードの有効性を決定する役割を果たす。
GPUバイアスとホストプロセッサバイアスとの間の選択は、バイアストラッカーデータ構造によって駆動することができる。バイアステーブルが使用されてもよく、バイアステーブルは、例えば、GPU付属メモリページ当たり1または2ビットを含むページ-粒状構造(すなわち、メモリページの粒度で制御される)であってもよい。バイアステーブルは、(例えば、バイアステーブルの頻繁に使用された/最近使用されたエントリをキャッシュするために)GPU410~413内のバイアスキャッシュの有無にかかわらず、1または複数のGPU付属メモリ420~423の盗まれたメモリ範囲内で実装することができる。あるいは、バイアステーブル全体を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にアクセスを要求することができ、GPU410は、実装形態に応じて、直ちにアクセスを許可する場合と許可しない場合とがある。したがって、ホストプロセッサ405とGPU410との間の通信を減少させるために、GPUにバイアスされたページがGPUによって要求されるがホストプロセッサ405によって要求されないページであること、およびその逆を保証することが有益である。
グラフィックス処理パイプライン
グラフィックス処理パイプライン
図5は、グラフィックス処理パイプライン500を示している。図2Dのようなグラフィックスマルチプロセッサ234、図3Aのグラフィックスマルチプロセッサ325、図3Bのグラフィックスマルチプロセッサ350などのグラフィックスマルチプロセッサは、図示したグラフィックス処理パイプライン500を実装することができる。グラフィックスマルチプロセッサは、図1の並列プロセッサ112に関連し得、それらの1つの代わりに使用され得る図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)にアクセスすることができる。グラフィックスプロセッサパイプライン500は、図3Cのように、マルチコアグループ365Aを介して実装することもできる。
データアセンブラ502は、表面およびプリミティブのための頂点データを収集することができる処理ユニットである。その場合、データアセンブラ502は、頂点属性を含む頂点データを頂点処理ユニット504に出力する。頂点処理ユニット504は、プログラム可能な実行ユニットであり、頂点シェーダプログラムを実行し、頂点シェーダプログラムによって指定されたように頂点データの点灯および変換を行う。頂点処理ユニット504は、頂点データを処理する際に使用するためにキャッシュメモリ、ローカルメモリまたはシステムメモリに記憶されているデータを読み出し、頂点データをオブジェクトベースの座標表現からワールド空間座標空間または正規化デバイス座標空間に変換するようにプログラムすることができる。
プリミティブアセンブラ506の第1のインスタンスは、頂点処理ユニット504から頂点属性を受信する。プリミティブアセンブラ506は、必要に応じて記憶された頂点属性を読み出し、テッセレーション制御処理ユニット508による処理のためのグラフィックスプリミティブを構築する。グラフィックスプリミティブは、種々のグラフィックス処理アプリケーションプログラミングインターフェース(API)によってサポートされるように、三角形、線分、点、パッチなどを含む。
テッセレーション制御処理ユニット508は、入力された頂点を幾何学的パッチの制御点として扱う。制御点は、パッチからの入力表現(例えば、パッチのベース)から、テッセレーション評価処理ユニット512による表面評価で使用するのに適した表現に変換される。テッセレーション制御処理ユニット508は、幾何学的パッチのエッジに対するテッセレーション係数を算出することもできる。テッセレーション係数は1つのエッジに適用され、そのエッジに関連付けられたビュー依存の細部レベルを定量化する。テッセレーションユニット510は、パッチのエッジに対するテッセレーション係数を受信し、パッチを線、三角形、または四角形プリミティブなどの複数の幾何学的プリミティブにテッセレーションするように構成され、これらの幾何学的プリミティブは、テッセレーション評価処理ユニット512に伝送される。テッセレーション評価処理ユニット512は、細分割パッチのパラメータ化された座標上で動作して、幾何学的プリミティブに関連付けられた各頂点に対する表面表現および頂点属性を生成する。
プリミティブアセンブラ514の第2のインスタンスは、テッセレーション評価処理ユニット512から頂点属性を受信し、記憶された頂点属性を必要に応じて読み出し、ジオメトリ処理ユニット516による処理のためのグラフィックスプリミティブを構築する。ジオメトリ処理ユニット516は、ジオメトリシェーダプログラムを実行して、ジオメトリシェーダプログラムによって指定されるようにプリミティブアセンブラ514から受信されたグラフィックスプリミティブを変換するプログラム可能な実行ユニットである。ジオメトリ処理ユニット516は、グラフィックスプリミティブを1または複数の新しいグラフィックスプリミティブに細分割し、新しいグラフィックスプリミティブをラスタライズするために使用されるパラメータを計算するようにプログラムすることができる。
ジオメトリ処理ユニット516は、ジオメトリストリーム内の要素を追加または削除することができる。ジオメトリ処理ユニット516は、新しいグラフィックスプリミティブを指定するパラメータおよび頂点をプリミティブアセンブラ518に出力する。プリミティブアセンブラ518は、ジオメトリ処理ユニット516からパラメータおよび頂点を受信し、ビューポートスケール、カリングおよびクリップユニット520によって処理するためのグラフィックスプリミティブを構築する。ジオメトリ処理ユニット516は、ジオメトリデータの処理に使用するために、並列プロセッサメモリまたはシステムメモリに記憶されているデータを読み出す。ビューポートスケール、カリングおよびクリップユニット520は、クリッピング、カリングおよびビューポートスケーリングを実施し、処理されたグラフィックスプリミティブをラスタライザ522に出力する。
ラスタライザ522は、深度カリングおよび他の深度ベースの最適化を実施することができる。ラスタライザ522はまた、新しいグラフィックスプリミティブ上でスキャン変換を実施して、フラグメントを生成し、これらのフラグメントおよび関連するカバレッジデータをフラグメント/ピクセル処理ユニット524に出力する。フラグメント/ピクセル処理ユニット524は、フラグメントシェーダプログラムまたはピクセルシェーダプログラムを実行するように構成されたプログラム可能な実行ユニットである。フラグメント/ピクセル処理ユニット524は、フラグメントまたはピクセルシェーダプログラムによって指定されるように、ラスタライザ522から受信されたフラグメントまたはピクセルを変換する。例えば、フラグメント/ピクセル処理ユニット524は、ラスタ演算ユニット526に出力されるシェーディングされたフラグメントまたはピクセルを生成するために、テクスチャマッピング、シェーディング、ブレンド、テクスチャ補正および遠近法補正を含むがこれらに限定されない演算を実施するようにプログラムすることができる。フラグメント/ピクセル処理ユニット524は、フラグメントデータを処理する際に使用するために、並列プロセッサメモリまたはシステムメモリのいずれかに記憶されているデータを読み出すことができる。フラグメントまたはピクセルシェーダプログラムは、処理ユニットに対して構成されたサンプリングレートに依存して、サンプル、ピクセル、タイル、または他の粒度でシェーディングするように構成することができる。
ラスタ演算ユニット526は、ステンシル、zテスト、ブレンドなどを含むがこれらに限定されないラスタ演算を実施する処理ユニットであり、処理されたグラフィックスデータとして、グラフィックスメモリ(例えば、図2Aにおける並列プロセッサメモリ222、および/または図1におけるシステムメモリ104)に記憶するため、1または複数のディスプレイデバイス110上に表示するため、または1または複数のプロセッサ102もしくは並列プロセッサ112のうちの1つによるさらなる処理のためにピクセルデータを出力する。ラスタ演算ユニット526は、メモリに書き込まれたzまたはカラーデータを圧縮し、メモリから読み出されたzまたはカラーデータを解凍するように構成することができる。
機械学習の概要
機械学習の概要
上述のアーキテクチャは、機械学習モデルを使用して訓練および推論動作を実施するために適用することができる。機械学習は多くの種類のタスクを解決するのに成功している。機械学習アルゴリズム(例えば、ニューラルネットワーク)を訓練して使用するときに生じる計算は、自然に効率的な並列実装形態に向いている。したがって、汎用グラフィックス処理ユニット(GPGPU)のような並列プロセッサは、深層ニューラルネットワークの実用的な実装形態において重要な役割を果たしてきた。単一命令多重スレッド(SIMT)アーキテクチャを有する並列グラフィックスプロセッサは、グラフィックスパイプラインにおける並列処理の量を最大化するように設計されている。SIMTアーキテクチャでは、並列スレッドのグループは、処理効率を向上させるために可能な限り頻繁にプログラム命令を同期的に実行しようとする。並列機械学習アルゴリズムの実装形態によって提供される効率性は、大容量ネットワークの使用を可能にし、それらのネットワークをより大きなデータセットで訓練することを可能にする。
機械学習アルゴリズムは、データのセットに基づいて学習できるアルゴリズムである。例えば、機械学習アルゴリズムは、データセット内の高レベルの抽象化をモデル化するように設計することができる。例えば、画像認識アルゴリズムは、所与の入力が複数のカテゴリのどれに属するかを判定するために使用することができ、回帰アルゴリズムは、入力を与えられると数値を出力することができ、パターン認識アルゴリズムは、翻訳されたテキストを生成するために、あるいはテキスト対音声および/または音声認識を実施するために使用することができる。
機械学習アルゴリズムの例示的なタイプは、ニューラルネットワークである。ニューラルネットワークには多くのタイプがあるが、単純なタイプのニューラルネットワークは、フィードフォワードネットワークである。フィードフォワードネットワークは、ノードが層状に配置された非循環グラフとして実装することができる。典型的に、フィードフォワードネットワークトポロジは、少なくとも1つの隠れ層によって分離される入力層および出力層を含む。隠れ層は、入力層によって受信された入力を、出力層において出力を生成するために有用な表現に変換する。ネットワークノードはエッジを介して隣接層のノードに全結合されているが、各層内のノード間にエッジはない。フィードフォワードネットワークの入力層のノードで受信されたデータは、層を接続するエッジの各々にそれぞれ関連付けられた係数(「重み」)に基づいてネットワーク内の連続する各層のノードの状態を計算する活性化関数を介して出力層のノードに伝播(すなわち「フィードフォワード」)される。実行されるアルゴリズムによって表される特定のモデルに応じて、ニューラルネットワークアルゴリズムからの出力は、種々の形態をとることができる。
機械学習アルゴリズムを使用して特定の問題をモデル化することができるようになる前に、アルゴリズムは、訓練データセットを使用して訓練される。ニューラルネットワークを訓練することは、ネットワークトポロジを選択し、ネットワークによってモデル化される問題を表す訓練データのセットを使用し、ネットワークモデルが訓練データセットの全てのインスタンスに対して最小の誤差で実施するまで重みを調整することを含む。例えば、ニューラルネットワークに対する教師あり学習訓練プロセス中に、訓練データセット内のインスタンスを表す入力に応答してネットワークによって生成された出力が、そのインスタンスに対する「正しい」ラベル付き出力と比較され、出力とラベル付き出力との間の差を表す誤差信号が計算され、誤差信号がネットワークの層を介して後方に伝播されるときに、接続に関連する重みがその誤差を最小にするように調整される。ネットワークは、訓練データセットのインスタンスから生成された出力の各々に対する誤差が最小化されたときに「訓練された」とみなされる。
機械学習アルゴリズムの正確度は、アルゴリズムの訓練に使用されるデータセットの品質によって大きく影響される可能性がある。訓練プロセスは、計算集約的であり得、従来の汎用プロセッサ上では相当量の時間を必要とし得る。したがって、並列処理ハードウェアが多くのタイプの機械学習アルゴリズムを訓練するために使用される。これは、ニューラルネットワークにおける係数を調整する際に実施される計算が、自然と並列実装形態に向いているので、ニューラルネットワークの訓練を最適化するために特に有用である。具体的には、多くの機械学習アルゴリズムおよびソフトウェアアプリケーションが、汎用グラフィックス処理デバイス内の並列処理ハードウェアを利用するように適合されている。
図6は、機械学習ソフトウェアスタック600の一般図である。機械学習アプリケーション602は、訓練データセットを使用してニューラルネットワークを訓練するように、または訓練された深層ニューラルネットワークを使用して機械知能を実装するように構成することができる任意の論理である。機械学習アプリケーション602は、展開前にニューラルネットワークを訓練するために使用することができるニューラルネットワークおよび/または特殊ソフトウェアの訓練機能および推論機能を含み得る。機械学習アプリケーション602は、画像認識、マッピングおよび位置特定、自律ナビゲーション、音声合成、医用画像、または言語翻訳を含むがこれらに限定されない任意のタイプの機械知能を実装することができる。例示的な機械学習アプリケーション602は、音声ベースの仮想アシスタント、画像または顔認識アルゴリズム、自律ナビゲーション、および機械学習アプリケーション602によって使用される機械学習モデルを訓練するために使用されるソフトウェアツールを含むが、これらに限定されない。
機械学習アプリケーション602のハードウェアアクセラレーションは、機械学習フレームワーク604を介して可能となり得る。機械学習フレームワーク604は、機械学習プリミティブのライブラリを提供することができる。機械学習プリミティブは、機械学習アルゴリズムによって概して実施される基本動作である。機械学習フレームワーク604がなければ、機械学習アルゴリズムの開発者は、機械学習アルゴリズムに関連する主要な計算論理を作成して最適化することが要求され、次いで、新しい並列プロセッサが開発されるにつれて計算論理を再最適化することが要求される。その代わりに、機械学習アプリケーションは、機械学習フレームワーク604によって提供されるプリミティブを使用して必要な計算を実施するように構成することができる。例示的なプリミティブには、テンソル畳み込み、活性化関数、およびプーリングが含まれ、これらは畳み込みニューラルネットワーク(CNN)を訓練しながら実施される計算演算である。機械学習フレームワーク604はまた、行列およびベクトル演算などの多くの機械学習アルゴリズムによって実装される基本線形代数サブプログラムを実施するためのプリミティブを提供することができる。機械学習フレームワーク604の例には、TensorFlow、TensorRT、PyTorch、MXNet、Caffee、および他の高レベル機械学習フレームワークが含まれるが、これらに限定されない。
機械学習フレームワーク604は、機械学習アプリケーション602から受信した入力データを処理し、計算フレームワーク606への適切な入力を生成することができる。計算フレームワーク606は、GPGPUドライバ608に提供される基礎となる命令を抽象化して、機械学習フレームワーク604がGPGPUハードウェア610を介してハードウェアアクセラレーションを利用できるようにすることができ、機械学習フレームワーク604がGPGPUハードウェア610のアーキテクチャに関する深い知識を有する必要はない。さらに、計算フレームワーク606は、GPGPUハードウェア610の種々のタイプおよび世代にわたって、機械学習フレームワーク604に対するハードウェアアクセラレーションを可能にし得る。例示的な計算フレームワーク606は、CUDA計算フレームワークと、CUDA深層ニューラルネットワーク(cuDNN)ライブラリなどの関連する機械学習ライブラリとを含む。機械学習ソフトウェアスタック600は、マルチGPUおよびマルチノード計算を容易にするための通信ライブラリまたはフレームワークを含むこともできる。
GPGPU機械学習の加速
GPGPU機械学習の加速
図7は、汎用グラフィックス処理ユニット700を示しており、これは、図2Aの並列プロセッサ200または図1の並列プロセッサ112であり得る。汎用処理ユニット(GPGPU)700は、深層ニューラルネットワークの訓練に関連するタイプの計算ワークロードの処理を加速するために、機械学習フレームワークによって提供されるプリミティブのハードウェアアクセラレーションをサポートするように構成することができる。さらに、GPGPU700をGPGPUの他のインスタンスに直接リンクしてマルチGPUクラスタを作成し、特に深層ニューラルネットワークの訓練速度を向上させることもできる。プリミティブは、展開されたニューラルネットワークの推論動作を加速するためにもサポートされている。
GPGPU700は、ホストプロセッサとの接続を可能にするためのホストインターフェース702を含む。ホストインターフェース702は、PCIエクスプレスインターフェースであり得る。しかし、ホストインターフェースは、ベンダー固有の通信インターフェースまたは通信ファブリックであってもよい。GPGPU700は、ホストプロセッサからコマンドを受信し、グローバルスケジューラ704を使用して、これらのコマンドに関連付けられた実行スレッドを処理クラスタ706A~706Hのセットに分散する。処理クラスタ706A~706Hは、キャッシュメモリ708を共有する。キャッシュメモリ708は、処理クラスタ706A~706H内のキャッシュメモリのための高レベルキャッシュとして機能することができる。図示された処理クラスタ706A~706Hは、図2Aにおける処理クラスタ214A~214Nに対応することができる。
GPGPU700は、メモリコントローラ712A~712Bのセットを介して処理クラスタ706A~706Hと結合されたメモリ714A~714Bを含む。メモリ714A~714Bは、種々のタイプのメモリデバイスを含み得、これには、ダイナミックランダムアクセスメモリ(DRAM)またはグラフィックスダブルデータレート(GDDR)メモリを含む同期グラフィックスランダムアクセスメモリ(SGRAM)などのグラフィックスランダムアクセスメモリが含まれる。メモリ714A~714Bはまた、高帯域幅メモリ(HBM)を含むがこれに限定されない3Dスタックメモリを含み得る。
処理クラスタ706A~706Hの各々は、図2Dのグラフィックスマルチプロセッサ234、図3Aのグラフィックスマルチプロセッサ325、図3Bのグラフィックスマルチプロセッサ350などのグラフィックスマルチプロセッサのセットを含むことができ、または図3Cのようなマルチコアグループ365A~365Nを含み得る。計算クラスタのグラフィックスマルチプロセッサには、複数の種類の整数および浮動小数点論理ユニットが含まれており、機械学習計算に適したものも含め、種々の精度で計算演算を実施することができる。例えば、処理クラスタ706A~706Hの各々における浮動小数点ユニットの少なくともサブセットは、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は、PCIエクスプレススイッチデバイスであってもよく、該PCIエクスプレススイッチデバイスは、プロセッサ802をGPGPU806A~806Dのセットと通信し得るPCIエクスプレスバスにプロセッサ802を結合する。複数のGPGPU806A~806Dの各々は、図7のGPGPU700のインスタンスであり得る。GPGPU806A~806Dは、高速ポイントツーポイントGPU対GPUリンク816のセットを介して相互接続することができる。高速GPU間リンクは、図7のようなGPUリンク710などの専用GPUリンクを介してGPGPU806A~806Dの各々に接続することができる。P2P GPUリンク816は、プロセッサ802が接続されているホストインターフェースバス上での通信を必要とすることなく、GPGPU806A~806Dの各々の間の直接通信を可能にする。P2P GPUリンクに向けられたGPU間トラフィックでは、ホストインターフェースバスは、システムメモリアクセスのために、または例えば1または複数のネットワークデバイスを介してマルチGPUコンピューティングシステム800の他のインスタンスと通信するために利用可能なままである。図8において、GPGPU806A~806Dは、ホストインターフェーススイッチ804を介してプロセッサ802に接続しているが、プロセッサ802は、代替的に、P2P GPUリンク816に対する直接サポートを含み、GPGPU806A~806Dに直接接続してもよい。一実施形態では、P2P GPUリンク816は、マルチGPUコンピューティングシステム800が単一の論理GPUとして動作することを可能にする。
機械学習ニューラルネットワークの実装形態
機械学習ニューラルネットワークの実装形態
本明細書に記載されるコンピューティングアーキテクチャは、機械学習のためのニューラルネットワークの訓練および展開に特に適したタイプの並列処理を実施するように構成することができる。ニューラルネットワークはグラフ関係を有する関数のネットワークとして一般化できる。当技術分野でよく知られているように、機械学習で使用される種々のタイプのニューラルネットワークの実装形態がある。ニューラルネットワークのうちの1つの例示的なタイプは、前述のように、フィードフォワードネットワークである。
ニューラルネットワークの第2の例示的なタイプは、畳み込みニューラルネットワーク(CNN)である。CNNは、画像データなどの既知の格子状トポロジを有するデータを処理するための特殊なフィードフォワードニューラルネットワークである。したがって、CNNは、計算ビジョンおよび画像認識アプリケーションに概して使用されるが、音声および言語処理などの他のタイプのパターン認識にも使用することができる。CNN入力層のノードは「フィルタ」(網膜の受容野に刺激された特徴検出器)のセットに編成され、各フィルタセットの出力はネットワークの連続した層のノードに伝播される。CNNに対する計算は、畳み込み数学的演算を各フィルタに適用して、そのフィルタの出力を生成することを含む。畳み込みは、2つの関数によって実施される特殊な種類の数学的演算であり、2つの元の関数のうちの1つの修正バージョンである第3の関数を生成する。畳み込みネットワークの用語では、畳み込みに対する第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)であり、これは
として定義される活性化関数を使用し、活性化が0で閾値化されるようにする。
プーリング段階920は、畳み込み層906の出力を近傍出力の要約統計量に置き換えるプーリング関数を使用する。入力への小さな並進がプールされた出力を変化させないように、プーリング関数を使用してニューラルネットワークに並進不変性を導入することができる。局所変換に対する不変性は、入力データにおける特徴の存在が、特徴の正確な位置よりも重要であるシナリオにおいて有用であり得る。最大プーリング、平均プーリングおよび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の時間ステップにおける初期入力(x1)は、隠れ層1004によって処理することができる。第2の入力(x2)は、初期入力(x1)の処理中に決定された状態情報を使用して、隠れ層1004によって処理することができる。与えられた状態は、
として計算することができる。ここで、
および
はパラメータ行列である。関数
は概して双曲線正接関数(Tanh)または整流関数
の変形例のような非線形性である。しかしながら、隠れ層1004で使用される特定の数学機能は、RNN1000の特定の実装形態の詳細に依存して変化し得る。
説明した基本的なCNNおよびRNNネットワークに加えて、これらのネットワークの変化に対する加速が可能となり得る。RNN変形例の一例は、長短期記憶(LSTM)RNNである。LSTM RNNは、言語の長いシーケンスを処理するために必要となる可能性のある長期依存性を学習することができる。CNNの変形例は、畳み込み深層ブリーフネットワークであり、これはCNNと同様の構造を有し、深層ブリーフネットワークと同様の方法で訓練される。深層ブリーフネットワーク(DBN)は、確率的(ランダム)変数の多層から構成される生成ニューラルネットワークである。DBNは、貪欲な教師なし学習(greedy unsupervised learning)を使用して層毎に訓練することができる。次いで、DBNの学習済みの重みを使用して、ニューラルネットワークに対する重みの最適な初期セットを決定することによって、事前訓練ニューラルネットワークを提供することができる。さらなる実施形態では、強化学習の加速が可能となる。強化学習において、人工エージェントはその環境と相互作用することによって学習する。エージェントは、累算報酬を最大化するために特定の目標を最適化するように構成される。
図11は、深層ニューラルネットワークの訓練および展開を示している。所与のネットワークがタスク用に構築されると、ニューラルネットワークは、訓練データセット1102を使用して訓練される。種々の訓練フレームワーク1104が、訓練プロセスのハードウェアアクセラレーションを可能にするために開発されている。例えば、図6の機械学習フレームワーク604は、訓練フレームワーク1104として構成することができる。訓練フレームワーク1104は、未訓練のニューラルネットワーク1106にフックすることができ、未訓練のニューラルネットを、本明細書に記載される並列処理リソースを使用して訓練し、訓練済みのニューラルネットワーク1108を生成することを可能にする。
訓練プロセスを開始するために、初期重みはランダムに選択されてもよいし、または深層ブリーフネットワークを使用した事前訓練によって選択されてもよい。次に、訓練サイクルは、教師ありの方法または教師なしの方法のいずれかで実施される。
教師あり学習は、訓練データセット1102が入力に対する所望の出力と対になった入力を含む場合、または訓練データセットが既知の出力を有する入力を含み、ニューラルネットワークの出力が手動で段階付けされる場合のように、訓練が媒介動作として実施される学習方法である。ネットワークは、入力を処理し、結果として得られた出力を予想または所望の出力のセットと比較する。次いで、誤差はシステム全体に伝播される。訓練フレームワーク1104を調整して、未訓練のニューラルネットワーク1106を制御する重みを調整することができる。訓練フレームワーク1104は、未訓練のニューラルネットワーク1106が、既知の入力データに基づいて正しい答えを生成するのに適したモデルにどれだけうまく収束しているかを監視するツールを提供することができる。ニューラルネットワークによって生成された出力を改良するためにネットワークの重みが調整されると、訓練プロセスが繰り返し生成する。訓練プロセスは、ニューラルネットワークが訓練済みのニューラルネット1108に関連する統計的に所望の正確度に達するまで継続することができる。次に、訓練済みのニューラルネットワーク1108を展開して、任意の数の機械学習動作を実装し、新規データ1112の入力に基づいて推論結果1114を生成することができる。
教師なし学習は、ネットワークがラベルなしデータを使用して自身を訓練しようとする学習方法である。したがって、教師なし学習では、訓練データセット1102は、関連する出力データなしの入力データを含む。未訓練のニューラルネットワーク1106は、ラベルなし入力内のグルーピングを学習することができ、個々の入力が全体的なデータセットにどのように関連しているかを判定することができる。教師なし訓練を使用して自己組織化マップを生成することができ、自己組織化マップは、データの次元を削減するのに有用な演算を実施できる訓練済みのニューラルネットワーク1108の一種である。教師なし訓練を使用して異常検出を実施することもでき、これにより、データの通常パターンから逸脱した入力データセット内のデータポイントを特定することができる。
教師あり訓練および教師なし訓練の変形形態を使用することもできる。半教師あり学習は、訓練データセット1102において、同じ分散のラベル付きデータとラベルなしデータの混合を含む技術である。増分学習は、モデルをさらに訓練するために入力データが連続的に使用される教師あり学習の変形例である。増分学習により、訓練済みのニューラルネットワーク1108は、初期訓練の間にネットワーク内に注入された知識を忘れることなく、新規データ1112に適合することができる。
教師ありであるか教師なしであるかにかかわらず、特に深層ニューラルネットワークのための訓練プロセスは、単一の計算ノードに対して過度に計算集約的である可能性がある。単一の計算ノードを使用する代わりに、計算ノードの分散ネットワークを使用して、訓練プロセスを加速することができる。
図12Aは、分散学習を示すブロック図である。分散学習は、複数の分散コンピューティングノードを使用して、ニューラルネットワークの教師あり訓練または教師なし訓練を実施する訓練モデルである。分散計算ノードはそれぞれ、1または複数のホストプロセッサと、図7のような高度並列汎用グラフィックス処理ユニット700などの汎用処理ノードのうちの1または複数とを含み得る。図示のように、分散学習は、モデル並列処理1202、データ並列処理1204、またはモデル並列処理とデータ並列処理との組み合わせ1206で実施することができる。
モデル並列処理1202では、分散システム内の異なる計算ノードが、単一ネットワークの異なる部分に対して訓練計算を実施することができる。例えば、ニューラルネットワークの各層は、分散システムの異なる処理ノードによって訓練することができる。モデル並列処理の利点には、特に大きなモデルに拡張する能力が含まれる。ニューラルネットワークの異なる層に関連付けられた計算を分割することは、全ての層の重みが単一の計算ノードのメモリに適合しないような非常に大きなニューラルネットワークの訓練を可能にする。一部の例では、モデル並列処理は、大規模なニューラルネットワークの教師なし訓練を実施する際に特に有用である。
データ並列処理1204では、分散ネットワークの異なるノードはモデルの完全なインスタンスを有し、各ノードはデータの異なる部分を受信する。次に、異なるノードの結果が組み合わされる。データ並列処理に対する異なるアプローチが可能であるが、データ並列訓練アプローチは全て、結果を組み合わせ、各ノード間でモデルパラメータを同期させる技術を必要とする。データを組み合わせるための典型的なアプローチには、パラメータ平均化および更新ベースのデータ並列処理が含まれる。パラメータ平均化は、訓練データのサブセット上で各ノードを訓練し、グローバルパラメータ(例えば、重み、バイアス)を各ノードからのパラメータの平均に設定する。パラメータ平均化では、パラメータデータを維持する中央パラメータサーバを使用する。更新ベースのデータ並列処理は、パラメータをノードからパラメータサーバに転送する代わりに、モデルに対する更新が転送されることを除いて、パラメータ平均化と同様である。
さらに、更新ベースのデータ並列処理は、更新が圧縮されてノード間で転送される分散方式で実施することができる。
組み合わされたモデルおよびデータ並列処理1206は、例えば、各計算ノードが複数のGPUを含む分散システムにおいて実装することができる。各ノードはモデルの完全なインスタンスを有することができ、各ノード内の個別のGPUを使用してモデルの異なる部分を訓練する。
分散型訓練は、単一機械での訓練に比べてオーバーヘッドが増加している。しかしながら、本明細書に記載される並列プロセッサおよびGPGPUはそれぞれ、高帯域幅GPU間データ転送および加速されたリモートデータ同期を可能にする技術を含む、分散型訓練のオーバーヘッドを低減するための種々の技術を実装することができる。
図12Bは、プログラマブルネットワークインターフェース1210およびデータ処理ユニットを示すブロック図である。プログラマブルネットワークインターフェース1210は、分散環境内でネットワークベースの計算タスクを加速するために使用することができるプログラマブルネットワークエンジンである。プログラマブルネットワークインターフェース1210は、ホストインターフェース1270を介してホストシステムと結合することができる。プログラマブルネットワークインターフェース1210は、ホストシステムのCPUまたはGPUに対するネットワークまたはストレージ動作を加速するために使用することができる。ホストシステムは、例えば、図12Aに示すように、分散型訓練を実施するために使用される分散学習システムのノードであり得る。ホストシステムは、データセンタ内のデータセンタノードであってもよい。
一実施形態では、モデルデータを含むリモートストレージへのアクセスは、プログラマブルネットワークインターフェース1210によって加速することができる。例えば、プログラマブルネットワークインターフェース1210は、リモートストレージデバイスをローカルストレージデバイスとしてホストシステムに提示するように構成することができる。プログラマブルネットワークインターフェース1210はまた、ホストシステムのGPUとリモートシステムのGPUとの間で実施されるリモートダイレクトメモリアクセス(RDMA)動作を加速することができる。一実施形態では、プログラマブルネットワークインターフェース1210は、NVME-oFなどのストレージ機能を可能にすることができるが、これに限定されない。プログラマブルネットワークインターフェース1210はまた、ホストシステムに代わってリモートストレージのための暗号化、データ完全性、圧縮、および他の動作を加速することができ、リモートストレージがホストシステムに直接接続されたストレージデバイスのレイテンシに近づくことを可能にする。
プログラマブルネットワークインターフェース1210は、ホストシステムに代わってリソース割り振りおよび管理を実施することもできる。ストレージセキュリティ動作は、プログラマブルネットワークインターフェース1210にオフロードすることができ、リモートストレージリソースの割り振りおよび管理と協調して実施することができる。別様でホストシステムのプロセッサによって実行されることになるリモートストレージへのアクセスを管理するためのネットワークベースの動作は、代わりにプログラマブルネットワークインターフェース1210によって実施することができる。
一実施形態では、ネットワークおよび/またはデータセキュリティ動作は、ホストシステムからプログラマブルネットワークインターフェース1210にオフロードすることができる。データセンタノードに対するデータセンタセキュリティポリシーは、ホストシステムのプロセッサの代わりにプログラマブルネットワークインターフェース1210によって処理することができる。例えば、プログラマブルネットワークインターフェース1210は、ホストシステム上で試みられたネットワークベースの攻撃(例えば、DDoS)を検出し、これを軽減して、攻撃がホストシステムの可用性を損なうことを防止することができる。
プログラマブルネットワークインターフェース1210は、複数のプロセッサコア1222を介してオペレーティングシステムを実行するシステムオンチップ(SoC1220)を含み得る。プロセッサコア1222は、汎用プロセッサ(例えば、CPU)コアを含み得る。一実施形態では、プロセッサコア1222はまた、1または複数のGPUコアを含み得る。SoC1220は、メモリデバイス1240に記憶された命令を実行することができる。ストレージデバイス1250は、ローカルオペレーティングシステムデータを記憶することができる。ストレージデバイス1250およびメモリデバイス1240は、ホストシステムのリモートデータをキャッシュするためにも使用することができる。ネットワークポート1260A~1260Bは、ネットワークまたはファブリックへの接続を可能にし、SoC1220およびホストインターフェース1270を介してホストシステムへのネットワークアクセスを容易にする。プログラマブルネットワークインターフェース1210は、USBインターフェースなどのI/Oインターフェース1275を含むこともできる。I/Oインターフェース1275は、外部デバイスをプログラマブルネットワークインターフェース1210に結合するために、またはデバッグインターフェースとして使用することができる。プログラマブルネットワークインターフェース1210は、ホストデバイス上のソフトウェアがプログラマブルネットワークインターフェース1210および/またはSoC1220を管理および構成できるようにする管理インターフェース1230も含む。一実施形態では、プログラマブルネットワークインターフェース1210はまた、ネットワークポート1260A~1260Bを介して結合されたSoC1220、ホストシステム、またはリモートシステムからの並列計算タスクのオフロードを受け入れるための1または複数のアクセラレータまたはGPU1245を含み得る。
例示的な機械学習アプリケーション
例示的な機械学習アプリケーション
機械学習は、コンピュータビジョン、自律走行およびナビゲーション、音声認識、および言語処理を含むがこれらに限定されない種々の技術的問題を解決するために適用することができる。コンピュータビジョンは、従来、機械学習アプリケーションの最も活発な研究領域の1つである。コンピュータビジョンの応用は、顔の認識など人間の視覚能力を再現することから、視覚能力の新しいカテゴリの作成まで多岐にわたる。例えば、コンピュータビジョンアプリケーションは、ビデオで見える物体に誘起された振動から音波を認識するように構成することができる。並列プロセッサ加速機械学習により、コンピュータビジョンアプリケーションを以前よりも大幅に大きな訓練データセットを使用して訓練することが可能になり、低電力並列プロセッサを使用して推論システムを展開することが可能になる。
並列プロセッサ加速機械学習には、車線および道路標識認識、障害物回避、ナビゲーション、運転制御を含む自律走行アプリケーションがある。加速された機械学習技術は、特定の訓練入力に対する適切な応答を定義するデータセットに基づいて運転モデルを訓練するために使用することができる。本明細書に記載される並列プロセッサは、自律走行ソリューションに使用されるますます複雑になるニューラルネットワークの迅速な訓練を可能にし、自律車両への統合に適したモバイルプラットフォームにおける低電力推論プロセッサの展開を可能にする。
並列プロセッサ加速深層ニューラルネットワークは、自動音声認識(ASR)への機械学習アプローチを可能にしている。ASRは、入力音響シーケンスが与えられた場合に最も可能性の高い言語シーケンスを計算する関数の生成を含む。深層ニューラルネットワークを使用した加速機械学習により、隠れマルコフモデル(HMM)と以前ASRに使用されていたガウス混合モデル(GMM)との置き換えが可能となった。
並列プロセッサ加速機械学習は、自然言語処理を加速するために使用することもできる。自動学習手順は、統計的推論アルゴリズムを利用して、誤ったまたは未知の入力に対してロバストなモデルを生成することができる。例示的な自然言語プロセッサアプリケーションは、人間の言語間の自動機械翻訳を含む。
機械学習に使用される並列処理プラットフォームは、訓練プラットフォームと展開プラットフォームに分けることができる。訓練プラットフォームは概して高度に並列であり、マルチGPUシングルノード訓練とマルチノード、マルチGPU訓練を加速するための最適化が含まれている。訓練に適した例示的な並列プロセッサは、図7の汎用グラフィックス処理ユニット700および図8のマルチGPUコンピューティングシステム800を含む。逆に、展開された機械学習プラットフォームには、概して、カメラ、自律ロボット、自律車両などの製品での使用に適した低電力の並列プロセッサが含まれている。
さらに、機械学習技術を適用して、グラフィックス処理アクティビティを加速または強化することができる。例えば、機械学習モデルは、GPU加速アプリケーションによって生成された出力を認識し、その出力のアップスケールバージョンを生成するように訓練することができる。かかる技術は、ゲームアプリケーション用の高解像度画像の生成を加速するために適用することができる。他の種々のグラフィックスパイプラインアクティビティは、機械学習の使用から利益を受けることができる。例えば、機械学習モデルは、幾何学的モデルの複雑さを増加させるために幾何学的データに対してテッセレーション演算を実施するように訓練することができ、比較的低い細部の幾何構造から精密な細部の幾何構造を自動的に生成することを可能にする。
図13は、訓練済みのモデルを使用して推論を実施するのに適した例示的な推論システムオンチップ(SOC)1300を示している。SOC1300は、メディアプロセッサ1302、ビジョンプロセッサ1304、GPGPU1306、およびマルチコアプロセッサ1308を含む処理コンポーネントを統合することができる。GPGPU1306は、GPGPU700などの、本明細書に記載されるGPGPUであってもよく、マルチコアプロセッサ1308は、マルチコアプロセッサ405~406などの、本明細書に記載されるマルチコアプロセッサであってもよい。SOC1300は、処理コンポーネントの各々によってアクセス可能な共有オンチップデータプールを可能にすることができるオンチップメモリ1305をさらに含み得る。処理コンポーネントは、自律車両および自律ロボットを含む種々の機械学習プラットフォームへの展開を可能にするために、低電力動作用に最適化することができる。例えば、SOC1300の一実装形態は、自律車両用の主制御システムの一部として使用することができる。SOC1300が自律走行車両で使用するように構成されている場合、SOCは展開管轄区域の関連機能安全基準に適合するように設計および構成されている。
動作中、メディアプロセッサ1302およびビジョンプロセッサ1304は、協調して動作して、コンピュータビジョン動作を加速することができる。メディアプロセッサ1302は、複数の高解像度(例えば、4K、8K)ビデオストリームの低レイテンシデコードを可能にし得る。デコードされたビデオストリームは、オンチップメモリ1305内のバッファに書き込むことができる。ビジョンプロセッサ1304は、次いで、訓練済みの画像認識モデルを使用してフレームを処理する準備として、デコードされたビデオを解析し、デコードされたビデオのフレームに対して予備処理演算を実施することができる。例えば、ビジョンプロセッサ1304は、バックエンドモデル計算がGPGPU1306によって実施される一方で、高解像度ビデオデータに対して画像認識を実施するために使用されるCNNに対する畳み込み演算を加速することができる。
マルチコアプロセッサ1308は、メディアプロセッサ1302およびビジョンプロセッサ1304によって実施されるデータ転送および共有メモリ動作のシーケンシングおよび同期化を支援する制御論理を含み得る。マルチコアプロセッサ1308は、GPGPU1306の推論計算能力を利用し得るソフトウェアアプリケーションを実行するアプリケーションプロセッサとしても機能することができる。例えば、ナビゲーションおよび駆動論理の少なくとも一部は、マルチコアプロセッサ1308上で実行されるソフトウェアで実装することができる。かかるソフトウェアは、計算ワークロードをGPGPU1306に直接発行することができ、または計算ワークロードをマルチコアプロセッサ1308に発行することができ、これにより、これらの動作の少なくとも一部をGPGPU1306にオフロードすることができる。
GPGPU1306は、汎用グラフィックス処理ユニット700内の処理クラスタ706A~706Hの低電力構成などの計算クラスタを含み得る。GPGPU1306内の計算クラスタは、訓練済みのニューラルネットワーク上で推論計算を実施するように特に最適化された命令をサポートすることができる。例えば、GPGPU1306は、8ビットおよび4ビット整数ベクトル演算などの低精度計算を実施する命令をサポートすることができる。
追加のシステム概要
追加のシステム概要
図14は、処理システム1400のブロック図である。本明細書の他の図の要素と同一または類似の名称を有する図14の要素は、他の図と同一の要素を記載しており、それと同様の方法で動作または機能することができ、同じコンポーネントを含むことができ、本明細書の他の箇所に記載されているような他のエンティティにリンクすることができるが、これらに限定されるものではない。システム1400は、単一プロセッサデスクトップシステム、マルチプロセッサワークステーションシステム、または多数のプロセッサ1402またはプロセッサコア1407を有するサーバシステムにおいて使用することができる。システム1400は、ローカルエリアネットワークまたはワイドエリアネットワークへの有線接続または無線接続を有するもののインターネット(IoT)デバイス内などのモバイルデバイス、ハンドヘルドデバイス、または埋め込みデバイスで使用するためのシステムオンチップ(SoC)集積回路内に組み込まれた処理プラットフォームであってもよい。
システム1400は、図1のコンポーネントに対応するコンポーネントを有する処理システムであってもよい。例えば、異なる構成において、プロセッサ1402またはプロセッサコア1407は、図1のプロセッサ102に対応してもよい。グラフィックスプロセッサ1408は、図1の並列プロセッサ112に対応してもよい。外部グラフィックスプロセッサ1418は、図1のアドインデバイス120のうちの1つであってもよい。
システム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はまた、外部キャッシュ(例えば、レベル3(L3)キャッシュまたは最終レベルキャッシュ(LLC))(図示せず)を使用し、これは、公知のキャッシュコヒーレンシ技術を使用してプロセッサコア1407間で共有することができる。レジスタファイル1406は、プロセッサ1402にさらに含めることができ、異なるタイプのデータを記憶するための異なるタイプのレジスタ(例えば、整数レジスタ、浮動小数点レジスタ、ステータスレジスタ、および命令ポインタレジスタ)を含み得る。一部のレジスタは汎用レジスタであってもよく、他のレジスタはプロセッサ1402の設計に固有であってもよい。
1または複数のプロセッサ1402は、1または複数のインターフェースバス1410と結合されて、プロセッサ1402とシステム1400内の他のコンポーネントとの間で、アドレス、データ、または制御信号などの通信信号を伝送することができる。インターフェースバス1410は、これらの実施形態の1つにおいて、直接メディアインターフェース(DMI)バスのバージョンなどのプロセッサバスであり得る。しかしながら、プロセッサバスはDMIバスに限定されず、1または複数の周辺コンポーネント相互接続バス(例えば、PCI、PCIエクスプレス)、メモリバス、または他のタイプのインターフェースバスを含み得る。例えば、プロセッサ1402は、統合メモリコントローラ1416およびプラットフォームコントローラハブ1430を含み得る。メモリコントローラ1416は、メモリデバイスとシステム1400の他のコンポーネントとの間の通信を容易にし、プラットフォームコントローラハブ(PCH)1430は、ローカルI/Oバスを介してI/Oデバイスへの接続を提供する。
メモリデバイス1420は、ダイナミックランダムアクセスメモリ(DRAM)デバイス、スタティックランダムアクセスメモリ(SRAM)デバイス、フラッシュメモリデバイス、相変化メモリデバイス、またはプロセスメモリとして機能するのに適した性能を有する他の何らかのメモリデバイスであり得る。メモリデバイス1420は、例えば、システム1400用のシステムメモリとして動作して、1または複数のプロセッサ1402がアプリケーションまたはプロセスを実行するときに使用するデータ1422および命令1421を記憶することができる。メモリコントローラ1416はまた、プロセッサ1402内の1または複数のグラフィックスプロセッサ1408と通信し得る、所望による外部グラフィックスプロセッサ1418と結合して、グラフィックスおよびメディア動作を実施する。一部の実施形態では、グラフィックス、メディア、および/または計算演算は、グラフィックス、メディア、または計算演算の特別なセットを実施するように構成し得るコプロセッサであるアクセラレータ1412によって支援することができる。例えば、アクセラレータ1412は、機械学習または計算演算を最適化するために使用される行列乗算アクセラレータであってもよい。アクセラレータ1412は、グラフィックスプロセッサ1408と協調してレイトレーシング演算を実施するために使用することができるレイトレーシングアクセラレータであり得る。一実施形態では、外部アクセラレータ1419を、アクセラレータ1412の代わりに、またはそれとともに使用することができる。
プロセッサ1402に接続可能なディスプレイデバイス1411が設けられてもよい。ディスプレイデバイス1411は、モバイル電子デバイスまたはラップトップデバイスにおけるような内部ディスプレイデバイス、またはディスプレイインターフェース(例えば、DisplayPortなど)を介して取り付けられた外部ディスプレイデバイスのうちの1または複数であり得る。ディスプレイデバイス1411は、仮想現実(VR)アプリケーションまたは拡張現実(AR)アプリケーションにおいて使用される立体ディスプレイデバイスなどのヘッドマウントディスプレイ(HMD)であり得る。
プラットフォームコントローラハブ1430は、周辺機器が高速I/Oバスを介してメモリデバイス1420およびプロセッサ1402に接続できるようにすることができる。I/O周辺機器は、オーディオコントローラ1446、ネットワークコントローラ1434、ファームウェアインターフェース1428、無線トランシーバ1426、タッチセンサ1425、データストレージデバイス1424(例えば、不揮発性メモリ、揮発性メモリ、ハードディスクドライブ、フラッシュメモリ、NAND、3D NAND、3D XPoint/Optaneなど)を含むが、これらに限定されない。データストレージデバイス1424は、ストレージインターフェース(例えば、SATA)を介して、またはペリフェラルコンポーネント相互接続バス(例えば、PCI、PCIエクスプレス)などの周辺バスを介して接続することができる。タッチセンサ1425は、タッチスクリーンセンサ、圧力センサ、または指紋センサを含み得る。無線トランシーバ1426は、Wi-Fiトランシーバ、ブルートゥーストランシーバ、または3G、4G、5G、またはロングタームエボリューション(LTE)トランシーバなどのモバイルネットワークトランシーバであり得る。ファームウェアインターフェース1428は、システムファームウェアとの通信を可能にし、例えば、統合された拡張可能ファームウェアインターフェース(UEFI)であり得る。ネットワークコントローラ1434は、有線ネットワークへのネットワーク接続を可能にし得る。一部の実施形態では、高性能ネットワークコントローラ(図示せず)がインターフェースバス1410に結合される。オーディオコントローラ1446は、マルチチャネル高品位オーディオコントローラであってもよい。これらの実施形態の一部において、システム1400は、レガシー(例えば、パーソナルシステム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、メモリ、および他の部品などの部品が配置され、熱性能を向上させるように設計された回路基板(「スレッド」)を使用することができる。プロセッサなどの処理コンポーネントはスレッドの上側に位置してもよく、DIMMなどの近傍メモリはスレッドの下側に位置してもよい。この設計によって提供される強化された空気流の結果として、コンポーネントは、典型的なシステムよりも高い周波数および電力レベルで動作し、それによって性能を向上させることができる。さらに、スレッドは、ラック内の電力ケーブルおよびデータ通信ケーブルと盲目的に嵌合するように構成され、それによって、迅速に取り外し、アップグレードし、再設置し、かつ/または交換する能力を高めている。同様に、プロセッサ、アクセラレータ、メモリ、およびデータストレージドライブなどのスレッド上に配置された個々のコンポーネントは、互いに間隔が広くなっているため、容易にアップグレードできるように構成されている。例示的な実施形態では、コンポーネントは、それらの真正性を証明するためのハードウェア証明機能をさらに含む。
データセンタは、イーサネットおよびオムニパスを含む複数の他のネットワークアーキテクチャをサポートする単一のネットワークアーキテクチャ(「ファブリック」)を利用することができる。スレッドは、光ファイバを介してスイッチに結合することができ、光ファイバは、典型的なツイストペアケーブル(例えば、カテゴリ5、カテゴリ5e、カテゴリ6など)より高い帯域幅と低いレイテンシを提供する。高帯域幅、低レイテンシ相互接続およびネットワークアーキテクチャのために、データセンタは、使用中に、メモリ、アクセラレータ(例えば、GPU、グラフィックスアクセラレータ、FPGA、ASIC、ニューラルネットワークおよび/または人工知能アクセラレータなど)、および物理的に分散されたデータストレージドライブなどのリソースをプールし、それらを必要に応じて計算リソース(例えば、プロセッサ)に提供して、計算リソースがプールされたリソースにローカルであるかのようにアクセスできるようにする。
電源または電力源は、システム1400または本明細書に記載される任意のコンポーネントまたはシステムに電圧および/または電流を提供することができる。一例では、電源は、壁コンセントに差し込むためのAC-DC(交流-直流)アダプタを含む。かかるAC電力は、再生可能エネルギー(例えば、太陽電力)電源であり得る。一例では、電源は、外部AC-DCコンバータなどのDC電源を含む。電源または電力源は、充電フィールドへ近接して充電するための無線充電ハードウェアを含むこともできる。電源は、内部バッテリ、交流電源、モーションベース電源、太陽電池電源、または燃料電池電源を含み得る。
図15A~図15Cは、コンピューティングシステムおよびグラフィックスプロセッサを示している。本明細書の他の図の要素と同一または類似の名称を有する図15A~図15Cの要素は、他の図と同一の要素を記載しており、それと同様の方法で動作または機能することができ、同じコンポーネントを含むことができ、本明細書の他の箇所に記載されているような他のエンティティにリンクすることができるが、これらに限定されるものではない。
図15Aは、プロセッサ1500のブロック図であり、プロセッサ1402の1つの変形例であってもよく、それらの1つの代わりに使用されてもよい。したがって、本明細書におけるプロセッサ1500と組み合わせた任意の特徴の開示は、プロセッサ1402との対応する組み合わせも開示するが、これに限定されない。プロセッサ1500は、1または複数のプロセッサコア1502A~1502N、統合メモリコントローラ1514、および統合グラフィックスプロセッサ1508を有することができる。統合グラフィックスプロセッサ1508が除外される場合、プロセッサを含むシステムは、システムチップセット内に、またはシステムバスを介して結合されたグラフィックスプロセッサデバイスを含む。プロセッサ1500は、破線のボックスで表される追加コア1502Nまでの追加コアを含み得る。プロセッサコア1502A~1502Nの各々は、1または複数の内部キャッシュユニット1504A~1504Nを含む。一部の実施形態では、各プロセッサコア1502A~1502Nはまた、1または複数の共有キャッシュユニット1506へのアクセスを有する。内部キャッシュユニット1504A~1504Nおよび共有キャッシュユニット1506は、プロセッサ1500内のキャッシュメモリ階層を表す。キャッシュメモリ階層は、各プロセッサコア内の命令およびデータキャッシュの少なくとも1つのレベルと、レベル2(L2)、レベル3(L3)、レベル4(L4)、または他のレベルのキャッシュなどの共有中間レベルキャッシュの1または複数のレベルとを含むことができ、外部メモリの前の最高レベルのキャッシュはLLCとして分類される。一部の実施形態において、キャッシュコヒーレンシ論理は、種々のキャッシュユニット1506および1504A~1504Nの間のコヒーレンシを維持する。
プロセッサ1500は、1または複数のバスコントローラユニット1516およびシステムエージェントコア1510のセットを含むこともできる。1または複数のバスコントローラユニット1516は、1または複数のPCIまたはPCIエクスプレスバスなどの周辺バスのセットを管理する。システムエージェントコア1510は、種々のプロセッサコンポーネントのための管理機能を提供する。システムエージェントコア1510は、種々の外部メモリデバイス(図示せず)へのアクセスを管理するための1または複数の統合メモリコントローラ1514を含み得る。
例えば、プロセッサコア1502A~1502Nのうちの1または複数は、同時マルチスレッディングのサポートを含んでもよい。システムエージェントコア1510は、マルチスレッド処理中にコア1502A~1502Nを調整し、動作させるためのコンポーネントを含む。システムエージェントコア1510は、プロセッサコア1502A~1502Nおよびグラフィックスプロセッサ1508の電力状態を調整するための論理およびコンポーネントを含む電力制御ユニット(PCU)をさらに含み得る。
プロセッサ1500は、グラフィックス処理演算を実行するためのグラフィックスプロセッサ1508をさらに含み得る。これらの実施形態の一部において、グラフィックスプロセッサ1508は、共有キャッシュユニット1506のセットと、1または複数の統合メモリコントローラ1514を含むシステムエージェントコア1510と結合する。システムエージェントコア1510はまた、1または複数の結合されたディスプレイにグラフィックスプロセッサ出力を駆動するディスプレイコントローラ1511を含んでもよい。ディスプレイコントローラ1511はまた、少なくとも1つの相互接続を介してグラフィックスプロセッサと結合された別個のモジュールであってもよく、またはグラフィックスプロセッサ1508内に統合されてもよい。
リングベース相互接続ユニット1512は、プロセッサ1500の内部コンポーネントを結合するために使用することができる。しかし、ポイントツーポイント相互接続、スイッチ相互接続、または当技術分野で周知の技術を含む他の技術などの代替相互接続ユニットを使用することができる。リングベース相互接続1512を有するこれらの実施形態の一部では、グラフィックスプロセッサ1508は、I/Oリンク1513を介してリングベース相互接続1512と結合する。
例示的なI/Oリンク1513は、複数の種類のI/O相互接続のうちの少なくとも1つを表しており、これには、種々のプロセッサコンポーネントとeDRAMモジュールなどの高性能埋め込みメモリモジュール1518との間の通信を容易にするオンパッケージI/O相互接続が含まれる。所望により、プロセッサコア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のハードウェア論理のブロック図である。コアスライスとも称されるグラフィックスプロセッサコア1519は、モジュールグラフィックスプロセッサ内の1または複数のグラフィックスコアであり得る。グラフィックスプロセッサコア1519は、1つのグラフィックスコアスライスの例であり、本明細書に記載されるグラフィックスプロセッサは、目標電力および性能エンベロープに基づいて複数のグラフィックスコアスライスを含み得る。各グラフィックスプロセッサコア1519は、汎用および固定機能論理のモジュールブロックを含む、サブスライスとも称される複数のサブコア1521A~1521Fと結合された固定機能ブロック1530を含み得る。一構成では、複数のサブコア1521A~1521Fのサブコア(サブスライス)は、図2Dのグラフィックスマルチプロセッサ234、図3Aのグラフィックスマルチプロセッサ325、および/または図3Cのマルチコアグループ365A~365Nのマルチコアグループと等価なアーキテクチャである。
固定機能ブロック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は、サブコア1521~1521F内の論理を計算またはサンプリングする要求を介してメディア動作を実装する。
SoCインターフェース1532は、グラフィックスプロセッサコア1519が、共用最終レベルキャッシュメモリ、システムRAM、および/または埋め込みオンチップまたはオンパッケージDRAMなどのメモリ階層要素を含む、汎用アプリケーションプロセッサコア(例えば、CPU)および/またはSoC内の他のコンポーネントと通信することを可能にし得る。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は、図17の共有機能論理1720(例えば、サンプラ、数値演算、および/またはスレッド間通信論理)に関連付けられた論理ユニットを含むことができ、この論理ユニットは、グラフィックスプロセッサコア1519内の各N個のサブコアによって共有することができる。共有および/またはキャッシュメモリ1536は、グラフィックスプロセッサコア1519内のN個のサブコア1521A~1521Fのセットに対する最終レベルキャッシュとすることができ、また、複数のサブコアによってアクセス可能な共有メモリとして機能することもできる。ジオメトリ/固定機能パイプライン1537は、ジオメトリ/固定機能パイプライン1531の代わりに固定機能ブロック1530内に含めることができ、同一または同様の論理ユニットを含めることができる。
グラフィックスプロセッサコア1519は、グラフィックスプロセッサコア1519によって使用される種々の固定機能加速論理を含み得る追加の固定機能論理1538を含み得る。所望により、追加の固定機能論理1538は、位置のみのシェーディングで使用するための追加のジオメトリパイプラインを含む。位置のみのシェーディングでは、2つのジオメトリパイプラインが存在しており、ジオメトリ/固定機能パイプライン1538、1531内のフルジオメトリパイプラインと、追加の固定機能論理1538内に含めることができる追加ジオメトリパイプラインであるカル(cull)パイプラインとがある。例えば、カルパイプラインは、フルジオメトリパイプラインのトリムダウンバージョンであってもよい。フルパイプラインとカルパイプラインとは、同じアプリケーションの異なるインスタンスを実行することができ、各インスタンスは個別のコンテキストを有する。位置のみのシェーディングでは、破棄された三角形の長いカル実行を非表示にすることができ、これにより、シェーディングをより早く完了することができる。例えば、追加の固定機能論理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は、本明細書に記載する実施形態による、グラフィックスプロセッサ、例えばグラフィックスプロセッサ1508、および/または計算アクセラレータとして構成することができる汎用グラフィックス処理ユニット(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と結合することができ、該定数キャッシュ1567を使用して、GPGPU1570上で実行されるカーネルまたはシェーダプログラムの実行中に変化しないデータである定数データを記憶することができる。定数キャッシュ1567はスカラーデータキャッシュであってもよく、キャッシュされたデータはスカラーレジスタ1562に直接フェッチすることができる。
動作中、1または複数のCPU1546は、アクセス可能なアドレス空間にマッピングされたGPGPU1570内のレジスタまたはメモリにコマンドを書き込むことができる。コマンドプロセッサ1557は、レジスタまたはメモリからコマンドを読み出し、これらのコマンドがGPGPU1570内でどのように処理されるかを判定することができる。次に、スレッドディスパッチャ1558を使用して、計算ユニット1560A~1560Nにスレッドをディスパッチし、これらのコマンドを実施することができる。各計算ユニット1560A~1560Nは、他の計算ユニットから独立してスレッドを実行することができる。さらに、各計算ユニット1560A~1560Nは、条件付き計算のために独立して構成することができ、計算の結果を条件付きでメモリに出力することができる。コマンドプロセッサ1557は、送信されたコマンドが完了したときに、1または複数のCPU1546を中断することができる。
図16A~図16Cは、例えば図15A~図15Cに従って、本明細書に記載される実施形態によって提供される追加のグラフィックスプロセッサおよびコンピューティングアクセラレータアーキテクチャのブロック図を示している。本明細書の他の図の要素と同一または類似の名称を有する図16A~図16Cの要素は、他の図と同一の要素を記載しており、それと同様の方法で動作または機能することができ、同じコンポーネントを含むことができ、本明細書の他の箇所に記載されているような他のエンティティにリンクすることができるが、これらに限定されるものではない。
図16Aは、グラフィックスプロセッサ1600のブロック図であり、これは、個別のグラフィックス処理ユニットであってもよく、または複数の処理コアと統合されたグラフィックスプロセッサであってもよく、あるいはメモリデバイスまたはネットワークインターフェースなどの他の半導体デバイスであってもよいが、これらに限定されない。グラフィックスプロセッサ1600は、グラフィックスプロセッサ1508の変形例であってもよく、グラフィックスプロセッサ1508の代わりに使用されてもよい。したがって、本明細書におけるグラフィックスプロセッサ1508と組み合わせた任意の特徴の開示は、グラフィックスプロセッサ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などのアドバンストビデオコーディング(AVC)フォーマット、アライアンスフォーオープンメディア(AOMedia)VP8、VP9、ならびに米国映画テレビ技術者協会(SMPTE)421M/VC-1、ならびにJPEGなどのジョイントフォトグラフィックエキスパートグループ(JPEG)フォーマットおよびモーションJPEG(MJPEG)フォーマットを含むがこれらに限定されない、1または複数のメディアエンコードフォーマット間で、メディアをエンコード、デコード、またはトランスコードするビデオコーデックエンジン1606を含み得る。
グラフィックスプロセッサ1600は、例えばビット境界ブロック転送を含む2次元(2D)ラスタライザ演算を実施するためのブロック画像転送(BLIT)エンジン1603を含んでもよい。しかし、代替的に、2Dグラフィックス動作は、グラフィックス処理エンジン(GPE)1610の1または複数のコンポーネントを使用して実施されてもよい。一部の実施形態では、GPE1610は、三次元(3D)グラフィックス演算およびメディア動作を含むグラフィックス演算を実施するための計算エンジンである。
GPE1610は、3Dプリミティブ形状(例えば、長方形、三角形など)に作用する処理機能を使用して三次元画像およびシーンをレンダリングするなどの3D演算を実施するための3Dパイプライン1612を含み得る。3Dパイプライン1612は、要素内で種々のタスクを実施し、かつ/または3D/メディアサブシステム1615に実行スレッドを生成するプログラマブルおよび固定機能要素を含む。3Dパイプライン1612は、メディア動作を実施するために使用することができるが、GPE1610の実施形態は、ビデオ後処理および画像強調などのメディア動作を実施するために特に使用されるメディアパイプライン1616も含む。
メディアパイプライン1616は、ビデオコーデックエンジン1606の代わりに、またはそれに置き換えて、ビデオデコード加速、ビデオデインタレース、およびビデオエンコード加速などの1または複数の特殊化されたメディア動作を実施するための固定機能またはプログラマブル論理ユニットを含み得る。メディアパイプライン1616は、3D/メディアサブシステム1615上で実行するためにスレッドを生成させるためのスレッド生成ユニットをさらに含み得る。生成されたスレッドは、3D/メディアサブシステム1615に含まれる1または複数のグラフィックス実行ユニット上でメディア動作のための計算を実施する。
3D/メディアサブシステム1615は、3Dパイプライン1612およびメディアパイプライン1616によって生成されたスレッドを実行するための論理を含み得る。パイプラインは、スレッド実行要求を3D/メディアサブシステム1615に送信することができ、このサブシステムは、利用可能なスレッド実行リソースに対して種々の要求を調停およびディスパッチするためのスレッドディスパッチ論理を含む。実行リソースは、3Dスレッドおよびメディアスレッドを処理するためのグラフィックス実行ユニットのアレイを含む。3D/メディアサブシステム1615は、スレッド命令およびデータのための1または複数の内部キャッシュを含み得る。さらに、3D/メディアサブシステム1615は、スレッド間でデータを共有し、出力データを記憶するために、レジスタおよびアドレス可能メモリを含む共有メモリを含むこともできる。
図16Bは、グラフィックスプロセッサ1620の変形例であるグラフィックスプロセッサ1600を示しており、グラフィックスプロセッサ1600の代わりに使用することができ、逆もまた同様である。したがって、本明細書におけるグラフィックスプロセッサ1600と組み合わせた任意の特徴の開示は、グラフィックスプロセッサ1620との対応する組み合わせも開示するが、これに限定されない。本明細書に記載される実施形態によると、グラフィックスプロセッサ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とオンダイさせることができる高帯域幅メモリ(HBM)モジュールであり得る。メモリデバイス1626A~1626Dは、それぞれのグラフィックスエンジンタイル1610A~1610Dの上に積層させることができる積層メモリデバイスであり得る。各グラフィックスエンジンタイル1610A~1610Dおよび関連するメモリ1626A~1626Dは、図24B~図24Dにさらに詳細に記載されるように、ベースダイまたはベース基板に結合された別個のチップレット上に存在してもよい。
グラフィックスプロセッサ1620は、メモリデバイス1626A~1626Dが、関連するグラフィックスエンジンタイル1610A~1610Dと結合される非均一メモリアクセス(NUMA)システムで構成されてもよい。所与のメモリデバイスは、それが直接接続されているタイル以外のグラフィックスエンジンタイルによってアクセスされてもよい。しかし、メモリデバイス1626A~1626Dへのアクセスレイテンシは、ローカルタイルにアクセスするときに最小にすることができる。一実施形態では、タイル相互接続1623A~1623Fを使用してグラフィックスエンジンタイル1610A~1610D内のキャッシュコントローラ間の通信を可能にするキャッシュコヒーレントNUMA(ccNUMA)システムが有効化され、1つよりも多くのキャッシュが同じメモリ位置を記憶するときに一貫したメモリイメージを維持する。
グラフィックス処理エンジンクラスタ1622は、オンチップまたはオンパッケージファブリック相互接続1624に接続することができる。一実施形態では、ファブリック相互接続1624は、ネットワークプロセッサ、ネットワークオンチップ(NoC)、または他のスイッチングプロセッサを含み、ファブリック相互接続1624が、グラフィックスプロセッサ1620のコンポーネント間でデータパケットをスイッチングするパケットスイッチドファブリック相互接続として動作することを可能にする。ファブリック相互接続1624は、グラフィックスエンジンタイル1610A~1610Dと、ビデオコーデックエンジン1606および1または複数のコピーエンジン1604などのコンポーネントとの間の通信を可能にし得る。コピーエンジン1604を使用して、メモリデバイス1626A~1626Dとグラフィックスプロセッサ1620の外部にあるメモリ(例えば、システムメモリ)との間でデータを移動させることができる。ファブリック相互接続1624はまた、グラフィックスエンジンタイル1610A~1610Dを相互接続するために使用することもできる。グラフィックスプロセッサ1620は、外部ディスプレイデバイス1618との接続を可能にするディスプレイコントローラ1602を所望により含み得る。グラフィックスプロセッサは、グラフィックスアクセラレータまたは計算アクセラレータとして構成することもできる。アクセラレータ構成では、ディスプレイコントローラ1602およびディスプレイデバイス1618は省略されてもよい。
グラフィックスプロセッサ1620は、ホストインターフェース1628を介してホストシステムに接続することができる。ホストインターフェース1628は、グラフィックスプロセッサ1620、システムメモリ、および/または他のシステムコンポーネント間の通信を可能にし得る。ホストインターフェース1628は、例えば、PCIエクスプレスバスまたは別のタイプのホストシステムインターフェースであり得る。例えば、ホストインターフェース1628は、NVLinkまたはNVSwitchインターフェースであってもよい。ホストインターフェース1628およびファブリック相互接続1624は、協調して、グラフィックスプロセッサ1620の複数のインスタンスが単一の論理デバイスとして動作することを可能にし得る。ホストインターフェース1628とファブリック相互接続1624との間の協働によって、個々のグラフィックスエンジンタイル1610A~1610Dを別個の論理グラフィックスデバイスとしてホストシステムに提示することも可能になる。
図16Cは、本明細書に記載される実施形態による、計算アクセラレータ1630を示している。計算アクセラレータ1630は、図16Bのグラフィックスプロセッサ1620とのアーキテクチャ上の類似点を含むことができ、計算加速のために最適化される。計算エンジンクラスタ1632は、並列またはベクトルベースの汎用計算演算用に最適化された実行論理を含む計算エンジンタイル1640A~1640Dのセットを含み得る。一部の実施形態では、計算エンジンタイル1640A~1640Dのうちの1または複数は、メディア加速を実施するための論理を含み得るが、計算エンジンタイル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を介してホストプロセッサおよびメモリに接続することができる。
計算アクセラレータ1630はまた、統合ネットワークインターフェース1642を含み得る。一実施形態では、統合ネットワークインターフェース1642は、ホストシステムのメモリをトラバースするデータを必要とすることなく、計算エンジンクラスタ1632が物理層相互接続1644を介して通信することを可能にするネットワークプロセッサおよびコントローラ論理を含む。一実施形態では、計算エンジンタイル1640A~1640Dのうちの1つは、ネットワークプロセッサ論理によって置き換えられ、物理層相互接続1644を介して伝送かつ受信されるデータは、メモリ1626A~1626Dに直接伝送されてもよく、メモリから直接送信されてもよい。計算アクセラレータ1630の複数のインスタンスは、物理層相互接続1644を介して単一の論理デバイスに結合することができる。あるいは、種々の計算エンジンタイル1640A~1640Dは、別個のネットワークアクセス可能な計算アクセラレータデバイスとして提示されてもよい。
グラフィックス処理エンジン
グラフィックス処理エンジン
図17は、一部の実施形態によるグラフィックスプロセッサのグラフィックス処理エンジン1710のブロック図である。グラフィックス処理エンジン(GPE)1710は、図16Aに示すGPE1610のバージョンであってもよく、図16Bのグラフィックスエンジンタイル1610A~1610Dを表してもよい。本明細書の他の図の要素と同一または類似の名称を有する図17の要素は、他の図と同一の要素を記載しており、それと同様の方法で動作または機能することができ、同じコンポーネントを含むことができ、本明細書の他の箇所に記載されているような他のエンティティにリンクすることができるが、これらに限定されるものではない。例えば、図16Aの3Dパイプライン1612およびメディアパイプライン1616が図17にも示されている。メディアパイプライン1616は、GPE1710の一部の実施形態では任意選択であり、GPE1710内に明示的に含まれなくてもよい。例えば、少なくとも1つの実施形態では、別個のメディアおよび/または画像プロセッサがGPE1710に結合される。
GPE1710は、3Dパイプライン1612および/またはメディアパイプライン1616にコマンドストリームを提供するコマンドストリーマ1703と結合するか、またはこれを含み得る。代替的または付加的に、コマンドストリーマ1703は、統合リターンバッファ1718に直接結合されてもよい。統合リターンバッファ1718は、グラフィックスコアアレイ1714に通信可能に結合することができる。所望により、コマンドストリーマ1703は、システムメモリ、または内部キャッシュメモリおよび共有キャッシュメモリのうちの1または複数であり得るメモリと結合される。コマンドストリーマ1703は、メモリからコマンドを受信し、3Dパイプライン1612および/またはメディアパイプライン1616にコマンドを送信することができる。コマンドは、3Dパイプライン1612およびメディアパイプライン1616のためのコマンドを記憶するリングバッファからフェッチされた命令である。リングバッファは、複数のコマンドのバッチを記憶するバッチコマンドバッファをさらに含み得る。3Dパイプライン1612に対するコマンドは、3Dパイプライン1612に対する頂点およびジオメトリデータおよび/またはメディアパイプライン1616に対する画像データおよびメモリオブジェクトなどのメモリに記憶されたデータへの参照も含むことができるが、これらに限定されない。3Dパイプライン1612およびメディアパイプライン1616は、それぞれのパイプライン内の論理を介して動作を実施することによって、または1または複数の実行スレッドをグラフィックスコアアレイ1714にディスパッチすることによって、コマンドおよびデータを処理する。グラフィックスコアアレイ1714は、グラフィックスコアの1または複数のブロック(例えば、グラフィックスコア1715A、グラフィックスコア1715B)を含むことができ、各ブロックは1または複数のグラフィックスコアを含む。各グラフィックスコアは、グラフィックス実行リソースのセットを含み、これには、グラフィックスおよび計算演算を実施するための汎用およびグラフィックス固有の実行論理、ならびに固定機能テクスチャ処理および/または機械学習および人工知能加速論理が含まれる。
種々の実施形態では、3Dパイプライン1612は、命令を処理し、実行スレッドをグラフィックスコアアレイ1714にディスパッチすることによって、頂点シェーダ、ジオメトリシェーダ、ピクセルシェーダ、フラグメントシェーダ、計算シェーダ、または他のシェーダプログラムなどの1または複数のシェーダプログラムを処理するための固定機能およびプログラマブル論理を含み得る。グラフィックスコアアレイ1714は、これらのシェーダプログラムを処理する際に使用するための実行リソースの統合ブロックを提供する。グラフィックスコアアレイ1714のグラフィックスコア1715A~1715B内の多目的実行論理(例えば、実行ユニット)は、種々の3D APIシェーダ言語に対するサポートを含み、複数のシェーダに関連付けられた複数の同時実行スレッドを実行することができる。
グラフィックスコアアレイ1714は、ビデオおよび/または画像処理などのメディア機能を実施するための実行論理を含み得る。実行ユニットは、グラフィックス処理演算に加えて、並列汎用計算演算を実施するようにプログラム可能な汎用論理を含み得る。汎用論理は、図14のプロセッサコア1407または図15Aのようなコア1502A~1502N内の汎用論理と並列または関連して処理演算を実施することができる。
グラフィックスコアアレイ1714上で実行するスレッドによって生成される出力データは、統合リターンバッファ(URB)1718内のメモリにデータを出力することができる。URB1718は、複数スレッドのデータを記憶することができる。URB1718は、グラフィックスコアアレイ1714上で実行する異なるスレッド間でデータを送信するために使用することができる。URB1718は、さらに、グラフィックスコアアレイ1714上のスレッドと共有機能論理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内で複製することができる。あるいは、共有機能論理1720は、グラフィックスコアアレイ1714内の共有機能論理1716のために除外される。
実行ユニット
実行ユニット
図18A~図18Bは、本明細書に記載される実施形態によるグラフィックスプロセッサコアにおいて採用される処理要素のアレイを含むスレッド実行論理1800を示している。本明細書の他の図の要素と同一または類似の名称を有する図18A~図18Bの要素は、他の図と同一の要素を記載しており、それと同様の方法で動作または機能することができ、同じコンポーネントを含むことができ、本明細書の他の箇所に記載されているような他のエンティティにリンクすることができるが、これらに限定されるものではない。図18A~図18Bは、スレッド実行論理1800の概要を示しており、これは、図15Bの各サブコア1521A~1521Fとともに示されたハードウェア論理を表すことができる。図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は、グラフィックスライブラリ(例えば、Direct3DおよびOpenGL)からのシェーダプログラムが最小の変換で実行されるように、多くの標準3Dグラフィックスシェーダ命令に対するネイティブサポートを含む命令セットをサポートすることができる。実行ユニットは、頂点およびジオメトリ処理(例えば、頂点プログラム、ジオメトリプログラム、頂点シェーダ)、ピクセル処理(例えば、ピクセルシェーダ、フラグメントシェーダ)、および汎用処理(例えば、計算シェーダおよびメディアシェーダ)をサポートする。グラフィックス実行ユニット1808A~1808Nの各々は、マルチ発行単一命令複数データ(SIMD)実行が可能であり、マルチスレッド動作は、より高いレイテンシのメモリアクセスに直面して効率的な実行環境を可能にする。各実行ユニット内の各ハードウェアスレッドは、専用の高帯域幅レジスタファイルおよび関連する独立したスレッド状態を有する。実行は、整数、単精度および倍精度浮動小数点演算、SIMD分岐機能、論理演算、周期演算、およびその他の演算が可能なパイプラインに対して、クロック毎に複数発行される。メモリまたは共有機能のうちの1つからのデータを待機している間、実行ユニット1808A~1808N内の依存関係論理は、要求されたデータが戻されるまで待機中のスレッドをスリープさせる。待機スレッドがスリープしている間、ハードウェアリソースは他のスレッドの処理に充てられる可能性がある。例えば、頂点シェーダ演算に関連する遅延の間、実行ユニットは、ピクセルシェーダ、フラグメントシェーダ、または図21に示す頂点シェーダ2107などの異なる頂点シェーダを含む別の種類のシェーダプログラムに対する演算を実施することができる。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を1つのEUグループに融合することができる。融合EUグループ内の各EUは、別個のSIMDハードウェアスレッドを実行するように構成することができる。融合EU基中のEUの数は、実施形態によって変化し得る。さらに、SIMD8、SIMD16、およびSIMD32を含むがこれらに限定されない種々のSIMD幅をEU毎に実施することができる。各融合グラフィックス実行ユニット1809A~1809Nは、少なくとも2つの実行ユニットを含む。例えば、融合実行ユニット1809Aは、第1のEU1808Aと、第2のEU1808Bと、第1のEU1808Aと第2のEU1808Bに共通のスレッド制御論理1807Aとを含む。スレッド制御論理1807Aは、融合グラフィックス実行ユニット1809A上で実行されるスレッドを制御し、融合実行ユニット1809A~1809N内の各EUが共通命令ポインタレジスタを使用して実行できるようにする。
1または複数の内部命令キャッシュ(例えば、1806)は、実行ユニットに対するスレッド命令をキャッシュするためにスレッド実行論理1800に含まれる。1または複数のデータキャッシュ(例えば、1812)をスレッド実行論理1800に含めて、スレッド実行中にスレッドデータをキャッシュすることができる。実行論理1800上で実行するスレッドは、共有ローカルメモリ1811に明示的に管理されたデータを記憶することもできる。サンプラ1810は、3D演算のためのテクスチャサンプリングおよびメディア動作のためのメディアサンプリングを提供するために含まれてもよい。サンプラ1810は、サンプリングプロセス中にテクスチャまたはメディアデータを処理してから、サンプリングされたデータを実行ユニットに提供するための、特殊なテクスチャまたはメディアサンプリング機能を含み得る。
実行中、グラフィックスおよびメディアパイプラインは、スレッド起動およびディスパッチ論理を介してスレッド実行論理1800にスレッド開始要求を送信する。ジオメトリックオブジェクトのグループが処理され、ピクセルデータにラスタライズされると、シェーダプロセッサ1802内のピクセルプロセッサ論理(例えば、ピクセルシェーダ論理、フラグメントシェーダ論理など)が呼び出されて、出力情報をさらに計算し、結果を出力面(例えば、カラーバッファ、深度バッファ、ステンシルバッファなど)に書き込ませる。ピクセルシェーダまたはフラグメントシェーダは、ラスタライズされたオブジェクトにわたって補間される種々の頂点属性の値を計算できる。次に、シェーダプロセッサ1802内のピクセルプロセッサ論理は、アプリケーションプログラミングインターフェース(API)提供のピクセルまたはフラグメントシェーダプログラムを実行することができる。シェーダプログラムを実行するために、シェーダプロセッサ1802は、スレッドディスパッチャ1804を介して実行ユニット(例えば、1808A)にスレッドをディスパッチする。シェーダプロセッサ1802は、サンプラ1810内のテクスチャサンプリング論理を使用して、メモリ内に記憶されたテクスチャマップ内のテクスチャデータにアクセスすることができる。テクスチャデータおよび入力ジオメトリデータに対する算術演算は、各ジオメトリフラグメントに対するピクセルカラーデータを計算するか、または1または複数のピクセルをさらなる処理から破棄する。
さらに、データポート1814は、グラフィックスプロセッサ出力パイプライン上でのさらなる処理のために、処理されたデータをメモリに出力するために、スレッド実行論理1800にメモリアクセスメカニズムを提供することができる。データポート1814は、データポート1814を介したメモリアクセスのためにデータをキャッシュするために、1または複数のキャッシュメモリ(例えば、データキャッシュ1812)を含むか、またはこれに結合することができる。
所望により、実行論理1800は、レイトレーシング加速機能を提供するレイトレーサ1805も含み得る。レイトレーサ1805は、光線生成のための命令/機能を含むレイトレーシング命令セットをサポートすることができる。レイトレーシング命令セットは、図3Cのレイトレーシングコア372によってサポートされるレイトレーシング命令セットと同様であっても異なっていてもよい。
図18Bは、実行ユニット1808の例示的な内部詳細を示している。グラフィックス実行ユニット1808は、命令フェッチユニット1837と、一般レジスタファイルアレイ(GRF)1824と、アーキテクチャレジスタファイルアレイ(ARF)1826と、スレッドアービタ1822と、送信ユニット1830と、分岐ユニット1832と、SIMD浮動小数点ユニット(FPU)のセット1834と、所望により、専用の整数SIMD型ALUのセット1835とを含み得る。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を示している。本明細書の他の図の要素と同一または類似の名称を有する図19の要素は、他の図と同一の要素を記載しており、それと同様の方法で動作または機能することができ、同じコンポーネントを含むことができ、本明細書の他の箇所に記載されているような他のエンティティにリンクすることができるが、これらに限定されるものではない。実行ユニット1900は、例えば、図16Cにおけるような計算エンジンタイル1640A~1640Dで使用するための計算最適化実行ユニットであってもよいが、かかるものに限定されない。実行ユニット1900はまた、図16Bにおけるように、グラフィックスエンジンタイル1610A~1610Dにおいて使用され得る。実行ユニット1900は、スレッド制御ユニット1901、スレッド状態ユニット1902、命令フェッチ/プリフェッチユニット1903、および命令デコードユニット1904を含み得る。実行ユニット1900は、さらに、実行ユニット内のハードウェアスレッドに割り当てることができるレジスタを記憶するレジスタファイル1906を含み得る。実行ユニット1900は、さらに、送信ユニット1907と分岐ユニット1908とを含み得る。送信ユニット1907および分岐ユニット1908は、図18Bのグラフィックス実行ユニット1808の送信ユニット1830および分岐ユニット1832と同様に動作することができる。
実行ユニット1900はまた、複数の異なるタイプの機能ユニットを含む計算ユニット1910を含み得る。計算ユニット1910はまた、ALU1911、シストリックアレイ1912、および数値演算ユニット1913を含み得る。ALU1911は、算術論理ユニットのアレイを含む。ALU1911は、複数の処理レーンおよびデータチャネルにわたって、また複数のハードウェアおよび/またはソフトウェアスレッドに対して、64ビット、32ビットおよび16ビットの整数および浮動小数点演算を実施するように構成することができる。ALU1911は、整数演算と浮動小数点演算を同時に(例えば、同じクロックサイクル内で)実施することができる。
シストリックアレイ1912は、シストリック方式でベクトルまたは他のデータ並列演算を実施するために使用することができるデータ処理ユニットのW幅およびD深度ネットワークを含む。シストリックアレイ1912は、内積、外積、および汎用行列-行列乗算(GEMM)演算を含む種々の行列演算を実施するように構成することができる。シストリックアレイ1912は、16ビット浮動小数点演算、ならびに8ビット、4ビット、2ビットおよびバイナリ整数演算をサポートすることができる。シストリックアレイ1912は、機械学習動作を加速するように構成することができる。シストリックアレイ1912は、米国電気電子技術者協会(IEEE)754フォーマットに対して異なる数の仮数および指数ビットを有するbfloat16(ブレーン浮動小数点)16ビット浮動小数点フォーマットまたはテンソル浮動小数点32ビット浮動小数点フォーマット(TF32)をサポートするように構成することができる。FP64フォーマットもサポートされる。
一実施形態では、シストリックアレイ1912は、疎行列演算を加速するハードウェアを含む。入力データの疎領域に対する乗算演算は、スループットを犠牲にすることなくバイパスすることができる。入力行列内のブロック疎性を検出することができ、既知の出力値を有する演算をバイパスすることができる。一実施形態では、シストリックアレイ1912は、圧縮された表現を有する疎データに対する演算を可能にするハードウェアを含む。疎行列の圧縮表現は、非ゼロ値と、行列内の非ゼロ値の位置を定義するメタデータを記憶する。例示的な圧縮表現には、圧縮疎行(CSR)表現、圧縮疎列(CSC)表現、圧縮疎ファイバ(CSF)表現などの圧縮テンソル表現が含まれるが、これらに限定されない。圧縮表現のサポートにより、圧縮表現を解凍またはデコードすることを必要とせずに、圧縮テンソルフォーマットの入力に対して演算を実施することが可能になる。かかる実施形態では、演算は非ゼロ入力値に対してのみ実施することができ、結果として得られる非ゼロ出力値は出力行列にマッピングすることができる。一部の実施形態では、ハードウェア内またはシステムバスを介してデータを伝送するときに使用される機械固有のロスレスデータ圧縮フォーマットに対してもハードウェアサポートが提供される。かかるデータは、疎入力データ用の圧縮フォーマットで保持されてもよく、シストリックアレイ1912は、非ゼロ値に対してのみ演算を実施することを可能にするため、またはゼロデータ入力のブロックが乗算演算用にバイパスされることを可能にするために、圧縮データ用の圧縮メタデータを使用することができる。
数値演算ユニット1913は、ALUユニット1911よりも効率的かつ低電力の方法で数学的演算の特定のサブセットを実施するように構成することができる。数値演算ユニット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を示すブロック図である。グラフィックスプロセッサ実行ユニットは、複数のフォーマットの命令を有する命令セットをサポートする。実線のボックスは、概して実行ユニット命令に含まれるコンポーネントを示し、破線は、所望によるコンポーネント、または命令のサブセットにのみ含まれるコンポーネントを含む。一部の実施形態では、説明および図示したグラフィックスプロセッサ命令フォーマット2000はマクロ命令であり、実行ユニットに供給される命令であり、命令が処理された後に命令デコードから生じるマイクロ動作とは対照的である。したがって、単一の命令は、ハードウェアに複数のマイクロ動作を実施させることができる。
本明細書に記載されるグラフィックスプロセッサ実行ユニットは、128ビット命令フォーマット2010の命令をネイティブにサポートすることができる。64ビット圧縮命令フォーマット2030は、選択された命令、命令オプション、およびオペランドの数に基づいて一部の命令に対して利用可能である。ネイティブな128ビット命令フォーマット2010は、全ての命令オプションへのアクセスを提供するが、一部のオプションおよび動作は64ビットフォーマット2030で制限される。64ビットフォーマット2030で利用可能なネイティブ命令は、実施形態によって変化する。命令は、インデックスフィールド2013内のインデックス値のセットを使用して部分的に圧縮される。実行ユニットハードウェアは、インデックス値に基づいて圧縮テーブルのセットを参照し、圧縮テーブル出力を使用して、128ビット命令フォーマット2010でネイティブ命令を再構成する。命令の他のサイズおよびフォーマットを使用することができる。
各フォーマットに対して、命令オペコード2012は、実行ユニットが実施すべき動作を定義する。実行ユニットは、各オペランドの複数のデータ要素にわたって各命令を並列に実行する。例えば、加算命令に応答して、実行ユニットは、テクスチャ要素またはピクチャ要素を表す各カラーチャネルにわたって同時加算演算を実施する。デフォルトでは、実行ユニットはオペランドの全てのデータチャネルにわたって各命令を実施する。命令制御フィールド2014は、チャネル選択(例えば、プレディケーション)およびデータチャネル順序(例えば、スウィズル)などの特定の実行オプションに対する制御を可能にし得る。128ビット命令フォーマット2010内の命令に対して、exec-sizeフィールド2016は、並列に実行されるデータチャネルの数を制限する。exec-sizeフィールド2016は、64ビットコンパクト命令フォーマット2030で使用するために利用可能でない場合がある。
一部の実行ユニット命令は、2つのソースオペランドsrc0 2020、src1 2022、および1つの宛先オペランド(dest 2018)を含む最大3つのオペランドを有する。例えば、データ操作命令、ドット積命令、積和命令、または乗累算命令などの他の命令は、第3のソースオペランド(例えば、SRC2 2024)を有することができる。命令オペコード2012は、ソースオペランドの数を決定する。命令の最後のソースオペランドは、命令とともに渡される即時(例えば、ハードコードされた)値であり得る。実行ユニットは、複数の宛先命令をサポートすることもでき、宛先のうちの1または複数は、命令および/または指定された宛先に基づいて黙示的または暗黙的である。
128ビット命令フォーマット2010は、例えば、直接レジスタアドレス指定モードまたは間接レジスタアドレス指定モードのどちらが使用されるかを指定するアクセス/アドレスモードフィールド2026を含み得る。直接レジスタアドレス指定モードが使用される場合、1または複数のオペランドのレジスタアドレスは、命令内のビットによって直接提供される。
128ビット命令フォーマット2010はまた、命令のアドレスモードおよび/またはアクセスモードを指定するアクセス/アドレスモードフィールド2026を含み得る。アクセスモードを使用して、命令に対するデータアクセスアライメントを定義することができる。16バイトアライメントアクセスモードおよび1バイトアライメントアクセスモードを含むアクセスモードをサポートすることができ、アクセスモードのバイトアライメントが命令オペランドのアクセスアライメントを決定する。例えば、第1のモードでは、命令は、ソースオペランドおよび宛先オペランドに対してバイトアライメントアドレス指定を使用することができ、第2のモードでは、命令は、全てのソースオペランドおよび宛先オペランドに対して16バイトアライメントアドレス指定を使用することができる。
アクセス/アドレスモードフィールド2026のアドレスモード部分は、命令が直接アドレス指定を使用するか間接アドレス指定を使用するかを判定することができる。直接レジスタアドレス指定モードが使用される場合、命令内のビットは、1または複数のオペランドのレジスタアドレスを直接提供する。間接レジスタアドレス指定モードが使用される場合、1または複数のオペランドのレジスタアドレスは、命令内のアドレスレジスタ値およびアドレス即値フィールドに基づいて計算することができる。
命令は、オペコードデコード2040を単純化するために、オペコード2012ビットフィールドに基づいてグループ化されてもよい。8ビットのオペコードに対して、ビット4、5、および6は、実行ユニットがオペコードのタイプを決定することを可能にする。示された正確なオペコードのグループ化は単なる例である。移動および論理オペコードグループ2042は、データ移動および論理命令(例えば、move(mov)、compare(cmp))を含み得る。移動および論理グループ2042は、5つの最下位ビット(LSB)を共有することができ、ここで、移動(mov)命令は0000xxxxbの形態であり、論理命令は0001xxxxbの形態である。フロー制御命令グループ2044(例えば、call、jump(jmp))は、0010xxxxb(例えば、0x20)の形式の命令を含む。その他の命令グループ2046は、0011xxxxb(例えば、0x30)の形式の同期命令(例えば、待機、送信)を含む命令の混合を含む。並列数値演算命令群2048は、0100xxxxb(例えば、0x40)の形式のコンポーネント単位の算術命令(例えば、add、multiply(mul))を含む。並列数値演算命令群2048は、データチャネルにわたって並列に算術演算を実施する。ベクトル数値演算グループ2050は、0101xxxxb(例えば0x50)の形式の算術命令(例えばdp4)を含む。ベクトル数値演算グループでは、ベクトルオペランドの内積計算などの算術演算を行う。図示されたオペコードデコード2040は、一実施形態において、実行ユニットのどの部分がデコードされた命令を実行するために使用されるかを判定するために使用することができる。例えば、一部の命令は、シストリックアレイによって実施されるシストリック命令として指定することができる。レイトレーシング命令(図示せず)などの他の命令は、実行論理のスライスまたはパーティション内のレイトレーシングコアまたはレイトレーシング論理にルーティングすることができる。
グラフィックスパイプライン
グラフィックスパイプライン
図21は、別の実施形態による、グラフィックスプロセッサ2100のブロック図である。本明細書の他の図の要素と同一または類似の名称を有する図21の要素は、他の図と同一の要素を記載しており、それと同様の方法で動作または機能することができ、同じコンポーネントを含むことができ、本明細書の他の箇所に記載されているような他のエンティティにリンクすることができるが、これらに限定されるものではない。
グラフィックスプロセッサ2100は、ジオメトリパイプライン2120、メディアパイプライン2130、ディスプレイエンジン2140、スレッド実行論理2150、レンダリング出力パイプライン2170などの異なるタイプのグラフィックス処理パイプラインを含み得る。グラフィックスプロセッサ2100は、1または複数の汎用処理コアを含むマルチコア処理システム内のグラフィックスプロセッサであり得る。グラフィックスプロセッサは、1または複数の制御レジスタ(図示せず)へのレジスタ書き込みによって、またはリング相互接続2102を介してグラフィックスプロセッサ2100に発行されたコマンドによって制御されてもよい。リング相互接続2102は、グラフィックスプロセッサ2100を、他のグラフィックスプロセッサまたは汎用プロセッサなどの他の処理コンポーネントに結合することができる。リング相互接続2102からのコマンドは、コマンドストリーマ2103によって解釈され、命令をジオメトリパイプライン2120またはメディアパイプライン2130の個々のコンポーネントに供給する。
コマンドストリーマ2103は、メモリから頂点データを読み出し、コマンドストリーマ2103によって提供される頂点処理コマンドを実行する頂点フェッチデバイス2105の動作を指示することができる。頂点フェッチデバイス2105は、頂点データを頂点シェーダ2107に提供することができ、これは、各頂点に対して座標空間変換およびライティング演算を実施する。頂点フェッチデバイス2105および頂点シェーダ2107は、実行スレッドをスレッドディスパッチャ2131を介して実行ユニット2152A~2152Bにディスパッチすることによって、頂点処理命令を実行することができる。
実行ユニット2152A~2152Bは、グラフィックスおよびメディア動作を実施するための命令セットを有するベクトルプロセッサのアレイであり得る。実行ユニット2152A~2152Bは、各アレイに固有であるか、またはアレイ間で共有される付属L1キャッシュ2151を有し得る。キャッシュは、データキャッシュ、命令キャッシュ、または異なるパーティションにデータおよび命令を含むようにパーティション化された単一キャッシュとして構成することができる。
ジオメトリパイプライン2120は、3Dオブジェクトのハードウェアアクセラレーションのテッセレーションを実施するためのテッセレーションコンポーネントを含み得る。プログラム可能なハルシェーダ2111は、テッセレーション動作を構成することができる。プログラマブルドメインシェーダ2117は、テッセレーション出力のバックエンド評価を提供することができる。テッセレータ2113は、ハルシェーダ2111の方向で動作し、ジオメトリパイプライン2120への入力として提供される粗いジオメトリモデルに基づいて細部ジオメトリオブジェクトのセットを生成するための特殊目的論理を含み得る。さらに、テッセレーションが使用されない場合、テッセレーションコンポーネント(例えば、ハルシェーダ2111、テッセレータ2113、ドメインシェーダ2117)をバイパスすることができる。テッセレーションコンポーネントは、頂点シェーダ2107から受信したデータに基づいて動作することができる。
完全なジオメトリオブジェクトは、実行ユニット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を含み得る。ラスタライザ論理は、固定機能三角形およびラインラスタライズを実施するためのウィンドア/マスカーユニットを含み得る。一部の実施形態では、関連するレンダリングキャッシュ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 Groupのオープングラフィックスライブラリ(OpenGL)、オープンコンピューティング言語(OpenCL)、および/またはVulkanグラフィックスとコンピューティングAPIのサポートが提供され得る。Microsoft社からDirect3Dライブラリのサポートを受けることもできる。これらのライブラリを組み合わせて使用することもできる。オープンソースコンピュータビジョンライブラリ(OpenCV)もサポートされ得る。将来のAPIのパイプラインからグラフィックスプロセッサのパイプラインへのマッピングが可能であれば、互換性のある3Dパイプラインを備えた将来のAPIもサポートされるだろう。
グラフィックスパイプラインプログラミング
グラフィックスパイプラインプログラミング
図22Aは、例えば、図16A、17、21に関連して本明細書に記載されるパイプラインなどのグラフィックス処理パイプラインをプログラミングするために使用されるグラフィックスプロセッサコマンドフォーマット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は、同時に動作しなくてもよい。パイプラインフラッシュは、アクティブなグラフィックスパイプラインに任意の保留コマンドを完了させるために実施される。パイプラインフラッシュに応答して、グラフィックスプロセッサのコマンドパーサは、アクティブな描画エンジンが保留中の動作を完了し、関連する読み出しキャッシュが無効にされるまで、コマンド処理を一時停止する。所望により、「ダーティ」とマークされたレンダキャッシュ内の全てのデータをメモリにフラッシュできる。パイプラインフラッシュコマンド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を含み得る。プロセッサ2330は、プロセッサ1402の変形例であってもよいし、本明細書に記載されたプロセッサの他の任意のものであってもよい。プロセッサ2330は、プロセッサ1402または本明細書に記載されるプロセッサの他のいずれかの代わりに使用することができる。したがって、プロセッサ1402または本明細書に記載されるプロセッサの他のいずれかと組み合わせた任意の特徴の開示は、グラフィックスプロセッサ2332との対応する組み合わせも開示するが、これに限定されない。さらに、本明細書の他の図の要素と同一または類似の名称を有する図23の要素は、他の図と同一の要素を記載しており、それと同様の方法で動作または機能することができ、同じコンポーネントを含むことができ、本明細書の他の箇所に記載されているような他のエンティティにリンクすることができるが、これらに限定されるものではない。グラフィックスアプリケーション2310およびオペレーティングシステム2320はそれぞれ、データ処理システムのシステムメモリ2350内で実行される。
3Dグラフィックスアプリケーション2310は、シェーダ命令2312を含む1または複数のシェーダプログラムを含み得る。シェーダ言語命令は、Direct3Dの高水準シェーダ言語(HLSL)、OpenGLシェーダ言語(GLSL)などの高水準シェーダ言語であってもよい。アプリケーションはまた、汎用プロセッサコア2334による実行に適した機械語の実行可能命令2314を含んでもよい。アプリケーションは、頂点データによって定義されたグラフィックスオブジェクト2316を含むこともできる。
オペレーティングシステム2320は、Microsoft CorporationのMicrosoft(登録商標)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コアの実装形態
IPコアの実装形態
1または複数の態様は、プロセッサなどの集積回路内の論理を表すおよび/または定義する、機械可読媒体上に記憶された代表的なコードによって実装することができる。例えば、機械可読媒体は、プロセッサ内の種々の論理を表す命令を含んでもよい。機械によって読み出されると、命令は、機械に、本明細書に記載された技術を実施するための論理を製造させることができる。「IPコア」として知られるかかる表現は、集積回路のための再利用可能な論理ユニットであり、集積回路の構造を記述するハードウェアモデルとして有形の機械可読媒体上に記憶することができる。ハードウェアモデルは、集積回路を製造する製造機械にハードウェアモデルをロードする種々の顧客または製造施設に供給することができる。集積回路は、本明細書に記載される実施形態のいずれかに関連して記載される動作を回路が実施するように製造することができる。
図24Aは、一実施形態による動作を実施する集積回路を製造するために使用され得るIPコア開発システム2400を示すブロック図である。IPコア開発システム2400は、モジュール式の再利用可能な設計を生成するために使用ことができ、この設計は、より大きな設計に組み込むことができ、または集積回路全体(例えば、SOC集積回路)を構築するために使用することができる。設計メカニズム2430は、高水準プログラミング言語(例えば、C/C++)でIPコア設計のソフトウェアシミュレーション2410を生成することができる。ソフトウェアシミュレーション2410は、シミュレーションモデル2412を使用してIPコアの挙動を設計、テスト、および検証するために使用することができる。シミュレーションモデル2412は、機能、動作、および/またはタイミングシミュレーションを含み得る。次に、シミュレーションモデル2412からレジスタ転送レベル(RTL)設計2415を作成または合成することができる。RTL設計2415は、ハードウェアレジスタ間のデジタル信号の流れをモデル化する集積回路の挙動を抽象化したものであり、モデル化されたデジタル信号を使用して実施される関連論理を含む。RTL設計2415に加えて、論理レベルまたはトランジスタレベルの低レベル設計を作成、設計または合成することもできる。したがって、初期設計およびシミュレーションの特定の細部は変化し得る。
RTL設計2415または同等物は、さらに、設計メカニズムによって、ハードウェア記述言語(HDL)または物理設計データの他の表現であり得るハードウェアモデル2420に合成され得る。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または複数のダイは、0または複数のブリッジによって接続されてもよい。あるいは、複数のダイまたは論理ユニットを1または複数のブリッジによって接続することができる。さらに、複数の論理ユニット、ダイ、およびブリッジを、三次元構成を含む他の可能な構成で一緒に接続することができる。
図24Cは、基板2480(例えば、ベースダイ)に接続された複数ユニットのハードウェア論理チップレットを含むパッケージアセンブリ2490を示している。本明細書に記載されるグラフィックス処理ユニット、並列プロセッサ、および/または計算アクセラレータは、別々に製造される多様なシリコンチップレットから構成することができる。これに関連して、チップレットは、少なくとも部分的にパッケージされた集積回路であり、他のチップレットとともにより大きなパッケージに組み立てることができる論理の別個のユニットを含む。異なるIPコア論理を有する多様なチップレットセットを1つのデバイスに組み立てることができる。さらに、アクティブインターポーザ技術を使用して、チップレットをベースダイまたはベースチップレットに集積することができる。本明細書に記載される概念は、GPU内の異なる形態のIP間の相互接続および通信を可能にする。IPコアは、異なるプロセス技術を使用して製造され、製造中に合成されることが可能である。これにより、複数のIP、特に複数のフレーバーIPを有する大規模なSoCを同じ製造プロセスに収束させる複雑さが回避される。複数のプロセステクノロジーを使用できるようにすることで、タイムトゥマーケットが短縮され、複数の製品SKUを作成するコスト性能に優れた方法が提供される。さらに、分散されたIPは、独立して電力ゲート制御されやすいため、特定のワークロードで使用されていないコンポーネントの電源をオフにすることができ、全体的な電力消費量を削減できる。
種々の実施形態において、パッケージアセンブリ2490は、ファブリック2485または1または複数のブリッジ2487によって相互接続された、より少ないまたはより多い数のコンポーネントおよびチップレットを含み得る。パッケージアセンブリ2490内のチップレットは、チップオンウエハオン基板スタッキングを使用する2.5D構成を有することができ、この場合、複数のダイが、スルーシリコンビア(TSV)を含むシリコンインターポーザ上に並んで積層されて、チップレットを、パッケージ相互接続2483への電気的接続を含む基板2480と結合する。
一実施形態では、シリコンインターポーザは、TSVに加えて埋め込み論理を含むアクティブインターポーザ2489である。かかる実施形態では、パッケージアセンブリ2490内のチップレットは、アクティブインターポーザ2489の上に積層されたダイに面する3D面を使用して配置される。アクティブインターポーザ2489は、相互接続ファブリック2485およびシリコンブリッジ2487に加えて、I/O2491、キャッシュメモリ2492、および他のハードウェア論理2493のためのハードウェア論理を含み得る。ファブリック2485は、アクティブインターポーザ2489内の種々の論理チップレット2472、2474と論理2491、2493との間の通信を可能にする。ファブリック2485は、NoC相互接続またはパッケージアセンブリのコンポーネント間でデータパケットをスイッチするパケットスイッチファブリックの別の形態であり得る。複雑なアセンブリの場合、ファブリック2485は、パッケージアセンブリ2490の種々のハードウェア論理間の通信を可能にする専用チップレットであってもよい。
アクティブインターポーザ2489内のブリッジ構造2487を使用して、例えば、論理またはI/Oチップレット2474とメモリチップレット2475との間のポイントツーポイント相互接続を容易にすることができる。一部の実装形態では、ブリッジ構造2487はまた、基板2480内に埋め込まれてもよい。
ハードウェア論理チップレットは、特殊目的ハードウェア論理チップレット2472、論理またはI/Oチップレット2474、および/またはメモリチップレット2475を含み得る。ハードウェア論理チップレット2472および論理またはI/Oチップレット2474は、少なくとも部分的に、構成可能な論理または固定機能性論理ハードウェアで実装することができ、本明細書に記載されたプロセッサコア、グラフィックスプロセッサ、並列プロセッサ、または他のアクセラレータデバイスのいずれかの1または複数の部分を含み得る。メモリチップレット2475は、DRAM(例えば、GDDR、HBM)メモリまたはキャッシュ(SRAM)メモリであり得る。アクティブインターポーザ2489(または基板2480)内のキャッシュメモリ2492は、パッケージアセンブリ2490のグローバルキャッシュとして、分散グローバルキャッシュの一部として、またはファブリック2485の専用キャッシュとして動作することができる。
各チップレットは、別個の半導体ダイとして製造することができ、基板2480内に埋め込まれた、または基板と結合されたベースダイと結合される。基板2480との結合は、相互接続構造2473を介して行うことができる。相互接続構造2473は、基板2480内の種々のチップレットと論理との間で電気信号をルーティングするように構成することができる。相互接続構造2473は、バンプまたはピラーなどの相互接続を含むことができるが、これらに限定されない。一部の実施形態では、相互接続構造2473は、例えば、論理チップレット、I/Oチップレット、およびメモリチップレットの動作に関連する入力/出力(I/O)信号および/または電力または接地信号などの電気信号をルーティングするように構成されてもよい。一実施形態では、追加の相互接続構造が、アクティブインターポーザ2489を基板2480に結合する。
基板2480はエポキシ系積層基板であってもよいが、これに限定されるものではなく、基板2480は他の好適な種類の基板を含んでいてもよい。パッケージアセンブリ2490は、パッケージ相互接続2483を介して他の電気デバイスに接続することができる。パッケージ相互接続2483は、基板2480の表面に結合されて、電気信号を、マザーボード、他のチップセット、またはマルチチップモジュールなどの他の電気デバイスにルーティングすることができる。
論理またはI/Oチップレット2474およびメモリチップレット2475は、ブリッジ2487を介して電気的に結合されてもよく、ブリッジは、論理またはI/Oチップレット2474とメモリチップレット2475との間で電気信号をルーティングするように構成されている。ブリッジ2487は、電気信号のルートを提供する高密度相互接続構造であり得る。ブリッジ2487は、ガラスまたは適切な半導体材料からなるブリッジ基板を含み得る。ブリッジ基板上に電気的ルーティング特徴を形成して、論理またはI/Oチップレット2474とメモリチップレット2475との間にチップツーチップ接続を提供することができる。ブリッジ2487は、シリコンブリッジまたは相互接続ブリッジと称することもできる。例えば、ブリッジ2487は、埋め込みマルチダイ相互接続ブリッジ(EMIB)である。あるいは、ブリッジ2487は、単に1つのチップレットから別のチップレットへの直接接続であってもよい。
図24Dは、一実施形態による、交換可能チップレット2495を含むパッケージアセンブリ2494を示している。交換可能チップレット2495は、1または複数のベースチップレット2496、2498上の標準化されたスロットに組み立てることができる。ベースチップレット2496、2498は、ブリッジ相互接続2497を介して結合することができ、これは、本明細書に記載される他のブリッジ相互接続と同様であり得、例えば、EMIBであってもよい。メモリチップレットは、ブリッジ相互接続を介して論理またはI/Oチップレットに接続することもできる。I/Oおよび論理チップレットは、相互接続ファブリックを介して通信することができる。ベースチップレットはそれぞれ、論理、I/Oまたはメモリ/キャッシュの1つに対して標準化されたフォーマットで1または複数のスロットをサポートすることができる。
SRAMおよび電力供給回路は、ベースチップレット2496、2498のうちの1または複数の中に製造されてもよく、ベースチップレットは、ベースチップレットの上に積層される交換可能チップレット2495とは異なるプロセス技術を使用して製造されてもよい。例えば、ベースチップレット2496、2498は、より大きなプロセス技術を使用して製造することができ、一方、交換可能チップレットは、より小さなプロセス技術を使用して製造することができる。交換可能チップレット2495のうちの1または複数は、メモリ(例えば、DRAM)チップレットであってもよい。パッケージアセンブリ2494を使用する製品に対して目標とされる電力および/または性能に基づいて、パッケージアセンブリ2494に対して異なるメモリ密度を選択することができる。さらに、異なる数のタイプの機能ユニットを有する論理チップレットを、製品のために目標とされた電力および/または性能に基づいて組み立て時に選択することができる。さらに、異なるタイプのIP論理コアを含むチップレットを交換可能チップレットスロットに挿入することができ、異なる技術のIPブロックを混合して適合させることができるハイブリッドプロセッサ設計を可能にする。
チップ集積回路上の例示的なシステム
チップ集積回路上の例示的なシステム
図25~図26Bは、1または複数のIPコアを使用して製造され得る例示的な集積回路および関連するグラフィックスプロセッサを示している。図示されたものに加えて、追加のグラフィックスプロセッサ/コア、周辺インターフェースコントローラ、または汎用プロセッサコアを含む他の論理および回路を含めることができる。本明細書の他の図の要素と同一または類似の名称を有する図25~図26Bの要素は、他の図と同一の要素を記載しており、それと同様の方法で動作または機能することができ、同じコンポーネントを含むことができ、本明細書の他の箇所に記載されているような他のエンティティにリンクすることができるが、これらに限定されるものではない。
図25は、1または複数のIPコアを使用して製造され得るチップ集積回路2500上の例示的なシステムを示すブロック図である。例示的な集積回路2500は、1または複数のアプリケーションプロセッサ2505(例えば、CPU)と、少なくとも1つのグラフィックスプロセッサ2510とを含み、これは、グラフィックスプロセッサ1408、1508、2510、または本明細書に記載されるいずれかのグラフィックスプロセッサの変形例であってもよく、記載されるいずれかのグラフィックスプロセッサの代わりに使用されてもよい。したがって、本明細書におけるグラフィックスプロセッサと組み合わせた任意の特徴の開示は、グラフィックスプロセッサ2510との対応する組み合わせも開示するが、これに限定されない。集積回路2500は、さらに、画像プロセッサ2515および/またはビデオプロセッサ2520を含むことができ、これらの任意のものは、同一または複数の異なる設計ファシリティからのモジュールIPコアであり得る。集積回路2500は、USBコントローラ2525、UARTコントローラ2530、SPI/SDIOコントローラ2535、およびI2S/I2Cコントローラ2540を含む周辺またはバス論理を含み得る。さらに、集積回路は、高精細マルチメディアインターフェース(HDMI(登録商標))コントローラ2550およびモバイル産業プロセッサインターフェース(MIPI)ディスプレイインターフェース2555のうちの1または複数に結合されたディスプレイデバイス2545を含み得る。ストレージデバイスは、フラッシュメモリおよびフラッシュメモリコントローラを含むフラッシュメモリサブシステム2560によって提供することができる。メモリインターフェースは、SDRAMまたはSRAMメモリデバイスにアクセスするためのメモリコントローラ2565を介して提供されてもよい。一部の集積回路は、さらに、埋め込みセキュリティエンジン2570を含む。
図26A~図26Bは、本明細書に記載する実施形態による、SoC内で使用するための例示的なグラフィックスプロセッサを示すブロック図である。グラフィックスプロセッサは、グラフィックスプロセッサ1408、1508、2510、または本明細書に記載される他のいずれかのグラフィックスプロセッサの変形例であり得る。グラフィックスプロセッサは、グラフィックスプロセッサ1408、1508、2510、または本明細書に記載された他のグラフィックスプロセッサの代わりに使用され得る。したがって、グラフィックスプロセッサ1408、1508、2510、または本明細書に記載されるグラフィックスプロセッサの他のいずれかと組み合わせた任意の特徴の開示は、図26A~図26Bのグラフィックスプロセッサとの対応する組み合わせも開示するが、かかるものに限定されない。図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に提供されるフラグメントシェーダプログラムを実行するように最適化されてもよく、OpenGL APIは、Direct3D APIに提供されるピクセルシェーダプログラムと同様の動作を実施するために使用されてもよい。
グラフィックスプロセッサ2610は、さらに、1または複数のメモリ管理ユニット(MMU)2620A~2620B、キャッシュ2625A~2625B、および回路相互接続2630A~2630Bを含む。1または複数のMMU2620A~2620Bは、1または複数のキャッシュ2625A~2625Bに記憶された頂点または画像/テクスチャデータに加えて、メモリに記憶された頂点または画像/テクスチャデータを参照することができる頂点プロセッサ2605および/またはフラグメントプロセッサ2615A~2615Nを含む、グラフィックスプロセッサ2610のための仮想から物理アドレスマッピングを提供する。1または複数のMMU2620A~2620Bは、図25の1または複数のアプリケーションプロセッサ2505、画像プロセッサ2515、および/またはビデオプロセッサ2520に関連付けられた1または複数のMMUを含むシステム内の他のMMUと同期させることができ、その結果、各プロセッサ2505~2520は共有または統合仮想メモリシステムに参加することができる。グラフィックスプロセッサ2610のコンポーネントは、本明細書に記載される他のグラフィックスプロセッサのコンポーネントに対応してもよい。1または複数のMMU2620A~2620Bは、図2CのMMU245に対応することができる。頂点プロセッサ2605およびフラグメントプロセッサ2615A~2615Nは、グラフィックスマルチプロセッサ234に対応し得る。実施形態によると、1または複数の回路相互接続2630A~2630Bは、グラフィックスプロセッサ2610が、SoCの内部バスを介して、または直接接続を介して、SoC内の他のIPコアとインターフェースすることを可能にする。1または複数の回路相互接続2630A~2630Bは、図2Cのデータクロスバー240に対応することができる。グラフィックスプロセッサ2610の類似のコンポーネントと、本明細書に記載された種々のグラフィックスプロセッサアーキテクチャとの間には、さらなる対応が見出され得る。
図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は、実行スレッドを1または複数のシェーダコア2655A~2655Nにディスパッチするためのスレッドディスパッチャとして機能するコア間タスクマネージャ2645と、タイルベースレンダリングのためのタイリング動作を加速するためのタイリングユニット2658とを含み、この場合、シーンのレンダリング動作は、例えば、シーン内の局所的な空間コヒーレンスを利用するため、または内部キャッシュの使用を最適化するために、画像空間に細分割される。シェーダコア2655A~2655Nは、例えば、図2Dのようなグラフィックスマルチプロセッサ234、または図3Aおよび図3Bそれぞれのグラフィックスマルチプロセッサ325、350、または図3Cのマルチコアグループ365Aに対応することができる。
浮動小数点計算のエミュレーション
浮動小数点計算のエミュレーション
グラフィックスデータ処理を含むコンピュータシステムの動作において、浮動小数点FMA(融合積和)計算を必要とする多数のプロセスが存在する。かかる動作には、SGEMM(単精度浮動汎用行列乗算)演算が含まれ、特に深層学習およびその他の関連プロセスに適用される。
かかる計算は、システムに組み込まれているネイティブ計算を適用することによって実施することができる。例えば、単精度浮動小数点演算(浮動小数点32ビットまたはFP32)演算は、GPGPU演算を提供することができるグラフィックスプロセッサを含むプロセッサの浮動小数点ユニットによって利用可能であるが、より高精度(FP32)フォーマットにおけるかかる処理演算は、浮動小数点ユニットによるネイティブ浮動小数点計算におけるスループット制限のために、システム性能を制限する可能性がある。このため、ネイティブFPUの計算性能は、深層学習およびその他の計算集約的な演算には不十分である可能性がある。
一部の実施形態において、浮動小数点計算のエミュレーションは、他の低精度フォーマットを利用して提供され、それにより、計算スループットの改善を可能にする。これに関して、以下でさらに説明するシストリックDPAS(ドット積、累算、シストリック)ハードウェアなどのシストリックアレイハードウェアは、BF16(BFloat16、Brain Float16とも称される)などの低精度データに対して非常に高いFMA(融合積和)スループットをサポートする。シストリックアレイハードウェアは、例えば、図19に示すシストリックアレイ1912を含むことができ、これは、シストリック方式でベクトルまたは他のデータ並列演算を実施するために使用することができるデータ処理ユニット(DPU)のW幅およびD深度のネットワークを含む。一部の実施形態において、新規な解決策は、より大きなSGEMM性能を可能にするために、シストリックアレイハードウェアを使用してSGEMMをエミュレートすることを提供する。装置、システムまたはプロセスの実施形態として、計算結果において許容可能な精度を提供しながら、かかる計算において改善された性能を提供するために適用することができる。
一部の実施形態において、装置、システム、またはプロセスは、ある実施形態に対する特定の実装形態の選択を可能にし、したがって、特定の用途に対する性能および精度の調整を可能にする。一実施形態は、計算においてどの要素が選択されるかに基づいて性能および精度を調整することを可能にする。一部の実施形態において、プロセスは、より低い精度の乗算およびより高い精度の累算を有するFMAユニットを使用する概念の適用を含む。
SGEMMは、単精度浮動小数点FP32のソースと結果を参照し、これには、他の関数の中でも特に次の計算が含まれ得る。
行列乗算C=AB
ここで、
A:M(高さ)×K(幅)
B:K×N
C:M×N
行列乗算C=AB
ここで、
A:M(高さ)×K(幅)
B:K×N
C:M×N
一部の実施形態では、SGEMM演算などの高精度計算は、シストリックアレイハードウェアを使用してエミュレートされ、ネイティブ浮動小数点計算と比較してより良好な性能を提供する一方で、アプリケーションに対して十分なレベルの精度を維持する。一部の実施形態において、動作は、以下にさらに示すように、浮動小数点エミュレーションを実施するために複数の低精度値を組み合わせることを含む。
図27Aは、一部の実施形態による、シストリックアレイハードウェアを使用する計算エミュレーションの性能の高レベルの説明図である。一部の実施形態では、コンピューティングシステム2700において、より高精度の計算2710(FP32計算を含み得るがこれに限定されない第1の精度フォーマットによる計算)のために入力データが受信される。特に、この計算には、SGEMM演算が含まれ得る。一般的なコンピューティングシステムでは、浮動小数点ユニットの処理能力は、例えば、要求されたFP32出力2740を生成するために使用可能にして適用することができるネイティブFP32計算2720を含む。
しかしながら、計算集約的な演算のためのネイティブ浮動小数点計算の適用は、システムの計算スループットを制限する可能性があり、したがって特定の演算に対しては不適切であり得る。
一部の実施形態では、コンピューティングシステム2700は、低精度フォーマット(第2の精度フォーマット)計算を使用してFP32エミュレーション(概して、高精度エミュレーション)を実施する能力を含む。特に、コンピューティングシステムは、シストリックアレイハードウェア2730の適用を含むFP32エミュレーションを含み、これは、FP32出力2740において利用され得るエミュレートされたFP32結果2735を生成する。シストリックアレイハードウェアは、特に、シストリックDPAS(ドット積、累算、シストリック)ハードウェアを含み得る。
一部の実施形態において、ネイティブFP32計算2720およびシストリックアレイハードウェア2730は、FP32計算およびエミュレートされたFP32計算の両方を提供するために共同で使用可能にし得る。ネイティブFP32計算2720およびシストリックアレイハードウェア2730の共同使用は、例えば、同じSGEMM演算を計算しながら改善された性能を提供するために、または計算が両方とも適用され得る他の実装形態のために利用され得る。
図27Bは、一部の実施形態において、より高精度の計算をエミュレートするために適用され得るデータ処理ユニットのアレイを含むシストリックアレイハードウェアの図である。この単純化された図において、シストリックアレイハードウェア2730は、この図においてDPU要素の4×3アレイであるデータ処理ユニット2734のアレイ2732を含むものとして示されている。
一部の実施形態では、アレイ2732は、図27Aに示すように、FP32出力において利用することができるエミュレートされたFP32結果を生成するために、シストリック方式でベクトルまたは他のデータ並列演算を実施するために利用される。一部の実施形態では、アレイ2732は、浮動小数点エミュレーションの実施において複数の低精度値を組み合わせるために利用される。
図28は、一部の実施形態における計算に適用され得るバイナリフォーマットの図である。図28に示すように、バイナリ表現は以下を含み得る。
(1)IEEE754単精度32ビット浮動小数点フォーマット(FP32)2810。ここで、値は以下から構成される。
・符号:1ビット
・指数:8ビット
・仮数(すなわち分数):23の明示ビット(完全分数には、23の明示的に記憶されたビットと1つの暗黙的な先行ビットを有する24の合計ビットが含まれる)
(2)Bfloat16フォーマット(BF16)2830。ここで、値は以下から構成される。
・符号:1ビット
・指数:8ビット
・仮数:7つの明示ビット(完全な分数には、8つの合計ビットと7つの明示的に記憶されたビットと1つの暗黙的な先行ビットが含まれる)
bfloat16は、FP16フォーマット(半精度とも称される)とは異なることに留意されたい。FP16フォーマットは、その代わりに5ビットの指数と10ビットの分数(すなわち、10の明示的に記憶されたビットと1の暗黙的な先頭ビット)を含む。実施形態は、bfloat16フォーマットに限定されず、テンソル-浮動小数点フォーマット(TF32)などの他の縮小精度フォーマットを含むことができ、ここで値は符号:1ビット、指数:8ビット、および仮数:10ビットから構成される。
図29は、一部の実施形態による、bfloat16値を利用するコンピュータシステム計算におけるFP32表現の前処理の説明図である。図29に示すように、より高い精度のFP32値は、以下のように、より低い精度のBF16値を利用して表すことができる。
(1)要素2910当たり16ビットを必要とする単一のbfloat値(BF160)。ここで、BF160=(bf16)xは、比較的低い精度を提供する。
(2)2つのbfloat値(BF160+BF161)2920。ここで、BF160=(bf16)xおよびBF161は(BF161=(bf16)(x-(fp32)BF160)であり、32ビット/要素を必要とし、より複雑な計算が必要となるため性能が低下し、精度が向上した。または、
(3)3つのbfloat値(BF160+BF161+BF162)2930。ここでBF160=(bf16)x、BF161=(BF161=(bf16)(x-(fp32)BF160)、BF162=(BF162=(bf16)(x-(fp32)BF160-(fp32)BF161)は、48ビット/要素を必要とし、性能低下のさらなるトレードオフとともにさらなる改善された精度を提供する。
図30は、一部の実施形態による、BF16 FMA(融合積和)要素を使用するFP32エミュレーションの説明図である。図示のように、乗算FP32X*FP32Yは、FP32X=(XBF16_0+XBF16_1)およびFP32Y=(YBF16_0+YBF16_1)のような入力値3010当たり2つのBF16値を利用してエミュレートされ得、それによって図示の項T0+T1+T2を生成する。図示のように、計算は、4個またはそれより少ない数のFMA要素を使用して実施されてもよく、ここで、4個より少ないFMAが、精度の低下と引き換えに、より速い性能を提供するために選択されてもよい。
あるいは、乗算FP32X*FP32Yは、FP32X=(XBF16_0+XBF16_1+XBF16_2)およびFP32Y=(YBF16_0+YBF16_1+YBF16_2)のような3つのBF16値3020を利用してエミュレートされ、それによって図示された項T0+T1+T2+T3+T4を生成することができる。図示のように、計算は、9個以下のFMA要素を使用して実施することができ、9個以下のFMAを使用して、精度を低下させながらより高速な性能を提供することができる。
一部の実施形態において、動作は、シストリックアレイハードウェア実装形態に関して以下でさらに説明するように、同様の項を一緒に追加し、最下位の項を最初に追加し、次いで、より高い正確度のために最上位の項を累算することを含み得る。
一部の実施形態において、複数のカーネルは、値およびFMA演算に関して異なる低精度計算構造を介して浮動小数点エミュレーションの精度および性能の異なる組み合わせを提供するように構成することができる。
図31は、一部の実施形態によるFP32エミュレーションを説明するためのフローチャートである。一部の実施形態では、プロセス3100は、行列乗算C=ABを表すSGEMM計算3105のためのFP32値を受信することを含む。
一部の実施形態では、浮動小数点ユニットによって許容される本来のより高い精度(この例ではFP32、第1の精度フォーマット)が実装形態3110に対して十分であるか否かが決定され得る。そうである場合、この計算は浮動小数点3115に向けられて、計算を実施することができる。そうでない場合、プロセス3100は、深層学習または他の計算集約的演算の場合など、計算3120のためのFP32エミュレーションを可能にすることを含む。
一部の実施形態では、浮動小数点エミュレーションを有効にすることは、特定のエミュレーションフォーマットを選択して有効にすることを含むことができ、ここで、エミュレーションは、選択された特定のカーネルに依存して精度および性能が変化することができる。図30に示すようなBF16(第2の精度フォーマット)を使用するFP32演算のエミュレーションの例では、低精度値の変動数、FMA演算の数、および計算における値の累算の順序付けを提供するカーネルによって、表1に示す以下の相対精度および性能レベルを提供することができる。
表1は一例であり、実施形態は特定のカーネル、精度、および性能値に限定されないことに留意されたい。エミュレーションフォーマットのかかる選択は、BF16に対する代替の低精度フォーマットにも適用することができる。
一部の実施形態では、計算演算は、エミュレーション動作のためのシストリックアレイハードウェア(DPASハードウェアなど)3125に向けられる。エミュレーションプロセスは、BF16 FMA要素を使用するFP32エミュレーションのために図30に示すような低精度処理3130を使用して計算を実施することを含む。一部の実施形態では、動作は、図29および図30に示すように、浮動小数点エミュレーションを実施するために複数の低精度値を組み合わせることを含む。
プロセス3100は、DPASハードウェア3135からエミュレートされた結果を生成し、次に、エミュレートされた結果をSGEMM結果3140として出力に向ける。
一部の実施形態では、システムは、行列間でGEMM/ドット積計算を実施し、中間結果はFP32で提供される。一部の実施形態において、シストリックアレイ演算は、低精度演算を使用してFP32エミュレーションを提供するために適用され、特に、図29に示すように、複数のBF16値を組み合わせることを含み得る。
シストリックアレイ演算は、大幅に改善されたFMAスループットを提供するために適用することができ、したがって、SGEMM計算における改善された性能を可能にすると同時に、エミュレート値計算における複数の低精度値の組み合わせによって十分な精度を維持することができる。
図32Aおよび図32Bは、一部の実施形態による、浮動小数点計算のエミュレーションにおける可能な累算順序の説明図である。一部の実施形態において、シストリックアレイハードウェアにおける浮動小数点エミュレーションは、特定の選択された累算順序を含む。図32Aに示すように、行列乗算C=ABにおいて、行列は、A:M(高さ)×K(幅)、B:K×N、およびC:M×Nであり得る。
次に、図32Bは、計算のために選択され得るDPAS構成順序を示している。図示のように、エミュレーション動作における一連の乗算された値は、各ブロック正規化加算器において加算され、次いで、各ブロックから累算されて、最終的なFP32結果を生成するFP32加算器に提供される。一部の実施形態において、特定の累算順序は、特定の動作のためのエミュレーションプロセスにおいて使用するために選択されてもよい。
以下の例は、特定の実施形態に関するものである。
実施例1において、プロセッサは、第1の精度フォーマットでネイティブ浮動小数点演算を提供する浮動小数点ユニット(FPU)と、複数のデータ処理ユニットを有するシストリックアレイハードウェアとを含み、プロセッサは、第1の精度フォーマットで行列乗算演算を実施するためのデータを受信することと、第2の精度フォーマットを有する1または複数の値を使用してエミュレートされた浮動小数点乗算演算を可能にすることであって、第2の精度フォーマットは、第1の精度フォーマットよりも低い精度を有し、エミュレートされた浮動小数点乗算は、シストリックアレイハードウェアの演算を含む、可能にすることと、行列乗算演算のためのエミュレートされた結果を生成することとを行う。
実施例2において、行列乗算演算は、SGEMM(単精度浮動汎用行列乗算)演算を含む。
実施例3では、第1の精度フォーマットは、32ビット浮動小数点(FP32)である。
実施例4において、第2の精度フォーマットは、bfloat16ビットフォーマット(BF16)である。
実施例5において、エミュレートされた浮動小数点乗算は、複数の第2の精度フォーマット値の組み合わせを含む。
実施例6において、エミュレートされた浮動小数点乗算演算は、複数のFMA(融合積和)演算を含む。
実施例7では、プロセッサは、アプリケーションに対して複数のエミュレートされた浮動小数点乗算演算のうちの1つを選択することをさらに行い、複数のエミュレートされた浮動小数点乗算演算間の選択は、少なくとも部分的に、アプリケーションに対する性能および精度要件に基づいている。
実施例8において、複数のエミュレートされた浮動小数点乗算演算間の選択は、エミュレートされた浮動小数点乗算演算における第2の精度フォーマット値の数、FMA演算の数、または計算値の累算順序のうちの1または複数の選択をさらに含む。
実施例9において、プロセッサは、第2の行列乗算演算を受信することを行い、プロセッサは、処理のために第2の行列乗算演算を浮動小数点ユニットに指示することを行う。
実施例10において、シストリックアレイハードウェアは、シストリックDPAS(ドット積、累算、シストリック)ハードウェアを含み、シストリックDPASハードウェアは、複数のDPAS要素を含む。
実施例11において、システムは、グラフィックスプロセッサを有する1または複数のプロセッサと、データストレージ用メモリとを含み、グラフィックスプロセッサは、第1の精度フォーマットでネイティブ浮動小数点演算を提供する浮動小数点ユニット(FPU)と、複数のデータ処理ユニットを有するシストリックアレイハードウェアとを含み、グラフィックスプロセッサは、第1の精度フォーマットで行列乗算演算を実施するためのデータを受信することと、第2の精度フォーマットを有する1または複数の値を使用してエミュレートされた浮動小数点乗算演算を可能にすることであって、第2の精度フォーマットは、第1の精度フォーマットよりも低い精度を有し、エミュレートされた浮動小数点乗算は、シストリックアレイハードウェアの演算を含む、可能にすることと、行列乗算演算のためのエミュレートされた結果を生成することとを行う。
実施例12において、行列乗算演算は、SGEMM(単精度浮動汎用行列乗算)演算を含む。
実施例13において、第2の精度フォーマットは、bfloat16ビットフォーマット(BF16)である。
実施例14において、エミュレートされた浮動小数点乗算演算は、複数のFMA(融合積和)演算を含む。
実施例15では、グラフィックスプロセッサは、アプリケーションに対して複数のエミュレートされた浮動小数点乗算演算のうちの1つを選択することをさらに行い、複数のエミュレートされた浮動小数点乗算演算間の選択は、少なくとも部分的に、アプリケーションに対する性能および精度要件に基づいている。
実施例16において、複数のエミュレートされた浮動小数点乗算演算間の選択は、エミュレートされた浮動小数点乗算演算における第2の精度フォーマット値の数、FMA演算の数、または計算値の累算順序のうちの1または複数の選択をさらに含む。
実施例17において、実行可能コンピュータプログラム命令を記憶した1または複数の非一時的コンピュータ可読記憶媒体であって、実行可能コンピュータプログラム命令は、1または複数のプロセッサによって実行されると、1または複数のプロセッサに、第1の精度フォーマットで行列乗算演算を実施するためのデータを受信することと、第2の精度フォーマットを有する1または複数の値を使用してエミュレートされた浮動小数点乗算演算を可能にすることであって、第2の精度フォーマットは、第1の精度フォーマットよりも低い精度を有し、エミュレートされた浮動小数点乗算は、複数のデータ処理ユニットを含むシストリックアレイハードウェアの演算を含む、可能にすることと、行列乗算演算のためのエミュレートされた結果を生成することとを含む動作を実施させる、記憶媒体。
実施例18において、行列乗算演算は、SGEMM(単精度浮動汎用行列乗算)演算を含む。
実施例19において、第2の精度フォーマットは、bfloat16ビットフォーマット(BF16)である。
実施例20において、エミュレートされた浮動小数点乗算演算は、複数のFMA(融合積和)演算を含む。
実施例21において、実行可能コンピュータプログラム命令は、アプリケーションに対して複数のエミュレートされた浮動小数点乗算演算のうちの1つを選択するための命令をさらに含み、複数のエミュレートされた浮動小数点乗算演算間の選択は、少なくとも部分的に、アプリケーションに対する性能および精度要件に基づいている。
実施例22において、装置は、第1の精度フォーマットで行列乗算演算を実施するためのデータを受信する手段と、第2の精度フォーマットで1または複数の値を使用してエミュレートされた浮動小数点乗算演算を可能にする手段であって、第2の精度フォーマットは、第1の精度フォーマットよりも低い精度を有し、エミュレートされた浮動小数点乗算は、複数のデータ処理ユニットを含むシストリックアレイハードウェアの演算を含む、手段と、行列乗算演算のためのエミュレートされた結果を生成する手段とを含む。
実施例23において、行列乗算演算は、SGEMM(単精度浮動汎用行列乗算)演算を含む。
実施例24において、第2の精度フォーマットは、bfloat16ビットフォーマット(BF16)である。
実施例25において、エミュレートされた浮動小数点乗算演算は、複数のFMA(融合積和)演算を含む。
実施例26において、装置は、アプリケーションに対して複数のエミュレートされた浮動小数点乗算演算のうちの1つを選択するための手段をさらに含み、複数のエミュレートされた浮動小数点乗算演算間の選択は、少なくとも部分的に、アプリケーションに対する性能および精度要件に基づいている。
上記の説明では、説明のために、記載された実施形態の完全な理解を提供するために多くの特定の詳細が記載されている。しかしながら、当業者には明らかなように、実施形態はこれらの特定の詳細の一部なしで実施することができる。他の例では、周知の構造およびデバイスがブロックダイアグラム形式で示されている。図示されたコンポーネントの間に中間構造が存在してもよい。本明細書に記載または図示するコンポーネントは、図示または図示しない追加の入力または出力を有することができる。
種々の実施形態は、種々のプロセスを含み得る。これらのプロセスは、ハードウェアコンポーネントによって実施されてもよいし、コンピュータプログラムまたは機械実行可能命令によって実施されてもよく、これらの命令によってプログラムされた汎用または専用プロセッサまたは論理回路にプロセスを実行させるために使用されてもよい。あるいは、処理は、ハードウェアとソフトウェアの組み合わせによって実施されてもよい。
種々の実施形態の一部は、コンピュータプログラム製品として提供されてもよく、このコンピュータプログラム製品には、コンピュータプログラム命令が記憶されたコンピュータ可読媒体が含まれてもよく、このコンピュータ可読媒体は、特定の実施形態によるプロセスを実施するために1または複数のプロセッサによって実行されるコンピュータ(または他の電子デバイス)をプログラムするために使用されてもよい。コンピュータ可読媒体は、磁気ディスク、光ディスク、読み出し専用メモリ(ROM)、ランダムアクセスメモリ(RAM)、消去可能プログラム可能読み出し専用メモリ(EPROM)、電気的消去可能プログラム可能読み出し専用メモリ(EEPROM)、磁気または光カード、フラッシュメモリ、または電子命令を記憶するのに適した他のタイプのコンピュータ可読媒体を含むことができるが、これらに限定されない。さらに、実施形態は、コンピュータプログラム製品としてダウンロードすることもでき、プログラムは、リモートコンピュータから要求側コンピュータに転送することができる。
方法の多くは、それらの最も基本的な形式で説明されているが、本実施形態の基本的な範囲から逸脱することなく、いずれの方法に対してもプロセスを追加または削除することができ、また説明されたメッセージに対しても情報を追加または削除することができる。多くのさらなる修正および適合を行うことができることは当業者には明らかであろう。特定の実施形態は、概念を限定するために提供されるのではなく、それを例示するために提供される。実施形態の範囲は、上記に提供された特定の例によって決定されるものではなく、特許請求の範囲によってのみ決定されるものである。
要素「A」が要素「B」に結合されていると言われる場合、要素Aは要素Bに直接結合されてもよいし、例えば要素Cを介して間接的に結合されてもよい。明細書または特許請求の範囲において、構成要素、特徴、構造、プロセスまたは特徴Aが構成要素、特徴、構造、プロセスまたは特徴Bを「引き起こす」と記載されている場合、それは、「A」が「B」の少なくとも部分的な原因であるが、「B」を引き起こす助けとなる少なくとも1つの他の構成要素、特徴、構造、プロセスまたは特徴も存在し得ることを意味する。明細書が、特徴、構造、プロセス、または特性が「含まれてもよい(may)」、「含まれてもよい(might)」、または「含まれ得る(could)」ことを示している場合は、その特定の構成要素、特徴、構造、プロセスまたは特徴は、含まれる必要はない。明細書または請求項が「a」または「an」要素に言及している場合、これは、記載された要素のうちの1つのみが存在することを意味しない。
実施形態は、実装形態または実施例である。本明細書における「一実施形態(an embodiment)」、「一実施形態(one embodiment)」、「一部の実施形態(some embodiments)」、または「他の実施形態(other embodiments)」への言及は、実施形態に関連して記載された特定の特徴、構造または特徴が、少なくとも一部の実施形態に含まれるが、必ずしも全ての実施形態に含まれるわけではないことを意味する。「一実施形態(an embodiment)」、「一実施形態(one embodiment)」または「一部の実施形態(some embodiments)」の種々の外観は、必ずしも全てが同じ実施形態を参照しているわけではない。例示的な実施形態の前述の説明において、種々の特徴は、開示を合理化し、種々の新規な態様のうちの1または複数の理解を助ける目的で、単一の実施形態、図、またはその説明に一緒にグループ化されることがあることを理解されたい。しかしながら、この開示方法は、クレームされた実施形態が各クレームに明示的に記載されているよりも多くの特徴を必要とするという意図を反映するものとして解釈されるべきではない。むしろ、以下の請求項が反映するように、新規な態様は、単一の前述の開示される実施形態の全ての特徴よりも少ない特徴に存在する。したがって、特許請求の範囲は本明細書に明示的に組み込まれ、各特許請求の範囲は別個の実施形態として独立している。
前述の説明および図面は、限定的な意味ではなく例示的な意味でみなされるべきである。当業者は、添付の特許請求の範囲に記載された特徴のより広い精神および範囲から逸脱することなく、本明細書に記載された実施形態に対して種々の修正および変更を行うことができることを理解するであろう。他の可能な項目
[項目1]
プロセッサであって、
第1の精度フォーマットでネイティブ浮動小数点演算を提供する浮動小数点ユニット(FPU)と、
複数のデータ処理ユニットを有するシストリックアレイハードウェアと
を備え、
前記プロセッサは、
前記第1の精度フォーマットで行列乗算演算を実施するためのデータを受信することと、
第2の精度フォーマットを有する1または複数の値を使用してエミュレートされた浮動小数点乗算演算を可能にすることであって、前記第2の精度フォーマットは、前記第1の精度フォーマットよりも低い精度を有し、前記エミュレートされた浮動小数点乗算は、前記シストリックアレイハードウェアの演算を含む、可能にすることと、
前記行列乗算演算のためのエミュレートされた結果を生成することと
を行う、プロセッサ。
[項目2]
前記行列乗算演算は、SGEMM(単精度浮動汎用行列乗算)演算を含む、項目1に記載のプロセッサ。
[項目3]
前記第1の精度フォーマットは、32ビット浮動小数点(FP32)である、項目1に記載のプロセッサ。
[項目4]
前記第2の精度フォーマットは、bfloat16ビットフォーマット(BF16)である、項目3に記載のプロセッサ。
[項目5]
前記エミュレートされた浮動小数点乗算は、複数の第2の精度フォーマット値の組み合わせを含む、項目4に記載のプロセッサ。
[項目6]
前記エミュレートされた浮動小数点乗算演算は、複数のFMA(融合積和)演算を含む、項目1に記載のプロセッサ。
[項目7]
前記プロセッサは、アプリケーションに対して複数のエミュレートされた浮動小数点乗算演算のうちの1つを選択することをさらに行い、前記複数のエミュレートされた浮動小数点乗算演算間の前記選択は、少なくとも部分的に、前記アプリケーションに対する性能および精度要件に基づいている、項目6に記載のプロセッサ。
[項目8]
前記複数のエミュレートされた浮動小数点乗算演算間の選択は、
前記エミュレートされた浮動小数点乗算演算における第2の精度フォーマット値の数、
FMA演算の数、または
計算値の累算順序
のうちの1または複数の選択をさらに含む、
項目7に記載のプロセッサ。
[項目9]
前記プロセッサは、第2の行列乗算演算を受信することを行い、前記プロセッサは、処理のために前記第2の行列乗算演算を前記浮動小数点ユニットに指示することを行う、項目1に記載のプロセッサ。
[項目10]
前記シストリックアレイハードウェアは、シストリックDPAS(ドット積、累算、シストリック)ハードウェアを含み、前記シストリックDPASハードウェアは、複数のDPAS要素を含む、項目1に記載のプロセッサ。
[項目11]
システムであって、
グラフィックスプロセッサを有する1または複数のプロセッサと、
データストレージ用メモリと
を備え、
前記グラフィックスプロセッサは、
第1の精度フォーマットでネイティブ浮動小数点演算を提供する浮動小数点ユニット(FPU)と、
複数のデータ処理ユニットを有するシストリックアレイハードウェアと
を含み、
前記グラフィックスプロセッサは、
前記第1の精度フォーマットで行列乗算演算を実施するためのデータを受信することと、
第2の精度フォーマットを有する1または複数の値を使用してエミュレートされた浮動小数点乗算演算を可能にすることであって、前記第2の精度フォーマットは、前記第1の精度フォーマットよりも低い精度を有し、前記エミュレートされた浮動小数点乗算は、前記シストリックアレイハードウェアの演算を含む、可能にすることと、
前記行列乗算演算のためのエミュレートされた結果を生成することと
を行う、システム。
[項目12]
前記行列乗算演算は、SGEMM(単精度浮動汎用行列乗算)演算を含む、項目11に記載のシステム。
[項目13]
前記第2の精度フォーマットは、bfloat16ビットフォーマット(BF16)である、項目11に記載のシステム。
[項目14]
前記エミュレートされた浮動小数点乗算演算は、複数のFMA(融合積和)演算を含む、項目11に記載のシステム。
[項目15]
前記グラフィックスプロセッサは、アプリケーションに対して複数のエミュレートされた浮動小数点乗算演算のうちの1つを選択することをさらに行い、前記複数のエミュレートされた浮動小数点乗算演算間の前記選択は、少なくとも部分的に、前記アプリケーションに対する性能および精度要件に基づいている、項目14に記載のシステム。
[項目16]
実行可能コンピュータプログラム命令を記憶した1または複数の非一時的コンピュータ可読記憶媒体であって、前記実行可能コンピュータプログラム命令は、1または複数のプロセッサによって実行されると、前記1または複数のプロセッサに、
第1の精度フォーマットで行列乗算演算を実施するためのデータを受信することと、
第2の精度フォーマットを有する1または複数の値を使用してエミュレートされた浮動小数点乗算演算を可能にすることであって、前記第2の精度フォーマットは、前記第1の精度フォーマットよりも低い精度を有し、前記エミュレートされた浮動小数点乗算は、複数のデータ処理ユニットを含むシストリックアレイハードウェアの演算を含む、可能にすることと、
前記行列乗算演算のためのエミュレートされた結果を生成することと
を含む動作を実施させる、記憶媒体。
[項目17]
前記行列乗算演算は、SGEMM(単精度浮動汎用行列乗算)演算を含む、項目16に記載の記憶媒体。
[項目18]
前記第2の精度フォーマットは、bfloat16ビットフォーマット(BF16)である、項目16に記載の記憶媒体。
[項目19]
前記エミュレートされた浮動小数点乗算演算は、複数のFMA(融合積和)演算を含む、項目16に記載の記憶媒体。
[項目20]
前記実行可能コンピュータプログラム命令は、
アプリケーションに対して複数のエミュレートされた浮動小数点乗算演算のうちの1つを選択するための命令をさらに含み、
前記複数のエミュレートされた浮動小数点乗算演算間の前記選択は、少なくとも部分的に、前記アプリケーションに対する性能および精度要件に基づいている、
項目19に記載の記憶媒体。
[項目1]
プロセッサであって、
第1の精度フォーマットでネイティブ浮動小数点演算を提供する浮動小数点ユニット(FPU)と、
複数のデータ処理ユニットを有するシストリックアレイハードウェアと
を備え、
前記プロセッサは、
前記第1の精度フォーマットで行列乗算演算を実施するためのデータを受信することと、
第2の精度フォーマットを有する1または複数の値を使用してエミュレートされた浮動小数点乗算演算を可能にすることであって、前記第2の精度フォーマットは、前記第1の精度フォーマットよりも低い精度を有し、前記エミュレートされた浮動小数点乗算は、前記シストリックアレイハードウェアの演算を含む、可能にすることと、
前記行列乗算演算のためのエミュレートされた結果を生成することと
を行う、プロセッサ。
[項目2]
前記行列乗算演算は、SGEMM(単精度浮動汎用行列乗算)演算を含む、項目1に記載のプロセッサ。
[項目3]
前記第1の精度フォーマットは、32ビット浮動小数点(FP32)である、項目1に記載のプロセッサ。
[項目4]
前記第2の精度フォーマットは、bfloat16ビットフォーマット(BF16)である、項目3に記載のプロセッサ。
[項目5]
前記エミュレートされた浮動小数点乗算は、複数の第2の精度フォーマット値の組み合わせを含む、項目4に記載のプロセッサ。
[項目6]
前記エミュレートされた浮動小数点乗算演算は、複数のFMA(融合積和)演算を含む、項目1に記載のプロセッサ。
[項目7]
前記プロセッサは、アプリケーションに対して複数のエミュレートされた浮動小数点乗算演算のうちの1つを選択することをさらに行い、前記複数のエミュレートされた浮動小数点乗算演算間の前記選択は、少なくとも部分的に、前記アプリケーションに対する性能および精度要件に基づいている、項目6に記載のプロセッサ。
[項目8]
前記複数のエミュレートされた浮動小数点乗算演算間の選択は、
前記エミュレートされた浮動小数点乗算演算における第2の精度フォーマット値の数、
FMA演算の数、または
計算値の累算順序
のうちの1または複数の選択をさらに含む、
項目7に記載のプロセッサ。
[項目9]
前記プロセッサは、第2の行列乗算演算を受信することを行い、前記プロセッサは、処理のために前記第2の行列乗算演算を前記浮動小数点ユニットに指示することを行う、項目1に記載のプロセッサ。
[項目10]
前記シストリックアレイハードウェアは、シストリックDPAS(ドット積、累算、シストリック)ハードウェアを含み、前記シストリックDPASハードウェアは、複数のDPAS要素を含む、項目1に記載のプロセッサ。
[項目11]
システムであって、
グラフィックスプロセッサを有する1または複数のプロセッサと、
データストレージ用メモリと
を備え、
前記グラフィックスプロセッサは、
第1の精度フォーマットでネイティブ浮動小数点演算を提供する浮動小数点ユニット(FPU)と、
複数のデータ処理ユニットを有するシストリックアレイハードウェアと
を含み、
前記グラフィックスプロセッサは、
前記第1の精度フォーマットで行列乗算演算を実施するためのデータを受信することと、
第2の精度フォーマットを有する1または複数の値を使用してエミュレートされた浮動小数点乗算演算を可能にすることであって、前記第2の精度フォーマットは、前記第1の精度フォーマットよりも低い精度を有し、前記エミュレートされた浮動小数点乗算は、前記シストリックアレイハードウェアの演算を含む、可能にすることと、
前記行列乗算演算のためのエミュレートされた結果を生成することと
を行う、システム。
[項目12]
前記行列乗算演算は、SGEMM(単精度浮動汎用行列乗算)演算を含む、項目11に記載のシステム。
[項目13]
前記第2の精度フォーマットは、bfloat16ビットフォーマット(BF16)である、項目11に記載のシステム。
[項目14]
前記エミュレートされた浮動小数点乗算演算は、複数のFMA(融合積和)演算を含む、項目11に記載のシステム。
[項目15]
前記グラフィックスプロセッサは、アプリケーションに対して複数のエミュレートされた浮動小数点乗算演算のうちの1つを選択することをさらに行い、前記複数のエミュレートされた浮動小数点乗算演算間の前記選択は、少なくとも部分的に、前記アプリケーションに対する性能および精度要件に基づいている、項目14に記載のシステム。
[項目16]
実行可能コンピュータプログラム命令を記憶した1または複数の非一時的コンピュータ可読記憶媒体であって、前記実行可能コンピュータプログラム命令は、1または複数のプロセッサによって実行されると、前記1または複数のプロセッサに、
第1の精度フォーマットで行列乗算演算を実施するためのデータを受信することと、
第2の精度フォーマットを有する1または複数の値を使用してエミュレートされた浮動小数点乗算演算を可能にすることであって、前記第2の精度フォーマットは、前記第1の精度フォーマットよりも低い精度を有し、前記エミュレートされた浮動小数点乗算は、複数のデータ処理ユニットを含むシストリックアレイハードウェアの演算を含む、可能にすることと、
前記行列乗算演算のためのエミュレートされた結果を生成することと
を含む動作を実施させる、記憶媒体。
[項目17]
前記行列乗算演算は、SGEMM(単精度浮動汎用行列乗算)演算を含む、項目16に記載の記憶媒体。
[項目18]
前記第2の精度フォーマットは、bfloat16ビットフォーマット(BF16)である、項目16に記載の記憶媒体。
[項目19]
前記エミュレートされた浮動小数点乗算演算は、複数のFMA(融合積和)演算を含む、項目16に記載の記憶媒体。
[項目20]
前記実行可能コンピュータプログラム命令は、
アプリケーションに対して複数のエミュレートされた浮動小数点乗算演算のうちの1つを選択するための命令をさらに含み、
前記複数のエミュレートされた浮動小数点乗算演算間の前記選択は、少なくとも部分的に、前記アプリケーションに対する性能および精度要件に基づいている、
項目19に記載の記憶媒体。
Claims (21)
- プロセッサであって、
第1の精度フォーマットでネイティブ浮動小数点演算を提供する浮動小数点ユニット(FPU)と、
複数のデータ処理ユニットを有するシストリックアレイハードウェアと
を備え、
前記プロセッサは、
前記第1の精度フォーマットで行列乗算演算を実施するためのデータを受信することと、
第2の精度フォーマットを有する1または複数の値を使用してエミュレートされた浮動小数点乗算演算を可能にすることであって、前記第2の精度フォーマットは、前記第1の精度フォーマットよりも低い精度を有し、前記エミュレートされた浮動小数点乗算は、前記シストリックアレイハードウェアの演算を含む、可能にすることと、
前記行列乗算演算のためのエミュレートされた結果を生成することと
を行う、プロセッサ。 - 前記行列乗算演算は、SGEMM(単精度浮動汎用行列乗算)演算を含む、請求項1に記載のプロセッサ。
- 前記第1の精度フォーマットは、32ビット浮動小数点(FP32)である、請求項1または2に記載のプロセッサ。
- 前記第2の精度フォーマットは、bfloat16ビットフォーマット(BF16)である、請求項3に記載のプロセッサ。
- 前記エミュレートされた浮動小数点乗算は、複数の第2の精度フォーマット値の組み合わせを含む、請求項4に記載のプロセッサ。
- 前記エミュレートされた浮動小数点乗算演算は、複数のFMA(融合積和)演算を含む、請求項1または2に記載のプロセッサ。
- 前記プロセッサは、アプリケーションに対して複数のエミュレートされた浮動小数点乗算演算のうちの1つを選択することをさらに行い、前記複数のエミュレートされた浮動小数点乗算演算間の前記選択は、少なくとも部分的に、前記アプリケーションに対する性能および精度要件に基づいている、請求項6に記載のプロセッサ。
- 前記複数のエミュレートされた浮動小数点乗算演算間の選択は、
前記エミュレートされた浮動小数点乗算演算における第2の精度フォーマット値の数、
FMA演算の数、または
計算値の累算順序
のうちの1または複数の選択をさらに含む、
請求項7に記載のプロセッサ。 - 前記プロセッサは、第2の行列乗算演算を受信することを行い、前記プロセッサは、処理のために前記第2の行列乗算演算を前記浮動小数点ユニットに指示することを行う、請求項1または2に記載のプロセッサ。
- 前記シストリックアレイハードウェアは、シストリックDPAS(ドット積、累算、シストリック)ハードウェアを含み、前記シストリックDPASハードウェアは、複数のDPAS要素を含む、請求項1または2に記載のプロセッサ。
- システムであって、
グラフィックスプロセッサを有する1または複数のプロセッサと、
データストレージ用メモリと
を備え、
前記グラフィックスプロセッサは、
第1の精度フォーマットでネイティブ浮動小数点演算を提供する浮動小数点ユニット(FPU)と、
複数のデータ処理ユニットを有するシストリックアレイハードウェアと
を含み、
前記グラフィックスプロセッサは、
前記第1の精度フォーマットで行列乗算演算を実施するためのデータを受信することと、
第2の精度フォーマットを有する1または複数の値を使用してエミュレートされた浮動小数点乗算演算を可能にすることであって、前記第2の精度フォーマットは、前記第1の精度フォーマットよりも低い精度を有し、前記エミュレートされた浮動小数点乗算は、前記シストリックアレイハードウェアの演算を含む、可能にすることと、
前記行列乗算演算のためのエミュレートされた結果を生成することと
を行う、システム。 - 前記行列乗算演算は、SGEMM(単精度浮動汎用行列乗算)演算を含む、請求項11に記載のシステム。
- 前記第2の精度フォーマットは、bfloat16ビットフォーマット(BF16)である、請求項11または12に記載のシステム。
- 前記エミュレートされた浮動小数点乗算演算は、複数のFMA(融合積和)演算を含む、請求項11または12に記載のシステム。
- 前記グラフィックスプロセッサは、アプリケーションに対して複数のエミュレートされた浮動小数点乗算演算のうちの1つを選択することをさらに行い、前記複数のエミュレートされた浮動小数点乗算演算間の前記選択は、少なくとも部分的に、前記アプリケーションに対する性能および精度要件に基づいている、請求項14に記載のシステム。
- プロセッサに、
第1の精度フォーマットで行列乗算演算を実施するためのデータを受信する手順と、
第2の精度フォーマットを有する1または複数の値を使用してエミュレートされた浮動小数点乗算演算を可能にする手順であって、前記第2の精度フォーマットは、前記第1の精度フォーマットよりも低い精度を有し、前記エミュレートされた浮動小数点乗算は、複数のデータ処理ユニットを含むシストリックアレイハードウェアの演算を含む、可能にする手順と、
前記行列乗算演算のためのエミュレートされた結果を生成する手順と
を実行させるためのコンピュータプログラム。 - 前記行列乗算演算は、SGEMM(単精度浮動汎用行列乗算)演算を含む、請求項16に記載のコンピュータプログラム。
- 前記第2の精度フォーマットは、bfloat16ビットフォーマット(BF16)である、請求項16または17に記載のコンピュータプログラム。
- 前記エミュレートされた浮動小数点乗算演算は、複数のFMA(融合積和)演算を含む、請求項16または17に記載のコンピュータプログラム。
- 前記プロセッサに、
アプリケーションに対して複数のエミュレートされた浮動小数点乗算演算のうちの1つを選択する手順をさらに実行させ、
前記複数のエミュレートされた浮動小数点乗算演算間の前記選択は、少なくとも部分的に、前記アプリケーションに対する性能および精度要件に基づいている、
請求項19に記載のコンピュータプログラム。 - 請求項16または17に記載のコンピュータプログラムを格納しているコンピュータ可読記憶媒体。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US17/482,166 US20230086275A1 (en) | 2021-09-22 | 2021-09-22 | Emulation of floating point calculation |
US17/482,166 | 2021-09-22 |
Publications (1)
Publication Number | Publication Date |
---|---|
JP2023046252A true JP2023046252A (ja) | 2023-04-03 |
Family
ID=82839178
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2022110785A Pending JP2023046252A (ja) | 2021-09-22 | 2022-07-08 | 浮動小数点計算のエミュレーション |
Country Status (4)
Country | Link |
---|---|
US (1) | US20230086275A1 (ja) |
EP (1) | EP4155900A1 (ja) |
JP (1) | JP2023046252A (ja) |
CN (1) | CN115934025A (ja) |
Family Cites Families (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US11169776B2 (en) * | 2019-06-28 | 2021-11-09 | Intel Corporation | Decomposed floating point multiplication |
US11188303B2 (en) * | 2019-10-02 | 2021-11-30 | Facebook, Inc. | Floating point multiply hardware using decomposed component numbers |
-
2021
- 2021-09-22 US US17/482,166 patent/US20230086275A1/en active Pending
-
2022
- 2022-07-08 JP JP2022110785A patent/JP2023046252A/ja active Pending
- 2022-07-11 EP EP22184044.0A patent/EP4155900A1/en active Pending
- 2022-08-22 CN CN202211008213.XA patent/CN115934025A/zh active Pending
Also Published As
Publication number | Publication date |
---|---|
EP4155900A1 (en) | 2023-03-29 |
CN115934025A (zh) | 2023-04-07 |
US20230086275A1 (en) | 2023-03-23 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11361496B2 (en) | Graphics processors and graphics processing units having dot product accumulate instruction for hybrid floating point format | |
US20230377209A1 (en) | Systolic arithmetic on sparse data | |
EP4109240A1 (en) | Fused instruction to accelerate performance of secure hash algorithm 2 (sha-2) workloads in a graphics environment | |
US20230088743A1 (en) | Gathering payload from arbitrary registers for send messages in a graphics environment | |
US20210149677A1 (en) | Enhanced processor functions for calculation | |
EP4163797A1 (en) | Modular gpu architecture for clients and servers | |
EP4109386A1 (en) | 64-bit two-dimensional block load with transpose | |
EP4124961A1 (en) | Efficient compressed verbatim copy | |
EP4123569A1 (en) | Performing global memory atomics in a private cache of a sub-core of a graphics processing unit | |
EP4109243A1 (en) | Multiple register allocation sizes for threads | |
US20230095535A1 (en) | Dynamic tile sequencing in graphic processing | |
US20220414977A1 (en) | Compression and interleaving of spatially proximate data | |
EP4359919A1 (en) | Dual pipeline parallel systolic array | |
EP4155900A1 (en) | Emulation of floating point calculation | |
EP4156077A1 (en) | Dynamic routing of texture loads in graphics processing | |
EP4109390A1 (en) | Sort middle architecture for multiple graphics processing units | |
EP4131002A1 (en) | Techniques for multi-source to multi-destination weighted round robin arbitration | |
EP4109303A1 (en) | Using sparsity metadata to reduce systolic array power consumption | |
EP4155927A1 (en) | Unified submit port for graphics processing | |
EP4109389A1 (en) | Out-of-order pixel shading and rasterization | |
EP4020384A1 (en) | Method and apparatus of spatially sparse convolution module for visual rendering and synthesis | |
EP4359920A1 (en) | Systolic array of arbitrary physical and logical depth | |
WO2023079323A1 (en) | Temporally amortized supersampling using a kernel splatting network | |
WO2022271228A1 (en) | Register file for systolic array | |
CN115937382A (zh) | 用于快速清除3维表面的技术 |