The easiest way to parallelize data is to take a loop we already have and handle each item in it in a thread.
That is essentially what pmap
does. If we replace a call to map
with pmap
, it takes each call to the function argument and executes it in a thread pool. pmap
is not completely lazy, but it's not completely strict, either: it stays just ahead of the output consumed. So if the output is never used, it won't be fully realized.
For this recipe, we'll calculate the Mandelbrot set. Each point in the output takes enough time that this is a good candidate to parallelize. We can just swap map
for pmap
and immediately see a speed-up.
The Mandelbrot set can be found by looking for points that don't settle on a value after passing through the formula that defines the set quickly.
We need a function that takes a point and the maximum number of iterations to try and return the iteration that it escapes on. That just means that the value gets above
4...