Partially Direct SCF法の開発と性能評価

稲富 雄一, 佐々木 徹, 長嶋 雲兵, 村上 和彰


Return

1 はじめに

Hartree-Fock(HF)分子軌道(MO)法や密度汎関数(DFT)法の計算では、2電子積分の計算、処理に多くの時間を費やす。そのため、MO計算を高速に行うためには、2電子積分の計算を高速に行う必要がある。高速な2電子積分計算には、高速な計算アルゴリズムの開発やソフトウェアによる並列処理など、いろいろな方法が考えられる。Embedded High Performance Computing (EHPC)プロジェクトでは、2電子積分計算を行うための専用ロジック(ERICチップ)を用いた超並列処理により、積分計算を高速に、かつ低消費電力で行う方法を検討してきた[1]。ERICチップには、適用範囲が2電子積分計算のみと狭い代わりに、積分計算に対する処理能力が高く、かつ、消費電力も汎用プロセッサに比べて低く抑えられる、という特徴がある。したがって、数100~数1,000のERICチップを用いることで、一般的な研究室の電源設備で駆動できる高速な分子軌道計算専用マシンを、小さな設置スペースに構築することが可能になる。
Figure 1にERICチップを使用した2電子積分(Fock行列作成)専用計算機システムの構成を示す。本プロジェクトで開発しているFock行列作成専用計算機は、数個のERICチップを搭載したcompact PCI(CPCI)規格準拠のボードをCPCIボード用のスロットを持つ汎用計算機に装着する構造を採っている。これは、ERICチップの部分のみを他の専用ロジックと交換することにより、他の専用計算機へ変更することを容易にするためである。ここで、1つのCPCIボードに注目すると、ボード上には磁気ディスクなどの2次記憶装置がない(ディスクレス構造)が、ERICチップが各自で専用にアクセスできるメモリを持つ。このメモリの大きさは256MB~2GBくらいである。ERICチップが対象としている系の大きさが、計算精度の点から約5,000軌道まで、ということを考えると、Fock行列や密度行列の行列要素などの必要データを格納しても、メモリに余剰領域が生じる。このメモリを有効に利用するために膨大な二電子積分の一部を保存して、MO計算で行う繰り返し(SCF)計算の際に再利用することを考える。そうすれば、2回目以降のSCFサイクルでの2電子積分の計算量が減少して、見かけ上の積分計算が高速になるはずである。そこでこのような二電子積分の一部を再利用するSCF計算法(以降、partially direct SCF (PDSCF)法、と呼ぶ)のプログラムを作成して、開発中の分子軌道専用計算機システムを用いた超並列処理が、高い効率を保ったまま行えるかどうかの評価を行った。


Figure 1. System configuration of the special purpose computer for the fast Fock matrix generation with special purpose processors for electron repulsion integral (ERI) evaluation

2 計算方法

2電子積分計算には、小原らが提案したVertical Recurrence Relation(VRR)[2]とHead-Gordonらが提案したHorizontal Recurrence Relation(HRR)[3]を組み合わせたhybridアルゴリズムを用いて筆者らが独自に開発したプログラム(C言語版、およびF77版)を使用した。
分子積分には積分に関わる軌道の軌道量子数により(ss,ss)や(ps,ss)などといった様々な積分タイプが存在し、その演算量も異なる。PDSCF法では、どのタイプの積分からメモリに保存するかが性能に影響する。そこで、各タイプの2電子積分に必要となる計算時間、演算数などのプロセッサ資源を調べるために、Performance Counter Library(PCL)を用いて、積分タイプごとの性能を評価した。積分計算の並列化はMessage Passing Interface(MPI)[5]を用いて行った。使用するプロセッサ数や積分保存領域(バッファ)の大きさを変化させて、PDSCF法の性能評価を行った。計算には産業技術総合研究所(AIST)グリッド研究センターにあるGfarm Clusterを使用した。コンパイラには、インテルコンパイラ(Linux版、version8.0)[6, 7]を用いた。

3 結果

3. 1 各積分タイプに必要な計算量の比較

