(57)【要約】 【課題】  データ処理の効率化を図ることができる半導体装置を提供する。【解決手段】  実施形態の半導体装置は、第１の入力端子と、第２の入力端子と、第１の入力端子から入力された値と、第２の入力端子から入力された値との積を計算する乗算器と、乗算器の出力を積算して出力するアキュームレータとを具備する演算回路を具備する。演算回路は複数であり、複数の演算回路は、それぞれの前記第１の入力端子に共通の第１の値が入力される第１のグループと、それぞれの前記第２の入力端子に共通の第２の値が入力される第２のグループとを有する。【選択図】図２
2019168783.tif 000002
【特許請求の範囲】
【請求項１】
第１の入力端子と、
第２の入力端子と、
前記第１の入力端子から入力された値と、前記第２の入力端子から入力された値との積を計算する乗算器と、
前記乗算器の出力を積算して出力するアキュームレータと
を具備する演算回路と
を具備し、
前記演算回路は複数あり、
前記複数の演算回路は、
それぞれの前記第１の入力端子に共通の第１の値が入力される第１のグループと、
それぞれの前記第２の入力端子に共通の第２の値が入力される第２のグループと
を有する、
半導体装置。
【請求項２】
前記複数の演算回路は二次元配列状に配置され、
前記第１のグループは各行の複数の演算回路であり、
前記第２のグループは各列の複数の演算回路である、
請求項１記載の半導体装置。
【請求項３】
前記第１の値及び前記第２の値はそれぞれ１ビットであり、
前記乗算器は、ＡＮＤ論理ゲートである、
請求項１記載の半導体装置。
【請求項４】
前記アキュームレータは、非同期カウンタである、請求項１記載の半導体装置。
【請求項５】
前記第１の値及び前記第２の値はそれぞれ１ビットであり、
前記乗算器は、ＸＮＯＲ論理ゲートである、
請求項１記載の半導体装置。
【請求項６】
前記第１の値及び前記第２の値はそれぞれ１ビットであり、
前記乗算器は、ＡＮＤ論理ゲートと、ＸＮＯＲ論理ゲートと、前記ＡＮＤ論理ゲート及び前記ＸＮＯＲ論理ゲートのいずれかを選択する選択回路と、をさらに具備する、
請求項１記載の半導体装置。
【請求項７】
前記各行の複数の演算回路の前記第１の入力端子にはビット毎に分割された第１ビットデータがそれぞれ入力され、  前記各列の複数の演算回路の前記第１の入力端子にはビット毎に分割された第２ビットデータがそれぞれ入力され、
前記複数の演算回路のアキュームレータの出力にそれぞれ係数をかけて、足し合わせて積和演算結果を求める処理回路と
を具備する、
請求項２記載の半導体装置。
【請求項８】
前記複数の演算回路毎に、前記演算回路の出力に対する係数及びインデックス値を記憶する記憶回路をさらに具備し、
前記処理回路は、前記記憶回路を参照して、求められた積和演算結果に、前記演算回路に対応するインデックス値を付加する、
請求項７記載の半導体装置。
【請求項９】
メモリと、
前記メモリから読み出された行列形式で表現される第１データと、第２データとの積和演算を行う積和演算回路と、
前記積和演算回路から出力される第１データと、第２データとの積和演算の結果を受信するプロセッサと
を具備し、
前記積和演算回路は、
第１の入力端子と、
第２の入力端子と、
前記第１の入力端子から入力された値と、前記第２の入力端子から入力された値との積を計算する乗算器と、
前記乗算器の出力を積算して出力するアキュームレータと
を具備する演算回路と
を具備し、
前記演算回路は複数あり、
前記複数の演算回路は、
それぞれの前記第１の入力端子に前記第１データの一部であって、且つ共通の第１の値が入力される第１のグループと、
それぞれの前記第２の入力端子に前記第２データの一部であって、且つ共通の第２の値が入力される第２のグループと
を有する、
メモリシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明の実施形態は、半導体装置に関する。
【背景技術】
【０００２】
従来より、行列と行列の乗算（以降、「行列積」と呼ぶ）を行なう半導体装置が知られている。行列積は、画像処理等のデジタル信号処理で必要とされる基本的な演算である。ディープニューラルネットワーク（Ｄｅｅｐ  Ｎｅｕｒａｌ  Ｎｅｔｗｏｒｋ）の計算も大部分は、行列積である。ディープニューラルネットワークにおいて、行列積に要求される精度は、他の行列積の演算に要求される精度に比べて低い。また、ディープニューラルネットワークの処理の中でも、行列積に要求される精度は、使われる場面によって変化する。
【０００３】
例えば、学習のときよりも、推論のときの方が、行列積に要求される精度は低いことが知られている。また、同じ推論のときであっても、ディープニューラルネットワークの層によって要求される精度が違ったり、同じ層の中でも演算によって要求される精度が違うこともある。
【０００４】
一方、行列積は、それぞれ独立した乗算および加算の組み合わせで処理されるため、並列化が容易である。従って、複数の演算器を用いて並列に処理することも、低電力化や高速化などの効率改善に効果的である。
【先行技術文献】
【非特許文献】
【０００５】
【非特許文献１】”Ｂｉｎａｒｉｚｅｄ  Ｎｅｕｒａｌ  Ｎｅｔｗｏｒｋｓ：Ｔｒａｉｎｉｎｇ  Ｄｅｅｐ  Ｎｅｕｒａｌ  Ｎｅｔｗｏｒｋｓ  ｗｉｔｈ  Ｗｅｉｇｈｔｓ  ａｎｄ  Ａｃｔｉｖａｔｉｏｎｓ  Ｃｏｎｓｔｒａｉｎｅｄ  ｔｏ  ＋１  ｏｒ  −１”  ２０１８年２月２１日検索、インターネットＵＲＬ＜ｈｔｔｐｓ：／／ａｒｘｉｖ．ｏｒｇ／ａｂｓ／１６０２．０２８３０＞
【発明の概要】
【発明が解決しようとする課題】
【０００６】
データ処理の効率化を図ることができる半導体装置を提供する。
【課題を解決するための手段】
【０００７】
実施形態の半導体装置は、第１の入力端子と、第２の入力端子と、第１の入力端子から入力された値と、第２の入力端子から入力された値との積を計算する乗算器と、乗算器の出力を積算して出力するアキュームレータとを具備する演算回路を具備する。演算回路は複数であり、複数の演算回路は、それぞれの前記第１の入力端子に共通の第１の値が入力される第１のグループと、それぞれの第２の入力端子に共通の第２の値が入力される第２のグループとを有する。
【図面の簡単な説明】
【０００８】
【図１】実施形態に係る半導体装置１００を示す図である。
【図２】実施形態に係る半導体装置１００の積和演算回路１の第１の例を示す図である。
【図３】実施形態に係る半導体装置１００の積和演算回路１ａの第２の例を示す図である。
【図４】実施形態に係る半導体装置１００の積和演算回路１ｂの第３の例を示す図である。
【図５Ａ】図５Ａ及び図５Ｂ共に、入力される入力データｗ、ｘと演算器ｕ０，０〜ｕ１５，１５との関係を示す図である。
【図５Ｂ】図５Ａ及び図５Ｂ共に、入力される入力データｗ、ｘと演算器ｕ０，０〜ｕ１５，１５との関係を示す図である。
【図６】ＬＵＴ４を示す図である。
【図７】第４の例の積和演算回路１に対する後処理演算を説明するためのフローチャートである。
【発明を実施するための形態】
【０００９】
以下、実施の形態について、図面を参照して説明する。
１  半導体装置の構成
図１は、実施形態に係る半導体装置１００を示す図である。
【００１０】
図１に示すように、積和演算回路１には、メモリ２及び後処理回路３が接続されている。積和演算回路１には、メモリ２に記憶された２つのデータ（データＸ、Ｗ）が入力される。
【００１１】
データＸは、ｔ行ｒ列の行列形式で表現されるデータであり、データＷは、ｍ行ｔ列の行列形式で表現されるデータである（ｔ，ｒ，ｍは０又は正の整数）。実施形態では、ｔは時刻（読み出しサイクル）であるものとする。
【００１２】
２つの行列を
Ｗ＝｛ｗｍ，ｔ｝０≦ｍ≦Ｍ-1，０≦ｔ≦Ｔ-1 ， 
Ｘ＝｛ｘｔ，ｒ｝０≦ｔ≦Ｔ−１，０≦ｒ≦Ｒ−１
とする。
【００１３】
ここで、Ｔ−１は読み出しサイクルの最大値、Ｒ−１はデータＸの行列の最大列数、Ｍ−１はデータＷの行列の最大行数である。
【００１４】
積和演算回路１は、メモリ２から入力される２つのデータ（Ｗ，Ｘ）の行列演算を行ない、その計算結果を後処理回路３に出力する。具体的には、積和演算回路１は、複数の演算器を有し、これら各演算器は乗算器とアキュームレータとを有し、アレイ状に配置されている。
【００１５】
計算する行列をＹ＝ＷＸとすると、Ｙ＝｛ｙｍ，ｒ｝０≦ｍ≦Ｍ−１，０≦ｒ≦Ｒ−１の各要素に対する演算は、次のような積和演算の形となる。
【００１６】
【数１】
2019168783.tif 000003
【００１７】
すなわち、積和演算回路１は、積和演算結果を、後処理回路３に出力する。
【００１８】
メモリ２は、ＳＲＡＭ、ＤＲＡＭ、ＳＤＲＡＭ、ＮＡＮＤフラッシュメモリ、３次元構造のフラッシュメモリ、ＭＲＡＭ、レジスタ、ラッチ回路、を含む、半導体メモリであればよい。
【００１９】
後処理回路３は、積和演算回路１からのｍ行ｒ列に対応する時刻Ｔ−１での各演算器の出力に対して、各演算器に対して設定され得る所定の係数を使用して演算を行い、演算結果に出力インデックスを付してプロセッサ５に出力する。このとき、後処理回路３は、必要に応じて、ルックアップテーブル（ＬＵＴ）４から所定の係数及び出力インデックスを取得する。
【００２０】
なお、後処理が必要とされない場合には、後処理回路３を設ける必要なく、積和演算回路１からの出力はプロセッサ５に出力される。
【００２１】
ＬＵＴ４は、積和演算回路１の各演算器に対する所定の係数及び出力インデックスを格納する。なお、ＬＵＴ４は、記憶回路であっても良い。
【００２２】
プロセッサ５は、後処理回路３により処理された各演算器の積和演算結果を受信する。また、プロセッサ５は、ＬＵＴ４に格納され、各演算器に対して設定される所定の係数や出力インデックスを設定可能である。
２  積和演算回路１の構成及び半導体装置の動作
２−１  第１の例の積和演算回路（ビット限定なしの積和演算回路）
図２は、実施形態に係る半導体装置１００の積和演算回路１の第１の例を示す図である。
【００２３】
図２に示すように、Ｍ×Ｒ個の各演算器ｕ０，０〜ｕＭ−１，Ｒ−１がアレイ状に並列に配置される。演算器ｕｍ，ｒは、ｍ行ｒ列に位置する演算器を表わす。各演算器ｕ０，０〜ｕＭ−１，Ｒ−１は、乗算器１１、加算器１２及びレジスタ１３を有する。
【００２４】
各演算器ｕ０，０〜ｕＭ−１，Ｒ−１の乗算器１１は第１の入力端子及び第２の入力端子を有する。演算器ｕｍ，ｒの乗算器１１の第１の入力端子は、ｍ行に配置された他の演算器と共有のデータ線に接続され、第２の入力端子は、ｒ列に配置された他の演算器と共有のデータ線に接続される。
【００２５】
すなわち、演算器ｕｍ，ｒの一部の乗算器１１の第１の入力端子から入力される第１入力は、データｗｍ，ｔのデータ線を行方向で共有し、乗算器１１の第２の入力端子から入力される第２入力は、データｘｔ，ｒのデータ線を列方向で共有する。
【００２６】
従って、時刻ｔにおいて、演算器ｕ０，０、ｕ０，１、…、ｕ０，Ｒ−１の乗算器１１の第１入力はデータｗ０，ｔの値を共有し、演算器ｕ１，０、ｕ１，１、…、ｕ１，Ｒ−１の乗算器１１の第１入力はデータｗ１，ｔの値を共有し、・・・・、演算器ｕＭ−１，０、ｕＭ−１，１、…、ｕＭ−１，Ｒ−１の乗算器１１の第１入力はデータｗＭ−１，ｔの値を共有する。
【００２７】
同様に、時刻ｔにおいて、演算器ｕ０，０、ｕ１，０、・・・、ｕＭ−１，０の乗算器１１の第２入力はデータｘｔ，０の値を共有し、演算器ｕ０，１、ｕ１，１、…、ｕＭ−１，１の乗算器１１の第２入力はデータｘｔ，１の値を共有し、・・・・、演算器ｕ０，Ｒ−１、ｕ１，Ｒ−１、…、ｕＭ−１，Ｒ−１の乗算器１１の第２入力はデータＸｔ，Ｒ−１の値を共有する。
【００２８】
各演算器ｕ０，０〜ｕＭ−１，Ｒ−１の乗算器１１は、第１入力に入力されたデータと、第２入力に入力されたデータとを乗算して、その乗算結果を加算器１２に出力する。
【００２９】
従って、時刻ｔにおける演算器ｕ０，０、ｕ０，１、…、ｕ０，Ｒ−１の各乗算器１１は、それぞれ第１入力のデータｗ０，ｔの値と第２入力のデータｘｔ，０、ｘｔ，１、・・・ｘｔ，Ｒ−１とを乗算した各乗算結果を出力する。
【００３０】
また、時刻ｔにおける演算器ｕ０，０、ｕ１，０、…、ｕＭ−１，０の各乗算器１１は、それぞれ第２入力のデータｘｔ，０の値と第１入力のデータｗ０，ｔ、ｗ１，ｔ、・・・ｗＭ−１，ｔとを乗算した各乗算結果を出力する。
【００３１】
各演算器ｕ０，０〜ｕＭ−１，Ｒ−１の加算器１２とレジスタ１３とは、アキュームレータを構成する。各演算器ｕ０，０〜ｕＭ−１，Ｒ−１の加算器１２は、乗算器１１からの乗算結果と、レジスタ１３に格納された時刻ｔ−１（時刻ｔの１サイクル前）でのレジスタ１３の値（アキュームレータの値）とを加算する。
【００３２】
レジスタ１３は、時刻ｔ−１における加算器１２からの乗算結果を保持し、時刻ｔのサイクルで加算器１２から出力された加算結果を保持する。
【００３３】
このように、Ｍ×Ｒ個の演算器がアレイ状に並列に配置され、時刻ｔに、ｍ行にあるｒ個の演算器Ｕに対してｗｍ，ｔが入力され、ｒ列にあるｍ個の演算器に対してｘｔ，ｒが入力される。この結果、第ｍ行、第ｒ列の演算器では、時刻ｔに以下の計算が実行される。
【００３４】
ｙｍ、ｒ、ｔ  ＝  ｙｍ、ｒ、ｔ−１  ＋  ｗｍ，ｔ  ×  ｘｔ，ｒ
…（２）
ここで、ｙｍ、ｒ、ｔは、時刻ｔに演算器ｕｍ，ｒのレジスタ１３に新たに格納された値である。この結果Ｔサイクルで、（１）式の演算が完了する。つまり、Ｍ×Ｒ個の演算器が、それぞれＴサイクルかけてｙｍ，ｒを計算することで、行列式Ｙ＝Ｍ×Ｘを計算することができる。
【００３５】
各演算器ｕｍ，ｒの時刻ｔにおけるレジスタ１３の値は、後処理回路３に出力される。第１の例では、積和演算回路１から出力された各演算器ｕｍ，ｒの出力は、後処理が行なわれずにプロセッサ５に出力される。
２−２  第２の例の積和演算回路（乗算器１１が１ビットの積和演算回路１）
図３は、実施形態に係る半導体装置１００の積和演算回路１ａの第２の例を示す図である。第２の例の積和演算回路１ａは、乗算器１１が１ビットである場合を示す。
【００３６】
図３は、図２に示した乗算器１１が１ビットの乗算器である場合を示す図である。１ビットの乗算器は、０×０＝０、０×１＝０、１×０＝０、１×１＝１の４通りの計算ができればよいが、これは２入力ＡＮＤの論理そのものである。第２の例では、各演算器ｕａｍ，ｒの積和演算回路１ａの乗算器にＡＮＤ論理ゲート２１を使用する。
【００３７】
図３において、各演算器ｕａｍ，ｒの積和演算回路１ａのＡＮＤ論理ゲート２１の２つの入力は１ビットであり、１ビットのデータｗｍ，ｔ及びｘｔ，ｒが入力される。ＡＮＤ論理ゲート２１の出力は１ビットであり、データｗｍ，ｔ及びｘｔ，ｒのＡＮＤ論理が出力される。
【００３８】
加算器１２の１つの入力は１ビットであり、ＡＮＤ論理ゲート２１からの１ビットの出力データが入力される。加算器１２の他の入力は多ビットであり、レジスタ１３からの時刻ｔ−１における多ビットのレジスタ１３の値が入力される。加算器１２は、ＡＮＤ論理ゲート２１からの１ビットの出力データと、レジスタ１３からの時刻ｔ−１における多ビットのレジスタ１３の値とを加算した多ビットのデータを出力する。
【００３９】
レジスタ１３の入力は多ビットであり、時刻ｔにおける、加算器１２からの１ビットの出力データが加算器１２で加算された多ビットの出力データを保持する。時刻Ｔ（サイクル）における各演算器ｕａｍ，ｒの積和演算回路１ａのレジスタ１３の値は、後処理回路３に出力される。
【００４０】
第２の例では、積和演算回路１ａから出力された各演算器ｕａｍ，ｒの出力は、後処理が行なわれずにプロセッサ５に出力される。
【００４１】
なお、１ビットのデータｗｍ，ｔ及びｘｔ，ｒが（１，０）で表現される場合には、ＡＮＤ論理ゲート２１はＡＮＤ論理ゲートであるが、（＋１，−１）で表現される場合には、ＡＮＤ論理ゲート２１はＸＮＯＲ論理ゲートとなる。
【００４２】
また、ＡＮＤ論理ゲート２１と、ＸＮＯＲ論理ゲート（図示せず）と、レジスタの設定によりＡＮＤ論理ゲート２１及びＸＮＯＲ論理ゲートの何れかを選択する選択回路（図示せず）と、を各演算器ｕａｍ，ｒに設けても良い。
【００４３】
また、入力が１ビットのアキュームレータは、図３に示すように、加算器１２及びレジスタ１３で構成しても良いが、非同期カウンタを使用しても良い。
２−３  第３の例の積和演算回路（多ビットの場合１：入力されるデータｗｍ，ｔ，ｘｔ，ｒが３ビットの場合の積和演算回路）
図４は、実施形態に係る半導体装置１００の積和演算回路１ｂの第３の例を示す図である。第３の例の積和演算回路１ｂは、入力される各データｗ０，ｔ，ｘｔ，０が３ビットの場合を示す。演算器ｕｂ０，０〜ｕ２，２の構成は、図３に示した演算器ｕａと同じである。
【００４４】
図４に示すように、入力されるデータｗ０，ｔ，ｘｔ，０が３ビットの場合の積和演算回路１は、データｗ０，ｔ（０）のデータ線にはデータｗ０，ｔの０ビット目（ＬＳＢ）の値が入力され、データｗ０，ｔ（１）のデータ線にはデータｗ０，ｔの１ビット目の値が入力され、データｗ０，ｔ（２）のデータ線にはデータｗ０，ｔの２ビット目（ＭＳＢ）の値が入力される。
【００４５】
また、データｘｔ，０（０）のデータ線にはデータｘｔ，０の０ビット目（ＬＳＢ）の値が入力され、データｘｔ，０（１）のデータ線にはデータｘｔ，０の１ビット目の値が入力され、データｘｔ，０（２）のデータ線にはデータｘｔ，０の２ビット目（ＭＳＢ）の値が入力される。
【００４６】
例えば、時刻ｔにおいて、データｗ０，ｔが３ビットで「０１１ｂ」で表わされる場合、データｗ０，ｔ（０）のデータ線には「１」、データｗ０，ｔ（１）のデータ線には「１」、データｗ０，ｔ（２）のデータ線には「０」が入力される。
【００４７】
また、時刻ｔにおいて、データｘｔ，０が３ビットで「１１０ｂ」で表わされる場合、データｘｔ，０（０）のデータ線には「０」、データｘｔ，０（１）のデータ線には「１」、データｘｔ，０（２）のデータ線には「１」が入力される。
【００４８】
すなわち、データｗｍ，ｔ、ｘｔ，ｒが３ビットの場合、以下のように表現することができる。なお、ここでは、出力の１要素のみに注目することとし、これまでの説明で使ったｍ，ｒの添え字は省略する。ｗｔ（２）等の値は、全て１ビットの値（０又は１）である。
【００４９】
ｗｔ＝ｗｔ（２）×２２＋ｗｔ（１）×２１＋ｗｔ（０）×２０
…（３）
ｘｔ＝ｘｔ（２）×２２＋ｘｔ（１）×２１＋ｘｔ（０）×２０
…（４）
このとき、（１）式は、次のようになる。
【００５０】
【数２】
2019168783.tif 000004
【００５１】
（５）式を見ると、１行目の３つのシグマではｗ（ｔ）（２）が、２行目の３つのシグマではｗ（ｔ）（１）が、３行目の３つのシグマではｗ（ｔ）（０）が利用されている。また、１列目の３つのシグマにはｘ（ｔ）（２）が、２列目の３つのシグマにはｘ（ｔ）（１）が、３列目の３つのシグマにはｘ（ｔ）（０）が利用されている。すなわち、図４に示した演算器ｕｂ０，０〜ｕ２，２の構成は、（５）式における各シグマの項の演算に相当する。
各演算器ｕｂ０，０〜ｕ２，２の出力は、後処理回路３に出力される。後処理回路３では、各シグマにそれぞれ対応する２のべき乗の係数を掛けて足し合わせることで、最終的な多ビットの積和演算の結果が得られる。なお、後処理回路３における２のべき乗の係数を掛ける処理は、シフト演算で容易に実行することができる。
【００５２】
ディープニューラルネットワークを含め多くの場合、Ｔは１００を超えるような比較的大きな値である。そのためシグマの項の１ビットの積和演算に対して、最後に２のべき乗の係数をかけてシグマ同士を足し合わせる処理（後処理と呼ぶ）は、低頻度でしか実行されない。後処理の実行方法については、例えば逐次的に実行する等、適宜選択しても良い。
・負の数の取り扱いについて
データの値を２の補数表現で扱う場合、（３）、（４）式は次のようになる。
ｗｔ＝−ｗｔ（２）×２２＋ｗｔ（１）×２１＋ｗｔ（０）×２０
…（３’）
ｘｔ＝−ｘｔ（２）×２２＋ｘｔ（１）×２１＋ｘｔ（０）×２０
…（４’）
この時、（５）式は次のようになる。
【００５３】
【数３】
2019168783.tif 000005
【００５４】
つまり、後処理回路３における後処理の際に、係数を負にすれば良く、図４と同様の構成を利用することができる。
２−４  第４の例の積和演算回路（多ビットの場合２：入力されるデータｗｍ，ｔ，が異なるビット、ｘｔ，ｒが４ビットの場合の積和演算回路）
次に、第４の例の積和演算回路１について説明する。
【００５５】
第４の例では、積和演算回路１が１６×１６の構成の演算器アレイの場合について説明する。
【００５６】
入力データであるＸは３２行４列の行列とし、全ての要素が４ビットで表現されているとする。入力データであるＷは１５行３２列の行列とし、各行の要素のビット幅がそれぞれ｛１，２，４，２，２，１，２，３，２，２，３，２，１，３，２｝であるとする。つまり、例えば、０行目の３２要素は１ビット、１行目の３２要素は２ビット、２行目の３２要素は４ビット、３行目の３２要素は２ビット、・・・、ということを表す。
【００５７】
行列積Ｙ＝ＷＸは１５行４列の行列となる。図５Ａ及び図５Ｂは入力データＷ、Ｘの各値をどのように演算器アレイに入力するかを示している。両図中のｕ０，０〜ｕ１５，１５はそれぞれ１個の演算器を示している。ｘｔ，ｒ（ｂ）は、Ｘのｔ行ｒ列のｂビット目の値を意味し、ｗｍ，ｔ（ｂ）は、Ｗのｍ行ｔ列のｂビット目の値を意味する。すなわち、ｔ＝０は、Ｘの０行目且つＷの０列目に対応し、ｔ＝３１は、Ｘの３１行目且つＷの３１列目に対応する。
【００５８】
図５Ａのとおり、Ｘは４列×４ビットがちょうど演算器の列数１６に収まっているが、Ｗは７行目の２ビット目と１ビット目までで演算器ｕの行数１６を使い切っていることがわかる。従って、７行目の０ビット目を含むＷの残りの行については後で計算を行なう。
【００５９】
ｔは初期値が０で、３１になるまで１サイクルに１ずつインクリメントする。ｙ（ｕｍ，ｒ）を、演算器ｕｍ，ｒのアキューミュレータ出力とすると、例えば、３２サイクル後には、ｙ０，０に含まれるｙ（ｕ０，０）からｙ（ｕ０，３）は、（６）式に示す値となる。
【００６０】
【数４】
2019168783.tif 000006
【００６１】
これらに対して、後処理回路３において、以下の演算を行なうことで、ｙ０，０を求めることができる。
【００６２】
ｙ０，０＝２３×ｙ（ｕ０，０）＋２２×ｙ（ｕ０，１）＋２１×ｙ（ｕ０，２）＋２０×ｙ（ｕ０，３）
同様に、３２サイクル後には、ｙ１，０に含まれるｙ（ｕ１，０）からｙ（ｕ２，３）は、（７）式に示す値となる。
【００６３】
【数５】
2019168783.tif 000007
【００６４】
これから、ｙ１，０を以下のように計算することができる。
ｙ１，０＝２４×ｙ（ｕ１，０）＋２３×ｙ（ｕ１，１）＋２２×ｙ（ｕ１，２）＋２１×ｙ（ｕ１，３）
＋２３×ｙ（ｕ２，０）＋２２×ｙ（ｕ２，１）＋２１×ｙ（ｕ２，２）＋２０×ｙ（ｕ２，３）
…（８）
このように、各演算器ｕｍ，ｒの結果それぞれに対する、係数（２のべき乗）の値及び出力のどの要素に対応するか（インデックス）は、互いに異なる。例えば、係数の値と、出力インデックスを以下のように設定する。
【００６５】
ｙ（ｕ０，０）：係数＝２３、出力インデックス＝（０，０）
ｙ（ｕ０，１）：係数＝２２、出力インデックス＝（０，０）
ｙ（ｕ０，２）：係数＝２１、出力インデックス＝（０，０）
ｙ（ｕ０，３）：係数＝２０、出力インデックス＝（０，０）
ｙ（ｕ１，０）：係数＝２４、出力インデックス＝（１，０）
ｙ（ｕ１，１）：係数＝２３、出力インデックス＝（１，０）
ｙ（ｕ１，２）：係数＝２２、出力インデックス＝（１，０）
ｙ（ｕ１，３）：係数＝２１、出力インデックス＝（１，０）
ｙ（ｕ１，０）：係数＝２３、出力インデックス＝（１，０）
ｙ（ｕ１，１）：係数＝２２、出力インデックス＝（１，０）
ｙ（ｕ１，２）：係数＝２１、出力インデックス＝（１，０）
ｙ（ｕ１，３）：係数＝２０、出力インデックス＝（１，０）
…（９）
つまり、実施形態では、（ｍ，ｒ）をアドレスとする係数と出力インデックスを格納したＬＵＴ４を用意する。図６は、ＬＵＴ４を示す図である。
【００６６】
図６に示すように、ＬＵＴ４には、ｃｏｅｆ［ｍ，ｒ］及びｉｎｄｅｘ［ｍ，ｒ］が格納される。ｃｏｅｆ［ｍ，ｒ］はｍ行ｒ列の乗算器ｕｍ，ｒの出力ｙ（ｕ（ｍ，ｒ））に乗ぜられる係数、ｉｎｄｅｘ［ｍ，ｒ］は乗算器ｕｍ，ｒの出力ｙ（ｕ（ｍ，ｒ））に付される出力インデックスである。
【００６７】
図５Ａに示すように、ｗ７，ｔは、１の演算器ｕにより１回の演算で、３ビットのうちの上位２ビットしか計算することができない。この上位２ビットの一部であり、ｙ７，０に含まれるｙ（ｕ１４，０）からｙ（ｕ１５，３）に対応する係数と出力インデックスは以下の通りである。
【００６８】
ｙ（ｕ１４，０）：  係数＝２５、  出力インデックス＝（７，０）
ｙ（ｕ１４，１）：  係数＝２４、  出力インデックス＝（７，０）
ｙ（ｕ１４，２）：  係数＝２３、  出力インデックス＝（７，０）
ｙ（ｕ１４，３）：  係数＝２２、  出力インデックス＝（７，０）
ｙ（ｕ１５，０）：  係数＝２４、  出力インデックス＝（７，０）
ｙ（ｕ１５，１）：  係数＝２３、  出力インデックス＝（７，０）
ｙ（ｕ１５，２）：  係数＝２２、  出力インデックス＝（７，０）
ｙ（ｕ１５，３）：  係数＝２１、  出力インデックス＝（７，０）
…（１０）
従って、ｙ７，０は以下の値となる。
【００６９】
ｙ７，０＝２５×ｙ（ｕ１４，０）＋２４×ｙ（ｕ１４，１）＋２３×ｙ（ｕ１４，２）＋２２×ｙ（ｕ１４，３）＋２４×ｙ（ｕ１５，０）＋２３×ｙ（ｕ１５，１）＋２２×ｙ（ｕ１５，２）＋２１×ｙ（ｕ１５，３）
…（１１）
残りの１ビットは、図５Ａに示した演算が完了した後に、今度は、図５Ｂに示すｗを演算器ｕ０，０〜ｕ１５，１５に入力する。この例では、ｘは図５Ａと同じである。ｙ７，０の残りの下位１ビットに該当するｙ（ｕ０，０）からｙ（ｕ０，３）に対応する係数と出力インデックスは以下の通りである。
【００７０】
ｙ（ｕ０，０）：係数＝２３，出力インデックス＝（７，０）
ｙ（ｕ０，１）：係数＝２２，出力インデックス＝（７，０）
ｙ（ｕ０，２）：係数＝２１，出力インデックス＝（７，０）
ｙ（ｕ０，３）：係数＝２０，出力インデックス＝（７，０）
これらの値を使って、係数と出力インデックスに基づくアルゴリズムに従って後処理を行なうと、（１１）式の結果と合わせて、（１２）式となる。
【００７１】
ｙ７，０＝２５×ｙ（ｕ１４，０）＋２４×ｙ（ｕ１４，１）＋２３×ｙ（ｕ１４，２）＋２２×ｙ（ｕ１４，３）＋２４×ｙ（ｕ１５，０）＋２３×ｙ（ｕ１５，１）＋２２×ｙ（ｕ１５，２）＋２１×ｙ（ｕ１５，３）＋２３×ｙ（ｕ０，０）＋２２×ｙ（ｕ０，１）＋２１×ｙ（ｕ０，２）＋２０×ｙ（ｕ０，３）
…（１２）
これにより、図５Ａに示した処理において途中であったｙ７，０の計算が完了する。
【００７２】
図７は、第４の例の積和演算回路１に対する後処理演算を説明するためのフローチャートである。
【００７３】
図７に示すように、後処理回路３は、時刻ｔ（開始時はｔ＝０である）の各演算器ｕｍ，ｒのアキュームレータの出力を受信する（Ｓ１）。後処理回路３は、各演算器ｕｍ，ｒの出力ｙ（ｕｍ，ｒ）に、各演算器ｕｍ，ｒ出力に対応し、ＬＵＴ４に格納された係数を乗じ、出力インデックスを付加する後処理を実行する（Ｓ２）。
【００７４】
その後、時刻ｔ＝３１までの全ての演算器ｕ０，０〜ｕ１５，１５のアキュームレータの出力について、後処理演算が終了したか否かが判断される（Ｓ３）。終了していないと判断された場合（Ｓ３のＮｏ）には、Ｓ１に戻り、後処理回路３は、時刻ｔ＝１以降の残りの演算器ｕ０，０〜ｕ１５，１５のアキュームレータの出力について、後処理演算を行う。
【００７５】
一方、Ｓ３において、時刻ｔ＝３１までの全ての演算器ｕ０，０〜ｕ１５，１５のアキュームレータの出力について、後処理演算が終了したと判断された場合（Ｓ３のＹｅｓ）、後処理回路３は、後処理演算の処理結果をプロセッサ５に送信し（Ｓ４）、処理を終了する。
３  半動作体装置の効果
実施形態の半導体装置１００の積和演算回路１の構成によれば、ＳＲＡＭ等のメモリから積和演算回路１の演算器アレイへのデータ移動を少なくできる。その結果、半導体装置１００のデータ処理の効率化を図ることができる。
【００７６】
図２に示した例の場合、総積和演算回数はＭ×Ｒ×Ｔである。仮に、演算器が１個の場合は、１回の積和演算を行うために２個のデータを１回メモリから演算器へ移動する必要があるので、全体では２×Ｍ×Ｒ×Ｔのデータ移動が必要である。実施形態の図２に示した構成では、データｗｍ，ｔ，ｘｔ，ｒのデータ線を演算器ｕ０，０〜ｕＭ−１，Ｒ−１に対して、各行列毎に共通にしているので、データ移動は、（Ｍ＋Ｒ）×Ｔとなる。例えば、Ｍ＝Ｒの場合であって、図２の構成を採用しない場合に比べて、データ移動は、｛（Ｍ＋Ｒ）×Ｔ｝／｛２×Ｍ×Ｒ×Ｔ）＝１／Ｍとなる。
【００７７】
実施形態の第３の例及び第４の例の多ビットの場合の半導体装置１００によれば、入力されるデータＷ，Ｘのビット幅に応じて、ＬＵＴ４に適切な係数と出力インデックス設定し、上述の後処理アルゴリズムを適用することで、ＸやＷのビット数がばらばらであっても処理が可能である。
【００７８】
また、第４の例で示したｙ７のケースのように、１つの値が分断されるケースでも問題ない。この特徴により、演算器アレイを無駄なく使い切ることが可能であり、これは演算器の高効率化、高速化に寄与する。
【００７９】
例えば、複数の１ビットの演算器を並列に動作させる半導体装置では、２ビット以上の精度が要求される場合に対応できない。実施形態の第３の例及び第４の例の１ビット×１ビットの積和演算は、同程度に高速に処理できる上に、多ビットの入力にも対応することができる。
【００８０】
また、多ビット×多ビット専用回路（ＧＰＵなど）とを比較する。１つの演算器が多ビット×多ビットに対応している場合、演算器ごとの回路規模は、１つの演算器が１ビット×１ビットの場合よりも大きくなる。
【００８１】
従って、並列数と演算器の演算１回当たりの処理時間が同じ場合、１ビット×１ビットの積和演算では、処理速度は同じで、回路規模が実施形態の第３の例及び第４の例の積和演算回路の方が小さくなる。
【００８２】
つまり、多ビット×多ビット専用の演算器を使って、１ビット×１ビットの演算をする場合には、使われない回路が存在することになり無駄が大きく効率が悪い。
【００８３】
例えば演算器が１６×１６個ある場合、１ビット×１ビットの積和演算は１６×１６＝２５６並列で実行することができる。同じ構成を使って４ビット×４ビットの積和演算を（１６／４）×（１６／４）＝１６並列で実行することができる。また２つの行列のビット幅は同じである必要はなく、２ビット×８ビットの積和演算を（１６／２）×（１６／８）＝１６並列で実行することも可能である。
【００８４】
実施形態の第３の例及び第４の例では、入力のビット幅によらず、演算器を効率よく使い切ることができるので、このような無駄がない。多ビット×多ビットの積和演算を行う場合は、並列数が同じ場合で比較すると、多ビット×多ビット専用の演算器で１つで行う計算を、実施形態では複数の演算器を使って行うことになるので、等価的に並列数が少なくなり、実施形態の第３の例及び第４の例の積和演算回路の方が処理速度が遅くなる。
【００８５】
しかし、１つの演算器の回路規模は実施形態の方が多ビット×多ビット専用の演算器よりも小さいので、同じ回路規模であれば、実施形態の方が演算器の並列数を大きくすることが可能である。
【００８６】
その結果、入力のビット幅が小さい場合は、実施形態の方が高速、入力のビット幅が大きい場合は、実施形態の方が低速となる。例えば、ディープラーニングの処理では、層によって要求される入力のビット幅が異なるが、大部分は小さいビット幅で良く、一部のみ大きなビット幅が要求されることがある。このように、入力のビット幅が小さい演算の割合が大きい場合、全体としては、実施形態の半導体装置１００の方が高速となる。
【００８７】
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
【符号の説明】
【００８８】
１…積和演算回路、２…メモリ、３…後処理回路、４…ＬＵＴ、５…プロセッサ、１１…、乗算器、１２…加算器、１３…レジスタ、２１…ＡＮＤ論理ゲート、ｘ、ｗ…入力データ、ｕｍ，ｒ…演算器。
【図１】
2019168783.tif 000008
【図２】
2019168783.tif 000009
【図３】
2019168783.tif 000010
【図４】
2019168783.tif 000011
【図５Ａ】
2019168783.tif 000012
【図５Ｂ】
2019168783.tif 000013
【図６】
2019168783.tif 000014
【図７】
2019168783.tif 000015