(57)【要約】【課題】分子積分演算における積和演算を効率良く実行し分子積分演算の高速化を図る。【解決手段】分子積分演算装置は、複数の積和演算器と、複数の積和演算器の動作を管理する管理プロセッサとを備える。管理プロセッサは、所定の関数を基底関数として表される分子積分において成立する第１の漸化表式を用いて表される演算式であって、目的の分子積分を求めるための複数の第１の演算式の演算を実行する場合において、２つの原子軌道に対応する２つの原子間の座標差で表された同じ係数を含む一群の第１の演算式のうち、積和演算器に含まれる複数のレジスタ領域の数をｎ（ｎは自然数）とした場合に、［（ｎ−１）／３］で得られる商の値に等しい数の第１の演算式を選択し、選択した第１の演算式の演算にそれぞれ必要なデータを連続データとして、いずれか１つの積和演算器に送って演算を実行させる。【選択図】図３
2008210190.tif 000002
【特許請求の範囲】
【請求項１】
分子積分演算装置であって、
複数の積和演算器と、
前記複数の積和演算器の動作を管理する管理プロセッサと、
を備え、
前記管理プロセッサは、所定の関数を基底関数として表される分子積分において成立する第１の漸化表式を用いて表される演算式であって、目的の分子積分を求めるための複数の第１の演算式の演算を実行する場合において、２つの原子軌道に対応する２つの原子間の座標差で表された同じ係数を含む一群の前記第１の演算式のうち、前記積和演算器に含まれる複数のレジスタ領域の数をｎ（ｎは自然数）とした場合に、［（ｎ−１）／３］で得られる商の値に等しい数の前記第１の演算式を選択し、選択した前記第１の演算式の演算にそれぞれ必要なデータを連続データとして、いずれか１つの前記積和演算器に送って演算を実行させる
ことを特徴とする分子積分演算装置。
【請求項２】
請求項１に記載の分子積分演算装置であって、
前記所定の関数は縮約ガウス関数であることを特徴とする分子積分演算装置。
【請求項３】
請求項１または請求項２記載の分子積分演算装置であって、
前記管理プロセッサは、前記分子積分において成立する第２の漸化表式を用いて表される演算式であって、前記目的の分子積分を求めるための複数の第２の演算式の演算を実行する場合において、［ｎ／１５］で得られる商の値に等しい数の前記第２の演算式を選択し、選択した前記第２の演算式の演算にそれぞれ必要なデータを連続データとして、いずれか１つの前記積和演算器に送って演算を実行させる
ことを特徴とする分子積分演算装置。
【請求項４】
請求項１ないし請求項３のいずれかに記載の分子積分演算装置であって、
前記管理プロセッサは、前記演算にそれぞれ必要なデータをひとまとまりの連続データとしたデータセットを作成し、作成したデータセットを前記積和演算器に送る
ことを特徴とする分子積分演算装置。
【請求項５】
請求項１ないし請求項４のいずれかに記載の分子積分演算装置を集積化した集積回路。
【請求項６】
複数の積和演算器と、前記複数の積和演算器の動作を管理する管理プロセッサと、を備える分子積分演算装置における分子積分演算方法であって、
前記管理プロセッサは、所定の関数を基底関数として表される分子積分において成立する第１の漸化表式を用いて表される演算式であって、目的の分子積分を求めるための複数の第１の演算式の演算を実行する場合において、２つの原子軌道に対応する２つの原子間の座標差で表された同じ係数を含む一群の前記第１の演算式のうち、前記積和演算器に含まれる複数のレジスタ領域の数をｎ（ｎは自然数）とした場合に、［（ｎ−１）／３］で得られる商の値に等しい数の前記第１の演算式の演算にそれぞれ必要なデータを連続データとして、いずれか１つの前記積和演算器に送って演算を実行させる
ことを特徴とする分子積分演算方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、分子積分演算装置および分子積分演算方法に関する。
【背景技術】
【０００２】
電子反発積分を効率良く高速計算する手法として、例えば、非特許文献１に記載の手法が提案されている。この手法は、縮約ガウス関数を基底関数に用いた分子積分（「縮約積分」とも呼ぶ。）の一般漸化表式に基づく漸化計算法を使用して、電子反発積分を計算するものである。
【０００３】
【非特許文献１】J.Comput.Chem.Jpn., Vol.4, No4, pp.165-174(2005)
【特許文献１】特開平１１−７４３８号公報
【特許文献２】特開２００５−１５７８７６号公報
【発明の開示】
【発明が解決しようとする課題】
【０００４】
しかしながら、上記手法による電子反発積分の計算では、漸化計算において実行される膨大な数の積和演算が発生し、これらの積和演算を如何にして効率よく実行するかが、電子反発積分の演算を高速に実行するための課題のひとつとなる。
【０００５】
また、上記手法は電子反発積分以外の種々の分子積分にも適用できるとされており、分子積分の演算を高速に実行するためには同様の課題があると考えられる。
【０００６】
そこで、本発明は、上記した課題を解決するためになされたものであり、分子積分、特に、縮約ガウス関数を基底関数に用いた分子積分の演算における積和演算を効率良く実行し、分子積分の演算の高速化を図ることが可能な技術を提供することを目的とする。
【課題を解決するための手段】
【０００７】
上記課題の少なくとも一部を解決するため、本発明は、次のような分子積分演算装置の態様とすることができる。すなわち、
複数の積和演算器と、
前記複数の積和演算器の動作を管理する管理プロセッサと、
を備え、
前記管理プロセッサは、所定の関数を基底関数として表される分子積分において成立する第１の漸化表式を用いて表される演算式であって、目的の分子積分を求めるための複数の第１の演算式の演算を実行する場合において、２つの原子軌道に対応する２つの原子間の座標差で表された同じ係数を含む一群の前記第１の演算式のうち、前記積和演算器に含まれる複数のレジスタ領域の数をｎ（ｎは自然数）とした場合に、［（ｎ−１）／３］で得られる商の値に等しい数の前記第１の演算式を選択し、選択した前記第１の演算式の演算にそれぞれ必要なデータを連続データとして、いずれか１つの前記積和演算器に送って演算を実行させる
ことを特徴とする。
【０００８】
上記分子積分演算装置では、第１の演算式の演算を積和演算器において効率よく実行することができるので、分子積分の演算の高速化を図ることが可能である。
【０００９】
なお、前記所定の関数は縮約ガウス関数とすることが好ましい。
【００１０】
上記分子積分演算装置において、
前記管理プロセッサは、前記分子積分において成立する第２の漸化表式を用いて表される演算式であって、前記目的の分子積分を求めるための複数の第２の演算式の演算を実行する場合において、［ｎ／１５］で得られる商の値に等しい数の前記第２の演算式を選択し、選択した前記第２の演算式の演算にそれぞれ必要なデータを連続データとして、いずれか１つの前記積和演算器に送って演算を実行させることが好ましい。
【００１１】
上記分子積分演算装置では、第１の演算式の演算に加えて、第２の演算式の演算を積和演算器において効率よく実行することができるので、より分子積分の演算の高速化を図ることが可能である。
【００１２】
上記分子積分演算装置において、
前記管理プロセッサは、前記演算にそれぞれ必要なデータをひとまとまりの連続データとしたデータセットを作成し、作成したデータセットを前記積和演算器に送ることが好ましい。
【００１３】
上記分子積分演算装置では、管理プロセッサから積和演算器に対して高速にデータを送ることが可能であり、分子積分の演算の高速化を図ることが可能である。
【００１４】
なお、本発明は分子積分演算装置としての態様だけでなく、分子積分演算装置を集積化した集積化回路としての態様や、分子積分演算装置における分子積分演算方法としての態様等、種々の態様で実現可能である。
【発明を実施するための最良の形態】
【００１５】
以下、本発明の実施の形態を実施例に基づき次の順序で説明する。
Ａ．電子反発積分計算手順：
Ａ１．概要説明：
Ａ２．具体例：
Ａ３．計算手順：
Ｂ．電子反発積分演算装置：
Ｃ．水平演算手順：
Ｄ．垂直演算手順：
Ｅ．変形例：
【００１６】
Ａ．電子反発積分計算手順：
Ａ１．概要説明：
まず、本発明の前提として、縮約ガウス関数を基底関数に用いた分子積分の一般漸化表式と、これに基づく漸化計算法を使用して電子反発積分を計算する手順と、を簡単に説明する。なお、一般漸化表式および計算手順の具体的な説明は、上記非特許文献１に記載されている。
【００１７】
電子反発積分は、以下の（１）式で表される。また、（１）式は（２）式および（３）式に展開される。
【００１８】
【数１】
2008210190.tif 000003
【数２】
2008210190.tif 000004
【００１９】
上記（１）式の左辺の＜ａｂｃｄ＞は、縮約ガウス関数としてのハイパーガウス関数Φで表された４つの縮約軌道Φ（ｒ１，ａ），Φ（ｒ１，ｂ），Φ（ｒ２，ｃ），Φ（ｒ２，ｄ）を用いた積分（「縮約積分」と呼ばれる。）による電子反発積分を表す。ａ，ｂ，ｃ，ｄは、各縮約軌道の軌道量子数を表す。また、ｒ１，ｒ２は２つの電子（電子１，２）の座標を表す。
【００２０】
また、上記（２）式は、（１）式の縮約積分を展開した式を示している。ｐa，ｐb，ｐc，ｐdは各縮約軌道を示すインデックスを表す。ｕpa，ｕpb，ｕpc，ｕpdは各縮約軌道の展開係数を表し、ｎa，ｎb，ｎc，ｎdは各縮約軌道の展開項数を表す。［ａｂｃｄ］は、（３）式に示すように、原始ガウス関数φで表された４つの原始軌道φ（ｒ１，ａ），φ（ｒ１，ｂ），φ（ｒ２，ｃ），φ（ｒ２，ｄ）を用いた電子反発積分（「原始積分」と呼ばれる。）を表す。
【００２１】
なお、軌道量子数は、ハイパーガウス関数Φの角運動量インデックスの３成分（ｘ成分，ｙ成分，ｚ成分）の和であり、軌道量子数が０，１，２，３，・・・の軌道は、それぞれｓ軌道，ｐ軌道，ｄ軌道，ｆ軌道，・・・と呼ばれる。そこで、電子反発積分＜ａｂｃｄ＞は、具体的には、ａ，ｂ，ｃ，ｄの各軌道量子数が表す軌道を用いて、例えば、＜ｓｓｓｓ＞，＜ｐｐｓｓ＞，＜ｐｓｐｓ＞，＜ｐｐｐｐ＞，＜ｄｄｓｓ＞，＜ｄｄｐｐ＞，＜ｄｄｄｄ＞，・・・のように表記される。ただし、ｓ軌道の軌道量子数は０であるので、ｓを「０」として、例えば、＜ｓｓｓｓ＞は＜００００＞、＜ｐｓｐｓ＞は＜ｐ０ｐ０＞のように表記されることもある。
【００２２】
上記した電子反発積分＜ａｂｃｄ＞は、４つの縮約軌道の軌道量子数ａ，ｂ，ｃ，ｄの増減に関する２種類の漸化関係を満足する。一方の漸化関係は通常「垂直関係」と呼ばれており、以下の（４）式で表現される。また、他方の漸化関係は通常「水平関係」と呼ばれており、以下の（５）式で表現される。
【００２３】
【数３】
2008210190.tif 000005
【数４】
2008210190.tif 000006
【００２４】
上記（４）式の垂直関係および（５）式の水平関係は、以下の（６）式〜（９）式を用いて表現された補助電子反発積分＜ａｂｃｄ｜ｍｇaｇbｇcｇdＧabＧcd＞を使用して表記されている。なお、以下では、この補助電子反発積分を単に電子反発積分と呼ぶ場合もある。
【００２５】
【数５】
2008210190.tif 000007
【数６】
2008210190.tif 000008
【数７】
2008210190.tif 000009
【数８】
2008210190.tif 000010
【００２６】
上記（６）式の７つのパラメータｍ，ｇa，ｇb，ｇc，ｇd，Ｇab，Ｇcdのうち、ｍは各縮約軌道の軌道量子数の総和を示している。ｇa，ｇb，ｇc，ｇdは各縮約軌道の軌道指数（軌道因子）ζｐa,ζｐb,ζｐc,ζｐdの指数である。Ｇabは（１／（ζｐa＋ζｐb））-1の指数であり、Ｇcdは（１／（ζｐc＋ζｐd））-1の指数である。（８）式のｕ12は２つの電子１，２の電子間相互作用演算子をラプラス変換で表したときの軌道因子である。
【００２７】
上記（４），（５）式の右辺は、７つのパラメータｍ，ｇa，ｇb，ｇc，ｇd，Ｇab，Ｇcdのうち増減があるパラメータについてのみ記述し、増減のないパラメータについては省略して表記されている。Ａ，Ｂ，Ｃ，Ｄは各縮約軌道を有する原子の座標であり、（Ｂ−Ａ），（Ａ−Ｂ），（Ｄ−Ｃ），（Ｃ−Ａ）は各原子間の座標差である。μは軌道ベクトルの３成分（ｘ成分，ｙ成分，ｚ成分）のいずれかを示す。ａμは軌道量子数ａのμ方向の成分を示す。
【００２８】
また、電子反発積分＜ａｂｃｄ｜ｍｇaｇbｇcｇdＧabＧcd＞の初期積分＜００００｜ｍｇaｇbｇcｇdＧabＧcd＞は、以下の（１０）式〜（１４）式で表される。なお、（１２）式に含まれるＦm（Ｔ）は誤差関数である。
【００２９】
【数９】
2008210190.tif 000011
【数１０】
2008210190.tif 000012
【数１１】
2008210190.tif 000013
【数１２】
2008210190.tif 000014
【数１３】
2008210190.tif 000015
【００３０】
ここで、電子反発積分＜ａｂｃｄ＞は、上記したように、（５）式で示した水平関係を満足している。この（５）式を用いることにより、電子反発積分＜ａｂｃｄ＞を、軌道量子数ｂおよびｄが「０」になった中間積分＜ａ’０ｃ’０＞の積和演算で表された形に変換することができる。従って、中間積分＜ａ’０ｃ’０＞を用いた積和演算で表された電子反発積分＜ａｂｃｄ＞の式（以下、「水平演算式」とも呼ぶ。）に含まれる中間積分＜ａ’０ｃ’０＞の値がわかれば、電子反発積分＜ａｂｃｄ＞を求めることができる。
【００３１】
また、電子反発積分＜ａｂｃｄ＞は、上記したように、（４）式で示した垂直関係を満足している。この（４）式を用いることにより、水平演算式に含まれている中間積分＜ａ’０ｃ’０＞を、すべての軌道量子数が「０」になった初期積分＜００００＞を用いた積和演算で表された積分に変換することができる。従って、初期積分＜００００＞を用いた積和演算で表された中間積分＜ａ’０ｃ’０＞の式（以下、「垂直演算式」とも呼ぶ。）に含まれる初期積分＜００００＞の値がわかれば、中間積分＜ａ’０ｃ’０＞を求めることができる。
【００３２】
なお、初期積分＜００００＞は、上記（１０）式〜（１４）式により計算することができる。
【００３３】
Ａ２．具体例：
以下では、上記電子反発積分の計算手順について、電子反発積分＜ｐｐｓｓ＞を例に、さらに説明を加える。
【００３４】
電子反発積分＜ｐｐｓｓ＞（＝＜１a１b０c０d＞）では、ｄの軌道量子数は「０」であるが、ｂの軌道量子数は「１」であり「０」ではない。そこで、上記したように、（５）式の水平関係を使用すると、電子反発積分＜ｐｐｓｓ＞は以下の（１５）式で表される。
【００３５】
【数１４】
2008210190.tif 000016
【００３６】
なお、（１５）式においてμ，νは軌道ベクトルの３成分（ｘ成分，ｙ成分，ｚ成分）のいずれかを示しており、電子反発積分＜ｐｐｓｓ＞には、実際には＜ｐxｐxｓｓ＞，＜ｐxｐyｓｓ＞，＜ｐxｐzｓｓ＞，＜ｐyｐxｓｓ＞，・・・，＜ｐzｐyｓｓ＞，＜ｐzｐzｓｓ＞の９種類が存在する。
【００３７】
上記（１５）式において、右辺の中間積分＜ｄμνｓｓｓ＞（＝＜２a０b０c０d＞）および＜ｐμｓｓｓ＞（＝＜１a０b０c０d＞）は、ｂおよびｄの軌道量子数が「０」である。そこで、＜ｄμνｓｓｓ＞および＜ｐμｓｓｓ＞は、上記（４）式の垂直関係を使用して、初期積分＜００００＞を用いた積和演算とすることができる。具体的には、（４）式の垂直関係を使用して右辺に含まれる積分の軌道量子数の値を減らしていき、右辺に現れる積分の軌道量子数のすべてが「０」、すなわち、全ての積分が初期積分＜００００＞（＝＜ｓｓｓｓ＞）になるまで、この操作を繰り返す。
【００３８】
例えば、上記（１５）式の右辺第一項の＜ｄμνｓｓｓ＞は、以下の（１６）式のように表される。
【００３９】
【数１５】
2008210190.tif 000017
【００４０】
ここで、上記（１６）の右辺には、初期積分以外の＜ｐμｓｓｓ｜０  ０１１  ０００＞等が含まれるので、これらの中間積分に、さらに（４）式の垂直関係を適用し、右辺に現れる中間積分がすべて初期積分になるまで繰り返す。例えば、上記（１６）式の右辺第一項の＜ｐμｓｓｓ｜０  ０１１  ０００＞は、以下の（１７）式で表される。
【００４１】
【数１６】
2008210190.tif 000018
【００４２】
上記（１７）式の右辺に含まれる積分は全て＜ｓｓｓｓ＞、すなわち、初期積分である。これにより、上記（１６）式の第一項の中間積分は初期積分を用いた積和演算で表される。
【００４３】
なお、（１６）式の右辺の第二項〜第六項の中間積分も、同様にして初期積分を用いた積和演算で表される。
【００４４】
以上のようにして、上記（１５）式の右辺第一項の＜ｄμνｓｓｓ＞は、初期積分を用いた積和演算で表すことができる。
【００４５】
また、上記（１５）式の右辺第二項の＜ｐμｓｓｓ＞は、以下の（１８）式のように表される。
【００４６】
【数１７】
2008210190.tif 000019
【００４７】
上記（１８）式の右辺に含まれる積分は全て＜ｓｓｓｓ＞、すなわち、初期積分である。これにより、上記（１５）式の右辺第二項の＜ｐμｓｓｓ＞は、初期積分を用いた積和演算で表すことができる。
【００４８】
以上のように、上記（１５）式で表された電子反発積分＜ａｂｃｄ＞の右辺の中間積分は全て初期積分を用いた積和演算で表されることとなる。例えば、＜ｐｐｓｓ＞の場合は、１５種類の初期積分で表すことができる。図１は、電子反発積分＜ｐｐｓｓ＞の場合の初期積分を示す表である。
【００４９】
これら初期積分は、上記（１０）式〜（１４）式を用いて計算することができる。このとき、以下の工夫により計算量を減らすことができる。
【００５０】
パラメータｇbの値（積分表記中の縦線の右側三番目の数値）は図１（ａ）に示した１５種類の初期積分において、０，１，２の三通りの値となるが、どの値になるかは、（１０）式の最外側の総和（Σｐb）の計算の時にζｐbの何乗を乗じるかによって決まるものである。従って、その内側の総和（Σｐa）の計算においては、ｇb＝０と見なすことができ、図１（ｂ）に示すように１３種類の初期積分を計算すればよいことになる。
【００５１】
同様に、さらにその内側の総和（Σｐd）においてはｇb＝ｇa＝Ｇab＝０と見なすことができ、図１（ｃ）に示すように、６種類の初期積分を計算すればよい。また、最内側の総和（Σｐc）においてもｇb＝ｇa＝Ｇab＝ｇd＝０と見なすことができ、図１（ｄ）に示すように、６種類の初期積分を計算すればよい。
【００５２】
なお、上記説明は、電子反発積分＜ｐｐｓｓ＞を例に説明したが、他の軌道を有する電子反発積分においても同様である。
【００５３】
Ａ３．計算手順：
以上説明したことをまとめると、目的の電子反発積分＜ａｂｃｄ＞は、以下の手順で求めることができる。
【００５４】
図２は、目的の電子反発積分＜ａｂｃｄ＞を求める手順について示す説明図である。
【００５５】
まず、電子反発積分＜ａｂｃｄ＞を、（５）式で示した水平関係を用いて、中間積分＜ａ’０ｃ’０＞の積和演算で表した水平演算式を用意し（ステップＳ１１０）、水平演算式に含まれる中間積分＜ａ’０ｃ’０＞を、（４）式で示した垂直関係を用いて、初期積分＜００００＞の積和演算で表した垂直演算式を用意する（ステップＳ１２０）。
【００５６】
次に、中間積分＜ａ’０ｃ’０＞を計算するために必要な全ての初期積分＜００００＞を計算する（ステップＳ１３０）。
【００５７】
そして、求めた初期積分＜００００＞を用いて、垂直演算式により中間積分＜ａ’０ｃ’０＞を計算し（ステップＳ１４０）、求めた中間積分＜ａ’０ｃ’０＞を用いて、水平演算式により電子反発積分＜ａｂｃｄ＞を計算する（ステップＳ１５０）。
【００５８】
以上説明した電子反発積分の計算は、初期積分の計算、および、積和演算で表された水平演算式および垂直演算式による漸化計算により、求めたい電子反発積分の計算を実行するものである。ただし、目的の電子反発積分が決まれば、必要な水平演算式および垂直演算式、並びに、初期積分は一義的に決定されるものである。そこで、後述するような電子反発積分演算装置では、実際には、目的の電子反発積分を求めるためのプログラムに従って、まず、初期積分のデータおよびこれに乗ずる係数のデータを用いて積和演算（垂直演算）を実行し、これにより得られた垂直演算結果のデータおよびこれに乗ずる係数のデータを用いて積和演算（水平演算）を実行することにより、目的の電子反発積分を求めることとなる。
【００５９】
Ｂ．電子反発積分演算装置：
以下では、上記した計算手順を利用して目的の電子反発積分を計算する電子反発積分演算装置について説明する。
【００６０】
図３は、本発明の一実施例としての電子反発積分演算装置の概略構成を示す説明図である。この電子反発積分演算装置１００は、管理プロセッサ１０と、メモリ２０と、Ｊｍ個（Ｊｍ≧２）の積和演算器３０（３０［１］〜３０［Ｊｍ］）と、を備えている。これらの各構成要素は、それぞれ、独立した回路を実装基板上に形成して構成される。また、これらの各構成要素のうち、少なくとも、管理プロセッサおよび積和演算器については、１つの半導体基板上に集積化した集積回路により構成されていてもよい。なお、Ｊｍの数は複数であれば特に制限はない。
【００６１】
管理プロセッサ１０は、Ｊｍ個の積和演算器３０による積和演算動作を管理することにより、電子反発積分の処理全体を管理する。具体的には、管理プロセッサ１０は、メモリ２０から読み出された目的の電子反発積分を求めるためのプログラムに従って、目的の電子反発積分を求めるための垂直演算処理および水平演算処理を実行する。
【００６２】
垂直演算を実行する場合において、管理プロセッサ１０は、後述するように、メモリ２０から読み出された垂直演算に必要なデータから垂直演算用のデータセットを作成し、Ｊｍ個の積和演算器３０のうち演算を実行させる積和演算器に転送して、積和演算（垂直演算）を実行させる。そして、管理プロセッサ１０は、演算を終了した積和演算器から演算結果のデータを取得してメモリ２０に格納する。
【００６３】
また、水平演算を実行する場合において、管理プロセッサ１０は、後述するように、メモリ２０から読み出された水平演算に必要なデータから水平演算用のデータセットを作成し、Ｊｍ個の積和演算器３０のうち演算を実行させる積和演算器に転送して、積和演算（水平演算）を実行させる。そして、管理プロセッサ１０は、実行された演算結果のデータを取得してメモリ２０に格納する。
【００６４】
以下では、水平演算処理および垂直演算処理について、さらに詳しく説明する。なお、実際の演算では、垂直演算で得られた積分（中間積分）の結果を利用して、水平演算を実行するが、以下では、説明の便宜上、水平演算処理、垂直演算処理の順に説明する。
【００６５】
Ｃ．水平演算手順：
図４は、電子反発積分演算装置１００で実行される水平演算処理の手順について示す説明図である。
【００６６】
水平演算処理を開始すると、管理プロセッサ１０は、まず、ステップＳ２１０で、メモリ２０から、１回のデータ転送で演算することが可能な積和演算（水平演算）の式数（「単位水平演算式数」と呼ぶ。）Ｎｅｑｈｓを読み出して取得する。
【００６７】
ここで、１つの水平演算の式は、上記（５）式からわかるように、以下の（１９）式に示す１つの中間積分と、１つの中間積分および係数の積と、の和で表される。
【００６８】
【数１８】
2008210190.tif 000020
【００６９】
Ｔは上記（５）式における左辺の積分（目的の電子反発積分）を示している。Ｈ１は（５）式における右辺第一項の中間積分を示しており、Ｈ２は（５）式における右辺第二項の中間積分を示している。Ｋｃは右辺第２項の中間積分の係数を示している。なお、Ｈ１およびＨ２には、後述する垂直演算により求められた結果のデータが適用される。
【００７０】
上記（１９）式からわかるように、１つの水平演算に必要なレジスタ数は、左辺に対応する１個のレジスタと右辺に対応する３個のレジスタの計４個となる。
【００７１】
また、水平演算の式は、目的の電子反発積分の軌道に応じて複数存在する。例えば、＜ｐｐｓｓ＞の場合には、上記したように、１つのｐ軌道に対して、ｘ成分，ｙ成分，ｚ成分の３種類の方位が存在し、（２０ａ）式〜（２０ｉ）式に示すように、＜ｐxｐxｓｓ＞，＜ｐxｐyｓｓ＞，＜ｐxｐzｓｓ＞，＜ｐyｐxｓｓ＞，・・・，＜ｐzｐyｓｓ＞，＜ｐzｐzｓｓ＞の９式の水平演算式が存在する。そして、これら９式の水平演算式は、（２０ａ）式〜（２０ｉ）式を見ればわかるように、ｘ成分，ｙ成分，ｚ成分の３種類の方位に対応する３つの係数（Ａ−Ｂ）ｘ，（Ａ−Ｂ）ｙ，（Ａ−Ｂ）ｚがあり、係数ごとに３式ずつにまとめることができる。
【００７２】
【数１９】
2008210190.tif 000021
【００７３】
また、例えば、＜ｐｐｐｐ＞の場合には、３×３×３×３の８１の水平演算式が存在し、３種類の方位に対応する３つの係数のそれぞれごとに、２７式ずつにまとめることができる。
【００７４】
同様に、＜ｄｄｓｓ＞の場合には、６×６の３６の水平演算式が存在し、３種類の方位に対応する３つの係数のそれぞれごとに、１２式ずつにまとめることができ、＜ｄｄｐｐ＞の場合には、６×６×３×３の３２４の水平演算式が存在し、３種類の方位に対応する３つの係数のそれぞれごとに、１０８式ずつにまとめることができ、＜ｄｄｄｄ＞の場合には、６×６×６×６の１２９６の水平演算式が存在し、３種類の方位に対応する３つの係数のそれぞれごとに、４３２式ずつにまとめることができる。他の種々の積分においても同様である。
【００７５】
そこで、１つの積和演算器では、同じ係数の式の積和演算を実行することとすると、係数のために必要なレジスタは、同じ係数を有する複数の水平演算に対して１つとすることができる。
【００７６】
以上のことから、１つの積和演算器に備えられるレジスタの数をＮｒとすると、１回のデータ転送で演算することができる単位水平演算式数Ｎｅｑｈｓは、以下の（２１）式で表される。なお、レジスタ数Ｎｒの最低個数は、水平演算の場合４個であるが、後述する垂直演算の場合１５個であるので、最低１５個以上必要である。本例では、各積和演算器３０は、６４個（＝Ｎｒ）の倍精度浮動少数点レジスタを有しているものとする。
【００７７】
【数２０】
2008210190.tif 000022
【００７８】
上記（２１）式のｑ［（Ｎｒ−１）／３］は、レジスタ数Ｎｒから係数Ｋｃを格納する１個のレジスタを除いたレジスタ数（Ｎｒ−１）を、積和演算に用いられる２つの中間積分の結果および積和演算の結果の３個のデータを格納するレジスタ数３で割った商を表している。例えば、Ｎｒ＝６４の場合、（２１）式からＮｅｑｈｓ＝２１となり、１回のデータ転送で２１式分のデータ、すなわち、４３個（＝２１×２＋１）のデータの転送が可能となる。
【００７９】
次にステップＳ２２０で、管理プロセッサ１０は、未処理の水平演算の中からＮｅｑｈｓ個の水平演算を、同じ係数の積和演算の中から選択することにより決定する。
【００８０】
そしてステップＳ２３０で、管理プロセッサ１０は、図５に示す水平演算データセットを作成し、メモリ２０に格納する。この水平演算データセットは、決定したＮｅｑｈｓ個の水平演算の実行に必要な［２・Ｎｅｑｈｓ＋１］個のデータを連続データとしてまとめたものであり、スタートアドレスＳＴＡＤｈとデータ長ＤＬｈで管理される。
【００８１】
次にステップＳ２４０で、管理プロセッサ１０は、Ｊｍ個の積和演算器３０［１］〜３０［Ｊｍ］のなかから実行可能な積和演算器３０［ｊ］（ｊは１〜Ｊｍのいずれかである。）を選択する。この選択は、例えば、管理プロセッサ１０が各積和演算器３０に問い合わせを行い、その応答結果に基づいて選択される。また、各積和演算器３０は管理プロセッサ１０からのデータ転送に応じて積和演算を実行するものであり、管理プロセッサ１０では各積和演算器３０の状態を知っているはずである。そこで、各積和演算器の既知の情報に基づいて、演算可能な積和演算器を選択するようにしてもよい。
【００８２】
そしてステップＳ２５０で、管理プロセッサ１０は、選択した積和演算器３０［ｊ］に水平演算データセットを転送する。管理プロセッサ１０は、メモリ２０に格納されている水平演算データセットのスタートアドレスＳＴＡＤｈおよびデータ長ＤＬｈを指定することにより、この水平演算データセットをメモリ２０から順に読み出して高速に転送（バースト転送）することができる。
【００８３】
水平演算データセットを受け取った積和演算器３０［ｊ］は、積和演算（水平演算）を実行する。
【００８４】
次にステップＳ２６０で、管理プロセッサ１０は、すでに演算が終了しており、その結果を取得可能な積和演算器３０がある場合には、その積和演算器３０から演算結果を取得する。これは、管理プロセッサ１０が各積和演算器３０に問い合わせを行い、その応答結果に基づいて実行される。取得した演算結果を示すデータは、メモリ２０の所定の位置に転送されて格納される。この転送は、例えば、バースト転送により実行される。
【００８５】
そしてステップＳ２７０で、管理プロセッサ１０は、未処理の水平演算の有無を判断する。このとき、未処理の水平演算がある場合には（ステップＳ２７０：ＹＥＳ）、ステップＳ２２０に戻って、上記ステップＳ２２０〜ステップＳ２６０の処理を繰り返す。一方、未処理の水平演算がない場合には（ステップＳ２７０：ＮＯ）、ステップＳ２８０の処理を実行する。
【００８６】
ステップＳ２８０では、管理プロセッサ１０は、全演算の結果を取得したか否か判断する。全演算結果が取得されている場合には（ステップＳ２８０：ＹＥＳ）、水平演算処理を終了し、まだ取得されていない演算結果がある場合には（ステップＳ２８０：ＮＯ）、全演算結果の取得が終了するまで、ステップＳ２９０の処理を繰り返す。
【００８７】
ステップＳ２９０では、管理プロセッサ１０は、ステップＳ２６０と同様に、演算結果を取得可能な積和演算器３０がある場合には、その積和演算器３０から演算結果を取得する。取得した演算結果のデータは、メモリ２０の所定の位置に転送されて格納される。この転送は、例えば、バースト転送により実行される。
【００８８】
なお、ステップＳ２２０におけるＮｅｑｈｓ個の水平演算の決定において、未処理の水平演算の数がＮｅｑｈｓ個に満たない場合には、ステップＳ２３０において、未処理の水平演算の実行に必要な数のデータを連続データとしてまとめて水平演算データセットを作成すればよい。
【００８９】
以上説明したように、管理プロセッサ１０は、ステップＳ２１０〜ステップＳ２９０の処理を実行することにより、１つの積和演算器３０で、複数（Ｎｅｑｈｓ個）の水平演算を１回のデータ転送で実行させることができる。また、複数（Ｊｍ個）の積和演算器３０のそれぞれにおいて、複数（Ｎｅｑｈｓ個）の水平演算を並列して実行させることができる。これにより、水平演算を高速に実行することが可能となる。さらに、未処理の水平演算のうちの同じ係数の積和演算の中から複数（Ｎｅｑｈｓ個）の水平演算を選択し、１つの積和演算器３０で、これらの選択した水平演算（積和演算）を実行させることができる。これにより、係数に関係なく複数（Ｎｅｑｈｓ個）の水平演算を１つの積和演算器３０で実行させる場合に比べて、水平演算ごとの係数のデータの転送を省略することが可能であり、その分だけ多くのデータを１回のデータ転送で１つの積和演算器に転送することが可能となるため、その分だけ多くの水平演算を１つの積和演算器で実行が可能となる。これにより、水平演算の高速化を図ることが可能となり、結果として、電子反発積分の計算の高速化を図ることが可能となる。
【００９０】
Ｄ．垂直演算手順：
図６は、電子反発積分演算装置で実行される垂直演算処理の手順について示す説明図である。
【００９１】
垂直演算処理を開始すると、管理プロセッサ１０は、まず、ステップＳ３１０で、メモリ２０から、１回のデータ転送で演算することが可能な積和演算（垂直演算）の式数（「単位垂直演算式数」と呼ぶ。）Ｎｅｑｖｓを読み出して取得する。
【００９２】
ここで、１つの垂直演算の式は、上記（４）式からわかるように、以下の（２２）式に示す最大７個の中間積分および係数の積の和で表される。なお、積の数は、目的とする中間積分＜ａ’０ｂ’０＞の種類に応じて変化する。
【００９３】
【数２１】
2008210190.tif 000023
【００９４】
Ｈは上記（４）式における左辺の積分（水平演算で用いられる中間積分）を示しており、Ｍ１〜Ｍ７およびＣ１〜Ｃ７は右辺の７個の積を構成する積分（初期積分）および係数を示している。
【００９５】
上記（２２）式からわかるように、１つの垂直演算に必要なレジスタ数は、左辺に対応する１個のレジスタと右辺に対応する最大１４個のレジスタの計１５個となる。
【００９６】
なお、水平演算の場合と違い、垂直演算の場合には、上記（２２）式からわかるように係数の種類が多く、同じ係数でまとめてもあまり効果はない。
【００９７】
そこで、１つの積和演算器に備えられるレジスタの数をＮｒとすると、１つの積和演算器において、１回のデータ転送で演算することができる単位垂直演算式数Ｎｅｑｖｓは、以下の（２３）式で表される。
【００９８】
【数２２】
2008210190.tif 000024
【００９９】
上記（２３）式のｑ［Ｎｒ／１５］は、レジスタ数Ｎｒを積和演算に用いられる７個の初期積分および７個の係数１４と積和演算の結果の１５個のデータを格納するレジスタ数１５で割った商を表している。例えば、Ｎｒ＝６４の場合、（２３）式からＮｅｑｖｓ＝４となり、１回のデータ転送で４式分のデータ、すなわち、５６個（＝４×１４）のデータの転送が可能となる。
【０１００】
次にステップＳ３２０で、管理プロセッサ１０は、未処理の垂直演算の中からＮｅｑｖｓ個の垂直演算を選択することにより決定する。
【０１０１】
そしてステップＳ３３０で、管理プロセッサ１０は、図７に示す垂直演算データセットを作成し、メモリ２０に格納する。この垂直演算データセットは、決定したＮｅｑｖｓ個の垂直演算の実行に必要な［１４・Ｎｅｑｖｓ］個のデータを連続データとしてまとめたものであり、スタートアドレスＳＴＡＤｖとデータ長ＤＬｖで管理される。
【０１０２】
次にステップＳ３４０で、管理プロセッサ１０は、Ｊｍ個の積和演算器３０［１］〜３０［Ｊｍ］のなかから実行可能な積和演算器３０［ｊ］（ｊ＝１〜Ｊｍ）を選択する。この処理は、水平演算のステップＳ２４０（図４）と同様である。
【０１０３】
そしてステップＳ３５０で、管理プロセッサ１０は、選択した積和演算器３０［ｊ］に垂直演算データセットを転送する。この処理は、水平演算のステップＳ３５０と同様に、管理プロセッサ１０が、垂直演算データセットのスタートアドレスＳＴＡＤｖおよびデータ長ＤＬｖを指定することにより、この垂直演算データセットをメモリ２０から順に読み出して高速に転送することができる。
【０１０４】
垂直演算データセットを受け取った積和演算器３０［ｊ］は、積和演算（垂直演算）を実行する。
【０１０５】
次にステップＳ３６０で、管理プロセッサ１０は、すでに演算が終了しており、その結果を取得可能な積和演算器３０がある場合には、その積和演算器３０から演算結果を取得する。この処理は、水平演算のステップＳ２６０と同様である。
【０１０６】
そしてステップＳ３７０で、管理プロセッサ１０は、未処理の垂直演算の有無を判断する。このとき、未処理の垂直演算がある場合には（ステップＳ３７０：ＹＥＳ）、ステップＳ３２０に戻って、上記ステップＳ３２０〜ステップＳ３６０の処理を繰り返す。一方、未処理の垂直演算がない場合には（ステップＳ３７０：ＮＯ）、ステップＳ３８０の処理を実行する。
【０１０７】
ステップＳ３８０では、管理プロセッサ１０は、全演算の結果を取得したか否か判断する。全演算結果が取得されている場合には（ステップＳ３８０：ＹＥＳ）、垂直演算処理を終了し、まだ取得されていない演算結果がある場合には（ステップＳ３８０：ＮＯ）、全演算結果の取得が終了するまで、ステップＳ３９０の判断処理を繰り返す。
【０１０８】
ステップＳ３９０では、管理プロセッサ１０は、ステップＳ３６０と同様に、演算結果を取得可能な積和演算器３０がある場合には、その積和演算器３０から演算結果を取得する。この処理は、水平演算のステップＳ２９０と同様である。
【０１０９】
なお、ステップＳ３２０におけるＮｅｑｖｓ個の垂直演算の決定において、未処理の垂直演算の数がＮｅｑｖｓ個に満たない場合には、ステップＳ３３０において、未処理の垂直演算の実行に必要な数のデータを連続データとしてまとめて垂直演算データセットを作成すればよい。また、上記（２２）式で示される垂直演算の式の右辺の積の数は、目的の積分の種類に応じて変化するものであり、１つの垂直演算の式に対して１４個のデータが存在しない場合がある。このような場合においても、１つの垂直演算のためのデータは１４個として、存在しないデータ部分は、「０」としてデータセットを作成すればよい。
【０１１０】
以上説明したように、管理プロセッサ１０は、ステップＳ３１０〜ステップＳ３９０の処理を実行することにより、１つの積和演算器３０で、複数（Ｎｅｑｖｓ個）の垂直演算を１回のデータ転送で実行させることができる。また、複数（Ｊｍ個）の積和演算器３０のそれぞれにおいて、複数（Ｎｅｑｖｓ個）の垂直演算を並列して実行させることができる。これにより、垂直演算を高速に実行することが可能となり、結果として、電子反発積分の計算の高速化を図ることが可能となる。
【０１１１】
Ｅ．変形例：
なお、この発明は上記実施例や実施の形態に限られるものではなく、その要旨を逸脱しない範囲において種々の形態において実施することが可能である。
【０１１２】
上記実施例では、水平演算において、実行可能な積和演算器のうちのいずれか１つの積和演算器に対して水平演算データセットを転送するものとして説明したが、３つの係数のそれぞれに対して、積和演算器を専用に割り当てておくようにしてもよい。
【０１１３】
上記実施例では、１つの積和演算器に対して、複数の演算（水平演算あるいは垂直演算）のためのデータをまとめたデータセット（水平演算データセットあるいは垂直演算データセット）を作成してメモリに格納しておき、そのスタートアドレスとデータ長を指定してバースト転送を実行することにより、複数のデータを連続データとして高速に転送することとしているが、これに限定されるものではなく、複数の演算のためのデータを連続データとして転送することができれば、どのような方法であってもよい。
【０１１４】
上記実施例では、１つの積和演算器がＮｒ個のレジスタを有していることとして説明しているが、１つのメモリの記憶領域をＮｒ個のレジスタに対応する領域に区分するようにしてもよい。
【０１１５】
上記実施例では、電子反発積分を演算する電子反発積分演算装置を例に説明したが、種々の分子積分を演算する分子積分演算装置においても同様に適用可能である。
【図面の簡単な説明】
【０１１６】
【図１】電子反発積分＜ｐｐｓｓ＞の場合の初期積分を示す表である。
【図２】目的の電子反発積分＜ａｂｃｄ＞を求める手順について示す説明図である。
【図３】本発明の一実施例としての電子反発積分演算装置の概略構成を示す説明図である。
【図４】電子反発積分演算装置で実行される水平演算処理の手順について示す説明図である。
【図５】水平演算データセットについて示す説明図である。
【図６】電子反発積分演算装置で実行される垂直演算処理の手順について示す説明図である。
【図７】垂直演算データセットについて示す説明図である。
【符号の説明】
【０１１７】
１０…管理プロセッサ
２０…メモリ
３０…積和演算器
１００…電子反発積分演算装置
【図１】
2008210190.tif 000025
【図２】
2008210190.tif 000026
【図３】
2008210190.tif 000027
【図４】
2008210190.tif 000028
【図５】
2008210190.tif 000029
【図６】
2008210190.tif 000030
【図７】
2008210190.tif 000031