Book Image

Mastering Parallel Programming with R

By : Simon R. Chapple, Terence Sloan, Thorsten Forster, Eilidh Troup
Book Image

Mastering Parallel Programming with R

By: Simon R. Chapple, Terence Sloan, Thorsten Forster, Eilidh Troup

Overview of this book

R is one of the most popular programming languages used in data science. Applying R to big data and complex analytic tasks requires the harnessing of scalable compute resources. Mastering Parallel Programming with R presents a comprehensive and practical treatise on how to build highly scalable and efficient algorithms in R. It will teach you a variety of parallelization techniques, from simple use of R’s built-in parallel package versions of lapply(), to high-level AWS cloud-based Hadoop and Apache Spark frameworks. It will also teach you low level scalable parallel programming using RMPI and pbdMPI for message passing, applicable to clusters and supercomputers, and how to exploit thousand-fold simple processor GPUs through ROpenCL. By the end of the book, you will understand the factors that influence parallel efficiency, including assessing code performance and implementing load balancing; pitfalls to avoid, including deadlock and numerical instability issues; how to structure your code and data for the most appropriate type of parallelism for your problem domain; and how to extract the maximum performance from your R code running on a variety of computer systems.
Table of Contents (13 chapters)

Grid parallelism


Grid parallelism is naturally aligned to image processing, where operations can be cast in a form that acts on a specific localized region for each and every individual cell value of data. Commonly, the cell value is referred to as a pixel in the case of 2D image data, and voxel in the case of 3D image data. Grids can, of course, be N-dimensional matrix structures, but as human beings, it's somewhat difficult for us to wrap our heads around more than 4D.

The key to efficient grid parallelism is the distribution mapping of data across the set of parallel processes, and the interactions between each process, as they may exchange data with one another to accommodate iterative operations that require access to more of the data than each process holds locally. Consider a simple but very large square 2D image, and that we have a cluster of nine independent computational cores available. To illustrate the point, we will add the constraint that each of the computational nodes only...