Mathematica 9 is now available
Services & Resources / Wolfram Forums / MathGroup Archive
-----

MathGroup Archive 2010

[Date Index] [Thread Index] [Author Index]

Search the Archive

Re: A simple ParallelDo problem

  • To: mathgroup at smc.vnet.net
  • Subject: [mg108831] Re: A simple ParallelDo problem
  • From: dh <dh at metrohm.com>
  • Date: Fri, 2 Apr 2010 05:21:04 -0500 (EST)
  • References: <hp1u8p$63u$1@smc.vnet.net>

Hi Pratip,
it is not clear to me why the DistributeDefinitions does not work. But 
you may achieve the same with the somewhat slower "SahredVariable" concept:
Consider:
Clear[a];
a = Table[0, {2000}];
DistributeDefinitions[a];
ParallelDo[a[[i]] = 1, {i, 1, 4}]
this does not work, but the following will:
Clear[a];
a = Table[0, {2000}];
SetSharedVariable[a];
ParallelDo[a[[i]] = 1, {i, 1, 4}]

have fun, Daniel

On 01.04.2010 12:58, pratip wrote:
> Dear Group Members,
> Here is a typical problem of mathematica parallel computation tools.
> First form a airfoil in 2D
> (*Geometry*)
> Clear[x];
> n0;
> c=0.09;
> p=0.24;
> t=0.05;
> camber:=c If[x<p,(2p x-x^2)/p^2,((1-2p)+2p x-x^2)/(1-p)^2];
> theta=ArcTan[D[camber,x]];
> p=Table[
> x=0.5(1-Cos[Pi s]);
> x1=1.00893x;
> thk=5t (0.2969Sqrt[x1]-0.126x1-0.3516x1^2+0.2843x1^3-0.1015x1^4);
> {x,camber}+Sign[s]thk {-Sin[theta],Cos[theta]},
> {s,-1,1,2/(n-1)}];
> ListPlot[10p,AspectRatio->Automatic]
>
> Now we set some values
> (* Some variable are set*)
> pt=10p;
> alpha=Pi/19;
> pc=Table[(pt[[i]]+pt[[i+1]])/2,{i,1,n-1}];
> s=Table[v=pt[[i+1]]-pt[[i]];Sqrt[v.v],{i,1,n-1}];
> theta=Table[v=pt[[i+1]]-pt[[i]];
> 		ArcTan[v[[1]],v[[2]]],
> 	{i,1,n-1}];
> sin=Sin[theta];
> cos=Cos[theta];
> Cn1=Cn2=Ct1=Ct2=Table[0,{n-1},{n-1}];
>
> Distribute to the parallel kernels
> (*Definitions distribution*)
> DistributeDefinitions[p, alpha, pc, s, theta, sin, cos, Cn1, Cn2, Ct1,
> Ct2, n, c, pt, t]
>
> Now comes the problem
>
> (*Parallel Computation*)
> tim=AbsoluteTime[];
> ParallelDo[
> If[i==j,
> {Cn1[[i,j]]=-1;
> Cn2[[i,j]]=1;
> Ct1[[i,j]]=Ct2[[i,j]]=Pi/2},
> {v=pc[[i]]-pt[[j]];
> a=-v.{cos[[j]],sin[[j]]};
> b=v.v;
> t=theta[[i]]-theta[[j]];
> c=Sin[t];
> d=Cos[t];
> e=v.{sin[[j]],-cos[[j]]};
> f=Log[1+s[[j]](s[[j]]+2a)/b];
> g=ArcTan[b+a s[[j]],e s[[j]]];
> t=theta[[i]]-2theta[[j]];
> p1=v.{Sin[t],Cos[t]};
> q=v.{Cos[t],-Sin[t]};
> Cn2[[i,j]]=d+(0.5q f-(a c+d e)g)/s[[j]];
> Cn1[[i,j]]=0.5d f+c g-Cn2[[i,j]];
> Ct2[[i,j]]=c+0.5p1 f/s[[j]]+(a d-c e)g/s[[j]];
> Ct1[[i,j]]=0.5c f-d g-Ct2[[i,j]]}]
> ,{i,1,n-1},{j,1,n-1}];
> AbsoluteTime[]-tim
>
> The error is returned as
>
> Set::noval: Symbol Cn1 in part assignment does not have an immediate
> value.
> Set::noval: Symbol Cn2 in part assignment does not have an immediate
> value.
>
> However if you replace the ParallelDo with simple Do results come in
> 7.0554036 sec.
> I need to make the problem parallel. I have 8 cores to so for a simple
> problem like this
> I must get a timing like less than 1 sec.
> Hope someone will help.
> Another question is if I have a package (<<Mypackage`) and I want to
> distribute all the function definitions of this package fully
> available to the parallel kernels how to do that? Parallel computation
> does not seem to be so simple as it turns out to be when you just
> consider the documentation examples. How to make all the information
> (variables, functions,data) available to the Master kernel also
> available to the launched parallel kernels at once. Memeory is not a
> problem.
>
> best regards,
> Pratip
>


-- 

Daniel Huber
Metrohm Ltd.
Oberdorfstr. 68
CH-9100 Herisau
Tel. +41 71 353 8585, Fax +41 71 353 8907
E-Mail:<mailto:dh at metrohm.com>
Internet:<http://www.metrohm.com>



  • Prev by Date: math lib change in OS X bug + workaround
  • Next by Date: Re: Speed Up of Calculations on Large Lists
  • Previous by thread: A simple ParallelDo problem
  • Next by thread: Find the solution of a system of two nonlinear, complicated equations