FireflyにおけるCUDAの利用

FireflyではMP4(T)部分でCUDAによるGPU活用が可能になっています。
まず、ダウンロードしたバイナリの中にCUDAを使うためのdllが3つ同梱されているので、解凍しFireflyの実行ファイルと同じ階層に置きます。あとは入力でCUDAの使用を指定するだけです。
$SMPグループでCUDA=1(or .t. or true)を入れるだけなんですが、このままだとGPU利用時にCPUは止めることになります。CPUも同時に使いたいときは、$CUDAグループでNOCPU=0(or .f. or false)を入れる必要があります。他にも細かい設定があるようですが、ドキュメント化されていませんのでForumか直接Granovsky先生に訊くしかありませんね。
現在のバージョンでは、細かい設定をしなくても十分活用できるように思います。

7.1.Gでのベンチマークが公開されていますが(http://classic.chem.msu.su/gran/gamess/cuding.html)、同じ分子で細かいオプション指定を全て外して私の環境で計算してみると、MP4(T)については1GPUのみで485.45 sec、1GPU+4CPUで253.89 secでした。プログラムのバージョンが違う上、細かいオプションによる最適化もされていない結果なので、比較できるものではありませんが、結構速くなってますね。

Caffeine分子を使って、どういうセッティングが一番効率が良いかを探ってみました。

150103_MP4-SDTQ_CUDA.PNG

まずは、MultiprocessingとMultithreadingの比較から。
・1 process/threadで計算したのが一番左の列で、MP4で計算時間全体の98%以上を占めています。
・6 processで計算すると、SCFとMP4(T)は大きな高速化が達成できていますが、MP4のTriple以外はむしろ遅くなる結果です。全体としては、計算時間の多くを占めるMP4(T)が高速化しているため、計算時間は1/3に削減できています。
・6 threadで計算すると、SCFは1 threadの時と変わりませんが、MP4については全体的に高速化しており、6 processよりも高速化しています(1 threadの1/4程度)。

GPUを使った効果について。
・6 threadにGPUを加えた場合(左から4列目)、MP4(T)のみさらに高速化しますが、その差は何とも言えないレベルです。左から3列目と5列目で比較すると、CPUのみをフル活用した結果(871.3 sec)の方がGPUのみをフル活用した結果(1355.6 sec)より速いです。

HTTを使った効果について。
・12 thread発行した場合(右から4列目)、6 threadの時と比べて全ステップで遅くなっており、物理コア数以上のMultithreadingはかなり効率が悪いことを示しています。なお、上記テーブルには入れていませんが、Multiprocessingの場合は12 process発行してもSCFとMP4(T)の計算時間は短縮できます。ただしtriple以外MP4の効率が悪すぎて、トータルではあまりよい結果にはなりません。

GPUとMultiprocessing,Multithreadingの組み合わせ
・Multithreading、Multiprocessing、GPGPUを全て組み合わせると、全体的に弱点のない加速化を行うことができ、3 thread/2 process/1 GPUにすると、6 thread/1 process/1 GPUと比べてやや計算時間を短縮できます(右から3列目)。少し余力を残す程度にHTTを活用すると、もう少し加速できます(右から2列目)。目いっぱいまでHTTを使おうとするとかえって効率が落ちるのは前述のとおりです(一番右の列)。

Be the first to comment

Leave a Reply