JP6929958B2 - 低レイテンシ行列乗算ユニット - Google Patents

低レイテンシ行列乗算ユニット Download PDF

Info

Publication number
JP6929958B2
JP6929958B2 JP2019553237A JP2019553237A JP6929958B2 JP 6929958 B2 JP6929958 B2 JP 6929958B2 JP 2019553237 A JP2019553237 A JP 2019553237A JP 2019553237 A JP2019553237 A JP 2019553237A JP 6929958 B2 JP6929958 B2 JP 6929958B2
Authority
JP
Japan
Prior art keywords
weight
register
matrix
multiplication unit
vector
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.)
Active
Application number
JP2019553237A
Other languages
English (en)
Other versions
JP2020516991A (ja
Inventor
フェルプス,アンドリュー・エバレット
ジョピー,ノーマン・ポール
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.)
Google LLC
Original Assignee
Google LLC
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 Google LLC filed Critical Google LLC
Publication of JP2020516991A publication Critical patent/JP2020516991A/ja
Priority to JP2021131278A priority Critical patent/JP7135181B2/ja
Application granted granted Critical
Publication of JP6929958B2 publication Critical patent/JP6929958B2/ja
Priority to JP2022138332A priority patent/JP7444936B2/ja
Priority to JP2024024596A priority patent/JP2024063060A/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F17/00Digital computing or data processing equipment or methods, specially adapted for specific functions
    • G06F17/10Complex mathematical operations
    • G06F17/16Matrix or vector computation, e.g. matrix-matrix or matrix-vector multiplication, matrix factorization
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/76Architectures of general purpose stored program computers
    • G06F15/80Architectures of general purpose stored program computers comprising an array of processing units with common control, e.g. single instruction multiple data processors
    • G06F15/8046Systolic arrays
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F5/00Methods or arrangements for data conversion without changing the order or content of the data handled
    • G06F5/01Methods or arrangements for data conversion without changing the order or content of the data handled for shifting, e.g. justifying, scaling, normalising
    • G06F5/015Methods or arrangements for data conversion without changing the order or content of the data handled for shifting, e.g. justifying, scaling, normalising having at least two separately controlled shifting levels, e.g. using shifting matrices
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/38Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
    • G06F7/48Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
    • G06F7/52Multiplying; Dividing
    • G06F7/523Multiplying only
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/38Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
    • G06F7/48Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
    • G06F7/544Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices for evaluating functions by calculation
    • G06F7/5443Sum of products
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • 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/30032Movement instructions, e.g. MOVE, SHIFT, ROTATE, SHUFFLE
    • 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
    • G06F9/30101Special purpose registers
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/04Architecture, e.g. interconnection topology
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/06Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons
    • G06N3/063Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons using electronic means
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/08Learning methods

Landscapes

  • Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • Theoretical Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Mathematical Physics (AREA)
  • Computing Systems (AREA)
  • Mathematical Optimization (AREA)
  • Pure & Applied Mathematics (AREA)
  • Mathematical Analysis (AREA)
  • Computational Mathematics (AREA)
  • Data Mining & Analysis (AREA)
  • Biomedical Technology (AREA)
  • Health & Medical Sciences (AREA)
  • Life Sciences & Earth Sciences (AREA)
  • Biophysics (AREA)
  • Artificial Intelligence (AREA)
  • Computational Linguistics (AREA)
  • Molecular Biology (AREA)
  • General Health & Medical Sciences (AREA)
  • Evolutionary Computation (AREA)
  • Computer Hardware Design (AREA)
  • Algebra (AREA)
  • Databases & Information Systems (AREA)
  • Neurology (AREA)
  • Complex Calculations (AREA)
  • Magnetic Resonance Imaging Apparatus (AREA)
  • Measurement And Recording Of Electrical Phenomena And Electrical Characteristics Of The Living Body (AREA)
  • Fuel Cell (AREA)
  • Shift Register Type Memory (AREA)

Description

