DFTB+という電子特性を研究する為の量子シミュレーションプログラムがあります。
ごく偶にお問い合わせがある古くからあるアプリです。
色々な事が出来るのですが、研究分野を離れたところで興味深い点がありまして、それは、元々、並列をOpenMPで実装していたという点です。
ver17.1までは、OpenMPだけで実装されていました。
ところが、ver19.1でなんとMPIも実装されたという事で、比較試験を行なってみました。
手頃な計算時間のかかるインプットはないかいなという事で、レシピというサンプルの中の2D carbon armchairのv1 densityを求めるインプットを使用して、ビルドしたDFTB+ 19.1のOpenMPでの計算時間と、MPIでの計算時間を求めてみたのが次の図です。
DFTB+は、ソース以外にバイナリも配布しているので、その配布バイナリを使用して1コアで計算した時間を100%として、並列数での変化を見たのが上の図です。
8並列まではOpenMP版の方が早いんです!
しかし、元々、あまり多数並列を想定していない為か、16並列からMPI版の方が計算時間が短かくなってしまっています。OpenMPの特性もありますけど。
OpenMPって、こうしてみると良いんですね、といった結論になって、そういえば、自動でOpenMP化するオプションがあったなぁとかで自作コードをOpenMP化する、というのは、しかし、あまりお勧めしません。
というのは、DFTB+の場合、しっかりOpenMPを意識してチューニングしたコードを開発したので、こういった性能が出ている面があります。
逆に言えば、OpenMPに適応しまくった為、MPI版の開発が大変になって、なんとか実装出来ても、少数並列の場合、OpenMPに大きく負けてしまったんだろうなと思います。
実装に苦労したんだろうな、というのは、上の図の1コアで、MPIで動作させた場合、OpenMPより、2割も遅いところからで、MPIで動かす場合、OpenMP版とは違って、うんこらしょってな感じで動かす部分があるみたいです。
まあ、実際にはさらに分る部分もありまして、現在、最新はver20.2.1みたいですが、ver17.1の後、ver19.1まで2年、間が開いていたのに、ver19.1以降、異様にリリースが早いアレコレが。
ノードを跨ぐとアレな結果になるとか、並列しても計算時間がな版がとか、こう、苦労してるんだなぁという話だったりするんですけどね。
バージョンアップが頻繁な場合、最新がいつも最良とは限らないというか、頻繁にアップデートするのには理由があるって話なのかもしれません。