1

私はかなりリソースを集中的に使用するアプリケーションを作成しており、そのアプリのユーザーがどのリソースを正確に使用するかを決定できるようにする方法を見つけようとしています。

ここでの問題の一部は、CPU の機能を把握することです。ユーザーがアプリで AMD Phenom II X6 で 5 コアを使用することを希望している場合、それらの 5 コアにすべてを投入してもうまくいくと思います。一方、プロセッサが Intel i7 または AMD FX-8510 の場合、これらのコアの一部はさまざまなコンポーネントを共有します。ハイパースレッダースケジューラーに誤って何かをスケジュールしたり、その程度に何かをスケジュールしたりしないようにするには、どうすればよいですか?

CPU がチョークするシナリオを回避しようとしています。これは、CPU の間違った部分にすべてを投げているためです (古い問題でした)。何か案は?

4

1 に答える 1

1

オペレーティング システムのスレッド スケジューラには、必要なすべての情報があります (物理 CPU コアの数、リソースを共有する論理コア、安全なエネルギーを確保するコア、ハイパースレッディングが有効な場合、ターボ周波数を使用するコア、別のプログラムが使用するリソースなど)。 ...) 効率的な CPU リソース割り当てのため。プログラムはこれらのことについて何も知らないので、OS にリソースの割り当て方法を決定させるのが最善の方法です。プログラムに特別なサポートがなくても、必要に応じてプロセスの優先度またはプロセッサのアフィニティを設定することで、プログラムが使用するリソースを制限できます。

試すことができる 1 つのことは、CPU コアの数 (Environment.ProcessorCount によって返される) に従ってスレッドの数を作成することです。(論理コアごとに 1 つのスレッドではなく) 物理コアごとに 1 つのスレッドをスケジュールする方がパフォーマンスが良いと思われる場合は、Process.GetCurrentProcess().ProcessorAffinity プロパティで遊ぶことができます。以前よりも悪い状況です (将来の CPU が物理コアあたり 2 つではなく 3 つの論理コアを持つ場合、または別のプログラムがプロセッサ アフィニティを同じコアに設定した場合はどうなるでしょうか?)。

于 2012-05-19T06:20:29.377 に答える