図面 (/)

技術 積和演算装置、積和演算方法、及びシステム

出願人 ルネサスエレクトロニクス株式会社
発明者 奥村俊介
出願日 2018年9月7日 (2年8ヶ月経過) 出願番号 2018-167802
公開日 2020年3月19日 (1年1ヶ月経過) 公開番号 2020-042399
状態 未査定
技術分野 複合演算
主要キーワード ステップ演算 デジタル演算器 積和演算値 ビット桁数 電力オーバーヘッド アドレスシフト 桁情報 調整フロー
関連する未来課題
重要な関連分野

この項目の情報は公開日時点(2020年3月19日)のものです。
また、この項目は機械的に抽出しているため、正しく解析できていない場合があります

図面 (20)

課題

効率よく積和演算を行う積和演算装置積和演算方法、及びシステムを提供する。

解決手段

本実施形態に係る積和演算装置100は、複数の被乗算要素を格納して、入力データに対して積和演算を実行する複数のメモリブロック102であって、1つのメモリブロック102は、複数の被乗算要素の同じビット桁の1ビット値を第1のビット値として格納する複数のメモリブロック102と、複数の乗算要素から同じビット桁の第2のビット値を抽出することで、入力データを生成する入力データ生成部207と、メモリブロックの積和演算に応じた値を累積加算する制御部106と、累積加算により得られた累積加算値を、次の積和演算の乗算要素として格納するデータメモリ104と、を備えている。

概要

背景

NN(Deep Neural Network)において、多数の要素の積和演算が処理時間の支配的な要因として知られている。非特許文献1には、メモリアレイ内部で積和演算を行う技術が提案されている。非特許文献1では、メモリセルアレイ構成を利用し、縦方向に共通化されたビット線に対して、複数のメモリセルを同時に駆動して、充放電させている。このようにすることで、複数の乗算結果を同時に加算する構成となっている。

一般的にメモリセルアレイへのアクセスを行うワード線の入力は0/1のデジタル値であり、1ビット入力による積和演算は一般物体認識などのアプリケーションにおいて、認識精度の低下を引き起こす可能性がある。そこで、多値ビット入力による積和演算を行うことで認識精度を向上させることができる。但し、通常のメモリセルアレイでは多値ビットを入力とした演算に対応するためにはメモリサイズを増加させる必要がある。例えば、符号なし4ビットの多値入力に対応させるためには、同一ビット線方向24=16個のセルに対して被乗算要素を格納することとなる。特許文献1では、多値ビット入力に対応させるため、入力部にDAC(Digital to Analog Converter)を設けている。そして、ワード線に与える電圧を多値ビットに対応するようにアナログ値として制御することで多値入力での乗算処理表現している。

特許文献1には、DNNを対象としたデジタルアーキテクチャベルの技術が開示されている。特許文献1では、入力データ部シフトレジスタが設けられている。

概要

効率よく積和演算を行う積和演算装置積和演算方法、及びシステムを提供する。本実施形態に係る積和演算装置100は、複数の被乗算要素を格納して、入力データに対して積和演算を実行する複数のメモリブロック102であって、1つのメモリブロック102は、複数の被乗算要素の同じビット桁の1ビット値を第1のビット値として格納する複数のメモリブロック102と、複数の乗算要素から同じビット桁の第2のビット値を抽出することで、入力データを生成する入力データ生成部207と、メモリブロックの積和演算に応じた値を累積加算する制御部106と、累積加算により得られた累積加算値を、次の積和演算の乗算要素として格納するデータメモリ104と、を備えている。

目的

効果

実績

技術文献被引用数
0件
牽制数
0件

この技術が所属する分野

(分野番号表示ON)※整理標準化データをもとに当社作成

ライセンス契約や譲渡などの可能性がある特許掲載中! 開放特許随時追加・更新中 詳しくはこちら

請求項1

複数の被乗算要素を格納して、入力データに対して積和演算を実行する複数のメモリブロックであって、1つの前記メモリブロックは、複数の前記被乗算要素の同じビット桁の1ビット値を第1のビット値として格納する複数のメモリブロックと、複数の乗算要素から同じビット桁の第2のビット値を抽出することで、前記入力データを生成する入力データ生成部と、前記メモリブロックの前記積和演算に応じた値を累積加算する制御部と、前記累積加算により得られた累積加算値を、次の積和演算の前記乗算要素として格納するデータメモリと、を備えた積和演算装置

請求項2

前記被乗算要素における前記第1のビット値の桁数に応じた第1の桁情報を保持する第1の保持部と、前記乗算要素における前記第2のビット値の桁数に応じた第2の桁情報を保持する第2の保持部と、をさらに備え、前記制御部は、前記メモリブロックの前記積和演算での演算値に、前記第1及び第2の桁情報に応じた値を乗じた乗算値を求め、前記乗算値を累積加算する請求項1に記載の積和演算装置。

請求項3

前記入力データ生成部が、前記データメモリからのワード長W(Wは1以上の整数)のデータを格納する入力バッファと、前記入力バッファに格納されたワード長Wのデータから、データ長N(Nは1以上、W以下の整数)のデータを選択する選択回路と、前記選択回路で選択されたデータ長Nのデータをまとめて、前記メモリブロックに出力する出力バッファと、を備えており、前記乗算要素の最大データ長をK_maxとし、k(kは0以上K以下の任意の整数であり、Kは2の累乗の整数)を乗算要素の桁数とした場合に、前記データメモリの1ワードi番目(iは、0以上、W未満の整数)に格納されるデータakindexが以下の式(1)を満たす順番で格納されている請求項1に記載の積和演算装置(ただし、i/K_max、W/K_max、及び、(i mod K_max)/Kの値は小数点以下を切り捨てた整数値とする)。

請求項4

前記乗算要素の書き込みアドレスを、設定されたオフセットアドレスに応じてシフトするアドレスシフト部をさらに備えた請求項1に記載の積和演算装置。

請求項5

請求項4に記載の積和演算装置と、前記乗算要素の書き込みアドレスを変え前記積和演算装置の演算結果を評価する評価装置と、を備えた積和演算システムであって、前記評価装置が、前記前記乗算要素の書き込みアドレスを変えていったときの評価結果に基づいて、前記オフセットアドレスを求める積和演算システム。

請求項6

データメモリから複数の乗算要素を読み出すステップと、複数の被乗算要素の同じビット桁の1ビット値を第1のビット値として格納する複数のメモリブロックから、1つのメモリブロックを選択するステップと。前記複数の乗算要素から同じビット桁の第2のビット値を抽出することで、入力データを生成するステップと、前記入力データを、選択された前記1つのメモリブロックに入力するステップと、前記メモリブロックが、前記第1のビット値と前記第2のビット値とを用いて、積和演算を行うステップと、メモリブロックの前記積和演算に応じた値を累積加算するステップと、前記累積加算により得られた累積加算値を、次の積和演算の前記乗算要素として、前記データメモリに格納するステップと、を備えた積和演算方法

請求項7

前記被乗算要素における前記第1のビット値の桁数に応じた第1の桁情報が保持されており、前記乗算要素における前記第2のビット値の桁数に応じた第2の桁情報が保持されており、前記メモリブロックの前記積和演算での演算値に、前記第1及び第2の桁情報に応じた値を乗じた乗算値を求め、前記乗算値を累積加算する請求項6に記載の積和演算方法。

請求項8

前記入力データを生成するステップでは、前記データメモリからのワード長W(Wは1以上の整数)のデータを読み出し、前記ワード長Wのデータから、データ長N(Nは1以上、W以下の整数)のデータを選択し、選択されたデータ長Nのデータをまとめて、前記メモリブロックに出力し、前記乗算要素の最大データ長をK_maxとし、k(kは0以上K以下の任意の整数であり、Kは2の累乗の整数)を乗算要素の桁数とした場合に、前記データメモリの1ワードのi番目(iは、0以上、W未満の整数)に格納されるデータakindexが以下の式(1)を満たすを満たす順番で格納されている請求項6に記載の積和演算方法(ただし、i/K_max、W/K_max、及び、(i mod K_max)/Kの値は小数点以下を切り捨てた整数値とする)。

請求項9

前記乗算要素の書き込みアドレスを、設定されたオフセットアドレスに応じてシフトする請求項6に記載の積和演算方法。

請求項10

