Comment puis-je countr le nombre de cœurs de processeur?

Bien sûr, nous soaps que cat /proc/cpuinfo |grep "cpu cores" donnera une sortie

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

Mais en fait, je veux get le nombre total de cœurs de processeur. Je veux que le résultat soit

 cpu cores: 8 

Comment puis-je get un tel résultat?

Si vous êtes uniquement intéressé par la sum , vous pouvez également utiliser GNU awk:

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

Edit: C'est la bonne réponse à l'intention de l'OP de sumr les numbers de la dernière colonne. Cependant, la question de savoir combien de cœurs (physiques / virtuels) sont sur la machine est donnée dans les autres réponses à la question.

Dans Terminal nproc , OP: nombre total de cœurs de processeur

Essaye ça,

Selon l' 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 ainsi que les sockets sont physiques où en tant que CPU(s) sont des nombres logiques. Donc, pour find le nombre de cœurs de votre système, faites le number of cores x number of sockets

Un exemple de sortie de lscpu est le suivant:

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

Donc le nombre total de cores: 16

Le nombre total de CPU(s): 32 (puisque le nombre de threads par core est de 2 )

Comme @Durga l'a mentionné, le nproc donne le nombre total de CPUs .

Pour plus d'informations, reportez-vous à cette réponse , pour get l'interprétation de /proc/cpuinfo référez – vous à cette

J'aimerais remercier @ Kusalananda pour m'avoir aidé à comprendre la même chose .

Réponse courte

Le nombre de kernelx physiques :

 > cat /proc/cpuinfo | grep -m 1 "cpu cores" cpu cores : 2 

Le nombre de kernelx virtuels (par exemple 2x nombre de kernelx physiques avec hyper threading):

 > cat /proc/cpuinfo | grep -c "cpu cores" 4 

Si vous avez plus d'un processeur / processeur (en ce sens ) sur votre carte mère, cela ne fonctionne pas correctement. Voir la section "Plusieurs processeurs par carte mère". Cela peut être le cas si vous travaillez sur un cluster de calcul ou sur un post de travail de bureau haut de gamme à des fins de CAO / d'ingénierie.

Longue réponse

La command cat /proc/cpuinfo doit imprimer le nombre de cœurs physiques dans les lignes cpu cores . Mais il imprime cette information pour chaque kernel virtuel. Ainsi, si vous voulez avoir le nombre de core physique, il suffit de prendre la première occurrence de la ligne cpu cores , qui est

 > cat /proc/cpuinfo | grep -m 1 "cpu cores" cpu cores : 2 

Sinon, si vous searchz le nombre de cœurs virtuels, vous countz le nombre de fois où la ligne cpu cores est trouvée, ce qui est

 > cat /proc/cpuinfo | grep -c "cpu cores" 4 

Exemple

J'ai un Intel(R) Core(TM) i7-3740QM CPU @ 2.70GHz (4 kernelx physiques, hyperthreading). Permet de voir ce que je reçois:

 > 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 

Nombre de cœurs physiques:

 > cat /proc/cpuinfo | grep -m 1 "cpu cores" cpu cores : 4 

Nombre de kernelx virtuels:

 > cat /proc/cpuinfo | grep -l "cpu cores" 8 

Vous pouvez également prendre le dernier numéro de processeur trouvé et l'incrémenter d'un

 > cat /proc/cpuinfo | grep "processor" | tail -1 processor : 7 # +1 

Plusieurs processeurs par carte mère

Je viens de regarder sur un nœud d'un cluster de calcul, sur lequel je travaille actuellement: 1 nœud a 4 processeurs (Intel Xeon) avec chacun 8 cœurs physiques; chaque unité centrale prend en charge hyptherthreading; par conséquent, chaque CPU a 16 cœurs virtuels; en le résumant, le seul noeud a 32 kernelx physiques et 64 kernelx virtuels;

cat /proc/cpuinfo imprime des informations pour chaque kernel virtuel. Ainsi, nous obtenons 64 «packages» d'informations. Si nous avons une telle configuration, nous devons considérer l' physical id ligne dans cat /proc/cpuinfo .

C'est la sortie que je reçois:

 > 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 

Ainsi, «nombre derrière les cpu cores » x «nombre derrière physical id + 1» est le nombre de kernelx physiques un nœud (8 x (3 + 1)). Le 64 est le nombre de kernelx virtuels.

Nomenclature

Puisque tout le monde utilise les cœurs, le processeur et le processeur dans un autre context, j'introduis une nomenclature pour ma réponse ici:

  • processeur: tout le matériel (par exemple mon processeur Intel® Core ™ i7-3740QM)
  • CPU: CPU = processeur
  • core ou core physique: nombre d'unités de calcul physique dans la CPU
  • thread ou kernel virtuel: nombre de threads pouvant fonctionner en parallèle sur un CPU; si le processeur (intel-) est capable d'effectuer un hyperthreading, le nombre de coeurs virtuels est deux fois plus grand que le nombre de coeurs physiques (je ne sais pas comment les autres fournisseurs de processeur appellent cette fonctionnalité);

__Exemple: __

  • processeur: processeur Intel (R) Core (TM) i7-3740QM à 2,70 GHz
  • source: Intel Ark

Les données:

  • Numéro de CPU: 1
  • numéro de processeur: 1
  • kernelx (ou kernelx physiques): 4
  • threads (ou kernelx virtuels): 8

Si vous avez la glibc et un kernel raisonnablement récent, vous pouvez utiliser

 getconf _NPROCESSORS_ONLN 

pour renvoyer le nombre de processeurs actuellement en ligne . Cela inclut les processeurs virtuels et hyper-thread.


1 Sur la plupart des systèmes qui seront identiques au nombre de processeurs globaux . Les systèmes qui ont un ou plusieurs processeurs désactivés pour une raison quelconque (par exemple parce qu'ils sont défectueux ou en raison de ressortingctions artificielles comme le matériel loué / sous licence) ou les systèmes qui prennent en charge les processeurs «hot-plug» ont été ajoutés mais pas encore activés.