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. In edition, this new edition includes coverage of accelerators via new content on GPU programming and heterogeneous programming. New and improved user-friendly exercises teach student how to compile, run and modify example programs.