Figure 2は、F77版の積分プログラムとPCLを用いて、各タイプの積分1個あたりの計算コストを示したもので、(dd,dd)タイプの結果を1とした場合の比が描かれている。この計算はPentium4 (2.0GHz)を搭載したデスクトップパソコンで計測したものである。対象分子としてThymine、基底関数として6-31G*(147軌道)を用いた。この図で、"Cycles"は計算に要するプロセッサのクロックサイクル数の比を表しており、これは単純に積分計算に必要な計算時間の比と考えてよいものである。また、"FLOPS"の値は、積分計算に必要な四則演算や開平計算などの浮動小数演算数の比を示している。ただし、各演算の演算コストは考慮せずに、演算数を単純に比較したものである。まず、"Cycles"の値を見ると、 (ss,ss)や(ps,ss)といった、2電子積分1個を構成する4つの基底関数の軌道量子数の和が小さな積分の方が、(dd,dd)などの軌道量子数の和が大きなものに比べて大きな値をもつことが分かる。2電子積分の値1つを計算するコストは(dd,dd)タイプに比べて、たとえば、(ss,ss)タイプで約62倍、(ps,ss)タイプで約19倍大きい。したがって、PDSCF法においては、積分1つ当たりの計算コストの大きな(ss,ss)タイプの積分の値を優先してバッファに保存したほうが性能向上の点で有利である。次に、積分1つあたりの演算数を示している"FLOPS"の値を見ると、先ほどの"Cycles"と同様の傾向を示している。ただし"Cycles"の場合ほどの大きな開きがない。(dd,dd)の結果と比べた場合、たとえば、(ss,ss)タイプでは、演算回数は30倍弱であるのに対して、実際の計算時間は前述の通り60倍を越えており、演算数と計算時間の比に約2倍の開きがある。これは、すべての積分タイプで共通に必要となる初期積分計算には、汎用プロセッサが加減乗算に比べて不得意としている除算や開平計算が多く含まれていること、さらに、(ss,ss)や(ps,ss)などの計算では、(pp,pp)、(dd,dd)などの積分に比べて、1回に計算できる積分数が少ないため、積分値1つの計算における初期積分計算の割合が大きいこと、などが原因である。


Figure 2. Ratios of cost to evaluate a two-electron integral value for every integral type to (dd,dd) results for Thymine molecule using 6-31G* basis set(Cycles: the number of clock cycles, FLOPS: the number of floating point operations)

3. 2 保存順序による性能の違い

積分タイプによる計算コストの差から、PDSCF法においては、軌道量子数の和が小さな積分(ss,ss)からバッファに保存して再利用したほうが高い性能が得られることがわかった。そこで、実際にFock行列作成を行って、積分を保存する順序によるPDSCF法の性能の違いを調べた。対象分子として(Gly)15(原子数108)を、基底関数としてSTO-3G(軌道数352)をそれぞれ用いた。使用した計算機はGfarm cluster(Dual Xeon (2.8GHz) × 90 nodes)で、そのうち1~16プロセッサを使って性能評価を行った。プログラムはC言語版の積分プログラムを用い、軌道量子数の和の小さな(ss,ss)タイプの積分から保存するもの(increasing order)と、軌道量子数の和が大きな(pp,pp)タイプの積分から保存するもの(decreasing order)、という2つの保存方法でPDSCF法を実装して、そのテストを行った。


Figure 3. Effect of the storage order of ERI in the PDSCF(Speedup ratios in Fock matrix generation at Second SCF cycle)(buffer size = 64MB/processor, Target molecule= (Gly)15, basis set = STO-3G (108 atoms、352 basis functions) )

Figure 3に、PDSCF法の2回目のSCFサイクルでのFock行列作成時間における台数効果を示す(バッファサイズはプロセッサあたり64MB)。PDSCF法は、積分の保存順序に関わらず、理想的な線形速度向上率(図中で"linear scaling"と描かれている直線が表している)よりも高い並列化性能(スーパーリニアスピードアップ)を持っていることが分かる。これは、台数が増えるに従って、実質的にバッファメモリ量が増大するためである。
また、優先して保存する積分のタイプが、性能に大きく影響していることがわかる。たとえば、16プロセッサ使用時に、(pp,pp)から保存した場合には17.7倍の速度向上比であるのに対して、(ss,ss)から保存した場合では25.5倍と、大きく性能に差がある。したがって、積分タイプにおける計算コストの違いから予測されたとおり、PDSCF法では、軌道量子数の和の小さい積分から保存、再利用するほうが、よい性能を得られることが明らかとなった。

3. 3 バッファサイズによる性能の違い

