Re: [問題] 如何使用平行運算或加快計算時間?

看板Mathematica作者 (養花種魚數月亮賞星星)時間13年前 (2011/12/01 13:01), 編輯推噓1(100)
留言1則, 1人參與, 最新討論串2/2 (看更多)
※ 引述《harry901 (forcing to A cup)》之銘言: : 小弟又要來求救了@___@~ 爬了文跟網路 : 原本以為只要調整mathematica裡面的系統設定 : 就可以輕輕鬆鬆的使用多核心或連到其他電腦上進行平行運算 : 但是...嗚嗚 似乎沒那麼容易>.<~ Mathematica的Parallel Computing ToolKit預設是會開啟本機的Kernel 要利用多台電腦平行運算,那你每台電腦都要安裝LightweightGrid這個Service 如果有裝的話,會自動將網域中的電腦自動抓出來。 想看你現在有多少Kernel可以使用,Kernels[]會傳回來可使用的Kernels 要用LightWeightGrid,除非真的有大量的運算, 否則花在多台電腦的資料傳輸時間基本上划不來 若你在購買Mathematica時有加購買Premier Service,那這個是贈送的。 若找不到直接拿License到官網下載 : 爬了很多文 大多數使用平行運算是用ParallelMap來運算... 這個不一定要用Map,只是Map似乎比較直覺。 : 我天真以為 調調系統 mathematica就會聰明的自己將資料分配給多核電腦計算... : 弄了老半天就是只有用到單核 不管在for迴圈前面加上parallelize 還是其他方法 : 都沒辦法成功平行運算>.<~ 一趟下來要四五分鐘左右.... : 由於程式的複雜度關係 沒有使用Map指令 : 小弟的程式到目前為止已經快六百行了 還有2/3要寫 寫完大約一千多行 : 程式的架構大約如下 : 主程式(Cell 1): 有函數f1,f2,f3, 變數z,t 參數a,b,c, ... : 要計算數值重積分,還要找根 算出來的東西會用到副程式 : 副程式(Cell 2_: 約有十二個小程式 每個小程式裡面都有一個迴圈(大小不一) : 這邊最花時間....... : 請問 有辦法利用平行運算減少運算時間嗎? : 實在摸不著平行運算最基本的使用概念...唉.... : 到最後 好像parallelize不能使用在for迴圈裡面的樣子 : 舉個簡單的例子好了 這樣 板上的大大比較容易知道我的問題>_< : =============================================================== : PB[z_, t_] = 3*t^2 - Exp[t*z];(*令一個函數PB*) : ans = Array[anss, {10, 2}];(*令答案矩陣ans*) : For[i = 0, i <= 10, i++;(*使用迴圈計算*) : ans[[i, 1]] = i; : ans[[i, 2]] = NIntegrate[NIntegrate[ : PB[z, t] - Exp[z*t] , {z, -3, 3*i}], {t, 0, 10} : ] : ] : TimeUsed[] : ans 這邊雙重積分的使用比較不好,可以先查一下Mathematica的用法 PB[z_,t_]=3*t^2-Exp[t*z]; ft[i_]=Re@Integrate[PB[z,t]-Exp[z*t],{t,0,10},{z,-3,3*i},Assumptions->i>0]; test1=AbsoluteTiming@Map[{#,N@ft[#]}&,Range[10]] (*將函數分給各個Kernel,基本上這個指令在8.0似乎是可以省略。*) (*但在7.0就要很仔細設定*) DistributeDefinitions[ft,PB]; test2=AbsoluteTiming@ParallelMap[{#,N@ft[#]}&,Range[10]] test3=AbsoluteTiming@ParallelTable[{i,N@ft[i]},{i,10}] ans=test2[[2]] 最後是迴圈的部份,Mathematica提供蠻多的函數 可以用help查LoopingConstructs,For Do While這些函數在Mathematica不一定 是最好的選擇。程式若很複雜,需要用到很多額外的副程式,盡量用Block Module 包起來。 有錯請多指教~ -- 養花種魚數月亮賞星星 http://chungyuandye.twbbs.org -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 218.173.131.111 ※ 編輯: chungyuandye 來自: 218.173.131.111 (12/01 13:30) ※ 編輯: chungyuandye 來自: 218.173.131.111 (12/01 13:31)

12/01 22:49, , 1F
謝謝老師~ 我會吸收吸收 研發看看@@
12/01 22:49, 1F
文章代碼(AID): #1ErmeU3s (Mathematica)
文章代碼(AID): #1ErmeU3s (Mathematica)