JP2021177366A - フィードバック入力を有するシストリック・アレイを利用するスケーラブルなスパース行列乗算加速 - Google Patents

フィードバック入力を有するシストリック・アレイを利用するスケーラブルなスパース行列乗算加速 Download PDF

Info

Publication number
JP2021177366A
JP2021177366A JP2020202444A JP2020202444A JP2021177366A JP 2021177366 A JP2021177366 A JP 2021177366A JP 2020202444 A JP2020202444 A JP 2020202444A JP 2020202444 A JP2020202444 A JP 2020202444A JP 2021177366 A JP2021177366 A JP 2021177366A
Authority
JP
Japan
Prior art keywords
pipeline
processing
graphics
memory
logic
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
JP2020202444A
Other languages
English (en)
Inventor
マイユラン スブラマニアム
Maiyuran Subramaniam
パーラ ホルヘ
Parra Jorge
パル スプラティム
Pal Supratim
ガルグ アシュトーシュ
Garg Ashutosh
マルワハ シュブラ
Marwaha Shubra
グラム チャンドラ
Gurram Chandra
スターキー ダリン
Starkey Darin
ボルカール ドゥルゲシュ
Borkar Durgesh
ジョージ ヴァーギーズ
George Varghese
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Intel Corp
Original Assignee
Intel Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Priority claimed from US16/913,800 external-priority patent/US11204977B2/en
Application filed by Intel Corp filed Critical Intel Corp
Publication of JP2021177366A publication Critical patent/JP2021177366A/ja
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/38Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
    • G06F7/48Methods 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/544Methods 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/5443Sum of products
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T1/00General purpose image data processing
    • G06T1/20Processor architectures; Processor configuration, e.g. pipelining
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F17/00Digital computing or data processing equipment or methods, specially adapted for specific functions
    • G06F17/10Complex mathematical operations
    • G06F17/16Matrix or vector computation, e.g. matrix-matrix or matrix-vector multiplication, matrix factorization
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/76Architectures of general purpose stored program computers
    • G06F15/80Architectures of general purpose stored program computers comprising an array of processing units with common control, e.g. single instruction multiple data processors
    • G06F15/8046Systolic arrays
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/38Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
    • G06F7/48Methods 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/52Multiplying; Dividing
    • G06F7/523Multiplying only
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/3001Arithmetic instructions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30036Instructions to perform operations on packed data, e.g. vector, tile or matrix operations
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30036Instructions to perform operations on packed data, e.g. vector, tile or matrix operations
    • G06F9/30038Instructions to perform operations on packed data, e.g. vector, tile or matrix operations using a mask
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30145Instruction analysis, e.g. decoding, instruction word fields
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N20/00Machine learning
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/06Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons
    • G06N3/063Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons using electronic means
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T1/00General purpose image data processing
    • G06T1/60Memory management
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/04Architecture, e.g. interconnection topology
    • G06N3/045Combinations of networks
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/08Learning methods

Landscapes

  • Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • Theoretical Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Software Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • Mathematical Physics (AREA)
  • Mathematical Analysis (AREA)
  • Pure & Applied Mathematics (AREA)
  • Mathematical Optimization (AREA)
  • Computational Mathematics (AREA)
  • Computing Systems (AREA)
  • Data Mining & Analysis (AREA)
  • Computer Hardware Design (AREA)
  • Databases & Information Systems (AREA)
  • Algebra (AREA)
  • Biomedical Technology (AREA)
  • Artificial Intelligence (AREA)
  • Biophysics (AREA)
  • Evolutionary Computation (AREA)
  • Health & Medical Sciences (AREA)
  • Life Sciences & Earth Sciences (AREA)
  • Medical Informatics (AREA)
  • Computer Vision & Pattern Recognition (AREA)
  • Neurology (AREA)
  • Computational Linguistics (AREA)
  • General Health & Medical Sciences (AREA)
  • Molecular Biology (AREA)
  • Image Generation (AREA)
  • Advance Control (AREA)
  • Complex Calculations (AREA)

Abstract

【課題】スケーラブルなスパース行列乗算を可能にするデバイス、システム及び方法を提供する。【解決手段】ラフィックス・プロセッサ320において、計算アクセラレータ330は、ホスト・インターフェース328と、ホスト・インターフェースに結合された相互接続構造324と、相互接続構造に結合された1つ以上の計算エンジン・タイルと、を含む。1つ以上の計算エンジン・タイルは、フィードバック入力を伴うシストリック・アレイを含むスパース行列乗算加速ハードウェアを含む。【選択図】図3C

Description

