Many things are not right.
> L = 1:1000 > stride = 5 > > function dowork(i) > if i < 1000*: **not in python* > sleep(5) > else > break *you are assuming your code will be inlined, but it won't* > end *an extra end is missing here* > That specific piece seems weird, I'm not sure this is legal but at the very least, this is confusing: > i = 1 > @sync @parallel for i in i:i+stride > dowork(i) > i += 1 > end > I would propose: j=1 ... @parallel for i... j:j+stride ... j += stride + 1 ... to make things clear again. I'm not sure you'll get what you want though. If you want dowork to break the loop, you should have it return something, like a boolean. if dowork(i) break end I've not spent much time yet at coding in parallel however, I'm really not sure @sync behaves as you expect <http://julia.readthedocs.org/en/latest/manual/parallel-computing/#synchronization-with-remote-references>. >From what I've understood, @sync acts like a barrier: the @sync block will surrender the control to the main task once every @async jobs are run (but I may well be totally wrong). In your case, if the job for i = 1500 finishes before i = 1499, your loop will be broken without dowork(1499) being calculated. This is the ugliest kind of bugs one can encounter: the ones that occur at random.
