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

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

Восстановить пароль Регистрация
 
mages
Сообщений: n/a
24.12.2009, 12:50     Параллельное программирование с+= #1
Здравствуйте ! возникла проблема с программой.
Делаю зачетную работу; Дана квадратная матрица 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;
}
что в программе не так?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.12.2009, 12:50     Параллельное программирование с+=
Посмотрите здесь:

Параллельное программирование C++
C++ Параллельное программирование
C++ Параллельное программирование
Параллельное программирование C++
Параллельное программирование в С++ C++
параллельное программирование C++
параллельное программирование C++
Параллельное программирование C++
Параллельное программирование C++
C++ Параллельное программирование на C++
C++ Параллельное программирование

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ответ Создать тему
Опции темы

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