Introduction to Parallel Computing provides an in-depth look at techniques for the design and analysis of parallel algorithms and for programming these algorithms on commercially available parallel platforms. The book discusses principles of parallel algorithm design and different parallel programming models with extensive coverage of MPI, POSIX threads, and OpenMP. It provides a broad and balanced coverage of various core topics such as sorting, graph algorithms, discrete optimization techniques, data-mining algorithms, and a number of algorithms used in numerical and scientific computing applications. The basic approach advocated in this text is one of portable parallel algorithm and software development, an empahsis lacking in all existing textbooks on parallel computing. To enhance the pedagogical value of the text, extensive examples, diagrams, exercises of varying degrees of difficulty, and bibliographical remarks are provided. In addition to serving as a textbook and a reference source for professionals and parallel software developers, the book will help students and researchers in non computer-science disciplines who need to solve computation-intensive problems using parallel computers.