В чем разница между гиперпоточностью и несколькими ядрами?

24493
Josh Stodola

В разговоре с сетевым администратором я упомянул, что моя машина была двухъядерной. Он сказал мне, что это не так. Я поднял диспетчер задач, перешел на вкладку производительности и показал ему, что есть два отдельных графика использования процессора. У меня дома есть четырехъядерный компьютер с четырьмя графиками. Он сказал, что на этой конкретной машине есть два графика из-за гиперпоточности. Раньше у меня был сверхпоточный процессор Pentium 4, но я так и не понял, что это значит. Так в чем же разница между гиперпоточностью и двухъядерностью? И как вы говорите, какой у вас есть?

38

3 ответа на вопрос

19
rob

Гиперпоточность предоставляет несколько логических ядер для одного физического ядра ЦП. Проще говоря, гиперпоточность делает переключение контекста более эффективным для каждого ядра ЦП.

С другой стороны, двухъядерные чипы на самом деле имеют два физических ядра ЦП, которые могут одновременно выполнять разные процессы.

Существуют и другие многоядерные чипы, которые имеют более двух ядер, и, как отметил Свиш, последние предложения Intel по многоядерности также поддерживают Hyper-Threading на всех ядрах.

Вы можете использовать утилиту идентификации CPU, например CPU-Z, чтобы определить, сколько у вас ядер. Как вы можете видеть в нижней части скриншота, процессор в этом случае имеет 2 физических ядра. Если количество потоков превышает количество ядер, включается гиперпоточность. На сегодняшний день все ориентированные на потребителя CPU с Hyper-Threading имеют по 2 потока на ядро, поэтому, если HT включен, количество потоков будет в два раза больше количества ядер.

Если у вас есть процессор Intel, вы можете вместо этого загрузить утилиту Intel ID процессора .

И многоядерные чипы, которые поддерживают гиперпоточность, так что вы получаете вдвое больше логических ядер. Svish 14 лет назад 0
Thank! How do I tell (from within the OS) which type of CPU I have? Josh Stodola 14 лет назад 0
UltraSparc T2 + имеет 8 ядер, каждый из которых поддерживает 8 потоков, что делает его 64 виртуальными процессорами на одном чипе: http://en.wikipedia.org/wiki/UltraSPARC_T2 jlliagre 14 лет назад 2
Способ узнать, какой у вас процессор, зависит от операционной системы, которую вы используете. jlliagre 14 лет назад 0
@jilliagre: хорошо! rob 14 лет назад 0
@JoshStodola: Yikes! Извините, я не видел ваш комментарий раньше. Я добавил информацию об идентификации функций вашего процессора. rob 12 лет назад 0
15
Earlz

Гиперпоточность - это то место, где ваш процессор претендует на то, чтобы иметь 2 физических ядра процессора, но при этом имеет только 1 и немного лишнего мусора.

Смысл гиперпоточности заключается в том, что во многих случаях, когда вы выполняете код в процессоре, некоторые части процессора простаивают. Включая дополнительный набор регистров ЦП, процессор может действовать так, как будто он имеет два ядра, и, следовательно, использовать все части процессора параллельно. Когда двум ядрам необходимо использовать один компонент процессора, одно ядро, конечно же, ждет. Именно поэтому он не может заменить двухъядерные и подобные процессоры.

Смотрите также: Этот вопрос

4
Ciro Santilli 新疆改造中心 六四事件 法轮功

Hyperthreading is a cheaper and slower alternative to having dual-cores

TODO it is slower by how much percent in average in real applications?

Hyperthreading is possible because modern single CPUs cores already execute multiple instructions at once with the instruction pipeline https://en.wikipedia.org/wiki/Instruction_pipelining

The instruction pipeline is a separation of functions inside of a single core to ensure that each part of the circuit is used at any given time: reading memory, decoding instructions, executing instructions, etc.

Hyperthreading separates functions further by using:

  • a single backend, which actually runs the instructions with its pipeline.

    Dual core has two backends, which explains the greater cost and performance.

  • two front-ends, which take two streams of instructions and order them in a way to maximize pipelining usage of the single backend by avoiding hazards.

    Dual core would also have 2 front-ends, one for each backend.

    There are edge cases where instruction reordering produces no benefit, making hyperthreading useless. But it produces a significant improvement in average.

Two hyperthreads in a single core share further cache levels (TODO how many? L1?) than two different cores, which share only L3: https://stackoverflow.com/questions/944966/cache-memories-in-multicore-cpus

The interface that each hyperthread exposes to the operating system is similar to that of an actual core, and both can be controlled separately. Thus cat /proc/cpuinfo shows me 4 processors, even though I only have 2 cores with 2 hyperthreads each.

Operating systems can however take advantage of knowing which hyperthreads are on the same core to run multiple threads of a given program on a single core, which might improve cache usage.

This LinusTechTips video contains a light-hearted non-technical explanation: https://www.youtube.com/watch?v=wnS50lJicXc

The Intel Manual Volume 3 System Programming Guide - 325384-056US September 2015 8.7 "INTEL HYPER-THREADING TECHNOLOGY ARCHITECTURE" describes HT briefly. It contains the following diagram:

enter image description here

Собираетесь ли вы ответить на ваши вопросы "TODO"? pacoverflow 7 лет назад 1
@pacoverflow, если я когда-нибудь узнаю ответ, или если кто-то отредактирует ответ для меня :-) Ciro Santilli 新疆改造中心 六四事件 法轮功 7 лет назад 1

Похожие вопросы