JP6465223B1 - 最適化装置及び最適化装置の制御方法 - Google Patents

最適化装置及び最適化装置の制御方法 Download PDF

Info

Publication number
JP6465223B1
JP6465223B1 JP2018016705A JP2018016705A JP6465223B1 JP 6465223 B1 JP6465223 B1 JP 6465223B1 JP 2018016705 A JP2018016705 A JP 2018016705A JP 2018016705 A JP2018016705 A JP 2018016705A JP 6465223 B1 JP6465223 B1 JP 6465223B1
Authority
JP
Japan
Prior art keywords
unit
energy
trial
update
trials
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.)
Active
Application number
JP2018016705A
Other languages
English (en)
Other versions
JP2019133517A (ja
Inventor
昇 米岡
昇 米岡
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Fujitsu Ltd
Original Assignee
Fujitsu Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Fujitsu Ltd filed Critical Fujitsu Ltd
Priority to JP2018016705A priority Critical patent/JP6465223B1/ja
Priority to US16/248,028 priority patent/US10534576B2/en
Application granted granted Critical
Publication of JP6465223B1 publication Critical patent/JP6465223B1/ja
Publication of JP2019133517A publication Critical patent/JP2019133517A/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F5/00Methods or arrangements for data conversion without changing the order or content of the data handled
    • G06F5/06Methods or arrangements for data conversion without changing the order or content of the data handled for changing the speed of data flow, i.e. speed regularising or timing, e.g. delay lines, FIFO buffers; over- or underrun control therefor
    • G06F5/065Partitioned buffers, e.g. allowing multiple independent queues, bidirectional FIFO's
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N5/00Computing arrangements using knowledge-based models
    • G06N5/01Dynamic search techniques; Heuristics; Dynamic trees; Branch-and-bound
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/76Architectures of general purpose stored program computers
    • G06F15/82Architectures of general purpose stored program computers data or demand driven
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F17/00Digital computing or data processing equipment or methods, specially adapted for specific functions
    • G06F17/10Complex mathematical operations
    • G06F17/11Complex mathematical operations for solving equations, e.g. nonlinear equations, general mathematical optimization problems
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/01Input arrangements or combined input and output arrangements for interaction between user and computer
    • G06F3/048Interaction techniques based on graphical user interfaces [GUI]
    • G06F3/0484Interaction techniques based on graphical user interfaces [GUI] for the control of specific functions or operations, e.g. selecting or manipulating an object, an image or a displayed text element, setting a parameter value or selecting a range
    • G06F3/04842Selection of displayed objects or displayed text elements
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/58Random or pseudo-random number generators
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N7/00Computing arrangements based on specific mathematical models
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/04Architecture, e.g. interconnection topology
    • G06N3/044Recurrent networks, e.g. Hopfield networks
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/04Architecture, e.g. interconnection topology
    • G06N3/047Probabilistic or stochastic networks
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/06Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons
    • G06N3/063Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons using electronic means

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • Mathematical Physics (AREA)
  • Pure & Applied Mathematics (AREA)
  • Mathematical Optimization (AREA)
  • Computational Mathematics (AREA)
  • Mathematical Analysis (AREA)
  • Data Mining & Analysis (AREA)
  • Software Systems (AREA)
  • Algebra (AREA)
  • Computer Hardware Design (AREA)
  • Computing Systems (AREA)
  • Evolutionary Computation (AREA)
  • Artificial Intelligence (AREA)
  • Operations Research (AREA)
  • Databases & Information Systems (AREA)
  • Human Computer Interaction (AREA)
  • Computational Linguistics (AREA)
  • Techniques For Improving Reliability Of Storages (AREA)
  • Power Sources (AREA)
  • Advance Control (AREA)

Abstract

【課題】演算効率を向上させる。【解決手段】保持部11は、複数の試行のそれぞれについての、最小エネルギーの状態と、現在の状態と、最小エネルギーと、現在のエネルギーと、温度と、バイアスとを含むコンテキスト情報11aを保持し、制御部12は、各試行における繰り返し回数を計数する繰り返し回数計数部12aと、試行回数を計数する試行回数計数部12bとを有し、コンテキスト情報11aについて、スピン情報と更新対象のエネルギーの変化値とに基づいて、各試行における繰り返し回数の更新制御を上記複数の試行の数だけ繰り返し、演算部13は、生成された乱数と、保持した重みと、スピン情報と、更新制御によって更新された現在の状態及び温度に基づいて、複数のエネルギーの変化値の候補を計算し、選択部は、乱数に基づき、演算部13が計算した複数のエネルギーの変化値の候補から、更新対象のエネルギーの変化値を選択する。【選択図】図1

Description

本発明は、最適化装置及び最適化装置の制御方法に関する。
ノイマン型コンピュータが不得意とする多変数の最適化問題を解く方法として、イジング型のエネルギー関数を用いた最適化装置(イジング装置またはボルツマンマシンと呼ばれる場合もある)を用いる方法がある。最適化装置は、計算対象の問題を、磁性体のスピンの振る舞いを表すモデルであるイジングモデルに置き換えて計算する。
最適化装置は、イジングモデルに含まれる各量子ビット(以下単にビットという)のそれぞれの値(+1または−1(スピンの向きに相当))を、他のビットの値と、他のビットと自身との間の重みを示す重み係数とバイアスに応じて決定する。なお、重み係数とバイアスは、計算対象の最適化問題によって決まる定数である。最適化装置は、たとえば、シミュレーテッド・アニーリング(以下SAと略す)などにより、上記のようなエネルギー関数の最小値が得られる各ビットの値の組み合わせを、解として求める。
特開平5−250346号公報 特開2017−138760号公報
ところでSAでは異なる温度や初期状態などでの各試行において、複数のビットの何れかの値を更新する更新処理が多数回繰り返される。SAを利用して最適化問題を解く最適化装置を論理回路により実現する場合、1回の更新処理当たりに複数の演算処理を行うため、複数クロックサイクルかかり演算効率が悪いという問題があった。
1つの側面では、本発明は、演算効率を向上させることを目的とする。
1つの実施態様では、複数の試行のそれぞれについての、最小エネルギーの状態と、現在の状態と、最小エネルギーと、現在のエネルギーと、温度と、バイアスとを含むコンテキスト情報を保持する保持部と、各試行における繰り返し回数を計数する繰り返し回数計数部と、試行回数を計数する試行回数計数部とを有し、前記保持部が保持する前記コンテキスト情報について、スピン情報と更新対象のエネルギーの変化値とに基づいて、各試行における前記繰り返し回数の更新制御を前記複数の試行の数だけ繰り返す制御部と、生成された乱数と、保持した重みと、前記スピン情報と、前記更新制御によって更新された前記現在の状態及び前記温度に基づいて、複数のエネルギーの変化値の候補を計算する演算部と、前記乱数に基づき、前記演算部が計算した前記複数のエネルギーの変化値の候補から、前記更新対象のエネルギーの変化値を選択する選択部と、を有する最適化装置が提供される。
また、1つの実施形態では、最適化装置の制御方法が提供される。
1つの側面では、演算効率を向上させることができる。
第1の実施の形態の最適化装置の一例を示す図である。 第2の実施の形態の最適化装置の一例を示す図である。 データフロー制御部の一例を示す図である。 演算部の一例を示す図である。 更新対象選択部の一例を示す図である。 選択処理部の入出力の例を示す真理値表である。 あるクロックサイクルにおいてパイプライン処理される各試行に関するデータの一例の様子を示す図である。 図7の状態の1クロックサイクル後においてパイプライン処理される各試行に関するデータの一例の様子を示す図である。 FIFOのエントリ数が3である場合のパイプライン処理の一例を示す図である。 最適化装置の全体の動作の一例の流れを示すフローチャートである。 更新処理の一例の流れを示すフローチャートである。 比較例の最適化装置を示す図である。 第2の実施の形態の最適化装置と比較例の最適化装置の更新処理の実行時間を比較した例を示す図である。
以下、発明を実施するための形態を、図面を参照しつつ説明する。
(第1の実施の形態)
以下に示す最適化装置は、イジング型のエネルギー関数を用いて、最適化問題を計算する装置である。イジング型のエネルギー関数E(x)は、たとえば、以下の式(1)で定義される。
Figure 0006465223
右辺の1項目は、全ビットから選択可能な2つのビットの全組み合わせについて、漏れと重複なく、2つのビットの値と重み係数との積を積算したものである。xは、i番目のビットの値(状態変数)、xは、j番目のビットの値であり、Wijは、i番目のビットとj番目のビットの間の重み(たとえば結合の強さ)を示す重み係数である。なお、Wij=Wji、Wii=0である。
右辺の2項目は、全ビットのそれぞれのバイアスとビットの値との積の総和を求めたものである。bは、i番目のビットのバイアスを示している。
なお、以下では、論理回路において用いられる信号の値(0,1)と対応付けるために、ビットの2つの値のうち−1を0、+1を1として説明する。
図1は、第1の実施の形態の最適化装置の一例を示す図である。
最適化装置10は、保持部11、制御部12、演算部13、選択部14を有する。
保持部11は、コンテキスト情報11aを保持する。コンテキスト情報11aは、複数の試行のそれぞれについての最小エネルギーの状態、現在の状態、最小エネルギー、現在のエネルギー、温度及びバイアスを含む。
最小エネルギーの状態とは、各試行において、これまでの更新処理で、式(1)に示したようなエネルギー関数の値(エネルギー)が最小になったときの、各ビットの値の組み合わせである。現在の状態とは、各試行における、現在の繰り返し回数における各ビットの値の組み合わせである。温度は、各試行におけるSAにて用いられる温度パラメータである。バイアスは、上記の式(1)に含まれるバイアス(たとえば、b)である。
このようなコンテキスト情報の初期値は、たとえば、最適化装置10の外部から供給される。また、コンテキスト情報は、各試行におけるSAの処理時に更新される。
保持部11は、RAM(Random Access Memory)などの揮発性の記憶装置、または、フラッシュメモリなどの不揮発性の記憶装置である。
制御部12は、各試行における更新処理の繰り返し回数を計数する繰り返し回数計数部12aと、試行回数を計数する試行回数計数部12bとを有する。
SAやその応用となるレプリカ交換法では、異なる温度や異なる初期状態などでの各試行において、複数のビットの何れかの値を更新する更新処理が多数回繰り返される。以下の説明では、試行回数をM回、繰り返し回数をN回とする。たとえば、N=1000000、M=100などである。
また、制御部12は、保持部11が保持するコンテキスト情報11aについて、スピン情報と更新対象のエネルギーの変化値とに基づいて、各試行における繰り返し回数(N回)の更新制御を試行回数(M回)だけ繰り返す。
更新制御は、SAを実現するために制御部12、演算部13、選択部14を用いて行われる更新処理についての制御である。更新制御には、SAを実現するために、たとえば、ある繰り返し回数ごとに温度を下げていくような制御や、スピン情報と更新対象のエネルギーの変化値とに基づいてエネルギーや状態(各ビットの値の組み合わせ)の更新を行う制御が含まれる。スピン情報とは、どのビットのスピンの向きを更新するか否か(つまりビットの値を更新するか否か)を示す情報を含む。更新対象のエネルギーの変化値については後述する。
このような制御部12は、カウンタ、セレクタ、レジスタなどの各種論理回路を用いて実現できる。
演算部13は、乱数生成部(図示省略)にて生成された乱数と、重み保持部13aに保持した重み係数と、上記のスピン情報と、更新制御によって更新された現在の状態及び温度に基づいて、複数のエネルギーの変化値の候補を計算する。
たとえば、i番目のビットのスピン反転に伴うエネルギーの変化値ΔEは、以下の式(2)で表される。
Figure 0006465223
式(2)において、i番目のビットの値xが1のとき、2x−1は1となり、値xが0のとき、2x−1は−1となる。なお、以下の式(3)で表されるhはローカルフィールド(局所場)と呼ばれ、各ビットにおけるスピンの反転によるエネルギー変化の割合を表している。ローカルフィールドhは、式(1)のバイアスbが更新されたものに相当する(言い換えると、初期状態のローカルフィールドhがバイアスb)。
Figure 0006465223
演算部13は、上記のようなエネルギーの変化値を、各ビットについて計算する。さらに、演算部13は、乱数に基づいて、エネルギーの変化値のうち、どのビットのエネルギーの変化値を候補(現在のエネルギーから差し引くまたは現在のエネルギーに加える候補)とするか計算する。たとえば、演算部13は、乱数と現在の温度とから閾値を計算し、エネルギーの変化値がその閾値よりも大きい場合には、そのエネルギーの変化値を候補とする。乱数を用いて閾値を計算することで、ある程度エネルギーが高くなる状態の変化も可能となり、最適化問題を計算したときの解が局所解から脱出することが可能となる。また、制御部12の制御のもと、温度を徐々に小さくして閾値の変化の幅を徐々に小さくすることで、解が最適解へと収束していく。
このような演算部13は、演算器(乗算器や加算器など)、セレクタ、レジスタなどの各種論理回路を用いて実現できる。
選択部14は、乱数に基づいて、演算部13が計算した複数のエネルギーの変化値の候補から、更新対象のエネルギーの変化値を選択する。なお、イジングモデルのSAにおいては、収束性を考慮して、状態遷移に伴い変化するビットの数は1つとするため、選択される更新対象のエネルギーの変化値も1つとする。
選択部14は、セレクタやレジスタなどの各種論理回路を用いて実現できる。
上記のような最適化装置10では、保持部11に保持された複数の試行に関するコンテキスト情報11aを用いて複数の試行を同時に処理するパイプライン処理が可能になる。図1には、各パイプライン処理に対応する6つの試行(試行No.1〜試行No.6)が同時に処理される例が示されている。この場合、レイテンシLは、パイプライン処理の段数に等しいため、L=6となる。なお、以下では説明を簡略化するため、制御部12、演算部13、選択部14のそれぞれにおけるパイプライン処理が2クロックサイクルで終わるものとする。
なお、図1には、制御部12が有するレジスタ12cと、演算部13が有するレジスタ13bと、選択部14が有するレジスタ14aが、環状に接続されている例が示されている。レジスタ12c,13b,14aは、制御部12、演算部13及び選択部14において、1クロックサイクルで処理が行われる回路部(図示省略)間に接続されている。
たとえば、あるクロックサイクルにおいて、制御部12における2クロックサイクル目の処理を行う回路部では試行No.1の試行のデータが処理され、制御部12における1クロックサイクル目の処理を行う回路部では試行No.2の試行のデータが処理される。また、そのクロックサイクルにおいて、選択部14における2クロックサイクル目の処理を行う回路部では試行No.3の試行のデータが処理され、選択部14における1クロックサイクル目の処理を行う回路部では試行No.4の試行のデータが処理される。また、そのクロックサイクルにおいて、演算部13における2クロックサイクル目の処理を行う回路部では試行No.5の試行のデータが処理され、演算部13における1クロックサイクル目の処理を行う回路部では試行No.6の試行のデータが処理される。
次のクロックサイクルでは、制御部12における2クロックサイクル目の処理を行う回路部では試行No.2の試行のデータが処理され、制御部12における1クロックサイクル目の処理を行う回路部では試行No.3の試行のデータが処理される。また、そのクロックサイクルにおいて、選択部14における2クロックサイクル目の処理を行う回路部では試行No.4の試行のデータが処理され、選択部14における1クロックサイクル目の処理を行う回路部では試行No.5の試行のデータが処理される。また、そのクロックサイクルにおいて、演算部13における2クロックサイクル目の処理を行う回路部では試行No.6の試行のデータが処理され、演算部13における1クロックサイクル目の処理を行う回路部では試行No.1の試行のデータが処理される。
このように、各試行のデータは、制御部12、演算部13、選択部14によるリング状のパイプラインを、図1の例では、反時計回りに遷移していく。そして、上記のような各試行の処理が繰り返される。
制御部12は、繰り返し回数計数部12aで計数される各試行における繰り返し回数がNに達すると、各試行の処理を終了する。このとき制御部12は、各試行におけるN回目の更新処理後のエネルギー、状態を出力する。なお、制御部12は、各試行におけるN回の更新処理で得られたエネルギーのうち最小のエネルギーや、最小のエネルギーが得られたときの状態を出力してもよい。
その後、状態、エネルギー、バイアス(ローカルフィールド)、温度などの初期化が行われ、図1の例では、新たな6つの試行において同様の更新処理が繰り返される。M回の試行のそれぞれにおいてN回の更新処理が終了した場合、最適化装置10は最適化処理を終了する。
たとえば、N回の更新処理を行うM回の試行で得られたM個のエネルギーのうち、最小のエネルギーのときの状態が、最適化問題の解となる。
以上のように、第1の実施の形態の最適化装置10によれば、複数の試行を同時に処理することが可能となるため、制御部12、演算部13、選択部14の各部の稼働率が上がり、演算効率を向上させることができる。
(第2の実施の形態)
図2は、第2の実施の形態の最適化装置の一例を示す図である。
第2の実施の形態の最適化装置20は、全体制御部21、入力部22、メモリ23a,23b,23c,23d,23e,23f,23g、データフロー制御部24を有する。また、最適化装置20は、FIFO(First In, First Out)メモリ(以下単にFIFOという)25a,25b,25c、演算部26、更新対象選択部27、乱数生成部28、出力部29を有する。最適化装置20は、たとえば、1チップの半導体集積回路により実現できる。
また、最適化装置20は、バス20aを介して、プロセッサ20b及びメモリ20cに接続される。
プロセッサ20bは、メモリ20cに記憶されているデータを読み出し、バス20aを介して最適化装置20に供給する処理や、最適化装置20が出力するデータを、バス20aを介してメモリ20cに記憶する処理などを行う。プロセッサ20bは、CPU(Central Processing Unit)やDSP(Digital Signal Processor)などの演算処理装置である。ただし、プロセッサ20bの代わりに、ASIC(Application Specific Integrated Circuit)やFPGA(Field Programmable Gate Array)などの特定用途の電子回路を用いてもよい。プロセッサ20bは、メモリ20cに記憶されたプログラムを実行する。
メモリ20cは、計算対象の最適化問題によって決まる定数である、バイアス及び複数の重み係数の他、状態、エネルギー、最小のエネルギー、後述するオフセットの初期値などのデータを記憶する。メモリ20cは、SDRAM(Synchronous Dynamic Random Access Memory)などの揮発性の記憶装置、または、フラッシュメモリ、EEPROM(Electrically Erasable Programmable Read Only Memory)やHDD(Hard Disk Drive)などの不揮発性の記憶装置である。
最適化装置20において、全体制御部21は、最適化装置20の起動や終了を制御する。また、全体制御部21は、データフロー制御部24に対して、繰り返し回数(N)や、試行回数(M)を指定する。
入力部22は、メモリ20cから読み出されたデータを受け、データフロー制御部24に供給する。
メモリ23a〜23gは、コンテキスト情報を記憶する。以下の説明では、7つのメモリ23a〜23gのそれぞれが1種類のコンテキスト情報を記憶するものとして説明する。メモリ23aは各試行における現在の状態を記憶し、メモリ23bは各試行における現在のエネルギーを記憶する。メモリ23cは各試行における現在の最小エネルギーを記憶し、メモリ23dは各試行における現在の最小エネルギーの状態を記憶する。メモリ23eは各試行における現在の温度を記憶し、メモリ23fは各試行における現在のオフセットを記憶する。メモリ23gは、各試行における現在のバイアス(ローカルフィールド)を記憶する。
メモリ23a〜23gは、たとえば、RAMなどの揮発性の記憶装置、または、フラッシュメモリなどの不揮発性の記憶装置である。
なお、メモリ23a〜23gの代わりに、1つのメモリが用いられてもよい。
データフロー制御部24は、第1の実施の形態の制御部12と同様の機能を有する。すなわち、データフロー制御部24は、メモリ23a〜23gが保持するコンテキスト情報について、スピン情報と更新対象のエネルギーの変化値とに基づいて、各試行における繰り返し回数(N回)の更新制御を試行回数(M回)だけ繰り返す。データフロー制御部24の構成例については後述する。
FIFO25aは、データフロー制御部24が出力するデータを所定のクロックサイクル分保持した後、出力する。FIFO25bは、演算部26が出力するデータを所定のクロックサイクル分保持した後、出力する。FIFO25cは、更新対象選択部27が出力するデータを所定のクロックサイクル分保持した後、出力する。上記所定のクロックサイクルは、FIFO25a,25b,25cのエントリ数(depthと呼ばれる場合もある)に依存する。
なお、FIFO25a〜25cは、それぞれ異なるエントリ数を有していてもよい。また、FIFO25a〜25cのうち、1つ、2つまたは全ては無くてもよい。
演算部26は、第1の実施の形態の演算部13と同様の機能を有する。すなわち、演算部26は、乱数生成部28にて生成された乱数、重み係数、スピン情報、更新制御によって更新された現在の状態及び温度に基づいて、複数のエネルギーの変化値の候補を計算する。演算部26の構成例については後述する。なお、スピン情報については、以下では更新対象ビット情報という。
更新対象選択部27は、第1の実施の形態の選択部14と同様の機能を有する。すなわち、更新対象選択部27は、乱数生成部28が生成した乱数に基づいて、演算部26が計算した複数のエネルギーの変化値の候補から、更新対象のエネルギーの変化値を1つ選択する。更新対象選択部27の構成例については後述する。
乱数生成部28は、演算部26と更新対象選択部27に供給する乱数を生成する。乱数生成部28は、異なるシードに基づいて複数の乱数を生成してもよい。乱数生成部28は、たとえば、LFSR(Linear Feedback Shift Register)などにより実現できる。
出力部29は、データフロー制御部24が生成したデータを最適化装置20の外部に出力する。
(データフロー制御部24の一例)
図3は、データフロー制御部の一例を示す図である。
データフロー制御部24は、試行セットカウンタ30、試行カウンタ31、イタレーションカウンタ32、試行回数分割制御部33、更新処理部34を有する。
試行セットカウンタ30は、試行回数の組(セット)である試行セットのセット数を計数する。試行カウンタ31は、試行回数を計数する。イタレーションカウンタ32は、各試行における繰り返し回数を計数する。
試行回数分割制御部33は、最適化装置20が、N(繰り返し回数)×M(試行回数)の更新処理を、N×L回の更新処理を1セットとして、ceil(M/L)セットに分割して実施するように制御する。ceil(M/L)は、MをLで割ったときの商を求め、余りは切り上げる関数である。
Lとして、M/Lが最小、且つ、M/Lの余りが0となる値が用いられる。M/Lの余りが0にならない場合は、M/Lが最小となるLの範囲で、M/Lの余りが最大となるLが用いられる。
ただ、Lの最小値は、データフロー制御部24、演算部26、更新対象選択部27のそれぞれにおけるパイプライン処理にかかるクロックサイクル数(レイテンシ)の和である。また、Lの最大値は、メモリ23a〜23gのそれぞれにおいてコンテキスト情報を記憶できる試行回数の上限と、Lの最小値とFIFO25a〜25cのエントリ数の和のうち、小さい方の値である。
このようにLを決めることで、一度に処理する試行数をより増やすことができ、より演算効率を向上できる。
試行回数分割制御部33は、たとえば、全体制御部21から、NとMを受ける。そして、試行回数分割制御部33は、更新処理部34において、たとえば、状態やエネルギーなどの更新が行われるたび、1つの試行の1回の更新処理が行われたことに相当するため、試行カウンタ31の計数値を+1カウントアップさせる。さらに、試行回数分割制御部33は、試行カウンタ31の計数値が、L−1になったときに、L個の試行のそれぞれについて1回の更新処理が行われたことになるため、イタレーションカウンタ32の計数値を+1カウントアップさせる。また、試行回数分割制御部33は、イタレーションカウンタ32の計数値が、Nになったときに、L個の試行のそれぞれについてN回の更新処理が行われたことになるため、試行セットカウンタ30の計数値を+1カウントアップさせる。そして、試行回数分割制御部33は、試行セットカウンタ30の計数値がceil(M/L)−1になったときに、ceil(M/L)セットの更新処理が終了した旨を全体制御部21に通知する。
なお、イタレーションカウンタ32は、0からNまで計数が行われる。計数値がN−1のときに、更新処理部34がFIFO25aに出力したL個目の試行のデータが、演算部26などで処理された後、計数値がNのときに、FIFO25cから供給され、その試行についての更新処理が行われるためである。
また、試行回数分割制御部33は、更新処理部34や図2に示した演算部26が用いるコンテキスト情報が記憶されているメモリ23a〜23gのアドレスを試行カウンタ31の計数値に基づいて指定し、コンテキスト情報をメモリ23a〜23gから読み出す。また、試行回数分割制御部33は、更新処理部34や演算部26が更新したコンテキスト情報を書き込むメモリ23a〜23gのアドレスを試行カウンタ31の計数値に基づいて指定し、コンテキスト情報をメモリ23a〜23gに書き込む。
また、試行回数分割制御部33は、イタレーションカウンタ32の計数値を、更新処理部34や、演算部26に供給する。
更新処理部34は、入力選択判定部34a、セレクタ34b,34c,34d、状態・エネルギー更新部34e、最小エネルギー判定・更新部34f、出力選択部34g、温度更新部34h、オフセット増分値保持部34i、出力選択部34kを有する。
入力選択判定部34aは、イタレーションカウンタ32の計数値を試行回数分割制御部33から受け、その計数値が初期値(0)のとき、セレクタ34b〜34dに対して、入力部22からのデータを選択させる旨の選択信号を出力する。入力選択判定部34aは、上記計数値が1以上のとき、セレクタ34b〜34dに対してメモリ23a〜23c,23e,23fの何れかから読み出されたコンテキスト情報を選択させる旨の選択信号を出力する。
セレクタ34bは、入力選択判定部34aが出力する選択信号に基づいて、入力部22から供給されるデータか、メモリ23a〜23cから読み出されたコンテキスト情報の何れか一方を選択して出力する。入力部22からセレクタ34bに供給されるデータは、初期状態、初期エネルギー及び初期最小エネルギーである。メモリ23a〜23cから読み出され、セレクタ34bに供給されるコンテキスト情報は、各試行における前回の更新処理で得られた状態、エネルギー及び前回までの更新処理で得られた最小エネルギーである。
セレクタ34cは、入力選択判定部34aが出力する選択信号に基づいて、入力部22から供給されるデータか、メモリ23eから読み出されたコンテキスト情報の何れか一方を選択して出力する。入力部22からセレクタ34cに供給されるデータは、初期温度である。メモリ23eから読み出され、セレクタ34cに供給されるコンテキスト情報は、各試行における前回の更新処理で得られた温度である。
セレクタ34dは、入力選択判定部34aが出力する選択信号に基づいて、入力部22から供給されるデータか、メモリ23fから読み出されたコンテキスト情報の何れか一方を選択して出力する。入力部22からセレクタ34dに供給されるデータは、初期オフセットである。メモリ23fから読み出され、セレクタ34dに供給されるコンテキスト情報は、各試行における前回の更新処理で得られたオフセットである。
状態・エネルギー更新部34eは、各試行において、イタレーションカウンタ32の計数値を試行回数分割制御部33から受け、その計数値が初期値(0)のとき、FIFO25cを介して更新対象選択部27が出力するデータを取得しない。そして、計数値が初期値(0)のとき、状態・エネルギー更新部34eは、セレクタ34bが出力する初期状態、初期エネルギー及び初期最小エネルギーをそのまま最小エネルギー判定・更新部34fに供給する。
一方、状態・エネルギー更新部34eは、イタレーションカウンタ32の計数値が1以上のとき、FIFO25cを介して更新対象選択部27が出力するデータを取得する。更新対象選択部27が出力するデータは、更新対象ビット情報と、更新対象ビットの値が変わることによるエネルギーの変化値(更新対象のエネルギーの変化値)である。更新対象ビット情報は、更新対象ビットを特定するインデックス情報と、そのビットを更新するか否かのイネーブル情報を含む。
ある試行において、イネーブル情報がfalseの場合、状態・エネルギー更新部34eは、セレクタ34bから供給される、その試行における前回の更新処理で得られた状態、エネルギー及び前回までの更新処理で得られた最小エネルギーを出力する。
ある試行において、イネーブル情報がtrueの場合、状態・エネルギー更新部34eは、セレクタ34bから供給されるその試行における前回の更新処理で得られた状態に対して、インデックス情報で特定された更新対象ビットの値を反転させた状態を出力する。また、状態・エネルギー更新部34eは、前回の更新処理で得られたエネルギーからエネルギーの変化値を差し引くことで更新したエネルギーを出力する。また、状態・エネルギー更新部34eは、前回までの更新処理で得られた最小エネルギーを出力する。
最小エネルギー判定・更新部34fは、各試行において、状態・エネルギー更新部34eが出力するエネルギーと前回までの更新処理で得られた最小エネルギーとを比較する。
そして、状態・エネルギー更新部34eが出力するエネルギーが、前回までの更新処理で得られた最小エネルギーよりも小さい場合、最小エネルギー判定・更新部34fは、状態・エネルギー更新部34eが出力するエネルギーを、最小エネルギーとして出力する。また、その場合、最小エネルギー判定・更新部34fは、状態・エネルギー更新部34eが出力する状態を、最小エネルギーの状態として出力する。一方、状態・エネルギー更新部34eが出力するエネルギーが、前回までの更新処理で得られた最小エネルギー以上である場合、最小エネルギー判定・更新部34fは、状態・エネルギー更新部34eが出力する最小エネルギーを、そのまま出力する。また、その場合、最小エネルギー判定・更新部34fは、メモリ23dが出力する最小エネルギーの状態を出力する。
なお、最小エネルギー判定・更新部34fは、状態・エネルギー更新部34eより供給される現在の状態、現在のエネルギーについてもそのまま出力する。
出力選択部34gは、各試行において、試行回数分割制御部33から供給されるイタレーションカウンタ32の計数値がNのとき、最小エネルギー判定・更新部34fが出力する現在の状態、現在のエネルギー、現在の最小エネルギーを出力部29に供給する。なお、このとき出力選択部34gは、最小エネルギーの状態を出力部29に供給してもよい。
一方、イタレーションカウンタ32の計数値がN未満のとき、出力選択部34gは、最小エネルギー判定・更新部34fが出力する現在の状態、現在のエネルギー、現在の最小エネルギー、現在の最小エネルギーの状態をメモリ23a〜23dに供給する。これにより、試行回数分割制御部33の制御のもと、これらのコンテキスト情報がメモリ23a〜23dに書き込まれる。また、出力選択部34gは、現在の状態をFIFO25aに供給する。
温度更新部34hは、各試行において、試行回数分割制御部33から供給されるイタレーションカウンタ32の計数値が所定の回数に達するたびに、温度を更新する。たとえば、温度更新部34hは、イタレーションカウンタ32が1000回のカウントアップを行うたびに、温度を下げる。たとえば、温度更新部34hは、現在の温度をTとすると、更新後の温度Tn+1をTn+1=T×0.99などとする。
オフセット増分値保持部34iは、オフセットの増分値を保持する。
オフセット更新部34jは、各試行において、イタレーションカウンタ32の計数値を試行回数分割制御部33から受け、その計数値が初期値(0)のとき、セレクタ34dが出力する初期オフセットをそのまま出力選択部34kに供給する。
一方、オフセット更新部34jは、イタレーションカウンタ32の計数値が1以上のとき、FIFO25cを介して更新対象選択部27から供給される更新対象ビット情報に含まれるイネーブル情報に基づいてオフセットを更新する。イネーブル情報がfalseの場合、オフセット更新部34jは、セレクタ34dから供給される前回の更新処理で得られたオフセットに、オフセット増分値を加算して出力する。イネーブル情報がtrueの場合、オフセット更新部34jは、オフセットを0にリセットする。
出力選択部34kは、各試行において、イタレーションカウンタ32の計数値を試行回数分割制御部33から受け、計数値がN未満の場合に、データの出力を行う。出力選択部34kは、FIFO25cを介して更新対象選択部27から供給される更新対象ビット情報を、演算部26に供給し、現在の温度をメモリ23e及びFIFO25aに供給し、現在のオフセットをメモリ23f及びFIFO25aに供給する。メモリ23e,23fに供給される現在の温度や現在のオフセットは、試行回数分割制御部33の制御のもと、メモリ23e,23fに書き込まれる。
上記のようなデータフロー制御部24の更新処理部34におけるデータの流れは、一方向となる。そのため、更新処理部34をパイプライン化することが可能である。
なお、第1の実施の形態の最適化装置10の制御部12も、図3に示したようなデータフロー制御部24と同様の構成で実現できる。
(演算部26の一例)
図4は、演算部の一例を示す図である。
演算部26は、重み行列メモリ40、セレクタ41、入力選択判定部42、ノイズ生成部43、ローカルフィールド処理部44a0,44a1,44a2,…,44anを有する。
重み行列メモリ40は、各ビット間の重みを示す重み係数を含む重み行列を保持する。重み行列は、全試行の動作開始前に、予めメモリ20cから読み出されて、入力部22を介して重み行列メモリ40に供給される。
そして、各試行において、重み行列メモリ40は、FIFO25aを介してデータフロー制御部24から供給される更新対象ビット情報に含まれるインデックス情報に基づいて、重み係数を読み出す。たとえば、インデックス情報において、i番目のビットが指定されている場合、i番目のビットと、イジングモデルに含まれる全ビットとの間の重みを示す重み係数が読み出される。イジングモデルに含まれるビット数が1024、重み行列の各要素(重み係数)がsigned 16ビット(符号付16ビット)である場合、16ビット×1024のビット幅で、重み係数が重み行列メモリ40から同時に読み出される。
重み行列メモリ40は、たとえば、16ビット×1024ワードのデータを記憶できる1024個のSRAM(Static Random Access Memory)、または256ビット×1024ワードのデータを記憶できる64個のSRAMなどである。
セレクタ41は、入力選択判定部42が出力する選択信号と、入力部22が出力する初期バイアス(メモリ20cから読み出されたもの)と、メモリ23gから読み出される前回の演算部26の処理により更新されたバイアス(ローカルフィールド)を受ける。そして、セレクタ41は、各試行において、選択信号に基づいて、初期バイアスと更新されたバイアス(ローカルフィールド)の何れか一方を選択して出力する。
入力選択判定部42は、各試行において、データフロー制御部24に含まれるイタレーションカウンタ32の計数値を受け、その計数値が初期値のとき、セレクタ41に対して、入力部22が出力する初期バイアスを選択させる旨の選択信号を出力する。入力選択判定部42は、上記計数値が1以上のとき、セレクタ41に対してメモリ23gから読み出されたバイアス(ローカルフィールド)を選択させる旨の選択信号を出力する。
ノイズ生成部43は、乱数生成部28が生成する乱数と、FIFO25aを介してデータフロー制御部24から供給される現在の温度から、ノイズを生成する。たとえば、乱数rnが0から1024の間の奇数であるとした場合、ノイズnoiseは現在の温度tmpを用いて以下の式(4)にて表せる。
noise=(float)log(rn/1024.0f)×tmp (4)
式(4)は、noise={(float)log(rn)−(float)log(1024.0f)}×tmpと変形できる。
ここで、(float)log(rn)は、DSPまたはテーブルデータを用いて実現できる。(float)log(1024.0f)は固定値である。なお、float演算は、数段のパイプライン処理を行う論理回路を用いて実現可能である。
ローカルフィールド処理部44a0〜44anは、イジングモデルに含まれるビット数分(図4の例ではビット数=n+1)設けられている。以下では、ローカルフィールド処理部44a0の回路例を説明するが、他のローカルフィールド処理部44a1〜44anも同じ回路である。
ローカルフィールド処理部44a0は、セレクタ50,51、乗算器52、加算器53、乗算器54、減算器55、閾値比較部56を有する。
セレクタ50は、FIFO25aを介してデータフロー制御部24から供給される更新対象ビット情報に含まれるイネーブル情報と符号(1から0の変化か、0から1の変化かを示す)を受ける。セレクタ50は、イネーブル情報がfalseの場合、0を選択して出力する。セレクタ50は、イネーブル情報がtrueの場合、符号が1から0の変化を示す値のときには、−1を選択して出力し、符号が0から1の変化を示す値のときには、1を選択して出力する。なお、セレクタ50が選択する1、0、−1の値は、たとえば、図示しないレジスタに記憶されている。
セレクタ51は、FIFO25aを介してデータフロー制御部24から供給される現在の状態の1番目のビットの値xが1である場合には、1を選択して出力し、現在の状態の1番目のビットの値xが0である場合には、−1を選択して出力する。なお、セレクタ51が選択する1、−1の値は、たとえば、図示しないレジスタに記憶されている。
1番目のビットに対応したローカルフィールド処理部44aの乗算器52へは、重み行列から読み出された重み係数のうち、インデックス情報で指定されたビットと1番目のビットの間の重みを示す重み係数が供給される。そして、乗算器52は、その重み係数と、セレクタ50が選択した値との積を出力する。
加算器53は、セレクタ41が選択した初期バイアスまたはバイアス(ローカルフィールド)と、乗算器52が出力する積との和を出力する。この和が、式(3)においてi=0とした場合の、1番目のビットに関するローカルフィールドhである。
乗算器54は、ローカルフィールドhと、セレクタ51が選択した値との積を出力する。この積が、式(2)においてi=0とした場合の、エネルギーの変化値ΔEである。
減算器55は、ノイズ生成部43が生成するノイズから、FIFO25aを介してデータフロー制御部24から供給されるオフセットを差し引いた値(以下閾値csthという)を出力する。
閾値比較部56は、エネルギーの変化値ΔEと閾値csthとを比較し、その比較結果を示す更新可否信号enを出力する。閾値比較部56は、ΔE>csthである場合には、更新可否信号enの値を、1番目のビットの値の更新を許容することを示す値(true(たとえば1))とする。閾値比較部56は、ΔE>csthではない場合には、更新可否信号enの値を、1番目のビットの値の更新を許容しないことを示す値(false(たとえば0))とする。
前述のように、更新対象ビット情報のイネーブル情報がfalseとなる場合、オフセットがオフセット増分値だけ増加していくため、閾値csthが小さくなる傾向を示す。そのため、ΔEが小さい値またはマイナスの値となる(エネルギーが増える変化となる)場合でも、ΔE>csthとなる可能性が増え、状態更新の頻度が上がる。
ローカルフィールド処理部44a0が生成したエネルギー変化値ΔEは、エネルギーを更新する際に用いるエネルギー変化値の候補として、更新可否信号enとともにFIFO25bを介して、更新対象選択部27に供給される。ローカルフィールドhは、メモリ23gに書き込まれる。なお、図示を省略しているが、ローカルフィールド処理部44a0から更新対象選択部27に供給されるデータには、エネルギー変化値の候補がどのビットに関するものであるのかを示すインデックス情報が含まれる。
他のローカルフィールド処理部44a1〜44anにおいても同様の処理が行われ、各ビットに対応したエネルギー変化値の候補を含むデータが、FIFO25bを介して、更新対象選択部27に供給される。
上記のような演算部26において、重み行列メモリ40に重み行列が書き込まれた後は、データの流れが一方向となる。そのため、演算部26をパイプライン化することが可能である。
なお、第1の実施の形態の最適化装置10の演算部13は、図4に示したような演算部26と同様の構成で実現できる。
(更新対象選択部27の一例)
図5は、更新対象選択部の一例を示す図である。図5の例では、イジングモデルに含まれるビット数が1024である場合の更新対象選択部27の例が示されている。
更新対象選択部27は、10段のバイナリツリー状に接続された複数の選択処理部(図5では“SF”と表記されている)を有する。
たとえば、初段には、512個の選択処理部60a1,60a2,…,60a511,60a512が設けられ、2段目には、256個の選択処理部60b1〜60b256が設けられている。また、8段目には、4個の選択処理部60c1,60c2,60c3,60c4が設けられ、9段目には、2個の選択処理部60d1,60d2が設けられ、最後段には、選択処理部60eが設けられている。
また、各段の選択処理部には、乱数生成部28が生成した1ビットの乱数が供給される。図5の例では、段ごとに異なる1ビットの乱数(bit[0]〜bit[9])が供給される例が示されているが、それぞれの選択処理部ごとに異なる1ビットの乱数が供給されるようにしてもよい。
選択処理部60a1〜60a512には、FIFO25bから、ビットごとに算出されたエネルギー変化値の候補(ΔE〜ΔE1023)と、各ビットについての更新可否信号en〜en1023と、インデックス情報(0〜1023)が供給される。
選択処理部60a1〜60a512は、2つのビットについてのエネルギー変化値の候補と更新可否信号とインデックス情報のうち、一方のビットについてのエネルギー変化値の候補と更新可否信号とインデックス情報を乱数と更新可否信号に応じて選択する。
2段目以降の選択処理部は、前段の2つの選択処理部が出力するエネルギー変化値の候補と更新可否信号とインデックス情報のうち、一方の選択処理部が出力するエネルギー変化値の候補と更新可否信号とインデックス情報を乱数と更新可否信号に応じて選択する。
たとえば、選択処理部60b1は、選択処理部60a1,60a2が出力するエネルギー変化値の候補と更新可否信号とインデックス情報のうち、一方の選択処理部が出力するエネルギー変化値の候補と更新可否信号とインデックス情報の選択を行う。
図6は、選択処理部の入出力の例を示す真理値表である。
図6の真理値表において、更新可否信号en,enは、ある選択処理部に入力されるインデックス情報a,bで指定される2つのビットについての更新可否信号を表し、“T”は、true、“F”は、falseを表す。また、rは、1ビットの乱数を表し、oは、選択処理部が出力するインデックス情報を示す。“d/c”はdon‘t careを意味する。
更新可否信号en,enが両方trueであるとき、乱数rが0の場合は、インデックス情報a(及びインデックス情報aで指定されるビットについてのエネルギー変化値の候補と、更新可否信号en)が出力される。一方、乱数rが1の場合は、インデックス情報b(及びインデックス情報bで指定されるビットについてのエネルギー変化値の候補と、更新可否信号en)が出力される。
更新可否信号enがtrue、更新可否信号enがfalseであるとき、乱数rの値によらず、インデックス情報a(及びインデックス情報aで指定されるビットについてのエネルギー変化値の候補と、更新可否信号en)が出力される。更新可否信号enがfalse、更新可否信号enがtrueであるとき、乱数rの値によらず、インデックス情報b(及びインデックス情報bで指定されるビットについてのエネルギー変化値の候補と、更新可否信号en)が出力される。
更新可否信号en,enが両方falseであるとき、乱数rが0の場合は、インデックス情報a(及びインデックス情報aで指定されるビットについてのエネルギー変化値の候補と、更新可否信号en)が出力される。一方、乱数rが1の場合は、インデックス情報b(及びインデックス情報bで指定されるビットについてのエネルギー変化値の候補と、更新可否信号en)が出力される。
上記のような処理が各選択処理部にて行われる。選択処理部60eが出力するインデックス情報と更新可否信号が、FIFO25cを介してデータフロー制御部24に供給される更新対象ビット情報である。なお、更新対象ビット情報に含まれるイネーブル情報は選択処理部60eが出力する更新可否信号である。また、最後段の選択処理部60eが出力するエネルギー変化値の候補が、FIFO25cを介してデータフロー制御部24に供給される更新対象のエネルギーの変化値である。
上記のような更新対象選択部27はデータの流れが一方向となる。そのため、更新対象選択部27をパイプライン化することが可能である。
なお、第1の実施の形態の最適化装置10の選択部14は、図5に示したような更新対象選択部27と同様の構成で実現できる。
(パイプライン処理の例)
上記のように、データフロー制御部24、演算部26、更新対象選択部27は、パイプライン化が可能である。データフロー制御部24と、演算部26と、更新対象選択部27が、FIFO25a〜25cを介してリング状に接続した最適化装置20は、L個の試行をパイプライン処理により同時に処理可能である。
図7は、あるクロックサイクルにおいてパイプライン処理される各試行に関するデータの一例の様子を示す図である。
図7では、データフロー制御部24におけるパイプラインがレジスタ24a,24b,24c,24d,24eを用いて表されている。レジスタ24a〜24eのそれぞれは、たとえば、図3に示した更新処理部34において、1クロックサイクルで処理が行われる回路部間に接続されるレジスタとして実現できる。図7の例では、データフロー制御部24におけるパイプラインでは、6クロックサイクルの処理が行われる。
また、図7では、演算部26におけるパイプラインがレジスタ26a,26bを用いて表されている。レジスタ26a,26bのそれぞれは、たとえば、図4に示した演算部26において、1クロックサイクルで処理が行われる回路部間に接続されるレジスタとして実現できる。図7の例では、演算部26におけるパイプラインでは、3クロックサイクルの処理が行われる。
また、図7では、更新対象選択部27におけるパイプラインがレジスタ27a,27bを用いて表されている。レジスタ27a,27bのそれぞれは、たとえば、図5に示した更新対象選択部27において、1クロックサイクルで処理が行われる回路部間に接続されるレジスタとして実現できる。図7の例では、更新対象選択部27におけるパイプラインでは、3クロックサイクルの処理が行われる。
また、図7の例では、FIFO25a〜25cのエントリ数が1であり、FIFO25a〜25cは1クロックサイクル分、各試行に関するデータを保持するものとしている。
上記のような例では、1回の更新処理にかかるクロックサイクル数は、6+3+3+1×3=15である。メモリ23a〜23gのそれぞれにおいてコンテキスト情報を記憶できる試行回数の上限が15以上である場合、15の試行を同時に処理可能である。
図7では、15の試行についての1回目の更新処理時のデータが[0][0]〜[0][14]として表されている。なお、[n][m]は、試行mにおけるn回目の更新処理時のデータを表す。メモリ23a〜23gには15の試行についてのコンテキスト情報が記憶される。たとえば、メモリ23aには、15の試行についてのコンテキスト情報23a0〜23a14が記憶される。
図7の例では、1つ目の試行の1回目の更新処理時のデータ[0][0]が、データフロー制御部24における5クロックサイクル目の処理を行う回路部で処理されている。このとき、2つ目の試行の1回目の更新処理時のデータ[0][1]は、データフロー制御部24における4クロックサイクル目の処理を行う回路部で処理されている。また、このとき、たとえば、8つ目の試行の1回目の更新処理時のデータ[0][7]は、更新対象選択部27における2クロックサイクル目の処理を行う回路部で処理されている。
図8は、図7の状態の1クロックサイクル後においてパイプライン処理される各試行に関するデータの一例の様子を示す図である。
図7の状態の1クロックサイクル後には、各試行に関するデータは、次のクロックサイクルの処理を行う回路部(またはFIFO25a〜25c)に遷移する。図8の例では、1つ目の試行の2回目の更新処理時のデータ[1][0]が、データフロー制御部24における6クロックサイクル目の処理を行う回路部で処理されている。このとき、2つ目の試行の1回目の更新処理時のデータ[0][1]は、データフロー制御部24における5クロックサイクル目の処理を行う回路部で処理されている。また、このとき、たとえば、8つ目の試行の1回目の更新処理時のデータ[0][7]は、更新対象選択部27における3クロックサイクル目の処理を行う回路部で処理されている。
以上のように、各試行のデータは、データフロー制御部24、演算部26、更新対象選択部27、FIFO25a〜25cによるリング状のパイプラインを、図7、図8の例では、反時計回りに遷移していく。
なお、FIFO25a〜25cのエントリ数が2以上の場合には、より多くの試行を同時に処理できる。
図9は、FIFOのエントリ数が3である場合のパイプライン処理の一例を示す図である。
図9の例では、FIFO25a〜25cのエントリ数が3であり、3つの試行のデータが保持される。このため、全体で21個の試行のデータを同時に処理可能になる。
(全体の動作例)
以下、第2の実施の形態の最適化装置20の全体の動作の流れを、フローチャートを用いて説明する。
図10は、最適化装置の全体の動作の一例の流れを示すフローチャートである。
まず、最適化装置20の入力部22は、重み行列をメモリ20cから取得する(ステップS10)。重み行列は、演算部26内の重み行列メモリ40に記憶される。
次に、データフロー制御部24の試行回数分割制御部33は、試行セットカウンタ30の計数値(is)、試行カウンタ31の計数値(iv)、イタレーションカウンタ32の計数値(it)を0に初期化する(ステップS11)。その後、SAにおける1回の更新処理が実行される(ステップS12)。更新処理の流れについては後述する。
試行回数分割制御部33は、更新処理部34において、状態やエネルギーなどの更新が行われるたび、1つの試行の1回の更新処理が行われたことに相当するため、ivを+1カウントアップさせる(ステップS13)。
そして、試行回数分割制御部33は、ivがL−1であるか否かを判定する(ステップS14)。
試行回数分割制御部33は、ivが、L−1になったときに、L個の試行のそれぞれについて1回の更新処理が行われたことになるため、itを+1カウントアップさせる。また、試行回数分割制御部33は、ivを0に初期化する(ステップS15)。ivがL−1に達していない場合には、ステップS12からの処理が繰り返される。
その後、試行回数分割制御部33は、itがNであるか否かを判定する(ステップS16)。試行回数分割制御部33は、itが、Nになったときに、L個の試行のそれぞれについてN回の更新処理が行われたことになるため、isを+1カウントアップさせる。また、試行回数分割制御部33は、itを0に初期化する(ステップS17)。itがNに達していない場合には、ステップS12からの処理が繰り返される。
次に、試行回数分割制御部33は、isがceil(M/L)−1であるか否かを判定する(ステップS18)。試行回数分割制御部33は、isがceil(M/L)−1になったときに、ceil(M/L)セットの更新処理が終了した旨を全体制御部21に通知する。これにより、全体制御部21の制御のもと、出力部29から外部のプロセッサ20bに対して最適化処理の終了が通知され(ステップS19)、最適化処理が終了する。isがceil(M/L)−1に達していない場合には、ステップS12からの処理が繰り返される。
次に、図10のステップS12の更新処理の流れを説明する。
図11は、更新処理の一例の流れを示すフローチャートである。
データフロー制御部24と演算部26の入力選択判定部34a,42は、itが0であるか否かを判定する(ステップS20)。itが0のとき、入力選択判定部34aは、セレクタ34b〜34dに対して、入力部22から供給される各種コンテキスト情報の初期値を選択させる。また、入力選択判定部42は、セレクタ41に対して、入力部22から供給されるコンテキスト情報の初期値(初期バイアス)を選択させる。これにより、コンテキスト情報が初期化される(ステップS21)。
itが1以上のとき、入力選択判定部34aは、セレクタ34b〜34dに対してメモリ23a〜23c,23e,23fの何れかから読み出されたコンテキスト情報を選択させる。また、入力選択判定部42は、セレクタ41に対してメモリ23gから読み出されたバイアス(ローカルフィールド)を選択させる。これにより、バイアス(ローカルフィールド)はローカルフィールド処理部44a0〜44anによって更新される(ステップS22)。
ステップS21,S22の処理後、演算部26は、ノイズ生成部43、減算器55を用いて閾値を生成する(ステップS23)。そして、演算部26は、ローカルフィールド処理部44a0〜44anを用いて、エネルギーの変化値の候補を算出する(ステップS24)。
その後、更新対象選択部27が、前述の処理により、更新対象ビット情報と、更新対象のエネルギーの変化値を選択する(ステップS25)。
データフロー制御部24の状態・エネルギー更新部34eは、ステップS25の処理で選択された更新対象ビット情報と、更新対象のエネルギーの変化値に基づいて、状態の更新(ステップS26)と、エネルギーの更新(ステップS27)を行う。
そして、最小エネルギー判定・更新部34fは、各試行において、更新されたエネルギーが前回までの更新処理で得られた最小エネルギーよりも小さい場合には、最小エネルギーを、そのエネルギーに更新する(ステップS28)。
また、温度更新部34hは、各試行において、イタレーションカウンタ32が所定の回数のカウントアップを行うたびに温度を更新する(ステップS29)。オフセット更新部34jは、更新対象ビット情報のイネーブル情報がfalseの場合、オフセットにオフセット増分値を加算することでオフセットを更新する(ステップS30)。
その後、試行回数分割制御部33は、itがN−1であるか否かを判定する(ステップS31)。
itがN−1である場合、試行回数分割制御部33は、たとえば、メモリ23a〜23cに記憶されている状態、エネルギー、最小エネルギーを読み出して、出力部29に出力させる(ステップS32)。ステップS32の処理後、または、itがN−1未満である場合、1回の更新処理が終了する。
なお、図11の処理の順序は適宜入れ替えてもよい。たとえば、ステップS29の処理とステップS30の処理の順序は入れ替えてもよい。
以下、第2の実施の形態の最適化装置20の効果を説明する前に、パイプライン処理を行わない最適化装置を比較例として説明する。
(比較例)
図12は、比較例の最適化装置を示す図である。
最適化装置80は、エネルギー計算部81a1,…,81ai,…,81an、遷移制御部82、状態更新部83を有している。
エネルギー計算部81a1〜81anは、第2の実施の形態の最適化装置20の演算部26の一部と同様の機能を有し、エネルギーの変化値の候補(ΔE,…,ΔE,…,ΔE)を計算し、出力する。
たとえば、エネルギー計算部81aiは、レジスタ81b、セレクタ81c,81d、乗算器81e、加算器81f、レジスタ81g、セレクタ81h、乗算器81iを有する。
レジスタ81bは、i番目のビットと他のビットとの重みを示す重み係数(Wi,1,Wi,2,…,Wi,n)を格納する。
セレクタ81cは、遷移制御部82が出力するインデックス情報IDに基づき、レジスタ81bに格納されている重み係数のうち1つを選択して出力する。
セレクタ81dは、状態更新部83が出力する更新後のビットの値xに基づき、1または−1を選択して出力する。更新後の値が0のときには、セレクタ81dは、−1を選択して出力し、更新後の値が1のときには、セレクタ81dは、1を選択して出力する。
乗算器81eは、セレクタ81cが出力する重み係数と、セレクタ81dが出力する値とを乗算した積を出力する。
加算器81fは、乗算器81eが出力する乗算結果と、レジスタ81gに格納されている値とを加算した和を出力する。
レジスタ81gは、図示しないクロック信号に同期して、加算器81fが出力する値を取り込む。レジスタ81gは、たとえば、フリップフロップである。なお、レジスタ81gに格納される値が、前述のローカルフィールドhである。
セレクタ81hは、現在の状態のi番目のビットの値が1である場合には、1を選択して出力し、現在の状態のi番目のビットの値が0である場合には、−1を選択して出力する。
乗算器81iは、レジスタ81gが出力するローカルフィールドhとセレクタ81hが出力する値とを乗算した積をエネルギーの変化値(ΔE)として出力する。
遷移制御部82は、回路部82a1,…,82ai,…,82an、セレクタ82b、オフセット制御回路82cを有している。
回路部82a1〜82anは、第2の実施の形態の最適化装置20の演算部26のノイズ生成部43、減算器55、閾値比較部56と同様の機能を有する。セレクタ82bは、第2の実施の形態の最適化装置20の更新対象選択部27と同様の機能を有する。また、オフセット制御回路82cは、第2の実施の形態の最適化装置20のデータフロー制御部24におけるオフセット更新部34jと同様の機能を有する。なお、図12において、fはイネーブル情報を表し、yはオフセットを表す。
状態更新部83は、第2の実施の形態の最適化装置20のデータフロー制御部24における状態・エネルギー更新部34eの機能を有し、遷移制御部82が出力するイネーブル情報fとインデックス情報IDに基づき、状態(State)を更新して出力する。また、状態更新部83は、更新後のビットの値xを出力する。
(第2の実施の形態の最適化装置20と、最適化装置80との効果の比較)
以下では、1回の試行当たりの最適化装置20,80と、プロセッサ20bやメモリ20cとのデータ転送時間と起動及び終了制御のための通信オーバヘッド時間をDとする。また、1回の更新処理にかかるクロックサイクル数を最適化装置20でR、最適化装置80でRとする。
この場合、比較例の最適化装置80におけるN×Mの更新処理の実行時間TはT=R×N×M+D×Mと表せる。
一方、第2の実施の形態の最適化装置20におけるN×Mの更新処理の実行時間TはT=L×N×ceil(M/L)+R+Dと表せる。最適化装置20では、L個の試行について1回の更新処理が行われている期間と、そのL個の試行についての次の更新処理が行われる期間がR分重なるため、上記の実行時間Tの式において、最後の試行についての更新処理の最後に生じるRが加算されている。上記の実行時間Tの式において、Dが加算されている理由は後述する。
なお、RはNよりも十分小さい値であることが多い(たとえば、R=20、N=1000000)。そのため、上記の実行時間Tの式は、T=L×N×ceil(M/L)+D、と近似できる。さらに、Lが前述した最小値と最大値の間で調整可能であり、MがLで割り切れる場合、T=N×M+Dと表せる。このため、実行時間Tは、最適化装置80の実行時間Tの約1/Rとなる。また、起動及び終了制御のための通信オーバヘッド時間も1/Mに短縮できる。
図13は、第2の実施の形態の最適化装置と比較例の最適化装置の更新処理の実行時間を比較した例を示す図である。
図13では、M=100、L=20、N=1000000とした場合の、実行時間T,Tの比較例が示されている。
Diは、1回の試行当たりの最適化装置20,80におけるメモリ20cからのデータの入力時間と起動制御のための通信オーバヘッド時間を表す。Doは、1回の試行当たりの最適化装置20,80からメモリ20cへのデータの出力時間と終了制御のための通信オーバヘッド時間を表す。Di+Do=Dである。
Exは、最適化装置80においては、試行m(0≦m≦99)をそれぞれN=1000000回繰り返したときの処理時間を表す。たとえば、Ex(0)は、試行0の更新処理をN=1000000回繰り返したときの処理時間を表す。最適化装置20において、Exは、20個ずつの試行を同時にN=1000000回繰り返したときの処理時間を表す。たとえば、Ex(0−19)は、試行0から試行19の更新処理をN=1000000回繰り返したときの処理時間を表す。
最適化装置80では、試行0から試行99のそれぞれの試行において、DiとDoが生じる。このため、実行時間Tは、T=R×1000000×100+D×100となる。
これに対し、最適化装置20では、20個ずつの試行が同時に行われ、さらに、試行1から試行99までの試行におけるDiと、試行0から試行98までの試行におけるDoは、Exの期間内に隠蔽される。図11に示したように、データ入力(コンテキスト情報の初期化)は、初回(itが0のとき)の更新処理にて行われ、データ出力(状態、エネルギー最小エネルギーの出力)は、itがN−1の更新処理にて行われるためである。
このため、実行時間TはT=1000000×100+R+Dとなる。
以上のように最適化装置20は、データフロー制御部24、演算部26、更新対象選択部27の稼働率を100%に近づけることができるため、演算効率を向上でき、パイプライン処理を行わない最適化装置80よりも演算時間を短縮できる。
以上、実施の形態に基づき、本発明の最適化装置及び最適化装置の制御方法の一観点について説明してきたが、これらは一例にすぎず、上記の記載に限定されるものではない。
10 最適化装置
11 保持部
11a コンテキスト情報
12 制御部
12a 繰り返し回数計数部
12b 試行回数計数部
12c,13b,14a レジスタ
13 演算部
13a 重み保持部
14 選択部

Claims (9)

  1. 複数の試行のそれぞれについての、最小エネルギーの状態と、現在の状態と、最小エネルギーと、現在のエネルギーと、温度と、バイアスとを含むコンテキスト情報を保持する保持部と、
    各試行における繰り返し回数を計数する繰り返し回数計数部と、試行回数を計数する試行回数計数部とを有し、前記保持部が保持する前記コンテキスト情報について、スピン情報と更新対象のエネルギーの変化値とに基づ複数の第1の回路部を用いて、各試行における前記繰り返し回数の更新制御を前記複数の試行の数だけ繰り返す制御部と、
    前記複数の第1の回路部の間に設けられ、前記複数の試行の処理に必要なデータを保持する第1のレジスタと、
    生成された乱数と、保持した重み係数と、前記スピン情報と、前記更新制御によって更新された前記現在の状態及び前記温度に基づ複数の第2の回路部を用いて、複数のエネルギーの変化値の候補を計算する演算部と、
    前記複数の第2の回路部の間に設けられ、前記複数のエネルギーの変化値の候補の計算に必要なデータを保持する第2のレジスタと、
    前記乱数に基づき、前記演算部が計算した前記複数のエネルギーの変化値の候補から、複数の第3の回路部を用いて、前記更新対象のエネルギーの変化値を選択する選択部と、
    前記複数の第3の回路部の間に設けられ、前記更新対象のエネルギーの変化値の選択に必要なデータを保持する第3のレジスタと、
    を有する最適化装置。
  2. 前記第1のレジスタと、前記第2のレジスタと、前記第3のレジスタとが環状に接続される、請求項1に記載の最適化装置。
  3. 前記コンテキスト情報は、さらに、オフセットを含み、
    前記制御部は、さらに、オフセット増分値と前記スピン情報と前記更新対象のエネルギーの変化値とに基づいて、前記コンテキスト情報を更新する、請求項1に記載の最適化装置。
  4. 前記制御部は、さらに、前記複数の試行による組である試行セットを計数する試行セット計数部を有し、前記保持部が保持する前記コンテキスト情報について、前記スピン情報と前記更新対象のエネルギーの変化値とに基づき、各試行セットにおける前記複数の試行の数の前記更新制御を第1の試行セット数だけ繰り返す、請求項1に記載の最適化装置。
  5. 前記制御部と、前記演算部とは、複数のエントリを有するFIFOを介して接続される、請求項1に記載の最適化装置。
  6. 前記演算部と、前記選択部とは、複数のエントリを有するFIFOを介して接続される、請求項1に記載の最適化装置。
  7. 前記選択部と、前記制御部とは、複数のエントリを有するFIFOを介して接続される、請求項1に記載の最適化装置。
  8. 前記制御部と、前記演算部と、前記選択部は、それぞれ、同じクロックサイクルにおいて異なる試行の処理を行う、請求項1に記載の最適化装置。
  9. 最適化装置の制御方法において、
    前記最適化装置が有する保持部が、複数の試行のそれぞれについての、最小エネルギーの状態と、現在の状態と、最小エネルギーと、現在のエネルギーと、温度と、バイアスとを含むコンテキスト情報を保持し、
    前記最適化装置が有する制御部が、各試行における繰り返し回数を計数する繰り返し回数計数部と、試行回数を計数する試行回数計数部とを有し、前記保持部が保持する前記コンテキスト情報について、スピン情報と更新対象のエネルギーの変化値とに基づ複数の第1の回路部と、前記複数の第1の回路部の間に設けられるとともに前記複数の試行の処理に必要なデータを保持する第1のレジスタとを用いて、各試行における前記繰り返し回数の更新制御を前記複数の試行の数だけ繰り返し、
    前記最適化装置が有する演算部が、生成された乱数と、保持した重み係数と、前記スピン情報と、前記更新制御によって更新された前記現在の状態及び前記温度に基づ複数の第2の回路部と、前記複数の第2の回路部の間に設けられるとともに複数のエネルギーの変化値の候補の計算に必要なデータを保持する第2のレジスタとを用いて、前記複数のエネルギーの変化値の候補を計算し、
    前記最適化装置が有する選択部が、前記乱数に基づき、前記演算部が計算した前記複数のエネルギーの変化値の候補から、複数の第3の回路部と、前記複数の第3の回路部の間に設けられるとともに前記更新対象のエネルギーの変化値の選択に必要なデータを保持する第3のレジスタとを用いて、前記更新対象のエネルギーの変化値を選択する、
    最適化装置の制御方法。
JP2018016705A 2018-02-01 2018-02-01 最適化装置及び最適化装置の制御方法 Active JP6465223B1 (ja)

Priority Applications (2)

Application Number Priority Date Filing Date Title
JP2018016705A JP6465223B1 (ja) 2018-02-01 2018-02-01 最適化装置及び最適化装置の制御方法
US16/248,028 US10534576B2 (en) 2018-02-01 2019-01-15 Optimization apparatus and control method thereof

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2018016705A JP6465223B1 (ja) 2018-02-01 2018-02-01 最適化装置及び最適化装置の制御方法

Related Child Applications (1)

Application Number Title Priority Date Filing Date
JP2019001943A Division JP2019133651A (ja) 2019-01-09 2019-01-09 最適化装置及び最適化装置の制御方法

Publications (2)

Publication Number Publication Date
JP6465223B1 true JP6465223B1 (ja) 2019-02-06
JP2019133517A JP2019133517A (ja) 2019-08-08

Family

ID=65270598

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2018016705A Active JP6465223B1 (ja) 2018-02-01 2018-02-01 最適化装置及び最適化装置の制御方法

Country Status (2)

Country Link
US (1) US10534576B2 (ja)
JP (1) JP6465223B1 (ja)

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN112100799A (zh) * 2019-06-18 2020-12-18 富士通株式会社 优化装置及优化方法
EP3754559A1 (en) 2019-04-10 2020-12-23 Fujitsu Limited Optimization system and control method for optimization system
JP2020204929A (ja) * 2019-06-18 2020-12-24 富士通株式会社 サンプリング装置およびサンプリング方法
EP3879417A1 (en) 2020-03-11 2021-09-15 Fujitsu Limited Information processing system, information processing method, information processing program, and information processing apparatus

Families Citing this family (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP7248907B2 (ja) * 2019-08-14 2023-03-30 富士通株式会社 最適化装置および最適化装置の制御方法
JP7339539B2 (ja) * 2020-01-15 2023-09-06 富士通株式会社 最適化装置、最適化装置の温度設定方法及び最適化装置の温度設定プログラム
JP7410394B2 (ja) * 2020-03-26 2024-01-10 富士通株式会社 最適化装置及び最適化方法

Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2016194221A1 (ja) * 2015-06-05 2016-12-08 株式会社日立製作所 計算機

Family Cites Families (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2556083B2 (ja) 1988-02-12 1996-11-20 日本電気株式会社 複合演算パイプライン回路
JPH05250346A (ja) 1992-03-04 1993-09-28 Nec Corp ニューラルネットワークシミュレーション装置
US6113033A (en) * 1999-02-04 2000-09-05 Hughes Electronics Corporation Combined flywheel energy storage and attitude control apparatus for spacecraft
US8190548B2 (en) * 2007-11-08 2012-05-29 D-Wave Systems Inc. Systems, devices, and methods for analog processing
US9177627B2 (en) * 2013-09-03 2015-11-03 Laurence Lujun Chen Method for improving the stability, write-ability and manufacturability of magneto-resistive random access memory
KR101699414B1 (ko) * 2015-10-15 2017-01-24 서울시립대학교 산학협력단 이온트랩 기반의 양자역학적 인공 시각 시스템 및 연산 방법
JP6524933B2 (ja) 2016-02-03 2019-06-05 富士通株式会社 ボルツマンマシン、ボルツマンマシンの制御方法及びボルツマンマシンを有する情報処理装置
EP3293574A1 (en) * 2016-09-09 2018-03-14 ASML Netherlands B.V. Metrology method, apparatus and computer program
US10387758B2 (en) * 2017-04-27 2019-08-20 Hewlett-Packard Development Company, L.P. Optimizing balance between duplex print job performance and duplex print engine wear

Patent Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2016194221A1 (ja) * 2015-06-05 2016-12-08 株式会社日立製作所 計算機

Cited By (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP3754559A1 (en) 2019-04-10 2020-12-23 Fujitsu Limited Optimization system and control method for optimization system
CN112100799A (zh) * 2019-06-18 2020-12-18 富士通株式会社 优化装置及优化方法
JP2020204929A (ja) * 2019-06-18 2020-12-24 富士通株式会社 サンプリング装置およびサンプリング方法
JP7239826B2 (ja) 2019-06-18 2023-03-15 富士通株式会社 サンプリング装置およびサンプリング方法
CN112100799B (zh) * 2019-06-18 2024-05-31 富士通株式会社 优化装置及优化方法
EP3879417A1 (en) 2020-03-11 2021-09-15 Fujitsu Limited Information processing system, information processing method, information processing program, and information processing apparatus

Also Published As

Publication number Publication date
US10534576B2 (en) 2020-01-14
US20190235834A1 (en) 2019-08-01
JP2019133517A (ja) 2019-08-08

Similar Documents

Publication Publication Date Title
JP6465223B1 (ja) 最適化装置及び最適化装置の制御方法
JP2019133651A (ja) 最適化装置及び最適化装置の制御方法
US11714998B2 (en) Accelerating neural networks with low precision-based multiplication and exploiting sparsity in higher order bits
JP7206476B2 (ja) 最適化装置、最適化装置の制御方法及び最適化装置の制御プログラム
JP7323777B2 (ja) 最適化装置および最適化方法
US11334320B2 (en) Generating randomness in neural networks
JP7239826B2 (ja) サンプリング装置およびサンプリング方法
US11093682B2 (en) Language and compiler that generate synchronous digital circuits that maintain thread execution order
EP3769208B1 (en) Stochastic rounding logic
JP2019139338A (ja) 情報処理装置、情報処理方法、およびプログラム
JP7137064B2 (ja) 最適化装置及び最適化装置の制御方法
EP3847544A1 (en) Hardware module for converting numbers
JP7181454B2 (ja) 最適化装置、最適化装置の制御方法および最適化装置の制御プログラム
JP2019139323A (ja) 最適化システム、最適化装置及び最適化システムの制御方法
JP2020064536A (ja) 最適化装置及び最適化装置の制御方法
CN117435855B (zh) 用于进行卷积运算的方法、电子设备和存储介质
JP7256378B2 (ja) 最適化システムおよび最適化システムの制御方法
CN116341286A (zh) 一种基于fpga的加速量子启发式求解方法及其装置
US20210173978A1 (en) Optimization device, optimization device control method, and computer-readable recording medium recording optimization device control program
CN111260036B (zh) 一种神经网络加速方法和装置
EP4217865A1 (en) Hardware accelerator for executing a computation task
EP4345600A1 (en) Multiplication hardware block with adaptive fidelity control system
CN116415103B (zh) 一种数据处理的方法、装置、存储介质以及电子设备
Christiani et al. Towards a scalable neuromorphic hardware for classification and prediction with stochastic no-prop algorithms
CN116911224A (zh) 用于优化数字逻辑电路的方法、计算机设备及存储介质

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20181011

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20181120

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20181211

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20181224

R150 Certificate of patent or registration of utility model

Ref document number: 6465223

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150