【実施例1】
【0020】
<有向グラフに拡張したイジングモデル>
本実施の形態では、イジングモデルを拡張した、以下の(2)式で示されるモデルを、これ以降イジングモデルと呼ぶものとする。
【0021】
【数2】
……(2)
【0022】
(1)式で示したイジングモデルとの違いは、(2)式では有向グラフで示されるような相互作用が許されることにある。一般的にイジングモデルはグラフ理論では無向グラフとして描画することができる。それは、イジングモデルの相互作用は、i番目スピンからj番目スピンへの相互作用係数J
i,jとj番目スピンからi番目スピンへの相互作用係数J
j,iとを区別していないことによる。
【0023】
本発明はイジングモデルを拡張し、J
i,jとJ
j,iとを区別しても適用できるため、本実施の形態でも有向グラフ化したイジングモデルを取り扱う。なお、無向グラフのイジングモデルを有向グラフのイジングモデルで取り扱う場合には、単にJ
i,jとJ
j,iとの双方向に同じ相互作用係数を定義することで可能である。この場合、同じモデルでも(1)式のエネルギー関数に対して(2)式のエネルギー関数ではエネルギーの値が2倍になる。
【0024】
<情報処理装置の全体構成>
図1は、本実施の形態による情報処理装置の全体構成を示す。この情報処理装置1はパーソナルコンピュータやワークステーション又はサーバなどから構成され、システムバス2を介して構成されたCPU3、メモリ4、記憶装置5及び1つ又は複数のマルチイジングチップ6を備える。
【0025】
記憶装置5には、本情報処理装置1が解くべき単一の問題の問題データ7が格納され、メモリ4には、問題変換プログラム8及びマルチイジングチップ制御プログラム9が格納される。問題変換プログラムは、かかる問題を必要に応じて単一のイジングモデル形式の問題に変換すると共に、かかるイジングモデル形式の問題を必要に応じて複数の部分問題に分割し、これらの部分問題を個々のマルチイジングチップ6にそれぞれ振り分けるプログラムである。またマルチイジングチップ制御プログラム9は、個々のマルチイジングチップ6において対応する部分問題を解くための制御を行うためのプログラムである。なお部分問題は、それ自体が他の部分問題と独立した単一のイジングモデル形式の問題である。
【0026】
マルチイジングチップ6は、イジングモデルの基底状態探索を行う専用ハードウェアであり、例えば画面描画処理のための専用ハードウェアであるGPU(Graphics Processing Unit)のように、情報処理装置1に装着する拡張カードの形態を取る。
【0027】
図2は、情報処理装置1のマルチイジングチップ6の構成例を示すブロック図である。マルチイジングチップ6は、
図2に示すように、インタフェース10、イジングチップ群11及び制御部12を備えて構成され、インタフェース10及びシステムバス2(
図1)を介してCPU3(
図1)との間でコマンドや情報の送受を行う。
【0028】
イジングチップ群11は、それぞれがイジングモデルの基底状態探索を行う専用のハードウェアである複数のイジングチップ13から構成される。イジングチップ13間はチップ間配線14により接続されており、このチップ間配線14を介してイジングチップ13同士が必要な情報を送受する。
【0029】
制御部12は、イジングチップ群11を構成する各イジングチップ13を制御する機能を有し、コントローラ15、相互作用クロック生成器16及び乱数発生器17を備えて構成される。
【0030】
コントローラ15は、マルチイジングチップ6全体の動作制御を司るプロセッサであり、情報処理装置1のCPU3(
図1)からシステムバス2(
図1)及びインタフェース10を介して与えられるコマンドに従ってイジングチップ群11を構成する各イジングチップ13の動作や、相互作用クロック生成器16及び乱数発生器17を制御する。
【0031】
また相互作用クロック生成器16は、後述する相互作用クロックを生成するクロック生成器である。相互作用クロック生成器16により生成された相互作用クロックは、イジングチップ群11を構成する各イジングチップ13にそれぞれ与えられる。乱数発生器17は、後述のように各イジングチップ13において実行される基底状態探索が局所最適解に陥るのを防止するためのランダムなビット列からなる乱数を発生させる。乱数発生器17により発生された乱数は、各イジングチップ13にそれぞれ与えられる。
【0032】
<イジングチップの構成>
図3は、イジングチップ13の概略構成を示す。この
図3に示すように、イジングチップ13は、スピンアレイ20、I/O(Input/Output)アドレスデコーダ21、I/Oドライバ22、相互作用アドレスデコーダ23及びチップ間接続部24を備えて構成される。本実施の形態では、イジングチップ13は現在広く用いられているCMOS(Complementary Metal-Oxide Semiconductor)集積回路として実装されていることを想定して説明するが、他の固体素子でも実現可能である。
【0033】
イジングチップ13は、スピンアレイ20にリード/ライトを行うためのSRAM互換インタフェース30としてアドレスバス31、データバス32、R/W制御線33及びI/Oクロック線34を備える。またイジングチップ13は、イジングモデルの基底状態探索の制御を行うための相互作用制御インタフェース35として、相互作用アドレス線36及び相互作用クロック線37をも備える。
【0034】
イジングチップ13では、イジングモデルのスピンσi、相互作用係数J
i,j及び外部磁場係数h
iをすべてスピンアレイ20内のメモリセルに記憶する情報で表現する。スピンσ
iの初期状態の設定や基底探索完了後の解読み出しはSRAM互換インタフェース30を介して行う。またイジングチップ13では、基底状態を探索すべきイジングモデルをスピンアレイ20に設定するための相互作用係数J
i,j及び外部磁場係数h
iのリード/ライトもSRAM互換インタフェース30を介して行う。
【0035】
そのため、スピンアレイ20内のスピンσ
i、相互作用係数J
i,j及び外部磁場係数h
iにはアドレスが付与されている。そしてイジングチップ13にスピンσ
i、相互作用係数J
i,j又は外部磁場係数h
iをリード/ライトする場合、対応するアドレスがコントローラ15からアドレスバス31を介してI/Oアドレスデコーダ21に与えられ、これらスピンσ
i、相互作用係数J
i,j及び外部磁場係数h
iのリード/ライトを制御するR/W制御信号がコントローラ15からR/W制御線33を介してI/Oドライバ22に与えられる。
【0036】
かくしてI/Oアドレスデコーダ21は、アドレスバス31を介して与えられたアドレスに基づいてスピンアレイ20のワード線をアクティベートし、I/Oドライバ22は、R/W制御線33を介して与えられたR/W制御信号に基づいてスピンアレイ20内の対応するビット線を駆動する。これによりデータバス32を介して与えられたスピンσ
iの初期値や、相互作用係数J
i,j及び外部磁場係数h
iの設定値がスピンアレイ20に設定され、又は、基底探索完了後の解がスピンアレイ20から読み出されてデータバス32を介して外部に出力される。
【0037】
なお、SRAM互換インタフェース30を構成するアドレスバス31、データバス32及びR/W制御線33は、I/Oクロック線34を介して制御部12からイジングチップ13に与えられるI/Oクロックに同期して動作する。ただし、本発明においてインタフェースが同期式である必要はなく、非同期式のインタフェースでも良い。本実施の形態では、同期式のインタフェースであるという前提で説明を行う。
【0038】
また、イジングチップ13は、基底状態探索を行うために、スピンアレイ20の内部でスピン間の相互作用を実現する。この相互作用を外部から制御するのが相互作用制御インタフェース35である。具体的に、イジングチップ13は、コントローラ15から与えられる相互作用を行うスピン群を指定するアドレスを相互作用アドレス線36を介して入力し、相互作用クロック線37を介して入力される相互作用クロック生成器16からの相互作用クロックに同期して相互作用を行う。相互作用アドレスデコーダ23は、相互作用アドレス線36を介して与えられたアドレスに基づいてスピンアレイ20に対する相互作用係数J
i,j及び外部磁場係数h
iのリード/ライトを行う。
【0039】
加えて、イジングチップ13は、後述のようにイジングモデルのスピンを表現するメモリセルの値を確率的に反転させる乱数を注入するための乱数注入線38を有している。
図2について上述した乱数発生器17により発生された乱数は、この乱数注入線38を介してスピンアレイ20に与えられる。
【0040】
チップ間接続部24は、チップ間配線4を用いて、隣接して配置されたイジングチップ13との間で必要なスピンσ
iの値を送受する際のインタフェースとして機能する。チップ間接続部24の詳細については後述する。
【0041】
<スピンアレイの構成>
スピンアレイ20は、1個のスピンσ
i並びにそれに付随する相互作用係数J
i,j及び外部磁場係数h
iの保持と、基底状態探索演算とを実現するスピンユニットを基本構成単位として、スピンユニットを多数個並べた構成を有する。
【0042】
図4は、スピンユニット40を複数個並べることで、3次元格子状のトポロジを持つイジングモデルを構成する例を示している。すなわち、スピンアレイ20の機能を概念的に示している。
図4の例は、3(X軸方向)×3(Y軸方向)×2(Z軸方向)の大きさの3次元格子である。座標軸の定義は図示した通り、図面右方向をX軸、図面下方向をY軸、図面奥行き方向をZ軸としているが、この座標軸は実施の形態の説明上便宜的に必要なだけであり、本発明とは関係しない。3次元格子以外のトポロジ、例えばツリー状のトポロジなどを利用する場合には、座標軸とは別にツリーの段数等で表現することになる。
図4の3次元格子状のトポロジにおいて、スピン間の相互作用をグラフとしてとらえると、最大で次数5のスピン(頂点)が必要となる。なお、外部磁場係数の接続も含めて考えると、最大で次数6が必要となる。
【0043】
図4に示す1個のスピンユニット40には、隣接するスピン(例えば隣接するスピンが5個の場合σ
j、σ
k、σ
l、σ
m、σ
n)の値が入力される。このためスピンユニット40は、これら入力する隣接するスピンの値を保持するためのメモリセルを有している。またスピンユニット40は、かかるスピンの値に加え、外部磁場係数と、上述した隣接するスピンとの相互作用係数(隣接する5スピンとの相互作用係数J
j,i、J
k,i、J
l,i、J
m,i、J
n,i)とをそれぞれ保持するメモリセルをも有している。
【0044】
ところで、先に述べたようにイジングモデルは一般的に無向グラフで表現される相互作用を有している。上述した(1)式では、相互作用を表わす項として、J
i,j×σ
i×σ
jがあるが、これはi番目スピンからj番目スピンへの相互作用を示している。この場合、一般的なイジングモデルではi番目スピンからj番目スピンへの相互作用と、j番目スピンからi番目スピンへの相互作用を区別することはない。つまり、J
i,jとJ
j,iは同一である。しかし、本実施の形態のイジングチップ13では、先に述べたようにこのイジングモデルを有向グラフに拡張し((2)式)、i番目スピンからj番目スピンへの相互作用と、j番目スピンからi番目スピンへの相互作用を非対称にすることを実現している。これにより、モデルの表現能力が高まり、多くの問題をより小規模のモデルで表現することが可能になる。
【0045】
そのため、1個のスピンユニットをi番目スピンσ
iと考えた時に、このスピンユニット40が保持する相互作用係数であるJ
j,i、J
k,i、J
l,i、J
m,i、J
n,iは、隣接するj番目、k番目、l番目、m番目、n番目のスピンσ
j、σ
k、σ
l、σ
m、σ
nから、i番目スピンσ
iへの相互作用を決めるものである。このことは、
図4において、スピンユニット40に含まれている相互作用係数が対応する矢印(相互作用)が、図示されているスピンユニット40の外部のスピンから、スピンユニット40の内部のスピンに向かっていることに対応している。
【0046】
<スピンユニットの構成>
図5はスピン値変化情報を出力するスピンユニットの構成を示すブロック図である。
【0047】
図6はメモリとしてのスピンユニットの構成を示すブロック図である。
【0048】
スピンユニット40の一構成例を
図5及び
図6を用いて説明する。スピンユニット40は2つの側面をもっており、便宜上、
図5及び
図6に分けて説明するが、1個のスピンユニット40は
図5及び
図6の構成の双方を含む。
図5はスピンユニット40間の相互作用を実現するための回路を示し、
図6はスピンユニット40が有するメモリセルN,IS0,IS1,IU0,IU1,IL0,IL1,IR0,IR1,ID0,ID1,IF0,IF1にイジングチップ13外からアクセスするためのインタフェースであるビット線41とワード線42とに注目してスピンユニット40の構成を図示したものである。
【0049】
スピンユニット40は、イジングモデルのスピンσ
i、相互作用係数J
j,i〜J
n,i及び外部磁場係数h
iを保持するために、複数の1ビットのメモリセルN,IS0,IS1,IU0,IU1,IL0,IL1,IR0,IR1,ID0,ID1,IF0,IF1を備えている。なお、メモリセルIS0及びIS1、メモリセルIU0及びIU1、メモリセルIL0及びIL1、メモリセルIR0及びIR1、メモリセルID0及びID1、並びに、メモリセルIF0及びIF1は、それぞれ2個1組で役割を果たすものであるため、適宜、これらをそれぞれまとめてメモリセル対ISx,IUx,ILx,IRx,IDx又はIFxと略記する(
図7参照)。
【0050】
ここで、スピンユニット40はi番目のスピンを表現するものとして説明を行う。メモリセルNはスピンを表現するためのメモリセルであり、スピンの値を保持する。スピンの値はイジングモデルでは+1/−1(+1を上、−1を下とも表現する)であるが、これをメモリセルが保持可能な2値である0/1に対応させる。例えば、+1を1、−1を0に対応させる。
【0051】
図7を用いて、スピンユニット40が有するメモリセル対ISx、IUx、ILx、IRx、IDx及びIFxと、
図4に示したイジングモデルのトポロジとの対応関係を示す。メモリセル対ISxは外部磁場係数を記憶する。また、メモリセル対IUx,ILx,IRx,IDx及びIFxは、それぞれ相互作用係数を記憶する。具体的には、メモリセル対IUxは上側のスピン(Y軸方向で−1)、メモリセル対ILxは左側のスピン(X軸方向で−1)、メモリセル対IRxは右側のスピン(X軸方向で+1)、メモリセル対IDxは下側のスピン(Y軸方向で+1)、メモリセル対IFxは奥行き方向に接続するスピン(Z軸方向で+1ないしは−1)との相互作用係数をそれぞれ記憶する。
【0052】
また、イジングモデルを有向グラフとして捉えた場合に、あるスピンから見ると他のスピンが自スピンに及ぼす影響の係数を持つことになる。自スピンが他のスピンに与える影響の係数は、それぞれの他のスピンに属する。すなわち、このスピンユニット40は最大で5個のスピンと接続される。本実施の形態のイジングチップ13では、外部磁場係数及び相互作用係数として+1/0/−1の3値に対応する。そのため、外部磁場係数及び相互作用係数を表わすためには、それぞれ2ビットのメモリセルが必要となる。
【0053】
メモリセル対ISx,IUx,ILx,IRx,IDx及びIFxは、
図5および
図6に示すように、末尾の数字が0と1の2つのメモリセル(例えばメモリセル対ISxの場合にはメモリセルIS0及びIS1)の組合せで、+1/0/−1の3値を表現する。例えば、メモリセル対ISxの場合には、メモリセルIS1で+1/−1を表現し、メモリセルIS1が保持する値が1の時は+1、メモリセルIS1が保持する値が0の時には−1を表す。
【0054】
これに加えて、メモリセルIS0が保持する値が0の時には外部磁場係数を0と見なし、メモリセルIS0が保持する値が1の時にはメモリセルIS1が保持する値で決まる+1/−1のいずれかを外部磁場係数とする。外部磁場係数が0の時は外部磁場係数をディセーブルしていると考えれば、メモリセルIS0に保持された値は外部磁場係数のイネーブルビットであると言うことができる(IS0=1の時に、外部磁場係数がイネーブルされる)。相互作用係数を記憶するメモリセル対IUx,ILx,IRx,IDx及びIFxも同様に係数とビットの値とを対応させている。
【0055】
スピンユニット40内のメモリセルN,IS0,IS1,IU0,IU1,IL0,IL1,IR0,IR1,ID0,ID1,IF0及びIF1は、それぞれイジングチップ13の外部からリード/ライト可能でなければならない。そのために、
図6に示すように、スピンユニット40はビット線41とワード線42とをそれぞれ有している。
【0056】
図8は、メモリとしてのスピンアレイ20のレイアウトを示す平面図である。そしてイジングチップ13では、
図8に示すように、スピンユニット40が半導体基板上にタイル状に並べられてビット線41とワード線42とが接続されており、I/Oアドレスデコーダ21とI/Oドライバ22とでこれらのスピンユニット40を駆動、制御又は読み出しすることにより、一般的なSRAM(Static Random Access Memory)と同様にスピンユニット40内のメモリセルをイジングチップ13のSRAM互換インタフェース30でリード/ライトすることができるようになされている。
【0057】
図9は、
図8の格子上の座標とスピンユニット番号の対応を示す概念図である。
図8上で表現されているスピンユニット(NxyzというようにX軸、Y軸及びZ軸上の位置によって符号を付与している)が、3次元格子のトポロジでどの頂点に対応するかが
図9に示される。3×3×2の3次元格子頂点を2次元平面上に配置するために、X軸方向の格子頂点配列の間隔にZ軸方向の格子頂点配列の各格子頂点を挿入するように配置している。すなわち、
図9の2次元平面上でのY軸方向(図面下側がY軸の正方向)にはNx0z、Nx1z、Nx2zというように配置されるが、X軸方向(図面右側がX軸の正方向)にはN0y0、N0y1、N1y0、N1y1、N2y0、N2y1というように、Z軸方向座標が0と1のスピンユニットが交互に配置される。
【0058】
図5を再度参照する。本実施例では、スピンユニット40は同時にスピンの更新を行うために、相互作用を計算して次のスピンの状態を決定するための回路を、スピンユニット40毎に独立して持っている。
図5では、スピンユニット40は、外部とのインタフェースとして、信号線NU,NL,NR,ND,NF,ON,DIFFN及びRNDを有する。
【0059】
図5に見られる信号線ONは、当該スピンユニット40のスピンの値を他のスピンユニット40(
図4のトポロジで隣接するユニット)に出力するインタフェースである。信号線DIFFNは、相互作用を計算した結果、計算前のスピンの値Nと次のスピンの状態に変化があったかどうかを出力する。計算前のスピンの値(メモリセルNの値)と、次のスピンの状態の計算結果であるXOR回路45の出力とをXOR回路200に入力することでスピンの状態の変化を検出する。変化があった場合は1が出力され、変化がなかった場合は0が出力される。
【0060】
信号線NU,NL,NR,ND及びNFは、それぞれ他のスピンユニット40(
図4のトポロジで隣接するユニット)が保持するスピンの値を入力するためのインタフェースである。信号線NUは上側のスピン(Y軸方向で−1)、信号線NLは左側のスピン(X軸方向で−1)、信号線NRは右側のスピン(X軸方向で+1)、信号線NDは下側のスピン(Y軸方向で+1)、信号線NFは奥行き方向に接続するスピン(Z軸方向で+1ないしは−1)からの入力である。
【0061】
スピンユニット40では隣接スピンとの間でエネルギーを最小化するようにスピンの次状態を決定するが、それは隣接スピンと相互作用係数の積、及び、外部磁場係数を見たときに、正の値と負の値のどちらが支配的か判断することと等価である。例えば、i番目スピンσ
iに、スピンσ
j、σ
k、σ
l、σ
m及びσ
nが隣接しているとして、スピンσ
iの次状態は以下のように決まる。
【0062】
まず、たとえば隣接スピンの値はσ
j=+1、σ
k=−1、σ
l=+1、σ
m=−1、σ
n=+1とし、相互作用係数はJ
j,i=+1、J
k,i=+1、J
l,i=+1、J
m,i=−1、J
n,i=−1、外部磁場係数h
i=+1とする。このとき、相互作用係数と隣接スピンの積、及び、外部磁場係数をそれぞれ並べると、σ
j×J
j,i=+1、σ
k×J
k,i=−1、σ
l×J
l,i=+1、σ
m×J
m,i=+1、σ
n×J
n,i=−1、h
i=+1となる。外部磁場係数は、常に値が+1のスピンとの相互作用係数と読み替えて良い。
【0063】
ここで、i番目のスピンと隣接スピンとの間での局所的なエネルギーは、前述した係数にそれぞれi番目スピンの値を乗じて、さらに符号を反転させたものになる。例えば、j番目スピンとの間での局所的なエネルギーは、i番目スピンを+1とした時には−1、i番目スピンを−1としたときには+1となるので、i番目スピンを+1にするほうが、ここでの局所的なエネルギーを小さくする方向に働く。
【0064】
このような局所的なエネルギーを全ての隣接スピン間と外部磁場係数について考えたときに、i番目スピンを+1/−1のどちらにしたほうがエネルギーを小さくできるかを計算する。これは、先程示した相互作用係数及び隣接スピンの積と、外部磁場係数とをそれぞれ並べたものにおいて、+1と−1のどちらが多いか数えれば良い。先程の例では、+1が4個、−1が2個である。仮に、i番目スピンを+1とすると、エネルギーの総和は−2、i番目スピンを−1とするとエネルギーの総和は+2になる。よって、+1の個数が多い時にはi番目スピンの次状態を+1とし、−1の個数が多い時にはi番目スピンの次状態を−1にするという多数決で、エネルギーを最小化するi番目スピンの次状態を決定することができる。
【0065】
図5に示した論理回路46は、上述の相互作用を行うための回路である。まず、隣接スピンの状態と、相互作用係数の+1/−1を示すメモリセルIU1,IL1,IR1,ID1,IF1が保持する値との排他的論理和の否定(XNOR)をXNOR回路47で求める。これにより、その相互作用だけを見た時にエネルギーを最小化するスピンの次状態を計算することができる(+1は1、−1は0にエンコードされているものとする)。
【0066】
もし、相互作用係数が+1/−1だけであれば、XNOR回路47の出力のうち+1/−1のどちらが多いかを多数決論理回路44において多数決論理で判定すればスピンの次状態を決定することができる。外部磁場係数に関しては、常に状態+1のスピンとの相互作用係数に相当するものと考えれば、単に外部磁場係数の値がスピンの次状態を決定する多数決論理回路44に入力すべき値となる。
【0067】
次に、係数0の実現方法について考える。n入力の多数決論理f(I1,I2,I3,……,In)があるとき、以下の命題は真であると言える。まず、入力I1,I2,I3,……,Inの複製I’1,I’2,I’3,……,I’nがあるとする(任意のkについて、Ik=I’kである)。このとき、f(I1,I2,I3,……,In)の出力は、複製もあわせて入力したf(I1,I2,I3,……,In、I’1,I’2,I’3,……,I’n)と等しい。つまり、各入力変数をそれぞれ2個ずつ入れても、出力は不変である。さらに、入力I1、I2、I3,……,Inの他に、もう一つの入力Ixと、その反転!Ixがあるとする。このとき、f(I1,I2,I3,……,In,Ix,!Ix)の出力は、f(I1,I2,I3,……,In)と等しい。つまり、入力変数とその反転を入力すると、多数決においてその入力変数の影響をキャンセルするように働く。多数決論理のこの性質を利用して係数0を実現する。
【0068】
具体的には、
図5に示すように、XOR回路48を利用して、係数のイネーブルを決めるビット(ビットセルIS0,IU0,IL0,IR0,ID0及びIF0にそれぞれ保持されたビット)の値により、多数決論理回路44に、先に述べたスピン次状態の候補となる値の複製か、その反転を同時に入力する。例えば、メモリセルIS0が保持するビットの値が0の場合、メモリセルIS1が保持するビットの値と、メモリセルIS1が保持するビットの値を反転させた値が同時に多数決論理回路44に入力されるので、外部磁場係数の影響は無い(外部磁場係数が0に相当する)ことになる。また、メモリセルIS0が保持するビットの値が1の場合には、メモリセルIS1が保持するビットの値と、その値と同じ値(複製)が同時に多数決論理回路44に入力されることになる。
【0069】
上述したスピン間の相互作用によるエネルギー最小化で、適用されたイジングモデルの基底状態探索を実現することができるが、これだけでは局所最適解に陥ってしまう可能性がある。基本的に、エネルギーを小さくする方向の動きしかないため、一旦局所最適解に陥るとそこから抜け出すことができず、大域最適解に到達しない。そのため、局所最適解から脱出するための作用として、スピンを表現するメモリセルの値を確率的に反転されるために、スピンユニット40はインタフェースとしてRND線49を有する。
【0070】
そしてスピンユニット40には、上述のように乱数発生器17(
図2)から乱数注入線38(
図3)を介してスピンアレイ20(
図3)に与えられた乱数がこのRND線49を介して与えられ、この乱数がXOR回路45に入力することで、スピンの値が確率的に反転される。
【0071】
なお、
図5に示したスピンユニット40のインタフェースであるNU,NL,NR,ND,NFのスピンユニット40間の配線例を
図10に示す。この
図10は、「Nxyz」というある1個のスピンユニット40に注目したときに、
図4に示すようなトポロジを
図8のようなスピンユニット配置で実現するために必要な配線を示している。このような配線をスピンユニット40ごとに行うことで、
図4のトポロジを実現することができる。
【0072】
<マルチイジングチップ内におけるイジングチップ間の配線方法>
次に、マルチイジングチップ6(
図1)内におけるイジングチップ13(
図2)間の配線方法について説明する。
【0073】
たとえば並列化を進めるため、単一のイジングチップ13に多数のスピンユニット40を搭載しようとすると、イジングチップ13のチップサイズが増大し、コスト増につながる。このためマルチイジングチップ6に多数のスピンユニット40を搭載するに際しては、マルチイジングチップ6に複数のイジングチップ13を実装し、これらをチップ間配線14により接続する方法がコスト上昇を抑える上で効果的である。
【0074】
この場合、イジングチップ13の端部に設けられたスピンユニット40と、他のイジングチップ13内の対応するスピンユニット40との間で、
図10について上述したパターンでの配線を施す必要がある。このために、例えば
図11に示すように、隣接する各イジングチップ13のチップ端部にそれぞれ設けられた対応するスピンユニット40同士を、チップ間接続部24(
図3)の一部を構成する接続部50とチップ間配線14とを介して接続する必要がある。
【0075】
なお、ここで言う「チップ端部に設けられたスピンユニット40」とは、
図4のイジングモデルで隣接するスピンユニット40Aの値を受け取るスピンユニット40Bが、スピンユニット40Aが設けられたイジングチップ13Aと異なるイジングチップ13Bに設けられたスピンユニットである場合、そのスピンユニット40Bを指す。
【0076】
隣接するイジングチップ13のチップ端部に設けられたすべての対応するスピンユニット40同士をそれぞれ接続するよう接続部50やチップ間配線14(
図2)を形成すると、接続部50の数やチップ間配線14の配線量が大きくなり過ぎるためにコストの上昇や実装上の困難が生じる。
【0077】
図11は、本実施例のチップ間接続の概略を示す図である。本実施例においては、イジングチップ13Aのチップ端部に設けられた各スピンユニットの値を隣接するイジングチップ13Bに伝送する際、
図11に示すように、接続部50を複数のスピンユニット(
図11の例では3つのスピンユニット)で共有した上で、値に変化があったスピンユニットのスピン値のみを伝送することで、基底状態の精度を大きく低下させることなく、隣接するイジングチップ13間のチップ間配線の配線量を低減させる。なお、接続部50をいくつのスピンユニットで共有するかは重要ではない。
【0078】
図12は、イジングチップ13Aとイジングチップ13Bの間でスピン値の伝送を行う部分の詳細構成を示す。説明の便宜上、12左側のイジングチップ13Aには送信側接続部62のみを、
図12右側のイジングチップ13Bには受信側接続部63のみをそれぞれ図示して一方向の伝送のみ示しているが、実際にはそれぞれのイジングチップ13が接続部50として送信側接続部62と受信側接続部63の両方を備えていることは
図11に示した通りである。
【0079】
イジングチップ13Aの送信側接続部62は、OR回路70と調停器71とマルチプレクサ72とドライバ75から構成される。チップ端部のスピンユニット40Aの出力のうち、スピン値が変動したことを示す信号線DIFFNの値はOR回路70と調停器71に入力される。先に説明したように、スピンの状態に変化があった場合はDIFFNの値として1が出力され、変化がなかった場合は0が出力されている。
【0080】
このとき、いずれか1つの信号線DIFFNの値が1であれば有効なスピン値を伝送することを示す信号線TXVALIDを1にする。調停器71は信号線DIFFNの値が1であるスピンユニットが複数あった場合に、チップ間配線14を介してスピン値を伝送すべきスピンユニット40Aを一つ選択し、その位置を信号線SPINADRに出力する。調停器71の構成は後述する。
【0081】
イジングチップ端部のスピンユニット40Aの出力のうち、スピンユニット40Aの値を示す信号線ONの値はマルチプレクサ72に入力される。マルチプレクサ72の入力を選択する信号は調停器71の出力を用いる。これにより、調停器71が選択したスピンユニット40のスピン値が信号線SPINVALに出力される。ドライバ75は信号線TXVALID、SPINADR、SPINVALの値を、チップ間配線14を介して隣接するイジングチップ13Bに伝送する。
【0082】
受信側接続部63は、レシーバ76とデコーダ73とデマルチプレクサ74とAND回路78および1ビットの値を記録するバッファメモリ77から構成される。レシーバ76はチップ間配線14を介して隣接するイジングチップ13Aの送信側接続部62から伝送された信号を受信する。信号線TXVALIDの値はAND回路78に入力される。信号線SPINADRの値はデコーダ73に入力され、伝送元のスピンユニット40の位置を示す信号線のみに値1を出力する。デコーダ73の出力はAND回路78に入力される。また、信号線SPINADRの値はデマルチプレクサ74の選択信号として入力される。信号線SPINVALの値はデマルチプレクサ74に入力され、伝送元のスピンユニット40の位置を示す信号線のみに信号線SPINVALを介して入力された値を出力する。
【0083】
AND回路78及びデマルチプレクサ74の出力はバッファメモリ77にそれぞれ入力される。AND回路78の出力はバッファメモリ77のイネーブル信号として入力され、デマルチプレクサ74の出力はバッファメモリ77に記録する値として入力される。これにより、有効な値が伝送されていることを示す信号線TXVALIDの値が1かつ、デコーダ73の出力が1となる位置のバッファメモリ77のみがイネーブル状態となるため、伝送元のスピンユニット40Aに対応する位置のスピンユニット40Bに接続されているバッファメモリ77のみ値が更新されることになる。
【0084】
なお、ここでドライバ75とレシーバ76は例えば、一般的に用いられる伝送規格であるLVDSなどを用いて構成することができるが、これに限るものではない。
【0085】
図13に調停器71の構成例を示す。調停器71はカウンタ80とシフタ81とエンコーダ82と減算器83から構成される。調停器71はスピンユニット40のスピンの値に変化があったことを示す複数の信号線DIFFNの値を入力として、値が1である信号線を一つ選択してその信号線の位置を出力する機能を持つ。このとき、複数のスピンユニット40の値が変化した場合に、選択されるスピンユニット40に偏りが出ないようにすることが望ましい。カウンタ80は相互作用クロックに同期して毎サイクルカウントアップされ、信号線DIFFNの本数−1までカウントすると0に戻る。カウンタ80の値に応じてシフタ81で入力信号線の値をバレルシフトし、エンコーダ82で値が1である信号線の位置を出力する。エンコーダ82の出力から減算器でカウンタの値を減算することで、元の入力信号において値が1である信号線の位置を出力する。
【0086】
このようにして、調停器71はスピンの値に変化があったスピンユニット40を選択する優先順位をその都度変更することにより、選択されるスピンユニット40に偏りが出ないようにする。また、選択されるスピンユニット40に偏りが出ないようにするため、このほかにも乱数を用いてランダムにスピンユニットを選択するなどの各種の方法が考えられる。
【0087】
図14に、
図12で示した送信側接続部の動作例を示すタイミングチャートを示す。この例では、送信側接続部に4つのスピンユニットが接続されているものとする。カウンタは調停器71に含まれるカウンタの値を示す。spin0,spin1,spin2,spin3はそれぞれ送信元となるスピンユニット40のスピンの値である。diff0,diff1,diff2,diff3はそれぞれ送信元となるスピンユニット40のスピン値が変化したかどうかを示す値である。TXVALID,SPINADR,SPINVALはそれぞれ
図12で示した送信側接続部62の同名の信号線の値である。
【0088】
時刻1ではdiff1のみが1であるため、SPINADRに1が出力される。時刻2では、diff0,diff3の2本が1であるが、カウンタの値が2であるため、diff2を先頭に値1の信号線の位置を探すため、SPINADRの出力は3となる。時刻5,6,7も同様に、当該時刻のカウンタの値を起点に値が1である信号線の位置を探し、その位置を出力している。一方、時刻4では値が変化したスピンが存在しないため、TXVALIDの値が0となる。この時刻の値は受信側で無視されるため、SPINADR,SPINVALの値は意味を持たないが0を出力するものとしている。
【0089】
図15に受信側スピン値の伝送例を示す。
図14の例で示した送信側接続部62の送信した信号を受信する場合の動作を示している。送信側接続部62が時刻0に送信した値は所定の遅延時間(Dとする)経過後に受信側接続部63に到達するため、
図15のタイミングチャート上段の時刻は時刻Dを起点として記述している。デコーダ0、1、2、3と記載している信号はデコーダ73の出力信号に対応している。デコーダは、信号線SPINADRの値に対応する出力のみが1となる。例えば時刻D+1では、信号線SPINADRの値が1であるので、デコーダ1のみが1となり、デコーダ0、2,3は0となる。
【0090】
デマルチプレクサ0,1,2,3と記載している信号はデマルチプレクサ74の出力信号に対応している。信号線SPINVALの値を対応する信号線に出力する。なお、この例では選択信号に対応しない出力は0としている。例えば時刻D+2では、SPINADRが3でSPINVALが1であるので、デマルチプレクサ3の出力が1となり、デマルチプレクサ0,1,2の出力は0となる。
【0091】
buf0,buf1,buf2,buf3はバッファメモリの記録している値を示す。この例では、送信側接続部から送信された値がバッファメモリに格納されるタイミングを明示するため、送信側接続部から値が到達する前の値は便宜上不定として、灰色の網掛けで記載している。
【0092】
<マルチイジングチップの制御手順>
図16は、本情報処理装置1においてCPU3(
図1)により実行される基底状態探索処理の処理手順を示す。CPU3は、マルチイジングチップ制御プログラム9(
図1)に基づき、この
図16に示す処理手順に従って、必要なマルチイジングチップ6(
図2)のコントローラ15(
図2)を介して当該マルチイジングチップ6内のイジングチップ13を制御することにより、これらのイジングチップ13において基底状態探索を実行させる。
【0093】
なお、CPU3は、各マルチイジングチップ6内のイジングチップ13や、イジングチップ13内のスピンユニット40をマルチイジングチップ6内のコントローラ15(
図2)を介して制御するが、以下においては理解の容易化のため、コントローラ15の存在を無視して説明を行う。
【0094】
CPU3は、ユーザからの指示等によりこの基底状態探索処理を開始すると、まず、問題データ7(
図1)を問題変換プログラム8(
図1)によりイジングモデル形式に変換し、さらに必要に応じて変換後の問題を分割することにより得られた部分問題についての相互作用係数、及び、外部磁場係数を、必要なマルチイジングチップ6の各イジングチップ13内の各スピンユニット40にそれぞれ設定する(SP1)。
【0095】
続いて、CPU3は、各スピンユニットが保持すべきスピンの値を乱数によりそれぞれ決定し、決定したスピンの値となるようにかかるマルチイジングチップ6における各イジングチップ13内の各スピンユニット40のスピンの値を初期化する(SP2)。
【0096】
次いで、CPU3は、予め定められた各マルチイジングチップ6内の乱数発生器17(
図2)が発生する乱数において「1」が出現する確率(以下、これをビット確率と呼ぶ)を設定する(SP3)。本実施の形態の場合、初期時には乱数発生器17が発生する乱数におけるビット確率を高く設定し、その後、段階的にビット確率を下げてゆく。これにより初期時には各スピンユニット40が保持するスピンの値を反転し易くする一方、その後は徐々に当該スピンの値が反転し難く(「0」又は「1」に収束し易く)することができる。このためステップSP3では、上述の各段階におけるビット確率が設定される。
【0097】
続いて、CPU3は、マルチイジングチップ6の相互作用クロック生成器16(
図2)を駆動するなどして各イジングチップ13内の各スピンユニット40における相互作用演算を1回実行させ(SP5)、この後、現在のビット確率について設定された回数分だけ相互作用演算を実行し終えたか否かを判断する(SP6)。そしてCPU3は、この判断で否定結果を得るとステップSP5に戻り、この後、ステップSP5及びステップSP6の処理を繰り返す。
【0098】
そしてCPU3は、やがて現在設定されているビット確率について設定された回数分の相互作用演算を実行し得ることによりステップSP7で肯定結果を得ると、ステップSP4で設定したビット確率毎の相互作用演算をすべて実行し終えたか否かを判断する(SP7)。
【0099】
CPU3は、この判断で否定結果を得ると、ビット確率を現在のビット確率よりも低い予め定められたビット確率に更新すると共に(SP8)、その後実行すべき相互作用演算の回数をそのビット確率について予め定められた回数に更新する(SP9)。そしてCPU3は、ステップSP5に戻り、この後、ステップSP5〜ステップSP9の処理を繰り返す。
【0100】
そしてCPU3は、やがてステップSP4で設定されたビット確率毎の相互作用演算をすべて実行し終えることによりステップSP7で肯定結果を得ると、そのとき対象としているマルチイジングチップ6における各イジングチップ13内の各スピンユニット40がそれぞれ保持するスピンの値を読み出し(SP10)、この後、この基底状態探索処理を終了する。
【0101】
<本実施の形態の効果>
以上のように本実施の形態の情報処理装置1では、マルチイジングチップ6内のイジングチップ13間において値が変化したスピンユニットのみスピン値を伝送する。これに伴ってイジングチップ13間を接続するチップ間配線14の配線量を抑えることができる。また、すべてのスピンユニットのスピン値を、限定されたチップ間配線で時分割で伝送する場合に比べて、高速な伝送が可能となる。従って、本実施の形態によれば、大規模なイジングモデルの基底状態を探索でき、安価かつ容易に製造可能なマルチイジングチップ6を実現できる。