【问题标题】:openmp theory vs in-practice efficiency?openmp理论与实践效率?
【发布时间】:2023-12-19 09:08:02
【问题描述】:

当我增加一个令人尴尬的并行线性问题的核心数量时(一个 for 循环,其中每次迭代进行大量计算,都独立于其他迭代),效率降低(效率为 Ts/(p*Tp) )以某种方式与核心数量呈线性关系

我知道在实践中线程调度、操作系统和缓存问题会大大减慢实现速度。

我可以补充一点,我确实得到了加速,理论上的问题是线性加速,理论上 随着 p 的增加,效率为 1。

那么问题:随着处理器数量的增加,操作系统、线程调度、内存访问和其他类型的技术限制如何影响算法的效率????会不会有影响?

【问题讨论】:

  • 无法回答,因为这取决于问题和实现。 “可接受”对我来说似乎是主观的。
  • 添加了更多信息,希望可以回答这个问题
  • 不行,还是太笼统了。
  • 我可以看到变化;请参阅下面的答案。

标签: c performance parallel-processing openmp


【解决方案1】:

您可能正在考虑类似Amdahl's Law 之类的东西,但每个案例的具体情况很难确定。

【讨论】:

  • 谢谢,我刚才已经看过了,确实有助于澄清发生了什么,但是对我来说仍然是一个谜,有多少内存、操作系统和缓存会影响 openmp 的效率。我想知道其他人是否有线性加速算法的效率线性下降
【解决方案2】:

您应该考虑强缩放:

https://www.sharcnet.ca/help/index.php/Measuring_Parallel_Scaling_Performance#Strong_Scaling

由于您提到的所有因素,当您向问题添加更多核心时,您基本上会获得递减收益。

【讨论】:

  • 谢谢,我认为这是正在发生的事情(收益递减)。我曾经在 gpus 中编程,但我没有看到效果如此明显,可能是因为问题的类型。
  • 我建议做一个强大的扩展测试,然后获取产生最快结果的核心数量。但请记住,这将取决于机器
【解决方案3】:

您的问题是 CPU 受限还是内存受限?您的系统架构是什么——SMP 还是 NUMA?您的处理器有多少缓存?您是否将线程绑定到核心? ...

在任何人回答您的问题之前,需要考虑的参数太多。我建议您使用 Intel VTune Amplifier 或 Oracle Collector/Analyzer 之类的东西,以了解导致效率越来越低的原因和原因。

【讨论】: