[问题] 平行运算 ParallelTable

楼主: Absolitude (别再睡了起床了爱丽)   2016-04-02 16:27:13
最近遇到计算量较大的问题,想使用Mathematica的平行运算功能节省时间
原本以为直接把Table换成ParallelTable就可以了,但是事情似乎没这么简单
比方说产生随机变量的时候ParallelTable会显示一些不存在的错误
http://i.imgur.com/YLWcfKF.png
这还不是什么大问题,反正还是算得出一样的答案,但其他的函数就会有没办法计算的
状况,像是我的Table里有内插函数就会卡住无法计算
http://i.imgur.com/nn3JJb3.png
改成ParallelDo也遇到相同的状况
请问使用平行运算的时候需要注意哪些问题,谢谢
作者: AmibaGelos (Amiba Gelos)   2016-04-02 20:48:00
没测试纯猜测:你的DistributedContexts没设可以改成Automatic,默认好像是只会把Context里的分享然后第一个是因为它先读local变量(所以无法执行)然后再去读主kernal的变量的关系然后怕没传到子kernal的话可以用DistributedDefine
楼主: Absolitude (别再睡了起床了爱丽)   2016-04-02 21:36:00
谢谢,第一个问题解决了!DistributedContexts 是第七版之后才有的函数吗? 刚刚大概查一下好像没有
作者: AmibaGelos (Amiba Gelos)   2016-04-02 21:56:00
我的是9,建议最好还是手动把def.都传到子kernal上
楼主: Absolitude (别再睡了起床了爱丽)   2016-04-02 22:10:00
我使用DistributeDefinitions["Global`"]把变量都传到子kernal了,但是内插函数是每一次运算时才分别被定义,也不用(或者说不行)分享给其他kernal这样是DistributedContexts的问题吗?查到的这个函数的意思好像是把定义分享给其他kernal
作者: AmibaGelos (Amiba Gelos)   2016-04-02 23:26:00
g=InverseErf[2RandomReal[]-1]&;DistributeDefinitios[g];ParallelDo[Interpolation[Array[g,9]]//Plot[#[x],{x,1,9}]&//Print,{8}] 你试试看这个.我是没问题的
楼主: Absolitude (别再睡了起床了爱丽)   2016-04-03 17:57:00
没问题! 不过比方说要是在ParallelTable里再建Table或Sum 或用Do进行大量相加都会出问题

Links booklink

Contact Us: admin [ a t ] ucptt.com