(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公開特許公報(A)
(11)【公開番号】P2024102929
(43)【公開日】2024-08-01
(54)【発明の名称】アニーリング処理システム、管理装置、チップ、アニーリング処理方法及びプログラム
(51)【国際特許分類】
G06N 99/00 20190101AFI20240725BHJP
【FI】
G06N99/00 180
【審査請求】未請求
【請求項の数】10
【出願形態】OL
(21)【出願番号】P 2023007011
(22)【出願日】2023-01-20
【国等の委託研究の成果に係る記載事項】(出願人による申告)平成30年度、国立研究開発法人科学技術振興機構、「戦略的創造研究推進事業」、「チーム型研究(CREST)」、「Society5.0を支える革新的コンピューティング技術」、「学習/数理モデルに基づく時空間展開型アーキテクチャの創出と応用」、「学習/数理モデルに基づく時空間展開型アーキテクチャの創出と応用」、委託研究、産業技術力強化法第17条の適用を受ける特許出願
(71)【出願人】
【識別番号】304021417
【氏名又は名称】国立大学法人東京工業大学
(74)【代理人】
【識別番号】100103894
【弁理士】
【氏名又は名称】家入 健
(72)【発明者】
【氏名】川村 一志
(72)【発明者】
【氏名】劉 載勲
(72)【発明者】
【氏名】本村 真人
(57)【要約】
【課題】多数のスピンで構成される任意の形状のイジングモデルを用いて効率的にアニーリング処理を行うことが可能なアニーリング処理システムを提供する。
【解決手段】複数のチップ200それぞれは、他のチップ200によってスピン状態が決定されるスピンとは異なる1つ以上のスピンのスピン状態を、アニーリングのステップごとに決定する。管理装置100は、更新情報生成部130と、更新情報圧縮部140と、更新情報送信部150とを有する。更新情報生成部130は、更新情報を生成する。更新情報圧縮部140は、更新情報に対して圧縮処理を行う。更新情報送信部150は、圧縮された更新情報を、当該更新情報に対応するスピン情報に関するチップ200以外のチップ200に送信する。
【選択図】
図5
【特許請求の範囲】
【請求項1】
イジングモデルを用いて解を求めるアニーリング処理を行うアニーリング処理システムであって、
前記イジングモデルの複数のスピンのスピン状態を決定する複数のチップであって、前記複数のチップそれぞれは、前記複数のスピンのうち、他の前記チップによってスピン状態が決定されるスピンとは異なる1つ以上のスピンのスピン状態を、アニーリングのステップごとに決定する、複数のチップと、
前記決定されたスピン状態を示すスピン情報を用いて当該スピン情報に関するスピンそれぞれが更新されたか否かを示す更新情報を生成する更新情報生成部と、
前記更新情報に対して圧縮処理を行う更新情報圧縮部と、
圧縮された前記更新情報を、当該更新情報に対応する前記スピン情報に関するチップ以外のチップに送信する更新情報送信部と、
を有する、アニーリング処理システム。
【請求項2】
前記複数のチップそれぞれは、
圧縮された前記更新情報を展開して得られた前記更新情報を用いて得られた、他のチップによってスピン情報を決定すべきスピンのスピン状態と、当該チップによってスピン情報を決定すべきスピンの反転確率に基づいて得られた、当該チップによってスピン情報を決定すべきスピンの更新されたスピン状態とに基づいて、当該チップによってスピン情報を決定すべきスピンについて瞬間磁場を計算することによって、当該スピンに関するスピン情報を決定する、
請求項1に記載のアニーリング処理システム。
【請求項3】
前記複数のチップそれぞれは、第1のバッファ及び第2のバッファを有し、
前記第2のバッファが前記アニーリング処理に関する計算を行うために使用されている場合に、前記第1のバッファは、前記更新情報の受信のために使用可能であり、
前記第1のバッファが前記アニーリング処理に関する計算を行うために使用されている場合に、前記第2のバッファは、前記更新情報の受信のために使用可能である、
請求項1に記載のアニーリング処理システム。
【請求項4】
前記更新情報圧縮部は、前記更新情報におけるスピンが更新されたことを示すビットの数に応じて圧縮率が高い圧縮方法で圧縮処理を行う、
請求項1に記載のアニーリング処理システム。
【請求項5】
前記複数のチップそれぞれは、当該チップがスピン状態を決定すべきスピンについてスピン状態を決定する処理を互いに異なり得るパラメータを用いて複数回行うレプリカ処理を行う、
請求項1に記載のアニーリング処理システム。
【請求項6】
前記複数のチップを管理する管理装置、
をさらに有し、
前記管理装置は、
前記複数のチップそれぞれから前記スピン情報を受信するスピン情報受信部と、
受信された前記スピン情報を用いて前記更新情報を生成する前記更新情報生成部と、
前記更新情報圧縮部と、
圧縮された前記更新情報を、当該更新情報に対応する前記スピン情報に関するチップ以外のチップに送信する更新情報送信部と、
を有する、
請求項1に記載のアニーリング処理システム。
【請求項7】
イジングモデルを用いて解を求めるアニーリング処理を行う複数のチップを管理する管理装置であって、前記複数のチップは、前記イジングモデルの複数のスピンのスピン状態を決定し、前記複数のチップそれぞれは、前記複数のスピンのうち、他の前記チップによってスピン状態が決定されるスピンとは異なる1つ以上のスピンのスピン状態を、アニーリングのステップごとに決定し、
前記複数のチップそれぞれから前記決定されたスピン状態を示すスピン情報を受信するスピン情報受信部と、
受信された前記スピン情報を用いて当該スピン情報に関するスピンそれぞれが更新されたか否かを示す更新情報を生成する更新情報生成部と、
前記更新情報に対して圧縮処理を行う更新情報圧縮部と、
圧縮された前記更新情報を、当該更新情報に対応する前記スピン情報に関するチップ以外のチップに送信する更新情報送信部と、
を有する、管理装置。
【請求項8】
イジングモデルを用いて解を求めるアニーリング処理システムにおけるチップであって、前記アニーリング処理システムは、前記イジングモデルの複数のスピンのスピン状態を決定する複数の前記チップを有し、複数の前記チップそれぞれは、前記複数のスピンのうち、他の前記チップによってスピン状態が決定されるスピンとは異なる1つ以上のスピンのスピン状態を、アニーリングのステップごとに決定し、
前記チップは、
他のチップが扱うスピンそれぞれが更新されたか否かを示す、圧縮処理が行われた更新情報を受信し、
圧縮された前記更新情報を展開して得られた前記更新情報を用いて得られた、他のチップによってスピン情報を決定すべきスピンのスピン状態と、当該チップによってスピン情報を決定すべきスピンの反転確率に基づいて得られた、当該チップによってスピン情報を決定すべきスピンの更新されたスピン状態とに基づいて、当該チップによってスピン情報を決定すべきスピンについて瞬間磁場を計算することによって、当該スピンに関するスピン情報を決定する、
チップ。
【請求項9】
イジングモデルを用いて解を求めるアニーリング処理を行うアニーリング処理システムで実行されるアニーリング処理方法であって、
前記イジングモデルの複数のスピンのスピン状態を決定する複数のチップそれぞれが、前記複数のスピンのうち、他の前記チップによってスピン状態が決定されるスピンとは異なる1つ以上のスピンのスピン状態を、アニーリングのステップごとに決定し、
前記決定されたスピン状態を示すスピン情報を用いて当該スピン情報に関するスピンそれぞれが更新されたか否かを示す更新情報を生成し、
前記更新情報に対して圧縮処理を行い、
圧縮された前記更新情報を、当該更新情報に対応する前記スピン情報に関するチップ以外のチップに送信する、
アニーリング処理方法。
【請求項10】
イジングモデルを用いて解を求めるアニーリング処理を行う複数のチップを管理するためのプログラムであって、前記複数のチップは、前記イジングモデルの複数のスピンのスピン状態を決定し、前記複数のチップそれぞれは、前記複数のスピンのうち、他の前記チップによってスピン状態が決定されるスピンとは異なる1つ以上のスピンのスピン状態を、アニーリングのステップごとに決定し、
前記複数のチップそれぞれから前記決定されたスピン状態を示すスピン情報を受信する処理と、
受信された前記スピン情報を用いて当該スピン情報に関するスピンそれぞれが更新されたか否かを示す更新情報を生成する処理と、
前記更新情報に対して圧縮処理を行う処理と、
圧縮された前記更新情報を、当該更新情報に対応する前記スピン情報に関するチップ以外のチップに送信する処理と、
をコンピュータに実行させるプログラム。
【発明の詳細な説明】
【技術分野】
【0001】
本開示は、アニーリング処理システム、管理装置、チップ、アニーリング処理方法及びプログラムに関する。
【背景技術】
【0002】
例えば量子アニーリング又はシミュレーテッドアニーリング等の、イジングモデルの基底状態を探索する問題を求解するためのアニーリングアルゴリズム(焼き鈍し法)が知られている。この技術に関連し、特許文献1は、複数のローカルイジングマシン(Local Ising Machine)によってアニーリングを実行する技術を開示する。また、特許文献2は、デジタルアニーリング(Digital Annealing:DA)に関する技術を開示する。また、特許文献3は、自己作用のパラメータを導入することによって、イジングモデルの全スピンの状態を並列に更新することが可能な技術(確率的セルラオートマタアニーリング;Stochastic Cellular Automata Annealing:SCA)を開示する。また、特許文献4は、更新確率と更新試行率とに基づいて、複数のスピンの状態を並列に決定する技術(更新試行率制御並列アニーリング;Ratio-Controlled Parallel Annealing:RPA)を開示する。
【先行技術文献】
【特許文献】
【0003】
【特許文献1】国際公開第2022/053149号
【特許文献2】米国特許第11372034号明細書
【特許文献3】特開2021-43508号公報
【特許文献4】特開2022-177458号公報
【発明の概要】
【発明が解決しようとする課題】
【0004】
求解の対象となる問題(組み合わせ最適化問題等)によっては、イジングモデルのスピンの数が膨大になる可能性がある。この場合、複数のチップ(アニーリング処理装置)を用いてアニーリング処理を行う必要があり得る。複数のチップを用いてアニーリング処理を行う場合、特許文献1に開示されているように、複数のスピンを複数のチップ(ローカルイジングマシン)で分配することが考えられる。しかしながら、特許文献1にかかる技術では、多数のスピンで構成される任意の形状のイジングモデルを用いる場合に、効率的にアニーリング処理を行うことができないおそれがある。
【0005】
本開示は、多数のスピンで構成される任意の形状のイジングモデルを用いて効率的にアニーリング処理を行うことが可能なアニーリング処理システム、管理装置、チップ、アニーリング処理方法及びプログラムを提供することを目的とする。
【課題を解決するための手段】
【0006】
本開示にかかるアニーリング処理システムは、イジングモデルを用いて解を求めるアニーリング処理を行うアニーリング処理システムであって、前記イジングモデルの複数のスピンのスピン状態を決定する複数のチップであって、前記複数のチップそれぞれは、前記複数のスピンのうち、他の前記チップによってスピン状態が決定されるスピンとは異なる1つ以上のスピンのスピン状態を、アニーリングのステップごとに決定する、複数のチップと、前記決定されたスピン状態を示すスピン情報を用いて当該スピン情報に関するスピンそれぞれが更新されたか否かを示す更新情報を生成する更新情報生成部と、前記更新情報に対して圧縮処理を行う更新情報圧縮部と、圧縮された前記更新情報を、当該更新情報に対応する前記スピン情報に関するチップ以外のチップに送信する更新情報送信部と、を有する。
【0007】
また、本開示にかかる管理装置は、イジングモデルを用いて解を求めるアニーリング処理を行う複数のチップを管理する管理装置であって、前記複数のチップは、前記イジングモデルの複数のスピンのスピン状態を決定し、前記複数のチップそれぞれは、前記複数のスピンのうち、他の前記チップによってスピン状態が決定されるスピンとは異なる1つ以上のスピンのスピン状態を、アニーリングのステップごとに決定し、前記複数のチップそれぞれから前記決定されたスピン状態を示すスピン情報を受信するスピン情報受信部と、受信された前記スピン情報を用いて当該スピン情報に関するスピンそれぞれが更新されたか否かを示す更新情報を生成する更新情報生成部と、前記更新情報に対して圧縮処理を行う更新情報圧縮部と、圧縮された前記更新情報を、当該更新情報に対応する前記スピン情報に関するチップ以外のチップに送信する更新情報送信部と、を有する。
【0008】
また、本開示にかかるチップは、イジングモデルを用いて解を求めるアニーリング処理システムにおけるチップであって、前記アニーリング処理システムは、前記イジングモデルの複数のスピンのスピン状態を決定する複数の前記チップを有し、複数の前記チップそれぞれは、前記複数のスピンのうち、他の前記チップによってスピン状態が決定されるスピンとは異なる1つ以上のスピンのスピン状態を、アニーリングのステップごとに決定し、前記チップは、他のチップが扱うスピンそれぞれが更新されたか否かを示す、圧縮処理が行われた更新情報を受信し、圧縮された前記更新情報を展開して得られた前記更新情報を用いて得られた、他のチップによってスピン情報を決定すべきスピンのスピン状態と、当該チップによってスピン情報を決定すべきスピンの反転確率に基づいて得られた、当該チップによってスピン情報を決定すべきスピンの更新されたスピン状態とに基づいて、当該チップによってスピン情報を決定すべきスピンについて瞬間磁場を計算することによって、当該スピンに関するスピン情報を決定する。
【0009】
また、本開示にかかるアニーリング処理方法は、イジングモデルを用いて解を求めるアニーリング処理を行うアニーリング処理システムで実行されるアニーリング処理方法であって、前記イジングモデルの複数のスピンのスピン状態を決定する複数のチップそれぞれが、前記複数のスピンのうち、他の前記チップによってスピン状態が決定されるスピンとは異なる1つ以上のスピンのスピン状態を、アニーリングのステップごとに決定し、前記決定されたスピン状態を示すスピン情報を用いて当該スピン情報に関するスピンそれぞれが更新されたか否かを示す更新情報を生成し、前記更新情報に対して圧縮処理を行い、圧縮された前記更新情報を、当該更新情報に対応する前記スピン情報に関するチップ以外のチップに送信する。
【0010】
また、本開示にかかるプログラムは、イジングモデルを用いて解を求めるアニーリング処理を行う複数のチップを管理するためのプログラムであって、前記複数のチップは、前記イジングモデルの複数のスピンのスピン状態を決定し、前記複数のチップそれぞれは、前記複数のスピンのうち、他の前記チップによってスピン状態が決定されるスピンとは異なる1つ以上のスピンのスピン状態を、アニーリングのステップごとに決定し、前記複数のチップそれぞれから前記決定されたスピン状態を示すスピン情報を受信する処理と、受信された前記スピン情報を用いて当該スピン情報に関するスピンそれぞれが更新されたか否かを示す更新情報を生成する処理と、前記更新情報に対して圧縮処理を行う処理と、圧縮された前記更新情報を、当該更新情報に対応する前記スピン情報に関するチップ以外のチップに送信する処理と、をコンピュータに実行させる。
【発明の効果】
【0011】
本開示によれば、多数のスピンで構成される任意の形状のイジングモデルを用いて効率的にアニーリング処理を行うことが可能なアニーリング処理システム、管理装置、チップ、アニーリング処理方法及びプログラムを提供できる。
【図面の簡単な説明】
【0012】
【
図1】全結合のイジングモデルを用いてアニーリング処理を行う場合について説明するための図である。
【
図2】全結合のイジングモデルを用いてアニーリング処理を行う場合について説明するための図である。
【
図3】全結合のイジングモデルを用いてアニーリング処理を行う場合について説明するための図である。
【
図4】実施の形態1にかかるアニーリング処理システムの構成を示す図である。
【
図5】実施の形態1にかかる管理装置の構成を示す機能ブロック図である。
【
図6】実施の形態1にかかる更新情報圧縮部で圧縮方法を切り替えることによる効果を説明するための図である。
【
図7】実施の形態1にかかるチップの構成を示す図である。
【
図8】実施の形態1にかかるチップの構成を示す図である。
【
図9】実施の形態1にかかるチップにおける演算の流れを説明するための図である。
【
図10】実施の形態1にかかるアニーリング処理システムで実行されるアニーリング処理方法を示すフローチャートである。
【
図11】実施の形態1にかかるアニーリング処理システムで実行されるアニーリング処理方法を示すフローチャートである。
【
図12】実施の形態1にかかるアニーリング処理システムで実行されるアニーリング処理方法を示すフローチャートである。
【
図13】実施の形態1にかかるアニーリング処理システムで実行されるアニーリング処理方法を示すフローチャートである。
【
図14】実施の形態1にかかるアニーリング処理システムで実行されるアニーリング処理方法を示すフローチャートである。
【
図15】実施の形態1にかかるアニーリング処理システムによって行われるアニーリング処理を説明するための図である。
【
図16】実施の形態1にかかるアニーリング処理システムで実行される処理を示すタイミングチャートを例示する図である。
【
図17】実施の形態2にかかるアニーリング処理システムにおいて実行される処理を示すタイミングチャートを例示する図である。
【発明を実施するための形態】
【0013】
(実施の形態の概要)
実施の形態の説明に先立って、本実施の形態の概要について説明する。なお、以下、本実施形態を説明するが、以下の実施形態は請求の範囲にかかる発明を限定するものではない。また、実施形態の中で説明されている特徴の組み合わせの全てが発明の解決手段に必須であるとは限らない。
【0014】
<アニーリングについて>
まず、一般的なシミュレーテッドアニーリング(SA)による組み合わせ最適化問題について説明する。組み合わせ最適化問題は、以下の式1で示されるエネルギーHを最小化するσを求めることと等価である。言い換えると、組み合わせ最適化問題は、エネルギーHが式1で与えられるイジングモデルの、最小エネルギー状態(基底状態)を求める問題に等しい。式1は、シミュレーテッドアニーリングにおけるエネルギー関数(ハミルトニアン)を示す。
【数1】
・・・(1)
【0015】
ここで、式1の左辺のσは、以下の式2で定義されるベクトル(σ
iの組み合わせ;スピン配列)である。また、σ
i(及びσ
j)は、σの成分である。
【数2】
・・・(2)
【0016】
ここで、σiは、イジングモデルにおけるスピン(ノード;格子点)iの状態(イジングスピン)を示す二値パラメータ(状態パラメータ)である。したがって、σiは、スピンiのスピン状態を示している。また、スピン状態を示す情報を、スピン情報と称する。式2に示すように、σiは、-1又は+1のいずれかの値をとる。なお、以下の説明において、便宜上、スピンiの意味で、σiを用いることがある。また、式2において、Nは、スピン数である。また、式1のJijは、スピンi(σi)とスピンj(σj)との間の相互作用(結合の強さ)を示す相互作用係数(結合係数)である。相互作用係数Jijは、例えば、スピンiとスピンjとの間の距離、又は、スピンiとスピンjとの間の重みを示す。また、hiは、スピンi(σi)に対する外部磁場を示す外部磁場係数である。なお、相互作用係数Jij及び外部磁場係数hiは、アニーリングアルゴリズムによる求解の対象である問題に応じて予め与えられる。つまり、解くべき組み合わせ最適化問題が決定すれば、相互作用係数Jij及び外部磁場係数hiは一意に定まり得る。
【0017】
また、シミュレーテッドアニーリングにおいて、組み合わせ最適化問題は、式1のエネルギーHを最小化するσを探索することに対応する。したがって、基底状態におけるスピン状態は、以下の式3で表される。σ
gは、最小エネルギー状態をとるスピン状態の組み合わせを示す。
【数3】
・・・(3)
【0018】
ここで、一般的に、Hを最小化するσを解析的に解くことはできない。そのため、解を確率的にサンプリングすることによって探索することが行われる。例えば、モンテカルロ法に基づくシミュレーテッドアニーリングアルゴリズムが実行される。そして、アニーリングステップが進むにつれて、更新スピン数(各アニーリングステップで更新(反転)されるスピンの数;フリップ数)が減少し、式1で示したエネルギーHが低下していくように、シミュレーテッドアニーリングアルゴリズムが実行される。そして、基底状態に近づくにつれて、更新スピン数は0に収束し、エネルギーHは、最低エネルギーに収束していく。つまり、アニーリングアルゴリズムの実行が進むにつれて、イジングモデルにおける状態が収束していく。
【0019】
ここで、シミュレーテッドアニーリングにおいて、全スピン間に相互作用を持つ全結合型(完全グラフ)のイジングモデルでは、各スピンの状態の更新(フリップ)が、他の全てのスピンの状態に影響を及ぼす。したがって、スピンの状態を並列に更新することができず、1つ1つのスピンの状態を、逐次、更新する。したがって、シミュレーテッドアニーリングでは、処理速度(収束速度)が遅くなるおそれがある。
【0020】
これに対し、特許文献3にかかる技術では、自己作用のパラメータqを導入することによって、イジングモデルの全スピンの状態を並列に更新することが可能である。上述したように、特許文献3にかかる技術では、SCAと呼ばれる手法を用いて、アニーリングアルゴリズムを実行している。
【0021】
具体的には、SCAでは、複数のスピンそれぞれについて、並列に、反転され得るか否か(反転可能であるか否か)が判定される。つまり、複数のスピンのそれぞれについて、並列に、更新可能であるか否かが判定される。ここで、複数のスピンのそれぞれについて並列に瞬間磁場(局所場:local field)が計算される。そして、計算された瞬間磁場に基づいて、複数のスピンそれぞれの反転確率が並列に計算される。そして、その反転確率に基づいて、複数のスピンそれぞれが反転され得るか否かが、判定される。具体的には、あるスピンの反転確率がアニーリングステップごとに生成される乱数よりも大きい場合に、そのスピンが反転可能であると判定される。その際に、SCAでは、スピンの反転を抑制するような自己作用(パラメータq)を用いて、反転確率が計算される。そして、SCAでは、反転可能であるスピンが全て反転される。
【0022】
ここで、瞬間磁場は、各スピンjについて、以下の式4によって計算される。
【数4】
・・・(4)
【0023】
ここで、便宜上、本明細書において、式4の左辺を、「~hj」と表す。瞬間磁場~hjは、各スピンj(σj)について、並列に計算され得る。σiは、スピンiのスピン状態を示す。
【0024】
各スピンjの反転確率P
iは、以下の式5で示すように、シグモイド関数を用いて計算される。なお、βは、アニーリングアルゴリズムにおける逆温度のパラメータである。また、上述したように、qは、自己作用のパラメータである。
【数5】
・・・(5)
【0025】
<問題提起>
上述したように、求解の対象となる問題(組み合わせ最適化問題等)によっては、イジングモデルのスピンの数が膨大になる可能性がある。アニーリング処理を行うチップ(アニーリング処理装置)の計算資源に制限がある場合では、スピンの数が膨大になると、1つのチップのみではアニーリング処理を行うことができないおそれがある。したがって、スピンの数が膨大になる場合では、複数のチップを用いてアニーリング処理を行う必要があり得る。
【0026】
複数のチップを用いてアニーリング処理を行う場合、特許文献1に開示されているように、複数のスピンを複数のチップ(ローカルイジングマシン)で分配することが考えられる。ここで、特許文献1にかかる技術では、あるローカルイジングマシンで扱うスピンのうちの特定のスピンと、他のローカルイジングマシンで扱うスピンのうちの特定のスピンとが、結合している。一方、イジングモデルの形状は解くべき問題によって定まり得るので、解くべき問題によっては、特許文献1に記載された形状のイジングモデルでは適切にアニーリング処理を行うことができないおそれがある。例えば、イジングモデルには、全てのスピンが他の全てのスピンと結合する全結合のイジングモデルがある。特許文献1では、このような全結合のイジングモデルを用いてアニーリング処理を行うことを想定していない。したがって、特許文献1にかかる技術では、以下に説明するように、任意の形状のイジングモデルを用いてアニーリング処理を行うことができない。
【0027】
図1~
図3は、全結合のイジングモデルを用いてアニーリング処理を行う場合について説明するための図である。
図1は、2048個(2K個(1K=1024))のスピン(ノード)を有するイジングモデルを示している。そして、
図1では、全てのスピンが、他の全てのスピンと結合している。つまり、
図1は、全結合のイジングモデルを示している。
図1に示されたイジングモデルは、スピンσ
1,1~σ
1,512、σ
2,1~σ
2,512、σ
3,1~σ
3,512、σ
4,1~σ
4,512を有する。
【0028】
そして、このイジングモデルを、便宜上、
図2に示すように4つの区分に分割する。そして、4つのチップ#1~#4(アニーリング処理装置)が、このイジングモデルを用いてアニーリング処理を行うことを考える。つまり、1つのチップが1つの区分に含まれるスピンを扱う(担当する)とする。言い換えると、1つのチップが1つの区分に含まれるスピンのスピン状態を決定するとする。ここで、チップ#kが扱うスピンをσ
k,jとすると、インデックスj(j=1,2,・・・,N(1≦j≦Nと表記することもある))は、チップ#kが扱うスピンのインデックスである。なお、Nは、チップ#kが扱うスピンの数を示す。
【0029】
例えば、チップ#1は、
図2の一点鎖線の楕円で囲まれたスピンσ
1,1~σ
1,512を扱う。つまり、チップ#1は、0.5K個(512個)のスピンσ
1,1~σ
1,512の更新処理を行う。同様に、チップ#2は、0.5K個(512個)のスピンσ
2,1~σ
2,512の更新処理を行う。チップ#3は、0.5K個(512個)のスピンσ
3,1~σ
3,512の更新処理を行う。チップ#4は、0.5K個(512個)のスピンσ
4,1~σ
4,512の更新処理を行う。
【0030】
なお、「更新処理」とは、アニーリングステップごとにスピンを反転させるか否かを判定し、反転させる場合はそのスピンを反転させ、反転させない場合はそのスピンのスピン情報を維持するような処理である。つまり、更新処理は、アニーリングステップごとに、各チップが扱う各スピン(各チップが担当する各スピン)のスピン状態を決定することに対応する。したがって、更新処理を行うからといって、そのスピンが常に反転するわけではないことに留意されたい。
【0031】
図3は、チップ#1に格納されるべき情報を説明するための図である。ここで、各スピンの更新処理では、反転確率の計算に必要な瞬間磁場(式4)を計算するために、そのスピンと結合する他のスピンのスピン情報、及び、そのスピンと他のスピンとの間の相互作用係数J
ijが、必要となる。したがって、全結合のイジングモデルにおける各スピンの更新処理では、全てのスピンのスピン情報、及び、各スピンと他の全てのスピンとの間の相互作用係数J
ijが、必要となる。
図3の例では、チップ#1が扱うスピンσ
1,1~σ
1,512の更新処理では、イジングモデルにおける全てのスピンのスピン情報、及び、スピンσ
1,1~σ
1,512それぞれと他の全てのスピンとの間の相互作用係数J
ij(
図3の太い実線で示す)が、必要となる。
【0032】
したがって、チップ#1は、チップ#1が扱うスピンに関する情報だけでなく、全てのスピンのスピン情報と、上述した相互作用係数J
ijとを格納しておく必要がある。したがって、チップ#kは、チップ#kが扱うスピンσ
k,iと、チップ#lが扱うスピンσ
l,jとの間の相互作用係数J(k,l)
ijを格納する。ここで、l(l=1,2,3,4)は、任意のチップのインデックスである。例えば、
図3に示すように、チップ#1は、チップ#1が扱うスピンσ
1,1と、チップ#3が扱うスピンσ
3,1との間の相互作用係数J(1,3)
11を格納する。
【0033】
上述したように、2048個(2K個)のスピンを均等に4つに分配した数のスピンを4つのチップそれぞれが扱うとすると、各チップが扱うスピンの数は、512個(0.5K個)である。したがって、各チップが、自身が扱う512個のスピンの更新処理を行うために並列に計算を行う場合、各チップが備えるべき計算ユニットの数は、512個(0.5K個)となる。また、この場合、1つの相互作用係数Jijを格納するのに要するメモリ容量を1バイト(1B=8ビット)とすると、各チップが相互作用係数Jijを格納するために備えるべきメモリ領域の容量は、1MB(1M=1024×1024)となる。
【0034】
一方、1つのチップで2048個(2K個)のスピンを扱うとすると、そのチップは、2048個(2K個)の計算ユニットを備える必要がある。したがって、2048個(2K個)のスピンを均等に4つに分配した数のスピンを4つのチップそれぞれが扱うようにすることで、1つのチップが備えるべき計算ユニットの数を削減できる。また、1つのチップで2048個(2K個)のスピンを扱うとすると、そのチップが相互作用係数Jijを格納するために、4MBのメモリ領域が必要となる。したがって、2048個(2K個)のスピンを均等に4つに分配した数のスピンを4つのチップそれぞれが扱うようにすることで、1つのチップが備えるべきメモリ領域の容量を削減できる。
【0035】
そして、各チップが、他のチップが扱うスピンのスピン情報を格納するためには、それらのスピン情報を取得するための情報を受信する必要がある。特許文献1の技術では、複数のチップ(ローカルイジングマシン)間で結合するスピンのスピン情報が、そのチップ間で送受信される。ここで、上述したように、特許文献1にかかる技術では、あるチップで扱うスピンのうちの特定のスピンと、他のチップで扱うスピンのうちの特定のスピンとが、結合している。したがって、特許文献1の技術では、1つのチップが扱うスピンのうちの特定のスピンのスピン情報が、そのスピンと結合するスピンを扱うチップに送信されるのみでよい。
【0036】
しかしながら、上述したように、特許文献1の技術では、全結合のイジングモデルを想定していない。そして、全結合のイジングモデルを用いてアニーリング処理を行う場合、全てのスピンのスピン情報を、チップ間で共有する必要がある。したがって、特許文献1の技術のようにスピン情報が通信される場合、全てのスピンのスピン情報が送受信される必要がある。しかしながら、全てのスピンのスピン情報をチップ間で送受信する場合、多くの通信リソースが必要となり、多くの通信時間が必要となる。したがって、特許文献1の技術を任意の形状のイジングモデルを用いてアニーリング処理を行うことに適用することは、困難である。
【0037】
これに対し、本実施の形態では、あるチップが扱う各スピンそれぞれが更新されたか否かを示す更新情報が、他のチップに送信されるように構成されている。ここで、アニーリングアルゴリズムでは、アニーリングステップが進むにつれて、反転されるスピンの数は減少する。したがって、アニーリングステップが進むにつれて、更新情報において、反転しないことを示す値が増加していく。したがって、更新情報のデータを圧縮することで、更新情報のデータ量を効率的に削減できる。したがって、更新情報を通信するための時間を削減することができる。したがって、各チップが、他のチップが扱うスピンのスピン情報を取得するための情報(更新情報)を受信するときの通信リソースを、節約することができる。したがって、本実施の形態では、多数のスピンで構成される任意の形状のイジングモデルを用いて効率的にアニーリング処理を行うことが可能となる。
【0038】
(実施の形態1)
以下、実施形態について、図面を参照しながら説明する。説明の明確化のため、以下の記載及び図面は、適宜、省略、及び簡略化がなされている。また、各図面において、同一の要素には同一の符号が付されており、必要に応じて重複説明は省略されている。
【0039】
<アニーリング処理システム>
図4は、実施の形態1にかかるアニーリング処理システム1の構成を示す図である。実施の形態1にかかるアニーリング処理システム1は、イジングモデルを用いて解を求める。なお、実施の形態1にかかるアニーリング処理システム1は、上述したSCAのアニーリングアルゴリズムの種類(アニーリングポリシー)でアニーリング処理を実行するとする。
【0040】
アニーリング処理システム1は、管理装置100と、複数のチップ200-1~200-Cとを有する。なお、複数のチップ200を区別せずに述べる場合、単にチップ200と称することがある。また、Cは、2以上の整数であり、チップ200の個数を示す。以下に示す説明ではチップ200の個数を4個(つまりC=4)とするが、チップ200の個数は4個に限られない。なお、チップ200-1は、
図1~
図3のチップ#1に対応し得る。チップ200-2は、
図1~
図3のチップ#2に対応し得る。チップ200-3は、
図1~
図3のチップ#3に対応し得る。チップ200-4は、
図1~
図3のチップ#4に対応し得る。また、チップ200-kを、チップ#kと称することがある。kは、1以上C以下の整数である。
【0041】
チップ200は、アニーリング処理を行う半導体チップである。したがって、チップ200は、アニーリング処理装置として機能する。複数のチップ200-1~200-Cは、イジングモデルの複数のスピンのスピン状態を決定する。ここで、複数のチップ200-1~200-Cそれぞれは、複数のスピンのうち、他のチップ200によってスピン状態が決定されるスピンとは異なる1つ以上のスピンのスピン状態を、アニーリングのステップごとに決定する。つまり、チップ200-kは、他のチップ200-l(lは、1以上C以下の整数であって、l≠k)によってスピン状態が決定されるスピンとは異なる1つ以上のスピンのスピン状態を決定する。言い換えると、チップ200-1~200-Cは、互いに異なるスピンのスピン状態を決定する。言い換えると、チップ200-1~200-Cのそれぞれは、自身のチップ200が扱うスピンのスピン状態を決定する。チップ200-1~200-Cは、決定されたスピン状態を示すスピン情報を、管理装置100に送信する。チップ200の構成については後述する。
【0042】
管理装置100は、例えばコンピュータである。管理装置100は、例えばFPGA(field-programmable gate array)で実現されてもよい。管理装置100は、複数のチップ200-1~200-Cを管理する。したがって、管理装置100は、マルチチップマネージャ(Multi-Chip Manager)として機能し得る。具体的には、管理装置100は、各チップ200からそのチップが扱う各スピンのスピン情報を受信して、更新情報を生成する。また、管理装置100は、生成された更新情報を圧縮(データ圧縮)して、圧縮された更新情報を、スピン情報を送信したチップ200とは異なるチップ200に送信する。詳しくは後述する。
【0043】
また、管理装置100は、イジングモデル全体のエネルギーの遷移及びスピン状態(スピンの更新を示す情報)の遷移を観測してもよい。また、管理装置100は、イジングモデル全体のエネルギー及びスピン状態の情報から、アニーリングアルゴリズムで使用されるアニーリングパラメータ(疑似温度又は逆温度、及び自己作用係数等)を制御してもよい。
【0044】
<管理装置>
図5は、実施の形態1にかかる管理装置100の構成を示す機能ブロック図である。管理装置100は、主要なハードウェア構成として、制御部102と、記憶部104と、通信部106と、インタフェース部108(IF;Interface)とを有する。制御部102、記憶部104、通信部106及びインタフェース部108は、データバスなどを介して相互に接続されている。
【0045】
制御部102は、例えばCPU(Central Processing Unit)等のプロセッサである。制御部102は、制御処理及び演算処理等を実行する機能を有する。記憶部104は、例えばメモリ又はハードディスク等の記憶デバイスである。記憶部104は、例えばROM(Read Only Memory)又はRAM(Random Access Memory)等である。記憶部104は、制御部102によって実行される制御プログラム及び演算プログラム等を記憶するための機能を有する。また、記憶部104は、処理データ等を一時的に記憶するための機能を有する。記憶部104は、データベースを含み得る。
【0046】
通信部106は、他の装置と有線又は無線のネットワークを介して通信を行うために必要な処理を行う。通信部106は、通信ポート、ルータ、ファイアウォール等を含み得る。インタフェース部108は、例えばユーザインタフェース(UI;User Interface)である。インタフェース部108は、キーボード、タッチパネル又はマウス等の入力装置と、ディスプレイ又はスピーカ等の出力装置とを有する。インタフェース部108は、ユーザによるデータの入力の操作を受け付け、ユーザに対して情報を出力する。
【0047】
また、管理装置100は、構成要素として、スピン情報格納部110と、スピン情報受信部120と、更新情報生成部130と、更新情報圧縮部140と、更新情報送信部150と、スピン情報更新部160と、スピン配列出力部170とを有する。
【0048】
なお、各構成要素は、例えば、制御部102の制御によって、プログラムを実行させることによって実現できる。より具体的には、各構成要素は、記憶部104に格納されたプログラムを、制御部102が実行することによって実現され得る。また、必要なプログラムを任意の不揮発性記録媒体に記録しておき、必要に応じてそのプログラムをインストールすることで、各構成要素を実現するようにしてもよい。また、各構成要素は、プログラムによるソフトウェアで実現することに限ることなく、ハードウェア、ファームウェア、及びソフトウェアのうちのいずれかの組み合わせ等により実現してもよい。また、各構成要素は、例えばFPGA(field-programmable gate array)又はマイコン(Micro Computer)等の、ユーザがプログラミング可能な集積回路を用いて実現してもよい。この場合、この集積回路を用いて、上記の各構成要素から構成されるプログラムを実現してもよい。
【0049】
スピン情報格納部110は、記憶部104によって実現され得る。スピン情報格納部110は、イジングモデルにおける全てのスピンのスピン情報(スピン状態σ)を格納する。なお、スピン情報格納部110は、各チップ200が扱うスピンごとに、別個に、スピン情報を格納し得る。ここで、各チップ200が扱うスピンのスピン情報は、そのチップ200が扱う各スピンのスピン状態σの値を示すビット配列で構成されてもよい。言い換えると、各チップ200が扱うスピンのスピン情報は、そのチップ200が扱う各スピンのスピン状態σの値を成分とするベクトル形式であってもよい。
図1~
図3の例のように、各チップ200-kが512個のスピンを扱う場合、チップ200-kに関するスピン情報は、512ビットのビット配列であってもよい。例えば、各スピンjのスピン状態σ
jが「-1」の値をとる場合、スピン情報におけるスピンjに関するビットが「0」の値をとってもよい。一方、各スピンjのスピン状態σ
jが「+1」の値をとる場合、スピン情報におけるスピンjに関するビットが「1」の値をとってもよい。
【0050】
そして、
図1~
図3の例のように、チップ200の数が4個(C=4)である場合、スピン情報格納部110は、各チップ200に対応するスピン情報として、4つのビット配列を格納する。また、アニーリングステップtにおいて、スピン情報格納部110は、前回のアニーリングステップt-1で後述するスピン情報受信部120によって受信されたスピン情報を格納している。各チップ200がスピン情報を生成する方法については後述する。
【0051】
スピン情報受信部120は、インタフェース部108によって実現され得る。スピン情報受信部120は、複数のチップ200それぞれからスピン情報を受信する。スピン情報受信部120は、あるアニーリングステップtにおいて、チップ200-k(チップ#k)から、スピン情報σ(t)
kを受信する。ここで、スピン情報σ(t)
kは、アニーリングステップtにおいてチップ200-kにおいて決定されたスピン状態σk,1~σk,Nを示す。したがって、スピン情報σ(t)
kを、スピン状態ベクトルσk(σベクトル)と表すことがある。スピン状態ベクトルσkの各成分は、チップ200-kが扱う各スピンのスピン状態σk,1~σk,Nを示す。スピン情報σ(t)
kは、上述したようなビット配列で表されてもよい。なお、受信されたスピン情報は、各チップ200で更新処理が行われることによって得られたものである。この、チップ200-kに関する更新処理後のスピン情報(スピン状態ベクトル)を、τkで示すことがある。これに対し、チップ200-kに関する更新処理前のスピン情報を、スピン情報(スピン状態ベクトル)σkと表すことがある。
【0052】
更新情報生成部130は、スピン情報受信部120によって受信されたスピン情報を用いて更新情報を生成する。具体的には、更新情報生成部130は、アニーリングステップtにおいてチップ200-kによって決定されたスピン情報を用いて、アニーリングステップtにおけるチップ200-kに関する更新情報を生成する。さらに具体的には、更新情報生成部130は、アニーリングステップtにおいて、スピン情報格納部110に格納された更新処理前のスピン情報(スピン状態ベクトル)σkと、受信された更新処理後のスピン情報(スピン状態ベクトル)τkとを比較する。つまり、更新情報生成部130は、アニーリングステップtにおいて、アニーリングステップt-1におけるチップ200-kに関するスピン情報σ(t-1)
kと、受信された更新処理後のチップ200-kに関するスピン情報σ(t)
kとを比較する。
【0053】
更新情報生成部130は、各スピンについて、更新処理前のスピン状態σと更新処理後のスピン状態τとが一致するか否かを判定してもよい。これにより、更新情報生成部130は、アニーリングステップtにおいてチップ200-kが扱う各スピンが反転したか否かを判定してもよい。そして、更新情報生成部130は、各スピンが更新されたか否かを示すビット配列である更新情報Δを生成(計算)する。ここで、更新情報Δの成分である更新データΔjが、更新情報Δにおいてスピンjが更新されたか否かを示すビットを示すとする。アニーリングステップtにおいて、更新データがΔj=1の場合、ステップtにおいてスピンjは反転している。一方、更新データがΔj=0の場合、ステップtにおいてスピンjは反転していない。なお、更新情報Δは、各スピンが反転されたか否かを示すので、反転ベクトルであるともいえる。
【0054】
なお、更新情報生成部130は、更新処理前のスピン情報(スピン状態ベクトル)σkのビット配列と更新処理後のスピン情報(スピン状態ベクトル)τkのビット配列とに対して排他的論理和(XOR)を計算することによって、更新情報を生成してもよい。具体的には、スピン情報のビット配列においてj番目のビットjをスピンjのスピン状態を示すとする。例えばスピン状態「-1」を「0」の値のビットで示し、スピン状態「+1」を「1」の値のビットで示すとする。この場合、更新情報生成部130は、更新処理前のスピン情報のビット配列のビットjと更新処理後のスピン情報のビット配列のビットjとが一致するときは、ビットjについて演算結果「0」(偽)を生成する。つまり、更新情報生成部130は、更新データΔjを、Δj=0とする。一方、更新情報生成部130は、更新処理前のスピン情報のビット配列のビットjと更新処理後のスピン情報のビット配列のビットjとが一致しないときは、ビットjについて演算結果「1」(真)を生成する。つまり、更新情報生成部130は、更新データΔjを、Δj=1とする。
【0055】
更新情報圧縮部140は、更新情報生成部130によって生成された更新情報に対して圧縮処理を行う。つまり、更新情報圧縮部140は、更新情報に関するデータを圧縮する。更新情報圧縮部140は、例えば、ゼロランレングス(Zero-Run-Length:ZRL)圧縮方式で、更新情報を圧縮してもよい。この場合、更新情報圧縮部140は、ゼロランレングスエンコーダ(Zero-Run-Length Encoder:ZRLE)であってもよい。これにより、更新情報において「0」の値のビットが多いほど、圧縮された状態における圧縮率が高くなる。なお、「圧縮率が高い」とは、圧縮前のデータサイズに対する圧縮後のデータサイズの割合が小さくなること、つまり良好に圧縮されることであることに、留意されたい。ここで、「0」の値のビットが多い更新情報は、「1」のビット(対応するスピンが反転されたことを示すビット)が少ないので、疎であると言える。したがって、更新情報が疎であるほど、「0」の値のビットが多いので、圧縮率が高くなり得る。
【0056】
ここで、アニーリングアルゴリズムでは、アニーリングステップの早い段階では反転(更新)されるスピンの数が多いのに対し、アニーリングステップが進むほど、反転(更新)されるスピンの数は減少する傾向がある。したがって、アニーリングステップが進むほど、更新情報のビット配列における「1」の値のビットの数が減少する。したがって、アニーリングステップが進むほど、更新情報における「0」の値のビットが多くなる(更新情報が疎となる)ので、更新情報の圧縮率は高くなり得る。
【0057】
ここで、ゼロランレングス圧縮方式では、所定のコードレングスでデータを圧縮する。コードレングスは、「0」の値のビットが連続する数を示すコードの長さである。コードレングスの長さは、圧縮方法によって異なり得る。例えば、圧縮対象のデータが「0000 0100 0000 0001」であり、4ビットのコードレングスでこのデータを圧縮するとする。この場合、連続する「0」の数は「5個」及び「9個」であるので、圧縮後のデータは、「0101 1001」で表される。そして、「0」のビットの数が多いほど、長いコードレングスでゼロランレングス圧縮を行った方が、圧縮率が高くなる。一方、「1」のビットの数が多い場合に長いコードレングスでゼロランレングス圧縮を行うと、圧縮前よりも圧縮後のデータ長が長くなり得る。したがって、「1」のビットの数が多い場合は、短いコードレングスでゼロランレングス圧縮を行った方が、圧縮率を高くすることができる。
【0058】
したがって、更新情報圧縮部140は、アニーリングステップが進むにつれて、圧縮方法を切り替えてもよい。つまり、更新情報圧縮部140は、更新情報における「1」のビットの数(又は「0」のビットの数)に応じて、コードレングスの長さを切り替えてもよい。すなわち、更新情報圧縮部140は、更新情報におけるスピンが更新されたことを示すビット(「1」の値のビット)の数に応じて圧縮率が高い圧縮方法で圧縮処理を行ってもよい。
【0059】
具体的には、アニーリングステップの早い段階では、更新情報における「1」の値のビットの数が多い。つまり、更新情報は密である。このような場合、更新情報圧縮部140は、短いコードレングスで更新情報を圧縮する。一方、アニーリングステップが進んだ段階では、更新情報における「0」の値のビットの数が多い。つまり、更新情報は疎である。このような場合、更新情報圧縮部140は、長いコードレングスで更新情報を圧縮する。このように、更新情報における「1」の値のビットの数に応じて圧縮方法(コードレングスの長さ)を切り替えることにより、圧縮効率を高めることができる。なお、更新情報圧縮部140は、圧縮後の更新情報に、圧縮方法を示すデータをヘッダとして付加してもよい。
【0060】
図6は、実施の形態1にかかる更新情報圧縮部140で圧縮方法を切り替えることによる効果を説明するための図である。
図6は、4ビットのコードレングス又は8ビットのコードレングスで圧縮処理を行う場合について例示している。
図6に示すグラフにおいて、縦軸は更新情報Δにおける「1」のビットの割合を示す。また、横軸は、圧縮後の更新情報Δのデータサイズを示す。なお、圧縮前の更新情報Δのデータサイズは、512ビットとする。また、32ビットを1ワード(word)とする。したがって、512ビットは、512/32=16ワードである。また、
図6のグラフにおいて、実線は、4ビットのコードレングスでゼロランレングス圧縮を行った場合について示している。また、破線は、8ビットのコードレングスでゼロランレングス圧縮を行った場合について示している。また、一点鎖線は、圧縮しない場合について示している。
【0061】
「1」のビットの割合が0.25よりも大きい場合、4ビットのコードレングス又は8ビットのコードレングスでゼロランレングス圧縮を行うと、圧縮後のデータサイズが512ビット(16ワード)よりも大きくなってしまう。したがって、この場合は、更新情報Δを圧縮しないことが好ましい。つまり、更新情報圧縮部140は、更新情報Δにおける「1」のビットの割合が0.25よりも大きい場合、更新情報Δを圧縮しないようにしてもよい。
【0062】
また、「1」のビットの割合が0.05以上0.25以下の場合、4ビットのコードレングスでゼロランレングス圧縮を行うと、圧縮しない場合及び8ビットのコードレングスでゼロランレングス圧縮を行う場合よりも、圧縮後のデータサイズが小さくなる。したがって、この場合は、更新情報Δに対して4ビットのコードレングスでゼロランレングス圧縮を行うことが好ましい。つまり、更新情報圧縮部140は、更新情報Δにおける「1」のビットの割合が0.05以上0.25以下の場合、更新情報Δに対して4ビットのコードレングスでゼロランレングス圧縮を行うようにしてもよい。
【0063】
また、「1」のビットの割合が0.05よりも小さい場合、8ビットのコードレングスでゼロランレングス圧縮を行うと、圧縮しない場合及び4ビットのコードレングスでゼロランレングス圧縮を行う場合よりも、圧縮後のデータサイズが小さくなる。したがって、この場合は、更新情報Δに対して8ビットのコードレングスでゼロランレングス圧縮を行うことが好ましい。つまり、更新情報圧縮部140は、更新情報Δにおける「1」のビットの割合が0.05未満の場合、更新情報Δに対して8ビットのコードレングスでゼロランレングス圧縮を行うようにしてもよい。
【0064】
図5の説明に戻る。更新情報送信部150は、インタフェース部108によって実現され得る。更新情報送信部150は、圧縮された更新情報を、当該更新情報に対応するスピン情報に関するチップ200以外のチップ200に送信する。つまり、更新情報送信部150は、圧縮された更新情報を、当該更新情報に対応するスピン情報を送信したチップ200以外のチップ200に送信する。さらに言い換えると、更新情報送信部150は、圧縮された更新情報を、当該更新情報に関するスピンを扱うチップ200以外のチップ200に送信する。例えば、チップ200-kによって送信されたスピン情報(スピン状態ベクトル)σ
kを用いて更新情報Δが生成された場合、更新情報送信部150は、圧縮された更新情報を、チップ200-k以外のチップ200に送信する。
【0065】
上述したように、更新情報のデータを圧縮することで、更新情報をチップ200に送信する際の通信時間を削減することができる。特に、アニーリングステップが進むにつれて、更新情報における「0」の値のビットの割合が高くなる。したがって、アニーリングステップが進むにつれて、更新情報の圧縮効率が高くなるので、通信時間をさらに削減することができる。したがって、実施の形態1にかかるアニーリング処理システム1は、通信リソースを節約することができる。したがって、実施の形態1にかかるアニーリング処理システム1は、多数のスピンで構成される任意の形状のイジングモデルを用いて効率的にアニーリング処理を行うことが可能となる。
【0066】
ここで、上述した特許文献1の技術では、スピン情報そのものがチップ間で送受信される。しかしながら、スピン情報においてスピン状態「-1」(又は「+1」)を「0」の値のビットで表す場合、スピン情報において「0」の値のビット値の割合は、アニーリングステップが進んでも減少するわけではない。そして、スピン情報における「0」の値のビットは、アニーリングステップが進んだからと言って連続して出現するようになるわけではない。したがって、スピン情報を圧縮しても、効率よく圧縮できるとは限らない。したがって、スピン情報を圧縮してチップ間で送受信しても、通信リソースの節約に寄与する可能性は極めて低い。
【0067】
スピン情報更新部160は、スピン情報格納部110に格納されているスピン情報を更新する。具体的には、スピン情報更新部160は、チップ200-kについて、前回のアニーリングステップt-1で格納されたスピン情報(スピン状態ベクトル)σkを、今回のアニーリングステップtで受信されたスピン情報(スピン状態ベクトル)τkで上書きする。これにより、スピン情報格納部110に格納されているスピン情報が、最新のものに更新される。上述したように、この、スピン情報格納部110に格納されているスピン情報は、更新情報生成部130によって更新情報が生成する際に使用される。
【0068】
スピン配列出力部170は、制御部102及びインタフェース部108によって実現され得る。スピン配列出力部170は、アニーリングステップt=tmaxにおけるスピン配列を出力するように構成されている。なお、tmaxは、アニーリングステップtの最大値である。このとき、スピン配列出力部170は、全てのチップ200に関するスピン配列を出力する。これにより、イジングモデル全体に対応するスピン配列が出力される。Mをイジングモデル全体のスピンの数とすると、アニーリングステップt=tmaxにおけるスピン配列σ_1^(tmax),・・・,σ_M^(tmax)は、アニーリングアルゴリズムによって最適化されたものであることが期待される。
【0069】
<チップ(アニーリング処理装置)>
図7~
図8は、実施の形態1にかかるチップ200の構成を示す図である。
図7は、実施の形態1にかかるチップ200の主要な構成を示す機能ブロック図である。
図8は、実施の形態1にかかるチップ200のハードウェア構成を示す図である。上述したように、チップ200は、アニーリング処理装置としての機能を有する。
図7~
図8は、複数のチップ200のうちの任意のチップ200-kの構成を示す。
【0070】
図7に示すように、チップ200は、主要な構成要素として、制御回路210と、アニーリング実行部230とを有する。制御回路210は、CPU等の処理回路(コンピュータ)としての機能を有し得る。制御回路210は、構成要素として、アニーリング制御部212を有する。アニーリング制御部212は、初期化フェーズ処理部214と、アニーリングフェーズ処理部216と、同期フェーズ処理部218とを有する。アニーリング制御部212は、後述するデータメモリ202に格納されたデータ及び命令メモリ204に格納された命令によって実現され得る。アニーリング制御部212は、後述するように、アニーリングアルゴリズムが実行されるように、制御を行う。アニーリング制御部212、初期化フェーズ処理部214、アニーリングフェーズ処理部216、及び同期フェーズ処理部218の機能の詳細については後述する。
【0071】
アニーリング実行部230は、主要な構成要素として、瞬間磁場計算回路240と、反転ベクトル計算回路250と、反転スピン選択回路260と、スピン情報バッファ262とを有する。スピン情報バッファ262は、後述するように、イジングモデルにおける全てのスピンに関するスピン情報を格納する。なお、瞬間磁場計算回路240、反転ベクトル計算回路250、及び反転スピン選択回路260は、それぞれ、アニーリングアルゴリズムが実行されるように演算を行う演算器(演算回路)としての機能を有する。
【0072】
瞬間磁場計算回路240は、チップ200-kが扱う複数のスピンの瞬間磁場を計算する。瞬間磁場計算回路240は、複数のスピンの瞬間磁場を並列に別個に計算するような、複数の演算回路で構成されてもよい。この場合、瞬間磁場計算回路240は、チップ200-kが扱うスピンの数(N個)に対応する数の演算回路で構成され得る。
【0073】
反転ベクトル計算回路250は、瞬間磁場に基づいて、チップ200-kが扱う複数のスピンの反転確率を計算して、複数のスピンそれぞれの反転の可否を示すビットを成分とする反転ベクトルΔを生成する。そして、反転ベクトル計算回路250は、反転ベクトルΔに応じて、暫定的に更新されたスピン状態τを生成する。反転ベクトルΔについては後述する。また、反転ベクトル計算回路250は、管理装置100から受信された更新情報Δを用いて、更新情報Δに関する他のチップ200が扱うスピンの更新されたスピン状態τを生成する。反転ベクトル計算回路250は、複数のスピンそれぞれについて並列に処理を行うような、複数の演算回路で構成されてもよい。この場合、反転ベクトル計算回路250は、チップ200-kが扱うスピンの数(N個)に対応する数の演算回路で構成され得る。
【0074】
反転スピン選択回路260は、反転されたスピンを選択する。また、反転スピン選択回路260は、スピン状態τに応じて、スピン情報バッファ262に格納されたスピン情報を更新する。したがって、反転スピン選択回路260は、スピン情報更新回路としての機能を有する。瞬間磁場計算回路240、反転ベクトル計算回路250、及び反転スピン選択回路260の機能の詳細については後述する。
【0075】
チップ200-kは、これらの構成要素により、圧縮された更新情報を展開して得られた更新情報を用いて、チップ200-kが扱うスピンについて瞬間磁場を計算することによって、当該スピンに関するスピン情報を決定する。言い換えると、チップ200-kは、圧縮された更新情報を展開して得られた更新情報を用いて、他のチップ200によってスピン情報を決定すべきスピンのスピン状態を得る。また、チップ200-kは、当該チップ200-kによってスピン情報を決定すべきスピンの反転確率に基づいて、当該チップによってスピン情報を決定すべきスピンの更新されたスピン状態を得る。そして、チップ200-kは、これらのスピン状態に基づいて、当該チップ200-kによってスピン情報を決定すべきスピンについて瞬間磁場を計算することによって、当該スピンに関するスピン情報を決定する。ここで、瞬間磁場の計算は、瞬間磁場計算回路240によって実行され得る。また、スピン情報(スピン状態)の決定は、反転ベクトル計算回路250と反転スピン選択回路260とによって実行され得る。詳しくは後述する。
【0076】
また、
図8に示すように、チップ200は、データメモリ202(Data Memory:DMEM)と、命令メモリ204(Instruction Memory:IMEM)と、制御回路210(Controller:CTR)とを有する。また、チップ200は、外部インタフェース220(External Interface:Ext I/F)と、ゼロランレングスデコーダ224(Zero-Run-Length Decoder:ZRLD)と、アニーリング実行部230とを有する。制御回路210は、プロセッサ210a(Processor)を有する。プロセッサ210aは、レジスタ210b(Reg)を有する。外部インタフェース220は、DMA222(Direct Memory Access)を有する。
【0077】
アニーリング実行部230は、重みメモリ232(Weight Memory:WMEM)と、重みデコーダ234(Decoder)と、瞬間磁場計算回路240(Local Field Unit:LFU)と、瞬間磁場バッファ242(Local Field (~h) Buffer)とを有する。また、アニーリング実行部230は、反転ベクトル計算回路250(Delta (Δ) Calc. Unit:DCU)と、反転ベクトルバッファ252(Delta (Δ) Buffer)と、暫定更新スピンバッファ254(Tau (τ) Buffer)とを有する。また、アニーリング実行部230は、反転スピン選択回路260(Delta (Δ) Selector)と、スピン情報バッファ262(Sigma (σ) Buffer)と、スピン情報デコーダ264(Decoder)とを有する。反転ベクトルバッファ252は、バッファA252a(第1のバッファ)とバッファB252b(第2のバッファ)とを有する。つまり、反転ベクトルバッファ252は、ダブルバッファで構成されている。詳しくは後述する。
【0078】
データメモリ202は、アニーリング処理(アニーリングアルゴリズム)に用いる各種パラメータを格納する。具体的には、データメモリ202は、各パラメータの初期値を格納する。なお、各パラメータは、アニーリングのステップが進むにつれて変化し得る。つまり、各パラメータは、アニーリングのステップの関数であり得る。この場合、データメモリ202は、各パラメータに対応する関数を格納してもよい。あるいは、データメモリ202は、各パラメータについて、ステップごとの値の推移を示すデータ(ルックアップテーブル等)を格納してもよい。例えば、データメモリ202は、疑似温度のステップに対応するアニーリングステップtに関するパラメータを格納してもよい。データメモリ202は、アニーリングステップtの最大値tmaxを格納してもよい。
【0079】
また、データメモリ202は、各スピンの初期状態のパラメータを格納してもよい。また、データメモリ202は、自己作用qのパラメータとして、自己作用qの初期値q1及び自己作用qの変化(q(t))を示すデータを格納してもよい。また、データメモリ202は、疑似温度に関するパラメータを格納してもよい。データメモリ202は、疑似温度に関するパラメータとして、温度Tの初期値T1及び温度Tの変化(T(t))を示すデータを格納してもよい。あるいは、データメモリ202は、疑似温度に関するパラメータとして、逆温度β(=1/T)の初期値β1及び逆温度βの変化(β(t))を示すデータを格納してもよい。T(t)、β(t)、及びq(t)は、ユーザによって予め定められた関数であり得る。なお、上述したパラメータに関する関数のデータは、あるアニーリングステップtとそのときのパラメータの値との対応を示すルックアップテーブルに対応してもよい。
【0080】
命令メモリ204は、制御回路210(プロセッサ210a)によって実行される命令を格納する。命令メモリ204に格納された命令に従って、後述するアニーリング制御部212(初期化フェーズ処理部214、アニーリングフェーズ処理部216、同期フェーズ処理部218)の処理が実行される。
【0081】
外部インタフェース220は、アニーリング処理の開始前に、各種メモリ及び各種バッファに必要なデータを書き込む。また、外部インタフェース220は、アニーリング処理が終了したときに(又はアニーリング処理の途中で)、スピン情報バッファ262から、アニーリング結果(スピン情報)を読み出す。なお、スピン情報バッファ262は、更新処理後の各スピンi(i=1,2,・・・,M)のスピン状態σiを格納する。ここで、スピン情報バッファ262は、チップ200-kが扱うスピンのスピン情報だけでなく、他のチップ200が扱うスピンのスピン情報も格納する。そして、スピン情報バッファ262は、各チップ200が扱うスピンごとに、別個に、スピン情報を格納する。詳しくは後述する。
【0082】
また、外部インタフェース220は、スピン情報バッファ262に格納された、チップ200-kが扱うスピンσk,1~σk,512のスピン情報(スピン状態ベクトル)σkを、管理装置100に送信する。また、外部インタフェース220は、チップ200-k以外のチップ200に関する圧縮された更新情報Δを、管理装置100から受信する。外部インタフェース220は、アニーリング制御部212の制御により、受信された更新情報Δを反転ベクトルバッファ252に格納する。
【0083】
DMA222は、チップ200の外部のメモリからチップ200の内部の各種メモリにデータ(「Data」)を出力する(書き込む)。また、DMA222は、チップ200の内部の各種メモリからデータを読み出して、チップ200の外部のメモリにそのデータ(「Data」)を出力する。
図8の例では、外部のメモリと内部のメモリとの通信は、Data信号により、32ビット(1ワード)単位で実行される。また、DMA222は、Ctr信号により、データが通信される方向、書き込み先及び読み出し元の内部のメモリの種類、通信されるデータのサイズを指定される。また、DMA222は、データを転送中に「DMA busy」信号を出力する。
【0084】
ゼロランレングスデコーダ224は、外部インタフェース220によって受信された圧縮された更新情報を展開する。したがって、ゼロランレングスデコーダ224は、更新情報展開部としての機能を有する。ゼロランレングスデコーダ224は、圧縮された更新情報のヘッダに示される圧縮方法(コードレングスの長さ)に応じて、更新情報のデータを展開する。また、ゼロランレングスデコーダ224は、展開された更新情報Δを、反転ベクトルバッファ252に出力する。詳しくは後述する。
【0085】
制御回路210は、アニーリング実行部230の動作を制御する。アニーリング実行部230は、制御回路210の制御によって、アニーリング処理を実行する。プロセッサ210aは、例えば、RISC(Reduced Instruction Set Computer)によって実現されてもよい。制御回路210は、アニーリング処理を実行することを指示する信号であるRun信号を、外部から受信する。また、制御回路210は、処理の実行中にBusy信号を外部に出力する。
【0086】
アニーリング制御部212は、アニーリング処理が実行されるように、アニーリング実行部230の各構成要素に対して制御を行う。アニーリング制御部212は、命令メモリ204に格納された命令に従って処理を行う。具体的には、アニーリング制御部212は、命令メモリ204に格納された命令に従ってデータメモリ202から必要なデータを取得して(読み出して)、レジスタ210bに格納する(書き込む)。レジスタ210bには、例えば、温度T(又は逆温度β)、及び自己作用係数qが格納され得る。そして、アニーリング制御部212は、命令メモリ204に格納された命令に従って、アニーリング実行部230の動作を制御する。アニーリング制御部212は、命令メモリ204に格納された命令に従って、後述する
図10、
図11、
図12及び
図14に示された処理(S10,S20,S40)が実行されるように、制御を行う。
【0087】
また、アニーリング制御部212は、データの初期化を行う。なお、データの初期化は、後述する初期化フェーズ処理部214によって行われてもよい。具体的には、アニーリング制御部212は、アニーリングステップtを初期値「1」に設定する。また、アニーリング制御部212は、アニーリングステップtの最大ステップである最大アニーリングステップtmaxを設定する。また、アニーリング制御部212は、温度Tを初期温度T1に設定する。あるいは、アニーリング制御部212は、逆温度β(=1/T)を、初期逆温度β1(=1/T1)に設定する。また、アニーリング制御部212は、自己作用係数qを初期値q1に設定する。
【0088】
また、アニーリング制御部212は、以下の式6のように、チップ200-kが扱うN個のスピンの初期状態σ_1^(0),・・・,σ_N^(0)を、ランダムに設定する。スピンの値は2値であればよいが、ここでは「+1」又は「-1」とする。
【数6】
・・・(6)
【0089】
設定されたスピンの初期状態を示すスピン情報は、スピン情報バッファ262に格納され得る。ここで、スピン情報バッファ262は、チップ200-kが扱うスピンの初期状態を示すスピン情報だけでなく、他のチップ200が扱うスピンの初期状態を示すスピン情報も格納する。なお、イジングモデルにおける全てのスピンの初期状態は、チップ200とは別個の装置(管理装置100等)によって設定されてもよい。そして、外部インタフェース220によって、イジングモデルにおける全てのスピンの初期状態を示すスピン情報が受信されてもよい。
【0090】
また、アニーリング制御部212は、チップ200-kが扱う全てのj(j=1,・・・,N)に対して、各スピン(ノード)jの外部磁場係数hjを定める。設定された外部磁場係数hjは、瞬間磁場バッファ242に格納され得る。また、アニーリング制御部212は、全てのチップ200が扱う全てのスピンi(i=1,・・・,N)及びj(j=1,・・・,N)に対して、各スピン(ノード)間(σi-σj間)の相互作用係数Jijを設定する。設定された相互作用係数Jijは、重みメモリ232に格納され得る。なお、イジングモデルにおける全てのスピン間の相互作用係数は、チップ200とは別個の装置(管理装置100等)によって設定されてもよい。そして、外部インタフェース220によって、チップ200-kが扱う全てのスピンと結合するスピン間の相互作用係数を示す情報が受信されてもよい。
【0091】
また、アニーリング制御部212は、アニーリングステップを制御する。アニーリング制御部212は、制御回路210に内蔵されたカウンタを用いて、アニーリングステップを制御する。つまり、アニーリング制御部212は、あるアニーリングステップtにおけるアニーリング処理が終了すると、アニーリングステップtを1つインクリメントしてもよい。このとき、アニーリング制御部212は、疑似温度の変化に対応するアニーリングステップtごとに温度パラメータT(t)を更新する。アニーリング制御部212は、更新される温度パラメータごとに、チップ200-kが扱う複数のスピンの状態が並列に決定されるように制御を行う。
【0092】
アニーリング制御部212は、アニーリングステップtが進むごとに、パラメータを更新する。具体的には、アニーリング制御部212は、アニーリングステップtを1つ進める(t←t+1)。また、アニーリング制御部212は、温度Tを更新する(T←T(t))。あるいは、アニーリング制御部212は、逆温度βを更新する(β←β(t))。また、アニーリング制御部212は、自己作用係数qを更新する(q←q(t))。ここで、T(t)、β(t)、q(t)は、ユーザによって予め定義された関数とする。そして、後述するアニーリングフェーズの処理(S20)及び同期フェーズの処理(S40)が繰り返される。これにより、アニーリングアルゴリズムの実行が継続し、アニーリングステップが進行する。
【0093】
初期化フェーズ処理部214は、初期化フェーズ(後述するS10)が実行されるように制御を行う。初期化フェーズの詳細については、
図11を用いて後述する。また、初期化フェーズ処理部214は、イジングモデルにおける全てのスピンiの初期状態σ
iがスピン情報バッファ262に書き込まれるように、制御を行う。また、初期化フェーズ処理部214は、外部磁場係数が瞬間磁場バッファ242に書き込まれるように、制御を行う。また、初期化フェーズ処理部214は、解くべき最適化問題に対応するイジングモデルにおける相互作用係数J
ijが重みメモリ232に書き込まれるように、制御を行う。また、初期化フェーズ処理部214は、チップ200-kで扱うスピンjの初期状態における瞬間磁場
~h
jが計算されるように、制御を行う。初期化フェーズ処理部214は、後述する式7で示すようにして、瞬間磁場
~h
jが各スピンj(j=1,2,・・・,N)について並列に実行されるように、制御を行う。
【0094】
なお、複数のチップ200それぞれで扱うスピン間の相互作用を考慮すると、チップ200-kで扱うスピンjの瞬間磁場
~h
jは、以下に示すような、式4を変形した式7によって計算される。
【数7】
・・・(7)
【0095】
ここで、式7において、インデックスjは、自身のチップ200-k(チップ#k)におけるスピンのインデックスである。また、インデックスiは、チップ200-l(チップ#l)におけるスピンのインデックスである。なお、lは、チップ200-kを含む任意のチップ200のインデックスである。
【0096】
アニーリングフェーズ処理部216は、アニーリングフェーズ(後述するS20)が実行されるように、制御を行う。アニーリングフェーズは、自身のチップ200-kが扱うスピンのスピン状態σを決定する処理(更新処理)を行うフェーズである。アニーリングフェーズでは、自身のチップ200-kで扱うスピンの反転確率を計算して、反転確率に基づいて、スピン状態σを決定(更新)する。そして、アニーリングフェーズでは、自身のチップ200-kが扱うスピンのスピン状態σに基づいて、自身のチップ200-kが扱うスピンの瞬間磁場を計算する。アニーリングフェーズの詳細については、
図12を用いて後述する。
【0097】
同期フェーズ処理部218は、同期フェーズ(後述するS40)が実行されるように、制御を行う。同期フェーズは、自身のチップ200-kにおいて、他のチップ200が扱うスピンについて更新情報Δを用いてスピン状態σを設定する処理を行うフェーズである。つまり、同期フェーズは、自身のチップ200-kに、他のチップ200に関するスピン状態σが格納されるように処理を行うフェーズである。言い換えると、同期フェーズでは、他のチップ200に関するスピン状態σが自身のチップ200-kで同期される。そして、同期フェーズでは、更新情報Δを用いて設定された、他のチップ200が扱うスピンのスピン状態σに基づいて、自身のチップ200-kが扱うスピンの瞬間磁場を計算する。同期フェーズの詳細については、
図14を用いて後述する。
【0098】
上述したように、アニーリングフェーズでは、自身のチップ200-kが扱うスピンのスピン状態σを用いて、自身のチップ200-kが扱うスピンの瞬間磁場を計算するための処理が行われる。また、同期フェーズでは、他のチップ200が扱うスピンのスピン状態σを用いて、自身のチップ200-kが扱うスピンの瞬間磁場を計算するための処理が行われる。つまり、アニーリング処理が実行される段階では、アニーリングフェーズと同期フェーズとが実行されることによって、式7の計算が、各スピンjについて並列に実行される。言い換えると、アニーリングフェーズ及び同期フェーズのそれぞれで、式7の総和計算の一部が実行される。
【0099】
重みメモリ232は、相互作用係数J
ijを格納する。チップ200-kの重みメモリ232に格納される、自身のチップ200-kが扱うスピンとチップ200-lが扱うスピンとの間の相互作用係数は、以下の式8で表される。
【数8】
・・・(8)
【0100】
なお、1つの相互作用係数J(k,l)ijは、N行N列のマトリクス形式で表される。したがって、重みメモリ232は、式8で示される相互作用係数を(C×N)行N列のマトリクス形式で格納する。したがって、重みメモリ232は、自身のチップ200-kが扱うスピンと各チップ200-l(l=1,・・・,C)が扱うスピンとの間の相互作用係数を、各チップ200-lごとに分けて格納する。つまり、重みメモリ232は、各チップ200-lごとに分けられたブロック形式で、N行N列のマトリクス形式で表される相互作用係数J(k,l)ijを格納する。言い換えると、重みメモリ232は、C個のブロック#l(l=1,・・・,C)それぞれに、N行N列のマトリクス形式で表される相互作用係数J(k,l)ijを格納する。なお、l=kである場合、J(k,l)ijは、自身のチップ200-kが扱うスピン間の相互作用係数を表す。
【0101】
重みデコーダ234は、指定された相互作用係数Jijを重みメモリ232から読み出すように制御を行う。具体的には、重みデコーダ234は、指定されたチップ200-lのスピンiに関する相互作用係数Jijを重みメモリ232から読み出すように制御を行う。詳しくは後述する。
【0102】
瞬間磁場計算回路240は、重みメモリ232から読み出された相互作用係数Jijを用いて瞬間磁場~hjを計算して、計算結果を瞬間磁場バッファ242に格納する。具体的には、瞬間磁場計算回路240は、アニーリングステップごとに、自身のチップ200-kが扱う複数のスピンj(j=1,2,・・・,N)の瞬間磁場~h1,~h2,・・・,~hNを、並列に計算する。瞬間磁場計算回路240は、上記の式7の計算が行われるように動作する。詳しくは後述する。瞬間磁場バッファ242は、自身のチップ200-kが扱うスピンj(j=1,2,・・・,N)の瞬間磁場~h1,~h2,・・・,~hNを格納する。
【0103】
なお、チップ200-kが扱うスピンjの瞬間磁場の初期値は、以下の式9で表される。アニーリング処理の初期段階で、式9で示される初期値が、瞬間磁場バッファ242に格納される。なお、式9の右辺のh(k)
jは、チップ200-kが扱うスピンjの外部磁場係数に対応する。
【数9】
・・・(9)
【0104】
反転ベクトル計算回路250は、自身のチップ200-kが扱うスピンj(j=1,・・・,N)について、瞬間磁場バッファ242に格納された瞬間磁場~hjと、スピン情報バッファ262に格納されたスピン状態σjとを用いて、反転可否ベクトルΔを計算する。具体的には、反転ベクトル計算回路250は、瞬間磁場バッファ242に格納された瞬間磁場~hjと、スピン情報バッファ262に格納されたスピン状態σjとを用いて、チップ200-kが扱う複数のスピンjの反転確率Pjを計算する。反転確率Pjは、上述した式5によって計算される。
【0105】
また、反転ベクトル計算回路250は、反転確率Pjに基づいて、チップ200-kが扱う複数のスピンjそれぞれについて反転の可否を判定する。反転ベクトル計算回路250は、各スピンjについて、反転確率Pjが乱数randよりも大きい場合に、反転可能であると判定する。ここで、0<rand<1である。乱数randは、各アニーリングステップにおいて、複数のスピンそれぞれについて生成され得る。したがって、乱数randは、スピンごとに異なり得る。なお、乱数randは、アニーリング制御部212によって生成されてもよい。また、乱数randは、乱数生成器によって生成されてもよい。
【0106】
反転ベクトル計算回路250は、チップ200-kが扱う複数のスピンそれぞれの反転の可否を示すビットを成分とする反転可否ベクトルΔを生成する。反転可否ベクトルΔは、チップ200-kが扱うスピンjの数Nに対応する数の成分で構成される。反転可否ベクトルΔの各成分Δjは、各スピンj(j=1,2,・・・,N)が反転可能である場合に「1」を示し、反転不可である場合に「0」を示す。反転ベクトル計算回路250は、計算結果である反転可否ベクトルΔを反転ベクトルバッファ252に格納する。ここで、反転可否ベクトルΔは、各スピンが反転され得るか否かを示すので、反転ベクトルであるともいえる。
【0107】
反転可否ベクトルΔのスピンjに対応する成分をΔ
jとすると、反転ベクトル計算回路250は、以下の式10に従って、スピンjの反転可否Δ
jを決定する。
【数10】
・・・(10)
【0108】
また、反転ベクトル計算回路250は、反転可能と判定されたスピンを暫定的に反転させ、暫定的に反転されたスピン状態τを生成する。そして、反転ベクトル計算回路250は、暫定的に反転されたスピン状態τ(τ1,τ2,・・・,τN)を暫定更新スピンバッファ254に格納する。なお、自身のチップ200-kが扱うスピンjについて、τjは、スピンjについて暫定的に更新されたスピン状態を示す。
【0109】
また、反転ベクトル計算回路250は、他のチップ200が扱うスピンiについて、管理装置100から受信された更新情報Δを用いて、更新されたスピン状態τを生成する。具体的には、反転ベクトル計算回路250は、更新情報Δと、更新情報Δに対応する他のチップ200に関するスピン状態σを示すスピン情報とを用いて、更新情報Δに関する他のチップ200が扱うスピンの更新されたスピン状態τを生成する。なお、更新情報Δは、反転ベクトルバッファ252に格納されている。また、更新情報Δに対応する他のチップ200に関するスピン状態σを示すスピン情報は、スピン情報バッファ262に格納されている。そして、反転ベクトル計算回路250は、更新されたスピン状態τ(τ1,τ2,・・・,τN)を暫定更新スピンバッファ254に格納する。なお、他のチップ200が扱うスピンiについて、τiは、スピンiについて更新されたスピン状態を示す。
【0110】
反転ベクトルバッファ252は、反転ベクトルΔを格納する。具体的には、反転ベクトルバッファ252は、自身のチップ200-kに関する反転可否ベクトルΔを格納する。また、反転ベクトルバッファ252は、他のチップ200に関する更新情報Δを格納する。
【0111】
ここで、反転可否ベクトルΔ及び更新情報Δは、バッファA252a(第1のバッファ)又はバッファB252b(第2のバッファ)のどちらかに格納される。そして、バッファA252a及びバッファB252bのうち、一方が計算に使用され、他方が外部通信に使用される。バッファA252a及びバッファB252bの一方が計算に使用されている場合、他方に、受信された更新情報Δが格納される。つまり、バッファB252b(第2のバッファ)がアニーリング処理(更新処理又は同期処理)に関する計算を行うために使用されている場合に、バッファA252a(第1のバッファ)は、更新情報の受信のために使用可能である。一方、バッファA252a(第1のバッファ)がアニーリング処理(更新処理又は同期処理)に関する計算を行うために使用されている場合に、バッファB252b(第2のバッファ)は、更新情報の受信のために使用可能である。
【0112】
例えば、バッファA252aがアニーリング処理に関する計算に使用されている場合、バッファB252bに、受信された更新情報Δが格納される。なお、バッファA252a及びバッファB252bのどちらがアニーリング処理に関する計算に使用され、どちらが外部通信に使用されるかは、制御回路210の制御によって、適宜、切り替わり得る。具体的には、バッファA252a及びバッファB252bの一方のバッファが計算のために使用されるときに、他方のバッファが、外部通信用(更新情報の受信用)のバッファに切り替わる。
【0113】
暫定更新スピンバッファ254は、アニーリングフェーズでは、自身のチップ200-kが扱うスピンに関する暫定的に更新されたスピン状態τを格納する。また、暫定更新スピンバッファ254は、同期フェーズでは、他のチップ200が扱うスピンに関する更新されたスピン状態τを格納する。
【0114】
反転スピン選択回路260は、自身のチップ200-kが扱うスピンについて、実際に反転させるスピンを選択する。具体的には、反転スピン選択回路260は、自身のチップ200-kが扱うスピンについて、反転可否ベクトルΔにおいてΔj=1であるスピンjのうち、実際に反転させるスピンを選択する。さらに具体的には、実行されるアニーリングアルゴリズムがSCAである場合、反転スピン選択回路260は、反転可否ベクトルΔにおいてΔj=1であるスピンjの全てを選択する。これにより、反転スピン選択回路260は、自身のチップ200-kが扱うN個のスピンの次の状態を決定する。
【0115】
また、反転スピン選択回路260は、他のチップ200が扱うスピンについて、反転されたスピンを選択する。具体的には、反転スピン選択回路260は、更新情報ΔにおいてΔj=1であるスピンjを選択する。これにより、反転スピン選択回路260は、他のチップ200が扱うN個のスピンの次の状態を決定する。
【0116】
また、反転スピン選択回路260は、スピン情報バッファ262に格納されたスピン情報を更新する。つまり、反転スピン選択回路260は、スピン情報バッファ262に格納されたスピン状態σjのうち実際に反転させるスピン状態を反転させる。つまり、反転スピン選択回路260は、スピン情報バッファ262に格納されたスピン状態σのうち実際に反転されるスピンのスピン状態σjを、暫定更新スピンバッファ254に格納されたスピン状態τjで上書きする。これにより、スピン情報バッファ262には、更新されたスピン状態σが格納される。また、このような処理が各チップ200で行われることにより、各アニーリングステップにおいて、各チップ200のスピン情報バッファ262には、全てのスピンについて同じスピン状態が格納されることとなる。
【0117】
スピン情報バッファ262は、複数のチップ200が扱うスピンのスピン状態σを示すスピン情報を格納する。スピン情報バッファ262は、各チップ200が扱うスピンj(j=1,・・・,N)のスピン状態σ
jを示すスピン状態配列(σ配列)を、チップ200ごとに分けて格納する。したがって、スピン情報バッファ262は、C個のスピン状態配列を格納する。スピン状態配列は、以下の式11で表される。
【数11】
・・・(11)
【0118】
スピン情報デコーダ264は、制御回路210(アニーリング制御部212)によって指定されたチップ200が扱うスピンに関するスピン状態配列をスピン情報バッファ262から読み出すように制御を行う。詳しくは後述する。
【0119】
なお、チップ200は、複数のレプリカ処理を行ってもよい。複数のレプリカ処理を行う場合、各パラメータの初期値及び使用される乱数が互いに異なり得るが、実行されるアニーリングアルゴリズム自体は同じである処理が、複数実行される。つまり、複数のチップ200それぞれは、当該チップ200がスピン状態を決定すべきスピンについてスピン状態を決定する処理を、互いに異なり得るパラメータを用いて、複数回行う。なお、1つのレプリカ処理は、複数のチップ200間で共通である。例えば、4個のレプリカ処理が行われる場合、4通りの結果(最適化問題の解、つまり最適化されたスピン配列)が得られる。
【0120】
また、複数のレプリカ処理は、互いに独立して実行され得る。また、各チップ200では、複数のレプリカ処理は連続的に実行され得る。したがって、あるレプリカ処理の実行が終了した後で、別のレプリカ処理が実行され得る。また、複数のレプリカ処理が行われる場合、瞬間磁場バッファ242、反転ベクトルバッファ252及びスピン情報バッファ262は、複数のレプリカ処理の個数Rに対応する数だけ、並列に複数個設けられていてもよい。つまり。複数のレプリカ処理が行われる場合、瞬間磁場バッファ242、反転ベクトルバッファ252及びスピン情報バッファ262は、レプリカ処理の個数Rに対応する数の独立した領域を有し得る。レプリカ処理の詳細については、実施の形態2の説明で述べる。なお、以後、実施の形態1では、R=1、つまりレプリカ処理が行われないとして説明を行う。
【0121】
図9は、実施の形態1にかかるチップ200における演算の流れを説明するための図である。まず、反転ベクトル計算回路250(DCU)は、反転ベクトルバッファ252に格納される反転ベクトルΔ、及び、暫定更新スピンバッファ254に格納されるスピン状態τを設定(計算)する。具体的には、反転ベクトル計算回路250は、スピン情報バッファ262から出力されたスピン状態配列(σ配列)を用いて、このスピン状態配列に対応する反転ベクトルΔ及びスピン状態τを設定する。なお、スピン情報デコーダ264は、チップ#l(l=1,・・・,C)に関するスピン状態配列を指定する配列指定信号(矢印A1で示す)を、制御回路210(CTR)から受信する。この信号は、チップ#lのインデックスlを示してもよい。スピン情報デコーダ264は、スピン情報バッファ262から、指定されたスピン状態配列σ
l,1,σ
l,2,・・・,σ
l,Nを読み出す。読み出されたスピン状態配列は、反転ベクトル計算回路250に入力される。
【0122】
なお、初期化フェーズでは、配列指定信号は、任意のチップ#lに関するスピン状態配列を示す。また、アニーリングフェーズでは、配列指定信号は、自身のチップ#kに関するスピン状態配列を示す。また、同期フェーズでは、配列指定信号は、他のチップ#l(l≠k)に関するスピン状態配列を示す。また、アニーリングフェーズでは、反転ベクトル計算回路250は、自身のチップ#kが扱うスピンjの反転確率Pjを計算する。これに対し、初期化フェーズ及び同期フェーズでは、反転ベクトル計算回路250は、反転確率の計算を行わない。
【0123】
次に、反転スピン選択回路260(ΔSelector)は、反転ベクトルバッファ252に格納された反転ベクトルΔにおいてΔi=1を満たすスピンiを選択する。なお、アニーリングフェーズでは、反転スピン選択回路260は、自身のチップ#kが扱うスピンのうち実際に反転させるスピンを選択する。そして、反転スピン選択回路260は、選択されたスピンiに対応する、暫定更新スピンバッファ254に格納されたスピン状態τiを、瞬間磁場計算回路240に出力する。また、反転スピン選択回路260は、選択されたスピンiのインデックスiを、重みデコーダ234に出力する。また、反転スピン選択回路260は、配列指定信号で指定されたスピン状態配列(σ配列)のインデックスiに対応する要素であるスピン状態σiを、暫定更新スピンバッファ254に格納されたスピン状態τiで上書きする。これにより、スピン情報バッファ262に格納されたスピンiのスピン状態σiが更新される。
【0124】
なお、反転スピン選択回路260は、Δi=1を満たすスピンiを、1個ずつ設定されたスピンごとに、1個ずつ選択してもよい。そして、反転スピン選択回路260は、スピンiが設定されるごとに、設定されたスピンiについて、更新後のスピン状態τiを抽出してもよい。そして、反転スピン選択回路260は、スピンiが設定されるごとに、設定されたスピンiのスピン状態τjを瞬間磁場計算回路240に出力してもよい。また、反転スピン選択回路260は、スピンiが設定されるごとに、設定されたスピンiのインデックスiを、重みデコーダ234に出力してもよい。
【0125】
次に、瞬間磁場計算回路240(LFU)は、反転スピン選択回路260から出力されたスピン状態と、重みメモリ232から出力された相互作用係数とを用いて、瞬間磁場バッファ242に格納された瞬間磁場~hjを、並列に更新する。つまり、瞬間磁場計算回路240は、自身のチップ#kが扱うスピンj(j=1,・・・,N)の瞬間磁場~hjを、並列に更新(計算)する。
【0126】
具体的には、重みデコーダ234は、チップ#l(l=1,・・・,C)に関する相互作用係数のブロックを指定するブロック指定信号(矢印A2で示す)を、制御回路210(CTR)から受信する。この信号は、チップ#lのインデックスlを示してもよい。そして、重みデコーダ234は、ブロック指定信号で指定されたブロック#lの、反転スピン選択回路260から出力されたインデックスiに対応する行の相互作用係数J
ijを、重みメモリ232から読み出すように、制御を行う。これにより、重みメモリ232から、ブロック#lのi番目の行の相互作用係数J
ij(J
i1,J
i2,・・・J
iN)が読み出される。
図9の例では、ブロック指定信号によりチップ#1に対応するブロック#1が指定されている。したがって、
図9の例では、重みメモリ232から、チップ#1に対応するブロック#1のi番目の行の相互作用係数J
ij(J
i1,J
i2,・・・J
iN)が読み出される。
【0127】
そして、瞬間磁場計算回路240は、反転スピン選択回路260から出力されたスピン状態τiと、重みメモリ232から出力された相互作用係数Jij(Ji1,Ji2,・・・JiN)とを用いて、自身のチップ#kが扱うスピンjの瞬間磁場~hjを、並列に更新する。具体的には、瞬間磁場計算回路240は、スピンjそれぞれについて、上述した式4及び式7におけるσi(σl,i)をτiとして、スピンi(例えばi=1)についての式4及び式7の総和計算の一部を行う。つまり、瞬間磁場計算回路240は、スピンjそれぞれについて、瞬間磁場バッファ242に格納された瞬間磁場~hjに、相互作用係数Jijとτiとの積を加算する。そして、反転スピン選択回路260から次のインデックスi(例えばi=2,3,・・・)及びτiが出力されるたびに、瞬間磁場計算回路240は、瞬間磁場バッファ242に格納された瞬間磁場~hjに、スピンiに関する相互作用係数Jijとτiとの積を加算していく。これにより、式4及び式7の総和計算が実行される。このようにして、自身のチップ#kが扱うスピンjの瞬間磁場~hjが計算されることとなる。
【0128】
<アニーリング処理方法>
図10~
図14は、実施の形態1にかかるアニーリング処理システム1で実行されるアニーリング処理方法を示すフローチャートである。
図10は、アニーリング処理方法の全体の処理フローを示す。
図11は、初期化フェーズに関する処理フローを示す。
図12は、アニーリングフェーズに関する処理フローを示す。
図13は、更新情報の生成処理に関する処理フローを示す。
図14は、同期フェーズに関する処理フローを示す。
【0129】
アニーリング処理システム1は、初期化フェーズの処理を実行する(処理S10)。具体的には、アニーリング処理システム1の各チップ200は、初期化フェーズ処理部214による制御によって、初期化フェーズの処理(初期化処理)を実行する。初期化フェーズにより、自身のチップ#kが扱うスピンjの瞬間磁場~hjの初期状態における値(初期値)が計算される。詳しくは後述する。
【0130】
次に、アニーリング処理システム1は、アニーリングフェーズの処理を実行する(処理S20)。具体的には、アニーリング処理システム1の各チップ200は、アニーリングフェーズ処理部216による制御によって、自身のチップ#kが扱うスピンについてアニーリングフェーズの処理(更新処理)を実行する。詳しくは後述する。
【0131】
次に、アニーリング処理システム1は、更新情報の生成処理を実行する(処理S30)。具体的には、アニーリング処理システム1の管理装置100は、各チップ200が扱うスピンに関する更新情報Δを生成する。詳しくは後述する。
【0132】
次に、アニーリング処理システム1は、同期フェーズの処理を実行する(処理S40)。具体的には、アニーリング処理システム1の各チップ200は、同期フェーズ処理部218による制御によって、他のチップ#l(l≠k)が扱うスピンについて同期フェーズの処理(同期処理)を実行する。詳しくは後述する。
【0133】
同期フェーズ(S40)が終了すると、処理フローはS20に戻り、再びアニーリングフェーズが実行される。そして、アニーリングステップが満了するまで、S20~S40の処理が繰り返される。
【0134】
図11は、実施の形態1にかかるチップ200それぞれで実行される初期化フェーズ(S10)を示すフローチャートである。なお、
図11に示す初期化フェーズの処理を実行する前の段階で、各チップ200のスピン情報バッファ262には、イジングモデルにおける全てのスピンの初期状態が格納されているとする。同様に、この段階で、各チップ200-kの重みメモリ232には、自身のチップ200-kが扱うスピンと任意のスピンとの間の相互作用係数J
ijが格納されているとする。また、各チップ200-kの瞬間磁場バッファ242には、自身のチップ200-kが扱うスピンに関する外部磁場係数が格納されているとする。
【0135】
初期化フェーズ処理部214は、初期化フェーズの処理対象のチップ#lのインデックスlを、l=1に設定する(処理S102)。これにより、チップ200は、チップ#1に関するパラメータを用いて自身のチップ#kが扱うスピンの瞬間磁場の初期状態における値を計算するための演算(総和計算における加算処理)を実行することとなる。このとき、スピン情報デコーダ264に入力される配列指定信号が、チップ#l(S102の処理ではl=1)に関するスピン状態配列を指定するように設定される。これにより、チップ200-lが扱うスピンに関するスピン状態配列σl,1,σl,2,・・・,σl,Nが読み出され、反転ベクトル計算回路250に入力される。また、重みデコーダ234に入力されるブロック指定信号が、チップ#l(S102の処理ではl=1)に関するブロック#lの相互作用係数を指定するように設定される。これにより、チップ#lに関するブロック#lの相互作用係数J(k,l)ijが出力される。
【0136】
反転ベクトル計算回路250は、チップ#lが扱うスピンi(1≦i≦N)に対して、τi=σl,i,Δi=1を設定する(処理S104)。すなわち、初期化フェーズでは、反転ベクトル計算回路250は、チップ#lが扱う全てのスピンiに対して、スピン状態τiを、スピン情報バッファ262から読み出されたスピン状態σl,iと同じ値に設定する。また、初期化フェーズでは、反転ベクトル計算回路250は、チップ#lが扱う全てのスピンiに対して、Δi=1と設定する。
【0137】
また、S104の処理で、反転ベクトル計算回路250は、チップ#lが扱う全てのスピンiについて、スピン状態τi(=σl,i)を、暫定更新スピンバッファ254に格納する。また、反転ベクトル計算回路250は、チップ#lが扱う全てのスピンiに対してΔi=1と設定された反転ベクトルΔを、反転ベクトルバッファ252に格納する。なお、1回目のループ処理ではl=1と設定されているので、暫定更新スピンバッファ254には、チップ#1が扱う全てのスピンiのスピン状態τi(=σ1,i)が格納される。同様に、1回目のループ処理では、反転ベクトルバッファ252には、チップ#1が扱う全てのスピンiに対してΔi=1と設定された反転ベクトルΔが格納される。
【0138】
反転スピン選択回路260は、Δi=1の全てのスピンiを選択する(処理S106)。具体的には、反転スピン選択回路260は、反転ベクトルバッファ252に格納された反転ベクトルΔにおいてΔi=1を満たす全てのスピンiを選択する。
【0139】
初期化フェーズ処理部214は、xの値をx=1と設定する(処理S110)。そして、初期化フェーズ処理部214は、後述するS114の処理で扱われるスピンiのインデックスiを、i=ixと設定する(処理S112)。ここで、xは、Δi=1となるスピンiのインデックスである。したがって、1≦x≦Nであり、xの値は、Δi=1であるスピンiの数だけ存在する。なお、初期化フェーズでは、xは、全てのiのインデックスである。つまり、ixは、1,2,・・・,Nの全ての値をとり得る。
【0140】
なお、上述したように、反転スピン選択回路260は、S112の処理で設定されたスピンiに対応するスピン状態τiを瞬間磁場計算回路240に出力する。また、上述したように、反転スピン選択回路260は、S112の処理で設定されたインデックスiを重みデコーダ234に出力する。また、上述したように、反転スピン選択回路260は、S112の処理で設定されたスピンiについて、スピン情報バッファ262に格納されたスピン情報σl,iを、スピン状態τiに更新する。
【0141】
瞬間磁場計算回路240は、自身のチップ#kが扱うスピンj(1≦j≦N)に対して、以下の式12により、瞬間磁場
~h
jを計算する(処理S114)。
【数12】
・・・(12)
【0142】
具体的には、瞬間磁場計算回路240は、反転スピン選択回路260から出力されたスピンiのスピン状態τiと、重みメモリ232から出力された相互作用係数J(k,l)ijとを用いて、自身のチップ#kが扱うスピンjの瞬間磁場~hjを更新する。なお、スピンiは、S112で設定されたインデックスiのスピンiに対応する。また、相互作用係数J(k,l)ijについて、lは処理対象のチップ#lのインデックス(1回目のループ処理ではl=1)であり、iはS112で設定されたインデックスiである。また、瞬間磁場計算回路240は、自身のチップ#kが扱う複数のスピンjの瞬間磁場~hjを、スピンjについて並列に更新する。
【0143】
初期化フェーズ処理部214は、xが最大値xmaxであるか否かを判定する(処理S116)。なお、初期化フェーズでは、xmax=Nである。xが最大値xmaxでない場合(S116のNO)、初期化フェーズ処理部214は、xを1つインクリメントする(処理S118)。そして処理フローはS112に戻り、次のΔi=1であるスピンiについて、S112~S118の処理が繰り返される。このようにxを更新していくことにより、式7のiについての総和計算が実行される。
【0144】
一方、xが最大値x
maxである場合(S116のYES)、初期化フェーズ処理部214は、l=Cであるか否かを判定する(処理S120)。l=Cでない場合(S120のNO)、初期化フェーズ処理部214は、lを1つインクリメントする(処理S122)。そして処理フローはS104に戻り、次のチップ#lについて、S104~S122の処理が繰り返される。このようにlを更新していくことにより、式7のlについての総和計算が実行される。したがって、
図11のフローチャートのループ処理が繰り返されることによって、式7の計算が完了することとなる。そして、l=Cである場合(S120のYES)、初期化フェーズが終了する。そして、アニーリングフェーズ(S20)が実行される。
【0145】
図12は、実施の形態1にかかるチップ200それぞれで実行されるアニーリングフェーズ(S20)を示すフローチャートである。ここで、
図12は、チップ#kで実行されるアニーリングフェーズを示す。アニーリングフェーズ処理部216は、S20の処理が実行されるように制御を行う。
【0146】
まず、アニーリングフェーズ処理部216は、アニーリングフェーズの処理対象のチップ#lのインデックスlを、l=kに設定する(処理S202)。これにより、チップ200-kは、自身のチップ#kに関するパラメータを用いて自身のチップ#kが扱うスピンの瞬間磁場を計算するための演算(総和計算における加算処理)を実行することとなる。このとき、スピン情報デコーダ264に入力される配列指定信号が、チップ#kに関するスピン状態配列を指定するように設定される。これにより、自身のチップ200-kが扱うスピンに関するスピン状態配列σk,1,σk,2,・・・,σk,Nが読み出され、反転ベクトル計算回路250に入力される。また、重みデコーダ234に入力されるブロック指定信号が、チップ#kに関するブロックの相互作用係数を指定するように設定される。これにより、チップ#kに関するブロック#kの相互作用係数J(k,k)ijが出力される。
【0147】
反転ベクトル計算回路250は、チップ#kが扱うスピンiの反転ベクトルΔ(反転可否ベクトルΔ)を計算する(処理S204)。具体的には、反転ベクトル計算回路250は、チップ#kが扱うスピンi(1≦i≦N)に対して確率的にスピン反転を試行する。つまり、反転ベクトル計算回路250は、瞬間磁場バッファ242に格納された瞬間磁場~hiと、スピン情報バッファ262から読み出されたスピン状態σk,iとを用いて、各スピンiについて、反転確率Piを、並列に計算する。なお、反転確率Piは、式5のインデックスjをiに置き換え、σjをσk,iに置き換えたものに対応する。そして、反転ベクトル計算回路250は、式10のインデックスjをiに置き換えた式により、各スピンiについて、反転可否Δiを決定する。つまり、反転可能なスピンiに対してΔi=1を設定し、それ以外のスピンiに対してΔi=0を設定する。これにより、反転ベクトル計算回路250は、自身のチップ#kが扱うスピンに関する反転可否ベクトルΔ(反転ベクトルΔ)を計算する。そして、反転ベクトル計算回路250は、チップ#kが扱うスピンiに関する反転ベクトルΔ(反転可否ベクトルΔ)を、反転ベクトルバッファ252に格納する。
【0148】
そして、S204の処理で、反転ベクトル計算回路250は、チップ#kが扱う全てのスピンiのうち、Δi=1のスピンiに対してスピン状態τi=-σk,iを設定する。一方、反転ベクトル計算回路250は、チップ#kが扱う全てのスピンiのうち、Δi=0のスピンiに対してスピン状態τi=σk,iを設定する。また、反転ベクトル計算回路250は、設定されたスピン状態τi(i=1,2,・・・,N)を、暫定更新スピンバッファ254に格納する。
【0149】
反転スピン選択回路260は、Δi=1のスピンiのうち反転すべきスピンiを選択する(処理S206)。具体的には、実行されるアニーリングアルゴリズムがSCAである場合、反転スピン選択回路260は、反転ベクトルバッファ252に格納された反転ベクトルΔにおいてΔi=1を満たす全てのスピンiを選択する。
【0150】
アニーリングフェーズ処理部216は、xの値をx=1と設定する(処理S210)。そして、アニーリングフェーズ処理部216は、後述するS214の処理で扱われるスピンiのインデックスiを、i=ixと設定する(処理S212)。ここで、xは、S206で選択されたスピンiのインデックスである。したがって、1≦x≦Nであり、xの値は、S206で選択されたスピンiの数だけ存在する。
【0151】
なお、上述したように、反転スピン選択回路260は、S212の処理で設定されたスピンiに対応するスピン状態τiを瞬間磁場計算回路240に出力する。また、上述したように、反転スピン選択回路260は、S212の処理で設定されたインデックスiを重みデコーダ234に出力する。また、上述したように、反転スピン選択回路260は、S212の処理で設定されたスピンiについて、スピン情報バッファ262に格納されたスピン情報σk,iを、スピン状態τiに更新する。このようにして、チップ#kが扱うスピンに関するスピン情報σが生成される。つまり、チップ#kが扱うスピンに関するスピン情報σについて更新処理が行われる。
【0152】
瞬間磁場計算回路240は、自身のチップ#kが扱うスピンj(1≦j≦N)に対して、以下の式13により、瞬間磁場
~h
jを計算する(処理S214)。
【数13】
・・・(13)
【0153】
具体的には、瞬間磁場計算回路240は、反転スピン選択回路260から出力されたスピンiのスピン状態τiと、重みメモリ232から出力された相互作用係数J(k,k)ijとを用いて、自身のチップ#kが扱うスピンjの瞬間磁場~hjを更新する。なお、スピンiは、S212で設定されたインデックスiのスピンiに対応する。また、相互作用係数J(k,k)ijについて、iはS212で設定されたインデックスiである。また、瞬間磁場計算回路240は、自身のチップ#kが扱う複数のスピンjの瞬間磁場~hjを、スピンjについて並列に更新する。
【0154】
アニーリングフェーズ処理部216は、xが最大値xmaxであるか否かを判定する(処理S216)。xが最大値xmaxでない場合(S216のNO)、アニーリングフェーズ処理部216は、xを1つインクリメントする(処理S218)。そして処理フローはS212に戻り、次の反転すべきスピンiについて、S212~S218の処理が繰り返される。このようにxを更新していくことにより、式7のl=kにおけるiについての総和計算が実行される。
【0155】
一方、xが最大値xmaxである場合(S216のYES)、チップ200-kは、チップ#kに関するスピン情報σ(スピン状態配列)を管理装置100に送信する(処理S220)。具体的には、アニーリングフェーズ処理部216は、チップ#kに関するスピン情報σ(スピン状態配列)が管理装置100に送信されるように、制御を行う。そして、アニーリングフェーズが終了し、管理装置100において更新情報の生成処理(S30)が実行される。
【0156】
図13は、実施の形態1にかかる管理装置100によって実行される更新情報の生成処理(S30)を示すフローチャートである。なお、S30の処理は、チップ200ごとに実行される。つまり、管理装置100は、後述するようにチップ200-k(k=1,2,・・・,C)からそのチップ200-kが扱うスピンのスピン情報を受信すると、そのチップ200-kが扱うスピンのスピン情報に対する処理を行う。
【0157】
スピン情報受信部120は、更新後のスピン情報を受信する(処理S302)。具体的には、スピン情報受信部120は、上述したように、チップ200-kから、そのチップ200-kが扱うスピンに関する、更新処理後のスピン状態を示すスピン情報を受信する。なお、管理装置100における処理では、チップ200-kにおいて更新処理がなされた後に管理装置100によって受信されたスピン情報を、スピン情報τとする。
【0158】
スピン配列出力部170は、アニーリングステップtが最大アニーリングステップtmaxであるか否かを判定する(処理S304)。つまり、スピン配列出力部170は、アニーリングステップtが満了したか否かを判定する。なお、アニーリングステップtを示す情報は、S302で受信されたスピン情報に付加されていてもよい。あるいは、アニーリングステップtは、管理装置100によって管理されていてもよい。アニーリングステップtが最大アニーリングステップtmaxである場合(S304のYES)、処理フローは後述するS320に進む。
【0159】
一方、アニーリングステップtが最大アニーリングステップtmaxでない場合(S304のNO)、アニーリングステップtは満了していない。この場合、更新情報生成部130は、上述したように、受信されたスピン情報τを用いて更新情報Δを生成する(処理S306)。そして、更新情報圧縮部140は、上述したように、S306の処理で生成された更新情報Δを圧縮する(処理S308)。このとき、上述したように、更新情報圧縮部140は、更新情報Δにおける「1」のビットの数(又は「0」のビットの数)の割合に応じて、圧縮率が高まるように、圧縮方法(圧縮処理におけるコードレングス)を切り替えてもよい。
【0160】
更新情報送信部150は、圧縮された更新情報Δを送信する(処理S310)。ここで、上述したように、更新情報送信部150は、S308の処理で圧縮された更新情報Δを、更新情報Δに対応するスピンを扱うチップ200以外のチップ200に送信する。上述したように更新情報Δがチップ200-kに対応する場合、更新情報送信部150は、チップ200-k以外のチップ200-l(l≠k)に、圧縮された更新情報Δを送信する。
【0161】
スピン情報更新部160は、更新処理後のスピン情報τを、スピン情報格納部110に格納する(処理S312)。つまり、スピン情報更新部160は、スピン情報格納部110に格納されているスピン情報を更新する。上述したように更新情報Δがチップ200-kに対応する場合、スピン情報更新部160は、前回のアニーリングステップt-1で格納されたスピン情報σkを、今回のアニーリングステップtで受信されたスピン情報τkで上書きする。これにより、スピン情報格納部110は、更新処理後のスピン情報τを、スピン情報σとして格納する。そして、処理フローはS40に進む。
【0162】
一方、アニーリングステップtが最大アニーリングステップtmaxである場合(S304のYES)、アニーリングステップtは満了している。この場合、スピン配列出力部170は、上述したように、最適化されたスピン配列を出力する(処理S320)。これにより、出力されたスピン配列に関するスピンを扱うチップ200-kについての処理が終了する。そして、全てのチップ200について処理S320が実行されて最適化されたスピン配列が出力されることで、イジングモデルにおける全てのスピンについてのアニーリングアルゴリズムが終了する。
【0163】
なお、tmaxは、全てのチップ200について共通である。また、アニーリングステップtの更新(インクリメント)は各チップ200のアニーリング制御部212によって行われてもよい。この場合、管理装置100は、上述したように、受信されるスピン情報τがいつのアニーリングステップtで生成されたのかを示す情報を取得してもよい。
【0164】
図14は、実施の形態1にかかるチップ200それぞれで実行される同期フェーズ(S40)を示すフローチャートである。ここで、
図14は、チップ#kで実行されるアニーリングフェーズを示す。同期フェーズ処理部218は、S40の処理が実行されるように制御を行う。
【0165】
チップ#kは、チップ#k以外のチップ#lに関する圧縮された更新情報Δを受信して展開し、展開された更新情報Δを反転ベクトルバッファ252に格納する(処理S402)。具体的には、チップ#kの外部インタフェース220は、管理装置100からチップ#lに関する圧縮された更新情報Δを受信する。ゼロランレングスデコーダ224は、圧縮された更新情報Δを展開して、圧縮前の更新情報Δを得る。なお、ゼロランレングスデコーダ224は、管理装置100から送信された更新情報のデータのヘッダに示される圧縮方法(コードレングス)に対応する方法で、更新情報Δを展開してもよい。例えば、更新情報Δに対して8ビットのコードレングスでゼロランレングス圧縮が行われた場合、ゼロランレングスデコーダ224は、8ビットのコードレングスのゼロランレングス圧縮に対応する方法で、更新情報Δを展開する。
【0166】
そして、ゼロランレングスデコーダ224は、展開された更新情報Δを、反転ベクトルバッファ252に格納する。ここで、展開された更新情報Δは、反転ベクトルバッファ252のバッファA252a及びバッファB252bのうち、そのタイミングで計算に使用されていない方に格納される。つまり、バッファA252a及びバッファB252bのうち更新情報Δが格納されるバッファは、都度、切り替わり得る。例えば、バッファA252aに格納された反転ベクトルΔ(更新情報Δ又は反転可否ベクトルΔ)を用いて計算が行われているときは、展開された更新情報Δは、バッファB252bに格納される。また、バッファB252bに格納された反転ベクトルΔ(更新情報Δ又は反転可否ベクトルΔ)を用いて計算が行われているときは、展開された更新情報Δは、バッファA252aに格納される。これにより、反転ベクトルバッファ252を用いた計算と通信とを並行して行うことができる。すなわち、あるチップ#lに関するS402の処理は、S20の処理、又は、他のチップ#lに関するS404~S422の処理と並行して行われ得る。
【0167】
なお、この場合、同期フェーズ処理部218は、同期フェーズの処理対象のチップ#lのインデックスlを、その受信された更新情報Δに関するチップ#lのインデックスとしてもよい。例えば、チップ#1がチップ#2に関する更新情報Δを受信した場合、同期フェーズ処理部218は、同期フェーズの処理対象のチップ#lのインデックスlを、l=2としてもよい。これにより、チップ200-kは、他のチップ#lに関するパラメータを用いて自身のチップ#kが扱うスピンの瞬間磁場を計算するための演算(総和計算における加算処理)を実行することとなる。このとき、スピン情報デコーダ264に入力される配列指定信号が、チップ#lに関するスピン状態配列を指定するように設定される。これにより、他のチップ#lが扱うスピンに関するスピン状態配列σl,1,σl,2,・・・,σl,Nが読み出され、反転ベクトル計算回路250に入力される。また、重みデコーダ234に入力されるブロック指定信号が、チップ#lに関するブロックの相互作用係数を指定するように設定される。
【0168】
反転ベクトル計算回路250は、暫定更新スピンバッファ254に格納されるスピン状態τを設定する(処理S404)。具体的には、反転ベクトル計算回路250は、反転ベクトルバッファ252に格納された更新情報Δ(反転ベクトルΔ)において、他のチップ#lが扱う全てのスピンiのうち、Δi=1のスピンiに対してスピン状態τi=-σl,iを設定する。一方、反転ベクトル計算回路250は、反転ベクトルバッファ252に格納された更新情報Δ(反転ベクトルΔ)において、他のチップ#lが扱う全てのスピンiのうち、Δi=0のスピンiに対してスピン状態τi=σl,iを設定する。そして、反転ベクトル計算回路250は、設定されたスピン状態τi(i=1,2,・・・,N)を、暫定更新スピンバッファ254に格納する。
【0169】
反転スピン選択回路260は、Δi=1の全てのスピンiを選択する(処理S406)。そして、同期フェーズ処理部218は、xの値をx=1と設定する(処理S410)。そして、同期フェーズ処理部218は、後述するS414の処理で扱われるスピンiのインデックスiを、i=ixと設定する(処理S412)。ここで、xは、S406で選択されたスピンiのインデックスである。したがって、1≦x≦Nであり、xの値は、S406で選択されたスピンiの数だけ存在する。
【0170】
なお、上述したように、反転スピン選択回路260は、S412の処理で設定されたスピンiに対応するスピン状態τiを瞬間磁場計算回路240に出力する。また、上述したように、反転スピン選択回路260は、S412の処理で設定されたインデックスiを重みデコーダ234に出力する。また、上述したように、反転スピン選択回路260は、S412の処理で設定されたスピンiについて、スピン情報バッファ262に格納されたスピン情報σl,iを、スピン状態τiに更新する。このようにして、チップ#lが扱うスピンに関するスピン情報σが生成される。つまり、チップ#lが扱うスピンに関するスピン情報が、各チップ200において同期される。
【0171】
瞬間磁場計算回路240は、自身のチップ#kが扱うスピンj(1≦j≦N)に対して、以下の式14により、瞬間磁場
~h
jを計算する(処理S414)。
【数14】
・・・(14)
【0172】
具体的には、瞬間磁場計算回路240は、反転スピン選択回路260から出力されたスピンiのスピン状態τiと、重みメモリ232から出力された相互作用係数J(k,l)ijとを用いて、自身のチップ#kが扱うスピンjの瞬間磁場~hjを更新する。なお、スピンiは、S412で設定されたインデックスiのスピンiに対応する。また、相互作用係数J(k,l)ijについて、iはS412で設定されたインデックスiである。また、瞬間磁場計算回路240は、自身のチップ#kが扱う複数のスピンjの瞬間磁場~hjを、スピンjについて並列に更新する。
【0173】
同期フェーズ処理部218は、xが最大値xmaxであるか否かを判定する(処理S416)。xが最大値xmaxでない場合(S416のNO)、同期フェーズ処理部218は、xを1つインクリメントする(処理S418)。そして処理フローはS412に戻り、次の選択されたスピンiについて、S412~S418の処理が繰り返される。このようにxを更新していくことにより、式7のl=lにおけるiについての総和計算が実行される。
【0174】
一方、xが最大値xmaxである場合(S416のYES)、チップ#k以外の全てのチップ#lについて処理が終了したか否かを判定する(処理S420)。チップ#k以外の全てのチップ#lについて処理が終了していない場合(S420のNO)、処理前のチップ#lを同期フェーズの処理対象とする(処理S422)。そして、処理フローはS404に戻り、S404~S422の処理が繰り返される。一方、チップ#k以外の全てのチップ#lについて処理が終了した場合(S420のYES)、同期フェーズが終了し、アニーリングフェーズの処理(S20)が実行される。
【0175】
図15は、実施の形態1にかかるアニーリング処理システム1によって行われるアニーリング処理を説明するための図である。
図15には、アニーリング処理システム1が4つのチップ200-1~200-4(チップ#1~#4)を有する場合の例について示している。
【0176】
チップ#1の重みメモリ232は、相互作用係数J(1,1)ij,J(1,2)ij,J(1,3)ij,J(1,4)ijを格納している。また、チップ#2の重みメモリ232は、相互作用係数J(2,1)ij,J(2,2)ij,J(2,3)ij,J(2,4)ijを格納している。また、チップ#3の重みメモリ232は、相互作用係数J(3,1)ij,J(3,2)ij,J(3,3)ij,J(3,4)ijを格納している。また、チップ#4の重みメモリ232は、相互作用係数J(4,1)ij,J(4,2)ij,J(4,3)ij,J(4,4)ijを格納している。
【0177】
なお、
図15及び後述する
図16において、
図15のチップ#1の重みメモリ232の相互作用係数のブロックに付されたハッチングパターンと同じハッチングパターンが付された箇所については、チップ#1に関する事項を示す。同様に、チップ#2の重みメモリ232の相互作用係数のブロックに付されたハッチングパターンと同じハッチングパターンが付された箇所については、チップ#2に関する事項を示す。また、チップ#3の重みメモリ232の相互作用係数のブロックに付されたハッチングパターンと同じハッチングパターンが付された箇所については、チップ#3に関する事項を示す。また、チップ#4の重みメモリ232の相互作用係数のブロックに付されたハッチングパターンと同じハッチングパターンが付された箇所については、チップ#4に関する事項を示す。
【0178】
以下、チップ#1について説明するが、他のチップ#2~#4についても同様である。チップ#1は、相互作用係数J(1,1)ij,J(1,2)ij,J(1,3)ij,J(1,4)ijを使用して、自身のチップ#1が扱うスピンについて、スピン情報を生成(更新)する(S214,S414,S204,S206)。そして、チップ#1は、更新処理がなされたスピン情報τ#1を、管理装置100に送信する(S220)。
【0179】
管理装置100のスピン情報受信部120は、チップ#1からスピン情報τ#1を受信する(S302)。更新情報生成部130は、矢印A1で示すように、スピン情報格納部110に格納されたチップ#1に関する更新処理前のスピン情報σ#1と、更新処理後のスピン情報τ#1とに対して排他的論理和の演算を行う。そして、更新情報生成部130は、矢印A2で示すように、チップ#1に関する更新情報Δ#1を生成する(S306)。そして、更新情報圧縮部140(ZRLE)は、更新情報Δ#1を圧縮する(S308)。そして、管理装置100は、圧縮された更新情報Δ#1を、チップ#1以外のチップ#2,#3,#4に送信する(S310)。
【0180】
各チップ#2,#3,#4は、圧縮された更新情報Δ#1を受信してゼロランレングスデコーダ224により展開し、バッファA252a及びバッファB252bのうち計算に使用されていない方(
図15の例ではバッファB252b)に格納する(S402)。そして、各チップ#2,#3,#4は、格納された更新情報Δ#1を用いて、チップ#1についての同期フェーズの処理を実行する(S40)。つまり、チップ#2は、格納された更新情報Δ#1と相互作用係数J(2,1)
ij,を用いて、チップ#1についての同期フェーズの処理を実行する(S40)。また、チップ#3は、格納された更新情報Δ#1と相互作用係数J(3,1)
ij,を用いて、チップ#1についての同期フェーズの処理を実行する(S40)。また、チップ#4は、格納された更新情報Δ#1と相互作用係数J(4,1)
ij,を用いて、チップ#1についての同期フェーズの処理を実行する(S40)。
【0181】
<タイミングチャート>
図16は、実施の形態1にかかるアニーリング処理システム1で実行される処理を示すタイミングチャートを例示する図である。
図16は、アニーリングステップstep#nと、その次のアニーリングステップstep#n+1とにおける処理を示している。
【0182】
step#nにおいて、矢印Anで示すように、チップ#1は、チップ#1が扱うスピンについての更新処理を行う。つまり、チップ#1は、チップ#1が扱うスピンについて、
図12に示したアニーリングフェーズの処理(S20)を行う。そして、矢印Bnで示すように、チップ#1は、チップ#1に関する更新処理後のスピン情報σを、スピン情報バッファ262に格納し、管理装置100に送信する。そして、管理装置100によってチップ#1に関する更新処理後のスピン情報σに対してS30の処理が実行される。そして、チップ#1に関する更新処理後のスピン情報σに対応する更新情報Δが、それぞれ矢印C2n,C3n,C4nで示すように、チップ#1とは異なるチップ#2,#3,#4によって受信され、反転ベクトルバッファ252に格納される。ここで、チップ#1に関する更新情報Δの受信は、チップ#2,#3,#4においてチップ#1に関する同期処理以外の処理についての計算が実行されている間に行われ得る。
【0183】
そして、矢印D2nで示すように、チップ#2は、チップ#1に関する更新処理後のスピン情報σに対応する更新情報Δを用いて、チップ#1が扱うスピンについての同期処理を行う。つまり、チップ#2は、チップ#1が扱うスピンについて、
図14においてl=1の場合の同期フェーズの処理(S40)を行う。同様に、矢印D3nで示すように、チップ#3は、チップ#1に関する更新処理後のスピン情報σに対応する更新情報Δを用いて、チップ#1が扱うスピンについての同期処理を行う。また、同様に、矢印D4nで示すように、チップ#4は、チップ#1に関する更新処理後のスピン情報σに対応する更新情報Δを用いて、チップ#1が扱うスピンについての同期処理を行う。
【0184】
また、矢印R2nで示すように、チップ#1は、チップ#2が扱うスピンに関する更新情報Δを管理装置100から受信して、チップ#1の反転ベクトルバッファ252に格納する。ここで、チップ#2に関する更新情報Δの受信は、チップ#1においてチップ#2に関する同期処理以外の処理についての計算が実行されている間に行われ得る。そして、矢印S2nで示すように、チップ#1は、チップ#2が扱うスピンに関する更新情報Δを用いて、チップ#2が扱うスピンについての同期処理を行う。つまり、チップ#1は、チップ#2が扱うスピンについて、
図14においてl=2の場合の同期フェーズの処理(S40)を行う。
【0185】
また、矢印R3nで示すように、チップ#1は、チップ#3が扱うスピンに関する更新情報Δを管理装置100から受信して、チップ#1の反転ベクトルバッファ252に格納する。ここで、チップ#3に関する更新情報Δの受信は、チップ#1においてチップ#3に関する同期処理以外の処理についての計算が実行されている間に行われ得る。そして、矢印S3nで示すように、チップ#1は、チップ#3が扱うスピンに関する更新情報Δを用いて、チップ#3が扱うスピンについての同期処理を行う。つまり、チップ#1は、チップ#3が扱うスピンについて、
図14においてl=3の場合の同期フェーズの処理(S40)を行う。
【0186】
また、矢印R4nで示すように、チップ#1は、チップ#4が扱うスピンに関する更新情報Δを管理装置100から受信して、チップ#1の反転ベクトルバッファ252に格納する。ここで、チップ#4に関する更新情報Δの受信は、チップ#1においてチップ#4に関する同期処理以外の処理についての計算が実行されている間に行われ得る。そして、矢印S4nで示すように、チップ#1は、チップ#4が扱うスピンに関する更新情報Δを用いて、チップ#4が扱うスピンについての同期処理を行う。つまり、チップ#1は、チップ#4が扱うスピンについて、
図14においてl=4の場合の同期フェーズの処理(S40)を行う。
【0187】
また、step#n+1において、矢印An+1で示すように、チップ#1が扱うスピンについての更新処理を行う。つまり、チップ#1は、チップ#1が扱うスピンについて、step#nにおいて矢印Anで示したアニーリングフェーズにおける処理及び矢印S2n,S3n,S4nで示した同期処理によって得られた瞬間磁場
~h
jを用いて、
図12に示したアニーリングフェーズの処理(S20)を行う。そして、矢印Bn+1で示すように、チップ#1は、チップ#1に関する更新処理後のスピン情報σを、スピン情報バッファ262に格納し、管理装置100に送信する。そして、管理装置100によってチップ#1に関する更新処理後のスピン情報σに対してS30の処理が実行される。そして、チップ#1に関する更新処理後のスピン情報σに対応する更新情報Δが、それぞれ矢印C2n+1,C3n+1,C4n+1で示すように、チップ#1とは異なるチップ#2,#3,#4によって受信され、反転ベクトルバッファ252に格納される。ここで、チップ#1に関する更新情報Δの受信は、チップ#2,#3,#4においてチップ#1に関する同期処理以外の処理についての計算が実行されている間に行われ得る。
【0188】
そして、矢印D2n+1で示すように、チップ#2は、チップ#1に関する更新処理後のスピン情報σに対応する更新情報Δを用いて、チップ#1が扱うスピンについての同期処理を行う。つまり、チップ#2は、チップ#1が扱うスピンについて、
図14においてl=1の場合の同期フェーズの処理(S40)を行う。同様に、矢印D3n+1で示すように、チップ#3は、チップ#1に関する更新処理後のスピン情報σに対応する更新情報Δを用いて、チップ#1が扱うスピンについての同期処理を行う。また、同様に、矢印D4n+1で示すように、チップ#4は、チップ#1に関する更新処理後のスピン情報σに対応する更新情報Δを用いて、チップ#1が扱うスピンについての同期処理を行う。
【0189】
また、矢印R2n+1で示すように、チップ#1は、チップ#2が扱うスピンに関する更新情報Δを管理装置100から受信して、チップ#1の反転ベクトルバッファ252に格納する。ここで、チップ#2に関する更新情報Δの受信は、チップ#1においてチップ#2に関する同期処理以外の処理についての計算が実行されている間に行われ得る。そして、矢印S2n+1で示すように、チップ#1は、チップ#2が扱うスピンに関する更新情報Δを用いて、チップ#2が扱うスピンについての同期処理を行う。つまり、チップ#1は、チップ#2が扱うスピンについて、
図14においてl=2の場合の同期フェーズの処理(S40)を行う。
【0190】
また、矢印R3n+1で示すように、チップ#1は、チップ#3が扱うスピンに関する更新情報Δを管理装置100から受信して、チップ#1の反転ベクトルバッファ252に格納する。ここで、チップ#3に関する更新情報Δの受信は、チップ#1においてチップ#3に関する同期処理以外の処理についての計算が実行されている間に行われ得る。そして、矢印S3n+1で示すように、チップ#1は、チップ#3が扱うスピンに関する更新情報Δを用いて、チップ#3が扱うスピンについての同期処理を行う。つまり、チップ#1は、チップ#3が扱うスピンについて、
図14においてl=3の場合の同期フェーズの処理(S40)を行う。
【0191】
また、矢印R4n+1で示すように、チップ#1は、チップ#4が扱うスピンに関する更新情報Δを管理装置100から受信して、チップ#1の反転ベクトルバッファ252に格納する。ここで、チップ#4に関する更新情報Δの受信は、チップ#1においてチップ#4に関する同期処理以外の処理についての計算が実行されている間に行われ得る。そして、矢印S4n+1で示すように、チップ#1は、チップ#4が扱うスピンに関する更新情報Δを用いて、チップ#4が扱うスピンについての同期処理を行う。つまり、チップ#1は、チップ#4が扱うスピンについて、
図14においてl=4の場合の同期フェーズの処理(S40)を行う。
【0192】
ここで、
図16の例では、step#nにおいて、チップ#1は、チップ#2が扱うスピンについての同期処理を行っている間に、チップ#3が扱うスピンに関する更新情報Δを受信する。そして、チップ#1は、反転ベクトルバッファ252のバッファA252a及びバッファB252bのうちチップ#2が扱うスピンに関する更新情報Δが格納されている方のバッファを使用して、チップ#2が扱うスピンについての同期処理の計算を行う。したがって、チップ#3が扱うスピンに関する更新情報Δは、反転ベクトルバッファ252のバッファA252a及びバッファB252bのうち、チップ#2が扱うスピンに関する更新情報Δが格納されていない方に格納される。
【0193】
また、
図16の例では、step#nにおいて、チップ#1は、チップ#3が扱うスピンについての同期処理を行っている間に、チップ#4が扱うスピンに関する更新情報Δを受信する。そして、チップ#1は、反転ベクトルバッファ252のバッファA252a及びバッファB252bのうちチップ#3が扱うスピンに関する更新情報Δが格納されている方のバッファを使用して、チップ#3が扱うスピンについての同期処理の計算を行う。したがって、チップ#4が扱うスピンに関する更新情報Δは、反転ベクトルバッファ252のバッファA252a及びバッファB252bのうち、チップ#3が扱うスピンに関する更新情報Δが格納されていない方に格納される。
【0194】
例えば、チップ#2が扱うスピンに関する更新情報ΔがバッファA252aに格納された場合、チップ#3が扱うスピンに関する更新情報Δは、バッファB252bに格納される。この場合、チップ#4が扱うスピンに関する更新情報Δは、チップ#2に関する同期処理が終了した後で、バッファA252aに格納される。同期処理はデータパスを用いて行われるため、制御回路210は、同期処理が行われるタイミングで、更新情報Δが格納されるバッファ(ダブルバッファ)を切り替える。このようにすることで、計算と通信とを並行して行うことができる。つまり、計算の実行の裏で通信を実行することができる。そして、ダブルバッファを切り替えるごとに、新たな更新情報を受信することができる。上記のことは、step#n+1についても同様である。
【0195】
(実施の形態2)
次に、実施の形態2について説明する。実施の形態2では、各チップ200は、複数のレプリカ処理を行う。なお、複数のレプリカ処理それぞれにおいて、各チップ200は、上述したアニーリングフェーズの処理(S20)及び同期フェーズの処理(S40)を行う。なお、後述する
図17では、複数のレプリカ処理それぞれにおいて、同期フェーズの処理(S40)が行われた後でアニーリングフェーズの処理(S20)が行われるとする。
【0196】
図17は、実施の形態2にかかるアニーリング処理システム1において実行される処理を示すタイミングチャートを例示する図である。なお、
図17では、2つのチップ#1,#2における処理が示されている。また、
図17は、アニーリングステップStep#30における処理及びアニーリングステップStep#60における処理を示す。また、
図17は、4個のレプリカ処理が行われる場合(
図8においてR=4とする場合)の例を示す。
【0197】
Step#30において、矢印A1mで示すように、チップ#1は、レプリカ#1についてのレプリカ処理(S40,S20)を行う。そして、矢印B1mで示すように、チップ#1は、レプリカ#1について、チップ#1に関する更新処理後のスピン情報σを、スピン情報バッファ262のレプリカ#1に関する領域に格納し、管理装置100に送信する。そして、レプリカ#1について、管理装置100によってチップ#1に関する更新処理後のスピン情報σに対してS30の処理が実行される。そして、レプリカ#1について、チップ#1に関する更新処理後のスピン情報σに対応する更新情報Δが、矢印C1mで示すように、チップ#1とは異なるチップ#2によって受信され、反転ベクトルバッファ252のレプリカ#1に関する領域に格納される。ここで、レプリカ#1に関する更新情報Δの受信は、チップ#2においてレプリカ#1に関するレプリカ処理以外の処理が実行されている間に行われ得る。
【0198】
また、矢印A2mで示すように、チップ#1は、レプリカ#1についてのレプリカ処理を行った後、レプリカ#2についてのレプリカ処理(S40,S20)を行う。そして、矢印B2mで示すように、チップ#1は、レプリカ#2について、チップ#1に関する更新処理後のスピン情報σを、スピン情報バッファ262のレプリカ#2に関する領域に格納し、管理装置100に送信する。そして、レプリカ#2について、管理装置100によってチップ#1に関する更新処理後のスピン情報σに対してS30の処理が実行される。そして、レプリカ#2について、チップ#1に関する更新処理後のスピン情報σに対応する更新情報Δが、矢印C2mで示すように、チップ#1とは異なるチップ#2によって受信され、反転ベクトルバッファ252のレプリカ#2に関する領域に格納される。ここで、レプリカ#2に関する更新情報Δの受信は、チップ#2においてレプリカ#2に関するレプリカ処理以外の処理が実行されている間に行われ得る。
【0199】
また、矢印A3mで示すように、チップ#1は、レプリカ#2についてのレプリカ処理を行った後、レプリカ#3についてのレプリカ処理(S40,S20)を行う。そして、矢印B3mで示すように、チップ#1は、レプリカ#3について、チップ#1に関する更新処理後のスピン情報σを、スピン情報バッファ262のレプリカ#3に関する領域に格納し、管理装置100に送信する。そして、レプリカ#3について、管理装置100によってチップ#1に関する更新処理後のスピン情報σに対してS30の処理が実行される。そして、レプリカ#3について、チップ#1に関する更新処理後のスピン情報σに対応する更新情報Δが、矢印C3mで示すように、チップ#1とは異なるチップ#2によって受信され、反転ベクトルバッファ252のレプリカ#3に関する領域に格納される。ここで、レプリカ#3に関する更新情報Δの受信は、チップ#2においてレプリカ#3に関するレプリカ処理以外の処理が実行されている間に行われ得る。
【0200】
また、矢印A4mで示すように、チップ#1は、レプリカ#3についてのレプリカ処理を行った後、レプリカ#4についてのレプリカ処理(S40,S20)を行う。そして、矢印B4mで示すように、チップ#1は、レプリカ#4について、チップ#1に関する更新処理後のスピン情報σを、スピン情報バッファ262のレプリカ#4に関する領域に格納し、管理装置100に送信する。そして、レプリカ#4について、管理装置100によってチップ#1に関する更新処理後のスピン情報σに対してS30の処理が実行される。そして、レプリカ#4について、チップ#1に関する更新処理後のスピン情報σに対応する更新情報Δが、矢印C4mで示すように、チップ#1とは異なるチップ#2によって受信され、反転ベクトルバッファ252のレプリカ#4に関する領域に格納される。ここで、レプリカ#4に関する更新情報Δの受信は、チップ#2においてレプリカ#4に関するレプリカ処理以外の処理が実行されている間に行われ得る。
【0201】
また、チップ#2は、矢印D1mで示すように、チップ#1に関する更新処理後のスピン情報σに対応する更新情報Δを用いて、レプリカ#1についてのレプリカ処理(S40,S20)を行う。つまり、チップ#2は、矢印C1mで示す受信処理で受信された、チップ#1に関する更新処理後のスピン情報σに対応する更新情報Δを用いて、チップ#1が扱うスピンについての同期処理を行う(S40)。そして、チップ#2は、レプリカ#1について、チップ#2が扱うスピンに関する更新処理(S20)を行う。そして、矢印E1mで示すように、チップ#2は、レプリカ#1について、チップ#2に関する更新処理後のスピン情報σを、スピン情報バッファ262のレプリカ#1に関する領域に格納し、管理装置100に送信する。そして、レプリカ#1について、管理装置100によってチップ#2に関する更新処理後のスピン情報σに対してS30の処理が実行される。そして、レプリカ#1について、チップ#2に関する更新処理後のスピン情報σに対応する更新情報Δが、矢印F1mで示すように、チップ#2とは異なるチップ#1によって受信され、反転ベクトルバッファ252のレプリカ#1に関する領域に格納される。ここで、レプリカ#1に関する更新情報Δの受信は、チップ#1においてレプリカ#1に関するレプリカ処理以外の処理が実行されている間に行われ得る。また、この矢印F1mで示す受信処理で受信される更新情報Δは、矢印A4mで示すレプリカ#4についてのレプリカ処理の後で行われる、矢印A1m+1で示すレプリカ処理で用いられる。このレプリカ処理は、矢印A1mで示したレプリカ処理の次のアニーリングステップ#31における、レプリカ#1についてのレプリカ処理である。
【0202】
また、チップ#2は、矢印D2mで示すように、チップ#1に関する更新処理後のスピン情報σに対応する更新情報Δを用いて、レプリカ#2についてのレプリカ処理(S40,S20)を行う。つまり、チップ#2は、矢印C2mで示す受信処理で受信された、チップ#1に関する更新処理後のスピン情報σに対応する更新情報Δを用いて、チップ#1が扱うスピンについての同期処理を行う(S40)。そして、チップ#2は、レプリカ#2について、チップ#2が扱うスピンに関する更新処理(S20)を行う。そして、矢印E2mで示すように、チップ#2は、レプリカ#2について、チップ#2に関する更新処理後のスピン情報σを、スピン情報バッファ262のレプリカ#2に関する領域に格納し、管理装置100に送信する。そして、レプリカ#2について、管理装置100によってチップ#2に関する更新処理後のスピン情報σに対してS30の処理が実行される。そして、レプリカ#2について、チップ#2に関する更新処理後のスピン情報σに対応する更新情報Δが、矢印F2mで示すように、チップ#2とは異なるチップ#1によって受信され、反転ベクトルバッファ252のレプリカ#2に関する領域に格納される。ここで、レプリカ#2に関する更新情報Δの受信は、チップ#1においてレプリカ#2に関するレプリカ処理以外の処理が実行されている間に行われ得る。また、この矢印F2mで示す受信処理で受信される更新情報Δは、矢印A1m+1で示すレプリカ#1についてのレプリカ処理の後で行われる、矢印A2m+1で示すレプリカ処理で用いられる。このレプリカ処理は、矢印A2mで示したレプリカ処理の次のアニーリングステップ#31における、レプリカ#2についてのレプリカ処理である。
【0203】
また、チップ#2は、矢印D3mで示すように、チップ#1に関する更新処理後のスピン情報σに対応する更新情報Δを用いて、レプリカ#3についてのレプリカ処理(S40,S20)を行う。つまり、チップ#2は、矢印C3mで示す受信処理で受信された、チップ#1に関する更新処理後のスピン情報σに対応する更新情報Δを用いて、チップ#1が扱うスピンについての同期処理を行う(S40)。そして、チップ#2は、レプリカ#3について、チップ#2が扱うスピンに関する更新処理(S20)を行う。
【0204】
また、チップ#2は、矢印D4mで示すように、チップ#1に関する更新処理後のスピン情報σに対応する更新情報Δを用いて、レプリカ#4についてのレプリカ処理(S40,S20)を行う。つまり、チップ#2は、矢印C4mで示す受信処理で受信された、チップ#1に関する更新処理後のスピン情報σに対応する更新情報Δを用いて、チップ#1が扱うスピンについての同期処理を行う(S40)。そして、チップ#2は、レプリカ#4について、チップ#2が扱うスピンに関する更新処理(S20)を行う。
【0205】
Step#60において、矢印A1nで示すように、チップ#1は、レプリカ#1についてのレプリカ処理(S40,S20)を行う。そして、矢印B1nで示すように、チップ#1は、レプリカ#1について、チップ#1に関する更新処理後のスピン情報σを、スピン情報バッファ262のレプリカ#1に関する領域に格納し、管理装置100に送信する。そして、レプリカ#1について、管理装置100によってチップ#1に関する更新処理後のスピン情報σに対してS30の処理が実行される。そして、レプリカ#1について、チップ#1に関する更新処理後のスピン情報σに対応する更新情報Δが、矢印C1nで示すように、チップ#1とは異なるチップ#2によって受信され、反転ベクトルバッファ252のレプリカ#1に関する領域に格納される。ここで、チップ#1に関する更新情報Δの受信は、チップ#2においてレプリカ#1に関するレプリカ処理以外の処理が実行されている間に行われ得る。
【0206】
また、矢印A2nで示すように、チップ#1は、レプリカ#1についてのレプリカ処理を行った後、レプリカ#2についてのレプリカ処理(S40,S20)を行う。そして、矢印B2nで示すように、チップ#1は、レプリカ#2について、チップ#1に関する更新処理後のスピン情報σを、スピン情報バッファ262のレプリカ#2に関する領域に格納し、管理装置100に送信する。そして、レプリカ#2について、管理装置100によってチップ#1に関する更新処理後のスピン情報σに対してS30の処理が実行される。そして、レプリカ#2について、チップ#1に関する更新処理後のスピン情報σに対応する更新情報Δが、矢印C2nで示すように、チップ#1とは異なるチップ#2によって受信され、反転ベクトルバッファ252のレプリカ#2に関する領域に格納される。ここで、レプリカ#2に関する更新情報Δの受信は、チップ#2においてレプリカ#2に関するレプリカ処理以外の処理が実行されている間に行われ得る。
【0207】
また、矢印A3nで示すように、チップ#1は、レプリカ#2についてのレプリカ処理を行った後、レプリカ#3についてのレプリカ処理(S40,S20)を行う。そして、矢印B3nで示すように、チップ#1は、レプリカ#3について、チップ#1に関する更新処理後のスピン情報σを、スピン情報バッファ262のレプリカ#3に関する領域に格納し、管理装置100に送信する。そして、レプリカ#3について、管理装置100によってチップ#1に関する更新処理後のスピン情報σに対してS30の処理が実行される。そして、レプリカ#3について、チップ#1に関する更新処理後のスピン情報σに対応する更新情報Δが、矢印C3nで示すように、チップ#1とは異なるチップ#2によって受信され、反転ベクトルバッファ252のレプリカ#3に関する領域に格納される。ここで、レプリカ#3に関する更新情報Δの受信は、チップ#2においてレプリカ#3に関するレプリカ処理以外の処理が実行されている間に行われ得る。
【0208】
また、矢印A4nで示すように、チップ#1は、レプリカ#3についてのレプリカ処理を行った後、レプリカ#4についてのレプリカ処理(S40,S20)を行う。そして、矢印B4nで示すように、チップ#1は、レプリカ#4について、チップ#1に関する更新処理後のスピン情報σを、スピン情報バッファ262のレプリカ#4に関する領域に格納し、管理装置100に送信する。そして、レプリカ#4について、管理装置100によってチップ#1に関する更新処理後のスピン情報σに対してS30の処理が実行される。そして、レプリカ#4について、チップ#1に関する更新処理後のスピン情報σに対応する更新情報Δが、矢印C4nで示すように、チップ#1とは異なるチップ#2によって受信され、反転ベクトルバッファ252のレプリカ#4に関する領域に格納される。ここで、レプリカ#4に関する更新情報Δの受信は、チップ#2においてレプリカ#4に関するレプリカ処理以外の処理が実行されている間に行われ得る。
【0209】
また、チップ#2は、矢印D1nで示すように、チップ#1に関する更新処理後のスピン情報σに対応する更新情報Δを用いて、レプリカ#1についてのレプリカ処理(S40,S20)を行う。つまり、チップ#2は、矢印C1nで示す受信処理で受信された、チップ#1に関する更新処理後のスピン情報σに対応する更新情報Δを用いて、チップ#1が扱うスピンについての同期処理を行う(S40)。そして、チップ#2は、レプリカ#1について、チップ#2が扱うスピンに関する更新処理(S20)を行う。そして、矢印E1nで示すように、チップ#2は、レプリカ#1について、チップ#2に関する更新処理後のスピン情報σを、スピン情報バッファ262のレプリカ#1に関する領域に格納し、管理装置100に送信する。そして、レプリカ#1について、管理装置100によってチップ#2に関する更新処理後のスピン情報σに対してS30の処理が実行される。そして、レプリカ#1について、チップ#2に関する更新処理後のスピン情報σに対応する更新情報Δが、矢印F1nで示すように、チップ#2とは異なるチップ#1によって受信され、反転ベクトルバッファ252のレプリカ#1に関する領域に格納される。ここで、レプリカ#1に関する更新情報Δの受信は、チップ#1においてレプリカ#1に関するレプリカ処理以外の処理が実行されている間に行われ得る。また、この矢印F1nで示す受信処理で受信される更新情報Δは、矢印A4nで示すレプリカ#4についてのレプリカ処理の後で行われる、矢印A1n+1で示すレプリカ処理で用いられる。このレプリカ処理は、矢印A1nで示したレプリカ処理の次のアニーリングステップ#61における、レプリカ#1についてのレプリカ処理である。
【0210】
また、チップ#2は、矢印D2nで示すように、チップ#1に関する更新処理後のスピン情報σに対応する更新情報Δを用いて、レプリカ#2についてのレプリカ処理(S40,S20)を行う。つまり、チップ#2は、矢印C2nで示す受信処理で受信された、チップ#1に関する更新処理後のスピン情報σに対応する更新情報Δを用いて、チップ#1が扱うスピンについての同期処理を行う(S40)。そして、チップ#2は、レプリカ#2について、チップ#2が扱うスピンに関する更新処理(S20)を行う。そして、矢印E2nで示すように、チップ#2は、レプリカ#2について、チップ#2に関する更新処理後のスピン情報σを、スピン情報バッファ262のレプリカ#2に関する領域に格納し、管理装置100に送信する。そして、レプリカ#2について、管理装置100によってチップ#2に関する更新処理後のスピン情報σに対してS30の処理が実行される。そして、レプリカ#2について、チップ#2に関する更新処理後のスピン情報σに対応する更新情報Δが、矢印F2nで示すように、チップ#2とは異なるチップ#1によって受信され、反転ベクトルバッファ252のレプリカ#2に関する領域に格納される。ここで、レプリカ#2に関する更新情報Δの受信は、チップ#1においてレプリカ#2に関するレプリカ処理以外の処理が実行されている間に行われ得る。また、この矢印F2nで示す受信処理で受信される更新情報Δは、矢印A1n+1で示すレプリカ#1についてのレプリカ処理の後で行われる、矢印A2n+1で示すレプリカ処理で用いられる。このレプリカ処理は、矢印A2nで示したレプリカ処理の次のアニーリングステップ#61における、レプリカ#2についてのレプリカ処理である。
【0211】
また、チップ#2は、矢印D3nで示すように、チップ#1に関する更新処理後のスピン情報σに対応する更新情報Δを用いて、レプリカ#3についてのレプリカ処理(S40,S20)を行う。つまり、チップ#2は、矢印C3nで示す受信処理で受信された、チップ#1に関する更新処理後のスピン情報σに対応する更新情報Δを用いて、チップ#1が扱うスピンについての同期処理を行う(S40)。そして、チップ#2は、レプリカ#3について、チップ#2が扱うスピンに関する更新処理(S20)を行う。
【0212】
また、チップ#2は、矢印D4nで示すように、チップ#1に関する更新処理後のスピン情報σに対応する更新情報Δを用いて、レプリカ#4についてのレプリカ処理(S40,S20)を行う。つまり、チップ#2は、矢印C4nで示す受信処理で受信された、チップ#1に関する更新処理後のスピン情報σに対応する更新情報Δを用いて、チップ#1が扱うスピンについての同期処理を行う(S40)。そして、チップ#2は、レプリカ#4について、チップ#2が扱うスピンに関する更新処理(S20)を行う。
【0213】
アニーリングステップが進むにつれて、反転(更新)されるスピンの数が減少する。したがって、アニーリングステップが進むにつれて、アニーリング処理の計算時間が短くなる。
図17の例では、矢印A1n,A2n,A3n,A4nで示す処理の長さは、それぞれ、矢印A1m,A2m,A3m,A4mで示す処理の長さよりも短くなっている。このことは、実施の形態1においても同様である。
【0214】
また、上述したように、反転(更新)されるスピンの数が少ないほど圧縮率が高くなる。したがって、アニーリングステップが進むにつれて、更新情報Δの通信時間が短くなる。
図17の例では、矢印C1n,C2n,C3n,C4nで示す通信の長さは、それぞれ、矢印C1m,C2m,C3m,C4mで示す通信の長さよりも短くなっている。このことは、実施の形態1においても同様である。
【0215】
また、実施の形態2においては、各チップ200は、あるレプリカ処理に関する計算を行っている間に、他のレプリカ処理に関する更新情報Δを受信することができる。したがって、各チップ200は、複数のレプリカ処理を連続して実行することができる。すなわち、あるレプリカ処理が終わった後、次のレプリカ処理に関する更新情報Δが受信されるまで、次のレプリカ処理の実行を待機することが不要となる。したがって、レプリカ処理を行うことによって、各チップ200のアイドル時間の発生を抑制することができる。すなわち、実施の形態1では、
図16の矢印Xで示すように、チップ#1は、矢印Anで示すようにチップ#1が扱うスピンについての更新処理を行ったあと、チップ#2に関する更新情報Δが受信されるまで、チップ#2に関する同期処理を待機する必要がある。しかしながら、実施の形態2のようにレプリカ処理を行うことで、アイドル時間の発生を抑制することができる。
【0216】
(変形例)
なお、本発明は上記実施の形態に限られたものではなく、趣旨を逸脱しない範囲で適宜変更することが可能である。例えば、上述したフローチャートにおいて、各処理(ステップ)の順序は、適宜、変更可能である。また、複数ある処理(ステップ)のうちの1つ以上は、省略されてもよい。例えば、
図13のS312の処理は、S306の処理の後の任意のタイミングで実行されてもよい。また、
図12のS220の処理は、S206の処理の後の任意のタイミングで実行されてもよい。この場合、S206の処理で、チップ#kが扱うスピンに関するスピン情報σについて更新処理が行われる。
【0217】
また、上述した実施の形態では、各チップが扱うスピンの数Nは互いに同じ(N=512個)であるとしたが、このような構成に限られない。各チップ200が扱うスピンの数Nは、全てのチップ200において同じである必要はない。この場合、
図8に示した反転ベクトルバッファ252のサイズは、各チップ200が扱うスピンの数の最も多い数に対応するようにしてもよい。
【0218】
また、上述した実施の形態では、管理装置100が各チップ200に関する更新情報を生成し、更新情報の圧縮処理を行うとしたが、このような構成に限られない。各チップ200が、当該チップ200に関する更新情報を生成し、更新情報の圧縮処理を行い、圧縮された更新情報を、他のチップ200に送信してもよい。この場合、各チップ200が、
図5に示した管理装置100の構成要素を有してもよい。そして、各チップ200が他のチップ200と互いに通信を行うようにしてもよい。一方、管理装置100が設けられることによって、上述したように、イジングモデル全体のエネルギーの遷移及びスピン状態の遷移を観測することができる。また、管理装置100が設けられることによって、上述したように、イジングモデル全体におけるアニーリングアルゴリズムで使用されるアニーリングパラメータを制御することができる。
【0219】
また、上述した実施の形態では、実行されるアニーリングアルゴリズムがSCAであるとしたが、実行されるアニーリングアルゴリズムの種類(アニーリングポリシー)は、SCAに限定されない。この場合、反転スピン選択回路260は、自身のチップ#kが扱うスピンの更新処理については、アニーリングポリシーに応じた処理を行うようにしてもよい。すなわち、アニーリングポリシーがSA及びDAである場合、反転スピン選択回路260は、反転可能なスピン(反転可否Δj=1のスピンj)をランダムに1つ選択してもよい。また、アニーリングポリシーがRPAである場合、反転スピン選択回路260は、自身のチップ#kが扱うスピンの更新処理については、反転可能なスピン(反転可否Δj=1のスピンj)から更新試行率εに応じた割合の数のスピンを選択するようにしてもよい。
【0220】
上述の例において、プログラムは、コンピュータに読み込まれた場合に、実施形態で説明された1又はそれ以上の機能をコンピュータに行わせるための命令群(又はソフトウェアコード)を含む。プログラムは、非一時的なコンピュータ可読媒体又は実体のある記憶媒体に格納されてもよい。限定ではなく例として、コンピュータ可読媒体又は実体のある記憶媒体は、random-access memory(RAM)、read-only memory(ROM)、フラッシュメモリ、solid-state drive(SSD)又はその他のメモリ技術、CD-ROM、digital versatile disk(DVD)、Blu-ray(登録商標)ディスク又はその他の光ディスクストレージ、磁気カセット、磁気テープ、磁気ディスクストレージ又はその他の磁気ストレージデバイスを含む。プログラムは、一時的なコンピュータ可読媒体又は通信媒体上で送信されてもよい。限定ではなく例として、一時的なコンピュータ可読媒体又は通信媒体は、電気的、光学的、音響的、またはその他の形式の伝搬信号を含む。
【符号の説明】
【0221】
1 アニーリング処理システム
100 管理装置
110 スピン情報格納部
120 スピン情報受信部
130 更新情報生成部
140 更新情報圧縮部
150 更新情報送信部
160 スピン情報更新部
170 スピン配列出力部
200 チップ
202 データメモリ
204 命令メモリ
210 制御回路
212 アニーリング制御部
214 初期化フェーズ処理部
216 アニーリングフェーズ処理部
218 同期フェーズ処理部
220 外部インタフェース
224 ゼロランレングスデコーダ
230 アニーリング実行部
232 重みメモリ
234 重みデコーダ
240 瞬間磁場計算回路
242 瞬間磁場バッファ
250 反転ベクトル計算回路
252 反転ベクトルバッファ
252a バッファA
252b バッファB
254 暫定更新スピンバッファ
260 反転スピン選択回路
262 スピン情報バッファ
264 スピン情報デコーダ