5

私のコンピューターにはクアッドコアi7プロセッサーが搭載されています。科学シミュレーションの並列化を研究しています。ハイパースレッディングは並列パフォーマンスにどのように影響しますか?降下パフォーマンスを得るために、4つを超える作業プロセスを使用してはならないことを私は知っています。しかし、ハイパースレッディングも無効にする必要がありますか?並列パフォーマンスに影響はありますか?

4

4 に答える 4

9

私の経験では、電磁モデリングと反転コードを実行すると、答えは「はい」です。ハイパースレッディングを無効にする必要があります。しかし、これは他の人々の逸話によってよく答えられるような種類の質問ではありません(私のものでさえ、魅力的で真実ではありません)。

あなたは学生です、これは間違いなくあなた自身の結論に達するのに費やす価値のあるトピックです。非常に多くの要因が関係しているため、プラットフォームでコードを実行した経験はほとんど価値がありません。

于 2012-03-09T15:39:42.170 に答える
3

Linuxでは、i7に4つのビジースレッドがある場合、それぞれが異なるコアに配置されます。コアの残りの半分がアイドル状態の場合、パフォーマンスは同じになります。別のプログラムを実行している場合は、追加のプログラムを実行するためのハイパースレッディングとコンテキスト切り替えのどちらが優れているかについては議論の余地があります。(コンテキスト切り替えが少ない方が良いと思います)

よくある間違いは、4つではなく8つのスレッドを使用すると、2倍の速度になると想定していることです。わずかに速い(この場合はそれでも価値がある)か、わずかに遅い(この場合、プログラムを4スレッドに制限する)可能性があります。2倍のスレッド数を使用した方がわずかに速い例を見つけました。私見、それはすべて、最適な数を見つけてその数を使用するためにそれをテストすることの問題です。

HTをオフにする必要があることがわかるのは、アプリケーションの動作を制御できず、4つのスレッドを使用する方が速い場合だけです。

于 2012-03-12T14:06:25.283 に答える
2

あなたは次のように述べています:

私は、下降パフォーマンスを得るために 4 つ以上の作業プロセスを使用してはならないことを知っています。

これは必ずしも真実ではありません。以下は、HT を有効にした i7-3820 で実行した例です。私が実行していたコードはすべて C++ でした。実行する必要がある 8 つの個別のプログラム (同一ではありますが) があるとします。これらのコードを実行する次の 2 つの方法を試しました。

  1. 一度に 4 つの個別のスレッドのみを同時に実行します。これらの 4 つが完了したら、次の 4 つのスレッドを実行します (4 x 2 = 合計 8)。
  2. 8 つすべてを個別のスレッドとして同時に実行します (8 x 1 = 合計 8)。

ご覧のとおり、これら 2 つのシナリオは同じことを達成します。ただし、実行時間は次のとおりです。

  1. 4 スレッドのセットごとに 1 時間。8つすべてを完了するのに合計2時間かかります。
  2. 8 スレッドのセットで 1.5 時間。

あなたが見つけたのは、ケース #1 では単一のスレッドがより速く終了することですが、すべての作業がより短い時間で完了するため、全体的な #2 の方がパフォーマンスが向上します。HT を有効にすると、パフォーマンスが通常 25% 向上することがわかりました。

明らかなように、8 つのスレッドを実行する方が 4 つよりも高速なシナリオがあります。

于 2013-05-09T14:16:35.763 に答える
1

HyperTreading は、Simultaneous Multi Threading (SMT) の Intel 実装です。一般に、アプリケーションが CPU バウンドでない限り、SMT はほとんど常に有益です (これが通常有効になっている理由です)。アプリケーションが CPU バウンドであることが確実にわかっている場合は、SMT を無効にします。それ以外の場合 (アプリケーションが IO バウンドであるか、コアを完全に飽和させることができない場合)、有効のままにします。

于 2012-03-11T18:20:14.283 に答える