背景
この明細書は、ハードウェアでのニューラルネットワーク計算の実行に関する。
ニューラルネットワークは機械学習モデルであり、モデルの1つ以上の層を用いて、受信した入力に対する出力、たとえば分類などを生成する。一部のニューラルネットワークには、出力層に加えて1つ以上の隠れ層が含まれる。各隠れ層の出力は、ネットワーク内の次の層、つまりネットワークの次の隠れ層または出力層への入力として用いられる。ネットワークの各層は、それぞれのパラメータのセットの現在の値に従って、受信した入力から出力を生成する。
概要
この明細書では、ニューラルネットワークのトレーニング、ニューラルネットワークの推論の計算、またはその両方を行う専用ハードウェア回路、および特に重み値が行列乗算ユニット内の重み行列レジスタにロードされる速度を増大させることによって行列乗算ユニット全体のレイテンシを低減する専用ハードウェア回路に関する技術について記載する。
シストリックアレイは、行列乗算を実行するよう配線され、通常、アレイ全体を通して均一な構造を有する。シストリックアレイの行列乗算ユニットは、積和サブユニットで構成され、各サブユニットは、入力オペランドを取り、そのオペランドに格納された重みを乗算して結果を得、その結果を部分和に加算して新たな部分和を生成する。
レイテンシを短縮する1つの方法は、重みを積和ユニットにロードする速度を増大させることである。
一般に、本明細書で説明する主題の革新的な一局面は、ニューラルネットワークのトレーニング、ニューラルネットワークの推論の計算、またはその両方を行う専用ハードウェア回路で実現できる。
この態様の他の実施形態は、各々、方法のアクションを実行するように構成された、対応するコンピュータシステム、装置、および1つ以上のコンピュータ記憶装置に記録されたコンピュータプログラムを含む。1つ以上のコンピュータのシステムが特定の操作またはアクションを実行するように構成されているとは、動作中にそのシステムにそのような操作またはアクションを実行させるソフトウェア、ファームウェア、ハードウェア、またはそれらの組み合わせがそのシステムにインストールされていることを意味する。1つ以上のコンピュータプログラムが特定の操作またはアクションを実行するように構成されるとは、1つ以上のプログラムが、データ処理装置によって実行されると、データ処理装置にそのような操作またはアクションを実行させる命令を含むことを意味する。
前述の実施形態および他の実施形態は各々、以下の特徴のうちの1つ以上を単独でまたは組み合わせて任意選択で含むことができる。特に、一実施形態は、以下の特徴をすべて組み合わせて含む。
行列乗算ユニットはセルのシストリックアレイとして実装されてもよい。セルのシストリックアレイの各セルは、転置されたまたは転置されない重みシフトレジスタから重み入力を受け取るように構成される重み行列レジスタと、重み行列レジスタに格納されるよう水平方向から重み入力を受け取るように構成される転置された重みシフトレジスタと、重み行列レジスタに格納されるよう垂直方向から重み入力を受け取るように構成される転置されない重みシフトレジスタと、重み行列レジスタに結合され、乗算結果を得るために重み行列レジスタの重み入力をベクトルデータ入力で乗算するように構成される乗算ユニットとを備えてもよい。各セルは、転置された重みシフトレジスタの重み入力と転置されない重みシフトレジスタとの間で選択を行い、選択された重み入力を重み行列レジスタに転送するように構成されるマルチプレクサを備えてもよい。
行列乗算ユニットは、転置された重みシフトレジスタまたは転置されない重みシフトレジスタのいずれかからの重み値を保持するように構成された第1の重み保持レジスタを備えてもよい。
行列乗算ユニットは、転置された重みシフトレジスタまたは転置されない重みシフトレジスタのいずれかからの重み値を保持するように構成された第2の重み保持レジスタを備えてもよい。
重み値は、行列乗算ユニットに、転置された重みシフトレジスタから、水平方向に、第1の重み保持レジスタへ、および転置されない重みシフトレジスタから、垂直方向に、第2の重み保持レジスタへロードされてもよい。
重み行列レジスタには、第1の重み保持レジスタまたは第2の重み保持レジスタから値がロードされてもよい。
別の実施形態では、シストリックアレイとして実施される行列乗算ユニットは、シストリックアレイの列に配置された複数のセルと、シストリックアレイの列ごとに設けられる重みシフトレジスタの2つのチェーンと、セルごとに設けられ、重みシフトレジスタから受け取られる重み入力を格納するように構成された重み行列レジスタと、重み行列レジスタに結合され、乗算結果を得るために重み行列レジスタの重み入力をベクトルデータ入力で乗算するように構成される乗算ユニットとを備えてもよい。各重みシフトレジスタは1つのチェーンのみに接続され、各セルは1つの重みシフトレジスタのみに接続される。
重み値は、重み値の対を含むベクトルレジスタから重みシフトレジスタの2つのチェーンで送られてもよい。
2つの重み値がベクトルレジスタから利用可能でない場合、各列の上部にある保持レジスタが重み値を保持してもよい。
2つの重み値が利用可能な場合、2つの重み値はクロックサイクルでセル内の重みシフトレジスタにシフトされる。
2つの重み値が利用可能でない場合、第1の重み値が利用可能な第1のクロックサイクルで、保持レジスタに、第1の重み値が、保持される値としてロードされ、シフトは行われない。次のクロックサイクルで、第2の重み値が利用可能になると、第2の重み値と保持された値とが2つのシフトチェーンによってシフトされる。1つの値が、各シフトチェーンによって、シフトチェーンに接続された重みシフトレジスタにシフトされる。
各シフトチェーンは、重み値を注入するための2つの注入ポイントを有し、一方のポイントは列の上部にあり、他方のポイントは列の第2のポイントにあってもよい。ベクトルレジスタが、各々が別々の重み値を表す4つの8ビット整数のパックされたセットを含んでもよい。4つの整数のうちの2つが列の上部に注入され、4つの整数の他の2つがアレイの第2のポイントに注入されてもよい。
この明細書において記載される主題は、以下の利点の1つ以上を実現するように特定の実施の形態において実現することができる。シストリックアレイの列ごとに重みシフトレジスタのチェーンが2つある行列乗算ユニットは、ベクトルレジスタからの速度が、重みシフトレジスタのチェーンが1つだけの行列乗算ユニットの2倍で、重みを行列乗算ユニットに運ぶことができる。さらに、アレイ内の2つのポイント、つまりアレイの上部と中間ポイントとに重み値を送る、列ごとに重みシフトレジスタのチェーンが2つある行列乗算ユニットは、ベクトルレジスタからの速度が、重みシフトレジスタのチェーンが1つだけの行列乗算ユニットの4倍で、重みを行列乗算ユニットに運ぶことができる。
追加的または代替的に、行列乗算ユニットは、転置されない重みシフトレジスタと転置された重みシフトレジスタとを各々が含むセルを有することができる。行列乗算ユニットは、その場合、垂直および水平方向の重みシフトチェーンに別々のレジスタを使用でき、その結果、行列乗算ユニットは、2つの重みシフトチェーンに別々のレジスタを有さない行列乗算ユニットの速度の2倍で、重み値をロードできる。
これらの重みシフトロード方法を組み合わせて、列ごとに重みシフトレジスタのチェーンが2つなく、垂直および水平方向の重みシフトチェーン用に別々のレジスタがない行列乗算ユニットから、ロード時間における増大を8倍得ることができる。これらの重みシフトチェーンおよび/または別々のレジスタは、行列乗算ユニットの複雑さやフットプリントを大幅に増加させることなく、行列乗算ユニットに追加できる。
この明細書の主題の1つ以上の実施形態の詳細は、添付の図面および以下の詳細な説明において述べられる。主題の他の特徴、局面および利点は、詳細な説明、図面および特許請求の範囲から明らかになる。
ニューラルネットワークをトレーニングするための例示的な専用ハードウェアチップのハイレベル図を示す。 コンピュートコアのハイレベルの例を示す。 例示的なニューラルネットワーク処理システムを示す。 行列乗算ユニットを含む例示的なコアアーキテクチャを示し、各行列乗算ユニットは、2次元のシストリックアレイである。 シストリックアレイ内のマルチセルの例示的アーキテクチャを示す。 重み値のロード速度を高めるために、列ごとに2つのチェーンの重みシフトレジスタを有する行列乗算ユニットのアーキテクチャの例を示す。 所与のマルチセルの列に重み値をロードするための例示的な方法の流れ図である。 重み値のロード速度を高めるために、列ごとに2つのチェーンの重みシフトレジスタを有し、列ごとに2つのポイントで重み値を送る、行列乗算ユニットのアーキテクチャの例を示す。 重み値のロード速度を高めるために、水平方向の重みシフトおよび垂直方向の重みシフトのための別個のレジスタを有する行列乗算ユニットのアーキテクチャの例を示す。 重み値のロード速度を高めるために保持レジスタのセットを有する例示的なセルを示す。
さまざまな図面の同様の参照番号および名称は、同様の要素を示す。
詳細な説明
複数の層を有するニューラルネットワークをトレーニングし、それを推論の計算に用いることができる。たとえば、ニューラルネットワークは、ある値で各々初期化されるパラメータを有する。トレーニング中、ニューラルネットワークは、ニューラルネットワークのトレーニング手順を実行して、ニューラルネットワークのパラメータの値を調整して、たとえば、逆伝播を用いてパラメータの初期値からパラメータのトレーニングを経た値を判断する。トレーニングされたニューラルネットワークは、推論を計算でき、つまり、ニューラルネットワークの層を介して入力を処理し、その入力に対するニューラルネットワーク出力を生成できる。
たとえば、入力が与えられると、ニューラルネットワークはその入力に対する推論を計算することができる。ニューラルネットワークは、ニューラルネットワークの各層を通して入力を処理することによって、この推論を計算する。いくつかの実装形態では、ニューラルネットワークの層はシーケンスで配置される。
したがって、受け取った入力から推論を計算するために、ニューラルネットワークはその入力を受け取り、それを各ニューラルネットワーク層を通してシーケンスで処理して推論を生成し、1つのニューラルネットワーク層からの出力が次のニューラルネットワーク層への入力として与えられる。ニューラルネットワーク層へのデータ入力、たとえば、ニューラルネットワークへの入力、またはシーケンス内におけるその層の下の層の、あるニューラルネットワーク層への出力は、その層への活性化入力と呼ぶことができる。
いくつかの実装形態では、ニューラルネットワークの層は有向グラフで配置される。つまり、任意の特定の層が複数の入力、複数の出力、またはそれらの両方を受け取ることができる。ニューラルネットワークの層は、ある層の出力を前の層への入力として送り返すことができるように構成することもできる。
図1Aは、ニューラルネットワークをトレーニングするための例示的な専用ハードウェアチップのハイレベル図を示す。図示されているように、単一の専用ハードウェアチップは2つの独立したプロセッサ、たとえば102a、102bを含む。各プロセッサ102a、102bには、2つの異なるコア:(1)コンピュートコア、つまり非常に長い命令語(VLIW)マシン(103a、103b)、および(2)疎計算コア、つまり埋め込み層アクセラレータ(105a、105b)が含まれる。
各コンピュートコア、たとえば103aおよび103bは、密線形代数問題用に最適化される。各コンピュートコアは、単一の非常に長い命令語によって制御される。各コンピュートコアは、非常に長い命令語命令の、それ自身のストリームを実行する。
例示的な疎計算コア、たとえば105aまたは105bは、非常に疎である高次元データを密な低次元データにマッピングし、残りの層が密に充填された入力データを処理するようにする。たとえば、疎計算コアは、トレーニング中のニューラルネットワークの埋め込み層の計算を実行できる。
この疎から密へのマッピングを実行するために、疎計算コアは、埋め込みテーブルである、予め構築されたルックアップテーブルを用いる。たとえば、ユーザ入力として一連のクエリワードがある場合、各クエリワードはハッシュ識別子またはワンホットエンコードされたベクトルに変換される。識別子をテーブルインデックスとして用いて、埋め込みテーブルは対応する密なベクトルを返し、それは、次の層への入力活性化ベクトルになることができる。疎計算コアは、検索クエリワードにわたって簡約操作を実行して、1つの密な活性化ベクトルを作成することもできる。疎計算コアは、協働して、効率的な疎の、分散されたルックアップを実行し、なぜならば、埋め込みテーブルが巨大であり得、専用ハードウェアチップの1つの限られた容量の高帯域幅メモリに収まらないためである。疎計算コア機能に関する詳細は、2016年2月5日に提出された「MATRIX PROCESSING APPARATUS(行列処理装置)」と題される米国特許出願第15/016,486号に見ることができる。
図1Bは、コンピュートコア(101)のハイレベルの例を示す。コンピュートコアは、いくつかのコンピュートユニットを並列で制御するマシン、つまりVLIWマシンであることができる。各コンピュートコア(101)には、スカラーメモリ(104)、ベクトルメモリ(108)、スカラー処理ユニット(107)、ベクトルレジスタ(106)、および拡張ベクトルユニット(つまり、行列乗算ユニット(MXU)(113)と、転置ユニット(XU)(114)と、簡約および置換ユニット(RPU)(116))が含まれる。
例示的なスカラープロセッサは、VLIW命令のフェッチ/実行ループを実行し、コンピュートコアを制御する。命令バンドルをフェッチしてデコードした後、スカラープロセッサ自体は、スカラープロセッサ(107)およびスカラーメモリ(104)の複数のマルチビットレジスタ、つまり32の32ビットレジスタを用いて、命令バンドルのスカラースロットにおいて見いだされる命令を実行するのみである。スカラー命令セットには、アドレス計算、ロード/ストア命令、分岐命令などで使用される通常の算術演算が含まれる。残りの命令スロットは、ベクトル処理ユニットまたは他の拡張ベクトルユニット(113、114、116)の命令をエンコードする。デコードされたベクトル命令は、ベクトル処理ユニットに転送される。
ベクトル命令とともに、スカラープロセッサ(107)は、最大3つのスカラーレジスタの値を他のプロセッサおよびユニットに転送して、演算を実行できる。スカラープロセッサは、ベクトルプロセッサから計算結果を直接取得することもできる。ただし、一部の実装形態では、例示的なチップは、ベクトルプロセッサからスカラープロセッサへの低帯域幅通信パスを有する。
ベクトル命令ディスパッチャは、スカラープロセッサとベクトルプロセッサとの間にある。このディスパッチャは、非スカラーVLIWスロットからデコードされた命令を受け取り、それらの命令をベクトル処理ユニットにブロードキャストする。ベクトル処理ユニットは、図1Cを参照して詳細に説明される。
例示的なスカラープロセッサ(107)は、小さい、高速な、プライベートスカラーメモリ(104)にアクセスする。このメモリは、はるかにより大きく、低速な高帯域幅メモリ(HBM)(110)によってバックアップされる。同様に、例示的なベクトル処理ユニットは、小さい、高速な、プライベートベクトルメモリ(108)にアクセスする。このメモリも、HBM(110)によってバックアップされる。ワード粒度アクセスは、スカラープロセッサ(107)とスカラーメモリ(104)との間、またはベクトル処理ユニットとベクトルメモリ(108)との間で起こる。ベクトルプロセッサとベクトルメモリとの間のロードおよびストアの粒度は、128個の32ビットワードのベクトルである。ダイレクトメモリアクセスは、スカラーメモリ(104)とHBM(110)との間、およびベクトルメモリ(108)とHBM(110)との間で起こる。いくつかの実装形態では、HBM(110)から処理ユニット(107)へのメモリ転送は、スカラーメモリまたはベクトルメモリを介してのみ実行できる。さらに、スカラーメモリとベクトルメモリとの間でダイレクトメモリ転送が行われない場合がある。
命令は、拡張ベクトルユニット演算を指定する場合がある。実行された各ベクトルユニット命令に加えて、各々が1つのレジスタ値を拡張ベクトルユニットに入力オペランドとして送ることができる2次元、つまり128×8のベクトルユニットがある。各拡張ベクトルユニットは、入力オペランドを受け取り、対応する演算を実行し、結果をベクトルプロセッサ(306)に返す。拡張ベクトルユニットは、図4を参照して以下に説明される。
図1Cは、ニューラルネットワーク計算を実行するための例示的な専用集積回路100を示す。説明したように、チップには2つのコンピュートコア(103a、103b)と2つの疎計算コア(152a、152b)とが含まれる。
チップは、ホストコンピュータへのホストインターフェイス(150)、下部に沿った高帯域幅メモリの4つのスタック(156a〜156d)、およびインターフェイスとメモリとを接続するチップ間相互接続(148)、ならびに他のチップからのデータを含む共有領域を有する。高帯域幅メモリの2つのスタック(156a〜156b、156c〜156d)が各コンピュートコア(103a、103b)に関連付けられる。
チップは、データを高帯域幅メモリ(156c〜156d)に保存し、そのデータをベクトルメモリ(108)において読込および読出し、そのデータを処理する。コンピュートコア(103b)自体は、2次元に分割されたオンチップS−RAMであるベクトルメモリ(108)を含む。ベクトルメモリには、アドレスが浮動小数点数、つまり各々32ビットである128個の数値を保持するアドレス空間がある。コンピュートコア(103b)は、値を計算する計算ユニット、および計算ユニットを制御するスカラーユニットも含む。
ベクトル処理ユニットは、ベクトル処理ユニットの2次元配列、すなわち128×8から成り、これらはすべて、同じ命令を単一命令複数データ(SIMD)方式で実行する。ベクトルプロセッサには、レーンとサブレーン、つまり128本のレーンおよび8本のサブレーンがある。レーン内において、ベクトルユニットはロード命令およびストア命令を介して互いに通信する。各ベクトルユニットは、一度に1つの4バイト値にアクセスできる。同じレーンに属さないベクトルユニットは直接通信できない。これらのベクトルユニットは、以下で説明する簡約/置換ユニットを用いる必要がある。
計算ユニットは、ベクトル処理ユニット(106)において、浮動小数点演算および整数演算の両方に用いることができるベクトルレジスタ、つまり32個のベクトルレジスタを含む。計算ユニットは、計算を実行するための2つの算術論理ユニット(ALU)(126c〜126d)を含む。一方のALU(126c)は浮動小数点加算を実行し、他方のALU(126d)は浮動小数点乗算を実行する。両方のALU(126c〜126d)は、シフト、マスク、比較などの他のさまざまな演算を実行できる。たとえば、コンピュートコア(103b)は、ベクトルレジスタVと第2のベクトルレジスタVとを加算し、結果を第3のベクトルレジスタVに入れたい場合がある。この加算を計算するために、コンピュートコア(103b)は複数、つまり1024の演算を1クロックサイクルで実行する。これらのレジスタをオペランドとして用いて、各ベクトルユニットは、クロックサイクルごとに2つのALU命令、1つのロードおよび1つのストア命令を同時に実行できる。ロードまたはストア命令のベースアドレスは、スカラープロセッサで計算でき、ベクトルプロセッサに転送できる。各サブレーンにおけるベクトルユニットの各々は、ストライドや特別なインデックス付きアドレスレジスタなどのさまざまな方法を用いて、それ自体のオフセットアドレスを計算できる。
計算ユニットは、平方根や逆数などの演算を実行する拡張単項パイプライン(EUP)(116)も含む。コンピュートコア(103b)は、これらの演算を実行するのに3クロックサイクルかかり、なぜならば、一度に1つのオペランドを取り込むからである。EUP処理には1クロックサイクル以上かかるため、結果を保存する先入れ先出しのデータストレージがある。演算が終了すると、結果はFIFOに保存される。コンピュートコアは、後で別の命令を用いて、FIFOからデータを引き出し、それをベクトルレジスタに格納できる。乱数生成器(120)により、コンピュートコア(103b)はサイクルごとに乱数、つまりサイクルごとに128の乱数を生成できる。
上に述べられるように、各プロセッサは3つの拡張ベクトルユニット、つまり、行列乗算演算を実行する行列乗算ユニット(113)と、行列、すなわち128×128の行列の転置演算を実行する転置ユニット(XU)(114)を含むクロスレーンユニット(XLU)と、図1Cにおいて別個のユニット、簡約ユニット115および置換ユニット116として示される簡約および置換ユニットとを有する。
行列乗算ユニットは、2つの行列間で行列乗算を実行する。コンピュートコアは、乗算される行列である一連の数値を読み込む必要があるため、行列乗算ユニット(113)はデータを取り込む。図示されているように、データはベクトルレジスタ(106)から来る。各ベクトルレジスタには、ある数値、つまりある32ビットの数値が含まれる。しかしながら、データを行列乗算ユニット(113)に送って、数値をより小さなビットサイズ、つまり32ビットから16ビットに変更すると、浮動小数点変換が発生する場合がある。並直列変換器(130)は、ベクトルレジスタから数値が読み取られるときに、2次元配列つまり128×8の行列が128個の数値のセットとして読み取られ、次の8クロックサイクルの各々ごとに行列乗算ユニット(113)に送信されることを保証する。行列乗算がその計算を完了した後、結果は非直列化され(132a、132b)、これは、結果行列が、ある数のクロックサイクルの間保持されることを意味する。たとえば、128×8の配列の場合、128個の数値が8クロックサイクルの各々ごとに保持され、次いで適当なFIFO、例えば、転置結果FIFO(TRF)134または乗算結果FIFO(MRF)136にプッシュされ、128×8の数値の2次元配列を1クロックサイクルで取得して、ベクトル処理ユニット(106)に含まれるベクトルレジスタに格納できる。
あるサイクル期間、すなわち128のサイクルからなる期間にわたって、重みが、行列を乗算する数値として行列乗算ユニット(113)にシフトされる。行列および重みがロードされると、コンピュートコア(103b)は、数値のセット、つまり128×8の数値のセットを行列乗算ユニット(113)に送ることができる。セットの各ラインに行列を乗算して、クロックサイクルごとにある数の結果、つまり128の結果を生成できる。コンピュートコアが行列乗算を実行している間、コンピュートコアは、前の行列の計算プロセスが完了したときに、コンピュートコアが乗算する次の行列が利用できるように、バックグラウンドにおいて次の行列になる新たな数値のセットのシフトも行う。行列乗算ユニット(113)は、乗算されるべき行列におけるデータである重み入力と、行列で乗算されるべきベクトルにおけるデータである左辺データ入力とを処理し、出力のベクトルをベクトル処理ユニットに与えることができる。ベクトル処理ユニットは、出力のベクトルを処理し、処理された出力のベクトルをベクトルメモリに格納することができる。たとえば、ベクトル処理ユニットは、非線形関数を行列乗算ユニットの出力に適用して、ベクトルデータ値を生成できる。いくつかの実装形態では、ベクトル処理ユニット106は、正規化された値、プールされた値、またはその両方を生成する。処理された出力のベクトルは、たとえばニューラルネットワーク内の後続の層で用いるために、行列乗算ユニット113への左辺データ入力として用いることができる。
転置ユニットは、行列を転置する。転置論理ユニット(114)は、数値を取り込み、それらを転置して、レーンを横切る数値が他の次元の数値と転置されるようにする。一部の実装形態では、ベクトルプロセッサは128×8のベクトルユニットを含む。したがって、128×128の行列を転置するには、完全な行列転置のために16個の個別の転置命令が必要である。転置が終了すると、転置された行列が利用可能になる。ただし、転置された行列をベクトルレジスタファイルに移動するには、明示的な命令が必要である。
簡約/置換ユニット(またはユニット115、116)は、置換、レーン回転、回転置換、レーン簡約、置換されたレーン簡約、およびセグメント化された置換されたレーン簡約などのさまざまな操作をサポートすることで、クロスレーン通信の問題に対処する。図示されているように、これらの計算は別々であるが、コンピュートコアは一方もしくは他方または一方に連鎖された他方を用いることができる。簡約ユニット(115)は、数値からなる各ラインを簡約し、それらの数値を置換ユニット(116)に供給する。置換ユニットは、異なるレーン間でデータを変更する。転置ユニット、簡約ユニット、置換ユニット、および行列乗算ユニットは、各々、完了までに1クロックサイクル以上かかる。したがって、各ユニットにはFIFOが関連付けられ、計算結果をFIFOにプッシュし、後で別の命令を実行して、データをFIFOからベクトルレジスタにプルできる。FIFOを用いることにより、コンピュートコアは、長々とした演算の間、複数のベクトルレジスタを予約する必要がない。図示されているように、各ユニットはベクトル処理ユニット(106)におけるベクトルレジスタからデータを取得する。
コンピュートコアは、スカラーユニットを用いて計算ユニットを制御する。スカラーユニットには2つの主要な機能があり、それは、(1)ループカウントおよびアドレス指定を実行すること、ならびに(2)DMAコントローラがバックグラウンドにおいて高帯域幅メモリ(156c〜156d)とベクトルメモリ(108)との間で、および次いで例示のシステムにおける他のチップへのチップ間接続(148)にデータを移動するよう、ダイレクトメモリアドレス(DMA)要求を生成することである。スカラーユニットは、命令メモリ(104)と、命令デコードおよび発行(102)と、スカラーレジスタすなわち32ビットを含むスカラー処理ユニット(107)と、スカラーメモリ(104)と、クロックサイクルごとに2つの演算を実行する2つのALU(126a、126b)とを含む。スカラーユニットは、オペランドと即値とをベクトル演算に渡すことができる。各命令は、ベクトル処理ユニット(106)においてベクトルレジスタで実行される命令を含む命令バンドルとして、命令デコードおよび発行(102)から送ることができる。各命令バンドルは非常に長い命令語(VLIW)であり、各命令はある数のビット幅であり、ある数の命令フィールドに分割される。
図2は、行列乗算ユニット(MXU)201aおよび201bを含む例示的なコアアーキテクチャ200を示す。各MXUは2次元のシストリックアレイである。アレイは、行列乗算演算を実行するように配線される。MXUは、クロックサイクルごとに1つの乗算という一定のスループットで、128要素のベクトルをプリロードされた128×128の行列で乗算する。
各MXUは、128の行および128の列を有する。MXUは、タイルと呼ばれる同一のブロックに分割できる。たとえば、MXUは32個のタイルに分割でき、各タイルには32行×16列が含まれる。各タイルは、さらに積和サブユニットセルに分割できる。各セルはベクトルデータ入力オペランドを取り、そのオペランドに格納された重みを乗算して結果を得、その結果を部分和に加算して新たな部分和を生成する。いくつかの実装形態では、サブユニットセルをより大きなマルチセル、つまり、2×2の積和サブユニットセルのアレイまたはセーデキム(16)セルと呼ばれる4×4の積和サブユニットセルのアレイにグループ化できる。入力データを1つの積和サブユニットセルからクロックサイクルごとに1つの速度で次のセルに移動する代わりに、データはクロックサイクルごとに1つのマルチセルでシストリックアレイを移動できる。
一連のベクトル行列乗算を開始する前に、行列をMXUにプリロードする必要がある。この行列のためのデータは「重み」データと呼ばれる。重み行列は、ソースバスを介して、MXUに接続されたバスによってMXUに送られ、重みシフトレジスタにシフトされる。次いで、重みシフトレジスタの内容が重み行列レジスタにロードされ、行列の乗算が開始できるようになる。この重みロードプロセスは、図3〜図8に関してより詳細に説明される。
図2に示すように、各MXU、例えば113aおよび113bは、3つのバス、転置されない重み用の第1のソースバス(230a、230b)、転置された重み用の第2のソースバス(220a、220b)、およびMXUに格納されている行列で乗算されるベクトルデータ用の左辺バス(210a、210b)に接続される。MXUは、MXUのエッジに接続するワイヤによってバスに接続される。各転置ユニット(XU)、たとえば114aおよび114bも、第1のソースバスおよび第2のソースバスに接続される。
第1および第2のソースバスは、XUまたはMXUで消費されるべくベクトル処理ユニットから送られるデータを含む多目的バスである。データ処理は、ベクトルレジスタ206、直列化処理ユニット202、および選択ユニット204を含むベクトル処理データパスで発生する。ベクトル処理ユニットがバスで重みを送る方法はいくつかある。重みは、通常の「ハイ(H)」または「ロー(L)」で送られてもよい。レーンごとに8つの32ビットの浮動小数点数(サブレーンごとに1つ)が、bfloatの16ビットの浮動小数点数に丸められる。これらの値は4つの対にパックされ、8サイクルのコースにわたって1サイクルおきにMXUに送られる。通常の「H」と「L」との違いは、ベクトル処理ユニットが浮動小数点の32からbfloatへの変換を行う方法である。重みがパックされる場合がある、とは、レーンごとの8つの32ビット値の各々に、パックされたbfloatの対が含まれることを意味する。8つの連続したサイクルの間に各サイクルでソースバスを使用して、8つではなく16の値がMXUに送られる。奇数サイクルでは、各サブレーンの下位16ビットがMXUに送られ、偶数サイクルでは、各サブレーンの上位16ビットが送られる。重みは、追加または代替としてバイト単位で送られてもよい。各32ビットオペランドには、4つの8ビット符号付き2の補数整数のパックされたセットが含まれる。各バイトは、修正された符号絶対値に変換される。これらの値は、連続する8サイクルにわたってソースバスによってMXUに送られる。
重みは、第1または第2のソースバスを用いて転置されないまたは転置された命令として送られ、重みシフトレジスタにシフトされてもよい。ロード操作でトリガされると、以下に説明するように、重みシフトレジスタの内容は重み行列レジスタにロードされる。重みシフトレジスタから重み行列レジスタへのロードパスは、修正された符号絶対値からbfloatへの変換がバイトモードデータで行われる場所でもある。ロード制御バスは、この変換を実行するかどうかを示す。
実行中の命令に応じて、ソースバスからの32ビット値には、ビット[15:0]の値が(時間において)より早い値を表す16ビット浮動小数点値のパックされた対、またはビット[7:0]の値が(時間において)より早い値を表し、他の値がシーケンスで後に続く、修正された符号絶対値形式の4つの8ビットの整数のパックされたセットが含まれてもよい。MXUがバスからデータを受け取ると、データ値はMXU全体に均等に、左側に値0、右側に値127で、拡散される。
左辺(LHS)データバスは、接続されたMXUに格納される行列で乗算されるよう、128個の16ビット浮動小数点数を特定の形式、たとえば、bfloatで運ぶ。LHSデータバスのデータは、ベクトル処理ユニットから来て、転置ユニット、例えば、114aおよび114bを通過する。LHS入力がMXUに到着すると、値はMXU全体に均等に、左側に値0、右側に値127で、拡散される。
行列乗算の結果は、MXU全体に均等に拡散され、MXUから行列結果FIFO(MRF)、たとえば136aおよび136bに送られる。XUからの結果は、対応する転置結果FIFO(TRF)、たとえば134aおよび134bに送られる。
図3は、行列乗算ユニット内のマルチセルの例示的なアーキテクチャを示す。上記で説明したように、行列乗算ユニットは2次元のシストリックアレイである。アレイは、マルチセルにグループ化できる複数の積和サブユニットを含む。いくつかの実装形態では、シストリックアレイの第1の次元はセルの列に対応し、シストリックアレイの第2の次元はセルの行に対応する。シストリックアレイは、列よりも行が多くてもよく、行よりも列が多くてもよく、または列と行とが同数であってもよい。この明細書では、列または垂直方向についての特定の処理について説明する。ただし、異なる設計で行または水平方向の処理を実行できる。
図示された例では、左辺データレジスタ315a、315bは、アレイの行にベクトルデータ入力を送る。重みシフトチェーン301aおよび301bは、重み入力値をアレイの列に送り、重みシフトチェーン302aおよび302bは、重み入力値をアレイの行に送る。シフトチェーンは、たとえばメモリから行列乗算ユニット内のさまざまなレジスタの各々に値を渡すことができる有線経路である。
各重みシフトレジスタ305は、その重み内容値をソースバスから重みシフトレジスタ305のチェーンに沿ってシフトするように設計される。データがシフトインされた後、並列コピー操作により、すべてのデータが重みシフトレジスタ305から対応する重み行列レジスタ325に確実にコピーされる。データが重み行列レジスタ325にあるとき、データは任意の数の乗算サイクルで用いられる。この間、次の乗算セットに備えて、より多くの重みをバックグラウンドで重みレジスタ305にシフトしてもよい(通常はシフトされる)。
左辺データレジスタ315a、315bは、ベクトルデータ入力を受け取ることができる。各左辺データレジスタは、1クロックサイクルについて各クロックサイクルで1つのLHSデータ項目を保持する。マルチセルによって受け取られる各ベクトルデータ入力は、左辺データレジスタ315a、315bなど、マルチセルの対応する左辺レジスタ内を自由に流れてもよい。左辺データレジスタは、ベクトルレジスタによって、またはアレイ内の所与のマルチセルの位置に応じて、そのマルチセルの左にある隣接するマルチセルによって与えられ得るベクトルデータ入力を格納する。例えば、マルチセル300が行列乗算ユニットのシストリックアレイ内の最も左の位置にある場合、ベクトルデータ入力はベクトルレジスタによって与えられる。ベクトルレジスタは、複数の異なるベクトルデータ入力をマルチセル300に与えてもよく、各受け取られたベクトルデータ入力は、次いで、左辺データレジスタ315のうちの異なる1つによって格納されてもよい。各行は、マルチセルにグループ化される行の数に関係なく、クロックサイクルごとに1つの値を受け取る。
各左辺レジスタは、マルチセルのアレイの第1の次元に沿ってセルに結合されてもよい。左辺レジスタのセルへの接続は、図3において点線で示される。例えば、マルチセル内の左辺データレジスタ315a(ある左辺データレジスタ)は、第1の行のセル350aおよび350cに結合される。同様に、マルチセル内の左辺データレジスタ315b(第2の左辺レジスタ)は、第2の行のセル350bおよび350dに結合される。各左辺レジスタ315は、格納されたベクトルデータ入力を、左辺レジスタが結合されるセル350に転送する。したがって、第1の次元に沿って(たとえば、所与の行または所与の列に沿って)延びる所与の数のセルについて、単一のセルだけでなく、マルチセル内のすべてのセルにベクトルデータ入力を渡すことができ、これにより、ベクトルデータ入力がセルのアレイ全体に速く拡散し、マルチセルの動作の効率が向上する。
複数のベクトルデータ入力を隣接する左辺レジスタに送って、複数のベクトルデータ入力をアレイの別のマルチセルで使用できるようにすることもできる。このプロセスにより、アレイの別の特定のマルチセルで使用するためにベクトルデータ入力をシフトできる。
マルチセル300の各セル350は、格納された重み値を含む。行列乗算プロセスを開始する前に、重みをシストリックアレイのセルにシフトしてロードする。専用チェーンおよび重みシフトレジスタが重みシフト用に設けられ、前の行列乗算処理の実行と同時に新たな重みをシフトインできる。行列入力演算処理全体のレイテンシを短縮する方法で、重み入力をマルチセルにロードできる。
上述のように、重みシフトチェーン301、302は、メモリユニット、例えば図1のベクトルメモリ108から重み入力を受け取ることができる。シフトチェーンは、複数の対応する重み入力を、マルチセル300に関連付けられた重み行列レジスタ325に送ることができる。
いくつかの実装形態では、重みシフトレジスタは、ベクトルデータ入力をアレイ全体にわたって1つの次元に沿って、たとえば右にシフトし、重み入力をアレイ全体にわたって1つまたは両方の次元、たとえば右または下にシフトする。例えば、1クロックサイクルにわたって、マルチセル300における複数のベクトルデータ入力の各ベクトルデータ入力は、同じ行における次のマルチセルにおいて対応する左辺データレジスタにシフトできる。水平データ(左辺データ)および垂直データ(部分和)は、各々、クロックサイクルごとに、クロックサイクルにつき1マルチセルずつ移動する。重みは、システムによって指示された場合にのみシフトし、実装形態および実行される命令に応じて、1、2、もしくは4行(または列)シフトしてもよい。
マルチプレクサ330は、第1のシフトチェーン301または第2のシフトチェーン302の重みシフトレジスタ305から重みを選択し、選択された入力を重み行列レジスタ325への単一のラインに転送する。マルチプレクサ330はセル350の境界線の外側に示されるが、いくつかの実装形態では、マルチプレクサ330はセル350内に存在する。
あるクロックサイクルで、各マルチセルは複数の所与の重み入力および複数の所与のベクトルデータ入力を処理して、複数の累積出力を生成できる。一般に、処理には、ベクトルデータ入力に格納された重みを乗算する乗算演算が含まれる。累積出力は、所与の重み入力と同じ次元に沿って、下に、隣接するマルチセルに渡すこともできる。いくつかの実装形態では、1つの畳み込み計算から別の畳み込み計算に移行するために、重みが所与のクロックサイクル中に1より多いマルチセルをシフトされる。
累積出力は、重み入力と同じ列に沿って、たとえばアレイ内の列の一番下に向かって渡すことができる。いくつかの実装形態では、部分和レジスタ310a、311aは、部分和値を前のマルチセルから当該のマルチセルに渡す。アレイは、マルチセルの各列から累積出力を格納する部分和レジスタ310b、311bを含むことができる。マルチセルの各列について、列のサブユニットセルによって生成された積は、上のマルチセルからの入来部分和と結合され、次の部分和として送られる。特定のマルチセル、例えばシストリックアレイの一番下の列のマルチセルなどの場合、累積出力は、ベクトル計算ユニットに転送できる最終的な累積値を含んでもよい。いくつかの実装形態では、最終的な累積値はアレイの一番下のマルチセルからベクトル計算ユニットに直接転送されるが、他の実装形態では、最終的な累積値はまずメモリに保存されるか、または異なるコンポーネントによって処理されてからベクトル計算ユニットに送られる。
図4は、重み値のロード速度を高めるために、マルチセルサブアレイの列ごとに重みシフトレジスタの2つのチェーンを備えた行列乗算ユニットのマルチセルのアーキテクチャの例を示す。図4に示すように、セル435aおよびセル435bはマルチセル400の1つの列を構成し、セル435cおよびセル435dはマルチセル400の第2の列を構成する。各列には、重みシフトレジスタのチェーンが2つある。所与の列の各セルは、その列の2つのチェーンのうちの1つのみから重み入力を受け取るように構成される。図4に示すように、1つのチェーン401は偶数行において重みシフトレジスタに接続し、1つのチェーン402は奇数行において重みシフトレジスタに接続する。各サイクルで、2つの新たな値が各列にシフトされ、既存のすべての重み値が2行下にシフトされる。したがって、重みは、シストリックアレイの列ごとに重みシフトレジスタの2つのチェーンを有さない行列乗算ユニットの2倍の速度でマルチセルにロードできる。
図示されるように、重み値はベクトルレジスタ403からシフトインされる。一実装形態では、行列乗算ユニットの列ごとに1つのベクトルレジスタ403がある。図3の例では、ベクトルレジスタ403は行列乗算ユニットの上部に示されるが、ベクトルレジスタ403は、行列乗算ユニットに対して様々な位置、例えばユニットの底部に物理的に位置することができる。
ベクトルレジスタ403は、行列乗算ユニットによって演算される値よりも何らかの大きさだけ大きいまたは小さいレジスタ値を保持することができる。たとえば、レジスタはnビット値を保持し、行列乗算ユニットはn/2ビット値で動作する。一部の実装形態では、各ベクトルレジスタは32ビット値を保持し、行列乗算ユニットは16ビット値で動作する。ある例示的な行列乗算ユニットは、レジスタの各32ビット値を16ビット値の対として処理するモードを有し、この対の1つの16ビット値は、第1の重みシフトチェーン401に送られ、この対の第2の16ビット値は、第2の重みシフトチェーン402に送られる。列ごとに1つのベクトルレジスタ403が示されるが、マルチセルごとにわずか1つのベクトルレジスタ403があってもよい。追加的または代替的に、各チェーンは、単一の16ビットの重み値をチェーンに与える別個のベクトルレジスタ303に接続されてもよい。この場合、ベクトルレジスタ403における32ビット浮動小数点値は16ビット値に変換される。
ある実装形態では、重み値は、列ごとに2つのシフトチェーンがない状態で行列乗算ユニットの速度の2倍で値を送信するよう利用可能でない場合がある。この状況を処理するために、各垂直シフトチェーンに1つずつ、2つの重み値が利用可能になるまで、重み値を保持するよう、保持レジスタ445が各列の上部に配置される。1つの重み値のみが利用可能な最初のクロックサイクルで、利用可能な重み値は保持レジスタ445にコピーされる。新たな重み値が利用可能な次のクロックサイクルで、保持レジスタ内の重み値は1つの重みシフトチェーンによって保持レジスタから重みシフトレジスタにシフトされることになり、そのクロックサイクルで利用可能な新たな重み値は、第2の重みシフトチェーンによって第2の重みシフトレジスタにシフトされる。
水平シフトチェーン405は、上述のようにセルに重み値を与えてもよい。いくつかの実装形態では、上記の垂直シフトチェーン401、402と同じ方法で重みロードレイテンシを減少させるように機能する2つの水平シフトチェーンがあり得る。
マルチプレクサ430は、セル内の重み行列レジスタに送られる重み値が水平シフトチェーン405から来るか、または垂直シフトチェーン401bもしくは402bから来るかを判断する。重み値が重み行列レジスタにロードされ、左辺データレジスタ415がベクトルデータ入力を与えると、セル435で行列乗算を実行できる。
図5は、重み値を所与のマルチセルの列にロードするための例示的なプロセス500の流れ図である。インターフェイスは、ベクトルレジスタから少なくとも1つの重み値を受け取る(501)。
インターフェイスは、複数の重み値が利用可能かどうかを判断する(502)。
複数の重み値が利用可能な場合、インターフェイスは、重み値を、シフトチェーンによって、クロックサイクルで、マルチセル内のセル435の重みシフトレジスタにシフトする(504)。
インターフェイスは、重み行列からのすべての重み値が行列乗算ユニットにロードされるまで、重み値をロードし続ける(506)。
同じクロックサイクルで2つの重み値が利用可能でない場合、単一の重み値が利用可能な最初のサイクルで、保持レジスタ445にその利用可能な重み値がロードされ、シフトは行われない(503)。
別の重み値が利用可能になる次のサイクルで、インターフェイスは、新たな値および保持レジスタ445に保持される値を2つのシフトチェーンによってマルチセルの重みシフトレジスタにシフトする(505)。
次に、インターフェイスは、重み行列からのすべての重み値が行列乗算ユニット506にロードされるまで、重み値のロードを続ける。
サイクルごとに複数の重み値が利用可能でない場合、インターフェイスは1サイクルおきにシフトチェーンを活性化する。
図6は、重み値のロード速度を4倍増加させるために、列ごとに2つのチェーンの重みシフトレジスタを伴い、列ごとに2つのポイントで重み値を注入する、行列乗算ユニットのアーキテクチャの例を示す。図3に示すように、行列乗算ユニットには、シストリックアレイの列ごとに2つのシフトチェーンがある。各セル650は、1つのシフトチェーンのみに接続されるシフトレジスタ635を含む。上述のように、ベクトルレジスタ603は、行列乗算ユニットによって演算される値よりも何らかの大きさだけ大きいまたは小さいレジスタ値を保持することができる。たとえば、あるレジスタはnビット値を保持し、行列乗算ユニットはn/2ビット値で動作する。ベクトルレジスタ内の値は、行列乗算ユニットに期待される値サイズに一致するように分割または何らかの方法で変換できる。
一実装形態では、各レジスタ603は32ビットの値を保持することができる。各ベクトルレジスタ603の値は、各々別個の重み値である4つの8ビット符号付き整数のパックされたセットとして扱われる。図3に示すように、各8ビットの符号付き整数は、2つの16ビットのチェーンで送られる。ただし、それらの整数はシストリックアレイにおいて列ごとに2つの注入ポイント680、681に送られる。それらの整数は、アレイの上部(680a、6801a)および下の別のポイント(680b、680b)に送られる。説明した複数の注入ポイントを有する実施形態は、本明細書で説明する他の実施形態および特徴と組み合わせることができる。
いくつかの実装形態では、整数がアレイの下半分のポイントに送られる場合、整数を注入するための追加の配線は必要ではなく、なぜならば、ベクトルレジスタからアレイの上部へのチェーンがアレイの全長を下から上まで横断するからである。各列の上部で、整数のうちの2つが、アレイで用いられる形式の16ビットの浮動小数点値に変換され、上記の2つの重みシフトチェーン(680a、681a)に注入される。シフトチェーンはマルチプレクサによって中間ポイントで切断され、そのポイントでの整数から浮動小数点へのコンバータの第2のセットが、各32ビット値から他の2つの整数を取得し、変換し、そのポイント(680b、681b)で注入する。たとえば、32ビットのワードを、8ビットの4つの等しい部分、A、B、C、Dに分割できる。重みインターフェイスで、部分Aおよび部分Bをアレイの上部に送り、それらを、行列乗算ユニットによって演算される16ビット値に変換する。重みインターフェイスは、マルチプレクサを介してアレイの中間ポイントに部分Cおよび部分Dを送ることもできる。この実装形態では、部分Cおよび部分Dはアレイの上部には送られず、シフトチェーンの中間ポイントでセルの重みシフトレジスタに注入される。シフトチェーン上において中間ポイントにマルチプレクサが存在するため、重み値は、シフトチェーン上の前の重みシフトレジスタからではなく、注入ポイントから選択される。
第2の重みの対をアレイに注入するポイントは、中間ポイントではなく、他のポイントである可能性がある。たとえば、アレイの下への1/4のポイントになる場合がある。この場合、上部に注入された重みは、行列乗算ユニットの最初の1/4のセルおよび行列乗算ユニットの3番目の1/4のセルにシフトされ、1/4のポイントに注入された重みは、行列乗算ユニットの2番目および4番目の1/4のセルにシフトされる。このプロセスには追加の配線が必要であるが、前の行列乗算が終了しつつある間に重みがより早くシフトし始めることができる。
示されるように、2つのシフティングチェーンは列ごとに発生する。ただし、一部の実装形態では、2つのシフティングチェーンは、追加的または代替的に、シフティングチェーンごとに2つの注入ポイントがある状態で、行ごとに生じ得る。
図7は、重み値をロードする速度を増加させるために、転置された重みシフトおよび通常の転置されない重みシフトのための別個のレジスタを有する行列乗算ユニットのアーキテクチャの例を示す。各マルチセル700は複数のセル750を含み、垂直方向または水平方向のいずれかから重み値をロードすることができる。重みを上から垂直方向にロードすると、重み行列が行列乗算ユニットに格納される。同じ重みを同じ順序で横からロードすると、重み行列の転置が行列乗算ユニットに格納される。ニューラルネットワークシステムのトレーニングでは、転置されない重み行列および転置された重み行列の両方を、トレーニングアルゴリズムの異なるステップでロードする必要がある。重みが上から垂直方向にロードされると、重み値はセルを通して下にシフトされる。重みが左から水平方向にロードされると、重み値はマルチセル700を通って右にシフトされる。図7は、通常のシフトレジスタ705に接続された通常のシフトチェーン701a、701bを示す。転置されたシフトチェーン702a、702bは転置されたシフトレジスタ705に接続される。マルチプレクサ730は、どのシフトチェーン701、702から重み行列レジスタ725をロードするかを判断する。
一部の実装形態では、ある重みのセットを行列乗算ユニットの重み行列レジスタにシフトするのにnサイクルかかる。2番目の重みのセットは、そのシフトを、最初の重み値がロードされたn/2サイクル後に開始でき、新たな重みのセットをn/2サイクルごとにシフトレジスタから重み行列レジスタにロードしてもよい。
一部の実装形態では、128×128の重みのセット全体を常に使用する必要はない。未使用の位置の重みをゼロにセットして、重み行列を効果的に小さくすることができる。ある行列乗算ユニットは、その場合、データを重みシフトレジスタのすべての行またはすべての列にシフトする必要はない。各重みシフト命令は、8行のデータ、または転置されたロードの場合には8列のデータを、シストリックアレイにシフトすることになる。16個の重みシフト命令は、128×128の行列全体をロードし、以前のすべてのデータを置き換える。データが重みシフトレジスタから対応する重み行列レジスタにコピーされると、各重みシフトレジスタはクリアされる。新たなデータを重みシフトレジスタにシフトすることは、このロード&クリア信号の伝搬が開始された直後に開始できる。データがロードされる機会を有する前にシフトしないように、重みシフト信号は、ロード&クリア波面の下および右のすべてのセルに対して禁止される。古いデータは完全にクリアされるため、データの行または列のすべてをシフトインする必要はない。シフトレジスタの上(または左)部分のみが新たなデータで埋められ、残りはゼロのままとなるため、それらの行への入来データは無視される(またはそれらの列からの出力データはゼロにされる)。
図8は、重み値のロード速度を高めるために保持レジスタのセットを有する例示的なセル800を示す。セル800は、シフトインされた重みのセットのための一時記憶として用いられる1つ以上の重み保持レジスタのセットを含む。1つのセットの重みシフトレジスタ805aの値は、重み行列レジスタ825にコピーされる代わりに、またはそれに加えて、1つのセットの重み保持レジスタ845aにコピーすることができる。第2のセットの重みシフトレジスタ805bの値は、重み行列レジスタ825にコピーされる代わりに、またはそれに加えて、第2のセットの重み保持レジスタ845bにコピーすることができる。重み値のセットが重み行列レジスタにロードされるとき、重み値のセットは、重みシフトレジスタ805a、805bから直接ではなく、保持レジスタ845のセットの1つから取得されてもよい。このプロセスにより、重み値のセットを、アレイへのシフト後に複数回ロードすることができる。たとえば、アルゴリズムが2つの重みセット間の切り替えを必要とする場合、1つのシフトチェーンからの重み値をロード間で保持レジスタにシフトできる。このプロセスにより、重みシフトのタイミングを重みロードから切り離すこともできる。たとえば、新たな重み値のセットがn/cサイクルごとにシフトを開始する場合、両方の重み値のセットを同時にシフトし、最初のセットが重み行列レジスタにロードされると、もう1つのセットが重み保持レジスタに移動されることが考えられる。追加のn/2サイクルの後、2番目のセットが保持レジスタから重み行列レジスタにロードされる。
いくつかの実装形態では、図4および/または図6の2つのシフトチェーンは、所与の時間に行列乗算ユニットにロードできる重み値の量の増大のために、通常のおよび転置されたシフトレジスタの追加と組み合わせることができる。
本明細書において記載される主題および機能的動作の実施形態は、本明細書に開示される構造およびそれらの構造的等価物を含む、デジタル電子回路系において、有形で実施されるコンピュータソフトウェアもしくはファームウェアにおいて、コンピュータハードウェアにおいて、またはそれらの1つ以上の組合せにおいて実現され得る。本明細書に記載される主題の実施形態は、1つ以上のコンピュータプログラムとして、すなわち、データ処理装置による実行のために、または、データ処理装置の動作を制御するために有形の非一時的な記憶媒体上でエンコードされたコンピュータプログラム命令の1つ以上のモジュールとして実現され得る。コンピュータ記憶媒体は、機械可読記憶装置、機械可読記憶基板、ランダムもしくはシリアルアクセスメモリデバイス、または、それらの1つ以上の組合せであり得る。代替的に、または加えて、プログラム命令は、データ処理装置による実行に対して好適な受信側装置への送信のために情報をエンコードするよう生成される、たとえばマシンにより生成された電気信号、光信号、または電磁気信号などの、人為的に生成された伝搬される信号上でエンコードすることができる。
「データ処理装置」という用語は、データ処理ハードウェアを指し、例としてプログラマブルプロセッサ、コンピュータ、または複数のプロセッサもしくはコンピュータを含む、データを処理するためのすべての種類の装置、デバイスおよびマシンを包含する。当該装置は、たとえばFPGA(フィールドプログラマブルゲートアレイ)またはASIC(特定用途向け集積回路)といった特定目的論理回路でもあることができるかまたはそれをさらに含み得る。当該装置は、ハードウェアに加えて、たとえばプロセッサファームウェア、プロトコルスタック、データベース管理システム、オペレーティングシステム、または、それらの1つ以上の組合せを構成するコードといった、コンピュータプログラムについて実行環境を作成するコードをオプションとして含み得る。
プログラム、ソフトウェア、ソフトウェアアプリケーション、アプリケーション、モジュール、ソフトウェアモジュール、スクリプトまたはコードとも称され、または記載され得るコンピュータプログラムは、コンパイル型もしくはインタープリタ型言語、または宣言型もしくは手続き型言語を含む任意の形態のプログラミング言語で記述され得、スタンドアロンプログラムとして、または、モジュール、コンポーネント、サブルーチン、もしくは、コンピューティング環境で使用するのに好適な他のユニットとして任意の形態で展開され得る。プログラムは、ファイルシステムにおけるファイルに対応し得るが、対応する必要があるわけではない。プログラムは、当該プログラムに専用である単一のファイルにおいて、または、複数の連携ファイル(coordinated files)(たとえばコードの1つ以上のモジュール、サブプログラムまたは部分を格納するファイル)において、他のプログラムまたはデータ(たとえばマークアップ言語ドキュメントに格納される1つ以上のスクリプト)を保持するファイルの一部に格納され得る。コンピュータプログラムは、1つの場所に位置するかもしくは複数の場所にわたって分散されデータ通信ネットワークによって相互接続される1つのコンピュータまたは複数のコンピュータ上で実行されるように展開され得る。
本明細書に記載されるプロセスおよび論理フローは、入力データ上で動作し出力を生成することにより機能を実行するよう1つ以上のプログラマブルコンピュータが1つ以上のコンピュータプログラムを実行することによって実行され得る。本プロセスおよび論理フローは、たとえばFPGAもしくはASICといった特殊目的論理回路系によっても、または特殊目的論理回路計と1つ以上のプログラムされたコンピュータとの組み合わせによっても実行され得る。
コンピュータプログラムの実行に好適であるコンピュータは、汎用マイクロプロセッサもしくは特殊目的マイクロプロセッサもしくはその両方または任意の種類の中央処理ユニットに基づき得る。一般に、中央処理ユニットは、リードオンリメモリもしくはランダムアクセスメモリまたはその両方から命令およびデータを受け取る。コンピュータの必須の要素は、命令を実行するための中央処理ユニットと、命令およびデータを格納するための1つ以上のメモリデバイスとである。中央処理ユニットおよびメモリは、特殊目的論理回路系によって補足され得るか、または特殊目的論理回路に組み込まれ得る。一般に、コンピュータはさらに、たとえば磁気ディスク、光磁気ディスクまたは光ディスクといった、データを格納するための1つ以上の大容量記憶装置を含むか、当該1つ以上の大容量記憶装置からデータを受け取るかもしくは当該1つ以上の大容量記憶装置にデータを転送するよう動作可能に結合されるか、またはその両方を行う。しかしながら、コンピュータはそのような装置を有する必要はない。さらに、コンピュータはたとえば、携帯電話、携帯情報端末(PDA)、モバイルオーディオまたはビデオプレーヤ、ゲームコンソール、全地球測位システム(GPS)受信機、またはポータブル記憶装置(たとえばユニバーサルシリアルバス(USB)フラッシュドライブ)といった別のデバイスに埋め込まれ得る。
コンピュータプログラム命令およびデータを格納するのに好適であるコンピュータ可読媒体は、例として、たとえばEPROM、EEPROMおよびフラッシュメモリデバイスといった半導体メモリデバイスを含むすべての形態の不揮発性メモリ、媒体およびメモリデバイス;たとえば内部ハードディスクまたはリムーバブルディスクといった磁気ディスク;光磁気ディスク;ならびにCD−ROMおよびDVD−ROMディスクを含む。
ユーザとの対話を与えるために、本明細書に記載される主題の実施形態は、たとえばCRT(陰極線管)またはLCD(液晶ディスプレイ)モニタといったユーザに対して情報を表示するための表示デバイスと、たとえばマウス、トラックボールといったユーザがコンピュータに入力を与えることができるキーボードおよびポインティングデバイスとを有するコンピュータ上で実現され得る。他の種類のデバイスが、同様に、ユーザとの対話を与えるために用いられ得;たとえば、ユーザに提供されるフィードバックは、たとえば視覚フィードバック、聴覚フィードバックまたは触覚フィードバックといった任意の形態の感覚フィードバックであり得;ユーザからの入力は、音響入力、音声入力、または触覚入力を含む任意の形態で受け取られ得る。加えて、コンピュータは、ユーザが使用するデバイスにドキュメントを送信しユーザが使用するデバイスからドキュメントを受信することによって、たとえば、ウェブブラウザから受信された要求に応答してユーザのデバイス上のウェブブラウザにウェブページを送信することによって、ユーザと対話し得る。また、コンピュータは、テキストメッセージまたは他の形式のメッセージを個人用デバイス、たとえばスマートフォンなどに送信し、メッセージングアプリケーションを実行し、ユーザから応答メッセージを受信することにより、ユーザと対話できる。
本明細書に記載される主題の実施形態は、たとえばデータサーバとしてバックエンドコンポーネントを含む計算システムにおいて実現され得るか、たとえばアプリケーションサーバといったミドルウェアコンポーネントを含む計算システムにおいて実現され得るか、たとえば本明細書に記載される主題の実現例とユーザが対話することが可能であるグラフィカルユーザインターフェイス、ウェブブラウザもしくはアプリを有するクライアントコンピュータといったフロントエンドコンポーネントを含む計算システムにおいて実現され得るか、または1つ以上のそのようなバックエンドコンポーネント、ミドルウェアコンポーネントもしくはフロントエンドコンポーネントの任意の組合せの計算システムにおいて実現され得る。システムのコンポーネントは、たとえば通信ネットワークといったデジタルデータ通信の任意の形態または媒体によって相互接続され得る。通信ネットワークの例は、ローカルエリアネットワーク(LAN)およびワイドエリアネットワーク(WAN)、たとえばインターネットを含む。
計算システムはクライアントおよびサーバを含むことができる。クライアントとサーバとは一般に互いから遠隔にあり、典型的には通信ネットワークを通じて対話する。クライアントとサーバとの関係は、それぞれのコンピュータ上で実行されるとともに互いに対してクライアント−サーバ関係を有するコンピュータプログラムによって発生する。いくつかの実施形態では、サーバは、例えば、クライアントとして振る舞うユーザデバイスと対話するユーザにデータを表示し、およびそのユーザからユーザ入力を受信する目的で、データ、例えば、HTMLページをユーザデバイスに送信する。ユーザデバイスで生成されたデータ、例えば、ユーザ対話の結果は、ユーザデバイスからサーバで受信することができる。
実施形態1は、セルのシストリックアレイとして実装される行列乗算ユニットであって、セルのシストリックアレイの各セルは、転置されたまたは転置されない重みシフトレジスタから重み入力を受け取るように構成される重み行列レジスタと、重み行列レジスタに格納されるよう水平方向から重み入力を受け取るように構成される転置された重みシフトレジスタと、重み行列レジスタに格納されるよう垂直方向から重み入力を受け取るように構成される転置されない重みシフトレジスタと、重み行列レジスタに結合され、乗算結果を得るために重み行列レジスタの重み入力をベクトルデータ入力で乗算するように構成される乗算ユニットとを含む。
実施形態2は実施形態1の行列乗算ユニットであって、各セルはさらに、転置された重みシフトレジスタの重み入力と転置されない重みシフトレジスタとの間で選択を行い、選択された重み入力を重み行列レジスタに転送するように構成されるマルチプレクサを備える。
実施形態3は、転置された重みシフトレジスタまたは転置されない重みシフトレジスタのいずれかからの重み値を保持するように構成された第1の重み保持レジスタをさらに備える、実施形態1または2の行列乗算ユニットである。
実施形態4は、転置された重みシフトレジスタまたは転置されない重みシフトレジスタのいずれかからの重み値を保持するように構成された第2の重み保持レジスタをさらに備える、実施形態1〜3のいずれか1つの行列乗算ユニットである。
実施形態5は実施形態1〜4のいずれか1つの行列乗算ユニットであって、ある重み値が転置された重みシフトレジスタから第1の重み保持レジスタにロードされ、ある重み値が垂直方向から第2の重み保持レジスタにロードされる。
実施形態6は実施形態1〜5のいずれか1つの行列乗算ユニットであって、重み行列レジスタには、第1の重み保持レジスタまたは第2の重み保持レジスタから値がロードされる。
実施形態7はシストリックアレイとして実装される行列乗算ユニットであって、シストリックアレイの列に配置された複数のセルと、シストリックアレイの列ごとに設けられる重みシフトレジスタの2つのチェーンとを備え、各重みシフトレジスタは1つのチェーンのみに接続され、各セルは1つの重みシフトレジスタのみに接続され、行列乗算ユニットはさらに、セルごとに設けられ、重みシフトレジスタから受け取られる重み入力を格納するように構成された重み行列レジスタと、重み行列レジスタに結合され、乗算結果を得るために重み行列レジスタの重み入力をベクトルデータ入力で乗算するように構成される乗算ユニットとを備える。
実施形態8は、実施形態7の行列乗算ユニットであり、重み値は、重み値の対を含むベクトルレジスタから重みシフトレジスタの2つのチェーンで送られる。
実施形態9は、ベクトルレジスタから2つの重み値が利用可能でない場合に重み値を保持するために各列の上部に保持レジスタをさらに備える、実施形態7または8の行列乗算ユニットである。
実施形態10は、実施形態7〜9のいずれか1つの行列乗算ユニットであり、2つの重み値が利用可能な場合、2つの重み値はクロックサイクルでセル内の重みシフトレジスタにシフトされる。
実施形態11は、実施形態7〜10のいずれか1つの行列乗算ユニットであって、2つの重み値が利用可能でない場合、第1の重み値が利用可能な第1のクロックサイクルで、保持レジスタに、第1の重み値が、保持される値としてロードされ、シフトは行われず、次のクロックサイクルで、第2の重み値が利用可能な場合、第2の重み値と保持された値とは、2つのシフトチェーンによって、1つの値が各シフトチェーンによりシフトされて、シフトチェーンに接続された重みシフトレジスタにシフトされる。
実施形態12は、各シフトチェーンは、重み値を注入するための2つの注入ポイントを有し、一方のポイントは列の上部にあり、他方のポイントは列の第2のポイントにある、実施形態7〜11のいずれか1つの行列乗算ユニットである。
実施形態13は、各々別々の重み値を表す4つの8ビット整数のパックされたセットを含むベクトルレジスタをさらに備える、実施形態7〜12のいずれか1つの行列乗算ユニットである。
実施形態14は、列の上部に4つの整数のうちの2つを注入し、アレイの第2のポイントに4つの整数の他の2つを注入することをさらに含む、実施形態7〜13のいずれか1つの行列乗算ユニットである。
本明細書は多くの特定の実現例の詳細を含んでいるが、これらは如何なる発明の範囲または請求され得るものの範囲に対する限定としても解釈されるべきではなく、特定の発明の特定の実施形態に特有の特徴であり得る記載として解釈されるべきである。別個の実施形態の文脈で本明細書において記載されるある特徴は、単一の実施形態において組合せでも実現され得る。反対に、単一の実施形態の文脈において記載されるさまざまな特徴は、複数の実施形態において別々に、または任意の好適な部分的組合わせでも実現され得る。さらに、特徴は、ある組合せにおいて作用すると上で記載され、最初はそのように請求されていさえする場合もあるが、請求される組合せからの1つ以上の特徴はいくつかの場合には当該組合せから削除され得、請求される組合せは、部分的組合わせまたは部分的組合わせの変形例に向けられ得る。
同様に、動作が図においては特定の順に示されているが、そのような動作は、望ましい結果を達成するために、示された当該特定の順もしくは連続した順で実行される必要があると理解されるべきではなく、または、すべての示された動作が実行される必要があると理解されるべきではない。ある状況においては、マルチタスキングおよび並列処理が有利であり得る。さらに、上述の実施形態におけるさまざまなシステムモジュールおよびコンポーネントの分離は、すべての実施形態においてそのような分離を必要とすると理解されるべきではなく、記載されるプログラムコンポーネントおよびシステムは一般に単一のソフトウェア製品に統合され得るかまたは複数のソフトウェア製品にパッケージ化され得ることが理解されるべきである。
主題の特定の実施形態が記載された。他の実施形態は以下の請求の範囲内にある。たとえば、請求項において記載されるアクションは、異なる順で実行され得、それでも望ましい結果を達成し得る。一例として、添付の図において示されるプロセスは、望ましい結果を達成するために、示された特定の順または連続する順であることを必ずしも必要としない。ある場合においては、マルチタスキングおよび並列処理が有利であり得る。

