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

Tech Blog

DALTONを高速化

DALTONという名前の量子化学プログラムスイートがあります。
https://daltonprogram.org/
この名称は、ホームページで人物の姿があるように、John Dalton博士をリスペクトしたものだろうという事は分るのですが、イギリス系の地名や姓など、かなり一般的な単語の為、Web用の検索エンジンを単純に使用すると、関連の無いものばかりが並ぶ事になるという困ったアプリでもあったりします。

このDALTON、かなり古くから存在するもので、最初のリリースは1983年、version 1.0が1997年 というものなので、スパコン世代の癖がかなり濃厚に残っているアプリです。
2011年以降、DALTONはバージョンナンバーがver 2.0とかではなく、リリース年に変更になったのですが、この辺りから、活発に開発が行なわれるようになっています。
HPCシステムズではDALTON 2.0を扱った事が、かなり昔にありましたが、今回、DALTON 2018をいじってみる事にしました。

DALTON 2018ですが、updateが2つあり、2020年版は2018.2となります。
素直にBuilt-in blasを使用してビルドするのですが、ここで、MKLを使用してみるとどうなるか、試してみました。
DALTONのビルド後に行なうtestの中にはbenchmarkという項目があります。
そのbenchmarkの値を比べてみましょう。
Built-in blasを使用したバイナリの実行時間を100とした場合に、MKLを使用したバイナリの実行時間を示したものが、以下の図になります。

dalton 2018.2 benchmark

項目の半分は、Built-in blasとどっこいどっこいですが、残りの半分は、実行時間が半減しています。
差はあるとは思っていましたが、かなり大きな違いですね。
DALTON、特に新しく入ったCoupling Clusterの部分は、並列で動作出来ない為、こうしたシリアルでの速度向上は大きな影響があるんじゃないかなと思います。

これで勝つる!って感じですが、なんせ、方言の多いコードなので、ちょっと大変です。
因みにDALTONは並列で動作させる場合、スクラッチディスクを使用するアプリなので、ノード越し並列にすると、NFSの影響で、少し遅くなります。
先に上げたものとは別のインプットですが、シリアルでの実行時間を100%として、並列で実行した場合の実行時間を表したのが以下の図です。

dalton 2018.2 dft_cr_sym

誤差程度と言えば、誤差程度なんですが、複数ノードで実行した方が早いアプリが多い中で、逆に、複数ノードで実行した方が少し遅くなるところなども、結構、特徴的かなと思います。

メモリ割り当てなど、ビルド時に指定するので、そういった情報が事前にしっかりしてないと、導入後にあれこれ大変なアプリですね。