JP2023122981A - プログラム、データ処理装置及びデータ処理方法 - Google Patents

プログラム、データ処理装置及びデータ処理方法 Download PDF

Info

Publication number
JP2023122981A
JP2023122981A JP2022026770A JP2022026770A JP2023122981A JP 2023122981 A JP2023122981 A JP 2023122981A JP 2022026770 A JP2022026770 A JP 2022026770A JP 2022026770 A JP2022026770 A JP 2022026770A JP 2023122981 A JP2023122981 A JP 2023122981A
Authority
JP
Japan
Prior art keywords
state variables
value
search
state
replica
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
Application number
JP2022026770A
Other languages
English (en)
Inventor
康弘 渡部
Yasuhiro Watabe
泰孝 田村
Yasutaka Tamura
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 JP2022026770A priority Critical patent/JP2023122981A/ja
Priority to US17/980,586 priority patent/US20230267165A1/en
Priority to EP22206928.8A priority patent/EP4235518A1/en
Priority to CN202211481103.5A priority patent/CN116644808A/zh
Publication of JP2023122981A publication Critical patent/JP2023122981A/ja
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N5/00Computing arrangements using knowledge-based models
    • G06N5/04Inference or reasoning models
    • 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
    • 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
    • G06N5/00Computing arrangements using knowledge-based models
    • G06N5/01Dynamic search techniques; Heuristics; Dynamic trees; Branch-and-bound

Landscapes

  • Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • Theoretical Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Mathematical Physics (AREA)
  • Data Mining & Analysis (AREA)
  • Software Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • Pure & Applied Mathematics (AREA)
  • Computational Mathematics (AREA)
  • Mathematical Analysis (AREA)
  • Mathematical Optimization (AREA)
  • Evolutionary Computation (AREA)
  • Artificial Intelligence (AREA)
  • Computing Systems (AREA)
  • Algebra (AREA)
  • Computational Linguistics (AREA)
  • Operations Research (AREA)
  • Databases & Information Systems (AREA)
  • Management, Administration, Business Operations System, And Electronic Commerce (AREA)

Abstract

Figure 2023122981000001
【課題】組合せ最適化問題の求解性能を向上させる。
【解決手段】複数の状態変数を含むエネルギー関数で表される組合せ最適化問題の解の探索を行うデータ処理装置10の処理部12は、複数の状態変数から選択される複数の第1状態変数について、複数の第1状態変数の各々の値の変化を受け入れるか否かの判定を並列に行い、値の変化を受け入れると判定された何れかの状態変数の値を変化させる処理を、選択される複数の第1状態変数を変更しつつ行うことで、解の探索を行う探索処理を行い、探索処理の探索状況または他の組合せ最適化問題の探索記録を示す探索情報に基づいて、選択される複数の第1状態変数の数を特定し、探索処理を繰り返す。
【選択図】図1

Description

