2

PC でかなりプロセッサを集中的に使用するものを実行していて、CPU 使用率がかなりおかしいことに気付きました。私の PC はクアッドコア i7-870 で、おそらく 8 つの仮想コアがあります。
私は .NET 4 で Task Parallel ライブラリを使用しているため、すべてのコアが適切に活用されると期待していますが、Process Monitor から次のような情報を取得しています。

CPU使用率

コア 6 と 8 はほとんど影響を受けておらず、短いバーストを除けば、4 も影響を受けていません。
これは私が期待すべきことですか?

4

3 に答える 3

3

ほとんどの場合、はい、これは合理的に見えると思います。ハイパースレッディングは実際には2 つのコアを偽造するだけであることに注意してください。各物理コアには 2 つのフロントエンドが割り当てられるため、2 つの命令ストリームを並行して読み取ることができます。ただし、同じ実行ユニットを共有しています。そのため、1 つの HT コアがビジー状態になると、実行ユニットが使用されるため、その「ツイン」コアはほとんど処理できなくなります。

これは、最初の 2 つのコアで見られるものと思われます (特に 2 番目のコアは非常に明白です)。

これを除けば、完全な CPU 使用率を得ることはほとんど不可能です。場合によっては、コアがメモリを待ってストールする必要があります。場合によっては、コストのかかるパイプライン化されていない命令を実行し、おそらく数十サイクルまたは数百サイクルの間、その物理コア上の実行ユニットを効果的にブロックします。

また、場合によっては、命令間の依存関係が、1 つまたは複数のコアで実行するものが何もないことを意味する場合もあります。

それとは別に、8 つのグラフが表示され、コアが 4 つしかないため、もちろん、ハイパースレッディングは機能しています . ;)

于 2011-06-10T06:10:00.693 に答える
0

要するに

  1. はい、動作します(もちろん)
  2. プロファイリング
  3. YMMV - ハイパースレッディングはマルチコアではないため、命令の負荷やキャッシュの飽和などのタイプに大きく依存します。コードについて何も知らない場合 (実際には C# であることを除いて)、「小さなオブジェクト」のコレクションを探すことができます。まっすぐな System.Array の構造体にすることができます(ジェネリックList<>も配列を内部で使用し、構造体要素の型を最適化します)

$0.02

于 2011-06-10T06:03:52.927 に答える
0

それはすべて、アルゴリズムの実装に依存します。TPL は、アルゴリズムのデータ依存関係に応じて、適切な数のコアを使用します

于 2011-06-10T06:09:18.573 に答える