1. ホーム
  2. c

[解決済み] makeを-j4または-j8で使用する。

2022-02-10 12:14:11

質問

私は4つのプロセッサを持っており、プロセッサを大量に消費するアプリケーションをコンパイルしています。私は make と共に -j4 スイッチはOpenCVで推奨されています。 -j8 ? マルチプロセッサーにするメリットは何ですか?

どのように解決するのですか?

おっしゃるとおり -j フラグは、指定された数の「スレッド」を生成することを許可するよう make に伝えます。各スレッドがそれぞれのコア/CPUで実行され、マルチコア/CPU環境が最大限に活用されるのが理想的です。

make 自体は、ソースファイルをコンパイルしません。コンパイラ(gcc)が行います。Makefile(の入力)は make ) には、ターゲットのセットが含まれています。各ターゲットは、(他のターゲットへの)依存関係のセットと、ターゲットをどのように構築するかのルールを持っています。 make は、Makefile を読み込んで、すべてのターゲット、依存関係、ビルドルールを管理します。ソースファイルをコンパイルする以外に make は、シェルコマンドで記述可能なあらゆるタスクを実行することができます。

スレッドの許容数を高く設定しすぎると、各スレッドを独自のコアでスケジュールすることができなくなります。すべてのスレッドを実行させるために、追加のスケジューリング(コンテキスト)スイッチが必要になります。このようなリソースの追加使用は、明らかにパフォーマンスの低下を招きます。

複数の法則があるようですが、やはり総量を <number of cores> + 1 が最も一般的です。この背後にある考え方は、すべてのコアが自分のスレッドを持ち、ターゲットと次にビルドされるものを処理する追加の管理スレッドが1つあることです。