本発明は、プログラム、データ処理装置及びデータ処理方法に関する。
組合せ最適化問題の求解にデータ処理装置が用いられることがある。データ処理装置は、組合せ最適化問題を、磁性体のスピンの振る舞いを表すモデルであるイジングモデルのエネルギー関数に変換し、エネルギー関数に含まれる状態変数の値の組合せのうち、エネルギー関数の値を最小化する組合せを探索する。エネルギー関数の値を最小化する状態変数の値の組合せは、状態変数の値の組により表される基底状態または最適解に相当する。なお、以下、エネルギー関数の値をエネルギーという場合もある。
実用的な時間で組合せ最適化問題の近似解を得る手法には、マルコフ連鎖モンテカルロ(MCMC:Markov-Chain Monte Carlo)法に基づく、シミュレーテッドアニーリング(SA:Simulated Annealing)法やレプリカ交換法などがある。
組合せ最適化問題の求解(解の探索)を効率的に行うため、解の探索処理の並列度を上げることが考えられる。たとえば、値を更新する状態変数を決定する1回の試行(1モンテカルロステップの処理)において、更新に伴うエネルギーの変化量に基づいて各状態変数の更新を許容するか否かの判定を、複数の状態変数について並列に行うデータ処理装置が提案されている。
しかし、複数の状態変数についてエネルギーの変化量の計算や判定処理を並列に行って、多数の状態変数の更新が許容されても、MCMC法によるイジング型のエネルギー関数の最小化の原理により、各試行において更新される状態変数の数は1つである。このため、問題規模が大きくなると、無駄な計算が増え演算量が増加する可能性がある。
演算量の無駄を軽減するため、組合せ最適化問題を複数の部分問題に分割して、各部分問題についての上記試行を並列に行う手法(以下部分並列試行という)が提案されている。
特開2020-46997号公報 特開2021-33341号公報 特開2021-131695号公報
部分並列試行では、試行を並列に行う状態変数の数(以下並列試行ビット数という場合もある)によっては、十分な求解性能を発揮できない可能性がある。たとえば、問題によっては、並列試行ビット数を少なくした場合、更新が許容される状態変数が少なすぎて、エネルギーを最小化するうえで適切な状態変数が更新対象として選ばれづらくなり、適切な状態遷移が生じにくくなることがある。
1つの側面では、本発明は、組合せ最適化問題の求解性能を向上可能なプログラム、データ処理装置及びデータ処理方法を提供することを目的とする。
1つの実施態様では、複数の状態変数を含むエネルギー関数で表される組合せ最適化問題の解の探索を行う処理をコンピュータに実行させるプログラムであって、前記コンピュータに、前記複数の状態変数から選択される複数の第1状態変数について、前記複数の第1状態変数の各々の値の変化を受け入れるか否かの判定を並列に行い、前記値の変化を受け入れると判定された何れかの状態変数の前記値を変化させる処理を、選択される前記複数の第1状態変数を変更しつつ行うことで、前記解の探索を行う探索処理を行い、前記探索処理の探索状況または他の組合せ最適化問題の探索記録を示す探索情報に基づいて、選択される前記複数の第1状態変数の数を特定し、前記探索処理を繰り返す、処理を実行させるプログラムが提供される。
また、1つの実施態様では、データ処理装置が提供される。
また、1つの実施態様では、データ処理方法が提供される。
1つの側面では、本発明は、組合せ最適化問題の求解性能を向上できる。
第1の実施の形態のデータ処理装置を説明する図である。 第2の実施の形態のデータ処理装置のハードウェア例を示す図である。 データ処理装置の機能例を示す図である。 モジュール処理部の一例を示す図である。 モジュール処理部における局所場更新の機能例を示す図である。 決定されたグループ構成に応じたレプリカの処理の第1の例を示す図である。 決定されたグループ構成に応じたレプリカの処理の第2の例を示す図である。 パイプライン処理の例を示す図である。 重み係数の読み出しの例を示す図である。 データ処理装置の処理手順の一例を示すフローチャートである。 探索情報の集計及び記録の手順の一例を示すフローチャートである。 並列試行ビット数Pの決定処理の手順の第1の例を示すフローチャートである。 並列試行ビット数Pの決定処理の手順の第2の例を示すフローチャートである。 並列試行ビット数Pの決定処理の手順の第3の例を示すフローチャートである。 4つのグループによる並列処理の手順の一例を示すフローチャートである。
以下、発明を実施するための形態を、図面を参照しつつ説明する。
[第1の実施の形態]
第1の実施の形態を説明する。
図1は、第1の実施の形態のデータ処理装置を説明する図である。
データ処理装置10は、組合せ最適化問題に対する解を、MCMC法を用いて探索し、探索した解を出力する。たとえば、データ処理装置10は、MCMC法を基にしたSA法、レプリカ交換法などを解の探索に用いる。データ処理装置10は、記憶部11及び処理部12を有する。
記憶部11は、RAM(Random Access Memory)などの揮発性記憶装置でもよいし、フラッシュメモリなどの不揮発性記憶装置でもよい。記憶部11は、レジスタなどの電子回路を含んでもよい。処理部12は、CPU(Central Processing Unit)、DSP(Digital Signal Processor)、ASIC(Application Specific Integrated Circuit)、FPGA(Field Programmable Gate Array)、GPU(Graphics Processing Unit)などの電子回路でもよい。処理部12はプログラムを実行するプロセッサでもよい。「プロセッサ」は、複数のプロセッサの集合(マルチプロセッサ)を含み得る。
組合せ最適化問題は、イジング型のエネルギー関数により定式化され、たとえば、エネルギー関数の値を最小化する問題に置き換えられる。エネルギー関数は、目的関数や評価関数などと呼ばれることもある。エネルギー関数は、複数の状態変数を含む。状態変数は、0または1の値を取るバイナリ変数である。状態変数はビットと表記されてもよい。組合せ最適化問題の解は、複数の状態変数の値(以下状態ベクトルと呼ぶこともある)により表される。エネルギー関数の値を最小化する解は、イジングモデルの基底状態を表し、組合せ最適化問題の最適解に対応する。エネルギー関数の値は、エネルギーと表記される。
イジング型のエネルギー関数は、式(1)で表される。
Figure 2023122981000002
状態ベクトルxは、複数の状態変数を要素とし、イジングモデルの状態を表す。式(1)は、QUBO(Quadratic Unconstrained Binary Optimization)形式で定式化されたエネルギー関数である。なお、エネルギーを最大化する問題の場合には、エネルギー関数の符号を逆にすればよい。
式(1)の右辺第1項は、全状態変数から選択可能な2つの状態変数の全組合せについて、漏れと重複なく、2つの状態変数の値と重み係数との積を積算したものである。添え字i,jは状態変数のインデックスである。xは、i番目の状態変数である。xは、j番目の状態変数である。Wijは、i番目の状態変数とj番目の状態変数との間の重み、または、結合の強さを示す重み係数である。Wij=Wjiであり、Wii=0である。
式(1)の右辺第2項は、全状態変数の各々のバイアスと状態変数の値との積の総和を求めたものである。bは、i番目の状態変数に対するバイアスを示している。エネルギー関数に含まれる重み係数やバイアスなどを含む問題情報は、記憶部11に記憶される。
状態変数xの値が変化して1-xとなると、状態変数xの増加量は、δx=(1-x)-x=1-2xと表せる。したがって、エネルギー関数E(x)に対して、状態変数xの変化に伴うエネルギーの変化量ΔEは、式(2)で表される。
Figure 2023122981000003
は局所場と呼ばれ、式(3)で表される。局所場は、ローカルフィールド(LF:Local Field)と呼ばれてもよい。
Figure 2023122981000004
状態変数xが変化したときの局所場hの変化量δh (j)は、式(4)で表される。
Figure 2023122981000005
記憶部11は、複数の状態変数それぞれに対応する局所場hを保持する。処理部12は、状態変数xの値が変化したときに変化量δh (j)をhに加算することで、ビット反転後の状態に対応するhを得る。
処理部12は、解の探索において、エネルギーの変化量がΔEとなる状態遷移、すなわち、状態変数xの値の変化を受け入れるか否かを決定するためにメトロポリス法やギブス法を用いる。具体的には、処理部12は、ある状態から当該状態よりもエネルギーの低い他の状態への遷移を探索する近傍探索において、エネルギーが下がる状態だけでなく、エネルギーが上がる状態への遷移を確率的に受け入れる。たとえば、ΔEを生じさせる状態変数の値の変化を受け入れる確率Aは、式(5)で表される。
Figure 2023122981000006
βは温度を表すパラメータであるT(T>0)の逆数(β=1/T)であり、逆温度と呼ばれる。min演算子は、引数のうちの最小値を取ることを示す。式(5)の右辺上側はメトロポリス法に相当する。式(5)の右辺下側はギブス法に相当する。処理部12は、あるインデックスiに関して0<u<1である一様乱数uとAとを比較し、u<Aであれば状態変数xの値の変化を受入れ、状態変数xの値を変化させる。処理部12は、u<Aでなければ状態変数xの値の変化を受け入れず、状態変数xの値を変化させない。式(5)によれば、ΔEが大きい値であるほど、Aは小さくなる。また、βが小さい、すなわち、Tが大きいほど、ΔEが大きい状態遷移も許容されやすくなる。たとえば、メトロポリス法が用いられる場合、処理部12は、式(5)を変形した式(6)を用いて遷移判定を行ってもよい。
Figure 2023122981000007
すなわち、処理部12は、一様乱数u(0<u≦1)に対して、ΔEが式(6)を満たす場合に、該当の状態変数の値の変化を受け入れる。処理部12は、一様乱数uに対して、ΔEが式(6)を満たさない場合に、該当の状態変数の値の変化を受け入れない。
第1の実施の形態のデータ処理装置10において、処理部12は、並列試行ビット数分の部分並列試行により、値を変化させる状態変数(以下更新対象の状態変数という)を決定する。さらに処理部12は、並列試行ビット数を変更する機能を有する。
図1には、処理部12が行う処理の一部の流れが例示されている。
(S1)処理部12は、たとえば、まず並列試行ビット数P1による探索処理を行う。
エネルギー関数に含まれる状態変数の数をNとすると、ステップS1の処理では、処理部12は、状態変数の値の変化を受け入れるか否かの判定(ΔEの計算処理も含む)を、x~xから選択されるP1個の状態変数について並列に行う。また、処理部12は、P1個の状態変数についての上記判定によって、値の変化を受け入れると判定された状態変数(以下更新候補の状態変数という)のうち、何れか1つである更新対象の状態変数の値を変化させる。更新候補の状態変数が複数ある場合には、ランダムにまたは所定のルールにしたがって1つの状態変数が更新対象の状態変数として選択される。
なお、更新候補の状態変数の数が0となる場合が多いと状態遷移が生じず、計算時間の無駄となるため、処理部12は、各部分並列試行においてP1個の状態変数のうち常に1つの状態変数の値を変化させるようにしてもよい。以下この方法を、リジェクションフリー手法という。
リジェクションフリー手法が用いられる場合、処理部12は、P1個の状態変数に属する各状態変数xについて一様乱数u[i]を生成し、max(0,ΔE)+Tlog(-log(u[i]))を最小にするxを更新対象として選択すればよい。なお、max演算子は、引数のうちの最大値を取ることを示す。処理部12は、たとえば、更新候補の状態変数の数が0の場合、リジェクションフリー手法によって、更新対象の状態変数を1つ選択してもよい。
処理部12は、上記のような処理を、選択されるP1個の状態変数を変更しつつ行うことで、解の探索を行う。図1の例では、x~xは、それぞれがP1個の状態変数を含む領域(図1では並列試行領域と表記されている)A1~Anに分けられている。たとえば、領域A1から領域Anまで順番に探索が行われる。なお、各領域は同じ状態変数を含んでいてもよい。また、領域Anまで探索が行われた後は、再度領域A1から探索が行われるようにしてもよい。
(S2)たとえば、上記の探索処理が所定期間行われた場合、処理部12は、ステップS1の探索処理の探索状況を示す探索情報に基づいて、部分並列試行において選択される状態変数の数(並列試行ビット数)をP1からP2に変更する。
探索状況を示す探索情報は、たとえば、所定期間の探索処理において得られる更新候補の状態変数の数の、累計値であってもよいし、実際に値が変化した状態変数の数の、累計値であってもよい。また、探索情報は、所定期間の探索処理において、x~xの組により表される状態ベクトルの移動量(ハミング距離で表される)とエネルギーの最小値の更新の有無(または更新回数)などであってもよい。なお、処理部12は、過去に行われた他の組合せ最適化問題の探索処理の探索における並列試行ビット数に関する記録である探索情報に基づいて適切な並列試行ビット数を特定して探索を行ってもよい。
上記の探索情報は、ステップS1の探索処理の際に、記憶部11に記憶される。
ステップS2の処理において、処理部12は、たとえば、所定期間の探索処理において得られた更新候補の状態変数の数の、累計値から、各部分並列試行における更新候補の状態変数の数の平均値を計算する。そして、処理部12は、たとえば、その平均値が第1の閾値より小さければ、P1をP1より大きいP2に変更する。更新候補の状態変数が少ない場合、エネルギーを最小化する上で適切な状態変数が、更新対象として選ばれづらくなり、求解性能が悪化している可能性がある。そのため、適切な状態遷移を促し、求解性能を向上させるために、上記のように並列試行ビット数を大きくする。処理部12は、上記平均値が第2の閾値(>第1の閾値)より大きければ、P1をP1より小さいP2に変更する。更新候補の状態変数が多すぎても、選択される更新対象の状態変数は1つであるため、無駄な計算が増え、演算量が大きくなるためである。
その他の探索情報を用いた場合の並列試行ビット数の調整方法の例については、後述する(図13、図14参照)。
(S3)並列試行ビット数の変更後、処理部12は、並列試行ビット数P2による探索処理を行う。ステップS3の処理は、上記ステップS1の処理と同様に行われる。図1の例では、x~xにおいて、P2個の状態変数を含む領域B1~Bmが、m(<n)個ある例が示されている。たとえば、領域B1から領域Bmまで順番に探索が行われる。なお、各領域は同じ状態変数を含んでいてもよい。また、領域Bmまで探索が行われた後は、再度領域B1から探索が行われるようにしてもよい。
ステップS3の探索処理が所定期間行われた場合、処理部12は、ステップS3の探索処理の探索状況を示す探索情報に基づいて、ステップS2の処理を行い、並列試行ビット数をさらに変更して、探索処理を繰り返してもよい。
なお、処理部12は、各々が複数の状態変数を示す複数のレプリカを用いて、上記の探索処理を複数のレプリカについて並列に行ってもよい。なお、複数のレプリカを用いた探索処理の例については、第2の実施の形態において説明する。
処理部12は、ステップS1,S3の処理において、SA法を行う場合、たとえば、部分並列試行が所定回数、繰り返されるたび、所定の温度パラメータ変更スケジュールにしたがって、温度を表すパラメータであるTの値を小さくしていく。そして、処理部12は、たとえば、部分並列試行が所定の回数繰り返された場合に得られた状態ベクトルを、組合せ最適化問題の計算結果として出力する(たとえば、図示しない表示装置に表示してもよい)。なお、処理部12は、状態変数の値の変化が発生するたびに、式(1)で表されるエネルギー関数の値(エネルギー)を更新し、これまでの最小エネルギーとなった場合のエネルギーと状態とを記憶部11に保持させておいてもよい。その場合、処理部12は、たとえば、部分並列試行が所定の回数繰り返された後に記憶されている最小エネルギーに対応する状態を、計算結果として出力してもよい。
処理部12がレプリカ交換法を行う場合、処理部12は、それぞれ異なるTの値が設定された複数のレプリカのそれぞれにおいて、上記のステップS1~S3の処理を行う。なお、具体的な例については後述するが、各レプリカに同じ並列試行ビット数が設定されてもよいし、複数のレプリカにそれぞれ異なる並列試行ビット数が設定されてもよい。処理部12は、部分並列試行が所定回数繰り返されるごとに、レプリカ交換を行う。たとえば、処理部12は、たとえば、隣り合うTの値をもつレプリカを2つ選択して、選択された2つのレプリカの間で、レプリカ間のエネルギー差やTの値の差に基づいた所定の交換確率で、Tの値または状態を交換する。処理部12は、たとえば、各レプリカにおいて状態変数の値の変化が発生するたびに、エネルギー関数の値(エネルギー)を更新し、これまでの最小エネルギーとなった場合のエネルギーと状態とを記憶部11に記憶する。そして、処理部12は、たとえば、各レプリカにおいて上記の部分並列試行が所定の回数繰り返された後に記憶されている最小エネルギーのうち、全レプリカにおいて最小エネルギーに対応する状態を、計算結果として出力する。
以上のような第1の実施の形態のデータ処理装置10では、部分並列試行の並列試行ビット数(値の変化を受け入れるか否かを並列に判定する状態変数の数)を、探索情報に基づいて変更する。これにより、問題の特徴が反映される探索状況に応じた並列試行ビット数の設定が可能になり、1つの状態変数の値を変化させるための演算量が適正化され、大規模問題に対する求解性能を向上できる。
また、演算量の適正化以外にも、上記のように並列試行ビット数を変更することで、ある状態変数の値が変化した場合に、次に値の変化が受け入れられる状態変数となる(更新候補となる)までの期間を調整できる。これにより、その状態変数の値が変化することで、状態が局所解から脱出したときに、再度その状態変数の値が変化して再び状態が局所解に拘束されてしまう、というような状況を避けることができる。
[第2の実施の形態]
次に、第2の実施の形態を説明する。
図2は、第2の実施の形態のデータ処理装置のハードウェア例を示す図である。
データ処理装置20は、組合せ最適化問題に対する解を、MCMC法を用いて探索し、探索した解を出力するコンピュータである。データ処理装置20は、CPU21、RAM22、HDD(Hard Disk Drive)23、GPU24、入力インタフェース25、媒体リーダ26、NIC(Network Interface Card)27及びアクセラレータカード28を有する。
CPU21は、プログラムの命令を実行するプロセッサである。CPU21は、HDD23に記憶されたプログラムやデータの少なくとも一部をRAM22にロードし、プログラムを実行する。なお、CPU21は複数のプロセッサコアを含んでもよい。また、データ処理装置20は複数のプロセッサを有してもよい。以下で説明する処理は複数のプロセッサまたはプロセッサコアを用いて並列に実行されてもよい。また、複数のプロセッサの集合を「マルチプロセッサ」または単に「プロセッサ」と言うことがある。
RAM22は、CPU21が実行するプログラムやCPU21が演算に用いるデータを一時的に記憶する揮発性の半導体メモリである。なお、データ処理装置20は、RAM以外の種類のメモリを備えてもよく、複数個のメモリを備えてもよい。
HDD23は、OS(Operating System)やミドルウェアやアプリケーションソフトウェアなどのソフトウェアのプログラム、及び、データを記憶する不揮発性の記憶装置である。なお、データ処理装置20は、フラッシュメモリやSSD(Solid State Drive)などの他の種類の記憶装置を備えてもよく、複数の不揮発性の記憶装置を備えてもよい。
GPU24は、CPU21からの命令に従って、データ処理装置20に接続されたディスプレイ101に画像を出力する。ディスプレイ101としては、CRT(Cathode Ray Tube)ディスプレイ、液晶ディスプレイ(LCD:Liquid Crystal Display)、プラズマディスプレイ、有機EL(OEL:Organic Electro-Luminescence)ディスプレイなど、任意の種類のディスプレイを用いることができる。
入力インタフェース25は、データ処理装置20に接続された入力デバイス102から入力信号を取得し、CPU21に出力する。入力デバイス102としては、マウス、タッチパネル、タッチパッド、トラックボールなどのポインティングデバイス、キーボード、リモートコントローラ、ボタンスイッチなどを用いることができる。また、データ処理装置20に、複数の種類の入力デバイスが接続されていてもよい。
媒体リーダ26は、記録媒体103に記録されたプログラムやデータを読み取る読み取り装置である。記録媒体103として、たとえば、磁気ディスク、光ディスク、光磁気ディスク(MO:Magneto-Optical disk)、半導体メモリなどを使用できる。磁気ディスクには、フレキシブルディスク(FD:Flexible Disk)やHDDが含まれる。光ディスクには、CD(Compact Disc)やDVD(Digital Versatile Disc)が含まれる。
媒体リーダ26は、たとえば、記録媒体103から読み取ったプログラムやデータを、RAM22やHDD23などの他の記録媒体にコピーする。読み取られたプログラムは、たとえば、CPU21によって実行される。なお、記録媒体103は可搬型記録媒体であってもよく、プログラムやデータの配布に用いられることがある。また、記録媒体103やHDD23を、コンピュータ読み取り可能な記録媒体と言うことがある。
NIC27は、ネットワーク104に接続され、ネットワーク104を介して他のコンピュータと通信を行うインタフェースである。NIC27は、たとえば、スイッチやルータなどの通信装置とケーブルで接続される。NIC27は、無線通信インタフェースでもよい。
アクセラレータカード28は、式(1)のイジング型のエネルギー関数で表される問題の解を、MCMC法を用いて探索するハードウェアアクセラレータである。アクセラレータカード28は、一定温度のMCMC法または複数温度間でイジングモデルの状態を交換するレプリカ交換法を行うことで、該当温度におけるボルツマン分布に従う状態をサンプリングするサンプラーとして用いることができる。アクセラレータカード28は、組合せ最適化問題の求解のためには、レプリカ交換法やTの値を徐々に下げるSA法などのアニーリングの処理を実行する。
SA法は、各Tの値におけるボルツマン分布に従う状態をサンプリングし、サンプリングに用いるTを高温から低温に下げる、すなわち、逆温度βを増やすことで、最適解を効率的に発見する方法である。低温側、すなわち、βの大きい場合でもある程度状態が変化することで、Tの値を早く小さくしても良い解を発見できる可能性が高くなる。たとえば、SA法を用いる場合、アクセラレータカード28は、一定のTの値での状態遷移の試行を一定回数繰り返した後にTの値を小さくする、という動作を繰り返す。
レプリカ交換法は、複数のTの値を用いて独立してMCMC法を実行し、各Tの値で得られた状態に対して、適宜、Tの値(または状態)を交換する手法である。低温でのMCMCによって状態空間の狭い範囲を探索し、高温でのMCMCによって状態空間の広い範囲を探索することで、効率的に良い解を発見することができる。たとえば、レプリカ交換法を用いる場合、アクセラレータカード28は、複数のTの値の各々での状態遷移の試行を並列して行い、一定回数の試行を行うごとに、各Tの値で得られた状態に対して、所定の交換確率でTの値を交換する、という動作を繰り返す。
アクセラレータカード28は、FPGA28aを有する。FPGA28aは、アクセラレータカード28における探索機能を実現する。当該探索機能は、GPUやASICなどの他の種類の電子回路により実現されてもよい。FPGA28aは、メモリ28bを有する。メモリ28bは、FPGA28aでの探索に用いられる問題情報などのデータやFPGA28aにより探索された解、探索状況を示す探索情報などを保持する。FPGA28aは、メモリ28bを含む複数のメモリを有してもよい。
FPGA28aは、第1の実施の形態の処理部12の一例である。メモリ28bは、第1の実施の形態の記憶部11の一例である。なお、アクセラレータカード28は、FPGA28aの外部にRAMを有してもよく、FPGA28aの処理に応じて、メモリ28bに格納されたデータを当該RAMに一時的に退避してもよい。
アクセラレータカード28のようにイジング形式の問題の解を探索するハードウェアアクセラレータは、イジングマシンやボルツマンマシンなどと呼ばれることがある。
アクセラレータカード28は、複数のレプリカを用いた解の探索を並列に実行する。レプリカは、エネルギー関数に含まれる複数の状態変数を示す。以下の説明では、状態変数はビットと表記される。エネルギー関数に含まれる各ビットは、整数のインデックスに対応付けられ、インデックスにより識別される。
図3は、データ処理装置の機能例を示す図である。
データ処理装置20は、全体制御部30、M個(Mは2以上の整数)のモジュール(回路部と呼ぶこともできる)31a1,31a2,…,31aM、探索情報集約部32、セレクタ33を有する。全体制御部30、モジュール31a1~31aM、探索情報集約部32及びセレクタ33は、FPGA28aの電子回路やメモリ28bを用いて実現される。
全体制御部30は、モジュール31a1~31aM、探索情報集約部32、セレクタ33を制御する。また、全体制御部30は、探索情報集約部32によって集計された探索情報を受け取り、並列試行ビット数Pを決定する。そして、全体制御部30は、決定したPに基づいて、後述するモジュール31a1~31aMのグループ構成を決定し、決定したグループ構成を示すグループ構成情報をセレクタ33に供給する。
さらに、全体制御部30は、セレクタ33から供給される、各グループにおけるフリップビットインデックスに基づいて、記憶部に保持された各レプリカの状態ベクトルを更新する。フリップビットインデックスは、更新対象のビット(以下フリップビットという)のインデックスである。
また、全体制御部30は、各レプリカの現在の状態ベクトルに対応するエネルギーを保持するエネルギー保持部に保持されている当該エネルギーに、当該インデックスに対応するΔEを加算することで、各レプリカのエネルギーを更新してもよい。なお、図3では、各レプリカに対応する現在の状態ベクトルを保持する記憶部及び各レプリカの現在の状態ベクトルに対応するエネルギーを保持するエネルギー保持部は省略されている。当該記憶部やエネルギー保持部は、たとえばFPGA28a内のメモリ28bの記憶領域により実現されてもよいし、レジスタにより実現されてもよい。
また、全体制御部30は、モジュール31a1~31aMに対して制御情報、グループ構成情報、フリップビットの情報(以下フリップビット情報という)を供給する。フリップビット情報は、たとえば、フリップビットインデックスとフリップビットの反転方向(0から1に反転したか、1から0に反転したかを示す情報)とを含む。
モジュール31a1~31aMは、モジュール制御部31b1,31b2,…,31bMと、モジュール処理部31c1,31c2,…,31cMを有する。
モジュール制御部31b1~31bMは、全体制御部30から制御情報、グループ構成情報、フリップビット情報を受け取り、モジュール31a1~31aM内のパイプライン制御や、各レプリカの局所場の更新処理などを制御する。
モジュール31a1~31aMは、並列試行ビット数Pに基づいて適宜組み合わされてn個(nは2以上の整数)のグループにグループ化される。それぞれ1または複数のモジュールを含むn個のグループは、単位処理期間ごとに、複数のレプリカのうちのn個分ずつ、並列試行ビット数Pによる部分並列試行を行う。また、モジュール処理部31c1~31cMは、探索状況を示す探索情報を探索情報集約部32に送る。モジュール処理部31c1~31cMの例については後述する。
探索情報集約部32は、探索情報を集計し、集計した探索情報を全体制御部30に送る。
セレクタ33は、全体制御部30から受け取ったグループ構成情報に基づいて、セレクタ構成を変える。そして、セレクタ33は、更新候補のビット(以下フリップ候補ビットという)のインデックスが各グループについて複数ある場合、各グループあたり1つを並列に選択する。そして、セレクタ33は、選択したインデックスを、フリップビットインデックスとして出力し、全体制御部30に供給する。
以下、モジュール数M=8の場合について説明するが、この数に限定されるわけではない。
図4は、モジュール処理部の一例を示す図である。なお、図4では、図3に示した全体制御部30、モジュール制御部31b1~31bM、探索情報集約部32について図示が省略されている。
図4の例ではデータ処理装置20は、モジュール処理部31c1~31c8を有している。
モジュール処理部31c1は、メモリ部40a、h計算部40b1~40bK、ΔE計算部40c1~40cK、セレクタ40d、探索情報取得部40eを有する。その他のモジュール処理部31c2~31c8も同様の構成となっている。すなわち、モジュール処理部31c2は、メモリ部41a、h計算部41b1~41bK、ΔE計算部41c1~41cK、セレクタ41d、探索情報取得部41eを有する。モジュール処理部31c3は、メモリ部42a、h計算部42b1~42bK、ΔE計算部42c1~42cK、セレクタ42d、探索情報取得部42eを有する。モジュール処理部31c4は、メモリ部43a、h計算部43b1~43bK、ΔE計算部43c1~43cK、セレクタ43d、探索情報取得部43eを有する。モジュール処理部31c5は、メモリ部44a、h計算部44b1~44bK、ΔE計算部44c1~44cK、セレクタ44d、探索情報取得部44eを有する。モジュール処理部31c8は、メモリ部47a、h計算部47b1~47bK、ΔE計算部47c1~47cK、セレクタ47d、探索情報取得部47eを有する。Kは、モジュール処理部31c1~31c8のそれぞれが扱うビット数である。
たとえば、メモリ部40a~47aは、FPGA28aにおける、メモリ28bを含む複数のメモリにより実現される。h計算部40b1~47bK、ΔE計算部40c1~47cK、セレクタ40d~47d、探索情報取得部40e~47eは、FPGA28aの電子回路により実現される。
図4では、h計算部40b1~47bKに対し、n番目のビットに対応することがわかりやすいように「hn」計算部のように添え字nを付して名称を表記している。同様に図4では、ΔE計算部44c1~44cKに対し、n番目のビットに対応することが分かりやすいように「ΔEn」計算部のように添え字nを付して名称を表記している。
たとえば、h計算部40b1及びΔE計算部40c1が、N個のビットのうちの1番目のビットに関する演算を行う。また、h計算部40bK及びΔE計算部40cKがi番目のビットに関する演算を行う。
前述のように、モジュール31a1~31aMは、並列試行ビット数Pに基づいて適宜組み合わされてグループ化され、各グループにおいてあるレプリカについての部分並列試行を行う。
図4の例では、モジュール31a1がグループAに分類され、モジュール31a2がグループBに分類され、モジュール31a3,31a4がグループCに分類され、モジュール31a5~31a8がグループDに分類された場合が示されている。この場合、グループA,Bにてそれぞれ並列試行ビット数P=Kの部分並列試行が行われ、グループCにて並列試行ビット数P=K×2の部分並列試行が行われ、グループDにて並列試行ビット数P=K×4の部分並列試行が行われる。
データ処理装置20は、複数のレプリカに対する部分並列試行を、n個のグループによるn個の処理(パイプライン)により並列に行うことで、FPGA28aの演算リソースを効率的に利用可能にする。たとえば、図4の例の場合、データ処理装置20は、グループA~Dによる4個のパイプラインにより複数のレプリカを並列に処理する。本例では、レプリカの数を16個とする。16個のレプリカは、レプリカR0,R1,…,R15と表記される。
ここで、メモリ部40a~47aに格納される情報について説明する。メモリ部40a~47aのそれぞれは、自グループのビットと他ビットとのペア毎の重み係数W={Wγ,δ}を記憶する。状態ベクトルのビット数がNのとき、重み係数の総数はNとなる。Wγ,δ=Wδ,γである。Wγ,γ=0である。各レプリカの処理は、同じ問題についての処理であるため、レプリカ数が増えても格納される重み係数の総数は変わらない。
図4の例では、メモリ部40aは、重み係数W1,1~W1,N,…,Wi,1~Wi,Nを記憶している。たとえば、重み係数W1,1~W1,Nは、N個のビットのうち1番目のビットに対応する演算に用いられる。メモリ部40aが記憶する重み係数の総数は、i×N個である。なお、モジュール処理部31c1~31c8のそれぞれが扱うビット数がKである場合、i=Kである。
メモリ部41aは、重み係数Wi+1,1~Wi+1,N,…,Wj,1~Wj,Nを記憶する。メモリ部42aは、重み係数Wj+1,1~Wj+1,N,…,Wk,1~Wk,Nを記憶する。メモリ部43aは、重み係数Wk+1,1~Wk+1,N,…,Wl,1~Wl,Nを記憶する。メモリ部44aは、重み係数Wl+1,1~Wl+1,N,…,Wm,1~Wm,Nを記憶する。メモリ部47aは、重み係数Wo+1,1~Wo+1,N,…,WN,1~WN,Nを記憶する。
メモリ部40a~47aには、たとえば、モジュール制御部31b1~31bMから値が変化したビットのインデックスが供給される。そして、そのインデックスに対応する重み係数がメモリ部40a~47aから読み出され、h計算部40b1~47bKに供給される。
図4のようにグループ数が4つの場合、最大で同時に4個のインデックスがメモリ部40a~47aに供給される。これにより、h計算部40b1~47bKのそれぞれに対して最大で同時に4個の重み係数が供給される。当該4個の重み係数は、4個のレプリカに対応する。
以下では、主に、1番目のビットに対応するh計算部40b1、ΔE計算部40c1を例示して説明する。他のh計算部、ΔE計算部についても同様の機能である。
h計算部40b1は、メモリ部40aから読み出された重み係数を用いて、式(3),(4)に基づき、並列に処理される4つのレプリカそれぞれに対して局所場hを計算する。たとえば、h計算部40b1は、該当のレプリカに対して前回計算された局所場hを保持するレジスタを有し、該当のレプリカのδhを、当該hに加算することで、当該レジスタに格納される該当のレプリカのhを更新する。なお、各レプリカに関して反転対象のインデックスで示されるビットの反転方向を示す信号は、モジュール制御部31b1からh計算部40b1に供給される。hの初期値は、問題に応じたbに応じて、式(3)により予め計算され、h計算部40b1のレジスタに予め設定される。
ΔE計算部40c1は、h計算部40b1に保持される、次の処理対象である1つのレプリカの局所場hを用いて、式(2)に基づき、当該レプリカにおける自ビットの反転に応じたエネルギーの変化量であるΔEを計算する。ΔE計算部40c1は、たとえば、該当のレプリカの自ビットの現在の値から、自ビットの反転方向を判別し得る。たとえば、自ビットの現在の値が0なら0から1が反転方向となり、自ビットの現在の値が1なら1から0が反転方向となる。ΔE計算部40c1は、計算したΔEをセレクタ40dに供給する。
セレクタ40dは、ΔE計算部40c1~40cKから同時に供給されるΔEごとに式(6)の判定を行い、該当ビットの反転可否を決定する。たとえば、セレクタ40dは、ΔE計算部33a1計算したエネルギー変化ΔEに対して、式(6)に基づき、インデックス=1のビットの反転を許容するか否かを判定する。具体的には、セレクタ40dは、-ΔEとTに応じた熱ノイズとの比較に応じて、該当のレプリカに関して該当ビットの反転可否を判定する。熱ノイズは、式(6)における一様乱数uの自然対数値とTとの積に相当する。
さらに、セレクタ40dは、式(6)に基づいてフリップ候補ビットの中から1つを乱数に基づいてランダムに選択し、選択したビットに対応するインデックスをセレクタ33に供給する。なお、反転可と判定されるビットがない場合、セレクタ40dは、インデックスを出力しなくてもよいが、前述のリジェクションフリー手法が用いられる場合は、常に1つのビットのインデックスが出力される。
セレクタ41d~47dも自モジュールが処理するビットに対して、セレクタ40dと同様に機能する。
探索情報取得部40eは、モジュール31a1内における探索情報を取得する。探索情報取得部40eは、たとえば、セレクタ40dより出力されるインデックスの数(フリップ候補ビットの数に相当する)を探索情報として取得する。探索情報取得部40eは、各レプリカにおけるフリップビット数や、エネルギーの変化量などの情報を探索情報として取得してもよい。
探索情報取得部41e~47eも、探索情報取得部40eと同様の機能を有する。
前述のようにモジュール31a1がグループA、モジュール31a2がグループB、モジュール31a3,31a4がグループC、モジュール31a5~31a8がグループDに分類されている場合、セレクタ33は以下のように機能する。
グループAは、1つのモジュール31a1からなるため、セレクタ33は、モジュール31a1のモジュール処理部31c1が出力するインデックスを出力する機能(“1-1 Select”と図示されている)を含む。グループBは、1つのモジュール31a2からなるため、セレクタ33は、モジュール31a2のモジュール処理部31c2が出力するインデックスを出力する機能を含む。グループCは、2つのモジュール31a3,31a4からなる。そのため、セレクタ33は、モジュール31a3,31a4のモジュール処理部31c3,31c4の何れかが出力するインデックスを選択して出力する機能(“2-1 Select”と図示されている)を含む。グループDは、4つのモジュール31a5~31a8からなる。そのため、セレクタ33は、モジュール31a5~31a8のモジュール処理部31c5~31c8の何れかが出力するインデックスを選択して出力する機能(“4-1 Select”と図示されている)を含む。
セレクタ33は、複数のインデックスのうち1つを選択する際に、乱数に基づいてランダムに選択する。また、セレクタ33は、たとえば、セレクタ40d~47dから供給される選択重み情報に基づいて、何れかのインデックスを優先的に選択するようにしてもよい。選択重み情報として、たとえば、フリップ候補ビット数を用いることができる。この場合、フリップ候補ビット数が多いモジュール処理部から出力されたインデックスが優先的に選択される。また、セレクタ40d~47dがリジェクションフリー手法を用いる場合、セレクタ40d~47dが選択したビットに対応したmax(0,ΔE)+Tlog(-log(u[i]))の値を、選択重み情報として用いることもできる。その場合、max(0,ΔE)+Tlog(-log(u[i]))の値が小さくなるモジュール処理部から出力されたインデックスが優先的に選択される。
このようなセレクタ33は、たとえば、4つの8入力1出力のイネーブル付ゲート回路を用いて実現できる。“1-1 Select”を実現するゲート回路は、8入力のうち、1入力がイネーブル信号(たとえば、全体制御部30から供給されるグループ構成情報に含まれる)により有効とされる。“2-1 Select”を実現するゲート回路は、8入力のうち、2入力がイネーブル信号により有効とされる。“4-1 Select”を実現するゲート回路は、8入力のうち、4入力がイネーブル信号により有効とされる。そして、上記の選択処理が行われる。
図5は、モジュール処理部における局所場更新の機能例を示す図である。図5では、モジュール31a1のモジュール処理部31c1における局所場更新の機能例が示されている。他のモジュール処理部31c2~31cMにおける局所場更新の機能も、モジュール処理部31c1における局所場更新の機能と同様である。
メモリ部40aは、モジュール数M=8に対応した、8つのメモリ40p1,40p2,…,40p8を有する。メモリ40p1は、重み係数W1,1~W1,i,W2,1~W2,i,…,Wi,1~Wi,iを記憶する。メモリ40p2は、W1,i+1~W1,j,W2,i+1~W2,j,…,Wi,i+1~Wi,jを記憶する。メモリ40p8は、W1,k+1~W1,N,W2,k+1~W2,N,…,Wi,k+1~Wi,Nを記憶する。
h計算部40b1~40bKのそれぞれは、最大4つの重み係数を用いて、最大で4つのレプリカの自ビットに対応する局所場を、式(3),(4)に基づいて並列に更新する。たとえば、h計算部40b1は、h保持部r1、セレクタs10,s11,s12,s13及び加算器c1,c2,c3,c4を有する。他のh計算部も、h計算部40b1と同様の機能を有する。たとえば、h計算部40bKは、h保持部ri、セレクタsi0,si1,si2,si3及び加算器c5,c6,c7,c8を有する。以下、h計算部40b1について説明する。
h保持部r1は、16個のレプリカそれぞれに対応する自ビットの局所場を保持する。h保持部r1は、フリップフロップで構成されてもよいし、1Read当たり1Wordを読み出す4つのRAMで構成されてもよい。h計算部40b1における自ビットは、インデックス=1のビットである。
セレクタs10は、メモリ40p1~40p8から読み出される8つの重み係数のうちの4つを選択して、選択した4つの重み係数のそれぞれを、加算器c1,c2,c3,c4の何れかに供給する。セレクタs10は、たとえば、4つの8入力1出力のイネーブル付ゲート回路を用いて実現できる。このようなゲート回路では、グループ構成情報に基づいてモジュール制御部31b1から供給されるイネーブル信号によって、8入力の何れか1つが有効となり、有効となった入力の重み係数が出力される。
セレクタs11は、h保持部r1から、各グループで処理される更新対象のレプリカの局所場を読み出し、加算器c1,c2,c3,c4に供給する。セレクタs11がh保持部r1から同時に読み出す局所場の最大数は4である。
加算器c1,c2,c3,c4は、セレクタs11から供給される4つのグループで処理中のレプリカに関する局所場に、セレクタs10が出力する重み係数を加算することで、当該局所場を更新し、セレクタs12に供給する。重み係数の符号は、前述のように、たとえば、モジュール制御部31b1から供給されるビットの反転方向を示す信号によって決定可能である。
セレクタs12は、加算器c1~c4により更新された該当のレプリカの局所場を、h保持部r1に格納する。
セレクタs13は、モジュール31a1が属するグループAにおける次の処理対象のレプリカにおける自ビットの局所場をh保持部r1から読み出し、ΔE計算部40c1に供給する。
このようにh計算部40b1は、セレクタs10,s11,s12及び加算器c1,c2,c3,c4により、最大で4つのレプリカに関して、インデックス=1に対応する局所場を同時に更新することができる。
データ処理装置20は、上記の構成により、16個のレプリカに対して最大4つのパイプラインを並列に実行する。
次に、全体制御部30によって決定されたグループ構成に応じたレプリカの処理例を説明する。なお、以下の例では、1つのパイプラインの段数、すなわち、ステージの数は4であるとする。
第1ステージは、ΔE計算である。ΔE計算は、各グループにおいて、当該グループに属する各ビットに対するΔEを並列に計算する処理である。
第2ステージは、Flip判定である。Flip判定は、並列に計算された各ビットのΔEに対して、反転対象のビットを1つ選択する処理である。
第3ステージは、W Readである。W Readは、メモリ部40a~47aから重み係数を読み出す処理である。
第4ステージは、h更新である。h更新は、読み出された重み係数に基づいて、該当のレプリカに係る局所場を更新する処理である。h更新のステージと並行して該当のレプリカにおける反転対象のビットの反転が行われる。よって、h更新のステージはビット更新のステージであるともいえる。
なお、パイプラインのステージの数は4に限られるものではない。
また、以下では、パイプラインの1ステージ分の処理を行う期間を1ステップ期間という。
図6は、決定されたグループ構成に応じたレプリカの処理の第1の例を示す図である。図6において、M0~M7は、モジュール31a1~31a8を表している。以降の図においても、モジュール31a1~31a8はM0~M7と表記されている。
図6の例では、まず、モジュール31a1~31a8が2つずつ組み合わされている。すなわち、モジュール31a1~31a8によるグループ数は4つである。この場合、1ステップ期間あたり、レプリカR0~R15のうちの4つにおいて、並列試行ビット数P=K×2による部分並列試行が並列に実行される。
データ処理装置20は、あるグループで処理しているレプリカのh更新後に、次のグループで同レプリカの処理が行われるように、各ステージにおいて4ステップ期間分、あるいは4ステップ期間以上ずれたタイミングで、当該レプリカの処理を開始する。これにより、各レプリカ内では前のビット更新が反映された局所場を使用してΔE計算が行われるので、MCMC法の逐次処理の原則が守られる。
図6の例では、4ステップ期間分ずれたタイミングで、あるグループで処理しているレプリカが、次のグループで処理されている。
次に、図6の例では、あるタイミングでモジュール31a1~31a8が4つずつ組み合わされる構成に変化している。すなわち、モジュール31a1~31a8によるグループ数が4つから2つに変化している。この場合、1ステップ期間あたり、レプリカR0~R15のうちの2つにおいて、並列試行ビット数P=K×4による部分並列試行が並列に実行される。また、並列に処理されるレプリカ数が2つになるため、データ処理装置20は、たとえば、あるグループで処理しているレプリカのh更新が終わった後に、次のグループで同レプリカの処理が行われるまでのステップ期間を変える。図6の例では、グループ数が4のときに上記のステップ期間が4ステップ期間とされていたのが、グループ数が2のときには、上記のステップ期間が8ステップ期間に変更されている。
図7は、決定されたグループ構成に応じたレプリカの処理の第2の例を示す図である。
図7の例では、モジュール31a1~31a8(M0~M7)がそれぞれ1、1、2、4個のモジュールが属する4つのグループに分けられている。図7の例では、各レプリカの部分並列試行が、4種類の何れかの並列試行ビット数Pで行われる。レプリカR0~R7は、1つのモジュールを用いて処理されるので、並列試行ビット数PはKである。レプリカR8~R11は、2つのモジュールを用いて処理されるので、並列試行ビット数PはK×2である。レプリカR12~R15は、4つのモジュールを用いて処理されるので、並列試行ビット数PはK×4である。
このような並列試行ビット数Pの違いにより、N個のビット全体について試行が行われる周期がレプリカごとに変わる。最少のモジュールを用いて処理されるレプリカ(本例ではレプリカR0~R7)において、ビット全体についての1回の試行が行われることで、全レプリカにおいて、N個のビット全体についての1回の試行が行われることになる。
図7の例では、レプリカR0~R7は、1ステップ期間で1つのモジュールを用いて処理される。レプリカR0~R7において、N個のビット全体が8つのモジュールで分割して処理される場合、ビット全体についての1回の試行が行われるステップ期間は、4(パイプライン段数)×8(モジュール数)=32ステップ期間である。
この場合、全体制御部30は、32ステップ期間で各レプリカがN個のビット全体について試行を少なくとも1回終えるように、図7に示すように、各レプリカの処理が割り当てられるモジュールや、各モジュールのグループ構成を制御する。
図8は、パイプライン処理の例を示す図である。
図8の例では、データ処理装置20は、あるグループで処理しているレプリカのh更新後に、次のグループで同レプリカの処理が行われるように、各ステージにおいて4ステップ期間分ずれたタイミングで、当該レプリカの処理を開始している。たとえば、モジュール31a8(M7)のグループにおけるレプリカR0のh更新後に、モジュール31a4(M3)のグループでレプリカR0の処理が行われるように、各ステージにおいて4ステップ期間分ずれたタイミングでレプリカR0の処理が開始される。
これにより、各レプリカ内では前のビット更新が反映された局所場を使用してΔE計算が行われるので、MCMC法の逐次処理の原則が守られる。
ここで、局所場の更新は、該当のレプリカの全てのビットに反映する必要がある。このため、重み係数の読み出しは4つのレプリカの全てのビットに対して同時に行われる。図5で例示したように、データ処理装置20は、各グループに対応する重み係数を保持するメモリを、たとえばメモリ40p1~40p8のように分ける。よって、複数のレプリカに対応するアクセスが同じメモリに重なることはない。たとえば、図8の星印のステップ期間では、次のように重み係数の読み出しが行われる。
図9は、重み係数の読み出しの例を示す図である。
モジュール31a1~31a8(M0~M7)のメモリ部40a~47aのそれぞれは、8つのメモリに分けられている。8つのメモリのそれぞれには、自モジュールに割り当てられているK個のビットと、モジュール31a1~31a8の何れかに割り当てられているK個のビット間の重み係数が保持されている。
たとえば、モジュール31a1のメモリ部40aには、W0(M0),W0(M1),W0(M2),W0(M3),W0(M4),W0(M5),W0(M6),W0(M7)が8つのメモリ(図5のメモリ40p1~40p8)に分けられて保持されている。たとえば、W0(M0)は、モジュール31a1に割り当てられているK個のビット間の重み係数である。W0(M7)は、モジュール31a1に割り当てられているK個のビットとモジュール31a8に割り当てられているK個のビット間の重み係数である。
たとえば、モジュール31a8のメモリ部47aには、W7(M0),W7(M1),W7(M2),W7(M3),W7(M4),W7(M5),W7(M6),W7(M7)が8つのメモリに分けられて保持されている。たとえば、W7(M0)は、モジュール31a8に割り当てられているK個のビットとモジュール31a1に割り当てられているK個のビット間の重み係数である。W7(M7)は、モジュール31a8に割り当てられているK個のビット間の重み係数である。
図4に示したようなグループ構成(図9ではグループA~DがGA~GDと表記されている)の場合、W0(M0)~W7(M0)が、グループAに割り当てられたビットの反転時に、各モジュールのh更新のために用いられる重み係数である。また、W0(M1)~W7(M1)が、グループBに割り当てられたビットの反転時に、各モジュールのh更新のために用いられる重み係数である。さらに、W0(M2)~W7(M2),W0(M3)~W7(M3)が、グループCに割り当てられたビットの反転時に、各モジュールのh更新のために用いられる重み係数である。また、W0(M4)~W7(M4),W0(M5)~W7(M5),W0(M6)~W7(M6),W0(M7)~W7(M7)が、グループDに割り当てられたビットの反転時に、各モジュールのh更新のために用いられる重み係数である。
図8の星印のステップ期間では、グループAに属するモジュール31a1(M0)が処理するレプリカR4のビットの反転時に、W0(M0)~W7(M0)を保持する各メモリから重み係数が読み出される。また、グループBに属するモジュール31a2(M1)が処理するレプリカR0のビットの反転時に、W0(M1)~W7(M1)を保持する各メモリから重み係数が読み出される。
さらに、グループCに属するモジュール31a3(M2),31a4(M3)が処理するレプリカR8のビットの反転時に、W0(M2)~W7(M2)またはW0(M3)~W7(M3)を保持する各メモリから重み係数が読み出される。反転したビットがモジュール31a4に割り当てられたビットである場合、図9のように、W0(M3)~W7(M3)を保持する各メモリから重み係数が読み出される。
また、グループDに属するモジュール31a5(M4)~31a8(M7)が処理するレプリカR12のビットの反転時に、モジュール31a5(M4)~31a8(M7)の何れかに関する重み係数を保持している各メモリから重み係数が読み出される。すなわち、W0(M4)~W7(M4)、W0(M5)~W7(M5)、W0(M6)~W7(M6)、またはW0(M7)~W7(M7)の何れかを保持する各メモリから重み係数が読み出される。反転したビットがモジュール31a7に割り当てられたビットである場合、図9のように、W0(M6)~W7(M6)を保持する各メモリから重み係数が読み出される。
このように、4つのレプリカについての処理は、異なるモジュールに割り当てられたビットに対する処理であるため、図9のようにモジュール単位でメモリを分けておけば、4つのレプリカでのビットの反転時のメモリアクセスが、同じメモリ(同じ読み出しポート)に重なることがない。これによって、h更新の際のメモリアクセスがボトルネックとなって計算時間が長くなることを抑制できる。
なお、データ処理装置20は、h更新の際に、重み係数の値が0であるか否かを判定し、値が0である重み係数に対してはメモリからの読み出しを行わず、値が0でない重み係数だけを読み出すようにしてもよい。これにより、メモリから重み係数を読み出す回数を削減できる。なお、この場合、全重み係数のうち値が0である重み係数の割合によって、読み出しにかかるサイクル数が可変となるが、データ処理装置20は、サイクル数が所定の閾値より長いときは、パイプラインをストールするように制御すればよい。
次に、データ処理装置20の処理手順を説明する。まず、レプリカ1つ分についての処理手順を説明する。
図10は、データ処理装置の処理手順の一例を示すフローチャートである。
(S20)FPGA28aの全体制御部30は、初期設定を行う。たとえば、初期設定には、並列試行ビット数Pの初期値の設定や、探索情報の集計用の変数の初期化などが含まれる。以下の例では、探索情報の集計用の変数として、itrnum、Csum、Fsum、Dsum、Emin、Eminupdateが用いられる。
itrnumは、イタレーション回数を表す変数である。Csumは、フリップ候補ビット数の累計値を表す変数である。Fsumは、フリップビット数の累計値を表す変数である。Eminは、最小エネルギーを表す変数である。Dsumは、ハミング距離で表される状態ベクトルの移動量(移動距離)の累計値を表す変数である。
ステップS20の処理では、itrnum=0、Csum=0、Fsum=0、Eminupdate=0に初期化される。Eminは、たとえば、データ処理装置20が扱うことができる最大値に初期化される。
なお、ステップS20の処理では、たとえば、CPU21の制御のもとFPGA28aに供給される問題情報(エネルギー関数に含まれる重み係数やバイアスなど)を、全体制御部30が、モジュール31a1~31aMに設定してもよい。
(S21)全体制御部30は、並列試行ビット数Pの変更タイミングであるか否かを判定する。たとえば、所定期間(所定のイタレーション回数)ごとに、並列試行ビット数Pの変更タイミングであると判定される。全体制御部30は、変更タイミングであると判定した場合には、ステップS22の処理に進み、変更タイミングではないと判定した場合、ステップS23の処理が行われる。
(S22)全体制御部30は、並列試行ビット数Pを決定する処理を行う。ステップS22の処理の例については後述する。
(S23)全体制御部30は、モジュール31a1~31aMに対して制御情報、グループ構成情報、フリップビット情報を供給し、モジュール31a1~31aMに部分並列試行ループを実行させる。また、全体制御部30は、決定したPに基づいて、後述するモジュール31a1~31aMのグループ構成を決定し、決定したグループ構成を示すグループ構成情報をセレクタ33に供給する。
(S24)モジュール31a1~31aMのうちの何れか1つまたは複数の組合せにより、並列試行ビット数Pでの部分並列試行が行われる。ステップS24の処理では、当該レプリカのP個のビットについて、並列にDE計算及びFlip判定が行われる。
(S25)セレクタ33は、フリップビットを選択する。ステップS25の処理では、セレクタ33は、Flip判定の結果得られたフリップ候補ビットのインデックスの何れかを選択することでフリップビットを選択する。選択したフリップビットのインデックス(フリップビットインデックス)は、全体制御部30に供給される。
(S26)全体制御部30は、記憶部に保持された各レプリカの状態ベクトルのうち、セレクタ33から供給されるフリップビットインデックスに対応するビットを更新する。また、全体制御部30は、フリップビット情報を、モジュール31a1~31aMに供給する。モジュール31a1~31aMは、フリップビット情報に基づいて、h更新を行う。
(S27)探索情報集約部32は、探索情報の集計及び記録を行う。ステップS27の処理の例については後述する。
(S28)モジュール31a1~31aMは、レプリカにおける全ビット(Nビット)の試行を終えるまで、全体制御部30の制御に基づいて、部分並列試行を行う領域をずらして、ステップS24からステップS27の処理を繰り返す。レプリカにおける全ビット(Nビット)の試行が終わると、全体制御部30は、ステップS29の処理に進む。
(S29)全体制御部30は、探索終了であるか否かを判定する。全体制御部30は、所定の探索終了条件が満たされた場合、探索終了であると判定する。たとえば、全体制御部30は、イタレーション回数が所定回数に達した場合、探索終了であると判定する。探索終了と判定された場合、FPGA28aは処理を終了する。探索終了でないと判定された場合、ステップS21からの処理が繰り返される。
なお、FPGA28aは、SA法を行う場合、たとえば、部分並列試行が所定回数、繰り返されるたび、所定の温度パラメータ変更スケジュールにしたがって、Tの値を小さくしていく。FPGA28aは、レプリカ交換法を行う場合、複数のレプリカのそれぞれに異なるTの値を設定し、部分並列試行が所定回数繰り返されるごとに、レプリカ交換を行う。たとえば、FPGA28aは、隣り合うTの値をもつレプリカを2つ選択して、レプリカ間のエネルギー差やTの値の差に基づいた所定の交換確率で、Tの値または状態を交換する。
FPGA28aは、処理を終了すると、最終的に得られた各レプリカに対応する状態ベクトルを解としてCPU21に出力する。FPGA28aは、各レプリカに対応するエネルギーを状態ベクトルとともにCPU21に出力してもよい。FPGA28aは、探索で得られた解のうち、最もエネルギーの低い解を最終的な解として、CPU21に出力してもよい。CPU21は、GPU24を制御して、ディスプレイ101に、解を表示させてもよい。
次に、探索情報集約部32による、探索情報の集計及び記録の手順の例を説明する。
図11は、探索情報の集計及び記録の手順の一例を示すフローチャートである。なお、探索情報集約部32は、並列試行ビット数Pの決定処理に用いる探索情報だけを集計すればよいが、図11では、複数種類の探索情報を集計する例が示されている。
(S40)探索情報集約部32は、itrnumをカウントアップ(+1)する。
(S41)探索情報集約部32は、探索情報を取得する。本例では、探索情報集約部32は、フリップ候補ビット数C、フリップの有無F(有りの場合はF=1、無しの場合はF=0)、現在の状態ベクトルStatecur、現在のエネルギーEcurを、探索情報として取得する。フリップ候補ビット数Cは、モジュール31a1~31aMから取得でき、フリップの有無Fは、セレクタ33がフリップインデックスを出力するか否かによって取得できる。現在の状態ベクトルStatecurや現在のエネルギーEcurが、メモリ28bに記憶されている場合、探索情報集約部32は、メモリ28bからStatecur、Ecurを取得する。
(S42)探索情報集約部32は、Ecur<Eminであるか否かを判定する。探索情報集約部32は、Ecur<Eminであると判定した場合、ステップS43の処理を行い、Ecur<Eminではないと判定した場合、ステップS44の処理を行う。
(S43)探索情報集約部32は、EminをEcurで更新するとともに、Eminupdateをカウントアップ(+1)する。
(S44)探索情報集約部32は、移動量取得タイミングであるか否かを判定する。探索情報集約部32は、たとえば、itrnumが、前回の移動量取得タイミングから所定回数増えた場合に、移動量取得タイミングであると判定する。探索情報集約部32は移動量取得タイミングであると判定した場合、ステップS45の処理を行い、移動量取得タイミングではないと判定した場合、ステップS47の処理を行う。
(S45)探索情報集約部32は、基準状態ベクトルと現在の状態ベクトルStatecurとの間の移動量(ハミング距離)Dを計算する。
(S46)探索情報集約部32は、基準状態ベクトルを更新する。基準状態ベクトルは、たとえば、Statecurに更新される。
(S47)探索情報集約部32は、探索情報を集計する。具体的には、探索情報集約部32は、CsumにCを加え、FsumにFを加え、DsumにDを加えることで、Csum、Fsum、Dsumを更新する。
これにより、探索情報集約部32は、探索情報の集計及び記録の1回の処理を終える。
上記のような探索情報の集計及び記録は、レプリカごとに行われてもよいし、全レプリカについてまとめて行われてもよい。
次に、全体制御部30による並列試行ビット数Pの決定処理の手順の例を説明する。
図12は、並列試行ビット数Pの決定処理の手順の第1の例を示すフローチャートである。
(S50)全体制御部30は、フリップ候補ビット数の平均値Caveを算出する。全体制御部30は、探索情報集約部32から供給されるCsumを、itrnum(イタレーション回数)で割ることで、Caveを算出する。
(S51)全体制御部30は、Cave>Cthu、かつP>Pthlであるか否かを判定する。Cthuは、Caveの第1の閾値である。Pthlは、並列試行ビット数Pの下限値(たとえば、K(1モジュールで扱うビット数))である。全体制御部30は、Cave>Cthu、かつP>Pthlであると判定した場合、ステップS53の処理を行い、Cave>Cthuではない、またはP>Pthlではないと判定した場合、ステップS52の処理を行う。
(S52)全体制御部30は、Cave<Cthl、かつP<Pthuであるか否かを判定する。Cthlは、Caveの第2の閾値であり、Cthl<Cthuである。Pthuは、並列試行ビット数Pの上限値(たとえば、K×M(モジュール数))である。全体制御部30は、Cave<Cthl、かつP<Pthuであると判定した場合、ステップS54の処理を行い、Cave<Cthlではない、またはP<Pthuではないと判定した場合、ステップS55の処理を行う。
(S53)全体制御部30は、並列試行ビット数Pを少なくするために、P=P-Pdecとする。PdecはKの整数倍の値であり、予め決められている。
Caveが多すぎる場合、無駄な計算が増え、演算量が大きくなるため、演算量を抑えるため、全体制御部30は、並列試行ビット数Pを少なくしている。
(S54)全体制御部30は、並列試行ビット数Pを多くするために、P=P+Pincとする。PincはKの整数倍の値であり、予め決められている。PincはPdecと同じ値であってもよい。
Caveが少なすぎる場合、エネルギーを最小化する上で適切なフリップ候補ビットが選ばれづらくなり、求解性能が悪化している可能性がある。そのため、適切な状態遷移を促し、求解性能を向上させるために、上記のように並列試行ビット数Pを大きくする。
(S55)全体制御部30は、決定した並列試行ビット数Pをモジュール31a1~31aMに設定する。
(S56)全体制御部30は、探索情報の集計用の変数を初期化し、並列試行ビット数Pの決定処理を終える。ステップS56の処理では、itrnum=0、Csum=0、Fsum=0、Dsum=0、Eminupdate=0に初期化される。
図13は、並列試行ビット数Pの決定処理の手順の第2の例を示すフローチャートである。
(S60)全体制御部30は、所定期間におけるフリップビットの発生率を示すフリップ率Frateを算出する。全体制御部30は、探索情報集約部32から供給されるFsumを、itrnum(イタレーション回数)で割ることで、Frateを算出する。
(S61)全体制御部30は、Frate>Fthu、かつP>Pthlであるか否かを判定する。Fthuは、Frateの第1の閾値である。全体制御部30は、Frate>Fthu、かつP>Pthlであると判定した場合、ステップS63の処理を行い、Frate>Fthuではない、またはP>Pthlではないと判定した場合、ステップS62の処理を行う。
(S62)全体制御部30は、Frate<Fthl、かつP<Pthuであるか否かを判定する。Fthlは、Frateの第2の閾値であり、Fthl<Fthuである。全体制御部30は、Frate<Fthl、かつP<Pthuであると判定した場合、ステップS64の処理を行い、Frate<Fthlではない、またはP<Pthuではないと判定した場合、ステップS65の処理を行う。
(S63)全体制御部30は、並列試行ビット数Pを少なくするために、P=P-Pdecとする。Frateが大きすぎる場合、状態遷移が起こりすぎ、計算の収束性が悪化するため、求解性能が悪化している可能性がある。このため、全体制御部30は、Frateの大きさを抑えるため、並列試行ビット数Pを少なくしている。
(S64)全体制御部30は、並列試行ビット数Pを多くするために、P=P+Pincとする。Frateが小さすぎる場合、状態遷移があまり生じていないことから、求解性能が悪化している可能性がある。そのため、状態遷移を促し、求解性能を向上させるために、上記のように並列試行ビット数Pを大きくする。
ステップS65,S66の処理は、図12に示したステップS55,S56の処理と同じであるため説明を省略する。
図14は、並列試行ビット数Pの決定処理の手順の第3の例を示すフローチャートである。
(S70)全体制御部30は、移動量Dの平均値Daveを算出する。全体制御部30は、探索情報集約部32から供給されるDsumを、itrnum(イタレーション回数)で割ることで、Daveを算出する。
(S71)全体制御部30は、Dave>Dthuで、Eminの更新がなく、かつP>Pthlであるか否かを判定する。Dthuは、Daveの第1の閾値である。全体制御部30は、Dave>Dthuで、Eminの更新がなく、かつP>Pthlであると判定した場合、ステップS73の処理を行う。全体制御部30は、Dave>Dthuではない、またはEminの更新がある、またはP>Pthlではないと判定した場合、ステップS72の処理を行う。
なお、Eminの更新の有無については、Eminupdateが1以上の値であるか否かにより判定可能である。
(S72)全体制御部30は、Dave<Dthl、Eminの更新がなく、かつP<Pthuであるか否かを判定する。Dthlは、Frateの第2の閾値であり、Dthl<Dthuである。全体制御部30は、Dave<Dthl、Eminの更新がなく、かつP<Pthuであると判定した場合、ステップS74の処理を行う。全体制御部30は、Dave<Dthlではない、またはEminの更新がある、またはP<Pthuではないと判定した場合、ステップS75の処理を行う。
(S73)全体制御部30は、並列試行ビット数Pを少なくするために、P=P-Pdecとする。Daveが大きいにも関わらずEminの更新がされていない場合、無駄な計算が多く発生し、求解性能が悪化している可能性がある。このため、全体制御部30は、無駄な計算の発生を抑えるため、並列試行ビット数Pを少なくしている。
(S74)全体制御部30は、並列試行ビット数Pを多くするために、P=P+Pincとする。Daveが小さすぎ、かつEminの更新がされていない場合、探索範囲が狭すぎるため、求解性能が悪化している可能性がある。そのため、探索範囲を広げ、求解性能を向上させるために、上記のように並列試行ビット数Pを大きくする。
ステップS75,S76の処理は、図12に示したステップS55,S56の処理と同じであるため説明を省略する。
上記のような、並列試行ビット数Pの決定処理は、各レプリカについての探索情報の集計に基づいて行われてもよいし、全レプリカについての探索情報の集計に基づいて、行われてもよい。
また、上記のような3種類の決定処理は、互いに組み合わせることもできる。たとえば、3種類の決定処理によって決定された並列試行ビット数Pが、モジュール31a1~31aMに設定される。
なお、全体制御部30は、決定した並列試行ビット数Pの値に基づいて、各レプリカにおいてPが同じ値になるように(図6参照)、または各レプリカにおいてPを一定の比率にするように(図7参照)調整を行ってもよい。これにより、パイプライン処理の効率がよくなる。
次に、データ処理装置20の処理手順を、4つのグループによる並列処理が行われる場合を例にして、より具体的に説明する。
図15は、4つのグループによる並列処理の手順の一例を示すフローチャートである。図15は、図10に示した手順のステップS23~S28の処理を、複数レプリカについてより具体的に例示したものを含む。並列試行ビット数Pの決定処理や、探索情報の集計や記録の処理などについては図示が省略されている。
(S80)全体制御部30は、初期設定を行う。たとえば、初期設定には、並列試行ビット数Pの初期値の設定や、前述の探索情報の集計用の変数の初期化が含まれる。さらに、複数レプリカが用いられる場合、レプリカ数、グループ数(図15の例では4)、グループ間のレプリカ間隔が設定される。レプリカ間隔は、パイプラインのステージ数あるいは当該ステージ数以上の値が設定される(前述の図8の例では4)。
さらに、ステップS80の処理では、最初にモジュール31a1~31aMのそれぞれが割り当てられるグループと、各グループが処理するレプリカが設定される。たとえば、前述の図7に示した例では、モジュール31a1~31a4(M0~M3)が1つのグループに割り当てられ、そのグループにレプリカR12が割り当てられている。また、モジュール31a5,31a6(M4,M5)が1つのグループに割り当てられ、そのグループにレプリカR8が割り当てられている。さらに、モジュール31a7(M6)が1つのグループに割り当てられ、そのグループにレプリカR4が割り当てられ、モジュール31a8(M7)が1つのグループに割り当てられ、そのグループにレプリカR0が割り当てられている。
全体制御部30は、高温の(設定されている温度を表すパラメータであるTの値が大きい)レプリカほど、並列試行ビット数Pの初期値が小さくなるように、少ないモジュール数のグループに割り当てられるようにしてもよい。
以下4つのグループをG0~G3と表記する。
(S81)モジュール31a1~31aMは、各レプリカにおいてビット全体についての1回の試行が行われるまで、ループ処理を行う。
(S82)全体制御部30は、レプリカループの1周ごとに、レプリカに対するモジュールまたはグループの割当を設定する。
前述の図7に示した例では、1ステップ期間がレプリカループの1周に対応する。レプリカループの1周ごとに、各モジュールに割り当てられるレプリカが変わっている。そして、レプリカループの4周ごとに、同じレプリカが割り当てられるモジュールが変わっている。たとえば、1周目では、レプリカR12は、モジュール31a1~31a4(M0~M3)に割り当てられ、レプリカR8は、モジュール31a5,31a6(M4,M5)に割り当てられている。また1周目では、レプリカR4が、モジュール31a7(M6)に割り当てられ、レプリカR0が、モジュール31a8(M7)に割り当てられている。4周後では、レプリカR12は、モジュール31a5~31a8(M4~M7)に割り当てられ、レプリカR8は、モジュール31a1,31a2(M0,M1)に割り当てられている。また4周後では、レプリカR4が、モジュール31a3(M2)に割り当てられ、レプリカR0が、モジュール31a4(M3)に割り当てられている。
(S83a,S83b,S83c,S83d)グループG0~G3のそれぞれに割り当てられたレプリカに関するDE計算が、グループG0~G3によって並列に実行される。DE計算は、モジュール数M=8の場合、図4に示したΔE計算部41c1~47cKによって行われる。
(S84a,S84b,S84c,S84d)グループG0~G3のそれぞれに割り当てられたレプリカに関するFlip判定が、グループG0~G3によって並列に実行される。Flip判定は、モジュール数M=8の場合、図4に示したセレクタ40d~47dによって行われる。
(S85a,S85b,S85c,S85d)グループG0~G3は、各グループが処理しているレプリカにおいて、フリップが発生したか否かを並列に判定する。モジュール31a1~31aMのモジュール制御部31b1~31bMは、全体制御部30から供給されるフリップビット情報に基づいて、上記の判定を行う。
ステップS85aの処理で、フリップが発生したと判定された場合、ステップS86aの処理が行われる。ステップS85bの処理で、フリップが発生したと判定された場合、ステップS86bの処理が行われる。ステップS85cの処理で、フリップが発生したと判定された場合、ステップS86cの処理が行われる。ステップS85dの処理で、フリップが発生したと判定された場合、ステップS86dの処理が行われる。ステップS85a~85dの処理で、フリップが発生なかったと判定された場合、ステップS88の処理が行われる。
(S86a,S86b,S86c,S86d)グループG0~G3において、モジュール31a1~31aMのそれぞれは、フリップビットに関する全重み係数をメモリから読み出す。グループG0~G3の全グループにおいて、フリップビットが発生した場合、全グループのフリップビットに関する重み係数が、モジュール31a1~31aMのそれぞれにおいて読み出される(図9参照)。
(S87a,S87b,S87c,S87d)グループG0~G3のそれぞれは、読み出した重み係数を用いて、図5に示したような機能により、h更新を行う。グループG0~G3の全グループにおいてフリップビットが発生した場合、グループG0~G3で処理中のレプリカのそれぞれについて、全グループに関するビットに対応した局所場が更新される。
(S88)各レプリカにおいてビット全体についての1回の試行が行われるまで、ステップS82,S83a~S87a,S83b~S87b,S83c~S87c,S83d~S87dの処理が繰り返される。各レプリカにおいてビット全体についての1回の試行が行われると、ループ処理を抜けて、ステップS89の処理が行われる。
(S89)全体制御部30は、探索終了であるか否かを判定する。全体制御部30は、所定の探索終了条件が満たされた場合、探索終了であると判定する。たとえば、全体制御部30は、イタレーション回数が所定回数に達した場合、探索終了であると判定する。探索終了と判定された場合、FPGA28aは処理を終了する。探索終了でないと判定された場合、ステップS81からの処理が繰り返される。
なお、図10~図15に示した処理の順序は一例であって、適宜処理の順序を入れ替えてもよい。たとえば、ステップS42,S43の処理の前に、ステップS44,S45の処理を行ってもよい。
以上のような第2の実施の形態のデータ処理装置20によれば、部分並列試行の並列試行ビット数Pを、探索状況を示す探索情報に基づいて変更する。これにより、問題の特徴が反映される探索状況に応じた並列試行ビット数Pの設定が可能になり、1ビットを変化させるための演算量が適正化され、大規模問題に対する求解性能を向上できる。
また、演算量の適正化以外にも、上記のように並列試行ビット数Pを変更することで、あるビットが反転した場合に、次にそのビットが更新候補となるまでの期間を調整できる。これにより、そのビットが反転することで、状態が局所解から脱出したときに、再度そのビットが反転して再び状態が局所解に拘束されてしまう、というような状況を避けることができる。
さらに、第2の実施の形態のデータ処理装置20は、それぞれ1または複数のモジュールを含むn個のグループが、単位処理期間(1ステップ期間)ごとに、複数のレプリカのうちのn個分ずつに対して、並列部分試行を並列に行う。各部分並列試行を行うグループ間では、1つのグループで、あるレプリカに対する並列試行ビット数Pに係る更新処理(h更新や状態ベクトルの更新)が完了するまで、他のグループでは、そのレプリカに対する部分並列試行の処理を開始しないように制御される。データ処理装置20は、当該レプリカに対する更新処理が完了するまで別のグループが他のレプリカの処理をするようにパイプラインの処理タイミングをずらす。これにより、並列試行ビット数Pが可変の場合でも、MCMC法の逐次処理の原則を守りながら、演算リソースを有効に活用でき、比較的大規模な問題に対する求解性能を向上させることができる。
なお、第2の実施の形態では、一例として、グループ数を4つとしたが、グループ数は4以外の複数の数でもよい。また、レプリカ数は16以外の数であってもよい。また、各モジュールが扱うビット数をKとしたが、各モジュールにおいてKは異なる値であってもよい。
また、データ処理装置20における各レプリカに対する処理は、上記の例のようにFPGA28aにより実行されてもよいし、CPU21やGPU24などの他の演算器により実行されてもよい。FPGA28aやCPU21などの演算器は、データ処理装置20における処理部の一例である。また、複数のレプリカを保持する記憶部は、前述のようにメモリ28bやレジスタにより実現されてもよいし、RAM22により実現されてもよい。更に、アクセラレータカード28も「データ処理装置」の一例であるといえる。
なお、第1の実施の形態の情報処理は、処理部12にプログラムを実行させることで実現されてもよい。また、第2の実施の形態の情報処理は、CPU21にプログラムを実行させることで実現されてもよい。プログラムは、コンピュータ読み取り可能な記録媒体103に記録できる。
たとえば、プログラムを記録した記録媒体103を配布することで、プログラムを流通させることができる。また、プログラムを他のコンピュータに格納しておき、ネットワーク経由でプログラムを配布してもよい。コンピュータは、たとえば、記録媒体103に記録されたプログラムまたは他のコンピュータから受信したプログラムを、RAM22やHDD23などの記憶装置に格納し(インストールし)、当該記憶装置からプログラムを読み込んで実行してもよい。
以上、実施の形態に基づき、本発明のプログラム、データ処理装置及びデータ処理方法の一観点について説明してきたが、これらは一例にすぎず、上記の記載に限定されるものではない。
10 データ処理装置
11 記憶部
12 処理部

