2012年12月11日 星期二

(zxcvbnm0928) Re: [問題] 關於平行計算

作者: chungyuandye (養花種魚數月亮賞星星)
標題: Re: [問題] 關於平行計算
時間: Wed Aug 15 15:49:04 2012

※ 引述《zxcvbnm0928 (益)》之銘言:
: ※ 引述《chungyuandye (養花種魚數月亮賞星星)》之銘言:
: : 同時輸入兩個指令,對一個Kernel來說,還是FIFO,照順序跑
: : Mathematica並不會啟動多個核心同時運算這兩個指令
: : 如果要用平行運算,可以查一下 Parallelize,還有相關的指令
: : 例如:
: : ParallelTable[Plot[Sin[n*x],{x,0,Pi}],{n,1,10}]
: : 如果你的顯示卡有支援CUDA,8.0後的版本也可使用CUDAMap或相關的CUDA運算
: : good luck~
: 謝謝你的回答
: 根據我測試的結果
: ParallelTable[Plot[Sin[n*x],{x,0,Pi}],{n,1,4}]跑出結果的時間是
: 單純的Plot[Sin[2*x],{x,0,Pi}]的四倍多一點
: 這樣應該就代表沒有使用到平行計算吧??
: 我的電腦好像是四核心的
: 我的想法是說
: 看能不能我控制使用某一核心跑一個Plot指令
: 同時使用另一個核心跑另一個Plot指令
: 十二萬分的感謝

In[1]:= $Version

Out[1]= "8.0 for Mac OS X x86 (64-bit) (November 6, 2010)"

In[2]:= First@
AbsoluteTiming@
ParallelTable[Plot[Sin[n*x], {x, 0, 2 Pi}], {n, 1, 500}]

Out[2]= 6.570605

In[3]:= First@
AbsoluteTiming@Table[Plot[Sin[n*x], {x, 0, 2 Pi}], {n, 1, 500}]

Out[3]= 8.394393

平行運算並不一定會比較快,除非你的問題是互相獨立的問題,而且要很大量的問題
否則,花在傳輸的時間就划不來的。舉例來說,傳回Sin[n*x],n=1,2,....,500
用ParallelTable時間是6.5s,不用ParallelTable時間是8.39s

我想你要的應該是兩個圖,分別交給兩個Kernel做
那應該要用WaitAll,先將兩個指令就到Kernel,但他不會先計算,
要等下一個Kernel有空才會計算

myplot = {ParallelSubmit[Plot[Sin[x], {x, 0, 2 Pi}]],
ParallelSubmit[Plot[Cos[x], {x, 0, 2 Pi}]]};

開始計算

WaitAll[myplot]

不過我覺得你的問題應該不需要用到平行院算,應該只是你函數定義的問題而已!
否則在Plot中加一個Evaluate,要求在Plot中將function先計算好在繪圖

Plot[Evaluate@Sin[x], {x, 0, Pi}]

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

http://chungyuandye.twbbs.org


--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 118.233.129.177

沒有留言:

張貼留言