Есть ли способ проверить, ожидают ли некоторые процессы MPI_Recv?
У меня есть корневой процесс и несколько подчиненных процессов.
Ведомый псевдокод:
while (1) {
do_some_stuff; // calls MPI_Test and clear unused buffers
MPI_Recv(buf, ...);
do_something_with_buf;
MPI_Isend(buf2, ...); // possibly many sends depending on what was in buf
}
Если все подчиненные процессы зависают на MPI_Recv, то работа выполнена и мне нужно остановить цикл. Теперь мне нужен какой-то способ уведомить подчиненные процессы о том, что работа выполнена. Есть какой-либо способ сделать это? Я подумал, что может быть что-то вроде обратного зонда, чтобы проверить, ждет ли кто-нибудь сообщения, вместо того, чтобы проверять, есть ли сообщение для получения. Ничего полезного пока не нашел.
Изменить: еще одно объяснение.
У меня есть один корневой процесс, который читает огромный файл и отправляет прочитанные данные рабочим (остальным процессам). Каждый работник получает часть данных, поэтому они хорошо распределяются (у каждого работника хранится примерно одинаковое количество данных). Затем эти рабочие начинают общаться друг с другом, отправляя частичные вычисления. Когда рабочий процесс получает частичное вычисление, он может произвести много новых частичных результатов, некоторые из которых необходимо отправить другим работам. Работа сделана, когда всем работникам нечего делать и больше нет частичных результатов, ожидающих получения.