1. Набираем команду codeby webinar. Набираем команду для организации и проведения вебинаров. Подробнее ...

    Скрыть объявление
  2. Требуются разработчики и тестеры для проекта codebyOS. Требования для участия в проекте: Знание принципов работы ОС на базе Linux; Знание Bash; Крайне желательное знание CPP, Python, Lua; Навыки системного администрирования. Подробнее ...

    Скрыть объявление
  3. Получи 30.000 рублей. Для получения денег необходимо принять участие в конкурсе авторов codeby. С условиями и призами можно ознакомиться на этой странице ...

    Внимание! Регистрация авторов на конкурс закрыта.

    Скрыть объявление

Mpi

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

  1. Siryus

    Siryus Гость

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

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