2016-04-12 3 views
2

である私はのための答えを見つけることを試みたが、私が見つけたすべての情報から、より混乱しました疑問がある - 残念ながら、そう明確な答え最適数ハイパースレッディングはオフ

を得ることができませんでしたが、ハイパースレッディングがオフになっているコンピュータがあるとしましょう。

私が書いたプログラムで最適なスレッド数を教えてください。

私のプログラムが100%CPUに束縛されていない(IOを扱っていない)ので、最適なスレッド数は1コアあたり1スレッド以上になることを理解しています。 (コンテクストの切り替えによるオーバーヘッドに起因するものではない)、これらの種類のプログラムの方が優れています。

しかし、私のプログラムが100%CPUバウンドの場合、コアあたり1つのスレッドが最適ですか? スレッド数が増えているので混乱しています。つまり、スレッドごとにスライス時間が長くなってパフォーマンスが向上する可能性があります。

ありがとうございます!

+1

私は明確な解答はありませんが、いつでもプログラムをベンチマークすることができます。 –

+0

作業負荷を知っている人には答えられません。より多くのスレッドは、*より小さい*スライスを意味し、すべてが実行されている場合はオーバーヘッドが増えます。 –

答えて

0

ハイパースレッディングなしの純粋なCPUバウンド負荷の場合、答えは常にコアあたり1スレッドです。

HTをオンにすると、スレッドが同じキャッシュで競合するため、1つのHTコアあたり1スレッド未満になる可能性があります。しかし、通常、ここでもHTコアごとに1つのスレッドが最適です。

IOワークロードでは、はるかに複雑ですが、ここではこれは当てはまりません。

、より多くのスレッドを持つ私は推論をたどる

わからない、スレッドごとに大きなスライス時間を得るかもしれないという意味からです。 OSは、タイムスライスをスレッドにほぼラウンドロビン方式で渡します。タイムスライスは4〜40msで、スレッドの数に応じてサイズは変わりません。

理想的には、スレッドの数が正確に正しい場合、話すべきコンテキストスイッチはありません。追加するスレッドが増えるほど、より多くのコンテキストスイッチが追加されます。

+0

よろしくお願いいたします。より大きなスライス時間については、それは私の誤解でした。あなたは、HTがコアあたり1つのスレッド上にある場合、通常は最高ですか?私は実際に2つのスレッド(一緒に実行することができます)2であることを期待します。それ以外の場合は、共有キャッシュの問題が大きすぎる場合、なぜHTを使用する? –

+0

4x2コアを使用している場合は、8スレッド(通常)を実行します。共有キャッシュはうまく動作しますが、今は2つのスレッドのデータを収容する必要があります。これはまったく問題を引き起こさないか、または劣化につながる可能性があります。私は劣化がまれなケースであると思います。もちろん、最も安全な方法は、両方のアプローチとベンチマークを試みることです。お客様のマシンで5秒の自動ベンチマークを実行することもできます。 – usr

関連する問題