(57)【要約】  演算装置（３９）は、複数の入力ニューロンの値として入力データを格納する第１のレジスタ（５０）と、複数のポート（５１）と、複数のポート（５１）にそれぞれ対応し、対応するポートを介して第１のレジスタ（５０）にアクセス可能な複数の処理要素群（４２）とを備える。各処理要素群は複数の処理要素（４３）を含む。各処理要素（４３）は、複数の出力ニューロンに少なくとも１つに対応付けられ、対応する出力ニューロンに結合された１つ以上の入力ニューロンの値に対して重み係数を乗算して累加する積和演算を実行する。
2019220692.tif 000002
【特許請求の範囲】
【請求項１】
畳み込みニューラルネットワークの畳み込み層における演算のための演算装置であって、
前記畳み込み層において、複数の出力ニューロンの各々は複数の入力ニューロンの少なくとも１つと結合され、
前記演算装置は、
前記複数の入力ニューロンの少なくとも一部の値として入力データを格納する第１のレジスタと、
複数のポートと、
前記複数のポートにそれぞれ対応し、対応するポートを介して前記第１のレジスタにアクセス可能な複数の処理要素群とを備え、
各前記処理要素群は複数の処理要素を含み、各前記処理要素は、前記複数の出力ニューロンに少なくとも１つに対応付けられ、対応する出力ニューロンに結合された１つ以上の入力ニューロンの値に対して重み係数を乗算して累加する積和演算を実行する、演算装置。
【請求項２】
前記複数の処理要素群の各々は、
当該処理要素群に含まれる前記複数の処理要素での積和演算の実行に必要な複数の入力ニューロンのインデックス番号を格納する第１のメモリを含む、請求項１に記載の演算装置。
【請求項３】
前記複数の処理要素群の各々は、
前記第１のメモリに格納されたインデックス番号を有する入力ニューロンの値を、対応する前記ポートを介して前記第１のレジスタから読み出し、読み出した入力ニューロンの値を当該処理要素群に含まれる前記複数の処理要素に分配する、請求項２に記載の演算装置。
【請求項４】
各前記処理要素群に含まれる複数の処理要素の各々は、対応する前記第１のメモリに格納されたインデックス番号にそれぞれ対応付けられた重み係数を格納するための第２のメモリを含む、請求項２または３に記載の演算装置。
【請求項５】
前記演算装置は、さらに、
各前記処理要素に個別に対応し、各々が対応する処理要素の積和演算結果に活性化関数を適用する複数の活性化器と、
前記複数の活性化器の出力を格納する第２のレジスタとを備える、請求項１〜４のいずれか１項に記載の演算装置。
【請求項６】
前記演算装置は、前記複数の出力ニューロンを、当該複数の出力ニューロンのインデックス番号の順番である第１の順番とは異なる第２の順番で、前記複数の処理要素群の各処理要素に対応付けるように構成され、
前記演算装置は、さらに、
前記複数の活性化器の出力を、前記複数の出力ニューロンの元のインデックス番号の順番である前記第１の順番に並べ替えるための切替スイッチを含み、
前記第２のレジスタは、前記切替スイッチによって並べ替えられた後の前記第１の順番で前記複数の活性化器の出力結果を格納する、請求項５に記載の演算装置。
【請求項７】
前記複数の出力ニューロンを、前記第２の順番で前記複数の処理要素群の各処理要素に対応付けた場合のほうが、前記第１の順番で前記複数の処理要素群の各処理要素に対応付けた場合よりも、各前記処理要素で積和演算を実行するために必要な入力データを前記第１のレジスタから読み出す回数が減少する、請求項６に記載の演算装置。
【請求項８】
前記畳み込み層の演算は、前記複数の入力ニューロンのうちで畳み込みカーネルが対応する範囲を順次変更しながら、前記対応する範囲の入力ニューロンに対して畳み込み演算を行うことを含み、
前記第１のレジスタは、前記対応する範囲の異なる、複数の第１の入力ニューロンおよび複数の第２の入力ニューロンを、入力データとして同時に格納するように構成され、
前記第２のレジスタは、前記複数の第１の入力ニューロンの畳み込み演算によって生成された複数の第１の出力ニューロンの値と、前記複数の第２の入力ニューロンの畳み込み演算によって生成された複数の第２の出力ニューロンの値とを、出力データとして同時に格納するように構成され、
前記演算装置は、前記第２の順番において、前記複数の第１の出力ニューロンのうちの１つと前記複数の第２の出力ニューロンのうちの１つとを、同一の前記処理要素群に属する互いに異なる前記処理要素に対応付けるように構成される、請求項６または７に記載の演算装置。
【請求項９】
前記畳み込みニューラルネットワークは、前記畳み込み層を含む複数の層が先入れ先出し方式のキューを介して相互に直列に接続され、
前記演算装置は、入力側のキューと前記第１のレジスタとの間に接続されたラインバッファをさらに含み、
前記ラインバッファを介在することによって、前記第１のレジスタは前記入力側のキューから与えられる入力データの順番と異なる順番で、前記複数の処理要素群での演算に必要なデータを格納することができる、請求項１〜８のいずれか１項に記載の演算装置。
【発明の詳細な説明】
【技術分野】
【０００１】
この開示は、演算装置に関し、たとえば、ニューラルネットワークの畳み込み層（コンボリューション層とも称する）における演算を実行するための演算装置に関する。
【背景技術】
【０００２】
ニューラルネットワークのアルゴリズムにおいて、層間におけるニューロン同士の結合をスパース化することで、演算量削減による処理の高速化が達成でき、さらに重み係数を保存するためのメモリの省容量化を達成できることが知られている。【０００３】
しかしながら、ニューロン同士の結合をスパース化しても、既存のニューラルネットワーク専用の演算装置の性能および消費電力は必ずしも改善しない。そこで、非特許文献１では、スパース化したニューラルネットワークの畳み込み層を対象とした推論用の演算装置が提案されている。【０００４】
具体的にこの文献によれば、演算装置は、バッファコントローラ（ＢＣ）と、互いに並列に接続された複数の処理要素（ＰＥ：Processing  Element）とを備える。出力ニューロン１個分の値の計算は、いずれかの処理要素において実行される。複数の処理要素は並列的かつ非同期的に動作する。【０００５】
バッファコントローラは、入力データバッファから各処理要素に、各処理要素が必要とする入力データを選択的に供給する。より詳細には、バッファコントローラは、入力データバッファからコピーされた一部のデータを格納する内部記憶領域と、各処理要素に個別に対応し、各々が対応する処理要素へデータ供給を行う複数のインデックスモジュールとを備える。
【先行技術文献】
【非特許文献】
【０００６】
【非特許文献１】Shijin  Zhang，et  al．、"Cambricon-X:  An  Accelerator  for  Sparse  Neural  Networks"、Proceedings  of  49th  IEEE/ACM  International  Symposium  on  Microarchitecture、2016
【発明の概要】
【発明が解決しようとする課題】
【０００７】
上記の非特許文献１の構成において、複数の処理要素の個数をｎ個とする。この場合、バッファコントローラは、ｎ個の処理要素に同時にアクセスするためのｎ個のポート、もしくは、各処理要素が並列動作するｐ個の演算器を有している場合には、同時にアクセス可能なｎ×ｐ個のポートを有する必要がある。【０００８】
演算装置の処理性能を向上するためには、処理要素の個数ｎもしくは処理要素内の演算器の個数ｐを増加させることが有効である。しかしながら、上記の非特許文献１の演算装置の構成では、処理要素の個数ｎ×ｐに比例してバッファコントローラの内部記憶領域にアクセスするためのポート数が増加する。このようなポート数の増加は、回路面積の増加および動作周波数の低下を伴う。このため、処理要素数ｎおよび内部の演算器個数ｐの増加にともなってスケーラブルに演算装置の性能を向上させることができない。【０００９】
この開示は、上記の問題点を考慮したものであって、その目的の１つは、層間の結合をスパース化したニューラルネットワークの畳み込み層を対象として、処理要素数の増加もしくは処理要素内の演算器数の増加に応じてスケーラブルに性能を向上させることが可能な演算装置を提供することである。
【課題を解決するための手段】
【００１０】
一実施形態の演算装置は、畳み込みニューラルネットワークの畳み込み層における演算のための演算装置である。畳み込み層において、複数の出力ニューロンの各々は複数の入力ニューロンの少なくとも１つと結合される。演算装置は、複数の入力ニューロンの値として入力データを格納する第１のレジスタと、複数のポートと、複数のポートにそれぞれ対応し、対応するポートを介して第１のレジスタにアクセス可能な複数の処理要素群とを備える。各処理要素群は複数の処理要素を含む。各処理要素は、複数の出力ニューロンに少なくとも１つに対応付けられ、対応する出力ニューロンに結合された１つ以上の入力ニューロンの値に対して重み係数を乗算して累加する積和演算を実行する。
【発明の効果】
【００１１】
上記の実施形態によれば、複数の処理要素を含む処理要素群は、対応するポートを介して前記第１のレジスタにアクセスするように構成されるので、処理要素数の増加もしくは処理要素内の演算器数の増加に応じてスケーラブルに性能を向上させることができる。
【図面の簡単な説明】
【００１２】
【図１】スパース化されたニューラルネットワークの構成例を示すブロック図である。
【図２】畳み込み層の計算アルゴリズムを示す概念図である。
【図３】スパース化したニューラルネットワークにおける畳み込み層の１カーネル範囲の計算アルゴリズムの具体例を示す概念図である。
【図４】畳み込み層の計算を行う演算装置の全体構成を示すブロック図である。
【図５】畳み込み層の計算アルゴリズムをハードウェアにマッピングした概念図である。
【図６】図４の演算装置の処理手順を示すフローチャートである。
【図７】図４のデータ分配ユニットの構成例を示すブロック図である。
【図８】図４の処理要素群の構成例を示すブロック図である。
【図９】図８の処理要素の変形例の構成を示すブロック図である。
【図１０】図４のデータ収集ユニットの構成例を示すブロック図である。
【図１１】インデックス列および重み係数列の格納データ作成方法の一例を説明するための図である。
【図１２】図１１のインデックス列メモリおよび重み係数列メモリに格納されるデータの作成手順を示すフローチャートである。
【図１３】実施の形態２の演算装置におけるデータ収集ユニットの構成例を示すブロック図である。
【図１４】図１３のデータ収集ユニットの変形例を示すブロック図である。
【図１５】実施の形態２の演算装置の処理手順を示すフローチャートである。
【図１６】畳み込み層のアルゴリズムの一例を示す概念図である。
【図１７】図１６の畳み込み層の演算アルゴリズムを実現するための処理要素の割り当て例を示す図である。
【図１８】図１７の演算装置の割り当てにおけるデータ分配ユニットのアクセス回数を説明するための図である。
【図１９】図１６の畳み込み層の演算アルゴリズムを実現するための処理要素の他の割り当て例を示す図である。
【図２０】図１９の演算装置の割り当てにおけるデータ分配ユニットのアクセス回数を説明するための図である。
【図２１】実施の形態３の演算装置の構成例を示すブロック図である。
【図２２】実施の形態３の演算装置の処理手順を示すフローチャートである。
【図２３】畳み込み層３２のアルゴリズムの一例を示す概念図である。
【図２４】図２３の畳み込み層の演算アルゴリズムを実現するためのハードウェアの割り当て例を示す図である。
【図２５】図２４（Ａ）の演算装置の割り当てにおけるデータ分配ユニットのアクセス回数を説明するための図である。
【図２６】図２４（Ｂ）の演算装置の割り当てにおけるデータ分配ユニットのアクセス回数を説明するための図である。
【図２７】実施の形態４の演算装置の構成およびニューラルネットワークの層間接続を示す図である。
【図２８】実施の形態４の演算装置の処理手順を示すフローチャートである。
【発明を実施するための形態】
【００１３】
以下、各実施の形態について図面を参照して詳しく説明する。なお、同一または相当する部分には同一の参照符号を付して、その説明を繰り返さない。
【００１４】
実施の形態１．
［ニューラルネットワークの構成例］
図１は、スパース化されたニューラルネットワークの構成例を示すブロック図である。図１を参照して、ニューラルネットワーク３０は、複数の畳み込み層３２Ａ，３２Ｂおよび複数のプーリング層３３Ａ，３３Ｂがニューロンバッファ３１Ａ，３１Ｂ，３１Ｃ，３１Ｄ，３１Ｅを介して直列に接続された構造を有している。ニューラルネットワーク３０を畳み込みニューラルネットワークとも称する。
【００１５】
各ニューロンバッファ３１は、前層の出力データを一時的に格納するため、および／または次層の入力データを一時的に格納するために用いられる。たとえば、ニューロンバッファ３１Ａは畳み込み層３２Ａの複数の入力ニューロンに対応する。ニューロンバッファ３１Ｂは畳み込み層３２Ａの複数の出力ニューロンに対応するともに、プーリング層３３Ａの複数の入力ニューロンに対応する。
【００１６】
各畳み込み層３２は、出力ニューロンごとに結合された１以上の入力ニューロンの値に重み係数を乗算し、乗算結果を相互に加算する。この演算を積和演算と称する。さらに、各畳み込み層３２は、積和演算結果にバイアス値を加算してから活性化関数（たとえば、非線形演算）を施す。
【００１７】
図２は、畳み込み層の計算アルゴリズムを示す概念図である。図２では、（Ａ）から（Ｅ）の順に計算が進行する。
【００１８】
図２を参照して、入力ニューロン９１のうち、畳み込みカーネル９０の範囲内のニューロン９２を選択し、畳み込みカーネル９０との積和演算を行う。ここで、カーネルとは、重み係数行列のことであり、フィルタとも称する。図２の例の場合には、同じ畳み込みカーネル９０の範囲の入力ニューロン９２（入力データ）に対して、出力チャネルごとに異なるカーネルが適用される。これにより、複数の出力チャネルの個数分の出力ニューロン９４の値が計算される。積和演算結果は、出力ニューロン９３のうち選択された入力ニューロン９２に対応する範囲の出力ニューロン９４の値として格納される。
【００１９】
１カーネル範囲の演算が完了したら、畳み込みカーネル９０をスライドさせて同様に積和演算を行う。水平方向および垂直方向で全てのスライド分の演算が完了したら、畳み込み層の処理が完了する。
【００２０】
具体的に図２の場合には、まず、水平方向に一定間隔ずつ（図２の場合には１つずつ）畳み込みカーネル９０をスライドさせる。左端から右端まで水平方向のスライドが完了したら（図２の（Ａ）〜（Ｃ））、垂直方向に一定間隔だけ（図２の場合には１つだけ）畳み込みカーネル９０を移動させ（図２の（Ｄ））、再度左端から右端まで畳み込みカーネル９０をスライドさせながら積和演算を実行する。このようにして、水平方向および垂直方向で全てのスライド分の演算が完了するまで（図２（Ｅ）となるまで）繰り返し演算を行う。
【００２１】
再び図１を参照して、各プーリング層３３は、複数の入力ニューロンの局所領域ごとにひとつの要素にまとめる動作を行うことによって入力データのサイズを小さくするものである。各プーリング層３３は、たとえば、局所領域の入力ニューロンの値の最大値をとったり、局所領域の入力ニューロンの値を平均化したりする。
【００２２】
図１に示すように、ニューラルネットワーク終端には、各出力ニューロンが全ての入力ニューロンとの結合を有する全結合層が１つまたは複数層設けられる。
【００２３】
［畳み込み層の構成例］
図３は、スパース化したニューラルネットワークにおける畳み込み層の１カーネル範囲の計算アルゴリズムの具体例を示す概念図である。
【００２４】
図３を参照して、畳み込み層３２において、１カーネル範囲ごとに複数の入力ニューロンｘ0，ｘ1，ｘ2，…と複数の出力ニューロンｙ0，ｙ1，ｙ2，…とが結合される。具体的に図３の場合、出力ニューロンｙ0，ｙ1，ｙ2の値を求めるために、次式（１Ａ）〜（１Ｃ）に従って積和演算が実行され、その後、次式（２Ａ）〜（２Ｃ）に従って活性化関数が施される。
【００２５】
ｙ0←ｗ0,0・ｘ0＋ｗ0,2・ｘ2＋ｗ0,5・ｘ5＋ｗ0,6・ｘ6＋ｗ0,9・ｘ9
＋ｗ0,11・ｘ11＋ｗ0,12・ｘ12    …(1A)
ｙ1←ｗ1,0・ｘ0＋ｗ1,5・ｘ5＋ｗ1,6・ｘ6＋ｗ1,7・ｘ7＋ｗ1,9・ｘ9
＋ｗ1,10・ｘ10＋ｗ1,12・ｘ12    …(1B)
ｙ2←ｗ2,0・ｘ0＋ｗ2,2・ｘ2＋ｗ2,5・ｘ5＋ｗ2,7・ｘ7＋ｗ2,9・ｘ9
＋ｗ2,12・ｘ12＋ｗ2,15・ｘ15    …(1C)
ｙ0←ｆ0（ｙ0）    …(2A)
ｙ1←ｆ1（ｙ1）    …(2B)
ｙ2←ｆ2（ｙ2）    …(2C)
上式（１Ａ）〜（１Ｃ）において、ｗi,j（０≦ｉ≦２，０≦ｊ≦１５）は重み係数を示す。ｙ0，ｙ1，ｙ2にそれぞれバイアス値を加算してもよい。上式（２Ａ）〜（２Ｃ）において、ｆ0，ｆ1，ｆ2は活性化関数を示す。
【００２６】
上式（１Ａ）〜（１Ｃ）の積和演算は、入力ニューロンｘ0，ｘ1，…，ｘ15から積和演算に必要な要素を取り出す第１段階と、第１段階で取り出した要素に対して対応する重み係数を乗算する第２段階と、乗算結果を相互に加算する第３段階に分けることができる。
【００２７】
第１段階において、積和演算に必要な要素に対応する値を“１”とし、積和演算に不要な要素に対応する値を“０”として、入力ニューロンｘ0，ｘ1，…，ｘ15のインデックス番号の順番に並べたものを「使用ビット列」と称することにする。上式（１Ａ）の場合の使用ビット列は、（１，０，１，０，０，１，１，０，０，１，０，１，１，０，０，０）である。上式（１Ｂ）の場合の使用ビット列は、（１，０，０，０，０，１，１，１，０，１，１，０，１，０，０，０）である。上式（１Ｃ）の場合の使用ビット列は、（１，０，１，０，０，１，０，１，０，１，０，０，１，０，０，１）である。
【００２８】
［演算装置の全体構成］
図４は、畳み込み層の計算を行う演算装置の全体構成を示すブロック図である。なお、図４では、図３で説明した入力側のニューロンバッファ３１および出力側のニューロンバッファ３１をそれぞれ入力データバッファおよび出力データバッファとして演算装置の構成に含めている。
【００２９】
図４を参照して、演算装置３９は、Ｎ個の処理要素群（ＧＰＥ0〜ＧＰＥN-1、ＧＰＥ：Grouped  Processing  Element）４２と、入力データバッファ（ＮＢｉｎ）４０と、データ分配ユニット（ＤＳＵ：Data  Scatter  Unit）４１と、データ収集ユニット（ＤＧＵ：Data  Gather  Unit）４４と、出力データバッファ（ＮＢｏｕｔ）４５とを含む。
【００３０】
各処理要素群（ＧＰＥ）４２は、複数の処理要素４３（ＰＥ：Processing  Element）を含む。各処理要素（ＰＥ）４３は、出力ニューロン単位での積和演算を行う。具体的に図４の例では、各処理要素群４２は、Ｍ個の処理要素（ＰＥ）４３を含む。具体的に、第ｉ番目（０≦ｉ≦Ｎ−１）の処理要素群４２（ＧＰＥi）は、ＰＥi,0，ＰＥi,1，…ＰＥi,M-1のＭ個の処理要素４３を含む。
【００３１】
入力データバッファ（ＮＢｉｎ）４０は、前層の演算結果を本層の各入力ニューロンの値として格納する。
【００３２】
データ分配ユニット（ＤＳＵ）４１は、入力データバッファ４０の一部のデータを保持し、各処理要素群（ＧＰＥ）４２からのアクセス要求を受け付ける。アクセス要求されたデータ（すなわち、入力ニューロンの値）は、要求元の処理要素群（ＧＰＥ）４２に転送される。
【００３３】
データ収集ユニット（ＤＧＵ）４４は、各処理要素（ＰＥ）４３の演算結果を収集し、収集した各演算結果に活性化関数を施し、さらに整列および同期を行う。
【００３４】
出力データバッファ（ＮＢｏｕｔ）４５は、本層の演算結果を、各出力ニューロンの値として格納する。
【００３５】
［１カーネル範囲の計算アルゴリズムのハードウェアへのマッピング］
図５は、畳み込み層の１カーネル範囲の計算アルゴリズムをハードウェアにマッピングした概念図である。
【００３６】
図４で説明したように、データ分配ユニット（ＤＳＵ）４１は、入力ニューロン９１のうち、１つの畳み込みカーネル９０の範囲内の入力ニューロン９２の値を内蔵レジスタ（図７のデータ分配レジスタ（ＤＳＲ）５０に対応する）にコピーする。そして、基本的には、１カーネル範囲の出力ニューロン９４の各々に対して、１つの処理要素（ＰＥ）４３が対応付けられる。
【００３７】
ここで、図５に示すように、１カーネル範囲の出力ニューロン９４の数が、処理要素（ＰＥ）４３の総数より多い場合は、演算装置３９は、１カーネル範囲の出力ニューロン９４を複数のターンに分割する。そして、ターンごとに各出力ニューロンに対して１つの処理要素（ＰＥ）４３が対応付けられ、各処理要素（ＰＥ）４３において対応する出力ニューロンの積和演算が実行される。したがって、各処理要素（ＰＥ）４３は、ターンごとに異なる出力ニューロンの演算を行うことになる。
【００３８】
各処理要素（ＰＥ）４３の演算結果は、データ収集ユニット（ＤＧＵ）４４の内蔵レジスタ（図１０のデータ収集レジスタ（ＤＧＲ）７１に対応する）に一時的に格納される。データ収集ユニット（ＤＧＵ）４４は、１カーネル範囲の出力ニューロン９４に対応する積和演算が全て完了したら、データをデータ収集レジスタ（ＤＧＲ）７１から出力データバッファ（ＮＢｏｕｔ）４５に移す。
【００３９】
図２で説明したように、上記の処理は、畳み込みカーネル９０をスライドさせながら繰り返し実行される。以下、図５の場合について具体的に説明する。
【００４０】
図５を参照して、演算装置３９は、処理要素群（ＧＰＥ）４２として２個の処理要素群ＧＰＥ0およびＧＰＥ1を有する。各処理要素群（ＧＰＥ）４２は、処理要素（ＰＥ）４３としてＭ個の処理要素ＰＥ0〜ＰＥM-1を有する。したがって、演算装置３９全体で、２×Ｍ個の処理要素（ＰＥ）４３が設けられている。ここで、１カーネル範囲の出力ニューロン９４の数が処理要素（ＰＥ）４３の数である２×Ｍよりも大きい場合には、図５（Ｂ）に示すように、２×Ｍ個の出力ニューロンごとに、処理要素（ＰＥ）４３へのマッピング（対応付け）が行われる。したがって、図５（Ａ）に示すように、１カーネル範囲の出力ニューロン９４は、２×Ｍ個ごとのターン０、ターン１、…に分割される。
【００４１】
［演算装置の処理手順］
図６は、図４の演算装置の処理手順を示すフローチャートである。
【００４２】
図４および図６を参照して、まず、ステップＳ１０２において、データ分配ユニット（ＤＳＵ）４１は、１カーネル範囲の畳み込み演算に必要なデータを入力データバッファ（ＮＢｉｎ）４０から取り込む。すなわち、１カーネル分の畳み込み演算に必要なデータが、入力データバッファ（ＮＢｉｎ）４０からデータ分配ユニット（ＤＳＵ）４１にコピーされる。
【００４３】
前述のように、畳み込みカーネルとは、重み係数行列のことであり、フィルタとも称する。ニューラルネットワークの畳み込み層の演算では、畳み込みカーネルをスライドさせながら入力データに対して適用する。
【００４４】
次のステップＳ１０６において、演算装置３９は、各処理要素群（ＧＰＥ）４２および各処理要素（ＰＥ）４３にターン番号を指示する。１カーネル範囲の出力ニューロン９４の数が、処理要素（ＰＥ）４３の総数以下の場合は、ターン番号の通知は１回のみである（たとえば、ターン番号として０番を通知する）。１カーネル範囲の出力ニューロン９４の数が、処理要素（ＰＥ）４３の総数より多い場合は、１カーネル範囲の出力ニューロン９４に応じて、演算装置３９は、各ターンの出力ニューロンに対応する積和演算を実行する際にターン番号（０，１，２，…）を通知する。
【００４５】
次のステップＳ１１０において、各処理要素群（ＧＰＥ）４２は、互いに並行してデータ分配ユニット（ＤＳＵ）４１にアクセスすることにより、データ分配ユニット（ＤＳＵ）４１から必要なデータを読み出す。なお、アクセスする入力ニューロンのインデックスの値は、ターンごとに異なる。
【００４６】
その次のステップＳ１２０において、処理要素群（ＧＰＥ）４２は、自らに含まれる各処理要素（ＰＥ）４３に対して、読出したデータを分配する。
【００４７】
その次のステップＳ１３０において、各処理要素（ＰＥ）４３は、分配されたデータに対応する重み係数を乗算し、乗算結果を内部レジスタに累加する。なお、重み係数の値はターンごとに異なる。
【００４８】
以上のステップＳ１１０，Ｓ１２０，Ｓ１３０は、処理要素群（ＧＰＥ）４２ごとに並行して実行される。さらに各処理要素群（ＧＰＥ）４２では、各処理要素（ＰＥ）４３での積和演算が完了するまで（ステップＳ１４０でＹＥＳ）、上記のステップＳ１１０からＳ１３０までが繰り返して実行される。また、積和演算の結果に対して、バイアス値を累加してもよい。各処理要素（ＰＥ）４３の積和演算の最終的な結果は、データ収集ユニット（ＤＧＵ）４４に転送される。
【００４９】
次のステップＳ１５０において、データ収集ユニット（ＤＧＵ）４４は、各処理要素（ＰＥ）４３の積和演算結果に対して活性化関数を適用する。さらに、その次のステップＳ１６０においてデータ収集ユニット（ＤＧＵ）４４は、内蔵レジスタ（すなわち、図１０のデータ収集レジスタ（ＤＧＲ）７１）に各処理要素（ＰＥ）４３に対する活性化関数の演算結果を格納して、全処理要素（ＰＥ）４３の演算完了を待つ。これにより、各処理要素群（ＧＰＥ）４２での演算完了結果を次層に出力するタイミングを同期させることができる。
【００５０】
なお、１カーネル範囲の出力ニューロン９４が複数のターンに分割される場合、全ターンの畳み込み演算が完了するまで（すなわち、ステップＳ１６４でＹＥＳとなるまで）、上記のステップＳ１０６からの各ステップが繰り返される。この場合、データ収集ユニット（ＤＧＵ）４４は、データ収集レジスタ（ＤＧＲ）７１にターンごとの演算結果を格納し、全ターンでの各処理要素（ＰＥ）４３での演算が完了するまで待つ。
【００５１】
その次のステップＳ１７０においてデータ収集ユニット（ＤＧＵ）４４は、内蔵レジスタから出力データバッファ（ＮＢｏｕｔ）４５にデータを出力する。上記のステップＳ１００からステップＳ１７０までの手順は、畳み込みカーネル９０をスライドさせながら全カーネルについて畳み込み演算が完了するまで（ステップＳ１８０でＹＥＳとなるまで）繰り返される。
【００５２】
［データ分配ユニットの構成例］
図７は、図４のデータ分配ユニットの構成例を示すブロック図である。
【００５３】
図７を参照して、データ分配ユニット（ＤＳＵ）４１は、第１のレジスタとしてのデータ分配レジスタ（ＤＳＲ：Data  Scatter  Register）５０と、Ｎ個の処理要素群（ＧＰＥ）４２にそれぞれ対応するＮ個のポート（Ｐ0，Ｐ1，…ＰN-1）５１とを含む。
【００５４】
データ分配レジスタ（ＤＳＲ）５０は、入力データバッファ（ＮＢｉｎ）４０の一部のデータを保持する。各ポート５１は、対応する処理要素群（ＧＰＥ）４２からのアクセス要求を受け付ける。各ポート５１は、アクセスが要求されたデータ（入力ニューロンの値）を、データ分配レジスタ（ＤＳＲ）５０から取り出して、対応する処理要素群（ＧＰＥ）４２に転送する。
【００５５】
このように、データ分配ユニット（ＤＳＵ）４１では、処理要素（ＰＥ）の単位でのアクセスポートは用意されていない。処理要素群（ＧＰＥ）の単位でデータ分配レジスタ（ＤＳＲ）５０にアクセス可能に構成することによって、処理要素（ＰＥ）４３の数の増加に対するポート５１の数の増加を抑制することができる。
【００５６】
［処理要素群の構成例］
図８は、図４の処理要素群の構成例を示すブロック図である。
【００５７】
図８を参照して、各処理要素群（ＧＰＥ）４２は、複数（図８の場合、Ｍ個）の処理要素（ＰＥ）４３と、インデックス列を保持する第１のメモリ（以下、インデックス列メモリ６０と総称する）とを含む。ここで、インデックス列とは、当該処理要素群（ＧＰＥ）４２に含まれる各処理要素（ＰＥ）４３での演算に必要な入力ニューロンのインデックス番号列を意味する（具体例は図１１、図１２で説明する）。図８の場合、処理要素群ＧＰＥ0，ＧＰＥ1，…，ＧＰＥN-1は、対応するインデックス列メモリ６０内にインデックス列Ｉｄｘ0，Ｉｄｘ1，…，ＩｄｘN-1をそれぞれ格納する。なお、ターンごとにインデックス列は異なるので、データ分配ユニット（ＤＳＵ）４１から通知されたターン番号に対応するインデックス列が、インデックス列メモリ６０から取りされる。
【００５８】
各処理要素（ＰＥ）４３は、出力ニューロン単位の積和演算に用いる重み係数を保持する第２のメモリ（以下、重み係数列メモリ６１と総称する）と、積和演算器６２とを含む。図８の処理要素群ＧＰＥ0において、処理要素ＰＥ0,0，ＰＥ0,1，…，ＰＥ0,M-1は、対応する重み係数列メモリ６１内に重み係数列Ｗ0,0，Ｗ0,1，…，Ｗ0,M-1をそれぞれ格納する。他の処理要素群４２についても同様である。なお、ターンごとに重み係数列は異なるので、データ分配ユニット（ＤＳＵ）４１から通知されたターン番号に対応する重み係数列が、重み係数列メモリ６１から取り出される。
【００５９】
具体的に図８に示す構成では、インデックス列メモリ６０および重み係数列メモリ６１は、ターン数に応じたバンクを有する。インデックス列メモリ６０および重み係数列メモリ６１に対して、ターン毎に異なるバンクを参照することで、１カーネル範囲の出力ニューロン数が、処理要素数より多い場合にも対応できる。
【００６０】
重み係数列メモリ６１に格納されている重み係数は、インデックス列メモリ６０に格納されているインデックス番号に対応づけられている。インデックス列メモリ６０に格納された特定のインデックス番号を指示するためにポインタ６３が用いられ、重み係数列メモリ６１に格納された特定の重み係数を指示するためにポインタ６４が用いられる。
【００６１】
各処理要素群（ＧＰＥ）４２は、インデックス列メモリ６０から、ポインタ６３によって指示されているインデックス番号を取り出し、データ分配ユニット（ＤＳＵ）４１に当該インデックス番号に対応するデータ（すなわち、入力ニューロンの値）を要求する。そして、各処理要素群（ＧＰＥ）４２は、データ分配ユニット（ＤＳＵ）４１から得られたデータｄａｔａを、内蔵する各処理要素（ＰＥ）４３に分配する。各処理要素（ＰＥ）４３は、重み係数列メモリ６１から、ポインタ６４によって指示されている重み係数値を取り出し、分配されたデータに重み係数を乗算し、乗算結果を累加する。
【００６２】
ポインタ６３が指示する要素が順番に切り替わることによって、インデックス列メモリ６０の各要素に対して、同様の操作が行われる。この結果、活性化演算前の各処理要素（ＰＥ）４３の出力値（すなわち、各出力ニューロンの値）が計算される。
【００６３】
各積和演算器６２は、乗算器６５と、加算器６６と、フリップフロップ（ＦＦ：Flip  Flop）６７とを含む。乗算器６５は、データ分配ユニット（ＤＳＵ）４１から得られたデータｄａｔａと、メモリ６１から取り出された重み係数とを乗算する。加算器６６は、フリップフロップ６７に保持されたデータと乗算器６５の乗算結果とを加算し、加算結果をフリップフロップ６７に保持する。これによって乗算器６５の乗算結果が累加される。
【００６４】
図９は、図８の処理要素の変形例の構成を示すブロック図である。図９では、代表的に処理要素ＰＥ0,0の構成のみ示しているが、他の処理要素（ＰＥ）４３の構成も同様である。
【００６５】
図９の処理要素（ＰＥ）４３では、積和演算器６２Ａの構成が図８の積和演算器６２と異なる。具体的に、図９の積和演算器６２Ａは、複数の乗算器６５と複数の加算器６６とを含む。複数の乗算器６５は積和演算器６２Ａの初段に配置される。第２段目以降に複数の加算器６６がツリー状に配置される。各加算器６６は、前段の２個の演算器（乗算器６５または６６）に対応し、対応する２個の演算器の演算結果を加算する。したがって、最終段の１個の加算器６６によって、複数の乗算器６５の全出力の加算結果が得られる。
【００６６】
各処理要素群（ＧＰＥ）４２は、複数の乗算器６５の個数分のインデックス番号に対応するデータＤＡＴＡを、同時にデータ分配ユニット（ＤＳＵ）４１に要求する。これら複数のインデックス番号に対応するデータＤＡＴＡが各処理要素（ＰＥ）４３に分配される。各処理要素（ＰＥ）４３において、複数の乗算器６５は、取り出されたデータＤＡＴＡ（すなわち、複数の入力ニューロンの値）とそれぞれ対応する重み係数とを乗算する。
【００６７】
上記のような構成とすることによって、各処理要素（ＰＥ）４３内の演算器の並列数を増加させることができる。
【００６８】
図８で説明したインデックス列メモリ６０および重み係数列メモリ６１をＲＯＭ（Read  Only  Memory）として構成し、製造時に固定値を格納するようにしてもよい。もしくは、これらのメモリ６０，６１をＲＡＭ（Random  Access  Memory）として構成し、制御バス等を介して外部から保持内容を変更可能にしてもよい。
【００６９】
［データ収集ユニットの構成例］
図１０は、図４のデータ収集ユニットの構成例を示すブロック図である。
【００７０】
図１０を参照して、データ収集ユニット（ＤＧＵ）４４は、各処理要素（ＰＥ）４３に個別に対応する複数の活性化器（ＡＣＴ：Activator）７０と、第２のレジスタとしてのデータ収集レジスタ（ＤＧＲ：Data  Gather  Register）７１とを含む。
【００７１】
活性化器（ＡＣＴ）７０は、対応する処理要素（ＰＥ）４３から出力された積和演算結果に対して活性化関数を施す。データ収集レジスタ（ＤＧＲ）７１は、全ての処理要素群（ＧＰＥ）４２での積和演算と積和演算結果に対する活性化関数の適用が完了するまで、演算結果を一時的に保持する。全ての演算が完了した時点で、データ収集ユニット（ＤＧＵ）４４は、演算結果を出力データバッファ（ＮＢｏｕｔ）４５に同時に書き込む。
【００７２】
［インデックス列および重み係数列の作成方法］
次に、図８で説明したインデックス列メモリ６０および重み係数列メモリ６１の各々に格納されるデータであるインデックス列および重み係数列の作成方法について説明する。具体例として、図３の出力ニューロンｙ0，ｙ1，ｙ2が、共通の処理要素群（ＧＰＥn）４２に含まれる３個の処理要素（ＰＥn,0，ＰＥn,1，ＰＥn,2）４３にそれぞれ割り当てられた場合について説明する。
【００７３】
図１１は、インデックス列および重み係数列の格納データ作成方法の一例を説明するための図である。図１２は、図１１のインデックス列メモリおよび重み係数列メモリに格納されるデータの作成手順を示すフローチャートである。図１２の各ステップは、コンピュータによって実行することができる。
【００７４】
図１１（Ａ）を参照して、まず、出力ニューロンｙ0，ｙ1，ｙ2ごとに積和演算に使用する入力ニューロン（すなわち、インデックス番号）を示す使用ビット列ｉｄｘn,0，ｉｄｘn,1，ｉｄｘn,2が与えられているとする。ここで、「使用ビット列」とは、積和演算に必要な入力ニューロンに対応する値を“１”とし、積和演算に不要な入力ニューロンに対応する値を“０”として、入力ニューロンｘ0，ｘ1，…，ｘ15のインデックス番号の順番に並べたものである。
【００７５】
図１１（Ｂ）を参照して、コンピュータは、上記の使用ビット列ｉｄｘn,0，ｉｄｘn,1，ｉｄｘn,2について、入力ニューロンｘ0，ｘ1，…，ｘ15のインデックス番号ごとに論理和演算を行う（図１２のステップＳ２００）。
【００７６】
図１１（Ｃ）を参照して、コンピュータは、ステップＳ２００の論理和演算結果Ｕｉｄｘn,iにおいて、ビット値が１となるインデックス番号のみを取り出すことにより、処理要素群（ＧＰＥn）４２のインデックス列メモリ６０に格納されるインデックス列Ｉｄｘnを生成する（ステップＳ２１０）。
【００７７】
次に、図１１（Ｄ）を参照して、出力ニューロンｙ0，ｙ1，ｙ2に対応する重み係数列が与えられているとする。ここで、図１１（Ｄ）に示すように、コンピュータは、積和演算に使用しない（すなわち、対応する処理要素（ＰＥ）４３がアクセスしない）入力ニューロンに対応する重み係数を０にする（ステップＳ２２０）。図１１（Ｄ）において、０以外の重み係数が与えられている部分は空欄で示されている。
【００７８】
次に、図１１（Ｅ）を参照して、コンピュータは、図１１（Ｃ）に示すインデックス列Ｉｄｘnに示されたインデックス番号での重み係数を取り出す。これによって、出力ニューロンｙ0，ｙ1，ｙ2にそれぞれ対応する処理要素ＰＥn,0，ＰＥn,1，ＰＥn,2での重み係数列メモリ６１に格納すべき重み係数列Ｗn,0，Ｗn,1，Ｗn,2が生成される（ステップＳ２２０）。なお、図１１（Ｅ）においても、積和演算に使用しない重み係数を０とし、０以外の重み係数が与えられている部分は空欄で示されている。
【００７９】
［実施の形態１の効果］
上記のとおり、実施の形態１のニューラルネットワーク演算装置によれば、複数の処理要素（ＰＥ）４３を１単位として処理要素群（ＧＰＥ）４２が構成される。処理要素群（ＧＰＥ）４２は、入力データを格納するデータ分配ユニット（ＤＳＵ）４１に設けられたデータ分配レジスタ（ＤＳＲ）５０に対して並列でアクセス可能である。このため、データ分配ユニット（ＤＳＵ）４１には、処理要素（ＰＥ）４３ごとでなく、処理要素群（ＧＰＥ）４２ごとに個別にアクセスポートが設けられている。この結果、処理要素（ＰＥ）４３の個数および各処理要素（ＰＥ）４３に設けられた演算器の個数を増加させた場合には、アクセスポート数の増加を抑制することができるので、アクセスポート数に比例する回路面積の増加を抑制するとともに、動作周波数を低下させることなく、演算装置の処理性能を高めることができる。
【００８０】
実施の形態２．
実施の形態１のハードウェア構成では、同一の処理要素群（ＧＰＥ）４２に割り当てられた複数の出力ニューロンについて、入力データの共有率が高いほど、データ分配ユニット（ＤＳＵ）４１に対するアクセス要求回数が削減され、処理時間を短くできる。
【００８１】
たとえば、図１１（Ｃ）に示すインデックス列Ｉｄｘnのビット長が短いほど、データ分配ユニット（ＤＳＵ）４１に対するアクセス回数は減少する。そして、インデックス列Ｉｄｘnのビット長を短くするためには、図１１（Ａ）に示す使用ビット列ｉｄｘn,0，ｉｄｘn,1，ｉｄｘn,2においてビット１が現れる位置をできるだけ同じにする必要がある。すなわち、入力データの共有率が高いほど、データ分配ユニット（ＤＳＵ）４１に対するアクセス回数を削減することができる。
【００８２】
そこで、実施の形態２の演算装置では、同一層内の出力ニューロンを任意の位置の処理要素（ＰＥ）４３に割り当て可能にすることで、ニューラルネットワークのアルゴリズムの特性（すなわち、入力ニューロンと出力ニューロンの結合のされ方）に応じて処理速度の高速化を実現することができる。以下、図面を参照して具体的に説明する。
【００８３】
［データ収集ユニットの構成例］
図１３は、実施の形態２の演算装置におけるデータ収集ユニットの構成例を示すブロック図である。図１３のデータ収集ユニット（ＤＧＵ）４４Ａは、切替えスイッチ７２をさらに含む点で図１０のデータ収集ユニット（ＤＧＵ）４４と異なる。
【００８４】
前述のように、実施の形態２の演算装置では、出力ニューロンのインデックス番号の順番とは異なる順番で各出力ニューロンが各処理要素（ＰＥ）４３に割り当てられている。すなわち、ニューラルネットワークアルゴリズムで想定された演算順番とは異なる順番で、出力ニューロンが処理要素（ＰＥ）４３に割り当てられている。そこで、切替えスイッチ７２は、複数の活性化器（ＡＣＴ）７０から出力される演算結果を、元のインデックスの順番に並び替える。並び替えられた演算結果は、データ収集レジスタ（ＤＧＲ）７１に保管される。切替えスイッチ７２としてたとえばクロスバスイッチなど、任意の順番に接続を切替え可能なスイッチが用いられる。
【００８５】
図１３のその他の点は図１０の場合と同様であるので、同一または相当する部分には同一の参照符号を付して説明を繰り返さない。
【００８６】
図１４は、図１３のデータ収集ユニットの変形例を示すブロック図である。図１４のデータ収集ユニット（ＤＧＵ）４４Ｂは、切替えスイッチ７２に代えて、複数の活性化器（ＡＣＴ）７０の出力とデータ収集レジスタ（ＤＧＲ）７１の複数の記憶領域とを接続するための接続部７３を含む点で図１３のデータ収集ユニット（ＤＧＵ）４４Ａと異なる。
【００８７】
図１３のデータ収集ユニット（ＤＧＵ）４４Ａに設けられた切替えスイッチ７２の場合には、複数の活性化器（ＡＣＴ）７０の出力とデータ収集レジスタ（ＤＧＲ）７１の複数の記憶領域との間の接続は、動的に変化させることができる。これに対して、学習済みのニューラルネットワークの演算装置のように、ニューラルネットワークアルゴリズムを変化させる必要がない場合には、出力ニューロンの処理要素（ＰＥ）４３への割り当てを設計時に固定することができる。この場合、図１４に接続部７３として示すように、複数の活性化器（ＡＣＴ）７０の出力とデータ収集レジスタ（ＤＧＲ）７１の複数の記憶領域との間の接続関係は、設計時に設定され、その後変化しない。
【００８８】
図１４のその他の構成は図１３の場合と同様であるので、同一または相当する部分には同一の参照符号を付して説明を繰り返さない。
【００８９】
［演算装置の動作］
図１５は、実施の形態２の演算装置の処理手順を示すフローチャートである。図１５のフローチャートは、ステップＳ１５０とＳ１６０との間にステップＳ１５５を含む点で図６のフローチャートと異なる。
【００９０】
ステップＳ１５５において、図１３の切替えスイッチ７２は、複数の活性化器（ＡＣＴ）７０から出力される演算結果の順番を元のアルゴリズムの順番に並び替えてデータ収集レジスタ（ＤＧＲ）７１に保管する。図１３のその他の点は図６の場合と同様であるので、同一または相当するステップには同一の参照符号を付して説明を繰り返さない。
【００９１】
［データ処理の具体例］
以下、具体例を挙げて実施の形態２の効果について説明する。
【００９２】
図１６は、畳み込み層のアルゴリズムの一例を示す概念図である。図１６を参照して、畳み込み層３２は、１５個の入力ニューロンｘ0〜ｘ14と、４つの出力ニューロンｙ0〜ｙ3とを有する。各出力ニューロンには、入力ニューロンｘ0〜ｘ14の一部のみが結合している。
【００９３】
具体的に図１６の場合、出力ニューロンｙ0，ｙ1，ｙ2，ｙ3の値を求めるために、次式（３Ａ）〜（３Ｄ）に従って積和演算が実行され、その後、活性化関数が施される。
【００９４】
ｙ0←ｗ0,6・ｘ6＋ｗ0,9・ｘ9＋ｗ0,11・ｘ11＋ｗ0,12・ｘ12＋ｗ0,13・ｘ13
＋ｗ0,14・ｘ14    …(3A)
ｙ1←ｗ1,1・ｘ1＋ｗ1,2・ｘ2＋ｗ1,4・ｘ4＋ｗ1,8・ｘ8＋ｗ1,9・ｘ9
＋ｗ1,11・ｘ11    …(3B)
ｙ2←ｗ2,4・ｘ4＋ｗ2,5・ｘ5＋ｗ2,6・ｘ6＋ｗ2,9・ｘ9＋ｗ2,11・ｘ11
＋ｗ2,12・ｘ12＋ｗ2,14・ｘ14    …(3C)
ｙ3←ｗ3,2・ｘ2＋ｗ3,3・ｘ3＋ｗ3,4・ｘ4＋ｗ3,7・ｘ7＋ｗ3,8・ｘ8
＋ｗ3,9・ｘ9    …(3D)
上式（３Ａ）〜（３Ｄ）において、ｗi,j（０≦ｉ≦３，０≦ｊ≦１５）は重み係数を示す。ｙ0，ｙ1，ｙ2，ｙ3にそれぞれバイアス値を加算してもよい。
【００９５】
以下、２個の処理要素群（ＧＰＥ0，ＧＰＥ1）４２を有し、各処理要素群４２が２個の処理要素（ＧＰＥ0に対してＰＥ0,0，ＰＥ0,1；ＧＰＥ1に対してＰＥ1,0，ＰＥ1,1）４３を有するハードウェア構成の演算装置に対して、図１６に示す４個の出力ニューロンを割り当てた例について説明する。
【００９６】
図１７は、図１６の畳み込み層の演算アルゴリズムを実現するための処理要素の割り当て例を示す図である。図１７の例では、出力ニューロンｙ0，ｙ1，ｙ2，ｙ3は、その順序を変えずに（すなわち、インデックス番号の順番で）処理要素ＰＥ0,0，ＰＥ0,1，ＰＥ1,0，ＰＥ1,1にそれぞれ割り当てられる。したがって、データ収集ユニット（ＤＧＵ）４４に設けられた切替えスイッチ７２は、演算結果を、その出力順序を変えずにそのまま出力する。
【００９７】
図１８は、図１７の演算装置の割り当てにおけるデータ分配ユニットのアクセス回数を説明するための図である。
【００９８】
図１８（Ａ）では、処理要素ＰＥ0,0がアクセスする入力ニューロンを表す使用ビット列と、処理要素ＰＥ0,1がアクセスする入力ニューロンを表す使用ビット列とが示されている。さらに、図１８（Ａ）では、上記の使用ビット列のビットごとの論理和演算結果、すなわち、処理要素群ＧＰＥ0全体がアクセスする入力ニューロンを表す使用ビット列が示されている。図１８（Ａ）で、ビットの値が０で表示されている部分はアクセス不要な入力ニューロンを表す。したがって、処理要素群ＧＰＥ0全体でのデータ分配ユニット（ＤＳＵ）４１へのアクセス回数（図１８で「DSU  access」と称する）は１０回である。
【００９９】
図１８（Ｂ）では、処理要素ＰＥ1,0がアクセスする入力ニューロンを表す使用ビット列と、処理要素ＰＥ1,1がアクセスする入力ニューロンを表す使用ビット列とが示されている。さらに、図１８（Ｂ）では、上記の使用ビット列のビットごとの論理和演算結果、すなわち、処理要素群ＧＰＥ1全体がアクセスする入力ニューロンを表す使用ビット列が示されている。図１８（Ｂ）で、ビットの値が０で表示されている部分はアクセス不要な入力ニューロンを表す。したがって、処理要素群ＧＰＥ1全体でのデータ分配ユニット（ＤＳＵ）４１へのアクセス回数は１１回である。
【０１００】
以上により、図１７の処理要素の割り当ての場合には、処理要素群ＧＰＥ0およびＧＰＥ1の両方でのデータ分配ユニット（ＤＳＵ）４１へのアクセス回数は１１回である。
【０１０１】
図１９は、図１６の畳み込み層の演算アルゴリズムを実現するための処理要素の他の割り当て例を示す図である。図１９の例では、出力ニューロンｙ0，ｙ1，ｙ2，ｙ3は、その順序をｙ0，ｙ2，ｙ1，ｙ3に変えて処理要素ＰＥ0,0，ＰＥ0,1，ＰＥ1,0，ＰＥ1,1にそれぞれ割り当てられる。したがって、データ収集ユニット（ＤＧＵ）４４の切替えスイッチ７２では、演算結果の出力順序を元に戻す操作が必要になる。
【０１０２】
図２０は、図１９の演算装置の割り当てにおけるデータ分配ユニットのアクセス回数を説明するための図である。
【０１０３】
図２０（Ａ）では、処理要素ＰＥ0,0がアクセスする入力ニューロンを表す使用ビット列と、処理要素ＰＥ0,1がアクセスする入力ニューロンを表す使用ビット列とが示されている。さらに、図２０（Ａ）では、上記の使用ビット列のビットごとの論理和演算結果、すなわち、処理要素群ＧＰＥ0全体がアクセスする入力ニューロンを表す使用ビット列が示されている。図２０（Ａ）で、ビットの値が０で表示されている部分はアクセス不要な入力ニューロンを表す。したがって、処理要素群ＧＰＥ0全体でのデータ分配ユニット（ＤＳＵ）４１へのアクセス回数は７回である。
【０１０４】
図２０（Ｂ）では、処理要素ＰＥ1,0がアクセスする入力ニューロンを表す使用ビット列と、処理要素ＰＥ1,1がアクセスする入力ニューロンを表す使用ビット列とが示されている。さらに、図２０（Ｂ）では、上記の使用ビット列のビットごとの論理和演算結果、すなわち、処理要素群ＧＰＥ1全体がアクセスする入力ニューロンを表す使用ビット列が示されている。図２０（Ｂ）で、ビットの値が０で表示されている部分はアクセス不要な入力ニューロンを表す。したがって、処理要素群ＧＰＥ1全体でのデータ分配ユニット（ＤＳＵ）４１へのアクセス回数は８回である。
【０１０５】
以上により、図１９の処理要素の割り当ての場合には、処理要素群ＧＰＥ0およびＧＰＥ1の両方でのデータ分配ユニット（ＤＳＵ）４１へのアクセス回数は８回である。したがって、図１７に示す処理要素の割り当ての場合に比べてデータ分配ユニット（ＤＳＵ）４１へのアクセス回数が抑制され、処理速度が高速化されていることがわかる。
【０１０６】
［実施の形態２の効果］
上記のとおり、実施の形態２の演算装置によれば、ニューラルネットワークアルゴリズムで規定された出力ニューロンのインデックス番号の順番によらず、出力ニューロンを適切な処理要素（ＰＥ）４３に割り当てる。これによって、入力データの共有率の高い出力ニューロン同士を同じ処理要素群（ＧＰＥ）４２に属する複数の処理要素（ＰＥ）４３に割り当てることができるので、処理要素群（ＧＰＥ）４２からデータ分配ユニット（ＤＳＵ）４１へのアクセス回数を減らすことができる。結果として、演算装置の処理性能を高めることができる。
【０１０７】
実施の形態３．
実施の形態２の演算装置では、同一層内の出力ニューロン９３を任意の処理要素（ＰＥ）４３に割り当て可能にすることで、各処理要素（ＰＥ）４３がアクセスする入力データの共有率を高め、これにより処理時間を短くすることができた。ただし、実施の形態２の演算装置の場合には、あるスライド位置での畳み込みカーネル９０の範囲内の入力ニューロンの値のみが、入力データとしてデータ分配ユニット（ＤＳＵ）４１に取り込まれ、これらの入力ニューロンに対応する出力ニューロンが複数の処理要素（ＰＥ）４３へ割り当てられる。このように入力ニューロンの範囲が制限されているために、入力データの共有率にも上限がある。
【０１０８】
実施の形態３の演算装置では、入力ニューロン９１に対して畳み込みカーネル９０をスライドさせて畳み込み演算を行う際に、スライド位置の異なる複数の畳み込みカーネル９０に対応する入力ニューロンの値が、入力データとしてデータ分配ユニット（ＤＳＵ）４１に同時に格納される。そして、これらの入力ニューロンに対応する出力ニューロンが、複数の処理要素（ＰＥ）４３への割り当ての対象になる。これによって、実施の形態２の場合に比べて、入力データの共有率を高め、処理時間を短くすることができる。以下、図面を参照して具体的に説明する。
【０１０９】
［実施の形態３の演算装置の構成］
図２１は、実施の形態３の演算装置の構成例を示すブロック図である。図２１に示す実施の形態３の演算装置では、データ分配ユニット（ＤＳＵ）４１の機能が図７で説明した実施の形態１および２の場合と異なり、データ収集ユニット（ＤＧＵ）４４の構成および機能が、図１３および図１４で説明した実施の形態２の場合と異なる。図２１のその他の点は、実施の形態１，２の場合と同様であるので、同一または相当する部分に同一の参照符号を付して説明を繰り返さない。
【０１１０】
図２１を参照して、データ分配ユニット（ＤＳＵ）４１は、第１のレジスタとしてのデータ分配レジスタ（ＤＳＲ：Data  Scatter  Register）５０と、Ｎ個の処理要素群（ＧＰＥ）４２にそれぞれ対応するＮ個のポート（Ｐ0，Ｐ1，…ＰN-1）５１とを含む。
【０１１１】
ここで、実施の形態３の場合には、図２１のデータ分配レジスタ（ＤＳＲ）５０は、第１から第αまでのα個のカーネルに対応する範囲の入力ニューロンの値が畳み込み演算に必要な入力データとして格納できるように構成される。この点で、実施の形態３のデータ分配レジスタ（ＤＳＲ）５０は、実施の形態１および２の演算装置におけるデータ分配レジスタ（ＤＳＲ）５０と異なる。対応する処理要素群（ＧＰＥ）４２には、これらのα個のカーネルに対応する範囲の入力データが転送可能である。
【０１１２】
さらに、図２１のデータ収集ユニット（ＤＧＵ）４４は、各処理要素（ＰＥ）４３に個別に対応する複数の活性化器（ＡＣＴ）７０と、切替えスイッチ７２または接続部７３と、第２のレジスタとしてのデータ収集レジスタ（ＤＧＲ）７１とを含む。
【０１１３】
切替えスイッチ７２は、図１３の場合と同様に、複数の活性化器（ＡＣＴ）７０から出力された演算結果を、元のインデックス順に並び替えてデータ収集レジスタ（ＤＧＲ）７１に転送する。切替えスイッチ７２は、たとえば、ターン番号ごとに処理要素（ＰＥ）４３との対応関係を変化させることができる。
【０１１４】
また、図１４で説明したように、切替えスイッチ７２に代えて、複数の活性化器（ＡＣＴ）７０の出力とデータ収集レジスタ（ＤＧＲ）７１の複数の記憶領域とを接続するための配線群である接続部７３を含むように構成してもよい。接続部７３を構成する配線群の接続関係は、設計されたままで変化しない。
【０１１５】
データ収集レジスタ（ＤＧＲ）７１は、α個のカーネルにそれぞれ対応する複数のサブレジスタ（ＤＧＲ１〜ＤＧＲα）に区分される。これによって、データ収集レジスタ（ＤＧＲ）７１は、第１から第αまでのα個のカーネルにそれぞれ対応する出力データを同時に保持することができる。データ収集レジスタ（ＤＧＲ）７１は、これらα個のカーネルに対応する範囲の入力ニューロンの畳み込み演算が完了した時点で、格納している演算結果を出力データバッファ（ＮＢｏｕｔ）４５に出力する。
【０１１６】
［演算装置の動作］
図２２は、実施の形態３の演算装置の処理手順を示すフローチャートである。図２２のフローチャートは、ステップＳ１０２，Ｓ１６４，Ｓ１７０の処理内容が、ステップＳ１０２Ａ，Ｓ１６４Ａ，Ｓ１７０Ａに変更される点で、図１５フローチャートとは異なる。図２２のその他の処理ステップは、図１５の場合と同様であるので、同一または相当するステップには同一の参照符号を付して説明を繰り返さない。
【０１１７】
具体的に、ステップＳ１０２Ａにおいて、データ分配ユニット（ＤＳＵ）４１は、第１から第αのα個のカーネル範囲の畳み込み演算に必要なデータを入力データバッファ（ＮＢｉｎ）４０から取り込む。すなわち、α個のカーネル分の畳み込み演算に必要なデータが、入力データバッファ（ＮＢｉｎ）４０からデータ分配ユニット（ＤＳＵ）４１にコピーされる。
【０１１８】
その後の畳み込み演算は、α個のカーネル分の畳み込み演算が完了するまで繰り返される。すなわち、ステップＳ１０６からＳ１６０までの手順は、ステップＳ１６４ＡでＹＥＳとなるまで繰り返される。
【０１１９】
ステップＳ１７０Ａにおいて、データ収集ユニット（ＤＧＵ）４４は、内蔵するデータ収集レジスタ（ＤＧＲ）７１から出力データバッファ（ＮＢｏｕｔ）４５に、α個のカーネル範囲の畳み込み演算結果を表す出力データを出力する。
【０１２０】
［データ処理の具体例］
以下、具体的を挙げて実施の形態３の効果について説明する。
【０１２１】
図２３は、畳み込み層３２のアルゴリズムの一例を示す概念図である。図２３を参照して、畳み込み層３２は、２０個の入力ニューロンｘ0〜ｘ19と、４つの出力ニューロンｙ0,0〜ｙ1,1とを有する。各出力ニューロンには、入力ニューロン９１の一部のみが結合している。
【０１２２】
図２３に示すように、入力ニューロンｘ0〜ｘ15が第１カーネルに対応しており、第１カーネルの範囲内の入力ニューロンｘ0〜ｘ15の畳み込み演算結果が出力ニューロンｙ0,0およびｙ0,1に出力される。入力ニューロンｘ4〜ｘ19が第２カーネルに対応しており、第２カーネルの範囲内の入力ニューロンｘ4〜ｘ19の畳み込み演算結果が出力ニューロンｙ1,0およびｙ1,1に出力される。
【０１２３】
具体的に出力ニューロンｙ0,0〜ｙ1,1の値を求めるために、次式（４Ａ）〜（４Ｄ）に従って積和演算が実行され、その後、活性化関数が施される。
【０１２４】
ｙ0,0←ｗ0,4・ｘ4＋ｗ0,5・ｘ5＋ｗ0,6・ｘ6＋ｗ0,13・ｘ13＋ｗ0,14・ｘ14    …(4A)
ｙ0,1←ｗ1,0・ｘ0＋ｗ1,2・ｘ2＋ｗ1,3・ｘ3＋ｗ1,9・ｘ9＋ｗ1,10・ｘ10
＋ｗ1,11・ｘ11＋ｗ1,12・ｘ12    …(4B)
ｙ1,0←ｗ0,4・ｘ8＋ｗ0,5・ｘ9＋ｗ0,6・ｘ10＋ｗ0,13・ｘ17＋ｗ0,14・ｘ18    …(4C)
ｙ1,1←ｗ1,0・ｘ4＋ｗ1,2・ｘ6＋ｗ1,3・ｘ7＋ｗ1,9・ｘ13＋ｗ1,10・ｘ14
＋ｗ1,11・ｘ15＋ｗ1,12・ｘ16    …(4D)
上式（４Ａ）〜（４Ｄ）において、ｗi,j（０≦ｉ≦１，０≦ｊ≦１９）は重み係数を示す。ｙ0,0、ｙ0,1、ｙ1,0、ｙ1,1にそれぞれ、バイアス値を加算してもよい。
【０１２５】
以下、１個の処理要素群ＧＰＥ0を有し、この処理要素群ＧＰＥ0が２個の処理要素ＰＥ0,0，ＰＥ0,1を有するハードウェア構成の演算装置に対して、図２３に示す４つの出力ニューロンを割り当てた例について説明する。以下に示すように、出力ニューロンの割り当て方により、各処理要素（ＰＥ）４３がアクセスする入力データの共有率を高めて、処理速度の高速化を実現することができる。
【０１２６】
図２４は、図２３の畳み込み層の演算アルゴリズムを実現するためのハードウェアの割り当て例を示す図である。図２４（Ａ）では、出力ニューロンの出力順番を入れ替えない例が示され、図２４（Ｂ）では、出力ニューロンの出力順番を入れ替えた例が示される。
【０１２７】
図２４（Ａ）の例では、出力ニューロンｙ0,0を処理要素ＰＥ0,0に割り当て、出力ニューロンｙ0,1を処理要素ＰＥ0,1に割り当てる。さらに、出力ニューロンｙ1,0を処理要素ＰＥ0,0に割り当て、出力ニューロンｙ1,1を処理要素ＰＥ0,1に割り当てる。
【０１２８】
最初に、処理要素群（ＧＰＥ0）４２は、出力ニューロンｙ0,0，ｙ0,1の値を同時に計算する。次に、処理要素群（ＧＰＥ0）４２は、出力ニューロンｙ1,0，ｙ1,1の値を同時に計算する。
【０１２９】
この場合、同時に計算される出力ニューロンの値は、共通の畳み込みカーネル９０に対応しているので、その出力順序を変えずにそのまま出力できる。したがって、データ収集ユニット（ＤＧＵ）４４内のデータ収集レジスタ（ＤＧＲ）７１には、２つの出力ニューロン分の記憶領域を割り当てるだけでよい。具体的に、データ収集レジスタ（ＤＧＲ）７１は、第１カーネルに対応する出力ニューロンｙ0,0，ｙ0,1の値を受信すると、その値をそのまま出力データバッファ（ＮＢｏｕｔ）４５に出力する。次に、データ収集レジスタ（ＤＧＲ）７１は、第２カーネルに対応する出力ニューロンｙ1,0，ｙ1,1の値を受信すると、その値をそのまま出力データバッファ（ＮＢｏｕｔ）４５に出力する。
【０１３０】
図２４（Ｂ）の例では、出力ニューロンｙ1,0を処理要素ＰＥ0,0に割り当て、出力ニューロンｙ0,1を処理要素ＰＥ0,1に割り当てる。さらに、出力ニューロンｙ0,0を処理要素ＰＥ0,0に割り当て、出力ニューロンｙ1,1を処理要素ＰＥ0,1に割り当てる。
【０１３１】
最初に、処理要素群（ＧＰＥ0）４２は、出力ニューロンｙ1,0，ｙ0,1の値を同時に計算する。次に、処理要素群（ＧＰＥ0）４２は、出力ニューロンｙ0,0，ｙ1,1の値を同時に計算する。
【０１３２】
この場合、同時に計算される出力ニューロンの値は異なる畳み込みカーネル９０に対応しているので、切替えスイッチ７２または接続部７３によって、出力データの出力順番が入れ替えられる。さらに、データ収集ユニット（ＤＧＵ）４４内のデータ収集レジスタ（ＤＧＲ）７１には、第１カーネルに対応する出力ニューロンｙ0,0，ｙ0,1の記憶領域および第２カーネルに対応する出力ニューロンｙ1,0，ｙ1,1の記憶領域、すなわち、４つの出力ニューロンの記憶領域が必要になる。４つの出力ニューロンの値の計算が完了した時点で、データ収集レジスタ（ＤＧＲ）７１から出力データバッファ（ＮＢｏｕｔ）４５に出力データが転送される。
【０１３３】
図２５は、図２４（Ａ）の演算装置の割り当てにおけるデータ分配ユニットのアクセス回数を説明するための図である。
【０１３４】
図２５では、処理要素（ＰＥ0,0）がアクセスする入力ニューロン９１を表す使用ビット列と処理要素（ＰＥ0,1）がアクセスする入力ニューロン９１を表す使用ビット列とが示されている。図２５（Ａ）は、第１カーネルに対応する出力ニューロンｙ0,0，ｙ0,1を演算する際の使用ビット列を示し、図２５（Ｂ）は、第２のカーネルに対応する出力ニューロンｙ1,0，ｙ1,1を演算する際の使用ビット列を示す。図２５（Ｂ）の場合には、図２５（Ａ）の場合に対して、使用ビット列のインデクッス番号が４つだけシフトしている点に注意されたい。
【０１３５】
さらに、図２５では、上記の使用ビット列のビットごとの論理和演算結果、すなわち、処理要素群（ＧＰＥ0）全体がアクセスする入力ニューロン９１を表す使用ビット列が示されている。図２５に示す論理和演算結果で、ビットの値が０で表示されている部分はアクセス不要な入力ニューロン９１を表す。
【０１３６】
したがって、図２５（Ａ）に示すように、出力ニューロンｙ0,0，ｙ0,1を演算する際の処理要素群（ＧＰＥ0）全体でのデータ分配ユニット（ＤＳＵ）４１へのアクセス回数は１２回である。図２５（Ｂ）に示すように、出力ニューロンｙ1,0，ｙ1,1を演算する際の処理要素群（ＧＰＥ0）全体でのデータ分配ユニット（ＤＳＵ）４１へのアクセス回数は１２回である。したがって、合計のアクセス回数は２４回である。
【０１３７】
図２６は、図２４（Ｂ）の演算装置の割り当てにおけるデータ分配ユニットのアクセス回数を説明するための図である。
【０１３８】
図２６では、処理要素（ＰＥ0,0）がアクセスする入力ニューロン９１を表す使用ビット列と処理要素（ＰＥ0,1）がアクセスする入力ニューロン９１を表す使用ビット列とが示されている。図２６（Ａ）は、出力ニューロンｙ1,0，ｙ0,1を演算する際の使用ビット列を示し、図２６（Ｂ）は、出力ニューロンｙ0,0，ｙ1,1を演算する際の使用ビット列を示す。演算に使用しないインデックス番号の入力ニューロンに対応する部分には、細かいハッチング付されている。
【０１３９】
さらに図２６では、上記の使用ビット列のビットごとの論理和演算結果、すなわち、処理要素群（ＧＰＥ0）全体がアクセスする入力ニューロン９１を表す使用ビット列が示されている。ここで、演算に使用しないインデックス番号の入力ニューロンに対応する部分（図において、細かいハッチング付されている部分）は、論理値“０”として論理和演算が行われる。図２６に示す論理和演算結果で、ビットの値が０で表示されている部分はアクセス不要な入力ニューロン９１を表す。
【０１４０】
したがって、図２６（Ａ）に示すように、出力ニューロンｙ1,0，ｙ0,1を演算する際の処理要素群（ＧＰＥ0）全体でのデータ分配ユニット（ＤＳＵ）４１へのアクセス回数は１１回である。図２６（Ｂ）に示すように、出力ニューロンｙ0,0，ｙ1,1を演算する際の処理要素群（ＧＰＥ0）全体でのデータ分配ユニット（ＤＳＵ）４１へのアクセス回数は８回である。したがって、合計のアクセス回数は１９回である。
【０１４１】
以上により、実施の形態３のハードウェア構成を採用し、実施の形態２で説明しているように、出力ニューロンの処理要素（ＰＥ）４３への最適な割り当てを行うことで、データ分配ユニット（ＤＳＵ）４１へのアクセス回数の削減と処理速度の高速化とが可能なことが示された。
【０１４２】
［実施の形態３の効果］
上記のとおり、実施の形態３の演算装置によれば、ニューラルネットワークアルゴリズムにおいて入力ニューロン９１に対して畳み込みカーネル９０をスライドさせて畳み込み演算を行う際に、スライド位置の異なる複数の畳み込みカーネル９０に対応する複数の出力ニューロンが、同時に各処理要素（ＰＥ）４３に割り当てられる。これによって、入力データの共有率の高い畳み込みカーネルの演算同士を同じ処理要素群（ＧＰＥ）４２に属する複数の処理要素（ＰＥ）４３に割り当てることができるので、処理要素群（ＧＰＥ）４２からデータ分配ユニット（ＤＳＵ）４１へのアクセス回数を減らすことができる。結果として、演算装置の処理性能を高めることができる。
【０１４３】
実施の形態４．
実施の形態４では、ニューラルネットワークの層間でのデータ受け渡しの方法が実施の形態１〜３の場合と異なる。これによって、前段の層での処理が完了する前に後段の層での処理を開始できるようにしたものである。以下、図面を参照して説明する。
【０１４４】
図２７は、実施の形態４の演算装置の構成およびニューラルネットワークの層間接続を示す図である。図２７（Ａ）において演算装置の構成例を示し、図２７（Ｂ）においてニューラルネットワークの層間接続を示す。
【０１４５】
図２７のニューラルネットワークは、層Ｌ０，Ｌ１，Ｌ２，…境界でのデータの受け渡しのために、ニューロンバッファ３１（入力データバッファ（ＮＢｉｎ）４０および出力データバッファ（ＮＢｏｕｔ）４５）に代えて、ＦＩＦＯ（First  In,  First  Out）方式のキュー（入力キュー（ＦＩＦＯｉｎ）８０および出力キュー（ＦＩＦＯｏｕｔ）８１）を備える点で実施の形態１，２の場合と異なる。
【０１４６】
さらに、図１１の演算装置のデータ分配ユニット（ＤＳＵ）４１Ａは、さらに、入力キュー（ＦＩＦＯｉｎ）８０からの入力データを受信するためのラインバッファ（Line  Buffer）８２を含む点で、図７に示したデータ分配ユニット（ＤＳＵ）４１と異なる。ラインバッファ８２は、入力キュー（ＦＩＦＯｉｎ）８０とデータ分配レジスタ（ＤＳＲ）５０との間に接続され、各処理要素群（ＧＰＥ）４２での演算に必要な入力データを格納する。ラインバッファ８２に格納された入力データのうち１カーネル範囲の出力ニューロン９４での積和演算に必要な入力データが、データ分配レジスタ（ＤＳＲ）５０に転送され、さらに対応する処理要素群（ＧＰＥ）４２に転送される。ラインバッファ８２を経由することで、データ分配ユニット（ＤＳＵ）４１Ａは、入力キュー（ＦＩＦＯｉｎ）８０から与えられる入力データの順番とは異なる順番でデータ分配レジスタ（ＤＳＲ）５０に１カーネル分のデータを格納することができる。
【０１４７】
上記の構成によれば、ニューラルネットワークの各畳み込み層は、前段の処理が完了する前であっても、処理要素群（ＧＰＥ）４２での演算に必要な１カーネル分の入力データがそろった段階で、演算処理を開始することができる。これにより、ニューラルネットワークの各層が並行して実行されるので、処理の高速化を図ることができる。
【０１４８】
図２８は、実施の形態４の演算装置の処理手順を示すフローチャートである。図２８のフローチャートは、ステップＳ１００に代えてステップＳ１０２，Ｓ１０４が設けられ、ステップＳ１７０に代えてステップＳ１７２が設けられる点で図６のフローチャートと異なる。
【０１４９】
図２７、図２８を参照して、まず、ステップＳ１０２において、入力キュー（ＦＩＦＯｉｎ）８０から対応するラインバッファに演算処理後のデータが出力される。次にステップＳ１０４において、データ分配ユニット（ＤＳＵ）４１は、必要な入力データが揃った時点でラインバッファからデータ分配レジスタ（ＤＳＲ）５０にデータをコピーする。
【０１５０】
次のステップＳ１１０において、対応する処理要素群（ＧＰＥ）４２は、データ分配レジスタ（ＤＳＲ）５０にアクセスすることにより、データ分配レジスタ（ＤＳＲ）５０からデータを読み出す。その次のステップＳ１２０からステップＳ１６４（すなわち、１カーネル範囲の畳み込み演算が完了したか否かを判定するステップ）までの処理は、図６の場合と同様であるので説明を繰り返さない。
【０１５１】
データ収集レジスタ（ＤＧＲ）７１に格納されたデータは、１カーネル範囲の出力ニューロンの演算完了を待って（すなわち、ステップＳ１６４でＹＥＳとなったとき）、出力キュー（ＦＩＦＯｏｕｔ）８１に出力される。上記のステップＳ１０４からステップＳ１７２（すなわち、データ収集ユニット（ＤＧＵ）４４から出力キュー（ＦＩＦＯｏｕｔ）８１にデータを出力するステップ）までの手順は、全カーネルについて畳み込み演算が完了するまで（ステップＳ１８０でＹＥＳとなるまで）繰り返される。
【０１５２】
以上のとおり、実施の形態４のニューラルネットワーク演算装置によれば、ニューラルネットワークの層間でのデータ受け渡しにキューを用い、前段からキューを介して入力されたデータは、ラインバッファ８２を経由してデータ分配レジスタ（ＤＳＲ）５０に転送される。ラインバッファ８２を経由することで、データ分配ユニット（ＤＳＵ）４１Ａは、キューから与えられる入力データの順番とは異なる順番でデータ分配レジスタ（ＤＳＲ）５０に１カーネル分の入力データを格納することができる。これによって、前段の層での処理が完了する前に後段の層での処理を開始できるので、処理の高速化を図ることができる。
【０１５３】
今回開示された実施の形態はすべての点で例示であって制限的なものでないと考えられるべきである。この発明の範囲は上記した説明ではなくて請求の範囲によって示され、請求の範囲と均等の意味および範囲内でのすべての変更が含まれることが意図される。
【符号の説明】
【０１５４】
３０  ニューラルネットワーク、３１  ニューロンバッファ、３２  畳み込み層、３３  プーリング層、３９  演算装置、４０  入力データバッファ（ＮＢｉｎ）、４１  データ分配ユニット（ＤＳＵ）、４２  処理要素群（ＧＰＥ）、４３  処理要素（ＰＥ）、４４  データ収集ユニット（ＤＧＵ）、４５  出力データバッファ（ＮＢｏｕｔ）、５０  データ分配レジスタ（ＤＳＲ）、５１  ポート、６０  インデックス列メモリ、６１  重み係数列メモリ、６２  積和演算器、６３，６４  ポインタ、６５  乗算器、６６  加算器、６７  フリップフロップ、７０  活性化器（ＡＣＴ）、７１  データ収集レジスタ（ＤＧＲ）、７２  切替えスイッチ、７３  接続部、８０  入力キュー（ＦＩＦＯｉｎ）、８１  出力キュー（ＦＩＦＯｏｕｔ）、８２  ラインバッファ、ｘ0〜ｘ19  入力ニューロン、ｙ0〜ｙ3，ｙ0,0〜ｙ1,1  出力ニューロン。
【図１】
2019220692.tif 000003
【図２】
2019220692.tif 000004
【図３】
2019220692.tif 000005
【図４】
2019220692.tif 000006
【図５】
2019220692.tif 000007
【図６】
2019220692.tif 000008
【図７】
2019220692.tif 000009
【図８】
2019220692.tif 000010
【図９】
2019220692.tif 000011
【図１０】
2019220692.tif 000012
【図１１】
2019220692.tif 000013
【図１２】
2019220692.tif 000014
【図１３】
2019220692.tif 000015
【図１４】
2019220692.tif 000016
【図１５】
2019220692.tif 000017
【図１６】
2019220692.tif 000018
【図１７】
2019220692.tif 000019
【図１８】
2019220692.tif 000020
【図１９】
2019220692.tif 000021
【図２０】
2019220692.tif 000022
【図２１】
2019220692.tif 000023
【図２２】
2019220692.tif 000024
【図２３】
2019220692.tif 000025
【図２４】
2019220692.tif 000026
【図２５】
2019220692.tif 000027
【図２６】
2019220692.tif 000028
【図２７】
2019220692.tif 000029
【図２８】
2019220692.tif 000030
【手続補正書】
【提出日】令和2年10月9日(2020.10.9)
【手続補正１】
【補正対象書類名】明細書
【補正対象項目名】００５１
【補正方法】変更
【補正の内容】
【００５１】
その次のステップＳ１７０においてデータ収集ユニット（ＤＧＵ）４４は、内蔵レジスタから出力データバッファ（ＮＢｏｕｔ）４５にデータを出力する。上記のステップＳ１０２からステップＳ１７０までの手順は、畳み込みカーネル９０をスライドさせながら全カーネルについて畳み込み演算が完了するまで（ステップＳ１８０でＹＥＳとなるまで）繰り返される。
【手続補正２】
【補正対象書類名】明細書
【補正対象項目名】００５７
【補正方法】変更
【補正の内容】
【００５７】
図８を参照して、各処理要素群（ＧＰＥ）４２は、複数（図８の場合、Ｍ個）の処理要素（ＰＥ）４３と、インデックス列を保持する第１のメモリ（以下、インデックス列メモリ６０と総称する）とを含む。ここで、インデックス列とは、当該処理要素群（ＧＰＥ）４２に含まれる各処理要素（ＰＥ）４３での演算に必要な入力ニューロンのインデックス番号列を意味する（具体例は図１１、図１２で説明する）。図８の場合、処理要素群ＧＰＥ0，ＧＰＥ1，…，ＧＰＥN-1は、対応するインデックス列メモリ６０内にインデックス列Ｉｄｘ0，Ｉｄｘ1，…，ＩｄｘN-1をそれぞれ格納する。なお、ターンごとにインデックス列は異なるので、データ分配ユニット（ＤＳＵ）４１から通知されたターン番号に対応するインデックス列が、インデックス列メモリ６０から取り出される。
【手続補正３】
【補正対象書類名】明細書
【補正対象項目名】００６５
【補正方法】変更
【補正の内容】
【００６５】
図９の処理要素（ＰＥ）４３では、積和演算器６２Ａの構成が図８の積和演算器６２と異なる。具体的に、図９の積和演算器６２Ａは、複数の乗算器６５と複数の加算器６６とを含む。複数の乗算器６５は積和演算器６２Ａの初段に配置される。第２段目以降に複数の加算器６６がツリー状に配置される。各加算器６６は、前段の２個の演算器（乗算器６５または加算器６６）に対応し、対応する２個の演算器の演算結果を加算する。したがって、最終段の１個の加算器６６によって、複数の乗算器６５の全出力の加算結果が得られる。
【手続補正４】
【補正対象書類名】明細書
【補正対象項目名】００９０
【補正方法】変更
【補正の内容】
【００９０】
ステップＳ１５５において、図１５の切替えスイッチ７２は、複数の活性化器（ＡＣＴ）７０から出力される演算結果の順番を元のアルゴリズムの順番に並び替えてデータ収集レジスタ（ＤＧＲ）７１に保管する。図１５のその他の点は図６の場合と同様であるので、同一または相当するステップには同一の参照符号を付して説明を繰り返さない。
【手続補正５】
【補正対象書類名】明細書
【補正対象項目名】０１４６
【補正方法】変更
【補正の内容】
【０１４６】
さらに、図２７の演算装置のデータ分配ユニット（ＤＳＵ）４１Ａは、さらに、入力キュー（ＦＩＦＯｉｎ）８０からの入力データを受信するためのラインバッファ（Line  Buffer）８２を含む点で、図７に示したデータ分配ユニット（ＤＳＵ）４１と異なる。ラインバッファ８２は、入力キュー（ＦＩＦＯｉｎ）８０とデータ分配レジスタ（ＤＳＲ）５０との間に接続され、各処理要素群（ＧＰＥ）４２での演算に必要な入力データを格納する。ラインバッファ８２に格納された入力データのうち１カーネル範囲の出力ニューロン９４での積和演算に必要な入力データが、データ分配レジスタ（ＤＳＲ）５０に転送され、さらに対応する処理要素群（ＧＰＥ）４２に転送される。ラインバッファ８２を経由することで、データ分配ユニット（ＤＳＵ）４１Ａは、入力キュー（ＦＩＦＯｉｎ）８０から与えられる入力データの順番とは異なる順番でデータ分配レジスタ（ＤＳＲ）５０に１カーネル分のデータを格納することができる。
【手続補正６】
【補正対象書類名】明細書
【補正対象項目名】０１４８
【補正方法】変更
【補正の内容】
【０１４８】
図２８は、実施の形態４の演算装置の処理手順を示すフローチャートである。図２８のフローチャートは、ステップＳ１０２に代えてステップＳ１０２，Ｓ１０４が設けられ、ステップＳ１７０に代えてステップＳ１７２が設けられる点で図６のフローチャートと異なる。
【国際調査報告】
2019220692.tif 000031
2019220692.tif 000032
2019220692.tif 000033
2019220692.tif 000034