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

Динамическое выделение памяти(параллельное программирование). - C++

Восстановить пароль Регистрация
 
nelson1992
3 / 3 / 0
Регистрация: 21.10.2009
Сообщений: 77
05.12.2011, 20:55     Динамическое выделение памяти(параллельное программирование). #1
У меня задание:

Коллективные операции. Головная машина построчно загружает с консоли квадратную матрицу. Пусть для простоты размерность матрицы кратна числу машин. Головная машина раздает матрицу всем машинам в коллективе (каждой – свое подмножество строк). Реализовать транспонирование уже распределенной матрицы.

Вот моя программа.
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
#include "mpi.h"
#include <stdio.h>
#include<stdlib.h>
int main(int argc, char **argv) {
int numtasks, rank, source=0, dest, tag=1, i, j, el;
int *b = (int*)calloc(1, sizeof(*b));
int **a;
MPI_Status stat;
MPI_Datatype columntype;
MPI_Init(&argc,&argv);
MPI_Comm_rank(MPI_COMM_WORLD, &rank);
MPI_Comm_size(MPI_COMM_WORLD, &numtasks);
  if (rank == 0) {
       a = (int **)calloc(numtasks, sizeof(*a)); 
       for(i = 0; i < numtasks; ++i){
       a[i] = (int*)calloc(numtasks, sizeof(*a[i]));}
       b = (int*)realloc(b, numtasks*sizeof(*b));
       for(i=0;i<numtasks;i++)
       {
            for(j=0;j<numtasks;j++)
            {
              printf("Vvedi a[%d][%d] = ",i,j);
              scanf("%d",&el);
              a[i][j]=el;
            }
       }
MPI_Type_vector(numtasks, 1, numtasks, MPI_INT, &columntype);
MPI_Type_commit(&columntype);
 
       for (i=0; i<numtasks; i++) 
           MPI_Send(&a[0][i], 1, columntype, i, tag, MPI_COMM_WORLD);
       }
  MPI_Recv(b, numtasks, MPI_INT, source, tag, MPI_COMM_WORLD, &stat);
  printf("rank= %d  b= %d %d %d\n",rank,b[0],b[1],b[2]);
MPI_Finalize();
return 0;
}
Почти все работает...не могу разобраться с выделением памяти под массив.Должно выводить:

rank= 0 b= 1 4 7
rank= 1 b= 2 5 8
rank= 2 b= 3 6 9

А выводит

rank= 0 b= 1 12 6
rank= 1 b= 2 4 12
rank= 2 b= 3 5 7

Что-то не правильно работает...помогите разобраться...

Добавлено через 3 часа 10 минут
помогите...
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.12.2011, 20:55     Динамическое выделение памяти(параллельное программирование).
Посмотрите здесь:

Динамическое выделение памяти C++
Динамическое выделение памяти C++
C++ динамическое выделение памяти
C++ Динамическое выделение памяти
C++ динамическое выделение памяти
Динамическое выделение памяти C++
Динамическое выделение памяти C++
C++ Динамическое выделение памяти

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

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

Текущее время: 01:38. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru