ハイパーレディングは機能していますか?
-
25-10-2019 - |
質問
私は自分のPCでかなりプロセッサ集約型のものをいくつか実行していますが、CPUの使用がかなり奇妙に見えることに気付きます。私のPCはクアッドコアi7-870で、おそらく8つの仮想コアを備えています。
.NET 4のタスクパラレルライブラリを使用しているため、すべてのコアがうまく利用されることを期待していますが、プロセスモニターからこのような情報を取得しています。
コア6と8はほとんど触れられておらず、短いバーストを除いて、4も触れません。
これは私が期待すべきことですか?
解決
ほとんどの場合、はい、これは合理的に見えると思います。ハイパースレッドは本当にまさにそのことに注意してください 偽り 2つのコア。各物理コアには2つのフロントエンドが与えられるため、2つの命令のストリームを並行して読み取ることができます。しかし、彼らはまだ同じ実行ユニットを共有しています。したがって、1つのHTコアがビジーである場合、実行ユニットが取得されるため、その「ツイン」コアはほとんど作業を行うことができません。
それはあなたが最初の2つのコアで見ているもののようです(特に2番目はそれを非常に明白にします)
これとは別に、あなたはほとんど完璧なCPU使用率を得ることができません。時々、コアはメモリを待っているだけで停止する必要があります。時には、費用のかかる非パイプラインの命令を実行し、おそらく数十サイクルまたは数百サイクルでその物理コアの実行ユニットを効果的にブロックします。
そして時々、指示間の依存関係はあなたがしないことを意味するかもしれません 持ってる 1つ以上のコアが実行されるもの。
それとは別に、8つのグラフが表示され、4つのコアしか持っていないので、 はい、もちろんハイパースレッドが機能しています. ;)
他のヒント
要するに
- はい、それは(もちろん)動作します
- それをプロファイルします
- YMMV -HyperThreadingはマルチコーリングではないため、命令負荷の飽和の種類やキャッシュ飽和などに大きく依存します。コードについて何も知らない(C#を除く)ストレートsystem.array'sにすることができます 構造体 (ジェネリック
List<>
また、内部的に配列を使用し、構造体要素タイプに最適化します)
$0.02
それはすべて、アルゴリズムの実装に依存します。 TPLは、アルゴリズムのデータ依存関係に応じて、適切な数のコアを使用します