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

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

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

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

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

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

Код
#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
mpi суммирование C++
[MPI] Ошибки линковки C++
C++ MPI и scanf в С++
C++ Установка библиотеки MPI
Книги по MPI для C++ C++
MPI C++
MPI процессы C++
MPI в VS 2012 C++
C++ Установка MPI
MPI в проекте VS C++
MPI программа C++

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

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

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