Intermediate MPI
MPI (Message Passing Interface) is a popular method for writing parallel (multi-processor) codes for anything from desktops to the largest supercomputers. It relies on explicit passing of messages (data) between processors, by the programmer.
These slides and notes cover some MPI beyond the basics, but which is still very generally useful. To find these notes useful, you should be happy writing basic programs in MPI, using Send, Recv and collectives, and be interested in knowing more.
Custom MPI types are extremely useful for a lot of problems, especially when writing in C, because they allow you to pass around structs and array subsections as easily as single numbers.