2017-05-19 16 views
1

私はMATLABの実行速度が遅く、計算集中的な2行のコードを特定しました。私はまた、これらの2行のコードが互いに依存せず、並列化できることも発見しました。MATLABでの並列プログラミング

​​

仮定する計算xとyを平行にする方法その後、大行列である:私は、次の2行のコードを並列化するための最良の方法です何を思ったんだけど、私のコードは次のようであると言います。

parfor i = 1:2 
    if i == 1 
     y = exp(a); 
    else 
     x = sin(a); 
    end 
end 

私はこの方法があまりにもナイーブであることを感じ、これを解決する他の方法があるかどうかを疑問に思って:のparforには、例えば、それを行うための一つの方法です。

答えて

2

に従うことができます。

a = 10; 
% starts execution on separate workers 
exp_handle = batch(@exp,1,{a}); 
sin_handle = batch(@sin,1,{a}); 

% waits ultil the first is complete and gets the result 
wait(exp_handle); 
yc = fetchOutputs(exp_handle); % cell 

% waits until the second is complete and gets the result 
wait(sin_handle); 
xc = fetchOutputs(sin_handle); % cell 

y = yc{1}; 
x = xc{1}; 
+0

ありがとうございます!私はバッチコマンドで遊んでいて、非常に遅いです。私は別の質問を投稿しました、あなたはそれを見て気になりますか?ありがとう! http://stackoverflow.com/questions/44081110/accelerate-batch-job-execution-in-matlab – Jason

+0

[parfeval]の代わりに 'batch'を使用する理由(https://www.mathworks.com/help/distcomp/parfeval) .html)? 'parfeval'の構文は私にとってははるかにいいようです。 –

1

あなたは、あなたがのparforを使用しない場合、あなたは、個々の労働者で実行したい機能ごとにバッチ処理を作成することができ、以下のようなもの....

funcs = {@exp,@sin} ; 
args = {2,pi/4} ; 
sols = cell(1,2) ; 
parfor n = 1:2 
    sols{n}=funcs{n}(args{n}); 
end 
M = sols{1} ; N = sols{2} ; 
関連する問題