2

重複の可能性:
.NET / C#を介してCPUコアの数を見つける方法は?

マルチプロセステスト環境を制御するプログラムがあります。これは、システムで使用可能なコアの数を識別し、コアの数と同じ数のジョブを作成することで機能します。これを行うコードは次のとおりです。

string NumberOfProcesses = Environment.GetEnvironmentVariable("NUMBER_OF_PROCESSORS");

このマシンは、Windows Server 2008R2HPCエディションを実行する64コアAMDOpteron6276(4x16コア)です。ここに問題があります。コマンドラインから次のようになります。

>echo %NUMBER_OF_PROCESSORS%
64

どちらが正しい。上記のコード行をC#で実行すると、32が得られます。Environments.ProcessorCountも32を示します。プロセッサ数の検出で見つけたコードブロックを試しましたが、同じ応答が得られます(31は実際には... 31が無料で、さらにコードが実行しているものの1つ)。

テストでは、実際に32コアを返していることが示されています。プログラムを実行すると、CPU使用率が50%であることがわかります。プログラムに64をハードコーディングすると、CPU使用率は100%になります。残念ながら、このプログラムはさまざまなハードウェアで実行できるため、ハードコーディングしておくことはできません。CPU-Zはそれぞれ8コアの4つの物理プロセッサを検出するため、AMDの設計と関係があるのではないかと思います。ただし、16個のスレッドを検出します。C#がハイパースレッディングかそのようなものだと思っているのだろうか。64コアすべてを正しく識別するためにどのように取得できるかについてのアイデアはありますか?

4

0 に答える 0