Claims (12)

  1. セルのシストリックアレイとして実装される行列乗算ユニットであって、前記セルのシストリックアレイの各セルは、
    転置されたまたは転置されない重みシフトレジスタから重み入力を受け取るように構成される重み行列レジスタと、
    前記重み行列レジスタに格納されるよう、2次元フォーマットの第1の方向から重み入力を受け取るように構成される転置された重みシフトレジスタと、
    前記重み行列レジスタに格納されるよう、前記第1の方向に対して垂直である前記2次元フォーマットの第2の方向から重み入力を受け取るように構成される転置されない重みシフトレジスタと、
    前記重み行列レジスタに結合され、乗算結果を得るために前記重み行列レジスタの重み入力をベクトルデータ入力で乗算するように構成される乗算ユニットとを備える、行列乗算ユニット
  2. 前記重み入力は、ニューラルネットワークの重み入力であり、
    前記ベクトルデータ入力は、ニューラルネットワークのベクトルデータ入力である、請求項1に記載の行列乗算ユニット。
  3. 各セルは、前記転置された重みシフトレジスタの重み入力と前記転置されない重みシフトレジスタの重み入力との間で選択を行い、選択された重み入力を前記重み行列レジスタに転送するように構成されるマルチプレクサをさらに備える、請求項1または2に記載の行列乗算ユニット。
  4. 前記転置された重みシフトレジスタまたは前記転置されない重みシフトレジスタのいずれかからの重み値を保持するように構成された第1の重み保持レジスタをさらに備える、請求項1〜3のいずれか1項に記載の行列乗算ユニット。
  5. 前記転置された重みシフトレジスタまたは前記転置されない重みシフトレジスタのいずれかからの重み値を保持するように構成された第2の重み保持レジスタをさらに備える、請求項に記載の行列乗算ユニット。
  6. ある重み値は、転置された重みシフトレジスタから前記第1の重み保持レジスタにロードされ、ある重み値は、垂直方向から前記第2の重み保持レジスタにロードされる、請求項に記載の行列乗算ユニット。
  7. 前記重み行列レジスタには、前記第1の重み保持レジスタまたは前記第2の重み保持レジスタから値がロードされる、請求項または請求項に記載の行列乗算ユニット。
  8. データが前記重み行列レジスタにあるとき、前記データは任意の数の乗算サイクルで用いられる、請求項1から請求項のいずれか1項に記載の行列乗算ユニット。
  9. 前記任意の数の乗算サイクルの間に、次の乗算セットに備えて、より多くの重みがバックグラウンドで前記重みシフトレジスタにシフトされる、請求項に記載の行列乗算ユニット。
  10. 前記任意の数の乗算サイクルの間に、乗算結果を得るために、前記重み行列レジスタの重み入力がベクトルデータ入力で乗算される、請求項に記載の行列乗算ユニット。
  11. ベクトルデータ入力がクロックサイクルごとに1マルチセルだけ移動する、請求項1から請求項10のいずれか1項に記載の行列乗算ユニット。
  12. 命令が受け取られると、前記命令に基づいて重みがシフトされる、請求項1から請求項11のいずれか1項に記載の行列乗算ユニット。
