Всем привет! Ситуация следующая:
На каждом mpi-процессе основным потоком запускается ещё 2 потока. Основной поток приложения выполняет вычисления, второй поток выполняет только прием данных, третий только отправку. Вычисления на основном потоке ведутся порциями, при наработке очередной порции данных выполняется их отправка третьим потоком. Т.е. здесь происходит отправка по событию. Второй поток работает всё время в режиме ожидания. По буферам выделяемым в программе пересечения между ними нет.
Одновременно в процессе из разных потоков могут вызываться только функции MPI_Isend(MPI_Bsend), MPI_Irecv(MPI_Recv). Оба потока(2 и 3) работают на одном коммуникаторе. Коммуникатор создавал дублируя основной коммуникатор процесса(MPI_Comm_dup). Всё.
Проблема: запуск падает и есть соответственно два предположения. 1) вызовы mpi-функций на одном коммуникаторе из нескольких потоков одновременно не безопасны. 2) ошибка не связанная с пунктом 1.
Я не нашел в стандарте упоминания является ли вызов из разных потоков mpi-функций безопасным по требованию или зависит от реализации, или безопасно ли работать на одном коммуникаторе из разных потоков — пока это главный вопрос.
Можно реализовать по другому, но тут вопрос принципа — хотелось бы понять в чем дело.
Такая вот проблема. Если есть какие соображения поделитесь пожалуйста.