ПРИВЕТ,
Если я выполню это на Dell T410, который имеет два четырехъядерных процессора Xeon E5530, я получу вывод, показанный ниже:
mov eax, 4
mov ebx, 0
mov ecx, 0
mov edx, 0
CPUID
; at this point eax=0x1c004121, ebx=0x1c0003f, ecx=0x3f, edx=0x0
Согласно Intel AP-485: «BIOS будет использовать эту функцию для определения количества ядер, реализованных в конкретном пакете физического процессора. Для этого BIOS должен сначала установить регистр EAX на 4, а регистр ECX на 0, прежде чем выполнять инструкцию CPUID. После выполнения инструкции CPUID (EAX [31:26] + 1) содержит количество ядер. "
Как видите, EAX [31:26] равен 7, поэтому в этом пакете 8 ядер. Но я знаю, что это только 4. Кто-нибудь может подсказать, как определить количество ядер в процессорах Intel, которое работает на E5530?
Между прочим, число логических процессоров составляет 16, что я ожидаю, так как этот процессор является многопоточным. Но опять же я знаю, что на самом деле у него всего 8 логических процессоров.
Если я выполняю инструкцию CPUID для всех поддерживаемых функций, я получаю:
cpuid function, eax, ebx, ecx, edx
0x0, 0xb, 0x756e6547, 0x6c65746e, 0x49656e69,
0x1, 0x106a5, 0x7100800, 0x9ce3bd, 0xbfebfbff,
0x2, 0x55035a01, 0xf0b2e4, 0x0, 0x9ca212c,
0x3, 0x0, 0x0, 0x0, 0x0,
0x4, 0x1c004121, 0x1c0003f, 0x3f, 0x0,
0x5, 0x40, 0x40, 0x3, 0x1120,
0x6, 0x3, 0x2, 0x1, 0x0,
0x7, 0x0, 0x0, 0x0, 0x0,
0x8, 0x0, 0x0, 0x0, 0x0,
0x9, 0x0, 0x0, 0x0, 0x0,
0xa, 0x7300403, 0x44, 0x0, 0x603,
0xb, 0x1, 0x2, 0x100, 0x7,
0x80000000, 0x80000008, 0x0, 0x0, 0x0,
0x80000001, 0x0, 0x0, 0x1, 0x28100000,
0x80000002, 0x65746e49, 0x2952286c, 0x6f655820, 0x2952286e,
0x80000003, 0x55504320, 0x20202020, 0x20202020, 0x45202020,
0x80000004, 0x30333535, 0x20402020, 0x30342e32, 0x7a4847,
0x80000005, 0x0, 0x0, 0x0, 0x0,
0x80000006, 0x0, 0x0, 0x1006040, 0x0,
0x80000007, 0x0, 0x0, 0x0, 0x100,
0x80000008, 0x3028, 0x0, 0x0, 0x0,