Gromacs の並列化メモ

Gromacs 4.6 は GPU カーネルを OpenMM から独立させてめちゃくちゃ早くなったらしい。GTC Express Webinar にある資料によると、6 thread + GTX Titan で GLIC channel が 15ns/day とか! 25K atom くらいの小さい系(explicit solvent, PME) だと、100ns/day も出るらしい。

インストールは http://www.gromacs.org/Documentation/Installation_Instructions を参考にする。CUDA SDK が /usr/local 以下に置いてあって、パスが通っている Ubuntu 12.04 LTS。gcc 4.7 が推奨だが、さすがに gcc を入れ替えるのは怖いので4.6 のまま cmake して make -j 12 するだけであっさりとビルド成功。cmake の冒頭で、CUDA や SSE 3.1 が検出されていることを確認した。

実行にあたっては、mdp ファイルで、

cutoff-scheme = Verlet

の設定が必要。逆に言うと、Verlet スキームになっていれば、勝手に GPGPU を使ってくれる。CPU のスレッド数もとくに指定する必要はなく、放っておけば勝手に全部使ってくれる。mpirun などの指定がややこしい NAMD と比べると、ずいぶん手軽である。

スレッド数を制限したい場合は、mdrun に対して -nt 8 のようにして指定する。この場合、スレッドとコアの関係が固定されないため、キャッシュなどの点で不利になる。-pin on をつけると良いらしい。なお、数値計算では HTT (HyperThreading Technology) を切るのが常識になっているが、Gromacs では有効にしたほうが若干速いらしい (http://lists.gromacs.org/pipermail/gmx-users/2010-August/053033.html)。