前回の記事では、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-7740X や core 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 は非常にオススメです。
関連する記事
- Threadripper 自作 PC 組み立て編【AMD】
- Threadripper 正式発表【8月発売予定】
- 【Gaussian 16】デスクトップ PC で並列計算する際の注意点【Hyperthreading】
- スパコンランキング発表!日本はGREEN500上位独占!【2017年6月】
- 【AMD_Naples】正式名称はEPYCに決定!クロック数は2.8 GHz【基本スペックなど】
- GPU を用いた並列計算
- 自作 PC をつくってみた!
- Fedora25 に nVIDIA のドライバーをインストール
- 自作 PC を作ってみた!【OS 編】