IP Force 特許公報掲載プロジェクト 2022.1.31 β版

知財求人 - 知財ポータルサイト「IP Force」

▶ 株式会社東芝の特許一覧 ▶ 東芝ソリューション株式会社の特許一覧

特許7421291情報処理装置、プログラム、情報処理方法、および電子回路
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2024-01-16
(45)【発行日】2024-01-24
(54)【発明の名称】情報処理装置、プログラム、情報処理方法、および電子回路
(51)【国際特許分類】
   G06F 17/16 20060101AFI20240117BHJP
   G06F 17/10 20060101ALI20240117BHJP
【FI】
G06F17/16 M
G06F17/10 S
【請求項の数】 20
(21)【出願番号】P 2019164742
(22)【出願日】2019-09-10
(65)【公開番号】P2021043667
(43)【公開日】2021-03-18
【審査請求日】2022-03-14
(73)【特許権者】
【識別番号】000003078
【氏名又は名称】株式会社東芝
(73)【特許権者】
【識別番号】301063496
【氏名又は名称】東芝デジタルソリューションズ株式会社
(74)【代理人】
【識別番号】100091982
【弁理士】
【氏名又は名称】永井 浩之
(74)【代理人】
【識別番号】100091487
【弁理士】
【氏名又は名称】中村 行孝
(74)【代理人】
【識別番号】100105153
【弁理士】
【氏名又は名称】朝倉 悟
(74)【代理人】
【識別番号】100107582
【弁理士】
【氏名又は名称】関根 毅
(74)【代理人】
【識別番号】100118876
【弁理士】
【氏名又は名称】鈴木 順生
(74)【代理人】
【識別番号】100210664
【弁理士】
【氏名又は名称】和田 慎太郎
(72)【発明者】
【氏名】酒井 良哲
(72)【発明者】
【氏名】後藤 隼人
(72)【発明者】
【氏名】辰村 光介
(72)【発明者】
【氏名】遠藤 浩太郎
(72)【発明者】
【氏名】鈴木 賢
【審査官】坂東 博司
(56)【参考文献】
【文献】特開2019-145010(JP,A)
【文献】米国特許出願公開第2013/0046520(US,A1)
【文献】Hayato Goto ET AL,Combinatorial optimization by simulating adiabatic bifurcations in nonlinear Hamiltonian systems,Science Advances,米国,AAAS,2019年04月19日,1~8 ,https://www.science.org/doi/pdf/10.1126/sciadv.aav2372,令和4年12月28日検索
【文献】TATSUMURA KOSUKE ET AL,FPGA-Based Simulated Bifurcation Machine,2019 第 29 回国際フィールド会議 プログラマブルロジックとアプリケーション (FPL),米国,IEEE,2019年09月08日,59~66,https://ieeexplore.ieee.org/stamp/stamp.jsp?tp=&arnumber=8892209,令和4年12月28日検索
【文献】田中 宗,量子アニーリング - 計算アルゴリズムの観点から -,電子情報通信学会論文誌C,日本,電子情報通信学会,2018年02月13日,Vol.J101-C No.3,166-171,URL=https://search.ieice.org/bin/pdf_link.php?category=C&lang=J&year=2018&fname=j101-c_3_166&abst=,Online ISSN: 1881-0217
(58)【調査した分野】(Int.Cl.,DB名)
G06F 17/16
G06F 17/10
(57)【特許請求の範囲】
【請求項1】
プロセッサ、を備え、目的関数が与えられた場合に、前記目的関数に対応する項を含むハミルトニアンによって規定される力学系の位置ベクトル、運動量ベクトル及び力ベクトルにそれぞれ対応する、同じ要素数を有する第1ベクトル、第2ベクトル及び第3ベクトルを用いて前記目的関数を評価指標とした最適化問題の解を探索する、情報処理装置であって、
前記プロセッサは、
前記目的関数を前記第1ベクトルのそれぞれの要素について偏微分した形式の基本式に基づき、前記第3ベクトルのそれぞれの要素を計算し、
前記基本式の変数は、
前記第1ベクトルの要素、または、
前記第1ベクトルの要素を所定の第1値もしくは前記第1値より大きい所定の第2値のいずれかの値に変換する第1関数で変換して得られる第4ベクトルの要素
を用いて表現され、
前記第1ベクトルの要素に、前記第2ベクトルの対応する要素に比例した値を加算することによって前記第1ベクトルの要素を更新し、
値が前記第1値より小さい前記第1ベクトルの要素を前記第1値に設定し、
値が前記第2値より大きい前記第1ベクトルの要素を前記第2値に設定し、
前記第2ベクトルの要素に、更新回数に応じて単調増加または単調減少する第1係数を比例係数とする前記第1ベクトルの対応する要素に比例した値、ならびに、前記第3ベクトルの対応する要素に比例した値を加算することによって前記第2ベクトルの要素を更新し、
前記第3ベクトルの計算、前記第1ベクトル及び前記第2ベクトルの更新を繰り返し実行し、前記最適化問題の解を探索する、
情報処理装置。
【請求項2】
前記プロセッサは、値が前記第1値より小さい前記第1ベクトルの要素に対応する前記第2ベクトルの要素、または、前記第2値より大きい前記第1ベクトルの要素に対応する前記第2ベクトルの要素を、もとの前記第2ベクトルの要素に、第2係数を乗じた値に更新するように構成されている、
請求項1に記載の情報処理装置。
【請求項3】
前記プロセッサは、第1ベクトルの要素を変数として計算した前記基本式の値を前記第1関数で変換した値に基づいて前記第3ベクトルのそれぞれの要素を更新するように構成されている、
請求項1または2に記載の情報処理装置。
【請求項4】
前記プロセッサは、前記第1ベクトルのノルム、または、前記第4ベクトルのノルムを前記第3ベクトルのノルムで除算した第3係数を計算し、
前記第2ベクトルの要素に、前記第1係数と更新された前記第1ベクトルの対応する要素との積を重み付けした値ならびに、前記第3ベクトルの対応する要素を前記第3係数で重み付けした値を加算することによって前記第2ベクトルの要素を更新するように構成されている、
請求項1ないし2のいずれか一項に記載の情報処理装置。
【請求項5】
前記プロセッサは、前記第1ベクトルどうしの内積、または、前記第4ベクトルどうしの内積を、前記第1ベクトルと前記第3ベクトルの内積の絶対値、または、前記第4ベクトルと前記第3ベクトルの内積の絶対値で除算した第3係数を計算し、
前記第2ベクトルの要素に、前記第1係数と更新された前記第1ベクトルの対応する要素との積を重み付けした値ならびに、前記第3ベクトルの対応する要素を前記第3係数で重み付けした値を加算することによって前記第2ベクトルの要素を更新するように構成されている、
請求項1ないし2のいずれか一項に記載の情報処理装置。
【請求項6】
前記プロセッサは、前記第3係数がローパスフィルタを通過した後の値である第4係数を計算し、前記第3係数に代わり、前記第4係数を用いて前記第2ベクトルの要素を更新するように構成されている、
請求項4ないし5のいずれか一項に記載の情報処理装置。
【請求項7】
前記第1値は-1、前記第2値は1であり、
前記目的関数は、イジングモデルのエネルギー式に相当する項を含んでいる、
請求項1ないし6のいずれか一項に記載の情報処理装置。
【請求項8】
前記目的関数は、多体相互作用の項を含んでいる、
請求項7に記載の情報処理装置。
【請求項9】
目的関数が与えられた場合に、前記目的関数に対応する項を含むハミルトニアンによって規定される力学系の位置ベクトル、運動量ベクトル及び力ベクトルにそれぞれ対応する、同じ要素数を有する第1ベクトル、第2ベクトル及び第3ベクトルを用いて前記目的関数を評価指標とした最適化問題を探索する計算であって、前記目的関数を偏微分した形式の基本式に基づく計算をコンピュータに実行させるプログラムであって、
変数が、前記第1ベクトルの要素、または、前記第1ベクトルの要素を所定の第1値もしくは前記第1値より大きい所定の第2値のいずれかの値に変換する第1関数で変換して得られる第4ベクトルの要素である前記基本式に基づき、前記第3ベクトルのそれぞれの要素を計算するステップと、
前記第1ベクトルの要素に、前記第2ベクトルの対応する要素に比例した値を加算することによって前記第1ベクトルの要素を更新するステップと、
値が前記第1値より小さい前記第1ベクトルの要素を前記第1値に設定するステップと、
値が前記第2値より大きい前記第1ベクトルの要素を前記第2値に設定するステップと、
前記第2ベクトルの要素に、更新回数に応じて単調増加または単調減少する第1係数を比例係数とする前記第1ベクトルの対応する要素に比例した値ならびに、前記第3ベクトルの対応する要素に比例した値を加算することによって前記第2ベクトルの要素を更新するステップと
を含
前記第3ベクトルの計算、前記第1ベクトル及び前記第2ベクトルの更新を繰り返し実行し、前記最適化問題の解を探索する、
プログラム。
【請求項10】
コンピュータが、目的関数が与えられた場合に、前記目的関数に対応する項を含むハミルトニアンによって規定される力学系の位置ベクトル、運動量ベクトル及び力ベクトルにそれぞれ対応する、同じ要素数を有する第1ベクトル、第2ベクトル及び第3ベクトルを用いて前記目的関数を評価指標とした最適化問題を探索する計算であって、前記目的関数を偏微分した形式の基本式に基づく計算を実行する情報処理方法であって、
変数が、前記第1ベクトルの要素、または、前記第1ベクトルの要素を所定の第1値もしくは前記第1値より大きい所定の第2値のいずれかの値に変換する第1関数で変換して得られる第4ベクトルの要素である前記基本式に基づき、前記第3ベクトルのそれぞれの要素を計算するステップと、
前記第1ベクトルの要素に、前記第2ベクトルの対応する要素に比例した値を加算することによって前記第1ベクトルの要素を更新するステップと、
値が前記第1値より小さい前記第1ベクトルの要素を前記第1値に設定するステップと、
値が前記第2値より大きい前記第1ベクトルの要素を前記第2値に設定するステップと、
前記第2ベクトルの要素に、更新回数に応じて単調増加または単調減少する第1係数を比例係数とする前記第1ベクトルの対応する要素に比例した値ならびに、前記第3ベクトルの対応する要素に比例した値を加算することによって前記第2ベクトルの要素を更新するステップとを含
前記第3ベクトルの計算、前記第1ベクトル及び前記第2ベクトルの更新を繰り返し実行し、前記最適化問題の解を探索する、
情報処理方法。
【請求項11】
目的関数が与えられた場合に、前記目的関数に対応する項を含むハミルトニアンによって規定される力学系の位置ベクトル、運動量ベクトル及び力ベクトルにそれぞれ対応する、同じ要素数を有する第1ベクトル、第2ベクトル及び第3ベクトルを用いて前記目的関数を評価指標とした最適化問題を探索する計算を実行する電子回路であって、
前記目的関数を前記第1ベクトルのそれぞれの要素について偏微分した形式の基本式に基づき、前記第3ベクトルのそれぞれの要素を計算するように構成され、前記基本式の変数前記第1ベクトルの要素または、前記第1ベクトルの要素を所定の第1値もしくは前記第1値より大きい所定の第2値のいずれかの値をとる第1関数で変換した第4ベクトルの要素である、第1回路と、
前記第1ベクトルの要素に、前記第2ベクトルの対応する要素に比例した値を加算することによって前記第1ベクトルの要素を更新し、
値が前記第1値より小さい前記第1ベクトルの要素を前記第1値に設定し、
値が前記第2値より大きい前記第1ベクトルの要素を前記第2値に設定し、
前記第2ベクトルの要素に、更新回数に応じて単調増加または単調減少する第1係数を比例係数とする前記第1ベクトルの対応する要素に比例した値、ならびに、前記第3ベクトルの対応する要素に比例した値を加算することによって前記第2ベクトルの要素を更新するように構成された第2回路と、を備え
前記第3ベクトルの計算、前記第1ベクトル及び前記第2ベクトルの更新を繰り返し実行し、前記最適化問題の解を探索する、
電子回路。
【請求項12】
前記第2回路は、値が前記第1値より小さい前記第1ベクトルの要素に対応する前記第2ベクトルの要素、または、前記第2値より大きい前記第1ベクトルの要素に対応する前記第2ベクトルの要素を、もとの前記第2ベクトルの要素に、第2係数を乗じた値に更新するように構成されている、
請求項11に記載の電子回路。
【請求項13】
前記第1回路は、第1ベクトルの要素を変数として計算した前記基本式の値を前記第1関数で変換した値に基づいて前記第3ベクトルのそれぞれの要素を更新するように構成されている、
請求項11または12に記載の電子回路。
【請求項14】
前記第1回路の入力側と、前記第2回路の出力側に接続され、前記第4ベクトルまたは前記第1ベクトルを格納するように構成された第1メモリを備え、
前記第1回路の出力側は、前記第2回路の入力側に接続されている、
請求項11ないし13のいずれか一項に記載の電子回路。
【請求項15】
前記第1メモリが前記第4ベクトルのそれぞれの要素の値を1ビットの情報で格納するように構成されており、
それぞれの前記第1回路は、前記第1メモリから読み出した前記1ビットの情報を符号付き2進数に復号化するように構成された復号器を含んでいる、
請求項14に記載の電子回路。
【請求項16】
前記第2回路が前記第3ベクトルの要素に基づき、前記第1ベクトルの要素または前記第2ベクトルの要素または前記第4ベクトルの要素の少なくともいずれかを計算しているときに、
前記第1回路が、前記第2回路によって前記第1ベクトルの要素および前記第2ベクトルの要素および前記第4ベクトルの要素が次回計算されるときに使われる前記第3ベクトルの要素を計算するように構成されている、
請求項14に記載の電子回路。
【請求項17】
それぞれが入力側で前記第1メモリに接続されているPb個(Pbは2以上の整数)の前記第1回路と、
それぞれが入力側でいずれかの前記第1回路に接続されており、それぞれが出力側で前記第1メモリに接続されているPb個の前記第2回路とを備えている、
請求項14ないし16のいずれか一項に記載の電子回路。
【請求項18】
それぞれの前記第1回路は、N×N次元の結合係数行列をPb個に分割したN/Pb×N次元の第1行列のいずれかと、前記第4ベクトルをPb個に分割した第5ベクトルのいずれかとの積である前記第3ベクトルの要素を計算するように構成されており、
それぞれの前記第2回路は、いずれかの前記第1回路が計算した前記第3ベクトルの要素に基づき、前記第1ベクトルのN/Pb個の要素および前記第2ベクトルのN/Pb個の要素および前記第4ベクトルのN/Pb個の要素を更新し、更新した前記第4ベクトルのN/Pb個の要素を前記第1メモリに保存するように構成されている、
請求項17に記載の電子回路。
【請求項19】
それぞれの前記第1回路は、前記第1行列を、Pr×Pc次元の複数の第2行列に、前記第5ベクトルを要素数Pcの複数の第6ベクトルにそれぞれ分割し、それぞれの前記第2行列と、対応する前記第6ベクトルとの積演算を順次実行することにより、前記第3ベクトルの要素を計算するように構成されている、
請求項18に記載の電子回路。
【請求項20】
前記第1ベクトルのN/Pb個の要素を格納するようにそれぞれが構成されているPb個の第2メモリと、
いずれかの前記第1行列を格納するようにそれぞれが構成されているPb個の第3メモリと、
前記第2ベクトルのN/Pb個の要素を格納するようにそれぞれが構成されているPb個の第4メモリと、
第6ベクトルのN/Pb個の要素を格納するようにそれぞれが構成されているPb個の第5メモリとを備え、
それぞれの前記第2メモリは、いずれかの前記第2回路の入力側および出力側に接続されており、それぞれの前記第3メモリは、いずれかの前記第1回路の入力側に接続されており、それぞれの前記第4メモリは、いずれかの前記第2回路の入力側および出力側に接続されており、それぞれの前記第5メモリは、いずれかの前記第2回路の入力側に接続されている、
請求項18または19に記載の電子回路。
【発明の詳細な説明】
【技術分野】
【0001】
本発明の実施形態は、情報処理装置、プログラム、情報処理方法、および電子回路に関する。
【背景技術】
【0002】
組合せ最適化問題とは、複数の組合せの中から目的に最も適した組合せを選ぶ問題である。組合せ最適化問題は、数学的には、「目的関数」と呼ばれる、複数の離散変数を有する関数を最大化させる問題、または、当該関数を最小化させる問題に帰着される。組合せ最適化問題は、金融、物流、交通、設計、製造、生命科学など各種の分野において普遍的な問題であるが、組合せ数が問題サイズの指数関数のオーダーで増える、いわゆる「組合せ爆発」のため、必ず最適解を求めることができるとは限らない。また、最適解に近い近似解を得ることすら難しい場合が多い。
【0003】
各分野における問題を解決し、社会のイノベーションおよび科学技術の進歩を促進するために、組合せ最適化問題の解を実用的な時間内で計算する技術の開発が求められている。
【先行技術文献】
【特許文献】
【0004】
【文献】特開2017-73106号公報
【非特許文献】
【0005】
【文献】A. Lucas, Front. Physics 2, 5 (2014)
【文献】M. W. Johnson, et al., Nature 473, 194 (2011).
【文献】T. Inagaki et al., Science 354, 603 (2016).
【文献】H. Goto, Sci. Rep. 6, 21686 (2016).
【文献】M. Yamaoka et al., H. IEEE J. Solid-State Circuits 51, 303 (2016).
【文献】S. Tsukamoto et al., FUJITSU Sci. Tech. J. 53, 8 (2017).
【文献】H. Goto, K. Tatsumura, A. R. Dixon, Sci. Adv. 5, eaav2372 (2019).
【発明の概要】
【発明が解決しようとする課題】
【0006】
本発明の実施形態は、組合せ最適化問題の解を実用的な時間内で計算する情報処理装置、プログラム、情報処理方法、および電子回路を提供する。
【課題を解決するための手段】
【0007】
本発明の実施形態としての情報処理装置は、目的関数を、すべての項に含まれる変数について偏微分した形式の基本式に基づき、第3ベクトルのそれぞれの要素を更新するように構成され、前記基本式の変数は、第1ベクトルの要素、または、前記第1ベクトルの要素を第1値もしくは前記第1値より大きい第2値のいずれかの値をとる第1関数で変換した第4ベクトルの要素である、積和演算部と、前記第1ベクトルの要素に、第2ベクトルの対応する要素、または、前記第2ベクトルの対応する要素に重み付けした値を加算することによって前記第1ベクトルの要素を更新し、値が前記第1値より小さい前記第1ベクトルの要素を前記第1値に設定し、値が前記第2値より大きい前記第1ベクトルの要素を前記第2値に設定し、前記第2ベクトルの要素に、更新回数に応じて単調増加または単調減少する第1係数と前記第1ベクトルの対応する要素との積を重み付けした値、ならびに、前記第3ベクトルの対応する要素を重み付けした値を加算することによって前記第2ベクトルの要素を更新するように構成された更新部とを備える。
【図面の簡単な説明】
【0008】
図1】情報処理システムの構成例を示した図。
図2】管理サーバの構成例を示したブロック図。
図3】管理サーバの記憶部に保存されるデータの例を示す図。
図4】計算サーバの構成例を示したブロック図。
図5】計算サーバのストレージに保存されるデータの例を示す図。
図6】最大カット問題を複数回解いた場合におけるカット数の第1の例を示す図。
図7】xの絶対値が1を超えないアルゴリズムにおける分岐の例を示す図。
図8】xの絶対値が1を超えうるアルゴリズムにおける分岐の例を示す図。
図9】最大カット問題を複数回解いた場合におけるカット数の第2の例を示す図。
図10】最大カット問題を複数回解いた場合におけるカット数の第3の例を示す図。
図11】最大カット問題を複数回解いた場合におけるカット数の第4の例を示す図。
図12】最大カット問題を複数回解いた場合におけるカット数の第5の例を示す図。
図13】最大カット問題を複数回解いた場合におけるカット数の第6の例を示す図。
図14】最大カット問題を複数回解いた場合におけるカット数の第7の例を示す図。
図15】最大カット問題を複数回解いた場合におけるカット数の第8の例を示す図。
図16】最大カット問題を複数回解いた場合におけるカット数の第9の例を示す図。
図17】最大カット問題を複数回解いた場合におけるカット数の第10の例を示す図。
図18】最大カット問題を複数回解いた場合におけるカット数の第11の例を示す図。
図19】最大カット問題を複数回解いた場合におけるカット数の第12の例を示す図。
図20】最大カット問題を複数回解いた場合におけるカット数の第13の例を示す図。
図21】マルチプロセッサ構成の例を概略的に示した図。
図22】PCクラスタを使ってN=3600の全結合イジング問題を解いたときの結果を示した図。
図23】GPUを使った構成の例を概略的に示した図。
図24】GPUを使ってN=3600の全結合イジング問題を解いたときの結果を示した図。
図25】情報処理システムが実行する処理の例を示したフローチャート。
図26】情報処理システムが実行する処理の例を示したフローチャート。
図27】アルゴリズムの例を示した図。
図28】電子回路の構成例を示したブロック図。
図29】行列とベクトルとの積を計算する方法の第1の例を示した図。
図30】複数の並列化手法の例を示した図。
図31】回路ブロックMMの構成例を示した図。
図32】回路ブロックTEの構成例を示した図。
図33】複数の電子回路が接続された構成例を示した図。
図34】行列とベクトルとの積を計算する方法の第2の例を示した図。
図35】各電子回路で実行されるアルゴリズムの例を示した図。
図36】複数の電子回路が実行する処理の例を示すタイミングチャート。
図37】通信チャネルのより詳細な構成例を示した図。
図38】リングトポロジに対応したハードウェアの構成例を示したブロック図。
図39】通信フェーズのタイミングチャートの例を示した図。
図40】通信フェーズのタイミングチャートの例を示した図。
【発明を実施するための形態】
【0009】
以下、図面を参照しながら、本発明の実施形態について説明する。また、図面において同一の構成要素は、同じ番号を付し、説明は、適宜省略する。
【0010】
図1は、情報処理システム100の構成例を示したブロック図である。図1の情報処理システム100は、管理サーバ1と、ネットワーク2と、計算サーバ(情報処理装置)3a~3cと、ケーブル4a~4cと、スイッチ5を備えている。また、図1には、情報処理システム100と通信可能な情報端末6が示されている。管理サーバ1、計算サーバ3a~3c、情報端末6は、ネットワーク2を介して互いにデータ通信をすることができる。ネットワーク2は、例えば、複数のコンピュータネットワークが相互に接続されたインターネットである。ネットワーク2は、通信媒体として有線、無線、または、これらの組み合わせを用いることができる。また、ネットワーク2で使われる通信プロトコルの例としては、TCP/IPがあるが、通信プロトコルの種類については特に問わない。
【0011】
また、計算サーバ3a~3cは、それぞれケーブル4a~4cを介してスイッチ5に接続されている。ケーブル4a~4cおよびスイッチ5は、計算サーバ間のインターコネクトを形成している。計算サーバ3a~3cは、当該インターコネクトを介して互いにデータ通信をすることも可能である。スイッチ5は、例えば、Infinibandのスイッチであり、ケーブル4a~4cは、例えば、Infinibandのケーブルである。ただし、Infinibandのスイッチ/ケーブルの代わりに、有線LANのスイッチ/ケーブルを使ってもよい。ケーブル4a~4cおよびスイッチ5で使われる通信規格および通信プロトコルについては、特に問わない。情報端末6の例としては、ノートPC、デスクトップPC、スマートフォン、タブレット、車載端末などが挙げられる。
【0012】
組合せ最適化問題の求解では、並列的な処理および/または処理の分散化を行うことができる。したがって、計算サーバ3a~3cおよび/または計算サーバ3a~3cのプロセッサは、一部の計算処理の一部のステップを分担して実行してもよいし、異なる変数について同様の計算処理を並列的に実行してもよい。管理サーバ1は、例えば、ユーザによって入力された組合せ最適化問題を各計算サーバに処理可能な形式に変換し、計算サーバを制御する。そして、管理サーバ1は、各計算サーバから計算結果を取得し、集約した計算結果を組合せ最適化問題の解に変換する。これにより、ユーザは、組合せ最適化問題の解を得ることができる。組合せ最適化問題の解は、最適解と、最適解に近い近似解とを含むものとする。
【0013】
図1には、3台の計算サーバが示されているが、これは、情報処理システムに含まれる計算サーバの台数を限定することを意図していない。また、組合せ最適化問題の求解に使われる計算サーバの台数についても特に問わない。例えば、情報処理システムに含まれる計算サーバは1台であってもよい。また、情報処理システムに含まれる複数の計算サーバのうち、1台の計算サーバを使って組合せ最適化問題の求解を行ってもよい。また、情報処理システムに、数百台以上の計算サーバが含まれていてもよい。計算サーバは、データセンターに設置されたサーバであってもよいし、オフィスに設置されたデスクトップPCであってもよい。また、計算サーバは異なるローケーションに設置された複数の種類のコンピュータであってもよい。計算サーバとして使われる情報処理装置の種類については特に問わない。例えば、計算サーバは、汎用的なコンピュータであってもよいし、専用の電子回路または、これらの組合せであってもよい。
【0014】
図2は、管理サーバ1の構成例を示したブロック図である。図2の管理サーバ1は、例えば、中央演算処理装置(CPU)とメモリとを含むコンピュータである。管理サーバ1は、プロセッサ10と、記憶部14と、通信回路15と、入力回路16と、出力回路17とを備えている。プロセッサ10、記憶部14、通信回路15、入力回路16、出力回路17は、互いにバス20を介して接続されているものとする。プロセッサ10は、内部の構成要素として、管理部11と、変換部12と、制御部13を含んでいる。
【0015】
プロセッサ10は、演算を実行し、管理サーバ1の制御を行う電子回路である。プロセッサ10として、例えば、CPU、マイクロプロセッサ、ASIC、FPGA、PLDまたはこれらの組み合わせを用いることができる。管理部11は、ユーザの情報端末6を介して管理サーバ1の操作を行うためのインタフェースを提供する。管理部11が提供するインタフェースの例としては、API、CLI、ウェブページなどが挙げられる。例えば、ユーザは、管理部11を介して組合せ最適化問題の情報の入力を行ったり、計算された組合せ最適化問題の解の閲覧および/またはダウンロードを行ったりすることができる。変換部12は、組合せ最適化問題を各計算サーバが処理可能な形式に変換する。制御部13は、各計算サーバに制御指令を送信する。制御部13が各計算サーバから計算結果を取得した後、変換部12は、複数の計算結果を集約し、組合せ最適化問題の解に変換する。
【0016】
記憶部14は、管理サーバ1のプログラム、プログラムの実行に必要なデータ、プログラムによって生成されたデータを含む各種のデータを記憶する。ここで、プログラムは、OSとアプリケーションの両方を含むものとする。記憶部14は、揮発性メモリ、不揮発性メモリ、またはこれらの組み合わせであってもよい。揮発性メモリの例としては、DRAM、SRAMなどがある。不揮発性メモリの例としては、NANDフラッシュメモリ、NORフラッシュメモリ、ReRAM、MRAMが挙げられる。また、記憶部14として、ハードディスク、光ディスク、磁気テープまたは外部の記憶装置を使ってもよい。
【0017】
通信回路15は、ネットワーク2に接続された各装置との間でデータの送受信を行う。通信回路15は、例えば、有線LANのNIC(Network Interface Card)である。ただし、通信回路15は、無線LANなど、その他の種類の通信回路であってもよい。入力回路16は、管理サーバ1へのデータ入力を実現する。入力回路16は、外部ポートとして、例えば、USB、PCI-Expressなどを備えているものとする。図2の例では、操作装置18が入力回路16に接続されている。操作装置18は、管理サーバ1に情報を入力するための装置である。操作装置18は、例えば、キーボード、マウス、タッチパネル、音声認識装置などであるが、これに限られない。出力回路17は、管理サーバ1からのデータ出力を実現する。出力回路17は、外部ポートとしてHDMI、DisplayPortなどを備えているものとする。図2の例では、表示装置19が出力回路17に接続されている。表示装置19の例としては、LCD(液晶ディスプレイ)、有機EL(有機エレクトロルミネッセンス)ディスプレイ、プロジェクタがあるが、これに限られない。
【0018】
管理サーバ1の管理者は、操作装置18および表示装置19を使って、管理サーバ1のメンテナンスを行うことができる。なお、操作装置18および表示装置19は、管理サーバ1に組み込まれたものであってもよい。また、必ず管理サーバ1に操作装置18および表示装置19が接続されていなくてもよい。例えば、管理者は、ネットワーク2と通信可能な情報端末を用いて管理サーバ1のメンテナンスを行ってもよい。
【0019】
図3は、管理サーバ1の記憶部14に保存されるデータの例を示している。図3の記憶部14には、問題データ14Aと、計算データ14Bと、管理プログラム14Cと、変換プログラム14Dと、制御プログラム14Eとが保存されている。例えば、問題データ14Aは、組合せ最適化問題のデータを含む。例えば、計算データ14Bは、各計算サーバから収集された計算結果を含む。例えば、管理プログラム14Cは、上述の管理部11の機能を実現するプログラムである。例えば、変換プログラム14Dは、上述の変換部12の機能を実現するプログラムである。例えば、制御プログラム14Eは、上述の制御部13の機能を実現するプログラムである。
【0020】
図4は、計算サーバの構成例を示したブロックである。図4には、例示的に計算サーバ3aの構成が示されている。他の計算サーバは、計算サーバ3aと同様の構成であってもよいし、計算サーバ3aと異なる構成であってもよい。計算サーバ3aは、例えば、第1ベクトルと、第2ベクトルと、第3ベクトルの計算を単独で、または、他の計算サーバと分担して実行する情報処理装置である。計算サーバ3aは、さらに第1ベクトルのそれぞれの要素を符号関数で変換した第4ベクトルの計算を行ってもよい。第3ベクトルのそれぞれの要素の値は、例えば、イジングモデルのエネルギー式から導出された式によって求められる。例えば、イジングモデルのエネルギー式を、すべての項に含まれる変数について偏微分した形式の式(基本式とよぶ)に基づいて第3ベクトルのそれぞれの要素を計算することができる。
【0021】
ここで、第1ベクトルは、変数x(i=1、2、・・・、N)を要素とするベクトルである。また、第2ベクトルは、変数y(i=1、2、・・・、N)を要素とするベクトルである。第3ベクトルは、変数z(i=1、2、・・・、N)を要素とするベクトルである。第4ベクトルは、第1ベクトルの要素を第1値もしくは第1値より大きい第2値のいずれかの値をとる第1関数で変換したベクトルである。上述の符号関数は、第1関数の一例である。なお、変数x、y、zの詳細については、後述する。
【0022】
計算サーバ3aは、例えば、通信回路31と、共有メモリ32と、プロセッサ33A~33Dと、ストレージ34と、ホストバスアダプタ35とを備えている。通信回路31、共有メモリ32、プロセッサ33A~33D、ストレージ34、ホストバスアダプタ35は、バス36を介して互いに接続されているものとする。
【0023】
通信回路31は、ネットワーク2に接続された各装置との間でデータの送受信を行う。通信回路31は、例えば、有線LANのNIC(Network Interface Card)である。ただし、通信回路31は、無線LANなど、その他の種類の通信回路であってもよい。共有メモリ32は、プロセッサ33A~33Dからアクセス可能なメモリである。共有メモリ32の例としては、DRAM、SRAMなどの揮発性メモリが挙げられる。ただし、共有メモリ32として、不揮発性メモリなどその他の種類のメモリが使われてもよい。プロセッサ33A~33Dは、共有メモリ32を介してデータの共有を行うことができる。なお、必ず計算サーバ3aのすべてのメモリが共有メモリとして構成されていなくてもよい。例えば、計算サーバ3aの一部のメモリは、いずれかのプロセッサのみからアクセスできるローカルメモリとして構成されていてもよい。
【0024】
プロセッサ33A~33Dは、計算処理を実行する電子回路である。プロセッサは、例えば、CPU(Central Processing Unit)、GPU(Graphics Processing Unit)、FPGA(Field-Programmable Gate Array)、ASIC(Application Specific Integrated Circuit)のいずれであってもよいし、これらの組合せであってもよい。また、プロセッサは、CPUコアまたはCPUスレッドであってもよい。プロセッサがCPUである場合、計算サーバ3aが備えるソケット数については、特に問わない。また、プロセッサは、PCI expressなどのバスを介して計算サーバ3aのその他の構成要素に接続されていてもよい。
【0025】
図4の例では、計算サーバが4つのプロセッサを備えている。ただし、1台の計算サーバが備えているプロセッサの数はこれとは異なっていてもよい。例えば、計算サーバに実装されているプロセッサの数および/または種類が異なっていてもよい。
【0026】
積和演算部51は、解きたい組合せ最適化問題の目的関数を、すべての項に含まれる変数について偏微分した形式の基本式に基づき、第3ベクトルのそれぞれの要素を更新するように構成されている。ここで、基本式の変数は、第1ベクトルの要素、または、第1ベクトルの要素を第1値もしくは第1値より大きい第2値のいずれかの値をとる第1関数で変換した第4ベクトルの要素である。更新部50は、例えば、第1ベクトルの要素に、第2ベクトルの対応する要素、または、第2ベクトルの対応する要素に重み付けした値を加算することによって第1ベクトルの要素を更新し、値が第1値より小さい第1ベクトルの要素を第1値に設定し、値が第2値より大きい第1ベクトルの要素を第2値に設定し、第2ベクトルの要素に、更新回数に応じて単調増加または単調減少する第1係数と第1ベクトルの対応する要素との積を重み付けした値、ならびに、前記第3ベクトルの対応する要素を重み付けした値を加算することによって第2ベクトルの要素を更新するように構成されている。目的関数として、例えば、イジングモデルのエネルギー式を使うことができる。ここで、イジングモデルは、多体相互作用を有するものであってもよい。また、第1値として-1、第2値として+1を使うことができる。ただし、第1値および/または第2値はその他の値であってもよい。
【0027】
図4の例では、プロセッサ33A~33Cが更新部に相当しており、プロセッサ33Dが積和演算部に相当している。ただし、図4に示した更新部/積和演算部とプロセッサとの対応関係は、一例にしかすぎない。したがって、更新部/積和演算部とプロセッサとの対応関係はこれとは異なっていてもよい。また、更新部/積和演算部に割り当てられるプロセッサ数については、特に限定しない。後述するように、同一のプロセッサが更新部および積和演算部の役割を兼ね備えていてもよい。計算サーバに複数の種類のプロセッサ(例えば、CPU、GPU、FPGA)が実装されている場合には、異なる種類のプロセッサを更新部および積和演算部に割り当ててもよい。
【0028】
ストレージ34は、計算サーバ3aのプログラム、プログラムの実行に必要なデータ、プログラムによって生成されたデータを含む各種のデータを記憶する。ここで、プログラムは、OSとアプリケーションの両方を含むものとする。ストレージ34は、揮発性メモリ、不揮発性メモリ、またはこれらの組み合わせであってもよい。揮発性メモリの例としては、DRAM、SRAMなどがある。不揮発性メモリの例としては、NANDフラッシュメモリ、NORフラッシュメモリ、ReRAM、MRAMが挙げられる。また、ストレージ34として、ハードディスク、光ディスク、磁気テープまたは外部の記憶装置が使われてもよい。
【0029】
ホストバスアダプタ35は、計算サーバ間のデータ通信を実現する。ホストバスアダプタ35は、ケーブル4aを介してスイッチ5に接続されている。ホストバスアダプタ35は、例えば、HCA(Host Channel Adaptor)である。ホストバスアダプタ35、ケーブル4a、スイッチ5で高スループットを実現可能なインターコネクトを形成することにより、並列的な計算処理の速度を向上させることができる。
【0030】
図5は、計算サーバのストレージに保存されるデータの例を示している。図5のストレージ34には、計算データ34Aと、計算プログラム34Bと、制御プログラム34Cとが保存されている。計算データ34Aは、計算サーバ3aの計算途中のデータまたは計算結果を含んでいる。なお、計算データ34Aの少なくとも一部は、共有メモリ32、プロセッサのキャッシュ、プロセッサのレジスタなど、異なる記憶階層に保存されていてもよい。計算プログラム34Bは、所定のアルゴリズムに基づき、各プロセッサにおける計算処理および、共有メモリ32およびストレージ34へのデータの保存処理を実現するプログラムである。制御プログラム34Cは、管理サーバ1の制御部13から送信された指令に基づき、計算サーバ3aを制御し、計算サーバ3aの計算結果を管理サーバ1に送信するプログラムである。
【0031】
次に、組合せ最適化問題の求解に関連する技術について説明する。組合せ最適化問題を解くために使われる情報処理装置の一例として、イジングマシンが挙げられる。イジングマシンとは、イジングモデルの基底状態のエネルギーを計算する情報処理装置のことをいう。これまで、イジングモデルは、主に強磁性体や相転移現象のモデルとして使われることが多かった。しかし、近年、イジングモデルは、組み合わせ最適化問題を解くためのモデルとしての利用が増えている。下記の式(1)は、イジングモデルのエネルギーを示している。
【数1】
ここで、s、sはスピンである、スピンは、+1または-1のいずれかの値をとる2値変数である。Nは、スピンの数である。hは、各スピンに作用する局所磁場である。Jは、スピン間における結合係数の行列である。行列Jは、対角成分が0である実対称行列となっている。したがって、Jijは行列Jのi行j列の要素を示している。なお、式(1)のイジングモデルは、スピンについての2次式となっているが、スピンの3次以上の項を含む拡張されたイジングモデル(多体相互作用を有するイジングモデル)を使ってもよい。多体相互作用を有するイジングモデルについては、後述する。
【0032】
式(1)のイジングモデルを使うと、エネルギーEIsingを目的関数とし、エネルギーEIsingを可能な限り小さくする解を計算することができる。イジングモデルの解は、スピンのベクトル(s、s、・・・、s)の形式で表される。特に、エネルギーEIsingが最小値となるベクトル(s、s、・・・、s)は、最適解とよばれる。ただし、計算されるイジングモデルの解は、必ず厳密な最適解でなくてもよい。以降では、イジングモデルを使ってエネルギーEIsingが可能な限り小さくなる近似解(すなわち、目的関数の値が可能な限り最適値に近くなる近似解)を求める問題をイジング問題とよぶものとする。
【0033】
式(1)のスピンsは2値変数であるため、式(1+s)/2を使うことにより、組合せ最適化問題で使われる離散変数(ビット)との変換を容易に行うことができる。したがって、組合せ最適化問題をイジング問題に変換し、イジングマシンに計算を行わせることにより、組合せ最適化問題の解を求めることが可能である。0または1のいずれかの値をとる離散変数(ビット)を変数とする2次の目的関数を最小化する解を求める問題は、QUBO(Quadratic Unconstrained Binary Optimization、制約なし2値変数2次最適化)問題とよばれる。式(1)で表されるイジング問題は、QUBO問題と等価であるといえる。
【0034】
例えば、量子アニーラ、コヒーレントイジングマシン、量子分岐マシンなどがイジングマシンのハードウェア実装として提案されている。量子アニーラは、超伝導回路を使って量子アニーリングを実現する。コヒーレントイジングマシンは、光パラメトリック発振器で形成されたネットワークの発振現象を利用する。量子分岐マシンは、カー効果を有するパラメトリック発振器のネットワークにおける量子力学的な分岐現象を利用する。これらのハードウェア実装は、計算時間の大幅な短縮を実現する可能性がある一方、大規模化や安定的な運用が難しいという課題もある。
【0035】
そこで、広く普及しているデジタルコンピュータを使ってイジング問題の求解を行うことも可能である。デジタルコンピュータは、上述の物理的現象を使ったハードウェア実装と比べ、大規模化と安定運用が容易である。デジタルコンピュータでイジング問題の求解を行うためのアルゴリズムの一例として、シミュレーティッドアニーリング(SA)が挙げられる。シミュレーティッドアニーリングをより高速に実行する技術の開発が行われている。ただし、一般のシミュレーティッドアニーリングはそれぞれの変数が逐次更新される逐次更新アルゴリズムであるため、並列化による計算処理の高速化は難しい。
【0036】
上述の課題を踏まえ、デジタルコンピュータにおける並列的な計算によって、規模の大きい組合せ最適化問題の求解を高速に行うことが可能なシミュレーテッド分岐アルゴリズムが提案されている(例えば、上述の非特許文献7)。以降では、シミュレーテッド分岐アルゴリズムを使って組合せ最適化問題を解く情報処理装置および電子回路について説明する。
【0037】
はじめに、シミュレーテッド分岐アルゴリズムの概要について述べる。シミュレーテッド分岐アルゴリズムでは、それぞれN個ある2つの変数x,y(i=1、2、・・・、N)について、下記の式(2)の連立常微分方程式を数値的に解く。N個の変数xのそれぞれは、イジングモデルのスピンsに対応している。一方、N個の変数yのそれぞれは、運動量に相当している。変数x,yは、いずれも連続変数であるものとする。
【数2】
【0038】
ここで、Hは、下記の式(3)のハミルトニアンである。係数Dは、離調(detuning)に相当する。係数p(t)は、ポンピング振幅(pumping amplitude)に相当し、シミュレーテッド分岐アルゴリズムの計算時に更新回数に応じて値が単調増加する。係数p(t)の初期値は0に設定されていてもよい。係数p(t)は、第1係数に相当する。係数Kは、正のカー係数(Kerr coefficient)に相当する。fは、下記の式(4)で表される外力である。式(4)のzは、式(3)の中のエネルギーEIsingに対応する項の括弧内を変数xで偏微分した式となっている。
【数3】
【数4】
ここで、係数cとして、定数係数を使うことができる。この場合、係数cの値を、シミュレーテッド分岐アルゴリズムによる計算を実行する前に決める必要がある。例えば、計算の精度を得るために、係数cをJ(2)行列の最大固有値の逆数に近い値に設定することができる。例えば、c=0.5D√(N/2n)という値を使うことができる。ここで、nは、組合せ最適化問題に係るグラフのエッジ数である。また、α(t)は、p(t)とともに増加する係数である。例えば、α(t)として、√(p(t))を使うことができる。
【0039】
なお、シミュレーテッド分岐アルゴリズムを使うことにより、3次以上の目的関数を有する組合せ最適化問題を解くことも可能である。2値変数を変数とする3次以上の目的関数を最小化する変数の組合せを求める問題は、HOBO(Higher Order Binary Optimization)問題とよばれる。HOBO問題を扱う場合、高次へ拡張されたイジングモデルにおけるエネルギー式として、下記の式(5)を使うことができる。
【数5】
ここで、J(n)はn階テンソルであり、式(1)の局所磁場hと結合係数の行列Jを一般化させたものである。例えば、テンソルJ(1)は、局所磁場hのベクトル(第6ベクトルとよぶ)に相当する。n階テンソルJ(n)では、複数の添え字に同じ値があるとき、要素の値は0となる。式(5)では、3次の項までが示されているが、それより高次の項も式(5)と同様に定義することができる。式(5)は多体相互作用を含むイジングモデルのエネルギーに相当している。
【0040】
なお、QUBOと、HOBOはいずれも、制約なし多項式2値変数最適化(PUBO:Polynomial Unconstrained Binary Optimization)の1種であるといえる。すなわち、PUBOのうち、2次の目的関数を有する組合せ最適化問題は、QUBOである。また、PUBOのうち、3次以上の目的関数を有する組合せ最適化問題は、HOBOであるといえる。
【0041】
シミュレーテッド分岐アルゴリズムを使ってHOBO問題を解く場合、上述の式(3)のハミルトニアンHを下記の式(6)に、上述の式(4)の外力fを下記の式(7)にそれぞれ置き換えればよい。
【数6】
【数7】
例えば、(7)の2番目の式zを用いて、第3ベクトルのそれぞれの要素を計算することができる。この式は、(6)の2番目の式を、すべての項に含まれる変数xについて偏微分した形式をとっている。また、第1ベクトルの要素を変数としている。このように、ハミルトニアンが多体相互作用(3階以上のテンソル)の項を含んでもよい。また、ハミルトニアンとして、多体相互作用(3階以上のテンソル)の項を含まないものを使ってもよい。(7)の2番目の式zは、ハミルトニアンの中のイジングモデルのエネルギーに対応する項から導出された基本式の一例である。すなわち、第1値は-1、第2値は1であってもよく、目的関数は、イジングモデルのエネルギー式に相当する項を含んでいてもよい。この場合、目的関数は、多体相互作用の項を含んでいてもよい。
【0042】
シミュレーテッド分岐アルゴリズムでは、p(t)の値を初期値(例えば、0)から所定の値まで増加させた後における変数xの符号に基づき、スピンsの値を求めることができる。例えば、x>0のときsgn(x)=1、x<0のときsgn(x)=-1となる符号関数を使うと、p(t)の値が所定の値まで増加したとき、変数xを符号関数で変換することによってスピンsの値を求めることができる。符号関数として、例えば、x≠0のときに、sgn(x)=x/|x|、x=0のときにsgn(x)=1または-1になる関数を使うことができる。すなわち、更新部50は、値が第1値と第2値の間にある第3値より小さい第1ベクトルの要素を第1値に変換し、値が第3値より大きい第1ベクトルの要素を第2値に変換することによって、組合せ最適化問題の解を求めるように構成されていてもよい。例えば、更新部50は、正値である第1ベクトルの要素を+1に変換し、負値である第1ベクトルを-1に変換することによって、組合せ最適化問題の解を求めるように構成されていてもよい。更新部50が組合せ最適化問題の解(例えば、イジングモデルのスピンs)を求めるタイミングについては、特に問わない。例えば、更新部50は、第1ベクトル、第2ベクトル、第3ベクトルの更新回数または第1係数pの値がしきい値より大きくなったときに組合せ最適化問題の解を求めるように構成されていてもよい。イジング問題を解く場合、組合せ最適化問題の解は、イジングモデルのスピンsに相当する。
【0043】
例えば、シンプレクティック・オイラー法を使うと、式(2)、(3)、(4)または、式(2)、(6)、(7)によって与えられる微分方程式を解くことができる。下記の式(8)に示されているように、シンプレクティック・オイラー法を使う場合、微分方程式が離散的な漸化式に書き換えられる。
【数8】
ここで、tは、時刻であり、Δtは、時間ステップ(時間刻み幅)である。式(8)の非線形項Kx (t+Δt)は、計算中に変数xが発散するのを防止する。
【0044】
計算サーバでは、式(8)のアルゴリズムに基づき、それぞれN個ある2つの変数x,y(i=1、2、・・・、N)を更新してもよい。すなわち、計算サーバが更新するデータには、変数x(i=1、2、・・・、N)を要素とする第1ベクトル(x,x,・・・,x)と、変数y(i=1、2、・・・、N)を要素とする第2ベクトル(y,y,・・・,y)と、変数z(i=1、2、・・・、N)を要素とする第3ベクトル(z,z,・・・,z)が含まれていてもよい。計算サーバは、式(8)のアルゴリズムに基づき、第3ベクトルのそれぞれの要素z(i=1、2、・・・、N)と、第1のベクトルのそれぞれの要素x(i=1、2、・・・、N)と、第2ベクトルのそれぞれの要素y(i=1、2、・・・、N)を更新することができる。
【0045】
式(8)を参照すると、外力項fに含まれる、行列またはテンソルの積和演算以外は、1種類の添え字(i)しか現れていないことがわかる。このため、式(8)のうち、1種類の添え字(i)しか現れていない部分の演算を並列化することによって、計算時間を短縮することができる。
【0046】
なお、式(8)では、微分方程式との対応関係を示すために、時刻tおよび時間ステップΔtが使われている。ただし、実際にシンプレクティック・オイラー法をソフトウェアまたはハードウェアに実装する際は、必ず明示的なパラメータとして時刻tおよび時間ステップΔtが含まれていなくてもよい。例えば、時間ステップΔtを1とすれば、実装時のアルゴリズムから時間ステップΔtを除去することが可能である。アルゴリズムを実装する際に、明示的なパラメータとして時間tを含めない場合には、式(8)において、x(t+Δt)をx(t)の更新後の値であると解釈すればよい。すなわち、上述の式(8)および以降の各式における“t”は、更新前の変数の値、“t+Δt”は、更新後の変数の値を示すものとする。
【0047】
次に、シミュレーテッド分岐アルゴリズムをシンプレクティック・オイラー法によってデジタルコンピュータに実装し、組合せ最適化問題を解いたときの結果を示す。以降では、最大カット問題のベンチマークセット(G-set)のG22を1000回解いた場合におけるカット数の平均値と最大値を示す。最大カット問題とは、分割時にカットされるエッジの重みの合計値を最大化するよう、重み付きグラフのノードを2つのグループに分割する問題である。最大カット問題は、組合せ最適化問題の一種である。
【0048】
図6は、上述の式(8)のアルゴリズムを使ったときにおける結果を示している。時間ステップをΔt=0.5、合計時間ステップ数を100、1000、10000、100000、1000000として計算を行っている。係数について、D=K=1、c=0.5D√(N/2n)を使った。なお、nにはG22のグラフのエッジ数、19990が代入される。時間ステップ数の増加に応じて係数p(第1係数)の値を0から1に線形に増加させた。また、変数xの初期値に0を設定し、変数yの初期値として[-0.1,0.1]の範囲の擬似乱数を設定した。
【0049】
図6上側のグラフは、カット数の平均値を示している。一方、図6下側のグラフは、カット数の最大値を示している。図6のいずれのグラフにおいても、縦軸はカット数に、横軸は時間ステップ数にそれぞれ対応している。図6の両グラフにある水平方向の破線Cmaxは、G22で知られている最大カット数13359を示している。カット数が破線Cmaxに近いほど、最適解に近い結果が得られているといえる。図6を参照すると、合計時間ステップ数が大きくなっても最大カット数に到達していない。スピンsが2値変数ではなく、連続変数xで表現されていることに起因する誤差があるため、式(8)のアルゴリズムを使ったときに得られる解には、最適解との差がある。
【0050】
そこで、誤差を減らすために、式(8)のアルゴリズムを改良することができる。具体的には、更新によって変数xの絶対値が1より大きくなったとき、変数xをsgn(x)に置き換える。すなわち、更新によってx>1となったとき、変数xの値は1に設定される。また、更新によってx<-1となったとき、変数xの値は-1に設定される。これにより、変数xを使ってスピンsをより高い精度で近似することが可能となる。すなわち、更新部50は、値が-1より小さい第1ベクトルの要素の値を-1に設定し、値が+1より大きい第1ベクトルの要素の値を+1に設定するように構成されていてもよい。このような処理を含めることにより、アルゴリズムは、x=±1の位置に壁があるN粒子の物理モデルと等価になる(図7)。
【0051】
さらに、更新によってx>1となったとき、変数xに対応する変数yに係数rを乗算してもよい。例えば、-1<r≦0の係数rを使うと、上記の壁は、反射係数rの壁となる。特に、r=0の係数rを使った場合、アルゴリズムは、x=±1の位置に完全非弾性衝突の起こる壁がある物理モデルと等価になる。すなわち、更新部50は、値が第1値より小さい第1ベクトルの要素に対応する第2ベクトルの要素、または、第2値より大きい第1ベクトルの要素に対応する第2ベクトルの要素を、もとの前記第2ベクトルの要素に、第2係数を乗じた値に更新するように構成されていてもよい。例えば、更新部50は、値が-1より小さい第1ベクトルの要素に対応する第2ベクトルの要素、または、値が1より大きい第1ベクトルの要素に対応する第2ベクトルの要素を、もとの第2ベクトルの要素に第2係数を乗じた値に更新するように構成されていてもよい。ここで、第2係数は上述の係数rに相当する。
【0052】
なお、更新によってx>1となったとき、変数xに対応する変数yの値を擬似乱数に設定してもよい。例えば、[-0.1,0.1]の範囲の乱数を使うことができる。すなわち、更新部50は、値が第1値より小さい第1ベクトルの要素に対応する第2ベクトルの要素の値、または、値が第2値より大きい第1ベクトルの要素に対応する第2ベクトルの要素の値を、擬似乱数に設定するように構成されていてもよい。
【0053】
以上のようにして|x|>1とならないように更新すると、式(8)の非線形項Kx (t+Δt)を除去しても、xの値が発散することはなくなる。したがって、式(8)のアルゴリズムに代わり、下記の式(9)のアルゴリズムを使うことが可能となる。
【数9】
【0054】
上述の式(9)のアルゴリズムでは、必ずしも擬似乱数を使う必要がない。また、式(9)のアルゴリズムは、式(8)と同様、ハミルトン方程式を解くものであり、変数yは運動量に相当する。そのため、シンプレクティック・オイラー法を使うことにより、時間ステップΔtとして小さな値を使わなくても、安定的に解を求めることができる。また、式(9)のアルゴリズムにおいても、3次以上の目的関数を有する組合せ最適化問題を解くことが可能である。なお、対比のため、図8には、式(8)のアルゴリズムを物理的なモデルに見立てた場合のグラフを示した。
【0055】
図9は、式(9)のアルゴリズムを使ってG-setのG22を1000回解いたときの結果を示している。図9では、式(9)のアルゴリズムを使っている。第2係数rの値は0に設定され、時間ステップはΔt=1に設定されている。その他の計算条件は、図6と同様であるものとする。なお、式(9)では、非線形項がないため、時間ステップΔtを図8の倍に設定することができた。
【0056】
図9上側のグラフは、カット数の平均値を示している。一方、図9下側のグラフは、カット数の最大値を示している。各軸の対応関係および両グラフにある水平方向の破線Cmaxの定義は、図6と同様である。また、図9の両グラフにおいて実線で示されたデータは、式(9)のアルゴリズムの適用時の結果に相当している。一方、図9の両グラフにおいて破線で示されたデータは、式(8)のアルゴリズムを使ったときの結果に相当する。
【0057】
図9を参照すると、図6と比べ、カット数の平均値およびカット数の最大値のいずれも最適解に近づいていることがわかる。ただし、図9の結果でも依然として計算値と最適解との間に差がある。この誤差は、第3ベクトルの要素の値zを定義する基本式において、変数としてスピンsではなく、連続変数xが使われていることに起因していると考えられる。特に、高次の項が増えるほど、zにおける変数xどうしの積演算は、誤差を大きくする原因となりうる。例えば、1より大きい変数を複数回乗算すると、値が1より著しく大きくなってしまう。
【0058】
そこで、誤差を軽減するために、式(9)のアルゴリズムをさらに改良することができる。例えば、下記の式(10)のように、zにおいて、連続変数xに代わって連続変数xを符号関数で変換した値sgn(x)を代入することができる。連続変数xを符号関数で変換した値sgn(x)は、スピンsに相当する。
【数10】
式(10)では、zの1階のテンソルを含む項の係数αを定数(例えば、α=1)にしてもよい。式(10)のアルゴリズムは、式(8)、(9)とは異なり、ハミルトン方程式を解くものではない。式(10)は、外場によって制御された力学系であると見なすことが可能である。式(10)のアルゴリズムでは、高次の目的関数を有するHOMOを扱った場合、zのどのスピンどうしの積も-1または1のいずれかの値をとるため、積演算による誤差の発生を防ぐことができる。
【0059】
上述の式(10)のアルゴリズムのように、計算サーバが計算するデータは、さらに、変数s(i=1、2、・・・、N)を要素とする第4ベクトル(s,s,・・・,s)を含んでいてもよい。第1ベクトルのそれぞれの要素を符号関数で変換することにより、第4ベクトルを得ることができる。すなわち、積和演算部51は、イジングモデルのエネルギー式を、すべての項に含まれる変数について偏微分した形式の基本式を使って、第3ベクトルのそれぞれの要素の値を更新するように構成されていてもよい。ここで、基本式の変数として、第1ベクトルの要素または、第1ベクトルの要素を符号関数で変換した第4ベクトルの要素を使うことができる。
【0060】
図10は、式(10)のアルゴリズムを使ってG-setのG22を1000回解いたときの結果を示している。使用されるアルゴリズムの違いを除けば、図10の計算条件(例えば、時間ステップΔt、各係数)は、図9と同様であるものとする。図10上側のグラフは、カット数の平均値を示している。一方、図10下側のグラフは、カット数の最大値を示している。各軸の対応関係および両グラフにある水平方向の破線Cmaxの定義は、図6図9と同様である。また、図10の両グラフにおいて実線で示されたデータは、式(10)のアルゴリズムの適用時の結果に相当する。一方、図10の両グラフにおいて破線で示されたデータは、式(8)のアルゴリズムを使ったときの結果に相当する。
【0061】
図10を参照すると、カット数の平均値およびカット数の最大値のいずれにおいても、図9と比べて最適解により近い値が得られることがわかる。図10下側のグラフを参照すると、式(10)のアルゴリズムを使うことにより、カット数の最大値13359が得られることがわかる。
【0062】
シンプレクティック・オイラー法を使ったシミュレーテッド分岐アルゴリズムには、さらに下記の式(11)のような変形例も存在する。
【数11】
【0063】
式(11)のアルゴリズムは、外力に相当する項fの計算方法が上述の各例とは異なっている。(11)4番目の式を使って計算された値zを符号関数で変換し、1で規格化している。すなわち、積和演算部51は、第1ベクトルの要素を変数として計算した基本式の値(z)を第1関数で変換した値に基づいて第3ベクトルのそれぞれの要素を更新するように構成されていてもよい。第1関数として、例えば、符号関数を使うことができる。ただし、後述するように、その他の関数を第1関数として使ってもよい。
【0064】
また、式(11)では、係数cの代わりに、関数g(t)が使われている。一般に、第3ベクトルの要素の値zの計算結果への寄与度は、問題によって異なる。しかし、式(11)では、第3ベクトルの要素の値zが1で規格化されているため、問題ごとに係数cの値を決定する必要がなくなる。関数g(t)として、例えば、下記の式(12)を使うことができる。
【数12】
式(12)の関数は、更新回数に応じて、単調増加してから単調減少する。ただし、上述の式(12)は一例にすぎず、g(t)として、p(t)をパラメータとする、これとは異なる関数を使ってもよい。すなわち、積和演算部51は、第1係数pをパラメータとする第2関数を乗じることによって第3ベクトルのそれぞれの要素を更新するように構成されていてもよい。
【0065】
図11は、式(11)のアルゴリズムを使ってG-setのG22を1000回解いたときの結果を示している。使用されるアルゴリズムの違いを除けば、図11の計算条件(例えば、時間ステップΔt、使われる係数)は、図9と同様であるものとする。図11上側のグラフは、カット数の平均値を示している。一方、図11下側のグラフは、カット数の最大値を示している。各軸の対応関係および両グラフにある水平方向の破線Cmaxの定義は、図6図9と同様である。また、図11の両グラフにおいて実線で示されたデータは、式(11)のアルゴリズムの適用時の結果に相当する。一方、図11の両グラフにおいて破線で示されたデータは、式(8)のアルゴリズムを使ったときの結果に相当する。
【0066】
図11を参照すると、カット数の平均値およびカット数の最大値のいずれにおいても、式(8)のアルゴリズムと比べて最適解により近い値が得られることがわかる。図11下側のグラフを参照すると、式(11)のアルゴリズムを使うことにより、最大値13359に近い、カット数13358が得られていることがわかる。
【0067】
式(9)~式(11)のアルゴリズムでは、基本式(zの式)の1階のテンソルを含む項の係数αを定数係数(例えば、α=1)として計算を行ってもよい。また、式(9)~式(11)のアルゴリズムでは、基本式(zの式)の1階のテンソルを含む項の係数αとして更新回数に応じて単調減少または単調増加する係数を使ってもよい。この場合、基本式の1階のテンソルを含む項は、更新回数に応じて単調減少または単調増加する。
【0068】
上述の式(9)のアルゴリズムおよび式(10)のアルゴリズムには、係数cが含まれている。係数cをJ(2)行列の最大固有値の逆数に近い値にしたい場合、J(2)行列の最大固有値を計算するか、J(2)行列の最大固有値の見積もりを行う必要がある。最大固有値の計算は、必要な計算量が大きい。一方、最大固有値の見積もりは、値の正確性が保証されていない。そこで、係数cの代わりに上述の式(12)のような、更新回数に応じて値が変動する関数を使うことができる。また、係数cの代わりに、下記の式(13)のように、第1のベクトル(x、x、・・・、x)および第3ベクトル(z、z、・・・、z)に基づいて計算される、近似値c1を使ってもよい。
【数13】
式(13)を参照すると、分母と分子がいずれもベクトルのノルムとなっている。式(13)のように、ベクトルのノルムとして、ベクトルの各要素の2乗和の平方根である、L2ノルムを使うことができる。ただし、ベクトルの要素の絶対値の和である、L1ノルムなど、その他の定義によるノルムを使ってもよい。
【0069】
すなわち、更新部50は、第1ベクトルのノルムを第3ベクトルのノルムで除算した第3係数c1を計算し、第2ベクトルの要素に、第1係数p(t+Δt)と更新された第1ベクトルの対応する要素との積を重み付けした値ならびに、第3ベクトルの対応する要素を第3係数c1で重み付けした値を加算することによって第2ベクトルの要素を更新するように構成されていてもよい。
【0070】
さらに、係数cの代わりに、下記の式(14)のような内積によって定義される近似値c´1を使ってもよい。
【数14】
【0071】
すなわち、更新部50は、第1ベクトルどうしの内積を、第1ベクトルと第3ベクトルの内積の絶対値で除算した第3係数c´1を計算し、第2ベクトルの要素に、第1係数p(t+Δt)と更新された第1ベクトルの対応する要素との積を重み付けした値ならびに、第3ベクトルの対応する要素を第3係数c´1で重み付けした値を加算することによって第2ベクトルの要素を更新するように構成されていてもよい。
【0072】
近似値c1、c´1は、各計算タイミングにおける第1ベクトル(x,x,・・・,x)および第3ベクトル(z,z,・・・,z)の値に基づいて計算されるため、係数cのような定数ではなく、動的に制御される係数となる。なお、第1ベクトル(x,x,・・・,x)および第3ベクトル(z,z,・・・,z)については、変数の更新処理で計算されたものを利用することができるため、近似値c1、c´1を計算したとしても、計算量が大幅に増えることはない。局所磁場のないイジング問題において、(x,x,・・・,x)がJ(2)の最大固有値に対応する固有ベクトルであるとき、近似値c1、c´1はJ(2)の最大固有値の逆数に等しくなる。また、(x,x,・・・,x)が固有ベクトルからずれていると、近似値c1、c´1はJ(2)の最大固有値の逆数より大きな値となるため、解の収束が早まる。
【0073】
図12は、式(9)のアルゴリズムにおいて、係数cの代わりに近似値c1を使い、G-setのG22を1000回解いたときの結果を示している。図13は、式(9)のアルゴリズムにおいて、係数cの代わりに近似値c´1を使い、G-setのG22を1000回解いたときの結果を示している。図14は、式(10)のアルゴリズムにおいて、係数cの代わりに近似値c1を使い、G-setのG22を1000回解いたときの結果を示している。図15は、式(10)のアルゴリズムにおいて、係数cの代わりに近似値c´1を使い、G-setのG22を1000回解いたときの結果を示している。
【0074】
図12図15において、上側のグラフは、カット数の平均値を示している。一方、図12図15において、下側のグラフは、カット数の最大値を示している。各軸の対応関係および両グラフにある水平方向の破線Cmaxの定義は、上述の各グラフと同様である。図12図15の各グラフにおいて破線で示されたデータは、式(8)のアルゴリズムを使ったときの結果を示している。
【0075】
図12図15を参照すると、カット数の平均値およびカット数の最大値のいずれにおいても、式(8)のアルゴリズムと比べて最適解により近い値が得られることがわかる。特に、式(10)のアルゴリズムにおいて、近似値c1またはc´1を使うと、カット数の最大値13359が得られていることがわかる。
【0076】
なお、式(9)のアルゴリズムおよび式(10)のアルゴリズムでは、近似値c1およびc´1の代わりに下記の式(15)で定義される近似値c2またはc´2を使ってもよい。
【数15】
【0077】
すなわち、更新部50は、第1ベクトルのそれぞれの要素を符号関数で変換した第4ベクトルのノルムを、第3ベクトルのノルムで除算した第3係数c2を計算し、第2ベクトルの要素に、第1係数p(t+Δt)と更新された第1ベクトルの対応する要素との積を重み付けした値ならびに、第3ベクトルの対応する要素を第3係数c2で重み付けした値を加算することによって第2ベクトルの要素を更新するように構成されていてもよい。
【0078】
また、更新部50は、第1ベクトルのそれぞれの要素を符号関数で変換した第4ベクトルどうしの内積を、第4ベクトルと第3ベクトルの内積の絶対値で除算した第3係数c´2を計算し、第2ベクトルの要素に、第1係数p(t+Δt)と更新された前記第1ベクトルの対応する要素との積を重み付けした値ならびに、第3ベクトルの対応する要素を第3係数c´2で重み付けした値を加算することによって第2ベクトルの要素を更新するように構成されていてもよい。
【0079】
式(15)の第3ベクトル(z,z,・・・,z)については、アルゴリズムで計算されたものを使うことができるため、近似値c2、c´2を求めたとしても、計算量が大幅に増えることはない。
【0080】
図16は、式(10)のアルゴリズムで係数cの代わりに近似値c2を使い、G-setのG22を1000回解いたときの結果を示している。図17は、式(10)のアルゴリズムで係数cの代わりに近似値c´2を使い、G-setのG22を1000回解いたときの結果を示している。図16および図17おいて、上側のグラフは、カット数の平均値を示している。一方、図16および図17において、下側のグラフは、カット数の最大値を示している。各軸の対応関係および両グラフにある水平方向の破線Cmaxの定義は、上述の各グラフと同様である。図16および図17の各グラフにおいて破線で示されたデータは、式(8)のアルゴリズムを使ったときの結果を示している。
【0081】
図16および図17を参照すると、式(8)のアルゴリズムと比べて最適解により近い値が得られることがわかる。式(10)のアルゴリズムにおいて、近似値c2またはc´2を使うと、カット数の最大値13359が得られていることがわかる。
【0082】
アルゴリズムの実行中における各ベクトルの値を使って、近似値c1、c´1、c2、c´2を計算すると、各計算タイミングによって値が激しく変動することがある。近似値c1、c´1、c2、c´2の変動を抑制するため、近似値c1、c´1、c2、c´2の代わりに近似値c1、c´1、c2、c´2を所定の規則に基づいて変換した値を使ってもよい。例えば、所定の規則として下記の式(16)を使うことができる。
【数16】
ここで、γに1より小さい値を設定することができる。式(16)のc(t+Δt)には、例えば、上述の式(13)~(15)によって計算された近似値が代入される。c(t+Δt)を、各計算タイミングにおいて振動成分を含む信号をサンプリングした値であるとみなすと、d(t+Δt)は、c(t+Δt)が一定帯域のローパスフィルタを通過した後の値に相当するといえる。
【0083】
すなわち、更新部50は、第3係数(近似値c1、c´1、c2、c´2のいずれか)がローパスフィルタを通過した後の値である第4係数を計算し、第3係数に代わり、第4係数を用いて第2ベクトルの要素を更新するように構成されていてもよい。
【0084】
図18は、係数cの代わりに、近似値c1を式(16)の規則に基づき変換した値(第4係数)を使った式(9)のアルゴリズムにおいて、G-setのG22を1000回解いたときの結果を示している。図19は、係数cの代わりに、近似値c1を式(16)の規則に基づき変換した値(第4係数)を使った式(10)のアルゴリズムにおいて、G-setのG22を1000回解いたときの結果を示している。図20は、係数cの代わりに、近似値c2を式(16)の規則に基づき変換した値(第4係数)を使った式(10)のアルゴリズムにおいて、G-setのG22を1000回解いたときの結果を示している。図18図20では、d(t)の初期値を0、γ=0.1として計算を行った。
【0085】
図18図20において、上側のグラフは、カット数の平均値を示している。一方、図18図20において、下側のグラフは、カット数の最大値を示している。各軸の対応関係および両グラフにある水平方向の破線Cmaxの定義は、上述の各グラフと同様である。図18図20の各グラフにおいて破線で示されたデータは、式(8)のアルゴリズムを使ったときの結果を示している。
【0086】
図18図20を参照すると、いずれの場合においても、式(8)のアルゴリズムと比べて最適解により近い値が得られることがわかる。特に図19および図20では、カット数の最大値13359が得られていることがわかる。
【0087】
上述では、シミュレーテッド分岐アルゴリズムを用いて、イジングモデルの解を求める例について説明した。ただし、シミュレーテッド分岐アルゴリズムによる求解が可能な組合せ最適化問題は、イジング問題に限られない。シミュレーテッド分岐アルゴリズムを用いることによって、一般的な2値変数の組合せ最適化問題を解くことが可能である。例えば、上述の各アルゴリズムは、目的関数の変数が、a(第1値)と、aより大きいb(第2値)のいずれかをとる2値変数である、組合せ最適化問題に適用することが可能である。例えば、上述の式(9)のアルゴリズムを使った場合、更新によって変数xがaより小さくなったとき、変数xの値をaに設定する。また、更新によって変数xがbより大きくなったとき、変数xの値をbに設定する。また、一定の更新回数の後に目的関数の解を求める場合、符号関数の代わりに、値域がaまたはbの2値である関数f(x)を使ってもよい。この関数f(x)がとる値は、変数xの値をしきい値v(a<v<b)と比較した結果に基づいて決まる。例えば、x<vであるならば、f(x)=aとなる。また、v<xであるならば、f(x)=bとなる。例えば、x=vである場合、f(x)=aまたは、f(x)=bとなる。ここで、しきい値vの値として、例えば、(a+b)/2を使うことができる。上述の関数f(x)は、第1ベクトルの要素を第4ベクトルの要素に変換する第1関数として使われてもよい。
【0088】
ここまでは、シンプレクティック・オイラー法によって実装されたシミュレーテッド分岐アルゴリズムの例と、それぞれのアルゴリズムを使って組合せ最適化問題を計算した結果について説明した。以降では、上述のアルゴリズムの実装例について述べる。
【0089】
(PCクラスタへの実装例)
はじめに、PCクラスタへ上述のアルゴリズムを実装した例について説明する。PCクラスタとは、複数台のコンピュータを接続し、1台のコンピュータでは得られない計算性能を実現するシステムである。例えば、図1に示した情報処理システム100は、複数台の計算サーバおよびプロセッサを含んでおり、PCクラスタとして利用することが可能である。例えば、PCクラスタにおいては、MPI(Message Passing Interface)を使うことにより、情報処理システム100のような複数の計算サーバにメモリが分散して配置されている構成でも並列的な計算を実行することが可能である。例えば、MPIを使って管理サーバ1の制御プログラム14E、各計算サーバの計算プログラム34Bおよび制御プログラム34Cを実装することができる。
【0090】
PCクラスタで利用するプロセッサ数がQである場合、それぞれのプロセッサに、第1ベクトル(x,x,・・・,x)に含まれる変数xのうち、L個の変数の計算を行わせることができる。同様に、それぞれのプロセッサに、第2ベクトル(y,y,・・・,y)に含まれる変数yのうち、L個の変数の計算を行わせることができる。すなわち、プロセッサ#j(j=1,2,・・・,Q)は、変数{x|m=(j-1)L+1,(j-1)L+2,・・・,jL}および{y|m=(j-1)L+1,(j-1)L+2,・・・,jL}の計算を行う。また、プロセッサ#jによる{y|m=(j-1)L+1,(j-1)L+2,・・・,jL}の計算に必要な下記の式(17)に示されたテンソルJ(n)は、プロセッサ#jがアクセス可能な記憶領域(例えば、レジスタ、キャッシュ、メモリなど)に保存されるものとする。
【数17】
【0091】
ここでは、それぞれのプロセッサが第1ベクトルおよび第2ベクトルの一定数の変数を計算する場合を説明した。ただし、プロセッサによって、計算する第1ベクトルおよび第2ベクトルの変数の数が異なっていてもよい。例えば、計算サーバに実装されるプロセッサによって性能差がある場合、プロセッサの性能に応じて計算対象とする変数の数を決めることができる。
【0092】
すなわち、情報処理装置(例えば、計算サーバ)は、複数のプロセッサを備えていてもよい。更新部50は、複数のプロセッサを含んでおり、更新部50の複数のプロセッサのそれぞれは、第1ベクトルの一部の要素の値および第2ベクトルの一部の要素の値を更新するように構成されていてもよい。
【0093】
変数yの値を更新するためには、第1ベクトル(x,x,・・・,x)または第1ベクトルの各要素を2値変数に変換した第4ベクトル(s,s,・・・,s)のすべての成分の値が必要となる。2値変数への変換は、例えば、符号関数sgn()を使うことによって行うことができる。そこで、Allgather関数を使い、第1ベクトル(x,x,・・・,x)または第4ベクトル(s,s,・・・,s)のすべての成分の値をQ個のプロセッサに共有させることができる。第1ベクトル(x,x,・・・,x)または第4ベクトル(s,s,・・・,s)については、プロセッサ間での値の共有が必要であるものの、第2ベクトル(y,y,・・・,y)およびテンソルJ(n)については、プロセッサ間での値の共有を行うことは必須ではない。プロセッサ間でのデータの共有は、例えば、プロセッサ間通信を使ったり、共有メモリにデータを保存したりすることによって実現することができる。
【0094】
プロセッサ#jは、変数{z|m=(j-1)L+1,(j-1)L+2,・・・,jL}の値を計算する。そして、プロセッサ#jは、計算した{z|m=(j-1)L+1,(j-1)L+2,・・・,jL}の値に基づき、変数{y|m=(j-1)L+1,(j-1)L+2,・・・,jL}を更新する。
【0095】
上述の各式に示したように、ベクトル(z,z,・・・,z)の計算では、テンソルJ(n)と、ベクトル(x,x,・・・,x)または(s,s,・・・,s)との積の計算を含む、積和演算が必要である。積和演算は、上述のアルゴリズムにおいて最も計算量の大きい処理であり、計算速度の向上においてボトルネックとなりうる。そこで、PCクラスタの実装では、積和演算を、Q=N/L個のプロセッサに分散して並列的に実行し、計算時間の短縮をはかることができる。
【0096】
すなわち、情報処理装置(例えば、計算サーバ)は、複数のプロセッサを備えていてもよい。積和演算部51は、複数のプロセッサを含み、積和演算部51の複数のプロセッサのそれぞれは、第3ベクトルの一部の要素を更新するように構成されていてもよい。更新部50は、複数のプロセッサを含み、更新部50の複数のプロセッサのそれぞれは、第1ベクトルの一部の要素および第2ベクトルの一部の要素を更新するように構成されていてもよい。
【0097】
図21は、マルチプロセッサ構成の例を概略的に示している。図21の複数の計算ノードは、例えば、情報処理システム100の複数の計算サーバに相当する。また、図21の高速リンクは、例えば、情報処理システム100のケーブル4a~4cおよびスイッチ5によって形成された計算サーバ間のインターコネクトに相当する。図21の共有メモリは、例えば、共有メモリ32に相当する。図21のプロセッサは、例えば、各計算サーバのプロセッサ33A~33Dに相当している。なお、図21には複数の計算ノードが示されているが、単一計算ノードの構成を用いることを妨げるものではない。
【0098】
図21には、各構成要素に配置されるデータおよび構成要素間で転送されるデータが示されている。各プロセッサでは、変数x、(s)、y、zの値が計算される。また、プロセッサと共有メモリ間では、変数xまたはsが転送される。各計算ノードの共有メモリには、例えば、第1ベクトル(x,x,・・・,x)、第2ベクトル(y,y,・・・,y)のL個の変数、およびテンソルJ(n)の一部が保存される。なお、式(10)のアルゴリズムを実行する場合、各計算ノードの共有メモリには、第1ベクトル(x,x,・・・,x)に代わって第4ベクトル(s,s,・・・,s)が保存されていてもよい。そして、計算ノード間を接続する高速リンクでは、例えば、第1ベクトル(x,x,・・・,x)が転送される。Allgather関数を使った場合、各プロセッサで変数yおよびzを更新するために、第1ベクトル(x,x,・・・,x)の全要素が必要だからである。なお、式(10)のアルゴリズムにしたがって変数zを更新する場合には、各プロセッサは第4ベクトル(s,s,・・・,s)の全要素にアクセスする必要がある。このため、高速リンクでは、第4ベクトル(s,s,・・・,s)が転送されてもよい。
【0099】
ただし、図21に示したデータの配置および転送は一例にしかすぎない。例えば、各プロセッサが積和演算を含む{z|m=(j-1)L+1,(j-1)L+2,・・・,jL}の計算を並列的に実行しているのであれば、それぞれのプロセッサと共有メモリ間および計算ノード間で変数zの値を転送し、共有されたベクトル(z,z,・・・,z)を参照し、変数yの値を計算してもよい。このように、PCクラスタにおけるデータの配置方法、転送方法および並列化の実現方法については、特に問わない。
【0100】
すなわち、情報処理装置(例えば、計算サーバ)は、複数のプロセッサからアクセス可能に構成されている共有メモリを備えていてもよい。この場合、更新部50は、更新された後の第1ベクトルの要素または、更新された後の第1ベクトルのそれぞれの要素を2値変数に変換した第4ベクトルを共有メモリに保存することができる。
【0101】
次に、PCクラスタに上述の各アルゴリズムを実行させたときにおける結果について説明する。図23は、PCクラスタを使ってN=3600の(局所磁場のない)全結合イジング問題を解いたときの結果を示している。図23の全結合イジング問題では、結合係数の行列Jの各成分の値は、[-1,1]の範囲の一様乱数に設定した。また、合計時間ステップ数は、10000とした。図23上側の棒グラフは、各アルゴリズムを使って10回全結合イジング問題を解いたときにおけるエネルギーEIsingの平均値を示している。図23下側の棒グラフは、各アルゴリズムを使って10回全結合イジング問題を解いたときにおける計算時間の平均値を秒単位で示している。
【0102】
図23上側および図23下側の棒グラフには、左側から右側に向かって、
(i) 式(8)のアルゴリズムが使われた場合、
(ii) 式(9)のアルゴリズムが使われた場合、
(iii) 式(10)のアルゴリズムが使われた場合、
(iv) 式(11)のアルゴリズムが使われた場合、
(v) 式(9)のアルゴリズムにおいて、係数cの代わりに近似値c1が使われた場合、
(vi) 式(10)のアルゴリズムにおいて、係数cの代わりに近似値c1が使われた場合、
(vii) 式(10)のアルゴリズムにおいて、係数cの代わりに近似値c2が使われた場合、
(viii) 式(9)のアルゴリズムにおいて、係数cの代わりに近似値c1を式(16)の規則に基づき変換した値(第4係数)が使われた場合、
(ix) 式(10)のアルゴリズムにおいて、係数cの代わりに近似値c1を式(16)の規則に基づき変換した値(第4係数)が使われた場合、
(x) 式(10)のアルゴリズムにおいて、係数cの代わりに近似値c2を式(16)の規則に基づき変換した値が使われた場合の10のケースの結果が示されている。
【0103】
また、図23上側および図23下側の棒グラフには、各ケースのそれぞれについて、左側から右側に向かって、プロセッサ数Qが1、36、72の場合における結果が示されている。なお、プロセッサ数Qが1または36の場合、PCクラスタの計算ノード数は1であった。また、プロセッサ数Qが72の場合、PCクラスタの計算ノード数は2であった。式(8)のアルゴリズムが使われた場合、式(9)のアルゴリズムが使われた場合、式(10)のアルゴリズムが使われた場合において、係数cとして定数0.5D√(3/N)を用いた。また、近似値c1またはc2を式(16)の規則に基づき変換した場合においては、γ=0.1に設定した。
【0104】
図23上側の棒グラフを参照すると、(ii)~(x)のケースでは、(i)のケースと比べ、エネルギーEIsingの平均値が低くなっており、最適解により近い解が得られやすいことがわかる。また、図23下側の棒グラフを参照すると、マルチプロセッサ構成による並列計算を行うことにより、計算時間が著しく短縮されることがわかる。
【0105】
(GPUへの実装例)
GPU(Graphics Processing Unit)を使って上述の各アルゴリズムの計算を行ってもよい。図24は、GPUを使った構成の例を概略的に示している。図24には、互いに高速リンクで接続された複数のGPUが示されている。それぞれのGPUには、共有メモリにアクセス可能な複数のコアが搭載されている。また、図243の構成例では、複数のGPUが高速リンクを介して接続されており、GPUクラスタを形成している。例えば、GPUが図1のそれぞれの計算サーバに搭載されている場合、高速リンクは、ケーブル4a~4cおよびスイッチ5によって形成された計算サーバ間のインターコネクトに相当する。なお、図24の構成例では、複数のGPUが使われているが、ひとつのGPUを使った場合にも、並列的な計算を実行することが可能である。すなわち、図24のそれぞれのGPUは、図21のそれぞれの計算ノードに相当する計算を実行できる。すなわち、情報処理装置(計算サーバ)のプロセッサは、Graphics Processing Unit(GPU)のコアであってもよい。
【0106】
GPUにおいて、変数xおよびy、ならびにテンソルJ(n)はデバイス変数として定義される。GPUは、変数yの更新に必要なテンソルJ(n)と第1ベクトル(x,x,・・・,x)または第4ベクトル(s,s,・・・,s)の積を、行列ベクトル積関数によって並列的に計算することができる。なお、行列とベクトルの積演算を繰り返し実行することにより、テンソルとベクトルの積を求めることができる。また、第1ベクトル(x,x,・・・,x)の計算と、第2ベクトル(y,y,・・・,y)のうち、積和演算以外の部分については、それぞれのスレッドにi番目の要素(x,y)の更新処理を実行させ、処理の並列化を実現することができる。
【0107】
図24は、GPUを使ってN=3600の全結合イジング問題を解いたときの結果を示している。図24上側の棒グラフは、各アルゴリズムを使って10回全結合イジング問題を解いたときにおけるエネルギーEIsingの平均値を示している。図24下側の棒グラフは、各アルゴリズムを使って10回全結合イジング問題を解いたときにおける計算時間の平均値を秒単位で示している。
【0108】
図24上側および図24下側の棒グラフには、左側から右側に向かって、式(8)のアルゴリズムが使われた場合、式(9)のアルゴリズムが使われた場合、式(10)のアルゴリズムが使われた場合、式(11)のアルゴリズムが使われた場合の4つのケースにおける結果が示されている。式(8)のアルゴリズムが使われた場合、式(9)のアルゴリズムが使われた場合、式(10)のアルゴリズムが使われた場合において、係数cとして定数0.5D√(3/N)を用いた。いずれの結果においても合計時間ステップ数は、10000である。また、それぞれのアルゴリズムについて、左側が1計算ノードのPCクラスタ、右側が1GPUを用いたときの結果が示されている。
【0109】
図24上側の棒グラフを参照すると、式(9)~式(11)のアルゴリズムが使われた場合には、式(8)のアルゴリズムが使われた場合と比べ、エネルギーEIsingの平均値が低くなっており、最適解により近い解が得られやすいことがわかる。また、図24下側の棒グラフを参照すると、GPUによる並列計算を行うことにより、1計算ノードのPCクラスタと比べて計算時間を著しく短縮できることがわかる。これは、GPUの計算の並列度が、一般的なCPUと比べて高いことに起因する。
【0110】
(処理フローの例)
図25および図26は、情報処理システム100が実行する処理の例を示したフローチャートである。以下では、図25および図26を参照しながら、処理を説明する。
【0111】
はじめに、更新部50は、定数係数に値を設定し、第1ベクトル、第2ベクトルおよび第1係数pを初期化する(ステップS101)。ステップS101では、例えば、定数係数D、Δtの値が設定される。係数cが定数係数である場合には、係数cの値を設定してもよい。例えば、第1ベクトルおよび第2ベクトルの初期化では、それぞれの要素の値を[-0.1,+0.1]の範囲の擬似乱数に設定することができる。例えば、第1係数pの初期値として、0を使うことができる。なお、第3ベクトルの要素の値の計算で用いられる係数αが定数係数でない場合には、ステップS101で係数αを初期化してもよい。例えば、係数αの初期値として、0を使うことができる。なお、ステップS101では、テンソルJ(n)の要素の値が設定されてもよい。テンソルJ(n)の要素の値は、例えば、組合せ最適化問題を各計算サーバが処理可能な形式に変換する際に得られる。なお、上述では、係数pとαを更新回数に応じて単調増加させるアルゴリズムについて説明した。ただし、代わりに係数pとαを更新回数に応じて単調減少させるアルゴリズムを使ってもよい。
【0112】
次に、更新部50は、第1ベクトルの要素の値に第2ベクトルの対応する要素に重み付けした値を加算し、第1ベクトルの要素の値を更新する(ステップS102)。例えば、ステップS102では、上述の式(9)~(11)に示したxの式に基づいて第1ベクトルの要素の値を更新することができる。
【0113】
そして、更新部50は、第1ベクトルの要素のうち、値が-1より小さい要素の値を-1に設定する(ステップS103)。また、更新部50は、第1ベクトルの要素のうち、値が+1より小さい要素の値を+1に設定する(ステップS104)。ステップS103、ステップS104の処理は同時に行われてもよい。また、ステップS103の処理がステップS104の処理の後に実行されてもよい。
【0114】
図25には示されていないものの、ステップS103およびステップS104のタイミングで、更新部50は、絶対値が1より大きい第1ベクトルの要素に対応する第2ベクトルの要素を、もとの第2ベクトルの要素に、-1より大きく0以下の第2係数rを乗じた値に更新してもよい。ステップS103およびステップS104のタイミングで、更新部50は、絶対値が1より大きい第1ベクトルの要素に対応する第2ベクトルの要素を、絶対値が1より小さい擬似乱数に置き換えてもよい。
【0115】
次に、積和演算部51は、第3ベクトルのそれぞれの要素の値を更新する(ステップS105)。第3ベクトルの要素は、例えば、上述の式(9)~(11)に示したzの式(基本式)に基づいて計算することができる。式(10)のアルゴリズムに基づき、zの式の変数として、第1ベクトルの要素の値を第1関数(例えば、符号関数)で変換した値を使うことによって第3ベクトルのそれぞれの要素の値を更新してもよい。この場合、ステップS105では、ステップS102で更新された第1ベクトルを2値変数に変換した第4ベクトル(s,s,・・・,s)を使って第3ベクトルの要素の値を計算する。
【0116】
そして、更新部50は、第1係数pの値を増やす(ステップS106)。例えば、ステップS106では、第1係数pに一定の値を加算してもよい。これにより、第1係数pの値を更新回数に応じて単調増加させることができる。なお、係数αが定数係数でない場合には、ステップS106で係数αに一定の値を加算してもよい。なお、ステップS106のタイミングに、式(13)~(15)の方法で第3係数を更新してもよい。また、式(16)の方法で第3係数を変換した第4係数を計算してもよい。
【0117】
次に、更新部50は、第2ベクトルの要素の値に第1係数pと第1ベクトルの対応する要素の値との積を重み付けした値ならびに、第3ベクトルの対応する要素を重み付けした値を加算し、第2ベクトルの要素の値を更新する(ステップS107)。例えば、ステップS107では上述の式(9)~(11)に示したyの式に基づいて、第2ベクトルの要素の値を更新することができる。第2ベクトルの要素の値の更新では、定数係数c、第3係数、第4係数のいずれかを使って第3ベクトルの対応する要素を重み付けすることができる。
【0118】
次に、更新部50は、第1~第3ベクトルの更新回数または第1係数pの値がしきい値より大きいか否かを判定する(ステップS108)。ステップS108の判定で用いられるしきい値については、特に限定しない。ステップS108の判定の結果に応じて、実行される処理が分岐する。ステップS108の判定の結果が肯定的である場合(ステップS108のYES)、処理はステップS109に進む。ステップS109では、更新部50が正値である第1ベクトルの要素の値を+1に変換し、負値である第1ベクトルの要素の値を-1に変換し、イジングモデルのスピンの値が求められる。なお、ステップS109の処理は、管理サーバなど、計算サーバ以外の情報処理装置によって実行されてもよい。この場合、第1ベクトルが計算サーバから管理サーバに送信される。また、ステップS108の判定の結果が否定的である場合(ステップS108のNO)、ステップS102以降の処理が再び実行される。
【0119】
図25および図26に示したフローチャートは、情報処理システム100が実行する処理の一例にしかすぎない。ステップS102~ステップS107の処理が実行される順序は、上述と異なっていてもよい。例えば、後述の電子回路への実施例では、図25および図26に示したフローチャートとは異なる順序でステップS102~ステップS107の処理が実行される。また、ステップS101~ステップS109の少なくともいずれかの処理は、複数のプロセッサ、情報処理装置(コンピュータ)または、電子回路によって並列的に実行されてもよい。ただし、第3ベクトルの要素(変数z)を更新するときに、最新の更新回における第1ベクトル(x,x,・・・,x)または第4ベクトル(s,s,・・・,s)の全要素の値を参照できるよう、情報処理システム、情報処理装置(コンピュータ)または、電子回路を実装する必要がある。
【0120】
計算されたイジングモデルのスピンの値は、ディスプレイに表示されてもよい。また、管理サーバ1の変換部12は、スピンの値を組み合わせ最適化問題の解に変換してもよい。この場合、管理サーバ1の管理部11は、組合せ最適化問題の解を情報端末6のディスプレイに表示させることができる。
【0121】
プログラムを使ってシミュレーテッド分岐アルゴリズムを実装してもよい。この場合、目的関数を、すべての項に含まれる変数について偏微分した形式の基本式に基づく計算をコンピュータに実行させるプログラムを実装することができる。当該プログラムは、変数が第1ベクトルの要素または、第1ベクトルの要素を第1値もしくは第1値より大きい第2値のいずれかの値をとる第1関数で変換した第4ベクトルの要素である、基本式に基づき、第3ベクトルのそれぞれの要素を更新するステップと、第1ベクトルの要素に、第2ベクトルの対応する要素、または、第2ベクトルの対応する要素に重み付けした値を加算することによって第1ベクトルの要素を更新するステップと、値が第1値より小さい第1ベクトルの要素を第1値に設定するステップと、値が第2値より大きい第1ベクトルの要素を第2値に設定するステップと、第2ベクトルの要素に、更新回数に応じて単調増加または単調減少する第1係数と第1ベクトルの対応する要素との積を重み付けした値ならびに、第3ベクトルの対応する要素を重み付けした値を加算することによって第2ベクトルの要素を更新するステップとを含んでいてもよい。プログラムは、例えば、計算サーバのストレージ34に保存される。そして、計算サーバは、プログラムを実行することにより、上述の情報処理装置の機能を提供する。
【0122】
また、コンピュータは、下記の情報処理方法によってシミュレーテッド分岐アルゴリズムを実行することができる。情報処理方法は、目的関数を、すべての項に含まれる変数について偏微分した形式の基本式に基づく計算をコンピュータに実行させるものであってもよい。当該情報処理方法は、変数が第1ベクトルの要素または、第1ベクトルの要素を第1値もしくは第1値より大きい第2値のいずれかの値をとる第1関数で変換した第4ベクトルの要素である、基本式に基づき、第3ベクトルのそれぞれの要素を更新するステップと、第1ベクトルの要素に、第2ベクトルの対応する要素、または、第2ベクトルの対応する要素に重み付けした値を加算することによって第1ベクトルの要素を更新するステップと、値が第1値より小さい第1ベクトルの要素を第1値に設定するステップと、値が第2値より大きい第1ベクトルの要素を第2値に設定するステップと、第2ベクトルの要素に、更新回数に応じて単調増加または単調減少する第1係数と第1ベクトルの対応する要素との積を重み付けした値ならびに、第3ベクトルの対応する要素を重み付けした値を加算することによって第2ベクトルの要素を更新するステップをコンピュータに実行させるものであってもよい。コンピュータとして、例えば、上述の計算サーバを使うことができる。
【0123】
(電子回路への実装例)
上述のように、ソフトウェアを使うことによってシミュレーテッド分岐アルゴリズムを実行する情報処理装置を実現することができる。ただし、上述の各アルゴリズムの少なくとも一部を電子回路に実装し、処理速度の大幅な向上させてもよい。以下では、シミュレーテッド分岐アルゴリズムを電子回路に実装した例について説明する。電子回路の例としては、FPGA(Field-Programmable Gate Array)がある。ただし、電子回路は、ASIC(Application Specific Integrated Circuit)などその他の種類のものであってもよい。
【0124】
図27は、電子回路に実装されるアルゴリズムの一例を示している。図27は、上述の式(10)のアルゴリズムの擬似的なコードに相当する。以下では、主に電子回路に式(10)のアルゴリズムを実装した場合を例に、説明をする。ただし、電子回路に、式(9)、式(11)など、上述で説明したその他のアルゴリズムを実装してもよい。図27(a)は、それぞれの変数x、y、s(i=1,2,・・・,N)を更新する処理(すなわち、時刻“t”の変数を時刻“t+Δt”の変数にする処理)を示している。それぞれの種類の変数はN個あるため、図27(a)では、それぞれの種類の変数について更新の処理がN回実行されている(ループ37、38)。図27(a)のループ37から関数JS()が呼び出されている。関数JS()は、図27(b)に定義されており、J行列の行iおよびベクトル(s,s,・・・,s)を引数としている。また、図27(a)のループ38から関数TE()が呼び出されている。関数TE()は、図27(c)に定義されている。また、関数TE()からは、図27(d)に定義されている関数FX()およびFY()が呼び出されている。なお、並列処理に対応した電子回路を使う場合、図27のループ(for文)の少なくとも一部を、並列的な処理に置き換えて実装することができる。
【0125】
図27は、壁と複数の粒子i(i=1,2,・・・,N)とを含む力学系の状態を計算するアルゴリズムと見なすことができる。以下では、粒子iの運動状態との対応を示しながら、アルゴリズムの各ステップで実行される処理を説明する。図27のアルゴリズムは、行列ベクトル積を計算する部分(MMパート)と、時間発展(Time-evolution)に相当する計算を行う部分(TEパート)とを含む。
【0126】
MMパートでは、それぞれの粒子iについて、他の粒子との相互作用によって生ずる運動量yiの変更量(Δyi)が計算される。TEパートは、それぞれの粒子iの位置xiおよび運動量yiを更新する。粒子の位置および運動量の更新処理は、時間ステップΔtの時間発展の計算処理に相当するといえる。
【0127】
TEパートでは、粒子iの運動量yiにΔyiを加算した後、外場(external field)hiの影響を受けた後の運動量yiを計算する。そして、粒子iの運動量yiに当該粒子の位置xiに依存する量δyi=FX(xi)を加算する。次に、粒子iの位置xiに当該粒子の運動量yiに依存する量δxi=FY(yi)を加算する。さらに、粒子iが完全非弾性衝突壁(x=±1.0)に衝突したか否かを判定し、衝突があった場合には粒子iの位置xiを壁の位置に配置する処理が実行される。この処理は、電子回路では、例えば、図32のコンパレータcomp1およびマルチプレクサMUX1によって実装される。そして、粒子iが完全非弾性衝突壁(x=±1.0)に衝突した場合には、運動量yiを0.0に設定する処理が実行される。この処理は、例えば、電子回路では、図32のコンパレータcomp2およびマルチプレクサMUX2によって実装される。TEパートの最後に、粒子iの位置xiを二値化する処理が実行される。この処理は、電子回路では、例えば、図32のコンパレータcomp3およびマルチプレクサMUX3によって実装される。
【0128】
図27のアルゴリズムを参照すると、N個の粒子に係る変数(例えば、位置および運動量)を並列的に計算できれば、全般的な処理速度の高速が可能であることがわかる。ただし、アルゴリズムの実装を行う際には、他の粒子から独立して変数を計算でき、処理の並列化が容易である部分と、他の粒子の変数との依存関係があるため、処理の並列化において制約となりうる部分との違いを考慮する必要がある。
【0129】
図27のアルゴリズムの計算複雑性(computational complexity)について考察する。TEパートの計算複雑性はO(N)である。一方、MMパートの計算複雑性はO(N)となっている。TEパートは、逐次的な処理が必要であるものの、それぞれの粒子について独立した計算が可能である。このため、TEパートでは、処理のパイプライン化または時間並列化の手法による処理の高速化が可能である。MMパートの処理は、並列的な処理要素(PE:Processing element)と、データの供給を行うためのメモリサブシステムを使うことにより、処理時間を短縮することができる。
【0130】
以下では、複数のTEパイプライン回路を使うことによって、MMパートの処理とTEパートの処理を時間領域においてオーバーラップさせ、処理のさらなる高速化を実現する構成について説明する。図27のアルゴリズムを参照すると、第4ベクトル(s,s,・・・,s)を更新するためには、MMパートの処理が行われ、すべてのi(i=1,2,・・・,N)についてΔyiの値が算出されている必要があることがわかる。すなわち、図27のアルゴリズムでは、第4ベクトル(s,s,・・・,s)について、データ依存性がある。当該データ依存性は、MMパートの処理とTEパートの処理の時間領域におけるオーバーラップ化を妨げる。データ依存性の問題を解決するために、第4ベクトル(s,s,・・・,s)の要素の値をダブルバッファ構成のメモリ(メモリSmemとよぶ)に保存することができる。
【0131】
図28は、電子回路の構成例を示したブロック図である。図28の電子回路200は、図27のアルゴリズムに示したループ処理を実行できるよう、データが回路内の各構成要素を循環できる構成となっている。電子回路200では、上述のN個の粒子をPb個のグループに分割し、それぞれの粒子に係る変数の更新処理が実行されるものとする(図29参照)。電子回路200は、少なくともPb個の回路ブロックMMTE(MMTE~MMTEPb)を備えている。回路ブロックMMTEは、各グループに属するNb個(Nb=N/Pb)の粒子について、MMパートの処理と、TEパートの処理とを実行する。また、それぞれの回路ブロックMMTEは、メモリSmemに接続されている。
【0132】
メモリSmemは、それぞれの回路ブロックMMTE~MMTEPbからグローバルにアクセス可能な記憶領域を提供する。メモリSmemは、例えば、揮発性メモリ、不揮発性メモリまたはこれらの組合せによって構成されている。ただし、メモリSmemで使われるメモリの種類については特に問わない。それぞれの回路ブロックMMTEは、メモリSmemへのデータの書き込みと、メモリSmemからのデータ読み出しを並行して行えるように構成されていてもよい。メモリSmemは、Pb個の領域SB1,SB2,・・・,SBPbを含んでいる。また、メモリSmemのそれぞれの領域は、evenバッファと、oddバッファとを含むダブルバッファ構成となっている。evenバッファおよびoddバッファは、第1の動作と第2の動作を交互に実行する。それぞれの期間において、evenバッファと、oddバッファで異なる動作を実行することが可能である。すなわち、一方のバッファが第1の動作を実行している期間において、他方のバッファは第2の動作を実行することができる。第1の動作において、バッファは、第4ベクトル(s,s,・・・,s)を回路ブロックMMTE~MMTEPbにブロードキャストする。第2の動作において、バッファは、回路ブロックMMTE~MMTEPbから受信した更新後の変数sを記憶領域に保存する。ここで、バッファは、evenバッファまたはoddバッファのいずれかを示すものとする。
【0133】
このように、電子回路の第1メモリ(メモリSmem)は、第1領域と第2領域とをそれぞれPb個ずつ有していてもよい。第1領域および第2領域は、第1領域からPb個の第1回路(回路ブロックMM)に第4ベクトルの要素がブロードキャストされている期間に、第2領域に第2回路(回路ブロックTE)から入力された更新後の第4ベクトルの要素が保存され、第2領域からPb個の第1回路に第4ベクトルの要素がブロードキャストされている期間に、第1領域に第2回路から入力された更新後の第4ベクトルの要素が保存されるように構成されていてもよい。
【0134】
回路ブロックMMTE(k=1,2,・・・,Pb)は、回路ブロックMMと、回路ブロックTEと、メモリXBkと、メモリYBkと、メモリHBkと、メモリJBkとを備える。メモリXBkには、Nb個の変数xが格納される。メモリYBkには、Nb個の変数yが格納される。メモリHBkには、Nb個のhの値が格納される。また、メモリJBkには、J行列のNb×N個の要素が格納される。回路ブロックMMは、メモリSmemとメモリJBkに接続されている。回路ブロックMMは、メモリSmemから受信した第4ベクトル(s,s,・・・,s)と、メモリJBkから読み出したJ行列のNb×N個の要素を用いて、下記の式(18)の積和(MAC:multiply-accumulate)演算を実行し、Δyを出力する。
【数18】
【0135】
回路ブロックTEは、メモリXBkと、メモリYBkと、メモリHBkと、メモリSmemと、回路ブロックMMに接続されている。回路ブロックTEは、メモリXBkから読み出した変数xの値と、メモリYBkから読み出した変数yの値と、メモリHBkから読み出したhの値と、回路ブロックMMから出力されたΔyの値を用いて、TEパートの処理をパイプライン方式で実行する。そして、回路ブロックTEは、更新後の変数x、y、sを出力する。また、回路ブロックTEは、更新後の変数x、y、sをそれぞれメモリXBk、YBkおよびメモリSmemの領域SBkに書き出す。回路ブロックTEの実行する処理により、それぞれのメモリには、変数の更新後の値が格納される。
【0136】
電子回路は、第1回路(回路ブロックMM)と、第2回路(回路ブロックTE)とを備えていてもよい。例えば、第1回路は、目的関数を、すべての項に含まれる変数について偏微分した形式の基本式に基づき、第3ベクトルのそれぞれの要素を更新するように構成されている。ここで、基本式の変数は、例えば、第1ベクトルの要素、または、第1ベクトルの要素を第1値もしくは第1値より大きい第2値のいずれかの値をとる第1関数で変換した第4ベクトルの要素である。第2回路は、第1ベクトルの要素に、第2ベクトルの対応する要素、または、第2ベクトルの対応する要素に重み付けした値を加算することによって第1ベクトルの要素を更新し、値が第1値より小さい第1ベクトルの要素を第1値に設定し、値が第2値より大きい第1ベクトルの要素を第2値に設定し、第2ベクトルの要素に、更新回数に応じて単調増加または単調減少する第1係数と第1ベクトルの対応する要素との積を重み付けした値、ならびに、第3ベクトルの対応する要素を重み付けした値を加算することによって第2ベクトルの要素を更新するように構成されていてもよい。ここでは、主に、複数(Pb個)の第1回路と、Pb個の第2回路を備えた電子回路を例に説明する。ただし、電子回路は、少なくともひとつの第1回路と、少なくともひとつの第2回路とを備えていてもよい。
【0137】
第2回路は、値が第1値と第2値の間にある第3値より小さい第1ベクトルの要素を第1値に変換し、値が第3値より大きい第1ベクトルの要素を第2値に変換することによって、目的関数の解を求めるように構成されていてもよい。また、第2回路は、第1ベクトル、第2ベクトル、第3ベクトルの更新回数または第1係数の値がしきい値より大きくなったときに目的関数の解を求めるように構成されていてもよい。さらに、第2回路は、値が第1値より小さい第1ベクトルの要素に対応する第2ベクトルの要素、または、第2値より大きい第1ベクトルの要素に対応する第2ベクトルの要素を、もとの第2ベクトルの要素に、第2係数を乗じた値に更新するように構成されていてもよい。代わりに、第2回路は、値が第1値より小さい第1ベクトルの要素に対応する第2ベクトルの要素の値、または、値が第2値より大きい第1ベクトルの要素に対応する第2ベクトルの要素の値を、擬似乱数に設定するように構成されていてもよい。
【0138】
第1回路は、第1ベクトルの要素を変数として計算した基本式の値を第1関数で変換した値に基づいて第3ベクトルのそれぞれの要素を更新するように構成されていてもよい。また、第1回路は、第1係数をパラメータとする第2関数を乗じることによって第3ベクトルのそれぞれの要素を更新するように構成されていてもよい。
【0139】
電子回路は、さらに、第1回路の入力側と、第2回路の出力側に接続され、第4ベクトルまたは第1ベクトルを格納するように構成された第1メモリを備えていてもよい。ここで、第1回路の出力側は、第2回路の入力側に接続されていてもよい。
【0140】
また、電子回路は、第1メモリ(メモリSmem)と、Pb個(Pbは2以上の整数)の第1回路(回路ブロックMM)と、Pb個の第2回路(回路ブロックTE)とを備えていてもよい。この場合、Pb個の第1回路は、それぞれが入力側で第1メモリに接続されている。Pb個の第2回路は、それぞれが入力側でいずれかの第1回路に接続されており、それぞれが出力側で第1メモリに接続されている。
【0141】
それぞれの第1回路(回路ブロックMM)は、例えば、図29に示されているように、N×N次元の結合係数行列をPb個に分割したN/Pb×Pc次元の第1行列のいずれかと、第4ベクトル(s,s,・・・,s)をPb個に分割した第5ベクトルのいずれかとの積である第3ベクトルの要素Δyを計算するように構成されている。また、それぞれの第2回路(回路ブロックTE)は、いずれかの第1回路が計算した第3ベクトルの要素Δyに基づき、第1ベクトルのN/Pb個の要素および第2ベクトルのN/Pb個の要素および第4ベクトルのN/Pb個の要素を更新し、更新した第4ベクトルのN/Pb個の要素を第1メモリに保存するように構成されていてもよい。なお、それぞれの第1回路は、上述の第3ベクトルの要素Δyの計算を複数回に分けて実行してもよい。例えば、それぞれの第1回路は、N/Pb×Pc次元の第1行列を、Pr×Pc次元の複数の第2行列(Jサブ行列)に、第5ベクトルを要素数Pcの複数の第6ベクトル(sサブベクトル)にそれぞれ分割してもよい。そして、それぞれの第1回路は、それぞれのPr×Pc次元の第2行列と、対応する要素数Pcの第6ベクトルとの積演算を順次実行することにより、第3ベクトルの要素を計算するように構成されていてもよい。また、それぞれの第2回路は、値が第1値より小さい第1ベクトルの要素を第1値に設定し、値が第2値より大きい第1ベクトルの要素を第2値に設定するように構成されていてもよい。
【0142】
すなわち、電子回路の実装例における、第1回路(回路ブロックMM)は、上述の積和演算部に相当する処理を実行する。また、第1回路(回路ブロックMM)は、上述の更新部に相当する処理を実行する。
【0143】
電子回路は、さらにPb個の第2メモリ(メモリXBk)と、Pb個の第3メモリ(メモリJBk)と、Pb個の第4メモリ(メモリYBk)と、Pb個の第5メモリ(メモリHBk)とを備えていてもよい。それぞれの第2メモリは、第1ベクトルのNb=N/Pb個の要素を格納するように構成されている。それぞれの第3メモリは、いずれかの第1行列を格納するように構成されている。それぞれの第4メモリは、第2ベクトルのN/Pb個の要素を格納するように構成されている。それぞれの第5メモリは、第6ベクトルのN/Pb個の要素を格納するように構成されている。
【0144】
それぞれの第2メモリは、いずれかの第2回路(回路ブロックTE)の入力側および出力側に接続されている。それぞれの第3メモリは、いずれかの第1回路(回路ブロックMM)の入力側に接続されている。それぞれの第4メモリは、いずれかの第2回路の入力側および出力側に接続されている。それぞれの第5メモリは、いずれかの第2回路の入力側に接続されている。
【0145】
図30は、複数の並列化手法の例を示している。図30のタイムチャートには、(a)~(d)の複数のケースが示されている。図30のタイムチャートの横軸は時刻を示している。時刻は、クロックサイクル数および実行ステップ数に対応している。(a)のケースは、プロセッサ上で逐次的な処理が行われる場合を示している。(a)のケースにおいて、MMパートを実行するためには、処理ステップあたりN×Nクロックサイクルが必要である。一方、(a)のケースにおいて、TEパートを実行するためには、処理ステップあたりN×λTEクロックサイクルが必要である。ここで、λTEは、TEパートにおいてそれぞれの粒子iについて必要なクロックサイクル数を意味するものとする。
【0146】
(b)のケースには、レベルIの並列化の例が示されている。レベルIの並列化では、積和演算において、Pr個の行と、Pc個の列を対象とした演算を並列的に実行する回路ブロックMMと、パイプラインによって処理を実行する回路ブロックTEとが用いられる。図29に示されているように、回路ブロックMMは、Pr×Pc次元のJサブ行列と、要素数Pcのsサブベクトルの積の演算をそれぞれのクロックサイクルにおいて実行する。そして、この積の演算を開始してからN/Pcクロックサイクル経過したら、要素数PrのΔyサブベクトルを出力する。それぞれのΔyサブベクトルが出力されるまでに実行される、N/Pcクロックサイクルの処理を1フェーズの処理とよぶものとする。そして、すべてのΔy(i=1,2,・・・,N)の値が求められるまで、N/Prフェーズの処理を繰り返し実行する。これより、(b)のケースでは、(a)のケースと比べてMMパートの処理速度がPr×Pc倍となっていることがわかる。ここで、サブ行列は、アルゴリズムが計算対象としている行列の一部であることを意味している。同様に、サブベクトルは、アルゴリズムが計算対象としているベクトルの一部であることを意味している。
【0147】
一方、(b)のケースにおいて、回路ブロックTEは、それぞれのクロックサイクルで入力されたx、y、h、Δyの値に基づき、計算を行う。そして、回路ブロックTEは、パイプラインレイテンシ(λp)の後、更新されたx、y、h、Δyの値を出力する。回路ブロックTEは、TEパートの処理を1回あたりN+λpクロックサイクルで実行する。(b)のケースにおいて、TEパートの処理速度は、(a)のケースと比べて約λTE倍となっている。
【0148】
(c)のケースには、レベルIIの並列化の例が示されている。レベルIIの並列化では、回路ブロックMMによる処理と、回路ブロックTEによる処理とが並列的に実行される。第1のフェーズで回路ブロックMMが要素数PrのΔyサブベクトルを計算した後、第2のフェーズで回路ブロックTEは、TEパートのうち、その要素数PrのΔyサブベクトルを使って計算可能な変数s、x、yの更新後の値を計算する。第2のフェーズでは、回路ブロックTEによる変数の計算に並行し、回路ブロックMMが次のΔyサブベクトル(要素数Pr)を計算する。レベルIIの並列化を行う場合、N/Pr+1個のフェーズの処理を実行することが必要となる。また、レベルIIの並列化が行われた場合、回路ブロックTEは、最初のフェーズでアイドル状態となる。また、回路ブロックMMは、最後のフェーズでアイドル状態となる。
【0149】
(d)のケースには、レベルIIIの並列化の例が示されている。レベルIIIの並列化を行いたい場合、電子回路において、回路ブロックMMと回路ブロックTEのペア(回路ブロックMMTE)をPb個用意する必要がある(例えば、図28の電子回路200)。処理ステップあたりのクロックサイクル数は、Ncyc_step=(N/Pc)×(N/Pr/Pb+1)+λとなる。ここで、λは、処理ステップのレイテンシである。電子回路200では、最後の繰り返し処理において、最新のベクトル(s,s,・・・,s)がメモリSmemに格納されたことを保証するため、λクロックサイクル待機する必要がある。図30の(a)~(d)のケースを比較すると、レベルIIIの並列化を採用すると、最も短縮されていることがわかる。
【0150】
すなわち、電子回路は、第2回路(回路ブロックTE)が第3ベクトルの要素Δyに基づき、第1ベクトルのN/Pb個の要素または第2ベクトルのN/Pb個の要素または第4ベクトルのN/Pb個の要素の少なくともいずれかを計算しているときに、第1回路(回路ブロックMM)が、第2回路によって第1ベクトルのN/Pb個の要素または第2ベクトルのN/Pb個の要素または第4ベクトルのN/Pb個の要素が次回計算されるときに使われる第3ベクトルの要素を計算するように構成されていてもよい。
【0151】
ここまでは、電子回路200の概要について説明した。次に、回路ブロックの詳細な構成について述べる。
【0152】
図31は、回路ブロックMMの構成例を示している。回路ブロックMMは、Pr個の回路ブロックMACと、バッファΔYbufとを備えている。必要に応じ、Pr個の回路ブロックMACを含む回路ブロックを回路ブロックJSkとよぶものとする。Pr個の回路ブロックMACの出力は、バッファΔYbufに入力される。回路ブロックMACは、それぞれのクロックサイクルにおいてメモリSmemのいずれかの領域SBk(k=1,2,・・・,Pb)より要素数Pcのsサブベクトルを読み出す。sサブベクトルのPc個の要素の並列的な読み出しを実現するため、メモリSmemのそれぞれの領域SBk(k=1,2,・・・,Pb)は、さらにPc個のサブ領域に分けられる。Pc個のサブ領域は、それぞれ対応するreadポートを備えている。また、メモリSmemのそれぞれの領域SBk(k=1,2,・・・,Pb)は、Pr個の回路ブロックMACにそれぞれ接続されている。これらの接続(配線)により、それぞれの領域SBk(k=1,2,・・・,Pb)から読み出されたsサブベクトルのPc個の要素の値を、Pr個の回路ブロックMACにブロードキャストすることができる。なお、図31では、作図の都合上、領域SB1以外の領域からPr個の回路ブロックMACへの接続(配線)が示されていない。
【0153】
Pr個の回路ブロックMACを含む回路ブロックJSkは、全体としてメモリJBkからPr×Pc次元のJサブ行列を読み出す。メモリJBkは、Pc個の領域に分けられている。メモリJBkのPc個の領域は、それぞれ対応するreadポートを備えている。それぞれのreadポートは、Pr個の回路ブロックMACのそれぞれに接続されている。Pc個の領域のそれぞれは、1ワードあたりPr個のJ行列の要素Jijの値を格納している。それぞれのクロックサイクルにおいて、メモリJBkからは、要素Jijの値がPc個読み出される。メモリJBkの各領域に対応するreadポートでは、データのpoint-to-point通信が行われるため、各ワードに格納されたPr個の要素Jijは、それぞれ異なる回路ブロックMACに転送される。このような構成を採用することにより、メモリJBkの記憶領域およびreadポートを含むアクセスポートを効率的に利用することができる。
【0154】
Pr個の回路ブロックMACは、上述の式(18)の積和演算を実行し、N/Pcクロックサイクルごとに(それぞれのフェーズの最終クロックサイクルに)、並列的にPr個のΔyの値をバッファΔYbufに出力する。そして、バッファΔYbufは、入力されたPr個のΔyの値を次のフェーズにおいて、逐次(シーケンシャルに)出力する。すなわち、バッファΔYbufは、parallel-input/sequential-output bufferの一種であるといえる。図28の電子回路200は、合計でPb×Pr×Pc個のMAC演算回路が含まれている。それぞれのMAC演算回路は、メモリJBkのいずれかの領域に対応するreadポート(ポートJin)と、メモリSmemのいずれかの領域SBk(k=1,2,・・・,Pb)のいずれかのサブ領域に対応するreadポート(ポートSin)に接続されている。また、MAC演算回路は、readポートごとに、対応する乗算器と、加算器とを備えている(復号器47)。復号器47の詳細については、後述する。
【0155】
図32は、回路ブロックTEの構成例を示している。図32の回路ブロックTEは、入力ポートxin、yin、hin、Δyinと、出力ポートxout、 yout、soutとを備えている。feedforward型組合せ回路によって回路ブロックTEを構成することができる。また、回路ブロックTEは、加算器ADD1~ADD4と、乗算器MUL1と、演算器FXと、演算器FYと、マルチプレクサMUX1~MUX3と、コンパレータcomp1~comp3とを備えている。加算器ADD1~ADD4および乗算器MUL1は、いずれも少なくとも2つの入力端子と1つの出力端子を備える。演算器FXは、入力された信号に対し、図27(d)に定義された関数FX(nx)の演算を実行した信号を出力するように構成されている。演算器FYは、入力された信号に対し、図27(d)に定義された関数FY(ny)の演算を実行した信号を出力するように構成されている。マルチプレクサMUX1は、少なくとも、3つの入力端子と、1つの制御端子と、1つの出力端子とを備えている。マルチプレクサMUX2、MUX3は、少なくとも、2つの入力端子と、1つの制御端子と、1つの出力端子とを備えている。
【0156】
回路ブロックTEの入力ポートΔyin、yinは、それぞれ加算器ADD1の第1入力端子、第2入力端子に接続されている。加算器ADD1の出力端子には、加算器ADD2の第1入力端子が接続されている。加算器ADD2の第1入力端子には、加算器ADD1の出力端子が接続されている。また、ADD2の第2入力端子には、乗算器MULの出力端子が接続されている。回路ブロックTEの入力ポートhinは、乗算器MULの第1入力端子に接続されている。
【0157】
また、加算器ADD2の出力端子は、加算器ADD3の第1入力端子が接続されている。加算器ADD3の第2入力端子は、演算器FXの出力端子に接続されている。加算器ADD3の出力端子には、演算器FYと、マルチプレクサMUX2が接続されている。演算器FYの出力端子は、加算器ADD4の第2入力端子が接続されている。乗算器MUL1の第1入力端子は、入力ポートhinに接続されている。また、乗算器MUL1の第2入力端子は、カウンタ52に接続されている。カウンタ52は、クロックサイクル数に応じて単調増加する第2値を出力するように構成されている。第2値として、例えば、cΔt×aを使うことができる。図27(a)に示したように、aは更新回数に応じてインクリメントされる。一般に、更新回数はクロックサイクル数に比例するため、cΔt×aはクロックサイクル数に応じて単調増加する値となる。
【0158】
回路ブロックTEの入力ポートxinには、演算器FXと、加算器ADD4の第1入力端子とが接続されている。加算器ADD4の出力端子には、マルチプレクサMUX1と、コンパレータcomp1~comp3とが接続されている。コンパレータcomp1~comp3の出力側は、それぞれマルチプレクサMUX1~MUX3の制御端子に接続されている。
【0159】
加算器ADD1は、回路ブロックTEの入力ポートΔyin、yinのそれぞれの入力を加算した信号を配線ny1に出力する。加算器ADD2は、配線ny1、nh1のそれぞれの入力を加算した信号を配線ny2に出力する。配線nh1には、乗算器MUL1より、回路ブロックTEの入力ポートhinから入力された信号にcΔt×aを乗じた信号が出力される。加算器ADD3は、配線δy、ny2のそれぞれ入力を加算した信号を配線ny3に出力する。配線δyには、演算器FXより、回路ブロックTEの入力ポートxinから入力された信号に、図27(d)の関数FX(nx)の演算を実行した信号が出力される。加算器ADD4は、回路ブロックTEの入力ポートxin、配線δxのそれぞれの入力を加算した信号を配線nx1に出力する。配線δxには、演算器FYより、加算器ADD3の出力端子から入力された信号に、図27(d)の関数FY(ny)の演算を実行した結果が出力される。
【0160】
コンパレータcomp1~comp3は、それぞれ配線nx1を介して、加算器ADD4の出力端子に接続されている。したがって、コンパレータcomp1~comp3には、いずれも加算器ADD4から出力された信号が入力される。コンパレータcomp1、comp2は、更新後に粒子iがx<-1.0またはx>1.0の位置にあるか否かの判定を行う。これは、粒子iが壁に接触したか否かを判定する処理に相当する。コンパレータcomp3は、更新後の粒子iの位置xに基づき、スピンsの符号を特定する。
【0161】
マルチプレクサMUX1の3つの入力端子は、それぞれ加算器ADD4の出力端子(配線nx1)、+1の定数信号を入力する素子、-1の定数信号を入力する素子に接続されている。また、マルチプレクサMUX1の制御端子は、コンパレータcomp1の出力端子に接続されている。そして、マルチプレクサMUX1の出力端子は、回路ブロックTEの出力ポートxoutに接続されている。マルチプレクサMUX1は、コンパレータcomp1から入力される制御信号に基づき、配線nx1の信号、+1の定数信号、-1の定数信号のいずれかを出力ポートxoutに出力する。
【0162】
マルチプレクサMUX2の2つの入力端子は、それぞれ、加算器ADD3の出力端子(配線ny3)、0の定数信号を入力する素子に接続されている。また、マルチプレクサMUX2の制御素子は、コンパレータcomp2の出力端子に接続されている。そして、マルチプレクサMUX2の出力端子は、回路ブロックTEの出力ポートyoutに接続されている。マルチプレクサMUX2は、コンパレータcomp2から入力される制御信号に基づき、加算器ADD3から入力される信号または0の定数信号のいずれかを出力ポートyoutに出力する。
【0163】
マルチプレクサMUX3の2つの入力端子は、+1の定数信号を入力する素子、0の定数信号を入力する素子に接続されている。また、マルチプレクサMUX3の制御素子は、コンパレータcomp3の出力端子に接続されている。そして、そして、マルチプレクサMUX3の出力端子は、回路ブロックTEの出力ポートsoutに接続されている。マルチプレクサMUX3は、コンパレータcomp3から入力される制御信号に基づき、+1の定数信号または0の定数信号のいずれかを出力ポートsoutに出力する。
【0164】
このように、それぞれの第2回路(回路ブロックTE)は、カウンタと、第1加算器(加算器ADD1)と、第1乗算器(乗算器MUL1)と、第2加算器(加算器ADD2)と、第1演算器(演算器FX)と、第3加算器(加算器ADD3)と、第2演算器(演算器FY)と、第4加算器(加算器ADD4)と、第1コンパレータ(コンパレータcomp1)と、第1マルチプレクサとを備えていてもよい。
【0165】
カウンタは、クロックサイクル数に応じて単調増加または単調減少する第2値を出力するように構成されている。第1加算器は、入力側で第4メモリ(メモリYBk)および第1回路(回路ブロックMM)に接続されている。第1乗算器は、入力側で第5メモリ(メモリHBk)およびカウンタに接続されている。第2加算器は、入力側で第1加算器および第1乗算器に接続されている。第1演算器は、入力側で第2メモリ(メモリXBk)に接続され、クロックサイクル数に応じて単調増加または単調減少する第3値を乗じた値を出力するように構成されている。ここで、第3値として、例えば、(-D+p)Δtを用いることができる。第3加算器は、入力側で第2加算器および第1演算器に接続されている。第2演算器は、入力側で第3加算器に接続され、第3加算器からの入力に重み付けした信号を出力するように構成されている。第4加算器は、入力側で第2メモリおよび第2演算器に接続されている。第1コンパレータは、入力側で第4加算器に接続されている。第1マルチプレクサは、入力側で第4加算器に接続され、第1コンパレータからの入力に基づき、第1値(例えば、-1)の定数信号、第2値(例えば、+1)の定数信号、第4加算器の出力信号のいずれかを第2メモリに出力するように構成されている。
【0166】
また、それぞれの第2回路(回路ブロックTE)は、さらに第2コンパレータ(コンパレータcomp2)と、第2マルチプレクサ(マルチプレクサMUX2)とを備えていてもよい。第2コンパレータは、入力側で第4加算器(加算器ADD4)に接続されている。第2マルチプレクサは、入力側で第3加算器(加算器ADD3)に接続され、第2コンパレータからの入力に基づき、0の定数信号または第3加算器の出力信号を第4メモリ(メモリYBk)に出力するように構成されている。
【0167】
なお、それぞれの第2回路(回路ブロックTE)は、必ず第2コンパレータ(コンパレータcomp2)および第2マルチプレクサ(マルチプレクサMUX2)を備えていなくてもよい。この場合、第3加算器(加算器ADD3)の出力端子は、出力ポートyoutに接続される。すなわち、第3加算器の出力信号は、第4メモリ(メモリYBk)に入力される。
【0168】
また、それぞれの第2回路(回路ブロックTE)は、第3コンパレータ(コンパレータcomp3)と、第3マルチプレクサ(マルチプレクサMUX3)とを備えていてもよい。第3コンパレータは、入力側で第4加算器(加算器ADD4)に接続されている。第3マルチプレクサは、第3コンパレータからの入力に基づき、+1の定数信号または0の定数信号を第1メモリ(メモリSmem)に出力するように構成されている。
【0169】
一般に、スピンsの値は、-1または+1の2値のいずれかをとる。これらの値を符号付き2進数で表現する場合、少なくとも2ビットの情報が必要となる。ただし、回路中では、スピンsを0または1の2値変数に符号化してもよい。このような符号化を行うと、スピンの値は、1ビットの情報で表現することが可能である。1ビットの情報でスピンsの値を表現することにより、配線におけるデータの伝送量や、記憶領域の消費量を抑制することができる。これにより、例えば、図28に示した、回路ブロックTE(k=1,2,・・・,Pb)の出力側より更新後のスピンsの値をメモリSmemに伝送する配線39として、複数ビットではなく、1ビットの情報を伝送する配線を用いることができる。また、メモリSmemでは、1ビットの情報量にそれぞれのスピンsの値を格納することができる。さらに、メモリSmemから読み出されたスピンsの値を回路ブロックMM(k=1,2,・・・,Pb)に伝送する配線40として、複数ビットではなく、1ビットの情報を伝送する配線を用いることができる。回路ブロックMAC1の入力段にある回路ブロックMUL(図31)において符号付き2進数に復号化を行うことができる。これにより、電子回路200において、配線39、40で1ビットの情報量の伝送を行い、メモリSmemに1ビットの情報でスピンsの値を保存したとしても、機能面への影響は生じない。
【0170】
ここでは、図31を参照しながら、1ビットの情報を符号付き2進数に復号化する回路について説明する。図31の復号器47は、回路ブロックMAC1の入力段にある回路ブロックMULの詳細な構成を示している。復号器47は、マルチプレクサMUXと、乗算器とを備えている。マルチプレクサMUXは、少なくとも、2つの入力端子と、1つの制御端子と、1つの出力端子とを備えている。乗算器は、2つの入力端子と、1つの出力端子とを備えている。マルチプレクサMUXの2つの入力端子には、それぞれ+cΔtの定数信号を入力する素子、-cΔtの定数信号を入力する素子が接続されている。また、マルチプレクサMUXの制御端子には、メモリSmemのいずれかの領域SBk(k=1,2,・・・,Pb)いずれかのサブ領域に対応するreadポート(ポートSin)が接続されている。そして、マルチプレクサMUXの出力端子は、乗算器の第2入力に接続されている。なお、乗算器の第1入力は、メモリJBkのいずれかの領域に対応するreadポート(ポートJin)に接続されている。マルチプレクサMUXは、ポートSinから入力された信号が1であるとき、出力端子より+cΔtを出力する。また、マルチプレクサMUXは、ポートSinから入力された信号が0であるとき、出力端子より-cΔtを出力する。乗算器は、出力端子OutよりマルチプレクサMUXから入力された信号とポートJinから入力された信号とを乗算した信号を出力する。
【0171】
すなわち、電子回路では、第1メモリ(メモリSmem)が第4ベクトルのそれぞれの要素の値を1ビットの情報で格納するように構成されていてもよい。このとき、それぞれの第1回路(回路ブロックMM)は、第1メモリから読み出した1ビットの情報を符号付き2進数に復号化するように構成された復号器を含んでいてもよい。
【0172】
なお、電子回路の第1メモリ(メモリSmem)は、第4ベクトルのそれぞれの要素の値を符号付き2進数で格納してもよい。この場合、第2回路(回路ブロックTE)の第3マルチプレクサ(マルチプレクサMUX3)は、第3コンパレータ(コンパレータcomp3)からの入力に応じて、+1または-1を第1メモリに出力してもよい。この場合には、それぞれの第1回路(回路ブロックMM)において、第1メモリから読み出した情報を復号化する復号器を実装しなくてもよい。また、第1ベクトルの要素を変数として第3ベクトルの要素を計算するアルゴリズムを実装する場合、第1メモリに第1ベクトルのそれぞれの要素の値を格納してもよい。
【0173】
(複数の電子回路への実装例)
シミュレーテッド分岐アルゴリズムをN個の粒子のモデルと見なした場合、シミュレーテッド分岐アルゴリズムは、N個の粒子の位置および運動量を繰り返し更新するアルゴリズムであるといえる。すなわち、シミュレーテッド分岐アルゴリズムは、N個の粒子の位置および運動量を時間発展させるモデルであると見なせる。ここで、粒子の状態といった場合には、粒子iの位置に相当するxと、粒子iの運動量に相当するyのことを意味するものとする。
【0174】
複数の電子回路を使ってN個の粒子の状態の計算処理の少なくとも一部を並列に実行してもよい。ただし、図27(a)のアルゴリズムでは、ncycle=u+1におけるN個の粒子の状態を計算するためには、ncycle=uにおけるN個の粒子の状態が必要である。例えば、M個の電子回路がある場合を想定する。この場合、それぞれの電子回路は、記憶しているncycle=uにおけるN個の粒子の状態(全粒子の状態)に関する情報に基づき、ncycle=u+1においてN/M個の粒子の状態を更新することができる。ただし、それぞれの電子回路は、他の電子回路がncycle=u+1において計算した(N-N/M)個の粒子の状態を参照しないと、ncycle=u+2におけるN/M個の粒子の状態を計算できない。そこで、それぞれの電子回路が、他の電子回路が計算した粒子の状態に関する情報を取得できる構成を採用することができる。
【0175】
図33は、複数の電子回路が接続された構成例を示している。図33には、電子回路201~208(HW_CIRCUIT#1~#8)が示されている。図33は、M=8の場合に相当する。ただし、電子回路の数Mは、これとは異なっていてもよい。電子回路201~208は、それぞれSBカーネル回路41と、通信回路ch1と、通信回路ch2とを備えている。電子回路201~208として、例えば、FPGAを使うことができる。ただし、ASICなどを使ってもよく、電子回路の種類については特に問わない。電子回路201~208は、上述の電子回路200の構成要素に加え、通信回路ch1、ch2と、バッファメモリbufLと、バッファメモリbufRとを備えている。以下では、上述の電子回路200との相違点を中心に、複数の電子回路201~208が接続された計算システムと、それぞれの電子回路の構成について説明する。
【0176】
図33の通信回路ch1、ch2は、いずれも送信ポートTXと、受信ポートRXとを備えている。送信ポートTXと、受信ポートRXは、それぞれ独立して動作することができる。このため、通信回路ch1、ch2は、全二重(full-duplex)通信を行うことが可能である。SBカーネル回路41は、メモリ43(Smem)と、演算回路42(SB Core)と、バッファメモリbufL、bufRとを備えている。メモリ43は、要素数Nのベクトル(s,s,・・・,s)を保存することができる。メモリ43は、上述のメモリSmemに相当する。バッファメモリbufL、bufRは、それぞれメモリ43に接続されている。演算回路42(SB Core)は、Pb個の回路ブロックMM(第1回路)と、Pb個の回路ブロックTE(第2回路)と、Pb個のメモリXBk(第2メモリ)と、Pb個のメモリJBk(第3メモリ)と、Pb個のメモリYBk(第4メモリ)と、Pb個のメモリHBk(第5メモリ)とを含む。すなわち、演算回路42(SB Core)と、メモリ43は、上述の電子回路200に相当する構成要素である。
【0177】
このように、電子回路は、さらに第1通信回路(通信回路ch1)と、第2通信回路(通信回路ch2)と、第1バッファメモリ(バッファメモリbufL)と、第2バッファメモリ(バッファメモリbufR)とを備えていてもよい。第1通信回路は、第1送信ポート(通信回路ch1の送信ポートTX)と、第1受信ポート(通信回路ch1の受信ポートRX)とを含む。第2通信回路は、第2送信ポート(通信回路ch2の送信ポートTX)と、第2受信ポート(通信回路ch2の受信ポートRX)とを含む。第1バッファメモリは、第1メモリ(メモリ43)、第2回路(回路ブロックTE)、第2受信ポートおよび第1送信ポートに接続されている。第2バッファメモリは、第1メモリ、第2回路(回路ブロックTE)、第1受信ポートおよび第2送信ポートに接続されている。
【0178】
図33を参照すると、電子回路201~208がリングトポロジを形成するように接続されていることがわかる。すなわち、HW_CIRCUIT#h(h=1,2,・・・,M)の通信回路ch2は、HW_CIRCUIT#(h+1)の通信回路ch1に接続される。また、HW_CIRCUIT#Mの通信回路ch2は、HW_CIRCUIT#1の通信回路ch1に接続される。電子回路間の接続は、通信ケーブルによって実現されてもよいし、ボード上の配線によって実現されてもよく、実装方式については問わない。図33では、リングトポロジで時計回りの方向に通信が行われるデータリングringRと、リングトポロジで反時計回りの方向に通信が行われるデータリングringLが形成されている。このようなトポロジはダブルリングトポロジとよばれる。リングトポロジで時計回りの通信経路と、リングトポロジで反時計回りの通信経路があるため、図33の構成では、単一方向の通信経路しかないシングルリンクトポロジと比べて、約2倍のデータ転送速度を実現することが可能である。
【0179】
すなわち、計算システムは、複数の電子回路を備えていてもよい。一方の電子回路の第1送信ポート(通信回路ch1の送信ポートTX)が他方の電子回路の第2受信ポート(通信回路ch2の受信ポートRX)に接続され、一方の電子回路の第1受信ポート(通信回路ch1の受信ポートRX)が他方の電子回路の第2送信ポート(通信回路ch1の送信ポートTX)に接続され、複数の電子回路でリング状の通信経路が時計回りと反時計周りの両方向に形成されていてもよい。
【0180】
図34は、処理を分散させたときにそれぞれの電子回路で実行されるアルゴリズムの例を示している。図34のアルゴリズムでは、カウンタ変数ncycleがインクリメントされて所定値になるまで、各変数の更新処理が繰り返し行われる。ループ44では、それぞれの電子回路について、通信回路ch1、ch2の送信ポートTXでデータを送信する処理と、通信回路ch1、ch2の受信ポートRXでデータを受信する処理とが行われている。ループ45では、それぞれの電子回路に、行列ベクトル積(積和演算)の一部を実行させている。ループ46では、それぞれの電子回路に、時間発展(Time-evolution)に相当する計算(TEパートの処理)を実行させている。
【0181】
図35は、行列とベクトルとの積を計算する方法の第2の例を示している。図35は、電子回路の数Mが8である場合における、行列積の計算方法を示している。図35に示されているように、行列およびベクトルをそれぞれM個に分割して積和演算が行われている。例えば、HW_CIRCUIT#hは、N/M行N列の行列Jを用いて、N/M個の相互作用項(ΔY)を計算する。
【0182】
図27の説明で述べたように、HW_CIRCUIT#h(h=1,2,・・・,M)がそれぞれの変数の更新処理を行うためには、要素数N(フルサイズ)のベクトル(s,s,・・・,s)のデータが必要となる。そこで、HW_CIRCUIT#hは、それぞれの変数の更新処理を行った後、HW_CIRCUIT#hが更新したN/M個の変数{s|m=(h-1)N/M+1,(h-1)N/M+2,・・・,hN/M}をHW_CIRCUIT#hに接続されている他の電子回路に送信することができる(送信モード)。また、HW_CIRCUIT#hは、それぞれの変数の更新処理を行った後、CIRCUIT#hに接続されている他の電子回路が更新したN/M個の変数を受信することができる。
【0183】
例えば、HW_CIRCUIT#1がデータリングringRについて送信モードにあるとき、更新された変数{s|m=1,2,・・・,N/M}がHW_CIRCUIT#2に送信される。このとき、HW_CIRCUIT#2は、データリングringRについて受信モードになっている。同時に、HW_CIRCUIT#1は、データリングringLについて受信モードになっていてもよい。このため、HW_CIRCUIT#1は、データリングringLについて送信モードになっているHW_CIRCUIT#2から、更新された変数{s|m=N/M+1,(N/M+2,・・・,2N/M}を受信してもよい。この後、HW_CIRCUIT#2は、変数{s|m=1,2,・・・,N/M}と、変数{s|m=N/M+1,(N/M+2,・・・,2N/M}をHW_CIRCUIT#3に送信することができる。このように、電子回路は、直接接続されている他の電子回路に当該電子回路が更新した変数を送信してもよい。これに並行し、電子回路は、直接接続されている他の電子回路から他の電子回路が更新した変数を受信してもよい。また、電子回路は、第1の電子回路が更新した変数を第2の電子回路に中継してもよい。
【0184】
上述のように、データの中継を含む送信処理および受信処理を、リングトポロジを形成するように接続された、それぞれの電子回路に行わせることができる。これにより、M個の電子回路は、変数の更新処理のそれぞれのイタレーションにおいて、直前に更新された要素数N(フルサイズ)の第4ベクトル(s,s,・・・,s)のデータを使うことができる。ただし、リングトポロジを形成するように接続された複数の電子回路に、データの中継を含む送信処理および受信処理を行わせ、それぞれの電子回路が変数の更新タイミングにおいて同じデータを得られるようにするためには、同期的な動作を実現する必要がある。
【0185】
図36は、複数の電子回路が実行する処理の例を示すタイミングチャートである。図36の横軸は、時刻を示している。処理のそれぞれのイタレーションの期間Tstepは、通信期間Tcommと、演算期間Tcoreとを含んでいる。演算期間Tcoreでは、演算回路42(SB Core)において、それぞれの変数の更新後の値が計算される。また、通信期間Tcommは、電子回路の数Mに等しい数の通信フェーズを含んでいる。ここでは、説明が複雑化するのを避けるため、M個の電子回路が同期して動作すると仮定する。HW_CIRCUIT#hの演算回路42は、演算期間Tcoreにおいて、N/M個の粒子に対応する変数{s|m=(h-1)N/M+1,(h-1)N/M+2,・・・,hN/M}の値を更新する。
【0186】
次に、通信期間Tcommの1通信フェーズで実行される処理について説明する。演算回路42は、更新した変数{s|m=(h-1)N/M+1,(h-1)N/M+2,・・・,hN/M}を2つのグループ(グループSh1、Sh2)に分割し、一方のグループSh1をバッファメモリbufLに、他方のグループSh2をバッファメモリbufRに、それぞれ格納する。それぞれの電子回路(HW_CIRCUIT#1~#M)は、データリングringLを使って、バッファメモリbufLに格納されたデータを、通信回路ch1の通信ポートTXを介して他の電子回路に送信することができる。また、それぞれの電子回路(HW_CIRCUIT#1~#M)は、データリングringRを使い、バッファメモリbufRに格納されたデータを、通信回路ch2の通信ポートTXを介して他の電子回路に送信することができる。バッファメモリbufLに格納されたデータの送信処理と、バッファメモリbufRに格納されたデータの送信処理とが並行して実行されてもよい。
【0187】
なお、バッファメモリbufL、bufRに格納されたデータをメモリ43(Smem)に保存してもよい。すなわち、メモリ43(Smem)には、送信ポートTXに送信されたデータと同じデータが保存される。また、バッファメモリbufL、bufRに格納されたデータを送信ポートTXに送信する処理と、当該データをメモリ43(Smem)に保存する処理は、並行して実行されてもよい。このような動作を、“send & write動作”とよぶ。
【0188】
すなわち、電子回路は、Pb個の第2回路(回路ブロックTE)によって更新された第4ベクトルを分割し、一方の第1データを第1バッファメモリ(バッファメモリbufL)に格納し、他方の第2データを第2バッファメモリ(バッファメモリbufR)に格納するように構成されていてもよい。さらに、電子回路は、第1バッファメモリに格納された第1データを第1送信ポート(通信回路ch1の送信ポートTX)より送信し、第2バッファメモリに格納された第2データを第2送信ポート(通信回路ch2の送信ポートTX)より送信し、第1バッファメモリに格納された第1データと、第2バッファメモリに格納された第2データを第1メモリ(メモリ43)に格納するように構成されていてもよい。
【0189】
バッファメモリbufLに格納されたデータの送信処理と、バッファメモリbufRに格納されたデータの送信処理とが完了したら、それぞれの電子回路(HW_CIRCUIT#1~#M)は、他の電子回路から送信されたデータを受信し、バッファメモリbufR、bufLに格納する。すなわち、それぞれの電子回路(HW_CIRCUIT#1~#M)は、データリングringLに接続された通信回路ch2の通信ポートRXを介して受信したデータを、バッファメモリbufLに保存する。また、それぞれの電子回路(HW_CIRCUIT#1~#M)は、データリングringRに接続された通信回路ch1の通信ポートRXを介して受信したデータを、バッファメモリbufRに保存する。データリングringLに接続された通信回路ch2の通信ポートRXにおけるデータの受信処理と、データリングringRに接続された通信回路ch1の通信ポートRXにおけるデータの受信処理は同時に実行されてもよい。ここで説明したような、送信処理が行われた後に受信処理が行われる動作を“first-send-then-receive”ポリシとよぶ。
【0190】
すなわち、電子回路は、第2受信ポート(通信回路ch2の通信ポートRX)より受信した第3データを第1バッファメモリ(バッファメモリbufL)に格納し、第1受信ポート(通信回路ch1の通信ポートRX)より受信した第4データを第2バッファメモリに格納(バッファメモリbufR)し、第3データおよび第4データは、第1メモリ(メモリ43)に格納されるように構成されていてもよい。
【0191】
上述のデータリングringR、ringLにおけるデータの送信処理(メモリ43へのデータ保存処理を含んでいてもよい)と、その後のデータリングringR、ringLにおけるデータの受信処理とが1通信フェーズに実行される処理である。この1通信フェーズの処理を電子回路の数Mに等しい回数だけ繰り返すことにより、M個の電子回路は、変数の更新処理のそれぞれのイタレーション(演算期間Tcore)において、最近更新された要素数N(フルサイズ)のベクトル(s,s,・・・,s)のデータを使うことができるようになる。最近更新された要素数N(フルサイズ)のベクトル(s,s,・・・,s)のデータは、メモリ43(Smem)に保存される。
【0192】
図33では、バッファメモリbufLから通信回路ch1の通信ポートTXにデータが直接転送され、通信回路ch2のポートRXから受信されたデータは、直接バッファメモリbufLに転送されていた。また、図33では、バッファメモリbufRから通信回路ch2の通信ポートTXにデータが直接転送され、通信回路ch1の通信ポートRXから受信されたデータは、直接バッファメモリbufRに転送されていた。ただし、図37の構成例ように、通信回路ch1、ch2と、バッファメモリbufL、bufRの間に他のメモリが配置されていてもよい。
【0193】
図37は、通信チャネルのより詳細な構成例を示している。図37のHW_CIRCUIT#hは、図33の電子回路201~208の構成要素に加え、メモリ44a、44b、45a、45bを備えている。なお、図37の送信器TX PHYは、上述の送信ポートTXに対応する。また、受信器RX PHYは、上述の受信ポートRXに対応する。メモリ44aは、通信回路ch1の通信ポートTXと、バッファメモリbufLとの間に接続されている。メモリ44bは、通信回路ch2の通信ポートTXと、バッファメモリbufRとの間に接続されている。メモリ45aは、通信回路ch1の通信ポートRXと、バッファメモリbufRとの間に接続されている。メモリ45bは、通信回路ch2の通信ポートRXと、バッファメモリbufLとの間に接続されている。メモリ44a、44bは、TX FIFOメモリに相当する。一方、メモリ45a、45bは、RX FIFOメモリに相当する。ここで、FIFOメモリとは、First-In-First-Out型メモリである。なお、図37では、作図の都合上、演算回路42(SB Core)と、メモリ43(Smem)とが省略されている。
【0194】
演算回路42(SB Core)がバッファメモリbufLに格納したデータは、メモリ44a(TX FIFOメモリ)を介して、通信回路ch1の通信ポートTXよりHW_CIRCUIT#(h-1)に送信される。演算回路42がバッファメモリbufRに格納したデータは、メモリ44b(TX FIFOメモリ)を介して、通信回路ch2の通信ポートTXよりHW_CIRCUIT#(h+1)に送信される。通信回路ch1の通信ポートRXで受信したデータは、メモリ45a(RX FIFOメモリ)を介して、バッファメモリbufRに転送される。通信回路ch2の通信ポートRXで受信したデータは、メモリ45b(RX FIFOメモリ)を介して、バッファメモリbufLに転送される。すなわち、通信チャネルは、通信ポートTX、TX FIFOメモリ、バッファメモリの組合せまたは、通信ポートRX、RX FIFOメモリ、バッファメモリの組合せを含む。
【0195】
SBカーネル回路41の駆動周波数FSBkernelと、通信チャネルの駆動周波数FIOPHYは、等しくてもよいし、異なっていてもよい。メモリ44a、44b、45a、45b(TX FIFOメモリおよびRX FIFOメモリ)は、非対称なread/writeスピードのストリーミングデータバッファを形成してもよい。例えば、TX FIFOメモリのwriteポートは、周波数FSBkernelで駆動され、TX FIFOメモリのreadポートは、周波数FIOPHYで駆動されてもよい。また、RX FIFOメモリのreadポートは、writeスピードは、周波数FIOPHYで駆動され、RX FIFOメモリの周波数FSBkernelで駆動されてもよい。
【0196】
図38は、リングトポロジに対応したハードウェアの構成例を示したブロック図である。図38には、演算回路42(SB Core)と、メモリ43(Smem)が示されている。演算回路42は、上述の電子回路200の回路ブロックMMTE~MMTEPbに相当する構成および機能を備えている。上述の電子回路200では、データ依存性の問題を解決するため、メモリSmemはダブルバッファ構成を採用していた。ただし、図33および図37に示している、複数の電子回路への実装例では、バッファメモリbufL、bufRがデータ依存性の問題を解決する。したがって、メモリ43として、ダブルバッファ構造のメモリを使わなくてもよい。
【0197】
次に、電子回路間で同期をとる方法について説明する。複数の電子回路は、必ず同時に起動されなくてもよい。また、複数の電子回路のクロックが同期されていなくてもよい。以下では、異なるタイミングに起動され、クロックが同期していない複数の電子回路が使われた場合でも、動作タイミングを自発的に同期させる方法について説明する。はじめに、複数の電子回路が同期して動作する場合(図39のタイムチャート)について説明した後、複数の電子回路が時差をもって順次起動した場合(図40のタイムチャート)について説明する。図39図40のタイムチャートでは、いずれも横軸が時刻に対応している。
【0198】
図39のタイムチャートにおいて、HW_CIRCUIT#hのSBカーネル回路41は、バッファメモリbufL、bufRに格納されたデータを、TX FIFO(メモリ44a、44b)に書き込む(Twrite_TX FIFO)。この時点で、送信器TX PHYによる送信動作が開始する。送信器TX PHYは、TX FIFOからデータを読み出し、読み出したデータを通信回路ch1、ch2のポートTX(TX PHY)から同時に転送する(Tread_TX FIFO)。なお、TX FIFOにデータが格納されていない場合、送信器TX PHYは、TX FIFOからのデータ読み出しを行わない。転送されたデータは、物理遅延λPHYの後、HW_CIRCUIT#(h-1)の通信回路ch2に対応するRX FIFOおよびHW_CIRCUIT#(h+1)の通信回路ch1に対応するRX FIFOに格納される。なお、物理遅延λPHYは、例えば、送信器TX PHYの内部レイテンシ、受信器RX PHYの内部レイテンシ、伝送線による遅延を含む。光電変換が行われている場合、物理遅延λPHYは、光電変換素子における送信時および/または受信時のレイテンシを含んでいてもよい。
【0199】
SBカーネル回路41は、TX FIFO(メモリ44a、44b)へのデータ書き込み(送信動作)が終わった後に、動作に遷移することができる。受信器RX PHYは、データを受信したら、当該データをRX FIFO(メモリ45a、45b)に書き込む。SBカーネル回路41は、RX FIFO(メモリ45a、45b)に格納されているデータを、バッファメモリbufL、bufRに書き込む。SBカーネル回路41は、ストール可能(Stallable)に構成されている。このため、いずれかのRX FIFO(メモリ45a、45bのいずれか)にデータが格納されていない場合、SBカーネル回路41は、バッファメモリbufL、bufRへの書き込みを行わず、一時的に待機状態(stall状態)に入ってもよい。図39のタイムチャートでは、SBカーネル回路41が受信動作に遷移する前に、受信器RX PHYが受信したデータをRX FIFOに書き込んでいるため、RX FIFOがemptyにならず、SBカーネル回路41のストールは発生しない。
【0200】
図40のタイムチャートにおいて、HW_CIRCUIT#hのSBカーネル回路41は、他の電子回路(HW_CIRCUIT)の動作状態に関わらず、送信時の動作(TX FIFOへのデータ書き込み)を実行する。通信回路ch1、ch2の送信器TX PHYは、TX FIFO(メモリ44a、44b)にデータがあれば、任意のタイミングでTX FIFO(メモリ44a、44b)からデータを読み出し、それを送信する。HW_CIRCUIT#hのTX FIFOから読み出されたデータは、物理遅延λPHYの後、HW_CIRCUIT#(h-1)の通信回路ch2に対応するRX FIFOと、HW_CIRCUIT#(h+1)の通信回路ch1に対応するRX FIFOに格納される。なお、HW_CIRCUIT#(h-1)の通信回路ch2およびHW_CIRCUIT#(h+1)の通信回路ch1では、受信器RX PHYがホスト側(SBカーネル回路41側)の制御に関わらず、受信状態となっている。すなわち、受信器RX PHYは、auto-runモードに設定されている。この場合、受信器RX PHYがデータを受信すれば、タイミングに関係なく、受信されたデータがRX FIFOに書き込まれる。
【0201】
HW_CIRCUIT#hの受信器RX PHYは、SBカーネル回路41によるTX FIFO(メモリ44a、44b)へのデータ書き込み(送信動作)が終わった後に受信動作を開始する。ただし、HW_CIRCUIT#hの通信回路ch1に対応するRX FIFOまたは、HW_CIRCUIT#hの通信回路ch2に対応するRX FIFOのいずれかにデータが格納されていない場合、SBカーネル回路41は、一時的に待機状態(stall状態)に入ってもよい。そして、SBカーネル回路41は、通信回路ch1に対応するRX FIFOまたは、通信回路ch2に対応するRX FIFOの両方にデータが格納されたら、受信時における動作を再開することができる。すなわち、HW_CIRCUIT#(h-1)およびHW_CIRCUIT#(h+1)の両方がデータの送信を開始する。そして、両方の電子回路(HW_CIRCUIT)がデータの送信を完了した時刻から物理遅延λPHYに等しい期間が経過すると、RX FIFOの両方にデータが格納される。このとき、SBカーネル回路41は、待機状態(stall状態)から離脱し、受信時における動作を再開する。SBカーネル回路41は、RX FIFO(メモリ45a、45b)に格納されているデータを、バッファメモリbufL、bufRに書き込むことができる。
【0202】
図40のタイムチャートの動作では、RX FIFO(メモリ45a、45b)にデータが格納されていない電子回路(HW_CIRCUIT)が待機状態(stall状態)に入り、当該電子回路のRX FIFOに他の電子回路より送信されたデータが格納されたら、SBカーネル回路41が待機状態(stall状態)から離脱するという動作が繰り返される。この動作が繰り返されることによって、電子回路間の同期が行われる。電子回路間で同期をとることによって、起動時刻の違いによるタイミングのずれが1通信フェーズの長さより小さくなるまで、軽減される。
【0203】
すなわち、電子回路は、さらに第1FIFOメモリ(メモリ44a)と、第2FIFOメモリ(メモリ45a)と、第3FIFO(メモリ45b)メモリと、第4FIFOメモリ(メモリ44b)とを備えていてもよい。第1FIFOメモリは、第1送信ポート(通信回路ch1の送信ポートTX)と、第1バッファメモリ(バッファメモリbufL)との間に接続されている。第2FIFOメモリは、第1受信ポート(通信回路ch1の受信ポートRX)と、第2バッファメモリ(バッファメモリbufR)との間に接続されている。第3FIFOメモリは、第2受信ポート(通信回路ch2の受信ポートRX)と、第1バッファメモリとの間に接続されている。第4FIFOメモリは、第2送信ポート(通信回路ch2の送信ポートTX)と、第2バッファメモリとの間に接続されている。電子回路は、第2FIFOメモリまたは第4FIFOメモリの両方にデータが格納されていない場合には、待機状態に遷移し、第2FIFOメモリまたは第4FIFOメモリの両方にデータが格納されている場合には、待機状態が解除されるように構成されていてもよい。
【0204】
上述では、シミュレーテッド分岐アルゴリズムの複数の実装例について説明した。ただし、シミュレーテッド分岐アルゴリズムのありうる実装例はこれに限らず、その他の構成が採用されてもよい。また、上述の複数の実装例を組み合わせることによってシミュレーテッド分岐アルゴリズムを実行する電子回路または情報処理装置を実現してもよい。上述の実施形態に係る電子回路または情報処理装置を使うことにより、組合せ最適化問題の解を実用的な時間内で計算することが可能となる。また、上述の実施形態に係る電子回路または情報処理装置を使うことにより、組合せ最適化問題の最適解または、組合せ最適化問題の最適解により近い、近似解を計算することができるようになる。
【0205】
特に、上述の情報処理装置、プログラム、情報処理方法、電子回路および計算システムを用いることにより、HOBO(Higher Order Binary Optimization)を含む制約なし多項式2値変数最適化(PUBO:Polynomial Unconstrained Binary Optimization)を解くことができる。3次以上の項を含む目的関数を扱える情報処理装置、プログラム、情報処理方法、電子回路および計算システムを使えば、ペナルティ関数などを導入して3次以上の項を含む目的関数を2次の目的関数に変換する必要がなくなる。このため、上述の情報処理装置、プログラム、情報処理方法、電子回路および計算システムを提供することにより、各種の組合せ最適化問題の求解をより容易に行うことができるようになる。
【0206】
なお、本発明の実施形態は、下記の構成例を含んでいてもよい。
【0207】
(構成例1)
目的関数を、すべての項に含まれる変数について偏微分した形式の基本式に基づき、第3ベクトルのそれぞれの要素を更新するように構成され、前記基本式の変数は、第1ベクトルの要素、または、前記第1ベクトルの要素を第1値もしくは前記第1値より大きい第2値のいずれかの値をとる第1関数で変換した第4ベクトルの要素である、積和演算部と、
前記第1ベクトルの要素に、第2ベクトルの対応する要素、もしくは、前記第2ベクトルの対応する要素に重み付けした値を加算することによって前記第1ベクトルの要素を更新し、
値が前記第1値より小さい前記第1ベクトルの要素を前記第1値に設定し、
値が前記第2値より大きい前記第1ベクトルの要素を前記第2値に設定し、
前記第2ベクトルの要素に、更新回数に応じて単調増加または単調減少する第1係数と前記第1ベクトルの対応する要素との積を重み付けした値、ならびに、前記第3ベクトルの対応する要素を重み付けした値を加算することによって前記第2ベクトルの要素を更新するように構成された更新部とを備える、
情報処理装置。
【0208】
(構成例2)
前記更新部は、値が前記第1値と前記第2値の間にある第3値より小さい前記第1ベクトルの要素を前記第1値に変換し、値が前記第3値より大きい前記第1ベクトルの要素を前記第2値に変換することによって、組合せ最適化問題の解を求めるように構成されている、
構成例1に記載の情報処理装置。
【0209】
(構成例3)
前記更新部は、前記第1ベクトル、前記第2ベクトル、前記第3ベクトルの更新回数または前記第1係数の値がしきい値より大きくなったときに前記組合せ最適化問題の解を求めるように構成されている、
構成例2に記載の情報処理装置。
【0210】
(構成例4)
前記更新部は、値が前記第1値より小さい前記第1ベクトルの要素に対応する前記第2ベクトルの要素、または、前記第2値より大きい前記第1ベクトルの要素に対応する前記第2ベクトルの要素を、もとの前記第2ベクトルの要素に、第2係数を乗じた値に更新するように構成されている、
構成例1ないし3のいずれか一項に記載の情報処理装置。
【0211】
(構成例5)
前記更新部は、値が前記第1値より小さい前記第1ベクトルの要素に対応する前記第2ベクトルの要素の値、または、値が前記第2値より大きい前記第1ベクトルの要素に対応する前記第2ベクトルの要素の値を、擬似乱数に設定するように構成されている、
構成例1ないし3のいずれか一項に記載の情報処理装置。
【0212】
(構成例6)
前記更新部は、値が-1より小さい前記第1ベクトルの要素に対応する前記第2ベクトルの要素、または、値が1より大きい前記第1ベクトルの要素に対応する前記第2ベクトルの要素を、もとの前記第2ベクトルの要素に第2係数を乗じた値に更新するように構成されている、
構成例1ないし3のいずれか一項に記載の情報処理装置。
【0213】
(構成例7)
前記積和演算部は、第1ベクトルの要素を変数として計算した前記基本式の値を前記第1関数で変換した値に基づいて前記第3ベクトルのそれぞれの要素を更新するように構成されている、
構成例1ないし6のいずれか一項に記載の情報処理装置。
【0214】
(構成例8)
前記積和演算部は、前記第1係数をパラメータとする第2関数を乗じることによって前記第3ベクトルのそれぞれの要素を更新するように構成されている、
構成例7に記載の情報処理装置。
【0215】
(構成例9)
前記更新部は、前記第1ベクトルのノルムを前記第3ベクトルのノルムで除算した第3係数を計算し、
前記第2ベクトルの要素に、前記第1係数と更新された前記第1ベクトルの対応する要素との積を重み付けした値ならびに、前記第3ベクトルの対応する要素を前記第3係数で重み付けした値を加算することによって前記第2ベクトルの要素を更新するように構成されている、
構成例1ないし8のいずれか一項に記載の情報処理装置。
【0216】
(構成例10)
前記更新部は、前記第1ベクトルどうしの内積を、前記第1ベクトルと前記第3ベクトルの内積の絶対値で除算した第3係数を計算し、
前記第2ベクトルの要素に、前記第1係数と更新された前記第1ベクトルの対応する要素との積を重み付けした値ならびに、前記第3ベクトルの対応する要素を前記第3係数で重み付けした値を加算することによって前記第2ベクトルの要素を更新するように構成されている、
構成例1ないし8のいずれか一項に記載の情報処理装置。
【0217】
(構成例11)
前記更新部は、前記第4ベクトルのノルムを、前記第3ベクトルのノルムで除算した第3係数を計算し、
前記第2ベクトルの要素に、前記第1係数と更新された前記第1ベクトルの対応する要素との積を重み付けした値ならびに、前記第3ベクトルの対応する要素を前記第3係数で重み付けした値を加算することによって前記第2ベクトルの要素を更新するように構成されている、
構成例1ないし8のいずれか一項に記載の情報処理装置。
【0218】
(構成例12)
前記更新部は、前記第4ベクトルどうしの内積を、前記第4ベクトルと前記第3ベクトルの内積の絶対値で除算した第3係数を計算し、
前記第2ベクトルの要素に、前記第1係数と更新された前記第1ベクトルの対応する要素との積を重み付けした値ならびに、前記第3ベクトルの対応する要素を前記第3係数で重み付けした値を加算することによって前記第2ベクトルの要素を更新するように構成されている、
構成例1ないし8のいずれか一項に記載の情報処理装置。
【0219】
(構成例13)
前記更新部は、前記第3係数がローパスフィルタを通過した後の値である第4係数を計算し、前記第3係数に代わり、前記第4係数を用いて前記第2ベクトルの要素を更新するように構成されている、
構成例9ないし12のいずれか一項に記載の情報処理装置。
【0220】
(構成例14)
前記第1値は-1、前記第2値は1であり、
前記目的関数は、イジングモデルのエネルギー式に相当する項を含んでいる、
構成例1ないし13のいずれか一項に記載の情報処理装置。
【0221】
(構成例15)
前記目的関数は、多体相互作用の項を含んでいる、
構成例14に記載の情報処理装置。
(構成例16)
前記基本式の1階のテンソルを含む項は、更新回数に応じて単調減少または単調増加する、
構成例1ないし14のいずれか一項に記載の情報処理装置。
【0222】
(構成例17)
複数のプロセッサを備え、
前記更新部は、前記複数のプロセッサを含み、前記更新部の前記複数のプロセッサのそれぞれは、前記第1ベクトルの一部の要素および前記第2ベクトルの一部の要素を更新するように構成されている、
構成例1ないし16のいずれか一項に記載の情報処理装置。
【0223】
(構成例18)
前記積和演算部は、前記複数のプロセッサを含み、前記積和演算部の前記複数のプロセッサのそれぞれは、前記第3ベクトルの一部の要素を更新するように構成されている、
構成例17に記載の情報処理装置。
【0224】
(構成例19)
前記複数のプロセッサからアクセス可能に構成されている共有メモリを備え、
前記更新部は、更新された後の前記第1ベクトルの要素または、更新された後の前記第1ベクトルのそれぞれの要素を2値変数に変換した前記第4ベクトルを前記共有メモリに保存するように構成されている、
構成例17または18に記載の情報処理装置。
【0225】
(構成例20)
前記複数のプロセッサは、Graphics Processing Unitのコアである、
構成例17ないし19のいずれか一項に記載の情報処理装置。
【0226】
(構成例21)
目的関数を、すべての項に含まれる変数について偏微分した形式の基本式に基づく計算をコンピュータに実行させるプログラムであって、
前記変数が第1ベクトルの要素、または、前記第1ベクトルの要素を第1値もしくは前記第1値より大きい第2値のいずれかの値をとる第1関数で変換した第4ベクトルの要素である、前記基本式に基づき、第3ベクトルのそれぞれの要素を更新するステップと、
前記第1ベクトルの要素に、第2ベクトルの対応する要素、または、前記第2ベクトルの対応する要素に重み付けした値を加算することによって前記第1ベクトルの要素を更新するステップと、
値が前記第1値より小さい前記第1ベクトルの要素を前記第1値に設定するステップと、
値が前記第2値より大きい前記第1ベクトルの要素を前記第2値に設定するステップと、
前記第2ベクトルの要素に、更新回数に応じて単調増加または単調減少する第1係数と前記第1ベクトルの対応する要素との積を重み付けした値ならびに、前記第3ベクトルの対応する要素を重み付けした値を加算することによって前記第2ベクトルの要素を更新するステップとを含む、
プログラム。
【0227】
(構成例22)
目的関数を、すべての項に含まれる変数について偏微分した形式の基本式に基づく計算をコンピュータに実行させる情報処理方法であって、
前記変数が第1ベクトルの要素、または、前記第1ベクトルの要素を第1値もしくは前記第1値より大きい第2値のいずれかの値をとる第1関数で変換した第4ベクトルの要素である、前記基本式に基づき、第3ベクトルのそれぞれの要素を更新するステップと、
前記第1ベクトルの要素に、第2ベクトルの対応する要素、または、前記第2ベクトルの対応する要素に重み付けした値を加算することによって前記第1ベクトルの要素を更新するステップと、
値が前記第1値より小さい前記第1ベクトルの要素を前記第1値に設定するステップと、
値が前記第2値より大きい前記第1ベクトルの要素を前記第2値に設定するステップと、
前記第2ベクトルの要素に、更新回数に応じて単調増加または単調減少する第1係数と前記第1ベクトルの対応する要素との積を重み付けした値ならびに、前記第3ベクトルの対応する要素を重み付けした値を加算することによって前記第2ベクトルの要素を更新するステップとを含む、
情報処理方法。
【0228】
(構成例23)
目的関数を、すべての項に含まれる変数について偏微分した形式の基本式に基づき、第3ベクトルのそれぞれの要素を更新するように構成され、前記基本式の変数は、第1ベクトルの要素、または、前記第1ベクトルの要素を第1値もしくは前記第1値より大きい第2値のいずれかの値をとる第1関数で変換した第4ベクトルの要素である、第1回路と、
前記第1ベクトルの要素に、第2ベクトルの対応する要素、または、前記第2ベクトルの対応する要素に重み付けした値を加算することによって前記第1ベクトルの要素を更新し、
値が前記第1値より小さい前記第1ベクトルの要素を前記第1値に設定し、
値が前記第2値より大きい前記第1ベクトルの要素を前記第2値に設定し、
前記第2ベクトルの要素に、更新回数に応じて単調増加または単調減少する第1係数と前記第1ベクトルの対応する要素との積を重み付けした値、ならびに、前記第3ベクトルの対応する要素を重み付けした値を加算することによって前記第2ベクトルの要素を更新するように構成された第2回路とを備える、
電子回路。
【0229】
(構成例24)
前記第2回路は、値が前記第1値と前記第2値の間にある第3値より小さい前記第1ベクトルの要素を前記第1値に変換し、値が前記第3値より大きい前記第1ベクトルの要素を前記第2値に変換することによって、前記目的関数の解を求めるように構成されている、
構成例23に記載の電子回路。
【0230】
(構成例25)
前記第2回路は、前記第1ベクトル、前記第2ベクトル、前記第3ベクトルの更新回数または前記第1係数の値がしきい値より大きくなったときに前記目的関数の解を求めるように構成されている、
構成例23または24に記載の電子回路。
【0231】
(構成例26)
前記第2回路は、値が前記第1値より小さい前記第1ベクトルの要素に対応する前記第2ベクトルの要素、または、前記第2値より大きい前記第1ベクトルの要素に対応する前記第2ベクトルの要素を、もとの前記第2ベクトルの要素に、第2係数を乗じた値に更新するように構成されている、
構成例23ないし25のいずれか一項に記載の電子回路。
【0232】
(構成例27)
前記第2回路は、値が前記第1値より小さい前記第1ベクトルの要素に対応する前記第2ベクトルの要素の値、または、値が前記第2値より大きい前記第1ベクトルの要素に対応する前記第2ベクトルの要素の値を、擬似乱数に設定するように構成されている、
構成例23ないし25のいずれか一項に記載の電子回路。
【0233】
(構成例28)
前記第1回路は、第1ベクトルの要素を変数として計算した前記基本式の値を前記第1関数で変換した値に基づいて前記第3ベクトルのそれぞれの要素を更新するように構成されている、
構成例23ないし27のいずれか一項に記載の電子回路。
【0234】
(構成例29)
前記第1回路は、前記第1係数をパラメータとする第2関数を乗じることによって前記第3ベクトルのそれぞれの要素を更新するように構成されている、
構成例28に記載の電子回路。
【0235】
(構成例30)
前記第1回路の入力側と、前記第2回路の出力側に接続され、前記第4ベクトルまたは前記第1ベクトルを格納するように構成された第1メモリを備え、
前記第1回路の出力側は、前記第2回路の入力側に接続されている、
構成例23ないし29のいずれか一項に記載の電子回路。
【0236】
(構成例31)
前記第1メモリが前記第4ベクトルのそれぞれの要素の値を1ビットの情報で格納するように構成されており、
それぞれの前記第1回路は、前記第1メモリから読み出した前記1ビットの情報を符号付き2進数に復号化するように構成された復号器を含んでいる、
構成例30に記載の電子回路。
【0237】
(構成例32)
前記第2回路が前記第3ベクトルの要素に基づき、前記第1ベクトルの要素または前記第2ベクトルの要素または前記第4ベクトルの要素の少なくともいずれかを計算しているときに、
前記第1回路が、前記第2回路によって前記第1ベクトルの要素および前記第2ベクトルの要素および前記第4ベクトルの要素が次回計算されるときに使われる前記第3ベクトルの要素を計算するように構成されている、
構成例30に記載の電子回路。
【0238】
(構成例33)
それぞれが入力側で前記第1メモリに接続されているPb個(Pbは2以上の整数)の前記第1回路と、
それぞれが入力側でいずれかの前記第1回路に接続されており、それぞれが出力側で前記第1メモリに接続されているPb個の前記第2回路とを備えている、
構成例30ないし32のいずれか一項に記載の電子回路。
【0239】
(構成例34)
それぞれの前記第1回路は、N×N次元の結合係数行列をPb個に分割したN/Pb×N次元の第1行列のいずれかと、前記第4ベクトルをPb個に分割した第5ベクトルのいずれかとの積である前記第3ベクトルの要素を計算するように構成されており、
それぞれの前記第2回路は、いずれかの前記第1回路が計算した前記第3ベクトルの要素に基づき、前記第1ベクトルのN/Pb個の要素および前記第2ベクトルのN/Pb個の要素および前記第4ベクトルのN/Pb個の要素を更新し、更新した前記第4ベクトルのN/Pb個の要素を前記第1メモリに保存するように構成されている、
構成例33に記載の電子回路。
【0240】
(構成例35)
それぞれの前記第1回路は、前記第1行列を、Pr×Pc次元の複数の第2行列に、前記第5ベクトルを要素数Pcの複数の第6ベクトルにそれぞれ分割し、それぞれの前記第2行列と、対応する前記第6ベクトルとの積演算を順次実行することにより、前記第3ベクトルの要素を計算するように構成されている、
構成例34に記載の電子回路。
【0241】
(構成例36)
前記第2回路は、
クロックサイクル数に応じて単調増加する第2値を出力するように構成されたカウンタと、
入力側で前記第4メモリおよび前記第1回路に接続された第1加算器と、
入力側で前記第5メモリおよび前記カウンタに接続された第1乗算器と、
入力側で前記第1加算器および前記第1乗算器に接続された第2加算器と、
入力側で前記第2メモリに接続され、前記クロックサイクル数に応じて単調増加する第3値を乗じた値を出力するように構成された第1演算器と、
入力側で前記第2加算器および前記第1演算器に接続された第3加算器と、
入力側で前記第3加算器に接続され、前記第3加算器からの入力に重み付けした信号を出力するように構成された第2演算器と、
入力側で前記第2メモリおよび前記第2演算器に接続された第4加算器と、
入力側で前記第4加算器に接続された第1コンパレータと、
入力側で前記第4加算器に接続され、前記第1コンパレータからの入力に基づき、第1値の定数信号、第2値の定数信号、前記第4加算器の出力信号のいずれかを前記第2メモリに出力するように構成された第1マルチプレクサとを含む、
構成例35に記載の電子回路。
【0242】
(構成例37)
それぞれの前記第2回路は、
入力側で前記第4加算器に接続された第2コンパレータと、
入力側で前記第3加算器に接続され、前記第2コンパレータからの入力に基づき、0の定数信号または前記第3加算器の出力信号を前記第4メモリに出力するように構成された第2マルチプレクサとを含む、
構成例36に記載の電子回路。
【0243】
(構成例38)
それぞれの前記第2回路は、
入力側で前記第4加算器に接続された第3コンパレータと、
前記第3コンパレータからの入力に基づき、+1の定数信号または0の定数信号を前記第1メモリに出力するように構成された第3マルチプレクサとを含む、
構成例37に記載の電子回路。
【0244】
(構成例39)
前記第1メモリは、第1領域と第2領域とをそれぞれPb個ずつ有し、
前記第1領域および前記第2領域は、
前記第1領域からPb個の前記第1回路に前記第4ベクトルの要素がブロードキャストされている期間に、前記第2領域に前記第2回路から入力された更新後の前記第4ベクトルの要素が保存され、
前記第2領域からPb個の前記第1回路に前記第4ベクトルの要素がブロードキャストされている期間に、前記第1領域に前記第2回路から入力された更新後の前記第4ベクトルの要素が保存されるように構成されている、
構成例36ないし38のいずれか一項に記載の電子回路。
【0245】
(構成例40)
第1送信ポートと、第1受信ポートとを含む第1通信回路と、
第2送信ポートと、第2受信ポートとを含む第2通信回路と、
前記第1メモリ、前記第2回路、前記第2受信ポートおよび前記第1送信ポートに接続された第1バッファメモリと、
前記第1メモリ、前記第2回路、前記第1受信ポートおよび前記第2送信ポートに接続された第2バッファメモリとを備える、
構成例30ないし39のいずれか一項に記載の電子回路。
【0246】
(構成例41)
Pb個の前記第2回路によって更新された前記第4ベクトルを分割し、一方の第1データを前記第1バッファメモリに格納し、他方の第2データを前記第2バッファメモリに格納し、
前記第1バッファメモリに格納された前記第1データを前記第1送信ポートより送信し、
前記第2バッファメモリに格納された前記第2データを前記第2送信ポートより送信し、
前記第1バッファメモリに格納された前記第1データと、前記第2バッファメモリに格納された前記第2データを前記第1メモリに格納するように構成されている、
構成例40に記載の電子回路。
【0247】
(構成例42)
前記第2受信ポートより受信した第3データを前記第1バッファメモリに格納し、
前記第1受信ポートより受信した第4データを前記第2バッファメモリに格納し、
前記第3データおよび前記第4データは、前記第1メモリに格納されるように構成されている、
構成例41に記載の電子回路。
【0248】
(構成例43)
前記第1送信ポートと、前記第1バッファメモリとの間に接続された第1FIFOメモリと、
前記第1受信ポートと、前記第2バッファメモリとの間に接続された第2FIFOメモリと、
前記第2受信ポートと、前記第1バッファメモリとの間に接続された第3FIFOメモリと、
前記第2送信ポートと、前記第2バッファメモリとの間に接続された第4FIFOメモリとを備え、
前記第2FIFOメモリまたは前記第4FIFOメモリの両方にデータが格納されていない場合には、待機状態に遷移し、
前記第2FIFOメモリまたは前記第4FIFOメモリの両方にデータが格納されている場合には、前記待機状態が解除されるように構成されている、
構成例40ないし42のいずれかに記載の電子回路。
【0249】
(構成例44)
構成例40ないし43のいずれか一項に記載の電子回路を複数備え、
一方の前記電子回路の前記第1送信ポートが他方の前記電子回路の前記第2受信ポートに接続され、
一方の前記電子回路の前記第1受信ポートが他方の前記電子回路の前記第2送信ポートに接続され、
複数の前記電子回路でリング状の通信経路が時計回りと反時計周りの両方向に形成されている、
計算システム。
【0250】
なお、本発明は上記実施形態そのままに限定されるものではなく、実施段階ではその要旨を逸脱しない範囲で構成要素を変形して具体化できる。また、上記実施形態に開示されている複数の構成要素の適宜な組み合わせにより、種々の発明を形成できる。例えば、実施形態に示される全構成要素から幾つかの構成要素を削除してもよい。さらに、異なる実施形態にわたる構成要素を適宜組み合わせてもよい。
【符号の説明】
【0251】
1 管理サーバ
2 ネットワーク
3a、3b、3c 計算サーバ
4a、4b、4c ケーブル
5 スイッチ
6 情報端末
10 プロセッサ
11 管理部
12 変換部
13 制御部
14 記憶部
14A 問題データ
14B 計算データ
14C 管理プログラム
14D 変換プログラム
14E、34C 制御プログラム
15、31 通信回路
16 入力回路
17 出力回路
18 操作装置
19 表示装置
20 バス
32 共有メモリ
33A、33B、33C、33D プロセッサ
34 ストレージ
34A 計算データ
34B 計算プログラム
35 ホストバスアダプタ
37、38、44、45、46 ループ
39、40 配線
41 SBカーネル回路
42 演算回路(SB core)
43、44a、44b、45a、45b メモリ
47 復号器
50 更新部
51 積和演算部
52 カウンタ
100 情報処理システム
200、201、202、208 電子回路
図1
図2
図3
図4
図5
図6
図7
図8
図9
図10
図11
図12
図13
図14
図15
図16
図17
図18
図19
図20
図21
図22
図23
図24
図25
図26
図27
図28
図29
図30
図31
図32
図33
図34
図35
図36
図37
図38
図39
図40