以下の実施の形態においては、便宜上その必要があるときは、複数のセクションまたは実施の形態に分割して説明するが、特に明示した場合を除き、それらは互いに無関係なものではなく、一方は他方の一部または全部の変形例、詳細、補足説明等の関係にある。また、以下の実施の形態において、要素の数等(個数、数値、量、範囲等を含む)に言及する場合、特に明示した場合および原理的に明らかに特定の数に限定される場合等を除き、その特定の数に限定されるものではなく、特定の数以上でも以下でもよい。
さらに、以下の実施の形態において、その構成要素(要素ステップ等も含む)は、特に明示した場合および原理的に明らかに必須であると考えられる場合等を除き、必ずしも必須のものではないことは言うまでもない。同様に、以下の実施の形態において、構成要素等の形状、位置関係等に言及するときは、特に明示した場合および原理的に明らかにそうでないと考えられる場合等を除き、実質的にその形状等に近似または類似するもの等を含むものとする。このことは、上記数値および範囲についても同様である。
以下、実施の形態を図面に基づいて詳細に説明する。なお、実施の形態を説明するための全図において、同一の部材には原則として同一の符号または関連する符号を付し、その繰り返しの説明は省略する。また、以下の実施の形態では、特に必要なとき以外は同一または同様な部分の説明を原則として繰り返さない。
[第1の実施の形態]
第1の実施の形態は、例えばイジングモデルなどのような大規模かつ複雑な相互作用モデルの計算を最適な分割方法で行うことができ、安価かつ容易に製造可能な半導体システムに関する。
<相互作用モデル>
種々の物理現象や社会現象は相互作用モデルで表現することができる。相互作用モデルとは、モデルを構成する複数個のノードと、ノード間の相互作用、さらに必要であればノード毎のバイアスで定義されるモデルである。物理学や社会科学では種々のモデルが提案されているが、いずれも相互作用モデルの一形態であると解釈できる。
また、相互作用モデルの特徴として、ノード間の影響を2個のノード間の相互作用に限定している(2体間の相互作用)ことがあげられる。例えば、宇宙空間にある惑星の力学を考えてみると、惑星というノードの間に万有引力による相互作用がある点で相互作用モデルの一種とも解釈できるが、惑星間の影響は2個の惑星間にとどまらず、3個以上の惑星が互いに影響し合って複雑な挙動を示す(いわゆる3体問題や多体問題と言われる問題になる)。
物理学の世界で代表的な相互作用モデルの例として、イジングモデルをあげることができる。イジングモデルとは+1/−1(ないしは上、下など)の2状態を取るスピンをノードとして、2個のスピン間の相互作用を決める相互作用係数と、個々のスピンに対するバイアスである外部磁場係数でモデルが定義される。
また、生物学の世界では脳をモデル化したニューラルネットワークが相互作用モデルの一例である。ニューラルネットワークは神経細胞のニューロンを模した人工ニューロンをノードとして、人工ニューロン間はシナプス結合という相互作用を持つ。また、各ニューロン毎にバイアスを与える場合もある。
社会科学の世界では、例えば人間のコミュニケーションを考えると、人間というノードと言語や通信で成される相互作用があることは容易に理解できよう。また、各人間には個別にバイアスがあることも想像できる。そのため、人間のコミュニケーションを、相互作用モデルという点で共通なイジングモデル等に模してその特性を明らかにしようという研究もなされている。
以下においては、イジングモデルの基底状態探索を行う半導体システム、およびこの半導体システムを含む情報処理システムの例を説明する。
<イジングモデル>
本実施の形態では、イジングモデルを拡張した、以下の(2)式で示されるモデルを、これ以降イジングモデルと呼ぶものとする。
(1)式で示したイジングモデルとの違いは、(2)式では有向グラフで示されるような相互作用が許されることにある。一般的にイジングモデルはグラフ理論では無向グラフとして描画することができる。それは、イジングモデルの相互作用は、i番目スピンからj番目スピンへの相互作用係数Ji,jとj番目スピンからi番目スピンへの相互作用係数Jj,iとを区別していないことによる。
本実施の形態では、イジングモデルを拡張し、Ji,jとJj,iとを区別しても適用できるため、有向グラフ化したイジングモデルを取り扱う。なお、無向グラフのイジングモデルを有向グラフのイジングモデルで取り扱う場合には、単にJi,jとJj,iとの双方向に同じ相互作用係数を定義することで可能である。この場合、同じモデルでも(1)式のエネルギー関数に対して(2)式のエネルギー関数ではエネルギーの値が2倍になる。
以上を前提に、以降、本実施の形態における半導体システム、およびそれを含む情報処理システムについて説明する。
<半導体システムを含む情報処理システム>
図1は、本実施の形態における半導体システムを含む情報処理システムの全体構成の一例を示したブロック図である。図1に示す情報処理システムにおいて、101はCPU(Central Processing Unit)、102はメモリ、103は記憶装置、104は半導体システム、105はシステムバスである。この情報処理システムは、パーソナルコンピュータやワークステーション又はサーバなどから構成され、システムバス105を介してCPU101、メモリ102、記憶装置103及び複数の半導体システム104が接続される。
CPU101は、情報処理システム全体の動作制御を司るプロセッサである。このCPU101は、演算装置に相当する。またメモリ102は、例えば揮発性の半導体メモリから構成され、各種プログラムを記憶するために利用される。記憶装置103は、例えばハードディスク装置やSSD(Solid State Drive)などから構成され、プログラムやデータを長期間保持するために利用される。
本実施の形態の場合、記憶装置103には、本情報処理システムが解くべきイジング形式の問題データ(計算用データ)が格納される。
半導体システム104は、イジングモデルの基底状態探索を行う専用ハードウェアである。図1では、2つの半導体システム104を図示しているが、1つや3つ以上の場合もあり得る。
<半導体システム>
図2は、半導体システム104の構成の一例と、問題分割の調整機能について示したブロック図である。図2に示すように、半導体システム104は、コントローラ106、システムI/F107、レジスタ108、データ処理部109、クロック生成部110、問題データ格納部111、スピンデータ格納部112、相互作用制御信号生成部127、乱数発生部128、データI/F113、専用バス114及び半導体チップ群115を備えて構成され、システムI/F107及びシステムバス105を介してCPU101との間でコマンドやデータの送受を行う。
半導体チップ群115は、それぞれが単体でイジングモデルの基底状態探索を行う専用のハードウェアである複数の半導体チップ116から構成される。また、半導体チップ116間はチップ間配線117により接続されており、このチップ間配線117を介して半導体チップ116同士が必要な情報を送受する。
システムI/F107は、システムバス105を介して、コマンドやパラメータ値、各種データが入力され、入力されたコマンドやパラメータ値、各種データをレジスタ108やデータ処理部109に転送する。
問題データ格納部111は、イジングモデルの相互作用係数と外部磁場係数を格納するブロックであり、システムI/F107を介して記憶装置103に格納された問題データが転送される。
スピンデータ格納部112は、イジングモデルのスピンの値を格納するブロックであり、システムI/F107を介して記憶装置103に格納されたスピンデータが転送される。
レジスタ108は、例えば図2を例にすると、相互作用係数と外部磁場係数とスピンで表現される問題のサイズを規定する問題設定レジスタ118と、コントローラ106が制御対象とする半導体チップ116のチップ数を規定するチップ数設定レジスタ120と、1チップで対応可能な問題のサイズを規定するチップ仕様設定レジスタ121と、問題分割設定レジスタ129で構成する。本レジスタ値は、システムI/F107を介して設定され、コントローラ106内、例えばデータ処理部109で参照される。
データ処理部109は、アドレス生成部123と、データ生成部124と、展開部125と、データ集計部126で構成され、システムバス105とシステムI/F107を介して、記憶装置103から伝送される問題データを複数の半導体チップ116に展開するための処理を実施する。
詳細は後述するが、アドレス生成部123は、問題設定レジスタ118と、チップ数設定レジスタ120と、チップ仕様設定レジスタ121と、問題分割設定レジスタ129を参照して、問題データ格納部111とスピンデータ格納部112に格納された各データを展開先のチップ毎に読み出すためのアドレスを規定する。
データ生成部124は、指定されたアドレスに対応する問題データを問題データ格納部111から読み出し、スピンデータ格納部112からスピンデータを読み出す。そして展開部125は、半導体チップ116毎のデータ伝送を実現するため、伝送データに対して、伝送先のチップ番号と問題データ/スピンデータの判定信号を付与し、データI/F113に転送する。
データ集計部126は、複数の半導体チップ116で基底状態探索を実施した結果、あるいは途中結果を専用バス114とデータI/F113を介して回収し、探索結果であるスピン値をスピンデータ格納部112に書き込む。なお、データ集計部126では、前述したアドレス生成部123で実現する各データのアドレスと、伝送先であるチップ番号とローカルアドレスの関係の規定に対して逆変換を実施する。つまり、専用バス114を介して入力されるチップ番号、問題データ/スピンデータの判定信号とローカルアドレスをスピンデータ格納部112のアドレスに変換して、スピンデータ格納部112上のスピン値を更新する。
データI/F113は、コントローラ106と半導体チップ群115間でデータを送受信するインタフェースである。例えば、図2で図示はしていないが、バッファを有しており、展開部125から転送された全てのデータが専用バス114を介して半導体チップ群115へ転送されるように制御される。
クロック生成部110は、コントローラ106の外部から入力されるベースクロックCLKを基準に、コントローラ106内部の論理回路を動作させるクロック1と、複数の半導体チップ116を動作させるクロック2と、半導体チップ116間のデータ伝送に使用するクロック3を生成する。
相互作用制御信号生成部127は、半導体チップ116における相互作用動作を実現するためのアドレス信号とクロック信号を生成するブロックである。
乱数発生部128は、半導体チップ116に対して供給されるRND信号を発生させるブロックである。詳細は後述するが、RND信号を使用することで、グラフ問題における局所最適解から脱出し、大域最適解への収束性を向上させる。
専用バス114は、コントローラ106と半導体チップ群115を構成する複数の半導体チップ116が接続され、データ処理部109が生成するルールに従って、複数の半導体チップ116への問題データとスピンデータの展開と、複数の半導体チップ116からのスピンデータの回収を実施する。これにより、半導体チップ116間のデータ伝送も実現する。
なお、半導体システム104において、コントローラ106と複数の半導体チップ116との間の接続には、専用バス114に代えて、スイッチを用いることも可能である。
<半導体チップの構成>
図3は、半導体チップ116の構成の一例を示したブロック図である。図3に示す半導体チップ116において、401はI/F、402はチップ間伝送I/F、403はレジスタ、404はメモリコントローラ、405はスピンアレイ、406は相互作用I/F、407は相互作用アドレスデコーダ、408はチップ間伝送部コントローラ、410は送信用バッファ、411は受信用バッファである。なお、本実施の形態では、半導体チップ116は現在広く用いられているCMOS(Complementary Metal-Oxide Semiconductor)集積回路として実装されていることを想定して説明するが、他の固体素子であっても構わない。
I/F401は、半導体チップ116が専用バス114と接続されるブロックであり、コントローラ106と問題データやスピンデータを送受信する際のインタフェースである。
半導体チップ116においては、スピンアレイ405はSRAMで構成される。したがって、メモリコントローラ404はSRAMコントローラとして動作する。より具体的に言うと、イジングモデルのスピンσi、相互作用係数Ji,j及び外部磁場係数hiをすべてスピンアレイ405内のメモリセルに記憶する情報で表現する。スピンσiの初期状態の設定や基底状態探索完了後の解の読み出しはメモリコントローラ404を介して行う。
また、半導体チップ116では、基底状態を探索すべきイジングモデルをスピンアレイ405に設定するための相互作用係数Ji,j及び外部磁場係数hiのリード/ライトもメモリコントローラ404を介して実施する。そのため、スピンアレイ405内のスピンσi、相互作用係数Ji,j及び外部磁場係数hiにはアドレスを付与する。そして、スピンσi、相互作用係数Ji,j又は外部磁場係数hiをリード/ライトする場合、メモリコントローラ404はアドレス指定とR/W(リード/ライト)制御信号を出力し、データバスを介して読み書きする。
また、半導体チップ116は、イジングモデルの基底状態探索の実施するための相互作用I/F406と相互作用アドレスデコーダ407を有し、基底状態探索は、スピンアレイ405の内部のスピン間で相互作用を実施することで実現する。相互作用I/F406はコントローラ106から入力されるアドレスとクロックを相互作用アドレスデコーダ407に転送する。そして、相互作用アドレスデコーダ407は、転送されたアドレスに基づいて相互作用を行うスピン群を指定し、クロックはスピンアレイ405に搭載した相互作用回路を動作させる。
相互作用回路の詳細は後述するが、ここでは基底状態探索の流れを簡単に説明する。まず、相互作用アドレスデコーダ407は、相互作用I/F406を介して入力されるアドレスに基づいて、スピンアレイ405内のメモリセルに格納された相互作用係数Ji,jと外部磁場係数hi、及びスピン値をリードする。そして、搭載した相互作用回路で相互作用を実施した後で、リード/ライトを行う。
加えて、半導体チップ116は、後述のようにイジングモデルのスピンを表現するメモリセルの値を確率的に反転させる乱数を注入するための乱数注入線を有している。図2で説明した乱数発生部128により発生されたRND信号は、この乱数注入線を介してスピンアレイ405に与えられる。
次に、隣接チップ間のデータ伝送について説明する。隣接チップ間のデータ伝送は、レジスタ403とチップ間伝送部コントローラ408と送信用バッファ410と受信用バッファ411とチップ間伝送I/F402で実現する。まず、チップ間伝送部コントローラ408は、メモリコントローラ404を介してmビット毎にスピンアレイ405の境界部のスピン値を読み出す。そして、チップ内においては最終的にチップ間伝送I/F402に転送して、nビット幅のチップ間伝送I/F402が境界部のスピン値を別チップに対して伝送する。ここで、送信用バッファ410は読み出したデータのビット幅mとチップ間伝送I/F402のビット幅nの間を調停する役割を果たす。
例えば、m>nの場合は、チップ間伝送I/F402のビット幅nが小さいため、一旦mビットのスピン値を送信用バッファ410に格納し、チップ間伝送I/F402がnビットずつ複数に分けて読み出し、他チップに対して伝送する。また、m<nの場合は、読み出したデータのビット幅mが小さいため、mビットずつスピン値を読み出し、送信用バッファ410にnビットのデータが格納された時点でチップ間伝送I/F402が他チップに対して伝送する。なお、他チップから半導体チップ116へのスピン値伝送は、受信用バッファ411を介して、前述した送信側と同様な動作により実現する。
<イジングモデルの構成>
図4は、イジングモデルの構成の一例を示した図である。図4では、スピンユニットを複数個並べることで、3次元格子状のトポロジを持つイジングモデルを構成する例を示している。図4において、501と502はスピンであり、503と504は相互作用係数、505は外部磁場係数、506はスピンユニットである。図4の例は、3(X軸方向)×3(Y軸方向)×2(Z軸方向)の大きさの3次元格子である。座標軸の定義は図示した通り、図面右方向をX軸、図面下方向をY軸、図面奥行き方向をZ軸としているが、3次元格子以外のトポロジ、例えばツリー状のトポロジなどを利用する場合には、座標軸とは別にツリーの段数等で表現することになる。図4の3次元格子状のトポロジにおいて、スピン間の相互作用をグラフとしてとらえると、最大で次数5のスピン(頂点)が必要となる。なお、外部磁場係数の接続も含めて考えると、最大で次数6が必要となる。
図4に示す1個のスピンユニット506には、隣接するスピン(例えば隣接するスピンが5個の場合σj、σk、σl、σm、σn)の値が入力される。そして、スピンユニット506は、当該のスピン値と、外部磁場係数と、隣接するスピン間に存在する相互作用係数(Jj,i、Jk,i、Jl,i、Jm,i、Jn,i)で構成され、半導体チップ116においては対応するメモリセルを有している。
ところで、前述したように、イジングモデルは一般的に無向グラフで表現される相互作用を有している。上述した(1)式では、相互作用を表わす項として、Ji,j×σi×σjがあるが、これはi番目スピンからj番目スピンへの相互作用を示している。この場合、一般的なイジングモデルではi番目スピンからj番目スピンへの相互作用と、j番目スピンからi番目スピンへの相互作用を区別することはない。つまり、Ji,jとJj,iは同一である。しかし、本実施の形態の半導体チップ116では、先に述べたようにこのイジングモデルを有向グラフに拡張し((2)式)、i番目スピンからj番目スピンへの相互作用と、j番目スピンからi番目スピンへの相互作用を非対称にすることを実現している。これにより、モデルの表現能力が高まり、多くの問題をより小規模のモデルで表現することが可能になる。
そのため、1個のスピンユニット506をi番目スピンσiと考えた時に、このスピンユニット506が保持する相互作用係数であるJj,i、Jk,i、Jl,i、Jm,i、Jn,iは、隣接するj番目、k番目、l番目、m番目、n番目のスピンσj、σk、σl、σm、σnから、i番目スピンσiへの相互作用を決めるものである。このことは、図4において、スピンユニット506に含まれている相互作用係数が対応する矢印(相互作用)が、図示されているスピンユニット506の外部のスピンから、スピンユニット506の内部のスピンに向かっていることに対応している。
<スピンユニットの構成>
図5は、スピンユニット506の構成の一例を示した図である。図5に示すスピンユニット506において、601はメモリセル群であり、602は論理ブロック、603〜615はメモリセル、616はXNOR(排他的論理和の否定)、617はスイッチ、618は多数決論理回路、619は反転論理回路、620はセレクタである。
スピンユニット506は、イジングモデルのスピンσi、相互作用係数Jj,i〜Jn,i及び外部磁場係数hiを保持するためのメモリセル群601を有しており、その内訳は、複数の1ビットのメモリセル603〜615(N,IS0,IS1,IU0,IU1,IL0,IL1,IR0,IR1,ID0,ID1,IF0,IF1)で構成される。なお、メモリセル604及び605、メモリセル606及び607、メモリセル608及び609、メモリセル610及び611、メモリセル612及び613、並びに、メモリセル614及び615は、それぞれ2個1組で役割を果たす。
ここで、スピンユニット506はi番目のスピンを表現するものとして、メモリセルに格納するデータの定義について説明する。メモリセル603(N用)はスピンσiを表現するためのメモリセルであり、スピンの値を保持する。スピンの値はイジングモデルでは+1/−1(+1を上、−1を下とも表現する)であるが、これをメモリセルが保持可能な2値である0/1に対応させる。例えば、+1を1、−1を0に対応させる。
メモリセル604〜615(ISx,IUx,ILx,IRx,IDx及びIFx)は、末尾の数字が0と1の2つのメモリセル(例えばメモリセル604〜605(ISx)の場合にはメモリセルIS0及びIS1)の組合せで、+1/0/−1の3値を表現する。例えば、メモリセル604〜605(ISx)の場合には、メモリセル605(IS1)で+1/−1を表現し、メモリセル605(IS1)が保持する値が1の時は+1、メモリセル605(IS1)が保持する値が0の時には−1を表す。
これに加えて、メモリセル604(IS0)が保持する値が0の時には外部磁場係数を0と見なし、メモリセル604(IS0)が保持する値が1の時にはメモリセル605(IS1)が保持する値で決まる+1/−1のいずれかを外部磁場係数とする。外部磁場係数が0の時は外部磁場係数をディセーブルしていると考えれば、メモリセル604(IS0)に保持された値は外部磁場係数のイネーブルビットであると言うことができる(IS0=1の時に、外部磁場係数がイネーブルされる)。相互作用係数を記憶するメモリセル606〜615(IUx,ILx,IRx,IDx及びIFx)も同様に係数とビットの値とを対応させている。
なお、スピンユニット506内のメモリセル603〜615(N,IS0,IS1,IU0,IU1,IL0,IL1,IR0,IR1,ID0,ID1,IF0及びIF1)は、それぞれ半導体チップ116の外部からリード/ライト可能とする。そして、メモリコントローラ404でこれらのスピンユニット506を駆動、制御又は読み出しすることにより、一般的なSRAM(Static Random Access Memory)と同様にスピンユニット506内のメモリセル603〜615をリード/ライトすることができるようにする。
次に、メモリセル603〜615を参照して、実際に相互作用を実施する論理ブロック602について説明する。
論理ブロック602は、XNOR(排他的論理和の否定)回路616とスイッチ617と、多数決論理回路618と反転論理回路619とセレクタ620から成る相互作用回路で構成される。そして、相互作用結果に応じてスピンの状態を決定する相互作用回路は、スピンユニット506毎に独立して設置する。独立して設置することにより、スピン値の同時更新を可能にする。
スピンユニット506は、外部とのインタフェースとして、信号線EN,NU1,NL1,NR1,ND1,NF1、NOUT及びRNDを有する。信号線ENは当該スピンユニット506のスピンの更新を許可する切替え信号を入力するインタフェースである。この切替え信号でセレクタ620を制御することで、メモリセル603(N)に保持されたスピンの値を、後述の多数決論理回路618と反転論理回路619を介して与えられる値に更新することができる。
信号線NOUTは、当該スピンユニット506のスピンの値を他のスピンユニット506(図4のトポロジで隣接するユニット)に出力するインタフェースである。信号線NU,NL,NR,ND及びNFは、それぞれ他のスピンユニット506(図4のトポロジで隣接するユニット)が保持するスピンの値を入力するためのインタフェースである。信号線NUは上側のスピン(Y軸方向で−1)、信号線NLは左側のスピン(X軸方向で−1)、信号線NRは右側のスピン(X軸方向で+1)、信号線NDは下側のスピン(Y軸方向で+1)、信号線NFは奥行き方向に接続するスピン(Z軸方向で+1ないしは−1)からの入力である。
スピンユニット506では隣接スピンとの間でエネルギーを最小化するようにスピンの次状態を決定するが、それは隣接スピンと相互作用係数の積、及び、外部磁場係数を見たときに、正の値と負の値のどちらが支配的か判断することと等価である。例えば、i番目スピンσiに、スピンσj、σk、σl、σm及びσnが隣接しているとして、スピンσiの次状態は以下のように決まる。
まず、隣接スピンの値はσj=+1、σk=−1、σl=+1、σm=−1、σn=+1とし、相互作用係数はJj,i=+1、Jk,i=+1、Jl,i=+1、Jm,i=−1、Jn,i=−1、外部磁場係数hi=+1とする。このとき、相互作用係数と隣接スピンの積、及び、外部磁場係数をそれぞれ並べると、σj×Jj,i=+1、σk×Jk,i=−1、σl×Jl,i=+1、σm×Jm,i=+1、σn×Jn,i=−1、hi=+1となる。外部磁場係数は、常に値が+1のスピンとの相互作用係数と読み替えて良い。
ここで、i番目のスピンと隣接スピンとの間での局所的なエネルギーは、前述した係数にそれぞれi番目スピンの値を乗じて、さらに符号を反転させたものになる。例えば、j番目スピンとの間での局所的なエネルギーは、i番目スピンを+1とした時には−1、i番目スピンを−1としたときには+1となるので、i番目スピンを+1にするほうが、ここでの局所的なエネルギーを小さくする方向に働く。
このような局所的なエネルギーを全ての隣接スピン間と外部磁場係数について考えたときに、i番目スピンを+1/−1のどちらにしたほうがエネルギーを小さくできるかを計算する。これは、先程示した相互作用係数及び隣接スピンの積と、外部磁場係数とをそれぞれ並べたものにおいて、+1と−1のどちらが多いか数えれば良い。先程の例では、+1が4個、−1が2個である。仮に、i番目スピンを+1とすると、エネルギーの総和は−2、i番目スピンを−1とするとエネルギーの総和は+2になる。よって、+1の個数が多い時にはi番目スピンの次状態を+1とし、−1の個数が多い時にはi番目スピンの次状態を−1にするという多数決で、エネルギーを最小化するi番目スピンの次状態を決定することができる。
ここで、前述した相互作用動作と図5に示す回路ブロックとの関係を説明する。まず、隣接スピンの状態と、相互作用係数の+1/−1を示すメモリセル607(IU1),メモリセル609(IL1),メモリセル611(IR1),メモリセル613(ID1),メモリセル615(IF1)が保持する値との排他的論理和の否定をXNOR回路616で求める。これにより、その相互作用だけを見た時にエネルギーを最小化するスピンの次状態を計算することができる(+1は1、−1は0にエンコードされているものとする)。
もし、相互作用係数が+1/−1だけであれば、XNOR回路616の出力のうち+1/−1のどちらが多いかを多数決論理回路618において多数決論理で判定すればスピンの次状態を決定することができる。外部磁場係数に関しては、常に状態+1のスピンとの相互作用係数に相当するものと考えれば、単に外部磁場係数の値がスピンの次の状態を決定する多数決論理回路618に入力すべき値となる。
次に、係数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を実現する。
具体的には、図5に示すように、XNOR回路616を利用して、係数のイネーブルを決めるビット(ビットセルIS0,IU0,IL0,IR0,ID0及びIF0にそれぞれ保持されたビット)の値により、多数決論理回路618に、先に述べたスピンの次の状態の候補となる値の複製か、その反転を同時に入力する。例えば、メモリセル604(IS0)が保持するビットの値が0の場合、メモリセル605(IS1)が保持するビットの値と、メモリセル605(IS1)が保持するビットの値を反転させた値が同時に多数決論理回路618に入力されるので、外部磁場係数の影響は無い(外部磁場係数が0に相当する)ことになる。また、メモリセル604(IS0)が保持するビットの値が1の場合には、メモリセル605(IS1)が保持するビットの値と、その値と同じ値(複製)が同時に多数決論理回路618に入力されることになる。
上述したスピン間の相互作用によるエネルギー最小化で、適用されたイジングモデルの基底状態探索を実現することができるが、これだけでは局所最適解に陥ってしまう可能性がある。基本的に、エネルギーを小さくする方向の動きしかないため、一旦局所最適解に陥るとそこから抜け出すことができず、大域最適解に到達しない。そこで、局所最適解から脱出するための施策として、スピンユニット506は、スピンを表現するメモリセル603の値を確率的に反転させるため乱数注入線を有する。
そして、スピンユニット506には、上述した図2に示す乱数発生部128からスピンアレイ405に与えられたRNDがこの乱数注入線に接続され、このRNDが反転論理回路619に入力されることで、スピンの値を確率的に反転される。
以上の図4、図5の構成とそれぞれの動作により、個々の半導体チップ116は、スピンユニット506毎に相互作用を実現し、RNDによる制御を組み合わせることで、イジングモデルの基底状態探索を実現する。
<問題分割の調整機能>
次に、問題分割の調整機能について、上述した図2の他、図6〜図9を用いて説明する。図2では、問題分割の調整機能についても示している。
ここでは、説明を簡単にするために、上述した図2において、チップ1とチップ2の2個の半導体チップ116で単一のイジングモデルの基底状態探索を実施する場合を考える。その場合、図2に示すように、モデルの左側をチップ1、モデルの右側をチップ2に割り当てて、それぞれのチップに対応する相互作用係数、外部磁場係数からなる問題データと、スピンデータをコントローラ106が展開する。そして、各々のチップ内において基底状態探索を実施し、任意の周期でチップ間でもデータ伝送を実施する。
ここで、図2にあるように、問題の分割方法は、破線A、破線B、破線Cが考えられるものとする。例えば、破線Aを境界に設定して問題を解く場合は、破線A上がチップ間の境界に相当し、境界に接するスピンデータがチップ間のデータ伝送対象になる。前述したように、チップ間のデータ伝送は、チップ内のデータ伝送と比べて疎になることが多いため、境界に接するスピンデータの更新結果に影響が発生し得る。ただし、チップの異なる境界に接するスピンデータの結合が弱い、つまり相互作用係数が小さければ、データ伝送が疎になった場合の影響は軽微であることが予想される。以上から、本実施の形態は、例えば、図2における問題の分割方法を破線A、破線B、破線Cの選択をレジスタ108で実施できるようにしたものである。
<問題の分割方法>
次に、問題の分割方法の設定について、図6〜図9を用いて説明する。図6〜図9は、な半導体チップが5チップで構成された例を挙げ、問題データ、及びスピンデータを複数の半導体チップ116に展開する方法の一例を示した図である。
図6は、問題データ格納部111とスピンデータ格納部112の構成の一例を示した図である。問題データ格納部111とスピンデータ格納部112は、個別のメモリ領域であり、図6に示すように、左上を基点として右側に行くに従ってアドレス値が増加するものとする。
図7は、問題データとスピンデータの配置イメージの一例を示した図であり、問題設定レジスタ118で規定される問題のX方向のサイズ幅を参照して、問題データ、及びスピンデータを物理的な配置イメージで再構成したものである。より詳細に説明するならば、メモリ空間におけるアドレス値を問題のサイズ幅で除算すれば、該当するデータが配置イメージの何行目に相当するかが判るし、剰余で何列目に相当するかが判る。そして、図7の配置イメージで、各チップ1(116),2(211),3(212),4(213),5(214)に対応する始点アドレスと終点アドレスを規定できるようにする。例えば、チップ1に対応する始点アドレスは201とし、終点アドレスは202、チップ2に対応する始点アドレスは203とし、終点アドレスは204、チップ3に対応する始点アドレスは205とし、終点アドレスは206、チップ4に対応する始点アドレスは207とし、終点アドレスは208、チップ5に対応する始点アドレスは209とし、終点アドレスは210とする。
図8は、問題分割設定レジスタ129のレジスタセットの一例を示した図であり、このレジスタセットの内訳を纏めたものである。図8の問題分割設定レジスタ129は、各チップ向けの始点アドレス指定レジスタと終点アドレス指定レジスタで構成するものとする。例えば、チップ1向けの始点アドレス指定レジスタは、始点アドレス201を設定し、チップ1向け終点アドレス指定レジスタは、終点アドレス202を設定する。他のチップ2〜5向けについては、図8の通りである。そして実際のデータ転送は、コントローラ106に含まれるアドレス生成部123が問題データ格納部111とスピンデータ格納部112のアドレスと、半導体チップ群115に含まれるチップのチップ番号とローカルアドレスの対応関係を示すテーブルを有しており、展開部125は問題分割設定レジスタ129のレジスタ値と、アドレス生成部123に含まれるテーブルを参照して、スピン値と問題データを各チップに展開する。
なお、始点アドレス指定レジスタと終点アドレス指定レジスタを参照して、チップに伝送される問題のサイズは導出することにする。例えば、2次元格子の問題であれば、X方向の幅とY方向の幅もパラメータ化して、チップに伝送する。これにより、詳細は後述するが、データ伝送先のチップにおいて、チップ間のデータ伝送時の境界部制御を容易にすることができる(後述する図15の内容)。
また、コントローラ106は、導出した1チップ当たりの問題のサイズと、チップ仕様設定レジスタ121の設定を参照して、チップ仕様より問題サイズの方が大きければ、対応不可能であると判断することは容易である。つまり、レジスタ108で設定されたアドレス設定が有効であるか無効であるかの判断をコントローラ106で実施して、判断結果をメモリ102上で動作するプログラムに応答する構成も可能である。
以上の構成により、問題分割設定レジスタ129と、その他レジスタ108に含まれるレジスタ値を参照すれば、複数チップを前提にした問題分割の調整が可能になる。
図9は、問題分割設定レジスタ129のレジスタセットの別の一例を示した図である。前述した図8のレジスタセットにおいては、一意に問題分割を決定するが、最適な分割方法は明示的に示されるものではない。そこで、チップ仕様が許容できる範囲の中で、チップ間の境界アドレスを自動的に変更するようにしたのが図9である。ここでは、変更幅をゆらぎと呼び、ゆらぎ設定レジスタのレジスタ値を設定すれば、その範囲の中で、複数の境界アドレスを設定して計算できる。
図9の例では、チップ間の境界はチップ1−2間、チップ2−3間、チップ3−4間、チップ4−5間の4箇所存在しているが、それぞれに3ビットのゆらぎレジスタを設置し、図8の内容で予め設定したアドレスに対して、ゆらぎなし「レジスタ値=2’h0」から最大で7種類(レジスタ値=2’h3)の設定を実現する。そして、4箇所のゆらぎレジスタを2’h3に設定した場合は、1箇所で7種類のアドレスが設定され、それが4箇所あるので2401(=74)通りの分割方法が可能になる。
なお、問題分割の設定毎に計算をシリアルに実施する場合は、計算時間が膨大になる恐れがある。その場合はゆらぎレジスタのレジスタ値を小さく設定するか、チップ間の境界部毎にレジスタ値を異ならせて、特に最適な分割方法を探索したい部位には大きなレジスタ値を設定し、それ以外は小さいレジスタ値を設定すれば、条件数が削減でき、計算時間の増加は抑制できる。
<チップ間接続部における制御>
さらに、チップ間接続部における制御について、図10〜図15を用いて説明する。図10〜図12は、半導体チップの実装の一例と、チップ間接続時の端子制御について説明した図である。図10〜図12では、タイル状にX方向とY方向にチップを実装した場合を示しており、各チップは接続用のパッドを有し、隣接チップのパッド間を配線して接続する。図10は12チップ(4×3)で構成する場合であり、図11は4チップ(1×4)で構成する場合、図12は3チップ(3×1)で構成する場合である。各チップは実装場所によって、周囲にチップがある場合と、周囲にチップがない場合がある。周囲にチップがない場合は、チップ接続用のパッドからノイズが注入されないようにするため、パッドは、例えば内部的に電源に短絡するなどして、回路への影響を無くすることが望ましい。従って、複数チップを前提とした場合は、例えば、半導体チップ116内のレジスタ403にCONN_TYPEと呼ぶレジスタを設置して、実装状態に合わせてチップ状態を制御するものとする。なお、レジスタCONN_TYPEの真理値表の一例を図13に示す。この真理値表に従って、図10〜図12の各チップは、図示したようにレジスタCONN_TYPEのレジスタ値が設定されるものとする。
ここで、前述の真理値表について、図13を用いて説明する。図13は、チップ間接続時の端子制御に関わるレジスタの設定の一例を示した図である。本例では、レジスタCONN_TYPEは4ビットに設定し、例えば、CONN_TYPE=4’h0は、チップの上下左右に別チップを接続する場合に設定し、CONN_TYPE=4’h1は、チップの下左右に別チップを接続し、チップの上方には別チップを接続しない場合に設定する。また1チップのみで基底状態探索を実施する場合は、CONN_TYPE=4h’Fに設定すれば良い。他は、図13の通りである。
図14は、半導体チップにおけるチップ間接続部のブロック構成の一例を示した図である。図14では、X方向とY方向への拡張を実現することを前提に、データ伝送部を4系統設置している。すなわち、上下左右の別チップに接続するために、4つの伝送ブロック902〜905を備えている。各伝送ブロック902〜905には、送信用バッファ(図3の送信用バッファ410)と、受信用バッファ(図3の受信用バッファ411)と、転送I/F(図3のチップ間伝送I/F402)を有している。各伝送ブロック902〜905は、前述したレジスタCONN_TYPEの設定値に基づいて、各イネーブル信号EN_UP、EN_LEFT、EN_RIGHT、EN_DOWNを出力するバッファコントローラ901により制御される。
なお、本実施の形態では、X方向とY方向への拡張を前提に説明したが、例えばZ方向の拡張を考慮すると、データ伝送部を構成する送信用バッファと、受信用バッファと、転送I/Fの回路セットを奥行き前後の2セット追加したり、前述のレジスタCONN_TYPEのビット幅を増やす必要があるのは言うまでもない。
まず、前述したレジスタCONN_TYPEに従って、バッファコントローラ901は、実際にデータ伝送を実施する送信用バッファと受信用バッファからなる伝送ブロック902〜905に対して、イネーブル信号EN_UP、EN_LEFT、EN_RIGHT、EN_DOWNを転送する。さらに、前述した問題分割設定レジスタ129を使用して問題データやスピンデータ分割時の境界線を変更する場合は、設定によって隣接する半導体チップに伝送すべきデータが異なるため、スピンアレイ405から送信用バッファに転送すべきスピンユニットは固定されない。これに対応するため、スピンアレイ405から送信用バッファにスピン値を転送すべきスピンユニットと、受信用バッファの値を参照するべきスピンユニットは、メモリコントローラ404で選択できるようにする。
具体的には、コントローラ106から伝送される問題分割後の問題サイズの幅に相当する値から、算出する。例えば、チップに搭載されたスピンアレイの幅が128ユニット分の仕様で、コントローラ106から伝送された問題サイズ幅が100であったならば、当該チップにおけるイジングモデルの外周に相当するスピン値が送信バッファに転送する為に、メモリコントローラ404で、境界部のスピンユニットから数えて、29ユニット分内側のアドレスにアクセスする。これにより、所望のスピン値を送信用バッファに転送するようにする。なお、問題分割後の問題サイズ幅は、前述した始点アドレス指定レジスタと終点アドレス指定レジスタから算出するものとする。ただし、本内容は、問題分割方法を調整するレジスタを図6〜図9に示した仕様とした場合の例であり、同様の制御がメモリコントローラ404で実現できるのであれば、異なるレジスタ仕様であっても構わない。重要なのは、問題分割方法がレジスタで調整できることと、それに対応して隣接する半導体チップ間のスピンユニットが接続され、スピン値が転送されることである。
図15は、チップ間の境界を調整した場合のチップ間接続部の送信用バッファ410及び受信用バッファ411とスピンユニットのデータ伝送に着目し、本実施の形態を実現するための構成の一例を示した図であり、1001はイジングモデル、1002はスピン値格納領域、1003と1004はセレクタ(SELECT)、1005〜1008はスピン、1009と1010は相互作用係数、1011〜1014はメモリ素子である。
イジングモデル1001は、説明を簡単にするために2次元の格子構造とし、外部磁場係数も省略する。また、イジングモデル1001は、特に外周の右側を拡大したものであり、スピン1005と相互作用係数1009と同列のスピンは、当該チップが対応可能な領域の最外周とする。なお、詳細は後述するが、スピン1006は隣接チップ専用のスピンとする。また、スピン値格納領域1002には、スピン1005に対応するメモリ素子1011とスピン1006に対応するメモリ素子1012と、スピン1007に対応するメモリ素子1013と、スピン1008に対応するメモリ素子1014が構成されるものとする。
また、図15において、送信用バッファ410と受信用バッファ411と、セレクタ1003とセレクタ1004は複数存在しているが、これはスピン値格納領域1002に含まれるメモリ素子の行毎にそれぞれを設置することを意味している。まず送信側から説明すると、セレクタ1003の1つは、メモリ素子1011〜1014(1012は除く)のいずれからスピン値を読み出し、そのスピン値を送信用バッファ410の1つに転送する。そして、前述とは異なるセレクタ1003の1つは、前述とは異なるメモリ素子、例えばメモリ素子1011〜1014(1012は除く)の一段下のメモリ素子群のいずれからスピン値を読み出し、前述とは異なる送信用バッファ410の1つに転送する。受信側も同様であり、受信側バッファ411の1つに格納された隣接チップのスピン値は、セレクタ1004の1つを介して、メモリ素子1011〜1014のいずれかに転送される。そして、前述とは異なる受信用バッファ411の1つに格納された隣接チップのスピン値は、前述とは異なるセレクタ1004の1つを介して、前述とは異なるメモリ素子、例えばメモリ素子1011〜1014の一段下のメモリ素子群のいずれかに転送される。
これらを前提に、左右で隣接する2チップ間の境界設定について、2つの条件を想定して説明する。まずは、チップ仕様に対して、最外周までイジングモデルが割り付けられた条件、図15を参照して言い換えるとスピン1005が最外周だった場合を考える。図5に示したスピン603を中心に考えたスピンユニット506の1単位と考えてチップを設計すると、スピン1005に関する相互作用係数1009はスピンユニット506に含まれるが、その先に接続されるスピン1006はスピンユニット506に含まれず、隣接した別のスピンユニットに含まれ、この例では隣接した別のチップに含まれる。これに対し、当該チップにおいて、隣接チップに含まれるスピン1006を格納する専用のメモリ素子1012を設置する。そして、隣接チップのスピン値をメモリ素子1012に伝送し、最外周のスピンユニットにおいても相互作用の計算を実施できるようにする。
次に、チップ仕様に対して、割り付ける問題サイズが小さい、例えば最外周から4個のスピンを使用しない条件を考える。この場合、当該チップにおけるイジングモデルの外周はスピン1007になる。そして、相互作用係数1010を介して隣接チップのスピンが接続されるのはスピン1008になるが、何も処理しなければスピン1008は未使用領域のため、対応するメモリ素子1014には不定値が設定される。これに対し、隣接チップから取得するスピン値をメモリ素子1014に伝送して、スピン1008に値が設定されて、当該チップで相互作用の計算が実施できるようにする。
以上の2つの条件を対応可能にするのが、図15に示すメモリコントローラ404の構成である。まず、メモリコントローラ404は、チップ仕様と割り付ける問題サイズに応じて、隣接チップから取得するスピン値を書き込むメモリ素子のアドレスを設定できるセレクタ1004を有する。セレクタ1004の動作は、チップ仕様と問題分割設定レジスタ129の設定値に応じて決定できるものとする。例えば、図8〜図9で説明した始点アドレスと終点アドレスを指定するレジスタを参照して簡単な演算を実施するのも一案である。そして、隣接チップから到来するスピン値は、受信用バッファ411を介してセレクタ1004に入力され、セレクタ1004の動作に従って、当該チップにおけるイジングモデルの外周のひとつ外側のメモリ素子に伝送するようにする。つまり、スピン1005が最外周だった場合は、セレクタ1004はメモリ素子1012を選択し、スピン1007が最外周だった場合は、セレクタ1004はメモリ素子1014を選択する。
一方、隣接チップにおいてもスピン値が接続されないスピンユニットが存在する。これに対しては、当該チップからイジングモデルの外周のスピン値を伝送できれば良い。これを実現するため、メモリコントローラ404は、チップ仕様と割り付ける問題サイズに応じて、隣接チップへ転送するスピン値を読み出すメモリ素子のアドレスを設定できるセレクタ1003を有する。セレクタ1003の動作は、例えばセレクタ1004で設定されたメモリ素子に対して内側に1個ずれたメモリ素子を指定できれば良い。そして、当該チップから伝送すべきスピン値は、セレクタ1003の動作に従って、送信用バッファ410を介して隣接チップへと伝送される。つまり、スピン1005が最外周だった場合は、セレクタ1003はメモリ素子1011を選択し、スピン1007が最外周だった場合は、セレクタ1003はメモリ素子1013を選択する。
これらの動作が隣接チップにおいても同様に実施できれば、双方向でのチップ間接続が可能になり、チップ間の領域分割の仕様調整が実現できる。
なお、図15では、イジングモデルは2次元として説明したが、3次元構造などに複雑であっても構わない。さらに、図15では、実装上の左右で隣接した場合を例にして説明したが、実装上の上下であっても構わない。
以上が第1の実施の形態を実現するためのブロック構成と各ブロックの動作に関する説明である。
<基底状態探索>
次に、これまで説明してきた各ブロックの動作を踏まえて、基底状態探索の一連の動作について説明する。図16〜図17は半導体チップで基底状態探索を実施する場合のフローチャートの一例を示した図であり、図16は問題設定レジスタ129を図8のレジスタセットを採用した場合のフローチャートを示し、図17は問題設定レジスタ129を図9のレジスタセットを採用した場合のフローチャートを示した図である。
図16のフローチャートは、1回の基底状態探索はNステップ(例えば計算ステップN=36000)で実施し、初期値を異ならせたスピン値セットでM回(例えば初期値設定数M=1000)の基底状態探索を前提としている。この場合は、図8を説明した際に述べたように、問題分割は問題設定レジスタ129の設定値で一意に決定され、M種類の計算結果が取得できる。そして、さらに問題分割を調整する場合は、問題分割設定レジスタ129のレジスタ値を変更し、図16のフローチャートを実施することになる。これによりM種類(初期値)×問題分割設定数で決定される条件数で計算結果が取得できる。次に図16のフローチャートについて説明する。
まず、各半導体チップに相互作用係数と外部磁場係数からなる問題データを設定し、試行回数用カウンタをリセット(m=0)する(S1、S2)。なお、問題分割設定レジスタ129の更新は、問題データ設定(S1)で実施されるものとする。そして、スピンデータの初期値を設定し、ステップ用カウンタをリセット(STEP=0)する(S3、S4)。次に、ステップ用カウンタをカウントアップ(STEP++)しながら、スピンユニット毎に相互作用を実施し、その結果に応じてスピンデータを更新していく(S5、S6)。相互作用の終了条件はステップ用カウンタ値で規定され、任意の計算ステップNに到達したら基底状態探索の1回目の試行が終了し、1つの解を取得する(S7、S8)。
これが一連の動作であり、試行回数用カウンタをカウントアップ(m++)しながら、スピンデータに新しい初期値を設定して、同様の動作をすることで初期値設定数Mの基底状態探索を実施する(S9、S10)。なお、S8で取得した解はCPU101に転送する。そして試行回数がMに到達したら、CPU101は、コントローラ106から取得したM種類の解の中から、最低エネルギーを取得した結果を選択する(S11)。ただし、S11はコントローラ106で実施しても構わない。図2には図示していないが、コントローラにスピン値の初期値を発生させる乱数発生器と、取得した解を格納する解格納部と、取得した解の大小関係を導出できる比較器を搭載すれば、S11が実現可能である。
以上が図16に示すフローチャートの基本動作であり、問題分割設定レジスタ129のレジスタ値を書き換えれば、スピンの初期値を異ならせるだけではなく、問題の分割方法が異なる条件での計算が可能になる。
これに対し、図17は、問題設定レジスタ129を図9のレジスタセットにした場合のフローチャートである。特に、ゆらぎ幅を設定するレジスタを追加して、問題分割方法としてL種類(例えば問題分割種数L=5)を予め設定できるようにした点が異なっている。なお、問題分割種数Lは、図9のゆらぎ設定レジスタの設定値によって決定されるものであり、レジスタ値が2’h0の場合はL=1に対応し、レジスタ値が2’h1の場合はL=3(−1、0、+1の3種類)に対応し、レジスタ値が2’h2の場合はL=5(−2、−1、0、+1、+2の5種類)に対応し、レジスタ値が2’h3の場合はL=7(−3、−2、−1、0、+1、+2、+3の7種類)に対応する。次に図17のフローチャートについて説明する。
まず、問題分割種数用カウンタをリセット(d=0)する(S21)。その後、前記図16の場合(S1〜S10)と同様に、問題データ設定(S22)、試行回数m=0(S23)、スピン値初期値設定(S24)、STEP=0(S25)、相互作用&スピン値更新(S26)、STEP++(S27)、STEP<N判定(S28)、基底探索結果格納(S29)、m++(S30)、試行回数m<M判定(S31)を行う。なお、問題分割設定レジスタ129は問題データ設定(S22)の初回時に設定された後は、更新する必要はなく、問題分割は、ゆらぎ幅設定レジスタのレジスタ値に応じて変更される。そして、問題分割種数用カウンタをカウントアップ(d++)しながら、問題分割種数Lの基底状態探索を実施する(S32、S33)。最後に、最低エネルギーを取得した結果を選択する(S34)。
これにより、一意のレジスタセットのみで、スピンの初期値を異ならせるだけではなく、問題の分割方法が異なる条件を設定可能にする。そして、(M×L)種類の基底状態探索が実施できるようにしたのが図9、及び図17の特徴である。
なお、問題分割の設定毎の計算をシリアルに実施する場合は、条件数が増加する為、計算時間が膨大になる恐れがある。これに対しては、問題分割の全条件において初期値を異ならせて計算させるのではなく、ある一条件において最適な初期値を探索し、最適と思われる1つあるいは複数の初期値に限定して、問題分割条件を変更した計算を実施しても構わない。本実施の形態は、スピン値の初期値だけではなく、問題分割条件を異ならせて計算することが特徴であるから、本内容を逸脱しない範囲で計算時間を短縮する施策を実施しても構わない。
以上のこれまで説明してきたブロック構成、各ブロックの動作、制御フローにより、第1の実施の形態の特徴である問題分割設定レジスタ129による問題分割方法の調整を実現可能とし、レジスタ値を変化させれば、分割方法の異なる基底状態探索が実施できるため、結果として、より良好な最適解が取得できる可能性が向上する。
なお、イジングモデルを前提に説明してきたが、複数のノードが存在し、ノード間に作用する相互作用係数が存在すれば、他のモデルであっても構わない。例えば、ニューラルネットワークにおいても入力層と出力層、さらに多層化された中間層においても複数のニューロン(=ノード)が存在し、それぞれがシナプスによって結合強度が決定される。このニューラルネットワークをチップ化し、複数のニューラルネットワークチップを使用して、単一のパターン認識問題を求解する場合においても、本実施の形態は適用できるものである。
<効果>
以上説明した第1の実施の形態によれば、例えばイジングモデルなどのような大規模かつ複雑な相互作用モデルの計算を最適な分割方法で行うことができ、安価かつ容易に製造可能な半導体システムを実現することができる。すなわち、複数の半導体チップ116にイジングモデルを表現するパラメータを展開する場合に、イジングモデルの展開先チップ毎の分割方法を調整可能にする。これにより、複数の半導体チップ116で単一の基底状態探索を実施する場合に、より良好な最適解の導出が可能となる。
[第2の実施の形態]
第2の実施の形態は、前記第1の実施の形態に対して、問題の分割方法をレジスタで設定するのではなく、問題データを解析し、その結果に基づいて分割方法を決定することを特徴としたものである。前述したように、スピン間の結合が弱い、すなわち相互作用係数が小さい場合には、そこでチップ間のデータ伝送が疎であってもその影響は軽微であると考え、相互作用係数に着目して、最適な分割方法を導出する。
図18〜図19は、第2の実施の形態を説明するための図であり、図18は、本実施の形態における半導体システム104の構成の一例を示したブロック図であり、図19は、問題データと解析部との関係の一例を示した図である。
図18に示す半導体システム104では、前記第1の実施の形態の特徴であった問題分割設定レジスタは必須ではなく、その代わり、解析部1101を追加した構成となっている。解析部1101は、レジスタ108を参照する代わりに、問題データ格納部111の相互作用係数の値を参照し、その値に基づいて、問題分割方法を決定する。
図19では、本実施の形態に関して、スピンと相互作用係数と解析部1101の処理内容の一例を示している。説明を簡単にするために、イジングモデルは2次元構造とし、さらに外部磁場係数の記載は省略している。図19中の丸印はスピン1201を表しており、長方形は相互作用係数1202を表している。また、長方形内の数字は相互作用係数1202の値を示している。そして、問題を分割する場合は、図19に示すように、スピン間をその境界に設定することから、破線で示された境界線上に存在する複数の相互作用係数を参照して解析する。
具体的には、解析部1101は、Σ回路1203、1204、1205、1206、1207を備えて、各Σ回路1203〜1207で、各境界線上の相互作用係数の値の合計を計算する。そして、相互作用係数値の合計値が小さい境界線をチップ間の境界に設定する。図19の例では、Σ回路1204の合計値(12+46+23=81)が最も小さいので、この境界線がチップ間の境界に設定される。これにより、個別にレジスタで境界部分を設定しなくとも、スピン間の結合が弱い、相互作用係数の小さい部分での問題分割が可能になる。
なお、図19では、左右のX方向での問題分割を前提に縦断する境界線について説明したが、上下のY方向の問題分割を前提に横断する境界線についても同様に、相互作用係数の値の合計を計算すれば同様の判断が可能である。また、3次元構造、例えばZ方向に展開されたモデルであっても同様の判断は可能である。2次元構造の場合は、前述したようにチップ間の境界を線で定義したが、3次元構造の場合は、チップ間の境界を面で定義すれば良い。境界面上の相互作用係数を参照し、例えば合計値を計算するなどして解析すれば良い。
また、1個のチップが対応可能な問題サイズを超過して、問題データとスピンデータを割り当てることができないのは言うまでもない。これの対策について一例を挙げるならば、解析部1101で判断対象とする境界部は、1個のチップが対応可能なサイズの80%〜100%のスピンユニット数の中で設定する等の制約を設置することで、容易に対応可能である。
以上により、第2の実施の形態の特徴である問題データの分析による問題分割方法の調整を実現可能とし、結果として、より良好な最適解が取得できる可能性が向上する。
以上説明した第2の実施の形態によれば、前記第1の実施の形態と異なる効果として、問題データを解析し、その結果に基づいて分割方法を決定することができる。
[第3の実施の形態]
第3の実施の形態は、複数の半導体チップで単一のイジングモデルの基底状態探索を実施する場合に、分割方法も探索することを特徴とする。本内容は、外部から問題の分割方法を規定する前記第1の実施の形態や、分割方法を問題データに基づいて判定する前記第2の実施の形態と異なる。
図20〜図22は、第3の実施の形態を説明するための図であり、図20は、本実施の形態における半導体システム104の構成の一例を示したブロック図であり、図21〜図22は、複数の半導体チップで複数のイジングモデルを解く場合の設定の一例を示した図である。
図20に示す半導体システム104では、前記第1の実施の形態の特徴であった問題分割設定レジスタは必須ではなく、その代わり、解析部1301を追加した構成となっている。解析部1301は、レジスタ108を参照する代わりに、スピンデータ格納部112のスピンの値を参照し、その値に基づいて、問題分割方法を探索する。
図21では、複数の半導体チップで複数のイジングモデルを解く場合の設定1の概要を示し、図22は、設定2の概要を示している。いずれも半導体チップ群は16チップで構成され、ドット表記で図示した1401〜1404、1405〜1408は単一問題を示す。これは、1チップでは単一問題を解くことができないため、複数の半導体チップを必要とする場合であり、設定1においては、複数の半導体チップで構成されるスピンユニット群に対し、効率的に問題データが配置されるものする。一方、設定2においては、問題1405〜問題1408のそれぞれの起点と、対応する半導体チップのスピンアレイの位置関係は同一になるように配置されるものとする。
ここで、設定1の問題分割方法に着目すると、問題1401、問題1402、問題1403、問題1404は異なる分割方法に設定される。そして、各々でスピン値の初期値を同一に設定すれば、問題分割方法の差のみの最適化が可能になる。最適化の実施に当たっては、解の解析部1301が搭載されることが特徴となる。
設定1の特徴を纏めると、前記第2の実施の形態のように解析部1101が問題データに基づいた判定をして分割方法を決定するのではなく、解析部1301は計算結果であるスピンデータに基づいて分割方法を決定する。解くべきイジングモデルが複雑化し、分割方法の判断が困難である場合においては、設定1は有効である。特に、複数の半導体チップを搭載した大規模な半導体システムの特徴を生かし、並行処理で複数の計算結果が得られる場合は、問題分割方法の最適化も短時間で実施可能である。
設定1において、最適な問題分割方法が導出できた場合には、設定2に移行する。設定2においては、全ての単一問題1405〜1408が最適であると判断した問題分割方法で固定され、並行処理でスピン値の初期値が異なる基底状態探索を実施する。このようにして、問題分割設定の探索と基底状態探索を実施することができる。
なお、本実施の形態の説明では、問題分割設定の探索を実施する設定1のモードと、基底状態探索を実施する設定2のモードにおいて、それぞれは並行処理で実施する内容で説明したが、それぞれの処理をシリアルに実施しても構わない。つまり、複数のチップで同時に1個の問題しか解けない場合であっても、問題分割方法を異ならせた基底状態探索をシリアルに実施することは可能である。いずれにしても、本実施の形態においては、問題分割方法の探索機能が実施されていることが重要である。
以上により、第3の実施の形態の特徴である問題分割方法の探索を実現可能とし、結果として、より良好な最適解が取得できる可能性が向上する。
以上説明した第3の実施の形態によれば、前記第1及び第2の実施の形態と異なる効果として、複数の半導体チップ116で単一のイジングモデルの基底状態探索を実施する場合に、分割方法も探索することができる。
以上、本発明者によってなされた発明をその実施の形態に基づき具体的に説明したが、本発明は前記実施の形態に限定されるものではなく、その要旨を逸脱しない範囲で種々変更可能であることは言うまでもない。
例えば、上記した実施の形態は、本発明を分かり易く説明するために詳細に説明したものであり、必ずしも説明した全ての構成を備えるものに限定されるものではない。また、ある実施の形態の構成の一部を他の実施の形態の構成に置き換えることが可能であり、また、ある実施の形態の構成に他の実施の形態の構成を加えることも可能である。また、各実施の形態の構成の一部について、他の構成の追加・削除・置換をすることが可能である。
また、上記した実施の形態では、物理学の世界で代表的なイジングモデルを例にあげて説明したが、本発明はこれに限定されるものではなく、種々の物理現象や社会現象を表現することができる相互作用モデル全般に適用できるものである。また、イジングモデルの基底探索を実施する装置として半導体チップを例にあげて説明したが、本発明はこれに限定されるものではなく、同様の動作を行う装置全般に適用できるものである。