[問題] 平行運算 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