スレッドを実行するプロセッサを手動で選択することにより、システム パフォーマンスが向上することを示唆する証拠はありますか?
たとえば、最も多くの作業を行うスレッドを 1 つのコアに割り当て、他のすべての「ヘルパー」スレッドを別のコアに割り当てたとします。
スレッドを実行するプロセッサを手動で選択することにより、システム パフォーマンスが向上することを示唆する証拠はありますか?
たとえば、最も多くの作業を行うスレッドを 1 つのコアに割り当て、他のすべての「ヘルパー」スレッドを別のコアに割り当てたとします。
これにはケースがあるとは思えません。
マルチプロセッサ対応の OS は、プロセッサの負荷を分散するために、適切と思われるプロセッサ時間を自動的に割り当てることに注意してください。
つまり、実際には、実行中のプロセス スレッドは、スレッドの優先度に基づいて常に中断されるため、OS はプロセッサ時間を他のプロセスに割り当てることができます。同じスレッド内の個々の計算は、同じプロセッサ上で実行されることさえありません。
指定された 1 つのプロセッサのみで実行するようにプロセス コードを修正すると、OS がプロセッサの負荷を分散できなくなるため、パフォーマンスが低下する可能性があります。
その大部分をクリティカルセクションにすることができると思いますが、これは他の領域、特にサブスレッドの処理でアプリケーションを妨げます.
少なくとも理論的には、異なるコア間でスレッドがバウンスすることにより、システムのパフォーマンスが多少低下する可能性があるようです。多くのマルチコア設計ではコアごとに個別の L1 キャッシュが必要になるため、スレッドが新しいコアに移動するたびに、スレッドが以前にアクセスしていたデータは新しいコアにキャッシュされなくなり、より高いレベルのキャッシュからフェッチする必要があります。 (またはメモリ)。
スレッドを同じコアで実行し続けると、L1 キャッシュにスレッドの実行に関連するデータが含まれる可能性が高くなります。もちろん、これがどの程度の影響を与えるかは、キャッシュのサイズや、コアで「同時に」スケジュールされている他のスレッドの数など、他の要因にも依存します。