Erlang 并行程序中次线性加速的原因

Erlang 并行程序中次线性加速的原因,erlang,multicore,parallel-processing,performance,Erlang,Multicore,Parallel Processing,Performance,并行化程序没有达到理想加速比的原因是什么 例如,我考虑过数据依赖性、线程(或参与者)之间数据传输的成本、访问相同数据结构的同步、任何其他想法(或我提到的原因的子类别) 我对erlang actor模型中出现的问题特别感兴趣,但欢迎任何其他问题。一些没有特定顺序的问题: 缓存线共享-同一缓存线上的多个变量可能会导致处理器之间的开销,即使理论模型说它们应该是独立的 上下文切换开销-如果线程数多于核心数,则上下文切换会有开销 内核可伸缩性问题:内核在4个内核时可能很好,但在8个内核时效率较低 -程序

并行化程序没有达到理想加速比的原因是什么

例如,我考虑过数据依赖性、线程(或参与者)之间数据传输的成本、访问相同数据结构的同步、任何其他想法(或我提到的原因的子类别)


我对erlang actor模型中出现的问题特别感兴趣,但欢迎任何其他问题。

一些没有特定顺序的问题:

  • 缓存线共享-同一缓存线上的多个变量可能会导致处理器之间的开销,即使理论模型说它们应该是独立的
  • 上下文切换开销-如果线程数多于核心数,则上下文切换会有开销
  • 内核可伸缩性问题:内核在4个内核时可能很好,但在8个内核时效率较低
  • -程序并行加速的限制是可并行化程序的比例
    一个原因是,并行化一个程序往往比想象的要困难,而且可能会出现许多微妙的问题。有关这方面的详细讨论,请参见。

    Erlang Actor模型中的主要问题是每个进程都有自己的内存堆,传递的消息会被复制。与通常使用共享内存的方式不同,在共享内存中,可以在进程之间传递指向结构的指针

    在共享内存环境中,由程序员来确保一次只有一个进程/线程在内存上运行。也就是说,某个进程被指定为它,并负责在该内存区域上执行正确的操作。在Erlang中并没有这么多:一个进程不能通过设计在其他进程的内存区域中搜索,您必须将值复制到其他进程。当我们考虑程序的稳健性时,这是非常强大的,但如果我们考虑程序执行的速度,则不是那么强大。另一方面,如果我们想要一个由多台计算机组成的分布式环境,复制是最重要的,也是在机器之间传输数据的唯一方式

    阿姆达尔定律之所以起作用,是因为程序的某些部分可能不可能分布在多个核上。有一些问题本质上是连续的:你没有希望加速它们。通常,它们是迭代的,每个新的迭代都依赖于前者,你不能猜测新的迭代