C# プログラム上でプロセッサ数やコア数などを調べる方法
2012年3月 C#のプログラム上から、物理プロセッサの数、論理プロセッサの数、コア数、ハイパースレッドの有無を調べる方法。 |
プロセッサの数について | ||||||||||||||||||||||||
Hyper-Threading Technology…ハイパー・スレッド。「HT」「HTテクノロジー」と略されることが多い。 「コア」はCPU機能の核となる部分です。マルチ・コアは複数個の物理プロセッサを1つのパッケージに詰め込んだものと見ることができます。 「ハイパー・スレッド」は1つのコアを2つに見せかける技術です。★印のプロセッサはどちらもOSからは「2個の論理プロセッサ」に見えますが、処理性能は異なります。★1は2つの処理を独立して同時進行できます。★2は2つの処理が見かけ上は同時進行しつつも、実際にはタイミングを見計らいながら1個のコアを使います。従って処理性能は★1の方が高いです。 |
コア数やHTの有無を調べる方法 | |
ソフトウェアの話。 マルチスレッドで処理をするアプリがあります。(論理)プロセッサが複数個あれば効率よく処理されます。プロセッサの個数はEnvironment.ProcessorCountで得ることができます。ただし、「プロセッサが2個ある」などと判明してもそれがコア数なのか、HTによる見かけ上の個数なのか、までは分かりません。 これらの区別はWin32_Processorクラスで調べられます。マネージコードから呼び出して使う例を以下に示します。WindowsXP/SP3以降で利用できます。XP/SP2以前だと、修正パッチを当てないと取得できないパラメータがあります。
ManagementClassクラスを使うにはプロジェクトの参照設定に「System.Management」を追加します。 ManagementClassを使った処理は時間がかかります。GetProcessorInfos()を呼び出して戻り値を得るまでに1秒くらいかかるかもしれません。プログラム開始時にバックグラウンドで呼び出しておくとよいと思います。 戻り値の型としてProcessorInfoクラスを作りました。物理プロセッサ数、論理プロセッサ数、コア数、が分かります。GetProcessorInfos()ではシステムに搭載された物理プロセッサごとにProcessorInfoのインスタンスを作るので、戻り値は配列になります。PCなら基本的に物理プロセッサが1個なので、長さ1の配列になります。 {論理プロセッサ数 = コア数}ならハイパースレッドなしのプロセッサです。{論理プロセッサ数 / 2 = コア数}ならハイパースレッドありのプロセッサです。 |
◆ ◆ ◆ |
Win32_Processorをマネージコードから呼び出してコア数を調べる、 というサンプルコードが見あたらなかったので作りました。 自分のプログラムで実際に利用しています。 |
(C) 『昼夜逆転』工作室 | [トップページへ戻る] |