HTを使用すると、追加の仮想コアを使用するほとんどのCPUバウンドタスクで約10〜30%のブーストが可能になります。これらのタスクはCPUにバインドされているように見えるかもしれませんが、カスタムメイドのアセンブリでない限り、通常、RAMとローカルキャッシュ間のIO待機に悩まされます。これにより、物理HT対応コアで実行されている一方のスレッドが、もう一方のスレッドがIOを待機している間に動作できるようになります。ただし、これには欠点があります。2つのスレッドが同じキャッシュ/バスを共有するため、それぞれのリソースが少なくなり、IOの待機中に両方のスレッドが一時停止する可能性があります。
最後のケースでは、単一スレッドを実行すると、最大同時理論処理能力が(10〜30%)減少し、一部のアプリケーションで非常に重要になる可能性があるキャッシュスラッシングの速度低下なしに単一スレッドを実行することになります。
使用するコアを選択することは、実行するスレッドの数を選択することと同じくらい重要です。各スレッドがほぼ同じ期間CPUにバインドされている場合は、ほとんど異なるリソースを使用するスレッドが異なる物理コア上にあり、共通のリソースを使用するスレッドが同じ物理コア(異なる仮想コア)にグループ化されるようにアフィニティを設定するのが最適です。その共通リソースは、余分なIO待機なしで同じキャッシュから使用できます。
各プログラムには異なるCPU使用特性があり、キャッシュスラッシングは大きな速度低下になる場合とそうでない場合があるため(通常はそうです)、最初にプロファイリングせずに理想的なスレッド数を決定することは不可能です。最後に注意すべきことは、OS/カーネルにもCPUとキャッシュスペースが必要になるということです。キャッシュ/CPUリソースの共有を回避するために、CPUバウンドスレッドでリアルタイムのレイテンシが必要な場合は、通常、OS用に単一の(物理)コアを確保しておくことが理想的です。スレッドがIOを頻繁に待機していて、キャッシュスラッシングが問題にならない場合、またはアプリケーション用に特別に設計されたリアルタイムOSを実行している場合は、この最後の手順をスキップできます。
http://en.wikipedia.org/wiki/Thrashing_(computer_science)http://en.wikipedia.org/wiki/Processor_affinity
_