関連出願
本願は2020年5月5日付で出願された印国仮特許出願第202041019059号に対する優先権を主張するものであり、この仮特許出願は参照により本願に組み込まれる。
背景技術
機械学習ワークロードで使用されるシストリック行列乗算(Systolic matrix multiplication)は、かなりの割合のゼロを有する(スパース・データ・ワークロードである)。これらのゼロの乗算はスキップされることが可能であり、従って全体的なパフォーマンスが改善される。現在のシストリック・アーキテクチャは、ワークロード内でスパース性のサポートを提供する可能性があるが、そのようなアーキテクチャは適切にスケーリングされない可能性がある。
本実施形態の上記の特徴を詳細に理解することができるように、ここで簡単に要約される実施形態のより詳細な説明は、実施形態を参照することによってもたらされ、そのうちの一部は添付図面に示されている。しかしながら、添付図面は、典型的な実施形態を示すだけであり、従ってその範囲を限定するように解釈されるべきでないことに留意されたい。
一実施形態による処理システムのブロック図である。
本願で説明される実施形態によって提供されるコンピューティング・システム及びグラフィックス・プロセッサを示す。 本願で説明される実施形態によって提供されるコンピューティング・システム及びグラフィックス・プロセッサを示す。 本願で説明される実施形態によって提供されるコンピューティング・システム及びグラフィックス・プロセッサを示す。 本願で説明される実施形態によって提供されるコンピューティング・システム及びグラフィックス・プロセッサを示す。
本願で説明される実施形態によって提供される追加的なグラフィックス・プロセッサ及び計算アクセラレータ・アーキテクチャのブロック図を示す。 本願で説明される実施形態によって提供される追加的なグラフィックス・プロセッサ及び計算アクセラレータ・アーキテクチャのブロック図を示す。 本願で説明される実施形態によって提供される追加的なグラフィックス・プロセッサ及び計算アクセラレータ・アーキテクチャのブロック図を示す。
幾つかの実施形態によるグラフィックス・プロセッサのグラフィックス処理エンジン410のブロック図である。
本願で説明される実施形態によるグラフィックス・プロセッサ・コアで使用される処理要素のアレイを含むスレッド実行ロジックを示す。 本願で説明される実施形態によるグラフィックス・プロセッサ・コアで使用される処理要素のアレイを含むスレッド実行ロジックを示す。
一実施形態による追加的な実行ユニットを示す。
幾つかの実施形態によるグラフィックス・プロセッサ命令フォーマットを示すブロック図である。
他の実施形態によるグラフィックス・プロセッサのブロック図である。
幾つかの実施形態によるグラフィックス・プロセッサのコマンド・フォーマット及びコマンド・シーケンスを示す。 幾つかの実施形態によるグラフィックス・プロセッサのコマンド・フォーマット及びコマンド・シーケンスを示す。
幾つかの実施形態によるデータ処理システムのための例示的なグラフィックス・ソフトウェア・アーキテクチャを示す。
実施形態によるIPコア開発システムを示すブロック図である。
本願で説明される幾つかの実施形態による集積回路パッケージ・アセンブリの側断面図を示す。
基板に接続されたハードウェア論理チップレットの複数のユニットを含むパッケージ・アセンブリを示す。
実施形態による交換可能なチップレットを含むパッケージ・アセンブリを示す。
実施形態により1つ以上のIPコアを使用して製造されることが可能なチップ集積回路における例示的なシステムを示すブロック図である。
本願で説明される実施形態によるSoC内で使用するための例示的なグラフィックス・プロセッサを示すブロック図である。 本願で説明される実施形態によるSoC内で使用するための例示的なグラフィックス・プロセッサを示すブロック図である。
実施形態によるデータ処理システムのブロック図である。
実施形態による命令パイプラインによって実行される行列演算を示す。
パイプライン方式で組織化された乗算器/加算器回路のシストリック・アレイを示す。
8つのシストリック・ステージの等価アレイを計算するために4深層シストリック・アレイを使用することを示す。 8つのシストリック・ステージの等価アレイを計算するために4深層シストリック・アレイを使用することを示す。
シストリック・アーキテクチャの時間ダイアグラムを示す。 シストリック・アーキテクチャの時間ダイアグラムを示す。
各経路が4ステージの深さを有する2経路行列乗算アクセラレータを示す。 各経路が2ステージの深さを有する4経路行列乗算アクセラレータを示す。 フィードバック入力を有するシストリック・アレイを利用するスケーラブル・スパース行列乗算アクセラレータを示す。 スパース・データを含むSrc2入力を示す。 各ステージでフィードバック入力及び出力を有するシストリック・アレイを使用するスケーラブル・スパース行列乗算アクセラレータを示す。 本願で説明されるスケーラブル・スパース行列乗算アクセラレータで動作を実行する方法を示す。 スパースSrc2入力行列を用いて行列乗算演算を実行する方法を示す。 実施形態によるグラフィックス・プロセッサを含むコンピューティング・デバイスのブロック図である。
本願で説明されるものは、フィードバック入力を有するシストリック・アレイを利用するスケーラブルなスパース行列乗算加速を可能にするデバイス、システム、及び方法である。
説明の目的のために、多数の具体的な詳細が、以下に記載される様々な実施形態の完全に理解をもたらすように述べられる。しかしながら、これらの具体的な詳細のうちの一部によらず実施形態が実施されてもよいことは当業者にとって明らかであろう。他の例では、周知の構造及びデバイスは、基本原理を不明瞭にすることを避けるために、及び実施形態のより完全な理解を提供するために、ブロック図形式で示される。以下の実施形態の幾つかは、グラフィックス・プロセッサを参照して説明されるが、本願で説明される技術及び教示は、汎用処理デバイス又はグラフィックス処理デバイスを含む、種々のタイプの回路又は半導体装デバイスに適用されることが可能である。本明細書において、「一実施形態」又は「実施形態」に対する言及は、当該実施形態に関連して又は関連付けられて説明される特定の特長、構造又は特徴が、当該実施形態の少なくとも1つに含まれ得ることを示す。しかしながら、明細書中の様々な箇所における「一実施形態において」という語句の出現は、必ずしも全てが同一の実施形態を指していない。
以下の明細書及び特許請求の範囲において、「結合された」及び「接続された」という用語がそれらの派生語とともに使用される可能性がある。これらの用語は互いに同義語として意図されていないことが理解されるべきである。「結合された」は、互いに直接的に物理的又は電気的に接触していてもいなくてもよい2つ以上の要素が、互いに協働又は相互作用することを示すために使用される。「接続された」は、互いに結合される2つ以上の要素の間での通信の確立を示すために使用される。
以下の説明において、図1ないし13A−13Bは、様々な実施形態を組み込む又は関連する例示的なデータ処理システム及びグラフィックス・プロセッサ・ロジックの概要を提供する。図14−26は様々な実施形態の特定の詳細を提供する。以下の実施形態の幾つかの態様はグラフィックス・プロセッサに関連して説明され、他の態様は中央処理装置(CPU)などの汎用プロセッサに関連して説明される。類似の技術及び教示は他のタイプの回路又は半導体デバイスに適用されることが可能であり、他のタイプのものは、多数・集積コア・プロセッサ、GPUクラスタ、又はフィールド・プログラマブル・ゲート・アレイ(FPGA)の1つ以上のインスタンスを含むが、これらに限定されない。一般に、教示は、画像(例えば、サンプル、ピクセル)、頂点データ、又は幾何学データを操作又は処理する、或いは機械学習及びハイ・パフォーマンス計算アプリケーションのための並列処理演算を実行する、任意のプロセッサ又はマシンに適用可能である。
システム概要
図1は、実施形態による処理システム100のブロック図である。システム100は、シングル・プロセッサ・デスクトップ・システム、マルチプロセッサ・ワークステーション・システム、又は、多数のプロセッサ102又はプロセッサ・コア107を有するサーバー・システムで使用されてもよい。一実施形態では、システム100は、ローカル又はワイド・エリア・ネットワークへの有線又は無線の接続性を有するモノのインターネット(IoT)のデバイス内のようなモバイルの、ハンドヘルドの、又は埋め込み式のデバイスで使用するための、システム・オン・チップ(SoC)集積回路内に組み込まれた処理プラットフォームである。
一実施形態では、システム100は、サーバー・ベースのゲーム・プラットフォーム;ゲーム及びメディア・コンソールを含むゲーム・コンソール;モバイル・ゲーム・コンソール、ハンドヘルド・ゲーム・コンソール、又はオンライン・ゲーム・コンソールを含むこと、それらと結合すること、又はそれらの中に統合されることが可能である。幾つかの実施形態では、システム100は、移動電話、スマート・フォン、タブレット・コンピューティング・デバイス、又は、小さな内部記憶容量しか有しないラップトップのようなモバイル・インターネット接続デバイスの一部である。また、処理システム100は、スマート・ウォッチ・ウェアラブル・デバイスのようなウェアラブル・デバイス;現実世界の視覚、聴覚、又は触覚の体験を補うための、或いはその他の文字、音声、図形、ビデオ、ホログラフィック画像又はビデオ、又は触覚的なフィードバックを提供するための、視覚、聴覚、触覚の出力を提供するための拡張現実(AR)又は仮想現実(VR)機能で強化されたスマート・アイウェア又は衣類;その他の拡張現実(AR)デバイス;又はその他の仮想現実(VR)デバイスを含むこと、それらに結合すること、又はそれらに統合されることが可能である。幾つかの実施形態では、処理システム100は、テレビジョン又はセット・トップ・ボックス・デバイスを含むか、又はその一部である。一実施形態では、システム100は、バス、トラクター・トレーラー、自動車、モーター又は電動自転車、飛行機又はグライダ(又はそれらの任意の組み合わせ)などの自動運転車両を含むこと、それらに結合すること、又はそれらに統合されることが可能である。自動運転車両は、車両の周囲で感知された環境を処理するためにシステム100を使用することが可能である。
一部の実施形態では、1つ以上のプロセッサ102はそれぞれ、実行されるとシステムに対する動作又はユーザー・ソフトウェアに対して実行する命令を処理するために1つ以上のプロセッサ・コア107を含む。幾つかの実施形態では、1つ以上のプロセッサ・コア107のうちの少なくとも1つは、特定の命令セット109を処理するように構成される。幾つかの実施形態において、命令セット109は、複合命令セット計算(CISC)、縮小命令セット計算(RISC)、又は超長命令ワード(VLIW)による計算を促進することができる。1つ以上のプロセッサ・コア107は、他の命令セットのエミュレーションを促進にするための命令を含むことが可能な異なる命令セット109を処理することができる。プロセッサ・コア107はまた、デジタル信号プロセッサ(DSP)などの他の処理デバイスを含んでもよい。
一部の実施形態では、プロセッサ102はキャッシュ・メモリ104を含む。アーキテクチャに応じて、プロセッサ102は、単一の内部キャッシュ又は複数レベルの内部キャッシュを有することが可能である。幾つかの実施形態では、キャッシュ・メモリは、プロセッサ102の様々なコンポーネント間で共有される。幾つかの実施形態では、プロセッサ102はまた、外部キャッシュ(例えば、レベル3(L3)キャッシュ又は最終レベル・キャッシュ(LLC))(図示せず)を使用し、これは既知のキャッシュ・コヒーレンシ技術を使用してプロセッサ・コア107内で共有されることが可能である。レジスタ・ファイル106は、プロセッサ102に追加的に含まれることが可能であり、異なるタイプのデータを格納するための異なるタイプのレジスタ(例えば、整数レジスタ、浮動小数点レジスタ、状態レジスタ、及び命令ポインタ・レジスタ)を含むことができる。幾つかのレジスタは汎用レジスタであってもよく、他のレジスタはプロセッサ102の設計に特有であってもよい。
一部の実施形態では、1つ以上のプロセッサ102は1つ以上のインターフェース・バス110に結合されて、アドレス、データ、又は制御信号などの通信信号を、プロセッサ102とシステム100内の他のコンポーネントとの間で伝送する。インターフェース・バス110は、一実施形態では、ダイレクト・メディア・インターフェース(DMI)バスのバージョンのようなプロセッサ・バスであるとすることが可能である。しかしながら、プロセッサ・バスは、DMIバスに限定されず、1つ以上のペリフェラル・コンポーネント相互接続バス(例えば、PCI、PCIエクスプレス)、メモリ・バス、又は他のタイプのインターフェース・バスを含んでもよい。一実施形態では、プロセッサ102は、集積メモリ・コントローラ116及びプラットフォーム・コントローラ・ハブ130を含む。メモリ・コントローラ116は、メモリ・デバイスとシステム100の他のコンポーネントとの間の通信を容易にし、プラットフォーム・コントローラ・ハブ(PCH)130は、ローカルI/OバスによりI/Oデバイスへの接続を提供する。
メモリ・デバイス120は、ダイナミック・ランダム・アクセス・メモリ(DRAM)デバイス、スタティック・ランダム・アクセス・メモリ(SRAM)デバイス、フラッシュ・メモリ・デバイス、相変化メモリ・デバイス、又は、プロセス・メモリとして機能するのに適したパフォーマンスを有する何らかの他のメモリ・デバイスであるとすることが可能である。一実施形態では、メモリ・デバイス120は、1つ以上のプロセッサ102がアプリケーション又はプロセスを実行する場合に使用するために、データ122及び命令121を格納するように、システム100のシステム・メモリとして動作することができる。メモリ・コントローラ116はまた、プロセッサ102内の1つ以上のグラフィックス・プロセッサ108と通信して、グラフィックス及びメディア操作を実行することが可能なオプションの外部グラフィックス・プロセッサ118と結合する。幾つかの実施形態では、グラフィックス、メディア、及び/又は計算動作は、グラフィックス、メディア、又は計算動作の特化されたセットを実行するように構成されることが可能なコプロセッサであるアクセラレータ112によって支援されてもよい。例えば、一実施形態では、アクセラレータ112は、機械学習又は計算演算を最適化するために使用される行列乗算アクセラレータである。一実施形態では、アクセラレータ112は、グラフィックス・プロセッサ108と協調してレイ・トレーシング処理を実行するために使用されることが可能なレイ・トレーシング・アクセラレータである。一実施形態では、外部アクセラレータ119は、アクセラレータ112の代わりに、又はアクセラレータ112と協調して使用されることが可能である。
一部の実施形態では、ディスプレイ・デバイス111はプロセッサ102に接続されることが可能である。ディスプレイ・デバイス111は、モバイル電子デバイス、ラップトップ・デバイス、又はディスプレイ・インターフェース(例えば、DisplayPortなど)を介して取り付けられた外部ディスプレイ・デバイスのように、1つ以上の内部ディスプレイ・デバイスであるとすることが可能である。一実施形態では、ディスプレイ・デバイス111は、仮想現実(VR)アプリケーション又は拡張現実(AR)アプリケーションで使用するための立体ディスプレイ・デバイスのようなヘッド・マウント・ディスプレイ(HMD)であるとすることが可能である。
一部の実施形態では、プラットフォーム・コントローラ・ハブ130は、周辺機器が、高速I/Oバスを介してメモリ装置120及びプロセッサ102に接続することを可能にする。I/O周辺装置は、オーディオ・コントローラ146、ネットワーク・コントローラ134、ファームウェア・インターフェース128、無線トランシーバ126、タッチ・センサ125、データ記憶装置124(例えば、不揮発性メモリ、揮発性メモリ、ハード・ディスク・ドライブ、フラッシュ・メモリ、NAND、3D NAND、3D XPointなど)を含むが、これらに限定されない。データ記憶装置124は、記憶インターフェース(例えば、SATA)を介して、又はペリフェラル・コンポーネント・インターコネクト・バス(例えば、PCI、PCIエクスプレス)などの周辺バスを介して接続することができる。タッチ・センサ125は、タッチ・スクリーン・センサー、圧力センサー、又は指紋センサーを含むことができる。無線トランシーバ126は、Wi−Fiトランシーバ、ブルートゥース(登録商標)・トランシーバ、又は、3G、4G、5G、ロング・ターム・エボリューション(LTE)トランシーバのような移動ネットワーク・トランシーバであるとすることができる。ファームウェア・インターフェース128は、システム・ファームウェアとの通信を可能にし、例えば、統一された拡張可能なファームウェア・インターフェース(UEFI)であるとすることが可能である。ネットワーク・コントローラ134は、有線ネットワークへのネットワーク接続を可能にすることができる。幾つかの実施形態では、ハイ・パフォーマンス・ネットワーク・コントローラ(図示せず)がインターフェース・バス110に結合する。オーディオ・コントローラ146は、一実施形態では、マルチ・チャネル・ハイ・デフィニジョン・オーディオ・コントローラである。一実施形態では、システム100は、レガシー(例えば、パーソナル・システム2(PS/2))装置をシステムに結合するためのオプションのレガシーI/Oコントローラ140を含む。プラットフォーム・コントローラ・ハブ130はまた、1つ以上のユニバーサル・シリアル・バス(USB)コントローラ142に接続することができ、キーボード及びマウス143の組み合わせ、カメラ144、又は他のUSB入力装置などの入力装置を接続することができる。
別様に構成された他のタイプのデータ処理システムが使用されてもよいので、図示されているシステム100は、例示的であり、限定的ではないことが理解されるであろう。例えば、プラットフォーム・コントローラ・ハブ130及びメモリ・コントローラ116のインスタンスは、外部グラフィックス・プロセッサ118のような個別の外部グラフィックス・プロセッサに統合されてもよい。一実施形態では、プラットフォーム・コントローラ・ハブ130及び/又はメモリ・コントローラ116は、1つ以上のプロセッサ102の外部にあってもよい。例えば、システム100は、外部メモリ・コントローラ116及びプラットフォーム・コントローラ・ハブ130を含むことが可能であり、これらは、プロセッサ102と通信するシステム・チップセット内のメモリ・コントローラ・ハブ及び周辺機器コントローラ・ハブとして構成することができる。
例えば、CPU、メモリ、及びその他のコンポーネント等のコンポーネントが配置される回路基板(スレッド)は、上昇する熱特性に対して設計される。幾つかの例では、プロセッサなどの処理コンポーネントは、スレッドのトップ側に配置されるが、DIMMなどのメモリ近辺は、スレッドのボトム側に配置される。この設計によって提供される空気流の増大の結果として、コンポーネントは、典型的なシステムにおける場合よりも高い周波数及び電力レベルで動作することが可能であり、それによってパフォーマンスを向上させることができる。更に、スレッドは、ラック内の電力及びデータ通信ケーブルと手放しに嵌合するように構成され、それによって、スレッドを迅速に取り外し、アップグレードし、再設置し、及び/又は交換する能力を高める。同様に、プロセッサ、アクセラレータ、メモリ、及びデータ記憶ドライブのような、スレッド上に配置される個々のコンポーネントは、互いの間隔が増加することに起因して、容易にアップグレードされるように構成される。例示的な実施形態では、コンポーネントは、更に、それらの真正性を証明するためのハードウェア認証機能を含む。
データ・センターは、イーサネット及びオムニ・パス(Omni−Path)を含む複数の他のネットワーク・アーキテクチャをサポートする単一のネットワーク・アーキテクチャ(「ファブリック」)を利用することができる。スレッドは、典型的なツイスト・ペア・ケーブル(例えば、カテゴリ5、カテゴリ5e、カテゴリ6など)よりも高い帯域幅及び短い待ち時間を提供する光ファイバを介してスイッチに結合されることが可能である。高帯域幅、低遅延の相互接続及びネットワーク・アーキテクチャに起因して、データ・センターは、使用時に、メモリ、アクセラレータ(例えば、GPU、グラフィックス・アクセラレータ、FPGA、ASIC、ニューラル・ネットワーク、及び/又は人工知能アクセラレータ等)、及び、物理的に分解されたデータ記憶ドライブのようなリソースをプールし、必要に応じて計算リソース(例えば、プロセッサ)にそれらを提供し、その計算リソースが、あたかもローカルであるかのように、プールされたリソースにアクセスすることを可能にする。
電源供給又は電源は、電圧及び/又は電流を、システム100又は本願で説明される任意のコンポーネント又はシステムに提供することができる。一例では、電源は、壁コンセントに差し込むためのAC−DC(交流−直流)アダプタを含む。このようなAC電力は、再生可能エネルギ(例えば、ソーラー・パワー)電力源であるとすることが可能である。一例では、電源は、外部AC−DCコンバータのようなDC電源を含む。一例では、電力源又は電源供給は、充電フィールドの近傍により充電するための無線充電ハードウェアを含む。一例では、電源は、内部バッテリ、交流電源、運動に基づく電源、ソーラー・パワー電源、又は燃料電池電源を含むことが可能である。
図2A−2Dは、本願で説明する実施形態によって提供されるコンピューティング・システム及びグラフィックス・プロセッサを示す。本願の何らかの他の図中の要素と同じ参照番号(又は名称)を有する図2A−2Dの要素は、本願の他の箇所で説明されているものと同様の方法な何らかの方法で動作又は機能することが可能であるが、そのようには限定されない。
図2Aは、1つ又は複数のプロセッサ・コア202A−202N、統合メモリ・コントローラ214、及び統合グラフィックス・プロセッサ208を有するプロセッサ200の実施形態のブロック図である。プロセッサ200は、破線ボックスによって表現される追加のコア202Nまでの追加のコアを含み、それを含むことが可能である。プロセッサ・コア202A−202Nの各々は、1つ以上の内部キャッシュ・ユニット204A−204Nを含む。幾つかの実施形態では、各プロセッサ・コアはまた、1つ以上の共用キャッシュ・ユニット206へのアクセスを有する。内部キャッシュ・ユニット204A−204N及び共用キャッシュ・ユニット206は、プロセッサ200内のキャッシュ・メモリ階層を表現する。キャッシュ・メモリ階層は、各プロセッサ・コア内の命令及びデータ・キャッシュの少なくとも1つのレベルと、レベル2(L2)、レベル3(L3)、レベル4(L4)などの共有される中間レベルのキャッシュの1つ以上のレベルと、他のキャッシュ・レベルとを含んでもよく、ここで、外部メモリより前のキャッシュの最高レベルはLLCとして分類される。幾つかの実施形態では、キャッシュ・コヒーレンス・ロジックは、種々のキャッシュ・ユニット206と204A−204Nとの間のコヒーレンス性を維持する。
一部の実施形態では、プロセッサ200は、1つ以上のバス・コントローラ・ユニット216、及びシステム・エージェント・コア210のセットを含んでもよい。1つ又は複数のバス・コントローラ・ユニット216は、1つ又は複数のPCI又はPCIエクスプレス・バスのような一組のペリフェラル・バスを管理する。システム・エージェント・コア210は、様々なプロセッサ・コンポーネントの管理機能を提供する。幾つかの実施形態では、システム・エージェント・コア210は、様々な外部メモリ・デバイス(図示せず)へのアクセスを管理するために、1つ以上の集積メモリ・コントローラ214を含む。
幾つかの実施形態では、1つ以上のプロセッサ・コア202A−202Nは、同時マルチ・スレッディングのためのサポートを含む。このような実施形態では、システム・エージェント・コア210は、マルチ・スレッド処理中にコア202A−202Nを調整及び動作させるためのコンポーネントを含む。システム・エージェント・コア210は、更に、プロセッサ・コア202A−202N及びグラフィックス・プロセッサ208の電力状態を調整するためのロジック及びコンポーネントを含む電力制御ユニット(PCU)を含んでもよい。
一部の実施形態では、プロセッサ200は、グラフィックス処理動作を実行するために、グラフィックス・プロセッサ208を更に含む。幾つかの実施形態では、グラフィックス・プロセッサ208は、1つ以上の集積メモリ・コントローラ214を含む、一組の共有キャッシュ・ユニット206及びシステム・エージェント・コア210と結合する。幾つかの実施形態では、システム・エージェント・コア210はまた、グラフィックス・プロセッサ出力を、1つ以上の結合されたディスプレイに対して駆動するディスプレイ・コントローラ211を含む。幾つかの実施形態において、ディスプレイ・コントローラ211はまた、少なくとも1つの相互接続を介してグラフィックス・プロセッサに結合された別個のモジュールであってもよく、又はグラフィックス・プロセッサ208内に統合されてもよい。
幾つかの実施形態では、リング・ベースの相互接続ユニット212が、プロセッサ200の内部コンポーネントを結合するために使用される。しかしながら、別の相互接続ユニット、例えばポイント・ツー・ポイント相互接続、スイッチド相互接続、又は当技術分野で周知の技術を含む他の技術が使用されてもよい。幾つかの実施形態では、グラフィックス・プロセッサ208は、I/Oリンク213を介してリング相互接続212と結合する。
例示的なI/Oリンク213は、種々のプロセッサ・コンポーネントとeDRAMモジュールなどの高性能埋め込みメモリ・モジュール218との間の通信を促進するオンパッケージI/O相互接続を含む、複数の種類のI/O相互接続のうちの少なくとも1つを表現する。幾つかの実施形態では、プロセッサ・コア202A−202N及びグラフィックス・プロセッサ208のそれぞれは、共有される最終レベル・キャッシュとして埋め込みメモリ・モジュール218を使用することができる。
幾つかの実施形態では、プロセッサ・コア202A−202Nは、同一の命令セット・アーキテクチャを実行するホモジーニアス・コアである。別の実施形態では、プロセッサ・コア202A−202Nは、命令セット・アーキテクチャ(ISA)に関してヘテロジニアスであり、プロセッサ・コア202A−202Nのうちの1つ以上は、第1命令セットを実行し、他のコアのうちの少なくとも1つは、第1命令セットのサブセット又は異なる命令セットを実行する。一実施形態では、プロセッサ・コア202A−202Nは、マイクロアーキテクチャに関してヘテロジニアスであり、比較的高い電力消費を有する1つ以上のコアは、より低い電力消費を有する1つ以上の電力コアと結合する。一実施形態では、プロセッサ・コア202A−202Nは、計算能力に関してヘテロジニアスである。更に、プロセッサ200は、他のコンポーネントに加えて、図示のコンポーネントを有する1つ以上のチップ又はSoC集積回路として実装することができる。
図2Bは、本願で説明される幾つかの実施形態によるグラフィックス・プロセッサ・コア219のハードウェア・ロジックのブロック図である。本願の任意の他の図面の要素と同じ参照番号(又は名称)を有する図2Bの要素は、本願の他の箇所に記載されるものと同様の何らかの方法で動作又は機能することが可能であるが、それに限定されない。グラフィックス・プロセッサ・コア219は、しばしばコア・スライスと呼ばれることもあり、モジュラ・グラフィックス・プロセッサ内の1つ又は複数のグラフィックス・コアであるとすることが可能である。グラフィックス・プロセッサ・コア219は、1つのグラフィックス・コア・スライスの例であり、本願で説明するようなグラフィックス・プロセッサは、ターゲット・パワー及びパフォーマンス・エンベロープに基づく複数のグラフィックス・コア・スライスを含んでもよい。各グラフィックス・プロセッサ・コア219は、サブ・スライスとも呼ばれる複数のサブ・コア221A−221Fと結合された固定機能ブロック230を含むことが可能であり、固定機能ブロックは、汎用及び固定機能ロジックのモジュラ・ブロックを含む。
幾つかの実施形態では、固定機能ブロック230は、グラフィックス・プロセッサ・コア219内の全てのサブ・コアによって、例えば、低パフォーマンス及び/又は低電力グラフィックス・プロセッサの実装において共有されることが可能なジオメトリ/固定機能パイプライン231を含む。様々な実施形態では、ジオメトリ/固定機能パイプライン231は、ビデオ・フロント・エンド・ユニット、スレッド・スパウナ(spawner)及びスレッド・ディスパッチャ、及び統一リターン・バッファを管理する統一リターンバッファマネージャ(例えば、後述するような図4の統一リターン・バッファ418)を含む、3D固定機能パイプライン(例えば、図3A及び図4のような3Dパイプライン312)を含む。
一実施形態では、固定機能ブロック230は、グラフィックスSoCインターフェース232、グラフィックス・マイクロコントローラ233、及びメディア・パイプライン234も含む。グラフィックスSoCインターフェース232は、チップ集積回路上のシステム内のグラフィックス・プロセッサ・コア219と他のプロセッサ・コアとの間のインターフェースを提供する。グラフィックス・マイクロコントローラ233は、スレッド・ディスパッチ、スケジューリング、及びプリエンプションを含むグラフィックス・プロセッサ・コア219の様々な機能を管理するように構成することが可能なプログラマブル・サブ・プロセッサである。メディア・パイプライン234(例えば、図3A及び図4のメディア・パイプライン316)は、画像及びビデオ・データを含むマルチ・メディア・データの復号化、符号化、前処理、及び/又は後処理を促進するロジックを含む。メディア・パイプライン234は、サブ・コア221−221F内の計算又はサンプリング・ロジックのための要求を介してメディア処理を実行する。
一実施形態では、SoCインターフェース232は、グラフィックス・プロセッサ・コア219が、共有最終レベル・キャッシュ・メモリ、システムRAM、及び/又は埋込みオンチップ又はオンパッケージDRAMなどのメモリ階層要素を含む、SoC内の汎用アプリケーション・プロセッサ・コア及び/又はその他のコンポーネントと通信することを可能にする。また、SoCインターフェース232は、カメラ撮像パイプラインのようなSoC内の固定機能デバイスとの通信を可能にし、SoC内のCPUとグラフィックス・プロセッサ・コア219との間で共有されることが可能なグローバル・メモリ・アトミクスの使用を可能にし、及び/又は実施する。また、SoCインターフェース232は、グラフィックス・プロセッサ・コア219のための電力管理制御を実装し、グラフィック・コア219のクロック・ドメインとSoC内の他のクロック・ドメインとの間のインターフェースを可能にすることができる。一実施形態では、SoCインターフェース232は、グラフィックス・プロセッサ内の1つ以上のグラフィックス・コアの各々にコマンド及び命令を提供するように構成されたコマンド・ストリーマ及びグローバル・スレッド・ディスパッチャからのコマンド・バッファの受信を可能にする。コマンド及び命令は、メディア操作が実行される場合にはメディア・パイプライン234へ、グラフィックス処理操作が実行される場合にはジオメトリ及び固定機能パイプラインへ(例えば、ジオメトリ及び固定機能パイプライン231、ジオメトリ及び固定機能パイプライン237へ)ディスパッチされることができる。
グラフィックス・マイクロコントローラ233は、グラフィックス・プロセッサ・コア219に対する様々なスケジューリング及び管理タスクを実行するように構成されることができる。一実施形態では、グラフィックス・マイクロコントローラ233は、サブ・コア221A−221F内の実行ユニット(EU)アレイ222A−222F、224A−224F内の種々のグラフィックス並列エンジンにおけるグラフィックス及び/又は計算ワークロード・スケジューリングを実行することができる。このスケジューリング・モデルでは、グラフィックス・プロセッサ・コア219を含むSoCのCPUコア上で実行されるホスト・ソフトウェアは、適切なグラフィックス・エンジンでスケジューリング動作を起動する複数のグラフィックス・プロセッサ・ドアのうちの1つのワークロードをサブミットすることができる。スケジューリング動作は、次に動作させるワークロードを決定すること、コマンド・ストリーマにワークロードをサブミットすること、エンジンにおいて実行している既存のワークロードをプリエンプトすること、ワークロードの進行をモニタリングすること、及び、ワークロードが完了したときにホスト・ソフトウェアに通知すること、を含む。一実施形態では、グラフィックス・マイクロコントローラ233はまた、グラフィックス・プロセッサ・コア219の低電力又はアイドル状態を促進することができ、システムのオペレーティング・システム及び/又はグラフィックス・ドライバ・ソフトウェアから独立して、低電力状態遷移にわたってグラフィックス・プロセッサ・コア219内のレジスタを保存及び復元する能力を、グラフィックス・プロセッサ・コア219に提供することができる。
グラフィックス・プロセッサ・コア219は、図示のサブ・コア221A−221Fより多くても少なくてもよく、高々N個のモジュール式サブ・コアを有する可能性がある。N個のサブ・コアの各セットについて、グラフィックス・プロセッサ・コア219はまた、共有機能ロジック235、共有及び/又はキャッシュ・メモリ236、ジオメトリ/固定機能パイプライン237、並びに、種々のグラフィックスを加速し及び処理動作を計算するための追加的な固定機能ロジック238も含むことができる。共有機能ロジック235は、グラフィックス・プロセッサ・コア219内のN個のサブ・コア各々によって共有されることが可能な図4の共有機能ロジック420に関連する論理ユニット(例えば、サンプラ、数学、及び/又はスレッド間通信ロジック)を含むことができる。共有及び/又はキャッシュ・メモリ236は、グラフィックス・プロセッサ・コア219内のN個のサブ・コア221A−221Fのセットのための最終レベルのキャッシュであるとすることができ、複数のサブ・コアによってアクセス可能な共有メモリとして機能することもできる。ジオメトリ/固定機能パイプライン237は、固定機能ブロック230内のジオメトリ/固定機能パイプライン231の代わりに包含されることが可能であり、同一又は類似の論理ユニットを含むことができる。
一実施形態では、グラフィックス・プロセッサ・コア219は、グラフィックス・プロセッサ・コア219によって使用される種々の固定機能加速ロジックを含むことが可能な追加の固定機能ロジック238を含む。一実施形態では、追加の固定機能ロジック238は、ポジション・オンリー・シェーディングで使用するための追加の幾何学的パイプラインを含む。ポジション・オンリー・シェーディングでは、2つのジオメトリ・パイプラインが存在し、ジオメトリ/固定機能パイプライン238、231内のフル(full)ジオメトリ・パイプラインと、追加の固定機能ロジック238内に含まれ得る追加のジオメトリ・パイプラインであるカル(cull)パイプラインとである。一実施形態では、カル・パイプラインは、フル・ジオメトリ・パイプラインのトリミング・ダウンされたバージョンである。フル・パイプライン及びカル・パイプラインは、同一アプリケーションの異なるインスタンスを実行することができ、各インスタンスは別々のコンテキストを有する。ポジション・オンリー・シェーディングは、廃棄された三角形の長期のカル処分(long cull runs)を隠すことができ、場合によっては、シェーディングがより早期に完了することを可能にする。例えば一実施形態では、追加の固定機能ロジック238内のカル・パイプライン・ロジックは、メイン・アプリケーションと並列的にポジション・シェーダーを実行することができ、一般に、カル・パイプラインは、ピクセルのフレーム・バッファへのラスタライゼーション及びレンダリングを行うことなく、頂点の位置属性のみをフェッチし及びシェーディングするので、フル・パイプラインよりも速く、クリティカルな結果を生成する。カル・パイプラインは、生成されたクリティカルな結果を使用して、それらの三角形が選別されるかどうかによらず、全ての三角形に対する視認情報を計算することができる。フル・パイプライン(この例では、再生パイプラインと言及されてもよい)は、最終的にラスタライゼーション・フェーズに渡される可視三角形のみを遮蔽するために、選別された三角形をスキップするように、視認情報を使うことができる。
一実施形態では、追加の固定機能ロジック238は、機械学習トレーニング又は推論のための最適化を含む実装のために、固定機能行列乗算ロジックのような機械学習加速ロジックを含むこともできる。
各グラフィックス・サブ・コア221A−221F内には一組の実行リソースが含まれ、それは、グラフィックス・パイプライン、メディア・パイプライン、又はシェーダー・プログラムによる要求に応じて、グラフィックス、メディア、及び計算の演算を実行するために使用されることが可能である。グラフィックス・サブ・コア221A−221Fは、複数のEUアレイ222A−222F、224A−224F、スレッド・ディスパッチ及びスレッド間通信(TD/IC)ロジック223A−223F、3D(例えば、テクスチャ)サンプラ225A−225F、メディア・サンプラ206A−206F、シェーダー・プロセッサ227A−227F、及び共有ローカル・メモリ(SLM)228A−228Fを含む。EUアレイ222A−222F、224A−224Fは、各々、複数の実行ユニットを含み、これらは、グラフィックス、メディア、又は計算の演算のサービスにおいて、グラフィックス、メディア、又は計算のシェーダー・プログラムを含む浮動小数点及び整数/固定小数点論理演算を実行することが可能な汎用のグラフィックス処理ユニットである。TD/ICロジック223A−223Fは、サブ・コア内の実行ユニットに対するローカル・スレッド・ディスパッチ及びスレッド制御動作を実行し、サブ・コアの実行ユニットで実行されるスレッド間の通信を促進する。3Dサンプラ225A−225Fは、テクスチャ又はその他の3Dグラフィックス関連データをメモリに読み込むことができる。3Dサンプラは、設定されたサンプル状態と、所与のテクスチャに関連するテクスチャ・フォーマットとに基づいて、テクスチャ・データを別様に読み込むことができる。メディア・サンプラ206A−206Fは、メディア・データに関連するタイプ及びフォーマットに基づいて、同様な読み込み動作を実行することができる。一実施形態では、各グラフィックス・サブ・コア221A−221Fは、代替的に、統一された3D及びメディア・サンプラを含むことができる。各サブ・コア221A−221F内の実行ユニットで実行されるスレッドは、各サブ・コア内の共有ローカル・メモリ228A−228Fを使用して、スレッド・グループ内で実行されるスレッドが、オンチップ・メモリの共通プールを使用して実行できるようにすることができる。
図2Cは、マルチ・コア・グループ240A−240Nに配置されたグラフィックス処理リソースの専用セットを含むグラフィックス処理ユニット(GPU)239を示す。単一のマルチ・コア・グループ240Aのみの詳細が提供されているが、他のマルチ・コア・グループ240B−240Nは、同じ又は類似のグラフィックス処理リソースのセットを備える可能性があることを理解されたい。
図示のように、マルチ・コア・グループ240Aは、一組のグラフィックス・コア243、一組のテンソル・コア244、及び一組のレイ・トレーシング・コア245を含み得る。スケジューラ/ディスパッチャ241は、種々のコア243、244、245上で実行するためにグラフィックス・スレッドをスケジューリングし、ディスパッチする。一組のレジスタ・ファイル242は、グラフィックス・スレッドを実行する場合に、コア243、244、245によって使用されるオペランド値を記憶する。これらは、例えば、整数値を記憶するための整数レジスタ、浮動小数点値を記憶するための浮動小数点レジスタ、パックされたデータ要素(整数及び/又は浮動小数点データ要素)を記憶するためのベクトル・レジスタ、及び、テンソル/行列値を記憶するためのタイル・レジスタを含んでもよい。一実施形態では、タイル・レジスタは、ベクトル・レジスタの組み合わせられたセットとして実装される。
1つ以上の結合レベル1(L1)キャッシュ及び共有メモリ・ユニット247は、テクスチャ・データ、頂点データ、ピクセル・データ、光線データ、境界ボリューム・データなどのグラフィックス・データを、各マルチ・コア・グループ240A内にローカルに記憶する。1つ以上のテクスチャ・ユニット247を使用して、テクスチャ・マッピング及びサンプリングなどのテクスチャリング操作を実行することもできる。マルチ・コア・グループ240A−240Nの全て又はサブセットによって共有されるレベル2(L2)キャッシュ253は、複数の同時グラフィックス・スレッドのためのグラフィックス・データ及び/又は命令を格納する。図示のように、L2キャッシュ253は、複数のマルチ・コア・グループ240A−240Nにわたって共有されてもよい。1つ以上のメモリ・コントローラ248は、GPU 239を、システム・メモリ(例えば、DRAM)及び/又は専用グラフィックス・メモリ(例えば、GDDR6メモリ)である可能性があるメモリ249に結合する。
入出力(I/O)回路250は、GPU239を、デジタル信号プロセッサ(DSP)、ネットワーク・コントローラ、又はユーザー入力装置などの1つ以上の入出力装置252に結合する。オンチップ相互接続を使用して、I/Oデバイス252をGPU239及びメモリ249に結合することができる。I/O回路250の1つ以上のI/Oメモリ管理ユニット(IOMMU)251は、I/O装置252を、システム・メモリ249に直接的に結合する。一実施形態では、IOMMU251は、仮想アドレスをシステム・メモリ249内の物理アドレスにマッピングするために、ページ・テーブルの複数のセットを管理する。この実施形態では、I/O装置252、CPU246、及びGPU239は、同じ仮想アドレス空間を共有してもよい。
ある実装では、IOMMU251は仮想化をサポートしている。この場合、ゲスト/グラフィックスの仮想アドレスを、ゲスト/グラフィックスの物理アドレスにマッピングするためのページ・テーブルの第1セットと、ゲスト/グラフィックスの物理アドレスを、システム/ホストの物理アドレスに(例えば、システム・メモリ249内に)マッピングするためのページ・テーブルの第2セットとを管理することができる。ページ・テーブルの第1及び第2セット各々のベース・アドレスは、制御レジスタに記憶され、コンテキスト・スイッチで交換されることが可能である(例えば、その結果、新しいコンテキストがページ・テーブルの関連するセットへのアクセスに提供される)。図2Cには示されていないが、コア243、244、245、及び/又はマルチ・コア・グループ240A−240Nの各々は、ゲスト仮想からゲスト物理への変換、ゲスト物理からゲスト仮想への変換、及びゲスト仮想からホスト物理への変換をキャッシュするための変換ルックアサイド・バッファ(TLB)を含むことが可能である。
一実施形態では、CPU246、GPU239、及びI/Oデバイス252は、単一の半導体チップ及び/又はチップ・パッケージに集積される。図示されたメモリ249は、同じチップ上に集積されてもよいし、或いはオフチップ・インターフェースを介してメモリ・コントローラ248に結合されてもよい。1つの実装では、メモリ249は、他の物理システム・レベルのメモリと同じ仮想アドレス空間を共有するGDDR6メモリを含むが、本発明の基礎となる原理は、この特定の実装に限定されない。
一実施形態では、テンソル・コア244は、ディープ・ラーニング演算を実行するために使用される基本的な計算演算である行列演算を実行するように、特に設計された複数の実行ユニットを含む。例えば、同時行列乗算演算は、ニューラル・ネットワーク・トレーニング及び推論のために使用されることが可能である。テンソル・コア244は、単精度浮動小数点(例えば、32ビット)、半精度浮動小数点(例えば、16ビット)、整数ワード(16ビット)、バイト(8ビット)、及び半バイト(4ビット)を含む種々のオペランド精度を使用して行列処理を実行することができる。一実施形態では、ニューラル・ネットワークの実装は、複数のフレームからの詳細を潜在的に組み合わせて、レンダリングされた各シーンの特徴を抽出し、高品質の最終画像を構築する。
ディープ・ラーニングの実装では、並列行列乗算作業はテンソル・コア244での実行のためにスケジューリングされてもよい。ニューラル・ネットワークのトレーニングは、特に、かなりの数の行列ドット積演算を必要とする。N×N×N行列乗算の内積公式を処理するために、テンソル・コア244は、少なくともN個のドット積処理要素を含む可能性がある。行列乗算が始まる前に、1つの行列全体がタイル・レジスタにロードされ、第2行列の少なくとも1つの列が、Nサイクルの各サイクルでロードされる。サイクル毎に、処理されたN個のドット積が存在する。
行列要素は、16ビット・ワード、8ビット・バイト(例えばINT8)、4ビット半バイト(例えばINT4)を含む、特定の実装に応じて異なる精度で格納されることが可能である。様々なワークロード(例えば、バイト及び半バイトへの量子化に耐えることが可能な推論ワークロードなど)に対して最も効率的な精度が使用されることを保証するために、異なる精度のモードがテンソル・コア244に指定されてもよい。
一実施形態では、レイ・トレーシング・コア245は、リアルタイム・レイ・トレーシング及び非リアルタイム・レイ・トレーシング実装の両方のためのレイ・トレーシング動作を加速する。特に、レイ・トレーシング・コア245は、境界ボリューム階層(BVH)を使用してレイ・トラバースを実行し、BVHボリュームで囲まれた光線とプリミティブとの間の交わりを識別するためのレイ・トラバース/交わり回路を含む。レイ・トレーシング・コア245はまた、深度テスト及び選別を(例えば、Zバッファ又は同様の構成を使用して)実行するための回路を含んでもよい。一実施形態では、レイ・トレーシング・コア245は、本願で説明される画像ノイズ除去技術と協調して横断及び交差動作を行い、そのうちの少なくとも一部はテンソル・コア244で実行されてもよい。例えば、一実施形態では、テンソル・コア244は、レイ・トレーシング・コア245によって生成されたフレームのノイズ除去を実行するために、深層学習ニューラル・ネットワークを実装する。しかしながら、CPU246、グラフィックス・コア243、及び/又はレイ・トレーシング・コア245は、ノイズ除去及び/又はディープ・ラーニング・アルゴリズムの全部又は一部を実装することもできる。
更に、上述のように、GPU239がネットワーク又は高速相互接続を介して他のコンピューティング・デバイスに結合されたコンピューティング・デバイス内にある場合には、ノイズ除去の分散アプローチが使用されてもよい。この実施形態では、相互接続されたコンピューティング・デバイスは、ニューラル・ネットワーク学習/トレーニング・データを共有して、異なるタイプの画像フレーム及び/又は異なるグラフィックス・アプリケーションに対してノイズ除去を実行するために システム全体が学習する速度を改善する。
一実施形態では、レイ・トレーシング・コア245は、全てのBVHトラバース及び光線−プリミティブ交差を処理し、グラフィックス・コア243が、光線当たり数千の命令で過負荷になるのを防ぐ。一実施形態では、各々のレイ・トレーシング・コア245は、境界ボックス・テスト(例えば、横断動作)を実施するための特殊回路の第1セットと、光線−三角形交差テスト(例えば、横切った交差光)を実行するための特殊回路の第2セットとを含む。従って、一実施形態では、マルチ・コア・グループ240Aは、単に光線プローブを開始することができ、レイ・トレーシング・コア245は、独立して光線の横断及び交差を実行し、ヒット・データ(例えば、ヒット、ノー・ヒット、マルチ・ヒットなど)をスレッド・コンテキストに返す。他のコア243、244は、レイ・トレーシング・コア245が横断及び交差動作を実行する場合、他のグラフィックスを実行するか、又は他の作業を計算するために解放される。
一実施形態では、各々のレイ・トレーシング・コア245は、BVHテスト動作を実行するための横断ユニットと、光線−プリミティブ交差テストを実行する交差ユニットとを含む。交差ユニットは「ヒット」、「ノー・ヒット」、又は「マルチ・ヒット」の応答を生成し、それを適切なスレッドに提供する。横断及び交差動作の間に、他のコア(例えば、グラフィックス・コア243及びテンソル・コア244)の実行リソースは、他の形態のグラフィックス作業を実行するために解放される。
以下に説明される特定の一実施形態では、作業がグラフィックス・コア243とレイ・トレーシング・コア245との間で分配されるハイブリッド・ラスタライゼーション/レイ・トレーシング・アプローチが使用される。
一実施形態では、レイ・トレーシング・コア245(及び/又は他のコア243、244)は、DispatchRaysコマンドを含むマイクロソフトのDirectX Ray Tracing(DXR)、及び、光線生成、最近接ヒット、任意ヒット、及びミス・シェーダーのようなレイ・トレーシング命令セットのためのハードウェア・サポートを含み、それは各オブジェクトに対するシェーダー及びテクスチャの固有のセットの割り当てを可能にする。レイ・トレーシング・コア245、グラフィックス・コア243、及びテンソル・コア244によってサポートされ得る別のレイ・トレーシング・プラットフォームは、Vulkan1.1.85である。しかしながら、本発明の基本原理は、特定のレイ・トレーシングISAに限定されない。
一般に、種々のコア245、244、243は、光線生成、最近接ヒット、任意ヒット、光線−プリミティブ交差、プリミティブ及び階層関連の境界ボックス構成、ミス、ビジット、及び例外、に関する命令/機能を含むレイ・トレーシング命令セットをサポートすることができる。より具体的には、一実施形態は以下の機能を実行するためのレイ・トレーシング命令を含む:
光線生成 − 光線生成命令は、各ピクセル、サンプル、又は他のユーザー定義の作業割り当てに対して実行されることが可能である。
最近接ヒット − 最近接ヒット命令は、シーン内のプリミティブを有する光線の最も近い交点を発見するために実行されることが可能である。
任意ヒット − 任意ヒット命令は、シーン内の光線とプリミティブとの間の複数の交点を識別し、潜在的に新しい最も近い交点を識別する。
交差 − 交差命令は、光線−プリミティブ交差テストを行い、結果を出力する。
プリミティブ関連境界ボックス構成 − この命令は、(例えば、新しいBVH又は他の加速データ構造を構築する場合に)所与のプリミティブ又はプリミティブのグループ周囲に境界ボックスを構築する。
ミス − 光線がシーン内の全てのジオメトリ、又はシーンの特定の領域にミスヒットであることを示す。
ビジット − 光線が横切ることになる子ボリュームを示す。
例外 − 様々なタイプの例外処理を含む(様々なエラー条件に対して呼び出される)。
図2Dは、本願で説明される実施形態に従って、グラフィックス・プロセッサ及び/又はコンピュータ・アクセラレータとして構成することが可能な汎用グラフィックス処理ユニット(GPGPU)270のブロック図である。GPGPU270は、1つ以上のシステム及び/又はメモリ・バスを介して、ホスト・プロセッサ(例えば、1つ以上のCPU246)及びメモリ271、272と相互接続することができる。一実施形態では、メモリ271は、1つ又は複数のCPU246と共有される可能性があるシステム・メモリであり、メモリ272は、GPGPU270専用のデバイス・メモリである。一実施形態では、GPGPU270及びデバイス・メモリ272内のコンポーネントは、1つ又は複数のCPU246にアクセスすることが可能なメモリ・アドレスにマッピングされてもよい。メモリ271及び272へのアクセスは、メモリ・コントローラ268により促進されることが可能である。一実施形態では、メモリ・コントローラ268は、内部直接メモリ・アクセス(DMA)コントローラ269を含むか、或いは動作を実行するためのロジックを含むことが可能であり、そうでなければその動作はDMAコントローラによって実行されるであろう。
GPGPU270は、L2キャッシュ253、L1キャッシュ254、命令キャッシュ255、及び共有メモリ256を含む複数のキャッシュ・メモリを含み、そのうちの少なくとも一部がキャッシュ・メモリとして区分けされてもよい。GPGPU270はまた、複数の計算ユニット260A−260Nを含む。各コンピュータ・ユニット260A−260Nは、ベクトル・レジスタ261、スカラ・レジスタ262、ベクトル論理ユニット263、及びスカラ論理ユニット264のセットを含む。計算ユニット260A−260Nはまた、ローカル共用メモリ265及びプログラム・カウンタ266を含むことも可能である。計算ユニット260A−260Nは、コンスタント・キャッシュ267と結合することが可能であり、コンスタント・キャッシュ267は、GPGPU270上で実行されるカーネル又はシェーダー・プログラムの実行中に変化しないデータである定数データを格納するために使用されることが可能である。一実施形態では、コンスタント・キャッシュ267は、スカラ・データ・キャッシュであり、キャッシュされたデータは、スカラ・レジスタ262に直接的にフェッチされることが可能である。
動作中、1つ以上のCPU(複数可)246は、アクセス可能なアドレス空間にマップされるGPGPU270内のレジスタ又はメモリに、コマンドを書き込むことができる。コマンド・プロセッサ257は、レジスタ又はメモリからコマンドを読み込み、これらのコマンドがGPGPU270内でどのように処理されるかを決定することができる。次いで、スレッド・ディスパッチャ258は、スレッドを計算ユニット260A−260Nにディスパッチして、これらのコマンドを実行することができる。各計算ユニット260A−260Nは、他の計算ユニットとは独立してスレッドを実行することができる。更に、各々の計算ユニット260A−260Nは、条件付きの計算のために独立して構成されることが可能であり、計算結果をメモリに条件付きで出力することができる。コマンド・プロセッサ257は、サブミットされたコマンドが完了した場合に、1つ以上のCPU246を中断することができる。
図3A−3Cは、本願で説明する実施形態によって提供される追加のグラフィックス・プロセッサ及び計算アクセラレータ・アーキテクチャのブロック図を示す。本願の他の図の要素と同じ参照番号(又は名称)を有する図3A−3Cの要素は、本願中の他の箇所に記載されているものと同様の方法で動作又は機能することが可能であるが、そのようには限定されない。
図3Aは、グラフィックス・プロセッサ300のブロック図であり、これは、別個のグラフィックス処理ユニットであってもよいし、又は、複数の処理コアと或いはメモリ・デバイス又はネットワーク・インターフェースなどの他の半導体デバイスと一体化されたグラフィックス・プロセッサであってもよいが、これらに限定されない。幾つかの実施形態では、グラフィックス・プロセッサは、グラフィックス・プロセッサ上のレジスタに対するメモリ・マップI/Oインターフェースを介して、及びプロセッサ・メモリ内に配置されたコマンドにより通信する。幾つかの実施形態では、グラフィックス・プロセッサ300は、メモリにアクセスするためのメモリ・インターフェース314を含む。メモリ・インターフェース314は、ローカル・メモリ、1つ以上の内部キャッシュ、1つ以上の共有外部キャッシュ、及び/又はシステム・メモリへのインターフェースであるとすることができる。
一部の実施形態では、グラフィックス・プロセッサ300は、ディスプレイ・デバイス318に対して表示出力データを駆動するディスプレイ・コントローラ302も含む。ディスプレイ・コントローラ302は、ビデオ又はユーザー・インターフェース要素の複数層の表示及び構成のための1つ以上のオーバーレイ・プレーンのためのハードウェアを含む。ディスプレイ・デバイス318は、内部又は外部ディスプレイ・デバイスであるとすることが可能である。一実施形態では、ディスプレイ・デバイス318は、仮想現実(VR)ディスプレイ・デバイス又は拡張現実(AR)ディスプレイ・デバイスのようなヘッド・マウント・ディスプレイ・デバイスである。幾つかの実施形態において、グラフィックス・プロセッサ300は、1つ以上のメディア・エンコーディング・フォーマットへ、から、又は間で、メディアをエンコード、デコード、又はトランスコードするビデオ・コーデック・エンジン306を含み、フォーマットは、MPEG−2のようなMPEG(Moving Picture Experts Group)フォーマット、 H.264/MPEG−4 AVCのようなAVC(Advanced Video Coding)フォーマット、H.265/HEVC、AOMedia(Alliance for Open Media)VP8, VP9,並びに、SMPTE(the Society of Motion Picture & Television Engineers)421M/VC−1、そして、JPEG及びMJPEG(Motion JPEG)のようなJPEG(Joint Photographic Experts Group (JPEG))フォーマットを含むがこれらに限定されない。
一部の実施形態では、グラフィックス・プロセッサ300は、例えばビット境界ブロック転送を含む2次元(2D)ラスタライザ演算を実行するためにブロック画像転送(BLIT)エンジン304を含む。しかしながら、一実施形態では、2Dグラフィックス演算は、グラフィックス処理エンジン(GPE)310の1つ以上のコンポーネントを使用して実行される。幾つかの実施態様において、GPE310は、3次元(3D)グラフィックス演算及びメディア演算を含むグラフィックス演算を実行するための計算エンジンである。
一部の実施形態では、GPE310は、3Dプリミティブ形状(例えば、長方形、三角形など)に作用する処理機能を用いて3次元画像及びシーンを描画するなどの3D処理を実行するための3Dパイプライン312を含む。3Dパイプライン312は、要素内の様々なタスクを実行し、及び/又は3D/メディア・サブシステム315に実行スレッドを生成する、プログラマブル及び固定の機能要素を含む。3Dパイプライン312はメディア処理を実行するために使用されることが可能であるが、GPE310の実施形態は、ビデオ後処理及び画像強調などのメディア処理を実行するために特に使用されるメディア・パイプライン316も含む。
一部の実施形態では、メディア・パイプライン316は、ビデオ・コーデック・エンジン306に代わって又はその代わりに、ビデオ・デコード加速、ビデオ・デインターレース、及びビデオ・エンコード加速などの、1つ以上の特殊なメディア処理を実行するための固定機能又はプログラマブル論理ユニットを含む。幾つかの実施形態では、メディア・パイプライン316は、更に、3D/メディア・サブシステム315での実行のためにスレッドを生成するスレッド生成ユニットを追加的に含む。生成されたスレッドは、3D/メディア・サブシステム315に含まれる1つ以上のグラフィックス実行ユニット上でメディア処理のための計算を実行する。
幾つかの実施態様において、3D/メディア・サブシステム315は、3Dパイプライン312及びメディア・パイプライン316によって生成されるスレッドを実行するためのロジックを含む。一実施形態では、パイプラインは、3D/メディア・サブシステム315にスレッド実行リクエストを送信し、これは、様々なリクエストを仲裁し、利用可能なスレッド実行リソースにディスパッチするためのスレッド・ディスパッチ・ロジックを含む。実行リソースは、3D及びメディア・スレッドを処理するためのグラフィックス実行ユニットのアレイを含む。幾つかの実施形態では、3D/メディア・サブシステム315は、スレッド命令及びデータのための1つ以上の内部キャッシュを含む。幾つかの実施形態では、サブシステムはまた、スレッド間でデータを共有し、出力データを記憶するために、レジスタ及びアドレス指定可能メモリを含む共有メモリを含む。
図3Bは、本願で説明される実施形態による、タイル状アーキテクチャを有するグラフィックス・プロセッサ320を示す。一実施形態では、グラフィックス・プロセッサ320は、グラフィックス・エンジン・タイル310A−310D内に図3Aのグラフィックス・プロセッシング・エンジン310の複数のインスタンスを有するグラフィックス処理エンジン・クラスタ322を含む。各グラフィックス・エンジン・タイル310A−310Dは、タイル相互接続323A−323Fのセットを介して相互接続されることが可能である。各グラフィックス・エンジン・タイル310A−310Dはまた、メモリ相互接続325A−325Dを介してメモリ・モジュール又はメモリ・デバイス326A−326Dに接続することもできる。メモリ・デバイス326A−326Dは、任意のグラフィックス・メモリ技術を使用することができる。例えば、メモリ・デバイス326A−326Dは、グラフィックス・ダブル・データ・レート(GDDR)メモリであってもよい。メモリ・デバイス326A−326Dは、一実施形態では、それら各自のグラフィックス・エンジン・タイル310A−310Dとともにダイ上にある可能性がある高帯域幅メモリ(HBM)モジュールである。一実施形態では、メモリ・デバイス326A−326Dは、それら各自のグラフィックス・エンジン・タイル310A−310Dの上に積み重ねられることが可能なスタック・メモリ・デバイスである。一実施形態では、各グラフィックス・エンジン・タイル310A−310D及び関連メモリ326A−326Dは、図11B−11Dで更に詳細に説明されるように、ベース・ダイ又はベース基板に接合された別個のチプレット上に存在する。
グラフィックス・プロセッサ320は、メモリ・デバイス326A−326Dが、関連するグラフィックス・エンジン・タイル310A−310Dと結合される不均一メモリ・アクセス(NUMA)システムにより構成されることが可能である。所与のメモリ・デバイスは、それが直接的に接続されるタイル以外のグラフィックス・エンジン・タイルによってアクセスされてもよい。しかしながら、メモリ・デバイス326A−326Dに対するアクセス待ち時間は、ローカル・タイルにアクセスする場合に最も小さいであろう。一実施形態では、キャッシュ・コヒーレントNUMA (ccNUMA)システムは、タイル相互接続323A−323Fを使用して、グラフィックス・エンジン・タイル310A−310D内のキャッシュ・コントローラ間の通信が、複数のキャッシュが同じメモリ位置を格納する場合に一貫したメモリ・イメージを維持することができるようにする。
グラフィックス処理エンジン・クラスタ322は、オンチップ又はオンパッケージ・ファブリック相互接続324と接続することができる。ファブリック相互接続324は、グラフィックス・エンジン・タイル310A−310Dと、ビデオ・コーデック306及び1つ以上のコピー・エンジン304などのコンポーネントと、の間の通信を可能にすることができる。コピー・エンジン304は、メモリ・デバイス326A−326D及びグラフィックス・プロセッサ320の外部にあるメモリ(例えば、システム・メモリ)から、内へ、及び間で、データを移動させるために使用することができる。ファブリック相互接続324はまた、グラフィックス・エンジン・タイル310A−310Dを相互接続するために使用することも可能である。グラフィックス・プロセッサ320は、オプションとして、外部ディスプレイ・デバイス318との接続を可能にするためのディスプレイ・コントローラ302を含んでもよい。グラフィックス・プロセッサはまた、グラフィックス又は計算アクセラレータとして構成されることも可能である。アクセラレータ構成では、ディスプレイ・コントローラ302及びディスプレイ・デバイス318は省略されてもよい。
グラフィックス・プロセッサ320は、ホスト・インターフェース328を介してホスト・システムに接続することが可能である。ホスト・インターフェース328は、グラフィックス・プロセッサ320、システム・メモリ、及び/又は他のシステム・コンポーネント間の通信を可能にすることができる。ホスト・インターフェース328は、例えば、PCIエクスプレス・バス又は他のタイプのホスト・システム・インターフェースであるとすることが可能である。
図3Cは、本願で説明される実施形態による計算アクセラレータ330を示す。計算アクセラレータ330は、図3Bのグラフィックス・プロセッサ320に類似するアーキテクチャを含むことが可能であり、計算加速のために最適化される。計算エンジン・クラスタ332は、並列又はベクトル・ベースの汎用計算処理のために最適化された実行ロジックを含む一組の計算エンジン・タイル340A−340Dを含むことができる。幾つかの実施形態では、計算エンジン・タイル340A−340Dは、固定機能グラフィックス処理ロジックを含まないが、一実施形態では、計算エンジン・タイル340A−340Dのうちの1つ以上は、メディア加速を実行するためのロジックを含むことができる。計算エンジン・タイル340A−340Dは、メモリ相互接続325A−325Dを介してメモリ326A−326Dに接続することができる。メモリ326A−326D及びメモリ相互接続325A−325Dは、グラフィックス・プロセッサ320と同様な技術であってもよいし、或いは異なるものであるとすることも可能である。グラフィックス計算エンジン・タイル340A−340Dはまた、タイル相互接続323A−323Fのセットを介して相互接続されることが可能であり、ファブリック相互接続324と接続されること及び/又はファブリック相互接続324によって相互接続されることが可能である。一実施形態では、計算アクセラレータ330は、デバイス・ワイド・キャッシュとして構成されることが可能な大きなL3キャッシュ336を含む。計算アクセラレータ330はまた、図3Bのグラフィックス・プロセッサ320と同様な方法で、ホスト・インターフェース328を介してホスト・プロセッサ及びメモリに接続することができる。
グラフィックス処理エンジン
図4は、幾つかの実施形態によるグラフィックス・プロセッサのグラフィックス処理エンジン410のブロック図である。一実施形態では、グラフィックス処理エンジン(GPE)410は、図3Aに示されるGPE310のバージョンであり、図3Bのグラフィックス・エンジン・タイル310A−310Dを表現してもよい。本願の任意の他の図の要素と同じ参照番号(又は名称)を有する図4の要素は、本願の他の箇所に記載されたものと同様の方法で動作又は機能することが可能であるが、そのようには限定されない。例えば、図3Aの3Dパイプライン312及びメディア・パイプライン316が示されている。メディア・パイプライン316は、GPE410の幾つかの実施形態ではオプションであり、GPE410内に明示的に含まれなくてもよい。例えば少なくとも1つの実施形態において、別個のメディア及び/又は画像プロセッサはGPE410に結合される。
幾つかの実施態様において、GPE410は、3Dパイプライン312及び/又はメディア・パイプライン316にコマンド・ストリームを提供するコマンド・ストリーマ403と結合する又はそれを含む。幾つかの実施形態では、コマンド・ストリーマ403は、システム・メモリ、又は内部キャッシュ・メモリ及び共有キャッシュ・メモリのうちの1つ以上であるとすることが可能なメモリに結合される。幾つかの実施態様において、コマンド・ストリーマ403は、メモリからコマンドを受信し、コマンドを3Dパイプライン312及び/又はメディア・パイプライン316に送信する。コマンドは、3Dパイプライン312及びメディア・パイプライン316のためのコマンドを格納するリング・バッファからフェッチされるディレクティブである。一実施形態では、リング・バッファは、複数のコマンドのバッチを格納するバッチ・コマンド・バッファを追加的に含むことができる。また、3Dパイプライン312のためのコマンドは、3Dパイプライン312のための頂点及び幾何学的データ、及び/又はメディア・パイプライン316のための画像データ及びメモリ・オブジェクトなど、メモリに格納されたデータへの参照を含むことも可能であるが、これらに限定されない。3Dパイプライン312及びメディア・パイプライン316は、それぞれのパイプライン内のロジックにより動作を実行することによって、又は1つ以上の実行スレッドをグラフィックス・コア・アレイ414にディスパッチすることによって、コマンド及びデータを処理する。一実施形態では、グラフィックス・コア・アレイ414は、グラフィックス・コアの1つ以上のブロック(例えば、グラフィックス・コア415A、グラフィックス・コア415B)を含み、各ブロックは1つ以上のグラフィックス・コアを含む。各グラフィックス・コアは、グラフィックス及び計算の処理を実行するための汎用及びグラフィックス特有の実行ロジック、並びに固定機能テクスチャ処理及び/又は機械学習及び人工知能加速ロジック、を含むグラフィックス実行リソースのセットを含む。
様々な実施形態では、3Dパイプライン312は、命令を処理し、実行スレッドをグラフィックス・コア・アレイ414にディスパッチことによって、頂点シェーダー、ジオメトリ・シェーダー、ピクセル・シェーダー、フラグメント・シェーダー、計算シェーダー、又はその他のシェーダー・プログラムなどの1つ以上のシェーダー・プログラムを処理するために、固定機能及びプログラマブル・ロジックを含むことが可能である。グラフィックス・コア・アレイ414は、これらのシェーダー・プログラムを処理する際に使用する実行リソースの統一ブロックを提供する。グラフィックス・コア・アレイ414のグラフィックス・コア415A−414B内の多目的実行ロジック(例えば実行ユニット)は、様々な3D APIシェーダー言語のサポートを含み、複数のシェーダーに関連する複数の同時実行スレッドを実行することが可能である。
一部の実施形態では、グラフィックス・コア・アレイ414は、ビデオ及び/又は画像処理などのメディア機能を実行するための実行ロジックを含む。一実施形態では、実行ユニットは、グラフィックス処理動作に加えて、並列汎用計算動作を実行するようにプログラム可能な汎用ロジックを含む。汎用ロジックは、図1のプロセッサ・コア107又は図2Aにおけるもののようなコア202A−202N内の汎用ロジックと並列的に又は関連して処理動作を実行することができる。
グラフィックス・コア・アレイ414上で実行するスレッドによって生成される出力データは、統一リターン・バッファ(URB)418内のメモリへデータを出力することができる。URB418は、複数のスレッドのデータを格納することができる。幾つかの実施形態において、URB418は、グラフィックス・コア・アレイ414上で実行される異なるスレッド間でデータを送信するために使用されてもよい。幾つかの実施形態において、URB418は、グラフィックス・コア・アレイ上のスレッドと、共有機能ロジック420内の固定機能ロジックとの間の同期のために追加的に使用されてもよい。
幾つかの実施態様において、グラフィックス・コア・アレイ414は、アレイが可変数のグラフィックス・コアを含むようにスケーラブルであり、その結果、各々がGPE410の目標パワー及びパフォーマンス・レベルに基づいて可変数の実行ユニットを有する。一実施形態では、実行リソースは動的にスケーラブルであり、その結果、実行リソースは必要に応じてイネーブル又はディセーブルにされてもよい。
グラフィックス・コア・アレイ414は、グラフィックス・コア・アレイ内のグラフィックス・コア間で共有される複数のリソースを含む共有機能ロジック420と結合する。共有機能ロジック420内の共有機能は、グラフィックス・コア・アレイ414に特殊補足機能を提供するハードウェア論理ユニットである。様々な実施形態において、共有機能ロジック420は、サンプラ421、マス(math)422、及びスレッド間通信(ITC)423ロジックを含むが、これらに限定されない。更に、幾つかの実施形態は、共有機能ロジック420内に1つ以上のキャッシュ425を実装する。
共有機能は、所与の特殊な機能に対する需要がグラフィックス・コア・アレイ414内に含めるには不十分である場合に少なくとも実装される。その代わりに、その特殊機能の単一インスタンスは、共有機能ロジック420内のスタンド・アロン・エンティティとして実装され、グラフィックス・コア・アレイ414内の実行リソース間で共有される。グラフィックス・コア・アレイ414間で共有され、グラフィックス・コア・アレイ414内に含まれる機能の正確なセットは、実施形態によって異なる。幾つかの実施形態では、グラフィックス・コア・アレイ414によって広く使用される共有機能ロジック420内の特定の共有機能は、グラフィックス・コア・アレイ414内の共有機能ロジック416内に含まれてもよい。様々な実施形態では、グラフィックス・コア・アレイ414内の共有機能ロジック416は、共有機能ロジック420内の一部又は全部のロジックを含むことができる。一実施形態では、共有機能ロジック420内の全てのロジック要素は、グラフィックス・コア・アレイ414の共有機能ロジック416内で重複している可能性がある。一実施形態では、共有機能ロジック420は、グラフィックス・コア・アレイ414内の共有機能ロジック416のために除外される。
実行ユニット
図5A−5Bは、本願で説明される実施形態による、グラフィックス・プロセッサ・コアに使用される処理要素のアレイを含むスレッド実行ロジック500を示す。本願の他の図の要素と同じ参照番号(又は名称)を有する図5A−図5Bの要素は、本願の他の箇所に記載されているものと同様の方法で動作又は機能することができるが、そのようには限定されない。図5A−5Bは、図2Bの各サブ・コア221A−221Fで示されるハードウェア・ロジックを表すことが可能なスレッド実行ロジック500の概要を示す。図5Aは汎用グラフィックス・プロセッサ内の実行ユニットを表現し、図5Bはコンピュータ・アクセラレータ内で使用されてもよい実行ユニットを表現する。
図5Aに示すように、幾つかの実施形態では、スレッド実行ロジック500は、シェーダー・プロセッサ502、スレッド・ディスパッチャ504、命令キャッシュ506、複数の実行ユニット508A−508Nを含むスケーラブル実行ユニット、サンプラ510、共有ローカル・メモリ511、データ・キャッシュ512、及びデータ・ポート514を含む。一実施形態では、スケーラブル実行ユニット・アレイは、ワークロードの計算要件に基づいて、1つ又は複数の実行ユニット(例えば、実行ユニット508A、508B、508C、508D、ないし508N−1及び508Nのいずれか)をイネーブル又はディセーブルにすることによって、動的にスケーリングすることが可能である。一実施形態では、包含されるコンポーネントは、コンポーネントの各々にリンクする相互接続構造を介して相互接続される。幾つかの実施形態では、スレッド実行ロジック500は、命令キャッシュ506、データ・ポート514、サンプラ510、及び実行ユニット508A−508Nのうちの1つ以上を介して、システム・メモリ又はキャッシュ・メモリなどのメモリに対する1つ以上の接続を含む。幾つかの実施形態では、各実行ユニット(例えば、508A)は、複数の同時ハードウェア/スレッドを実行する一方、各スレッドに対して複数のデータ要素を並列に処理することが可能なスタンドアロンのプログラマブル汎用計算ユニットである。様々な実施形態では、実行ユニット508A−508Nのアレイは、任意の数の個々の実行ユニットを含むようにスケーラブルである。
一部の実施形態では、実行ユニット508A−508Nは主にシェーダー・プログラムを実行するために使用される。シェーダー・プロセッサ502は、様々なシェーダー・プログラムを処理し、スレッド・ディスパッチャ504を介してシェーダー・プログラムに関連付けられた実行スレッドをディスパッチすることができる。一実施形態では、スレッド・ディスパッチャは、グラフィックス及びメディア・パイプラインからのスレッド開始要求を調停し、実行ユニット508A−508N内の1つ以上の実行ユニットにおける要求されたスレッドをインスタンス化するロジックを含む。例えば、ジオメトリ・パイプラインは、頂点、テセレーション、又はジオメトリ・シェーダーを、処理のためにスレッド実行ロジックにディスパッチすることができる。幾つかの実施形態では、スレッド・ディスパッチャ504は、実行中のシェーダー・プログラムからのランタイム・スレッド生成要求を処理することもできる。
一部の実施形態では、実行ユニット508A−508Nは、多くの標準3Dグラフィックス・シェーダー命令に対するネイティブ・サポートを含む命令セットをサポートし、その結果、グラフィックス・ライブラリ(例えば、Direct3D及びOpenGL)からのシェーダー・プログラムが最小限の変換で実行される。実行ユニットは、頂点と幾何学的処理(例えば、頂点プログラム、幾何学プログラム、頂点シェーダー)、ピクセル処理(例えば、ピクセル・シェーダー、フラグメント・シェーダー)、及び汎用処理(例えば、計算及びメディア・シェーダー)をサポートする。実行ユニット508A−508Nの各々は、マルチ・イシュー・シングル命令複数データ(SIMD)の実行が可能であり、マルチ・スレッド動作は、より高いレイテンシ・メモリ・アクセスに直面する場合に効率的な実行環境を可能にする。各実行ユニット内の各ハードウェア・スレッドは、専用の高帯域幅レジスタ・ファイル及び関連する独立したスレッド・ステートを有する。実行は、整数、単精度及び倍精度の浮動小数点演算、SIMD分岐能力、論理演算、超越演算、及びその他の演算を行うことが可能なパイプラインに対するクロック毎のマルチ・イシューである。メモリ又は共有機能の1つからのデータを待機する間、実行ユニット508A−508N内の依存性ロジックは、要求されたデータが返されるまで、待機しているスレッドをスリープさせる。待機スレッドがスリープしている間、ハードウェア・リソースは、他のスレッドの処理に割り当てられてもよい。例えば、頂点シェーダー動作に関連する遅延の間、実行ユニットは、ピクセル・シェーダー、フラグメント・シェーダー、又は別のタイプのシェーダー・プログラム(頂点シェーダーを含む)の動作を実行することが可能である。種々実施形態は、SIMDを使用する代替として、又はSIMDの使用に加えて、単一命令複数スレッド(SIMT)の使用による実行の使用に適用されることが可能である。SIMDコア又は動作に対する参照は、SIMTに適用することも可能であり、或いはSIMTとの組み合わせでSIMDにも適用することも可能である。
実行ユニット508A−508Nの各実行ユニットは、データ要素のアレイに関して動作する。データ要素の数は「実行サイズ」、即ち命令のチャネル数である。実行チャネルは、命令内のデータ要素アクセス、マスキング、及びフロー制御のための実行の論理的な単位である。チャネル数は、特定のグラフィックス・プロセッサのための物理的な算術論理ユニット(ALU)又は浮動小数点ユニット(FPU)の数とは独立していてもよい。幾つかの実施形態では、実行ユニット508A−508Nは、整数及び浮動小数点データ・タイプをサポートする。
実行ユニット命令セットはSIMD命令を含む。種々のデータ要素は、パックされたデータ・タイプとしてレジスタに記憶することが可能であり、実行ユニットは、要素のデータ・サイズに基づいて種々の要素を処理する。例えば、256ビット幅のベクトルに関して動作する場合、ベクトルの256ビットはレジスタに格納され、実行ユニットは、4つの別々の54ビット・パック・データ要素(Quad−Word(QW)サイズ・データ要素)、8つの別々の32ビット・パック・データ要素(Double Word(DW)サイズ・データ要素)、16個の別々の16ビットパック・データ要素(Word(W)サイズ・データ要素)、又は32個の別々の8ビット・データ要素(バイト(B)サイズ・データ要素)としてベクトルに関して動作する。しかしながら、異なるベクトル幅及びレジスタ・サイズが可能である。
一実施形態では、1つ以上の実行ユニットは、融合したEUに共通するスレッド制御ロジック(507A−507N)を有する融合実行ユニット509A−509Nに組み合わせられることが可能である。複数のEUはEUグループに融合させることが可能である。融合EUグループ内の各EUは、別々のSIMDハードウェア・スレッドを実行するように構成することが可能である。融合EUグループ内のEUの数は、実施形態に応じて変えることが可能である。更に、SIMD8、SIMD16、及びSIMD32を含む様々なSIMD幅は、EUごとに実行されることが可能であるが、これらに限定されない。各々の融合グラフィックス実行ユニット509A−509Nは、少なくとも2つの実行ユニットを含む。例えば、融合実行ユニット509Aは、第1EU508Aと、第2EU508Bと、第1EU508A及び第2EU508Bに共通するスレッド制御ロジック507Aとを含む。スレッド制御ロジック507Aは、融合グラフィックス実行ユニット509A上で実行されるスレッドを制御し、融合実行ユニット509A−509N内の各EUが、共通の命令ポインタ・レジスタを使用して実行することを可能にする。
実行ユニットに対するスレッド命令をキャッシュするために、1つ以上の内部命令キャッシュ(例えば506)は、スレッド実行ロジック500に含まれる。幾つかの実施形態では、1つ以上のデータ・キャッシュ(例えば512)は、スレッド実行中にスレッド・データをキャッシュするために含まれる。実行ロジック500上で実行されるスレッドはまた、明示的に管理されたデータを、共有ローカル・メモリ511に記憶することも可能である。幾つかの実施態様において、サンプラ510は、3D処理のためのテクスチャ・サンプリング及びメディア処理のためのメディア・サンプリングを提供するために含まれる。幾つかの実施形態では、サンプラ510は、サンプリングされたデータを実行ユニットに提供する前に、サンプリング・プロセス中にテクスチャ又はメディア・データを処理するための特殊なテクスチャ又はメディア・サンプリング機能を含む。
実行中に、グラフィックス及びメディア・パイプラインは、スレッド開始要求をスレッド実行ロジック500へ、スレッド生成及びディスパッチ・ロジックを介して送信する。一旦、ジオメトリック・オブジェクトのグループが処理され、ピクセル・データにラスタライズされると、シェーダー・プロセッサ502内のピクセル・プロセッサ・ロジック(例えば、ピクセル・シェーダー・ロジック、フラグメント・シェーダー・ロジックなど)が、出力情報を更に計算し、結果が出力表面(例えば、カラー・バッファ、デプス・バッファ、ステンシル・バッファなど)に書き込まれるように呼び出される。幾つかの実施形態では、ピクセル・シェーダー又はフラグメント・シェーダーは、ラスタライズされたオブジェクトにわたって補間されるべき様々な頂点属性の値を計算する。幾つかの実施形態では、シェーダー・プロセッサ502内のピクセル・プロセッサ・ロジックは、次いで、アプリケーション・プログラミング・インターフェース(API)供給ピクセル又はフラグメント・シェーダー・プログラムを実行する。シェーダー・プログラムを実行するために、シェーダー・プロセッサ502は、スレッド・ディスパッチャ504を介して実行ユニット(例えば、508A)にスレッドをディスパッチする。幾つかの実施形態では、シェーダー・プロセッサ502は、メモリに記憶されたテクスチャ・マップ内のテクスチャ・データにアクセスするために、サンプラ510内のテクスチャ・サンプリング・ロジックを使用する。テクスチャ・データ及び入力ジオメトリ・データに対する算術演算は、各々の幾何学的断片についてピクセル・カラー・データを計算するか、又は1つ以上のピクセルを更なる処理から排除する。
一部の実施形態では、データ・ポート514は、スレッド実行ロジック500にメモリ・アクセス機構を提供し、処理されたデータをメモリに出力し、グラフィックス・プロセッサ出力パイプラインにおける更なる処理に備える。幾つかの実施形態では、データ・ポート514は、データ・ポートを介してメモリ・アクセスのためのデータをキャッシュするために、1つ以上のキャッシュ・メモリ(例えば、データ・キャッシュ512)を含むか、又はそれに結合する。
一実施形態では、実行ロジック500はまた、レイ・トレーシング加速機能を提供することが可能なレイ・トレーサ505を含むことも可能である。レイ・トレーサ505は、光線発生のための命令/機能を含むレイ・トレーシング命令セットをサポートすることができる。レイ・トレーシング命令セットは、図2Cのレイ・トレーシング・コア245によってサポートされるレイ・トレーシング命令セットと類似していること、又は相違していることが可能である。
図5Bは、実施形態による実行ユニット508の例示的な内部詳細を示す。グラフィックス実行ユニット508は、命令フェッチ・ユニット537、汎用レジスタ・ファイル・アレイ(GRF)524、アーキテクチャ・レジスタ・ファイル・アレイ(ARF)526、スレッド・アービタ522、送信ユニット530、分岐ユニット532、SIMD浮動小数点ユニット(FPU)534のセット、及び一実施形態では専用整数SIMD ALU535のセットを含むことができる。GRF524及びARF526は、グラフィックス実行ユニット508においてアクティブである可能性がある、同時ハードウェア・スレッド各々に関連する汎用レジスタ・ファイル及びアーキテクチャ・レジスタ・ファイルのセットを含む。一実施形態では、スレッド毎のアーキテクチャ状態はARF526内に維持され、スレッド実行中に使用されるデータはGRF524内に記憶される。各スレッドに対する命令ポインタを含む各スレッドの実行状態は、ARF526内のスレッド特有のレジスタに保持することができる。
一実施形態では、グラフィックス実行ユニット508は、同時マルチ・スレッディング(SMT)と微細インターリーブ・マルチ・スレッディング(IMT)との組み合わせであるアーキテクチャを有する。アーキテクチャは、同時スレッドの目標数及び実行ユニット当たりのレジスタ数に基づいて、設計時に微調整可能なモジュール構成を有し、ここで、実行ユニット・リソースは複数の同時スレッドを実行するために使用されるロジックにわたって分割される。グラフィックス実行ユニット508によって実行されることが可能な論理スレッドの数は、ハードウェア・スレッドの数に限定されず、複数の論理スレッドは各ハードウェア・スレッドに割り当てられることが可能である。
一実施形態では、グラフィックス実行ユニット508は、それぞれ異なる命令であってもよい複数の命令を共に発行することができる。グラフィックス実行ユニット・スレッド508のスレッド・アービタ522は、実行のために、送信ユニット530、分岐ユニット532、又はSIMD FPUのうちの1つに命令をディスパッチすることができる。各々の実行スレッドは、GRF524内の128個の汎用レジスタにアクセスすることが可能であり、各レジスタは32バイトを記憶することができ、32ビット・データ要素のSIMD8要素ベクトルとしてアクセス可能である。一実施形態では、各々の実行ユニット・スレッドは、GRF524内の4Kバイトに対するアクセスを有するが、実施形態はそれに限定されず、他の実施形態では、より大きな又はより少ないレジスタ・リソースが提供される可能性がある。一実施形態では、グラフィックス実行ユニット508は、計算演算を独立して実行することが可能な7つのハードウェア・スレッドに分けられるが、実行ユニット当たりのスレッドの数も実施形態に従って変わることが可能である。例えば、一実施形態では、最大16個のハードウェア・スレッドがサポートされる。7つのスレッドが4Kバイトにアクセスする可能性がある実施形態では、GRF524は合計28Kバイトを記憶することができる。16スレッドが4Kバイトにアクセスできる場合、GRF524は合計64Kバイトを格納することができる。フレキシブル・アドレッシング・モードは、レジスタが一緒にアドレス指定され、より広いレジスタを効果的に構築したり、ストライドした長方形ブロック・データ構造を表現したりすることを許容することができる。
一実施形態では、メモリ動作、サンプラ動作、及び他のより長い待ち時間のシステム通信は、メッセージ通過送信ユニット530によって実行される「送信」命令によりディスパッチされる。一実施形態では、分岐命令は、SIMD多様性及び最終的な収束を促進するために、専用分岐ユニット532にディスパッチされる。
一実施形態では、グラフィックス実行ユニット508は、浮動小数点演算を実行するために1つ以上のSIMD浮動小数点ユニット(FPU)534を含む。一実施形態では、FPU(複数可)534も整数計算をサポートする。一実施形態では、FPU534は、M個の32ビット浮動小数点(又は整数)演算までのSIMDを実行することができ、又は、2M個の16ビット整数又は16ビット浮動小数点演算までSIMDを実行することができる。一実施形態では、FPUのうちの少なくとも1つは、高スループット超越数学関数及び倍精度54ビット浮動小数点をサポートする拡張数学機能を提供する。幾つかの実施形態において、8ビット整数SIMD ALU535のセットも存在し、機械学習計算に関連する動作を実行するために特別に最適化されてもよい。
一実施形態では、グラフィックス実行ユニット508の複数インスタンスのアレイは、グラフィックス・サブ・コア・グループ化(例えば、サブ・スライス)でインスタンス化されることが可能である。スケーラビリティのために、製品アーキテクトはサブ・コア・グループごとに正確な数の実行ユニットを選択することができる。一実施形態では、実行ユニット508は、複数の実行チャネルにわたって命令を実行することができる。更なる実施形態では、グラフィックス実行ユニット508上で実行される各スレッドは、異なるチャネルで実行される。
図6は、一実施形態による追加的な実行ユニット600を示す。実行ユニット600は、例えば図3Cにおけるもののようなコンピュータ・エンジン・タイル340A−340Dで使用するための計算に最適化された実行ユニットであってもよいが、そのようには限定されない。また、図3Bに示すように、グラフィックス・エンジン・タイル310A−310Dにおいて、実行ユニット600の変形例が使用されてもよい。一実施形態では、実行ユニット600は、スレッド制御ユニット601、スレッド状態ユニット602、命令フェッチ/プリフェッチ・ユニット603、及び命令デコード・ユニット604を含む。実行ユニット600は、更に、実行ユニット内でハードウェア・スレッドに割り当てることが可能なレジスタを記憶するレジスタ・ファイル606を含む。実行ユニット600は送信ユニット607及び分岐ユニット608を追加的に含む。一実施形態では、送信ユニット607及び分岐ユニット608は、図5Bのグラフィックス実行ユニット508の送信ユニット530及び分岐ユニット532と同様に動作することが可能である。
実行ユニット600は、複数の異なるタイプの機能ユニットを含む計算ユニット610も含む。一実施形態では、計算ユニット610は、算術論理ユニットのアレイを含むALUユニット611を含む。ALUユニット611は、64ビット、32ビット、及び16ビットの整数及び浮動小数点の演算を実行するように構成することができる。整数及び浮動小数点の演算は同時に実行されてもよい。計算ユニット610はまた、シストリック・アレイ612、及び数学ユニット613を含むことも可能である。シストリック・アレイ612は、シストリック方式でベクトル又は他のデータ並列演算を実行するために使用されることが可能なデータ処理ユニットのW幅及びD深度のネットワークを含む。一実施形態では、シストリック・アレイ612は、行列ドット積演算などの行列演算を実行するように構成されることが可能である。一実施形態では、シストリック・アレイ612は、16ビット浮動小数点演算、そして8ビット及び4ビット整数演算をサポートする。一実施形態では、シストリック・アレイ612は、機械学習演算を加速するように構成されることが可能である。そのような実施形態では、シストリック・アレイ612は、bfloat16ビット浮動小数点フォーマットをサポートするように構成されることが可能である。一実施形態では、数学ユニット613は、ALUユニット611よりも効率的で低電力な方法で数学的演算の特定のサブセットを実行するために含まれることが可能である。数学ユニット613は、他の実施形態によって提供されるグラフィックス処理エンジンの共有機能ロジックに見受けられる数学ロジックの変形(例えば、図4の共有機能ロジック420の数学ロジック422)を含むことができる。一実施形態では、数学ユニット613は、32ビット及び64ビットの浮動小数点演算を行うように構成されることが可能である。
スレッド制御ユニット601は、実行ユニット内のスレッドの実行を制御するロジックを含む。スレッド制御ユニット601は、実行ユニット600内のスレッドの実行を開始、停止、及びプリエンプトするスレッド調停ロジックを含むことができる。スレッド状態ユニット602は、実行ユニット600上で実行するために割り当てられたスレッドに対するスレッド状態を記憶するために使用されることが可能である。実行ユニット600内にスレッド状態を格納することは、これらのスレッドがブロックされ又はアイドルになった場合に、スレッドの迅速なプリエンプションを可能にする。命令フェッチ/プリフェッチ・ユニット603は、より高いレベルの実行ロジックの命令キャッシュ(例えば、図5Aにおけるもののような命令キャッシュ506)から命令をフェッチすることができる。命令フェッチ/プリフェッチ・ユニット603はまた、現在実行中のスレッドの分析に基づいて、命令キャッシュにロードされる命令に対するプリフェッチ要求を発行することができる。命令デコード・ユニット604は、計算ユニットによって実行される命令をデコードするために使用されることが可能である。一実施形態では、命令デコード・ユニット604は、複雑な命令を、マイクロ・オペレーション成分にデコードするための2次デコーダとして使用されることが可能である。
実行部600は、実行ユニット600上で実行するハードウェア・スレッドによって使用されることが可能なレジスタ・ファイル606を追加的に含む。レジスタ・ファイル606内のレジスタは、実行ユニット600の計算ユニット610内で複数の同時スレッドを実行するために使用されるロジックにわたって分割されることが可能である。グラフィックス実行ユニット600によって実行される可能性がある論理スレッドの数は、ハードウェア・スレッドの数に限定されず、複数の論理スレッドが各ハードウェア・スレッドに割り当てられることが可能である。レジスタ・ファイル606のサイズは、サポートされるハードウェア・スレッドの数に基づいて、実施形態に応じて変わることが可能である。一実施形態では、レジスタのリネームは、ハードウェア・スレッドにレジスタを動的に割り当てるために使用されることが可能である。
図7は、幾つかの実施形態によるグラフィックス・プロセッサ命令フォーマット700を示すブロック図である。1つ以上の実施形態において、グラフィックス・プロセッサ実行ユニットは、複数フォーマットにおいて命令を有する命令セットをサポートする。実線のボックスは、実行ユニット命令に一般的に含まれる成分を示す一方、破線は、オプション的である成分、又は命令のサブセットに含まれるだけの成分を含む。幾つかの実施形態では、説明され図示されたる命令フォーマット700は、命令が処理されると命令デコードから生じるマイクロ・オペレーションとは対照的に、それらは実行ユニットに供給される命令であるという点で、マクロ命令である。
幾つかの実施形態では、グラフィックス・プロセッサ実行ユニットは、128ビット命令フォーマット710において命令をネイティブにサポートする。64ビット・コンパクト命令フォーマット730は、選択された命令、命令オプション、及びオペランド数に基づいて幾つかの命令に対して利用可能である。ネイティブ128ビット命令フォーマット710は、全ての命令オプションに対してアクセスを提供するが、64ビット・フォーマット730では、幾つかのオプション及び処理は制限される。64ビット・フォーマット730で利用可能なネイティブ命令は、実施形態によって異なる。幾つかの実施形態では、命令は、インデックス・フィールド713内のインデックス値のセットを部分的に使用してコンパクト化される。実行ユニット・ハードウェアは、インデックス値に基づいて一組の圧縮テーブルを参照し、圧縮テーブル出力を使用して、128ビット命令フォーマット710内のネイティブ命令を再構成する。命令の他のサイズ及びフォーマットを使用することが可能である。
各フォーマットに対して、命令オペコード712は実行ユニットが実行する動作を定義する。実行ユニットは、各オペランドの複数のデータ要素にわたって、各命令を並列に実行する。例えば、加算命令に応答して、実行ユニットは、テクスチャ要素又はピクチャ要素を表す各カラー・チャネルにわたって同時加算演算を実行する。デフォルトでは、実行ユニットはオペランドの全てのデータ・チャネルにわたって各命令を実行する。幾つかの実施形態では、命令制御フィールド714は、チャネル選択(例えば、予測)及びデータ・チャネル順序(例えば、スウィズル(swizzle))などの特定の実行オプションの制御を可能にする。128ビット命令フォーマット710における命令については、exec−sizeフィールド716は、並列に実行されるデータ・チャネルの数を制限する。幾つかの実施形態では、exec−sizeフィールド716は、64ビットのコンパクトな命令フォーマット730での使用には利用可能でない。
一部の実行ユニット命令は、2つのソース・オペランド、src0 720、src1 722、及び1つの宛先718を含む最大3つのオペランドを有する。幾つかの実施形態では、実行ユニットは、宛先の1つが暗示されるデュアル宛先命令をサポートする。データ操作命令は、第3ソース・オペランド(例えば、SRC2 724)を有することが可能であり、命令オペコード712はソース・オペランドの数を決定する。命令の最後のソース・オペランドは、命令により渡される直接的な(例えば、ハード符号化された)値であるとすることが可能である。
幾つかの実施形態では、128ビット命令フォーマット710は、例えば、直接レジスタ・アドレッシング・モード又は間接レジスタ・アドレッシング・モードが使用されるかどうかを指定するアクセス/アドレス・モード・フィールド726を含む。直接レジスタ・アドレッシング指定モードが使用される場合、1つ以上のオペランドのレジスタ・アドレスは、命令中のビットによって直接的に提供される。
幾つかの実施形態では、128ビット命令フォーマット710は、命令のアクセス・モード及び/又はアドレス・モードを指定するアクセス/アドレス・モード・フィールド726を含む。一実施形態では、アクセス・モードは、命令のためのデータ・アクセス・アライメントを定義するために使用される。幾つかの実施形態は、16バイト整列アクセス・モード及び1バイト整列アクセス・モードを含むアクセス・モードをサポートし、ここで、アクセス・モードのバイト・アライメントは命令オペランドのアクセス・アライメントを決定する。例えば、第1モードにある場合、命令は、送信元オペランドと送信先オペランドのためにバイト整列アドレッシングを使用することができ、第2モードにある場合、命令は、全ての送信元オペランドと送信先オペランドのために16バイト整列アドレスを使用することができる。
一実施形態では、アクセス/アドレス・モード・フィールド726のアドレス・モード部分は、命令が直接又は間接アドレッシングを使用するかどうかを決定する。直接レジスタ・アドレッシング・モードが使用される場合、命令内のビットは1つ以上のオペランドのレジスタ・アドレスを直接的に提供する。間接レジスタ・アドレッシング・モードが使用される場合、1つ以上のオペランドのレジスタ・アドレスは、命令内のアドレス即時フィールド及びアドレス・レジスタ値に基づいて計算されてもよい。
一部の実施形態では、命令は、オペコード・デコード740を単純化するために、オペコード712ビット・フィールドに基づいてグループ化される。8ビットのオペコードでは、ビット4、5、及び6は、実行ユニットがオペコードのタイプを決定することを可能にする。図示されている 明確なオペコード・グループ化は、単なる具体例である。幾つかの実施形態において、移動及び論理オペコード・グループ742は、データ移動及び論理命令(例えば、移動(mov)、比較(cmp))を含む。幾つかの実施形態では、移動及び論理グループ742は、5つの最上位ビット(MSB)を共有し、ここで、移動(mov)命令は0000xxxxbの形式であり、論理命令は0001xxxbの形式である。フロー制御命令グループ744(例えば、呼び出し(call)、ジャンプ(jmp))は、0010xxxxb(例えば、0x20)の形式の命令を含む。他の命令グループ746は、0011xxxxb(例えば、0x30)の形式の同期命令(例えば、待機(wait)、送信(send))を含む命令の混合を含む。並列数学命令グループ748は、0100xxxxb(例えば、0x40)の形式で、成分ごとの算術命令(例えば、加算(add)、乗算(mul))を含む。並列数学グループ748は、データ・チャネルにわたって並列的に算術演算を実行する。ベクトル数学グループ750は、0101xxxxb(例えば、0x50)の形式の算術命令(例えば、dp4)を含む。ベクトル数学グループは、ベクトル・オペランドのドット積計算などの演算を実行する。図示されるオペコード・デコード740は、一実施形態では、実行ユニットのどの部分が、デコードされた命令を実行するために使用されるか、を決定するために使用されることが可能である。例えば、幾つかの命令は、シストリック・アレイによって実行されるシストリック命令として指定されてもよい。レイ・トレーシング命令(図示せず)のような他の命令は、実行ロジックのスライス又はパーティション内のレイ・トレーシング・コア又はレイ・トレーシング・ロジックにルーティングされることが可能である。
グラフィックス・パイプライン
図8は、グラフィックス・プロセッサ800の別の実施形態のブロック図である。本願における任意の他の図の要素と同じ参照番号(又は名称)を有する図8の要素は、本願の他の箇所に記載されているものと同様の方法で動作又は機能することが可能であるが、そのようには限定されない。
一部の実施形態では、グラフィックス・プロセッサ800は、幾何学パイプライン820、メディア・パイプライン830、ディスプレイ・エンジン840、スレッド実行ロジック850、及びレンダリング出力パイプライン870を含む。幾つかの実施形態では、グラフィックス・プロセッサ800は、1つ以上の汎用処理コアを含むマルチ・コア処理システム内のグラフィックス・プロセッサである。グラフィックス・プロセッサは、1つ以上の制御レジスタ(図示せず)へのレジスタ書き込みにより、又はリング相互接続802を介するグラフィックス・プロセッサ800へ発行されるコマンドにより制御される。幾つかの実施形態では、リング相互接続802は、グラフィックス・プロセッサ800を、他のグラフィックス・プロセッサ又は汎用プロセッサなどの他の処理コンポーネントに結合する。リング相互接続802からのコマンドは、幾何学パイプライン820又はメディア・パイプライン830の個々のコンポーネントに命令を供給するコマンド・ストリーマ803によって解釈される。
一部の実施形態では、コマンド・ストリーマ803は、メモリから頂点データを読み込み、コマンド・ストリーマ803によって提供される頂点処理コマンドを実行する頂点フェッチャ805の動作を指示する。幾つかの実施形態では、頂点フェッチャ805は頂点データを頂点シェーダー807に提供し、各頂点に対する座標空間変換及びライティング動作を実行する。幾つかの実施形態では、頂点フェッチャ805及び頂点シェーダー807は、スレッド・ディスパッチャ831により、実行スレッドを実行ユニット852A−852Bへディスパッチすることによって頂点処理命令を実行する。
幾つかの実施形態では、実行ユニット852A−852Bは、グラフィックス及びメディア動作を実行するための命令セットを有するベクトル・プロセッサのアレイである。幾つかの実施形態では、実行ユニット852A−852Bは、各アレイに固有の、又はアレイ間で共有されるアタッチされたL1キャッシュ851を有する。キャッシュは、データ・キャッシュ、命令キャッシュ、又は異なるパーティションにデータ及び命令を含むように区分けされた単一のキャッシュとして構成されることが可能である。
幾つかの実施形態では、幾何学パイプライン820は、3Dオブジェクトのハードウェア加速テセレーションを実行するためのテセレーション・コンポーネントを含む。幾つかの実施形態では、プログラマブル・ハル・シェーダー811がテセレーション動作を設定する。プログラマブル・ドメイン・シェーダー817は、テセレーション出力のバックエンド評価を提供する。テセレータ813は、ハル・シェーダー811の方向で動作し、幾何学パイプライン820への入力として提供される粗い幾何学モデルに基づいて、一組の詳細な幾何学的オブジェクトを生成するための特殊目的論理を含む。幾つかの実施形態では、テセレーションが使用されない場合に、テセレーション・コンポーネント(例えば、ハル・シェーダー811、テセレータ813、及びドメイン・シェーダー817)をバイパスすることができる。
幾つかの実施形態では、完全な幾何学オブジェクトは、実行ユニット852A−852Bにディスパッチされる1つ以上のスレッドにより、幾何学シェーダー819によって処理されるか、又はクリップ処理部(クリッパ)829へ直接進むことができる。幾つかの実施形態では、幾何学シェーダーは、グラフィックス・パイプラインの前のステージのように頂点や頂点のパッチではなく、幾何学オブジェクト全体に関して動作する。テセレーションがディセーブルにされると、幾何学シェーダー819は頂点シェーダー807から入力を受け取る。幾つかの実施形態では、幾何学シェーダー819は、テセレーション・ユニットがディセーブルにされている場合に幾何学テセレーションを実行するように、幾何学シェーダー・プログラムによってプログラム可能である。
ラスタ化の前に、クリッパ829は頂点データを処理する。クリッパ829は、クリッピング及び幾何学シェーダー機能を有する固定機能クリッパ又はプログラマブル・クリッパであってもよい。幾つかの実施態様において、レンダリング出力パイプライン870内のラスタライザ及び深度テスト・コンポーネント873は、幾何学オブジェクトを、ピクセル単位の表現に変換するためにピクセル・シェーダーをディスパッチする。幾つかの実施形態では、ピクセル・シェーダー・ロジックは、スレッド実行ロジック850に含まれる。幾つかの実施形態では、アプリケーションは、ラスタライザ及び深度テスト・コンポーネント873をバイパスし、ストリーム出力ユニット823を介してラスタライズされていない頂点データにアクセスすることができる。
グラフィックス・プロセッサ800は、相互接続バス、相互接続ファブリック、又は、プロセッサの主要コンポーネント間でデータ及びメッセージの伝送を可能にする何らかの他の相互接続機構を有する。幾つかの実施形態では、実行ユニット852A−852B及び関連する論理ユニット(例えば、L1キャッシュ851、サンプラ854、テクスチャ・キャッシュ858など)は、データ・ポート856を介して相互接続し、メモリ・アクセスを実行し、プロセッサのレンダリング出力パイプライン・コンポーネントにより通信する。幾つかの実施形態では、サンプラ854、キャッシュ851、858、及び実行ユニット852A−852Bの各々は別個のメモリ・アクセス経路を有する。一実施形態では、テクスチャ・キャッシュ858は、サンプラ・キャッシュとして構成されること可能である。
幾つかの実施態様において、レンダリング出力パイプライン870は、頂点ベースのオブジェクトを、関連するピクセルに基づく表現に変換するラスタライザ及び深度テスト・コンポーネント873を含む。幾つかの実施形態では、ラスタライザ・ロジックは、固定機能三角形及びライン・ラスタライゼーションを実行するためのウィンドウ/マスク部を含む。関連するレンダリング・キャッシュ878及び深度キャッシュ879もまた、幾つかの実施形態では利用可能である。ピクセル動作コンポーネント877は、データに対してピクセル・ベースの動作を実行するが、幾つかの例では、2D動作に関連するピクセル動作(例えば、ブレンドを伴うビット・ブロック画像転送)は、2Dエンジン841によって実行されるか、又は表示時間においてオーバレイ表示プレーンを使用して表示コントローラ843によって置換される。幾つかの実施形態では、共有L3キャッシュ875は、全てのグラフィックス・コンポーネントに利用可能であり、メイン・システム・メモリを使用せずにデータの共有を可能にする。
幾つかの実施形態では、グラフィックス・プロセッサ・メディア・パイプライン830は、メディア・エンジン837及びビデオ・フロント・エンド834を含む。幾つかの実施形態では、ビデオ・フロント・エンド834は、コマンド・ストリーマ803からパイプライン・コマンドを受信する。幾つかの実施形態では、メディア・パイプライン830は、個々のコマンド・ストリーマを含む。幾つかの実施形態では、ビデオ・フロント・エンド834は、メディア・エンジン837にコマンドを送信する前にメディア・コマンドを処理する。幾つかの実施形態では、メディア・エンジン837は、スレッド・ディスパッチャ831によるスレッド実行ロジック850へのディスパッチのためにスレッドを生成するスレッド生成機能を含む。
一部の実施形態では、グラフィックス・プロセッサ800は、ディスプレイ・エンジン840を含む。幾つかの実施形態では、ディスプレイ・エンジン840は、プロセッサ800の外部にあり、リング相互接続802、又は他の幾つかの相互接続バス若しくはファブリックを介してグラフィックス・プロセッサと結合する。幾つかの実施形態では、ディスプレイ・エンジン840は、2Dエンジン841及びディスプレイ・コントローラ843を含む。幾つかの実施形態では、ディスプレイ・エンジン840は、3Dパイプラインから独立して動作することが可能な専用ロジックを含む。幾つかの実施形態では、ディスプレイ・コントローラ843は、ラップトップ・コンピュータにおけるようなシステム統合ディスプレイ・デバイス、又はディスプレイ・デバイス・コネクタを介して取り付けられる外部ディスプレイ・デバイスであってもよいディスプレイ・デバイス(図示せず)と結合する。
幾つかの実施形態では、幾何学パイプライン820及びメディア・パイプライン830は、複数のグラフィックス及びメディア・プログラミング・インターフェースに基づく動作を実行するように設定することが可能であり、何らかの1つのアプリケーション・プログラミング・インターフェース(API)に特有ではない。幾つかの実施形態では、グラフィックス・プロセッサ用のドライバ・ソフトウェアは、特定のグラフィックス又はメディア・ライブラリに特有のAPI呼び出しを、グラフィックス・プロセッサにより処理されることが可能なコマンドに変換する。幾つかの実施形態では、OpenGL(Open Graphics Library)、OpenCL(Open Computing Language)、及び/又はヴァルカン(Vulkan)グラフィックス及び計算APIに対するサポートは、全てクロノス・グループ(Khronos Group)から提供される。幾つかの実施形態において、マイクロソフト・コーポレーション社からのDirect3Dライブラリに対するサポートが提供されてもよい。幾つかの実施形態において、これらのライブラリの組み合せがサポートされる可能性がある。OpenCV(Open Source Computer Vision Library)に対するサポートが提供されてもよい。将来のAPIのパイプラインからグラフィックス・プロセッサのパイプラインへのマッピングが可能であるならば、互換性のある3Dパイプラインを有する将来のAPIもサポートされるであろう。
グラフィックス・パイプライン・プログラミング
図9Aは、幾つかの実施形態によるグラフィックス・プロセッサ・コマンド・フォーマット900を示すブロック図である。図9Bは、実施形態によるグラフィックス・プロセッサ・コマンド・シーケンス910を示すブロック図である。図9Aの実線のボックスは、グラフィックス・コマンドに一般的に含まれるコンポーネントを示し、破線は、オプションであるコンポーネント、又はグラフィックス・コマンドのサブセットに含まれるだけのコンポーネントを示す。図9Aの例示的なグラフィックス・プロセッサ・コマンド・フォーマット900は、クライアント902を識別するためのデータ・フィールド、コマンド動作コード(opcode)904、及びコマンドのためのデータ906を含む。サブ・オペコード905及びコマンド・サイズ908もまた、幾つかのコマンドに含まれる。
幾つかの実施形態では、クライアント902は、コマンド・データを処理するグラフィックス・デバイスのクライアント・ユニットを指定する。幾つかの実施形態では、グラフィックス・プロセッサ・コマンド・パーサーは、コマンドの更なる処理を条件付けし、コマンド・データを適切なクライアント・ユニットへルーティングするために、各コマンドのクライアント・フィールドを検査する。幾つかの実施形態では、グラフィックス・プロセッサ・クライアント・ユニットは、メモリ・インターフェース・ユニット、レンダリング・ユニット、2Dユニット、3Dユニット、及びメディア・ユニットを含む。各クライアント・ユニットは、コマンドを処理する対応する処理パイプラインを有する。コマンドがクライアント・ユニットによって受信されると、クライアント・ユニットはオペコード904を読み込み、もしあればサブ・オペコード905を読み込み、実行する動作を決定する。クライアント・ユニットは、データ・フィールド906の情報を使用してコマンドを実行する。幾つかのコマンドでは、明示的なコマンド・サイズ908が、コマンドのサイズを指定するために期待される。幾つかの実施形態では、コマンド・パーサーは、コマンド・オペコードに基づいて、少なくとも幾つかのコマンドのサイズを自動的に決定する。幾つかの実施形態において、コマンドは、ダブル・ワードの倍数で整合させられる。他のコマンド・フォーマットを使用することも可能である。
図9Bのフロー図は、例示的なグラフィックス・プロセッサ・コマンド・シーケンス910を示す。幾つかの実施形態では、グラフィックス・プロセッサの実施形態を特徴付けるデータ処理システムのソフトウェア又はファームウェアは、一組のグラフィックス動作をセットアップし、実行し、終了するように示されるコマンド・シーケンスのバージョンを使用する。サンプル・コマンド・シーケンスは、これらの特定のコマンド又はこのコマンド・シーケンスに限定されない実施形態のみとして、例示例の目的のために図示及び説明されている。更に、コマンドは、グラフィックス・プロセッサが少なくとも部分的に同時にコマンドのシーケンスを処理するように、コマンド・シーケンス内のコマンドのバッチとして発行されてもよい。
幾つかの実施形態では、グラフィックス・プロセッサ・コマンド・シーケンス910は、パイプライン・フラッシュ・コマンド912で始まり、任意のアクティブなグラフィックス・パイプラインが、パイプラインに対して現時点で未完了のコマンドを完了させる。幾つかの実施態様において、3Dパイプライン922及びメディア・パイプライン924は、同時に動作しない。パイプライン・フラッシュは、アクティブなグラフィックス・パイプラインが何らかの未完了のコマンドを完了することを行わせるように実行されます。パイプライン・フラッシュに応答して、グラフィックス・プロセッサのコマンド・パーサーは、アクティブな描画エンジンが未完了の動作を完了し、関連する読み込みキャッシュがディセーブルにされるまで、コマンド処理を一時停止する。オプションとして「ダーティ(dirty)」とマークされるレンダリング・キャッシュ内の任意のデータがメモリに対してフラッシュされることが可能である。幾つかの実施形態において、パイプライン・フラッシュ・コマンド912は、パイプライン同期のために、又はグラフィックス・プロセッサを低電力状態にする前に使用されることが可能である。
幾つかの実施形態では、コマンド・シーケンスが、パイプライン間を明示的にスイッチングすることをグラフィックス・プロセッサに要求する場合に、パイプライン選択コマンド913が使用される。幾つかの実施形態において、パイプライン選択コマンド913は、コンテキストが両方のパイプラインに対してコマンドを発行するものでない限り、パイプライン・コマンドを発行する前に実行コンテキスト内で一度だけ必要とされる。幾つかの実施形態では、パイプライン・フラッシュ・コマンド912は、パイプライン選択コマンド913を介してパイプライン・スイッチングの直前に必要とされる。
幾つかの実施形態では、パイプライン制御コマンド914は、動作のためにグラフィックス・パイプラインを構成し、3Dパイプライン922及びメディア・パイプライン924をプログラムするために使用される。幾つかの実施形態では、パイプライン制御コマンド914は、アクティブ・パイプラインに対するパイプライン状態を設定する。一実施形態では、パイプライン制御コマンド914は、コマンドのバッチを処理する前に、アクティブ・パイプライン内の1つ以上のキャッシュ・メモリからデータをクリアするため、及びパイプライン同期のために使用される。
幾つかの実施形態では、リターン・バッファ状態コマンド916は、各パイプラインがデータを書き込むためのリターン・バッファのセットを構成するために使用される。一部のパイプライン動作は、処理中に動作が中間データを書き込む1つ以上のリターン・バッファの割り当て、選択、又は設定を必要とする。幾つかの実施形態では、グラフィックス・プロセッサはまた、出力データを格納し、クロス・スレッド通信を行うために1つ以上のリターン・バッファを使用する。幾つかの実施形態では、リターン・バッファ状態916は、パイプライン動作のセットに使用するリターン・バッファのサイズ及び数を選択することを含む。
コマンド・シーケンス内の残りのコマンドは、動作のためのアクティブ・パイプラインに基づいて異なる。パイプライン決定920に基づいて、コマンド・シーケンスは、3Dパイプライン状態930で始まる3Dパイプライン922、又はメディア・パイプライン状態940で始まるメディア・パイプライン924に合わせられる。
3Dパイプライン状態930を設定するためのコマンドは、頂点バッファ状態、頂点要素状態、定色状態、深度バッファ状態、及びその他の状態変数(3Dプリミティブ・コマンドが処理される前に設定されるべきもの)に対する3D状態設定コマンドを含む。これらのコマンドの値は、使用中の特定の3D APIに少なくとも部分的に基づいて決定される。幾つかの実施形態では、3Dパイプライン状態930コマンドは、それらの要素が使用されない場合に、特定のパイプライン要素を選択的にディセーブル又はバイパスすることも可能である。
一部の実施形態では、3Dプリミティブ932コマンドは、3Dパイプラインによって処理される3Dプリミティブをサブミットするために使用される。3Dプリミティブ932コマンドを介してグラフィックス・プロセッサに渡されるコマンド及び関連パラメータは、グラフィックス・パイプラインにおける頂点フェッチ関数に転送される。頂点フェッチ関数は、頂点データ構造を生成するために3Dプリミティブ932コマンド・データを使用する。頂点データ構造は1つ以上のリターン・バッファに格納される。幾つかの実施形態では、3Dプリミティブ932コマンドは、頂点シェーダーにより3Dプリミティブに関して頂点演算を実行するために使用される。頂点シェーダーを処理するために、3Dパイプライン922は、グラフィックス・プロセッサ実行ユニットにシェーダー実行スレッドをディスパッチする。
幾つかの実施形態では、3Dパイプライン922は、実行934コマンド又はイベントによりトリガされる。幾つかの実施形態において、レジスタ書き込みは、コマンド実行をトリガする。幾つかの実施形態では、実行は、コマンド・シーケンス内の「go」又は「kick」コマンドによりトリガされる。一実施形態では、コマンド実行は、パイプライン同期コマンドを使用してトリガされ、グラフィックス・パイプラインによりコマンド・シーケンスをフラッシュする。3Dパイプラインは、3Dプリミティブに対して幾何学的処理を実行する。動作が完了すると、結果として生じる幾何学オブジェクトはラスタライズされ、ピクセル・エンジンは、結果として生じるピクセルを着色する。ピクセル・シェーディング及びピクセル・バックエンド動作を制御するための追加コマンドが、これらの動作のために含まれてもよい。
一部の実施形態では、グラフィックス・プロセッサのコマンド・シーケンス910は、メディア動画を実行する際に、メディア・パイプライン924の経路に従う。一般に、メディア・パイプライン924のプログラミングの特定の用途及び方法は、メディア及び実行される計算動作に依存する。特定のメディア・デコード動作は、メディア・デコード中にメディア・パイプラインにオフロードされる可能性がある。幾つかの実施形態では、媒体パイプラインはバイパスされることも可能であり、メディア・デコードは、1つ以上の汎用処理コアによって提供されるリソースを使用して全体的又は部分的に実行されることが可能である。一実施形態では、メディア・パイプラインは、汎用グラフィックス・プロセッサ・ユニット(GPGPU)動作のための要素も含み、グラフィックス・プロセッサは、グラフィックス・プリミティブのレンダリングに明示的には関連しない計算シェーダー・プログラムを使用してSIMDベクトル演算を実行するために使用される。
幾つかの実施態様において、メディア・パイプライン924は、3Dパイプライン922と同様に構成される。メディア・パイプライン状態940を設定するためのコマンドのセットは、メディア・オブジェクト・コマンド942の前にコマンド・キューにディスパッチされる又は配置される。幾つかの実施形態では、メディア・パイプライン状態940のためのコマンドは、メディア・オブジェクトを処理するために使用されるメディア・パイプライン要素を構成するためのデータを含む。これは、エンコード又はデコード・フォーマットのような、メディア・パイプライン内のビデオ・デコード及びビデオ・エンコード・ロジックを構成するためのデータを含む。幾つかの実施形態では、メディア・パイプライン状態940のためのコマンドはまた、状態設定のバッチを含む「間接的な」状態要素に対する1つ以上のポインタの使用をサポートする。
一部の実施形態では、メディア・オブジェクト・コマンド942は、メディア・パイプラインによる処理のために、ポインタをメディア・オブジェクトに供給する。メディア・オブジェクトは、処理されるビデオ・データを含むメモリ・バッファを含む。幾つかの実施形態では、全てのメディア・パイプライン状態は、メディア・オブジェクト・コマンド942を発行する前に「有効」でなければならない。一旦、パイプライン状態が設定され、メディア・オブジェクト・コマンド942がキューイングされると、メディア・パイプライン924は、実行コマンド944又は同等な実行イベント(例えば、レジスタ書き込み)によりトリガされる。次いで、メディア・パイプライン924からの出力は、3Dパイプライン922又はメディア・パイプライン924によって提供される動作によって後処理されることが可能である。幾つかの実施形態では、GPGPU演算は、メディア演算と同様の方法で構成され、実行される。
グラフィックス・ソフトウェア・アーキテクチャ
図10は、幾つかの実施形態によるデータ処理システム1000のための例示的なグラフィックス・ソフトウェア・アーキテクチャを示す。幾つかの実施形態では、ソフトウェア・アーキテクチャは、3Dグラフィックス・アプリケーション1010、オペレーティング・システム1020、及び少なくとも1つのプロセッサ1030を含む。幾つかの実施形態では、プロセッサ1030は、グラフィックス・プロセッサ1032及び1つ以上の汎用プロセッサ・コア1034を含む。グラフィックス・アプリケーション1010及びオペレーティング・システム1020はそれぞれ、データ処理システムのシステム・メモリ1050内で実行される。
一部の実施形態では、3Dグラフィックス・アプリケーション1010は、シェーダー命令1012を含む1つ以上のシェーダー・プログラムを含む。シェーダー言語命令は、Direct3DのHLSL(High−level Shader Language)、GLSL(OpenGL Shader Language)などのようなハイレベル・シェーダー言語におけるものであってもよい。アプリケーションはまた、汎用プロセッサ・コア1034による実行に適したマシン言語における実行可能命令1014を含む。アプリケーションは、頂点データによって定義されるグラフィックス・オブジェクト1016も含む。
幾つかの実施形態では、オペレーティング・システム1020は、マイクロソフト・コーポレーション社からのMicrosoft(登録商標)、Windows(登録商標)オペレーティング・システム、プロプライエタリUNIX(登録商標)のようなオペレーティング・システム、又はLinux(登録商標)カーネルの変形を使用するオープン・ソースUNIX(登録商標)のようなオペレーティング・システムである。オペレーティング・システム1020は、Direct3D API、OpenGL API、又はVulkan APIなどのグラフィックスAPI 1022をサポートすることができる。Direct3D APIが使用される場合、オペレーティング・システム1020はフロント・エンド・シェーダー・コンパイラ1024を使用して、HLSLのシェーダー命令1012を、より低いレベルのシェーダー言語にコンパイルする。コンパイルはジャスト・イン・タイム(JIT)コンパイルであってもよいし、或いはアプリケーションはシェーダー事前コンパイルを実行することが可能である。幾つかの実施形態では、ハイレベル・シェーダーは、3Dグラフィックス・アプリケーション1010のコンパイル中に、低レベル・シェーダーにコンパイルされる。幾つかの実施形態では、シェーダー命令1012は、Vulkan APIによって使用される標準ポータブル中間表現(SPIR)のバージョンのような中間形式で提供される。
幾つかの実施形態では、ユーザー・モード・グラフィックス・ドライバ1026は、シェーダー命令1012をハードウェア固有の表現に変換するためのバック・エンド・シェーダー・コンパイラ1027を含む。OpenGL APIが使用される場合、GLSLハイ・レベル言語のシェーダー命令1012は、コンパイルのためにユーザー・モード・グラフィックス・ドライバ1026に渡される。幾つかの実施形態では、ユーザー・モード・グラフィックス・ドライバ1026は、オペレーティング・システム・カーネル・モード機能1028を使用して、カーネル・モード・グラフィックス・ドライバ1029と通信する。幾つかの実施形態では、カーネル・モード・グラフィックス・ドライバ1029は、コマンド及び命令をディスパッチするためにグラフィックス・プロセッサ1032と通信する。
IPコア実装
少なくとも1つの実施形態の1つ以上の態様は、プロセッサのような集積回路内のロジックを表現及び/又は定義する機械読み込み可能な媒体に格納される典型的なコードによって実装されることが可能である。例えば、機械読み取り可能な媒体は、プロセッサ内の種々のロジックを表現する命令を含んでもよい。機械(又はマシン)によって読み込まれる場合に、命令は、本願で説明される技術を実行するために論理を形成することをマシンに行わせる。このような表現は、「IPコア」として知られており、集積回路の構造を記述するハードウェア・モデルとして、有形の機械読み取り可能な媒体に記憶されることが可能な集積回路用の再利用可能な論理ユニットである。ハードウェア・モデルは、集積回路を製造する製造マシンにハードウェア・モデルをロードする、種々のカスタマ又は製造施設に供給されることが可能である。集積回路は、本願で説明される実施形態のいずれかに関連して記載される動作を回路が実行するように製造されることが可能である。
図11Aは、実施形態による動作を実行するために集積回路を製造するために使用されることが可能なIPコア開発システム1100を示すブロック図である。IPコア開発システム1100は、より大きな設計に組み込まれることが可能な、又は集積回路(例えば、SOC集積回路)全体を構築するために使用されることが可能な、モジュール式の再利用可能な設計を生じるために使用されてもよい。設計施設1130は、ハイ・レベル・プログラミング言語(例えば、C/C++)でIPコア設計のソフトウェア・シミュレーション1110を生成することができる。ソフトウェア・シミュレーション1110は、シミュレーション・モデル1112を使用して、IPコアの挙動を設計、テスト、及び検証するために使用されることが可能である。シミュレーション・モデル1112は、機能シミュレーション、行動シミュレーション、及び/又はタイミング・シミュレーションを含んでもよい。次いで、レジスタ転送レベル(RTL)設計1115が、シミュレーション・モデル1112から作成又は合成されることが可能である。RTL設計1115は、モデル化されたデジタル信号を用いて実行される関連論理を含む、ハードウェア・レジスタ間のデジタル信号の流れをモデル化する集積回路の挙動の抽象化である。RTL設計1115に加えて、論理レベル又はトランジスタ・レベルでのより低いレベルの設計が、生成、設計、又は合成されてもよい。従って、初期設計及びシミュレーションの特定の詳細は、変わる可能性がある。
RTL設計1115又は同等物は、更に、設計施設によって、ハードウェア記述言語(HDL)におけるものである可能性があるハードウェア・モデル1120、又は物理設計データの何らかの他の表現に、更に合成されてもよい。HDLは、IPコア設計を検証するために更にシミュレーション又はテストされることが可能である。IPコア設計は、不揮発性メモリ1140(例えば、ハード・ディスク、フラッシュ・メモリ、又は任意の不揮発性記憶媒体)を使用して、第三者製造施設1165に届けるために格納されることが可能である。代替的に、IPコア設計は、有線接続1150又は無線接続1160を介して(例えば、インターネットを介して)伝送されてもよい。次に、製造設備1165は、IPコア設計に少なくとも部分的に基づいて集積回路を製造することができる。製造される集積回路は、本願で説明される少なくとも1つの実施形態に従って動作を実行するように構成されることが可能である。
図11Bは、本願で説明される幾つかの実施形態による集積回路パッケージ・アセンブリ1170の側断面図を示す。集積回路パッケージ・アセンブリ1170は、本願で説明される1つ以上のプロセッサ又はアクセラレータ・デバイスの実装を示す。パッケージ・アセンブリ1170は、基板1180に接続されたハードウェア・ロジック1172、1174の複数ユニットを含む。ロジック1172、1174は、少なくとも部分的に、設定可能なロジック又は固定機能ロジックのハードウェアに実装されてもよく、本願で説明されるプロセッサ・コア、グラフィックス・プロセッサ、又は他のアクセラレータ・デバイスのうちの任意の1つ以上の部分を含むことが可能である。ロジック1172、1174の各ユニットは、半導体ダイ内に実装され、相互接続構造1173を介して基板1180と結合されることが可能である。相互接続構造1173は、ロジック1172、1174と基板1180との間で電気信号をルーティングするように構成されることが可能であり、バンプ又はピラーなどの相互接続を含むことが可能であるが、これらに限定されない。幾つかの実施形態では、相互接続構造1173は、例えばロジック1172、1174の動作に関連する入力/出力(I/O)信号及び/又は電力若しくはグランド信号などの電気信号をルーティングするように構成されてもよい。幾つかの実施態様において、基板1180は、エポキシ・ベースの積層基板である。基板1180は、他の実施形態では、他の適切なタイプの基板を含んでもよい。パッケージ・アセンブリ1170は、パッケージ相互接続1183を介して他の電気デバイスに接続することができる。パッケージ相互接続1183は、マザーボード、他のチップセット、又はマルチ・チップ・モジュールのような他の電気デバイスに電気信号をルーティングするために、基板1180の表面に結合されてもよい。
幾つかの実施形態では、ロジック1172、1174のユニットは、ロジック1172、1174の間で電気信号をルーティングするように構成されたブリッジ1182に電気的に結合される。ブリッジ1182は、電気信号に経路を提供する高密度相互接続構造であってもよい。ブリッジ1182は、ガラス又は適切な半導体材料から構成されるブリッジ基板を含んでもよい。ロジック1172、1174の間にチップ対チップ接続を提供するために、電気ルーティング機能部がブリッジ基板に形成されることが可能である。
ロジック1172、1174の2つのユニット及びブリッジ1182が示されているが、本願で説明される実施形態は、1つ以上のダイ上に、より多い又はより少ないロジック・ユニットを含んでもよい。ロジックが単一のダイに含まれる場合、ブリッジ1182は除外されてもよいので、1つ以上のダイは、ゼロ個以上のブリッジによって接続されることが可能である。代替的に、複数のダイ又はロジック・ユニットは、1つ以上のブリッジによって接続されることが可能である。更に、複数のロジック・ユニット、ダイ、及びブリッジは、三次元構成を含む他の可能な構成で互いに接続されることが可能である。
図11Cは、基板1180(例えば、ベース・ダイ)に接続された複数ユニットのハードウェア・ロジック・チップレットを含むパッケージ・アセンブリ1190を示す。本願で説明されるようなグラフィックス処理ユニット、並列プロセッサ、及び/又は計算アクセラレータは、別々に製造される多様なシリコン・チップレットから構成されることが可能である。この文脈において、チップレットは、他のチプレットと共により大きなパッケージに組み立てられことが可能な個々のロジック・ユニットを含む、少なくとも部分的にパッケージされた集積回路である。異なるIPコア・ロジックを有するチップレットの多様なセットは、単一のデバイスに組み立てられることが可能である。更に、チップレットは、アクティブ・インターポーザ技術を用いてベース・ダイ又はベース・チップレットに一体化されることが可能である。本願で説明される概念は、GPU内の様々な形態のIP間で相互接続及び通信を可能にする。IPコアは、様々なプロセス技術を用いて製造され、製造中に構成することが可能であり、これにより、複数のIP、特に複数のフレーバーIPを備えた大きなSoC上で、同一の製造プロセスに集中する複雑さを回避することができる。複数のプロセス技術を使用できるようにすることは、販売までの時間を改善し、複数の製品SKUを作成するためのコスト効果的な方法を提供する。加えて、非集約化されたIPは、独立してパワーゲート制御され、所与のワークロードで使用されないコンポーネントは、電源オフにされることが可能であり、全体的な電力消費を低減する。
ハードウェア・ロジック・チップレットは、特殊目的のハードウェア・ロジック・チップレット1172、ロジック又はI/Oチップレット1174、及び/又はメモリ・チップレット1175を含むことが可能である。ハードウェア・ロジック・チップレット1172及びロジック又はI/Oチップレット1174は、少なくとも部分的に、設定可能なロジック又は固定された機能ロジック・ハードウェアに実装されることが可能であり、本願で説明されるプロセッサ・コア、グラフィック・プロセッサ、パラレル・プロセッサ、又は他のアクセラレータ・デバイスのうちの任意の1つ以上の部分を含むことが可能である。メモリ・チップレット1175は、DRAM(例えば、GDDR、HBM)メモリ又はキャッシュ(SRAM)メモリであるとすることが可能である。
各チップレットは、別々の導体ダイとして製造され、相互接続構造1173を介して基板1180と結合されることが可能である。相互接続構造1173は、基板1180内の様々なチップレットとロジックとの間で電気信号をルーティングするように構成されてもよい。相互接続構造1173は、バンプ又はピラーなどの相互接続を含むことが可能であるが、これらに限定されない。幾つかの実施形態では、相互接続構造1173は、例えば、ロジック、I/O及びメモリ・チップレットの動作に関連する入力/出力(I/O)信号及び/又は電力若しくはグランド信号などの電気信号をルーティングするように構成されてもよい。
幾つかの実施態様において、基板1180は、エポキシ・ベースの積層基板である。基板1180は、他の実施形態では、他の適切なタイプの基板を含んでもよい。パッケージ・アセンブリ1190は、パッケージ相互接続1183を介して他の電気デバイスに接続することができる。パッケージ相互接続1183は、マザーボード、他のチップセット、又はマルチ・チップ・モジュールのような他の電気デバイスに電気信号をルーティングするために、基板1180の表面に結合されてもよい。
一部の実施形態では、ロジック又はI/Oチップレット1174及びメモリ・チップレット1175は、ロジック又はI/Oチップレット1174及びメモリ・チップレット1175の間で電気信号をルーティングするように構成されたブリッジ1187を介して電気的に結合されることが可能である。ブリッジ1187は、電気信号のルートを提供する高密度相互接続構造であってもよい。ブリッジ1187は、ガラス又は適切な半導体材料により構成されるブリッジ基板を含んでもよい。ロジック又はI/Oチップレット1174及びメモリ・チップレット1175の間にチップ対チップ接続を提供するために、電気的ルーティング機能部が、ブリッジ基板上に形成されことが可能である。ブリッジ1187は、シリコン・ブリッジ又は相互接続ブリッジとも呼ばれてもよい。例えば、ブリッジ1187は、幾つかの実施形態では、埋め込みマルチダイ相互接続ブリッジ(EMIB)である。幾つかの実施形態において、ブリッジ1187は、単に、1つのチップレットから別のチップレットへの直接接続であってもよい。
基板1180は、I/O1191、キャッシュ・メモリ1192、及び他のハードウェア・ロジック1193のためのハードウェア・コンポーネントを含むことができる。様々なロジック・チップレットと基板1180内のロジック1191、1193との間の通信を可能にするために、ファブリック1185は基板1180内に埋め込まれることが可能である。一実施形態では、I/O1191、ファブリック1185、キャッシュ、ブリッジ、及び他のハードウェア・ロジック1193は、基板1180のトップに積層されるベース・ダイに統合されることが可能である。ファブリック1185は、チップ相互接続上のネットワーク、又はパッケージ・アセンブリのコンポーネント間でデータ・パケットを切り替える別の形態のパケット交換ファブリックであってもよい。
様々な実施形態では、パッケージ・アセンブリ1190は、ファブリック1185又は1つ以上のブリッジ1187によって相互接続されたより少ない又はより多い数のコンポーネント及びチップレットを含むことが可能である。パッケージ・アセンブリ1190内のチップレットは、3D又は2.5D形式で配置されてもよい。一般に、ブリッジ構造1187は、例えばロジック又はI/Oチップレット及びメモリ・チップレットの間の点対点の相互接続を促進にするために使用されてもよい。ファブリック1185は、種々のロジック及び/又はI/Oチップレット(例えば、チップレット1172、1174、1191、1193)を、他のロジック及び/又はI/Oチップレットと相互接続するために使用されることが可能である。一実施形態では、基板内のキャッシュ・メモリ1192は、パッケージ・アセンブリ1190のためのグローバル・キャッシュ、分散されたグローバル・キャッシュの一部、又はファブリック1185のための専用キャッシュとして機能することが可能である。
図11Dは、一実施形態による、交換可能なチップレット1195を含むパッケージ・アセンブリ1194を示す。交換可能なチップレット1195は、1つ以上のベース・チップレット1196、1198上の標準化スロットに組み立てられることが可能である。ベース・チップレット1196、1198は、ブリッジ相互接続1197を介して結合されてもよく、ブリッジ相互接続1197は、本願で説明される他のブリッジ相互接続と同様であるとすることが可能であり、例えばEMIBであってもよい。メモリ・チップレットは、ブリッジ相互接続を介してロジック又はI/Oチップレットに接続すされることも可能である。I/O及びロジック・チップレットは、相互接続ファブリックを介して通信することが可能である。ベース・チップレットの各々は、ロジック又はI/O又はメモリ/キャッシュのうちの1つに対して標準化されたフォーマットで1つ以上のスロットをサポートすることができる。
一実施形態では、SRAM及び電力分配回路は、ベース・チップレット1196、1198のうちの1つ以上内に製造されることが可能であり、これらは、ベース・チップレットの上に積み重ねられる交換可能なチップレット1195に対して異なるプロセス技術を用いて製造されることが可能である。例えば、ベース・チップレット1196、1198は、より大規模なプロセス技術を用いて製造することが可能であり、交換可能なチップレットは、より小規模なプロセス技術を用いて製造されることが可能である。1つ以上の交換可能なチップレット1195は、メモリ(例えば、DRAM)チップレットであってもよい。パッケージ・アセンブリ1194を使用する製品に対してターゲットとする電力及び/又はパフォーマンスに基づいて、様々なメモリ密度が、パッケージ・アセンブリ1194に対して選択されることが可能である。更に、多種多様な機能ユニットを有するロジック・チップレットは、製品のターゲットとされる電力及び/又はパフォーマンスに基づいて組み立て時に選択されることが可能である。更に、異なるタイプのIPロジック・コアを含むチップレットが、交換可能なチップレット・スロットに挿入されることが可能であり、異なる技術IPブロックを混合して適合させることが可能なハイブリッド・プロセッサ設計を可能にする。
チップ集積回路におけるシステム例
図12−13Bは、本願で説明される様々な実施形態による1つ以上のIPコアを使用して製造されることが可能な例示的な集積回路及び関連するグラフィックス・プロセッサを示す。図示されているものに加えて、追加のグラフィックス・プロセッサ/コア、周辺インターフェース・コントローラ、又は汎用プロセッサ・コアを含む、他のロジック及び回路が包含されてもよい。
図12は、一実施形態による1つ以上のIPコアを使用して製造されることが可能なチップ集積回路1200上の例示的なシステムを示すブロック図である。例示的な集積回路1200は、1つ以上のアプリケーション・プロセッサ1205(例えば、CPU)と、少なくとも1つのグラフィックス・プロセッサ1210とを含み、更に、画像プロセッサ1215及び/又はビデオ・プロセッサ1220を含んでもよく、何れも同一又は複数の異なる設計施設からのモジュラIPコアであってもよい。集積回路1200は、USBコントローラ1225、UARTコントローラ1230、SPI/SDIOコントローラ1235、及びIS/ICコントローラ1240を含む周辺又はバス・ロジックを含む。更に、集積回路は、高解像度マルチメディア・インターフェース(HDMI(登録商標))コントローラ1250及びモバイル産業用プロセッサ・インターフェース(MIPI)ディスプレイ・インターフェース1255のうちの1つ以上に結合されたディスプレイ・デバイス1245を含むことが可能である。ストレージは、フラッシュ・メモリ及びフラッシュ・メモリ・コントローラを含むフラッシュ・メモリ・サブシステム1260によって提供されてもよい。メモリ・インターフェースは、SDRAM又はSRAMメモリ・デバイスへのアクセスのために、メモリ・コントローラ1265を介して提供されてもよい。幾つかの集積回路は、埋め込みセキュリティ・エンジン1270を更に含む。
図13A−13Bは、本願で説明される実施形態に従った、SoC内で使用するための例示的なグラフィックス・プロセッサを示すブロック図である。図13Aは、実施形態による、1つ以上のIPコアを使用して製造されることが可能なチップ集積回路上のシステムの例示的なグラフィックス・プロセッサ1310を示す。図13Bは、実施形態による、1つ以上のIPコアを使用して製造されることが可能なチップ集積回路上のシステムの追加の例示的なグラフィックス・プロセッサ1340を示す。図13Aのグラフィックス・プロセッサ1310は、低電力グラフィックス・プロセッサ・コアの例である。図13Bのグラフィックス・プロセッサ1340は、高性能グラフィックス・プロセッサ・コアの一例である。グラフィックス・プロセッサ1310、1340の各々は、図12のグラフィックス・プロセッサ1210の変形であるとすることが可能である。
図13Aに示されるように、グラフィックス・プロセッサ1310は、頂点プロセッサ1305及び1つ以上のフラグメント・プロセッサ(例えば、1315A、1315B、1315C、1315D、1315N−1及び1315N)を含む。グラフィックス・プロセッサ1310は、頂点プロセッサ1305が頂点シェーダー・プログラムに対して演算を実行するように最適化される一方、1つ以上のフラグメント・プロセッサ(複数可)1315A−1315Nが、フラグメント又はピクセル・シェーダー・プログラムに対してフラグメント(例えば、ピクセル)シェーダー演算を実行するように、別々のロジックにより異なるシェーダー・プログラムを実行することが可能である。頂点プロセッサ1305は、3Dグラフィックス・パイプラインの頂点処理ステージを実行し、プリミティブ及び頂点データを生成する。フラグメント・プロセッサ(複数可)1315A−1315Nは、頂点プロセッサ1305によって生成されたプリミティブ及び頂点データを使用して、ディスプレイ・デバイスに表示されるフレーム・バッファを生成する。一実施形態では、フラグメント・プロセッサ(複数可)1315A−1315Nは、OpenGL APIで提供されているように、フラグメント・シェーダー・プログラムを実行するように最適化されており、このプログラムは、Direct3D APIで提供されるような、ピクセル・シェーダー・プログラムと同様な動作を実行するために使用されることが可能である。
グラフィックス・プロセッサ1310は、1つ以上のメモリ管理ユニット(MMU)1320A−1320B、キャッシュ1325A−1325B、及び回路相互接続1330A−1330Bを更に含む。1つ又は複数のMMU(複数可)1320A−1320Bは、頂点プロセッサ1305及び/又はフラグメント・プロセッサ(複数可)1315A−1315Nを含むグラフィックス・プロセッサ1310のための仮想物理アドレス・マッピングを提供し、これは、1つ又は複数のキャッシュ1325A−1325Bに記憶された頂点又は画像/テクスチャ・データに加えて、メモリに記憶された頂点又は画像/テクスチャ・データを参照することができる。一実施形態では、1つ又は複数のMMU(複数可)1320A−1320Bは、各プロセッサ1205−1220が共有又は統一仮想メモリ・システムに参加できるように、図12の1つ又は複数のアプリケーション・プロセッサ1205、画像プロセッサ1215、及び/又はビデオ・プロセッサ1220に関連付けられた1つ又は複数のMMUを含む、システム内の他のMMUと同期することが可能である。1つ以上の回路相互接続(複数可)1330A−1330Bは、実施形態によるグラフィックス・プロセッサ1310が、SoCの内部バスを介して又は直接接続を介して、SoC内の他のIPコアとのインターフェースとなることを可能にする。
図13Bに示すように、グラフィックス・プロセッサ1340は、図13Aのグラフィックス・プロセッサ1310の1つ以上のMMU1320A−1320B、キャッシュ1325A−1325B、及び回路相互接続1330A−1330Bを含む。グラフィックス・プロセッサ1340は、1つ以上のシェーダー・コア1355A−1355N(例えば、1355A、1355B、1355C、1355D、1355E、1355F、ないし1355N−1、及び1355N)を含み、単一のコア又はタイプ又はコアが、頂点シェーダー、フラグメント・シェーダー、及び/又は計算シェーダーを実装するシェーダー・プログラム・コードを含む、全てのタイプのプログラマブル・シェーダー・コードを実行することが可能な統一されたシェーダー・コア・アーキテクチャを提供する。提示されているシェーダー・コアの正確な数は、実施形態及び実装に応じて変わる可能性がある。更に、グラフィックス・プロセッサ1340は、1つ以上のシェーダー・コア1355A−1355Nに実行スレッドをディスパッチするためのスレッド・ディスパッチャとして機能するコア間タスク・マネージャ1345と、タイル・ベースのレンダリングのためのタイル処理を加速するタイル・ユニット1358とを含み、シーンのレンダリング動作は、例えばシーン内の局所空間コヒーレンスを利用するため、又は内部キャッシュの使用を最適化するために、画像空間内で細分化される。
機械学習ワークロードのためのテンソル加速ロジック
図14は、実施形態によるデータ処理システム1400のブロック図である。データ処理システム1400は、プロセッサ1402と、統一メモリ1410と、機械学習加速ロジックを含むGPGPU1420とを有するヘテロジニアス処理システムである。プロセッサ1402及びGPGPU1420は、本願で説明されるような任意のプロセッサ及びGPGPU/並列プロセッサであるとすることが可能である。プロセッサ1402は、システム・メモリ1412に記憶されたコンパイラ1415のための命令を実行することができる。コンパイラ1415は、ソース・コード1414Aを、コンパイルされたコード1414Bにコンパイルするために、プロセッサ1402上で実行する。コンパイルされたコード1414Bは、プロセッサ1402によって実行される可能性のある命令、及び/又はGPGPU1420によって実行される可能性のある命令を含むことが可能である。コンパイルの間に、コンパイラ1415はメタデータを挿入する動作を実行することが可能であり、メタデータは、コンパイルされたコード14Bに存在するデータ並列性のレベルに関するヒント、及び/又はコンパイルされたコード14Bに基づいてディスパッチされるべきスレッドに関連するデータ局所性に関するヒントを含む。コンパイラ1415は、そのような動作を実行するために必要な情報を含むことが可能であり、或いはその動作はランタイム・ライブラリ1416の支援とともに実行されることが可能である。ランタイム・ライブラリ1416はまた、ソース・コード1414Aのコンパイルにおいてコンパイラ1415を支援することも可能であり、また、GPGPU1420上でのコンパイルされた命令の実行を促進にするために、コンパイルされたコード14Bとランタイムでリンクされる命令を含むことも可能である。
統一メモリ1410は、プロセッサ1402及びGPGPU1420によってアクセスされることが可能な統一されたアドレス空間を表現する。統一メモリは、システム・メモリ1412及びGPGPUメモリ1418を含むことが可能である。GPGPUメモリ1418は、GPGPU1420のアドレス空間内のメモリであり、システム・メモリ1412の一部又は全部を含むことが可能である。一実施形態では、GPGPUメモリ1418はまた、GPGPU1420により排他的に専有される任意のメモリの少なくとも一部を含むことも可能である。一実施形態では、システム・メモリ1412に格納されたコンパイルされたコード1414Bは、GPGPU1420によるアクセスのためにGPGPUメモリ1418にマッピングされることが可能である。
GPGPU1420は、複数の計算ブロック1424A−1424Nを含み、これは、本願で説明される種々の1つ以上の処理リソースを含むことが可能である。処理リソースは、例えば、実行ユニット、計算ユニット、ストリーミング・マルチプロセッサ、グラフィックス・マルチプロセッサ、又はマルチ・コア・グループのような多種多様な計算リソースであってもよいし、或いはそれらを含むことも可能である。一実施形態では、GPGPU1420は、テンソル(例えば、行列)アクセラレータ1423を追加的に含み、このテンソル・アクセラレータは、行列演算のサブセット(例えば、ドット積など)を加速するように設計された1つ以上の特殊関数計算ユニットを含むことが可能である。テンソル・アクセラレータ1423は、テンソル・アクセラレータ又はテンソル・コアと言及されてもよい。一実施形態では、テンソル・アクセラレータ1423内の論理コンポーネントは、複数の計算ブロック1424A−1424Nの処理リソースにわたって分散されてもよい。
GPGPU1420はまた、計算ブロック1424A−1424N及びテンソル・アクセラレータ1423によって共有されることが可能なリソースのセットを含むことも可能であり、リソースのセットは、レジスタ1425のセット、電力&パフォーマンス・モジュール1426、及びキャッシュ1427を含むがこれらに限定されない。一実施形態では、レジスタ1425は直接的及び間接的にアクセス可能なレジスタを含み、ここで、間接的にアクセス可能なレジスタは、テンソル・アクセラレータ1423による使用のために最適化される。電力&パフォーマンス・モジュール1426は、計算ブロック1424A−1424Nに対する電力配分及びクロック周波数を調整し、計算ブロック1424A−1424N内のアイドル・コンポーネントの電力ゲートを制御するように構成されることが可能である。様々な実施形態において、キャッシュ1427は、命令キャッシュ及び/又は下位レベルのデータ・キャッシュを含むことが可能である。
GPGPU1420は追加的にL3データ・キャッシュ1430を含むことが可能であり、L3データ・キャッシュ1430は、計算ブロック1424A−1424N内の計算要素及び/又はテンソル・アクセラレータ1423によって統一メモリ1410の中からアクセスされたデータをキャッシュするために使用されることが可能である。一実施形態では、L3データ・キャッシュ1430は、テンソル・アクセラレータ1423及びコンピュータ・ブロック1424A−1424N内の計算要素によって共有されることが可能な共有ローカル・メモリ1432を含む。
一実施形態では、GPGPU1420は、フェッチ&デコード・ユニット1421及びスケジューラ・コントローラ1422などの命令ハンドリング・ロジックを含む。フェッチ&デコード・ユニット1421は、計算ブロック1424A−1424N又はテンソル・アクセラレータ1423のうちの1つ以上による実行のための命令を、フェッチ及びデコードするフェッチ・ユニット及びデコード・ユニットを含む。命令は、スケジューラ・コントローラ1422により、テンソル・アクセラレータ又は計算ブロック1424A−1424N内の適切な機能ユニットに対してスケジューリングされることが可能である。一実施形態では、スケジューラ・コントローラ1422は、高度なスケジューリング動作を実行するように構成することが可能なASICである。一実施形態では、スケジューラ・コントローラ1422は、ファームウェア・モジュールからロードされたスケジューラ命令を実行することが可能な、命令当たりエネルギが低い処理コア又はマイクロ・コントローラである。
一実施形態では、計算ブロック1424A−1424Nによって実行される幾つかの機能は、テンソル・アクセラレータ1423に対して直接的にスケジューリングされるか、又はオフロードされることが可能である。様々な実施形態では、テンソル・アクセラレータ1423は、3Dグラフィックス又は計算シェーダー・プログラムによって使用される乗算及び加算演算、及びドット積演算などの行列計算オペレーションを効率的に実行するように構成された処理要素ロジックを含む。一実施形態では、テンソル・アクセラレータ1423は、機械学習フレームワークによって使用される演算を加速するように構成されることが可能である。一実施形態では、テンソル・アクセラレータ1423は、並列的な行列乗算及び/又は加算演算の特定のセットを実行するように明示的に構成された特定用途向け集積回路である。一実施形態では、テンソル・アクセラレータ1423は、ワークロード間で更新されることが可能な固定機能ロジックを提供するフィールド・プログラマブル・ゲート・アレイ(FPGA)である。テンソル・アクセラレータ1423によって実行されることが可能な一組の行列演算は、計算ブロック1424A−1424Nによって実行されることが可能な演算に関連して制限される可能性がある。しかしながら、テンソル・アクセラレータ1423は、計算ブロック1424A−1424Nと比較してかなり高いスループットでこれらの動作を実行することが可能である。
図15は、実施形態による命令パイプライン1500によって実行される行列演算1505を示す。命令パイプライン1500は、ドット積演算のような行列演算1505を実行するように構成されることが可能であるが、ドット積演算に限定されない。2つのベクトルのドット積は、ベクトルの対応する成分の積和に等しいスカラ値である。ドット積は、次式(1)に示されるように計算されることが可能である。
Figure 2021177366
ドット積は、畳み込みニューラル・ネットワーク(CNN)の畳み込み演算で使用されることが可能である。図15は、ドット積演算を含む行列演算1505を使用する2次元(2D)畳み込みを示す。2D畳み込みが示されているが、N次元畳み込みが、N次元フィルタを用いてN次元ボリューム上で実行されることが可能である。受容野タイル1502は、入力ボリューム・バッファ1504における入力ボリュームの一部を強調する。入力ボリューム・バッファは、メモリ1530に記憶されることが可能である。ドット積行列演算1505が、受容野タイル1502内のデータと畳み込みフィルタとの間で実行され、出力バッファ1506におけるデータ点を生成し、これもメモリ1530に格納されることが可能である。メモリ1530は本願で説明される任意のメモリであるとすることが可能であり、図14のように、システム・メモリ1412、GPGPUメモリ1418、又は1つ以上のキャッシュ・メモリ1427、1430を含む。
出力バッファ1506内のデータ点の組み合わせは、畳み込み演算によって生成される活性化マップを表現する。活性化マップ内の各点は、入力ボリューム・バッファ1504にわたって受容野タイルをスライドさせることによって生成される。活性化マップ・データは、出力活性化値を決定するために活性化関数に入力されることが可能である。一実施形態では、入力ボリューム・バッファ1504の畳み込みは、ハイ・レベル行列演算1505としてフレームワーク内で定義されることが可能である。ハイ・レベル行列演算は、基本線形代数サブプログラム(BLAS)演算のようなプリミティブ演算によって実行されることが可能である。プリミティブ演算は、命令パイプライン1500によって実行されるハードウェア命令によって加速されることが可能である。
ハードウェア命令を加速するために使用される命令パイプライン1500は、ハードウェア命令をフェッチ及びデコードすることが可能な命令フェッチ&デコード・ユニット1421と、デコードされた命令を、テンソル・アクセラレータ1423及び/又は計算ブロック1424A−1424N内の1つ以上の処理リソースに対してスケジューリングすることが可能なスケジューラ・コントローラ1422とを含むことが可能である。一実施形態では、ハードウェア命令は、計算ブロック1424A−1424Nに対してはスケジューリングされ、テンソル・アクセラレータ1423に対してはオフロードされることが可能である。行列演算1505を実行するための1つ以上のハードウェア命令及び関連データは、メモリ1530に記憶されることが可能である。ハードウェア命令の出力は、メモリ1530に記憶されることも可能である。
一実施形態では、テンソル・アクセラレータ1423は、統合されたシストリック・アレイ1508(DPロジック)を使用して行列演算1505を実行するために、1つ以上のハードウェア命令を実行することができる。シストリック・アレイ1508は、ドット積演算を実行するように構成することが可能なプログラマブル及び固定機能ハードウェアの組み合わせを含むことが可能である。計算ブロック1424A−1424N内の機能ユニットは、ドット積演算を実行するように構成されることも可能であるが、シストリック・アレイ1508は、計算ブロック1424A−1424Nと比較してかなり高いスループットで、ドット積演算の限られたサブセットを実行するように構成されることが可能である。
フィードバック入力を有するシストリック・アレイを用いたスケーラブルなスパース行列乗算加速
本願で説明されるものは、フィードバック入力を有するシストリック・アレイを利用してスケーラブルなスパース行列乗算加速を可能にするアーキテクチャである。アーキテクチャは、ワークロードのデータが多数のゼロを示すワークロードにおいてシストリック行列乗算を加速する。このアーキテクチャは、容易にスケーラブルであり、ワークロードのデータに見受けられるスパース性を活用して導入される最適化によって与えられる利得を維持し、命令スループットを増加させることを可能にする。利点は、他のシストリック・アレイと比較した場合のパフォーマンスの向上、電力消費の減少、面積の減少を含む。このアーキテクチャは、非常にスパースなデータ負荷における計算数を減らすことにより、シストリック・ドット積累積演算のパフォーマンスを改善する。計算の削減は、従来のアーキテクチャと比較した場合に、電力消費の低減をもたらす。このアーキテクチャはまた、シストリック・アレイの設計を単純化することにより、既存のシストリック・アレイよりも良好にスケーリングできる。単純化された設計は、アーキテクチャがアクセラレータ設計に幅広く組み込まれ、それらのアクセラレータの行列処理スループットを増加させることを可能にする。
機械学習アルゴリズムの計算に使用されるデータは、入力要素として非常に多数のゼロを示す。ニューラル・ネットワーク・アプリケーションでは、これは、実装されたネットワークのトポロジー及びモデル化されたニューロンの特性によって自然に引き起こされる。一例として、完全に相互接続されたニューラル・ネットワークにおいて、ニューロンの列又は層の出力は、次の層の各ニューロンの入力に接続される。ネットワークは多数の層により構成されており、各層は多数のニューロンで特徴付けられる可能性がある。ニューロンの出力の計算における最終ステージは、活性化関数を実施することである。この関数は、通常、ニューロンの入力の計算が正である場合は正の関数の評価を出力し、それが負である場合はゼロを出力する。これに起因して、ニューロンの多数の出力結果は、ゼロである可能性があり、ニューラル・ネットワークの計算における次のステップにおいて、次のネットワーク層に供給される。
多数の層とニューロンを特徴付けるニューラル・ネットワークの実施において、各層は、ニューロンの入力ウェイトの値の行列と、ニューロンへの入力の値の行列とによって表現される。ニューロンへの全ての入力は、その重みで乗算され、ニューロンへの他の入力の結果に加算される。その後、活性化関数が適用され、次のネットワーク層に供給するニューロンの出力を取得する。ニューロンの入力及び重みの乗算及び加算を高速に計算するために、幾つもの技術がハードウェアにおいて使用されてきた。本発明に関連するものは、乗算及び累積演算のためのシストリック・アレイの使用である。
図16は、パイプライン方式で組織された乗算器及び加算器回路を含むシストリック・アレイ1600を示す。第1入力行列に対する入力1612A−1612Hは、Src1及びSrc1+1ないしSrc1+7のラベルが付された入力に含まれるデータ要素によって表現される。入力1610A−1610Bは、第2入力行列に対応し、Src2としてラベル付けされる。初期アキュムレータ値を含む可能性がある入力1602は、Src0として提供されることが可能である。シストリック・アレイ1600の処理要素1611A−1611Hは、パイプライン構造として動作し、各ステージは、クロック・サイクルで実行される。全てのサイクルにおいて、全てのステージは新しいSrc2入力を受け取ることが可能であり、新しいSrc2入力は、新しいSrc1入力又は古い入力とともに計算されることが可能である。Src2入力は、8つのSrc1入力(例えば、ステージ当たり1つのSrc1入力)とともに作用する。Src2入力のチャネルのデータ要素は、処理要素1611A−1611Hの全チャネルにわたってブロードキャストされる。次に、処理要素は、Src1入力の全てのチャネルとともにSrc2チャネルを作用させる。第1クロック・サイクルでは、Src1入力は、Src2の第1チャネルのデータ要素とともに作用させられる。次のサイクルでは、第2Src1(Src1+1としてラベル付けされている)がSrc2の第2チャネルのデータ要素とともに作用する。このシーケンスは、パイプラインの8ステージで繰り返される。各ステージは、その作用を前のステージの出力に追加する。パイプライン・ステージを通じて、複数のSrc2入力がパイプライン方式で処理される。第1Src2入力の連続したチャネルが、パイプライン・ステージを通過してプッシュされるので、新しいSrc2入力が第1ステージで提供されることが可能である。
最終ステージからの出力1622はDstとしてラベル付けされる。ここで、d=シストリック深度であり、e=チャネル当たりのデータ要素数であり、チャネルの出力は以下の式(2)によって記述される:
Figure 2021177366
式(2)に示すように、各チャネルは、演算が並列に実行される複数のデータ要素を含むことが可能である。一実施形態では、各チャネルは4要素のデータ・ベクトルを表現するが、各チャネルに対して異なる数の要素が設定されることが可能である。一実施形態では、チャネル内のデータ要素の数は、各データ要素のサイズに基づいて変化し得る。ドット積は、例えば、要素当たり8ビット・データ・タイプの4要素ベクトル、16ビット・データ・タイプの2要素ベクトル、4ビット・データ・タイプの8要素ベクトル(例えば、INT4)、あるいは2ビット・データ・タイプの16要素ベクトル(例えば、INT2)を使用して実行されることが可能である。チャネル数は、Src1及びSrc2のデータ・タイプに応じて自動的に調整されることが可能である。命令はまた、命令に使用されるのに必要なシストリック深度を指定することも可能である。
一実施形態では、処理要素1611A−1611Hは、入力1610A−1610H、1612A−1612Hを、汎用レジスタ・ファイルから直接的に読み込む可能性がある。一実施形態では、シストリック・アレイ1600は、入力1610A−1610H、1612A−1612Hを汎用レジスタ・ファイルから読み込み、シストリック・アレイの内部にあるレジスタ、バッファ、又はメモリに入力データを格納するロジックを含む。次いで、内部ロジックは、処理のために、入力データ要素を処理要素1611A−1611Hに与えることが可能である。出力1622は、シストリック・アレイ1600の内部レジスタ又はメモリに書き込まれること、及び/又は汎用レジスタ・ファイルに直接的に書き込まれることが可能である。
一実施形態では、ステージ内の乗算器/加算器に入力される要素はゼロであると判断された場合、乗算/加算は迂回(バイパス)されることが可能であり、前の入力が伝搬されるだけである。入力行列がスパースである(例えば、多数のゼロを含む)場合、実行されるべき演算の数は削減される。幾つかの実装形態は、乗算/加算演算を行う消費電力を回避するために、乗算/累積ステージをバイパスすることが可能である。しかしながら、演算を単にバイパスすることは、シストリック・チェーンにおけるアイドル・ステージという結果を招く。例えば、Src2入力の要素が全てゼロである場合、その要素に関連付けられたステージをバイパスすることは、電力を節約することになるであろう。しかしながら、そのサイクルで演算は行われない。従って、演算のスループットは改善されないままである。他の実装は、アレイのセクション全体がバイパスされ得るような方法で、入力を再配置することが可能である。入力を配置し直すことは、入力を再配置するための余分なハードウェアの追加に起因して、スケール・アップ・コストを増やす。アーキテクチャは、スパース性を有しない入力のケースを考慮しなければならず、これは、パイプラインの全深度を使用する必要がある。従って、アーキテクチャは、全てのステージが常に利用可能であるように設計されるべきである。
本願で説明されるものは、種々の実施形態において、上記の問題を回避しつつ、ある意味でスパース入力を処理する最適化を伴うアーキテクチャである。実施形態は、様々な製品のニーズを充足するように容易にスケーラブルにすることができ、追加のハードウェア又はアイドル・クロック・サイクル無しに、非ゼロ要素のみの計算を可能にするモジュール式シストリック・アレイを提供する。これらの概念は、本明細書の次のセクションで徐々に説明される。
フィードバック入力を有する行列乗算アクセラレータ
シストリック・アレイ1600は、蓄積による8深層乗算/加算アレイであり、ドット積累積シストリック(Dot Product Accumulate Systolic,DPAS)アレイと呼ばれてもよい。このようなアーキテクチャの深さは、何らかの製品、プロジェクト、及び/又はユース・ケースに有益である。他の製品、プロジェクト、及び/又はユース・ケースは、そのような深さのアレイを必要とせず、スループットはより低いが、より小さな面積、及び/又はより低い消費電力による恩恵があるであろう。或いは、他の製品、プロジェクト、及び/又はユース・ケースは、より大きなパイプライン深度を使用することによって達成可能なより高いDPASスループットから恩恵があるであろう。より深いアレイに使用される同じプログラミング・モデルを保ちながら、シストリック・アレイで使用されるハードウェアの量を減らすために、フィードバック入力は、図16に示されるシストリック・アレイの縮小深度バージョンに追加される。
図17A−17Bは、8つのシストリック・ステージの等価アレイを計算するための4深層シストリック・アレイ1700の使用例を示す。図17Aは、外部ソースからSrc0入力を受け取り、Src1及びSrc2入力により最初の4つのステージを処理するアレイを示す。このアレイの出力は、図17Bに示される第2ステップにフィードバックされる。図17Bは、次の4つのステージが、既に処理された値とSrc1及びSrc2入力とを含むフィードバック・データを使用して計算されることを示す。
図17Aに示すように、シストリック・アレイ1700は、データ・セレクタ1704により読み込まれる入力1602を、Src0入力として受け入れることができる(1702)。データ・セレクタ1704は、入力1602とフィードバック入力1706との間で選択を行う。処理要素1611A−1611Dは、シストリック・アレイ1600と同様の方法で、入力1610A−1610D及び1612A−1612Dを処理することが可能である。4つのステージが演算を完了するのに十分である場合、処理要素1611Dは、データ・セレクタ1724により、指定されたDstレジスタ又はメモリに出力1622を書き込むことができる(1722)。更なるステージが必要とされる場合、データ・セレクタ1724は、処理要素1611Aへのフィードバック入力1706として提供されるフィードバック出力1726を書き込むことができる。
図17Bに示すように、一実施形態では、フィードバック入力1706は、処理要素1611A−1611Dによって更に処理されることが可能である。フィードバック入力1706は、既に処理された値を含む。一実施形態では、フィードバック入力1706はまた、入力1610E−1610H、入力1612E−1612Hを含むことが可能であり、これらは、最初の4つのステージを処理する間に予めフェッチされることが可能である。データ・セレクタ1704は、処理要素1611Aによる入力のためにフィードバック入力1706を選択する。次いで、処理要素1611A−1611Dは、入力1610E−1610H及び1612E−1612Hを処理することができる。その後、データ・セレクタ1724は、第8ステージの結果を出力1622として、指定されたDstレジスタに書き込むことができる。
図16及び図17A−17Bのアレイの時間ダイアグラムが、図18A−18Bに示されている。
図18A−18Bは、2つのタイミング図1800、1850を示す。図18Aは、図16に示される8深層シストリック・アレイ1600に対応するタイミング図1800を示す。図18Bは、図17A−17Bに示されるフィードバック入力を有するシストリック・アレイに対応するタイミング図1850を示す。複数のクロック周期が示されている。
図18Aに示されるように、タイミング図1800は読み込みサイクル1802を示し、読み込みサイクル1802は、アレイに供給される入力を読み込むシストリック・アレイ1600の読み込みロジックに対応する。シストリック・サイクル1804は、アレイの各ステージにおいて、これらの入力が処理される方法に対応する。書き込みサイクル1806は、指定された宛先位置に出力を書き込む出力ロジックに対応する。読み込みサイクル1802のサイクル0で読み込まれる入力は、シストリック・サイクル1804のサイクル0−7でシストリック・アレイによって処理される。読み込みサイクル1802のサイクル1で読み込まれた入力は、シストリック・サイクル1804のサイクル1−8で処理される。シストリック・サイクル1804のサイクル0で始まる処理は、書き込みサイクル1806のサイクル「N」で出力される。一実施形態では、Nの値は、シストリック・アレイの深さに関連付けられてもよい。シストリック・サイクル1804のサイクル1で始まる処理は、サイクル1−8で処理され、書き込みサイクル1806のサイクルN+1で出力される。アレイのパイプライン化された性質に起因して、サイクルN及びN+1で出力をもたらす計算は、シストリック・アレイの種々のパイプライン化されたステージ(ステージ1−ステージ8)によって並行的に実行される。
読み込みサイクル1802のサイクルは、1つ以上のサイクルだけシストリック・サイクル1804に先行する。例えば、読み込みサイクル1802のサイクル0は、シストリック・サイクル1804のサイクル0の前に生じることが可能である。一実施形態では、読み込みサイクル1802のサイクル1は、シストリック・サイクル1804のサイクル0と同時に起こることが可能である。シストリック・サイクル1804のサイクル0の間に、シストリック・アレイのステージ1は、読み込みサイクルのサイクル0で読み込んだ入力に基づいて、Src0+Src1×Src2.0を計算する。Src1の要素0−7の各々は、Src2の要素0と並列的に乗算され、Src0の対応する要素0−7に加算される。ステージ1からの結果はステージ2に渡される。シストリック・サイクル1804のサイクル1において、ステージ2は、サイクル0でステージ1によって計算された結果を、[Src1+1]×Src2.1の結果とともに累積し、ここで、Src2の要素1は「Src1+1」の各要素により乗算される。Src1はステージ1に残り、サイクル1において、ステージ1は、次のSrc0及びSrc2入力とともに、[Src0+1]+Src1*[Src2+1.0]を計算する。第1ステージにおいて、Src1の要素0−7の各々は、[Src2+1]の要素0と並列的に乗算され、[Src0+1]の対応する要素に加算される。処理は、各ステージ及び各サイクルに対するこのパターンで続き、結果は、書き込みサイクル1806のサイクルNで始まるステージ8から出力される。
図18Bに示されるように、タイミング図1850は、図16のシストリック・アレイ1600の8深層パイプラインの最初の4つのステージと同様に、図17A−17Bのシストリック・アレイ1700が、シストリック・サイクル1854のサイクル0から始まって、読み込みサイクル1852のサイクル0で読み込まれた入力の第1グループを処理することを示す。図18Bでは、読み込みサイクル1852は、必ずしもシストリック・サイクル1854の対応するサイクルと整列しているとは限らないことが、理解されるであろう。シストリック・アレイ1700の読み込みロジックは、シストリック・アレイ1600と同じ方法で入力の第1グループを読み込むことが可能である。読み込みサイクル1852のサイクル0ないし3で読み込まれる最初の4つの入力は、シストリック・アレイ1700によってパイプライン方式で処理されることが可能である。出力は、書き込みサイクル1856において「N」としてラベル付けされたサイクルで生成される。従って、シストリック・アレイ1700のサイクルNにおける最初の出力までの待ち時間は、シストリック・アレイ1700による待ち時間と同じである。しかしながら、シストリック・アレイ1700のスループットは、Dst3とDst4の出力の間に遅延が存在するので減少し、フィードバックに起因して書き込みサイクルのサイクルN+8ないしN+11で書き込まれる。
シストリック・アレイ1700の場合、フィードバックはシストリック・サイクル1854のサイクル4で始まる。フィードバックはサイクル7まで生じる。一旦、フィードバックがシストリック・サイクル1854のサイクル4で始まると、破線入力によって表現されるように、Src1入力のみが、処理エレメントによって、シストリック・サイクル1854のサイクル4、5、6、及び7に読み込まれる。Src0及びSrc2入力の次のグループは、シストリック・サイクル1854のサイクル8において始まる処理要素によって読み込まれる。読み込みロジックは、これらの入力が必要とされるまで、Src0及びSrc2入力の読み込みを遅延させることができ、又は図示のように、これらの入力をSrc1入力に関連して読み込むことができる。一旦、入力が読み込まれると、これらの入力は、シストリック・アレイによってバッファリングされ、再使用されることが可能である。
シストリック・アレイ1600に対するフィードバックを有する行列乗算アクセラレータ(シストリック・アレイ1700)の利点は、次のように要約される:シストリック・アレイ1700は、より少ないハードウェアを用いてシストリック・アレイ1600と同様のパイプライン深度を計算することができる。シストリック・アレイ1700は、シストリック・アレイ1600と同じ命令の使用を可能にし、シストリック・アレイ1600のために開発されたワークロードが、シストリック・アレイ1700と共に再利用されることを可能にする。シストリック・アレイ1700は、より少ないパイプライン・ステージを利用することによって、より少ない電力しか消費しない。シストリック・アレイ1700は、シストリック・アレイ1600に対する読み込み及び書き込みのために、削減された帯域幅で動作することが可能である。シストリック・アレイ1700は、任意の数のステージで実装されることが可能であるが、以下に示される実施形態の特徴を可能にするために、2の倍数を使用することが最良であるかもしれない。シストリック・アレイ1700のアーキテクチャは、スループットを減らしているが、シストリック・アレイ1600と同じスループットは、シストリック・アレイ1700の複数のインスタンスを並列的に実装することによって可能にすることができる。
フィードバック入力を有するスケーラブルな行列乗算アクセラレータ
第2実施形態は、並列ユニットを用いた同時命令実行の使用により、スループットの向上を可能にする。乗算アクセラレータの幾つかのインスタンス又は経路は、並列に実行される。これらのインスタンスは、Src1を共有することが可能であり、或いは独立したSrc1入力を有することも可能である。各経路は、各自自身のSrc2及びSrc0入力を有する。これらのインスタンスは、各自自身のSrc2及びSrc0入力を有する。4ステージである深度を有する2つの経路を示すバージョンが図19に示されている。代替的に、2ステージの深度の4経路を使用するバージョンが、図20に示されている。
図19は、各経路が4ステージの深さを有する2経路行列乗算アクセラレータ1900を示す。2経路行列乗算アクセラレータ1900は、Src0入力のための入力ロジック1902A−1902Bと、入力ロジック1910A−1910Bから受信したデータ要素を格納するための入力バッファ1911A−1911Bと、Src1のための共用入力ロジック1912から受信したデータ要素を格納するための入力バッファ1913A−1913Bとを含む。各ステージは、並列に動作することが可能な処理要素のペアを含む。ステージ1は処理要素1931A−1931Bを含み、ステージ2は処理要素1932A−1932Bを含み、ステージ3は処理要素1933A−1933Bを含み、ステージ4は処理要素1934A−1934Bを含む。処理要素1931A−1931B、1932A−1932B、1933A−1933B、1934A−1934Bのそれぞれのハードウェア・ロジックは、シストリック・アレイ1600又はシストリック・アレイ1700の処理要素(例えば、処理要素1611A−1611D)のハードウェア・ロジックと同一又は類似であるとすることが可能であり、同じプロセス技術又はより進歩したプロセス技術により製造されることが可能である。また、2経路行列乗算アクセラレータ1900の処理要素は、シストリック・アレイ1600の実装に比べて、より高い周波数で動作してもよい。処理要素は、より進歩したプロセス技術を用いて製造されてもよい。
フィードバックは、データ・セレクタ1704,1724と同一又は類似のデータ・セレクタを用いて実装されてもよい。読み込みロジックの構成に応じて、入力データは、事前に入力バッファにプリフェッチされることが可能であり、或いは処理要素1931A−1931Bに入力される1サイクル以上前に、2経路行列乗算アクセラレータ1900内のレジスタ又はキャッシュから読み込まれることが可能である。ステージ4の処理要素1934A−1934Bは、ステージ1の対応する処理要素1931A−1931Bにフィードバックされることが可能である。動的なロジック深度は、4の倍数でイネーブルにされてもよい。設定された数の論理ステージの後、結果は、出力ロジック1922A−1922Bにより、指定された宛先に書き込まれることが可能である。
図20は、各経路が2ステージの深さを有する4経路行列乗算アクセラレータ2000を示す。4経路行列乗算アクセラレータ2000は、2経路行列乗算アクセラレータ1900と同数の処理要素を含み、処理要素は2倍多い経路で構成されるが、各経路は半分の深さである。4経路行列乗算アクセラレータ2000は、Src0のための入力ロジック2002A−2002Dと、Src2のための入力ロジック2010A−2010Dによって読み込まれた入力要素を格納するための入力バッファ2011A−211Dと、Src1のための共用入力ロジック2012によって読み込まれた入力要素を格納するための入力バッファ2013A−2013Dとを含む。処理要素2031A−2031Bは、ステージ1の並列処理を可能にする。処理要素2032A−2032Bは、ステージ2の並列処理を可能にする。各経路のステージ2は、ステージ1にフィードバックされるか、又は出力ロジック2022A−2022Dにより、指定された宛先に結果を書き込むことが可能である。処理要素2031A−2031B、2032A−2032Bは、処理要素1931A−1931B、1932A−1932B、1933A−1933B、1934A−1934Bのものと同様なハードウェア・ロジックを含む可能性があり、同様なハードウェア・ロジックを使用してループバック機能を実装することが可能である。
2経路行列乗算アクセラレータ1900又は4経路行列乗算アクセラレータ2000の利点は、スケーラビリティ、ソフトウェア互換性、及びスループットを含む。これらのアクセラレータのモジュール式アーキテクチャは、8深層シストリック・アレイと比較して、より効率的なスケーリングを可能にする。行列乗算アクセラレータの異なる構成は、再設計することなく、異なる製品ニーズ又はユース・ケースに合わせて仕立てることが可能である。更に、同じソフトウェア・モデルが使用され、それはハードウェア実装とは独立している。8ステージのシストリック・パイプラインによって実行されるように意図される命令のために設計されるアルゴリズムは、4ステージの行列乗算アクセラレータを使用する実装において使用されることが可能である。ハードウェアは、ソフトウェアに対して透明な方法で8ステージのパイプラインをシミュレートするために、フィードバックを使用するであろう。高いDPAS命令スループットを必要とする設計では、複数の経路を使用することが可能である。より多数の経路を伴う実装は、より高い帯域幅の入力ロジック及び出力ロジックと組み合わせられることが可能である。一実施形態では、2経路行列乗算アクセラレータ1900及び4経路行列乗算アクセラレータ2000は、8深層シストリック・アレイで可能なものよりも高い効率及び/又はより細かい粒度(単位)で、ブロック・スパース性を有する入力をバイパスするように構成される。
スケーラブル行列乗算アクセラレータにおけるスパース乗算
第3実施形態は、不規則なスパース性を有するデータを処理する際に、命令スループットの向上を促進する。Src1及びSrc2入力の要素は、入力マルチプレクサ・ロジックにより個々に選択されることが可能であり、処理は非ゼロ値のみを使用して実行されることが可能である。
図21は、フィードバック入力を伴うシストリック・アレイを使用するスケーラブルなスパース行列乗算アクセラレータ2100を示す。スケーラブルなスパース行列乗算アクセラレータ2100は、4経路行列乗算アクセラレータ2000におけるもの又は本願で説明される任意の他の処理要素と同様な処理要素2031A−2031Dを含むことが可能である。各経路の始まりにおける処理要素2031A−2021Bは、Src0のための入力ロジックを含む。スケーラブル・スパース行列乗算アクセラレータ2100の各経路の各ステージは、入力セレクタ2112A−2112Dにより、独立又は共用のSrc1の任意の要素を受け取ることが可能である。各経路の各ステージは、Src2の任意の要素を受け取ることが可能である。独立したSrc2入力は、別個の入力要素セレクタにより提供される(例えば、入力セレクタ2110A及び入力セレクタ2111AによるSrc2A、入力セレクタ2110B及び入力セレクタ2111BによるSrc2Bである)。別々のSrc2入力は、個々の経路が、異なる命令を計算することを可能にする。異なる命令に対する出力を可能にするために、各経路に対して個々の出力ロジック2122A−2122Bが存在する。
図22は、スパース・データを含むSrc2入力2200を示す。図示の例では、スパースSrc2入力2200A−2200B(Src2A入力2200A[A0,A1,0,A3,A4,A5,A6,0],Src2B入力2200B[B0,0,B2,B3,0,0,0,0])は、共通のSrc1入力を使用して、スケーラブル・スパース行列乗算アクセラレータ2100である変形例の各経路で処理されることが可能である。スケーラブル・スパース行列乗算アクセラレータ2100の各経路は、別個の独自のSrc0入力を受信することが可能である。
計算プロセスの第1ステップは、第1Src2要素を読み込み、要素をN要素のグループにそれぞれ再配置することであり、ここで、Nは要素が処理される経路の深度である。異なる数の経路を有する他の実装は、異なるグループ・サイズを有することが可能である。例えば、4経路行列乗算アクセラレータ2000に基づくアクセラレータは、4つのデータ要素のグループを使用するであろう。可能であれば、非0データ要素のみが選択される。例えば、Src2A2200Aの非ゼロ値は、[A0,A1]、[A3,A4]、[A5,A6]の3つのグループに再配置される。Src2B2200Bの非ゼロ値は、[B0,B2]、[B3,0]の2つのグループとして再配置され、第2グループを完成させるために、ゼロのパディングが使用される。この再配置は、各グループの第1要素が、経路の第1ステージに、各グループの第2要素が、経路の第2ステージに供給されることを可能にするために使用される。スケーラブル・スパース行列乗算アクセラレータ2100は、要素をグループ化することを必須としないが、要素をグループ化することは、ステージに供給されなければならない可能性がある要素の数を減らす。
計算プロセスの第2ステージにおいて、グループは経路に与えられる。8である深さを有する命令を計算するために4回のパス(pass)を実行する代わりに(例えば、8回のフィードバックのパス、各々が2つのステージを有する)、2つの要素はゼロであり、処理を必要としないので、3回のフィードバックのパスのみが必要とされる。フィードバックの性質は、そのパスが迂回されることを可能にし、アキュムレータ値は、計算ステージを消費することなく、出力へ直接的に送られる。正しい関数計算を保つために、正しいSrc1要素が、計算される所与のSrc2要素に関してステージに入力される。従って、第2グループ([A3,A4])を処理する場合に、第1ステージはSrc1−3を読み込み、第2ステージはSrc1−4を読み込む。Src2B2200Bを処理する場合、2つのグループ([B0,B2],[B3,0])のみが計算される。2つのグループは、4ではなく2つのフィードバックのパスを用いて計算されることが可能である。第1のパスでは、Src1−0とSrc1−2とが第1及び第2ステージに入力される。第2のパスでは、Src1−3と任意のSrc1要素とがそれぞれ第1及び第2ステージに入力される。
第3実施形態では、経路の深さは、削減されることが可能なゼロの数を制約する。8要素の入力に対して経路に2ステージを有する行列乗算アクセラレータ(スケーラブル・スパース行列乗算アクセラレータ2100)では、8、6、4、及び2個のゼロの削減のみを実行することができる。経路に4ステージを有する行列乗算アクセラレータでは、8個及び4個のゼロの削減しか実行できない。スパース低減のより高い分解能を可能にするために、第4実施形態は、図23に示すように、経路の各ステージで出力を追加し、各ステージがSrc0入力を受け取ることを可能にする。
図23は、各ステージでフィードバック入力及び出力を有するシストリック・アレイを使用するスケーラブル・スパース行列乗算アクセラレータ2300を示す。スケーラブル・スパース行列乗算アクセラレータ2300は、Src0要素が、各経路の各ステージに提供されること、及び各経路の各ステージに別個の出力を提供すること、を可能にする追加的な入力及び出力ロジックとともに、スケーラブル・スパース行列乗算アクセラレータ2100と同様なハードウェア・ロジックを含む。
第1経路に関してSrc2A要素を選択する入力セレクタ2110A及び2111A、
第2経路に関してSrc2B入力を選択する入力セレクタ2110B及び2111Bに加えて、Src0入力の各経路に関して入力スプリッタ2303A−2303Bが追加される。各入力スプリッタ2302A−2302Bは、デマルチプレクサ又は類似のハードウェア・ロジックを含み、入力ロジック2302A−2302Bによって読み込まれるSrc0入力要素が、各ステージへ送られることを可能にする。また、入力セレクタ2112A−2112Dは、Src1入力が、各経路の各ステージによって選択されることを可能にするために含まれる。各経路の第2ステージ(処理要素2331C−2331D)からの出力ロジック2122A−2122Bに加えて、各経路の第1ステージ(2331A−2331B)からの出力を可能にするために、追加の出ロジック2322A−2322Bが提供される。処理要素2331A−2331Cは、本願で説明される他の処理要素と同様であってもよい。
動作中、スケーラブル・スパース行列乗算アクセラレータ2300は、1つの要素のみのグループを受け入れるように構成することが可能である。2つのグループ([B0,B2],[B3,0])は、第3実施形態(例えば、スケーラブル・スパース行列乗算アクセラレータ2100)のSrc2の非ゼロ要素に関して作成され、第2グループは、ゼロ・パディングを含む。図23に示す最適化は、グループが、[B0,B2],[B3]として形成されることを可能にする。B0及びB2は、経路の第1及び第2ステージ(例えば、処理要素2331A及び処理要素2331Cを含む第1セット、又は処理要素2331B及び処理要素2331Dを含む第2セットのうちの何れか)に割り当てられるであろう。フィードバック後、B3は、その経路の第1ステージに割り当てられる。経路の第1ステージは、(例えば、出力論理2322A又は2322Bのうちの何れかにより)出力を提供することができるので、経路の第2ステージ(処理要素2331C又は処理要素2331Dのうちの何れか)を消費する必要はない。更に、その経路に対して受け入れられた次のSrc2入力は、第2ステージから開始することができるので、2要素のグループは、第2及び第1ステージにそれぞれに割り当てられる。新しいSrc2入力を処理するためのSrc0は、(例えば、出力ロジック2322A又は2322Bのうちの何れかにより)経路の第2ステージに割り当てられることが可能である。
図21に示されるスケーラブル・スパース行列乗算アクセラレータ2100及び図23に示されるスケーラブル・スパース行列乗算アクセラレータ2300のハードウェア・ロジックに加えて、幾つかの実施形態は、入力及び出力ハードウェア・メモリ・バッファを追加的に含む。入力メモリ・バッファは、Src0及びSrc2入力のグループを格納し、準備するために使用されることが可能であり、これは高い帯域幅の入力ロジックの必要性を削減する。出力バッファは、同じサイクルで生成されたDst出力が、より遅いレートでメモリに安定的に書き込まれることを可能にし、高い帯域幅出力ロジックの必要性を低減する。
更に、幾つかの実施形態は、全ての要素がゼロである入力に対するバイパスを含む。バイパスは、シストリック・アレイを通過することなく、出力ロジックによるSrc0の直接的な書き込みを可能にする。このバイパスは、データの完全性を損なう可能性がある命令中のリード・アフター・ライト(RAW)のリスクを防止するために、データ依存対策と協調して使用される。
図24は、機能ユニットにおけるハードウェア・ロジックが累積によりシストリック・ドット積を実行する命令を実行することが可能な実施形態による方法2400を示す。方法2400は、本願で説明されるように、スケーラブル・スパース行列乗算アクセラレータのハードウェア及び/又はファームウェア・ロジックにより実行されることが可能である。ハードウェア及び/又はファームウェア・ロジックは、GPGPUの行列演算アクセラレータによって実行される命令に対する非ゼロ・ソース値及び計算深度を受け取ることが可能である(2402)。非ゼロ・ソース値は、スケーラブル・スパース行列乗算アクセラレータの経路に対するパイプライン深度に従ってグループ化される非ゼロ値であるとすることが可能である。計算深度は、命令に対するドット積を計算するために使用するシストリック層の数を指定することが可能である。また、ロジックは、アキュムレータ値を受信し、初期値をアキュムレータに格納する(2404)。アキュムレータ値は、ゼロ値、初期アキュムレータ値、又は以前のパイプライン・ステージからの結果であってもよい。計算の指定された層に対して、ロジックは、イネーブルにされた並列処理チャネルのセットを決定するために、書き込みイネーブル・マスクを評価することが可能である(2406)。書き込みイネーブル・マスクは、特定のチャネルの計算をディセーブルにするために使用されることが可能である。書き込みイネーブル・マスクは、実行される命令と共に提供される決定マスクに基づいて構成されることが可能である。
イネーブルにされた並列処理チャネル各々に対して、ロジックは、ソース入力要素の要素ごとの乗算に基づいて、一組の積を生成することができる(2408)。例えば、4要素ドット積の場合、2つのソースの4要素が乗算され、一組の積を生成する。シストリック・パイプラインの各層では、同じSrc2要素値に、複数の異なるSrc1値が乗算される。次いで、ロジックは、積の組の合計を計算し、その合計をアキュムレータの中の値に加算することができる(2410)。
方法2400が最後の計算層における処理要素で実行される場合(2411)、処理要素は、計算された合計を、指定された出力レジスタに出力することができる(2414)。そうではない場合、処理要素は、そのアキュムレータ値を次の層に出力することができる(2412)。次の層は、次の物理レイヤ又は次の仮想レイヤであってもよい。次の仮想レイヤへの出力は、処理パイプラインの第1ステージにおける処理要素へフィードバック値を提供することを含む。
一実施形態では、図24の方法2400は、以下に示される擬似コードに基づいて構築されたハードウェア・ロジックによって実行されることが可能である。
累積による4要素シストリック・ドット積
Figure 2021177366
上記の擬似コードにおいて、Src0、Src1、Src2は、オペランド・データを格納するレジスタである。シストリック深度は、sdepthにより指定される。実行サイズはexec_sizeに対応し、並列処理チャネル数を指定する。宛先はDstレジスタにより指定される。疑似コードでは、識別されるレジスタは、regnum及びsubregnumフィールドを参照する。regnumフィールドは、オペランドのレジスタ番号を提供する。subregnumフィールドは、オペランドのサブレジスタ番号を提供する。subregnumフィールドは、対応するRegNumフィールドと共に、レジスタ領域の原点に対するバイト整列アドレスを提供する。一部の命令に関し、このフィールドはバイト・アドレスのビット[4:0]を提供するが、RegNumフィールドはビット[12:5]を提供する。
図25は、スパースSrc2入力行列を使用して行列乗算演算を実行する方法2500を示す。方法2500は、本願で説明されるように、スケーラブル・スパース行列乗算アクセラレータのハードウェア及び/又はファームウェア・ロジックにより実行されることが可能である。方法2500は、図22のスパースSrc2入力2200A−2200Bのような、スパース・データを使用する動作を明示する。方法2500は、図21のスケーラブル・スパース行列乗算アクセラレータ2100及び/又は図23のスケーラブル・スパース行列乗算アクセラレータ2300を使用して実現されることが可能である。
方法2500は、第1行列及び第2行列の複数のデータ要素を、行列乗算アクセラレータのメモリに読み込むためのハードウェア及び/又はファームウェア・ロジックを含む(2502)。次いで、ロジックは、第2行列の複数のデータ要素内の非ゼロ値を検出することが可能である(2504)。検出は、行列乗算アクセラレータ内のベクトル比較ロジックを利用して実行されることが可能である。次いで、ロジックは、第2行列の複数のデータ要素内で検出された非ゼロ値を、1つ以上のデータ要素を含むグループにグループ化することが可能である(2506)。次いで、ロジックは、グループのデータ要素を、行列乗算アクセラレータの処理パイプラインの対応する段階に提供することが可能である(2508)。2ステージ・パイプラインを有する経路の場合、グループは2つのSrc2要素を含むであろう。グループの第1要素は第1ステージに提供されるであろうし、グループの第2要素は第2ステージに提供されるであろう。スケーラブル・スパース行列乗算アクセラレータ2100に関し、必要に応じて、グループを水増しするためにゼロ・パディングが使用される。スケーラブル・スパース行列乗算アクセラレータ2300では、ゼロ・パディングは必要とされない。
ロジックは、次いで、第1行列の複数のデータ要素を、処理パイプラインの対応するステージに提供する(2510)。提供される複数のデータ要素は、パイプライン・ステージに対して計算されるアクティブ・チャネルに対応するSrc1要素である。要素がSrc2ゼロ・パディング値を使用して演算される場合には、何らかのSrc1要素が提供される可能性がある。処理パイプラインの各アクティブ・ステージにおける処理要素は、乗算及び累積演算を実行する(2512)。一部の状況では、例えば、スケーラブル・スパース行列乗算アクセラレータ2300が単一要素グループを処理している場合、パイプラインの全てのステージが命令に対してアクティブであるわけではない。ステージが命令に対してアクティブではない場合、ステージは、更に、異なる命令に対する演算を実行するために使用されることが可能である。次いで、ロジックは、処理パイプラインの各アクティブ・ステージから累積値を出力又はフィードバックすることができる(2514)。出力は、命令に対する処理の最終ステージが完了した場合に、出力レジスタ又はメモリ・ロケーションに書き込まれることが可能である。代替的に、累積値は次のパイプライン・ステージに送付されることが可能である。次のパイプライン・ステージへ出力することは、フィードバック出力を、処理パイプラインの第1物理ステージへ書き込むことを含む可能性がある。
追加的なコンピューティング・デバイス例
図26は、一実施形態によるグラフィックス・プロセッサ2604を含むコンピューティング・デバイス2600のブロック図である。コンピューティング・デバイス2600の変型例は、セット・トップ・ボックス(例えば、インターネットに基づくケーブル・テレビジョンのセット・トップ・ボックスなど)、グローバル・ポジショニング・システム(GPS)に基づく装置などの通信デバイスであってもよいし、又はその中に含まれてもよい。コンピューティング・デバイス2600は、セルラ電話、スマート・フォン、パーソナル・デジタル・アシスタント(PDA)、タブレット・コンピュータ、ラップトップ・コンピュータ、e−リーダー、スマート・テレビジョン、テレビジョン・プラットフォーム、ウェアラブル・デバイス(例えば、眼鏡、時計、ブレスレット、スマートカード、宝飾品、衣類など)、メディア・プレーヤーなどのモバイル・コンピューティング・デバイスであってもよいし、又はその中に含まれてもよい。例えば、一実施形態では、コンピューティング・デバイス2600は、例えば、システム・オン・チップ(「SoC」又は「SOC」)のような集積回路(「IC」)を含み、コンピューティング・デバイス2600の種々のハードウェア及び/又はソフトウェア・コンポーネントを単一チップ上に統合する。コンピューティング・デバイス2600は、図1におけるもののようなデータ処理システム100のようなコンピューティング・デバイスであってもよい。
コンピューティング・デバイス2600はグラフィックス・プロセッサ2604を含む。グラフィックス・プロセッサ2604は本願で説明される任意のグラフィックス・プロセッサを表す。一実施形態では、グラフィックス・プロセッサ2604はキャッシュ2614を含み、キャッシュ2614は、単一のキャッシュであってもよいし、或いは、任意の数のL1、L2、L3、又はL4キャッシュ、レンダリング・キャッシュ、深度キャッシュ、サンプラ・キャッシュ、及び/又はシェーダー・ユニット・キャッシュを含むキャッシュ・メモリの複数のセグメントに分割されることが可能であるが、これらに限定されない。一実施形態では、キャッシュ2614は、アプリケーション・プロセッサ2606と共有される最終レベル・キャッシュであってもよい。
一実施形態では、グラフィックス・プロセッサ2604は、グラフィックス・プロセッサのための制御及びスケジューリング・ロジックを実装するグラフィックス・マイクロコントローラを含む。制御及びスケジューリング・ロジックは、グラフィックス・マイクロコントローラ2615によって実行されるファームウェアであるとすることが可能である。ファームウェアは、グラフィックス・ドライバ・ロジック2622によって起動時にロードされてもよい。ファームウェアはまた、電子的に消去可能なプログラマブル・リード・オンリ・メモリにプログラムされてもよいし、又はグラフィックス・マイクロコントローラ2615内のフラッシュ・メモリ・デバイスからロードされてもよい。ファームウェアは、デバイス管理/ドライバ・ロジック2617、2618、及びスケジューラ2619を含むGPU OS 2616をイネーブルにすることが可能である。GPU OS2616はまた、グラフィックス・ドライバ・ロジック2622内のグラフィックス・メモリ・マネージャ2621を補足又は置換することが可能なグラフィックス・メモリ・マネージャ2620を含んでもよい。
グラフィックス・プロセッサ2604はまた、1つ以上のグラフィックス・エンジン、グラフィックス・プロセッサ・コア、及び本願で説明される他のグラフィックス実行リソースを含むGPGPUエンジン2644を含む。このようなグラフィックス実行リソースは、実行ユニット、シェーダー・エンジン、フラグメント・プロセッサ、頂点プロセッサ、ストリーミング・マルチプロセッサ、グラフィックス・プロセッサ・クラスタ、或いは、グラフィックス・リソース又は画像リソースを処理すること、又はヘテロジニアス・プロセッサ内で汎用計算処理を実行すること、に適した任意の計算リソースのコレクションを含む形態で提示されることが可能であるが、これらに限定されない。GPGPUエンジン2644の処理リソースは、図11B−11Dに示すように、基板に接続されたハードウェア・ロジックの複数のタイル内に含まれることが可能である。GPGPUエンジン2644は、グラフィックス処理及び実行リソース、キャッシュ、サンプラなどを含むGPUタイル2645を含むことができる。GPUタイル2645はまた、ローカル揮発性メモリを含んでもよく、又は、例えば図3B−3Cに示されるように1つ以上のメモリ・タイルに結合されることが可能である。
GPGPUエンジン2644は、例えば不揮発性メモリ・タイル2656、ネットワーク・プロセッサ・タイル2657、及び/又は汎用計算タイル2658を含む1つ以上の特殊タイル2646も含むことが可能である。GPGPUエンジン2644はまた、行列乗算アクセラレータ2660を含む。汎用計算タイル2658はまた、行列乗算演算を加速するためのロジックを含んでもよい。不揮発性メモリ・タイル2656は、不揮発性メモリ・セル及びコントローラ・ロジックを含むことが可能である。不揮発性メモリ・タイル2656のコントローラ・ロジックは、デバイス管理/ドライバ・ロジック2617、2618のうちの1つによって管理されてもよい。ネットワーク・プロセッサ・タイル2657は、コンピューティング・デバイス2600の入力/出力(I/O)ソース2610内の物理インターフェースに結合されるネットワーク処理リソースを含むことができる。ネットワーク・プロセッサ・タイル2657は、デバイス管理/ドライバ・ロジック2617、2618のうちの1つ以上によって管理されてもよい。
行列乗算アクセラレータ2660は、本願で説明されるように、モジュール式スケーラブル・スパース行列乗算アクセラレータである。行列乗算アクセラレータ2660は、複数の処理経路を含むことが可能であり、各々の処理経路は複数のパイプライン・ステージを含む。各々の処理経路は、個々の命令を実行することができる。様々な実施形態では、行列乗算アクセラレータ2660は、本願で説明される行列乗算アクセラレータのうちの任意の1つ以上のアーキテクチャの特徴を有することが可能である。例えば、一実施形態では、行列乗算アクセラレータ2660は、4の倍数の論理ステージ(例えば、4、8、12、16など)で動作するように構成することが可能なフィードバック・ループを有する4深層シストリック・アレイ1700である。一実施形態では、行列乗算アクセラレータ2660は、4ステージ・パイプラインを有する2経路行列乗算アクセラレータ1900、又は2ステージ・パイプラインを有する4経路行列乗算アクセラレータ2000のうちの1つ以上のインスタンスを含む。一実施形態では、行列乗算アクセラレータ2660は、スケーラブル・スパース行列乗算アクセラレータ2100、又はスケーラブル・スパース行列乗算アクセラレータ2300として構成される処理要素を含む。行列乗算アクセラレータ2660は、少なくともSrc2入力の非ゼロ値に対してのみ動作するように構成されることが可能であり、且つSrc1入力にゼロ値が存在する場合の演算をバイパスすることも可能である。ブロック・スパース性が存在する場合には、サブ行列全体の演算が迂回されることが可能である。行列乗算アクセラレータ2660はまた、これらの実施形態の任意の組み合わせに基づく任意のロジックを含むことができる。
図示のように、一実施形態では、グラフィックス・プロセッサ2604に加えて、コンピューティング・デバイス2600は、アプリケーション・プロセッサ2606、メモリ2608、及び入出力(I/O)ソース2610を含む、任意の数の及びタイプのハードウェア・コンポーネント及び/又はソフトウェア・コンポーネントを更に含むことが可能であるが、これらに限定されない。アプリケーション・プロセッサ2606は、グラフィックス・パイプライン機能を共有するために、図3Aに関連して示されるように、ハードウェア・グラフィックス・パイプラインと相互作用することが可能である。処理されたデータは、ハードウェア・グラフィックス・パイプライン内のバッファに格納され、状態情報は、メモリ2608に格納される。結果的に生じたデータは、図3Aのディスプレイ・デバイス318などのディスプレイ・デバイスによる出力のために、ディスプレイ・コントローラに転送されることが可能である。ディスプレイ・デバイスは、陰極線管(CRT)、薄膜トランジスタ(TFT)、液晶ディスプレイ(LCD)、有機発光ダイオード(OLED)アレイ等の種々のタイプのものであってもよく、グラフィカル・ユーザー・インターフェースを介してユーザーに情報を表示するように構成されてもよい。
アプリケーション・プロセッサ2606は、図1のプロセッサ102などの1つ又は複数のプロセッサを含んでもよく、コンピューティング・デバイス2600のオペレーティング・システム2602を実行するために少なくとも部分的に使用される中央処理装置(CPU)であってもよい。OS2602は、コンピューティング・デバイス2600のハードウェア及び/又は物理リソースと1つ以上のユーザーとの間のインターフェースとして機能することができる。OS2602は、コンピューティング・デバイス2600内の種々のハードウェア・デバイスのためのドライバ・ロジックを含むことが可能である。ドライバ・ロジックは、図10のユーザー・モード・グラフィックス・ドライバ1026及び/又はカーネル・モード・グラフィックス・ドライバ1029を含むことが可能なグラフィックス・ドライバ・ロジック2622を含むことが可能である。グラフィックス・ドライバ・ロジックは、グラフィックス・プロセッサ2604の仮想メモリ・アドレス空間を管理するために、グラフィックス・メモリ・マネージャ2621を含むことが可能である。
幾つかの実施形態では、グラフィックス・プロセッサ2604は、アプリケーション・プロセッサ2606の一部(物理的CPUパッケージの一部など)として存在してもよく、その場合、メモリ2608の少なくとも一部は、アプリケーション・プロセッサ2606及びグラフィックス・プロセッサ2604によって共有されることが可能であるが、メモリ2608の少なくとも一部は、グラフィックス・プロセッサ2604に対して排他的であってもよく、又はグラフィックス・プロセッサ2604は、別個の記憶メモリを有してもよい。メモリ2608は、バッファ(例えば、フレームバッファ)の予め割り当てられた領域を含むことが可能である;しかしながら、実施形態がそのようには限定されないこと、及び下位のグラフィックス・パイプラインにアクセス可能な任意のメモリが使用されてもよいことは、当業者により理解されるはずである。メモリ2608は、デスクトップ又は3Dグラフィックス・シーンをレンダリングするためにグラフィックス・プロセッサ2604を利用するアプリケーションを含む様々な形態のランダム・アクセス・メモリ(RAM)(例えば、SDRAM、SRAMなど)を含んでもよい。図1のメモリ・コントローラ116のようなメモリ・コントローラ・ハブは、メモリ2608内のデータにアクセスし、それを、グラフィックス・パイプライン処理のためにグラフィックス・プロセッサ2604に転送してもよい。メモリ2608は、コンピューティング・デバイス2600内の他のコンポーネントに利用可能にされてもよい。例えば、コンピューティング・デバイス2600の種々のI/Oソース2610から受信される任意のデータ(例えば、入力グラフィックス・データ)は、ソフトウェア・プログラム又はアプリケーションの実装において1つ以上のプロセッサ(例えば、アプリケーション・プロセッサ2606)によってそれらが演算される前に、メモリ2608内に一時的にキューイングされることが可能である。同様に、コンピューティング・デバイス2600からコンピューティング・システム・インターフェースのうちの1つを介して外部エンティティに送信されるべきである、或いは内部記憶素子に記憶されるべきである、とソフトウェア・プログラムが判断したデータは、しばしば、それが送信又は記憶される前に、メモリ2608に一時的にキューイングされる。
I/Oソースは、タッチスクリーン、タッチ・パネル、タッチパッド、バーチャル又はレギュラー・キーボード、バーチャル又はレギュラー・マウス、ポート、コネクタ、ネットワーク・デバイスなどのデバイスを含むことが可能であり、図1において参照されるようにプラットフォーム・コントローラ・ハブ130を介して取り付けられことが可能である。更に、I/Oソース2610は、コンピューティング・デバイス2600(例えば、ネットワーク・アダプタ)に対して及び/又はそこからデータを転送するために;又はコンピューティング・デバイス2600内の大規模不揮発性記憶装置(例えば、SSD/HDD)のために、実装される1つ又は複数のI/Oデバイスを含んでもよい。英数字及び他のキーを含むユーザー入力デバイスは、情報及びコマンド選択をグラフィックス・プロセッサ2604に伝達するために使用されてもよい。別のタイプのユーザー入力デバイスは、マウス、トラックボール、タッチスクリーン、タッチパッド、又はカーソル方向キーのようなカーソル制御装置であり、方向情報及びコマンド選択をGPUに伝達し、ディスプレイ・デバイスでのカーソルの動きを制御する。コンピューティング・デバイス2600のカメラ及びマイクロフォン・アレイは、ジェスチャを観察し、オーディオ及びビデオを記録し、ビジュアル及びオーディオ・コマンドを送受信するために使用されてもよい。
I/Oソース2610は、1つ以上のネットワーク・インターフェースを含むことが可能である。ネットワーク・インターフェースは、関連するネットワーク処理ロジックを含んでもよく、及び/又はネットワーク・プロセッサ・タイル2657と結合されてもよい。1つ以上のネットワーク・インターフェースは、LAN、ワイド・エリア・ネットワーク(WAN)、メトロポリタン・エリア・ネットワーク(MAN)、パーソナル・エリア・ネットワーク(PAN)、ブルートゥース(登録商標)、クラウド・ネットワーク、セルラ又はモバイル・ネットワーク(例えば、第3世代(3G)、第4世代(4G)、第5世代(5G)など)、イントラネット、インターネットなどへのアクセスを提供することができる。ネットワーク・インターフェースは、例えば1つ以上のアンテナを有する無線ネットワーク・インターフェースを含んでもよい。また、ネットワーク・インターフェースは、例えばネットワーク・ケーブルを介してリモート・デバイスと通信するための有線ネットワーク・インターフェースを含んでもよく、例えばイーサネット・ケーブル、同軸ケーブル、光ファイバ・ケーブル、シリアル・ケーブル、又はパラレル・ケーブルであってもよい。
ネットワーク・インターフェースは、例えばIEEE802.11規格に準拠することによってLANへのアクセスを提供することが可能であり、及び/又は無線ネットワーク・インターフェースは、例えばブルートゥース(登録商標)規格に準拠することによってパーソナル・エリア・ネットワークへのアクセスを提供することが可能である。規格の前のバージョン及び後のバージョンを含む他の無線ネットワーク・インターフェース及び/又はプロトコルがサポートされてもよい。無線LAN規格による通信に加えて、又はその代わりに、ネットワーク・インターフェースは、例えば時分割多元接続(TDM)プロトコル、移動通信用グローバル・システム(GSM)プロトコル、符号分割多元接続(CDMA)プロトコル、及び/又は他の任意のタイプの無線通信プロトコルを使用して無線通信を提供することができる。
上述した例より少なく又はより多く装備されたシステムが、特定の実装に好ましい可能性があることが理解されるべきである。従って、コンピューティング・デバイス1900の構成は、価格的な制約、パフォーマンス条件、技術的改良、又はその他の状況のような多くの要因に依存して、実装ごとに相違する可能性がある。具体例は(限定ではないが)移動装置、パーソナル・デジタル・アシスタント、モバイル・コンピューティング・デバイス、スマート・フォン、セルラ電話、ハンドセット、ワンウェイ・ページャ、双方向ページャ、メッセージング・デバイス、コンピュータ、パーソナル・コンピュータ(PC)、デスクトップ・コンピュータ、ラップトップ・コンピュータ、ノートブック・コンピュータ、ハンドヘルド・コンピュータ、タブレット・コンピュータ、サーバー、サーバー・アレイ又はサーバー・ファーム、ウェブ・サーバー、ネットワーク・サーバー、インターネット・サーバー、ワーク・ステーション、ミニ・コンピュータ、メイン・フレーム・コンピュータ、スーパーコンピュータ、ネットワーク・アプライアンス、ウェブ・アプライアンス、分散コンピューティング・システム、マルチプロセッサ・システム、プロセッサ・ベース・システム、家電製品、プログラマブル・コンシューマブル電子機器、テレビジョン、デジタル・テレビジョン、セット・ボックス、ワイヤレス・アクセス・ポイント、基地局、加入者局、移動加入者センター、無線ネットワーク・コントローラ、ルーター、ハブ、ゲートウェイ、ブリッジ、スイッチ、マシン、又はそれらの組み合わせを含む。
本願で説明されるものは、ホスト・インターフェース、ホスト・インターフェースに結合されたファブリック相互接続、及びファブリック相互接続に結合された1つ以上のハードウェア・タイルを含むアクセラレータ・デバイスであり、1つ以上のハードウェア・タイルは、フィードバック入力を伴うシストリック・アレイを含むスパース行列乗算加速ハードウェアを含む。
一実施形態は、命令を、復号化された命令に復号化するためのデコード・ユニットであって、デコードされた命令は並列ドット積演算を実行するための命令である、デコード・ユニットと、パイプライン・シストリック・ドット積ユニットとを備える並列プロセッサを提供する。パイプライン・シストリック・ドット積ユニットは、シストリック処理パイプラインの複数のパイプライン・ステージを介して、デコードされた命令を実行するように構成される。デコードされた命令の実行中に、第1パイプライン・ステージで計算されたドット積は、出力メモリ及び第2パイプライン・ステージのうちの1つから選択されたロケーションに、出力ハードウェアを介して選択的に書き込まれるように構成され、第3パイプライン・ステージで計算されたドット積は、出力メモリ及び第1パイプライン・ステージのうちの1つから選択されたロケーションに、出力ハードウェアを介して選択的に書き込まれるように構成される。更なる実施形態では、デコードされた命令は、第1ソース・オペランド及び第2ソース・オペランドに関連付けられ、第1ソース・オペランドは、第1行列の複数のデータ要素を格納するメモリへの参照であり、第2ソース・オペランドは、第2行列の複数のデータ要素を格納するメモリへの参照である。
一実施形態は、ホスト・インターフェースと、ホスト・インターフェースに結合されたファブリック相互接続と、ファブリック相互接続に結合された1つ以上のハードウェア・タイルとを備えるアクセラレータ・デバイスを提供する。1つ以上のハードウェア・タイルは、フィードバック入力を有するモジュール式シストリック処理アレイを含むスパース行列乗算加速ハードウェアを含む。モジュール式シストリック処理アレイは、第1数のパイプライン経路を有する1つ以上の処理アレイ・モジュールを含み、第1数のパイプライン経路は第2数のパイプライン・ステージを有する。第1パイプライン・ステージは、最終パイプライン・ステージからフィードバック出力を受け取るように構成されることが可能である。
一実施形態は、マルチ・ステージ処理パイプラインを有するハードウェア行列乗算アクセラレータにより、一組の入力行列に対してドット積演算を実行する方法を提供する。方法は、第1ソース・オペランドにより、第1行列の複数のデータ要素を、ハードウェア行列乗算アクセラレータのメモリに読み込むステップ;第2ソース・オペランドにより、第2行列の複数のデータ要素を、ハードウェア行列乗算アクセラレータのメモリに読み込むステップ;第2行列の複数のデータ要素内で非ゼロ値を検出するステップ;第2行列の複数のデータ要素内の非ゼロ値を、1つ以上のデータ要素を含むグループにグループ化するステップであって、グループのデータ要素の数は、ハードウェア行列乗算アクセラレータのマルチ・ステージ処理パイプラインにおけるステージの数に対応する、ステップ;データ要素を、対応するステージの処理要素の複数のチャネルにブロードキャストすることにより、グループのデータ要素を、処理パイプラインの対応するステージに提供するステップ;提供されたグループのデータ要素と、第1行列の複数のデータ要素とを乗算し、一組の積を生成するステップ;一組の積を合計し、一組の積の合計をアキュムレータ値に累積するステップ;及びアキュムレータ値を、処理パイプラインの次のステージに書き込むステップを含む。更なる実施形態において、アキュムレータ値を、処理パイプラインの次のステージに書き込むステップは、パイプライン・フィードバック値を、処理パイプラインの第1ステージに書き込むステップを含む。更に、第2行列の複数のデータ要素内で非ゼロ値を検出するステップは、ハードウェア行列乗算アクセラレータのメモリ内で非ゼロ値を検出するステップを含むことが可能である。
当業者は、前述の説明から、実施形態の広範な技術は種々の形態で実装され得ることを認めるであろう。従って、実施形態はその特定の実施例に関連して説明されてきたが、図面、明細書、及び以下の請求の範囲の検討により、他の修正が当業者に明らかになるので、実施形態の真の範囲はそれらに限定されるはずはない。

