简答

简答

当然我们知道cat /proc/cpuinfo |grep "cpu cores"会给出一个输出

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

但实际上我想获得cpu核心的总数。我想要的结果是

cpu cores: 8

我怎样才能得到这样的结果?

答案1

尝试这个,

按照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以及sockets是物理数,其中CPU(s)是逻辑数。因此,要查找您的系统拥有的核心数量,请执行以下操作number of cores x number of sockets

的示例输出lscpu如下:

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

所以总数为cores: 16

总数CPU(s): 32(因为threads每个的数量core2

正如@Durga 提到的,nproc给出了 的总数CPUs

欲了解更多,请参考这个回答, 得到/proc/cpuinforefer的解释

我要感谢@善行难陀帮助我理解相同的

答案2

在 Terminal 中nproc,OP:CPU 核心总数

答案3

如果你是只对总和感兴趣,您还可以使用 GNU awk:

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

编辑:这是OP意图对最后一列的数字求和的正确答案。然而,关于找出机器上有多少个核心(物理/虚拟)的问题在该问题的其他答案中给出。

答案4

简答

的数量物理核心

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

的数量虚拟核心(例如,具有超线程的 2 倍物理核心数量):

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

如果您有多个 CPU/处理器(在这种感觉)在你的主板上这不能正常工作。请参阅“每个主板的多个 CPU”部分。如果您在计算集群或用于 CAD/工程目的的高端桌面工作站上工作,则可能会出现这种情况。

长答案

该命令cat /proc/cpuinfo应打印出该行中的物理核心数cpu cores。但它会打印出每个虚拟核心的此信息。因此,如果您想要获得物理核心的数量,只需取第一个出现的行cpu cores,即

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

或者,如果您正在查找虚拟核心的数量,则可以计算找到该行的次数cpu cores,即

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

例子

我有一个Intel(R) Core(TM) i7-3740QM CPU @ 2.70GHz(4 个物理核心,超线程)。让我们看看我得到了什么:

> 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

物理核心数量:

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

虚拟核心数量:

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

您还可以获取最后找到的处理器编号并将其加一

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

每个主板有多个 CPU

我刚刚查看了我当前正在使用的计算集群的一个节点:1 个节点有 4 个 CPU(Intel Xeon),每个节点有 8 个物理核心;每个CPU都支持超线程;因此,每个CPU有16个虚拟核心;总结一下,一个节点有32个物理核和64个虚拟核;

cat /proc/cpuinfo打印出每个虚拟核心的信息。因此,我们得到了 64 个信息“包”。如果我们有这样的设置,我们需要考虑physical id中的行cat /proc/cpuinfo

这是我得到的输出:

> 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

因此,“后面的数字cpu cores” x “后面的数字physical id+ 1” 是我们节点的物理核心数 (8 x (3 + 1))。 64是虚拟核心的数量。

命名法

由于每个人都在不同的环境中使用内核、CPU 和处理器,因此我在这里为我的答案引入一个术语:

  • 处理器:整个硬件(例如我的 Intel® Core™ i7-3740QM 处理器)
  • CPU:CPU=处理器
  • core或physical core:CPU中物理计算单元的数量
  • 线程或虚拟核心:可以在一个CPU上并行运行的线程数量;如果(英特尔)处理器能够执行超线程,则虚拟核心的数量是物理核心数量的两倍(我不确定其他处理器供应商如何称呼此功能);

__例子: __

  • 处理器:Intel(R) Core(TM) i7-3740QM CPU @ 2.70GHz
  • 来源:英特尔方舟

数据:

  • CPU数量:1个
  • 处理器数量:1
  • 核心(或物理核心):4
  • 线程(或虚拟核心):8

相关内容