Поскольку прошло почти неделю, и никто не смог ответить на этот вопрос (вероятно, из-за праздников), я попытаюсь ответить на это в любом случае.
Я думаю, что да. Возможно, вам понадобится позвонить CPUID
на каждое ядро. Одной из причин этого является то, что не все (даже x86) системы сегодня однородны.
Например, я прочитал на форуме по разгону (я не могу найти ссылку), что можно смешать две модели разных моделей процессоров на некоторых двухъядерных серверных платах. У человека была двойная розетка 1366 с двумя разными скоростными процессорами. (и другая модель #s)
Так что в этом случае вызов CPUID
будет зависеть от того, какой процессор был включен, поэтому вам нужно будет вызвать его, как только каждый процессор получит всю информацию.
В руководствах одной из моих материнских плат-серверов также указано, что вам разрешено смешивать процессоры разных моделей (с определенными ограничениями). И, конечно же, можно смешать две разные модели steppings той же модели процессора.
Эта причина в одиночку (гетерогенная топология), уже причина нужно вызвать CPUID
на каждом ядре.
Я полагаю, что одна ситуация, когда CPUID может действовать необычно, - это AMD Fusion, которая содержит как процессор, так и графический процессор на одном чипе. Для получения дополнительной информации вы должны посмотреть документацию. Помимо этого, я не понимаю, почему в каком-либо внутреннем ядре процессора будет отображаться другой CPUID, чем другой ядро. – Polynomial
Помимо данного ответа, еще одна причина для вызова CPUID несколько раз - это использование команды rdtsc для измерения производительности. Обычно вы используете cpuid перед тем, как cpuid является инструкцией «сериализации» и предотвращает конвейерную обработку, но cpuid также имеет неприятную привычку принимать больше времени, чтобы выполнить первые несколько раз, когда это называется (согласно старому руководству intel на rdtsc), поэтому это типично для вызовите его несколько раз при запуске, чтобы убедиться, что он ускорен, а затем используйте его перед всеми вызовами rdtsc. –