2

私はMathematica 7を実行していて、ParallelDoを使用して単純なDoループを並列実行しようとしています。次の標準は、シーケンシャルコードは正常に動作します:私はあり得るMathematica 7 Doループはなぜ連続して動作するのですか(ParallelDoを使用して)並列でエラーを生成しますか?

len = 10; 

A = Table[0, {len}]; 

ParallelDo[ 
A[[i]] = i*10; 
, {i, 1, len}] 

エラーメッセージ:

len = 10; 

A = Table[0, {len}]; 

Do[ 
A[[i]] = i*10; 
, {i, 1, len}] 

をしかし、私が代わりに標準DoParallelDo使用している場合、このコードは、エラーメッセージを与えます

Set::noval: Symbol A in part assignment does not have an immediate value. 
Set::noval: Symbol A in part assignment does not have an immediate value. 
Set::noval: Symbol A in part assignment does not have an immediate value. 
Set::noval: Symbol A in part assignment does not have an immediate value. 
Set::noval: Symbol A in part assignment does not have an immediate value. 
Set::noval: Symbol A in part assignment does not have an immediate value. 
General::stop: Further output of Set::noval will be suppressed during this calculation. 
General::stop: Further output of Set::noval will be suppressed during this calculation. 
Set::noval: Symbol A in part assignment does not have an immediate value. 
Set::noval: Symbol A in part assignment does not have an immediate value. 
Set::noval: Symbol A in part assignment does not have an immediate value. 
Set::noval: Symbol A in part assignment does not have an immediate value. 

私は並行して、この行いループを実行するために何かできることはありますか?

ありがとうございました!

アンドリュー・デヤング

カーネギーメロン大学

答えて

4

Mathematica 8.0.1.0でエラーは発生しません。 Aは各サブプロセスにコピーされ(変更はそのサブプロセスに対してローカルなので)、コードは意図した通りに動作しない可能性があります。したがって

ParallelDo[A[[i]] = i*10; [email protected], {i, 1, len}] 

プリント

Mathematica result

及び最終結果はA = {0、0、...、0}です。

代わりにAを初期化した後にSetSharedVariable[A]を追加する必要があります。結果は今や{10,20,30,40,50,60,70,80,90,100}になりました。

4

ParallelTableを使用しない任意の理由は?

ParallelTable[i*10,{i, 1, len}] 
関連する問題