作者热门文章
- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我在超线程 CPU 上使用 OpenMP
代码。
如果其他条件都相同,在非超线程 CPU 上性能会如何变化?
我注意到处理器利用率为 100%,无论我运行多少线程,但改变线程数确实可以提高性能。怎么会这样?
非 INTEL 多线程 CPU 的情况是否相同?
最佳答案
超线程带来的性能提升(如果有的话)很难预测。
超线程意味着如果一个线程由于(几乎)任何原因而停止,CPU 将有一个来自另一个线程的指令池来(尝试)执行。即使没有真正的停顿,如果两个线程被安排使用不同的执行资源,来自两个线程的指令也可以在同一个内核上同时执行。因此,例如,如果代码严重依赖于主内存延迟(例如,没有预取的不可预测的读取模式),超线程可能会显着提高性能。
另一方面,如果通过谨慎使用缓存、预取等方式仔细编写代码以覆盖延迟,那么它可能从超线程中获益甚微或一无所获。特别是对于不尝试在其线程调度中考虑超线程的旧操作系统,额外的线程实际上会导致额外的上下文切换,从而减慢整体执行速度。
假设您从完全单线程的代码开始,并添加一些 OpenMP 指令,我自己的经验是超线程通常有利于将性能提高大约 10%。如果代码几乎尝试了任何预定义或类似的东西,那么大部分(如果不是全部)优势几乎会立即消失。
关于c++ - 超线程如何影响并行化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35355944/
我是一名优秀的程序员,十分优秀!