Claims (10)

  1. 複数の状態変数を含むエネルギー関数で表される組合せ最適化問題の解の探索を行う処理をコンピュータに実行させるプログラムであって、
    前記コンピュータに、
    前記複数の状態変数から選択される複数の第1状態変数について、前記複数の第1状態変数の各々の値の変化を受け入れるか否かの判定を並列に行い、前記値の変化を受け入れると判定された何れかの状態変数の前記値を変化させる処理を、選択される前記複数の第1状態変数を変更しつつ行うことで、前記解の探索を行う探索処理を行い、
    前記探索処理の探索状況または他の組合せ最適化問題の探索記録を示す探索情報に基づいて、選択される前記複数の第1状態変数の数を特定し、前記探索処理を繰り返す、
    処理を実行させるプログラム。
  2. 前記探索情報は、前記複数の第1状態変数のうち、前記値の変化を受け入れると判定された第2状態変数の数の、第1の期間における第1の累計値を含む、請求項1に記載のプログラム。
  3. 前記第1の累計値に基づいて、前記第2状態変数の数の、前記第1の期間における第1の平均値を計算し、
    前記第1の平均値が、第1の閾値よりも大きい場合、前記複数の第1状態変数の数を減少させ、
    前記第1の平均値が、前記第1の閾値よりも小さい第2の閾値よりも小さい場合、前記複数の第1状態変数の数を増加させる、
    処理を前記コンピュータに実行させる請求項2に記載のプログラム。
  4. 前記探索情報は、前記複数の第1状態変数のうち、前記値が変化した第3状態変数の数の、第2の期間における第2の累計値を含む、請求項1乃至3の何れか一項に記載のプログラム。
  5. 前記第2の累計値に基づいて、前記第2の期間における、前記第3状態変数の発生率を計算し、
    前記発生率が、第3の閾値よりも大きい場合、前記複数の第1状態変数の数を減少させ、
    前記発生率が、前記第3の閾値よりも小さい第4の閾値よりも小さい場合、前記複数の第1状態変数の数を増加させる、
    処理を前記コンピュータに実行させる請求項4に記載のプログラム。
  6. 前記探索情報は、前記複数の状態変数による状態ベクトルの、第3の期間における、ハミング距離で表される移動量を含む、請求項1乃至5の何れか一項に記載にプログラム。
  7. 前記移動量に基づいて、前記第3の期間における、前記移動量の第2の平均値を計算し、
    前記第2の平均値が、第5の閾値よりも大きく、かつ、前記第3の期間の前記探索処理において、前記エネルギー関数の最小値が更新されない場合、前記複数の第1状態変数の数を減少させ、
    前記第2の平均値が、前記第5の閾値よりも小さい第6の閾値よりも小さく、かつ、前記最小値が更新されない場合、前記複数の第1状態変数の数を増加させる、
    処理を前記コンピュータに実行させる請求項6に記載のプログラム。
  8. 複数の状態変数を含むエネルギー関数で表される組合せ最適化問題の解の探索を行うデータ処理装置であって、
    前記複数の状態変数から選択される複数の第1状態変数について、前記複数の第1状態変数の各々の値の変化を受け入れるか否かの判定を並列に行い、前記値の変化を受け入れると判定された何れかの状態変数の前記値を変化させる処理を、選択される前記複数の第1状態変数を変更しつつ行うことで、前記解の探索を行う探索処理を行い、前記探索処理の探索状況または他の組合せ最適化問題の探索記録を示す探索情報に基づいて、選択される前記複数の第1状態変数の数を特定し、前記探索処理を繰り返す処理部と、
    前記探索情報を記憶する記憶部と、
    を有するデータ処理装置。
  9. 前記処理部は、それぞれ1または複数のモジュールを含むn個(nは2以上の整数)のグループに、それぞれがグループ化されるM個(Mは2以上の整数)のモジュールと、セレクタとを有し、
    前記n個のグループは、単位処理期間ごとに、それぞれが前記複数の状態変数を示す複数のレプリカのうちのn個分ずつ、前記複数の第1状態変数についての前記判定を並列に行い、
    前記セレクタは、前記判定によって前記値の変化を受け入れると判定された何れかの状態変数を、前記n個のグループのそれぞれについて並列に選択し、
    前記処理部は、前記n個のグループのうちの第1グループにおいて、前記複数のレプリカの1つである第1レプリカのうち、前記セレクタにより選択された状態変数の値を変化させる更新処理が終わるまで、前記n個のグループのうちの前記第1グループ以外のグループにより、前記第1レプリカの処理が開始されないように制御する、
    請求項8に記載のデータ処理装置。
  10. 複数の状態変数を含むエネルギー関数で表される組合せ最適化問題の解の探索を行うデータ処理方法であって、データ処理装置が、
    前記複数の状態変数から選択される複数の第1状態変数について、前記複数の第1状態変数の各々の値の変化を受け入れるか否かの判定を並列に行い、前記値の変化を受け入れると判定された何れかの状態変数の前記値を変化させる処理を、選択される前記複数の第1状態変数を変更しつつ行うことで、前記解の探索を行う探索処理を行い、
    前記探索処理の探索状況または他の組合せ最適化問題の探索記録を示す探索情報に基づいて、選択される前記複数の第1状態変数の数を特定し、前記探索処理を繰り返す、
    データ処理方法。
