addprocs(4) @parallel (+) for i=1:4 rand() end
不会给你带来性能上涨,因为每个进程只是采取一个随机数,但是是否有一般启发式知道什么时候是值得的?而且,一个启发式的线程呢.它的开销肯定比多处理器要低,但是例如,使用4个线程,N是多线程的好主意:
A = rand(4) Base.@threads (+) for i = 1:N A[i%4+1] end
(我知道现在没有一个线程化的减少,但是让我们的行为就像是有,或者用更好的例子编辑).当然,我可以对每一个例子进行评估,但要记住一些很好的规则将会有很长的路要走.
更具体地说:什么是一些很好的经验法则?
>在线程化之前,需要添加/乘法才能提供多少个数字,或在多处理之前提供性能增强?
>依赖朱莉娅目前的实施有多少?
>它取决于线程/进程的数量?
>依赖于架构有多少?有没有很好的规则知道什么时候阈值应该在特定系统上更高/更低?
>什么样的应用违反了这些启发式?
再次,我不是在寻找硬规则,只是一般的指导方针来指导开发.
解决方法
然而,从我的经验来看,多进程本身的开销很小,只要您不处理数据移动问题.换句话说,根据我的经验,任何时候,你发现自己处于希望的状态比cpu上的单一进程要快一些,你可以很好地理解并行性是有益的.例如,在您给出的随机数字示例的总和中,我通过测试发现,盈亏平衡点是大约10,000个随机数.更多和平行主义是明确的赢家.生成10,000个随机数对于现代计算机来说是微不足道的,只需要几分之一秒,并且远远低于我的脚本缓慢的令人沮丧的门槛,并希望并行加速它们.
因此,至少我认为,尽管茱莉亚开发者可能会做更多精彩的事情来减少开销,但到目前为止,与朱莉娅有关的任何事情都不会那么多至少在平行度的计算方面,你的限制因素.我认为在提高并行数据移动的方便性和效率方面还有待改进(我喜欢你已经在该主题上开始的一揽子方案,您可以同意这一点)还有更多的方式去).但是,大的限制因素是:
>您需要在进程之间移动多少数据?
>您在计算过程中需要做多少读/写记忆? (例如,每次读取/写入的触发器)
方面1.有时可能倾向于使用并行性.方面2.更有可能只是意味着你不会从中受益匪浅.而且,至少在我解释“开销”的时候,这些都不直接落在这个具体的考虑之中.而且,我相信这两者都将比您的系统硬件要高出茱莉亚.