標題: Re: [問題] 如何使用平行運算或加快計算時間?
時間: Thu Dec 1 13:01:14 2011
※ 引述《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
包起來。
有錯請多指教∼
--
養花種魚數月亮賞星星
--
※ 發信站: 批踢踢實業坊(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)
[1;37m推 [33mharry901[m[33m:謝謝老師∼ 我會吸收吸收 研發看看@@ [m 12/01 22:49
沒有留言:
張貼留言