我刚刚读了Heise Online 上的文章(查看表格,其余部分为德语)声称,超线程会降低单线程程序的速度,尽管它们不使用核心的第二个线程。也就是说,如果您在 BIOS 中禁用 HT,单线程应用程序的运行速度会略快一些。
这是真的吗?还是测量错误?有没有人有关于基准测试的资料来证明这一点?
答案1
这是可能不是一个测量误差。事实上,这是一个关于游戏性能的永恒争论,因为它们通常被设计为具有最大的单核性能。根据英特尔的这篇文章英特尔文章超线程是:
英特尔的超线程技术允许将一个物理处理器封装视为操作系统内的两个独立逻辑处理器。启用超线程技术的处理器资源可复制、标记或共享大部分资源。共享资源可更高效地使用处理器,从而显著提高性能,与单处理器封装相比,芯片尺寸和功耗增加不到 5%。但是,超线程技术无法实现与多处理(其中所有处理器资源均被复制)相当的性能预期。
在您显示的表格中,Cinebench 测试处理器的一个单核。简而言之,HT(超线程)为一个物理核心(将在测试中进行评估的核心)启用两个虚拟核心。如果测试基于启动不需要划分的单个进程,则两个核心之间共享资源会降低测试结果,因为在启用时发生的平衡在禁用时不会发生(Windows 和 Cinebench 仅看到单个处理器)。
如果我们添加另一个测试来自 Tom's Hardware将其与您显示的表格(Cinebench R11.5)进行比较:
多线程:
单线程性能的结果并不所以与您在页面中显示的不同。需要注意的是,具有不同执行状态的两个逻辑处理器共享系统总线或缓存等资源,因此它们并不总是能够并行执行任务,有时可能会发生这种情况线程停滞在此提及文章这意味着在单线程压力测试中,资源共享可能会倾向于使某些线程排队,从而带来稍差的性能结果。
你也可以在这里看到不同游戏中的不同场景超频网结果声称在某些情况下性能会受到影响。我不认为这必须被理解为“禁用 HT 可以提高单线程性能”,而是“游戏针对最多 4 个核心进行了优化”或“没有利用 HT”。第一个假设可以通过阅读以下文章得到验证:这,显示了启用 HT 后 i3 的单核性能如何提高,而未启用 HT 的 i7 则没有。
综上所述,我们看到在少数情况下,禁用超线程对单线程性能的提升微乎其微,但从整体成本效益比来看,这还不足以声称禁用超线程。就操作系统和为超线程架构设计的软件而言,禁用它并不值得。
答案2
虽然没有基准,但根据以下内容,这可能是真的:
摘自维基百科关于“超线程”的文章:
...然而,当运行两个需要处理器全力关注的程序时,当超线程技术打开时,实际上看起来其中一个或两个程序的速度都会略微减慢。这是因为 Pentium 4 的重放系统占用了宝贵的执行资源,均衡了两个程序之间的处理器资源,从而增加了不同量的执行时间。
当禁用 SMT 时,这种情况不适用 - 操作系统会在核心之间分配线程,而不是硬件线程。
现代英特尔(和 AMD)CPU 可以做到“推测执行“他们实际上在当前指令指针之前获取并预执行指令,以便在实际执行赶上时准备好结果。
诸如非预期分支和中断之类的事情会导致 CPU 放弃其推测并不得不重新开始,听起来 SMT 引入了更多可能发生这种情况的情况。对于不分支或处理许多条件的“直接任务”(即 GPU 类任务),它可能会带来好处。
答案3
是的,这很明显。启用 HT 后,您宣传的核心数量是实际数量的两倍。
这是为了在大多数程序都没有足够的多线程的情况下实现更多的并行化。但是,如果您完全对程序进行多线程处理,那么您将过度使用资源,并且由于每个线程的额外开销,性能会下降。无论这个影响有多小,对于一个在任意数量的内核和处理器上使用 100% CPU 的应用程序,启用 HT 会导致性能下降大约 2-3%。
现在,对于一个独立的单线程程序来说,这似乎无关紧要,因为程序本身不能过度使用资源,但请记住,操作系统也认为有额外的核心,并且可能会过度使用资源。即使仍有未使用的核心,也可以测量由调度程序造成的开销,调度程序没有以最佳方式放置线程并将其锁定到单个真实核心。
这些观察结果基于十多年的实时软件开发和基准测试。当人们试图最大化系统性能时,显然存在可观察到的差异,尽管差异非常小。
答案4
启用超线程后,CPU 会将自身拆分为两个逻辑 CPU,这两个 CPU 的速度都比它们原来的单核慢得多,但综合性能超过 100%。在 Pentium 4 时代,您可以将一个 CPU 核心拆分为两个逻辑核心,速度大约是前者的 55%。在将超线程重新添加到核心架构后,速度已超过 55%。
问题在于,操作系统倾向于将逻辑核心视为物理核心,因此高优先级任务可以与低优先级任务在同一个 CPU 核心中一起运行。现在,两个线程或任务都获得了同等的 CPU 关注,尽管由于优先级差异,它们不应该如此。当您运行基准测试时,操作系统可能会在逻辑核心中安排低优先级任务并降低基准测试程序的速度。当然,当一个逻辑核心空闲时,HT 会被有效禁用,剩余的核心将恢复 100% 的速度。
想象一下一台繁忙的服务器,其屏幕保护程序占用大量 CPU 资源。屏幕保护程序启动后,尽管优先级较低,但最终会将 CPU 核心分成两部分,速度各为 65%。现在,服务器只有 65% 的 CPU 核心可用。