我正在努力调和omp代码在具有超线程的两个不同系统上运行的方式所观察到的差异。系统1是带有Centos 5.4的Intel Xeon X5680(12个物理处理器/ 24个逻辑处理器)。系统2是带有Windows 7的Intel Xeon E5645(6个物理处理器/ 12个逻辑处理器)。
代码高度可并行化,并且可以很好地利用每个线程。
我首先在系统1上运行代码,该代码演示了标准的加速,增加了线程,直到线程数超过了物理内核的数量。超过物理内核数量后,加速变得不一致,并且低于我使用12个线程实现的峰值加速。最初,我发现这种行为是有意义的,假设12个线程完全使用了12个物理处理器,并且额外的线程没有帮助,因为前12个完全利用了物理处理器。
然后,我运行了系统2,它展示了一直加速到12个线程(物理处理器数量的两倍)。我发现这令人费解,因为当我超过物理处理器的数量时,我预计速度会停止。那么,我检查了一个包含6个线程的运行,发现每个线程仅限于半个物理处理器 - 而且完全利用物理处理器的唯一方法是启动12个线程。
所以我认为我的问题是,为什么系统1允许单个超线程充分利用物理处理器,而系统2将超线程限制为物理处理器的50%利用率?也许这是一个配置选项?
感谢您的回复。