HyperThreading/SMT是一个有缺陷的概念吗?

Eng*_*eer 8 multithreading hyperthreading

HT/SMT背后的主要思想是,当一个线程停止时,同一内核上的另一个线程可以共同选择剩余的内核空闲时间并透明地运行它.

2013年,英特尔放弃了SMT,转而支持Silvermont处理器内核的无序执行,因为他们发现这可以提供更好的性能.

ARM不再支持SMT(出于能源原因).AMD从不支持它.在野外,我们仍然有各种支持它的处理器.

从我的角度来看,如果构建数据和算法是为了不惜一切代价避免缓存未命中和后续处理停滞,那么HT在多核系统中肯定是一个冗余因素吗?虽然我很欣赏上下文切换所涉及的开销很低,因为两个HyperThreads的离散硬件存在于同一物理内核中,但我看不出这比没有上下文切换更好.

我建议,任何需要针对超线程点缺陷的软件设计.这里有什么我想念的吗?

amd*_*mdn 7

超线程是否有帮助以及多少取决于线程正在做什么.它不只是在一个线程中进行工作而另一个线程等待I/O或缓存未命中 - 尽管这是理由的一个重要部分.它是关于有效地使用CPU资源来增加总系统吞吐量.假设你有两个线程

  1. 一个人有很多数据缓存未命中(空间局部性差)并且不使用浮点,差的空间局部性不一定是因为程序员没有做好工作,一些工作负载固有地如此.
  2. 另一个线程是从内存中流式传输数据并进行浮点计算

使用超线程,这两个线程可以共享相同的CPU,一个是进行整数运算并获得缓存未命中和停止,另一个是使用浮点单元,数据预取器远远超前预测来自内存的顺序数据.系统吞吐量优于O/S交替调度同一CPU内核上的两个线程.

英特尔选择不在Silvermont中包含超线程,但这并不意味着它将在高端Xeon服务器处理器中,甚至在针对笔记本电脑的处理器中取消它.选择处理器的微架构涉及权衡,有许多考虑因素:

  1. 什么是目标市场(将运行什么样的应用程序)?
  2. 什么是目标晶体管技术?
  3. 性能目标是什么?
  4. 功率预算是多少?
  5. 什么是目标芯片尺寸(影响产量)?
  6. 它适用于公司未来产品的价格/性能范围?
  7. 什么是目标发布日期?
  8. 有多少资源可用于实施和验证设计?添加微架构功能增加了复杂性,这不是线性的,与其他功能有微妙的交互,目标是在第一次"流片"之前识别尽可能多的错误,以最大限度地减少必须完成的"步数"之前一个工作芯片.

Silvermont的每个核心和功率预算的芯片尺寸预算不包括无序执行和超线程,并且无序执行提供更好的单线程性能. 这是Anandtech的评估:

如果我不得不用Silvermont描述英特尔的设计理念,那将是明智的缩放.我们已经从苹果公司和Swift看到了这一点,从高通公司看到了Krait 200到Krait 300的过渡.请记住使用原始Atom实现的设计规则:每增加2%的性能,Atom架构师最多可以将功率提高1%.换句话说,性能可以提升,但每瓦性能不会下降.Silvermont坚持设计理念,我想我对如何有所了解.

以前版本的Atom使用超线程来充分利用执行资源.超线程有一个与之相关的功率损失,但性能提升足以证明它的合理性.在22nm,英特尔有足够的芯片面积(由于晶体管缩放)只需添加更多内核而不是依赖HT来获得更好的线程性能,因此超线程已经消失.英特尔从摆脱超线程中获得的节能随后被分配用于使Silvermont成为无序设计,这反过来有助于提高执行资源的有效使用而无需HT.事实证明,在22nm处,英特尔用于启用HT的芯片面积与Silvermont的重新订购缓冲器和OoO逻辑大致相同,因此此举甚至没有面积损失.


phu*_*clv 5

  1. 并非所有程序员都有足够的知识、时间和许多其他东西来编写高效、缓存友好的程序。大多数情况下,仅在需要时优化关键部分。其他部分可能有很多缓存未命中
  2. 即使在编写程序时考虑了缓存效率,也可能无法完全消除缓存未命中。缓存可用性是仅在运行时才知道的动态信息,程序员和编译器都不知道要优化内存访问。
    • 缓存不可预测性是Itanium 失败的原因之一,因为虽然编译器可以重新排序算术运算,但它无法在多线程环境中猜测这些缓存信息以有效地重新排序内存加载/存储。
    • 每次高速缓存未命中时,都会浪费数百个周期,这对于其他目的是有用的。一些 CPU 会乱序执行。但即使是 OoO 执行也有其局限性,您有时会被阻止。在等待所有内存问题解决期间,您可以切换到另一个 CPU 线程并继续运行。
  3. 现在使用 SMT 的不仅仅是英特尔。AMD Bulldozer 具有模块多线程,它是部分 SMT。还有很多其他架构使用 SMT,例如 MIPS、PowerPC……甚至还有每个内核 8 或 16 个线程的 CPU,例如 12 核 96 线程的power8 CPU

AMD 模块多线程

https://en.wikipedia.org/wiki/Simultaneous_multithreading#Modern_commercial_implementations

更新:

AMD 现在已在Zen 微架构中转向完全 SMT

禅宗贴片机