前記乗算要素の書き込みアドレスを変えていったときの、前記積和演算の演算結果が評価されており、前記オフセットアドレスが前記乗算要素の書き込みアドレスを変えていったときの評価結果に基づいて、求められている請求項9に記載の積和演算方法。

技術分野

0001

本発明は積和演算装置積和演算方法、及びシステムに関する。

背景技術

0002

NN(Deep Neural Network)において、多数の要素の積和演算が処理時間の支配的な要因として知られている。非特許文献1には、メモリアレイ内部で積和演算を行う技術が提案されている。非特許文献1では、メモリセルアレイ構成を利用し、縦方向に共通化されたビット線に対して、複数のメモリセルを同時に駆動して、充放電させている。このようにすることで、複数の乗算結果を同時に加算する構成となっている。

0003

一般的にメモリセルアレイへのアクセスを行うワード線の入力は0/1のデジタル値であり、1ビット入力による積和演算は一般物体認識などのアプリケーションにおいて、認識精度の低下を引き起こす可能性がある。そこで、多値ビット入力による積和演算を行うことで認識精度を向上させることができる。但し、通常のメモリセルアレイでは多値ビットを入力とした演算に対応するためにはメモリサイズを増加させる必要がある。例えば、符号なし4ビットの多値入力に対応させるためには、同一ビット線方向24=16個のセルに対して被乗算要素を格納することとなる。特許文献1では、多値ビット入力に対応させるため、入力部にDAC(Digital to Analog Converter)を設けている。そして、ワード線に与える電圧を多値ビットに対応するようにアナログ値として制御することで多値入力での乗算処理表現している。

0004

特許文献1には、DNNを対象としたデジタルアーキテクチャベルの技術が開示されている。特許文献1では、入力データ部シフトレジスタが設けられている。

0005

特開2017−79017号公報

先行技術

0006

In-Memory Computation of a Machine-Learning Classifier in a Standard 6T SRAM Array

発明が解決しようとする課題

0007

ところで、DNNアルゴリズムの特徴の一つとして、同じデータを何度も繰り返しアクセスする点が挙げられる。このため、特許文献1では、上記のシフトレジスタを用いることによってデータをローカルレジスタで再利用している。これにより、メインメモリへのアクセス回数を削減し、冗長メモリアクセスやそれに関わる電力オーバーヘッド等を抑えることができる。また、特許文献1では、積和演算時に累積加算する要素を乗算するタイミングをずらし、シフトさせながら累積加算する方法を取っている。

0008

特許文献1では、累積加算の要素となる乗算を行うタイミングをずらしている。しかしながら、特許文献1で示された同時に積和演算を行う非特許文献1のような積和演算アレイに適用することは困難である。

0009

非特許文献1において多ビット演算を行う場合、メモリの入力部にDAC等の回路が必要となる。メモリアレイ内部での積和演算における電力効率は高まるが、メモリアレイへの入力データを生成する際、エネルギー消費する問題がある。また、積和演算をメモリセルアレイで実行する場合、多数のワード線を同時に駆動する必要がある。このため、アレイの列ごとにDAC回路が必要となり、消費エネルギー増の他、面積オーバーヘッドの増加につながる。さらに、アナログ入力による演算は、演算結果がばらつきの影響を受けやすく、演算結果の信頼性低下につながる問題が発生する。すなわち、DAC回路を用いて多値ビットに対応させた場合でも、アプリケーション上の認識精度を向上に繋がらないおそれがある。

0010

その他の課題と新規な特徴は、本明細書の記述および添付図面から明らかになるであろう。

課題を解決するための手段

0011

一実施の形態によれば、積和演算装置は、複数の被乗算要素を格納して、入力データに対して積和演算を実行する複数のメモリブロックであって、1つの前記メモリブロックは、複数の前記被乗算要素の同じビット桁の1ビット値を第1のビット値として格納する複数のメモリブロックと、複数の乗算要素から同じビット桁の第2のビット値を抽出することで、前記入力データを生成する入力データ生成部と、を備えている。

発明の効果

0012

前記一実施の形態によれば、効率よく積和演算を行うことができる。

図面の簡単な説明

0013

本実施の形態1にかかる積和演算装置の構成を示すブロック図である。
制御部の構成を示すブロック図である。
デコーダの構成を示すブロック図である。
メモリブロック間のデータ格納方式を説明するための図である。
メモリブロックの演算フローを示す図である。
メモリブロックの演算フローにおける各ステップでのビット桁、及びブロックアドレスを示す表である。
メモリブロック内の演算を示す図である。
入力データ生成部での処理を説明するための図である。
比較例にかかる入力データ生成部を示す図である。
実施の形態2に係る入力データ生成部を示す図である。
K=2ビットの場合のメモリブロックの演算フローを示す図である。
K=2ビットの場合の乗算要素のビット桁と、ブロックアドレスを示す表である。
K=1ビットの場合のメモリブロックの演算フローを示す図である。
K=1ビットの場合の乗算要素のビット桁と、ブロックアドレスを示す表である。
実施の形態3にかかるシステムを示すブロック図である。
アドレスをシフトして、最適アドレスを求める処理を説明するための図である。
最適アドレスを求めるための処理を示すフローチャートである。
実施の形態3におけるデコーダを示すブロック図である。
その他の実施の形態にかかる積和演算装置を示すブロック図である。

実施例

0014

説明の明確化のため、以下の記載及び図面は、適宜、省略、及び簡略化がなされている。また、様々な処理を行う機能ブロックとして図面に記載される各要素は、ハードウェア的には、CPU(Central Processing Unit)、メモリ、その他の回路で構成することができ、ソフトウェア的には、メモリにロードされたプログラムなどによって実現される。したがって、これらの機能ブロックがハードウェアのみ、ソフトウェアのみ、またはそれらの組合せによっていろいろな形で実現できることは当業者には理解されるところであり、いずれかに限定されるものではない。なお、各図面において、同一の要素には同一の符号が付されており、必要に応じて重複説明は省略されている。

0015

以下の説明では、乗算要素と被乗算要素とに対して積和演算を行う積和演算装置、及び積和演算方法について説明を行う。例えば、積和演算装置は、CNN(Convolution Neural Network)に用いられる重み付けパラメータを被乗算要素とし、入力データを乗算要素とする。被乗算要素は、ディープラーニングなどの機械学習によって、得られた値である。乗算要素は、例えば、カメラ等のセンサで検出された検出データに基づいて得られた特徴量等である。

0016

乗算要素と被乗算要素は、それぞれ、多ビット又は1ビットのデータである。積和演算装置は、複数の乗算要素と複数の被乗算要素との積和演算を実行する。そして、積和演算により得られた値が、CNNの次の層の積和演算に用いられる乗算要素となる。

0017

例えば、積和演算装置は、1回の積和演算において、m個(mは2以上の整数)の被乗算要素と、m個の乗算要素の積和演算を行う。つまり、積和演算装置は、m個の乗算要素を、対応するm個の被乗算要素のデータに乗じて、m個の積を求める。そして、積和演算装置は、m個の積の総和を、積和演算値として求める。この積和演算値が、次の積和演算の乗算要素となる。例えば、積和演算値が、CNNの次の層の積和演算に用いられる。このようにして、積和演算装置は、積和演算を繰り返し行う。そのため、本実施の形態では、積和演算装置は、積和演算を行うメモリブロックを複数備えている。

0018

実施の形態1
実施の形態1にかかる積和演算装置100の構成について、図1を用いて説明する、図1は、積和演算装置100の構成を示すブロック図である。積和演算装置100は、メモリセル101と、メモリブロック102と、ブロックアレイ103と、データメモリ104と、デコーダ105と、制御部106と、命令メモリ107とを備えている。

0019

メモリセル101は、被乗算要素のビットデータを格納する。具体的には、1つのメモリセル101は、1ビットのデータを格納する。メモリセルは例えば、SRAM(Static Random Access Memory)、フラッシュメモリMRAM(Magnetoresistive Random Access Memory)、ReRAM(Resistive Random Access Memory)、FeRAM(Ferroelectric Random Access Memory)等のメモリセルを用いることが可能である。

0020

メモリブロック102は、複数のメモリセル101を備えている。メモリブロック102では、メモリセル101がアレイ状に配置されている。メモリブロック102は、複数のワード線、及び複数のビット線を備えている。さらに、メモリブロック102は、積和演算機能を有している。具体的には、メモリブロック102は、メモリセルのデータに同時にアクセスする機能を備えており、複数のメモリセル101の格納データを読み出す機能を備えている。さらに、それぞれのメモリブロック102は、ビット線電位に対応する出力値をデジタル値に変換するA/D(Analog to Digital)変換器などを備えている。

