C# でCPU を読みだす。

C#でCPUのプロセッサ情報を読み出し、それを表示してみましょう。

using System.Runtime.Intrinsics.X86;

namespace ConsoleApp
{
    class Program
    {
        static void ptintRegs(int fNo, int[] regs)
        {
            string[] regName = { "EAX", "EBX", "ECX", "EDX" };

            
            Console.Write("  {0:X8},", fNo);
            for(int i = 0; i < regs.Length; i++)
            {
                Console.Write(" {0}:{1:X8}", regName[i], regs[i]);
            }
            Console.WriteLine("");
        }

        static void Main(string[] args)
        {
            int nMax;
            int[] regs = new int[4];

            Console.WriteLine("基本プロセッサ情報");
            (nMax, _, _, _) = X86Base.CpuId(0, 0);
            for (int i=0; i<nMax; i++)
            {
                (regs[0], regs[1], regs[2], regs[3]) = X86Base.CpuId(i, 0);
                ptintRegs(i, regs);
            }

            Console.WriteLine("拡張機能プロセッサ情報");
            (nMax, _, _, _) = X86Base.CpuId(int.MinValue, 0);
            for (uint i = 0x80000000; i <= (uint)nMax; ++i)
            {
                (regs[0], regs[1], regs[2], regs[3]) = X86Base.CpuId((int)i, 0);
                ptintRegs((int)i, regs);
            }
        }
    }
}

実行例1:

[Intel(R) Core(TM) i5-4300U CPU @ 1.90GHz]で実行
基本プロセッサ情報
00000000, EAX: 0000000D EBX: 756E6547 ECX: 6C65746E EDX:49656E69
00000001, EAX: 00040651 EBX: 03100800 ECX: 7FFAFBFF EDX:BFEBFBFF
00000002, EAX: 76036301 EBX: 00F0B5FF ECX:00000000 EDX: 00C10000
00000003, EAX: 00000000 EBX: 00000000 ECX: 00000000 EDX: 00000000
00000004, EAX: 1C004121 EBX:01C0003F ECX:0000003F EDX: 00000000
00000005, EAX: 00000040 EBX: 00000040 ECX: 00000003 EDX: 11142120
00000006, EAX: 00000077 EBX: 00000002 ECX: 00000009 EDX: 00000000
00000007, EAX: 00000000 EBX: 000027AB ECX:00000000 EDX: 9C000400
00000008, EAX: 00000000 EBX: 00000000 ECX: 00000000 EDX: 00000000
00000009, EAX: 00000000 EBX: 00000000 ECX: 00000000 EDX: 00000000
0000000A, EAX: 07300403 EBX: 00000000 ECX: 00000000 EDX: 00000603
0000000B, EAX: 00000001 EBX: 00000002 ECX: 00000100 EDX: 00000003
0000000C, EAX: 00000000 EBX: 00000000 ECX: 00000000 EDX: 00000000
拡張機能プロセッサ情報
80000000, EAX: 80000008 EBX: 00000000 ECX: 00000000 EDX: 00000000
80000001, EAX: 00000000 EBX: 00000000 ECX: 00000021 EDX: 2C100800
80000002, EAX: 65746E49 EBX: 2952286C ECX:726F4320 EDX: 4D542865
80000003, EAX: 35692029 EBX: 3033342D ECX: 43205530 EDX: 40205550
80000004, EAX: 392E3120 EBX: 7A484730 ECX:00000000 EDX: 00000000
80000005, EAX: 00000000 EBX: 00000000 ECX: 00000000 EDX: 00000000
80000006, EAX: 00000000 EBX: 00000000 ECX: 01006040 EDX: 00000000
80000007, EAX: 00000000 EBX: 00000000 ECX: 00000000 EDX: 00000100
80000008, EAX: 00003027 EBX: 00000000 ECX: 00000000 EDX: 00000000

実行例2:

[Intel(R) Core(TM) i5-6600 CPU @ 3.30GHzで実行]
基本プロセッサ情報
00000000, EAX:00000016 EBX:756E6547 ECX:6C65746E EDX:49656E69
00000001, EAX:000506E3 EBX:04100800 ECX:7FFAFBFF EDX:BFEBFBFF
00000002, EAX:76036301 EBX:00F0B6FF ECX:00000000 EDX:00C30000
00000003, EAX:00000000 EBX:00000000 ECX:00000000 EDX:00000000
00000004, EAX:1C004121 EBX:01C0003F ECX:0000003F EDX:00000000
00000005, EAX:00000040 EBX:00000040 ECX:00000003 EDX:00142120
00000006, EAX:000027F7 EBX:00000002 ECX:00000009 EDX:00000000
00000007, EAX:00000000 EBX:029C6FBF ECX:00000000 EDX:9C002400
00000008, EAX:00000000 EBX:00000000 ECX:00000000 EDX:00000000
00000009, EAX:00000000 EBX:00000000 ECX:00000000 EDX:00000000
0000000A, EAX:07300804 EBX:00000000 ECX:00000000 EDX:00000603
0000000B, EAX:00000001 EBX:00000001 ECX:00000100 EDX:00000004
0000000C, EAX:00000000 EBX:00000000 ECX:00000000 EDX:00000000
0000000D, EAX:0000001F EBX:00000440 ECX:00000440 EDX:00000000
0000000E, EAX:00000000 EBX:00000000 ECX:00000000 EDX:00000000
0000000F, EAX:00000000 EBX:00000000 ECX:00000000 EDX:00000000
00000010, EAX:00000000 EBX:00000000 ECX:00000000 EDX:00000000
00000011, EAX:00000000 EBX:00000000 ECX:00000000 EDX:00000000
00000012, EAX:00000000 EBX:00000000 ECX:00000000 EDX:00000000
00000013, EAX:00000000 EBX:00000000 ECX:00000000 EDX:00000000
00000014, EAX:00000001 EBX:0000000F ECX:00000007 EDX:00000000
00000015, EAX:00000002 EBX:00000114 ECX:00000000 EDX:00000000
拡張機能プロセッサ情報
80000000, EAX:80000008 EBX:00000000 ECX:00000000 EDX:00000000
80000001, EAX:00000000 EBX:00000000 ECX:00000121 EDX:2C100800
80000002, EAX:65746E49 EBX:2952286C ECX:726F4320 EDX:4D542865
80000003, EAX:35692029 EBX:3036362D ECX:50432030 EDX:20402055
80000004, EAX:30332E33 EBX:007A4847 ECX:00000000 EDX:00000000
80000005, EAX:00000000 EBX:00000000 ECX:00000000 EDX:00000000
80000006, EAX:00000000 EBX:00000000 ECX:01006040 EDX:00000000
80000007, EAX:00000000 EBX:00000000 ECX:00000000 EDX:00000100
80000008, EAX:00003027 EBX:00000000 ECX:00000000 EDX:00000000