(57)【特許請求の範囲】
【請求項１】
イジングモデルの１つのスピンの値を記憶するメモリセルと、
前記１つのスピンに対する他のスピンからの相互作用を示す相互作用係数を記憶するメモリセルと、
前記相互作用係数と乱数とを比較することにより、前記相互作用係数の大きさに比例した確率で、所定の係数群のうち１つを選択する係数調整器と、
選択された前記係数に従い前記スピンの次状態を決定する演算を行う演算回路とをそれぞれ有する複数のスピンユニットと、
前記複数のスピンユニットに前記乱数を供給する乱数発生器と、
を備えたことを特徴とする半導体装置。
【請求項２】
前記複数のスピンユニットに供給されている乱数はランダムパルス列であることを特徴とする請求項１に記載の半導体装置。
【請求項３】
前記係数調整器において選択された前記係数と隣接スピン値との積が演算されて、多数決論理回路へ入力されることを特徴とする請求項１に記載の半導体装置。
【請求項４】
前記相互作用係数は、３ビット以上の符号付整数であることを特徴とする請求項１乃至３のいずれかの請求項に記載の半導体装置。
【請求項５】
前記乱数発生器は、ビット確率を可変に制御して、ランダムパルス列を出力するビット調整器を備え、
前記ビット調整器は、前記スピンユニットが前記演算を所定回数実行するごとに、その後に続く所定回数の演算実行時に出力するランダムパルス列のビット確率を順次下げていくことを特徴とする請求項１に記載の半導体装置。
【請求項６】
前記ビット調整器から出力した１ビットのランダムパルス列は各スピンユニットへ供給され、
各スピンユニット内において、前記ランダムパルス列が遅延素子を通過することにより複数ビット幅の乱数が生成されて、前記係数調整器へ入力されることを特徴とする請求項５に記載の半導体装置。
【請求項７】
イジングモデルの各スピンの値を記憶するメモリセルと、該スピンに相互作用を及ぼす隣接するスピンからの相互作用係数を記憶するメモリセルと、該スピンの外部磁場係数を記憶するメモリセルと、および該スピンの次状態を決定する相互作用回路とをそれぞれ有する複数のスピンユニットを備え、
前記相互作用係数を記憶するメモリセルと、前記外部磁場係数を記憶するメモリセルが、予め作成された模擬係数列を記憶して、隣接するスピンユニットからのスピン値、相互作用係数、及び外部磁場係数より前記各スピンユニットのスピンの次状態を決定する相互作用を実行する際に、前記記憶した模擬係数列をシフトして、最先の模擬係数を順次出力するシフトレジスタにより構成されていることを特徴とする半導体装置。
【請求項８】
前記相互作用係数を記憶するメモリセルと、前記外部磁場係数を記憶するメモリセルが、予め作成された模擬係数列を記憶して、隣接するスピンユニットからのスピン値、相互作用係数、及び外部磁場係数より前記各スピンユニットのスピンの次状態を決定する相互作用を実行する際に、前記記憶した模擬係数列をカウンタの記録に従って選択して、該当する模擬係数を順次出力するセレクタ付きメモリセル群により構成されていることを特徴とする請求項７に記載の半導体装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、イジングモデルの基底状態を求める半導体装置に関するものである。
【背景技術】
【０００２】
現在、コンピュータアーキテクチャの主流はノイマン型である。ノイマン型アーキテクチャでは逐次的な命令列であるプログラムでその動作が定義される。プログラムを変更することにより、様々な用途に利用可能な汎用性を有している。コンピュータの中心的な役割を果たすＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）のみならず、ＧＰＵ（Ｇｒａｐｈｉｃｓ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）のような特定用途向けの演算装置もノイマン型アーキテクチャで構成されており、その基本動作は命令列の逐次的な実行にある。
【０００３】
これまで、コンピュータの性能向上は主としてクロック周波数の向上に依っていた。ノイマン型アーキテクチャの根幹は命令例の逐次的な実行であるから、命令の実行速度を高速化すれば性能向上が期待できる。しかし、パーソナルコンピュータやサーバに用いられる汎用的なＣＰＵにおいては、クロック周波数の向上は２０００年代初頭に３ＧＨｚ前後で頭打ちとなっている。近年では頭打ちになったクロック周波数にかわって、マルチコア化による並列処理で性能向上を実現する方策が主流になっている。
【０００４】
マルチコア化による並列処理では、逐次的な命令列から並列実行可能な箇所を見出し（並列性の抽出）、並列実行することで性能向上を図る。しかし、逐次的なアルゴリズムを命令列として書き下したプログラムから並列性を抽出することは容易ではない。命令のレベルで並列性を抽出するＩＬＰ（Ｉｎｓｔｒｕｃｔｉｏｎ  Ｌｅｖｅｌ  Ｐａｒａｌｌｅｌｉｓｍ）は既に限界に達しており、近年ではＴＬＰ（Ｔｈｒｅａｄ Ｌｅｖｅｌ  Ｐｒａｌｌｅｌｉｓｍ）やＤＬＰ（Ｄａｔａ  Ｌｅｖｅｌ  Ｐａｒａｌｌｅｌｉｓｍ）のように、より粒度の粗い並列性を利用する方向になっている。
【０００５】
このような状況を鑑みると、今後、コンピュータの性能向上を図っていくためには、従来のように逐次的な命令列の実行を基本とするのではなく、本質的に並列な情報処理に移行していく必要がある。そのためには、従来の逐次的な命令列による問題の記述方法に替わって、本質的に並列な情報処理を実現するために適した問題の記述方法が必要となる。
その一つの候補としてイジングモデルがある。イジングモデルは磁性体の振舞いを説明するための統計力学のモデルであり、磁性体の研究に用いられている。イジングモデルはノード（＋１／−１の２値をとるスピン）間の相互作用として定義される。トポロジが非平面グラフになるイジングモデルの基底状態を求めることはＮＰ困難問題であることが知られている。イジングモデルは空間方向に広がった相互作用係数で問題を表現するため、本質的な並列性を利用した情報処理を実現できる可能性がある。
【０００６】
そのため、構成単位となる要素を規則的に多数並べて実現できる、半導体装置のような固体素子でイジングモデルの基底状態探索を行えることが望ましい。特にＤＲＡＭやＳＲＡＭなどの記憶装置に代表されるようなアレイ構造であり、かつ集積性を高められるように構成単位となる要素が単純な構造であるほうが望ましい。
【０００７】
イジングモデルは＋１／−１（または、０／１、上／下）の２値をとるスピンと、スピン間の相互作用を示す相互作用係数、および、スピン毎にある外部磁場係数で定義される。イジングモデルは与えられたスピン配列、相互作用係数、および、外部磁場係数から、その時のエネルギーを計算することが出来る。イジングモデルの基底状態探索とは、イジングモデルのエネルギー関数を最小化するスピンの配列を求める最適化問題である。
【０００８】
イジングモデルは、種々の物理現象や社会現象を表現する相互作用モデルの一形態であると解釈できる。相互作用モデルとは、モデルを構成する複数個のノード（node）と、ノード間の相互作用、さらに必要であればノード毎のバイアスで定義されるモデルである。物理学や社会科学では種々の相互作用モデルが提案されている。
相互作用モデルの特徴として、ノード間の影響を２個のノード間の相互作用に限定している（２体間の相互作用）ことがあげられる。例えば、宇宙空間にある惑星の力学を考えてみると、惑星というノードの間に万有引力による相互作用がある点で相互作用モデルの一種とも解釈できるが、惑星間の影響は２個の惑星間にとどまらず、３個以上の惑星が互いに影響し合って複雑な挙動を示す（いわゆる３体問題や多体問題と言われる問題になる）。
【０００９】
また、生物学の世界では脳をモデル化したニューラルネットワークが相互作用モデルの一例である。ニューラルネットワークは神経細胞のニューロンを模した人工ニューロンをノードとして、人工ニューロン間はシナプス結合という相互作用を持つ。また、各ニューロンにバイアスを与える場合もある。社会科学の世界では、例えば人間のコミュニケーションを考えると、人間というノードと言語や通信で成される相互作用があることは容易に理解できる。また、各人間には個別にバイアスがあることも想像できる。そのため、人間のコミュニケーションを、相互作用モデルという点で共通なイジングモデル等に模してその特性を明らかにしようという研究もなされている。
【００１０】
イジングモデルの基底状態探索は、元々イジングモデルが対象としていた磁性体の振る舞いを説明することのみならず、様々な用途に用いられている。これは、イジングモデルが相互作用に基づく最も単純なモデルであり、同様に相互作用に起因する様々な事象を表現する能力を持っているためであると言える。
【００１１】
また、イジングモデルの基底状態探索は、ＮＰ困難なグラフ問題として知られている最大カット問題とも対応している。このようなグラフ問題は、ソーシャルネットワークにおけるコミュニティの検出や、画像処理におけるセグメンテーションなど、幅広い応用を持っている。そのため、イジングモデルの基底状態探索を行うソルバがあれば、このような様々な問題に適用することが出来る。
【先行技術文献】
【特許文献】
【００１２】
【特許文献１】特開２００４−１３３８０２号公報
【特許文献２】特開平９−３００１８０号公報
【発明の概要】
【発明が解決しようとする課題】
【００１３】
しかし、イジングモデルと一対一に対応した構造を持つハードウェアを想定すると、ハードウェアが対応する係数の値域は限られる。このようなハードウェアでは、係数を保持するためにメモリセル等の記憶装置を用い、係数の大きさの影響を及ぼすための演算器や増幅器を用いることが考えられる。そのため、係数の地域は、メモリセルや演算器のビット幅や、増幅器のダイナミックレンジなどによって制約を受ける。
【００１４】
また、一般にビット幅やダイナミックレンジを広げるためには多くのハードウェア資源や製造時のばらつきに対するより緻密な制御が必要となるため、物量やコストの増大を招く。この観点からも、理論的には任意の係数を実現するハードウェアの構成を考えることができても、現実的にはある制限された値域の係数しか提供できない。例えば、一例としては、＋１，−１の２値のみであったり、＋１，０，−１の３値のみであったりすることが想定される。
【００１５】
イジングモデルの基底状態探索を行うことには産業上有用な応用があるものの、基底状態探索を行うソルバを実現する上では、ハードウェアの制約によって係数の値の種類が制限されてしまい、ソルバに入力することのできるイジングモデルの種類が限られてしまうという問題がある。
【００１６】
従来、ノイマン型コンピュータ上でこのような探索を行う組合せ最適化問題の分野では、問題の入力サイズに対して計算量が指数関数的に爆発することから、問題を構成する値の種類が問題になることは少なかった。それよりは、問題を入力した後の探索処理における計算量の爆発が支配的な問題であった。そのため、例えば特許文献１及び２に示すように、問題の特徴を利用して計算量を削減する分枝限定法やヒューリスティック手法が用いられてきた。
【００１７】
そのため、上述のように計算量の問題以前に、そもそもソルバに入力可能な係数の値の種類が問題になることは過去には無かった。しかし、ＮＰ困難なイジングモデルの基底状態探索を高速に行う装置が実現可能となって計算量の問題が解決されてくると、新たな問題として上記で示したような問題が生じてくる。
【００１８】
本発明は、係数の値域が限られているイジングモデルの基底状態探索を行う装置を用いて、任意の値域の係数を持つイジングモデルの基底状態探索を実現することを目的とする。
【課題を解決するための手段】
【００１９】
上記課題を解決するために本発明では、半導体装置を、イジングモデルの１つのスピンの値を記憶するメモリセルと、前記１つのスピンに対する他のスピンからの相互作用を示す相互作用係数を記憶するメモリセルと、前記相互作用係数と乱数とを比較することにより、前記相互作用係数の大きさに比例した確率で、所定の係数群のうち１つを選択する係数調整器と、選択された前記係数に従い前記スピンの次状態を決定する相互作用回路とをそれぞれ有する複数のスピンユニットと、前記複数のスピンユニットに前記乱数を供給する乱数発生器とを備えて構成した。
【００２０】
また、上記課題を解決するために本発明では、前記半導体装置において、前記複数のスピンユニットに供給されている乱数はランダムパルス列であるように構成した。
【００２１】
また、上記課題を解決するために本発明では、前記半導体装置において、前記乱数発生器は、ビット確率を可変に制御して、ランダムパルス列を出力するビット調整器を備え、前記ビット調整器は、前記スピンユニットが相互作用を所定回数実行するごとに、その後に続く所定回数の相互作用時に出力するランダムパルス列のビット確率を順次下げていくように構成した。
【００２２】
また、上記課題を解決するために本発明では、半導体装置を、イジングモデルの各スピンの値を記憶するメモリセルと、該スピンに相互作用を及ぼす隣接するスピンからの相互作用係数を記憶するメモリセルと、該スピンの外部磁場係数を記憶するメモリセルと、および該スピンの次状態を決定する相互作用回路とをそれぞれ有する複数のスピンユニットを備え、前記相互作用係数を記憶するメモリセルと、前記外部磁場係数を記憶するメモリセルが、予め作成された模擬係数列を記憶して、隣接するスピンユニットからのスピン値、相互作用係数、及び外部磁場係数より前記各スピンユニットのスピンの次状態を決定する相互作用を実行する際に、前記記憶した模擬係数列をシフトして、最先の模擬係数を順次出力するシフトレジスタにより構成されようにした。
【００２３】
また、上記課題を解決するために本発明では、前記半導体装置において、前記相互作用係数を記憶するメモリセルと、前記外部磁場係数を記憶するメモリセルが、予め作成された模擬係数列を記憶して、隣接するスピンユニットからのスピン値、相互作用係数、及び外部磁場係数より前記各スピンユニットのスピンの次状態を決定する相互作用を実行する際に、前記記憶した模擬係数列をカウンタの記録に従って選択して、該当する模擬係数を順次出力するセレクタ付きメモリセル群により構成されるようにした。
【発明の効果】
【００２４】
本発明によれば、所望の係数の値域に対応した相互作用回路を実装するのと比較して、より簡易なハードウェアで種々の係数を疑似的に実現することができ、様々な問題に適用することができる。
【図面の簡単な説明】
【００２５】
【図１】本発明の半導体装置であるイジングチップの構成の一例を説明する図である。
【図２】本発明の半導体装置であるイジングチップを制御する情報処理装置の構成の一例を説明する図である。
【図３】スピンユニットの構成の一例を、スピンユニット間の相互作用を行う回路の構成について説明する図である。
【図４】スピンユニットの構成の一例を、スピンユニットが有するメモリセルにアクセスするための構成について説明する図である。
【図５】３次元格子のスピンアレイの構成の一例を説明する図である。
【図６】スピンユニット内のメモリセルとスピンアレイのトポロジとの対応関係を説明する図である。
【図７】３次元格子のスピンアレイとスピンユニットの対応関係の一例を説明する図である。
【図８】イジングチップ上のスピンユニットの配置の一例を説明する図である。
【図９】スピンユニット間の相互作用を行う配線の一例を説明する図である。
【図１０】スピンユニットのグループ分けと相互作用クロック、及び、相互作用アドレスの関係について説明する図である。
【図１１】スピンアレイの構成を、ランダムパルス列の伝播経路に着目して説明する図である。
【図１２】ビット調整器の構成を説明する図である。
【図１３】イジングモデルの基底状態探索を行う際のビット確率と相互作用回数の一例を説明する図である。
【図１４】多値係数対応の機能を実装するスピンユニットの例を説明する図である。
【図１５】ｎ−ビット幅の係数を保持するメモリセル群の実現方法を、(1) ワード線の配列方向にビットを連ねて展開する方法と、(2) ビット線の配列方向にビットを連ねて展開する方法を説明する図である。
【図１６】実施例１における多値係数をハードウェアにより対応するスピンユニット３３０の実現方法の考え方を説明する図である。
【図１７】乱数発生器を使用して係数発生器を実現する例を説明する図である。
【図１８】多値係数の絶対値の大きさに応じて、＋１／−１の時系列な模擬係数値の組み合わせを作る調整器の第一の構成例を説明する図である。
【図１９】多値の符号付係数が、正数の場合には＋１／０の模擬係数が生成され、負数の場合には−１／０の模擬係数が生成される調整器の第二の構成例を説明する図である。
【図２０】第一の調整器と、第二の調整器との両機能を備える第三の調整器を説明する図である。
【図２１】多値係数を格納して、模擬係数を乱数を利用して発生させるスピンユニットを備えたイジングチップを用いて、最適化問題を解くフローチャートの一例を説明する図である。
【図２２】シフトレジスタにより係数発生器を実装した例を説明する図である。
【図２３】メモリセル＋セレクタにより係数発生器を実装した例を説明する図である。
【発明を実施するための形態】
【００２６】
以下、実施例を図面を用いて説明する。
【実施例１】
【００２７】
本実施例では、イジングモデルの基底状態を求める半導体装置であるイジングチップ１００、及びイジングチップ１００を制御する情報処理装置２００の例を説明する。
【００２８】
（１）解くべき問題をイジングモデルの基底状態探索問題に変換
イジングモデルは磁性体の振舞いを説明するための統計力学のモデルである。イジングモデルは＋１／−１（または、０／１、上／下）の２値をとるスピンと、スピン間の相互作用を示す相互作用係数、および、スピン毎にある外部磁場係数で定義される。
【００２９】
イジングモデルは与えられたスピン配列、相互作用係数、および、外部磁場係数から、その時のエネルギーを計算することが出来る。イジングモデルのエネルギー関数Ｅ(σ)は一般的に次式(数１)で表わされる。なお、σｉ，σｊはそれぞれｉ番目とｊ番目のスピンの値、Ｊi,jはｉ番目とｊ番目のスピンの間の相互作用係数、ｈｉはｉ番目のスピンに対する外部磁場係数、＜ｉ，ｊ＞は隣接する２つのサイトの組合せ、σはスピンの配列を表わすものとする。
【００３０】
【数１】
0005864684.tif 000002
【００３１】
イジングモデルの基底状態を求めるというのは、イジングモデルのエネルギー関数を最小化するスピンの配列を求める最適化問題である。
例えば、グラフの最大カット問題や巡回セールスマン問題など、一見すると磁性体と何ら関係の無い最適化問題をイジングモデルの基底状態探索問題に変換することができる。そして、変換して得られたイジングモデルの基底状態は、元の問題の解に対応している。このことから、イジングモデルの基底状態を探索することのできる装置は、汎用的な用途に利用可能なコンピュータであると言える。
【００３２】
本実施例では、イジングモデルの基底状態探索を一例として説明しているが、上記した相互作用モデルの基底状態探索に置き換えて同様に適用できることは言うまでもない。
【００３３】
（２）イジングチップの構成
図１は、本実施例のイジングチップ１００の構成図の例である。イジングチップ１００はスピンアレイ１１０、Ｉ／Ｏドライバ１２０、Ｉ／Ｏアドレスデコーダ１３０、相互作用アドレスデコーダ１４０、乱数発生器１５０、およびビット調整器１５１を構成要素として含む。本実施例ではイジングチップ１００は現在広く用いられているＣＭＯＳ集積回路として実装されることを想定して説明するが、他の固体素子でも実現可能である。
【００３４】
スピンアレイ１１０は後述(図３、４)するとおり、１個のスピンとそれに付随する相互作用係数、及び、外部磁場係数の保持と、基底状態探索処理を実現するスピンユニット３００を基本構成単位として、スピンユニット３００を多数個並べて構成される。スピンアレイ１１０は、ＳＲＡＭとしての機能とイジングモデルの基底状態探索を行う相互作用回路としての機能を併せ持っている。
【００３５】
Ｉ／Ｏドライバ１２０とＩ／Ｏアドレスデコーダ１３０はスピンアレイ１１０をＳＲＡＭとして用いる際のインタフェースである。Ｉ／Ｏドライバ１２０はデータバス１９１を介してスピンアレイ１１０から読み取り、または書き込みをするビット列を授受し、Ｒ／Ｗ制御線１９３の信号に従って、読み取り動作と書き込み動作を切り替えることができる。
Ｉ／Ｏアドレスデコーダ１３０はアドレスバス１９０を介して読み書きを行うアドレスをマッピングする。
Ｉ／Ｏドライバ１２０とＩ／Ｏアドレスデコーダ１３０はいずれもＩ／Ｏクロック１９２に同期して動作する。
【００３６】
イジングチップ１００は、スピンアレイ１１０にリード／ライトを行うためのＳＲＡＭ互換インタフェースを持っており、アドレスバス１９０、データバス１９１、Ｒ／Ｗ制御線１９３、および、Ｉ／Ｏクロック１９２である。また、イジングモデルの基底状態探索の制御を行うための相互作用制御インタフェースとして、相互作用アドレス１８０、および、相互作用クロック１８１を有している。
【００３７】
イジングチップ１００では、イジングモデルのスピンσｉ、相互作用係数Ｊi,j、および、外部磁場係数ｈｉを全てスピンアレイ１１０内のメモリセルに記憶する情報で表現する。スピンの初期状態の設定、及び、基底探索完了後の解読み出しのためにスピンσｉのリード／ライトをＳＲＡＭ互換インタフェースで行う。また、基底状態を探索すべきイジングモデルをイジングチップ１００に設定するために、相互作用係数Ｊi,j、および、外部磁場係数ｈｉのリード／ライトもＳＲＡＭ互換インタフェースで行う。そのため、スピンアレイ１１０内のスピンσｉ、相互作用係数Ｊi,j、および、外部磁場係数ｈｉにはアドレスが付与されている。なお、ＳＲＡＭ互換インタフェースを構成するアドレスバス１９０、データバス１９１、および、Ｒ／Ｗ制御線１９３は、Ｉ／Ｏクロック１９２に入力されるクロックに同期して動作する。但し、本発明においてインタフェースが同期式である必要性は無く、非同期式のインタフェースでも良い。
【００３８】
また、イジングチップ１００は基底状態探索を行うために、スピンアレイ１１０の内部でスピン間の相互作用を実現する。この相互作用を外部から制御するのが相互作用制御インタフェースであり、具体的には相互作用を行うスピン群を指定するアドレスを相互作用アドレス１８０で入力し、相互作用アドレスデコーダ１４０は、スピンアレイ１１０を相互作用回路として用いるために、相互作用クロック１８１に入力されるクロックに同期して相互作用を行う。相互作用動作の詳細については後述する。
なお、相互作用は必ずしもクロック同期回路で実現される必要はなく、非同期回路であっても構わない。この場合、相互作用クロック１８１の役割はクロックの入力ではなく、相互作用の実行を許可するイネーブル信号であるものとする。相互作用制御インタフェースについても必ずしも同期式である必要はなく非同期式のインタフェースでも良いが、本実施例では同期式のインタフェースを用い、相互作用が相互作用クロック１８１に同期して行われるという前提で説明を行う。
【００３９】
また、乱数発生器１５０は１回の乱数生成で複数ビットからなる乱数１５２を発生する装置である。電子回路として実現が容易な線形帰還フィードバックレジスタ等をはじめとする疑似乱数回路を用いてもよいし、物理乱数発生器を用いてもよい。ビット調整器１５１は乱数発生器１５０の出力した乱数１５２を入力とし、適当な演算を施すことで１ビットのランダムなビット１５３を生成し、スピンアレイ１１０へと出力する。乱数発生器１５０とビット調整器１５１はいずれも乱数発生クロック１６０に同期して動作しており、乱数発生クロック１周期につき１つの乱数１５３を発生する。このビット１５３は、乱数発生器１５０で乱数を発生させる度に変化することから、時系列的に乱数を発生させることで、時系列的にランダムなビット（ランダムパルス列）を得ることができる。つまり、乱数発生クロック１６０に同期したランダムパルス列を得ることができる。
本実施例では乱数発生器１５０とビット調整器１５１をイジングチップ１００内に含む例を記載しているが、乱数発生器１５０とビット調整器１５１をチップ外に配置し、ランダムなビット列（ランダムパルス列）をイジングチップ１００に入力しても良い。
【００４０】
（３）情報処理装置の構成
前記イジングチップ１００を１個、または、複数個用いて情報処理を実現するわけであるが、そのためには前述したようなインタフェースを制御しなければならない。そのために、イジングチップ１００は図２に示すような情報処理装置２００の一部として利用される。
【００４１】
情報処理装置２００は、現在一般的に用いられているパーソナルコンピュータやサーバのような装置に、イジングチップ１００で構成されたアクセラレータを装着したものと考えて良い。情報処理装置２００は、ＣＰＵ２１０、ＲＡＭ２２０、ＨＤＤ２６０、ＮＩＣ２４０を有し、これらがシステムバス２３０で結合されている。これは、現在のパーソナルコンピュータやサーバに一般的に見られる構成である。加えて、システムバス２３０にイジングチップコントローラ２５０が接続され、その先に１個ないしは複数個のイジングチップ１００−１，１００−２を持つ。このイジングチップコントローラ２５０とイジングチップ１００がアクセラレータに相当するものであり、例えばＰＣＩ  Ｅｘｐｒｅｓｓのようなペリフェラル拡張用インタフェースに挿入して使う拡張カードのような形態を取る。イジングチップコントローラ２５０はシステムバス２３０（例えばＰＣＩ  ＥｘｐｒｅｓｓやＱＰＩ）のプロトコルをイジングチップのインタフェースに合せて変換するものである。情報処理装置２００のＣＰＵ２１０上で動作するソフトウェアは、一般的には特定のアドレスに対してリード／ライトを行うことで（いわゆるＭＭＩＯ、Ｍｅｍｏｒｙ  Ｍａｐｐｅｄ  Ｉ／Ｏ）、イジングチップコントローラ２５０を経由して、イジングチップ１００を制御することが出来る。また、このような情報処理装置を、装置間ネットワーク２９０を介して、複数台結合して利用しても良い。
【００４２】
ＲＡＭ２２０は、解析対象の最適化問題をイジングモデルの基底状態探索に変換する問題変換プログラム２２１と、イジングチップを制御してイジングモデルの基底状態探索を行うイジングチップ制御プログラム２２２を格納している。ＲＡＭ２２０に格納されたプログラムはＣＰＵ２１０によって実行される。ＨＤＤ２６０は、解析対象の最適化問題を表す問題データ２６１を格納している。ＣＰＵ２１０はシステムバス２３０を介してイジングチップ１００を制御し、またイジングチップ内のスピンアレイへのデータの読み書きを行う。
【００４３】
（４）スピンアレイの構成
スピンアレイ１１０は、１個のスピンとそれに付随する相互作用係数、及び、外部磁場係数の保持と、基底状態探索処理を実現するスピンユニット３００を基本構成単位として、スピンユニット３００を多数個並べて構成する。図５はスピンユニット３００を複数個並べることで、３次元格子状のトポロジを持つイジングモデルを構成する例を示している。図５の例は、３（Ｘ軸方向）×３（Ｙ軸方向）×２（Ｚ軸方向）の大きさの３次元格子である。座標軸の定義は図示した通り、図面右方向をＸ軸、図面下方向をＹ軸、図面奥行き方向をＺ軸としているが、この座標軸は実施例の説明上便宜的に必要なだけであり、発明とは関係しない。３次元格子以外のトポロジ、例えばツリー状のトポロジなどを利用する場合には、座標軸とは別にツリーの段数等で表現することになる。図５の３次元格子状のトポロジにおいて、スピン間の相互作用をグラフとしてとらえると、最大で次数５のスピン（頂点）が必要となる。なお、外部磁場係数の接続も含めて考えると、最大で次数６が必要となる。
【００４４】
図５に示す１個のスピンユニット３００は隣接するスピン（例えば隣接するスピンが５個の場合）σj，σｋ，σｌ，σｍ，σｎの値が入力される。また、スピンユニット３００はスピンσｉと外部磁場係数ｈｉに加え、前記した隣接するスピンとの相互作用係数であるＪj,i，Ｊk,i，Ｊl,i，Ｊm,i，Ｊn,i（隣接する５スピンとの相互作用係数）を保持するメモリセルを有している。
【００４５】
ところで、イジングモデルは一般的に無向グラフで表現される相互作用を有している。前記した数１では、相互作用を表わす項として、Ｊi,j×σｉ×σｊがあるが、これはｉ番目スピンからｊ番目スピンへの相互作用を示している。この時、一般的なイジングモデルではｉ番目スピンからｊ番目スピンへの相互作用と、ｊ番目スピンからｉ番目スピンへの相互作用を区別することはない。つまり、Ｊi,jとＪj,iは同一である。しかし、本発明のイジングチップ１００では、このイジングモデルを有向グラフに拡張し、ｉ番目スピンからｊ番目スピンへの相互作用と、ｊ番目スピンからｉ番目スピンへの相互作用を非対称にすることを実現している。これにより、モデルの表現能力が高まり、多くの問題をより小規模のモデルで表現することが可能になる。
【００４６】
そのため、１個のスピンユニット３００をｉ番目スピンσｉと考えた時に、このスピンユニットが保持する相互作用係数であるＪj,i，Ｊk,i，Ｊl,i，Ｊm,i，Ｊn,iは、隣接するｊ番目、ｋ番目、ｌ番目、ｍ番目、ｎ番目のスピンσj，σｋ，σｌ，σｍ，σｎから、ｉ番目スピンσｉへの相互作用を決めるものである。このことは、図５において、スピンユニット３００に含まれている相互作用係数が対応する矢印（相互作用）が、図示されているスピンユニット３００の外部のスピンから、スピンユニット３００の内部のスピンに向かっていることに対応している。
【００４７】
（５）スピンユニットの構成
スピンユニット３００の構成の一例を図３と図４を用いて説明する。スピンユニット３００は２つの側面を持っており、便宜上、図３と図４に分けて説明するが、１個のスピンユニット３００に図３と図４の構成の双方が含まれるものである。図３はスピンユニット間の相互作用を実現するための回路を図示し、図４はスピンユニットが有するメモリセルにイジングチップ１００外からアクセスするためのインタフェースであるワード線とビット線に注目して図示したものである。なお、図３の相互作用を実現するための回路において図示されているインタフェースであるＥＮ，ＮＵ，ＮＬ，ＮＲ，ＮＤ，ＮＦ，Ｎを、複数のスピンユニット間でどのように結線するかについては、後に図９及び図１０を参照して説明する。また、図４のワード線及びビット線を複数のスピンユニット間でどのように結線するかについては、後に図８を参照して説明する。
【００４８】
スピンユニット３００は、イジングモデルのスピンσｉ、相互作用係数Ｊj,i、……Ｊn,iおよび、外部磁場係数ｈｉを保持するために、１ビットのメモリセルを複数個備えている。この１ビットのメモリセルは図中に、Ｎ，ＩＳ０，ＩＳ１，ＩＵ０，ＩＵ１，ＩＬ０，ＩＬ１，ＩＲ０，ＩＲ１，ＩＤ０，ＩＤ１，ＩＦ０，ＩＦ１として図示されているものである。なお、ＩＳ０とＩＳ１、ＩＵ０とＩＵ１、ＩＬ０とＩＬ１、ＩＲ０とＩＲ１、ＩＤ０とＩＤ１、および、ＩＦ０とＩＦ１(３０２)はそれぞれ２個１組で役割を果たすものであるため、それぞれまとめてＩＳｘ，ＩＵｘ，ＩＬｘ，ＩＲｘ，ＩＤｘ，および、ＩＦｘと略記する。
ここで、スピンユニット３００はｉ番目のスピンを表現するものとして説明を行う。メモリセルＮ３０１はスピンσｉを表現するためのメモリセルでありスピンの値を保持する。スピンの値はイジングモデルでは＋１／−１（＋１を上、−１を下とも表現する）であるが、これをメモリセルの２値である０／１に対応させる。例えば、＋１を１、−１を０に対応させる。
【００４９】
図６を用いて、スピンユニット３００が有するメモリセルと、図５に示したイジングモデルのトポロジとの対応関係を示す。ＩＳｘは外部磁場係数を表現する。また、ＩＵｘ，ＩＬｘ，ＩＲｘ，ＩＤｘ，ＩＦｘはそれぞれ相互作用係数を表現する。ＩＵｘは上側のスピン（Ｙ軸方向で−１）、ＩＬｘは左側のスピン（Ｘ軸方向で−１）、ＩＲｘは右側のスピン（Ｘ軸方向で＋１）、ＩＤｘは下側のスピン（Ｙ軸方向で＋１）、ＩＦｘは奥行き方向に接続するスピン（Ｚ軸方向で＋１ないしは−１）との相互作用係数を示している。また、イジングモデルを有向グラフとして捉えた場合に、あるスピンから見ると他のスピンが自スピンに及ぼす影響の係数を持つことになる。自スピンが他のスピンに与える影響の係数は、それぞれの他のスピンに属する。すなわち、このスピンユニット３００は最大で５個のスピンと接続される。本実施例のイジングチップ１００では、外部磁場係数、及び、相互作用係数として＋１／０／−１の３値に対応する。そのため、外部磁場係数、および、相互作用係数を表わすためには、それぞれ２ビットのメモリセルが必要となる。ＩＳｘ，ＩＵｘ，ＩＬｘ，ＩＲｘ，ＩＤｘ，ＩＦｘは、末尾の数字が０と１の２つのメモリセル（例えばＩＳｘの場合にはＩＳ０とＩＳ１）の組合せで、＋１／０／−１の３値を表現する。例えば、ＩＳｘの場合には、ＩＳ１で＋１／−１を表現し、ＩＳ１が１の時は＋１，０の時には−１を表現する。これに加えて、ＩＳ０が０の時には外部磁場係数を０と見なし、ＩＳ０が１の時にはＩＳ１で決まる＋１／−１のいずれかを外部磁場係数とする。外部磁場係数が０の時は外部磁場係数をディセーブルしていると考えれば、ＩＳ０は外部磁場係数のイネーブルビットであると言うことができる（ＩＳ０＝１の時に、外部磁場係数がイネーブルされる）。相互作用係数を表現するＩＵｘ，ＩＬｘ，ＩＲｘ，ＩＤｘ，ＩＦｘも同様に係数とビットの値を対応させている。
【００５０】
スピンユニット３００内のメモリセルＮ，ＩＳ０，ＩＳ１，ＩＵ０，ＩＵ１，ＩＬ０，ＩＬ１，ＩＲ０，ＩＲ１，ＩＤ０，ＩＤ１，ＩＦ０，ＩＦ１は、それぞれイジングチップ１００の外部からリード／ライト可能でなければならない。そのために、図４に示すようにスピンユニット３００はビット線４１０とワード線４２０をそれぞれ有している。スピンユニット３００を半導体基板上にタイル状に並べてビット線４１０とワード線４２０を接続し、Ｉ／Ｏアドレスデコーダ１３０とＩ／Ｏドライバ１２０で駆動、制御、書き込み・読み出しすることで、一般的なＳＲＡＭ（Ｓｔａｔｉｃ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）と同様にスピンユニット３００内のメモリセルをイジングチップ１００のＳＲＡＭ互換インタフェースでリード／ライトすることが出来る。
【００５１】
（６）スピンアレイ内のスピンユニット配置
スピンアレイ１１０の構成を、半導体装置としてのレイアウトの観点から図８で説明する。本実施例のスピンアレイ１１０は図５に示したように３次元格子のトポロジを持つため、２次元平面上に回路を構成する半導体装置として実現するためには、レイアウト上の工夫が必要となる。そこで、図８に示すような配置を取る。なお、図８上で表現されているスピンユニット３００（ＮｘｙｚというようにＸ軸、Ｙ軸、Ｚ軸上の位置によって符号を付与している）が、３次元格子のトポロジでどの頂点に対応するかを図７で示す。３×３×２の３次元格子頂点を２次元平面上に配置するために、Ｘ軸方向の格子頂点配列の間隔にＺ軸方向の格子頂点配列の各格子頂点を挿入するように配置している。すなわち、図８の２次元平面上でのＹ軸方向（図面下側がＹ軸正の方向）にはＮｘ０ｚ，Ｎｘ１ｚ，Ｎｘ２ｚというように配置されるが、Ｘ軸方向（図面右側がＸ軸正の方向）にはＮ０ｙ０，Ｎ０ｙ１，Ｎ１ｙ０，Ｎ１ｙ１，Ｎ２ｙ０，Ｎ２ｙ１というように、Ｚ軸方向座標が０と１のスピンユニットが交互に配置される。
【００５２】
イジングチップ１００上には物理的にはスピンユニット３００を図８に示すように配置し、その上に図８に示すようなワード線４２０−１，４２０−２，４２０−３と、ビット線４１０−１，４１０−２，４１０−３，４１０−４，４１０−５，４１０−６を配線する。これらのワード線、ビット線は図４に示したスピンユニット３００のワード線４２０とビット線４１０に結線される。各スピンユニット３００はワード線の配列方向に１３個のメモリセルを有するので、ワード線４２０−１，４２０−２，４２０−３はそれぞれ１３ビットとなる。
【００５３】
（７）イジングモデルの基底状態探索処理の制御
イジングモデルの基底状態探索を実現するためには、イジングモデル全体のエネルギーがより低いスピン配列になるように遷移していくように、スピン間の相互作用を実現しなければならない。このための相互作用は、与えられた相互作用係数と外部磁場係数に基づいて行われる。つまり、あるスピンの次の値を、そのスピンに接続されている他のスピンからの相互作用と、そのスピンが持つ外部磁場係数から決定する。このとき、スピンの次の値は、そのスピンが接続されている範囲内での局所的なエネルギーを最小化するような値になる。
【００５４】
このスピンの更新は、それぞれのスピンを１個ずつ逐次的に更新することがまず考えられるが、この方法ではスピン数に比例した時間がかかってしまい、並列性を利用することが出来ない。そこで、スピン間の相互作用を全てのスピンについて同時並行的に行うことが望ましい。
【００５５】
しかし、全てのスピンを同時に更新しようとすると、あるスピンを更新するときに、隣接スピンの値を見て、隣接スピンとの間でエネルギーを最小化するようにスピンを更新するので、それと同時に隣接スピンの値を更新すると、両方の更新が重複してしまい、エネルギーを最小化できず振動してしまう。すなわち、あるスピンを更新するときに、そのスピンに接続されているスピン（あるスピンに相互作用係数を介して直接接続されているスピンをこれ以降隣接スピンと呼ぶ）を同時に更新することはできない。
【００５６】
そこで、本発明では隣接スピンは同時に更新しないように、スピンアレイ１１０内のスピンユニット３００をグループ分けして、一度に同時に更新するのは１つのグループだけにする。図５に示すようなトポロジであれば、２グループに分ければ良い。そして、この２グループを交互に更新していくわけである。あるタイミングで更新するグループを指示するために、イジングチップ１００は相互作用アドレス１８０を入力インタフェースとして有する。相互作用アドレス１８０は前述したグループのうち、更新するグループを指定するためのインタフェースであり、相互作用クロック１８１の入力によって、相互作用アドレス１８０で指定されるグループに属するスピン（スピンユニット３００）が同時に更新される。
【００５７】
この方法であれば、スピンユニット３００内に追加のハードウェアは必要なく、イジングチップ１００全体に対して一組の相互作用アドレスデコーダ１４０を設けるだけで良い。そのため、構成単位であるスピンユニット３００を複雑化することなく、前記の問題が解決できる。
【００５８】
前記グループ分けについて、図１０を用いて説明する。図１０ではスピンユニットＮｘｙzがそれぞれグループＡとグループＢの２グループにグループ分けされている。各スピンユニット３００は後述するように、スピンの更新を許可する信号を入力するインタフェース（ＥＮ）を有する。そこで、相互作用アドレス１８０で指定されるアドレス（グループの識別子）を相互作用アドレスデコーダ１４０でデコードし、グループ毎の更新許可信号を生成する。図１０の例では、グループＡ指定信号１４３、及び、グループＢ指定信号１４４がグループ毎の更新許可信号である。そして、相互作用クロック１８１でその時に更新が許可されているグループに属するスピンユニットの更新が行われる。なお、図１０に示すグループ分けによって、図５のトポロジで隣接スピンが必ず異なるグループになっている。
【００５９】
（８）スピンユニット内に備えた次のスピンの状態を決定するための回路構成
スピンユニット３００は同時に更新を行うために、相互作用を計算して次のスピンの状態を決定するための回路を、スピンユニット毎に独立して持っている。スピンの次状態を決定するための回路(相互作用回路)３０３を図３に示す。図３ではスピンユニットは外部とのインタフェースとして、ＥＮ，ＮＵ，ＮＬ，ＮＲ，ＮＤ，ＮＦ，Ｎを有する。ＥＮは当該スピンユニットのスピンの更新を許可する信号を入力するインタフェースである。Ｎは当該スピンユニットのスピンの値を他のスピンユニット（図５のトポロジで隣接するユニット）に出力するインタフェースである。ＮＵ，ＮＬ，ＮＲ，ＮＤ，ＮＦはそれぞれ他のスピンユニット（図５のトポロジで隣接するユニット）の有するスピンの値を入力するためのインタフェースである。ＮＵは上側のスピン（Ｙ軸方向で−１）、ＮＬは左側のスピン（Ｘ軸方向で−１）、ＮＲは右側のスピン（Ｘ軸方向で＋１）、ＮＤは下側のスピン（Ｙ軸方向で＋１）、ＮＦは奥行き方向に接続するスピン（Ｚ軸方向で＋１ないしは−１）からの入力である。なお、イジングモデルのトポロジを考える上で、端の処理を決める必要がある。図５のトポロジのように単に端は打ち切るのであれば、ＮＵ，ＮＬ，ＮＲ，ＮＤ，ＮＦのうち端に対するものは何も入力しなくて良い（回路上は０ないしは１の固定値に接続するなど、未使用入力端子として適切な処理をとる）。例えばＮ０００のスピンユニットの場合には、ＮＵ及びＮＬの２端子は入力が無い。
【００６０】
スピンユニット３００では隣接スピンとの間でエネルギーを最小化するようにスピンの次状態を決定するが、それは隣接スピンと相互作用係数の積、及び、外部磁場係数を見た時に、正の値と負の値のどちらが支配的か判断することと等価である。例えば、ｉ番目スピンσｉに、スピンσj，σｋ，σｌ，σｍ，σｎが隣接しているとして、スピンσｉの次状態は以下のように決まる。まず、隣接スピンの値はσj＝＋１，σｋ＝−１，σｌ＝＋１，σｍ＝−１，σｎ＝＋１とし、相互作用係数はＪj,i＝＋１，Ｊk,i＝＋１，Ｊl,i＝＋１，Ｊm,i＝−１，Ｊn,i＝−１、外部磁場係数ｈｉ＝＋１とする。このとき、相互作用係数と隣接スピンの積、及び、外部磁場係数をそれぞれ並べると、σj×Ｊj,i＝＋１，σｋ×Ｊk,i＝−１，σｌ×Ｊl,i＝＋１，σｍ×Ｊm,i＝＋１，σｎ×Ｊn,i＝−１，ｈｉ＝＋１となる。外部磁場係数は、常に値が＋１のスピンとの相互作用係数と読み替えて良い。
【００６１】
ここで、ｉ番目のスピンと隣接スピンとの間での局所的なエネルギーは、前述した係数にそれぞれｉ番目スピンの値を乗じて、さらに符号を反転させたものになる。例えば、ｊ番目スピンとの間での局所的なエネルギーは、ｉ番目スピンを＋１とした時には−１、ｉ番目スピンを−１としたときには＋１となるので、ｉ番目スピンを＋１にするほうが、ここでの局所的なエネルギーを小さくする方向に働く。このような局所的なエネルギーを全ての隣接スピン間と外部磁場係数について考えた時に、ｉ番目スピンを＋１／−１のどちらにしたほうがエネルギーを小さくできるかを計算する。これは、先程示した相互作用係数と隣接スピンの積、及び、外部磁場係数をそれぞれ並べたものにおいて、＋１と−１のどちらが多いか数えれば良い。先程の例では、＋１が４個、−１が２個である。仮に、ｉ番目スピンを＋１とするとエネルギーの総和は−２、ｉ番目スピンを−１とするとエネルギーの総和は＋２になる。よって、＋１の個数が多い時にはｉ番目スピンの次状態を＋１とし、−１の個数が多い時にはｉ番目スピンの次状態を−１にするという多数決で、エネルギーを最小化するｉ番目スピンの次状態を決定することが出来る。
【００６２】
図３のスピンユニット３００に図示する論理回路は前記した相互作用を行うための回路３０３である。まず、隣接スピンの状態と相互作用係数の＋１／−１を示すメモリセルとの排他的論理和の否定（ＸＮＯＲ）で、その相互作用だけを見た時にエネルギーを最小化するスピンの次状態を計算することができる（＋１は１、−１は０にエンコードされているものとする）。もし、相互作用係数が＋１／−１だけであれば、この出力のうち＋１／−１のどちらが多いか多数決論理で判定すればスピンの次状態を決定することができる。外部磁場係数に関しては、常に状態＋１のスピンとの相互作用係数に相当するものと考えれば、単に外部磁場係数の値がスピンの次状態を決定する多数決論理に入力すべき値となる。
【００６３】
次に、係数０の実現方法について考える。ｎ入力の多数決論理ｆ（Ｉ１，Ｉ２，Ｉ３，．．．，Ｉｎ）があるとき、以下の命題は真であると言える。まず、入力Ｉ１，Ｉ２，Ｉ３，．．．，Ｉｎの複製Ｉ’１，Ｉ’２，Ｉ’３，．．．，Ｉ’ｎがあるとする（任意のｋについて、Ｉｋ＝Ｉ’ｋである）。このとき、ｆ（Ｉ１，Ｉ２，Ｉ３，．．．，Ｉｎ）の出力は、複製もあわせて入力したｆ（Ｉ１，Ｉ２，Ｉ３，．．．，Ｉｎ，Ｉ’１，Ｉ’２，Ｉ’３，．．．，Ｉ’ｎ）と等しい。つまり、各入力変数をそれぞれ２個ずつ入れても、出力は不変である。さらに、入力Ｉ１，Ｉ２，Ｉ３，．．．，Ｉｎの他に、もう一つの入力Ｉｘと、その反転！Ｉｘがあるとする。このとき、ｆ（Ｉ１，Ｉ２，Ｉ３，．．．，Ｉｎ，Ｉｘ，！Ｉｘ）の出力は、ｆ（Ｉ１，Ｉ２，Ｉ３，．．．，Ｉｎ）と等しい。つまり、入力変数とその反転を入力すると、多数決においてその入力変数の影響をキャンセルするように働く。多数決論理のこの性質を利用して係数０を実現する。具体的には、図３に示すように、ＸＯＲを利用して、係数のイネーブルを決めるビット（ＩＳ０など）の値により、多数決論理に、先に述べたスピン次状態の候補となる値の複製か、その反転を同時に入力する。例えば、ＩＳ０が０の場合、ＩＳ１の値と、ＩＳ１の反転の値が同時に多数決論理に入力されるので、外部磁場係数の影響は無い（外部磁場係数が０に相当する）ことになる。また、ＩＳ０が１の場合には、ＩＳ１の値と、その値と同じ値（複製）が同時に多数決論理に入力されることになる。
そして、多数決論理の出力がスピンσｉの次状態としてメモリセルＮ３０１へ記憶される。
【００６４】
（９）スピンユニット間の配線
図３で示したスピンユニット３００のインタフェースである、ＥＮ，ＮＵ，ＮＬ，ＮＲ，ＮＤ，ＮＦ，Ｎについて、ＥＮの配線に関しては図１０で説明した通りだが、ＮＵ，ＮＬ，ＮＲ，ＮＤ，ＮＦ，Ｎの配線の例については図９に示す。図９は、ある１個のスピンユニットＮｘｙｚに注目した時に、図５に示すようなトポロジを図８のように配置したスピンユニットで実現するために必要な配線を示している。このような配線をスピンユニット毎に行うことで、図５のトポロジを実現することが出来る。
【００６５】
（１０）イジングモデルの基底状態探索における局所最適解の回避手段
前述したスピン間の相互作用によるエネルギー最小化で、適用されたイジングモデルの基底状態探索を実現することが出来るが、これだけでは局所最適解に陥ってしまう可能性がある。基本的に、エネルギーを小さくする方向の動きしかないため、一旦局所最適解に陥るとそこから抜け出すことが出来ず、大域最適解に到達しない。そのため、局所最適解から脱出するための作用として、図３に示す様に、ランダムパルス列ＶＡＲ１，ＶＡＲ２を入力として前記スピンの次状態を決定するための回路(相互作用回路)３０３が計算した次のスピンの値を反転させる反転論理３１４をスピンユニット３００内に設けることで、スピン配列をランダムに変化させる。
【００６６】
ランダムパルス列は、本実施例では図１１に示すようにそれぞれ２個の乱数発生器１５０−１，１５０−２、およびビット調整器１５１−１，１５１−２より乱数クロック１６０幅の時間間隔で生成される。乱数発生器１５０−１とビット調整器１５１−１から出力されるランダムパルス列は、スピンユニットＮ０００に入力され、右方向へと出力される。チップ全体では実線の矢印で示した一筆書き状の経路に沿ってランダムパルス列が伝播していく。一方、乱数発生器１５０−２とビット調整器１５１−２から出力されるランダムパルス列は、スピンユニットＮ０００に入力され、下方向に出力される。チップ全体では、破線の矢印で示した一筆書き状の経路に沿ってランダムパルス列が伝播していく。すなわち、各スピンユニットには、２つの異なるランダムパルス列が入力される構成となっている。
【００６７】
図３のスピンユニットには、２つの異なるランダムパルス列ＶＡＲ１，ＶＡＲ２がそれぞれ、ランダムパルス列線３１１，３１２を介して伝搬され、バッファ３１５，３１６に一時記憶された後、次の隣接スピンユニットへ出力される。
【００６８】
反転論理３１４は、２つの異なるランダムパルス列ＶＡＲ１，ＶＡＲ２がＡＮＤゲート３１３に入力されて、両ランダムパルス列のその時の値が“１”であるときに、前記スピンの次状態を決定するための回路３０３の出力のスピン値を反転させる。反転論理３１４により、局所的なエネルギーが増加する方向へスピンの値が変動しうるため、局所解から脱出することが可能となる。
【００６９】
図１２にビット調整器１５１の構成を示す。乱数発生器１５０はｎビット幅の偏りのない乱数１５２を出力する。ここで偏りのないとは、十分多くの乱数を発生したとき、発生した乱数の各ビットについて、“０”と“１”の発生確率が等しいことを意味する。
ビット調整器１５１はビット選択部５０１とＡＮＤ回路５０２とＯＲ回路５０３とＡＮＤ／ＯＲ選択部５０４およびメモリ５１０を備える。メモリ５１０は演算ビット数５１１および、ＡＮＤ／ＯＲ選択用ビット５１２をそれぞれ格納している。ビット調整器１５１は乱数発生器１５０の生成したｎビットの乱数を入力し、ビット選択部５０１に入力する。ビット選択部５０１は入力されたｎビットの乱数のうち、演算ビット数５１１で示されるｍビットだけを取り出して、ＡＮＤ回路５０２およびＯＲ回路５０３に入力する。ＡＮＤ回路５０２は入力されたｍビットの値の各ビットのＡＮＤをとり、結果として得られた１ビットの値を出力する。ＯＲ回路５０３も同様に、ｍビットの値の各ビットのＯＲをとり、結果として得られた１ビットの値を出力する。ＡＮＤ／ＯＲ選択部５０４は、ＡＮＤ／ＯＲ選択用ビット５１２の値に基づいて、ＡＮＤ回路５０２またはＯＲ回路５０３の出力のいずれか一つを選択し、ビット調整器１５１全体の出力１５３とする。
【００７０】
ビット調整器１５１は演算ビット数５１１及びＡＮＤ／ＯＲ選択ビット５１２の値を変えることにより、出力ビット列中に“１”が出現する確率を制御することができる。なお、以下ではビット列中に“１”が出現する確率を単にビット確率と呼ぶ。ビット調整器１５１の出力するビット確率は、以下の数２、数３で与えられる。
【００７１】
【数２】
0005864684.tif 000003
【００７２】
【数３】
0005864684.tif 000004
【００７３】
数２、数３において、Ｐはビット確率を表し、ｍは演算の対象となるビット数を表す。数２はＡＮＤ演算を選択した場合のビット確率を表している。数３はＯＲ演算を選択した場合のビット確率を表している。
【００７４】
（１１）相互作用係数、外部磁場係数の値域を拡張する
以上に説明したイジングチップ１００のスピンユニット３００は、外部磁場係数、及び、相互作用係数として＋１／０／−１の３値を記憶している。各係数の値域が３値に制限されると、イジングモデルが表現できる事象が限られてしまうため、様々な問題に適用することができるようにするために、各係数の値域をより多値に拡張することが望まれる。
【００７５】
図１４に多値係数対応を素直に実装するスピンユニット３２０の例として、図３に示すスピンユニット３００が備える１ビットのメモリセルＩＳ０，ＩＳ１，ＩＵ０，ＩＵ１，ＩＬ０，ＩＬ１，ＩＲ０，ＩＲ１，ＩＤ０，ＩＤ１，ＩＦ０，ＩＦ１(３０２)に替えて、ｎ−ビット幅(符号付数値)の２の補数表現の係数を記憶するメモリセルＮＩＳ，ＮＩＵ，ＮＩＬ，ＮＩＲ，ＮＩＤ，ＮＩＦ(３２２)を備える例を示す。このような多値係数をそのまま読み出して、隣接スピンユニット３２０のスピン値ＮＵ，ＮＬ，ＮＲ，ＮＤ，ＮＦ（２値）との積を計算するためには符号反転器３２３を備え、符号反転器３２３から出力する多値を加算する加算器３２４、および加算器３２４から出力する多値を符号判定する符号判定器３２５が必要となる。しかし、これら符号反転器３２３、加算器３２４、及び符号判定器３２５の回路規模は、係数の多値に応じて極度に大きくなり、実用には適していない。
【００７６】
そこで、本実施例における多値係数をハードウエアにより対応するスピンユニット３３０の実現方法の考え方は、図１６に示すように、図３のスピンの次状態を決定するための回路３０３（多数決論理とＸＯＲ回路を組み合わせて相互作用を実行する回路構成は回路規模を小さく抑えられることから基本的にこの枠組みは残すことにする。）をそのまま踏襲して、内部のメモリセルＮＩＳ，ＮＩＵ，ＮＩＬ，ＮＩＲ，ＮＩＤ，ＮＩＦに保持した多値係数の大きさに応じた確率で、＋１／０／−１の３値の係数値に模擬して、時系列的に係数を出力する係数発生器３３１がスピンユニット３３０内に備えられたように構成することである。
すなわち、係数発生器３３１内では、予め任意の値域の係数（これ以降、任意値域係数と呼ぶ）が記憶されていて、内部で乱数を生成して、任意値域係数の絶対値と乱数の大小を比較して、多値係数が正のものは＋１／０で模擬し、多値係数が負のものは−１／０で模擬して、時系列的に＋１／０／−１の３値の係数値を出力する。もしくは、係数の正負を問わず＋１／−１の２値の係数値の時系列的な組合せを出力する。いずれの場合でも、時系列的に発生される係数の期待値の大小と、任意値域係数の大小を対応させることによって、任意値域係数を疑似的に実現させようとするものである。
【００７７】
係数発生器３３１は、イジングチップ１００内部で、イジングモデルの基底状態探索処理の１回の相互作用の途中で次の係数値を作成して出力する。その出力された３値の係数は、図３のスピンユニット３００内と同様に、相互作用の処理がなされて、スピンの次状態が決定される。
【００７８】
上記した係数発生器３３１の実現方法、または同等の機能を有する回路の構成方法には複数通り考えられる。
【００７９】
（１２）乱数発生器を使用して係数発生器を実現する
係数発生器を、乱数発生器１５０−１，１５０−２、およびビット調整器１５１−１，１５１−２より生成されるランダムパルス列ＶＡＲ１，ＶＡＲ２がＡＮＤゲート３１３に入力されて、ＡＮＤゲートから出力されるランダムパルス列ＶＡＲ３を利用して、実現する構成例を図１７に示す。
【００８０】
多値係数は、図１４に示す実現例と同様にｎ−ビット幅(符号付数値)の２の補数表現の係数を記憶するメモリセルＮＩＳ，ＮＩＵ，ＮＩＬ，ＮＩＲ，ＮＩＤ，ＮＩＦ(３４２)に予め記憶している。
ここで、ｎ−ビット幅の係数を保持するメモリセル群の実現方法としては、図１５に示す通り、(1) ワード線の配列方向にビットを連ねて展開する方法と、(2) ビット線の配列方向にビットを連ねて展開する方法が考えられるが、いずれを採用しても良い。
【００８１】
図１７に示すスピンユニット３４０内の構成は、ｎ−ビット幅(符号付数値)の係数例として３−ビット幅の係数を入力して、同時に隣接スピンユニットからのスピンの値を入力として、図３の相互作用回路３０３における処理と同仕様の相互作用係数と隣接スピンの積、または外部磁場係数を算出して、多数決論理３０４へ入力する２ビットの信号と同仕様の２ビット信号を出力する調整器３４４が、外部磁場係数、および各相互作用係数毎に配置されている。外部磁場係数用の調整器の入力には、隣接スピンの替わりに所定の“Ｈ”信号が入力される。これは、外部磁場係数はスピンの値が常に＋１（スピンユニット内では“Ｈ”信号として表現される）のスピンとの相互作用と等価であると解釈できることからである。
更に、ＡＮＤゲート３１３から出力されたランダムパルス列ＶＡＲ３を、フリップフロップ３４３でディレイを付けて、４ビット幅の乱数を加工して、各調整器へ入力している。
【００８２】
図１８に、調整器３４４の第一の構成例を示す。図１８の調整器は、３−ビット幅の符号付き係数を入力して、＋１／−１の係数の時系列的な組合せを出力する。なお，元の３−ビット幅係数が０の時に限り、０を出力する。３−ビット幅の符号付係数から、絶対値抽出回路３５１において、２の補数表現の係数より＋３〜―３の正負側均等の絶対値を抽出する。本来は３−ビット幅の信号の２の補数表現は＋３〜−４を表現できるが、簡単のために正・負の両側の値域を揃える。つまり、最大の正数と最小の負数の絶対値が同一であるという仮定を置く。係数の絶対値を３個のＡＮＤ回路３５４により３ビット線に分けて、４ビット幅の乱数３５５と大きさを比較する回路３５６を構成する。ＡＮＤ回路３５４は絶対値の大きさに対応して１を出力する、一種のデコーダであると考えてよい。
【００８３】
比較回路３５６の目的は、多値係数の絶対値の大きさに応じて、＋１／−１の時系列な模擬係数値の組み合わせを作ることである。例えば、一例として、係数＋３の場合には、時系列な模擬係数値が＋１、＋１、＋１と作られたら、係数＋２の場合には、時系列な模擬係数値が＋１，０、＋１（＋１／０の組み合わせで模擬する場合）とか、＋１、−１、＋１（＋１／−１の組み合わせで模擬する場合）といった組み合わせに作られ、係数−２の場合には、時系列な模擬係数値が−１，０、−１（−１／０の組み合わせで模擬する場合）とか、＋１、−１、−１（＋１／−１の組み合わせで模擬する場合）といった組み合わせに作られるようにすることである。
【００８４】
そのために、比較回路３５６は、下部の４入力１出力ＯＲ回路の出力が、係数の絶対値が小さい程、１に成り易くするように構成される。比較回路３５６の動作は、係数の絶対値が小さい程、４ビット幅の乱数ＶＡＲ（ｔ−１）（ｔ−２）（ｔ−３）の値１が下部の４入力１出力ＯＲ回路に到達し易くする。言い換えると、比較回路３５６は乱数ＶＡＲ（ｔ−１）（ｔ−２）（ｔ−３）の値をマスクしていて、係数の絶対値が小さい程、乱数の値１がマスクされずに通過する。
【００８５】
３−ビット幅の符号付係数の入力は、正判定回路３５３により、正の係数の場合には１が、それ以外の係数の場合には０が出力され、また、零判定回路３５２により、係数が０の場合には０が、それ以外の係数の場合には１が出力される。
【００８６】
前記正判定回路の出力と、隣接スピン値を入力するＸＮＯＲ回路３５７、前記比較回路３５６の出力と前記ＸＮＯＲ回路３５７の出力を入力するＸＯＲ回路３５８、および前記ＸＯＲ回路３５８の出力と前記零判定回路３５２の出力を入力するＸＯＲ回路３５９を備えることにより、調整器３４４の２ビットの出力は、多値の符号付係数が＋１／−１の模擬係数に生成されて、その模擬係数と隣接スピン値との積を出力する。すなわち、３値の係数を使用する図３の相互作用回路３０３における多数決論理３０４へ入力する２ビットの信号と同じ仕様の２ビット信号を多数決論理回路３０４へ出力する。
【００８７】
本実施例の調整器３４４では、３−ビット幅の符号付係数を入力して、隣接スピン値との相互作用を処理する例を説明しているが、例えばｎ−ビット幅の符号付係数(符号付整数)を入力する場合には、例えば絶対値抽出回路３５１の出力の絶対値ビットは(ｎ−１)として、そこから分けるＡＮＤ回路３５４の数は(ｎ−１)＾２−１個となり、比較回路３５６は、係数の絶対値を(ｎ−１)＾２−１ビット線で(ｎ−１)＾２ビット幅の乱数と比較することになる。
【００８８】
図１９に、調整器３４４の第二の構成例を示す。図１８に示す第一の構成例との相違は、比較回路３５６の出力を零判定回路３５２の出力と共にＯＲ回路３６１へ入力して、そのＯＲ回路３６１の出力を前記ＸＮＯＲ回路３５７の出力と共にＸＯＲ回路３６２へ入力する構成を備えることである。
【００８９】
本第二の調整器の構成では、多値の符号付係数が、正数の場合には乱数との比較によって＋１／０の模擬係数が生成されて、隣接スピン値との積が出力され、負数の場合には乱数との比較によって−１／０の模擬係数が生成されて、隣接スピン値との積が出力される。すなわち、３値の係数を使用する図３の相互作用回路３０３における多数決論理３０４へ入力する２ビットの信号と同じ仕様の２ビット信号を多数決論理回路３０４へ出力する。
【００９０】
図２０に示す第三の構成例の調整器３４４は、モード選択線３７１を設けて選択信号を入力することにより、２個のＡＮＤ回路３７２，３７３により接続を切り替えて、図１８の第一の調整器と、図１９の第二の調整器との両機能を備える例である。
【００９１】
図２１に、図１７に示す多値係数を格納して、模擬係数を乱数を利用して発生させるスピンユニット３４０を備えたイジングチップ１００を用いて、最適化問題を解くフローチャートの一例を示す。このフローチャートは図２に示した情報処理装置２００上で実行する。
本フローチャートの実行に先立ち、ＣＰＵ２１０が問題変換プログラム２２１を実行し、解きたい最適化問題をイジングモデルに変換する。その結果得られた相互作用係数および外部磁場係数を、イジングチップ制御プログラム２２２を用いてイジングチップ１００の全てのスピンユニット３４０の該当メモリセル３４２（ＮＩＳ，ＮＩＵ，ＮＩＬ，ＮＩＲ，ＮＩＤ，ＮＩＦ）に書き込む。
【００９２】
ＣＰＵ２１０によるイジングチップ制御プログラム２２２の実行により、本フローチャートの各ステップが実現される。
ステップＳ１０１では、各スピンユニット３４０のスピンＮの値を設定する。スピンの値は例えば、ランダムな値を書き込む。または、予め決められた値を書き込んでもよい。
【００９３】
ステップＳ１０２では、イジングチップ制御プログラム２２２がビット調整器１５１の出力する乱数ビットのビット確率の初期値(初期値は、ビット確率が高い値となるように、演算ビット数５１１とＡＮＤ／ＯＲ選択用ビット５１２をメモリ５１０に格納する)を設定し、イジングチップ内のビット調整器１５１に設定値を反映する。
ステップＳ１０３では、イジングチップ制御プログラム２２２が現在のビット確率設定における相互作用の継続回数を設定する(例えば、図１３の表を参照)。これは、相互作用アドレス１８０として、相互作用を行うグループを特定するアドレスとして供給される。
【００９４】
ステップＳ１０４において、相互作用クロック１８１と相互作用アドレスデコーダ１４０からのイネーブル信号ＥＮの入力に同期して、多値係数がメモリセル３４２から読み出されて、調整器３４４において、多値係数の大きさに応じた確率で模擬係数（＋１，０，−１）が生成される。この処理は、乱数発生器１５０−１，１５０−２、およびビット調整器１５１−１，１５１−２により乱数クロック１６０幅の時間間隔で生成されるランダムパルス列ＶＡＲ１，ＶＡＲ２をＡＮＤ回路３１３へ入力して生成したランダムパルス列ＶＡＲ３と、フリップフロップ３４３でディレイを付けて加工した４ビット幅の乱数を入力して行われる。
【００９５】
ステップＳ１０５において、相互作用アドレス１８０に指定した相互作用を実行するグループを相互作用アドレスデコーダ１４０が特定して、該当するグループに属するスピンユニット３４０へ相互作用クロック１８１に同期してイネーブル信号ＥＮを発行して、相互作用を実行する。すなわち、スピンユニット３４０内の調整器３４４において、多値係数から生成された模擬係数と隣接スピン値との積が演算されて、全ての調整器３４４の出力が多数決論理回路３０４へ入力され、スピンの次の状態値を決定する。
多数決論理回路３０４の出力は、スピンの値を記憶するメモリセル３０１へ格納されるが、その途中に、イジングモデルの基底状態探索における局所最適解を回避する手段として、反転論理３１４を通過させる。反転論理３１４は、ランダムパルス列ＶＡＲ１，ＶＡＲ２が入力されたＡＮＤ回路３１３の出力が「１」となった場合には、入力されたスピンの値を反転させる。
次の状態のスピンの値がメモリセル３０１へ更新されて、１回の相互作用の実行が終了する。イジングチップ制御プログラム２２２は相互作用の実行回数をインクリメントする。
【００９６】
ステップＳ１０６において、イジングチップ制御プログラム２２２は、相互作用の実行回数がステップＳ１０３、又はＳ１０９で設定した回数(相互作用アドレスで指定したアドレス数)を実行したかどうか判定する。もし設定回数を未だ実行していなければステップＳ１０４に戻って、ステップＳ１０４、Ｓ１０５の処理を繰り返し、設定回数を実行していればステップＳ１０７へ進む。
【００９７】
ステップＳ１０７において、イジングチップ制御プログラム２２２は、ビット調整器１５１の出力する乱数ビットの現在のビット確率設定が終了閾値(順次、ビット確率を下げながら、例えば図１３に示す設定回数の相互作用を実行して行き、スピン配列が大域最適解に許容誤差内で到達したと見なせるビット確率の最終下限値)を下回っているかどうか判定する。終了閾値を下回っていればステップＳ１１０に進み、そうでなければステップＳ１０８に進む。
【００９８】
ステップＳ１０８において、イジングチップ制御プログラム２２２は、ビット確率を現在よりも低い値に更新し、更新したビット確率のランダムパルス列を生成するビット調整器１５１の演算ビット数５１１とＡＮＤ／ＯＲ選択用ビット５１２の設定値を選択して（例えば、図１３に示すデータテーブルを用意しておく）、イジングチップ内のビット調整器１５１に新しい設定値を反映する。
【００９９】
ステップＳ１０９において、イジングチップ制御プログラム２２２は、更新したビット確率での相互作用の継続回数を設定する。また、相互作用の実行回数を０にリセットする。なお、ここで設定する継続回数は、ステップＳ１０３で定めた継続回数と同じであってもよいし、必要に応じて増減させてもよい。ステップＳ１０９が終了したら、ステップＳ１０４に戻る。
【０１００】
ステップＳ１１０において、イジングチップ制御プログラム２２２は、イジングチップ１００からスピン配列の値を読み出して、図２１のフローチャートを終了する。情報処理装置２００は、その後に、例えば問題変換プログラム２２１により読み出したスピン配列の値を解きたい最適化問題の解に変換し、ユーザに提示する。
【０１０１】
図１３に、図２１のフローチャートに従ってイジングモデルの基底状態探索を行う際に、順次変化させて設定するビット確率および、相互作用継続回数の一例を示す。探索開始直後は、最初はＯＲ演算を用いて高いビット確率に設定する。これにより、スピンの値が頻繁に反転するため、局所解を避け易くなる。探索が進むにつれて、徐々にビット確率を下げることで一つの解に収束させる。
【０１０２】
図２１のフローチャートのステップＳ１０２でビット確率の初期値を設定する際には、例えば図１３の表の一番上の行にあるように、ＯＲ演算を選択し、演算対象のビット数を３ビットとする。この設定で、相互作用を１００回行う。その後、ステップＳ１０８とステップＳ１０９でビット確率と相互作用回数を更新設定する際には、図１３の表の次の行に進む。すなわち、ＯＲ演算を選択し、演算対象のビット数を２ビットとし、相互作用回数を１１０回に設定する。同様にして、ステップＳ１０８とステップＳ１０９を実行するごとに図１３の表の次の行へ設定値を進めていき、最後の行の設定値での相互作用を終えた時点で基底状態探索を終了する。このように、ビット確率を下げつつ、相互作用回数を伸ばしていくことで、より良い解を得易くなる。
【０１０３】
図１７に示すスピンユニット３４０内の調整器３４４は、相互作用クロック１８１と相互作用アドレスデコーダ１４０からのイネーブル信号ＥＮの入力に同期して、相互作用を実行する毎に、予めメモリセル３４２に記憶した多値係数を読み出して、多値係数の絶対値と４ビット幅の乱数３５５と大きさを比較して、＋１，０，−１の模擬係数を生成する。すなわち、時系列に係数を変化させて相互作用を行う。
ここで、上記した通り、ビット調整器１５１から出力されるランダムパルス列ＶＡＲ１，ＶＡＲ２のビット確率は徐々に下げる制御を行う。これに伴って、４ビット幅の乱数３５５のビット確率も徐々に下がる。その結果、ビット確率が高い時は、多値係数の絶対値の大小が比較回路３５６の出力に及ぼす影響が高くて、隣接スピン値と模擬係数の積を反転させる効果も高いのであるが、ビット確率が徐々に下がってくると、多値係数の絶対値の大小が比較回路３５６の出力に及ぼす影響が小さくなり、隣接スピン値と模擬係数の積を反転させる効果も小さくなる。すなわち、多値係数を時系列の模擬係数に変化させて相互作用を行って、イジングモデルの基底状態探索を行う処理において、スピン列の解を収束させることができる。
【実施例２】
【０１０４】
図１６に、イジングチップ１００のスピンユニット３３０内に、多値係数を使用して相互作用を実行できる実現例として、係数発生器３３１を提案した。実施例１において、乱数発生器より生成される乱数を使用して係数発生器を実現する手段を説明した。
本実施例では、その他の実現手段を説明する。
【０１０５】
図２２に示す係数発生器４０１は、多値係数より＋１，０，−１の模擬係数を時系列的に生成する係数発生器３３１の機能を、予め計算機上でシミュレーションを実行して、生成された模擬係数列を記録しておき、イジングチップ１００の各スピンユニット３３０内に構成したシフトレジスタへ模擬係数列をダウンロードして記憶させる。
係数発生器４０１内のシフトレジスタは、図３に示す３値の係数を記憶する２個のメモリセルＩｘ０，Ｉｘ１から係数が読み出される仕様と同等となるように、２列のシフトレジスタで構成される。
相互作用アドレスデコーダからのイネーブル信号の入力に同期して、２列のシフトレジスタより１組の最先の模擬係数を読み出して、相互作用回路３０３へ入力して相互作用を実行する。各シフトレジスタに記憶された模擬係数列は１回の相互作用ごとにシフトされて、繰り返して使われる。
なお、シフトレジスタを構成するメモリセル群は、図１５に示す(2)ビット方向に展開する構成にする方がレイアウト的に作りやすい。
【０１０６】
図２３に示す係数発生器４０２は、多値係数より＋１，０，−１の模擬係数を時系列的に生成する係数発生器３３１の機能を、予め計算機上でシミュレーションを実行して、生成された模擬係数列を記録しておき、イジングチップ１００の各スピンユニット３３０内に構成した２群のメモリセルへ模擬係数列をダウンロードして記憶させておき、セレクタ４０３で選択して読み出す構成である。
係数発生器４０２内の２群のメモリセルＩｘ０−０〜Ｉｘ０−ｋ，Ｉｘ１−０〜Ｉｘ１−ｋは、図３に示す３値の係数を記憶する２個のメモリセルＩｘ０，Ｉｘ１から係数が読み出される仕様と同等となるように、セレクタで１組の模擬係数が選択される。
相互作用アドレスデコーダからのイネーブル信号の入力に同期して、カウンタ４０４に記憶された順番の１組の模擬係数を読み出して、相互作用回路３０３へ入力して相互作用を実行する。各メモリセル群に記憶された模擬係数列はカウンタ４０４によって順番に選択されて、繰り返して使われる。
なお、２組のメモリセル群は、図１５に示す(1)ワード方向に展開する構成にする方がレイアウト的に作りやすい。
【符号の説明】
【０１０７】
１００，１００−１，１００−２  イジングチップ
１１０  スピンアレイ
１２０  Ｉ／Ｏドライバ
１３０  Ｉ／Ｏアドレスデコーダ
１４０  相互作用アドレスデコーダ
１４３  グループＡ指定信号
１４４  グループＢ指定信号
１５０  乱数発生器
１５１  ビット調整器
１５２  乱数発生器１５０の出力した乱数
１５３  １ビットのランダムなビット
１６０  乱数発生クロック
１８０  相互作用アドレス
１８１  相互作用クロック
１９０  アドレスバス(ＳＲＡＭ互換インタフェース)
１９１  データバス(ＳＲＡＭ互換インタフェース)
１９２  Ｉ／Ｏクロック(ＳＲＡＭ互換インタフェース)
１９３  Ｒ／Ｗ制御線(ＳＲＡＭ互換インタフェース)
２００  情報処理装置
２１０  ＣＰＵ
２２０  ＲＡＭ
２２１  問題変換プログラム
２２２  イジングチップ制御プログラム
２３０  システムバス
２４０  ＮＩＣ
２５０  イジングチップコントローラ
２６０  ＨＤＤ
２６１  問題データ
２９０  装置間ネットワーク
３００，３２０，３３０，３４０  スピンユニット
３０１  スピンσｉを表現するためのメモリセルＮ
３０２  相互作用係数、外部磁場係数を記憶するメモリセル
３０３  スピンの次状態を決定するための回路(相互作用回路)
３０４  多数決論理回路
３１１，３１２  ランダムパルス列線
３１３  ＡＮＤゲート
３１４  反転論理回路
３１５，３１６  バッファ
３２２，３４２  ｎ−ビット幅(符号付数値)の２の補数表現の係数を記憶するメモリセル
３２３  符号反転器
３２４  加算器
３２５  符号判定器
３３１  係数発生器
３４３  フリップフロップ
３４４  調整器
３５１  絶対値抽出回路
３５２  零判定回路
３５３  正判定回路
３５４  ＡＮＤ回路
３５６  比較回路
３５７  正判定回路の出力と、隣接スピン値を入力するＸＮＯＲ回路
３５８  比較回路３５６の出力とＸＮＯＲ回路３５７の出力を入力するＸＯＲ回路
３５９  ＸＯＲ回路３５８の出力と零判定回路３５２の出力を入力するＸＯＲ回路
３６１  比較回路３５６の出力と零判定回路３５２の出力を入力するＯＲ回路
３６２  ＯＲ回路３６１の出力とＸＮＯＲ回路３５７の出力を入力するＸＯＲ回路
３７１  モード選択線
３７２，３７３  接続切り替え用ＡＮＤ回路
４０１  シフトレジスタを備えた係数発生器
４０２  メモリセル群＋セレクタを備えた係数発生器
４０３  セレクタ
４０４  カウンタ
４１０  ビット線
４２０  ワード線
５０１  ビット選択部
５０２  ＡＮＤ回路
５０３  ＯＲ回路
５０４  ＡＮＤ／ＯＲ選択部
５１０  メモリ
５１１  演算ビット数
５１２  ＡＮＤ／ＯＲ選択用ビット
Ｎ  スピンを表現するメモリセル、及び、スピンの値を出力するインタフェース
ＩＳ０  外部磁場係数が０であるかどうかを示すメモリセル
ＩＳ１  外部磁場係数の＋１／−１を示すメモリセル
ＩＵ０，ＩＬ０，ＩＲ０，ＩＤ０，ＩＦ０  相互作用係数が０であるかどうかを示すメモリセル
ＩＵ１，ＩＬ１，ＩＲ１，ＩＤ１，ＩＦ１  相互作用係数の＋１／−１を示すメモリセル
【要約】
【課題】
係数の値域が限られているイジングモデルの基底状態探索を行う装置を用いて、任意の値域の係数を持つイジングモデルの基底状態探索を実現する。
【解決手段】
半導体装置を、イジングモデルの各スピンの値を記憶するメモリセルと、該スピンに相互作用を及ぼす隣接するスピンからの相互作用係数を記憶するメモリセルと、該スピンの外部磁場係数を記憶するメモリセルと、および該スピンの次状態を決定する相互作用回路とをそれぞれ有する複数のスピンユニットと、前記複数のスピンユニットへ乱数を供給する乱数発生器と、前記各スピンユニット内に、隣接するスピンユニットからのスピン値、相互作用係数、及び外部磁場係数より前記各スピンユニットのスピンの次状態を決定する相互作用を実行する際に、前記相互作用係数、及び前記外部磁場係数を前記乱数と比較して、２値、または３値の模擬係数を発生する係数調整器とを備えて構成する。
【選択図】図１【図１】
0005864684.tif 000005
【図２】
0005864684.tif 000006
【図３】
0005864684.tif 000007
【図４】
0005864684.tif 000008
【図５】
0005864684.tif 000009
【図６】
0005864684.tif 000010
【図７】
0005864684.tif 000011
【図８】
0005864684.tif 000012
【図９】
0005864684.tif 000013
【図１０】
0005864684.tif 000014
【図１１】
0005864684.tif 000015
【図１２】
0005864684.tif 000016
【図１３】
0005864684.tif 000017
【図１４】
0005864684.tif 000018
【図１５】
0005864684.tif 000019
【図１６】
0005864684.tif 000020
【図１７】
0005864684.tif 000021
【図１８】
0005864684.tif 000022
【図１９】
0005864684.tif 000023
【図２０】
0005864684.tif 000024
【図２１】
0005864684.tif 000025
【図２２】
0005864684.tif 000026
【図２３】
0005864684.tif 000027