0021

それぞれのメモリブロック102は、複数の被乗算要素の同一桁のデータをまとめて格納している。したがって、1つのメモリブロック102は、積和演算に用いられる被乗算要素の同じ桁のデータを格納する。

0022

ブロックアレイ103は、複数のメモリブロック102を備えている。なお、図1では、3×3、つまり9個のメモリブロック102を備えているが、ブロックアレイ103に含まれるメモリブロック102の数は特に限定されるものではない。

0023

データメモリ104は、乗算要素を格納するメインメモリである。データメモリ104は、データの読み出し機能書き込み機能とを備えている。データメモリ104は、メモリブロック102の演算結果に基づく積和演算値を次の積和演算の乗算要素として格納する。

0024

デコーダ105は、データメモリ104から複数の乗算要素を受け取る。そして、デコーダ105は、複数の乗算要素の同一桁の値を選択して、入力データとする。デコーダ105は、指定されたアドレスのメモリブロック102に入力データを出力する。入力データは複数の乗算要素に含まれる同一桁から構成される。例えば、入力データは1回の積和演算に用いられる乗算要素の数に対応するビット数のデータから構成される。

0025

制御部106は、積和演算装置100の全体を制御する。具体的には、データメモリ104から乗算要素のデータを読み出す。制御部106は、データメモリ104から読み出したデータをデコーダ105に供給する。制御部106はデコーダ105が選択する乗算要素の桁を制御する。さらに、制御部106は、ブロックアドレスや入力データの選択を制御する。制御部106は、入力データが供給されるメモリブロック102のブロックアドレスを指定するための情報をデコーダ105に出力する。さらに、制御部106は、メモリブロック102から積和演算結果である演算値を受け取る。
図2は、制御部106の構成を示すブロック図である。制御部106は、コントローラ1061と、書き込みデータ生成部1064と、累積加算器1063と、ビットシフタ1062とを備えている。コントローラ1061は積和演算装置100の全体を制御するものである。ビットシフタ1062は、メモリブロック102から受け取った演算値を乗算要素と被乗算要素の桁に応じてシフト演算を行い、累積加算器1063に供給する。累積加算器1063は前ステップまでの累積加算値に対して、ビットシフタ1062の値を加算し、保存する。そして、制御部106は、全ての桁の積和演算が終了すると、指定された乗算要素の桁と演算値に基づいて、書き込みデータを書き込みデータ生成部1064にて生成する。制御部106は、データメモリ104の指定アドレスに、書き込みデータを書き込む。データメモリ104に書き込まれた書き込みデータが次の積和演算の乗算要素となる。

0026

命令メモリ107は、乗算要素のビット数、及び被乗算要素のビット数を格納する。命令メモリ107は、データメモリ104の書き込みアドレス、及び読み出しアドレスを格納する。命令メモリ107は、メモリブロック102のアドレス情報を格納する。制御部106は、命令メモリ107に格納されたビット数やアドレス等のデータを順番に読み出す。そして、制御部106は、ビット数やアドレス等のデータに基づいて、積和演算に関する制御を行う。これにより、制御部106が適切なブロックアドレスのメモリブロック102に適切な入力データを供給することができる。

0027

次に、図3を用いて、デコーダ105について説明する。図3は、デコーダ105の構成を示すブロック図である。デコーダ105は、第2ビットカウンタ202と、第1ビットカウンタ203と、アドレス保持部204と、ブロックアドレス生成部205と、セレクタ206と、入力データ生成部207と、を備えている。

0028

第1ビットカウンタ203は、被乗算要素のビット桁(単に桁ともいう)に応じた第1のビット桁情報を保持する第1の保持部である。第2ビットカウンタ202は、乗算要素のビット桁に応じた第2のビット桁情報を保持する第2の保持部である。アドレス保持部204は、データメモリ104から読み出された乗算要素のメモリアドレスを保持する。ブロックアドレス生成部205は、メモリアドレスと第1のビット桁情報とを参照して、メモリブロックを指定するブロックアドレスを生成する。ブロックアドレス生成部205は、ブロックアドレスをセレクタ206に出力する。

0029

入力データ生成部207は、データメモリ104からの乗算要素を一時的に保持する。そして、入力データ生成部207は、乗算要素のビット数、及びメモリアドレスに基づいて、乗算要素をビット桁ごとに分割する。そして、入力データ生成部207は、乗算要素のビット桁を選択して、指定されたメモリブロックへの入力データを生成する。入力データは、複数の乗算要素の同一ビット桁のデータの集合となる。つまり、入力データ生成部207複数の乗算要素から同じビット桁のデータを抽出して、入力データとして、セレクタ206に出力する。

0030

セレクタ206は、入力データ生成部207からの入力データを該当するメモリブロック102に出力する。つまり、セレクタ206は、ブロックアドレス生成部205で生成されたブロックアドレスのメモリブロック102に、入力データを出力する。

0031

図4は、メモリブロック102における被乗算要素のデータ格納方式を示す。図4では、被乗算要素が4ビットデータである例を示している。ここで、aiは、乗算要素の1つのデータであり、wjiが被乗算要素の1つのデータである。なお、iは、1〜mまでの任意の整数であり、jは1〜nの任意の整数となっている。1回の積和演算において、m個(mは2以上の整数)の被乗算要素と、m個の乗算要素の積和演算を行う。つまり、m個の乗算要素を、対応する被乗算要素に乗じて、m個の積を求める。m個の積の総和が、wj,iとaiの積和演算により求められた1つの積和演算値ojとなる。

0032

wn,iは、4ビットデータであり、0〜3のビット桁(単に桁とも称する)のデータで構成されているとする。wn,iにおいて、0桁目のデータをw0n,iとし、1桁目のデータをw1n,iとし、2桁目のデータをw2n,iとし、3桁目のデータをw3n,iとする。なお、wj,iもwn,iと同様に示すことができる。

0033

各桁のデータは、1ビットであるため、wkn,iは、0又は1のどちらかを示す。なお、kはビット桁を示す値であり、0〜3までの任意の整数である。wn,iは以下の式で示される。
wn,i=23・w3n,i+22・w2n,i+21・w1n,i+20・w0n,i

0034

wj,iは、ビット桁に応じて、異なるメモリブロック102に格納されている。例えば、1つのメモリブロック102は、3桁目のデータw31,1〜w3n,m、つまり、m×n個の1ビッデータを格納している。w31,1〜w3n,m、を一般化して、w3i,jと示す。次のメモリブロック102は、2桁目のデータw2i,j(つまり、w21,1〜w2n,m)を格納している。その他の2つのメモリブロック102は、1桁目のデータw1i,j(つまり、w11,1〜w1n,m)と、0桁目のデータw0i,j(つまり、w01,1〜w0n,m)をそれぞれ格納している。1つのメモリブロック102は、(n×m)個の1ビットデータ、つまり、(n×m)ビットのデータを格納している。

0035

このため、1つのメモリブロック102は、(m×n)個のメモリセル101を備えており、それぞれのメモリセル101が1ビットのデータを格納する。1つのメモリブロック102は、n本のビット線102bと、m本のワード線102wを備えている。1本のビット線102bに対応するm個のセルに、m個の被乗算要素の同じビット桁のデータが格納されている。例えば、図4は、被乗算要素w31,1〜w3n,mを格納するメモリブロック102を示している。図4に示すように、1本目のビット線102bに対応するメモリセル101には、w31,1〜w31,mが格納されている。本構成において、m個の乗算要素の入力に対して、メモリブロック102がn行の被乗算要素との積和演算を同時に行うため、(m×n)個の積和演算が同時に実行されることとなる。

0036

m本のワード線102wから、m個の乗算要素の同じビット桁のデータがまとめてメモリセル101に供給される。この時、乗算要素の値に1が格納されている行のワード線が駆動され、被乗算要素が保存されたメモリセルの値に応じてビット線に対して充放電が行われる。乗算要素の値に0が格納されている行のワード線は駆動されず、被乗算要素が保存されたメモリセルの値に関わらず、ビット線に対する充放電は発生しない。このようにすることで、1回の積和演算に用いられるm個の被乗算要素の同じビット桁のデータw31,1〜w31,m対して、m個の乗算要素の同じビット桁のデータを同時に供給することができる。図示しない読み出し回路が、ビット線電位を読み出して、A/D変換を行う。そして、デジタル値を制御部106に出力する。

