ここで別の視点を追加したいと思いました。答えは、質問が弱いスケーリングと強いスケーリングのどちらを想定しているかによって異なります。
ウィキペディアから:
弱いスケーリング:プロセッサーあたりの固定問題サイズでのプロセッサー時間によるソリューション時間の変化。
強力なスケーリング:解決された時間は、問題の合計サイズが固定されているプロセッサーの数によってどのように変わるか
質問が弱いスケーリングを想定している場合は、@ Gonzaloの回答で十分です。ただし、質問が強力なスケーリングを想定している場合は、さらに追加する必要があります。強力なスケーリングでは、固定のワークロードサイズを想定しているため、スレッドの数を増やすと、各スレッドが処理する必要があるデータのサイズが減少します。最近のCPUでは、メモリアクセスはコストが高く、データをキャッシュに保持して局所性を維持するのに適しています。したがって、各スレッドのデータセットが各コアのキャッシュに収まるときに、スレッドの最適な数が見つかる可能性があります(システムのL1 / L2 / L3キャッシュであるかどうかについては詳しく説明しません)。
これは、スレッドの数がコアの数を超えた場合にも当てはまります。たとえば、4コアマシンで実行されるプログラムに8つの任意の単位(AU)の作業があるとします。
ケース1:各スレッドが2AUを完了する必要がある4つのスレッドで実行します。各スレッドの完了には10秒かかります(キャッシュミスが多い)。4コアの場合、合計時間は10秒になります(10秒* 4スレッド/ 4コア)。
ケース2:各スレッドが1AUを完了する必要がある8つのスレッドで実行します。各スレッドは2秒しかかかりません(キャッシュミスの量が減ったため、5秒ではなく)。4コアの場合、合計時間は4秒になります(2秒* 8スレッド/ 4コア)。
私は問題を簡略化し、他の回答(例:コンテキストスイッチ)で言及されているオーバーヘッドを無視しましたが、使用しているデータサイズによっては、使用可能なコア数よりも多くのスレッド数を用意することが有益であるという点がわかると思います再処理。