O manual Guia do usuário técnico da Intel Hyper-Threading Technology contém algumas dicas sobre o porquê A Intel não tentou mais de dois threads por núcleo em seus processadores de consumo, o que ele fez em algumas CPUs do servidor.
Ao explicar a tecnologia Hyper-Threading, diz:
Each logical processor
- Has its own architecture state
- Executes its own code stream concurrently
- Can be interrupted and halted independently
The two logical processors share the same
- Execution engine and the caches
- Firmware and system bus interface
A parte importante é que os dois processadores lógicos compartilham o mesmo Mecanismo de execução, o que significa que as unidades que compõem o núcleo não são duplicado. Uma vez, por exemplo, a unidade aritmética é usada por um thread, não pode ser usado pelo outro segmento. Isso evita o paralelismo total, portanto, não permite que dois encadeamentos sejam executados em instruções paralelas do mesmo tipo - é preciso esperar pela outra para terminar.
A Intel quantificou o ganho médio de desempenho por encadeamentos da seguinte forma:
A processor with Hyper-Threading Technology may provide a performance gain of 30 percent when executing multi-threaded operating system and application code over that of a comparable Intel architecture processor without Hyper-Threading Technology.
O ganho estatístico de dois encadeamentos versus um é, portanto, apenas na ordem de 30%, o que está muito longe dos 100% que se esperaria se dois fios no mesmo núcleo poderia fazer o dobro do trabalho de um.
Eu estimaria, portanto, que se a Intel tivesse ativado, digamos, três threads no núcleo, o ganho estatístico seria muito menor, talvez na ordem de 10% ou menos.
Dado o fato de que algum hardware precisa ser duplicado para cada thread, ou seja, o estado de arquitetura e lógica de interrupção, o ganho provavelmente não vale o custo que esse hardware adicional adicionaria ao preço do núcleo.
Para um Hyper-Threading eficaz, a Intel teria que aumentar o número de unidades do mesmo tipo dentro de cada núcleo. Fez exatamente isso no Microarquitetura Haswell que tem 4 portas para load / stores, 4 para integer e 2 para branch, então mesmo dois segmentos executando cargas de trabalho inteiras idênticas provavelmente não introduziriam muita contenção. No entanto, a Intel ainda manteve o modelo de dois hyper-threads por núcleo, eu acho que provavelmente, a fim de economizar na hardware necessário para permitir mais hyper-threads, ou talvez até porque sistemas operacionais modernos não podem usar eficientemente tal arquitetura.