私は、多かれ少なかれ限られた時間空間でタスクを実行する、非常に最適化された CPU 集約型のマルチスレッド コードを C で書いています。この間、初期値をロードして最終結果を保存する場合を除いて、L1 キャッシュから出ることはありません。したがって、基本的にこれは、追加されたすべてのコアに対して線形にスケーリングする並列化されたコードです。これは、非 HT コアで発生することです。
HT を搭載した 2 コア i5 (BIOS で無効にすることはできません。これは非現実的な解決策です) では、1 コアから 2 コアにすると、厄介な改善が見られます。私の仮説は、最初のスレッドはコア上で単独で実行され、2 番目のスレッドは最初のスレッドとコアを共有するというものです。
Windows API には、使用可能なコアと HT に関する情報を取得する関数があります。しかし、この情報を利用して、コアごとに 1 つのハイパースレッドに 1 つのスレッドしか存在しないようにするにはどうすればよいでしょうか?