看板 Mathematica 關於我們 聯絡資訊
最近遇到計算量較大的問題,想使用Mathematica的平行運算功能節省時間 原本以為直接把Table換成ParallelTable就可以了,但是事情似乎沒這麼簡單 比方說產生隨機變數的時候ParallelTable會顯示一些不存在的錯誤 http://i.imgur.com/YLWcfKF.png
這還不是甚麼大問題,反正還是算得出一樣的答案,但其他的函數就會有沒辦法計算的 狀況,像是我的Table裡有內插函數就會卡住無法計算 http://i.imgur.com/nn3JJb3.png
改成ParallelDo也遇到相同的狀況 請問使用平行運算的時候需要注意哪些問題,謝謝 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 140.109.222.98 ※ 文章網址: https://www.ptt.cc/bbs/Mathematica/M.1459585635.A.202.html ※ 編輯: Absolitude (140.109.222.98), 04/02/2016 16:30:21
AmibaGelos: 沒測試純猜測:你的DistributedContexts沒設 04/02 20:48
AmibaGelos: 可以改成Automatic,預設好像是只會把Context裡的分享 04/02 20:49
AmibaGelos: 然後第一個是因為它先讀local變數(所以無法執行)然後 04/02 20:50
AmibaGelos: 再去讀主kernal的變數的關係 04/02 20:51
AmibaGelos: 然後怕沒傳到子kernal的話可以用DistributedDefine 04/02 20:53
Absolitude: 謝謝,第一個問題解決了! 04/02 21:36
Absolitude: DistributedContexts 是第七版之後才有的函數嗎? 剛剛 04/02 21:37
Absolitude: 大概查一下好像沒有 04/02 21:37
AmibaGelos: 我的是9,建議最好還是手動把def.都傳到子kernal上 04/02 21:56
Absolitude: 我使用DistributeDefinitions["Global`"]把變數都 04/02 22:10
Absolitude: 傳到子kernal了,但是內插函數是每一次運算時才分別被 04/02 22:11
Absolitude: 定義,也不用(或者說不行)分享給其他kernal 04/02 22:14
Absolitude: 這樣是DistributedContexts的問題嗎?查到的這個函數 04/02 22:16
Absolitude: 的意思好像是把定義分享給其他kernal 04/02 22:17
AmibaGelos: g=InverseErf[2RandomReal[]-1]&;DistributeDefinitio 04/02 23:26
AmibaGelos: s[g];ParallelDo[Interpolation[Array[g,9]]//Plot[#[ 04/02 23:26
AmibaGelos: x],{x,1,9}]&//Print,{8}] 你試試看這個.我是沒問題的 04/02 23:27
Absolitude: 沒問題! 不過比方說要是在ParallelTable裡再建Table 04/03 17:57
Absolitude: 或Sum 或用Do進行大量相加都會出問題 04/03 17:58
Absolitude: 板友提供用Module搭配ParallelMap的方式看來成功了 04/04 20:27
Absolitude: 謝謝你們~ 不過這樣算好像非常吃記憶體@@ 04/04 20:28