概要


現システムのCPUの物理CPU数・ソケット数等を取得してファイルおよび画面に結果を表示するものである。
CPUの物理CPU数・ソケット数等を取得cpuid4(32/64bit)の改良版にあたる。
他のシステムで結果を保存すればインポートすることによりCPUIDの値を閲覧することができる。
本ソフトにはあらかじめいくつかのCPUのCPUID値をあらかじめ用意しているのでいろいろなCPUのCPUIDを閲覧することができる。
さらにVirtual Box用にCPUIDの値を変更するバッチファイルを作成することができる。バッチファイルを実行することによりゲストOSから見えるCPUIDの値を変えることができる。
VirutlBoxによるCPUIDのエミュレーション参照
なお本プログラムはC++ソースコード上でCPUIDを再現するものであり、CPUでサポートしていない命令をエミュレーションするものではない。
次項に本ソフトに付属するCPUID値を定義したCSVファイルの一覧を示す。

CPUID値を定義したCSVファイル名の一覧

CPUIDインポート用ファイル シグニチャ 開発コード プロセス 備考
Intel_DX4.csv 0x00480 600nm
MMX_Pentium.csv 0x00543 Tillamook 250nm
Pentium_2_Pentium_2_Xeon.csv 0x00652 Deschutes 250nm
Intel_Celeron.csv 0x00686 Coppermine-128 180nm
Intel_Celeron_2000MHz.csv 0x00f27 Northwood-128 130nm
Intel_Pentium_4_3200MHz.csv 0x00f62 Cedar Mill 65nm Pentium4 641
Intel_Pentium_4_3400MHz.csv 0x00f62 Cedar Mill 65nm Pentium4 651
Intel_Pentium_D_3400MHz.csv 0x00f65 Presler 65nm Pentium D945
Intel_Pentium_M_processor_1600MHz.csv 0x006d8 Dothan 90nm
Intel_Celeron_450_2200MHz.csv 0x00661 Conroe-L 65nm
Intel_Core_2_6320_1860MHz.csv 0x006f6 Conroe 65nm
Intel_Core_2_Duo_E6850_3000MHz.csv 0x006fb Conroe 65nm
Intel_Core_2_Duo_P8400_2260MHz.csv 0x10676 Penryn 45nm
Intel_Core_2_Duo_P8700_2530MHz.csv 0x1067a Penryn 45nm
Intel_Core_2_Quad_Q8200_2330MHz.csv 0x10677 Yorkfield 45nm
Intel_Celeron_430_1800MHz.csv 0x10661 Conroe-L 65nm
Intel_Celeron_925_2300MHz.csv 0x1067A Penryn 45nm
Intel_Core_i7_870_2930MHz.csv 0x106e5 Lynnfield 45nm
Intel_Atom_D2701_2130MHz.csv 0x30661 Cedarview 32nm
Intel_Core_i3_2100_3100MHz.csv 0x206a7 Sandy Bridge 32nm
Intel_Core_i3_M_370_2400MHz.csv 0x20655 Arrandale 32nm
Intel_Core_i5_2400_3100MHz.csv 0x206a7 Sandy Bridge 32nm
Intel_Core_i7_2600_3400MHz.csv 0x206a7 Sandy Bridge 32nm
Intel_Core_i7_3820_3600MHz.csv 0x206d7 Sandy Bridge-E 32nm
Intel_Core_i5_3210M_2500MHz.csv 0x306a9 Ivy Bridge 22nm
Intel_Core_i5_3230M_2600MHz.csv 0x306a9 Ivy Bridge 22nm
Intel_Core_i7_3770_3400MHz.csv 0x306a9 Ivy Bridge 22nm
Intel_Core_i7_4770_3400MHz.csv 0x306c3 Haswell 22nm
Intel_Core_i7_4790_3600MHz.csv 0x306c3 Haswell 22nm
Intel_Xeon_E5_2699_v3_2300MHz.csv 0x306f2 Haswell-EP 22nm
Intel_Core_i7_5775C_3300MHz.csv 0x40671 Broadwell-H 14nm
Intel_Core_i7_6700K_4000MHz.csv 0x506e3 Skylake-S 14nm
Intel_Celeron_G1620_2700MHz.csv 0x306a9 Ivy Bridge 22nm
Intel Atom Z3775.csv 0x30678 Bay Trail-T 22nm
Intel_Core_M_5Y71_1200MHz.csv 0x306D4 Broadwell-Y 14nm
※シグニチャ CPUID命令でファンクション1の時のEAXの値

機能一覧

現システムのCPUのCPUIDの表示

実行しているWindows上の現システムのCPUのCPUIDを表示します。

CPUIDVIEW.CPPのコメントアウトしているヘッダーファイルを有効にしてCPUIDのエミュレーション

本プログラムでエクスポートを選択するとCPUIDをクラスで記述したヘッダーファイルを出力するので、そのヘッダファイルを他のプログラムにインクルードして__cpuid等をマクロで置き換えることにより他CPUから抽出したCPUIDを再現することができる。
C++のソース上で__cpuid関数等をマクロで置き換えることによりCPUIDの結果をシミュレーションすることができる。
また、スレッドに割り当てるCPUを固定するSetThreadAffinityMask API(マクロによる置き換え)をエミュレーションするため、CPUによりCPUIDの戻り値が異なるEAX=0x1とEAX=0xBのケースにおいても、正常に動作する。
エミュレーション用のヘッダーファイルはcsvファイルと同じCPU分ダウンロードファイルに添付しています。

