Форум программистов, компьютерный форум CyberForum.ru

MPI_Sendrecv_replace - C++

Восстановить пароль Регистрация
 
maksimkalon
8 / 7 / 2
Регистрация: 03.03.2013
Сообщений: 70
30.04.2014, 10:32     MPI_Sendrecv_replace #1
Здравствуйте! Задача такая: в каждом процессе дано вещественное число, нужно изменить порядок этих чисел, т.е. число из процесса 0 поместить в последний процесс, из процесса 1 в предпоследний процесс, и т.д. Делаю так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
    int flag;
    MPI_Initialized(&flag);
    if (flag == 0)
        return;
    int rank, size;
    MPI_Comm_size(MPI_COMM_WORLD, &size);
    MPI_Comm_rank(MPI_COMM_WORLD, &rank);
    
    MPI_Status s;
    double a;
    *Получаем число a*
    MPI_Sendrecv_replace(&a,1,MPI_DOUBLE,size-rank-1,0,rank,0,MPI_COMM_WORLD,&s);
    *Выводим число a*
При запуске программы зависают все процессы. В попытке разобраться написал следующий код:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
    int flag;
    MPI_Initialized(&flag);
    if (flag == 0)
        return;
    int rank, size;
    MPI_Comm_size(MPI_COMM_WORLD, &size);
    MPI_Comm_rank(MPI_COMM_WORLD, &rank);
    
    MPI_Status s;
    double a;
    *Получаем число a*
    if(rank == 0 || rank == 1)
    {
        MPI_Sendrecv_replace(&a,1,MPI_DOUBLE,0,0,1,0,MPI_COMM_WORLD,&s);
    }
    *Выводим число a*
В результате процесс 1 завис, но в нулевом процессе было число из процесса 1
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
gng
605 / 451 / 122
Регистрация: 08.09.2013
Сообщений: 1,153
30.04.2014, 13:57     MPI_Sendrecv_replace #2
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <stdio.h>
#include <mpi.h>
 
main(int ac, char *av[]) {
   int flag;
   MPI_Init(&ac, &av);
   int rank, size;
   MPI_Comm_size(MPI_COMM_WORLD, &size);
   MPI_Comm_rank(MPI_COMM_WORLD, &rank);
 
   MPI_Status s;
   double a= (double)rank;
   printf ("before: %d %f\n", rank, a);
   MPI_Sendrecv_replace(&a,1,MPI_DOUBLE,size-rank-1,0,size-rank-1,0,MPI_COMM_WORLD,&s);
   printf ("after: %d %f\n", rank, a);
   MPI_Finalize();
}
maksimkalon
8 / 7 / 2
Регистрация: 03.03.2013
Сообщений: 70
30.04.2014, 14:17  [ТС]     MPI_Sendrecv_replace #3
Получается, что мы пересылаем данные из процесса size-rank-1 в процесс size-rank-1? Т.е. все остается на месте
gng
605 / 451 / 122
Регистрация: 08.09.2013
Сообщений: 1,153
30.04.2014, 15:26     MPI_Sendrecv_replace #4
Цитата Сообщение от maksimkalon Посмотреть сообщение
Получается, что мы пересылаем данные из процесса size-rank-1 в процесс size-rank-1? Т.е. все остается на месте
Вы программу запускали?
Процесс rank посылает данные процессу size-rank-1 и принимает данные от процесса size-rank-1.
maksimkalon
8 / 7 / 2
Регистрация: 03.03.2013
Сообщений: 70
30.04.2014, 15:33  [ТС]     MPI_Sendrecv_replace #5
Теперь понятно, неправильно понял принцип работы функции, спасибо большое
Yandex
Объявления
30.04.2014, 15:33     MPI_Sendrecv_replace
Ответ Создать тему
Опции темы

Текущее время: 15:18. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru