英特尔® 超线程技术:问题解答

定义
英特尔® 超线程技术是全新英特尔® 酷睿™ i7 处理器和英特尔® 至强® 5500 系列处理器所具有的一种出色特性。简单来说,它支持操作系统将处理器中的 1 颗内核看作 2 颗内核那样来使用。这样一来,操作系统将可使用的执行资源扩大了一倍,从而大幅提高了系统的整体性能。为了更加直观地描述,您可点击此处的演示来查看英特尔® 超线程技术的图形说明。

在谈论内核、线程、超线程这些术语时容易让人产生混淆。为使本文后面的部分便于理解,超线程将被称作硬件线程,而操作系统级别的线程被称作软件线程。为简化概念,1 个内核就是 1 个CPU。每个英特尔® 酷睿™ i7 或英特尔® 至强® 5500 系列处理器在出厂时均有 4 个内核(未来我们可能会提供其它版本)。

如何知道我的系统是否在使用超线程技术?
首先,您的处理器、芯片组、操作系统及 BIOS 必须全部支持该技术。幸运的是,一般情况下都是支持的。采用基于 Nehalem 的处理器的大部分台式机和服务器平台一般都支持该技术。其中大多数平台都允许您将超线程(HT)技术作为一种 BIOS 选项来启用或禁用(一般预设为启用状态)。您可通过 Windows* 中的任务管理器或 Linux* 中的 /proc/cpuinfo 来查看 CPU 信息。如果您的平台支持并且启用了超线程技术,您看到的 CPU 数将是平台实际拥有的物理内核数的两倍。例如,如果您使用的是双处理器英特尔® 至强® 5500 系列服务器,您会看到有 16 个 CPU。(8 个物理内核上运行 16 个硬件线程,每个内核运行 2 个线程。)

HyperThreading_Disabled.JPGHyperThreading_Enabled.JPG
在超线程技术启用状态(右图)和禁用状态(左图)下,同一平台上可用的 CPU 数量。

我可以在同一内核的 2 个不同线程上同时执行 2 个应用程序吗?
是的。在 1 个内核上运行的 2 个软件线程不一定非得是同一进程的线程。这 2 个软件线程既可以是同一进程的线程(在多线程软件情况下),也可以是 2 个单独的应用程序的线程。至于哪 2 个软件线程可以在 1 个超线程内核的 2 个硬件线程上运行则由操作系统决定。因此,答案是肯定的,您可以在同一内核上同时执行 2 个不同的应用程序。(采用这种方式的性能与分别在 2 个内核上运行 2 个应用程序的性能是否相同,则另有讨论--请参阅问题 6。)

在表面之下,该技术是如何实现的?
Nehalem 处理器内核的整个管线经设置后可识别两个单独的指令流(分别用于每个硬件线程)。不同的事件会导致管线从一个指令流的解码和调度切换至另外一个指令流的解码/调度。管线中的所有资源在两个硬件线程之间共享,或者两个线程上具有相同的资源。如欲了解更多信息,请参考英特尔® 64 和 IA-32 架构软件开发人员手册,第一卷 ,第 2.2.7 节。

我能否为一个硬件线程指派优先级,或确保其有足够的执行时间?
作为一名开发人员,您可以通过多种方法来优化超线程代码(都必须按照一般的情况来优化您的线程代码);- 但是,您可以明确地为某个线程指定优先级。(尽管您可以通过某些操作系统级别的工具来为进程指定优先级,并将这些进程分配给特定的硬件线程。)超线程技术可确保硬件线程具备足够的执行时间。您可以使用英特尔® VTune™ 性能分析器和英特尔® 线程调节器等工具来诊断您是否高效地使用您的硬件线程,同时优化所需的组件。

使用英特尔® 超线程技术,我能获得何种性能优势?
超线程技术能够在许多不同的方面为您提供优势。在台式机系统上,它可以支持用户同时运行更多的应用。对于开发人员,它可以提供更多的内核来运行软件线程。对于 CPU 利用率较高的服务器,它可以提升每个内核的性能。通常来说,当运行遇到大型内存或其它延迟的软件线程时,超线程技术可带来最大的优势。假设您拥有两个在两个硬件线程(在相同的内核上运行)上运行的软件线程。如果这两个软件线程都具有部分 I/O、较长的内存访问或睡眠时间,那么超线程技术很可能为您带来显著的优势。(因为在较长的等待期,两个硬件线程有助于更高效地利用资源。)许多评估网站公布了相关的性能指标评测结果来展示英特尔® 超线程技术的优势。
最后需要注意的是,您仍可以在启用超线程技术的平台上运行单线程应用。英特尔® 超线程技术经过专门的设计,不会降低单线程应用的性能。

如需更全面地了解编译器优化,请参阅优化注意事项