Mpi

Тема в разделе "MS Visual C++", создана пользователем Siryus, 7 июн 2008.

  1. Siryus

    Siryus Гость

    Помогите, пожалуйста, мне решить проблему.
    Есть несколько паралельных процессов, который что то там считают. И есть один главный (нулевой) процес который раздает даные процессам для обработки и собирает от них результаты. И как только нулевой полуает от 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 то все работаетно тогда даные будут получатся по очереди , сначала от первого а потом от второго, п мне нужно полуать даные от того кто первым справился с обработкой даных
     
Загрузка...

Поделиться этой страницей