Multithreading 绘制加速曲线与OpenMP线程数-可扩展性? 我正在使用一个使用OpenMP线程的C++代码。我已经绘制了加速曲线与OpenMP线程数和理论曲线(如果代码能够完全并行化的话)

Multithreading 绘制加速曲线与OpenMP线程数-可扩展性? 我正在使用一个使用OpenMP线程的C++代码。我已经绘制了加速曲线与OpenMP线程数和理论曲线(如果代码能够完全并行化的话),multithreading,openmp,scalability,parallelism-amdahl,Multithreading,Openmp,Scalability,Parallelism Amdahl,这是一幅图: 从这幅图上,我们可以说这段代码是不可伸缩的(从并行化的角度来看)?i、 e使用2个OpenMP线程时,代码的速度不会快两倍,使用4个线程时,代码的速度不会快四倍,等等 感谢代码在16个线程上几乎没有达到2.5倍的加速,公平地说,它不能扩展。然而,“不可伸缩”通常被认为是一个更强有力的说法。根据我的理解,区别在于“不可伸缩”通常指的是特定的实现,并不意味着固有的无法伸缩;换句话说,如果消除了瓶颈,也许您可以使其扩展。另一方面,“不可伸缩”通常意味着“在不改变核心算法的情况下,您无法

这是一幅图:

从这幅图上,我们可以说这段代码是不可伸缩的(从并行化的角度来看)?i、 e使用2个OpenMP线程时,代码的速度不会快两倍,使用4个线程时,代码的速度不会快四倍,等等


感谢代码在16个线程上几乎没有达到2.5倍的加速,公平地说,它不能扩展。然而,“不可伸缩”通常被认为是一个更强有力的说法。根据我的理解,区别在于“不可伸缩”通常指的是特定的实现,并不意味着固有的无法伸缩;换句话说,如果消除了瓶颈,也许您可以使其扩展。另一方面,“不可伸缩”通常意味着“在不改变核心算法的情况下,您无法使其伸缩”。假设有这样的含义,我们不能仅仅看图表就说“一个问题/代码/算法是不可伸缩的”


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

这台机器上有16个内核吗?我们可以说代码无法扩展。但这与说它不可伸缩略有不同。是的,我运行这段代码的机器有16个内核@高性能:“不可伸缩”和“不可伸缩”之间有什么区别?Alexey的回答抓住了我看到的不可伸缩和不可伸缩之间的大部分区别。