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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 07.11.2010, 21:35   #1
Раймир
 
Регистрация: 15.08.2008
Сообщений: 7
По умолчанию перемножение матриц в MPI коллективными функциями

MPI только начали учить..литературы мало...а проги требуют..че то вроде как должно было бы работать...но -нет!!!помогите пожалуйста..что тут не так.
даны две квадратные матрицы и их нужно перемножить на p процессах(в данном примере пока пользую 2 процесса с 2X2 матрицой) MPI_Bcast ом передаю матрицу one по разным процессам,куски перемножаю,а ответ собираю "совком" Gather...вот код
Код:
#include <iostream>
#include <mpi.h>
 
using namespace std;
 
 
int main(int argc, char *argv[])
{
const int n = 2;
int one[n][n] = {{2,3},
                 {5,-7}};
int two[n][n]=   {{-1,2},
                 {-2,3}};
int answ[n][n];
int a[n][n];
int i, j, o, x,i1,i2,k;
int rank,size;
MPI_Status st;
MPI_Init(&argc, &argv);
MPI_Comm_size(MPI_COMM_WORLD, &size);
MPI_Comm_rank(MPI_COMM_WORLD,&rank);
 
MPI_Bcast(one, n*n, MPI_INT, 0, MPI_COMM_WORLD);
 
k = n / size;
 i1 = k *  rank;
 i2 = (k * rank)+1 ;
if ( rank == size-1 ) i2 = n;
 
for (i=i1; i<i2; i++)
for (j=0; j<n; j++)
{
   x=0;
     for (o=0; o<n; o++)
       x=x+(one[i][o])*(two[o][j]);
        answ[i][j]=x;
                cout<<" x: "<<answ[i][j]<<" rank : "<<rank;
 
}
 
 
MPI_Gather(&answ,n*n,MPI_INT,&a,n*n,MPI_INT,0,MPI_COMM_WORLD);
 
 
if ( rank == 0 ) {
     cout<<"Proizvedenie matritc ravno: \n"; 
         for (i=0; i<n; i++)
            {
             for (j=0; j<n; j++)
             cout<<a[i][j]<<" ";
               cout<<endl;
                } 
 } 
 
 
MPI_Finalize();
return 0;
}
И вот че получается
x: -8 rank : 0 x: 13 rank : 0Proizvedenie matritc ravno:
-8 13
-858993460 -858993460
x: 9 rank : 1 x: -11 rank : 1

видите...массив заполнен...а вывести полностью матрицу он не может.тока до половины!

помогите чем можете плиз!!!
Раймир вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Перемножение матриц superkot Общие вопросы C/C++ 4 13.04.2010 20:55
Перемножение матриц Elysey Общие вопросы C/C++ 3 15.03.2010 20:18
Перемножение матриц stscolt Помощь студентам 0 09.10.2009 16:54
Перемножение матриц Blad47 Общие вопросы C/C++ 1 02.02.2009 00:21
Перемножение матриц Арина Помощь студентам 1 18.05.2007 19:21