Интересный вопрос - к сожалению, у меня нет i7, чтобы играть с ним, поэтому я могу только догадываться здесь.
Может быть полезно взглянуть на эту статью - хотя в принципе ваш подход кажется правильным, в них изложено несколько предостережений. Может быть, прочитайте и посмотрите, может ли на каком-то этапе ваши предположения могут быть неверными. Они по существу используют CPUID.1.EBX [23:16] (max # log процессоров в физическом пакете), CPUID.4.EAX [31:26] +1 (max # ядер в физическом пакете) и CPUID.4 .EAX [25:14] +1 (максимальное количество процессоров журналов в физическом пакете, совместно использующих кэш целевого уровня), чтобы вывести топологию процессора - что соответствует тому, что вы делаете.
Во-вторых, в качестве альтернативы, на процессоре, который поддерживает функцию CPUID EAX = 0Bh (см. Документация Intel здесь ), вы можете использовать эту функцию вместо того, чтобы получить нужные спецификации. Может быть, сравнение результатов двух подходов может быть осветительным?
- Edit--
Это - очень полезная статья, которая охватывает оба подхода, описанных выше. По сути, я понимаю, что на i7 CPUID.0B является предпочтительным вариантом.