Claims (23)

  1. 並列プロセッサであって:
    命令をデコードされた命令にデコードするためのデコード・ユニットであって、前記デコードされた命令は並列ドット積演算を実行するための命令である、デコード・ユニット;及び
    シストリック処理パイプラインの複数のパイプライン・ステージにより、前記デコードされた命令を実行するためのパイプライン化シストリック・ドット積ユニットであって、前記デコードされた命令の実行中に、第1パイプライン・ステージで計算されるドット積は、出力メモリ及び第2パイプライン・ステージのうちの一方から選択される位置に、出力ハードウェアにより選択的に書き込まれるように形成され、第3パイプライン・ステージで計算されるドット積は、前記出力メモリ及び前記第1パイプライン・ステージのうちの一方から選択される位置に、出力ハードウェアにより選択的に書き込まれるように形成される、パイプライン化シストリック・ドット積ユニット;
    を備える並列プロセッサ。
  2. 前記デコードされた命令は、第1ソース・オペランドと第2ソース・オペランドとに関連付けられ、前記第1ソース・オペランドは、第1行列の複数のデータ要素を格納するメモリに対するリファレンスであり、前記第2ソース・オペランドは、第2行列の複数のデータ要素を格納するメモリに対するリファレンスである、請求項1に記載の並列プロセッサ。
  3. 前記第1ソース・オペランドに基づいて、前記第1行列の前記複数のデータ要素を、前記シストリック・ドット積ユニットのメモリに読み込み;及び
    前記第2ソース・オペランドに基づいて、前記第2行列の前記複数のデータ要素を、前記シストリック・ドット積ユニットのメモリに読み込む;
    ためのハードウェア回路を更に備える請求項2に記載の並列プロセッサ。
  4. 前記第2行列の前記複数のデータ要素内で非ゼロ値を検出し、前記第2行列の前記複数のデータ要素内で検出された非ゼロ値を、1つ以上のデータ要素を含むグループにグループ化する;
    ためのハードウェア回路を更に備える請求項3に記載の並列プロセッサ。
  5. 前記グループは、前記シストリック処理パイプラインのパイプライン・ステージの数に対応する数のデータ要素を含む、請求項4に記載の並列プロセッサ。
  6. 前記グループの第1データ要素を前記第1パイプライン・ステージに提供し;及び
    前記グループの第2データ要素を前記第2パイプライン・ステージに提供する;
    ためのハードウェア回路を更に備える請求項5に記載の並列プロセッサ。
  7. 前記第3パイプライン・ステージは前記第2パイプライン・ステージであり、前記シストリック処理パイプラインは2つのパイプライン・ステージを含む、請求項6に記載の並列プロセッサ。
  8. 前記第2パイプライン・ステージと前記第3パイプライン・ステージとの間の第4パイプライン・ステージであって、前記シストリック処理パイプラインは4つのパイプライン・ステージを含む、第4パイプライン・ステージ;
    を更に備える請求項6に記載の並列プロセッサ。
  9. 前記第1行列の複数のデータ要素の第1セットを、前記第1パイプライン・ステージに提供し;及び
    前記第2行列の複数のデータ要素の第2セットを、前記第2パイプライン・ステージに提供する;
    ためのハードウェア回路を更に備える請求項6に記載の並列プロセッサ。
  10. 前記シストリック処理パイプラインは第1シストリック処理パイプラインであり、前記パイプライン化シストリック・ドット積ユニットは第2シストリック処理パイプラインを含む、請求項1−9のうちの何れか1項に記載の並列プロセッサ。
  11. 前記第1シストリック処理パイプライン及び前記第2シストリック処理パイプラインの各パイプライン・ステージは1つ以上の処理要素を含み、各々の処理要素は複数の並列プロセッサ・チャネルを含み、各々の並列プロセッサ・チャネルは複数のデータ要素のベクトルに関する演算を実行するように形成することが可能である、請求項10に記載の並列プロセッサ。
  12. ホスト・インターフェース;
    前記ホスト・インターフェースに結合される相互接続構造;及び
    前記相互接続構造に結合される1つ以上のハードウェア・タイル;
    を備えるアクセラレータ・デバイスであって、前記1つ以上のハードウェア・タイルは、フィードバック入力を有するモジュール式シストリック処理アレイを含むスパース行列乗算加速ハードウェアを含み、前記モジュール式シストリック処理アレイは第1数のパイプライン経路を有する1つ以上の処理アレイ・モジュールを含み、前記第1数のパイプライン経路は第2数のパイプライン・ステージを有し、前記第1パイプライン・ステージはフィードバック出力を最終パイプライン・ステージから受信するように形成することが可能である、アクセラレータ・デバイス。
  13. 前記モジュール式シストリック処理アレイは複数のアレイ・モジュールを含む、請求項12に記載のアクセラレータ・デバイス。
  14. 前記1つ以上の処理アレイ・モジュールは、第1ソース入力に関連するデータ要素を読み込むための共用ハードウェア回路と、第2ソース入力に関連するデータ要素を読み込むための個別ハードウェア回路と、を備えるように形成されたパイプライン経路を含む、請求項12に記載のアクセラレータ・デバイス。
  15. 前記1つ以上の処理アレイ・モジュールは、第1ソース入力に関連するデータ要素を読み込むための個別ハードウェア回路と、第2ソース入力に関連するデータ要素を読み込むための個別ハードウェア回路と、を備えるように形成されたパイプライン経路を含む、請求項12に記載のアクセラレータ・デバイス。
  16. 前記1つ以上の処理アレイ・モジュールは、前記第2ソース入力で非ゼロ・データ要素を検出し、前記第2ソース入力の前記非ゼロ・データ要素と、前記第2ソース入力の前記非ゼロ・データ要素に対応する前記第1ソース入力のデータ要素とに基づいて、ドット積演算を選択的に実行するように形成されたハードウェア回路を含む、請求項15に記載のアクセラレータ・デバイス。
  17. 前記1つ以上の処理アレイ・モジュールは、各々のパイプライン・ステージに対する個別の出力ハードウェアを含むパイプライン経路を含む、請求項16に記載のアクセラレータ・デバイス。
  18. 前記1つ以上の処理アレイ・モジュールは、第1セットの入力を有する第1ドット積命令を実行するように形成することが可能な第1パイプライン経路と、第2セットの入力を有する第2ドット積命令を実行するように形成することが可能な第2パイプライン経路とを含む、請求項17に記載のアクセラレータ・デバイス。
  19. マルチ・ステージ処理パイプラインを有するハードウェア行列乗算アクセラレータにより、入力行列のセットに関するドット積演算を実行する方法であって:
    第1ソース・オペランドにより、第1行列の複数のデータ要素を、前記ハードウェア行列乗算アクセラレータのメモリに読み込むステップ;
    第2ソース・オペランドにより、第2行列の複数のデータ要素を、前記ハードウェア行列乗算アクセラレータの前記メモリに読み込むステップ;
    前記第2行列の前記複数のデータ要素内で非ゼロ値を検出するステップ;
    前記第2行列の前記複数のデータ要素内の前記非ゼロ値を、1つ以上のデータ要素を含むグループにグループ化するステップであって、前記グループのデータ要素の数は、前記ハードウェア行列乗算アクセラレータの前記マルチ・ステージ処理パイプラインにおけるステージの数に対応する、ステップ;
    前記グループのデータ要素を、前記処理パイプラインの対応するステージに提供するステップ;
    提供された前記グループのデータ要素と、前記第1行列の複数のデータ要素とを乗算し、一組の積を生成するステップ;
    前記一組の積を合計し、前記一組の積の合計をアキュムレータ値に累積するステップ;及び
    前記アキュムレータ値を、前記処理パイプラインの次のステージに書き込むステップ;
    を含む方法。
  20. 前記アキュムレータ値を、前記処理パイプラインの前記次のステージに書き込むステップは、パイプライン・フィードバック値を、前記処理パイプラインの第1ステージに書き込むステップ;
    を含む、請求項19に記載の方法。
  21. 前記グループのデータ要素を、前記処理パイプラインの対応するステージに提供するステップは、前記対応するステージの処理要素の複数のチャネルに、前記データ要素をブロードキャストするステップ;
    を含む、請求項19に記載の方法。
  22. 前記第2行列の前記複数のデータ要素内で前記非ゼロ値を検出するステップは、前記ハードウェア行列乗算アクセラレータの前記メモリ内で前記非ゼロ値を検出するステップ;
    を含む、請求項19に記載の方法。
  23. 請求項19−22のうちの何れか1項に記載の方法を実行する手段を備えるシステム。
