Other reading/resources #
There are many excellent textbooks and tutorials on parallel programming. Here are some I like, with brief commentary.
- 
Victor Eijkhout, Introduction to High Performance Computing. This is a gentle, and quite comprehensive, introduction to parallel computing. The author has a separate book which contains more details on OpenMP and MPI programming models.
 - 
Georg Hager & Gerhard Wellein, Introduction to High Performance Computing for Scientists and Engineers, also available through the Durham library. This book is slightly heavier-going and has a focus on code optimisation and performance-modelling from the off. An annotated bibliography is provided by Georg Hager.
 - 
Bill Gropp, one of the authors of the MPI standard, has a course on designing and building applications for extreme scale systems. He covers performance models as well, and has a lot of good advice.
 - 
Matt Knepley’s notes on computational science also have much good advice, with a focus on the use of PETSc providing parallel data structures and solvers.
 - 
The Lawrence Livermore high performance computing centre, has some nice tutorials. Including one introducing OpenMP and one introductory, and one advanced MPI tutorial.
 - 
The UK’s supercomputing service ARCHER, ran regular training events over its lifetime. Much of their training material is online, including some videos of previous courses.