在与网络管理员的对话中,我提到我的机器是双核的。他告诉我不是。我打开任务管理器,转到“性能”选项卡,向他展示了两个单独的 CPU 使用率图表。我家里有一台四核机器,它有四个图表。他说这台机器有两个图表是因为超线程。我以前有一台超线程奔腾 4 处理器,但我从未完全理解它的含义。那么超线程和双核有什么区别呢?你怎么知道你拥有的是哪一种?
答案1
超线程暴露多个逻辑单个核心身体的CPU 核心。简单来说,超线程使上下文切换使每个 CPU 核心更加高效。
另一方面,双核芯片实际上有两个物理 CPU 核心,可以同时执行不同的进程。
还有其他多核芯片具有两个以上的核心,并且 - 正如 Svish 提到的 - 英特尔最新的多核产品还支持所有核心上的超线程。
您可以使用 CPU 识别实用程序,例如CPU-Z确定您有多少个核心。如您在屏幕截图底部附近所见,本例中的 CPU 有 2 个物理核心。如果线程数高于核心数,则启用超线程。迄今为止,所有具有超线程的面向消费者的 CPU 每个核心都有 2 个线程,因此如果启用 HT,线程数将是核心数的 2 倍。
如果你有 Intel CPU,你可以下载英特尔的 CPU ID 实用程序反而。
答案2
超线程是指您的处理器假装有 2 个物理处理器核心,但实际上只有 1 个和一些额外的垃圾。
超线程的意义在于,很多时候,当您在处理器中执行代码时,处理器的某些部分是空闲的。通过添加一组额外的 CPU 寄存器,处理器可以像拥有两个内核一样运行,从而并行使用处理器的所有部分。当两个内核都需要使用处理器的一个组件时,当然,一个内核最终会等待。这就是为什么它不能取代双核和此类处理器的原因。
也可以看看:这个问题
答案3
超线程是一种更便宜、更慢的多核替代方案
这英特尔手册第 3 卷系统编程指南 - 325384-056US 2015 年 9 月8.7 “INTEL HYPER-THREADING TECHNOLOGY ARCHITECTURE”对HT进行了简单的描述,其中包含下图:
TODO 在实际应用中平均慢了百分之多少?
超线程是可能的,因为现代单 CPU 内核已经能够通过指令流水线同时执行多个指令https://en.wikipedia.org/wiki/Instruction_pipelining
指令流水线是单个核心内部功能的分离,以确保电路的每个部分在任何给定时间都被使用:读取内存、解码指令、执行指令等。
超线程通过以下方式进一步分离功能:
单个后端,它实际上通过其管道运行指令。
双核有两个后端,这解释了更高的成本和性能。
两个前端,它们接收两个指令流,并以一种方式对它们进行排序,从而避免使用单个后端的流水线危害。
双核还会有 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
尽管我只有 2 个核心,每个核心有 2 个超线程,但它显示了 4 个处理器。
然而,操作系统可以利用了解哪些超线程位于同一个核心上的优势,在单个核心上运行给定程序的多个线程,这可能会提高缓存的使用率。
此 LinusTechTips 视频包含轻松的非技术性解释:https://www.youtube.com/watch?v=wnS50lJicXc
对于此类技术,“同步多线程”是一个更通用/更少英特尔特定的名称。