JP2020202444A 2020-05-05 2020-12-07 フィードバック入力を有するシストリック・アレイを利用するスケーラブルなスパース行列乗算加速 Pending JP2021177366A (ja)

Applications Claiming Priority (4)

Application Number Priority Date Filing Date Title
IN202041019059 2020-05-05
IN202041019059 2020-05-05
US16/913,800 2020-06-26
US16/913,800 US11204977B2 (en) 2020-05-05 2020-06-26 Scalable sparse matrix multiply acceleration using systolic arrays with feedback inputs

Publications (1)

Publication Number Publication Date
JP2021177366A true JP2021177366A (ja) 2021-11-11

Family

ID=78232028

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2020202444A Pending JP2021177366A (ja) 2020-05-05 2020-12-07 フィードバック入力を有するシストリック・アレイを利用するスケーラブルなスパース行列乗算加速

Country Status (6)

Country Link
US (2) US11636174B2 (ja)
JP (1) JP2021177366A (ja)
CN (1) CN113610697A (ja)
BR (1) BR102021001391A2 (ja)
DE (1) DE102020131666A1 (ja)
TW (1) TW202143031A (ja)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP7243006B1 (ja) 2021-12-20 2023-03-22 エッジコーティックス ピーティーイー. リミテッド ネットワークオンチップリコンフィギュアビリティ

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
DE102020131666A1 (de) 2020-05-05 2021-11-11 Intel Corporation Skalierbare Multiplikationsbeschleunigung dünnbesetzter Matrizen unter Verwendung systolischer Arrays mit Rückkopplungseingaben

