并行程序无法实现理想加速的原因是什么?
例如,我考虑过数据依赖性,线程(或参与者)之间数据传输的成本,访问相同数据结构的同步,任何其他想法(或我提到的原因的子类别)?
我对erlang actor模型中出现的问题特别感兴趣,但欢迎任何其他问题。
答案 0 :(得分:5)
一些没有特别的顺序:
答案 1 :(得分:4)
一个原因是程序的并行化通常比想象的更困难,并且可能发生许多微妙的问题。有关此问题的非常好的讨论,请参阅Amdahl's Law。
答案 2 :(得分:2)
Erlang Actor模型的主要问题是每个进程都有自己的内存堆,并且传递的消息被复制。与使用共享内存的常用方法形成对比,您可以将指针传递给进程之间的结构。
在共享内存环境中,程序员可以确保一次只有一个进程/线程在一块内存上运行。也就是说,某些进程被指定为 it ,并负责在该内存区域上做正确的事情。在Erlang中没有那么多:一个进程不能通过设计在其他进程内存区域中进行翻找,并且必须将值复制到其他进程。当我们考虑程序的健壮性时,这是非常强大的,但如果我们考虑程序执行的速度,则不是那么强大。另一方面,如果我们想要一台多台计算机的分布式环境,复制统治着王,这是在机器之间传输数据的唯一方法。
Amdahl定律发挥作用,因为您的程序的某些部分可能无法在多个核心上展开。有些问题本质上是连续的:你没有希望加速它们。通常它们是迭代的,其中每个新的迭代都依赖于前者,你无法猜测新的迭代。