【问题标题】:plot speed up curve vs number of OpenMP threads - scalability?绘制加速曲线与 OpenMP 线程数 - 可扩展性?
【发布时间】:2014-12-18 07:19:14
【问题描述】:

我正在编写使用 OpenMP 线程的 C++ 代码。我绘制了加速曲线与 OpenMP 线程数和理论曲线的关系(如果代码能够完全并行化)。

这是这个情节:

从这张图中,我们可以说这段代码不可扩展吗(从并行化的角度来看)?即代码不是用 2 个 OpenMP 线程快两倍,用 4 个线程等快四...?

谢谢

【问题讨论】:

  • 你这台机器有16核吗?
  • 我们可以说代码无法扩展。但这与说它不可扩展略有不同。
  • 是的,我运行此代码的机器有 16 个内核。 @HighPerformance:“不可扩展”和“不可扩展”有什么区别?
  • Alexey 的回答体现了我在 not scalingnot scaling 之间看到的大部分差异。

标签: multithreading openmp scalability parallelism-amdahl


【解决方案1】:

对于在 16 个线程上几乎无法实现 2.5 倍加速的代码,可以公平地说它无法扩展。然而,“不可扩展”通常被认为是一个更强有力的陈述。据我了解,区别在于“无法扩展”通常是指特定的实现,并不意味着固有的无法扩展;换句话说,如果消除了瓶颈,也许你可以扩大规模。另一方面,“不可扩展”通常意味着“你不能让它扩展,至少在不改变核心算法的情况下不能”。假设这样的含义,不能只看图表就说“问题/代码/算法不可扩展”。

另外说明,期望完美的缩放并不总是合理的(2x 使用 2 个线程,4x 使用 4 个线程等)。与理想缩放“足够接近”的曲线仍可能被认为显示出良好的可缩放性; “足够接近”的含义可能取决于许多因素。当可伸缩性是一个问题时,告诉/想到parallel efficiency 而不是加速可能很有用。例如,如果并行效率为 0.8(或 80%)并且在线程数增加时没有下降,则可以认为它具有良好的可扩展性。此外,某些程序可能会很好地扩展至一定数量的线程,但如果添加更多资源,则会保持平稳甚至下降。

【讨论】:

    猜你喜欢
    • 2014-10-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多