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

Прошу найти ошибку - C++

Восстановить пароль Регистрация
 
CepeJka
0 / 0 / 0
Регистрация: 13.10.2012
Сообщений: 25
24.12.2013, 12:53     Прошу найти ошибку #1
Умножение матрицы на вектор с помощью MPI,Код программы работает только для нулевого процессора,на 1 процессоре он вылетает


#include <cstdlib>
#include <cstdio>
#include <cmath>
#include <cstring>
#include "mpi.h"

const int N=100;
const int a=1;
const int b=9;

double *x, **z, *y, *buf;

int rank, size;
int m;
MPI_Status status;

int random(int min, int max){
return rand()%(max-min+1)+min;}

int main(int argc, char** argv){
MPI_Init(&argc, &argv);
MPI_Comm_size(MPI_COMM_WORLD, &size);
MPI_Comm_rank(MPI_COMM_WORLD, &rank);
m=N/size;
x = new double [N];
z = new double* [m];
y = new double [m];
buf= new double [m];
for(int i=0; i<m; i++){
z[i] = new double [N];}
if(rank==0){
for(int j=0; j<N; j++){
x[j]=random(a,b);
}
for(int p=1; p<size; p++){
MPI_Send(&x, N, MPI_DOUBLE, p, 2, MPI_COMM_WORLD);
}
for(int p=1; p<size; p++){
for(int i=0; i<m; i++){
//z[i] = new double [N];
for(int j=0; j<N; j++){
z[i][j]=random(a,b);
buf[i*N+j]=z[i][j];
}
}
MPI_Send(&buf, m*N, MPI_DOUBLE, p, 1, MPI_COMM_WORLD);
}
}

printf("1");
if(rank!=0){
printf("2.1");
MPI_Recv(&x, N, MPI_DOUBLE, 0,2, MPI_COMM_WORLD, &status);
MPI_Recv(&buf, m*N, MPI_DOUBLE, 0, 1, MPI_COMM_WORLD, &status);
for(int i=0; i<m; i++){
//z[i] = new double [N];
for(int j=0; j<N; j++){
z[i][j]=random(a,b);
z[i][j]=buf[i*N+j];
}
}
printf("2.2");
}

printf("3");
for(int i=0; i<m; i++){
y[i]=0.0;
for(int j=0; j<N; j++){
y[i]+=z[i][j]*x[j];}
//printf("y[i]= %d\n", y[i]);
}

if(rank==0){
FILE* fp=fopen("result.txt", "w");
for(int p=1; p<size; p++){
MPI_Recv(&y[p*m], m, MPI_DOUBLE, p, 1, MPI_COMM_WORLD, &status);
}
for(int i=0; i<N; i++){
fprintf(fp, "y[%d]=%f\n", i, y[i]);
//fclose(fp);
}
fclose(fp);
}
else {MPI_Send(&buf, m, MPI_DOUBLE, 0, 1, MPI_COMM_WORLD);
}

MPI_Finalize();
return 0;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.12.2013, 12:53     Прошу найти ошибку
Посмотрите здесь:

C++ Сортировка массива. Прошу найти ошибку
C++ прошу помочь найти ошибку
C++ Прошу найти ошибку...
C++ прошу помощи, не могу найти ошибку
Задача по структурам, прошу найти ошибку C++
C++ Я не прошу писать мне код, я прошу подсказать мне, что за структура требуется в задании
C++ прошу знатаков найти ошибку
C++ Прошу объяснить о ссылках,указателях,стрелке -> и двоеточиях :: очень прошу я не понял синтаксис

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

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

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