0

私は、多かれ少なかれ限られた時間空間でタスクを実行する、非常に最適化された CPU 集約型のマルチスレッド コードを C で書いています。この間、初期値をロードして最終結果を保存する場合を除いて、L1 キャッシュから出ることはありません。したがって、基本的にこれは、追加されたすべてのコアに対して線形にスケーリングする並列化されたコードです。これは、非 HT コアで発生することです。

HT を搭載した 2 コア i5 (BIOS で無効にすることはできません。これは非現実的な解決策です) では、1 コアから 2 コアにすると、厄介な改善が見られます。私の仮説は、最初のスレッドはコア上で単独で実行され、2 番目のスレッドは最初のスレッドとコアを共有するというものです。

Windows API には、使用可能なコアと HT に関する情報を取得する関数があります。しかし、この情報を利用して、コアごとに 1 つのハイパースレッドに 1 つのスレッドしか存在しないようにするにはどうすればよいでしょうか?

4

2 に答える 2

0

この記事が役立つかもしれません: http://msdn.microsoft.com/en-us/magazine/cc300701.aspx#S11

「CPU アフィニティ」セクションと「ハイパースレッディングの検出」セクションを参照してください。

于 2012-07-13T14:37:19.773 に答える
0

OS はユーザーの有無にかかわらず HT 論理コアを使用します。その結果、キャッシュのサイズが実質的に半分になります。スレッドを論理コアに固定できますが、役に立たないと思います。あなたの問題は、HTの単なる存在です。オフにする必要があります。

于 2012-07-14T17:57:20.040 に答える