2番目の仮想コアが1番目の仮想コアがスタックしているときに貢献できる場合、そうでないよりはましなので、(少なくとも)少し余分な作業を完了します。
問題は次のとおりです。2つの異なるスレッドがあると、1つが悪化するのはいつですか?分岐予測と命令間の依存関係は変わりません。現在メモリアクセスを待機しています... 2つのスレッドは、キャッシュ使用率と帯域幅の両方でメモリアクセスを巡って競合しています。
HTで実行しているCPUとそうでないCPUがある場合、特定のスレッドをいずれかのタイプに割り当てることも意味しますか?私はそうは思わない:あなたのプログラムはランダムな仮想コア上でスレッドを実行するだろう。では、構成の分割はどのように役立ちますか?各CPUには独自のキャッシュがあるため、唯一の影響はメモリ帯域幅とキャッシュの一貫性の負荷によるものです。
一般的に、あなたはポイントに達したより多くのあなたがやっている可能性が何かをすることは、いくつかのCPUの実行ユニットがアイドル手放すよりも高価ですが。これは、スレッドの数に直接依存するのではなく、スレッドが何をしているか、さまざまなコンポーネントの詳細なメモリアーキテクチャとパフォーマンスの微妙な違いに依存します。
簡単な答えはありません。特定のプログラムを念頭に置いても、マシンは自分の経験に関係する人々のマシンとは異なる場合があります。
あなたはそれを自分で試して、その正確なマシンでの特定の作業で最速のものを測定する必要があります。そして、それでも、ソフトウェアの更新と時間の経過に伴う使用の変化によって変化する可能性があります。
見てみましょう怒りののボリューム3 の最高傑作を。特定のプロセッサを注意深く見ると、コードの実行に必要な多くのステップの深いパイプラインの中でリソースが制限されていることがわかります。より多くの作業を引き受けるのではなく、過剰なコミットにより実行が遅くなるケースを見つける必要があります。一般的に、それは何らかのキャッシュを意味します。リソースがスレッド間で共有される場所。
CPUメーターの意味:アイドルスレッドの実行に費やされていないすべての時間を報告します。コアに割り当てられた両方の論理スレッドは、それらの1つで実行される実際の作業が小さい場合でも、アイドル状態になりません。パイプラインが結果の準備が整うまで、メモリがフェッチされ、アトミック操作がフェンスされるなど、パイプラインが数サイクル停止するのに費やされた時間も同様に、スレッドが「準備ができていない」として棚上げされないため、アイドル状態になりません。時間が使用中として表示されます。RAMで待機しても、アイドルとして表示されません。I / Oのようなものだけがスレッドをブロックし、スレッドへの充電を停止します。一般的には、オペレーティング・システムのミューテックスはそうだろう、しかし、「スピンロック」など、もはや確実なことだマルチコアシステム、の立ち上がりになりません棚上のスレッド行く背中を作ります。
したがって、CPUがメモリを待機していることが多い場合、CPUメーターが100%であっても、すべてがスムーズに航行できるというわけではありません。90%を示す論理コアの数が少なくなると、処理が終了し、ディスクで待機するため、より多くの作業を完了できます。
したがって、CPUメーターについて心配する必要はありません。実際の進捗状況のみを確認してください。