Como posso contar o número de núcleos da CPU?

3

Claro que sabemos que cat /proc/cpuinfo |grep "cpu cores" fornecerá uma saída

[root@14:47 ~]#  cat /proc/cpuinfo |grep "cpu cores"
cpu cores       : 2
cpu cores       : 2
cpu cores       : 2
cpu cores       : 2

Mas, na verdade, quero obter o número total de núcleos de cpu. Eu quero que o resultado seja

cpu cores: 8

Como posso obter esse resultado?

    
por yode 12.07.2017 / 08:50

6 respostas

6

Se você está interessado somente na soma , você também pode usar o GNU awk:

cat /proc/cpuinfo |grep "cpu cores" | awk -F: '{ num+=$2 } END{ print "cpu cores", num }'

Editar: Esta é a resposta correta para a intenção do OP de somar os números da última coluna. No entanto, a questão sobre descobrir quantos núcleos (físicos / virtuais) estão na máquina é fornecida nas outras respostas à pergunta.

    
por 12.07.2017 / 09:27
6

No terminal nproc , OP: total de núcleos cpu

    
por 12.07.2017 / 08:52
6

Tente isso,

Como por man lscpu

CORE   The logical core number. A core can contain several CPUs.

SOCKET The logical socket number. A socket can contain several cores.

cores , bem como sockets , onde CPU(s) são números lógicos. Então, para encontrar o número de núcleos que seu sistema possui, faça number of cores x number of sockets

Um exemplo de saída de lscpu é o seguinte:

Thread(s) per core:    2
Core(s) per socket:    8
Socket(s):             2

Portanto, o número total de cores: 16

O número total de CPU(s): 32 (desde o número de threads por core é 2 )

Como @Durga mencionou, o nproc dá o número total de CPUs .

Para mais, consulte este answer , para obter a interpretação de /proc/cpuinfo referir este

Eu gostaria de agradecer @ Kusalananda por me ajudar a entender o same .

    
por 12.07.2017 / 11:22
4

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
por 12.07.2017 / 13:52
3

Se você tem o glibc e um kernel razoavelmente recente, você pode usar

getconf _NPROCESSORS_ONLN

para retornar o número atual de processadores on-line 1 . Isso inclui processadores virtuais e hyper-thread.

1 Na maioria dos sistemas que serão idênticos ao número de processadores globais . A exceção são sistemas que têm um ou mais processadores desabilitados por qualquer motivo (por exemplo, porque é defeituoso ou devido a restrições artificiais como hardware licenciado / licenciado) ou sistemas que suportam CPUs "hot-plugging", tendo novas CPUs adicionadas mas ainda não habilitadas.

    
por 12.07.2017 / 12:24
0

Use lscpu para obter mais de núcleos por soquete; depois multiplique pelo número de soquetes e depois por threads por núcleo.

    
por 19.12.2018 / 07:28

Tags