0037

このように、1つの被乗算要素が桁毎に異なるメモリブロック102に格納される。1つの被乗算要素が4ビットのデータである場合、1つの被乗算要素が、4つのメモリブロック102に分散して格納されている。なお、一般的なメモリ格納形式の場合、データ単位(積和演算における乗算の1要素単位)で同一のメモリブロックにデータを格納する。異なるブロックに一つの被乗算要素データを桁毎に分散して格納すると、デジタル演算器ベース使用方法において複数回のアクセスと冗長なデータの読出しが発生するためである。したがって、一般的には、4ビット形式で保存したデータは同一のメモリブロックに格納される。

0038

図5図8を用いて、メモリブロックでの演算処理について説明する。図5は、メモリブロックにおける積和演算のフローを示す図である。図6は、ステップ毎のブロックアドレスとビット桁を示す表である。図7は、1つのメモリブロック102における演算を示す図である。図8は、デコーダで生成される入力データを示す図である。

0039

なお、以下の説明では、1つの乗算要素aiが4ビットデータであるとしている。aiは0〜3のビット桁のデータで構成されているとする。aiにおいて、0桁目のデータをa0iとし、1桁目のデータをa1iとし、2桁目のデータをa2iとし、3桁目のデータをa3iとする。akiは、0又は1のどちらかを示す。なお、iは1〜mの任意の整数であり、kは0〜3までの任意の整数である。aiは以下の式で示される。
ai=23・a3i+22・a2i+21・a1i+20・a0i

0040

ここでは、図5に示すように、ブロックアレイ103が、9個のメモリブロック102を備えており,それらのブロックアドレスが0〜8であるとする。そして、ブロックアドレス3のメモリブロック102は、被乗算要素wj,iの0桁目のデータw0j,iを格納している。ブロックアドレス4のメモリブロック102は、被乗算要素wj,iの1桁目のデータw1j,iを格納している。同様に、ブロックアドレス5、6のメモリブロック102は、被乗算要素wj,iの2桁目のデータw2j,i、及び3桁目のデータw3j,iをそれぞれ格納している。

0041

乗算要素のビット桁をc、被乗算要素のビット桁をdとする。c、dはそれぞれ、0以上の整数である。ここでは、乗算要素、及び被乗算要素が4ビットであるため、c、dは、それぞれ0,1、2,又は3となる。被乗算要素及び乗算要素が4ビットのデータであるため、積和演算装置100は、16回(=4×4)のステップ(以下、ステップ1〜ステップ16)を繰り返す。つまり、1回の積和演算が、16回のステップに時分割されて実行される。

0042

まず、ステップ1では、図8に示すように、デコーダ105は、複数の乗算要素aiの0ビット目のデータa00〜a0mをまとめた入力データを生成する。m個のデータa00〜a0mをまとめて、入力データa0iとする。デコーダ105はブロックアドレス3のメモリブロック102に、入力データa0iを出力する。ブロックアドレス3のメモリブロック102は、a0iとw0j,iとの積和演算結果(第1のステップ演算値O0_01とする)を制御部106に出力する。制御部106は、ビットシフタ1062において第1のステップ演算値O0_01に乗算要素のビット桁(c=0)に応じた値(1=2c)と、被乗算要素のビット桁d(d=0)に応じた値(1=2d)を乗じて、乗算値を求める。乗算値は累積加算器1063に加算される。制御部106は、累積加算器1063において乗算値を累積加算値として保存する。ステップ1での累積加算値はO0_01である。

0043

ステップ2では、ステップ1と同様に、データa00〜a0mが入力データとなる。デコーダ105はブロックアドレス4のメモリブロック102に、入力データa0iを出力する。ブロックアドレス4のメモリブロック102は、a0iとw1j,iとの積和演算結果(第2のステップ演算値O0_11とする)を制御部106に出力する。制御部106は、ビットシフタ1062において第2のステップ演算値O0_11に、乗算要素のビット桁c(c=0)に応じた値(1=2c)と、被乗算要素のビット桁d(d=1)に応じた値(2=2d)を乗じて、乗算値cdO0_11を求める。そして、制御部106は、累積加算器1063において乗算値cdO0_11を第1のステップでの累積加算値に加算して、累積加算値を更新する。ステップ2での累積加算値は、2×O0_11+O0_01となる。

0044

ステップ3では、ステップ1、2と同様に、データa00〜a0mが入力データとなる。デコーダ105はw2j,iを格納しているブロックアドレス5のメモリブロック102に、入力データa0iを出力する。ブロックアドレス5のメモリブロック102は、a0iとw2j,iとの積和演算結果(第3のステップ演算値O0_21とする)を制御部106に出力する。制御部106は、ビットシフタ1062において第3のステップ演算値O0_21に乗算要素のビット桁c(c=0)に応じた値(1=2c)と、被乗算要素のビット桁d(d=2)に応じた値(4=2d)を乗じて、乗算値cdO0_21とする。そして、制御部106は、累積加算器1063において乗算値cdO0_21を第2のステップでの累積加算値に加算して、累積加算値を更新する。ステップ3での累積加算値は、4×O0_21+2×O0_11+O0_01となる。

0045

ステップ4では、ステップ1、2と同様に、データa00〜a0mが入力データとなる。デコーダ105はw3j,iを格納しているブロックアドレス6のメモリブロック102に、入力データa0iを出力する。ブロックアドレス6のメモリブロック102は、a0iとw3j,iとの積和演算結果(第4のステップ演算値O0_31とする)を制御部106に出力する。制御部106は、ビットシフタ1062において第4のステップ演算値に乗算要素のビット桁cに応じた値(1=2c)と、被乗算要素のビット桁d(d=3)に応じた値(8=2d)を乗じて、乗算値cdO0_31とする。そして、制御部106は、累積加算器1063において乗算値cdO0_31を第3のステップでの累積加算値に加算して、累積加算値を更新する。ステップ4での累積加算値は、8×O0_31+4×O0_21+2×O0_11+O0_01となる。

0046

ステップ5では、デコーダ105は、複数の乗算要素aiの0ビット目のデータa10〜a0mをまとめた入力データを生成する。m個のデータa10〜a1mをまとめて、入力データa1iとする。デコーダ105はw0j,iを格納しているブロックアドレス3のメモリブロック102に、入力データa1iを出力する。ブロックアドレス3のメモリブロック102は、a1iとw0j,iとの積和演算結果(第5のステップ演算値O1_01とする)を制御部106に出力する。

0047

制御部106は、ビットシフタ1062において第5のステップ演算値O1_01に乗算要素のビット桁c(c=1)に応じた値(2=2c)と、被乗算要素のビット桁d(d=0)に応じた値(1=2d)を乗じて、乗算値cdO1_01とする。そして、制御部106は、累積加算器1063において乗算値cdO1_01を第4のステップでの累積加算値に加算して、累積加算値を更新する。ステップ5での累積加算値は、2×O1_01+8×O0_31+4×O0_21+2×O0_11+O0_01となる。

0048

以下、積和演算装置100は、上記の処理をステップ16まで繰り返し行う。図6は、ステップ1〜16における乗算要素のビット桁と、ブロックアドレスを示している。図6に示すビット桁とブロックアドレスに従って、ステップ6〜16が実施される。また、制御部106は、ビットシフタ1062において各ステップでの積和演算結果Oc_djに、乗算要素のビット桁cに対応する値(2c)と、被乗算要素のビット桁dに対応する値(2d)とを乗じて、乗算値を求めている。そして、制御部106は、累積加算器1063において乗算値を累積加算して、累積加算値を上書き保存する。ステップ16までの処理が完了した後、制御部106は、書き込みデータ生成部1064にて、累積加算結果を乗算要素の最大ビット桁のデータに変換し、データメモリ104に保存する。積和演算装置100は、積和演算と累積加算を繰り返すことによって、メモリブロック102を用いた多値ビットでの積和演算を実現する。

0049

上記の処理を行うため、デコーダ105は、m個の乗算要素の同じビット桁となるm個の1ビットデータを抽出して、入力データとする。mビットデータである入力データは、メモリブロック102の列方向に並べられて、メモリブロック102に供給される。

0050