JP2019553237A 2017-05-17 2018-05-17 低レイテンシ行列乗算ユニット Active JP6929958B2 (ja)

Priority Applications (3)

Application Number Priority Date Filing Date Title
JP2021131278A JP7135181B2 (ja) 2017-05-17 2021-08-11 低レイテンシ行列乗算ユニット
JP2022138332A JP7444936B2 (ja) 2017-05-17 2022-08-31 低レイテンシ行列乗算ユニット
JP2024024596A JP2024063060A (ja) 2017-05-17 2024-02-21 低レイテンシ行列乗算ユニット

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US201762507766P 2017-05-17 2017-05-17
US62/507,766 2017-05-17
PCT/US2018/033261 WO2018213628A1 (en) 2017-05-17 2018-05-17 Low latency matrix multiply unit

Related Child Applications (1)

Application Number Title Priority Date Filing Date
JP2021131278A Division JP7135181B2 (ja) 2017-05-17 2021-08-11 低レイテンシ行列乗算ユニット

Publications (2)

Publication Number Publication Date
JP2020516991A JP2020516991A (ja) 2020-06-11
JP6929958B2 true JP6929958B2 (ja) 2021-09-01

Family

ID=62815117

Family Applications (4)

Application Number Title Priority Date Filing Date
JP2019553237A Active JP6929958B2 (ja) 2017-05-17 2018-05-17 低レイテンシ行列乗算ユニット
JP2021131278A Active JP7135181B2 (ja) 2017-05-17 2021-08-11 低レイテンシ行列乗算ユニット
JP2022138332A Active JP7444936B2 (ja) 2017-05-17 2022-08-31 低レイテンシ行列乗算ユニット
JP2024024596A Pending JP2024063060A (ja) 2017-05-17 2024-02-21 低レイテンシ行列乗算ユニット

