2012-12-20 64 views
19

Visual Studio for C++プロジェクトで "マルチプロセッサのコンパイル"オプションを使用する際に注意すべき欠点、副作用その他の問題はありますか?あるいは、別の言い方で言えば、なぜVisual Studioではこのオプションがデフォルトでオフになっていますか?Visual Studioで「マルチプロセッサコンパイル」に不利な点はありますか?

+1

関連:http://stackoverflow.com/questions/1422601/how-do-i-turn-on-multi-cpu-core-c-compiles-in-the-visual-studio-ide-2008 –

答えて

14

The documentation for /MP says

互換性のないオプションと言語機能
/MPオプションは、一部のコンパイラオプションおよび言語機能と互換性がありません。互換性のないコンパイラオプションを/MPオプションとともに使用すると、コンパイラは警告D9030を発行し、/MPオプションを無視します。互換性のない言語機能を使用すると、コンパイラはエラーC2813を発行し、現在のコンパイラの警告レベルオプションに応じて終了または続行します。
注:
ほとんどのオプションは互換性がありません。許可されていれば、同時に実行するコンパイラは同時に出力をコンソールまたは特定のファイルに書き込むためです。その結果、出力が混ざり合って文字化けしてしまいます。場合によっては、オプションの組み合わせによってパフォーマンスが悪化することがあります。

そしてそれは/MPと互換性のないコンパイラオプションおよび言語機能を示していますテーブルを提供します:

  • #importプリプロセッサディレクティブは、(C++のクラスに、タイプライブラリ内の型を変換し、その後、書き込みこれらのクラスをヘッダーファイルに)
  • /E,/EP(標準出力(stdout)にプリプロセッサの出力をコピー)
  • /Gm(リビルド増分をイネーブル)
  • /showIncludes(標準誤差(stderr)に含まれるファイルのリストを書き込み)
  • /Yc(プリコンパイル済みヘッダーファイルを書き込み)

の代わりにそれらを無効にします既定で他のオプション(既定で/MPを有効にする)を使用すると、Visual Studioではこれらの機能を手動で無効/防止し、/MPを有効にします。

5

マルチプロセッサコンパイルは他の多くのコンパイルオプションと互換性がなく、システムリソースの使用率も高いためです。それが彼にとって価値があるかどうかを決めるのは開発者次第です。あなたはここに完全なドキュメントを見つけることができます:http://msdn.microsoft.com/en-us/library/bb385193.aspx

+0

"システムリソースの使用量の増加が重要になる可能性があります。テンプレートの重いプロジェクトでは、マウスの動きやキーストロークに一度に反応しないほどの強力なデスクトップマシンを抱えていました。ビルド時間のわずかな増加だけで、マルチプロセッサコンパイルを無効にすることで、ビルド中に他のアクティビティで実際にマシンを使用できるようになり、オフセットされました。 – Jeremy

10

は、私たちの経験から見つかった主な問題点は以下の通りであった。今日では、同じ時間(役に立たない情報でBSCMAKEを呼び出すことにより、複数のプロジェクトをビルドするために失敗し

  1. ブラウズ情報はそうする必要があります
  2. 依存関係の問題とビルドオーダーの問題による通常のビルド時には通常は見られないものがあります。
  3. バッチビルドではマルチプロセッサコンパイルを利用できません。 2005〜2008年のVあなたがstdafxを構築し、無視することができますが、やっ時には、上記の構成の問題です、それはしかし、このメッセージ

を生成し、再構築すると

  • 警告は、プリコンパイルヘッダは互換性がないことについて生成されたSエディションは、これが発生することができますそれ以外の場合は、ビルドを高速化するために有効にする必要があります。

  • +0

    "リンカの失敗"と言えば、並列プロジェクトのビルドや/ MPスイッチに関して見たこれらの問題は、1つのプロジェクトで並列コンパイルを行いますか? ([こちら](http://blogs.msdn.com/b/visualstudio/archive/2010/03/08/tuning-c-build-parallelism-in-vs2010.aspx)も参照してください)。または、リンカーの障害依存関係が正しく構成されていないため –

    +2

    @MartinBaこれは、プロジェクトの依存関係がソリューションで正しく設定されていないためでした。並列プロジェクトのビルドを有効にしなかった場合、時には離れてしまうことがありました。問題のあるプロジェクトを見つけるために出力を介して – EdChum

    関連する問題