JP2022026770A 2022-02-24 2022-02-24 プログラム、データ処理装置及びデータ処理方法 Pending JP2023122981A (ja)

Priority Applications (4)

Application Number Priority Date Filing Date Title
JP2022026770A JP2023122981A (ja) 2022-02-24 2022-02-24 プログラム、データ処理装置及びデータ処理方法
US17/980,586 US20230267165A1 (en) 2022-02-24 2022-11-04 Computer-readable recording medium storing data processing program, data processing device, and data processing method
EP22206928.8A EP4235518A1 (en) 2022-02-24 2022-11-11 Data processing program, data processing device, and data processing method
CN202211481103.5A CN116644808A (zh) 2022-02-24 2022-11-24 计算机可读记录介质、数据处理装置和数据处理方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2022026770A JP2023122981A (ja) 2022-02-24 2022-02-24 プログラム、データ処理装置及びデータ処理方法

Publications (1)

Publication Number Publication Date
JP2023122981A true JP2023122981A (ja) 2023-09-05

Family

ID=84331769

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2022026770A Pending JP2023122981A (ja) 2022-02-24 2022-02-24 プログラム、データ処理装置及びデータ処理方法

Country Status (4)

Country Link
US (1) US20230267165A1 (ja)
EP (1) EP4235518A1 (ja)
JP (1) JP2023122981A (ja)
CN (1) CN116644808A (ja)

