The following three-step distilled guidance is intended to help you decide what form of parallelism might be best suited for your particular algorithm/problem and summarizes what you learned throughout this book. Necessarily, it applies a level of generalization, so approach these guidelines with due consideration:
Determine the type of parallelism that may best apply to your algorithm.
Is the problem you are solving more computationally bound or data bound? If the former, your problem may be amenable to GPUs (refer to Chapter 5, The Supercomputer in your Laptop, on OpenCL). If the latter, then your problem may be more amenable to cluster-based computing (refer to Chapter 1, Simple Parallelism with R), and if your problem requires a complex processing chain, then consider using the Spark framework (described in the bonus chapter).
Can you divide the problem data/space to achieve a balanced workload across all processes, or do you need to employ an adaptive...