超线程使我的代码运行得更慢?

时间:2017-10-14 22:18:50

标签: hyperthreading

我刚写的一些多线程代码似乎在超线程CPU下运行速度较慢 - 即禁用超线程使其运行得更快。这是正常的吗?

1 个答案:

答案 0 :(得分:1)

这完全取决于用例。像 normal 这样的主观术语有很多余地!有超线程(HT)有意义的用例,以及会对性能产生影响的情况。

性能下降的一个例子是大量使用AVX指令的应用程序。 AVX指令在矢量处理单元(VPU)中执行,其中Intel Xeon处理器中每个核心有一个。如果VPU不可用,则在尝试访问VPU时会阻塞其他线程,导致使用HT不会提高性能。

如果您说有4个带HT的内核,允许您运行8个线程,您实际上一次只能运行4个VPU指令 - 因此您的其他4个线程将在完成时被阻止。阻塞和调度的额外开销通常会使您的吞吐量低于在4个核心上运行4个线程并且禁用HT的情况。

同样,在8个内核上只运行4个线程,OS调度程序可以调度线程在任何物理内核上运行 - 因此可能仍有可能一个线程阻塞等待另一个线程完成。一些较新的应用程序和作业调度程序现在可以与操作系统协调以“固定”物理内核上的线程,允许启用HT,但不要超额预订核心上运行的线程数量。随着时间的推移,这可能会变得更好,但确实需要开发人员的意识。

对于更多通用用例,例如处理多种类型工作负载的通用服务器,HT在单核中运行其他线程的优势通常会带来性能提升。