Threadripper の Gaussian16 ベンチマーク

前回の記事では、Threadripper の自作 PC を紹介しました。

この記事では、実際に Threadripper 上で Gaussian 16 を動かした時の様子を紹介します。今回の記事ではデータ数が少ないですが、時間を見つけてさらに詳細なベンチマークを取っていきたいと考えています。

管理人が実際に使用してみての感想としては、Threadripper は”買い”だと思います。
かなりコスパが良いと感じました。また、その気になれば ECC 対応にすることも可能ですし、オーバークロックもできます。

英語版Ryzen Threadripper Gaussian16 Benchmark


パソコンのセットアップ

前回の記事でも書きましたが、今回使用した機材は以下になります。

CPU: AMD THreadripper 1950x, 16 core, 3.4 GHz
m/o: MSI Gaming AMD Ryzen ThreadRipper Extended-ATX Motherboard (X399)
SSD: SanDisk SSD PLUS 240GB Solid State Drive (SDSSDA-240G-G26)
RAM: Corsair Vengeance LPX 16GB (2x8GB) DDR4 DRAM 3200MHz (CMK16GX4M2B3200C16)
GPU: Radeon x550 2GB
冷却: ARCTIC Liquid Freezer 240

今回は、管理人が個人的に慣れ親しんでいる Linux のディトロである Fedora26 を OS としてインストールし、その後 Gaussian16 の AVX2 版をインストールしました。

今回のベンチマーク測定をするにあたり、メモリは 3200 GHz にオーバークロックし、SMT (Intel でいう Hyper Threadding) は OFF にしました。

また、比較対象としては Intel core i7-7700, 64 GB のメモリを積み、Gaussian 16 の AVX2 版をインストールしたデスクトップ PC と 管理人が主力計算機として使ってきた Intel Xeon E5-2667 v2 (8cpu-64core)に Gaussian09 E をインストールしたものを用いました。

計算方法

vomilenine という天然物の構造を Gauss View 上で適当に作り、構造最適化と振動計算を行いました。原子数は 47 で、C,H,N,O で構成されています。実際に計算に用いられる平均的な分子サイズだと思います。

以下の input file を用いて計算しました。

%mem=4GB
%nprocshared=4
# opt B3LYP/6-31G(d)

Title Card Required

0 1
 C                  2.77247700   -1.55726100   -0.24944000
 C                  2.57516800   -0.21391100    0.22236700
 C                  3.66258100    0.58993400    0.49571100
 C                  4.95487500    0.05924200    0.30006200
 C                  5.13835000   -1.24438700   -0.15742400
 C                  4.04078000   -2.07971400   -0.44110700
 H                  3.54022600    1.61215000    0.84659000
 H                  5.82063000    0.68647200    0.50832700
 H                  6.14732700   -1.63065000   -0.30202500
 H                  4.18101400   -3.09833800   -0.79798600
 N                  1.50857200   -2.23308200   -0.46688800
 C                  1.09205700    0.01376600    0.31548100
 C                  0.56508400   -1.38330300   -0.16916400
 C                  0.45169100    0.19038400    1.70181800
 H                  0.83716900    1.07864500    2.23417400
 H                  0.61400000   -0.67650100    2.36782500
 C                 -1.02531100    0.35002700    1.28672300
 H                 -1.62528500    0.84001900    2.08048000
 C                 -0.92615500   -1.59776300   -0.23639300
 H                 -1.16616400   -2.69064700   -0.25662300
 N                 -1.59116700   -1.02041200    0.99900700
 C                  0.45662500    1.13244700   -0.55154600
 H                  0.50638000    0.83609200   -1.63113300
 C                 -1.01485700    1.18415400   -0.05441000
 H                 -1.34499800    2.22278200    0.13282400
 C                  1.18183100    2.47371100   -0.45244600
 O                  1.77040700    2.90633300   -1.41767100
 C                  1.12488300    3.24417800    0.83431200
 H                  1.96513800    3.95149200    0.90568700
 H                  0.20810900    3.84695700    0.89196200
 H                  1.14807000    2.59412400    1.72379300
 C                 -1.43760100   -0.86406700   -1.51074000
 H                 -2.21770900   -1.45377000   -2.02155200
 H                 -0.63475100   -0.74431500   -2.26051300
 C                 -1.99672600    0.50937600   -1.06002400
 H                 -2.15238600    1.17083500   -1.93738400
 C                 -3.07440500   -0.82309500    0.77399500
 H                 -3.54334800   -0.53697600    1.74827200
 O                 -3.70333500   -2.06174800    0.48837800
 H                 -3.47163400   -2.39796600   -0.40177600
 C                 -3.29369900    0.20245900   -0.33620000
 C                 -4.47635800    0.74125600   -0.64594500
 C                 -4.60024253    1.78394479   -1.77246740
 H                 -4.05885576    2.66655486   -1.50265297
 H                 -4.19662792    1.38069830   -2.67766766
 H                 -5.63131953    2.02904648   -1.91979486
 H                 -5.39456085    0.49863744   -0.15305581



