O thread poderia ser contado como uma CPU?

O thread poderia ser contado como uma CPU?

Então digitei lscpuno meu terminal e vi isto:

CPU(s):              4
On-line CPU(s) list: 0-3
Thread(s) per core:  2
Core(s) per socket:  2
Socket(s):           1

O não. de CPU(s) é 4 aqui por causa da fórmula: No. of CPUs = Sockets X Cores per socket X Threads per Core

Mas a questão é: o que exatamente é uma CPU? Por que estamos incluindo threads na fórmula acima?

Responder1

Depende do que você está procurando.

Quando você compra um processador, ele diz claramente sobre o hyperthread e o número de núcleos, e se você pode usá-lo no modo multiprocessador (múltiplos soquetes).

Vamos esquecer os casos em que temos múltiplas CPUs físicas.

Temos vários núcleos em um chip: eles podem compartilhar algum cache, caso contrário são quase independentes. Mas ainda assim: algumas tarefas devem ser coordenadas, portanto, com 4 núcleos, você não tem (normalmente) 4 vezes o "poder" de 1 único núcleo.

Hyperthreads: isso é mais complicado: foi um truque da Intel (também antes dos multi-cores), aí você pode simular múltiplos CPUs. Na realidade, você pode executar apenas um thread por vez, mas a CPU geralmente precisa fazer pausas (por exemplo, aguardando acesso à memória ou gravação). Com o hyperthreading, a CPU poderia mudar rapidamente para a segunda CPU virtual.

Portanto, com o hyperthreading, você geralmente tem um desempenho melhor em comparação com apenas uma CPU normal, quase sem custos (um pouco mais de lógica, cache e registros, mas sem transistores duplicados), mas dois núcleos ainda são melhores (ainda não são iguais a duas CPUs, mas no cálculo numérico, onde as duas tarefas são totalmente independentes e o kernel não incomodará as tarefas).

Se você tiver processos paralelos, eu usaria frequentemente os threads multiplicados por núcleos (e muitas vezes adiciono um aos threads ou aos resultados finais, se houver um número discreto de IO). Neste caso você obtém melhor desempenho (supondo que não haja outras tarefas intensivas de CPU): você usa potência máxima, também quando um único núcleo está aguardando dados de memória.

Mas para obter aceleração, eu usaria apenas o número de núcleos (lembrando que terei alguns dados melhores).

Então, depende do que você está procurando. E se você está realizando tarefas complexas, provavelmente está medindo muito mais seus processos, e otimizando-os (cache, memória, threads, núcleos, CPU, MPI, ...). Cada programa é diferente em termos de recursos.

informação relacionada