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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 23.10.2012, 14:57   #1
Symple me
Пользователь
 
Аватар для Symple me
 
Регистрация: 09.10.2012
Сообщений: 47
Вопрос Распараллеливание транспонирования матрицы

Здравствуйте! Не подскажите, в чем ошибка? Нужно транспонировать матрицу.
int main(int argc, char ** argv)
{
MPI_Init(&argc, &argv);
int p;
int rank;
MPI_Comm_size(MPI_COMM_WORLD,&p);
int A[p][p],B[p][p],C[p], D[p];
srand (time(NULL));
MPI_Comm_rank(MPI_COMM_WORLD, &rank);
if (rank==0)
{
for (int i=0; i<p; i++)
{
for (int j=0; j<p; j++)
{
A[i][j]=rand()%100;
cout<<A[i][j]<<" ";
}
cout<<endl;
}
}
MPI_Scatter(&A,p,MPI_INT,&D,p,MPI_I NT,0,MPI_COMM_WORLD);
MPI_Alltoall(&D,p,MPI_INT,&C,p,MPI_ INT,MPI_COMM_WORLD);
MPI_Allgather(&C,p,MPI_INT,&B,p,MPI _INT,MPI_COMM_WORLD);
for (int i=0; i<p; i++)
{
for (int j=0;j<p;j++)
cout<<B[i][j]<<" ";
cout<<endl;
}
MPI_Finalize();
getch();
return 0;
}
Массив С почему-то мусором заполняется.
There are 10 types of people: those who understand binary and those who don't.
Symple me вне форума Ответить с цитированием
Старый 23.10.2012, 16:30   #2
three_cats
Форумчанин
 
Аватар для three_cats
 
Регистрация: 27.09.2012
Сообщений: 175
Подмигивание

Код:
#include <iostream>
#include <locale>
#include <conio.h>
#include <time.h>

using namespace std;

int main() {
    
setlocale(LC_ALL,"Russian");

const int MATRIX_RANGE = 5;

srand(static_cast<unsigned> (time(NULL)));

int a[MATRIX_RANGE][MATRIX_RANGE];

for (int i = 0; i <= MATRIX_RANGE; i++ )
    for (int j = 0; j < MATRIX_RANGE; j++)
        a[i][j] = rand() % 70 + 10;


cout << "Матрица: " << endl;
for (int i = 0; i < MATRIX_RANGE; i++ )
    for (int j = 0; j <= MATRIX_RANGE; j++)
        if (j == MATRIX_RANGE) cout << endl;  else cout << a[i][j] << " ";

cout << endl << "Транспонированная матрица: " << endl;
for (int i = 0; i < MATRIX_RANGE; i++ )
    for (int j = 0; j <= MATRIX_RANGE; j++)
        if (j == MATRIX_RANGE) cout << endl;  else cout << a[j][i] << " ";



cout << "Нажмите любую клавишу для продолжения...";
_getch();
return 0;    

}
В чем проблема?
Никто

мой блог
three_cats вне форума Ответить с цитированием
Старый 24.10.2012, 12:53   #3
Symple me
Пользователь
 
Аватар для Symple me
 
Регистрация: 09.10.2012
Сообщений: 47
По умолчанию

Спасибо) просто нужно распараллелить транспонирование матрицы, используя функцию MPI_Alltoall.
There are 10 types of people: those who understand binary and those who don't.
Symple me вне форума Ответить с цитированием
Старый 24.10.2012, 16:28   #4
three_cats
Форумчанин
 
Аватар для three_cats
 
Регистрация: 27.09.2012
Сообщений: 175
Радость

Цитата:
Сообщение от Symple me Посмотреть сообщение
Спасибо) просто нужно распараллелить транспонирование матрицы, используя функцию MPI_Alltoall.
А Ясно Ну я так потом и понял!
Никто

мой блог
three_cats вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Распараллеливание программы (C++) Lamaro Помощь студентам 5 04.10.2012 21:50
Распараллеливание процессов Zooleen Общие вопросы C/C++ 0 16.06.2010 16:59
функция транспонирования матрицы,Builder C++ lamer74 Помощь студентам 2 05.12.2009 17:23
функция транспонирования матрицы lamer74 Общие вопросы C/C++ 0 05.12.2009 10:56
Функция транспонирования матрицы в C++ Dront Помощь студентам 3 13.12.2007 11:03