JP7046171B2 - 演算装置 - Google Patents

演算装置 Download PDF

Info

Publication number
JP7046171B2
JP7046171B2 JP2020518966A JP2020518966A JP7046171B2 JP 7046171 B2 JP7046171 B2 JP 7046171B2 JP 2020518966 A JP2020518966 A JP 2020518966A JP 2020518966 A JP2020518966 A JP 2020518966A JP 7046171 B2 JP7046171 B2 JP 7046171B2
Authority
JP
Japan
Prior art keywords
processing element
input
neurons
output
data
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
JP2020518966A
Other languages
English (en)
Other versions
JPWO2019220692A1 (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.)
Mitsubishi Electric Corp
Original Assignee
Mitsubishi Electric Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Mitsubishi Electric Corp filed Critical Mitsubishi Electric Corp
Publication of JPWO2019220692A1 publication Critical patent/JPWO2019220692A1/ja
Application granted granted Critical
Publication of JP7046171B2 publication Critical patent/JP7046171B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/38Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
    • G06F7/48Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
    • G06F7/544Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices for evaluating functions by calculation
    • G06F7/5443Sum of products
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • 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
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F17/00Digital computing or data processing equipment or methods, specially adapted for specific functions
    • G06F17/10Complex mathematical operations
    • 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/50Adding; Subtracting
    • 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
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/04Architecture, e.g. interconnection topology
    • G06N3/045Combinations of networks
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/04Architecture, e.g. interconnection topology
    • G06N3/048Activation functions

Landscapes

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

Description

