![为什么我的双核CPU被识别为四核?](https://linux22.com/image/1287957/%E4%B8%BA%E4%BB%80%E4%B9%88%E6%88%91%E7%9A%84%E5%8F%8C%E6%A0%B8CPU%E8%A2%AB%E8%AF%86%E5%88%AB%E4%B8%BA%E5%9B%9B%E6%A0%B8%EF%BC%9F.png)
我的处理器是英特尔酷睿 i3-380m。可以看到是2核4线程。
不过,Ubuntu 11.04 和 Windows 7 似乎都认为它是四核 CPU:
这是为什么呢?是不是因为每个核心有 2 个线程,将 CPU 分成了 4 个处理单元?
答案1
如上所述,您有一个双核系统,每个核心有 2 个线程。
英特尔将其营销为超线程多年来,不同的制造商已经通过各种方式实现了这一目标。
用最简单的形式来解释,每个 CPU 核心由一个“核心”和围绕该核心的各种架构组成,这些架构保存每个线程的状态和进程信息。单线程核心的架构可以一次保存 1 个线程的状态信息,而超线程核心可以保存两组不同的状态信息,允许两个独立的进程同时运行,只要它们需要核心的不同部分(这种情况很有可能发生,因为核心由多个不同类型的处理单元组成)。
为了简化系统对 CPU 的观察,每个超线程都被视为一个单独的 CPU,因此双核、每核 2 线程的处理器显示为四核处理器。
操作系统也可以使用核心停车(较新的英特尔处理器中的一项功能)允许操作系统暂停超线程核心的一半,这样当不需要超线程的额外处理能力时,单线程性能就会提高,因为核心不再在两个线程之间共享其缓存,现在可以将核心缓存完全用于单个线程。
答案2
原因是超线程,您的处理器支持。超线程不等同于额外的处理器,但可以真正提高多线程应用程序的性能。对于物理存在的每个处理器核心,操作系统会处理两个虚拟处理器,并在可能的情况下在它们之间共享工作负载。
答案3
现在的情况比以前每个时钟周期一个 CPU 指令要复杂得多。
现在有一个管道对于由多个步骤组成的每条指令,我听说有多达 41 个步骤,尽管那是很久以前的事了,我不知道当前的 CPU 管道是什么样子。我确实知道,如果管道足够长,您可以在最后一条指令完成之前(有时在同一个时钟周期内)在管道中启动一条新指令,这样您的单核就可以有效地同时做两件事。
不过,这里有一个技巧。你不能只用它来加快处理器处理特定程序指令的速度。这涉及到一个正确性问题:下一条指令可能取决于前一条指令尚未确定的结果。要利用长管道安全地,芯片将向操作系统调度程序提供两个独立的处理器核心,并向每个核心发送交替指令,以便同一“核心”的两个指令永远不会同时进入流水线。这样,我们就可以确保同时执行的任何指令都不会互相干扰。这称为超线程。
值得注意的是,虽然超线程可以显著增加 CPU 的工作量,但它远不如拥有那么多物理核心那么好。根据您的工作量,它可能意味着少则 15% 的改进,多则 40% 的改进。在某些情况下,您甚至可能希望禁用该功能,以便剩余的核心可以完全独占访问该核心的 L1/L2 缓存(这有时通过专用数据库服务器完成)。
当您的芯片宣传自己具有 2 个内核和 4 个线程时,这意味着它是一个支持超线程的双核处理器。
答案4
这是为什么呢?是不是因为每个核心有 2 个线程,将 CPU 分成了 4 个处理单元?
简单来说,答案是肯定的。您的 CPU 的每个核心都可以支持两个独立线程,所以总共有 4 个。但这并不意味着它具有与四核单线程 CPU 相同的性能。实际上,双核双线程 CPU 的性能低于四核单线程 CPU。比如 AMD Phenom X4。