2

Linux 2.6.39 x86_64 の Core i7 930 @2.8GHz (クアッドコア) の BIOS でハイパースレッディングを有効または無効にして、wine のコンパイル時間をいくつか測定しました。各測定値は次のようになりました。

git clean -xdf
./configure --prefix=/usr
time make -j$N

ここで、Nは 1 から 8 までの数字です。

結果は次のとおりです (「速度」は time(1) から 60/real です):

ここに画像の説明を入力

ここで、青色の線は HT 無効、紫色の線は HT 有効に対応しています。HT が有効な場合、1 ~ 4 スレッドを使用すると、HT がない場合よりも遅くなるようです。これは、カーネルがプロセスを異なるコアに分散せず、すでに使用中のコアの 2 番目のスレッドを再利用していることに関連している可能性があると思います。

では、私の質問: 同じコアの別のスレッドにプロセスを追加するよりも、コア スケジューリングごとに 1 つのプロセスを優先させるようにカーネルを強制するにはどうすればよいでしょうか? または、私の推論が間違っている場合、1 ~ 4 個のプロセスを並行して実行する場合に、HT を使用しない場合よりも HT を使用した場合のパフォーマンスが低下しないようにするにはどうすればよいでしょうか?

4

2 に答える 2

3

Intel チップのハイパースレッディングは、物理コアのいくつかの要素の複製として実装されていますが、独立したコアになるのに十分な電子機器がありません (たとえば、命令デコーダを共有するかもしれませんが、Intel の実装の詳細を思い出すことはできません)。

OS が 2 つの実際のコアとして認識する 1.5 物理コアとして、HT を使用した物理コアをイメージします。ただし、これは 1.5 倍の速度と同等ではありません (これはユースケースによって異なります)。

あなたの例では、どのコアも HT パイプラインと作業を共有していないため、非 HT は最大 4 スレッドまで高速です。実行スレッドが 4 つしかないため、スレッド間のコンテキスト スイッチングが少し余分に発生するため、4 スレッドを超えるフラットラインが表示されます。

HT の例では、最大 4 つのスレッドで少し遅くなります。これはおそらく、これらのスレッドの一部が実際のコアに割り当てられており、それが HT であるためです。これらの 2 つの実行スレッドが物理リソースを共有するため、パフォーマンスが低下しています。4 スレッドを超えると、余分な実行スレッドの利点が見られますが、利益が減少し始めていることがわかります。

おそらく、最大 4 つのスレッドの両方のケースでパフォーマンスを一致させることができますが、コンパイル ジョブではそうではない可能性があります。プロセッサ アフィニティをセットアップするために多くのプロセスが生成されていると思います。代わりに、特定の実際の CPU コアにバインドされた X<=4 スレッドで OpenMP または MPI を使用して実際の並列ジョブを実行した場合、HT オフとオンの間で同様のパフォーマンスが見られると思います。

于 2013-12-15T22:50:38.743 に答える
0

スレッドの数 <= 実際のコアの数を考えると、HT の使用は遅くなるはずです。1

一般に、より多くのコアがより速いコアよりも優れているわけではないことに注意してください。 実際、マルチコア システムの開発に多大な労力が費やされた唯一の理由は、より高速なシステムを作成することがますます困難になったためです。したがって、20 GHz のプロセッサを使用できない場合は、8 x 3 GHz のプロセッサを使用する必要があります。

HT は、主に、各スレッドが必ずしも可能な限り多くのプロセッサを消費するわけではないコンテキストでの利点として意図されていると思います。CADやビデオゲームなど、ユーザーとのやり取りによって管理される特定のタスクを実行しています。これらは、マルチタスクの恩恵を受ける種類のアプリケーションです。対照的に、サーバー プラットフォーム (プライマリ アプリケーションは、他のものへの依存によって制御されない独立したタスクをスレッド化する傾向があるため、可能な限り高速に最適に実行されます)は、マルチタスクから直接恩恵を受けることはありません。彼らはスピードの恩恵を受けます。 make4 ~ 8 スレッドの HT の利点が見られるのはそのためです。


1. これは単純化したものです。HT は単純にコア数を 2 倍にして速度を半分にするだけではありませんが、どのようなダイナミクスを使用しても、システムの 1 秒あたりの合計プロセッサ サイクル数は改善されません。それは同じです - より断片化されているだけです。

于 2013-12-15T20:44:31.457 に答える