Я понимаю, что MPI_Bsend
сохранит буфер отправителя в локальном буфере, управляемом библиотекой MPI, поэтому можно безопасно использовать буфер отправителя для других целей. Я не понимаю, как MPI_Ssend
гарантирует это?
Отправка в синхронном режиме.
Отправка, использующая синхронный режим, может быть запущена независимо от того, был ли получен соответствующий прием. вывешенный. Однако отправка будет успешно завершена, только если будет опубликован соответствующий прием, и началась операция приема для получения сообщения, отправленного синхронной отправкой. Таким образом, завершение синхронной отправки не только указывает, что буфер отправки может быть повторно использован, но также указывает, что получатель достиг определенной точки в своем выполнении, а именно, что он начал выполнять совпадающий прием
Как указано выше, MPI_Ssend
вернется (ie разрешить дальнейшее выполнение программы), если соответствующий прием был опубликован, и он начал получать сообщение, отправленное синхронной отправкой. Рассмотрим следующий случай:
Я отправляю огромный массив данных int
скажем data[1 million]
через MPI_Ssend
. Другой процесс начинает получать его (но, возможно, не сделал это полностью), что позволяет MPI_Ssend
возвращать и выполнять следующий программный оператор. Следующий оператор вносит изменения в буфер в самом конце data[1 million] = \*new value*\
. Затем MPI_Ssend
наконец достигает конца буфера и отправляет это новое значение, которое было не тем, что я хотел.
Чего мне не хватает на этом рисунке?
TIA