Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.83/18: Рейтинг темы: голосов - 18, средняя оценка - 4.83
20 / 16 / 7
Регистрация: 27.02.2012
Сообщений: 742
1

MPI_Reduce

28.09.2014, 00:27. Показов 3560. Ответов 3
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Знаю, что на форуме темы с распределенными вычислениями средствами библиотеки MPI не популярны, но всё же.

Задача: Задать 11 процессов, 10 из которых генерят массивы из 1000 случайных чисел и передают их в 0 процесс, в котором MPI_Reduce их суммирует и выводит результат.

Прототип функции:
C++
1
int MPI_Reduce(void *sendbuf, void *recvbuf, int count, MPI_Datatype datatype, MPI_Op op, int root, MPI_Comm comm)
Код, который не работает:
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
#include <stdio.h> 
#include <stdlib.h>
#include <mpi.h>
#include <conio.h> 
 
int main(int argc , char  *argv[]) {  
int me, size, max=1000;
int mass[1000];
int *recarray=new int[]; //динам. массив приема
MPI_Init(&argc , &argv); 
MPI_Comm_rank(MPI_COMM_WORLD, &me);
MPI_Comm_size(MPI_COMM_WORLD, &size);
 
if(me!=0){
for(int i=0; i<max;i++){
    mass[i]=rand()%max;} }
 
if(me==0){
MPI_Reduce(mass, recarray, size*max, MPI_INT, MPI_SUM, 0, MPI_COMM_WORLD);
printf("Proc %d Result: %d", me, recarray);}
 
MPI_Finalize();
delete recarray;
_getch();
return 0;
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
28.09.2014, 00:27
Ответы с готовыми решениями:

MPI_Reduce
Пытаюсь выполнить следующий код. MPI_Reduce(&amp;result, &amp;result, 1, MPI_DOUBLE, MPI_SUM, 0,...

MPI_Scatter и MPI_Reduce
Здравствуйте. Помогите, пожалуйста, решить задачу. На процессе с номером &quot;0&quot; задать...

Ошибка с MPI_Reduce
Доброго всем времени суток Почему-то прога с MPI_Reduce глючит, причем оч странно: я ее компилю...


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

Или воспользуйтесь поиском по форуму:
3
1181 / 894 / 94
Регистрация: 03.08.2011
Сообщений: 2,461
28.09.2014, 01:46 2
Цитата Сообщение от Satansoft Посмотреть сообщение
int *recarray=new int[];
Нельзя так. Размер должен быть указан.
1
20 / 16 / 7
Регистрация: 27.02.2012
Сообщений: 742
28.09.2014, 10:59  [ТС] 3
Цитата Сообщение от Toshkarik Посмотреть сообщение
Нельзя так. Размер должен быть указан.
дал размер в 10000, но работать она от этого не стала, правда получил десяток системных эрроров и ошибки VS на запись в память
0
20 / 16 / 7
Регистрация: 27.02.2012
Сообщений: 742
28.09.2014, 11:09  [ТС] 4
Вариант с выводом только конечного результата

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
#include <stdio.h> 
#include <stdlib.h>
#include <mpi.h>
#include <conio.h> 
 
int main(int argc , char  *argv[]) {  
int me, size, max=1000;
long int mass[1000];
int *recarray=new int[100000]; //динам. массив приема
MPI_Init(&argc , &argv);
 
MPI_Comm_rank(MPI_COMM_WORLD, &me);
MPI_Comm_size(MPI_COMM_WORLD, &size);
 
if(me!=0){
for(int i=0; i<max;i++){
    mass[i]=rand()%max;} }
 
MPI_Reduce(mass, recarray, size*max, MPI_INT, MPI_SUM, 0, MPI_COMM_WORLD);
 
if(me==0){
printf("Proc %d Result: %d", me, recarray);}
 
MPI_Finalize();
delete recarray;
_getch();
return 0;
}
Миниатюры
MPI_Reduce  
0
28.09.2014, 11:09
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru