Parallelization sometimes a plus, sometimes not
- To: mathgroup at smc.vnet.net
- Subject: [mg132508] Parallelization sometimes a plus, sometimes not
- From: John Villarrubia <John.Villarrubia at nist.gov>
- Date: Fri, 4 Apr 2014 03:55:58 -0400 (EDT)
- Delivered-to: l-mathgroup@mail-archive0.wolfram.com
- Delivered-to: l-mathgroup@wolfram.com
- Delivered-to: mathgroup-outx@smc.vnet.net
- Delivered-to: mathgroup-newsendx@smc.vnet.net
- Reply-to: <John.Villarrubia at nist.gov>
I noticed recently that some of my calculations using ParallelMap are
much slower than the same calculation with Map. The call is in the form
fits = ParallelMap[f[a,#,b,c]&,argumentList]
It takes a factor of 4 or 5 more time to run this using ParallelMap on
my 8-core machine than using Map. I had seen this behavior in the old
days, when I forgot to pass necessary definitions to the subkernels and
the main kernel ended up doing all the work. That does not seem to be
the issue here: ParallelMap in the Mathematica version I'm using (v. 8)
is supposed to automatically pass the needed definitions and, indeed, it
seems to have done so: In the TaskManager I can see all 8 subkernels
busily maxed out for the whole time, while the main kernel runs at 1% or
less (presumably gathering results).
You'll be wondering what's inside f. {a,b,c} are fixed arguments. The
argumentList specifies a location in an image where a model function is
fit to the data using a call to NonlinearModelFit. The model function
has 4 floating parameters that are arguments of a 10-argument
InterpolationFunction. (The other 6 parameters are held constant during
any given fit.) The interpolation data set is huge and f itself is
rather long, so it's not practical to list it here.
Naturally, since I can't easily list the code, I don't expect anyone to
be able to pinpoint the problem. What I'm hoping is that someone else
has experienced this and can say what the issue turned out to be--or
that someone with experience doing parallel computing in Mathematica can
say what sorts of things might be relevant to this. I'm struggling to
think of those: For example, in browsing the list I see that shared
variables are implicated in lots of people's problems. However, f is
pretty self-contained. I have not set any shared variables or shared
functions. There are some nonlocal variables that f reads, but does not
alter.
What other sorts of things should I be investigating?
John