2

ここで「スレッドアフィニティ」の回答を検索すると、それを行うことに多くの関心が寄せられていますが、それを正当化する理由はほとんどなく、安定した QueryPerformanceTimer の結果が得られる可能性があります。

最新の OS と、最新の 4 から 6 コアの CPU を搭載した最新の 2 ソケットから 4 ソケットのワークステーション/サーバー クラスのマシンを想定すると、自分の OS のスケジューラよりも自分がよく知っていると考える正当な理由があるでしょうか? 広告アフィニティをより制御することが正しいことである現実の状況はありますか? どのような種類のパフォーマンス上の利点を実証できますか?

前回、どこかにスレッド アフィニティを設定するための本当に良いケースを見たとき (システム パフォーマンスの真の大幅な改善を示す具体的な結果によって裏付けられたように)、それは Win2K デバイス ドライバーとは関係のないものでした。しかし、私はそのようなものを何年も見ていないので、最近誰かがスレッドアフィニティを制御する必要があると言ったとき (ただし、理由ではない)、私は非常に懐疑的です... しかし、そうでないことが示されることに興味があります.

4

5 に答える 5

1

OSカーネルでは、場合によってはカーネルモードドライバーでは、すべてのCPUで同じアクションを実行する必要があります(システムレジスタの更新など)。これは、単一のスレッドのループで実行でき、反復ごとにアフィニティを変更します。

于 2012-02-18T07:27:37.857 に答える
1

これを使用してスレッドをコアに割り当てます。たとえば、シミュレーションでは、1 つのコアで物理演算を完全に実行し、残りの計算を別のコアで実行できるようにします。ハードウェアを知っている厳しい環境にいる場合、これを制御できることは理にかなっています。

もちろん、これはシステムごとに設定する必要があるため、デフォルトでは OS に実行するコアを決定させますが、コアの使用を制限するオプションは保持します。

于 2011-12-14T17:38:34.013 に答える
1

主な理由は、キャッシュに大きく依存するものがある場合です。OS スケジューラは、必ずしもそれを考慮に入れているわけではありません。

于 2011-08-05T15:45:34.730 に答える
0

デスクトップの場合、それはまったく不要です。

しかし、それが役立ついくつかのアプリケーションを見ることができます。たとえば、CPU キャッシュで実行されるアプリが変更されない場合、CPU キャッシュはそれを好みます。

もう 1 つの可能性は、重要なタスクがある場合です。そのタスクに CPU 全体を割り当て、他のタスクが残りの CPU を使用します。

またはその逆: 優先度の低いタスクがいくつかあり、それらをすべて 1 つの CPU に配置し、他のタスクをより重要なタスクに使用できるようにします (プロセスの優先度を使用すると、アフィニティがなくてもこの利点のほとんどが得られますが、一部のメモリが重いことは想像できますそうでない場合もあります)。

于 2011-08-05T14:18:50.623 に答える
0

ほとんどの状況でこれを理解するには、CPU に任せるのが最善であることに同意します。ただし、私が知る限り、スレッド アフィニティを使用する最も一般的な理由は、適切なキャッシュ依存性が必要な場合です。マルチCPUシステムでは、特定のCPUが個別に何かをキャッシュし、同じものが他のCPUにキャッシュされている場合、他のCPUで自動的に無効になる可能性があると思います. そのため、特定のスレッドが実行する CPU を変更し続けると、キャッシュ ヒット率が低くなりすぎます。したがって、この場合、プログラマーが COU の親和性をより適切に判断することは理にかなっていると思います。また、重要なタスクが他の優先度の低いプロセスを抑制せずに常に CPU を取得するようにすることについての Ariel の上記の点も理にかなっていると思います。

于 2012-02-18T06:22:39.497 に答える