PDSCF法のやや大規模な計算における性能を調べるために、対象分子としてCrambin(46アミノ酸残基、642原子)に対するFock行列作成における並列化の効率を測定した。基底関数としてはSTO-3Gを用いた(軌道数1,974)。また、プロセッサあたりのバッファのサイズを従来のdirect SCF法[8]と等価な0MB(0MB/proc)から128MB(128MB/proc)まで変化させて、バッファサイズがPDSCF法に及ぼす影響を調べた。使用した計算機はGfarm Clusterで、そのうち1~64ノード(1~128プロセッサ)を用いて計算を行った。


Figure 4. Parallelization efficiencies of the PDSCF and the conventional direct SCF methods for large systems at the second SCF cycle. (Target = Crambin, basis set = STO-3G (642 atoms, 1,974 basis functions) )

Figure 4に、この計算の2回目のSCFサイクルにおけるFock行列作成における並列化効率を示す。ここで、並列化効率は、次式を用いて計算している。

この定義から分かるように、この値が1未満であれば、実際の並列性能が理想値を下回っていることを意味し、逆に、1を越えていれば、理想的な並列性能を上回る処理速度が得られていることになる。
まず、バッファサイズが0MB/procの場合、つまり、通常のdirect SCF法の結果を見ると、2電子積分計算が本来持っている高い並列性のため、ほぼ理想的な並列化効率を示していることがわかる。たとえば、64プロセッサ使用時で0.980、128プロセッサ使用時では0.978と、ほぼ1に近い並列化効率が得られていることがわかる。しかし、プロセッサ数が増えるにしたがって、並列化効率が除々に低下している。これは、通信などの並列処理を行うためのオーバヘッドや、並列化できない部分の存在がプロセッサ数の増大により大きな割合を示すようになること、によるもので、並列処理を行う場合に生じる一般的な現象である。数100以上のプロセッサを用いた並列処理や、ERICチップを用いた超並列処理を行う場合に、思ったような速度向上が得られないことが明らかである。
次にバッファサイズが0MB/proc ではないPDSCF法の結果についての考察を行う。Figure 4からまず言えるのは、プロセッサ当たりのバッファサイズが大きいほど、見かけの並列化効率が向上していることである。これは、バッファサイズが大きくなれば2回目のSCFサイクル以降、再計算の必要がない積分量が増えることによるものである。具体的な数値で見ると、128プロセッサ使用時で見た場合、32MB/proc、64MB/proc、128MB/procと増えると、並列化効率はそれぞれ、1.020、1.058、1.130とよくなっている。
さらに、2~16プロセッサを用いた小規模な並列処理を行った場合には低下する傾向にあった並列化効率が、プロセッサ数が32、64、128と増えるつれて、上昇していることが分かる。たとえば、バッファサイズが64MB/procの場合を見ると、16並列時に0.992まで低下した並列化効率が、32並列時には1.003、64並列時には1.022と改善していき、128プロセッサ使用時には1.058にまで向上している。この傾向は、バッファサイズが小さな場合にも見られ、16MB/procの場合には、8並列時に0.979まで低下した並列化効率が、その後上昇に転じ、128並列時には0.998まで回復している。
Fock行列作成の並列化では、各プロセッサでFock行列の部分和を生成したあと、最後に、それらの総和を求めるために通信を行う必要があり、この処理の存在が、従来のdirect SCF法、PDSCF法の両方において、並列化効率低下を引き起こす主な原因である。計算に使用するプロセッサ数をNとした場合、この通信にかかるコストはlog2Nに比例して増加する。したがって、従来のdirect SCF法では、並列Fock行列生成全体での並列化効率は、プロセッサ数が増加するに従って、徐々に低下していく。一方で、PDSCF法で2回目のSCFサイクル以降に計算しなくてすむ2電子積分数は、用いるプロセッサ数に比例して増加するため、2電子積分の計算コストは、プロセッサ数に比例して減少することになる。PDSCF法における、通信コストと積分計算コストを比較すると、並列処理に用いるプロセッサ数を増やした場合、通信コストの増加よりも、2電子積分計算コストの減少の程度が大きく、全体として、見かけの並列化効率がよくなることが予想される。今回のCrambinに対するPDSCF法の計算結果は、そのことを実証した形になっている。
ここで、並列化効率が1を上回るために必要となるバッファの総量について考える。Figure 4で並列化効率1付近にある点を見ると、バッファ総量が2GBを越えたあたりで、並列化効率1にかなり近い値をとる、あるいは1を超えることが分かる。それは、(バッファサイズ, プロセッサ数)の組で、(128MB/proc, 16)、(64MB/proc, 32)、(32MB/ proc, 64)、あるいは(16MB/proc, 128)の場合に相当し、その並列化効率は、それぞれ、1.001、1.003、1.008、および0.998を示している。このバッファには、今回の系で有意な値(絶対値で10-15以上)を持つ2電子積分のわずか0.43%程度しか保存されていない。しかしながら、このように非常に少数の2電子積分を保存するだけで、PDSCF法がsuper linearな性能向上を示すことがわかる。先に述べたとおり、ERICチップを用いた2電子積分専用計算機では5,000軌道くらいまでの系を対象としているが、その大きさは、今回計算した系(Crambin)での軌道数の約2.5倍である。Crambinの場合ではバッファ総量が2GB(1,024プロセッサ換算時でのバッファサイズ=2MB/proc)で見かけの並列化効率が1を超えたこと、2電子積分数は軌道数の4乗に比例すること、などを考慮すると、たとえば、5,000軌道の計算を1,024並列で行う場合に、高々78(2.54×2)MB/procのバッファを用いれば、ほぼlinearな性能向上が得られると予想される。

