An Introduction to Parallel Programming, Second Edition presents a tried-and-true tutorial approach that shows students how to develop effective parallel programs with MPI, Pthreads and OpenMP.
As the first undergraduate text to directly address compiling and running parallel programs on multi-core and cluster architecture, this second edition carries forward its clear explanations for designing, debugging and evaluating the performance of distributed and shared-memory programs while adding coverage of accelerators via new content on GPU programming and heterogeneous programming. New and improved user-friendly exercises teach students how to compile, run and modify example programs.
Eminently readable for a text book, it introduces concepts with thorough examples, and libraries that can be used for parallelization. I do wish a newer edition would be released, since this one is getting a little dated.
NOTE: This review is for the second edition of the book.
The book is splendidly readable, and introduces a variety of essential techniques to working with MPI, PThreads, OpenMP and CUDA. All of these chapters were helpful, and especially chapter 2 summarizing the key issues that come with trying to parallelize your code. I was not a huge fan of the second part of chapter 7, running through sample sort for a variety of algorithms. Compared to the rest of the book it was a bit clunky. All things considered though, I think it did a solid job.