バンド計算ではスピン多重度、k点、固有状態の3つのループ構造に対してMPI並列化が実装されています。
スピン多重度は非スピン分極計算およびノンコリニア計算では1、スピン分極計算では2となります。
スピン多重度がまず優先的に並列化され、多数のMPIプロセスが使用された際には、さらにk点、固有状態の順番で
並列化されます。
またMPIプロセス数が(スピン多重度)(k点数)以下の場合、各k点で化学ポテンシャルと
密度行列の各計算のために2回の対角化が行われます。これは波動関数を保持するためのメモリ使用量を削減するためで、
1回目の対角化で化学ポテンシャルを探索し、2回目の対角化で波動関数を保持することなく、直接に密度行列を計算
しています。
一方、MPIプロセス数が(スピン多重度)
(k点数)を越える場合、各プロセスは多数のk点での
波動関数をメモリ上に保持する必要がないため、対角化は一度だけで、計算効率が見かけの上で向上します。
図 21 (c)に示す様に、プロセス数の関数として速度向上比を見た場合、バンド計算の並列化効率は良好であることが
分かります。
この計算は3
3
3個のk点を考慮したダイヤモンド (64炭素原子)の非スピン分極バンド計算
を行ったもので、使用した入力ファイルは「work」ディレクトリ にある「DIA64_Band.dat」です。
この場合のスピン多重度は1です。またコリニア計算ではブリルアンゾーンの半分のk点のみが考慮されます。
a軸、 b軸、c軸に対する全てのk点数が奇数の場合には、
点が含まれますので、
実際の計算が行われたk点数は(3
3
3-1)/2+1=14となります。
プロセス数が14以上では、速度向上比が理想値を超えていますが、これは上記で説明したアルゴリズムの変更によるものです。
クラスター計算と同様に、バンド計算における固有値問題の解法には高並列固有値ソルバー: ELPA [28]を使用しています。