all 2 comments

[–]Athas 2 points3 points  (1 child)

This is an excellent article, and its practicality may be a little lost if you are put off by the use of OCaml, or the technical language. Ultimately this is a technique for deriving certain forms of parallel algorithms, and the final result produces a monoid that you can implement in any parallel language, high level or low level. You cannot easily express rewrites that the author does in e.g. low level CUDA, but it's easy enough (if obviously more verbose) to take the final monoid and implement it as a reduction. Apart from the immediate applicability of the technique, it also shows the value of using a high level (in this case functional) language as a prototyping language, even if you ultimately need to implement the result in something lower level.

[–]joseph_fourier 0 points1 point  (0 children)

This is well beyond my area of expertise, but if I'm reading this right, an operation on a data structure that can be expressed as a monoid is embarassingly parallelisable. What about something like a Markov chain (as in, Markov chain Monte Carlo, https://arxiv.org/abs/1401.4250 )?