Family Cites Families (15)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9207908B1 (en) * 2013-01-29 2015-12-08 Altera Corporation Digital signal processing blocks with embedded arithmetic circuits
US9697176B2 (en) * 2014-11-14 2017-07-04 Advanced Micro Devices, Inc. Efficient sparse matrix-vector multiplication on parallel processors
US9846623B2 (en) * 2015-08-20 2017-12-19 Qsigma, Inc. Simultaneous multi-processor apparatus applicable to acheiving exascale performance for algorithms and program systems
US10146738B2 (en) * 2016-12-31 2018-12-04 Intel Corporation Hardware accelerator architecture for processing very-sparse and hyper-sparse matrix data
US11373088B2 (en) * 2017-12-30 2022-06-28 Intel Corporation Machine learning accelerator mechanism
US20190278600A1 (en) * 2018-03-09 2019-09-12 Nvidia Corporation Tiled compressed sparse matrix format
US10678508B2 (en) * 2018-03-23 2020-06-09 Amazon Technologies, Inc. Accelerated quantized multiply-and-add operations
US10572568B2 (en) * 2018-03-28 2020-02-25 Intel Corporation Accelerator for sparse-dense matrix multiplication
US10387122B1 (en) * 2018-05-04 2019-08-20 Olsen Ip Reserve, Llc Residue number matrix multiplier
US10963787B2 (en) * 2018-05-31 2021-03-30 Neuralmagic Inc. Systems and methods for generation of sparse code for convolutional neural networks
US10644721B2 (en) * 2018-06-11 2020-05-05 Tenstorrent Inc. Processing core data compression and storage system
US11093250B2 (en) * 2018-09-29 2021-08-17 Intel Corporation Apparatus and method for gang invariant operation optimizations using dynamic evaluation
US10628622B1 (en) * 2019-05-10 2020-04-21 Xilinx, Inc. Stream FIFO insertion in a compilation flow for a heterogeneous multi-core architecture
DE102020131666A1 (de) 2020-05-05 2021-11-11 Intel Corporation Skalierbare Multiplikationsbeschleunigung dünnbesetzter Matrizen unter Verwendung systolischer Arrays mit Rückkopplungseingaben
US11204977B2 (en) 2020-05-05 2021-12-21 Intel Corporation Scalable sparse matrix multiply acceleration using systolic arrays with feedback inputs

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP7243006B1 (ja) 2021-12-20 2023-03-22 エッジコーティックス ピーティーイー. リミテッド ネットワークオンチップリコンフィギュアビリティ
JP2023091712A (ja) * 2021-12-20 2023-06-30 エッジコーティックス ピーティーイー. リミテッド ネットワークオンチップリコンフィギュアビリティ

Also Published As

Publication number Publication date
TW202143031A (zh) 2021-11-16
DE102020131666A1 (de) 2021-11-11
BR102021001391A2 (pt) 2021-11-16
US20230281272A1 (en) 2023-09-07
US20220156343A1 (en) 2022-05-19
CN113610697A (zh) 2021-11-05
US11636174B2 (en) 2023-04-25

Similar Documents

Publication Publication Date Title
JP7408671B2 (ja) シストリックアレイに対するブロックスパース演算のためのアーキテクチャ
JP2022183406A (ja) ハイブリッド浮動小数点フォーマットのドット積累算命令を有するグラフィックスプロセッサ及びグラフィックス処理ユニット
EP3789893A1 (en) Sparse matrix multiplication acceleration mechanism
CN112581347A (zh) 使用三角形对和共享变换电路系统来改进光线追踪性能的设备和方法
CN112130752A (zh) 共享本地存储器读取合并和多播返回
US20220318013A1 (en) Supporting 8-bit floating point format operands in a computing architecture
US20220291955A1 (en) Asynchronous input dependency resolution mechanism
JP2021099783A (ja) ゼロスキップを伴うベクトル乗算加算の命令及びロジック
US20230281272A1 (en) Scalable sparse matrix multiply acceleration using systolic arrays with feedback inputs
JP2021099786A (ja) 共有ローカルメモリをパーティショニングするメカニズム
CN112233010A (zh) 多块图形引擎中的部分写入管理
US11669490B2 (en) Computing efficient cross channel operations in parallel computing machines using systolic arrays
KR20210059603A (ko) 병렬 압축해제 메커니즘
CN113577758A (zh) 云游戏自适应同步机制
JP2021103512A (ja) コンパイラ支援レジスタファイル書き込み削減
US20220309124A1 (en) Random sparsity handling in a systolic array
US11204977B2 (en) Scalable sparse matrix multiply acceleration using systolic arrays with feedback inputs
US11182337B1 (en) Computing efficient cross channel operations in parallel computing machines using systolic arrays
JP2023004864A (ja) シストリックアレイ電力消費を低減するためのスパース性メタデータの使用
EP3926479A1 (en) Dynamic cache control mechanism
CN114155134A (zh) 一种互连系统栅栏机构
JP2021077347A (ja) ドット積乗算器メカニズム
EP3907606A1 (en) Compaction of diverged lanes for efficient use of alus
US20210349717A1 (en) Compaction of diverged lanes for efficient use of alus

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20231204