Family Applications After (3)

Application Number Title Priority Date Filing Date
JP2021131278A Active JP7135181B2 (ja) 2017-05-17 2021-08-11 低レイテンシ行列乗算ユニット
JP2022138332A Active JP7444936B2 (ja) 2017-05-17 2022-08-31 低レイテンシ行列乗算ユニット
JP2024024596A Pending JP2024063060A (ja) 2017-05-17 2024-02-21 低レイテンシ行列乗算ユニット

Country Status (8)

Country Link
US (8) US10698974B2 (ja)
EP (4) EP3526683B1 (ja)
JP (4) JP6929958B2 (ja)
KR (1) KR102302608B1 (ja)
CN (4) CN116661732A (ja)
BR (2) BR112019022916A2 (ja)
TW (5) TWI816475B (ja)
WO (2) WO2018213635A1 (ja)

Families Citing this family (64)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10853448B1 (en) 2016-09-12 2020-12-01 Habana Labs Ltd. Hiding latency of multiplier-accumulator using partial results
US10698974B2 (en) 2017-05-17 2020-06-30 Google Llc Low latency matrix multiply unit
US11157441B2 (en) 2017-07-24 2021-10-26 Tesla, Inc. Computational array microprocessor system using non-consecutive data formatting
US11157287B2 (en) 2017-07-24 2021-10-26 Tesla, Inc. Computational array microprocessor system with variable latency memory access
US11893393B2 (en) 2017-07-24 2024-02-06 Tesla, Inc. Computational array microprocessor system with hardware arbiter managing memory requests
US10671349B2 (en) 2017-07-24 2020-06-02 Tesla, Inc. Accelerated mathematical engine
US11409692B2 (en) * 2017-07-24 2022-08-09 Tesla, Inc. Vector computational unit
US11321092B1 (en) 2017-11-08 2022-05-03 Habana Labs Ltd. Tensor-based memory access
US10915297B1 (en) * 2017-11-15 2021-02-09 Habana Labs Ltd. Hardware accelerator for systolic matrix multiplication
US11373088B2 (en) * 2017-12-30 2022-06-28 Intel Corporation Machine learning accelerator mechanism
US11561791B2 (en) * 2018-02-01 2023-01-24 Tesla, Inc. Vector computational unit receiving data elements in parallel from a last row of a computational array
US11741346B2 (en) 2018-02-08 2023-08-29 Western Digital Technologies, Inc. Systolic neural network engine with crossover connection optimization
US10796198B2 (en) 2018-02-08 2020-10-06 Western Digital Technologies, Inc. Adjusting enhancement coefficients for neural network engine
US11275997B1 (en) * 2018-04-30 2022-03-15 Amazon Technologies, Inc. Weight loading in an array
US10817042B2 (en) * 2018-09-27 2020-10-27 Intel Corporation Power savings for neural network architecture with zero activations during inference
US10990396B2 (en) 2018-09-27 2021-04-27 Intel Corporation Systems for performing instructions to quickly convert and use tiles as 1D vectors
CN111291874B (zh) * 2018-12-06 2023-12-01 神盾股份有限公司 卷积神经网络处理器及其数据处理方法
US11494645B2 (en) 2018-12-06 2022-11-08 Egis Technology Inc. Convolutional neural network processor and data processing method thereof
US20200210517A1 (en) 2018-12-27 2020-07-02 Intel Corporation Systems and methods to accelerate multiplication of sparse matrices
US11928582B1 (en) * 2018-12-31 2024-03-12 Cadence Design Systems, Inc. System, media, and method for deep learning
US20200226444A1 (en) 2019-01-15 2020-07-16 BigStream Solutions, Inc. Systems, apparatus, methods, and architecture for precision heterogeneity in accelerating neural networks for inference and training
WO2020155044A1 (zh) * 2019-01-31 2020-08-06 深圳市大疆创新科技有限公司 卷积计算的装置、方法、处理器和可移动设备
CN113678124A (zh) * 2019-02-01 2021-11-19 光子智能股份有限公司 处理速率受限系统的矩阵操作
KR20200107295A (ko) 2019-03-07 2020-09-16 에스케이하이닉스 주식회사 시스톨릭 어레이 및 프로세싱 시스템
KR20210135998A (ko) 2019-03-15 2021-11-16 인텔 코포레이션 매트릭스 가속기 아키텍처를 위한 희소 최적화
US10929058B2 (en) 2019-03-25 2021-02-23 Western Digital Technologies, Inc. Enhanced memory device architecture for machine learning
US11783176B2 (en) 2019-03-25 2023-10-10 Western Digital Technologies, Inc. Enhanced storage device memory architecture for machine learning
US10990397B2 (en) * 2019-03-30 2021-04-27 Intel Corporation Apparatuses, methods, and systems for transpose instructions of a matrix operations accelerator
CN112149049A (zh) 2019-06-26 2020-12-29 北京百度网讯科技有限公司 用于变换矩阵的装置和方法、数据处理系统
CN110210615B (zh) * 2019-07-08 2024-05-28 中昊芯英(杭州)科技有限公司 一种用于执行神经网络计算的脉动阵列系统
US11481471B2 (en) * 2019-08-16 2022-10-25 Meta Platforms, Inc. Mapping convolution to a matrix processor unit
US11188618B2 (en) 2019-09-05 2021-11-30 Intel Corporation Sparse matrix multiplication acceleration mechanism
US11195818B2 (en) * 2019-09-12 2021-12-07 Taiwan Semiconductor Manufacturing Company, Ltd. Backside contact for thermal displacement in a multi-wafer stacked integrated circuit
US11842169B1 (en) 2019-09-25 2023-12-12 Amazon Technologies, Inc. Systolic multiply delayed accumulate processor architecture
US11409838B2 (en) 2019-10-29 2022-08-09 Meta Platforms, Inc. High throughput matrix processor with support for concurrently processing multiple matrices
US20210149677A1 (en) * 2019-11-15 2021-05-20 Intel Corporation Enhanced processor functions for calculation
US11816446B2 (en) 2019-11-27 2023-11-14 Amazon Technologies, Inc. Systolic array component combining multiple integer and floating-point data types
US11467806B2 (en) 2019-11-27 2022-10-11 Amazon Technologies, Inc. Systolic array including fused multiply accumulate with efficient prenormalization and extended dynamic range
US11907719B2 (en) * 2019-12-13 2024-02-20 Intel Corporation FPGA specialist processing block for machine learning
US11809798B2 (en) * 2019-12-13 2023-11-07 Intel Corporation Implementing large multipliers in tensor arrays
CN112602094A (zh) * 2020-03-11 2021-04-02 深圳市大疆创新科技有限公司 数据处理装置、数据处理方法以及加速器
US20210303987A1 (en) * 2020-03-26 2021-09-30 Advanced Micro Devices, Inc. Power reduction for machine learning accelerator background
US20210312266A1 (en) * 2020-04-01 2021-10-07 Microsoft Technology Licensing, Llc Deep neural network accelerator with independent datapaths for simultaneous processing of different classes of operations
US11507817B2 (en) 2020-04-17 2022-11-22 Samsung Electronics Co., Ltd. System and method for performing computations for deep neural networks
GB2594971B (en) * 2020-05-13 2022-10-05 Advanced Risc Mach Ltd Variable position shift for matrix processing
US11308027B1 (en) * 2020-06-29 2022-04-19 Amazon Technologies, Inc. Multiple accumulate busses in a systolic array
US11422773B1 (en) 2020-06-29 2022-08-23 Amazon Technologies, Inc. Multiple busses within a systolic array processing element
US11308026B1 (en) * 2020-06-29 2022-04-19 Amazon Technologies, Inc. Multiple busses interleaved in a systolic array
KR20220015680A (ko) 2020-07-31 2022-02-08 삼성전자주식회사 딥러닝 연산 수행 방법 및 장치
JP7358312B2 (ja) 2020-08-25 2023-10-10 株式会社東芝 記憶装置およびニューラルネットワーク装置
CN112434256B (zh) * 2020-12-03 2022-09-13 海光信息技术股份有限公司 矩阵乘法器和处理器
CN112434255B (zh) * 2020-12-03 2023-12-08 成都海光微电子技术有限公司 向量-矩阵运算和数据处理方法、乘法器和处理器芯片
WO2022164652A1 (en) * 2021-02-01 2022-08-04 Microsoft Technology Licensing, Llc Semi-programmable and reconfigurable co-accelerator for a deep neural network with normalization or non-linearity
US11734214B2 (en) * 2021-02-01 2023-08-22 Microsoft Technology Licensing, Llc Semi-programmable and reconfigurable co-accelerator for a deep neural network with normalization or non-linearity
KR102597802B1 (ko) * 2021-06-11 2023-11-02 강원대학교산학협력단 시분할 다채널 아날로그 행렬 연산기, 이의 동작 방법, 및 이를 포함하는 장치
US11880682B2 (en) 2021-06-30 2024-01-23 Amazon Technologies, Inc. Systolic array with efficient input reduction and extended array performance
CN113821701B (zh) * 2021-10-14 2023-09-26 厦门半导体工业技术研发有限公司 提升电路访问效率的方法及装置
US11829321B2 (en) * 2022-03-24 2023-11-28 Google Llc General-purpose systolic array
WO2024025852A1 (en) * 2022-07-27 2024-02-01 Texas Instruments Incorporated Transient current management
CN115469826B (zh) * 2022-09-16 2023-04-07 深圳思谋信息科技有限公司 数据处理方法、装置、计算机设备及计算机可读存储介质
US20240095492A1 (en) * 2022-09-21 2024-03-21 Qualcomm Incorporated Memory management for mathematical operations in computing systems with heterogeneous memory architectures
FR3142815A1 (fr) * 2022-12-05 2024-06-07 Safran Electronics & Defense Structure de parallélisation de convolution à bas besoin de bande passante
US12007937B1 (en) 2023-11-29 2024-06-11 Recogni Inc. Multi-mode architecture for unifying matrix multiplication, 1×1 convolution and 3×3 convolution
US12008069B1 (en) 2023-11-29 2024-06-11 Recogni Inc. Multi-mode architecture for unifying matrix multiplication, 1×1 convolution and 3×3 convolution

