我在谷歌上搜索如何找到机器中的CPU数量,我发现了一些帖子,但我很困惑,因为有些人提到你得到逻辑核心与物理核心等。
那么逻辑核心和物理核心之间有什么区别?有什么方法可以只获取物理核心吗?或者将逻辑核心纳入我们的计算中是否有意义?
答案1
物理核心就是 CPU 内的物理核心。逻辑核心是单个核心同时执行 2 个或更多操作的能力。这源于早期奔腾 4 CPU做所谓的事情的能力超线程 (HTT)。
这有点像正在玩的游戏,其中核心的子组件没有用于某些类型的指令,而另一条长时间运行的指令可能正在执行。因此 CPU 实际上可以同时处理两件事。
较新的核心是更成熟的 CPU,因此它们可以同时处理多个任务,但它们并不像物理核心那样是真正的 CPU。您可以在 tomshardware 上的这篇文章中详细了解超线程功能与内核物理功能的限制:Intel Core i5和Core i7:Intel的主流巨作。
您可以使用以下命令查看您的盒子的故障lscpu
:
$ lscpu
Architecture: x86_64
CPU op-mode(s): 32-bit, 64-bit
CPU(s): 4
Thread(s) per core: 2
Core(s) per socket: 2
CPU socket(s): 1
NUMA node(s): 1
Vendor ID: GenuineIntel
CPU family: 6
Model: 37
Stepping: 5
CPU MHz: 2667.000
Virtualization: VT-x
L1d cache: 32K
L1i cache: 32K
L2 cache: 256K
L3 cache: 3072K
NUMA node0 CPU(s): 0-3
在上面我的 Intel i5 笔记本电脑总共有 4 个“CPU”
CPU:4
其中有2个物理核心(1插槽×2核心/插槽=2核心)
每个插槽的核心数:2
CPU 插槽:1
其中每个线程最多可以运行 2 个线程
每核线程:2
同时。这些线程是核心的逻辑能力。
答案2
物理核心是物理核心的数量,即实际的硬件组件。
逻辑核心是物理核心的数量乘以每个核心上可以通过使用超线程运行的线程数。
例如,我的 4 核处理器每个核心运行两个线程,因此我有 8 个逻辑处理器。
答案3
答案4
逻辑核心(超线程)是比多个物理核心更便宜、更慢的替代方案
这英特尔手册第 3 卷系统编程指南 - 325384-056US 2015 年 9 月8.7“英特尔超线程技术架构”简要描述了HT。它包含以下图表:
TODO 在实际应用中平均慢了多少百分比?
超线程是可能的,因为现代单 CPU 内核已经通过指令管道同时执行多条指令https://en.wikipedia.org/wiki/Instruction_pipelined
指令流水线是单个内核内部功能的分离,以确保电路的每个部分在任何给定时间都被使用:读取存储器、解码指令、执行指令等。
超线程通过使用以下方式进一步分离功能:
单个后端,实际上通过其管道运行指令。
双核有两个后端,这解释了更高的成本和性能。
两个前端,它们采用两个指令流并以一种方式对它们进行排序,从而避免了单个后端的流水线使用最大化危险。
双核还有 2 个前端,每个后端一个。
在某些边缘情况下,指令重新排序不会产生任何好处,从而使超线程毫无用处。但它在平均水平上产生了显着的提高。
单个核心中的两个超线程比两个不同的核心(仅共享 L3)共享更多缓存级别(TODO 有多少?L1?),请参阅:
- https://stackoverflow.com/questions/4802565/multiple-threads-and-cpu-cache/54018751#54018751
- https://stackoverflow.com/questions/944966/how-are-cache-memories-shared-in-multicore-intel-cpus/33510874#33510874
每个超线程向操作系统公开的接口与实际内核的接口类似,并且两者都可以单独控制。因此,cat /proc/cpuinfo
我看到了 4 个处理器,尽管我只有 2 个内核,每个内核有 2 个超线程。
然而,操作系统可以利用知道哪些超线程位于同一核心上的优势,在单个核心上运行给定程序的多个线程,这可能会提高缓存的使用率。
这个 LinusTechTips 视频包含轻松的非技术解释:https://www.youtube.com/watch?v=wnS50lJicXc
“同时多线程”是此类技术的更通用/更少英特尔特定的名称。