超线程如何影响并行化?

How does hyperthreading affect parallelization?

我在 HyperThreaded CPU.

上使用 OpenMP 代码

如果其他所有条件都相同,在非超线程 CPU 上性能会如何变化

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

非 INTEL 多线程 CPU 的情况是否相同?

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

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

另一方面,如果通过仔细使用缓存、预取等方式仔细编写代码以覆盖延迟,则它可能从超线程中获益甚微或一无所获。特别是对于不尝试在线程调度中考虑超线程的旧操作系统,额外的线程实际上会导致额外的上下文切换,从而减慢整体执行速度。

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