JP2021108102A - 行列演算アクセラレータの命令のための装置、方法、およびシステム - Google Patents

行列演算アクセラレータの命令のための装置、方法、およびシステム Download PDF

Info

Publication number
JP2021108102A
JP2021108102A JP2020150874A JP2020150874A JP2021108102A JP 2021108102 A JP2021108102 A JP 2021108102A JP 2020150874 A JP2020150874 A JP 2020150874A JP 2020150874 A JP2020150874 A JP 2020150874A JP 2021108102 A JP2021108102 A JP 2021108102A
Authority
JP
Japan
Prior art keywords
input
matrix
instruction
circuit
buffer
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
JP2020150874A
Other languages
English (en)
Inventor
グラッドスタイン アミット
Amit Gradstein
グラッドスタイン アミット
ルバノヴィチ サイモン
Rubanovich Simon
ルバノヴィチ サイモン
メラー サギー
MELLER Sagi
メラー サギー
カロフ サイード
KHAROUF Saeed
カロフ サイード
バーガー ガブリ
BERGER Gavri
バーガー ガブリ
スペルバー ジーヴ
Sperber Zeev
スペルバー ジーヴ
ヤロウズ ホセ
YALLOUZ Jose
ヤロウズ ホセ
シュナイダー ロン
Schneider Ron
シュナイダー ロン
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Intel Corp
Original Assignee
Intel Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Intel Corp filed Critical Intel Corp
Publication of JP2021108102A publication Critical patent/JP2021108102A/ja
Priority to JP2023219258A priority Critical patent/JP2024038122A/ja
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T1/00General purpose image data processing
    • G06T1/20Processor architectures; Processor configuration, e.g. pipelining
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • 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
    • 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
    • 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/30098Register arrangements
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3851Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution from multiple instruction streams, e.g. multistreaming
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T9/00Image coding
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/34Addressing or accessing the instruction operand or the result ; Formation of operand address; Addressing modes

Landscapes

  • Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • Theoretical Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Software Systems (AREA)
  • Mathematical Physics (AREA)
  • General Engineering & Computer Science (AREA)
  • Computational Mathematics (AREA)
  • Pure & Applied Mathematics (AREA)
  • Mathematical Optimization (AREA)
  • Mathematical Analysis (AREA)
  • Data Mining & Analysis (AREA)
  • Computing Systems (AREA)
  • Algebra (AREA)
  • Databases & Information Systems (AREA)
  • Multimedia (AREA)
  • Advance Control (AREA)
  • Executing Machine-Instructions (AREA)
  • Complex Calculations (AREA)

Abstract

【課題】行列演算命令を実行する行列演算アクセラレータ回路を提供する。【解決手段】行列(タイル)演算アクセラレータを利用するシステムにおいて、行列演算は、レジスタなどのメモリの1つまたは複数のパックド領域であるタイルを表す2次元(2−D)データ構造を利用する。ホストプロセッサ/処理システム301は、算術演算もしくは行列操作演算又はロード演算及びストア演算などの行列操作演算を行列演算アクセラレータ307に伝達する。タイル操作演算子命令は、レジスタ−レジスタ(「reg−reg」)フォーマット又はレジスタ−メモリ(「reg−mem」)フォーマットとしてタイルを参照する。TILESTORE、TILELOAD、TILECONFIGなどの他のコマンドは、タイルに対してデータ演算を実行しない。【選択図】図3

Description

