JP2018055677A - 外積累算演算のためのプロセッサおよび方法 - Google Patents
外積累算演算のためのプロセッサおよび方法 Download PDFInfo
- Publication number
- JP2018055677A JP2018055677A JP2017145803A JP2017145803A JP2018055677A JP 2018055677 A JP2018055677 A JP 2018055677A JP 2017145803 A JP2017145803 A JP 2017145803A JP 2017145803 A JP2017145803 A JP 2017145803A JP 2018055677 A JP2018055677 A JP 2018055677A
- Authority
- JP
- Japan
- Prior art keywords
- accumulator
- multiplier
- array
- operand
- processor
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
- 238000000034 method Methods 0.000 title claims description 34
- 239000013598 vector Substances 0.000 claims abstract description 27
- 238000012545 processing Methods 0.000 claims description 29
- 238000009825 accumulation Methods 0.000 claims description 18
- 238000000605 extraction Methods 0.000 claims description 9
- 238000004364 calculation method Methods 0.000 description 12
- 238000003491 array Methods 0.000 description 11
- 230000035508 accumulation Effects 0.000 description 10
- 239000011159 matrix material Substances 0.000 description 10
- 238000013461 design Methods 0.000 description 8
- 238000013459 approach Methods 0.000 description 7
- 230000001186 cumulative effect Effects 0.000 description 7
- 230000017105 transposition Effects 0.000 description 7
- 230000008569 process Effects 0.000 description 6
- 238000007792 addition Methods 0.000 description 5
- 230000006870 function Effects 0.000 description 5
- 238000012546 transfer Methods 0.000 description 5
- 238000004891 communication Methods 0.000 description 4
- 238000013528 artificial neural network Methods 0.000 description 3
- 238000005516 engineering process Methods 0.000 description 3
- 230000004048 modification Effects 0.000 description 3
- 238000012986 modification Methods 0.000 description 3
- 230000004044 response Effects 0.000 description 3
- 230000000717 retained effect Effects 0.000 description 3
- 230000008901 benefit Effects 0.000 description 2
- 230000005540 biological transmission Effects 0.000 description 2
- 230000001934 delay Effects 0.000 description 2
- 238000010586 diagram Methods 0.000 description 2
- 238000007667 floating Methods 0.000 description 2
- 230000000644 propagated effect Effects 0.000 description 2
- XUIMIQQOPSSXEZ-UHFFFAOYSA-N Silicon Chemical compound [Si] XUIMIQQOPSSXEZ-UHFFFAOYSA-N 0.000 description 1
- 230000003321 amplification Effects 0.000 description 1
- 230000000295 complement effect Effects 0.000 description 1
- 238000013135 deep learning Methods 0.000 description 1
- 230000001627 detrimental effect Effects 0.000 description 1
- 230000002708 enhancing effect Effects 0.000 description 1
- 239000004744 fabric Substances 0.000 description 1
- 238000012886 linear function Methods 0.000 description 1
- 238000010801 machine learning Methods 0.000 description 1
- 230000007246 mechanism Effects 0.000 description 1
- 238000010606 normalization Methods 0.000 description 1
- 238000003199 nucleic acid amplification method Methods 0.000 description 1
- 230000002093 peripheral effect Effects 0.000 description 1
- 230000002028 premature Effects 0.000 description 1
- 229910052710 silicon Inorganic materials 0.000 description 1
- 239000010703 silicon Substances 0.000 description 1
- 230000001360 synchronised effect Effects 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F7/00—Methods or arrangements for processing data by operating upon the order or content of the data handled
- G06F7/38—Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
- G06F7/48—Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
- G06F7/52—Multiplying; Dividing
- G06F7/523—Multiplying only
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/30007—Arrangements for executing specific machine instructions to perform operations on data operands
- G06F9/3001—Arithmetic instructions
- G06F9/30014—Arithmetic instructions with variable precision
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F7/00—Methods or arrangements for processing data by operating upon the order or content of the data handled
- G06F7/38—Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
- G06F7/48—Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
- G06F7/544—Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices for evaluating functions by calculation
- G06F7/5443—Sum of products
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F7/00—Methods or arrangements for processing data by operating upon the order or content of the data handled
- G06F7/38—Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
- G06F7/48—Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
- G06F7/50—Adding; Subtracting
- G06F7/504—Adding; Subtracting in bit-serial fashion, i.e. having a single digit-handling circuit treating all denominations after each other
- G06F7/5045—Adding; Subtracting in bit-serial fashion, i.e. having a single digit-handling circuit treating all denominations after each other for multiple operands
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/3004—Arrangements for executing specific machine instructions to perform operations on memory
- G06F9/30043—LOAD or STORE instructions; Clear instruction
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30145—Instruction analysis, e.g. decoding, instruction word fields
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2207/00—Indexing scheme relating to methods or arrangements for processing data by operating upon the order or content of the data handled
- G06F2207/38—Indexing scheme relating to groups G06F7/38 - G06F7/575
- G06F2207/3804—Details
- G06F2207/3808—Details concerning the type of numbers or the way they are handled
- G06F2207/3828—Multigauge devices, i.e. capable of handling packed numbers without unpacking them
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N3/00—Computing arrangements based on biological models
- G06N3/02—Neural networks
- G06N3/06—Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons
- G06N3/063—Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons using electronic means
Landscapes
- Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Theoretical Computer Science (AREA)
- Computational Mathematics (AREA)
- Mathematical Analysis (AREA)
- Pure & Applied Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- Mathematical Optimization (AREA)
- Software Systems (AREA)
- Computing Systems (AREA)
- Complex Calculations (AREA)
Abstract
【課題】外積を計算し、各積を連続的に累算するためのプロセッサを提供する。
【解決手段】プロセッサは、rビットのビット幅を有するレジスタファイルと、行および列に配置された乗算器16のアレイ15とを有する。ベクトル乗数オペランドとベクトル被乗数オペランドとの外積を実行するために、乗数オペランドおよび被乗数オペランドを各乗算器にロードし、その結果、アレイ内の位置[i,j]にある乗算器が、乗数オペランドiおよび被乗数オペランドjを受け取る。各乗算器において、乗数オペランドiと被乗数オペランドjとの第1の乗算が実行され、rビットよりも広い第1の乗算結果i*jが生成される。第1の乗算結果はその後、その乗算器に関連付けられた累算器18に供給され、累算器に格納された任意の以前の乗算結果に加算される。結果は、ベクトル乗数オペランドのすべての要素と、ベクトル被乗数オペランドのすべての要素との乗算である。
【選択図】図1
【解決手段】プロセッサは、rビットのビット幅を有するレジスタファイルと、行および列に配置された乗算器16のアレイ15とを有する。ベクトル乗数オペランドとベクトル被乗数オペランドとの外積を実行するために、乗数オペランドおよび被乗数オペランドを各乗算器にロードし、その結果、アレイ内の位置[i,j]にある乗算器が、乗数オペランドiおよび被乗数オペランドjを受け取る。各乗算器において、乗数オペランドiと被乗数オペランドjとの第1の乗算が実行され、rビットよりも広い第1の乗算結果i*jが生成される。第1の乗算結果はその後、その乗算器に関連付けられた累算器18に供給され、累算器に格納された任意の以前の乗算結果に加算される。結果は、ベクトル乗数オペランドのすべての要素と、ベクトル被乗数オペランドのすべての要素との乗算である。
【選択図】図1
Description
[01]本発明は、コンピュータ技術に関し、外積演算および外積累算演算を実行するためのプロセッサおよび方法に関する。
[02]通信製品は、ソフトウェアでリアルタイムにデジタル信号を処理するために計算性能を向上させることを必要としている。過去20年間の性能の向上は、トランジスタ技術およびプロセッサ設計の改善によってもたらされた。トランジスタの数は、ムーアの法則に従って約2年ごとに2倍になり、1チップあたり数百万から数十億個のトランジスタへと、千倍に増加している。プロセッサの設計は、アーキテクチャの技術革新によって命令当たりの最高性能を向上させており、これによって、約4年ごとにデータ経路幅が実質的に倍増しており、過去20年ほどで32ビット(例えばIntelのPentium)から1024ビット(例えばQualcommのHexagon HVX)へと増大している。
[03]デジタル通信は、通常、32ビット精度以下でデータを乗算して加算する線形アルゴリズムに依拠する。実際、デジタルビデオおよび無線処理は、通常、16ビットまたはさらには8ビットのデータでも動作する。データ経路幅がこれらのデータ幅をはるかに超えて増加するにつれて、実質的にピーク使用は、例えば、本願と同一出願人による米国特許第5,742,840号明細書、米国特許第5,794,060号明細書、米国特許第5,794,061号明細書、米国特許第5,809,321号明細書および米国特許第5,822,603号明細書に広範に扱われている様々な方法を用いてオペランドおよびデータ経路を分割することによって維持されている。
[04]これらの特許は、命令のクラスを追加することによってプロセッサの利用を強化するためのシステムおよび方法を記載している。これらの命令のクラスは、レジスタをデータ経路ソースとして使用し、オペランドを指定されたサイズのシンボルに分割し、並列に演算を実行し、結果を連結し、連結した結果をレジスタに配置する。これらの特許および他の同一出願人による特許には、有意な並列性を使用してデータストリームを処理および送信するために最適化されたプロセッサが記載されている。
[05]当方の以前の米国特許第5,953,241号明細書では、4つの乗数オペランドa、b、c、およびdの各々の1つに4つの被乗数オペランドe、f、gおよびhのうちの対応するものを乗算して、積a*e、b*f、c*g、d*hを生成するするグループ乗加算演算が記載されている(当該特許文献の第4列)。例えば、当該特許文献の図1および図3を参照されたい。また、乗算の積にオペランドi、j、k、lを加算して結果a*e+i、b*f+j、c*g+k、d*h+lを生成する積和演算も記載されている。例えば、図2および図4を参照されたい。これらの演算は、固定小数点オペランドと浮動小数点オペランドの両方について記述されている。
[06]他では、ベクトル×スカラー乗減算が実行されるプロセッサが開発されている。例えば、SIMD拡張を備えたQualcomm HVXアーキテクチャを参照されたい。このプロセッサは、4つのベクトルオペランドのグループが1つのスカラーオペランドと乗算されることを可能にし、4つの結果が合計される。例えば、http://www.hotchips.org/wp−content/uploads/hc_archives/hc27/HC27.24−Monday−Epub/HC27.24.20−Multimedia−Epub/HC27.24.211−Hexagon680−Codrescu−Qualcomm.pdfから得られる図11を参照されたい。
[07]しかし、5G通信、仮想現実、およびニューラルネットワークなどの新興アプリケーションは、これらの技術よりも桁違いに高速で電力効率の高いデジタル処理に対する欲求を生み出している。ムーアの法則は、10nm未満のゲート幅が200個未満のシリコン格子間隔に及ぶと、遅くなっている。これらのアプリケーションの電力性能需要に対応するために、プロセッサ設計の進歩がますます重要になりつつある。
[08]既存のプロセッサのデータ経路は、通常、プロセッサの総消費電力および面積のわずかな部分しか消費しないため、幅を2倍にすることによって、プロセッサコアの数を2倍にするよりも、効率的にピーク性能が倍増する。しかしながら、レジスタの幅を倍にする数には実用上の制約がある。レジスタ複合体は通常、高いクロック速度で動作するプロセッサの中央トラフィック相互交換を含む。これらのレジスタは、バイパスネットワークを介して複数の実行ユニットに緊密に結合している多くの入出力ポートを有する。より幅の広い実行ユニットは、ボトルネックを回避し、目的のアプリケーションでピーク性能の大部分を維持しなければならない。これらのプロセッサ設計および方法は、5G通信、仮想現実、およびニューラルネットワークなどの新興アプリケーションによって必要とされるアルゴリズムに対してピーク性能の大部分を維持することができなければならず、同時に面積および電力において非常に効率的でなければならない。
[09]したがって、レジスタ複合体を大きく複雑にすることなくピーク性能の桁違いの増加を可能にするプロセッサ設計および方法が必要とされている。特に、そのようなプロセッサのための多くの実用的なアプリケーション、例えば、機械学習および画像処理は、外積を実行することができるプロセッサの恩恵を受けることになる。外積では、あるベクトルの各要素に別のベクトルの各要素が乗算される。例えば、以下のベクトルUおよびVが与えられる。
[10]ベクトルUおよびVの外積は以下の通りである。
http://www.hotchips.org/wp−content/uploads/hc_archives/hc27/HC27.24−Monday−Epub/HC27.24.20−Multimedia−Epub/HC27.24.211−Hexagon680−Codrescu−Qualcomm.pdf
[11]本発明は、外積を計算し、各積を連続的に累算するためのプロセッサおよび方法を提供する。 本発明の方法の好ましい実施形態では、プロセッサは、rビットのビット幅を有するレジスタファイルと、行および列に配置された乗算器のアレイとを有する。各乗算器は、アレイ内で乗算器と関連付けられている累算器を有する。ベクトル乗数オペランドとベクトル被乗数オペランドとの外積を実行するために、プロセッサは、乗数オペランドおよび被乗数オペランドを各乗算器にロードし、その結果、アレイ内の位置[i,j]にある乗算器が、乗数オペランドiおよび被乗数オペランドjを受け取る。各乗算器において、乗数オペランドiと被乗数オペランドjとの第1の乗算が実行され、rビットよりも広い第1の乗算結果i*jが生成される。第1の乗算結果はその後、その乗算器に関連付けられた累算器に供給され、累算器に格納された任意の以前の乗算結果に加算される。結果は、ベクトル乗数オペランドのすべての要素と、ベクトル被乗数オペランドのすべての要素との乗算である。所望の乗算および累算がすべて完了すると、結果はアレイからコピーされる。
[12]好ましい実施形態では、本発明のプロセッサは、rビットのビット幅を有するレジスタファイルを有する。複数n個の乗数オペランドの各々はbビットのビット幅を有し、rビットの集合幅を提供し、r=n*bであり、複数n個の被乗数オペランドの各々はまた、bビットのビット幅を有し、rビットの集合幅を提供し、r=n*bである。乗算器のアレイが行および列に配置され、各列は1つの乗数オペランドを受け取るように結合され、各行は1つの被乗数オペランドを受け取るように結合される。したがって、各乗算器が、乗数オペランドおよび被乗数オペランドを受け取る。プロセッサ内の乗算器は、オペランドを乗算して、rビットより大きい集合ビット幅を有する複数n2個の乗算結果を提供する。プロセッサはまた、行および列に配置された対応する累算器のアレイを含み、各累算器は対応する乗算器に結合されている。プロセッサは、各乗算器からの連続乗算を加算するために累算器を使用する。所望の演算が完了すると、各累算器からの結果がアレイからシフトアウトされる。
[13]本発明はまた、アレイ内の各乗算器および累算器「タイル」の実装回路、ならびにアレイにデータをロードし、アレイからデータをシフトアウトするための技術および回路を含む。
[25]実行ユニット結果のサイズが制約されると、単一の命令に応答して合理的に実行できる計算量が制限される可能性がある。結果として、アルゴリズムは、制約内ですべての中間結果を表現することができる一連の単一命令ステップで実装される。しかしながら、この制限を排除することにより、アルゴリズムのより大部分が単一の命令として実装される命令セットを開発することができる。これらの中間結果の少なくとも一部が、アルゴリズムのより大きい構成要素の完了時に保持される必要がない場合、プロセッサは、汎用レジスタファイルから中間結果を格納せず、検索しないことによって、性能の改善および電力消費の低減を提供する。中間結果が汎用レジスタファイルに保持されない場合、プロセッサ命令セットおよび実装されるアルゴリズムも汎用レジスタファイルのサイズによって制約されない。
[26]本発明は、特に、乗算および加算演算に関する。例えば、画像処理および深層学習アプリケーションでは、多数の乗算および加算がしばしば必要とされる。従来のプロセッサでは、これらの演算は望ましくないほど遅く、特定のアプリケーションの有用性を制約している。ここで説明する本発明は、外積累算として知られる乗算および加算の特定のパターンを効率的に実行することを可能にする。各対が1次元ベクトルである乗数および被乗数に外積演算を適用すると、結果は2次元行列である。外積は、本明細書に記載される本発明に関して2つの重要な特性を有する。第1に、乗数オペランドと被乗数オペランドとの間のすべての可能な乗算は、外積内で実行される。第2に、これらの結果はともに加算されない。したがって、外積の計算は、完全に並列的に実行することができる。外積結果は各々連続的に累算されて、積の和が計算される。これらの積の和が、結果、すなわち、外積の累算を形成する。この時点で、この最終結果は、例えば、丸め、シフト、切り捨て、または、これらの結果が外積累算アレイから読み出されるときにこれらの結果に対して単項演算を実行することによって、さらに処理することができる。
[27]アレイ構造
[28]図1は、外積を計算するための本発明のプロセッサの好ましい実施態様を示す。そこに示されるように、装置10は、乗算器16の任意の大きさのアレイ15を含む。各乗算器16は、関連付けられているレジスタ11および12から乗数オペランドおよび被乗数オペランドを受け取るように結合される。これらのレジスタには、キャッシュメモリ、外部システムメモリまたは他のソースからベクトルオペランドが前もってロードされている。レジスタは、バイト幅(または他の幅)のセグメント11a、11b...11nおよび12a、12b、...12n(nは任意の大きさの数)に分割されて示されている。各乗算器16は、受け取ったオペランドを乗算し、結果を供給する。例えば、位置19の乗算器はオペランドx[i]およびy[j]を受け取り、それらを乗算する。本明細書においては、乗算器を「タイル」として含むアレイ内の各タイルを参照する。以下で説明するように、プロセッサの特定のアプリケーションに応じて構成要素を選択することによって、各タイルについて様々な実施形態が存在する。
[29]図1にも示されている好ましい実施形態では、各乗算器16は、累算器18に関連付けられている。累算器18は、乗算器16からの連続乗算結果の累積和を格納する。したがって、各累算器18は、最終的に、その関連付けられている乗算器16によって計算された個々の乗算の和を格納する。より一般的には、乗算器−累算器19は、オペランドx[i]とy[j]とをともに乗算し、その後、その結果を累算器の以前の内容に加算する。乗算および累積和により、累算器に格納される結果は入力オペランドの幅よりも大幅に広くなる。これは、周辺回路との乗算器−累算器インターフェースのより詳細な説明と共に、以下でさらに議論される。乗算器および累算器の詳細な回路設計は周知であり、本明細書ではこれ以上説明しない。
[30]典型的には、オペランドがレジスタ11および12に格納される前に、データ処理演算がオペランドに対して実行されていることになる。さらに、プロセッサを制御する命令によって指定されているように、乗算−累算の結果に対してさらなる演算を実行することができる。本明細書では、外積が同じ数の乗数および被乗数で計算され、その結果、正方形のアレイ15がもたらされる典型的な状況について説明する。しかしながら、本明細書に記載の技術を使用して、他の形状のアレイ、例えば、長方形を実装することもできる。
[31]外積の結果のサイズは、入力オペランドx[i]およびy[j]よりも大きい。レジスタ11および12内で、範囲−2(B−1)...2(B−1)−1の符号付き値または範囲0..2(B−1)の符号なし値のいずれかを表す、サイズBビットの2つのバイナリ値を乗算する場合、一般に、積の値の範囲を表すために2Bビットが必要とされる。正方形のアレイでは、N個の乗数n[0]...n[N−1]およびN個の被乗数y[0]...y[N−1]を使用して、N2個の結果による外積x[i]*y[j]が生成される。iは0...N−1、jは0...N−1である。
[32]Bが16ビットでNが8の場合、乗数および被乗数は各々128ビット(B*N)であり、外積は2048ビット(2B*N2)になる。乗数および被乗数は128ビットのオペランドをサポートするレジスタファイルに収まり得るが、外積は大きすぎて一般的なレジスタファイルに収まらない。レジスタファイルのサイズが例えばB=16ビットで1024ビットに拡張されたとしても、Nが64になり得、したがって、外積は4096(N2)回の乗算を実行し得る。しかし、これは131072ビットの結果をもたらす(2B*N2)。この結果を1024ビットのレジスタファイルに収めるには、128個のレジスタが必要である。これは、汎用プロセッサで通常使用される最大のレジスタファイルよりも大きな数である。
[33]しかしながら、外積結果は、プロセッサに関連付けられているレジスタとは対照的に、プロセッサに関連付けられているシステムメモリに格納することができる。この手法は、本明細書においては「OuterProduct」として参照される単一の命令が、乗数オペランドおよび被乗数オペランドのレジスタファイル(またはシステムメモリ)アドレスと共に、命令のオペレーションコードを指定することができる。その後、その結果得られた外積をシステムメモリに戻して格納することができる。システムメモリでは、外積は、レジスタファイル内のレジスタから指定されるメモリアドレスおよび/またはサイズによってアクセス可能である。
[34]別の実施形態では、ベクトルレジスタファイルと汎用レジスタファイルとを組み合わせて単一のレジスタファイルにすることができる。さらに、BおよびNの値の指定は、設計が乗算器の精度およびレジスタファイルのサイズ、または命令内のフィールドによって指定されるか、もしくは命令によって指定されるレジスタの内容(またはレジスタの内容のサブフィールド)によって指定される変数に従ってこれらの値を固定することができるため、暗黙的であってもよい。また、BおよびNの値は、オペランド指定子の一部として指定することもできる。さらに、オペランド指定子は、結果のアドレスと結果のサイズの両方を符号化することができ、または、代替的に、BおよびNの値を計算または推定することができる値を符号化することができる。
[35]代替の実施形態では、乗数または被乗数のいずれか単独にのみ依存する乗算器回路の任意の部分を、乗算器アレイの周辺部に配置して、アレイのN2からNへのその部分のコピー数を減らすことができる。
[36]例えば、加算すべき部分積の数を減らすために、乗算器はブースまたは他の符号化を使用して乗数オペランドを符号化することができる。このような実施形態では、ブース符号化値を乗算器に達するように伝送線および/または回路に提示することができ、したがってブース符号化回路のコピー回数が、アレイ内でN2からNまで低減するため、オペランドの単一のブース符号化回路で十分であり得る。
[37]基数4のブース符号化は、元のオペランド(−2x、−x、0、x、2x)のシフトおよび補数として計算することができる被乗数の倍数を組み合わせるが、例えば、3の倍数の計算を必要とする基数8のブース符号化の場合には、代替の実施形態のいくつかの乗算器回路は、被乗数の小さな倍数を必要とする場合がある。外積内のN個の被乗数の各々がN個の乗算器に送信されるため、各被乗数の小さな倍数の計算は、N個の乗数に送信される被乗数および結果当たり単一の回路で達成することができ、したがって、小型乗算回路のコピーの回数がアレイ内でN2からNへと低減する。
[38]好ましい実施形態における外積命令のフォーマットを図2に示す。命令内の第1のフィールド21は、下記にさらに説明するような、演算が実行されるためのオペコード、例えば、OuterProduct、OuterProductAdd、OuterProductExtractなどを指定する。フィールド22は第1のベクトル(例えば乗数)の位置を指定し、フィールド23は第2のベクトル(例えば被乗数)の位置を指定する。フィールド24は、結果を格納する位置を指定する。フィールド25は、本明細書で説明するように、他のフィールドに関連して必要とされ得る他の情報、例えばB、F、H、K、L、MおよびNを格納する。命令フィールドは、メモリ内の位置のアドレス、レジスタ識別情報、メモリへのポインタなどであってもよく、上記の他の情報は、命令の一部、ソースオペランドの一部、または結果オペランドの一部として指定されてもよいことに留意されたい。
[39]単一の命令に対する許容可能なNの値が、物理ハードウェアHにおける乗算器−累算器アレイ15によって可能にされる値よりも大きくなることを可能にすることによって、プロセッサの実施に対するさらなる柔軟性が提供される。この状況では、外積演算は、乗数値および被乗数値のH×Hサイズの部分にわたる物理ハードウェアの連続的な演算によって実行することができる。そのような実施形態では、抽出または処理された結果は、アレイ内からメモリシステムまたはそのキャッシュに迅速にコピーすることができ、それによって、アレイ内の結果の物理的格納は、累積、抽出、または処理された結果のうちの単一または少数のH×Hサイズの部分に限定される。
[40]別の実施形態では、外積乗算演算のソースオペランドは、命令オペコードおよび2つのレジスタサイズのオペランドを指定する単一の命令として指定される。この場合、Rビットレジスタファイルの1つのレジスタはN個の乗数を含み、Rビットレジスタファイルの他のレジスタはN個の被乗数を含み、各乗数または被乗数はBビットを使用し、個々の値が、レジスタに収まるように連結される。
[41]代替的に、乗数および被乗数の値は、レジスタR=N*Bを満たすためにより大きなオペランドによって指定することができる。Bの値は、命令によって指定されるレジスタまたはレジスタのビットフィールドによって、または、オペランドの一部によって指定される指定子ブロックのビットフィールドによって、命令の構成要素として指定することができる。本発明の他の実施形態では、命令は、例えば、符号付き整数、符号なし整数、または浮動小数点値など、乗数オペランドおよび被乗数オペランドのフォーマットを指定するビットフィールドを含む。代替的に、フォーマットは、ビットフィールド、レジスタ内のビット値、またはメモリ内の位置への参照によって指定することができる。
[42]乗算器mm[i][j]19が被乗数x[i]および乗数y[j]を受け取り、外積p[i][j]を生成する図1に示す乗算器の構成の場合、演算を実施するためのコードの一例は、以下の通りである。
Foreach i:=[0..N−1],j:=[0..N−1]
p[i][j]:=x[i]*y[j];
Foreach i:=[0..N−1],j:=[0..N−1]
p[i][j]:=x[i]*y[j];
[43]上記の表記法では、好ましい実施形態は、示されたすべての乗算を一度に実行するのに十分なリソースを有し、iおよびjのすべての値ならびにiおよびjに依存する値の計算は、独立して並列に実行されることを理解されたい。代替的に、この並列処理は、上記のH×Hアレイで記述されているように、物理ハードウェアアレイサイズを反映することができる。
[44]上述したように、乗算結果は通常、レジスタファイルにとって大きすぎる。外積結果をメモリに格納することによって、積はメモリマップ状態として保持される。したがって、プロセッサの通常動作が割り込みまたはコンテクストスイッチによって変更される場合であっても、外積は値をコピーするためのさらなる命令を必要とせずに保持される。
[45]画像処理などのアプリケーションでは、外積値の和を計算することが望ましい。第1のOuterProduct命令を開始した後、別個の乗数値および/または被乗数値を使用して第2の命令を開始し、その後、その結果を前の外積結果に加算して外積値の和を生成することができる。本発明において、この命令は「OuterProductAdd」として参照する。この命令は、同じ方法で入力を指定し、その結果を加算演算の入力値として使用することを指定する、OuterProductと同様である。したがって、この命令は2つの外積値の和を計算する。OuterProductAddをさらに使用して、任意の数の外積値を合計することができ、本明細書において合計の深さをDとする。2つの値の和が個別の値よりも大きくなる可能性があり、D個の外積値の和が各積に必要な2Bビットまたは全体の2B*N2ビットよりも大きい場合があるため、追加のlog2Dビットが、積の各和、または全体のlog2D*N2ビットに対して必要になる場合がある。外積結果がオーバーフローするのを避けるために、そのような値は、黙示的に、例えば、各結果のサイズを倍にして結果サイズを4B*N2にするためにOuterProductおよびOuterProductAdd命令によって指定することもできる量Eビット分だけ、または、命令のサブフィールド25、もしくは命令のオペランド、もしくはオペランドの1つのサブフィールドにおいて明示的に、実装態様によって固定された他の何らかの量だけ、拡張することができる。代替的に、外積結果は、E<log2Dであるときにオーバーフローの可能性を処理するための範囲内に制限されてもよい。
各乗算の結果が外積a[i][j]の以前の和に加算され、a[i][j]の新しい値が生成されるOuterProductAdd演算を実装するためのコードの例は以下の通りである。
Foreach i:=[0..N−1],j:=[0..N−1]
p[i][j]:=x[i]*y[j];
a[i][j]:=a[i][j]+p[i][j];
これらの和は連続する外積から形成されるため、地理的に離れた乗算器間の相互接続のための配線を必要とせずに和を計算することができる。
Foreach i:=[0..N−1],j:=[0..N−1]
p[i][j]:=x[i]*y[j];
a[i][j]:=a[i][j]+p[i][j];
これらの和は連続する外積から形成されるため、地理的に離れた乗算器間の相互接続のための配線を必要とせずに和を計算することができる。
累積和を計算するためのOuterProductAdd演算の使用の間に、a[i][j]:=0を実行する演算、または、代替的に、a[i][j]=x[i]*[j]を結果として実行するOuterProduct演算によって、累算器a[i][j]をクリアすることができる。
[48]図3は、図1に示すアレイの1つのタイル30をより詳細に示す。各々Bビット長である、レジスタ11iおよび12jに格納された乗数オペランドおよび被乗数オペランドは、バスを介して乗算器16に供給される。乗算器16は受け取ったオペランドを乗算し、2Bビット長の積が累算器18に供給される。OuterProductAdd命令が実行されている場合、加算器33が、乗算の結果を、累算器18に格納されておりバス37を介して加算器33へと受け取られる既存の和に加算する。乗算および加算は、2B+Eビットを有する結果を生成する。すべての演算が完了すると、最終結果「Result」が出力レジスタ35に供給され、出力レジスタ35において、結果は、アレイを相互接続するバスに転送される。(マルチプレクサ38が、タイルのアレイからデータをロードおよびアンロードするために使用される。この動作は以下でさらに説明する。)
[49]図1、図2および図3に示すようなOuterProductまたはOuterProductAdd演算は、結果のために異なるアドレスでインターリーブすることができ、外積の複数の和または他の関数の計算が重複して計算されることを可能にする。そのような実施形態では、指定された結果位置の各々を、乗算器アレイ内の1つまたは複数の(K個の)別個の累算器格納位置a[i][j][k]にマッピングすることができ、ここで、kは0...K−1の範囲の値であり、このようにして、累算器値をプロセッサのメモリシステムにコピーしたり、メモリシステムからコピーしたりすることなく、インターリーブ形式でこれらの演算を進めることができる。同様に、外積の和に対する複数のオペランドを追跡することにより、累算器状態の内容をコピーすることなく外積乗算器および累算器にアクセスするために、プロセッサ内の複数の同時またはインターリーブされた複数の実行スレッドをK個以下にすることが可能になる。
[50]オペランドのK個のアドレスを追跡することができ、以前に追跡されなかったオペランドアドレスに対して(OuterProductAddとは異なる)OuterProduct命令が実行されると、K個の累算器位置の1つ、例えば、以前に使用されていない、または最低使用頻度のものがこのオペランドアドレスに割り当てられる。さらに、累算器に存在しないオペランドに対してOuterProductAdd命令が実行される場合、K個のうちの1組の累算器を割り当てることができる。他の代替の実施形態では、累算器、すなわちKの値の選択は、命令のサブフィールド25の命令、レジスタのサブフィールドの命令、メモリ内の命令などによって指定することができる。本発明の別の実施形態では、命令は、少なくとも2つの関連するオペコード、すなわち、外積が生成されることを指定する第1のオペコード、および、外積が前の結果に加算され外積和の累算を形成することを指定する第2のオペコードを指定するできる。本発明の別の実施形態では、累算器は、別個のOuterProductClear命令、または、この演算を他の演算(以下に詳述するOuterProductExtractなど)と組み合わせる命令によってクリアすることができ、それによって、OuterProductAddだけが繰り返し使用されて、外積和の累算が計算される。
[51]オーバーフローまたは早すぎる丸めを考慮しないで正確な合計を計算するには、外積の累積和の精度をさらに高めることが必要である。しかし、外積の和が計算されると、それらの結果を使用する多くのアルゴリズムは、結果の一部のみを必要とし、丸められ、または、切り捨てられて、より低い精度になる。そのような状況では、OuterProductExtractという追加の命令を実行して、結果の必要な部分を抽出するか、または、元の累積和よりも低い精度で結果を生成することができる。このような演算は、図3に示すようなオプションの追加回路39を使用して実施することができる。図3の例のように「抽出(Extract)」とラベル付けされたそのような回路は、タイルが追加の処理、例えば、累算器18からの結果の一部の抽出、それらの結果の丸め、または以下に記載されるような他の処理を実行することを可能にする。マルチプレクサの後に他の回路を配置することにより、スイッチング回路38を介して提供される近くのタイルからの結果をさらに処理することもできることに留意されたい。それが位置する個々のタイルからの結果のみを処理することが所望される場合、このような他の回路39を累算器18とスイッチング回路38との間に配置することができる。また、この他の回路は、アレイの各タイルではなく、アレイのエッジに沿って配置することができる。アレイのエッジに回路39を配置することによって、累算器からのデータは、アレイからシフトアウトされたときに、丸め、抽出、または他の方法で処理することができる。これにより、より少ない回路39のコピーの使用が可能になり、アレイ内の回路の複雑さが低減される。
[52]結果の特定の部分の選択または抽出するために使用される方法は、典型的には、OuterProductExtract命令のフィールド、例えば、フィールド25として指定される。OuterProductExtract命令によって呼び出される演算は、逆正接または双曲線正接関数などの単項演算をも含むことができ、または、この演算は、負の値をゼロ値(ReLU−正規化線形関数のように)または他の固定値にマップすることができ、かつ/または、結果をより低い精度の浮動小数点値に変換することができる。
[53]OuterProductExtract命令は、通常、例えばOuterProductAdd命令を使用して、外積の和を計算した後に実行される。一実施形態では、OuterProductExtract命令は、アレイ内の累算器内の各値に対して実行され、その結果を入力と同じ位置に配置し、それにより上書きする。別の実施形態では、OuterProductExtract命令は、演算の入力および出力について別個の位置を指定し、結果のサイズは外積の累積和よりも小さい。別の実施形態では、外積の和のための必要な状態は、2つの部分、すなわち、最終的な抽出結果を含むのに十分に大きい一方の部分、および、必要なサイズの残りの部分を構成する他方の部分に分割することができる。OuterProductExtract、OuterProduct、およびOuterProductAdd命令はこのとき、外積の和にアクセスするためにオペランドの両方の部分を指定することができ、結果は、最終的な抽出結果を含むオペランドになる。最終的な抽出結果がオペランド当たりFビット(全体のF*N2結果)である場合、追加部分は少なくとも(2B+E−F)*N2ビットになる。代替の実施形態では、追加部分は、OuterProductExtract命令の実行時にメモリ割り当てから解放され、不必要にメモリシステムにそれをコピーすることがなくなる。上述したように、OuterProductExtract演算は、代替の実施形態では、抽出時に累算器値をクリアすることができ、それによって、後続のOuterProductAdd命令を使用して外積の後続の和を計算することができる。
[54]本発明のさらなる実施形態では、乗数オペランドの連続する値を一緒に連結してより大きなオペランドにし、同様に、被乗数オペランドの連続する値を一緒に連結して別のより大きなオペランドにする。これらの連結されたオペランドは、通常、メモリシステムに格納される。そのように構成された場合、単一命令は、必要に応じて、オペランド乗数、オペランド被乗数、および外積結果、ならびに必要に応じてB、N、Fなどの他のパラメータを指定することができる。上述のように、命令は、外積の和の抽出またはさらなる処理を実行し、その結果を外積の抽出または処理された和と指定することもできる。抽出または処理された外積の和は、外積の累積和よりも小さくなり得る。このように指定された場合、単一命令は複数のクロックサイクルにわたって演算して、全体の演算を実行することができる。代替的に、この演算は、プロセッサの他の演算または命令と並行して実行することができ、この演算の広いオペランド結果を利用またはコピーする演算と同期させることができる。
[55]いくつかのアプリケーションでは、1つの命令によって、外積が前に累積された外積の和の結果に加算されることが望ましく、別個の命令が外積の和の結果をクリアし、または代替的に、それらを固定値に設定する。固定小数点演算でBビット乗数とBビット被乗数を1回乗算した結果は、表現するのに2Bビットを必要とし、外積にN2個の値がある。したがって、外積結果は2B*N2ビットを必要とするため、これらの命令は、結果をレジスタファイル内のレジスタにも、レジスタファイル内の一連のレジスタにも直ちに返すことはできない。この制限を克服するために、例えば命令によって指定されるようにメモリに格納されることによって、追加のプログラム状態として命令間で結果を維持することができる。後に、結果は、外積計算および累算回路の近くの専用格納位置にコピーされ、そこからコピーされることができる。
[56]乗数値および被乗数値がRビットの汎用レジスタのサイズを超える場合、レジスタの内容をまとめて連結することができる。このとき、各々、一連のRビット被乗数値のうちの1つおよび一連のRビット乗数値のうちの1つを使用して、一連の外積乗算を実行することができる。その後、命令で指定されているように、抽出、制限、丸め、切り捨て、正規化などによって、結果のサイズを低減することができる。したがって、単一の命令が、メモリ内の被乗数オペランドおよび乗数オペランドを指定し、処理された外積和結果を返すことができる。
[57]代替の実施形態では、外積命令は、命令のビットフィールド内でこれらのオペランドを個別に指定することができ、または、これらのオペランドを組み込む他のオペランドならびにオペランドのサイズおよびフォーマットなどの他の情報を指定することができる。代替的に、乗数値および/または被乗数値の連続するまたは不連続な部分が、連続する乗数値および/または被乗数値を選択することができる。例えば、乗算器のフィールドの選択は、連続外積乗算において畳み込み演算を実行することができる。
[58]上記の演算のいくつかについては、オペランドをインターリーブ形式でアレイに提示することができる。すなわち、乗数または被乗数として表されるN要素ベクトルを、Nベクトルまたは行列の値からの単一要素を使用して形成することができる。これらの演算のために、外積アレイに提示されるインターリーブされたオペランドが存在する。図4に示す転置回路は、このインターリービングを提供することができる。この回路では、N2個の値が、例えばレジスタ12から1次元に沿ってN方向並列性を有する記憶アレイにクロックされ、その後、インターリーブされた形で、レジスタ11への直交次元に沿ったN方向並列性を有するアレイから読み出される。この回路の出力は、入力に対する直交次元のN個のオペランドを提供する。したがって、これは、乗算器および被乗数が直交次元で同時にアレイに提示されることを必要とする外積アレイと共に使用することができる。データは、アレイに供給される前に転置され得るか、または転置回路が乗算器アレイ内に埋め込まれ得る。アレイ内に埋め込まれている場合、乗数値および被乗数値は、単一の次元に沿って提示することができ、組み合わせ回路に入るときにオペランドの1つがインターリーブまたは転置される。このインターリーブ回路は遅延を課すため、転置されるべきオペランドは、乗数オペランドおよび被乗数オペランドを乗算器回路で同時に満たすことができるように早期に入力されることが好ましい。
[59]図4は、入力データを転置すること、および並列乗算および累算の結果を転送することを示すためのアレイ15の一部を示す。図示されたアレイの部分では、アレイタイル40は、図中の矢印で表されるデータバスによって周囲のタイル41、42および43に結合される。乗算で使用されるデータは、最終的にアレイのすべてのタイルの乗算器にロードされる。これは、すべての行のすべてのタイルがデータを充填されるようにデータをすべての行に並列にクロッキングすることによって、または、一度に1行ずつ連続してデータをロードすることによって、実行することができる。いずれの手法を使用しても、最終的に2つのオペランドがアレイのすべてのタイルにロードされる。
[60]入力データを転置するか、または結果を転送するために、アレイ内の各タイル、例えば、タイル42は、そのタイルへの2つの入力バス上のデータ間での選択を可能にするための、マルチプレクサ38(図3参照)またはより一般的にはスイッチング回路38を含むことが好ましい。タイル42の場合、マルチプレクサ38は、制御信号に応答して、バス44とバス45との間でデータの受信を選択する。その行のタイルにデータがロードされているとき、マルチプレクサ38がバス44上のデータを選択するために使用される。例えば、結果を記憶装置11に転送するためにデータを上方にシフトさせることが望ましい場合、マルチプレクサ38を使用してバス45上のデータを選択する。明らかに、マルチプレクサおよびアレイの各垂直列のタイル間の垂直バスを使用することにより、最終的にアレイ内の計算からのすべてのデータを記憶装置11にロードすることができる。一番上の行(タイル42を有する)が充填されると、その行のすべてのデータは、好ましくは並列動作で記憶装置11にクロックアウトすることができ、そのため、その行のすべてのタイルのデータが同時に転送される。代替の実施形態では、結果データをアレイからその反対側にシフトアウトすることを可能にするために、各列の終わりに追加の記憶装置、例えば、対向する記憶装置12を設けることができる。
[61]物理レイアウトの考慮事項
[62]典型的には、図1に示すように、集積回路として実装されるアレイのレイアウトは、好ましくは、直交する方向に分散された乗数値および被乗数値を有し、乗算器回路は、個々の乗数値と個々の被乗数値とが対角線状に交差するところ、または、その付近に配置される。累算器回路は、好ましくは、相互接続長を最小限にするために、対応する乗算器回路の近くに配置される。乗算器の結果は桁上げ保存加算器を使用し、冗長形式の積を生成することができ、累算器はこの積を取って同じく桁上げ保存加算器を用いて以前の値に加算することができる。この手法は、全体の結果が生成されるまで、長い桁上げの伝播を避けて、累算全体が桁上げ保存演算で実行することを可能にする。必要に応じて、桁上げ伝播加算器を累算器回路の出力に配置し、回路と組み合わせて結果を丸めることができる。例えば、適切なビット位置で結果に丸めビットを加算した後、結果の下位部分を切り捨てることによって丸めを行うことにより、より少ないビット数で結果を通信することができる。代替の実施形態では、結果の下位部分は、丸めの恩恵なしに単純に切り捨てられる。桁上げの完全な伝播は、結果が、バイナリ表現のための最小ビットを使用して通信されることを提供する。アプリケーションに応じて、出力フィールドへのオーバーフローを回避するために出力の最大値を制限するために回路を利用することもできる。さらに、期待される用途に適切であれば、各累算器に、N2回の並列処理による結果の各オペランドに対して、単項演算、例えば、逆正接関数または正規化線形ユニット(ReLU)関数を実行するための回路を含めることができる。
[63]適切なアプリケーションでは、丸めまたは他の回路がアレイのエッジに設けられ、例えば、図1のブロック11および12内に組み込まれ、N個の値がN2個のアレイから一度に読み取られる。このようにして、丸めまたは他の回路のN個のコピーのみが必要とされる。このような回路がすべてエッジに移動した場合、冗長な形の累積結果は各オペランドに対して2*(E+2*B)ビットが通信されることを必要とし、別々のワイヤまたは差動ワイヤ対を用いるのと同様に、合計N*2*(E+B)ビットが通信されることを必要とする。第1の手法によってそのような追加のワイヤに必要な電力および面積に依存して、N2個の乗算器−累算器アレイを有する桁上げ伝播加算器、丸め処理、制限および単項関数回路のいずれかまたはすべてのN2またはN個のコピーを使用することが好ましい場合がある。さらに、N個のオペランドから成るセットを返すために2つ以上のサイクルを必要とすることと引き換えに、ワイヤの数を減らすことができる。例えば、結果を返すためにN*B本のワイヤだけが存在する場合、N2値は依然として通信され得るが、N個のオペランドのセット当たりBサイクルが必要であり、ここでE≦Bであり、値は冗長形式で累算器から提供される。下記の畳み込み演算の場合、6N≦FX*FYである限り、結果の生成速度は遅くならない。
[64]代替的には、乗算器の出力および/または累算器の出力において部分桁上げ伝播を実行することができる。例えば、桁上げは、バイト内で伝搬され、バイト当たり8+eビットの出力を生成することができる。ここで、eは、2つ以上のバイトを一緒に加算する結果生じる、桁上げの追加ビットの数である。桁上げのバイト(左に1ビットシフトする)を和のバイト(シフトされていない)に加算すると、和を表すために2つの追加のビットが必要になり得る。それでも、これらの10ビットは、完全に冗長な結果が必要とする16ビットよりも小さい。結果のバイト当たりのワイヤ数が8+eである場合、アレイのエッジに通信されるべきN値に対して、サイクル数は、ワイヤの数および桁上げが伝搬される度合いに応じて、N個のオペランドのセット当たりほぼ3サイクルに返され得る。この代替の実施形態からわかるように、これらの中間値が結果のビット当たり整数本のワイヤで桁上げされる必要はなく、N個のオペランドのセットを通信するのに必要なサイクル数は、ワイヤを有効に利用する任意の有用な数字であってもよい。
[65]乗数オペランドおよび被乗数オペランドがプロセッサの汎用レジスタのサイズと比較して大きいとき、例えば、オペランドがプロセッサ内で1024ビットであり、汎用レジスタサイズが128ビットである場合、本発明は、乗算器アレイにわたってこれらのオペランドを送信することに関連する遅延を考慮に入れることができる。上の図は、名目上、乗算器と被乗数が1クロックサイクルでアレイ全体にシフトされると仮定しているが、光速度の伝搬遅延および抵抗容量(RC)遅延がクロック速度を制限する可能性がある。タイルの各行は、各タイルが隣接するタイルに抵抗的に接続されているRCネットワークからなると考えることができ、各タイルが、タイルを接続するバスに容量性負荷を課す。一列に複数のタイルがあることによって、RC負荷は、データが最初に供給される場所から最も離れたタイルにとって有害になる。
[66]これに対する1つの解決策は、タイルのサブグループ、またはすべてのタイルに対して、タイルのグループ間の信号の増幅、ラッチ、または他の処理を提供することである。この手法を図5に示す。図5は、N×Mの「スーパータイル」50のセットに分割されたアレイ10を示す。各スーパータイル50は、上述のようなn×mタイル30のセットに分割される。(1つのタイル30だけを含むスーパータイル50の場合、n×mは1になることに留意されたい。)各スーパータイル50には、適切なラッチ、コンバータ、増幅器、信号プロセッサなど58のセットが関連付けられており、その例は以下に説明する。これらの回路58は、スーパータイル50内のタイル30のグループにこれらの信号を供給する前に、必要に応じて行および列バス上の信号を処理する。そのような処理は、必要に応じて各スーパータイルからの結果信号に提供することもできる。
[67]図6a、図6bおよび図6cは、図5に示す回路58内に含まれ得る典型的な信号処理を示す。図6aには、行バス44とスーパータイル50との間に増幅回路51が設けられている。代替的に、1つまたは複数の遅延サイクルを除去して、いくつかの乗算器回路が他のものより早く演算を開始できるようにすることができる。累算器の結果を読み出すときが来ると、累算器から出力へのパスに追加のパイプラインステージを追加することで、これらのサイクルを補償することができる。代替的に、アレイの一部分を早く読み出すことによって、アレイ全体の実効待ち時間を減らすことができる。上述したように、次数Nの並列処理でアレイ出力を読み取るためにシーケンス回路が使用される場合、アレイの残りの部分を以前の結果に続く連続した流れで読み取ることができるため、結果的に待ち時間が効果的に低減される。
[68]図6bに示されている別の信号処理手法は、到来時にデータを保持するレジスタ53を各スーパータイル50に提供し、その後、後のクロック信号に応答してそのデータをタイルに転送することである。図6cは、第3の手法を示す。待ち時間を修正し、RC負荷を克服するために、データ経路にレジスタを挿入して、各スーパータイルに到来する信号の遅延を等しくする。例えば、スーパータイル50aは、レジスタ54、57および58の3つのレジスタによってアレイの入力側から分離されている。入力からの遅延のための3つのレジスタ、すなわちレジスタ56および58もまた、スーパータイル50bを分離する。同様に、行内の第1のスーパータイル50cと入力との間には、遅延のための3つのレジスタ55がある。
[69]単一のクロックサイクルにおいて、N個の値のうちのGだけが単一のサイクルで送信され得ると仮定される、この問題に対処する代替の手法が使用されてもよい。この距離Gは、この代替設計において、単一の受信機だけが伝送線路に負荷を与えるという事実によって、向上させられ得る。これに対処するために、普通なら相手側に到着するであろう値に対して追加のクロック遅延を挿入することができる。この分散ネットワークは、乗算器回路に到達する際に乗数値と被乗数値の両方を等しい量だけ遅延させる。使用する上で説明した技術のどれを選択するかは、アレイのサイズ、意図する用途、およびRC問題の程度に依存する。
[70]代替的なタイル
[71]図7a〜図7dは、タイル内に転置回路を提供するための代替的な手法を示す。乗算器および累算器(MAC)は、これらの図には示されていないが、図3に示されているものに対応する。図7aにおいて、フリップフロップ71が、入力データ経路とMACからの出力との間で選択するために使用されるマルチプレクサ72を用いて、タイル30との間でデータをクロックするために使用される。図7bでは、2つのフリップフロップ71が再び使用されるが、異なるクロック信号C1およびC2、ならびに信号OEによって制御され、データ経路を選択するために使用される出力イネーブル回路73を有する。図7cは、図7bと同様であるが、バイパスバス74を用いて入力データが次のタイルに供給される。図7dは図7aと同様であるが、バイパスバス74も使用する。
[72]図8aおよび図8bは、タイル30の代替出力回路を示す。図8aにおいて、フリップフロップ71は累算器81からの結果を格納し、それを出力に供給する。図8bでは、フリップフロップ71と出力端子との間に出力イネーブル回路73が設けられている。
[73]畳み込み演算
[74]ここで説明するプロセッサは、畳み込み演算を実行することもできる。図1に示す乗算器アレイ10は、入力値を表すD次元アレイとフィルタ値を表すN個のD次元アレイとの間でN回の畳み込みを実行し、入力値とフィルタ値との畳み込みを表すN個のD次元アレイを生成する。代替的に、入力値を表すN個のD次元アレイの間のN回の畳み込みが、フィルタ値を表す1つのD次元アレイによって畳み込まれ、入力値とフィルタ値との畳み込みを表すN個のD次元アレイが生成され得る。これらの演算の一例は、図9に関して以下に説明する。畳み込み演算の対称性は、入力値とフィルタ値とを、ある表記上の差だけで交換することをさらに可能にする。Dが2である場合、これらの演算は画像を表すことができる2次元値に対応する。この記述の目的のために、N個のフィルタ値の次元はFX×FYで表され、入力値の次元はIX×IYである。入力アレイの値を拡張または制限せずに畳み込みの完全なセットが計算された場合の結果Rの次元は、RX×RYとして記述される2次元アレイになり、ここで、RX=IX−FXおよびRY=IY−FYである。FX*FY長の和が必要であり、乗算の総量はRX*RY*FX*FY*Nであり、これはN2回の乗算を並列に計算し、結果的にRX*RY*FX*FY/Nサイクルに加えて累算器からの結果をコピーするための追加のサイクルにおいて畳み込みが実行される。
[75]この演算を実装するコードの例は、以下の通りである。
Foreach k:=[0..RX−1],l:=[0..RY−1],m:=[0..N−1],i:=[0..FX−1],j:=[0..FY−1]
R[k,l,m]:=R[k,l,m]:=sum[I[k+i,l+j]*F[i,j,m]]
Foreach k:=[0..RX−1],l:=[0..RY−1],m:=[0..N−1],i:=[0..FX−1],j:=[0..FY−1]
R[k,l,m]:=R[k,l,m]:=sum[I[k+i,l+j]*F[i,j,m]]
[76]内部演算ループ(単数の入力値とN個のフィルタ値)は、入力値の可変シフト対象から選択された乗数としての単一の1次元ベクトルと、N個のフィルタ値から選択された、被乗数オペランドにおけるN個の値のセットとを表す。連続サイクル内で各フィルタ値にわたって反復することによって、FX*FYサイクルを使用して、畳み込み全体の一部を表すN2個の和が計算される。具体的には、R[k,l,m]を含むN2合計を計算する単一パスであって、ここで、kはk..k+N−1(N≦RXと仮定する)に及び、lは範囲[0..RY−1]内の特定の値であり、mは0...N−1に及ぶ、単一パス上で、IアレイからのN個の値が各サイクルで選択され、乗数Xとして外積和アレイに提示される。
N<IXであると仮定すると、これらは、iおよびjの特定の値のフィルタ値F[i,j,m]と調和するための、y座標におけるl+jの共通の値、および、x座標におけるk+i..k+i+N−1の値を有する連続した値であり、mは[0...N−1]からの範囲に及び、これらのフィルタ値は、被乗数Yとして外積和アレイに提示される。
N<IXであると仮定すると、これらは、iおよびjの特定の値のフィルタ値F[i,j,m]と調和するための、y座標におけるl+jの共通の値、および、x座標におけるk+i..k+i+N−1の値を有する連続した値であり、mは[0...N−1]からの範囲に及び、これらのフィルタ値は、被乗数Yとして外積和アレイに提示される。
[77]この演算を実施するコードの例は、以下の通りである。
Foreach k:=[0..RX−1,by N],l:=[0..RY−1]
Foreach i:=[0..FX−1],j:=[0..FY−1]
X[n]:=I[k+i+n,l+j],n:=[0..N−1]
Y[m]:=F[I,j,m]m:=[0..N−1]
a[n,m]:=a[n,m]+X[n]*y[m],n:=[0..N−1],m:=[0..N−1]
R[k+n,l,m]:=Extract[a[n,m]],n:=[0..N−1],m:=[0..N−1]
Foreach k:=[0..RX−1,by N],l:=[0..RY−1]
Foreach i:=[0..FX−1],j:=[0..FY−1]
X[n]:=I[k+i+n,l+j],n:=[0..N−1]
Y[m]:=F[I,j,m]m:=[0..N−1]
a[n,m]:=a[n,m]+X[n]*y[m],n:=[0..N−1],m:=[0..N−1]
R[k+n,l,m]:=Extract[a[n,m]],n:=[0..N−1],m:=[0..N−1]
[78]畳み込みを表す完全な和は累算器で計算されるため、並列転送と順次転送との組み合わせを使用してアレイからコピーすることができる。例えば、幅B*Nのデータ経路が利用可能である場合、各サイクルでN個の累算器からのBビットをアレイからコピーすることができる。先に説明したように、累算和の抽出(例えば、丸め、制限および/またはシフトによる)後に計算されるE+2Bビットまたはサブフィールドを含む和全体は、アレイからコピーされた結果であってもよい。値全体をコピーするとき、E<Bである場合、アレイからN個の値をコピーするには3サイクルで十分であり、アレイ全体を構成するN2個の和のセット全体に対して3Nサイクルで十分である。アレイから結果をコピーするための回路は、連続する外積セットの計算と同時に動作し、3N≦FX*FYである限り、追加のサイクルを必要としない。代替の実施形態では、アレイからN個の値をコピーするために1サイクルしか必要としない抽出結果が得られる場合、N≦FX*FYである限り、追加のサイクルは必要ではない。
[79]畳み込み演算は、N個のD次元フィルタアレイに対して並列なN2回の乗算によって並列に実行されることを示したので、このメカニズムはN個を超えるフィルタアレイについて、単純に第1の計算に対してN個のフィルタアレイを選択し、第2の計算に対して別のN個のフィルタアレイを選択し、以下同様にすることによって、拡張することができることは諒解されるべきである。したがって、この技法は、Nよりも多くの数のフィルタアレイに対して拡張することができる。同様に、この技法は、1次元アレイのように、2以外の次元のアレイに対して、lおよびjにわたる反復を削除することによって、または、3もしくはそれ以上の次元については、RおよびFの第3またはそれ以上の次元にわたってさらに連続的に反復することによって、拡張することができる。
[80]コードの微細な変更は、RX<Nであっても、全アレイを利用することができる。R[k,l,m]値の計算は独立しているので、Xオペランド選択がnの値に対してk+i+nおよびl+jの添え字の適切な修正を選択すること、ここで、i+n>IX、ならびに、R値出力がk+n>RXの値についてk+nおよびlの添え字を修正することのみが必要である。
[81]図9は、4つの別個の6点フィルタF、G、HおよびIが1次元の時系列にわたって実行される畳み込み演算の一例を示す。説明のために、4×4の外積アレイのみが示されているが、アレイは所望の大きさにすることができる。垂直面91、92、93、94、95および96は、外積アレイの連続するサイクルを表す。オペランドの交点(図中の小球)は各々、乗算−累算演算を表す。したがって、第1の演算中に、フィルタ値F5と入力値x0とが乗算される。次の演算中に、フィルタ値F4と値x1とが乗算され、その後、フィルタ値F3と入力値x2とが乗算され、以下同様である。面61、62、...、66を通って伸びる線fy0、fy1、fy2、およびfy3は、フィルタFの和を表す。
[82]総和のための他の列が並行して実行される。すなわち、Gフィルタの総和gy0、gy1、gy2、およびgy3の次の列が同時に実行される。G、H、Iフィルタのこれらの総和には、図が判読不能にならないようにラベルが付されていない。始まりの4つの値の初期ロード後、X入力列に沿って1サイクル当たり1つのみの新しい入力が必要とされる。任意のエッジプロセッサの存在に応じて、その次元に沿ったオプションのシフトレジスタを追加することができる。さらに、必要に応じて、内部乗算器は任意の隣接要素シフトファブリックを使用して値を送信することができる。このようにするには、底部に沿ったブロードキャストを有することによって、1つだけの要素が必要となる。
[83]行列乗算演算
[84]各々少なくとも2次元アレイであり、オペランドの少なくとも1つの次元が1対1に一致する2つの入力オペランドを用いて、乗算器アレイは、行列−行列乗算の部分としてN2回の乗算を実行することができる。この演算は、DC次元を共通とする、第1のオペランド、すなわち、D1次元アレイと、第2のオペランド、すなわち、D2次元アレイとを乗算する。結果は、DR=D1+D2−DCのようなDR次元のアレイになる。このような操作では、共通でない第1のオペランドの次元(D1−DC)の積が少なくともNであり、共通でない第2のオペランドの次元(D2−DC)が少なくともNである場合、アレイの利用率は100%になる。このような演算は、結果の各N×Nサブセットについて、第1のオペランドおよび第2のオペランドの対応するN個の値のすべてを、共通のすべてのDC次元のサイズに等しい数のサイクルにわたって提示することによって進行し、N2個の積和が生成される。説明の目的のために、本明細書では、次元IX×IYの第1の2次元アレイに次元FX×FYの第2の2次元アレイを乗算した例を示す。ここでIYおよびFXで示される単一の共通の次元は組み合わされて、外積、すなわち、RX×RYとして記述される2次元アレイRを形成する。ここでRX=IXおよびRY=FYである。
[85]この演算を実施するコードの例は、以下の通りである。
Foreach k:=[0..RX−1,by N],l:=[0..RY−1,by N]
Foreach i:=[0..IY−1]
X[n]:=I[k+n,i],n:=[0..N−1]
Y[m]:=F[i,l+m]m:=[0..N−1]
a[n,m]:=a[n,m]+X[n]*y[m],n:=[0..N−1],m:=[0..N−1]
R[k+n,l+m]:=Extract[a[n,m]],n:=[0..N−1],m:=[0..N−1]
Foreach k:=[0..RX−1,by N],l:=[0..RY−1,by N]
Foreach i:=[0..IY−1]
X[n]:=I[k+n,i],n:=[0..N−1]
Y[m]:=F[i,l+m]m:=[0..N−1]
a[n,m]:=a[n,m]+X[n]*y[m],n:=[0..N−1],m:=[0..N−1]
R[k+n,l+m]:=Extract[a[n,m]],n:=[0..N−1],m:=[0..N−1]
[86]内部演算ループは、第1の入力行列Iから選択された乗数としての単一の1次元ベクトルと、第2の入力行列Fから選択された被乗数としてのN個の値のセットを提示する。ベクトル部分集合を選択する際に共通の次元(または一般的な場合の次元)にわたって反復することによって、IYサイクルを使用して、出力行列Rの一部を表すN2個の積和が計算される。
[0087]図10は、行列乗算のためのアレイの使用例を示す図である。この例では、簡略化のために、2つの4×4行列が乗算されているが、アレイのサイズは所望の大きさにすることができる。各垂直面101、102、103、104は、乗算器アレイの1つの使用を表す。4つのそのような積み重ねられた面101、102、103、および104は、時間的に連続する、そのユニットの4つの連続した使用である。図の左側に沿って、a[0][3]からa[3][3]に及ぶ入力被乗数オペランドa[i][j]が示されており、図の後ろには、b[0][0]からb[3][3]に及ぶ乗数オペランドb[i][j]が示されている。これらの入力オペランドは行列であり、図は、4サイクルの4x4乗算器アレイを使用する4x4行列乗算を示している。
[88]a[i][j]オペランドとb[i][j]オペランドとの各交差点は、その位置での1つの乗算−累算演算を表す。垂直線105は、図7の下部に示されたr[0][0]からr[3][3]に及ぶ結果r[i][j]を有する総和方向を表す。
[89]図10では、総和において時間が流れているため、単一行の入力のみが必要であることに留意されたい。アレイには記憶装置があるが、これは累算器の結果を1サイクルから次のサイクルに桁上げするラッチの形で提供することができる。非常に長い積和を含むニューラルネット処理では、より大きいオペランドを行ごとに供給し、メモリを必要とするより少ない数の累積を時間の経過と共に行うことが有利である。
[90]本発明のこの説明は、例示および説明のために提示されている。網羅的であること、または、記載された厳密な形態に本発明を限定することは意図されておらず、上述の教示に照らして多くの修正形態および変形形態が可能である。実施形態は、本発明の原理およびその実際の応用を説明するために選択され、説明された。この説明により、当業者は、様々な実施形態において、また特定の用途に適した様々な変更形態で、本発明を最も有効に活用し実践することが可能になる。本発明の範囲は、添付の特許請求の範囲によって規定される。
Claims (23)
- 各々bビットのビット幅を有し、かつrビットの集合幅を有する複数n個の乗数オペランドであって、r=n*bである、乗数オペランドの各々の1つと、各々bビットのビット幅を有し、かつrビットの集合幅を有する複数n個の被乗数オペランドであって、r=n*bである、被乗数オペランドの各々の1つとを乗算するためのプロセッサであって、
rビットのビット幅を有するレジスタファイルと、
行および列に配置された乗算器のアレイであって、各列は1つの乗数オペランドを受け取るように結合されており、各行は1つの被乗数オペランドを受け取るように結合されており、それによって、各乗算器は乗数オペランドおよび被乗数オペランドを受け取り、それらをともに乗算して、rビットより大きい集合ビット幅を有する複数n2個の乗算結果を提供する、乗算器のアレイと、
行および列に配置された加算器のアレイであって、各加算器は対応する乗算器に結合されている、加算器のアレイと、
行および列に配置された累算器のアレイであって、各累算器は対応する加算器に結合されている、累算器のアレイと
を備え、
各乗算器からの前記乗算結果は、前記累算器に格納されている任意の以前の乗算結果に加算され、対応する前記累算器に供給され、それによって累算結果を提供する、プロセッサ。 - 単一の命令が、前記プロセッサに、前記オペランドの乗算および前記乗算の累算を実行させる、請求項1に記載のプロセッサ。
- 前記累算器は、冗長形式で値を保持する、請求項1に記載のプロセッサ。
- 出力段のアレイをさらに備え、各出力段は、前記累算結果を前記プロセッサから転送する前に前記累算結果を格納するために対応する前記累算器に結合されている、請求項1に記載のプロセッサ。
- 前記出力段に供給されるデータを制御するために、各累算器とその対応する出力段との間に結合されているスイッチング回路のアレイをさらに備える、請求項4に記載のプロセッサ。
- 前記スイッチング回路は、前記アレイ内の別の累算器からのデータが前記出力段に提供されることを可能にする、請求項5に記載のプロセッサ。
- 行および列に配列された追加のデータ処理回路のアレイをさらに備え、前記追加のデータ処理回路は、各累算器と、対応する出力段との間に結合されており、前記追加のデータ処理回路は、前記累算器内のデータに対するさらなる演算を実行する、請求項4に記載のプロセッサ。
- 前記追加のデータ処理回路は、前記累算器内の前記データの一部の抽出、前記累算器内の前記データの丸め、または前記累算器内の前記データの関数の適用のうちの少なくとも1つを可能にする、請求項7に記載のプロセッサ。
- 前記データが前記累算器から前記アレイを出て転送されるときに、前記累算器内の前記データの一部の抽出、前記累算器内の前記データの丸め、または前記累算器内の前記データへの関数の適用のうちの少なくとも1つを可能にするために、前記アレイに結合されている少なくとも1つのデータ処理回路をさらに備える、請求項4に記載のプロセッサ。
- 前記少なくとも1つのデータ処理回路は複数のデータ処理回路を含み、各データ処理回路は前記アレイ内のすべての前記累算器よりも少ないサブセットに結合される、請求項9に記載のプロセッサ。
- 各々bビットのビット幅を有し、かつrビットの集合幅を有する複数n個の乗数オペランドであって、r=n*bである、乗数オペランドの各々の1つと、各々bビットのビット幅を有し、かつrビットの集合幅を有する複数n個の被乗数オペランドであって、r=n*bである、被乗数オペランドの各々の1つとを乗算するためのプロセッサにおける、前記プロセッサのタイルであって、
複数n個の乗数オペランドのうちの1つおよび複数n個の被乗数オペランドのうちの1つを受け取り、これらを乗算して、rビットより大きいビット幅を有する乗算結果を提供するように結合された乗算器と、
前記乗算器に結合された加算器と、
前記加算器に結合された累算器と
を備え、
前記乗算器からの前記乗算結果は前記加算器に提供され、前記累算器に格納されている任意の以前の乗算結果に加算され、それによって累算結果を提供する、タイル。 - 前記累算結果を格納するために前記累算器に結合された出力段をさらに備える、請求項11に記載のタイル。
- 前記出力段に供給されるデータを選択するために、前記累算器と前記出力段との間に結合されているスイッチング回路をさらに備える、請求項12に記載のタイル。
- 前記スイッチング回路は、別のタイルからのデータが前記出力段に提供されることを可能にする、請求項13に記載のタイル。
- プロセッサであって、行および列に配置された乗算器のアレイと、行および列に配置された累算器のアレイと、行および列に配置された加算器のアレイとを有し、各乗算器は、関連付けられている加算器および関連付けられている累算器を有し、前記プロセッサはrビットのビット幅を有するレジスタファイルを有するプロセッサにおいて、ベクトル乗数オペランドとベクトル被乗数オペランドとの外積を実行する方法であって、
前記乗算器の各々に第1の乗数オペランドおよび第1の被乗数オペランドをロードするステップであって、前記乗算器は、前記アレイ内の位置[i,j]において、第1の乗数オペランドiおよび第1の被乗数オペランドjを受け取る、ステップと、
各乗算器において、前記第1の乗数オペランドiと前記第1の被乗数オペランドjとの乗算を実行して、rビットよりも広い第1の乗算結果i*jを生成するステップと、
前記第1の乗算結果を前記関連付けられている加算器に供給するステップと、
前記第1の乗算結果を任意の以前の乗算結果に加算して、累算乗算結果を前記関連付けられている累算器に供給するステップと
を含む、方法。 - 前記乗算器の各々に第2の乗数オペランドおよび第2の被乗数オペランドをロードするステップであって、前記アレイ内の位置[i,j]にある前記乗算器が、第2の乗数オペランドiおよび第2の被乗数オペランドjを受け取る、ステップと、
各乗算器において、前記第2の乗数オペランドiと前記第2の被乗数オペランドjとの乗算を実行してrビットよりも広い第2の乗算結果i*jを生成するステップと、
各乗算器において、前記第2の乗算結果を前記関連付けられている加算器に供給するステップと、
各乗算器において、前記関連付けられている累算器からの前記第1の乗算結果を前記関連付けられている加算器に供給するステップと、
前記第2の乗算結果を前記第1の乗算結果に加算して新たな累算結果を提供するステップと、
前記関連付けられている累算器に前記新たな累算結果を格納するステップと
をさらに含む、請求項15に記載の方法。 - 単一の命令が、前記プロセッサに、前記オペランドの乗算および前記乗算の累算を実行させる、請求項16に記載の方法。
- 前記プロセッサは、出力段のアレイをさらに含み、各出力段は、関連付けられている累算器に結合され、前記方法は、前記新たな累算結果を前記出力段に格納するステップをさらに含む、請求項16に記載の方法。
- 前記プロセッサは、前記出力段に供給されるデータを制御するために、各累算器とその対応する出力段との間に結合されているスイッチング回路のアレイをさらに備える、請求項16に記載の方法。
- 前記スイッチング回路は、前記アレイ内の別の累算器からのデータが、異なる累算器に関連付けられている前記出力段に提供されることを可能にする、請求項19に記載の方法。
- (i)前記累算器内のデータの一部の抽出、(ii)前記累算器内のデータの丸め、または(iii)前記累算器内のデータへの関数の適用のうちの少なくとも1つのステップをさらに含む、請求項18に記載の方法。
- 前記プロセッサは、行および列に配列された追加のデータ処理回路のアレイをさらに備え、前記追加のデータ処理回路は、各累算器と各出力段との間に結合されており、前記追加のデータ処理回路は、前記累算器内のデータに対するさらなる演算を実行する、請求項18に記載の方法。
- 前記追加のデータ処理回路は、前記累算器内のデータの一部の抽出、前記累算器内のデータの丸め、または前記累算器内のデータへの関数の適用のうちの少なくとも1つを実行する、請求項22に記載の方法。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US15/224,176 | 2016-07-29 | ||
US15/224,176 US10120649B2 (en) | 2016-07-29 | 2016-07-29 | Processor and method for outer product accumulate operations |
Publications (1)
Publication Number | Publication Date |
---|---|
JP2018055677A true JP2018055677A (ja) | 2018-04-05 |
Family
ID=59399358
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2017145803A Pending JP2018055677A (ja) | 2016-07-29 | 2017-07-27 | 外積累算演算のためのプロセッサおよび方法 |
Country Status (4)
Country | Link |
---|---|
US (2) | US10120649B2 (ja) |
EP (1) | EP3276486A1 (ja) |
JP (1) | JP2018055677A (ja) |
CN (1) | CN107665126A (ja) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2021152703A (ja) * | 2020-03-24 | 2021-09-30 | 株式会社東芝 | ニューラルネットワーク装置およびニューラルネットワークシステム |
Families Citing this family (23)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10120649B2 (en) | 2016-07-29 | 2018-11-06 | Microunity Systems Engineering, Inc. | Processor and method for outer product accumulate operations |
US10891538B2 (en) | 2016-08-11 | 2021-01-12 | Nvidia Corporation | Sparse convolutional neural network accelerator |
US10997496B2 (en) * | 2016-08-11 | 2021-05-04 | Nvidia Corporation | Sparse convolutional neural network accelerator |
KR20180034853A (ko) * | 2016-09-28 | 2018-04-05 | 에스케이하이닉스 주식회사 | 합성곱 신경망의 연산 장치 및 방법 |
US10346163B2 (en) | 2017-11-01 | 2019-07-09 | Apple Inc. | Matrix computation engine |
US10474430B2 (en) * | 2017-12-29 | 2019-11-12 | Facebook, Inc. | Mixed-precision processing elements, systems, and methods for computational models |
US11409525B2 (en) * | 2018-01-24 | 2022-08-09 | Intel Corporation | Apparatus and method for vector multiply and accumulate of packed words |
US10459876B2 (en) * | 2018-01-31 | 2019-10-29 | Amazon Technologies, Inc. | Performing concurrent operations in a processing element |
US10910061B2 (en) * | 2018-03-14 | 2021-02-02 | Silicon Storage Technology, Inc. | Method and apparatus for programming analog neural memory in a deep learning artificial neural network |
US10642620B2 (en) | 2018-04-05 | 2020-05-05 | Apple Inc. | Computation engine with strided dot product |
US10970078B2 (en) | 2018-04-05 | 2021-04-06 | Apple Inc. | Computation engine with upsize/interleave and downsize/deinterleave options |
US11216732B2 (en) * | 2018-05-31 | 2022-01-04 | Neuralmagic Inc. | Systems and methods for generation of sparse code for convolutional neural networks |
US11704543B2 (en) * | 2018-06-12 | 2023-07-18 | Samsung Electronics Co., Ltd. | Neural network hardware acceleration with stochastic adaptive resource allocation |
US10754649B2 (en) | 2018-07-24 | 2020-08-25 | Apple Inc. | Computation engine that operates in matrix and vector modes |
US10831488B1 (en) | 2018-08-20 | 2020-11-10 | Apple Inc. | Computation engine with extract instructions to minimize memory access |
US10846091B2 (en) | 2019-02-26 | 2020-11-24 | Apple Inc. | Coprocessor with distributed register |
US11429555B2 (en) | 2019-02-26 | 2022-08-30 | Apple Inc. | Coprocessors with bypass optimization, variable grid architecture, and fused vector operations |
JP7408289B2 (ja) * | 2019-03-28 | 2024-01-05 | 株式会社エヌエスアイテクス | 畳込み演算装置 |
JP7245954B2 (ja) * | 2019-07-30 | 2023-03-24 | ファルコンリー インコーポレイテッド | 大量の時系列データの滑らか且つ解像度が扱いやすいビュー |
US11281745B2 (en) | 2019-08-16 | 2022-03-22 | International Business Machines Corporation | Half-precision floating-point arrays at low overhead |
US11182458B2 (en) | 2019-12-12 | 2021-11-23 | International Business Machines Corporation | Three-dimensional lane predication for matrix operations |
CN114692077A (zh) * | 2020-12-30 | 2022-07-01 | 华为技术有限公司 | 一种矩阵计算装置、方法、系统、电路、芯片及设备 |
CN116820387B (zh) * | 2023-08-28 | 2023-12-01 | 深圳比特微电子科技有限公司 | 乘法器、乘累加电路和卷积运算单元 |
Family Cites Families (13)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US4697247A (en) | 1983-06-10 | 1987-09-29 | Hughes Aircraft Company | Method of performing matrix by matrix multiplication |
US5185715A (en) | 1990-03-30 | 1993-02-09 | Hughes Aircraft Company | Data processing systems and methods for linear programming |
US5742840A (en) | 1995-08-16 | 1998-04-21 | Microunity Systems Engineering, Inc. | General purpose, multiple precision parallel operation, programmable media processor |
US5953241A (en) | 1995-08-16 | 1999-09-14 | Microunity Engeering Systems, Inc. | Multiplier array processing system with enhanced utilization at lower precision for group multiply and sum instruction |
US7395298B2 (en) * | 1995-08-31 | 2008-07-01 | Intel Corporation | Method and apparatus for performing multiply-add operations on packed data |
US5983253A (en) | 1995-09-05 | 1999-11-09 | Intel Corporation | Computer system for performing complex digital filters |
US6571268B1 (en) * | 1998-10-06 | 2003-05-27 | Texas Instruments Incorporated | Multiplier accumulator circuits |
US7181484B2 (en) * | 2001-02-21 | 2007-02-20 | Mips Technologies, Inc. | Extended-precision accumulation of multiplier output |
US20060004902A1 (en) * | 2004-06-30 | 2006-01-05 | Siva Simanapalli | Reconfigurable circuit with programmable split adder |
US7519646B2 (en) | 2006-10-26 | 2009-04-14 | Intel Corporation | Reconfigurable SIMD vector processing system |
US8307023B1 (en) * | 2008-10-10 | 2012-11-06 | Altera Corporation | DSP block for implementing large multiplier on a programmable integrated circuit device |
US9600281B2 (en) | 2010-07-12 | 2017-03-21 | International Business Machines Corporation | Matrix multiplication operations using pair-wise load and splat operations |
US10120649B2 (en) | 2016-07-29 | 2018-11-06 | Microunity Systems Engineering, Inc. | Processor and method for outer product accumulate operations |
-
2016
- 2016-07-29 US US15/224,176 patent/US10120649B2/en not_active Expired - Fee Related
-
2017
- 2017-07-25 EP EP17183101.9A patent/EP3276486A1/en not_active Withdrawn
- 2017-07-27 JP JP2017145803A patent/JP2018055677A/ja active Pending
- 2017-07-27 CN CN201710623655.8A patent/CN107665126A/zh active Pending
-
2018
- 2018-10-02 US US16/150,224 patent/US20190065149A1/en not_active Abandoned
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2021152703A (ja) * | 2020-03-24 | 2021-09-30 | 株式会社東芝 | ニューラルネットワーク装置およびニューラルネットワークシステム |
Also Published As
Publication number | Publication date |
---|---|
US20180032312A1 (en) | 2018-02-01 |
EP3276486A1 (en) | 2018-01-31 |
US10120649B2 (en) | 2018-11-06 |
CN107665126A (zh) | 2018-02-06 |
US20190065149A1 (en) | 2019-02-28 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP2018055677A (ja) | 外積累算演算のためのプロセッサおよび方法 | |
JP7312879B2 (ja) | ハードウェアにおける行列乗算の実行 | |
TWI795107B (zh) | 向量處理單元與具有向量處理單元之計算系統,以及電腦實施方法 | |
US8078835B2 (en) | Reconfigurable array processor for floating-point operations | |
JP5408913B2 (ja) | 高速かつ効率的な行列乗算ハードウェアモジュール | |
JP3940542B2 (ja) | データプロセッサ及びデータ処理システム | |
WO2004061705A2 (en) | Efficient multiplication of small matrices using simd registers | |
JP4477959B2 (ja) | ブロードキャスト型並列処理のための演算処理装置 | |
TW202020654A (zh) | 具有壓縮進位之數位電路 | |
EP4206993A1 (en) | Configurable pooling processing unit for neural network accelerator | |
WO2023124371A1 (zh) | 数据处理装置、方法、芯片、计算机设备及存储介质 | |
EP1936492A1 (en) | SIMD processor with reduction unit | |
Louwers et al. | Multi-granular arithmetic in a coarse-grain reconfigurable architecture | |
GB2379759A (en) | Method and circuit for alignment of floating point significands by right shifting or setting to zero of a second register | |
WO2008077803A1 (en) | Simd processor with reduction unit | |
WO2024144950A1 (en) | Multi-modal systolic array for matrix multiplication | |
CN115016762A (zh) | 用于执行乘积累加运算的运算装置和运算方法 | |
CN113626760A (zh) | 用于对矩阵值灵活求和的设备和方法 | |
BHAVANI et al. | Design of 32-bit Unsigned Multiplier using CSLA, CLAA, CBLA Adders |