メモリブロック102の列方向には、被乗算要素の同じビット桁のデータが格納されている。そして、メモリブロック102の列方向に複数の乗算要素の同じビット桁のデータが入力される。メモリブロック102は、被乗算要素のあるビット桁と、乗算要素のあるビット桁のデータの積和を取る。そして、メモリブロック102は、ビット桁の組み合わせを順番に変えていくことで、積和を繰り返し求めている。さらに、積和にビット桁に応じた値を乗じた乗算値の総和が、次の層の積和演算の乗算要素となる。このようにすることで、畳み込み演算のための積和演算を効率よく行うことができる。積和演算装置100は、次の乗算要素を用いて、同様に積和演算を行う。

0051

本実施形態では、被乗算要素をビット桁毎に分割して、各ビットを異なるメモリブロックに保存している。さらに、入力データとなる乗算要素を桁毎に分割して、各桁のデータを時分割でメモリブロック102に供給している。これにより、メモリブロックを用いた多値ビットの積和演算を実現することができる。

0052

この構成を用いることで、メモリ素子を用いた積和演算回路アレイを含むプロセッサに対して、デジタル表現のまま多値入力データを生成することができる。よって、DAC等の追加コスト無しで多ビットの積和演算が実現可能となる。例えば、メモリブロックに入力データを入力する入力段において、DACを設ける必要がなくなる。

0053

上記の説明では、被乗算要素、及び乗算要素の各桁のデータを降順に処理する例を説明したが、データの処理する順番は特に限定されるものではない。例えば、デコーダ105が、被乗算要素、及び乗算要素の各桁のデータを降順に処理されるように、データをブロックアレイ103に供給してもよい。具体的には、被乗算要素の桁を降順に処理する場合、入力データが被乗算要素の3桁目のデータを格納するメモリブロック102に供給された後、2桁目のデータを格納するメモリブロック102に供給されればよい。また、乗算要素の桁を降順に処理する場合、デコーダが、複数の乗算要素の3桁目のデータを入力データとして生成した後、2桁目のデータを入力データとして生成すればよい。

0054

また、本実施の形態では、乗算要素、及び被乗算要素のデータが4ビットデータであるとして説明したが、これらのデータは4ビットに限られるものではない。被乗算要素を格納するブロックメモリを増やすことで、被乗算要素の桁数を任意に拡張する事が可能である。また、入力とする乗算要素のビット数も時分割数ステップ数)を増やすことで任意に拡張可能であり、同一のハードウェア構成を用いながら、アプリケーション毎に認識精度や処理速度に応じて最適なビット数を設定可能となる。

0055

実施の形態2.
本実施の形態では、データメモリ104の保存形式と、入力データ生成部207の構成とが実施の形態1と異なっている。なお、データメモリ104の保存形式と入力データ生成部207以外の基本的な構成は、実施の形態1と同様である。例えば、メモリブロック102におけるデータの保存形式は、実施の形態1と同様である。実施の形態1と同様の内容については、適宜説明を省略する。

0056

本実施の形態では、データメモリ104の保存形式を改良し、ビットスケーラビリティを実現している。さらに、デコーダ105の回路構成を簡素化して、面積・速度について改善させることができる。図9は、比較例にかかる入力データ生成部207の構成を示すブロック図である。図10は、実施の形態2にかかる入力データ生成部207の構成を示すブロック図である。

0057

入力データ生成部207は、入力バッファ301と、選択回路302と、出力バッファ303と、を備えている。ここで、入力バッファ301のサイズは、16ビットとなっており、出力バッファ303のサイズが4ビットとなっている。以下、乗算要素のビット長K=1、2、4ビットと変える場合について説明する。

0058

入力バッファ301には、データメモリ104からの乗算要素のデータが入力される。入力バッファ301は、乗算要素の各ビット桁のデータを格納する。データメモリの保存形式に応じた順番で入力バッファ301がデータを格納している。図9図10では、K=1、2、4とした場合のデータメモリ104内における16ビットのデータの格納順が示されている。

0059

選択回路302は、入力バッファ301に入力されたデータを選択して、出力バッファ303に出力する。選択回路302は、入力バッファ301に格納された16ビットのデータから、4ビットのデータを選択する。出力バッファ303は、選択回路302が選択したデータを格納する。出力バッファ303は、格納したデータをまとめてメモリブロック102に出力する。出力バッファ303から出力されたデータは、1つのメモリブロック102に供給される。そして、メモリブロック102が、実施の形態1と同様に、積和演算を行う。

0060

以下の説明では、入力データのデータ長をN、データメモリ104のワード長をW、乗算要素のデータ長をKと示す。入力データのデータ長Nは、出力バッファ303のサイズに対応しており、図9図10ではN=4となっている。データメモリ104では、ワード長W単位で、データの書き込み、及び読み出しが行われる。データメモリ104のワード長Wは、入力バッファ301のサイズに対応しており、図9図10では、ワード長W=16(=24)となっている。乗算要素のデータ長Kは、乗算要素のビット桁数に対応している。乗算要素のデータ長Kは2の累乗、つまり、2nで示される整数とする(nは0以上の整数)。そして、

0061

図9に示す入力データ生成部207では、入力バッファ301が隣接するビットに同一の乗算要素を格納している。さらに、データメモリ104は、一般的なデータ格納フォーマットと同様に乗算要素順にデータを格納している。例えば、乗算要素が4ビットデータの場合(K=4)、1つの乗算要素a1のデータa01、a11、a21、a31が連続する4ビットに格納される。乗算要素a1の隣には、次の乗算要素a2のデータa02、a12、a22、a32が連続する4ビットに格納される。同様に、乗算要素が2ビットデータの場合(K=2)、1つの乗算要素のデータa01、a11が隣接する2ビットに格納される。乗算要素a1の隣には、次の乗算要素a2のデータa02、a12が連続する2ビットに格納される。乗算要素が1ビットデータの場合(K=1)、乗算要素a1〜a16のa01〜a016がこの順番で格納されている。

0062

入力データ生成部207の入力バッファ301が16ビットとなっている。選択回路302は、16ビットのデータからデータを選択して、出力バッファ303に出力する。このとき、選択回路302は、同じビット桁のデータが連続するように、データの並び順を変える必要がある。つまり、選択回路302は、連続する4つの乗算要素の同じビット桁のデータを選択する。よって、入力データ生成部207を異なるデータ長Kに対応させる場合、図9に示すように、選択回路302が複雑となる。よって、面積増加や速度低下を生じるおそれがある。

0063

従って、本実施の形態では、図10に示すような順番でデータメモリ104がデータを格納している。乗算要素のデータ長K=4ビットの場合は、図9と同様である。つまり、データメモリ104において、1つの乗算要素のデータは連続して格納され、かつ、乗算要素順にデータが格納されている。なお、乗算要素のビット桁は、0、1、2、3のように、昇順となっているが、降順となっていてもよい。

0064

乗算要素のデータ長K=2ビットの場合、データメモリ104において、図10に示すように、a01、a11、a05、a15、a02、a12、a06、a16、・・・の順番でデータが格納されている。つまり、データメモリ104において、1つの乗算要素のデータは連続して格納されているが、乗算要素順ではない順番でデータが格納されている。例えば、乗算要素a1の隣には、次の乗算要素a2ではない乗算要素a5のデータが格納されている。なお、乗算要素のビット桁は、0、1のように、昇順となっているが、降順となっていてもよい。

0065

乗算要素のデータ長K=1ビットの場合、データメモリ104において、図10に示すように、a01、a05、a09、a013、a02、a06、・・・の順番でデータが格納されている。つまり、データメモリ104において、乗算要素順ではない順番でデータが格納されている。例えば、乗算要素a1の隣には、次の乗算要素a2ではない乗算要素a5のデータが格納されている。

0066

データメモリ104のワード長W、乗算要素のデータ長K、乗算要素の最大データ長K_maxを用いると、1ワードi番目(0以上、W未満の整数)のデータakindexは、下記の式(1)で一般化することができる。

0067

なお、YmodXは、YをXで割った時の剰余であり、式(1)における商(つまり、i/K_max、W/K_max、及び、(i mod K_max)/K)の値は少数点以下を切り捨てた整数値とする。乗算要素のデータ長Kが2nの場合、(n+1)パターンのビットスケーラビリティを有するデコーダ105を実装することができる。1ワードのデータakindexの格納順が式(1)を満たすように、データメモリ104が乗算要素を格納する。つまり、制御部106が、式(1)を満たすような書き込み順で、複数の乗算要素の各ビットのデータをデータメモリ104に書き込む。また、式(1)ではkが昇順となっているが、降順となっていてもよい。

