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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
maksimkalon
9 / 8 / 2
Регистрация: 03.03.2013
Сообщений: 71
#1

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

04.05.2014, 14:11. Просмотров 311. Ответов 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
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)
0
Миниатюры
Создание нового типа MPI  
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.05.2014, 14:11
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Создание нового типа MPI (C++):

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

Создание нового потока - C++
Вот тут выдаёт ошибку. DWORD thID; CreateThread(NULL,NULL,SexToClient, &amp;client_socket,NULL,&amp;thID); } ...

Создание нового проекта C++ - C++
Ребят столкнулся с такой проблемой. Хочу создать новый проект C++ в Visual Studio 2010 Professional но он почему то не создаётся, остальные...

Создание нового файла - C++
Здравствуйте! Подскажите как создать фаил в программе?

Создание нового проекта - C++
Здравствуйте. Установил MVS 2012, начал создавать проект - Консольное приложение win 32....когда в последнем окошке ставлю галочку &quot;Пустой...

Создание нового класса - C++
Доброго времени суток!! Задание: 1. Определить пользовательский класс &quot;компьютер&quot;. 2. Определить в классе следующие конструкторы:...

1
maksimkalon
9 / 8 / 2
Регистрация: 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
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.05.2014, 15:28
Привет! Вот еще темы с ответами:

Создание нового класса - C++
Доброго времени суток!! Задание: 1. Определить пользовательский класс &quot;компьютер&quot;. 2. Определить в классе следующие конструкторы:...

Конструктор. Создание нового объекта - C++
Всем привет, Пишу программу &quot;Мой сборник CD&quot;. Как можно создавать объекты не вводя их количество в начале программы? Например, если...

Создание нового массива из двух предыдущих - C++
Помогите , господа прогеры. Я начинающий в C++. И мне нужна помощь от вас. Мне надо сделать программу , которая : 1. Надо создать 1...

Создание нового массива из индексов старого - C++
Дан целочисленный массив A. Сформировать массив B, поместив в него значения индексов тех элементов массива A, которые являются простыми...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru