Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Visual C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 28.04.2014, 22:58   #1
lamer811
 
Регистрация: 12.08.2010
Сообщений: 8
По умолчанию Сложение матриц: Гибридное программирование MPI + OpenMP

Доброго времени суток
Есть задача, которую необходимо решить путём гибридного программирования
При распараллеливании в функции MPI_Scatter возможно неправильно передаются строки, а скорее всего передаётся только первая строка, подскажите, где я допустил ошибку?

PHP код:
#include "stdafx.h"
#include <stdio.h>
#include <conio.h>
#include <string>
#include <iostream>
#include <omp.h>
#include <mpi.h>
#include <stdlib.h>


using namespace std;

void outMatrix(int *matrixint n)
{
     for (
int i=0;i<n;i++)
       {
           for (
int j=0;j<n;j++)
           {
               
cout << matrix[i*n+j] << " ";
           }
           
cout << endl;
     }
     
cout << endl;
}

int main(int argccharargv[])  {    
    
    
int n 3;
    
int i;

    
int *= new int [n*n];
    
int *= new int [n*n];
    
int *= new int [n*n];

    
int *bufa = new int [n];
    
int *bufb = new int [n];
    
int *bufc = new int [n];

    for (
int i=0;i<n;i++) {
           for (
int j=0;j<n;j++) {
               
a[i*n+j] = rand()%3;
               
b[i*n+j] = rand()%3;
           }
     }

    
int sizerank;
    
int sum;

    
MPI_Init (& argc ,& argv );
    
MPI_Comm_size MPI_COMM_WORLD ,& size );
    
MPI_Comm_rank MPI_COMM_WORLD ,& rank );

    
MPI_Bcast (&n1MPI_INT 0MPI_COMM_WORLD );
    
MPI_Scatter(anMPI_INTbufanMPI_INT0MPI_COMM_WORLD);
    
MPI_Scatter(bnMPI_INTbufbnMPI_INT0MPI_COMM_WORLD);
    


    if (
rank == 0) {
        
cout << "A" << endl;
        
outMatrix(a,n);
        
cout << "B" << endl;
        
outMatrix(b,n);
        
    }

    
omp_set_num_threads(n);

    
#pragma omp parallel for private(i)
    
for(i=0;i<n;i++)
    {
        
bufc[i]=bufa[i]+bufb[i];
        
cout << "bufa[" << << "] = " << bufa[i] << endl;
        
cout << "bufb[" << << "] = " << bufb[i] << endl;
    }
    
    
MPI_Gather(bufcnMPI_INTcnMPI_INT0MPI_COMM_WORLD);
    
    if (
rank == 0) {
       
cout << "Result " << endl;
        for (
int i=0;i<n;i++)
       {
           for (
int j=0;j<n;j++)
           {
            
cout << c[i*n+j] << " ";
           }
            
cout << endl;
        }
        
cout << endl;
    }
    
MPI_Finalize ();
    
getch();

В результате получается, что первые строки про суммировались, а остальные нет

Последний раз редактировалось lamer811; 28.04.2014 в 23:10.
lamer811 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
OpenMP MPI::Init помогите разобраться с аргументами VedyNN Общие вопросы C/C++ 9 10.04.2014 12:02
Умножение матриц.Производительность.OpenMP(C+ +) Icy_Wind Общие вопросы C/C++ 2 12.04.2013 03:07
Необходимо переделать программу из MPI в OpenMP MrViperTNU Помощь студентам 0 04.04.2012 16:09
Распараллеливание кусочка кода на Си (MPI && openMP) Quew Общие вопросы C/C++ 0 02.02.2012 19:38
Параллельная программа для метода холецкого с помощью openMp и mpi игоревна Помощь студентам 0 06.06.2009 20:47