6

最近、Ubuntu 10.04で、浮動小数点を多用するシミュレーションを実行するためのデュアルIntelX5650ワークステーションを購入しました。

各X5650には6つのコアがあるため、合計で12のコアがあります。コードは自明に並列であるため、私はほとんど12スレッドで実行しており、「トップ」を通じて約「1200%」のプロセッサ使用率を観察しています。

BIOSでハイパースレッディングが有効になっているため、オペレーティングシステムは名目上24コアが使用可能であることを認識します。スレッド数を24に増やすと、topは約2000%のプロセッサ使用率を報告しますが、実際のコードパフォーマンスが20/12向上するようには見えません。

私の質問は、ハイパースレッディングが最新世代のXeonで実際にどのように機能するかということです。浮動小数点を多用するコードは、コアごとに複数のスレッドをスケジュールすることでメリットがありますか?ワーキングセットが数倍大きい場合と比較して、キャッシュサイズのオーダーである場合、または実質的なI / O操作(シミュレーション出力のディスクへの書き込みなど)がある場合、答えは変わりますか?

さらに、ハイパースレッディングが有効になっている場合、プロセッサ使用率を「上」からどのように解釈する必要がありますか?

4

2 に答える 2

6

HT を使用すると、OS は同時に各コアに 2 つのスレッドをスケジュールします。top によって報告される使用率は、基本的には、サンプリング間隔 (通常は 1 秒) における「実行中」状態のスレッドの平均数です。実行中のスレッドは、CPU が実行できるようになっていますが、多くの作業が完了していない可能性があります (キャッシュ ミスでほとんど停止している場合など)。

スレッドが実際の I/O (ネットワーク、ディスクなど) でブロックされている場合、OS はスレッドをコアからスケジュール解除し、他の準備ができているスレッドをスケジュールするため、HT は役に立ちません。

HT は、コアのハードウェアを実際に 2 倍にすることなく、数学実行ユニットをより多く利用しようとします。1 つのスレッドに十分な命令レベルの並列性があり、キャッシュのミスが少ない場合、ほとんどのスレッドがコアのリソースをいっぱいにしてしまい、HT は役に立ちません。キャッシュに収まらないデータを含む重い FP アプリの場合、両方のスレッドが同じ実行ユニット (SSE 計算) を使用しており、両方ともフル キャッシュ以上のものを必要とするため、HT はおそらくあまり役​​に立ちません。キャッシュをめぐって競合し、さらにスラッシングするため、害を及ぼす可能性があります。もちろん、それはあなたが何をしているか、そしてデータアクセスパターンがどのように見えるかによって異なります.

HT は主に、不規則で予測不可能なアクセス パターンを持つ分岐コードに役立ちます。FP を集中的に使用するコードの場合、多くの場合、コアごとに 1 つのスレッドを使用し、アクセス パターンを慎重に設計する (適切なデータ ブロッキングなど) と、より適切に実行できます。

于 2010-07-09T03:55:10.487 に答える