Family Cites Families (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP7063211B2 (ja) 2018-09-19 2022-05-09 富士通株式会社 最適化問題演算プログラム、最適化問題演算方法および最適化問題演算装置
JP7239826B2 (ja) * 2019-06-18 2023-03-15 富士通株式会社 サンプリング装置およびサンプリング方法
JP7248907B2 (ja) 2019-08-14 2023-03-30 富士通株式会社 最適化装置および最適化装置の制御方法
JP7417074B2 (ja) 2020-02-19 2024-01-18 富士通株式会社 最適化装置、最適化方法及び最適化装置の制御プログラム

Also Published As

Publication number Publication date
EP4235518A1 (en) 2023-08-30
US20230267165A1 (en) 2023-08-24
CN116644808A (zh) 2023-08-25

Similar Documents

Publication Publication Date Title
JP7206476B2 (ja) 最適化装置、最適化装置の制御方法及び最適化装置の制御プログラム
JP7007585B2 (ja) 最適化装置、最適化装置の制御方法及び最適化装置の制御プログラム
US20190391807A1 (en) Computer-readable recording medium storing optimization problem computing program and optimization problem computing system
JP7239826B2 (ja) サンプリング装置およびサンプリング方法
US11631006B2 (en) Optimization device and control method of optimization device
US20200090051A1 (en) Optimization problem operation method and apparatus
US20210256090A1 (en) Optimization apparatus and optimization method
US11199884B2 (en) Optimization device and method of controlling optimization device utilizing a spin bit
JP2021033657A (ja) 組合せ最適化装置、組合せ最適化方法および組合せ最適化プログラム
CA3188066A1 (en) Methods and systems for hyperparameter tuning and benchmarking
JP7181454B2 (ja) 最適化装置、最適化装置の制御方法および最適化装置の制御プログラム
JP2022015503A (ja) 情報処理システム、情報処理方法及びプログラム
JP7219402B2 (ja) 最適化装置、最適化装置の制御方法及び最適化装置の制御プログラム
JP2023122981A (ja) プログラム、データ処理装置及びデータ処理方法
CN111985631B (zh) 信息处理设备、信息处理方法及计算机可读记录介质
US20230081944A1 (en) Data processing apparatus, data processing method, and storage medium
JP2022094510A (ja) 最適化プログラム、最適化方法及び情報処理装置
JP2021144443A (ja) 情報処理システム、情報処理方法およびプログラム
US20240135151A1 (en) Data processing device, data processing method, and computer-readable recording medium storing data processing program
JP2023149806A (ja) 情報処理装置、情報処理方法およびプログラム
EP4361898A2 (en) Data processing device, data processing method, and data processing program
US20240111833A1 (en) Data processing apparatus and data processing method
US20230169386A1 (en) Information processing apparatus, information processing method, and computer-readable recording medium storing program of searching for parameter
US20220092380A1 (en) Optimization device, optimization method, and computer-readable recording medium storing optimization program
JP2024030713A (ja) 温度調整プログラム、データ処理装置及びデータ処理方法