On Thursday 05 December 2013 17:17:54 Brad Chamberlain wrote: > Hi Peter -- > > > Attempting to fix this I went looking for an example forall with proper > > syncronization. The first one I found was: > > http://chapel.cray.com/tutorials.html -> > > http://faculty.knox.edu/dbunde/teaching/chapel/ -> ... > > Which by the looks of it contains the same mistake I did... > > If you read the text just below this example, it points out that there is a > race condition with a forward reference for how to fix it (though the fix > is not quite as elegant as the one you used below -- I'll check with them > to see whether that was intentional.
Doh, now I feel really silly.. On the other hand, maybe making the sole forall example an incorrect "do not do this"-example, without a warning before or in the code, wasn't such a great idea. > > Reading the Forall part of the otherwise great "Productive Programming in > > Chapel[...] > > didn't yield any clues or > > references to atomic or sync variables. > > atomic and sync variables are considered part of the task parallel subset of > the language (though they can also be used in any other parallel or serial > part of the language), so are discussed in that subset of the tutorial > slides. I see, I've not yet interested myself in the task parallel parts. Maybe a reference/link from the data parallel part would be a good idea? ... > > var sum$ : sync real = 0.0; > > forall i in 1..N by -1 do sum$ += 1.0/(i*i); > > This is a reasonable approach and has been the traditional way to do this in > Chapel; atomic types are a newer addition to the language and are the more > optimal way to express this ... > You should be able to write this as: > > var sum: atomic real = 0.0; > forall i in 1..N by -1 do sum.add(1.0/(i*i)); Almost, direct assignment is not allowed but this works: var sum : atomic real; sum.write(0.0); // not needed? atomic vars seem to be 0-initialized... forall i in 1..N do sum.add(1.0/(i*i)); writeln(sqrt(6*sum.read())); AFAICT there's no documentation of the atomic typ methods in the language spec (but I did find the one page in the task parallel section you pointed at earlier). > Still musing over the 1- vs. 2-core performance results, the mechanism used > to achieve them, and whether I'm surprised... For completeness, the above atomic example ran in 38s optimized (vs the 130s for sync). /Peter
signature.asc
Description: This is a digitally signed message part.
------------------------------------------------------------------------------ Sponsored by Intel(R) XDK Develop, test and display web and hybrid apps with a single code base. Download it for free now! http://pubads.g.doubleclick.net/gampad/clk?id=111408631&iu=/4140/ostg.clktrk
_______________________________________________ Chapel-users mailing list [email protected] https://lists.sourceforge.net/lists/listinfo/chapel-users
