TeraChem はGPGPUで量子化学計算を行えるソフトで、PetaChem LLC が開発しています。ベータ版を入手したので性能を調べてみました。
項目 | CPU+GPU での測定で使用した |
---|---|
CPU | Quad-core Intel Xeon E5540 @ 2.53GHz x 2 (8 コア全部を使用) |
GPU | Tesla C1060 x 1 ( Multiprocessor 30 個 で Core 240 個) |
ノード数 | 1 |
OS | Fedora release 10 (Cambridge) |
CUDA | CUDA release 2.3 |
ベータ版のtarファイルを展開するとインストーラやユーザーズガイドが入っています。
> tar -xf tcv3.tar > cd TCInstaller > ls LICENSE NumGPUs deviceQuery install install.log libs terachemb3.tar.gz userguide3.pdf
あとはインストーラを起動するだけです。
> ./install
ここで、TeraChem を動作させるに必要なハードウェア・ソフトウェアが搭載されているかどうか、自動的に調査されます。当初 CUDA 2.2 しかインストールされていなかったため「CUDA 2.3以降を入れろ」とエラーになりました。そこで、CUDA 2.3 を入れたところインストーラが正常に進みました。ライセンス条項に同意して、インストール先ディレクトリを指定するとTeraChemがインストールされ ました。
実行する前に環境変数を設定せよと言われているので忘れずに行いましょう。
bashの場合: $ export OMP_NUM_THREADS=8 $ export LD_LIBRARY_PATH=インストール先ディレクトリ/libs:${LD_LIBRARY_PATH}
実行するときは次のコマンドで行えます。
$ source インストール先ディレクトリ/SetTCVars.sh ←bash用しかついていないようです $ インストール先ディレクトリ/terachem インプットファイル
Gaussianのtest397ベンチマークテストを再現させてみました。再現手順としては、test397のインプットをデカルト座標に変換してtest397.xyzとして保存し、TeraChemのインプットファイルを次のように記述しました。
$ cat start.sp # basis set basis 3-21g # coordinates file coordinates test397.xyz # molecule charge charge 0 # SCF method (rhf/blyp/b3lyp/etc...): DFT-BLYP method b3lyp # add dispersion correction (DFT-D) dftd no # type of the job (energy/gradient/md/minimize/ts): single-point energy run energy end
上記の通りインプットは見たまんまでわかりやすい形式になっています。type of the job ではシングルポイント計算以外に gradient 計算、MD計算、minimize計算(構造最適化)、ts計算(遷移状態探索)を指定できます。
なお、Gaussian付属の本来のtest397インプットでは forceキーワード と scf=novaraccキーワード が付いていますが、それは再現していません。
上記のインプットで実行してみました。なお、OMP_NUM_THREADS=8 で動かしているので、GPUと同時にCPU8コアも使って計算を行うことになりますが、計算中にtopで見たところほとんどGPU上の計算だけでCPUは使っていない状態でした。
FINAL ENERGY: -3774.129099 a.u. CENTER OF MASS: {-0.004859, 0.014274, -0.002364} ANGS DIPOLE MOMENT: {-0.055294, 0.383637, 0.460263} (|D| = 0.601728) DEBYE Processing time: 180.46 sec
最終行に出力されているように、180.46 秒で計算が完了しました!
一方、CPUでの計算では、某量子化学計算ソフトに同様のインプットを与えたところ CPU 8コア並列でも 500 秒程度要しているのが現状です。これを考えると、TeraChemのようなGPGPUによる高速化効果は大変魅力的と言えます。
並列スレッド数を制御する環境変数 OMP_NUM_THREADS を 1 にして測定してみました。
FINAL ENERGY: -3774.129099 a.u. CENTER OF MASS: {-0.004859, 0.014274, -0.002364} ANGS DIPOLE MOMENT: {-0.055294, 0.383637, 0.460262} (|D| = 0.601727) DEBYE Processing time: 183.18 sec
計算時間はほとんど変わりませんでした。結果をまとめます。
構成 | Total CPU time [seconds] |
---|---|
CPU 8core( 参考値 ) | 500 秒程度 |
CPU 1core + GPU | 183.18 |
CPU 8core + GPU | 180.46 |
やはり、今回の計算では、CPUスレッド並列処理はほとんど使われていないと考えられます。
平日9:30~17:30 (土曜日、日曜日、祝祭日、年末年始、夏期休暇は、休日とさせていただきます。)