MPI — асинхронная трансляция / сбор

У меня есть проект, который требует ‘n’ количество процессов для работы, пока проблема не будет решена. Каждый подчиненный процесс выполняет один и тот же код. Когда возникает определенное условие, процесс должен уведомлять все другие процессы неблокирующим образом. Другие процессы также должны получать это сообщение неблокирующим способом.

Есть ли способ обойтись без многопоточности отдельного цикла?

6

Решение

Прошло много времени с тех пор, как я использовал 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;
4

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]