本開示は、概して、コンピュータプロセッサアーキテクチャに関し、より具体的には、行列演算アクセラレータ回路を使用した行列演算を実行するように命令を実行するための装置、システム、および、方法に関する。
プロセッサ、またはプロセッサのセットは、命令セット、例えば、命令セットアーキテクチャ(ISA)からの命令を実行する。命令セットは、プログラミングに関連するコンピュータアーキテクチャの一部であり、一般に、ネイティブデータ型、命令、レジスタアーキテクチャ、アドレッシングモード、メモリアーキテクチャ、割込みおよび例外処理、ならびに外部入力および出力(I/O)を含む。本明細書において、命令という用語は、マクロ命令、例えば、実行のためにプロセッサに提供される命令、または、マイクロ命令、例えば、プロセッサのデコーダがマクロ命令をデコードした結果得られる命令を指してよいことに留意されたい。
本開示は、添付の図面の図において限定ではなく例として示され、図面中、類似の参照符号は、類似の要素を示す。
本開示の実施形態による構成されたタイルの一実施形態を示す図である。
本開示の実施形態による構成されたタイルの一実施形態を示す図である。
本開示の実施形態による行列ストレージのいくつかの例を示す図である。
本開示の実施形態による行列(タイル)演算アクセラレータを利用するシステムの一実施形態を示す図である。
行列演算アクセラレータを使用してどのようにメモリが共有されるかの一実施形態を示す図である。 行列演算アクセラレータを使用してどのようにメモリが共有されるかの一実施形態を示す図である。
タイル(「TMMA」)を使用する行列乗累算演算の一実施形態を示す図である。
連鎖融合乗累算命令の反復の実行のサブセットの一実施形態を示す図である。
連鎖融合乗累算命令の反復の実行のサブセットの一実施形態を示す図である。
連鎖融合乗累算命令の反復の実行のサブセットの一実施形態を示す図である。
連鎖融合乗累算命令の反復の実行のサブセットの一実施形態を示す図である。
一実施形態による、乗算器への入力よりも大きい入力サイズをアキュムレータが使用する、2のべき乗サイズのSIMDの実装形態を示す図である。
行列演算回路を利用するシステムの一実施形態を示す図である。
タイルを使用する行列演算をサポートするプロセッサコアパイプラインの一実施形態を示す図である。
タイルを使用する行列演算をサポートするプロセッサコアパイプラインの一実施形態を示す図である。
行優先フォーマットおよび列優先フォーマットで表現された行列の一例を示す図である。
行列(タイル)の使用の一例を示す図である。
行列(タイル)の使用方法の一実施形態を示す図である。
一実施形態による、タイルの使用の構成用のサポートを示す図である。
サポートされるべき行列(タイル)の記述の一実施形態を示す図である。
レジスタの例を示す図である。 レジスタの例を示す図である。 レジスタの例を示す図である。 レジスタの例を示す図である。
本開示の実施形態による、行列(タイル)演算アクセラレータを利用するシステムの一実施形態を示す図である。
本開示の実施形態による、処理要素回路の2次元グリッドを含む行列演算アクセラレータ回路を示す図である。
本開示の実施形態による、行列演算アクセラレータ回路のディスパッチ回路を示す図である。
本開示の実施形態による、行列演算アクセラレータ回路のディスパッチ回路のスケジューリング回路を示す図である。
本開示の実施形態による、ベースラインスケジューリングモードから入力行列を再利用するスケジューリングモードに切換可能である、行列演算アクセラレータ回路のディスパッチ回路のスケジューリング回路を示す図である。
本開示の実施形態による、複数のパスのための行列演算アクセラレータ回路のディスパッチ回路を示す図である。
本開示の実施形態による、複数のパスのための行列演算アクセラレータ回路のディスパッチ回路のスケジューリング回路を示す図である。
本開示の実施形態による、行列演算回路のための疑似コードを示す図である。
本開示の実施形態による、行列演算命令を処理する方法を示す図である。
本開示の実施形態による、汎用ベクトル向け命令フォーマットおよびそのクラスA命令テンプレートを示すブロック図である。
本開示の実施形態による、汎用ベクトル向け命令フォーマットおよびそのクラスB命令テンプレートを示すブロック図である。
本開示の実施形態による、図30Aおよび図30B中の汎用ベクトル向け命令フォーマットのためのフィールドを示すブロック図である。
本開示の一実施形態による、図31A中の特定ベクトル向け命令フォーマットの、フルオペコードフィールドを構成するフィールドを示すブロック図である。
本開示の一実施形態による、図31A中の特定ベクトル向け命令フォーマットの、レジスタインデックスフィールドを構成するフィールドを示すブロック図である。
本開示の一実施形態による、図31A中の特定ベクトル向け命令フォーマットの、拡張演算フィールド3050を構成するフィールドを示すブロック図である。
本開示の一実施形態による、レジスタアーキテクチャのブロック図である。
本開示の実施形態による、例示的なインオーダパイプラインおよび例示的なレジスタリネーミング、アウトオブオーダ発行/実行パイプラインの両方を示すブロック図である。
本開示の実施形態による、プロセッサに含まれるべき例示的実施形態のインオーダアーキテクチャコアおよび例示的なレジスタリネーミング、アウトオブオーダ発行/実行アーキテクチャコアの両方を示すブロック図である。
本開示の実施形態による、オンダイ相互接続ネットワークへのその接続およびレベル2(L2)キャッシュのそのローカルサブセットを伴う、単一のプロセッサコアのブロック図である。
本開示の実施形態による、図34A中のプロセッサコアの一部の拡大図である。
本開示の実施形態による、1つより多いコアを有してよい、統合メモリコントローラを有してよい、統合グラフィックスを有してよい、プロセッサのブロック図である。
本開示の一実施形態によるシステムのブロック図である。
本開示の一実施形態による、より具体的な例示的システムのブロック図である。
本開示の一実施形態による、第2のより具体的な例示的システムのブロック図である。
本開示の一実施形態によるシステムオンチップ(SoC)のブロック図である。
本開示の実施形態による、ソース命令セット内のバイナリ命令を、ターゲット命令セット内のバイナリ命令に変換するソフトウェア命令コンバータの使用を対比するブロック図である。
以下の説明では、多数の具体的な詳細が示されている。しかしながら、実施形態は、これらの具体的な詳細なしに実践されてもよいことを理解されたい。他の例では、この説明の理解を曖昧にしないために、よく知られた回路、構造、および技法は詳細に示されていない。
本明細書における「一実施形態」、「実施形態」、「例示的な実施形態」などへの言及は、説明された実施形態が特定の特徴、構造、または特性を含んでよいが、すべての実施形態がその特定の特徴、構造、または特性を必ずしも含まなくてよいことを示す。また、そのような語句は、必ずしも同じ実施形態を指すものではない。さらに、特定の特徴、構造、または特性が一実施形態に関連して説明されるとき、明示的に説明されているか否かにかかわらず、他の実施形態に関連してそのような特徴、構造、または特性に影響を与えることは当業者の知識の範囲内であることが考えられる。
行列は、機械学習および他の大容量データ処理などの多くのコンピューティングタスクでますます重要になり得る。深層学習とは、機械学習アルゴリズムの一種である。ディープニューラルネットワークなどの深層学習アーキテクチャは、コンピュータビジョン、発話認識、自然言語処理、音声認識、ソーシャルネットワークフィルタリング、機械翻訳、バイオインフォマティクスおよび医薬品設計を含む分野に適用され得る。
推測およびトレーニング、という深層学習に用いられる2つの手段には、低精度演算が用いられる場合がある。深層学習のアルゴリズムおよび計算のスループットを最大化することは、深層学習プロセッサ、例えば、データセンターにおいて深層学習を実行する深層学習プロセッサのニーズを満たす助けとなり得る。
行列−行列乗算(別名、GEMMまたは汎用行列乗算)は、特定のプロセッサにおいては計算がヘビーな(compute−heavy)演算である。行列乗算(例えば、GEMM)のための特別なハードウェアは、深層学習などの特定のアプリケーションの計算ピーク(およびエネルギー効率)の改善のための良い選択肢である。深層学習を含むこれらのアプリケーションのいくつかは、比較的少数のビットを有する入力データ要素に対しては、出力要素が十分なビット(例えば、入力よりも多い)を有する限り、精度を落とすことなく動作することができる。
特定のプロセッサでは、行列を扱うことは困難であり、かつ/または命令集約的な作業である。例えば、行列の行は、複数のパックドデータ(例えば、SIMDまたはベクトル)レジスタに入れられ、次いで個々に処理される可能性がある。例えば、2つの8×2(例えば、行×列)行列の加算は、ロードを要求してもよく、データサイズに応じて4つのパックドデータレジスタに集めてもよい。次いで、各行列の第1行に対応するパックドデータレジスタについて1番目の加算が実行され、各行列の第2行に対応するパックドデータレジスタについて2番目の加算が実行される。次いで、得られたパックドデータレジスタはメモリに分散される。小規模行列の場合には、このシナリオは受け入れられるかもしれないが、大規模行列では受け入れられないことが多い。
[説明]
中央処理装置(CPU)、グラフィック処理装置(GPU)、およびアクセラレータなどのコンピュータハードウェアにおいて行列演算をサポートするメカニズムが本明細書で説明される。行列演算は、レジスタなどのメモリの1つまたは複数のパックド領域を表す2次元(2−D)データ構造を利用する。この説明全体を通して、これらの2Dデータ構造はタイルと称される。行列はタイルよりも小さくてもよく(使用するのはタイル全体より小さい)、複数のタイルを利用してもよい(行列はどのタイルのサイズよりも大きい)ことに留意されたい。説明全体を通して、行列(タイル)言語は、行列に影響を与えるタイルを使用して実行される演算を示すために使用され、その行列がどのタイルよりも大きいか否かは、通常、関係がない。
各タイルには、本明細書に詳述されるような様々な演算が作用してもよく、これらの演算は、限定はしないが、行列(タイル)乗算、タイル加算、タイル減算、タイル対角線、タイルゼロ、タイル変換、タイルドット積、タイルブロードキャスト、タイル行ブロードキャスト、タイル列ブロードキャスト、タイル乗算、タイル乗累算、タイル移動などを含む。さらに、スケールおよび/またはバイアスの使用などの演算子のサポートは、これらの演算と共に使用されてもよいし、将来の非数値アプリケーション、例えばOpenCLの「ローカルメモリ」、データの圧縮/解凍などのサポートにおいて使用されてもよい。本明細書には、行列演算(例えば、TILEPARTIALDOTPRODUCT)命令を実行するための命令も説明される。
ストレージ(メモリ(不揮発性および揮発性)、レジスタ、キャッシュなど)の一部は、様々な水平寸法および垂直寸法のタイルの中に配置される。例えば、タイルは、水平寸法4(例えば、4行の行列)および垂直寸法8(例えば、8列の行列)を有してもよい。通常、水平寸法は要素サイズ(例えば、2、4、8、16、32、64、128ビットなど)に関連する。複数のデータタイプ(単精度浮動小数点、倍精度浮動小数点、整数など)がサポートされてもよい。
[構成されたタイルの使用例]
いくつかの実施形態では、タイルパラメータは構成可能である。例えば、所与のタイルはタイルオプションを提供するように構成されてもよい。例示的なタイルオプションには、タイルの行数、タイルの列数、タイルが有効であるか否か、およびタイルが等しいサイズのタイルのペアで構成されるか否かが含まれるが、それらに限定されない。
図1Aは、構成されたタイルの一実施形態を示す。図示されたように、4kBのアプリケーションメモリ102が、4つの1kBのタイル、つまり、タイルt0(104)、タイルt1(106)、タイルt2(108)、およびタイルt3(110)を格納している。この例では、4つのタイルは、ペアで構成されず、それぞれ行および列に配置された要素を有する。タイルt0(104)およびタイルt1(106)は、K行N列の4バイト要素(例えば、単精度データ)を有し、Kは8に等しく、N=32である。タイルt2(108)およびタイルt3(110)は、K行N/2列の8バイト要素(例えば、倍精度データ)を有する。倍精度オペランドは単精度の2倍の幅なので、この構成は、タイルオプションを提供するために使用される、少なくとも4kBの総記憶容量に少なくとも4つの名前を提供するパレットと一致する。動作時は、ロード演算およびストア演算を使用して、これらのタイルをメモリからロードし、メモリに記憶することができる。使用される命令エンコーディングスキームに応じて、利用可能なアプリケーションメモリの量、ならびに利用可能なタイルのサイズ、数、および構成は異なる。
図1Bは、構成されたタイルの一実施形態を示す。図示されたように、4kBのアプリケーションメモリ122は、1kBタイルのペアを2つ記憶しており、第1のペアはタイルt4L(124)およびタイルt4R(126)であり、第2のペアはタイルt5L(128)およびタイルt5R(130)である。図示されたように、これらのタイルのペアは左タイルおよび右タイルに分割される。他の実施形態では、タイルのペアは偶数タイルおよび奇数タイルに分割される。この例では、4つのタイルは、それぞれ行および列に配置された要素を有する。タイルt4L(124)およびタイルt4R(126)は、K行N列の4バイト要素(例えば、単精度浮動小数点データ)を有し、Kは8に等しく、Nは32に等しい。タイルt5L(128)およびタイルt5R(130)は、K行N/2列の8バイト要素(例えば、倍精度浮動小数点データ)を有する。倍精度オペランドは単精度の2倍の幅なので、この構成は、タイルオプションを提供するために使用される、少なくとも4kBの総記憶容量に少なくとも2つの名前を提供するパレットと一致する。図1Aの4つのタイルは4つの名前を使用し、それぞれ1kBのタイルを命名するが、図1Bの2つのペアのタイルは2つの名前を使用してペアになったタイルを指定することができる。いくつかの実施形態では、タイル命令は、ペアになったタイルの名前をオペランドとして受け入れる。動作時は、ロード演算およびストア演算を使用して、これらのタイルをメモリからロードし、メモリに記憶することができる。使用される命令エンコーディングスキームに応じて、利用可能なアプリケーションメモリの量、ならびに利用可能なタイルのサイズ、数、および構成は異なる。
いくつかの実施形態では、タイルパラメータは定義可能である。例えば、「パレット」はタイルオプションを提供するために使用される。例示的なオプションには、タイル名の数、ストレージの行内のバイト数、タイル内の行および列の数などが含まれるが、それらに限定されない。例えば、タイルの最大の「高さ」(行数)は、以下のように定義されてもよい。
タイル最大行数=設計記憶容量/([パレット名の数]×[行当たりのバイト数])。
そのため、固定された名前を使用しても、実装間で異なるストレージサイズを利用できるように、アプリケーションを書くことができる。
タイルの構成は、タイル構成(「TILECONFIG」)命令を使用して行われ、選択されたパレットで特定のタイル使用が定義される。この宣言は、使用されるタイル名の数、名前(タイル)当たりの行および列の要求数、ならびにいくつかの実施形態では、各タイルの要求データタイプを含む。いくつかの実施形態では、TILECONFIG命令の実行中に整合性チェックが実行され、この命令がパレットエントリの制約に適合することが判定される。
[例示的なタイルストレージタイプ]
図2は、行列ストレージのいくつかの例を示す。(A)では、タイルがメモリに記憶されている。図示されたように、各「行」は4つのパックドデータ要素で構成される。次の「行」を得るために、ストライド値が使用される。行はメモリに連続して記憶されてもよいことに留意されたい。ストライドメモリアクセスは、タイルストレージが基礎となるメモリアレイの行幅をマッピングしないときに、1つの行から次の行へのアクセスを可能にする。
タイルのメモリからのロードおよびメモリへのストアは、通常、アプリケーションメモリからデータのパックド行へのストライドアクセスである。例示的なTILELOAD命令およびTILESTORE命令、またはロード演算命令におけるTILEオペランドとしてのアプリケーションメモリへの他の命令参照は、いくつかの実施形態では、(最大)2×行のページフォルト、マスクされていない浮動小数点例外、および/または命令ごとの割込みを扱うように再開可能である。
(B)では、行列が、パックドデータレジスタ(単一命令複数データ(SIMD)レジスタまたはベクトルレジスタ)などの複数のレジスタで構成されるタイルに記憶される。この例では、タイルは3つの物理レジスタにオーバーレイされている。通常、連続するレジスタが使用されるが、この場合はそうである必要はない。
(C)では、行列が、タイル演算で使用される融合乗累算(FMA)回路にとってアクセス可能な非レジスタストレージ内のタイルに記憶される。このストレージは、FMAの内部にあってもよく、それに隣接していてもよい。さらに、下記で説明されるいくつかの実施形態では、ストレージは、行全体またはタイル全体ではなくデータ要素用であってもよい。
TMMAアーキテクチャ用のサポートパラメータはCPUIDを介して報告される。いくつかの実施形態では、情報のリストは最大の高さおよび最大SIMD寸法を含む。TMMAアーキテクチャを構成するには、タイルごとの寸法、タイルごとの要素サイズ、およびパレット識別子を指定する必要がある。この構成はTILECONFIG命令を実行することによって行われる。
TILECONFIG命令が正常に実行されると、後続のTILE演算子が有効になる。TILERELEASEALL命令はタイル構成をクリアし、(次のTILECONFIG命令が実行されるまで)TILE演算を無効にする。いくつかの実施形態では、タイルを使用するコンテキスト切り替えにおいてXSAVE、XSTOREなどが使用される。いくつかの実施形態では、2つのXCR0ビットがXSAVEにおいて使用され、1つのビットはTILECONFIGメタデータ用であり、もう1つのビットは実際のタイルペイロードデータに対応する。
TILECONFIGは、タイル使用を構成するだけでなく、構成されたタイルと共にプログラムがコードの領域内にあることを示す状態変数も設定する。一実装形態は、既存のレジスタセットを使用しないことなどの、タイル領域と共に使用することができる他の命令に対する制限を列挙することができる。
タイル領域を終了することは、通常、TILERELEASEALL命令を用いて行われる。この命令はパラメータを取らず、すべてのタイルをすばやく無効化し(データの保存または復元が不要になったことを示し)、タイル領域にあることに対応する内部状態をクリアする。
いくつかの実施形態では、タイル演算は、タイル構成によって指定された寸法を超えたすべての行およびすべての列をゼロにする。例えば、タイル演算は、各行が書き込まれると、(要素のサイズを考慮して)構成された列数を超えるデータをゼロにする。例えば、64バイトの行および10行12列で構成されるタイルでは、FP32要素を書き込む演算が、最初の10行のそれぞれに12×4バイトの出力/結果データを書き込み、各行の残りの4×4バイトをゼロにする。タイル演算は、構成された最初の10行の後のどの行も完全にゼロにする。64バイトの行を有する1Kタイルを使用すると、16行になるので、この例では最後の6行もゼロにされるはずである。
いくつかの実施形態では、コンテキスト復元命令(例えば、XRSTOR)が、データをロードするとき、タイル用に構成された行を超えるデータがゼロとして保持されることを強制する。有効な構成がない場合、すべての行がゼロにされる。タイルデータのXRSTORは、構成された列を超える列に不要なデータをロードする可能性がある。タイル構成に関連付けられた要素幅が存在しないので、構成された列数を超えてXRSTORがクリアすることは不可能なはずである。
コンテキスト保存(例えば、XSAVE)は、それをメモリに書き込むときにTILE記憶領域全体を公開する。XRSTORがタイルの右端に不要なデータをロードした場合、そのデータはXSAVEによって保存される。XSAVEは、タイルごとに指定された数を超える行にゼロを書き込む。
いくつかの実施形態では、タイル命令は再開可能である。メモリにアクセスする演算は、ページフォルト後の再開を可能にする。浮動小数点演算を処理する計算命令は、マスクされていない浮動小数点例外も可能にし、例外のマスキングは制御レジスタおよび/またはステータスレジスタによって制御される。
これらのイベント後の命令再開をサポートするために、これらの命令は下記に詳述される開始レジスタに情報を記憶する。
[行列(タイル)演算システム]
[例示的なハードウェアサポート]
図3は、行列(タイル)演算アクセラレータを利用するシステムの一実施形態を示す。この図では、ホストプロセッサ/処理システム301は、コマンド311(例えば、算術演算もしくは行列操作演算、またはロード演算およびストア演算などの行列操作演算)を行列演算アクセラレータ307に伝達する。しかしながら、これは説明の目的でのみこのように示されている。後で詳述されるように、このアクセラレータ307は処理コアの一部であってもよい。通常、タイル操作演算子命令であるコマンド311は、レジスタ−レジスタ(「reg−reg」)フォーマットまたはレジスタ−メモリ(「reg−mem」)フォーマットとしてタイルを参照する。TILESTORE、TILELOAD、TILECONFIGなどの他のコマンドは、タイルに対してデータ演算を実行しない。コマンドは、アクセラレータ307が処理するためのデコードされた命令(例えば、マイクロop)またはマクロ命令であってもよい。
この例では、コヒーレントメモリインタフェース303が、ホストプロセッサ/処理システム301および行列演算アクセラレータ307に結合され、その結果、それらはメモリを共有することができる。図4および図5は、行列演算アクセラレータを使用してどのようにメモリが共有されるかについての異なる実施形態を示す。図4に示されたように、ホストプロセッサ401および行列演算アクセラレータ回路405は、同じメモリ403を共有する。図5は、ホストプロセッサ501および行列演算アクセラレータ505がメモリを共有しないが、互いのメモリにアクセスできる一実施形態を示す。例えば、プロセッサ501は、タイルメモリ507にアクセスし、また自身のホストメモリ503を通常通り利用することができる。同様に、行列演算アクセラレータ505はホストメモリ503にアクセスすることができるが、より一般的には自身のメモリ507を使用する。これらのメモリは異なるタイプのメモリであってもよいことに留意されたい。
いくつかの実施形態では、タイルは、物理レジスタ上のオーバーレイを用いてサポートされる。例えば、タイルは、実装に応じて16個の1024ビットレジスタ、32個の512ビットレジスタなどを利用してよい。いくつかの実施形態では、行列演算は、レジスタなどのメモリの1つまたは複数のパックド領域を表す2次元(2−D)データ構造を利用する。この説明全体を通して、これらの2Dデータ構造はタイルまたはタイルレジスタと称される。
いくつかの実施形態では、行列演算アクセラレータ307は、データバッファ305に結合された複数のFMA309を含む(いくつかの実装形態では、これらのデータバッファ305のうちの1つまたは複数は図示されたようにグリッドのFMAに記憶される)。データバッファ305は、(例えば、タイルロード命令またはタイルストア命令を使用して)メモリからロードされたタイルおよび/またはメモリに記憶されるべきタイルをバッファリングする。データバッファは、例えば、複数のレジスタであってもよい。通常、これらのFMAは、タイルを読み書きすることができる連鎖FMAのグリッド309として配置される。この例では、行列演算アクセラレータ307は、タイルT0、T1、およびT2を使用して行列乗算演算を実行する。FMAグリッド309には、これらのタイルのうちの少なくとも1つが収容される。いくつかの実施形態では、演算に含まれるすべてのタイルがFMAグリッド309に記憶される。他の実施形態では、サブセットのみがFMAグリッド309に記憶される。図示されたように、T1は収容され、T0およびT2は収容されない。A、B、およびCは、これらのタイルの行列を指し、その行列はタイルの全スペースを占めても占めなくてもよい、ことに留意されたい。
図6は、タイル(「TMMA」)を使用する行列乗累算演算の一実施形態を示す。
特定の実施形態では、行列(タイルA601)内の行数は、計算のレイテンシを含むシリアル(連鎖)FMAの数と一致する。一実装形態は、より低い高さのグリッド上で自由に再循環するが、計算は同じままである。
ソース/デスティネーションベクトルはN行のタイル(タイルC605)から来て、FMAのグリッド611は、タイルの行列乗算を実行する完全な命令をもたらすN個のベクトル−行列演算を実行する。タイルB603は他のベクトルソースであり、各段階でFMAに「ブロードキャスト」項を供給する。
動作時は、いくつかの実施形態では、(タイルB603に記憶された)行列Bの要素は、FMAの矩形グリッドにわたって広がっている。(タイルA601に記憶された)行列Bは、FMAの矩形グリッドのカラム寸法と一致するように変換された行の要素を有する。グリッド内の各FMAにおいて、AとBの要素が乗算され、(図の上から)入ってくる被加数に加算され、出力合計がFMAの次の行(または最終出力)に渡される。
単一段階のレイテンシはK(行列Bの行の高さ)に比例し、従属TMMAは、通常、そのレイテンシを隠すのに十分なソース−デスティネーション行を(単一のタイル内またはタイル全体に)有する。一実装形態はまた、SIMD(パックドデータ要素)寸法M(行列Aの行の高さ)を時間段階にわたって分割する場合があるが、これは単にKが乗算される定数を変えるだけである。プログラムがTMMAによって列挙された最大値より小さいKを指定するとき、一実装形態はこれを「マスキング」または「アーリーアウト」で自由に実装する。
TMMA全体のレイテンシはN×Kに比例する。リピートレートはNに比例する。TMMA命令当たりのMACの数はN×K×Mである。
図7は、連鎖融合乗累算命令の反復の実行のサブセットの一実施形態を示す。具体的には、この図はデスティネーションの1つのパックドデータ要素位置の反復の実行回路を示す。この実施形態では、連鎖融合乗累算は符号付きソースを処理しており、アキュムレータは2倍の入力データサイズである。
第1の符号付きソース(ソース1(701))および第2の符号付きソース(ソース2(703))は、それぞれ4つのパックドデータ要素を有する。これらのパックドデータ要素のそれぞれは、浮動小数点データなどの符号付きデータを記憶する。第3の符号付きソース(ソース3(709))は2つのパックドデータ要素を有し、それらのそれぞれは符号付きデータを記憶する。第1および第2の符号付きソース701および703のサイズは、第3の符号付きソース(初期値または前の結果)709の半分のサイズである。例えば、第1および第2の符号付きソース701および703は32ビットのパックドデータ要素(例えば、単精度浮動小数点)を有する可能性があり、第3の符号付きソース709は64ビットのパックドデータ要素(例えば、倍精度浮動小数点)を有する可能性がある。
この図では、第1および第2の符号付きソース701および703の2つの最上位パックドデータ要素位置、ならびに第3の符号付きソース709の最上位パックドデータ要素位置のみが示されている。当然、その他のパックドデータ要素位置も処理されるはずである。
図示されたように、パックドデータ要素はペアで処理される。例えば、第1および第2の符号付きソース701および703の最上位パックドデータ要素位置のデータは乗算器回路705を使用して乗算され、第1および第2の符号付きソース701および703の上位2番目のパックドデータ要素位置からのデータは乗算器回路707を使用して乗算される。いくつかの実施形態では、これらの乗算器回路705および707は、他のパックドデータ要素位置に再利用される。他の実施形態では、パックドデータ要素が並列に処理されるように追加の乗算器回路が使用される。いくつかの文脈では、並列実行は、第3の符号付きソース709のサイズであるレーンを使用して行われる。各乗算の結果は、加算回路711を使用して加算される。
乗算の結果の加算の結果は、(異なる加算器713または同じ加算器711を使用して)符号付きソース3(709)の最上位パックドデータ要素位置からのデータに加算される。
最後に、2番目の加算の結果は、第3の符号付きソース709から使用されたパックドデータ要素位置に対応するパックドデータ要素位置において符号付きデスティネーション715に記憶されるか、または、もしあれば次の反復に渡される。いくつかの実施形態では、対応する書き込みマスク(ビット)が設定されている場合には保存が生じ、設定されていない場合には保存が生じないように、書き込みマスクがこのストレージに適用される。
図8は、連鎖融合乗累算命令の反復の実行のサブセットの一実施形態を示す。具体的には、この図はデスティネーションの1つのパックドデータ要素位置の反復の実行回路を示す。この実施形態では、連鎖融合乗累算は符号付きソースを処理しており、アキュムレータは2倍の入力データサイズである。
第1の符号付きソース(ソース1(801))および第2の符号付きソース(ソース2(803))は、それぞれ4つのパックドデータ要素を有する。これらのパックドデータ要素のそれぞれは、整数データなどの符号付きデータを記憶する。第3の符号付きソース(ソース3(809))は2つのパックドデータ要素を有し、それらのそれぞれは符号付きデータを記憶する。第1および第2の符号付きソース801および803のサイズは、第3の符号付きソース809の半分のサイズである。例えば、第1および第2の符号付きソース801および803は32ビットのパックドデータ要素(例えば、単精度浮動小数点)を有する可能性があり、第3の符号付きソース809は64ビットのパックドデータ要素(例えば、倍精度浮動小数点)を有する可能性がある。
この図では、第1および第2の符号付きソース801および803の2つの最上位パックドデータ要素位置、ならびに第3の符号付きソース809の最上位パックドデータ要素位置のみが示されている。当然、その他のパックドデータ要素位置も処理されるはずである。
図示されたように、パックドデータ要素はペアで処理される。例えば、第1および第2の符号付きソース801および803の最上位パックドデータ要素位置のデータは乗算器回路805を使用して乗算され、第1および第2の符号付きソース801および803の上位2番目のパックドデータ要素位置からのデータは乗算器回路807を使用して乗算される。いくつかの実施形態では、これらの乗算器回路805および807は、他のパックドデータ要素位置に再利用される。他の実施形態では、パックドデータ要素が並列に処理されるように追加の乗算器回路が使用される。いくつかの文脈では、並列実行は、第3の符号付きソース(初期値または前の反復結果)809のサイズであるレーンを使用して行われる。各乗算の結果は、加算/飽和回路813を使用して第3の符号付きソース809に加算される。
加算/飽和(アキュムレータ)回路813は、加算が大きすぎる値をもたらすとき、オペランドの符号を保存する。具体的には、飽和評価が、多方向加算とデスティネーションへの書き込みまたは次の反復との間の無限精度結果に対して行われる。アキュムレータ813が浮動小数点であり、入力項が整数であるとき、積の和および浮動小数点アキュムレータ入力値は、無限精度値(数百ビットの固定小数点数)に変換され、乗算結果と第3の入力の加算が実行され、実際のアキュムレータタイプへの丸めが1回実行される。
符号なし飽和は、出力値がその要素幅に対して符号なしの最大数(すべて1)に制限されることを意味する。符号付き飽和は、値がその要素幅に対して負の最小数と正の最大数との間の範囲にあるように制限されることを意味する(例えば、バイトの場合、範囲は−128(=−2^7)から127(=2^7−1)までである)。
加算および飽和チェックの結果は、第3の符号付きソース809から使用されたパックドデータ要素位置に対応するパックドデータ要素位置において符号付き結果815に記憶されるか、またはもしあれば次の反復に渡される。いくつかの実施形態では、対応する書き込みマスク(ビット)が設定されている場合には保存が生じ、設定されていない場合には保存が生じないように、書き込みマスクがこのストレージに適用される。
図9は、連鎖融合乗累算命令の反復の実行のサブセットの一実施形態を示す。具体的には、この図はデスティネーションの1つのパックドデータ要素位置の反復の実行回路を示す。この実施形態では、連鎖融合乗累算は符号付きソースおよび符号なしソースを処理しており、アキュムレータは4倍の入力データサイズである。
第1の符号付きソース(ソース1(901))および第2の符号なしソース(ソース2(903))は、それぞれ4つのパックドデータ要素を有する。これらのパックドデータ要素のそれぞれは、浮動小数点データまたは整数データなどのデータを有する。第3の符号付きソース(初期値または結果915)は、符号付きデータを記憶するパックドデータ要素を有する。第1および第2の符号付きソース901および903のサイズは、第3の符号付きソース915の4分の1である。例えば、第1および第2のソース901および903は16ビットのパックドデータ要素(例えば、ワード)を有する可能性があり、第3の符号付きソース915は64ビットのパックドデータ要素(例えば、倍精度浮動小数点または64ビット整数)を有する可能性がある。
この図では、第1および第2のソース901および903の4つの最上位パックドデータ要素位置、ならびに第3の符号付きソース915の最上位パックドデータ要素位置が示されている。当然、他のパックドデータ要素位置も、もしあれば処理されるはずである。
図示されたように、パックドデータ要素は四つ組で処理される。例えば、第1および第2のソース901および903の最上位パックドデータ要素位置のデータは乗算器回路905を使用して乗算され、第1および第2のソース901および903の上位2番目のパックドデータ要素位置からのデータは乗算器回路907を使用して乗算され、第1および第2のソース901および903の上位3番目のパックドデータ要素位置からのデータは乗算器回路909を使用して乗算され、第1および第2のソース901および903の最下位パックドデータ要素位置からのデータは乗算器回路911を使用して乗算される。いくつかの実施形態では、第1のソース901の符号付きパックドデータ要素は符号拡張され、第2のソース903の符号なしパックドデータ要素は乗算より前にゼロ拡張される。
いくつかの実施形態では、これらの乗算器回路905〜911は他のパックドデータ要素位置に再利用される。他の実施形態では、パックドデータ要素が並列に処理されるように追加の乗算器回路が使用される。いくつかの文脈では、並列実行は、第3の符号付きソース915のサイズであるレーンを使用して行われる。各乗算の結果は、加算回路913を使用して加算される。
乗算の結果の加算の結果は、(異なる加算器917または同じ加算器913を使用して)符号付きソース3(915)の最上位パックドデータ要素位置からのデータに加算される。
最後に、2番目の加算の結果919は、第3の符号付きソース915から使用されたパックドデータ要素位置に対応するパックドデータ要素位置において符号付きデスティネーションに記憶されるか、または次の反復に渡される。いくつかの実施形態では、対応する書き込みマスク(ビット)が設定されている場合には保存が生じ、設定されていない場合には保存が生じないように、書き込みマスクがこのストレージに適用される。
図10は、連鎖融合乗累算命令の反復の実行のサブセットの一実施形態を示す。具体的には、この図はデスティネーションの1つのパックドデータ要素位置の反復の実行回路を示す。この実施形態では、連鎖融合乗累算は符号付きソースおよび符号なしソースを処理しており、アキュムレータは4倍の入力データサイズである。
第1の符号付きソース1001および第2の符号なしソース1003は、それぞれ4つのパックドデータ要素を有する。これらのパックドデータ要素のそれぞれは、浮動小数点データまたは整数データなどのデータを記憶する。第3の符号付きソース1015(初期値または前の結果)は、符号付きデータを記憶するパックドデータ要素を有する。第1および第2のソースのサイズは、第3の符号付きソース1015(初期値または前の結果)の4分の1である。例えば、第1および第2のソースは16ビットのパックドデータ要素(例えば、ワード)を有する可能性があり、第3の符号付きソース1015(初期値または前の結果)は、64ビットのパックドデータ要素(例えば、倍精度浮動小数点または64ビット整数)を有する可能性がある。
この図では、第1の符号付きソース1001および第2の符号なしソース1003の4つの最上位パックドデータ要素位置、ならびに第3の符号付きソース1015の最上位パックドデータ要素位置が示されている。当然、他のパックドデータ要素位置も、もしあれば処理されるはずである。
図示されたように、パックドデータ要素は四つ組で処理される。例えば、第1の符号付きソース1001および第2の符号なしソース1003の最上位パックドデータ要素位置のデータは乗算器回路1005を使用して乗算され、第1の符号付きソース1001および第2の符号なしソース1003の上位2番目のパックドデータ要素位置からのデータは乗算器回路1007を使用して乗算され、第1の符号付きソース1001および第2の符号なしソース1003の上位3番目のパックドデータ要素位置からのデータは乗算器回路1009を使用して乗算され、第1の符号付きソース1001および第2の符号なしソース1003の最下位パックドデータ要素位置からのデータは乗算器回路1011を使用して乗算される。いくつかの実施形態では、第1の符号付きソース1001の符号付きパックドデータ要素は符号拡張され、第2の符号なしソース1003の符号なしパックドデータ要素は乗算より前にゼロ拡張される。
いくつかの実施形態では、これらの乗算器回路1005〜1011は他のパックドデータ要素位置に再利用される。他の実施形態では、パックドデータ要素が並列に処理されるように追加の乗算器回路が使用される。いくつかの文脈では、並列実行は、第3の符号付きソース1015(初期値または前の結果)のサイズであるレーンを使用して行われる。乗算の結果の加算の結果は、加算器/飽和1013回路を使用して第3の符号付きソース1015(初期値または前の結果)の最上位パックドデータ要素位置からのデータに加算される。
加算/飽和(アキュムレータ)回路1013は、加算が符号付き飽和にとって大きすぎるかまたは小さすぎる値をもたらすとき、オペランドの符号を保存する。具体的には、飽和評価は、多方向加算とデスティネーションへの書き込みとの間の無限精度結果に対して行われる。アキュムレータ1013が浮動小数点であり、入力項が整数であるとき、積の和および浮動小数点アキュムレータ入力値は、無限精度値(数百ビットの固定小数点数)に変換され、乗算結果と第3の入力の加算が実行され、実際のアキュムレータタイプへの丸めが1回実行される。
加算および飽和チェックの結果1019は、第3の符号付きソース1015(初期値もしくは前の結果)から使用されたパックドデータ要素位置に対応するパックドデータ要素位置において符号付きデスティネーションに記憶されるか、または次の反復に渡される。いくつかの実施形態では、対応する書き込みマスク(ビット)が設定されている場合には保存が生じ、設定されていない場合には保存が生じないように、書き込みマスクがこのストレージに適用される。
図11は、一実施形態による、乗算器への入力よりも大きい入力サイズをアキュムレータが使用する、2のべき乗サイズのSIMDの実装形態を示す。(乗算器への)ソース値およびアキュムレータ値は、符号付きの値であっても符号なしの値であってもよいことに留意されたい。2倍の入力サイズを有するアキュムレータの(換言すると、アキュムレータの入力値がソースのパックドデータ要素サイズの2倍のサイズである)場合、表1101は様々な構成を示す。バイトサイズのソースの場合、アキュムレータはサイズが16ビットのワードまたは半精度浮動小数点(HPFP)の値を使用する。ワードサイズのソースの場合、アキュムレータはサイズが32ビットの32ビット整数または単精度浮動小数点(SPFP)の値を使用する。SPFPまたは32ビット整数のサイズのソースの場合、アキュムレータはサイズが64ビットの64ビット整数または倍精度浮動小数点(DPFP)の値を使用する。
4倍の入力サイズを有するアキュムレータの(換言すると、アキュムレータの入力値がソースのパックドデータ要素サイズの4倍のサイズである)場合、表1103は様々な構成を示す。バイトサイズのソースの場合、アキュムレータはサイズが32ビットの32ビット整数または単精度浮動小数点(SPFP)の値を使用する。ワードサイズのソースの場合、いくつかの実施形態では、アキュムレータはサイズが64ビットの64ビット整数または倍精度浮動小数点(DPFP)の値を使用する。
8倍の入力サイズを有するアキュムレータの(換言すると、アキュムレータの入力値がソースのパックドデータ要素サイズの8倍のサイズである)場合、表1105は1つの構成を示す。バイトサイズのソースの場合、アキュムレータは64ビット整数を使用する。
先に示唆したように、行列演算回路はコアに含まれてもよく、外部アクセラレータであってもよい。図12は、行列演算回路を利用するシステムの一実施形態を示す。この図では、複数のエンティティがリング相互接続1245と結合されている。
複数のコア、つまりコア0(1201)、コア1(1203)、コア2(1205)、およびコアN(1207)が、非タイルベースの命令サポートを提供する。いくつかの実施形態では、行列演算回路1251がコア1203内に設けられ、他の実施形態では、行列演算回路1211および1213がリング相互接続1245上でアクセス可能である。
さらに、コアおよび/または行列演算回路の代わりに、メモリ1233および1231と通信するために、1つまたは複数のメモリコントローラ1223〜1225が設けられる。
図13は、タイルを使用する行列演算をサポートするプロセッサコアパイプラインの一実施形態を示す。分岐予測およびデコード回路1303が、命令ストレージ1301に記憶された命令から、命令の分岐予測、命令のデコード、および/またはその両方を実行する。例えば、本明細書に詳述されている命令が命令ストレージに記憶されてもよい。いくつかの実装形態では、別個の回路が分岐予測に使用され、いくつかの実施形態では、少なくともいくつかの命令が、マイクロコード1305を使用して、1つもしくは複数のマイクロ演算、マイクロコードエントリポイント、マイクロ命令、他の命令、または他の制御信号にデコードされる。分岐予測およびデコード回路1303は、様々な異なるメカニズムを使用して実装されてもよい。適切なメカニズムの例には、ルックアップテーブル、ハードウェア実装、プログラマブルロジックアレイ(PLA)、マイクロコード読み取り専用メモリ(ROM)などが含まれるが、それらに限定されない。
分岐予測およびデコード回路1303は、いくつかの実施形態では、スケジューラ回路1309に結合されたアロケート/リネーム1307回路に結合される。いくつかの実施形態では、これらの回路は、1)論理オペランド値を物理オペランド値(例えば、いくつかの実施形態ではレジスタエイリアステーブル)にリネーミングすること、2)ステータスビットおよびフラグをデコードされた命令に割り当てること、ならびに3)(例えば、いくつかの実施形態では予約ステーションを使用して)命令プールから実行回路上で実行するためのデコードされた命令をスケジュールすることのうちの1つまたは複数を実行することにより、レジスタリネーミング、レジスタ割り当て、および/またはスケジューリング機能を提供する。
スケジューラ回路1309は、予約ステーション、中央命令ウィンドウなどを含む任意の数の様々なスケジューラを表す。スケジューラ回路1309は、物理レジスタファイル1315に結合されるか、またはそれを含む。物理レジスタファイル1315のそれぞれは1つまたは複数の物理レジスタファイルを表し、それらの異なるファイルは、スカラ整数、スカラ浮動小数点、パックド整数、パックド浮動小数点、ベクトル整数、ベクトル浮動小数点、ステータス(例えば、実行されるべき次の命令のアドレスである命令ポインタ)、タイルなどの1つまたは複数の異なるデータタイプを記憶する。一実施形態では、物理レジスタファイル1315は、ベクトルレジスタ回路、書き込みマスクレジスタ回路、およびスカラレジスタ回路を備える。これらのレジスタ回路は、アーキテクチャベクトルレジスタ、ベクトルマスクレジスタ、および汎用レジスタを提供することができる。物理レジスタファイル1315は、レジスタリネーミングおよびアウトオブオーダ実行が(例えば、リオーダバッファおよびリタイアメントレジスタファイルを使用すること、将来のファイル、履歴バッファ、およびリタイアメントレジスタファイルを使用すること、レジスタマップおよびレジスタのプールを使用することなどで)実装され得る様々な方法を示すために、リタイアメント回路1317と重なっている。リタイアメント回路1317および物理レジスタファイル1315は、実行回路1311に結合される。
レジスタリネーミングはアウトオブオーダ実行の文脈で説明されているが、レジスタリネーミングはインオーダアーキテクチャで使用されてもよいことを理解されたい。図示されたプロセッサの実施形態はまた、別個の命令ならびにデータキャッシュユニットおよび共有L2キャッシュユニットを含んでもよいが、代替の実施形態は、例えば、レベル1(L1)内部キャッシュ、または複数レベルの内部キャッシュなどの、命令とデータの両方のための単一の内部キャッシュを有してもよい。いくつかの実施形態では、システムは、内部キャッシュと、コアおよび/またはプロセッサの外部にある外部キャッシュとの組み合わせを含んでもよい。あるいは、キャッシュのすべてがコアおよび/またはプロセッサの外部にあってもよい。
実行回路1311は、スカラ回路1321、ベクトル/SIMD回路1323、および行列演算回路1327を含む1つまたは複数の実行回路、ならびにキャッシュ1313にアクセスするためのメモリアクセス回路1325のセットである。実行回路は、様々な演算(例えば、シフト、加算、減算、乗算)を、様々なタイプのデータ(例えば、スカラ浮動小数点、パックド整数、パックド浮動小数点、ベクトル整数、ベクトル浮動小数点)に対して実行する。いくつかの実施形態は、特定の機能または機能のセットに専用の複数の実行ユニットを含んでもよいが、他の実施形態は、ただ1つの実行ユニットまたはすべてがすべての機能を実行する複数の実行ユニットを含んでもよい。スカラ回路1321はスカラ演算を実行し、ベクトル/SIMD回路1323はベクトル/SIMD演算を実行し、行列演算回路1327は本明細書に詳述されている行列(タイル)演算を実行する。
例として、例示的なレジスタリネーミング、アウトオブオーダ発行/実行コアアーキテクチャは、以下のようにパイプラインを実装することができる。1)命令フェッチ回路がフェッチおよび長さデコード段階を実行する。2)分岐およびデコード回路1303がデコード段階を実行する。3)アロケート/リネーム1307回路が割り当て段階およびリネーミング段階を実行する。4)スケジューラ回路1309がスケジュール段階を実行する。5)(スケジューラ回路1309およびアロケート/リネーム1307回路に結合されるか、またはそれらに含まれる)物理レジスタファイルならびにメモリユニットがレジスタ読み取り/メモリ読み取り段階を実行し、実行回路1311が実行段階を実行する。6)メモリユニットおよび物理レジスタファイルユニットがライトバック/メモリ書き込み段階を実行する。7)様々なユニットが例外処理段階に関与してもよい。8)リタイアメントユニットおよび物理レジスタファイルユニットがコミット段階を実行する。
コアは、本明細書で説明された命令を含む、1つまたは複数の命令セット(例えば、(より新しいバージョンで追加されたいくつかの拡張を有する)x86命令セット、カリフォルニア州サニーベールのMIPS TechnologiesのMIPS命令セット、カリフォルニア州サニーベールのARM Holdingsの(NEONなどのオプションの追加の拡張を有する)ARM命令セット))をサポートすることができる。一実施形態では、コア1390は、パックドデータ命令セット拡張(例えば、AVX1、AVX2)をサポートするロジックを含み、それにより、多くのマルチメディアアプリケーションによって使用される演算がパックドデータを使用して実行されることが可能になる。
コアは、マルチスレッディング(演算またはスレッドの2つ以上の並列セットの実行)をサポートするとができ、タイムスライスマルチスレッディング、(物理コアが同時にマルチスレッディングしているスレッドのそれぞれに単一の物理コアが論理コアを提供する)同時マルチスレッディング、またはそれらの組み合わせ(例えば、インテル(登録商標)ハイパースレッディングテクノロジなどにおけるタイムスライスフェッチおよびデコードならびにその後の同時マルチスレッディング)を含む様々な方法でサポートすることができることを理解されたい。
図14は、タイルを使用する行列演算をサポートするプロセッサコアパイプラインの一実施形態を示す。分岐予測およびデコード回路1403は、命令ストレージ1401に記憶された命令から、命令の分岐予測、命令のデコード、および/またはその両方を実行する。例えば、本明細書に詳述されている命令は命令ストレージに記憶されてもよい。いくつかの実装形態では、別個の回路が分岐予測に使用され、いくつかの実施形態では、少なくともいくつかの命令が、マイクロコード1405を使用して、1つもしくは複数のマイクロ演算、マイクロコードエントリポイント、マイクロ命令、他の命令、または他の制御信号にデコードされる。分岐予測およびデコード回路1403は、様々な異なるメカニズムを使用して実装されてもよい。適切なメカニズムの例には、ルックアップテーブル、ハードウェア実装、プログラマブルロジックアレイ(PLA)、マイクロコード読み取り専用メモリ(ROM)などが含まれるが、それらに限定されない。
分岐予測およびデコード回路1403は、いくつかの実施形態では、スケジューラ回路1409に結合されたアロケート/リネーム回路1407に結合される。いくつかの実施形態では、これらの回路は、1)論理オペランド値を物理オペランド値(例えば、いくつかの実施形態ではレジスタエイリアステーブル)にリネーミングすること、2)ステータスビットおよびフラグをデコードされた命令に割り当てること、ならびに3)(例えば、いくつかの実施形態では予約ステーションを使用して)命令プールから実行回路上で実行するためのデコードされた命令をスケジュールすることのうちの1つまたは複数を実行することにより、レジスタリネーミング、レジスタ割り当て、および/またはスケジューリング機能を提供する。
スケジューラ回路1409は、予約ステーション、中央命令ウィンドウなどを含む任意の数の様々なスケジューラを表す。スケジューラユニットのスケジューラ回路1409は、物理レジスタファイル1415に結合されるか、またはそれを含む。物理レジスタファイル1415のそれぞれは1つまたは複数の物理レジスタファイルを表し、それらの異なるファイルは、スカラ整数、スカラ浮動小数点、パックド整数、パックド浮動小数点、ベクトル整数、ベクトル浮動小数点、ステータス(例えば、実行されるべき次の命令のアドレスである命令ポインタ)、タイルなどの1つまたは複数の異なるデータタイプを記憶する。一実施形態では、物理レジスタファイル1415は、ベクトルレジスタ回路、書き込みマスクレジスタ回路、およびスカラレジスタ回路を備える。これらのレジスタ回路は、アーキテクチャベクトルレジスタ、ベクトルマスクレジスタ、および汎用レジスタを提供することができる。物理レジスタファイル1415は、レジスタリネーミングおよびアウトオブオーダ実行が(例えば、リオーダバッファおよびリタイアメントレジスタファイルを使用すること、将来のファイル、履歴バッファ、およびリタイアメントレジスタファイルを使用すること、レジスタマップおよびレジスタのプールを使用することなどで)実装され得る様々な方法を示すために、リタイアメント回路1417と重なっている。リタイアメント回路1417および物理レジスタファイル1415は、実行回路1411に結合される。
レジスタリネーミングはアウトオブオーダ実行の文脈で説明されているが、レジスタリネーミングはインオーダアーキテクチャで使用されてもよいことを理解されたい。図示されたプロセッサの実施形態はまた、別個の命令ならびにデータキャッシュユニットおよび共有L2キャッシュユニットを含んでもよいが、代替の実施形態は、例えば、レベル1(L1)内部キャッシュ、または複数レベルの内部キャッシュなどの、命令とデータの両方のための単一の内部キャッシュを有してもよい。いくつかの実施形態では、システムは、内部キャッシュと、コアおよび/またはプロセッサの外部にある外部キャッシュとの組み合わせを含んでもよい。あるいは、キャッシュのすべてがコアおよび/またはプロセッサの外部にあってもよい。
実行回路1411は、1つまたは複数の実行回路1427のセット、およびキャッシュ1413にアクセスするための1つまたは複数のメモリアクセス回路1425のセットを含む。実行回路1427は、本明細書に詳述されている行列(タイル)演算を実行する。
例として、例示的なレジスタリネーミング、アウトオブオーダ発行/実行コアアーキテクチャは、以下のようにパイプラインを実装することができる。1)命令フェッチ回路がフェッチおよび長さデコード段階を実行する。2)分岐およびデコード回路1403がデコード段階を実行する。3)アロケート/リネーム1407回路が割り当て段階およびリネーミング段階を実行する。4)スケジューラ回路1409がスケジュール段階を実行する。5)(スケジューラ回路1409およびリアロケート/リネーム1407回路に結合されるか、またはそれらに含まれる)物理レジスタファイルならびにメモリユニットがレジスタ読み取り/メモリ読み取り段階を実行し、実行回路1411が実行段階を実行する。6)メモリユニットおよび物理レジスタファイルユニットがライトバック/メモリ書き込み段階を実行する。7)様々なユニットが例外処理段階に関与してもよい。8)リタイアメントユニットおよび物理レジスタファイルユニットがコミット段階を実行する。
コアは、本明細書で説明された命令を含む、1つまたは複数の命令セット(例えば、(より新しいバージョンで追加されたいくつかの拡張を有する)x86命令セット、カリフォルニア州サニーベールのMIPS TechnologiesのMIPS命令セット、カリフォルニア州サニーベールのARM Holdingsの(NEONなどのオプションの追加の拡張を有する)ARM命令セット)をサポートすることができる。一実施形態では、コア1490は、パックドデータ命令セット拡張(例えば、AVX1、AVX2)をサポートするロジックを含み、それにより、多くのマルチメディアアプリケーションによって使用される演算がパックドデータを使用して実行されることが可能になる。
コアは、マルチスレッディング(演算またはスレッドの2つ以上の並列セットの実行)をサポートすることができ、タイムスライスマルチスレッディング、(物理コアが同時にマルチスレッディングしているスレッドのそれぞれに単一の物理コアが論理コアを提供する)同時マルチスレッディング、またはそれらの組み合わせ(例えば、インテル(登録商標)ハイパースレッディングテクノロジなどにおけるタイムスライスフェッチおよびデコードならびにその後の同時マルチスレッディング)を含む様々な方法でサポートすることができることを理解されたい。
[レイアウト]
この説明全体を通して、データは行優先データレイアウトを使用して表現される。列優先ユーザは、自分の方向性に従って用語を解釈するべきである。図15は、行優先フォーマットおよび列優先フォーマットで表現された行列の一例を示す。図示されたように、行列Aは2×3行列である。この行列が行優先フォーマットで記憶されると、行のデータ要素は連続している。この行列が列優先フォーマットで記憶されると、列のデータ要素は連続している。A×B=(BA)であることは行列のよく知られた性質であり、上付き文字Tは変換を意味する。列優先データを行優先データとして読み取ると、行列は変換行列のように見える。
いくつかの実施形態では、行優先セマンティクスはハードウェアで利用され、列優先データはオペランド順序を行列の変換である結果と交換することであるが、その後のメモリからの列優先読み取りの場合、それは正しい非変換行列である。
例えば、乗算されるべき列優先行列が2つある場合、
Figure 2021108102
入力行列は、以下のように線形メモリ(列優先)に記憶されるはずである。
Figure 2021108102
それらの行列を2×3および3×2の寸法を有する行優先として読み取ると、それらは以下のように見えるはずである。
Figure 2021108102
次数と行列の乗算を交換する。
Figure 2021108102
変換行列が出力された後、行優先順に記憶することできる。
Figure 2021108102
その後の列優先計算で使用され、それは正しい非変換行列である。
Figure 2021108102
[例示的な使用]
図16は、行列(タイル)の使用の一例を示す。この例では、行列C1601は2つのタイルを含み、行列A1603は1つのタイルを含み、行列B1605は2つのタイルを含む。この図は、行列乗算を計算するアルゴリズムの内部ループの一例を示している。この例では、行列C1601からの2つの結果タイルtmm0およびtmm1は、中間結果を累積するために使用される。行列A1603からの1つのタイル(tmm2)は、行列B1605からの2つのタイルと乗算されるので、2回再利用される。矢印によって示された方向から新しいA行列(タイル)および2つの新しいB行列(タイル)をロードするポインタ。図示されていない外側のループは、Cタイル用のポインタを調整する。
図示された例示的なコードは、タイル構成命令の使用を含み、タイル使用を構成し、タイルをロードし、タイルを処理するループを行い、メモリにタイルを記憶し、タイル使用を解放するために実行される。
図17は、行列(タイル)の使用の一実施形態を示す。1701において、タイル使用が構成される。例えば、タイル当たりの行数および列数の設定を含むタイル使用を構成するために、TILECONFIG命令が実行される。通常、1703において、少なくとも1つの行列(タイル)がメモリからロードされる。1705において、行列(タイル)を使用して少なくとも1つの行列(タイル)演算が実行される。1707において、少なくとも1つの行列(タイル)がメモリに記憶され、1709において、コンテキストスイッチを行うことができる。
[例示的な構成]
[タイル構成ハードウェアサポート]
上述されたように、タイル使用は、通常、使用する前に構成される必要がある。例えば、すべての行および列を完全に使用することは必要でない場合がある。いくつかの実施形態では、これらの行および列を構成しないことが電力を節約するだけでなく、その構成は演算がエラーを発生させるか否かを判定するために使用されてもよい。例えば、形式(N×M)×(L×N)の行列乗算は、通常、MとLが同じでない場合機能しない。
タイルを使用して行列を使用する前に、いくつかの実施形態では、タイルサポートが構成されるべきである。例えば、タイル当たりの行数および列数、使用されるべきタイルなどが構成される。TILECONFIG命令は、(プロセッサコアの一部として、または外部デバイスとして)行列アクセラレータを使用するようにコンピュータを構成するサポートを提供するので、コンピュータ自体に対する改良である。具体的には、TILECONFIG命令を実行すると、構成がメモリから取得され、行列アクセラレータ内の行列(タイル)設定に適用される。
[タイル使用構成]
図18は、一実施形態による、タイルの使用の構成用のサポートを示す。メモリ1801はサポートされるべき行列(タイル)のタイル記述1803を含む。
プロセッサ/コア1805の命令実行リソース1811は、タイル記述1803の態様をタイル構成1817に記憶する。タイル構成1817は、パレット用のどのタイルが構成されているか(各タイル内の行および列の数)、ならびに行列サポートが使用中であることのマーキングを詳述するために、パレットテーブル1813を含む。具体的には、命令実行リソース1811は、タイル構成1817によって指定されたタイルを使用するように構成される。命令実行リソース1811はまた、タイル使用を示すために、機械固有レジスタまたは構成レジスタを含んでもよい。使用中の値および開始値などのさらなる値も設定される。タイル構成1817は、レジスタ1819を利用して、タイル使用および構成情報を記憶する。
図19は、サポートされるべき行列(タイル)の記述の一実施形態を示す。これは、STTILECFG命令の実行時に記憶されるべき記述である。この例では、各フィールドは1バイトである。バイト[0]には、パレットID1901が記憶される。パレットIDは、タイル内のバイト数、および構成によって定義されるこのIDに関連付けられるタイルの行当たりのバイト数を記憶するパレットテーブル1813を、パレットIDごとに索引付けするために使用される。
バイト1は「startRow」レジスタ1903に記憶されるべき値を記憶し、バイト2はstartP1905であるレジスタに記憶されるべき値を記憶する。これらのイベント後の命令再開をサポートするために、これらの命令はこれらのレジスタに情報を記憶する。上記で詳述されたイベントなどのブレークイベント後の命令の再開をサポートするために、命令はこれらのレジスタに情報を記憶する。startRow値は、再開に使用されるべき行を示す。startP値は、ペアが使用されるときのストア演算のための行内の位置を示し、いくつかの実施形態では、(ペアの下位タイル内の)行の下半分または(ペアの上位タイル内の)行の上半分を示す。通常、行(列)の位置は不要である。
TILECONFIGおよびSTTILECFGを除いて、行列(タイル)命令の実行に成功すると、startRowとstartPの両方がゼロに設定される。
中断された行列(タイル)命令が再開されないときはいつでも、startRowおよびstartPの値をゼロにすることはソフトウェアの役割である。例えば、マスクされていない浮動小数点例外ハンドラは、ソフトウェア内の演算を終了し、プログラムカウンタ値を別の命令、通常は次の命令に変更することを決定する場合がある。この場合、ソフトウェア例外ハンドラは、プログラムを再開する前に、オペレーティングシステムによってそれに提示された例外内のstartRow値およびstartP値をゼロにしなければならない。オペレーティングシステムは、その後、復元命令を使用してそれらの値を再ロードする。
バイト3は、タイルのペア(タイル当たり1b)のインジケーション1907を記憶する。
バイト16〜17は、タイル0の行数1913および列数1915を記憶し、バイト18〜19は、タイル1の行数および列数を記憶する、などである。換言すると、各2バイトグループは、タイルの行数および列数を指定する。2バイトのグループがタイルパラメータを指定するために使用されない場合、それらは値ゼロをもつはずである。実装制限またはパレット制限よりも多くのタイルに対してタイルパラメータを指定すると、障害をもたらす。未構成のタイルは、0行0列の初期状態に設定される。
最後に、メモリ内の構成は、通常、いくつかの連続するバイトのオールゼロなどの、末尾の描写で終わる。
[例示的なタイルおよびタイル構成ストレージ]
図20A〜図20Dはレジスタ1819の例を示す。図20Aは複数のレジスタ1819を示す。図示されたように、各タイル(TMM0 2001…TMMN 2003)は別個のレジスタを有し、各レジスタはその特定のタイルの行および列のサイズを記憶する。StartP2011およびStartRow2013は別個のレジスタに記憶される。タイルが使用のために構成されていることを示すために、1つまたは複数のステータスレジスタ2015が設定される(例えば、TILES_CONFIGURED=1)。
図20Bは複数のレジスタ1819を示す。図示されたように、各タイルはその行および列のための別個のレジスタを有する。例えば、TMM0行構成2021、TMM0列構成2023、StartP2011、およびStartRow2013は別個のレジスタに記憶される。タイルが使用のために構成されていることを示すために、1つまたは複数のステータスレジスタ2015が設定される(例えば、TILES_CONFIGURED=1)。
図20Cは単一のレジスタ1819を示す。図示されたように、このレジスタは、パックドデータレジスタとして単一のレジスタに記憶されたタイル構成(タイル当たりの行および列)2031、StartP2011、およびStartRow2013を記憶する。タイルが使用のために構成されていることを示すために、1つまたは複数のステータスレジスタ2015が設定される(例えば、TILES_CONFIGURED=1)。
図20Dは複数のレジスタ1819を示す。図示されたように、単一のレジスタはタイル構成(タイル当たりの行および列)2031を記憶する。StartPおよびStartRowは別個のレジスタ2011および2013に記憶される。タイルが使用のために構成されていることを示すために、1つまたは複数のステータスレジスタ2015が設定される(例えば、TILES_CONFIGURED=1)。
開始レジスタが別個に示される場合、これらを結合して単一のレジスタにすることなどの、他の組み合わせも想定される。
[シストリックアレイのためのスケジューリング]
上記で言及したように、汎用行列乗算(別名、GEMM)のためのハードウェアは、深層学習などの特定のアプリケーションの計算ピーク(およびエネルギー効率)を改善するための良い選択肢である。ディープニューラルネットワーク(DNN)に基づくアプリケーションには膨大な計算が要求されるので、多数の(例えば、数百の)処理要素、例えば融合乗累算(FMA)回路を使用するハードウェア(例えば、アクセラレータ)が使用されることになり得る。しかしながら、(例えば、DNN)アクセラレータは、密行列乗算の非常に規則的なデータフローパターンに最適化され得る。特定の実施形態では、アクセラレータは、性能および面積/電力効率を最大化するように、シストリックアレイ実装を使用する。シストリックアレイは、非常に規則的なデータフローに最適化された密な2次元アレイを含んでもよい。
特定のハードウェアでは、命令のデコードおよび実行により、構成可能なシストリックアレイハードウェア(例えば、行列演算アクセラレータ回路)にC=A×B+Cを計算させる。ここで、A、B、およびCはそれぞれ2次元行列である。Cの各要素について、ハードウェアは、入力行列Aの一行と行列Bの一列とのドット積を計算する。
特定の実施形態では、行列演算アクセラレータ回路は、入力として、行列A(M×K型であり、ここで、MおよびKは、整数である)と、行列B(K×N型であり、ここで、MおよびKは整数である)と、行列C(M×N型であり、ここで、MおよびNは整数である)を取り、次に、各要素に演算(例えば、融合乗累算)を実行して、行列に記憶される(例えば、MおよびNが整数である、M×N型の行列Cに戻される)結果を生成する。一実施形態では、M、K、およびNは、16以下である。特定の実施形態では、行列演算アクセラレータ回路は、(例えば浮動小数点数に対して)以下の演算を実行する。
Figure 2021108102
図21は、本開示の実施形態による行列(タイル)演算アクセラレータ2107を利用するシステムの一実施形態を示す。特定の実施形態では、ホストプロセッサ/処理システム2101(例えば、ハードウェアプロセッサコア、例えば、図33Bにおけるプロセッサコア3390)は、コマンド(例えば、算術もしくは行列操作演算などの行列操作演算、ロード演算、および/またはストア演算)を行列演算アクセラレータ2107に伝達する。しかしながら、これは説明の目的でのみこのように示されている。本明細書で詳述されるように、アクセラレータ2107は処理コアの一部であってもよい。タイル操作演算子命令であるコマンドは、レジスタ−レジスタ(「reg−reg」)フォーマットまたはレジスタ−メモリ(「reg−mem」)フォーマットとしてタイルを参照してよい。特定の実施形態では、TILESTORE、TILELOAD、TILECONFIGなどの他のコマンドは、タイルに対してデータ演算を実行しない。コマンドは、アクセラレータ2107が処理するためのデコードされた命令(例えば、マイクロ演算)またはマクロ命令であってもよい。一実施形態では、ハードウェアプロセッサコアは、行列演算命令がハードウェアプロセッサコアによって実行されたことに応答して、マイクロopを行列(タイル)演算アクセラレータ2107に送信する。
一実施形態では、予約ステーション(RS)回路2111が、行列演算アクセラレータ2107にコマンド(例えば、マイクロop)を送信する。特定の実施形態では、行列演算アクセラレータ2107は、タイル行列ユニット(TMU)である。特定の実施形態では、行列演算アクセラレータ2107は、行列アクセラレータコントローラ回路2113を備える。一実施形態では、行列アクセラレータコントローラ(例えば、回路2113)は、行列演算アクセラレータ2107の内外への、および/またはその内部でのデータの操作およびフローを制御する。行列演算アクセラレータ2107(例えば、行列アクセラレータコントローラ回路2113)は、例えば、ホストプロセッサ/処理システム2101から受信した要求(例えば、コマンド)の、行列演算アクセラレータ2107の1つまたは複数のコンポーネントへのディスパッチを制御するために、ディスパッチ回路2115を備えてもよい。ディスパッチ回路の一例が、図23を参照しながら下記で説明される。
図示の行列演算アクセラレータ2107は、データバッファ(例えば、レジスタ)2105を備える。特定の実施形態では、データバッファ(例えば、レジスタ)2105は、例えば、第1の2次元行列(例えば、ストレージ2105において行列Aを記憶するT0としてマークされたタイル)、第2の2次元行列(例えば、ストレージ2105において行列Bを記憶するT1としてマークされたタイル)、第3の2次元行列(例えば、ストレージ2105において行列Cを記憶するT3としてマークされたタイル)などを表す第1の複数のレジスタ(例えば、タイル)に各行列を記憶するように構成可能である。システム(例えば、ホストプロセッサ/処理システム2101)は、ホストプロセッサ/処理システム2101(例えば、アウトオブオーダ(OoO)コア)と行列演算アクセラレータ2107との間で(例えば、コマンドとは対照的に)データを送受信するために、(例えば、コヒーレント)メモリインタフェース2103(例えば、データキャッシュユニット)を備えてもよい。
特定の実施形態では、行列演算アクセラレータ2107は、処理要素2109(例えば、融合乗累算(FMA)回路)のグリッドを用いて、演算を実行する。一実施形態では、ディスパッチ回路2115は、データバッファ2105(例えば、タイルを形成するレジスタ)から処理要素2109のグリッド(例えば、FMA回路のグリッド)へのデータ(例えば、タイルからの1つまたは複数の値)の送信を制御する。特定の実施形態では、処理要素2109のグリッドは、処理要素の2次元グリッド、例えば、図22における処理要素回路2200の2次元グリッドである。
図22は、処理要素回路2206−1〜2206−4の2次元グリッドを含む行列演算アクセラレータ回路2200の一実施形態を示す。特定の実施形態では、データストレージ2205(例えば、レジスタファイル)は、例えば、第1の入力2次元行列(A)、第2の入力2次元行列(B)、および第3の入力2次元行列(C)を表すレジスタ(例えば、タイル)の各セットを有する複数のレジスタと、結果のストレージとを備える。一実施形態では、出力される2次元行列の結果は、第3の入力2次元行列(C)を形成するレジスタに格納され、例えば、入力2次元行列(C)の値が、行列演算アクセラレータ回路2200によって利用された後に上書きされる。図示の行列演算アクセラレータ回路2200は、実行される演算に従って(例えば、行列Aおよび行列Bからの)入力値を処理要素にルーティングおよび記憶するために、複数のルーティング/バッファ回路2204−1〜2204−4を備える。
本明細書内の図は、すべてのデータ通信用カップリング(例えば、接続部)を示していない場合があることに留意されたい。これは図内の特定の細部を不明瞭にしないためであることが、当業者には理解される。なお、図における両矢印は、二方向の通信を必要としなくてもよく、例えば、両矢印は、(例えば、当該コンポーネントもしくはデバイスへの、または当該コンポーネントもしくはデバイスからの)一方向の通信を示してよい。通信経路のいずれかまたはすべての組み合わせが、本明細書の特定の実施形態において用いられてよい。単一のラインは、その中に複数の経路、例えば、複数のチャネルを含んでよい。例えば、ライン2210は、複数の経路(例えば、「X」個(Xは任意の正の整数))を含んでよく、例えば、行列Aからの値に1つの経路、行列Bからの値に1つの経路となる。
特定の実施形態では、演算の実行の要求(例えば、その演算を生じさせる命令のデコードおよび実行による)があると、行列演算アクセラレータ回路2200は、行列Aおよび行列Bからの値をそれぞれのルーティング回路に送信する。例えば、上記演算は、行列Aに行列Bを乗算し、次に、各結果を行列Cからの対応する値に加算することであってよい。一実施形態では、第1のルーティング回路2204−1は、行列A[行][列]から第1の値A[0][0](行インデックス0および列インデックス0からの値)を受け取って、その値を、その行における各処理要素2206−1に向けて処理要素2206−1のそれぞれの第1の入力にブロードキャストし、行列Bの第1の行からの値のセットを受け取って、それらの値を、処理要素2206−1のそれぞれの各第2の入力に送信する(例えば、それにより、処理要素2212がB[0][0]からの値を受け取り、処理要素2214がB[0][1]からの値を受け取る、など)。一実施形態では、処理要素2212は、出力2216において、A[0][0]×B[0][0]の乗算の結果を提供し、処理要素2214は、出力2218において、A[0][0]×B[0][1]の乗算の結果を提供する。出力(例えば、出力2216および2218)は、ルーティング/バッファ回路2(2204−2)に送信される。
一実施形態では、第2のルーティング/バッファ回路2204−2は、行列A[行][列]からの第2の値A[0][1](行インデックス0および列インデックス1からの値)を受け取って、その値を、その行における各処理要素2206−2に向けて処理要素2206−2のそれぞれの第1の入力にブロードキャストし、行列Bの第2行からの値のセットを受け取って、それらの値を、処理要素2206−2のそれぞれの各第2の入力(例えば、これにより、処理要素2222がB[1][0]からの値を受け取り、処理要素2224がB[1][1]からの値を受け取る、など)に送信し、上行の処理要素2206−1の出力からの各出力を受け取る。一実施形態では、処理要素2222は、出力2226において、A[0][1]×B[1][0]の乗算の結果を出力2216(A[0][0]×B[0][0])に加算して提供し、処理要素2224は、出力2228において、A[0][1]×B[1][1]の乗算の結果を出力2218(A[0][0]×B[0][1])に加算して提供する。特定の実施形態では、この融合乗累算演算は、処理要素2206−3〜2206−4の各行によって継続されて、処理要素2206−4からの出力2230および出力2232を生成する。4というのは、処理要素の行(例えば、ならびに、行列A、B、およびCのそれぞれの行および列)の数の一例であり、任意の複数の行が存在してよいことに留意されたい。行列演算アクセラレータ回路2200のための処理要素の行の終端に達すると、バイアス加算回路2208は、入力2234からの行列Cからの各要素(例えば、並列入力ポートのセット)(例えば、行列Cの第1行からの各要素)を加算し、出力2236(例えば、並列出力ポートのセット)を介して、その結果を行列Cの各要素に(例えば、行列Cの第1行の各要素位置に)格納する。例えば、行列Cの第1行からの第1の要素が出力2230からの結果に加算され、その結果が行列Cの第1行の第1の要素位置に戻して格納され、行列Cの第1行からの第2の要素が出力2232からの結果に加算され、その結果が行列Cの第1行の第2の要素位置に戻して格納される。これは、行列Aの各行について繰り返され、行列A×行列Bの全乗算を生じさせることができる(例えば、かつ、行列Cからのバイアスを各結果に加算する)。
従って、回路の特定の実施形態は、例えば、いくつかの入力および出力バッファならびにローカル制御ロジック回路と共に、処理要素(PE)(例えば、FMAユニット)の2次元(2D)アレイを使用する。一実施形態では、各PEは、レジスタファイルなどのデータストアからの入力のうちのいくつかおよび他のPEからの他の入力を取得し、最終行のPEは、その出力をデータストアに送信し返す。従って、これらの実施形態では、PEはパイプラインを形成する。ユーザは、一般に、データ要素(例えば、PEよりも多くのデータ要素)の大きなセットに対して一連の演算を実行することを意図し得る。そのため、要素は、アレイの最上部に入力されてパイプラインを開始し、パイプラインを通してデータを下方に少しずつ移動させてよい(適切な場合には、パイプラインの様々な段階において追加の入力を提供する)。
一実施形態では、処理要素の各例は、乗算器回路(例えば、第1の入力a、第2の入力bを取り、結果出力を生成する)と、加算器回路(例えば、第1の入力としての乗算器回路からの結果出力と第3の入力cとを加算し、結果を生成する)とを備える融合乗累算(FMA)回路である。処理要素回路(例えば、FMA回路)の2次元グリッドへの演算および/またはデータのディスパッチの制御は、ディスパッチ回路によって実行してよい。
図23は、本開示の実施形態による、行列演算アクセラレータ回路のディスパッチ回路2300を示す。一実施形態では、ディスパッチ回路2300は、図21におけるディスパッチ回路2115の一部である。特定の実施形態では、ディスパッチ回路2300は、マルチプレクサ2302を用いて複数のペンディング中の演算(例えば、マイクロ演算(マイクロop))のうちの1つを選択し、選択された演算を出力2304において演算回路(例えば、図21におけるFMAグリッド2109または図22におけるPE回路)に送信する。図23において、ペンディング中の演算は、入力2306においてキュー2308に受け取られる。入力2306は、予約ステーション(例えば、図21におけるRS回路2111)からのものとしてよい。
一実施形態では、ディスパッチ回路は、アウトオブ(プログラム)オーダ予約ステーション回路から演算要求(例えば、各命令ごと、または単一の命令のためのマイクロ演算のセットごとに1つ)を受け取り、例えば、2つの連続する演算(例えば、命令)を行列演算アクセラレータ回路(例えば、そのパイプライン)において依存関係に制限されることなく相次いで実行することができるという前提(例えば、ここで、連続する行列演算間の依存関係がディスパッチキューによって処理される一方で、アウトオブオーダ回路が行列演算とAタイルおよびBタイルとの依存関係に対処する)のもと、演算を順に実行する。一実施形態では、RS回路は、依存関係が解消された後、次の演算(例えば、マイクロ演算(μop))を行列演算アクセラレータ回路にディスパッチする。図示のようなキュー2308は、8つのスロットを有しているが、単一または任意の複数のスロットを用いてもよいことを理解されたい。
特定の実施形態では、キュー2308内のエントリは、データバッファ(例えば、データバッファ2105またはデータバッファ2205)における利用された入力タイルおよび/または出力タイルおよび/またはグリッド(例えば、図21におけるFMAグリッド2109)によって実行される演算を特定するための情報を格納する。一実施形態では、キュー2308内の各エントリは、有効なビット(v)の値(またはその値のインジケータ)、演算(例えば、μop)オペコード、タイル寸法(例えば、M、K、N)、コントロール(例えば、ゼロコントロール)、タイルID値(例えば、データバッファ内でのAタイル、Bタイル、およびCタイルの各ロケーションの値)を格納する。メインヘッドは、行列演算アクセラレータ回路にディスパッチされた現在の演算の始点(例えば、単一の命令の複数のマイクロ演算のうちの最初のマイクロ演算)に対するポインタであってよい。メインテールは、行列演算アクセラレータ回路にディスパッチされた現在の演算の終点(例えば、単一の命令の複数のマイクロ演算のうちの最後のマイクロ演算)に対するポインタであってよい。有効なビット(v)は、例えば、その演算のために要求された操作が行列演算アクセラレータ回路によって完了したときに、演算(例えば、マイクロ演算)を完了したものとしてマークするのに用いられてよい。
特定の実施形態では、スケジューリング回路2310は、演算(例えば、複数のマイクロ演算のヘッド)を選択し、演算回路(例えば、図21におけるFMAグリッド2109または図22におけるPE回路)に送信して、例えば、その選択された演算のための操作を開始するために含まれる。
図24は、本開示の実施形態による、行列演算アクセラレータ回路のディスパッチ回路のスケジューリング回路2400を示す。上記のように、演算(例えば、マイクロ演算)は、以下であってよい。
Figure 2021108102
スケジューリング回路は、M(例えば、第1のアレイ(例えば、第1行(例えば、図22における第1行のPE2212、2214…2206−1)または第1の列)のバッファ(例えば、図21におけるバッファ2105または図22におけるバッファ2205)が占有される(例えば、かつ、バスがAタイルを行列演算アクセラレータ回路に転送するのに用いられる)サイクルの数)、K(例えば、Bタイルを行列演算アクセラレータ回路にロードするリソース(例えば、バス)が占有されるサイクルの数)の最大値、およびディスパッチ間の予め選択された最小(例えば、4サイクル)のギャップだけ待機してよい。図24では、出力2402は、次の演算(例えば、マイクロ演算)を行列演算アクセラレータ回路にディスパッチさせるように、(例えば、ゼロではなく1の値として)アサートされる。特定の実施形態では、スケジューリング回路2400は、Bタイルを行列演算アクセラレータ回路にロードするリソース(例えば、バス)が占有されるサイクル数をカウントダウンする間は、Kに1の値をアサートし、次に、完了したら(例えば、カウンタKに予め定められた値になったら)ゼロをアサートするKカウンタ2404と、Aタイルを行列演算アクセラレータ回路にロードするリソース(例えば、バス)が占有されるサイクル数をカウントダウンする間は、Mに1の値をアサートし、次に、完了したら(例えば、カウンタMに予め定められた値になったら)ゼロをアサートするMカウンタ2406と、出力2402に対する演算(例えば、マイクロ演算)のディスパッチ間(例えば、ディスパッチは出力2402に1がアサートされることである)の最小サイクルをカウントダウンし、サイクルの最小数をカウントダウンする間は、1の値をアサートし、次に、完了したらゼロをアサートする最小サイクル(例えば、一例として4サイクルであるが、任意の単一または複数のサイクルを選択してよい)カウンタ2408とを備える。一実施形態では、OR論理ゲート2412は、その入力のいずれかが1である場合、1をアサートし、NOT論理ゲート2414は、OR論理ゲート2412の出力を反転させる。一例として、各カウンタは、トリガ閾値(例えば、ゼロ)までカウントダウンすると、OR論理ゲート2412へのそれぞれのラインに対してゼロをアサートし(例えば、2402にディスパッチが行われるまで)、従って、NOT論理ゲート2414は、カウンタ2404、2406および2408のすべてがゼロをアサートする場合、1を出力する。各ディスパッチの後、カウンタは、元(例えば、ゼロ以外)の値にリセットされてよい。
任意選択で、オーバライドディスパッチ制御部2410が、例えば、演算のディスパッチをオーバライドしないモードにおいてゼロをアサートするように、および、演算のディスパッチをオーバライドするモードにおいて1をアサートする(従って、出力2402からゼロを出力させる)ように用いられてもよい。
一実施形態では、行列演算アクセラレータ回路(例えば、演算回路(例えば、図21におけるFMAグリッド2109または図22におけるPE回路))によって実行される次の演算(例えば、マイクロ演算)を選択するためのトリガは、MAX{4,M,K}によって与えられ、ここで、MはA行列の行数であり、KはA行列の列(またはB行列の行)数であり、4は、(例えば、マイクロ演算の)実行のサイクル数の下限である。特定の実施形態では、スケジューリング回路は、(例えば、Bタイルを演算回路(例えば、図21におけるFMAグリッド2109または図22におけるPE回路)にロードさせるためのバスがただ1つである場合)少なくともKサイクルだけ待機する(例えば、サイクルごとにただ1つのB行のフェッチを可能にする)ことに留意されたい。これらの実施形態のうちの特定の実施形態では、Kは、B行列の行数である累算の数を設定し、従って、B−バスは、次のKサイクルの間占有され、この時間の間、新たなマイクロ演算をディスパッチすることはできない。これらの実施形態のうちの特定の実施形態では、Mは、A行列の行がA−バスを使用するサイクル数を設定し、例えば、そのため、MカウンタおよびKカウンタの両方がゼロにされた後にのみ、次のマイクロ演算をディスパッチすることができる。また、連続するディスパッチ間で、最小数(例えば、4つ)のサイクルが望ましい場合があり、例えば、ここで、C−行列がサイクル1にて読み取られ、サイクル2にて乗算結果(例えばA×B)と累算され、サイクル3にてデータバッファに再び書き込まれ、サイクル4にて再び読み取られ得る前にもう1回のサイクルがある。これは、上記の段階が単一のサイクルにあることを仮定している。他の実施形態では、段階は、1つより多くのサイクルをそれぞれ取ってもよい。
特定の実施形態では、スケジューリング回路2400は、演算(例えば、マイクロ演算)が選択され、および/または実行のために演算回路(例えば、図21におけるFMAグリッド2109または図22におけるPE回路)にディスパッチされた場合、対応するキュー(例えば図23におけるキュー2308)における有効なビットをクリアする、および/または、(例えば、次の演算を選択決定に利用可能にするために)対応するキュー(例えば、図23におけるキュー2308)におけるそのヘッドポインタを更新する。
図25は、本開示の実施形態による、ベースラインスケジューリングモードから入力行列を再利用するスケジューリングモードに切換可能である、行列演算アクセラレータ回路のディスパッチ回路のスケジューリング回路2500を示す。これらの実施形態における入力行列は、入力「B」行列(例えば、タイル)を参照するが、これは例示に過ぎず、他の行列(例えば、タイル)が同様にスケジューリングされてよい。
スケジューリング回路2500は、行列演算アクセラレータ回路において実行されることになる次の演算(例えば、マイクロ演算)、具体的には、選択され、および/または実行のために演算回路(例えば、図21におけるFMAグリッド2109または図22におけるPE回路)にディスパッチされる次の演算を特定する値を受け取る入力2502を備える。一実施形態では、入力2502は、図23からの出力2304を受信する。
特定の実施形態では、入力2502は、スケジューリング回路2500によってディスパッチされることになる次の演算(例えば、および対応する入出力タイル)を識別する。これらの実施形態の特定の実施形態では、入力2502は、タイル(例えば、図21におけるデータバッファ(例えば、レジスタ)2105におけるタイルを形成するレジスタのセット)を表す識別(ID)値を含む。スケジューリング回路2500は、行列演算アクセラレータ回路によって処理されている現在のタイルを識別するストレージ2504を備え、具体的には、ストレージ2504は、演算回路(例えば、図21におけるFMAグリッド2109または図22におけるバッファ回路)にそのデータがロードされた(またはそのデータがそこにロードされている/そこからロードされている)現在のタイルを識別してよい。一実施形態では、スケジューリング回路2500は、ストレージ2504内の識別値が有効な値であるかまたは無効な値である(例えば、ハードウェアが別のタイルを、従って別の識別値をロードしている)かを示すために、有効なタイル(例えば、タイルB)のストレージ2506を含む。
スケジューリング回路2500は、(i)演算回路に(例えば、図21におけるFMAグリッド2109または図22におけるバッファ回路に)ロードされている現在のタイル(例えば、タイルB)と、(ii)演算回路(例えば、図21におけるFMAグリッド2109または図22におけるバッファ回路)にロードされることになる次のタイル(例えば、次のタイルB)とを比較するために、比較回路2508を含む。一実施形態では、この比較は、各タイルのスケジューリング回路によって提供される識別値、例えば、行列演算アクセラレータのデータバッファ(例えば、図21におけるデータバッファ2105)へのタイルのエントリに際して提供される識別値を比較することによって行われ、例えば、ここで、識別値は、タイルの値が演算回路(例えば、図21におけるFMAグリッド2109または図22におけるバッファ回路)に入力される前に、各タイルに与えられる。
特定の実施形態では、比較回路2508は、(i)次の演算のための入力2502からの入力タイル(例えば、図21におけるデータバッファ2105内のそのID値)(例えば、「新たなタイルB」)と、(ii)演算回路に現在ロードされている(例えば、図21におけるFMAグリッド2109または図22におけるバッファ回路に現在ロードされている)現在のタイル(例えば、タイルB)、例えば、図21におけるFMAグリッド2109に現在ロードされているタイルのための図21におけるデータバッファ2105のID値とを比較する。一実施形態では、比較回路2508は、使用中の現在のタイルのID値と、演算回路において用いられることになる次のタイルのID値とを比較し、等しければ、それらが等しいことを示す値(例えば、1)をアサートする。一実施形態では、比較回路2508は、ストレージ2504からの使用中の現在のタイルのID値と、演算回路において用いられることになる次のタイルのID値とを比較し、等しければ、ストレージ2506もまたストレージ2504内の識別値が有効な値であると示す場合はそれらが等しいことを示す値(例えば、1)をアサートし、例えば、そうでなければ、異なる値(例えば、ゼロ)をアサートする。
特定の実施形態では、(i)演算回路に(例えば、図21におけるFMAグリッド2109または図22におけるバッファ回路に)ロードされている現在のタイル(例えば、タイルB)が、(ii)演算回路(例えば、図21におけるFMAグリッド2109または図22におけるバッファ回路)にロードされることになる次のタイル(例えば、次のタイルB)と等しい場合、同じタイル(例えば、同じタイルB)値(例えば、1)がアサートされて、例えば、演算回路とは別個のデータバッファ(例えば、図21におけるデータバッファ2105)から再ロードすることなく、入力行列を再利用する、例えば、演算回路内に(例えば、図21におけるFMAグリッド2109または図22におけるバッファ回路に)既に記憶されているタイルBを再利用するスケジューリングモードに(例えば、出力2510を介して)切り替えさせる。
特定の実施形態では、比較回路2508は、(i)演算回路に(例えば、図21におけるFMAグリッド2109または図22におけるバッファ回路)にロードされている現在のタイル(例えば、タイルBが、(ii)演算回路にロードされることになる次のタイル(例えば、次のタイルB)と等しい場合、出力2510において第1の値(例えば、1)を出力する。出力2510は、次に、NOT論理ゲート2512に入力され、その出力およびKカウンタ2516からAND論理ゲート2514(例えば、すべての入力が1である場合にのみ1の出力を有する)への出力は、OR論理ゲート2522に入力されてよい。
特定の実施形態では、スケジューリング回路2500は、Bタイルを行列演算アクセラレータ回路にロードするリソース(例えば、バス)が占有されるサイクル数をカウントダウンする間は、Kに1の値をアサートし、次に、完了したら(例えば、カウンタKに予め定められた値になったら)ゼロをアサートするKカウンタ2516と、Aタイルを行列演算アクセラレータ回路にロードするリソース(例えば、バス)が占有されるサイクル数をカウントダウンする間は、Mに1の値をアサートし、次に、完了したら(例えば、カウンタMに予め定められた値になったら)ゼロをアサートするMカウンタ2518と、出力2526に対する演算(例えば、マイクロ演算)のディスパッチ間(例えば、ディスパッチは出力2526に1がアサートされることである)の最小サイクルをカウントダウンし、サイクルの最小数をカウントダウンする間は、1の値をアサートし、次に、完了したらゼロをアサートする最小サイクル(例えば、一例として4サイクルであるが、任意の単一または複数のサイクルを選択してよい)カウンタ2520とを備える。一実施形態では、OR論理ゲート2522は、その入力のいずれかが1である場合、1をアサートし、NOT論理ゲート2524は、OR論理ゲート2522の出力を反転させる。一例として、各カウンタは、トリガ閾値(例えば、ゼロ)までカウントダウンする(従って、Kカウンタ2516が0をアサートする場合にAND論理ゲート2514が0を出力する)と、OR論理ゲート2522へのそれぞれのラインに対してゼロをアサートし(例えば、2526にディスパッチが行われるまで)、従って、NOT論理ゲート2524は、(i)カウンタ2516、2518および2520のすべてがゼロをアサートする場合、または(ii)出力2510が、ゼロをアサートするカウンタ2518および2520と共に一致するように1である場合、1を出力する。各ディスパッチの後、カウンタは、元(例えば、ゼロ以外)の値(例えば、AタイルおよびBタイルの寸法によって設定される)にリセットされてよい。一実施形態では、Kカウンタ2516、Mカウンタ2518、および最小サイクルカウンタ2520が、それぞれのラインにおいてOR論理ゲート2528にゼロをアサートする場合、OR論理ゲート2528は、NOT論理ゲート2530にゼロを出力し、NOT論理ゲート2530は、次に、リセットとして(別様にゼロではなく)1を出力して、有効なタイル(例えば、タイルB)のストレージ2506に、ストレージ2504における識別値が無効な値である(例えば、ハードウェアが演算回路に別のタイルをロードしている)ことを示させる。
任意選択で、オーバライドディスパッチ制御部2532が、例えば、演算のディスパッチをオーバライドしないモードにおいてゼロをアサートするように、および、演算のディスパッチをオーバライドするモードにおいて1をアサートする(従って、出力2526からゼロを出力させない)ように用いられてもよい。
上記のように、スケジューリング回路は、(i)例えば、演算回路とは別個のデータバッファ(例えば、図21におけるデータバッファ2105)から再ロードすることなく、入力行列を再利用する、例えば、演算回路内に(例えば、図21におけるFMAグリッド2109または図22におけるバッファ回路に)既に記憶されているタイルを再利用する第1の(例えば、スループット効率的な)スケジューリングモードと、(ii)演算回路内に既に記憶されているタイルを再利用しない第2のスケジューリングモードとの間で選択してよい。
一実施形態では、行列演算アクセラレータ回路(例えば、演算回路(例えば、図21におけるFMAグリッド2109または図22におけるPE回路))によって実行される次の演算(例えば、マイクロ演算)を選択するためのトリガは、(i)第1の(例えば、スループット効率的な)スケジューリングモードではMAX{4,M}によって与えられ、(ii)第2のスケジューリングモードではMAX{4,M,K}によって与えられ、ここで、MはA行列の行数であり、KはA行列の列数であり、4は、(例えば、マイクロ演算の)実行のサイクル数の下限である。特定の実施形態では、スケジューリング回路は、(例えば、Bタイルを演算回路(例えば、図21におけるFMAグリッド2109または図22におけるPE回路)にロードさせるためのバスがただ1つである場合)少なくともKサイクルだけ待機する(例えば、サイクルごとにただ1つのB行のフェッチを可能にする)ことに留意されたい。これらの実施形態のうちの特定の実施形態では、Kは、B行列の行数である累算の数を設定し、従って、B−バスは、次のKサイクルの間占有され、この時間の間、新たなマイクロ演算をディスパッチすることはできない。これらの実施形態のうちの特定の実施形態では、Mは、A行列の行がA−バスを使用するサイクル数を設定し、例えば、そのため、MカウンタおよびKカウンタの両方がゼロにされた後にのみ、次のマイクロ演算をディスパッチすることができる。また、連続するディスパッチ間で、最小数(例えば、4つ)のサイクルが望ましい場合があり、例えば、ここで、C−行列がサイクル1にて読み取られ、サイクル2にて乗算結果(例えばA×B)と累算され、サイクル3にてデータバッファに再び書き込まれ、サイクル4にて再び読み取られ得る前にもう1回のサイクルがある。これは、上記の段階が単一のサイクルにあることを仮定している。他の実施形態では、段階は、1つより多くのサイクルをそれぞれ取ってもよい。特定の実施形態では、タイルBは、以下におけるB行列である。
Figure 2021108102
例えば、スケジューリングは以下に従う。
Figure 2021108102
である場合、(Mまたは最小サイクル)の最大値だけ待機し、そうでなければ、(M、K、または最小サイクル)の最大値だけ待機する。
特定の実施形態では、M,K,Nに対する行列演算の実行において、B行列の転送は、K(例えば、最大16)サイクル(例えば、B−移行期間)の間に行われ、B−移行期間中、同じB行列を使用する次の演算(例えば、
Figure 2021108102
は、そのA−バッファがフリーである場合、実行を開始することができる。例えば、M,K,NのB−移行期間が終了すると、演算は通常に戻り、B行列が読み取られて、データバッファ(例えば、図21におけるデータバッファ2105)(例えば、タイル行列バッファ(TMB))から演算回路に(例えば、図21におけるFMAグリッド2109にまたは図22におけるバッファ回路に)(例えば、タイル行列乗算器(TMM))転送される。使用が連続する一実施形態では、回路(例えば、スケジューリング回路)(例えば、OоORS回路からの操作を伴う)は、例えば、バッファ(例えば、B−バッファ)のリクラメーションおよび再割り当てを防止するので、キャッシングが不要となる。従って、第1の(例えば、スループット効率的な)スケジューリングモードを利用するコンピュータは、演算をより早くディスパッチする能力を有することだけでなく、データバッファ(例えば、図21におけるデータバッファ2105)からのデータの読み取り(例えば、B−バスを介する)が排除される場合、電力消費を低減することによっても改善される。
特定の実施形態では、データバッファ(例えば、図21におけるデータバッファ2105)からのデータが、演算回路に(例えば、図21におけるFMAグリッド2109または図22におけるバッファ回路に)記憶されると、データバッファは、リクレームされ、例えば、使用から割り当て解除され、次に、異なる演算(例えば、異なる命令)のための行列(例えば、新たなタイルB)を記憶するように再割り当てされてよい。特定の実施形態では、入力行列を再利用する、例えば、演算回路内に(例えば、図21におけるFMAグリッド2109または図22におけるバッファ回路に)既に記憶されたタイルを再利用する、第1の(例えば、スループット効率的な)スケジューリングモードにおける場合、のリクラメーション。
一実施形態では、入力行列を再利用する第1の(例えば、スループット効率的な)スケジューリングモードの場合、スケジューリング回路は、前の演算(例えば、単一の命令)および次の演算(例えば、単一の命令)の実行間でのバッファ(例えば、演算回路における行列Bのバッファ)のリクラメーションを防止する、および/または、入力行列を再利用しない第2のスケジューリングモードの場合、スケジューリング回路は、前の演算(例えば、単一の命令)および次の演算(例えば、単一の命令)の実行間でのバッファ(例えば、演算回路における行列Bのバッファ)のリクラメーションを可能にする。一実施形態では、入力行列を再利用しない第2のスケジューリングモードの場合、スケジューリング回路は、前の演算(例えば、命令)および次の演算(例えば、命令)の実行間でのバッファ(例えば、演算回路における行列Bのバッファ)のリクラメーションを開始する。行列演算アクセラレータ回路(例えば、コントローラ回路)は、入力2次元行列を表す複数のレジスタのそれぞれに識別値を割り当ててよく、融合乗累算回路の2次元グリッドの第2のバッファが第2の入力2次元行列と同一である直前の入力2次元行列を記憶しているかどうかのチェックは、前の演算(例えば、命令)および次の演算(例えば、命令)からの対応する入力2次元行列のそれぞれの識別値を比較することであってよい。行列演算アクセラレータ回路(例えば、コントローラ回路)は、同一の値を有する行列に同一のID値を割り当ててよい。行列演算アクセラレータ回路(例えば、コントローラ回路)は、異なる値を有する行列に異なるID値を割り当ててよい。例えば、第1の演算(例えば、命令)は、入力2次元行列に割り当てられた第1の値を有してよく、第2の演算(例えば、命令)は、第1の演算におけるものと同一の入力2次元行列である場合は同一の値が割り当てられ、異なる入力2次元行列である場合は異なる値が割り当てられてよい。
特定の実施形態では、スケジューリング回路2500は、演算(例えば、マイクロ演算)が選択され、および/または実行のために演算回路(例えば、図21におけるFMAグリッド2109または図22におけるPE回路)にディスパッチされた場合、対応するキュー(例えば、図23におけるキュー2308)における有効なビットをクリアする、および/または、(例えば、次の演算を選択決定に利用可能にするために)対応するキュー(例えば、図23におけるキュー2308)におけるそのヘッドポインタを更新する。一実施形態では、B−バッファデータの再利用は、「再利用の可能性がある」第2の演算が到着したとき、B値をB−バッファにロードする操作がなおも続行している場合にのみ可能になる。このとき、その第2の演算は、第1の演算との連続性が発見された場合にのみ第2の演算が再利用された値を使用するように、第1の演算との連続性に関してチェックされる。例えば、再利用されることになるB値を使用する第1の演算が完了していない場合、そのBバッファはリクレームされ得ないので、(例えば、連続性がある限り)第2の演算によって使用することができる。
特定の実施形態では、入力行列を再利用する第1の(例えば、スループット効率的な)スケジューリングモードは、(例えば、浮動小数点)FP行列演算アクセラレータ回路のパフォーマンスを高めるために用いられる。本明細書に開示されるスケジューリングは、行列演算アクセラレータ回路設計に限定されず、継承制限を伴って他の可変レイテンシマイクロアーキテクチャに拡張可能であることを理解されたい。さらに、本明細書に開示されるスケジューリングは、FMA回路が1サイクルレイテンシを前提とする場合にも拡張可能である。
特定の実施形態では、行列は、利用可能ハードウェア(例えば、演算回路(例えば、図21におけるFMAグリッド2109または図22におけるPE回路)よりも大きな寸法を有してもよい。本明細書における特定の実施形態は、スケジューリング(例えば、演算(例えば、マイクロ演算)のディスパッチ)のための複数の(例えば、3つの)カウンタ、すなわちユニット制限に対処するKeven、Kodd、およびMと、BK×N行列の再利用をチェックするためのメカニズムとを利用する。さらに、本明細書における特定の実施形態は、例えば、寸法(例えば、K)が利用可能なハードウェアよりも大きい(例えば、K>8である)場合に演算(例えば、マイクロop)を処理するための二次キューを実装し、ここで、これらの演算(例えば、マイクロop)が演算回路(例えば、図21におけるFMAグリッド2109または図22におけるPE回路)における2回目のラウンドについて高い優先度でディスパッチされる。
一実施形態では、スケジューリング回路は、Mサイクルの間、第1行B∈BK×Nを保持し、異なるサイクルにおいて行列AM×Kの第1列のM個の要素のそれぞれをブロードキャストする。特定の実施形態では、1つのサイクルまたは複数のサイクル(例えば、2サイクル)の後、Mサイクルが第2の部分的なFMA演算を計算する間、FMAグリッドの次のFMAアレイ(例えば、行または列)が占有される。特定の実施形態では、このシーケンシャルパイプライン化モードは、K個のFMAアレイを通してK個の部分的なFMA演算が計算されるまで実行される。一実施形態では、FMAグリッドの利用は、3つの主要な制限、すなわち、(1)デスティネーションにおける行数、(2)B−バスの帯域幅(例えば、サイクルごとに512ビット)、および(3)FMAアレイの数(例えば、行または列)によって制限される。(1)の一例として、M<所与の値(例えば、16)の場合、Mサイクルの後、第1のFMA0アレイは利用可能かつフリーであるので、Mサイクルの後、次の演算(例えば、マイクロ演算)を実行のために送信可能である。例えば、M=12の場合、第1のFMA0は、最初の12サイクル中に使用される。しかしながら、デスティネーションWBの最初の結果は、16サイクルによって計算される。これはつまり、この例では、最初の演算(例えば、マイクロ演算)が完了する前に、次の演算(例えば、マイクロ演算)をディスパッチすることができる、ということである。(2)の一例として、FMAグリッドは、サイクルにおいて単一のBK×N行列の行を受け取ることを制限される。一実施形態では、FMA回路の加算器は、所与の数の(例えば、2つの)サイクルレイテンシを有し、これはつまり、2サイクルごとに一度、B−バスの閾値(例えば、512ビット)まで送信することが必要とされる、ということである。従って、特定の実施形態は、2つの演算(例えば、マイクロ演算)を同時に実行し、B−バスを毎サイクル、ビジーに保持する。さらに、特定の実施形態は、連続する命令を通して再利用するためにバッファ内にBK×N行列の行を保持する。(3)の一例として、FMAグリッドアーキテクチャは、所与の数(例えば、16個の)までの部分的な積加算(例えば、K≦16)をサポートする一方で、FMAグリッドは、所与の数より少ない(例えば、8個の)FMAアレイ(例えば、行または列)を含む。K≦8である場合、16サイクル後に結果が準備完了するが、K>8である場合、代替的な解決策が必要である。
図26は、本開示の実施形態による、複数のパスのための行列演算アクセラレータ回路のディスパッチ回路2600を示す。ディスパッチ回路2600は、2つのキュー、すなわち、メインキュー2610および第2のパスキュー2612を含む。一実施形態では、メインキュー2610は、演算回路(例えば、図21におけるFMAグリッド2109または図22におけるPE回路)における演算の実行のために重要な情報を保持する。
一実施形態では、第2のパスキュー2612は、演算回路(例えば、図21におけるFMAグリッド2109または図22におけるPE回路)における第2のパスに適格な演算(例えば、マイクロ演算)(例えば、K>8である)を保持し、上記(3)に対処する。一実施形態では第2のパスキュー2612に挿入されたすべての演算(例えば、マイクロ演算)は、第2のパスに再びディスパッチされる前に、16サイクルの間、保留される。演算回路(例えば、図21におけるFMAグリッド2109または図22におけるPE回路)がより小さい数(例えば、8つ)のFMA回路に限定される実施形態では、第2のパスが必要とされる。第2のパスは、少なくとも16サイクル後(例えば、16サイクル=8つのFMAユニット×2サイクル ADD レイテンシ)に再開することができる。この分割は、第1および第2の経路において計算される項も示す以下によって可能であることに留意されたい。
Figure 2021108102
一実施形態では、(例えば、ディスパッチ回路2300のインスタンスとしての)メインキュー2610から演算(例えば、マイクロ演算)をディスパッチする際、その累算の数が確認される(例えば、K>8であるかがチェックされる)。特定の実施形態では、(K≦閾値(例えば、8))である場合、演算(例えば、マイクロ演算)は、例えば、第2のパスキュー2612にコピーされることなく、演算回路(例えば、図21におけるFMAグリッド2109または図22におけるPE回路)に直接送信され、および/または、(K>閾値(例えば、8))である場合、演算(例えば、マイクロ演算)は、例えば、第2のパスキュー2612にもコピーされながら、演算を演算回路(例えば、図21におけるFMAグリッド2109または図22におけるPE回路)に送信し続ける。一実施形態では、第2のパスキュー2612において、Kは、実行されることになる累算の残り(例えば、K−8)となるように更新される。一実施形態では、第2のパスキュー2612に挿入されるすべての演算(例えば、マイクロ演算)は、(例えば、16)サイクルカウンタをトリガする。一実施形態では、カウンタがカウント(例えば、16サイクル)を完了すると、その対応する演算(例えば、マイクロ演算)は、第2の実行部分のために演算回路(例えば、図21におけるFMAグリッド2109または図22におけるPE回路)に送信されるのに適格である。一実施形態では、第2のパスキュー2612における演算(例えば、マイクロ演算)は、より古いので、準備完了した場合には、ディスパッチに関して優先される。以下をキュー選択のために用いることができる。
Figure 2021108102
一実施形態では、ディスパッチ回路2600のスケジューリング回路2602は、マルチプレクサ2604を利用して、第2のパスキュー2612からのエントリを選択する。例えば、マルチプレクサ2606がメインキュー2610または第2のキュー2612のいずれかから選択して、出力2608を介してFMAグリッドに送信される演算を提供する。
図27は、本開示の実施形態による、複数のパスのための行列演算アクセラレータ回路のディスパッチ回路のスケジューリング回路2700を示す図である。これらの実施形態における入力行列は、入力「B」行列(例えば、タイル)を参照するが、これは例示に過ぎず、他の行列(例えば、タイル)が同様にスケジューリングしてよい。
スケジューリング回路2700は、行列演算アクセラレータ回路において実行されることになる次の演算(例えば、マイクロ演算)、具体的には、選択され、および/または実行のために演算回路(例えば、図21におけるFMAグリッド2109または図22におけるPE回路)にディスパッチされる次の演算を特定する値を受け取る入力2702を備える。一実施形態では、入力2702は、図23からの出力2304を受信する。
特定の実施形態では、入力2702は、スケジューリング回路2700によってディスパッチされることになる次の演算(例えば、および対応する入出力タイル)を識別する。これらの実施形態の特定の実施形態では、入力2702は、タイル(例えば、図21におけるデータバッファ(例えば、レジスタ)2105におけるタイルを形成するレジスタのセット)を表す識別(ID)値を含む。スケジューリング回路2700は、行列演算アクセラレータ回路によって処理されている現在のタイルを識別するストレージ2704を備え、具体的には、ストレージ2704は、演算回路(例えば、図21におけるFMAグリッド2109または図22におけるバッファ回路)にそのデータがロードされた(またはそのデータがそこにロードされている/そこからロードされている)現在のタイルを識別してよい。一実施形態では、スケジューリング回路2700は、ストレージ2704内の識別値が有効な値であるかまたは無効な値である(例えば、ハードウェアが別のタイルを、従って別の識別値をロードしている)かを示すために、有効なタイル(例えば、タイルB)のストレージ2706を含む。
スケジューリング回路2700は、(i)演算回路に(例えば、図21におけるFMAグリッド2109または図22におけるバッファ回路に)ロードされている現在のタイル(例えば、タイルB)と、(ii)演算回路(例えば、図21におけるFMAグリッド2109または図22におけるバッファ回路)にロードされることになる次のタイル(例えば、次のタイルB)とを比較するために、比較回路2708を含む。一実施形態では、この比較は、各タイルのスケジューリング回路によって提供される識別値、例えば、行列演算アクセラレータのデータバッファ(例えば、図21におけるデータバッファ2105)へのタイルのエントリに際して提供される識別値を比較することによって行われ、例えば、ここで、識別値は、タイルの値が演算回路(例えば、図21におけるFMAグリッド2109または図22におけるバッファ回路)に入力される前に、各タイルに与えられる。
特定の実施形態では、比較回路2708は、(i)次の演算のための入力2702からの入力タイル(例えば、図21におけるデータバッファ2105内のそのID値)(例えば、「新たなタイルB」)と、(ii)演算回路に現在ロードされている(例えば、図21におけるFMAグリッド2109または図22におけるバッファ回路に現在ロードされている)現在のタイル(例えば、タイルB)、例えば、図21におけるFMAグリッド2109に現在ロードされているタイルのための図21におけるデータバッファ2105のID値とを比較する。一実施形態では、比較回路2708は、使用中の現在のタイルのID値と、演算回路において用いられることになる次のタイルのID値とを比較し、等しければ、それらが等しいことを示す値(例えば、1)をアサートする。一実施形態では、比較回路2708は、ストレージ2704からの使用中の現在のタイルのID値と、演算回路において用いられることになる次のタイルのID値とを比較し、等しければ、ストレージ2706もまたストレージ2704内の識別値が有効な値であると示す場合はそれらが等しいことを示す値(例えば、1)をアサートし、例えば、そうでなければ、異なる値(例えば、ゼロ)をアサートする。
特定の実施形態では、(i)演算回路に(例えば、図21におけるFMAグリッド2109または図22におけるバッファ回路に)ロードされている現在のタイル(例えば、タイルB)が、(ii)演算回路(例えば、図21におけるFMAグリッド2109または図22におけるバッファ回路)にロードされることになる次のタイル(例えば、次のタイルB)と等しい場合、同じタイル(例えば、同じタイルB)値(例えば、1)がアサートされて、例えば、演算回路とは別個のデータバッファ(例えば、図21におけるデータバッファ2105)から再ロードすることなく、入力行列を再利用する、例えば、演算回路内に(例えば、図21におけるFMAグリッド2109または図22におけるバッファ回路に)既に記憶されているタイルBを再利用するスケジューリングモードに(例えば、出力2710を介して)切り替えさせる。
特定の実施形態では、比較回路2708は、(i)演算回路に(例えば、図21におけるFMAグリッド2109または図22におけるバッファ回路)にロードされている現在のタイル(例えば、タイルBが、(ii)演算回路にロードされることになる次のタイル(例えば、次のタイルB)と等しい場合、出力2710において第1の値(例えば、1)を出力する。出力2710は、次に、NOT論理ゲート2724からの入力と共に、OR論理ゲート2726に入力されてよい。OR論理ゲート2726からの出力は、AND論理ゲート2730の第1の入力に送信される。AND論理ゲート2730の他の入力は、Mカウンタ2718に結合されているNOT論理ゲート2728に結合されている。特定の実施形態では、AND論理ゲート2730の出力2732は、1の場合、次の演算(例えば、マイクロ演算)をディスパッチさせる。図25とは対照的に、図27は、偶数Kのためのカウンタ2716Aと、奇数Kのためのカウンタ2716Bとを備え、両方のカウンタが、AND論理ゲート2720のそれぞれの入力に結合されている。一実施形態では、K偶数カウンタ2716Aは、Bタイルを行列演算アクセラレータ回路にロードするリソース(例えば、バス)が占有されるサイクル数をカウントダウンする間、偶数Kに1の値をアサートし、次に、完了したら(例えば、カウンタK偶数に予め定められた値になったら)ゼロをアサートし、K奇数カウンタ2716Bは、Bタイルを行列演算アクセラレータ回路にロードするリソース(例えば、バス)が占有されるサイクル数をカウントダウンする間、奇数Kに1の値をアサートし、次に、完了したら(例えば、カウンタK奇数に予め定められた値になったら)ゼロをアサートし、Mカウンタ2718は、Aタイルを行列演算アクセラレータ回路にロードするリソース(例えば、バス)が占有されるサイクル数をカウントダウンする間、Mに1の値をアサートし、次に、完了したら(例えば、カウンタMに予め定められた値になったら)ゼロをアサートする。各ディスパッチの後、カウンタは、元(例えば、ゼロ以外)の値にリセットされてよい。
一実施形態では、図27は、演算回路(例えば、図21におけるFMAグリッド2109または図22におけるバッファ回路)に送信される次の演算のトリガを以下のように指定する。偶数サイクルは、K偶数カウンタ2716Aによって追跡され、奇数サイクルは、K奇数カウンタ2716Bによって追跡され、ディスパッチされる任意の演算(例えば、マイクロ演算)は、対応するK偶数カウンタまたはK奇数カウンタを更新し、ディスパッチされる任意の演算(例えば、マイクロ演算)は、Mカウンタも更新し、例えば、BK×N行列の再利用がチェックされる。
一実施形態では、(((K−偶数==0)OR(K−奇数==0)OR(SAME−B==1))AND(M<=1))である場合、次の演算(例えば、マイクロ演算)をディスパッチする。
一実施形態では、ディスパッチ状態は、B−バスサイクルのうちの1つ(例えば、偶数サイクルまたは奇数サイクルのいずれか)が利用可能(例えば、その対応するカウンタがゼロ)であり、第1のFMA0が利用可能(例えば、Mカウンタがゼロまたは1)であり、メインキュー2610または第2のパスキュー2612のいずれかにおける次の演算(例えば、マイクロ演算)を、実行のために演算回路に(例えば、図21におけるFMAグリッド2109または図22におけるバッファ回路に)送信する場合を表す。
特定の実施形態では、Mカウンタ==0であるときにトリガが発生する場合、AおよびBは、同じサイクルにおいてTMMに送信されるはずであり、および/または、Mカウンタ==1である場合、B−バスは、A−バスの1サイクル前にTMMに送信されるはずである。特定の実施形態は、FMA回路(例えば、PE)の実行のために複数の(例えば、2)サイクルレイテンシを前提とし、FMA回路(例えば、PE)が単一のサイクルレイテンシを有する場合には、例えば、タイルの再利用を含むスケジューリングが可能であることに留意されたい。
以下は、スケジューリングを指定する例である。一実施形態では、タイル(例えば、タイルB)再利用メカニズムは、以下と共に用いられる。
例1.1 3つの数、すなわちa、b、およびcが与えられる。融合乗累算(FMA)演算を、cとaおよびbの積との加算、すなわち、以下として定義する。
Figure 2021108102
例1.2 3つの行列、すなわちAM×K、BK×N、およびCM×Nが与えられる。行列乗算MM(M,K,N)を、新たな行列
Figure 2021108102
をもたらす演算として定義する。ここで、各要素は、以下である。
Figure 2021108102
本明細書の特定の実施形態は、M,N,K≦閾値(例えば、16)であるアーキテクチャ制約を課す。
例1.3 行列キューMQは、順序付きの行列乗算演算のセット、すなわち、MQ={MM,MM,…}である。このセットは、RSにおいて行列乗算演算が準備完了状態であることを表す。
例1.4 大行列キューBMQは、順序付きの行列乗算演算のセット、すなわち、BMQ={MM,MM,…}である。このキューは、制限3により、行列乗算ユニットにおける追加のラウンドを必要とする、K>8の行列乗算演算のために用いられる。このキュー内の各要素は、内部カウンタを有し、挿入の16サイクル後に準備完了する。この構造は、2つのさらなる更新の方法を実装し、更新と、キューMMの最上部が準備完了しているか否かのチェックとについて準備完了している。
一実施形態では、行列乗算(MM)演算パラメータM、K、NおよびオペランドA、B、Cのそれぞれは、MM要素プロパティ、例えば、MM.Kとして定義される。行列乗算MMおよびそのオペランドA、B、Cを所与として、スケジューラは、初期サイクルを入力パラメータとして受け取るディスパッチ_A、ディスパッチ_B、ディスパッチ_Cの関数を通して、これらのオペランドの初期サイクル演算を同期してよい。次に、演算のための開始サイクルを規定すると、スケジューラは、動作モードに従って、MM演算の残りの実行を継続させてよい。具体的には、ディスパッチ_Aの入力サイクルから開始して、1番目の(例えば、FMA_0)アレイにおいて、各結果のサイクルにて要素a_(i,0)(ここで、i=0…Mである)をブロードキャストし、次に、2番目の(例えば、FMA_1)アレイにおいて、サイクル+2にて、要素a_(i,1)(ここで、i=0…Mである)のブロードキャストを続ける、などと続く。一実施形態では、MM.Cオペランドが、Aの挿入の2サイクル後にディスパッチ_Cを通してFMA_0アレイに挿入される。なぜならば、これがFMA乗算演算を終了する時であるからである。一実施形態では、ディスパッチ_Bは、2サイクルごとにB_i行全体をFMA_iに挿入する。ここで、それぞれ、i=0…Kである。いくつかの実施形態によると、サイクルごとに1つの行列の行をロードすることは、システム制約であることに留意されたい。実際、この制約に基づき、スケジューラは、タイムラインを偶数サイクルと奇数サイクルとに分割し、MM演算をこれらの分類されたサイクルに挿入してよい。次に、これらのサイクルのうちの1つが、毎サイクル更新されるM、K_偶数、K_奇数のカウンタを通して挿入自由である場合、ラックする(rack)。MM.K>8の場合、特定の実施形態では、MM(M,K,N)演算を2つの演算、すなわち、MM(M,8,N)とMM(M,K−8,N)とに分割する。一実施形態では、MM(M,8,N)演算は、MM(M,K,N)の最初の8つのFMA演算を含み、挿入されると実行のために立て続けに送信され、ここで、MM(M,K−8,N)は、(例えば、図26におけるメインキュー2610にて)エンキューされて、演算の少なくとも閾値数(例えば、16)サイクルだけ待機し(MM(M,8,N)が最初のラインの結果を計算し終えるまで)、その後、実行されると、このMM(M,8,N)の結果は、行列MM(M,K−8,N)のC入力として挿入される。
図28は、本開示の実施形態による、行列演算回路のための疑似コード2800を示す図である。
図29は、本開示の実施形態による、行列演算命令を処理する方法2900を示す図である。プロセッサ(例えば、またはプロセッサコア)は、例えば、ソフトウェアから命令を実行する要求を受信したことに応答して、方法2900を実行してよい。プロセッサ(例えば、またはプロセッサコア)は、特定の演算を行列演算アクセラレータ回路にオフロードしてよい。図示の方法2900は、第1の入力2次元行列を識別する第1のフィールドと、第2の入力2次元行列を識別する第2のフィールドと、結果ストレージを識別するフィールドとを有する命令をフェッチし(2902)、ハードウェアプロセッサコアのデコーダを用いて、上記命令をデコードしてデコードされた命令にし、ここで、ハードウェアプロセッサコアは、融合乗累算回路の2次元グリッドを含む行列演算アクセラレータ回路に結合され、行列演算アクセラレータ回路は、第1の入力2次元行列を表す第1の複数のレジスタおよび第2の入力2次元行列を表す第2の複数のレジスタに結合され(2904)、第1のフィールド(例えば、タイルA)、第2のフィールド(例えば、タイルB)(および、任意選択で第3のフィールド(例えば、タイルC))と関連付けられたデータを取得し(2906)、(任意選択で)実行のためにデコードされた命令をスケジューリングし(2908)、デコードされた命令を実行して、融合乗累算回路の2次元グリッドの第1のバッファに第1の複数のレジスタからの第1の入力2次元行列をロードし、融合乗累算回路の2次元グリッドの第2のバッファが、第2の入力2次元行列と同一である直前の入力2次元行列を記憶しているかをチェックし、融合乗累算回路の2次元グリッドの第2のバッファが、前の命令の実行から、第2の入力2次元行列と同一である直前の入力2次元行列を記憶している場合、前の命令およびデコードされた単一の命令の実行の間での第2のバッファのリクラメーションを防止し、第1のバッファからの第1の入力2次元行列および第2のバッファからの直前の入力2次元行列に演算を実行して結果を生成し、結果を結果ストレージに記憶し、融合乗累算回路の2次元グリッドの第2のバッファが、前の命令の実行から、第2の入力2次元行列と同一である直前の入力2次元行列を記憶していない場合、第2の入力2次元行列を融合乗累算回路の2次元グリッドの第2のバッファにロードし、第1のバッファからの第1の入力2次元行列および第2のバッファからの第2の入力2次元行列に演算を実行して結果を生成し、結果を結果ストレージに記憶し(2910)、実行された命令の結果をコミットする(2912)ことによって、行列演算(例えば、FMA)命令を処理する段階を含む。
上記で使用され得る例示的なアーキテクチャ、システムなどを以下で詳細に説明する。
開示される技術の少なくともいくつかの実施形態は、以下の例を参照して説明することができる。
例1. 融合乗累算回路の2次元グリッドを含む行列演算アクセラレータ回路と、
上記行列演算アクセラレータ回路に結合された第1の入力2次元行列を表す第1の複数のレジスタと、
上記行列演算アクセラレータ回路に結合された第2の入力2次元行列を表す第2の複数のレジスタと、
上記行列演算アクセラレータ回路に結合されたハードウェアプロセッサコアの、単一の命令をデコードされた単一の命令にデコードするデコーダであって、上記単一の命令は、結果ストレージを識別するフィールドを含む、デコーダと、
上記ハードウェアプロセッサコアの実行回路であって、
上記融合乗累算回路の2次元グリッドの第1のバッファに、上記第1の複数のレジスタからの上記第1の入力2次元行列をロードし、
上記融合乗累算回路の2次元グリッドの第2のバッファが、上記第2の入力2次元行列と同一である直前の入力2次元行列を記憶しているかをチェックし、
上記融合乗累算回路の2次元グリッドの上記第2のバッファが、前の命令の実行から、上記第2の入力2次元行列と同一である上記直前の入力2次元行列を記憶している場合、
上記前の命令および上記デコードされた単一の命令の実行の間での上記第2のバッファのリクラメーションを防止し、
上記第1のバッファからの上記第1の入力2次元行列および上記第2のバッファからの上記直前の入力2次元行列に演算を実行して結果を生成し、
上記結果を上記結果ストレージに記憶し、
上記融合乗累算回路の2次元グリッドの上記第2のバッファが、上記前の命令の実行から、上記第2の入力2次元行列と同一である上記直前の入力2次元行列を記憶していない場合、
上記第2の入力2次元行列を上記融合乗累算回路の2次元グリッドの上記第2のバッファにロードし、
上記第1のバッファからの上記第1の入力2次元行列および上記第2のバッファからの上記第2の入力2次元行列に演算を実行して結果を生成し、
上記結果を上記結果ストレージに記憶する、
ように、上記デコードされた単一の命令を実行する実行回路と、
を備える、装置。
例2.上記融合乗累算回路の2次元グリッドの上記第2のバッファが、上記前の命令の実行から、上記第2の入力2次元行列と同一である上記直前の入力2次元行列を記憶していない場合、上記行列演算アクセラレータ回路は、上記前の命令および上記デコードされた単一の命令の実行の間での上記第2のバッファのリクラメーションを開始する、例1の装置。
例3. 上記行列演算アクセラレータ回路は、入力2次元行列を表す複数のレジスタのそれぞれに識別値を割り当て、上記融合乗累算回路の2次元グリッドの上記第2のバッファが上記第2の入力2次元行列と同一である上記直前の入力2次元行列を記憶しているかどうかの上記チェックは、上記前の命令および上記単一の命令からの対応する入力2次元行列のそれぞれの識別値を比較することを含む、例1の装置。
例4. 上記行列演算アクセラレータ回路は、次の命令の入力2次元行列を記憶するように、上記第2の複数のレジスタに異なる識別値を割り当てる、例3の装置。
例5. 上記融合乗累算回路の2次元グリッドの上記第2のバッファが、上記前の命令の実行から、上記第2の入力2次元行列と同一である上記直前の入力2次元行列を記憶している場合、上記行列演算アクセラレータ回路は、上記デコードされた単一の命令の実行中、上記融合乗累算回路の2次元グリッドの上記第2のバッファをロードしない、例1の装置。
例6. 上記結果ストレージは、上記デコードされた単一の命令の実行によって形成された少なくとも1つの出力2次元行列を表す第3の複数のレジスタである、例1の装置。
例7. 上記演算は、上記2次元グリッドの融合乗累算回路の第1の適切なサブセットのそれぞれの各出力を、上記2次元グリッドの融合乗累算回路の第2の適切なサブセットのそれぞれの各入力へと下流に送信して、上記結果を形成することを含む、例1の装置。
例8. 上記融合乗累算回路の第1の適切なサブセットは、上記融合乗累算回路の2次元グリッドの行または列のうちの一方であり、上記融合乗累算回路の第2の適切なサブセットは、上記融合乗累算回路の2次元グリッドの上記行または上記列のうちの他方である、例7の装置。
例9. ハードウェアプロセッサコアのデコーダを用いて、単一の命令をデコードされた単一の命令にデコードする段階であって、上記ハードウェアプロセッサコアは、融合乗累算回路の2次元グリッドを含む行列演算アクセラレータ回路に結合され、上記行列演算アクセラレータ回路は、第1の入力2次元行列を表す第1の複数のレジスタおよび第2の入力2次元行列を表す第2の複数のレジスタに結合され、上記単一の命令は、結果ストレージを識別するフィールドを備える、段階と、
上記融合乗累算回路の2次元グリッドの第1のバッファに、上記第1の複数のレジスタからの上記第1の入力2次元行列をロードし、
上記融合乗累算回路の2次元グリッドの第2のバッファが、上記第2の入力2次元行列と同一である直前の入力2次元行列を記憶しているかをチェックし、
上記融合乗累算回路の2次元グリッドの上記第2のバッファが、前の命令の実行から、上記第2の入力2次元行列と同一である上記直前の入力2次元行列を記憶している場合、
上記前の命令および上記デコードされた単一の命令の実行の間での上記第2のバッファのリクラメーションを防止し、
上記第1のバッファからの上記第1の入力2次元行列および上記第2のバッファからの上記直前の入力2次元行列に演算を実行して結果を生成し、
上記結果を上記結果ストレージに記憶し、
上記融合乗累算回路の2次元グリッドの上記第2のバッファが、上記前の命令の実行から、上記第2の入力2次元行列と同一である上記直前の入力2次元行列を記憶していない場合、
上記第2の入力2次元行列を上記融合乗累算回路の2次元グリッドの上記第2のバッファにロードし、
上記第1のバッファからの上記第1の入力2次元行列および上記第2のバッファからの上記第2の入力2次元行列に演算を実行して結果を生成し、
上記結果を上記結果ストレージに記憶する、
ように、上記ハードウェアプロセッサコアの実行回路を用いて上記デコードされた単一の命令を実行する段階と、
を含む、方法。
例10. 上記融合乗累算回路の2次元グリッドの上記第2のバッファが、上記前の命令の実行から、上記第2の入力2次元行列と同一である上記直前の入力2次元行列を記憶していない場合、上記前の命令および上記デコードされた単一の命令の実行の間での上記第2のバッファのリクラメーションを開始する段階をさらに含む、例9の方法。
例11. 入力2次元行列を表す複数のレジスタのそれぞれに識別値を割り当てる段階をさらに含み、上記融合乗累算回路の2次元グリッドの上記第2のバッファが上記第2の入力2次元行列と同一である上記直前の入力2次元行列を記憶しているかどうかの上記チェックは、上記前の命令および上記単一の命令からの対応する入力2次元行列のそれぞれの識別値を比較する段階を含む、例9の方法。
例12. 次の命令の入力2次元行列を記憶するように、上記第2の複数のレジスタに異なる識別値を割り当てる段階をさらに含む、例11の方法。
例13. 上記融合乗累算回路の2次元グリッドの上記第2のバッファが、上記前の命令の実行から、上記第2の入力2次元行列と同一である上記直前の入力2次元行列を記憶している場合、上記デコードされた単一の命令の実行中、上記融合乗累算回路の2次元グリッドの上記第2のバッファをロードしない段階をさらに含む、例9の方法。
例14. 上記結果ストレージは、上記デコードされた単一の命令の実行によって形成された少なくとも1つの出力2次元行列を表す第3の複数のレジスタである、例9の方法。
例15. 上記演算は、上記2次元グリッドの融合乗累算回路の第1の適切なサブセットのそれぞれの各出力を、上記2次元グリッドの融合乗累算回路の第2の適切なサブセットのそれぞれの各入力へと下流に送信して、上記結果を形成することを含む、例9の方法。
例16. 上記融合乗累算回路の第1の適切なサブセットは、上記融合乗累算回路の2次元グリッドの行または列のうちの一方であり、上記融合乗累算回路の第2の適切なサブセットは、上記融合乗累算回路の2次元グリッドの上記行または上記列のうちの他方である、例15の方法。
例17. 機械によって実行されると、上記機械に方法を実行させるコードを記憶した非一時的機械可読媒体であって、上記方法は、
ハードウェアプロセッサコアのデコーダを用いて、単一の命令をデコードされた単一の命令にデコードする段階であって、上記ハードウェアプロセッサコアは、融合乗累算回路の2次元グリッドを含む行列演算アクセラレータ回路に結合され、上記行列演算アクセラレータ回路は、第1の入力2次元行列を表す第1の複数のレジスタおよび第2の入力2次元行列を表す第2の複数のレジスタに結合され、上記単一の命令は、結果ストレージを識別するフィールドを備える、段階と、
上記融合乗累算回路の2次元グリッドの第1のバッファに、上記第1の複数のレジスタからの上記第1の入力2次元行列をロードし、
上記融合乗累算回路の2次元グリッドの第2のバッファが、上記第2の入力2次元行列と同一である直前の入力2次元行列を記憶しているかをチェックし、
上記融合乗累算回路の2次元グリッドの上記第2のバッファが、前の命令の実行から、上記第2の入力2次元行列と同一である上記直前の入力2次元行列を記憶している場合、
上記前の命令および上記デコードされた単一の命令の実行の間での上記第2のバッファのリクラメーションを防止し、
上記第1のバッファからの上記第1の入力2次元行列および上記第2のバッファからの上記直前の入力2次元行列に演算を実行して結果を生成し、
上記結果を上記結果ストレージに記憶し、
上記融合乗累算回路の2次元グリッドの上記第2のバッファが、上記前の命令の実行から、上記第2の入力2次元行列と同一である上記直前の入力2次元行列を記憶していない場合、
上記第2の入力2次元行列を上記融合乗累算回路の2次元グリッドの上記第2のバッファにロードし、
上記第1のバッファからの上記第1の入力2次元行列および上記第2のバッファからの上記第2の入力2次元行列に演算を実行して結果を生成し、
上記結果を上記結果ストレージに記憶する、
ように、上記ハードウェアプロセッサコアの実行回路を用いて上記デコードされた単一の命令を実行する段階と、
を含む、非一時的機械可読媒体。
例18. 上記融合乗累算回路の2次元グリッドの上記第2のバッファが、上記前の命令の実行から、上記第2の入力2次元行列と同一である上記直前の入力2次元行列を記憶していない場合、上記前の命令および上記デコードされた単一の命令の実行の間での上記第2のバッファのリクラメーションを開始する段階をさらに含む、例17の非一時的機械可読媒体。
例19. 入力2次元行列を表す複数のレジスタのそれぞれに識別値を割り当てる段階をさらに含み、上記融合乗累算回路の2次元グリッドの上記第2のバッファが上記第2の入力2次元行列と同一である上記直前の入力2次元行列を記憶しているかどうかの上記チェックは、上記前の命令および上記単一の命令からの対応する入力2次元行列のそれぞれの識別値を比較する段階を含む、例17の非一時的機械可読媒体。
例20. 次の命令の入力2次元行列を記憶するように、上記第2の複数のレジスタに異なる識別値を割り当てる段階をさらに含む、例19の非一時的機械可読媒体。
例21. 上記融合乗累算回路の2次元グリッドの上記第2のバッファが、上記前の命令の実行から、上記第2の入力2次元行列と同一である上記直前の入力2次元行列を記憶している場合、上記デコードされた単一の命令の実行中、上記融合乗累算回路の2次元グリッドの上記第2のバッファをロードしない段階をさらに含む、例17の非一時的機械可読媒体。
例22. 上記結果ストレージは、上記デコードされた単一の命令の実行によって形成された少なくとも1つの出力2次元行列を表す第3の複数のレジスタである、例17の非一時的機械可読媒体。
例23. 上記演算は、上記2次元グリッドの融合乗累算回路の第1の適切なサブセットのそれぞれの各出力を、上記2次元グリッドの融合乗累算回路の第2の適切なサブセットのそれぞれの各入力へと下流に送信して、上記結果を形成することを含む、例17の非一時的機械可読媒体。
例24. 上記融合乗累算回路の第1の適切なサブセットは、上記融合乗累算回路の2次元グリッドの行または列のうちの一方であり、上記融合乗累算回路の第2の適切なサブセットは、上記融合乗累算回路の2次元グリッドの上記行または上記列のうちの他方である、例23の非一時的機械可読媒体。
さらに他の実施形態では、装置は、コードを格納するデータストレージデバイスを備え、コードは、ハードウェアプロセッサによって実行されると、本明細書に開示される任意の方法をハードウェアプロセッサに実行させる。装置は、詳細な説明に記載されたものと同じであってよい。方法は、詳細な説明に記載されたものと同じであってよい。
[詳細な例示的システム、プロセッサ、およびエミュレーション]
上述された命令を実行するハードウェア、ソフトウェアなどの例が本明細書で詳述される。例えば、下記で説明されるものは、フェッチ、デコード、スケジュール、実行、リタイアなどの様々なパイプライン段階を含む命令実行の態様を詳述する。
[命令セット]
命令セットは、1つまたは複数の命令フォーマットを含んでよい。所与の命令フォーマットは、とりわけ、実行されるべき演算(例えば、オペコード)およびその演算が実行されるべきオペランドを指定する様々なフィールド(例えば、ビットの数、ビットの位置)、ならびに/または他のデータフィールド(例えば、マスク)を定義してよい。いくつかの命令フォーマットは、命令テンプレート(またはサブフォーマット)の定義によってさらに分類される。例えば、所与の命令フォーマットの命令テンプレートは、命令フォーマットのフィールドの異なるサブセットを有するように定義され(含まれるフィールドは通常同じ順序であるが、含まれるフィールドが少ないため少なくともいくつかは異なるビット位置を有する)、かつ/または所与のフィールドが異なって解釈されるように定義されてもよい。従って、ISAの各命令は、所与の命令フォーマット(および定義されている場合その命令フォーマットの命令テンプレートのうちの所与の1つ)を使用して表現され、演算およびオペランドを指定するためのフィールドを含む。例えば、例示的なADD命令は、特定のオペコード、ならびにそのオペコードを指定するオペコードフィールドおよびオペランド(ソース1/デスティネーションおよびソース2)を選択するオペランドフィールドを含む命令フォーマットを有し、命令ストリーム内でこのADD命令が出現すると、特定のオペランドを選択するオペランドフィールド内に特定の内容が含まれる。Advanced Vector Extensions(AVX)(AVX1およびAVX2)と称され、ベクトル拡張(VEX)コーディングスキームを使用するSIMD拡張のセットが、リリースおよび/または公開されている(例えば、インテル(登録商標)64およびIA−32アーキテクチャソフトウェア開発者マニュアル、2018年11月を参照、かつインテル(登録商標)アーキテクチャ命令セット拡張プログラミングリファレンス、2018年10月、を参照されたい)。
[例示的な命令フォーマット]
本明細書に記載される命令の実施形態は、異なるフォーマットで具現化され得る。さらに、例示的なシステム、アーキテクチャ、およびパイプラインが下記で詳述される。命令の実施形態は、そのようなシステム、アーキテクチャ、およびパイプライン上で実行されてもよいが、詳述されたものに限定されない。
[汎用ベクトル向け命令フォーマット]
ベクトル向け命令フォーマットとは、ベクトル命令に適した命令フォーマットのことである(例えば、ベクトル演算に特有の特定のフィールドが存在する)。ベクトルおよびスカラ演算の両方がベクトル向け命令フォーマットによりサポートされる実施形態が説明されるが、代替的な実施形態は、ベクトル向け命令フォーマットによるベクトル演算のみを用いる。
図30Aおよび図30Bは、本開示の実施形態による、汎用ベクトル向け命令フォーマットおよびこれらの命令テンプレートを示すブロック図である。図30Aは、本開示の実施形態による、汎用ベクトル向け命令フォーマットおよびそのクラスA命令テンプレートを示すブロック図であり、図30Bは、本開示の実施形態による、汎用ベクトル向け命令フォーマットおよびそのクラスB命令テンプレートを示すブロック図である。具体的には、汎用ベクトル向け命令フォーマット3000には、クラスA命令およびクラスB命令テンプレートが定義され、その両方が非メモリアクセス3005の命令テンプレートおよびメモリアクセス3020の命令テンプレートを含む。ベクトル向け命令フォーマットの文脈における汎用という用語は、いずれの特定の命令セットにも結び付けられていない命令フォーマットを指す。
本開示の実施形態では、ベクトル向け命令フォーマットが、32ビット(4バイト)または64ビット(8バイト)データ要素幅(またはサイズ)を有する64バイトのベクトルオペランド長(またはサイズ)(従って、64バイトのベクトルは、16個のダブルワードサイズの要素または代替的に8クワッドワードサイズの要素のいずれかから構成される)と、16ビット(2バイト)または8ビット(1バイト)データ要素幅(またはサイズ)を有する64バイトのベクトルオペランド長(またはサイズ)と、32ビット(4バイト)、64ビット(8バイト)、16ビット(2バイト)または8ビット(1バイト)データ要素幅(またはサイズ)を有する32バイトのベクトルオペランド長(またはサイズ)と、32ビット(4バイト)、64ビット(8バイト)、16ビット(2バイト)または8ビット(1バイト)データ要素幅(またはサイズ)を有する16バイトのベクトルオペランド長(またはサイズ)とをサポートすることが説明されるが、代替的な実施形態は、より多い、より少ないまたは異なるデータ要素幅(例えば、128ビット(16バイト)のデータ要素幅)を有する、より多い、より少ないおよび/または異なるベクトルオペランドサイズ(例えば、256バイトのベクトルオペランド)をサポートしてよい。
図30AにおけるクラスA命令テンプレートは、1)非メモリアクセス3005の命令テンプレート中に示される非メモリアクセス、フルラウンド制御タイプ演算3010命令テンプレート、および非メモリアクセス、データ変換タイプ演算3015の命令テンプレート、ならびに2)メモリアクセス3020の命令テンプレート中に示されるメモリアクセス、一時的3025の命令テンプレート、およびメモリアクセス、非一時的3030の命令テンプレートを含む。図30BのクラスB命令テンプレートは、1)非メモリアクセス3005の命令テンプレート中に示される非メモリアクセス、書き込みマスク制御、部分的ラウンド制御タイプ演算3012の命令テンプレート、および非メモリアクセス、書き込みマスク制御、VSIZEタイプ演算3017の命令テンプレート、ならびに2)メモリアクセス3020の命令テンプレート中に示されるメモリアクセス、書き込みマスク制御3027の命令テンプレートを含む。
汎用ベクトル向け命令フォーマット3000は、以下に列挙されるフィールドを図30Aおよび図30B中に図示される順序で含む。
フォーマットフィールド3040:このフィールド内の特定の値(命令フォーマット識別子値)は、ベクトル向け命令フォーマット、従って命令ストリーム内のベクトル向け命令フォーマット内の命令の出現を一意に識別する。そのため、このフィールドは、汎用ベクトル向け命令フォーマットのみを有する命令セットには不要であるという意味においてオプションである。
基本演算フィールド3042:その内容は異なる基本演算を区別する。
レジスタインデックスフィールド3044:その内容は、直接またはアドレス生成を通じて、レジスタ内またはメモリ内にあっても、ソースおよびデスティネーションオペランドの位置を指定する。これらは、P×Q(例えば、32×512、16×128、32×1024、64×1024)のレジスタファイルからN個のレジスタを選択するのに十分な数のビットを含む。一実施形態では、Nは最大3つのソースおよび1つのデスティネーションレジスタであり得るが、代替的な実施形態は、より多いかまたは少ないソースおよびデスティネーションレジスタをサポートしてもよい(例えば、最大2つのソースをサポートしてよく、これらのソースのうちの1つがデスティネーションとしても機能し、最大3つのソースをサポートしてよく、これらのソースのうちの1つがデスティネーションとしても機能し、最大2つのソースおよび1つのデスティネーションをサポートしてもよい)。
修飾子フィールド3046:その内容は、メモリアクセスを指定する汎用ベクトル命令フォーマットの命令の出現を、メモリアクセスを指定しない命令と区別する、すなわち、非メモリアクセス3005命令テンプレートとメモリアクセス3020命令テンプレートとを区別する。メモリアクセス演算は、メモリ階層に対して読み取りおよび/または書き込みを行う(場合によっては、レジスタ内の値を使用してソースアドレスおよび/またはデスティネーションアドレスを指定する)、一方、非メモリアクセス演算はこれを行わない(例えば、ソースおよびデスティネーションはレジスタである)。一実施形態では、このフィールドは、メモリアドレス計算を実行する3つの異なる方法からも選択するが、代替的な実施形態は、メモリアドレス計算を実行するための、より多い、少ない、または異なる方法をサポートし得る。
拡張演算フィールド3050:その内容は、基本演算に加えて、様々な異なる演算のうちのどの演算が実行されるべきかを区別する。このフィールドはコンテキスト固有である。本開示の一実施形態では、このフィールドは、クラスフィールド3068、アルファフィールド3052、およびベータフィールド3054に分割される。拡張演算フィールド3050は、共通の演算グループが、2個、3個または4個の命令ではなく単一の命令の中で実行されることを可能にする。
スケールフィールド3060:その内容は、メモリアドレス生成のために(例えば、2スケール×インデックス+ベースを使用するアドレス生成のために)インデックスフィールドの内容のスケーリングを可能にする。
変位フィールド3062A:その内容は、メモリアドレス生成の一部として(例えば、2スケール×インデックス+ベース+変位を使用するアドレス生成用に)使用される。
変位係数フィールド3062B(変位係数フィールド3062Bの真上の変位フィールド3062Aの並置は、一方または他方が使用されることを示すことに留意されたい):その内容は、アドレス生成の一部として使用され、それは、メモリアクセスのサイズ(N)によってスケーリングされるべき変位係数を指定する。Nは、(例えば、2スケール×インデックス+ベース+スケーリングされた変位を使用するアドレス生成用の)メモリアクセスにおけるバイト数である。冗長な下位ビットは無視されるため、実効アドレスの計算に使用されるべき最終変位を生成するために、変位係数フィールドの内容はメモリオペランドの合計サイズ(N)と乗算される。Nの値は、(本明細書において後述される)フルオペコードフィールド3074およびデータ操作フィールド3054Cに基づいて、実行時にプロセッサハードウェアによって決定される。変位フィールド3062Aおよび変位係数フィールド3062Bは、それらが非メモリアクセス3005の命令テンプレートには使用されない、および/または、異なる実施形態がそれら2つのうちの一方のみを実装してよい、またはいずれも実装しなくてよいという意味において任意選択的である。
データ要素幅フィールド3064:その内容は、(いくつかの実施形態ではすべての命令に、他の実施形態ではいくつかの命令のみに)複数のデータ要素幅のうちのどのデータ要素幅が使用されるべきかを区別する。このフィールドは、1つのデータ要素幅のみがサポートされる場合、および/またはオペコードの何らかの態様を使用してデータ要素幅がサポートされる場合には必要とされないという意味で、任意選択的である。
書き込みマスクフィールド3070:その内容は、データ要素位置ごとに、デスティネーションベクトルオペランド内のそのデータ要素位置が基本演算および拡張演算の結果を反映するか否かを制御する。クラスA命令テンプレートがマージング−書き込みマスキングをサポートする一方で、クラスB命令テンプレートはマージング−書き込みマスキングおよびゼロ化−書き込みマスキングの両方をサポートする。マージングする場合、ベクトルマスクは、デスティネーションにおける要素の任意のセットが(基本演算および拡張演算により指定された)任意の演算の実行中に更新から保護されることを可能にする。他の一実施形態では、対応するマスクビットが0であるデスティネーションの各要素の古い値を保持する。対照的に、ゼロ化する場合、ベクトルマスクは、デスティネーションにおける要素の任意のセットが、(基本演算および拡張演算において指定された)任意の演算の実行中にゼロにされることを可能にする。一実施形態では、対応するマスクビットが0値を有する場合、デスティネーションの要素は0に設定される。この機能のサブセットは、実行されている演算のベクトル長(すなわち、修正される要素の、最初の要素から最後の要素までの範囲)を制御する能力であるが、修正される要素が連続している必要はない。従って、書き込みマスクフィールド3070は、ロード、ストア、算術、ロジックなどを含む、部分的なベクトル演算を可能にする。書き込みマスクフィールド3070の内容が、用いられる書き込みマスクを含む多数の書き込みマスクレジスタのうちの1つを選択する(従って、書き込みマスクフィールド3070の内容は、実行されるそのマスキングを間接的に識別する)本開示の実施形態が説明される一方、代替的な実施形態では、代わりにまたは加えて、マスク書き込みフィールド3070の内容が、実行されるマスキングを直接指定することを可能にする。
即値フィールド3072:その内容は即値の指定を可能にする。このフィールドは、即値をサポートしていない汎用ベクトル向けフォーマットの実装において存在せず、即値を用いない命令中に存在しないという意味で任意選択である。
クラスフィールド3068:その内容は異なるクラスの命令を区別する。図30Aおよび図30Bを参照すると、このフィールドの内容は、クラスA命令とクラスB命令との間で選択する。図30Aおよび図30Bでは、特定の値がフィールド内に存在することを示すために、角丸四角形が使用されている(例えば、それぞれ図30Aおよび図30Bにおけるクラスフィールド3068のクラスA 3068AおよびクラスB 3068B)。
[クラスAの命令テンプレート]
クラスAの非メモリアクセス3005の命令テンプレートの場合、アルファフィールド3052はRSフィールド3052Aとして解釈され、その内容は、異なる拡張演算タイプのうちどれが実行されるべきかを区別し(例えば、ラウンド3052A.1およびデータ変換3052A.2が非メモリアクセス、ラウンドタイプ演算3010および非メモリアクセス、データ変換タイプ演算3015命令テンプレートに対してそれぞれ指定される)、ベータフィールド3054は、指定されたタイプの演算のどれが実行されるべきかを区別する。非メモリアクセス3005の命令テンプレートには、スケールフィールド3060、変位フィールド3062A、および変位スケールフィールド3062Bは存在しない。
[非メモリアクセス命令テンプレート―フルラウンド制御タイプ演算]
非メモリアクセスフルラウンド制御タイプ演算3010命令テンプレートでは、ベータフィールド3054はラウンド制御フィールド3054Aとして解釈され、その内容は静的なラウンディングを提供する。説明される本開示の実施形態では、ラウンド制御フィールド3054Aは、全浮動小数点例外抑制(SAE)フィールド3056およびラウンド演算制御フィールド3058を含み、代替的な実施形態では、これらの概念の両方をサポートし、同じフィールドにエンコードしてもよいし、これらの概念/フィールドの一方または他方のみを有してもよい(例えば、ラウンド演算制御フィールド3058のみを有してよい)。
SAEフィールド3056:その内容は、例外イベント報告を無効化すべきか否かを区別する。SAEフィールド3056の内容が、抑制が有効化されたことを示すとき、所与の命令はいかなる種類の浮動小数点例外フラグも報告せず、いかなる浮動小数点例外ハンドラも発生させない。
ラウンド演算制御フィールド3058:その内容は、ラウンディング演算グループのうちどれを実行すべきかを区別する(例えば、切り上げ、切り捨て、ゼロへの丸め、および最近接丸め)。こうして、ラウンド演算制御フィールド3058は、命令ごとにラウンディングモードを変更することを可能にする。プロセッサがラウンディングモードを指定するための制御レジスタを含む本開示の一実施形態において、ラウンド演算制御フィールド3058の内容は、そのレジスタ値をオーバライドする。
[非メモリアクセス命令テンプレート―データ変換タイプ演算]
非メモリアクセスデータ変換タイプ演算3015命令テンプレートでは、ベータフィールド3054はデータ変換フィールド3054Bとして解釈され、その内容は、多数のデータ変換のうちどれが実行されるべきかを区別する(例えば、データ変換なし、スウィズル、ブロードキャスト)。
クラスAのメモリアクセス3020命令テンプレートの場合、アルファフィールド3052はエビクションヒントフィールド3052Bとして解釈され、その内容は、エビクションヒントのうちどれが使用されるべきかを区別し(図30Aでは、メモリアクセス、一時的3025命令テンプレートおよびメモリアクセス、非一時的3030命令テンプレートのために一時的3052B.1および非一時的3052B.2がそれぞれ指定される)、その一方でベータフィールド3054はデータ操作フィールド3054Cとして解釈され、その内容は、多数のデータ操作演算(プリミティブとしても知られる)のうちどれが実行されるべきかを区別する(例えば、操作なし、ブロードキャスト、ソースのアップコンバージョン、およびデスティネーションのダウンコンバージョン)。メモリアクセス3020命令テンプレートは、スケールフィールド3060、および任意選択で、変位フィールド3062Aまたは変位スケールフィールド3062Bを含む。
ベクトルメモリ命令は、変換サポートを用いて、メモリからのベクトルロードおよびメモリへのベクトルストアを実行する。通常のベクトル命令と同様に、ベクトルメモリ命令は、実際に転送される要素を、書き込みマスクとして選択されたベクトルマスクの内容によって指示して、データ要素ごとにメモリとの間でデータを転送する。
[メモリアクセス命令テンプレート―一時的]
一時的データとは、キャッシングによる恩恵を得るのに十分早く再利用される可能性が高いデータである。しかしながらこれはヒントであり、異なるプロセッサが、ヒント全体を無視することを含む異なる方法でこれを実装してよい。
[メモリアクセス命令テンプレート―非一時的]
非一時的データとは、第1レベルキャッシュでのキャッシングの恩恵を受けるのに十分早く再利用される可能性が低いデータであり、エビクションのために優先されるべきである。しかしながらこれはヒントであり、異なるプロセッサが、ヒント全体を無視することを含む異なる方法でこれを実装してよい。
[クラスBの命令テンプレート]
クラスBの命令テンプレートの場合、アルファフィールド3052は書き込みマスク制御(Z)フィールド3052Cとして解釈され、その内容は、書き込みマスクフィールド3070によって制御された書き込みマスキングがマージングであるべきかゼロ化であるべきか区別する。
クラスBの非メモリアクセス3005の命令テンプレートの場合、ベータフィールド3054の一部はRLフィールド3057Aとして解釈され、その内容は、異なる拡張演算タイプのうちどれが実行されるべきかを区別し(例えば、ラウンド3057A.1およびベクトル長(VSIZE)3057A.2は、非メモリアクセス、書き込みマスク制御、部分的ラウンド制御タイプ演算3012命令テンプレートおよび非メモリアクセス、書き込みマスク制御、VSIZEタイプ演算3017命令テンプレートに対してそれぞれ指定される)、ベータフィールド3054の残りは、指定されたタイプの演算のどれが実行されるべきかを区別する。非メモリアクセス3005命令テンプレートでは、スケールフィールド3060、変位フィールド3062Aおよび変位スケールフィールド3062Bは存在しない。
非メモリアクセス、書き込みマスク制御、部分的ラウンド制御タイプ演算3010命令テンプレートでは、ベータフィールド3054の残りはラウンド演算フィールド3059Aとして解釈され、例外イベント報告は無効化される(所与の命令はいかなる種類の浮動小数点例外フラグも報告せず、いかなる浮動小数点例外ハンドラも発生させない)。
ラウンド演算制御フィールド3059A:ラウンド演算制御フィールド3058と同様に、その内容は、ラウンディング演算グループのうちどれを実行すべきかを区別する(例えば、切り上げ、切り捨て、ゼロへの丸め、および最近接丸め)。こうして、ラウンド演算制御フィールド3059Aは、命令ごとにラウンディングモードを変更することを可能にする。プロセッサがラウンディングモードを指定するための制御レジスタを含む本開示の一実施形態では、ラウンド演算制御フィールド3059Aの内容は、そのレジスタ値をオーバライドする。
非メモリアクセス、書き込みマスク制御、VSIZEタイプ演算3017命令テンプレートでは、ベータフィールド3054の残りはベクトル長フィールド3059Bとして解釈され、その内容は、多数のデータベクトル長のうちどれが実行されるべきかを区別する(例えば、128、256、または512バイト)。
クラスBのメモリアクセス3020命令テンプレートの場合、ベータフィールド3054の一部はブロードキャストフィールド3057Bとして解釈され、その内容は、ブロードキャストタイプのデータ操作演算が実行されるべきか否かを区別し、ベータフィールド3054の残りはベクトル長フィールド3059Bとして解釈される。メモリアクセス3020命令テンプレートは、スケールフィールド3060、および任意選択で、変位フィールド3062Aまたは変位スケールフィールド3062Bを含む。
汎用ベクトル向け命令フォーマット3000に関して、フルオペコードフィールド3074は、フォーマットフィールド3040、基本演算フィールド3042およびデータ要素幅フィールド3064を含むように図示されている。フルオペコードフィールド3074がこれらのフィールドのうちすべてを含む一実施形態が示されているものの、これらのフィールドのすべてをサポートしていない実施形態においては、フルオペコードフィールド3074は、これらのフィールドのすべてより少ないフィールドを含む。フルオペコードフィールド3074は、演算コード(オペコード)を提供する。
拡張演算フィールド3050、データ要素幅フィールド3064、および書き込みマスクフィールド3070は、これらの特徴が汎用ベクトル向け命令フォーマットにおいて命令ごとに指定されることを可能にする。
書き込みマスクフィールドおよびデータ要素幅フィールドの組み合わせは、異なるデータ要素幅に基づいてマスクを適用できるようにするという点で、型付き命令を作成する。
クラスAおよびクラスB内で見出される様々な命令テンプレートは、様々な状況で有益である。本開示のいくつかの実施形態において、異なるプロセッサまたはプロセッサ内の異なるコアは、クラスAのみ、クラスBのみ、または両方のクラスをサポートしてよい。例えば、汎用コンピューティング向けの高性能汎用アウトオブオーダコアは、クラスBのみをサポートしてよく、主にグラフィックスおよび/または科学(スループット)コンピューティング向けのコアは、クラスAのみをサポートしてよく、両方向けのコアは、両方をサポートしてよい(勿論、コアは本開示の範囲内にあり、両方のクラスからのテンプレートおよび命令の何らかの組み合わせを有するが、両方のクラスからのすべてのテンプレートおよび命令を有するわけではない)。また、単一のプロセッサが複数のコアを含んでもよく、それらのすべてが同じクラスをサポートするか、またはそれらの中の異なるコアが異なるクラスをサポートする。例えば、別個のグラフィックスおよび汎用コアを有するプロセッサでは、主にグラフィックスおよび/または科学コンピューティング向けのグラフィックスコアのうち1つはクラスAのみをサポートしてよく、汎用コアのうちの1つまたは複数は、クラスBのみをサポートする汎用コンピューティング向けのアウトオブオーダ実行およびレジスタリネーミングを有する高性能汎用コアであってもよい。別個のグラフィックスコアを有していない別のプロセッサは、クラスAおよびクラスBの両方をサポートするもう1つの汎用インオーダまたはアウトオブオーダコアを含んでよい。勿論、1つのクラスからの複数の機能は、本開示の異なる実施形態における他のクラスで実装されてもよい。高水準言語で書かれたプログラムは、1)実行のためにターゲットプロセッサによってサポートされるクラスの命令のみを有する形式、または2)すべてのクラスの命令の異なる組み合わせを使用して書かれた代替ルーチンを有し、現在コードを実行しているプロセッサによってサポートされる命令に基づいて実行すべきルーチンを選択する制御フローコードを有する形式を含む、様々な異なる実行可能な形式に変換される(例えば、ジャストインタイムコンパイルまたは静的コンパイル)。
[例示的な特定ベクトル向け命令フォーマット]
図31A〜図31Dは、本開示の実施形態による、例示的な特定ベクトル向け命令フォーマットを示すブロック図である。図31A〜図31Dは、位置、サイズ、解釈およびフィールド順序に加え、これらのフィールドのいくつかの値を指定するという意味において特定的な特定ベクトル向け命令フォーマット3100を示す。特定ベクトル向け命令フォーマット3100は、x86命令セットを拡張するために使用されてもよく、従って、いくつかのフィールドは、既存のx86命令セットおよびその拡張(例えば、AVX)で使用されるフィールドと同様または同じである。このフォーマットは、拡張を有する既存のx86命令セットのプレフィックスエンコーディングフィールド、リアルオペコードバイトフィールド、MOD R/Mフィールド、SIBフィールド、変位フィールド、および即値フィールドと一致したままである。図30Aおよび図30Bからのフィールドが図31A〜図31Dのどのフィールドにマップされるかが示される。
本開示の実施形態は、例示を目的として汎用ベクトル向け命令フォーマット3000の文脈で特定ベクトル向け命令フォーマット3100を参照して説明されているが、本開示は、特許請求の範囲に記載されている場合を除いて、特定ベクトル向け命令フォーマット3100に限定されるものではないことを理解されたい。例えば、汎用ベクトル向け命令フォーマット3000は、様々なフィールドについて様々な考え得るサイズを想定しているが、特定ベクトル向け命令フォーマット3100は、特定のサイズのフィールドを有するように図示されている。具体的な例として、データ要素幅フィールド3064は、特定ベクトル向け命令フォーマット3100において、1ビットフィールドとして示されているが、本開示は、そのように限定されることはない(すなわち、汎用ベクトル向け命令フォーマット3000は、他のサイズのデータ要素幅フィールド3064が想定される)。
汎用ベクトル向け命令フォーマット3000は、図31Aに示される順序で以下に列挙される以下のフィールドを含む。
EVEXプレフィックス(バイト0−3)3102:4バイト形式でエンコードされる。
フォーマットフィールド3040(EVEXバイト0、ビット[7:0]):第1のバイト(EVEXバイト0)は、フォーマットフィールド3040であり、それは、0x62(本開示の一実施形態において、ベクトル向け命令フォーマットを区別するために用いられる一意の値)を含む。
第2から第4のバイト(EVEXバイト1〜3)は、特定の機能を提供する複数のビットフィールドを含む。
REXフィールド3105(EVEXバイト1、ビット[7−5]):EVEX.Rビットフィールド(EVEXバイト1、ビット[7]−R)、EVEX.Xビットフィールド(EVEXバイト1、ビット[6]−X)およびEVEX.Bビットフィールド(EVEXバイト1、ビット[5]−B)から構成される。EVEX.R、EVEX.X、およびEVEX.Bビットフィールドは、対応するVEXビットフィールドと同じ機能性を提供し、1の補数形式を用いてエンコードされる。すなわち、ZMM0は1111Bとしてエンコードされ、ZMM15は0000Bとしてエンコードされる。命令の他のフィールドは、当該技術分野で知られているようにレジスタインデックスの下位3ビットをエンコードし(rrr、xxx、およびbbb)、これにより、EVEX.R、EVEX.XおよびEVEX.Bを追加することによってRrrr、Xxxx、およびBbbbが形成されてよい。
REX'フィールド3010:これは、REX'フィールド3010の第1の部分であり、拡張32レジスタセットの上位16または下位16のいずれかをエンコードするのに用いられるEVEX.R'ビットフィールド(EVEXバイト1、ビット[4]―R')である。本開示の一実施形態において、このビットは、リアルオペコードバイトが62であるBOUND命令から(よく知られたx86の32ビットモードにおいて)区別するために、以下に示される他のものと共にビット反転フォーマットで格納されるが、(後述の)MOD R/MフィールドにおいてMODフィールド内の値11を受け付けない。本開示の代替的な実施形態は、このビットおよび以下に示される反転フォーマットの他のビットを格納しない下位16個のレジスタのエンコードには、1の値を用いる。換言すると、EVEX.R'、EVEX.Rおよび他のフィールドの他のRRRを組み合わせて、R'Rrrrが形成される。
オペコードマップフィールド3115(EVEXバイト1、ビット[3:0]−mmmm):その内容は、示唆される先頭オペコードバイト(0F、0F38または0F3)をエンコードする。
データ要素幅フィールド3064(EVEXバイト2、ビット[7]−W):記号EVEX.Wによって表される。EVEX.Wは、データタイプの粒度(サイズ)(32ビットデータ要素または64ビットデータ要素のいずれか)を規定するために用いられる。
EVEX.vvvv3120(EVEXバイト2、ビット[6:3]−vvvv)−EVEX.vvvvの役割は、以下を含んでよい。1)EVEX.vvvvは、反転(1の補数)形式で指定される第1のソースレジスタオペランドをエンコードし、2または3以上のソースオペランドを有する命令に対して有効である。2)EVEX.vvvvは、特定のベクトルシフトに対して1の補数形式で指定されるデスティネーションレジスタオペランドをエンコードする。または、3)EVEX.vvvvは、いずれのオペランドもエンコードせず、当該フィールドは予約され、1111bを含むべきである。したがって、EVEX.vvvvフィールド3120は、反転(1の補数)形式で記憶された第1のソースレジスタ指定子の4つの下位ビットをエンコードする。命令に応じて、追加の異なるEVEXビットフィールドは、指定子のサイズを32個のレジスタに拡張するために用いられる。
EVEX.U3068クラスフィールド(EVEXバイト2、ビット[2]−U):EVEX.U=0の場合、これは、クラスAまたはEVEX.U0を示す。EVEX.U=1の場合、これは、クラスBまたはEVEX.U1を示す。
プレフィックスエンコーディングフィールド3125(EVEXバイト2、ビット[1:0]−pp):基本演算フィールドに追加のビットを提供する。EVEXプレフィックスフォーマットにおけるレガシSSE命令にサポートを提供することに加え、これはまた、SIMDプレフィックスのコンパクト化の利点を有する(SIMDプレフィックスを表わすために1バイトを要求する代わりに、EVEXプレフィックスは2ビットのみを要求する)。一実施形態では、レガシフォーマットおよびEVEXプレフィックスフォーマットの両方でSIMDプレフィックス(66H、F2H、F3H)を使用するレガシSSE命令をサポートするために、これらのレガシSIMDプレフィックスは、SIMDプレフィックスエンコーディングフィールドにエンコードされ、実行時にデコード回路のPLAに提供される前に、レガシSIMDプレフィックスに拡張される(そのため、PLAは、修正することなく、これらのレガシ命令のレガシフォーマットとEVEXフォーマットの両方を実行できる)。より新しい命令はEVEXプレフィックスエンコーディングフィールドの内容をオペコード拡張として直接使用できるにもかかわらず、特定の実施形態は一貫性をもたせるために同様に拡張するが、これらのレガシSIMDプレフィックスによって異なる意味が指定されることを可能にする。代替的な実施形態は、2ビットSIMDプレフィックスエンコーディングをサポートし、従って拡張を要求しないように、PLAを再設計してよい。
アルファフィールド3052(EVEXバイト3、ビット[7];EH、EVEX.EH、EVEX.rs、EVEX.RL、EVEX.書き込みマスク制御およびEVEX.Nとしても知られ、また、αを用いて示される):前述したように、このフィールドは、コンテキストに固有のものである。
ベータフィールド3054(EVEXバイト3、ビット[6:4]−SSS;EVEX.s2−0、EVEX.r2−0、EVEX.rr1、EVEX.LL0、EVEX.LLBとしても知られ、また、βββを用いて示される):前述したように、このフィールドは、コンテキストに固有のものである。
REX'フィールド3010:これは、REX'フィールドの残部であり、拡張された32個のレジスタセットの上位16または下位16のいずれかをエンコードするために用いられ得るEVEX.V'ビットフィールド(EVEXバイト3、ビット[3]−V')である。このビットは、ビット反転フォーマットで格納される。下位16個のレジスタのエンコードには、1の値を用いる。換言すると、EVEX.V'、EVEX.vvvvを組み合わせることにより、V'VVVVが形成される。
書き込みマスクフィールド3070(EVEXバイト3、ビット[2:0]−kkk):前述の通り、その内容は、書き込みマスクレジスタ内のレジスタのインデックスを指定する。本開示の一実施形態において、特定の値EVEX.kkk=000は、特定の命令に用いられる書き込みマスクが存在しないことを示唆する特別な挙動を有する(これは、すべてのものに対してハードウェアに組み込まれる書き込みマスク、または、マスキングハードウェアをバイパスするハードウェアの使用を含む様々な態様で実装され得る)。
リアルオペコードフィールド3130(バイト4)はオペコードバイトとしても知られる。オペコードの一部は、このフィールドで指定される。
MOD R/Mフィールド3140(バイト5)は、MODフィールド3142、Regフィールド3144、およびR/Mフィールド3146を含む。前述の通り、MODフィールド3142の内容は、メモリアクセス演算および非メモリアクセス演算間を区別する。Regフィールド3144の役割は、デスティネーションレジスタオペランドまたはソースレジスタオペランドのいずれかをエンコードすること、または、オペコード拡張として扱われ、いかなる命令オペランドをエンコードするためにも使用されないこと、という2つの状況に要約できる。R/Mフィールド3146の役割は以下を含んでよい。つまり、メモリアドレスを参照する命令オペランドをエンコードすること、またはデスティネーションレジスタオペランドまたはソースレジスタオペランドのいずれかをエンコードすることである。
スケール、インデックス、ベース(SIB)バイト(バイト6):前述の通り、スケールフィールド3060の内容は、メモリアドレス生成に使用される。SIB.xxx 3154およびSIB.bbb 3156:これらのフィールドの内容は、レジスタインデックスXxxxおよびBbbbに関連して既に言及されている。
変位フィールド3062A(バイト7−10):MODフィールド3142が10を含む場合、バイト7−10は、変位フィールド3062Aであり、これはレガシ32ビット変位(disp32)と同じく機能し、バイト粒度で機能する。
変位係数フィールド3062B(バイト7):MODフィールド3142が01を含むとき、バイト7は変位係数フィールド3062Bである。このフィールドの位置は、バイト粒度で機能するレガシx86命令セットの8ビット変位(disp8)のものと同じである。disp8は符号拡張されるので、disp8は−128〜127バイトオフセット間のアドレス指定のみ可能である。64バイトのキャッシュラインに関しては、disp8は4つの実際に有用な値、−128、−64、0および64のみに設定可能な8ビットを使用する。多くの場合、より広いレンジが必要であるので、disp32が使用されるが、disp32は4バイトを要求する。disp8およびdisp32と対照的に、変位係数フィールド3062Bはdisp8の再解釈である。変位係数フィールド3062Bを使用する場合、実際の変位は、メモリオペランドアクセス(N)のサイズで乗算された変位係数フィールドの内容によって決定される。このタイプの変位は、disp8×Nと称される。これにより、平均命令長(変位に用いられる単一バイトだが、はるかに広いレンジを有する)が小さくなる。このような圧縮された変位は、実効変位がメモリアクセスの粒度の倍数であるという仮定に基づいており、従って、アドレスオフセットの冗長な下位ビットはエンコードされる必要がない。換言すると、変位係数フィールド3062Bが、レガシx86命令セットの8ビット変位と置き換わる。従って、変位係数フィールド3062Bは、disp8がdisp8×Nにオーバーロードされることのみを除いては、x86命令セットの8−ビット変位と同じようにエンコードされる(よって、ModRM/SIBエンコーディングルールの変更はない)。換言すると、エンコーディングルールまたはエンコード長に変更はなく、ハードウェアによる変位値の解釈のみに変更がある(バイト単位のアドレスオフセットを取得するには、メモリオペランドのサイズによって変位をスケールする必要がある)。即値フィールド3072は、前述の通りに動作する。
[フルオペコードフィールド]
図31Bは、本開示の一実施形態による、フルオペコードフィールド3074を作成する特定ベクトル向け命令フォーマット3100のフィールドを示すブロック図である。具体的には、フルオペコードフィールド3074は、フォーマットフィールド3040、基本演算フィールド3042およびデータ要素幅(W)フィールド3064を含む。基本演算フィールド3042は、プレフィックスエンコーディングフィールド3125、オペコードマップフィールド3115およびリアルオペコードフィールド3130を含む。
[レジスタインデックスフィールド]
図31Cは、本開示の一実施形態による、レジスタインデックスフィールド3044を作成する特定ベクトル向け命令フォーマット3100のフィールドを示すブロック図である。具体的には、レジスタインデックスフィールド3044は、REXフィールド3105、REX'フィールド3110、MODR/M.regフィールド3144、MODR/M.r/mフィールド3146、VVVVフィールド3120、xxxフィールド3154およびbbbフィールド3156を含む。
[拡張演算フィールド]
図31Dは、本開示の一実施形態による、拡張演算フィールド3050を作成する特定ベクトル向け命令フォーマット3100のフィールドを示すブロック図である。クラス(U)フィールド3068が0を含む場合、EVEX.U0(クラスA 3068A)を表し、1を含む場合は、EVEX.U1(クラスB 3068B)を表す。U=0、かつMODフィールド3142が11を含む(非メモリアクセス演算を意味する)場合、アルファフィールド3052(EVEXバイト3、ビット[7]−EH)は、RSフィールド3052Aとして解釈される。RSフィールド3052Aが1(ラウンド3052A.1)を含む場合、ベータフィールド3054(EVEXバイト3、ビット[6:4]−SSS)は、ラウンド制御フィールド3054Aとして解釈される。ラウンド制御フィールド3054Aは、1ビットのSAEフィールド3056および2ビットのラウンド演算フィールド3058を含む。RSフィールド3052Aが0(データ変換3052A.2)を含む場合、ベータフィールド3054(EVEXバイト3、ビット[6:4]−SSS)は、3ビットのデータ変換フィールド3054Bとして解釈される。U=0、かつMODフィールド3142が00、01または10を含む(メモリアクセス演算を意味する)場合、アルファフィールド3052(EVEXバイト3、ビット[7]−EH)は、エビクションヒント(EH)フィールド3052Bとして解釈され、ベータフィールド3054(EVEXバイト3、ビット[6:4]−SSS)は、3ビットのデータ操作フィールド3054Cとして解釈される。
U=1であるとき、アルファフィールド3052(EVEXバイト3、ビット[7]−EH)は、書き込みマスク制御(Z)フィールド3052Cとして解釈される。U=1、かつMODフィールド3142が11を含む(非メモリアクセス演算を意味する)場合、ベータフィールド3054の一部(EVEXバイト3、ビット[4]−S)は、RLフィールド3057Aとして解釈され、1(ラウンド3057A.1)を含む場合、ベータフィールド3054の残り(EVEXバイト3、ビット[6−5]−S2−1)は、ラウンド演算フィールド3059Aとして解釈され、RLフィールド3057Aが0(VSIZE3057.A2)を含む場合、ベータフィールド3054の残り(EVEXバイト3、ビット[6−5]−S2−1)は、ベクトル長フィールド3059B(EVEXバイト3、ビット[6−5]−L1−0)として解釈される。U=1、かつMODフィールド3142が00、01または10を含む(メモリアクセス演算を意味する)とき、ベータフィールド3054(EVEXバイト3、ビット[6:4]−SSS)は、ベクトル長フィールド3059B(EVEXバイト3、ビット[6−5]−L1−0)およびブロードキャストフィールド3057B(EVEXバイト3、ビット[4]−B)として解釈される。
[例示的なレジスタアーキテクチャ]
図32は、本開示の一実施形態による、レジスタアーキテクチャ3200のブロック図である。図示される実施形態には、512ビット幅の32個のベクトルレジスタ3210がある。これらのレジスタは、zmm0〜zmm31として参照される。下位16個のzmmレジスタの下位256ビットは、レジスタymm0〜16上にオーバーレイされる。下位16個のzmmレジスタの下位128ビット(ymmレジスタの下位128ビット)は、レジスタxmm0〜15上にオーバーレイされる。特定ベクトル向け命令フォーマット3100は、これらのオーバーレイされたレジスタファイルに対し、以下の表に示されるように動作する。
Figure 2021108102
換言すると、ベクトル長フィールド3059Bは、最大長さと1つまたは複数の他のより短い長さとの間から選択し、ここで、そのようなより短い長さのそれぞれは、先述の長さの半分の長さであり、ベクトル長フィールド3059Bを有していない命令テンプレートは、最大のベクトル長に対して動作する。さらに、一実施形態において、特定ベクトル向け命令フォーマット3100のクラスB命令テンプレートは、パックドもしくはスカラ単精度/倍精度浮動小数点データ、およびパックドもしくはスカラ整数データに対して動作する。スカラ演算は、zmm/ymm/xmmレジスタ内の最下位のデータ要素位置で実行される演算である。上位のデータ要素位置は、それらが命令前と同じままであるか、または実施形態に応じてゼロにされるかのいずれかである。
書き込みマスクレジスタ3215:図示された実施形態では、それぞれが64ビットサイズの8つの書き込みマスクレジスタ(k0〜k7)が存在する。代替的な実施形態において、書き込みマスクレジスタ3215は、16ビットのサイズである。前述したように、本開示の一実施形態において、ベクトルマスクレジスタk0は、書き込みマスクとして用いられることができず、通常k0を示すエンコーディングが書き込みマスクに用いられる場合、0xFFFFのハードウェアに組み込まれる書き込みマスクを選択することで、その命令に対する書き込みマスキングを効果的に無効にする。
汎用レジスタ3225:図示された実施形態では、メモリオペランドをアドレス指定するために既存のx86アドレッシングモードと共に使用される16個の64ビット汎用レジスタが存在する。これらのレジスタは、RAX、RBX、RCX、RDX、RBP、RSI、RDI、RSP、およびR8〜R15の名前で参照される。
MMXパックド整数フラットレジスタファイル3250がエイリアスされる、スカラ浮動小数点スタックレジスタファイル(x87スタック)3245:図示される実施形態では、x87スタックは、x87命令セット拡張子を使用して32/64/80ビット浮動小数点データに対してスカラ浮動小数点演算を実行するために使用される8要素スタックである。MMXレジスタは、64ビットパックド整数データに対して演算を実行するため、ならびにMMXレジスタとXMMレジスタとの間で実行されるいくつかの演算のためにオペランドを保持するために、使用される。
本開示の代替的な実施形態は、より広いまたはより狭いレジスタを用いてよい。さらに、本開示の代替的な実施形態は、より多くの、より少ない、または異なるレジスタファイルおよびレジスタを用いてよい。
[例示的なコアアーキテクチャ、プロセッサ、およびコンピュータアーキテクチャ]
プロセッサコアは、異なる方法で、異なる目的のために、異なるプロセッサにおいて実装されてよい。例えば、そのようなコアの実装形態には、1)汎用コンピューティング向けの汎用インオーダコア、2)汎用コンピューティング向けの高性能汎用アウトオブオーダコア、3)主にグラフィックスおよび/または科学(スループット)コンピューティング向けの専用コアが含まれてもよい。異なるプロセッサの実装形態には、1)汎用コンピューティング向けの1つもしくは複数の汎用インオーダコアおよび/または汎用コンピューティング向けの1つもしくは複数の汎用アウトオブオーダコアを含むCPU、ならびに2)主にグラフィックスおよび/または科学(スループット)向けの1つまたは複数の専用コアを含むコプロセッサが含まれてもよい。そのような異なるプロセッサは異なるコンピュータシステムアーキテクチャをもたらし、そのようなコンピュータシステムアーキテクチャには、1)CPUとは別個のチップ上のコプロセッサ、2)CPUと同じパッケージ内の別個のダイ上のコプロセッサ、3)CPUと同一のダイ上のコプロセッサ(この場合、そのようなコプロセッサは、統合グラフィックスおよび/または科学(スループット)ロジックなどの専用ロジック、または専用コアと称されることがある)、ならびに4)同一のダイ上に(アプリケーションコアまたはアプリケーションプロセッサと称されることもある)説明されたCPU、上述したコプロセッサ、および追加の機能を含んでもよいシステムオンチップが含まれてもよい。例示的なコアアーキテクチャが次に説明され、例示的なプロセッサおよびコンピュータアーキテクチャの説明が続く。
[例示的なコアアーキテクチャ]
[インオーダおよびアウトオブオーダコアのブロック図]
図33Aは、本開示の実施形態による、例示的なインオーダパイプラインおよび例示的なレジスタリネーミング、アウトオブオーダ発行/実行パイプラインの両方を示すブロック図である。図33Bは、本開示の実施形態による、インオーダアーキテクチャコアの例示的な実施形態と、プロセッサに含まれる例示的なレジスタリネーミングアウトオブオーダ発行/実行アーキテクチャコアとの両方を示すブロック図である。図33Aおよび図33Bの実線ボックスはインオーダパイプラインおよびインオーダコアを示し、破線ボックスの任意選択の追加は、レジスタリネーミング、アウトオブオーダ発行/実行パイプラインおよびコアを示す。インオーダの態様がアウトオブオーダの態様のサブセットであると仮定して、アウトオブオーダの態様が説明される。
図33Aにおいて、プロセッサパイプライン3300は、フェッチ段階3302、長さデコード段階3304、デコード段階3306、割り当て段階3308、リネーミング段階3310、スケジューリング(ディスパッチまたは発行としても知られる)段階3312、レジスタ読み取り/メモリ読み取り段階3314、実行段階3316、ライトバック/メモリ書き込み段階3318、例外処理段階3322およびコミット段階3324を含む。
図33Bは、実行エンジンユニット3350に結合されるフロントエンドユニット3330を含むプロセッサコア3390を示し、それらの両方が、メモリユニット3370に結合される。コア3390は、縮小命令セットコンピューティング(RISC)コア、複合命令セットコンピューティング(CISC)コア、超長命令語(VLIW)コア、またはハイブリッドもしくは代替的なコアタイプであってもよい。さらに別の選択肢として、コア3390は、例えば、ネットワークまたは通信コア、圧縮エンジン、コプロセッサコア、汎用コンピューティンググラフィックス処理ユニット(GPGPU)コアまたはグラフィックスコアなどの専用コアであってよい。
フロントエンドユニット3330は、命令キャッシュユニット3334に結合された分岐予測ユニット3332を含み、命令キャッシュユニット3334は、命令変換ルックアサイドバッファ(TLB)3336に結合され、TLB3336は、命令フェッチユニット3338に結合され、命令フェッチユニット3338は、デコードユニット3340に結合される。デコードユニット3340(例えば、デコード回路)は命令(例えば、マクロ命令)をデコードし、かつ、1つまたは複数のマイクロ演算、マイクロコードエントリポイント、マイクロ命令、他の命令または他の制御信号を出力として生成してよく、これらは元の命令からデコードされ、またはそうでなければ元の命令を反映し、または元の命令から導出される。デコードユニット3340は、様々な異なるメカニズムを用いて実装されてよい。好適なメカニズムの例には、ルックアップテーブル、ハードウェア実装、プログラマブルロジックアレイ(PLA)、マイクロコード読み取り専用メモリ(ROM)などが含まれるが、それらに限定されない。一実施形態において、コア3390は、マイクロコードROM、または、特定のマクロ命令に対するマイクロコードを格納する(例えば、デコードユニット3340における、またはそうでなければ、フロントエンドユニット3330内の)他の媒体を含む。デコードユニット3340は、実行エンジンユニット3350内のリネーム/アロケータユニット3352に結合される。
実行エンジンユニット3350は、リタイアメントユニット3354および1つまたは複数のスケジューラユニット3356のセットに結合されるリネーム/アロケータユニット3352を含む。スケジューラユニット3356は、予約ステーション、中央命令ウィンドウなどを含む任意の数の異なるスケジューラを表す。スケジューラユニット3356は、物理レジスタファイルユニット3358に結合されている。物理レジスタファイルユニット3358のそれぞれは、1つまたは複数の物理レジスタファイルを表し、そのそれぞれ異なる物理レジスタファイルは、例えば、スカラ整数、スカラ浮動小数点、パックド整数、パックド浮動小数点、ベクトル整数、ベクトル浮動小数点、ステータス(例えば、実行される次の命令のアドレスである命令ポインタ)など、1つまたは複数の異なるデータタイプを格納する。一実施形態において、物理レジスタファイルユニット3358は、ベクトルレジスタユニット、書き込みマスクレジスタユニットおよびスカラレジスタユニットを有する。これらのレジスタユニットは、アーキテクチャのベクトルレジスタ、ベクトルマスクレジスタおよび汎用レジスタを提供し得る。物理レジスタファイルユニット3358は、(例えば、リオーダバッファおよびリタイアメントレジスタファイルを用いる、将来のファイル、履歴バッファおよびリタイアメントレジスタファイルを用いる、レジスタマップおよびレジスタのプールを用いるなどして)レジスタリネーミングおよびアウトオブオーダ実行が実装され得る様々な態様を示すために、リタイアメントユニット3354が重なっている。リタイアメントユニット3354および物理レジスタファイルユニット3358は、実行クラスタ3360に結合されている。実行クラスタ3360は、1つまたは複数の実行ユニット3362のセット(例えば、実行回路)および1つまたは複数のメモリアクセスユニット3364のセットを含む。実行ユニット3362は、様々な演算(例えば、シフト、加算、減算、乗算)を様々なタイプのデータ(例えば、スカラ浮動小数点、パックド整数、パックド浮動小数点、ベクトル整数、ベクトル浮動小数点)に実行してよい。いくつかの実施形態では、特定の機能または機能のセットに専用の複数の実行ユニットを含んでよく、他の実施形態では、1つの実行ユニットのみ、または、すべての機能をすべてが実行する複数の実行ユニットを含んでよい。特定実施形態では、特定のタイプのデータ/演算に対して別個のパイプラインを作成するので(例えば、スカラ整数パイプライン、スカラ浮動小数点/パックド整数/パックド浮動小数点/ベクトル整数/ベクトル浮動小数点パイプライン、および/または、メモリアクセスパイプラインが、それぞれ固有のスケジューラユニット、物理レジスタファイルユニット、および/または、実行クラスタを有し、また別個のメモリアクセスパイプラインの場合、特定の実施形態が実装され、その実施形態では、このパイプラインの実行クラスタのみがメモリアクセスユニット3364を有する)、スケジューラユニット3356、物理レジスタファイルユニット3358および実行クラスタ3360は、場合によっては複数のものとして示されている。別個のパイプラインが用いられる場合、これらのパイプラインのうちの1つまたは複数はアウトオブオーダ発行/実行であってよく、残りはインオーダであってよいことも理解されたい。
メモリアクセスユニット3364のセットは、メモリユニット3370に結合され、メモリユニット3370は、レベル2(L2)キャッシュユニット3376に結合されるデータキャッシュユニット3374に結合されるデータTLBユニット3372を含む。例示的な一実施形態では、メモリアクセスユニット3364が、ロードユニット、ストアアドレスユニット、およびストアデータユニットを含んでよく、それらのそれぞれが、メモリユニット3370内のデータTLBユニット3372に結合される。命令キャッシュユニット3334は、メモリユニット3370内のレベル2(L2)キャッシュユニット3376にさらに結合される。L2キャッシュユニット3376は、1つまたは複数の他のレベルのキャッシュに結合され、最終的にはメインメモリに結合される。
例として、例示的なレジスタリネーミング、アウトオブオーダ発行/実行コアアーキテクチャは、以下のようにパイプライン3300を実装してよい。1)命令フェッチ3338がフェッチおよび長さデコード段階3302および3304を実行し、2)デコードユニット3340がデコード段階3306を実行し、3)リネーム/アロケータユニット3352が割り当て段階3308およびリネーミング段階3310を実行し、4)スケジューラユニット3356がスケジュール段階3312を実行し、5)物理レジスタファイルユニット3358およびメモリユニット3370がレジスタ読み取り/メモリ読み取り段階3314を実行して、実行クラスタ3360が実行段階3316を実行し、6)メモリユニット3370および物理レジスタファイルユニット3358がライトバック/メモリ書き込み段階3318を実行し、7)様々なユニットが例外処理段階3322に関連してよく、8)リタイアメントユニット3354および物理レジスタファイルユニット3358がコミット段階3324を実行する。
コア3390は、本明細書で説明された命令を含む、1つまたは複数の命令セット(例えば、(より新しいバージョンで追加されたいくつかの拡張を有する)x86命令セット、カリフォルニア州サニーベールのMIPS TechnologiesのMIPS命令セット、カリフォルニア州サニーベールのARM Holdingsの(NEONなどのオプションの追加拡張を有する)ARM命令セット)をサポートすることができる。一実施形態において、コア3390は、パックドデータ命令セット拡張(例えば、AVX1、AVX2)をサポートするロジックを含み、これによって、多くのマルチメディアアプリケーションにより用いられる演算がパックドデータを用いて実行されることを可能にする。
コアはマルチスレッディング(演算またはスレッドの2つ以上の並列セットを実行)をサポートしてよく、タイムスライスマルチスレッディング、同時マルチスレッディング(物理コアが同時にマルチスレッディングしているスレッドのそれぞれに対して、単一の物理コアが論理コアを提供する)、またはこれらの組み合わせ(例えば、インテル(登録商標)ハイパースレッディングテクノロジなどにおけるタイムスライスフェッチおよびデコードならびにその後の同時マルチスレッディング)を含む様々な態様でサポートしてよいことを理解されたい。
レジスタリネーミングがアウトオブオーダ実行との関連で説明されているが、レジスタリネーミングはインオーダアーキテクチャにおいて用いられてよいことを理解されたい。示されたプロセッサの実施形態はまた、別個の命令キャッシュユニット3334およびデータキャッシュユニット3374、ならびに共有L2キャッシュユニット3376を含むが、代替的な実施形態は、命令およびデータの両方に対して、例えばレベル1(L1)内部キャッシュまたは複数のレベルの内部キャッシュなど、単一の内部キャッシュを有してもよい。いくつかの実施形態において、システムは、内部キャッシュと、コアおよび/またはプロセッサの外部にある外部キャッシュとの組み合わせを含んでもよい。あるいは、キャッシュのすべてがコアおよび/またはプロセッサの外部にあってもよい。
[具体的な例示的インオーダコアアーキテクチャ]
図34Aおよび図34Bは、より具体的な例示的インオーダコアアーキテクチャのブロック図を示し、ここで、コアは、チップ内のいくつかの論理ブロック(同じタイプおよび/または異なるタイプの他のコアを含む)のうちの1つになるであろう。論理ブロックは、高帯域幅相互接続ネットワーク(例えば、リングネットワーク)を通じて、アプリケーションに応じて、いくつかの固定機能ロジック、メモリI/Oインタフェースおよび他の必要なI/Oロジックと通信する。
図34Aは、本開示の実施形態による、オンダイ相互接続ネットワーク3402へのその接続およびレベル2(L2)キャッシュ3404のそのローカルサブセットを伴う、単一のプロセッサコアのブロック図である。一実施形態において、命令デコードユニット3400は、パックドデータ命令セット拡張を有するx86命令セットをサポートする。L1キャッシュ3406は、キャッシュメモリへの低レイテンシアクセスがスカラユニットおよびベクトルユニットに入ることを可能にする。一実施形態では、(設計を簡略化するために)、スカラユニット3408およびベクトルユニット3410は、別個のレジスタセット(それぞれ、スカラレジスタ3412およびベクトルレジスタ3414)を用いており、それらの間で転送されるデータは、メモリに書き込まれ、次に、レベル1(L1)キャッシュ3406からリードバックされるが、本開示の代替的な実施形態では、異なるアプローチ(例えば、単一のレジスタセットを用いる、または、書き込まれることもリードバックされることもなく2つのレジスタファイル間でデータが転送されることを可能にする通信経路を含む)を用いてよい。
L2キャッシュ3404のローカルサブセットは、プロセッサコアごとに1つの別個のローカルサブセットに分割されるグローバルL2キャッシュの一部である。各プロセッサコアは、L2キャッシュ3404の自身のローカルサブセットへの直接のアクセス経路を有する。プロセッサコアにより読み出されたデータは、L2キャッシュサブセット3404に格納され、他のプロセッサコアが固有のローカルL2キャッシュサブセットにアクセスするのと並行して、迅速にアクセスされ得る。プロセッサコアにより書き込まれたデータは、自身のL2キャッシュサブセット3404に格納され、必要に応じて他のサブセットからフラッシュされる。リングネットワークは、共有データのコヒーレンシを保証する。リングネットワークは、双方向性であり、プロセッサコア、L2キャッシュおよび他の論理ブロックなどのエージェントが、チップ内で互いに通信することを可能にする。各リングデータ経路は、一方向当たり1012ビット幅である。
図34Bは、本開示の実施形態による、図34A中のプロセッサコアの一部の拡大図である。図34Bは、L1キャッシュ3404の一部であるL1データキャッシュ3406Aと、ベクトルユニット3410およびベクトルレジスタ3414に関するさらなる詳細とを含む。具体的には、ベクトルユニット3410は16幅のベクトル処理ユニット(VPU)(16幅のALU3428を参照)であり、整数命令、単精度浮動小数点命令、および倍精度浮動小数点命令のうちの1つまたは複数を実行する。VPUは、スウィズルユニット3420を用いたレジスタ入力のスウィズル処理、数値変換ユニット3422A〜Bを用いた数値変換、ならびに複製ユニット3424を用いたメモリ入力の複製をサポートする。書き込みマスクレジスタ3426は、結果として生じるベクトル書き込みをプレディケートすることを可能にする。
図35は、本開示の実施形態による、1つより多いコアを有してよい、統合メモリコントローラを有してよい、統合グラフィックスを有してよい、プロセッサ3500のブロック図である。図35の実線ボックスは、単一のコア3502A、システムエージェント3510、1つまたは複数のバスコントローラユニット3516のセットを有するプロセッサ3500を示し、任意選択の追加の破線ボックスは、複数のコア3502A〜N、システムエージェントユニット3510内にある1つまたは複数の統合メモリコントローラユニット3514のセット、および専用ロジック3508を有する代替のプロセッサ3500を示す。
従って、プロセッサ3500の異なる実装は、1)専用ロジック3508が統合グラフィックスおよび/または科学(スループット)ロジック(1つまたは複数のコアを含み得る)であり、コア3502A〜Nが1つまたは複数の汎用コア(例えば、汎用インオーダコア、汎用アウトオブオーダコア、この2つの組み合わせ)であるCPU、2)コア3502A〜Nが主にグラフィックスおよび/または科学(スループット)向けの多数の専用コアであるコプロセッサ、および、3)コア3502A〜Nが多数の汎用インオーダコアであるコプロセッサを含んでよい。従って、プロセッサ3500は、汎用プロセッサ、コプロセッサまたは専用プロセッサ、例えば、ネットワークまたは通信プロセッサ、圧縮エンジン、グラフィックスプロセッサ、GPGPU(汎用グラフィックス処理ユニット)、高スループットの多集積コア(MIC)コプロセッサ(30またはそれより多いコアを含む)、組み込みプロセッサなどであってよい。プロセッサは、1つまたは複数のチップ上に実装されてよい。プロセッサ3500は、例えば、BiCMOS、CMOS、またはNMOSなどの多数のプロセス技術のいずれかを用いる1つまたは複数の基板の一部であってよく、および/または当該基板上に実装されてもよい。
メモリ階層には、コア内の1つまたは複数のレベルのキャッシュ、共有キャッシュユニット3506のセットあるいは1つまたは複数の共有キャッシュユニット3506、および統合メモリコントローラユニット3514のセットに結合された外部メモリ(図示せず)が含まれる。共有キャッシュユニット3506のセットは、レベル2(L2)、レベル3(L3)、レベル4(L4)、または他のレベルのキャッシュなどの、1つまたは複数の中間レベルのキャッシュ、ラストレベルキャッシュ(LLC)、および/またはこれらの組み合わせを含んでよい。一実施形態では、リングベースの相互接続ユニット3512が、統合グラフィックスロジック3508、共有キャッシュユニット3506のセット、およびシステムエージェントユニット3510/統合メモリコントローラユニット3514を相互接続するが、代替的な実施形態は、このようなユニットを相互接続するのに任意の数の既知の技法を用いてよい。一実施形態において、1つまたは複数のキャッシュユニット3506と、コア3502A〜Nとの間でコヒーレンシが保持される。
いくつかの実施形態では、コア3502A〜Nのうちの1つまたは複数がマルチスレッディング可能である。システムエージェント3510は、コア3502A〜Nを調整し動作させるそれらのコンポーネントを含む。システムエージェントユニット3510は、例えば、電力制御ユニット(PCU)およびディスプレイユニットを含んでよい。PCUは、コア3502A〜Nおよび統合グラフィックスロジック3508の電力状態を調整するのに必要なロジックおよびコンポーネントであってよく、または当該ロジックおよび当該コンポーネントを含んでもよい。ディスプレイユニットは、1つまたは複数の外部接続されたディスプレイを駆動するためのものである。
コア3502A〜Nは、アーキテクチャ命令セットに関して同種でも異種でもよい。すなわち、コア3502A〜Nのうち2つまたはそれより多くは同じ命令セットを実行することが可能であってよいが、他のものはその命令セットのサブセットまたは異なる命令セットだけを実行することが可能であってもよい。
[例示的なコンピュータアーキテクチャ]
図36〜39は、例示的なコンピュータアーキテクチャのブロック図である。ラップトップ、デスクトップ、ハンドヘルドPC、パーソナルデジタルアシスタント、エンジニアリングワークステーション、サーバ、ネットワークデバイス、ネットワークハブ、スイッチ、組み込みプロセッサ、デジタル信号プロセッサ(DSP)、グラフィックスデバイス、ビデオゲームデバイス、セットトップボックス、マイクロコントローラ、携帯電話、ポータブルメディアプレーヤ、ハンドヘルドデバイス、および様々な他の電子デバイスについて当該技術分野において既知の他のシステム設計および構成もまた好適である。一般に、本明細書で開示されたプロセッサおよび/または他の実行ロジックを組み込むことが可能な多様なシステムまたは電子デバイスが一般に好適である。
ここで、図36を参照すると、本開示の一実施形態によるシステム3600のブロック図が示される。システム3600は、1つまたは複数のプロセッサ3610、3615を含んでよく、これらはコントローラハブ3620に結合されている。一実施形態において、コントローラハブ3620は、グラフィックスメモリコントローラハブ(GMCH)3690および入出力ハブ(IOH)3650(別個のチップ上にあり得る)を含む。GMCH3690は、メモリおよびグラフィックスコントローラを含み、これらにメモリ3640およびコプロセッサ3645が結合される。IOH3650は、入出力(I/O)デバイス3660をGMCH3690に結合する。代替的に、メモリおよびグラフィックスコントローラのうち一方または両方は、(本明細書において説明されるように)プロセッサ内に統合され、メモリ3640およびコプロセッサ3645は、プロセッサ3610と、IOH3650を有する単一チップ内のコントローラハブ3620とに直接結合される。メモリ3640は、例えば、実行されるとプロセッサに本開示の任意の方法を実行させるコードを格納する、行列アクセラレーションコード3640Aを備えてもよい。
任意選択的な性質の追加のプロセッサ3615が、破線を用いて図36に示される。各プロセッサ3610、3615は、本明細書で説明される処理コアのうちの1つまたは複数を含んでよく、何らかのバージョンのプロセッサ3500であってよい。
メモリ3640は、例えば、ダイナミックランダムアクセスメモリ(DRAM)、相変化メモリ(PCM)、またはこの2つの組み合わせであってよい。少なくとも1つの実施形態では、コントローラハブ3620は、フロントサイドバス(FSB)などのマルチドロップバス、クイックパス相互接続(QPI)などのポイントツーポイントインタフェース、または同様の接続3695を介してプロセッサ3610、3615と通信する。
一実施形態では、コプロセッサ3645が、専用プロセッサ、例えば、高スループットMICプロセッサ、ネットワークまたは通信プロセッサ、圧縮エンジン、グラフィックスプロセッサ、GPGPU、組み込みプロセッサなどである。一実施形態では、コントローラハブ3620は統合グラフィックスアクセラレータを含んでよい。
物理リソース3610、3615の間には、アーキテクチャ特性、マイクロアーキテクチャ特性、熱的特性、電力消費特性などを含む幅広い価値基準に関して、様々な差異が存在し得る。
一実施形態では、プロセッサ3610が、一般的なタイプのデータ処理動作を制御する命令を実行する。命令内には、コプロセッサ命令が埋め込まれていてもよい。プロセッサ3610は、これらのコプロセッサ命令を、付属のコプロセッサ3645が実行すべきタイプの命令であると認識する。従って、プロセッサ3610は、これらのコプロセッサ命令(またはコプロセッサ命令を表す制御信号)をコプロセッサバスまたは他の相互接続にてコプロセッサ3645に発行する。コプロセッサ3645は、受信したコプロセッサ命令を受け入れて実行する。
ここで、図37を参照すると、本開示の一実施形態による、第1のより具体的な例示的システム3700のブロック図が示される。図37に示されるように、マルチプロセッサシステム3700はポイントツーポイント相互接続システムであり、ポイントツーポイント相互接続3750を介して結合される第1のプロセッサ3770および第2のプロセッサ3780を含む。プロセッサ3770および3780のそれぞれは、何らかのバージョンのプロセッサ3500であってよい。本開示の一実施形態において、プロセッサ3770および3780は、それぞれ、プロセッサ3610および3615であり、コプロセッサ3738は、コプロセッサ3645である。別の実施形態において、プロセッサ3770および3780はそれぞれプロセッサ3610およびコプロセッサ3645である。
プロセッサ3770および3780は、それぞれ、統合メモリコントローラ(IMC)ユニット3772および3782を含むように示されている。プロセッサ3770はまた、そのバスコントローラユニットの一部として、ポイントツーポイント(P−P)インタフェース3776および3778を含み、同様に第2のプロセッサ3780はP−Pインタフェース3786および3788を含む。プロセッサ3770、3780は、ポイントツーポイント(P−P)インタフェース3750を介し、P−Pインタフェース回路3778、3788を用いて情報を交換してよい。図37に示されるように、IMC3772および3782は、プロセッサをそれぞれのメモリ、すなわちメモリ3732およびメモリ3734に結合する。これらのメモリは、それぞれのプロセッサにローカルに取り付けられたメインメモリの部分であってよい。
プロセッサ3770、3780はそれぞれ、個々のP−Pインタフェース3752、3754を介し、ポイントツーポイントインタフェース回路3776、3794、3786、3798を用いてチップセット3790と情報を交換してよい。チップセット3790は、任意選択で、高性能インタフェース3739を介してコプロセッサ3738と情報を交換してもよい。一実施形態では、コプロセッサ3738は、例えば、高スループットMICプロセッサ、ネットワークまたは通信プロセッサ、圧縮エンジン、グラフィックスプロセッサ、GPGPU、組み込みプロセッサなどの専用プロセッサである。
共有キャッシュ(図示せず)は、プロセッサまたは両方のプロセッサの外部のいずれかに含まれてよく、さらに、P−P相互接続を介してプロセッサと接続されてよく、その結果、プロセッサが低電力モードに置かれている場合、いずれかまたは両方のプロセッサのローカルキャッシュ情報は、共有キャッシュに格納されてよい。
チップセット3790は、インタフェース3796を介して第1のバス3716に結合されてよい。一実施形態において、第1のバス3716はペリフェラルコンポーネントインターコネクト(PCI)バス、またはPCI Expressバスもしくは別の第3世代I/O相互接続バスなどのバスであってよいが、本開示の範囲はそのようには限定されない。
図37に示されるように、様々なI/Oデバイス3714が、第1のバス3716を第2のバス3720に結合するバスブリッジ3718と共に、第1のバス3716に結合されてよい。一実施形態において、1つまたは複数の追加のプロセッサ3715が第1のバス3716に結合される。追加のプロセッサとは、コプロセッサ、高スループットMICプロセッサ、GPGPUのアクセラレータ(例えば、グラフィックスアクセラレータ、またはデジタル信号処理(DSP)ユニットなど)、フィールドプログラマブルゲートアレイ、または任意の他のプロセッサなどである。一実施形態では、第2のバス3720はローピンカウント(LPC)バスであってよい。一実施形態において、例えば、キーボードおよび/またはマウス3722、通信デバイス3727、ならびに命令/コードおよびデータ3730を含み得るディスクドライブまたは他の大容量ストレージデバイスなどのストレージユニット3728を含む様々なデバイスが、第2のバス3720に結合されてよい。さらに、オーディオI/O3724が第2のバス3720に結合されてよい。他のアーキテクチャも可能であることに留意されたい。例えば、図37のポイントツーポイントアーキテクチャの代わりに、システムがマルチドロップバスアーキテクチャまたは他のそのようなアーキテクチャを実装してよい。
ここで、図38を参照すると、本開示の一実施形態による、第2のより具体的な例示的システム3800のブロック図が示される。図37および図38内の同様の要素には同様の参照符号が付されており、図37の特定の態様が、図38の他の態様を不明瞭にするのを避けるために、図38から省略されている。
図38は、プロセッサ3770、3780が、統合メモリを含み、またI/O制御ロジック(「CL」)3772および3782をそれぞれ含んでよいことを示す。従って、CL3772、3782は統合メモリコントローラユニットを含み、かつI/O制御ロジックを含む。図38は、メモリ3732、3734がCL3772、3782に結合されているだけでなく、I/Oデバイス3814も、制御ロジック3772、3782に結合されていることを示している。レガシI/Oデバイス3815がチップセット3790に結合されている。
ここで、図39を参照すると、本開示の一実施形態によるSoC3900のブロック図が示される。図35と同様の要素には同様の参照符号が付されている。また、破線ボックスは、より高度なSoC上の任意選択的な機能である。図39において、相互接続ユニット3902が、1つまたは複数のコア3502A−Nおよび共有キャッシュユニット3506のセットを含むアプリケーションプロセッサ3910と、システムエージェントユニット3510と、バスコントローラユニット3516と、統合メモリコントローラユニット3514と、統合グラフィックスロジック、イメージプロセッサ、オーディオプロセッサ、およびビデオプロセッサを含み得るコプロセッサ3920のセットあるいは1つまたは複数のコプロセッサ3920と、スタティックランダムアクセスメモリ(SRAM)ユニット3930と、ダイレクトメモリアクセス(DMA)ユニット3932と、1つまたは複数の外部ディスプレイに結合するためのディスプレイユニット3940とに結合されている。一実施形態において、コプロセッサ3920は、例えば、ネットワークプロセッサまたは通信プロセッサ、圧縮エンジン、GPGPU、高スループットMICプロセッサ、組み込みプロセッサなどの専用プロセッサを含む。
本明細書に開示される(例えば、メカニズムの)実施形態は、ハードウェア、ソフトウェア、ファームウェアまたはそのような実装アプローチの組み合わせで実装されてよい。本開示の実施形態では、少なくとも1つのプロセッサ、ストレージシステム(揮発性および不揮発性メモリおよび/またはストレージ要素を含む)、少なくとも1つの入力デバイスおよび少なくとも1つの出力デバイスを有するプログラマブルシステム上で実行されるコンピュータプログラムまたはプログラムコードとして実装されてよい。
図37に示されるコード3730などのプログラムコードは、本明細書で説明される機能を実行し、出力情報を生成する入力命令に適用されてよい。出力情報は、1つまたは複数の出力デバイスに既知の方式で適用されてよい。本願の目的のために、処理システムは、例えば、デジタル信号プロセッサ(DSP)、マイクロコントローラ、特定用途向け集積回路(ASIC)またはマイクロプロセッサなどのプロセッサを有する任意のシステムを含む。
プログラムコードは、処理システムと通信するために、高水準手続き型またはオブジェクト指向のプログラミング言語で実装されてもよい。プログラムコードはまた、所望の場合、アセンブリ言語または機械語で実装されてもよい。実際には、本明細書で説明されたメカニズムは、いかなる特定のプログラミング言語にも範囲が限定されない。いずれの場合でも、言語は、コンパイル型言語またはインタープリタ型言語であってよい。
少なくとも1つの実施形態の1つまたは複数の態様は、プロセッサ内の様々なロジックを表す機械可読媒体に格納された代表的命令によって実装されてもよく、これらの代表的命令は、機械によって読み取られると、機械に本明細書で説明された技法を実行するようにロジックを組み立てさせる。「IPコア」として知られるそのような表現は、有形の機械可読媒体に記憶され、実際にロジックまたはプロセッサを作成する製造機械にロードするために様々な顧客または製造設備に供給されてもよい。
そのような機械可読記憶媒体には、ハードディスク、フロッピーディスク、光ディスク、コンパクトディスク読み取り専用メモリ(CD−ROM)、コンパクトディスクリライタブル(CD−RW)、および光磁気ディスクを含む任意の他のタイプのディスク、読み取り専用メモリ(ROM)、ダイナミックランダムアクセスメモリ(DRAM)、スタティックランダムアクセスメモリ(SRAM)などのランダムアクセスメモリ(RAM)、消去可能プログラマブル読み取り専用メモリ(EPROM)、フラッシュメモリ、電気的消去可能プログラマブル読み取り専用メモリ(EEPROM)、相変化メモリ(PCM)などの半導体デバイス、磁気カードもしくは光学式カード、または電子命令を記憶するのに好適な任意の他のタイプの媒体などの記憶媒体を含む、機械またはデバイスによって製造または形成された物品の非一時的な有形の構成が含まれてもよいが、それらに限定されない。
従って、本開示の実施形態は、命令を含み、または本明細書で説明される構造、回路、装置、プロセッサおよび/またはシステムの特徴を定義するハードウェア記述言語(HDL)などの設計データを含む、非一時的な有形の機械可読媒体も含む。そのような実施形態は、また、プログラム製品と称され得る。
[エミュレーション(バイナリ変換、コードモーフィングなどを含む)]
場合によっては、命令をソース命令セットからターゲット命令セットに変換するのに、命令コンバータが用いられてよい。例えば、命令コンバータは、命令をコアによって処理されるべき1つまたは複数の他の命令に(例えば、静的バイナリ変換、動的コンパイルを含む動的バイナリ変換を使用して)変換し、モーフィングし、エミュレートし、または別の方法で変換することができる。命令コンバータは、ソフトウェア、ハードウェア、ファームウェア、またはそれらの組み合わせで実装されてもよい。命令コンバータは、オンプロセッサ、オフプロセッサ、または一部がオンプロセッサで一部がオフプロセッサであってよい。
図40は、本開示の実施形態による、ソース命令セット内のバイナリ命令を、ターゲット命令セット内のバイナリ命令に変換するソフトウェア命令コンバータの使用を対比するブロック図である。図示された実施形態において、命令コンバータはソフトウェア命令コンバータであるが、代替的に、命令コンバータは、ソフトウェア、ファームウェア、ハードウェア、またはこれらの様々な組み合わせで実装されてもよい。図40は、高水準言語4002のプログラムがx86コンパイラ4004を用いてコンパイルされ、少なくとも1つのx86命令セットコアを持つプロセッサ4016によってネイティブに実行され得るx86バイナリコード4006を生成し得ることを示す。少なくとも1つのx86命令セットコアを持つプロセッサ4016は、少なくとも1つのx86命令セットコアを持つインテル(登録商標)プロセッサと実質的に同一の結果を得るべく、(1)インテル(登録商標)x86命令セットコアの命令セットのかなりの部分、または(2)少なくとも1つのx86命令セットコアを持つインテル(登録商標)プロセッサ上での実行を目的とするアプリケーションまたは他のソフトウェアのオブジェクトコードバージョン、を互換的に実行またはそれ以外の方法で処理することによって、少なくとも1つのx86命令セットコアを持つインテル(登録商標)プロセッサと実質的に同一の諸機能を実行できる任意のプロセッサを表している。x86コンパイラ4004は、追加のリンク処理の有無にかかわらず、少なくとも1つのx86命令セットコアを持つプロセッサ4016上で実行可能なx86バイナリコード4006(例えば、オブジェクトコード)を生成するように動作可能なコンパイラを表す。同様に、図40は、高水準言語4002のプログラムが、代替的な命令セットバイナリコード4010を生成する代替的な命令セットコンパイラ4008を使用してコンパイルされ得ることを示しており、当該代替的な命令セットバイナリコード4010は、少なくとも1つのx86命令セットコアを持たないプロセッサ4014(例えば、カリフォルニア州サニーベールのMIPS TechnologiesのMIPS命令セットを実行する、および/または、カリフォルニア州サニーベールのARM HoldingsのARM命令セットを実行するコアを持つプロセッサ)によってネイティブに実行されてよい。命令コンバータ4012は、x86バイナリコード4006を、x86命令セットコアを持たないプロセッサ4014によってネイティブに実行され得るコードに変換するために用いられる。この変換されたコードは、代替的な命令セットバイナリコード4010と同じである可能性が低い。なぜなら、この変換が可能な命令コンバータは、製造が困難だからである。しかしながら、変換されたコードは、一般的な演算を実現し、代替的な命令セットからの命令で構成される。従って、命令コンバータ4012は、ソフトウェア、ファームウェア、ハードウェアまたはこれらの組み合わせを表し、それらは、エミュレーション、シミュレーションまたは任意の他の処理を介して、x86命令セットプロセッサまたはコアを有していないプロセッサまたは他の電子デバイスが、x86バイナリコード4006を実行するのを可能にする。
(項目1) 融合乗累算回路の2次元グリッドを含む行列演算アクセラレータ回路と、
上記行列演算アクセラレータ回路に結合された第1の入力2次元行列を表す第1の複数のレジスタと、
上記行列演算アクセラレータ回路に結合された第2の入力2次元行列を表す第2の複数のレジスタと、
上記行列演算アクセラレータ回路に結合されたハードウェアプロセッサコアの、単一の命令をデコードされた単一の命令にデコードするデコーダであって、上記単一の命令は、結果ストレージを識別するフィールドを含む、デコーダと、
上記ハードウェアプロセッサコアの実行回路であって、上記デコードされた単一の命令を実行して、
上記融合乗累算回路の2次元グリッドの第1のバッファに、上記第1の複数のレジスタからの上記第1の入力2次元行列をロードし、
上記融合乗累算回路の2次元グリッドの第2のバッファが、上記第2の入力2次元行列と同一である直前の入力2次元行列を記憶しているかをチェックし、
上記融合乗累算回路の2次元グリッドの上記第2のバッファが、前の命令の実行から、上記第2の入力2次元行列と同一である上記直前の入力2次元行列を記憶している場合、
上記前の命令および上記デコードされた単一の命令の実行の間での上記第2のバッファのリクラメーションを防止し、
上記第1のバッファからの上記第1の入力2次元行列および上記第2のバッファからの上記直前の入力2次元行列に演算を実行して結果を生成し、
上記結果を上記結果ストレージに記憶し、
上記融合乗累算回路の2次元グリッドの上記第2のバッファが、上記前の命令の実行から、上記第2の入力2次元行列と同一である上記直前の入力2次元行列を記憶していない場合、
上記第2の入力2次元行列を上記融合乗累算回路の2次元グリッドの上記第2のバッファにロードし、
上記第1のバッファからの上記第1の入力2次元行列および上記第2のバッファからの上記第2の入力2次元行列に演算を実行して結果を生成し、
上記結果を上記結果ストレージに記憶する、実行回路と、
を備える、装置。
(項目2) 上記融合乗累算回路の2次元グリッドの上記第2のバッファが、上記前の命令の実行から、上記第2の入力2次元行列と同一である上記直前の入力2次元行列を記憶していない場合、上記行列演算アクセラレータ回路は、上記前の命令および上記デコードされた単一の命令の実行の間での上記第2のバッファのリクラメーションを開始する、項目1に記載の装置。
(項目3) 上記行列演算アクセラレータ回路は、入力2次元行列を表す複数のレジスタのそれぞれに識別値を割り当て、上記融合乗累算回路の2次元グリッドの上記第2のバッファが上記第2の入力2次元行列と同一である上記直前の入力2次元行列を記憶しているかどうかの上記チェックは、上記前の命令および上記単一の命令からの対応する入力2次元行列のそれぞれの識別値を比較することを含む、項目1に記載の装置。
(項目4) 上記行列演算アクセラレータ回路は、次の命令の入力2次元行列を記憶するように、上記第2の複数のレジスタに異なる識別値を割り当てる、項目3に記載の装置。
(項目5) 上記融合乗累算回路の2次元グリッドの上記第2のバッファが、上記前の命令の実行から、上記第2の入力2次元行列と同一である上記直前の入力2次元行列を記憶している場合、上記行列演算アクセラレータ回路は、上記デコードされた単一の命令の実行中、上記融合乗累算回路の2次元グリッドの上記第2のバッファをロードしない、項目1に記載の装置。
(項目6) 上記結果ストレージは、上記デコードされた単一の命令の実行によって形成された少なくとも1つの出力2次元行列を表す第3の複数のレジスタである、項目1に記載の装置。
(項目7) 上記演算は、上記2次元グリッドの融合乗累算回路の各第1の適切なサブセットのそれぞれの各出力を、上記2次元グリッドの融合乗累算回路の各第2の適切なサブセットのそれぞれの各入力へと下流に送信して、上記結果を形成することを含む、項目1に記載の装置。
(項目8) 上記融合乗累算回路の第1の適切なサブセットは、上記融合乗累算回路の2次元グリッドの行または列のうちの一方であり、上記融合乗累算回路の第2の適切なサブセットは、上記融合乗累算回路の2次元グリッドの上記行または上記列のうちの他方である、項目7に記載の装置。
(項目9) ハードウェアプロセッサコアのデコーダを用いて、単一の命令をデコードされた単一の命令にデコードする段階であって、上記ハードウェアプロセッサコアは、融合乗累算回路の2次元グリッドを含む行列演算アクセラレータ回路に結合され、上記行列演算アクセラレータ回路は、第1の入力2次元行列を表す第1の複数のレジスタおよび第2の入力2次元行列を表す第2の複数のレジスタに結合され、上記単一の命令は、結果ストレージを識別するフィールドを備える、段階と、
上記ハードウェアプロセッサコアの実行回路を用いて、上記デコードされた単一の命令を実行して、
上記融合乗累算回路の2次元グリッドの第1のバッファに、上記第1の複数のレジスタからの上記第1の入力2次元行列をロードし、
上記融合乗累算回路の2次元グリッドの第2のバッファが、上記第2の入力2次元行列と同一である直前の入力2次元行列を記憶しているかをチェックし、
上記融合乗累算回路の2次元グリッドの上記第2のバッファが、前の命令の実行から、上記第2の入力2次元行列と同一である上記直前の入力2次元行列を記憶している場合、
上記前の命令および上記デコードされた単一の命令の実行の間での上記第2のバッファのリクラメーションを防止し、
上記第1のバッファからの上記第1の入力2次元行列および上記第2のバッファからの上記直前の入力2次元行列に演算を実行して結果を生成し、
上記結果を上記結果ストレージに記憶し、
上記融合乗累算回路の2次元グリッドの上記第2のバッファが、上記前の命令の実行から、上記第2の入力2次元行列と同一である上記直前の入力2次元行列を記憶していない場合、
上記第2の入力2次元行列を上記融合乗累算回路の2次元グリッドの上記第2のバッファにロードし、
上記第1のバッファからの上記第1の入力2次元行列および上記第2のバッファからの上記第2の入力2次元行列に演算を実行して結果を生成し、
上記結果を上記結果ストレージに記憶する、段階と、
を含む、方法。
(項目10) 上記融合乗累算回路の2次元グリッドの上記第2のバッファが、上記前の命令の実行から、上記第2の入力2次元行列と同一である上記直前の入力2次元行列を記憶していない場合、上記前の命令および上記デコードされた単一の命令の実行の間での上記第2のバッファのリクラメーションを開始する段階をさらに含む、項目9に記載の方法。
(項目11) 入力2次元行列を表す複数のレジスタのそれぞれに識別値を割り当てる段階をさらに含み、上記融合乗累算回路の2次元グリッドの上記第2のバッファが上記第2の入力2次元行列と同一である上記直前の入力2次元行列を記憶しているかどうかの上記チェックは、上記前の命令および上記単一の命令からの対応する入力2次元行列のそれぞれの識別値を比較する段階を含む、項目9に記載の方法。
(項目12) 次の命令の入力2次元行列を記憶するように、上記第2の複数のレジスタに異なる識別値を割り当てる段階をさらに含む、項目11に記載の方法。
(項目13) 上記融合乗累算回路の2次元グリッドの上記第2のバッファが、上記前の命令の実行から、上記第2の入力2次元行列と同一である上記直前の入力2次元行列を記憶している場合、上記デコードされた単一の命令の実行中、上記融合乗累算回路の2次元グリッドの上記第2のバッファをロードしない段階をさらに含む、項目9に記載の方法。
(項目14) 上記結果ストレージは、上記デコードされた単一の命令の実行によって形成された少なくとも1つの出力2次元行列を表す第3の複数のレジスタである、項目9に記載の方法。
(項目15) 上記演算は、上記2次元グリッドの融合乗累算回路の各第1の適切なサブセットのそれぞれの各出力を、上記2次元グリッドの融合乗累算回路の各第2の適切なサブセットのそれぞれの各入力へと下流に送信して、上記結果を形成することを含む、項目9に記載の方法。
(項目16) 上記融合乗累算回路の第1の適切なサブセットは、上記融合乗累算回路の2次元グリッドの行または列のうちの一方であり、上記融合乗累算回路の第2の適切なサブセットは、上記融合乗累算回路の2次元グリッドの上記行または上記列のうちの他方である、項目15に記載の方法。
(項目17) 機械によって実行されると、上記機械に方法を実行させるコードを記憶した非一時的機械可読媒体であって、上記方法は、
ハードウェアプロセッサコアのデコーダを用いて、単一の命令をデコードされた単一の命令にデコードする段階であって、上記ハードウェアプロセッサコアは、融合乗累算回路の2次元グリッドを含む行列演算アクセラレータ回路に結合され、上記行列演算アクセラレータ回路は、第1の入力2次元行列を表す第1の複数のレジスタおよび第2の入力2次元行列を表す第2の複数のレジスタに結合され、上記単一の命令は、結果ストレージを識別するフィールドを備える、段階と、
上記ハードウェアプロセッサコアの実行回路を用いて、上記デコードされた単一の命令を実行して、
上記融合乗累算回路の2次元グリッドの第1のバッファに、上記第1の複数のレジスタからの上記第1の入力2次元行列をロードし、
上記融合乗累算回路の2次元グリッドの第2のバッファが、上記第2の入力2次元行列と同一である直前の入力2次元行列を記憶しているかをチェックし、
上記融合乗累算回路の2次元グリッドの上記第2のバッファが、前の命令の実行から、上記第2の入力2次元行列と同一である上記直前の入力2次元行列を記憶している場合、
上記前の命令および上記デコードされた単一の命令の実行の間での上記第2のバッファのリクラメーションを防止し、
上記第1のバッファからの上記第1の入力2次元行列および上記第2のバッファからの上記直前の入力2次元行列に演算を実行して結果を生成し、
上記結果を上記結果ストレージに記憶し、
上記融合乗累算回路の2次元グリッドの上記第2のバッファが、上記前の命令の実行から、上記第2の入力2次元行列と同一である上記直前の入力2次元行列を記憶していない場合、
上記第2の入力2次元行列を上記融合乗累算回路の2次元グリッドの上記第2のバッファにロードし、
上記第1のバッファからの上記第1の入力2次元行列および上記第2のバッファからの上記第2の入力2次元行列に演算を実行して結果を生成し、
上記結果を上記結果ストレージに記憶する、段階と、
を含む、非一時的機械可読媒体。
(項目18) 上記融合乗累算回路の2次元グリッドの上記第2のバッファが、上記前の命令の実行から、上記第2の入力2次元行列と同一である上記直前の入力2次元行列を記憶していない場合、上記前の命令および上記デコードされた単一の命令の実行の間での上記第2のバッファのリクラメーションを開始する段階をさらに含む、項目17に記載の非一時的機械可読媒体。
(項目19) 入力2次元行列を表す複数のレジスタのそれぞれに識別値を割り当てる段階をさらに含み、上記融合乗累算回路の2次元グリッドの上記第2のバッファが上記第2の入力2次元行列と同一である上記直前の入力2次元行列を記憶しているかどうかの上記チェックは、上記前の命令および上記単一の命令からの対応する入力2次元行列のそれぞれの識別値を比較する段階を含む、項目17に記載の非一時的機械可読媒体。
(項目20) 次の命令の入力2次元行列を記憶するように、上記第2の複数のレジスタに異なる識別値を割り当てる段階をさらに含む、項目19に記載の非一時的機械可読媒体。
(項目21) 上記融合乗累算回路の2次元グリッドの上記第2のバッファが、上記前の命令の実行から、上記第2の入力2次元行列と同一である上記直前の入力2次元行列を記憶している場合、上記デコードされた単一の命令の実行中、上記融合乗累算回路の2次元グリッドの上記第2のバッファをロードしない段階をさらに含む、項目17に記載の非一時的機械可読媒体。
(項目22) 上記結果ストレージは、上記デコードされた単一の命令の実行によって形成された少なくとも1つの出力2次元行列を表す第3の複数のレジスタである、項目17に記載の非一時的機械可読媒体。
(項目23) 上記演算は、上記2次元グリッドの融合乗累算回路の各第1の適切なサブセットのそれぞれの各出力を、上記2次元グリッドの融合乗累算回路の各第2の適切なサブセットのそれぞれの各入力へと下流に送信して、上記結果を形成することを含む、項目17に記載の非一時的機械可読媒体。
(項目24) 上記融合乗累算回路の第1の適切なサブセットは、上記融合乗累算回路の2次元グリッドの行または列のうちの一方であり、上記融合乗累算回路の第2の適切なサブセットは、上記融合乗累算回路の2次元グリッドの上記行または上記列のうちの他方である、項目23に記載の非一時的機械可読媒体。

