В разговоре с сетевым администратором я упомянул, что моя машина была двухъядерной. Он сказал мне, что это не так. Я открыл диспетчер задач, перешел на вкладку производительности и показал ему, что есть два отдельных графика использования процессора. У меня дома есть четырехъядерный компьютер с четырьмя графиками. Он сказал, что на этой конкретной машине есть два графика из-за гиперпоточности. Раньше у меня был сверхпоточный процессор Pentium 4, но я так и не понял, что это значит. Так в чем же разница между гиперпоточностью и двухъядерностью? И как вы говорите, какой у вас есть?
источник
Гиперпоточность - это то место, где ваш процессор претендует на то, чтобы иметь 2 физических ядра процессора, но при этом имеет только 1 и немного лишнего мусора.
Смысл гиперпоточности заключается в том, что во многих случаях, когда вы выполняете код в процессоре, некоторые части процессора простаивают. Включая дополнительный набор регистров ЦП, процессор может действовать так, как если бы он имел два ядра, и, таким образом, использовать все части процессора параллельно. Когда оба ядра должны использовать один компонент процессора, тогда одно ядро, конечно же, ждет. Именно поэтому он не может заменить двухъядерные и подобные процессоры.
Смотрите также: этот вопрос
источник
Гиперпоточность - более дешевая и медленная альтернатива двухъядерным процессорам.
Intel Руководство Volume 3 Система Руководство по программированию - 325384-056US сентября 2015 8,7 «INTEL Гиперпоточность TECHNOLOGY АРХИТЕКТУРА» описывает HT кратко. Он содержит следующую диаграмму:
TODO на сколько процентов медленнее в среднем в реальных приложениях?
Гиперпоточность возможна, потому что современные ядра с одним ЦП уже выполняют несколько инструкций одновременно с конвейером команд https://en.wikipedia.org/wiki/Instruction_pipelining
Конвейер команд представляет собой разделение функций внутри одного ядра, чтобы гарантировать, что каждая часть схемы используется в любой момент времени: чтение памяти, декодирование инструкций, выполнение инструкций и т. Д.
Гиперпоточность далее разделяет функции, используя:
единый бэкэнд, который на самом деле выполняет инструкции со своим конвейером.
Двухъядерный имеет два бэкэнда, что объясняет большую стоимость и производительность.
два внешних интерфейса, которые принимают два потока инструкций и упорядочивают их таким образом, чтобы максимально использовать конвейерную обработку единого внутреннего интерфейса, избегая опасностей .
Двухъядерный также будет иметь 2 фронтэнда, по одному на каждый бэкэнд.
Существуют крайние случаи, когда переупорядочение инструкций не приносит никакой пользы, делая гиперпоточность бесполезной. Но это дает значительное улучшение в среднем.
Два гиперпотока в одном ядре совместно используют дополнительные уровни кэша (TODO сколько? L1?), Чем два разных ядра, которые разделяют только L3, см .:
Интерфейс, который каждая гиперпотока предоставляет операционной системе, подобен интерфейсу реального ядра, и обоими можно управлять отдельно. Так
cat /proc/cpuinfo
показывает мне 4 процессора, хотя у меня только 2 ядра с 2-мя гиперпотоками в каждом.Однако операционные системы могут воспользоваться преимуществами знания, какие гиперпотоки находятся на одном и том же ядре, для запуска нескольких потоков данной программы на одном ядре, что может улучшить использование кэша.
Это видео LinusTechTips содержит безрассудное нетехническое объяснение: https://www.youtube.com/watch?v=wnS50lJicXc
источник