Почему 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/. Увы, эта более новая страница гораздо более сухая и, например, не отвечает на вопрос, который вы задали, тогда как старые разговоры...