加速上限

时间:2015-10-06 13:36:36

标签: performance parallel-processing mpi distributed distributed-computing

我的MPI经验表明,加速不会随着我们使用的节点数量线性增加(因为通信成本)。我的经历类似于:MPI speedup drops after some point

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

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

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

3 个答案:

答案 0 :(得分:5)

并行效率(加速/并行执行单元数)超过统一并不罕见。

主要原因是并行程序可用的总缓存大小。使用更多的CPU(或核心),可以访问更多的高速缓存。在某些时候,大部分数据都适合缓存,这大大加快了计算速度。另一种看待它的方法是,你使用的CPU /核心越多,每个人获得的数据部分就越小,直到该部分实际上可以放入单个CPU的缓存中。但是,这通过通信开销迟早会被取消。

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

问题来自错误使用的术语理想加速。理想情况下,人们会考虑缓存效果。我宁愿使用线性

答案 1 :(得分:2)

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

当您使用MPI在内存中分发数据时并行化代码时,通常会出现加速的超线性。在某些情况下,通过在多个节点/进程之间分配数据,最终会有足够小的数据块来处理它适合处理器缓存的每个单独进程。这种缓存效应可能会对代码的性能产生巨大影响,从而大大提高速度并补偿MPI通信需求的增加......这在许多情况下都可以观察到,但这并不是你可以用来弥补可扩展性差的东西。

另一种可以观察到这种超线性可伸缩性的情况是,当你有一个算法来分配在大型集合中查找特定元素的任务时:通过分配你的工作,你可以最终进入其中一个进程/线程几乎立即找到结果,只是因为它恰好给出了非常接近答案的索引范围。但是这种情况比上述缓存效果更不可靠。

希望能让你了解超线性的含义。

答案 2 :(得分:1)

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

实际上这与其他答案中提到的缓存效果相同,使用额外的资源。这真的是诀窍 - 更多的节点并不仅仅意味着更多的内核,它还意味着更多的资源,所以如果你还可以使用其他额外的资源以达到良好的效果,你可以实现加速真正衡量你的核心用途超线性加速。