Да и нет.
могу ли я быть уверен, что in1 == stuff1 и
in2 == stuff2, если используемый тег
одинаковы во всех случаях?
Да. Существует определенная корреляция 1: 1 между send и recv, которая получит правильный ввод в правильный буфер recv. Такое поведение гарантируется стандартом и обеспечивается всеми реализациями MPI.
Нет. Точный порядок внутренней последовательности сообщений и точный порядок, в котором заполняются буферы на стороне получателя, является чем-то вроде черного ящика ... особенно, когда используются сообщения в стиле RDMA с несколькими буферами в полете (например, InfiniBand).
Если ваш код использует несколько потоков и проверяет буфер для определения полноты (например, ожидая переключения бита) вместо использования MPI_Test или MPI_Wait, то возможно, что сообщения могут поступать не по порядку (но в правильный буфер).
Если ваш код зависит от заполнения in1 = stuff1 ДО ДОПОЛНЕНИЯ in2 = stuff2 на стороне получателя, и для обоих сообщений существует один ранг отправки, то использование MPI_Issend (неблокирующая, синхронная отправка) гарантирует сообщения передаются по порядку. Если вам нужно гарантировать порядок заполнения буфера для нескольких recv из нескольких рангов отправки, то между каждым revc требуется какой-то блокирующий вызов (например, MPI_Recv, MPI_Barrier, MPI_Wait и т. Д.).