Um processador Quad Core HyperThreaded realmente possui 8 "núcleos" [duplicado]

2

Esta pergunta já tem uma resposta aqui:

Eu tenho um Mac Quad Core i7 no início de 2011. Devido ao hyperthreading, muitos programas relatam 8 "núcleos". Se eu escrevesse um programa que é executado em paralelo, eu poderia iniciar 8 instâncias desse programa ou apenas 4?

Eu entendo que posso iniciar quantos threads quiser, mas estaria vendo 4 ou 8 instâncias do programa executadas em paralelo?

Tyler DeWitt
fonte
2
O Hyperthreading permite que cada núcleo processe 2 threads por vez após cada disparo do relógio. Se você não tivesse o Hyperthreading, cada núcleo seria capaz de processar apenas um único encadeamento por vez. Observe que esta é a explicação mais básica do Hyperthread, algo que está bem documentado, sobre o qual você deve ler. Devo observar que você pode executar 8 instâncias de um programa, mesmo com um processador de núcleo único; pode ser lento, dependendo das instruções que estão acontecendo exatamente, mas você já está executando centenas de processos em um caso como o OS X de qualquer maneira.
precisa saber é o seguinte
Os programas que você executa são executados em um processo independente, independentemente de quantos núcleos ou threads o processador pode fornecer. Como você usa os recursos fornecidos também é sua opção de design. Para simplificar: se você executar 1 instância, verá apenas 1 programa sendo executado.
Doktoro Reichard 4/13/13
@ Ramhound - Acho que a edição de David pode tornar a pergunta um pouco mais clara, desculpe. Eu estava perguntando em que ponto eu saturaria meus núcleos se meu processo fosse o único em execução (não o mundo real, eu entendo, apenas tentando entender as idéias abstratas).
Tyler DeWitt
@DoktoroReichard - Desculpe pela confusão no texto da pergunta, acho que a edição de David torna isso mais claro. A resposta de Joshua me deu o que eu estava procurando. Obrigado pela entrada embora.
precisa

Respostas:

4

O processador Intel Core i7 possui 4 núcleos físicos, mas cada núcleo tem a capacidade de inserir até 2 threads por vez, mostrando um total de 8 threads no sistema operacional na forma de "CPUs lógicas disponíveis".

Na realidade, um único núcleo pode lidar apenas com um encadeamento por vez, mas possui mecanismos especiais de enfileiramento / tempo / agendamento para permitir que dois encadeamentos estejam em estágios diferentes do "pipeline" ao mesmo tempo. Isso permite que a CPU conclua 2 threads mais cedo do que faria se tratasse apenas um de cada vez. Como os dois threads estão compartilhando o mesmo pipeline, o benefício de desempenho obviamente não será 2x. A maioria dos testes atribui o benefício entre 10% e 50%, dependendo do tipo de instruções que estão sendo executadas.

Em resposta à sua pergunta, se você iniciar 4, 8 ou 16 instâncias do seu programa, todas elas estarão "em execução", mas as instruções para cada uma serão colocadas em fila, dependendo de quantas LINHAS disponíveis. Depois que você ultrapassar o número de NÚMEROS FÍSICOS disponíveis (por exemplo, 5 ou mais), o desempenho será reduzido, pois quaisquer threads além da base 4 compartilharão um núcleo físico da CPU.

Por fim, depois de atingir o limite da capacidade de encadeamento da CPU disponível (exceder 8 threads), o sistema operacional começará a programar / enfileirar instruções para aguardar até que as do pipeline sejam concluídas. Idealmente, você deseja evitar passar por cima dos encadeamentos disponíveis, pois isso pode ter impactos negativos no desempenho e prejudicar o sistema.

Joshua
fonte
O hyperthreading no Core i7 é multithreading simultâneo e não multithreading de granulação fina / intercalada: as instruções dos dois threads podem começar a execução ao mesmo tempo (o frontend para registrar a renomeação [IIRC] é intercalado, mas estágios posteriores são misturados). Também deve ser declarado mais claramente que o desempenho por thread "reduzirá"; como observado, o desempenho total pode aumentar em cerca de 20%. O código restrito pela capacidade do cache ou pela largura de banda da memória pode sofrer uma degradação no desempenho; É mais provável que o código restrito por problemas de latência se beneficie do SMT.
Paul A. Clayton