next up previous contents index
Next: 完全な3次元並列化 Up: MPI並列化 Previous: クラスター計算   Contents   Index

バンド計算

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

     scf.eigen.lib      elpa1    # elpa1|elpa2, default=elpa1
既定の選択肢はELPA1です。ここでは提示しませんが、我々のベンチマーク計算は 計算速度に関してほぼ同様な性能であることを示唆しています。