Family Cites Families (20)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4720780A (en) * 1985-09-17 1988-01-19 The Johns Hopkins University Memory-linked wavefront array processor
US5138695A (en) * 1989-10-10 1992-08-11 Hnc, Inc. Systolic array image processing system
US7161995B1 (en) * 2002-03-15 2007-01-09 Xilinx, Inc. Method and apparatus for Viterbi synchronization
US20040122887A1 (en) * 2002-12-20 2004-06-24 Macy William W. Efficient multiplication of small matrices using SIMD registers
US8577950B2 (en) * 2009-08-17 2013-11-05 International Business Machines Corporation Matrix multiplication operations with data pre-conditioning in a high performance computing architecture
US8620984B2 (en) * 2009-11-23 2013-12-31 Xilinx, Inc. Minimum mean square error processing
CN101968732B (zh) * 2010-10-09 2012-12-19 中国人民解放军信息工程大学 检错比特并行脉动阵列移位多项式基乘法器及其构造方法
US20120254591A1 (en) * 2011-04-01 2012-10-04 Hughes Christopher J Systems, apparatuses, and methods for stride pattern gathering of data elements and stride pattern scattering of data elements
US9960917B2 (en) * 2011-12-22 2018-05-01 Intel Corporation Matrix multiply accumulate instruction
US8543634B1 (en) * 2012-03-30 2013-09-24 Altera Corporation Specialized processing block for programmable integrated circuit device
CN103246773B (zh) * 2013-05-13 2016-12-28 句容华正电气有限公司 电子式互感器中采样率转换的低延迟滤波器设计方法
FR3021428B1 (fr) * 2014-05-23 2017-10-13 Kalray Multiplication de matrices de bits utilisant des registres explicites
US9747546B2 (en) 2015-05-21 2017-08-29 Google Inc. Neural network processor
US10192162B2 (en) 2015-05-21 2019-01-29 Google Llc Vector computation unit in a neural network processor
US10438117B1 (en) 2015-05-21 2019-10-08 Google Llc Computing convolutions using a neural network processor
US10049322B2 (en) * 2015-05-21 2018-08-14 Google Llc Prefetching weights for use in a neural network processor
US9805303B2 (en) * 2015-05-21 2017-10-31 Google Inc. Rotating data for neural network computations
US11244225B2 (en) * 2015-07-10 2022-02-08 Samsung Electronics Co., Ltd. Neural network processor configurable using macro instructions
US10698974B2 (en) 2017-05-17 2020-06-30 Google Llc Low latency matrix multiply unit
US11188814B2 (en) * 2018-04-05 2021-11-30 Arm Limited Systolic convolutional neural network

