超线程如何影响并行化?

时间:2016-02-12 06:09:57

标签: c++ multithreading parallel-processing openmp hyperthreading

我在HyperThreaded CPU上使用 OpenMP 代码。

如果所有其他方面都相同,非超线程CPU上的性能如何变化

我注意到100%的处理器利用率,无论我运行多少线程,但改变线程数确实会提高性能。怎么会这样?

非INTEL多线程CPU的故事是否相同?

1 个答案:

答案 0 :(得分:4)

超线程的性能提升(如果有的话)很难预测。

超线程意味着如果一个线程(几乎)因任何原因而停顿,那么CPU将拥有来自另一个线程的指令池(尝试)执行。即使没有实际停顿,如果调度两个使用不同执行资源的线程,则两者的指令可以在同一核上同时执行。因此,例如,如果代码严重依赖于主内存延迟(例如,没有预取的不可预测的读取模式),超线程可能会大大提高性能。

在另一个方向上,如果通过仔细的缓存使用,预取等来仔细编写代码以覆盖延迟,则可能从超线程中获得很少或没有。特别是对于没有尝试在线程调度中考虑超线程的旧操作系统,额外的线程实际上可能导致额外的上下文切换,从而减慢整体执行速度。

假设您从完全单线程代码开始,并添加了一些OpenMP指令,我自己的经验是,超线程通常可以通过订单中的某些内容或10%来提高性能。如果代码几乎完成了任何类似的尝试,那么大多数(如果不是全部)这种优势几乎立即就会消失。