2012-02-23 5 views
20

私はWindowsデスクトップにクアッドコアi7 CPUを持っています。私はできるだけ多くのコアを使用してmingw32-makeをコンパイルするようにしています。ビルド設定 - >ビルドステップの下の "Make Arguments"フィールドに-j8を追加しました。 mingw32-makeは、私がその速度向上を得られないので、オプションを完全に無視しているようです。タスクマネージャでCPU使用率を見ると、13%にとどまり、g ++実行中のインスタンスが1つしか表示されません。QTCreatorの中でmingwを使って複数のコアをコンパイルする方法

今のところ、mingwを使ってプロジェクト全体を再構築するのに3分かかります。 MSVCを使用して再構築するにはわずか15秒かかります。

詳細については、プロジェクト設定でプリコンパイル済みヘッダーオプションを有効にしました。これにより、VCでも多くの処理が高速になります。しかし、私はまだmingwとのあらかじめコンパイルされたヘッダーの利点を見ています。

QTCreatorから複数のソースファイルを並行してコンパイルする場合は、ご意見をお寄せください。ありがとう!

答えて

22

ここに私がしたことがあります。

Qt Creatorの[Tools] - > [Options]メニューの[Build and Run]セクションには、 "nmakeの代わりにjomを使用する"というオプションがあります。私はその箱をチェックしたが、何も変わらなかった。その代わりに、私はプロジェクトのビルド設定に行き、ビルドステップカテゴリの下に "Make"アイテムがあります。その詳細を展開すると、「Override mingw32-make.exe:」という項目が見つかります。私はそこに「C:\ QtSDK \ QtCreator \ bin \ jom.exe」を貼り付け、突然私は複数のコアでビルドしていました。

Qt Creator 2.4.1で働いてくれました。試してみる。

+0

mingw32-makeの代わりにJOMを使用すると効果的です! VCコンパイルよりもずっと遅いですが、以前よりもはるかに高速です。 –

+0

これは、Microsoftのコンパイラが1回の呼び出しで多数のC++ファイルを食べたいからです。 makeのような伝統的な1970年代の技術はこれをサポートしていませんが、呼び出されるたびに1つのファイルでコンパイラを呼び出します。より良いビルドシステムに切り替えます。 – Lothar

10

-j8は、おそらくGNU Make on Win32の制限のために動作していません。

-jをmake argumentsフィールドに入れてみてください。これはできるだけ多くのコンパイルプロセスを生成するようにMakeに指示します。これを処理するのに十分なRAMとCPUがあれば、単一のコンパイルよりも速くなければなりません。

は、残念ながら、これらは(のMakefileを修正することなく)2つのオプションしかあり:-j1、または無制限-j

完全な詳細のいずれか:GNUジョブサーバをサポートしていないWin32の上で行いますので、親プロセスを作ることができます」サブメイクによって生成されたコンパイルプロセスの数を追跡します。安全のために、サブメイクは-j1でのみ実行されます。私はqmake/Qt Creatorの生成されたMakefilesがMakefilesの複数の層を使用すると信じています。私が最初に詳細

ためthis threadをチェックしてください。この引用はREADME.W32からGNUと一緒に配布され、マイクロチップ社のMPLAB X IDEでこの問題を考え出したパラレルため

サポート

パラレルビルドビルドしてください( -jN)2つの 制限と、このポートでサポートされている:

  • 同時プロセスの数が64のハード限界を有し、 は、このポートがサブプロセスを待機しているために です。

  • ジョブサーバー方式(利用できるようにPosixの のプラットフォーム上で動作します)あなたは再帰的なMakefileでサブメイクさんに 明示-jNスイッチを通過しなければならないことを意味しており、サポートされていません。 サブメイクが明示的な-jNスイッチを受け取らない場合、 はデフォルトで-j1になります。つまり、サブメークの並列性はありません。

+1

-jを使用すると、コンピュータ上に多数のコンパイルプロセスが生成されますが、これを使用すると効果的です。入力いただきありがとうございます! –

+1

これは、大規模なプロジェクトを構築している場合を除き、大きなストップギャップ対策です。あなたが十数個のソースよりもコンパイルしているなら、CPUの大きな問題にぶつかるはずです。 3〜4ダース以上のソースをコンパイルしている場合、ほとんどの場合、メモリの問題にぶつかります。 – inetknght

3

使用MAKE_COMMAND環境変数:

set MAKE_COMMAND=mingw32-make -j%NUMBER_OF_PROCESSORS% 
+1

いいえ、これはmingw32-makeでは機能しません。オプション-jNは単に無視されます。 –

+1

あなたに何を伝えるべきかわからないが、それは私と他の人のために働く:http://stackoverflow.com/questions/1247162/gnu-make-jobs-option-in-qmake –

0

-jを移動するための方法である、残念ながら私のためのプロジェクトは、それは私の使用可能なメモリのすべてと私のコンピュータがフリーズを使用していますので、大規模なので、それを意識します。ブレンダン氏は、コアの半分だけを使用する方法はないと言っています。これは真実ならば同情です。

4

NUMBER_OF_PROCESSORSの値(Windowsの場合)/ $(nproc)(Linux)のプラスワンに置き換える9 - これが最適である)-j9を追加のqmakeの\ジェネレータ内のすべての

QString makefilein = " -f " + subtarget->makefile; 

ラインに\ makefile.cpp(見つけますあなた自身)。

それは適切なparametresでconfigure.exeを実行し

QString makefilein = " -j9 -f " + subtarget->makefile; 

として結果(メイクファイルの生成豊かさを避けるために!そして、追加-qmake -dont-process!)。

問題は、「デバッグとリリース」ビルド中に2つのプロセスセットが取得されることです。これにより、生成されるプロセスの総数は18+になります。

0

問題は、元のmakeにジョブサーバーのサポートがないことです。だからmingw32ポートにもそれがなかった。それ以来追加されています。私は '正しい' jobserverサポートで最も古いバージョンが3.82.90であると信じています。それは下のリンクで見つけることができます。 Qtの創造主で

http://sourceforge.net/projects/mingw/files/MinGW/Extension/make/make-3.82.90-cvs-20120823/

0

プロジェクトに行く - &実行を構築する> - >あなたの具体的なMinGWのセットアップを構築する - > [環境(これは一般/ステップ/クリーン手順を構築し、以下の画面に表示されている。)とを構築変数MAKEFLAGSを追加し、-j8に設定します。私は-j4とQtCreator 4.4.1とMinGW 5.3.0の2つのコアマシンでこれをテストしました。私のプロセッサをコンパイルすると、タスクマネージャに表示されるように、100%のパフォーマンスで実行されます。このオプションがないと約25%だったので、予想どおりに動作すると仮定します。ビルドがはるかに高速になりました。

関連する問題