2011年12月14日 星期三

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

作者: chungyuandye (養花種魚數月亮賞星星) 看板: Mathematica
標題: 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
包起來。

有錯請多指教∼

--
養花種魚數月亮賞星星

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)
推 harry901:謝謝老師∼ 我會吸收吸收 研發看看@@  12/01 22:49

沒有留言:

張貼留言