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

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

Войти
Регистрация
Восстановить пароль
 
mages
0 / 0 / 0
Регистрация: 21.12.2009
Сообщений: 1
#1

Параллельное программирование с+= - C++

24.12.2009, 12:50. Просмотров 800. Ответов 0
Метки нет (Все метки)

Здравствуйте ! возникла проблема с программой.
Делаю зачетную работу; Дана квадратная матрица NxM. Найти максимальные элементы каждой строки (N кратно количеству процессов).
Написал программу, на 6 процессах на матрице 6х6 вроде бы работает нормально, находит максимальные элементы строки, но! ставит их не в том порядке как надо.
пример матрицы 6 на 6
6 6
1 2 3 4 5 6
1 2 3 4 5 7
1 2 3 4 5 8
1 2 3 4 5 9
1 2 3 4 5 10
1 2 3 4 5 11
ответ;
6
12 и дальше уже по другому порядке
7 или 9
9 или 7
10 или 11
11 или 10
Подобные вещи и на 4 процессах при матрице 4 на 4.
а вот и решение
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <string.h>
#include <mpi.h>


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
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
void Init(FILE *f, int m,int n, double *B)
{int i,j; 
for(i=0;i<m;i++) {
for(j=0;j<n;j++)fscanf(f,"%lf",&B[i*m+j]);}
fscanf(f,"\n"); 
for(i=0;i<m;i++)
{
for(j=0;j<n;j++)
printf("%4.lf",B[i*m+j]);
printf("\n");
}
}
 
 
double Max( double *B,int m,int n)
{
int i,j; 
double max1;
max1 = B[0];
for(i = 0; i < m; i++)
{ max1=B[0];
for(j = 0; j < n; j++) 
{ if (B[i*m+j] > max1)
max1 = B[i*m+j];}
//for(i=0;i<k;i++)
printf("max=%lf\n",max1);
}
} 
 
 
void print(double *B,int m,int n)
{
int i,j;
for(i=0;i<m;i++){ 
for(j=0;j<n;j++) printf("%4.0lf",B[i*m+j]); printf("\n");
}
}
 
 
int main (int argc,char *argv[])
{ 
FILE *f=fopen("input.txt","r");
int i,np,rk,m,n,chunk=1; 
double *B,*Bloc,t;
 
MPI_Init(&argc,&argv);
MPI_Comm_size(MPI_COMM_WORLD,&np);
MPI_Comm_rank(MPI_COMM_WORLD,&rk);
if(rk==0)
{ 
fscanf(f,"%d ",&m); fscanf(f,"%d\n",&n);
chunk=m/np;
B=(double *)malloc(m*n*sizeof(double));
}
MPI_Bcast(&m,1, MPI_INT,0, MPI_COMM_WORLD);
MPI_Bcast(&chunk,1, MPI_INT,0, MPI_COMM_WORLD);
Bloc=(double *)malloc(chunk*n*sizeof(double));
 
if (rk==0)
{
Init(f,m,n,B);
t=MPI_Wtime();
}
MPI_Scatter(B,m*chunk,MPI_DOUBLE,Bloc,m*chunk,MPI_DOUBLE,0,MPI_COMM_WORLD);
Max(Bloc,chunk,n);
MPI_Gather(Bloc,m*chunk,MPI_DOUBLE,B,m*chunk,MPI_DOUBLE,0,MPI_COMM_WORLD);
 
if(rk==0)
{
t=MPI_Wtime()-t;
printf("%lf sec. \n",t);
// print(B,m,n);
}
//MPI_Finalize();
return 0;
}
что в программе не так?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.12.2009, 12:50
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Параллельное программирование с+= (C++):

Параллельное программирование - C++
Кто-нибудь использовал в своей жизни? Если да, то какой? И были ли положительные результаты в плане ускорения? О, да... Может, кто CUDA...

параллельное программирование - C++
Подскажите, пожалуйста! Возвожу положительные числа в степень, а выдается отрицательный результат. Как быть? #include &lt;iostream&gt; ...

Параллельное программирование - C++
Как составить параллельную программу вычисления среднего арифметического элементов вектора?

Параллельное программирование в С++ - C++
Здравствуйте! я новичок в параллельном программировании. Помогите пожалуйста с задачкой!! Есть одна глобальная переменная, которая должна...

Параллельное программирование - C++
Подскажите, пожалуйста, как в PUTTY начать редактировать файл?

параллельное программирование - C++
Клиент серверное приложение. Суть - в реализации обычного чата. Оба устройства коннекятся через клиент-серверный сокет. Всё работает ок. Но...

0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.12.2009, 12:50
Привет! Вот еще темы с ответами:

Параллельное программирование - C++
У меня есть задание: Коллективные операции. Работа имитирует реальный поиск в параллельной базе данных. Некоторое множество записей...

Параллельное программирование - C++
Всем доброго времени суток! Не нашла на сайте ни одной темы с параллельным программированием. Хотела узнать есть ли здесь люди знакомые с...

Параллельное программирование - C++
Нужно написать простейшую программу для кластера. Читал про MPI, но там тоже есть выбор: из boost-а, OpenMPI, OpenMP, который...

Параллельное программирование на C++ - C++
Вот например происходит какое то действие, это действие длится 5 минут. И вот я запускаю это действие и жду, жду, жду, и тут мне надоело...


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

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

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