0

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

这是这个情节:

在此处输入图像描述

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

谢谢

4

1 回答 1

2

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

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

于 2014-10-22T20:05:50.537 回答