Skip to main content

Introduction to High Performance Computing

 

Introduction to High Performance Scientific Computing

by David Chopp

This book is available for purchase in the SIAM Bookstore.

This book introduces methods for adding parallelism to numerical methods for solving differential equations. It contains exercises and programming projects that facilitate learning as well as examples and discussions based on the C programming language, with additional comments for those already familiar with C++.

The text provides an overview of concepts and algorithmic techniques for modern scientific computing and is divided into six self-contained parts that can be assembled in any order to create an introductory course using available computer hardware.

  • Part I introduces the C programming language for those not already familiar with programming in a compiled language.
  • Part II describes parallelism on shared memory architectures using OpenMP.
  • Part III details parallelism on computer clusters using MPI for coordinating a computation.
  • Part IV demonstrates the use of graphical programming units (GPUs) to solve problems using the CUDA language for NVIDIA graphics cards.
  • Part V addresses programming on GPUs for non-NVIDIA graphics cards using the OpenCL framework.
  • Part VI contains a brief discussion of numerical methods and applications, giving the reader an opportunity to test the methods on typical computing problems.

Introduction to High Performance Scientific Computing is intended for advanced undergraduate or beginning graduate students who have limited exposure to programming or parallel programming concepts. Extensive knowledge of numerical methods is not assumed. The material can be adapted to the available computational hardware, from OpenMP on simple laptops or desktops to MPI on computer clusters or CUDA and OpenCL for computers containing NVIDIA or other graphics cards. Experienced programmers unfamiliar with parallel programming will benefit from comparing the various methods to determine the type of parallel programming best suited for their application.

The book can be used for courses on parallel scientific computing, high performance computing, and numerical methods for parallel computing.

The examples in the textbook can be downloaded using the links below. A list of errata is here.

Book SectionExample Codes in CExample Codes in C++
Part I - C ProgrammingAll C ExamplesAll C++ Examples
Example2.1.cExample2.1.cpp
Example3.2.cExample3.2.cpp
Example3.3.cExample3.3.cpp
Example3.5.cExample3.5.cpp
Example3.6.cExample3.6.cpp
Example4.1.cExample4.1.cpp
Example4.2.cExample4.2.cpp
Example5.1.cExample5.1.cpp
Example6.1.cExample6.1.cpp
Example6.6.cExample6.6.cpp
Example7.1.cExample7.1.cpp
Example7.2.cExample7.2.cpp
Example7.3.cExample7.3.cpp
Example7.4.cExample7.4.cpp
Example7.5.cExample7.5.cpp
Part II - OpenMPAll C ExamplesAll C++ Examples
Example9.1.cExample9.1.cpp
Example9.2.cExample9.2.cpp
Example10.1.cExample10.1.cpp
Example10.2.cExample10.2.cpp
Example10.3.cExample10.3.cpp
Example10.4.cExample10.4.cpp
Example10.5.cExample10.5.cpp
Example11.1.cExample11.1.cpp
Example11.2.cExample11.2.cpp
Example11.3.cExample11.3.cpp
Example12.1.cExample12.1.cpp
Example13.1.cExample13.1.cpp
Example13.2.cExample13.2.cpp
Example14.1.cExample14.1.cpp
Example14.2.cExample14.2.cpp
Example14.3.cExample14.3.cpp
Example14.4.cExample14.4.cpp
Part III - MPIAll C ExamplesAll C++ Examples
Example16.1.cExample16.1.cpp
Example17.1.cExample17.1.cpp
Example17.2.cExample17.2.cpp
Example17.3.cExample17.3.cpp
Example17.4.cExample17.4.cpp
Example18.1.cExample18.1.cpp
Example18.2.cExample18.2.cpp
Example18.3.cExample18.3.cpp
Example20.1.cExample20.1.cpp
Example20.2.cExample20.2.cpp
Part IV - CUDAAll C ExamplesAll C++ Examples
checkerror.hcheckerror.h
Example22.1.cuExample22.1.cu
Example22.2.cuExample22.2.cu
Example23.1.cuExample23.1.cu
Example23.2.cuExample23.2.cu
Example23.3.hExample23.3.h
Example24.2.cuExample24.2.cu
Example24.3.cuExample24.3.cu
Example24.4.cuExample24.4.cu
Example24.5.cuExample24.5.cu
Example24.6.cuExample24.6.cu
Example24.7.cuExample24.7.cu
Example24.8.cuExample24.8.cu
Example25.1.cuExample25.1.cu
Example25.2.cuExample25.2.cu
Example25.3.cuExample25.3.cu
Example26.1.cuExample26.1.cu
Example26.2.cuExample26.2.cu
Example26.3.cuExample26.3.cu
Example26.4.cuExample26.4.cu
Example26.5.cuExample26.5.cu
Example26.6.cuExample26.6.cu
Example26.7.cuExample26.7.cu
Part V - OpenCLAll C ExamplesAll C++ Examples
cl_handle_error.hcl_handle_error.h
getkernel.hgetkernel.h
getkernel.cgetkernel.cpp
get_rand.clget_rand.cl
Example28.1.cExample28.1.cpp
Example28.2.cExample28.2.cpp
Example29.1.cExample29.1.cpp
Example29.2.cExample29.2.cpp
Example29.2_diff.clExample29.2_diff.cl
Example29.4.cExample29.4.cpp
Example29.4_diff.clExample29.4_diff.cl
Example30.1.cExample30.1.cpp
Example30.1_diff.clExample30.1_diff.cl
Example30.2.cExample30.2.cpp
Example30.2_diff.clExample30.2_diff.cl
Example30.3.cExample30.3.cpp
Example30.3_diff.clExample30.3_diff.cl
Example31.1.cExample31.1.cpp
Example31.1_diff.clExample31.1_diff.cl
Example31.3.cExample31.3.cpp
Example31.3_diff.clExample31.3_diff.cl
Example32.1.cExample32.1.cpp
Example32.2.clExample32.2.cl
Example32.3.cExample32.3.cpp
Example32.4.cExample32.4.cpp
Example32.5.cExample32.5.cpp