Claims (25)

  1. 融合乗累算回路の2次元グリッドを含む行列演算アクセラレータ回路と、
    前記行列演算アクセラレータ回路に結合された第1の入力2次元行列を表す第1の複数のレジスタと、
    前記行列演算アクセラレータ回路に結合された第2の入力2次元行列を表す第2の複数のレジスタと、
    前記行列演算アクセラレータ回路に結合されたハードウェアプロセッサコアの、単一の命令をデコードされた単一の命令にデコードするデコーダであって、前記単一の命令は、結果ストレージを識別するフィールドを含む、デコーダと、
    前記ハードウェアプロセッサコアの実行回路であって、
    前記融合乗累算回路の2次元グリッドの第1のバッファに、前記第1の複数のレジスタからの前記第1の入力2次元行列をロードし、
    前記融合乗累算回路の2次元グリッドの第2のバッファが、前記第2の入力2次元行列と同一である直前の入力2次元行列を記憶しているかをチェックし、
    前記融合乗累算回路の2次元グリッドの前記第2のバッファが、前の命令の実行から、前記第2の入力2次元行列と同一である前記直前の入力2次元行列を記憶している場合、
    前記前の命令および前記デコードされた単一の命令の実行の間での前記第2のバッファのリクラメーションを防止し、
    前記第1のバッファからの前記第1の入力2次元行列および前記第2のバッファからの前記直前の入力2次元行列に演算を実行して結果を生成し、
    前記結果を前記結果ストレージに記憶し、
    前記融合乗累算回路の2次元グリッドの前記第2のバッファが、前記前の命令の実行から、前記第2の入力2次元行列と同一である前記直前の入力2次元行列を記憶していない場合、
    前記第2の入力2次元行列を前記融合乗累算回路の2次元グリッドの前記第2のバッファにロードし、
    前記第1のバッファからの前記第1の入力2次元行列および前記第2のバッファからの前記第2の入力2次元行列に演算を実行して結果を生成し、
    前記結果を前記結果ストレージに記憶する、
    ように、前記デコードされた単一の命令を実行する実行回路と、
    を備える、装置。
  2. 前記融合乗累算回路の2次元グリッドの前記第2のバッファが、前記前の命令の実行から、前記第2の入力2次元行列と同一である前記直前の入力2次元行列を記憶していない場合、前記行列演算アクセラレータ回路は、前記前の命令および前記デコードされた単一の命令の実行の間での前記第2のバッファのリクラメーションを開始する、請求項1に記載の装置。
  3. 前記行列演算アクセラレータ回路は、入力2次元行列を表す複数のレジスタのそれぞれに識別値を割り当て、前記融合乗累算回路の2次元グリッドの前記第2のバッファが前記第2の入力2次元行列と同一である前記直前の入力2次元行列を記憶しているかどうかの前記チェックは、前記前の命令および前記単一の命令からの対応する入力2次元行列のそれぞれの識別値を比較することを含む、請求項1または2に記載の装置。
  4. 前記行列演算アクセラレータ回路は、次の命令の入力2次元行列を記憶するように、前記第2の複数のレジスタに異なる識別値を割り当てる、請求項3に記載の装置。
  5. 前記融合乗累算回路の2次元グリッドの前記第2のバッファが、前記前の命令の実行から、前記第2の入力2次元行列と同一である前記直前の入力2次元行列を記憶している場合、前記行列演算アクセラレータ回路は、前記デコードされた単一の命令の実行中、前記融合乗累算回路の2次元グリッドの前記第2のバッファをロードしない、請求項1〜4のいずれか1項に記載の装置。
  6. 前記結果ストレージは、前記デコードされた単一の命令の実行によって形成された少なくとも1つの出力2次元行列を表す第3の複数のレジスタである、請求項1〜5のいずれか1項に記載の装置。
  7. 前記演算は、前記2次元グリッドの融合乗累算回路の各第1の適切なサブセットのそれぞれの各出力を、前記2次元グリッドの融合乗累算回路の各第2の適切なサブセットのそれぞれの各入力へと下流に送信して、前記結果を形成することを含む、請求項1〜6のいずれか1項に記載の装置。
  8. 前記融合乗累算回路の第1の適切なサブセットは、前記融合乗累算回路の2次元グリッドの行または列のうちの一方であり、前記融合乗累算回路の第2の適切なサブセットは、前記融合乗累算回路の2次元グリッドの前記行または前記列のうちの他方である、請求項7に記載の装置。
  9. ハードウェアプロセッサコアのデコーダを用いて、単一の命令をデコードされた単一の命令にデコードする段階であって、前記ハードウェアプロセッサコアは、融合乗累算回路の2次元グリッドを含む行列演算アクセラレータ回路に結合され、前記行列演算アクセラレータ回路は、第1の入力2次元行列を表す第1の複数のレジスタおよび第2の入力2次元行列を表す第2の複数のレジスタに結合され、前記単一の命令は、結果ストレージを識別するフィールドを備える、段階と、
    前記融合乗累算回路の2次元グリッドの第1のバッファに、前記第1の複数のレジスタからの前記第1の入力2次元行列をロードし、
    前記融合乗累算回路の2次元グリッドの第2のバッファが、前記第2の入力2次元行列と同一である直前の入力2次元行列を記憶しているかをチェックし、
    前記融合乗累算回路の2次元グリッドの前記第2のバッファが、前の命令の実行から、前記第2の入力2次元行列と同一である前記直前の入力2次元行列を記憶している場合、
    前記前の命令および前記デコードされた単一の命令の実行の間での前記第2のバッファのリクラメーションを防止し、
    前記第1のバッファからの前記第1の入力2次元行列および前記第2のバッファからの前記直前の入力2次元行列に演算を実行して結果を生成し、
    前記結果を前記結果ストレージに記憶し、
    前記融合乗累算回路の2次元グリッドの前記第2のバッファが、前記前の命令の実行から、前記第2の入力2次元行列と同一である前記直前の入力2次元行列を記憶していない場合、
    前記第2の入力2次元行列を前記融合乗累算回路の2次元グリッドの前記第2のバッファにロードし、
    前記第1のバッファからの前記第1の入力2次元行列および前記第2のバッファからの前記第2の入力2次元行列に演算を実行して結果を生成し、
    前記結果を前記結果ストレージに記憶する、
    ように、前記ハードウェアプロセッサコアの実行回路を用いて前記デコードされた単一の命令を実行する段階と、
    を含む、方法。
  10. 前記融合乗累算回路の2次元グリッドの前記第2のバッファが、前記前の命令の実行から、前記第2の入力2次元行列と同一である前記直前の入力2次元行列を記憶していない場合、前記前の命令および前記デコードされた単一の命令の実行の間での前記第2のバッファのリクラメーションを開始する段階をさらに含む、請求項9に記載の方法。
  11. 入力2次元行列を表す複数のレジスタのそれぞれに識別値を割り当てる段階をさらに含み、前記融合乗累算回路の2次元グリッドの前記第2のバッファが前記第2の入力2次元行列と同一である前記直前の入力2次元行列を記憶しているかどうかの前記チェックは、前記前の命令および前記単一の命令からの対応する入力2次元行列のそれぞれの識別値を比較する段階を含む、請求項9または10に記載の方法。
  12. 次の命令の入力2次元行列を記憶するように、前記第2の複数のレジスタに異なる識別値を割り当てる段階をさらに含む、請求項11に記載の方法。
  13. 前記融合乗累算回路の2次元グリッドの前記第2のバッファが、前記前の命令の実行から、前記第2の入力2次元行列と同一である前記直前の入力2次元行列を記憶している場合、前記デコードされた単一の命令の実行中、前記融合乗累算回路の2次元グリッドの前記第2のバッファをロードしない段階をさらに含む、請求項9〜12のいずれか1項に記載の方法。
  14. 前記結果ストレージは、前記デコードされた単一の命令の実行によって形成された少なくとも1つの出力2次元行列を表す第3の複数のレジスタである、請求項9〜13のいずれか1項に記載の方法。
  15. 前記演算は、前記2次元グリッドの融合乗累算回路の各第1の適切なサブセットのそれぞれの各出力を、前記2次元グリッドの融合乗累算回路の各第2の適切なサブセットのそれぞれの各入力へと下流に送信して、前記結果を形成することを含む、請求項9〜14のいずれか1項に記載の方法。
  16. 前記融合乗累算回路の第1の適切なサブセットは、前記融合乗累算回路の2次元グリッドの行または列のうちの一方であり、前記融合乗累算回路の第2の適切なサブセットは、前記融合乗累算回路の2次元グリッドの前記行または前記列のうちの他方である、請求項15に記載の方法。
  17. コンピュータに、
    ハードウェアプロセッサコアのデコーダを用いて、単一の命令をデコードされた単一の命令にデコードする手順であって、前記ハードウェアプロセッサコアは、融合乗累算回路の2次元グリッドを含む行列演算アクセラレータ回路に結合され、前記行列演算アクセラレータ回路は、第1の入力2次元行列を表す第1の複数のレジスタおよび第2の入力2次元行列を表す第2の複数のレジスタに結合され、前記単一の命令は、結果ストレージを識別するフィールドを備える、手順と、
    前記融合乗累算回路の2次元グリッドの第1のバッファに、前記第1の複数のレジスタからの前記第1の入力2次元行列をロードし、
    前記融合乗累算回路の2次元グリッドの第2のバッファが、前記第2の入力2次元行列と同一である直前の入力2次元行列を記憶しているかをチェックし、
    前記融合乗累算回路の2次元グリッドの前記第2のバッファが、前の命令の実行から、前記第2の入力2次元行列と同一である前記直前の入力2次元行列を記憶している場合、
    前記前の命令および前記デコードされた単一の命令の実行の間での前記第2のバッファのリクラメーションを防止し、
    前記第1のバッファからの前記第1の入力2次元行列および前記第2のバッファからの前記直前の入力2次元行列に演算を実行して結果を生成し、
    前記結果を前記結果ストレージに記憶し、
    前記融合乗累算回路の2次元グリッドの前記第2のバッファが、前記前の命令の実行から、前記第2の入力2次元行列と同一である前記直前の入力2次元行列を記憶していない場合、
    前記第2の入力2次元行列を前記融合乗累算回路の2次元グリッドの前記第2のバッファにロードし、
    前記第1のバッファからの前記第1の入力2次元行列および前記第2のバッファからの前記第2の入力2次元行列に演算を実行して結果を生成し、
    前記結果を前記結果ストレージに記憶する、
    ように、前記ハードウェアプロセッサコアの実行回路を用いて前記デコードされた単一の命令を実行する手順と、
    を実行させるプログラム。
  18. 前記融合乗累算回路の2次元グリッドの前記第2のバッファが、前記前の命令の実行から、前記第2の入力2次元行列と同一である前記直前の入力2次元行列を記憶していない場合、前記前の命令および前記デコードされた単一の命令の実行の間での前記第2のバッファのリクラメーションを開始する手順をさらに含む、請求項17に記載のプログラム。
  19. 入力2次元行列を表す複数のレジスタのそれぞれに識別値を割り当てる手順をさらに含み、前記融合乗累算回路の2次元グリッドの前記第2のバッファが前記第2の入力2次元行列と同一である前記直前の入力2次元行列を記憶しているかどうかの前記チェックは、前記前の命令および前記単一の命令からの対応する入力2次元行列のそれぞれの識別値を比較する手順を含む、請求項17または18に記載のプログラム。
  20. 次の命令の入力2次元行列を記憶するように、前記第2の複数のレジスタに異なる識別値を割り当てる手順をさらに含む、請求項19に記載のプログラム。
  21. 前記融合乗累算回路の2次元グリッドの前記第2のバッファが、前記前の命令の実行から、前記第2の入力2次元行列と同一である前記直前の入力2次元行列を記憶している場合、前記デコードされた単一の命令の実行中、前記融合乗累算回路の2次元グリッドの前記第2のバッファをロードしない手順をさらに含む、請求項17〜20のいずれか1項に記載のプログラム。
  22. 前記結果ストレージは、前記デコードされた単一の命令の実行によって形成された少なくとも1つの出力2次元行列を表す第3の複数のレジスタである、請求項17〜21のいずれか1項に記載のプログラム。
  23. 前記演算は、前記2次元グリッドの融合乗累算回路の各第1の適切なサブセットのそれぞれの各出力を、前記2次元グリッドの融合乗累算回路の各第2の適切なサブセットのそれぞれの各入力へと下流に送信して、前記結果を形成することを含む、請求項17〜22のいずれか1項に記載のプログラム。
  24. 前記融合乗累算回路の第1の適切なサブセットは、前記融合乗累算回路の2次元グリッドの行または列のうちの一方であり、前記融合乗累算回路の第2の適切なサブセットは、前記融合乗累算回路の2次元グリッドの前記行または前記列のうちの他方である、請求項23に記載のプログラム。
  25. 請求項17〜24のいずれか1項に記載のプログラムを記憶した非一時的機械可読媒体。
