我试图调和观察到的差异,即 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% 利用率?也许这是一个配置选项?
感谢您的回复。