表示しているCPUのCPUIDを一覧表示

表示しているCPUのCPUIDをヘッダーファイル・概要ファイルとして保存

表示しているCPUのCPUIDをCSVファイルとして保存

CPUIDの一覧をCSVファイルとして保存します。このCSVファイルを使用すれば他のマシーンでCPUIDの値を確認したりVirtualBox上でCPUIDの再現ができます。

前項で作成したCSVファイルをインポートしCPUIDを表示

表示しているCPUのCPUIDをVirtualBoxのゲストマシーンのCPUIDを設定するバッチファイルとして保存

保存されたバッチファイルを実行するとVirtualBoxのゲストマシーンのCPUIDを変更することができます。
VirutlBoxによるCPUIDのエミュレーション参照
CSVファイルと同じCPUについてダウンロードファイルにバッチファイルを添付しています。

テスト環境

コンパイラ

Visual C++ 97/2005/2008/2010/2013 32/64bit マルチバイト/UNICODE

実行環境

以下の環境で動作確認をしました。
HITACHI FLORA 270 PC-5NH02-YA5LA MMX Pentium 166MHz with Windows 95 Visual C++ 97で作成した32bit実行ファイル
HITACHI FLORA 270GX PC7NW1-GDE27H420Celeron 600MHz with Windows 98 SE Visual C++ 97で作成した32bit実行ファイル
HITACHI FLORA 270GX PC7NW1-GDE27H420Celeron 600MHz with Windows 2000 Visual C++ 2005で作成した32bit実行ファイル
HP ProBook5220m Core i3-M370 with Windows XP 32bit Visual C++ 2013で作成した32bit実行ファイル
自作PC Core i7-3820 with VirtualBox上のWindows Vista 32bit Visual C++ 2013で作成した32bit実行ファイル
自作PC Core i7-3820 with Windows 7 64bit Visual C++ 2013で作成した32bit/64bit実行ファイル
HP ProBook5220m Core i3-M370 with Windows 8.1 64bit Visual C++ 2013で作成した32bit実行ファイル
HP ProBook5220m Core i3-M370 with Windows 10 64bit Visual C++ 2013で作成した32bit実行ファイル
lenovo YOGA PRO3 Core M-5Y71 with Windows 10 64bit Visual C++ 2013で作成した32bit実行ファイル
ASUS Transbook T90Chi Atom Z3775 with Windows 10 32bit Visual C++ 2013で作成した32bit実行ファイル
DELL PowerEdge T110 II Celeron G1620 with Windows 2012 Server Visual C++ 2013で作成した32bit実行ファイル

変更履歴

2015/11/02cpuid4最終バージョン
2015/11/22バグフィクッスおよび再ビルドなしにCPUの切り替えができるようにインポート機能を追加。VirtualBox用のバッチファイル作成機能の追加
CPUIDの基本ファンクション0x14までのサブファンクションに対応できるように修正
出力ファイルをUNICODE/SJISからSJISに統一。
インポート機能の追加に伴い各種クラスで動的に確保したメモリの解放を追加
CPUIDの基本ファンクションが1(Pentiumなど)までや2(Pentium 2など)までのCPUに対応できるようにAPICの取得及びキャッシュの取得方法を修正(80486まで対応可能)
ブランドストリングをサポートしていないPentium3以前の世代に合わせてブランドID及びシグネチャからCPU名を取得できるように修正(80486まで対応可能)
APICのパッケージ・コア・スレッドのビット幅の計算にバグがあったので修正
4次キャッシュをサポート
2016年01月16日(土)Celeron 430,Celeron 925,i7-4790のエミュレーションファイルを追加
2016年07月18日(月)Celeron G1620,Core M-5Y71,Atom Z3775の追加

プログラムソースの概要

ソースファイルと実行ファイルのダウンロード

ダウンロード cpuidview3.zip(549k)
エミュレーションをしない場合に必要なソースファイルは、cpuidview.cpp cpu.h cpp.c resource.h undervc2008.h resource.rcです。
cpuidview.cppに最初に実行されるWinMain関数が含まれています。
エミュレーションをする場合は、該当するCPU名のヘッダーファイルが必要となります。
実行ファイルは、以下の通りです。
実行ファイルビルド実行OS
cpuidview.exeVisual C++ 2013XP以上
cpuidview2010.exeVisual C++ 2010XP以上
cpuidview2008.exeVisual C++ 2008XP以上
cpuidview2005.exeVisual C++ 20052000以上
cpuidview0097.exeVisual C++ 9795以上
ZIPファイルに含まれるファイル
│  cpu.cpp
│  cpu.h
│  cpuidview.cpp
│  cpuidview.exe
│  cpuidview0097.exe
│  cpuidview2005.exe
│  cpuidview2008.exe
│  cpuidview2010.exe
│  resource.h
│  resource.rc
│  undervc2008.h
└─emu
        Intel Celeron_cpuid.txt
        Intel Celeron_emu.h
        Intel Celeron_summary.txt
              ~
        Intel_Xeon_E5_2699_v3_2300MHz.bat
        Intel_Xeon_E5_2699_v3_2300MHz.csv
        Intel_Xeon_E5_2699_v3_2300MHz_cpuid.txt
        Intel_Xeon_E5_2699_v3_2300MHz_emu.h
        Intel_Xeon_E5_2699_v3_2300MHz_summary.txt