openMPI 会导致双 Hexacore 机器出现性能问题吗?

can openMPI cause performance problems on dual Hexacore machine?

我的电脑有 2 个 Intel® Xeon® 处理器 X5650,每个 6 个内核并支持 HT。但是当我 运行 MPI 代码时,它不会超过 6 倍的加速。 这是一些当前 run-times:


所以直到 6 开始处理它 运行 都按计划进行。所有核心都处于活动状态,运行时间减少是线性的。 与 OpenMP 相同。 这可能是由于机器上的缓存不一致造成的吗? 我有一天在 MPI 会议上听说了它。

有解决办法吗?

简而言之,是的,但这是特定于问题的 - 一些应用程序根本不随内核数量线性扩展,并且有很多原因造成这种情况(例如 thread/data 级并行度不足应用)。事实上,根据我的经验,除了令人尴尬的并行应用程序(例如 Monte Carol 模拟?)之外,您很难找到与内核数量完美扩展的应用程序。如果不分析应用程序,任何人都不太可能给您准确的答案,因为次线性缩放有很多可能的原因。

但是,对于您的情况,最明显的问题可能是由超线程 (HT) 引起的。您显示的最违反直觉的结果是,从 12 个线程移动到 24 个线程(即最大程度地使用超线程时)几乎没有加速。在某些情况下,HT 不会导致性能提升。这是典型的情况:

  1. 运行 充分利用CPU 运算单元的应用程序。例如,参见 this
  2. 当每个线程的主内存(例如)有大量 I/O 时(换句话说,如果您的应用程序成为 内存限制 )。您可以使用 roofline model 查看您的应用程序是否受内存或计算限制。

这是因为最终 HT 的工作原理是在该内核上的线程 运行 之间共享 CPU 内核中的许多执行单元。例如,如果每个核心都有一个浮点单元,该单元由该核心上的所有线程 运行 共享,那么无论您使用多少线程,每个时钟周期都不能执行超过一个浮点运算。为了调查这是否是原因,我建议禁用 HT(因为甚至可能会产生性能开销)。 Unix 机器上通常有一个内核引导选项来禁用 HT。

最后,还有一个典型的问题就是双路机一般都是(?)NUMA机。这意味着从不同的 CPU 访问相同的内存内容可能需要不同的时间。所以你的实现应该是 NUMA 感知的。