The document discusses different types of message passing routines in MPI including collective, synchronous, non-blocking, and asynchronous routines. Collective routines involve sending/receiving messages to/from a group of processes and include operations like broadcast, gather, scatter, reduce, and barrier. Synchronous routines return only after message transfer completes while non-blocking routines return immediately without waiting for completion. Asynchronous routines return before transfer finishes by using message buffers to store messages.