Unreal Engine を使った開発ではビルドに時間がかかります。特にソースコード版のエンジンを使うとエンジン全体のコンパイルも同時に行われる場合があり、1時間近く待たされることも少なくありません。
時間がかかるコンパイルを複数台の PC を使って高速化する仕組みが分散ビルドです。UE5 5.4 ではエンジンの機能として分散ビルドツール UnrealBuildAccelerator (UBA) が付属するようになりました。
前回の記事で UE5 の分散ビルド UBA を使うとビルドを大幅に高速化できることがわかりました。ですが家に PC が何台もあるケースはそんなに多くないと思われます。そこで非力な PC 1台との組み合わせでも、分散ビルドを行う意味があるのかどうか調べてみました。
Intel N100 (Alder Lake-N) の場合
以下は開発用 PC に Intel N100 搭載 PC を組み合わせて分散ビルドを行った結果です。(Intel N100 の性能について詳しくはこちら)
CPU | ARCH | Core数 | Thread数 | 単独でのビルド時間 | 分散ビルド利用時 | 削減時間 |
---|---|---|---|---|---|---|
Ryzen 5 3600 | Zen2 | 6 | 12 | 91m 28s | 74m 46s | -16分42秒 |
Core i7-13700 | RaptorLake | 16 | 24 | 48m 00s | 44m 37s | -3分23秒 |
Ryzen 5 3600 単独でビルドを行うと 91分かかりますが、N100 との分散ビルドで約 17分短縮できることがわかりました。思ったよりも効果が出ています。
流石に性能が高い Core i7-13700 の場合は 3分少々しか変わりませんが、それでもきちんと速くなっています。
分散ビルドでは通信のオーバーヘッドがありますし、非力な PC の完了待ちで逆に遅くなる可能性も考えられます。ですがこの結果を見ると少ないながら速度が向上しているため、安心して分散化できそうです。なお HordeServer も同じ N100 PC 上で走らせています。
さらに、他の PC との組み合わせでもビルド時間を調べてみました。
他の PC との組み合わせの結果一覧
ビルドPC | 組み合わせた分散PC | 合計Core数 | 合計Thread数 | ビルド時間 | 削減時間 |
---|---|---|---|---|---|
Ryzen 5 3600 | なし | 6 | 12 | 91m 28s | |
Ryzen 5 3600 | Core i5-1030NG7 | 10 | 20 | 77m 37s | -13分51秒 |
Ryzen 5 3600 | Intel N100 | 10 | 16 | 74m 46s | -16分42秒 |
Ryzen 5 3600 | Core i7-4790K | 10 | 20 | 61m 40s | -29分48秒 |
Ryzen 5 3600 | Ryzen 5 2600 | 12 | 24 | 57m 24s | -34分04秒 |
Ryzen 5 3600 | Ryzen 5 5560U | 12 | 24 | 56m 55s | -34分33秒 |
Ryzen 5 3600 | Core i7-13700 | 22 | 36 | 34m 17s | -57分11秒 |
Core i7-13700 | なし | 16 | 24 | 48m 00s | |
Core i7-13700 | Inte N100 | 20 | 28 | 44m 37s | -3分23秒 |
Core i7-13700 | Core i7-1030NG7 | 20 | 32 | 44m 20s | -3分40秒 |
Core i7-13700 | Core i7-4790K | 20 | 32 | 39m 29s | -8分31秒 |
Core i7-13700 | Ryzen 5 2600 | 22 | 36 | 37m 38s | -10分22秒 |
Core i7-13700 | Ryzen 5 5560U | 22 | 36 | 37m 26s | -10分34秒 |
Core i7-13700 | Ryzen 5 3600 | 22 | 36 | 33m 32s | -14分28秒 |
結果から、分散ビルドに使えるマシンが 1台だけ (合計 2台) でもエンジンのビルドではそれなりに効果があることがわかります。UE5 の開発で頻繁にエンジンビルドが走る場合は、空いている PC を使って UBA を入れておくと良さそうです。詳しい導入手順については前回の解説記事をご覧ください。
開発に使っている PC の性能が低い方が恩恵は多いのですが、Ryzen 5 3600 と Core i7-13700 の組み合わせ結果を見ると、どちらでビルドを開始してもビルド時間がほぼ変わりませんでした。このケースではかなり効率よく分散できていることがわかります。
台数でカバーする
使える CPU コア数が多い方がビルドは速くなっています。以下の表は、性能が高い PC 1台使った場合と、非力&古い PC を多数組み合わせた場合を比較したものです。
ビルドPC | 組み合わせた分散PC | 合計CORE数 | 合計THread数 | ビルド時間 | 削減時間 |
---|---|---|---|---|---|
Ryzen 5 3600 | Core i7-13700 | 22 | 36 | 34m 17s | -57分11秒 |
Ryzen 5 3600 | N100+1030NG7+2600+4790K+6700K | 28 | 52 | 36m 23s | -55分05秒 |
使用した PC は Intel N100、Core i5-1030NG7、Ryzen 5 2600、Core i7-4790K、Core i7-6700K の 5台です。コア数が少ないものだけ選んでいますが、非力な PC でも数を集めることで、おおよそ Core i7-13700 1台分くらいの性能を出すことができていることがわかります。
速い PC の中に N100 を入れた場合
今度は速い PC 複数台でかなり高速に分散ビルドできている状態で、N100 や Core i5-1030NG7 など性能が低い PC を追加してみます。ビルドに使った PC は Core i7-13700 です。
組み合わせた分散PC | 台数 | 合計CORE | 合計THREAD | ビルド時間 |
---|---|---|---|---|
13700+3950X+4750G+3600+2600+5560U+4790K | 7 | 62 | 116 | 14m 37s |
13700+3950X+4750G+3600+2600+5560U+4790K+N100 | 8 | 66 | 120 | 14m 07s |
13700+3950X+4750G+3600+2600+5560U+4790K+1030NG7 | 8 | 66 | 124 | 14m 26s |
13700+3950X+4750G+3600+2600+5560U+4790K+1030NG7+N100 | 9 | 70 | 128 | 13m 42s |
遅い PC が足を引っ張ることもなく安定して動作しました。むしろわずかながら速度が向上しているため、性能が低くてもとりあえず Agent を追加して増やしていく方針で大丈夫そうです。
使った PC のスペック一覧その他
以下はテストに使った PC のスペック詳細になります。Ryzen 5 3600, Core i7-6700K など一部電力制限をかけた状態となっていますのでご了承ください。すべて 有線 LAN を使っています。
CPU | TDP | ARCH | CORE数 | THREAD数 | RAM容量 | SSD |
---|---|---|---|---|---|---|
Ryzen 5 3600 | 45W | Zen2 | 6 | 12 | 64GB | NVMe3 |
Core i7-13700 | 65W | RaptorLake | 16 | 24 | 64GB | NVMe4 |
Intel N100 | 20W | AlderLake-N | 4 | 4 | 16GB | NVMe3 |
Core i5-1030NG7 | 10W | IceLake | 4 | 8 | 16GB | NVMe3 |
Core i7-4790K | 88W | Haswell | 4 | 8 | 16GB | SATA |
Core i7-6700K | 60W | SkyLake | 4 | 8 | 32GB | SATA |
Ryzen 5 2600 | 65W | Zen1+ | 6 | 12 | 32GB | NVMe3 |
Ryzen 5 5560U | 25W | Zen3 | 6 | 12 | 32GB | NVMe3 |
Ryzen 7 4750G | 65W | Zen2 | 8 | 16 | 32GB | NVMe3 |
Ryzen9 3950X | 105W | Zen2 | 16 | 32 | 32GB | NVMe3 |
UnrealBuildAccelerator は PC 性能によらず分散の効果がわかりやすいので、導入のハードルがかなり下がったのではないかと思います。今回は C++ のコンパイルのみ試しましたが、ビルド時間を短縮できますので UE5 での開発効率が大きく向上しそうです。