0068

以下、実施の形態2における処理について、説明する。図11は、メモリブロック102の演算フローを示す図である。図12は、各ステップにおける乗算要素のビット桁と、ブロックアドレスを示す表である。図11図12では、乗算要素のデータ長K=2とし、被乗算要素を2ビットデータとしている。積和演算装置100は、8回のステップ(以下、ステップ1〜ステップ8)を繰り返す。Mは、ワード長Wに含まれる乗算要素の数とする。図10のK=2ビットの例では、入力バッファ301にa1〜a8の乗算要素が格納されるため、M=8となる。典型的には、M=W/Kとなる。

0069

ブロックアドレス3〜6の4つのメモリブロック102には、被乗算要素のデータwj,iが格納されている。ブロックアドレス3のメモリブロック102には被乗算要素の0桁目のw10j,iが格納されている。ブロックアドレス4のメモリブロック102には、被乗算要素の1桁目のデータw11j,iが格納されている。ブロックアドレス5のメモリブロック102には被乗算要素の0桁目のw20j,iが格納されている。ブロックアドレス6のメモリブロック102には、被乗算要素の1桁目のデータw21j,iが格納されている。

0070

1つの積和演算に用いられる被乗算要素の同じビット桁のデータが2つのメモリブロック102に分割されて格納されている。具体的には、ブロックアドレス3,5のメモリブロック102は、1つの積和演算に用いられる被乗算要素の0ビット目のデータを格納する。ブロックアドレス4、6のメモリブロック102は、1つの積和演算に用いられる被乗算要素の1ビット目のデータを格納する。ブロックアドレス3、4のメモリブロック102は、複数の被乗算要素の異なるビット桁のデータを格納する。ブロックアドレス5、6のメモリブロック102は、複数の被乗算要素の異なるビット桁のデータを格納する。

0071

ステップ1では、デコーダ105が、1からM/2番目までの複数の乗算要素に対して、0桁目のデータをまとめて、入力データとする。ここでは、上記のように、入力データ生成部207が、入力バッファ301のデータの一部を選択して、入力データとする。そして、ブロックアドレス3のメモリブロック102に、セレクタ206が入力データを供給する。メモリブロック102は、入力データと、メモリブロック102に格納されたデータとの積和演算結果(第1のステップ演算値とする)を制御部106に出力する。制御部106は、ビットシフタ1062において第1のステップ演算値に乗算要素のビット桁(c=0)に応じた値(1=2c)と、被乗算要素のビット桁d(d=0)に応じた値(1=2d)を乗じて乗算値とする。制御部106は、累積加算器1063において乗算値を累積加算値として保存する。

0072

ステップ2では、ステップ1と同様に、1からM/2番目までの複数の乗算要素の0桁目のデータが入力データとなる。ブロックアドレス4のメモリブロック102に、セレクタ206が入力データを供給する。メモリブロック102は、入力データと、メモリブロック102に格納されたデータとの積和演算結果(第2のステップ演算値とする)を制御部106に出力する。制御部106は、ビットシフタ1062において第2のステップ演算値に乗算要素のビット桁(c=0)に応じた値(1=2c)と、被乗算要素のビット桁d(d=1)に応じた値(2=2d)を乗じて、乗算値とする。制御部106は、累積加算器1063において前のステップで得られた累積加算値に乗算値を加えることで、累積加算値を更新する。

0073

ステップ3では、デコーダ105が、1からM/2番目までの複数の乗算要素に対して、1桁目のデータをまとめて、入力データとする。ブロックアドレス3のメモリブロック102に、セレクタ206が入力データを供給する。メモリブロック102は、入力データと、メモリブロック102に格納されたデータとの積和演算結果(第3のステップ演算値とする)を制御部106に出力する。制御部106は、ビットシフタ1062において第3のステップ演算値に乗算要素のビット桁(c=1)に応じた値(2=2c)と、被乗算要素のビット桁d(d=0)に応じた値(1=2d)を乗じて、乗算値とする。制御部106は、累積加算器1063において前のステップで得られた累積加算値に乗算値を加えることで、累積加算値を更新する。

0074

ステップ4では、ステップ3と同様に、1からM/2番目までの複数の乗算要素の1桁目のデータが入力データとなる。ブロックアドレス4のメモリブロック102に、セレクタ206が入力データを供給する。メモリブロック102は、入力データと、メモリブロック102に格納されたデータとの積和演算結果(第4のステップ演算値とする)を制御部106に出力する。制御部106は、ビットシフタ1062において第4のステップ演算値に乗算要素のビット桁(c=1)に応じた値(2=2c)と、被乗算要素のビット桁d(d=1)に応じた値(2=2d)を乗じて、乗算値とする。制御部106は、累積加算器1063において前のステップで得られた累積加算値に乗算値を加えることで、累積加算値を更新する。

0075

ステップ5では、デコーダ105が、(M/2+1)からM番目までの複数の乗算要素に対して、0桁目のデータをまとめて、入力データとする。ブロックアドレス5のメモリブロック102に、セレクタ206が入力データを供給する。メモリブロック102は、入力データと、メモリブロック102に格納されたデータとの積和演算結果(第5のステップ演算値とする)を制御部106に出力する。制御部106は、ビットシフタ1062において第5のステップ演算値に乗算要素のビット桁(c=0)に応じた値(1=2c)と、被乗算要素のビット桁d(d=0)に応じた値(1=2d)を乗じて、乗算値とする。制御部106は、累積加算器1063において前のステップで得られた累積加算値に乗算値を加えることで、累積加算値を更新する。

0076

ステップ6では、ステップ5と同様に、(M/2+1)からM番目までの複数の乗算要素の0桁目のデータが入力データとなる。ブロックアドレス6のメモリブロック102に、セレクタ206が入力データを供給する。メモリブロック102は、入力データと、メモリブロック102に格納されたデータとの積和演算結果(第6のステップ演算値とする)を制御部106に出力する。制御部106は、ビットシフタ1062において第6のステップ演算値に乗算要素のビット桁(c=0)に応じた値(1=2c)と、被乗算要素のビット桁d(d=1)に応じた値(2=2d)を乗じて、乗算値とする。制御部106は、累積加算器1063において前のステップで得られた累積加算値に乗算値を加えることで、累積加算値を更新する。

0077

ステップ7では、デコーダ105が、(M/2+1)からM番目までの複数の乗算要素に対して、1桁目のデータをまとめて、入力データとする。ブロックアドレス5のメモリブロック102に、セレクタ206が入力データを供給する。メモリブロック102は、入力データと、メモリブロック102に格納されたデータとの積和演算結果(第7のステップ演算値とする)を制御部106に出力する。制御部106は、ビットシフタ1062において第7のステップ演算値に乗算要素のビット桁(c=1)に応じた値(2=2c)と、被乗算要素のビット桁d(d=0)に応じた値(1=2d)を乗じて、乗算値とする。制御部106は、累積加算器1063において前のステップで得られた累積加算値に乗算値を加えることで、累積加算値を更新する。

0078

ステップ8では、ステップ7と同様に、(M/2+1)からM番目までの複数の乗算要素の1桁目のデータが入力データとなる。ブロックアドレス6のメモリブロック102に、セレクタ206が入力データを供給する。メモリブロック102は、入力データと、メモリブロック102に格納されたデータとの積和演算結果(第8のステップ演算値とする)を制御部106に出力する。制御部106は、ビットシフタ1062において第8のステップ演算値に乗算要素のビット桁(c=1)に応じた値(2=2c)と、被乗算要素のビット桁d(d=1)に応じた値(2=2d)を乗じて、乗算値とする。制御部106は、累積加算器1063において前のステップで得られた累積加算値に乗算値を加えることで、累積加算値を更新する。ステップ8までの処理が完了した後、制御部106は、書き込みデータ生成部1064にて、累積加算結果を乗算要素の最大ビット桁のデータに変換し、データメモリ104に保存する。

0079

次に、乗算要素のデータ長K=1の場合について、図13,及び図14を用いて説明する。図13は、メモリブロックの演算フローを示す図である。図14は、各ステップにおける乗算要素のビット桁と、ブロックアドレスを示す表である。図13図14では、乗算要素のデータ長K=1とし、被乗算要素を1ビットデータとしている。積和演算装置100は、4回のステップ(以下、ステップ1〜ステップ4)を繰り返す。以下の説明では、Mは、ワード長Wに含まれる乗算要素の数とする。図10のK=1ビットの例では、入力バッファ301にa1〜a16の乗算要素が格納されているため、M=16となる。

