Performance 加速上限

Performance 加速上限,performance,parallel-processing,mpi,distributed,distributed-computing,Performance,Parallel Processing,Mpi,Distributed,Distributed Computing,我的MPI经验表明,加速比as不会随着我们使用的节点数线性增加(因为通信成本)。我的经验与此相似: 今天一位发言者说:“神奇的是(微笑),在某些情况下,我们可以获得比理想情况下更快的速度!” 他的意思是,理想情况下,当我们使用4个节点时,我们将获得4的加速比。但在某些情况下,我们可以得到大于4的加速比,4个节点!该主题与MPI相关 这是真的吗?如果是这样的话,有人能提供一个简单的例子吗?或者他正在考虑向应用程序中添加多线程(他没时间了,然后不得不尽快离开,因此我们无法讨论)?不太确定这里的主题是

我的MPI经验表明,加速比as不会随着我们使用的节点数线性增加(因为通信成本)。我的经验与此相似:

今天一位发言者说:“神奇的是(微笑),在某些情况下,我们可以获得比理想情况下更快的速度!”

他的意思是,理想情况下,当我们使用4个节点时,我们将获得4的加速比。但在某些情况下,我们可以得到大于4的加速比,4个节点!该主题与MPI相关


这是真的吗?如果是这样的话,有人能提供一个简单的例子吗?或者他正在考虑向应用程序中添加多线程(他没时间了,然后不得不尽快离开,因此我们无法讨论)?

不太确定这里的主题是什么,但这里什么都没有

当使用MPI在内存中分发数据时,并行化代码时,通常会出现这种超线性加速。在某些情况下,通过将数据分布在多个节点/进程上,您最终会得到足够小的数据块,以处理适合处理器缓存的每个进程。这种缓存效应可能会对代码的性能产生巨大的影响,从而大大提高了速度,并弥补了MPI通信需求的增加。。。这在许多情况下都可以观察到,但这并不是补偿较差的可伸缩性的真正原因

另一种可以观察到这种超线性可伸缩性的情况是,当你有一个算法,在这个算法中,你分配在一个大集合中查找特定元素的任务:通过分配你的工作,你可以在一个进程/线程中几乎立即找到结果,只是因为它恰好被给定了一系列的索引,这些索引开始时非常接近于答案。但这种情况甚至不如前面提到的缓存效果可靠

希望这能让你体会到什么是超线性。

统一之上的并行效率(速度/并行执行单元的数量)并不少见

主要原因是并行程序可用的总缓存大小。有了更多的CPU(或内核),就可以访问更多的缓存。在某些情况下,很大一部分数据适合缓存,这大大加快了计算速度。从另一个角度来看,使用的CPU/内核越多,每个CPU获得的数据部分就越小,直到该部分可以实际放入单个CPU的缓存中。但这迟早会被通信开销所抵消

此外,您的数据还显示了与单个节点上的执行相比的速度。在使用MPI进行内部数据交换时,使用OpenMP可以消除一些开销,因此与纯MPI代码相比,可以获得更好的速度


问题来自于使用不当的术语理想加速。理想情况下,可以考虑缓存效应。我宁愿使用线性

缓存已经提到,但这不是唯一可能的原因。例如,您可以想象一个并行程序,它没有足够的内存来以低节点数存储其所有数据结构,而以高节点数存储其所有数据结构。因此,在节点计数较低的情况下,程序员可能被迫将中间值写入磁盘,然后再次读取它们,或者在需要时重新计算数据。但是,在节点数较高的情况下,这些游戏不再需要,程序可以将其所有数据存储在内存中。因此,超线性加速是一种可能性,因为在节点计数较高时,通过使用额外内存来避免I/O或计算,代码所做的工作就更少了


实际上,这与其他答案中提到的缓存效果相同,在可用时使用额外的资源。这就是真正的诀窍——更多的节点不仅意味着更多的核心,还意味着更多的资源,因此,由于“加速”确实衡量了您的核心使用率,如果您还可以使用其他额外资源来达到良好的效果,您可以实现超线性加速。

使用您最喜欢的搜索引擎中的“超线性加速”一词。@HighPerformanceMark非常好,我没有想到这个词,对不起!我们应该把我的问题标记为重复的吗?我宁愿设法合并它们。您基本上展示了一个通过用另一个线程替换一个并行编程范例在单个节点上实现超线性加速的实例,这在另一个线程中没有涉及。这将是@HristoIliev的理想选择,但我不确定如何做到这一点。我的答案()也有类似之处,但却是一个强大的用户做的。@HighPerformanceMark我不知道“超线性加速”这个词。很高兴知道,在遵循OpenMP标签上的SO两年后(当我刚开始使用OpenMP时),仍然有一些东西需要学习(尽管现在很少)。