この開示は、演算装置に関し、たとえば、ニューラルネットワークの畳み込み層(コンボリューション層とも称する)における演算を実行するための演算装置に関する。
ニューラルネットワークのアルゴリズムにおいて、層間におけるニューロン同士の結合をスパース化することで、演算量削減による処理の高速化が達成でき、さらに重み係数を保存するためのメモリの省容量化を達成できることが知られている。
しかしながら、ニューロン同士の結合をスパース化しても、既存のニューラルネットワーク専用の演算装置の性能および消費電力は必ずしも改善しない。そこで、非特許文献1では、スパース化したニューラルネットワークの畳み込み層を対象とした推論用の演算装置が提案されている。
具体的にこの文献によれば、演算装置は、バッファコントローラ(BC)と、互いに並列に接続された複数の処理要素(PE:Processing Element)とを備える。出力ニューロン1個分の値の計算は、いずれかの処理要素において実行される。複数の処理要素は並列的かつ非同期的に動作する。
バッファコントローラは、入力データバッファから各処理要素に、各処理要素が必要とする入力データを選択的に供給する。より詳細には、バッファコントローラは、入力データバッファからコピーされた一部のデータを格納する内部記憶領域と、各処理要素に個別に対応し、各々が対応する処理要素へデータ供給を行う複数のインデックスモジュールとを備える。
Shijin Zhang,et al.、"Cambricon-X: An Accelerator for Sparse Neural Networks"、Proceedings of 49th IEEE/ACM International Symposium on Microarchitecture、2016
上記の非特許文献1の構成において、複数の処理要素の個数をn個とする。この場合、バッファコントローラは、n個の処理要素に同時にアクセスするためのn個のポート、もしくは、各処理要素が並列動作するp個の演算器を有している場合には、同時にアクセス可能なn×p個のポートを有する必要がある。
演算装置の処理性能を向上するためには、処理要素の個数nもしくは処理要素内の演算器の個数pを増加させることが有効である。しかしながら、上記の非特許文献1の演算装置の構成では、処理要素の個数n×pに比例してバッファコントローラの内部記憶領域にアクセスするためのポート数が増加する。このようなポート数の増加は、回路面積の増加および動作周波数の低下を伴う。このため、処理要素数nおよび内部の演算器個数pの増加にともなってスケーラブルに演算装置の性能を向上させることができない。
この開示は、上記の問題点を考慮したものであって、その目的の1つは、層間の結合をスパース化したニューラルネットワークの畳み込み層を対象として、処理要素数の増加もしくは処理要素内の演算器数の増加に応じてスケーラブルに性能を向上させることが可能な演算装置を提供することである。
一実施形態の演算装置は、畳み込みニューラルネットワークの畳み込み層における演算のための演算装置である。畳み込み層において、複数の出力ニューロンの各々は複数の入力ニューロンの少なくとも1つと結合される。演算装置は、複数の入力ニューロンの値として入力データを格納する第1のレジスタと、複数のポートと、複数のポートにそれぞれ対応し、対応するポートを介して第1のレジスタにアクセス可能な複数の処理要素群とを備える。各処理要素群は複数の処理要素を含む。各処理要素は、複数の出力ニューロンに少なくとも1つに対応付けられ、対応する出力ニューロンに結合された1つ以上の入力ニューロンの値に対して重み係数を乗算して累加する積和演算を実行する。
上記の実施形態によれば、複数の処理要素を含む処理要素群は、対応するポートを介して前記第1のレジスタにアクセスするように構成されるので、処理要素数の増加もしくは処理要素内の演算器数の増加に応じてスケーラブルに性能を向上させることができる。
スパース化されたニューラルネットワークの構成例を示すブロック図である。 畳み込み層の計算アルゴリズムを示す概念図である。 スパース化したニューラルネットワークにおける畳み込み層の1カーネル範囲の計算アルゴリズムの具体例を示す概念図である。 畳み込み層の計算を行う演算装置の全体構成を示すブロック図である。 畳み込み層の計算アルゴリズムをハードウェアにマッピングした概念図である。 図4の演算装置の処理手順を示すフローチャートである。 図4のデータ分配ユニットの構成例を示すブロック図である。 図4の処理要素群の構成例を示すブロック図である。 図8の処理要素の変形例の構成を示すブロック図である。 図4のデータ収集ユニットの構成例を示すブロック図である。 インデックス列および重み係数列の格納データ作成方法の一例を説明するための図である。 図11のインデックス列メモリおよび重み係数列メモリに格納されるデータの作成手順を示すフローチャートである。 実施の形態2の演算装置におけるデータ収集ユニットの構成例を示すブロック図である。 図13のデータ収集ユニットの変形例を示すブロック図である。 実施の形態2の演算装置の処理手順を示すフローチャートである。 畳み込み層のアルゴリズムの一例を示す概念図である。 図16の畳み込み層の演算アルゴリズムを実現するための処理要素の割り当て例を示す図である。 図17の演算装置の割り当てにおけるデータ分配ユニットのアクセス回数を説明するための図である。 図16の畳み込み層の演算アルゴリズムを実現するための処理要素の他の割り当て例を示す図である。 図19の演算装置の割り当てにおけるデータ分配ユニットのアクセス回数を説明するための図である。 実施の形態3の演算装置の構成例を示すブロック図である。 実施の形態3の演算装置の処理手順を示すフローチャートである。 畳み込み層32のアルゴリズムの一例を示す概念図である。 図23の畳み込み層の演算アルゴリズムを実現するためのハードウェアの割り当て例を示す図である。 図24(A)の演算装置の割り当てにおけるデータ分配ユニットのアクセス回数を説明するための図である。 図24(B)の演算装置の割り当てにおけるデータ分配ユニットのアクセス回数を説明するための図である。 実施の形態4の演算装置の構成およびニューラルネットワークの層間接続を示す図である。 実施の形態4の演算装置の処理手順を示すフローチャートである。
以下、各実施の形態について図面を参照して詳しく説明する。なお、同一または相当する部分には同一の参照符号を付して、その説明を繰り返さない。
実施の形態1.
[ニューラルネットワークの構成例]
図1は、スパース化されたニューラルネットワークの構成例を示すブロック図である。図1を参照して、ニューラルネットワーク30は、複数の畳み込み層32A,32Bおよび複数のプーリング層33A,33Bがニューロンバッファ31A,31B,31C,31D,31Eを介して直列に接続された構造を有している。ニューラルネットワーク30を畳み込みニューラルネットワークとも称する。
各ニューロンバッファ31は、前層の出力データを一時的に格納するため、および/または次層の入力データを一時的に格納するために用いられる。たとえば、ニューロンバッファ31Aは畳み込み層32Aの複数の入力ニューロンに対応する。ニューロンバッファ31Bは畳み込み層32Aの複数の出力ニューロンに対応するともに、プーリング層33Aの複数の入力ニューロンに対応する。
各畳み込み層32は、出力ニューロンごとに結合された1以上の入力ニューロンの値に重み係数を乗算し、乗算結果を相互に加算する。この演算を積和演算と称する。さらに、各畳み込み層32は、積和演算結果にバイアス値を加算してから活性化関数(たとえば、非線形演算)を施す。
図2は、畳み込み層の計算アルゴリズムを示す概念図である。図2では、(A)から(E)の順に計算が進行する。
図2を参照して、入力ニューロン91のうち、畳み込みカーネル90の範囲内のニューロン92を選択し、畳み込みカーネル90との積和演算を行う。ここで、カーネルとは、重み係数行列のことであり、フィルタとも称する。図2の例の場合には、同じ畳み込みカーネル90の範囲の入力ニューロン92(入力データ)に対して、出力チャネルごとに異なるカーネルが適用される。これにより、複数の出力チャネルの個数分の出力ニューロン94の値が計算される。積和演算結果は、出力ニューロン93のうち選択された入力ニューロン92に対応する範囲の出力ニューロン94の値として格納される。
1カーネル範囲の演算が完了したら、畳み込みカーネル90をスライドさせて同様に積和演算を行う。水平方向および垂直方向で全てのスライド分の演算が完了したら、畳み込み層の処理が完了する。
具体的に図2の場合には、まず、水平方向に一定間隔ずつ(図2の場合には1つずつ)畳み込みカーネル90をスライドさせる。左端から右端まで水平方向のスライドが完了したら(図2の(A)~(C))、垂直方向に一定間隔だけ(図2の場合には1つだけ)畳み込みカーネル90を移動させ(図2の(D))、再度左端から右端まで畳み込みカーネル90をスライドさせながら積和演算を実行する。このようにして、水平方向および垂直方向で全てのスライド分の演算が完了するまで(図2(E)となるまで)繰り返し演算を行う。
再び図1を参照して、各プーリング層33は、複数の入力ニューロンの局所領域ごとにひとつの要素にまとめる動作を行うことによって入力データのサイズを小さくするものである。各プーリング層33は、たとえば、局所領域の入力ニューロンの値の最大値をとったり、局所領域の入力ニューロンの値を平均化したりする。
図1に示すように、ニューラルネットワーク終端には、各出力ニューロンが全ての入力ニューロンとの結合を有する全結合層が1つまたは複数層設けられる。
[畳み込み層の構成例]
図3は、スパース化したニューラルネットワークにおける畳み込み層の1カーネル範囲の計算アルゴリズムの具体例を示す概念図である。
図3を参照して、畳み込み層32において、1カーネル範囲ごとに複数の入力ニューロンx0,x1,x2,…と複数の出力ニューロンy0,y1,y2,…とが結合される。具体的に図3の場合、出力ニューロンy0,y1,y2の値を求めるために、次式(1A)~(1C)に従って積和演算が実行され、その後、次式(2A)~(2C)に従って活性化関数が施される。
0←w0,0・x0+w0,2・x2+w0,5・x5+w0,6・x6+w0,9・x9
+w0,11・x11+w0,12・x12 …(1A)
1←w1,0・x0+w1,5・x5+w1,6・x6+w1,7・x7+w1,9・x9
+w1,10・x10+w1,12・x12 …(1B)
2←w2,0・x0+w2,2・x2+w2,5・x5+w2,7・x7+w2,9・x9
+w2,12・x12+w2,15・x15 …(1C)
0←f0(y0) …(2A)
1←f1(y1) …(2B)
2←f2(y2) …(2C)
上式(1A)~(1C)において、wi,j(0≦i≦2,0≦j≦15)は重み係数を示す。y0,y1,y2にそれぞれバイアス値を加算してもよい。上式(2A)~(2C)において、f0,f1,f2は活性化関数を示す。
上式(1A)~(1C)の積和演算は、入力ニューロンx0,x1,…,x15から積和演算に必要な要素を取り出す第1段階と、第1段階で取り出した要素に対して対応する重み係数を乗算する第2段階と、乗算結果を相互に加算する第3段階に分けることができる。
第1段階において、積和演算に必要な要素に対応する値を“1”とし、積和演算に不要な要素に対応する値を“0”として、入力ニューロンx0,x1,…,x15のインデックス番号の順番に並べたものを「使用ビット列」と称することにする。上式(1A)の場合の使用ビット列は、(1,0,1,0,0,1,1,0,0,1,0,1,1,0,0,0)である。上式(1B)の場合の使用ビット列は、(1,0,0,0,0,1,1,1,0,1,1,0,1,0,0,0)である。上式(1C)の場合の使用ビット列は、(1,0,1,0,0,1,0,1,0,1,0,0,1,0,0,1)である。
[演算装置の全体構成]
図4は、畳み込み層の計算を行う演算装置の全体構成を示すブロック図である。なお、図4では、図3で説明した入力側のニューロンバッファ31および出力側のニューロンバッファ31をそれぞれ入力データバッファおよび出力データバッファとして演算装置の構成に含めている。
図4を参照して、演算装置39は、N個の処理要素群(GPE0~GPEN-1、GPE:Grouped Processing Element)42と、入力データバッファ(NBin)40と、データ分配ユニット(DSU:Data Scatter Unit)41と、データ収集ユニット(DGU:Data Gather Unit)44と、出力データバッファ(NBout)45とを含む。
各処理要素群(GPE)42は、複数の処理要素43(PE:Processing Element)を含む。各処理要素(PE)43は、出力ニューロン単位での積和演算を行う。具体的に図4の例では、各処理要素群42は、M個の処理要素(PE)43を含む。具体的に、第i番目(0≦i≦N-1)の処理要素群42(GPEi)は、PEi,0,PEi,1,…PEi,M-1のM個の処理要素43を含む。
入力データバッファ(NBin)40は、前層の演算結果を本層の各入力ニューロンの値として格納する。
データ分配ユニット(DSU)41は、入力データバッファ40の一部のデータを保持し、各処理要素群(GPE)42からのアクセス要求を受け付ける。アクセス要求されたデータ(すなわち、入力ニューロンの値)は、要求元の処理要素群(GPE)42に転送される。
データ収集ユニット(DGU)44は、各処理要素(PE)43の演算結果を収集し、収集した各演算結果に活性化関数を施し、さらに整列および同期を行う。
出力データバッファ(NBout)45は、本層の演算結果を、各出力ニューロンの値として格納する。
[1カーネル範囲の計算アルゴリズムのハードウェアへのマッピング]
図5は、畳み込み層の1カーネル範囲の計算アルゴリズムをハードウェアにマッピングした概念図である。
図4で説明したように、データ分配ユニット(DSU)41は、入力ニューロン91のうち、1つの畳み込みカーネル90の範囲内の入力ニューロン92の値を内蔵レジスタ(図7のデータ分配レジスタ(DSR)50に対応する)にコピーする。そして、基本的には、1カーネル範囲の出力ニューロン94の各々に対して、1つの処理要素(PE)43が対応付けられる。
ここで、図5に示すように、1カーネル範囲の出力ニューロン94の数が、処理要素(PE)43の総数より多い場合は、演算装置39は、1カーネル範囲の出力ニューロン94を複数のターンに分割する。そして、ターンごとに各出力ニューロンに対して1つの処理要素(PE)43が対応付けられ、各処理要素(PE)43において対応する出力ニューロンの積和演算が実行される。したがって、各処理要素(PE)43は、ターンごとに異なる出力ニューロンの演算を行うことになる。
各処理要素(PE)43の演算結果は、データ収集ユニット(DGU)44の内蔵レジスタ(図10のデータ収集レジスタ(DGR)71に対応する)に一時的に格納される。データ収集ユニット(DGU)44は、1カーネル範囲の出力ニューロン94に対応する積和演算が全て完了したら、データをデータ収集レジスタ(DGR)71から出力データバッファ(NBout)45に移す。
図2で説明したように、上記の処理は、畳み込みカーネル90をスライドさせながら繰り返し実行される。以下、図5の場合について具体的に説明する。
図5を参照して、演算装置39は、処理要素群(GPE)42として2個の処理要素群GPE0およびGPE1を有する。各処理要素群(GPE)42は、処理要素(PE)43としてM個の処理要素PE0~PEM-1を有する。したがって、演算装置39全体で、2×M個の処理要素(PE)43が設けられている。ここで、1カーネル範囲の出力ニューロン94の数が処理要素(PE)43の数である2×Mよりも大きい場合には、図5(B)に示すように、2×M個の出力ニューロンごとに、処理要素(PE)43へのマッピング(対応付け)が行われる。したがって、図5(A)に示すように、1カーネル範囲の出力ニューロン94は、2×M個ごとのターン0、ターン1、…に分割される。
[演算装置の処理手順]
図6は、図4の演算装置の処理手順を示すフローチャートである。
図4および図6を参照して、まず、ステップS102において、データ分配ユニット(DSU)41は、1カーネル範囲の畳み込み演算に必要なデータを入力データバッファ(NBin)40から取り込む。すなわち、1カーネル分の畳み込み演算に必要なデータが、入力データバッファ(NBin)40からデータ分配ユニット(DSU)41にコピーされる。
前述のように、畳み込みカーネルとは、重み係数行列のことであり、フィルタとも称する。ニューラルネットワークの畳み込み層の演算では、畳み込みカーネルをスライドさせながら入力データに対して適用する。
次のステップS106において、演算装置39は、各処理要素群(GPE)42および各処理要素(PE)43にターン番号を指示する。1カーネル範囲の出力ニューロン94の数が、処理要素(PE)43の総数以下の場合は、ターン番号の通知は1回のみである(たとえば、ターン番号として0番を通知する)。1カーネル範囲の出力ニューロン94の数が、処理要素(PE)43の総数より多い場合は、1カーネル範囲の出力ニューロン94に応じて、演算装置39は、各ターンの出力ニューロンに対応する積和演算を実行する際にターン番号(0,1,2,…)を通知する。
次のステップS110において、各処理要素群(GPE)42は、互いに並行してデータ分配ユニット(DSU)41にアクセスすることにより、データ分配ユニット(DSU)41から必要なデータを読み出す。なお、アクセスする入力ニューロンのインデックスの値は、ターンごとに異なる。
その次のステップS120において、処理要素群(GPE)42は、自らに含まれる各処理要素(PE)43に対して、読出したデータを分配する。
その次のステップS130において、各処理要素(PE)43は、分配されたデータに対応する重み係数を乗算し、乗算結果を内部レジスタに累加する。なお、重み係数の値はターンごとに異なる。
以上のステップS110,S120,S130は、処理要素群(GPE)42ごとに並行して実行される。さらに各処理要素群(GPE)42では、各処理要素(PE)43での積和演算が完了するまで(ステップS140でYES)、上記のステップS110からS130までが繰り返して実行される。また、積和演算の結果に対して、バイアス値を累加してもよい。各処理要素(PE)43の積和演算の最終的な結果は、データ収集ユニット(DGU)44に転送される。
次のステップS150において、データ収集ユニット(DGU)44は、各処理要素(PE)43の積和演算結果に対して活性化関数を適用する。さらに、その次のステップS160においてデータ収集ユニット(DGU)44は、内蔵レジスタ(すなわち、図10のデータ収集レジスタ(DGR)71)に各処理要素(PE)43に対する活性化関数の演算結果を格納して、全処理要素(PE)43の演算完了を待つ。これにより、各処理要素群(GPE)42での演算完了結果を次層に出力するタイミングを同期させることができる。
なお、1カーネル範囲の出力ニューロン94が複数のターンに分割される場合、全ターンの畳み込み演算が完了するまで(すなわち、ステップS164でYESとなるまで)、上記のステップS106からの各ステップが繰り返される。この場合、データ収集ユニット(DGU)44は、データ収集レジスタ(DGR)71にターンごとの演算結果を格納し、全ターンでの各処理要素(PE)43での演算が完了するまで待つ。
その次のステップS170においてデータ収集ユニット(DGU)44は、内蔵レジスタから出力データバッファ(NBout)45にデータを出力する。上記のステップS10からステップS170までの手順は、畳み込みカーネル90をスライドさせながら全カーネルについて畳み込み演算が完了するまで(ステップS180でYESとなるまで)繰り返される。
[データ分配ユニットの構成例]
図7は、図4のデータ分配ユニットの構成例を示すブロック図である。
図7を参照して、データ分配ユニット(DSU)41は、第1のレジスタとしてのデータ分配レジスタ(DSR:Data Scatter Register)50と、N個の処理要素群(GPE)42にそれぞれ対応するN個のポート(P0,P1,…PN-1)51とを含む。
データ分配レジスタ(DSR)50は、入力データバッファ(NBin)40の一部のデータを保持する。各ポート51は、対応する処理要素群(GPE)42からのアクセス要求を受け付ける。各ポート51は、アクセスが要求されたデータ(入力ニューロンの値)を、データ分配レジスタ(DSR)50から取り出して、対応する処理要素群(GPE)42に転送する。
このように、データ分配ユニット(DSU)41では、処理要素(PE)の単位でのアクセスポートは用意されていない。処理要素群(GPE)の単位でデータ分配レジスタ(DSR)50にアクセス可能に構成することによって、処理要素(PE)43の数の増加に対するポート51の数の増加を抑制することができる。
[処理要素群の構成例]
図8は、図4の処理要素群の構成例を示すブロック図である。
図8を参照して、各処理要素群(GPE)42は、複数(図8の場合、M個)の処理要素(PE)43と、インデックス列を保持する第1のメモリ(以下、インデックス列メモリ60と総称する)とを含む。ここで、インデックス列とは、当該処理要素群(GPE)42に含まれる各処理要素(PE)43での演算に必要な入力ニューロンのインデックス番号列を意味する(具体例は図11、図12で説明する)。図8の場合、処理要素群GPE0,GPE1,…,GPEN-1は、対応するインデックス列メモリ60内にインデックス列Idx0,Idx1,…,IdxN-1をそれぞれ格納する。なお、ターンごとにインデックス列は異なるので、データ分配ユニット(DSU)41から通知されたターン番号に対応するインデックス列が、インデックス列メモリ60から取りされる。
各処理要素(PE)43は、出力ニューロン単位の積和演算に用いる重み係数を保持する第2のメモリ(以下、重み係数列メモリ61と総称する)と、積和演算器62とを含む。図8の処理要素群GPE0において、処理要素PE0,0,PE0,1,…,PE0,M-1は、対応する重み係数列メモリ61内に重み係数列W0,0,W0,1,…,W0,M-1をそれぞれ格納する。他の処理要素群42についても同様である。なお、ターンごとに重み係数列は異なるので、データ分配ユニット(DSU)41から通知されたターン番号に対応する重み係数列が、重み係数列メモリ61から取り出される。
具体的に図8に示す構成では、インデックス列メモリ60および重み係数列メモリ61は、ターン数に応じたバンクを有する。インデックス列メモリ60および重み係数列メモリ61に対して、ターン毎に異なるバンクを参照することで、1カーネル範囲の出力ニューロン数が、処理要素数より多い場合にも対応できる。
重み係数列メモリ61に格納されている重み係数は、インデックス列メモリ60に格納されているインデックス番号に対応づけられている。インデックス列メモリ60に格納された特定のインデックス番号を指示するためにポインタ63が用いられ、重み係数列メモリ61に格納された特定の重み係数を指示するためにポインタ64が用いられる。
各処理要素群(GPE)42は、インデックス列メモリ60から、ポインタ63によって指示されているインデックス番号を取り出し、データ分配ユニット(DSU)41に当該インデックス番号に対応するデータ(すなわち、入力ニューロンの値)を要求する。そして、各処理要素群(GPE)42は、データ分配ユニット(DSU)41から得られたデータdataを、内蔵する各処理要素(PE)43に分配する。各処理要素(PE)43は、重み係数列メモリ61から、ポインタ64によって指示されている重み係数値を取り出し、分配されたデータに重み係数を乗算し、乗算結果を累加する。
ポインタ63が指示する要素が順番に切り替わることによって、インデックス列メモリ60の各要素に対して、同様の操作が行われる。この結果、活性化演算前の各処理要素(PE)43の出力値(すなわち、各出力ニューロンの値)が計算される。
各積和演算器62は、乗算器65と、加算器66と、フリップフロップ(FF:Flip Flop)67とを含む。乗算器65は、データ分配ユニット(DSU)41から得られたデータdataと、メモリ61から取り出された重み係数とを乗算する。加算器66は、フリップフロップ67に保持されたデータと乗算器65の乗算結果とを加算し、加算結果をフリップフロップ67に保持する。これによって乗算器65の乗算結果が累加される。
図9は、図8の処理要素の変形例の構成を示すブロック図である。図9では、代表的に処理要素PE0,0の構成のみ示しているが、他の処理要素(PE)43の構成も同様である。
図9の処理要素(PE)43では、積和演算器62Aの構成が図8の積和演算器62と異なる。具体的に、図9の積和演算器62Aは、複数の乗算器65と複数の加算器66とを含む。複数の乗算器65は積和演算器62Aの初段に配置される。第2段目以降に複数の加算器66がツリー状に配置される。各加算器66は、前段の2個の演算器(乗算器65または加算器66)に対応し、対応する2個の演算器の演算結果を加算する。したがって、最終段の1個の加算器66によって、複数の乗算器65の全出力の加算結果が得られる。
各処理要素群(GPE)42は、複数の乗算器65の個数分のインデックス番号に対応するデータDATAを、同時にデータ分配ユニット(DSU)41に要求する。これら複数のインデックス番号に対応するデータDATAが各処理要素(PE)43に分配される。各処理要素(PE)43において、複数の乗算器65は、取り出されたデータDATA(すなわち、複数の入力ニューロンの値)とそれぞれ対応する重み係数とを乗算する。
上記のような構成とすることによって、各処理要素(PE)43内の演算器の並列数を増加させることができる。
図8で説明したインデックス列メモリ60および重み係数列メモリ61をROM(Read Only Memory)として構成し、製造時に固定値を格納するようにしてもよい。もしくは、これらのメモリ60,61をRAM(Random Access Memory)として構成し、制御バス等を介して外部から保持内容を変更可能にしてもよい。
[データ収集ユニットの構成例]
図10は、図4のデータ収集ユニットの構成例を示すブロック図である。
図10を参照して、データ収集ユニット(DGU)44は、各処理要素(PE)43に個別に対応する複数の活性化器(ACT:Activator)70と、第2のレジスタとしてのデータ収集レジスタ(DGR:Data Gather Register)71とを含む。
活性化器(ACT)70は、対応する処理要素(PE)43から出力された積和演算結果に対して活性化関数を施す。データ収集レジスタ(DGR)71は、全ての処理要素群(GPE)42での積和演算と積和演算結果に対する活性化関数の適用が完了するまで、演算結果を一時的に保持する。全ての演算が完了した時点で、データ収集ユニット(DGU)44は、演算結果を出力データバッファ(NBout)45に同時に書き込む。
[インデックス列および重み係数列の作成方法]
次に、図8で説明したインデックス列メモリ60および重み係数列メモリ61の各々に格納されるデータであるインデックス列および重み係数列の作成方法について説明する。具体例として、図3の出力ニューロンy0,y1,y2が、共通の処理要素群(GPEn)42に含まれる3個の処理要素(PEn,0,PEn,1,PEn,2)43にそれぞれ割り当てられた場合について説明する。
図11は、インデックス列および重み係数列の格納データ作成方法の一例を説明するための図である。図12は、図11のインデックス列メモリおよび重み係数列メモリに格納されるデータの作成手順を示すフローチャートである。図12の各ステップは、コンピュータによって実行することができる。
図11(A)を参照して、まず、出力ニューロンy0,y1,y2ごとに積和演算に使用する入力ニューロン(すなわち、インデックス番号)を示す使用ビット列idxn,0,idxn,1,idxn,2が与えられているとする。ここで、「使用ビット列」とは、積和演算に必要な入力ニューロンに対応する値を“1”とし、積和演算に不要な入力ニューロンに対応する値を“0”として、入力ニューロンx0,x1,…,x15のインデックス番号の順番に並べたものである。
図11(B)を参照して、コンピュータは、上記の使用ビット列idxn,0,idxn,1,idxn,2について、入力ニューロンx0,x1,…,x15のインデックス番号ごとに論理和演算を行う(図12のステップS200)。
図11(C)を参照して、コンピュータは、ステップS200の論理和演算結果Uidxn,iにおいて、ビット値が1となるインデックス番号のみを取り出すことにより、処理要素群(GPEn)42のインデックス列メモリ60に格納されるインデックス列Idxnを生成する(ステップS210)。
次に、図11(D)を参照して、出力ニューロンy0,y1,y2に対応する重み係数列が与えられているとする。ここで、図11(D)に示すように、コンピュータは、積和演算に使用しない(すなわち、対応する処理要素(PE)43がアクセスしない)入力ニューロンに対応する重み係数を0にする(ステップS220)。図11(D)において、0以外の重み係数が与えられている部分は空欄で示されている。
次に、図11(E)を参照して、コンピュータは、図11(C)に示すインデックス列Idxnに示されたインデックス番号での重み係数を取り出す。これによって、出力ニューロンy0,y1,y2にそれぞれ対応する処理要素PEn,0,PEn,1,PEn,2での重み係数列メモリ61に格納すべき重み係数列Wn,0,Wn,1,Wn,2が生成される(ステップS220)。なお、図11(E)においても、積和演算に使用しない重み係数を0とし、0以外の重み係数が与えられている部分は空欄で示されている。
[実施の形態1の効果]
上記のとおり、実施の形態1のニューラルネットワーク演算装置によれば、複数の処理要素(PE)43を1単位として処理要素群(GPE)42が構成される。処理要素群(GPE)42は、入力データを格納するデータ分配ユニット(DSU)41に設けられたデータ分配レジスタ(DSR)50に対して並列でアクセス可能である。このため、データ分配ユニット(DSU)41には、処理要素(PE)43ごとでなく、処理要素群(GPE)42ごとに個別にアクセスポートが設けられている。この結果、処理要素(PE)43の個数および各処理要素(PE)43に設けられた演算器の個数を増加させた場合には、アクセスポート数の増加を抑制することができるので、アクセスポート数に比例する回路面積の増加を抑制するとともに、動作周波数を低下させることなく、演算装置の処理性能を高めることができる。
実施の形態2.
実施の形態1のハードウェア構成では、同一の処理要素群(GPE)42に割り当てられた複数の出力ニューロンについて、入力データの共有率が高いほど、データ分配ユニット(DSU)41に対するアクセス要求回数が削減され、処理時間を短くできる。
たとえば、図11(C)に示すインデックス列Idxnのビット長が短いほど、データ分配ユニット(DSU)41に対するアクセス回数は減少する。そして、インデックス列Idxnのビット長を短くするためには、図11(A)に示す使用ビット列idxn,0,idxn,1,idxn,2においてビット1が現れる位置をできるだけ同じにする必要がある。すなわち、入力データの共有率が高いほど、データ分配ユニット(DSU)41に対するアクセス回数を削減することができる。
そこで、実施の形態2の演算装置では、同一層内の出力ニューロンを任意の位置の処理要素(PE)43に割り当て可能にすることで、ニューラルネットワークのアルゴリズムの特性(すなわち、入力ニューロンと出力ニューロンの結合のされ方)に応じて処理速度の高速化を実現することができる。以下、図面を参照して具体的に説明する。
[データ収集ユニットの構成例]
図13は、実施の形態2の演算装置におけるデータ収集ユニットの構成例を示すブロック図である。図13のデータ収集ユニット(DGU)44Aは、切替えスイッチ72をさらに含む点で図10のデータ収集ユニット(DGU)44と異なる。
前述のように、実施の形態2の演算装置では、出力ニューロンのインデックス番号の順番とは異なる順番で各出力ニューロンが各処理要素(PE)43に割り当てられている。すなわち、ニューラルネットワークアルゴリズムで想定された演算順番とは異なる順番で、出力ニューロンが処理要素(PE)43に割り当てられている。そこで、切替えスイッチ72は、複数の活性化器(ACT)70から出力される演算結果を、元のインデックスの順番に並び替える。並び替えられた演算結果は、データ収集レジスタ(DGR)71に保管される。切替えスイッチ72としてたとえばクロスバスイッチなど、任意の順番に接続を切替え可能なスイッチが用いられる。
図13のその他の点は図10の場合と同様であるので、同一または相当する部分には同一の参照符号を付して説明を繰り返さない。
図14は、図13のデータ収集ユニットの変形例を示すブロック図である。図14のデータ収集ユニット(DGU)44Bは、切替えスイッチ72に代えて、複数の活性化器(ACT)70の出力とデータ収集レジスタ(DGR)71の複数の記憶領域とを接続するための接続部73を含む点で図13のデータ収集ユニット(DGU)44Aと異なる。
図13のデータ収集ユニット(DGU)44Aに設けられた切替えスイッチ72の場合には、複数の活性化器(ACT)70の出力とデータ収集レジスタ(DGR)71の複数の記憶領域との間の接続は、動的に変化させることができる。これに対して、学習済みのニューラルネットワークの演算装置のように、ニューラルネットワークアルゴリズムを変化させる必要がない場合には、出力ニューロンの処理要素(PE)43への割り当てを設計時に固定することができる。この場合、図14に接続部73として示すように、複数の活性化器(ACT)70の出力とデータ収集レジスタ(DGR)71の複数の記憶領域との間の接続関係は、設計時に設定され、その後変化しない。
図14のその他の構成は図13の場合と同様であるので、同一または相当する部分には同一の参照符号を付して説明を繰り返さない。
[演算装置の動作]
図15は、実施の形態2の演算装置の処理手順を示すフローチャートである。図15のフローチャートは、ステップS150とS160との間にステップS155を含む点で図6のフローチャートと異なる。
ステップS155において、図1の切替えスイッチ72は、複数の活性化器(ACT)70から出力される演算結果の順番を元のアルゴリズムの順番に並び替えてデータ収集レジスタ(DGR)71に保管する。図1のその他の点は図6の場合と同様であるので、同一または相当するステップには同一の参照符号を付して説明を繰り返さない。
[データ処理の具体例]
以下、具体例を挙げて実施の形態2の効果について説明する。
図16は、畳み込み層のアルゴリズムの一例を示す概念図である。図16を参照して、畳み込み層32は、15個の入力ニューロンx0~x14と、4つの出力ニューロンy0~y3とを有する。各出力ニューロンには、入力ニューロンx0~x14の一部のみが結合している。
具体的に図16の場合、出力ニューロンy0,y1,y2,y3の値を求めるために、次式(3A)~(3D)に従って積和演算が実行され、その後、活性化関数が施される。
0←w0,6・x6+w0,9・x9+w0,11・x11+w0,12・x12+w0,13・x13
+w0,14・x14 …(3A)
1←w1,1・x1+w1,2・x2+w1,4・x4+w1,8・x8+w1,9・x9
+w1,11・x11 …(3B)
2←w2,4・x4+w2,5・x5+w2,6・x6+w2,9・x9+w2,11・x11
+w2,12・x12+w2,14・x14 …(3C)
3←w3,2・x2+w3,3・x3+w3,4・x4+w3,7・x7+w3,8・x8
+w3,9・x9 …(3D)
上式(3A)~(3D)において、wi,j(0≦i≦3,0≦j≦15)は重み係数を示す。y0,y1,y2,y3にそれぞれバイアス値を加算してもよい。
以下、2個の処理要素群(GPE0,GPE1)42を有し、各処理要素群42が2個の処理要素(GPE0に対してPE0,0,PE0,1;GPE1に対してPE1,0,PE1,1)43を有するハードウェア構成の演算装置に対して、図16に示す4個の出力ニューロンを割り当てた例について説明する。
図17は、図16の畳み込み層の演算アルゴリズムを実現するための処理要素の割り当て例を示す図である。図17の例では、出力ニューロンy0,y1,y2,y3は、その順序を変えずに(すなわち、インデックス番号の順番で)処理要素PE0,0,PE0,1,PE1,0,PE1,1にそれぞれ割り当てられる。したがって、データ収集ユニット(DGU)44に設けられた切替えスイッチ72は、演算結果を、その出力順序を変えずにそのまま出力する。
図18は、図17の演算装置の割り当てにおけるデータ分配ユニットのアクセス回数を説明するための図である。
図18(A)では、処理要素PE0,0がアクセスする入力ニューロンを表す使用ビット列と、処理要素PE0,1がアクセスする入力ニューロンを表す使用ビット列とが示されている。さらに、図18(A)では、上記の使用ビット列のビットごとの論理和演算結果、すなわち、処理要素群GPE0全体がアクセスする入力ニューロンを表す使用ビット列が示されている。図18(A)で、ビットの値が0で表示されている部分はアクセス不要な入力ニューロンを表す。したがって、処理要素群GPE0全体でのデータ分配ユニット(DSU)41へのアクセス回数(図18で「DSU access」と称する)は10回である。
図18(B)では、処理要素PE1,0がアクセスする入力ニューロンを表す使用ビット列と、処理要素PE1,1がアクセスする入力ニューロンを表す使用ビット列とが示されている。さらに、図18(B)では、上記の使用ビット列のビットごとの論理和演算結果、すなわち、処理要素群GPE1全体がアクセスする入力ニューロンを表す使用ビット列が示されている。図18(B)で、ビットの値が0で表示されている部分はアクセス不要な入力ニューロンを表す。したがって、処理要素群GPE1全体でのデータ分配ユニット(DSU)41へのアクセス回数は11回である。
以上により、図17の処理要素の割り当ての場合には、処理要素群GPE0およびGPE1の両方でのデータ分配ユニット(DSU)41へのアクセス回数は11回である。
図19は、図16の畳み込み層の演算アルゴリズムを実現するための処理要素の他の割り当て例を示す図である。図19の例では、出力ニューロンy0,y1,y2,y3は、その順序をy0,y2,y1,y3に変えて処理要素PE0,0,PE0,1,PE1,0,PE1,1にそれぞれ割り当てられる。したがって、データ収集ユニット(DGU)44の切替えスイッチ72では、演算結果の出力順序を元に戻す操作が必要になる。
図20は、図19の演算装置の割り当てにおけるデータ分配ユニットのアクセス回数を説明するための図である。
図20(A)では、処理要素PE0,0がアクセスする入力ニューロンを表す使用ビット列と、処理要素PE0,1がアクセスする入力ニューロンを表す使用ビット列とが示されている。さらに、図20(A)では、上記の使用ビット列のビットごとの論理和演算結果、すなわち、処理要素群GPE0全体がアクセスする入力ニューロンを表す使用ビット列が示されている。図20(A)で、ビットの値が0で表示されている部分はアクセス不要な入力ニューロンを表す。したがって、処理要素群GPE0全体でのデータ分配ユニット(DSU)41へのアクセス回数は7回である。
図20(B)では、処理要素PE1,0がアクセスする入力ニューロンを表す使用ビット列と、処理要素PE1,1がアクセスする入力ニューロンを表す使用ビット列とが示されている。さらに、図20(B)では、上記の使用ビット列のビットごとの論理和演算結果、すなわち、処理要素群GPE1全体がアクセスする入力ニューロンを表す使用ビット列が示されている。図20(B)で、ビットの値が0で表示されている部分はアクセス不要な入力ニューロンを表す。したがって、処理要素群GPE1全体でのデータ分配ユニット(DSU)41へのアクセス回数は8回である。
以上により、図19の処理要素の割り当ての場合には、処理要素群GPE0およびGPE1の両方でのデータ分配ユニット(DSU)41へのアクセス回数は8回である。したがって、図17に示す処理要素の割り当ての場合に比べてデータ分配ユニット(DSU)41へのアクセス回数が抑制され、処理速度が高速化されていることがわかる。
[実施の形態2の効果]
上記のとおり、実施の形態2の演算装置によれば、ニューラルネットワークアルゴリズムで規定された出力ニューロンのインデックス番号の順番によらず、出力ニューロンを適切な処理要素(PE)43に割り当てる。これによって、入力データの共有率の高い出力ニューロン同士を同じ処理要素群(GPE)42に属する複数の処理要素(PE)43に割り当てることができるので、処理要素群(GPE)42からデータ分配ユニット(DSU)41へのアクセス回数を減らすことができる。結果として、演算装置の処理性能を高めることができる。
実施の形態3.
実施の形態2の演算装置では、同一層内の出力ニューロン93を任意の処理要素(PE)43に割り当て可能にすることで、各処理要素(PE)43がアクセスする入力データの共有率を高め、これにより処理時間を短くすることができた。ただし、実施の形態2の演算装置の場合には、あるスライド位置での畳み込みカーネル90の範囲内の入力ニューロンの値のみが、入力データとしてデータ分配ユニット(DSU)41に取り込まれ、これらの入力ニューロンに対応する出力ニューロンが複数の処理要素(PE)43へ割り当てられる。このように入力ニューロンの範囲が制限されているために、入力データの共有率にも上限がある。
実施の形態3の演算装置では、入力ニューロン91に対して畳み込みカーネル90をスライドさせて畳み込み演算を行う際に、スライド位置の異なる複数の畳み込みカーネル90に対応する入力ニューロンの値が、入力データとしてデータ分配ユニット(DSU)41に同時に格納される。そして、これらの入力ニューロンに対応する出力ニューロンが、複数の処理要素(PE)43への割り当ての対象になる。これによって、実施の形態2の場合に比べて、入力データの共有率を高め、処理時間を短くすることができる。以下、図面を参照して具体的に説明する。
[実施の形態3の演算装置の構成]
図21は、実施の形態3の演算装置の構成例を示すブロック図である。図21に示す実施の形態3の演算装置では、データ分配ユニット(DSU)41の機能が図7で説明した実施の形態1および2の場合と異なり、データ収集ユニット(DGU)44の構成および機能が、図13および図14で説明した実施の形態2の場合と異なる。図21のその他の点は、実施の形態1,2の場合と同様であるので、同一または相当する部分に同一の参照符号を付して説明を繰り返さない。
図21を参照して、データ分配ユニット(DSU)41は、第1のレジスタとしてのデータ分配レジスタ(DSR:Data Scatter Register)50と、N個の処理要素群(GPE)42にそれぞれ対応するN個のポート(P0,P1,…PN-1)51とを含む。
ここで、実施の形態3の場合には、図21のデータ分配レジスタ(DSR)50は、第1から第αまでのα個のカーネルに対応する範囲の入力ニューロンの値が畳み込み演算に必要な入力データとして格納できるように構成される。この点で、実施の形態3のデータ分配レジスタ(DSR)50は、実施の形態1および2の演算装置におけるデータ分配レジスタ(DSR)50と異なる。対応する処理要素群(GPE)42には、これらのα個のカーネルに対応する範囲の入力データが転送可能である。
さらに、図21のデータ収集ユニット(DGU)44は、各処理要素(PE)43に個別に対応する複数の活性化器(ACT)70と、切替えスイッチ72または接続部73と、第2のレジスタとしてのデータ収集レジスタ(DGR)71とを含む。
切替えスイッチ72は、図13の場合と同様に、複数の活性化器(ACT)70から出力された演算結果を、元のインデックス順に並び替えてデータ収集レジスタ(DGR)71に転送する。切替えスイッチ72は、たとえば、ターン番号ごとに処理要素(PE)43との対応関係を変化させることができる。
また、図14で説明したように、切替えスイッチ72に代えて、複数の活性化器(ACT)70の出力とデータ収集レジスタ(DGR)71の複数の記憶領域とを接続するための配線群である接続部73を含むように構成してもよい。接続部73を構成する配線群の接続関係は、設計されたままで変化しない。
データ収集レジスタ(DGR)71は、α個のカーネルにそれぞれ対応する複数のサブレジスタ(DGR~DGRα)に区分される。これによって、データ収集レジスタ(DGR)71は、第1から第αまでのα個のカーネルにそれぞれ対応する出力データを同時に保持することができる。データ収集レジスタ(DGR)71は、これらα個のカーネルに対応する範囲の入力ニューロンの畳み込み演算が完了した時点で、格納している演算結果を出力データバッファ(NBout)45に出力する。
[演算装置の動作]
図22は、実施の形態3の演算装置の処理手順を示すフローチャートである。図22のフローチャートは、ステップS102,S164,S170の処理内容が、ステップS102A,S164A,S170Aに変更される点で、図15フローチャートとは異なる。図22のその他の処理ステップは、図15の場合と同様であるので、同一または相当するステップには同一の参照符号を付して説明を繰り返さない。
具体的に、ステップS102Aにおいて、データ分配ユニット(DSU)41は、第1から第αのα個のカーネル範囲の畳み込み演算に必要なデータを入力データバッファ(NBin)40から取り込む。すなわち、α個のカーネル分の畳み込み演算に必要なデータが、入力データバッファ(NBin)40からデータ分配ユニット(DSU)41にコピーされる。
その後の畳み込み演算は、α個のカーネル分の畳み込み演算が完了するまで繰り返される。すなわち、ステップS106からS160までの手順は、ステップS164AでYESとなるまで繰り返される。
ステップS170Aにおいて、データ収集ユニット(DGU)44は、内蔵するデータ収集レジスタ(DGR)71から出力データバッファ(NBout)45に、α個のカーネル範囲の畳み込み演算結果を表す出力データを出力する。
[データ処理の具体例]
以下、具体的を挙げて実施の形態3の効果について説明する。
図23は、畳み込み層32のアルゴリズムの一例を示す概念図である。図23を参照して、畳み込み層32は、20個の入力ニューロンx0~x19と、4つの出力ニューロンy0,0~y1,1とを有する。各出力ニューロンには、入力ニューロン91の一部のみが結合している。
図23に示すように、入力ニューロンx0~x15が第1カーネルに対応しており、第1カーネルの範囲内の入力ニューロンx0~x15の畳み込み演算結果が出力ニューロンy0,0およびy0,1に出力される。入力ニューロンx4~x19が第2カーネルに対応しており、第2カーネルの範囲内の入力ニューロンx4~x19の畳み込み演算結果が出力ニューロンy1,0およびy1,1に出力される。
具体的に出力ニューロンy0,0~y1,1の値を求めるために、次式(4A)~(4D)に従って積和演算が実行され、その後、活性化関数が施される。
0,0←w0,4・x4+w0,5・x5+w0,6・x6+w0,13・x13+w0,14・x14 …(4A)
0,1←w1,0・x0+w1,2・x2+w1,3・x3+w1,9・x9+w1,10・x10
+w1,11・x11+w1,12・x12 …(4B)
1,0←w0,4・x8+w0,5・x9+w0,6・x10+w0,13・x17+w0,14・x18 …(4C)
1,1←w1,0・x4+w1,2・x6+w1,3・x7+w1,9・x13+w1,10・x14
+w1,11・x15+w1,12・x16 …(4D)
上式(4A)~(4D)において、wi,j(0≦i≦1,0≦j≦19)は重み係数を示す。y0,0、y0,1、y1,0、y1,1にそれぞれ、バイアス値を加算してもよい。
以下、1個の処理要素群GPE0を有し、この処理要素群GPE0が2個の処理要素PE0,0,PE0,1を有するハードウェア構成の演算装置に対して、図23に示す4つの出力ニューロンを割り当てた例について説明する。以下に示すように、出力ニューロンの割り当て方により、各処理要素(PE)43がアクセスする入力データの共有率を高めて、処理速度の高速化を実現することができる。
図24は、図23の畳み込み層の演算アルゴリズムを実現するためのハードウェアの割り当て例を示す図である。図24(A)では、出力ニューロンの出力順番を入れ替えない例が示され、図24(B)では、出力ニューロンの出力順番を入れ替えた例が示される。
図24(A)の例では、出力ニューロンy0,0を処理要素PE0,0に割り当て、出力ニューロンy0,1を処理要素PE0,1に割り当てる。さらに、出力ニューロンy1,0を処理要素PE0,0に割り当て、出力ニューロンy1,1を処理要素PE0,1に割り当てる。
最初に、処理要素群(GPE0)42は、出力ニューロンy0,0,y0,1の値を同時に計算する。次に、処理要素群(GPE0)42は、出力ニューロンy1,0,y1,1の値を同時に計算する。
この場合、同時に計算される出力ニューロンの値は、共通の畳み込みカーネル90に対応しているので、その出力順序を変えずにそのまま出力できる。したがって、データ収集ユニット(DGU)44内のデータ収集レジスタ(DGR)71には、2つの出力ニューロン分の記憶領域を割り当てるだけでよい。具体的に、データ収集レジスタ(DGR)71は、第1カーネルに対応する出力ニューロンy0,0,y0,1の値を受信すると、その値をそのまま出力データバッファ(NBout)45に出力する。次に、データ収集レジスタ(DGR)71は、第2カーネルに対応する出力ニューロンy1,0,y1,1の値を受信すると、その値をそのまま出力データバッファ(NBout)45に出力する。
図24(B)の例では、出力ニューロンy1,0を処理要素PE0,0に割り当て、出力ニューロンy0,1を処理要素PE0,1に割り当てる。さらに、出力ニューロンy0,0を処理要素PE0,0に割り当て、出力ニューロンy1,1を処理要素PE0,1に割り当てる。
最初に、処理要素群(GPE0)42は、出力ニューロンy1,0,y0,1の値を同時に計算する。次に、処理要素群(GPE0)42は、出力ニューロンy0,0,y1,1の値を同時に計算する。
この場合、同時に計算される出力ニューロンの値は異なる畳み込みカーネル90に対応しているので、切替えスイッチ72または接続部73によって、出力データの出力順番が入れ替えられる。さらに、データ収集ユニット(DGU)44内のデータ収集レジスタ(DGR)71には、第1カーネルに対応する出力ニューロンy0,0,y0,1の記憶領域および第2カーネルに対応する出力ニューロンy1,0,y1,1の記憶領域、すなわち、4つの出力ニューロンの記憶領域が必要になる。4つの出力ニューロンの値の計算が完了した時点で、データ収集レジスタ(DGR)71から出力データバッファ(NBout)45に出力データが転送される。
図25は、図24(A)の演算装置の割り当てにおけるデータ分配ユニットのアクセス回数を説明するための図である。
図25では、処理要素(PE0,0)がアクセスする入力ニューロン91を表す使用ビット列と処理要素(PE0,1)がアクセスする入力ニューロン91を表す使用ビット列とが示されている。図25(A)は、第1カーネルに対応する出力ニューロンy0,0,y0,1を演算する際の使用ビット列を示し、図25(B)は、第2のカーネルに対応する出力ニューロンy1,0,y1,1を演算する際の使用ビット列を示す。図25(B)の場合には、図25(A)の場合に対して、使用ビット列のインデクッス番号が4つだけシフトしている点に注意されたい。
さらに、図25では、上記の使用ビット列のビットごとの論理和演算結果、すなわち、処理要素群(GPE0)全体がアクセスする入力ニューロン91を表す使用ビット列が示されている。図25に示す論理和演算結果で、ビットの値が0で表示されている部分はアクセス不要な入力ニューロン91を表す。
したがって、図25(A)に示すように、出力ニューロンy0,0,y0,1を演算する際の処理要素群(GPE0)全体でのデータ分配ユニット(DSU)41へのアクセス回数は12回である。図25(B)に示すように、出力ニューロンy1,0,y1,1を演算する際の処理要素群(GPE0)全体でのデータ分配ユニット(DSU)41へのアクセス回数は12回である。したがって、合計のアクセス回数は24回である。
図26は、図24(B)の演算装置の割り当てにおけるデータ分配ユニットのアクセス回数を説明するための図である。
図26では、処理要素(PE0,0)がアクセスする入力ニューロン91を表す使用ビット列と処理要素(PE0,1)がアクセスする入力ニューロン91を表す使用ビット列とが示されている。図26(A)は、出力ニューロンy1,0,y0,1を演算する際の使用ビット列を示し、図26(B)は、出力ニューロンy0,0,y1,1を演算する際の使用ビット列を示す。演算に使用しないインデックス番号の入力ニューロンに対応する部分には、細かいハッチング付されている。
さらに図26では、上記の使用ビット列のビットごとの論理和演算結果、すなわち、処理要素群(GPE0)全体がアクセスする入力ニューロン91を表す使用ビット列が示されている。ここで、演算に使用しないインデックス番号の入力ニューロンに対応する部分(図において、細かいハッチング付されている部分)は、論理値“0”として論理和演算が行われる。図26に示す論理和演算結果で、ビットの値が0で表示されている部分はアクセス不要な入力ニューロン91を表す。
したがって、図26(A)に示すように、出力ニューロンy1,0,y0,1を演算する際の処理要素群(GPE0)全体でのデータ分配ユニット(DSU)41へのアクセス回数は11回である。図26(B)に示すように、出力ニューロンy0,0,y1,1を演算する際の処理要素群(GPE0)全体でのデータ分配ユニット(DSU)41へのアクセス回数は8回である。したがって、合計のアクセス回数は19回である。
以上により、実施の形態3のハードウェア構成を採用し、実施の形態2で説明しているように、出力ニューロンの処理要素(PE)43への最適な割り当てを行うことで、データ分配ユニット(DSU)41へのアクセス回数の削減と処理速度の高速化とが可能なことが示された。
[実施の形態3の効果]
上記のとおり、実施の形態3の演算装置によれば、ニューラルネットワークアルゴリズムにおいて入力ニューロン91に対して畳み込みカーネル90をスライドさせて畳み込み演算を行う際に、スライド位置の異なる複数の畳み込みカーネル90に対応する複数の出力ニューロンが、同時に各処理要素(PE)43に割り当てられる。これによって、入力データの共有率の高い畳み込みカーネルの演算同士を同じ処理要素群(GPE)42に属する複数の処理要素(PE)43に割り当てることができるので、処理要素群(GPE)42からデータ分配ユニット(DSU)41へのアクセス回数を減らすことができる。結果として、演算装置の処理性能を高めることができる。
実施の形態4.
実施の形態4では、ニューラルネットワークの層間でのデータ受け渡しの方法が実施の形態1~3の場合と異なる。これによって、前段の層での処理が完了する前に後段の層での処理を開始できるようにしたものである。以下、図面を参照して説明する。
図27は、実施の形態4の演算装置の構成およびニューラルネットワークの層間接続を示す図である。図27(A)において演算装置の構成例を示し、図27(B)においてニューラルネットワークの層間接続を示す。
図27のニューラルネットワークは、層L0,L1,L2,…境界でのデータの受け渡しのために、ニューロンバッファ31(入力データバッファ(NBin)40および出力データバッファ(NBout)45)に代えて、FIFO(First In, First Out)方式のキュー(入力キュー(FIFOin)80および出力キュー(FIFOout)81)を備える点で実施の形態1,2の場合と異なる。
さらに、図27の演算装置のデータ分配ユニット(DSU)41Aは、さらに、入力キュー(FIFOin)80からの入力データを受信するためのラインバッファ(Line Buffer)82を含む点で、図7に示したデータ分配ユニット(DSU)41と異なる。ラインバッファ82は、入力キュー(FIFOin)80とデータ分配レジスタ(DSR)50との間に接続され、各処理要素群(GPE)42での演算に必要な入力データを格納する。ラインバッファ82に格納された入力データのうち1カーネル範囲の出力ニューロン94での積和演算に必要な入力データが、データ分配レジスタ(DSR)50に転送され、さらに対応する処理要素群(GPE)42に転送される。ラインバッファ82を経由することで、データ分配ユニット(DSU)41Aは、入力キュー(FIFOin)80から与えられる入力データの順番とは異なる順番でデータ分配レジスタ(DSR)50に1カーネル分のデータを格納することができる。
上記の構成によれば、ニューラルネットワークの各畳み込み層は、前段の処理が完了する前であっても、処理要素群(GPE)42での演算に必要な1カーネル分の入力データがそろった段階で、演算処理を開始することができる。これにより、ニューラルネットワークの各層が並行して実行されるので、処理の高速化を図ることができる。
図28は、実施の形態4の演算装置の処理手順を示すフローチャートである。図28のフローチャートは、ステップS10に代えてステップS102,S104が設けられ、ステップS170に代えてステップS172が設けられる点で図6のフローチャートと異なる。
図27、図28を参照して、まず、ステップS102において、入力キュー(FIFOin)80から対応するラインバッファに演算処理後のデータが出力される。次にステップS104において、データ分配ユニット(DSU)41は、必要な入力データが揃った時点でラインバッファからデータ分配レジスタ(DSR)50にデータをコピーする。
次のステップS110において、対応する処理要素群(GPE)42は、データ分配レジスタ(DSR)50にアクセスすることにより、データ分配レジスタ(DSR)50からデータを読み出す。その次のステップS120からステップS164(すなわち、1カーネル範囲の畳み込み演算が完了したか否かを判定するステップ)までの処理は、図6の場合と同様であるので説明を繰り返さない。
データ収集レジスタ(DGR)71に格納されたデータは、1カーネル範囲の出力ニューロンの演算完了を待って(すなわち、ステップS164でYESとなったとき)、出力キュー(FIFOout)81に出力される。上記のステップS104からステップS172(すなわち、データ収集ユニット(DGU)44から出力キュー(FIFOout)81にデータを出力するステップ)までの手順は、全カーネルについて畳み込み演算が完了するまで(ステップS180でYESとなるまで)繰り返される。
以上のとおり、実施の形態4のニューラルネットワーク演算装置によれば、ニューラルネットワークの層間でのデータ受け渡しにキューを用い、前段からキューを介して入力されたデータは、ラインバッファ82を経由してデータ分配レジスタ(DSR)50に転送される。ラインバッファ82を経由することで、データ分配ユニット(DSU)41Aは、キューから与えられる入力データの順番とは異なる順番でデータ分配レジスタ(DSR)50に1カーネル分の入力データを格納することができる。これによって、前段の層での処理が完了する前に後段の層での処理を開始できるので、処理の高速化を図ることができる。
今回開示された実施の形態はすべての点で例示であって制限的なものでないと考えられるべきである。この発明の範囲は上記した説明ではなくて請求の範囲によって示され、請求の範囲と均等の意味および範囲内でのすべての変更が含まれることが意図される。
30 ニューラルネットワーク、31 ニューロンバッファ、32 畳み込み層、33 プーリング層、39 演算装置、40 入力データバッファ(NBin)、41 データ分配ユニット(DSU)、42 処理要素群(GPE)、43 処理要素(PE)、44 データ収集ユニット(DGU)、45 出力データバッファ(NBout)、50 データ分配レジスタ(DSR)、51 ポート、60 インデックス列メモリ、61 重み係数列メモリ、62 積和演算器、63,64 ポインタ、65 乗算器、66 加算器、67 フリップフロップ、70 活性化器(ACT)、71 データ収集レジスタ(DGR)、72 切替えスイッチ、73 接続部、80 入力キュー(FIFOin)、81 出力キュー(FIFOout)、82 ラインバッファ、x0~x19 入力ニューロン、y0~y3,y0,0~y1,1 出力ニューロン。

