
デスクトップ/ラップトップで、ある程度の負荷のかかる処理を実行することに興味があります (クラスターを必要とするほどではありませんが、優れた家庭用マシンが必要です)。私の質問は、ジョブを最も速く完了するには、いくつのスレッドを作成すればよいかということです (アプリケーションがオーバーヘッドをほとんどかけずにワークロードを分散すると仮定します)。
通常はプロセッサごとに 1 つのスレッドを作成しますが、Core i5/i7 のハイパースレッディング機能では、実際にはプロセッサごとに 2 つのスレッド (つまり、仮想プロセッサごとに 1 つのスレッド) を作成する必要があるのではないかと思います。どなたかご存知ですか?
*当然ながら、試してみて確認するのが妥当な答えでしょう。実行には約 12 時間かかるため、最初から正しく実行できればよいのですが、両方の方法で実行する機会があれば、喜んで結果を投稿します。
答え1
これは、コストのかかるベンチマークを必要とするオープンエンドの質問です。私は個人的に、両方の方法でそれが起こったのを見てきました。マルチスレッドを本当に台無しにしない限り、違いは約 +-10% なので、両方の方法で試してみる価値はあります。たとえ長い時間がかかっても。
Intel コンポーネントから構築された多くのハイパフォーマンス コンピューティング クラスターでは、HT が無効になっています。これには理由があります。これらのコードはハードウェアを飽和させる傾向があり、そのためパフォーマンスはメモリ アクセスの飽和に大きく左右されるからです。HT の場合、スレッドが計算され、オンとオフが切り替わるため、パフォーマンスはさらに悪くなります。http://semiaccurate.com/2012/04/25/does-disabling-hyper-threading-increase-performance/。
しかし、コードが高度に調整されていない場合は、ほぼ同じパフォーマンスの向上を体験できない可能性があります。http://semiaccurate.com/2012/04/25/does-disabling-hyper-threading-increase-performance/。
単一 CPU コンピューティングの場合、ハイパースレッディングを無効にすると、一部のソフトウェアのパフォーマンスが 1% 向上しますが、他のソフトウェアのパフォーマンスは大幅に低下します。おそらく、約 10% 低下します。
つまり、ベンチマークで特に指示がない限り、デスクトップ マシンのハイパースレッド/実際のコアごとに 1 つのスレッドを作成する必要があります。
答え2
ここで私が言っているのは、完全に F@H フォールディングの経験に基づくもので、コアごとに 1 つのスレッド (仮想または物理) が最適だということです。
そうは言っても、少しでも使用するとタスクが停止する可能性があるため、バックグラウンド プロセスや一般的なコンピューター タスクを処理するために 1 つのコアを空けておくのが得策かもしれません。
どこで実行されているかを把握したい場合は、CPUアフィニティを調べてください。一般的なルールとして、物理コアを優先(例:平次に、ハイパースレッド コアです。