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

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

▶ 富士通株式会社の特許一覧

特開2024-90441演算処理プログラム、演算処理方法および情報処理装置
<>
  • 特開-演算処理プログラム、演算処理方法および情報処理装置 図1
  • 特開-演算処理プログラム、演算処理方法および情報処理装置 図2
  • 特開-演算処理プログラム、演算処理方法および情報処理装置 図3
  • 特開-演算処理プログラム、演算処理方法および情報処理装置 図4A
  • 特開-演算処理プログラム、演算処理方法および情報処理装置 図4B
  • 特開-演算処理プログラム、演算処理方法および情報処理装置 図4C
  • 特開-演算処理プログラム、演算処理方法および情報処理装置 図5
  • 特開-演算処理プログラム、演算処理方法および情報処理装置 図6
  • 特開-演算処理プログラム、演算処理方法および情報処理装置 図7
  • 特開-演算処理プログラム、演算処理方法および情報処理装置 図8
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公開特許公報(A)
(11)【公開番号】P2024090441
(43)【公開日】2024-07-04
(54)【発明の名称】演算処理プログラム、演算処理方法および情報処理装置
(51)【国際特許分類】
   G06F 17/10 20060101AFI20240627BHJP
【FI】
G06F17/10 Z
【審査請求】未請求
【請求項の数】5
【出願形態】OL
(21)【出願番号】P 2022206358
(22)【出願日】2022-12-23
(71)【出願人】
【識別番号】000005223
【氏名又は名称】富士通株式会社
(74)【代理人】
【識別番号】110002147
【氏名又は名称】弁理士法人酒井国際特許事務所
(72)【発明者】
【氏名】田宮 豊
【テーマコード(参考)】
5B056
【Fターム(参考)】
5B056AA01
5B056BB42
5B056BB71
(57)【要約】
【課題】2電子積分の計算に必要なメモリ量を抑える。
【解決手段】情報処理装置1は、複数回の演算を実行することで求める2電子積分計算において、第1の回の演算では、バッファ群a21の値を入力値として演算した結果を第1の回の演算結果としてバッファ群b22に出力する演算処理と、第1の回の次に実行される第2の回の演算では、第1の回の演算結果として出力されたバッファ群b22の値を入力値として演算した結果を、第2の回の演算結果としてバッファ群a21に出力することで、バッファ群a21の値を更新する処理と、を含み、更新したバッファ群a21の値を入力値として用いて、第2の回の次に実行される第3の回の演算で実行される演算処理を実行する。かかる情報処理装置1の処理は、例えば、創薬や材料開発向けシミュレーションに適用できる。
【選択図】図3
【特許請求の範囲】
【請求項1】
複数回の演算を実行することで求める2電子積分計算をコンピュータに実行させるプログラムにおいて、
第1の回の演算では、第1のバッファの値を入力値として演算した結果を前記第1の回の演算結果として第2のバッファに出力する演算処理と、
前記第1の回の次に実行される第2の回の演算では、前記第1の回の演算結果として出力された前記第2のバッファの値を入力値として演算した結果を、前記第2の回の演算結果として前記第1のバッファに出力することで、前記第1のバッファの値を更新する処理と、を含み、
前記プログラムは前記コンピュータに、更新した前記第1のバッファの値を入力値として用いて、前記第2の回の次に実行される第3の回の演算で実行される前記演算処理を実行させる
ことを特徴とする演算処理プログラム。
【請求項2】
前記演算処理は、前記第1の回の演算では、前記第1のバッファに含まれる前回の演算の演算結果を示す所定個数の中間点の値を入力値として用いて、前記第1の回の所定個数の中間点の2電子積分を計算した結果を前記第2のバッファに出力し、
前記更新する処理は、前記第2の回の演算では、前記第2のバッファに含まれる所定個数の中間点の値を入力値として用いて、前記第2の回の所定個数の中間点の2電子積分を計算した結果を前記第1のバッファに出力することで、前記第1のバッファの値を更新する
ことを特徴とする請求項1に記載の演算処理プログラム。
【請求項3】
前記演算処理および前記更新する処理は、回が変わる毎に、前記第1のバッファおよび前記第2のバッファの入出力を切り替える
ことを特徴とする請求項1または請求項2に記載の演算処理プログラム。
【請求項4】
複数回の演算を実行することで求める2電子積分計算において、
第1の回の演算では、第1のバッファの値を入力値として演算した結果を前記第1の回の演算結果として第2のバッファに出力する演算処理と、
前記第1の回の次に実行される第2の回の演算では、前記第1の回の演算結果として出力された前記第2のバッファの値を入力値として演算した結果を、前記第2の回の演算結果として前記第1のバッファに出力することで、前記第1のバッファの値を更新する処理と、を含み、
前記更新する処理は、更新した前記第1のバッファの値を入力値として用いて、前記第2の回の次に実行される第3の回の演算で実行される前記演算処理を実行する
処理をコンピュータが実行することを特徴とする演算処理方法。
【請求項5】
複数回の演算を実行することで求める2電子積分計算において、
第1の回の演算では、第1のバッファの値を入力値として演算した結果を前記第1の回の演算結果として第2のバッファに出力する演算部と、
前記第1の回の次に実行される第2の回の演算では、前記第1の回の演算結果として出力された前記第2のバッファの値を入力値として演算した結果を、前記第2の回の演算結果として前記第1のバッファに出力することで、前記第1のバッファの値を更新する更新部と、を含み、
前記更新部は、更新した前記第1のバッファの値を入力値として用いて、前記第2の回の次に実行される第3の回の演算で実行される前記演算部による処理を実行する
ことを特徴とする情報処理装置。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、演算処理プログラムなどに関する。
【背景技術】
【0002】
量子化学シミュレーションで一般的な密度汎関数法では、電子ペアの相互作用計算(2電子積分)が、非常に重いことが知られている。2電子粒子の基底関数がガウス型積分(式(1)参照)で表される場合、Obara-Saikaアルゴリズム(例えば、非特許文献1参照)によって、効率的な計算が可能である。Obara-Saikaアルゴリズムでは、計算量の大部分を占める2電子積分を漸化式(式(2)参照)で表すことで、効率的な計算を可能としている。なお、式(1)で示されるa、aおよびaと、式(2)のaとは、a=a+a+a(a:0以上の整数)の関係で表される。ここでいうaは、角運動量(Angular Momentum)を意味する。式(2)の角運動量b,c,dについても、角運動量aの場合と同様に関係付けられる。
【0003】
【数1】
【0004】
【数2】
【0005】
すなわち、Obara-Saikaアルゴリズムは、(00|00)(m´)の値リストを初期値として、再帰的に(ab|cd)(m)を求める。なお、(ab|cd)=(ab|cd)(0)が、2電子積分の値である。
【0006】
図6は、Obara-Saikaアルゴリズムによる2電子積分の計算を表す模式図である。図6に示すように、(a+1 b|cd)に対応するベクトルv(a+1,b,c,d)は、(ab|cd)に対応するベクトルv(a,b,c,d)と(a-1 b|cd)に対応するv(a-1,b,c,d)と(a b-1|cd)に対応するv(a,b-1,c,d)と(ab|c-1 d)に対応するv(a,b,c-1,d)と(ab|c d-1)に対応するv(a,b,c,d-1)とから計算できる。
【0007】
ここで、量子力学では、量子状態を記述するための記法としてbra-ket記法が知られている。「bra」,「ket」のうち「bra」に限定すると、braインデックス(a,b)の展開は、braインデックスa,bについての2次元の漸化式となる。図7は、braインデックスの展開を示す参考図である。図7に示すように、braインデックスa,bにおける2種類の展開を交互に適用することで、目的とする値が計算できる。すなわち、a展開としてインデックスaの+1方向の計算v(a+1,b)は、v(a-1,b)とv(a,b)とv(a,b-1)とから計算できる。b展開としてインデックスbの+1方向のv(a,b+1)は、v(a-1,b)とv(a,b)とv(a,b-1)とから計算できる。a展開とb展開とを交互に適用することで目的とするv(5,5)の値が計算できる。目的データに至る中間データ(中間点)の数は、高々2×N(N:aとbの最大インデックス)である。なお、図7の灰色の丸がそれぞれ中間データ(中間点)である。
【0008】
また、図8は、braインデックスおよびketインデックスの展開を示す参考図である。図8に示すように、ketインデックス(c,d)における展開の各中間点でbraインデックス(a,b)の展開が実行されると、2次元の展開が2組組み合わせられることとなり、4次元の漸化式が計算できる。
【0009】
ここで、2電子積分において、2電子積分の値が演算された場合に、計算負荷の大きい基底関数に対応する2電子積分の値から優先的にバッファ領域に記憶させる技術が開示されている(例えば、特許文献1参照)。
【先行技術文献】
【特許文献】
【0010】
【特許文献1】特開2005-202855号公報
【非特許文献】
【0011】
【非特許文献1】S.Obara and A.Saika,”Efficient recursive computation of molecular integrals over Cartesian Gaussian functions”,Journal of Chemical Physics, val.84,no.7,pp3963-3974,Apr.1986
【発明の概要】
【発明が解決しようとする課題】
【0012】
しかしながら、Obara-Saikaアルゴリズムによる2電子積分の計算では、計算した2電子積分の値を全てバッファに記憶するので、メモリ量が増大するという問題がある。例えば、ketインデックス(c,d)における展開の各中間点で、braインデックス(a,b)における展開を実行する2電子積分の計算結果がバッファに記憶されるので、メモリ量が増大してしまう。
【0013】
本発明は、1つの側面では、2電子積分の計算に必要なメモリ量を抑えることを目的とする。
【課題を解決するための手段】
【0014】
1つの態様では、演算処理プログラムが、複数回の演算を実行することで求める2電子積分計算をコンピュータに実行させるプログラムにおいて、第1の回の演算では、第1のバッファの値を入力値として演算した結果を前記第1の回の演算結果として第2のバッファに出力する演算処理と、前記第1の回の次に実行される第2の回の演算では、前記第1の回の演算結果として出力された前記第2のバッファの値を入力値として演算した結果を、前記第2の回の演算結果として前記第1のバッファに出力することで、前記第1のバッファの値を更新する処理と、を含み、前記プログラムは前記コンピュータに、更新した前記第1のバッファの値を入力値として用いて、前記第2の回の次に実行される第3の回の演算で実行される前記演算処理を実行させる、処理をコンピュータに実行させる。
【発明の効果】
【0015】
1実施態様によれば、2電子積分の計算に必要なメモリ量を抑えることができる。
【図面の簡単な説明】
【0016】
図1図1は、実施例に係る情報処理装置の機能構成を示す図である。
図2図2は、実施例に係るバッファ群の一例を示す図である。
図3図3は、実施例に係る演算処理の一例を示す図である。
図4A図4Aは、実施例に係る演算処理のフローチャートの一例を示す図(1)である。
図4B図4Bは、実施例に係る演算処理のフローチャートの一例を示す図(2)である。
図4C図4Cは、実施例に係る演算処理のフローチャートの一例を示す図(3)である。
図5図5は、演算処理プログラムを実行するコンピュータの一例を示す図である。
図6図6は、Obara-Saikaアルゴリズムによる2電子積分の計算を表す模式図である。
図7図7は、braインデックスの展開を示す参考図である。
図8図8は、braインデックスおよびketインデックスの展開を示す参考図である。
【発明を実施するための形態】
【0017】
以下に、本願の開示する演算処理プログラム、演算処理方法および情報処理装置の実施例を図面に基づいて詳細に説明する。なお、本発明は、実施例により限定されるものではない。
【0018】
[情報処理装置の機能構成]
図1は、実施例に係る情報処理装置の機能構成を示す図である。図1に示す情報処理装置1は、4次元のインデックスに関する漸化式計算を実行することで求める2電子積分計算において、ketインデックス展開の各中間点で、braインデックス展開を実行(図8参照)して4次元の漸化式を計算する。この際に、情報処理装置1は、ketインデックス展開中に、braインデックス展開用のバッファ群をダブルバッファとして管理することで、必要最小限の中間点の値(中間値)を保持する。ここでいう漸化式計算は、例えば、Obara-Saikaアルゴリズムによる漸化式計算のことを意味し、式(2)で表される。Obara-Saikaアルゴリズムでは、(00|00)(m´)の値リストを初期値として、再帰的に(ab|cd)(m)が求められる。(ab|cd)が、2電子積分の中間値である。ここでいう(a,b)は、braインデックスを示す。(c,d)は、ketインデックスを示す。以降では、(a,b)をbraインデックスとし、(c,d)をketインデックスとして説明する。
【0019】
なお、Obara-Saikaアルゴリズムによる2電子積分の計算を表す模式図は、図6で表される。(a+1 b|cd)に対応するベクトルv(a+1,b,c,d)は、(ab|cd)に対応するベクトルv(a,b,c,d)と(a-1 b|cd)に対応するv(a-1,b,c,d)と(a b-1|cd)に対応するv(a,b-1,c,d)と(ab|c-1 d)に対応するv(a,b,c-1,d)と(ab|c d-1)に対応するv(a,b,c,d-1)との5個の中間点の値を使った漸化式で計算できる。
【0020】
図1に示すように、情報処理装置1は、制御部10と、記憶部20とを有する。制御部10は、ket展開部11と,bra展開部12とを有する。記憶部20は、バッファ群a21と、バッファ群b22とを有する。
【0021】
バッファ群a21およびバッファ群b22は、bra展開に用いられるバッファ群である。
【0022】
ここで、バッファ群の一例を、図2を参照して説明する。図2は、実施例に係るバッファ群の一例を示す図である。バッファ群は、バッファ群a21およびバッファ群b22を含む。バッファ群a21およびバッファ群b22については、ket展開のステップ毎に、入力と出力とが切り替えられる。
【0023】
バッファ群a21およびバッファ群b22は、それぞれ4個のバッファを含む。すなわち、バッファ群a21には、バッファa1~バッファa4の4個のバッファが含まれる。バッファ群b22には、バッファb1~バッファb4の4個のバッファが含まれる。例えば、ket展開のステップがc=2の場合には、1つ前のステップを示すc=1の各中間点の値がそれぞれバッファa1~バッファa4に記憶される。そして、バッファa1~バッファa4を用いて、c=2の各中間点の値が演算され、演算結果がそれぞれバッファb1~バッファb4に記憶される。さらに、ket展開のステップが次のステップを示すc=3の場合には、バッファb1~バッファb4を用いて、c=3の各中間点の値が演算され、演算結果がそれぞれバッファa1~バッファa4に上書きされる。
【0024】
図1に戻って、ket展開部11は、ketインデックス(c,d)に関して展開を実行する。例えば、ket展開部11は、ket展開のステップ毎(cがインクリメントされる毎)に、バッファ群の入力と出力とを切り替える。そして、ket展開部11は、現ステップにおけるketインデックス(c,d)展開の各中間点で、bra展開を実行する。なお、bra展開は、後述するbra展開部12によって展開される。
【0025】
bra展開部12は、入力に切り替えられたバッファ群を入力に、出力に切り替えられたバッファ群を出力にして、インデックス(a,b)に関して2次元のbra展開を実行する。例えば、bra展開部12は、ket展開部11による入出力の切り替えに基づいて、バッファ群a21を入力としてバッファ群b22を出力とするbra展開ステップと、バッファ群b22を入力としてバッファ群a21を出力とするbra展開ステップとを交互に行う。
【0026】
[演算処理の一例]
ここで、実施例に係る演算処理の一例を、図3を参照して説明する。図3は、実施例に係る演算処理の一例を示す図である。図3には、ketインデックス(c,d)展開の各中間点で、braインデックス(a,b)展開が実行される演算処理が表されている。ここでは、<1>,<2>,<3>および<4>は、ket展開の中間点の位置(c,d)に対応付けられる記憶位置であってバッファ群aの中での記憶位置(バッファa1,a2,a3,a4)を指す。<5>,<6>,<7>および<8>は、ket展開の中間点の位置(c,d)に対応付けられる記憶位置であってバッファ群bの記憶位置(バッファb1,b2,b3,b4)を指す。
【0027】
一例として、ket展開のステップを示すc=3の回の演算処理について説明する。
【0028】
まず、ket展開部11は、ket展開のステップを示すc=3の回の演算では、バッファ群aを入力とし、バッファ群bを出力とするようにバッファ群の入出力を切り替える。ここでは、<1>,<2>,<3>および<4>が、入力用のバッファ群aの中でのバッファa1,a2,a3およびa4に対応する。<1>,<2>,<3>および<4>には、ket展開の各中間点の位置(c,d)で、bra展開で計算された全ての(a,b)の組合せの点の中間値が記憶される。一例として、<1>には、v(i,j,c=2,d=1)((i,j)は、bra展開で計算された全ての(a,b)の組合せ)の点の中間値が記憶されている。また、<5>,<6>,<7>および<8>が、出力用のバッファ群bの中でのバッファb1,b2,b3およびb4に対応する。
【0029】
このような状況の下、bra展開部12は、バッファ群aを入力とし、バッファ群bを出力とするbra展開を実行する。そして、bra展開部12は、バッファ群aを入力して、c=3の<5>~<8>に対応する中間点の値を計算して、計算結果をバッファ群bに出力する。
【0030】
ここでは、bra展開部12は、c=3の<5>と<7>に対応する中間点についてのbra展開を以下のように実行する。c=3の<5>に対応する中間点について、bra展開部12は、c=2の<1>~<3>を漸化式の入力としてbra展開を計算する。c=3の<7>に対応する中間点についても、bra展開部12は、c=2の<1>~<3>を漸化式の入力としてbra展開を計算する。
【0031】
次に、bra展開部12は、c=3の<6>と<8>に対応する中間点についてのbra展開を以下のように実行する。c=3の<6>に対応する中間点について、bra展開部12は、c=2の<2>と<4>と、c=3の<5>を漸化式の入力としてbra展開を計算する。c=3の<8>に対応する中間点についても、bra展開部12は、c=2の<2>と<4>と、c=3の<5>を漸化式の入力としてbra展開を計算する。
【0032】
このようにして、bra展開部12は、c=3の<5>~<8>の値を計算して計算結果をバッファ群bに格納する。すなわち、bra展開部12は、<5>の値をバッファ群bのb1に格納する。bra展開部12は、<6>の値をバッファ群bのb2に格納する。bra展開部12は、<7>の値をバッファ群bのb3に格納する。bra展開部12は、<8>の値をバッファ群bのb4に格納する。
【0033】
次に、ket展開部11は、ket展開のステップを示すc=4の回の演算では、バッファ群bを入力とし、バッファ群aを出力とするようにバッファ群の入出力を切り替える。ここでは、<5>,<6>,<7>および<8>が、入力用のバッファ群bの中でのバッファb1,b2,b3およびb4に対応する。<5>,<6>,<7>および<8>には、ket展開の各中間点の位置(c,d)で、bra展開で計算された全ての(a,b)の組合せの点の中間値が記憶される。一例として、<6>には、v(i,j,c=4,d=2)((i,j)は、bra展開で計算された全ての(a,b)の組合せ)の点の中間値が記憶されている。また、<1>,<2>,<3>および<4>が、出力用のバッファ群aの中でのバッファa1,a2,a3およびa4に対応する。
【0034】
このような状況の下、bra展開部12は、バッファ群bを入力とし、バッファ群aを出力とするbra展開を実行する。そして、bra展開部12は、バッファ群bを入力して、c=4の<1>~<4>に対応する中間点の値を計算して、計算結果をバッファ群aに更新する。
【0035】
なお、図6の模式図を用いて、例えばc=3の<6>を求める計算について説明する。<6>=v(a,b,c+1,d)は、<2>=v(a,b,c,d-1)と<4>=v(a,b,c-1,d)と<5>=v(a,b,c,d)と、さらに、bra展開でv(a-1,b,c,d)およびv(a,b-1,c,d)を参照することで計算される。すなわち、bra展開部12は、<6>=v(a,b,c+1,d)に対応する中間点の値を計算するために、5個の中間値を使った漸化式を計算する。
【0036】
これにより、情報処理装置1は、bra展開用のバッファを、入出力それぞれ4本ずつのダブルバッファ(21,22)を持つだけで、任意のインデックス組合せ(ab|cd)の2電子積分値を計算することが可能になる。言い換えれば、情報処理装置1は、例えば、c=3でバッファ群b22に対応する各中間点を計算するには、c=2でバッファ群a21に記憶された中間点の値のみを入力とするだけで、c=1で記憶された中間点の値を一切使わないので、2電子積分の計算に必要なメモリ量を抑えることができる。加えて、情報処理装置1は、例えば、c=3でバッファ群b22に対応する各中間点を計算するには、c=2でバッファ群a21に記憶された中間点の値のみを入力とし、計算結果をバッファ群b22に出力とし、バッファ群の役割を入力専用と出力専用とに完全に分離する。バッファ群が入力専用と出力専用とに分離していることは、CPUや専用ハードウェアのメモリモデルの性能向上に有利に働くといえる。つまり、情報処理装置1は、ダブルバッファを用いることで、2電子積分の計算に必要なメモリ量を抑えることができることに加えて性能を向上させることが可能になる。
【0037】
[演算処理のフローチャート]
図4A図4Cは、実施例に係る演算処理のフローチャートの一例を示す図である。なお、図4A図4Cでは、ket展開のインデックスを(c,d)とし、bra展開のインデックスを(a,b)として説明する。また、図4A図4Cでは、<1>,<2>,<3>および<4>を、ket展開の中間点の位置(c,d)に対応付けられる記憶位置であってバッファ群aの中での記憶位置(バッファa1,a2,a3,a4)を指すものとする。<5>,<6>,<7>および<8>を、ket展開の中間点の位置(c,d)に対応付けられる記憶位置であってバッファ群bの記憶位置(バッファb1,b2,b3,b4)を指すものとする。
【0038】
図4Aに示すように、情報処理装置1は、ket展開のインデックスについて、dがcより大きいか否かを判定する(ステップS11)。dがcより大きいと判定した場合には(ステップS11;Yes)、情報処理装置1は、2電子積分でインデックスcとdとは可換であるので、cがd以上になるように変換すべく、cとdを交換する(ステップS12)。そして、情報処理装置1は、ステップS13に移行する。
【0039】
一方、dがcより大きくないと判定した場合には(ステップS11;No)、情報処理装置1は、ステップS13に移行する。ステップS13では、情報処理装置1は、バッファ群a21の中のバッファa4に初期値を設定して、<4>についてbra展開する(ステップS13)。すなわち、情報処理装置1は、c=0の<4>に対応する中間点についてbra展開を計算する。
【0040】
そして、情報処理装置1は、ket展開の最後か否かを判定する(ステップS14)。例えば、情報処理装置1は、ket展開のステップを示すインデックスcをインクリメントする。そして、情報処理装置1は、インデックスcを用いてket展開の最後か否かを判定する。図3で示されるket展開の場合には、情報処理装置1は、インデックスcが5より大きいか否かを判定すれば良い。ket展開の最後でないと判定した場合には(ステップS14;No)、情報処理装置1は、バッファ群a21を入力に、バッファ群b22を出力にしてbra展開する(ステップS15)。なお、バッファ群a21を入力に、バッファ群b22を出力にしてbra展開する処理は、後述する。
【0041】
そして、情報処理装置1は、ket展開の最後か否かを判定する(ステップS16)。例えば、情報処理装置1は、ket展開のステップを示すインデックスcをインクリメントする。そして、そして、情報処理装置1は、インデックスcを用いてket展開の最後か否かを判定する。ket展開の最後でないと判定した場合には(ステップS16;No)、情報処理装置1は、バッファ群b22を入力に、バッファ群a21を出力にしてbra展開する(ステップS17)。なお、バッファ群b22を入力に、バッファ群a21を出力にしてbra展開する処理は、後述する。そして、情報処理装置1は、ステップS14に移行する。
【0042】
一方、ket展開の最後であると判定した場合には(ステップS14;YesまたはステップS16;Yes)、情報処理装置1は、演算処理を終了する。
【0043】
図4Bでは、バッファ群a21を入力に、バッファ群b22を出力にしてbra展開する処理について説明する。図3では、インデックスc=1、c=3またはc=5の演算処理の場合である。
【0044】
情報処理装置1は、バッファ群a21に中間値<2>を持つか否かを判定する(ステップS21)。例えば、情報処理装置1は、バッファ群a21のバッファa2に<2>に対応する中間点の値を持つか否かを判定する。
【0045】
バッファ群a21に中間値<2>を持たないと判定した場合には(ステップS21;No)、情報処理装置1は、バッファ群a21の<4>を入力として、バッファ群b22の<5>をbra展開する(ステップS22)。例えば、図3で示されるc=1の<5>では、情報処理装置1は、c=0の<4>を漸化式の入力として、c=1の<5>をbra展開する。この結果、v(i,j,c=1,d=0)の点の中間値が求められる。(i,j)はbra展開で計算される全ての(a,b)の組合せである。そして、情報処理装置1は、ステップS24に移行する。
【0046】
一方、バッファ群a21に中間値<2>を持つと判定した場合には(ステップS21;Yes)、情報処理装置1は、バッファ群a21の<1>,<2>および<3>を入力として、バッファ群b22の<5>および<7>についてそれぞれbra展開する(ステップS23)。例えば、図3で示されるc=3の<5>,<7>では、情報処理装置1は、c=2の<1>,<2>および<3>を漸化式の入力として<5>および<7>についてbra展開する。この結果、v(i,j,c=3,d=2)の点の中間値が求められる。v(i,j,c=4,d=1)の点の中間値が求められる。(i,j)はbra展開で計算される全ての(a,b)の組合せである。そして、情報処理装置1は、ステップS24に移行する。
【0047】
ステップS24において、情報処理装置1は、バッファ群a21の<2>,<4>とバッファ群b22の<5>を入力として、バッファ群b22の<6>および<8>についてそれぞれbra展開する(ステップS24)。例えば、図3で示されるc=3の<6>,<8>では、情報処理装置1は、c=2の<2>,<4>とc=3の<5>を漸化式の入力として<6>および<8>についてbra展開する。この結果、v(i,j,c=4,d=2)の点の中間値が求められる。v(i,j,c=3,d=3)の点の中間値が求められる。(i,j)はbra展開で計算される全ての(a,b)の組合せである。なお、図3で示されるc=1の<6>,<8>では、情報処理装置1は、c=0の<2>,<4>とc=1の<5>を漸化式の入力として<6>および<8>についてbra展開する。このとき、c=0の<2>については、初期値が設定されている。そして、情報処理装置1は、バッファ群a21を入力に、バッファ群b22を出力にしてbra展開する処理を終了する。
【0048】
図4Cでは、バッファ群b22を入力に、バッファ群a21を出力にしてbra展開する処理について説明する。図3では、インデックスc=2またはc=4の演算処理の場合である。
【0049】
情報処理装置1は、バッファ群b22に中間値<6>を持つか否かを判定する(ステップS31)。例えば、情報処理装置1は、バッファ群b22のバッファb2に<6>に対応する中間点の値を持つか否かを判定する。
【0050】
バッファ群b22に中間値<6>を持たないと判定した場合には(ステップS31;No)、情報処理装置1は、バッファ群a21の<8>を入力として、バッファ群a21の<1>をbra展開する(ステップS32)。そして、情報処理装置1は、ステップS34に移行する。
【0051】
一方、バッファ群b22に中間値<6>を持つと判定した場合には(ステップS31;Yes)、情報処理装置1は、バッファ群b22の<5>,<6>および<7>を入力として、バッファ群a21の<1>および<3>についてそれぞれbra展開する(ステップS33)。例えば、図3で示されるc=4の<1>,<3>では、情報処理装置1は、c=3の<5>,<6>および<7>を漸化式の入力として<1>および<3>についてbra展開する。この結果、v(i,j,c=4,d=3)の点の中間値が求められる。v(i,j,c=5,d=2)の点の中間値が求められる。(i,j)はbra展開で計算される全ての(a,b)の組合せである。なお、図3で示されるc=2の<1>,<3>では、情報処理装置1は、c=1の<5>,<6>および<7>を漸化式の入力として<1>および<3>についてbra展開する。このとき、c=1の<7>については、初期値が設定されている。そして、情報処理装置1は、ステップS34に移行する。
【0052】
ステップS34において、情報処理装置1は、バッファ群b22の<6>,<8>とバッファ群a21の<1>を入力として、バッファ群a21の<2>および<4>についてそれぞれbra展開する(ステップS34)。例えば、図3で示されるc=4の<2>,<4>では、情報処理装置1は、c=3の<6>,<8>とc=4の<1>を漸化式の入力として<2>および<4>についてbra展開する。この結果、v(i,j,c=5,d=3)の点の中間値が求められる。v(i,j,c=4,d=4)の点の中間値が求められる。(i,j)はbra展開で計算される全ての(a,b)の組合せである。そして、情報処理装置1は、バッファ群b22を入力に、バッファ群a21を出力にしてbra展開する処理を終了する。
【0053】
[実施例の効果]
上記実施例によれば、情報処理装置1は、複数回の演算を実行することで求める2電子積分計算を以下のように実行する。情報処理装置1は、第1の回の演算では、第1のバッファの値を入力値として演算した結果を第1の回の演算結果として第2のバッファに出力する演算処理を実行する。情報処理装置1は、第1の回の次に実行される第2の回の演算では、第1の回の演算結果として出力された第2のバッファの値を入力値として演算した結果を、第2の回の演算結果として第1のバッファに出力することで、第1のバッファの値を更新する処理を実行する。そして、情報処理装置1は、更新した第1のバッファの値を入力値として用いて、第2の回の次に実行される第3の回の演算で実行される演算処理を実行する。かかる構成によれば、情報処理装置1は、2電子積分計算に必要なメモリ量を抑えることができる。
【0054】
また、上記実施例によれば、情報処理装置1は、第1の回の演算では、第1のバッファに含まれる前回の演算の演算結果を示す所定個数の中間点の値を入力値として用いて、第1の回の所定個数の中間点の2電子積分を計算した結果を第2のバッファに出力する。そして、情報処理装置1は、第2の回の演算では、第2のバッファに含まれる所定個数の中間点の値を入力値として用いて、第2の回の所定個数の中間点の2電子積分を計算した結果を第1のバッファに出力することで、第1のバッファの値を更新する。かかる構成によれば、情報処理装置1は、各回の演算では、前回の演算の演算結果を記憶したバッファに含まれる中間点の値のみを入力するだけで、前回より前の中間点の値を一切使わない。この結果、情報処理装置1は、バッファの役割を入力専用と出力専用とに完全に分離することで、例えばCPUや専用ハードウェアのメモリモデルの性能を向上させることができる。また、情報処理装置1は、2電子積分の計算に必要なメモリ量を抑えることができる。
【0055】
また、上記実施例によれば、情報処理装置1は、回が変わる毎に、第1のバッファおよび第2のバッファの入出力を切り替える。これにより、情報処理装置1は、複数回の演算を実行することで求める2電子積分計算を、ダブルバッファを用いて実行することが可能になる。
【0056】
[その他]
なお、図示した情報処理装置1の各構成要素は、必ずしも物理的に図示の如く構成されていることを要しない。すなわち、情報処理装置1の分散・統合の具体的態様は図示のものに限られず、その全部または一部を、各種の負荷や使用状況などに応じて、任意の単位で機能的または物理的に分散・統合して構成することができる。例えば、ket展開部11とbra展開部12とを1つの部として統合しても良い。ket展開部11を、ket展開を行う処理部と、ket展開のステップ毎にバッファ群を切り替える処理部とに分離しても良い。また、記憶部20を情報処理装置1の外部装置としてネットワーク経由で接続するようにしても良い。
【0057】
また、上記実施例では、情報処理装置が、学習処理と予測処理とを含む構成で説明した。しかしながら、学習処理を行う学習装置と予測処理を行う予測装置とに分離する構成としても良い。
【0058】
また、上記実施例で説明した各種の処理は、予め用意されたプログラムをパーソナルコンピュータやワークステーションなどのコンピュータで実行することによって実現することができる。そこで、以下では、図1に示した情報処理装置1の演算処理と同様の機能を実現する演算処理プログラムを実行するコンピュータの一例を説明する。図5は、演算処理プログラムを実行するコンピュータの一例を示す図である。
【0059】
図5に示すように、コンピュータ200は、各種演算処理を実行するCPU203と、ユーザからのデータの入力を受け付ける入力装置215と、表示装置209を制御する表示制御部207とを有する。また、コンピュータ200は、記憶媒体からプログラムなどを読取るドライブ装置213と、ネットワークを介して他のコンピュータとの間でデータの授受を行う通信制御部217とを有する。また、コンピュータ200は、各種情報を一時記憶するメモリ201と、HDD(Hard Disk Drive)205を有する。そして、メモリ201、CPU203、HDD205、表示制御部207、ドライブ装置213、入力装置215、通信制御部217は、バス219で接続されている。
【0060】
ドライブ装置213は、例えばリムーバブルディスク211用の装置である。HDD205は、演算処理プログラム205aおよび演算処理関連情報205bを記憶する。
【0061】
CPU203は、演算処理プログラム205aを読み出して、メモリ201に展開し、プロセスとして実行する。かかるプロセスは、情報処理装置1の各機能部に対応する。演算処理関連情報205bは、バッファ群a21およびバッファ群b22に対応する。そして、例えばリムーバブルディスク211が、演算処理プログラム205aなどの各情報を記憶する。
【0062】
なお、演算処理プログラム205aについては、必ずしも最初からHDD205に記憶させておかなくても良い。例えば、コンピュータ200に挿入されるフレキシブルディスク(FD)、CD-ROM(Compact Disk Read Only Memory)、DVD(Digital Versatile Disk)、光磁気ディスク、IC(Integrated Circuit)カードなどの「可搬用の物理媒体」に当該プログラムを記憶させておく。そして、コンピュータ200がこれらから演算処理プログラム205aを読み出して実行するようにしても良い。
【0063】
また、上記実施例で説明した情報処理装置1が行う演算処理は、例えば、創薬や材料開発向けシミュレーションに適用することができる。一例として、情報処理装置1が行う演算処理は、量子力学方程式を解いて新薬を生成したり、アンモニアの触媒に関しどれがよいかについてのシミュレーションをしたりすることに適用することが可能である。
【符号の説明】
【0064】
1 情報処理装置
10 制御部
11 ket展開部
12 bra展開部
20 記憶部
21 バッファ群a
22 バッファ群b
図1
図2
図3
図4A
図4B
図4C
図5
図6
図7
図8