Claims (7)

  1. 畳み込みニューラルネットワークの畳み込み層における演算のための演算装置であって、
    前記畳み込み層において、複数の出力ニューロンの各々は複数の入力ニューロンの少なくとも1つと結合され、
    前記演算装置は、
    前記複数の入力ニューロンの少なくとも一部の値として入力データを格納する第1のレジスタと、
    複数のポートと、
    前記複数のポートの各々にそれぞれ個別に対応する複数の処理要素群とを備え各前記処理要素群は、対応するポートを介して前記第1のレジスタにアクセス可能であり
    各前記処理要素群は複数の処理要素を含み、各前記処理要素は、前記複数の出力ニューロンに少なくとも1つに対応付けられ、対応する出力ニューロンに結合された1つ以上の入力ニューロンの値に対して重み係数を乗算して累加する積和演算を実行し、
    前記演算装置は、さらに、
    各前記処理要素に個別に対応し、各々が対応する処理要素の積和演算結果に活性化関数を適用する複数の活性化器と、
    前記複数の活性化器の出力を格納する第2のレジスタとを備え、
    前記演算装置は、前記複数の出力ニューロンを、当該複数の出力ニューロンのインデックス番号の順番である第1の順番とは異なる第2の順番で、前記複数の処理要素群の各処理要素に対応付けるように構成され、
    前記演算装置は、さらに、
    前記複数の活性化器の出力を、前記複数の出力ニューロンの元のインデックス番号の順番である前記第1の順番に並べ替えるための切替スイッチを備え、
    前記第2のレジスタは、前記切替スイッチによって並べ替えられた後の前記第1の順番で前記複数の活性化器の出力結果を格納する、演算装置。
  2. 前記複数の処理要素群の各々は、
    当該処理要素群に含まれる前記複数の処理要素での積和演算の実行に必要な複数の入力ニューロンのインデックス番号を格納する第1のメモリを含む、請求項1に記載の演算装置。
  3. 前記複数の処理要素群の各々は、
    前記第1のメモリに格納されたインデックス番号を有する入力ニューロンの値を、対応する前記ポートを介して前記第1のレジスタから読み出し、読み出した入力ニューロンの値を当該処理要素群に含まれる前記複数の処理要素に分配する、請求項2に記載の演算装置。
  4. 各前記処理要素群に含まれる複数の処理要素の各々は、対応する前記第1のメモリに格納されたインデックス番号にそれぞれ対応付けられた重み係数を格納するための第2のメモリを含む、請求項2または3に記載の演算装置。
  5. 前記複数の出力ニューロンを、前記第2の順番で前記複数の処理要素群の各処理要素に対応付けた場合のほうが、前記第1の順番で前記複数の処理要素群の各処理要素に対応付けた場合よりも、各前記処理要素で積和演算を実行するために必要な入力データを前記第1のレジスタから読み出す回数が減少する、請求項1~4のいずれか1項に記載の演算装置。
  6. 前記畳み込み層の演算は、前記複数の入力ニューロンのうちで畳み込みカーネルが対応する範囲を順次変更しながら、前記対応する範囲の入力ニューロンに対して畳み込み演算を行うことを含み、
    前記第1のレジスタは、前記対応する範囲の異なる、複数の第1の入力ニューロンおよび複数の第2の入力ニューロンを、入力データとして同時に格納するように構成され、
    前記第2のレジスタは、前記複数の第1の入力ニューロンの畳み込み演算によって生成された複数の第1の出力ニューロンの値と、前記複数の第2の入力ニューロンの畳み込み演算によって生成された複数の第2の出力ニューロンの値とを、出力データとして同時に格納するように構成され、
    前記演算装置は、前記第2の順番において、前記複数の第1の出力ニューロンのうちの1つと前記複数の第2の出力ニューロンのうちの1つとを、同一の前記処理要素群に属する互いに異なる前記処理要素に対応付けるように構成される、請求項1~5のいずれか1項に記載の演算装置。
  7. 前記畳み込みニューラルネットワークは、前記畳み込み層を含む複数の層が先入れ先出し方式のキューを介して相互に直列に接続され、
    前記演算装置は、入力側のキューと前記第1のレジスタとの間に接続されたラインバッファをさらに含み、
    前記ラインバッファを介在することによって、前記第1のレジスタは前記入力側のキューから与えられる入力データの順番と異なる順番で、前記複数の処理要素群での演算に必要なデータを格納することができる、請求項1~のいずれか1項に記載の演算装置。
