MPI: Как оповестить процесс о новых сообщениях?

Есть множество процессов. В каждом процессе есть список задач. В каждом процессе по 2 потока.
Первый поток вычисляет задачи. Если задачи закончились, он запрашивает новые у других процессов.
Второй поток ждет запросов от других процессов. Если пришел запрос, и есть лишние задачи, то он их отдает другому процессу.

На машине, на которой будет работать данная система, mpi может работать только с флагом MPI_THREAD_SERIALIZED (программист обещает, что потоки не будут вызывать функции MPI одновременно). Поэтому возник вопрос: Как реализовать ожидание сообщений во втором потоке? Если правильно понимаю, то блокирующие операции типа mpi_recv не подходят, так как первому потоку тоже нужно пользоваться функциями mpi. Неблокирующий прием mpi_irecv тоже не подходит, потому что прием может начаться в любой момент (а в этот момент первый поток может использовать функции mpi).
Как реализовать ожидание сообщений во втором потоке?
  • Вопрос задан
  • 341 просмотр
Пригласить эксперта
Ответы на вопрос 1
arusef
@arusef
Novice .NET dev
Можно просто захватывать мьютекс на время выполнения приёма данных. Однако, исходя из здравого смысла, ваша "многопоточность" будет сводиться к тому, что потоки станут работать поочерёдно. Можно использовать только один поток, т.к. MPI в принципе подразумевает выделение процессов под количество вычисляющих ядер в системе и наличие второго потока будет лишь притормаживать работу. В таком случае, ваш процесс может принимать данные о задаче в неблокирующей манере в какой-нибудь буфер, где после выполнения задачи будет проводиться проверка на наличие новых задач.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы