(特に)次のシナリオが与えられます:
- コアごとに1つのスレッド、
- 各コアには独自のキャッシュがあり、
- キャッシュのヒット/ミス率が優れたパフォーマンスの中心となるプログラム(つまり、今日のほとんど)
マルチコアシステムでの作業をスケジュールするためのスレッドプールの利点についてよく読んでいます。マルチスレッドにはいくつかのアプローチがありますが、このようなよりスマートな負荷分散アプローチと、負荷分散がで処理されたと想定されるより単純な「タスクタイプによるスレッドの割り当て」アプローチとの間で比較が行われることがよくあります。実行時のシステム自体ではなく、開発時間。この例としては、あるスレッドでの専用の数値計算と別のスレッドでのレンダリングタスクがあります。
上記の条件下では、タスクタイプごとのスレッドアプローチは、コアのローカルキャッシュが、割り当てられた特定のタスクに対してはるかに効率的であるため、はるかに優れたパフォーマンスにつながる可能性があるように思われます。(待機はそれほど問題ではないと仮定します。つまり、両方のスレッドがフルスチームで実行されているか、フルスチームに近い状態で実行されています。)
また、負荷分散アプローチとナイーブアプローチで、スレッドセーフメカニズムがパフォーマンスにどのような影響を与える可能性があるのか疑問に思います。