(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公開特許公報(A)
(11)【公開番号】P2024062514
(43)【公開日】2024-05-10
(54)【発明の名称】データ処理装置、データ処理方法およびプログラム
(51)【国際特許分類】
G06N 99/00 20190101AFI20240501BHJP
【FI】
G06N99/00 180
【審査請求】未請求
【請求項の数】7
【出願形態】OL
(21)【出願番号】P 2022170388
(22)【出願日】2022-10-25
(71)【出願人】
【識別番号】000005223
【氏名又は名称】富士通株式会社
(74)【代理人】
【識別番号】110002918
【氏名又は名称】弁理士法人扶桑国際特許事務所
(72)【発明者】
【氏名】渡部 康弘
(57)【要約】
【課題】探索対象の状態変数のグループの切り替えを効率的に行う。
【解決手段】処理部12は、イジング問題の状態変数全体を分割した複数のグループを切り替えて解の探索を行う。処理部12は、探索対象を第1グループに切り替える際、変化情報31を基に、第1グループに対する前回の探索後に他グループの探索により値が変化した状態変数と第1グループに含まれる複数の第1状態変数それぞれとのペアに対応する第1重み係数を記憶装置20から記憶部11に読み出し、第1重み係数を基に第1状態変数ごとの局所場を更新する。処理部12は、第1状態変数のペアに対応する第2重み係数を記憶装置20から記憶部11に読み出し、第2重み係数と第1状態変数ごとの局所場とを用いて第1グループの探索を実行する。処理部12は、当該探索を終了すると、今回の探索による第1状態変数ごとの値の変化の有無に応じて変化情報31を更新し、次のグループに切り替える。
【選択図】
図1
【特許請求の範囲】
【請求項1】
記憶部と、
複数の状態変数を含むイジングモデルで表される問題の解の探索を、前記複数の状態変数を分割した複数のグループそれぞれを切り替えて行う処理部とを有し、
前記処理部は、
探索対象を前記複数のグループのうちの第1グループに切り替える際に、
前記第1グループに対する前回の前記探索後に前記第1グループ以外の他のグループに対する前記探索により値が変化した状態変数を示す変化情報に基づいて、当該状態変数と前記第1グループに属する複数の第1状態変数それぞれとのペアに対応する第1重み係数を、前記複数の状態変数に関する重み係数の全体を記憶する記憶装置から読み出し、読み出した前記第1重み係数を前記記憶部に格納し、
前記記憶部に記憶された前記第1重み係数に基づいて、前記複数の第1状態変数それぞれの局所場を更新し、
前記複数の第1状態変数における前記第1状態変数のペアに対応する第2重み係数を前記記憶装置から読み出し、読み出した前記第2重み係数を前記記憶部に格納し、
前記記憶部に記憶された前記第2重み係数と前記複数の第1状態変数それぞれの前記局所場とを用いて、前記第1グループに対する前記探索を実行し、
前記第1グループに対する前記探索を終了すると、
今回の前記探索による前記複数の第1状態変数それぞれの値の変化の有無に応じて前記変化情報を更新し、探索対象を次のグループに切り替える、
データ処理装置。
【請求項2】
前記第1グループおよび前記第1グループの直前に前記探索が行われた第2グループそれぞれに属する一部の状態変数は重複しており、
前記処理部は、前記第2重み係数を前記記憶部に格納すると、前記記憶部に記憶された前記第2重み係数と前記第2グループに対する直前の前記探索での前記一部の状態変数に含まれる前記状態変数の値の変化とに基づいて、前記第1グループのうち前記第2グループと重複しない他の一部の状態変数の前記局所場を更新する、
請求項1記載のデータ処理装置。
【請求項3】
前記処理部は、次の探索対象のグループを所定順序で、または、ランダムに選択する、
請求項1記載のデータ処理装置。
【請求項4】
前記記憶装置は、前記変化情報と前記複数の状態変数それぞれの前記局所場と前記第1グループに対する前回の前記探索後の前記複数の状態変数の値を示すステート情報とを記憶し、
前記処理部は、
前記第1グループに対する前記探索を行う際に、前記記憶装置から前記変化情報と前記複数の第1状態変数それぞれの前記局所場と前記ステート情報とを前記記憶部に読み出し、前記変化情報および前記ステート情報から特定される、前記他のグループの前記状態変数の値の変化方向と前記第1重み係数とに基づいて、前記複数の第1状態変数それぞれの前記局所場を更新し、
前記第1グループに対する前記探索を終了すると、今回の前記探索による前記複数の第1状態変数それぞれの値の変化の有無に応じて前記記憶装置に記憶される前記変化情報を更新し、今回の前記探索後の前記複数の第1状態変数それぞれの前記局所場と、今回の前記探索後の前記ステート情報とを前記記憶装置に格納する、
請求項1記載のデータ処理装置。
【請求項5】
前記処理部は、各々が前記複数の状態変数を示す複数のレプリカに対して前記第1グループに対する前記探索を行う場合に、前記複数のレプリカそれぞれの前記変化情報の論理和に基づいて、前記記憶装置から読み出す前記第1重み係数を特定する、
請求項1記載のデータ処理装置。
【請求項6】
データ処理装置が、
複数の状態変数を含むイジングモデルで表される問題の解の探索を、前記複数の状態変数を分割した複数のグループそれぞれを切り替えて行う場合において、探索対象を前記複数のグループのうちの第1グループに切り替える際に、
前記第1グループに対する前回の前記探索後に前記第1グループ以外の他のグループに対する前記探索により値が変化した状態変数を示す変化情報に基づいて、当該状態変数と前記第1グループに属する複数の第1状態変数それぞれとのペアに対応する第1重み係数を、前記複数の状態変数に関する重み係数の全体を記憶する記憶装置から読み出し、読み出した前記第1重み係数を記憶部に格納し、
前記記憶部に記憶された前記第1重み係数に基づいて、前記複数の第1状態変数それぞれの局所場を更新し、
前記複数の第1状態変数における前記第1状態変数のペアに対応する第2重み係数を前記記憶装置から読み出し、読み出した前記第2重み係数を前記記憶部に格納し、
前記記憶部に記憶された前記第2重み係数と前記複数の第1状態変数それぞれの前記局所場とを用いて、前記第1グループに対する前記探索を実行し、
前記第1グループに対する前記探索を終了すると、
今回の前記探索による前記複数の第1状態変数それぞれの値の変化の有無に応じて前記変化情報を更新し、探索対象を次のグループに切り替える、
データ処理方法。
【請求項7】
コンピュータに、
複数の状態変数を含むイジングモデルで表される問題の解の探索を、前記複数の状態変数を分割した複数のグループそれぞれを切り替えて行う場合において、探索対象を前記複数のグループのうちの第1グループに切り替える際に、
前記第1グループに対する前回の前記探索後に前記第1グループ以外の他のグループに対する前記探索により値が変化した状態変数を示す変化情報に基づいて、当該状態変数と前記第1グループに属する複数の第1状態変数それぞれとのペアに対応する第1重み係数を、前記複数の状態変数に関する重み係数の全体を記憶する記憶装置から読み出し、読み出した前記第1重み係数を記憶部に格納し、
前記記憶部に記憶された前記第1重み係数に基づいて、前記複数の第1状態変数それぞれの局所場を更新し、
前記複数の第1状態変数における前記第1状態変数のペアに対応する第2重み係数を前記記憶装置から読み出し、読み出した前記第2重み係数を前記記憶部に格納し、
前記記憶部に記憶された前記第2重み係数と前記複数の第1状態変数それぞれの前記局所場とを用いて、前記第1グループに対する前記探索を実行し、
前記第1グループに対する前記探索を終了すると、
今回の前記探索による前記複数の第1状態変数それぞれの値の変化の有無に応じて前記変化情報を更新し、探索対象を次のグループに切り替える、
処理を実行させるプログラム。
【発明の詳細な説明】
【技術分野】
【0001】
本発明はデータ処理装置、データ処理方法およびプログラムに関する。
【背景技術】
【0002】
ノイマン型コンピュータが不得意とする多変数の組合せ最適化問題を、磁性体のスピンの振る舞いを表すモデルであるイジングモデルに置き換えて計算するイジングマシンがある。イジングマシンはボルツマンマシンとも呼ばれる。イジングモデルに置き換えられた問題を実用的な時間で解く手法には、マルコフ連鎖モンテカルロ(MCMC:Markov Chain Monte Carlo)法に基づく、シミュレーテッドアニーリング(SA:Simulated Annealing)法やレプリカ交換法などがある。
【0003】
組合せ最適化問題は、複数の状態変数を含むエネルギー関数により定式化される。例えば、イジングマシンは、MCMC法を用いて状態変数の値を変化させることによる状態遷移を繰り返し試行することで、エネルギー関数の値が最小となるイジングモデルの基底状態を探索する。基底状態は組合せ最適化問題の最適解に対応する。
【0004】
例えば、組合せ最適化問題を複数の部分問題に分割して解き、部分問題の解に基づいて全体の解を求める最適化装置の提案がある。提案の最適化装置は、複数の部分問題のうち、何れかの部分問題についての解を、それぞれが探索する複数のイジング装置を有する。
【0005】
また、複数のイジング装置を有する情報処理装置の提案もある。この提案では、イジング装置は、1ビットに関する処理を行う複数のニューロン回路を有し、ルータを介して得た他のイジング装置のニューロン状態を自身のニューロン回路に反映する。
【0006】
また、ニューロン回路において、ニューロン間の結合の強さを示す重み係数の全体のうち、対象ニューロンと結合する結合先ニューロンとの間の重み係数だけを保持することで、ニューロン回路の記憶部の容量を削減する最適化装置の提案もある。
【0007】
なお、量子ビットを含むアナログプロセッサが出力したサンプルに対し、逆方向のアニーリングスケジュールでSAを実行し、その履歴を用いて、重要度サンプリング(importance sampling)に用いるサンプルの重みを計算する計算システムの提案がある。
【先行技術文献】
【特許文献】
【0008】
【特許文献1】特開2021-131695号公報
【特許文献2】特開2017-219948号公報
【特許文献3】特開2020-194442号公報
【特許文献4】米国特許出願公開第2017/0116159号明細書
【発明の概要】
【発明が解決しようとする課題】
【0009】
イジングモデルに置き換えられた問題の求解では、各状態変数間の相互作用の大きさを表す重み係数が用いられる。問題規模の増大に応じて状態変数の数が増えると、重み係数の数も増加する。このため、求解を実行する演算器によりキャッシュとして用いられる記憶部に全ての重み係数を記憶しきれない可能性がある。
【0010】
問題を複数の部分問題に分割し、状態変数全体のうち、部分問題に対応する状態変数のグループを対象に求解を行うことで、当該記憶部に保持される重み係数が削減され得る。そこで、例えば大容量の記憶装置に重み係数の全体を記憶し、当該記憶装置からキャッシュ用の記憶部に部分問題の情報を転送し、転送する部分問題を適宜入れ替えて計算を行う方法が考えられる。しかし、この方法では部分問題の入れ替えに伴って生じる、記憶部への重み係数の読み込みやエネルギー関数の値の変化量の計算に用いられる局所場の更新に時間がかかる。
【0011】
1つの側面では、本発明は、探索対象の状態変数のグループの切り替えを効率的に行うことを目的とする。
【課題を解決するための手段】
【0012】
1つの態様では、データ処理装置が提供される。データ処理装置は、記憶部と処理部とを有する。処理部は、複数の状態変数を含むイジングモデルで表される問題の解の探索を、複数の状態変数を分割した複数のグループそれぞれを切り替えて行う。処理部は、探索対象を複数のグループのうちの第1グループに切り替える際に、第1グループに対する前回の探索後に第1グループ以外の他のグループに対する探索により値が変化した状態変数を示す変化情報に基づいて、当該状態変数と第1グループに属する複数の第1状態変数それぞれとのペアに対応する第1重み係数を、複数の状態変数に関する重み係数の全体を記憶する記憶装置から読み出し、読み出した第1重み係数を記憶部に格納する。処理部は、記憶部に記憶された第1重み係数に基づいて、複数の第1状態変数それぞれの局所場を更新する。処理部は、複数の第1状態変数における第1状態変数のペアに対応する第2重み係数を記憶装置から読み出し、読み出した第2重み係数を記憶部に格納する。処理部は、記憶部に記憶された第2重み係数と複数の第1状態変数それぞれの局所場とを用いて、第1グループに対する探索を実行する。処理部は、第1グループに対する探索を終了すると、今回の探索による複数の第1状態変数それぞれの値の変化の有無に応じて変化情報を更新し、探索対象を次のグループに切り替える。
【0013】
また、1つの態様では、データ処理方法が提供される。また、1つの態様では、コンピュータが実行するプログラムが提供される。
【発明の効果】
【0014】
1つの側面では、探索対象の状態変数のグループの切り替えを効率的に行うことができる。
【図面の簡単な説明】
【0015】
【
図1】第1の実施の形態のデータ処理装置を説明する図である。
【
図2】第2の実施の形態のイジングマシンのハードウェア例を示す図である。
【
図4】イジングマシンによる探索例を示す図である。
【
図5】読み込み対象の重み係数の第1の例を示す図である。
【
図6】読み込み対象の重み係数の第2の例を示す図である。
【
図7】イジングマシンの探索処理の例を示すフローチャートである。
【
図8】局所場更新処理の例を示すフローチャートである。
【
図9】ウィンドウ内探索処理の例を示すフローチャートである。
【
図10】ステート変化検出処理の例を示すフローチャートである。
【
図11】2つのウィンドウがオーバーラップする例を示す図である。
【
図12】ウィンドウをランダムに切り替える例を示す図である。
【
図13】ウィンドウをランダムに切り替える例を示す図である。
【
図14】ランダム切り替えに用いられる状態フラグの例を示す図である。
【
図15】オーバーラップのない順スライディングの例を示す図である。
【
図16】オーバーラップのある順スライディングの例を示す図である。
【
図18】複数のレプリカの局所場更新のパイプライン処理の例を示す図である。
【
図19】DRAM上の重み係数のメモリマップの例を示す図である。
【発明を実施するための形態】
【0016】
以下、本実施の形態について図面を参照して説明する。
[第1の実施の形態]
第1の実施の形態を説明する。
【0017】
図1は、第1の実施の形態のデータ処理装置を説明する図である。
データ処理装置10は、組合せ最適化問題に対する解を、MCMC法を用いて探索し、探索した解を出力する。例えば、データ処理装置10は、MCMC法を基にしたSA法、パラレルテンパリング(PT:Parallel Tempering)法などを解の探索に用いる。PT法は、レプリカ交換法とも呼ばれる。データ処理装置10は、記憶部11および処理部12を有する。また、データ処理装置10は、記憶装置20に接続される。
【0018】
記憶部11は、処理部12の演算に用いられるデータを保持するキャッシュメモリである。記憶部11は、例えばSRAM(Static Random Access Memory)である。記憶部11は、レジスタなどの電子回路を含んでもよい。記憶部11は、処理部12の内部に存在する内部メモリでもよい。処理部12は、例えばCPU(Central Processing Unit)、GPU(Graphics Processing Unit)、DSP(Digital Signal Processor)、ASIC(Application Specific Integrated Circuit)、FPGA(Field Programmable Gate Array)などのプロセッサである。処理部12は、プログラムを実行するプロセッサでもよい。
【0019】
記憶装置20は、データ処理装置10に接続され、データ処理装置10の処理に用いられるデータを記憶する。記憶装置20の記憶容量は、記憶部11の記憶容量よりも大きい。記憶装置20は、例えば(DRAM:Dynamic Random Access Memory)である。記憶装置20とデータ処理装置10とを接続するインタフェースには、例えばHBM2(High Bandwidth Memory)インタフェースなどが用いられる。
【0020】
ここで、組合せ最適化問題は、イジング型のエネルギー関数により定式化され、例えばエネルギー関数の値を最小化する問題に置き換えられる。エネルギー関数は、目的関数や評価関数などと呼ばれることもある。エネルギー関数は、複数の状態変数を含む。状態変数は、0または1の値を取るバイナリ変数である。状態変数はビットと言われてもよい。組合せ最適化問題の解は、複数の状態変数の値により表される。エネルギー関数の値を最小化する解は、イジングモデルの基底状態を表し、組合せ最適化問題の最適解に対応する。エネルギー関数の値は、単にエネルギーと言われる。
【0021】
イジング型のエネルギー関数は、式(1)で表される。
【0022】
【0023】
状態ベクトルxは、複数の状態変数を要素とし、イジングモデルの状態を表す。式(1)は、QUBO(Quadratic Unconstrained Binary Optimization)形式で定式化されたエネルギー関数である。なお、エネルギーを最大化する問題の場合には、エネルギー関数の符号を逆にすればよい。
【0024】
式(1)の右辺第1項は、全状態変数から選択可能な2つの状態変数の全組合せについて、漏れと重複なく、2つの状態変数の値と重み係数との積を積算したものである。添え字i,jは状態変数のインデックスである。xiは、i番目の状態変数である。xjは、j番目の状態変数である。Wijは、i番目の状態変数とj番目の状態変数との間の重み、または、結合の強さを示す重み係数である。Wij=Wjiであり、Wii=0である。
【0025】
式(1)の右辺第2項は、全状態変数の各々のバイアスと状態変数の値との積の総和を求めたものである。biは、i番目の状態変数に対するバイアスを示している。
状態変数xiの値が変化して1-xiとなると、状態変数xiの増加分は、Δxi=(1-xi)-xi=1-2xiと表せる。ある状態xから状態変数xiを反転させた近傍状態x(i)は、式(2)で表される。式(2)の添え字「Tr」は転置を示す。
【0026】
【0027】
エネルギー関数E(x)に対して、状態変数xiの変化に伴うエネルギーの変化量ΔEiは、式(3)で表される。
【0028】
【0029】
hiは局所場と呼ばれ、式(4)で表される。局所場は、ローカルフィールド(LF:Local Field)と言われることもある。
【0030】
【0031】
状態変数xjが変化したときの局所場hiの変化分Δhi
(j)は、式(5)で表される。
【0032】
【0033】
処理部12は、状態変数xjの値が変化したときに変化分Δhi
(j)をhiに加算することで、ビット反転後の状態に対応するhiを得る。状態変数xjの値の変化後の局所場hiは、式(6)で表される。
【0034】
【0035】
基底状態の探索において、エネルギー変化がΔEiとなる状態遷移、すなわち、状態変数xiの値の変化を許容するか否かを決定するためにメトロポリス法やギブス法が用いられる。具体的には、ある状態から当該状態よりもエネルギーの低い他の状態への遷移を探索する近傍探索において、エネルギーが下がる状態だけでなく、エネルギーが上がる状態への遷移が確率的に許容される。例えば、エネルギー変化ΔEの状態変数の値の変化を受け入れる確率Aは、式(7)で表される。
【0036】
【0037】
βは温度値T(T>0)の逆数(β=1/T)であり、逆温度と呼ばれる。min演算子は、引数のうちの最小値を取ることを示す。式(7)の右辺上側はメトロポリス法に相当する。式(7)の右辺下側はギブス法に相当する。処理部12は、あるインデックスiに関して0<u<1である一様乱数uとAとを比較し、u<Aであれば状態変数xiの値の変化を受入れ、状態変数xiの値を変化させる。処理部12は、u<Aでなければ状態変数xiの値の変化を受入れず、状態変数xiの値を変化させない。式(7)によれば、ΔEが大きい値であるほど、Aは小さくなる。また、βが小さい、すなわち、Tが大きいほど、ΔEが大きい状態遷移も許容され易くなる。
【0038】
処理部12は、複数の状態変数に対する並列試行により値を変化させる状態変数を決定することで、解探索を高速化し得る。例えば、処理部12は、複数の状態変数に対して並列にΔEを計算する。そして、処理部12は、式(7)を満たす状態変数の中から乱数などを用いて値を変化させる状態変数を選択する。処理部12は、選択した状態変数の値を変化させるとともに、当該変化に応じて他の状態変数の局所場を並列に更新する。
【0039】
ここで、組合せ最適化問題を部分問題に分割し、部分問題を切り替えてデータ処理装置10に求解を実行させることで、記憶部11により求解のために保持すべき重み係数のサイズを低減可能となり、大規模問題を処理できる。組合せ最適化問題に対応する重み係数の全体である重み係数情報21は、記憶装置20に保持される。全状態変数の数N(Nは2以上の整数)に対して、組合せ最適化問題のエネルギー関数は式(8)で表される。
【0040】
【0041】
一方、N個の状態変数のうちの一部である、i=1~K(K<N)の状態変数のグループを扱う部分問題のエネルギー関数は、式(9)のエネルギー関数E’(x)で定義される。
【0042】
【0043】
式(9)において、b’iおよびc’の各々は式(10)、式(11)のように表される。
【0044】
【0045】
【0046】
i=1~K(K<N)の状態変数のグループに対応する部分問題の解を探索する際、i=K+1~Nの状態変数の値は固定される。式(10)の右辺の第2項は、固定値とされた状態変数によるバイアス係数への寄与分を表す。式(11)の右辺の第2項及び第3項は、固定値とされた状態変数による定数への寄与分を表す。一例では、N個の状態変数がK個ずつn(nは2以上の整数)個のグループに分割される。1つのグループに属する状態変数の集合は、問題全体に対応する状態変数全体のうちのサブセットとなる。
【0047】
図1では一例として、n=4、すなわち、問題の状態変数全体を重複なく4分割する場合が例示されている。この場合、状態変数の全体は、グループ#0,#1,#2,#3に分割される。例えば、重み係数の全体は、W_00,W_10,W_20,W_30,W_01,W_11,W_21,W_31,W_02,W_12,W_22,W_32,W_03,W_13,W_23,W_33に分けられる。ここで、重み係数の符号のアンダースコア「_」の後の数値は、状態変数に関する次のインデックス範囲を示す。「0」は、1~Kである。「1」は、K+1~2Kである。「2」は、2K+1~3Kである。「3」は、3K+1~Nである。例えば、W_00は、重み係数Wの全体のうちの{W
ij}(1≦i≦K,1≦j≦K)の部分である。なお、問題全体を状態変数の重複ありで複数の部分問題に分割することもできる。
【0048】
このように、処理部12は、イジングモデルにより表される問題、すなわち、イジング問題を複数の部分問題に分割することで、探索対象の部分問題を切り替えて問題の解の探索を行える。探索対象の部分問題の切り替えは、探索対象の状態変数のグループの切り替えに相当する。例えば、処理部12は、探索対象を複数のグループのうちの第1グループに切り替える際に、次の処理を実行する。
【0049】
まず、処理部12は、変化情報31を取得する。変化情報31は、問題全体に対応する複数の状態変数のうち、第1グループに対する前回の探索後に他のグループに対する探索により値が変化した状態変数を示す。変化情報31は、記憶装置20に記憶されてもよいし、記憶部11に記憶されてもよい。
【0050】
例えば、第1グループがグループ#1である場合、変化情報31は、グループ#0,#2,#3に属する状態変数のうち、グループ#1に対する前回の探索後に値が変化した、他グループの状態変数を示す。なお、この場合、グループ#1は今回の探索対象の状態変数のグループに対応する。また、グループ#0,#2,#3はグループ#1以外の他のグループである。
【0051】
処理部12は、変化情報31に基づいて、第1グループの前回の探索後に値の変化があった、他のグループの状態変数と、第1グループに含まれる複数の第1状態変数それぞれとのペアに対応する第1重み係数を、記憶装置20から読み出し、記憶部11に格納する。
【0052】
例えば、処理部12は、今回探索対象とするグループ#1に関し、変化情報31に基づいて、重み係数W_01,W_21,W_31のうち、第1グループの前回の探索後に値が変化した他のグループの状態変数に関する第1重み係数のみを読み出す。
図1の変化情報31では、横方向がインデックスを示し、第1グループの前回の探索後に値が変化した、他のグループの状態変数に対応するインデックス位置に記載された縦の実線により、当該状態変数が示されている。
【0053】
処理部12は、記憶部11に記憶された第1重み係数に基づいて複数の第1状態変数それぞれの局所場を更新する。例えば、処理部12は、第1重み係数と第1グループに対する前回の探索後の複数の状態変数の値、すなわち、N個の全状態変数の値と変化情報31とに基づいて、式(6)により複数の第1状態変数それぞれの局所場を更新することができる。
【0054】
なお、処理部12は、第1グループに対応するステート情報32に基づいて、第1グループに対する前回の探索後の複数の状態変数の値を取得する。例えば、ステート情報32は、状態変数のグループごとに記憶装置20または記憶部11に記憶される。ステート情報32は、該当のグループに対する前回の探索後の状態変数全体の値を保持する。当該ステート情報32は、変化情報31とともに状態変数の値の変化方向、すなわち、0から1への変化か、1から0への変化かの特定に用いられる。ただし、記憶部11が全状態変数の最新の値を保持してもよく、その場合、処理部12は、全状態変数の最新の値と変化情報31とから前回探索時から値が変化した状態変数の変化方向を特定してもよい。
【0055】
また、各状態変数の局所場は、局所場情報33に保持される。局所場情報33は、記憶装置20または記憶部11に保持される。局所場情報33が記憶装置20に保持される場合、処理部12は、第1グループに含まれる複数の第1状態変数それぞれの局所場のみを、記憶装置20から読み込んで、記憶部11に格納すればよい。
【0056】
処理部12は、複数の第1状態変数における第1状態変数のペアに対応する第2重み係数を記憶装置20から読み出し、記憶部11に格納する。例えば、処理部12は、今回探索対象とするグループ#1の第1状態変数に対応する重み係数W_11を記憶装置20から記憶部11に読み込む。
【0057】
処理部12は、記憶部11に記憶された第2重み係数と複数の第1状態変数それぞれの局所場とを用いて、第1グループに対する探索を実行する。
そして、処理部12は、第1グループに対する探索を終了する。すると、処理部12は、今回の探索による複数の第1状態変数それぞれの値の変化の有無に応じて変化情報31を更新し、複数のグループのうちの次のグループに基づく探索を行う。例えば、変化情報31には、今回探索を行ったグループ#1に関して、第1状態変数ごとに今回探索により値が変化したか否かを示す情報が追加される。更新後の変化情報31は、第1グループに対する上記の処理と同様に、他のグループに対する探索前において、当該他のグループに属する状態変数の局所場の更新に用いられる。
【0058】
なお、処理部12は、例えば、第1グループに対する探索を終了すると、第1グループに対応するステート情報32を今回探索後の全状態変数の最新の値で更新し、記憶装置20に保存する。保存されたステート情報32は、次回第1グループに対する探索を行う際に使用される。また、局所場情報33が記憶装置20に保持される場合、処理部12は、第1グループに含まれる複数の第1状態変数それぞれの局所場を記憶装置20の局所場情報33に反映させて、局所場情報33を最新の状態に更新する。
【0059】
こうして、処理部12は、探索対象の状態変数のグループを切り替えながらSA法やレプリカ交換法による求解を所定期間実行し、探索で得られた、エネルギーが最も低い解を出力する。
【0060】
以上説明したようにデータ処理装置10によれば、複数の状態変数を含むイジングモデルで表される問題の解の探索が、複数の状態変数を分割した複数のグループそれぞれを切り替えて行われる。探索対象を複数のグループのうちの第1グループに切り替える際に、次の処理が実行される。第1グループに対する前回の探索後に第1グループ以外の他のグループに対する探索により値が変化した状態変数を示す変化情報31に基づいて、当該状態変数と第1グループに属する複数の第1状態変数それぞれとのペアに対応する第1重み係数が、複数の状態変数に関する重み係数の全体を記憶する記憶装置20から読み出される。読み出された第1重み係数が記憶部11に格納される。記憶部11に記憶された第1重み係数に基づいて、複数の第1状態変数それぞれの局所場が更新される。複数の第1状態変数における第1状態変数のペアに対応する第2重み係数が記憶装置20から読み出され、読み出された第2重み係数が記憶部11に格納される。記憶部11に記憶された第2重み係数と複数の第1状態変数それぞれの局所場とを用いて、第1グループに対する探索が実行される。第1グループに対する探索が終了すると、今回の探索による複数の第1状態変数それぞれの値の変化の有無に応じて変化情報31が更新され、探索対象が次のグループに切り替えられる。
【0061】
これにより、データ処理装置10は、探索対象の状態変数のグループの切り替えを効率的に行うことができる。例えば、データ処理装置10は、変化情報31に基づいて、記憶装置20から読み込む重み係数を、第1グループに対する前回の探索時から値が変化した、他のグループの状態変数に係る第1重み係数に絞れる。
【0062】
比較例の方法として、第1グループに属する複数の第1状態変数に係る重み係数の全部を記憶装置20から記憶部11へ読み込み、式(10)や式(11)を計算し直すことで部分問題の切り替えを行う方法も考えられる。しかし、比較例の方法では重み係数の読み込み量や読み込んだ重み係数による計算量が大きく、切り替え時のオーバーヘッドが大きい。
【0063】
これに対し、データ処理装置10によれば、変化情報31により読み込み対象の重み係数を絞り込むことで、記憶装置20から記憶部11への重み係数の読み込み量が低減される。また、記憶装置20から記憶部11への重み係数の読み込みにかかる時間が低減される。更に、データ処理装置10は、記憶部11に読み込んだ第1重み係数を用いて、式(6)により値が変化した、他のグループの状態変数の影響だけを第1状態変数の局所場に反映させればよい。このため、局所場の更新にかかる時間が低減される。こうして、探索対象の状態変数のグループの切り替え、すなわち、部分問題の切り替えが効率化される。
【0064】
部分問題の切り替え時のオーバーヘッドが低減されることで、データ処理装置10による求解性能が向上する。例えば、求解の時間を短縮できる。また、比較的短い時間でより良い解を得られる可能性を高められる。更に、記憶部11に要求される記憶容量を低減でき、比較的少ない記憶容量で求解を行える。
【0065】
[第2の実施の形態]
次に、第2の実施の形態を説明する。
図2は、第2の実施の形態のイジングマシンのハードウェア例を示す図である。
【0066】
イジングマシン100は、プロセッサ101、DRAM102および接続インタフェース103を有する。
プロセッサ101は、組合せ最適化問題の求解を実行する演算装置である。プロセッサ101は、例えばCPU、GPU、ASICおよびFPGAなどである。プロセッサ101は、第1の実施の形態の処理部12の一例である。プロセッサ101は、内部メモリ110を有する。
【0067】
内部メモリ110は、プロセッサ101におけるキャッシュメモリとして用いられる。内部メモリ110は、例えばSRAMである。内部メモリ110は、第1の実施の形態の記憶部11の一例である。
【0068】
DRAM102は、イジングマシン100の主記憶装置である。DRAM102は、内部メモリ110よりも大容量であり、求解に用いられる重み係数の全体などの情報を保持する。DRAM102は、第1の実施の形態の記憶装置20の一例である。
【0069】
接続インタフェース103は、プロセッサ101とDRAM102とを接続し、データの転送に用いられるインタフェースである。接続インタフェース103には、例えばHBM2インタフェースなどが用いられる。
【0070】
なお、イジングマシン100は第1の実施の形態のデータ処理装置10の一例である。
プロセッサ101は、組合せ最適問題を分割した複数の部分問題に基づいて、求解を実行する。この場合、例えばイジング型のエネルギー関数の式(8)に含まれるN個の状態変数は、K個ずつn個のグループに分割される。1つの部分問題は、状態変数の1つのグループに対応する。プロセッサ101は、部分問題を切り替えて、すなわち、探索対象グループを切り替えて、当該探索対象グループに対する解の探索を実行する。求解には、SA法やレプリカ交換法が用いられる。なお、状態変数のグループは、状態変数全体に対するサブセットであり、部分領域と言われてもよい。
【0071】
図3は、イジングマシンの機能例を示す図である。
イジングマシン100は、データ記憶部120、探索部130、全体制御部140、メモリ制御部150、データ転送制御部160およびステート変化検出部170を有する。データ記憶部120には、DRAM102の記憶領域が用いられる。
【0072】
プロセッサ101がASICやFPGAなどで実現される場合、探索部130、全体制御部140、メモリ制御部150、データ転送制御部160およびステート変化検出部170は、ASICやFPGAなどの電子回路によって実現される。プロセッサ101がGPUやCPUなどで実現される場合、これらの機能は、例えばDRAM102に記憶されたプログラムをCPUやGPUなどが実行することで実現されてもよい。
【0073】
データ記憶部120は、組合せ最適化問題の求解に用いられる重み係数の全体を記憶する。データ記憶部120は、エネルギー関数に含まれる全状態変数の局所場を示す局所場情報を記憶する。データ記憶部120は、状態変数のグループごとに、当該グループに基づく前回の探索後のステート情報を記憶する。ステート情報は、N個の状態変数の値を示す。データ記憶部120は、N個の状態変数それぞれについて、最新の探索による値の変化、すなわち、ビット変化の有無を示すビット変化情報を記憶する。例えば、ビット変化情報は状態変数のインデックスに対応するNビットの情報で表され、1が変化あり、0が変化なしを表す。
【0074】
探索部130は、SA法やレプリカ交換法を用いて組合せ最適化問題の解の探索を実行する。探索部130は、探索対象とする状態変数の複数のグループそれぞれを切り替えて、解の探索を行う。探索部130は、重み係数記憶部131、局所場保持部132、ステート保持部133、局所場更新部134、ΔE算出部135および選択部136を有する。重み係数記憶部131、局所場保持部132およびステート保持部133には、内部メモリ110の記憶領域が用いられる。
【0075】
重み係数記憶部131は、データ記憶部120に記憶される重み係数全体のうちの一部の重み係数を記憶する。重み係数記憶部131に記憶される重み係数は、今回のグループに属する各状態変数の局所場の更新に用いられる重み係数である。
【0076】
局所場保持部132は、データ記憶部120から読み出された、今回のグループに属する各状態変数の局所場を保持する。
ステート保持部133は、データ記憶部120から読み出されたステート情報を保持する。ステート保持部133に保持されるステート情報は、局所場更新部134による各状態変数の局所場更新に応じて最新の状態に更新される。
【0077】
局所場更新部134は、重み係数記憶部131に記憶される重み係数に基づいて、探索対象のグループに属する各状態変数の局所場を式(6)により更新する。局所場更新部134による局所場の更新は、次に探索対象となる当該グループに対する探索を行う直前、および、当該探索中に実行される。局所場更新部134は、各状態変数の局所場の更新を並列に実行可能である。
【0078】
次のグループに対する探索を行う直前の局所場の更新では、局所場更新部134は、他のグループに対応する状態変数のうち、前回探索後から値の変化があった状態変数による影響を、次のグループに属する状態変数の局所場に反映させる。前回探索後とは、次のグループに対する前回の探索の後を示す。値の変化があった他のグループの状態変数は、データ記憶部120から取得されるビット変化情報により特定される。また、値の変化があった他のグループの状態変数の値の変化方向、すなわち、0から1への変化か、1から0への変化かは、ステート保持部133に記憶される、前回探索後のステート情報とビット変化情報とにより特定される。
【0079】
探索対象のグループに対する解の探索中の局所場の更新では、局所場更新部134は、当該グループに属する状態変数の値の変化に応じて、当該グループに属する各状態変数の局所場を更新する。
【0080】
ΔE算出部135は、探索が開始されると、各状態変数の値の変化に応じたエネルギー変化ΔEを、式(3)に基づいて並列に算出し、選択部136に出力する。
選択部136は、ΔE算出部135から取得した各状態変数のエネルギー変化ΔEと、式(7)とに基づいて、値の変化が許容される状態変数を選択する。値の変化が許容される状態変数が複数存在する場合、選択部136は、例えば乱数などを用いて、その中から1つをランダムに選択する。選択部136により選択された状態変数は、フリップビットと言われる。
【0081】
選択部136は、フリップビットの情報を重み係数記憶部131に出力し、当該フリップビットに対応する重み係数を重み係数記憶部131から局所場更新部134に出力させる。これにより、局所場更新部134により各状態変数の局所場が更新される。また、選択部136は、フリップビットの情報によりステートを更新する。例えば、選択部136は、ステート保持部133に保持される当該ステートを最新の状態に更新する。
【0082】
全体制御部140は、探索部130、メモリ制御部150およびデータ転送制御部160を制御する。例えば、全体制御部140は、部分問題の切り替え、すなわち、探索対象の状態変数のグループの切り替えに伴うデータ記憶部120と探索部130との間のデータ転送や、探索部130による解の探索を制御する。
【0083】
メモリ制御部150は、全体制御部140の制御に基づいて、データ記憶部120から重み係数記憶部131への重み係数の転送を制御する。また、メモリ制御部150は、全体制御部140の制御に基づいて、データ記憶部120と局所場保持部132との間の局所場の転送や、データ記憶部120とステート保持部133との間のステート情報の転送を制御する。
【0084】
データ転送制御部160は、全体制御部140およびメモリ制御部150を介してデータ記憶部120からビット変化情報を取得し、ビット変化情報に基づいてデータ記憶部120から読み出す重み係数を特定する。データ転送制御部160は、全体制御部140を介して、読み出し対象の重み係数をメモリ制御部150に指示し、読み出し対象の重み係数を重み係数記憶部131に読み込ませる。
【0085】
データ転送制御部160は、次の探索対象のグループに対し、当該グループに対する前回の探索後に値が変化した状態変数を検出する。そして、データ転送制御部160は、局所場更新に使用する重み係数として、検出した状態変数に対応する重み係数のみをDRAM102のデータ記憶部120から読み込むように制御する。これにより、DRAM102とプロセッサ101との間の重み係数のデータ転送量を削減できる。例えば、値が変化した状態変数が10%であれば、データ転送制御部160は、10%分の重み係数データだけをDRAM102から読み込むようにすればよい。
【0086】
こうして読み込まれた重み係数は、次のグループの探索前の局所場更新にのみ使用されるので、局所場更新が終了すれば内部メモリ110から消去されてよい。なお、当該局所場更新に使用する重み係数が一度に内部メモリ110の重み係数記憶部131に配置できない場合もある。その場合、一度に配置できる量を格納した後に局所場更新の処理が行われ、当該局所場更新が終了した後に、残りの重み係数が重み係数記憶部131に上書きされて、局所場更新の続きを行うという処理が繰り返される。
【0087】
その後、データ転送制御部160は、次の探索に用いる局所場やステート情報や重み係数の読み出しを、全体制御部140を介してメモリ制御部150に指示する。次の探索用の重み係数に関して、探索に必要な重み係数の全体が重み係数記憶部131に読み込まれる。
【0088】
また、今回のグループでの探索が終了すると、データ転送制御部160は、探索後の当該グループに対応する局所場の情報を局所場保持部132からデータ記憶部120に転送するようメモリ制御部150に指示する。同様にデータ転送制御部160は、当該探索後のステート情報をステート保持部133からデータ記憶部120に転送するようメモリ制御部150に指示する。
【0089】
更に、データ転送制御部160は、今回のグループでの探索が終了すると、今回の探索による各状態変数の値の変化の有無の情報をステート変化検出部170から取得し、取得した情報に基づいてデータ記憶部120に保持されるビット変化情報の更新を行う。データ転送制御部160によるビット変化情報の更新は、メモリ制御部150を介して行われる。
【0090】
ステート変化検出部170は、今回のグループに係る探索開始時のステート(開始ステート)と、当該グループに係る探索終了時のステート(終了ステート)とを比較し、今回探索による各状態変数の値の変化の有無を特定する。ステート変化検出部170は、各状態変数の値の変化の有無を示す情報をデータ転送制御部160に通知する。
【0091】
図4は、イジングマシンによる探索例を示す図である。
重み係数行列200は、組合せ最適化問題に対応する重み係数の全体である。重み係数行列200は、DRAM102上のデータ記憶部120に記憶される。
図4の例では、状態変数の全体が8個の領域に分割されている。重み係数行列200の行方向および列方向に付された数字は、状態変数の領域を識別する領域番号を示す。各領域に含まれる状態変数の数は同じである。状態変数は、インデックス順に#0~#7の領域番号に区分されている。
【0092】
状態変数のグループの数は4個である。1つのグループは、2つの領域で形成される。
図4の例では、各グループに含まれる状態変数に重複(オーバーラップ)がなく、グループの総数は4個である。探索対象のグループは、ウィンドウと言われる。なお、ここで言う領域は、ウィンドウ切り替えの最小粒度となり得る状態変数のサブグループである。1つのグループを部分領域と言う場合、ウィンドウ切り替えの最小粒度の1つのサブグループを単位領域と言うことができる。以下では、当該単位領域を、単に「領域」と言う。
【0093】
例えば、1つ目のウィンドウは領域#0,#1の組合せである。2つ目のウィンドウは領域#2,#3の組合せである。3つ目のウィンドウは、領域#4,#5の組合せである。4つ目のウィンドウは、領域#6,#7の組合せである。なお、後述されるように、2つのウィンドウに含まれる一部の領域は重複してもよい。すなわち、あるウィンドウに属する一部の状態変数が、他のウィンドウにも属するようにウィンドウが形成されてもよい。
【0094】
重み係数行列200に含まれる重み係数群は、領域番号#0~#7を用いて区別される。例えば、領域#0の状態変数と領域#1の状態変数とのペアに対応する重み係数群は、W_01のように表記される。なお、領域番号に係る行p,列qに関し、W_pq=W_qpである。
【0095】
ここで、1つの領域に含まれる状態変数の数をk個とする。すると、1つのウィンドウに含まれる状態変数の数K=2kである。重み係数の符号のアンダースコア「_」の後の数値は、状態変数に関する次のインデックス範囲を示す。「0」は、1~kである。「1」は、k+1~2kである。「2」は、2k+1~3kである。「3」は、3k+1~4kである。「4」は、4k+1~5kである。「5」は、5k+1~6kである。「6」は、6k+1~7kである。「7」は、7k+1~8kである。例えば、W_00は、重み係数Wの全体のうちの{Wij}(1≦i≦k,1≦j≦k)の部分である。
【0096】
一例では、ウィンドウの切り替えでは、インデックスの順方向にウィンドウをスライドさせる。すなわち、ウィンドウのオーバーラップのない順スライディングである。最後のウィンドウの探索後は、最初のウィンドウに戻る。
【0097】
図4の例では、探索を行う現ウィンドウが領域#0,#1の場合を例示する。この場合、内部メモリ110に読み込まれる現ウィンドウ探索用の重み係数は、W_00,W_10,W_01,W_11である。また、次ウィンドウは、領域#2,#3となる。
【0098】
次ウィンドウ探索用の重み係数は、W_22,W_32,W_23,W_33である。また、次ウィンドウに対応する局所場更新用重み係数は、W_02,W_12,W_42,W_52,W_62,W_72,W_03,W_13,W_43,W_53,W_63,W_73のうち、前回探索時から変化した状態変数に対応する重み係数である。
【0099】
ビット変化情報300、ステート情報310および局所場情報320は、データ記憶部120に保持される。ここで、ステート情報310は、例えば探索対象の状態変数のグループごと、または領域ごとに、データ記憶部120に保持される。探索部130は、局所場情報320のうち、今回のグループに属する状態変数の局所場を読み込む。ビット変化情報300、ステート情報310および局所場情報320は、部分問題の切り替えに応じてDRAM102から内部メモリ110に次のように読み込まれる。
【0100】
まず、探索部130による現ウィンドウ(領域#0,#1)の探索が完了すると、メモリ制御部150は、探索後のステート、局所場およびビット変化をデータ記憶部120に出力する。そして、データ記憶部120に保持されるビット変化情報300、現ウィンドウに対応するステート情報および局所場情報320が更新される(ステップST1)。以下、探索部130へのデータの読み込みはメモリ制御部150を介して行われる。
【0101】
探索部130は、次ウィンドウ(領域#2,#3)の探索を行う前に、次ウィンドウの前回探索時のステート、局所場およびビット変化を、データ記憶部120から読み込む(ステップST2-1)。次ウィンドウの前回探索時のステートは、次ウィンドウに対して、前回探索直後に保存されたステート情報310に相当する。データ記憶部120から読み込まれたビット変化情報300は、データ転送制御部160による読み込み対象の重み係数の特定に用いられる。
【0102】
探索部130は、次ウィンドウの局所場更新用重み係数を、重み係数記憶部131に読み込み、次ウィンドウに属する状態変数の局所場を式(6)に基づいて更新する(ステップST2-2)。このとき、探索部130は、ビット変化情報300およびステート情報310に基づいて、次ウィンドウの前回探索後から値の変化があった状態変数に対応する重み係数を局所場更新用重み係数として読み込んで、局所場の更新を行えばよい。ステップST2-2で読み込まれる局所場更新用重み係数は、W_02,W_12,W_42,W_52,W_62,W_72,W_03,W_13,W_43,W_53,W_63,W_73のうち、前回探索時から値が変化した状態変数に対応する重み係数となる。
【0103】
探索部130は、次ウィンドウ探索用重み係数を読み込む(ステップST2-3)。次ウィンドウ探索用重み係数は、W_22,W_32,W_23,W_33である。重み係数記憶部131に保持されていた局所場更新用重み係数は上書きされる。
【0104】
探索部130は、重み係数記憶部131に記憶される次ウィンドウ探索用重み係数を用いて、探索を実行する(ステップST3)。そして、探索が終了すると、ステップST1に戻り、更に次のウィンドウの処理に進む。
【0105】
図5は、読み込み対象の重み係数の第1の例を示す図である。
データ転送制御部160は、ビット変化情報300に基づいて、次ウィンドウの前回探索後から値の変化があった状態変数を特定することができる。
図5の例では、ビット変化情報300において値の変化があった状態変数が黒丸で示され、値の変化がなかった状態変数が白丸で示されている。データ転送制御部160は、ビット変化情報300に基づいて、重み係数行列200の次ウィンドウの状態変数に係る重み係数群のうち、次ウィンドウの前回探索後から変化があった状態変数に対応する行のみを、局所場更新用重み係数として読み込み対象とする。
【0106】
図6は、読み込み対象の重み係数の第2の例を示す図である。
図6では、複数のレプリカが用いられる場合を例示する。レプリカは、ステート全体の複製である。複数のレプリカは、それぞれがN個の状態変数を有し、ステートを表す。探索部130は、パイプライン処理により、重み係数記憶部131に保持される重み係数を用いて、複数のレプリカに対してSA法による複数の求解を並列に実行することもできるし、複数のレプリカに対してレプリカ交換法を実行することもできる。各レプリカで並列処理されるウィンドウは同じウィンドウとなる。
【0107】
この場合、データ記憶部120は、レプリカごとのビット変化情報301を保持するとともに、レプリカごとのビット変化情報301の、ビット単位の論理和(OR演算)であるビット変化情報300aを保持する。例えば、4つのレプリカ#0~#3を用いる場合、ビット変化情報301も各レプリカに対して1つずつ、合計で4つ保持される。ビット変化情報300aは、4つのビット変化情報301のビット単位の論理和となる。
【0108】
データ転送制御部160は、ビット変化情報300aに基づいて、全てのレプリカに亘って、次ウィンドウの前回探索後から値の変化があった状態変数を特定することができる。データ転送制御部160は、ビット変化情報300aに基づいて、重み係数行列200の次ウィンドウの状態変数に係る重み係数群のうち、次ウィンドウの前回探索後から変化があった状態変数に対応する行のみを、局所場更新用重み係数として読み込み対象とする。この場合、探索部130は、各レプリカについて、当該レプリカのビット変化情報301と当該レプリカの探索対象のウィンドウに係る前回探索後のステート情報とに基づいて、変化があった状態変数の値の変化方向に応じた局所場の更新を行う。
【0109】
次に、イジングマシン100により実行される処理手順を説明する。以下では、レプリカ交換法を用いる場合を例示する。
図7は、イジングマシンの探索処理の例を示すフローチャートである。
【0110】
(S10)全体制御部140は、探索部130の初期化を行う。
(S11)全体制御部140は、次の探索領域ウィンドウを決定する。
(S12)データ転送制御部160は、メモリ制御部150を用いて、探索領域ウィンドウ用のデータ転送を行う。DRAM102から内部メモリ110に転送されるデータは、次の探索領域ウィンドウの前回探索終了後の各状態変数の値を示す、レプリカごとのステート情報310を含む。また、当該データは、当該探索領域ウィンドウに属する状態変数の局所場、および、ビット変化情報300a,301を含む。
図6の例では、ビット変化情報301は、4つのレプリカそれぞれのビット変化情報となる。ビット変化情報300a,301は、例えばデータ転送制御部160のレジスタなどに保持される。
【0111】
(S13)データ転送制御部160は、ビット変化情報300aに基づき、メモリ制御部150を用いて、探索領域ウィンドウ外の、局所場更新に必要な重み係数、すなわち、局所場更新用重み係数を、DRAM102から内部メモリ110に転送する。
【0112】
(S14)探索部130は、局所場更新処理を行う。局所場更新処理の詳細は後述される。
(S15)探索部130は、局所場更新が完了したか否かを判定する。局所場更新が完了した場合、ステップS16に処理が進む。局所場更新が完了していない場合、ステップS13に処理が進む。ここで、探索部130による局所場更新のために、局所場更新用重み係数が内部メモリ110に複数回読み込まれてもよい。局所場更新用重み係数の全体サイズが内部メモリ110の重み係数記憶部131で利用可能な記憶容量よりも大きいことがあるためである。
【0113】
(S16)データ転送制御部160は、メモリ制御部150を用いて、探索領域ウィンドウの重み係数、すなわち、次ウィンドウ探索用重み係数を、DRAM102から内部メモリ110に転送する。
【0114】
(S17)探索部130は、ウィンドウ内探索処理を行う。ウィンドウ内探索処理の詳細は後述される。
(S18)ステート変化検出部170は、ステート変化検出処理を行う。ステート変化検出処理の詳細は後述される。
【0115】
(S19)データ転送制御部160は、メモリ制御部150を用いて、探索部130による探索結果データを、DRAM102に転送する。これにより、探索結果データがデータ記憶部120に保存される。探索結果データは、今回探索結果が反映された最新のステート、局所場、ビット変化情報300a,301を含む。
【0116】
(S20)全体制御部140は、探索終了であるか否かを判定する。探索終了の場合、探索処理が終了する。探索終了でない場合、ステップS11に処理が進む。例えば、全体制御部140は、ステップS11~S19を所定回数または所定時間実行すると、探索終了と判定する。例えば、全体制御部140は、探索を終了すると、それまでに得られた解のうち、エネルギーが最小の解を出力する。
【0117】
図8は、局所場更新処理の例を示すフローチャートである。
局所場更新処理はステップS14に相当する。
(S30)探索部130は、ステップS31~S34をレプリカごとに実行する。レプリカ数はRである。なお、後述されるように、探索部130は、ステップS31~S34を、各レプリカに対してパイプラインで実行することができる。
【0118】
(S31)探索部130は、該当のレプリカのビット変化情報301をデータ転送制御部160から取得する。
(S32)探索部130は、読み込み領域内の全ビット変化に対する局所場の更新処理が完了したか否かを判定する。完了した場合、ステップS35に処理が進む。完了していない場合、ステップS33に処理が進む。
【0119】
(S33)探索部130は、該当のレプリカのビット変化情報301に基づいて、ビット変化に対応する重み係数を重み係数記憶部131から読み出す。例えば、探索部130は、ビット変化に対応する重み係数をインデックス順に1つ読み出す。
【0120】
(S34)探索部130は、式(6)に基づく局所場更新計算を行う。探索部130は、当該局所場更新計算を、探索領域ウィンドウ内の各状態変数に対して並列に実行する。そして、ステップS32に処理が進む。
【0121】
(S35)探索部130は、全てのレプリカに対する局所場の更新を完了すると、局所場更新処理を終了する。
図9は、ウィンドウ内探索処理の例を示すフローチャートである。
【0122】
ウィンドウ内探索処理はステップS17に相当する。
(S40)全体制御部140は、探索部130に探索パラメータを設定する。探索パラメータは、探索に用いられる温度値や全イタレーション数Tなどを含む。なお、後述のステップS50の実行後にステップS40を実行する場合は温度値を設定済なので温度値の設定は行われなくてよい。
【0123】
(S41)探索部130は、イタレーション数iに対して、ステップS42~S48を繰り返し実行する。ここで、iの初期値は0である。全イタレーション数Tに達するまで、iは1ずつインクリメントされる。
【0124】
(S42)探索部130は、ステップS43~S47をレプリカごとに実行する。レプリカ数はRである。探索部130は、ステップS43~S47を、各レプリカに対してパイプラインで実行することができる。
【0125】
(S43)探索部130は、式(3)に基づいて、各状態変数に関するΔEを算出する。ΔEの計算は、各状態変数に対して並列に実行される。
(S44)探索部130は、式(7)に基づいて、ビット受入判定を行う。
【0126】
(S45)探索部130は、ビット受入判定の結果に基づいて、フリップビット選択を行う。ビット受入判定の結果において変化が許容される状態変数が複数存在する場合、探索部130は、例えば乱数を用いてその中から1つを選択する。
【0127】
(S46)探索部130は、ビットフリップ可であるか否かを判定する。ビットフリップ可である、ステップS45でフリップビットが選択された場合、ステップS47に処理が進む。ビットフリップ不可である場合、ステップS48に処理が進む。例えば、ステップS44のビット受入判定で、変化が許容される状態変数がない場合、ビットフリップ不可となる。
【0128】
(S47)探索部130は、局所場更新を行う。すなわち、探索部130は、フリップ対象の状態変数の値の変化をステートに反映させるとともに、重み係数記憶部131に保持される現ウィンドウ探索用重み係数を用いて、現ウィンドウ内の状態変数の局所場を更新する。
【0129】
(S48)探索部130は、全てのレプリカに対して現イタレーションの処理を完了すると、ステップS49に処理を進める。
(S49)探索部130は、全イタレーションの処理を完了すると、ステップS50に処理を進める。
【0130】
(S50)探索部130は、レプリカ交換処理を実行する。これにより、例えば所定の確率に基づいて、レプリカ間での温度値の交換またはステートの交換が行われる。
(S51)探索部130は、現ウィンドウに対するウィンドウ内探索処理が終了したか否かを判定する。現ウィンドウに対するウィンドウ内探索処理が終了した場合、ウィンドウ内探索処理が終了する。現ウィンドウに対するウィンドウ内探索処理が終了していない場合、ステップS40に処理が進む。例えば、探索部130は、ステップS40~S50を所定回数または所定時間実行すると、ウィンドウ内探索処理終了と判定する。
【0131】
図10は、ステート変化検出処理の例を示すフローチャートである。
ステート変化検出処理はステップS18に相当する。
(S60)ステート変化検出部170は、ステップS61,S62をレプリカごとに実行する。レプリカ数はRである。
【0132】
(S61)ステート変化検出部170は、該当のレプリカの現ウィンドウの探索開始時のステートと終了時のステートとを比較する。
(S62)ステート変化検出部170は、ステップS61の比較の結果に応じて、該当のレプリカに関するビット変化情報301を生成し、内部メモリ110の所定の記憶領域またはレジスタに記憶する。
【0133】
(S63)ステート変化検出部170は、全てのレプリカに対するステート変化検出を完了すると、ステート変化検出処理を終了する。
(S64)ステート変化検出部170は、全レプリカのビット変化情報301の論理和、すなわち、ビット変化情報300aを生成し、内部メモリ110の所定の記憶領域またはレジスタに記憶する。そして、ステート変化検出処理が終了する。
【0134】
このように、イジングマシン100は、探索対象とする状態変数の複数のグループそれぞれを切り替えて、各グループに対してレプリカ交換法による探索を行う。なお、複数のレプリカで並列してSA法を実行する場合、ステップS50では、レプリカ交換処理に代えて、各レプリカで温度値を下げる処理が実行される。また、単一レプリカでSA法を実行する場合は、
図8~
図10の手順においてR=1とすればよい。
【0135】
なお、SA法を実行する場合、プロセッサ101は、ある温度値での全ての探索領域ウィンドウに対する探索が完了した後に、温度値を下げて再び全ての探索ウィンドウに対する探索を順次行うという手順を、初期温度値から最終温度値まで行うようにしてもよい。
【0136】
次に、ウィンドウ切り替えの他の例を説明する。まず、2つのウィンドウがオーバーラップする例を説明する。
図11は、2つのウィンドウがオーバーラップする例を示す図である。
【0137】
2つのウィンドウがオーバーラップする場合、メモリ制御部150は、重なっている領域についてはデータ記憶部120への出力を省略することができる。例えば、現ウィンドウが領域#0,#1で、次ウィンドウが領域#1,#2の場合、ウィンドウの切り替えに応じてDRAM102から内部メモリ110へ次のようにデータが読み込まれる。なお、
図11の例ではビット変化情報300が用いられるものとする。また、ウィンドウの切り替えでは、インデックスの順方向にウィンドウをスライドさせるものとする。すなわち、ウィンドウのオーバーラップのある順スライディングである。最後のウィンドウの探索後は、最初のウィンドウに戻る。また、現ウィンドウ探索用重み係数は、W_00,W_10,W_01,W_11である。
【0138】
まず、探索部130による現ウィンドウ(領域#0,#1)の探索が完了すると、メモリ制御部150は、探索後のステート、局所場およびビット変化をデータ記憶部120に出力する。このとき、メモリ制御部150は、領域#0に関するステート、局所場およびビット変化を出力すればよく、領域#1に関するステート、局所場およびビット変化の出力を省略することができる。そして、データ記憶部120に保持されるビット変化情報300、現ウィンドウに対応する領域ごとのステート情報および局所場情報320が更新される(ステップST1a)。
【0139】
探索部130は、次ウィンドウ(領域#1,#2)の探索を行う前に、次ウィンドウの前回探索時のステート、局所場およびビット変化を、データ記憶部120から読み込む(ステップST2a-1)。このとき、探索部130は、次ウィンドウに含まれる領域#1に関しては、既に最新の各状態変数の値を保持している。このため、探索部130は、領域#1に関しては、局所場の読み込みを省略することができる。
【0140】
探索部130は、次ウィンドウの領域#2に関する局所場更新用重み係数を、重み係数記憶部131に読み込み、次ウィンドウの領域#2に属する状態変数の局所場を式(6)に基づいて更新する(ステップST2a-2)。このとき、探索部130は、ビット変化情報300およびステート情報310に基づいて、次ウィンドウの前回探索後から値の変化があった状態変数に対応する重み係数を局所場更新用重み係数として読み込んで、局所場の更新を行えばよい。また、次ウィンドウの領域#1の状態変数の局所場は既に最新であるため、探索部130は、領域#1の状態変数の局所場の更新を省略することができる。ステップST2a-2で読み込まれる局所場更新用重み係数は、W_02,W_32,W_42,W_52,W_62,W_72のうち、領域#1の前回探索時から値が変化した状態変数に対応する重み係数となる。
【0141】
探索部130は、次ウィンドウ探索用重み係数を読み込む。次ウィンドウ探索用重み係数は、W_11,W_21,W_12,W_22である。重み係数記憶部131に保持されていた局所場更新用重み係数は上書きされる。そして、探索部130は、次ウィンドウ探索用重み係数に基づき、直前の探索による領域#1の状態変数の値の変化に応じて領域#2の状態変数の局所場を更新する(ステップST2a-3)。なお、直前の探索による領域#1の状態変数の値の変化方向は、直前の探索後にステート変化検出部170により検出された領域#1のビット変化と領域#2に対応する前回探索時のステート情報とに基づいて特定される。
【0142】
探索部130は、重み係数記憶部131に記憶される次ウィンドウ探索用重み係数を用いて、探索を実行する(ステップST3a)。そして、探索が終了すると、ステップST1aに戻り、更に次のウィンドウの処理に進む。
【0143】
このように、ウィンドウがオーバーラップする場合、探索部130は、ステップST2a-3において次ウィンドウ探索用重み係数を用いた局所場の更新を行う。当該局所場の更新は、
図7のフローチャートのステップS16で実行される。また、当該局所場の更新は、
図8のフローチャートと同様の手順で行うことができる。
【0144】
次に、ウィンドウをランダムに切り替える例を説明する。
図12は、ウィンドウをランダムに切り替える例を示す図である。
例えば、現ウィンドウが領域#0,#1で、ランダムに選択される次ウィンドウが領域#4,#5の場合、ウィンドウの切り替えに応じてDRAM102から内部メモリ110に次のようにデータが読み込まれる。なお、
図12の例ではビット変化情報300が用いられるものとする。また、現ウィンドウ探索用重み係数は、W_00,W_10,W_01,W_11である。更に、現ウィンドウ(領域#0,#1)の探索前には、最初のインデックスから最後のインデックスまで、
図4のようにインデックスの順方向にウィンドウをスライドさせて探索が行われたものとする。
【0145】
まず、探索部130による現ウィンドウの探索が完了すると、メモリ制御部150は、探索後のステート、局所場およびビット変化をデータ記憶部120に出力する。そして、データ記憶部120に保持されるビット変化情報300、現ウィンドウに対応する領域ごとのステート情報および局所場情報320が更新される(ステップST1b)。
【0146】
探索部130は、次ウィンドウの探索を行う前に、次ウィンドウ(領域#4,#5)の前回探索時のステート、局所場およびビット変化を、データ記憶部120から読み込む(ステップST2b-1)。次ウィンドウの前回探索時のステートは、次ウィンドウに対して、前回探索直後に保存されたステート情報310に相当する。
【0147】
探索部130は、次ウィンドウの局所場更新用重み係数を、重み係数記憶部131に読み込み、次ウィンドウに属する状態変数の局所場を式(6)に基づいて更新する(ステップST2b-2)。このとき、探索部130は、ビット変化情報300およびステート情報310に基づいて、次ウィンドウの領域#4,#5の前回探索後から値の変化があった状態変数に対応する重み係数を局所場更新用重み係数として読み込んで、局所場の更新を行えばよい。
図12の例の場合、領域#2,#3の状態変数は、次ウィンドウ(領域#4,#5)の前回探索時から変更されていないので、領域#2,#3の状態変数に係る重み係数の読み込みを省略できる。ステップST2b-2で読み込まれる局所場更新用重み係数は、W_04,W_14,W_64,W_74,W_05,W_15,W_65,W_75のうち、前回探索時から値が変化した状態変数に対応する重み係数となる。
【0148】
ここで、後述されるように、次ウィンドウの領域#4,#5の前回探索後から値の変化があった状態変数を含む領域は、所定のフラグ(状態フラグ)によって管理される。
探索部130は、次ウィンドウ探索用重み係数を読み込む(ステップST2b-3)。次ウィンドウ探索用重み係数は、W_44,W_54,W_45,W_55である。重み係数記憶部131に保持されていた局所場更新用重み係数は上書きされる。
【0149】
探索部130は、重み係数記憶部131に記憶される次ウィンドウ探索用重み係数を用いて、探索を実行する(ステップST3b)。そして、探索が終了すると、ステップST1bに戻り、更に次のウィンドウの処理に進む。
【0150】
次に、領域#4,#5を現ウィンドウとし、領域#3,#4に相当する次ウィンドウへ切り替える例を説明する。
図13は、ウィンドウをランダムに切り替える例を示す図である。
【0151】
まず、探索部130による現ウィンドウ(領域#4,#5)の探索が完了すると、メモリ制御部150は、探索後のステート、局所場およびビット変化をデータ記憶部120に出力する。このとき、メモリ制御部150は、領域#5に関するステート、局所場ビット変化を出力すればよく、次ウィンドウ(領域#3,#4)と重複する領域#4に関するステート、局所場ビット変化の出力を省略することができる。そして、データ記憶部120に保持されるビット変化情報300、現ウィンドウに対応する領域ごとのステート情報および局所場情報320が更新される(ステップST1c)。
【0152】
探索部130は、次ウィンドウ(領域#3,#4)の探索を行う前に、次ウィンドウの前回探索時のステート、局所場およびビット変化を、データ記憶部120から読み込む(ステップST2c-1)。このとき、探索部130は、次ウィンドウに含まれる領域#4に関しては、既に最新の各状態変数の値を保持している。このため、探索部130は、領域#4に関しては、局所場の読み込みを省略することができる。
【0153】
探索部130は、次ウィンドウの領域#3に関する局所場更新用重み係数を、重み係数記憶部131に読み込み、次ウィンドウの領域#3に属する状態変数の局所場を式(6)に基づいて更新する(ステップST2c-2)。このとき、探索部130は、ビット変化情報300およびステート情報310に基づいて、次ウィンドウの領域#3の前回探索後から値の変化があった状態変数に対応する重み係数を局所場更新用重み係数として読み込んで、局所場の更新を行えばよい。また、次ウィンドウの領域#4の状態変数の局所場は既に最新であるため、探索部130は、領域#4の状態変数の局所場の更新を省略することができる。ステップST2c-2で読み込まれる局所場更新用重み係数は、W_03,W_13,W_23,W_53,W_63,W_73のうち、前回探索時から値が変化した状態変数に対応する重み係数となる。
【0154】
ここで、後述されるように、次ウィンドウの領域#3の前回探索後から値の変化があった状態変数を含む領域は、所定のフラグ(状態フラグ)によって特定される。
探索部130は、次ウィンドウ探索用重み係数を読み込む。次ウィンドウ探索用重み係数は、W_33,W_43,W_34,W_44である。重み係数記憶部131に保持されていた局所場更新用重み係数は上書きされる。そして、探索部130は、次ウィンドウ探索用重み係数に基づき、直前の探索による領域#4の状態変数の値の変化に応じて領域#3の状態変数の局所場を更新する(ステップST2c-3)。なお、直前の探索による領域#4の状態変数の値の変化方向は、直前の探索後にステート変化検出部170により検出された領域#4のビット変化と領域#3に対応する前回探索時のステート情報とに基づいて特定される。
【0155】
探索部130は、重み係数記憶部131に記憶される次ウィンドウ探索用重み係数を用いて、探索を実行する(ステップST3c)。そして、探索が終了すると、ステップST1cに戻り、更に次のウィンドウの処理に進む。
【0156】
このように、探索部130は、ウィンドウをランダムに切り替えてもよく、また、切り替え前後のウィンドウがオーバーラップしてもよい。
なお、
図12,
図13のランダム切り替えの処理では、ある領域に対し、当該領域の前回探索後からビット変化があった他領域を管理するために状態フラグが用いられる。次に、状態フラグを説明する。
【0157】
図14は、ランダム切り替えに用いられる状態フラグの例を示す図である。
状態フラグは、領域ごとに設けられ、内部メモリ110の所定の記憶領域またはレジスタに保持される。状態フラグは、例えばステート変化検出部170により更新され、データ転送制御部160による読み込み対象の重み係数の特定に用いられる。
【0158】
状態フラグは、現状態フラグ500および他領域状態フラグ600,601,602,603,604,605,606,607を含む。
現状態フラグ500は、領域#0~#7の各領域が探索対象となった回数を示すカウント値を保持する。他領域状態フラグ600~607は、対応する領域の前回探索直後の時点において、領域#0~#7それぞれが探索対象となった回数を示すカウント値を保持する。
【0159】
他領域状態フラグ600は、領域#0に対応する。他領域状態フラグ601は、領域#1に対応する。他領域状態フラグ602は、領域#2に対応する。他領域状態フラグ603は、領域#3に対応する。他領域状態フラグ604は、領域#4に対応する。他領域状態フラグ605は、領域#5に対応する。他領域状態フラグ606は、領域#6に対応する。他領域状態フラグ607は、領域#7に対応する。
【0160】
現状態フラグ500および他領域状態フラグ600~607それぞれに記載されている「0」~「7」の数字は領域番号である。
図14における現状態フラグ500および他領域状態フラグ600~607の例では、斜線のハッチングの箇所に対応する領域のカウント値が最も小さい。また、白色の箇所に対応する領域のカウント値は斜線のハッチングの箇所のカウント値に1を加算した値となる。また、ドットのハッチング箇所に対応する領域のカウント値は白色の箇所のカウント値に1を加算した値となる。
【0161】
図14では、
図12で例示した領域#0,#1から領域#4,#5への切り替え時の現状態フラグ500および他領域状態フラグ600~607が示されている。
図12の例では、前述のように、現ウィンドウ(領域#0,#1)の探索前には、最初のインデックスから最後のインデックスまで、
図4のようにインデックスの順方向にウィンドウをスライドさせて探索が行われたものとしていた。
【0162】
領域#0,#1から領域#4,#5への切り替え時では、領域#0,#1の他領域状態フラグ600,601は、現状態フラグ500に一致することになる。例えば、領域#0,#1のカウント値が「2」、領域#2~#7のカウント値が「1」のようになる。一方、領域#4,#5の他領域状態フラグ604,605では、領域#0~#5のカウント値が「1」、領域#6,#7のカウント値が「0」のようになる。
【0163】
データ転送制御部160は、領域#4,#5を次ウィンドウとする場合、現状態フラグ500と他領域状態フラグ604,605とを比較して、現状態フラグ500におけるカウント値が、他領域状態フラグ604,605のカウント値よりも大きい領域を特定する。そして、データ転送制御部160は、特定した領域に対応する重み係数をDRAM102から読み込むように、全体制御部140を介してメモリ制御部150を制御する。上記の領域#0,#1から領域#4,#5への切り替え時では、領域#0,#1,#6,#7に対応する重み係数のうち、領域#4,#5の前回探索後から値の変化があった状態変数に対応する重み係数を読み込めばよい。
【0164】
続いて、
図14では、
図13で例示した領域#4,#5から領域#3,#4への切り替え時の現状態フラグ500および他領域状態フラグ600~607が示されている。
領域#4,#5から領域#3,#4への切り替え時では、現状態フラグ500で領域#4,#5のカウント値が1加算され、他領域状態フラグ604,605が現状態フラグ500と同じになる。具体的には、領域#0,#1,#4,#5のカウント値が「2」、領域#2,#3,#6,#7のカウント値が「1」のようになる。
【0165】
一方、領域#3の他領域状態フラグ603では、領域#0~#3のカウント値が「1」、領域#4~#7のカウント値が「0」のようになる。上記の領域#4,#5から領域#3,#4への切り替え時では、データ転送制御部160は、現状態フラグ500および他領域状態フラグ603を比較する。そして、データ転送制御部160は、領域#0,#1,#5,#6,#7に対応する重み係数のうち、領域#3の前回探索後から値の変化があった状態変数に対応する重み係数を読み込み対象とする。領域#0,#1,#5,#6,#7に対応する重み係数は、領域#3の状態変数の局所場の更新に用いられる。領域#4に関しては、探索部130は既に最新の局所場を保持しているので、当該局所場の更新を省略できる。更に、探索部130は、次ウィンドウ探索用重み係数として、領域#3,#4に対応する重み係数を読み込むと、領域#4の直前の探索でのビット変化に応じて領域#3の状態変数の局所場を更新し、次ウィンドウ(領域#3,#4)の探索を開始する。
【0166】
次に、以上で説明したウィンドウの各切り替え方法での局所場の更新例を説明する。
図15は、オーバーラップのない順スライディングの例を示す図である。
図15の例では、1つの領域が1つのウィンドウに対応する。この場合、例えば領域#0の探索時、ビット変化情報300および領域#0に対応するステート情報310に基づいて、領域#1~#7のうち前回の領域#0の探索以降に変化したビット、すなわち、状態変数に対応する重み係数が内部メモリ110に読み込まれる。そして、変化したビットに応じて領域#0に対応する局所場が更新される。その後、領域#0に係る重み係数が内部メモリ110に読み込まれ、領域#0の探索が行われる。なお、データ記憶部120に保持される局所場情報320のうち、領域#0に係る局所場のみが内部メモリ110に読み込まれる。以降の他の領域の探索時も、探索対象の領域に係る局所場のみが、内部メモリ110に読み込まれる。
【0167】
次に、領域#1の探索時は、ビット変化情報300および領域#1に対応するステート情報310に基づいて、領域#0,#2~#7のうち前回の領域#1の探索以降に変化したビットに対応する重み係数が内部メモリ110に読み込まれる。そして、変化したビットに応じて領域#1に対応する局所場が更新される。その後、領域#1に係る重み係数が内部メモリ110に読み込まれ、領域#1の探索が行われる。
【0168】
以降、同様にウィンドウがスライドされて、探索が行われる。例えば、領域#5の探索時は、ビット変化情報300および領域#5に対応するステート情報310に基づいて、領域#0~#4,#6,#7のうち前回の領域#5の探索以降に変化したビットに対応する重み係数が内部メモリ110に読み込まれる。そして、変化したビットに応じて領域#5に対応する局所場が更新される。その後、領域#5に係る重み係数が内部メモリ110に読み込まれ、領域#5の探索が行われる。
【0169】
図16は、オーバーラップのある順スライディングの例を示す図である。
図16では、領域#0/1のように隣接する2つの領域が1つのウィンドウに対応する。ここで、領域#0/1の表記は領域#0,#1の組合せを示す。領域#7/0も1つのウィンドウとなる。あるウィンドウと順スライディングによる次のウィンドウとは、1つの領域が重複する。
【0170】
例えば、領域#0/1探索時は、ビット変化情報300および領域#1に対応するステート情報310に基づいて、領域#2~#7のうち、領域#1の前回の探索以降に変化したビットに対応する重み係数が内部メモリ110に読み込まれる。そして、変化したビットに応じて領域#1に対応する局所場が更新される。更に、領域#0/1探索用の重み係数が内部メモリ110に読み込まれると、直前の探索での領域#0におけるビット変化に応じて、領域#1に係る局所場が更新される。すなわち、直前の探索での変化分が追加領域である領域#1の局所場に反映される。その後、領域#0/1の探索が行われる。
【0171】
次に、領域#1/2の探索時は、ビット変化情報300および領域#2に対応するステート情報310に基づいて、領域#0,#3~#7のうち領域#2の前回の探索以降に変化したビットに対応する重み係数が内部メモリ110に読み込まれる。そして、変化したビットに応じて領域#2に対応する局所場が更新される。更に、領域#1/2探索用の重み係数が内部メモリ110に読み込まれると、直前の探索での領域#1におけるビット変化に応じて、領域#2に係る局所場が更新される。その後、領域#1/2の探索が行われる。
【0172】
次に、領域#2/3の探索時は、ビット変化情報300および領域#3に対応するステート情報310に基づいて、領域#0,#1,#4~#7のうち領域#3の前回の探索以降に変化したビットに対応する重み係数が内部メモリ110に読み込まれる。そして、変化したビットに応じて領域#3に対応する局所場が更新される。更に、領域#2/3探索用の重み係数が内部メモリ110に読み込まれると、直前の探索での領域#2におけるビット変化に応じて、領域#3に係る局所場が更新される。その後、領域#2/3の探索が行われる。
【0173】
以降、同様にウィンドウがスライドされて、探索が行われる。
図17は、ランダムな切り替えの例を示す図である。
図17の例では、1つの領域が1つのウィンドウに対応する。また、
図17の領域#0の探索に到達する前に、領域#0~#7に対して順スライディングによる探索が行われたものとする。そして、再度領域#0の探索を行い、その後、探索領域のランダムな切り替えが行われるものとする。
【0174】
この場合、領域#0の探索時、現状態フラグ500および他領域状態フラグ600の比較に応じて、領域#0の前回の探索以降に変化した領域#1~#7が特定される。そして、ビット変化情報300および領域#0に対応するステート情報310に基づいて、領域#1~#7のうち前回の領域#0の探索以降に変化したビットに対応する重み係数が内部メモリ110に読み込まれる。更に、変化したビットに応じて領域#0に対応する局所場が更新される。その後、領域#0に係る重み係数が内部メモリ110に読み込まれ、領域#0の探索が行われる。
【0175】
次に、探索対象の領域が領域#3に移る。領域#3の探索時、現状態フラグ500および他領域状態フラグ603の比較に応じて、領域#3の前回の探索以降に変化した領域#0,#4~#7が特定される。そして、ビット変化情報300および領域#3に対応するステート情報310に基づいて、領域#0,#4~#7のうち領域#3の前回の探索以降に変化したビットに対応する重み係数が内部メモリ110に読み込まれる。更に、変化したビットに応じて領域#3に対応する局所場が更新される。その後、領域#3に係る重み係数が内部メモリ110に読み込まれ、領域#3の探索が行われる。
【0176】
次に探索対象の領域が領域#2に移る。領域#2の探索時、現状態フラグ500および他領域状態フラグ602の比較に応じて、領域#2の前回の探索以降に変化した領域#0,#3~#7が特定される。そして、ビット変化情報300および領域#2に対応するステート情報310に基づいて、領域#0,#3~#7のうち領域#2の前回の探索以降に変化したビットに対応する重み係数が内部メモリ110に読み込まれる。更に、変化したビットに応じて領域#2に対応する局所場が更新される。その後、領域#2に係る重み係数が内部メモリ110に読み込まれ、領域#2の探索が行われる。
【0177】
以降、同様にウィンドウ、すなわち、探索対象の領域がランダムに切り替えられて、探索が行われる。
次に、
図8の局所場更新を複数のレプリカに対してパイプラインで行う例を説明する。
【0178】
図18は、複数のレプリカの局所場更新のパイプライン処理の例を示す図である。
タイムチャート700は、
図8の局所場更新の手順をR個のレプリカでパイプライン処理する例を示す。局所場更新においては、前回から変化のあった状態変数に関して重み係数を内部メモリ110に読み込んで、式(6)のように、局所場hに対し、W
ijΔx
jを加算することで、hの更新が行われる。通常、レプリカによって変化した状態変数の数は変わるため、レプリカごとに局所場更新処理にかかるサイクル数、すなわち、ステップS32~S34の繰り返し数は変わる。
【0179】
タイムチャート700は、簡単化のため、パイプラインのディレイは4段であり、3段目の局所場の取得が2段目の重み係数読み出しと同じタイミングで処理される例を示す。1段目の重み係数メモリアドレス生成は、ビット変化情報300から、読み出し対象の重み係数のアドレスを計算する処理である。2段目の重み係数読み出しは、計算したアドレスを基に内部メモリ110から重み係数を取得する処理である。3段目の局所場読み出しは、内部メモリ110から対応するレプリカの局所場を取得する処理である。4段目の局所場更新は、取得した局所場にWijΔxjを加算することで局所場を更新する処理である。5段目の局所場書き込みは、更新後の局所場を内部メモリ110に書き込む処理である。
【0180】
探索部130は、パイプラインの各段では、あるレプリカに対する処理を終えると次のレプリカの処理に移る。こうして、複数のレプリカの局所場更新の更新が高速化される。
次に、DRAM102における重み係数のメモリマップの例を説明する。
【0181】
図19は、DRAM上の重み係数のメモリマップの例を示す図である。
図19(A)は、重み係数行列200の2次元論理イメージを示す。
図19(B)は、DRAM102のメモリマップ800を示す。
図19の例では、重み係数の1データを4Bytesとし、問題サイズ、すなわち、全状態変数の数を8K(キロ)bitsとする。
【0182】
例えば、スライディングウィンドウ処理の最小粒度を1Kbits単位とする場合、重み係数の2次元論理イメージでの領域単位を1K×1Kとして扱う。
局所場更新に必要な重み係数データは、重み係数行列200のうち、変化した状態変数に対応した1行分のデータである。このため、最小粒度の1K×1Kの中の1行分のデータ、すなわち、4Bytes×1024=4KBytesをバーストで読み出せるようにメモリマップ800上に並べる。
【0183】
メモリマップ800の(x,y)の表記は、重み係数行列200の1K×1K単位のx,y座標のインデックスである。例えば、0と1の2Kbits分の重み係数を読み出す場合は、(0,0)+(0,1),(1,0)+(1,1),…,(7,0)+(7,1)の領域で必要なデータを読み出す。このようなメモリマップ800により、局所場の更新に必要な重み係数のみをDRAM102から効率的に読み出すことが可能となる。
【0184】
ところで、イジングマシン100は、情報処理システムに組み込んで使用され得る。次に、イジングマシン100を有する情報処理システムの例を説明する。
図20は、情報処理システムの例を示す図である。
【0185】
情報処理システム900は、CPU901、DRAM902、HDD903、GPU904、入力インタフェース905、媒体リーダ906および通信インタフェース907およびイジングマシン100を有する。情報処理システム900が有するこれらのユニットは、情報処理システム900の内部でバスに接続されている。
【0186】
CPU901は、プログラムの命令を実行するプロセッサである。CPU901は、HDD903に記憶されたプログラムやデータの少なくとも一部をDRAM902にロードし、プログラムを実行する。なお、CPU901は複数のプロセッサコアを含んでもよい。また、情報処理システム900は複数のプロセッサを有してもよい。以下で説明する処理は複数のプロセッサまたはプロセッサコアを用いて並列に実行されてもよい。また、複数のプロセッサの集合を「マルチプロセッサ」または単に「プロセッサ」と言うことがある。
【0187】
DRAM902は、CPU901が実行するプログラムやCPU901が演算に用いるデータを一時的に記憶する揮発性の半導体メモリである。なお、情報処理システム900は、RAM以外の種類のメモリを備えてもよく、複数個のメモリを備えてもよい。
【0188】
HDD903は、OS(Operating System)やミドルウェアやアプリケーションソフトウェアなどのソフトウェアのプログラム、および、データを記憶する不揮発性の記憶装置である。なお、情報処理システム900は、フラッシュメモリやSSD(Solid State Drive)などの他の種類の記憶装置を備えてもよく、複数の不揮発性の記憶装置を備えてもよい。
【0189】
GPU904は、CPU901からの命令に従って、情報処理システム900に接続されたディスプレイ911に画像を出力する。ディスプレイ911としては、CRT(Cathode Ray Tube)ディスプレイ、液晶ディスプレイ(LCD:Liquid Crystal Display)、プラズマディスプレイ、有機EL(OEL:Organic Electro-Luminescence)ディスプレイなど、任意の種類のディスプレイを用いることができる。
【0190】
入力インタフェース905は、情報処理システム900に接続された入力デバイス912から入力信号を取得し、CPU901に出力する。入力デバイス912としては、マウス、タッチパネル、タッチパッド、トラックボールなどのポインティングデバイス、キーボード、リモートコントローラ、ボタンスイッチなどを用いることができる。また、情報処理システム900に、複数の種類の入力デバイスが接続されていてもよい。
【0191】
媒体リーダ906は、記録媒体913に記録されたプログラムやデータを読み取る読み取り装置である。記録媒体913として、例えば、磁気ディスク、光ディスク、光磁気ディスク(MO:Magneto-Optical disk)、半導体メモリなどを使用できる。磁気ディスクには、フレキシブルディスク(FD:Flexible Disk)やHDDが含まれる。光ディスクには、CD(Compact Disc)やDVD(Digital Versatile Disc)が含まれる。
【0192】
媒体リーダ906は、例えば、記録媒体913から読み取ったプログラムやデータを、DRAM902やHDD903などの他の記録媒体にコピーする。読み取られたプログラムは、例えば、CPU901によって実行される。なお、記録媒体913は可搬型記録媒体であってもよく、プログラムやデータの配布に用いられることがある。また、記録媒体913やHDD903を、コンピュータ読み取り可能な記録媒体と言うことがある。
【0193】
通信インタフェース907は、ネットワーク914に接続され、ネットワーク914を介して他の情報処理装置と通信する。通信インタフェース907は、スイッチやルータなどの有線通信装置に接続される有線通信インタフェースでもよいし、基地局やアクセスポイントなどの無線通信装置に接続される無線通信インタフェースでもよい。
【0194】
情報処理システム900において、イジングマシン100は、CPU901からの命令に従って、組合せ最適化問題に対する求解を高速に実行するアクセラレータとして用いられる。ただし、CPU901が、DRAM902に記憶されたプログラムを実行することで、イジングマシン100と同様の機能を発揮してもよい。この場合、例えばCPU901のキャッシュメモリが内部メモリとして用いられ、DRAM902が重み係数全体を保持する記憶装置として用いられてもよい。
【0195】
例えば、情報処理システム900を第1の実施の形態のデータ処理装置10の一例と考えてもよい。あるいは、第2の実施の形態のイジングマシン100の処理をCPU901で実行する場合、CPU901とCPU901のキャッシュメモリとDRAM902とを有する情報処理装置を第1の実施の形態のデータ処理装置10の一例と考えることもできる。
【0196】
以上説明したように第2の実施の形態のイジングマシン100によれば、ウィンドウの切り替え時に、局所場更新に必要な最低限のデータのみを読み込むことができ、データ転送や局所場更新のオーバーヘッドを抑制できる。また、探索領域の重み係数格納用の内部メモリ110を使い回すことで、内部メモリ110を増やすことなく、ウィンドウの切り替え時の局所場更新が可能になる。また、複数のレプリカに対しても、まとめて効率的に処理が可能になる。
【0197】
第2の実施の形態のイジングマシン100は以下の処理を実行するとも言える。
プロセッサ101は、複数の状態変数を含むイジングモデルで表される問題の解の探索を、複数の状態変数を分割した複数のグループそれぞれを切り替えて行う。プロセッサ101は、探索対象を複数のグループのうちの第1グループに切り替える際に、第1グループに対する前回の探索後に第1グループ以外の他のグループに対する探索により値が変化した状態変数を示すビット変化情報300を取得する。プロセッサ101は、ビット変化情報300に基づいて、当該状態変数と第1グループに属する複数の第1状態変数それぞれとのペアに対応する第1重み係数を、複数の状態変数に関する重み係数の全体を記憶するDRAM102から読み出し、読み出した第1重み係数を内部メモリ110に格納する。プロセッサ101は、内部メモリ110に記憶された第1重み係数に基づいて、複数の第1状態変数それぞれの局所場を更新する。プロセッサ101は、複数の第1状態変数における第1状態変数のペアに対応する第2重み係数をDRAM102から読み出し、読み出した第2重み係数を内部メモリ110に格納する。プロセッサ101は、内部メモリ110に記憶された第2重み係数と複数の第1状態変数それぞれの局所場とを用いて、第1グループに対する探索を実行する。プロセッサ101は、第1グループに対する探索を終了すると、今回の探索による複数の第1状態変数それぞれの値の変化の有無に応じて変化情報を更新し、探索対象を次のグループに切り替える。
【0198】
これにより、探索対象の状態変数のグループの切り替えを効率的に行うことができる。例えば、ビット変化情報300を用いない場合、部分問題の切り替え、すなわち、探索対象のグループの切り替えに伴って、式(10)や式(11)の計算のために比較的多くの重み係数を読み出すことになる。一方、ビット変化情報300を用いることで、当該切り替え時に、局所場更新用に必要な最低限の重み係数のみをDRAM102から読み出すことができ、探索対象のグループの切り替えに伴う重み係数の読み出しや局所場更新によるオーバーヘッドが低減される。その結果、イジングマシン100の求解性能が向上する。例えば、求解の時間を短縮できる。また、比較的短い時間でより良い解を得られる可能性を高められる。また、内部メモリ110の重み係数用の記憶領域、すなわち、重み係数記憶部131を使い回すことで、内部メモリ110を増やすことなく、切り替え時の局所場更新が可能となる。
【0199】
なお、プロセッサ101は、処理部12の一例である。内部メモリ110は、記憶部11の一例である。DRAM102は、記憶装置20の一例である。ビット変化情報300は、変化情報31の一例である。
【0200】
また、第1グループおよび第1グループの直前に探索が行われた第2グループそれぞれに属する一部の状態変数は重複してもよい。この場合、プロセッサ101は、第2重み係数を内部メモリ110に格納すると、内部メモリ110に記憶された第2重み係数と第2グループに対する直前の探索での一部の状態変数に含まれる状態変数の値の変化とに基づいて、第1グループのうち第2グループと重複しない他の一部の状態変数の局所場を更新する。
【0201】
これにより、複数の第1状態変数のうち、複数の第2状態変数と重複しない部分に対応する局所場を適切に更新できる。また、解の探索対象のグループを柔軟に設定可能になる。
【0202】
また、プロセッサ101は、次の探索対象のグループを所定順序で、または、ランダムに選択してもよい。
これにより、解の探索対象のグループを柔軟に設定可能になる。なお、この場合、例えばビット変化情報300と現状態フラグ500と他領域状態フラグ600~607を含む情報を、変化情報31の一例であると考えてもよい。また、所定順序は、例えば状態変数のインデックスの昇順や降順など、当該インデックスに応じた順序である。なお、1度に探索対象とするグループの数は1つでもよいし、2以上でもよい。
【0203】
また、DRAM102は、ビット変化情報300と複数の状態変数それぞれの局所場と第1グループに対する前回の探索後の複数の第1状態変数の値を示すステート情報310とを記憶してもよい。この場合、プロセッサ101は、第1グループに対する探索を行う際に、ビット変化情報300と複数の第1状態変数それぞれの局所場とステート情報310とをDRAM102から内部メモリ110に読み出す。プロセッサ101は、ビット変化情報300およびステート情報310から特定される状態変数の値の変化方向であって、第1グループに対する前回の探索後に値が変化した、他のグループの状態変数の値の変化方向と第1重み係数とに基づいて、複数の第1状態変数それぞれの局所場を更新する。プロセッサ101は、第1グループに対する探索を終了すると、今回の探索による複数の第1状態変数それぞれの値の変化の有無に応じてDRAM102に記憶されるビット変化情報300を更新する。また、プロセッサ101は、今回の探索後の複数の第1状態変数それぞれの局所場と今回の探索後のステート情報310とをDRAM102に格納する。今回の探索後のステート情報310は、今回の探索結果が反映された複数の状態変数の最新の値となる。
【0204】
これにより、内部メモリ110に保持されるデータを低減できる。特に、全ての状態変数について局所場および全探索対象領域に対応する前回探索後のステート情報を内部メモリ110に保持しなくてもよくなり、内部メモリ110の記憶容量を節約できる。
【0205】
更に、プロセッサ101は、各々が複数の状態変数を示す複数のレプリカに対して第1グループに対する探索を行う場合に、複数のレプリカそれぞれのビット変化情報301の論理和に基づいて、DRAM102から読み出す第1重み係数を特定してもよい。ビット変化情報301の論理和は、ビット変化情報300aに相当する。
【0206】
これにより、複数のレプリカに対して、DRAM102からの第1重み係数の読み出しの効率化を図れる。例えば、各レプリカに対して第1重み係数の読み出しを個別に行うよりも、当該読み出しを高速化できる。
【0207】
なお、第1の実施の形態の情報処理は、処理部12にプログラムを実行させることで実現されてもよい。また、第2の実施の形態の情報処理は、CPU901にプログラムを実行させることで実現されてもよい。プログラムは、コンピュータ読み取り可能な記録媒体913に記録できる。
【0208】
例えば、プログラムを記録した記録媒体913を配布することで、プログラムを流通させることができる。また、プログラムを他のコンピュータに格納しておき、ネットワーク経由でプログラムを配布してもよい。コンピュータは、例えば、記録媒体913に記録されたプログラムまたは他のコンピュータから受信したプログラムを、DRAM902やHDD903などの記憶装置に格納し(インストールし)、当該記憶装置からプログラムを読み込んで実行してもよい。
【符号の説明】
【0209】
10 データ処理装置
11 記憶部
12 処理部
20 記憶装置
21 重み係数情報
31 変化情報
32 ステート情報
33 局所場情報