У меня есть проект, который требует ‘n’ количество процессов для работы, пока проблема не будет решена. Каждый подчиненный процесс выполняет один и тот же код. Когда возникает определенное условие, процесс должен уведомлять все другие процессы неблокирующим образом. Другие процессы также должны получать это сообщение неблокирующим способом.
Есть ли способ обойтись без многопоточности отдельного цикла?
Прошло много времени с тех пор, как я использовал MPI. Но я функции неблокирующие Может быть, что-то вроде этого:
int comm_size = comm.Get_size();
int comm_rank = comm.Get_rank();
int* data = new int[comm_size];
while (some_condition)
{
//During each iteration, check for messages from other nodes
for (int node = 0; node < comm_size; node++)
{
if (node != comm_rank)
{
if (comm.Iprobe(node, TAG_NUM))
{
comm.Irecv(data[node], 1, MPI_INT, node, TAG_NUM);
}
}
}
if (some_other_condition)
{
//Send the message to every node
for (int node = 0; node < comm_size; node++)
{
if (node != comm_rank)
{
comm.Isend(data[node], 1, MPI_INT, node, TAG_NUM);
}
}
}
//do normal work here.
}
delete [] data;
Других решений пока нет …