Any answer for this ParallelDo error
- To: mathgroup at smc.vnet.net
- Subject: [mg108877] Any answer for this ParallelDo error
- From: pratip <pratip.chakraborty at gmail.com>
- Date: Mon, 5 Apr 2010 08:01:53 -0400 (EDT)
Hallo Group,
Here is a harmless piece of code.
Clear[a];
t=AbsoluteTime[];
a=ParallelTable[0,{i,1,20},{j,1,50}];
DistributeDefinitions[a];
mat=ParallelDo[a[[i,j]]=If[PrimeQ[(i^3+j^5)]==True,1,0],{i,1,20},{j,
1,50}];
AbsoluteTime[]-t
The error is something like
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.
I know there is a way of using SetSharedVariable but that version of
the code is very slow.
Clear[a];
t=AbsoluteTime[];
a=ParallelTable[0,{i,1,20},{j,1,50}];
SetSharedVariable[a];
mat=ParallelDo[a[[i,j]]=If[PrimeQ[(i^3+j^5)]==True,1,0],{i,1,20},{j,
1,50}];
Print[a//ArrayPlot];
AbsoluteTime[]-t
Time taken: 6.1443514
The single processor version is much faster
Clear[a];
t=AbsoluteTime[];
a=Table[0,{i,1,20},{j,1,50}];
mat=Do[a[[i,j]]=If[PrimeQ[(i^3+j^5)]==True,1,0],{i,1,20},{j,1,50}];
Print[a//ArrayPlot];
AbsoluteTime[]-t
Time taken: 0.0360021
My question is why I cant distribute the definition of a array to my
processor kernels.
Hope someone can give me an answer. I need to make this Do loop
parallel.
Yours,
Pratip