我想知道是否有人可以向我解释这两者的区别?它与英特尔硬件架构(HT)有关吗?
2 回答
超线程是硬件和英特尔品牌。大多数其他人称之为同时多线程(SMT)。对于程序员来说,两个超线程看起来就像两个 CPU 内核。在硬件方面,多个超线程共享一个内核。(在英特尔的情况下,每个核心有两个超线程)。
多线程(或多线程编程)通常被认为是在单个程序中使用多个线程上下文(指令指针、寄存器、堆栈等)的概念。(通常在同一个进程或虚拟地址空间中)。
物理处理器 (PP) 是单个处理单元的硬件实现。从这个角度来说,一个“核心”就是基本的PP。有时,多处理器、多核等术语用于区分处理单元在芯片中的组织方式,以及它们之间共享哪些其他物理资源,如 L2、总线等。但对于这个答案,我们感兴趣的是最基本的处理单元。
当 PP 支持超线程(我们现在只使用这个术语)时,PP 被拆分为两个或多个逻辑处理器 (LP)。这是通过加强执行流水线、复制 PP 资源(如寄存器集、PC、中断处理机制等)来完成的。这允许 PP 在“同时”保持和执行多个“执行上下文”。这些执行上下文有时称为硬件线程 (HT)。如果 PP 不支持超线程(或已关闭),则 LP 与 PP 相同。
软件线程 (ST) 是由软件创建的执行上下文,例如使用 pthread_create() 或 clone()。这些实体由操作系统调度到处理器上。多线程程序是程序员显式创建 ST 的代码。多线程程序可以在不支持超线程的处理器中运行。在这种情况下,ST 之间的上下文切换是昂贵的,因为它需要调度程序的干预以及使用内存来存储和加载执行上下文。
当超线程开启时,操作系统将几个 ST 调度到一个 PP。通常每个 LP 一个 ST。操作系统将 LP 视为真正的 PP。因此,每个 ST 将在不同的 LP 上运行。一旦 ST 被调度,我们可以说它们成为硬件线程(HT)(松散地说),在 PP 控制的意义上。当一个 HT 停止时,例如缓存未命中或管道刷新,PP 执行另一个 HT。由于 HT 的上下文已经在 PP 中,因此这种“上下文切换”几乎没有成本。操作系统不参与这些上下文切换。最相关的是,这些停顿和相应的上下文切换可能发生在管道的许多阶段。这与基于中断的事件发生的基于调度程序的上下文切换不同,例如量子到期、I/O 中断、中止、系统调用等。
正如 Nathan 在上一个答案中所说,超线程是一个非常具体的术语。一个更通用且不可知的术语是“同时多线程 (SMT)”。
最后,我强烈推荐阅读:1)同时多线程处理器的操作系统支持。詹姆斯·R·布尔平
2) 最大化处理效率的微架构选择和权衡。Deborah T. Marr(博士论文)