2016-08-04 5 views
0

私はなぜ Matlabのparforで次のコードが動作しないのか、それを修正する方法を説明できますか?Matlabのparforの疑問?

R=10; 
Power=zeros(2,R); 
parfor s=1:R 
    Power(1,s)=1 
    Power(2,s)=2; 
end 

答えて

3

あなたは別の労働者に送られる1つの変数(power)を持っていて、異なるコアを使用してそれを書きたいので、それは動作しません。

異なる変数を使って同じ変数に書き込む方法はありますか?誰がメモリを保管していますか?労働者はどこで書いたのですか?コードの構造は、並列計算を行うときに非常に重要です。なぜなら、どのようなメモリにどのワーカーを送るかを知っておく必要があるからです。変数を渡す際に間違ったアプローチを選択するだけで、コードを非並列のものよりも遅くすることができます。

あなたが表示されたコードに変更することができます:

R=10; 
Power1=zeros(1,R); 
Power2=zeros(1,R); 

parfor s=1:R 
    Power1(1,s)=1 
    Power2(1,s)=2; 
end 
Power=[Power1;Power2] 

私は、MATLABエラーにあなたを指示していること、特にvariable types in parfors、あなたはhttp://uk.mathworks.com/help/distcomp/parallel-for-loops-parfor.html に行き、「概念」のセクションを読むことをお勧め。

関連する問題