JP2020518966A 2018-05-15 2019-01-28 演算装置 Active JP7046171B2 (ja)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
JP2018093750 2018-05-15
JP2018093750 2018-05-15
PCT/JP2019/002780 WO2019220692A1 (ja) 2018-05-15 2019-01-28 演算装置

Publications (2)

Publication Number Publication Date
JPWO2019220692A1 JPWO2019220692A1 (ja) 2021-04-30
JP7046171B2 true JP7046171B2 (ja) 2022-04-01

Family

ID=68540100

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2020518966A Active JP7046171B2 (ja) 2018-05-15 2019-01-28 演算装置

Country Status (3)

Country Link
US (1) US20210241083A1 (ja)
JP (1) JP7046171B2 (ja)
WO (1) WO2019220692A1 (ja)

Families Citing this family (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP6896306B1 (ja) * 2020-04-13 2021-06-30 LeapMind株式会社 ニューラルネットワーク回路、エッジデバイスおよびニューラルネットワーク演算方法
JP7351814B2 (ja) * 2020-08-17 2023-09-27 トヨタ自動車株式会社 車両応答予測装置、学習装置、方法、及びプログラム
WO2023140778A1 (en) * 2022-01-18 2023-07-27 Agency For Science, Technology And Research Convolution engine and methods of operating and forming thereof

Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2018022339A (ja) 2016-08-03 2018-02-08 富士通株式会社 演算処理装置及び演算処理装置の制御方法

Family Cites Families (22)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7403525B2 (en) * 2002-05-15 2008-07-22 Broadcom Corporation Efficient routing of packet data in a scalable processing resource
US8010966B2 (en) * 2006-09-27 2011-08-30 Cisco Technology, Inc. Multi-threaded processing using path locks
US8379659B2 (en) * 2010-03-29 2013-02-19 Intel Corporation Performance and traffic aware heterogeneous interconnection network
US8712941B2 (en) * 2011-09-21 2014-04-29 Brain Corporation Elementary network description for efficient link between neuronal models and neuromorphic systems
JP6205780B2 (ja) * 2013-03-27 2017-10-04 凸版印刷株式会社 照明装置及び検査装置
US20150324690A1 (en) * 2014-05-08 2015-11-12 Microsoft Corporation Deep Learning Training System
US10275247B2 (en) * 2015-03-28 2019-04-30 Intel Corporation Apparatuses and methods to accelerate vector multiplication of vector elements having matching indices
US20180082181A1 (en) * 2016-05-13 2018-03-22 Samsung Electronics, Co. Ltd. Neural Network Reordering, Weight Compression, and Processing
US10621486B2 (en) * 2016-08-12 2020-04-14 Beijing Deephi Intelligent Technology Co., Ltd. Method for optimizing an artificial neural network (ANN)
IL293688B2 (en) * 2016-10-04 2024-02-01 Magic Leap Inc Efficient data layouts for convolutional neural networks
WO2018108126A1 (zh) * 2016-12-14 2018-06-21 上海寒武纪信息科技有限公司 神经网络卷积运算装置及方法
CN106844294B (zh) * 2016-12-29 2019-05-03 华为机器有限公司 卷积运算芯片和通信设备
US11216722B2 (en) * 2016-12-31 2022-01-04 Intel Corporation Hardware accelerator template and design framework for implementing recurrent neural networks
CN108269224B (zh) * 2017-01-04 2022-04-01 意法半导体股份有限公司 可重新配置的互连
CN207440765U (zh) * 2017-01-04 2018-06-01 意法半导体股份有限公司 片上系统和移动计算设备
US10402527B2 (en) * 2017-01-04 2019-09-03 Stmicroelectronics S.R.L. Reconfigurable interconnect
WO2018193353A1 (en) * 2017-04-17 2018-10-25 Cerebras Systems Inc. Neuron smearing for accelerated deep learning
US10509846B2 (en) * 2017-12-13 2019-12-17 Intel Corporation Accelerator for processing data
US20190303297A1 (en) * 2018-04-02 2019-10-03 Intel Corporation Apparatus, methods, and systems for remote memory access in a configurable spatial accelerator
EP3557485B1 (en) * 2018-04-19 2021-05-26 Aimotive Kft. Method for accelerating operations and accelerator apparatus
FI3557425T3 (fi) * 2018-04-19 2024-07-10 Aimotive Kft Kiihdytin ja järjestelmä operaatioiden kiihdyttämiseksi
US11042370B2 (en) * 2018-04-19 2021-06-22 Intel Corporation Instruction and logic for systolic dot product with accumulate

Patent Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2018022339A (ja) 2016-08-03 2018-02-08 富士通株式会社 演算処理装置及び演算処理装置の制御方法

Non-Patent Citations (2)

* Cited by examiner, † Cited by third party
Title
大場百香 ほか,マルチコアニューラルネットワークアクセラレータにおけるデータ転送のブロードキャスト化,情報処理学会 研究報告 組込みシステム(EMB) 2017-EMB-044,日本,情報処理学会,2017年03月02日,pp.1-6,ISSN:2188-868X, 特に第2.2節
武者千嵯 ほか,大規模マルチFPGAシステムでの深層学習アクセラレート,電子情報通信学会技術研究報告 CPSY2017-40-CPSY2017-49 コンピュータシステム,日本,一般社団法人電子情報通信学会,2017年10月31日,第117巻,第278号,pp.1-6,ISSN:0913-5685, 特に第3章

Also Published As

Publication number Publication date
WO2019220692A1 (ja) 2019-11-21
JPWO2019220692A1 (ja) 2021-04-30
US20210241083A1 (en) 2021-08-05

Similar Documents

Publication Publication Date Title
JP7474586B2 (ja) テンソル計算データフロー加速器半導体回路
TWI841632B (zh) 用於矩陣的空間地域轉換之方法及系統
JP6857286B2 (ja) ニューラルネットワークアレイの性能の改善
KR101959376B1 (ko) 멀티 코어 최적화된 순환 신경망을 위한 시스템 및 방법
JP7046171B2 (ja) 演算装置
US20200301994A1 (en) Methods and Systems for Implementing a Convolution Transpose Layer of a Neural Network
Yuan et al. High performance CNN accelerators based on hardware and algorithm co-optimization
US20190065149A1 (en) Processor and method for outer product accumulate operations
US6073154A (en) Computing multidimensional DFTs in FPGA
KR101196566B1 (ko) 멀티 프로세서 시스템 및 그 정보처리방법
JP7062659B2 (ja) 特殊目的計算ユニットを用いたハードウェアダブルバッファリング
CN107993186A (zh) 一种基于Winograd算法的3D CNN加速方法及系统
CN108170639B (zh) 基于分布式环境的张量cp分解实现方法
CN114358237A (zh) 多核硬件中神经网络的实现方式
WO2023065983A1 (zh) 计算装置、神经网络处理设备、芯片及处理数据的方法
CN114722994A (zh) 在硬件中实现全连接神经网络层
CN110414672B (zh) 卷积运算方法、装置及系统
CN115048215A (zh) 一种基于混合压缩格式的对角矩阵spmv在gpu上的实现方法
CN114792124A (zh) 在硬件中实施扩张卷积
CN110377874B (zh) 卷积运算方法及系统
US20230080578A1 (en) Dot product array
JP2021531572A (ja) Mac回路中の異なるカーネルを使用してデータのセットに対して連続するmac演算を実施すること
Jain-Mendon et al. A hardware–software co-design approach for implementing sparse matrix vector multiplication on FPGAs
TWI779475B (zh) 圖形處理器及其加速方法
US11734548B2 (en) Integrated circuit chip device and related product

Legal Events

Date Code Title Description
A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20201009

A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20201009

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20211116

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20220111

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: 20220222

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20220322

R150 Certificate of patent or registration of utility model

Ref document number: 7046171

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150