JP2023056644A - ニューラルネットワーク回路およびニューラルネットワーク回路の制御方法 - Google Patents
ニューラルネットワーク回路およびニューラルネットワーク回路の制御方法 Download PDFInfo
- Publication number
- JP2023056644A JP2023056644A JP2021165970A JP2021165970A JP2023056644A JP 2023056644 A JP2023056644 A JP 2023056644A JP 2021165970 A JP2021165970 A JP 2021165970A JP 2021165970 A JP2021165970 A JP 2021165970A JP 2023056644 A JP2023056644 A JP 2023056644A
- Authority
- JP
- Japan
- Prior art keywords
- circuit
- quantization
- semaphore
- convolution
- convolution operation
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
- 238000013528 artificial neural network Methods 0.000 title claims abstract description 47
- 238000000034 method Methods 0.000 title claims description 25
- 238000013139 quantization Methods 0.000 claims abstract description 254
- 230000015654 memory Effects 0.000 claims description 179
- 238000012546 transfer Methods 0.000 claims description 68
- 230000036961 partial effect Effects 0.000 description 53
- 239000013598 vector Substances 0.000 description 47
- 238000010586 diagram Methods 0.000 description 41
- 238000013527 convolutional neural network Methods 0.000 description 31
- 230000007704 transition Effects 0.000 description 22
- 238000004364 calculation method Methods 0.000 description 21
- 238000011176 pooling Methods 0.000 description 17
- 230000006870 function Effects 0.000 description 15
- 239000011159 matrix material Substances 0.000 description 14
- 230000004913 activation Effects 0.000 description 12
- 238000012545 processing Methods 0.000 description 12
- 238000012986 modification Methods 0.000 description 11
- 230000004048 modification Effects 0.000 description 11
- 230000002829 reductive effect Effects 0.000 description 11
- 238000010606 normalization Methods 0.000 description 10
- 238000004891 communication Methods 0.000 description 7
- 230000000694 effects Effects 0.000 description 5
- 230000003068 static effect Effects 0.000 description 4
- 240000006829 Ficus sundaica Species 0.000 description 3
- 238000006243 chemical reaction Methods 0.000 description 2
- 239000000470 constituent Substances 0.000 description 2
- 238000013461 design Methods 0.000 description 2
- 238000009826 distribution Methods 0.000 description 2
- 230000002093 peripheral effect Effects 0.000 description 2
- 230000008859 change Effects 0.000 description 1
- 230000000295 complement effect Effects 0.000 description 1
- 238000010276 construction Methods 0.000 description 1
- 230000003247 decreasing effect Effects 0.000 description 1
- 238000011161 development Methods 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 238000007667 floating Methods 0.000 description 1
- 230000020169 heat generation Effects 0.000 description 1
- 230000000670 limiting effect Effects 0.000 description 1
- 238000004519 manufacturing process Methods 0.000 description 1
- 238000005259 measurement Methods 0.000 description 1
- 230000001151 other effect Effects 0.000 description 1
- 238000007493 shaping process Methods 0.000 description 1
- 238000003860 storage Methods 0.000 description 1
- 230000009466 transformation Effects 0.000 description 1
- 238000012795 verification Methods 0.000 description 1
- 239000013585 weight reducing agent Substances 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F1/00—Details not covered by groups G06F3/00 - G06F13/00 and G06F21/00
- G06F1/26—Power supply means, e.g. regulation thereof
- G06F1/32—Means for saving power
- G06F1/3203—Power management, i.e. event-based initiation of a power-saving mode
- G06F1/3234—Power saving characterised by the action undertaken
- G06F1/3237—Power saving characterised by the action undertaken by disabling clock generation or distribution
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F17/00—Digital computing or data processing equipment or methods, specially adapted for specific functions
- G06F17/10—Complex mathematical operations
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N3/00—Computing arrangements based on biological models
- G06N3/02—Neural networks
- G06N3/06—Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons
- G06N3/063—Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons using electronic means
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- Theoretical Computer Science (AREA)
- General Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- Data Mining & Analysis (AREA)
- Mathematical Physics (AREA)
- Health & Medical Sciences (AREA)
- Life Sciences & Earth Sciences (AREA)
- Biomedical Technology (AREA)
- Biophysics (AREA)
- Software Systems (AREA)
- Neurology (AREA)
- Algebra (AREA)
- Molecular Biology (AREA)
- General Health & Medical Sciences (AREA)
- Evolutionary Computation (AREA)
- Computational Linguistics (AREA)
- Artificial Intelligence (AREA)
- Computing Systems (AREA)
- Computational Mathematics (AREA)
- Mathematical Analysis (AREA)
- Mathematical Optimization (AREA)
- Pure & Applied Mathematics (AREA)
- Databases & Information Systems (AREA)
- Complex Calculations (AREA)
Abstract
【課題】IoT機器などの組み込み機器に組み込み可能なニューラルネットワーク回路を高性能に動作させる。【解決手段】ニューラルネットワーク回路は、入力データに対して畳み込み演算を行う畳み込み演算回路と、前記畳み込み演算回路の畳み込み演算出力データに対して量子化演算を行う量子化演算回路と、を備え、前記畳み込み演算回路は、前記畳み込み演算の実行を待ち合わせるとき、前記畳み込み演算回路の少なくとも一部に供給される第一クロックのクロックゲーティングを有効にする。【選択図】図4
Description
本発明は、ニューラルネットワーク回路およびニューラルネットワーク回路の制御方法に関する。
近年、畳み込みニューラルネットワーク(Convolutional Neural Network:CNN)が画像認識等のモデルとして用いられている。畳み込みニューラルネットワークは、畳み込み層やプーリング層を有する多層構造であり、畳み込み演算等の多数の演算を必要とする。畳み込みニューラルネットワークによる演算を高速化する演算手法が様々考案されている(特許文献1など)。
一方で、IoT機器などの組み込み機器においても畳み込みニューラルネットワークを利用した画像認識等を実現することが望まれている。組み込み機器においては、特許文献1等に記載された大規模な専用回路を組み込むことは難しい。また、CPUやメモリ等のハードウェアリソースが限られた組み込み機器においては、畳み込みニューラルネットワークの十分な演算性能をソフトウェアのみにより実現することは難しい。
上記事情を踏まえ、本発明は、IoT機器などの組み込み機器に組み込み可能なニューラルネットワーク回路を高性能に動作させることができるニューラルネットワーク回路およびニューラルネットワーク回路の制御方法を提供することを目的とする。
上記課題を解決するために、この発明は以下の手段を提案している。
本発明の第一の態様に係るニューラルネットワーク回路は、入力データに対して畳み込み演算を行う畳み込み演算回路と、前記畳み込み演算回路の畳み込み演算出力データに対して量子化演算を行う量子化演算回路と、を備え、前記畳み込み演算回路は、前記畳み込み演算の実行を待ち合わせるとき、前記畳み込み演算回路の少なくとも一部に供給される第一クロックのクロックゲーティングを有効にする。
本発明の第一の態様に係るニューラルネットワーク回路は、入力データに対して畳み込み演算を行う畳み込み演算回路と、前記畳み込み演算回路の畳み込み演算出力データに対して量子化演算を行う量子化演算回路と、を備え、前記畳み込み演算回路は、前記畳み込み演算の実行を待ち合わせるとき、前記畳み込み演算回路の少なくとも一部に供給される第一クロックのクロックゲーティングを有効にする。
本発明のニューラルネットワーク回路およびニューラルネットワーク回路の制御方法は、IoT機器などの組み込み機器に組み込み可能なニューラルネットワーク回路を高性能に動作させることができる。
(第一実施形態)
本発明の第一実施形態について、図1から図25を参照して説明する。
図1は、畳み込みニューラルネットワーク200(以下、「CNN200」という)を示す図である。第一実施形態に係るニューラルネットワーク回路100(以下、「NN回路100」という)が行う演算は、推論時に使用する学習済みのCNN200の少なくとも一部である。
本発明の第一実施形態について、図1から図25を参照して説明する。
図1は、畳み込みニューラルネットワーク200(以下、「CNN200」という)を示す図である。第一実施形態に係るニューラルネットワーク回路100(以下、「NN回路100」という)が行う演算は、推論時に使用する学習済みのCNN200の少なくとも一部である。
[CNN200]
CNN200は、畳み込み演算を行う畳み込み層210と、量子化演算を行う量子化演算層220と、出力層230と、を含む多層構造のネットワークである。CNN200の少なくとも一部において、畳み込み層210と量子化演算層220とが交互に連結されている。CNN200は、画像認識や動画認識に広く使われるモデルである。CNN200は、全結合層などの他の機能を有する層(レイヤ)をさらに有してもよい。
CNN200は、畳み込み演算を行う畳み込み層210と、量子化演算を行う量子化演算層220と、出力層230と、を含む多層構造のネットワークである。CNN200の少なくとも一部において、畳み込み層210と量子化演算層220とが交互に連結されている。CNN200は、画像認識や動画認識に広く使われるモデルである。CNN200は、全結合層などの他の機能を有する層(レイヤ)をさらに有してもよい。
図2は、畳み込み層210が行う畳み込み演算を説明する図である。
畳み込み層210は、入力データaに対して重みwを用いた畳み込み演算を行う。畳み込み層210は、入力データaと重みwとを入力とする積和演算を行う。
畳み込み層210は、入力データaに対して重みwを用いた畳み込み演算を行う。畳み込み層210は、入力データaと重みwとを入力とする積和演算を行う。
畳み込み層210への入力データa(アクティベーションデータ、特徴マップともいう)は、画像データ等の多次元データである。本実施形態において、入力データaは、要素(x,y,c)からなる3次元テンソルである。CNN200の畳み込み層210は、低ビットの入力データaに対して畳み込み演算を行う。本実施形態において、入力データaの要素は、2ビットの符号なし整数(0,1,2,3)である。入力データaの要素は、例えば、4ビットや8ビット符号なし整数でもよい。
CNN200に入力される入力データが、例えば32ビットの浮動小数点型など、畳み込み層210への入力データaと形式が異なる場合、CNN200は畳み込み層210の前に型変換や量子化を行う入力層をさらに有してもよい。
畳み込み層210の重みw(フィルタ、カーネルともいう)は、学習可能なパラメータである要素を有する多次元データである。本実施形態において、重みwは、要素(i,j,c,d)からなる4次元テンソルである。重みwは、要素(i,j,c)からなる3次元テンソル(以降、「重みwo」という)をd個有している。学習済みのCNN200における重みwは、学習済みのデータである。CNN200の畳み込み層210は、低ビットの重みwを用いて畳み込み演算を行う。本実施形態において、重みwの要素は、1ビットの符号付整数(0,1)であり、値「0」は+1を表し、値「1」は-1を表す。
畳み込み層210は、式1に示す畳み込み演算を行い、出力データfを出力する。式1において、sはストライドを示す。図2において点線で示された領域は、入力データaに対して重みwoが適用される領域ao(以降、「適用領域ao」という)の一つを示している。適用領域aoの要素は、(x+i,y+j,c)で表される。
量子化演算層220は、畳み込み層210が出力する畳み込み演算の出力に対して量子化などを実施する。量子化演算層220は、プーリング層221と、Batch Normalization層222と、活性化関数層223と、量子化層224と、を有する。
プーリング層221は、畳み込み層210が出力する畳み込み演算の出力データfに対して平均プーリング(式2)やMAXプーリング(式3)などの演算を実施して、畳み込み層210の出力データfを圧縮する。式2および式3において、uは入力テンソルを示し、vは出力テンソルを示し、Tはプーリング領域の大きさを示す。式3において、maxはTに含まれるiとjの組み合わせに対するuの最大値を出力する関数である。
Batch Normalization層222は、量子化演算層220やプーリング層221の出力データに対して、例えば式4に示すような演算によりデータ分布の正規化を行う。式4において、uは入力テンソルを示し、vは出力テンソルを示し、αはスケールを示し、βはバイアスを示す。学習済みのCNN200において、αおよびβは学習済みの定数ベクトルである。
活性化関数層223は、量子化演算層220やプーリング層221やBatch Normalization層222の出力に対してReLU(式5)などの活性化関数の演算を行う。式5において、uは入力テンソルであり、vは出力テンソルである。式5において、maxは引数のうち最も大きい数値を出力する関数である。
量子化層224は、量子化パラメータに基づいて、プーリング層221や活性化関数層223の出力に対して例えば式6に示すような量子化を行う。式6に示す量子化は、入力テンソルuを2ビットにビット削減している。式6において、q(c)は量子化パラメータのベクトルである。学習済みのCNN200において、q(c)は学習済みの定数ベクトルである。式6における不等号「≦」は「<」であってもよい。
出力層230は、恒等関数やソフトマックス関数等によりCNN200の結果を出力する層である。出力層230の前段のレイヤは、畳み込み層210であってもよいし、量子化演算層220であってもよい。
CNN200は、量子化された量子化層224の出力データが、畳み込み層210に入力されるため、量子化を行わない他の畳み込みニューラルネットワークと比較して、畳み込み層210の畳み込み演算の負荷が小さい。
[畳み込み演算の分割]
NN回路100は、畳み込み層210の畳み込み演算(式1)の入力データを部分テンソルに分割して演算する。部分テンソルへの分割方法や分割数は特に限定されない。部分テンソルは、例えば、入力データa(x+i,y+j,c)をa(x+i,y+j,co)に分割することにより形成される。なお、NN回路100は、畳み込み層210の畳み込み演算(式1)の入力データを分割せずに演算することもできる。
NN回路100は、畳み込み層210の畳み込み演算(式1)の入力データを部分テンソルに分割して演算する。部分テンソルへの分割方法や分割数は特に限定されない。部分テンソルは、例えば、入力データa(x+i,y+j,c)をa(x+i,y+j,co)に分割することにより形成される。なお、NN回路100は、畳み込み層210の畳み込み演算(式1)の入力データを分割せずに演算することもできる。
畳み込み演算の入力データ分割において、式1における変数cは、式7に示すように、サイズBcのブロックで分割される。また、式1における変数dは、式8に示すように、サイズBdのブロックで分割される。式7において、coはオフセットであり、ciは0から(Bc-1)までのインデックスである。式8において、doはオフセットであり、diは0から(Bd-1)までのインデックスである。なお、サイズBcとサイズBdは同じであってもよい。
式1における入力データa(x+i,y+j,c)は、c軸方向においてサイズBcにより分割され、分割された入力データa(x+i,y+j,co)で表される。以降の説明において、分割された入力データaを「分割入力データa」ともいう。
式1における重みw(i,j,c,d)は、c軸方向においてサイズBcおよびd軸方向においてサイズBdにより分割され、分割された重みw(i,j,co,do)で表される。以降の説明において、分割された重みwを「分割重みw」ともいう。
サイズBdにより分割された出力データf(x,y,do)は、式9により求まる。分割された出力データf(x,y,do)を組み合わせることで、最終的な出力データf(x,y,d)を算出できる。
[畳み込み演算のデータの展開]
NN回路100は、畳み込み層210の畳み込み演算における入力データaおよび重みwを展開して畳み込み演算を行う。
NN回路100は、畳み込み層210の畳み込み演算における入力データaおよび重みwを展開して畳み込み演算を行う。
図3は、畳み込み演算のデータの展開を説明する図である。
分割入力データa(x+i、y+j、co)は、Bc個の要素を持つベクトルデータに展開される。分割入力データaの要素は、ciでインデックスされる(0≦ci<Bc)。以降の説明において、i,jごとにベクトルデータに展開された分割入力データaを「入力ベクトルA」ともいう。入力ベクトルAは、分割入力データa(x+i、y+j、co×Bc)から分割入力データa(x+i、y+j、co×Bc+(Bc-1))までを要素とする。
分割入力データa(x+i、y+j、co)は、Bc個の要素を持つベクトルデータに展開される。分割入力データaの要素は、ciでインデックスされる(0≦ci<Bc)。以降の説明において、i,jごとにベクトルデータに展開された分割入力データaを「入力ベクトルA」ともいう。入力ベクトルAは、分割入力データa(x+i、y+j、co×Bc)から分割入力データa(x+i、y+j、co×Bc+(Bc-1))までを要素とする。
分割重みw(i,j,co、do)は、Bc×Bd個の要素を持つマトリクスデータに展開される。マトリクスデータに展開された分割重みwの要素は、ciとdiでインデックスされる(0≦di<Bd)。以降の説明において、i,jごとにマトリクスデータに展開された分割重みwを「重みマトリクスW」ともいう。重みマトリクスWは、分割重みw(i,j,co×Bc、do×Bd)から分割重みw(i,j,co×Bc+(Bc-1)、do×Bd+(Bd-1))までを要素とする。
入力ベクトルAと重みマトリクスWとを乗算することで、ベクトルデータが算出される。i,j,coごとに算出されたベクトルデータを3次元テンソルに整形することで、出力データf(x,y,do)を得ることができる。このようなデータの展開を行うことで、畳み込み層210の畳み込み演算を、ベクトルデータとマトリクスデータとの乗算により実施できる。
[NN回路100]
図4は、本実施形態に係るNN回路100の全体構成を示す図である。
NN回路100は、第一メモリ1と、第二メモリ2と、DMAコントローラ3(以下、「DMAC3」ともいう)と、畳み込み演算回路4と、量子化演算回路5と、コントローラ6と、を備える。NN回路100は、第一メモリ1および第二メモリ2を介して、畳み込み演算回路4と量子化演算回路5とがループ状に形成されていることを特徴とする。
図4は、本実施形態に係るNN回路100の全体構成を示す図である。
NN回路100は、第一メモリ1と、第二メモリ2と、DMAコントローラ3(以下、「DMAC3」ともいう)と、畳み込み演算回路4と、量子化演算回路5と、コントローラ6と、を備える。NN回路100は、第一メモリ1および第二メモリ2を介して、畳み込み演算回路4と量子化演算回路5とがループ状に形成されていることを特徴とする。
第一メモリ1は、例えばSRAM(Static RAM)などで構成された揮発性のメモリ等の書き換え可能なメモリである。第一メモリ1には、DMAC3やコントローラ6を介してデータの書き込みおよび読み出しが行われる。第一メモリ1は、畳み込み演算回路4の入力ポートと接続されており、畳み込み演算回路4は第一メモリ1からデータを読み出すことができる。また、第一メモリ1は、量子化演算回路5の出力ポートと接続されており、量子化演算回路5は第一メモリ1にデータを書き込むことができる。外部ホストCPU110は、第一メモリ1に対するデータの書き込みや読み出しにより、NN回路100に対するデータの入出力を行うことができる。
第二メモリ2は、例えばSRAM(Static RAM)などで構成された揮発性のメモリ等の書き換え可能なメモリである。第二メモリ2には、DMAC3やコントローラ6を介してデータの書き込みおよび読み出しが行われる。第二メモリ2は、量子化演算回路5の入力ポートと接続されており、量子化演算回路5は第二メモリ2からデータを読み出すことができる。また、第二メモリ2は、畳み込み演算回路4の出力ポートと接続されており、畳み込み演算回路4は第二メモリ2にデータを書き込むことができる。外部ホストCPU110は、第二メモリ2に対するデータの書き込みや読み出しにより、NN回路100に対するデータの入出力を行うことができる。
DMAC3は、外部バスEBに接続されており、DRAMなどの外部メモリ120と第一メモリ1との間のデータ転送を行う。また、DMAC3は、DRAMなどの外部メモリ120と第二メモリ2との間のデータ転送を行う。また、DMAC3は、DRAMなどの外部メモリ120と畳み込み演算回路4との間のデータ転送を行う。また、DMAC3は、DRAMなどの外部メモリ120と量子化演算回路5との間のデータ転送を行う。
畳み込み演算回路4は、学習済みのCNN200の畳み込み層210における畳み込み演算を行う回路である。畳み込み演算回路4は、第一メモリ1に格納された入力データaを読み出し、入力データaに対して畳み込み演算を実施する。畳み込み演算回路4は、畳み込み演算の出力データf(以降、「畳み込み演算出力データ」ともいう)を第二メモリ2に書き込む。
量子化演算回路5は、学習済みのCNN200の量子化演算層220における量子化演算の少なくとも一部を行う回路である。量子化演算回路5は、第二メモリ2に格納された畳み込み演算の出力データfを読み出し、畳み込み演算の出力データfに対して量子化演算(プーリング、Batch Normalization、活性化関数、および量子化のうち少なくとも量子化を含む演算)を行う。量子化演算回路5は、量子化演算の出力データ(以降、「量子化演算出力データ」ともいう)を第一メモリ1に書き込む。
コントローラ6は、外部バスEBに接続されており、外部バスEBに対してマスタおよびスレーブとして動作する。コントローラ6は、レジスタ61と、IFU62と、を有している。
レジスタ61は、パラメータレジスタや状態レジスタを有する。パラメータレジスタは、NN回路100の動作を制御するレジスタである。状態レジスタはセマフォSを含むNN回路100の状態を示すレジスタである。外部ホストCPU110は、コントローラ6を経由して、レジスタ61にアクセスできる。
IFU(Instruction Fetch Unit、命令フェッチユニット)62は、外部ホストCPU110の指示に基づいて、外部バスEBを経由してDMAC3、畳み込み演算回路4および量子化演算回路5に対する命令コマンドを読み出す。また、IFU62は、読み出した命令コマンドを対応するDMAC3、畳み込み演算回路4および量子化演算回路5に転送する。
コントローラ6は、内部バスIB(図4参照)およびIFU62と接続された専用配線(不図示)を介して、第一メモリ1と、第二メモリ2と、DMAC3と、畳み込み演算回路4と、量子化演算回路5と、接続されている。外部ホストCPU110は、コントローラ6を経由して、各ブロックに対してアクセスできる。例えば、外部ホストCPU110は、コントローラ6を経由して、DMAC3や畳み込み演算回路4や量子化演算回路5に対する命令を指示することができる。また、DMAC3や畳み込み演算回路4や量子化演算回路5は、内部バスIBを介して、コントローラ6が有する状態レジスタ(セマフォSを含む)を更新できる。状態レジスタ(セマフォSを含む)は、DMAC3や畳み込み演算回路4や量子化演算回路5と接続された専用配線を介して更新されるように構成されていてもよい。
NN回路100は、第一メモリ1や第二メモリ2等を有するため、DRAMなどの外部メモリ120からのDMAC3によるデータ転送において、重複するデータのデータ転送の回数を低減できる。これにより、メモリアクセスにより発生する消費電力を大幅に低減することができる。
[NN回路100の動作例1]
図5は、NN回路100の動作例を示すタイミングチャートである。
DMAC3は、レイヤ1の入力データaを第一メモリ1に格納する。DMAC3は、畳み込み演算回路4が行う畳み込み演算の順序にあわせて、レイヤ1の入力データaを分割して第一メモリ1に転送してもよい。
図5は、NN回路100の動作例を示すタイミングチャートである。
DMAC3は、レイヤ1の入力データaを第一メモリ1に格納する。DMAC3は、畳み込み演算回路4が行う畳み込み演算の順序にあわせて、レイヤ1の入力データaを分割して第一メモリ1に転送してもよい。
畳み込み演算回路4は、第一メモリ1に格納されたレイヤ1の入力データaを読み出す。畳み込み演算回路4は、レイヤ1の入力データaに対して図1に示すレイヤ1の畳み込み演算を行う。レイヤ1の畳み込み演算の出力データfは、第二メモリ2に格納される。
量子化演算回路5は、第二メモリ2に格納されたレイヤ1の出力データfを読み出す。量子化演算回路5は、レイヤ1の出力データfに対してレイヤ2の量子化演算を行う。レイヤ2の量子化演算の出力データは、第一メモリ1に格納される。
畳み込み演算回路4は、第一メモリ1に格納されたレイヤ2の量子化演算の出力データを読み出す。畳み込み演算回路4は、レイヤ2の量子化演算の出力データを入力データaとしてレイヤ3の畳み込み演算を行う。レイヤ3の畳み込み演算の出力データfは、第二メモリ2に格納される。
畳み込み演算回路4は、第一メモリ1に格納されたレイヤ2M-2(Mは自然数)の量子化演算の出力データを読み出す。畳み込み演算回路4は、レイヤ2M-2の量子化演算の出力データを入力データaとしてレイヤ2M-1の畳み込み演算を行う。レイヤ2M-1の畳み込み演算の出力データfは、第二メモリ2に格納される。
量子化演算回路5は、第二メモリ2に格納されたレイヤ2M-1の出力データfを読み出す。量子化演算回路5は、2M-1レイヤの出力データfに対してレイヤ2Mの量子化演算を行う。レイヤ2Mの量子化演算の出力データは、第一メモリ1に格納される。
畳み込み演算回路4は、第一メモリ1に格納されたレイヤ2Mの量子化演算の出力データを読み出す。畳み込み演算回路4は、レイヤ2Mの量子化演算の出力データを入力データaとしてレイヤ2M+1の畳み込み演算を行う。レイヤ2M+1の畳み込み演算の出力データfは、第二メモリ2に格納される。
畳み込み演算回路4と量子化演算回路5とが交互に演算を行い、図1に示すCNN200の演算を進めていく。NN回路100は、畳み込み演算回路4が時分割によりレイヤ2M-1とレイヤ2M+1の畳み込み演算を実施する。また、NN回路100は、量子化演算回路5が時分割によりレイヤ2M-2とレイヤ2Mの量子化演算を実施する。そのため、NN回路100は、レイヤごとに別々の畳み込み演算回路4と量子化演算回路5を実装する場合と比較して、回路規模が著しく小さい。
NN回路100は、複数のレイヤの多層構造であるCNN200の演算を、ループ状に形成された回路により演算する。NN回路100は、ループ状の回路構成により、ハードウェア資源を効率的に利用できる。なお、NN回路100は、ループ状に回路を形成するために、各レイヤで変化する畳み込み演算回路4や量子化演算回路5におけるパラメータは適宜更新される。
CNN200の演算にNN回路100により実施できない演算が含まれる場合、NN回路100は外部ホストCPU110などの外部演算デバイスに中間データを転送する。外部演算デバイスが中間データに対して演算を行った後、外部演算デバイスによる演算結果は第一メモリ1や第二メモリ2に入力される。NN回路100は、外部演算デバイスによる演算結果に対する演算を再開する。
[NN回路100の動作例2]
図6は、NN回路100の他の動作例を示すタイミングチャートである。
NN回路100は、入力データaを部分テンソルに分割して、時分割により部分テンソルに対する演算を行ってもよい。部分テンソルへの分割方法や分割数は特に限定されない。
図6は、NN回路100の他の動作例を示すタイミングチャートである。
NN回路100は、入力データaを部分テンソルに分割して、時分割により部分テンソルに対する演算を行ってもよい。部分テンソルへの分割方法や分割数は特に限定されない。
図6は、入力データaを二つの部分テンソルに分解した場合の動作例を示している。分解された部分テンソルを、「第一部分テンソルa1」、「第二部分テンソルa2」とする。例えば、レイヤ2M-1の畳み込み演算は、第一部分テンソルa1に対応する畳み込み演算(図6において、「レイヤ2M-1(a1)」と表記)と、第二部分テンソルa2に対応する畳み込み演算(図6において、「レイヤ2M-1(a2)」と表記)と、に分解される。
第一部分テンソルa1に対応する畳み込み演算および量子化演算と、第二部分テンソルa2に対応する畳み込み演算および量子化演算とは、図6に示すように、独立して実施することができる。
畳み込み演算回路4は、第一部分テンソルa1に対応するレイヤ2M-1の畳み込み演算(図6において、レイヤ2M-1(a1)で示す演算)を行う。その後、畳み込み演算回路4は、第二部分テンソルa2に対応するレイヤ2M-1の畳み込み演算(図6において、レイヤ2M-1(a2)で示す演算)を行う。また、量子化演算回路5は、第一部分テンソルa1に対応するレイヤ2Mの量子化演算(図6において、レイヤ2M(a1)で示す演算)を行う。このように、NN回路100は、第二部分テンソルa2に対応するレイヤ2M-1の畳み込み演算と、第一部分テンソルa1に対応するレイヤ2Mの量子化演算と、を並列に実施できる。
次に、畳み込み演算回路4は、第一部分テンソルa1に対応するレイヤ2M+1の畳み込み演算(図6において、レイヤ2M+1(a1)で示す演算)を行う。また、量子化演算回路5は、第二部分テンソルa2に対応するレイヤ2Mの量子化演算(図6において、レイヤ2M(a2)で示す演算)を行う。このように、NN回路100は、第一部分テンソルa1に対応するレイヤ2M+1の畳み込み演算と、第二部分テンソルa2に対応するレイヤ2Mの量子化演算と、を並列に実施できる。
第一部分テンソルa1に対応する畳み込み演算および量子化演算と、第二部分テンソルa2に対応する畳み込み演算および量子化演算とは、独立して実施することができる。そのため、NN回路100は、例えば、第一部分テンソルa1に対応するレイヤ2M-1の畳み込み演算と、第二部分テンソルa2に対応するレイヤ2M+2の量子化演算と、を並列に実施してもよい。すなわち、NN回路100が並列で演算する畳み込み演算と量子化演算は、連続するレイヤの演算に限定されない。
入力データaを部分テンソルに分割することで、NN回路100は畳み込み演算回路4と量子化演算回路5とを並列して動作させることができる。その結果、畳み込み演算回路4と量子化演算回路5が待機する時間が削減され、NN回路100の演算処理効率が向上する。図6に示す動作例において分割数は2であったが、分割数が2より大きい場合も同様に、NN回路100は畳み込み演算回路4と量子化演算回路5とを並列して動作させることができる。
例えば、入力データaが「第一部分テンソルa1」、「第二部分テンソルa2」および「第三部分テンソルa3」に分割される場合、NN回路100は、第二部分テンソルa2に対応するレイヤ2M-1の畳み込み演算と、第三部分テンソルa3に対応するレイヤ2Mの量子化演算と、を並列に実施してもよい。演算の順序は、第一メモリ1および第二メモリ2における入力データaの格納状況によって適宜変更される。
なお、部分テンソルに対する演算方法としては、同一レイヤにおける部分テンソルの演算を畳み込み演算回路4または量子化演算回路5で行った後に次のレイヤにおける部分テンソルの演算を行う例(方法1)を示した。例えば、図6に示すように、畳み込み演算回路4において、第一部分テンソルa1および第二部分テンソルa2に対応するレイヤ2M-1の畳み込み演算(図6において、レイヤ2M-1(a1)およびレイヤ2M-1(a2)で示す演算)を行った後に、第一部分テンソルa1および第二部分テンソルa2に対応するレイヤ2M+1の畳み込み演算(図6において、レイヤ2M+1(a1)およびレイヤ2M+1(a2)で示す演算)を実施している。
しかしながら、部分テンソルに対する演算方法はこれに限られない。部分テンソルに対する演算方法は、複数レイヤにおける一部の部分テンソルの演算をした後に残部の部分テンソルの演算を実施する方法でもよい(方法2)。例えば、畳み込み演算回路4において、第一部分テンソルa1に対応するレイヤ2M-1および第一部分テンソルa1に対応するレイヤ2M+1の畳み込み演算を行った後に、第二部分テンソルa2に対応するレイヤ2M-1および第二部分テンソルa2に対応するレイヤ2M+1の畳み込み演算を実施してもよい。
また、部分テンソルに対する演算方法は、方法1と方法2とを組み合わせて部分テンソルを演算する方法でもよい。ただし、方法2を用いる場合は、部分テンソルの演算順序に関する依存関係に従って演算を実施する必要がある。
次に、NN回路100の各構成に関して詳しく説明する。
[DMAC3]
図7は、DMAC3の内部ブロック図である。
DMAC3は、データ転送回路31と、ステートコントローラ32と、クロック制御部39と、を有する。DMAC3は、データ転送回路31に対する専用のステートコントローラ32を有しており、命令コマンドが入力されると、外部のコントローラを必要とせずにDMAデータ転送を実施できる。
図7は、DMAC3の内部ブロック図である。
DMAC3は、データ転送回路31と、ステートコントローラ32と、クロック制御部39と、を有する。DMAC3は、データ転送回路31に対する専用のステートコントローラ32を有しており、命令コマンドが入力されると、外部のコントローラを必要とせずにDMAデータ転送を実施できる。
データ転送回路31は、外部バスEBに接続されており、DRAMなどの外部メモリ120と第一メモリ1との間のDMAデータ転送を行う。また、データ転送回路31は、DRAMなどの外部メモリ120と第二メモリ2との間のDMAデータ転送を行う。また、データ転送回路31は、DRAMなどの外部メモリ120と畳み込み演算回路4との間のデータ転送を行う。また、データ転送回路31は、DRAMなどの外部メモリ120と量子化演算回路5との間のデータ転送を行う。データ転送回路31のDMAチャンネル数は限定されない。例えば、第一メモリ1と第二メモリ2のそれぞれに専用のDMAチャンネルを有していてもよい。
ステートコントローラ32は、データ転送回路31のステートを制御する。また、ステートコントローラ32は、内部バスIB(図4参照)およびIFU62と接続された専用配線(不図示)を介してコントローラ6と接続されている。ステートコントローラ32は、命令キュー33と制御回路34とを有する。
命令キュー33は、DMAC3用の命令コマンドC3が格納されるキューであり、例えばFIFOメモリで構成される。命令キュー33には、内部バスIBまたはIFU62経由で1つ以上の命令コマンドC3が書き込まれる。
制御回路34は、命令コマンドC3をデコードし、命令コマンドC3に基づいて順次データ転送回路31を制御するステートマシンである。制御回路34は、論理回路により実装されていてもよいし、ソフトウェアによって制御されるCPUによって実装されていてもよい。
図8は、制御回路34のステート遷移図である。
制御回路34は、命令キュー33に命令コマンドC3が入力されると(Not empty)、アイドルステートST1からデコードステートST2に遷移する。
制御回路34は、命令キュー33に命令コマンドC3が入力されると(Not empty)、アイドルステートST1からデコードステートST2に遷移する。
制御回路34は、デコードステートST2において、命令キュー33から出力される命令コマンドC3をデコードする。また、制御回路34は、コントローラ6のレジスタ61に格納されたセマフォSを読み出し、命令コマンドC3において指示されたデータ転送回路31の動作を実行可能であるかを判定する。実行不能である場合(Not ready)、制御回路34はデコードステートST2からウエイトステートST4に遷移する。実行可能である場合(ready)、制御回路34はデコードステートST2から実行ステートST3に遷移する。
制御回路34は、ウエイトステートST4において、命令コマンドC3において指示されたデータ転送回路31の動作を実行可能となるまで待つ(Wait)。実行可能となった場合(ready)、制御回路34はウエイトステートST4から実行ステートST3に遷移する。
制御回路34は、実行ステートST3において、データ転送回路31を制御して、データ転送回路31に命令コマンドC3において指示された動作を実施させる。制御回路34は、データ転送回路31の動作が終わると、命令キュー33から実行を終えた命令コマンドC3を取り除くとともに、コントローラ6のレジスタ61に格納されたセマフォSを更新する。制御回路34は、命令キュー33に命令がある場合(Not empty)、実行ステートST3からデコードステートST2に遷移する。制御回路34は、命令キュー33に命令がない場合(empty)、実行ステートST3からアイドルステートST1に遷移する。
図9は、クロック制御部39の動作を示すタイミングチャートである。
クロック制御部39は、NN回路100に供給されるクロックCKから、クロックイネーブル信号CE3に基づいて、ゲーティッドクロック(第三クロック)GC3を生成する。クロックイネーブル信号CE3がネゲートされて無効(Disable、図9においてLow)に設定されると、ゲーティッドクロックGC3のトグルが停止される。クロックイネーブル信号CE3がアサートされて有効(Enable、図9においてHigh)に設定されると、ゲーティッドクロックGC3のトグルが開始される。ゲーティッドクロックGC3の生成回路は、公知のクロックゲーティング用回路から適宜選択された回路である。
クロック制御部39は、NN回路100に供給されるクロックCKから、クロックイネーブル信号CE3に基づいて、ゲーティッドクロック(第三クロック)GC3を生成する。クロックイネーブル信号CE3がネゲートされて無効(Disable、図9においてLow)に設定されると、ゲーティッドクロックGC3のトグルが停止される。クロックイネーブル信号CE3がアサートされて有効(Enable、図9においてHigh)に設定されると、ゲーティッドクロックGC3のトグルが開始される。ゲーティッドクロックGC3の生成回路は、公知のクロックゲーティング用回路から適宜選択された回路である。
クロックイネーブル信号CE3は、ステートコントローラ32によって制御される。ステートコントローラ32の制御回路34は、デコードステートST2からウエイトステートST4に遷移するときに、クロックイネーブル信号CE3をネゲートして無効(Disable)に設定する。制御回路34がウエイトステートST4であるとき、ゲーティッドクロックGC3のトグルが停止される。ステートコントローラ32の制御回路34は、ウエイトステートST4から実行ステートST3に遷移するときに、クロックイネーブル信号CE3をアサートして有効(Enable)に設定する。制御回路34が実行ステートST3であるとき、ゲーティッドクロックGC3のトグルが再開される。
生成されたゲーティッドクロックGC3は、図7に示すように、ステートコントローラ32の一部と、データ転送回路31とに対して出力され、動作クロックとして使用される。
[畳み込み演算回路4]
図10は、畳み込み演算回路4の内部ブロック図である。
畳み込み演算回路4は、重みメモリ41と、乗算器42と、アキュムレータ回路43と、ステートコントローラ44と、クロック制御部49と、を有する。畳み込み演算回路4は、乗算器42およびアキュムレータ回路43に対する専用のステートコントローラ44を有しており、命令コマンドが入力されると、外部のコントローラを必要とせずに畳み込み演算を実施できる。
図10は、畳み込み演算回路4の内部ブロック図である。
畳み込み演算回路4は、重みメモリ41と、乗算器42と、アキュムレータ回路43と、ステートコントローラ44と、クロック制御部49と、を有する。畳み込み演算回路4は、乗算器42およびアキュムレータ回路43に対する専用のステートコントローラ44を有しており、命令コマンドが入力されると、外部のコントローラを必要とせずに畳み込み演算を実施できる。
重みメモリ41は、畳み込み演算に用いる重みwが格納されるメモリであり、例えばSRAM(Static RAM)などで構成された揮発性のメモリ等の書き換え可能なメモリである。DMAC3は、DMA転送により、畳み込み演算に必要な重みwを重みメモリ41に書き込む。
図11は、乗算器42の内部ブロック図である。
乗算器42は、入力ベクトルAと重みマトリクスWとを乗算する。入力ベクトルAは、上述したように、分割入力データa(x+i、y+j、co)がi、jごとに展開されたBc個の要素を持つベクトルデータである。また、重みマトリクスWは、分割重みw(i,j,co、do)がi、jごとに展開されたBc×Bd個の要素を持つマトリクスデータである。乗算器42は、Bc×Bd個の積和演算ユニット47を有し、入力ベクトルAと重みマトリクスWとを乗算を並列して実施できる。
乗算器42は、入力ベクトルAと重みマトリクスWとを乗算する。入力ベクトルAは、上述したように、分割入力データa(x+i、y+j、co)がi、jごとに展開されたBc個の要素を持つベクトルデータである。また、重みマトリクスWは、分割重みw(i,j,co、do)がi、jごとに展開されたBc×Bd個の要素を持つマトリクスデータである。乗算器42は、Bc×Bd個の積和演算ユニット47を有し、入力ベクトルAと重みマトリクスWとを乗算を並列して実施できる。
乗算器42は、乗算に必要な入力ベクトルAと重みマトリクスWを、第一メモリ1および重みメモリ41から読み出して乗算を実施する。乗算器42は、Bd個の積和演算結果O(di)を出力する。
図12は、積和演算ユニット47の内部ブロック図である。
積和演算ユニット47は、入力ベクトルAの要素A(ci)と、重みマトリクスWの要素W(ci,di)との乗算を実施する。また、積和演算ユニット47は、乗算結果と他の積和演算ユニット47の乗算結果S(ci,di)と加算する。積和演算ユニット47は、加算結果S(ci+1,di)を出力する。要素A(ci)は、2ビットの符号なし整数(0,1,2,3)である。要素W(ci,di)は、1ビットの符号付整数(0,1)であり、値「0」は+1を表し、値「1」は-1を表す。
積和演算ユニット47は、入力ベクトルAの要素A(ci)と、重みマトリクスWの要素W(ci,di)との乗算を実施する。また、積和演算ユニット47は、乗算結果と他の積和演算ユニット47の乗算結果S(ci,di)と加算する。積和演算ユニット47は、加算結果S(ci+1,di)を出力する。要素A(ci)は、2ビットの符号なし整数(0,1,2,3)である。要素W(ci,di)は、1ビットの符号付整数(0,1)であり、値「0」は+1を表し、値「1」は-1を表す。
積和演算ユニット47は、反転器(インバータ)47aと、セレクタ47bと、加算器47cと、を有する。積和演算ユニット47は、乗算器を用いず、反転器47aおよびセレクタ47bのみを用いて乗算を行う。セレクタ47bは、要素W(ci,di)が「0」の場合、要素A(ci)の入力を選択する。セレクタ47bは、要素W(ci,di)が「1」の場合、要素A(ci)を反転器により反転させた補数を選択する。要素W(ci,di)は、加算器47cのCarry-inにも入力される。加算器47cは、要素W(ci,di)が「0」のとき、S(ci,di)に要素A(ci)を加算した値を出力する。加算器47cは、W(ci,di)が「1」のとき、S(ci,di)から要素A(ci)を減算した値を出力する。
図13は、アキュムレータ回路43の内部ブロック図である。
アキュムレータ回路43は、乗算器42の積和演算結果O(di)を第二メモリ2にアキュムレートする。アキュムレータ回路43は、Bd個のアキュムレータユニット48を有し、Bd個の積和演算結果O(di)を並列して第二メモリ2にアキュムレートできる。
アキュムレータ回路43は、乗算器42の積和演算結果O(di)を第二メモリ2にアキュムレートする。アキュムレータ回路43は、Bd個のアキュムレータユニット48を有し、Bd個の積和演算結果O(di)を並列して第二メモリ2にアキュムレートできる。
図13は、アキュムレータユニット48の内部ブロック図である。
アキュムレータユニット48は、加算器48aと、マスク部48bとを有している。加算器48aは、積和演算結果Oの要素O(di)と、第二メモリ2に格納された式1に示す畳み込み演算の途中経過である部分和と、を加算する。加算結果は、要素あたり16ビットである。加算結果は、要素あたり16ビットに限定されず、例えば要素あたり15ビットや17ビットであってもよい。
アキュムレータユニット48は、加算器48aと、マスク部48bとを有している。加算器48aは、積和演算結果Oの要素O(di)と、第二メモリ2に格納された式1に示す畳み込み演算の途中経過である部分和と、を加算する。加算結果は、要素あたり16ビットである。加算結果は、要素あたり16ビットに限定されず、例えば要素あたり15ビットや17ビットであってもよい。
加算器48aは、加算結果を第二メモリ2の同一アドレスに書き込む。マスク部48bは、初期化信号clearがアサートされた場合に、第二メモリ2からの出力をマスクし、要素O(di)に対する加算対象をゼロにする。初期化信号clearは、第二メモリ2に途中経過の部分和が格納されていない場合にアサートされる。
乗算器42およびアキュムレータ回路43による畳み込み演算が完了すると、第二メモリに、出力データf(x,y,do)が格納される。
ステートコントローラ44は、乗算器42およびアキュムレータ回路43のステートを制御する。また、ステートコントローラ44は、内部バスIB(図4参照)およびIFU62と接続された専用配線(不図示)を介してコントローラ6と接続されている。ステートコントローラ44は、命令キュー45と制御回路46とを有する。
命令キュー45は、畳み込み演算回路4用の命令コマンドC4が格納されるキューであり、例えばFIFOメモリで構成される。命令キュー45には、内部バスIBまたはIFU62経由で命令コマンドC4が書き込まれる。
制御回路46は、命令コマンドC4をデコードし、命令コマンドC4に基づいて乗算器42およびアキュムレータ回路43を制御するステートマシンである。制御回路46は、DMAC3のステートコントローラ32の制御回路34と同様の構成である。
クロック制御部49は、NN回路100に供給されるクロックCKから、クロックイネーブル信号CE4に基づいて、ゲーティッドクロック(第一クロック)GC4を生成する。図9に示すように、クロックイネーブル信号CE4がネゲートされて無効(Disable)に設定されると、ゲーティッドクロックGC4のトグルが停止される。クロックイネーブル信号CE4がアサートされて有効(Enable)に設定されると、ゲーティッドクロックGC4のトグルが開始される。クロック制御部49は、DMAC3のクロック制御部39と同様の構成である。
クロックイネーブル信号CE4は、ステートコントローラ44によって制御される。ステートコントローラ44の制御回路46は、デコードステートST2からウエイトステートST4に遷移するときに、クロックイネーブル信号CE4をネゲートして無効(Disable)に設定する。制御回路46がウエイトステートST4であるとき、ゲーティッドクロックGC4のトグルが停止される。ステートコントローラ44の制御回路46は、ウエイトステートST4から実行ステートST3に遷移するときに、クロックイネーブル信号CE4をアサートして有効(Enable)に設定する。制御回路46が実行ステートST3であるとき、ゲーティッドクロックGC4のトグルが再開される。
生成されたゲーティッドクロックGC4は、図10に示すように、ステートコントローラ44の一部と、重みメモリ41と、乗算器42と、アキュムレータ回路43とに対して出力され、動作クロックとして使用される。
[量子化演算回路5]
図15は、量子化演算回路5の内部ブロック図である。
量子化演算回路5は、量子化パラメータメモリ51と、ベクトル演算回路52と、量子化回路53と、ステートコントローラ54と、クロック制御部59と、を有する。量子化演算回路5は、ベクトル演算回路52および量子化回路53に対する専用のステートコントローラ54を有しており、命令コマンドが入力されると、外部のコントローラを必要とせずに量子化演算を実施できる。
図15は、量子化演算回路5の内部ブロック図である。
量子化演算回路5は、量子化パラメータメモリ51と、ベクトル演算回路52と、量子化回路53と、ステートコントローラ54と、クロック制御部59と、を有する。量子化演算回路5は、ベクトル演算回路52および量子化回路53に対する専用のステートコントローラ54を有しており、命令コマンドが入力されると、外部のコントローラを必要とせずに量子化演算を実施できる。
量子化パラメータメモリ51は、量子化演算に用いる量子化パラメータqが格納されるメモリであり、例えばSRAM(Static RAM)などで構成された揮発性のメモリ等の書き換え可能なメモリである。DMAC3は、DMA転送により、量子化演算に必要な量子化パラメータqを量子化パラメータメモリ51に書き込む。
図16は、ベクトル演算回路52と量子化回路53の内部ブロック図である。
ベクトル演算回路52は、第二メモリ2に格納された出力データf(x,y,do)に対して演算を行う。ベクトル演算回路52は、Bd個の演算ユニット57を有し、出力データf(x,y,do)に対して並列にSIMD演算を行う。
ベクトル演算回路52は、第二メモリ2に格納された出力データf(x,y,do)に対して演算を行う。ベクトル演算回路52は、Bd個の演算ユニット57を有し、出力データf(x,y,do)に対して並列にSIMD演算を行う。
図17は、演算ユニット57のブロック図である。
演算ユニット57は、例えば、ALU57aと、第一セレクタ57bと、第二セレクタ57cと、レジスタ57dと、シフタ57eと、を有する。演算ユニット57は、公知の汎用SIMD演算回路が有する他の演算器等をさらに有してもよい。
演算ユニット57は、例えば、ALU57aと、第一セレクタ57bと、第二セレクタ57cと、レジスタ57dと、シフタ57eと、を有する。演算ユニット57は、公知の汎用SIMD演算回路が有する他の演算器等をさらに有してもよい。
ベクトル演算回路52は、演算ユニット57が有する演算器等を組み合わせることで、出力データf(x,y,do)に対して、量子化演算層220におけるプーリング層221や、Batch Normalization層222や、活性化関数層223の演算のうち少なくとも一つの演算を行う。
演算ユニット57は、レジスタ57dに格納されたデータと第二メモリ2から読み出した出力データf(x,y,do)の要素f(di)とをALU57aにより加算できる。演算ユニット57は、ALU57aによる加算結果をレジスタ57dに格納できる。演算ユニット57は、第一セレクタ57bの選択によりレジスタ57dに格納されたデータに代えて「0」をALU57aに入力することで加算結果を初期化できる。例えばプーリング領域が2×2である場合、シフタ57eはALU57aの出力を2bit右シフトすることで加算結果の平均値を出力できる。ベクトル演算回路52は、Bd個の演算ユニット57による上記の演算等を繰り返すことで、式2に示す平均プーリングの演算を実施できる。
演算ユニット57は、レジスタ57dに格納されたデータと第二メモリ2から読み出した出力データf(x,y,do)の要素f(di)とをALU57aにより比較できる。
演算ユニット57は、ALU57aによる比較結果に応じて第二セレクタ57cを制御して、レジスタ57dに格納されたデータと要素f(di)の大きい方を選択できる。演算ユニット57は、第一セレクタ57bの選択により要素f(di)の取りうる値の最小値をALU57aに入力することで比較対象を最小値に初期化できる。本実施形態において要素f(di)は16bit符号付き整数であるので、要素f(di)の取りうる値の最小値は「0x8000」である。ベクトル演算回路52は、Bd個の演算ユニット57による上記の演算等を繰り返すことで、式3のMAXプーリングの演算を実施できる。なお、MAXプーリングの演算ではシフタ57eは第二セレクタ57cの出力をシフトしない。
演算ユニット57は、ALU57aによる比較結果に応じて第二セレクタ57cを制御して、レジスタ57dに格納されたデータと要素f(di)の大きい方を選択できる。演算ユニット57は、第一セレクタ57bの選択により要素f(di)の取りうる値の最小値をALU57aに入力することで比較対象を最小値に初期化できる。本実施形態において要素f(di)は16bit符号付き整数であるので、要素f(di)の取りうる値の最小値は「0x8000」である。ベクトル演算回路52は、Bd個の演算ユニット57による上記の演算等を繰り返すことで、式3のMAXプーリングの演算を実施できる。なお、MAXプーリングの演算ではシフタ57eは第二セレクタ57cの出力をシフトしない。
演算ユニット57は、レジスタ57dに格納されたデータと第二メモリ2から読み出した出力データf(x,y,do)の要素f(di)とをALU57aにより減算できる。シフタ57eはALU57aの出力を左シフト(すなわち乗算)もしくは右シフト(すなわち除算)できる。ベクトル演算回路52は、Bd個の演算ユニット57による上記の演算等を繰り返すことで、式4のBatch Normalizationの演算を実施できる。
演算ユニット57は、第二メモリ2から読み出した出力データf(x,y,do)の要素f(di)と第一セレクタ57bにより選択された「0」とをALU57aにより比較できる。演算ユニット57は、ALU57aによる比較結果に応じて要素f(di)と予めレジスタ57dに格納された定数値「0」のいずれかを選択して出力できる。ベクトル演算回路52は、Bd個の演算ユニット57による上記の演算等を繰り返すことで、式5のReLU演算を実施できる。
ベクトル演算回路52は、平均プーリング、MAXプーリング、Batch Normalization、活性化関数の演算およびこれらの演算の組み合わせを実施できる。ベクトル演算回路52は、汎用SIMD演算を実施できるため、量子化演算層220における演算に必要な他の演算を実施してもよい。また、ベクトル演算回路52は、量子化演算層220における演算以外の演算を実施してもよい。
なお、量子化演算回路5は、ベクトル演算回路52を有してなくてもよい。量子化演算回路5がベクトル演算回路52を有していない場合、出力データf(x,y,do)は量子化回路53に入力される。
量子化回路53は、ベクトル演算回路52の出力データに対して、量子化を行う。量子化回路53は、図16に示すように、Bd個の量子化ユニット58を有し、ベクトル演算回路52の出力データに対して並列に演算を行う。
図18は、量子化ユニット58の内部ブロック図である。
量子化ユニット58は、ベクトル演算回路52の出力データの要素in(di)に対して量子化を行う。量子化ユニット58は、比較器58aと、エンコーダ58bと、を有する。量子化ユニット58はベクトル演算回路52の出力データ(16ビット/要素)に対して、量子化演算層220における量子化層224の演算(式6)を行う。量子化ユニット58は、量子化パラメータメモリ51から必要な量子化パラメータq(th0,th1,th2)を読み出し、比較器58aにより入力in(di)と量子化パラメータqとの比較を行う。量子化ユニット58は、比較器58aによる比較結果をエンコーダ58bにより2ビット/要素に量子化する。式4におけるα(c)とβ(c)は、変数cごとに異なるパラメータであるため、α(c)とβ(c)を反映する量子化パラメータq(th0,th1,th2)はin(di)ごとに異なるパラメータである。
量子化ユニット58は、ベクトル演算回路52の出力データの要素in(di)に対して量子化を行う。量子化ユニット58は、比較器58aと、エンコーダ58bと、を有する。量子化ユニット58はベクトル演算回路52の出力データ(16ビット/要素)に対して、量子化演算層220における量子化層224の演算(式6)を行う。量子化ユニット58は、量子化パラメータメモリ51から必要な量子化パラメータq(th0,th1,th2)を読み出し、比較器58aにより入力in(di)と量子化パラメータqとの比較を行う。量子化ユニット58は、比較器58aによる比較結果をエンコーダ58bにより2ビット/要素に量子化する。式4におけるα(c)とβ(c)は、変数cごとに異なるパラメータであるため、α(c)とβ(c)を反映する量子化パラメータq(th0,th1,th2)はin(di)ごとに異なるパラメータである。
量子化ユニット58は、入力in(di)を3つの閾値th0,th1,th2と比較することにより、入力in(di)を4領域(例えば、in≦th0,th0<in≦th1,th1<in≦th2,th2<in)に分類し、分類結果を2ビットにエンコードして出力する。量子化ユニット58は、量子化パラメータq(th0,th1,th2)の設定により、量子化と併せてBatch Normalizationや活性化関数の演算を行うこともできる。
量子化ユニット58は、閾値th0を式4のβ(c)、閾値の差(th1―th0)および(th2―th1)を式4のα(c)として設定して量子化を行うことで、式4に示すBatch Normalizationの演算を量子化と併せて実施できる。(th1―th0)および(th2―th1)を大きくすることでα(c)を小さくできる。(th1―th0)および(th2―th1)を小さくすることで、α(c)を大きくできる。
量子化ユニット58は、入力in(di)の量子化と併せて活性化関数のReLU演算を実施できる。例えば、量子化ユニット58は、in(di)≦th0およびth2<in(di)となる領域では出力値を飽和させる。量子化ユニット58は、出力が非線形とするように量子化パラメータqを設定することで活性化関数の演算を量子化と併せて実施できる。
ステートコントローラ54は、ベクトル演算回路52および量子化回路53のステートを制御する。また、ステートコントローラ54は、内部バスIB(図4参照)およびIFU62と接続された専用配線(不図示)を介してコントローラ6と接続されている。ステートコントローラ54は、命令キュー55と制御回路56とを有する。
命令キュー55は、量子化演算回路5用の命令コマンドC5が格納されるキューであり、例えばFIFOメモリで構成される。命令キュー55には、内部バスIBまたはIFU62経由で命令コマンドC5が書き込まれる。
制御回路56は、命令コマンドC5をデコードし、命令コマンドC5に基づいてベクトル演算回路52および量子化回路53を制御するステートマシンである。制御回路56は、DMAC3のステートコントローラ32の制御回路34と同様の構成である。
クロック制御部59は、NN回路100に供給されるクロックCKから、クロックイネーブル信号CE5に基づいて、ゲーティッドクロック(第三クロック)GC5を生成する。図9に示すように、クロックイネーブル信号CE5がネゲートされて無効(Disable)に設定されると、ゲーティッドクロックGC5のトグルが停止される。クロックイネーブル信号CE5がアサートされて有効(Enable)に設定されると、ゲーティッドクロックGC5のトグルが開始される。クロック制御部59は、DMAC3のクロック制御部39と同様の構成である。
クロックイネーブル信号CE5は、ステートコントローラ54によって制御される。ステートコントローラ54の制御回路56は、デコードステートST2からウエイトステートST4に遷移するときに、クロックイネーブル信号CE5をネゲートして無効(Disable)に設定する。制御回路56がウエイトステートST4であるとき、ゲーティッドクロックGC5のトグルが停止される。ステートコントローラ54の制御回路56は、ウエイトステートST4から実行ステートST3に遷移するときに、クロックイネーブル信号CE5をアサートして有効(Enable)に設定する。制御回路56が実行ステートST3であるとき、ゲーティッドクロックGC5のトグルが再開される。
生成されたゲーティッドクロックGC5は、図15に示すように、ステートコントローラ54の一部と、量子化パラメータメモリ51と、ベクトル演算回路52と、量子化回路53とに対して出力され、動作クロックとして使用される。
量子化演算回路5は、Bd個の要素を持つ量子化演算出力データを第一メモリ1に書き込む。なお、BdとBcの好適な関係を式10に示す。式10においてnは整数である。
[コントローラ6]
コントローラ6は、外部バスEBに接続されており、外部バスEBに対してマスタおよびスレーブとして動作する。コントローラ6は、パラメータレジスタや状態レジスタを含むレジスタ61と、IFU62と、を有している。パラメータレジスタは、NN回路100の動作を制御するレジスタである。状態レジスタは、セマフォSを含むNN回路100の状態を示すレジスタである。
コントローラ6は、外部バスEBに接続されており、外部バスEBに対してマスタおよびスレーブとして動作する。コントローラ6は、パラメータレジスタや状態レジスタを含むレジスタ61と、IFU62と、を有している。パラメータレジスタは、NN回路100の動作を制御するレジスタである。状態レジスタは、セマフォSを含むNN回路100の状態を示すレジスタである。
コントローラ6は、二つの方法により、DMAC3、畳み込み演算回路4および量子化演算回路5が有する命令キューに命令コマンドを転送する。一つ目の方法は、外部ホストCPU110からコントローラ6に転送される命令コマンドを、内部バスIB(図4参照)を介して転送する方法である。二つ目の方法は、IFU62が外部メモリ120から命令コマンドを読み出し、IFU62と接続された専用配線(不図示)を介して命令コマンドを転送する方法である。
[セマフォS]
図19は、セマフォSによるNN回路100の制御を説明する図である。
セマフォSは、第一セマフォS1と、第二セマフォS2と、第三セマフォS3と、を有する。セマフォSは、P操作によりデクリメントされ、V操作によってインクリメントされる。DMAC3、畳み込み演算回路4および量子化演算回路5によるP操作およびV操作は、内部バスIBを経由して、コントローラ6が有するセマフォSを更新する。
図19は、セマフォSによるNN回路100の制御を説明する図である。
セマフォSは、第一セマフォS1と、第二セマフォS2と、第三セマフォS3と、を有する。セマフォSは、P操作によりデクリメントされ、V操作によってインクリメントされる。DMAC3、畳み込み演算回路4および量子化演算回路5によるP操作およびV操作は、内部バスIBを経由して、コントローラ6が有するセマフォSを更新する。
第一セマフォS1は、第一データフローF1の制御に用いられる。第一データフローF1は、DMAC3(Producer)が第一メモリ1に入力データaを書き込み、畳み込み演算回路4(Consumer)が入力データaを読み出すデータフローである。第一セマフォS1は、第一ライトセマフォS1Wと、第一リードセマフォS1Rと、を有する。
第二セマフォS2は、第二データフローF2の制御に用いられる。第二データフローF2は、畳み込み演算回路4(Producer)が出力データfを第二メモリ2に書き込み、量子化演算回路5(Consumer)が出力データfを読み出すデータフローである。第二セマフォS2は、第二ライトセマフォS2Wと、第二リードセマフォS2Rと、を有する。
第三セマフォS3は、第三データフローF3の制御に用いられる。第三データフローF3は、量子化演算回路5(Producer)が量子化演算出力データを第一メモリ1に書き込み、畳み込み演算回路4(Consumer)が量子化演算回路5の量子化演算出力データを読み出すデータフローである。第三セマフォS3は、第三ライトセマフォS3Wと、第三リードセマフォS3Rと、を有する。
[第一データフローF1]
図20は、第一データフローF1のタイミングチャートである。
第一ライトセマフォS1Wは、第一データフローF1におけるDMAC3による第一メモリ1に対する書き込みを制限するセマフォである。第一ライトセマフォS1Wは、第一メモリ1において、例えば入力ベクトルAなどの所定のサイズのデータを格納可能なメモリ領域のうち、データが読み出し済みで他のデータを書き込み可能なメモリ領域の数を示している。第一ライトセマフォS1Wが「0」の場合、DMAC3は第一メモリ1に対して第一データフローF1における書き込みを行えず、第一ライトセマフォS1Wが「1」以上となるまで待たされる。
図20は、第一データフローF1のタイミングチャートである。
第一ライトセマフォS1Wは、第一データフローF1におけるDMAC3による第一メモリ1に対する書き込みを制限するセマフォである。第一ライトセマフォS1Wは、第一メモリ1において、例えば入力ベクトルAなどの所定のサイズのデータを格納可能なメモリ領域のうち、データが読み出し済みで他のデータを書き込み可能なメモリ領域の数を示している。第一ライトセマフォS1Wが「0」の場合、DMAC3は第一メモリ1に対して第一データフローF1における書き込みを行えず、第一ライトセマフォS1Wが「1」以上となるまで待たされる。
第一リードセマフォS1Rは、第一データフローF1における畳み込み演算回路4による第一メモリ1からの読み出しを制限するセマフォである。第一リードセマフォS1Rは、第一メモリ1において、例えば入力ベクトルAなどの所定のサイズのデータを格納可能なメモリ領域のうち、データが書き込み済みで読み出し可能なメモリ領域の数を示している。第一リードセマフォS1Rが「0」の場合、畳み込み演算回路4は第一メモリ1からの第一データフローF1における読み出しを行えず、第一リードセマフォS1Rが「1」以上となるまで待たされる。
DMAC3は、命令キュー33に命令コマンドC3が格納されることにより、DMA転送を開始する。図20に示すように、第一ライトセマフォS1Wが「0」でないため、DMAC3はDMA転送を開始する(DMA転送1)。DMAC3は、DMA転送を開始する際に、第一ライトセマフォS1Wに対してP操作を行う。DMAC3は、DMA転送の完了後に、第一リードセマフォS1Rに対してV操作を行う。
畳み込み演算回路4は、命令キュー45に命令コマンドC4が格納されることにより、畳み込み演算を開始する。図20に示すように、第一リードセマフォS1Rが「0」であるため、畳み込み演算回路4は第一リードセマフォS1Rが「1」以上となるまで待たされる(デコードステートST4におけるWait)。畳み込み演算回路4のステートコントローラ44の制御回路46は、デコードステートST2からウエイトステートST4に遷移するときに、クロックイネーブル信号CE4をネゲートして無効(Disable)に設定する。その結果、ステートコントローラ44の一部と、重みメモリ41と、乗算器42と、アキュムレータ回路43に提供されるゲーティッドクロックGC4のトグルが停止される。その結果、ウエイトステートST4におけるゲーティッドクロックGC4に関連する動的電力を削減できる。なお、制御回路46がウエイトステートST4であるとき、他のブロックとのデータ通信等の動作が必要なステートコントローラ44の残部は、ゲーティッドクロックGC4ではなくクロックCKが提供され、動作を継続する。
DMAC3によるV操作により第一リードセマフォS1Rが「1」となると、畳み込み演算回路4は畳み込み演算を開始する(畳み込み演算1)。ステートコントローラ44の制御回路46は、ウエイトステートST4から実行ステートST3に遷移するときに、クロックイネーブル信号CE4をアサートして有効(Enable)に設定する。その結果、ゲーティッドクロックGC4のトグルが再開される。また、畳み込み演算回路4は、畳み込み演算を開始する際、第一リードセマフォS1Rに対してP操作を行う。畳み込み演算回路4は、畳み込み演算の完了後に、第一ライトセマフォS1Wに対してV操作を行う。
図20において「DMA転送3」と記載されたDMA転送をDMAC3が開始する際、第一ライトセマフォS1Wが「0」であるため、DMAC3は第一ライトセマフォS1Wが「1」以上となるまで待たされる(デコードステートST4におけるWait)。DMAC3のステートコントローラ32の制御回路34は、デコードステートST2からウエイトステートST4に遷移するときに、クロックイネーブル信号CE3をネゲートして無効(Disable)に設定する。その結果、ステートコントローラ32の一部と、データ転送回路31に提供されるゲーティッドクロックGC3のトグルが停止される。その結果、ウエイトステートST4におけるゲーティッドクロックGC3に関連する動的電力を削減できる。なお、制御回路34がウエイトステートST4であるとき、他のブロックとのデータ通信等の動作が必要なステートコントローラ32の残部は、ゲーティッドクロックGC3ではなくクロックCKが提供され、動作を継続する。
畳み込み演算回路4によるV操作により第一ライトセマフォS1Wが「1」以上となると、DMAC3はDMA転送を開始する。ステートコントローラ32の制御回路34は、ウエイトステートST4から実行ステートST3に遷移するときに、クロックイネーブル信号CE3をアサートして有効(Enable)に設定する。その結果、ゲーティッドクロックGC3のトグルが再開される。
DMAC3と畳み込み演算回路4とは、セマフォS1を使用することで、第一データフローF1において第一メモリ1に対するアクセス競合を防止できる。また、DMAC3と畳み込み演算回路4とは、セマフォS1を使用することで、第一データフローF1におけるデータ転送の同期を取りつつ、独立して並列に動作できる。
[第二データフローF2]
図21は、第二データフローF2のタイミングチャートである。
第二ライトセマフォS2Wは、第二データフローF2における畳み込み演算回路4による第二メモリ2に対する書き込みを制限するセマフォである。第二ライトセマフォS2Wは、第二メモリ2において、例えば出力データfなどの所定のサイズのデータを格納可能なメモリ領域のうち、データが読み出し済みで他のデータを書き込み可能なメモリ領域の数を示している。第二ライトセマフォS2Wが「0」の場合、畳み込み演算回路4は第二メモリ2に対して第二データフローF2における書き込みを行えず、第二ライトセマフォS2Wが「1」以上となるまで待たされる。
図21は、第二データフローF2のタイミングチャートである。
第二ライトセマフォS2Wは、第二データフローF2における畳み込み演算回路4による第二メモリ2に対する書き込みを制限するセマフォである。第二ライトセマフォS2Wは、第二メモリ2において、例えば出力データfなどの所定のサイズのデータを格納可能なメモリ領域のうち、データが読み出し済みで他のデータを書き込み可能なメモリ領域の数を示している。第二ライトセマフォS2Wが「0」の場合、畳み込み演算回路4は第二メモリ2に対して第二データフローF2における書き込みを行えず、第二ライトセマフォS2Wが「1」以上となるまで待たされる。
第二リードセマフォS2Rは、第二データフローF2における量子化演算回路5による第二メモリ2からの読み出しを制限するセマフォである。第二リードセマフォS2Rは、第二メモリ2において、例えば出力データfなどの所定のサイズのデータを格納可能なメモリ領域のうち、データが書き込み済みで読み出し可能なメモリ領域の数を示している。第二リードセマフォS2Rが「0」の場合、量子化演算回路5は第二メモリ2からの第二データフローF2における読み出しを行えず、第二リードセマフォS2Rが「1」以上となるまで待たされる。
畳み込み演算回路4は、図21に示すように、畳み込み演算を開始する際、第二ライトセマフォS2Wに対してP操作を行う。畳み込み演算回路4は、畳み込み演算の完了後に、第二リードセマフォS2Rに対してV操作を行う。
量子化演算回路5は、命令キュー55に命令コマンドC5が格納されることにより、量子化演算を開始する。図21に示すように、第二リードセマフォS2Rが「0」であるため、量子化演算回路5は第二リードセマフォS2Rが「1」以上となるまで待たされる(デコードステートST4におけるWait)。量子化演算回路5のステートコントローラ54の制御回路56は、デコードステートST2からウエイトステートST4に遷移するときに、クロックイネーブル信号CE5をネゲートして無効(Disable)に設定する。その結果、ステートコントローラ54の一部と、量子化パラメータメモリ51と、ベクトル演算回路52と、量子化回路53に提供されるゲーティッドクロックGC5のトグルが停止される。その結果、ウエイトステートST4におけるゲーティッドクロックGC5に関連する動的電力を削減できる。なお、制御回路56がウエイトステートST4であるとき、他のブロックとのデータ通信等の動作が必要なステートコントローラ54の残部は、ゲーティッドクロックGC5ではなくクロックCKが提供され、動作を継続する。
畳み込み演算回路4によるV操作により第二リードセマフォS2Rが「1」となると、量子化演算回路5は量子化演算を開始する(量子化演算1)。ステートコントローラ54の制御回路56は、ウエイトステートST4から実行ステートST3に遷移するときに、クロックイネーブル信号CE5をアサートして有効(Enable)に設定する。その結果、ゲーティッドクロックGC5のトグルが再開される。また、量子化演算回路5は、量子化演算を開始する際、第二リードセマフォS2Rに対してP操作を行う。量子化演算回路5は、量子化演算の完了後に、第二ライトセマフォS2Wに対してV操作を行う。
図21において「量子化演算2」と記載された量子化演算を量子化演算回路5が開始する際、第二リードセマフォS2Rが「0」であるため、量子化演算回路5は第二リードセマフォS2Rが「1」以上となるまで待たされる(デコードステートST4におけるWait)。量子化演算回路5のステートコントローラ54の制御回路56は、デコードステートST2からウエイトステートST4に遷移するときに、クロックイネーブル信号CE5をネゲートして無効(Disable)に設定する。畳み込み演算回路4によるV操作により第二リードセマフォS2Rが「1」以上となると、量子化演算回路5は量子化演算を開始する。ステートコントローラ54の制御回路56は、ウエイトステートST4から実行ステートST3に遷移するときに、クロックイネーブル信号CE5をアサートして有効(Enable)に設定する。
畳み込み演算回路4と量子化演算回路5とは、セマフォS2を使用することで、第二データフローF2において第二メモリ2に対するアクセス競合を防止できる。また、畳み込み演算回路4と量子化演算回路5とは、セマフォS2を使用することで、第二データフローF2におけるデータ転送の同期を取りつつ、独立して並列に動作できる。
[第三データフローF3]
第三ライトセマフォS3Wは、第三データフローF3における量子化演算回路5による第一メモリ1に対する書き込みを制限するセマフォである。第三ライトセマフォS3Wは、第一メモリ1において、例えば量子化演算回路5の量子化演算出力データなどの所定のサイズのデータを格納可能なメモリ領域のうち、データが読み出し済みで他のデータを書き込み可能なメモリ領域の数を示している。第三ライトセマフォS3Wが「0」の場合、量子化演算回路5は第一メモリ1に対して第三データフローF3における書き込みを行えず、第三ライトセマフォS3Wが「1」以上となるまで待たされる。
第三ライトセマフォS3Wは、第三データフローF3における量子化演算回路5による第一メモリ1に対する書き込みを制限するセマフォである。第三ライトセマフォS3Wは、第一メモリ1において、例えば量子化演算回路5の量子化演算出力データなどの所定のサイズのデータを格納可能なメモリ領域のうち、データが読み出し済みで他のデータを書き込み可能なメモリ領域の数を示している。第三ライトセマフォS3Wが「0」の場合、量子化演算回路5は第一メモリ1に対して第三データフローF3における書き込みを行えず、第三ライトセマフォS3Wが「1」以上となるまで待たされる。
第三リードセマフォS3Rは、第三データフローF3における畳み込み演算回路4による第一メモリ1からの読み出しを制限するセマフォである。第三リードセマフォS3Rは、第一メモリ1において、例えば量子化演算回路5の量子化演算出力データなどの所定のサイズのデータを格納可能なメモリ領域のうち、データが書き込み済みで読み出し可能なメモリ領域の数を示している。第三リードセマフォS3Rが「0」の場合、畳み込み演算回路4は第三データフローF3における第一メモリ1からの読み出しを行えず、第三リードセマフォS3Rが「1」以上となるまで待たされる。
量子化演算回路5と畳み込み演算回路4とは、セマフォS3を使用することで、第三データフローF3において第一メモリ1に対するアクセス競合を防止できる。また、量子化演算回路5と畳み込み演算回路4とは、セマフォS3を使用することで、第三データフローF3におけるデータ転送の同期を取りつつ、独立して並列に動作できる。
第一メモリ1は、第一データフローF1および第三データフローF3において共有される。NN回路100は、第一セマフォS1と第三セマフォS3とを別途設けることで、第一データフローF1と第三データフローF3とを区別してデータ転送の同期を取ることができる。
[畳み込み演算回路4の動作(1)]
畳み込み演算回路4は、畳み込み演算を行う際、第一メモリ1から読み出しを行い、第二メモリ2に対して書き込みを行う。すなわち、畳み込み演算回路4は、第一データフローF1においてはConsumerであり、第二データフローF2においてはProducerである。そのため、畳み込み演算回路4は、畳み込み演算を開始する際、第一リードセマフォS1Rに対してP操作を行い(図20参照)、第二ライトセマフォS2Wに対してP操作を行う(図21参照)。畳み込み演算回路4は、畳み込み演算の完了後に、第一ライトセマフォS1Wに対してV操作を行い(図20参照)、第二リードセマフォS2Rに対してV操作を行う(図21参照)。
畳み込み演算回路4は、畳み込み演算を行う際、第一メモリ1から読み出しを行い、第二メモリ2に対して書き込みを行う。すなわち、畳み込み演算回路4は、第一データフローF1においてはConsumerであり、第二データフローF2においてはProducerである。そのため、畳み込み演算回路4は、畳み込み演算を開始する際、第一リードセマフォS1Rに対してP操作を行い(図20参照)、第二ライトセマフォS2Wに対してP操作を行う(図21参照)。畳み込み演算回路4は、畳み込み演算の完了後に、第一ライトセマフォS1Wに対してV操作を行い(図20参照)、第二リードセマフォS2Rに対してV操作を行う(図21参照)。
畳み込み演算回路4は、畳み込み演算を開始する際、第一リードセマフォS1Rが「1」以上、かつ、第二ライトセマフォS2Wが「1」以上となるまで待たされる(デコードステートST4におけるWait)。畳み込み演算回路4が二つのセマフォにより待たされている期間において、ゲーティッドクロックGC4のトグルが停止される。その結果、ウエイトステートST4におけるゲーティッドクロックGC4に関連する動的電力を削減できる。
畳み込み演算回路4は、第一リードセマフォS1Rが「1」以上、かつ、第二ライトセマフォS2Wが「1」以上となり、ウエイトステートST4から実行ステートST3に遷移するときに、クロックイネーブル信号CE4をアサートして有効(Enable)に設定する。その結果、ゲーティッドクロックGC4のトグルが再開される。
[量子化演算回路5の動作]
量子化演算回路5は、量子化演算を行う際、第二メモリ2から読み出しを行い、第一メモリ1に対して書き込みを行う。すなわち、量子化演算回路5は、第二データフローF2においてはConsumerであり、第三データフローF3においてはProducerである。そのため、量子化演算回路5は、量子化演算を開始する際、第二リードセマフォS2Rに対してP操作を行い、第三ライトセマフォS3Wに対してP操作を行う。量子化演算回路5は量子化演算の完了後に、第二ライトセマフォS2Wに対してV操作を行い、第三リードセマフォS3Rに対してV操作を行う。
量子化演算回路5は、量子化演算を行う際、第二メモリ2から読み出しを行い、第一メモリ1に対して書き込みを行う。すなわち、量子化演算回路5は、第二データフローF2においてはConsumerであり、第三データフローF3においてはProducerである。そのため、量子化演算回路5は、量子化演算を開始する際、第二リードセマフォS2Rに対してP操作を行い、第三ライトセマフォS3Wに対してP操作を行う。量子化演算回路5は量子化演算の完了後に、第二ライトセマフォS2Wに対してV操作を行い、第三リードセマフォS3Rに対してV操作を行う。
量子化演算回路5は、量子化演算を開始する際、第二リードセマフォS2Rが「1」以上、かつ、第三ライトセマフォS3Wが「1」以上となるまで待たされる(デコードステートST4におけるWait)。量子化演算回路5が二つのセマフォにより待たされている期間において、ゲーティッドクロックGC5のトグルが停止される。その結果、ウエイトステートST4におけるゲーティッドクロックGC5に関連する動的電力を削減できる。
量子化演算回路5は、第二リードセマフォS2Rが「1」以上、かつ、第三ライトセマフォS3Wが「1」以上となり、ウエイトステートST4から実行ステートST3に遷移するときに、クロックイネーブル信号CE5をアサートして有効(Enable)に設定する。その結果、ゲーティッドクロックGC5のトグルが再開される。
[畳み込み演算回路4の動作(2)]
畳み込み演算回路4が第一メモリ1から読み出す入力データは、第三データフローにおいて量子化演算回路5が書き込んだデータである場合もある。この場合、畳み込み演算回路4は、第三データフローF3においてはConsumerであり、第二データフローF2においてはProducerである。そのため、畳み込み演算回路4は、畳み込み演算を開始する際、第三リードセマフォS3Rに対してP操作を行い、第二ライトセマフォS2Wに対してP操作を行う。畳み込み演算回路4は、畳み込み演算の完了後に、第三ライトセマフォS3Wに対してV操作を行い、第二リードセマフォS2Rに対してV操作を行う。
畳み込み演算回路4が第一メモリ1から読み出す入力データは、第三データフローにおいて量子化演算回路5が書き込んだデータである場合もある。この場合、畳み込み演算回路4は、第三データフローF3においてはConsumerであり、第二データフローF2においてはProducerである。そのため、畳み込み演算回路4は、畳み込み演算を開始する際、第三リードセマフォS3Rに対してP操作を行い、第二ライトセマフォS2Wに対してP操作を行う。畳み込み演算回路4は、畳み込み演算の完了後に、第三ライトセマフォS3Wに対してV操作を行い、第二リードセマフォS2Rに対してV操作を行う。
畳み込み演算回路4は、畳み込み演算を開始する際、第三リードセマフォS3Rが「1」以上、かつ、第二ライトセマフォS2Wが「1」以上となるまで待たされる(デコードステートST4におけるWait)。畳み込み演算回路4が二つのセマフォにより待たされている期間において、ゲーティッドクロックGC4のトグルが停止される。その結果、ウエイトステートST4におけるゲーティッドクロックGC4に関連する動的電力を削減できる。
畳み込み演算回路4は、第一リードセマフォS1Rが「1」以上、かつ、第二ライトセマフォS2Wが「1」以上となり、ウエイトステートST4から実行ステートST3に遷移するときに、クロックイネーブル信号CE4をアサートして有効(Enable)に設定する。その結果、ゲーティッドクロックGC4のトグルが再開される。
[畳み込み演算実施命令]
図22は、畳み込み演算実施命令を説明する図である。
畳み込み演算実施命令は、畳み込み演算回路4に対する命令コマンドC4の一つである。畳み込み演算実施命令は、畳み込み演算回路4に対する命令が格納された命令フィールドIFと、セマフォSに対する操作等が格納されたセマフォ操作フィールドSFと、を有する。命令フィールドIFとセマフォ操作フィールドSFとは、畳み込み演算実施命令として一命令に収められている。
図22は、畳み込み演算実施命令を説明する図である。
畳み込み演算実施命令は、畳み込み演算回路4に対する命令コマンドC4の一つである。畳み込み演算実施命令は、畳み込み演算回路4に対する命令が格納された命令フィールドIFと、セマフォSに対する操作等が格納されたセマフォ操作フィールドSFと、を有する。命令フィールドIFとセマフォ操作フィールドSFとは、畳み込み演算実施命令として一命令に収められている。
畳み込み演算実施命令の命令フィールドIFは、畳み込み演算回路4に対する命令が格納されるフィールドである。命令フィールドIFには、例えば、乗算器42およびアキュムレータ回路43に畳み込み演算を実施させるコマンドや、アキュムレータ回路43のclear信号の制御コマンドや、入力ベクトルAと重みマトリクスWのサイズやメモリアドレスなどが格納される。
畳み込み演算実施命令のセマフォ操作フィールドSFは、命令フィールドIFに格納された命令に関連するセマフォSに対する操作等が格納される。畳み込み演算回路4は、第一データフローF1および第三データフローF3においては相手側からデータを受信し消費するConsumerであり、第二データフローF2においては相手側に生産したデータを送信するProducerである。よって、関連するセマフォSは第一セマフォS1と第二セマフォS2と第三セマファS3である。そのため、図22に示すように、畳み込み演算実施命令のセマフォ操作フィールドSFには、第一セマフォS1と第二セマフォS2と第三セマファS3に対する操作フィールドが含まれる。
セマフォ操作フィールドSFには、セマフォごとにP操作フィールドとV操作フィールドとが設けられている。図22に示すように、畳み込み演算実施命令のセマフォ操作フィールドSFには、6個の操作フィールドが含まれる。セマフォ操作フィールドSFの各操作フィールドは1ビットである。セマフォ操作フィールドSFの各操作フィールドは、複数ビットであってもよい。
畳み込み演算回路4がConsumerとなる第一データフローF1および第三データフローF3に対する第一セマフォS1および第三セマファS3には、リードセマフォ(S1R、S3R)に対するP操作フィールドと、ライトセマフォ(S1W、S3W)に対するV操作フィールドが設けられている。
畳み込み演算回路4がProducerとなる第二データフローF2に対する第二セマフォS2には、ライトセマフォ(S2W)に対するP操作フィールドと、リードセマフォ(S2R)に対するV操作フィールドが設けられている。
図23は、畳み込み演算命令の具体例を示す図である。
図23に示す具体例は、4個の畳み込み演算命令(以降、「命令1」から「命令4」という)で構成されており、4個の畳み込み演算命令は第一メモリ1に格納された入力データa(x+i,y+j,co)を4回に分割して畳み込み演算回路4に畳み込み演算を実施させる。
図23に示す具体例は、4個の畳み込み演算命令(以降、「命令1」から「命令4」という)で構成されており、4個の畳み込み演算命令は第一メモリ1に格納された入力データa(x+i,y+j,co)を4回に分割して畳み込み演算回路4に畳み込み演算を実施させる。
畳み込み演算回路4のステートコントローラ44は、デコードステートST2に遷移し、命令キュー45に格納された4命令(命令1から命令4)のうち最初に格納された命令1をデコードする。
P操作フィールドが「1」に設定されている場合、ステートコントローラ44は、内部バスIBを介してコントローラ6から「1」に設定されたP操作フィールドに対応するセマフォSを読み出し、実施条件を満たしているか判定する。実施条件とは、「1」に設定されたP操作フィールドに対応するセマフォS全てが「1」以上であることである。命令1において、第一リードセマフォS1Rに対するP操作フィールドと、第二ライトセマフォS2Wに対するP操作フィールドと、が「1」に設定されている。そのため、ステートコントローラ44は、第一リードセマフォS1Rおよび第二ライトセマフォS2Wを読み出し、実施条件を満たしているか判定する。
P操作フィールドが「1」に設定されている場合、ステートコントローラ44は、「1」に設定されたP操作フィールドに対応するセマフォSが更新されて実施条件を満たすまで待つ。命令1の場合、ステートコントローラ44は、第一リードセマフォS1Rが「1」以上、かつ、第二ライトセマフォS2Wが「1」以上でなければ(Not Ready)、セマフォSが更新されて実施条件を満たすまで待つ(Wait)。
P操作フィールドが「1」に設定されている場合、ステートコントローラ44は、実施条件を満たしていれば、実行ステートST3に遷移して、命令フィールドIFに基づく畳み込み演算を実施する。命令1の場合、第一リードセマフォS1Rが「1」以上、かつ、第二ライトセマフォS2Wが「1」以上であれば(Ready)、ステートコントローラ44は、実行ステートST3に遷移して、命令フィールドIFに基づく畳み込み演算を実施する。
P操作フィールドが「1」に設定されている場合、ステートコントローラ44は、畳み込み演算の実施前に、「1」に設定されたP操作フィールドに対応するセマフォSに対してP操作を行う。命令1の場合、ステートコントローラ44は、畳み込み演算の実施前に、第一リードセマフォS1Rおよび第二ライトセマフォS2Wに対してP操作を行う。
ステートコントローラ44は、命令1の実行後、デコードステートST2に遷移して、命令2をデコードする。命令2において、いずれのセマフォ操作フィールドSFも「1」に設定されていない。そのため、ステートコントローラ44は、セマフォSの確認や更新を行わずに実行ステートST3に遷移して、命令フィールドIFに基づく畳み込み演算を実施する。
ステートコントローラ44は、命令2の実行後、デコードステートST2に遷移して、命令3をデコードする。命令3において、いずれのセマフォ操作フィールドSFも「1」に設定されていない。そのため、ステートコントローラ44は、セマフォSの確認や更新を行わずに実行ステートST3に遷移して、命令フィールドIFに基づく畳み込み演算を実施する。
ステートコントローラ44は、命令3の実行後、デコードステートST2に遷移して、命令4をデコードする。命令4において、いずれのP操作フィールドも「1」に設定されていない。そのため、ステートコントローラ44は、セマフォSの確認や更新を行わずに実行ステートST3に遷移して、命令フィールドIFに基づく畳み込み演算を実施する。
V操作フィールドが「1」に設定されている場合、ステートコントローラ44は、命令4の畳み込み演算の完了後に、「1」に設定されたV操作フィールドに対応するセマフォSに対してV操作を行う。命令4において、第一ライトセマフォS1Wに対するV操作フィールドと、第二リードセマフォS2Rに対するV操作フィールドと、が「1」に設定されている。そのため、ステートコントローラ44は、命令4の畳み込み演算の完了後に、第一ライトセマフォS1Wおよび第二リードセマフォS2Rに対してV操作を行う。
ステートコントローラ44は、命令4の実行後、アイドルステートST1に遷移して、4命令で構成される一連の畳み込み演算命令の実行を終了する。
量子化演算回路5が第一メモリ1に書き込んだ量子化演算出力データを畳み込み演算回路4が入力データとして使用する場合、第三セマフォS3に対応する操作フィールドが使用される。
畳み込み演算実施命令は、命令フィールドIFに基づく畳み込み演算を指示するともに、セマフォ操作フィールドSFに基づいて関連するセマフォSの確認および更新を実施する。命令フィールドIFとセマフォ操作フィールドSFとは、畳み込み演算実施命令として一命令に収められているため、畳み込み演算を実施させるための命令コマンドC4の数を少なくできる。また、デコード等の命令実行に係る処理時間を短くできる。
[量子化演算実施命令]
図24は、量子化演算実施命令を説明する図である。
量子化演算実施命令は、量子化演算回路5に対する命令コマンドC5の一つである。量子化演算実施命令は、量子化演算回路5に対する命令が格納された命令フィールドIFと、セマフォSに対する操作等が格納されたセマフォ操作フィールドSFと、を有する。命令フィールドIFとセマフォ操作フィールドSFとは、量子化演算実施命令として一命令に収められている。
図24は、量子化演算実施命令を説明する図である。
量子化演算実施命令は、量子化演算回路5に対する命令コマンドC5の一つである。量子化演算実施命令は、量子化演算回路5に対する命令が格納された命令フィールドIFと、セマフォSに対する操作等が格納されたセマフォ操作フィールドSFと、を有する。命令フィールドIFとセマフォ操作フィールドSFとは、量子化演算実施命令として一命令に収められている。
量子化演算実施命令の命令フィールドIFは、量子化演算回路5に対する命令が格納されるフィールドである。命令フィールドIFには、例えば、ベクトル演算回路52と量子化回路53に演算を実施させるコマンドや、出力データfと量子化パラメータpのサイズやメモリアドレスなどが格納される。
量子化演算実施命令のセマフォ操作フィールドSFは、命令フィールドIFに格納された命令に関連するセマフォSに対する操作等が格納される。量子化演算回路5は、第二データフローF2においてConsumerであり、第三データフローF3においてProducerである。よって、関連するセマフォSは第二セマフォS2と第三セマファS3である。そのため、図24に示すように、量子化演算実施命令のセマフォ操作フィールドSFには、第二セマフォS2と第三セマファS3に対する操作フィールドが含まれる。
量子化演算回路5がConsumerとなる第二データフローF2に対する第二セマフォS2には、リードセマフォ(S2R)に対するP操作フィールドと、ライトセマフォ(S2W)に対するV操作フィールドが設けられている。
量子化演算回路5がProducerとなる第三データフローF3に対する第三セマフォS3には、ライトセマフォ(S3W)に対するP操作フィールドと、リードセマフォ(S3R)に対するV操作フィールドが設けられている。
量子化演算回路5のステートコントローラ54は、P操作フィールドやV操作フィールドが「1」に設定されている量子化演算実施命令に対して、畳み込み演算実施命令に対するステートコントローラ44の動作と同様に、セマフォSの確認や更新を行う。
[DMA転送実施命令]
図25は、DMA転送実施命令を説明する図である。
DMA転送実施命令は、DMAC3に対する命令コマンドC3の一つである。DMA転送実施命令は、DMAC3に対する命令が格納された命令フィールドIFと、セマフォSに対する操作等が格納されたセマフォ操作フィールドSFと、を有する。命令フィールドIFとセマフォ操作フィールドSFとは、DMA転送実施命令として一命令に収められている。
図25は、DMA転送実施命令を説明する図である。
DMA転送実施命令は、DMAC3に対する命令コマンドC3の一つである。DMA転送実施命令は、DMAC3に対する命令が格納された命令フィールドIFと、セマフォSに対する操作等が格納されたセマフォ操作フィールドSFと、を有する。命令フィールドIFとセマフォ操作フィールドSFとは、DMA転送実施命令として一命令に収められている。
DMA転送実施命令の命令フィールドIFは、DMAC3に対する命令が格納されるフィールドである。命令フィールドIFには、例えば、メモリ転送元やメモリ転送先のメモリアドレスや転送データサイズなどが格納される。
DMA転送実施命令のセマフォ操作フィールドSFは、命令フィールドIFに格納された命令に関連するセマフォSに対する操作等が格納される。DMAC3は、第一データフローF1においてProducerである。よって、関連するセマフォSは第一セマフォS1である。そのため、図25に示すように、DMA転送実施命令のセマフォ操作フィールドSFには、第一セマフォS1に対する操作フィールドが含まれる。
DMAC3がProducerとなる第一データフローF1に対する第一セマフォS1には、ライトセマフォ(S1W)に対するP操作フィールドと、リードセマフォ(S1R)に対するV操作フィールドが設けられている。
DMAC3のステートコントローラ32は、P操作フィールドやV操作フィールドが「1」に設定されているDMA転送実施命令に対して、畳み込み演算実施命令に対するステートコントローラ44の動作と同様に、セマフォSの確認や更新を行う。
本実施形態に係るNN回路100およびニューラルネットワーク回路の制御方法によれば、IoT機器などの組み込み機器に組み込み可能なNN回路100を高性能に動作させることができる。畳み込み演算実施命令、量子化演算実施命令およびDMA転送実施命令において、命令フィールドIFとセマフォ操作フィールドSFとは、一命令に収められている。そのため、畳み込み演算等を実施させるための命令コマンドの数を少なくできる。また、デコード等の命令実行に係る処理時間を短くできる。
以上、本発明の第一実施形態について図面を参照して詳述したが、具体的な構成はこの実施形態に限られるものではなく、本発明の要旨を逸脱しない範囲の設計変更等も含まれる。また、上述の実施形態および変形例において示した構成要素は適宜に組み合わせて構成することが可能である。
(第二実施形態)
本発明の第二実施形態に係るニューラルネットワーク回路100B(以下、「NN回路100B」という)について、図26から図27を参照して説明する。以降の説明において、既に説明したものと共通する構成については、同一の符号を付して重複する説明を省略する。
本発明の第二実施形態に係るニューラルネットワーク回路100B(以下、「NN回路100B」という)について、図26から図27を参照して説明する。以降の説明において、既に説明したものと共通する構成については、同一の符号を付して重複する説明を省略する。
NN回路100Bは、第一実施形態のNN回路100と比較して、命令(畳み込み演算命令,量子化演算実施命令、DMA転送実施命令)と、クロックイネーブルCE3,CE4,CE5の制御と、が異なっている。第一実施形態において、クロックイネーブルCE3,CE4,CE5は、ステートコントローラの状態遷移と連動して制御されていた。第二実施形態においては、クロックイネーブルCE3,CE4,CE5は、命令(畳み込み演算命令,量子化演算実施命令、DMA転送実施命令)に基づいて制御される。以降では、畳み込み演算命令とクロックイネーブルCE4の制御を一例として説明する。
図26は、畳み込み演算命令を示す図である。
本実施形態においては、畳み込み演算実施命令は、命令フィールドIFと、セマフォ操作フィールドSFとに加えて、クロックイネーブルCEに対する操作等が格納されたクロックイネーブル操作フィールドCFをさらに有する。
本実施形態においては、畳み込み演算実施命令は、命令フィールドIFと、セマフォ操作フィールドSFとに加えて、クロックイネーブルCEに対する操作等が格納されたクロックイネーブル操作フィールドCFをさらに有する。
クロックイネーブル操作フィールドCFは、「1」に設定されたP操作フィールドに対応するセマフォSが実施条件を満たしておらず畳み込み演算回路4に待ち合わせが発生する場合に、クロックイネーブルCE4を制御する操作等が格納される。具体的には、クロックイネーブル操作フィールドCFが「1」のとき、待ち合わせが発生する場合に、クロックイネーブルCE4の制御が有効化されてクロックゲーティングが実施される。クロックイネーブル操作フィールドCFが「0」のとき、待ち合わせが発生する場合に、クロックイネーブルCE4を制御が無効化されてクロックゲーティングが実施されない。
図27は、畳み込み演算命令の具体例を示す図である。
畳み込み演算回路4のステートコントローラ44は、デコードステートST2に遷移し、命令キュー45に格納された図27に示す畳み込み演算命令Aをデコードする。
畳み込み演算回路4のステートコントローラ44は、デコードステートST2に遷移し、命令キュー45に格納された図27に示す畳み込み演算命令Aをデコードする。
P操作フィールドが「1」に設定されている場合、ステートコントローラ44は、内部バスIBを介してコントローラ6から「1」に設定されたP操作フィールドに対応するセマフォSを読み出し、実施条件を満たしているか判定する。実施条件とは、「1」に設定されたP操作フィールドに対応するセマフォS全てが「1」以上であることである。畳み込み演算命令Aにおいて、第一リードセマフォS1Rに対するP操作フィールドが「1」に設定されている。そのため、ステートコントローラ44は、第一リードセマフォS1Rを読み出し、実施条件を満たしているか判定する。
P操作フィールドが「1」に設定されている場合、ステートコントローラ44は、「1」に設定されたP操作フィールドに対応するセマフォSが更新されて実施条件を満たすまで待つ。畳み込み演算命令Aの場合、ステートコントローラ44は、第一リードセマフォS1Rが「1」以上でなければ(Not Ready)、セマフォSが更新されて実施条件を満たすまで待つ(Wait)。
畳み込み演算回路4が待たされている期間において、クロックイネーブル操作フィールドCFが「1(クロックゲーティング有効)」に設定されている場合、クロック制御部49はクロックイネーブル信号CE4をネゲートして無効(Disable)に設定する。その結果、ゲーティッドクロックGC4のトグルが停止され、ゲーティッドクロックGC4に関連する動的電力を削減できる。
畳み込み演算回路4が待たされている期間において、クロックイネーブル操作フィールドCFが「0(クロックゲーティング無効)」に設定されている場合、クロック制御部49はクロックイネーブル信号CE4をネゲートして無効(Disable)に設定せずに有効(Enable)の設定を維持する。
セマフォSが更新されて実施条件を満たした場合、クロック制御部49はクロックイネーブル信号CE4をアサートして有効(Enable)に設定する。その結果、クロックゲーティッドクロックGC4のトグルが再開される。
量子化演算実施命令は、同様に、クロックイネーブルCE5を制御する操作等が格納されるクロックイネーブル操作フィールドCFをさらに有してもよい。また、DMA転送実施命令は、同様に、クロックイネーブルCE3を制御する操作等が格納されるクロックイネーブル操作フィールドCFをさらに有してもよい。
本実施形態に係るNN回路100Bおよびニューラルネットワーク回路の制御方法によれば、IoT機器などの組み込み機器に組み込み可能なNN回路100を高性能に動作させることができる。畳み込み演算実施命令、量子化演算実施命令およびDMA転送実施命令において、命令フィールドIFとセマフォ操作フィールドSFと、クロックイネーブル操作フィールドCFとは、一命令に収められている。そのため、畳み込み演算等を実施させるための命令コマンドの数を少なくできる。また、デコード等の命令実行に係る処理時間を短くできる。
本実施形態に係るNN回路100Bおよびニューラルネットワーク回路の制御方法によれば、クロックゲーティングの有効化と無効化を命令ごとに設定することができる。例えば、所定に命令の組合せの際に、一部の命令においてのみクロックゲーティングを無効化するなど、細やかなクロックゲーティングの制御を実施できる。
例えば、セマフォSが実施条件を満たしておらず、いずれかの回路に待ち合わせが発生する場合であっても、待ち合わせに要する時間が短いと予め判断できるときは、クロックゲーティングを無効化せずに有効化の設定を維持してもよい。クロックゲーティングを無効化(クロックのトグルを停止)した後に、クロックゲーティングを有効化(クロックのトグルを再開)する場合、回路は動作再開までに所定の待ち時間が必要となる。上述のように待ち合わせに要する時間が短いと予め判断できるときは、クロックゲーティングの有効化の設定を維持し、クロックゲーティングを有効化による動作再開までの所定の待ち時間をなくすことで、処理時間全体が短くなる場合がある。
以上、本発明の第二実施形態について図面を参照して詳述したが、具体的な構成はこの実施形態に限られるものではなく、本発明の要旨を逸脱しない範囲の設計変更等も含まれる。また、上述の実施形態および変形例において示した構成要素は適宜に組み合わせて構成することが可能である。
(変形例1)
上記実施形態において、一つの命令フィールドIFに対して複数のセマフォ操作フィールドSFを一命令に収める命令の例を示したが、命令の態様はこれに限られるものではない。命令は、複数の命令フィールドIFと、命令フィールドIFごとに対して関連づけられた複数のセマフォ操作フィールドSFと、を一命令内に収める態様であってもよい。また、命令フィールドIFとセマフォ操作フィールドSFを一命令に収める方法としては、上記実施形態の構成に限られない。さらに、命令フィールドIFとセマフォ操作フィールドSFとは、複数の命令に分割して収められていてもてよい。命令において命令フィールドIFが対応するセマフォ操作フィールドSFと関連づけられていれば、同様の効果を奏することができる。
上記実施形態において、一つの命令フィールドIFに対して複数のセマフォ操作フィールドSFを一命令に収める命令の例を示したが、命令の態様はこれに限られるものではない。命令は、複数の命令フィールドIFと、命令フィールドIFごとに対して関連づけられた複数のセマフォ操作フィールドSFと、を一命令内に収める態様であってもよい。また、命令フィールドIFとセマフォ操作フィールドSFを一命令に収める方法としては、上記実施形態の構成に限られない。さらに、命令フィールドIFとセマフォ操作フィールドSFとは、複数の命令に分割して収められていてもてよい。命令において命令フィールドIFが対応するセマフォ操作フィールドSFと関連づけられていれば、同様の効果を奏することができる。
(変形例2)
上記実施形態において、第一メモリ1と第二メモリ2は別のメモリであったが、第一メモリ1と第二メモリ2の態様はこれに限定されない。第一メモリ1と第二メモリ2は、例えば、同一メモリにおける第一メモリ領域と第二メモリ領域であってもよい。
上記実施形態において、第一メモリ1と第二メモリ2は別のメモリであったが、第一メモリ1と第二メモリ2の態様はこれに限定されない。第一メモリ1と第二メモリ2は、例えば、同一メモリにおける第一メモリ領域と第二メモリ領域であってもよい。
(変形例3)
上記実施形態において、セマフォSは第一データフローF1、第二データフローF2および第三データフローF3に対して設けられていたが、セマフォSの態様はこれに限定されない。セマフォSは、例えば、DMAC3が重みwを重みメモリ41に書き込み、乗算器42が重みwを読み出すデータフローに設けられていてもよい。セマフォSは、例えば、DMAC3が量子化パラメータqを量子化パラメータメモリ51に書き込み、量子化回路53が量子化パラメータqを読み出すデータフローに設けられていてもよい。
上記実施形態において、セマフォSは第一データフローF1、第二データフローF2および第三データフローF3に対して設けられていたが、セマフォSの態様はこれに限定されない。セマフォSは、例えば、DMAC3が重みwを重みメモリ41に書き込み、乗算器42が重みwを読み出すデータフローに設けられていてもよい。セマフォSは、例えば、DMAC3が量子化パラメータqを量子化パラメータメモリ51に書き込み、量子化回路53が量子化パラメータqを読み出すデータフローに設けられていてもよい。
(変形例4)
例えば、上記実施形態に記載のNN回路100に入力されるデータは単一の形式に限定されず、静止画像、動画像、音声、文字、数値およびこれらの組み合わせで構成することが可能である。なお、NN回路100に入力されるデータは、NN回路100が設けられるエッジデバイスに搭載され得る、光センサ、温度計、Global Positioning System(GPS)計測器、角速度計測器、風速計などの物理量測定器における測定結果に限られない。周辺機器から有線または無線通信経由で受信する基地局情報、車両・船舶等の情報、天候情報、混雑状況に関する情報などの周辺情報や金融情報や個人情報等の異なる情報を組み合わせてもよい。
例えば、上記実施形態に記載のNN回路100に入力されるデータは単一の形式に限定されず、静止画像、動画像、音声、文字、数値およびこれらの組み合わせで構成することが可能である。なお、NN回路100に入力されるデータは、NN回路100が設けられるエッジデバイスに搭載され得る、光センサ、温度計、Global Positioning System(GPS)計測器、角速度計測器、風速計などの物理量測定器における測定結果に限られない。周辺機器から有線または無線通信経由で受信する基地局情報、車両・船舶等の情報、天候情報、混雑状況に関する情報などの周辺情報や金融情報や個人情報等の異なる情報を組み合わせてもよい。
(変形例5)
NN回路100が設けられるエッジデバイスは、バッテリー等で駆動する携帯電話などの通信機器、パーソナルコンピュータなどのスマートデバイス、デジタルカメラ、ゲーム機器、ロボット製品などのモバイル機器を想定するが、これに限られるものではない。Power on Ethernet(PoE)などでの供給可能なピーク電力制限、製品発熱の低減または長時間駆動の要請が高い製品に利用することでも他の先行例にない効果を得ることができる。例えば、車両や船舶などに搭載される車載カメラや、公共施設や路上などに設けられる監視カメラ等に適用することで長時間の撮影を実現できるだけでなく、軽量化や高耐久化にも寄与する。また、テレビやディスプレイ等の表示デバイス、医療カメラや手術ロボット等の医療機器、製造現場や建築現場で使用される作業ロボットなどにも適用することで同様の効果を奏することができる。
NN回路100が設けられるエッジデバイスは、バッテリー等で駆動する携帯電話などの通信機器、パーソナルコンピュータなどのスマートデバイス、デジタルカメラ、ゲーム機器、ロボット製品などのモバイル機器を想定するが、これに限られるものではない。Power on Ethernet(PoE)などでの供給可能なピーク電力制限、製品発熱の低減または長時間駆動の要請が高い製品に利用することでも他の先行例にない効果を得ることができる。例えば、車両や船舶などに搭載される車載カメラや、公共施設や路上などに設けられる監視カメラ等に適用することで長時間の撮影を実現できるだけでなく、軽量化や高耐久化にも寄与する。また、テレビやディスプレイ等の表示デバイス、医療カメラや手術ロボット等の医療機器、製造現場や建築現場で使用される作業ロボットなどにも適用することで同様の効果を奏することができる。
(変形例6)
NN回路100は、NN回路100の一部または全部を一つ以上のプロセッサを用いて実現してもよい。例えば、NN回路100は、入力層または出力層の一部または全部をプロセッサによるソフトウェア処理により実現してもよい。ソフトウェア処理により実現する入力層または出力層の一部は、例えば、データの正規化や変換である。これにより、様々な形式の入力形式または出力形式に対応できる。なお、プロセッサで実行するソフトウェアは、通信手段や外部メディアを用いて書き換え可能に構成してもよい。
NN回路100は、NN回路100の一部または全部を一つ以上のプロセッサを用いて実現してもよい。例えば、NN回路100は、入力層または出力層の一部または全部をプロセッサによるソフトウェア処理により実現してもよい。ソフトウェア処理により実現する入力層または出力層の一部は、例えば、データの正規化や変換である。これにより、様々な形式の入力形式または出力形式に対応できる。なお、プロセッサで実行するソフトウェアは、通信手段や外部メディアを用いて書き換え可能に構成してもよい。
(変形例7)
NN回路100は、CNN200における処理の一部をクラウド上のGraphics Processing Unit(GPU)等を組み合わせることで実現してもよい。NN回路100は、NN回路100が設けられるエッジデバイスで行った処理に加えて、クラウド上でさらに処理を行ったり、クラウド上での処理に加えてエッジデバイス上で処理を行ったりすることで、より複雑な処理を少ないリソースで実現できる。このような構成によれば、NN回路100は、処理分散によりエッジデバイスとクラウドとの間の通信量を低減できる。
NN回路100は、CNN200における処理の一部をクラウド上のGraphics Processing Unit(GPU)等を組み合わせることで実現してもよい。NN回路100は、NN回路100が設けられるエッジデバイスで行った処理に加えて、クラウド上でさらに処理を行ったり、クラウド上での処理に加えてエッジデバイス上で処理を行ったりすることで、より複雑な処理を少ないリソースで実現できる。このような構成によれば、NN回路100は、処理分散によりエッジデバイスとクラウドとの間の通信量を低減できる。
(変形例8)
NN回路100が行う演算は、学習済みのCNN200の少なくとも一部であったが、NN回路100が行う演算の対象はこれに限定されない。NN回路100が行う演算は、例えば畳み込み演算と量子化演算のように、2種類の演算を繰り返す学習済みのニューラルネットワークの少なくとも一部であってもよい。
NN回路100が行う演算は、学習済みのCNN200の少なくとも一部であったが、NN回路100が行う演算の対象はこれに限定されない。NN回路100が行う演算は、例えば畳み込み演算と量子化演算のように、2種類の演算を繰り返す学習済みのニューラルネットワークの少なくとも一部であってもよい。
(変形例9)
上記の第一実施形態および第二実施形態において、クロックイネーブルの制御を、ステートコントローラの状態遷移または命令に基づいて制御する例について示したが、ステートコントローラの状態遷移または命令に基づく制御対象は、クロックイネーブルに限定されない。一例としては、図4に示されるNN回路100に含まれる各構成への電力供給を制御対象といてもよい。具体的には、NN回路100に含まれる各構成(畳み込み演算回路4や量子化演算回路5)に供給される電力を制御する電力制御部を設ける。電力制御部は、ステートコントローラの状態遷移または命令に基づいて、電力供給に対するイネーブル信号の制御(パワーゲーティングの制御)を行う。例えば、ステートコントローラにおけるIdleやWaitなどのステートの遷移に合わせて、電力制御部は各構成への電力供給を制御する。なお、この電力供給の制御は、上記の実施形態のクロックイネーブルの制御と組み合わせてもよい。電力供給を停止した後に電力供給を再開した場合、回路は復帰までに所定の時間が必要となる。そのため、セマフォSが実施条件を満たしていない場合に生じる待ち合わせに要する時間が所定期間より長いと予め判断できるときに限り、クロックイネーブルの無効化(クロックのトグルを停止)および電力供給に対するイネーブル信号の無効化(電力供給を停止)してもよい。
上記の第一実施形態および第二実施形態において、クロックイネーブルの制御を、ステートコントローラの状態遷移または命令に基づいて制御する例について示したが、ステートコントローラの状態遷移または命令に基づく制御対象は、クロックイネーブルに限定されない。一例としては、図4に示されるNN回路100に含まれる各構成への電力供給を制御対象といてもよい。具体的には、NN回路100に含まれる各構成(畳み込み演算回路4や量子化演算回路5)に供給される電力を制御する電力制御部を設ける。電力制御部は、ステートコントローラの状態遷移または命令に基づいて、電力供給に対するイネーブル信号の制御(パワーゲーティングの制御)を行う。例えば、ステートコントローラにおけるIdleやWaitなどのステートの遷移に合わせて、電力制御部は各構成への電力供給を制御する。なお、この電力供給の制御は、上記の実施形態のクロックイネーブルの制御と組み合わせてもよい。電力供給を停止した後に電力供給を再開した場合、回路は復帰までに所定の時間が必要となる。そのため、セマフォSが実施条件を満たしていない場合に生じる待ち合わせに要する時間が所定期間より長いと予め判断できるときに限り、クロックイネーブルの無効化(クロックのトグルを停止)および電力供給に対するイネーブル信号の無効化(電力供給を停止)してもよい。
また、本明細書に記載された効果は、あくまで説明的または例示的なものであって限定的ではない。つまり、本開示に係る技術は、上記の効果とともに、または上記の効果に代えて、本明細書の記載から当業者には明らかな他の効果を奏しうる。
本発明は、ニューラルネットワークの演算に適用することができる。
200 畳み込みニューラルネットワーク
100 ニューラルネットワーク回路(NN回路)
1 第一メモリ
2 第二メモリ
3 DMAコントローラ(DMAC)
4 畳み込み演算回路
42 乗算器
43 アキュムレータ回路
5 量子化演算回路
52 ベクトル演算回路
53 量子化回路
6 コントローラ
61 レジスタ
S セマフォ
F1 第一データフロー
F2 第二データフロー
F3 第三データフロー
GC3 ゲーティッドクロック(第三クロック)
GC4 ゲーティッドクロック(第一クロック)
GC5 ゲーティッドクロック(第二クロック)
100 ニューラルネットワーク回路(NN回路)
1 第一メモリ
2 第二メモリ
3 DMAコントローラ(DMAC)
4 畳み込み演算回路
42 乗算器
43 アキュムレータ回路
5 量子化演算回路
52 ベクトル演算回路
53 量子化回路
6 コントローラ
61 レジスタ
S セマフォ
F1 第一データフロー
F2 第二データフロー
F3 第三データフロー
GC3 ゲーティッドクロック(第三クロック)
GC4 ゲーティッドクロック(第一クロック)
GC5 ゲーティッドクロック(第二クロック)
Claims (15)
- 入力データに対して畳み込み演算を行う畳み込み演算回路と、
前記畳み込み演算回路の畳み込み演算出力データに対して量子化演算を行う量子化演算回路と、
を備え、
前記畳み込み演算回路は、前記畳み込み演算の実行を待ち合わせるとき、前記畳み込み演算回路の少なくとも一部に供給される第一クロックのクロックゲーティングを有効にする、
ニューラルネットワーク回路。 - 前記量子化演算回路は、前記量子化演算の実行を待ち合わせるとき、前記量子化演算回路の少なくとも一部に供給される第二クロックのクロックゲーティングを有効にする、
請求項1に記載のニューラルネットワーク回路。 - 前記入力データを格納する第一メモリと、
前記畳み込み演算出力データを格納する第二メモリと、
をさらに有し、
前記畳み込み演算回路は、前記第一メモリに格納された前記入力データに対して前記畳み込み演算を実行するとき、前記第一クロックのクロックゲーティングを無効にし、
前記量子化演算回路は、前記第二メモリに格納された前記畳み込み演算出力データ対して前記量子化演算を実行するとき、前記第二クロックのクロックゲーティングを無効にする、
請求項2に記載のニューラルネットワーク回路。 - 前記量子化演算回路の量子化演算出力データは、前記第一メモリに格納されて、
前記第一メモリに格納された前記量子化演算出力データは、前記畳み込み演算回路に前記入力データとして入力される、
請求項3に記載のニューラルネットワーク回路。 - 前記畳み込み演算回路による前記第一メモリからの読み出しを制限する第三リードセマフォと、
前記畳み込み演算回路による前記第二メモリに対する書き込みを制限する第二ライトセマフォと、
を備え、
前記畳み込み演算回路は、前記第三リードセマフォおよび前記第二ライトセマフォに基づき前記畳み込み演算の実行を待ち合わせるとき、前記畳み込み演算回路の少なくとも一部に供給される前記第一クロックのクロックゲーティングを有効にする、
請求項3または請求項4に記載のニューラルネットワーク回路。 - 前記量子化演算回路による前記第二メモリからの読み出しを制限する第二リードセマフォと、
前記量子化演算回路による前記第一メモリに対する書き込みを制限する第三ライトセマフォと、
をさらに備え、
前記量子化演算回路は、前記第二リードセマフォおよび前記第三ライトセマフォに基づき前記量子化演算の実行を待ち合わせるとき、前記量子化演算回路の少なくとも一部に供給される前記第二クロックのクロックゲーティングを有効にする、
請求項5に記載のニューラルネットワーク回路。 - 前記第一メモリに前記入力データを転送するDMAコントローラと、
前記畳み込み演算回路による前記第一メモリからの読み出しを制限する第一リードセマフォと、
をさらに備え、
前記畳み込み演算回路は、前記第一リードセマフォおよび前記第二ライトセマフォに基づき前記畳み込み演算の実行を待ち合わせるとき、前記畳み込み演算回路の少なくとも一部に供給される前記第一クロックのクロックゲーティングを有効にする、
請求項5または請求項6に記載のニューラルネットワーク回路。 - 前記DMAコントローラによる前記第一メモリに対する書き込みを制限する第一ライトセマフォと、
をさらに備え、
前記DMAコントローラは、前記第一ライトセマフォに基づき前記転送の実行を待ち合わせるとき、前記DMAコントローラの少なくとも一部に供給される第三クロックのクロックゲーティングを有効にする、
請求項7に記載のニューラルネットワーク回路。 - 前記畳み込み演算回路に対して、前記第三リードセマフォおよび前記第二ライトセマフォに基づく前記畳み込み演算の実施条件の判定と、前記判定に基づく前記畳み込み演算の実施と、前記判定に基づく前記畳み込み演算回路に対する前記クロックゲーティングの実施の有無と、を一命令で指令する畳み込み演算実施命令を実行する制御回路を備える、
請求項5に記載のニューラルネットワーク回路。 - 前記量子化演算回路に対して、前記第二リードセマフォおよび前記第三ライトセマフォに基づく前記量子化演算の実施条件の判定と、前記判定に基づく前記量子化演算の実施と、前記判定に基づく前記量子化演算回路に対する前記クロックゲーティングの実施の有無と、を一命令で指令する量子化演算実施命令を実行する制御回路を備える、
請求項6に記載のニューラルネットワーク回路。 - 前記畳み込み演算回路に対して、前記第一リードセマフォおよび前記第二ライトセマフォに基づく前記畳み込み演算の実施条件の判定と、前記判定に基づく前記畳み込み演算の実施と、前記判定に基づく前記クロックゲーティングの実施の有無と、を一命令で指令する畳み込み演算実施命令を実行する制御回路を備える、
請求項7に記載のニューラルネットワーク回路。 - 前記DMAコントローラに対して、前記第一ライトセマフォに基づく前記畳み込み演算の実施条件の判定と、前記判定に基づく前記転送の実施と、前記判定に基づく前記クロックゲーティングの実施の有無と、を一命令で指令するDMA転送実施命令を実行する制御回路を備える、
請求項8に記載のニューラルネットワーク回路。 - 入力データに対して畳み込み演算を行う畳み込み演算回路と、
前記畳み込み演算回路の畳み込み演算出力データに対して量子化演算を行う量子化演算回路と、
を備えるニューラルネットワーク回路の制御方法であって、
前記畳み込み演算回路が前記畳み込み演算の実行を待ち合わせるとき、前記畳み込み演算回路の少なくとも一部に供給される第一クロックのクロックゲーティングを有効にする、
ニューラルネットワーク回路の制御方法。 - 前記量子化演算回路が前記量子化演算の実行を待ち合わせるとき、前記量子化演算回路の少なくとも一部に供給される第二クロックのクロックゲーティングを有効にする、
請求項13に記載のニューラルネットワーク回路の制御方法。 - 前記ニューラルネットワーク回路は、
前記入力データを格納する第一メモリと、
前記畳み込み演算出力データを格納する第二メモリと、
をさらに有し、
前記畳み込み演算回路が前記第一メモリに格納された前記入力データに対して前記畳み込み演算を実行するとき、前記第一クロックのクロックゲーティングを無効にし、
前記量子化演算回路が前記第二メモリに格納された前記畳み込み演算出力データ対して前記量子化演算を実行するとき、前記第二クロックのクロックゲーティングを無効にする、
請求項14に記載のニューラルネットワーク回路の制御方法。
Priority Applications (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2021165970A JP2023056644A (ja) | 2021-10-08 | 2021-10-08 | ニューラルネットワーク回路およびニューラルネットワーク回路の制御方法 |
PCT/JP2022/034419 WO2023058422A1 (ja) | 2021-10-08 | 2022-09-14 | ニューラルネットワーク回路およびニューラルネットワーク回路の制御方法 |
CN202280067805.0A CN118103851A (zh) | 2021-10-08 | 2022-09-14 | 神经网络电路以及神经网络电路的控制方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2021165970A JP2023056644A (ja) | 2021-10-08 | 2021-10-08 | ニューラルネットワーク回路およびニューラルネットワーク回路の制御方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
JP2023056644A true JP2023056644A (ja) | 2023-04-20 |
Family
ID=85804180
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2021165970A Pending JP2023056644A (ja) | 2021-10-08 | 2021-10-08 | ニューラルネットワーク回路およびニューラルネットワーク回路の制御方法 |
Country Status (3)
Country | Link |
---|---|
JP (1) | JP2023056644A (ja) |
CN (1) | CN118103851A (ja) |
WO (1) | WO2023058422A1 (ja) |
Family Cites Families (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2019215907A1 (ja) * | 2018-05-11 | 2019-11-14 | オリンパス株式会社 | 演算処理装置 |
CN110928576A (zh) * | 2018-09-20 | 2020-03-27 | 中兴通讯股份有限公司 | 一种卷积神经网络的卷积处理方法、装置及存储介质 |
JP6896306B1 (ja) * | 2020-04-13 | 2021-06-30 | LeapMind株式会社 | ニューラルネットワーク回路、エッジデバイスおよびニューラルネットワーク演算方法 |
JPWO2022211098A1 (ja) * | 2021-03-31 | 2022-10-06 |
-
2021
- 2021-10-08 JP JP2021165970A patent/JP2023056644A/ja active Pending
-
2022
- 2022-09-14 WO PCT/JP2022/034419 patent/WO2023058422A1/ja active Application Filing
- 2022-09-14 CN CN202280067805.0A patent/CN118103851A/zh active Pending
Also Published As
Publication number | Publication date |
---|---|
WO2023058422A1 (ja) | 2023-04-13 |
CN118103851A (zh) | 2024-05-28 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
Bao et al. | A power-efficient optimizing framework fpga accelerator based on winograd for yolo | |
Choi et al. | An energy-efficient deep convolutional neural network training accelerator for in situ personalization on smart devices | |
JP2023506343A (ja) | 共有スクラッチパッドメモリを用いたベクトル縮小 | |
WO2021210527A1 (ja) | ニューラルネットワーク回路の制御方法 | |
WO2022163861A1 (ja) | ニューラルネットワーク生成装置、ニューラルネットワーク演算装置、エッジデバイス、ニューラルネットワーク制御方法およびソフトウェア生成プログラム | |
KR102667790B1 (ko) | 뉴럴 네트워크 회로, 에지 디바이스 및 뉴럴 네트워크 연산 방법 | |
US7769981B2 (en) | Row of floating point accumulators coupled to respective PEs in uppermost row of PE array for performing addition operation | |
WO2023058422A1 (ja) | ニューラルネットワーク回路およびニューラルネットワーク回路の制御方法 | |
CN117112165A (zh) | 虚拟现实应用任务的处理方法、装置、虚拟现实系统 | |
WO2023139990A1 (ja) | ニューラルネットワーク回路およびニューラルネットワーク演算方法 | |
WO2022030037A1 (ja) | ニューラルネットワーク回路およびニューラルネットワーク回路の制御方法 | |
WO2022085661A1 (ja) | ニューラルネットワーク生成装置、ニューラルネットワーク制御方法およびソフトウェア生成プログラム | |
WO2024038662A1 (ja) | ニューラルネットワーク学習装置およびニューラルネットワーク学習方法 | |
WO2024111644A1 (ja) | ニューラルネットワーク回路およびニューラルネットワーク演算方法 | |
JP2022183833A (ja) | ニューラルネットワーク回路およびニューラルネットワーク演算方法 | |
WO2022004815A1 (ja) | ニューラルネットワーク生成装置、ニューラルネットワーク生成方法およびニューラルネットワーク生成プログラム | |
JP2024118195A (ja) | ニューラルネットワーク回路およびニューラルネットワーク演算方法 | |
JP2022105437A (ja) | ニューラルネットワーク回路およびニューラルネットワーク演算方法 | |
JP2022114698A (ja) | ニューラルネットワーク生成装置、ニューラルネットワーク制御方法およびソフトウェア生成プログラム | |
JP2023006509A (ja) | ソフトウェア生成装置およびソフトウェア生成方法 | |
US20240249150A1 (en) | System for allocating deep neural network to processing unit based on reinforcement learning and operation method of the system | |
US20240220764A1 (en) | Efficient zero padding in convolution at neural processor | |
CN116468087A (zh) | 用于执行深度神经网络的计算的硬件加速器和包括其的电子设备 | |
KR20230112050A (ko) | 심층 신경망의 연산을 수행하는 하드웨어 가속기 및 이를 포함하는 전자 장치 | |
GB2596864A (en) | Machine learning computer |