Note that the shift operations, because they allow simultaneous sending and receiving, are not subject to the serialization that just using MPI_Send and MPI_Recv are.