Re: Incorrect parallel computation

*To*: mathgroup at smc.vnet.net*Subject*: [mg125969] Re: Incorrect parallel computation*From*: David Bailey <dave at removedbailey.co.uk>*Date*: Tue, 10 Apr 2012 02:29:53 -0400 (EDT)*Delivered-to*: l-mathgroup@mail-archive0.wolfram.com*References*: <jlrhi8$eoe$1@smc.vnet.net>

On 08/04/2012 09:17, Yasha Gindikin 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. > I think this illustrates the pitfalls of parallel computing - which is why I have never used this feature for serous code! Notice the "Possible issues" section of the help for SetSharedVariable. You probably thought your update was atomic, but I doubt if c[[a[[l, k]]]] += 1 qualifies as an atomic update! Every now and again I toy with the idea of using parallel constructs - so thanks for reminding me of why it is not a good idea, and saving me much heartache! David Bailey http://www.dbaileyconsultancy.co.uk