Resposta curta
O número de núcleos físicos :
> cat /proc/cpuinfo | grep -m 1 "cpu cores"
cpu cores : 2
O número de núcleos virtuais (por exemplo, 2x número de núcleos físicos com hyper threading):
> cat /proc/cpuinfo | grep -c "cpu cores"
4
Se você tiver mais de uma CPU / processador (em este sentido ) em sua placa-mãe, isso não funcionará corretamente. Consulte a seção "Diversas CPUs por placa principal". Esse pode ser o caso se você trabalha em um cluster de computação ou em uma estação de trabalho de desktop de alta qualidade para fins CAD / Engenharia.
Resposta longa
O comando cat /proc/cpuinfo
deve imprimir o número de núcleos físicos na linha cpu cores
. Mas imprime essas informações para cada núcleo virtual. Assim, se você quiser ter o número do núcleo físico, basta pegar a primeira ocorrência da linha cpu cores
, que é
> cat /proc/cpuinfo | grep -m 1 "cpu cores"
cpu cores : 2
Alternativamente, se você estiver procurando pelo número de núcleos virtuais, conte o número de vezes que a linha cpu cores
é encontrada, que é
> cat /proc/cpuinfo | grep -c "cpu cores"
4
Exemplo
Eu tenho um Intel(R) Core(TM) i7-3740QM CPU @ 2.70GHz
(4 núcleos físicos, hyperthreading). Vamos ver o que eu recebo:
> cat /proc/cpuinfo | grep "cpu cores"
cpu cores : 4
cpu cores : 4
cpu cores : 4
cpu cores : 4
cpu cores : 4
cpu cores : 4
cpu cores : 4
cpu cores : 4
Número de núcleos físicos:
> cat /proc/cpuinfo | grep -m 1 "cpu cores"
cpu cores : 4
Número de núcleos virtuais:
> cat /proc/cpuinfo | grep -l "cpu cores"
8
Você também pode obter o último número de processador encontrado e incrementá-lo em um
> cat /proc/cpuinfo | grep "processor" | tail -1
processor : 7
# +1
Várias CPUs por placa principal
Eu olhei apenas para um nó de um cluster de computação, no qual estou trabalhando atualmente: 1 nó tem 4 CPUs (Intel Xeon) com cada 8 núcleos físicos; cada CPU suporta hyptherthreading; portanto, cada CPU tem 16 núcleos virtuais; resumindo, o único nó tem 32 núcleos físicos e 64 virtuais;
cat /proc/cpuinfo
imprime informações para cada núcleo virtual. Assim, obtemos 64 'pacotes' de informação. Se tivermos essa configuração, precisamos considerar a linha physical id
em cat /proc/cpuinfo
.
Esta é a saída que recebo:
> cat /proc/cpuinfo | grep -m 1 "cpu cores"
cpu cores : 8
> cat /proc/cpuinfo | grep -c "cpu cores"
64
> cat /proc/cpuinfo | grep "physical id" | tail -1
physical id : 3
# this result +1 => number of CPUs
Assim, "número atrás de cpu cores
" x "número atrás de physical id
+ 1" é o número de núcleos físicos um de nós (8 x (3 + 1)). O 64 é o número de núcleos virtuais.
Nomenclatura
Como todos usam núcleos, CPU e processador em outro contexto, introduzo uma nomenclatura para minha resposta aqui:
- processador: todo o hardware (por exemplo, meu processador Intel® Core ™ i7-3740QM)
- CPU: CPU = processador
- núcleo ou núcleo físico: número de unidades de cálculo físico na CPU
- encadeamento ou núcleo virtual: número de encadeamentos que podem ser executados em paralelo em uma CPU; se o processador (intel) for capaz de executar hyperthreading, o número de núcleos virtuais é o dobro do número de núcleos físicos (não sei ao certo como outros fornecedores de processadores chamam esse recurso);
__ Exemplo: __
- processador: CPU Intel (R) Core (TM) i7-3740QM @ 2.70GHz
- fonte: Intel Ark
Dados:
- número da CPU: 1
- número do processador: 1
- núcleos (ou núcleos físicos): 4
- threads (ou núcleos virtuais): 8