В разговоре с сетевым администратором я упомянул, что моя машина была двухъядерной. Он сказал мне, что это не так. Я открыл диспетчер задач, перешел на вкладку производительности и показал ему, что есть два отдельных графика использования процессора. У меня дома есть четырехъядерный компьютер с четырьмя графиками. Он сказал, что на этой конкретной машине есть два графика из-за гиперпоточности. Раньше у меня был сверхпоточный процессор Pentium 4, но я так и не понял, что это значит. Так в чем же разница между гиперпоточностью и двухъядерностью? И как вы говорите, какой у вас есть?
3 ответа
Гиперпоточность предоставляет несколько логических ядер для одного физического ядра ЦП. Проще говоря, гиперпоточность делает переключение контекста более эффективным для каждого ядра ЦП.
С другой стороны, двухъядерные чипы на самом деле имеют два физических ядра ЦП, которые могут одновременно выполнять разные процессы.
Есть и другие многоядерные чипы, которые имеют более двух ядер, и, как отметил Свиш, последние предложения Intel по многоядерности также поддерживают Hyper-Threading на всех ядрах.
Вы можете использовать утилиту идентификации CPU, такую как CPU-Z, чтобы определить, сколько у вас ядер. Как вы можете видеть в нижней части скриншота, процессор в этом случае имеет 2 физических ядра. Если число потоков больше, чем количество ядер, включается гиперпоточность. На сегодняшний день все ориентированные на потребителя CPU с Hyper-Threading имеют по 2 потока на ядро, поэтому, если HT включен, количество потоков будет в два раза больше количества ядер.
Если у вас есть процессор Intel, вы можете вместо этого загрузить утилиту Intel ID процессора .
Гиперпоточность - это то место, где ваш процессор претендует на то, чтобы иметь 2 физических ядра процессора, но при этом имеет только 1 и немного лишнего мусора.
Смысл гиперпоточности заключается в том, что во многих случаях, когда вы выполняете код в процессоре, некоторые части процессора простаивают. Включая дополнительный набор регистров ЦП, процессор может действовать так, как будто он имеет два ядра, и, следовательно, использовать все части процессора параллельно. Когда двум ядрам необходимо использовать один компонент процессора, одно ядро, конечно же, ждет. Именно поэтому он не может заменить двухъядерные и подобные процессоры.
Смотрите также: Этот вопрос
Гиперпоточность - более дешевая и медленная альтернатива двухъядерным процессорам.
TODO на сколько процентов медленнее в среднем в реальных приложениях?
Гиперпоточность возможна, потому что современные ядра с одним ЦП уже выполняют несколько инструкций одновременно с конвейером команд https://en.wikipedia.org/wiki/Instruction_pipelining
Конвейер команд представляет собой разделение функций внутри одного ядра, чтобы гарантировать, что каждая часть схемы используется в любой момент времени: чтение памяти, декодирование инструкций, выполнение инструкций и т.д.
Гиперпоточность далее разделяет функции, используя:
единый бэкэнд, который фактически выполняет инструкции со своим конвейером.
Двухъядерный имеет два бэкэнда, что объясняет большую стоимость и производительность.
два внешних интерфейса, которые принимают два потока инструкций и упорядочивают их таким образом, чтобы максимально использовать конвейерную обработку единого внутреннего интерфейса, избегая опасностей.
Двухъядерный также будет иметь 2 фронтэнда, по одному на каждый бэкэнд.
Есть крайние случаи, когда переупорядочение инструкций не приносит никакой пользы, делая гиперпоточность бесполезной. Но это дает значительное улучшение в среднем.
Два гиперпотока в одном ядре совместно используют дополнительные уровни кэша (TODO сколько? L1?) чем два разных ядра, которые разделяют только L3, см:
- https://stackoverflow.com/questions/4802565/multiple-threads-and-cpu-cache/54018751#54018751
- hhttps://stackoverflow.com/questions/944966/how-are-cache-memories-shared-in-multicore-intel-cpus/33510874#33510874
Интерфейс, который каждая гиперпотока предоставляет операционной системе, подобен интерфейсу реального ядра, и обоими можно управлять отдельно. Таким образом, cat /proc/cpuinfo
показывает мне 4 процессора, хотя у меня только 2 ядра с 2 гиперпотоками в каждом.
Однако операционные системы могут воспользоваться преимуществами знания того, какие гиперпотоки находятся на одном и том же ядре, для запуска нескольких потоков данной программы на одном ядре, что может улучшить использование кэша.
Это видео LinusTechTips содержит беззаботное нетехническое объяснение: https://www.youtube.com/watch?v=wnS50lJicXc
Руководство по системному программированию Intel Руководство пользователя, том 3 - 325384-056RU сентябрь 2015 г. 8.7 «Архитектура INTEL HYPER-THREADING TECHNOLOGY» кратко описывает HT. Он содержит следующую диаграмму: