MathGroup Archive 2012

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

Search the Archive

Re: Incorrect parallel computation

  • To: mathgroup at smc.vnet.net
  • Subject: [mg125986] Re: Incorrect parallel computation
  • From: Zach Bjornson <bjornson at stanford.edu>
  • Date: Wed, 11 Apr 2012 18:19:26 -0400 (EDT)
  • Delivered-to: l-mathgroup@mail-archive0.wolfram.com
  • References: <jlrhi8$eoe$1@smc.vnet.net>

On Apr 8, 1:17 am, Yasha Gindikin <gindi... at gmail.com> wrote:
> Dear colleagues,
>
> would you please advise me on why the following simple code executes incorrectly when parallelized?
>
> a = Subsets[Range[1, 5], {3}];
> L = Length@a;
> b = Table[0, {5}];
> c = Table[0, {5}];
> SetSharedVariable[c];
> Do[b[[a[[l, k]]]] += 1, {l, L}, {k, 3}];
> ParallelDo[c[[a[[l, k]]]] += 1, {l, L}, {k, 3}];
> b===c
>
> False
>
> Thank you!
> Best regards,
> Yasha Gindikin.

If you have a situation where each iteration is slow (e.g. where the
time to access the results variable c is negligible relative to the
time to compute its new value), try CriticalSection as below. In this
simplified example, it will be slower than plain Do because of
locking.

a = Subsets[Range[1, 5], {3}];
L = Length@a;
b = Table[0, {5}];
Do[b[[a[[l, k]]]] += 1, {l, L}, {k, 3}];
c = Table[0, {5}];
SetSharedVariable[c];
ParallelDo[CriticalSection[{clock}, c[[a[[l, k]]]] += 1], {l, L}, {k,
3}]
b===c

True

-Zach



  • Prev by Date: Re: Incorrect parallel computation
  • Next by Date: Re: fyi, small note on using Mathematica for object based programming
  • Previous by thread: Re: Incorrect parallel computation
  • Next by thread: Where is ShowGraph?