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

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

▶ 株式会社東芝の特許一覧

(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2024-08-02
(45)【発行日】2024-08-13
(54)【発明の名称】計算装置
(51)【国際特許分類】
   G06N 99/00 20190101AFI20240805BHJP
   G06F 17/16 20060101ALI20240805BHJP
   G06F 15/173 20060101ALI20240805BHJP
   G06Q 10/04 20230101ALI20240805BHJP
   G06F 17/13 20060101ALI20240805BHJP
【FI】
G06N99/00 180
G06F17/16 M
G06F15/173 683B
G06Q10/04
G06F17/13
【請求項の数】 19
(21)【出願番号】P 2021143766
(22)【出願日】2021-09-03
(65)【公開番号】P2023037176
(43)【公開日】2023-03-15
【審査請求日】2023-03-10
(73)【特許権者】
【識別番号】000003078
【氏名又は名称】株式会社東芝
(74)【代理人】
【識別番号】110002147
【氏名又は名称】弁理士法人酒井国際特許事務所
(72)【発明者】
【氏名】柏俣 智哉
(72)【発明者】
【氏名】日高 亮
(72)【発明者】
【氏名】山崎 雅也
(72)【発明者】
【氏名】濱川 洋平
(72)【発明者】
【氏名】辰村 光介
【審査官】福西 章人
(56)【参考文献】
【文献】特開2021-043667(JP,A)
【文献】特開2020-046887(JP,A)
【文献】国際公開第2012/101833(WO,A1)
【文献】特開2020-154524(JP,A)
【文献】米国特許出願公開第2019/0087388(US,A1)
【文献】特開2018-092325(JP,A)
(58)【調査した分野】(Int.Cl.,DB名)
G06N 3/00-99/00
G06F 15/173
G06F 17/13
G06F 17/16
G06Q 10/04
(57)【特許請求の範囲】
【請求項1】
N個(Nは2以上の整数)の離散変数の最適化問題の解を出力する計算装置であって、
それぞれがネットワークに接続されたP個(Pは、2以上、N未満の整数)の計算コアを備え、
前記P個の計算コアのそれぞれは、N個の振動子のうちの一部が排他的に割り当てられ、
前記N個の振動子は、前記N個の離散変数に一対一で対応し、一次元方向に仮想的に位置および運動量が時間変化し、
前記P個の計算コアは、前記N個の振動子における前記位置を表すN個の第1変数および前記運動量を表すN個の第2変数を、初期時刻から終了時刻まで時間ステップ毎に順次に算出し、
前記P個の計算コアは、前記終了時刻における前記N個の第1変数に基づく値を、前記最適化問題の解に基づく値として出力し、
前記P個の計算コアのうちのk番目(kは、1以上、P以下の整数)の計算コアは、
前記N個の振動子のうちのM個(Mは、1以上、N未満の整数)の振動子が割り当てられ、
前記時間ステップ毎に、前記N個の第1変数のうちの、割り当てられた前記M個の振動子に対応するM個の第1変数、および、前記M個の振動子に対応するM個の第2変数を算出し、
前記k番目の計算コアは、
前記時間ステップ毎に、前記P個の計算コアのうちの前記k番目の計算コア以外の(P-1)個の計算コアにより算出された、直前の時間ステップにおける(N-M)個の第1変数を、前記ネットワークを介して一部ずつシーケンシャルに受信する受信回路と、
前記時間ステップ毎に、前記直前の時間ステップにおける前記N個の第1変数に基づき、前記M個の振動子に対応するM個の中間変数を算出する相互作用回路と、
前記時間ステップ毎に、前記直前の時間ステップにおける前記M個の第1変数、前記直前の時間ステップにおける前記M個の第2変数および前記M個の中間変数に基づき、対象の時間ステップにおける前記M個の第1変数および前記M個の第2変数を算出する時間発展回路と、
前記時間ステップ毎に、前記時間発展回路により算出された前記M個の第1変数を、前記ネットワークを介して前記(P-1)個の計算コアに送信する送信回路と、
を有し、
前記相互作用回路は、計算途中の前記M個の中間変数を記憶する中間変数メモリを含み、
前記時間ステップ毎に、前記相互作用回路は、
前記直前の時間ステップの前記N個の第1変数を、一部の第1変数ずつシーケンシャルに取得し、
前記一部の第1変数を取得する毎に、予め設定されたM×Nの部分行列のうちの取得した前記一部の第1変数に対応する一部の結合係数と、取得した前記一部の第1変数とを、行毎に積和演算し、
前記一部の第1変数を取得する毎に、行毎の積和演算の演算結果のそれぞれを、前記中間変数メモリに記憶された前記M個の中間変数のうちの対応する中間変数に累積加算し、
前記相互作用回路は、時間ステップ毎に、前記受信回路が前記直前の時間ステップの前記(N-M)個の第1変数の全ての受信を完了する前に、前記直前の時間ステップの前記N個の第1変数のうちの最初の前記一部の第1変数を用いた演算を開始し、
さらに、前記時間ステップ毎に、前記相互作用回路は、
前記受信回路が前記直前の時間ステップの前記(N-M)個の第1変数の全ての受信を完了する前に、前記M個の中間変数の算出を開始し、
前記N個の第1変数のうちの最後の前記一部の第1変数に対応する積和演算を完了した後に、前記M個の中間変数を前記時間発展回路に出力する
計算装置。
【請求項2】
前記k番目の計算コアは、予め設定された前記M×Nの部分行列を記憶する係数メモリをさらに有する
請求項に記載の計算装置。
【請求項3】
前記k番目の計算コアは、
前記M個の第1変数を記憶する第1メモリと、
前記M個の第2変数を記憶する第2メモリと、
をさらに有し、
前記時間ステップ毎に、前記時間発展回路は、前記第1メモリに記憶された前記M個の第1変数を更新し、前記第2メモリに記憶された前記M個の第2変数を更新する
請求項またはに記載の計算装置。
【請求項4】
前記相互作用回路は、前記時間ステップ毎に、前記最初の前記一部の第1変数を用いた演算を開始する前に、前記中間変数メモリに記憶されている前記M個の中間変数を消去する
請求項1から3の何れか1項に記載の計算装置。
【請求項5】
N個(Nは2以上の整数)の離散変数の最適化問題の解を出力する計算装置であって、
それぞれがネットワークに接続されたP個(Pは、2以上、N未満の整数)の計算コアを備え、
前記P個の計算コアのそれぞれは、N個の振動子のうちの一部が排他的に割り当てられ、
前記N個の振動子は、前記N個の離散変数に一対一で対応し、一次元方向に仮想的に位置および運動量が時間変化し、
前記P個の計算コアは、前記N個の振動子における前記位置を表すN個の第1変数および前記運動量を表すN個の第2変数を、初期時刻から終了時刻まで時間ステップ毎に順次に算出し、
前記P個の計算コアは、前記終了時刻における前記N個の第1変数に基づく値を、前記最適化問題の解に基づく値として出力し、
前記P個の計算コアのうちのk番目(kは、1以上、P以下の整数)の計算コアは、
前記N個の振動子のうちのM個(Mは、1以上、N未満の整数)の振動子が割り当てられ、
前記時間ステップ毎に、前記N個の第1変数のうちの、割り当てられた前記M個の振動子に対応するM個の第1変数、および、前記M個の振動子に対応するM個の第2変数を算出し、
前記k番目の計算コアは、
前記時間ステップ毎に、前記P個の計算コアのうちの前記k番目の計算コア以外の(P-1)個の計算コアにより算出された、直前の時間ステップにおける(N-M)個の第1変数を、前記ネットワークを介して一部ずつシーケンシャルに受信する受信回路と、
前記時間ステップ毎に、前記直前の時間ステップにおける前記N個の第1変数に基づき、前記M個の振動子に対応するM個の中間変数を算出する相互作用回路と、
前記時間ステップ毎に、前記直前の時間ステップにおける前記M個の第1変数、前記直前の時間ステップにおける前記M個の第2変数および前記M個の中間変数に基づき、対象の時間ステップにおける前記M個の第1変数および前記M個の第2変数を算出する時間発展回路と、
前記時間ステップ毎に、前記時間発展回路により算出された前記M個の第1変数を、前記ネットワークを介して前記(P-1)個の計算コアに送信する送信回路と、
を有し、
前記相互作用回路は、計算途中の前記M個の中間変数を記憶する中間変数メモリを含み、
前記時間ステップ毎に、前記相互作用回路は、前記受信回路が前記直前の時間ステップの前記(N-M)個の第1変数の全ての受信を完了する前に、前記M個の中間変数の算出を開始し、
前記中間変数メモリは、前記M個の中間変数に対応するM個のレジスタを有し、
前記M個のレジスタのそれぞれは、対応する中間変数における計算途中の値が書き込まれ、
前記M個のレジスタは、直列に接続され、記憶している値を直列方向に隣接するレジスタに転送するシフトレジスタとして機能し、または、複数列に配列されて列毎に接続され、記憶している値を列毎に直列方向に隣接するレジスタに転送する複数のシフトレジスタとして機能し、
前記相互作用回路は、前記M個のレジスタを前記シフトレジスタまたは前記複数のシフトレジスタとして機能させて、前記M個の中間変数を前記時間発展回路へと供給する
計算装置。
【請求項6】
前記時間ステップ毎に、前記相互作用回路は、
前記直前の時間ステップの前記N個の第1変数を、一部の第1変数ずつシーケンシャルに取得し、
前記一部の第1変数を取得する毎に、予め設定されたM×Nの部分行列のうちの取得した前記一部の第1変数に対応する一部の結合係数と、取得した前記一部の第1変数とを、行毎に積和演算し、
前記一部の第1変数を取得する毎に、行毎の積和演算の演算結果のそれぞれを、前記中間変数メモリに記憶された前記M個の中間変数のうちの対応する中間変数に累積加算し、
前記相互作用回路は、時間ステップ毎に、前記受信回路が前記直前の時間ステップの前記(N-M)個の第1変数の全ての受信を完了する前に、前記直前の時間ステップの前記N個の第1変数のうちの最初の前記一部の第1変数を用いた演算を開始する
請求項5に記載の計算装置。
【請求項7】
前記k番目の計算コアは、予め設定された前記M×Nの部分行列を記憶する係数メモリをさらに有する
請求項6に記載の計算装置。
【請求項8】
前記k番目の計算コアは、
前記M個の第1変数を記憶する第1メモリと、
前記M個の第2変数を記憶する第2メモリと、
をさらに有し、
前記時間ステップ毎に、前記時間発展回路は、前記第1メモリに記憶された前記M個の第1変数を更新し、前記第2メモリに記憶された前記M個の第2変数を更新する
請求項6または7に記載の計算装置。
【請求項9】
前記相互作用回路は、前記時間ステップ毎に、前記N個の第1変数のうちの最後の前記一部の第1変数に対応する積和演算を完了した後に、前記M個の中間変数を前記時間発展回路に出力する
請求項6から8の何れか1項に記載の計算装置。
【請求項10】
前記相互作用回路は、前記時間ステップ毎に、前記最初の前記一部の第1変数を用いた演算を開始する前に、前記中間変数メモリに記憶されている前記M個の中間変数を消去する
請求項9に記載の計算装置。
【請求項11】
前記P個の計算コアのそれぞれは、時間ステップ毎の前記N個の第1変数が送受信される通信期間において、前記通信期間を分割した複数のタイムスロットのうちの1つのタイムスロットが割り当てられ、
前記送信回路は、割り当てられた前記タイムスロットにおいて、算出した前記M個の第1変数を、前記ネットワークを介して前記(P-1)個の計算コアにブロードキャスト送信する
請求項1から10の何れか1項に記載の計算装置。
【請求項12】
前記受信回路は、前記時間発展回路により算出された前記M個の第1変数を、前記ネットワークを介して受信し、
前記相互作用回路は、前記時間ステップ毎に、前記直前の時間ステップの前記N個の第1変数の全てを前記受信回路からシーケンシャルに取得する
請求項11に記載の計算装置。
【請求項13】
前記k番目の計算コアは、前記時間発展回路により算出された前記M個の第1変数と、前記受信回路により受信された前記(N-M)個の第1変数とを時間多重化して、前記相互作用回路に供給する第1マルチプレクサをさらに含み、
前記相互作用回路は、前記時間ステップ毎に、前記直前の時間ステップの前記N個の第1変数の全てを前記第1マルチプレクサからシーケンシャルに取得する
請求項11に記載の計算装置。
【請求項14】
前記ネットワークは、前記P個の計算コアを1または複数のリングネットワークにより接続し、
前記P個の計算コアは、時間ステップ毎のN個の第1変数xが送受信される通信期間において、N個の第1変数xを一部ずつバケツリレー方式で送受信する
請求項1から13の何れか1項に記載の計算装置。
【請求項15】
前記k番目の計算コアは、前記時間発展回路により算出された前記M個の第1変数と、前記受信回路により受信された前記(N-M)個の第1変数とを時間多重化して前記送信回路に供給する第2マルチプレクサをさらに含み、
前記受信回路は、前記直前の時間ステップの前記N個の第1変数の全てを、前記ネットワークを介して受信し、
前記時間ステップ毎に、前記相互作用回路は、前記直前の時間ステップの前記N個の第1変数の全てを前記受信回路からシーケンシャルに取得する
請求項14に記載の計算装置。
【請求項16】
前記k番目の計算コアは、前記時間発展回路により算出された前記M個の第1変数と、前記受信回路により受信された前記(N-M)個の第1変数とを時間多重化して前記送信回路に供給する第3マルチプレクサをさらに含み、
前記時間ステップ毎に、前記相互作用回路は、前記直前の時間ステップの前記N個の第1変数を、前記第3マルチプレクサからシーケンシャルに取得する
請求項14に記載の計算装置。
【請求項17】
前記相互作用回路は、前記時間ステップ毎に、前記中間変数メモリに記憶された前記M個の中間変数のそれぞれを時分割で集約して前記時間発展回路に供給する集約回路をさらに有する
請求項1から16の何れか1項に記載の計算装置。
【請求項18】
前記P個の計算コアのそれぞれは、半導体装置に実装される
請求項1から17の何れか1項に記載の計算装置。
【請求項19】
前記ネットワークは、前記P個の計算コアにより共有されるバスである
請求項18に記載の計算装置。
【発明の詳細な説明】
【技術分野】
【0001】
本発明の実施形態は、計算装置に関する。
【背景技術】
【0002】
金融、物流、制御、化学などの様々な応用分野における複雑な系の最適化は、多くの場合、数学的な組合せ最適化問題に帰着される。組合せ最適化は、コスト関数と呼ばれる離散変数の関数を最小化する離散値の組合せを見つける問題である。
【0003】
近年、イジングマシンと呼ばれる、イジングスピンモデルの基底状態探索を行う特定目的装置が注目されている。イジングスピンモデルの基底状態探索は、これをイジング問題と呼ばれる。イジング問題は、イジングエネルギーを最小化する組合せ最適化問題である。イジングエネルギーは、2値変数であるイジングスピンの2次関数で与えられたコスト関数である。イジングマシンは、このようなイジング問題を高速に解くことが可能である。
【0004】
また、多くの実用的な組み合わせ最適化問題は、イジング問題に変換することが可能である。多くの実用的な組み合わせ最適化問題は、イジングマシンを用いることにより、高速に解くことを可能である。
【0005】
イジングマシンは、例えば、量子アニーラ、コヒーレントイジングマシンおよび量子分岐マシン等によりハードウェア実装される。量子アニーラは、超伝導回路を使って量子アニーリングを実現する。コヒーレントイジングマシンは、光パラメトリック発振器で形成されたネットワークの発振現象を利用する。量子分岐マシンは、カー効果を有するパラメトリック発振器のネットワークにおける量子力学的な分岐現象を利用する。これらのハードウェア実装されたイジングマシンは、計算時間の大幅な短縮を実現する可能性がある一方、大規模化および安定的な運用が難しいという課題もある。
【0006】
イジング問題は、広く普及しているデジタルコンピュータまたは演算回路等の計算資源を用いて解を算出することも可能である。デジタルコンピュータは、量子アニーラ、コヒーレントイジングマシンおよび量子分岐マシン等と比べ、大規模化および安定運用が可能である。ただし、計算資源を用いたイジングマシンは、計算資源によって計算規模および計算速度が制限される。このようなイジングマシンは、計算規模および計算速度を向上させようとした場合、計算資源を増大させなければならない。しかし、計算資源の増大をするためには、半導体の製造プロセスなどの技術的困難が多く、容易でない。
【0007】
一方で、スケールアウト技術を用いて多数の計算資源により構成されるイジングマシンは、計算資源の個数に応じて性能向上が得られる可能性がある。しかし、多数の計算資源により構成されるイジングマシンは、それぞれの計算資源の間で情報をやり取りしながら計算をしなければならないため、計算資源の間の通信オーバーヘッドによって総計算時間が長期化する。
【先行技術文献】
【特許文献】
【0008】
【文献】特開2021-43667号公報
【文献】特開2020-46887号公報
【文献】特開2019-159566号公報
【非特許文献】
【0009】
【文献】K. Tatsumura, M. Yamasaki, H. Goto,“Scaling out Ising machines using a multi-chip architecture for simulated bifurcation”, Nature Electronics, Mar. 2021, P208-217
【文献】Hayato Goto, Kosuke Tatsumura, Alexander R. Dixon, “Combinatorial optimization by simulating adiabatic bifurcations in nonlinear Hamiltonian systems”,Science Advances, Vol. 5, no. 4, eaav2372, 19 Apr. 2019
【文献】H. Goto, K. Endo, M. Suzuki, Y. Sakai, T. Kanao, Y. Hamakawa, R. Hidaka, M. Yamasaki, K. Tatsumura, “High-performance combinatorial optimization based on classical mechanics”, Science Advances; 7, eabe7953”,Feb. 2021
【発明の概要】
【発明が解決しようとする課題】
【0010】
本発明が解決しようとする課題は、通信オーバーヘッドによる総計算時間の長期化を防ぎつつ、大規模な最適化問題を高速に解くことである。
【課題を解決するための手段】
【0011】
実施形態に係る計算装置は、N個(Nは2以上の整数)の離散変数の最適化問題の解を出力する。前記計算装置は、それぞれがネットワークに接続されたP個(Pは、2以上、N未満の整数)の計算コアを備える。前記P個の計算コアのそれぞれは、N個の振動子のうちの一部が排他的に割り当てられる。前記N個の振動子は、前記N個の離散変数に一対一で対応し、一次元方向に仮想的に位置および運動量が時間変化する。前記P個の計算コアは、前記N個の振動子における前記位置を表すN個の第1変数および前記運動量を表すN個の第2変数を、初期時刻から終了時刻まで時間ステップ毎に順次に算出する。前記P個の計算コアは、前記終了時刻における前記N個の第1変数に基づく値を、前記最適化問題の解に基づく値として出力する。前記P個の計算コアのうちのk番目(kは、1以上、P以下の整数)の計算コアは、前記N個の振動子のうちのM個(Mは、1以上、N未満の整数)の振動子が割り当てられる。前記k番目の計算コアは、前記時間ステップ毎に、前記N個の第1変数のうちの、割り当てられた前記M個の振動子に対応するM個の第1変数、および、前記M個の振動子に対応するM個の第2変数を算出する。前記k番目の計算コアは、受信回路と、相互作用回路と、時間発展回路と、送信回路とを有する。前記受信回路は、前記時間ステップ毎に、前記P個の計算コアのうちの前記k番目の計算コア以外の(P-1)個の計算コアにより算出された、直前の時間ステップにおける(N-M)個の第1変数を、前記ネットワークを介して一部ずつシーケンシャルに受信する。前記相互作用回路は、前記時間ステップ毎に、直前の時間ステップにおける前記N個の第1変数に基づき、前記M個の振動子に対応するM個の中間変数を算出する。前記時間発展回路は、前記時間ステップ毎に、直前の時間ステップにおける前記M個の第1変数、直前の時間ステップにおける前記M個の第2変数および前記M個の中間変数に基づき、対象の時間ステップにおける前記M個の第1変数および前記M個の第2変数を算出する。前記送信回路は、前記時間ステップ毎に、前記時間発展回路により算出された前記M個の第1変数を、前記ネットワークを介して前記(P-1)個の計算コアに送信する。前記相互作用回路は、計算途中の前記M個の中間変数を記憶する中間変数メモリを含む。前記時間ステップ毎に、前記相互作用回路は、前記直前の時間ステップの前記N個の第1変数を、一部の第1変数ずつシーケンシャルに取得し、前記一部の第1変数を取得する毎に、予め設定されたM×Nの部分行列のうちの取得した前記一部の第1変数に対応する一部の結合係数と、取得した前記一部の第1変数とを、行毎に積和演算し、前記一部の第1変数を取得する毎に、行毎の積和演算の演算結果のそれぞれを、前記中間変数メモリに記憶された前記M個の中間変数のうちの対応する中間変数に累積加算し、前記相互作用回路は、時間ステップ毎に、前記受信回路が前記直前の時間ステップの前記(N-M)個の第1変数の全ての受信を完了する前に、前記直前の時間ステップの前記N個の第1変数のうちの最初の前記一部の第1変数を用いた演算を開始する。前記時間ステップ毎に、前記相互作用回路は、前記受信回路が前記直前の時間ステップの前記(N-M)個の第1変数の全ての受信を完了する前に、前記M個の中間変数の算出を開始し、前記N個の第1変数のうちの最後の前記一部の第1変数に対応する積和演算を完了した後に、前記M個の中間変数を前記時間発展回路に出力する
【図面の簡単な説明】
【0012】
図1】シミュレーテッド分岐アルゴリズムの分岐現象を示す図。
図2】本実施形態に係る計算装置の構成を示す図。
図3】第1変数および第2変数の割り当てを示す図。
図4】P個の計算コアに設定される結合行列を示す図。
図5】計算装置の処理の流れを示すフローチャート。
図6】受信および相互作用演算のタイミングの第1例を示す図。
図7】受信および相互作用演算のタイミングの第2例を示す図。
図8】k番目の計算コアの構成を示す図。
図9】シーケンシャルな行列乗算処理について説明するための図。
図10】P個の計算コアを接続するネットワークの第1例を示す図。
図11】P個の計算コアのそれぞれの第1変数の送信タイミングを示す図。
図12】P個の計算コアを接続するネットワークの第2例を示す図。
図13】P個の計算コアを接続するネットワークの第3例を示す図。
図14】P個の計算コアを接続するネットワークの第4例を示す図。
図15】第1例の転送回路を含む計算コアの構成を示す図。
図16】第2例の転送回路を含む計算コアの構成を示す図。
図17】第3例の転送回路を含む計算コアの構成を示す図。
図18】第4例の転送回路を含む計算コアの構成を示す図。
図19】第3例の転送回路を含む計算コアの処理タイミングを示す図。
図20】第3例の転送回路を含む計算コアの詳細な処理タイミングを示す図。
図21】第4例の転送回路を含む計算コアの処理タイミングを示す図。
図22】第4例の転送回路を含む計算コアの詳細な処理タイミングを示す図。
図23】計算コアによる処理内容を示す疑似コードを示す図。
図24】疑似コードに従った処理の流れを示すフローチャート。
図25】第1例に係る相互作用回路の構成を示す図。
図26】第1例に係る相互作用回路の演算処理内容を示す図。
図27】第2例に係る相互作用回路の構成を示す図。
図28】第2例に係る相互作用回路の演算処理内容を示す図。
図29】第3例に係る相互作用回路の構成を示す図。
図30】時間発展回路の構成を第1メモリおよび第2メモリとともに示す図。
図31】計算サーバの構成を示す図。
【発明を実施するための形態】
【0013】
(組合せ最適化問題)
イジング問題を解くために使われる装置の一例として、イジングマシンが挙げられる。式(1)は、イジングモデルのエネルギーを表す。
【数1】
【0014】
、sはスピンを表す。スピンは、+1または-1のいずれかの値をとる2値変数である。sは、N個のスピンのうちのi番目のスピンを表す。sは、N個のスピンのうちのj番目のスピンを表す。iおよびjは、1以上、N以下の整数である。Nは、スピンの数を表し、2以上の整数である。hは、個々のスピンに作用する力を表すバイアス係数の配列である。hは、i番目のスピンに作用する力を表すバイアス係数である。Jは、2つのスピン間に作用する力を表す結合係数の行列である。Jは、対角成分が0であるN×Nの実対称行列である。Ji,jは、Jのi行j列の要素の係数を表す。つまり、Ji,jは、i番目のスピンと、j番目のスピンとの間に作用する力を表す結合係数である。
【0015】
イジングマシンは、式(1)により表されるエネルギーEを目的関数とし、エネルギーEを可能な限り小さくする解を算出する。エネルギーEが最小値となるイジングモデルの解(s、s、・・・、s)は、最適解と呼ばれる。ただし、イジングモデルの解は、最適解ではなく、エネルギーEが最小値に近い近似解であってもよい。すなわち、イジング問題は、最適解のみならず、近似解を算出する問題であってもよい。
【0016】
また、0または1のいずれかの値をとる離散変数(ビット)の2次関数を目的関数とする0-1組合せ最適化問題は、0-1二次計画問題と呼ばれる。離散変数(ビット)は、(1+s)/2の演算を用いることにより、sに変換される。つまり、0-1二次計画問題は、式(1)で表されるイジング問題と等価であるといえる。従って、0-1二次計画問題は、イジング問題に変換し、イジングマシンにより解を算出することが可能である。
【0017】
(シミュレーテッド分岐アルゴリズム)
非特許文献2および3には、0-1組合せ最適化問題を解くためのアルゴリズムとして、シミュレーテッド分岐アルゴリズムが提案されている。シミュレーテッド分岐アルゴリズムは、デジタルコンピュータによって実現されたイジングモデルを用いて、規模の大きい0-1組合せ最適化問題を高速に解くことが可能である。シミュレーテッド分岐アルゴリズムは、CPU(Central Processing Unit)、マイクロプロセッサ、GPU(Graphics Processing Unit)、FPGA(Field-Programmable Gate Array)、ASIC(Application Specific Integrated Circuit)、または、これらの組合せの回路等の電子回路によっても、規模の大きい0-1組合せ最適化問題を高速に解くことが可能である。
【0018】
シミュレーテッド分岐アルゴリズムは、それぞれが仮想的なN個の振動子に対応するN個の第1変数xおよびN個の第2変数yを用いる。シミュレーテッド分岐アルゴリズムにおいて、N個の振動子のそれぞれは、一次元の自由度を持った仮想的な粒子を表す。すなわち、N個の振動子のそれぞれは、一次元方向に仮想的に位置および運動量が変化する。N個の振動子は、イジング問題のN個のスピンに一対一で対応する。従って、N個の振動子は、組合せ最適化問題のN個の離散変数に一対一で対応する。第1変数xおよび第2変数yは、いずれも、実数で表される連続変数である。i番目の第1変数xは、N個の振動子のうちのi番目の振動子の位置を表す。i番目の第2変数yは、i番目の振動子の運動量を表す。iは、1以上、N以下の整数を表し、N個の振動子のそれぞれを特定するインデックスを表す。
【0019】
基本的なシミュレーテッド分岐アルゴリズムは、それぞれN個ある第1変数xおよび第2変数yについて、下記の式(2)の連立常微分方程式を数値的に解く。
【数2】
【0020】
Hは、下記の式(3)のハミルトニアンである。
【数3】
【0021】
係数Dは、予め定められた定数であり、離調(detuning)に相当する。係数p(t)は、ポンピング振幅(pumping amplitude)に相当し、シミュレーテッド分岐アルゴリズムの計算時に更新回数に応じて値が単調増加する。tは、時刻を表す変数である。係数p(t)の初期値は0に設定されていてもよい。Kは、予め定められた定数であって、正のカー係数(Kerr coefficient)に相当する。なお、Kは、0であってもよい。
【0022】
は、外力を表し、下記の式(4)で表される。
【数4】
【0023】
式(4)のbは、式(3)の中の小カッコの内の数式を第1変数xで偏微分した式である。式(3)の中の小カッコの内の数式は、イジングモデルのエネルギーEに対応する。
【0024】
cは、係数である。cは、例えば、計算を実行する前に予め定められる定数であってもよい。また、α(t)は、p(t)とともに増加する係数である。
【0025】
そして、シミュレーテッド分岐アルゴリズムは、p(t)の値を初期値(例えば、0)から所定の値まで増加させた後における第1変数xの符号に基づき、スピンsの値を算出する。シミュレーテッド分岐アルゴリズムは、例えば、x>0の場合にsgn(x)=1、x<0の場合にsgn(x)=-1となる符号関数を用いて、スピンsの値を算出する。
【0026】
(シミュレーテッド分岐アルゴリズムの演算)
シミュレーテッド分岐アルゴリズムは、シンプレクティック・オイラー法を用いて、式(2)、式(3)および式(4)によって与えられる微分方程式を解く。
【0027】
ここで、シンプレクティック・オイラー法を使う場合、式(2)、式(3)および式(4)によって与えられる微分方程式は、式(5)に示すような、離散的な漸化式に書き換えられる。
【数5】
【0028】
tは、時刻を表す。Δtは、時間ステップ(単位時間、時間刻み幅)を表す。
【0029】
シミュレーテッド分岐アルゴリズムを実行する場合、デジタルコンピュータまたはFPGA等の電子回路は、式(5)のアルゴリズムに基づき、それぞれN個ある第1変数xおよび第2変数yを初期時刻から時間ステップ毎に順次に、且つ、第1変数xと第2変数yとを交互に、更新する。そして、デジタルコンピュータまたはFPGA等の電子回路は、終了時刻におけるN個の第1変数xの値を、符号関数を用いて2値化して、N個のスピンの値を出力する。
【0030】
なお、式(5)は、微分方程式との対応関係を示すために、時刻tおよび時間ステップΔtを用いて表されている。ただし、シンプレクティック・オイラー法をデジタルコンピュータまたはFPGA等の電子回路で実行する場合、式(5)を演算するためのアルゴリズムは、明示的なパラメータとして時刻tおよび時間ステップΔtを含まなくてよい。例えば、時間ステップΔtを1とする場合、式(5)を演算するためのアルゴリズムは、時間ステップΔtを含まなくてよい。例えば、明示的なパラメータとして時刻tを含まない場合、式(5)を演算するアルゴリズムは、x(t+Δt)をx(t)の更新後の値として処理を実行する。すなわち、式(5)を演算するアルゴリズムは、“t”を更新前の時間ステップの変数を特定するパラメータ、“t+Δt”を更新後の時間ステップの変数を特定するパラメータとして処理を実行する。
【0031】
図1は、基本的なシミュレーテッド分岐アルゴリズムにより最適化問題を解いた場合における、第1変数xの分岐現象を表す図である。基本的なシミュレーテッド分岐アルゴリズムにより最適化問題を解いた場合、系のパラメータが変化することに伴い、安定運動状態が1個のみの系から、安定運動状態が2個の系へと遷移する分岐現象が生じる。図1に示すように、分岐現象が進むと、第1変数xは、-1または+1の近傍に集中する。
【0032】
ここで、力学系において、複数の振動子のそれぞれの位置および運動量が時間経過に従って変化することは、時間発展と呼ばれる。また、このような時間発展を計算資源でシミュレーションすることは、時間発展シミュレーションと呼ばれる。また、N個の振動子が相互に作用する力学系は、N体振動子系と呼ばれる。シミュレーテッド分岐アルゴリズムは、組合せ最適化問題に対応するイジングスピンモデルの基底状態探索を、N体振動子系の時間発展シミュレーションによって達成する。シュミレーテッド分岐アルゴリズムは、それぞれN個ある第1変数xおよび第2変数yを初期時刻から終了時刻まで時間ステップ毎に順次に、且つ、第1変数xと第2変数yとを交互に、更新する。これにより、シュミレーテッド分岐アルゴリズムは、N体振動子系を時間発展シミュレーションすることができる。
【0033】
また、シュミレーテッド分岐アルゴリズムは、振動子間の相互作用を計算する相互作用演算と、振動子の時間発展を計算する時間発展演算とを実行する。シュミレーテッド分岐アルゴリズムは、初期時刻から終了時刻まで、時間ステップ毎に、相互作用演算と時間発展演算とを実行する。
【0034】
相互作用演算は、式(4)のN個のbを算出する演算である。bを中間変数と呼ぶ。相互作用演算において、i番目の中間変数bを算出するために必要な入力値は、直前の時間ステップにおいて算出されたN個の第1変数xである。
【0035】
時間発展演算は、式(5)のx(t+Δt)およびy(t+Δt)を算出する演算である。時間発展演算において、i番目の第1変数x(t+Δt)およびi番目の第2変数y(t+Δt)を算出するために必要な入力値は、時間発展演算により算出されたi番目の中間変数b、直前の時間ステップにおいて算出されたi番目のx(t)、および、直前の時間ステップにおいて算出されたi番目のy(t)である。
【0036】
なお、シュミレーテッド分岐アルゴリズムは、相互作用演算の前に、時間発展演算の一部が実行してもよい。例えば、シュミレーテッド分岐アルゴリズムは、相互作用演算に先だって、N個の第1変数xのそれぞれに、時間発展演算により乗算される係数が予め乗算されてもよい。例えば、シュミレーテッド分岐アルゴリズムは、定数である-cおよびΔtを予めN個の第1変数xのそれぞれに乗算した後に、相互作用演算を実行してもよい。なお、xに、-c×Δtを乗算した変数を、x´と表す場合がある。x´は、xに係数が乗じられた変数であるので、対応する振動子の位置を表す変数である点においては、xと変わりがない。
【0037】
0-1組合せ最適化問題は、上述のような基本的なシミュレーテッド分岐アルゴリズムに限らず、基本的なシミュレーテッド分岐アルゴリズムを改良したシミュレーテッド分岐アルゴリズムを用いても高速に解くことが可能である。例えば、シミュレーテッド分岐アルゴリズムは、時間ステップ毎の第1変数xと第2変数yとの更新順序を入れ替えたアルゴリズムであってもよい。
【0038】
また、シミュレーテッド分岐アルゴリズムは、1回の時間ステップについての時間発展演算の中において、運動量更新処理と位置更新処理とを所定回交互に実行してもよい。運動量更新処理は、位置を表す第1変数xを入力とするFX関数により、時間ステップより短い微小時間後の運動量の差分δyを算出し、算出した運動量の差分δyにより第2変数yを更新する処理である。位置更新処理は、運動量を表す第2変数yを入力とするFY関数により、微小時間後の位置の差分δxを算出し、算出した位置の差分δxにより第1変数xを更新する処理である。
【0039】
また、シミュレーテッド分岐アルゴリズムは、式(5)のKを0とし、且つ、第1変数xおよび第2変数yの両方または一方の値域を、所定の範囲内(例えば、-1以上、+1以下)に制限して、演算を実行してもよい。また、シミュレーテッド分岐アルゴリズムは、時間ステップ毎の演算において、第1変数xの値を符号関数であるsgn(x)により2値化してもよい。また、シミュレーテッド分岐アルゴリズムは、時間ステップ毎の演算において、第1変数xおよび第2変数yの一方または両方に対して、所定の条件の下で所定の操作(例えば、所定の値を加えたり、所定の値を乗算したり、乱数を加えたり、乱数を乗算したりする操作)を実行してもよい。すなわち、シミュレーテッド分岐アルゴリズムは、時間発展に従って第1変数xに分岐現象の影響が加わるアルゴリズムであって、それぞれN個ある第1変数xおよび第2変数yを初期時刻から終了時刻まで時間ステップ毎に順次に、且つ、第1変数xと第2変数yとを交互に、更新するアルゴリズムであれば、どのようなものであってもよい。
【0040】
(機能ブロック構成)
図2は、本実施形態に係る計算装置10の構成を示す図である。計算装置10は、シュミレーテッド分岐アルゴリズムを用いて、N個の離散変数の最適化問題の解を出力する。
【0041】
計算装置10は、ネットワーク12と、P個の計算コア14と、管理装置16とを備える。Pは、2以上の整数である。すなわち、計算装置10は、複数の計算コア14を備える。
【0042】
ネットワーク12は、P個の計算コア14を接続して、情報を送受信させる。P個の計算コア14のそれぞれは、ハードウェアの計算資源である。P個の計算コア14のそれぞれは、例えば、半導体装置に実装された回路により実現される。P個の計算コア14のそれぞれは、ネットワーク12に接続される。
【0043】
管理装置16は、P個の計算コア14のそれぞれと接続される。管理装置16は、最適化問題を表す情報を外部装置から取得する。管理装置16は、取得した問題を表す情報に基づき、P個の計算コア14のそれぞれに初期情報を設定する。そして、管理装置16は、P個の計算コア14にシュミレーテッド分岐アルゴリズムを並列計算させて最適化問題の解を算出させる。
【0044】
管理装置16からの指示に応じて、P個の計算コア14は、N個の振動子における位置を表すN個の第1変数xおよび運動量を表すN個の第2変数yを、シュミレーテッド分岐アルゴリズムにより、初期時刻から終了時刻まで時間ステップ毎に順次に算出する。P個の計算コア14は、終了時刻におけるN個の第1変数xに基づく値を計算結果として出力する。そして、管理装置16は、P個の計算コア14のそれぞれから計算結果を取得して、計算結果に基づく最適化問題の解を外部装置に出力する。
【0045】
図3は、P個の計算コア14のそれぞれに対する第1変数xおよび第2変数yの割り当てを示す図である。
【0046】
P個の計算コア14のそれぞれは、N個の振動子のうちの一部が排他的に割り当てられる。すなわち、N個の振動子のそれぞれは、P個の計算コア14のうちの何れか1つに割り当てられ、且つ、2以上の計算コア14に割り当てられない。そして、P個の計算コア14のそれぞれは、割り当てられた1または複数の振動子に対応する第1変数xおよび第2変数yを算出する。
【0047】
例えば、図3に示す場合、P個の計算コア14のそれぞれは、(N/P)個の振動子が排他的に割り当てられる。この場合、Pは、Nの約数である。そして、1番目の計算コア14は、x~x(N/P)およびy~y(N/P)を算出する。2番目の計算コア14は、x(N/P)+1~x2×(N/P)およびy(N/P)+1~y2×(N/P)を算出する。P番目の計算コア14は、x(P-1)(N/P)+1~x、および、y(P-1)(N/P)+1~yを算出する。
【0048】
なお、P個の計算コア14のそれぞれは、互いに同一数の振動子が割り当てられていなくてもよい。すなわち、P個の計算コア14のそれぞれは、互いに異なる数の振動子が割り当てられてもよい。
【0049】
本実施形態においては、k番目(kは、1以上、P以下の整数)の計算コア14-kは、M個(Mは、1以上、N未満の整数)の振動子が割り当てられる。なお、P個の計算コア14のそれぞれに同一数の振動子が割り当てられない場合、Mは、計算コア14によって異なる値となる。そして、本実施形態においては、k番目の計算コア14は、時間ステップ毎に、割り当てられたM個の振動子に対応するM個の第1変数xA+1~xA+MおよびM個の第2変数yA+1~yA+Mを算出する。なお、Aは、0以上、(N-M)未満の任意の整数である。
【0050】
また、P個の計算コア14のそれぞれは、割り当てられた振動子に対応する中間変数bを算出するために、相互作用演算により、直前の時間ステップにおけるN個の第1変数xを取得する。このため、P個の計算コア14のそれぞれは、時間ステップ毎に、算出したM個の第1変数xをネットワーク12を介して他の計算コア14に送信する。
【0051】
さらに、P個の計算コア14のそれぞれは、時間ステップ毎に、自身を除く(P-1)個の計算コア14により算出された複数の第1変数xをネットワーク12を介して受信する。なお、P個の計算コア14のそれぞれは、自身において算出したM個の第1変数xを、ネットワーク12から受信してもよいし、ネットワーク12を介さずに自身の内部に形成されたショートカット経路を介して取得してもよい。
【0052】
図4は、P個の計算コア14に設定される結合行列Jを示す図である。
【0053】
P個の計算コア14のそれぞれは、N×N個の結合係数Ji,jのうちの、割り当てられた振動子に対応する中間変数bを算出するために用いられる一部分が設定される。また、さらに、P個の計算コア14のそれぞれは、N個のバイアス係数hのうちの割り当てられた振動子に対応する中間変数bを算出するために用いられる一部分が設定される。
【0054】
例えば、P個の計算コア14のそれぞれは、(N/P=M)個の振動子が排他的に割り当てられるとする。この場合、P個の計算コア14のそれぞれは、結合行列JのうちのN×M個の結合係数Ji,jを含むN×Mの部分行列が設定される。
【0055】
例えば、1番目の計算コア14は、結合行列Jのうちの1行目から(N/P)行目までの(N/P)行×N列の部分行列JG1が設定される。2番目の計算コア14は、結合行列Jのうちの{(N/P)+1}行目から{2×(N/P)}行目までの部分行列JG2が設定される。N番目の計算コア14は、結合行列Jのうちの{(P-1)(N/P)+1}行目からN行目までの部分行列JGPが設定される。
【0056】
なお、図4は、N個のバイアス係数hが全て0であり、P個の計算コア14のそれぞれがバイアス係数hに関する演算を実行しない例を示している。
【0057】
図5は、計算装置10の処理の流れを示すフローチャートである。計算装置10は、例えば、図5に示す流れで処理を実行する。
【0058】
まず、S101において、管理装置16は、0-1組合せ最適化問題を解くためのパラメータを、P個の計算コア14に設定する。具体的には、管理装置16は、結合行列Jおよびバイアス配列hをP個の計算コア14に設定する。この場合において、管理装置16は、P個の計算コア14のそれぞれに対して、結合行列Jのうちの割り当てられた振動子に対応する中間変数bを算出するために用いられる部分行列を設定する。同様に、管理装置16は、P個の計算コア14のそれぞれに対して、バイアス配列hのうちの割り当てられた振動子に対応する中間変数bを算出するために用いられる部分配列を設定する。
【0059】
さらに、管理装置16は、D、c、K、時間ステップを表すΔt、終了時刻を表すT、関数であるp(t)、および、関数であるα(t)をP個の計算コア14のそれぞれに設定する。p(t)およびα(t)は、t=初期時刻(例えば0)で0、t=終了時刻(T)で1となる増加関数である。計算装置10は、D、c、K、Δt、T、p(t)およびα(t)を、外部装置から受け取った値に応じて設定してもよいし、予め決定されており変更できない値を設定してもよい。
【0060】
続いて、S102において、管理装置16は、P個の計算コア14のそれぞれに設定されている変数を初期化する。具体的には、管理装置16は、時間ステップを表す変数であるtを初期時刻(例えば、0)に初期化する。さらに、管理装置16は、N個の第1変数(x(t)~x(t))のそれぞれおよびN個の第2変数(y(t)~y(t))のそれぞれを、外部装置から受け取った初期値、予め定められた固定値、または、乱数に初期化する。なお、N個の第1変数(x(t)~x(t))のそれぞれおよびN個の第2変数(y(t)~y(t))のそれぞれは、P個の計算コア14のうちの割り当てられている計算コア14に対して設定されている。
【0061】
続いて、P個の計算コア14は、S103とS108との間のループ処理を、tがT以上になるまで繰り返す。1回のループ処理において、P個の計算コア14は、対象時刻(t+Δt)におけるN個の第1変数(x(t+Δt)~x(t+Δt))を、直前時刻(t)におけるN個の第1変数(x(t)~x(t))、および、対象時刻(t+Δt)におけるN個の第2変数(y(t+Δt)~y(t+Δt))に基づき算出する。また、1回のループ処理において、P個の計算コア14は、対象時刻(t+Δt)におけるN個の第2変数(y(t+Δt)~y(t+Δt))を、直前時刻(t)におけるN個の第1変数(x(t)~x(t))および直前時刻(t)におけるN個の第2変数(y(t)~y(t))に基づき算出する。
【0062】
なお、直前時刻(t)は、対象時刻(t+Δt)より時間ステップ(Δt)前の時刻である。従って、P個の計算コア14は、S103とS108との間のループ処理を繰り返すことにより、N個の第1変数(x(t)~x(t))およびN個の第2変数(y(t)~y(t))を、初期時刻(t=0)から終了時刻(t=T)まで時間ステップ(Δt)毎に順次に更新することができる。
【0063】
ループ内では、P個の計算コア14は、S104~S107の処理を実行する。
【0064】
S104において、P個の計算コア14は、直前時刻(t)におけるN個の第1変数(x(t)~x(t))をネットワーク12を介して相互に送受信する。すなわち、P個の計算コア14のそれぞれは、自身により算出した、割り当てられた振動子に対応する直前時刻(t)における第1変数xを、ネットワーク12を介して他の計算コア14に送信する。そして、P個の計算コア14のそれぞれは、他の(P-1)個の計算コア14により算出された、直前時刻(t)における第1変数xを、ネットワーク12を介して受信する。なお、P個の計算コア14のそれぞれは、自身により算出した、割り当てられた振動子に対応する直前時刻(t)における第1変数xについては、ネットワーク12を介して受信してもよいし、ネットワーク12を介さずに自身の内部に形成されたショートカット経路を介して取得してもよい。
【0065】
ここで、P個の計算コア14のそれぞれは、N個の第1変数(x(t)~x(t))を一部ずつシーケンシャルに受信する。
【0066】
例えば、N個の第1変数(x(t)~x(t))を送受信する通信期間がP個のタイムスロットに時分割されているとする。この場合、P個の計算コア14のそれぞれは、P個のタイムスロットの何れか1つのタイムスロットに排他的に割り当てられる。そして、複数の計算コア14のそれぞれは、自身に割り当てられたタイムスロットにおいて、自身により算出した第1変数xをネットワーク12を介してブロードキャストする。この場合、P個の計算コア14のそれぞれは、P個のタイムスロットのそれぞれにおいて、送信された所定個の第1変数xを受信する。これにより、P個の計算コア14のそれぞれは、N個の第1変数(x(t)~x(t))を一部ずつシーケンシャルに受信することができる。
【0067】
また、例えば、ネットワーク12がP個の計算コア14をリング形式で接続しているとする。この場合、P個の計算コア14は、リングを巡回させるようにバケツリレー方式で第1変数xを転送する。例えば、P個の計算コア14のそれぞれは、直接接続された第1の計算コア14から送信された第1変数x(t)を受信してバッファリングするとともに、自身がバッファリングしている第1変数x(t)を第1の計算コア14以外の直接接続された第2の計算コア14に送信する。そして、P個の計算コア14のそれぞれは、このような受信処理および送信処理を、N個の全ての第1変数xを受信するまで繰り返す。つまり、N個の第1変数x(t)のそれぞれは、リングを1周回する。これにより、P個の計算コア14のそれぞれは、N個の第1変数(x(t)~x(t))を一部ずつシーケンシャルに受信することができる。
【0068】
続いて、S105において、P個の計算コア14は、相互作用演算を実行する。より詳しくは、P個の計算コア14のそれぞれは、相互作用演算を実行して、割り当てられた振動子に対応する中間変数bを算出する。これにより、P個の計算コア14は、相互作用演算を並列に実行することができる。
【0069】
相互作用演算は、行列乗算処理と、バイアス加算処理とを含む。中間変数bについての行列乗算処理は、N個の第1変数(x(t)~x(t))と、結合行列Jにおける中間変数bに対応する行に含まれるN個の結合係数Ji,1~Ji,Nとを積和演算する処理である。中間変数bについてのバイアス加算処理は、行列乗算の結果に、中間変数bに対応するバイアス係数hを加算する処理である。なお、バイアス係数hが0である場合には、相互作用演算は、バイアス加算処理を含まず、行列乗算処理のみとなる。
【0070】
ここで、P個の計算コア14のそれぞれは、相互作用演算を一部ずつシーケンシャルに実行する。すなわち、P個の計算コア14のそれぞれは、N個の第1変数(x(t)~x(t))のうちの一部ずつ積和演算を繰り返し、繰り返し毎に、積和演算結果を中間変数bに累積加算する。
【0071】
さらに、P個の計算コア14のそれぞれは、シーケンシャルな相互作用演算を、S104の相互送受信の処理にオーバラップさせて実行する。すなわち、P個の計算コア14のそれぞれは、他の(P-1)個の計算コア14により算出された第1変数xの全ての受信が完了する前に、中間変数bの算出を開始する。
【0072】
例えば、P個の計算コア14のそれぞれは、N個の第1変数(x(t)~x(t))の一部を受信する毎に、受信した一部の第1変数x(t)をバッファリングする。続いて、P個の計算コア14のそれぞれは、バッファリングしている一部の第1変数x(t)に対する一部分の相互作用演算を実行し、一部分の相互作用演算結果を対応する中間変数bに格納する。続いて、P個の計算コア14のそれぞれは、次の一部の第1変数x(t)を新たに受信してバッファリングする。続いて、P個の計算コア14のそれぞれは、新たに受信した第1変数x(t)に対して一部分の相互作用演算を実行し、一部分の相互作用演算結果を、中間変数bに累積加算する。P個の計算コア14のそれぞれは、以上の処理をN個の第1変数(x(t)~x(t))の全てについて繰り返す。これにより、P個の計算コア14のそれぞれは、相互作用演算を、S104の相互送受信の処理にオーバラップさせて実行することができる。
【0073】
続いて、S105の処理が完了した後、S106において、P個の計算コア14は、時間発展演算を実行する。より詳しくは、P個の計算コア14のそれぞれは、割り当てられた振動子に対応する、中間変数b、直前時刻における第1変数x(t)および直前時刻における第2変数y(t)を用いて時間発展演算し、対象時刻における第1変数x(t+Δt)および対象時刻における第2変数y(t+Δt)を算出する。
【0074】
続いて、S107において、P個の計算コア14は、直前時刻(t)に時間ステップ(Δt)を加算して、直前時刻(t)および対象時刻(t+Δt)のそれぞれを更新する。
【0075】
続いて、S108において、P個の計算コア14は、S104からS107までの処理を、tが終了時刻(T)に到達するまで繰り返す。そして、P個の計算コア14は、tが終了時刻(T)に到達した場合、S103とS108との間のループ処理を抜ける。
【0076】
続いて、S109において、P個の計算コア14のそれぞれは、自身に割り当てられた振動子に対応する、終了時刻(t=T)における第1変数(x(T))を、管理装置16に送信する。管理装置16は、P個の計算コア14から受信したN個の振動子のそれぞれについて、終了時刻(t=T)における第1変数(x(T))の符号に応じて、対応するスピンの値を算出する。例えば、管理装置16は、終了時刻(t=T)における第1変数(x(T))の符号が負である場合、対応するスピンを-1とし、正である場合、対応するスピンを+1とする。そして、管理装置16は、算出した複数のスピンの値、または、算出した複数のスピンの値を離散変数に変換した値を組合せ最適化問題の解として出力する。
【0077】
以上のS101~S109の処理を実行することにより、計算装置10は、シュミレーテッド分岐アルゴリズムに従った演算を実行して、終了時刻(t=T)におけるN個の第1変数(x(t)~x(t))およびN個の第2変数(y(t)~y(t))を算出することができる。
【0078】
図6は、k番目の計算コア14-kによる第1変数xの受信および相互作用演算のタイミングの第1例を示す図である。
【0079】
リングを巡回させるようにバケツリレー方式でN個の第1変数xを転送する場合、1番目の第1変数xから受信が開始しない計算コア14も存在する。このため、P個の計算コア14の全てが1番目の第1変数xから順に受信するとは限らない。しかし、P個の計算コア14のそれぞれは、結合行列Jに含まれるN×N個の結合係数Ji,jの行列内における配置を、N個の第1変数xを受信する順に対応させて並べ替えて記憶する。これにより、P個の計算コア14のそれぞれは、1番目の第1変数xから受信が開始しない場合であっても、1番目の第1変数xから受信が開始する場合と同様に処理をすることができる。詳細な説明では、1番目の第1変数xから受信が開始しない計算コア14についても、1番目の第1変数xから受信が開始する計算コア14と同様に説明する。
【0080】
例えば、k番目の計算コア14-kは、N個の振動子のうちの(A+1)番目から(A+M)番目までのM個の振動子が割り当てられている。この場合、k番目の計算コア14-kは、相互作用演算により、M個の中間変数bA+1~bA+Mを算出する。
【0081】
例えば、P個の計算コア14のそれぞれは、N個の第1変数xを所定周期毎に1個単位でシーケンシャルに受信する。そして、P個の計算コア14のそれぞれは、受信した第1変数xを一時的にバッファリングする。
【0082】
この場合、k番目の計算コア14-kは、1番目の第1変数xをバッファリングしている期間において、1番目の第1変数xと、結合係数JA+1,1とを乗算して乗算値を算出する。結合係数JA+1,1は、A+1番目の中間変数bA+1と、1番目の第1変数xとに対応する係数である。そして、k番目の計算コア14-kは、乗算値を中間変数bA+1に加算する。
【0083】
k番目の計算コア14-kは、2番目以降の各第1変数xをバッファリングしているそれぞれの周期においても、同様に処理を実行する。そして、k番目の計算コア14-kは、N番目の第1変数xについて処理を完了した後、M個の中間変数bA+1~bA+Mを出力する。なお、M個の中間変数bA+1~bA+Mのそれぞれは、相互作用演算前において0に初期化されている。
【0084】
以上のような処理を実行することにより、k番目の計算コア14-kは、N個の第1変数x~xの受信処理と、相互作用演算とをオーバラップさせて実行することができる。
【0085】
図7は、k番目の計算コア14-kによる第1変数xの受信および相互作用演算のタイミングの第2例を示す図である。
【0086】
例えば、P個の計算コア14のそれぞれは、N個の第1変数x~xを、所定周期毎にL個(Lは、1以上、N未満)単位でシーケンシャルに受信してもよい。そして、P個の計算コア14のそれぞれは、受信したL個の第1変数xのセットを一時的にバッファリングする。
【0087】
この場合、k番目の計算コア14-kは、1番目の第1変数x~L番目の第1変数xを含む1番目のセットをバッファリングしている期間において、1番目の第1変数xと結合係数JA+1,1とを乗算した乗算値と算出する。さらに、k番目の計算コア14-kは、1番目のセットをバッファリングしている期間において、2番目の第1変数xからL番目の第1変数xまでについても、同様に、乗算値を算出する。そして、k番目の計算コア14-kは、算出したL個の乗算値を総加算した値を、中間変数bA+1に加算する。
【0088】
k番目の計算コア14-kは、2番目以降の各セットをバッファリングしているそれぞれの周期においても、同様に処理を実行する。そして、k番目の計算コア14-kは、最後のセットについて処理を完了した後、M個の中間変数bA+1~bA+Mを出力する。
【0089】
以上のような処理を実行することによっても、k番目の計算コア14-kは、N個の第1変数x~xの受信処理と、相互作用演算とをオーバラップさせて実行することができる。
【0090】
図8は、k番目の計算コア14-kの構成を示す図である。k番目の計算コア14-kは、受信回路22と、計算回路24と、送信回路26とを有する。
【0091】
受信回路22は、時間ステップ毎に、P個の計算コア14のうちのk番目の計算コア14-k以外の(P-1)個の計算コア14により算出された、直前の時間ステップにおける(N-M)個の第1変数xを、ネットワーク12を介して一部ずつシーケンシャルに受信する。受信回路22は、時間ステップ毎に、k番目の計算コア14-kにより算出されたM個の第1変数xを含むN個の第1変数xの全てを、ネットワーク12を介して受信してもよい。
【0092】
計算回路24は、時間ステップ毎に、直前の時間ステップにおけるN個の第1変数xに基づき相互作用演算を実行する。これにより、計算回路24は、k番目の計算コア14-kに割り当てられたM個の振動子に対応するM個の中間変数bを算出することができる。さらに、計算回路24は、時間ステップ毎に、相互作用演算を実行して得られたM個の中間変数b、k番目の計算コア14-kに割り当てられたM個の振動子に対応する、直前の時間ステップにおけるM個の第1変数x、および、直前の時間ステップにおけるM個の第2変数yに基づき、時間発展演算を実行する。これにより、計算回路24は、時間ステップ毎に、k番目の計算コア14-kに割り当てられたM個の振動子に対応する、対象の時間ステップにおけるM個の第1変数x、および、対象の時間ステップにおけるM個の第2変数yを算出することができる。
【0093】
送信回路26は、時間ステップ毎に、計算回路24が算出したM個の第1変数xを、ネットワーク12を介してP個の計算コア14のうちのk番目の計算コア14-k以外の(P-1)個の計算コア14に送信する。なお、送信回路26は、時間ステップ毎に、計算回路24が算出したM個の第1変数xを、ネットワーク12を介して、自身であるk番目の計算コア14-kを含むP個の計算コア14に送信してもよい。
【0094】
計算回路24は、係数メモリ32と、第1メモリ34と、第2メモリ36と、相互作用回路38と、時間発展回路40と、転送回路42とを含む。
【0095】
係数メモリ32は、結合行列Jに含まれるN×N個の結合係数Ji,jのうちの、k番目の計算コア14-kに割り当てられたM個の振動子に対応するM個の中間変数bを算出するために用いるM×N個の結合係数Ji,jを含むM×Nの部分行列を記憶する。また、係数メモリ32は、バイアス配列hに含まれるN個のバイアス係数hのうちのk番目の計算コア14-kに割り当てられたM個の振動子に対応するM個の中間変数bを算出するために用いるM個のバイアス係数hを記憶する。係数メモリ32に記憶されるM×N個の結合係数Ji,jを含むM×Nの部分行列およびM個のバイアス係数hは、管理装置16により予め設定される。
【0096】
第1メモリ34は、k番目の計算コア14-kに割り当てられたM個の振動子に対応するM個の第1変数xを記憶する。第1メモリ34に記憶されるM個の第1変数xは、時間ステップ毎に時間発展回路40により更新される。また、第1メモリ34に記憶されるM個の第1変数xは、初期状態においては、予め定められた固定値または乱数に設定される。
【0097】
第2メモリ36は、k番目の計算コア14-kに割り当てられたM個の振動子に対応するM個の第2変数yを記憶する。第2メモリ36に記憶されるM個の第2変数yは、時間ステップ毎に時間発展回路40により更新される。また、第2メモリ36に記憶されるM個の第2変数yは、初期状態においては、予め定められた固定値または乱数に設定される。
【0098】
相互作用回路38は、時間ステップ毎に、係数メモリ32に記憶されたM×N個の結合係数Ji,jを含むM×Nの部分行列、M個のバイアス係数h、および、直前の時間ステップにおけるN個の第1変数xに基づき、k番目の計算コア14-kに割り当てられたM個の振動子に対応するM個の中間変数bを算出する。より詳しくは、相互作用回路38は、時間ステップ毎に、k番目の計算コア14-kにより算出された直前の時間ステップにおけるM個の第1変数x、および、k番目の計算コア14-k以外の(P-1)個の計算コア14により算出された、直前の時間ステップにおける(N-M)個の第1変数xに基づき、k番目の計算コア14-kに割り当てられたM個の振動子に対応するM個の中間変数bを算出する。
【0099】
ここで、相互作用回路38は、時間ステップ毎に、N個の第1変数xを一部ずつシーケンシャルに取得する。そして、相互作用回路38は、時間ステップ毎に、N個の第1変数xに対して一部ずつシーケンシャルに相互作用演算を実行して、M個の中間変数bを算出する。
【0100】
また、相互作用回路38は、中間変数メモリ44を含む。中間変数メモリ44は、N個の第1変数xに対して一部ずつシーケンシャルに相互作用演算を実行している最中における計算途中のM個の中間変数bを記憶する。
【0101】
さらに、相互作用回路38は、時間ステップ毎に、受信回路22が直前の時間ステップの(N-M)個の第1変数xの全ての受信を完了する前に、M個の中間変数bの算出を開始する。これにより、相互作用回路38は、相互作用演算を、受信回路22による(N-M)個の第1変数xの受信処理にオーバラップさせて実行することができる。
【0102】
そして、相互作用回路38は、時間ステップ毎に、相互作用演算が終了した後のM個の中間変数bを時間発展回路40に供給する。
【0103】
時間発展回路40は、時間ステップ毎に、第1メモリ34に記憶された直前の時間ステップにおけるM個の第1変数x、第2メモリ36に記憶された直前の時間ステップにおけるM個の第2変数y、および、相互作用回路38により算出されたM個の中間変数bに基づき、対象の時間ステップにおけるM個の第1変数xおよびM個の第2変数yを算出する。時間発展回路40は、時間ステップ毎に、第1メモリ34に記憶されたM個の第1変数xおよび第2メモリ36に記憶されたM個の第2変数yを更新する。
【0104】
なお、時間発展回路40は、M個の第1変数xおよびM個の第2変数yを複数の回路により並列処理により算出してもよい。例えば、時間発展回路40は、M個の回路によりM並列で、M個の第1変数xおよびM個の第2変数yを算出してもよい。
【0105】
転送回路42は、時間ステップ毎に、P個の計算コア14のうちのk番目の計算コア14-k以外の(P-1)個の計算コア14により算出された、直前の時間ステップにおける(N-M)個の第1変数xを、受信回路22から相互作用回路38へと転送する。なお、受信回路22がk番目の計算コア14-kにより算出されたM個の第1変数xを含むN個の第1変数xを受信する場合には、N個の第1変数xの全てを、受信回路22から相互作用回路38へと転送する。また、受信回路22がk番目の計算コア14-kにより算出されたM個の第1変数xを受信しない場合には、転送回路42は、時間発展回路40により算出されたM個の第1変数xについては、時間発展回路40から相互作用回路38へとショートカットして転送する。
【0106】
また、転送回路42は、時間ステップ毎に、時間発展回路40により算出されたM個の第1変数xを、時間発展回路40から送信回路26へと転送する。
【0107】
図9は、相互作用回路38におけるシーケンシャルな行列乗算処理について説明するための図である。
【0108】
相互作用回路38は、相互作用演算において、N個の第1変数xと、M行×N列の結合行列Jにおける対応する部分行列との行列乗算処理を、時間ステップ毎に、シーケンシャルに実行する。
【0109】
本実施形態においては、相互作用回路38は、転送回路42から、直前の時間ステップのN個の第1変数xを、L個の第1変数xのセット毎にシーケンシャルに取得する(S121)。Lは、1以上、N未満の整数である。例えば、Lは、Nの約数である。例えば、Lは、N/P=Mであってもよい。
【0110】
相互作用回路38は、L個の第1変数xを取得する毎に、予め設定されたM×N個の結合係数を含むM×Nの部分行列のうちの取得したL個の第1変数xに対応するM×L個の結合係数Ji,jと、取得したL個の第1変数xとを、行毎に積和演算する(S122)。そして、相互作用回路38は、L個の第1変数xを取得する毎に、行毎の積和演算の演算結果のそれぞれを、中間変数メモリ44に記憶されたM個の中間変数bのうちの対応する中間変数bに累積加算する(S123)。そして、相互作用回路38は、時間ステップ毎に、N個の第1変数xのうちの最後のL個の第1変数xに対応する積和演算を完了した後に、M個の中間変数bを時間発展回路40に出力する(S124)。これにより、相互作用回路38は、N個の第1変数xに対して一部ずつシーケンシャルに相互作用演算を実行して、M個の中間変数bを算出することができる。
【0111】
時間発展回路40は、相互作用回路38から出力されたM個の中間変数bを取得し、相互作用演算を完了した後のM個の中間変数bを内部のバッファに記憶する。そして、時間発展回路40は、内部のバッファに記憶したM個の中間変数bを用いて、時間発展処理を実行する。なお、相互作用演算を完了した後のM個の中間変数bを記憶するバッファは、相互作用回路38に設けられてもよいし、相互作用回路38と時間発展回路40との間の経路に設けられてもよい。相互作用演算を完了した後のM個の中間変数bを記憶するバッファが計算回路24に設けられることにより、相互作用回路38は、次の時間ステップにおけるM個の中間変数bを算出するための相互作用演算を、直前の時間ステップにおける相互作用演算を完了した後に直ぐに開始することができる。
【0112】
なお、相互作用回路38は、時間ステップ毎に、最初のL個の第1変数xを用いた演算を開始する前に、中間変数メモリ44に記憶されているM個の中間変数bを消去する。すなわち、相互作用回路38は、最初のL個の第1変数xを用いた演算を開始する前に、M個の中間変数bの値を0とする。これにより、相互作用回路38は、正しい値を中間変数メモリ44に記憶させることができる。
【0113】
さらに、相互作用回路38は、時間ステップ毎に、受信回路22が直前の時間ステップの(N-M)個の第1変数xの全ての受信を完了する前に、直前の時間ステップのN個の第1変数xのうちの最初のL個の第1変数xを用いた演算を開始する。これにより、相互作用回路38は、相互作用演算を、受信回路22による(N-M)個の第1変数xの受信処理にオーバラップさせて実行することができる。
【0114】
以上のようなP個の計算コア14のそれぞれの計算時間は、計算資源によって決まる。また、受信および送信のための通信時間は、通信スループット、および、単位時間当たりのデータ転送量である通信レイテンシによって決まる。計算時間および通信時間のそれぞれが一定であるとした場合、P個の計算コア14のそれぞれの総計算時間は、計算時間と通信時間とが重複している時間が長い程、短くなる。
【0115】
本実施形態において、P個の計算コア14のそれぞれは、他の計算コア14により算出された直前の時間ステップの(N-M)個の第1変数xの全ての受信を完了する前に、相互作用回路38が相互作用演算を開始する。そして、P個の計算コア14のそれぞれは、受信処理と、相互作用演算とをオーバラップさせて実行する。従って、本実施形態に係る計算装置10は、通信オーバーヘッドによるP個の計算コア14のそれぞれの総計算時間の長期化を防ぐことができる。これにより、本実施形態に係る計算装置10は、大規模な最適化問題を高速に解くことができる。
【0116】
特に、相互作用演算の処理時間が、通信時間よりも長い場合、本実施形態に係る計算装置10は、計算コア14の総動作時間に対する通信時間の影響を完全に排除することができる。
【0117】
図10は、P個の計算コア14を接続するネットワーク12の第1例を示す図である。ネットワーク12は、例えば、クロスバーネットワークであってもよい。また、ネットワーク12は、共有バスであってもよい。これにより、P個の計算コア14のそれぞれは、ネットワーク12を介して、P個の計算コア14のそれぞれに第1変数xをブロードキャスト送信することができる。すなわち、P個の計算コア14のそれぞれは、P個の計算コア14のそれぞれから、他の計算コア14を介さずに第1変数xを直接受信することができる。
【0118】
なお、ネットワーク12は、イーサーネットスイッチおよびInfin Bandスイッチ等を含んでもよい。ネットワーク12は、ルータまたは分配装置等を有してもよい。この場合、ルータまたは分配装置等は、P個の計算コア14のそれぞれから送信された第1変数xを一時的にバッファリングし、バッファリングしている第1変数xをP個の計算コア14へブロードキャスト送信することができる。
【0119】
なお、ネットワーク12は、P個の計算コア14のそれぞれに第1変数xをブロードキャスト送信することができれば、クロスバーネットワークまたは共有バスに限らず他の方式のネットワークであってもよい。例えば、ネットワーク12は、P個の計算コア14のそれぞれを互いに接続する配線であってもよい。この場合、ネットワーク12は、計算コア14間の通信レイテンシを非常に小さくすることができる。
【0120】
図11は、第1例のネットワーク12により接続された場合のP個の計算コア14のそれぞれの第1変数xの送信タイミングを示す図である。
【0121】
ネットワーク12がP個の計算コア14のそれぞれがブロードキャスト送信をすることができるクロスバーネットワークまたは共有バス等である場合、N個の第1変数xが送受信される通信期間は、複数のタイムスロットに分割される。P個の計算コア14のそれぞれは、複数のタイムスロットのうちの1つのタイムスロットが排他的に割り当てられる。そして、P個の計算コア14のそれぞれの送信回路26は、割り当てられたタイムスロットにおいて、算出したM個の第1変数xを、ネットワーク12を介してP個の計算コア14のそれぞれにブロードキャスト送信する。なお、送信回路26は、割り当てられたタイムスロットにおいて、算出したM個の第1変数xを、P個の計算コア14のうちの自身を除く(P-1)個の計算コア14に、ブロードキャスト送信してもよい。
【0122】
このように、ネットワーク12がP個の計算コア14のそれぞれがブロードキャスト送信をすることができるクロスバーネットワーク等である場合、時間ステップ毎のN個の第1変数xのそれぞれは、通信期間を分割した複数のタイムスロットのうちの1つのタイムスロットに割り当てられ、割り当てられたタイムスロットにおいてネットワーク12を介して送信される。従って、P個の計算コア14のそれぞれは、(N-M)個の第1変数x、または、N個の第1変数xを一部ずつシーケンシャルに受信することができる。
【0123】
図12は、P個の計算コア14を接続するネットワーク12の第2例を示す図である。ネットワーク12は、P個の計算コア14をリング形式で接続するリングネットワークであってもよい。これにより、ネットワーク12は、P個の計算コア14のそれぞれが算出した第1変数xを、巡回的にP個の計算コア14の全てに転送することができる。
【0124】
ネットワーク12がリングネットワークである場合、P個の計算コア14は、時間ステップ毎のN個の第1変数xが送受信される通信期間において、N個の第1変数xを一部ずつバケツリレー方式で送受信する。
【0125】
例えば、ネットワーク12がリングネットワークである場合、P個の計算コア14のそれぞれの受信回路22は、通信期間において、N個の第1変数xのうちの自身が算出したM個の第1変数xを除く(N-M)個の第1変数xを、P個の計算コア14のうちの隣接する第1の計算コア14から一部ずつ受信する。なお、P個の計算コア14のそれぞれの受信回路22は、通信期間において、自身が算出したM個の第1変数xを含むN個の第1変数xの全部を、隣接する第1の計算コア14から受信してもよい。
【0126】
ネットワーク12がリングネットワークである場合、さらに、P個の計算コア14のそれぞれの送信回路26は、通信期間において、自身が算出したM個の第1変数xを、P個の計算コア14のうちの第1の計算コア14とは異なる隣接する第2の計算コア14に送信する。さらに、P個の計算コア14のそれぞれの送信回路26は、通信期間において、第1の計算コア14から受信した(N-M)個の第1変数xを第2の計算コア14に送信する。なお、P個の計算コア14のそれぞれの送信回路26は、通信期間において、第2の計算コア14が算出した第1変数xを受信した場合には、第2の計算コア14が算出した第1変数xを第2の計算コア14に送信してもよいし、送信しなくてもよい。
【0127】
このようなネットワーク12は、P個の計算コア14のそれぞれから送信された第1変数xを1周回させることにより、P個の計算コア14のそれぞれにN個の第1変数xを受信させることができる。このように送信することによって、P個の計算コア14のそれぞれは、(N-M)個の第1変数x、または、N個の第1変数xを一部ずつシーケンシャルに受信することができる。
【0128】
図13は、P個の計算コア14を接続するネットワーク12の第3例を示す図である。ネットワーク12は、P個の計算コア14をリング形式で接続する複数のリングネットワークであってもよい。
【0129】
例えば、ネットワーク12は、第1のリングネットワークと、第2のリングネットワークとを含んでもよい。この場合、P個の計算コア14のそれぞれは、全二重通信を行う。
【0130】
第1のリングネットワークは、P個の計算コア14をリング状の第1経路に沿って接続し、データを第1経路の第1方向に巡回的に転送する。第2のリングネットワークは、P個の計算コア14を第1経路に沿って接続し、データを第1経路の第1方向とは逆方向の第2方向に巡回的に転送する。
【0131】
第1のリングネットワークおよび第2のリングネットワークは、互いに同一の第1変数xを転送する。これに代えて、第1のリングネットワークおよび第2のリングネットワークは、一方が、N個の第1変数xのうちの一部である第1変数グループを転送し、他方が、N個の第1変数xのうちの第1変数グループ以外の第2変数グループを転送してもよい。
【0132】
このようなネットワーク12により接続されることにより、P個の計算コア14は、第2例と比較して通信スループットを速くすることができる。P個の計算コア14は、N個の第1変数xの送信を開始してから、N個の第1変数xの全ての送信を完了するまでの期間を短くすることができる。また、第1のリングネットワークおよび第2のリングネットワークが互いに同一のN個の第1変数xを転送した場合、P個の計算コア14は、少ないホップ数でN個の第1変数xの全ての転送を完了することができる。
【0133】
図14は、P個の計算コア14を接続するネットワーク12の第4例を示す図である。ネットワーク12は、P個の計算コア14をリング形式で接続する3以上のリングネットワークを含む構成であってもよい。例えば、ネットワーク12は、図13に示すように、二次元トーラス状の複数のリングネットワークにより接続してもよい。
【0134】
この場合、P個の計算コア14は、縦方向のリングネットワークで隣接する計算コア14に所定個の第1変数xを送信した後、横方向のリングネットワークでリングの1周分巡回的に所定個の第1変数xを送信する処理を繰り返す。
【0135】
このようなネットワーク12により接続されることにより、P個の計算コア14のそれぞれは、他の計算コア14により算出された第1変数xを少ないホップ数で受信することができる。従って、このようなネットワーク12により接続されることにより、P個の計算コア14は、少ないホップ数でN個の第1変数xの全ての転送を完了することができる。
【0136】
図15は、第1例の転送回路42を含む計算コア14の構成を示す図である。例えば、ネットワーク12がクロスバーネットワークまたは共有バス等であって、P個の計算コア14のそれぞれが算出した第1変数xをマルチキャスト送信する場合、転送回路42は、図15に示す第1例の構成であってもよい。すなわち、転送回路42は、受信回路22が受信したN個の第1変数xを相互作用回路38へと直接転送し、時間発展回路40により算出されたM個の第1変数xを送信回路26へと直接転送する構成であってもよい。
【0137】
この場合、受信回路22は、自身の時間発展回路40により算出されたM個の第1変数xを含むN個の第1変数xをネットワーク12を介して受信する。そして、相互作用回路38は、直前の時間ステップのN個の第1変数xの全てを受信回路22からシーケンシャルに取得する。
【0138】
図16は、第2例の転送回路42を含む計算コア14の構成を示す図である。例えば、ネットワーク12がクロスバーネットワークまたは共有バス等であって、P個の計算コア14のそれぞれが算出した第1変数xをマルチキャスト送信する場合、転送回路42は、図16に示す第2例の構成であってもよい。すなわち、転送回路42は、第1マルチプレクサ46を含む構成であってもよい。第1マルチプレクサ46は、時間ステップ毎に、時間発展回路40により算出されたM個の第1変数xと、受信回路22により受信された(N-M)個の第1変数xとを時間多重化して、相互作用回路38に供給する。さらに、第2例の転送回路42は、時間発展回路40により算出されたM個の第1変数xを送信回路26にも転送する。
【0139】
例えば、第1マルチプレクサ46は、(N-M)個の第1変数xのうちの最初の第1変数xが受信回路22により受信される前に、時間発展回路40により算出されたM個の第1変数xを相互作用回路38に転送する。このような転送回路42は、相互作用回路38の演算開始までの時間を短くすることができる。これにより、このような転送回路42は、相互作用回路38が演算を完了する時刻を早くすることができる。
【0140】
図17は、第3例の転送回路42を含む計算コア14の構成を示す図である。例えば、ネットワーク12がリングネットワークであって、P個の計算コア14がバケツリレー方式でN個の第1変数xを送受信する場合、転送回路42は、図17に示す第3例の構成であってもよい。すなわち、転送回路42は、第2マルチプレクサ48を含む構成であってもよい。第2マルチプレクサ48は、時間ステップ毎に、時間発展回路40により算出されたM個の第1変数xと、受信回路22により受信された(N-M)個の第1変数xとを時間多重化して、送信回路26に供給する。さらに、第3例の転送回路42は、受信回路22により受信されたN個の第1変数xを相互作用回路38へと直接転送する。
【0141】
この場合、受信回路22は、自身の時間発展回路40により算出されたM個の第1変数xを含むN個の第1変数xをネットワーク12を介して受信する。そして、相互作用回路38は、直前の時間ステップのN個の第1変数xの全てを受信回路22からシーケンシャルに取得する。
【0142】
図18は、第4例の転送回路42を含む計算コア14の構成を示す図である。例えば、ネットワーク12がリングネットワークであって、P個の計算コア14がバケツリレー方式でN個の第1変数xを送受信する場合、転送回路42は、図18に示す第4例の構成であってもよい。すなわち、転送回路42は、第3マルチプレクサ50を含む構成であってもよい。第3マルチプレクサ50は、時間ステップ毎に、時間発展回路40により算出されたM個の第1変数xと、受信回路22により受信された(N-M)個の第1変数xとを時間多重化して、送信回路26および相互作用回路38の両方に供給する。
【0143】
例えば、第3マルチプレクサ50は、(N-M)個の第1変数xの最初の第1変数xが受信回路22により受信される前に、時間発展回路40により算出されたM個の第1変数xを相互作用回路38に転送開始する。このような転送回路42は、相互作用回路38の演算開始までの時間を短くすることができる。これにより、このような転送回路42は、相互作用回路38が演算を完了する時刻を早くすることができる。
【0144】
図19は、第3例の転送回路42を含む2つの計算コア14のそれぞれの処理タイミングを示す図である。図20は、第3例の転送回路42を含む1つの計算コア14の詳細な処理タイミングを示す図である。なお、図19は、全ての計算コア14が同一のタイミングで動作する例を示しているが、計算コア14毎に動作するタイミングがずれていてもよい。図20のタイミングチャートは、計算コア14内におけるデータ移動のためのレイテンシ、受信回路22をデータが通過するためのレイテンシおよび送信回路26をデータが通過するためのレイテンシが0であるとして、タイミングを記載している。
【0145】
図19および図20に示されるように、受信回路22は、N個の第1変数xをM個(ここでは、M=L=N/P)毎に、ネットワーク12を介してシーケンシャルに受信する。そして、受信回路22は、受信したM個の第1変数xを一時的にバッファリングして、相互作用回路38へと出力する。そして、相互作用回路38は、受信回路22から、N個の第1変数xをM個毎にシーケンシャルに取得する。
【0146】
相互作用回路38は、N個の第1変数xを全て受信した後に、算出したM個の中間変数bを時間発展回路40へと出力する。そして、時間発展回路40は、M個の第1変数xを算出した後に、算出したM個の第1変数xを送信回路26に出力する。送信回路26は、時間発展回路40から受け取ったM個の第1変数xを隣接する計算コア14にネットワーク12を介して送信する。
【0147】
さらに、送信回路26は、受信回路22がM個の第1変数xを受信した場合、受信したM個の第1変数xを受け取り、受け取ったM個の第1変数xを隣接する計算コア14に送信する。これにより、P個の計算コア14は、バケツリレー方式でN個の第1変数xを送受信することができる。
【0148】
ここで、計算コア14が第3例の転送回路42を含む場合、受信回路22は、時間発展回路40により算出されたM個の第1変数xがネットワーク12を介して送信されてから、計算コア14間の通信レイテンシを経過した後に、最初のM個の第1変数xを受信する。
【0149】
そして、計算コア14が第3例の転送回路42を含む場合、相互作用回路38は、時間ステップ毎の処理において、計算コア14間の通信レイテンシを経過した後に、最初のM個の第1変数xに対する相互作用演算を開始する。
【0150】
なお、LCOMMは、計算コア14間の通信レイテンシを表す。LJXは、N個の第1変数xの全ての取得が完了してから、相互作用回路38がM個の中間変数bが出力するまでの時間を表す。LTEは、相互作用回路38がM個の中間変数bを出力してから、時間発展回路40がM個の第1変数xが出力するまでの時間を表す。Pは、時間発展回路40がM個の中間変数bを取得してからM個の第1変数xが出力するまで、および、受信回路22が最初のN個の第1変数xを取得してから相互作用回路38がM個の中間変数bを出力するまでの処理速度を表す。
【0151】
図21は、第4例の転送回路42を含む2つの計算コア14のそれぞれの処理タイミングを示す図である。図22は、第4例の転送回路42を含む1つの計算コア14の詳細な処理タイミングを示す図である。なお、図21は、全ての計算コア14が同一のタイミングで動作する例を示しているが、計算コア14毎に動作するタイミングがずれていてもよい。図22のタイミングチャートは、計算コア14内におけるデータ移動のためのレイテンシ、受信回路22をデータが通過するためのレイテンシおよび送信回路26をデータが通過するためのレイテンシが0であるとして、タイミングを記載している。
【0152】
第4例の転送回路42を計算コア14が含む場合、相互作用回路38は、時間発展回路40が出力されたM個の第1変数xを、直接、時間発展回路40から取得する。
【0153】
従って、相互作用回路38は、時間ステップ毎の処理において、隣接する計算コア14から最初のM個の第1変数xを受信するよりも前に、時間発展回路40が出力されたM個の第1変数xに対して、演算処理を開始することができる。また、受信回路22は、内部にバッファを有し、相互作用回路38による直前のM個の第1変数xに対する相互作用演算が完了するまで、受信したM個の第1変数xをバッファリングする。
【0154】
このような、第4例の転送回路42を含む計算コア14は、第3例の転送回路42を含む場合と比較して、1回の時間ステップの処理時間を短くすることができる。
【0155】
図23は、第4例の転送回路42を含む計算コア14の処理の流れを示した疑似コード52を示す図である。図24は、疑似コード52に従って処理を実行する場合の計算コア14の処理の流れを示すフローチャートである。
【0156】
第4例の転送回路42を含む場合、計算コア14は、図23および図24に示す処理を実行する。
【0157】
なお、疑似コード52およびフローチャートにおいて、tは、時間を表す変数である。Δtは、時間ステップを表す定数である。iは、N個の振動子のうち、計算コア14に割り当てられたM個の振動子を識別するインデックスである。jは、N個の振動子を識別するインデックスである。
【0158】
は、中間変数メモリ44に格納され、相互作用演算の計算途中の中間変数である。b´は、相互作用回路38、時間発展回路40、または、相互作用回路38と時間発展回路40と間に設けられるバッファに格納され、相互作用演算の最終的な演算結果である中間変数である。
【0159】
は、第1変数である。x´は、xに、(Δt×c)の定数を乗じた第1変数である。yは、第2変数である。なお、疑似コード52に従った処理を実行する場合、P個の計算コア14のそれぞれは、他の計算コア14にネットワーク12を介してx´を送信する。
【0160】
まず、S201において、計算コア14は、パラメータを初期化する。S201は、疑似コード52の1行目から6行目までの処理に対応する。具体的には、1行目において、計算コア14は、tを0とする。2行目において、計算コア14は、NをPで除算することにより、計算コア14により割り当てられる仮想的な振動子の個数を表すMを算出する。3行目から6行目において、計算コア14は、M個のb1~、および、M個のb´1~b´のそれぞれを、0に初期化する。
【0161】
続いて、計算コア14は、S202とS214との間のループを実行する。S202とS214との間のループは、疑似コード52の7行目および31行目に対応する。具体的には、計算コア14は、最初のループにおいて、繰り返し数を表す変数であるncycleに0を代入し、繰り返しをする毎にncycleに1を加算し、ncycleが予め設定された繰り返し回数を表すNstep以上になった場合に、ループを抜ける。
【0162】
続いて、S202とS214との間のループ内において、計算コア14は、S203とS211との間のループを実行する。S203とS211との間のループ処理は、疑似コード52の8行目および25行目に対応する。具体的には、計算コア14は、最初のループにおいてjに1を代入し、繰り返しをする毎にjに1を加算し、jがNより大きくなった場合に、ループを抜ける。
【0163】
S203とS211との間のループ内では、まず、S204において、計算コア14は、時間発展回路40がx´を出力中であるか否かを判断する。S204は、疑似コード52の9行目に対応する。具体的には、計算コア14は、jがMより大きいか否かを判断する。
【0164】
時間発展回路40がx´を出力中でない場合(S204のNo)、S205において、計算コア14は、x´を受信する。S205は、疑似コード52の16行目に対応する。具体的には、計算コア14は、x´に受信回路22が受信した値を代入する。
【0165】
時間発展回路40がxを出力中である場合(S204のYes)、S206およびS207の処理を実行する。S206において、計算コア14は、yにb´を加算する。S206は、疑似コード52の11行目に対応する。
【0166】
S207において、時間発展回路40は、y、xおよびx´を更新する。S206は、疑似コード52の12行目、13行目および14行目に対応する。12行目において、時間発展回路40は、xによりyを更新するFX関数により、yを更新する。13行目において、時間発展回路40は、yによりxを更新するFY関数により、xを更新する。14行目において、時間発展回路40は、xにdt×cを乗算してx´を算出する。
【0167】
S205またはS207の処理に続いて、計算コア14は、S208と、S209~S210とを並行に実行する。S208において、計算コア14は、i=1からi=Mまでのそれぞれについて、S205において受信したx´に対して対応する結合係数Ji,jを乗算して、対応するbに累積加算する。S208は、疑似コード52の18行目から21行目に対応する。具体的には、計算コア14は、18行目においてiに1を代入し、累積加算を実行する毎にiに1を加算し、iがMより大きくなった場合に、累積加算処理を終了する。
【0168】
S209において、計算コア14は、x´の送信先である隣接する計算コア14に、x´が届いているか否かを判断する。x´が届いていない場合(S209のNo)、S210において、計算コア14は、x´を隣接する計算コア14に送信する。届いている場合(S209のYes)、計算コア14は、S210の処理をスキップする。S209~S210は、疑似コード52の22行目から24行目に対応する。具体的には、計算コア14は、jがM×(P-1)より大きい場合、x´を隣接する計算コア14に送信する。
【0169】
S203とS211との間のループを終了した場合、計算コア14は、処理をS212に進める。S212において、計算コア14は、tにΔtを加算して、tを更新する。S212は、疑似コード52の26行目に対応する。
【0170】
続いて、S213において、計算コア14は、M個のb´のそれぞれおよびM個のbのそれぞれを更新する。S213は、疑似コード52の27行目から29行目に対応する。具体的には、計算コア14は、i=1からi=Mまでのそれぞれについて、b´にbを代入し、続いて、bに0を代入する。これにより、計算コア14は、中間変数メモリ44に記憶されている値を、相互作用演算の最終的な演算結果である中間変数b´を記憶するバッファに、転送することができる。
【0171】
そして、計算コア14は、S202とS214との間のループを、Nstep回繰り返した後、本フローを終了する。
【0172】
図25は、第1例に係る相互作用回路38の構成を示す図である。第1例に係る相互作用回路38は、P個の計算コア14のそれぞれが、N個の第1変数x~xを、L個の第1変数x(Lは、1以上、N未満)毎にシーケンシャルに受信する場合の構成である。第2例および第3例に係る相互作用回路38以降も同様である。
【0173】
なお、第1例から第3例に係る相互作用回路38は、相互作用演算として、行列乗算処理を実行し、バイアス加算処理については実行しない構成となっている。すなわち、第1例から第3例に係る相互作用回路38は、中間変数bにバイアス係数hを加算しない構成となっている。
【0174】
第1例に係る相互作用回路38は、M個の積和回路60-1~60-Mと、M個の累和回路62-1~62-Mと、集約回路64と、を有する。
【0175】
M個の積和回路60-1~60-Mのそれぞれは、計算コア14に割り当てられているM個の振動子に一対一に対応する。M個の積和回路60-1~60-Mのそれぞれは、L個の乗算器66と、第1加算器68とを含む。L個の乗算器66のそれぞれは、相互作用回路38がL個の第1変数x~xのセットを取得する毎に、L個の第1変数x~xのうちの対応する1つの第1変数xと、係数メモリ32に記憶された結合行列Jに含まれる対応する結合係数Ji,jとを乗算する。第1加算器68は、L個の乗算器66の全ての乗算結果を加算する。そして、第1加算器68は、L個の乗算器66の全ての乗算結果を加算した積和値を出力する。
【0176】
なお、第1例に係るM個の積和回路60-1~60-Mのそれぞれは、L個の第1変数x~xに対する積和演算を1クロックで実行する構成となっているが、このような構成に限られない。例えば、第1例に係るM個の積和回路60-1~60-Mのそれぞれは、複数のクロックでL個の第1変数x~xに対する積和演算を実行する回路であってもよい。
【0177】
M個の累和回路62-1~62-Mのそれぞれは、計算コア14に割り当てられているM個の振動子に一対一に対応する。M個の累和回路62-1~62-Mのそれぞれは、第2加算器70と、レジスタ72とを含む。M個の累和回路62-1~62-Mのそれぞれは、L個の第1変数x~xのセットを取得する毎に、M個の積和回路60-1~60-Mのうちの対応する1つの積和回路60から積和値を取得する。第2加算器70は、対応する積和回路60から積和値を取得する毎に、取得した積和値と、レジスタ72に格納された値とを加算して、再度、レジスタ72に書き込む。レジスタ72は、値を記憶し、対応する積和回路60から積和値を取得する毎に、記憶した値が更新される。
【0178】
M個の累和回路62-1~62-Mのそれぞれに含まれるレジスタ72は、中間変数メモリ44として機能する。すなわち、本例において、中間変数メモリ44は、M個のレジスタ72を含む。そして、M個の累和回路62-1~62-Mのそれぞれに含まれるレジスタ72は、N個の第1変数xに対して一部ずつシーケンシャルに相互作用演算を実行している最中において算出される計算途中のM個の中間変数bを記憶する。
【0179】
集約回路64は、N個の第1変数xの全てに対する演算が完了した後、中間変数メモリ44として機能するM個のレジスタ72に記憶された値を読み出して、M個の中間変数b1~として時間発展回路40に供給する。この場合において、集約回路64は、時間ステップ毎に、中間変数メモリ44として機能するM個のレジスタ72に記憶されたM個の中間変数b1~のそれぞれを、時分割で集約して時間発展回路40に供給する。
【0180】
なお、時間発展回路40が複数の回路により並列演算がされる場合、相互作用回路38は、複数の集約回路64が設けられてもよい。この場合、複数の集約回路64のそれぞれは、M個の中間変数b1~のうち、対応する一部の中間変数bを選択して、時間発展回路40に含まれる複数の回路のうちの回路へと供給する。
【0181】
図26は、図25に示した第1例に係る相互作用回路38の演算処理内容を示す図である。図25に示した構成の第1例に係る相互作用回路38は、L個の第1変数xを取得する毎に、予め設定されたM行×N列の係数のうちの取得したL個の第1変数xに対応するM行×L列の部分行列と、取得したL個の第1変数xとを、行毎に積和演算することができる。
【0182】
そして、第1例に係る相互作用回路38は、L個の第1変数xを取得する毎に、積和値を累積加算する。これにより、第1例に係る相互作用回路38は、N個の第1変数xに対して、L個毎にシーケンシャルに積和演算を実行している最中において算出される計算途中のM個の中間変数bを、中間変数メモリ44に記憶させることができる。
【0183】
図27は、第2例に係る相互作用回路38の構成を示す図である。第2例に係る相互作用回路38は、(M/2)個の積和回路60-1~60-M/2と、(M/2)個の累和回路62-1~62-(M/2)と、集約回路64と、を有する。
【0184】
(M/2)個の積和回路60-1~60-M/2のそれぞれは、計算コア14に割り当てられているM個の振動子のうちの2つが排他的に対応する。
【0185】
(M/2)個の積和回路60-1~60-M/2のそれぞれは、第1例に係る積和回路60と同様の構成である。ただし、(M/2)個の積和回路60-1~60-M/2のそれぞれは、L個の第1変数x~xのセットを取得する毎に、2つの積和値を順次に出力する。具体的には、(M/2)個の積和回路60-1~60-M/2のそれぞれは、1サイクル目において、L個の第1変数x~xと、結合行列Jにおける対応する2つの振動子のうちの一方に対応する行に含まれるL個の結合係数Ji,jとを積和演算する。(M/2)個の積和回路60-1~60-M/2のそれぞれは、2サイクル目において、L個の第1変数x~xと、結合行列Jにおける対応する2つの振動子のうちの他方に対応する行に含まれるL個の結合係数Ji,jとを積和演算する。
【0186】
(M/2)個の累和回路62-1~62-M/2のそれぞれは、計算コア14に割り当てられているM個の振動子のうちの2つが排他的に対応する。
【0187】
(M/2)個の累和回路62-1~62-M/2のそれぞれは、第2加算器70と、第1のレジスタ72-1と、第2のレジスタ72-2とを含む。(M/2)個の積和回路60-1~60-M/2のそれぞれは、L個の第1変数x~xのセットを取得する毎に、(M/2)個の積和回路60-1~60-M/2のうちの対応する1つの積和回路60から、2つの積和値を順次に取得する。1サイクル目において、第2加算器70は、取得した積和値と、第1のレジスタ72-1に格納された値とを加算して、再度、第1のレジスタ72-1に書き込む。2サイクル目において、第2加算器70は、取得した積和値と、第2のレジスタ72-2に格納された値とを加算して、再度、第2のレジスタ72-2に書き込む。
【0188】
(M/2)個の累和回路62-1~62-M/2のそれぞれに含まれる第1のレジスタ72-1および第2のレジスタ72-2は、中間変数メモリ44として機能する。
【0189】
集約回路64は、N個の第1変数xの全てに対する演算が完了した後、中間変数メモリ44として機能する第1のレジスタ72-1および第2のレジスタ72-2に記憶された値を読み出して、M個の中間変数b1~として時間発展回路40に供給する。
【0190】
図28は、図27に示した第2例に係る相互作用回路38の演算処理内容を示す図である。図27に示した構成の第2例に係る相互作用回路38は、L個の第1変数xを取得する毎に、2サイクルの積和演算処理を実行する。相互作用回路38は、それぞれのサイクルにおいて、予め設定されたM行×N列の係数のうちの取得したL個の第1変数xに対応する(M/2)行×L列の部分行列と、取得したL個の第1変数xとを、行毎に積和演算することができる。
【0191】
そして、第2例に係る相互作用回路38は、L個の第1変数xを取得する毎に、2つの積和値をそれぞれ異なる中間変数bとして累積加算する。そのため、第2例に係る相互作用回路38は、N個の第1変数xに対して、L個毎にシーケンシャルに積和演算を実行している最中において算出される計算途中のM個の中間変数bを、中間変数メモリ44に記憶させる。
【0192】
なお、第2例に係る相互作用回路38は、(M/2)個の積和回路60-1~60-M/2および(M/2)個の累和回路62-1~62-M/2を有する構成であったが、(M/4)個の積和回路60-1~60-M/4および(M/4)個の累和回路62-1~62-M/4を有する構成であってもよい。この場合、(M/4)個の積和回路60-1~60-M/4のそれぞれは、L個の第1変数xを取得する毎に、4サイクルの積和演算処理を実行する。また、この場合、(M/4)個の累和回路62-1~62-M/4のそれぞれは、第1のレジスタ72-1から第4のレジスタ72-4を含む。また、相互作用回路38は、他の個数の積和回路60および累和回路62を有する構成であってもよい。
【0193】
図29は、第3例に係る相互作用回路38の構成を示す図である。第3例に係る相互作用回路38は、M個の積和回路60-1~60-Mと、M個の累和回路62-1~62-Mと、を有する。第3例に係る相互作用回路38は、第1例に係る相互作用回路38と比較して集約回路64を有さない構成である。
【0194】
第3例において、M個の累和回路62-1~62-Mに含まれるM個のレジスタ72は、直列に接続される。そして、M個のレジスタ72は、記憶している値を直列方向に隣接するレジスタ72に転送するシフトレジスタとして機能する。
【0195】
そして、N個の第1変数xの全てに対する演算が完了した後、相互作用回路38は、M個のレジスタ72をシフトレジスタとして機能させて、M個の中間変数b1~をシーケンシャルに時間発展回路40に供給する。
【0196】
なお、M個のレジスタ72は、複数列に配列されて列毎に接続されてもよい。この場合、M個のレジスタ72は、記憶している値を、列毎に直列方向に隣接するレジスタに転送する複数のシフトレジスタとして機能する。そして、N個の第1変数xの全てに対する演算が完了した後、相互作用回路38は、M個のレジスタ72を複数のシフトレジスタとして機能させて、M個の中間変数b1~を所定数の並列度でシーケンシャルに時間発展回路40に供給する。
【0197】
このような第3例に係る相互作用回路38は、相互作用演算が完了した後のM個の中間変数b1~を順次に時間発展回路40に供給することができる。なお、相互作用回路38は、第2例における(M/2)個の累和回路62-1~62-M/2のそれぞれに含まれる第1のレジスタ72-1および第2のレジスタ72-2が全て直列に接続されてシフトレジスタとして機能する構成であってもよい。
【0198】
図30は、時間発展回路40の構成を第1メモリ34および第2メモリ36とともに示す図である。
【0199】
時間発展回路40は、バッファ回路82と、前段処理回路84と、関数演算回路86と、後段処理回路88とを有する。
【0200】
バッファ回路82は、時間ステップ毎に、相互作用回路38から出力されたM個の中間変数bを取得して、記憶する。バッファ回路82は、時間発展回路40の外部に設けられていてもよいし、相互作用回路38の出力段に設けられてもよい。
【0201】
前段処理回路84は、時間ステップ毎に、バッファ回路82に記憶されたM個の中間変数bのそれぞれに対して所定の演算処理を実行する。例えば、前段処理回路84は、M個の中間変数bのそれぞれに対して係数を乗じたり、定数を加減算したりする。M個の中間変数bのそれぞれに対して演算処理を実行しない場合、時間発展回路40は、前段処理回路84を含まない。
【0202】
関数演算回路86は、前段処理回路84により所定の演算処理がされたM個の中間変数bを取得する。時間発展回路40が前段処理回路84を含まない場合、関数演算回路86は、バッファ回路82から中間変数bを取得する。
【0203】
さらに、関数演算回路86は、M個の中間変数bのそれぞれに対応する、直前の時間ステップの第1変数xを第1メモリ34から読み出す。これとともに、関数演算回路86は、M個の中間変数bのそれぞれに対応する、直前の時間ステップの第2変数yを第2メモリ36から読み出す。そして、関数演算回路86は、対象の時間ステップのM個の第1変数xおよびM個の第2変数yを算出する。
【0204】
例えば、関数演算回路86は、中間変数bおよび直前の時間ステップの第1変数xを用いた式(6)に示す演算を実行して、対象の時間ステップの第2変数yを算出する。
【数6】
【0205】
さらに、関数演算回路86は、式(6)に示す演算に続いて、対象の時間ステップの第2変数yを用いた式(7)に示す演算を実行して、対象の時間ステップの第1変数xを算出する。
【数7】
【0206】
なお、関数演算回路86は、式(6)と式(7)の演算順序を逆にしてもよい。すなわち、関数演算回路86は、直前の時間ステップの第2変数yを用いた式(7)に示す演算を実行して、対象の時間ステップの第1変数xを算出し、続いて、中間変数bおよび対象の時間ステップの第1変数xを用いた式(6)に示す演算を実行して、対象の時間ステップの第2変数yを算出してもよい。
【0207】
また、関数演算回路86は、1回の時間ステップの処理中において、式(6)内のFX(x)を用いた運動量更新処理と、式(7)内のFY(y)を用いた位置更新処理とを交互に所定回数繰り返してもよい。この場合、関数演算回路86は、FX(x)およびFY(y)内のdtを、時間ステップより短い微小時間δtとする。運動量更新処理は、FX(x)の演算により微小時間δt後の運動量の差分δyを算出し、算出した運動量の差分δyを第2変数yに加算する処理である。また、位置更新処理は、FY(y)の演算により微小時間δt後の位置の差分δxを算出し、算出した位置の差分δxを第1変数xに加算する処理である。この場合、関数演算回路86は、dtをδtを除算した回数分、運動量更新処理と位置更新処理とを繰り返す。
【0208】
また、関数演算回路86は、式(6)のKを0とし且つ第1変数xの値域を所定の範囲内(例えば、-1以上、+1以下)に制限してもよい。また、関数演算回路86は、時間ステップ毎の演算において第1変数xの値を符号関数であるsgn(x)により2値化したりしてもよい。
【0209】
後段処理回路88は、時間ステップ毎に、関数演算回路86により算出されたM個の第1変数xおよびM個の第2変数yを取得する。後段処理回路88は、M個の第1変数xのそれぞれおよびM個の第2変数yのそれぞれに対して所定の演算処理または所定の操作を実行する。例えば、後段処理回路88は、時間ステップ毎に、M個の第1変数xおよびM個の第2変数yの一方または両方に対して、所定の条件の下で所定の操作(例えば、所定の値を加えたり、所定の値を乗算したり、乱数を加えたり乗算したりする操作)を実行してもよい。なお、後段処理回路88は、M個の第1変数xのそれぞれおよびM個の第2変数yのそれぞれに対して、何ら演算または操作を実行しなくてもよい。
【0210】
そして、後段処理回路88は、対象の時間ステップのM個の第1変数xを第1メモリ34に記憶させる。また、後段処理回路88は、対象の時間ステップのM個の第2変数yを第2メモリ36に記憶させる。
【0211】
さらに、後段処理回路88は、対象の時間ステップのM個の第1変数xを転送回路42に供給する。これにより、後段処理回路88は、算出したM個の第1変数xを他の計算コア14および相互作用回路38に供給することができる。
【0212】
なお、関数演算回路86は、相互作用演算の前に、転送回路42へと供給するM個の第1変数xのそれぞれに、cおよびΔtを乗算してもよい。これにより、関数演算回路86は、式(6)におけるdt×cを乗算する処理を、相互作用演算に先だって実行することができる。
【0213】
図31は、計算サーバ103の構成を示す図である。P個の計算コア14のそれぞれは、例えば計算サーバ103等の情報処理装置であってもよい。
【0214】
計算サーバ103は、例えば、通信回路131と、メモリ132と、プロセッサ133a~133dと、ストレージ134と、ホストバスアダプタ135とを備える。通信回路131、メモリ132、プロセッサ133a~133d、ストレージ134、ホストバスアダプタ135は、バス136を介して互いに接続される。
【0215】
通信回路131は、ネットワーク102に接続された各装置との間でデータの送受信を行う。通信回路131は、例えば、有線LANのNIC(Network Interface Card)である。ただし、通信回路131は、無線LANなど、その他の種類の通信回路であってもよい。メモリ132は、プロセッサ133a~133dからアクセス可能なメモリである。メモリ132は、例えば、DRAMおよびSRAM等の揮発性メモリである。メモリ132は、不揮発性メモリ等の他の種類のメモリを含んでもよい。プロセッサ133a~133dは、メモリ132を介してデータを共有する。なお、メモリ132は、計算サーバ103の全てメモリにより構成されていなくてもよい。例えば、計算サーバ103の一部のメモリは、プロセッサ133a~133dのうちのいずれかからのみからアクセスできるローカルメモリであってもよい。
【0216】
プロセッサ133a~133dは、計算処理を実行する電子回路である。プロセッサ133a~133dは、例えば、CPU、GPU、FPGA、ASICのいずれであってもよいし、これらの組合せであってもよい。また、プロセッサ133a~133dは、CPUコアまたはCPUスレッドであってもよい。プロセッサ133a~133dがCPUである場合、計算サーバ103が備えるソケット数については、特に問わない。また、プロセッサ133a~133dは、PCI expressなどのバスを介して計算サーバ103のその他の構成要素に接続されていてもよい。
【0217】
図31の例では、計算サーバ103は、4つのプロセッサ133a~133dを備える。しかし、1台の計算サーバ103に含まれるプロセッサ数は、4個に限られない。
【0218】
ストレージ134は、計算サーバ103のプログラム、プログラムの実行に必要なデータ、プログラムによって生成されたデータを含む各種のデータを記憶する。ここで、プログラムは、OSとアプリケーションの両方を含むものとする。ストレージ134は、揮発性メモリおよび不揮発性メモリ、またはこれらの組合せであってもよい。揮発性メモリは、たとえば、DRAMまたはSRAMである。不揮発性メモリは、例えば、NANDフラッシュメモリ、NORフラッシュメモリ、ReRAMまたはMRAM等である。また、ストレージ134は、ハードディスク、光ディスク、磁気テープまたは外部の記憶装置を含んでもよい。
【0219】
ホストバスアダプタ135は、他の計算サーバ103との間のデータ通信を実現する。ホストバスアダプタ135は、ケーブル104を介してスイッチ105に接続されている。ホストバスアダプタ135は、例えば、HCA(Host Channel Adaptor)である。ホストバスアダプタ135、ケーブル104、スイッチ105で高スループットを実現可能なインターコネクトを形成することにより、並列的な計算処理の速度を向上させることができる。
【0220】
本発明は上記実施形態そのままに限定されるものではなく、実施段階ではその要旨を逸脱しない範囲で構成要素を変形して具体化できる。また、上記実施形態に開示されている複数の構成要素の適宜な組合せにより、種々の発明を形成できる。例えば、実施形態に示される全構成要素から幾つかの構成要素を削除してもよい。さらに、異なる実施形態にわたる構成要素を適宜組合せてもよい。
【符号の説明】
【0221】
10 計算装置
12 ネットワーク
14 計算コア
16 管理装置
22 受信回路
24 計算回路
26 送信回路
32 係数メモリ
34 第1メモリ
36 第2メモリ
38 相互作用回路
40 時間発展回路
42 転送回路
44 中間変数メモリ
46 第1マルチプレクサ
48 第2マルチプレクサ
50 第3マルチプレクサ
52 疑似コード
60 積和回路
62 累和回路
66 乗算器
68 第1加算器
70 第2加算器
72 レジスタ
82 バッファ回路
84 前段処理回路
86 関数演算回路
88 後段処理回路
図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