(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2024-09-06
(45)【発行日】2024-09-17
(54)【発明の名称】回路情報、計算方法およびプログラム
(51)【国際特許分類】
G06N 99/00 20190101AFI20240909BHJP
G06F 17/16 20060101ALI20240909BHJP
G06F 17/10 20060101ALI20240909BHJP
【FI】
G06N99/00 180
G06F17/16 K
G06F17/10 Z
(21)【出願番号】P 2023121420
(22)【出願日】2023-07-26
(62)【分割の表示】P 2023014423の分割
【原出願日】2018-09-18
【審査請求日】2023-07-26
(73)【特許権者】
【識別番号】000003078
【氏名又は名称】株式会社東芝
(74)【代理人】
【識別番号】110002147
【氏名又は名称】弁理士法人酒井国際特許事務所
(72)【発明者】
【氏名】辰村 光介
(72)【発明者】
【氏名】後藤 隼人
【審査官】三坂 敏夫
(56)【参考文献】
【文献】特開2017-73106(JP,A)
【文献】特開2005-115497(JP,A)
【文献】米国特許出願公開第2015/0127310(US,A1)
【文献】佐伯 美枝 他,2値量子化された熱層上で決定論的に発展する動的イジングモデル,電子情報通信学会技術研究報告,社団法人電子情報通信学会,2005年06月16日,第105巻 第125号,第7頁-第12頁
(58)【調査した分野】(Int.Cl.,DB名)
G06F 17/00-17/18
G06N 99/00
(57)【特許請求の範囲】
【請求項1】
ハードウェア記述言語により記載され
、回路をイジングモデルを用いた最適化問題を解く計算装置にする回路情報であって
、
前記計算装置は
、
第1時刻におけるN個(Nは2以上の整数)の第1中間変数と、予め設定されたN行×N列の係数を含む係数行列とを行列乗算することにより、前記第1時刻におけるN個の第2中間変数を算出
し、
前記第1時刻における前記N個の第2中間変数に基づき、前記第1時刻から1サンプリング期間後の第2時刻におけるN個の第1変数および前記第2時刻におけるN個の第2変数を算出し、前記第2時刻におけるN個の第1変数
を第1変数メモリに書き込み、前記第2時刻におけるN個の第2変数
を第2変数メモリに書き込
み、
開始時刻からサンプリング期間毎で時刻を増加させ、それぞれの時刻に対する
、前記第1時刻における前記N個の第2中間変数を算出する処理、前記第2時刻における前記N個の第2変数を算出する処理、前記第2時刻における前記N個の第1変数を前記第1変数メモリに書き込む処理、および、前記第2時刻における前記N個の第2変数を前記第2変数メモリに書き込む処理を実行さ
せ、
予め設定された終了時刻におけるN個の第1変数を出力
し、
前記
計算装置は、複数の演算
処理を実行し、
前記計算装置は、前記複数の演算
処理のそれぞれにおいて、前記係数行列における互いに異なる一部の行とN個の列の係数を含む分割行列が設定され、前記第1時刻における前記N個の第1中間変数と、設定された前記分割行列とを行列乗算することにより、前記第1時刻における前記N個の第2中間変数のうちの一部を算出し、
前記N個の第1変数は、前記イジングモデルにおけるN個のスピンに対応し、
前記N個の第2変数は、前記N個のスピンに対応し、
前記N個のスピンは、N個の点に対応し、
前記N個の第1変数のそれぞれは、前記N個の点のうちの対応するスピンに対応する点の位置を表し、
前記N個の第2変数のそれぞれは、前記N個の点のうちの対応するスピンに対応する点の運動量を表し、
前記N個の第1中間変数は、前記N個の第1変数に対応し、前記N個の第1中間変数のそれぞれは、前記N個の第1変数のうちの対応する第1変数または前記対応する第1変数に予め設定された係数を乗じた値であり、
前記N個の第2中間変数は、前記N個の第2変数に対応する
回路情報。
【請求項2】
再構成可能な半導体装置を
、イジングモデルを用いた最適化問題を解く計算装置にする、前記再構成可能な半導体装置に書き込まれる回路情報であって
、
前記計算装置は
、
第1時刻におけるN個(Nは2以上の整数)の第1中間変数と、予め設定されたN行×N列の係数を含む係数行列とを行列乗算することにより、前記第1時刻におけるN個の第2中間変数を算出
し、
前記第1時刻における前記N個の第2中間変数に基づき、前記第1時刻から1サンプリング期間後の第2時刻におけるN個の第1変数および前記第2時刻におけるN個の第2変数を算出し、前記第2時刻におけるN個の第1変数
を第1変数メモリに書き込み、前記第2時刻におけるN個の第2変数
を第2変数メモリに書き込
み、
開始時刻からサンプリング期間毎で時刻を増加させ、それぞれの時刻に対する
、前記第1時刻における前記N個の第2中間変数を算出する処理、前記第2時刻における前記N個の第2変数を算出する処理、前記第2時刻における前記N個の第1変数を前記第1変数メモリに書き込む処理、および、前記第2時刻における前記N個の第2変数を前記第2変数メモリに書き込む処理を実行さ
せ、
予め設定された終了時刻におけるN個の第1変数を出力
し、
前記
計算装置は、複数の演算
処理を実行し、
前記計算装置は、前記複数の演算
処理のそれぞれにおいて、前記係数行列における互いに異なる一部の行とN個の列の係数を含む分割行列が設定され、前記第1時刻における前記N個の第1中間変数と、設定された前記分割行列とを行列乗算することにより、前記第1時刻における前記N個の第2中間変数のうちの一部を算出し、
前記N個の第1変数は、前記イジングモデルにおけるN個のスピンに対応し、
前記N個の第2変数は、前記N個のスピンに対応し、
前記N個のスピンは、N個の点に対応し、
前記N個の第1変数のそれぞれは、前記N個の点のうちの対応するスピンに対応する点の位置を表し、
前記N個の第2変数のそれぞれは、前記N個の点のうちの対応するスピンに対応する点の運動量を表し、
前記N個の第1中間変数は、前記N個の第1変数に対応し、前記N個の第1中間変数のそれぞれは、前記N個の第1変数のうちの対応する第1変数または前記対応する第1変数に予め設定された係数を乗じた値であり、
前記N個の第2中間変数は、前記N個の第2変数に対応する
回路情報。
【請求項3】
前記
計算装置は、
前記第1時刻における前記N個の第2中間変数に基づき、前記第2時刻における前記N個の第2変数を算出し、
前記第2時刻における前記N個の第2変数に基づき、前記第2時刻における前記N個の第1変数を算出する
請求項1または2に記載の回路情報。
【請求項4】
前記計算装置は、前記複数の演算
処理のそれぞれにおいて、
前記第1時刻における前記N個の第1中間変数を所定個ずつ順次に
取得し、
取得した前記第1時刻における前記N個の第1中間変数を前記所定個ずつ順次に
送出し、
前記計算装置は、前記複数の演算
処理のうちの第1
処理において、前記第1時刻における前記N個の第1中間変数のうちの少なくとも一部を、前記複数の演算
処理のうちの第2
処理から
取得する
請求項1から3の何れか1項に記載の回路情報。
【請求項5】
前記計算装置は、前記複数の演算
処理のそれぞれにおいて、前記第1時刻における前記N個の第1中間変数の全ての受信を完了する前に、行列乗算を開始する
請求項4に記載の回路情報。
【請求項6】
情報処理装置によりイジングモデルを用いた最適化問題を解く計算方法であって、
前記情報処理装置は
、
情報処理装
置が、第1時刻におけるN個(Nは2以上の整数)の第1中間変数と、予め設定されたN行×N列の係数を含む係数行列とを行列乗算することにより、前記第1時刻におけるN個の第2中間変数を算出し、
前記情報処理装
置が、前記第1時刻における前記N個の第2中間変数に基づき、前記第1時刻から1サンプリング期間後の第2時刻におけるN個の第1変数および前記第2時刻におけるN個の第2変数を算出し、前記第2時刻におけるN個の第1変数
を第1変数メモリに書き込み、前記第2時刻におけるN個の第2変数
を第2変数メモリに書き込み、
前記情報処理装
置が、開始時刻からサンプリング期間毎で時刻を増加させ、それぞれの時刻に対する
、前記第1時刻における前記N個の第2中間変数を算出する処理、前記第2時刻における前記N個の第2変数を算出する処理、前記第2時刻における前記N個の第1変数を前記第1変数メモリに書き込む処理、および、前記第2時刻における前記N個の第2変数を前記第2変数メモリに書き込む処理を実行させ、
前記情報処理装
置が、予め設定された終了時刻におけるN個の第1変数を出力し、
前記
情報処理装置は、複数の演算
処理を実行し、
前記情報処理装置は、前記複数の演算
処理のそれぞれにおいて、前記係数行列における互いに異なる一部の行とN個の列の係数を含む分割行列が設定され、前記第1時刻における前記N個の第1中間変数と、設定された前記分割行列とを行列乗算することにより、前記第1時刻における前記N個の第2中間変数のうちの一部を算出し、
前記N個の第1変数は、前記イジングモデルにおけるN個のスピンに対応し、
前記N個の第2変数は、前記N個のスピンに対応し、
前記N個のスピンは、N個の点に対応し、
前記N個の第1変数のそれぞれは、前記N個の点のうちの対応するスピンに対応する点の位置を表し、
前記N個の第2変数のそれぞれは、前記N個の点のうちの対応するスピンに対応する点の運動量を表し、
前記N個の第1中間変数は、前記N個の第1変数に対応し、前記N個の第1中間変数のそれぞれは、前記N個の第1変数のうちの対応する第1変数または前記対応する第1変数に予め設定された係数を乗じた値であり、
前記N個の第2中間変数は、前記N個の第2変数に対応する
計算方法。
【請求項7】
情報処理装置を、イジングモデルを用いた最適化問題を解く計算装置
にするプログラムであって
、
前記情報処理装置
に、
第1時刻におけるN個(Nは2以上の整数)の第1中間変数と、予め設定されたN行×N列の係数を含む係数行列とを行列乗算することにより、前記第1時刻におけるN個の第2中間変数を算出
させ、
前記第1時刻における前記N個の第2中間変数に基づき、前記第1時刻から1サンプリング期間後の第2時刻におけるN個の第1変数および前記第2時刻におけるN個の第2変数を算出
させ、前記第2時刻におけるN個の第1変数
を第1変数メモリに書き込
ませ、前記第2時刻におけるN個の第2変数
を第2変数メモリに書き込
ませ、
開始時刻からサンプリング期間毎で時刻を増加させ、それぞれの時刻に対する
、前記第1時刻における前記N個の第2中間変数を算出させる処理、前記第2時刻における前記N個の第2変数を算出させる処理、前記第2時刻における前記N個の第1変数を前記第1変数メモリに書き込ませる処理、および、前記第2時刻における前記N個の第2変数を前記第2変数メモリに書き込ませる処理を実行さ
せ、
予め設定された終了時刻におけるN個の第1変数を出力
させ、
前記
情報処理装置に、複数の演算
処理を実行させ、
前記情報処理装置に、前記複数の演算
処理のそれぞれにおいて、前記係数行列における互いに異なる一部の行とN個の列の係数を含む分割行列が設定され、前記第1時刻における前記N個の第1中間変数と、設定された前記分割行列とを行列乗算することにより、前記第1時刻における前記N個の第2中間変数のうちの一部を算出
させ、
前記N個の第1変数は、前記イジングモデルにおけるN個のスピンに対応し、
前記N個の第2変数は、前記N個のスピンに対応し、
前記N個のスピンは、N個の点に対応し、
前記N個の第1変数のそれぞれは、前記N個の点のうちの対応するスピンに対応する点の位置を表し、
前記N個の第2変数のそれぞれは、前記N個の点のうちの対応するスピンに対応する点の運動量を表し、
前記N個の第1中間変数は、前記N個の第1変数に対応し、前記N個の第1中間変数のそれぞれは、前記N個の第1変数のうちの対応する第1変数または前記対応する第1変数に予め設定された係数を乗じた値であり、
前記N個の第2中間変数は、前記N個の第2変数に対応する
プログラム。
【発明の詳細な説明】
【技術分野】
【0001】
本発明の実施形態は、回路情報、計算方法およびプログラムに関する。
【背景技術】
【0002】
イジングモデルを用いて最適化問題を解くための様々なアルゴリズムが提案されている。また、イジングモデルを用いて最適化問題を解くハードウェアも提案されている。
【0003】
このような最適化問題を解くハードウェアは、簡易な構成で、高速に問題が解けることが好ましい。また、このような最適化問題を解くハードウェアは、取り扱うことが可能な変数の個数が多い方が好ましい。また、このような最適化問題を解くハードウェアは、取り扱う変数の個数が変わっても、大幅な設計変更をすることなく、自在に対応できることが好ましい。
【先行技術文献】
【特許文献】
【0004】
【文献】特許第5865456号公報
【文献】特開2018-005541号公報
【文献】特開2018-010474号公報
【非特許文献】
【0005】
【文献】T. Inagaki et al.,“A coherent Ising machine for 2000-node optimization problems”, Science 354, 603 (2016).
【文献】H. Goto,“Bifurcation-based adiabatic quantum computation with a nonlinear oscillator network”, Sci. Rep. 6, 21686 (2016).
【文献】Y. Haribara et al., “Performance evaluation of coherent Ising machines against classical neural networks”, Quantum Sci. Technol. 2, 044002 (2017).
【発明の概要】
【発明が解決しようとする課題】
【0006】
発明が解決しようとする課題は、簡易な構成で最適化問題を解くことである。
【課題を解決するための手段】
【0007】
実施形態に係る回路情報は、ハードウェア記述言語により記載され、回路を、イジングモデルを用いた最適化問題を解く計算装置にする。前記計算装置は、第1時刻におけるN個(Nは2以上の整数)の第1中間変数と、予め設定されたN行×N列の係数を含む係数行列とを行列乗算することにより、前記第1時刻におけるN個の第2中間変数を算出する。前記計算装置は、前記第1時刻における前記N個の第2中間変数に基づき、前記第1時刻から1サンプリング期間後の第2時刻におけるN個の第1変数および前記第2時刻におけるN個の第2変数を算出し、前記第2時刻におけるN個の第1変数を第1変数メモリに書き込み、前記第2時刻におけるN個の第2変数を第2変数メモリに書き込む。前記計算装置は、開始時刻からサンプリング期間毎で時刻を増加させ、それぞれの時刻に対する、前記第1時刻における前記N個の第2中間変数を算出する処理、前記第2時刻における前記N個の第2変数を算出する処理、前記第2時刻における前記N個の第1変数を前記第1変数メモリに書き込む処理、および、前記第2時刻における前記N個の第2変数を前記第2変数メモリに書き込む処理を実行させる。前記計算装置は、予め設定された終了時刻におけるN個の第1変数を出力する。前記計算装置は、複数の演算処理を実行する。前記計算装置は、複数の演算処理のそれぞれにおいて、前記係数行列における互いに異なる一部の行とN個の列の係数を含む分割行列が設定され、前記第1時刻における前記N個の第1中間変数と、設定された前記分割行列とを行列乗算することにより、前記第1時刻における前記N個の第2中間変数のうちの一部を算出する。前記N個の第1変数は、前記イジングモデルにおけるN個のスピンに対応する。前記N個の第2変数は、前記N個のスピンに対応する。前記N個のスピンは、N個の点に対応する。前記N個の第1変数のそれぞれは、前記N個の点のうちの対応するスピンに対応する点の位置を表す。前記N個の第2変数のそれぞれは、前記N個の点のうちの対応するスピンに対応する点の運動量を表す。前記N個の第1中間変数は、前記N個の第1変数に対応し、前記N個の第1中間変数のそれぞれは、前記N個の第1変数のうちの対応する第1変数または前記対応する第1変数に予め設定された係数を乗じた値である。前記N個の第2中間変数は、前記N個の第2変数に対応する。
【図面の簡単な説明】
【0008】
【
図4】第2実施形態での変数および係数行列の関係図。
【
図9】第3実施形態での変数および係数行列の関係図。
【
図12】第4実施形態での変数および係数行列の関係図。
【
図13】第4実施形態に係る分割行列乗算部の構成図。
【
図14】第5実施形態での変数および係数行列の関係図。
【
図15】第6実施形態に係るサブ行列乗算部の構成図。
【
図16】分割行列メモリに記憶された分割行列を示す図。
【
図19】第5実施形態におけるパラメータおよびタイミングを示す図。
【
図21】第1中間変数および第2中間変数のタイミングチャート。
【発明を実施するための形態】
【0009】
以下、図面を参照しながら実施形態に係る計算装置10について詳細に説明する。実施形態に係る計算装置10は、イジングモデルを用いた最適化問題を解くことを目的とする。
【0010】
(前提)
まず、計算装置10において実行される処理の前提について説明する。
【0011】
イジングモデルのエネルギーE
Isingは、下記の式(1)により表される。
【数1】
【0012】
式(1)において、Nはスピンの数を表す。siは、i番目のスピンの状態を表す。例えば、si=±1である。sjは、j番目のスピンの状態を表す。例えば、sj=±1である。iおよびjは、0以上、(N-1)以下の整数である。
【0013】
式(1)において、Ji,jは、N行×N列の係数行列Jに含まれるi行、j列の係数である。Ji,jは、i番目のスピンとj番目のスピンとの間の相互作用を表す。係数行列Jは、例えば実対称行列である。実対称行列は、対角成分(対角要素)が全てゼロである行列である。hiは、N個の係数配列に含まれるi番目の係数である。hiは、i番目のスピンに単独に加わる作用を表す。イジングモデルのエネルギーEIsingを最小とするスピン状態(基底状態)を探索する問題をイジング問題という。イジング問題を解く機械をイジングマシンと呼んでもよい。イジングマシンは、係数行列Jとhを入力され、基底状態もしくはよりエネルギーの低い近似解を計算し出力する。
【0014】
量子分岐マシンの古典モデル(以下、古典分岐マシンと呼ぶ)が提案されている。古典分岐マシンは、式(2)、式(3)および式(4)に示す連立常微分方程式で表された運動方程式を用いて、式(1)の最適解を算出する。
【0015】
【0016】
式(2)、式(3)および式(4)において、Nは、質点の数を表し、2以上の整数である。Nは、スピンの数に対応する。xiは、i番目の質点の位置を表す実数である。yiは、i番目の質点の運動量を表す実数である。iおよびjは、0から(N-1)までの整数である。
【0017】
式(2)、式(3)および式(4)において、Ji,jは、予め定められたN行×N列の係数を含む係数行列Jに含まれるi行、j列の係数である。係数行列Jは、例えば実対称行列である。hiは、予め定められたN個の係数配列に含まれるi番目の係数である。式(2)、式(3)および式(4)において、hiの項は、無くてもよい。
【0018】
式(2)、式(3)および式(4)において、Dは、例えば離調に対応する定数である。cは、定数である。Kは、例えばカー係数に対応する定数である。例えば、D、cおよびKは、予め定められている。
【0019】
式(2)、式(3)および式(4)において、tは、時刻を表す。p(t)は、例えば、tを変数とする関数であり、ポンプレートである。a(t)は、tを変数とする関数である。a(t)は、例えば、下記の式(5)により表される。
【数5】
【0020】
古典分岐マシンは、tをゼロから十分大きな値へ微小時間ずつ増加させて、t毎に、式(2)および式(3)を用いてxiおよびyiを更新する。そして、古典分岐マシンは、tを十分に大きくした場合のxiの最終値の符号(±1)を、siの最適解として出力する。このように、古典分岐マシンは、イジングモデルを、式(2)、式(3)および式(4)のHをハミルトニアンとしたハミルトン力学系であると見なしている。
【0021】
また、イジングモデルの最適解を算出する方法として、シミュレーティッドアニーリングが知られている。この方法では、逐次更新アルゴリズムが採用される。逐次更新アルゴリズムは、複数のスピンを1つずつ選択して順次に更新する。このような逐次更新アルゴリズムは、並列計算に適しておらず高速化することは困難である。
【0022】
これに対して、古典分岐マシンの運動方程式をデジタル計算機で離散解法によって解くアルゴリズムが考えられる。このアルゴリズムは、シミュレーティッドアニーリングとは異なり、複数の変数を同時に更新することができる。
【0023】
しかし、古典分岐マシンは、最も計算量が大きい係数行列Jを用いた行列乗算を、xiおよびyiの両者の算出のために、実行しなければならなかった。また、古典分岐マシンは、式(2)、式(3)および式(4)により表される運動方程式を、計算コストの大きい離散解法(4次のルンゲ・クッタ法等)を実行することにより、解かなければならなかった。このため、古典分岐マシンは、計算量が膨大となってしまっていた。
【0024】
これに対して、実施形態に係る計算装置10は、下記の式(6)、式(7)および式(8)に示す新規な連立常微分方程式で表された運動方程式を用いて、式(1)の最適解を算出する。
【0025】
【0026】
式(6)、式(7)および式(8)において、N、xi、yi、i、j、Ji,j、hi、D、c、K、t、p(t)およびa(t)は、式(2)~式(4)と同様である。
【0027】
実施形態に係る計算装置10は、tをゼロから十分大きな値へと微小時間ずつ増加させて、t毎に、式(6)および式(7)を用いてxiおよびyiを更新する。そして、実施形態に係る計算装置10は、tを十分に大きくした場合のxiの最終値の符号(±1)を、siの最適解として出力する。このように、実施形態に係る計算装置10は、イジング問題を、式(8)のHをハミルトニアンとしたハミルトン力学系の時間発展をシミュレートすることで解く。
【0028】
式(6)、式(7)および式(8)において、最も計算量が大きい係数行列Jに対する行列乗算は、式(7)には含まれるが、式(6)には含まれない。従って、実施形態に係る計算装置10は、最も計算量が大きい係数行列Jに対する行列乗算を、yiの更新のためにのみ実行すればよく、xiの更新のためには実行しなくてよい。また、xiの時間微分値(dxi/dt)を算出するための式(6)は、p(t)が消去されている。従って、実施形態に係る計算装置10は、少ない計算量でイジングモデルの最適解を算出することができる。
【0029】
また、xiの時間微分値(dxi/dt)を算出するための式(6)は、yiを含むが、xiを含まない。また、yiの時間微分値(dyi/dt)を算出するための式(7)は、xiを含むが、yiを含まない。
【0030】
つまり、式(6)および式(7)を用いる場合、ハミルトニアンにおいて、xiとyiとは、互いに分離されている。従って、実施形態に係る計算装置10は、計算量が小さく安定な離散解法を適用して、xiおよびyiを更新することが可能となる。例えば、実施形態に係る計算装置10は、シンプレクティック・オイラー法等を適用して、xiおよびyiを更新する。従って、実施形態に係る計算装置10は、簡易な演算および簡易な構成で、イジングモデルを用いた最適化問題の最適解を算出することができる。
【0031】
また、実施形態に係る計算装置10は、下記の式(9)および式(10)に示す新規な連立常微分方程式で表された運動方程式を用いて、式(1)の最適解を算出してもよい。
【0032】
【0033】
式(9)および式(10)において、N、xi、yi、i、j、Ji,j、hi、D、c、K、t、p(t)およびa(t)は、式(2)~式(4)と同様である。式(9)および式(10)において、nは、2以上の偶数である。
【0034】
この場合、実施形態に係る計算装置10は、tをゼロから十分大きな値へと微小時間ずつ増加させて、t毎に、式(9)および式(10)を用いてxiおよびyiを更新する。そして、実施形態に係る計算装置10は、tを十分に大きくした場合のxiの最終値の符号(±1)を、siの最適解として出力する。
【0035】
ここで、最も計算量が大きい係数行列Jに対する行列乗算は、式(9)に含まれ、式(10)には含まれない。従って、式(9)および式(10)を用いる場合も、実施形態に係る計算装置10は、最も計算量が大きい係数行列Jに対する行列乗算を、yiの更新のためにのみ実行すればよく、xiの更新のためには実行しなくてよい。また、xiの時間微分値(dxi/dt)を算出するための式(9)は、p(t)が消去されている。従って、式(9)および式(10)を用いる場合も、実施形態に係る計算装置10は、少ない計算量でイジングモデルを用いた最適化問題の最適解を算出することができる。
【0036】
また、xiの時間微分値(dxi/dt)を算出するための式(9)は、yiを含むが、xiを含まない。また、yiの時間微分値(dyi/dt)を算出するための式(10)は、xiを含むが、yiを含まない。
【0037】
つまり、式(9)および式(10)を用いる場合も、ハミルトニアンにおいて、xiとyiとは、互いに分離されている。従って、式(9)および式(10)を用いる場合も、式(6)および式(7)を用いる場合と同様に、実施形態に係る計算装置10は、簡易な演算および簡易な構成で、イジングモデルを用いた最適化問題の最適解を算出することができる。
【0038】
(第1実施形態)
第1実施形態に係る計算装置10について説明する。なお、各実施形態の説明において、それまでに説明した装置、ブロックまたは回路等と、略同一の機能および構成を有する装置、ブロックまたは回路には同一の符号を付けて、相違点を除き詳細な説明を省略する。
【0039】
図1は、第1実施形態に係る計算装置10の構成を示す図である。計算装置10は、式(7)および式(8)に示した連立常微分方程式、または、式(9)および式(10)に示した連立常微分方程式を用いて、イジングモデルを用いた最適化問題を解く装置である。
【0040】
計算装置10は、演算部20と、入力部22と、出力部24と、設定部26とを備える。
【0041】
演算部20は、例えば1または複数のCPU(Central Processing Unit)等のプロセッサおよびメモリを備える演算処理装置である。また、演算部20は、第2実施形態以降の回路であってもよい。
【0042】
演算部20は、サンプリング時刻を表すパラメータであるtを開始時刻(例えば0)から微小時間(dt)ずつ増加させる。演算部20は、それぞれのサンプリング時刻毎に、式(6)および式(7)に示した連立常微分方程式、または、式(9)および式(10)に示した連立常微分方程式を用いて、N個の第1変数xiおよびN個の第2変数yiを更新する。そして、演算部20は、予め定められたサンプリング時刻である終了時刻TにおけるN個の第1変数xiを出力する。
【0043】
入力部22は、演算部20による演算処理に先だって、開始時刻におけるN個の第1変数xiおよびN個の第2変数yiを取得して、演算部20に与える。開始時刻におけるN個の第1変数xiおよびN個の第2変数yiは、例えば、乱数により発生された値であってもよいし、予め設定された値(例えば、全て0または全て所定値)であってもよい。
【0044】
出力部24は、演算部20による演算処理の終了後に、終了時刻TにおけるN個の第1変数xiを取得する。そして、出力部24は、終了時刻TにおけるN個の第1変数xiの符号を表す値(例えば、+1,-1)を、イジングモデルにおけるN個のスピンの状態の組み合わせの最適解として出力する。
【0045】
設定部26は、演算部20による演算処理に先だって、式(6)および式(7)に示した連立常微分方程式、および、式(9)および式(10)に示した連立常微分方程式に用いられる各パラメータを演算部20に対して設定する。より具体的には、設定部26は、N、J、h、D、c、K、p(t)およびa(t)を設定する。
【0046】
Nは、第1変数および第2変数の数を表す2以上の整数である。
Jは、N行×N列の係数行列である。Ji,jは、係数行列Jに含まれるi行、j列の係数である。
hは、N個の係数を含む係数配列である。hiは、係数配列hにおけるi番目の係数である。
D、c、Kは、定数である。
p(t)は、サンプリング時刻を変数とする関数である。
a(t)は、サンプリング時刻を変数とする関数である。
【0047】
さらに、設定部26は、dt、TおよびMを設定してもよい。
dtは、サンプリング期間(微小時間)を表す定数である。
Tは、終了時刻に相当するサンプリング時刻を表す定数である。
Mは、式(6)および式(7)の演算の繰り返し数、または、式(9)および式(10)の演算の繰り返し数を表す1以上の整数である。
【0048】
なお、設定部26は、これらのパラメータのうち一部を、ユーザ操作に応じて任意に変更してもよい。また、設定部26は、これらのパラメータを演算毎に変更せずに固定した値としてもよい。
【0049】
図2は、演算部20の処理の流れを示すフローチャートである。
【0050】
まず、S11において、演算部20は、t、pおよびaを初期化する。例えば、演算部20は、t、pおよびaを全て0にする。tは、サンプリング時刻を表すパラメータである。pは、時刻tにおけるp(t)の値を表すパラメータである。aは、時刻tにおけるa(t)の値を表すパラメータである。
【0051】
続いて、演算部20は、tが予め設定された終了時刻T以上となるまでS13からS20までの処理を繰り返す(S12とS21との間のループ処理)。なお、a(t)が増加関数である場合、演算部20は、aが予め定められた値以上となるまで、S13からS20までの間の処理を繰り返してもよい。
【0052】
S13において、演算部20は、N個の第1変数xiのそれぞれに、サンプリング期間(微小時間)dtと、予め設定された係数cとを乗じることにより、N個の第1中間変数xi´を算出する。すなわち、S13において、演算部20は、下記の式(21)の演算を実行する。
xi´=dt×c×xi…(21)
【0053】
続いて、S14において、演算部20は、N個の第1中間変数x
i´と、予め設定されたN行×N列の係数を含む係数行列Jとを行列乗算することにより、N個の第2中間変数b
iを算出する。すなわち、S14において、演算部20は、下記の式(22)の演算を実行する。
【数11】
【0054】
なお、演算部20は、S14の処理を実行した後、S13の処理を実行してもよい。この場合、S14において、演算部20は、N個の第1変数xiと係数行列Jとを行列乗算することにより、N個の値を算出する。続いて、S13において、演算部20は、S14で算出したN個の値のそれぞれに、(dt×c)を乗じることにより、N個の第2中間変数biを算出する。
【0055】
続いて、S15において、演算部20は、N個の第2変数yiのそれぞれに、対応する第2中間変数biを加算することにより、N個の第2変数yiを更新する。すなわち、S15において、演算部20は、下記の式(23)の演算を実行する。
yi+=bi…(23)
【0056】
続いて、演算部20は、S17からS18までの処理を、M回繰り返して実行する(S16とS19との間のループ処理)。なお、Mは、1以上の整数である。
【0057】
S17において、演算部20は、式(7)または式(10)に従った演算を実行することにより、第2変数yiを更新する。例えば、S17において、演算部20は、式(7)に従った演算を実行する場合、下記の式(24)の演算を実行する。
yi+=dt´×[(-D+p-Kxi
2)xi-c×hi×a]…(24)
【0058】
また、例えば、S17において、演算部20は、式(10)に従った演算を実行する場合、下記の式(25)の演算を実行する。なお、式(25)において、nは、2以上の偶数である。
yi+=dt´×{[(-D+p)(1+xi
n)-Kxi
n+2]xi-c×hi×a}…(25)
【0059】
続いて、S18において、演算部20は、式(6)または式(9)に従った演算を実行することにより、第1変数xiを更新する。なお、式(6)および式(9)は、同一の式である。例えば、S18において、演算部20は、式(6)または式(9)に従った演算を実行する場合、下記の式(26)の演算を実行する。
xi+=dt´×D×yi…(26)
【0060】
S16からS19までのループ処理は、シンプレクティック・オイラー法における繰り返し演算に対応する。なお、演算部20は、S17の処理とS18の処理を逆に実行してもよい。すなわち、演算部20は、第1変数xiを更新した後に、第2変数yiを更新してもよい。
【0061】
S16からS19までのループ処理を実行した後、演算部20は、処理をS20に進める。S20において、演算部20は、tにdtを加算することにより、tを更新する。さらに、演算部20は、pおよびaを更新する。例えば、演算部20は、pに、予め設定されたdpを加算することにより、pを更新する。また、演算部20は、更新後のpの平方根を演算することにより、aを更新する。
【0062】
S20の処理を実行した後、演算部20は、tがT以上となったか否かを判断する。演算部20は、tがTより小さい場合には、処理をS13に戻して、S13から処理を繰り返す。tがT以上となった場合には、演算部20は、本フローを終了する。
【0063】
以上のような処理を実行することにより、第1実施形態に係る計算装置10は、式(6)および式(7)に示す連立常微分方程式、または、式(9)および式(10)に示す連立常微分方程式を用いて、最適化問題を解くことができる。第1実施形態に係る計算装置10によれば、第1変数xiおよび第2変数yiを簡単な演算または簡単な構成で、高速に更新することができる。従って、第1実施形態に係る計算装置10によれば、小さいコストで、高速に最適化問題の最適解を算出することができる。
【0064】
(第2実施形態)
第2実施形態に係る計算装置10について説明する。
【0065】
図3は、第2実施形態に係る演算部20の構成を示す図である。第2実施形態において、計算装置10は、1または複数の半導体装置により実現された回路である。計算装置10は、例えば、FPGA(Field Programmable Gate Array)、ゲートアレイまたは特定用途向け集積回路(ASIC)等であってもよい。また、計算装置10は、一部にプロセッサを含んでもよい。
【0066】
第2実施形態に係る演算部20は、行列乗算部28と、時間発展部30と、管理部32とを備える。
【0067】
行列乗算部28は、任意のサンプリング時刻を表す第1時刻t1におけるN個の第1中間変数xi´(t1)を時間発展部30から取得する。行列乗算部28は、第1時刻t1におけるN個の第1中間変数xi´(t1)と、係数行列Jとを行列乗算することにより、第1時刻t1におけるN個の第2中間変数bi(t1)を算出する。
【0068】
例えば、行列乗算部28は、係数行列メモリ36と、行列乗算実行部38とを有する。係数行列メモリ36は、係数行列Jを記憶する。行列乗算実行部38は、第1時刻t1におけるN個の第1中間変数xi´(t1)と、係数行列Jとを行列乗算する。
【0069】
時間発展部30は、第1時刻t1におけるN個の第2中間変数bi(t1)を行列乗算部28から取得する。時間発展部30は、第1時刻t1におけるN個の第2中間変数bi(t1)に基づき、第1時刻t1から1サンプリング期間後のサンプリング時刻を表す第2時刻t2におけるN個の第1変数xi(t2)、第2時刻t2におけるN個の第2変数yi(t2)および第2時刻t2におけるN個の第1中間変数xi´(t2)を算出する。
【0070】
管理部32は、開始時刻からサンプリング期間毎にサンプリング時刻を増加させる。そして、管理部32は、それぞれのサンプリング時刻に対する処理を、行列乗算部28および時間発展部30に実行させる。
【0071】
すなわち、管理部32は、例えば、行列乗算部28に、第1時刻t1におけるN個の第2中間変数bi(t1)を算出させる。続いて、管理部32は、時間発展部30に、第2時刻t2におけるN個の第1変数xi(t2)、N個の第2変数yi(t2)およびN個の第1中間変数xi´(t2)を算出させる。続いて、管理部32は、行列乗算部28に、第2時刻t2におけるN個の第2中間変数bi(t2)を算出させる。続いて、管理部32は、時間発展部30に、第2時刻t2から1サンプリング期間後のサンプリング時刻を表す第3時刻t3におけるN個の第1変数xi(t3)、N個の第2変数yi(t3)およびN個の第1中間変数xi´(t3)を算出させる。このように、管理部32は、サンプリング時刻を増加させながら、行列乗算部28および時間発展部30に交互に処理を実行させる。
【0072】
なお、開始時刻(例えば、t0)におけるN個の第1変数xi(t0)およびN個の第2変数yi(t0)は、例えば、演算処理に先だって、入力部22により予め与えられる。
【0073】
例えば、時間発展部30は、第1変数メモリ40と、第2変数メモリ42と、第1加算部44と、関数演算部46と、第1乗算部48と、第1中間変数メモリ50とを有する。
【0074】
第1変数メモリ40は、第1時刻t1におけるN個の第1変数xi(t1)を記憶する。第2変数メモリ42は、第1時刻t1におけるN個の第2変数yi(t1)を記憶する。
【0075】
第1加算部44は、行列乗算部28が算出した第1時刻t1におけるN個の第2中間変数bi(t1)を取得する。第1加算部44は、第2変数メモリ42に記憶された第1時刻t1におけるN個の第2変数yi(t1)に、第1時刻t1におけるN個の第2中間変数bi(t1)を加算することにより、第1時刻t1におけるN個の第2変数yi(t1)を更新する。例えば、第1加算部44は、先頭のインデックス(i=0)の第2変数y0(t1)から、最後のインデックス(i=N-1)の第2変数yN-1(t1)まで、インデックス順に、N個の第2変数yi(t1)を更新する。
【0076】
なお、実施形態において、N個の第1値とN個の第2値とを加算するとは、同一のインデックスの値同士を加算することにより、N個の第3値を生成することをいう。
【0077】
関数演算部46は、第1変数メモリ40に記憶された第1時刻t1におけるN個の第1変数xi(t1)、および、第1加算部44が算出した第1時刻t1における更新されたN個の第2変数yi(t1)に基づき、第2時刻t2におけるN個の第1変数xi(t2)および第2時刻t2におけるN個の第2変数yi(t2)を算出する。例えば、関数演算部46は、先頭のインデックス(i=0)の第1変数x0(t2)および第2変数y0(t2)から、最後のインデックス(i=N-1)の第1変数xN-1(t2)および第2変数yN-1(t2)まで、インデックス順に、N個の第1変数xi(t2)およびN個の第2変数yi(t2)を算出する。
【0078】
関数演算部46は、第2時刻t2におけるN個の第1変数xi(t2)を第1変数メモリ40に書き込む。例えば、関数演算部46は、第2時刻t2におけるN個の第1変数xi(t2)のそれぞれを、先頭のインデックス(i=0)の第1変数x0(t2)から順次に第1変数メモリ40に書き込む。第1変数メモリ40は、例えば、デュアルポートメモリであり、あるアドレスのデータの読み出しをしながら、他のアドレスにデータを書き込むことができる。第1変数メモリ40がデュアルポートメモリである場合、関数演算部46は、第2時刻t2におけるN個の第1変数xi(t2)を、第1時刻t1におけるN個の第1変数xi(t1)が記憶されていたアドレスに上書きすることができる。
【0079】
関数演算部46は、第2時刻t2におけるN個の第2変数yi(t2)を第2変数メモリ42に書き込む。例えば、関数演算部46は、第2時刻t2におけるN個の第2変数yi(t2)のそれぞれを、先頭のインデックスの第2変数y0(t2)から順次に第2変数メモリ42に書き込む。第2変数メモリ42は、例えば、デュアルポートメモリである。第2変数メモリ42がデュアルポートメモリである場合、関数演算部46は、第2時刻t2におけるN個の第2変数yi(t2)を、第1時刻t1におけるN個の第2変数yi(t1)が記憶されていたアドレスに上書きすることができる。
【0080】
第1乗算部48は、第2時刻t2におけるN個の第1変数xi(t2)のそれぞれに、予め設定された値(本実施形態においては、(dt×c))を乗じることにより、第2時刻t2におけるN個の第1中間変数xi
´(t2)を算出する。第1中間変数メモリ50は、第1乗算部48が算出した第2時刻t2におけるN個の第1中間変数xi´(t2)を記憶する。なお、第2時刻t2におけるN個の第1中間変数xi´(t2)は、第1中間変数メモリ50に一時的に記憶された後に、行列乗算部28に送信される。第1中間変数メモリ50は、第2時刻t2におけるN個の第1中間変数xi´(t2)のそれぞれを、第1乗算部48により生成されてから、行列乗算部28へと送信されるまでの期間保持する。第1中間変数メモリ50は、例えば、FIFO(First IN First Out)メモリを含んでいてもよい。
【0081】
このような構成において、行列乗算部28は、第1実施形態において説明したS14の処理を実行する。また、第1加算部44は、S15の処理を実行する。関数演算部46は、S16からS19までの処理を実行する。また、第1乗算部48は、S13の処理を実行する。また、管理部32は、S11、S20、および、S12とS21との間のループ処理の管理を実行する。従って、第2実施形態に係る演算部20によれば、第1実施形態と同様に、小さいコストで高速に最適化問題の最適解を算出することができる。
【0082】
なお、第1乗算部48は、第1中間変数メモリ50の前段に代えて、第1加算部44の前段に設けられてもよい。この配置の変更は、第1実施形態のS13とS14との処理を逆にした処理に対応する。ただし、第2時刻t2におけるN個の第1変数xi(t2)のそれぞれに乗算する値(本実施形態においては(dt×c))が1より小さい場合には、第1乗算部48は、第1中間変数メモリ50の前段に設けられている方がよい。これにより、第1乗算部48は、第2時刻t2におけるN個の第1中間変数xi´(t2)の桁数を小さくして、行列乗算部28でのオーバフローの確率を少なくすることができる。
【0083】
第1乗算部48が第1加算部44の前段に設けられた場合、第1中間変数メモリ50は、第2時刻t2におけるN個の第1変数xi(t2)を、第2時刻t2におけるN個の第1中間変数xi´(t2)として記憶する。また、この場合、第1乗算部48は、行列乗算部28から出力された第1時刻t1におけるN個の第2中間変数bi(t1)のそれぞれに、予め設定された値(dt×c)を乗じる。そして、この場合、第1加算部44は、第1時刻t1におけるN個の第2変数yi(t1)に、第1乗算部48が予め設定された値(dt×c)を乗じた第1時刻t1におけるN個の第2中間変数bi(t1)を加算することにより、第1時刻t1におけるN個の第2変数yi(t1)を更新する。
【0084】
また、時間発展部30は、第1時刻t1におけるN個の第1中間変数xi´(t1)を、1クロックサイクルに第1数(第1数は1以上の整数)の第1中間変数xi´(t1)を含む第1中間ストリームX´として行列乗算部28へと出力してもよい。また、行列乗算部28は、第1時刻t1におけるN個の第2中間変数bi(t1)を、1クロックサイクルに第2数(第2数は1以上の整数)の第2中間変数bi(t1)を含む第2中間ストリームBとして時間発展部30へと出力してもよい。
【0085】
ここで、ストリームとは、時系列データをいう。より具体的には、ストリームとは、N個のデータを例えばP個(Pは1以上の整数)ずつのデータセットに分割し、1クロックサイクル毎に、P個のデータセットを含むデータ列をいう。
【0086】
行列乗算部28および時間発展部30は、このようなストリームを取得した場合、先に取得したデータセットから順に処理を実行する。これにより、行列乗算部28および時間発展部30は、ストリームに含まれる全てのデータの取得が完了する前に、処理を開始することができる。また、行列乗算部28および時間発展部30は、N個のデータの先頭のデータセットの算出が完了した場合、算出が完了したデータセットから順次に送信を開始する。これにより、行列乗算部28および時間発展部30は、全てのデータの算出が完了する前に、次のユニットに処理を開始させることができる。
【0087】
図4は、第2実施形態でのN個の第1中間変数x
i´、係数行列JおよびN個の第2中間変数b
iの関係を示す図である。行列乗算部28は、サンプリング時刻毎に、N個の第1中間変数(x
0´,x
1´,x
2´,…,x
i´,…,x
N-1´)を取得する。また、行列乗算部28は、N行×N列の係数を含む係数行列(J
0,0,J
0,1,J
0,2,…,J
i,j,…,J
N-1,N-1)を記憶する。
【0088】
そして、行列乗算部28は、N個の第1中間変数(x0´,x1´,x2´,…,xi´,…,xN-1´)と、係数行列(J0,0,J0,1,J0,2,…,Ji,j,…,JN-1,N-1)とを行列乗算することにより、N個の第2中間変数(b0,b1,b2,…,bi,…,bN-1)を算出する。
【0089】
第2実施形態において、行列乗算部28は、どのような処理により行列乗算を実行してもよい。また、第2実施形態において、行列乗算部28は、例えば内部にプロセッサ等を含み、プログラムにより行列乗算を実行してもよい。
【0090】
図5は、関数演算部46の構成の第1例を示す図である。第1例に係る関数演算部46は、第1のFX演算部51-1と、第1のFX加算部52-1と、第1のFY演算部53-1と、第1のFY加算部54-1とを有する。
【0091】
第1のFX演算部51-1は、第1時刻におけるN個の第1変数のそれぞれに対して、第1関数演算(FX(xi))をすることにより、N個の第2微分値を算出する。第1のFX加算部52-1は、第1のFX演算部51-1が算出したN個の第2微分値と、第1加算部44が算出したN個の更新された第2変数とを加算することにより、N個の第2更新値を算出する。
【0092】
第1のFY演算部53-1は、第1のFX加算部52-1が算出したN個の第2更新値のそれぞれに対して第2関数演算(FY(yi))をすることにより、N個の第1微分値を算出する。第1のFY加算部54-1は、第1のFY演算部53-1が算出したN個の第1微分値と第1時刻におけるN個の第1変数とを加算することにより、N個の第1更新値を算出する。
【0093】
そして、関数演算部46は、第1のFY加算部54-1が算出したN個の第1更新値を第1変数メモリ40に与える。第1変数メモリ40は、第1のFY加算部54-1が算出したN個の第1更新値を、第2時刻におけるN個の第1変数として記憶する。
【0094】
また、関数演算部46は、第1のFX加算部52-1が算出したN個の第2更新値を第2変数メモリ42に与える。第2変数メモリ42は、第1のFX加算部52-1が算出したN個の第2更新値を、第2時刻におけるN個の第2変数として記憶する。
【0095】
ここで、第1関数演算は、下記の式(31)の演算である。
FX(xi)=dt´×[(-D+p-Kxi
2)xi-c×hi×a]…(31)
【0096】
また、第2関数は、下記の式(32)の演算である。
FY(yi)=dt´×D×yi…(32)
【0097】
また、第1関数演算は、下記の式(33)の演算であってもよい。
FX(xi)=dt´×{[(-D+p)(1+xi
n)-Kxi
n+2]xi-c×hi×a}…(33)
【0098】
式(31)、(32)および(33)において、xiは、第1時刻におけるN個の第1変数のうちのi番目の第1変数、または、N個の第1更新値のうちのi番目の第1更新値である。yiは、第1加算部44が算出した更新されたN個の第2変数のうちのi番目の第2変数、または、N個の第2更新値のうちのi番目の第2更新値である。
【0099】
dt´は、予め設定された微小時間である。D、c、Kは、予め設定された定数である。hiは、i毎に設定された係数である。pおよびaは、予め定められた演算式に従ってサンプリング時刻毎に増加する値である。
【0100】
このような第1例の構成の関数演算部46は、第1実施形態におけるS16からS19までのループ処理を、S17→S18の順で、1回実行することができる。これにより、関数演算部46によれば、シンプレクティック・オイラー法と呼ばれる方法を用いて、第1時刻におけるN個の第1変数およびN個の第2変数を時間発展させて、第2時刻におけるN個の第1変数およびN個の第2変数を算出することができる。
【0101】
さらに、第1例に係る関数演算部46は、パイプライン処理により演算を実現してもよい。パイプライン処理を実行する場合、例えば、関数演算部46は、第1変数XINおよび第2変数YINを含む1つの変数ペアを、クロックサイクル毎にインデックス順に受け取る。そして、関数演算部46は、受け取った変数ペアに対して演算を実行することにより、演算処理後の第1変数XOUTおよび第2変数YOUTを含む1つの変数ペアを算出する。
【0102】
具体的には、パイプライン処理を実行する場合、関数演算部46は、2段のX転送レジスタ55-1~55-2と、2段のY転送レジスタ56-1~56-2と、1つのX出力レジスタ57と、1つのY出力レジスタ58とを、さらに有する。
【0103】
1段目のX転送レジスタ55-1は、クロックサイクル毎に、第1変数メモリ40から、第1時刻におけるN個の第1変数の中から1つの第1変数XINを取得し、取得した1つの第1変数XINを、1クロックサイクル期間保持する。1段目のY転送レジスタ56-1は、クロックサイクル毎に、第1加算部44が算出した更新されたN個の第2変数の中から、1つの第2変数YINを取得し、取得した1つの第2変数YINを、1クロックサイクル期間保持する。なお、1段目のX転送レジスタ55-1および1段目のY転送レジスタ56-1は、同一のクロックサイクルにおいて、同一のインデックスiの1つの第1変数および1つの第2変数を取得する。
【0104】
第1のFX演算部51-1は、クロックサイクル毎に、1段目のX転送レジスタ55-1に格納された第1変数XINに対して、第1関数演算を実行することにより、第2微分値を算出する。第1のFX加算部52-1は、クロックサイクル毎に、第1のFX演算部51-1が当該クロックサイクルにおいて算出した第2微分値と、1段目のY転送レジスタ56-1に格納された第2変数YINとを加算することにより、第2更新値Y1を算出する。
【0105】
2段目のX転送レジスタ55-2は、クロックサイクル毎に、直前のクロックサイクルにおいて1段目のX転送レジスタ55-1が保持していた第1変数XINを取得し、取得した第1変数XINを、1クロックサイクル期間保持する。2段目のY転送レジスタ56-2は、クロックサイクル毎に、第1のFX加算部52-1が直前のクロックサイクルにおいて算出した第2更新値Y1を取得し、取得した第2更新値Y1を1クロックサイクル期間保持する。
【0106】
第1のFY演算部53-1は、クロックサイクル毎に、2段目のY転送レジスタ56-2に格納された第2更新値Y1に対して、第2関数演算を実行することにより、第1微分値を算出する。第1のFY加算部54-1は、クロックサイクル毎に、第1のFY演算部53-1が当該クロックサイクルにおいて算出した第1微分値と、2段目のX転送レジスタ55-2に格納された第1変数XINとを加算することにより、第1更新値X1を算出する。
【0107】
X出力レジスタ57は、クロックサイクル毎に、第1のFY加算部54-1が直前のクロックサイクルにおいて算出した第1更新値X1を取得し、取得した第1更新値X1を第2時刻における1つの第1変数XOUTとして第1変数メモリ40に記憶させる。
【0108】
Y出力レジスタ58は、クロックサイクル毎に、第2段目のY転送レジスタ56-2に格納された第2更新値Y1を取得し、取得した第2更新値Y1を第2時刻における1つの第2変数YOUTとして第2変数メモリ42に記憶させる。
【0109】
このようなパイプライン処理を実行することにより、第1例に係る関数演算部46は、クロックサイクル毎に、下記のような演算を実行することができる。
【0110】
Y1=FX(XIN)+YIN
X1=FY(Y1)+XIN
YOUT=Y1
XOUT=X1
【0111】
このような第1例に係る関数演算部46は、同一のインデックスiの1つの第1変数XINおよび1つの第2変数YINを含む変数ペアに対して、第1関数演算→FX加算→第2関数演算→FY加算の一連の演算セットを、1回実行することができる。さらに、第1例に係る関数演算部46は、パイプライン処理を実行するので、複数の変数ペアに対して並列して演算を実行することができる。これにより、第1例に係る関数演算部46は、N個の変数ペアに対する演算を、短時間で完了させることができる。
【0112】
図6は、関数演算部46の構成の第2例を示す図である。関数演算部46は、
図6に示すような、第2例の構成であってもよい。第2例に係る関数演算部46は、第1例と同一の構成要素を有するが、各構成要素の配置が異なる。第2例を説明するに当たり、第1例と同一の動作をする構成要素については、同一の符号を付けて相違点を除き詳細な説明を省略する。
【0113】
第1のFY演算部53-1は、第1加算部44が算出した更新されたN個の第2変数のそれぞれに対して第2関数演算(FY(yi))をすることにより、N個の第1微分値を算出する。第1のFY加算部54-1は、第1のFY演算部53-1が算出したN個の第1微分値と第1時刻におけるN個の第1変数とを加算することにより、N個の第1更新値を算出する。
【0114】
第1のFX演算部51-1は、第1のFY加算部54-1が算出したN個の第1更新値のそれぞれに対して、第1関数演算(FX(xi))をすることにより、N個の第2微分値を算出する。第1のFX加算部52-1は、第1のFX演算部51-1が算出したN個の第2微分値と、第1加算部44が算出した更新されたN個の第2変数とを加算することにより、N個の第2更新値を算出する。
【0115】
このような第2例の構成の関数演算部46は、第1実施形態におけるS16からS19までのループ処理を、S18→S17の順で、1回実行することができる。これにより、関数演算部46によれば、シンプレクティック・オイラー法と呼ばれる方法を用いて、第1時刻におけるN個の第1変数およびN個の第2変数を時間発展させて、第2時刻におけるN個の第1変数およびN個の第2変数を算出することができる。
【0116】
さらに、第2例に係る関数演算部46は、パイプライン処理により演算を実現してもよい。この場合も、第2例に係る関数演算部46は、第1例と同一の構成要素を有するが、各構成要素の配置が異なる。
【0117】
第1のFY演算部53-1は、クロックサイクル毎に、1段目のY転送レジスタ56-1に格納された、更新された第2変数YINに対して、第2関数演算を実行することにより、第1微分値を算出する。第1のFY加算部54-1は、クロックサイクル毎に、第1のFY演算部53-1が当該クロックサイクルにおいて算出した第1微分値と、1段目のX転送レジスタ55-1に格納された第1変数XINとを加算することにより、第1更新値X1を算出する。
【0118】
2段目のX転送レジスタ55-2は、クロックサイクル毎に、第1のFY加算部54-1が直前のクロックサイクルにおいて算出した第1更新値X1を取得し、取得した第1更新値X1を1クロックサイクル期間保持する。2段目のY転送レジスタ56-2は、クロックサイクル毎に、直前のクロックサイクルにおいて1段目のY転送レジスタ56-1が保持していた第2変数YINを取得し、取得した第2変数YINを、1クロックサイクル期間保持する。
【0119】
第1のFX演算部51-1は、クロックサイクル毎に、2段目のX転送レジスタ55-2に格納された第1更新値X1に対して、第1関数演算を実行することにより、第2微分値を算出する。第1のFX加算部52-1は、クロックサイクル毎に、第1のFX演算部51-1が当該クロックサイクルにおいて算出した第1微分値と、2段目のY転送レジスタ56-2に格納された第2変数YINとを加算することにより、第2更新値Y1を算出する。
【0120】
このようなパイプライン処理を実行することにより、第2例に係る関数演算部46は、クロックサイクル毎に、下記のような演算を実行することができる。
【0121】
X1=FY(YIN)+XIN
Y1=FX(X1)+YIN
XOUT=X1
YOUT=Y1
【0122】
このような第2例に係る関数演算部46は、同一のインデックスiの1つの第1変数XINおよび1つの第2変数YINを含む変数ペアに対して、第2関数演算→FY加算→第1関数演算→FX加算の一連の演算セットを、1回実行することができる。さらに、第2例に係る関数演算部46は、パイプライン処理を実行するので、複数の変数ペアに対して並列して演算を実行することができる。これにより、第2例に係る関数演算部46は、N個の変数ペアに対する演算を、短時間で完了させることができる。
【0123】
図7は、関数演算部46の構成の第3例を示す図である。関数演算部46は、
図7に示すような、第3例の構成であってもよい。第3例に係る関数演算部46は、第1例と略同一の構成を有する。第3例を説明するに当たり、第1例と同一の動作をする構成要素については、同一の符号を付けて相違点を除き詳細な説明を省略する。
【0124】
第3例に係る関数演算部46は、第1例の構成に加えて、第2から第M(Mは2以上の整数)までの(M-1)個のFX演算部51-2~51-Mと、第2から第Mまでの(M-1)個のFX加算部52-2~52-Mと、第2から第Mまでの(M-1)個のFY演算部53-2~53-Mと、第2から第Mまでの(M-1)個のFY加算部54-2~54-Mと、をさらに有する。
【0125】
第mのFX演算部51-m(mは、2からMまでの任意の整数)は、第(m-1)のFY加算部54-(m-1)が算出したN個の第1更新値のそれぞれに対して第1関数演算をすることにより、N個の第2微分値を算出する。第mのFX加算部52-mは、第mのFX演算部51-mが算出したN個の第2微分値と第(m-1)のFX加算部52-(m-1)が算出したN個の第2更新値とを加算することにより、新たなN個の第2更新値を算出する。
【0126】
第mのFY演算部53-mは、第mのFX加算部52-mが算出したN個の第2更新値のそれぞれに対して第2関数演算をすることにより、N個の第1微分値を算出する。第mのFY加算部54-mは、第mのFY演算部53-mが算出したN個の第1微分値と第(m-1)のFY加算部54-(m-1)が算出したN個の第1更新値とを加算することにより、新たなN個の第1更新値を算出する。
【0127】
そして、関数演算部46は、第MのFY加算部54-Mが算出したN個の第1更新値を第1変数メモリ40に与える。第1変数メモリ40は、第MのFY加算部54-Mが算出したN個の第1更新値を、第2時刻におけるN個の第1変数として記憶する。
【0128】
また、関数演算部46は、第MのFX加算部52-Mが算出したN個の第2更新値を第2変数メモリ42に与える。第2変数メモリ42は、第MのFX加算部52-Mが算出したN個の第2更新値を、第2時刻におけるN個の第2変数として記憶する。
【0129】
このような第3例の構成の関数演算部46は、第1実施形態におけるS16からS19までのループ処理を、S17→S18の順で、M回実行することができる。これにより、関数演算部46によれば、シンプレクティック・オイラー法と呼ばれる方法を用いて、第1時刻におけるN個の第1変数およびN個の第2変数を時間発展させて、第2時刻におけるN個の第1変数およびN個の第2変数を算出することができる。
【0130】
さらに、第3例に係る関数演算部46は、パイプライン処理により演算を実現してもよい。この場合、関数演算部46は、2M段のX転送レジスタ55-1~55-2Mと、2M段のY転送レジスタ56-1~56-2Mと、1つのX出力レジスタ57と、1つのY出力レジスタ58とを、さらに有する。なお、これらの構成のうちの第1例で示した構成は、X出力レジスタ57およびY出力レジスタ58を除いて第1例と同様の動作をする。
【0131】
(2m-1)段目のX転送レジスタ55-(2m-1)は、クロックサイクル毎に、第(m-1)のFY加算部54-(m-1)が直前のクロックサイクルにおいて算出した第1更新値Xm-1を取得し、取得した第1更新値Xm-1を1クロックサイクル期間保持する。(2m-1)段目のY転送レジスタ56-(2m-1)は、クロックサイクル毎に、直前のクロックサイクルにおいて(2m-2)段目のY転送レジスタ56-(2m-2)が保持していた第2更新値Ym-1を取得し、取得した1つの第2更新値Ym-1を、1クロックサイクル期間保持する。
【0132】
第mのFX演算部51-mは、クロックサイクル毎に、(2m-1)段目のX転送レジスタ55-(2m-1)に格納された第1更新値Xm-1に対して、第1関数演算を実行することにより、第2微分値を算出する。第mのFX加算部52-mは、クロックサイクル毎に、第mのFX演算部51-mが当該クロックサイクルにおいて算出した第2微分値と、(2m-1)段目のY転送レジスタ56-(2m-1)に格納された第2更新値Ym-1とを加算することにより、新たな第2更新値Ymを算出する。
【0133】
2m段目のX転送レジスタ55-2mは、クロックサイクル毎に、直前のクロックサイクルにおいて(2m-1)段目のX転送レジスタ55-(2m-1)が保持していた第1更新値Xm-1を取得し、取得した1つの第1更新値Xm-1を、1クロックサイクル期間保持する。2m段目のY転送レジスタ56-2mは、クロックサイクル毎に、第mのFX加算部52-mが直前のクロックサイクルにおいて算出した第2更新値Ymを取得し、取得した第2更新値Ymを1クロックサイクル期間保持する。
【0134】
第mのFY演算部53-mは、クロックサイクル毎に、2m段目のY転送レジスタ56-2mに格納された第2更新値Ymに対して、第2関数演算を実行することにより、第1微分値を算出する。第mのFY加算部54-mは、クロックサイクル毎に、第mのFY演算部53-mが当該クロックサイクルにおいて算出した第1微分値と、2m段目のX転送レジスタ55-2mに格納された第1更新値Xm-1とを加算することにより、新たな第1更新値Xmを算出する。
【0135】
X出力レジスタ57は、クロックサイクル毎に、第MのFY加算部54-Mが直前のクロックサイクルにおいて算出した第1更新値XMを取得し、取得した第1更新値XMを第2時刻における1つの第1変数XOUTとして第1変数メモリ40に記憶させる。
【0136】
Y出力レジスタ58は、クロックサイクル毎に、第2M段目のY転送レジスタ56-2Mに格納された第2更新値YMを取得し、取得した第2更新値YMを第2時刻における1つの第2変数YOUTとして第2変数メモリ42に記憶させる。
【0137】
このようなパイプライン処理を実行することにより、第3例に係る関数演算部46は、クロックサイクル毎に、下記のような演算を実行することができる。
【0138】
Y1=FX(XIN)+YIN
X1=FY(Y1)+XIN
…
Ym=FX(Xm-1)+Ym-1
Xm=FY(Ym)+Xm-1
…
YM=FX(XM-1)+YM-1
XM=FY(YM)+XM-1
YOUT=YM
XOUT=XM
【0139】
このような第3例に係る関数演算部46は、同一のインデックスiの1つの第1変数XINおよび1つの第2変数YINを含む変数ペアに対して、第1関数演算→FX加算→第2関数演算→FY加算の一連の演算セットを、M回実行することができる。さらに、第3例に係る関数演算部46は、パイプライン処理により実行するので、複数の変数ペアに対して並列して演算を実行することができる。これにより、第3例に係る関数演算部46は、N個の変数ペアに対する演算を、短時間で完了させることができる。
【0140】
図8は、関数演算部46の構成の第4例を示す図である。関数演算部46は、
図8に示すような、第4例の構成であってもよい。第4例に係る関数演算部46は、第2例と略同一の構成を有する。第4例を説明するに当たり、第2例と同一の動作をする構成要素については、同一の符号を付けて相違点を除き詳細な説明を省略する。
【0141】
第mのFY演算部53-m(mは、2からMまでの任意の整数)は、第(m-1)のFX加算部52-(m-1)が算出したN個の第2更新値のそれぞれに対して第2関数演算をすることにより、N個の第1微分値を算出する。第mのFY加算部54-mは、第mのFY演算部53-mが算出したN個の第1微分値と第(m-1)のFY加算部54-mが算出したN個の第1更新値とを加算することにより、新たなN個の第1更新値を算出する。
【0142】
第mのFX演算部51-mは、第mのFY加算部54-mが算出したN個の第1更新値のそれぞれに対して第1関数演算をすることにより、N個の第2微分値を算出する。第mのFX加算部52-mは、第mのFX演算部51-mが算出したN個の第2微分値と第(m-1)のFX加算部52-(m-1)が算出したN個の第2更新値とを加算することにより、新たなN個の第2更新値を算出する。
【0143】
このような第4例の構成の関数演算部46は、第1実施形態におけるS16からS19までのループ処理を、S18→S17の順で、M回実行することができる。これにより、関数演算部46によれば、シンプレクティック・オイラー法と呼ばれる方法を用いて、第1時刻におけるN個の第1変数およびN個の第2変数を時間発展させて、第2時刻におけるN個の第1変数およびN個の第2変数を算出することができる。
【0144】
さらに、第4例に係る関数演算部46は、パイプライン処理により演算を実現してもよい。この場合も、関数演算部46は、2M段のX転送レジスタ55-1~55-2Mと、2M段のY転送レジスタ56-1~56-2Mと、1つのX出力レジスタ57と、1つのY出力レジスタ58とを、さらに有する。なお、これらの構成のうちの第2例で示した構成は、X出力レジスタ57およびY出力レジスタ58を除いて第2例と同様の動作をする。
【0145】
(2m-1)段目のX転送レジスタ55-(2m-1)は、クロックサイクル毎に、直前のクロックサイクルにおいて(2m-2)段目のX転送レジスタ55-(2m-2)が保持していた第1更新値Xm-1を取得し、取得した1つの第1更新値Xm-1を、1クロックサイクル期間保持する。(2m-1)段目のY転送レジスタ56-(2m-1)は、クロックサイクル毎に、第(m-1)のFX加算部52-(m-1)が直前のクロックサイクルにおいて算出した第2更新値Ym-1を取得し、取得した第2更新値Ym-1を1クロックサイクル期間保持する。
【0146】
第mのFY演算部53-mは、クロックサイクル毎に、(2m-1)段目のY転送レジスタ56-(2m-1)に格納された第2更新値Ym-1に対して、第2関数演算を実行することにより、第1微分値を算出する。第mのFY加算部54-mは、クロックサイクル毎に、第mのFY演算部53-mが当該クロックサイクルにおいて算出した第1微分値と、(2m-1)段目のX転送レジスタ55-(2m-1)に格納された第1更新値Xm-1とを加算することにより、新たな第1更新値Xmを算出する。
【0147】
2m段目のX転送レジスタ55-2mは、クロックサイクル毎に、第mのFY加算部54-mが直前のクロックサイクルにおいて算出した第1更新値Xmを取得し、取得した第1更新値Xmを1クロックサイクル期間保持する。2m段目のY転送レジスタ56-2mは、クロックサイクル毎に、直前のクロックサイクルにおいて(2m-1)段目のY転送レジスタ56-(2m-1)が保持していた第2更新値Ym-1を取得し、取得した1つの第2更新値Ym-1を、1クロックサイクル期間保持する。
【0148】
第mのFX演算部51-mは、クロックサイクル毎に、2m段目のX転送レジスタ55-2mに格納された第1更新値Xmに対して、第1関数演算を実行することにより、第2微分値を算出する。第mのFX加算部52-mは、クロックサイクル毎に、第mのFX演算部51-mが当該クロックサイクルにおいて算出した第2微分値と、2m段目のY転送レジスタ56-2mに格納された第2更新値Ym-1とを加算することにより、新たな第2更新値Ymを算出する。
【0149】
X出力レジスタ57は、クロックサイクル毎に、第2M段目のX転送レジスタ55-2Mに格納された第1更新値XMを取得し、取得した第1更新値XMを第2時刻における1つの第1変数XOUTとして第1変数メモリ40に記憶させる。
【0150】
Y出力レジスタ58は、クロックサイクル毎に、第MのFX加算部52-Mが直前のクロックサイクルにおいて算出した第2更新値YMを取得し、取得した第2更新値YMを第2時刻における1つの第2変数YOUTとして第2変数メモリ42に記憶させる。
【0151】
このようなパイプライン処理を実行することにより、第4例に係る関数演算部46は、クロックサイクル毎に、下記のような演算を実行することができる。
【0152】
X1=FY(YIN)+XIN
Y1=FX(X1)+YIN
…
Xm=FY(Ym-1)+Xm-1
Ym=FX(Xm)+Ym-1
…
XM=FY(YM-1)+XM-1
YM=FX(XM)+YM-1
XOUT=XM
YOUT=YM
【0153】
このような第4例に係る関数演算部46は、同一のインデックスiの1つの第1変数XINおよび1つの第2変数YINを含む変数ペアに対して、第2関数演算→FY加算→第1関数演算→FX加算の一連の演算セットを、M回実行することができる。さらに、第4例に係る関数演算部46は、パイプライン処理により実行するので、複数の変数ペアに対して並列して演算を実行することができる。これにより、第4例に係る関数演算部46は、N個の変数ペアに対する演算を、短時間で完了させることができる。
【0154】
(第3実施形態)
第3実施形態に係る計算装置10について説明する。
【0155】
図9は、第3実施形態でのN個の第1中間変数x
i´、係数行列JおよびN個の第2中間変数b
iの関係を示す図である。
【0156】
係数行列Jは、Pr3個の分割行列(JG0,JG1,…JGk,…,JGPr3-1)に分割される。Pr3個の分割行列のそれぞれは、(N/Pr3)行×N列の係数Ji,jを含む。Pr3は、Nの約数である。また、kは、0からPr3-1までの任意の整数である。
【0157】
また、N個の第2中間変数biは、Pr3個のブロック(BG0,BG1,…BGk,…,BGPr3-1)に分割される。Pr3個のブロックのそれぞれは、(N/Pr3)個の第2中間変数biを含む。さらに、Pr3個のブロックは、Pr3個の分割行列に一対一で対応付けられる。例えば、k番目のブロックBGkは、k番目の分割行列JGkに対応する。
【0158】
第3実施形態において、行列乗算部28は、N個の第1中間変数xi´と、Pr3個の分割行列のそれぞれとを別個に行列乗算することにより、Pr3個のブロックを算出する。
【0159】
図10は、第3実施形態に係る行列乗算部28の構成を、時間発展部30とともに示す図である。
【0160】
行列乗算部28は、Pr3個の分割行列に一対一で対応付けられたPr3個の分割行列乗算部60を有する。Pr3個の分割行列乗算部60のそれぞれは、N個の第1中間変数xi´と、対応する分割行列とを行列乗算することにより、対応するブロックに含まれる(N/Pr3)個の第2中間変数biを算出する。
【0161】
Pr3個の分割行列乗算部60は、同一の構成を有する。Pr3個の分割行列乗算部60は、例えば、互いに異なる半導体装置に実装された回路であってよい。
【0162】
Pr3個の分割行列乗算部60のそれぞれは、N個の第1中間変数xi´をストリーム化した第1中間ストリームX´およびN個の第2中間変数biをストリーム化した第2中間ストリームBを受信する。また、Pr3個の分割行列乗算部60のそれぞれは、第1中間ストリームX´および第2中間ストリームBを送信する。
【0163】
Pr3個の分割行列乗算部60は、直列に接続される。先頭の分割行列乗算部60は、時間発展部30から第1中間ストリームX´を受信する。また、先頭の分割行列乗算部60は、第2中間ストリームBとして、ダミーデータを受信する。なお、ダミーデータは、どのブロックから送信されてもよい。先頭以外の分割行列乗算部60は、直前段の分割行列乗算部60から送信された第1中間ストリームX´および第2中間ストリームBを受信する。
【0164】
末尾以外の分割行列乗算部60は、直後段の分割行列乗算部60へ第1中間ストリームX´および第2中間ストリームBを送信する。末尾の分割行列乗算部60は、第2中間ストリームBを時間発展部30へと送信する。末尾の分割行列乗算部60から送信された第1中間ストリームX´は、廃棄される。なお、末尾の分割行列乗算部60から送信された第1中間ストリームX´は、時間発展部30に受信された後、時間発展部30内で廃棄されてもよい。
【0165】
Pr3個の分割行列乗算部60のそれぞれは、バッファ部62と、分割行列メモリ64と、実行部66と、セレクタ68とを有する。
【0166】
先頭の分割行列乗算部60のバッファ部62は、時間発展部30から出力された第1中間ストリームX´を取得し、取得した第1中間ストリームX´を一定時間記憶して出力する。先頭以外の分割行列乗算部60のバッファ部62は、直前段の分割行列乗算部60から出力された第1中間ストリームX´を取得し、取得した第1中間ストリームX´を一定時間記憶して出力する。
【0167】
分割行列メモリ64は、対応する分割行列に含まれる(N/Pr3)行×N列の係数Ji,jを記憶する。実行部66は、バッファ部62に記憶された第1中間ストリームX´および分割行列メモリ64に記憶された分割行列に基づき、対応するブロックに含まれる(N/Pr3)個の第2中間変数biを算出する。
【0168】
ここで、実行部66は、対応するブロックに含まれる(N/Pr3)個の第2中間変数biを、1クロックサイクルにPr1個の第2中間変数biを含む第2中間ストリームBとして出力する。Pr1は、Nの約数である。
【0169】
さらに、実行部66は、他の分割行列乗算部60に含まれる実行部66とは異なるクロックサイクルにおいて、第2中間ストリームBを出力する。従って、第2中間ストリームBは、同一のクロックサイクルに、複数の分割行列乗算部60から出力されることはない。
【0170】
先頭の分割行列乗算部60のセレクタ68は、先頭の分割行列乗算部60の実行部66が第2中間ストリームBを出力したクロックサイクルにおいて、先頭の分割行列乗算部60の実行部66が出力した第2中間ストリームBを選択して出力する。また、先頭の分割行列乗算部60のセレクタ68は、先頭の分割行列乗算部60の実行部66が第2中間ストリームBを出力していないクロックサイクルにおいて、ダミーデータを選択して出力する。
【0171】
また、先頭を除いたk番目の分割行列乗算部60のセレクタ68は、k番目の分割行列乗算部60の実行部66が第2中間ストリームBを出力したクロックサイクルにおいて、k番目の分割行列乗算部60の実行部66が出力した第2中間ストリームBを選択して出力する。また、k番目の分割行列乗算部60の実行部66が第2中間ストリームBを出力していないクロックサイクルにおいて、前段の分割行列乗算部60のセレクタ68が出力した第2中間ストリームBを選択して出力する。
【0172】
図11は、第3実施形態に係る行列乗算部28および時間発展部30の実装例を示す図である。
【0173】
第3実施形態に係るPr3個の行列乗算部28および時間発展部30は、例えば、それぞれが独立した半導体チップである、(Pr3+1)個のチップ70-1~70-(Pr3+1)に実装することができる。
【0174】
第1から第Pr3のチップ70-1~70-Pr3のそれぞれは、分割行列乗算部60を含む。第(Pr3+1)のチップ70-(Pr3+1)は、時間発展部30を含む。
【0175】
また、それぞれのチップ70は、受信部74および送信部76を含む。受信部74は、データ受信用のリンクポートである。送信部76は、データ送信用のリンクポートである。受信部74および送信部76は、全二重通信をする送受信部であってもよい。また、それぞれのチップ70は、さらなる通信ポートを含んでもよい。例えば、それぞれのチップ70は、2つの独立な受信用リンクポートおよび2つの独立な送信用リンクポートを含んでもよい。
【0176】
送信部76は、1クロックサイクル分の第1中間変数xi´および第2中間変数biを合成して、合成ストリームとして出力する。第1中間ストリームX´のビット幅がWx´であり、第2中間ストリームBのビット幅がWbとした場合、合成ストリームは、Wx´+Wb以上のビット幅を有する。
【0177】
受信部74および送信部76のそれぞれは、例えば、FIFOメモリを含む。送信部76は、第1中間ストリームX´および第2中間ストリームBを合成して、FIFOに書き込む。そして、送信部76は、FIFOに格納された合成ストリームを順次に送信する。また、受信部74は、受信した合成ストリームをFIFOに書き込む。そして、受信部74は、FIFOから合成ストリームを順に読み出して、第1中間ストリームX´および第2中間ストリームBに分離する。
【0178】
2つのチップ70の間は、通信リンク72を介して接続される。第1のチップ70-1の出力端子は、第2のチップ70-2の入力端子に、第1の通信リンク72-1を介して接続される。第kのチップ70-kの出力端子は、第(k+1)のチップ70-(k+1)の入力端子に、第kの通信リンク72-kを介して接続される。そして、第(Pr3+1)のチップ70-(Pr3+1)の出力端子は、第1のチップ70-1の入力端子に、第(Pr3+1)の通信リンク72-(Pr3+1)を介して接続される。このように、(Pr3+1)個のチップ70-1~70-(Pr3+1)は、リングトポロジの態様で相互接続される。
【0179】
例えば、チップ70の入力端子および出力端子は、QSFP(Quad Small Form-factor Pluggable)ポートであってよい。また、通信リンク72は、QSFP対応光学ケーブルまたはQSFP対応メタルケーブルであってよい。また、2つのチップ70の間の通信リンク72は、高速シリアルリンク,イーサーネットリンクまたはpeer-to-peerリンクであってもよい。
【0180】
なお、本実施形態では、それぞれのチップ70は、合成ストリームを送受信しているが、第1中間ストリームX´および第2中間ストリームBをそれぞれ別個に送受信してもよい。この場合、(Pr3+1)個のチップ70-1~70-(Pr3+1)は、2系統のリングトポロジの態様で相互接続される。
【0181】
このような第3実施形態に係る計算装置10は、最適化問題により決定すべき第1変数xiの個数が変更しても、分割行列乗算部60の個数を変更することにより、対応することができる。従って、計算装置10は、最適化問題により決定すべき第1変数xiの個数が大幅に増加した場合、例えば、同一の構成のチップ70の数を増加させれば、対応することができる。また、計算装置10は、複数の分割行列乗算部60により並列的に行列演算が実行されるので、最適化問題を短時間で完了させることができる。
【0182】
(第4実施形態)
第4実施形態に係る計算装置10について説明する。
【0183】
図12は、第4実施形態でのN個の第1中間変数x
i´、係数行列JおよびN個の第2中間変数b
iの関係を示す図である。第4実施形態において、N個の第1中間変数x
i´、係数行列JおよびN個の第2中間変数b
iは、第3実施形態と同様の関係に加えて、さらに、
図12に示すような関係がある。
【0184】
N個の第1中間変数xi´は、Ns個のデータセットに分割される。Ns個のデータセットのそれぞれは、Pc個の第1中間変数xi´を含む。NsおよびPcは、Nの約数である。例えば、N個の第1中間変数xi´は、x´b0、x´b1、…、x´bNsのNs個のデータセットに分割される。
【0185】
Pr3個の分割行列のそれぞれは、Pr2個のサブ行列に分割される。Pr2個のサブ行列のそれぞれは、Pr1行×N列の係数Ji,jを含む。例えば、JG0の分割行列は、jb0、jb1、…、jbs、…、jbPr2-1のPr2個のサブ行列に分割される。
【0186】
Pr1およびPr2は、Nの約数であり、Pr1×Pr2×Pr3は、Nとなる。sは、0からPr2-1までの任意の整数である。
【0187】
N個の第2中間変数biに含まれるPr3個のブロックのそれぞれは、Pr2個のサブブロックに分割される。Pr2個のサブブロックのそれぞれは、Pr1個の第2中間変数biを含む。例えば、BG0のブロックは、bb0、bb1、…、bbs、…、bbPr2-1のPr2個のサブブロックに分割される。
【0188】
そして、k番目のブロックに含まれるPr2個のサブブロックは、k番目の分割行列に含まれるPr2個のサブ行列に一対一で対応付けられる。例えば、k番目のブロックBGkに含まれるs番目のサブブロックは、k番目の分割行列JGkに含まれるs番目のサブ行列jbsに対応する。
【0189】
第4実施形態において、分割行列乗算部60は、対応する分割行列に含まれるサブ行列毎に、N個の第1中間変数xi´との行列乗算を実行する。例えば、k番目の分割行列乗算部60は、N個の第1中間変数xi´と、k番目の分割行列JGkに含まれるPr2個のサブ行列のそれぞれとを別個に行列乗算をすることにより、k番目のブロックBGkに含まれるPr2個のサブブロックを算出する。
【0190】
図13は、第4実施形態に係る分割行列乗算部60の構成を示す図である。分割行列乗算部60に含まれる実行部66は、P
r2個のサブ行列乗算部80と、多重化部82とを含む。
【0191】
Pr2個のサブ行列乗算部80は、対応する分割行列に含まれるPr2個のサブ行列に一対一で対応付けられる。例えば、k番目の分割行列に対応付けられた分割行列乗算部60に含まれるPr2個のサブ行列乗算部80は、k番目の分割行列に含まれるPr2個のサブ行列に一対一で対応付けられる。
【0192】
第k番目の分割行列乗算部60に含まれるPr2個のサブ行列乗算部80のそれぞれは、N個の第1中間変数xi´と、対応するサブ行列とを行列乗算することにより、対応するサブブロックに含まれるPr1個の第2中間変数biを算出する。
【0193】
また、Pr2個のサブ行列乗算部80のそれぞれは、対応するサブブロックに含まれるPr1個の第2中間変数biを1クロックサイクルで並列に出力する。例えば、k番目の分割行列乗算部60に含まれるs番目のサブ行列乗算部80は、k番目のブロックに含まれるs番目のサブブロックに含まれるPr1個の第2中間変数biを、同一のクロックサイクルに出力する。
【0194】
さらに、Pr2個のサブ行列乗算部80のそれぞれは、他のサブ行列乗算部80とは異なるクロックサイクルにおいて、Pr1個の第2中間変数biを出力する。つまり、第2中間変数biは、同一のクロックサイクルに、複数のサブ行列乗算部80から出力されることはない。
【0195】
多重化部82は、Pr2個のサブ行列乗算部80のそれぞれから出力されたPr1個の第2中間変数biのセットを多重化することにより、1クロックサイクルにPr1個の第2中間変数biを含む第2中間ストリームBを生成する。例えば、k番目の分割行列乗算部60に含まれる多重化部82は、k番目のブロックに含まれるPr2個のサブブロックを含む第2中間ストリームBを、Pr2クロックサイクルで出力する。
【0196】
分割行列乗算部60に含まれるバッファ部62は、シフトレジスタとして機能するPr2段のレジスタ84と、バッファ内受信部86と、バッファ内送信部88とを含む。
【0197】
Pr2段のレジスタ84は、Pr2個のサブ行列乗算部80に一対一に対応付けられる。Pr2段のレジスタ84のそれぞれは、Pc個の第1中間変数xi´を含むデータセットを1クロックサイクル記憶する。Pr2段のレジスタ84のそれぞれは、次のクロックサイクルにおいて、記憶しているPc個の第1中間変数xi´を含むデータセットを次段のレジスタ84に並列に転送する。
【0198】
バッファ内受信部86は、第1中間ストリームX´を受信し、受信した第1中間ストリームX´をPc個のワード幅のストリームに変換する。そして、バッファ内受信部86は、1クロックサイクル毎に、Pc個の第1中間変数xi´を含むデータセットを先頭のレジスタ84に書き込む。
【0199】
バッファ内送信部88は、1クロックサイクル毎に、最終段のレジスタ84からPc個の第1中間変数xi´を含むデータセットを読み出し、第1中間ストリームX´に変換する。そして、バッファ内送信部88は、第1中間ストリームX´を送信する。
【0200】
Pr2個のサブ行列乗算部80のそれぞれは、対応するレジスタ84に格納されているPc個の第1中間変数xi´を含むデータセットを1クロックサイクル毎に読み出す。Pr2個のサブ行列乗算部80のそれぞれは、1クロックサイクル毎に、読み出したPc個の第1中間変数xi´のそれぞれと、対応するサブ行列における対応する列の係数Ji,jと乗算する。そして、Pr2個のサブ行列乗算部80のそれぞれは、対応するサブ行列に含まれる行毎に、第1中間変数xi´と係数Ji,jとの乗算結果を累積加算する。これにより、Pr2個のサブ行列乗算部80のそれぞれは、対応するサブブロックに含まれるPr1個の第2中間変数biを算出することができる。
【0201】
ここで、Pr2個のサブ行列乗算部80のそれぞれは、対応するレジスタ84に、N個の第1中間変数xi´のうちの先頭の第1中間変数x0´から末尾の第1中間変数xN-1´が格納される前の期間、乗算および累積加算を実行する。そして、Pr2個のサブ行列乗算部80のそれぞれは、対応するレジスタ84に末尾の第1中間変数xN-1´が格納されたクロックサイクルから所定数のクロックサイクル経過後に、対応するサブブロックに含まれるPr1個の第2中間変数biを出力する。従って、Pr2個のサブ行列乗算部80のそれぞれは、互いに異なるクロックサイクルに、対応するサブブロックに含まれるPr1個の第2中間変数biを出力することができる。
【0202】
このような構成の第4実施形態に係る計算装置10は、Pr3×Pr2の並列度で行列乗算をすることができる。これにより、第4実施形態に係る計算装置10によれば、行列乗算を高速に実行することができる。
【0203】
(第5実施形態)
第5実施形態に係る計算装置10について説明する。
【0204】
図14は、第5実施形態でのN個の第1中間変数x
i´、係数行列JおよびN個の第2中間変数b
iの関係を示す図である。第5実施形態において、N個の第1中間変数x
i´、係数行列JおよびN個の第2中間変数b
iは、第4実施形態と同様の関係に加えて、さらに、
図14に示すような関係がある。
【0205】
Pr3個の分割行列のそれぞれは、Pr2個のサブ行列に分割される。さらに、Pr2個のサブ行列のそれぞれは、Pc個の列単位で、Ns個の係数セットに分割される。それぞれの係数セットは、Pr1行×Pc列の係数Ji,jを含む。例えば、JG0の分割行列に含まれるjb0のサブ行列は、jb0(0)、jb0(1)、…、jb0(Ns-1)のNs個の係数セットに分割される。
【0206】
また、Ns個の係数セットは、N個の第1中間変数xi´をPc個毎に分割したNs個のデータセットに一対一に対応する。
【0207】
第5実施形態において、サブ行列乗算部80は、1つの係数セットに含まれるPr1個の行のそれぞれについて、Pc個の係数Ji,jと対応するPc個の第1中間変数xi´との乗累算値を算出する。そして、サブ行列乗算部80は、Pr1個の行毎に、Ns個の係数セットのそれぞれについて算出した全ての乗累算値を加算する。これにより、サブ行列乗算部80は、Pr1個の行のそれぞれについて、N個の係数Ji,jとN個の第1中間変数xi´とを乗累算することができる。
【0208】
図15は、第6実施形態に係るサブ行列乗算部80の構成を、対応するレジスタ84とともに示す図である。それぞれのサブ行列乗算部80は、P
r1個の乗累算部90を含む。
【0209】
Pr1個の乗累算部90は、対応するサブ行列に含まれるPr1個の行に一対一で対応付けられる。例えば、k番目の分割行列に対応付けられた分割行列乗算部60に含まれるs番目のサブ行列に対応付けられたPr1個の乗累算部90は、k番目の分割行列に含まれるs番目のサブ行列に含まれるPr1個の行に一対一で対応付けられる。
【0210】
Pr1個の乗累算部90は、全て同一の構成である。Pr1個の乗累算部90のそれぞれは、係数行列Jにおける対応する行と、N個の第1中間変数xi´とを乗累算することにより、対応するサブブロックに含まれる対応する位置の第2中間変数biを算出する。Pr1個の乗累算部90は、第2中間変数biを並行に算出して、同一のクロックサイクルに出力する。
【0211】
より詳しくは、Pr1個の乗累算部90のそれぞれは、Pr2段のレジスタ84のうちの対応するレジスタ84に順次に記憶される、第1中間ストリームX´の先頭の第1中間変数x0´から末尾のN個の第1中間変数xN-1´までを、クロックサイクル毎に取得する。この場合、Pr1個の乗累算部90のそれぞれは、1クロックサイクルに、Pc個の第1中間変数xi´を含むデータセットを取得する。そして、Pr1個の乗累算部90のそれぞれは、データセットの取得をNs(Ns=N/Pc)クロックサイクルに渡って実行することにより、Ns個のデータセットを取得する。また、Pr1個の乗累算部90のうちのp番目(pは、0からPr1-1までの任意の整数)の乗累算部90は、1クロックサイクルに、取得したデータセットに対応する係数セットに含まれる、p番目に対応する行に含まれるPc個の係数((jp,s0)~(jp,SPc-1))を取得する。そして、Pr1個の乗累算部90のそれぞれは、係数セットに含まれる対応するPc個の係数を、Nsクロックサイクルに渡って取得する。Pr1個の乗累算部90のそれぞれは、1クロックサイクル毎に、Pc個の第1中間変数xi´と、対応する行に含まれる対応するPc個の係数Ji,jとを乗累算する。そして、Pr1個の乗累算部90のそれぞれは、乗累算結果を、Nsクロックサイクルに渡って累積加算することにより、第2中間変数biを算出する。
【0212】
図16は、分割行列メモリ64に記憶された分割行列を示す図である。分割行列メモリ64は、分割行列をP
r2個のサブ行列に分割して記憶する。P
r2個のサブ行列のそれぞれは、対応するサブ行列乗算部80へと並列に出力される。
【0213】
Pr2個のサブ行列のそれぞれは、Ns個の係数セットを含む。Ns個の係数セットのそれぞれは、Pc×Pr1個の係数を含む。分割行列メモリ64は、Pr2個のサブ行列のそれぞれについて、1クロックサイクルにおいて、1つの係数セットに含まれるPc×Pr1個の係数を並列に出力することが可能となっている。
【0214】
図17は、1つのサブ行列乗算部80に含まれるP
r1個の乗累算部90と、そのサブ行列乗算部80に送信されるサブ行列を示す図である。
【0215】
1つのサブ行列乗算部80に含まれるPr1個の乗累算部90のそれぞれには、1クロックサイクル毎に、対応するレジスタ84に格納されたPc個の第1中間変数xi´を含むデータセットがブロードキャストされる。
【0216】
分割行列メモリ64は、それぞれのサブ行列について、Ns個の係数セットを含む。分割行列メモリ64は、1クロックサイクル毎に、それぞれのサブ行列に含まれる1つの係数セットが、ポインタにより特定される。より具体的には、分割行列メモリ64は、そのサブ行列に対応するレジスタ84に格納されたデータセットに対応する係数セットが、特定される。
【0217】
分割行列メモリ64は、クロックサイクル毎に、ポインタにより特定された係数セットに含まれるPc×Pr1個の係数を並列に出力する。係数セットに含まれるPc×Pr1個の係数のそれぞれは、出力先の乗累算部90が予め定められている。分割行列メモリ64は、1つの係数セットに含まれるPc×Pr1個の係数のそれぞれを、予め定められた乗累算部90へと出力する。例えば、係数セットにおける先頭からPc番目までのPc個の係数は、1番目の乗累算部90に出力される。また、例えば、(Pc+1)番目から(2×Pc)個目までのPc個の係数は、2番目の乗累算部90に出力される。また、(Pr1-Pc)番目からPr1番目までのPc個の係数は、Pr1番目の乗累算部90に出力される。
【0218】
図18は、乗累算部90の構成を示す図である。乗累算部90は、P
c個の乗算器92と、加算器94と、累加算器96とを含む。乗累算部90は、クロックサイクル毎に、P
c個の第1中間変数x
i´を含むデータセットと、P
c個の係数J
i,jを含む係数セットとを取得する。
【0219】
データセットに含まれるPc個の第1中間変数xi´と、係数セットに含まれるPc個の係数Ji,jとは、一対一で対応する。また、Pc個の乗算器92は、データセットに含まれるPc個の第1中間変数xi´、および、係数セットに含まれるPc個の係数Ji,jに一対一で対応する。Pc個の乗算器92のそれぞれは、データセットに含まれる対応する1つの第1中間変数xi´と、係数セットに含まれる対応する1つの係数Ji,jとを乗算することにより、乗算値を出力する。Pc個の乗算器92のそれぞれは、クロックサイクル毎に、乗算値を出力する。
【0220】
加算器94は、クロックサイクル毎に、Pc個の乗算器92から出力されたPc個の乗算値を加算することにより、乗累算値を算出する。累加算器96は、クロックサイクル毎に、加算器94から出力された乗累算値を累積加算する。また、累加算器96は、対応するレジスタ84に、第1中間ストリームX´における先頭の第1中間変数x0´が格納されたタイミング(S0=0)において、累積加算値を0にリセットする。
【0221】
このような構成の乗累算部90は、Pr2段のレジスタ84のうちの対応するレジスタ84に順次に記憶される、第1中間ストリームX´の先頭の第1中間変数x0´から末尾の第1中間変数xN-1´までのN個の第1中間変数xi´を、クロックサイクル毎に取得する。さらに、乗累算部90は、取得したそれぞれの第1中間変数xi´と、係数行列Jにおける対応する行に含まれる、取得した第1中間変数xi´に対応する列の係数Ji,jとを乗算する。そして、乗累算部90は、第1中間変数xi´と係数Ji,jとの乗算結果を、第1中間ストリームX´の先頭の第1中間変数x0´から末尾の第1中間変数xN-1´まで累積加算する。このような処理により、乗累算部90は、対応するサブブロックに含まれる対応する位置の第2中間変数biを算出することができる。
【0222】
図19は、第5実施形態におけるパラメータの具体的な値の一例、および、処理タイミングの一例を示す図である。
【0223】
図19の例において、N=16384である。また、
図19の例において、P
c=4、N
S=4096である。また、
図19の例において、P
r1=8、P
r2=256、P
r3=8である。また、
図19において、t0、t1、t2、…、t6143は、クロックサイクルの順序を表す。
【0224】
N個の第1中間変数xi´における先頭のデータセットは、t0に、先頭の行列乗算部28における先頭のレジスタ84に格納される。従って、JG0の分割行列におけるjb0のサブ行列における先頭の係数セットは、t0に読み出される。
【0225】
また、N個の第1中間変数xi´における末尾のデータセットは、t4095に、先頭の行列乗算部28における先頭のレジスタ84に格納される。従って、JG0の分割行列におけるjb0のサブ行列における末尾の係数セットは、t4095に読み出される。
【0226】
そして、N個の第2中間変数biにおける先頭のブロックは、JG0の分割行列におけるjb0のサブ行列における末尾の係数セットの乗累算が完了したクロックサイクル(t4095)以後に、出力可能となる。従って、第2中間変数biにおける先頭のブロックは、t4095+α(αは、所定の遅延時間)に出力される。
【0227】
N個の第1中間変数xi´における先頭のデータセットは、t0から(Pr1×Pr3=2048)クロックサイクル遅延された後に、最後の行列乗算部28における最後のレジスタ84に格納される。従って、JGPr3-1の分割行列におけるjbPr2-1のサブ行列における先頭の係数セットは、t2047に読み出される。
【0228】
また、N個の第1中間変数xi´における末尾のデータセットは、t4095から(Pr1×Pr3=2048)クロックサイクル遅延された後に、最後の行列乗算部28における最後のレジスタ84に格納される。従って、JGPr3-1の分割行列におけるjbPr2-1のサブ行列における末尾の係数セットは、t6143に読み出される。
【0229】
そして、N個の第2中間変数biにおける末尾のブロックは、JGPr3-1の分割行列におけるjbPr2-1のサブ行列における末尾の係数セットの乗累算が完了したクロックサイクル(t6143)以後に、出力可能となる。従って、第2中間変数biにおける末尾のブロックは、t6143+αにおいて、出力される。
【0230】
このような構成の第5実施形態に係る計算装置10は、Pr3×Pr2×Pr1の並列度で行列乗算をすることができる。これにより、第5実施形態に係る計算装置10によれば、行列乗算を高速に実行することができる。
【0231】
(第6実施形態)
第6実施形態に係る計算装置10について説明する。
【0232】
図20は、第6実施形態に係る時間発展部30の構成を、複数の行列乗算部28とともに示す図である。第6実施形態において、それぞれの行列乗算部28は、1クロックサイクルにP
r1個の第2中間変数b
iを含む第2中間ストリームBを出力する。そして、第6実施形態において、時間発展部30は、1クロックサイクルにP
r1個の第2中間変数b
iを含む第2中間ストリームBを受信する。
【0233】
そして、第6実施形態に係る時間発展部30は、Pr1個の第1変数メモリ40と、Pr1個の第2変数メモリ42と、Pr1個の第1加算部44と、Pr1個の関数演算部46と、Pr1個の第1乗算部48と、1個の第1中間変数メモリ50とを有する。
【0234】
Pr1個の第1変数メモリ40、Pr1個の第2変数メモリ42、Pr1個の第1加算部44、Pr1個の関数演算部46およびPr1個の第1乗算部48は、1クロックサイクルに含まれるPr1個の第2中間変数biに一対一で対応する。
【0235】
そして、Pr1個の第1加算部44のそれぞれおよびPr1個の関数演算部46のそれぞれは、1クロックサイクルに含まれるPr1個の第2中間変数biのうち対応する1つの第2中間変数biについての演算処理を実行する。また、Pr1個の第1変数メモリ40のそれぞれおよびPr1個の第2変数メモリ42のそれぞれは、1クロックサイクルに含まれるPr1個の第2中間変数biのうち対応する1つの第2中間変数biを用いて算出された第1変数xiおよび第2変数yiを記憶する。また、Pr1個の第1乗算部48のそれぞれは、1クロックサイクルに含まれるPr1個の第2中間変数biのうち対応する1つの第2中間変数biを用いて算出された第1変数xiに対する演算処理を実行する。
【0236】
このように、第6実施形態に係る時間発展部30は、1クロックサイクルに含まれるPr1個の第2中間変数biに対して、N個の第1変数xiおよびN個の第2変数yiの算出処理を、Pr1の並列度で実行する。これにより、第6実施形態に係る計算装置10は、N個の第1変数xiおよびN個の第2変数yiの算出処理を高速に実行することができる。
【0237】
図21は、第1中間変数x
i´および第2中間変数b
iの出力タイミングを示す図である。より詳しくは、
図21の(A)は、時間発展部30から先頭の行列乗算部28に第1中間変数x
i´が出力されるタイミングを示す。
図21の(B)は、末尾の行列乗算部28から時間発展部30へ第2中間変数b
iが出力されるタイミングを示す。
図21の(C)は、時間発展部30による第1中間変数x
i´の算出タイミングを示す。
【0238】
第1中間変数x
i´は、P
c個の並列度で転送がされる。従って、
図21の(A)に示すように、第1時刻における第1中間変数(x´b0~x´b4095(t
1))の転送期間は、N
S(=N/P
c)クロックサイクルとなる。
【0239】
また、第2中間変数b
iは、P
r1個の並列度で転送がされる。従って、
図21の(B)に示すように、第1時刻における第2中間変数(bb0~bb2047(t
1))の転送期間は、N/P
r1クロックサイクルとなる。
【0240】
また、時間発展部30は、P
r1個の並列度で処理が実行される。従って、
図21の(C)に示すように、第2時刻における第2中間変数(bb0~bb2047(t
2))の演算期間は、N/P
r1クロックサイクルとなる。
【0241】
ここで、Laは、第1時刻における最後の第1中間変数(x´b4095(t1))の出力が完了してから、第1時刻における最初の第2中間変数(bb0(t1))の出力が開始するまでの遅延時間である。Lbは、第1時刻における最初の第2中間変数(bb0(t1))の出力が開始してから、第2時刻における最初の第1中間変数(x´b0(t2))が算出されるまでの遅延時間である。Lcは、第2時刻における最初の第1中間変数(x´b0(t2))が算出されてから、第2時刻における最初の第1中間変数(x´b0(t2))が出力されるまでの遅延時間である。
【0242】
ここで、あるループ処理の開始から次のループ処理の開始までの期間(1ループ期間)は、NS+La+Lb+Lcとなる。計算装置10は、(Lb+Lc)を、第1時刻における第2中間変数(bb0~bb2047(t1))の転送期間(N/Pr1)より短くすることができる。従って、計算装置10では、第1時刻における第2中間変数(bb0~bb2047(t1))の出力が完了する前に、第2時刻における第1中間変数(x´b0~x´b4095(t2))の出力が開始される。すなわち、計算装置10は、ループ処理のオーバラップを実現している。計算装置10によれば、このようなオーバラップの実現により、高速に処理を実行することができる。
【0243】
また、Nが大きい場合、NS>>La+Lb+Lcとなる。従って、Nが大きい場合、La+Lb+Lが全体の実行時間に対して無視できる程度に短くなる。この場合、計算装置10での行列乗算時間は、NS(=N/Pc)クロックサイクルとみなすことができる。
【0244】
例えば、シングルコアのプロセッサによるサイズがNの行列演算時間は、(N×N)クロックサイクルである。シングルコアのプロセッサによる行列乗算時間に対する、計算装置10での行列乗算時間は、(N/Pc)/N×Nである。従って、計算装置10は、シングルコアのプロセッサに対して、1/(Pc×N)の時間で行列乗算を実行することができる。
【0245】
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、請求の範囲に記載された発明とその均等の範囲に含まれる。
【符号の説明】
【0246】
10 計算装置
20 演算部
22 入力部
24 出力部
26 設定部
28 行列乗算部
30 時間発展部
32 管理部
36 係数行列メモリ
38 行列乗算実行部
40 第1変数メモリ
42 第2変数メモリ
44 第1加算部
46 関数演算部
48 第1乗算部
50 第1中間変数メモリ
60 分割行列乗算部
62 バッファ部
64 分割行列メモリ
66 実行部
68 セレクタ
80 サブ行列乗算部
82 多重化部
84 レジスタ
86 バッファ内受信部
88 バッファ内送信部
90 乗累算部
92 乗算器
94 加算器
96 累加算器