多线程和超线程有什么区别?

ros*_*ose 12 cpu architecture hyper-threading

我听说过超线程和多线程这两个术语,但它们之间究竟有什么区别?什么样的英特尔处理器使用它们?

all*_*tic 26

多线程是指在操作系统内运行多个执行线程的一般任务。多线程是更一般称为“多处理”,其中可以包括多个系统进程(Windows上的简单的例子是,例如,运行Internet Explorer和Microsoft Word在同一时间),或者它可以由具有多一个进程的线程内它。

多线程(或者我应该说,多处理)是一个软件概念。实际上,任何图灵完备 CPU 都可以执行多线程,即使计算机只有一个 CPU 内核并且该内核不支持超线程。为了支持多处理,CPU 将交错执行不同的执行线程,先执行一个,然后执行另一个,然后再执行另一个,其中操作系统会将可用时间划分为“片段”,并提供大致相等的时间来执行每个线程(时间不必相等,但这通常是完成的方式,除非进程请求更高的优先级)。

请注意,只要在任何给定时间尝试执行的软件线程数多于可用的硬件(同时)执行线程数,则这些软件线程将在可用内核之间“交错”。在“单处理器”(一个没有超线程的 CPU 核心)的情况下,如果您有多个软件线程,它们将始终被交错。如果你有一个带超线程的 4 核 CPU,那就是 8 个“硬件线程”,这意味着 CPU 可以同时执行 8 个同时执行的线程,所以如果你有 8 个软件线程试图运行,它们可以同时运行; 但是如果您有 9 个软件线程,其中一个硬件线程将不得不交错一对线程(所选择的确切线程对将取决于操作系统的调度程序实现)。


另一方面,超线程是指英特尔创建的一种非常特殊的硬件技术,它允许单个处理器内核更有效地交错执行多个线程。换句话说,具有超线程的 CPU 将提供略高于其他方面相同但没有超线程的 CPU 的性能,因为超线程 CPU 将能够同时平衡两个(有时更多,但超线程通常是 2-方式)在给定核心上的执行线程。

但是,超线程比完全独立的物理内核要慢得多,因为有些类型的操作会破坏超线程的性能优势,而完全独立的内核很少有操作会导致此类事件。

以以下示例为例,假设“1 核”在所有示例中的性能完全相同:

示例 1:2 个内核,没有超线程。
示例 2:4 核,无超线程。
示例 3:具有超线程的 2 个内核。
示例 4:具有超线程的 4 个内核。

在这种情况下,示例 4 将始终是最快的。对于极不适合利用超线程优化的工作负载,示例 2 有时可能与示例 4 一样快。

另一方面,示例 3 有时可能在超线程最有利的工作负载上几乎与示例 2 一样快,即使它的物理内核数量是示例 2 的一半。

当然,示例 1 将是所有示例中最慢的,但当运行不适合超线程的工作负载时,它有时可能与示例 3 一样快。

在现代英特尔 CPU 的现实世界基准测试中,我们通常会发现,与没有超线程相比,超线程的性能提高了 20% 到 40%(“无超线程”的情况是通过禁用超线程功能来进行基准测试的) BIOS)。偶尔会有禁用超线程显示性能优势的工作负载,但这些工作负载在实际使用中可能很少见。但是,如果让我在 4 核超线程或 8 核之间做出选择,假设每个核本身具有相同的性能,我每次都会选择 8 核 CPU。

  • SU 上的答案是可编辑的,所以如果你们想改进它,请随意。另外,请记住 OP 的明显知识水平;甚至我自己的回答也可能比他们预期或想要的更具技术性。为了便于解释,我故意掩盖了一些细节。我怀疑 OP 是否会很快设计处理器,并且迫切需要了解所有这些细节。尽管如此,有趣的评论。 (5认同)
  • 确切地说,多线程和多处理不是一回事。线程与其关联的进程共享执行上下文,而进程有自己的执行上下文。但是,对于这个答案,这种区别并不那么重要。 (3认同)
  • 狡辩:超线程并不**严格**比单独的内核慢。人们可以设计(人为的)案例,在这种情况下,共享 L1 缓存比充分利用核心资源的好处更大。另一种特殊情况可能是当一个线程持续活动而另一个短暂处理间歇性事件时;间歇性地唤醒核心比唤醒活动核心上的线程更昂贵。对于具有极低 ILP 的线程,如果缓存争用不是问题,那么使用单核的更高能效可以允许更大的涡轮增压(更好的性能)。 (3认同)
  • 超线程技术并非“由英特尔创造”;对于主线 x86,它只是同步多线程的商标名称。如果 Alpha 21464 已经生产出来,它就会成为 SMT 的第一批知名用户之一。Intel 确实在某些 Pentium 4s 上首次发布了 SMT(可能不包括鲜为人知的处理器)的使用,但基本思想不是 Intel 的发明。 (2认同)

Ter*_*nen 5

多线程是操作系统级并行处理的术语。处理器与多线程无关。

超线程是英特尔的一个概念,它在单个处理器内核中实现多个线程的“同时”处理。操作系统看到两个处理器内核,尽管只有一个物理内核。