0

我想知道在不同情况下超线程(每个物理核心有多个逻辑核心)对现实世界的性能影响是什么。英特尔宣称这在执行线程等待 I/O 时有效,但在内存密集型应用程序中,它可能无效,因为当逻辑内核之间发生切换时,处理器缓存中的局部性丢失。第二个应用程序的数据被加载到缓存中,迫使第一个应用程序的内存超出缓存。在返回到第一个应用程序时,它的引用都是缓存未命中并且性能损失。我认识几个超级计算机管理员,他们声称他们关闭了超线程,因为在他们的情况下这样做更有效。有没有“正常” 禁用超线程更有效的用户案例?游戏可能会占用大量内存——如果没有超线程会更好吗?

4

2 回答 2

3

首先,应该认识到超线程是一个英特尔营销术语,标记为事件切换多线程(在安腾上)和同时多线程(在 x86 上)。SoEMT 主要有利于隐藏高延迟事件,例如最后一级缓存未命中,更易于实现,并且对类似 VLIW 的调度更友好。SoEMT 也比 SMT 更适合小型 L1(假设 L2 稍快),因为缓存争用更多地移至 L2 或 L3(线程切换之间的数千次访问),鉴于它们的更大容量和更高的关联性,它们可以更好地处理争用。SMT 可用于隐藏较小的延迟,如分支解析延迟或 L2 缓存命中,并提供指令级并行性,但会引入更激烈的资源争用。

(禁用超线程和不使用超线程之间也有区别。禁用超线程可能会提供小的性能优势,因为即使是非活动但启用的线程也会使用一些可共享的资源,并且一些分区资源可能仍会使用少量的电源,但主要的好处是防止操作系统做出破坏性的调度决策。)

对于“正常”代码,可用的线程级并行度可能低于可用的内核数。在这种情况下,现代操作系统通常不会使用硬件多线程,因为它认为完整的内核比由多个线程共享的内核具有更高的性能。(理论上,在使用 L1 在线程之间通信非常有用的特殊情况下,共享内核可以提高性能。此外,在活动内核上唤醒非活动线程比唤醒内核要快得多并且需要更少的能量,因此使用多线程可能在某些特殊情况下有助于提高能源效率。)

HPC 代码往往是 SMT 的最坏情况。HPC 代码更可能对静态调度更友好。这意味着 SMT 的延迟隐藏优势趋于最小化。(类似地,HPC 代码往往从乱序执行中获益较少。)HPC 代码也往往受到内存带宽而不是内存延迟的限制。SMT 可以增加每执行单位的带宽需求(通过增加缓存未命中)通过内存控制器的争用减少实际实现的内存带宽。(DRAM 对随机访问不友好;这会导致过多的刷新和行活动周期。) SMT 还可能导致活动数据流的数量超过硬件对预取的支持。假设每个内核有一个线程,HPC 代码也更有可能根据缓存大小被阻塞;在这种情况下,SMT 将产生严重的缓存抖动。

禁用超线程也可能对群调度操作更友好,这在 HPC 中很常见。如果只有部分内核使用多线程,那么这些内核的每内核性能可能会更高,但每线程的性能会更低;这迫使其他核心闲置等待减慢的线程完成。(HPC 系统可能具有专用的操作系统内核和备用内核以避免类似问题,其中操作系统活动会减慢一个内核/线程并迫使数百个其他内核/线程等待,或者发生故障的内核可能导致例如 16 线程群调度程序运行 15 个线程,然后运行 ​​1 个线程,执行时间加倍。)

(理论上,SMT 可用于 HPC 以减少某些优化循环中的寄存器压力,因为双线程内核中 FMADD 等操作的有效延迟可能被视为大致减半。由于编译器通常使用固定延迟进行调度 [SMT被视为一个透明的特征],利用这个特征通常是不切实际的,即使它可能是有益的。)

就像乱序执行一样,SMT 对不规则代码最有利。(OoO 在指令级和内存级并行性的单个代码流中向前看;对于这种并行性,SMT 跨线程“横向”地寻找这种并行性。)如果分支错误预测和缓存未命中很常见,SMT 可以使用现有的线程级并行性来隐藏这种延迟(分支错误预测的成本主要在于解决的延迟)。

SMT 的好处因工作负载和特定硬件而异。像最初的英特尔凌动这样的深度流水线有序微架构比更浅的流水线 OoO 微架构从 SMT 中受益更多(延迟,尤其是分支解析延迟,通常随着更长的流水线而更高,并且 OoO 提供了一些并行性,否则 SMT 的线程会使用这些并行性级并行性)。

启用的超线程还可能具有增加应用程序使用的线程数量的缺点,其中随着线程数的增加,性能扩展是足够亚线性的,因此使用超线程的每个线程的较低性能将导致性能的净损失。例如,如果每核双线程超线程提供每核性能 30% 的提升,而线程数增加一倍则性能提升 50%,那么总性能将下降 2.5%。

“当有疑问时,衡量”的标准建议显然适用。

于 2014-03-11T21:04:25.317 回答
0

显然有些人不明白一些事情。我已经这样做了,这是我从网站复制的内容:

根据您上次购买计算机的时间,您可能还记得超线程是英特尔推出然后停止使用的一项功能。可以理解,这会在您的嘴里留下酸味——如果不是麻烦,英特尔为什么会停止它呢?事实并没有那么严峻。超线程一度在某些 Intel Pentium 4 和 Intel Xeon 处理器上可用。它被停产并不是因为该功能本身不好,而是因为使用它的处理器由于其他原因而出现了一些失误。Pentium 4 架构对 Intel 来说是一场小灾难,因为它无法按照 Intel 希望的方向发展(Intel 希望拥有时钟速度高达 10 GHz 的 Pentium 4 处理器)。因此,英特尔重新开始设计基于 Pentium Pro 家族树的处理器。超线程消失了,但没有忘记。英特尔最终找到了时间和资源将其集成到另一个新的处理器架构 - Nehalem。这是当前所有英特尔酷睿 i3、i5 和 i7 处理器的基础架构。

来源: http: //www.makeuseof.com/tag/hyperthreading-technology-explained/

于 2014-08-01T09:22:21.123 回答