我想知道是否有人可以解释这两个方面的区别?它与intel硬件架构(HT)有关吗?
答案 0 :(得分:9)
超线程是硬件和英特尔品牌。大多数人称之为同时多线程(SMT)。对于程序员来说,两个超线程看起来像两个CPU核心。在硬件方面,多个超线程共享一个核心。 (在intel的情况下,每个核心有两个超线程)。
多线程(或多线程编程)通常被认为是在单个程序中使用多个线程上下文(指令指针,寄存器,堆栈等)的概念。 (通常在相同的进程或虚拟地址空间中)。
答案 1 :(得分:3)
物理处理器(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。这个" context-switch"由于HT的背景已经在PP中,因此几乎没有任何成本。操作系统不参与这些上下文切换。最相关的是,这些停顿和相应的上下文切换可以在管道的许多阶段发生。这与基于调度程序的上下文切换不同,后者发生在基于中断的事件上,例如量子到期,I / O中断,中止,系统调用等。
正如内森在之前的回答中所说,超线程是一个非常具体的术语。一个更通用和不可知的术语是"同时多线程(SMT)"。
最后,我强烈建议阅读: 1)对同时多线程处理器的操作系统支持。 James R. Bulpin
2)微体系结构选择和权衡以最大化处理效率。 Deborah T. Marr(博士论文)