ウィモバの日々

Windowsをモバイルする…それがウィモバ(仮)。手のひら端末が好きです

ジョブの並列実行でQtCreatorでのビルド時間を短縮する

QtCreatorでビルドする際に、makeに-jオプションをつけたら
並列的にビルドを行ってくれるんだそうで、ビルド時間を短縮出来るとのこと。
「-j」のjの直後に数値をつけると並列数の指定になり、つけない場合はメモリの許す限り全力出すっぽい?
ただ、あまりスレッドを増やしすぎるとスラッシングが起きてかえって効率が悪くなるみたい。
数値を指定する場合はcpu数x2がいいとのこと。 シングルコアの場合は-j2、デュアルコアの場合は-j4、など。

画像のようにビルドステップのmake引数に付加する。


以下に、実際にどれくらい効果があったのかのメモとして、デフォルト作成したプロジェクトと
Qt付属のサンプルソースのプロジェクトをリビルドした際の経過時間(ビルド+リンク時間)を残しておく。

環境はQt5.3.2で統一、Releaseビルド固定、[ビルド]→[すべてリビルド]でなるべく条件は一緒・・・のつもり。


1:テンプレートのプロジェクト(Linuxデスクトップ向け)

機種/CPU/OS 「-j」なし 「-j2」 「-j4」 「-j8」 「-j」 PassMark
EeePC901
(Atom N270/1.6GHz)
+Zorin OS Lite9(Linux)
00:12〜
00:13
00:11 00:11 - 00:10 281
SONY VAIO VGN-P91S
(Atom Z550/2.0GHz)
+linuxBean14.04(Linux)
00:10〜
00:11
00:08〜
00:09
00:08〜
00:09
- 00:08〜
00:09
381
Dell Vostro1200
(Core2Duo T7250/2.00GHz × 2)
+linuxBean14.04(Linux)
00:04 - 00:02 00:02〜
00:03
00:02〜
00:03
1105
NECデスクトップ
(Celeron E3300/2.50GHz × 2)
+linuxBean14.04(Linux)
00:04 00:03 00:02 - 00:02 1361
Dell Vostroノート
(Core2Duo P8600/2.40GHz × 2)
+linuxBean14.04(Linux)
00:03 00:02 00:02 - 00:02 1548
EPSON Endeavor ST120
(Core2Duo T9800/2.93GHz × 2)
+linuxBean14.04(Linux)
- - - - - 2034
ASUS K55DR
(A8-4500M/1.9GHz × 4)
+linuxBean14.04(Linux)
00:04 00:03 00:02 00:02 00:02 2674
Dell Vostro3300 ノート
(Core i5 480M/2.66GHz × 2)
+linuxBean14.04(Linux)
00:03 00:02 00:02 00:02 00:02 2456
HPデスクトップ
(i5-3470/3.20GHz × 4)
Windows7+MinGW32bit版
00:03 00:02 00:02 00:02 00:02 6568


2:QtCreator付属のサンプルソース「sub-attaq」ソースファイル13個 (Linuxデスクトップ向け)

機種/CPU/OS 「-j」なし 「-j2」 「-j4」 「-j8」 「-j」 PassMark
EeePC901
(Atom N270/1.6GHz)
+Zorin OS Lite9(Linux)
01:43〜
01:44
01:19〜
01:20
- - 01:20〜
01:21
281
SONY VAIO VGN-P91S
(Atom Z550/2.0GHz)
+linuxBean14.04(Linux)
01:31 01:10〜
01:11
- - 01:10〜
01:11
381
Dell Vostro1200
(Core2Duo T7250/2.00GHz × 2)
+linuxBean14.04(Linux)
00:33 - 00:18〜
00:19
00:19 00:19 1105
NECデスクトップ
(Celeron E3300/2.50GHz × 2)
+linuxBean14.04(Linux)
00:30 00:18 00:19 - 00:18〜
00:19
1361
Dell Vostroノート
(Core2Duo P8600/2.40GHz × 2)
+linuxBean14.04(Linux)
00:25 00:15 00:15 - 00:15 1548
EPSON Endeavor ST120
(Core2Duo T9800/2.93GHz × 2)
+linuxBean14.04(Linux)
- - - - - 2034
ASUS K55DR
(A8-4500M/1.9GHz × 4)
+linuxBean14.04(Linux)
00:35 00:18 00:13 00:13 00:13 2674
Dell Vostro3300 ノート
(Core i5 480M/2.66GHz × 2)
+linuxBean14.04(Linux)
00:23 00:13 00:10 00:10 00:10 2456
HPデスクトップ
(i5-3470/3.20GHz × 4)
Windows7+MinGW32bit版
00:20 00:11 00:07 00:07 00:07 6568

※HPデスクトップのみLinuxブートが起動できなかったのでWindows環境のQtで実行


EeePCでもソースファイルが多くなるとAtomでも効果はあるっぽいけど所詮は初期Atomなのでな・・・
シングルコアは-j2が適切っぽい。
VAIO 旧PはEeePC901よりCPUは少し速いんけど、やっぱり旧世代Atomなんだよなぁ・・・。
最新のAtomは4コアで優秀だとかでうらやましい。
Core2Duoでも旧世代Atomとは段違いすぎる・・・Atom Z550の1/3以下。
デュアルコアなのでCPU数×2の-j4が適切かなー。
PassMark上のスコアでみるとAtomのZ37**代の前半はC2Dの2.0GHzより遅くて後半世代は2.0GHzより速いのかなー、なんて。
デスクトップ向けの4コアだと段違いに速いすぎる・・・ CPUが多く速いほどビルドが快適になるね。クアッドコアなので-j8がいいのかなー?

  • -jオプションの効果はありまぁす!

ということでWindowsでもLinuxでも-jオプションは有効。 MacのQtでも多分影響ありかな?便利なオプションだね。
Qtも最初からつけてくれればいいのに・・・と思うけど環境によってCPU数も変わるし
CPU数の指定なしだとスラッシングの可能性もあるし難しいんかな・・・