多线程 – Julia v0.5中不同形式并行的开销是多少?

前端之家收集整理的这篇文章主要介绍了多线程 – Julia v0.5中不同形式并行的开销是多少?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
正如标题所述,不同形式的并行性的开销是多少,至少在目前的Julia(v0.5)实施中,如果实现在将来发生巨大变化的话)?我正在寻找一些“实际措施”,一些一般的启发式或球场,以保持我的头脑,当它是有用的.例如,很显然,多处理不会给你一个循环的收益,如:
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

(我知道现在没有一个线程化的减少,但是让我们的行为就像是有,或者用更好的例子编辑).当然,我可以对每一个例子进行评估,但要记住一些很好的规则将会有很长的路要走.

更具体地说:什么是一些很好的经验法则?

>在线程化之前,需要添加/乘法才能提供多少个数字,或在多处理之前提供性能增强?
>依赖朱莉娅目前的实施有多少?
>它取决于线程/进程的数量
>依赖于架构有多少?有没有很好的规则知道什么时候阈值应该在特定系统上更高/更低?
>什么样的应用违反了这些启发式?

再次,我不是在寻找硬规则,只是一般的指导方针来指导开发.

解决方法

一些注意事项:1.我从0.4.6版(和以前)的经验中说,还没有使用0.5(但是,因为我希望我的答案如下所示,我不认为这是必要的 – 对我给出的回应).这不是一个完全全面的答案.

然而,从我的经验来看,多进程本身的开销很小,只要您不处理数据移动问题.换句话说,根据我的经验,任何时候,你发现自己处于希望的状态比cpu上的单一进程要快一些,你可以很好地理解并行性是有益的.例如,在您给出的随机数字示例的总和中,我通过测试发现,盈亏平衡点是大约10,000个随机数.更多和平行主义是明确的赢家.生成10,000个随机数对于现代计算机来说是微不足道的,只需要几分之一秒,并且远远低于我的脚本缓慢的令人沮丧的门槛,并希望并行加速它们.

因此,至少我认为,尽管茱莉亚开发者可能会做更多精彩的事情来减少开销,但到目前为止,与朱莉娅有关的任何事情都不会那么多至少在平行度的计算方面,你的限制因素.我认为在提高并行数据移动的方便性和效率方面还有待改进(我喜欢你已经在该主题上开始的一揽子方案,您可以同意这一点)还有更多的方式去).但是,大的限制因素是:

>您需要在进程之间移动多少数据?
>您在计算过程中需要做多少读/写记忆? (例如,每次读取/写入的触发器)

方面1.有时可能倾向于使用并行性.方面2.更有可能只是意味着你不会从中受益匪浅.而且,至少在我解释“开销”的时候,这些都不直接落在这个具体的考虑之中.而且,我相信这两者都将比您的系统硬件要高出茱莉亚.

原文链接:https://www.f2er.com/java/124057.html

猜你在找的Java相关文章