わかりましたので、 In C# GetEnvironmentVariable("NUMBER_OF_PROCESSORS") returns the wrong numberに投稿し、 C#で正しいコア数を取得する方法を尋ねました。一部の親切な人々は、同様の質問が行われたいくつかの質問に私を案内しましたが、私はすでにそれらの解決策を試しました. その後、私の質問は別の質問と同じであるとして閉じられました。これは本当ですが、そこに示されている解決策は機能しませんでした。そのため、他のソリューションが機能しなかったことに誰かが気付くのを助けることができることを期待して、別のものを開きます。
その質問は、.NET/C# 経由で CPU コアの数を見つける方法でしたか? WMI を使用して正しいコア数を取得しようとしました。さて、そこに与えられたコードからの出力は次のとおりです。
Number Of Cores: 32
Number Of Logical Processors: 32
Number Of Physical Processors: 4
私の最後の質問によると、マシンは Windows Server 2008 R2 HPC エディションを実行する 64 コア AMD Opteron 6276 (4x16 コア) です。
私が何をしていても、Windows は 64 コアが利用可能であるにもかかわらず、常に 32 コアを返すようです。マシンが 32 コアしか使用していないことを確認しました。64 コアをハードコーディングすると、マシンはそれらすべてを使用します。AMD CPU の検出方法に問題があるのではないかと考えています。
参考までに、最後の質問を読んでいない場合は、コマンド ラインで echo %NUMBER_OF_PROCESSORS" と入力すると、64 が返されます。プログラミング環境では実行されません。
ありがとう、ジャスティン
更新: PROCESSOR_ARCHITECTURE を出力すると、コマンド ラインからは AMD64 が返されますが、プログラムからは x86 が返されます。このプログラムは、64 ビット ハードウェア上で実行される 32 ビットです。64 ビットにコンパイルするように求められましたが、それでも 32 コアが表示されます。