4 まとめ

メモリに2電子積分の一部を保存し、再利用するPDSCF法を提案し、その性能評価を行った。積分タイプによる計算コストの比から、軌道量子数の和が小さな2電子積分から保存、再利用したほうがPDSCF法の性能がよいことが明らかになった。また、プロセッサ当たりのバッファサイズが比較的小さい場合でも、使用するプロセッサ数を増やすと、PDSCF法の見かけ上の並列化効率が大きくなることも明らかとなった。今回の計算はPCクラスタを用いて行ったが、この方法は、ディスクレスの並列計算機に一般的な並列Fock作成の高速化技法である。したがって、EHPCプロジェクトで開発を行ってきた、ERICチップを多数搭載した超並列計算機への適用した場合には、使用するチップ数に応じたスケーラブルな性能向上をもたらすと考えられる。
PDSCF法は一種のデータのキャッシュ方法であるが、従来の計算機アーキテクチャサイドから提案されてきたキャッシュ機構とは異なる機構に基づいている。これは、すべての二電子積分値が一回のSCFサイクル中では、それぞれ一回しか出現しないため、メモリアクセスに対する時間や空間のローカリティを活用することはできないためである。そこで、キャッシングの優先度として二電子積分値1個あたりの計算負荷を指標に用いた。また、今回の実装では、メモリアドレスではなく、もっと抽象度の高い四重ループIJKLのインデックスをキャッシュした二電子積分値のタグとしている。従って、データアクセスのローカリティから予測される出現頻度に基づいて機械論的にキャッシングの優先度を決定するキャッシュ機構と比べて、よりアプリケーションに近い所から発想されたアプリケーション指向の高速化技術であると言うことができる。これはEHPCプロジェクトのような計算化学と計算機のそれぞれの研究者が緊密に連携した結果であり、今後の計算機開発手法のひとつの方向を示すものと考えている。

本研究の一部は、科学技術振興費の総合研究「科学技術計算専用ロジック組み込み型プラットフォーム・アーキテクチャに関する研究」の支援による。また、すべての並列計算はGfarmクラスタを用いて、産総研(AIST)のグリッド研究センター(GTRC)で行った。

参考文献

[ 1] Embedded High Performance Computing (EHPC) プロジェクト;
URL:
http://www.ehpc.jp
[ 2] S. Obara and A. Saika, J. Chem. Phys., 84, 3963 (1986).
[ 3] M. Head-Gordon and J. A. Pople, J. Chem. Phys., 89, 5777 (1988).
[ 4] PCL - The Performance Counter Library Version 2.2, January 2003,
http://www.fz-juelich.de/zam/PCL/
[ 5] MPI: A Message-Passing Interface Standard, MPI forum, 1995.
[ 6] Intel Fortran compiler 8.0 for Linux, Copyright (c) 1998-2003 Intel Corporation.
[ 7] Intel C++ compiler 8.0 for Linux, Copyright (c) 2001-2003 Intel Corporation.
[ 8] J. Almlof, K. Faegri Jr. and K. Korsell, J. Compt. Chem., 3, 385 (1982).


Return