Zwiększenie wydajności uzyskać można przez rozdzielenie komunikacji i obliczeń. Daje to dobre efekty szczególnie w tych systemach, w których komunikacja obsługiwana jest przez autonomiczny podukład. Operacja wysyłająca zwraca sterowanie nie czekając, aż wiadomość zostanie odebrana. Analogicznie przy odbiorze wiadomości może zostać użyta nieblokująca funkcja receive, której wywołanie jedynie rozpoczyna kopiowanie danych do bufora, które od tego momentu przebiega jednocześnie z obliczeniami. Do zakończenia odbioru wiadomości konieczne jest wywołanie blokującej funkcji, która kończy odbieranie wiadomości. Nieblokująca funkcja send występuje w tych samych czterech typach, jak w przypadku funkcji blokującej: standardowy, buforowany, synchroniczny oraz przygotowany. We wszystkich przypadkach funkcja zwraca sterowanie natychmiast, niezależnie od stanu innych procesów.
Irsend - nieblokujące wysyłanie "przygotowane". Podobnie jak MPI_Rsend(), ale dodatkowo za pomocą MPI_Wait() i MPI_Test() sprawdzamy czy adresat odebrał już komunikat. Funkcja powinna być używana tylko wtedy, gdy programista jest pewien, że odpowiednia funkcja odbierająca została już uruchomiona.