Por que minha CPU dual-core é reconhecida como quad-core?

52

Meu processador é um Intel Core i3-380m . Como você pode ver, são 2 núcleos e 4 threads.

Embora o Ubuntu 11.04 e o Windows 7 pareçam pensar que é uma CPU quad-core:

insira a descrição da imagem aqui

insira a descrição da imagem aqui

Por que é isso? É porque existem 2 threads por núcleo, dividindo a CPU em 4 unidades de processamento?

seriousdev
fonte

Respostas:

43

Como mencionado, você tem um sistema de núcleo duplo, com 2 threads por núcleo.

Isso é comercializado pela Intel como hyperthreading e foi feito de várias maneiras ao longo dos anos por vários fabricantes diferentes.

Para explicá-lo em sua forma mais simples, cada núcleo da CPU consiste em um "núcleo" e várias arquiteturas em torno desse núcleo, que mantêm informações de estado e processo para cada encadeamento. Um único núcleo encadeado possui a arquitetura para manter um valor de um encadeamento de informações de estado retidas por vez, um núcleo hiperencadeado mantém dois conjuntos distintos de informações de estado, permitindo que dois processos separados sejam executados ao mesmo tempo, desde que exijam partes diferentes do núcleo ( o que é razoavelmente provável de acontecer, pois o núcleo consiste em várias unidades de vários tipos diferentes de unidade de processamento).

Para simplificar como a CPU é vista no sistema, cada hyperthread é visto como uma CPU separada; portanto, um processador dual core de 2 threads por núcleo aparece como um processador quad core.

Também é possível que o sistema operacional use o Core-parking (um recurso nos processadores Intel mais recentes) permite que o sistema operacional suspenda metade de um núcleo hyperthread, para que, quando a capacidade extra de processamento do hyperthreading não seja necessária, o desempenho do thread único é aumentado porque o núcleo não está mais compartilhando seu cache em dois segmentos e agora pode dedicar totalmente o cache no núcleo a um único segmento.

Mokubai
fonte
Obrigada pelo esclarecimento. Então, podemos dizer aqui que um segmento é para um núcleo o que é um núcleo para um processador?
seriousdev
2
De certa forma, sim. O sistema operacional vê o processador, sabe quantos núcleos existem nesse processador e, por sua vez, quantos threads cada núcleo suporta, pelo que o uso da CPU que você está vendo agora é "por segmento" em vez de "por núcleo". Não é tão simples (como cada thread realmente parece para um sistema operacional que não reconhece hyperthreading como um núcleo de CPU completo), mas essa é a ideia geral.
Mokubai
O link de estacionamento principal do Makubai não funciona.
Biswapriyo 01/04/19
49

O motivo é o hyperthreading , suportado pelo seu processador. Hyperthreading não é o equivalente a um processador extra, mas pode realmente aumentar o desempenho em aplicativos multithread. Para cada núcleo de processador fisicamente presente, o sistema operacional endereça dois processadores virtuais e compartilha a carga de trabalho entre eles quando possível.

Keltari
fonte
7
Isso é conhecido como núcleos físicos x lógicos?
Xdumaine
11
Sim, um núcleo físico é - bem ... físico. Você pode tocá-lo. Núcleos com hyperthread não são reais, portanto lógicos. Você também pode quebrar núcleos físicos em núcleos lógicos através da virtualização.
Keltari
3
@ Keltari, na verdade, existe uma parte física ... O Hyperthreading é um componente de hardware no núcleo da CPU (e só pode ser desativado no nível do hardware). Consulte este documento técnico da Intel para obter detalhes. Basicamente, ele compartilha os recursos de um núcleo entre duas unidades de execução física. Tecnicamente, os dois núcleos vistos pelo sistema operacional em um núcleo hiperencadeado são "lógicos", não há um físico e um lógico.
Revelação
11
verdade, o hyperthreading é uma parte física do processador, mas não um núcleo físico.
Keltari
11
A melhor maneira de pensar em HT é um "núcleo e meio", que compartilha muito mais recursos com seu irmão do que os núcleos separados. No entanto, ele é capaz de executar um encadeamento "sozinho" e o sistema operacional o trata como uma unidade de execução de encadeamento (que você associou a um núcleo).
crasic 31/08
12

As coisas são muito mais complexas do que eram nos dias de uma instrução de CPU por um ciclo de clock.

Agora há um pipeline para cada instrução que consiste em várias etapas. Ouvi até 41, embora isso tenha sido um tempo atrás e não tenho idéia de como são os pipelines de CPU atuais. Sei que se o pipeline for longo o suficiente, você poderá iniciar uma nova instrução no pipeline antes que a última instrução termine, às vezes no mesmo ciclo de clock, para que seu núcleo único esteja efetivamente fazendo duas coisas ao mesmo tempo.

Há um truque aqui, no entanto. Você não pode simplesmente usar isso para acelerar a taxa na qual o processador processa as instruções de um programa específico. Há um problema de correção envolvido: a próxima instrução pode depender do resultado ainda não determinado da instrução anterior. Para tirar proveito do longo pipeline com segurança , o chip apresentará dois núcleos de processador separados ao agendador do sistema operacional e instruções alternativas enviadas a cada núcleo, para que duas instruções para o mesmo "núcleo" nunca estejam no pipeline ao mesmo tempo. Dessa forma, podemos ter certeza de que quaisquer instruções executadas simultaneamente não interferem entre si. Isso é chamado de hyperthreading .

Vale a pena notar aqui que, embora o hyperthreading possa aumentar significativamente a quantidade de trabalho que você obtém do seu processador, ele não chega nem perto de ter tantos núcleos físicos. Dependendo da sua carga de trabalho, pode significar uma melhoria de 15% ou 40%. Em algumas circunstâncias, convém desabilitar o recurso para que os núcleos restantes tenham acesso exclusivo total ao cache L1 / L2 desse núcleo (às vezes isso é feito com servidores de banco de dados dedicados).

Quando seu chip se anuncia como tendo 2 núcleos com 4 threads, isso significa que é um processador de núcleo duplo que suporta hyperthreading.

Joel Coehoorn
fonte
2

Dê uma olhada nesta página da Intel - ela contém muitas animações mostrando como o hyperthreading acelera suas tarefas.

A Utilization of Processor Resourcesé a melhor animação, olhe para ela e clique no botão "avançar".

woliveirajr
fonte
1

Por que é isso? É porque existem 2 threads por núcleo, dividindo a CPU em 4 unidades de processamento?

Simplificando, a resposta é sim. Cada núcleo do seu processador pode suportar dois threads independentes, ou seja, 4 no total. Mas isso não significa que ele tenha o mesmo desempenho que uma CPU de núcleo único de quatro núcleos. praticamente o desempenho de uma CPU de dois núcleos de rosca dupla é menor que o de uma CPU de rosca única de quatro núcleos. Como o AMD Phenom X4.

aminfar
fonte
Você sabe por quê?
seriousdev
11
O motivo é que, em um núcleo de thread duplo, os recursos de hardware (como o buffer de reordenamento) são compartilhados entre dois threads, enquanto em um CPU de thread único, todos os recursos são dedicados a um núcleo. Vale ressaltar que ter um núcleo com rosca mulch aumenta sua utilização e taxa de transferência de hardware, mas é ruim para a latência. Existem muitas compensações envolvidas. Portanto, a palavra "performance" é realmente vaga aqui. Para pessoas comuns, significa a latência de um único encadeamento.
precisa saber é