10 / 9 / 7
Регистрация: 03.03.2013
Сообщений: 71
1

Создание нового типа MPI

04.05.2014, 14:11. Показов 809. Ответов 1
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Задача следующая: в каждом процессе дано три числа(одно вещественное, два целых), используя произвольный тип, переслать числа из подчиненных в главный и в главном вывести. Делаю так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
    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);
    
    typedef struct {
        double a;
        int b,c;
    } doubleint2;
    doubleint2 sbuf,rbuf[10];
    MPI_Datatype newtype;
    int blockers[4]={1,1,1,1};
    MPI_Aint displs[4]={offsetof(doubleint2,a),offsetof(doubleint2,b),offsetof(doubleint2,c),sizeof(doubleint2)};
    MPI_Datatype oldtypes[4]={MPI_DOUBLE,MPI_INT,MPI_INT,MPI_UB};
    
    MPI_Type_struct(4,blockers,displs,oldtypes,&newtype);
    MPI_Type_commit(&newtype);
 
    if(rank>0)
    {
        *Ввод sbuf.a, sbuf.b, sbuf.c*
        MPI_Gather(&sbuf,3,newtype,&rbuf,3,newtype,0,MPI_COMM_WORLD);
    }
    else
    {
        MPI_Gather(&sbuf,3,newtype,&rbuf,3,newtype,0,MPI_COMM_WORLD);
        for(int i=0; i<size-1; i++)
        {
            *Вывод rbuf[i].a, rbuf[i].b, rbuf[i].c*
        }
    }
Запускается через раз, выводит неправильно, иногда возникает ошибка(attach1.png)
Миниатюры
Создание нового типа MPI  
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
04.05.2014, 14:11
Ответы с готовыми решениями:

Создание нового типа
Создаю новый тип: type Nine = (1, 2, 3, 4, 5, 6, 7, 8, 9); Выходит ошибка: ожидался тип....

Объявление нового типа
Добрый день! У меня в основном юните используется специальный тип данных: type TA = array of...

Кодировка при создании нового типа
Здравствуйте! Создала тип данных перечисление (ENUM) - группа крови (сам тип назвала BT), однако...

Ассоциация нового типа файла в браузере
День добрый. Я хочу, чтобы файлы, содержащие внутри html, но с расширением, например, &quot;mysite&quot;...

1
10 / 9 / 7
Регистрация: 03.03.2013
Сообщений: 71
10.05.2014, 15:28  [ТС] 2
Проблему решил, не нужно было указывать четвертый параметр в объявлении нового типа и через MPI_Gather отправлять/принимать 1 значение нового типа
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
    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);
    
    typedef struct {
        double a;
        int b,c;
    } doubleint2;
    doubleint2 sbuf,rbuf[10];
    MPI_Datatype newtype;
    int blockers[3]={1,1,1};
    MPI_Aint displs[3]={offsetof(doubleint2,a),offsetof(doubleint2,b),offsetof(doubleint2,c)};
    MPI_Datatype oldtypes[3]={MPI_DOUBLE,MPI_INT,MPI_INT};
    
    MPI_Type_struct(3,blockers,displs,oldtypes,&newtype);
    MPI_Type_commit(&newtype);
 
    if(rank>0)
    {
        *Ввод a,b,c*
    }
    MPI_Gather(&sbuf,1,newtype,&rbuf,1,newtype,0,MPI_COMM_WORLD);
    if(rank == 0)
    {
        for(int i=1; i<size; i++)
        {
            *Вывод a,b,c*
        }
    }
0
10.05.2014, 15:28
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
10.05.2014, 15:28
Помогаю со студенческими работами здесь

Добавление нового поля заданного типа в запрос
Здравствуйте! Есть таблица с несколькими колонками.Нужно написать запрос, который выведет на...

Как грамотно нтерпретировать ввод нового имени типа, введённого typedef
Друзья! Дело в том, что вот такой вот код: typedef char (*char6) ; И он значит, что char6...

Найти вероятность , что все студенты получат книги нового типа
В библиотеке имеется 15 задачников нового типа И 10 старого. Какова вероятность того что все...

Спроектировать контейнер нового типа в форме кругового конуса без дна
Спроектировать контейнер нового типа в форме кругового конуса без дна объемом 1 м3 (см. рисунок)....


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru