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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 4.70
Student[ka]
Сообщений: n/a
#1

Программа на MPI модуле - C++

01.12.2010, 15:52. Просмотров 1213. Ответов 0
Метки нет (Все метки)

Здравствуйте! Дана такая задачка следующего вида:
q = max(3*MA+5*MB)
где MA, MB – матриці размером NxM.
Числа N та M задаются пользователем . Все элемент матрицы заполнить целыми числа в диапазоне [-5;5].
Количество узлов 4. Написать паралельную программу с помощью модулей PTHRead & MPI.
Эту программу надо написать с помощью MPI.
Мучала прошлую ночь.. ну ничего не получается..

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
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
#include <windows.h>
#include <time.h>
#include <mpi.h>
#include <iostream>
#define comm MPI_COMM_WORLD
using namespace std;
int i,j,k,N,M,a,b,rank,maxi;
int MA[100][100],MB[100][100],MAX[100],MQ[100][100];
static MPI_Status status;
 int  size=4;
 
 
 
int main(int argc, char *argv[])
{
  
    
    MPI_Init(&argc, &argv);
    MPI_Comm_rank(comm, &rank);
 
if (rank == 0) { 
    cout<<"Введите количество строк матрицы кратно 4 = ";
    cin>>N;
    cout<<'\n';
    cout<<"Введите количество столбцов матрицы = ";
    cin>>M;  
    system("cls");
    
         for(i=1;i<size;i++)
         { MPI_Send(&N, 1, MPI_INT, i, 1, MPI_COMM_WORLD);
           MPI_Send(&M, 1, MPI_INT, i, 1, MPI_COMM_WORLD);
           }
             a=3*rank;
             b=3*rank+N/size;         
            
             for (i=a;i<=b;i++)
             for (j=1;j<=M;j++)
             MA[i][j]=rand() %11-5;           
 
             for (i=a;i<=b;i++)
             for (j=1;j<=M;j++)
             MB[i][j]=rand() %11-5;
 
             for(i=a; i<=b; i++)
                  {
                      for(j=1; j<=M; j++)
                      {
                       MQ[i][j]=3*MA[i][j]+5*MB[i][j];
                      }     
                  }
               
              MAX[rank]=MQ[a][1];
              for(i=a; i<=b; i++)
                 {
                     for(j=1; j<=M; j++)
                     if (MAX[rank]<MQ[i][j])
                     MAX[rank]=MQ[i][j];
                 }
    } else {
           MPI_Recv(&N, 1, MPI_INT, 0, 1, MPI_COMM_WORLD, &status);
           MPI_Recv(&M, 1, MPI_INT, 0, 1, MPI_COMM_WORLD, &status);
             
             a=3*rank;
             b=3*rank+N/size;         
            
             for (i=a;i<=b;i++)
             for (j=1;j<=M;j++)
             MA[i][j]=rand() %11-5;           
 
             for (i=a;i<=b;i++)
             for (j=1;j<=M;j++)
             MB[i][j]=rand() %11-5;
 
             for(i=a; i<=b; i++)
                  {
                      for(j=1; j<=M; j++)
                      {
                       MQ[i][j]=3*MA[i][j]+5*MB[i][j];
                      }     
                  }
              MAX[rank]=MQ[a][1];
              for(i=a; i<=b; i++)
                 {
                     for(j=1; j<=M; j++)
                 if (MAX[rank]<MQ[i][j])
                     MAX[rank]=MQ[i][j];
                 }
              MPI_Send(&MQ, (b-a)*M, MPI_INT, 0, 1, MPI_COMM_WORLD);   
              MPI_Send(&MAX, 1, MPI_INT, 0, 1, MPI_COMM_WORLD);    
}   
       if (rank == 0) 
       for(i=1;i<size;i++)
      {  MPI_Recv(&MAX, 1, MPI_INT, 0, 1, MPI_COMM_WORLD, &status);
         MPI_Recv(&MQ, 1, MPI_INT, 0, 1, MPI_COMM_WORLD, &status);  }
       
       for (i=0;i>size;i++)
        if (maxi<MAX[i])
        maxi=MAX[i];
         
  MPI_Finalize();
  cout<<"Матрица A"<<'\n';
  for (i=1;i<=N;i++)
  {
      for (j=1;j<=M;j++)
      cout<<MA[i][j]<<' ';
      cout<<'\n';
  }         
  cout<<'\n'; 
  cout<<"Матрица В"<<'\n';
  for (i=1;i<=N;i++)
  {
      for (j=1;j<=M;j++)
      cout<<MB[i][j]<<' ';
      cout<<'\n';
  }
  cout<<'\n';
 cout<<"Матрица Q"<<'\n';
  
  for (i=1;i<=N;i++)
  {
      for (j=1;j<=M;j++)
      cout<<MQ[i][j]<<' ';
      cout<<'\n'; 
  } 
     
       cout<<'\n';
 
 
 cout<<"Максимальный элемент="<<Maxi<<'\n';    
cin.get();    
cin.get();
    return 0;
}


Вот чет накатала.. ну не работает.. Буду безумно благодарна если подскажите и дадите пару советиков.. после завтра сдавать курсак над...

З.Ы. За синтаксис сильно не ругать.. я 2 месяц только вижу С++ и 2 ночь модуль MPI ...

Добавлено через 13 часов 13 минут
Мне б пару идей в чем проблема могла б быть.. сама б переделала..
Эх..
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.12.2010, 15:52
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Программа на MPI модуле (C++):

MPI программа - C++
Подскажите пожалуйста как исправить ошибку.

Параллельная программа для метода холецкого с помощью openMp и mpi - C++
Товарищи,помогите пожалуйста с параллельным программированием: надо написать параллельную программу для метода холецкого с помощью openMp...

MPI - C++
Подскажите пожалуйста что не так то, программа не работает, только при исполнении выдаёт ошибки. #include &lt;iostream&gt; #include &lt;ctime&gt; ...

MPI - C++
Всем добрый день! Извиняюсь за нахальство - у меня аж три вопроса и практически полное...(незнание?):-[ 1)Метод Гаусса для решения СЛАУ...

mpi суммирование - C++
Привет! Такой вопрос. Никак не могу додуматься до реализации такого фрагмента кода. Есть несколько потоков, для каждого из них есть...

С++ с распараллеливанием MPI - C++
Добрый день! Мне очень нужна ваша помощь. Задали написать программу &quot;Метод трапеций для вычисления определенного интеграла&quot;. Сложность в...

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

Компиляция MPI - C++
Доброго времени суток всем, даже не знаю где создать тему, но так как программа написана на с++ решил здесь. В общем вопрос следующий: как...

Установка MPI - C++
Ребята помогите с установкой MPI на VS 2012, уже куча всего по устанавливал, прописал все пути в проекте, всё равно не видит....

MPI в проекте VS - C++
Поставил все для MPI, использовал MPINCH2, установил все вроде правильно, в свойствах проэекта VS все прописано, но при запуске тестовой...

MPI в VS 2012 - C++
Здраствуйте, у меня возникла проблема с настройкой библиотеки &quot;mpi.h&quot; студия 2012 стоит. Гуглил, настроики облазил, только хуже сделал(( ...


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

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

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