Also Published As

Publication number Publication date
EP3800563B1 (en) 2024-01-24
WO2018213635A1 (en) 2018-11-22
US20200226202A1 (en) 2020-07-16
TWI771155B (zh) 2022-07-11
JP2021184293A (ja) 2021-12-02
US11907330B2 (en) 2024-02-20
US10635740B2 (en) 2020-04-28
US10698974B2 (en) 2020-06-30
TWI685757B (zh) 2020-02-21
BR112019023395A2 (pt) 2020-06-16
US10698976B2 (en) 2020-06-30
BR112019023395B1 (pt) 2021-08-17
US11989259B2 (en) 2024-05-21
US20180336164A1 (en) 2018-11-22
EP3757823A1 (en) 2020-12-30
CN116414350A (zh) 2023-07-11
US20200327186A1 (en) 2020-10-15
US20180336163A1 (en) 2018-11-22
US20210209193A1 (en) 2021-07-08
EP3526683A1 (en) 2019-08-21
CN116661732A (zh) 2023-08-29
TW201908996A (zh) 2019-03-01
TW202349233A (zh) 2023-12-16
CN109937416A (zh) 2019-06-25
KR20190116434A (ko) 2019-10-14
BR112019022916A2 (pt) 2020-05-26
EP3757823B1 (en) 2023-07-05
US10970362B2 (en) 2021-04-06
EP3500945A1 (en) 2019-06-26
CN109937416B (zh) 2023-04-04
EP3526683B1 (en) 2020-08-19
WO2018213628A1 (en) 2018-11-22
JP2020516991A (ja) 2020-06-11
EP3800563A1 (en) 2021-04-07
JP2022172257A (ja) 2022-11-15
EP3500945B1 (en) 2020-09-30
TW202024961A (zh) 2020-07-01
US20230267172A1 (en) 2023-08-24
US20190354571A1 (en) 2019-11-21
TW202147149A (zh) 2021-12-16
TWI816475B (zh) 2023-09-21
US11599601B2 (en) 2023-03-07
TW202242680A (zh) 2022-11-01
JP7135181B2 (ja) 2022-09-12
KR102302608B1 (ko) 2021-09-15
US20230267171A1 (en) 2023-08-24
JP7444936B2 (ja) 2024-03-06
CN109997132B (zh) 2023-05-23
CN109997132A (zh) 2019-07-09
US11500961B2 (en) 2022-11-15
JP2024063060A (ja) 2024-05-10

Similar Documents

Publication Publication Date Title
JP6929958B2 (ja) 低レイテンシ行列乗算ユニット
KR102477516B1 (ko) 하드웨어에서 매트릭스 곱셈을 수행

Legal Events

Date Code Title Description
A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20191017

A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20191017

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20201112

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20201201

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20210215

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20210713

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20210811

R150 Certificate of patent or registration of utility model

Ref document number: 6929958

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150