私はC++で書かれたネイティブマルチスレッドWin32アプリケーションを持っています。これには、約3つの比較的ビジーなスレッドと4〜6のスレッドがあります。通常モードで実行すると、8コアマシンで合計CPU使用率が約15%になり、アプリケーションは約30秒で終了します。また、アフィニティマスクを設定して、アプリケーションを1つのコアのみに制限すると0x01
、23秒で完了します。
1つの物理コアに制限されている場合や、同時メモリアクセスの問題がある場合に、同期が安価になることと関係があると思います。
私はWindows7x64を実行していますが、アプリケーションは32ビットです。CPUはXeonX5570で、4コアとHTが有効になっています。
誰かがその振る舞いを詳細に説明できますか?なぜそれが起こるのか、そしてそのような行動を前もって予測する方法は?
更新:私の質問はあまり明確ではなかったと思います。複数のコアで15%を超えない理由ではなく、1つの物理コアで高速になる理由を知りたいです。