【Gaussian 16】デスクトップ PC で並列計算する際の注意点【Hyperthreading】

最近のデスクトップ用 CPU は大変高性能になっており、intel の core i7 7700k は4.2 GHz (4.5 GHz) で4 core/8 thread、AMD の Ryzen 1800x は 3.6 GHz (4.0 GHz) で 8core/16 thread など、低価格で多くの計算資源が手に入るように見えます。

しかし、Hyperthreading 機能の付いたデスクトップ  cpu で計算を行う場合に、スレッドを増やせば増やすほど効率的に計算ができるかというと、そうではありません。

Gaussian では Hyper Threading は効果的ではない

Gaussian Release Note には以下のように書いてあります。

Hyperthreading is not useful for Gaussian since it effectively divides resources such as memory bandwidth among threads on the same physical CPU. If hyperthreading cannot be turned off, Gaussian jobs should use only one hyperthread on each physical CPU. Under Linux, hyperthreads on different processors are grouped together. That is, if a machine has 2 chips each with 8 cores and 3-way hyperthreading, then “CPUs” 0-7 are across the 8 cores on chip 0, 8-15 are across the 8 cores on chip 1, then 16-23 are the second hyperthreads on the 8 cores of chip 0, etc. So a job would run best with %cpu=0-15.

Under AIX, hyperthreads are grouped together with up 8 hyperthread numbers for each CPU even if fewer hyperthreads are in use, so with 2 8 core chips and 4-way hyperthreading, ”CPUs” 0-3 are all on core 0 of chip 0, 8-11 are on core 1 of chip 0, etc. So one would want to use %cpu=0-127/8 to select ”CPUs” 0, 8, 16, etc. which are each using a distinct core.

Hyperthreading を使用すると OS からは理論的には 倍の cpu があるように見えますが、実際には同じ物理 CPU 上の複数スレッド間で、メモリ帯域幅などのリソースを分割して使用しているため、Gaussian では効果的ではないそうです。Hyperthreading が効果的かどうかは行う処理に依存するそうです。

並列計算機でよく使われる Xeon E5 にもHyperthreading 機能はついていますが、業者などにお願いしてセッティングしてもらった場合 Hyperthreading は off にされていると思います。

速度比較

管理人の自作 PC にて、スレッド数について簡単なベンチマークを測ってみました。

今回は、70 原子程度の化合物の NBO 計算について比較しました。input ファイルは、以下のような感じです。

%mem=500mb
%nproc=4
%nosave
%chk=nbo_bench_4.chk
#p B3LYP/6-31+G(d,p) pop=(NBOread,saveNBOs)

title

テスト環境

Gaussian 16 Rev. A. 03
CPU: Intel CPU Core i7-7700 3.6GHz 8Mキャッシュ 4コア/8スレッド
m/b: ASUS PRIME H270-PRO
メモリ(64 GB): Crucial DDR4 2400 MHz 16GB 4枚
SSD: M.2 SSD_250 GB Samsung SSD 960 EVO M.2 Type2280 NVMe1.2

結果

下図のような結果になりました。


実際の計算時間は4 thread で計算した時がもっとも早かったです。1-4 thread では計算時間が linear に変化していますが、8thread 用いると遅くなります。

cpu のクロック数も確認しましたが、1 thread の時も 8 thread の時も 3.8 GHz 近く出ています。CPU 温度に関しては、1 thread, 2 thread のときは 45 度前後でしたが、3 thread, 8 thread のときは 52-54 度程度まで上がりました。

また、よく言われるようにメモリは必要な量よりも極端に多くすると計算速度が低下します。

結論

4 core/ 8 thread のCPU を使った場合、4 core/4 thread で計算するのが最速です。 8 thread すべて使うと 4 thread よりもかえって遅くなります。Gaussian で計算するときは、HyperThreading は使わない方が良いです。

記事中に間違い等ある場合は、コメント欄、twitter またはメールにてお知らせいただけると幸いです。

参考文献

  1. Gaussian 16 Rev. A.03 Release Notes
  2. 並列性能(Parallel Perf.)
  3. 12コアXeon登場

関連する記事

汎関数一覧に戻る

計算手法に戻る

コメントを残す(投稿者名のみ必須)