(1) |
である。Frs(k), Hrs(k), Srs(k)は、 k をあらわに含まない実空間での各行列要素のフーリエ変換で表 すことができて、
(2) | |
(3) | |
(4) |
ここで、
(5) | |
(6) | |
(7) | |
(8) |
これらの関係式からユニットセル当りの全エネルギーは、
(9) |
ここで、n は基底関数の数をNは考慮する隣接セル数を表す。
式(7)より容易にわかるように、二電子積分の数はN3n4に比例する。
Fockの行列要素を計算するのに必要な電子密度行列は結晶軌道の係
数$ Ctn(k)から計算されるが、結晶軌道の係数は変分方程式
を解かないと得ることができない。従って、分子軌道計算の場合と全く同様
にSCF計算が必要である。
図1 並列計算の概要
...
ncb=0
DO J= 0,N
DO K=-N+J,N
DO L=-N+J,N
ncb=ncb+1
if(mod(ncb,nproc).eq.me) then
DO R=1,n
DO S=1,n
DO T=1,n
DO U=1,n
Calculate
(a)二電子積分およびその微分の並列化
...
DO K=1,KPOINT
if(mod(K,nproc).eq.me) then
calculate F(K)
diagonalize F(K)
calculate P(K)
endif
ENDDO
call dgop(type+msgdbl,density,KPOINT*n*n,'+')
...
(b)波数ベクトルを伴う部分の並列化
二電子積分および二電子積分の核座標に関する微分の計算を隣接セル数である
Nを用いた並列化ならびにバンド計算において特徴的な波数ベクトル k
に関する計算についての並列化を行なった。(式(1)-(4), (8))図1に並列化の
概要を示す。なお二電子積分の並列化のアルゴリズムは分子軌道法において使
われているものと同様であるが、単位セルの番号を用いて並列化を行なってい
る点が異なる。
並列計算を行なうためのライブラリとしては、TCGMSGライブラリ[5]
を用いて各プロセス間のソケット通信を行なった。
速度比較のためにpoly-tetrafluoro-ethylene (C2F4)x を対象に選
んだ。基底関数はSTO-3G[7]を用いた。(n=30) 隣接セル数Nは5とし
て、二電子積分のカットオフ法にはNamur Cutoff 法を用いた[8]
波数ベクトルのサンプリングは41点で行ない、Simpsonの公式を用いて式(8)の
積分を行なった[6]
プロセス数 | 時間(秒)a | 加速率 | 時間(秒)b | 加速率 |
Cray T932 | ||||
1 | 544.7 | 1.00 | 544.7 | 1.00 |
2 | 282.5 | 1.93 | 291.2 | 1.87 |
4 | 147.7 | 3.69 | 163.6 | 3.32 |
8 | 88.9 | 6.13 | 108.3 | 5.02 |
16 | 60.8 | 8.96 | 80.4 | 6.77 |
RS6000/590 cluster | ||||
1 | 342.8 | 1.00 | 342.8 | 1.00 |
2 | 182.8 | 1.88 | 195.8 | 1.75 |
4 | 88.2 | 3.89 | 107.9 | 3.18 |
8 | 52.9 | 6.48 | 76.3 | 4.49 |
16 | 37.1 | 9.24 | 62.6 | 5.47 |
PC-cluster | ||||
1 | 794.4 | 1.00 | 794.4 | 1.00 |
2 | 492.0 | 1.61 | 556.2 | 1.42 |
4 | 301.7 | 2.63 | 468.2 | 1.69 |
8 | 154.6 | 5.14 | 337.1 | 2.35 |
16 | 139.3 | 5.70 | 301.2 | 2.63 |
a k並列化を含む b k並列化を含まない |
二電子積分と波数ベクトルの両
方を並列化したものと、波数ベクトルについては並列化を行なわなかった物の
双方について示した。ここで並列計算におけるCPU占有時間は並列計算時に最
もCPU時間を消費したプロセスのCPU時間である。速度の計測は各10回行ない、
最速値をとった。WSおよびPCクラスターはそれぞ
れ4CPUしか持たないため、各CPUについて1、2、または4プロセスずつ発生
させて、それぞれ4、8、16 並列計算の値をシュミレートした。ただし同一CPU
上のプロセス間通信ではセマフォを用いた共有メモリーが使用されるので、純
粋に8CPU、16CPUでソケット通信のみを使用した場合に比べて速度的に有利に
なっている可能性は残る。なお、Cray T932は32CPUを持ち原理的には32並列ま
で可能であるが、センター共用マシンであり運用上のメモリー確保の関係から
16並列以上の計算が今回は不可能であった。
ここで加速率を1CPU使用時のCPU占有時間を並列計算時のCPU時間で除算したも
のとして定義すると、SCならびにWSでは、4プロセスまではほぼ直線的に加速
されて、1CPU使用時の3.69倍ならびに3.89倍と理論値4にかなり近い値が得ら
れていることがわかる。これに対して、PCクラスターでは速度の違うCPUを用
いているため最も遅いCPUが律速となり見かけ上の加速率は小さくなるものの、
4プロセスで2.63倍となり、並列計算を行なうことによりSCやWSを単一で用い
た場合の性能を上回っていることがわかる。またPCクラスター8プロセス時の
CPU時間を見てみるとCrayのほぼ4CPU、RS6000/590クラスターの3CPUと同等の
性能が得られている。ただし、PCクラスターでは8プロセスから16プロセスへ
プロセス数を増加させても5.14倍から5.70倍とわずかな速度の向上にとどまっ
ている。
次にCray T932およびRS6000/590クラスターでは並列度が8または16になった場
合には4までの場合に比べて加速率が上がらなくなり、並列度8の場合で6--6.5
倍程度、並列度16の場合で約9倍程度に留まっている。図2に並列度16の場合の
各ノードでのCPU占有時間を示した。これから容易にわかる
ように、並列度が上がるにつれて、各ノードへの計算の効率的な分散がうまく
いかなくなっている。特にノード12、14はほとんど使用されていないことがわ
かる。さらにPCクラスターでは最も計算速度の速いP6-200 CPUがノード12--15
に割り当てられており、並列度8と16の場合でほとんど速度の向上が見られな
かった原因であると考えられる。今後はさらに各CPUへの負荷分散がより平均
化されるような並列化の方法を検討する必要があろう。
波数ベクトルに関する並列化の効果は並列度が上がると相対的にかなり大きく
なり、16並列計算時には、最も効果が少ないCray T932の場合でも80.4秒から
60.8秒と約30\%の節約になっていることが表1からわかる。WSクラスターにお
いても、62.6秒から37.1秒と約40\%節約されている。特にPCクラスターの場合
は対角化およびそれに伴う行列の演算が特に遅いためと思われるが[9]、
CPU時間が301.2秒から139.3秒と半分以下に減少している。
逆にいうと、このようにベクトル長の短い計算においてはPCクラスターによ
る並列計算は特に有効であることがわかる。波数ベクトルのサンプリング点は
多ければ多いほど正確になるため、例えばCPU数の倍数になるようにサンプリ
ングを行なうような方法を用いる事で高精度高能率な並列処理がPCクラスター
上で行なえる事が期待できる。
ファイルの並列入出力は今回行なった方法によれば自然に行なわれる。1CPUで
の実行時には32MBあったファイルが例えば16並列処理では最大のファイルサイ
ズが約3.6MBになりファイルアクセス時間はCPU使用時間と同等に分散されてい
ることがわかる。この事実は入出力速度が遅いPCクラスターの場合特に重要で
ある。また今回は試みなかったが、PCクラスターにおいてはメモリーを増設す
るのが価格面からSCやWSに比べてはるかに容易であり、かなりの大きさのポリ
マーまで全ての積分をメモリーに保存することもある程度の台数が確保できる
ならば可能である。今後の検討課題であろう。
PCクラスターに関して、P5CPUについてはあまり問題がないが、P6CPUはちょっ
としたプログラミングによって大きく計算速度が変わる場合がある。例えば、
Linpackベンチマークでループ数100配列数201では10Mflops程度の速度である
が配列数200であると30Mflops程度まで速度が向上する。ループ数を101として
計算してみると、配列数101だと9Mflops程度まで速度が低下してしまう。ルー
プ数101配列数を102とすると15Mflopsまで回復する。このようにちょっとした
プログラムの差により、キャッシュメモリーの制御の関係と思われるが、大
きく計算速度が変わるようである。本研究においても、例えば積分のプログラ
ムの手直しにより全く関係が無いと思われる、SCFの部分の計算時間が1.5倍程
度の範囲内で上下した。PCクラスターで最高のパフォーマンスを得るためには
今後さらにプログラム全体の検討が必要と思われる。
謝辞 本研究を行なうにあたり、お世話になりましたお茶の水女子大学 の長嶋雲兵教授に深く感謝いたします。