超线程如何影响并行化?

ror*_*oro 6 c++ parallel-processing multithreading openmp hyperthreading

我在OpenMPHyperThreaded CPU上使用代码.

如果其他条件相同,那么非HyperThreaded CPU的性能会如何变化

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

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

Jer*_*fin 5

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

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

另一方面,如果代码被仔细编写以通过谨慎的缓存使用、预取等方式来覆盖延迟,那么它可能从超线程中获得很少或没有任何收益。特别是对于在线程调度中不考虑超线程的旧操作系统,额外的线程实际上会导致额外的上下文切换,从而减慢整体执行速度。

假设您从完全单线程代码开始,并添加一些 OpenMP 指令,我自己的经验是,超线程通常有助于将性能提高 10% 或 10%。如果代码几乎尝试了完善或任何类似的东西,那么大部分(如果不是全部)优势几乎会立即消失。