2016-05-18 9 views
0

I持ってループのparfor内部ループため、次のエラーを分類することができない

for j1=1:NN 
    for j2=1:NN 
      HF(j1,j2)=hf(mod((j1-j2),NN)+1); 
    end 
end 

私はというエラーメッセージが表示されます。

parforの変数HFは分類できません。

私はparforループの外側でHFを使用したり定義したりしません。各反復では独自のバージョンのHFが作成されます。

この問題を解決するにはどうすればよいですか?

+0

@回答私はその答えを読んでいます。彼らは存在するマトリックスの複数のコピーを作成しています。私の場合、HFは各parforループで異なる長さ/サイズで作成されています。 – HappyBee

+0

より良いヘルプを得るには、より多くのコードを表示する必要があります。あなたは実際に上記のループの外側で 'HF'を初期化していますか? – Suever

答えて

1

あなたのコードを解析するときに、ループのHF外を初期化していないので、MATLABは、parfor内から変数HFを共有し変更していると思います。これは、複数のワーカーが同じデータを変更できないため問題となります。これはあなたが見ているエラーにつながります。

は、この問題を解決するには、明示的MATLABはparforループで各繰り返しは異なるHF上で動作していることを把握助けるためにあなたのループのHF外を事前に割り当てる必要があります。

HF = zeros(NN, NN); 

for j1=1:NN 
    for j2=1:NN 
     HF(j1,j2)=hf(mod((j1-j2),NN)+1); 
    end 
end