(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公開特許公報(A)
(11)【公開番号】P2024023030
(43)【公開日】2024-02-21
(54)【発明の名称】半導体装置
(51)【国際特許分類】
G06N 3/063 20230101AFI20240214BHJP
G06F 12/04 20060101ALI20240214BHJP
G06F 12/00 20060101ALI20240214BHJP
G06F 17/16 20060101ALI20240214BHJP
【FI】
G06N3/063
G06F12/04 530
G06F12/00 580
G06F17/16 M
【審査請求】未請求
【請求項の数】12
【出願形態】OL
(21)【出願番号】P 2022126565
(22)【出願日】2022-08-08
(71)【出願人】
【識別番号】302062931
【氏名又は名称】ルネサスエレクトロニクス株式会社
(74)【代理人】
【識別番号】110002066
【氏名又は名称】弁理士法人筒井国際特許事務所
(72)【発明者】
【氏名】寺島 和昭
(72)【発明者】
【氏名】永吉 功
(72)【発明者】
【氏名】中村 淳
【テーマコード(参考)】
5B056
5B160
【Fターム(参考)】
5B056AA04
5B056BB71
5B056DD14
5B056HH03
5B160AB09
5B160AC13
5B160DA08
(57)【要約】
【課題】ニューラルネットワークの処理時間を短縮可能な半導体装置を提供する。
【解決手段】メモリMEM1は、圧縮された重みパラメータWPを記憶する。複数の積和演算器MAC1~MACnは、複数の画素データDiと、複数の重みパラメータWとを積和演算する。解凍器22は、メモリMEM1に記憶された圧縮された重みパラメータWPを、複数の重みパラメータWに復元する。重みパラメータ用メモリWRAMは、解凍器22によって復元された複数の重みパラメータWを記憶する。DMAコントローラDMAC1は、メモリMEM1から解凍器22を介して重みパラメータ用メモリWRAMに、複数の重みパラメータWを転送する。シーケンスコントローラ21は、重みパラメータ用メモリWRAMに記憶された複数の重みパラメータWを、書き込みタイミングで重みパラメータバッファWBFに書き込む。
【選択図】
図1
【特許請求の範囲】
【請求項1】
ニューラルネットワークの処理を実行する半導体装置であって、
圧縮された重みパラメータを記憶する第1のメモリと、
複数の画素データを記憶する第2のメモリと、
前記複数の画素データと、複数の重みパラメータとを積和演算する複数の積和演算器と、
前記複数の重みパラメータを、前記複数の積和演算器に出力する重みパラメータバッファと、
前記複数の画素データを、前記複数の積和演算器に出力するデータ入力バッファと、
前記第1のメモリに記憶された前記圧縮された重みパラメータを、前記複数の重みパラメータに復元する解凍器と、
前記解凍器と、前記重みパラメータバッファとの間に設けられ、前記解凍器によって復元された前記複数の重みパラメータを記憶する第3のメモリと、
前記第1のメモリから前記圧縮された重みパラメータを読み出し、前記解凍器を介して前記第3のメモリに、前記複数の重みパラメータを転送する第1のDMAコントローラと、
前記第2のメモリから前記データ入力バッファに前記複数の画素データを転送する第2のDMAコントローラと、
前記第3のメモリに記憶された前記複数の重みパラメータを、書き込みタイミングで前記重みパラメータバッファに書き込むシーケンスコントローラと、
を備える、
半導体装置。
【請求項2】
請求項1記載の半導体装置において、
前記第1のメモリは、DRAMであり、
前記第3のメモリは、SRAMである、
半導体装置。
【請求項3】
請求項1記載の半導体装置において、
前記書き込みタイミングは、前記データ入力バッファへの前記複数の画素データの転送が完了するタイミングと同期するタイミングである、
半導体装置。
【請求項4】
請求項2記載の半導体装置において、
前記第1のメモリは、ニューラルネットワークの畳み込み層の処理で用いられる複数チャネルの前記圧縮された重みパラメータを記憶し、
前記第1のDMAコントローラは、前記第1のメモリから前記複数チャネルの中の一部のチャネルの前記圧縮された重みパラメータを、前記解凍器を介して前記第3のメモリに転送する、
半導体装置。
【請求項5】
請求項4記載の半導体装置において、
前記第3のメモリは、複数設けられ、
前記複数の第3のメモリのいずれか一つと他のいずれか一つは、互いに異なるチャネルに含まれる前記複数の重みパラメータを記憶する、
半導体装置。
【請求項6】
請求項1記載の半導体装置において、
さらに、前記解凍器と、前記第3のメモリとの間に設けられるゼロ処理回路を備え、
前記シーケンスコントローラは、前記第1のDMAコントローラによる前記複数の重みパラメータの転送が開始される前に、前記第3のメモリの全ての記憶情報をゼロにリセットし、
前記ゼロ処理回路は、前記第3のメモリに転送中の前記複数の重みパラメータの中から非ゼロの重みパラメータを検出し、検出した前記非ゼロの重みパラメータWのみを前記第3のメモリに転送する、
半導体装置。
【請求項7】
一つの半導体チップで構成される半導体装置であって、
ニューラルネットワークの処理を実行するニューラルネットワークエンジンと、
圧縮された重みパラメータを記憶する第1のメモリと、
複数の画素データを記憶する第2のメモリと、
プロセッサと、
前記ニューラルネットワークエンジン、前記第1のメモリ、前記第2のメモリおよび前記プロセッサを互いに接続するバスと、
を有し、
前記ニューラルネットワークエンジンは、
前記複数の画素データと、複数の重みパラメータとを積和演算する複数の積和演算器と、
前記複数の重みパラメータを、前記複数の積和演算器に出力する重みパラメータバッファと、
前記複数の画素データを、前記複数の積和演算器に出力するデータ入力バッファと、
前記第1のメモリに記憶された前記圧縮された重みパラメータを、前記複数の重みパラメータに復元する解凍器と、
前記解凍器と、前記重みパラメータバッファとの間に設けられ、前記解凍器によって復元された前記複数の重みパラメータを記憶している第3のメモリと、
前記第1のメモリから前記圧縮された重みパラメータを読み出し、前記解凍器を介して前記第3のメモリに、前記複数の重みパラメータを転送する第1のDMAコントローラと、
前記第2のメモリから前記データ入力バッファに前記複数の画素データを転送する第2のDMAコントローラと、
前記第3のメモリに記憶された前記複数の重みパラメータを、書き込みタイミングで前記重みパラメータバッファに書き込むシーケンスコントローラと、
を備える、
半導体装置。
【請求項8】
請求項7記載の半導体装置において、
前記第1のメモリは、DRAMであり、
前記第3のメモリは、SRAMである、
半導体装置。
【請求項9】
請求項7記載の半導体装置において、
前記書き込みタイミングは、前記データ入力バッファへの前記複数の画素データの転送が完了するタイミングと同期するタイミングである、
半導体装置。
【請求項10】
請求項8記載の半導体装置において、
前記第1のメモリは、ニューラルネットワークの畳み込み層の処理で用いられる複数チャネルの前記圧縮された重みパラメータを記憶し、
前記第1のDMAコントローラは、前記第1のメモリから前記複数チャネルの中の一部のチャネルの前記圧縮された重みパラメータを、前記解凍器を介して前記第3のメモリに転送する、
半導体装置。
【請求項11】
請求項10記載の半導体装置において、
前記第3のメモリは、複数設けられ、
前記複数の第3のメモリのいずれか一つと他のいずれか一つは、互いに異なるチャネルに含まれる前記複数の重みパラメータを記憶する、
半導体装置。
【請求項12】
請求項7記載の半導体装置において、
前記ニューラルネットワークエンジンは、さらに、前記解凍器と、前記第3のメモリとの間に設けられるゼロ処理回路を備え、
前記シーケンスコントローラは、前記第1のDMAコントローラによる前記複数の重みパラメータの転送が開始される前に、前記第3のメモリの全ての記憶情報をゼロにリセットし、
前記ゼロ処理回路は、前記第3のメモリに転送中の前記複数の重みパラメータの中から非ゼロの重みパラメータを検出し、検出した前記非ゼロの重みパラメータWのみを前記第3のメモリに転送する、
半導体装置。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、半導体装置に関し、例えば、ニューラルネットワークの処理を実行する半導体装置に関する。
【背景技術】
【0002】
特許文献1には、複数チャネルの入力係数テーブルを統合した1個の統合係数テーブルを生成し、当該統合係数テーブルに含まれる各係数と入力画像の各画素値とをそれぞれ乗算し、各乗算結果を、チャネル番号毎に分けて累積加算する半導体装置が示される。また、統合係数テーブルとして、複数チャネルにおける同一の行列箇所の係数の中から最大の係数を抽出したものや、複数チャネル分の各係数を収容できるように行列サイズを拡張したものが示される。
【先行技術文献】
【特許文献】
【0003】
【発明の概要】
【発明が解決しようとする課題】
【0004】
例えば、CNN(Convolutional Neural Network)等のニューラルネットワークの処理では、半導体装置に搭載される複数の積和演算器(MAC(Multiply ACcumulate)回路と呼ぶ)等を用いて膨大な演算処理が実行される。具体的には、MAC回路は、主に、画像データに含まれる複数の画素データとフィルタに含まれる複数の重みパラメータとの積和演算を実行する。
【0005】
画素データおよび重みパラメータは、例えば、メモリに記憶され、DMA(Direct Memory Access)コントローラを介してMAC回路に転送される。この際に、重みパラメータは、必要なメモリ容量を削減するため、圧縮された状態でメモリに記憶され、解凍器を介してMAC回路に転送される場合がある。しかしながら、フィルタのチャネル数、ひいては重みパラメータのデータ量が多い場合や、または、重みパラメータの圧縮率が低い場合には、メモリからMAC回路への重みパラメータの転送に時間を要する。その結果、重みパラメータの転送時間に制限されて、ニューラルネットワークの処理時間が増大するおそれがあった。
【0006】
後述する実施の形態は、このようなことに鑑みてなされたものであり、その他の課題と新規な特徴は、本明細書の記載および添付図面から明らかになるであろう。
【課題を解決するための手段】
【0007】
一実施の形態の半導体装置は、ニューラルネットワークの処理を実行するものであり、第1のメモリと、第2のメモリと、複数の積和演算器と、重みパラメータバッファと、データ入力バッファと、解凍器と、第3のメモリと、第1のDMAコントローラと、第2のDMAコントローラと、シーケンスコントローラと、を備える。第1のメモリは、圧縮された重みパラメータを記憶する。第2のメモリは、複数の画素データを記憶する。複数の積和演算器は、複数の画素データと、複数の重みパラメータとを積和演算する。重みパラメータバッファは、複数の重みパラメータを、複数の積和演算器に出力する。データ入力バッファは、複数の画素データを、複数の積和演算器に出力する。解凍器は、第1のメモリに記憶された圧縮された重みパラメータを、複数の重みパラメータに復元する。第3のメモリは、解凍器と、重みパラメータバッファとの間に設けられ、解凍器によって復元された複数の重みパラメータを記憶する。第1のDMAコントローラは、第1のメモリから圧縮された重みパラメータを読み出し、解凍器を介して第3のメモリに、複数の重みパラメータを転送する。第2のDMAコントローラは、第2のメモリからデータ入力バッファに複数の画素データを転送する。シーケンスコントローラは、第3のメモリに記憶された複数の重みパラメータを、書き込みタイミングで重みパラメータバッファに書き込む。
【発明の効果】
【0008】
一実施の形態の半導体装置を用いることで、ニューラルネットワークの処理時間を短縮することが可能になる。
【図面の簡単な説明】
【0009】
【
図1】
図1は、実施の形態1による半導体装置において、主要部の構成例を示す概略図である。
【
図2】
図2は、
図1に示したニューラルネットワークエンジンによって処理されるニューラルネットワークの構成例を示す概略図である。
【
図3A】
図3Aは、
図1におけるMACユニットの主要部の概略的な動作例を示す模式図である。
【
図4】
図4は、
図1におけるニューラルネットワークエンジンの主要部の詳細な構成例を示す図である。
【
図5】
図5は、
図4における解凍器の処理内容の一例を説明する図である。
【
図6】
図6は、
図5における処理内容の具体例を示す図である。
【
図7A】
図7Aは、
図4におけるニューラルネットワークエンジンの概略的な動作例を示すタイミングチャートである。
【
図9】
図9は、実施の形態2による半導体装置において、
図1におけるニューラルネットワークエンジンの主要部の詳細な構成例を示す図である。
【
図10】
図10は、実施の形態3による半導体装置において、
図1におけるニューラルネットワークエンジンの主要部の詳細な構成例を示す図である。
【
図11】
図11は、比較例となるニューラルネットワークエンジンの概略的な動作例を示すタイミングチャートである。
【発明を実施するための形態】
【0010】
以下の実施の形態においては便宜上その必要があるときは、複数のセクションまたは実施の形態に分割して説明するが、特に明示した場合を除き、それらはお互いに無関係なものではなく、一方は他方の一部または全部の変形例、詳細、補足説明等の関係にある。また、以下の実施の形態において、要素の数等(個数、数値、量、範囲等を含む)に言及する場合、特に明示した場合および原理的に明らかに特定の数に限定される場合等を除き、その特定の数に限定されるものではなく、特定の数以上でも以下でもよい。さらに、以下の実施の形態において、その構成要素(要素ステップ等も含む)は、特に明示した場合および原理的に明らかに必須であると考えられる場合等を除き、必ずしも必須のものではないことは言うまでもない。同様に、以下の実施の形態において、構成要素等の形状、位置関係等に言及するときは、特に明示した場合および原理的に明らかにそうでないと考えられる場合等を除き、実質的にその形状等に近似または類似するもの等を含むものとする。このことは、上記数値および範囲についても同様である。
【0011】
以下、実施の形態を図面に基づいて詳細に説明する。なお、実施の形態を説明するための全図において、同一の機能を有する部材には同一の符号を付し、その繰り返しの説明は省略する。また、以下の実施の形態では、特に必要なとき以外は同一または同様な部分の説明を原則として繰り返さない。
【0012】
(実施の形態1)
<半導体装置の概略>
図1は、実施の形態1による半導体装置において、主要部の構成例を示す概略図である。
図1に示す半導体装置10は、例えば、一つの半導体チップで構成されるSoC(System on Chip)等である。当該半導体装置10は、代表的には、車両のECU(Electronic Control Unit)等に搭載され、ADAS(Advanced Driver Assistance System)の機能を提供する。
【0013】
図1に示す半導体装置10は、ニューラルネットワークエンジン(NNE)15と、CPU(Central Processing Unit)等のプロセッサ17と、メモリMEM1,MEM2と、システムバス16とを有する。システムバス16は、ニューラルネットワークエンジン15、メモリMEM1,MEM2およびプロセッサ17を互いに接続する。ニューラルネットワークエンジン15は、CNNを代表とするニューラルネットワークの処理を実行する。プロセッサ17は、メモリMEM1に記憶される所定のプログラムを実行することで、ニューラルネットワークエンジン15の制御を含めて、半導体装置10に所定の機能を担わせる。
【0014】
メモリ(第1のメモリ)MEM1は、例えば、DRAM(Dynamic Random Access Memory)である。メモリMEM1は、複数の画素データからなる画像データDTと、パラメータPRおよびパラメータPRに付加されるヘッダHDと、を記憶する。パラメータPRには、重みパラメータWPと、バイアスパラメータBPとが含まれる。ヘッダHDには、後述するパラメータ用のスイッチ回路SWPの設定情報等を含めて、ニューラルネットワークエンジン15のシーケンス動作を制御するための各種情報が含まれる。
【0015】
ニューラルネットワークエンジン15は、複数のDMAコントローラDMAC1,DMAC2と、MACユニット20と、シーケンスコントローラ21と、解凍器22と、重みパラメータ用メモリWRAMと、レジスタREGと、データ用のスイッチ回路SWDと、パラメータ用のスイッチ回路SWPと、各種バッファとを備える。各種バッファには、重みパラメータバッファWBFと、データ入力バッファIBFと、データ出力バッファOBFとが含まれる。各種バッファは、詳細には、例えば、フリップフロップ等のラッチ回路で構成されるレジスタであってよい。
【0016】
MACユニット20は、nを2以上の整数として、n個のMAC回路MAC1~MACnを備える。n個のMAC回路MAC1~MACnのそれぞれは、例えば、複数の乗算器と、複数の乗算器からの乗算結果を加算する1個の加算器とを備え、これによって積和演算を実行する。明細書では、n個のMAC回路MAC1~MACnを総称して、MAC回路MACと呼ぶ。重みパラメータバッファWBFは、例えば、記憶された重みパラメータWを、MACユニット20内のn個のMAC回路MAC1~MACnに出力する。
【0017】
DMAコントローラ(第1のDMAコントローラ)DMAC1は、メモリMEM1から重みパラメータ用メモリWRAMに、システムバス16を介して複数の重みパラメータWを転送する。より詳細には、メモリMEM1は、例えば、圧縮された重みパラメータWPを記憶する。DMAコントローラDMAC1は、メモリMEM1から、ヘッダHDと、圧縮された重みパラメータWPとを読み出す。そして、DMAコントローラDMAC1は、ヘッダHDをレジスタREGに転送し、圧縮された重みパラメータWPを、解凍器22を介して重みパラメータ用メモリWRAMに転送する。この際に、解凍器22は、圧縮された重みパラメータWPを、複数の重みパラメータWに復元する。
【0018】
重みパラメータ用メモリ(第3のメモリ)WRAMは、例えば、SRAM(Static Random Access Memory)であり、詳細には、複数のSRAMで構成される。重みパラメータ用メモリWRAMは、解凍器22によって復元された複数の重みパラメータWを記憶する。パラメータ用のスイッチ回路SWPは、例えば、クロスバースイッチ等で構成される。当該スイッチ回路SWPは、設定に基づいて、1対1接続、1対N接続、N対1接続等を行うことで、重みパラメータ用メモリWRAMから読み出された複数の重みパラメータWを、重みパラメータバッファWBFに含まれる各記憶領域に出力する。なお、ヘッダHDは、例えば、当該スイッチ回路SWPの設定情報等を含む。
【0019】
メモリ(第2のメモリ)MEM2は、例えば、SRAMであり、ニューラルネットワークエンジン15の高速キャッシュメモリとして用いられる。例えば、メモリMEM1内の画像データDT、言い換えれば画素データは、予めメモリMEM2にコピーされたのち、ニューラルネットワークエンジン15で用いられる。データ入力バッファIBFは、記憶された複数の画素データDiを、MACユニット20内のn個のMAC回路MAC1~MACnに出力する。DMAコントローラ(第2のDMAコントローラ)DMAC2は、メモリMEM2からデータ入力バッファIBFに複数の画素データDiを転送する。
【0020】
これにより、MACユニット20内の各MAC回路MACは、重みパラメータバッファWBFからの複数の重みパラメータWと、データ入力バッファIBFからの複数の画素データDiとの積和演算、すなわち畳み込み層の処理を実行する。また、詳細は省略するが、MACユニット20は、積和演算結果に対してバイアスパラメータBPの値の加算や、活性化関数の演算や、プーリング層の処理等といったCNNで必要とされる各種処理を行ってもよい。MACユニット20は、このようなCNN処理によって得られた画素データDoをデータ出力バッファOBFに書き込む。
【0021】
また、DMAコントローラDMAC2は、データ出力バッファOBFからメモリMEM2に画素データDoを転送する。メモリMEM2に転送された画素データDo、言い換えれば出力画素データDoは、次段の畳み込み層に入力する画素データDi、言い換えれば入力画素データDiとして用いられる。より詳細には、DMAコントローラDMAC2と、データ入力バッファIBFまたはデータ出力バッファOBFとの間の画素データの転送は、データ用のスイッチ回路SWDを介して行われる。スイッチ回路SWDは、例えば、クロスバースイッチ等で構成され、設定に基づいて、1対1接続、1対N接続、N対1接続等を行う。
【0022】
シーケンスコントローラ21は、ニューラルネットワークエンジン(NNE)15全体の動作シーケンスを制御する。その一つとして、シーケンスコントローラ21は、レジスタREGに記憶されるヘッダHDの情報に基づいて、パラメータ用のスイッチ回路SWPの接続設定を行う。また、シーケンスコントローラ21は、例えば、プロセッサ17からの図示しない設定情報や、メモリMEM1に記憶された図示しないコマンドデータ等に基づいて、DMAコントローラDMAC2の転送設定、データ用のスイッチ回路SWDの接続設定を行う。
【0023】
DMAコントローラDMAC2の転送設定では、メモリMEM2から画素データDiを転送する際のアドレス範囲や、メモリMEM2に画素データDoを転送する際のアドレス範囲等が定められる。データ用のスイッチ回路SWDの接続設定では、メモリMEM2の読み出しアドレスと、データ入力バッファIBFに含まれる各記憶領域との詳細な対応関係や、データ出力バッファOBFに含まれる各記憶領域と、メモリMEM2の書き込みアドレスとの詳細な対応関係等が定められる。
【0024】
さらに、シーケンスコントローラ21は、重みパラメータ用メモリWRAMのアクセス制御を行う。なお、ここでは、シーケンスコントローラ21が設けられたが、シーケンスコントローラ21の代わりにプロセッサ17が、ニューラルネットワークエンジン(NNE)15全体の動作シーケンスを制御してもよい。
【0025】
<ニューラルネットワークの概略>
図2は、
図1に示したニューラルネットワークエンジンによって処理されるニューラルネットワークの構成例を示す概略図である。
図2に示すニューラルネットワークは、Lを2以上の整数として、縦続接続されるL層の畳み込み層25#1,25#2,…,25#Lを備える。畳み込み層25#1は、メモリMEM2に記憶された1層目の入力画素データDi#1と、メモリMEM1に記憶され、解凍器22によって復元された1層目のフィルタFLT#1内の重みパラメータWとの畳み込み演算を行う。そして、畳み込み層25#1は、当該畳み込み演算結果を、1層目の出力画素データDo#1として、メモリMEM2に書き込む。
【0026】
畳み込み層25#2は、メモリMEM2に記憶された1層目の出力画素データDo#1を2層目の入力画素データDi#2として、当該2層目の入力画素データDi#2と、メモリMEM1に記憶され、解凍器22によって復元された2層目のフィルタFLT#2内の重みパラメータWとの畳み込み演算を行う。そして、畳み込み層25#2は、当該畳み込み演算結果を、2層目の出力画素データDo#2として、メモリMEM2に書き込む。
【0027】
以降同様にして、畳み込み層25#Lは、メモリMEM2に記憶されたL-1層目の出力画素データDo#L-1をL層目の入力画素データDi#Lとして、当該L層目の入力画素データDi#Lと、メモリMEM1に記憶され、解凍器22によって復元されたL層目のフィルタFLT#L内の重みパラメータWとの畳み込み演算を行う。そして、畳み込み層25#Lは、当該畳み込み演算結果を、L層目の出力画素データDo#Lとして、メモリMEM2またはメモリMEM1に書き込む。
【0028】
なお、より詳細には、例えば、畳み込み層25#1は、畳み込み演算結果に対して、メモリMEM1に記憶されたバイアスパラメータBPの値を加算したり、活性化関数の演算を行うことで、出力画素データDo#1を生成する。当該バイアスパラメータBPの値の加算や活性化関数の演算は、他の畳み込み層25#2,…,25#Lでも同様に行われる。また、連続する畳み込み層の間には、適宜、プーリング層が設けられる場合がある。明細書では、説明の簡素化のため、当該バイアスパラメータBPの値の加算、活性化関数の演算、プーリング層の処理を省略して説明する。また、明細書では、各フィルタを総称してフィルタFLTと呼ぶ。
【0029】
図3Aは、
図1におけるMACユニットの主要部の概略的な動作例を示す模式図である。
図3Bは、
図3Aに続く動作例を示す模式図である。
図3Aおよび
図3Bには、Kを1からLのいずれか一つの整数として、
図2に示した一つの畳み込み層25#Kで実行される処理内容の一部が示される。
図3Aには、ある制御サイクルTc1での処理内容が示され、
図3Bには、それに続く制御サイクルTc2での処理内容が示される。
【0030】
図3Aにおいて、畳み込み層25#Kに入力されるフィルタFLT#Kは、複数の出力チャネルCHoのフィルタで構成される。
図3Aの例では、フィルタFLT#Kは、複数の出力チャネルCHoの一部であるn個の出力チャネルCHo[1],CHo[2],…,CHo[n]のフィルタFLT[1],FLT[2],…,FLT[n]を含んでいる。
【0031】
フィルタFLT[1],FLT[2],…,FLT[n]のそれぞれは、CHiを入力チャネルとして、X×Y×CHiのフィルタサイズ、この例では2×2×CHiのフィルタサイズを有する。すなわち、フィルタFLT[1],FLT[2],…,FLT[n]のそれぞれは、4個の重みパラメータW1,W2,W3,W4を含む2×2×CHi個の重みパラメータWで構成される。ただし、4個の重みパラメータW1,W2,W3,W4の値は、フィルタFLT[1],FLT[2],…,FLT[n]毎に異なり得る。
【0032】
一方、畳み込み層25#Kに入力される入力画素データDi#Kは、複数の入力チャネルCHiの画素データで構成される。当該入力画素データDi#Kにおいて、畳み込み処理に伴う1番目の画素空間26-1は、前述したフィルタサイズに基づいて、画素データDi1,Di2,Di3,Di4を含む2×2×CHi個の画素データで構成される。
【0033】
MAC回路MAC1は、畳み込み処理に伴う1番目の画素空間26-1に含まれる各画素データDi1,Di2,Di3,Di4,…と、出力チャネルCHo[1]のフィルタFLT[1]に含まれる各重みパラメータW1,W2,W3,W4,…とを積和演算する。これにより、MAC回路MAC1は、出力チャネルCHo[1]の出力画素データDo[1]#Kにおける1番目の画素の画素データDo1を生成する。
【0034】
MAC回路MAC2は、MAC回路MAC1と並行して、1番目の画素空間26-1に含まれる各画素データDi1,Di2,Di3,Di4,…と、出力チャネルCHo[2]のフィルタFLT[2]に含まれる各重みパラメータW1,W2,W3,W4,…とを積和演算する。これにより、MAC回路MAC2は、出力チャネルCHo[2]の出力画素データDo[2]#Kにおける1番目の画素の画素データDo1を生成する。
【0035】
同様に、MAC回路MACnは、MAC回路MAC1と並行して、1番目の画素空間26-1に含まれる各画素データDi1,Di2,Di3,Di4,…と、出力チャネルCHo[n]のフィルタFLT[n]に含まれる各重みパラメータW1,W2,W3,W4,…とを積和演算する。これにより、MAC回路MACnは、出力チャネルCHo[n]の出力画素データDo[n]#Kにおける1番目の画素の画素データDo1を生成する。なお、n個のMAC回路MAC1~MACnのそれぞれは、例えば、X×Y×CHi個の乗算器MULと、これらの乗算器MULからの乗算結果を加算する1個の加算器ADDとを備える。
【0036】
図3Aに示したような制御サイクルTc1での動作を終えると、
図3Bに示されるような制御サイクルTc2での動作が行われる。
図3Bでは、
図3Aの場合とは、使用するフィルタが異なっている。すなわち、畳み込み層25#Kに入力されるフィルタFLT#Kは、
図3Aに示したものに加えて、さらに、複数の出力チャネルCHoの他の一部であるn個の出力チャネルCHo[n+1],CHo[n+2],…,CHo[2n]のフィルタFLT[n+1],FLT[n+2],…,FLT[2n]を含んでいる。
【0037】
MAC回路MAC1は、1番目の画素空間26-1に含まれる各画素データDi1,Di2,Di3,Di4,…と、出力チャネルCHo[n+1]のフィルタFLT[n+1]に含まれる各重みパラメータW1,W2,W3,W4,…とを積和演算する。これにより、MAC回路MAC1は、出力チャネルCHo[n+1]の出力画素データDo[n+1]#Kにおける1番目の画素の画素データDo1を生成する。
【0038】
同様に、MAC回路MACnは、MAC回路MAC1と並行して、1番目の画素空間26-1に含まれる各画素データDi1,Di2,Di3,Di4,…と、出力チャネルCHo[2n]のフィルタFLT[2n]に含まれる各重みパラメータW1,W2,W3,W4,…とを積和演算する。これにより、MAC回路MACnは、出力チャネルCHo[2n]の出力画素データDo[2n]#Kにおける1番目の画素の画素データDo1を生成する。
【0039】
以降同様にして、1番目の画素空間26-1を対象に、最後の出力チャネルCHoに達するまで、フィルタを変更しながら積和演算が行われる。そして、当該1番目の画素空間26-1を対象とした積和演算を終えると、
図3Aおよび
図3Bに示されるように、畳み込み処理に伴う2番目の画素空間26-2を対象に、1番目の画素空間26-1の場合と同様の処理が行われる。これにより、出力画素データDo[1]#K,…,Do[2n]#K,…における2番目の画素の画素データDo2が生成され、さらに同様にして、全ての画素の画素データが生成される。これによって生成された複数の出力チャネルCHoの出力画素データDoは、次段の畳み込み層25#K+1において、複数の入力チャネルCHiの入力画素データDiとして用いられる。
【0040】
ここで、ニューラルネットワークの処理手順として、
図3Aおよび
図3Bに示したような、先に出力チャネルCHo方向を並行処理する手順Aの他に、先に画素空間のシフト方向を並行処理する手順Bや、手順Aと手順Bとを組み合わせて出力チャネルCHo方向と画素空間のシフト方向とを並行処理する手順Cとが挙げられる。手順Bでは、
図3Aにおいて、n個のMAC回路MAC1~MACnは、フィルタFLT[1]の重みパラメータWを共通に入力する。その一方で、n個のMAC回路MAC1,MAC2,…,MACnは、それぞれ、1番目の画素空間26-1、2番目の画素空間26-2、…、n番目の画素空間の画素データDiを入力する。
【0041】
手順Aまたは手順C、特に手順Aでは、手順Bと比較して、n個のMAC回路MAC1~MACnに入力される重みパラメータWのデータ量が大きくなる。この重みパラメータWのデータ量は、入力チャネルCHiの数や出力チャネルCHoの数が増大するほど、より大きくなる。
図1に示したように、重みパラメータWは、DMAコントローラDMAC1を用いて、DRAM等のメモリMEM1からシステムバス16および解凍器22等を介して重みパラメータバッファWBFに転送される。一方、画素データDiは、DMAコントローラDMAC2を用いて、SRAM等のメモリMEM2からデータ入力バッファIBFに転送される。
【0042】
このメモリMEM1,MEM2の違いおよびデータ転送経路の違いにより、重みパラメータWのデータ転送速度は、画素データDiのデータ転送速度よりも遅くなり得る。手順Bの場合には、重みパラメータWのデータ量が小さいため、このデータ転送速度の違いは、特に問題とならない場合が多い。しかしながら、手順Aまたは手順Cの場合、重みパラメータWのデータ量が大きいため、データ転送速度の違いが問題となり得る。具体的には、重みパラメータWの転送時間に制限されて、ニューラルネットワークの処理時間が増大するおそれがある。そこで、
図1の構成例では、重みパラメータ用メモリWRAMが設けられる。
【0043】
<ニューラルネットワークエンジンの詳細>
図4は、
図1におけるニューラルネットワークエンジンの主要部の詳細な構成例を示す図である。
図4において、MACユニット20は、n個のMAC回路MAC1~MACnを備える。n個のMAC回路MAC1~MACnのそれぞれは、
図3Aで述べたように、X×Y×CHi個の乗算器MULと、1個の加算器ADDとを備える。ただし、1個のMAC回路MACに含まれる乗算器MULの数は、フィルタサイズ“X×Y×CHi”に応じて変化する。このため、MACユニット20は、図示しない設定信号に基づいて、この1個のMAC回路MACに含まれる乗算器MULの数を可変設定可能となっている。
【0044】
データ入力バッファIBF、重みパラメータバッファWBFおよびデータ出力バッファOBFは、n個のMAC回路MAC1~MACnのそれぞれに対して設けられる。n個のデータ入力バッファIBF、重みパラメータバッファWBFおよびデータ出力バッファOBFは、それぞれ、n個のデータ入力レジスタ、重みパラメータレジスタおよびデータ出力レジスタであってよい。DMAコントローラDMAC1は、
図1に示したメモリMEM1から、解凍器22を介して重みパラメータ用メモリWRAMに、重みパラメータWを転送する。この際に、解凍器22は、メモリMEM1に記憶され、DMAコントローラDMAC1によって読み出された圧縮された重みパラメータWPを、複数の重みパラメータWに復元する。
【0045】
重みパラメータ用メモリWRAMは、詳細には、例えばn個設けられる。n個の重みパラメータ用メモリWRAM1~WRAMnから読み出された重みパラメータWは、パラメータ用のスイッチ回路SWPを介してn個のMAC回路MAC1~MACnの重みパラメータバッファWBFに書き込まれる。当該スイッチ回路SWPは、シーケンスコントローラ21からの設定信号SSpに基づいて、重みパラメータ用メモリWRAMから読み出された複数の重みパラメータWを、n個の重みパラメータ用メモリWRAM1~WRAMnのいずれに出力するかを定める。
【0046】
一方、
図1に示した画素データ用のDMAコントローラDMAC2は、詳細には、
図4に示されるように、データ入力用のDMAコントローラDMAC2iと、データ出力用のDMAコントローラDMAC2oとを有する。同様に、
図1に示したデータ用のスイッチ回路SWDも、詳細には、
図4に示されるように、データ入力用のスイッチ回路SWDiと、データ出力用のスイッチ回路SWDoとを有する。
【0047】
データ入力用のDMAコントローラDMAC2iは、mを2以上の整数として、m個の転送チャネルCH1~CHmを用いてデータ転送を制御する。当該DMAコントローラDMAC2iは、シーケンスコントローラ21からの設定信号SDiに基づいて、
図1に示したメモリMEM2からn個のデータ入力バッファIBFに、データ入力用のスイッチ回路SWDiを介して画素データDiを転送する。この際に、スイッチ回路SWDiは、シーケンスコントローラ21からの設定信号SSd1に基づいて、m個の転送チャネルCH1~CHmからの画素データDiを、n個のデータ入力バッファIBFのいずれに出力するかを定める。
【0048】
データ出力用のDMAコントローラDMAC2oも、m個の転送チャネルCH1~CHmを用いてデータ転送を制御する。当該DMAコントローラDMAC2oは、シーケンスコントローラ21からの設定信号SDoに基づいて、データ出力バッファOBFからデータ出力用のスイッチ回路SWDoを介して
図1に示したMEM2に、画素データDoを転送する。この際に、スイッチ回路SWDoは、例えば、シーケンスコントローラ21からの設定信号SSd1に基づいて、メモリMEM2に書き込む画素データDoの適切なマッピングを定める。
【0049】
シーケンスコントローラ21は、各種設定信号SDi,SDo,SSd1,SSd2,SSpと、リード信号RDとを出力する。設定信号SDi,SDoは、例えば、プロセッサ17からの図示しない設定情報や、メモリMEM1に記憶された図示しないコマンドデータに基づいて生成され、データ用のDMAコントローラDMAC2i,DMAC2oにそれぞれ出力される。設定信号SSd1,SSd2も、同様にして生成され、データ用のスイッチ回路SWDi,SWDoにそれぞれ出力される。設定信号SSpは、例えば、レジスタREGに保持されるヘッダHDの情報に基づいて生成され、パラメータ用のスイッチ回路SWPに出力される。
【0050】
一方、リード信号RDは、重みパラメータ用メモリWRAMに出力される。重みパラメータ用メモリWRAMは、リード信号RDに応じて読み出し動作を行う。これにより、シーケンスコントローラ21は、重みパラメータ用メモリWRAMに記憶された複数の重みパラメータWを、書き込みタイミングで重みパラメータバッファWBFに書き込むことができる。当該書き込みタイミングは、例えば、データ入力バッファIBFへの画素データDiの転送が完了するタイミングと同期するタイミングである。これに基づいて、リード信号RDの出力タイミングも定められる。
【0051】
[解凍器の詳細]
図5は、
図4における解凍器の処理内容の一例を説明する図である。
図6は、
図5における処理内容の具体例を示す図である。まず、
図1で述べたように、メモリMEM1は、予め、
図5に示されるような圧縮された重みパラメータWPを記憶する。そして、パラメータ用のDMAコントローラDMAC1は、
図5に示されるように、圧縮された重みパラメータWPと、それに付加されるヘッダHDとをメモリMEM1から読み出し、その中の圧縮された重みパラメータWPを解凍器22に出力する。
【0052】
図4に示されるように、ヘッダHDは、レジスタREGを介してシーケンスコントローラ21に出力される。ヘッダHDは、
図5に示されるように、例えば、パラメータ用のスイッチ回路SWPで用いられる転送元識別子ID1および転送先識別子ID2等を含む。シーケンスコントローラ21は、このヘッダHDの情報に基づいて、スイッチ回路SWP内の接続関係を定める。
【0053】
図5において、圧縮された重みパラメータWPは、jを2以上の整数として、jビット、この例では28ビットのマップデータMPDと、iを2以上の整数として、i個、この例では11個の重みパラメータW1,W2,…,Wiとのセットによって構成される。28ビットのマップデータMPDにおける各ビットは、重みパラメータがゼロであるか非ゼロであるかを表す。11個の重みパラメータW1,W2,…,Wiは、マップデータMPDにおける非ゼロを表すビットに対して順に割り当てられる。その結果、解凍器22は、11個の重みパラメータWP1,WP2,…,WPiを含んだ圧縮された重みパラメータWPから、最小で11個、最大で28個の重みパラメータW1,W2,…,Wxを復元する。
【0054】
具体例として、
図6の例では、28ビットのマップデータMPDは、“00011000…”を含んでおり、11個の重みパラメータWは、順に、W1,W2,W3,W4,W5,W6,…を含んでいる。マップデータMPDにおける28ビットは、28個の重みパラメータWにそれぞれ対応し、当該28個の重みパラメータWのそれぞれが、ゼロか非ゼロかを表す。この例では、マップデータMPDが“1”であるビットに対応する重みパラメータWは、ゼロである。そして、11個の重みパラメータWは、マップデータMPDが“0”であるビットに対応する重みパラメータWとして、順に割り当てられる。
【0055】
これにより、解凍器22は、
図6に示されるように、復元された複数の重みパラメータW1,W2,W3,0,0,W4,W5,W6,…を出力する。このような方式により、
図5において、仮に、マップデータMPDの28ビットが全て“1”の場合、解凍器22は、28個のゼロ重みパラメータを出力する。一方、マップデータMPDにおける1ビット目から11ビット目が全て“0”の場合、解凍器22は、非ゼロである11個の重みパラメータW1,W2,…,W11を出力する。
【0056】
解凍器22は、
図5の例では、最大で28個の重みパラメータWを出力する。当該重みパラメータWの最大数は、
図5に示したビット幅を128ビットから256ビット、512ビット等に拡張することで、増やすことが可能である。一方、実際の畳み込み層の処理では、ある制御サイクルにおいて、このようなビット幅の拡張では対応できない程度に多数の重みパラメータWが必要とされ得る。この場合、解凍器22は、必要な数の重みパラメータWが得られるまで、前述したような復元処理を繰り返し実行する。
【0057】
[ニューラルネットワークエンジンの全体動作]
図7Aは、
図4におけるニューラルネットワークエンジンの概略的な動作例を示すタイミングチャートである。
図7Bは、
図7Aの動作例を説明するための補足図である。
図8Aは、
図7Aとは異なる動作例を示すタイミングチャートである。
図8Bは、
図8Aの動作例を説明する補足図である。
図11は、比較例となるニューラルネットワークエンジンの概略的な動作例を示すタイミングチャートである。
【0058】
まず、比較例となるニューラルネットワークエンジンは、
図1および
図4において、重みパラメータ用メモリWRAMが設けられない構成となっている。この場合、
図11に示されるような動作が行われる。
図11では、
図3Aで述べたような制御サイクルTc1での動作に続いて、
図3Bで述べたような制御サイクルTc2での動作が行われている。制御サイクルTc1は、時点t1から時点t2までの期間T11と、時点t2から時点t3までの期間T12と、時点t3から時点t4までの期間T13とで構成される。
【0059】
期間T11において、データ入力用のDMAコントローラDMAC2iは、メモリMEM2からデータ入力用のスイッチ回路SWDiを介してデータ入力バッファIBFに、入力画素データDi#Kを転送する。期間T12において、n個のMAC回路MAC1~MACnは、入力画素データDi#Kと、n個の出力チャネルのフィルタFLT[1]~FLT[n]に含まれる重みパラメータWとの積和演算を実行する。期間T13において、データ出力用のDMAコントローラDMAC2oは、データ出力バッファOBFに記憶されたn個の出力チャネルの出力画素データDo[1]#K~Do[n]#Kを、データ出力用のスイッチ回路SWDoを介してメモリMEM2に転送する。
【0060】
ここで、期間T12においてn個のMAC回路MAC1~MACnで積和演算を行うためには、時点t2で、重みパラメータバッファWBFに重みパラメータWが記憶されている必要がある。そこで、期間T11と並行する期間T01aにおいて、パラメータ用のDMAコントローラDMAC1は、メモリMEM1から解凍器22およびパラメータ用のスイッチ回路SWPを介して重みパラメータバッファWBFに、n個の出力チャネルのフィルタFLT[1]~FLT[n]に含まれる重みパラメータWを転送する。ただし、転送する重みパラメータWのデータ量が大きい場合、期間T01aは、期間T11に比べて長くなる。このため、期間T01aの開始時点は、時点t1よりも早い時点となる。
【0061】
制御サイクルTc1に続く制御サイクルTc2は、時点t5から時点t6までの期間T21と、時点t6から時点t7までの期間T22と、時点t7から時点t8までの期間T23とで構成される。期間T21,T22,T23では、それぞれ、制御サイクルTc1における期間T11,T12,T13での動作と同様の動作が行われる。ただし、期間T22では、期間T12の場合とは異なるn個の出力チャネルのフィルタ、すなわち、フィルタFLT[n+1]~FLT[2n]を用いて積和演算が実行される。
【0062】
期間T22においてn個のMAC回路MAC1~MACnで積和演算を行うためには、時点t6で、重みパラメータバッファWBFに重みパラメータWが記憶されている必要がある。そこで、期間T21と並行する期間T02aにおいて、パラメータ用のDMAコントローラDMAC1は、期間T01aの場合と同様にして、重みパラメータバッファWBFに、n個の出力チャネルのフィルタFLT[n+1]~FLT[2n]に含まれる重みパラメータWを転送する。
【0063】
ただし、期間T02aの開始時点は、前述した期間T12の途中で重みパラメータバッファWBFに記憶されている重みパラメータWが変わらないようにするため、例えば、時点t3以降となる。その結果、
図11に示されるように、制御サイクルTc1と制御サイクルTc2との間、すなわち時点t4と時点t5との間に、長い待ち時間Tw3が必要となり得る。この待ち時間Tw3は、転送する重みパラメータWのデータ量が大きくなるほど、長くなり得る。
【0064】
一方、重みパラメータ用メモリWRAMを備えたニューラルネットワークエンジンでは、例えば、
図7Aに示されるような動作が行われる。
図7Aの動作例では、
図11における期間T01aが期間T01および期間T10に、期間T02aが期間T02および期間T20にそれぞれ置き換わっている。
【0065】
期間T01において、パラメータ用のDMAコントローラDMAC1は、期間T01aの場合と同様に、メモリMEM1に記憶されたn個の出力チャネルのフィルタFLT[1]~FLT[n]に含まれる重みパラメータWを、解凍器22を介して転送する。ただし、その転送先は、期間T01aの場合と異なり、重みパラメータバッファWBFではなく、重みパラメータ用メモリWRAMとなっている。
図7Aの例では、重みパラメータ用メモリWRAMへの重みパラメータWの転送は、時点t1で完了している。
【0066】
重みパラメータWの転送が完了した時点t1において、シーケンスコントローラ21は、重みパラメータ用メモリWRAMにリード信号RDを出力する。これに応じて、時点t1から時点t2までの期間T10において、重みパラメータ用メモリWRAMに記憶されたn個の出力チャネルのフィルタFLT[1]~FLT[n]に含まれる重みパラメータWは、パラメータ用のスイッチ回路SWPを介して重みパラメータバッファWBFに書き込まれる。期間T10の長さは、主にSRAM等の重みパラメータ用メモリWRAMのリード速度で定められるため、十分に短くなる。
【0067】
期間T02および期間T20での動作も、期間T01および期間T10での動作と同様である。ただし、期間T02および期間T20での転送対象は、期間T01および期間T10の場合とは異なるn個の出力チャネルのフィルタFLT[n+1]~FLT[2n]である。
【0068】
以上のように、
図7Aに示される動作例では、前提として、メモリMEM1は、畳み込み層の処理で用いられる複数チャネルの圧縮された重みパラメータWPを記憶する。そして、パラメータ用のDMAコントローラDMAC1は、メモリMEM1から複数チャネルの中の一部のチャネルの圧縮された重みパラメータWPを、解凍器22を介して重みパラメータ用メモリWRAMに転送する。さらに、パラメータ用のDMAコントローラDMAC1は、重みパラメータ用メモリWRAMに転送するチャネルを適宜入れ替える。
【0069】
ここで、
図7Aに示されるように、期間T02におけるメモリMEM1から重みパラメータ用メモリWRAMへの重みパラメータWの転送は、
図11に示した期間T02aの場合と異なり、時点t2で開始することができる。すなわち、時点t2は、期間T10での動作の完了によって、重みパラメータバッファWBFが書き込まれた重みパラメータWのラッチを開始すると共に、重みパラメータ用メモリWRAMが開放される時点である。その結果、制御サイクルTc1と制御サイクルTc2との間、すなわち時点t4と時点t5との間の待ち時間Tw1を、
図11での待ち時間Tw3と比較して短縮することが可能になる。
【0070】
図7Bには、
図7Aに示される期間T01および期間T10での模式的な動作例が示される。
図7Bにおいて、期間T01では、図示しないメモリMEM1からn個の重みパラメータ用メモリWRAM1~WRAMnに、n個のフィルタFLT[1]~FLT[n]の重みパラメータWがそれぞれ転送される。すなわち、n個の重みパラメータ用メモリWRAM1~WRAMnのいずれか一つと他のいずれか一つは、互いに異なるチャネルに含まれる重みパラメータWを記憶する。期間T10では、n個の重みパラメータ用メモリWRAM1~WRAMnに記憶されるn個のフィルタFLT[1]~FLT[n]の重みパラメータWが、n個のデータ入力バッファIBFにそれぞれ書き込まれる。
【0071】
1個のフィルタFLTは、例えば、X×Y×CHi=3×3×1024=9216といった大きいフィルタサイズを有する場合がある。この場合、n個の重みパラメータ用メモリWRAM1~WRAMnのそれぞれは、1個の重みパラメータWを8ビット(1バイト)として、例えば、10kバイト程度のメモリ容量を備えればよい。
【0072】
図8Aの動作例では、
図7Aにおける期間T01および期間T02が、時点t1以前の期間である期間T00に置き換わっている。期間T00において、パラメータ用のDMAコントローラDMAC1は、メモリMEM1に記憶された2×n個の出力チャネルのフィルタFLT[1]~FLT[2n]に含まれる重みパラメータWを、解凍器22を介して重みパラメータ用メモリWRAMに転送する。
図8Aの例では、重みパラメータ用メモリWRAMへの重みパラメータWの転送は、時点t1で完了している。
【0073】
重みパラメータWの転送が完了した時点t1において、シーケンスコントローラ21は、重みパラメータ用メモリWRAMに、読み出しのアドレス範囲を含めてリード信号RD1を出力する。これに応じて、時点t1から時点t2までの期間T10において、重みパラメータ用メモリWRAMに記憶されたn個の出力チャネルのフィルタFLT[1]~FLT[n]に含まれる重みパラメータWは、パラメータ用のスイッチ回路SWPを介して重みパラメータバッファWBFに書き込まれる。
【0074】
同様に、時点t5において、シーケンスコントローラ21は、重みパラメータ用メモリWRAMに、読み出しのアドレス範囲を含めてリード信号RD2を出力する。これに応じて、時点t5から時点t6までの期間T20において、重みパラメータ用メモリWRAMに記憶された他のn個の出力チャネルのフィルタFLT[n+1]~FLT[2n]に含まれる重みパラメータWは、パラメータ用のスイッチ回路SWPを介して重みパラメータバッファWBFに書き込まれる。
【0075】
図8Aに示される動作例では、
図7Aにおける期間T01で転送される重みパラメータWに加えて、期間T02で転送される重みパラメータWも、期間T00で予め重みパラメータ用メモリWRAMに転送される。その結果、制御サイクルTc1と制御サイクルTc2との間、すなわち時点t4と時点t5との間の待ち時間Tw2を、
図7Aでの待ち時間Tw1よりも更に短縮することが可能になる。ただし、期間T00の長さは、期間T01等よりも長くなり得るため、当該期間を他の設定処理等で隠蔽するように全体シーケンスを構築することが望ましい。
【0076】
図8Bには、
図8Aに示される期間T00、期間T10および期間T20での模式的な動作例が示される。
図8Bにおいて、期間T00では、図示しないメモリMEM1からn個の重みパラメータ用メモリWRAM1~WRAMnのそれぞれに、2個のフィルタFLTの重みパラメータWが転送される。例えば、重みパラメータ用メモリWRAM1には、2個のフィルタFLT[1],FLT[n+1]の重みパラメータWが転送され、同様にして、重みパラメータ用メモリWRAMnには、2個のフィルタFLT[n],FLT[2n]の重みパラメータWが転送される。
【0077】
期間T10では、n個の重みパラメータ用メモリWRAM1~WRAMnに記憶されるn個のフィルタFLT[1]~FLT[n]の重みパラメータWが、n個のデータ入力バッファIBFにそれぞれ書き込まれる。一方、期間T20では、n個の重みパラメータ用メモリWRAM1~WRAMnに記憶される他のn個のフィルタFLT[n+1]~FLT[2n]の重みパラメータWが、n個のデータ入力バッファIBFにそれぞれ書き込まれる。
【0078】
なお、
図7Aおよび
図8Aでは、先に出力チャネルCHo方向を並行処理する前述した手順Aでの動作例を示したが、出力チャネルCHo方向と画素空間のシフト方向とを並行処理する前述した手順Cでの動作が行われてもよい。具体例として、大きいサイズのフィルタFLTが用いられるある畳み込み層では、
図7Bに示したような手順Aでの動作が行われる。一方、別の畳み込み層では、例えば、
図7Bの場合と比較して、半分のサイズのフィルタFLTが用いられると仮定する。
【0079】
この場合、例えば、
図8BにおけるフィルタFLT[1]のサイズは、
図7BにおけるフィルタFLT[1]の半分である。この場合、
図8BにおけるMAC回路MAC1に含まれる乗算器MULの数も、
図7Bの場合と比較して半分でよい。そこで、
図8BにおけるMAC回路MAC1が2個のMAC回路(MAC1-1,MAC1-2とする)に2分割されるようにMACユニット20を設定する。
【0080】
そして、MAC回路MAC1-1は、
図3Aに示した画素空間26-1の画素データDiと、フィルタFLT[1]の重みパラメータWとを積和演算する。一方、MAC回路MAC1-2は、
図3Aに示した別の画素空間26-2の画素データDiと、フィルタFLT[1]の重みパラメータWとを積和演算する。この際に、パラメータ用のスイッチ回路SWPは、重みパラメータ用メモリWRAM1から読み出したフィルタFLT[1]の重みパラメータWを、当該2個のMAC回路MAC1-1,MAC1-2に転送する。
【0081】
<実施の形態1の主要な効果>
以上、実施の形態1の方式では、解凍器22によって復元された重みパラメータWを記憶する重みパラメータ用メモリWRAMを設けることで、重みパラメータバッファWBFに記憶される重みパラメータWの入れ替えに要する時間を短縮することができる。特に、重みパラメータ用メモリWRAMを、解凍器22と重みパラメータバッファWBFとの間に設けることで、このような効果が得られる。その結果、ニューラルネットワークの処理時間を短縮することが可能になる。
【0082】
さらに、このような効果を、重みパラメータ用メモリWRAMの実装に伴う面積オーバヘッドの増大を抑制しつつ得ることが可能になる。具体的には、別の比較例として、
図1において、画素データの場合と同様のキャッシュメモリ、すなわちメモリMEM2に相当するキャッシュメモリを、重みパラメータWに対しても設けることが考えられる。この場合、当該キャッシュメモリには、例えば、メモリMEM1に記憶され、ある畳み込み層で用いられる全ての出力チャネルCHoのフィルタFLT、詳細には、フィルタFLTの構成要素となる圧縮された重みパラメータWPが予めコピーされる。
【0083】
具体例として、出力チャネルCHoが1024個の場合、当該キャッシュメモリには、1024個のフィルタFLTが予めコピーされる。そうすると、キャッシュメモリに必要とされるメモリ容量が増大し得る。一方、実施の形態1の方式では、重みパラメータ用メモリWRAMは、
図7A等に示したように、チャネルを入れ替えながら一部のチャネルを記憶することで、1024個よりも少ないn個、例えば、数10個~数100個といったフィルタFLTを記憶できる程度のメモリ容量を持てばよい。
【0084】
(実施の形態2)
<ニューラルネットワークエンジンの詳細>
図9は、実施の形態2による半導体装置において、
図1におけるニューラルネットワークエンジンの主要部の詳細な構成例を示す図である。
図9に示される構成例は、
図4に示した構成例と比較して、次の2点が異なっている。1点目の相違点として、解凍器22と重みパラメータ用メモリWRAMとの間に、ゼロ処理回路30が設けられる。2点目の相違点として、シーケンスコントローラ21aは、ゼロ処理回路30にリセット信号RSTを出力する。
【0085】
シーケンスコントローラ21aは、重みパラメータ用メモリWRAMへの重みパラメータWの転送が開始される前に、重みパラメータ用メモリWRAMに記憶される全ての記憶情報をゼロにリセットする。この例では、シーケンスコントローラ21aは、ゼロ処理回路30にリセット信号RSTを出力する。ゼロ処理回路30は、リセット信号RSTに応じて、重みパラメータ用メモリWRAMにオールゼロを書き込む。なお、別の方式として、重みパラメータ用メモリWRAMにリセット機能を設け、重みパラメータ用メモリWRAMにリセット信号RSTを出力する方式であってもよい。
【0086】
その後、重みパラメータ用メモリWRAMに重みパラメータWが転送される際に、ゼロ処理回路30は、重みパラメータ用メモリWRAMに転送中の重みパラメータWの中から非ゼロの重みパラメータWを検出する。そして、ゼロ処理回路30は、検出した非ゼロの重みパラメータWのみを重みパラメータ用メモリWRAMに転送する。
【0087】
具体的には、例えば、1個の重みパラメータWが8ビットの場合、ゼロ処理回路30は、当該8ビットのオア演算結果、すなわちゼロ判定結果に基づいて、当該8ビットの通過/遮断を切り替えるような回路を備えればよい。あるいは、ゼロ処理回路30は、
図5に示したような、解凍器22に入力されるマップデータMPDを参照することで、ゼロ判定を行ってもよい。
【0088】
<実施の形態2の主要な効果>
以上、実施の形態2の方式を用いると、実施の形態1で述べた各種効果に加えて、重みパラメータ用メモリWRAMに重みパラメータWを書き込む際のデータ量を削減できる。その結果、書き込みに要する時間を短縮することや、書き込みに伴う消費電力を低減することが可能になる。すなわち、実際のCNNの処理では、フィルタFLT内に、ゼロである重みパラメータWが多く含まれ得る。このため、ゼロ処理回路30を設けることが有益となる。
【0089】
(実施の形態3)
<ニューラルネットワークエンジンの詳細>
図10は、実施の形態3による半導体装置において、
図1におけるニューラルネットワークエンジンの主要部の詳細な構成例を示す図である。
図10に示される構成例は、
図4に示した構成例と比較して、次の2点が異なっている。1点目の相違点として、データ入力用のDMAコントローラDMAC2iと、データ入力用のスイッチ回路SWDiとの間に、解凍器35が設けられる。2点目の相違点として、データ出力用のDMAコントローラDMAC2oの出力経路上に圧縮器36が設けられる。
【0090】
圧縮器36は、データ出力用のDMAコントローラDMAC2oからの出力画素データDoを圧縮し、メモリMEM2に出力する。圧縮方式は、例えば、
図5に述べたような復元方式に対する可逆的な方式であってよい。一方、解凍器35は、データ入力用のDMAコントローラDMAC2iからの圧縮された入力画素データを復元し、データ入力用のスイッチ回路SWDiを介してデータ入力バッファIBFに出力する。解凍器35は、重みパラメータW用の解凍器22と同様の構成であってよい。
【0091】
<実施の形態3の主要な効果>
以上、実施の形態3の方式を用いると、実施の形態1で述べた各種効果に加えて、圧縮器36および解凍器35の設置に伴い、メモリMEM2との間で画素データDi,Doを転送する際のデータ量を削減することができる。その結果、メモリMEM2に必要とされるメモリ容量を削減することが可能になる。
【0092】
以上、本発明者によってなされた発明を実施の形態に基づき具体的に説明したが、本発明は前記実施の形態に限定されるものではなく、その要旨を逸脱しない範囲で種々変更可能であることはいうまでもない。
【符号の説明】
【0093】
10 半導体装置
15 ニューラルネットワークエンジン(NNE)
16 システムバス
17 プロセッサ
21 シーケンスコントローラ
22 解凍器
25 畳み込み層
30 ゼロ処理回路
DMAC1,DMAC2 DMAコントローラ
Di 画素データ
IBF データ入力バッファ
MAC MAC回路
MEM1,MEM2 メモリ
W 重みパラメータ
WBF 重みパラメータバッファ
WP 圧縮された重みパラメータ
WRAM 重みパラメータ用メモリ