OcamlMpi имеет инструкции по блокировке отправки и получения. Кто-нибудь сделал неблокирующий прием для ocamlmpi?Неблокирующий прием в mpi + ocaml?
ответ
К сожалению, в источнике OcamlMPI отсутствуют ссылки на неблокирующие вызовы MPI. Однако я заметил, что для блокирующих версий используется MPI_Send. При определенных условиях MPI_Send будет вести себя как неблокирующий вызов (например, для небольших сообщений, которые подходят к буферам исходящих сообщений по умолчанию), однако это поведение зависит от реализации, и на него нельзя положиться.
По внешнему виду источника OcamlMPI я не думаю, что было бы сложно реализовать ваши собственные неблокирующие эквиваленты, посмотрите в «msgs.c» (файл в источнике OcamlMPI), функция " caml_mpi_send "содержит код стандартной отправки. Замена MPI_Send на MPI_Isend и обработка возврата структуры данных MPI_Request должны сделать трюк. О, и вам нужно будет добавить еще одну функцию для MPI_Wait. Для получения дополнительной информации просмотрите MPI standard.
Надеюсь, что это поможет!
Mpi.iprobe доступен в последнем стволу ocamlmpi Subversion:
http://forge.ocamlcore.org/projects/ocamlmpi/
Это обеспечивает нелипкая проверку на наличие новых сообщений. Когда сообщение доступно, для извлечения сообщения можно использовать обычный прием блокировки.