0080

ブロックアドレス3〜6の4つのメモリブロック102には、被乗算要素のデータwj,iが格納されている。ブロックアドレス3のメモリブロック102には被乗算要素の0桁目のw10j,iが格納されている。ブロックアドレス4のメモリブロック102には、被乗算要素の0桁目のデータw20j,iが格納されている。ブロックアドレス5のメモリブロック102には被乗算要素の0桁目のw30j,iが格納されている。ブロックアドレス6のメモリブロック102には、被乗算要素の0桁目のデータw41j,iが格納されている。

0081

1つの積和演算に用いられる被乗算要素の同じビット桁のデータが4つのメモリブロック102に分割されて格納されている。具体的には、ブロックアドレス3〜6のメモリブロック102は、全て、1回の積和演算に用いられる被乗算要素の0ビット目のデータを格納している。

0082

ステップ1では、デコーダ105が、1からM/4番目までの複数の乗算要素に対して、0桁目のデータをまとめて、入力データとする。ここでは、上記のように、入力データ生成部207が、入力バッファ301のデータの一部を選択して、入力データとする。そして、ブロックアドレス3のメモリブロック102に、セレクタ206が入力データを供給する。メモリブロック102は、入力データと、メモリブロック102に格納されたデータとの積和演算結果(第1のステップ演算値とする)を制御部106に出力する。制御部106は、ビットシフタ1062において第1のステップ演算値に乗算要素のビット桁(c=0)に応じた値(1=2c)と、被乗算要素のビット桁d(d=0)に応じた値(1=2d)を乗じて、乗算値とする。制御部106は、累積加算器1063において乗算値を累積加算値として保存する。

0083

ステップ2では、デコーダ105が、(M/4+1)からM/2番目までの複数の乗算要素に対して、0桁目のデータをまとめて、入力データとする。ブロックアドレス4のメモリブロック102に、セレクタ206が入力データを供給する。メモリブロック102は、入力データと、メモリブロック102に格納されたデータとの積和演算結果(第2のステップ演算値とする)を制御部106に出力する。制御部106は、ビットシフタ1062において第2のステップ演算値に乗算要素のビット桁(c=0)に応じた値(1=2c)と、被乗算要素のビット桁d(d=0)に応じた値(1=2d)を乗じて、乗算値とする。制御部106は、累積加算器1063において前のステップで得られた累積加算値に乗算値を加えることで、累積加算値を更新する。

0084

ステップ3では、デコーダ105が、(M/2+1)から(3M/4)番目までの複数の乗算要素に対して、0桁目のデータをまとめて、入力データとする。ブロックアドレス5のメモリブロック102に、セレクタ206が入力データを供給する。メモリブロック102は、入力データと、メモリブロック102に格納されたデータとの積和演算結果(第3のステップ演算値とする)を制御部106に出力する。制御部106は、ビットシフタ1062において第3のステップ演算値に乗算要素のビット桁(c=0)に応じた値(1=2c)と、被乗算要素のビット桁d(d=0)に応じた値(1=2d)を乗じて、乗算値とする。制御部106は、累積加算器1063において前のステップで得られた累積加算値に乗算値を加えることで、累積加算値を更新する。

0085

ステップ4では、デコーダ105が、(3M/4+1)からM番目までの複数の乗算要素に対して、0桁目のデータをまとめて、入力データとする。ブロックアドレス6のメモリブロック102に、セレクタ206が入力データを供給する。メモリブロック102は、入力データと、メモリブロック102に格納されたデータとの積和演算結果(第4のステップ演算値とする)を制御部106に出力する。制御部106は、ビットシフタ1062において第4のステップ演算値に乗算要素のビット桁(c=0)に応じた値(1=2c)と、被乗算要素のビット桁d(d=0)に応じた値(1=2d)を乗じて、乗算値とする。制御部106は、累積加算器1063において前のステップで得られた累積加算値に乗算値を加えることで、累積加算値を更新する。ステップ4までの処理が完了した後、制御部106は、書き込みデータ生成部1064にて、累積加算結果を乗算要素の最大ビット桁のデータに変換し、データメモリ104に保存する。

0086

本実施の形態では、k(kは0以上K以下の任意の整数であり、Kは2の累乗の整数)を乗算要素の桁数とした場合に、データメモリ104の1ワードのi番目(iは、0以上、W未満の整数)に格納されるデータakindexが上記の式(1)を満たすように格納されている。

0087

これにより、メモリブロックに対する入力データを生成する回路の規模や速度遅延を抑えつつ、ビットスケーラビリティを実現する事が可能となる。入力データ生成部207の選択回路302が容易に適切なデータを選択することができる。例えば、K=1,2,4のスケラ−ビリティを有する場合、図10では、選択回路302が、入力バッファ301の4つのビットから1つのビットを選択すればよい。これに対して、図9の構成では、選択回路302が選択する入力バッファ301のビットが多数となる。よって、本実施の形態にかかる構成により、回路の規模や速度遅延を抑制することができる・

0088

実施の形態3.
一般的にメモリセルアレイを用いた積和演算技術において、素子特性ばらつきの影響によって計算結果に対して誤差が生じるおそれがある。このような誤差によって、アプリケーションにおける性能劣化を引き起こすことが懸念される。チップ毎に異なる素子ランダムなばらつきに対する方法として、実デバイス入出力結果を用いて再度機械学習を行うという手法が用いられている。

0089

機械学習を行う場合、アプリケーションによっては、数万個のデータを用いて、以下の(a)〜(c)の処理を数百回繰り返す必要がある。
(a)暫定パラメータでの演算を行う。
(b)期待値との誤差を計算する。
(c)パラメータを調整する。
このため、ニューラルネットワークの規模が大きくなる程、学習に長時間を要する。また、チップ個別に再学習をかける場合のコストは非常に大きい。

0090

実施形態3においては、再学習は行わず、ばらつきによる認識精度低下を防ぐ手法を示す。図15に実施形態3にかかる積和演算装置100のシステム構成図を示す。図15に示す積和演算装置100では、図1の構成に対して、CPU111と、書き込み制御部112と、チップ110と、評価装置120とが追加されている。具体的には、チップ110は、実施の形態1の積和演算装置100と、書き込み制御部112とを備えている。そして、評価装置120がチップ110と接続されている。評価装置120は、積和演算装置100の演算結果を評価する。

0091

メモリ素子アレイを用いた積和演算技術においては、事前に機械学習で得たパラメータが被乗算要素としてメモリ領域に書き込まれている。本実施形態においては書き込み制御部112が、乗算要素の書き込み先のアドレスのみを変化させる。つまり、書き込み制御部112が、書き込み先のアドレスをシフトさせる。積和演算装置100は、それぞれのアドレス毎に積和演算を行う。そして、評価装置120が、積和演算結果を用いて、シフトされたアドレス毎に、認識精度の評価を行っている。

0092

評価装置120は、例えば、チップ110とは別に設けられたパーソナルコンピュータなど処理装置であってもよい。あるいは、チップ110上に搭載されたCPU111が評価の一部、または全てを行ってもよい。例えば、積和演算装置100が画像認識用ニューラルネットワークの積和演算を行う場合、認識された画像の精度が最も高くなるオフセットアドレスを変えていく。

0093

図16に書き込みデータのアドレスシフトと、その評価イメージを示す。被乗算要素は0/1の組み合わせである。そして、被乗算要素は、特性ばらつきの大きいメモリ素子に対して、1のデータが格納された場合に演算結果に対する誤差が大きくなる。一方で、ニューラルネットワーク向けのパラメータは0を中心に分布させる手法が広く使われており、多くのデータが0という傾向がある。従って、被乗算要素を書き込むアドレスを行単位、もしくはブロック単位でシフトさせる。例えば、図16では、書き込みアドレス401を1行ずつずらしている。
このようにすることで、演算精度に致命的な悪影響を及ぼす特性ばらつきの大きい素子に対して0が書き込まれることになる。つまり、書き込みアドレス401をずらすことで、積和演算結果に差が生じるため、認識精度に差分が発生する。例えば、評価装置120は、素子特性の大きいメモリ素子に対して、0が書き込まれるようなオフセットアドレスを求める。このオフセットアドレスは、認識精度が最も高くなる最適アドレスとなる。

0094

