程序员可能有什么原因想要关闭超线程?


13

我公司刚刚购买了新计算机来代替旧的2GB Windows XP计算机。我们团队中的某人注意到他们禁用了超线程,并告诉所有人重新启动并打开它。在禁用超线程的计算机上进行编程有好处吗?


1
您正在使用哪种型号的Intel CPU,例如Core i5或i7?
JB King

@JBK好问题,我不知道,我自己没有这些机器之一。
流行

在旧的Pentium 4笔记本电脑上,可以减少热量和风扇噪音,并可能使电池持续使用几分钟。没有答案,因为它应该是古老的历史,并且不适合您的情况。
Steve314 2011年

在Lucasarts游戏Grim Fandango中,当使用超线程运行时,声音引擎陷入了竞争状态。

Answers:


14

是的,我开发的应用程序在禁用 HT的机器上运行时表现更好。

发生的事情是,当在超线程计算机上运行时,原始代码创建的线程数量是线程的两倍(您可能认为这是HT的全部内容)。但是,这些线程的吞吐量对线程可用的缓存量非常敏感。在争夺固定数量的缓存的线程数量增加了两倍的情况下,每个线程可用的缓存太低,并发生了崩溃:与运行时相比,将装载更多的缓存未命中,装载更多的主内存访问,并且性能受到了重大打击。更少的线程和每个线程更多的缓存(如果您在禁用HT的计算机上运行应用程序,则会得到此结果)。

最终的解决方法是让应用程序更好地检查硬件平台,并在确定要创建多少个线程时考虑缓存大小以及每个线程所需的缓存数量。无论如何,问题在随后的CPU时代很快消失了,这使缓存大小增加了一倍(然后我们实际上开始从HT中看到了适度的好处)。然而,整个事件留下了长期持久的建议,即在我们的软件运行的任何平台上始终禁用HT ,并且对任何性能问题的响应直截了当地说“ 该计算机未启用HT吗? ”。(我认为最根本的问题是大多数非极客根本不了解HT的实际含义。)


11

我不知道技术细节,但是很显然,如果某个应用程序(或操作系统)没有针对超线程进行优化,那么超线程实际上会降低性能。

即使是英特尔,也建议在这种情况下将其关闭:

不建议将以下桌面操作系统与超线程技术一起使用。如果您使用以下台式机操作系统之一,建议您在系统BIOS设置程序中禁用超线程技术:[...]

(来源:http : //www.intel.com/support/processors/sb/CS-017343.htm

因此,也许制造商(或供应商)要小心。


众所周知,某些游戏的运行速度比停用超线程时要慢。
克拉姆

4
如果他们担心工作中游戏的表现,那将很有趣。
Dietbuddha 2011年

在多核系统上,可能会将两个线程分配给同一核上的两个超线程,从而使所有其他核都处于空闲状态,并且其性能要比将每个线程置于不同的核上要低得多。直到操作系统意识到不同内核与同一内核上不同超线程之间的区别……
Steve314 2011年

1
@ Steve314:Windows 2000肯定是这种情况(如果正在运行,禁用HT绝对是个好主意),但是Windows XP应该支持HT(请参见例如download.microsoft.com/download/5/7/ 7 /…),不要陷入这种陷阱。我假设从某个版本的内核将类似的逻辑内置到Linux中。
2011年

6

OEM很有可能只是保守。OEM经常在出厂时禁用了高级功能(例如HT,No-Execute位,vt等)。原因是,在某些罕见情况下,这些设置可能会失败,并且真正想要该功能的人也可以轻松地将其打开。

另外,启用某些功能后,操作系统中的一些罕见错误会导致潜在的安全问题。例如,虚拟化技术曾经遇到过这样的问题。因此,只是供应商很保守。

超线程通常对于交互式桌面(例如编程机)很有用。不过,如果您的应用程序要在没有HT的服务器上运行,则有些人可能希望将其关闭。只是为了减少潜在的硬件差异。


2
对于关闭HT的机器,几乎总是这样。最大程度的兼容性,使供应商免于大量奇怪的支持电话。
Patrick Hughes

5

超线程不会向CPU添加新内核。您仍然具有一个算术/逻辑单元,每个内核一个浮点单元(...)。因此,如果您有多个执行不同操作的线程/进程,则HTT可以提高性能。但是,如果您有多个线程或多或少地执行相同的操作(在处理数字的应用程序中并不少见),则HTT实际上会严重损害性能。


2

也许大规模多线程代码中的缓存一致性问题?如果您有离散的CPU缓存,则理论上两个线程可以缓存相同的数据,并同时使用不同的值对其进行修改,这在理论上是可能的。如果您在CPU和主内存(L2或L3)之间的某个点上具有统一的缓存,则可能存在某种机制可以防止这种情况的发生,但是在缓存较小的低端CPU上可能没有。

或者,可能在不支持该功能的芯片上启用超线程会在POST期间引发代码,因此BIOS供应商只是将其保留,因为他们不知道系统将拥有哪种CPU。


我的猜测-有一种解决此一致性问题的机制,但它可能会严重影响性能。IIRC,特定的内存页面不能随意加载到任何高速缓存页面中-通常,这种地址映射到这几个页面中的一个页面机制。也许两个线程可能会争用一些缓存页面,而剩下的未使用?(甚至可能使用多核,尽管风险可能较小)。
Steve314 2011年

0

关闭开发人员计算机上的超线程的一个原因是,它可能隐藏一些微妙的多线程错误。但这仅适用于单核单处理器计算机。多核将在测试期间暴露更多的多线程错误(如果有的话)。

OTOH,我怀疑您会看到默认情况下禁用超线程的单核处理器。我的投票是关于Sleskes的。


0

许多软件是在单核计算机上编写的,并且在多核计算机上运行时可能存在错误。该指令实际上可能是说“这在多核计算机中不起作用”,只是长期以来,超线程是您经常看到的唯一可能的多核计算机。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.