Por que o Hyper-Threading fornece 2 núcleos virtuais, mas não mais?

1

Aqui está uma explicação do Hyper-Threading encontrado em Wikipedia :

For each processor core that is physically present, the operating system addresses two virtual (logical) cores and shares the workload between them when possible.

Estou me perguntando por que não temos o Hyper-Threading que fornece 3 ou 4 núcleos lógicos por núcleo físico?

    
por A.L 10.08.2017 / 16:33

4 respostas

1

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.

    
por 10.08.2017 / 19:54
1

Esta discussão foi levantada em ServerFault SE: Quantas CPUs devem ser utilizado com Hyperthreading?

when does having two different threads cause one to run worse?

Embora as dependências entre as instruções não sejam alteradas, surge um novo problema - concorrência . Esses diferentes segmentos competem pelo acesso à memória, tanto na utilização do cache quanto na largura de banda, o que é um pouco contraproducente.

O núcleo lógico não consegue fazer muito, mas fornece um pouco maior de paralelismo. Está longe de ser um núcleo real. Na verdade, ele oferece aproximadamente 30% do desempenho de um núcleo físico real.

Its purpose was simply to increase parallelism in a world dominated by I/O bound (non-CPU intensive) processes. When a CPU intensive (CPU bound) thread is switched to one of these cores, its performance will substantially degrade.

Agora imagine um cenário como esse segmento é jogado em torno de múltiplos núcleos lógicos, isso pode degradar posteriormente a performance.

Fonte: Quando o HyperThreading machuca

    
por 10.08.2017 / 17:24
0

I'm wondering why we don't have Hyper-Threading that provide 3 or 4 logical cores per physical core?

O motivo seria que os engenheiros da Intel projetaram a Tecnologia Intel Hyper-Threading, para processar apenas 2 threads por núcleo físico quando habilitado.

Aqui está a descrição oficial da Intel sobre esse recurso:

Intel Hyper-Threading Technology (Intel HT Technology) delivers two processing threads per physical core. Highly threaded applications can get more work done in parallel, completing tasks sooner.

Fonte: Intel® Core ™ i7-4770 Processador - Clique no ? ao lado do recurso de lista na página de especificação de qualquer processador Intel.

    
por 10.08.2017 / 16:46
0

Por que não 3 ou 4 segmentos? Ou 8? Rendimentos decrescentes. A Sun fez 8 threads por core e, para coisas que precisam de muitos threads, mas não de alto desempenho, funcionou bem, mas você notará que a velocidade do clock era muito menor do que os chips Intel ao mesmo tempo. A duplicação de partes do núcleo para mais threads contribui para o acúmulo adicional de calor. Os chips mais novos da Sun e agora da Oracle têm a capacidade de desativar dinamicamente alguns ou todos os outros threads em um determinado núcleo para fornecer alto desempenho para uma única tarefa encadeada.

    
por 03.01.2018 / 21:35