以下、実施例を図面を用いて説明する。ただし、本発明は以下に示す実施の形態の記載内容に限定して解釈されるものではない。本発明の思想ないし趣旨から逸脱しない範囲で、その具体的構成を変更し得ることは当業者であれば容易に理解される。
本明細書等における「第1」、「第2」、「第3」などの表記は、構成要素を識別するために付するものであり、必ずしも、数または順序を限定するものではない。また、構成要素の識別のための番号は文脈毎に用いられ、一つの文脈で用いた番号が、他の文脈で必ずしも同一の構成を示すとは限らない。また、ある番号で識別された構成要素が、他の番号で識別された構成要素の機能を兼ねることを妨げるものではない。
図面等において示す各構成の位置、大きさ、形状、範囲などは、発明の理解を容易にするため、実際の位置、大きさ、形状、範囲などを表していない場合がある。このため、本発明は、必ずしも、図面等に開示された位置、大きさ、形状、範囲などに限定されない。
実施例1では、本発明を適用した情報処理装置100(図1)を説明する。情報処理装置100はイジングモデルに相似した構造を持つイジングモデル計算機200(図2)を備える。情報処理装置100は本発明を適用することにより、イジングモデル計算機200を構成するMOSFET(Metal―Oxide―Semiconductor Field―Effect―Transistor)群(図6)の製造ばらつきを回避して情報処理を実現する。
なお、本実施例を説明する上で、イジングモデル計算機200が模擬しようとしているイジングモデルについて簡単に説明する。
イジングモデルは磁性体の振舞いを説明するための統計力学のモデルである。イジングモデルは+1/−1(ないしは,0/1,上/下)の2値をとるスピンと,スピン間の相互作用を示す相互作用係数,および,スピン毎にある外部磁場係数で定義される。
イジングモデルは与えられたスピン配列,相互作用係数,および,外部磁場係数から,その時のエネルギーを計算することが出来る。イジングモデルのエネルギー関数は一般的に次式で表わされる。なお,σi,σjはそれぞれi番目とj番目のスピンの値,Ji,jはi番目とj番目のスピンの間の相互作用係数,hiはi番目のスピンに対する外部磁場係数,<i,j>は隣接する2つのサイトの組合せ,σはスピンの配列を表わすものとする。
イジングモデルの基底状態を求めるというのは,イジングモデルのエネルギー関数を最小化するスピンの配列を求める最適化問題である。
図1はイジングモデル計算機200(詳細は後述)を備え、イジングモデル計算機200を制御して情報処理を行う情報処理装置100の構成の一例を説明する図である。
情報処理装置100の典型例としては、現在一般的に用いられているパーソナルコンピュータに、イジングモデル計算機200A、Bで構成されたアクセラレータを装着したものである。なお、2個のイジングモデル計算機200A、Bを特に区別する必要が無い時には、単に符号200として参照する。
情報処理装置100は、中央処理装置(CPU)110、一時記憶装置(RAM)120、固定記憶装置(HDD)160、を有し、これらがシステムバス130で結合されている。また、システムバス130経由でネットワークインタフェースコントローラ(NIC)140が接続され、情報処理装置100は装置間ネットワーク190を経由して他の情報処理装置と通信を行うことが可能である。
加えて、システムバス130に入出力コントローラ150が接続され、その先に1個ないしは複数個のイジングモデル計算機(図1の例では、2個のイジングモデル計算機200A、B)が接続される。
入出力コントローラ150はシステムバス130上のプロトコルを、イジングモデル計算機200のインタフェースに合せて変換するものである。情報処理装置100のCPU110上で動作するソフトウェア(例えば制御プログラム121)は、一般的には特定のアドレスに対してリード/ライトを行うことで(いわゆるMMIO、Memory Mapped I/O)、入出力コントローラ150を経由して、イジングモデル計算機200を制御することが出来る。
情報処理装置100は、典型的には現在一般的に用いられているパーソナルコンピュータのようなものが一実装形態として考えられる。よって、情報処理装置100はディスプレイなどの表示装置とキーボードなどの入力装置を備え、ユーザが対話的に操作することが可能なものである。そして、イジングモデル計算機200などのアナログ計算機は、パーソナルコンピュータに対する演算加速装置(アクセラレータ)であり、一種の周辺機器として付加される。例えば、現在のパーソナルコンピュータでは表示装置での描画処理を高速化するためのアクセラレータとしてグラフィックスアクセラレータ(GPUとも呼ばれる)をPCI Express(登録商標)などのインタフェースで接続する拡張ボードとして付加することが多いが、イジングモデル計算機200もこれに似た形態で実装される。イジングモデル計算機200は例えば、1つまたは複数の半導体集積回路装置(イジングチップ)として構成することができる。
情報処理装置100でイジングモデル計算機200に問題を解かせようとする場合には、例えばHDD160に問題データ161を格納しておく。あるいは、問題データ161は入力装置から直接入力してもよい。問題データ161とは、イジングモデル計算機が求解可能なイジングモデルであり、例えばイジングモデルを定義する相互作用係数と外部磁場係数のリストとしてHDD160上に保持される。つまり、問題データ161は数1に示した相互作用係数Ji,jと外部磁場係数hiを列挙したものである。
制御プログラム121はCPU110が実行するプログラムであり、問題データ161と特性データ162に基づいてイジングモデル計算機200を制御するプログラムである。制御プログラム121の実行結果はイジングモデル計算機200が生成した問題データ161で定義される問題に対する答えである。
特性計測プログラム122はCPU110が実行するプログラムであり、イジングモデル計算機200の製造ばらつきを計測するプログラムである。特性計測プログラム122は計測結果を特性データ162として記録する。
図2は、本実施例のイジングモデル計算機200の構成図の例である。イジングモデル計算機200はスピンアレイ210、I/Oドライバ220、I/Oアドレスデコーダ230、および、相互作用アドレスデコーダ240、乱数発生器250、ビット調整器251から構成される。
本実施例でのイジングモデル計算機は、現在広く用いられているCMOS(Complementary Metal―Oxide―Semiconductor)集積回路として実装されることを想定して説明するが、他の固体素子でも実現可能である。本実施例では、スピンアレイ210は半導体メモリアレイで構成されている。メモリの種類は問わないが、ここでは高速動作可能なSRAM(Static Random Access Memory)を用いた例で説明する。イジングモデル計算機200は、スピンアレイ210にリード/ライトを行うための、SRAM互換インタフェース222によって駆動可能である。SRAM互換インタフェースは、アドレスバス290、データバス291、R/W制御線293、および、I/Oクロック292を含む。また、イジングモデル計算機200は、制御等のために不揮発メモリ等の他のメモリ270を備えていてもよい。
イジングモデル計算機200では、イジングモデルのスピンσi、相互作用係数Ji,j、および、外部磁場係数hiを、全てスピンアレイ210内のメモリセルに記憶する情報で表現する。これらの値のスピンアレイのメモリセルへのリード/ライトは、SRAM互換インタフェース222を介して、I/Oアドレスデコーダ230及びI/Oドライバ220で行う。
基底状態を探索すべきイジングモデルをイジングモデル計算機200に設定するために、スピンアレイ210内のメモリセルにはアドレスが付与されている。また、スピンアレイ210のスピンσi、相互作用係数Ji,j、および、外部磁場係数hiは、メモリセルのアドレスに対応付けられている。任意のアドレスのメモリセルに情報をリード/ライトする手法は、公知の半導体メモリの制御技術と同様である。
なお、SRAM互換インタフェースを構成するアドレスバス290、データバス291、および、R/W制御線293は、I/Oクロック292に入力されるクロックに同期して動作する。但し、本発明においてインタフェースが同期式である必要性は無く、非同期式のインタフェースでも良い。
また、イジングモデル計算機200は基底状態探索を行うために、スピンアレイ210の内部でスピン間の相互作用を実現する。ここで、相互作用とは、スピンアレイ210のメモリセルの値を読み出し、読み出した値から当該メモリセルに対応するスピン近傍での局所的なエネルギーを計算し、エネルギーが小さくなるような当該スピンの値を決定し、決定した当該スピンの値をメモリセルに書き込む一連の処理をいう。
この相互作用を外部から制御するのが相互作用制御インタフェースであり、具体的には相互作用を行うスピン群を指定するアドレスを相互作用アドレス280で入力し、相互作用クロック281に入力されるクロックに同期して相互作用を行う。内部的には、相互作用アドレスデコーダ240が、相互作用アドレス280と相互作用クロック281から、スピンアレイ210内の相互作用アドレス280に対応する一群のスピンを更新するためのクロックを生成する。
なお、相互作用は必ずしもクロック同期回路で実現される必要はなく、非同期回路であっても構わない。この場合、相互作用クロック281の役割はクロックの入力ではなく、相互作用の実行を許可するイネーブル信号であるものとする。
後述するスピン間の相互作用によるエネルギー最小化で、適用されたイジングモデルの基底状態探索を実現することが出来るが、これだけでは局所最適解に陥ってしまう可能性がある。後述の相互作用回路310では基本的に、局所的なエネルギーを小さくする方向の動きしかないため、一旦局所最適解に陥るとそこから抜け出すことが出来ず、大域最適解に到達しない。そのため、局所最適解から脱出するために、所定の確率でエネルギーを大きくする遷移を許容する処理を取り入れる。
本実施例では、スピンの値を仮想的な温度Tで決まる確率で反転させることにした。ここで温度Tは基底状態探索の過程を物理的なアニーリングに例えたものである。基底状態探索の初期では高い温度とし、徐々に温度を下げながら局所的な探索を行い、最終的に温度がゼロとなる状態まで冷却していく。
本実施例では、スピンの値を所定確率で反転させるために、乱数発生器250と乱数発生クロック260を用いる。乱数発生器250は乱数発生クロック260の1クロック毎に乱数を発生させる。ビット調整器251は、基底状態探索の初期では高い確率でスピンの値を反転させ、終期では低い確率でスピンの値を反転させるように、乱数発生器250からの出力ビットを調整するものである。具体的には、乱数発生器250の出力から所定ビット数を取り出し、多入力のAND回路またはOR回路で演算することにより、基底状態探索の初期では1が多く、基底状態探索の終期では0が多く発生するように出力を調整する。
イジングモデル計算機200内のスピンアレイ210は、イジングモデルに対応し、これを模擬するものである。スピンアレイ210は、1個のスピンとそれに付随する相互作用係数、及び、外部磁場係数の保持と、基底状態探索処理を実現するスピンユニット300(図3)を基本構成単位としている。
図3は、スピンアレイ210の単位構成要素の構成の一例を示すブロック図である。
図4は、イジングモデルの一例であり、図3の単位構成要素が1つのスピンユニットを模擬する。
図3に示すスピンユニット300を複数個並べることで、図4に示すような3次元格子状のトポロジを持つイジングモデルを構成する。図4の例は、3(X軸方向)×3(Y軸方向)×2(Z軸方向)の大きさの3次元格子(合計18スピン)である。
座標軸の定義は図示した通り、図面右方向をX軸、図面下方向をY軸、図面奥行き方向をZ軸としている(以下の図面でも同様)。この座標軸は実施例の説明上便宜的に必要なだけであり、発明とは関係しない。3次元格子以外のトポロジ、例えばツリー状のトポロジなどを利用する場合には、座標軸とは別にツリーの段数等で表現することになる。
図4の3次元格子状のトポロジにおいて、スピン間の相互作用をグラフとしてとらえると、最大で次数5のスピン(頂点)が必要となる。なお、外部磁場係数の接続も含めて考えると、最大で次数6が必要となる。
図3に示す1個のスピンユニット300は隣接するスピン(例えば隣接するスピンが上側、下側、左側、右側、奥行側の5個の場合)σj,σk,σl,σm,σnの値が入力される。また、スピンユニット300はスピンσiと外部磁場係数hiに加え、前記した隣接するスピンとの相互作用係数であるJj,i,Jk,i,Jl,i,Jm,i,Jn,i(隣接する5スピンとの相互作用係数)を保持するメモリセルを有している。なお、図3の例では相互作用係数を保持するメモリセルは入力側に置いているが、出力側に置くこともできる。
ところで、イジングモデルは一般的に無向グラフで表現される相互作用を有している。前記した(数1)では、相互作用を表わす項として、Ji,j×σi×σjがあるが、これはi番目スピンからj番目スピンへの相互作用を示している。この時、一般的なイジングモデルではi番目スピンからj番目スピンへの相互作用と、j番目スピンからi番目スピンへの相互作用を区別することはない。つまり、Ji,jとJj,iは同一である。また、一般的なイジングモデルでは、イジングモデル全体のエネルギーを数1に従って計算するときには、どちらか一方の方向しかエネルギーの計算に含めなくてよい。
しかし、本実施例のイジングモデル計算機200では、このイジングモデルを有向グラフに拡張し、i番目スピンからj番目スピンへの相互作用と、j番目スピンからi番目スピンへの相互作用を非対称にする例を示している。
そのため、1個のスピンユニット300をi番目スピンσiを含むユニットと考えた時に、このスピンユニットが保持する相互作用係数であるJj,i,Jk,i,Jl,i,Jm,i,Jn,iは、隣接するj番目、k番目、l番目、m番目、n番目のスピンσj,σk,σl,σm,σnから、i番目スピンσiへの相互作用を決めるものである。
このことは、図4において、スピンユニット300に含まれている相互作用係数が対応する矢印(相互作用)が、図示されているスピンユニット300の外部のスピンから、スピンユニット300の内部のスピンに向かっていることに対応している。
スピンユニット300は、イジングモデルのスピンσi、相互作用係数Jj,i,Jk,i,Jl,i,Jm,i,Jn,iおよび、外部磁場係数hiを保持するために、1ビットのメモリセルを複数個備えている。この1ビットのメモリセルは図3中に、スピンσiを保持するSPIN,外部磁場係数hiを保持する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と略記する。
スピンユニット300が有する各メモリセルの構造の一例としては、公知のSRAMメモリのセルを利用することができる。すなわち、メモリセルはCMOSインバータ2個で構成されるデータ保持部を有する。インバータと直列に接続されるパスゲートトランジスタのゲートをワード線で制御し、ソース・ドレイン経路をビット線に接続することで、データ保持部へのデータ読み書きを実現する。もっとも、メモリセル構造はこれに限られず、少なくとも2値を記憶できる構成であればよい。例えば、DRAMやフラッシュメモリのような他のメモリを用いることができる。
図3の例では、各メモリセルは1ビット格納できるSRAMメモリセルとしている。しかし、多値化したメモリセルを用いてもよい。多値化したメモリセルは、物理的に1つのメモリセルを用いてもよいし、複数の1ビットメモリセルを用いて複数ビットを格納できるように構成してもよい。メモリセルを多値化すると、使用できる係数の値の自由度が広がる。一方、回路規模や処理時間は拡大する。したがって、解くべき問題の種類や用途に応じて、適切なメモリを選択すればよい。
ここで、スピンユニット300はi番目のスピンを表現するものとして説明を行う。メモリセルSPINはスピンσiを表現するためのメモリセルでありスピンの値を保持する。スピンの値はイジングモデルでは+1/−1(+1を上、−1を下とも表現する)であるが、これをメモリセルの2値である1/0に対応させる。本明細書では、+1を1、−1を0に対応させることにするが、逆の対応でもかまわない。
図5を用いて、スピンユニット300が有するメモリセルと、図4に示したイジングモデルのトポロジとの対応関係を示す。ISxは外部磁場係数を表現する。また、IUx,ILx,IRx,IDx,IFxはそれぞれ相互作用係数を表現する。IUxは上側のスピン(Y軸方向で−1)、ILxは左側のスピン(X軸方向で−1)、IRxは右側のスピン(X軸方向で+1)、IDxは下側のスピン(Y軸方向で+1)、IFxは奥行き方向に接続するスピン(Z軸方向で+1ないしは−1)との相互作用係数を示している。また、イジングモデルを有向グラフとして捉えた場合に、あるスピンから見ると他のスピンが自スピンに及ぼす影響の係数を持つことになる。自スピンが他のスピンに与える影響の係数は、それぞれの他のスピンに属する。すなわち、このスピンユニット300は最大で5個のスピンと接続される。1個のスピンユニットは5個のスピンとの相互作用と、1個の外部磁場の合計6個の影響によって、スピンの値を決める。
本実施例のイジングモデル計算機200では、外部磁場係数、及び、相互作用係数は、+1/0/−1の3値に対応する。そのため、外部磁場係数、および、相互作用係数を表わすためには、少なくともそれぞれ2ビットのメモリセルが必要となる。図3に示すスピンユニット300において、メモリセルISx,IUx,ILx,IRx,IDx,IFxは、末尾の数字が0と1の2つのメモリセル(例えばISxの場合にはIS0とIS1)の組合せで、+1/0/−1の3値を表現する。例えば、ISxの場合には、IS1で+1/−1を表現し、IS1が1の時は+1,0の時には−1を表現する。これに加えて、IS0が0の時には外部磁場係数を0と見なし、IS0が1の時にはIS1で決まる+1/−1のいずれかを外部磁場係数とする。外部磁場係数が0の時は外部磁場係数をディセーブルしていると考えれば、IS0は外部磁場係数のイネーブルビットであると言うことができる(IS0=1の時に、外部磁場係数がイネーブルされる)。相互作用係数を表現するIUx,ILx,IRx,IDx,IFxも同様に係数とビットの値を対応させている。
スピンユニット300は、I/Oアドレスデコーダ230とI/Oドライバ220で駆動、制御、読み出しすることで、一般的なSRAMと同様に、スピンユニット300内のメモリセルをイジングモデル計算機200のSRAM互換インタフェースでリード/ライトすることが出来る。
スピンユニット300では隣接スピンとの間でエネルギーを最小化するようにスピンの次状態を決定するが、それは隣接スピンと相互作用係数の積、及び、外部磁場係数を評価した時に、正の値と負の値のどちらが支配的か判断することと等価である。例えば、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番目スピンの次状態を決定することが出来る。
図3のスピンユニット300に図示する相互作用回路310は、前記した動作を行うための回路を、論理回路として表現した場合の概略を示している。まず、隣接スピンの状態と相互作用係数の+1/−1を示すメモリセルとの排他的論理和の否定(XNOR)で、その相互作用だけを見た時にエネルギーを最小化するスピンの次状態を計算することができる(+1は1、−1は0にエンコードされているものとする)。もし、相互作用係数が+1/−1だけであれば、この出力のうち+1/−1のどちらが多いか多数決論理で判定すればスピンの次状態を決定することができる。外部磁場係数に関しては、常に状態+1のスピンとの相互作用係数に相当するものと考えれば、単に外部磁場係数の値がスピンの次状態を決定する多数決論理回路311に入力すべき値となる。
多数決論理回路311の出力は、次状態としてメモリセルSPINに入力される。なお、前述のように、ビット調整期251の出力となるランダムパルス列は、条件に応じてメモリセルSPINに入力される次状態をランダムに変更し、演算途中で局所解に陥ることを防ぐためのものである。
次に、係数0は多数決論理に上記のような+1/−1の投票をしない(相互作用回路310内のスイッチで表現される)ことで実現する。もし相互作用回路310を論理回路として構成する場合には、このスイッチに対応するようなディセーブル端子を各入力に対応して持つ多数決論理回路を構成する必要がある。
相互作用回路310のような回路をAND,OR,NOTのような論理ゲートの組み合わせだけで作ることは回路的なコストが大きい。よって、本実施例では図6〜図8に示すような一部アナログ的な動作を持つ回路で、相互作用回路310を実現する例を示している。アナログ的な動作を持つ回路とは、連続的に変化する電気信号を取り扱う回路である。ここでは、スピンを上向き(+1)に引っ張る力と、スピンを下向きに(−1)に引っ張る力を電流の引き込み量で表現し、その差を増幅することで、スピンの向きを決定する。つまり、スピン間の相互作用の大きさを電子回路上の電流の流量で相似的に表現していると言うことができる。
図6は、アナログ的動作による相互作用回路310を構成する回路であり、スピンを+1側に引っ張る力を電流の引き込み量として表現する回路(図6(a)、CT側回路)と、−1側に引っ張る力を電流の引き込み量として表現する回路(図6(b)、CB側回路と称する)である。
図7は、アナログ的動作による相互作用回路310で、図6の回路と合わせて用いられる回路の構成の一例を説明する図である。
図8は図6及び図7の回路によって実現される動作の一例を説明するタイムチャートである。
図6記載のこの二つの回路と、この二つの回路からの出力を増幅する図7の回路を、図8に示すタイミングチャートに沿って動作させることによって、相互作用回路310に相当する機能を実現することが出来る。
図6の回路の動作を説明する。説明においては、図6に示されるように、図3の各メモリセルに格納されている値を供給する信号を、そのメモリセルの名前の末尾にTを付加した信号名で示す(例えば、IS0に格納されている値0/1はIS0Tとして参照される)。また、その信号を反転した信号を、メモリセルの名前の末尾にBを付加した信号名で示す(例えば、IS0Tの反転した信号をIS0Bとする)。
また、隣接するスピンの値をNUT(上側)、NLT(左側)、NRT(右側)、NDT(下側)で表現する。さらに、奥行方向のNFTがあるが、図面の紙幅の都合で割愛する。図6の回路図上はNUT〜NDTに関する回路は同様の構成が繰り返し現れていることが見て取れるが、同様にNFTに関する部分も構成できる。なお、それぞれの信号について、その反転した値をNUB,NLB,NRB,NDBと表現する(NFTに対応してNFBもあるが、図では省略している)。
図6において、CTは、後で説明するCBと対をなす線である。CT及びCBはクロック信号CLKIによって駆動されるP型MOSFETで電源電圧に接続され、CLKIがLOWの時にP型MOSFETがONとなって、CT及びCBはプリチャージされる。
CT及びCBは、いくつかのN型MOSFETを経由した後に、最下段において、クロック信号CLKIによって駆動されるN型MOSFETでグラウンドに接地する。つまり、CT,CBはCLKIがLOWの時にプリチャージされ、CLKIがHIGHの時に前述したいくつかのN型MOSFETを通って、プリチャージされた電荷がグラウンドに引き抜かれる。
CT,CBそれぞれにおいて、電源電圧からグラウンドに至る経路にあるN型MOSFET群がONになっている数が、CTにおいてはスピンを+1側に引っ張る力を表現し、CBにおいてはスピンを−1が側に引っ張る力を表現する。
まずスピンを+1側に引っ張るCT側に注目して説明する。例えば、外部磁場係数が+1のとき、それはスピンを+1側に引っ張る力であるから、このことを回路で表現するために、IS1Tで駆動するN型MOSFETをCTからグラウンドに電流を流すように配置する。同様に、相互作用係数について考えると、上側に隣接するスピンとの相互作用については、上側の隣接スピンが+1(NUTが1)で相互作用係数が+1(IU1Tが1)、ないしは、上側の隣接スピンが+1(NUBが1)で相互作用係数が−1(IU1Bが1)の時にスピンを+1側に引っ張る力となるので、この条件の時にCTからグラウンドに向けて電流が流れるように、N型MOSFETを配置して、ゲートに適切な信号を入力する。なお、相互作用係数が0の場合には、この電流の流れを阻止すればよいので、下段にIS0Tで駆動されるN型MOSFETを設けている。ここでは上側に隣接するスピンとの相互作用について説明したが、それ以外の向きで隣接しているスピンとの相互作用も同様である。
次にスピンを−1側に引っ張るCB側について説明する。回路の基本的な考え方はCT側と同じで、電流を流す条件だけが異なっている。つまり、N型MOSFETのゲートに入力される信号が違う。
上記の構成、及び、動作によって、スピンを+1側に引っ張る力の総和に比例してCTからグラウンドに電流が流れ、スピンを−1側に引っ張る力の総和に比例してCBからグラウンドに電流が流れる。その結果、CTとCBの電圧はそれぞれ降下し、その降下量もスピンを+1側(CT)ないしは−1側(CB)に引っ張る力に比例する。ここで、CTとCBの電圧差を図7に示すラッチ型センスアンプで増幅し、その出力をスピンの次の値とする。なお、CLKIBはクロック信号CLKIの反転である。
図8に図6と図7の回路で実現される動作を、タイミングチャートとして説明する。図8のタイミングチャートは、図6と図7の回路によってになわれる相互作用の動作(この動作を行う期間を相互作用期間と称する)における、図6及び図7の主要信号線の電圧を縦軸に示し、横軸に時間経過を示すものである。説明上、相互作用期間を電流期間と判定期間の2フェーズに分けて説明する。
まず、相互作用期間に入る前に、CT及びCBはプリチャージされており、電流期間の始点に置いて、両者とも信号のレベルはHIGHにある。この電流期間ではCLKIがHIGHになることにより、プリチャージは終了し、CT及びCBからN型MOSFET群を通してグラウンドに電流が流れる。その結果、+1側に引っ張る力(CT側)と−1側に引っ張る力(CB側)それぞれに応じて、CTとCBに電圧降下が生じる。例えば、図8の例ではCBの方がより電圧降下が大きいと仮定する。つまり、−1側に引っ張る力の方が強いというケースである。
その後、判定期間ではCLKIがLOWになることで、次の電流期間に向けたプリチャージが行われることに加えて、判定期間の始点におけるCT及びCBの電圧が図7に示すラッチ型センスアンプで増幅される。センスアンプはCLKI信号がHIGHの時にCT及びCBと接続しており、CLKIがLOWの時(つまりCLKIBがHIGHの時)にアンプとして動作を行う。このセンスアンプによる増幅結果はCLTとCLBとして現れ、この場合にはCLTがHIGH,CLBがLOWという信号により相互作用の結果を得る。図8のタイムチャートの場合には、電圧降下が相対的に大きいCLBが増幅されてLOWとなり、電圧降下が相対的に少ないCLTが増幅されてHIGHになる。CLB=LOW(CLT=HIGH)の時にスピンの値を+1側にすべき(+1側に引っ張る力が強い)であり、CLT=LOW(CLB=HIGH)の時にスピンの値を−1側にすべき(−1側に引っ張る力が強い)ということになる。
なお、図6〜図8の回路の構成例は一例である。例えば図7〜図8に限らず、CTとCBの電圧差を測定する公知の種々の回路構成を採用することができる。
発明者らが上記のアナログ回路を検討したところ、図6に示すN型MOSFET群の製造ばらつきが問題となることがわかった。後述する理由によって、各MOSFETの閾値電圧はばらつきを持ち、その結果としてソース−ドレイン間の電流特性にもばらつきを生じる。このことは、図6の回路においてスピンを+1側ないしは−1側に引っ張る力に、MOSFET毎の差が出てしまうということである。例えば、仮に図6のCT側において、NUTとIU1Tがゲートに接続されているMOSFETの方が他のMOSFETと比較してON時のドレイン間電流(IDS)が多く流れるように製造ばらつきがあった場合、NUTとIU1Tに対応する相互作用(上側に隣接するスピンと+1の係数で接続されているときに、スピンを+1側に向けようとする力)は、他の相互作用と比較して大きく影響することになってしまう。
特にこの問題が顕在化するのは、+1側に向かう力と−1側に向かう力が拮抗した時(これ以降、この状態を拮抗状態と呼ぶ)である。拮抗状態では、スピンの向きを+1にしても−1にしてもエネルギーに変化は無い。一般的には、探索空間を広げる観点から、拮抗状態ではスピンの向きをランダムに選ぶことも多い。もしくは、エネルギーに変化が無いため現状維持という意味で、前のスピンの値を保持するようにすることも多い。ところが、上記の製造ばらつきの問題から、CTとCBの電圧降下の度合いが異なり、常にどちらか一方がより電圧が低くなる、つまり常に多数決の勝者になってしまうことが実験的にも分かっている。よって、拮抗状態のスピンの値(これ以降、これを拮抗値と呼ぶ)は製造ばらつきによって決まるといえる。
拮抗状態の問題は図6〜図8の例に限らず、特にアナログ計算機の本質的な課題であると言うことが出来る。なぜならば、前述したような製造ばらつきを極力抑えたとしても、拮抗状態では微小なばらつきがセンスアンプの出力結果ではスピン値が+1もしくは−1のどちらかに固定的に決まるという現象として現れるからである。
トランジスタ(ここでは主にMOSFETが用いられる)の製造ばらつき要因として、主に製造プロセス上の寸法誤差、RDF(Random Dopant Fluctuation、詳細は例えば非特許文献1を参照)、及びRTN(Random Telegraph Noise、詳細は例えば非特許文献2を参照)がある。
製造プロセス上の寸法誤差はフォトリソグラフィ等の技術によって半導体基板上に回路を構成する幾何学的図形を形成する際の誤差により、トランジスタの特性が異なってしまうという問題であり、製造時に決定する静的な誤差である。
RDFは半導体製造時に不純物(DonorないしはAcceptor、総称してDopant)をドーピングするときに生じる、不純物原子の位置と密度のランダムなばらつきのことで、これによってトランジスタの閾値電圧にばらつきが生じる。RDFによるばらつきは製造時に決まり、その後トランジスタの寿命の中で変化することはほとんど無い。また、不純物原子の位置と密度のランダムなばらつきに起因するという点から、トランジスタ自体の大きさが大きい場合には、その影響は相対的に小さく見え、微細化の進展と共にその影響が大きく見えてくる。微細化プロセスの中でも、特に閾値電圧ばらつきを低く抑える必要があるトランジスタについては、ゲート長を長くするなど、ゲートの面積を大きく取って、RDFの影響を緩和する策がとられる。
RTNはトランジスタのゲートにある絶縁膜(酸化膜など)にキャリアが捕縛、解放されることにより、動的に閾値電圧ばらつきが生じる現象である。キャリアの捕縛、解放が起こる時定数は様々であり、様々な時定数のRTN現象が合わさって閾値電圧ばらつきとして観測される。その時定数は製造時に何らかの要因で決まると考えられているが、時定数が極めて短いものから長いものまであるため、製造時のスクリーニングを困難にする要因となる。RDFとの違いとして、微細化に伴って影響を及ぼす度合いがRDFよりRTNの方が強いこと、閾値電圧の動的な変化を及ぼすことがあげられる。
本発明者らが検討したところによれば、本実施例で示したイジングモデル計算機300を、65nm程度の世代のプロセスで製造した場合には、寸法誤差やRDFによると推定される静的な影響が主体的であり、RTNの影響と考えられるような動的なばらつきはまだ顕在化していない。
そこで、本発明者らは、各個体の特性を事前に計測し、その計測結果に基づいて各個体に入力する問題を改変することで、各個体を構成する素子の特性ばらつきに適応するという技術を考案した。また、この方法では各個体の特性の計測は基本的に一度だけ行えばよいため、工場出荷時に計測して、その情報と対応する個体を共に顧客に提供するといった形態も可能である。
本実施例における特性ばらつきへの対処は、イジングモデル計算機200を制御する情報処理装置100の制御プログラム121及び特性計測プログラム122によって実現される。
図9は制御プログラム121の動作を示すフローチャートである。このフローチャートに基づく動作は以下の通りである。これらの動作は、ソフトウェアである制御プログラム121による情報処理が、CPU110、RAM120、HDD160等、情報処理装置100のハードウェア資源を用いて実現している。全体の制御や計算はCPU110が行い、RAM120、HDD160へのリード・ライトも制御する。これらは、以下の他のフローチャートでも同様である。
ステップ901:本フローチャートはイジングモデルをイジングモデル計算機200で求解するための手順である。本フローチャートの実行に先立ち、ユーザは、入力装置を経由して入力する等して、問題データ161をHDD160上に用意したものとする。なお、情報処理装置100は複数のイジングモデル計算機200A,200Bを有しているが、ユーザが問題データ161を解かせるイジングモデル計算機を自分で選択するか、ステップ901の段階でCPU110が適宜選択するものとする。これ以降の説明でイジングモデル計算機200は、ステップ901で選択されたイジングモデル計算機のことを称するものとする。
ステップ902:情報処理装置100が備えるイジングモデル計算機200に対応する特性データ162がHDD160上に存在するかを検査する。存在しない場合、ステップ903で特性データ162を生成する。存在する場合、ステップ903を実行せず、ステップ904に遷移する。なお、特性データ162の詳細は後述する。
ステップ903及びステップ904:特性計測プログラム162を実行して、イジングモデル計算機200A、200Bに対応する特性データ162を生成する。なお、特性計測プログラム162の詳細は後述する。
ステップ905:特性データ162を元にして、特性ばらつきを回避できるように問題データ161を変換する。このステップで行われる変換の詳細は後述する。変換した問題データは変換後問題データと称する。
ステップ906:イジングモデル計算機200に変換後問題データを入力する。具体的には、変換後問題データを構成する相互作用係数と外部磁場係数を、イジングモデル計算機200を構成するメモリセル群に書き込む。この書込みは入出力コントローラ150がイジングモデル計算機200のSRAM互換インタフェース222を制御することで実現される。そのため、ステップ906ではCPU110がMMIO等の手段によって、入出力コントローラ150を制御する。
ステップ907:イジングモデル計算機200に対して、求解を指示する。具体的には、イジングモデル計算機200の相互作用アドレス280、相互作用クロック281、及び、乱数発生クロック260を制御する。この制御も直接は入出力コントローラ150によって行われるので、CPU110はMMIO等の手段によって、入出力コントローラ150を制御する。
ステップ908:イジングモデル計算機200が求解した結果、すなわちスピン配列を読み出す。ステップ906と同様にSRAM互換インタフェース222を制御するために、CPU110がMMIO等の手段で、入出力コントローラ150を制御する。
ステップ909:ステップ908で読みだしたスピン配列を変換し、問題データ161に対する解を得る(逆変換後スピン配列と称する)。イジングモデル計算機200で解いた問題は変換後問題データであるから、ステップ908で得られる解は変換後問題データの解である。この解を、変換前の問題データ161の解として解釈する作業が必要である。この解釈によって得られたスピン配列が逆変換後スピン配列である。解釈の方法の詳細は後述する。
ステップ910:逆変換後スピン配列を求解結果としてユーザに呈示する。また求解結果は、情報処理装置100のHDD160に格納してもよいし、そのまま出力装置を介して外部に出力してもよい。
図10は特性データ161の構成の一例である。特性データ161は本実施例の場合、各スピンの拮抗値を示したリストである。拮抗値はイジングモデル計算機の個体毎に異なるため、特性データ161は個体毎のエントリ(個体情報エントリ1010,1020)を持つ。例えばイジングモデル計算機200Aの特性は個体情報エントリ1010に、イジングモデル計算機200Bの特性は個体情報エントリ1020に格納される。
各エントリは、例えば個体情報エントリ1010の例で説明すると、シリアル番号部1011、タイムスタンプ1012、拮抗値記録部1013のよう構成をとる。個体情報エントリ1010はイジングモデル計算機の個体に対応することからイジングモデル計算機の個体を識別する情報、すなわちシリアル番号を個体情報エントリに含めることで、個体情報エントリ1010と個体との紐付けを行う。また、本発明者らの検討したところによれば、拮抗値の特性は製造時にほぼ決定されるが、経年変化が皆無とは言い切れないので、タイムスタンプ1012に個体情報エントリ1010を構成した情報を計測した日付及び時刻を格納する。拮抗値は拮抗値記録部1013に、イジングモデル計算機200の各スピンの拮抗値を、各スピンの座標(本例ではX座標、Y座標、Z座標)と共に記録している。
図11に特性データ161を生成するための特性計測プログラム162の動作をフローチャートとして示す。このフローチャートに基づく動作は以下の通りである。
ステップ1101:本フローチャートはイジングモデル計算機200の有する各スピンの拮抗値を計測するための手順である。なお、情報処理装置100は複数のイジングモデル計算機200A,200Bを有しているが、本手順はイジングモデル計算機それぞれに対して実行される(並行して実行しても良い)。
ステップ1102:拮抗値を測定するための問題(測定用モデル)を作成する。拮抗状態を引き起こさせるためのモデルの例を図12に示す。
図12のモデルは、あるスピンの拮抗値を知るために、その両端(Y軸方向+1とZ軸方向+1)のスピンとそれぞれ+1及び−1の相互作用を設け、かつ、両端のスピンの値はそれぞれ+1にして拮抗状態を生成するものである。このモデルにおいて、温度0(ランダムなスピン反転を行わない状態)の元に1回相互作用を行うと、注目しているスピンはその製造ばらつきによって+1ないしは−1に遷移する。なお、1個のスピンの拮抗値を計測するために、例えば図12に示すようにY方向とZ方向に隣接するスピンをそれぞれ1個ずつ用いると、それらのスピンを除いた他のスピンは、同様の相互作用を1つの測定用モデルに含めることで同時に計測することが出来る。例えば、図4に示したイジングモデルであれば、2個の測定用モデルを順次用いることで全てのスピンを測定できる。つまり1個目の測定用モデルでは、座標(X,Y,Z)=(0,0,0),(1,0,0),(2,0,0),(0,1,1),(1,1,1),(2,1,1),(0,2,0),(1,2,0),(2,2,0)を測定対象とする。そして、2個目の測定用モデルでは、座標(X,Y,Z)=(0,0,1),(1,0,1),(2,0,1),(0,1,0),(1,1,0),(2,1,0),(0,2,2),(1,2,2),(2,2,2)を測定対象とする。
ステップ1103:ステップ1102で作成した測定用モデルをイジングモデル計算機200に入力する。入力の方法はステップ906と同様である。
ステップ1104:イジングモデル計算機200に、当該測定用モデルで測定対象となっているスピンそれぞれについて、相互作用を実行するように求解を指示する。測定対象となっているスピンは、図12で説明したように、測定用モデルにより拮抗状態に設定されている。なお、温度は0とする。すなわち、乱数発生クロック260を止めるか、乱数発生器250ないしはビット調整器251の設定を変更するなどして、ランダムなスピン反転は抑止する。
ステップ1105:イジングモデル計算機200からスピン配列を読み出す。その方法はステップ908と同様である。
ステップ1106:ステップ1105で読みだしたスピン配列のうち、ステップ1102で生成した測定用モデルで測定対象となっているスピンの値を当該スピンの拮抗値として特性データ161に記録する。
ステップ1107:全てのスピンの拮抗値を測定したかを判定する。もし、全てのスピンの測定が完了していなければ、その残りのスピンを測定するための測定モデルを生成して、再度測定を行うために、ステップ1102にも戻る。全てのスピンの測定が完了したら、ステップ1108に遷移する。
ステップ1108:特性データ161の生成を完了した後に、特性計測プログラム162は終了する。特性データ161は、制御プログラム121が利用できるように、RAM120あるいはHDD160に保持する。あるいは、イジングモデル計算機200内のフラッシュメモリ等の不揮発メモリ270に格納しておいてもよい。イジングモデル計算機200に自分の特性データ161を持たせておけば、イジングモデル計算機200を他の情報処理装置で使用する場合でも、特性データ161を利用することができる。
図9のステップ905に示した、問題データの変換について説明する。特性データ161に示された拮抗値と、拮抗時にあるべきスピン値(以降、希望値と呼ぶ)に基づいて、イジングモデル(問題データ)を変換し、ステップ909との組合せで、拮抗時のスピン値が希望値になるようにモデルを変換する。ここで、i番目スピンの拮抗値をui、i番目スピンの希望値をeiとする。この時、相互作用係数Ji,jはJi,j×ui×uj×ei×ejに変換する。また、外部磁場係数hiはhi×ui×eiに変換する。
ステップ905と対になる変換としてステップ909では、ステップ908で読みだしたスピン値から、変換前のモデルの解に変換する。読みだしたスピン値をai、変換前の問題データの解としてのスピン値をσiとした時、σi=ai×ui×eiとする。
具体的な例を説明する。図12に示すようなモデルで、上記のステップに基づいて、製造ばらつきに関わらず拮抗時には希望値が得られることを示す。3個のスピンσ1、σ2、σ3があり、σ1の値を決める相互作用を考える。σ2とσ3は両方とも+1になっているものとする。拮抗状態を作るために相互作用係数J1,2は+1、J1,3は−1とする。測定によって得られた3個のスピンそれぞれの拮抗値はu1=+1,u2=+1,u3=+1,希望値はe1=−1,e2=+1,e3=+1とする。このモデルをそのままイジングモデル計算機に解かせると、σ1=u1=+1という答えが得られる。そこで、このモデルをステップ905に示すように変換すると、J1,2=+1×+1×+1×−1×+1=−1、J1,3=−1×+1×+1×−1×+1=+1というように変換される。この変換したモデルをイジングモデル計算機300に入力すると、やはり拮抗するのでa1=+1という結果が得られる。この結果をステップ909に示すようにσ1=+1×+1×−1と変換してσ1=−1を得る。
つまり、ステップ905とステップ909で行う変換は、素子の製造ばらつきによって拮抗値が決まっているときに、拮抗状態になった時の値をステップ909での後処理によって希望値に変換できるように、ステップ905で係数の正負を入れ替えていると言うことができる。そして、ステップ909で解となるスピンの正負を入れ替えることにより希望値を得ることができる。
この方式では、希望値が決まっている必要がある。実用上は、各スピンの外部磁場係数hiが正であれば希望値を+1、負であれば希望値を−1とする。これは、相互作用及び外部磁場の総和として拮抗状態が生じた場合に、外部磁場を優先するという考え方に基づいている(もしくは、外部磁場が相互作用より微小量大きいという考え方もできる)。希望値が決まっている場合には、その値を例えば問題データ161と関連付けてHDD160に保持しておけばよい。あるいは、問題データ161とは別に入力して、制御プログラム121が利用できるようにRAM120に保持しておいてもよい。
もしくは、イジングモデル計算機200のようにランダム性を利用する解法では、一般的に同じ問題を複数回解いて、その中の最良解を得ることが多い。そのような場合には問題を解く毎に希望値をランダムに決めて、複数回問題を解くことを試行する。この場合も、本変換を用いず拮抗状態で拮抗値に固定されてしまう場合と比べて、大きな空間を探索することができるため、製造ばらつきの影響を回避して解の品質向上に寄与することができる。ランダム性を利用する場合には、予めランダムなデータを保持しておいてもよいし、その都度生成してもよい。
また、希望値を予め決めない別の方式として、問題を1回解いている間に、その過程において希望値をランダムに変更する方式がある。このように求解の途中において、異なる希望値を与えて変換した問題データを入力すれば、一回の求解において、その過程において拮抗状態が生じることで探索すべき解空間が狭まってしまうことを防ぐことができる。この場合、基本的な処理の流れは図9に示す例と同様であるが、問題データを変換する処理904の間、途中で希望値がランダムに変更される。スピン配列を変換する処理909でも、問題データに対応した変換処理が行われる。希望値を変更するタイミングは任意であるが、変更の周期を短くすれば効果が大きくなる反面、処理が複雑になる。
以上では希望値をランダムに変えることを想定したが、希望値が2値を取る場合は、交互に変更する方式も考えられる。
なお、本実施例ではイジングモデルと相似な構造を持つイジングモデル計算機200を例として実施例を示したが、ニューラルネットワークと相似な構造を持つニューロ計算機についても同様に実施することができる。ニューラルネットワークでは、他のニューロンの発火状態(例えば、数値の0と1で表現される)を受け取り、自ニューロンが発火するかどうかを、他のニューロンの発火状態とニューロン間のシナプス結合係数を乗じたものの総和を計算し、総和を閾値関数に通してその出力で決定する。この動作をアナログ電子回路で実装しようとすると、本実施例のイジングモデル計算機と類似した構造を持つ(発火状態をスピン値、シナプス結合係数を相互作用係数と読みかえればイジングモデルとほぼ同じ構造となる)。
ニューロ計算機の場合も相互作用回路(シナプス結合回路)の構成は、基本的に図6に示した構成が使用可能であり、スピン値NUT等の代わりに発火状態、相互作用係数IU1Tの代わりにシナプス結合係数を入力すればよい。
実施例2は、イジングモデル計算機200で拮抗状態以外のばらつきも考慮する場合も考える。実施例1では、イジングモデル計算機200の相互作用回路310におけるMOSFETの製造特性ばらつきに起因する、相互作用が拮抗したときに顕在化するスピン値が固定的な方向に倒れてしまう問題に対応する実施例を示した。実施例1で示した方式は、相互作用回路310にそれを補償するための付加的な回路を加えること無く、イジングモデル計算機200とそれを含んだ情報処理装置100の制御で対応する方法であった。
実施例2では、さらに製造ばらつきの影響が大きくなり、その影響が拮抗状態のみならず、それ以外の相互作用にも影響を及ぼすような場合に、対応できる構成の例を開示する。
一般的にMOSFETのドレイン間電流(IDS)のばらつきは、チャネル長(L)とチャネル幅(W)に依存しており、1/√(W×L)に比例することが知られている。そこで、IDSのばらつきを1/nに抑制するためには、(W/L)をn2倍にしなければならない。このことは、ばらつきの抑制と微細化(高集積化)が相反関係になることを示している。
一方で、実施例1に示したイジングモデル計算機200よりも、複雑なイジングモデル(相互作用の関係を増やす、ないしは、相互作用係数・外部磁場係数の値域を広げる)に対応しようとすると、ばらつきの抑制に対してより厳しい要求が科される。
例えば、実施例1のイジングモデル計算機200は、相互作用係数及び外部磁場係数の値域は+1〜−1であった。また、相互作用と外部磁場を併せて、1個のスピンには6種類の力がかかっている(相互作用の上下左右奥行方向で5種に加えて外部磁場で合計6種)。この時、+1に向ける力と−1に向ける力が半々の時に拮抗状態となり、この拮抗状態における製造ばらつきへの対応が実施例1であった。
ここで、例えば、+1に向ける力と−1に向ける力が半々で無い時は、当然より力が大きい方向にスピンが向くことが期待される。例えば、6種の力のうち外部磁場が無く、相互作用5方向で、+1側に3、−1側に2の力で引っ張られるという3対2のケースを考える。この時は、3の力がある+1側になるべきである。つまり、相互作用回路310ではCT側回路でより多くの電流が流れて、CTの電圧降下の幅が大きいはずである。
しかし、そのためには、MOSFETの特性ばらつきが十分小さい範囲に収まっている必要がある。例えば相互作用回路310のCT側回路とCB側回路で最大に流れる電流(同時にONになりうる全てのMOSFETをONにした時の電流)を1とする。その時に、3対2であれば、理想的にはCT側回路は(1/6)×3=1/2の電流が、CB側回路は(1/6)×2=1/3の電流が流れる。つまり、CT側回路とCB側回路の電流差は1/6であるため、このケースではCB側回路のMOSFETの電流ばらつきの結果、1/6以上の電流をさらに流してしまうと正しく動作しない。もしくは、CT側の電流がばらつき起因で流れる量が少なく、CB側の方は逆に多いというような場合も問題になる。
そのため、上記の問題が生じないように、IDSのばらつきを抑制できるようにMOSFETの大きさ(W,L)を決めて設計するわけだが、それも相互作用や外部磁場を複雑化すると問題になってくる。例えば、実施例1のように、相互作用係数と外部磁場係数が+1〜−1で、相互作用係数と外部磁場係数を併せて6種の力がある場合に、上記の問題が生じない程度にIDSのばらつきをおさえることに成功した設計があるとしよう。この設計を元に、前述したばらつきとチャネル幅・チャネル長の関係で、複雑化させた設計で面積効率がどの程度落ちるかを示す。
例えば、係数の幅を+3〜−3にすると、現状の設計と比べてCT側回路、CB側回路それぞれ3倍の数のトランジスタが必要になる。現状では6種の力それぞれに4個のMOSFET(但し、同時にONになるのはそのうち2個)を用いているが、1種に4×3=12個のMOSFET(但し、同時にONになるのは最大6個)を必要とする。この構成では、拮抗状態が起きる時には係数+3/−3をそれぞれ3方向ずつで使う9対9のケースになる。そこで、拮抗状態一歩手前の9対8のケースについて考えると、CT側回路は(1/18)×9=9/18の電流が、CB側回路は(1/18)×8=8/18の電流が流れることになるので、その差は1/18である。係数+1〜−1の場合と比べると、差が1/3に縮小している。つまり、MOSFETの特性ばらつきも1/3に収めなければならず、そのためにはMOSFETのサイズを9倍にしなければならない。
このことから、相互作用が複雑になると、MOSFETの特性ばらつきを抑えるためにMOSFETを多くしなければならない上に、元々複雑な相互作用を実現するためにMOSFETの数が増えている。例えば上記の場合だと特性ばらつきを抑えるためのサイズ9倍に加えて、元々複雑な相互作用を実現するために3倍の数のトランジスタを用いているので、合計27倍の面積を必要とする。このため、スケーラビリティを著しく阻害する要因となる。
そのため、本実施例では拮抗状態以外でもIDSのばらつきが顕在化する場合に対応する例を示す。例えば拮抗状態ではない3対2のケースであったとしても、CT側ないしはCB側のMOSEFTのIDSばらつきによって、3の力で引く側よりも2の力で引く側が強いと誤認されてしまうようなケースに対応するため例を示す。
図13は本実施例の実施の形態であるアナログ計算機1300の構成図である。このアナログ計算機1300は実施例1のイジングモデル計算機200Aと同様に、情報処理装置100のような装置の一部に組み込まれて利用することを想定している。
図13は説明の都合上、実施例1のイジングモデル計算機200を抽象化したアナログ計算機として説明する。そのアナログ計算機1300は、アナログ計算ユニット1310A〜E(A〜Eを特に区別する必要が無い時は、単に1310として参照する)、アナログ演算回路1311、記憶素子1312、検査回路1313、ユニット間インタフェース1320、検査インタフェース1330から構成されている。
これは実施例1に照らし合わせれば、イジングモデル計算機200がアナログ計算機1300に対応し、スピンユニット300がアナログ計算ユニット1310に対応する。相互作用回路310が、例えば図6と図7で具体例を示したアナログ演算回路1311に対応する。また、スピンユニット300内のメモリセルアレイが記憶素子1312に対応し、スピンユニット間で隣接スピンユニットのスピン値を伝送する伝送線がユニット間インタフェース1320に対応する。なお、ユニット間インタフェース1320及び検査インタフェース1330は図13上ではバス状のトポロジになっているが、このトポロジは任意である。実施例1のイジングモデル計算機200の場合には、ユニット間インタフェースが3次元格子状のトポロジを持っていると言うことが出来る。
検査回路1313は、アナログ演算回路1311の処理結果が誤る可能性がある場合を検出して、その結果を検査インタフェース1330に出力する。アナログ演算回路1311の処理結果が誤る場合とは、2種類のケースがある。第一には、既に述べた拮抗状態である。第二には、拮抗状態ではないものの(つまりアナログ演算回路1311の製造ばらつきが一切なければ誤ることはないものの)、+1側に引く力と−1側に引く力が近いため、製造ばらつきによっては誤判定する可能性があるケースである。どの程度の製造ばらつきが生じるかは、プロセスの世代やMOSFETの設計パラメータからある程度推定することが可能である。
一般的に、アナログ演算回路1311のようなアナログ電子回路で生じる各種ばらつきは、それを打ち消すための回路を付加して補償することが多く行われているが、このような方法では、元の回路の2倍近い物量が必要となることも多く、スケーラビリティを下げる原因となる。
そこで、本実施例では後述するように、アナログ計算機1300に組み込まれた簡単な検査回路1313と、アナログ計算機1300を含む情報処理装置100の全体制御の組み合わせで、アナログ計算機1300の物量増加を抑えて、前述したような状況に対処する。
図14に検査回路1313の構成の一例を示す。検査回路1313では前述した2ケースを一括して検出するために、CT側回路とCB側回路の電圧差が一定の範囲内に収まっているかどうかを検出する。一定の範囲内に収まった場合には、誤動作の可能性ありと判断する。具体例としては、CT側回路とCB側回路の電圧差が所定閾値より小さい場合に誤動作の可能性ありと判定する。電圧差を許容する範囲は、どの程度の製造ばらつきが生じるかの見積によって設定できる。
図14の検査回路1313は図7のラッチ型センスアンプを基本構造としている。センスアンプは2種類の信号(CTとCB)の電圧差を増幅する役割だが、図14に示すMOSFET1401の駆動力を下げると、電圧差の増幅が緩やかとなり、かつ、その勾配は電圧差が小さいほど緩やかなものとなる。この緩やかな勾配を検出することで、電圧差が許容範囲内かどうかを検出する。
図15は検査回路1313を動作させた時のタイムチャートであるが、これを参照しながら検査回路1313の構造と動作を詳説する。図8のタイムチャートと同様に、プリチャージしたCT/CBから隣接スピン値、相互作用係数、及び、外部磁場係数でON/OFFが決まるMOSFET群で電流を引き抜き、CT/CBに電圧降下を生じさせる。その後、CLKIBをHIGHとしてセンスアンプを作動させるが、前述したようにMOSFET1401の駆動力をおさえているため、CLT、CLBに現れる電圧の傾きは緩やかなものとなる。さらに、CTとCBの電圧差が大きい場合と小さい場合を比較すると、小さい場合の方がより緩やかな電圧変化を見せる。よって、CTとCBの電圧差はCLTとCLBの電圧変化の傾きとして現れ、その傾きが一定より緩いことを検出することで、検査回路1313を実現する。
傾きが一定より緩いことを検出するために、本実施例では閾値を持つバッファと排他的論理和(XOR)回路を用いる。XORからの出力OUTAを、CLKIBを微小時間Δt遅延させたタイミングで観測する。観測されたOUTAのレベルがHIGHかLOWかで誤動作の可能性を検査することができる。このタイミングで観測するためには、例えばエッジトリガ型のフリップフロップ(FF)をΔt遅延させたCLKIBで駆動すれば良い。
なお、検査回路1313の構造が図7のセンスアンプと類似していることから分かるように、センスアンプと兼用することも可能である。なお、図14の例は一例であり、センスアンプと全く別個にCTとCBの電圧差を測定する回路を設けてもよい。この場合は、電圧を測定する公知の種々の回路構成を採用することができる。
図16にこの検査回路1313を用いて、アナログ計算機1300の誤動作に対応する情報処理装置100の動作をフローチャートとして示す。
ステップ1601:本フローは、実施例1の図9に示した情報処理装置100によるイジングモデル計算機200の制御(本実施例ではアナログ計算機1300の制御)のうち、ステップ907で行われる処理を、検査回路1313を用いて制御する詳細なフローを示すものである。
ステップ1602:アナログ計算機1300が有する各アナログ計算ユニット1310A〜1310Bをそれぞれ一回ずつ動作させて、演算を実行する。
ステップ1603:ステップ1602で行った演算の結果、検査回路1313でアナログ演算ユニット1311の誤動作の可能性が検出されていないかを検査する。誤動作の可能性が検出されていなければ、ステップ1607に進む。誤動作の可能性が検出されていれば、ステップ1604に進む。
ステップ1604:誤動作があった場合、検査回路1313から検査インタフェース1330を介して得られた情報で、誤動作があった可能性のあるアナログ計算ユニット1310を特定し、当該ユニット及び当該ユニット周辺の記憶素子の値を読み出す(例えば、実施例1のイジングモデル計算機200であれば、隣接スピンのスピン値だけを読み出せばよい)。
ステップ1605:誤動作があったアナログ計算ユニット1310が行うべき演算を、ステップ1604で得た情報を用いて、情報処理装置100のCPU110上で代替して行う。
なお代替するCPUは、情報処理装置100のCPUを使用してもよいが、アナログ計算機1300の中あるいはこれに付随して、専用のCPUあるいは論理回路を備えてもよい。アナログ計算機1300の中に配置する場合には、複数のアナログ演算回路1311に対して1つのCPUを備えるようにすれば、回路規模の縮小効果を得ることができる。
専用のCPUはソフトウェアによりプログラム可能なものでもよいし、FPGA(Field Programmable Gate Array)、ASIC(Application Specific Integrated Circuit)などのハードウェアでも実現できる。また、専用のハードウェアで構成してもよい。専用のハードウェアとしては、例えば図3に示した相互作用回路310相当の回路を、デジタル演算回路として使用できる。アナログ演算回路1311に誤動作可能性のある場合には、このデジタル演算回路でアナログ演算回路1311を代替させればよい。デジタル演算回路は、アナログ計算機1300の外部あるいは内部に設けることができる。複数のアナログ演算回路1311に対して1つのデジタル演算回路を備えるようにすれば、回路規模の縮小効果を得ることができる。
ステップ1606:ステップ1605の演算結果を、対応するアナログ計算ユニット1310の記憶装置1312に書き戻す。
ステップ1607:本フローで行うべき所定の動作回数を満たしたかを確認する。満たしていなければ、ステップ1602に戻って繰り返す。
ステップ1608:所定の動作回数を満たしたら、本フローを終了する。
この動作フローによって、アナログ計算機ユニット1310が備えるアナログ演算回路1311において、製造ばらつきに起因する誤動作の可能性がある時、その時に限ってアナログ演算回路1311の役割を情報処理装置100のCPU110が一時的に代替することが出来るようになり、情報処理装置100全体として誤動作の無い処理が可能となる。
なお、アナログ計算機ユニット1310の代替を担うCPU110は、アナログ計算機1300の中に備えても良い。