Side Effects in ParallelTable

Here is an example where ParallelTable is slower than Table and yileds some weirdness.

I have tried to implement a Monte Carlo simulaiton for a stock price following a geometric brownian motion (the original function appears to be slow, probably because it contains more information than I need). And, stumbled upon some inexplicable, at first, results.

And so, let “s” be the vector of initial prices. The following is the simmulation:

s = 0 Range[10^5] + 100;

data = ParallelTable[s = s + r s dt + \[Sigma] s Sqrt[dt] RandomVariate[NormalDistribution[], 10^5], {i, 300}]; // AbsoluteTiming
data = data\[Transpose];

This takes{6.219356, Null}
And if we dare to plot a few processes,

GraphicsRow[{ListLinePlot[data[[1, All]]], ListLinePlot[data[[;; 7, All]]]}]

we obtain:

One might be happy that he gets jumps, without much effort. But this is not what it should look like.

When we use Table instead it will take {3.485199, Null} and the results are nicer:

Even though there are “parallels” on the first graphs, it took me a while to figure out the reason.
I thought it’s worth making a note,