月別アーカイブ: 2019年12月

4倍速い Ryzen 9 3950X の UE4 コンパイル速度

Ryzen 9 3950X は 16 core 32 thread の CPU です。少し前まで 4 core 8 thread の CPU をメインに使っていたことを考えると、これ 1つで従来の PC の 4台分に相当します。

実際に速度を調べてみました。UE4 のコンパイル速度の比較は下記の通り。本当に 4台分、コンパイル時間が 1/4になっています。

● UE4 4.24.0 (GitHub版) の Engine コンパイル時間

CPU Core Thread Build 時間 (A) Build 時間 (B)
Ryzen 9 3950X Zen2 16C/32T 966 (16:06) 833 (13:53)
Ryzen 7 1800X Zen 8C/16T 2481 (41:21) 2240 (37:20)
Core i7-6700K Skylake 4C/8T 3787 (63:07) 3564 (59:24)

・Build 時間の単位は秒、値が小さい方が高速

Skylake Core i7-6700K で 1時間かかるビルドが Ryzen 9 3950X だと 16分で終わっています。4倍高速です。1800X と比べても 2.5倍速くなっています。これくらい速ければ分散ビルドなしで十分使えそうです。

ちなみに条件を統一するため 3台とも SATA 接続の SSD の上でビルドしています。NVMe ならもっと時間を短縮できると思われます。

・(A) は Total のビルド時間で UnrealHeaderTool と ShaderCompileWorker が含まれています。また UHT のヘッダ生成は並列化されないためシングルスレッドの時間が含まれます。

・(B) は Engine の ParallelExecutor だけの時間で、最後の Link 以外は並列化されています。シングルスレッドの時間が短いため (A) よりも Thread 数の差が出やすくなります。

・一旦 clean してから Engine\Build\BatchFiles\Build.bat を使い DevelopmentEditor Win64 でビルドしています。

Ryzen9

Ryzen9
↑16 core でも小さい Socket AM4。箱の中身は殆どが黒いスポンジ。

● ARM デバイスの比較に使っているコンパイルベンチの速度

CPU Core Clock Thread Build 時間 WSL
Ryzen 9 3950X Zen2 3.5 GHz 16C/32T 10 (00:10)
Ryzen 7 1800X Zen 3.6 GHz 8C/16T 26 (00:26)
Core i7-6700K Skylake 4.0 GHz 4C/8T 40 (00:40)
Core i7-4790K Haswell 4.0 GHz 4C/8T 41 (00:41)

・Build 時間の単位は秒、値が小さい方が高速

これも UE4 とほぼ同じで 4倍速くなっています。詳しくはこちら

● vfpbench の結果

CPU Thread Single-Thread Multi-Thread
Ryzen 9 3950X 16C/32T 123.3 GFLOPS 1898.0 GFLOPS
Ryzen 7 1800X 8C/16T 61.4 GFLOPS 476.2 GFLOPS
Core i7-6700K 4C/8T 135.6 GFLOPS 542.3 GFLOPS

・GFLOPS の値が大きい方が高速。単精度のみ。

1.9 TFLOPS (1898 GFLOPS) という見たことがない数値が出ました。あくまでメモリアクセスを無視した理想的な条件での値です。だいたい PS4 の GPU に相当します。実際のアプリケーションでこの速度が出るわけではないので参考程度にお願いします。

下記は計測結果のログです。Single Thread 単精度のみ。倍精度はまだ調査中です。

Group 0:  Thread=32  Clock=3.493000 GHz  (mask:ffffffff)
  SingleThread HP max: -
  SingleThread SP max:  122.851 GFLOPS
  SingleThread DP max:   52.722 GFLOPS
  MultiThread  HP max: -
  MultiThread  SP max: 1894.097 GFLOPS
  MultiThread  DP max:  954.959 GFLOPS

* Group 0:  Thread=1  Clock=3.493000 GHz
                                  TIME(s)   MFLOPS      MOPS    FOP IPC
SSE mulss (32bit x1) n8       :    0.244     8605.0     8605.0 (  1 2.5)
SSE addss (32bit x1) n8       :    0.244     8591.2     8591.2 (  1 2.5)
FMA vfmaddss (32bit x1) n8    :    0.317    13239.6     6619.8 (  2 1.9)
FMA vfmaddss (32bit x1) n12   :    0.365    17246.0     8623.0 (  2 2.5)
SSE mulps (32bit x4) n8       :    0.245    34194.1     8548.5 (  4 2.4)
SSE addps (32bit x4) n8       :    0.243    34520.1     8630.0 (  4 2.5)
SSE mul+addps (32bit x4) n8   :    0.183    45837.4    11459.3 (  4 3.3)
FMA vfmaddps (32bit x4) n8    :    0.303    55334.8     6916.9 (  8 2.0)
FMA vfmaddps (32bit x4) n12   :    0.364    69104.3     8638.0 (  8 2.5)
SSE ml+ad+adps (32bit x4) n9  :    0.218    43313.8    10828.4 (  4 3.1)
SSE mulss (32bit x1) ns4      :    0.368     5699.9     5699.9 (  1 1.6)
SSE addss (32bit x1) ns4      :    0.368     5698.4     5698.4 (  1 1.6)
SSE mulps (32bit x4) ns4      :    0.367    22812.0     5703.0 (  4 1.6)
SSE addps (32bit x4) ns4      :    0.366    22916.4     5729.1 (  4 1.6)
AVX vmulps (32bit x8) n8      :    0.258    65052.1     8131.5 (  8 2.3)
AVX vaddps (32bit x8) n8      :    0.260    64581.5     8072.7 (  8 2.3)
AVX vmul+addps (32bit x8) n8  :    0.157   106474.3    13309.3 (  8 3.8)
FMA vfmaddps (32bit x8) n8    :    0.318   105391.7     6587.0 ( 16 1.9)
FMA vfmaddps (32bit x8) n12   :    0.408   123302.0     7706.4 ( 16 2.2)
FMA vfma+mlps (32bit x8) n12  :    0.408    92570.0     7714.2 ( 12 2.2)
FMA vfma+adps (32bit x8) n12  :    0.345   109457.1     9121.4 ( 12 2.6)
AVX vml+ad+adps (32bit x8) n9 :    0.345    54644.5     6830.6 (  8 2.0)
FMA vfma+ml+adps (32bit x8) n9:    0.307    81930.4     8193.0 ( 10 2.3)

関連ページ
Compile Benchmark
VFP Benchmark Log 計測結果まとめ

関連エントリ
UE4 UnrealBuildTool の設定 BuildConfiguration.xml
UE4 UnrealBuildTool VisualStudio の選択を行う
UE4 UnrealBuildTool *.Build.cs のコードを共有する
AMD CPU Ryzen とコンパイル時間の比較 (2)
AMD CPU Ryzen とコンパイル時間の比較