図17は、演算精度調整フローを示す。まず、書き込み制御部112がアドレスを設定する(S11)。ここでは、初期値として、オフセットが0となるアドレスが指定される。次に、積和演算装置100が演算を実行する(S12)。ここでは、実施の形態1で示した積和演算が実施される。そして、積和演算装置100が繰り返しの積和演算を行って、最終的な演算結果を評価装置120に出力する。

0095

次に、評価装置120が、演算結果を評価する(S13)。つまり、評価装置120が積和演算の演算結果に基づいて、認識精度を評価する。例えば、積和演算装置100が、画像認識用ニューラルネットワークにおける積和演算を行う場合、複数の画像サンプルが用意されている。そして、積和演算装置100が、1つの画像サンプルに基づくデータをデータメモリに格納する。S12では、積和演算装置100がそれぞれの画像サンプルに対して、積和演算を行う。1つのオフセットアドレスを用いて、画像のそれぞれに対する積和演算を行う。評価装置120が、複数の画像に対して、画像認識を行って、それぞれの画像が正しく認識されたか否かを評価する。そして、評価装置120は、それぞれの画像の認識結果を評価して、認識精度を示す数値を保存する。

0096

次に、書き込み制御部112がアドレスシフトの探索が終了したか否かを判定する(S14)。探索が終了していない場合(S14のNO)、書き込み制御部112がアドレスをシフトさせる(S15)。そして、シフトしたアドレスで、S12、及びS13の処理が実行される。これにより、評価装置120が、シフトしたアドレスでの認識精度を評価することができる。なお、シフトさせるアドレスは、ブロックアドレスでもよく、ブロックアドレスの行アドレスでもよい。あるいは、書き込み制御部112は、ブロックアドレスと行アドレスの両方を順番にシフトさせてもよい。

0097

探索が終了した場合(S14のYES)、評価装置120は、最適アドレスの設定を保存する(S16)。つまり、書き込み制御部112がアドレスを順番にシフトさせていき、評価装置120が、全てのシフトアドレスに対して、認識精度を評価する。そして、評価装置120は、全シフトアドレスの中から、最も認識精度が高くなったアドレスをオフセットアドレスとして記録する。このようにして、事前テストが終了する。

0098

図18は、本実施の形態にかかるデコーダ105の構成を示すブロック図である。デコーダ105は、図3の構成に対して、アドレスシフト部220が追加されている。アドレスシフト部220は、書き込みアドレスをシフトする機能を有している。評価装置120は、事前テストで得られた最適なオフセットアドレスの情報が積和演算装置100に出力する。

0099

例えば、アドレスシフト部220は、事前テストで得られた最適なオフセットアドレスの情報を制御部106から受け取る。そして、アドレスシフト部220は、乗算要素の書き込み先をオフセットアドレス情報に応じてシフトさせる。このようにすることで、一度学習させたパラメータを利用しながらメモリ素子の特性ばらつきの影響を抑えることが可能となる。本実施形態では、再学習無しで認識精度劣化を抑制する事が可能となる。よって、メモリデバイスごとにDNNによる推論プログラムを実装するための開発時間の短縮が可能となる。

0100

本実施の形態1〜3にかかる積和演算装置100は、自動運転監視カメラ等において、エンドポイントでのDNN処理用積和演算処理に好適である。本実施の形態にかかる積和演算装置、及び方法によって、電力効率を向上する。さらに、積和演算装置100を用いることで、画像認識などのアプリケーション全体を効率よく動作させることができる。特に、積和演算装置100は、ロボット、監視カメラ、ドローンなどの自動制御等の応用に好適である。

0101

上記の積和演算装置100の一部、又は全部は、半導体メモリなどの半導体回路を有するハードウェアにより実現することが可能となる。さらには、積和演算装置100の一部の機能は、ソフトウェアプログラムにより実現されていてもよい。

0102

その他の実施の形態
図19は、その他の実施の形態にかかる積和演算装置100の構成を示すブロック図である。積和演算装置100は、複数のメモリブロック102と、入力データ生成部207と、制御部106と、データメモリ104とを備えている。複数のメモリブロック102は、複数の被乗算要素を格納して、入力データに対して積和演算を実行する。1つのメモリブロック102は、複数の前記被乗算要素の同じビット桁の第1のビット値を1ビット値として格納する。入力データ生成部207は、複数の乗算要素から同じビット桁の第2のビット値を抽出することで、前記入力データを生成する。データメモリ104は、メモリブロック102の積和演算に応じた値を累積加算する。データメモリ104は、前記累積加算により得られた累積加算値を、次の積和演算の前記乗算要素として格納する。これにより、効率よく積和演算を行うことができる。

0103

積和演算方法は、以下のステップ(A)〜(G)を備えている。
(A)データメモリから複数の乗算要素を読み出すステップ。
(B)複数の被乗算要素の同じビット桁の第1のビット値を1ビット値として格納する複数のメモリブロックから、1つのメモリブロックを選択するステップ。
(C)前記複数の乗算要素から同じビット桁の第2のビット値を抽出することで、入力データを生成するステップ。
(D)前記入力データを、選択された前記1つのメモリブロックに入力するステップ。
(E)前記メモリブロックが、前記第1ビット値と前記第2のビット値とを用いて、積和演算を行うステップ。
(F)メモリブロックの前記積和演算に応じた値を累積加算するステップ。
(G)前記累積加算により得られた累積加算値を、次の積和演算の前記乗算要素として、前記データメモリに格納するステップ。
これにより、効率よく積和演算を行うことができる。

0104

また、上述したプログラムは、様々なタイプの非一時的なコンピュータ可読媒体を用いて格納され、コンピュータに供給することができる。非一時的なコンピュータ可読媒体は、様々なタイプの実体のある記録媒体を含む。非一時的なコンピュータ可読媒体の例は、磁気記録媒体(例えばフレキシブルディスク磁気テープハードディスクドライブ)、光磁気記録媒体(例えば光磁気ディスク)、CD−ROM(Read Only Memory)、CD−R、CD−R/W、半導体メモリ(例えば、マスクROMPROM(Programmable ROM)、EPROM(Erasable PROM)、フラッシュROM、RAM(Random Access Memory))を含む。また、プログラムは、様々なタイプの一時的なコンピュータ可読媒体によってコンピュータに供給されてもよい。一時的なコンピュータ可読媒体の例は、電気信号光信号、及び電磁波を含む。一時的なコンピュータ可読媒体は、電線及び光ファイバ等の有線通信路、又は無線通信路を介して、プログラムをコンピュータに供給できる。

0105

以上、本発明者によってなされた発明を実施の形態に基づき具体的に説明したが、本発明は既に述べた実施の形態に限定されるものではなく、その要旨を逸脱しない範囲において種々の変更が可能であることはいうまでもない。

0106

100積和演算装置
101メモリセル
102メモリブロック
103ブロックアレイ
104データメモリ
105デコーダ
106 制御部
107命令メモリ
111 CPU
112書き込み制御部
120評価用PC
202 第2ビットカウンタ
203 第1ビットカウンタ
204アドレス保持部
205ブロックアドレス生成部
206セレクタ
207 入力データ生成部

ページトップへ

この技術を出願した法人

この技術を発明した人物

ページトップへ

関連する挑戦したい社会課題

該当するデータがありません

関連する公募課題

該当するデータがありません

ページトップへ

技術視点だけで見ていませんか?

この技術の活用可能性がある分野

分野別動向を把握したい方- 事業化視点で見る -

(分野番号表示ON)※整理標準化データをもとに当社作成

ページトップへ

おススメ サービス

おススメ astavisionコンテンツ

新着 最近 公開された関連が強い技術

この 技術と関連性が強い技術

関連性が強い 技術一覧

この 技術と関連性が強い人物

関連性が強い人物一覧

この 技術と関連する社会課題

該当するデータがありません

この 技術と関連する公募課題

該当するデータがありません

astavision 新着記事

サイト情報について

本サービスは、国が公開している情報(公開特許公報、特許整理標準化データ等)を元に構成されています。出典元のデータには一部間違いやノイズがあり、情報の正確さについては保証致しかねます。また一時的に、各データの収録範囲や更新周期によって、一部の情報が正しく表示されないことがございます。当サイトの情報を元にした諸問題、不利益等について当方は何ら責任を負いかねることを予めご承知おきのほど宜しくお願い申し上げます。

主たる情報の出典

特許情報…特許整理標準化データ(XML編)、公開特許公報、特許公報、審決公報、Patent Map Guidance System データ