以下に図面を参照して、本発明にかかる最適化問題演算プログラム、最適化問題演算方法および最適化問題演算装置の実施の形態を詳細に説明する。
(実施の形態)
図1は、実施の形態にかかる最適化問題演算方法の一実施例を示す説明図である。図1において、最適化問題演算装置101は、複数の演算ユニット102により、組合せ最適化問題の演算を行うコンピュータである。演算ユニット102は、組合せ最適化問題を解くデバイスである。
演算ユニット102は、論理的に複数のパーティションに分割可能である。パーティションに分割するとは、演算の際に利用されるハードウェアリソースの範囲を区切ることである。演算ユニット102では、それぞれのパーティションで独立して異なる問題を解くことができる。
例えば、演算ユニット102を8個のパーティションに分割すると、8人のユーザが同時に異なる問題を解くことが可能となる。演算ユニット102は、例えば、最適化問題演算装置101に接続して使用される別体の装置であってもよく、また、最適化問題演算装置101に内蔵された装置であってもよい。
最適化問題演算装置101は、演算ユニット102への設定により、演算ユニット102の論理的な分割状態を規定するパーティションモードを変更可能である。演算ユニット102をどのように分割するかによって、演算の際に利用可能なハードウェアリソースの範囲が変わり、各パーティションで解くことができる組合せ最適化問題の規模や精度が決まる。
なお、各演算ユニット102をどのように分割するか、すなわち、各演算ユニット102にどのようなパーティションモードを設定するかは、任意に設定可能である。
ここで、組合せ最適化問題を解く最適化装置(イジングマシン)では、異なる規模・要求精度の問題を解くことが求められる場合がある。しかし、従来の最適化装置では、単一のモードしか有しておらず(演算の際に利用するハードウェアリソースの範囲が固定)、問題の規模・要求精度に応じて最適な動作を行う構成ではない。
したがって、従来の最適化装置では、ハードウェアで解くことができる問題の最大規模や精度よりも、解くべき問題の規模や精度が小さい場合、ハードウェアが探索する範囲やDMA(Direct Memory Access)転送するメモリサイズが大きくなり、演算時間が増加してしまう。
例えば、ハードウェアで解くことができる問題の最大規模が「8192bit(8K)」のときに、「1024bit(1K)」の規模の問題を解く場合には、探索範囲が広がって無駄なDMA転送が行われるため、演算性能が劣化する。
このため、例えば、パーティションモードが異なる複数の演算ユニット102をあらかじめ用意し、複数の演算ユニット102それぞれのパーティションモードを把握した上で、問題の規模や要求精度に応じた演算ユニット102の選択を行うことが考えられる。
しかしながら、複数の演算ユニット102のパーティションモードの設定が適切でない場合は、特定の演算ユニット102のキュー(待ち行列)に処理(問題)が溜まったり、利用回数の少ない演算ユニット102が生じたりすることがあり、複数の演算ユニット102全体として最適な動作を行うことができない。
そこで、本実施の形態では、複数の演算ユニット102の利用状況に応じて、複数の演算ユニット102それぞれのパーティションモードを決定し、問題の規模や要求精度に応じたパーティションモードの演算ユニット102により、組合せ最適化問題の演算を行うことで、組合せ最適化問題を効率的に解く最適化問題演算方法について説明する。以下、最適化問題演算装置101の処理例について説明する。
(1)最適化問題演算装置101は、複数の演算ユニット102の管理情報110と、複数の演算ユニット102の利用情報120とに基づき、複数の演算ユニット102それぞれのパーティションモードを決定する。ここで、管理情報110は、複数の演算ユニット102それぞれの論理的な分割状態を規定するパーティションモードについての情報である。
利用情報120は、例えば、複数の演算ユニット102のいずれかの演算ユニット102で演算が実行された問題の実行履歴情報を含む。実行履歴情報は、問題と対応付けて、ハードウェア、問題の規模、要求精度、待ち時間、開始時刻、終了時刻などを示す。ハードウェアは、問題の振り分け先のハードウェア(演算ユニット102)を示す。待ち時間は、問題の演算を開始するまでの待ち時間を示す。開始時刻は、問題の演算を開始した時刻を示す。終了時刻は、問題の演算が終了した時刻を示す。
また、利用情報120は、例えば、複数の演算ユニット102の処理待ちキューに関する情報を含むことにしてもよい。処理待ちキューは、各演算ユニット102に対応して設けられるキュー(待ち行列)であり、各演算ユニット102に振り分けられた問題の情報が入力される。
具体的には、例えば、最適化問題演算装置101は、利用情報120に基づいて、複数の演算ユニット102それぞれの待ち時間を算出する。ここで、演算ユニット102の待ち時間は、演算ユニット102の負荷状況を示す指標値の一つである。演算ユニット102の待ち時間は、例えば、演算ユニット102に対応する処理待ちキューに溜まっている処理(問題)の待ち時間の合計によって表すことができる。処理の待ち時間は、他の処理の完了待ちで、待ち合わせている時間である。
また、最適化問題演算装置101は、利用情報120に基づいて、複数の演算ユニット102それぞれの利用率を算出する。ここで、演算ユニット102の利用率とは、演算ユニット102の利用状況を示す指標値の一つである。各演算ユニット102の利用率は、例えば、過去のある期間において、各演算ユニット102で問題の演算が行われた時間の割合によって表すことができる。各演算ユニット102で問題の演算が行われた時間は、例えば、利用情報120に含まれる実行履歴情報の開始時刻と終了時刻から特定される。
ここで、演算ユニット102の待ち時間が長いほど、その演算ユニット102に振り分けられた問題を解くまでに時間がかかる。また、ある演算ユニット102の待ち時間が長いということは、その演算ユニット102で解くべき問題の数が多い状況にあるといえる。一方で、演算ユニット102の利用率が低いほど、その演算ユニット102は利用されていない状態であるといえる。また、ある演算ユニット102の利用率が低いということは、その演算ユニット102で解くべき問題の数が少ない状況にあるといえる。
このため、最適化問題演算装置101は、例えば、待ち時間が長くなっている演算ユニット102のパーティションモードを特定し、利用率が低くなっている演算ユニット102のパーティションモードを、特定したパーティションモードに変更する。
より詳細に説明すると、例えば、最適化問題演算装置101は、利用情報120に基づいて、複数の演算ユニット102のうち、待ち時間があらかじめ設定された閾値以上の演算ユニット102を特定する。つぎに、最適化問題演算装置101は、管理情報110に基づいて、特定した演算ユニット102のパーティションモードを特定する。
また、最適化問題演算装置101は、利用情報120に基づいて、複数の演算ユニット102のうち、利用率があらかじめ設定された閾値以下の演算ユニット102を特定する。そして、最適化問題演算装置101は、特定した演算ユニット102のパーティションモードを、特定したパーティションモードに決定する。なお、複数の演算ユニット102のうち、利用率が閾値以下の演算ユニット102を除く残余の演算ユニット102については、現在のパーティションモードのままとする。
図1の例では、最適化問題演算装置101に接続された複数の演算ユニット102として、演算ユニット102($1)、演算ユニット102($2)および演算ユニット102($3)を想定する。なお、$1~$3は、演算ユニット102を識別する識別子である。
演算ユニット102($1)には、パーティションモード(8K)が設定されている。パーティションモード(8K)は、演算ユニット102を論理的に1つのパーティションとした状態を規定するパーティションモードである。パーティションモード(8K)で解くことができる問題の最大規模は、「8192bit(8K)」である。
演算ユニット102($2)には、パーティションモード(4K)が設定されている。パーティションモード(4K)は、演算ユニット102を論理的に2つのパーティションに分割した状態を規定するパーティションモードである。パーティションモード(4K)で解くことができる問題の最大規模は、「4096bit(4K)」である。
演算ユニット102($3)には、パーティションモード(2K)が設定されている。パーティションモード(2K)は、演算ユニット102を論理的に4つのパーティションに分割した状態を規定するパーティションモードである。パーティションモード(2K)で解くことができる問題の最大規模は、「2048bit(2K)」である。
また、演算ユニット102($1)の待ち時間を「600[秒]」とし、直近1時間の利用率を「90[%]」とする。演算ユニット102($2)の待ち時間を「10[秒]」とし、直近1時間の利用率を「50[%]」とする。演算ユニット102($3)の待ち時間を「0[秒]」とし、直近1時間の利用率を「3[%]」とする。
ここで、待ち時間の閾値を「600[秒]」とし、利用率の閾値を「10[%]」とする。この場合、最適化問題演算装置101は、演算ユニット102($1)~102($3)の利用情報120に基づいて、待ち時間が閾値以上の演算ユニット102($1)を特定する。
つぎに、最適化問題演算装置101は、演算ユニット102($1)~102($3)の管理情報110に基づいて、特定した演算ユニット102($1)のパーティションモード(8K)を特定する。また、最適化問題演算装置101は、演算ユニット102($1)~102($3)の利用情報120に基づいて、利用率が閾値以下の演算ユニット102($3)を特定する。
そして、最適化問題演算装置101は、特定した演算ユニット102($3)のパーティションモードを、特定したパーティションモード(8K)に決定する。この場合、演算ユニット102($3)にパーティションモード(8K)が設定され、管理情報110が更新される。すなわち、演算ユニット102($1)~102($3)それぞれの実行状況に応じてパーティションモードが適宜変更され、その変更に応じて管理情報110が更新されることになる。
(2)最適化問題演算装置101は、組合せ最適化問題を受け付ける。ここで、受け付ける組合せ最適化問題は、解くべき計算対象の問題であり、例えば、ユーザによって指定される問題である。なお、組合せ最適化問題の一例については、図6を用いて後述する。
(3)最適化問題演算装置101は、組合せ最適化問題の規模または要求精度に関する情報と、決定した複数の演算ユニット102それぞれのパーティションモードに関する情報とに基づき、組合せ最適化問題を振り分ける演算ユニット102を決定する。
ここで、組合せ最適化問題の規模または要求精度に関する情報は、例えば、組合せ最適化問題の規模または要求精度そのものを示す情報であってもよく、また、組合せ最適化問題の規模または要求精度に対応したフラグ等の情報であってもよい。組合せ最適化問題の規模は、例えば、組合せ最適化問題のイジングモデルのスピンビット数によって表される。イジングモデルとは、磁性体のスピンの振る舞いを表すモデルである。演算ユニット102は、例えば、計算対象の問題をイジングモデルに置き換えて計算する。また、組合せ最適化問題の要求精度は、例えば、ビット間の相互作用の大きさを示す重み係数のビット数によって表される。また、パーティションモードに関する情報は、例えば、パーティションモードそのものを示す情報であってもよく、また、パーティションモードに対応したフラグ等の情報であってもよい。
具体的には、例えば、最適化問題演算装置101は、更新後の管理情報110を参照して、組合せ最適化問題の規模以上の規模の問題を解くことができるパーティションモードが設定された演算ユニット102を特定する。そして、最適化問題演算装置101は、特定した演算ユニット102のうち、解くことができる問題の最大規模が最小の演算ユニット102を、組合せ最適化問題を振り分ける演算ユニット102に決定してもよい。
また、最適化問題演算装置101は、更新後の管理情報110を参照して、組合せ最適化問題の要求精度以上の精度の問題を解くことができるパーティションモードが設定された演算ユニット102を特定してもよい。そして、最適化問題演算装置101は、特定した演算ユニット102を、組合せ最適化問題を振り分ける演算ユニット102に決定してもよい。
なお、組合せ最適化問題の要求精度以上の精度の問題を解くことができるパーティションモードとは、組合せ最適化問題の要求精度が、解くことができる問題の最大精度の範囲内となるパーティションモードである。
また、最適化問題演算装置101は、更新後の管理情報110を参照して、組合せ最適化問題の規模以上の規模の問題を解くことができ、かつ、組合せ最適化問題の要求精度以上の精度の問題を解くことができるパーティションモードが設定された演算ユニット102を特定してもよい。そして、最適化問題演算装置101は、特定した演算ユニット102を、組合せ最適化問題を振り分ける演算ユニット102に決定してもよい。
図1の例では、問題130を例に挙げて、問題130の規模に応じて、問題130を振り分ける演算ユニット102を決定する場合について説明する。問題130は、規模が「8192bit(8K)」の組合せ最適化問題である。
この場合、最適化問題演算装置101は、更新後の管理情報110を参照して、問題130の規模以上の規模の問題を解くことができるパーティションモードが設定された演算ユニット102($1),102($2)を特定する。そして、最適化問題演算装置101は、特定した演算ユニット102($1),102($2)のうちのいずれかを、問題130を振り分ける演算ユニット102に決定する。
具体的には、例えば、最適化問題演算装置101は、各演算ユニット102($1)~102($3)の実行状況についての情報に基づき、演算ユニット102($1),102($2)のうち負荷が低い演算ユニット102を、問題130を振り分ける演算ユニット102に決定してもよい。
ここでは、演算ユニット102($1)には、問題140,150が振り分けられているのに対して、演算ユニット102($2)には、問題が振り分けられていない。この場合、最適化問題演算装置101は、演算ユニット102($1),102($2)のうち、問題が振り分けられていない空きの演算ユニット102($2)を、問題130を振り分ける演算ユニット102に決定する。
(4)最適化問題演算装置101は、決定した演算ユニット102で、当該演算ユニット102について決定したパーティションモードにより、組合せ最適化問題の演算を実行させる。図1の例では、最適化問題演算装置101は、決定した演算ユニット102($3)で、問題130の演算を実行させる。
このように、最適化問題演算装置101によれば、複数の演算ユニット102の利用状況に応じて、複数の演算ユニット102それぞれのパーティションモードを決定することができる。図1の例では、利用率の低い演算ユニット102($3)のパーティションモードを変更して、待ち時間が長くなっている演算ユニット102($1)と同一構成とすることができる。
これにより、使用する演算ユニット102の数を増やすことなく、待ち合わせが生じている問題と同様の規模や要求精度の問題を解くことができるハードウェアを増やすことができる。このため、演算ユニット102(例えば、演算ユニット102($1))における待ち時間の増大を防ぐことができる。また、ユーザから要求された問題を解くのに要する時間が増加することによる機会損失を防ぐことができる。
また、最適化問題演算装置101によれば、問題の規模や要求精度に応じたパーティションモードに設定された演算ユニット102により、組合せ最適化問題の演算を行うことができる。これにより、問題の規模や要求精度に応じて、演算の際に利用されるハードウェアリソースの範囲を適切に選択でき、演算性能を高めて演算処理の高速化を図ることができる。
図1の例では、問題130の規模「8K」に応じたパーティションモードが設定された演算ユニット102($3)により、問題130の演算を行うことができる。また、演算ユニット102($3)では待ち時間が生じないため、演算ユニット102($1)に振り分ける場合に比べて、問題130を解くのに要する時間を短縮することができる。
(演算ユニット102の一実施例)
つぎに、図1に示した演算ユニット102の一実施例について説明する。
図2は、演算ユニット102の一実施例を示す説明図である。図2において、演算ユニット102は、計算対象の問題(組合せ最適化問題)を変換したイジングモデルに含まれる複数のスピンに対応する複数のビット(スピンビット)のそれぞれの値の組合せ(状態)のうち、エネルギー関数が最小値となるときの各ビットの値(基底状態)を探索する。
イジング型のエネルギー関数E(x)は、例えば、下記式(1)で定義される。
右辺第1項は、イジングモデルに含まれる全ビットから選択可能な2つのビットの全組合せについて、漏れと重複なく、2つのビットの値(0または1)と結合係数との積を積算したものである。イジングモデルに含まれる全ビット数をK個(Kは2以上の整数)とする。また、i,jの各々を、0以上K-1以下の整数とする。xiは、i番目のビットの値を表す変数(状態変数とも呼ばれる)である。xjは、j番目のビットの値を表す変数である。Wijは、i番目とj番目のビットの相互作用の大きさを示す重み係数である。なお、Wii=0である。また、Wij=Wjiであることが多い(すなわち、重み係数による係数行列は対称行列である場合が多い)。
右辺第2項は、全ビットのそれぞれのバイアス係数とビットの値との積の総和を求めたものである。biは、i番目のビットのバイアス係数を示している。
また、変数xiの値が変化して1-xiとなると、変数xiの増加分は、Δxi=(1-xi)-xi=1-2xiと表せる。したがって、スピン反転(値の変化)に伴うエネルギー変化ΔEiは、下記式(2)で表される。
hiはローカルフィールド(局所場)と呼ばれ、下記式(3)で表される。
Δxiに応じてローカルフィールドhiに符号(+1または-1)を乗じたものがエネルギー変化ΔEiとなる。ローカルフィールドhiの変化分Δhiは、下記式(4)で表される。
ある変数xjが変化したときのローカルフィールドhiを更新する処理は並列に行われる。
演算ユニット102は、例えば、1チップの半導体集積回路であり、FPGA(Field Programmable Gate Array)などを用いて実現される。演算ユニット102は、ビット演算回路1a1,…,1aK,…,1aN(複数のビット演算回路)、選択回路部2、閾値生成部3、乱数生成部4および設定変更部5を有する。ここで、Nは、演算ユニット102が備えるビット演算回路の総数である。Nは、K以上の整数である。ビット演算回路1a1,…,1aK,…,1aNの各々には、識別情報(index=0,…,K-1,…,N-1)が対応付けられている。
ビット演算回路1a1,…,1aK,…,1aNは、イジングモデルの状態を表すビット列に含まれる1ビットを提供する単位素子である。当該ビット列は、スピンビット列や状態ベクトルなどと呼ばれてもよい。ビット演算回路1a1,…,1aK,…,1aNの各々は、自ビットと他ビットの間の重み係数を記憶し、重み係数に基づいて他ビットの反転に応じた自ビットの反転可否を判定し、自ビットの反転可否を示す信号を選択回路部2に出力する。
選択回路部2は、スピンビット列のうち、反転させるビット(反転ビット)を選択する。具体的には、選択回路部2は、ビット演算回路1a1,…,1aK,…,1aNのうち、イジングモデルの基底状態の探索に用いられているビット演算回路1a1,…,1aKの各々から出力された反転可否の信号を受け付ける。選択回路部2は、ビット演算回路1a1,…,1aKのうち、反転可の信号を出力したビット演算回路に対応するビットを優先的に1つ選択し、反転ビットとする。例えば、選択回路部2は、乱数生成部4により出力される乱数ビットに基づいて当該反転ビットの選択を行う。選択回路部2は、選択した反転ビットを示す信号を、ビット演算回路1a1,…,1aKに出力する。反転ビットを示す信号は、反転ビットの識別情報(index=j)と、反転可否を示すフラグ(flgj=1)と、反転ビットの現在の値qj(今回の反転前の値)とを示す信号を含む。ただし、いずれのビットも反転されないこともある。いずれのビットも反転されない場合、選択回路部2は、flgj=0を出力する。
閾値生成部3は、ビット演算回路1a1,…,1aK,…,1aNの各々に対し、ビットの反転可否を判定する際に用いられる閾値を生成する。ビット演算回路1a1,…,1aK,…,1aNの各々に当該閾値を示す信号を出力する。後述するように、閾値生成部3は、閾値の生成に、温度を示すパラメータ(温度パラメータ)Tと乱数とを用いる。閾値生成部3は、当該乱数を発生させる乱数発生器を有する。閾値生成部3は、ビット演算回路1a1,…,1aK,…,1aNの各々に対して個別に乱数発生器を有し、個別に閾値の生成と供給とを行うことが好ましい。ただし、閾値生成部3は、所定数のビット演算回路で乱数発生器を共用してもよい。
乱数生成部4は、乱数ビットを生成し、選択回路部2に出力する。乱数生成部4により生成された乱数ビットは、選択回路部2による反転ビットの選択に用いられる。
設定変更部5は、ビット演算回路1a1,…,1aK,…,1aNのうち、計算対象のイジングモデルの状態を表すビット列(スピンビット列)の第1のビット数(スピンビット数)の変更を行う。また、設定変更部5は、第1のビット数のビット演算回路の各々に対する、重み係数の第2のビット数の変更を行う。
ここで、第1のビット数(スピンビット数)は、問題(組合せ最適化問題)の規模に相当する。第2のビット数(重み係数のビット数)は、問題の精度に相当する。最適化問題演算装置101は、第1および第2のビット数について、設定変更部5への設定を制御することにより、任意のパーティションモードを設定することができる。
つぎに、ビット演算回路の回路構成を説明する。ビット演算回路1a1(index=0)を主に説明するが、他のビット演算回路も同様の回路構成で実現される(例えば、X番目(Xは1以上N以下の整数)のビット演算回路に対して、index=X-1とすればよい)。
ビット演算回路1a1は、記憶部11、精度切替回路12、反転判定部13、ビット保持部14、エネルギー変化計算部15および状態遷移判定部16を有する。
記憶部11は、例えば、レジスタやSRAM(Static Random Access Memory)などである。記憶部11は、自ビット(ここでは、index=0のビット)と他ビットとの間の重み係数を記憶する。ここで、スピンビット数(第1のビット数)Kに対して、重み係数の総数はK2である。記憶部11には、index=0のビットに対して、K個の重み係数W00,W01,…,W0,K-1が記憶される。ここで、重み係数は第2のビット数Lで表される。したがって、記憶部11では重み係数を格納するために、K×Lビットが所要される。なお、記憶部11は、ビット演算回路1a1の外部であって、演算ユニット102の内部に設けられてもよい(他のビット演算回路の記憶部も同様)。
精度切替回路12は、スピンビット列のいずれかのビットが反転されると反転されたビットに対する重み係数を自身の(ビット演算回路1a1の)記憶部11から読み出し、読み出した重み係数をエネルギー変化計算部15に出力する。すなわち、精度切替回路12は、選択回路部2から反転ビットの識別情報を受け付け、記憶部11から反転ビットと自ビットとの組に対応する重み係数を読み出して、エネルギー変化計算部15に出力する。
このとき、精度切替回路12は、設定変更部5により設定された第2のビット数で表される重み係数の読み出しを行う。精度切替回路12は、設定変更部5による第2のビット数の設定に応じて、記憶部11から読み出す係数の第2のビット数を変更する。
例えば、精度切替回路12は、記憶部11から所定ビット数のビット列を読み出すセレクタを有する。セレクタが読み出す所定ビット数が、第2のビット数よりも大きい場合、精度切替回路12は、当該セレクタにより反転ビットに対応する重み係数を含む単位ビット列を読み出し、読み出した単位ビット列から第2のビット数で表される重み係数を抽出する。あるいは、精度切替回路12は、セレクタが読み出す所定ビット数が、第2のビット数よりも小さい場合、当該セレクタにより読み出された複数のビット列を結合することで、第2のビット数で表される重み係数を記憶部11から抽出してもよい。
反転判定部13は、選択回路部2により出力されたindex=jとflgjとを示す信号を受け付け、当該信号に基づいて反転ビットとして自ビットが選択されたか否かを判定する。反転ビットとして自ビットが選択された場合(すなわち、index=jが自ビットを示し、flgjが反転可を示す場合)、反転判定部13は、ビット保持部14に記憶されたビットを反転させる。すなわち、ビット保持部14に保持されたビットが0の場合、当該ビットを1に変更する。また、ビット保持部14に保持されたビットが1の場合、当該ビットを0に変更する。
ビット保持部14は、1ビットを保持するレジスタである。ビット保持部14は、保持するビットをエネルギー変化計算部15および選択回路部2に出力する。
エネルギー変化計算部15は、記憶部11から読み出した重み係数を用いたイジングモデルのエネルギー変化値ΔE0を計算し、状態遷移判定部16に出力する。具体的には、エネルギー変化計算部15は、反転ビットの値(今回の反転前の値)を選択回路部2から受け付け、反転ビットが、1から0、または、0から1のどちらに反転するかに応じて、上記式(4)により、Δh0を計算する。そして、エネルギー変化計算部15は、前回のh0にΔh0を加算することで、h0を更新する。エネルギー変化計算部15は、h0を保持するレジスタを有し、当該レジスタにより更新後のh0を保持する。
さらに、エネルギー変化計算部15は、ビット保持部14より現在の自ビットを受け付け、自ビットが0であれば0から1へ、自ビットが1であれば1から0へ、反転する場合のイジングモデルのエネルギー変化値ΔE0を、上記式(2)により計算する。エネルギー変化計算部15は、計算したエネルギー変化値ΔE0を、状態遷移判定部16に出力する。
状態遷移判定部16は、エネルギー変化計算部15によるエネルギー変化の計算に応じて、自ビットの反転可否を示す信号flg0を選択回路部2に出力する。具体的には、状態遷移判定部16は、エネルギー変化計算部15により計算されたエネルギー変化値ΔE0を受け付け、閾値生成部3により生成された閾値との比較に応じて、自ビットの反転可否を判定する比較器である。ここで、状態遷移判定部16による判定について説明する。
シミュレーテッド・アニーリングでは、あるエネルギー変化ΔEを引き起こす状態遷移の許容確率p(ΔE,T)を下記式(5)のように決めれば、時刻(反復回数)無限大の極限で状態が最適解(基底状態)に到達することが知られている。
上記式(5)において、Tは、前述の温度パラメータTである。ここで、関数fとして、下記式(6)(メトロポリス法)、または、下記式(7)(ギブス法)が用いられる。
温度パラメータTは、例えば、下記式(8)で表される。すなわち、温度パラメータTは、反復回数tに対して対数的に減少する関数で与えられる。例えば、定数cは問題に応じて決定される。
ここで、T0は、初期温度値であり問題に応じて十分に大きくとることが望ましい。
上記式(5)で表される許容確率p(ΔE,T)を用いた場合、ある温度における状態遷移の十分な反復後に定常状態に達したとすると、当該状態はボルツマン分布に従って生成される。すなわち、各状態の占有確率は熱力学における熱平衡状態に対するボルツマン分布に従う。よって、ある温度でボルツマン分布に従った状態を生成し、その後、当該温度よりも低い温度でボルツマン分布に従った状態を生成し、というように徐々に温度を下げていくことで、各温度におけるボルツマン分布に従った状態を追えることになる。そして、温度0としたときに、温度0でのボルツマン分布により最低エネルギーの状態(基底状態)が高確率で実現される。この様子が材料を焼き鈍したときの状態変化とよく似ているため、この方法はシミュレーテッド・アニーリングと呼ばれる。このとき、エネルギーが上がる状態遷移が確率的に起こることは、物理学における熱励起に相当する。
例えば、許容確率p(ΔE,T)でエネルギー変化ΔEを引き起こす状態遷移を許容することを示すフラグ(flg=1)を出力する回路は、f(-ΔE/T)と、区間[0,1)の値をとる一様乱数uとの比較に応じた値を出力する比較器により実現できる。
ただし、次のような変形を行っても同じ機能を実現可能である。2つの数に同じ単調増加関数を作用させても大小関係は変化しない。したがって、比較器の2つの入力に同じ単調増加関数を作用させても比較器の出力は変わらない。例えば、f(-ΔE/T)に作用させる単調増加関数としてf(-ΔE/T)の逆関数f-1(-ΔE/T)、一様乱数uに作用させる単調増加関数としてf-1(-ΔE/T)の-ΔE/Tをuとしたf-1(u)を用いることができる。その場合、上記の比較器と同様の機能を有する回路は、-ΔE/Tがf-1(u)より大きいとき1を出力する回路でよい。さらに、温度パラメータTが正であることから、状態遷移判定部16は、-ΔEがT・f-1(u)より大きいとき(あるいは、ΔEが-(T・f-1(u))より小さいとき)、flg0=1を出力する回路でよい。
閾値生成部3は、一様乱数uを生成し、上記のf-1(u)の値に変換する変換テーブルを用いて、f-1(u)の値を出力する。メトロポリス法が適用される場合、f-1(u)は、下記式(9)で与えられる。また、ギブス法が適用される場合、f-1(u)は、下記式(10)で与えられる。
変換テーブルは、例えば、閾値生成部3に接続されたRAM(Random Access Memory)、フラッシュメモリなどのメモリ(図示を省略している)に記憶される。閾値生成部3は、温度パラメータTと、f-1(u)との積(T・f-1(u))を閾値として出力する。ここで、T・f-1(u)は、熱励起エネルギーに相当する。
なお、選択回路部2から状態遷移判定部16に対してflgjを入力し、当該flgjが状態遷移を許容しないことを示すとき(つまり状態遷移が生じないとき)、状態遷移判定部16により-ΔE0にオフセット値を加算してから、閾値との比較を行ってもよい。また、状態遷移判定部16は、状態遷移が生じないことが継続する場合に、加算するオフセット値を増加させてもよい。一方、状態遷移判定部16は、flgjが、状態遷移を許容することを示すとき(つまり状態遷移が生じるとき)には、オフセット値を0にする。-ΔE0へのオフセット値の加算やオフセット値の増加により、状態遷移が許容されやすくなり、現在の状態が局所解にある場合、その局所解からの脱出が促進される。
こうして、温度パラメータTが徐々に小さく設定され、例えば、温度パラメータTの値を所定回数、小さくした場合、(または、温度パラメータTが最小値に達した場合)のスピンビット列が、ビット演算回路1a1,…,1aKに保持される。演算ユニット102は、温度パラメータTの値を所定回数、小さくした場合、(または、温度パラメータTが最小値に達した場合)のスピンビット列を解として出力する。演算ユニット102は、温度パラメータTやビット演算回路1a1,…,1aKの各々の記憶部に対する重み係数の設定およびビット演算回路1a1,…,1aKに保持されるスピンビット列を読み出して出力する制御部(図示を省略している)を有してもよい。
演算ユニット102では、設定変更部5により、イジングモデルのスピンビット数(第1のビット数)と、ビット間の重み係数のビット数(第2のビット数)とを変更可能である。ここで、スピンビット数は、イジングモデルを実現する回路の規模(問題の規模)に相当する。規模が大きいほど、多数の組合せ候補をもつ組合せ最適化問題に演算ユニット102を適用できる。また、重み係数のビット数は、ビット間の相互関係の表現の精度(問題における条件表現の精度)に相当する。精度が高いほど、スピン反転時のエネルギー変化ΔEに対する条件を詳細に設定できる。ある問題では、スピンビット数が大きく、重み係数を表すビット数が小さいことがある。あるいは、別の問題では、スピンビット数が小さく、重み係数を表すビット数が大きいこともある。問題に応じて、各問題に適合した最適化装置を個別に製造することは非効率である。
そこで、演算ユニット102では、設定変更部5によりイジングモデルの状態を表すスピンビット数と重み係数のビット数との設定を可能とすることで、規模と精度とを可変にできる。すなわち、パーティションモードを変更することができる。その結果、1つの演算ユニット102において、問題に合った規模および精度を実現できる。
より具体的には、ビット演算回路1a1,…,1aK,…,1aNの各々は、精度切替回路を有し、当該精度切替回路によって、設定変更部5の設定に応じて、自身の記憶部から読み出す重み係数のビット長を切り替える。また、選択回路部2は、設定変更部5により設定されたスピンビット数に相当する数(例えば、K個)のビット演算回路に対して、反転ビットを示す信号を入力し、当該数(K個)のビット演算回路に対応するビットの中から反転ビットを選択する。これにより、問題に応じた規模および精度を備えた最適化装置を個別に製造しなくても、1つの演算ユニット102によって、問題に応じた規模および精度でイジングモデルを実現できる。
ここで、前述のように、ビット演算回路1a1,…,1aNの各々が備える記憶部は、SRAMなどの比較的小容量の記憶デバイスにより実現される。このため、スピンビット数が増えると、重み係数のビット数によっては、記憶部の容量が不足することも考えられる。一方、演算ユニット102によれば、設定変更部5により、記憶部の容量の制限を満たすように、規模および精度を設定することも可能になる。具体的には、設定変更部5は、スピンビット数が増えるほど、重み係数のビット数を減らすように設定することが考えられる。また、設定変更部5は、重み係数のビット数が増えるほど、スピンビット数を減らすように設定することも考えられる。
また、上記の例では、N個のビット演算回路のうちのK個を、イジングモデルに使用するものとした。演算ユニット102は、N-K≧Kの場合、残りのN-K個のビット演算回路のうちのK個のビット演算回路により、前述のイジングモデルと同じイジングモデルを実現し、両イジングモデルにより同一問題処理の並列度を高めて計算を高速化してもよい。
さらに、演算ユニット102は、残りのN-K個のビット演算回路のうちの一部を用いて、他の問題に対応する他のイジングモデルを実現し、前述のイジングモデルで表される問題と並列に、当該他の問題の演算を行ってもよい。
あるいは、演算ユニット102は、残りのN-K個のビット演算回路を不使用としてもよい。その場合、選択回路部2は、残りのN-K個のビット演算回路により出力されるフラグflgを全て、強制的に0に設定し、残りのN-K個のビット演算回路に対応するビットが反転候補として選択されないようにしてもよい。
(情報処理システム300のシステム構成例)
つぎに、図1に示した最適化問題演算装置101を含む情報処理システム300のシステム構成例について説明する。
図3は、情報処理システム300のシステム構成例を示す説明図である。図3において、情報処理システム300は、最適化問題演算装置101と、クライアント装置301と、を含む。情報処理システム300において、最適化問題演算装置101およびクライアント装置301は、有線または無線のネットワーク310を介して接続される。ネットワーク310は、例えば、LAN(Local Area Network)、WAN(Wide Area Network)、インターネットなどである。
最適化問題演算装置101は、組合せ最適化問題をイジングモデルに置き換え、イジングモデルの基底状態の探索により、組合せ最適化問題を解く機能を提供する。最適化問題演算装置101は、例えば、クラウドコンピューティングのサーバや、オンプレミスのサーバである。
クライアント装置301は、ユーザにより使用されるクライアントコンピュータであり、例えば、ユーザが解くべき問題の、最適化問題演算装置101への入力に用いられる。クライアント装置301は、例えば、PC(Personal Computer)、タブレット型PCなどである。
(最適化問題演算装置101のハードウェア構成例)
図4は、最適化問題演算装置101のハードウェア構成例を示すブロック図である。図4において、最適化問題演算装置101は、CPU(Central Processing Unit)401と、メモリ402と、ディスクドライブ403と、ディスク404と、通信I/F(Interface)405と、可搬型記録媒体I/F406と、可搬型記録媒体407と、複数の最適化装置408と、予備装置409と、を有する。また、各構成部は、バス400によってそれぞれ接続される。バス400は、例えば、PCIe(Peripheral Component Interconnect Express)バスである。
ここで、CPU401は、最適化問題演算装置101の全体の制御を司る。CPU401は、複数のコアを有していてもよい。メモリ402は、例えば、ROM(Read Only Memory)、RAMおよびフラッシュROMなどを有する。具体的には、例えば、フラッシュROMがOS(Operating System)のプログラムを記憶し、ROMがアプリケーションプログラムを記憶し、RAMがCPU401のワークエリアとして使用される。メモリ402に記憶されるプログラムは、CPU401にロードされることで、コーディングされている処理をCPU401に実行させる。
ディスクドライブ403は、CPU401の制御に従ってディスク404に対するデータのリード/ライトを制御する。ディスク404は、ディスクドライブ403の制御で書き込まれたデータを記憶する。ディスク404としては、例えば、磁気ディスク、光ディスクなどが挙げられる。
通信I/F405は、通信回線を通じてネットワーク310に接続され、ネットワーク310を介して外部のコンピュータ(例えば、図3に示したクライアント装置301)に接続される。そして、通信I/F405は、ネットワーク310と装置内部とのインターフェースを司り、外部のコンピュータからのデータの入出力を制御する。通信I/F405には、例えば、モデムやLANアダプタなどを採用することができる。
可搬型記録媒体I/F406は、CPU401の制御に従って可搬型記録媒体407に対するデータのリード/ライトを制御する。可搬型記録媒体407は、可搬型記録媒体I/F406の制御で書き込まれたデータを記憶する。可搬型記録媒体407としては、例えば、CD(Compact Disc)-ROM、DVD(Digital Versatile Disk)、USB(Universal Serial Bus)メモリなどが挙げられる。
最適化装置408は、CPU401の制御に従って、イジングモデルの基底状態を探索する。最適化装置408は、図1に示した演算ユニット102の一例である。$1~$Mは、最適化装置408を識別する識別子である(Mは、2以上の自然数)。以下の説明では、最適化装置408($1)~408($M)のうちの任意の最適化装置408を「最適化装置408($j)」と表記する場合がある(j=1,2,…,M)。
予備装置409は、最適化装置408と同じ構成の予備のユニットである。予備装置409は、CPU401の制御に従って起動され、最適化装置408として動作する。図4の例では、予備装置409を1台のみ表示したが、最適化問題演算装置101は、2台以上の予備装置409を有していてもよい。
なお、最適化問題演算装置101は、上述した構成部のほかに、例えば、SSD(Solid State Drive)、入力装置、ディスプレイ等を有することにしてもよい。また、最適化問題演算装置101は、上述した構成部のうち、例えば、ディスクドライブ403、ディスク404、可搬型記録媒体I/F406、可搬型記録媒体407を有していなくてもよい。また、図3に示したクライアント装置301については、例えば、CPU、メモリ、通信I/F、入力装置、ディスプレイなどを有する。
(情報処理システム300におけるハードウェアの関係)
図5は、情報処理システム300におけるハードウェアの関係の一例を示す説明図である。図5において、クライアント装置301は、ユーザプログラム501を実行する。ユーザプログラム501は、最適化問題演算装置101への各種データ(例えば、解くべき問題の内容や最適化装置408の利用スケジュールなどの動作条件)の入力、および、最適化装置408による演算結果の表示などを行う。
CPU401は、ライブラリ502およびドライバ503を実行するプロセッサ(演算部)である。ライブラリ502のプログラム、および、ドライバ503のプログラムは、例えば、メモリ402(図4参照)に格納されている。
ライブラリ502は、ユーザプログラム501により入力される各種データを受け付け、ユーザが解くべき問題を、イジングモデルの最低エネルギー状態を探索する問題に変換する。ライブラリ502は、変換後の問題に関する情報(例えば、スピンビット数、重み係数を表すビット数、重み係数の値、温度パラメータの初期値など)を、ドライバ503に提供する。また、ライブラリ502は、最適化装置408($j)による解の探索結果をドライバ503から取得し、当該探索結果をユーザに分かり易い結果情報(例えば、結果表示画面の情報)に変換して、ユーザプログラム501に提供する。
ドライバ503は、ライブラリ502から提供された情報を最適化装置408($j)に供給する。また、ドライバ503は、イジングモデルによる解の探索結果を最適化装置408($j)から取得し、ライブラリ502に提供する。
最適化装置408($j)は、ハードウェアとして、制御部504およびLFB(Local Field Block)505を有する。
制御部504は、ドライバ503から受け付けたLFB505の動作条件を記憶するRAMを有し、当該動作条件に基づいてLFB505による演算を制御する。また、制御部504は、LFB505が備える各種のレジスタへの初期値の設定、SRAMへの重み係数の格納、および、演算終了後のスピンビット列(探索結果)の読み出しなどを行う。制御部504は、例えば、FPGAなどによって実現される。
LFB505は、複数のLFE(Local Field Element)を有する。LFEは、スピンビットに対応する単位素子である。1つのLFEは、1つのスピンビットに対応する。後述するように、最適化装置408($j)は、例えば、複数のLFBを有する。
(組合せ最適化問題の一例)
つぎに、組合せ最適化問題の一例について説明する。
図6は、組合せ最適化問題の一例を示す説明図である。組合せ最適化問題の一例として、巡回セールスマン問題を考える。ここでは、A都市、B都市、C都市、D都市、E都市の5つの都市を、最少コスト(距離や料金など)で回る経路を求めるとする。グラフ601は、都市をノード、都市間の移動をエッジとした1つの経路を示す。この経路は、例えば、行を回る順番、列を都市に対応付けた行列602で表される。行列602は、行の小さい順に、ビット「1」が設定された都市を回ることを示す。
さらに、行列602は、スピンビット列に相当するバイナリ値603に変換できる。行列602の例では、バイナリ値603は、5×5=25ビットとなる。バイナリ値603(スピンビット列)のビット数は、巡回対象の都市が増すほど増加する。すなわち、組合せ最適化問題の規模が大きくなれば、より多くのスピンビットが所要され、スピンビット列のビット数(規模)が大きくなる。
つぎに、最少エネルギーとなるバイナリ値の探索例を説明する。
図7は、最少エネルギーとなるバイナリ値の探索例を示す説明図である。図7において、まず、バイナリ値702のうちの1ビットを反転させる前(スピン反転前)のエネルギーをEinitとする。
最適化装置408は、バイナリ値702の任意の1ビットを反転させたときのエネルギー変化量ΔEを計算する。グラフ701は、横軸をバイナリ値、縦軸をエネルギーとして、エネルギー関数に応じた1ビット反転に対するエネルギー変化を例示している。最適化装置408は、例えば、上記式(2)によりΔEを求める。
最適化装置408は、上記の計算を、バイナリ値702の全ビットに適用し、各々のビットの反転に対して、エネルギー変化量ΔEを計算する。例えば、バイナリ値702のビット数がNのとき、反転パターン704はN個になる。グラフ701は、反転パターンごとのエネルギー変化の様子を例示する。
最適化装置408は、反転パターンごとのΔEに基づいて、反転条件(閾値とΔEとの所定の判定条件)を満たした反転パターン704のうちからランダムで1つを選択する。最適化装置408は、選択された反転パターンに対応するΔEを、スピン反転前のEinitに加減算し、スピン反転後のエネルギー値Eを計算する。最適化装置408は、求めたエネルギー値EをEinitとし、スピン反転後のバイナリ値705を用いて、上記の手順を繰り返し行う。
ここで、前述のように、上記式(2),(3)で用いられるWの1要素は、ビット間の相互作用の大きさを示すスピン反転の重み係数である。重み係数を表すビット数を精度と呼ぶ。精度が高いほど、スピン反転時のエネルギー変化量ΔEに対する条件を詳細に設定できる。例えば、Wの総サイズは、スピンビット列に含まれる2つのビットの全結合に対して「精度×スピンビット数×スピンビット数」である。一例として、スピンビット数が8k(=8192)の場合、Wの総サイズは、「精度×8k×8k」ビットとなる。
(LFB505の回路構成例)
つぎに、図5で例示した探索を行うLFB505の回路構成例を説明する。最適化装置408($j)は、例えば、8個のLFB505を有する。
図8は、LFBの回路構成例を示す説明図である。図8において、LFB505は、LFE51a1,51a2,…,51an、ランダムセレクタ部52、閾値生成部53、乱数生成部54、モード設定レジスタ55、加算器56、および、E格納レジスタ57を有する。
LFE51a1,51a2,…,51anの各々は、スピンビットの1ビットとして用いられる。nは、2以上の整数であり、LFB505が備えるLFEの数を示す。LFE51a1,51a2,…,51anの各々には、LFEの識別情報(index)が対応付けられている。LFE51a1,51a2,…,51anの各々に対して、index=0,1,…,n-1である。LFE51a1,51a2,…,51anは、図2に示したビット演算回路1a1,…,1aNの一例である。
以下では、LFE51a1の回路構成を説明する。LFE51a2,…,51anも、LFE51a1と同様の回路構成により実現される。LFE51a2,…,51anの回路構成の説明については、以下の説明における各要素の符号の末尾の「a1」の部分を、「a2」,…,「an」の各々に置換して(例えば、「60a1」の符号を「60an」のように置換して)読み替えればよい。また、h,q,ΔE,Wなどの各値の添え字についても、「a2」,…,「an」の各々に対応する添え字に置換して読み替えればよい。
LFE51a1は、SRAM60a1、精度切替回路61a1、Δh生成部62a1、加算器63a1、h格納レジスタ64a1、反転判定部65a1,ビット格納レジスタ66a1、ΔE生成部67a1、判定部68a1を有する。
SRAM60a1は、重み係数Wを格納する。SRAM60a1は、図2に示した記憶部11に対応する。SRAM60a1には、全スピンビットの重み係数Wのうち、LFE51a1で使用される分だけ格納される。このため、スピンビット数をK(Kは2以上n以下の整数)とすると、SRAM60a1に格納される全重み係数のサイズは、「精度×K」ビットとなる。図8では、一例として、スピンビット数K=nの場合を例示している。この場合、SRAM60a1には、重み係数W00,W01,…,W0,n-1が格納される。
精度切替回路61a1は、反転ビットの識別情報であるindexと反転可を示すフラグFとをランダムセレクタ部52から取得し、反転ビットに対応する重み係数をSRAM60a1から抽出する。精度切替回路61a1は、抽出した重み係数を、Δh生成部62a1に出力する。例えば、精度切替回路61a1は、ランダムセレクタ部52によりSRAM60a1に格納されたindexとフラグFとを、SRAM60a1から取得してもよい。あるいは、精度切替回路61a1は、ランダムセレクタ部52からindexとフラグFとの供給を受ける信号線を有してもよい(図示を省略している)。
ここで、精度切替回路61a1は、モード設定レジスタ55に設定された重み係数のビット数(精度)の設定を受け付け、当該設定に応じて、SRAM60a1から読み出す重み係数のビット数を切り替える。
具体的には、精度切替回路61a1は、SRAM60a1から所定の単位ビット数のビット列(単位ビット列)を読み出すセレクタを有する。精度切替回路61a1は、当該セレクタにより反転ビットに対応する重み係数を含むビット数rの単位ビット列を読み出す。例えば、当該セレクタが読み出す単位ビット数rが、重み係数のビット数zよりも大きい場合、精度切替回路61a1は、読み出したビット列に対して、反転ビットに対応する重み係数を示すビット部分をLSB(Least Significant Bit)側にシフトさせ、それ以外のビット部分に0を代入することで、重み係数の読み出しを行う。あるいは、単位ビット数rが、モード設定レジスタ55により設定されたビット数zより小さい場合も考えられる。この場合、精度切替回路61a1は、当該セレクタにより読み出された複数の単位ビット列を結合することで、設定されたビット数zでの重み係数を抽出してもよい。
なお、精度切替回路61a1は、LFE51a2が備えるSRAM60a2にも接続される。後述するように、精度切替回路61a1は、SRAM60a2から重み係数を読み出すことも可能である。
Δh生成部62a1は、ランダムセレクタ部52から反転ビットの現在のビット値(今回の反転前のビット値)を受け付け、精度切替回路61a1から取得した重み係数を用いて、上記式(4)により、ローカルフィールドh0の変化量Δh0を計算する。Δh生成部62a1は、Δh0を加算器63a1に出力する。
加算器63a1は、h格納レジスタ64a1に格納されたローカルフィールドh0にΔh0を加算し、h格納レジスタ64a1に出力する。
h格納レジスタ64a1は、図示しないクロック信号に同期して、加算器63a1が出力する値(ローカルフィールドh0)を取り込む。h格納レジスタ64a1は、例えば、フリップフロップである。なお、h格納レジスタ64a1に格納されるローカルフィールドh0の初期値は、バイアス係数b0である。当該初期値は、制御部504により設定される。
反転判定部65a1は、反転ビットのindex=jと、反転可否を示すフラグFjとをランダムセレクタ部52から受け付け、自ビットが反転ビットとして選択されたか否かを判定する。自ビットが反転ビットとして選択された場合、反転判定部65a1は、ビット格納レジスタ66a1に格納されたスピンビットを反転させる。
ビット格納レジスタ66a1は、LFE51a1に対応するスピンビットを保持する。ビット格納レジスタ66a1は、例えば、フリップフロップである。ビット格納レジスタ66a1に格納されたスピンビットは、反転判定部65a1により反転される。ビット格納レジスタ66a1は、ΔE生成部67a1およびランダムセレクタ部62にスピンビットを出力する。
ΔE生成部67a1は、h格納レジスタ64a1のローカルフィールドh0およびビット格納レジスタ66a1のスピンビットに基づいて、自ビットの反転に応じたイジングモデルのエネルギー変化量ΔE0を、上記式(2)により計算する。ΔE生成部67a1は、エネルギー変化量ΔE0を、判定部68a1およびランダムセレクタ部52に出力する。
判定部68a1は、ΔE生成部67a1により出力されたエネルギー変化量ΔE0と、閾値生成部53により生成された閾値との比較により、自ビットの反転を許容するか否かを示す(自ビットの反転可否を示す)フラグF0を、ランダムセレクタ部52に出力する。具体的には、判定部68a1は、ΔE0が閾値-(T・f-1(u))より小さいときF0=1(反転可)を出力し、ΔE0が閾値-(T・f-1(u))以上のときF0=0(反転不可)を出力する。ここで、f-1(u)は、適用法則に応じて、上記式(9),(10)のいずれかで与えられる関数である。また、uは、区間[0,1]の一様乱数である。
ランダムセレクタ部52は、LFE51a1,51a2,…,51anの各々から、エネルギー変化量、スピンビットの反転可否を示すフラグおよびスピンビットを受け付け、反転可であるスピンビットのうち反転させるビット(反転ビット)を選択する。
ランダムセレクタ部52は、選択した反転ビットの現在のビット値(ビットqj)を、LFE51a1,51a2,…,51anが備えるΔh生成部62a1,62a2,…,62anに供給する。ランダムセレクタ部52は、図2に示した選択回路部2の一例である。
ランダムセレクタ部52は、反転ビットのindex=jと、反転可否を示すフラグFjとを、LFE51a1,51a2,…,51anが備えるSRAM60a1,60a2,…,60anに出力する。なお、ランダムセレクタ部52は、前述のように、反転ビットのindex=jと、反転可否を示すフラグFjとを、LFE51a1,51a2,…,51anが備える精度切替回路61a1,61a2,…,61anに出力してもよい。
また、ランダムセレクタ部52は、反転ビットのindex=jと、反転可否を示すフラグFjとを、LFE51a1,51a2,…,51anが備える反転判定部65a1,65a2,…,65anに供給する。さらに、ランダムセレクタ部52は、選択した反転ビットに対応するΔEjを、加算器56に供給する。
ここで、ランダムセレクタ部52は、あるイジングモデルにおけるスピンビット数(すなわち、使用するLFEの数)の設定を、モード設定レジスタ55から受け付ける。例えば、ランダムセレクタ部52は、indexの小さい方から順に、設定されたスピンビット数に相当する数のLFEを使用して、解の探索が行われるようにする。例えば、ランダムセレクタ部52は、n個のLFEのうち、K個のLFEを用いる場合、LFE51a1,…,LFE51aKのLFEに対応するスピンビット列から反転ビットを選択する。このとき、ランダムセレクタ部52は、例えば、使用しないn-K個のLFE51a(K-1),…,51anの各々から出力されるフラグFを、強制的に0に設定することが考えられる。
閾値生成部53は、LFE51a1,51a2,…,51anが備える判定部68a1,68a2,…,68anに対して、エネルギー変化量ΔEとの比較に用いられる閾値を生成し、供給する。前述のように、閾値生成部53は、温度パラメータTと、区間[0,1]の一様乱数uと、上記式(9)または上記式(10)で示されるf-1(u)とを用いて、閾値を生成する。閾値生成部53は、例えば、LFEごとに個別に、乱数発生器を有し、LFEごとの乱数uを用いて閾値を生成する。ただし、いくつかのLFEで乱数発生器が共有されてもよい。温度パラメータTの初期値やシミュレーテッド・アニーリングにおける温度パラメータTの減少サイクルや減少量などは、制御部504によって制御される。
乱数生成部54は、ランダムセレクタ部52における反転ビットの選択に用いられる乱数ビットを生成し、ランダムセレクタ部52に供給する。
モード設定レジスタ55は、LFE51a1,51a2,…,51anが備える精度切替回路61a1,61a2,…,61anに対して、重み係数のビット数(すなわち、問題の精度)を示す信号を供給する。また、モード設定レジスタ55は、ランダムセレクタ部52に対して、スピンビット数(すなわち、問題の規模)を示す信号を供給する。モード設定レジスタ55に対するスピンビット数や重み係数のビット数の設定は、制御部504により行われる。モード設定レジスタ55は、図2に示した設定変更部5の一例である。
加算器56は、ランダムセレクタ部52により出力されたエネルギー変化量ΔEjを、E格納レジスタ57に格納されたエネルギー値Eに加算し、E格納レジスタ57に出力する。
E格納レジスタ57は、図示しないクロック信号に同期して、加算器56が出力するエネルギー値Eを取り込む。E格納レジスタ57は、例えば、フリップフロップである。なお、エネルギー値Eの初期値は、制御部504によって上記式(1)を用いて計算され、E格納レジスタ57に設定される。
例えば、解の探索にK個のLFEが用いられる場合、制御部504はビット格納レジスタ66a1,…,66aKの各スピンビットを読み出すことで、スピンビット列を得る。
図9は、ランダムセレクタ部の回路構成例を示す説明図である。図9において、ランダムセレクタ部52は、フラグ制御部52aと複数段にわたってツリー状に接続された複数の選択回路とを有する。
フラグ制御部52aは、モード設定レジスタ55のスピンビット数の設定に応じて、初段の選択回路52a1,52a2,52a3,52a4,…,52aqの各々に入力されるフラグの値を制御する。図9では、選択回路52aqの1つの入力(LFE51anの出力に相当)に対するフラグの値を制御する部分回路52xnが例示されている。部分回路52xnのフラグ設定部52ynは、使用しないLFE51anから出力されるフラグFnを強制的に0に設定するスイッチである。
初段の選択回路52a1,52a2,52a3,52a4,…,52aqの各々には、LFE51a1,51a2,…,51anのそれぞれが出力する変数qiとFiとΔEiの組が2組ずつ入力される。例えば、選択回路52a1には、LFE51a1が出力する変数q0とF0とΔE0による組と、LFE51a2が出力する変数q1とF1とΔE1による組とが入力される。また、選択回路52a2には、変数q2とF2とΔE2による組と変数q3とF3とΔE3による組が入力され、選択回路52a3には、変数q4とF4とΔE4による組と変数q5とF5とΔE5による組が入力される。さらに、選択回路52a4には、変数q6とF6とΔE6による組と変数q7とF7とΔE7による組が入力され、選択回路52aqには、変数qn-2とFn-2とΔEn-2による組と変数qn-1とFn-1とΔEn-1による組が入力される。
そして、選択回路52a1,…,52aqの各々は、入力された2組の変数qiとFiとΔEiと、乱数生成部54が出力する1ビット乱数に基づいて、一方の組の変数qiとFiとΔEiを選択する。このとき、選択回路52a1,…,52aqの各々は、Fiが1である組を優先的に選択し、両方の組が1の場合には1ビット乱数に基づいていずれか一方の組を選択する(他の選択回路も同様)。ここで、乱数生成部54は、1ビット乱数を選択回路ごとに個別に生成し、各選択回路に供給する。また、選択回路52a1,…,52aqの各々は、どちらの組の変数qiとFiとΔEiを選択したかを示す1ビットの識別値を生成し、選択した変数qiとFiとΔEiと識別値とを含む信号(状態信号と言う)を出力する。なお、初段の選択回路52a1~52aqの数は、LFE51a1,…,51anの数の1/2、つまり、n/2である。
2段目の選択回路52b1,52b2,…,52brの各々には、選択回路52a1,…,52aqが出力する状態信号が2つずつ入力される。例えば、選択回路52b1には、選択回路52a1,52a2が出力する状態信号が入力され、選択回路52b2には、選択回路52a3,52a4が出力する状態信号が入力される。
そして、選択回路52b1,…,52brの各々は、2つの状態信号と、乱数生成部54が出力する1ビット乱数に基づいて、2つの状態信号のいずれか一方を選択する。また、選択回路52b1,…,52brのそれぞれは、選択した状態信号に含まれる識別値についていずれの状態信号を選択したかを示すように1ビットを付加して更新し、選択した状態信号を出力する。
3段目以降の選択回路においても同様の処理が行われ、各段の選択回路で1ビットずつ識別値のビット幅が増えていき、最後段の選択回路31pから、ランダムセレクタ部52の出力である状態信号が出力される。ランダムセレクタ部52が出力する状態信号に含まれる識別値が、2進数で表された、反転ビットを示すindexである。
ただし、ランダムセレクタ部52は、各LFEからフラグFとともに当該LFEに対応するindexを受け付け、変数qiとFiとΔEiと同様に、各選択回路によりindexの選択を行うことで、反転ビットに対応するindexを出力してもよい。この場合、各LFEは、index格納用のレジスタを有し、当該レジスタからランダムセレクタ部52へindexを出力する。
このように、ランダムセレクタ部52は、LFE51a1,…,51anのうち、設定されたスピンビット数KのLFE51a1,…,51aK以外の他のLFE51a(K+1),…,51anにより出力された反転可否を示す信号を強制的に反転不可に設定する。ランダムセレクタ部52は、LFE51a1,…,51aKにより出力された反転可否を示す信号およびLFE51a(K+1),…,51anに対して設定した反転不可を示す信号に基づいて、反転ビットを選択する。ランダムセレクタ部52は、反転ビットを示す信号を、ビット演算回路51a1,…,51aKに加えてLFE51a(K+1),…,51anにも出力する。
こうして、フラグ制御部52aの制御により、使用されないLFEのフラグFが強制的に0に設定されるので、スピンビット列に使用されないLFEに対応するビットを反転候補から除外できる。
つぎに、LFE51a1,LFE51a2,…,51anの各々のSRAM60a1,60a2,…,60anに対する重み係数の格納例を説明する。まず、SRAM容量に対する規模と精度とのトレードオフ関係について説明する。
図10は、規模と精度とのトレードオフ関係の例を示す説明図である。図10において、グラフ1000は、LFEごとのSRAMにおいて重み係数の格納のための容量の上限が128K(キロ)ビットである場合の規模と精度とのトレードオフ関係を示している。ここで、1K=1024とする。グラフ1000の横軸は規模(Kビット)であり、縦軸は精度(ビット)である。なお、一例として、n=8192であるとする。
この場合、規模1Kビットに対して、精度は最大128ビットである。また、規模2Kビットに対して、精度は最大64ビットである。規模4Kビットに対して、精度は最大32ビットである。規模8Kビットに対して、精度は最大16ビットである。
そこで、最適化装置408($j)では、例えば、次の4つのモードを利用可能にするとする。各モードは、パーティションモードに対応する。第1のモードは、規模1Kビット/精度128ビットのモードである。第2のモードは、規模2Kビット/精度64ビットのモードである。第3のモードは、規模4Kビット/精度32ビットのモードである。第4のモードは、規模8Kビット/精度16ビットのモードである。
つぎに、これら4種のモードの各々に応じた重み係数の格納例を説明する。重み係数は、制御部504により、SRAM60a1,60a2,…,60anの各々に格納される。なお、精度切替回路61a1,61a2,…,61anの各々のセレクタによりSRAM60a1,60a2,…,60anから読み出される単位ビット数は、一例として、128ビットであるとする。
図11は、重み係数の格納例を示す説明図(その1)である。第1のモード(規模1Kビット/精度128ビット)を用いる場合、重み係数Wは、下記式(11)で表される。
データ1d1,1d2,…,1dsは、第1のモード(規模1Kビット/精度128ビット)を用いる場合のSRAM60a1,60a2,…,60asに対する重み係数の格納例を示す。ここで、s=1024である。データ1d1,1d2,…,1dsは、各々、SRAM60a1,60a2,…,60asに格納される。このモードでは、LFEは1k個(=1024個)使用される。なお、図中、LFE51a1,…,51asを、各々の識別番号を用いて、LFE0,…,LFE1023のように表記することがある(以降の図も同様)。
データ1d1は、LFE51a1(LFE0)のSRAM60a1に格納されるW0,0~W0,1023を示す。データ1d2は、LFE51a2(LFE1)のSRAM60a2に格納されるW1,0~W1,1023を示す。データ1dsは、LFE51as(LFE1023)のSRAM60asに格納されるW1023,0~W1023,1023を示す。1つの重み係数Wijのビット数は128ビットである。
図12は、重み係数の格納例を示す説明図(その2)である。第2のモード(規模2Kビット/精度64ビット)を用いる場合、重み係数Wは、下記式(12)で表される。
データ2d1,2d2,…,2dtは、第2のモード(規模2Kビット/精度64ビット)を用いる場合のSRAM60a1,60a2,…,60atに対する重み係数の格納例を示す。ここで、t=2048である。データ2d1,2d2,…,2dtは、各々、SRAM60a1,60a2,…,60atに格納される。このモードでは、LFEは2k個(=2048個)使用される。
データ2d1は、LFE51a1(LFE0)のSRAM60a1に格納されるW0,0~W0,2047を示す。データ2d2は、LFE51a2(LFE1)のSRAM60a2に格納されるW1,0~W1,2047を示す。データ2dtは、LFE51at(LFE2047)のSRAM60atに格納されるW2047,0~W2047,2047を示す。1つの重み係数Wijのビット数は64ビットである。
図13は、重み係数の格納例を示す説明図(その3)である。第3のモード(規模4kビット/精度32ビット)を用いる場合、重み係数Wは、下記式(13)で表される。
データ3d1,3d2,…,3duは、第3のモード(規模4Kビット/精度32ビット)を用いる場合のSRAM60a1,60a2,…,60auに対する重み係数の格納例を示す。ここで、u=4096である。データ3d1,3d2,…,3duは、各々、SRAM60a1,60a2,…,60auに格納される。このモードでは、LFEは4k個(=4096個)使用される。
データ3d1は、LFE51a1(LFE0)のSRAM60a1に格納されるW0,0~W0,4095を示す。データ3d2は、LFE51a2(LFE1)のSRAM60a2に格納されるW1,0~W1,4095を示す。データ3duは、LFE51au(LFE4095)のSRAM60auに格納されるW4095,0~W4095,4095を示す。1つの重み係数Wijのビット数は32ビットである。
図14は、重み係数の格納例を示す説明図(その4)である。第4のモード(規模8kビット/精度16ビット)を用いる場合、重み係数Wは、下記式(14)で表される。
データ4d1,4d2,…,4dnは、第4のモード(規模8Kビット/精度16ビット)を用いる場合のSRAM60a1,60a2,…,60anに対する重み係数の格納例を示す。ここで、n=8192である。データ4d1,4d2,…,4dnは、各々、SRAM60a1,60a2,…,60anに格納される。このモードでは、LFEは8k個(=8192個)使用される。
データ4d1は、LFE51a1(LFE0)のSRAM60a1に格納されるW0,0~W0,8191を示す。データ4d2は、LFE51a2(LFE1)のSRAM60a2に格納されるW1,0~W1,8191を示す。データ4dnは、LFE51an(LFE8191)のSRAM60anに格納されるW8191,0~W8191,8191を示す。1つの重み係数Wijのビット数は16ビットである。
(最適化装置408($j)の演算処理手順)
つぎに、最適化装置408($j)の演算処理手順について説明する。なお、問題に応じた初期値および動作条件は、最適化装置408($j)に入力される。初期値は、例えば、エネルギー値E、ローカルフィールドhi、スピンビットqi、温度パラメータTの初期値および重み係数Wなどを含む。また、動作条件は、1つの温度パラメータでの状態の更新回数N1、温度パラメータの変更回数N2および温度パラメータの下げ幅などを含む。制御部504は、入力された初期値および動作条件を、前述の各LFEのレジスタおよびSRAMに設定する。
図15は、最適化装置408($j)の演算処理手順の一例を示すフローチャートである。図15の説明では、index=iに対応するLFEをLFE51ax(1番目のLFEはLFE51a1であり、n番目のLFEは51anである)と表記する。LFE51axに含まれる各部についても、例えば、SRAM60axのように、符号の末尾に「x」を付して表記する。LFE51a1,…,LFE51anの各々による演算は並列に実行される。
図15のフローチャートにおいて、ΔE生成部67axは、h格納レジスタ64axに格納されたローカルフィールドhiおよびビット格納レジスタ66axに格納されたビットqiに基づいて、当該ビットqiを反転させた場合のエネルギー変化量ΔEiを生成する(ステップS1501)。ΔEiの生成には、上記式(2)が用いられる。
判定部68axは、ΔE生成部67axにより生成されたエネルギー変化量ΔEiと、閾値生成部53により生成された閾値(=-(T・f-1(u)))とを比較し、閾値>ΔEiであるか否かを判定する(ステップS1502)。ここで、閾値>ΔEiの場合(ステップS1502:Yes)、ステップS1503に処理が進む。閾値≦ΔEiの場合(ステップS1502:No)、ステップS1504に処理が進む。
判定部68axは、反転候補信号(Fi=1)をランダムセレクタ部52に出力する(ステップS1503)。そして、ステップS1505に処理が進む。
判定部68axは、非反転候補信号(Fi=0)をランダムセレクタ部52に出力する(ステップS1504)。そして、ステップS1505に処理が進む。
ステップS1505において、ランダムセレクタ部52は、LFE51a1,…,LFE51anの各々から出力された全反転候補(Fi=1であるLFEに対応するビット)から、反転ビットを1つ選択する。ランダムセレクタ部52は、選択した反転ビットに対応するindex=j、Fj、qjをLFE51a1,…,LFE51anに出力する。また、ランダムセレクタ部52は、選択した反転ビットに対応するΔEjを、加算器56に出力する。すると、次のステップS1506(エネルギー更新処理),S1507(状態更新処理)が並列に開始される。
加算器56は、反転ビットに対応するエネルギー変化量ΔEを、エネルギー値Eに加算することで、E格納レジスタ57に格納されたエネルギー値Eを更新する(ステップS1506)。すなわち、E=E+ΔEである。そして、エネルギー更新処理が終了する。
精度切替回路61axは、反転ビットに対応するindex=jとフラグFjとを取得し、当該反転ビットに対応する重み係数を含む単位ビット列をSRAM60axから読み出す(ステップS1507)。単位ビット列とは、精度切替回路61axのセレクタが、SRAM60axから一度に読み出すビット列の単位である。単位ビット列のビット数(単位ビット数)は、一例では、128ビットである(他の値でもよい)。この場合、ステップS1507ではSRAM60axから128ビットの単位ビット列が読み出される。
例えば、精度として、128/a(a=1,2,4,8)ビットが選択されている場合、精度切替回路61axは、SRAM60axの先頭(先頭を0番目とする)の単位ビット列から数えて「Integer(j/a)」番目の単位ビット列を読み出す。ここで、Integer(j/a)は、(j/a)の値から整数部を抽出する関数である。
精度切替回路61axは、ステップS1507で読み出された単位ビット列から、モード設定レジスタ55により設定されたモード選択に応じたビット数の重み係数(反転ビットqjに対応する重み係数)Wijを抽出する(ステップS1508)。例えば、精度切替回路61axは、128ビットの単位ビット列からzビットのビット列を抽出する場合、前述のように反転ビットに対応するzビットのビット範囲をLSB側へシフトし、それ以外の上位ビットに0を設定することで、zビットの重み係数を抽出する。
なお、精度切替回路61axは、ステップS1507で読み出した単位ビット列を、先頭から精度に応じたビット長の区画に分けたときに、反転ビットに対応するビット範囲が先頭(0番目)から何番目の区画に対応するかにより当該ビット範囲を特定する。
図12~図14の例によれば、精度64ビットの場合、jが偶数のときに0番目の区画、jが奇数のときに1番目の区画である。また、精度32ビットの場合、mod(j,4)=0のときに0番目の区画、mod(j,4)=1のときに1番目の区画、mod(j,4)=2のときに2番目の区画、mod(j,4)=3のときに3番目の区画である。ここで、mod(u,v)は、uをvで除したときの剰余を示す関数である。さらに、精度16ビットの場合も同様に、読み出した128ビットの単位ビット列の先頭から「mod(j,8)」番目の区画が、反転ビットに対応するビット範囲となる。なお、精度128ビットの場合、精度切替回路61axは、ステップS1507で読み出された128ビットの単位ビット列を、そのまま反転ビットに対応する重み係数とする。
上記の例では、128/a(a=1,2,4,8)ビットの精度に対し、ステップS1507で読み出された128ビットの単位ビット列の先頭から「mod(j,a)」番目の区画(1区画のサイズは128/aビット)が、反転ビットに対応する重み係数を示すビット範囲である。
Δh生成部62axは、反転ビットの反転方向と、精度切替回路61axにより抽出された重み係数Wijとに基づいて、Δhiを生成する(ステップS1509)。Δhiの生成には、上記式(4)が用いられる。また、反転ビットの反転方向は、ランダムセレクタ部52により出力される反転ビットqj(今回の反転前のビット)により判別される。
ステップS1510において、加算器63axは、Δh生成部62axにより生成されたΔhiを、h格納レジスタ64axに格納されたローカルフィールドhiに加算することで、h格納レジスタ64axに格納されたローカルフィールドhiを更新する。また、反転判定部65axは、ランダムセレクタ部52により出力されたindex=jおよびフラグFjに基づいて、自ビットが反転ビットとして選択されたか否かを判定する。反転判定部65axは、自ビットが反転ビットとして選択された場合、ビット格納レジスタ66axに格納されたスピンビットを反転させ、自ビットが反転ビットとして選択されなかった場合、ビット格納レジスタ66axのスピンビットを維持する。ここで、自ビットが反転ビットとして選択された場合とは、ランダムセレクタ部52により出力された信号について、index=j=i、かつ、Fj=1の場合である。
制御部504は、現在の温度パラメータTにおいて、LFE51a1,…,LFE51anに保持される各スピンビットの更新処理回数がN1に達したか(更新処理回数=N1であるか)否かを判定する(ステップS1511)。更新処理回数がN1に達した場合(ステップS1511:Yes)、ステップS1512に処理が進む。更新処理回数がN1に達していない場合(ステップS1511:No)、制御部504は、更新処理回数に1を加算して、ステップS1501に処理を進める。
制御部504は、温度パラメータTの変更回数がN2に達したか(温度変更回数=N2であるか)否かを判定する(ステップS1512)。温度変更回数がN2に達した場合(ステップS1512:Yes)、ステップS1514に処理が進む。温度変更回数がN2に達していない場合(ステップS1512:No)、制御部504は、温度変更回数に1を加算して、ステップS1513に処理を進める。
制御部504は、温度パラメータTを変更する(ステップS1513)。具体的には、制御部504は、動作条件に応じた下げ幅で、温度パラメータTの値を減少させる(温度を下げることに相当する)。そして、ステップS1501に処理が進む。
制御部504は、ビット格納レジスタ66axに格納されたスピンビットを読み出し、演算結果として出力する(ステップS1514)。具体的には、制御部504は、モード設定レジスタ55により設定されたスピンビット数Kに対応するビット格納レジスタ66a1,…,66aKの各々に格納されたスピンビットを読み出し、CPU401に出力する。すなわち、制御部504は、読み出したスピンビット列をCPU401に供給する。そして、演算処理が終了する。
なお、ステップS1505において、ランダムセレクタ部52は、モード設定レジスタ55の設定に応じて、使用されないLFEにより出力されるFの値を、強制的に0に設定することで、使用されないLFEをビット反転の候補から除外することができる。
最適化装置408($j)によれば、モード設定レジスタ55によりイジングモデルの状態を表すスピンビット数と重み係数のビット数との設定を可能とし、1チップの最適化装置408($j)において、任意のパーティションモードを実現できる。
より具体的には、精度切替回路61axは、モード設定レジスタ55の設定に応じて、SRAM60axから読み出す重み係数のビット長を切り替える。精度切替回路61axを用いることで、ステップS1508で示したように、精度切替回路61axのセレクタがSRAM60axから読み出す単位ビット数を変更せずに、種々の精度を実現できる。例えば、精度切替回路61axのセレクタによるSRAM60axからの単位ビット数分の読み出し用の信号線の作り変えを要さずに、精度を可変にできる。
また、ランダムセレクタ部52は、モード設定レジスタ55により設定されたスピンビット数に相当する数(例えば、K個)のLFEに対して、反転ビットを示す信号を入力し、当該数(K個)のLFEに対応するビットの中から反転ビットを選択する。ランダムセレクタ部52は、使用されないn-K個のLFEにも反転ビットを示す信号を入力するが、当該n-K個のLFEから出力されるフラグFを強制的に0(反転不可)に設定することで、使用されないLFEを反転ビットの選択候補から除外する。
これにより、問題に応じた規模および精度を備えた最適化装置を個別に製造しなくても、パーティションモードが異なる複数の最適化装置408を用意することによって、問題に応じた規模および精度でイジングモデルを実現できる。
つぎに、モード設定の他の例を説明する。例えば、最適化装置408($j)は、次のようにSRAM60a1,…,60anに重み係数を格納することで、前述の4種類のモードに加え、規模4kビット/精度64ビットの第5のモードを提供することもできる。
図16は、重み係数の格納例を示す説明図(その5)である。データ5d1,5d2,…,5dnは、第5のモード(規模4Kビット/精度64ビット)を用いる場合のSRAM60a1,60a2,…,60anに対する重み係数の格納例を示す。ここで、n=8192である。データ5d1,5d2,…,5dnは、各々、SRAM60a1,60a2,…,60anに格納される。このモードでは、スピンビット列として、LFEは4K個(=4096個)使用され、重み係数の格納のみの用途として、さらに4K個(=4096個)のLFEが使用される。
データ5d1は、LFE51a1(LFE0)のSRAM60a1に格納されるW0,0~W0,2047を示す。データ5d2は、LFE51a2(LFE1)のSRAM60a2に格納されるW0,2048~W0,4095を示す。データ5dnは、LFE51an(LFE8191)のSRAM60anに格納されるW4095,2048~W4095,4095を示す。1つの重み係数Wijのビット数は64ビットである。
ここで、前述のように、LFE51a1の精度切替回路61a1は、LFE51a2のSRAM60a2からも重み係数を取得することができる。すなわち、精度切替回路61a1は、例えば、隣接するLFE51a2のSRAM60a2からの読み出し経路を利用することで、LFE51a2のSRAM60a2以外の機能を停止させ、SRAM60a2の容量をLFE51a1に貸し出す方法を採れる。例えば、奇数番目(先頭を1番目とする)のLFEにより偶数番目のLFEのSRAMを利用可能にする(あるいは、先頭を0番目とした場合は偶数番目のLFEにより奇数番目のLFEのSRAMを利用可能にするとも言える)。
このように、精度切替回路61a1,…,61anは、重み係数のビット数の変更に応じて、自ビットと他ビットとに関する重み係数のうちの一部を、スピンビットとして使用されない他のLFEが有するSRAMから読み出す。この場合、ランダムセレクタ部52は、例えば、スピンビットとして使用されない他のLFEから出力されるフラグFを強制的に0(反転不可)に設定することで、当該他のLFEに対応するビットを反転ビットの選択候補から除外してもよい。
これにより、規模4Kビット/精度64ビットの第5のモードを実現できる。同様に、規模を小さくすることで、さらに大きな精度を実現することもできる。このように、最適化装置408($j)によれば、問題に応じて、規模および精度をより柔軟に変更することができる。
(モード設定テーブル1700の記憶内容)
つぎに、最適化問題演算装置101が有するモード設定テーブル1700の記憶内容について説明する。モード設定テーブル1700は、例えば、図4に示したメモリ402、ディスク404などの記憶装置に記憶される。
ここでは、最適化問題演算装置101が有する最適化装置408($1)~408($M)を、「最適化装置408($1)~408($3)」とする(M=3)。
図17は、モード設定テーブル1700の記憶内容の一例を示す説明図である。図17において、モード設定テーブル1700は、ユニットID、パーティションモード、問題規模および精度のフィールドを有し、各フィールドに情報を設定することで、モード設定情報1700-1~1700-7をレコードとして記憶する。
ここで、ユニットIDは、組合せ最適化問題を解くユニットを識別する識別子である。ユニットは、例えば、最適化装置408($j)内のパーティションに対応する。最適化装置408($j)内のパーティションは、例えば、1以上のLFB505によって実現される。
具体的には、ユニット1は、最適化装置408($1)内のパーティションに対応する。ユニット2-1,2-2は、最適化装置408($2)内の2つのパーティションに対応する。ユニット3-1~3-4は、最適化装置408($3)内の4つのパーティションに対応する。
パーティションモードは、パーティションモードのモード名を示す。パーティションモード「8P」は、最適化装置408($j)を論理的に8つのパーティションに分割するモードである(図17では不図示)。パーティションモード「8P」における各パーティションは、例えば、1個のLFB505によって実現される。パーティションモード「8P」は、上述した第1のモードに対応する。
パーティションモード「4P」は、最適化装置408($j)を論理的に4つのパーティションに分割するモードである。パーティションモード「4」における各パーティションは、例えば、2個のLFB505によって実現される。パーティションモード「4P」は、上述した第2のモードに対応する。
パーティションモード「2P」は、最適化装置408($j)を論理的に2つのパーティションに分割するモードである。パーティションモード「2P」における各パーティションは、例えば、4個のLFB505によって実現される。パーティションモード「2Pは、上述した第3のモードに対応する。
パーティションモード「FULL」は、最適化装置408($j)を分割せず、1つのパーティションとして使用するモードである。パーティションモード「FULL」におけるパーティションは、例えば、8個のLFB505によって実現される。ただし、パーティションモード「FULL」は、規模と精度との組合せに対応して2種類設けられている。パーティションモード「FULL(規模:8K、精度:16bit)」は、上述した第4のモードに対応する。また、パーティションモード「FULL(規模:4K、精度:64bit)」は、上述した第5のモードに対応する(図17では不図示)。
問題規模は、パーティションモードで解くことができる問題(組合せ最適化問題)の最大規模を示す(単位:bit)。精度は、各パーティションモードで解くことができる問題(組合せ最適化問題)の最大精度を示す。
例えば、モード設定情報1700-1によれば、最適化装置408($1)のパーティションモードが、パーティションモード「FULL」であることを特定することができる。また、最適化装置408($1)内のパーティションに対応するユニット1の問題規模「8K」および精度「16bit」を特定することができる。
なお、図示は省略するが、モード設定テーブル1700内の各モード設定情報には、例えば、各ユニット(パーティション)に対応するハードウェアリソースを特定する情報(例えば、LFBの識別番号)が含まれる。モード設定テーブル1700は、例えば、図1に示した管理情報110の一例に相当する。
また、初期状態におけるモード設定テーブル1700内のモード設定情報は、例えば、最適化問題演算装置101において生成されることにしてもよい。具体的には、例えば、最適化問題演算装置101が、図5に示したライブラリ502から、各最適化装置408($j)のパーティションモードで解くことができる問題の最大規模(スピンビット数)および最大精度(重み係数のビット数)を取得する。そして、最適化問題演算装置101が、取得した結果に基づいて、各最適化装置408($j)のモード設定情報を生成することにしてもよい。
ライブラリ502は、あらかじめ用意された関数を呼び出すことにより、最適化装置408($j)に設定されたパーティションモードの情報を取得することができる。例えば、ライブラリ502は、getMaxNumBit()関数を呼び出すことにより、最適化装置408($j)のパーティションモードで解くことができる問題の最大規模を取得することができる。また、ライブラリ502は、getWeightRange()関数を呼び出すことにより、最適化装置408($j)のパーティションモードで解くことができる問題の最大精度を取得することができる。
(利用状況テーブル1800の記憶内容)
つぎに、最適化問題演算装置101が有する利用状況テーブル1800の記憶内容について説明する。利用状況テーブル1800は、例えば、図4に示したメモリ402、ディスク404などの記憶装置に記憶される。
図18は、利用状況テーブル1800の記憶内容の一例を示す説明図である。図18において、利用状況テーブル1800は、ユニットID、パーティションモード、問題規模、精度、利用率および待ち時間のフィールドを有し、各フィールドに情報を設定することで、利用状況情報1800-1~1800-3をレコードとして記憶する。
ここで、ユニットIDは、組合せ最適化問題を解くユニットを識別する識別子である。パーティションモードは、パーティションモードのモード名を示す。問題規模は、パーティションモードで解くことができる問題(組合せ最適化問題)の最大規模を示す(単位:bit)。精度は、各パーティションモードで解くことができる問題(組合せ最適化問題)の最大精度を示す。
利用率は、ユニットIDにより識別されるユニットを含む最適化装置408($j)の利用率を示す(単位:%)。利用率は、最適化装置408($j)の利用状況を示す指標値の一つである。待ち時間は、ユニットIDにより識別されるユニットを含む最適化装置408($j)の待ち時間を示す(単位:秒)。待ち時間は、最適化装置408($j)の負荷状況を示す指標値の一つである。
例えば、利用状況情報1800-1は、ユニット1を含む最適化装置408($1)のパーティションモード「FULL」、問題規模「8K」、精度「16bit」、利用率「90[%]」および待ち時間「600[秒]」を示す。利用状況テーブル1800は、例えば、図1に示した利用情報120に相当する。
(最適化問題演算装置101の機能的構成例)
図19は、最適化問題演算装置101の機能的構成例を示すブロック図である。図19において、最適化問題演算装置101は、受付部1901と、管理部1902と、第1の決定部1903と、第2の決定部1904と、実行制御部1905と、を含む。受付部1901~実行制御部1905は、具体的には、例えば、図4に示したメモリ402、ディスク404、可搬型記録媒体407などの記憶装置に記憶されたプログラムをCPU401に実行させることにより、または、通信I/F405により、その機能を実現する。各機能部の処理結果は、例えば、メモリ402、ディスク404などの記憶装置に記憶される。
受付部1901は、組合せ最適化問題を受け付ける。ここで、受け付ける組合せ最適化問題は、解くべき計算対象の問題である。具体的には、例えば、受付部1901は、図3に示したクライアント装置301から組合せ最適化問題の情報の入力を受け付けることにより、組合せ最適化問題を受け付ける。組合せ最適化問題の情報には、例えば、問題に応じた初期値や動作条件が含まれる。
管理部1902は、複数の最適化装置408それぞれの論理的な分割状態を規定するパーティションモードについての情報を保持する。ここで、複数の最適化装置408は、最適化問題演算装置101が有する最適化装置408であり、例えば、図4に示した最適化装置408($1)~408($M)である。
具体的には、例えば、管理部1902は、各最適化装置408($j)に設定されたパーティションモードや、当該パーティションモードで解くことができる問題の最大規模および最大精度を含む情報を保持する。より詳細に説明すると、例えば、管理部1902は、図17に示したモード設定テーブル1700を保持する。
第1の決定部1903は、管理部1902が保持する情報と、複数の最適化装置408の利用情報とに基づき、複数の最適化装置408それぞれのパーティションモードを決定する。複数の最適化装置408の利用情報は、複数の最適化装置408で演算が実行された組合せ最適化問題の実行履歴情報を含む。
ここで、図20を用いて、実行履歴情報のデータ構造について説明する。実行履歴情報は、例えば、最適化問題演算装置101において計算対象の問題(組合せ最適化問題)を受け付けるたびに生成されて、メモリ402、ディスク404などの記憶装置に記憶される。また、実行履歴情報は、問題の演算の実行状況に応じて適宜更新される。
図20は、実行履歴情報のデータ構造の一例を示す説明図である。図20において、実行履歴情報2000は、ジョブID、テナント名、ソルバ名、同期・非同期、ハードウェア情報、パーティションモード、問題の規模、精度、計算開始時刻、計算完了時刻、待ち時間、計算時間およびステータスを有する。
ジョブIDは、ジョブを識別する識別子である。ジョブは、計算対象の問題(組合せ最適化問題)に相当する。テナント名は、テナントの名称である。テナントは、ユーザに相当する。ソルバ名は、問題を解く際に用いられるソルバの名称である。同期・非同期は、同期モードまたは非同期モードを示す。
ハードウェア情報は、ジョブ(問題の演算)を振り分けたハードウェアの情報である。ハードウェア情報には、例えば、最適化装置408の装置IDやユニットIDが設定される。パーティションモードは、ジョブ(問題の演算)を振り分けたハードウェアのパーティションモードである。
問題の規模は、問題の規模である(単位:bit)。精度は、問題の要求精度である(単位:bit)。計算開始時刻は、ジョブ(問題の演算)の実行を開始した時刻である。
計算完了時刻は、ジョブ(問題の演算)の実行を開始した時刻である。計算開始時刻および計算完了時刻は、例えば、UTC(Universal Time Coordinated)によって表される。
待ち時間は、他の処理(他の問題)の完了待ちで、処理待ちキューで待ち合わせている時間である。処理待ちキューは、ジョブの振り分け先の最適化装置408に対応するキューである。計算時間は、ジョブの実行に要した時間、すなわち、問題を解くのに要した時間である。計算時間は、計算開始時刻から計算完了時刻までの時間に相当する。
ステータスは、ジョブの実行状況を示す。例えば、ステータス「正常」は、ジョブの実行結果(問題の解)が正常に得られたことを示す。ステータス「異常」は、ジョブの実行結果が正常に得られなかったことを示す。ステータス「実行中」は、ジョブを実行中であることを示す。
なお、待ち時間は、例えば、リアルタイムに更新される。また、計算開始時刻は、ジョブの実行が開始されると設定される。計算終了時刻および計算時間は、ジョブの実行が終了すると設定される。
実行履歴情報2000によれば、どの問題が、どのハードウェアに割り振られ、どのような実行状況であるかを特定することができる。例えば、情報処理システム300において、最適化問題演算装置101で受け付けた組合せ最適化問題ごとの実行履歴情報2000を採取することで、ユーザごとのハードウェアの利用履歴等を特定可能にして、ユーザに対する課金処理などに役立てることができる。
図19の説明に戻り、第1の決定部1903は、例えば、図20に示したような実行履歴情報2000に基づいて、各最適化装置408($j)の待ち時間を算出することができる。より詳細に説明すると、例えば、第1の決定部1903は、各最適化装置408($j)に対応する処理待ちキューに溜まっている問題の実行履歴情報を特定する。処理待ちキューに溜まっている問題の実行履歴情報は、例えば、計算開始時刻が未設定の実行履歴情報である。
つぎに、第1の決定部1903は、特定した実行履歴情報に基づいて、各最適化装置408($j)に対応する処理待ちキューに溜まっている問題の待ち時間の合計を算出することにより、各最適化装置408($j)の待ち時間を算出する。
一例として、最適化装置408($1)に対応する処理待ちキューに溜まっている問題を「問題1、問題2および問題3」とし、各問題1~3の待ち時間を「300[秒]、200[秒]および100[秒]」とする。この場合、最適化装置408($1)の待ち時間は、「600[秒](=300[秒]+200[秒]+100[秒])」となる。
算出された各最適化装置408($j)の待ち時間は、例えば、各最適化装置408($j)の情報(ユニットID、パーティションモード、問題規模、精度など)と対応付けて、図18に示した利用状況テーブル1800に記憶される。例えば、最適化装置408($1)の待ち時間「600[秒]は、利用状況テーブル1800の利用状況情報1800-1に設定される。
また、第1の決定部1903は、例えば、図20に示したような実行履歴情報2000に基づいて、各最適化装置408($j)の利用率を算出することができる。各最適化装置408($j)の利用率は、例えば、所定期間において、各最適化装置408($j)で問題の演算が行われた時間の割合によって表すことができる。所定期間は、任意に設定可能であり、例えば、直近の1~12時間程度に設定される。
より詳細に説明すると、例えば、第1の決定部1903は、所定期間に演算が行われた問題の実行履歴情報を特定する。所定期間に演算が行われた問題とは、例えば、所定期間内に計算開始時刻および計算終了時刻が含まれる問題であってもよく、また、計算開始時刻から計算終了時刻までの期間の少なくとも一部が含まれる問題であってもよい。
つぎに、第1の決定部1903は、特定した実行履歴情報の計算時間の合計を算出することにより、所定期間における各最適化装置408($j)の計算時間を算出する。そして、第1の決定部1903は、所定期間に対する、算出した各最適化装置408($j)の計算時間の割合を算出することにより、各最適化装置408($j)の利用率を算出する。
ただし、計算開始時刻から計算終了時刻までの期間のうち所定期間外となる時間帯が存在する場合がある。第1の決定部1903は、この時間帯については、最適化装置408($j)の計算時間に含めないことにしてもよい。また、最適化装置408($j)内の複数のユニットで問題の演算が並列に実行されている場合がある。この場合、計算開始時刻から計算終了時刻までの期間のうち問題同士で重複する時間帯がある。第1の決定部1903は、この時間帯については、最適化装置408($j)の計算時間に重複して含めないことにしてもよい。
一例として、所定期間を「直近6時間」とし、所定期間における最適化装置408($1)の計算時間を「324[分]」とする。最適化装置408($1)の利用率は、「90[%](=324[分]÷360[分]×100)」となる。
算出された各最適化装置408($j)の利用率は、例えば、各最適化装置408($j)の情報(ユニットID、パーティションモード、問題規模、精度など)と対応付けて、図18に示した利用状況テーブル1800に記憶される。例えば、最適化装置408($1)の利用率「90[%]は、利用状況テーブル1800の利用状況情報1800-1に設定される。
つぎに、第1の決定部1903は、例えば、利用状況テーブル1800を参照して、待ち時間が閾値α以上の最適化装置408($j)を特定する。ここで、閾値αは、任意に設定可能であり、例えば、情報処理システム300に対する要求性能に応じて600[秒]程度の値に設定される。
図18の例では、閾値αを「α=600[秒]」とすると、待ち時間が閾値α以上の最適化装置408として、ユニット1を含む最適化装置408($1)が特定される。
また、第1の決定部1903は、例えば、利用状況テーブル1800を参照して、利用率が閾値β以下の最適化装置408を特定する。ここで、閾値βは、任意に設定可能であり、例えば、10[%]程度の値に設定される。
図18の例では、閾値βを「β=10[%]」とすると、利用率が閾値β以下の最適化装置408として、ユニット3-1,3-2,3-3,3-4を含む最適化装置408($3)が特定される。
つぎに、第1の決定部1903は、例えば、図17に示したモード設定テーブル1700を参照して、特定した待ち時間が閾値α以上の最適化装置408のパーティションモードを特定する。そして、第1の決定部1903は、特定した利用率が閾値β以下の最適化装置408のパーティションモードを、特定した待ち時間が閾値α以上の最適化装置408のパーティションモードに決定する。また、第1の決定部1903は、利用率が閾値βより大きい最適化装置408については、現在のパーティションモードのままとする(現状維持)。
例えば、待ち時間が閾値α以上の最適化装置408を「最適化装置408($1)」とし、利用率が閾値β以下の最適化装置408を「最適化装置408($3)」とする。この場合、第1の決定部1903は、モード設定テーブル1700を参照して、待ち時間が閾値α以上の最適化装置408($1)のパーティションモード「FULL」を特定する。そして、第1の決定部1903は、利用率が閾値β以下の最適化装置408($3)のパーティションモードを、パーティションモード「FULL」に決定する。また、第1の決定部1903は、利用率が閾値βより大きい最適化装置408($1),408($2)については、現在のパーティションモードのままとする。
また、第1の決定部1903は、特定した利用率が閾値β以下の最適化装置408($j)のパーティションモードを、決定したパーティションモードに変更する。ただし、動的にパーティションモードを変更すると、パーティションで演算中の結果が異常となるおそれがある。したがって、第1の決定部1903は、最適化装置408($j)のパーティションモードを変更する場合には、例えば、最適化装置408($j)で演算が行われていない状態となってから、パーティションモードを変更する。最適化装置408($j)で演算が行われているか否かは、例えば、実行履歴情報のステータスから特定することができる。
具体的には、例えば、まず、第1の決定部1903は、モード設定テーブル1700を参照して、決定したパーティションモードに対応する問題規模および精度を特定する。例えば、パーティションモード「FULL」に対応する問題規模および精度は、問題規模「8K(8192bit)」および精度「16bit」となる。
つぎに、第1の決定部1903は、特定した問題規模(スピンビット数)および精度(重み係数のビット数)を、特定した利用率が閾値β以下の最適化装置408($3)に入力する。最適化装置408($3)において、制御部504は、第1の決定部1903からの問題規模(スピンビット数)および精度(重み係数のビット数)を受け付け、LFB505のモード設定レジスタ55に入力する。
モード設定レジスタ55に入力された精度(重み係数のビット数)は、各LFEの精度切替回路に入力される。例えば、精度切替回路61a1は、入力された精度(重み係数のビット数)を受け付け、当該精度(重み係数のビット数)に応じて、SRAM60a1から読み出す重み係数のビット数を切り替える。
また、モード設定レジスタ55に入力された問題規模(スピンビット数)は、ランダムセレクタ部52に入力される。例えば、ランダムセレクタ部52は、indexの小さい方から順に、入力された規模(スピンビット数)に相当する数のLFEを使用して、解の探索が行われるようにする。
これにより、パーティションモード「FULL」が最適化装置408($3)に設定される。この場合、最適化装置408($3)には、パーティションモード「FULL(規模:8K、精度16bit)」のパーティションが1個形成される。なお、各パーティションをどのハードウェアリソース(例えば、LFB)により実現するかは、第1の決定部1903が判断してもよく、また、最適化装置408($j)の制御部504が判断してもよい。
決定された決定結果は、例えば、モード設定テーブル1700に記憶される。具体的には、例えば、管理部1902は、最適化装置408($j)のパーティションモードが変更されたことに応じて、モード設定テーブル1700を更新する。
ここで、モード設定テーブル1700の更新例について説明する。
図21は、モード設定テーブル1700の更新例を示す説明図である。ここでは、最適化装置408($3)のパーティションモードが、パーティションモード「4P」からパーティションモード「FULL(規模:8K、精度16bit)」に変更された場合を想定する。
この場合、モード設定テーブル1700内のモード設定情報1700-4~1700-7が、モード設定情報2100-1に更新される。なお、第1の決定部1903による、複数の最適化装置408それぞれのパーティションモードを決定する処理は、例えば、所定の時間間隔(5[分]など)で定期的に実行される。
図19の説明に戻り、第2の決定部1904は、組合せ最適化問題の規模または要求精度に関する情報と、第1の決定部1903によって決定された複数の最適化装置408それぞれのパーティションモードに関する情報とに基づき、組合せ最適化問題を振り分ける最適化装置408を決定する。
具体的には、例えば、まず、第2の決定部1904は、受け付けた組合せ最適化問題の規模、要求精度に関する情報を取得する。より詳細に説明すると、例えば、第2の決定部1904は、ライブラリ502(図5参照)から、受け付けた組合せ最適化問題を変換した変換後の問題のスピンビット数(規模)および重み係数を表すビット数(要求精度)を取得する。
つぎに、第2の決定部1904は、例えば、モード設定テーブル1700(例えば、図21)を参照して、取得した組合せ最適化問題の規模または要求精度に応じて演算可能ユニットを特定する。ここで、演算可能ユニットは、組合せ最適化問題の演算を行う候補となるユニットである。そして、第2の決定部1904は、特定した演算可能ユニットのいずれかのユニットを含む最適化装置408($j)を、組合せ最適化問題を振り分ける最適化装置408に決定する。
この際、第2の決定部1904は、組合せ最適化問題の振り分け先として、最適化装置408($j)内のユニットを決定してもよい。すなわち、第2の決定部1904は、組合せ最適化問題の振り分け先として、最適化装置408($j)を決定するだけでなく、その最適化装置408($j)内のユニットまで決定することにしてもよい。ただし、最適化装置408($j)内のいずれのユニットに組合せ最適化問題を振り分けるかは、最適化装置408($j)の制御部504(図5)によって判断させることにしてもよい。
より詳細に説明すると、例えば、第2の決定部1904は、モード設定テーブル1700を参照して、組合せ最適化問題の規模以上の規模の問題を解くことができるパーティションモードに対応するユニットを、演算可能ユニットとして特定する。そして、最適化問題演算装置101は、特定した演算可能ユニットのうち、解くことができる問題の最大規模が最小のユニットから優先して、組合せ最適化問題を振り分けるユニットに決定してもよい。
また、第2の決定部1904は、モード設定テーブル1700を参照して、組合せ最適化問題の要求精度以上の精度の問題を解くことができるパーティションモードに対応するユニットを特定してもよい。そして、第2の決定部1904は、特定したユニットを、組合せ最適化問題を振り分けるユニットに決定してもよい。
また、第2の決定部1904は、モード設定テーブル1700を参照して、組合せ最適化問題の規模以上の規模の問題を解くことができ、かつ、組合せ最適化問題の要求精度以上の精度の問題を解くことができるパーティションモードに対応するユニットを、演算可能ユニットとして特定してもよい。そして、最適化問題演算装置101は、特定した演算可能ユニットのうち、解くことができる問題の最大規模が最小のユニットから優先して、組合せ最適化問題を振り分けるユニットに決定してもよい。
また、第2の決定部1904は、複数の最適化装置408それぞれの実行状況についての情報にさらに基づき、組合せ最適化問題を振り分ける最適化装置408を決定することにしてもよい。ここで、複数の最適化装置408それぞれの実行状況についての情報は、例えば、各最適化装置408($j)で実行中の問題や、各最適化装置408($j)に対応する処理待ちキューについての情報などを含む。例えば、実行履歴情報2000のステータスや待ち時間は、最適化装置408($j)の実行状況についての情報の一例である。
具体的には、例えば、第2の決定部1904は、特定した演算可能ユニットのうち、問題を実行していない空きのユニットを含む最適化装置408($j)を、組合せ最適化問題を振り分ける最適化装置408に決定してもよい。また、特定した演算可能ユニットに空きのユニットが存在しない場合には、第2の決定部1904は、演算可能ユニットを含む最適化装置408のうち、処理待ちキューに溜まっている問題の数が最小の最適化装置408($j)を、組合せ最適化問題を振り分ける最適化装置408に決定してもよい。
なお、組合せ最適化問題の振り分け先の決定例については、図23~図26を用いて後述する。
実行制御部1905は、第2の決定部1904が決定した最適化装置408で、第1の決定部1903が当該最適化装置408について決定されたパーティションモードにより、組合せ最適化問題の演算を実行させる。具体的には、例えば、実行制御部1905は、組合せ最適化問題の振り分け先として決定されたユニットを含む最適化装置408($j)の制御部504に対して、当該ユニットを指定して組合せ最適化問題の演算を実行させる。
より詳細に説明すると、例えば、実行制御部1905は、問題に応じた初期値および動作条件を最適化装置408($j)に入力する。初期値は、例えば、エネルギー値E、ローカルフィールドhi、スピンビットqi、温度パラメータTの初期値および重み係数Wなどを含む。また、動作条件は、1つの温度パラメータでの状態の更新回数N1、温度パラメータの変更回数N2および温度パラメータの下げ幅などを含む。
最適化装置408($j)において、制御部504は、入力された初期値および動作条件を、各LFEのレジスタおよびSRAMに設定する。なお、制御部504は、使用されないLFEがある場合、当該LFEのSRAMに、Wとして、例えば全て0を設定する。
実行制御部1905は、最適化装置408($j)に演算開始フラグ(例えば、演算開始フラグ=1)を入力する。制御部504は、演算開始フラグの入力を受け付け、実行制御部1905から指定されたユニット(LFB505)による演算を開始する。ユニットの指定は、例えば、ユニットに対応するパーティションを特定する情報(LFBの識別番号など)を入力することにより行われる。
また、第1の決定部1903は、複数の最適化装置408の利用情報に基づき、利用する最適化装置408の増減有無を判定することにしてもよい。そして、第1の決定部1903は、判定した判定結果に応じて、利用する最適化装置408を増減させることにしてもよい。
ここで、利用する最適化装置408を増加させるとは、例えば、図4に示した予備装置409を起動して、最適化装置408として動作させることである。この結果、最適化問題演算装置101において利用可能な最適化装置408が1台増える(M=M+1)。一方、利用する最適化装置408を減少させるとは、最適化装置408をスリープ状態にして(あるいは、電源を落として)、予備装置409とすることである。この結果、最適化問題演算装置101において利用可能な最適化装置408が1台減る(M=M-1)。
具体的には、例えば、第1の決定部1903は、利用状況テーブル1800を参照して、全最適化装置408($1)~408($3)の利用率が閾値γ以上の場合、利用する最適化装置408を増加させると判定してもよい。閾値γは、任意に設定可能であり、例えば、80[%]程度の値に設定される。
また、例えば、第1の決定部1903は、利用状況テーブル1800を参照して、全最適化装置408($1)~408($3)の待ち時間が閾値δ以上の場合、利用する最適化装置408を増加させると判定してもよい。閾値δは、任意に設定可能であり、例えば、300[秒]程度の値に設定される。
また、第1の決定部1903は、利用する最適化装置408を増加させた場合には、増加させた最適化装置408のパーティションモードを設定する。この際、第1の決定部1903は、増加させた最適化装置408に、あらかじめ決められたパーティションモード(デフォルトのパーティションモード)を設定する。
より詳細に説明すると、例えば、まず、第1の決定部1903は、デフォルトのパーティションモードに対応する問題規模および精度を特定する。なお、デフォルトのパーティションモードに対応する問題規模および精度は、例えば、メモリ402、ディスク403などの記憶装置に記憶されている。
例えば、デフォルトのパーティションモードを、パーティションモード「FULL(規模:8K、精度16bit)」とする。この場合、第1の決定部1903は、問題規模「8K(8192bit)」および精度「16bit」を特定する。そして、第1の決定部1903は、特定した問題規模(スピンビット数)および精度(重み係数のビット数)を、増加させた最適化装置408に入力する。これにより、増加させた最適化装置408に、デフォルトのパーティションモードを設定することができる。
また、例えば、第1の決定部1903は、利用状況テーブル1800を参照して、全最適化装置408($1)~408($3)の利用率が閾値β以下の場合、利用する最適化装置408を減少させると判定してもよい。そして、第1の決定部1903は、利用する最適化装置408を減少させると判定した場合、最適化装置408($1)~408($3)のいずれかの最適化装置408をスリープ状態にして、予備装置409とする。
減少させる最適化装置408は、例えば、最適化装置408($1)~408($3)のうちの利用率が最も低い最適化装置408であってもよく、また、デフォルトのパーティションモードが設定されたいずれかの最適化装置408であってもよい。
これにより、複数の最適化装置408の利用率が全体的に低い場合には、いずれかの最適化装置408をスリープ状態にして予備装置409とすることができ、最適化問題演算装置101の消費電力を抑えることができる。
また、第2の決定部1904は、分割解法の使用の有無を判断することにしてもよい。ここで、分割解法とは、分割ソルバ等を使用して問題を分割し、規模の小さい問題にして解く手法である。分割解法としては、既存のいかなる技術を用いることにしてもよい。
具体的には、例えば、第2の決定部1904は、組合せ最適化問題の規模が、複数の最適化装置408で解くことができる問題の最大規模より大きいか否かを判断することにしてもよい。ここで、組合せ最適化問題の規模が解くことができる最大規模より大きい場合、第2の決定部1904は、分割解法を使用すると判断する。一方、組合せ最適化問題の規模が解くことができる最大規模以下の場合、第2の決定部1904は、分割解法を使用しないと判断する。
すなわち、組合せ最適化問題の規模が、複数の最適化装置408で解くことができる問題の最大規模より大きい場合、このままの状態では、組合せ最適化問題を解くことができない。そこで、最適化問題演算装置101は、分割解法を使用して、組合せ最適化問題を分割して解くことにしてもよい。
第2の決定部1904は、分割解法を使用すると判断した場合、組合せ最適化問題を分割する。そして、第2の決定部1904は、分割した分割後の問題の規模または要求精度と、第1の決定部1903によって決定された複数の最適化装置408それぞれのパーティションモードとに基づき、分割後の問題を振り分ける最適化装置408を決定する。
この場合、実行制御部1905は、決定された最適化装置408で、分割後の問題の演算を実行させる。組合せ最適化問題の解は、分割後の問題の解を統合したものとなる。これにより、組合せ最適化問題の規模が、複数の最適化装置408で解くことができる問題の最大規模より大きい場合であっても、組合せ最適化問題を解くことができる。
また、第2の決定部1904は、スケーリングの使用の有無を判断することにしてもよい。ここで、スケーリングとは、問題を解くことができる最大精度の範囲内に係数を調整して解くことである。具体的には、例えば、第2の決定部1904は、組合せ最適化問題の要求精度が、複数の最適化装置408で解くことができる問題の最大精度の範囲内であるか否かを判断することにしてもよい。
ここで、組合せ最適化問題の要求精度が解くことができる最大精度の範囲外の場合、第2の決定部1904は、スケーリングを使用すると判断する。一方、組合せ最適化問題の要求精度が解くことができる最大精度の範囲内の場合、第2の決定部1904は、スケーリングを使用しないと判断する。
すなわち、組合せ最適化問題の要求精度が、複数の最適化装置408で解くことができる問題の最大精度の範囲外の場合、このままの状態では、組合せ最適化問題を解くことができない。そこで、最適化問題演算装置101は、スケーリングを使用して、組合せ最適化問題の係数を調整して解くことにしてもよい。
具体的には、例えば、実行制御部1905は、例えば、組合せ最適化問題の振り分け先として決定された最適化装置408(ユニット)で解くことができる問題の最大精度の範囲内にスケーリング(N倍)した問題を解いた後に、エネルギーは元の問題に合うように再計算(1/N倍)したものを返すことにしてもよい。
例えば、パーティションモード「FULL(規模:8K、精度:16bit)」の場合、最大精度が「16bit」のため、問題の二次項の係数に「3276700」が指定されると、このままの状態では解くことができない。この場合、実行制御部1905は、例えば、1/100にスケールダウンして、二次項の係数が32767の問題として解いた後に、エネルギーは元の問題に合うように再計算(100倍)したものを返す。
これにより、組合せ最適化問題の要求精度が、最適化装置408で解くことができる問題の最大精度の範囲外であっても、組合せ最適化問題を解くことができる。
なお、受付部1901が受け付けた組合せ最適化問題の情報は、例えば、第2の決定部1904による振り分け先の決定に先立って、複数の最適化装置408に対応する全体キューに入力されることにしてもよい。また、第1の決定部1903は、全体キューに入力された、特定の規模(あるいは、要求精度)の問題の数が所定数を超えたか否かを判断することにしてもよい。
そして、例えば、特定の規模の問題の数が所定数を超えた場合には、第1の決定部1903は、特定の規模の問題の待ち合わせが今後生じる可能性が高いと判断して、利用率が閾値β以下の最適化装置408のパーティションモードを、特定の規模に対応するパーティションモードに変更することにしてもよい。これにより、問題を振り分ける前の段階で、今後待ち合わせが発生する問題を予測して、最適化装置408のパーティションモードの変更を行うことができる。
(利用状況テーブル1800の記憶内容の変遷例)
つぎに、利用状況テーブル1800の記憶内容の変遷例について説明する。
図22は、利用状況テーブル1800の記憶内容の変遷例を示す説明図である。ここでは、最適化装置408($3)のパーティションモードが、パーティションモード「4P」からパーティションモード「FULL(規模:8K、精度16bit)」に変更された場合を想定する。
より具体的には、利用率が閾値β以下の最適化装置408($3)のパーティションモードが、待ち時間が閾値α以上の最適化装置408($1)と同じパーティションモードに変更され、しばらく運用された場合を想定する。この結果、利用状況テーブル1800に利用状況情報2200-1~2200-3が記憶されている。
利用状況情報2200-1によれば、「8K」の規模の問題を解くことができるユニット3が増えたことにより、ユニット1(最適化装置408($1))の待ち時間が、「300[秒]」に短縮されたことがわかる。また、利用状況情報2200-3によれば、最適化装置408($3)のパーティションモードを変更したことにより、最適化装置408($3)の利用率が30[%]まで上昇したことがわかる。
この場合、待ち時間が閾値α以上の最適化装置408、および、利用率が閾値β以下の最適化装置408は存在しない。このため、第1の決定部1903は、各最適化装置408($1)~408($3)のパーティションモードを、現在のパーティションモードのままとする(現状維持)。
(組合せ最適化問題の振り分け先の決定例)
つぎに、図23~図26を用いて、組合せ最適化問題の振り分け先の決定例について説明する。
<クラウドのサーバに適用>
ここでは、最適化問題演算装置101をクラウドのサーバに適用し、全パーティションモード(FULL、2P、4P、8P)のユニットを用意する場合について説明する。まず、最適化問題演算装置101(クラウド)が有するモード設定テーブル2300の記憶内容について説明する。モード設定テーブル2300の記憶内容は、あらかじめ用意されたユニットが異なるため、図17に示したモード設定テーブル1700と記憶内容が異なる。ここでは、最適化問題演算装置101が有する最適化装置408($1)~408($M)を、「最適化装置408($1)~408($5)」とする(M=5)。
図23は、モード設定テーブル2300の記憶内容の一例を示す説明図である。図23において、モード設定テーブル2300は、ユニットID、パーティションモード、問題規模および精度のフィールドを有し、各フィールドに情報を設定することで、モード設定情報2300-1~2300-16をレコードとして記憶する。
つぎに、最適化問題演算装置101(クラウド)が用いる振り分け先テーブル2400について説明する。振り分け先テーブル2400は、例えば、メモリ402、ディスク404などの記憶装置に記憶される。
図24は、振り分け先テーブル2400の記憶内容の一例を示す説明図である。図24において、振り分け先テーブル2400は、問題番号、問題規模、精度、演算可能ユニットおよび振り分け先のフィールドを有し、各フィールドに情報を設定することで、振り分け先情報(例えば、振り分け先情報2400-1~2400-8)をレコードとして記憶する。
ここで、問題番号は、計算対象の問題(組合せ最適化問題)を識別する識別子である。問題規模は、問題の規模を示す。精度は、問題の要求精度を示す。演算可能ユニットは、問題の演算を行う候補となるユニットである。振り分け先は、問題を振り分けるユニットを示す。
以下、問題Q1~Q8を順に受け付けた場合を例に挙げて、各問題Q1~Q8の振り分け先の決定例について説明する。
・問題Q1を受け付けた場合
まず、受付部1901が問題Q1を受け付けた場合、第2の決定部1904は、問題Q1の規模および要求精度を取得する。ここでは、問題Q1の規模は「1K」であり、問題Q1の要求精度は「128bit」である。つぎに、第2の決定部1904は、図23に示したモード設定テーブル2300を参照して、問題Q1の演算可能ユニットを特定する。
具体的には、例えば、第2の決定部1904は、問題Q1の規模「1K」以上の規模の問題を解くことができるユニットのうち、解くことができる問題の最大規模が最小のユニットを、演算可能ユニットとして特定する。図23の例では、ユニット5-1,5-2,5-3,5-4,5-5,5-6,5-7,5-8が特定される。
つぎに、第2の決定部1904は、特定した演算可能ユニットから、問題Q1の要求精度「128bit」が、解くことができる問題の最大精度の範囲外となるユニットを除外する。図23の例では、ユニット5-1,5-2,5-3,5-4,5-5,5-6,5-7,5-8のいずれのユニットも除外されない。
そして、第2の決定部1904は、演算可能ユニットのうちの空きのユニットを、問題Q1を振り分けるユニットに決定する。なお、空きのユニットが複数存在する場合には、第2の決定部1904は、例えば、ユニットIDの枝番部分が最も若いユニットに決定してもよい。ここでは、演算可能ユニット5-1が、問題Q1を振り分けるユニットに決定される。この結果、振り分け先テーブル2400に振り分け先情報2400-1が記憶される。
・問題Q2を受け付けた場合
つぎに、受付部1901が問題Q2を受け付けた場合、第2の決定部1904は、問題Q2の規模および要求精度を取得する。ここでは、問題Q2の規模は「4K」であり、問題Q2の要求精度は「32bit」である。つぎに、第2の決定部1904は、モード設定テーブル2300を参照して、問題Q2の演算可能ユニットを特定する。
具体的には、例えば、第2の決定部1904は、問題Q2の規模「4K」以上の規模の問題を解くことができるユニットのうち、解くことができる問題の最大規模が最小のユニットを、演算可能ユニットとして特定する。図23の例では、ユニット2,3-1,3-2が特定される。
つぎに、第2の決定部1904は、特定した演算可能ユニットから、問題Q2の要求精度「32bit」が、解くことができる問題の最大精度の範囲外となるユニットを除外する。図23の例では、ユニット2,3-1,3-2のいずれのユニットも除外されない。ただし、ユニット2については、問題Q2の要求精度「32bit」よりも高い精度の問題を解くことができる。このため、第2の決定部1904は、32bitよりも高い精度の問題が入力されることを想定して、演算可能ユニットからユニット2を除外する。すなわち、演算可能ユニットは、ユニット3-1,3-2となる。
そして、第2の決定部1904は、演算可能ユニットのうちの空きのユニットを、問題Q2を振り分けるユニットに決定する。ここでは、演算可能ユニット3-1が、問題Q2を振り分けるユニットに決定される。この結果、振り分け先テーブル2400に振り分け先情報2400-2が記憶される。
・問題Q3を受け付けた場合
つぎに、受付部1901が問題Q3を受け付けた場合、第2の決定部1904は、問題Q3の規模および要求精度を取得する。ここでは、問題Q3の規模は「8K」であり、問題Q3の要求精度は「16bit」である。つぎに、第2の決定部1904は、モード設定テーブル2300を参照して、問題Q3の演算可能ユニットを特定する。
具体的には、例えば、第2の決定部1904は、問題Q3の規模「8K」以上の規模の問題を解くことができるユニットのうち、解くことができる問題の最大規模が最小のユニットを、演算可能ユニットとして特定する。図23の例では、ユニット1が特定される。
つぎに、第2の決定部1904は、特定した演算可能ユニットから、問題Q3の要求精度「16bit」が、解くことができる問題の最大精度の範囲外となるユニットを除外する。図23の例では、問題Q3の要求精度「16bit」が、ユニット1で解くことができる問題の最大精度の範囲内のため、ユニット1は除外されない。
そして、第2の決定部1904は、演算可能ユニットのうちの空きのユニットを、問題Q3を振り分けるユニットに決定する。ここでは、演算可能ユニット1が、問題Q3を振り分けるユニットに決定される。この結果、振り分け先テーブル2400に振り分け先情報2400-3が記憶される。
・問題Q4を受け付けた場合
つぎに、受付部1901が問題Q4を受け付けた場合、第2の決定部1904は、問題Q4の規模および要求精度を取得する。ここでは、問題Q4の規模は「4K」であり、問題Q4の要求精度は「64bit」である。つぎに、第2の決定部1904は、モード設定テーブル2300を参照して、問題Q4の演算可能ユニットを特定する。
具体的には、例えば、第2の決定部1904は、問題Q4の規模「4K」以上の規模の問題を解くことができるユニットのうち、解くことができる問題の最大規模が最小のユニットを、演算可能ユニットとして特定する。図23の例では、ユニット2,3-1,3-2が特定される。
つぎに、第2の決定部1904は、特定した演算可能ユニットから、問題Q4の要求精度「64bit」が、解くことができる問題の最大精度の範囲外となるユニットを除外する。図23の例では、問題Q4の要求精度「64bit」が、ユニット3-1,3-2で解くことができる問題の最大精度の範囲外となる。このため、演算可能ユニットからユニット3-1,3-2が除外される。すなわち、演算可能ユニットは、ユニット2となる。
そして、第2の決定部1904は、演算可能ユニットのうちの空きのユニットを、問題Q4を振り分けるユニットに決定する。ここでは、演算可能ユニット2が、問題Q4を振り分けるユニットに決定される。この結果、振り分け先テーブル2400に振り分け先情報2400-4が記憶される。
・問題Q5を受け付けた場合
つぎに、受付部1901が問題Q5を受け付けた場合、第2の決定部1904は、問題Q5の規模および要求精度を取得する。ここでは、問題Q5の規模は「2K」であり、問題Q5の要求精度は「64bit」である。つぎに、第2の決定部1904は、モード設定テーブル2300を参照して、問題Q5の演算可能ユニットを特定する。
具体的には、例えば、第2の決定部1904は、問題Q5の規模「2K」以上の規模の問題を解くことができるユニットのうち、解くことができる問題の最大規模が最小のユニットを、演算可能ユニットとして特定する。図23の例では、ユニット4-1,4-2,4-3,4-4が特定される。
つぎに、第2の決定部1904は、特定した演算可能ユニットから、問題Q5の要求精度「64bit」が、解くことができる問題の最大精度の範囲外となるユニットを除外する。図23の例では、ユニット4-1,4-2,4-3,4-4のいずれのユニットも除外されない。
そして、第2の決定部1904は、演算可能ユニットのうちの空きのユニットを、問題Q5を振り分けるユニットに決定する。ここでは、演算可能ユニット4-1が、問題Q5を振り分けるユニットに決定される。この結果、振り分け先テーブル2400に振り分け先情報2400-5が記憶される。
・問題Q6を受け付けた場合
つぎに、受付部1901が問題Q6を受け付けた場合、第2の決定部1904は、問題Q6の規模および要求精度を取得する。ここでは、問題Q6の規模は「1K」であり、問題Q6の要求精度は「128bit」である。つぎに、第2の決定部1904は、モード設定テーブル2300を参照して、問題Q6の演算可能ユニットを特定する。
具体的には、例えば、第2の決定部1904は、問題Q6の規模「1K」以上の規模の問題を解くことができるユニットのうち、解くことができる問題の最大規模が最小のユニットを、演算可能ユニットとして特定する。図23の例では、ユニット5-1,5-2,5-3,5-4,5-5,5-6,5-7,5-8が特定される。
つぎに、第2の決定部1904は、特定した演算可能ユニットから、問題Q6の要求精度「128bit」が、解くことができる問題の最大精度の範囲外となるユニットを除外する。図23の例では、ユニット5-1,5-2,5-3,5-4,5-5,5-6,5-7,5-8のいずれのユニットも除外されない。
そして、第2の決定部1904は、演算可能ユニットのうちの空きのユニットを、問題Q6を振り分けるユニットに決定する。ここでは、ユニット5-1が問題Q1の振り分け先となっている(振り分け先情報2400-1)。このため、演算可能ユニット5-2が、問題Q6を振り分けるユニットに決定される。この結果、振り分け先テーブル2400に振り分け先情報2400-6が記憶される。
・問題Q7を受け付けた場合
つぎに、受付部1901が問題Q7を受け付けた場合、第2の決定部1904は、問題Q7の規模および要求精度を取得する。ここでは、問題Q7の規模は「1K」であり、問題Q7の要求精度は「128bit」である。つぎに、第2の決定部1904は、モード設定テーブル2300を参照して、問題Q7の演算可能ユニットを特定する。
具体的には、例えば、第2の決定部1904は、問題Q7の規模「1K」以上の規模の問題を解くことができるユニットのうち、解くことができる問題の最大規模が最小のユニットを、演算可能ユニットとして特定する。図23の例では、ユニット5-1,5-2,5-3,5-4,5-5,5-6,5-7,5-8が特定される。
つぎに、第2の決定部1904は、特定した演算可能ユニットから、問題Q7の要求精度「128bit」が、解くことができる問題の最大精度の範囲外となるユニットを除外する。図23の例では、ユニット5-1,5-2,5-3,5-4,5-5,5-6,5-7,5-8のいずれのユニットも除外されない。
そして、第2の決定部1904は、演算可能ユニットのうちの空きのユニットを、問題Q7を振り分けるユニットに決定する。ここでは、ユニット5-1,5-2が問題Q1,Q6の振り分け先となっている(振り分け先情報2400-1,2400-6)。このため、演算可能ユニット5-3が、問題Q7を振り分けるユニットに決定される。この結果、振り分け先テーブル2400に振り分け先情報2400-7が記憶される。
・問題Q8を受け付けた場合
つぎに、受付部1901が問題Q8を受け付けた場合、第2の決定部1904は、問題Q8の規模および要求精度を取得する。ここでは、問題Q8の規模は「4K」であり、問題Q8の要求精度は「32bit」である。つぎに、第2の決定部1904は、モード設定テーブル2300を参照して、問題Q8の演算可能ユニットを特定する。
具体的には、例えば、第2の決定部1904は、問題Q8の規模「4K」以上の規模の問題を解くことができるユニットのうち、解くことができる問題の最大規模が最小のユニットを、演算可能ユニットとして特定する。図23の例では、ユニット2,3-1,3-2が特定される。
つぎに、第2の決定部1904は、特定した演算可能ユニットから、問題Q8の要求精度「32bit」が、解くことができる問題の最大精度の範囲外となるユニットを除外する。図23の例では、ユニット2,3-1,3-2のいずれのユニットも除外されない。ただし、ユニット2については、問題Q8の要求精度「32bit」よりも高い精度の問題を解くことができる。このため、演算可能ユニットからユニット2は除外される。すなわち、演算可能ユニットは、ユニット3-1,3-2となる。
そして、第2の決定部1904は、演算可能ユニットのうちの空きのユニットを、問題Q8を振り分けるユニットに決定する。ここでは、ユニット3-1が問題Q2の振り分け先となっている(振り分け先情報2400-2)。このため、演算可能ユニット3-2が、問題Q8を振り分けるユニットに決定される。この結果、振り分け先テーブル2400に振り分け先情報2400-8が記憶される。
なお、実行制御部1905は、例えば、振り分け先テーブル2400を参照して、第2の決定部1904によって決定された各問題Q1~Q8を振り分けるユニットを特定することができる。また、各問題の演算が完了すると、各問題に対応する振り分け先テーブル2400内の振り分け先情報が削除される。
<オンプレのサーバに適用>
つぎに、最適化問題演算装置101をオンプレのサーバに適用し、一部のパーティションモードのユニットのみを用意する場合について説明する。まず、最適化問題演算装置101(オンプレ)が有するモード設定テーブル2500の記憶内容について説明する。モード設定テーブル2500の記憶内容は、あらかじめ用意されたユニットが異なるため、図17に示したモード設定テーブル1700と記憶内容が異なる。ここでは、最適化問題演算装置101が有する最適化装置408($1)~408($M)を、「最適化装置408($1),408($2)」とする(M=2)。
図25は、モード設定テーブル2500の記憶内容の一例を示す説明図である。図25において、モード設定テーブル2500は、ユニットID、パーティションモード、問題規模および精度のフィールドを有し、各フィールドに情報を設定することで、モード設定情報2500-1~2500-9をレコードとして記憶する。
つぎに、最適化問題演算装置101(オンプレ)が用いる振り分け先テーブル2600について説明する。
図26は、振り分け先テーブル2600の記憶内容の一例を示す説明図である。図26において、振り分け先テーブル2600は、問題番号、問題規模、精度、演算可能ユニットおよび振り分け先のフィールドを有し、各フィールドに情報を設定することで、振り分け先情報(例えば、振り分け先情報2600-1~2600-5)をレコードとして記憶する。
以下、問題Q1’~Q5’を順に受け付けた場合を例に挙げて、各問題Q1’~Q5’の振り分け先の決定例について説明する。
・問題Q1’を受け付けた場合
まず、受付部1901が問題Q1’を受け付けた場合、第2の決定部1904は、問題Q1’の規模および要求精度を取得する。ここでは、問題Q1’の規模は「1K」であり、問題Q1’の要求精度は「128bit」である。つぎに、第2の決定部1904は、図25に示したモード設定テーブル2500を参照して、問題Q1’の演算可能ユニットを特定する。
具体的には、例えば、第2の決定部1904は、問題Q1’の規模「1K」以上の規模の問題を解くことができるユニットのうち、解くことができる問題の最大規模が最小のユニットを、演算可能ユニットとして特定する。図25の例では、ユニット2-1,2-2,2-3,2-4,2-5,2-6,2-7,2-8が特定される。
つぎに、第2の決定部1904は、特定した演算可能ユニットから、問題Q1’の要求精度「128bit」が、解くことができる問題の最大精度の範囲外となるユニットを除外する。図25の例では、ユニット2-1,2-2,2-3,2-4,2-5,2-6,2-7,2-8のいずれのユニットも除外されない。
そして、第2の決定部1904は、演算可能ユニットのうちの空きのユニットを、問題Q1’を振り分けるユニットに決定する。ここでは、演算可能ユニット2-1が、問題Q1’を振り分けるユニットに決定される。この結果、振り分け先テーブル2600に振り分け先情報2600-1が記憶される。
・問題Q2’を受け付けた場合
つぎに、受付部1901が問題Q2’を受け付けた場合、第2の決定部1904は、問題Q2’の規模および要求精度を取得する。ここでは、問題Q2’の規模は「8K」であり、問題Q2’の要求精度は「16bit」である。つぎに、第2の決定部1904は、モード設定テーブル2500を参照して、問題Q2’の演算可能ユニットを特定する。
具体的には、例えば、第2の決定部1904は、問題Q2’の規模「8K」以上の規模の問題を解くことができるユニットのうち、解くことができる問題の最大規模が最小のユニットを、演算可能ユニットとして特定する。図25の例では、ユニット1が特定される。
つぎに、第2の決定部1904は、特定した演算可能ユニットから、問題Q2’の要求精度「16bit」が、解くことができる問題の最大精度の範囲外となるユニットを除外する。図25の例では、問題Q2’の要求精度「16bit」が、ユニット1で解くことができる問題の最大精度の範囲内のため、ユニット1は除外されない。
そして、第2の決定部1904は、演算可能ユニットのうちの空きのユニットを、問題Q2’を振り分けるユニットに決定する。ここでは、演算可能ユニット1が、問題Q2’を振り分けるユニットに決定される。この結果、振り分け先テーブル2600に振り分け先情報2600-2が記憶される。
・問題Q3’を受け付けた場合
つぎに、受付部1901が問題Q3’を受け付けた場合、第2の決定部1904は、問題Q3’の規模および要求精度を取得する。ここでは、問題Q3’の規模は「1K」であり、問題Q3’の要求精度は「128bit」である。つぎに、第2の決定部1904は、モード設定テーブル2500を参照して、問題Q3’の演算可能ユニットを特定する。
具体的には、例えば、第2の決定部1904は、問題Q3’の規模「1K」以上の規模の問題を解くことができるユニットのうち、解くことができる問題の最大規模が最小のユニットを、演算可能ユニットとして特定する。図25の例では、ユニット2-1,2-2,2-3,2-4,2-5,2-6,2-7,2-8が特定される。
つぎに、第2の決定部1904は、特定した演算可能ユニットから、問題Q3’の要求精度「128bit」が、解くことができる問題の最大精度の範囲外となるユニットを除外する。図25の例では、ユニット2-1,2-2,2-3,2-4,2-5,2-6,2-7,2-8のいずれのユニットも除外されない。
そして、第2の決定部1904は、演算可能ユニットのうちの空きのユニットを、問題Q3’を振り分けるユニットに決定する。ここでは、ユニット2-1が問題Q1’の振り分け先となっている(振り分け先情報2600-1)。このため、演算可能ユニット2-2が、問題Q3’を振り分けるユニットに決定される。この結果、振り分け先テーブル2600に振り分け先情報2600-3が記憶される。
・問題Q4’を受け付けた場合
つぎに、受付部1901が問題Q4’を受け付けた場合、第2の決定部1904は、問題Q4’の規模および要求精度を取得する。ここでは、問題Q4’の規模は「4K」であり、問題Q4’の要求精度は「64bit」である。つぎに、第2の決定部1904は、モード設定テーブル2500を参照して、問題Q4’の演算可能ユニットを特定する。
具体的には、例えば、第2の決定部1904は、問題Q4’の規模「4K」以上の規模の問題を解くことができるユニットのうち、解くことができる問題の最大規模が最小のユニットを、演算可能ユニットとして特定する。図25の例では、ユニット1が特定される。
つぎに、第2の決定部1904は、特定した演算可能ユニットから、問題Q4’の要求精度「64bit」が、解くことができる問題の最大精度の範囲外となるユニットを除外する。図25の例では、問題Q4’の要求精度「64bit」が、ユニット1で解くことができる問題の最大精度の範囲内のため、ユニット1は除外されない。
そして、第2の決定部1904は、演算可能ユニットのうちの空きのユニットを、問題Q4’を振り分けるユニットに決定する。ここでは、ユニット1が問題Q2’の振り分け先となっている(振り分け先情報2600-2)。また、ユニット1以外に演算可能ユニットが存在しない。
この場合、第2の決定部1904は、ユニット1で問題Q2’の演算が終了するのを待つ。具体的には、例えば、第2の決定部1904は、ユニット1(最適化装置408($1))に対応する処理待ちキューに問題Q4’を入れる。この結果、振り分け先テーブル2600に振り分け先情報2600-4が記憶される。振り分け先情報2600-4では、振り分け先が「待機中」となっている。
・問題Q5’を受け付けた場合
つぎに、受付部1901が問題Q5’を受け付けた場合、第2の決定部1904は、問題Q5’の規模および要求精度を取得する。ここでは、問題Q5’の規模は「1K」であり、問題Q5’の要求精度は「128bit」である。つぎに、第2の決定部1904は、モード設定テーブル2500を参照して、問題Q5’の演算可能ユニットを特定する。
具体的には、例えば、第2の決定部1904は、問題Q5’の規模「1K」以上の規模の問題を解くことができるユニットのうち、解くことができる問題の最大規模が最小のユニットを、演算可能ユニットとして特定する。図25の例では、ユニット2-1,2-2,2-3,2-4,2-5,2-6,2-7,2-8が特定される。
つぎに、第2の決定部1904は、特定した演算可能ユニットから、問題Q5’の要求精度「128bit」が、解くことができる問題の最大精度の範囲外となるユニットを除外する。図25の例では、ユニット2-1,2-2,2-3,2-4,2-5,2-6,2-7,2-8のいずれのユニットも除外されない。
そして、第2の決定部1904は、演算可能ユニットのうちの空きのユニットを、問題Q5’を振り分けるユニットに決定する。ここでは、ユニット2-1,2-2が問題Q1’,Q3’の振り分け先となっている(振り分け先情報2600-1,2600-3)。このため、演算可能ユニット2-3が、問題Q5’を振り分けるユニットに決定される。この結果、振り分け先テーブル2600に振り分け先情報2600-5が記憶される。
なお、ユニット1での問題Q2’の演算が終了すると、振り分け先テーブル2600から振り分け先情報2600-2が削除され、ユニット1が、問題Q4’を振り分けるユニットに決定される。この結果、振り分け先情報2600-4の振り分け先に、ユニットID「1」が設定される。
(最適化問題演算装置101の最適化問題演算処理手順)
つぎに、最適化問題演算装置101の最適化問題演算処理手順について説明する。最適化問題演算装置101の最適化問題演算処理は、例えば、組合せ最適化問題ごとに並列に実行される。
図27および図28は、最適化問題演算装置101の最適化問題演算処理手順の一例を示すフローチャートである。図27のフローチャートにおいて、まず、最適化問題演算装置101は、計算対象の組合せ最適化問題の情報を受け付ける(ステップS2701)。
つぎに、最適化問題演算装置101は、モード設定テーブル1700を参照して、全ユニットの情報(問題規模)を取得する(ステップS2702)。ユニットの情報(問題規模)は、ユニットで解くことができる問題の最大規模(スピンビット数)を示す情報である。つぎに、最適化問題演算装置101は、受け付けた組合せ最適化問題の規模を特定する(ステップS2703)。
そして、最適化問題演算装置101は、取得した全ユニットの情報(問題規模)に基づいて、特定した組合せ最適化問題の規模が、全ユニットの問題規模のうちの最大規模より大きいか否かを判断する(ステップS2704)。ここで、組合せ最適化問題の規模が最大規模より大きい場合(ステップS2704:Yes)、最適化問題演算装置101は、分割解法使用モードが設定されているか否かを判断する(ステップS2705)。
なお、分割解法使用モードとは、分割解法により問題を分割して解くモードである。分割解法使用モードは、あらかじめ任意に設定可能である。
ここで、分割解法使用モードが設定されている場合(ステップS2705:Yes)、最適化問題演算装置101は、分割ソルバ等により、受け付けた組合せ最適化問題を分割して(ステップS2706)、ステップS2701に戻る。この結果、ステップS2701において、分割後の問題が計算対象の組合せ最適化問題として受け付けられる。
一方、分割解法使用モードが設定されていない場合(ステップS2705:No)、最適化問題演算装置101は、ユーザに対してエラーを返して(ステップS2707)、本フローチャートによる一連の処理を終了する。
また、ステップS2704において、組合せ最適化問題の規模が最大規模より大きくない場合(ステップS2704:No)、最適化問題演算装置101は、モード設定テーブル1700を参照して、組合せ最適化問題の規模に応じた演算可能ユニットを特定する(ステップS2708)。具体的には、例えば、最適化問題演算装置101は、組合せ最適化問題の規模以上の規模の問題を解くことができるユニットのうち、解くことができる問題の最大規模が最小のユニットを、演算可能ユニットとして特定する。
つぎに、最適化問題演算装置101は、特定した演算可能ユニットのうち選択されていない未選択のユニットを選択する(ステップS2709)。そして、最適化問題演算装置101は、モード設定テーブル1700を参照して、選択したユニットが演算を実行中であるか否かを判断する(ステップS2710)。
ここで、選択したユニットが演算を実行中でない場合(ステップS2710:No)、最適化問題演算装置101は、図28に示すステップS2801に移行する。
一方、選択したユニットが演算を実行中の場合(ステップS2710:Yes)、最適化問題演算装置101は、特定した演算可能ユニットのうち選択されていない未選択のユニットがあるか否かを判断する(ステップS2711)。ここで、未選択のユニットがある場合(ステップS2711:Yes)、最適化問題演算装置101は、ステップS2709に戻る。
一方、未選択のユニットがない場合(ステップS2711:No)、最適化問題演算装置101は、選択したユニットの演算が終了するまで待機して(ステップS2712)、図28に示すステップS2801に移行する。
図28のフローチャートにおいて、まず、最適化問題演算装置101は、選択したユニットを、組合せ最適化問題の振り分け先のユニットに決定する(ステップS2801)。そして、最適化問題演算装置101は、モード設定テーブル1700を参照して、決定した振り分け先のユニットの情報(精度)を取得する(ステップS2802)。ユニットの情報(精度)は、ユニットで解くことができる問題の最大精度(重み係数のビット数)を示す情報である。
つぎに、最適化問題演算装置101は、受け付けた組合せ最適化問題の要求精度を特定する(ステップS2803)。そして、最適化問題演算装置101は、取得したユニットの情報(精度)に基づいて、特定した組合せ最適化問題の要求精度が、振り分け先のユニットの最大精度の範囲内であるか否かを判断する(ステップS2804)。
ここで、組合せ最適化問題の要求精度が最大精度の範囲外の場合(ステップS2804:No)、最適化問題演算装置101は、自動スケーリングモードが設定されているか否かを判断する(ステップS2805)。なお、自動スケーリングモードとは、最大精度の範囲内にスケーリングして問題を解くモードである。自動スケーリングモードは、あらかじめ任意に設定可能である。
ここで、自動スケーリングモードが設定されていない場合(ステップS2805:No)、最適化問題演算装置101は、ユーザに対してエラーを返して(ステップS2806)、本フローチャートによる一連の処理を終了する。
一方、自動スケーリングモードが設定されている場合(ステップS2805:Yes)、最適化問題演算装置101は、組合せ最適化問題を、振り分け先のユニットの最大精度の範囲内にスケーリング(N倍)する(ステップS2807)。
つぎに、最適化問題演算装置101は、振り分け先のユニットでスケーリングした問題を解く(ステップS2808)。そして、最適化問題演算装置101は、元の問題に合うようにエネルギーは再計算(1/N倍)して(ステップS2809)、ステップS2811に移行する。
また、ステップS2804において、組合せ最適化問題の要求精度が最大精度の範囲内の場合(ステップS2804:Yes)、最適化問題演算装置101は、振り分け先のユニットで組合せ最適化問題を解く(ステップS2810)。
そして、最適化問題演算装置101は、ユーザに組合せ最適化問題の演算結果を返して(ステップS2811)、本フローチャートによる一連の処理を終了する。これにより、組合せ最適化問題の規模に応じた適切なハードウェアリソースを使用して演算を行うことができ、組合せ最適化問題を効率的に解くことができる。
(最適化問題演算装置101のモード決定処理手順)
つぎに、最適化問題演算装置101のモード決定処理手順について説明する。最適化問題演算装置101のモード決定処理は、例えば、所定の時間間隔ごとに実行される。
図29は、最適化問題演算装置101のモード決定処理手順の一例を示すフローチャートである。図29のフローチャートにおいて、まず、最適化問題演算装置101は、図27に示したステップS2701において受け付けた各問題の実行履歴情報(例えば、図20参照)に基づいて、各最適化装置408($j)の待ち時間を算出する(ステップS2901)。
つぎに、最適化問題演算装置101は、各問題の実行履歴情報(例えば、図20参照)に基づいて、所定期間における各最適化装置408($j)の利用率を算出する(ステップS2902)。算出された各最適化装置408($j)の待ち時間および利用率は、利用状況テーブル1800に記憶される。
そして、最適化問題演算装置101は、利用状況テーブル1800を参照して、待ち時間が閾値α以上の最適化装置408があるか否かを判断する(ステップS2903)。ここで、待ち時間が閾値α以上の最適化装置408がない場合(ステップS2903:No)、最適化問題演算装置101は、本フローチャートによる一連の処理を終了する。
一方、待ち時間が閾値α以上の最適化装置408がある場合(ステップS2903:Yes)、最適化問題演算装置101は、モード設定テーブル1700を参照して、待ち時間が閾値α以上の最適化装置408のパーティションモードを特定する(ステップS2904)。
つぎに、最適化問題演算装置101は、利用状況テーブル1800を参照して、利用率が閾値β以下の最適化装置408があるか否かを判断する(ステップS2905)。ここで、利用率が閾値β以下の最適化装置408がない場合(ステップS2905:No)、最適化問題演算装置101は、本フローチャートによる一連の処理を終了する。
一方、利用率が閾値β以下の最適化装置408がある場合(ステップS2905:Yes)、最適化問題演算装置101は、利用率が閾値β以下の最適化装置408のパーティションモードを、ステップS2904において特定したパーティションモードに決定する(ステップS2906)。この際、最適化問題演算装置101は、利用率が閾値βより大きい最適化装置408については、現在のパーティションモードのままとする。
そして、最適化問題演算装置101は、利用率が閾値β以下の最適化装置408のパーティションモードを、決定したパーティションモードに変更して(ステップS2907)、本フローチャートによる一連の処理を終了する。これにより、各最適化装置408($j)の利用状況に応じて、各最適化装置408($j)のパーティションモードを変更することができる。
なお、ステップS2903において、全最適化装置408($j)の待ち時間が閾値δ以上の場合、最適化問題演算装置101は、利用する最適化装置408を増加させることにしてもよい。また、ステップS2905において、全最適化装置408($j)の利用率が閾値γ以上の場合、最適化問題演算装置101は、利用する最適化装置408を増加させることにしてもよい。
また、ステップS2903において、待ち時間が閾値α以上の最適化装置408がない場合(ステップS2903:No)、最適化問題演算装置101は、全最適化装置408($j)の利用率が閾値β以下であるか否かを判断することにしてもよい。そして、全最適化装置408($j)の利用率が閾値β以下の場合、最適化問題演算装置101は、利用する最適化装置408を減少させることにしてもよい。
(最適化装置408の装置構成例)
つぎに、最適化装置408のより具体的な装置構成例について説明する。以下に説明する最適化装置408($j)は、図5~図16を用いて説明した最適化装置408($j)と回路構成の一部が異なる。
図30は、最適化装置408($j)の装置構成例を示す説明図である。最適化装置408($j)は、複数のLFBを有する。最適化装置408($j)は、当該複数のLFBを制御する制御部504を有する(図示を省略している)。
ここでは、一例として、1つのLFBに属するLFEの数をm個(mは2以上の整数)とし、最適化装置408($j)は、LFB70a,70b,70c,70d,70e,70f,70g,70hを有するものとする。この場合、最適化装置408($j)は、合計で8m個のLFEを有し、最大規模8mビットを実現可能である。最適化装置408($j)では、例えば、LFB70a,70b,70c,70d,70e,70f,70g,70hのうちの1以上のLFBによってパーティションが実現される。ただし、最適化装置408($j)が備えるLFBの個数は、8個に限らず、他の個数でもよい。
LFB70a,…,70hが備える複数のLFEは、図2に示したビット演算回路1a1,…,1aNの一例である。LFB70a,…,70hの各々は、所定数(m個)のLFEを要素に含む、LFEの1つのグループであると言える。また、LFB70a,…,70hの各々には、識別番号#0~#7が割り当てられている。
最適化装置408($j)は、さらに、規模結合回路91、モード設定レジスタ92、加算器93a,93b,93c,93d,93e,93f,93g,93hおよびE格納レジスタ94a,94b,94c,94d,94e,94f,94g,94hを有する。
ここで、LFB70aは、LFE71a1,…,LFE71am、ランダムセレクタ部72、閾値生成部73、乱数生成部74およびモード設定レジスタ75を有する。LFE71a1,…,LFE71am、ランダムセレクタ部72、閾値生成部73、乱数生成部74およびモード設定レジスタ75は、図8で説明した同名のハードウェアに相当するため、説明を省略する。ただし、ランダムセレクタ部72は、選択した反転ビットに対する状態信号(フラグFx0、スピンビットqx0およびエネルギー変化量ΔEx0)の組を、規模結合回路91に出力する。また、ランダムセレクタ部72は、フラグ制御部52aを有さなくてよい(ただし、有してもよい)。例えば、ランダムセレクタ部72では、各LFEからの状態信号が、フラグ制御部52aを介さずに、ランダムセレクタ部72の初段の各選択回路に2つずつ入力される。なお、LFB70b,…,70hも、LFB70aと同様の回路構成を有する。
規模結合回路91は、LFB70a,…,70hの各々から状態信号を受け付け、状態信号に基づいて反転ビットの選択を行う。規模結合回路91は、反転ビットに関する信号を、LFB70a,…,70hの各LFEに供給する。
具体的には、規模結合回路91は、フラグFy0、ビットqy0および反転ビットを示すindex=y0をLFB70a1のLFE71a1,…,71amに出力する。ここで、以降の図では、ランダムセレクタ部72および規模結合回路91により出力される「index=x0」などの表記を「x0」のように略記することがある。規模結合回路91は、エネルギー変化量ΔEy0を加算器93aに出力する。
また、規模結合回路91は、フラグFy1、ビットqy1および反転ビットを示すindex=y1をLFB70bの各LFEに供給する。エネルギー変化量ΔEy1を加算器93bに出力する。
規模結合回路91は、フラグFy2、ビットqy2および反転ビットを示すindex=y2をLFB70cの各LFEに出力する。規模結合回路91は、エネルギー変化量ΔEy2を加算器93cに出力する。
規模結合回路91は、フラグFy3、ビットqy3および反転ビットを示すindex=y3をLFB70dの各LFEに出力する。規模結合回路91は、エネルギー変化量ΔEy3を加算器93dに出力する。
規模結合回路91は、フラグFy4、ビットqy4および反転ビットを示すindex=y4をLFB70eの各LFEに出力する。規模結合回路91は、エネルギー変化量ΔEy4を加算器93eに出力する。
規模結合回路91は、フラグFy5、ビットqy5および反転ビットを示すindex=y5をLFB70fの各LFEに出力する。規模結合回路91は、エネルギー変化量ΔEy5を加算器93fに出力する。
規模結合回路91は、フラグFy6、ビットqy6および反転ビットを示すindex=y6をLFB70gの各LFEに出力する。規模結合回路91は、エネルギー変化量ΔEy6を加算器93gに出力する。
規模結合回路91は、フラグFy7、ビットqy7および反転ビットを示すindex=y7をLFB70hの各LFEに出力する。規模結合回路91は、エネルギー変化量ΔEy7を加算器93hに出力する。
LFB70a,…,70hの各々が有するランダムセレクタ部(ランダムセレクタ部72を含む)および規模結合回路91は、図2に示した選択回路部2の一例である。
モード設定レジスタ92は、規模結合回路91に対する動作モード(パーティションモード)の設定を行う。例えば、モード設定レジスタ92は、最適化問題演算装置101の実行制御部1905から入力される規模(スピンビット数)および精度(重み係数のビット数)に応じて、規模結合回路91に対する動作モード(パーティションモード)の設定を行う。モード設定レジスタ92は、モード設定レジスタ75によりLFE71a1,…,71amおよびランダムセレクタ部72に設定される動作モードと同じ動作モードを規模結合回路91に設定する。モード設定レジスタ75,92によるモード設定の詳細は後述される。LFB70a,…,70hの各々が有するモード設定レジスタ(モード設定レジスタ75を含む)およびモード設定レジスタ92は、図2に示した設定変更部5の一例である。
加算器93aは、ΔEy0を、E格納レジスタ94aに格納されているエネルギー値E0に加算することで、当該エネルギー値E0を更新する。E格納レジスタ94aは、例えば、クロック信号(図示を省略している)に同期して(他のE格納レジスタも同様)、加算器93aにより計算されたエネルギー値E0を取り込む。
加算器93bは、ΔEy1を、E格納レジスタ94bに格納されているエネルギー値E1に加算することで、当該エネルギー値E1を更新する。E格納レジスタ94bは、加算器93bにより計算されたエネルギー値E1を取り込む。
加算器93cは、ΔEy2を、E格納レジスタ94cに格納されているエネルギー値E2に加算することで、当該エネルギー値E2を更新する。E格納レジスタ94cは、加算器93cにより計算されたエネルギー値E2を取り込む。
加算器93dは、ΔEy3を、E格納レジスタ94dに格納されているエネルギー値E3に加算することで、当該エネルギー値E3を更新する。E格納レジスタ94dは、加算器93dにより計算されたエネルギー値E3を取り込む。
加算器93eは、ΔEy4を、E格納レジスタ94eに格納されているエネルギー値E4に加算することで、当該エネルギー値E4を更新する。E格納レジスタ94eは、加算器93eにより計算されたエネルギー値E4を取り込む。
加算器93fは、ΔEy5を、E格納レジスタ94fに格納されているエネルギー値E5に加算することで、当該エネルギー値E5を更新する。E格納レジスタ94fは、加算器93fにより計算されたエネルギー値E5を取り込む。
加算器93gは、ΔEy6を、E格納レジスタ94gに格納されているエネルギー値E6に加算することで、当該エネルギー値E6を更新する。E格納レジスタ94gは、加算器93gにより計算されたエネルギー値E6を取り込む。
加算器93hは、ΔEy7を、E格納レジスタ94hに格納されているエネルギー値E7に加算することで、当該エネルギー値E7を更新する。E格納レジスタ94hは、加算器93hにより計算されたエネルギー値E7を取り込む。
E格納レジスタ94a,…,94hの各々は、例えば、フリップフロップである。
つぎに、LFB70aの回路構成例を説明する。LFB70b,…,70hもLFB70aと同様の回路構成である。
図31は、LFBの回路構成例を示す説明図である。LFE71a1,71a2,…,71amの各々は、スピンビットの1ビットとして用いられる。mは、2以上の整数であり、LFB50が備えるLFEの数を示す。図31の例では、一例として、m=1024としている。ただし、mは他の値でもよい。
LFE71a1,71a2,…,71amの各々には、識別情報(index)が対応付けられている。LFE71a1,71a2,…,71amの各々に対して、index=0,1,…,1023である。
以下では、LFE71a1の回路構成を説明する。LFE71a2,…,71amも、LFE71a1と同様の回路構成により実現される。LFE71a2,…,71amの回路構成の説明については、以下の説明における各要素の符号の末尾の「a1」の部分を、「a2」,…,「am」の各々に置換して(例えば、「80a1」の符号を「80am」のように置換して)読み替えればよい。
LFE71a1は、SRAM80a1、精度切替回路81a1、Δh生成部82a1、加算器83a1、h格納レジスタ84a1、反転判定部85a1、ビット格納レジスタ86a1、ΔE生成部87a1、判定部88a1を有する。
ここで、SRAM80a1、精度切替回路81a1、Δh生成部82a1、加算器83a1、h格納レジスタ84a1、反転判定部85a1、ビット格納レジスタ86a1、ΔE生成部87a1、判定部88a1は、各々、図8で説明した同名のハードウェアと同様の機能を有する。ただし、SRAM80a1(または精度切替回路81a1)および反転判定部85a1には、規模結合回路91により出力されたindex=y0および反転可否を示すフラグFy0が供給される。また、Δh生成部82a1には、規模結合回路91により出力された反転ビットqy0が供給される。
モード設定レジスタ75は、精度切替回路81a1,81a2,…,81amに対する重み係数のビット数(精度)の設定を行う。モード設定レジスタ75は、ランダムセレクタ部72に対して設定を行う信号線を有していない(ただし、当該信号線を有してもよい)。ここでは、一例として、上述した5種類のモードを利用可能である。
第1のモードは、規模1kビット/精度128ビットのモードであり、パーティションモード「8P(8分割)」に対応する。規模1kビット/精度128ビットのモードは、LFBを1個使用する。当該モードの各パーティションは、LFB70a,…,70hのいずれか1個だけで実現可能である。
第2のモードは、規模2kビット/精度64ビットのモードであり、パーティションモード「4P(4分割)」に対応する。規模2kビット/精度64ビットのモードは、LFBを2個使用する。例えば、当該モードの各パーティションは、LFB70a,70bの組合せ、LFB70c,70dの組合せ、LFB70e,70fの組合せ、および、LFB70g,70hの組合せのうちのいずれか1つの組合せで実現可能である。
第3のモードは、規模4kビット/精度32ビットのモードであり、パーティションモード「2P(2分割)」に対応する。規模4kビット/精度32ビットのモードは、LFBを4個使用する。例えば、当該モードの各パーティションは、LFB70a,70b,70c,70dの組合せ、および、LFB70e,70f,70g,70hの組合せのうちのいずれか1つの組合せで実現可能である。
第4のモードは、規模8kビット/精度16ビットのモードであり、パーティションモード「FULL(規模:8K、精度:16bit)」に対応する。規模8kビット/精度16ビットのモードは、LFBを8個使用する。当該モードのパーティションは、LFB70a,…,70hの組合せを用いて実現可能である。
第5のモードは、規模4kビット/精度64ビットのモードであり、パーティションモード「FULL(規模:4K、精度:64bit)」に対応する。規模4kビット/精度64ビットのモードは、LFBを8個使用する。当該モードのパーティションは、LFB70a,…,70hの組合せを用いて実現可能である。ただし、図16で説明したように、1つのLFBにおいて使用されるLFEの数は、LFB1つが備えるLFEの数の半分となる。
また、最適化装置408($j)は、上記の規模1kビット/精度128ビットのモード、規模2kビット/精度64ビットのモード、規模4kビット/精度32ビットのモードを組み合せて、同一問題または他の問題の演算を並列に実行可能である。
そのため、規模結合回路91は、複数のLFB(LFBの組合せ)に対し、モード設定レジスタ92によるスピンビット数の設定に応じて、スピンビット数に相当する数のLFEを含むように、組み合せるLFB数(組合せるグループ数)を選択する。規模結合回路91は、例えば、次の回路構成を有する。
図32は、規模結合回路の回路構成例を示す説明図である。規模結合回路91は、複数段にわたってツリー状に接続された選択回路91a1,91a2,91a3,91a4,91b1,91b2,91c1と、乱数生成部91dと、モード選択回路91e1,91e2,91e3,91e4,91e5,91e6,91e7,91e8を有する。
初段の選択回路91a1,…,91a4の各々には、LFB70a,…,70hのそれぞれが出力する変数qiとFiとΔEiとindex=iの組(状態信号)が2組ずつ入力される。例えば、選択回路91a1には、LFB70a(#0)が出力する(qx0,Fx0,ΔEx0,index=x0)の組と、LFB70b(#1)が出力する(qx1,Fx1,ΔEx1,index=x1)の組が入力される。また、選択回路91a2には、LFB70c(#2)が出力する(qx2,Fx2,ΔEx2,index=x2)の組とLFB70d(#3)が出力する(qx3,Fx3,ΔEx3,index=x3)の組が入力される。選択回路91a3には、LFB70e(#4)が出力する(qx4,Fx4,ΔEx4,index=x4)の組とLFB70f(#5)が出力する(qx5,Fx5,ΔEx5,index=x5)の組が入力される。選択回路91a4には、LFB70g(#6)が出力する(qx6,Fx6,ΔEx6,index=x6)の組とLFB70h(#7)が出力する(qx7,Fx7,ΔEx7,index=x7)の組が入力される。
そして、選択回路91a1,…,91a4の各々は、乱数生成部91dが出力する1ビット乱数に基づいて、2組のうちの一方の組の(xi,Fi,ΔEi,index=i)を選択する。このとき、選択回路91a1,…,91a4の各々は、Fiが1である組を優先的に選択し、両方の組が1の場合には1ビット乱数に基づいていずれか一方の組を選択する(なお、選択回路91b1,91b2,91c1も同様)。ここで、乱数生成部91dは、1ビット乱数を選択回路ごとに個別に生成し、各選択回路に供給する。また、選択回路91a1,…,91a4の各々は、どちらの組を選択したかを示す識別値を、両組に含まれるindexに基づいて生成し、選択した変数qiとFiとΔEiと識別値とを含む状態信号を出力する。なお、選択回路91a1,…,91a4の各々が出力する識別値は、入力されたindexよりも1ビット増える。
2段目の選択回路91b1,91b2の各々には、選択回路91a1,…,91a4が出力する状態信号が2つずつ入力される。例えば、選択回路91b1には、選択回路91a1,91a2が出力する状態信号が入力され、選択回路91b2には、選択回路91a3,91a4が出力する状態信号が入力される。
そして、選択回路91b1,91b2の各々は、2つの状態信号と、乱数生成部91dが出力する1ビット乱数に基づいて、2つの状態信号のいずれか一方を選択する。また、選択回路91b1,91b2の各々は、選択した状態信号に含まれる識別値について、いずれの状態信号を選択したかを示すように1ビットを付加して更新し、選択した状態信号を出力する。
最終段の選択回路91c1には、選択回路91b1,91b2が出力する状態信号が2つ入力される。選択回路91c1は、2つの状態信号と乱数生成部91dが出力する1ビット乱数に基づいて、2つの状態信号のいずれか一方を選択する。また、選択回路91c1は、選択した状態信号に含まれる識別値について、いずれの状態信号を選択したかを示すように1ビットを付加して更新し、選択した状態信号を出力する。
前述のように、識別値はindexに相当する。規模結合回路91は、変数qiとFiとΔEiと同様にして、各選択回路により、各ランダムセレクタ部から入力されたindexの選択を行うことで、反転ビットに対応するindexを出力してもよい。この場合、各ランダムセレクタ部は、各LFEから変数qやフラグFと共にindexの供給を受けることになる。制御部504は、例えば、各LFEの所定のindex格納用のレジスタに対してLFBの組合せに応じたindexの設定を行う。
モード選択回路91e1,…,91e8の各々は、規模(すなわち、1kビット、2kビット、4kビットおよび8kビット)に応じた入力端子を有する。図中、モード選択回路91e1,…,91e8の各々に表記された「1」は規模1kビットに対応する入力端子を示す。同「2」は規模2kビットに対応する入力端子を示す。同「4」は規模4kビット(ただし、精度32ビット)に対応する入力端子を示す。同「8」は規模8kビット(または規模4kビット/精度64ビット)に対応する入力端子を示す。
モード選択回路91e1の規模1kビットの入力端子には、LFB70a(#0)が出力する状態信号が入力される。モード選択回路91e2の規模1kビットの入力端子には、LFB70b(#1)が出力する状態信号が入力される。モード選択回路91e3の規模1kビットの入力端子には、LFB70c(#2)が出力する状態信号が入力される。モード選択回路91e4の規模1kビットの入力端子には、LFB70d(#3)が出力する状態信号が入力される。モード選択回路91e5の規模1kビットの入力端子には、LFB70e(#4)が出力する状態信号が入力される。モード選択回路91e6の規模1kビットの入力端子には、LFB70f(#5)が出力する状態信号が入力される。モード選択回路91e7の規模1kビットの入力端子には、LFB70g(#6)が出力する状態信号が入力される。モード選択回路91e8の規模1kビットの入力端子には、LFB70h(#7)が出力する状態信号が入力される。
モード選択回路91e1,91e2の各々の規模2kビットの入力端子には、選択回路91a1が出力する状態信号が入力される。モード選択回路91e3,91e4の各々の規模2kビットの入力端子には、選択回路91a2が出力する状態信号が入力される。モード選択回路91e5,91e6の各々の規模2kビットの入力端子には、選択回路91a3が出力する状態信号が入力される。モード選択回路91e7,91e8の各々の規模2kビットの入力端子には、選択回路91a4が出力する状態信号が入力される。
モード選択回路91e1,91e2,91e3,91e4の各々の規模4kビットの入力端子には、選択回路91b1が出力する状態信号が入力される。モード選択回路91e5,91e6,91e7,91e8の各々の規模4kビットの入力端子には、選択回路91b2が出力する状態信号が入力される。
モード選択回路91e1,…,91e8の各々の規模8kビットの入力端子には、選択回路91c1が出力する状態信号が入力される。
モード選択回路91e1,…,91e8の各々は、モード設定レジスタ92による規模(スピンビット数)の設定を受け付ける。ただし、図32では、モード設定レジスタ92からモード選択回路91e2,…,91e8の各々に対する信号線を「…」の表記により略記している。モード選択回路91e1,…,91e8の各々は、設定された規模に応じた入力端子に入力された状態信号を選択して、(xj,Fj,index=j)をLFB70a,…,70hへ出力し、ΔEjを加算器93a,…,93hへ出力する。
例えば、モード選択回路91e1は、(xy0,Fy0,index=y0)をLFB70aへ出力し、ΔEy0を加算器93aへ出力する。加算器93aは、ΔEy0を基にE0を更新する。モード選択回路91e2は、(xy1,Fy1,index=y1)をLFB70bへ出力し、ΔEy1を加算器93bへ出力する。加算器93bは、ΔEy1を基にE1を更新する。モード選択回路91e3は、(xy2,Fy2,index=y2)をLFB70cへ出力し、ΔEy2を加算器93cへ出力する。加算器93cは、ΔEy2を基にE2を更新する。モード選択回路91e4は、(xy3,Fy3,index=y3)をLFB70dへ出力し、ΔEy3を加算器93dへ出力する。加算器93dは、ΔEy3を基にE3を更新する。モード選択回路91e5は、(xy4,Fy4,index=y4)をLFB70eへ出力し、ΔEy4を加算器93eへ出力する。加算器93eは、ΔEy4を基にE4を更新する。モード選択回路91e6は、(xy5,Fy5,index=y5)をLFB70fへ出力し、ΔEy5を加算器93fへ出力する。加算器93fは、ΔEy5を基にE5を更新する。モード選択回路91e7は、(xy6,Fy6,index=y6)をLFB70gへ出力し、ΔEy6を加算器93gへ出力する。加算器93gは、ΔEy6を基にE6を更新する。モード選択回路91e8は、(xy7,Fy7,index=y7)をLFB70hへ出力し、ΔEy7を加算器93hへ出力する。加算器93hは、ΔEy7を基にE7を更新する。
すなわち、最適化装置408($j)は、あるLFB(グループ)に属する各LFEから出力された反転可否を示す信号に基づいていずれかのビットを選択し、選択したビットを示す信号を規模結合回路91に出力するランダムセレクタ部をLFBごとに有する。規模結合回路91は、スピンビット数の設定に応じて1以上のLFBを組合せ、当該1以上のLFBの各々に対応するランダムセレクタ部により選択されたビットを示す信号に基づいて反転させるビットを選択する。規模結合回路91は、反転させるビットを示す信号を当該1以上のLFBに属する各LFEに出力する。
ここで、モード設定レジスタ92は、モード選択回路91e1,…,91e8に対して、個別に規模の設定を行う。ただし、ある規模のモードにおいて、組み合せて利用されるLFBに対応するモード選択回路には、共通の規模が設定される。
例えば、モード設定レジスタ92は、LFBの第1の組合せに対応する第1のスピンビット列のスピンビット数とLFBの第2の組合せに対応する第2のスピンビット列のスピンビット数とを、同じビット数、または、異なるビット数に設定してもよい。また、モード設定レジスタ75を含む各LFBのモード設定レジスタは、LFBの第1の組合せに属するLFEに対する重み係数のビット数とLFBの第2の組合せに属するLFEに対する重み係数のビット数とを、同じビット数、または、異なるビット数に設定してもよい。
例えば、LFB70a,70bを組み合せて利用して規模2kビットのモードを利用する場合、モード設定レジスタ92からモード選択回路91e1,91e2へ、規模2kビットのモードを選択する選択信号が供給される。このとき、例えば、最適化装置408($j)は、モード設定レジスタ92の設定により残りの6つのLFBを利用して、LFB70a,70bによる演算と同じ問題、または、別の問題を並列に実行することが可能である。
例えば、規模結合回路91は、残りの6つのLFBに対して、6つのLFBのうちの2つずつ組合せにより、規模2kビットのモードを3つ実現してもよい。これにより、パーティションモード「4P」の4個のパーティションを実現することができる。
並列に実現するモードの組合せは、上記の組合せに限らず、例えば、規模1kビットのモードが8つの組合せ、規模4kビットのモードが2つの組合せなどが考えられる。
このように、規模結合回路91は、モード設定レジスタ92により複数のスピンビット列の各々に対するスピンビット数の設定を受け付け、複数のスピンビット列の各々のスピンビット数に対して、組合せるLFB数(グループ数)を選択し、LFBを組合せる。これにより、1つの最適化装置408($j)上に複数のイジングモデルを実現できる。
なお、組み合せて利用されるLFBの組に対応するE格納レジスタの組には、共通のエネルギーが格納される。例えば、LFB70a,70bの組合せで利用する場合、E格納レジスタ94a,94bに格納されるE0,E1は同じ値となる。この場合、当該LFB70a,70bの組に対するエネルギー値を読み出すとき、制御部504は、E格納レジスタ94a,94bのいずれか一方(例えば、LFB70aに対応するE格納レジスタ94a)に格納されたエネルギー値を読み出せばよい。制御部504は、LFBの他の組合せに対しても同様にしてエネルギー値を読み出す。
例えば、制御部504は、最適化問題演算装置101の実行制御部1905から、並列に演算する各問題に対する初期値や動作条件の入力を受け付ける。そして、制御部504は、最適化問題演算装置101の実行制御部1905から入力される各問題に応じた規模/精度を、1つの問題に対して利用するLFBのグループ(すなわち、パーティション)ごとに、LFBのモード設定レジスタおよびモード設定レジスタ92に設定する。
具体的には、例えば、制御部504は、第1の問題について、規模2kビット/精度64ビットをLFB70a,70bのモード設定レジスタに設定するとともに、モード選択回路91e1,91e2に規模2kビットに対する出力を行うようモード設定レジスタ92に設定する。また、制御部504は、第2の問題について、規模2kビット/精度64ビットをLFB70c,70dのモード設定レジスタに設定するとともに、モード選択回路91e3,91e4に規模2kビットに対する出力を行うようモード設定レジスタ92に設定する。
この場合、最適化装置408($j)では、2つの問題(あるいは、両問題は同一問題でもよい)を並列に演算可能である。具体的には、制御部504は、各問題に対応するLFBの組合せに対して、図15で示したフローチャートの手順を行うように各LFBを制御する。
制御部504は、演算終了後、LFB70a,70bの各LFEから第1の問題に対するスピンビット列を読み出して、第1の問題の解とする。また、制御部504は、演算終了後、LFB70c,70dの各LFEから第2の問題に対するスピンビット列を読み出して、第2の問題の解とする。3以上の問題も同様にして、並列に演算可能である。これにより、複数の問題に対する演算を効率的に実行できる。
また、同一問題をLFBの複数の組により並列に解く場合、制御部504は、例えば、レプリカ交換法と呼ばれる手法により、演算を高速化することが考えられる。レプリカ交換法では、LFBの各組(各レプリカ)で異なる温度パラメータによるスピンビット列の更新を行い、所定回数の更新後に、所定確率で温度パラメータをLFBの組の間(すなわち、レプリカ間)で交換することで、解の探索を高速化する。
あるいは、解の探索方法として、図15の開始(START)から終了(END)までの手順を繰り返し行い、複数の演算結果の中から、最小となるエネルギーのスピンビット列を解として求める方法も考えられる。この場合、制御部504は、LFBの複数の組を用いて同一問題を並列に解くことで、上記繰り返し回数を減らし、演算を高速化することができる。
以上説明したように、実施の形態にかかる最適化問題演算装置101によれば、複数の最適化装置408それぞれの論理的な分割状態を規定するパーティションモードについての情報と、複数の最適化装置408の利用情報とに基づき、複数の最適化装置408それぞれのパーティションモードを決定することができる。複数の最適化装置408の利用情報は、例えば、複数の最適化装置408で演算が実行された組合せ最適化問題の実行履歴情報を含む。また、複数の最適化装置408の利用情報は、複数の最適化装置408の処理待ちキューに関する情報(例えば、各最適化装置408($j)の待ち時間)を含むことにしてもよい。また、複数の最適化装置408の利用情報は、複数の最適化装置408の利用状況に関する情報(例えば、各最適化装置408($j)の利用率)を含むことにしてもよい。
これにより、複数の最適化装置408の利用状況に応じて、複数の最適化装置408それぞれのパーティションモードを決定することができる。例えば、利用率の低い最適化装置408のパーティションモードを変更して、待ち時間が長くなっている最適化装置408と同一構成とすることができる。これにより、最適化装置408の数を増やすことなく、待ち合わせが生じている問題と同様の規模や要求精度の問題を解くことができるハードウェアリソースを増やすことができ、待ち時間を短縮することができるとともに、ユーザから要求された問題を処理しきれないことによる機会損失を削減することができる。
また、最適化問題演算装置101によれば、組合せ最適化問題を受け付け、受け付けた組合せ最適化問題の規模または要求精度と、決定した複数の最適化装置408それぞれのパーティションモードとに基づき、組合せ最適化問題を振り分ける最適化装置408を決定することができる。そして、最適化問題演算装置101によれば、決定した最適化装置408で、当該最適化装置408について決定したパーティションモードにより、組合せ最適化問題の演算を実行させることができる。
これにより、問題の規模や要求精度に応じたパーティションモードに設定された最適化装置408により、組合せ最適化問題の演算を行うことができる。このため、問題の規模や要求精度に応じて、演算の際に利用されるハードウェアリソースの範囲を適切に選択でき、演算性能を高めて演算処理の高速化を図ることができる。
また、最適化問題演算装置101によれば、最適化装置408のパーティションモードを、決定したパーティションモードに変更したことに応じて、複数の最適化装置408それぞれの論理的な分割状態を規定するパーティションモードについての情報を更新することができる。
これにより、複数の最適化装置408それぞれの実行状況に応じて、複数の最適化装置408それぞれのパーティションモードについての情報を更新することができる。例えば、ある最適化装置408の処理待ちキューに処理が溜まって待ち時間が増加すると、利用率の低い最適化装置408のパーティションモードが変更されて、複数の最適化装置408それぞれのパーティションモードについての情報が更新される。
また、最適化問題演算装置101によれば、複数の最適化装置408の利用情報に基づき、利用する最適化装置408の増減有無を判定し、判定した判定結果に応じて、利用する最適化装置408を増減させることができる。
これにより、複数の最適化装置408の利用状況に応じて、使用するハードウェアリソースの数を制御することができる。例えば、複数の最適化装置408の利用率が全体的に低いときは、いずれかの最適化装置408をスリープ状態にして予備装置409とすることができ、最適化問題演算装置101の消費電力を抑えることができる。
また、最適化問題演算装置101によれば、利用する最適化装置408を増加させた場合には、増加させた最適化装置408のパーティションモードを設定することができる。例えば、最適化問題演算装置101は、増加させた最適化装置408に、あらかじめ決められたパーティションモードを設定する。
これにより、増加させた最適化装置408を、最適化問題演算装置101の管理者などが決めた任意のパーティションモードで運用することができる。
また、最適化問題演算装置101によれば、組合せ最適化問題の規模以上の規模の問題を解くことができるパーティションモードが設定された最適化装置408のうち、解くことができる問題の最大規模が最小の最適化装置408を、組合せ最適化問題を振り分ける最適化装置408に決定することができる。
これにより、組合せ最適化問題の演算の際に利用されるハードウェアリソースの範囲を最小限に抑えることが可能となり、無駄なDMA転送などを防いで演算性能を高めることができる。
また、最適化問題演算装置101によれば、複数の最適化装置408それぞれの実行状況についての情報にさらに基づき、組合せ最適化問題を振り分ける最適化装置408を決定することができる。
これにより、問題を実行していない空きのユニットや、キューに溜まっている問題の数が少ない最適化装置408のユニットに組合せ最適化問題を優先的に振り分けることができる。このため、組合せ最適化問題の演算を実行させるにあたり、待ち時間が発生して演算処理の開始が遅れるのを防ぐことができる。
また、最適化問題演算装置101によれば、組合せ最適化問題の要求精度以上の精度の問題を解くことができるパーティションモードが設定された最適化装置408を、組合せ最適化問題を振り分ける最適化装置408に決定することができる。
これにより、組合せ最適化問題の要求精度に応じて、演算の際に利用されるハードウェアリソースの範囲を適切に選択して、組合せ最適化問題を効率的に解くことができる。
なお、本実施の形態で説明した最適化問題演算方法は、あらかじめ用意されたプログラムをパーソナル・コンピュータやワークステーション等のコンピュータで実行することにより実現することができる。本最適化問題演算プログラムは、ハードディスク、フレキシブルディスク、CD(Compact Disc)-ROM、MO(Magneto-Optical disk)、DVD(Digital Versatile Disk)、USB(Universal Serial Bus)メモリ等のコンピュータで読み取り可能な記録媒体に記録され、コンピュータによって記録媒体から読み出されることによって実行される。また、本最適化問題演算プログラムは、インターネット等のネットワークを介して配布してもよい。
また、本実施の形態で説明した最適化問題演算装置101の各機能部は、例えば、スタンダードセルやストラクチャードASIC(Application Specific Integrated Circuit)などの特定用途向けICやFPGAなどのPLD(Programmable Logic Device)によっても実現することができる。
上述した実施の形態に関し、さらに以下の付記を開示する。
(付記1)論理的に複数のパーティションに分割可能であって、組合せ最適化問題を解く複数の演算ユニットそれぞれの論理的な分割状態を規定するパーティションモードについての管理情報と、前記複数の演算ユニットの利用情報とに基づき、前記複数の演算ユニットそれぞれのパーティションモードを決定し、
組合せ最適化問題を受け付け、
前記組合せ最適化問題の規模または要求精度に関する情報と、決定した前記複数の演算ユニットそれぞれのパーティションモードに関する情報とに基づき、前記組合せ最適化問題を振り分ける演算ユニットを決定し、
決定した前記演算ユニットで、当該演算ユニットについて決定したパーティションモードにより、前記組合せ最適化問題の演算を実行させる、
処理をコンピュータに実行させる最適化問題演算プログラム。
(付記2)前記管理情報は、前記複数の演算ユニットそれぞれの実行状況に応じて更新される、付記1に記載の最適化問題演算プログラム。
(付記3)前記利用情報に基づき、利用する演算ユニットの増減有無を判定し、
判定した判定結果に応じて、利用する演算ユニットを増減させる、
処理を前記コンピュータに実行させる、付記1または2に記載の最適化問題演算プログラム。
(付記4)前記増減させる処理は、
利用する演算ユニットを増加させた場合には、増加させた演算ユニットのパーティションモードを設定する、付記3に記載の最適化問題演算プログラム。
(付記5)前記増減させる処理は、
増加させた演算ユニットに、あらかじめ決められたパーティションモードを設定する、付記4に記載の最適化問題演算プログラム。
(付記6)前記利用情報は、前記複数の演算ユニットで演算が実行された組合せ最適化問題の実行履歴情報を含む、付記1~5のいずれか一つに記載の最適化問題演算プログラム。
(付記7)前記利用情報は、前記複数の演算ユニットの処理待ちキューに関する情報を含む、付記1~6のいずれか一つに記載の最適化問題演算プログラム。
(付記8)前記利用情報は、前記複数の演算ユニットの利用状況に関する情報を含む、付記1~7のいずれか一つに記載の最適化問題演算プログラム。
(付記9)前記演算ユニットを決定する処理は、
前記組合せ最適化問題の規模以上の規模の問題を解くことができるパーティションモードが設定された演算ユニットのうち、解くことができる問題の最大規模が最小の演算ユニットを、前記組合せ最適化問題を振り分ける演算ユニットに決定する、付記1~8のいずれか一つに記載の最適化問題演算プログラム。
(付記10)前記演算ユニットを決定する処理は、
前記複数の演算ユニットそれぞれの実行状況についての情報にさらに基づき、前記組合せ最適化問題を振り分ける演算ユニットを決定する、付記1~9のいずれか一つに記載の最適化問題演算プログラム。
(付記11)前記演算ユニットを決定する処理は、
前記組合せ最適化問題の要求精度以上の精度の問題を解くことができるパーティションモードが設定された演算ユニットを、前記組合せ最適化問題を振り分ける演算ユニットに決定する、付記1~10のいずれか一つに記載の最適化問題演算プログラム。
(付記12)前記組合せ最適化問題の規模は、前記組合せ最適化問題のイジングモデルのスピンビット数によって表され、
前記組合せ最適化問題の要求精度は、ビット間の相互作用の大きさを示す重み係数のビット数によって表される、
付記1~11のいずれか一つに記載の最適化問題演算プログラム。
(付記13)論理的に複数のパーティションに分割可能であって、組合せ最適化問題を解く複数の演算ユニットそれぞれの論理的な分割状態を規定するパーティションモードについての管理情報と、前記複数の演算ユニットの利用情報とに基づき、前記複数の演算ユニットそれぞれのパーティションモードを決定し、
組合せ最適化問題を受け付け、
前記組合せ最適化問題の規模または要求精度に関する情報と、決定した前記複数の演算ユニットそれぞれのパーティションモードに関する情報とに基づき、前記組合せ最適化問題を振り分ける演算ユニットを決定し、
決定した前記演算ユニットで、当該演算ユニットについて決定したパーティションモードにより、前記組合せ最適化問題の演算を実行させる、
処理をコンピュータが実行する最適化問題演算方法。
(付記14)論理的に複数のパーティションに分割可能であって、組合せ最適化問題を解く複数の演算ユニットと、
組合せ最適化問題を受け付ける受付部と、
前記複数の演算ユニットそれぞれの論理的な分割状態を規定するパーティションモードについての情報を保持する管理部と、
前記管理部が保持する情報と、前記複数の演算ユニットの利用情報とに基づき、前記複数の演算ユニットそれぞれのパーティションモードを決定する第1の決定部と、
前記組合せ最適化問題の規模または要求精度に関する情報と、前記第1の決定部が決定した前記複数の演算ユニットそれぞれのパーティションモードに関する情報とに基づき、前記組合せ最適化問題を振り分ける演算ユニットを決定する第2の決定部と、
前記第2の決定部が決定した前記演算ユニットで、前記第1の決定部が当該演算ユニットについて決定したパーティションモードにより、前記組合せ最適化問題の演算を実行させる実行制御部と、
を有する最適化問題演算装置。