Mpi

  • Автор темы Siryus
  • Дата начала
S

Siryus

#1
Помогите, пожалуйста, мне решить проблему.
Есть несколько паралельных процессов, который что то там считают. И есть один главный (нулевой) процес который раздает даные процессам для обработки и собирает от них результаты. И как только нулевой полуает от i-го процесса даные он сразу же должен отдать новые даные для обработки. Проблема в том, у меня никак не получается организовать последовательную проверку в нулевом процессе отдает ли ему какой то процес даные. Вот такой код работать не хочет


int flag = 0;
MPI_Status status;
MPI_Request request;

if (myid == 0)
{
int * b;
cout << "I am 0 thread";

while (!flag) // ждем прием от 1-го или 2-го процесса
{
MPI_Irecv(&b, MAXCOUNT, MPI_INT, 1, 0, MPI_COMM_WORLD,&request);
MPI_Irecv(&b, MAXCOUNT, MPI_INT, 2, 0, MPI_COMM_WORLD,&request);

MPI_Test(&request,&test,&status);
}
// ...
}
if (myid == 1)
{
cout << "I am 1 thread";
// ...

MPI_Isend(&a, 3, MPI_INT, 0, 0, MPI_COMM_WORLD,&request1);
MPI_Wait (&request1,&status1);
}

if (myid == 1)
{
cout << "I am 1 thread";
// ...

MPI_Isend(&a, 3, MPI_INT, 0, 0, MPI_COMM_WORLD,&request1); // передаем нулевому процессу даные
MPI_Wait (&request1,&status1); // ждем окончание пересылки
}


здесь 1 и 2 процессы начинаю передавать а нулевой их не принимает даные ни от первого ни от второго.
Если в нулевом использовать не MPI_Test, а MPI_Wait то все работаетно тогда даные будут получатся по очереди , сначала от первого а потом от второго, п мне нужно полуать даные от того кто первым справился с обработкой даных