JP2020150874A 2019-12-28 2020-09-08 行列演算アクセラレータの命令のための装置、方法、およびシステム Pending JP2021108102A (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2023219258A JP2024038122A (ja) 2019-12-28 2023-12-26 行列演算アクセラレータの命令のための装置、方法、およびシステム

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US16/729,361 US11714875B2 (en) 2019-12-28 2019-12-28 Apparatuses, methods, and systems for instructions of a matrix operations accelerator
US16/729,361 2019-12-28

Related Child Applications (1)

Application Number Title Priority Date Filing Date
JP2023219258A Division JP2024038122A (ja) 2019-12-28 2023-12-26 行列演算アクセラレータの命令のための装置、方法、およびシステム

Publications (1)

Publication Number Publication Date
JP2021108102A true JP2021108102A (ja) 2021-07-29

Family

ID=71098561

Family Applications (2)

Application Number Title Priority Date Filing Date
JP2020150874A Pending JP2021108102A (ja) 2019-12-28 2020-09-08 行列演算アクセラレータの命令のための装置、方法、およびシステム
JP2023219258A Pending JP2024038122A (ja) 2019-12-28 2023-12-26 行列演算アクセラレータの命令のための装置、方法、およびシステム

Family Applications After (1)

Application Number Title Priority Date Filing Date
JP2023219258A Pending JP2024038122A (ja) 2019-12-28 2023-12-26 行列演算アクセラレータの命令のための装置、方法、およびシステム

Country Status (7)

Country Link
US (2) US11714875B2 (ja)
JP (2) JP2021108102A (ja)
KR (2) KR20210086447A (ja)
CN (2) CN113050990A (ja)
BR (1) BR102020019657A2 (ja)
DE (1) DE102020126212A1 (ja)
TW (1) TW202125287A (ja)

Families Citing this family (13)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2018174930A1 (en) 2017-03-20 2018-09-27 Intel Corporation Systems, methods, and apparatuses for matrix add, subtract, and multiply
US11372644B2 (en) * 2019-12-09 2022-06-28 Meta Platforms, Inc. Matrix processing instruction with optional up/down sampling of matrix
US11467834B2 (en) * 2020-04-01 2022-10-11 Samsung Electronics Co., Ltd. In-memory computing with cache coherent protocol
JP2021192187A (ja) * 2020-06-05 2021-12-16 富士通株式会社 出現頻度算出プログラム、グラフィックス プロセッシング ユニット、情報処理装置、及び出現頻度算出方法
CN118012505A (zh) * 2020-06-30 2024-05-10 上海寒武纪信息科技有限公司 人工智能处理器、集成电路芯片、板卡、电子设备
CN113867799A (zh) * 2020-06-30 2021-12-31 上海寒武纪信息科技有限公司 计算装置、集成电路芯片、板卡、电子设备和计算方法
CN113867793A (zh) * 2020-06-30 2021-12-31 上海寒武纪信息科技有限公司 计算装置、集成电路芯片、板卡、电子设备和计算方法
CN113867790A (zh) * 2020-06-30 2021-12-31 上海寒武纪信息科技有限公司 计算装置、集成电路芯片、板卡和计算方法
CN113867789A (zh) * 2020-06-30 2021-12-31 上海寒武纪信息科技有限公司 计算装置、集成电路芯片、板卡、电子设备和计算方法
US20220051086A1 (en) * 2020-08-17 2022-02-17 Alibaba Group Holding Limited Vector accelerator for artificial intelligence and machine learning
US11494326B1 (en) * 2021-03-30 2022-11-08 Amazon Technologies, Inc. Programmable computations in direct memory access engine
US20230094414A1 (en) * 2021-09-24 2023-03-30 Intel Corporation Matrix operation with multiple tiles per matrix dimension
TWI819937B (zh) * 2022-12-28 2023-10-21 國立成功大學 應用於類神經網路的記憶內運算的加速器

Family Cites Families (56)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5247632A (en) 1989-01-23 1993-09-21 Eastman Kodak Company Virtual memory management arrangement for addressing multi-dimensional arrays in a digital data processing system
US5475822A (en) 1993-11-15 1995-12-12 Motorola, Inc. Data processing system for resuming instruction execution after an interrupt and method therefor
US7301541B2 (en) 1995-08-16 2007-11-27 Microunity Systems Engineering, Inc. Programmable processor and method with wide operations
US5892962A (en) 1996-11-12 1999-04-06 Lucent Technologies Inc. FPGA-based processor
US6161219A (en) 1997-07-03 2000-12-12 The University Of Iowa Research Foundation System and method for providing checkpointing with precompile directives and supporting software to produce checkpoints, independent of environment constraints
US6282634B1 (en) 1998-05-27 2001-08-28 Arm Limited Apparatus and method for processing data having a mixed vector/scalar register file
FR2787233B1 (fr) 1998-12-11 2001-02-16 St Microelectronics Sa Procede pour verifier l'integrite des circuits de decodage d'une memoire
US6901422B1 (en) 2001-03-21 2005-05-31 Apple Computer, Inc. Matrix multiplication in a vector processing system
US7725521B2 (en) 2001-10-29 2010-05-25 Intel Corporation Method and apparatus for computing matrix transformations
US6877020B1 (en) 2001-12-31 2005-04-05 Apple Computer, Inc. Method and apparatus for matrix transposition
US7003542B2 (en) 2002-01-02 2006-02-21 Intel Corporation Apparatus and method for inverting a 4×4 matrix
US7209939B2 (en) 2002-07-11 2007-04-24 Sun Microsystems, Inc. Precision improvement method for the Strassen/Winograd matrix multiplication method
US6944747B2 (en) 2002-12-09 2005-09-13 Gemtech Systems, Llc Apparatus and method for matrix data processing
US7657880B2 (en) * 2003-01-31 2010-02-02 Intel Corporation Safe store for speculative helper threads
US7159103B2 (en) * 2003-03-24 2007-01-02 Infineon Technologies Ag Zero-overhead loop operation in microprocessor having instruction buffer
US20040193668A1 (en) * 2003-03-31 2004-09-30 Patrick Devaney Virtual double width accumulators for vector processing
GB2409068A (en) * 2003-12-09 2005-06-15 Advanced Risc Mach Ltd Data element size control within parallel lanes of processing
US7873812B1 (en) 2004-04-05 2011-01-18 Tibet MIMAR Method and system for efficient matrix multiplication in a SIMD processor architecture
US20060190517A1 (en) 2005-02-02 2006-08-24 Guerrero Miguel A Techniques for transposition of a matrix arranged in a memory as multiple items per word
US20070186210A1 (en) 2006-02-06 2007-08-09 Via Technologies, Inc. Instruction set encoding in a dual-mode computer processing environment
US20070271325A1 (en) * 2006-05-08 2007-11-22 Nvidia Corporation Matrix multiply with reduced bandwidth requirements
US7912889B1 (en) 2006-06-16 2011-03-22 Nvidia Corporation Mapping the threads of a CTA to the elements of a tile for efficient matrix multiplication
US7792895B1 (en) 2006-06-16 2010-09-07 Nvidia Corporation Efficient matrix multiplication on a parallel processing device
US20080071851A1 (en) 2006-09-20 2008-03-20 Ronen Zohar Instruction and logic for performing a dot-product operation
US8122078B2 (en) 2006-10-06 2012-02-21 Calos Fund, LLC Processor with enhanced combined-arithmetic capability
US7797362B2 (en) 2007-02-23 2010-09-14 Texas Instruments Incorporated Parallel architecture for matrix transposition
US8392487B1 (en) 2007-03-29 2013-03-05 Compass Electro-Optical Systems Ltd Programmable matrix processor
US8028015B2 (en) 2007-08-10 2011-09-27 Inside Contactless S.A. Method and system for large number multiplication
US8923510B2 (en) 2007-12-28 2014-12-30 Intel Corporation Method and apparatus for efficiently implementing the advanced encryption standard
US8533251B2 (en) 2008-05-23 2013-09-10 International Business Machines Corporation Optimized corner turns for local storage and bandwidth reduction
US8060730B2 (en) 2008-05-30 2011-11-15 Freescale Semiconductor, Inc. Selective MISR data accumulation during exception processing
US8250130B2 (en) 2008-05-30 2012-08-21 International Business Machines Corporation Reducing bandwidth requirements for matrix multiplication
US20100180100A1 (en) 2009-01-13 2010-07-15 Mavrix Technology, Inc. Matrix microprocessor and method of operation
US20100191787A1 (en) * 2009-01-29 2010-07-29 Vns Portfolio Llc Sequential Multiplier
US8539201B2 (en) 2009-11-04 2013-09-17 International Business Machines Corporation Transposing array data on SIMD multi-core processor architectures
US8984043B2 (en) 2009-12-23 2015-03-17 Intel Corporation Multiplying and adding matrices
US8478969B2 (en) 2010-09-24 2013-07-02 Intel Corporation Performing a multiply-multiply-accumulate instruction
US20120113133A1 (en) 2010-11-04 2012-05-10 Shpigelblat Shai System, device, and method for multiplying multi-dimensional data arrays
US9727471B2 (en) * 2010-11-29 2017-08-08 Intel Corporation Method and apparatus for stream buffer management instructions
US20120254588A1 (en) 2011-04-01 2012-10-04 Jesus Corbal San Adrian Systems, apparatuses, and methods for blending two source operands into a single destination using a writemask
KR101595637B1 (ko) 2011-04-01 2016-02-18 인텔 코포레이션 벡터 친숙형 명령어 형식 및 그의 실행
US9503741B2 (en) 2011-06-08 2016-11-22 Vixs Systems, Inc. Video decoder with multi-format vector processor and methods for use therewith
US20140149480A1 (en) 2012-11-28 2014-05-29 Nvidia Corporation System, method, and computer program product for transposing a matrix
US9442723B2 (en) 2012-12-28 2016-09-13 Intel Corporation Method and apparatus for integral image computation instructions
US9286216B2 (en) 2014-01-16 2016-03-15 Carnegie Mellon University 3DIC memory chips including computational logic-in-memory for performing accelerated data processing
CN106339202B (zh) 2014-07-02 2019-05-21 上海兆芯集成电路有限公司 微处理器及其方法
US20160179523A1 (en) 2014-12-23 2016-06-23 Intel Corporation Apparatus and method for vector broadcast and xorand logical instruction
US10535114B2 (en) 2015-08-18 2020-01-14 Nvidia Corporation Controlling multi-pass rendering sequences in a cache tiling architecture
US10228911B2 (en) * 2015-10-08 2019-03-12 Via Alliance Semiconductor Co., Ltd. Apparatus employing user-specified binary point fixed point arithmetic
US10146535B2 (en) 2016-10-20 2018-12-04 Intel Corporatoin Systems, apparatuses, and methods for chained fused multiply add
US10437562B2 (en) * 2016-12-30 2019-10-08 Intel Corporation Apparatus and method for processing sparse data
PL3812900T3 (pl) 2016-12-31 2024-04-08 Intel Corporation Systemy, sposoby i aparaty do obliczania heterogenicznego
GB2560159B (en) * 2017-02-23 2019-12-25 Advanced Risc Mach Ltd Widening arithmetic in a data processing apparatus
WO2018174930A1 (en) * 2017-03-20 2018-09-27 Intel Corporation Systems, methods, and apparatuses for matrix add, subtract, and multiply
US10678507B2 (en) * 2017-12-22 2020-06-09 Alibaba Group Holding Limited Programmable multiply-add array hardware
US10459876B2 (en) * 2018-01-31 2019-10-29 Amazon Technologies, Inc. Performing concurrent operations in a processing element

Also Published As

Publication number Publication date
JP2024038122A (ja) 2024-03-19
TW202125287A (zh) 2021-07-01
DE102020126212A1 (de) 2021-07-01
KR20210086447A (ko) 2021-07-08
BR102020019657A2 (pt) 2021-06-29
KR20240011204A (ko) 2024-01-25
US20240078283A1 (en) 2024-03-07
US11714875B2 (en) 2023-08-01
CN117724763A (zh) 2024-03-19
CN113050990A (zh) 2021-06-29
US20200201932A1 (en) 2020-06-25

Similar Documents

Publication Publication Date Title
JP2021108102A (ja) 行列演算アクセラレータの命令のための装置、方法、およびシステム
EP3651017B1 (en) Systems and methods for performing 16-bit floating-point matrix dot product instructions
US20240078285A1 (en) Systems and methods of instructions to accelerate multiplication of sparse matrices using bitmasks that identify non-zero elements
KR20170097018A (ko) 벡터 브로드캐스트 및 xorand 로직 명령어를 위한 장치 및 방법
JP2021057004A (ja) 行列演算アクセラレータの命令のための装置、方法、及びシステム
CN114625423A (zh) 用于执行将矩阵变换为行交错格式的指令的系统和方法
KR101729829B1 (ko) 복수의 곱셈 연산들을 수행하는 방법 및 장치
US20210406018A1 (en) Apparatuses, methods, and systems for instructions for moving data between tiles of a matrix operations accelerator and vector registers
JP2023051994A (ja) 連鎖タイル演算を実施するためのシステムおよび方法
KR20190082079A (ko) 원격 원자 연산들의 공간적 및 시간적 병합
US11269630B2 (en) Interleaved pipeline of floating-point adders
CN110909883A (zh) 用于执行指定三元片逻辑操作的指令的系统和方法
US20200210188A1 (en) Systems and methods for performing matrix row- and column-wise permute instructions
CN112148251A (zh) 跳过无意义的矩阵运算的系统和方法
TW201732568A (zh) 用於巷道為主的跨類收集的系統、設備與方法
EP4276608A2 (en) Apparatuses, methods, and systems for 8-bit floating-point matrix dot product instructions
CN114675883A (zh) 用于对齐矩阵操作加速器瓦片的指令的装置、方法和系统
CN111752605A (zh) 使用浮点乘法-累加结果的模糊-j位位置
TW202223633A (zh) 用於實施16位元浮點矩陣點積指令的裝置、方法及系統
CN114721624A (zh) 用于处理矩阵的处理器、方法和系统
CN112149050A (zh) 用于增强的矩阵乘法器架构的装置、方法和系统
CN110826722A (zh) 用于通过排序来生成索引并基于排序对元素进行重新排序的系统、装置和方法
TW202418114A (zh) 用於矩陣運算加速器之指令的裝置,方法和系統
WO2022212213A1 (en) Apparatuses, methods, and systems for instructions for downconverting a tile row and interleaving with a register
CN115525333A (zh) 用于具有移位控制和宽度控制的紧缩数据卷积指令的装置、方法和系统

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20230904