FireflyにおけるParallelとMultithreading

今まで、FireflyのParallelとMultithreadingの違いを全然理解していなかったので(MP3/4計算をほとんどしたことが無かった)、それについて。
Fireflyではsemi-empirical methodとMP3/4, (X)MCQDPTがParallel(Multiprocessing)ではなくMultithreadingで実装されています。よって、実行時の引数npで複数プロセスによる並列計算を行おうとするとエラーになります。この場合、$SYSTEMブロックのMKLNPにスレッド数を指定することでMultithreadingによる並列計算を実行できます。SCF計算はMultithreadingではなくMultiprocessingで実装されていますので、Multithreadingで実装されている計算をしようとするときはここがなかなかうまいことできません。
うちの環境では、npが2でMKLNPが4くらいで一番早く計算を終えることができることが多いです(6 cores/HTTで12 threadsのCPU)。MP4(SDTQ)はフルにParallel化されてはいますが、一部は効率が良いどころかParallelで計算するとむしろ時間がかかるステップもあるので、SCFは律速段階ではないと割りきってMultithreadingだけで計算したほうが速いケースも多いと思います。
MOPACもMultithread化されていますが、6 threadsで3倍程度の高速化です。あんまり大きい分子でやると、Gradient計算でコケることがあります。

CUDAが使える環境になったので、それについては後日まとまったらメモろうと思います。といってもTITANではなくてGTX980ですので倍精度はお察しですが……TITAN Black買ったほうが良かったかなぁ。
ちなみにFireflyの最新版(8.1.0)であれば、TDLのレジストリ設定をしなくても普通に走るようです。
GAMESS(US)の方はまだこれから。

MOPACのMultithreading効果はこんな感じです。(使用した分子は、Fireflyのベンチマークでお馴染みの巨大フラーレンC540)

150103_RM1_multithreading.PNG
MP4(SDQ)については以下の通りです。(使用した分子は、私が最近ベンチマークの基準分子として使っているAlanineのオリゴペプチド(α-Helix型))

150103_MP4-SDQ_multithreading.PNG

Be the first to comment

Leave a Reply