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

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

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

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

24.12.2013, 12:53. Просмотров 161. Ответов 0
Метки нет (Все метки)

Умножение матрицы на вектор с помощью 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;
}
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.12.2013, 12:53
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Прошу найти ошибку (C++):

Прошу найти ошибку... - C++
#include &lt;conio.h&gt; #include &lt;stdio.h&gt; int main(void) { const int n=5; int a, i, j, b; printf (&quot;Enter 5\n&quot;); for...

прошу знатаков найти ошибку - C++
вот текст задания для понимания что я понаписал ЛАБОРАТОРНАЯ РАБОТА № 2 РЕАЛИЗАЦИЯ РЕГУЛЯРНЫХ ЦИКЛОВ СРЕДСТВАМИ ЯЗЫКА С++ Цель...

прошу помочь найти ошибку - C++
задача должна заключатЬся в следующем: вводится предположим число 5, программа обрабатывает и выдает на строке 5 звездочек. #include...

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

Сортировка массива. Прошу найти ошибку - C++
Дано N цисло (1&lt;=N&lt;=100). Нужно отсортировать. Прошу найти ошибку #include &lt;iostream&gt; #include &lt;iomanip&gt; using namespace std; ...

прошу помощи, не могу найти ошибку - C++
#include&lt;iostream&gt; #include&lt;conio.h&gt; #include&lt;stdlib.h&gt; #include&lt;stdio.h&gt; #include&lt;time.h&gt; using namespace std; void...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.12.2013, 12:53
Привет! Вот еще темы с ответами:

Найти ошибку в программе: в visual studio выдает ошибку - C++
#include &lt;math.h&gt; #include &lt;conio.h&gt; #include &lt;iostream&gt; using namespace std; int main() { double x, E, ypred, y, S; ...

Прошу объяснить о ссылках,указателях,стрелке -> и двоеточиях :: очень прошу я не понял синтаксис - C++
Здравствуйте! Есть конкретно 4 типа: 1)стрелка (-&gt;) 2)указатели (*) 3)ссылки (&amp;) 4)2е двоеточий (::) а вопрос:что они собой...

Я не прошу писать мне код, я прошу подсказать мне, что за структура требуется в задании - C++
Написать программу для работы по запросам оператора с приоритетной очередью запросов. Куча отображается в память двоичным деревом. ...

Найти слова, повторяющиеся более одного раза, не могу найти ошибку - C++
#include &lt;iostream&gt; using namespace std; void obr1(char **s, char **mas, int n, int m) { int i; int k; char *tm; for(i...


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

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

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