マルチコア プロセッサには、命令が実行されるコアをランダムに変更するための内部ハードウェアがありますか?

マルチコア プロセッサには、命令が実行されるコアをランダムに変更するための内部ハードウェアがありますか?

私の友人は、オペレーティング システム内でプロセスを特定のコアに固定した場合でも、プロセスは常にコア間を移動すると言います。プロセッサ メーカーは、プロセッサがホットスポットによって焼損しないようにこれを行っていると友人は言います (実際にコアの焼損が発生するかどうかは問題ではありません)。

彼はまた、例えば Windows のタスク マネージャーはプロセッサの内部動作を追跡できないため正しくないと述べています。したがって、信頼できません... 彼は、それを説明する Intel のドキュメントを見たと断言しています。(実際には見つけられませんでした)

私は、そうするとキャッシュやパイプラインなどが無効になるため、これは非論理的であると彼に伝えようとしましたが、そうでないことを示すドキュメントもないため、証明するのは少し困難です。

どちらかの理論を証明する文書を知っている人、または確実な説明ができる人はいますか?

ありがとう!

答え1

ヒートスポットなどを避けるためにプロセッサ内で意図的な「ランダム化」が行われているとは思いません。

リング 0 コードは、CPU レジスタを読み取って、コードがどのコアで実行されているかを特定し、間違ったコアで実行されている場合は CPU 時間を放棄できます。最低でも、BIOS 初期化時のリセット中に、1 つのコアには常に BSP ブートストラップ フラグが設定されます (x86 CPU の場合)。そのレジスタを読み取って、そのコアでのみ実行されていることを確認できます。ただし、使用できる他の ID メカニズムがほぼ確実に存在します。

OS の特権カーネル コードがプロセス切り替えを処理するため、特定のコアにプロセスをロックする機能を OS に提​​供することは可能です。たとえ、そのコアに切り替えが行われるまで CPU 時間を放棄するだけだとしてもです。また、他のすべてのプロセスがそのコアを回避するように設定して、必要なプロセスのためにそのコアを開いたままにすることもできます。

したがって、タスク マネージャーがそれを実行するかどうかに関係なく、理論的にはどのコアでどのプロセスが実行されているかを確実に把握し、それらのコアにロックすることができます。

さて、Intel には、実際にどの物理コアで実行されているか分からないようにコアの ID を切り替える隠しハードウェアがあるのでしょうか? おそらくないでしょう。CPU はコアごとの温度を報告し、異なるコアにロックする単一のスレッド プロセスを使用して、異なるコアの温度が上昇しているのを確認できます。

関連情報