(57)【特許請求の範囲】
【請求項１】
入力データに対して畳み込み演算を行う畳み込み演算回路と、
前記畳み込み演算回路の畳み込み演算出力データに対して量子化演算を行う量子化演算回路と、
前記畳み込み演算回路を動作させる畳み込み演算回路用の命令コマンドと、前記量子化演算回路を動作させる量子化演算回路用の命令コマンドと、を別々にメモリから読み出す命令フェッチユニットと、
を備える、
ニューラルネットワーク回路。
【請求項２】
前記畳み込み演算回路は、前記畳み込み演算回路用の命令コマンドに基づき、前記畳み込み演算回路を制御する前記畳み込み演算回路用のステートコントローラを有し、
前記量子化演算回路は、前記量子化演算回路用の命令コマンドに基づき、前記量子化演算回路を制御する前記量子化演算回路用のステートコントローラを有する、
請求項１に記載のニューラルネットワーク回路。
【請求項３】
前記命令フェッチユニットは、
前記畳み込み演算回路を動作させる前記畳み込み演算回路用の命令コマンドを読み出し、前記畳み込み演算回路に供給する第一フェッチユニットと、
前記量子化演算回路を動作させる前記量子化演算回路用の命令コマンドを読み出し、前記量子化演算回路に供給する第二フェッチユニットと、
を有する、
請求項１または請求項２に記載のニューラルネットワーク回路。
【請求項４】
前記第一フェッチユニットは、
前記畳み込み演算回路用の命令コマンドが格納された前記メモリのメモリアドレスを保持する命令ポインタと、
格納された前記畳み込み演算回路用の命令コマンドのコマンド数を保持する命令カウンタと、
を有する、
請求項３に記載のニューラルネットワーク回路。
【請求項５】
前記入力データを格納する第一メモリと、
前記畳み込み演算出力データを格納する第二メモリと、
をさらに備え、
前記量子化演算回路の量子化演算出力データは、前記第一メモリに格納されて、
前記第一メモリに格納された前記量子化演算出力データは、前記畳み込み演算回路に前記入力データとして入力される、
請求項１から請求項４のいずれか一項に記載のニューラルネットワーク回路。
【請求項６】
前記第一メモリと、前記畳み込み演算回路と、前記第二メモリと、前記量子化演算回路とは、ループ状に形成されている、
請求項５に記載のニューラルネットワーク回路。
【請求項７】
前記畳み込み演算回路用の命令コマンドおよび前記量子化演算回路用の命令コマンドは、前記メモリから前記命令フェッチユニットによって外部ホストＣＰＵが接続される外部バス経由で読み出される、
請求項５に記載のニューラルネットワーク回路。
【請求項８】
前記第一メモリまたは前記第二メモリを経由するデータフローを制御するセマフォをさらに備え、
前記畳み込み演算回路は、前記畳み込み演算回路用の命令コマンドに基づいて動作する際に、前記セマフォを操作し、
前記量子化演算回路は、前記量子化演算回路用の命令コマンドに基づいて動作する際に、前記セマフォを操作する、
請求項５から請求項７のいずれか一項に記載のニューラルネットワーク回路。
【請求項９】
前記セマフォは、前記第二メモリにおいて所定のサイズのデータを格納可能なメモリ領域のうち、前記畳み込み演算回路によりデータが書き込み済みで前記量子化演算回路によって読み出し可能な前記メモリ領域の数を示す第二リードセマフォを有し、
前記畳み込み演算回路は、前記畳み込み演算回路用の命令コマンドに基づく前記畳み込み演算を完了したとき、前記第二リードセマフォに対してＶ操作を行い、
前記量子化演算回路は、前記量子化演算回路用の命令コマンドに基づく前記量子化演算を開始するとき、前記第二リードセマフォに対してＰ操作を行う、
請求項８に記載のニューラルネットワーク回路。
【請求項１０】
前記セマフォは、前記第二メモリにおいて所定のサイズのデータを格納可能な前記メモリ領域のうち、前記量子化演算回路によってデータが読み出し済みで前記畳み込み演算回路によって他のデータを書き込み可能な前記メモリ領域の数を示す第二ライトセマフォをさらに有し、
前記量子化演算回路は、前記量子化演算回路用の命令コマンドに基づく前記量子化演算を完了したとき、前記第二ライトセマフォに対してＶ操作を行い、
前記畳み込み演算回路は、前記畳み込み演算回路用の命令コマンドに基づく前記畳み込み演算を開始するとき、前記第二ライトセマフォに対してＰ操作を行う、
請求項９に記載のニューラルネットワーク回路。
【請求項１１】
入力データに対して畳み込み演算を行う畳み込み演算回路と、
前記畳み込み演算回路の畳み込み演算出力データに対して量子化演算を行う量子化演算回路と、
前記畳み込み演算回路を動作させる畳み込み演算回路用の命令コマンドと、前記量子化演算回路を動作させる量子化演算回路用の命令コマンドと、をメモリから読み出す命令フェッチユニットと、
を備えるニューラルネットワーク回路の制御方法であって、
前記命令フェッチユニットに、前記畳み込み演算回路用の命令コマンドと量子化演算回路用の命令コマンドとを別々に前記メモリから読み出させて、前記畳み込み演算回路と前記量子化演算回路とに対して前記命令コマンドを別々に供給させるステップと、
供給された前記命令コマンドに基づいて前記畳み込み演算回路と前記量子化演算回路とを並列して動作させるステップと、
を有する、
ニューラルネットワーク回路の制御方法。
【請求項１２】
前記ニューラルネットワーク回路は、データフローを制御するセマフォをさらに備え、
前記畳み込み演算回路用の命令コマンドに基づいて動作する前記畳み込み演算回路に、前記セマフォを操作させるステップと、
前記量子化演算回路用の命令コマンドに基づいて動作する前記量子化演算回路に、前記セマフォを操作させるステップと、
をさらに有する、
請求項１１に記載のニューラルネットワーク回路の制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ニューラルネットワーク回路およびニューラルネットワーク回路の制御方法に関する。
【背景技術】
【０００２】
近年、畳み込みニューラルネットワーク（Ｃｏｎｖｏｌｕｔｉｏｎａｌ  Ｎｅｕｒａｌ  Ｎｅｔｗｏｒｋ：ＣＮＮ）が画像認識等のモデルとして用いられている。畳み込みニューラルネットワークは、畳み込み層やプーリング層を有する多層構造であり、畳み込み演算等の多数の演算を必要とする。畳み込みニューラルネットワークによる演算を高速化する演算手法が様々考案されている（特許文献１など）。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開２０１８−０７７８２９号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
一方で、ＩｏＴ機器などの組み込み機器においても畳み込みニューラルネットワークを利用した画像認識等を実現することが望まれている。組み込み機器においては、特許文献1等に記載された大規模な専用回路を組み込むことは難しい。また、ＣＰＵやメモリ等のハードウェアリソースが限られた組み込み機器においては、畳み込みニューラルネットワークの十分な演算性能をソフトウェアのみにより実現することは難しい。
【０００５】
上記事情を踏まえ、本発明は、ＩｏＴ機器などの組み込み機器に組み込み可能かつ高性能なニューラルネットワーク回路およびニューラルネットワーク回路の制御方法を提供することを目的とする。
【課題を解決するための手段】
【０００６】
上記課題を解決するために、この発明は以下の手段を提案している。
本発明の第一の態様に係るニューラルネットワーク回路は、入力データに対して畳み込み演算を行う畳み込み演算回路と、前記畳み込み演算回路の畳み込み演算出力データに対して量子化演算を行う量子化演算回路と、前記畳み込み演算回路を動作させる畳み込み演算回路用の命令コマンドと、前記量子化演算回路を動作させる量子化演算回路用の命令コマンドと、を別々に外部メモリから読み出す命令フェッチユニットと、を備える。
【０００７】
本発明の第二の態様に係るニューラルネットワーク回路の制御方法は、入力データに対して畳み込み演算を行う畳み込み演算回路と、前記畳み込み演算回路の畳み込み演算出力データに対して量子化演算を行う量子化演算回路と、前記畳み込み演算回路を動作させる畳み込み演算回路用の命令コマンドと、前記量子化演算回路を動作させる量子化演算回路用の命令コマンドと、をメモリから読み出す命令フェッチユニットと、を備えるニューラルネットワーク回路の制御方法であって、前記命令フェッチユニットに、前記畳み込み演算回路用の命令コマンドと量子化演算回路用の命令コマンドとを別々に前記メモリから読み出させて、前記畳み込み演算回路と前記量子化演算回路とに対して前記命令コマンドを別々に供給させるステップと、供給された前記命令コマンドに基づいて前記畳み込み演算回路と前記量子化演算回路とを並列して動作させるステップと、を有する。
【発明の効果】
【０００８】
本発明のニューラルネットワーク回路は、ＩｏＴ機器などの組み込み機器に組み込み可能かつ高性能である。本発明のニューラルネットワーク回路の制御方法は、ニューラルネットワーク回路の演算処理能力を向上できる。
【図面の簡単な説明】
【０００９】
【図１】畳み込みニューラルネットワークを示す図である。
【図２】畳み込み層が行う畳み込み演算を説明する図である。
【図３】畳み込み演算のデータの展開を説明する図である。
【図４】第一実施形態に係るニューラルネットワーク回路の全体構成を示す図である。
【図５】同ニューラルネットワーク回路の動作例を示すタイミングチャートである。
【図６】同ニューラルネットワーク回路の他の動作例を示すタイミングチャートである。
【図７】同ニューラルネットワーク回路のコントローラのＩＦＵとＤＭＡＣ等とを接続する専用配線を示す図である。
【図８】同ＤＭＡＣの制御回路のステート遷移図である。
【図９】セマフォによる同ニューラルネットワーク回路の制御を説明する図である。
【図１０】第一データフローのタイミングチャートである。
【図１１】第二データフローのタイミングチャートである。
【発明を実施するための形態】
【００１０】
（第一実施形態）
本発明の第一実施形態について、図１から図１１を参照して説明する。
図１は、畳み込みニューラルネットワーク２００（以下、「ＣＮＮ２００」という）を示す図である。第一実施形態に係るニューラルネットワーク回路１００（以下、「ＮＮ回路１００」という）が行う演算は、推論時に使用する学習済みのＣＮＮ２００の少なくとも一部である。
【００１１】
［ＣＮＮ２００］
ＣＮＮ２００は、畳み込み演算を行う畳み込み層２１０と、量子化演算を行う量子化演算層２２０と、出力層２３０と、を含む多層構造のネットワークである。ＣＮＮ２００の少なくとも一部において、畳み込み層２１０と量子化演算層２２０とが交互に連結されている。ＣＮＮ２００は、画像認識や動画認識に広く使われるモデルである。ＣＮＮ２００は、全結合層などの他の機能を有する層（レイヤ）をさらに有してもよい。
【００１２】
図２は、畳み込み層２１０が行う畳み込み演算を説明する図である。
畳み込み層２１０は、入力データａに対して重みｗを用いた畳み込み演算を行う。畳み込み層２１０は、入力データａと重みｗとを入力とする積和演算を行う。
【００１３】
畳み込み層２１０への入力データａ（アクティベーションデータ、特徴マップともいう）は、画像データ等の多次元データである。本実施形態において、入力データａは、要素（ｘ，ｙ，ｃ）からなる３次元テンソルである。ＣＮＮ２００の畳み込み層２１０は、低ビットの入力データａに対して畳み込み演算を行う。本実施形態において、入力データａの要素は、２ビットの符号なし整数（０，１，２，３）である。入力データａの要素は、例えば、４ビットや８ビット符号なし整数でもよい。
【００１４】
ＣＮＮ２００に入力される入力データが、例えば３２ビットの浮動小数点型など、畳み込み層２１０への入力データａと形式が異なる場合、ＣＮＮ２００は畳み込み層２１０の前に型変換や量子化を行う入力層をさらに有してもよい。
【００１５】
畳み込み層２１０の重みｗ（フィルタ、カーネルともいう）は、学習可能なパラメータである要素を有する多次元データである。本実施形態において、重みｗは、要素（ｉ，ｊ，ｃ，ｄ）からなる４次元テンソルである。重みｗは、要素（ｉ，ｊ，ｃ）からなる３次元テンソル（以降、「重みｗｏ」という）をｄ個有している。学習済みのＣＮＮ２００における重みｗは、学習済みのデータである。ＣＮＮ２００の畳み込み層２１０は、低ビットの重みｗを用いて畳み込み演算を行う。本実施形態において、重みｗの要素は、１ビットの符号付整数（０，１）であり、値「０」は＋１を表し、値「１」は−１を表す。
【００１６】
畳み込み層２１０は、式１に示す畳み込み演算を行い、出力データｆを出力する。式１において、ｓはストライドを示す。図２において点線で示された領域は、入力データａに対して重みｗｏが適用される領域ａｏ（以降、「適用領域ａｏ」という）の一つを示している。適用領域ａｏの要素は、（ｘ＋ｉ，ｙ＋ｊ，ｃ）で表される。
【００１７】
【数１】
0006931252.tif 000002
【００１８】
量子化演算層２２０は、畳み込み層２１０が出力する畳み込み演算の出力に対して量子化などを実施する。量子化演算層２２０は、プーリング層２２１と、Ｂａｔｃｈ  Ｎｏｒｍａｌｉｚａｔｉｏｎ層２２２と、活性化関数層２２３と、量子化層２２４と、を有する。
【００１９】
プーリング層２２１は、畳み込み層２１０が出力する畳み込み演算の出力データｆに対して平均プーリング（式２）やＭＡＸプーリング（式３）などの演算を実施して、畳み込み層２１０の出力データｆを圧縮する。式２および式３において、ｕは入力テンソルを示し、ｖは出力テンソルを示し、Ｔはプーリング領域の大きさを示す。式３において、ｍａｘはＴに含まれるｉとｊの組み合わせに対するｕの最大値を出力する関数である。
【００２０】
【数２】
0006931252.tif 000003
【００２１】
【数３】
0006931252.tif 000004
【００２２】
Ｂａｔｃｈ  Ｎｏｒｍａｌｉｚａｔｉｏｎ層２２２は、量子化演算層２２０やプーリング層２２１の出力データに対して、例えば式４に示すような演算によりデータ分布の正規化を行う。式４において、ｕは入力テンソルを示し、ｖは出力テンソルを示し、αはスケールを示し、βはバイアスを示す。学習済みのＣＮＮ２００において、αおよびβは学習済みの定数ベクトルである。
【００２３】
【数４】
0006931252.tif 000005
【００２４】
活性化関数層２２３は、量子化演算層２２０やプーリング層２２１やＢａｔｃｈ  Ｎｏｒｍａｌｉｚａｔｉｏｎ層２２２の出力に対してＲｅＬＵ（式５）などの活性化関数の演算を行う。式５において、ｕは入力テンソルであり、ｖは出力テンソルである。式５において、ｍａｘは引数のうち最も大きい数値を出力する関数である。
【００２５】
【数５】
0006931252.tif 000006
【００２６】
量子化層２２４は、量子化パラメータに基づいて、プーリング層２２１や活性化関数層２２３の出力に対して例えば式６に示すような量子化を行う。式６に示す量子化は、入力テンソルｕを２ビットにビット削減している。式６において、ｑ(ｃ)は量子化パラメータのベクトルである。学習済みのＣＮＮ２００において、ｑ(ｃ)は学習済みの定数ベクトルである。式６における不等号「≦」は「＜」であってもよい。
【００２７】
【数６】
0006931252.tif 000007
【００２８】
出力層２３０は、恒等関数やソフトマックス関数等によりＣＮＮ２００の結果を出力する層である。出力層２３０の前段のレイヤは、畳み込み層２１０であってもよいし、量子化演算層２２０であってもよい。
【００２９】
ＣＮＮ２００は、量子化された量子化層２２４の出力データが、畳み込み層２１０に入力されるため、量子化を行わない他の畳み込みニューラルネットワークと比較して、畳み込み層２１０の畳み込み演算の負荷が小さい。
【００３０】
［畳み込み演算の分割］
ＮＮ回路１００は、畳み込み層２１０の畳み込み演算（式１）のデータを分割して演算する。なお、ＮＮ回路１００は、畳み込み層２１０の畳み込み演算（式１）のデータを分割せずに演算することもできる。
【００３１】
畳み込み演算のデータ分割において、式１における変数ｃは、式７に示すように、サイズＢｃのブロックで分割される。また、式１における変数ｄは、式８に示すように、サイズＢｄのブロックで分割される。式７において、ｃｏはオフセットであり、ｃｉは０から(Ｂｃ−１)までのインデックスである。式８において、ｄｏはオフセットであり、ｄｉは０から(Ｂｄ−１)までのインデックスである。なお、サイズＢｃとサイズＢｄは同じであってもよい。
【００３２】
【数７】
0006931252.tif 000008
【００３３】
【数８】
0006931252.tif 000009
【００３４】
式１における入力データａ（ｘ＋ｉ，ｙ＋ｊ，ｃ）は、サイズＢｃにより分割され、分割された入力データａ（ｘ＋ｉ，ｙ＋ｊ，ｃｏ）で表される。以降の説明において、分割された入力データａを「分割入力データａ」ともいう。
【００３５】
式１における重みｗ（ｉ，ｊ，ｃ，ｄ）は、サイズＢｃおよびＢｄにより分割され、分割された重みｗ（ｉ，ｊ，ｃｏ，ｄｏ）で表される。以降の説明において、分割された重みｗを「分割重みｗ」ともいう。
【００３６】
サイズＢｄにより分割された出力データｆ（ｘ，ｙ，ｄｏ）は、式９により求まる。分割された出力データｆ（ｘ，ｙ，ｄｏ）を組み合わせることで、最終的な出力データｆ（ｘ，ｙ，ｄ）を算出できる。
【００３７】
【数９】
0006931252.tif 000010
【００３８】
［畳み込み演算のデータの展開］
ＮＮ回路１００は、畳み込み層２１０の畳み込み演算における入力データａおよび重みｗを展開して畳み込み演算を行う。
【００３９】
図３は、畳み込み演算のデータの展開を説明する図である。
分割入力データａ（ｘ＋ｉ、ｙ＋ｊ、ｃｏ）は、Ｂｃ個の要素を持つベクトルデータに展開される。分割入力データａの要素は、ｃｉでインデックスされる（０≦ｃｉ＜Ｂｃ）。以降の説明において、ｉ，ｊごとにベクトルデータに展開された分割入力データａを「入力ベクトルＡ」ともいう。入力ベクトルＡは、分割入力データａ（ｘ＋ｉ、ｙ＋ｊ、ｃｏ×Ｂｃ）から分割入力データａ（ｘ＋ｉ、ｙ＋ｊ、ｃｏ×Ｂｃ＋（Ｂｃ−１））までを要素とする。
【００４０】
分割重みｗ（ｉ，ｊ，ｃｏ、ｄｏ）は、Ｂｃ×Ｂｄ個の要素を持つマトリクスデータに展開される。マトリクスデータに展開された分割重みｗの要素は、ｃｉとｄｉでインデックスされる（０≦ｄｉ＜Ｂｄ）。以降の説明において、ｉ，ｊごとにマトリクスデータに展開された分割重みｗを「重みマトリクスＷ」ともいう。重みマトリクスＷは、分割重みｗ（ｉ，ｊ，ｃｏ×Ｂｃ、ｄｏ×Ｂｄ）から分割重みｗ（ｉ，ｊ，ｃｏ×Ｂｃ＋（Ｂｃ−１）、ｄｏ×Ｂｄ＋（Ｂｄ−１））までを要素とする。
【００４１】
入力ベクトルＡと重みマトリクスＷとを乗算することで、ベクトルデータが算出される。ｉ，ｊ，ｃｏごとに算出されたベクトルデータを３次元テンソルに整形することで、出力データｆ（ｘ，ｙ，ｄｏ）を得ることができる。このようなデータの展開を行うことで、畳み込み層２１０の畳み込み演算を、ベクトルデータとマトリクスデータとの乗算により実施できる。
【００４２】
［ＮＮ回路１００］
図４は、本実施形態に係るＮＮ回路１００の全体構成を示す図である。
ＮＮ回路１００は、第一メモリ１と、第二メモリ２と、ＤＭＡコントローラ３（以下、「ＤＭＡＣ３」ともいう）と、畳み込み演算回路４と、量子化演算回路５と、コントローラ６と、を備える。ＮＮ回路１００は、第一メモリ１および第二メモリ２を介して、畳み込み演算回路４と量子化演算回路５とがループ状に形成されていることを特徴とする。
【００４３】
ＮＮ回路１００は、外部バスＥＢを介して外部ホストＣＰＵ１１０および外部メモリ１２０と接続されている。外部ホストＣＰＵ１１０は汎用ＣＰＵを含む。外部メモリ１２０はＤＲＡＭ等のメモリとその制御回路を含む。外部メモリ１２０には、外部ホストＣＰＵ１１０が実行するプログラムと各種データとが格納される。外部バスＥＢは、外部ホストＣＰＵ１１０と外部メモリ１２０とＮＮ回路１００とを接続する。
【００４４】
第一メモリ１は、例えばＳＲＡＭ（Ｓｔａｔｉｃ  ＲＡＭ）などで構成された揮発性のメモリ等の書き換え可能なメモリである。第一メモリ１には、ＤＭＡＣ３やコントローラ６を介してデータの書き込みおよび読み出しが行われる。第一メモリ１は、畳み込み演算回路４の入力ポートと接続されており、畳み込み演算回路４は第一メモリ１からデータを読み出すことができる。また、第一メモリ１は、量子化演算回路５の出力ポートと接続されており、量子化演算回路５は第一メモリ１にデータを書き込むことができる。外部ホストＣＰＵ１１０は、第一メモリ１に対するデータの書き込みや読み出しにより、ＮＮ回路１００に対するデータの入出力を行うことができる。
【００４５】
第二メモリ２は、例えばＳＲＡＭ（Ｓｔａｔｉｃ  ＲＡＭ）などで構成された揮発性のメモリ等の書き換え可能なメモリである。第二メモリ２には、ＤＭＡＣ３やコントローラ６を介してデータの書き込みおよび読み出しが行われる。第二メモリ２は、量子化演算回路５の入力ポートと接続されており、量子化演算回路５は第二メモリ２からデータを読み出すことができる。また、第二メモリ２は、畳み込み演算回路４の出力ポートと接続されており、畳み込み演算回路４は第二メモリ２にデータを書き込むことができる。外部ホストＣＰＵ１１０は、第二メモリ２に対するデータの書き込みや読み出しにより、ＮＮ回路１００に対するデータの入出力を行うことができる。
【００４６】
ＤＭＡＣ３は、外部バスＥＢに接続されており、外部メモリ１２０と第一メモリ１との間のデータ転送を行う。また、ＤＭＡＣ３は、外部メモリ１２０と第二メモリ２との間のデータ転送を行う。また、ＤＭＡＣ３は、外部メモリ１２０と畳み込み演算回路４との間のデータ転送を行う。また、ＤＭＡＣ３は、外部メモリ１２０と量子化演算回路５との間のデータ転送を行う。
【００４７】
畳み込み演算回路４は、学習済みのＣＮＮ２００の畳み込み層２１０における畳み込み演算を行う回路である。畳み込み演算回路４は、第一メモリ１に格納された入力データａを読み出し、入力データａに対して畳み込み演算を実施する。畳み込み演算回路４は、畳み込み演算の出力データｆ（以降、「畳み込み演算出力データ」ともいう）を第二メモリ２に書き込む。
【００４８】
量子化演算回路５は、学習済みのＣＮＮ２００の量子化演算層２２０における量子化演算の少なくとも一部を行う回路である。量子化演算回路５は、第二メモリ２に格納された畳み込み演算の出力データｆを読み出し、畳み込み演算の出力データｆに対して量子化演算（プーリング、Ｂａｔｃｈ  Ｎｏｒｍａｌｉｚａｔｉｏｎ、活性化関数、および量子化のうち少なくとも量子化を含む演算）を行う。量子化演算回路５は、量子化演算の出力データ（以降、「量子化演算出力データ」ともいう）を第一メモリ１に書き込む。
【００４９】
コントローラ６は、外部バスＥＢに接続されており、外部バスＥＢに対してマスタおよびスレーブとして動作する。コントローラ６は、バスブリッジ６０と、レジスタ６１と、ＩＦＵ６２と、を有する。
【００５０】
レジスタ６１は、パラメータレジスタや状態レジスタを有する。パラメータレジスタは、ＮＮ回路１００の動作を制御するレジスタである。状態レジスタはセマフォＳを含むＮＮ回路１００の状態を示すレジスタである。外部ホストＣＰＵ１１０は、コントローラ６のバスブリッジ６０を経由して、レジスタ６１にアクセスできる。
【００５１】
ＩＦＵ（Instruction Fetch Unit、命令フェッチユニット）６２は、外部ホストＣＰＵ１１０の指示に基づいて、外部バスＥＢを経由してＤＭＡＣ３、畳み込み演算回路４および量子化演算回路５に対する命令コマンドを外部メモリ１２０から読み出す。また、ＩＦＵ６２は、読み出した命令コマンドを対応するＤＭＡＣ３、畳み込み演算回路４および量子化演算回路５に転送する。
【００５２】
コントローラ６は、内部バスＩＢ（図４参照）およびＩＦＵ６２と接続された専用配線（図７参照）を介して、第一メモリ１と、第二メモリ２と、ＤＭＡＣ３と、畳み込み演算回路４と、量子化演算回路５と、接続されている。外部ホストＣＰＵ１１０は、コントローラ６を経由して、各ブロックに対してアクセスできる。例えば、外部ホストＣＰＵ１１０は、コントローラ６を経由して、ＤＭＡＣ３や畳み込み演算回路４や量子化演算回路５に対する命令を指示することができる。
【００５３】
ＤＭＡＣ３や畳み込み演算回路４や量子化演算回路５は、内部バスＩＢを介して、コントローラ６が有する状態レジスタ（セマフォＳを含む）を更新できる。状態レジスタ（セマフォＳを含む）は、ＤＭＡＣ３や畳み込み演算回路４や量子化演算回路５と接続された専用配線を介して更新されるように構成されていてもよい。
【００５４】
ＮＮ回路１００は、第一メモリ１や第二メモリ２等を有するため、外部メモリ１２０からのＤＭＡＣ３によるデータ転送において、重複するデータのデータ転送の回数を低減できる。これにより、メモリアクセスにより発生する消費電力を大幅に低減することができる。
【００５５】
［ＮＮ回路１００の動作例１］
図５は、ＮＮ回路１００の動作例を示すタイミングチャートである。
ＤＭＡＣ３は、レイヤ１の入力データａを第一メモリ１に格納する。ＤＭＡＣ３は、畳み込み演算回路４が行う畳み込み演算の順序にあわせて、レイヤ１の入力データａを分割して第一メモリ１に転送してもよい。
【００５６】
畳み込み演算回路４は、第一メモリ１に格納されたレイヤ１の入力データａを読み出す。畳み込み演算回路４は、レイヤ１の入力データａに対して図１に示すレイヤ１の畳み込み演算を行う。レイヤ１の畳み込み演算の出力データｆは、第二メモリ２に格納される。
【００５７】
量子化演算回路５は、第二メモリ２に格納されたレイヤ１の出力データｆを読み出す。量子化演算回路５は、レイヤ１の出力データｆに対してレイヤ２の量子化演算を行う。レイヤ２の量子化演算の出力データは、第一メモリ１に格納される。
【００５８】
畳み込み演算回路４は、第一メモリ１に格納されたレイヤ２の量子化演算の出力データを読み出す。畳み込み演算回路４は、レイヤ２の量子化演算の出力データを入力データａとしてレイヤ３の畳み込み演算を行う。レイヤ３の畳み込み演算の出力データｆは、第二メモリ２に格納される。
【００５９】
畳み込み演算回路４は、第一メモリ１に格納されたレイヤ２Ｍ−２（Ｍは自然数）の量子化演算の出力データを読み出す。畳み込み演算回路４は、レイヤ２Ｍ−２の量子化演算の出力データを入力データａとしてレイヤ２Ｍ−１の畳み込み演算を行う。レイヤ２Ｍ−１の畳み込み演算の出力データｆは、第二メモリ２に格納される。
【００６０】
量子化演算回路５は、第二メモリ２に格納されたレイヤ２Ｍ−１の出力データｆを読み出す。量子化演算回路５は、２Ｍ−１レイヤの出力データｆに対してレイヤ２Ｍの量子化演算を行う。レイヤ２Ｍの量子化演算の出力データは、第一メモリ１に格納される。
【００６１】
畳み込み演算回路４は、第一メモリ１に格納されたレイヤ２Ｍの量子化演算の出力データを読み出す。畳み込み演算回路４は、レイヤ２Ｍの量子化演算の出力データを入力データａとしてレイヤ２Ｍ＋１の畳み込み演算を行う。レイヤ２Ｍ＋１の畳み込み演算の出力データｆは、第二メモリ２に格納される。
【００６２】
畳み込み演算回路４と量子化演算回路５とが交互に演算を行い、図１に示すＣＮＮ２００の演算を進めていく。ＮＮ回路１００は、畳み込み演算回路４が時分割によりレイヤ２Ｍ−１とレイヤ２Ｍ＋１の畳み込み演算を実施する。また、ＮＮ回路１００は、量子化演算回路５が時分割によりレイヤ２Ｍ−２とレイヤ２Ｍの量子化演算を実施する。そのため、ＮＮ回路１００は、レイヤごとに別々の畳み込み演算回路４と量子化演算回路５を実装する場合と比較して、回路規模が著しく小さい。
【００６３】
ＮＮ回路１００は、複数のレイヤの多層構造であるＣＮＮ２００の演算を、ループ状に形成された回路により演算する。ＮＮ回路１００は、ループ状の回路構成により、ハードウェア資源を効率的に利用できる。なお、ＮＮ回路１００は、ループ状に回路を形成するために、各レイヤで変化する畳み込み演算回路４や量子化演算回路５におけるパラメータは適宜更新される。
【００６４】
ＣＮＮ２００の演算にＮＮ回路１００により実施できない演算が含まれる場合、ＮＮ回路１００は外部ホストＣＰＵ１１０などの外部演算デバイスに中間データを転送する。外部演算デバイスが中間データに対して演算を行った後、外部演算デバイスによる演算結果は第一メモリ１や第二メモリ２に入力される。ＮＮ回路１００は、外部演算デバイスによる演算結果に対する演算を再開する。
【００６５】
［ＮＮ回路１００の動作例２］
図６は、ＮＮ回路１００の他の動作例を示すタイミングチャートである。
ＮＮ回路１００は、入力データａを部分テンソルに分割して、時分割により部分テンソルに対する演算を行ってもよい。部分テンソルへの分割方法や分割数は特に限定されない。
【００６６】
図６は、入力データａを二つの部分テンソルに分解した場合の動作例を示している。分解された部分テンソルを、「第一部分テンソルａ1」、「第二部分テンソルａ2」とする。例えば、レイヤ２Ｍ−１の畳み込み演算は、第一部分テンソルａ1に対応する畳み込み演算（図６において、「レイヤ２Ｍ−１（ａ1）」と表記）と、第二部分テンソルａ2に対応する畳み込み演算（図６において、「レイヤ２Ｍ−１（ａ2）」と表記）と、に分解される。
【００６７】
第一部分テンソルａ1に対応する畳み込み演算および量子化演算と、第二部分テンソルａ2に対応する畳み込み演算および量子化演算とは、図６に示すように、独立して実施することができる。
【００６８】
畳み込み演算回路４は、第一部分テンソルａ1に対応するレイヤ２Ｍ−１の畳み込み演算（図６において、レイヤ２Ｍ−１（ａ1）で示す演算）を行う。その後、畳み込み演算回路４は、第二部分テンソルａ２に対応するレイヤ２Ｍ−１の畳み込み演算（図６において、レイヤ２Ｍ−１（ａ２）で示す演算）を行う。また、量子化演算回路５は、第一部分テンソルａ1に対応するレイヤ２Ｍの量子化演算（図６において、レイヤ２Ｍ（ａ1）で示す演算）を行う。このように、ＮＮ回路１００は、第二部分テンソルａ２に対応するレイヤ２Ｍ−１の畳み込み演算と、第一部分テンソルａ1に対応するレイヤ２Ｍの量子化演算と、を並列に実施できる。
【００６９】
次に、畳み込み演算回路４は、第一部分テンソルａ1に対応するレイヤ２Ｍ＋１の畳み込み演算（図６において、レイヤ２Ｍ＋１（ａ1）で示す演算）を行う。また、量子化演算回路５は、第二部分テンソルａ２に対応するレイヤ２Ｍの量子化演算（図６において、レイヤ２Ｍ（ａ２）で示す演算）を行う。このように、ＮＮ回路１００は、第一部分テンソルａ1に対応するレイヤ２Ｍ＋１の畳み込み演算と、第二部分テンソルａ２に対応するレイヤ２Ｍの量子化演算と、を並列に実施できる。
【００７０】
入力データａを部分テンソルに分割することで、ＮＮ回路１００は畳み込み演算回路４と量子化演算回路５とを並列して動作させることができる。その結果、畳み込み演算回路４と量子化演算回路５が待機する時間が削減され、ＮＮ回路１００の演算処理効率が向上する。図６に示す動作例において分割数は２であったが、分割数が２より大きい場合も同様に、ＮＮ回路１００は畳み込み演算回路４と量子化演算回路５とを並列して動作させることができる。
【００７１】
なお、部分テンソルに対する演算方法としては、同一レイヤにおける部分テンソルの演算を畳み込み演算回路４または量子化演算回路５で行った後に次のレイヤにおける部分テンソルの演算を行う例（方法１）を示したが、演算方法はこれに限られない。ＮＮ回路１００は、複数レイヤにおける一部の部分テンソルの演算をした後に残部の部分テンソルの演算をしてもよい（方法２）。また、ＮＮ回路１００は、方法１と方法２とを組み合わせて部分テンソルを演算してもよい。
【００７２】
次に、ＮＮ回路１００の各構成に関して詳しく説明する。図７は、コントローラ６のＩＦＵ６２とＤＭＡＣ３等とを接続する専用配線を示す図である。
【００７３】
［ＤＭＡＣ３］
ＤＭＡＣ３は、データ転送回路（不図示）と、ステートコントローラ３２と、を有する。ＤＭＡＣ３は、データ転送回路に対する専用のステートコントローラ３２を有しており、命令コマンドＣ３が入力されると、外部のコントローラを必要とせずにＤＭＡデータ転送を実施できる。
【００７４】
ステートコントローラ３２は、データ転送回路のステートを制御する。また、ステートコントローラ３２は、内部バスＩＢ（図４参照）およびＩＦＵ６２と接続された専用配線（図７参照）を介してコントローラ６と接続されている。ステートコントローラ３２は、命令キュー３３と制御回路３４とを有する。
【００７５】
命令キュー３３は、ＤＭＡＣ３用の命令コマンド（第三命令コマンド）Ｃ３が格納されるキューであり、例えばＦＩＦＯメモリで構成される。命令キュー３３には、内部バスＩＢまたはＩＦＵ６２経由で１つ以上の命令コマンドＣ３が書き込まれる。
【００７６】
命令キュー３３は、格納される命令コマンドＣ３の数が「０」であることを示すｅｍｐｔｙフラグと、格納される命令コマンドＣ３の数が最大値であることを示すｆｕｌｌフラグと、を出力する。命令キュー３３は、格納される命令コマンドＣ３の数が最大値の半分以下であることを示すｈａｌｆ  ｅｍｐｔｙフラグなどを出力してもよい。
【００７７】
命令キュー３３のｅｍｐｔｙフラグやｆｕｌｌフラグは、レジスタ６１の状態レジスタとして格納される。外部ホストＣＰＵ１１０は、レジスタ６１の状態レジスタを読み出すことで、ｅｍｐｔｙフラグやｆｕｌｌフラグなどのフラグの状態を確認できる。
【００７８】
制御回路３４は、命令コマンドＣ３をデコードし、命令コマンドＣ３に基づいてデータ転送回路を制御するステートマシンである。制御回路３４は、論理回路により実装されていてもよいし、ソフトウェアによって制御されるＣＰＵによって実装されていてもよい。
【００７９】
図８は、制御回路３４のステート遷移図である。
制御回路３４は、命令キュー３３のｅｍｐｔｙフラグに基づいて、命令キュー３３に命令コマンドＣ３が入力されたことを検知すると（Ｎｏｔ  ｅｍｐｔｙ）、アイドルステートＳ１からデコードステートＳ２に遷移する。
【００８０】
制御回路３４は、デコードステートＳ２において、命令キュー３３から出力される命令コマンドＣ３をデコードする。また、制御回路３４は、コントローラ６のレジスタ６１に格納されたセマフォＳを読み出し、命令コマンドＣ３において指示されたデータ転送回路の動作を実行可能であるかを判定する。実行不能である場合（Ｎｏｔ  ｒｅａｄｙ）、制御回路３４は実行可能となるまで待つ（Ｗａｉｔ）。実行可能である場合（ｒｅａｄｙ）、制御回路３４はデコードステートＳ２から実行ステートＳ３に遷移する。
【００８１】
制御回路３４は、実行ステートＳ３において、データ転送回路を制御して、データ転送回路に命令コマンドＣ３において指示された動作を実施させる。制御回路３４は、データ転送回路の動作が終わると、命令キュー３３に対してｐоｐコマンドを送り、命令キュー３３から実行を終えた命令コマンドＣ３を取り除くとともに、コントローラ６のレジスタ６１に格納されたセマフォＳを更新する。制御回路３４は、命令キュー３３のｅｍｐｔｙフラグに基づいて、命令キュー３３に命令があることを検知すると（Ｎｏｔ  ｅｍｐｔｙ）、実行ステートＳ３からデコードステートＳ２に遷移する。制御回路３４は、命令キュー３３に命令がないことを検知すると（ｅｍｐｔｙ）、実行ステートＳ３からアイドルステートＳ１に遷移する。
【００８２】
［畳み込み演算回路４］
畳み込み演算回路４は、乗算器などの演算回路（不図示）と、ステートコントローラ４４と、を有する。畳み込み演算回路４は、乗算器などの演算回路等に対する専用のステートコントローラ４４を有しており、命令コマンドＣ４が入力されると、外部のコントローラを必要とせずに畳み込み演算を実施できる。
【００８３】
ステートコントローラ４４は、乗算器などの演算回路のステートを制御する。また、ステートコントローラ４４は、内部バスＩＢ（図４参照）およびＩＦＵ６２と接続された専用配線（図７参照）を介してコントローラ６と接続されている。ステートコントローラ４４は、命令キュー４５と制御回路４６とを有する。
【００８４】
命令キュー４５は、畳み込み演算回路４用の命令コマンド（第一命令コマンド）Ｃ４が格納されるキューであり、例えばＦＩＦＯメモリで構成される。命令キュー４５には、内部バスＩＢまたはＩＦＵ６２経由で命令コマンドＣ４が書き込まれる。命令キュー４５は、ＤＭＡＣ３のステートコントローラ３２の命令キュー３３と同様の構成である。
【００８５】
制御回路４６は、命令コマンドＣ４をデコードし、命令コマンドＣ４に基づいて乗算器などの演算回路を制御するステートマシンである。制御回路４６は、ＤＭＡＣ３のステートコントローラ３２の制御回路３４と同様の構成である。
【００８６】
［量子化演算回路５］
量子化演算回路５は、量子化回路等（不図示）と、ステートコントローラ５４と、を有する。量子化演算回路５は、量子化回路等に対する専用のステートコントローラ５４を有しており、命令コマンドＣ５が入力されると、外部のコントローラを必要とせずに量子化演算を実施できる。
【００８７】
ステートコントローラ５４は、量子化回路等のステートを制御する。また、ステートコントローラ５４は、内部バスＩＢ（図４参照）およびＩＦＵ６２と接続された専用配線（図７参照）を介してコントローラ６と接続されている。ステートコントローラ５４は、命令キュー５５と制御回路５６とを有する。
【００８８】
命令キュー５５は、量子化演算回路５用の命令コマンド（第二命令コマンド）Ｃ５が格納されるキューであり、例えばＦＩＦＯメモリで構成される。命令キュー５５には、内部バスＩＢまたはＩＦＵ６２経由で命令コマンドＣ５が書き込まれる。命令キュー５５は、ＤＭＡＣ３のステートコントローラ３２の命令キュー３３と同様の構成である。
【００８９】
制御回路５６は、命令コマンドＣ５をデコードし、命令コマンドＣ５に基づいて量子化回路等を制御するステートマシンである。制御回路５６は、ＤＭＡＣ３のステートコントローラ３２の制御回路３４と同様の構成である。
【００９０】
［コントローラ６］
コントローラ６は、外部バスＥＢに接続されており、外部バスＥＢに対してマスタおよびスレーブとして動作する。コントローラ６は、バスブリッジ６０と、パラメータレジスタや状態レジスタを含むレジスタ６１と、ＩＦＵ６２と、を有している。パラメータレジスタは、ＮＮ回路１００の動作を制御するレジスタである。状態レジスタは、セマフォＳを含むＮＮ回路１００の状態を示すレジスタである。
【００９１】
バスブリッジ６０は、外部バスＥＢから内部バスＩＢへのバスアクセスを中継する。また、バスブリッジ６０は、外部ホストＣＰＵ１１０からレジスタ６１への書き込み要求および読み込み要求を中継する。また、バスブリッジ６０は、ＩＦＵ６２から外部メモリ１２０への読み出し要求を外部バスＥＢに中継する。
【００９２】
ＮＮ回路１００と外部ホストＣＰＵ１１０とが同一のシリコンチップ上に集積される場合、外部バスＥＢは例えばＡＸＩ（登録商標）などの標準規格に準拠したインターコネクトである。ＮＮ回路１００と外部ホストＣＰＵ１１０とが異なるシリコンチップ上に集積される場合、外部バスＥＢは例えばＰＣＩ−Ｅｘｐｒｅｓｓ（登録商標）などの標準規格に準拠したインターコネクトである。バスブリッジ６０は、接続される外部バスＥＢの規格に対応したプロトコル変換回路を有する。
【００９３】
コントローラ６は、二つの方法により、ＤＭＡＣ３、畳み込み演算回路４および量子化演算回路５が有する命令キューに命令コマンドを転送する。一つ目の方法は、外部ホストＣＰＵ１１０からコントローラ６に転送される命令コマンドを、内部バスＩＢ（図４参照）を介して転送する方法である。二つ目の方法は、ＩＦＵ６２が外部メモリ１２０から命令コマンドを読み出し、ＩＦＵ６２と接続された専用配線（図７参照）を介して命令コマンドを転送する方法である。
【００９４】
ＩＦＵ（Instruction Fetch Unit）６２は、図７に示すように、複数のフェッチユニット６３と、割り込み生成回路６４と、を有する。
【００９５】
フェッチユニット６３は、外部ホストＣＰＵ１１０の指示に基づいて、外部バスＥＢを経由して外部メモリ１２０から命令コマンドを読み出す。また、フェッチユニット６３は、読み出した命令コマンドを対応するＤＭＡＣ３等の命令キューに供給する。
【００９６】
フェッチユニット６３は、命令ポインタ６５と、命令カウンタ６６と、を有する。外部ホストＣＰＵ１１０は、外部バスＥＢを介して、命令ポインタ６５および命令カウンタ６６に対する書き込みと読み出しを実施できる。
【００９７】
命令ポインタ６５は、命令コマンドが格納された外部ホストＣＰＵ１１０のメモリアドレスを保持する。命令カウンタ６６は、格納された命令コマンドのコマンド数を保持する。命令カウンタ６６は、「０」に初期化されている。外部ホストＣＰＵ１１０が命令カウンタ６６に「１」以上の値を書き込むことで、フェッチユニット６３が起動する。フェッチユニット６３は、命令ポインタ６５を参照して、外部メモリ１２０から命令コマンドを読み出す。この場合、コントローラ６は外部バスＥＢに対してマスタとして動作する。
【００９８】
フェッチユニット６３は、命令コマンドを読み出すごとに、命令ポインタ６５および命令カウンタ６６を更新する。命令カウンタ６６は、命令コマンドを読み出すごとにデクリメントされる。フェッチユニット６３は、命令カウンタ６６が「０」になるまで命令コマンドを読み出す。
【００９９】
フェッチユニット６３は、対応するＤＭＡＣ３等の命令キューにｐｕｓｈコマンドを送り、読み出した命令コマンドを対応するＤＭＡＣ３等の命令キューに書き込む。ただし、命令キューのｆｕｌｌフラグが「１（真）」である場合、フェッチユニット６３はｆｕｌｌフラグが「０（偽）」となるまで命令キューへの書き込みを行わない。
【０１００】
フェッチユニット６３は、命令キューのフラグや命令カウンタ６６を参照し、必要に応じてバースト転送を用いることで、外部バスＥＢを介した命令コマンドの読み出しを効率よく実施できる。
【０１０１】
フェッチユニット６３は、命令キュー毎に設けられる。以降の説明において、ＤＭＡＣ３の命令キュー３３用のフェッチユニット６３を「フェッチユニット６３Ａ（第三フェッチユニット）」、畳み込み演算回路４の命令キュー４５用のフェッチユニット６３を「フェッチユニット６３Ｂ（第一フェッチユニット）」、量子化演算回路５の命令キュー５５用のフェッチユニット６３を「フェッチユニット６３Ｃ（第二フェッチユニット）」という。
【０１０２】
フェッチユニット６３Ａ、フェッチユニット６３Ｂおよびフェッチユニット６３Ｃによる外部バスＥＢを経由した命令コマンドの読み出しは、バスブリッジ６０により、例えばラウンドロビン方式の優先度制御によって調停される。
【０１０３】
割り込み生成回路６４は、フェッチユニット６３の命令カウンタ６６を監視しており、全てのフェッチユニット６３の命令カウンタ６６が「０」になったときに、外部ホストＣＰＵ１１０に対して割り込みを発生させることができる。外部ホストＣＰＵ１１０は、レジスタ６１の状態レジスタをポーリングせずとも、上記の割り込みによりＩＦＵ６２による命令コマンドの読み出し完了を検知できる。
【０１０４】
［セマフォＳ］
図９は、セマフォＳによるＮＮ回路１００の制御を説明する図である。
セマフォＳは、第一セマフォＳ１と、第二セマフォＳ２と、第三セマフォＳ３と、を有する。セマフォＳは、Ｐ操作によりデクリメントされ、Ｖ操作によってインクリメントされる。ＤＭＡＣ３、畳み込み演算回路４および量子化演算回路５によるＰ操作およびＶ操作は、内部バスＩＢを経由して、コントローラ６が有するセマフォＳを更新する。
【０１０５】
第一セマフォＳ１は、第一データフローＦ１の制御に用いられる。第一データフローＦ１は、ＤＭＡＣ３（Ｐｒｏｄｕｃｅｒ）が第一メモリ１に入力データａを書き込み、畳み込み演算回路４（Ｃｏｎｓｕｍｅｒ）が入力データａを読み出すデータフローである。第一セマフォＳ１は、第一ライトセマフォＳ１Ｗと、第一リードセマフォＳ１Ｒと、を有する。
【０１０６】
第二セマフォＳ２は、第二データフローＦ２の制御に用いられる。第二データフローＦ２は、畳み込み演算回路４（Ｐｒｏｄｕｃｅｒ）が出力データｆを第二メモリ２に書き込み、量子化演算回路５（Ｃｏｎｓｕｍｅｒ）が出力データｆを読み出すデータフローである。第二セマフォＳ２は、第二ライトセマフォＳ２Ｗと、第二リードセマフォＳ２Ｒと、を有する。
【０１０７】
第三セマフォＳ３は、第三データフローＦ３の制御に用いられる。第三データフローＦ３は、量子化演算回路５（Ｐｒｏｄｕｃｅｒ）が量子化演算出力データを第一メモリ１に書き込み、畳み込み演算回路４（Ｃｏｎｓｕｍｅｒ）が量子化演算回路５の量子化演算出力データを読み出すデータフローである。第三セマフォＳ３は、第三ライトセマフォＳ３Ｗと、第三リードセマフォＳ３Ｒと、を有する。
【０１０８】
［第一データフローＦ１］
図１０は、第一データフローＦ１のタイミングチャートである。
第一ライトセマフォＳ１Ｗは、第一データフローＦ１におけるＤＭＡＣ３による第一メモリ１に対する書き込みを制限するセマフォである。第一ライトセマフォＳ１Ｗは、第一メモリ１において、例えば入力ベクトルＡなどの所定のサイズのデータを格納可能なメモリ領域のうち、データが読み出し済みで他のデータを書き込み可能なメモリ領域の数を示している。第一ライトセマフォＳ１Ｗが「０」の場合、ＤＭＡＣ３は第一メモリ１に対して第一データフローＦ１における書き込みを行えず、第一ライトセマフォＳ１Ｗが「１」以上となるまで待たされる。
【０１０９】
第一リードセマフォＳ１Ｒは、第一データフローＦ１における畳み込み演算回路４による第一メモリ１からの読み出しを制限するセマフォである。第一リードセマフォＳ１Ｒは、第一メモリ１において、例えば入力ベクトルＡなどの所定のサイズのデータを格納可能なメモリ領域のうち、データが書き込み済みで読み出し可能なメモリ領域の数を示している。第一リードセマフォＳ１Ｒが「０」の場合、畳み込み演算回路４は第一メモリ１からの第一データフローＦ１における読み出しを行えず、第一リードセマフォＳ１Ｒが「１」以上となるまで待たされる。
【０１１０】
ＤＭＡＣ３は、命令キュー３３に命令コマンドＣ３が格納されることにより、ＤＭＡ転送を開始する。図１０に示すように、第一ライトセマフォＳ１Ｗが「０」でないため、ＤＭＡＣ３はＤＭＡ転送を開始する（ＤＭＡ転送１）。ＤＭＡＣ３は、ＤＭＡ転送を開始する際に、第一ライトセマフォＳ１Ｗに対してＰ操作を行う。ＤＭＡＣ３は、命令コマンドＣ３により指示されたＤＭＡ転送の完了後に、命令キュー３３に対してｐоｐコマンドを送り、命令キュー３３から実行を終えた命令コマンドＣ３を取り除くとともに、第一リードセマフォＳ１Ｒに対してＶ操作を行う。
【０１１１】
畳み込み演算回路４は、命令キュー４５に命令コマンドＣ４が格納されることにより、畳み込み演算を開始する。図１０に示すように、第一リードセマフォＳ１Ｒが「０」であるため、畳み込み演算回路４は第一リードセマフォＳ１Ｒが「１」以上となるまで待たされる（デコードステートＳ２におけるＷａｉｔ）。ＤＭＡＣ３によるＶ操作により第一リードセマフォＳ１Ｒが「１」となると、畳み込み演算回路４は畳み込み演算を開始する（畳み込み演算１）。畳み込み演算回路４は、畳み込み演算を開始する際、第一リードセマフォＳ１Ｒに対してＰ操作を行う。畳み込み演算回路４は、命令コマンドＣ４により指示された畳み込み演算の完了後に、命令キュー４５に対してｐоｐコマンドを送り、命令キュー４５から実行を終えた命令コマンドＣ４を取り除くとともに、第一ライトセマフォＳ１Ｗに対してＶ操作を行う。
【０１１２】
畳み込み演算回路４のステートコントローラ４４は、命令キュー４５のｅｍｐｔｙフラグに基づいて、命令キュー４５に次の命令があることを検知すると（Ｎｏｔ  ｅｍｐｔｙ）、実行ステートＳ３からデコードステートＳ２に遷移する。
【０１１３】
図１０において「ＤＭＡ転送３」と記載されたＤＭＡ転送をＤＭＡＣ３が開始する際、第一ライトセマフォＳ１Ｗが「０」であるため、ＤＭＡＣ３は第一ライトセマフォＳ１Ｗが「１」以上となるまで待たされる（デコードステートＳ２におけるＷａｉｔ）。畳み込み演算回路４によるＶ操作により第一ライトセマフォＳ１Ｗが「１」以上となると、ＤＭＡＣ３はＤＭＡ転送を開始する。
【０１１４】
ＤＭＡＣ３と畳み込み演算回路４とは、セマフォＳ１を使用することで、第一データフローＦ１において第一メモリ１に対するアクセス競合を防止できる。また、ＤＭＡＣ３と畳み込み演算回路４とは、セマフォＳ１を使用することで、第一データフローＦ１におけるデータ転送の同期を取りつつ、独立して並列に動作できる。
【０１１５】
［第二データフローＦ２］
図１１は、第二データフローＦ２のタイミングチャートである。
第二ライトセマフォＳ２Ｗは、第二データフローＦ２における畳み込み演算回路４による第二メモリ２に対する書き込みを制限するセマフォである。第二ライトセマフォＳ２Ｗは、第二メモリ２において、例えば出力データｆなどの所定のサイズのデータを格納可能なメモリ領域のうち、データが読み出し済みで他のデータを書き込み可能なメモリ領域の数を示している。第二ライトセマフォＳ２Ｗが「０」の場合、畳み込み演算回路４は第二メモリ２に対して第二データフローＦ２における書き込みを行えず、第二ライトセマフォＳ２Ｗが「１」以上となるまで待たされる。
【０１１６】
第二リードセマフォＳ２Ｒは、第二データフローＦ２における量子化演算回路５による第二メモリ２からの読み出しを制限するセマフォである。第二リードセマフォＳ２Ｒは、第二メモリ２において、例えば出力データｆなどの所定のサイズのデータを格納可能なメモリ領域のうち、データが書き込み済みで読み出し可能なメモリ領域の数を示している。第二リードセマフォＳ２Ｒが「０」の場合、量子化演算回路５は第二メモリ２からの第二データフローＦ２における読み出しを行えず、第二リードセマフォＳ２Ｒが「１」以上となるまで待たされる。
【０１１７】
畳み込み演算回路４は、図１１に示すように、畳み込み演算を開始する際、第二ライトセマフォＳ２Ｗに対してＰ操作を行う。畳み込み演算回路４は、命令コマンドＣ４により指示された畳み込み演算の完了後に、命令キュー４５に対してｐоｐコマンドを送り、命令キュー４５から実行を終えた命令コマンドＣ４を取り除くとともに、第二リードセマフォＳ２Ｒに対してＶ操作を行う。
【０１１８】
量子化演算回路５は、命令キュー５５に命令コマンドＣ５が格納されることにより、量子化演算を開始する。図１１に示すように、第二リードセマフォＳ２Ｒが「０」であるため、量子化演算回路５は第二リードセマフォＳ２Ｒが「１」以上となるまで待たされる（デコードステートＳ２におけるＷａｉｔ）。畳み込み演算回路４によるＶ操作により第二リードセマフォＳ２Ｒが「１」となると、量子化演算回路５は量子化演算を開始する（量子化演算１）。量子化演算回路５は、量子化演算を開始する際、第二リードセマフォＳ２Ｒに対してＰ操作を行う。量子化演算回路５は、命令コマンドＣ５により指示された量子化演算の完了後に、命令キュー５５に対してｐоｐコマンドを送り、命令キュー５５から実行を終えた命令コマンドＣ５を取り除くとともに、第二ライトセマフォＳ２Ｗに対してＶ操作を行う。
【０１１９】
量子化演算回路５のステートコントローラ５４は、命令キュー５５のｅｍｐｔｙフラグに基づいて、命令キュー５５に次の命令があることを検知すると（Ｎｏｔ  ｅｍｐｔｙ）、実行ステートＳ３からデコードステートＳ２に遷移する。
【０１２０】
図１１において「量子化演算２」と記載された量子化演算を量子化演算回路５が開始する際、第二リードセマフォＳ２Ｒが「０」であるため、量子化演算回路５は第二リードセマフォＳ２Ｒが「１」以上となるまで待たされる（デコードステートＳ２におけるＷａｉｔ）。畳み込み演算回路４によるＶ操作により第二リードセマフォＳ２Ｒが「１」以上となると、量子化演算回路５は量子化演算を開始する。
【０１２１】
畳み込み演算回路４と量子化演算回路５とは、セマフォＳ２を使用することで、第二データフローＦ２において第二メモリ２に対するアクセス競合を防止できる。また、畳み込み演算回路４と量子化演算回路５とは、セマフォＳ２を使用することで、第二データフローＦ２におけるデータ転送の同期を取りつつ、独立して並列に動作できる。
【０１２２】
［第三データフローＦ３］
第三ライトセマフォＳ３Ｗは、第三データフローＦ３における量子化演算回路５による第一メモリ１に対する書き込みを制限するセマフォである。第三ライトセマフォＳ３Ｗは、第一メモリ１において、例えば量子化演算回路５の量子化演算出力データなどの所定のサイズのデータを格納可能なメモリ領域のうち、データが読み出し済みで他のデータを書き込み可能なメモリ領域の数を示している。第三ライトセマフォＳ３Ｗが「０」の場合、量子化演算回路５は第一メモリ１に対して第三データフローＦ３における書き込みを行えず、第三ライトセマフォＳ３Ｗが「１」以上となるまで待たされる。
【０１２３】
第三リードセマフォＳ３Ｒは、第三データフローＦ３における畳み込み演算回路４による第一メモリ１からの読み出しを制限するセマフォである。第三リードセマフォＳ３Ｒは、第一メモリ１において、例えば量子化演算回路５の量子化演算出力データなどの所定のサイズのデータを格納可能なメモリ領域のうち、データが書き込み済みで読み出し可能なメモリ領域の数を示している。第三リードセマフォＳ３Ｒが「０」の場合、畳み込み演算回路４は第三データフローＦ３における第一メモリ１からの読み出しを行えず、第三リードセマフォＳ３Ｒが「１」以上となるまで待たされる。
【０１２４】
量子化演算回路５と畳み込み演算回路４とは、セマフォＳ３を使用することで、第三データフローＦ３において第一メモリ１に対するアクセス競合を防止できる。また、量子化演算回路５と畳み込み演算回路４とは、セマフォＳ３を使用することで、第三データフローＦ３におけるデータ転送の同期を取りつつ、独立して並列に動作できる。
【０１２５】
第一メモリ１は、第一データフローＦ１および第三データフローＦ３において共有される。ＮＮ回路１００は、第一セマフォＳ１と第三セマフォＳ３とを別途設けることで、第一データフローＦ１と第三データフローＦ３とを区別してデータ転送の同期を取ることができる。
【０１２６】
［ＩＦＵ６２を用いたＮＮ回路１００の制御］
外部ホストＣＰＵは、ＮＮ回路１００に実施させる一連の演算に必要な命令コマンドを外部メモリ１２０などのメモリに格納する。具体的には、外部ホストＣＰＵは、ＤＭＡＣ３用の複数の命令コマンドＣ３と、畳み込み演算回路４用の複数の命令コマンドＣ４と、量子化演算回路５用の複数の命令コマンドＣ５とを、外部メモリ１２０に格納する。
【０１２７】
本実施形態では、ＮＮ回路１００の回路規模を低減するために、ＮＮ回路１００に実施させる一連の演算に必要な命令コマンドが外部メモリ１２０に格納されている例を示している。しなしながら、より高速な命令コマンドへのアクセスが必要な場合には、ＮＮ回路１００に実施させる一連の演算に必要な命令コマンドを格納できる専用メモリがＮＮ回路１００内に設けられていてもよい。
【０１２８】
外部ホストＣＰＵ１１０は、フェッチユニット６３Ａの命令ポインタ６５に、命令コマンドＣ３が格納された外部メモリ１２０の先頭アドレスを格納する。また、外部ホストＣＰＵ１１０は、フェッチユニット６３Ｂの命令ポインタ６５に、命令コマンドＣ４が格納された外部メモリ１２０の先頭アドレスを格納する。また、外部ホストＣＰＵ１１０は、フェッチユニット６３Ｃの命令ポインタ６５に、命令コマンドＣ５が格納された外部メモリ１２０の先頭アドレスを格納する。
【０１２９】
外部ホストＣＰＵ１１０は、フェッチユニット６３Ａの命令カウンタ６６に、命令コマンドＣ３のコマンド数を設定する。また、外部ホストＣＰＵ１１０は、フェッチユニット６３Ｂの命令カウンタ６６に、命令コマンドＣ４のコマンド数を設定する。また、外部ホストＣＰＵ１１０は、フェッチユニット６３Ｃの命令カウンタ６６に、命令コマンドＣ５のコマンド数を設定する。
【０１３０】
ＩＦＵ６２は、外部メモリ１２０から命令コマンドを読み出し、読み出した命令コマンドを対応するＤＭＡＣ３、畳み込み演算回路４および量子化演算回路５の命令キューに書き込む。
【０１３１】
ＤＭＡＣ３、畳み込み演算回路４および量子化演算回路５は、命令キューに格納された命令コマンドに基づいて並列に動作を開始する。ＤＭＡＣ３、畳み込み演算回路４および量子化演算回路５はセマフォＳによって制御されるため、データ転送の同期を取りつつ、独立して並列に動作できる。また、ＤＭＡＣ３、畳み込み演算回路４および量子化演算回路５はセマフォＳによって制御されるため、第一メモリ１および第二メモリ２に対するアクセス競合を防止できる。
【０１３２】
畳み込み演算回路４は、命令コマンドＣ４に基づいて畳み込み演算を行う際、第一メモリ１から読み出しを行い、第二メモリ２に対して書き込みを行う。畳み込み演算回路４は、第一データフローＦ１においてはＣｏｎｓｕｍｅｒであり、第二データフローＦ２においてはＰｒｏｄｕｃｅｒである。そのため、畳み込み演算回路４は、命令コマンドＣ４に基づいて畳み込み演算を開始する際、第一リードセマフォＳ１Ｒに対してＰ操作を行い（図１０参照）、第二ライトセマフォＳ２Ｗに対してＰ操作を行う（図１１参照）。畳み込み演算回路４は、畳み込み演算の完了後に、第一ライトセマフォＳ１Ｗに対してＶ操作を行い（図１０参照）、第二リードセマフォＳ２Ｒに対してＶ操作を行う（図１１参照）。
【０１３３】
畳み込み演算回路４は、命令コマンドＣ４に基づいて畳み込み演算を開始する際、第一リードセマフォＳ１Ｒが「１」以上、かつ、第二ライトセマフォＳ２Ｗが「１」以上となるまで待たされる（デコードステートＳ２におけるＷａｉｔ）。
【０１３４】
量子化演算回路５は、命令コマンドＣ５に基づいて量子化演算を行う際、第二メモリ２から読み出しを行い、第一メモリ１に対して書き込みを行う。すなわち、量子化演算回路５は、第二データフローＦ２においてはＣｏｎｓｕｍｅｒであり、第三データフローＦ３においてはＰｒｏｄｕｃｅｒである。そのため、量子化演算回路５は、命令コマンドＣ５に基づいて量子化演算を開始する際、第二リードセマフォＳ２Ｒに対してＰ操作を行い、第三ライトセマフォＳ３Ｗに対してＰ操作を行う。量子化演算回路５は量子化演算の完了後に、第二ライトセマフォＳ２Ｗに対してＶ操作を行い、第三リードセマフォＳ３Ｒに対してＶ操作を行う。
【０１３５】
量子化演算回路５は、命令コマンドＣ５に基づいて量子化演算を開始する際、第二リードセマフォＳ２Ｒが「１」以上、かつ、第三ライトセマフォＳ３Ｗが「１」以上となるまで待たされる（デコードステートＳ２におけるＷａｉｔ）。
【０１３６】
畳み込み演算回路４が第一メモリ１から読み出す入力データは、第三データフローにおいて量子化演算回路５が書き込んだデータである場合もある。この場合、畳み込み演算回路４は、第三データフローＦ３においてはＣｏｎｓｕｍｅｒであり、第二データフローＦ２においてはＰｒｏｄｕｃｅｒである。そのため、畳み込み演算回路４は、命令コマンドＣ４に基づいて畳み込み演算を開始する際、第三リードセマフォＳ３Ｒに対してＰ操作を行い、第二ライトセマフォＳ２Ｗに対してＰ操作を行う。畳み込み演算回路４は、畳み込み演算の完了後に、第三ライトセマフォＳ３Ｗに対してＶ操作を行い、第二リードセマフォＳ２Ｒに対してＶ操作を行う。
【０１３７】
畳み込み演算回路４は、命令コマンドＣ４に基づいて畳み込み演算を開始する際、第三リードセマフォＳ３Ｒが「１」以上、かつ、第二ライトセマフォＳ２Ｗが「１」以上となるまで待たされる（デコードステートＳ２におけるＷａｉｔ）。
【０１３８】
ＩＦＵ６２は、割り込み生成回路６４を用いて、ＩＦＵ６２による一連の命令コマンドの読み出し完了を示す割り込みを外部ホストＣＰＵ１１０に発生させることができる。外部ホストＣＰＵ１１０は、ＩＦＵ６２による命令コマンドの読み出し完了を検知した後、次にＮＮ回路１００に実施させる一連の演算に必要な命令コマンドを外部メモリ１２０に格納し、次の命令コマンドの読み出しをＩＦＵ６２に指示する。
【０１３９】
外部ホストＣＰＵ１１０は、ＮＮ回路１００を用いて演算を行うアプリケーションが第一アプリケーションから第二アプリケーションに変更された場合、ＩＦＵ６２に読み出させる命令コマンドを第二アプリケーションに対応した命令コマンドに変更する。第二アプリケーションに対応した命令コマンドへの変更は、外部メモリ１２０に格納された命令コマンドを書き換える方法Ａや、命令ポインタ６５と命令カウンタ６６を書き換える方法Ｂなどにより実施する。方法Ｂを用いる場合、第二アプリケーションに対応した命令コマンドを第一アプリケーションに対応した命令コマンドが格納された外部メモリ１２０の領域と異なる領域に格納しておけば、命令ポインタ６５と命令カウンタ６６を書き換えるだけで、すぐにＩＦＵ６２が読み出す命令コマンドが変更される。
【０１４０】
例えばＮＮ回路１００を用いて演算を行うアプリケーションが物体検出である場合、第一アプリケーションから第二アプリケーションへの変更は、検出対象物体の変更などにより発生する。例えばＮＮ回路１００への入力データが動画像データである場合、第一アプリケーションから第二アプリケーションへの変更は、映像の同期信号に同期して更新してもよい。
【０１４１】
本実施形態に係るニューラルネットワーク回路によれば、ＩｏＴ機器などの組み込み機器に組み込み可能なＮＮ回路１００を高性能に動作させることができる。ＮＮ回路１００は、ＤＭＡＣ３、畳み込み演算回路４および量子化演算回路５が並列に動作可能である。ＮＮ回路１００は、ＩＦＵ６２を用いることで、外部メモリ１２０から命令コマンドを読み出し、対応した命令実行モジュール（ＤＭＡＣ３、畳み込み演算回路４および量子化演算回路５）の命令キューに命令コマンドを供給できる。命令実行モジュールはセマフォＳによって制御されるため、データ転送の同期を取りつつ、独立して並列に動作できる。また、命令実行モジュールはセマフォＳによって制御されるため、第一メモリ１および第二メモリ２に対するアクセス競合を防止できる。そのため、ＮＮ回路１００は、命令実行モジュールの演算処理効率を向上させることができる。
【０１４２】
以上、本発明の第一実施形態について図面を参照して詳述したが、具体的な構成はこの実施形態に限られるものではなく、本発明の要旨を逸脱しない範囲の設計変更等も含まれる。また、上述の実施形態および変形例において示した構成要素は適宜に組み合わせて構成することが可能である。
【０１４３】
（変形例１）
上記実施形態において、第一メモリ１と第二メモリ２は別のメモリであったが、第一メモリ１と第二メモリ２の態様はこれに限定されない。第一メモリ１と第二メモリ２は、例えば、同一メモリにおける第一メモリ領域と第二メモリ領域であってもよい。
【０１４４】
（変形例２）
例えば、上記実施形態に記載のＮＮ回路１００に入力されるデータは単一の形式に限定されず、静止画像、動画像、音声、文字、数値およびこれらの組み合わせで構成することが可能である。なお、ＮＮ回路１００に入力されるデータは、ＮＮ回路１００が設けられるエッジデバイスに搭載され得る、光センサ、温度計、Global Positioning System（GPS）計測器、角速度計測器、風速計などの物理量測定器における測定結果に限られない。周辺機器から有線または無線通信経由で受信する基地局情報、車両・船舶等の情報、天候情報、混雑状況に関する情報などの周辺情報や金融情報や個人情報等の異なる情報を組み合わせてもよい。
【０１４５】
（変形例３）
ＮＮ回路１００が設けられるエッジデバイスは、バッテリー等で駆動する携帯電話などの通信機器、パーソナルコンピュータなどのスマートデバイス、デジタルカメラ、ゲーム機器、ロボット製品などのモバイル機器を想定するが、これに限られるものではない。Power on Ethernet（PoE）などでの供給可能なピーク電力制限、製品発熱の低減または長時間駆動の要請が高い製品に利用することでも他の先行例にない効果を得ることができる。例えば、車両や船舶などに搭載される車載カメラや、公共施設や路上などに設けられる監視カメラ等に適用することで長時間の撮影を実現できるだけでなく、軽量化や高耐久化にも寄与する。また、テレビやディスプレイ等の表示デバイス、医療カメラや手術ロボット等の医療機器、製造現場や建築現場で使用される作業ロボットなどにも適用することで同様の効果を奏することができる。
【０１４６】
（変形例４）
ＮＮ回路１００は、ＮＮ回路１００の一部または全部を一つ以上のプロセッサを用いて実現してもよい。例えば、ＮＮ回路１００は、入力層または出力層の一部または全部をプロセッサによるソフトウェア処理により実現してもよい。ソフトウェア処理により実現する入力層または出力層の一部は、例えば、データの正規化や変換である。これにより、様々な形式の入力形式または出力形式に対応できる。なお、プロセッサで実行するソフトウェアは、通信手段や外部メディアを用いて書き換え可能に構成してもよい。
【０１４７】
（変形例５）
ＮＮ回路１００は、ＣＮＮ２００における処理の一部をクラウド上のGraphics Processing Unit（GPU）等を組み合わせることで実現してもよい。ＮＮ回路１００は、ＮＮ回路１００が設けられるエッジデバイスで行った処理に加えて、クラウド上でさらに処理を行ったり、クラウド上での処理に加えてエッジデバイス上で処理を行ったりすることで、より複雑な処理を少ないリソースで実現できる。このような構成によれば、ＮＮ回路１００は、処理分散によりエッジデバイスとクラウドとの間の通信量を低減できる。
【０１４８】
（変形例６）
ＮＮ回路１００が行う演算は、学習済みのＣＮＮ２００の少なくとも一部であったが、ＮＮ回路１００が行う演算の対象はこれに限定されない。ＮＮ回路１００が行う演算は、例えば畳み込み演算と量子化演算のように、２種類の演算を繰り返す学習済みのニューラルネットワークの少なくとも一部であってもよい。
【０１４９】
また、本明細書に記載された効果は、あくまで説明的または例示的なものであって限定的ではない。つまり、本開示に係る技術は、上記の効果とともに、または上記の効果に代えて、本明細書の記載から当業者には明らかな他の効果を奏しうる。
【産業上の利用可能性】
【０１５０】
本発明は、ニューラルネットワークの演算に適用することができる。
【符号の説明】
【０１５１】
２００  畳み込みニューラルネットワーク
１００  ニューラルネットワーク回路（ＮＮ回路）
１  第一メモリ
２  第二メモリ
３  ＤＭＡコントローラ（ＤＭＡＣ）
４  畳み込み演算回路
５  量子化演算回路
６  コントローラ
６１  レジスタ
６２  ＩＦＵ（命令フェッチユニット）
６３  フェッチユニット
６３Ａ  フェッチユニット（第三フェッチユニット）
６３Ｂ  フェッチユニット（第一フェッチユニット）
６３Ｃ  フェッチユニット（第二フェッチユニット）
６４  割り込み生成回路
Ｓ  セマフォ
Ｆ１  第一データフロー
Ｆ２  第二データフロー
Ｆ３  第三データフロー
Ｃ３  命令コマンド（第三命令コマンド）
Ｃ４  命令コマンド（第一命令コマンド）
Ｃ５  命令コマンド（第二命令コマンド）
【要約】
【課題】ＩｏＴ機器などの組み込み機器に組み込み可能かつ高性能なニューラルネットワーク回路を提供する。
【解決手段】ニューラルネットワーク回路は、入力データに対して畳み込み演算を行う畳み込み演算回路と、前記畳み込み演算回路の畳み込み演算出力データに対して量子化演算を行う量子化演算回路と、前記畳み込み演算回路または前記量子化演算回路を動作させる命令コマンドを外部メモリから読み出す命令フェッチユニットと、を備える。
【選択図】図７【図１】
0006931252.tif 000011
【図２】
0006931252.tif 000012
【図３】
0006931252.tif 000013
【図４】
0006931252.tif 000014
【図５】
0006931252.tif 000015
【図６】
0006931252.tif 000016
【図７】
0006931252.tif 000017
【図８】
0006931252.tif 000018
【図９】
0006931252.tif 000019
【図１０】
0006931252.tif 000020
【図１１】
0006931252.tif 000021