答えて

1

この場合がありません。

マルチプロセッサ対応OSは、プロセッサのローディングのバランスをとるために、自動的にプロセッサ時間を割り当てます。

これは、実行中のプロセススレッドが常にスレッド優先度に基づいて中断されるため、OSがプロセッサ時間を他のプロセスに割り当てることができることを意味します。同じスレッド内の個々の計算は、同じプロセッサ上で実行されることさえできない。

プロセスコードを特定のプロセッサーだけで実行するように固定すると、OSがプロセッサーの負荷を分散することができないため、パフォーマンスが低下する可能性があります。

大きな部分をクリティカルセクションにすることができますが、これは他の領域でのアプリケーション、特にサブスレッドの処理を妨げる原因になります。

0

少なくとも理論的には、異なるコア間にスレッドが跳ね返ることによって、システムのパフォーマンスが多少低下する可能性があります。多くのマルチコア設計では、各コアに別々のL1キャッシュが必要なため、スレッドが新しいコアに移動するたびに、以前にアクセスしていたスレッドのデータは新しいコアにキャッシュされなくなり、上位キャッシュからフェッチする必要があります(またはメモリ)。

同じコアでスレッドを実行すると、L1キャッシュにスレッドの処理に関するデータがある可能性が高くなります。もちろん、キャッシュのサイズや他のスレッドがコア上で「並行」にスケジュール設定されているかどうかなど、他の要因にも影響します。

+0

コアごとに1つのスレッドを実際に実行している場合(そうは思われません)、コア切り替えの効果は、同じコアの切り替えコンテキストの効果に非常に似ています。 –

+0

さて、いいえ、コンテキストスイッチは必ずしも同じ効果を持つとは限りません。はい、キャッシュが新しいデータで完全に(または大幅に)補充された場合、「元の」スレッドが再びスイッチバックされるまでに、コンテキストスイッチとコアスイッチに同様の効果があります。しかし、必ずしもそうであるとは限りません。また、コアごとに1つのスレッドについてのあなたの仮定はそうでないかもしれません。システム内のほとんどのスレッドがアイドル状態になるのはよくあることですが、実際に何かを実行しているのは1つ(またはいくつか)です。 99%の時間で、コアごとに1つのスレッドしか実行していない可能性があります。 –

関連する問題