Intel core i7-7700 では、4 core 用いた場合の計算、Intel Xeon E5-2667 v2 では 4core と 8 core 用いた場合の計算、Threadripper では 4core, 8 core, 16 core 用いた場合の計算を行いました。

メモリは 1core 1GB を割り当て、4 core の場合は 4 GB、16 core の場合は 16 GB としました(実際にはこんなにメモリ必要ありませんが、、、)。

Intel Xeon E5-2667 v2 には gaussian16 を入れていませんので厳密には比較できないのですが、g09 で計算する場合は、int=grid=ultrafine と scf=tight を付け加えて計算しました。

結果

測定の結果は以下のようになりました。

Xeon E5-2667 vs で用いた g09 では log の最後に elapsed time が表示されないので、cpu time をコア数で割ったものを赤字で表記しております。

次に、時間の単位をすべて秒に統一してグラフにしました。まずは、三種類の CPU の性能差比較です。

4 core 用いた計算の時にもっとも性能が良いのは core i7-7700 でした。その次に良いのは Threadripper 1950X でした。PassMark Software の single thread のベンチマークをそのまま反映した結果でした。

Ryzen は計算が遅いという噂も耳にしていましたが、今回の結果からは大差無いと言えそうです。Xeon E5-2667 v2 と Threadripper の速度差を g16 と g09 の速度差と思う人かもしれませんが、あまり関係ないと管理人は考えています。また、後ほど述べますが、Threadripper では AVX2 による計算速度の向上はありません。

1 job に 4 コアまでしか使わず、早さにすごくこだわるのであれば、Intel Core i7-7740Xcore i9-7900X などを購入するのが良いかもしれません。

並列化効率が低い

先ほどのグラフで少し気になったのが、8 core 用いた場合に Threadipper と Xeon の計算速度が逆転している点です。 そこで、Threadripper と Xeon E5-2667 v2 の並列化効率について調べてみました。

<注>その後、検討を重ねたところ並列化効率が改善しました。以下の記事もお読みください。
参考:Threadripper 並列化効率改善?【gaussian16】

cpu time でグラフを作ると以下のようになります。

Threadripper では 4 コア から 8 コア へとコア数を倍にしても計算速度は約 1.6 倍にしかなりません。また、8 コアから 16 コアへとコア数を倍にした時は計算速度は 1.3 – 1.4 倍にしかなりませんでした。

16 コア全部使うのは、並列化効率が非常に悪いということがわかりました。なので通常時は 1 job 4 コアまたは 8 コアで運用していくのが良いと思います。でも、まだ普通に組んだだけなので、まだまだ改善の余地はあると考えています。もしも並列化効率を上げる良い方法がありましたら、コメント欄等で教えてください。

しかし、並列化効率が低いとはいえ、16 コア使うと 8 コア使った時よりも短時間で終わるため、
”論文の revise が近い!この 1 job にすべてを賭ける!”
みたいな時は16 コア使うのが良いと思います。

AVX2 の効果は無い?

Ryzen は AVX2 が遅いと様々なベンチマーク等で報告されています。
今回は、SSE4 と AVX2 を比較しましたが、大差ありませんでした。むしろ SSE4 の方が若干早いような気さえします。誤差レベルかもしれませんが、、、。とりあえず、AVX2 による速度向上は、様々なベンチマークで報告されているように、無さそうです。

こうなると SSE4 と AVX の比較もしてみたくなるところですが、残念ながら AVX はまだテストしていません。今度テストしたら、この記事に追記しておきます。

まとめ

4 コアでの計算速度比は PassMark Softwares の single thread benchmarkをそのまま反映した結果でした。

ベンチマークを測定する前は、”Ryzen は AVX2 が遅い、演算が遅い” と言う噂を聞いていました。しかし、実際に gaussian で計算する上では全く気になりませんでした。実用に耐えうる性能です。

また、コストパフォーマンスが高いと感じました。single thread 性能が高い 4 core の CPU を 16 core 分揃えるとなると、マザーボード、メモリ、電源と 4 node 分揃えなくてはならなく、トータルとして高くなってしまいます。Threadripper なら、$2,000 以下で一台計算機ができてしまいます!

ちなみに、管理人がこれまで使ってきた Intel の Xeon E5-2667 v2 は 1cpu 8コアで 28 万円しました!しかし、Threadripper は倍の 16 コアで同等の single thread 性能を持つにも関わらず、約 11 万円 ($999) で買えてしまいます。5 分の 1 程度の価格です!

並列化効率が非常に低いですが、まだ PC を組んだばかりなので、改善の余地は多分にあると考えております。

個人的には、Threadripper は非常にオススメです。

関連する記事

汎関数一覧に戻る

計算手法に戻る

管理人: