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

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

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

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

24.12.2013, 12:53. Просмотров 158. Ответов 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;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.12.2013, 12:53     Прошу найти ошибку
Посмотрите здесь:

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

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

прошу помощи, не могу найти ошибку - 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...

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

Найти ошибку - C++
Добрый день. Есть задача с codeforces (условие). Вот моё решение: #include &lt;iostream&gt; #include &lt;vector&gt; using namespace std; ...

Найти ошибку - C++
Необходимо удалить элементы массива, находящихся в данном промежутке #include &lt;cstdlib&gt; #include &lt;cmath&gt; #include &lt;iostream&gt; ...

найти ошибку! - C++
вот код программы #include &quot;stdafx.h&quot; #include &lt;iostream&gt; #include &lt;stdio.h&gt; #include &lt;conio.h&gt; #include &lt;algorithm&gt; ...

Найти ошибку - C++
#include &lt;vcl.h&gt; #include &lt;vcl.h&gt; #include &lt;conio.h&gt; #include &lt;iostream.h&gt; #include &lt;windows.h&gt; float determ(float **M, int...

Найти ошибку - C++
#include &lt;vcl.h&gt; #include &lt;iostream.h&gt; #include &lt;conio.h&gt; #include &lt;stdio.h&gt; #include &lt;stdlib.h&gt; #pragma hdrstop class...


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

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

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