我公司刚刚购买了新计算机来代替旧的2GB Windows XP计算机。我们团队中的某人注意到他们禁用了超线程,并告诉所有人重新启动并打开它。在禁用超线程的计算机上进行编程有好处吗?
我公司刚刚购买了新计算机来代替旧的2GB Windows XP计算机。我们团队中的某人注意到他们禁用了超线程,并告诉所有人重新启动并打开它。在禁用超线程的计算机上进行编程有好处吗?
Answers:
是的,我开发的应用程序在禁用 HT的机器上运行时表现更好。
发生的事情是,当在超线程计算机上运行时,原始代码创建的线程数量是线程的两倍(您可能认为这是HT的全部内容)。但是,这些线程的吞吐量对线程可用的缓存量非常敏感。在争夺固定数量的缓存的线程数量增加了两倍的情况下,每个线程可用的缓存太低,并发生了崩溃:与运行时相比,将装载更多的缓存未命中,装载更多的主内存访问,并且性能受到了重大打击。更少的线程和每个线程更多的缓存(如果您在禁用HT的计算机上运行应用程序,则会得到此结果)。
最终的解决方法是让应用程序更好地检查硬件平台,并在确定要创建多少个线程时考虑缓存大小以及每个线程所需的缓存数量。无论如何,问题在随后的CPU时代很快消失了,这使缓存大小增加了一倍(然后我们实际上开始从HT中看到了适度的好处)。然而,整个事件留下了长期持久的建议,即在我们的软件运行的任何平台上始终禁用HT ,并且对任何性能问题的响应都直截了当地说“ 该计算机未启用HT吗? ”。(我认为最根本的问题是大多数非极客根本不了解HT的实际含义。)
我不知道技术细节,但是很显然,如果某个应用程序(或操作系统)没有针对超线程进行优化,那么超线程实际上会降低性能。
即使是英特尔,也建议在这种情况下将其关闭:
不建议将以下桌面操作系统与超线程技术一起使用。如果您使用以下台式机操作系统之一,建议您在系统BIOS设置程序中禁用超线程技术:[...]
(来源:http : //www.intel.com/support/processors/sb/CS-017343.htm)
因此,也许制造商(或供应商)要小心。
OEM很有可能只是保守。OEM经常在出厂时禁用了高级功能(例如HT,No-Execute位,vt等)。原因是,在某些罕见情况下,这些设置可能会失败,并且真正想要该功能的人也可以轻松地将其打开。
另外,启用某些功能后,操作系统中的一些罕见错误会导致潜在的安全问题。例如,虚拟化技术曾经遇到过这样的问题。因此,只是供应商很保守。
超线程通常对于交互式桌面(例如编程机)很有用。不过,如果您的应用程序要在没有HT的服务器上运行,则有些人可能希望将其关闭。只是为了减少潜在的硬件差异。
也许大规模多线程代码中的缓存一致性问题?如果您有离散的CPU缓存,则理论上两个线程可以缓存相同的数据,并同时使用不同的值对其进行修改,这在理论上是可能的。如果您在CPU和主内存(L2或L3)之间的某个点上具有统一的缓存,则可能存在某种机制可以防止这种情况的发生,但是在缓存较小的低端CPU上可能没有。
或者,可能在不支持该功能的芯片上启用超线程会在POST期间引发代码,因此BIOS供应商只是将其保留,因为他们不知道系统将拥有哪种CPU。