В related question Недавно я узнал, что нужно быть очень осторожным, используя MPI с несколькими потоками. Поскольку реализация, которую я использую, не поддерживает MPI_THREAD_MULTIPLE
, я просто завернул каждый звонок MPI::COMM_WORLD
с помощью std::lock_guard<std::mutex>
.Защита потока MPI-связь
Мой вопрос сейчас: Это перебор? Конкретно: могу ли я Send
в точное время I Recv
?
Я попробовал это с двумя std::mutex
, один для отправки, один для получения. На моей тестовой машине у меня было несколько тестовых прогонов без ошибок, но это не гарантия, это может быть просто совпадение.
Дополнение: теперь - с сотнями тестовых прогонов - на самом деле произошла одна отвратительная ошибка сегментации , но я не уверен на 100%, если это связано с одновременным отправкой/возвратом.
Вы пробовали это по сети? на тестовом компьютере локально он может вести себя по-разному, время отправки сообщения/recv не является детерминированным, и не является блокировкой/разблокировкой мьютекса – pyCthon
@pyCthon Я сделал это только локально, но кажется, что даже это не удается. К сожалению, разные коммуникаторы тоже не являются решением. – stefan