Почему Hyper-Threading сообщается как поддерживаемый на процессорах без него?

Я пытаюсь собрать системную информацию и заметил следующее на Intel Xeon E5420:

После выполнения CPUID(EAX=1), EDX[28] установлен, что указывает на поддержку Hyper-Threading, несмотря на то, что процессор указан на веб-сайте Intel как не поддерживающий Hyper-Threading ( ark.intel.com).

У кого-нибудь есть объяснение этому?

2 ответа

Решение

Вот определение этого бита в соответствии с Руководством Intel для разработчиков:

Максимальное поле зарезервировано для идентификаторов APIC. Значение 0 для HTT указывает, что в пакете имеется только один логический процессор, и программное обеспечение должно предполагать, что зарезервирован только один идентификатор APIC. Значение 1 для HTT указывает значение в CPUID.1.EBX[23:16] (Максимальное количество адресуемых идентификаторов для логических процессоров в этом пакете), действительное для пакета.

В главе 8 тома 3A руководства описывается, как правильно определить аппаратную многопоточность.

Вот ссылка:

http://download.intel.com/products/processor/manual/325462.pdf

В докладе Intel есть полуофициальное объяснение https://software.intel.com/en-us/articles/hyper-threading-technology-and-multi-core-processor-detection

По сути, после того, как Intel ввела SMT/ Hyperthreading в финальных версиях Pentium 4, они создали Pentium D, который, будучи многоядерным, считался эволюцией модели Hyperthreading, поскольку ядро ​​имеет большую независимость от другого ядра, чем модули SMT, относительно друг друга, и, следовательно, многоядерный работает лучше, чем SMT при том же количестве потоков. Поэтому они использовали один и тот же бит для обозначения SMT/ гиперпоточности или многоядерности по этой причине, то есть многоядерность рассматривалась как улучшенная форма гиперпоточности. Intel Xeon E5420, о котором вы спрашиваете, является многоядерным процессором, поэтому бит установлен.

Конечно, как только вы можете использовать как Hyper-Threading, так и Multi-Core в одном и том же пакете, иногда необходимо их разделять, например, потому что вы предпочитаете планировать новый поток на незагруженном ядре, а не на другой половине с многопоточностью. уже загруженного ядра. Таким образом, новые биты cpuid (или, скорее, листья) были в конечном итоге введены с целью описания комбинированной топологии SMT и многоядерности. Самая последняя из этих новых функций cpuid для запроса топологии процессора - это лист EAX=0xB.

Кроме того, вы не должны использовать алгоритм перечисления топологии, приведенный в этом старом докладе Intel для процессоров, сделанном в 2010 году и после него, поскольку он будет давать неверное / завышенное число ядер. Вместо этого используйте обновленный метод, указанный на https://software.intel.com/en-us/articles/intel-64-architecture-processor-topology-enumeration/. Увы, эта более новая страница гораздо более сухая и, например, не отвечает на вопрос, который вы задали, тогда как старые разговоры...

Другие вопросы по тегам