hgot07 Hotspot Blog

主に無線LANや認証連携などの技術についてまとめるブログです。ネコは見る専。

4750G, 5800X, 5950X……, いろいろRyzenベンチマーク

ちまたによくあるベンチマークプログラムではなく、手元の数値計算用のプログラム(中身はほぼ固有値計算)です。ベクトル化できない、if文の多いコードです。

様々なRyzenをとっかえひっかえしていたら、表が大きくなってきたので、前回のエントリ↓ から分離しました。

hgot07.hatenablog.com

ベンチマーク結果

OSは、Ryzen 5000シリーズがopenSUSE Leap 15.3 alpha、EPYCマシンがRHEL 8.1、それ以外がopenSUSE Leap 15.2です。5000シリーズでは15.2のカーネルが動かないので、仕方なくalphaを使っています。

コンパイラはg++-10を使用 (EPYCのみclang++-10)。Zen 3の最適化オプションがまだなので、znver2でコンパイルしたままの全く同じ実行形式です。経過時間は 時間:分 で記載。

 

  -O3 -march=znver2 -O3
(single)
-march=znver2 -O3
(4para)
-march=znver2 -O3
(8para)
4750G 8:30 8:18 9:00 11:45
5800X - 7:36 8:01 8:32
5950X - 7:59 8:03 8:27
3950X - 8:19 8:30 8:56
4800U - 8:30 11:30 -
EPYC 7702 10:30 10:40 - 10:42

 

考察

ベース周波数が、4750Gは3.6GHz、5950Xが少し低くて3.4GHzなので、シングルスレッド性能はあまり期待していなかったのですが、意外に5950Xが速かったです。いずれもTurbo Frequency上限付近で回っている状態なので、4.8GHz程度で回っていた5950Xが速いというのは納得です。5950Xで8並列にすると、4.47GHzあたりで平衡になり、平均処理時間は8:27になりました。

5800Xと5950Xでは、5800Xの方がベース周波数が高く、定格ブースト周波数が低いのですが、8並列では同程度の周波数で回っており、誤差程度の差しかありません。5950Xが必要になるのは、さらに高い並列度でもメモリに収まるような場合と、低並列度で5800Xより高いブースト性能を狙うニッチな場合でしょうか。後者は条件が難しそうですが。あとは、所有する歓び!?

モバイル用の4800Uが健闘しているように見えますが、複数プロセスを並行に走らせると、4750Gよりも顕著にクロック周波数が落ちて、1プロセスあたり+35%程度、実行時間が伸びます。4750Gでは+7.2%程度。

4750Gの8並列での落ちが大きく、周波数は4.0GHz付近をうろうろ。TDP 65Wとはいえ、それなりに熱いので、冷却不足の可能性もあり?

EPYC 7702は最大ブースト・クロックが3.35GHzなので、シングルスレッドで遅いのは仕方ないです。大容量のメモリが必要でマルチスレッド化できる用途に向いているプロセッサなので。ただ、znver2を付けるとかえって遅くなるのが解せません。

ひと昔前のCPUなら、負荷をかけても定格周波数きっちりで回って、放熱が足りない時はプロテクションが働いていました。今時のCPUは、並列度が低い場合に、TDPと放熱が許す範囲で周波数を上げて動作するのですね。逆に言えば、並列度が上がった時に、TDPが低いとか、放熱が追い付かない場合は、速度が落ちてしまうということ。低TDPのCPUにあまり期待してはいけません。

 

[2021/5/13追記] 4750Gの8並列も測定したので、追記しました。

 

以下、分離前のエントリより転記。

[2021/3/9追記] 3950Xの4並列と8並列も測定して追記しました。このタスクだと意外に健闘している。5950Xはコンパイラのznver3最適化が待たれます。

[2021/3/10追記] GCC-10のmarchオプションで指定できるアーキテクチャの一覧は、gcc -c -Q --help=target を実行することで、"Known valid arguments for -march= option:" の項目に表示されます。手元の10.2.1にはznver2までしかありませんでした。