HPCシステムズではエンジニアを募集しています。詳しくはこちらをご覧ください。
HPCシステムズのエンジニア達による技術ブログ

Tech Blog

MPI or openMP

DFTB+という電子特性を研究する為の量子シミュレーションプログラムがあります。

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以降、異様にリリースが早いアレコレが。

ノードを跨ぐとアレな結果になるとか、並列しても計算時間がな版がとか、こう、苦労してるんだなぁという話だったりするんですけどね。

バージョンアップが頻繁な場合、最新がいつも最良とは限らないというか、頻繁にアップデートするのには理由があるって話なのかもしれません。